??? 摘? 要: 利用分布式算法對(duì)FIR濾波器的硬件實(shí)現(xiàn)進(jìn)行了探討,,在數(shù)乘累加的理論上,,對(duì)分布式算法的串行、并行和拆分查找表法的FPGA硬件實(shí)現(xiàn)方法進(jìn)行了研究,。結(jié)合FPGA查找表結(jié)構(gòu),,兼顧資源及運(yùn)行速度的要求,用拆分查找表的方法設(shè)計(jì)了16階8位常系數(shù)FIR濾波器,,并在Quartus II 5.0下進(jìn)行仿真,,仿真結(jié)果驗(yàn)證了該算法的有效性和實(shí)時(shí)性。?
??? 關(guān)鍵詞: FPGA,;分布式算法,;拆分查找表,;FIR濾波器
?
??? FIR數(shù)字濾波器在數(shù)字信號(hào)處理的過程中有很好的線性相位和穩(wěn)定性,被廣泛應(yīng)用于音頻處理,、語(yǔ)音處理,、信息系統(tǒng)等各種系統(tǒng)中。隨著現(xiàn)代電子技術(shù)及EDA技術(shù)的發(fā)展,,特別是可編程邏輯電路的發(fā)展,,F(xiàn)IR數(shù)字濾波器的實(shí)現(xiàn)將變得更具有靈活性和實(shí)時(shí)性。FIR濾波器的實(shí)現(xiàn)有多種方法,,其中基于分布式算法FIR濾波器的FPGA實(shí)現(xiàn)采用硬件結(jié)構(gòu),,此算法的特點(diǎn)是運(yùn)行速度快,能較好地實(shí)現(xiàn)實(shí)時(shí)處理,,特別適合于高速實(shí)時(shí)的信號(hào)處理,。本文提出了一種基于分布式算法改進(jìn)型FIR濾波器的FPGA實(shí)現(xiàn),并設(shè)計(jì)和實(shí)現(xiàn)了改進(jìn)型FIR濾波器,。?
1 FIR數(shù)字濾波器的直接型結(jié)構(gòu)?
??? FIR數(shù)字濾波器的輸入與輸出可以用下式表示:?
??? ?
式中:N為濾波器的階數(shù)(或抽頭數(shù)),;x(k)為第k時(shí)刻的輸入樣本值;h(k)為第k級(jí)抽頭系數(shù),。FIR因?yàn)槠鋯挝幻}沖響應(yīng)h(n)是有限長(zhǎng)而得名,,即h(n)是一個(gè)有限長(zhǎng)序列,對(duì)h(n)做Z變換就得到FIR數(shù)字濾波器的系統(tǒng)函數(shù)H(z):?
?????
??? 由此可以得到FIR數(shù)字濾波器直接型的結(jié)構(gòu)圖如圖1所示,。?
?
?
2 改進(jìn)型FIR數(shù)字濾波器算法?
2.1 分布式算法的原理?
??? 分布式算法是一種重要的FPGA技術(shù),,廣泛應(yīng)用在計(jì)算乘積和之中。除了卷積之外,,相關(guān),、DFT計(jì)算和RNS反演映射等都可以轉(zhuǎn)化為乘積和(sum of products)的形式。?
??? (1)無(wú)符號(hào)分布式算法?
??? 假設(shè)N項(xiàng)的乘積和表示為:?
?
??? 又設(shè)系數(shù)h(n)是已知的常系數(shù),,x(n)是變量,,設(shè)x(n)的表達(dá)式如下:?
?????
其中xb(n)表示x(n)的第b位,x(n)是x的第n次采樣,,則y又可以表示為:?
?????
??? (2)有符號(hào)分布式算法?
??? 對(duì)于有符號(hào)數(shù)補(bǔ)碼數(shù)采用補(bǔ)碼的表示方法,。需要注意的是,在補(bǔ)碼中,,最高有效位是用來(lái)區(qū)別正數(shù)和負(fù)數(shù)的,。將采用(B+1)位表達(dá)式:?
?????
??? 要實(shí)現(xiàn)有符號(hào)分布式系統(tǒng),通常采用“帶有加/減控制器的累加器”實(shí)現(xiàn)此系統(tǒng),,當(dāng)xb(n)為0時(shí)進(jìn)行加法運(yùn)算,,為1時(shí)進(jìn)行減法運(yùn)算。?
2.2 串行分布式算法?
??? 串行分布式算法結(jié)構(gòu)如圖2所示。利用一個(gè)LUT實(shí)現(xiàn)映射,,即2N字寬,,預(yù)先編寫好程序的xb=[xb(0),xb(1),,…,,xb(N-1)]的映射,,經(jīng)查找表查找后輸出,,N次查詢循環(huán)后就完成了計(jì)算結(jié)果。?
?
?
??? 以三階四位有符號(hào)的數(shù)字濾波器為例,,令濾波器的系數(shù)為{-2,,1,3},,LUT可采用基于FPGA的邏輯查找表或利用FPGA自帶的ROM實(shí)現(xiàn),。用case表實(shí)現(xiàn)的核心代碼如下:?
??? Process (table_ in)?
??? Begin?
??? ? Case table_ in is?
??????? when “000”=>?? table_ out<=0;?
??????? when “001”=>?? table_ out<=-2,;?
??????? when “010”=>?? table_ out<=3,;?
??????? when “011”=>?? table_ out<=1;?
??????? when “100”=>?? table_ out<=1,;?
??????? when “101”=>?? table_ out<=-1,;?
??????? when “110”=>?? table_ out<=4;?
??????? when “111”=>?? table_ out<=2,;?
??????? when? others=>?? table_ out<=0,;?
??? ? end? case;?
??? end? process,;?
2.3 并行分布式算法?
??? 并行分布式算法結(jié)構(gòu)如圖3所示,,圖中虛線代表流水線寄存器,輸入采用逐次采樣(每次一個(gè)字),、位并行的形式,。將每個(gè)數(shù)據(jù)的相同位遞給LUT,對(duì)于輸入的每一位都需要配置相應(yīng)單獨(dú)的表,,且表的規(guī)模不固定(輸入位寬等于濾波器抽頭的數(shù)量),,但表的內(nèi)容相同。且不同的位對(duì)應(yīng)不同的值,,然后將從LUT中讀取的數(shù)據(jù)經(jīng)過處理后送入加法器中,,每級(jí)的加法運(yùn)算都是并行的。?
?
?
2.4 拆分查找表?
??? 并行分布式算法雖然能夠有效提高系統(tǒng)運(yùn)算的速度,,但是占用的資源太大,。串行分布式算法占用的資源小,但系統(tǒng)的運(yùn)算速度慢。而且當(dāng)N很大時(shí),,即在FIR濾波器中如果階數(shù)很高時(shí),,作為查找表的ROM將很大,例如:假定N=16,,輸入LUT的位寬為16,,則ROM的大小為16×216 bit,即1 Gbit,。N每增加一位,,ROM容量就增加一倍,這種以2的冪次遞增的資源占用是硬件資源不可接受的,。?
??? 當(dāng)系統(tǒng)對(duì)速度要求不太高,、而濾波器的階數(shù)很高時(shí),可以采用拆分表減少ROM容量并將結(jié)果累加,。如果再加上流水線寄存器,,這個(gè)改進(jìn)并沒有降低速度,卻可以極大減少LUT的設(shè)計(jì)規(guī)模,。?
??? 假設(shè)長(zhǎng)度為L(zhǎng)N的內(nèi)積:?
?
可以用一個(gè)DA結(jié)構(gòu)實(shí)現(xiàn),。將和分配到L個(gè)獨(dú)立的N階并行DA的LUT之中,結(jié)果如下:?
?
??? 例如:實(shí)現(xiàn)一個(gè)4N的DA設(shè)計(jì)需要3個(gè)次輔助加法器,。而表格的規(guī)模從一個(gè)4N×2B的LUT降低到4個(gè)N×2B表,。圖4是拆分查找表的硬件結(jié)構(gòu)圖。?
?
?
3 基于FPGA實(shí)現(xiàn)的改進(jìn)型FIR濾波器結(jié)構(gòu)性能?
3.1 16階8位FIR濾波器的實(shí)現(xiàn)及仿真?
??? 本設(shè)計(jì)采用Altera公司的Cyclone II EP2C35F672C8器件,,在Quartus II 5.0下仿真,,F(xiàn)IR濾波器為16階,輸入數(shù)據(jù)為8位(最高位代表符號(hào)位),。如果采用單個(gè)查找表的面積為28×16 bit,,面積太大。采用拆分查找表的結(jié)構(gòu)能減少面積,,在Altera公司的一系列FPGA中LUT查找表采用四輸入查找表,,因此單個(gè)表可以拆分為2個(gè)四輸入的查找表。因?yàn)樵O(shè)計(jì)的是線性相位濾波器,,這樣單個(gè)表的面積就得到了最優(yōu)化,。同時(shí)單個(gè)查找表的連線是LUT查找表的內(nèi)部連線,減少了互聯(lián)的資源和連線的延遲,。查找表計(jì)算方法如表1所示,。?
?
?
??? 設(shè)輸入序列為{99,0,,0,,0,70,0,,0,,0,99,,0,,0,0,,70,,0,0,,0},,濾波器的系數(shù)為{-12 -18 13 29 -13 -52 14 162 242 14 -52 -13 29 13 -18},。仿真結(jié)果如圖5所示,。?
?
?
???本設(shè)計(jì)的時(shí)鐘主頻可達(dá)73.49 MHz,占用了236個(gè)邏輯單元,,占整個(gè)LC(Logic cell)的2%,。可見拆分查找表的方式實(shí)現(xiàn)FIR濾波器速度較快,,占用的資源少,。?
????若要實(shí)現(xiàn)更高階的濾波器,拆分查找表法的優(yōu)勢(shì)將更加明顯,。另外,,如果是線性相位的濾波器,表的個(gè)數(shù)將能縮小一倍,。本設(shè)計(jì)即為線性相位濾波器,。?
3.2 改進(jìn)型FIR濾波器在FPGA中實(shí)現(xiàn)的特點(diǎn)分析?
??? 為了分析改進(jìn)型FIR濾波器在FPGA中實(shí)現(xiàn)的特點(diǎn),利用VHDL語(yǔ)言程序分別設(shè)計(jì)了16階的串行,、并行及直接型FIR濾波器,,并與相應(yīng)的拆分查找表法FIR濾波器進(jìn)行比較,其各自的運(yùn)行速度及占用FPGA資源的情況如表2所示,。
?
?
??? 從表2可以看出,,改進(jìn)型濾波器與直接型相比存在兩大明顯的優(yōu)勢(shì)。一方面,,在濾波器階數(shù)相同時(shí),,改進(jìn)型FIR濾波器在FPGA資源占用上比直接型更少;另一方面,,系統(tǒng)運(yùn)行的速度比直接型更快,。而且,隨著濾波器階數(shù)的增加,這種優(yōu)勢(shì)更加明顯,。串行濾波器完成一次運(yùn)算需要8個(gè)時(shí)鐘周期,,為了把數(shù)據(jù)分為8個(gè)時(shí)鐘周期進(jìn)行計(jì)算,采用了移位寄存器,,這樣單個(gè)表的面積相當(dāng)大,,從而占用了大量資源,工作速度也受到了限制,。并行分布式濾波器在1個(gè)時(shí)鐘周期完成了累加,,提高了工作速度,但所用面積較大,。拆分查找表法濾波器大大減少了面積,,而且速度并沒有降低。?
??? 本設(shè)計(jì)采用了拆分查找表方法,,影響系統(tǒng)速度的是加法器組,,可以對(duì)濾波器進(jìn)一步改進(jìn),如對(duì)加法器組利用流水線,、編碼等技術(shù)可以提高工作速度,。?
??? 通過以上的理論分析和仿真結(jié)果表明,基于FPGA器件的拆分查找表FIR算法,,占用資源少,、運(yùn)算速度快,在資源允許的條件下可根據(jù)實(shí)際應(yīng)用任意確定濾波器的長(zhǎng)度和階數(shù),,是一種比較實(shí)用可靠的高效設(shè)計(jì)方法,。?
參考文獻(xiàn)?
[1] PARHI K K.VLSI digital signal processing systems:Design?and implementation[S].John Wiley&Sons,1999.?
[2] ASHENDEN P J.The designer′s guide to VHDL(SecondEdition)[S].Elsevier Science(USA),,2002.?
[3] 程偑清.數(shù)字信號(hào)處理教程[M].北京:清華大學(xué)出版社,,2001.