武乾文,馮 妍
(中國(guó)電子科技集團(tuán)公司第58研究所,江蘇 無(wú)錫,214035)
DSP(Digital Signal Processor)芯片,也稱數(shù)字信號(hào)處理器,是專門為快速實(shí)現(xiàn)各種數(shù)字信號(hào)處理算法而設(shè)計(jì)的、具有特殊結(jié)構(gòu)、進(jìn)行高速實(shí)時(shí)處理的專用微處理器,其處理速度要比最快的CPU還快10~50倍。DSP的典型特征有:每個(gè)處理周期能夠處理多條乘加操作,具有實(shí)時(shí)運(yùn)算能力、實(shí)時(shí)仿真能力和實(shí)時(shí)模擬能力,具有很強(qiáng)的通用性、很高的可靠性同時(shí)造價(jià)低廉。
隨著信息技術(shù)革命的深入和計(jì)算機(jī)技術(shù)的飛速發(fā)展,數(shù)字信號(hào)處理技術(shù)已經(jīng)逐漸發(fā)展成為一門關(guān)鍵的技術(shù)學(xué)科。業(yè)內(nèi)人士預(yù)言,DSP將是未來(lái)集成電路中發(fā)展最快的電子產(chǎn)品,它將徹底變革人們的工作、學(xué)習(xí)和生活方式。通過(guò)DSP運(yùn)算方法研究,可以更好地了解DSP結(jié)構(gòu)。
1982年,世界誕生了首枚商用D S P芯片TMS32010,它每秒能處理500萬(wàn)個(gè)指令(5 MIPS)。上世紀(jì)80年代中期,基于CMOS技術(shù)的第二代TMS320C20、TMS320C25 DSP芯片也應(yīng)運(yùn)而生,它的存儲(chǔ)容量和運(yùn)算速度都成倍提高,成了圖像、語(yǔ)音處理的基礎(chǔ)芯片。
上世紀(jì)90年代是DSP發(fā)展最為迅猛的時(shí)期,這主要表現(xiàn)在運(yùn)算速度進(jìn)一步加快,集成度進(jìn)一步提高,功能越來(lái)越強(qiáng)大,應(yīng)用領(lǐng)域越來(lái)越廣泛。1988年TI公司推出首款浮點(diǎn)DSP——TMS320C3X。1989年TI公司推出業(yè)界性能最高的定點(diǎn)DSP產(chǎn)品TMS320C5X。1990年TI公司推出第二代DSP架構(gòu)的浮點(diǎn)DSP產(chǎn)品TMS320C4X。在1996年TI公司推出TMS320F240。TMS320C6000系列是TI公司于上世紀(jì)90年代中后期推出的新一代DSP產(chǎn)品,它們是定點(diǎn)、浮點(diǎn)兼容的DSP序列,TI公司的浮點(diǎn)DSP C6713,頻率250MHz,浮點(diǎn)性能1.3GFLOPS。
全球DSP供應(yīng)商主要是幾家美國(guó)公司,如德州儀器(TI)、朗訊、模擬器件公司(ADI)、摩托羅拉等等。其中TI處于絕對(duì)領(lǐng)先的地位,占據(jù)了整個(gè)市場(chǎng)份額的45%,其余幾家所占份額分別是28%、12%、12%,而其他國(guó)家的企業(yè)只占到3%。
近10年來(lái),全球DSP產(chǎn)品向著高性能、低功耗、加強(qiáng)融合和拓展多種應(yīng)用的趨勢(shì)發(fā)展,DSP芯片成為各種電子產(chǎn)品尤其是通信類電子產(chǎn)品的技術(shù)核心。據(jù)TI預(yù)測(cè),到2012年,DSP芯片在單個(gè)芯片內(nèi)將能集成6億只晶體管。目前,對(duì)DSP爆炸性需求的時(shí)代已經(jīng)來(lái)臨,其主要應(yīng)用前景十分可觀。
早期的微處理器采用馮·諾依曼(Vo n-Neumann)結(jié)構(gòu),如圖1所示,其片內(nèi)程序空間和數(shù)據(jù)空間合在一起,取指令和取操作數(shù)都通過(guò)一條總線分時(shí)進(jìn)行。當(dāng)高速運(yùn)算時(shí),容易出現(xiàn)瓶頸。
DSP芯片的內(nèi)部采用程序和數(shù)據(jù)分開的哈佛結(jié)構(gòu),如圖2所示。它允許同時(shí)取指令(來(lái)自程序存儲(chǔ)器)和取操作數(shù)(來(lái)自數(shù)據(jù)存儲(chǔ)器),而且允許在程序空間和數(shù)據(jù)空間相互傳送數(shù)據(jù)。具有專門的硬件乘法器,廣泛采用流水線操作,提供特殊的DSP指令,可以用來(lái)快速實(shí)現(xiàn)各種數(shù)字信號(hào)處理算法。
圖1 馮·諾依曼(Von-Neumann)結(jié)構(gòu)
圖2 哈佛(Harvard)結(jié)構(gòu)
根據(jù)數(shù)字信號(hào)處理的要求,DSP芯片一般具有如下主要特點(diǎn):
(1)在一個(gè)指令周期內(nèi)可完成一次乘法和一次加法;
(2)程序和數(shù)據(jù)空間分開,可以同時(shí)訪問指令和數(shù)據(jù);
(3)片內(nèi)具有快速RAM,通??赏ㄟ^(guò)獨(dú)立的數(shù)據(jù)總線在兩塊中同時(shí)訪問;
(4)具有低開銷或無(wú)開銷循環(huán)及跳轉(zhuǎn)的硬件支持;
(5)快速的中斷處理和硬件I/O支持;
(6)具有在單周期內(nèi)操作的多個(gè)硬件地址產(chǎn)生器。
在定點(diǎn)DSP芯片中,采用定點(diǎn)數(shù)進(jìn)行數(shù)值運(yùn)算,其操作數(shù)一般采用整型數(shù)來(lái)表示。一個(gè)整型數(shù)的最大表示范圍取決于DSP芯片所給定的字長(zhǎng),一般為16位或24位。顯然,字長(zhǎng)越長(zhǎng),所能表示的數(shù)的范圍越大,精度也越高。以下以16位字長(zhǎng)為例。
DSP芯片的數(shù)以2的補(bǔ)碼形式表示。每個(gè)16位數(shù)用一個(gè)符號(hào)位來(lái)表示數(shù)的正負(fù),0表示數(shù)值為正,1則表示數(shù)值為負(fù)。其余15位表示數(shù)值的大小。因此二進(jìn)制數(shù)0010000000000011b=8195,二進(jìn)制數(shù)1111111111111100b=-4。
對(duì)DSP芯片而言,參與數(shù)值運(yùn)算的數(shù)就是16位的整型數(shù)。但在許多情況下,數(shù)學(xué)運(yùn)算過(guò)程中的數(shù)不一定都是整數(shù)。其中的關(guān)鍵就是由程序員來(lái)確定一個(gè)數(shù)的小數(shù)點(diǎn)處于16位中的哪一位。這就是數(shù)的定標(biāo)。
通過(guò)設(shè)定小數(shù)點(diǎn)在16位數(shù)中的不同位置,就可以表示不同大小和不同精度的小數(shù)了。數(shù)的定標(biāo)有Q表示法和S表示法兩種。表1列出了一個(gè)16位數(shù)的16種Q表示、S表示及它們所能表示的十進(jìn)制數(shù)值范圍。
表1 Q表示、S表示及數(shù)值范圍
從表1可以看出,同樣一個(gè)16位數(shù),若小數(shù)點(diǎn)設(shè)定的位置不同,它所表示的數(shù)也就不同。例如:16進(jìn)制數(shù)2000H,用Q0表示則等于8192,用Q15表示則等于0.25。
但對(duì)于DSP芯片來(lái)說(shuō),處理方法是完全相同的。
從表1還可以看出,不同的Q所表示的數(shù)不僅范圍不同,而且精度也不相同。Q越大,數(shù)值范圍越小,但精度越高;相反,Q越小,數(shù)值范圍越大,但精度就越低。例如,Q0的數(shù)值范圍是-32768到+32767,其精度為1,而Q15的數(shù)值范圍為-1到0.9999695,精度為 1/32768 = 0.00003051。因此,對(duì)定點(diǎn)數(shù)而言,數(shù)值范圍與精度是一對(duì)矛盾,一個(gè)變量要想能夠表示比較大的數(shù)值范圍,必須以犧牲精度為代價(jià);而想提高精度,則數(shù)的表示范圍就相應(yīng)地減小。
硬件乘法器是DSP的重要組成部分。乘法速度越快,DSP處理器的性能就越高。在通用的微處理器中,乘法指令是由一系列加法來(lái)實(shí)現(xiàn)的,故需許多個(gè)指令周期來(lái)完成。相比而言,DSP芯片的特征就是有一個(gè)專用的硬件乘法器。在TMS320系列中,由于具有專用的硬件乘法器,乘法可在一個(gè)指令周期內(nèi)完成。主要指令有:
其中三條指令用來(lái)將乘數(shù)裝入到乘法器電路(LT)、移動(dòng)數(shù)據(jù)(DMOV)以及將乘法結(jié)果(存在乘積寄存器P中)加到ACC中(APAC)。在典型的通用微處理器中,每個(gè)乘法需要30 ~ 40個(gè)指令周期,而TMS32010只需4條指令。如果采用特殊的DSP指令或采用 TMS320C6201等新一代的DSP芯片,可進(jìn)一步降低乘法的計(jì)算時(shí)間。
兩個(gè)定點(diǎn)數(shù)相乘時(shí)可以分為下列三種情況:(1)小數(shù)乘小數(shù)
兩個(gè)Q15的小數(shù)相乘后得到一個(gè)Q30的小數(shù),即有兩個(gè)符號(hào)位。一般情況下相乘后得到的滿精度數(shù)不必全部保留,只需保留16位單精度數(shù)。由于相乘后得到的高16位不滿15位的小數(shù)精度,為了達(dá)到15位精度,可將乘積左移1位,下面是上述乘法的程序:
(2)整數(shù)乘整數(shù)
(3)混合表示法
許多情況下,運(yùn)算過(guò)程中為了既滿足數(shù)值的動(dòng)態(tài)范圍又保證一定的精度,就必須采用Q0與Q15之間的表示法。比如,數(shù)值1.2345,顯然Q15無(wú)法表示,而若用Q0表示,則最接近的數(shù)是1,精度無(wú)法保證。因此,數(shù)1.2345最佳的表示法是Q14。
Q14的最大值不大于2,因此,兩個(gè)Q14數(shù)相乘得到的乘積不大于4。當(dāng)了解到上述乘積不會(huì)大于1.8,就可以用Q14數(shù)表示乘積,而不是理論上的最佳情況Q13。程序如下:
上述方法為了保證精度均對(duì)乘的結(jié)果舍位,結(jié)果所產(chǎn)生的誤差相當(dāng)于減去1個(gè)LSB(最低位)。采用簡(jiǎn)單的舍入方法,可使誤差減少二分之一。
乘的過(guò)程中,測(cè)試程序可不考慮溢出而只需調(diào)整運(yùn)算中的小數(shù)點(diǎn)。而加法則是一個(gè)更加復(fù)雜的過(guò)程。首先,加法運(yùn)算必須用相同的Q點(diǎn)表示;其次,程序員或者允許其結(jié)果有足夠的高位以適應(yīng)位的增長(zhǎng),或者必須準(zhǔn)備解決溢出問題。如果操作數(shù)僅為16位長(zhǎng),其結(jié)果可用雙精度數(shù)表示。下面說(shuō)明16位數(shù)相加的兩種途徑。
(1)保留32位結(jié)果
(2)調(diào)整小數(shù)點(diǎn)保留16位結(jié)果
加法運(yùn)算最可能出現(xiàn)的問題是運(yùn)算結(jié)果溢出。部分DSP提供了檢查溢出的專用指令BV,此外,使用溢出保護(hù)功能可使累加結(jié)果溢出時(shí)累加器飽和為最大的整數(shù)或負(fù)數(shù)。當(dāng)然即使如此,運(yùn)算精度還是大大降低。因此,最好的方法是完全理解基本的物理過(guò)程并注意選擇數(shù)的表達(dá)方式。
在通用DSP芯片中,一般不提供單周期的除法指令,為此必須采用除法子程序來(lái)實(shí)現(xiàn)。二進(jìn)制除法是乘法的逆運(yùn)算。乘法包括一系列的移位和加法,而除法可分解為一系列的減法和移位。下面來(lái)說(shuō)明除法的實(shí)現(xiàn)過(guò)程。
設(shè)累加器為8位,且除法運(yùn)算為10除以3。除的過(guò)程就是除數(shù)逐步移位并與被除數(shù)比較的過(guò)程,在每一步進(jìn)行減法運(yùn)算,如果能減則將位插入商中。
由于DSP沒有專門的除法指令,使用條件減指令SUBC可以完成有效靈活的除法功能。使用這一指令的唯一限制是兩個(gè)操作數(shù)必須為正。程序員必須事先了解其可能的運(yùn)算數(shù)的特性,如其商是否可以用小數(shù)表示及商的精度是否可被計(jì)算出來(lái)。這里每一種考慮可影響如何使用SUBC指令的問題。
與DIV_A相同,這個(gè)程序中,分子在NUMERA中,分母在DENOM中,商存在QUOT中,TEMSGN為暫存單元。FRAC中規(guī)定商的精度,如商的精度為Q13,則調(diào)用程序前FRAC單元中的值應(yīng)為13。
本文簡(jiǎn)要介紹DSP的計(jì)算原理和方法,根據(jù)其運(yùn)算原理,可以直接編寫匯編指令生成測(cè)試向量。DSP直流參數(shù)與交流參數(shù)的測(cè)試相對(duì)簡(jiǎn)單,與普通邏輯電路相同,這里就不再詳細(xì)介紹。
[1] 蘇濤,等. DSP實(shí)用技術(shù)[M].西安:西安電子科技大學(xué)出版社,2002.
[2] 劉益成. TMS320C54x DSP應(yīng)用程序設(shè)計(jì)與開發(fā)[M].北京:北京航空航天大學(xué)出版社,2002.
[3] TMS320C54x Instruction Set Simulator Technical Overview(Rev.A)(spru598a.pdf)[P].Texas Instruments.
[4] TMS320C54x DSP Programmer’s Guide(spru538.pdf) [P].Texas Instruments, 2001.
[5] TMS320C54x DSP Applications Guide Reference Set Volume 4(spru173.htm) [P].Texas Instruments, 1996.