于亞萍 陳雪強(qiáng) 劉源 衛(wèi)勇
摘要:根據(jù)FIR濾波器的特性和分布式(DA)算法的特點(diǎn),基于FPGA實(shí)現(xiàn)FIR濾波器的原理和方法,在拆分查找表的基礎(chǔ)上,利用串并結(jié)合DA算法對數(shù)字濾波器的設(shè)計(jì)進(jìn)行優(yōu)化,設(shè)計(jì)更高階次的濾波器并節(jié)省所占用的硬件資源。采用串并結(jié)合DA算法設(shè)計(jì)了16階FIR低通濾波器,在Quartus II 7.0下進(jìn)行仿真,結(jié)果驗(yàn)證了該方法濾波效果好,能夠有效地減少FPGA硬件資源的使用,提高FIR的運(yùn)算速度。
關(guān)鍵詞:FIR濾波器;查找表;FPGA;分布式(DA)算法
中圖分類號:TN713文獻(xiàn)標(biāo)識碼:A文章編號:0439-8114(2012)14-3092-04
Design of FPGA-Based Serial-Parallel FIR Filter
YU Ya-ping1,CHEN Xue-qiang2,LIU Yuan1,WEI Yong1
(1.Department of Mechanic and Electronic Engineering,Tianjin Agricultural University,Tianjin 300384, China;
2. Jinma Coking Limited Company, Jiyuan City of Henan Province, Jiyuan 454650, Henan,China)
Abstract: According to the characteristics of FIR filter and distributed algorithm (DA), the theory and method of FIR Filter was realized using DA based on FPGA. On the basis of table partitioning, the designation of FIR filters was optimized by serial-parallel arithmetic aiming at filters with higher order while saving the hardware it would use. 16-order FIR filters was designed by serial and parallel DA and simulated in Quartus Ⅱ 7.0. Results showed that the FIR filters were with small resource usage and high speed compared with traditional methods.
Key words: FIR filter; look-up table; FPGA; distributed algorithm
數(shù)字濾波器是數(shù)字信號處理的重要手段,分為有限脈沖響應(yīng)數(shù)字(Finite impulsive response,FIR)濾波器和無限脈沖響應(yīng)數(shù)字(Infinite impulsive response,IIR)濾波器兩種。其中FIR濾波器在數(shù)字信號處理的過程中有很好的線性相位和穩(wěn)定性,被廣泛應(yīng)用于工業(yè)、農(nóng)業(yè)和醫(yī)學(xué)領(lǐng)域中[1]。
目前FIR濾波器的硬件實(shí)現(xiàn)有以下4種方式:①使用單片通用數(shù)字濾波器集成電路,這種電路使用起來比較簡單,由于字長和階數(shù)的規(guī)格較少,不易滿足實(shí)際需要。②使用DSP芯片[2],DSP芯片是依靠軟、硬件結(jié)合來實(shí)現(xiàn)FIR濾波器,速度受到限制。③使用可編程邏輯器件FPGA/CPLD[3],用FPGA來實(shí)現(xiàn)數(shù)字信號處理可以很好地解決并行和順序性的矛盾,而且易于測試與硬件升級[4]。
在FPGA中,進(jìn)行傳統(tǒng)乘法運(yùn)算占用了大量的硬件資源,分布式(DA)算法巧妙地利用ROM查找表將固定系數(shù)的乘累加運(yùn)算轉(zhuǎn)換成查找表操作[5,6],避免了乘法運(yùn)算。查找表后數(shù)據(jù)執(zhí)行的都是簡單的加法運(yùn)算,可以較大程度地提高運(yùn)算速度[7]。
該研究在拆分查找表的基礎(chǔ)上,采用串并結(jié)合的DA算法進(jìn)行FIR濾波器的設(shè)計(jì),能很好地實(shí)現(xiàn)實(shí)時(shí)處理,有效減少硬件的使用,提高濾波器的運(yùn)算速度。
1DA算法
DA算法是一項(xiàng)重要的FPGA技術(shù),它與傳統(tǒng)算法實(shí)現(xiàn)乘加運(yùn)算的不同在于執(zhí)行部分積運(yùn)算的先后順序不同[8,9]。
對于一個(gè)無符號系統(tǒng),DA算法為:
式中,x[n]是變量,表示如下:
對于有符號系統(tǒng),DA算法為:
DA算法對數(shù)據(jù)相同位分別加權(quán)求和,要實(shí)現(xiàn)有符號DA系統(tǒng),利用一個(gè)LUT實(shí)現(xiàn)映射f(c[n],xb[n]),采用帶有加/減控制的累加器,對前(B-1)位進(jìn)行移位累加,對第B位進(jìn)行減法運(yùn)算。
1.1串行DA算法
將輸入數(shù)據(jù)的相同位進(jìn)行尋址,預(yù)先設(shè)定LUT接收一個(gè)N位輸入向量xb={xb[0],xb[1]…xb[N-1]},輸出為f(c[n],xb[n])。各個(gè)映射f(c[n],xb[n])都有相應(yīng)的二次冪加權(quán)并累加,N次查詢循環(huán)后就完成了對內(nèi)積y的計(jì)算。串行DA算法如圖1所示。
這種計(jì)算方法節(jié)省芯片的內(nèi)部資源,運(yùn)算速度與輸入數(shù)據(jù)的長度有關(guān),比較慢。
1.2拆分查找表DA算法
如果輸入系數(shù)N過多,LUT的地址隨系數(shù)呈指數(shù)增加。假定長度為LN的內(nèi)積,則:
可以用一個(gè)DA結(jié)構(gòu)實(shí)現(xiàn)??傻玫剑?/p>
拆分查找表DA算法如圖2所示,實(shí)現(xiàn)一個(gè)4N的DA設(shè)計(jì)需要3個(gè)次輔助加法器,表格的規(guī)模由24N×B降到了4個(gè)2N×B。若要實(shí)現(xiàn)更高階的濾波器,拆分查找表法的優(yōu)勢將更加明顯,另外,如果是線性相位的濾波器,表的個(gè)數(shù)還能縮小一半。但是拆分查找表法只能降低硬件資源的有效使用,不能提高FIR的運(yùn)算速度。
1.3串并結(jié)合DA算法
并行DA算法是通過增加ROM、寄存器和加法器提高速度,讓輸入數(shù)據(jù)每一位的相同位同時(shí)尋址,ROM表的內(nèi)容相同,將尋址內(nèi)容進(jìn)行相應(yīng)的二次冪加權(quán)并相加,每級的加法運(yùn)算都是并行的。并行DA算法能使系統(tǒng)在1個(gè)系統(tǒng)時(shí)鐘內(nèi)完成濾波運(yùn)算,但占用資源太多。
全串行方式是在每個(gè)時(shí)鐘周期中對所有變量的一個(gè)相同位進(jìn)行串行處理,全并行方式是每個(gè)時(shí)鐘周期對所有變量的所有相同位進(jìn)行并行處理,這兩種方法是針對資源優(yōu)化設(shè)計(jì)和速度優(yōu)化設(shè)計(jì)的兩種最優(yōu)情況。根據(jù)設(shè)計(jì)者對FIR速度大小的要求,可以通過串并結(jié)合的方式提高FIR的速度,使資源利用達(dá)到最優(yōu)。若:
對于一個(gè)數(shù)據(jù)寬度和尋址查找表寬度均為8位的FIR濾波器來說,可以寫為:
y=[sum0]+[sum1]21+[sum2]22+[sum3]23++[sum4]+[sum5]21+[sum6]22+[sum7]23×24
兩個(gè)基數(shù)都為21的輸出加權(quán)累加器,每個(gè)系統(tǒng)的時(shí)鐘脈沖可以算兩位。根據(jù)系統(tǒng)對資源和運(yùn)算速度的要求,可以對一次并行處理的數(shù)據(jù)位數(shù)進(jìn)行合理的安排。DA算法的串并結(jié)合實(shí)現(xiàn)結(jié)構(gòu)如圖3所示。
2串并結(jié)合的FIR低通數(shù)字濾波器的FPGA實(shí)現(xiàn)
2.1采用窗函數(shù)對參數(shù)進(jìn)行設(shè)計(jì)
2.1.1參數(shù)設(shè)計(jì)使用MATLAB軟件中的Filter design toolbox數(shù)字濾波器設(shè)計(jì)軟件模塊FDATool進(jìn)行設(shè)計(jì)[10],FIR濾波器的設(shè)計(jì)指標(biāo):采樣頻率10 MHz,截止頻率1.5 MHz,濾波器階數(shù)16階,輸入數(shù)據(jù)寬度12位,系數(shù)數(shù)據(jù)寬度12位,采用Kaiser窗進(jìn)行設(shè)計(jì),β=0.5,線性偶對稱。
2.1.2運(yùn)算量化量化是將濾波器的系數(shù)由浮點(diǎn)數(shù)轉(zhuǎn)換為FPGA可以進(jìn)行運(yùn)算的定點(diǎn)數(shù)??紤]到溢出,將h(n)擴(kuò)大210倍,再表示為12位二進(jìn)制補(bǔ)碼,可得到:
h(0)=h(15)=0.028 219 0=29=0000000111012C
h(1)=h(14)=-0.007 315 9=-8=1111111110002C
h(2)=h(13)=-0.049 899 0=-51=1111110011012C
h(3)=h(12)=-0.061 658 0=-63=1111110000012C
h(4)=h(11)=-0.014 040 0=-14=1111111100102C
h(5)=h(10)=0.089 426 0=92=0000010111002C
h(6)=h(19)=0.209 090 0=214=0000110101102C
h(7)=h(18)=0.288 940 0=296=0001001010002C
2.2FPGA的實(shí)現(xiàn)
采用FPGA實(shí)現(xiàn)時(shí),首先將輸入數(shù)據(jù)存入數(shù)組中寄存起來,然后以寄存器中每一個(gè)輸入數(shù)據(jù)的相同位的值為地址,去對應(yīng)查找表中的值,根據(jù)DA算法的公式,進(jìn)行相應(yīng)二次冪加權(quán)后累加,減去數(shù)據(jù)最高位,就能得到正確的濾波器輸出。該系統(tǒng)在拆分查找表的基礎(chǔ)上,采用串并結(jié)合方法對輸入數(shù)據(jù)進(jìn)行構(gòu)建,共由數(shù)據(jù)存儲(chǔ)延時(shí)模塊、查找表模塊、移位累加模塊、控制模塊組成。系統(tǒng)結(jié)構(gòu)框架如圖4所示。
2.2.1數(shù)據(jù)存儲(chǔ)延時(shí)模塊設(shè)計(jì)的濾波器階數(shù)為16階,可以采用FIR網(wǎng)絡(luò)的線性型結(jié)構(gòu),首先將12位的輸入數(shù)據(jù)并行輸入數(shù)據(jù)寄存器中,由于該濾波器系數(shù)有16個(gè),分別將16位輸入數(shù)據(jù)存入16×13列數(shù)組中的前12列中,按位存儲(chǔ),第13列擴(kuò)展位存儲(chǔ)的數(shù)據(jù)與符號位相同。由于FIR數(shù)字濾波器的單位取樣響應(yīng)是對稱的,濾波系數(shù)對稱,將輸入數(shù)據(jù)x(i)和x(15-i)相加之后存入寄存器,可以將16階系數(shù)尋址降為8階。分別將每一次輸入數(shù)據(jù)的第1位到第6位、第7位到第12位和第13位數(shù)據(jù)并行輸入,在控制模塊的作用下,每一個(gè)系統(tǒng)時(shí)鐘脈沖,數(shù)據(jù)左移一位,將第一列數(shù)據(jù)輸出作為地址尋找查找表的內(nèi)容。
2.2.2查找表模塊抽頭系數(shù)查找表模塊將濾波器系數(shù)的各種組合固化在ROM中[11],它的地址來自于輸入數(shù)據(jù)移位模塊相同位的輸出,通過查找表得到卷積數(shù)據(jù),并將這些數(shù)據(jù)輸出到移位相加模塊。設(shè)計(jì)將查找表劃分為兩個(gè)四抽頭查找表LUT1和LUT2,LUT1用VHDL語言實(shí)現(xiàn)如下:
Case table_address0 is
When"0000"=>table_out_12b<="000000000000";
When "0001"=>table_out_12b<="000000011101";-- 29
When "0010"=>table_out_12b<="111111111000";-- -8
When "0011"=>table_out_12b<="000000010101";-- 21
When "0100"=>table_out_12b<="111111001101";-- -51
When "0101"=>table_out_12b<="111111101010";-- -22
When "0110"=>table_out_12b<="111111000101";-- -59
When "0111"=>table_out_12b<="111111100010";-- -30
When "1000"=>table_out_12b<="111111000001";-- -63
When "1001"=>table_out_12b<="111111011110";-- -34
When "1010"=>table_out_12b<="111110111001";-- -71
When "1011"=>table_out_12b<="111111010110";-- -42
When "1100"=>table_out_12b<="111110001110";-- -114
When "1101"=>table_out_12b<="111110101011";-- -85
When "1110"=>table_out_12b<="111110000110";-- -122
When "1111"=>table_out_12b<="111110100011";-- -93
When others=>table_out_12b<="000000000000"
2.2.3移位累加模塊移位累加模塊的主要功能是實(shí)現(xiàn)數(shù)據(jù)的累加,主要由加減器單元和移位累加單元組成。為了使累加器的結(jié)果不產(chǎn)生溢出,需要對累加器進(jìn)行冗余設(shè)計(jì),輸入數(shù)據(jù)和濾波器系數(shù)的位數(shù)均為N,累加器的長度為M,濾波器的長度為L,對于有符號數(shù):M=2N+log2L-1,設(shè)計(jì)中累加器的長度為27位。
2.2.4控制模塊控制模塊主要控制信號的輸入、移位相加和數(shù)據(jù)的輸出,使上述各個(gè)模塊按照一定的時(shí)序進(jìn)行操作,最終完成濾波功能。系統(tǒng)仿真波形如圖5所示。
3結(jié)論
理論分析和試驗(yàn)結(jié)果表明,在采用拆分查找表的基礎(chǔ)上用串并結(jié)合的方式,不僅能夠節(jié)省硬件資源,而且能夠提高FIR的運(yùn)算速度。該設(shè)計(jì)采用FPGA器件CycloneⅡ EP2C5F256C6進(jìn)行方案驗(yàn)證,僅占用邏輯單元631個(gè),采用串并結(jié)合的FIR數(shù)字濾波器具有良好的濾波效果,在資源允許的條件下,可根據(jù)實(shí)際應(yīng)用任意確定濾波器的階數(shù)和運(yùn)算速度,是一種比較實(shí)用可靠的設(shè)計(jì)方法。
參考文獻(xiàn):
[1] 劉建成,鄒應(yīng)全,徐偉.基于FPGA的FIR濾波器設(shè)計(jì)與仿真[J]. 南京信息工程大學(xué)學(xué)報(bào)(自然科學(xué)版),2010,2(5):400-404.
[2] 周日貴,龔勇清,聶愛球,等. 定點(diǎn)DSP實(shí)現(xiàn)高精度FIR數(shù)字濾波[J]. 儀表技術(shù)與傳感器,2004(2):400-404.
[3] 呂紹娟,趙不賄. FIR數(shù)字濾波的 FPGA實(shí)現(xiàn)[J]. 微計(jì)算機(jī)信息,2008,24(20):223-224.
[4] 徐志軍,徐光輝. CPLD/FPGA的開發(fā)與應(yīng)用[M]. 北京:電子工業(yè)出版社,2003.
[5] 黃曉紅,蔡江利. 基于FPGA 的改進(jìn)型FIR濾波器的實(shí)現(xiàn)[J]. 電子技術(shù)應(yīng)用,2009,35(5):32-33.
[6] 楊洪軍,王振友. 基于分布式算法和查找表的FIR濾波器的優(yōu)化設(shè)計(jì)[J]. 山東理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,23(5):104-106.
[7] 劉德建,鄭繼禹.基于流水線技術(shù)的FIR 濾波器的設(shè)計(jì)與實(shí)現(xiàn)[J]. 電測與儀表,2008,45(6):54-56.
[8] MEYER-BAESE U. 數(shù)字信號處理的FPGA實(shí)現(xiàn)[M]. 劉凌,胡永生,譯. 北京:清華大學(xué)出版社,2003.
[9] XIE J F,HE J J,TAN G Z. FPGA realization of FIR filters for high-speed and medium-speed by using modified distributed arithmetic architectures[J].Microelectronics Journal,2010,41(6):365-370.
[10] 李彬. FIR數(shù)字濾波器的FPGA實(shí)現(xiàn)技術(shù)研究[D]. 成都:西南交通大學(xué),2007.
[11] 羅朝霞,高書莉. CPLD/FPGA設(shè)計(jì)及應(yīng)用[M]. 北京:人民郵電出版社,2007.