摘 要: 以Xilinx公司的XC4000系列FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)為例,,介紹了分布式運(yùn)算單元DA(Distributed Arithmetic)在高速DSP設(shè)計(jì)中的原理及實(shí)現(xiàn)方法。
關(guān)鍵詞: 數(shù)字信號(hào)處理 DSP FPGA FIR濾波器 FFT
隨著FPGA集成度的不斷提高,在單片F(xiàn)PGA中完成復(fù)雜的數(shù)字信號(hào)處理過(guò)程變成了現(xiàn)實(shí),。譬如:FIR濾波器,、FFT以及雷達(dá)信號(hào)處理中的數(shù)字脈沖壓縮,、數(shù)字鑒相等,,都可以在單片F(xiàn)PGA中實(shí)現(xiàn)。在基于Xilinx XC4000系列FPGA設(shè)計(jì)的DSP中,,分布式運(yùn)算單元DA扮演著重要的角色,。本文介紹其原理及其實(shí)現(xiàn)方法。
1 分布式運(yùn)算單元原理
DA的運(yùn)算原理非常簡(jiǎn)單,,但是它的應(yīng)用卻十分廣泛,。
一個(gè)線(xiàn)性時(shí)不變網(wǎng)絡(luò)的輸出可以用下式表示:
其中, y(n)為第n時(shí)刻網(wǎng)絡(luò)的輸出,;Xk(n)為第n時(shí)刻的第k個(gè)輸入變量,;Ak為第k個(gè)輸入變量的權(quán)值。
在線(xiàn)性時(shí)不變系統(tǒng)中,,對(duì)于所有n時(shí)刻,,Ak都是常量,。如果該網(wǎng)絡(luò)表現(xiàn)為濾波器,常量Ak 即為濾波器系數(shù),,變量Xk為單一數(shù)據(jù)源的抽樣數(shù)據(jù)(如A/D的輸出),。而在時(shí)-頻轉(zhuǎn)換系統(tǒng)中(如離散傅立葉變換及快速傅立葉變換),常數(shù)Ak即為旋轉(zhuǎn)因子值,,變量Xk為單一數(shù)據(jù)源的數(shù)據(jù)塊(多源數(shù)據(jù)的例子可以在圖像處理系統(tǒng)中發(fā)現(xiàn)),。
仔細(xì)觀察式(1)可以看出,單個(gè)輸出y(n) 需要將k個(gè)乘積累加,。在以XC4000系列FPGA中的可配置邏輯功能塊(CLB)的查找表(Look-Up Table)結(jié)構(gòu)[1]為基礎(chǔ)的DA中,,這種乘積累加可以由查找表來(lái)實(shí)現(xiàn)。XC4000系列的CLB結(jié)構(gòu)特點(diǎn)使得它很容易被高效的配置,。
為了使得乘法之后的數(shù)據(jù)寬度不至于展寬,,先把數(shù)據(jù)源數(shù)據(jù)格式規(guī)定為浮點(diǎn)數(shù)2的補(bǔ)碼形式。需要注意的是,,常數(shù)Ak 不一定要進(jìn)行格式轉(zhuǎn)換來(lái)匹配輸入數(shù)據(jù)的格式,,它可以根據(jù)所要求的精度進(jìn)行定義。
變量Xk可以用下式表示:
其中,,Xkb為二進(jìn)制數(shù),,即取值為0或1;Xk0為符號(hào)位,,Xk0為1表示數(shù)據(jù)為負(fù),,為0表示數(shù)據(jù)為正。
將式(2)代入式(1)可以得到:
可以看出,,每個(gè)方括號(hào)中進(jìn)行的是輸入變量的某一個(gè)數(shù)據(jù)位和所有常數(shù)(A1~Ak)的每一位進(jìn)行位與并求和。而指數(shù)部分則說(shuō)明了求和結(jié)果的位權(quán)?,F(xiàn)在就可以建立查找表來(lái)實(shí)現(xiàn)方括號(hào)中的操作了,,其查找表用所有輸入變量的同一位進(jìn)行尋址,如圖1所示,。
圖1中所示的DA查找表,,其寬度為對(duì)常數(shù)Ak 定義的寬度,深度為2K,,K是能夠?qū)?shù)據(jù)源抽樣數(shù)據(jù)進(jìn)行處理的數(shù)據(jù)長(zhǎng)度,,對(duì)于濾波器就表現(xiàn)為濾波器階數(shù);對(duì)于FFT就表現(xiàn)為FFT點(diǎn)數(shù),。
這樣,,式(1)所表示的方程就可以由加法、減法和二進(jìn)制除法來(lái)實(shí)現(xiàn)了,。但是,,DA僅僅是運(yùn)算方程(1)的核心,要完成式(1)還需要根據(jù)系統(tǒng)對(duì)時(shí)間以及FPGA資源的考慮,選擇相應(yīng)的方法,。
2 幾種實(shí)現(xiàn)方法
2.1 全并行實(shí)現(xiàn)方法
市場(chǎng)上已經(jīng)有大量的通用DSP芯片,,這些芯片以并行的乘法、加法運(yùn)算,,地址產(chǎn)生器和片內(nèi)存儲(chǔ)器為主要特點(diǎn),,如TMS320C620x、ADSP2106x,、及各種通用的FFT芯片(如PDSP16510),。為什么還要選擇FPGA呢?主要是考慮速度,。要實(shí)現(xiàn)一個(gè)64階FIR濾波器,,如果采用全并行方式,F(xiàn)PGA可做到50MHz的數(shù)據(jù)率,,可以和系統(tǒng)時(shí)鐘相匹配,,這是通用DSP芯片無(wú)法做到的。下面就舉出全并行的例子,。
若將式(4)每個(gè)方括號(hào)之間的加法并行執(zhí)行,,即將每個(gè)DA查找表的輸出采用并行的加法,就得到了全并行結(jié)構(gòu)?,F(xiàn)將式(4)中的某個(gè)方括號(hào)重寫(xiě)如下,,并縮寫(xiě)為sum:
利用式(6),可以得到一種直觀的樹(shù)形陣列,,如圖2所示,。
圖2中,首先要建立一個(gè)K×B位的寄存器陣列,,將其輸出進(jìn)行排列,,用所有K個(gè)輸入數(shù)據(jù)的相同位,對(duì)DA查找表尋址,,從圖中可以看出,,當(dāng)B=16時(shí),輸入到輸出所需的路徑最長(zhǎng),,該路徑為關(guān)鍵路徑,,影響著電路處理的速度,在進(jìn)行設(shè)計(jì)時(shí)應(yīng)該注意到這點(diǎn),,所以應(yīng)該采用流水線(xiàn)設(shè)計(jì)方法[1],,并進(jìn)行適當(dāng)?shù)募s束,其數(shù)據(jù)率可以達(dá)到50MHz,。圖中的15個(gè)節(jié)點(diǎn)代表著15個(gè)并行的加法器,,中間過(guò)程的數(shù)據(jù)寬度既可以保持雙精度(B+C)位數(shù)據(jù)(C是常數(shù)Ak的寬度),,也可以采用截尾的辦法得到單精度B位數(shù)據(jù),可根據(jù)系統(tǒng)所要求的精度確定,。
2.2 全串行實(shí)現(xiàn)方法
當(dāng)系統(tǒng)對(duì)速度的要求不是很高的時(shí)候,,可以用全串行設(shè)計(jì)方法,即一個(gè)DA查找表,,一個(gè)并行的加法器以及簡(jiǎn)單少量的寄存器就可達(dá)到目的,,這樣能夠節(jié)省大量的FPGA資源。同樣,,設(shè)K=16,,B=16,將式(4)改寫(xiě)如下形式:
為了實(shí)現(xiàn)式(7),,先從最低位開(kāi)始,,用所有K個(gè)輸入變量的最底位對(duì)DA查找表進(jìn)行尋址,得到了[sum15],,將[sum15]右移一位即將[sum15]乘2-1后,,放到寄存器中,設(shè)為[tem15],;同時(shí),,K個(gè)輸入變量的次低位已經(jīng)開(kāi)始對(duì)DA查找表尋址得到[sum14],右移一位后,,與[tem15]相加,,重復(fù)這樣的過(guò)程,直至得到[sum0],,并用前面得到的累加結(jié)果減去[sum0],。要實(shí)現(xiàn)上述過(guò)程,需要K個(gè)長(zhǎng)度為B的串并行轉(zhuǎn)換移位寄存器,、一個(gè)容量為2K×C的DA查找表和一個(gè)累加器,。該全串行電路的數(shù)據(jù)率為輸入數(shù)據(jù)抽樣頻率的1/B,即完成一次運(yùn)算需要B個(gè)時(shí)鐘周期,。由此可以得到全串行DA模式,如圖3所示,。
2.3 串并行相結(jié)合實(shí)現(xiàn)方法
以上介紹的全串行方式是每個(gè)時(shí)鐘周期對(duì)所有K個(gè)變量的一位進(jìn)行串行處理,,全并行方式是每個(gè)時(shí)鐘周期對(duì)所有K個(gè)變量的所有B位進(jìn)行并行處理;這兩種方法是針對(duì)速度優(yōu)化和資源優(yōu)化設(shè)計(jì)的兩種極限情況,。在有些情況下,,我們可以對(duì)這兩種情況進(jìn)行折中考慮,獲得最佳資源利用和系統(tǒng)速度,。我們可以從每個(gè)時(shí)鐘周期對(duì)K個(gè)變量的兩位進(jìn)行處理開(kāi)始著手,,回顧一下式(5),,并將該式改寫(xiě)如下:
完成該式功能的功能框圖如圖4a所示。
將圖4(a)與圖3進(jìn)行比較后就可以發(fā)現(xiàn),,圖3中的DA查找表由16個(gè)輸入變量的同一位進(jìn)行尋址,,而圖4(a)中的DA查找表的尋址是由16個(gè)輸入變量的連續(xù)兩位進(jìn)行的,即尋址的位數(shù)由16位變成了32位,。這樣,,查找表的內(nèi)容也需要相應(yīng)的改變;而且完成一次運(yùn)算也由原來(lái)的B個(gè)時(shí)鐘周期變成了需要B/2+1個(gè)時(shí)鐘周期,。
下面介紹一種更易于理解的串并行混合設(shè)計(jì)方法,。
將式(5)改寫(xiě)成如下形式:
從式(9)得到流程圖如圖4(b)所示。
實(shí)現(xiàn)過(guò)程中應(yīng)該注意DA查找表的內(nèi)容,,累加之前要乘2-1,,注意進(jìn)位等。
從以上給出的兩種串并行結(jié)合的設(shè)計(jì)方法可以看到,,只要將式(5)進(jìn)行適當(dāng)?shù)淖儞Q,,還有其它的硬件實(shí)現(xiàn)方法,這里就不一一敘述了,。
下面給出在K=8,、B=16的情況下,不同的DA查找表所占用的資源,。Xilinx公司的XC4000系列FPGA的一個(gè)CLB可以實(shí)現(xiàn)32×1大小的RAM,,在圖4(a)中所描述的DA查找表占用2,048個(gè)CLB,而在圖4(b)中所描述的兩個(gè)DA查找表只占用256個(gè)CLB,。用一片XC4025即可完成后者,,其數(shù)據(jù)率可達(dá)到16MHz。
綜上所述,,由于分布式運(yùn)算單元的應(yīng)用,,改變了傳統(tǒng)的設(shè)計(jì)觀念,為基于FPGA的DSP設(shè)計(jì)提出了新的思路,,必將在高速的FIR濾波器設(shè)計(jì),、高速FFT設(shè)計(jì)中得到廣泛的應(yīng)用。隨著FPGA集成規(guī)模的不斷提高(Xilinx公司Virtex系列已經(jīng)達(dá)到了百萬(wàn)門(mén)級(jí)),,許多復(fù)雜的數(shù)學(xué)運(yùn)算已經(jīng)可以由FPGA來(lái)實(shí)現(xiàn),,單片F(xiàn)PGA實(shí)現(xiàn)系統(tǒng)的設(shè)想即將變?yōu)楝F(xiàn)實(shí)。
參考文獻(xiàn)
1 蔣亞堅(jiān),,沈桂明. FPGA在雷達(dá)信號(hào)處理器中的應(yīng)用研究. 雷達(dá)與對(duì)抗. 1999(2):57~63
2 The Programmable Logic Data Book. Xilinx, 1999