基于FPGA流水線(xiàn)分布式算法的FIR濾波器的實(shí)現
隨著(zhù)數字技術(shù)日益廣泛的應用,以現場(chǎng)可編程門(mén)陣列(FPGA)為代表的ASIC器件得到了迅速普及和發(fā)展,器件集成度和速度都在高速增長(cháng)。FPGA既具有門(mén)陣列的高邏輯密度和高可靠性,又具有可編程邏輯器件的用戶(hù)可編程特性,可以減少系統設計和維護的風(fēng)險,降低產(chǎn)品成本,縮短設計周期。
分布式算法是一種以實(shí)現乘加運算為目的的運算方法。它與傳統算法實(shí)現乘加運算的不同在于執行部分積運算的先后順序不同。簡(jiǎn)單地說(shuō),分布式算法在完成乘加功能時(shí)是通過(guò)將各輸入數據每一對應位產(chǎn)生的部分積預先進(jìn)行相加形成相應部分積,然后再對各部分積進(jìn)行累加形成最終結果,而傳統算法是等到所有乘積產(chǎn)生之后再進(jìn)行相加來(lái)完成乘加運算的。與傳統算法相比,分布式算法可極大地減少硬件電路規模,很容易實(shí)現流水線(xiàn)處理,提高電路的執行速度。
FPGA有著(zhù)規整的內部邏輯塊陣列和豐富的連線(xiàn)資源,特別適合細粒度和高并行度結構特點(diǎn)的數字信號處理任務(wù),如FIR、FFT等。本文詳細討論利用FPGA實(shí)現FIR濾波器的設計過(guò)程,并且對設計中的關(guān)鍵技術(shù)——分布式算法進(jìn)行詳細描述。
1 FIR和分布式算法
1.1 FIR的基本概念
FIR濾波器的數學(xué)表達式為:
式中,N是FIR濾波器的抽頭數;x(n)表示第n時(shí)刻的輸入樣本;h(i)是FIR濾波器的第i級抽頭系數。
普通的直接型FIR濾波器結構如圖1所示。
FIR濾波器實(shí)質(zhì)上是一個(gè)分節的延遲線(xiàn),把每一節的輸出加權累加,便得到濾波器的輸出。對于FIR濾波器,幅度上只需滿(mǎn)足以下兩個(gè)條件之一,就能構成線(xiàn)性相位FIR濾波器。
h(n)=h(N-1-n) (2)
h(n)=-h(N-1-n) (3)
式(2)稱(chēng)為第一類(lèi)線(xiàn)性相位的幅度條件(偶對稱(chēng)),式(3)稱(chēng)為第二類(lèi)線(xiàn)性相位的幅度條件(奇對稱(chēng))。
1.2 FIR濾波器的優(yōu)化
在實(shí)際應用中,為了減少邏輯資源的占有量和提高系統的運行速度,對FIR濾波器需要進(jìn)行優(yōu)化處理。本文采用的優(yōu)化主要有兩種:一種是對表達式進(jìn)行優(yōu)化,另一種是在FPGA實(shí)現中利用特有的查找表進(jìn)行優(yōu)化。
1.2.1 表達式的直接優(yōu)化
對于線(xiàn)性相位因果FIR濾波器,它的系數具有中心對稱(chēng)特性,即h(i)=±h(N-1-i)。令s(i)=x(i)±x(N-1-i),對于偶對稱(chēng),代入式(1)可得:
根據方程(4),線(xiàn)性相位FIR濾波器的直接型結構可以改為如圖2所示的結構,從而使N次乘法減少為[N/2]次,加法次數增加了[N/2]次(N為偶數),總的運算量減少。
1.2.2 利用查找表進(jìn)行設計優(yōu)化
由于實(shí)現的是固定系數的FIR濾波器,所以可以利用簡(jiǎn)化的乘法器(如查找表)減少設計所耗用的器件資源。
以一個(gè)8階FIR濾波器為例來(lái)說(shuō)明在FPGA實(shí)現中優(yōu)化的過(guò)程。假定濾波器的輸入為2bit的正整數,由式(4)可以得到輸出為:
y(n)=s(0)h(0)+s(1)h(1)+s(2)h(2)+s(3)h(3) (5)
這時(shí)的乘法和加法就可以并行地采用查找表實(shí)現,其結構示意圖如圖3所示。
在圖3中,右面4個(gè)信號是輸入的低位bit,左邊是輸入信號的高位bit。低位和P1最多使用4bit,由于系數固定,查找表實(shí)現起來(lái)很方便;高位和P2可按同樣方法計算。在該結構中,部分積P1和P2可以利用Virtex-E的4輸入查找表實(shí)現,所有的計算都可并行完成。由于輸入為2bit,因此只用了一個(gè)加法器;對于更多位數的輸入來(lái)說(shuō),將需要更多的加法器。這樣就實(shí)現了將乘法器轉化為加法器,減少了邏輯資源,優(yōu)化了設計。
1.3 分布式算法
分布式算法在20多年前被首次提出,但直到Xilinx發(fā)明FPGA的查找表結構以后,分布式算法才在20世紀90年代初重新受到重視,并被有效地應用在FIR濾波器的設計中。下面介紹分布式算法的原理。
式(1)可以用下式表示:
式中,hi即h(i),xi(n)即x(n-i),N為濾波器的抽頭數。
把數據源數據格式規定為2的補碼形式,則:
式中,xib(n)為二進(jìn)制數,取值為0或1;xi 0(n)為符號位,為1表示數據為負,為0表示數據為正。將(7)式代入(6)式可得:
由此可以看出,方括號中是輸入變量的一個(gè)數據位和所有濾波器抽頭系數h0~hi的每一位進(jìn)行“與”運算并求和。而指數部分則說(shuō)明了求和結果的位權,整數乘以2b就是左移b位,對此可以通過(guò)硬件連線(xiàn)實(shí)現,不占用邏輯資源。這樣就可以通過(guò)建立查找表來(lái)實(shí)現方括號中的運算,查找表可用所有輸入變量的同一位進(jìn)行尋址。
2 系統設計與實(shí)現
下面以一個(gè)16階的線(xiàn)性相位FIR低通濾波器為例說(shuō)明設計的過(guò)程。
2.1 設計指標及參數提取
2.1.1 濾波器的設計指標
采樣頻率:≥50MHz 歸一化截止頻率:0.4MHz
類(lèi) 型:低通 輸入數據寬度:8位
階 數:16階 輸出數據寬度:16位
2.1.2 參數提取
采用漢寧窗函數(Hanning)設計16階線(xiàn)性相位FIR數字濾波器,并提取其特性參數。
這里需要注意的是:下載到FPGA的程序是按照FIR濾波器的差分方程式編寫(xiě)的。由于從MATLAB中算出的系數h(n)的值是一組浮點(diǎn)數,而FPGA器件只進(jìn)行定點(diǎn)值的計算,所以要進(jìn)行浮點(diǎn)值到定點(diǎn)值的轉換。假定“1”對應10000000000000000(17位,相當于乘上65536)。
用漢寧窗(Hanning)進(jìn)行設計,此16階FIR數字低通濾波器特性參數經(jīng)過(guò)換算如下:
h[0]=h[15]=0000 h[1]=h[14]=0065 h[2]=h[13]=018F h[3]=h[12]=035A h[4]=h[11]=0579 h[5]=h[10]=078E h[6]=h[9]=0935 h[7]=h[8]=0A1F
2.2 系統具體實(shí)現步驟
2.2.1 查找表的建立
我們知道,如果濾波器抽頭數N過(guò)多,用單個(gè)查找表就不能夠執行全字(因為查找表位寬=濾波器抽頭數的數量)。在這種情況下,可以將表的地址輸入位數(即濾波器抽頭數N)進(jìn)行降低,即利用部分表并將結果相加。如果加上流水線(xiàn)寄存器,這一改進(jìn)并沒(méi)有降低速度,但是卻可以極大地減少設計規模,因為查找表的規模是隨著(zhù)地址空間,也就是濾波器抽頭數N的增加而呈指數增加。濾波器抽頭數是16個(gè),考慮到線(xiàn)性FIR濾波器的偶對稱(chēng)特性,只考慮8個(gè)獨立濾波器抽頭數,則需要一個(gè)28×8的表(其中指數8指的是8個(gè)濾波器抽頭數,后面的8指的是輸入數據的位寬)。但是Virtex-e FPGA只能提供4輸入的查找表,所以要對查找表的地址進(jìn)行電路分割。將8位地址線(xiàn)分為高4位和低4位,分別作為兩個(gè)24×8的查找表的地址輸入,從而指數倍地節省了硬件資源。
查找表的具體內容如表1所示。
2.2.2 查表計算部分積累加和的過(guò)程
假定輸入數據x[n]的值x[0]=110=000000012c,x[1]=-110=111111112c,x[2]=310=000000112c,x[3]=210=000000102c。(注:2c代表用二進(jìn)制補碼表示,最高位為符號位。)
查找表(1)的部分積如表2所示。
數據校驗結果:h[0]x[0]+h[1]x[1]+h[2]x[2]+h[3]x[3]=2812。
說(shuō)明利用分布式查表算法的計算結果與直接計算結果相同,算法正確無(wú)誤。
查找表(2)的查表計算結果依此類(lèi)推。只是需要注意:查找表(2)的數據輸入x是8位數據x[4]、x[5]、x[6]、x[7],而不是x[3]、x[2]、x[1]、x[0]。根據系數偶對稱(chēng)性質(zhì),x[8]、x[9]、x[10]、x[11]查查找表(2),x[12]、x[13]、x[14]、x[15]查查找表(1)。
3 設計結果
本系統的FPGA采用Xilinx公司的Virtex-E系列中的XCV100E FPGA,使用的軟件是Xilinx公司的ISE5.2i及Modelsim公司的Modelsim時(shí)序仿真工具,對FIR濾波器進(jìn)行描述編程使用的是VHDL語(yǔ)言。
實(shí)現FIR濾波器的最上層的原理圖如圖4所示,輸入16個(gè)8位數據data_in={1,-1,3,2,2,-1,1,-1,1,-1,3,2,2,-1,1,1}。
系統仿真的時(shí)序圖如圖5所示。所設計FIR濾波器的幅頻、相頻、單位脈沖沖激響應如圖6~8所示。
FIR濾波器是DSP的基本運算形式之一。本文介紹的基于FPGA的分布式算法提高了系統運行的速度并且節省了大量的FPGA資源。通過(guò)階數以及查找表中抽頭系數的設定,還可以靈活地實(shí)現除低通外的高通、帶阻和帶通濾波器。
設計的電路已通過(guò)FPGA驗證,說(shuō)明工作正常,符合設計指標。
評論