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