DSP處理器與通用處理器的比較
DSP處理器與通用處理器的比較
1 對密集的乘法運算的支持
GPP不是設計來(lái)做密集乘法任務(wù)的,即使是一些現代的GPP,也要求多個(gè)指令周期來(lái)做一次乘法。而DSP處理器使用專(zhuān)門(mén)的硬件來(lái)實(shí)現單周期乘法。DSP處理器還增加了累加器寄存器來(lái)處理多個(gè)乘積的和。累加器寄存器通常比其他寄存器寬,增加稱(chēng)為結果bits的額外bits來(lái)避免溢出。
同時(shí),為了充分體現專(zhuān)門(mén)的乘法-累加硬件的好處,幾乎所有的DSP的指令集都包含有顯式的MAC指令。
2 存儲器結構
傳統上,GPP使用馮.諾依曼存儲器結構。這種結構中,只有一個(gè)存儲器空間通過(guò)一組總線(xiàn)(一個(gè)地址總線(xiàn)和一個(gè)數據總線(xiàn))連接到處理器核。通常,做一次乘法會(huì )發(fā)生4次存儲器訪(fǎng)問(wèn),用掉至少四個(gè)指令周期。
大多數DSP采用了哈佛結構,將存儲器空間劃分成兩個(gè),分別存儲程序和數據。它們有兩組總線(xiàn)連接到處理器核,允許同時(shí)對它們進(jìn)行訪(fǎng)問(wèn)。這種安排將處理器存貯器的帶寬加倍,更重要的是同時(shí)為處理器核提供數據與指令。在這種布局下,DSP得以實(shí)現單周期的MAC指令。
還有一個(gè)問(wèn)題,即現在典型的高性能GPP實(shí)際上已包含兩個(gè)片內高速緩存,一個(gè)是數據,一個(gè)是指令,它們直接連接到處理器核,以加快運行時(shí)的訪(fǎng)問(wèn)速度。從物理上說(shuō),這種片內的雙存儲器和總線(xiàn)的結構幾乎與哈佛結構的一樣了。然而從邏輯上說(shuō),兩者還是有重要的區別。
GPP使用控制邏輯來(lái)決定哪些數據和指令字存儲在片內的高速緩存里,其程序員并不加以指定(也可能根本不知道)。與此相反,DSP使用多個(gè)片內存儲器和多組總線(xiàn)來(lái)保證每個(gè)指令周期內存儲器的多次訪(fǎng)問(wèn)。在使用DSP時(shí),程序員要明確地控制哪些數據和指令要存儲在片內存儲器中。程序員在寫(xiě)程序時(shí),必須保證處理器能夠有效地使用其雙總線(xiàn)。
此外,DSP處理器幾乎都不具備數據高速緩存。這是因為DSP的典型數據是數據流。也就是說(shuō),DSP處理器對每個(gè)數據樣本做計算后,就丟棄了,幾乎不再重復使用。
3 零開(kāi)銷(xiāo)循環(huán)
如果了解到DSP算法的一個(gè)共同的特點(diǎn),即大多數的處理時(shí)間是花在執行較小的循環(huán)上,也就容易理解,為什么大多數的DSP都有專(zhuān)門(mén)的硬件,用于零開(kāi)銷(xiāo)循環(huán)。所謂零開(kāi)銷(xiāo)循環(huán)是指處理器在執行循環(huán)時(shí),不用花時(shí)間去檢查循環(huán)計數器的值、條件轉移到循環(huán)的頂部、將循環(huán)計數器減1。
與此相反,GPP的循環(huán)使用軟件來(lái)實(shí)現。某些高性能的GPP使用轉移預報硬件,幾乎達到與硬件支持的零開(kāi)銷(xiāo)循環(huán)同樣的效果。
4 定點(diǎn)計算
大多數DSP使用定點(diǎn)計算,而不是使用浮點(diǎn)。雖然DSP的應用必須十分注意數字的精確,用浮點(diǎn)來(lái)做應該容易的多,但是對DSP來(lái)說(shuō),廉價(jià)也是非常重要的。定點(diǎn)機器比起相應的浮點(diǎn)機器來(lái)要便宜(而且更快)。為了不使用浮點(diǎn)機器而又保證數字的準確,DSP處理器在指令集和硬件方面都支持飽和計算、舍入和移位。
5 專(zhuān)門(mén)的尋址方式
DSP處理器往往都支持專(zhuān)門(mén)的尋址模式,它們對通常的信號處理操作和算法是很有用的。例如,模塊(循環(huán))尋址(對實(shí)現數字濾波器延時(shí)線(xiàn)很有用)、位倒序尋址(對FFT很有用)。這些非常專(zhuān)門(mén)的尋址模式在GPP中是不常使用的,只有用軟件來(lái)實(shí)現。
6 執行時(shí)間的預測
大多數的DSP應用(如蜂窩電話(huà)和調制解調器)都是嚴格的實(shí)時(shí)應用,所有的處理必須在指定的時(shí)間內完成。這就要求程序員準確地確定每個(gè)樣本需要多少處理時(shí)間,或者,至少要知道,在最壞的情況下,需要多少時(shí)間。
如果打算用低成本的GPP去完成實(shí)時(shí)信號處理的任務(wù),執行時(shí)間的預測大概不會(huì )成為什么問(wèn)題,應為低成本GPP具有相對直接的結構,比較容易預測執行時(shí)間。然而,大多數實(shí)時(shí)DSP應用所要求的處理能力是低成本GPP所不能提供的。
這時(shí)候,DSP對高性能GPP的優(yōu)勢在于,即便是使用了高速緩存的DSP,哪些指令會(huì )放進(jìn)去也是由程序員(而不是處理器)來(lái)決定的,因此很容易判斷指令是從高速緩存還是從存儲器中讀取。DSP一般不使用動(dòng)態(tài)特性,如轉移預測和推理執行等。因此,由一段給定的代碼來(lái)預測所要求的執行時(shí)間是完全直截了當的。從而使程序員得以確定芯片的性能限制。
7 定點(diǎn)DSP指令集
定點(diǎn)DSP指令集是按兩個(gè)目標來(lái)設計的:
使處理器能夠在每個(gè)指令周期內完成多個(gè)操作,從而提高每個(gè)指令周期的計算效率。
將存貯DSP程序的存儲器空間減到最?。ㄓ捎诖鎯ζ鲗φ麄€(gè)系統的成本影響甚大,該問(wèn)題在對成本敏感的DSP應用中尤為重要)。
為了實(shí)現這些目標,DSP處理器的指令集通常都允許程序員在一個(gè)指令內說(shuō)明若干個(gè)并行的操作。例如,在一條指令包含了MAC操作,即同時(shí)的一個(gè)或兩個(gè)數據移動(dòng)。在典型的例子里,一條指令就包含了計算FIR濾波器的一節所需要的所有操作。這種高效率付出的代價(jià)是,其指令集既不直觀(guān),也不容易使用(與GPP的指令集相比)。
GPP的程序通常并不在意處理器的指令集是否容易使用,因為他們一般使用象C或C++等高級語(yǔ)言。而對于DSP的程序員來(lái)說(shuō),不幸的是主要的DSP應用程序都是用匯編語(yǔ)言寫(xiě)的(至少部分是匯編語(yǔ)言?xún)?yōu)化的)。這里有兩個(gè)理由:首先,大多數廣泛使用的高級語(yǔ)言,例如C,并不適合于描述典型的DSP算法。其次,DSP結構的復雜性,如多存儲器空間、多總線(xiàn)、不規則的指令集、高度專(zhuān)門(mén)化的硬件等,使得難于為其編寫(xiě)高效率的編譯器。
即便用編譯器將C源代碼編譯成為DSP的匯編代碼,優(yōu)化的任務(wù)仍然很重。典型的DSP應用都具有大量計算的要求,并有嚴格的開(kāi)銷(xiāo)限制,使得程序的優(yōu)化必不可少(至少是對程序的最關(guān)鍵部分)。因此,考慮選用DSP的一個(gè)關(guān)鍵因素是,是否存在足夠的能夠較好地適應DSP處理器指令集的程序員。
8 開(kāi)發(fā)工具的要求
因為DSP應用要求高度優(yōu)化的代碼,大多數DSP廠(chǎng)商都提供一些開(kāi)發(fā)工具,以幫助程序員完成其優(yōu)化工作。例如,大多數廠(chǎng)商都提供處理器的仿真工具,以準確地仿真每個(gè)指令周期內處理器的活動(dòng)。無(wú)論對于確保實(shí)時(shí)操作還是代碼的優(yōu)化,這些都是很有用的工具。
GPP廠(chǎng)商通常并不提供這樣的工具,主要是因為GPP程序員通常并不需要詳細到這一層的信息。GPP缺乏精確到指令周期的仿真工具,是DSP應用開(kāi)發(fā)者所面臨的的大問(wèn)題:由于幾乎不可能預測高性能GPP對于給定任務(wù)所需要的周期數,從而無(wú)法說(shuō)明如何去改善代碼的性能。
微處理器(Microprocessor)的分類(lèi)
通用處理器(GPP)
采用馮.諾依曼結構,程序和數據的存儲空間合二而一
8-bit Apple(6502),NEC PC-8000(Z80)
8086/286/386/486/Pentium/Pentium II/ Pentium III
PowerPc 64-bit CPU(SUN Sparc,DEC Alpha, HP)
CISC 復雜指令計算機, RISC 精簡(jiǎn)指令計算機
采取各種方法提高計算速度,提高時(shí)鐘頻率,高速總線(xiàn),多級Cashe,協(xié)處理器等
Single Chip Computer/ Micro Controller Unit(MCU)
除開(kāi)通用CPU所具有的ALU和CU,還有存儲器(RAM/ROM)寄存器,時(shí)鐘,計數器,定時(shí)器,串/并口,有的還有A/D,D/A
INTEL MCS/48/51/96(98)
MOTOROLA HCS05/011
DSP
采用哈佛結構,程序和數據分開(kāi)存儲
采用一系列措施保證數字信號的處理速度,如對FFT的專(zhuān)門(mén)優(yōu)化
MCU與DSP的簡(jiǎn)單比較
MCU DSP
低檔 高檔 低檔 高檔
指令周期(ns) 600 40 50 5
乘加時(shí)間(ns) 1900 80 50 5
US$/MIPS 1.5 0.5 0.15 0.1
飛速發(fā)展的數字信號處理器
由于超大規模集成電路技術(shù)的迅猛發(fā)展,過(guò)去二十年中,數字信號處理技術(shù),即DSP(Digital Signal Processor)技術(shù)也得到了突飛猛進(jìn)的發(fā)展,這種發(fā)展趨勢在今后十年內仍將保持下去。據世界半導體貿易統計組織發(fā)布的統計與預測報告,2001~2006年可編程DSP市場(chǎng)的預期增長(cháng)率為27.2%。預期2006年DSP市場(chǎng)將達到141.9億美元,且增長(cháng)率是逐年遞增的,2005年的增長(cháng)率預期為34%。到2010年,DSP芯片的集成度將會(huì )提高11倍,單個(gè)芯片上將會(huì )集成5億只晶體管。目前DSP的生產(chǎn)工藝正在由0.35μm轉向0.25μm、0.18μm、0.13μm,到2005年可能達到0.075μm。
集成度的提高使得硅片的面積進(jìn)一步縮小,從而導致DSP芯片成本降低,價(jià)格下降。價(jià)格下降促使需求的上升和應用領(lǐng)域的擴展。DSP已從軍用轉向民用,在計算機、通信、消費類(lèi)電子產(chǎn)品方面即所謂3C領(lǐng)域得到了廣泛的應用。DSP在通信領(lǐng)域應用最多,占72%,計算機占3%,消費類(lèi)、辦公自動(dòng)化各占2%,從趨勢上看,工業(yè)(特別是變頻電機控制)中的應用,以及消費類(lèi)產(chǎn)品中應用的份額會(huì )有所上升。
在通信領(lǐng)域,DSP產(chǎn)品涵蓋了從3G無(wú)線(xiàn)基站到無(wú)線(xiàn)局域網(wǎng)的廣泛應用,數字化電視也離不開(kāi)DSP。DSP在語(yǔ)言處理中的應用也是盡人皆知的,包括語(yǔ)言的壓縮與解壓,語(yǔ)言的合成,語(yǔ)言的識別等。
計算機的硬盤(pán)驅動(dòng)器在使用DSP技術(shù)以后可大大提高存取速度,提高容量和縮小體積,以至于今后有可能用于掌上電腦。在PC機中,DSP可加速圖形處理功能。以后的PC機,可能每臺PC中含有不只一顆DSP芯片。在計算機外設中,激光打印機、掃描儀、光盤(pán)機等需要大量數據傳輸的設備,都有可能用到DSP技術(shù)。
DSP技術(shù)發(fā)展的另一趨勢是速度更快,功耗更低,DSP片外的速度能達到幾十兆赫已經(jīng)近于極限,為了降低系統的噪聲,提高系統抗干擾能力,片外時(shí)鐘有進(jìn)一步降低的趨勢,即外部使用幾兆赫的振蕩器就夠了,而片內則用壓控振蕩器加鎖相環(huán)的技術(shù),把片內時(shí)鐘速度提高到100MHz、200MHz乃至更高,會(huì )有更多的DSP片內時(shí)鐘達到1GHz。預期到2010年,同類(lèi)水平的DSP的功耗將降到原來(lái)的1/3。
DSP與CPU
如果用普通計算機中的CPU來(lái)處理算法,做乘法和加法都要調用相應的乘法、加法函數,如果是浮點(diǎn)數運算,通常CPU需要將浮點(diǎn)運算交給協(xié)處理處理,雖然協(xié)處理器的浮點(diǎn)運算速度可能很快,但加上CPU將輸入參數傳出,再將運算結果取回的時(shí)間,會(huì )顯得速度很慢;做循環(huán)時(shí),要有循環(huán)變量,每次循環(huán)變量加1后再判斷是否已經(jīng)循環(huán)了n次,這一過(guò)程是比較慢的。
而DSP則在硬件設計上針對這類(lèi)計算采取了一些獨特的設計,以求最快的運算速度,以至于趨于模擬電路的延遲時(shí)間。
DSP能在一個(gè)時(shí)鐘周期內完成乘法和加法運算,并能并行地同時(shí)將下面運算要用到的兩個(gè)參數傳入相應的運算用寄存器。在乘法及乘加指令的執行方式上,DSP的小數乘法在算法上分定點(diǎn)算法DSP與浮點(diǎn)算法DSP。在定點(diǎn)類(lèi)DSP中,小數點(diǎn)的位置是固定的,不論定點(diǎn)的DSP還是浮點(diǎn)的DSP,乘法器都是用硬件邏輯完成的,乘法可以在一個(gè)指令周期內完成。
在循環(huán)方面,DSP有諸如重復n次(Repeat n),或循環(huán)n次(DO Loop n)等指令,使DSP能迅速完成n次循環(huán),而不必每次都檢查是不是已經(jīng)循環(huán)n次了。這就是DSP在做數字信號處理方面的優(yōu)勢與獨到之處。也是DSP區別于CPU的地方。
DSP與CPU在結構方面的另一區別是,DSP往往采用哈佛結構,而傳統的CPU多為馮.諾曼結構(Von Neuman)。馮.諾曼結構指的是將程序與數據統一編址,不區分存儲器的程序空間和數據空間。而哈佛結構指將程序空間與數據空間分開(kāi)編址,這樣在DSP處理數據空間運算與數據傳輸的同時(shí)可以并行地從程序空間讀取下一條指令。采用哈佛結構,將程序空間與數據空間分開(kāi)編址的好處是速度快,讀程序和讀寫(xiě)數據可以同時(shí)進(jìn)行。
DSP在內核設計方面還有一個(gè)特點(diǎn)是采用多重流水線(xiàn)結構,流水線(xiàn)結構的層次深度可以從3級到6級。程序的執行過(guò)程大致可分為讀指令、指令譯碼、指令執行等幾個(gè)階段。DSP在第一個(gè)時(shí)鐘周期內讀第一條指令,在第二個(gè)周期譯碼第一條指令同時(shí)在第二個(gè)周期內讀入第二條指令,在第三個(gè)時(shí)鐘周期內執行第一條指令,譯碼第二條指令,同時(shí)讀入第三條指令,這樣雖然執行一條指令仍需要三個(gè)周期,可是由于并行的流水線(xiàn)處理,看起來(lái)好像每條指令都是在一個(gè)周期內完成的,這就是流水線(xiàn)結構。
DSP的特點(diǎn)
DSP在體系結構上與通用微處理器有很大的區別。下面是幾個(gè)關(guān)鍵的不同點(diǎn):
單周期指令:大多數DSP都擁有流水結構,它可以在一個(gè)時(shí)鐘周期內執行一條語(yǔ)句。
快速乘法器:信號處理算法往往大量用到乘加(multiply-accumulate,MAC)運算。DSP有專(zhuān)用的硬件乘法器,它可以在一個(gè)時(shí)鐘周期內完成MAC運算。硬件乘法器占用了DSP芯片面積的很大一部分。(與之相反,通用微處理器采用一種較慢的、迭代的乘法技術(shù),它可以在多個(gè)時(shí)鐘周期內完成一次乘法運算,但是占用了較少了硅片資源)。
多總線(xiàn):DSP有分開(kāi)的代碼和數據總線(xiàn)(一般用術(shù)語(yǔ)“哈佛結構”表示),這樣在同一個(gè)時(shí)鐘周期內可以進(jìn)行多次存儲器訪(fǎng)問(wèn)——這是因為數據總線(xiàn)也往往有好幾組。有了這種體系結構,DSP就可以在單個(gè)時(shí)鐘周期內取出一條指令和一個(gè)或者兩個(gè)(或者更多)的操作數。
地址發(fā)生器:DSP有專(zhuān)用的硬件地址發(fā)生單元,這樣它可以支持許多信號處理算法所要求的特定數據地址模式。這包括前(后)增(減)、環(huán)狀數據緩沖的模地址以及FFT的比特倒置地址。地址發(fā)生器單元與主ALU和乘法器并行工作,這就進(jìn)一步增加了DSP可以在一個(gè)時(shí)鐘周期內可以完成的工作量。
硬件輔助循環(huán):信號處理算法常常需要執行緊密的指令循環(huán)。對硬件輔助循環(huán)的支持,可以讓DSP高效的循環(huán)執行代碼塊而無(wú)需讓流水線(xiàn)停轉或者讓軟件來(lái)測試循環(huán)終止條件。
數據格式:除了標準的整數型格式外,DSP一般支持定點(diǎn)和(或)浮點(diǎn)數。對數據格式和精度的選擇取決于應用程序所需,例如:
16位定點(diǎn)DSP可以滿(mǎn)足語(yǔ)音信號處理和控制所需
24位和32位定點(diǎn)DSP可以滿(mǎn)足高質(zhì)量音頻信號處理所需
32位浮點(diǎn)DSP可以滿(mǎn)足圖形和圖像處理所需
DSP的特點(diǎn):
DSP處理器采用哈佛結構和改進(jìn)的哈佛結構。
哈佛結構就是將程序代碼和數據的存儲空間分開(kāi),各有自己的地址和數據總線(xiàn)。之所以采用哈佛結構,是為了并行進(jìn)行指令和數據處理,從而可以大大地提高運算的速度。為了進(jìn)一步提高信號處理的效率,在哈佛結構的基礎上,又加以改善。使得程序代碼和數據存儲空間之間可以進(jìn)行數據的傳輸,稱(chēng)為改善的哈佛結構。
采用流水技術(shù)。
流水技術(shù)是將各指令的各個(gè)步驟重疊起來(lái)執行。DSP處理器所采用的將程序存儲空和數據存儲空間的地址與數據總線(xiàn)分開(kāi)的哈佛結構,為采用流水技術(shù)提供了很大的方便。
為了提高DSP處理器的運算速度,它們無(wú)例外地設置了硬件乘法器,以及MAC(乘并且累加)一類(lèi)的指令。
DSP處理器都為DMA單獨設置了完全獨立的總線(xiàn)和控制器,這是和通用的CPU很不相同,其目的是在進(jìn)行數據傳輸是完全不影響CPU及其相關(guān)總線(xiàn)的工作。
在DSP處理器中,設置了專(zhuān)門(mén)的數據地址發(fā)生器來(lái)產(chǎn)生所需的數據地址。數據地址的產(chǎn)生與CPU的工作是并行的,從而節省CPU的時(shí)間,提高信號的處理速度。
DSP處理器為了自身工作的需要和外部環(huán)境的協(xié)調工作。往往都設置了豐富的外設。如時(shí)鐘發(fā)生器。定時(shí)器等。
定點(diǎn)DSP處理器和浮點(diǎn)DSP處理器。定點(diǎn)DSP中經(jīng)常要考慮溢出問(wèn)題,在浮點(diǎn)DSP基本上可以不考慮。與定點(diǎn)DSP處理器相比,浮點(diǎn)DSP處理器的速度更快,尤其是作浮點(diǎn)運算。在實(shí)時(shí)性要求很到的場(chǎng)合。往往考慮浮點(diǎn)DSP處理器。而浮點(diǎn)DSP處理器的價(jià)格比較高,開(kāi)發(fā)難度更大。
為什么CCS需要安裝Driver?
CCS是開(kāi)放的軟件平臺,它可以支持不同的硬件接口,因此不同的硬件接口必須通過(guò)標準的Driver同CCS連接。
Driver安裝的常見(jiàn)問(wèn)題?
請認真閱讀“安裝手冊”和Driver盤(pán)中的Readme。 1)對于SEED-XDS,安裝Readme中的步驟,將I/O口設為240/280/320/340。 2)對于SEED-XDSPP,安裝Readme中的步驟,將I/O口設為378或278。3)對于SEED-XDSUSB,必須連接目標板,安裝Readme中的步驟,將I/O口設為A,USB連接后,主機將自動(dòng)激活相應的Driver。 4)對于SEED-XDSPCI,安裝Readme中的步驟,將I/O口設為240,PCI接口板插入主機后,主機將自動(dòng)激活相應的Driver。 5)對于Simulator,需要選擇不同的CFG文件,以模擬不同的DSP。 6)對于C5402 DSK,將I/O口設為請認真閱讀“安裝手冊”和Driver盤(pán)中的Readme。 1)對于SEED-XDS,安裝Readme中的步驟,將I/O口設為240/280/320/340。 2)對于SEED-XDSPP,安裝Readme中的步驟,將I/O口設為378或278。注意主機BIOS中并口的型式必須同xds510pp.ini中一致。 3)對于SEED-XDSUSB,必須連接目標板,安裝Readme中的步驟,將I/O口設為240/280/320/340,USB連接后,主機將自動(dòng)激活相應的Driver。 4)對于SEED-XDSPCI,安裝Readme中的步驟,將I/O口設為240/280/320/340,PCI接口板插入主機后,主機將自動(dòng)激活相應的Driver。 5)對于Simulator,需要選擇不同的CFG文件,以模擬不同的DSP。 6)對于C5402 DSK,將I/O口設為378或278。 7)對于C6211/6711 DSK,將I/O口設為378或278。 8)對于C6201/C6701 EVM,將I/O口設為0。
Link的cmd文件的作用是什么?
Link的cmd文件用于DSP代碼的定位。由于DSP的編譯器的編譯結果是未定位的,DSP沒(méi)有操作系統來(lái)定位執行代碼,每個(gè)客戶(hù)設計的DSP系統的配置也不盡相同,因此需要用戶(hù)自己定義代碼的安裝位置。以C5000為例,基本格式為:
-o sample.out
-m sample.map
-stack 100
sample.obj meminit.obj
-l rts.lib
MEMORY {
PAGE 0: VECT: origin = 0xff80, length 0x80
PAGE 0: PROG: origin = 0x2000, length 0x400
PAGE 1: DATA: origin = 0x800, length 0x400
}
SECTIONS {
.vectors : {} >PROG PAGE 0
.text : {} >PROG PAGE 0
.data : {} >PROG PAGE 0
.cinit : {} >PROG PAGE 0
.bss : {} >DATA PAGE 1
}
如何將OUT文件轉換為16進(jìn)制的文件格式?
DSP的開(kāi)發(fā)軟件集成了一個(gè)程序,可以從執行文件OUT轉換到編程器可以接受的格式,使得編程器可以用次文件燒寫(xiě)EPROM或Flash。對于C2000的程序為DSPHEX;對于C3x程序為HEX30;對于C54x程序為HEX500;對于C55x程序為HEX55;對于C6x程序為Hex6x。以C32為例,基本格式為:
sample.out
-x
-memwidth 8
-bootorg 900000h
-iostrb 0h
-strb0 03f0000h
-strb1 01f0000h
-o sample.hex
ROMS {
EPROM: org = 0x900000,len=0x02000,romwidth=8
}
SECTIONS {
.text: paddr="boot"
.data: paddr="boot"
}
評論