優(yōu)化FIR數(shù)字濾波器的FPGA實(shí)現(xiàn)
摘要:基于提高速度和減少面積的理念,對傳統(tǒng)的FIR數(shù)字濾波器進(jìn)行改良??紤]到FPGA的實(shí)現(xiàn)特點(diǎn),研究并設(shè)計了采用Radix-2的Booth算法乘法器以及結(jié)合了CSA加法器和樹型結(jié)構(gòu)的快速加法器,并成功應(yīng)用于FIR數(shù)字濾波器的設(shè)計中。濾波器的系數(shù)由Matlab設(shè)計產(chǎn)生。仿真和綜合結(jié)果表明,Booth算法乘法器和CSA算法加法器樹,在滿足FIR數(shù)字濾波器的性能要求的同時,在電路實(shí)現(xiàn)面積上、尤其是速度上有明顯的優(yōu)化;并且當(dāng)數(shù)據(jù)量越多時,優(yōu)化也越明顯。
關(guān)鍵詞:Matlab;Booth算法;CSA算法;ISE
研究數(shù)字濾波器的意義就在于它們正日益成為一種主要的DSP(DigitaI Signal Processing)運(yùn)算,并正在逐漸代替?zhèn)鹘y(tǒng)的模擬濾波器。它可以保證任意幅頻特性的同時具有嚴(yán)格的線性相頻特性。而現(xiàn)場可編程門陣列(Field Programmable Gate Array,FPGA)可并行執(zhí)行的特點(diǎn)決定它更加廣泛地應(yīng)用于實(shí)時數(shù)字信號處理領(lǐng)域。不能想象今天的生活如果沒有音頻;視頻和言語交際的樣子,而這些都要應(yīng)用數(shù)字信號處理技術(shù)。并且在任何時候,高性能,低規(guī)模,低成本都是設(shè)計的目標(biāo)。濾波器(Finite Impulse Response,F(xiàn)IR)的實(shí)現(xiàn)方法有很多種,最常見的有串行結(jié)構(gòu)和并行結(jié)構(gòu)方法。前者根據(jù)FIR濾波器的實(shí)現(xiàn)表達(dá)式,將濾波器實(shí)質(zhì)看作是做一個乘累加運(yùn)算。一次乘累加運(yùn)算的次數(shù)由濾波器的階數(shù)來決定。這種方法使用硬件資源相對較少,但速度較慢。并行結(jié)構(gòu)的方法,將濾波器的串行實(shí)現(xiàn)展開,就可以直接用多個乘法器和加法器并行實(shí)現(xiàn),其可以在一個時鐘周期內(nèi)完成一次濾波,但要占用大量的乘累加器,器件延遲比較大。目前為了滿足面積和速度的需要,人們通常采用Booth算法、CSD算法,分布式算法等技術(shù)對FIR設(shè)計進(jìn)行優(yōu)化,優(yōu)化效果各有利弊。本文針對串行結(jié)構(gòu)對乘累加運(yùn)算的乘和加分
別進(jìn)行優(yōu)化設(shè)計。分析了提高乘法器速度的途徑;針對多數(shù)據(jù)量的運(yùn)算,提出了一種新型的快速加法器的解決方案。體現(xiàn)了優(yōu)化設(shè)計中提高速度和減小面積的設(shè)計理念。同時給出并實(shí)現(xiàn)了一個16階FIR的設(shè)計實(shí)例。
1 用Matlab設(shè)計濾波器系數(shù)
利用Matlab軟件的FDATool模塊,選擇濾波器類型為低通FIR,設(shè)計方法為窗口法,階數(shù)為16,窗口類型為Kaiser,數(shù)據(jù)采樣頻率fs為4.8 kHz,濾波器的截止頻率fc為1.08 kHz,導(dǎo)出的濾波器系數(shù)為16個15位的小數(shù)。將每一個系數(shù)擴(kuò)大相同的倍數(shù),最后四舍五人得到一系列整數(shù)系數(shù)。如下:
2 優(yōu)化FIR濾波器在FPGA中的實(shí)現(xiàn)結(jié)構(gòu)
2.1 FIR濾波器的基本算法原理
本文采用濾波器實(shí)現(xiàn)的基本的串行乘累加結(jié)構(gòu)。FIR濾波器的差分方程可表示為:
式中:t為濾波器的階數(shù)。
其直接運(yùn)算結(jié)構(gòu)如圖1所示。
從公式(1)中可知FIR濾波器在硬件上的設(shè)計主要是完成乘累加功能,實(shí)現(xiàn)的一種方法是直接相乘累加。在實(shí)際應(yīng)用中,當(dāng)濾波器設(shè)計對濾波速度要求不高時,可采用串行結(jié)構(gòu)或改進(jìn)串行結(jié)構(gòu)來實(shí)現(xiàn),這樣可以選取資源較少的器件,降低設(shè)計成本;當(dāng)對濾波速度有較高要求時,可以考慮采用并行或DA來實(shí)現(xiàn)。但要進(jìn)行FIR運(yùn)算,尤其在階數(shù)較高時,幾乎無法在FPGA內(nèi)實(shí)現(xiàn)并行結(jié)構(gòu),所以這里采用串行運(yùn)算的結(jié)構(gòu),僅使用一個乘加器。所以本文的設(shè)計著重于提高串行結(jié)構(gòu)FIR的速度。下面將介紹一種高速的Booth算法乘法器和高速的加法器。
評論