引言
目前,用FPGA(現(xiàn)場可編程門陣列)實現(xiàn)FIR(有限沖擊響應(yīng))濾波器的方法大多利用FPGA中LUT(查找表)的特點采用DA(分布式算法)或CSD碼等方法,將乘加運算操作轉(zhuǎn)化為位與、加減和移位操作。這些結(jié)構(gòu)需要占用器件較多的LE(邏輯元件)資源,設(shè)計周期長,工作頻率低,實時性差。本文提出一種基于Stratix系列FPGA器件的新的實時高速脈動FIR濾波器的快速實現(xiàn)方法。利 用FGPA集成的DSP(數(shù)字信號處理器)乘加模塊定制卷積運算單元,利用VHDL(甚高速集成電路硬件描述語言)元件例化語句快速生成脈動陣列結(jié)構(gòu)的FIR濾波器,設(shè)計周期短、可移植性強,設(shè)計采用全流水結(jié)構(gòu),能高速、無滯后地實現(xiàn)實時信號處理。
1 設(shè)計指標(biāo)及參數(shù)量化
1.1 濾波器技術(shù)指標(biāo)
本文依據(jù)以下技術(shù)指標(biāo)設(shè)計一個64階等波紋濾波器:Fs=4.092 MHz;Fpass=1.4 MHz,fstop=1.6 MHz;Wpass<1 dB,Wstop<-50 dB。使用MATLAB中FDA-Tool工具獲得濾波器系數(shù)。
1.2 參數(shù)量化
從FDATool中得到的濾波器系數(shù)值是一組浮點小數(shù),必須量化為定點數(shù)才能在FPGA器件中實現(xiàn)。本文采用移位舍入的量化方法對濾波器系數(shù)進行量化,MATLAB描述為:
得到64階系數(shù)。濾波器系數(shù)預(yù)先存入器件內(nèi)部ROM中,通過修改coet.mif文件中的參數(shù)可以改變?yōu)V波器的類型或參數(shù)。使用Altera_mf庫中altsyncram元件可以直接調(diào)用ROM中保存的數(shù)據(jù)。其調(diào)用語句描述如下:
2 FIR設(shè)計
2.1 器件簡介
Stratix系列FPGA內(nèi)部提供了豐富的硬功能模塊,如片內(nèi)RAM、PLL(鎖相環(huán))、DSP模塊等,充分理解這些模塊的結(jié)構(gòu)特點和工作原理,掌握其使用方法,可以充分利用器件資源,最大程度地發(fā)揮器件在整個系統(tǒng)設(shè)計中的作用,使系統(tǒng)設(shè)計最優(yōu)化。提供的DSP模塊集成了乘、加/減/累加、求和這幾種算術(shù)操作,支持符號數(shù)、無符號數(shù)和混合運算,并且在這些計算路徑中集成了可選的寄存器級和全局/局部時鐘控制。一個DSP塊最多可以配置成8個9×9、4個18×18或者1個36×36的乘法器,可工作在簡單乘法器模式、乘累加模式、2乘加模式和4乘加模式,應(yīng)用這4種模式,可以實現(xiàn)高性能的DSP算法。本文選用StratixⅡ器件,在QuartusⅡ開發(fā)環(huán)境下應(yīng)用4乘加模式生成脈動陣列PE(處理單元),用VHDL描述實現(xiàn)FIR濾波器設(shè)計。
2.2 脈動陣列結(jié)構(gòu)沒計
本文參考文獻[6]中陣列F結(jié)構(gòu)--扇入結(jié)果,輸入流動,權(quán)值存入PE,設(shè)計一種可實時更替權(quán)值的FIR脈動結(jié)構(gòu),如圖1所示。權(quán)值w從上流入各個PE中,輸入x門左向右流入PE。在這個陣列中,x值在每個單步時刻內(nèi)向右邊的PE移動一次。在每次計算中,各個PE同時進行乘法,算出同一個y值的各乘積項,然后將乘積結(jié)果扇入至加法器中相加,得到該y值的結(jié)果,實現(xiàn)FIR算法。
2.3 PE設(shè)計
DSP模塊集成的算術(shù)操作中,4乘加模式就是4個乘法器將乘積送出相加,輸出一個加/減的結(jié)果。利用模塊內(nèi)部可選的寄存器,可使輸入數(shù)據(jù)在模塊內(nèi)部流動,實現(xiàn)移位寄存器功能,如圖2所示FPGA片內(nèi)DSP塊的結(jié)構(gòu)。若兩路輸入分別為輸入信號和濾波器系數(shù)。
本文選用DSP模塊構(gòu)成脈動陣列結(jié)構(gòu)FIR濾波器的PE卷積單元。具體方法是,采用基于Altera_mf庫的乘累加運算元件“ALTMULT_ADD”可以快速完成PE設(shè)計。通過Altera的IP工具MegaWizard管理器(MegaWizard Plug-In Manager),定制算術(shù)單元(Arith-metic)中乘累加底層基本宏功能模塊的參數(shù),設(shè)置需要的乘法器個數(shù)、輸入輸出數(shù)據(jù)格式、流水線控制時鐘等參數(shù),即可完成4階卷積PE元件的設(shè)計。
通過調(diào)用宏功能模塊生成元件的封裝文什,然后在設(shè)計代碼中調(diào)用該封裝文件。本文選擇16位符號數(shù)輸入、34位符號數(shù)輸出,設(shè)置分級流水線控制輸入、輸出、乘積結(jié)果和加法結(jié)果,選擇一路輸入內(nèi)部移位。第k個PE元件例化VHDL描述如下:
元件中clk0~clk1分別指向PE中各級寄存器建立時鐘。例如t-1時刻,x(t-I)~x(t-4)參與PEk中計算;t時刻,數(shù)據(jù)x(t)流入PE時,PE 中 4個乘法單元中寄存的數(shù)據(jù)往前流動,x(t-4)從shiftouta端門流向下級PE。
3 FIR優(yōu)化設(shè)計
將前述的例化的PE單元按圖1所示的脈動結(jié)構(gòu)連接起來,就完成了一個基本的脈動FIR濾波器設(shè)計,為提高系統(tǒng)性能,需要進一步對設(shè)計進行優(yōu)化。
3.1 時序優(yōu)化設(shè)計
對設(shè)計而言,提高工作頻率至關(guān)重要,更高的工作頻率意味著更強的處理能力。合理設(shè)計系統(tǒng)的時序?qū)μ岣哒麄€設(shè)計的工作頻率有著至關(guān)重要的作用。而整個系統(tǒng)中最核心和復(fù)雜的時序關(guān)系為PE內(nèi)部乘加時序。以下時序優(yōu)化以PE單元為例。
本設(shè)計期望系統(tǒng)工作在200 MHz以上。因此,對設(shè)計的tco(時鐘到輸出延時)、tsu(輸入建立時間)、tpd(引腳到引腳延時)分別約束為3 ns、2 ns、5 ns。編譯后從時序分析報告(Timing Analyzer Report)可得到PE處理單元的基本時序關(guān)系。若使用單周期設(shè)計,從輸入數(shù)據(jù)到參與乘法、加法計算再到結(jié)果輸出,至少需要2.023+1.829+2.625+2.577=9.84 ns才能完成一次運算,達不到期望時鐘頻率。若應(yīng)用DSP模塊的流水線工作,合理設(shè)置PE單元各級觸發(fā)時鐘,則可使系統(tǒng)工作頻率昆著提高,系統(tǒng)最高可工作在356.13 MHz(相同速度等級的芯片,Altera公司提供的9位16階FIR IP核,參考工作頻率為217.15 MHz)??紤]系統(tǒng)完成后全天候工作,為保證系統(tǒng)長期穩(wěn)定,本設(shè)計最終選用208.33 MHz系統(tǒng)工作頻率。
3.2 加法優(yōu)化設(shè)計
設(shè)計一個64階的濾波器,需要使用16個PE,即需要對16個乘加結(jié)果進行加操作,如果采用圖1所示的加法運算,如圖4(a)所示,計算一次y值需要15個時鐘周期才能完成,而且在15個周期內(nèi)各個加法輸入不能變化,若設(shè)計中PE能達到300 MHz的工作頻牢,加法也只能工作在20 MHz,必然阻礙設(shè)計的高速實現(xiàn),成為制約系統(tǒng)性能的瓶頸。
采用流水線的加法運算是解決這個瓶頸的最好方法。如圖4(b)所示。clk1~clk5與PE計算時鐘同步,無需延長加法計算時鐘,第5級流水的加法器使能后就能實時得到y(tǒng)結(jié)果。通過LPM(參數(shù)化模塊庫),直接在代碼中實例化LPM加法運算,就能快速生成全流水結(jié)構(gòu)的加法模塊。其中第1級16個加法描述如下:
END GENERATE;
4 FIR實現(xiàn)
上述的描述在QuartusⅡ開發(fā)工具中進行編譯和布局布線,采用的目標(biāo)器件為EP2S601024C4芯片,系統(tǒng)內(nèi)部最高運算時鐘為356.13 MHz。
設(shè)計的其他性能參數(shù)如下:總邏輯單元1 037個;總寄存器單元1 070個;總存儲器容量2 048B;使用的9位DSP模塊128個;最差輸入引腳到寄存器延時1.750 ns;最差寄存器到輸出引腳延時2.615 ns。
本設(shè)計經(jīng)過MATLAB與Modelsim聯(lián)合功能仿真,MATLAB與Quartus聯(lián)合時序仿真,兩種仿真結(jié)果與FPGA處理后的數(shù)據(jù)一致。
5 結(jié)束語
本文結(jié)合FPGA器件的結(jié)構(gòu)和特點,利用DSP模塊及其內(nèi)部寄存器實現(xiàn)FIR脈動濾波器,不僅性能高,同時節(jié)約了LE資源和布線資源。通過MegaWizard宏模塊編輯器,可以快速定制核心的處理單元實現(xiàn)脈動結(jié)構(gòu),對不同結(jié)構(gòu)的濾波器只需修改定制處理單元參數(shù)和ROM中系數(shù),就可以迅速設(shè)計出新的濾波器。采用全流水加法結(jié)構(gòu),使用最少的邏輯單元,達到最高的工作頻率,完成對信號的實時、高速處理。