摘 要:分析了FIR濾波器幾種常見(jiàn)實(shí)現(xiàn)方法的原理與不足;提出一種基于SoPC的FIR濾波器設(shè)計(jì);介紹了系統(tǒng)的設(shè)計(jì)流程及實(shí)現(xiàn)方法;結(jié)合Matlab給出FIR濾波器的仿真結(jié)果。整個(gè)設(shè)計(jì)以Altera公司現(xiàn)場(chǎng)可編程邏輯器芯片EP3C25E144C8N為核心,具有程序簡(jiǎn)單,調(diào)試方便的特點(diǎn),有一定的實(shí)用價(jià)值及應(yīng)用前景。
關(guān)鍵詞:FIR濾波器; SoPC; Matlab; 現(xiàn)場(chǎng)可編程邏輯器
中圖分類號(hào):TP713 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2010)12-0072-03
Design and Realization of FIR Filter Based on SoPC
HU Zi-ying1,ZHOU Wei-long2,NIE Hui2
(1. Hunan University of Science and Engineering, Yongzhou 425100, China;
2. Electric and Information Engineering College, Hunan University of Technology, Zhuzhou 412008, China)
Abstract:A design of FIR filter based on SoPC is proposed, and the principle and deficiency of several common realization methods of FIR filter are analyzed. The design flow and realization of the system is discussed, and the simulation result of FIR filter is given combined with Matlab. The system uses the EP3C25E144C8N (produced by Altera) as the core, and it has features of simple program and convenient debugging.
Keywords:FIR filter; SoPC; Matlab; FPGA
0 引 言
數(shù)字濾波(idgital filter)是由數(shù)字乘法器、加法器和延時(shí)單元組成的一種計(jì)算方法。其功能是對(duì)輸入離散信號(hào)的數(shù)字代碼進(jìn)行運(yùn)算處理,以達(dá)到改變信號(hào)頻譜的目的。數(shù)字濾波器根據(jù)頻域特性可分為低通、高通、帶通和帶阻4個(gè)基本類型;根據(jù)時(shí)域特性可分為無(wú)限脈沖響應(yīng)(infinite impulse response,IIR)濾波器和有限脈沖響應(yīng)(finite impulse response,F(xiàn)IR)濾波器。FIR濾波器不存在穩(wěn)定性和是否可實(shí)現(xiàn)的問(wèn)題,容易做到線性相位,故在數(shù)據(jù)通信、圖像處理等領(lǐng)域廣泛應(yīng)用[1]。
目前,F(xiàn)IR濾波器的硬件實(shí)現(xiàn)有以下幾種方式:一種是使用通用數(shù)字濾波器集成電路,這種電路使用簡(jiǎn)單,但是由于字長(zhǎng)和階數(shù)的規(guī)格較少,不易完全滿足實(shí)際需要;雖然可采用多片擴(kuò)展來(lái)滿足要求,但會(huì)增加體積和功耗,因而在實(shí)際應(yīng)用中受到限制。另一種是使用DSP 芯片,DSP芯片有專用的數(shù)字信號(hào)處理函數(shù)可調(diào)用,實(shí)現(xiàn) FIR 濾波器相對(duì)簡(jiǎn)單,但是由于程序順序執(zhí)行,速度受到限制。而且,就是同一公司不同系統(tǒng)的DSP芯片,其編程指令也會(huì)有所不同,開(kāi)發(fā)周期較長(zhǎng)。還有一種是使用可編程邏輯器件,如FPGA(field programmable gate array ),即現(xiàn)場(chǎng)可編程門陣列,有著規(guī)整的內(nèi)部邏輯塊整列和豐富的連線資源,特別適合用于細(xì)粒度和高并行度結(jié)構(gòu)的 FIR 濾波器實(shí)現(xiàn),相對(duì)于串行運(yùn)算主導(dǎo)的通用 DSP 芯片來(lái)說(shuō),并行性和可擴(kuò)展性都更好[2]。
本文介紹一種基于SoPC的FIR濾波器設(shè)計(jì)方案,設(shè)計(jì)流程如圖1所示。該設(shè)計(jì)方法程序簡(jiǎn)單,調(diào)試方便,得到的FIR濾波器精確度高。
1 FIR濾波器原理
FIR數(shù)字濾波器是一種非遞歸系統(tǒng),其沖激響應(yīng)總是有限長(zhǎng)的,其系統(tǒng)函數(shù)可以記為:H(z)=∑Mk=0bkz-k,最基本的FIR濾波器可用下式表示[3]:y(n)=∑N-1m=0x(n-m)h(m)。式中:x(n-m)是輸入采樣序列;h(m)是濾波器系數(shù);N是濾波器的階數(shù);y(n)表示濾波器的輸出序列。也可以用卷積來(lái)表示輸出序列y(n)與x(n),h(n)的關(guān)系:
y(n)=x(n)*h(n)
圖2顯示了一個(gè)典型的直接T型3階FIR濾波器[4],其輸出序列y(n)滿足下列等式:
h(n)= h(0)x(n)+h(1)x(n-1)+
h(2)x(n-2)+h(3)x(n-3)
圖1 設(shè)計(jì)流程圖
圖2 3階FIR濾波器結(jié)構(gòu)
在該FIR濾波器中,總共存在3個(gè)延時(shí)結(jié),4個(gè)乘法單元,1個(gè)4輸入的加法器。如果采用普通的數(shù)字信號(hào)處理器(DSP)來(lái)實(shí)現(xiàn),只能用串行的方式順序地執(zhí)行延時(shí)、乘加操作,不可能在1個(gè)DSP處理器指令周期內(nèi)完成,必須用多個(gè)指令周期來(lái)完成。但如果采用FPGA來(lái)實(shí)現(xiàn),就可以采用并行結(jié)構(gòu),在1個(gè)時(shí)鐘周期內(nèi)得到1個(gè)FIR濾波器的輸出。不難發(fā)現(xiàn),圖2的電路結(jié)構(gòu)是一種流水線結(jié)構(gòu),這種結(jié)構(gòu)在硬件系統(tǒng)中有利于并行高速運(yùn)行[5]。
2 FIR濾波器的實(shí)現(xiàn)
Altera提供的FIR Complier是結(jié)合Altera FPGA器件的FIR Filter Core,DSP Builder與FIR Compiler 可以緊密結(jié)合起來(lái)。DSP Builder提供了FIR Core的應(yīng)用環(huán)境和仿真驗(yàn)證環(huán)境。
2.1 建立模型文件
為了調(diào)用FIR IP Core,在Simulink環(huán)境中新建模型文件,放置Signal Compiler模塊和FIR 模塊。啟動(dòng)Simulink的方法:打開(kāi)Matlab,在主命令窗口直接鍵入Simulink,按回車即可。然后打開(kāi)Altera DSP Builder模塊,在MegaCore Functions 調(diào)出fir_compiler_v7_0。
2.2 配置FIR濾波器核[6]
雙擊模型中的FIR模塊,在彈出來(lái)的選擇窗口中有:關(guān)于這個(gè)核(about this core)、程序說(shuō)明書(shū)(documentation)、顯示元件(display symbol)、步驟1確定參數(shù)(Step1:Parameterize)和步驟2生成(Step2:Generate)等4個(gè)不同的選項(xiàng)。點(diǎn)擊Step1,便打開(kāi)了FIR濾波器核的參數(shù)設(shè)置窗口,如圖3所示。
由圖3可見(jiàn),濾波器的系數(shù)精度為32位,器件為CycloneⅢ,結(jié)構(gòu)為并行濾波器,結(jié)構(gòu)選擇了1級(jí)流水線,濾波器由LC邏輯宏單元構(gòu)成,系數(shù)數(shù)據(jù)存于FPGA的M9K模塊中,1個(gè)輸入通道,32位有符號(hào)并行輸入,全精度數(shù)據(jù)輸出。設(shè)定后會(huì)直接顯示濾波器的頻率響應(yīng)(frequency response)或時(shí)域響應(yīng)及系數(shù)值(time response coefficeient values)。由其頻率響應(yīng)圖可以看出,此FIR濾波器為低通濾波器。如果不符合設(shè)計(jì)要求,則可以通過(guò)對(duì)Edit Coefficient Set選項(xiàng),對(duì)濾波器進(jìn)行重新配置。
圖3 確定FIR 濾波器系數(shù)
2.3 生成VHDL語(yǔ)言
完成FIR濾波器核配置后,便可得到設(shè)計(jì)好的濾波器,加入輸入/輸出信號(hào),形成如圖4所示電路。點(diǎn)擊SignalCompiler,再選擇Analyze,選擇Sigle step compilation中的Convert MDL to VHDL,就可以生成對(duì)應(yīng)的VHDL語(yǔ)言。
圖4 FIR濾波器編譯電路圖
在QuartusⅡ中打開(kāi)編譯后生成的fir.qpf工程文件,可以得到濾波器的VHDL語(yǔ)言,其部分代碼如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_signed.all;
library dspbuilder;
use dspbuilder.dspbuilderblock.all;
library lpm;
use lpm.lpm_components.all;
Entity fir is
Port(
clock: in std_logic;
sclrp: in std_logic:=′0′;
ast_sink_data: in std_logic_vector(31 downto 0);
ast_sink_error: in std_logic_vector(1 downto 0);
ast_sink_valid: in std_logic;
ast_source_ready: in std_logic;
reset: in std_logic;
Output: out std_logic;
Output1: out std_logic_vector(31 downto 0);
Output2: out std_logic_vector(1 downto 0);
Output3: out std_logic
);
end fir;
編譯成功后,可以將其轉(zhuǎn)換成元件。
2.4 系統(tǒng)功能仿真
在Matlab中,建立M文件,運(yùn)用前面設(shè)置好參數(shù)所生成的FIR濾波器,打開(kāi)FIR濾波器時(shí)域響應(yīng)與系數(shù)值(time response coefficeient values)。得到該濾波器的時(shí)域響應(yīng)和系數(shù)值如圖5所示,由該系數(shù)表確定濾波器,并進(jìn)行算法級(jí)仿真,得到如圖6所示的波形。圖6(a)為濾波前信號(hào),圖6(b)為濾波后信號(hào)。從仿真波形可以看出,經(jīng)過(guò)FIR濾波器之后,高次諧波信號(hào)被很好地濾除了,達(dá)到了預(yù)定的設(shè)計(jì)目標(biāo)[7]。
圖5 FIR濾波器時(shí)域響應(yīng)與系數(shù)值圖
圖6 FIR的仿真波形
3 基本FPGA片上系統(tǒng)的功能測(cè)試
設(shè)計(jì)目標(biāo)器件選用美國(guó) Altera公司 Cyclone系列 FPGA 器件中的 EP3C25E144C8N 芯片,通過(guò)開(kāi)發(fā)工具 Quartus Ⅱ?qū)Ω鱾€(gè)模塊的 VHDL 源程序及頂層電路進(jìn)行編譯、邏輯綜合、電路的糾錯(cuò)、驗(yàn)證、自動(dòng)布局布線及仿真等各種測(cè)試,最終將設(shè)計(jì)編譯的數(shù)據(jù)下載到芯片中,同時(shí)與單片機(jī)AT89C51 結(jié)合,進(jìn)一步進(jìn)行數(shù)據(jù) 的快速處理和控制,實(shí)現(xiàn)鍵盤可設(shè)置參數(shù)及LCD 顯示。經(jīng)實(shí)際電路測(cè)試驗(yàn)證,達(dá)到了設(shè)計(jì)的要求[8]。
4 結(jié) 語(yǔ)
這種基于SoPC數(shù)字濾波器的設(shè)計(jì)與實(shí)現(xiàn),不僅利用 Matlab中的Simulink與Alterl DSP Builder工具確定 FIR 濾波器系數(shù),不用編程,只需簡(jiǎn)單的設(shè)置,而且通過(guò)VHDL層次化設(shè)計(jì)方法,同時(shí)使FPGA與單片機(jī)相結(jié)合,采用C51及VHDL語(yǔ)言模塊化設(shè)計(jì)思想進(jìn)行優(yōu)化編程,進(jìn)一步完善了數(shù)據(jù)的快速處理和有效控制,提高了設(shè)計(jì)的靈活性、可靠性,也增強(qiáng)了系統(tǒng)功能的可擴(kuò)展性。
參考文獻(xiàn)
[1]張登奇,李望移.基于Matlab的FIR數(shù)字濾波器設(shè)計(jì)[J].計(jì)算機(jī)時(shí)代,2007(11):47-49.
[2]王靜,魚(yú)云岐.基于FPGA的FIR 數(shù)字濾波器設(shè)計(jì)與仿真[J].國(guó)外電子元器件,2008(11):90-92.
[3]程佩青.數(shù)字信號(hào)處理教程[M].3版.北京:清華大學(xué)出版社,2006.
[4]羅韓君,劉明偉,王成.基于DSP Builder的FIR濾波器設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2009,25(2):148-149.
[5]潘松,黃繼業(yè).EDA技術(shù)與VHDL[ M] .2版.北京:清華大學(xué)出版社,2007.
[6]Altera Corporation. FIR compiler user guide[ M] . [ S.l.] : Altera Corporation, 2006.
[7]張志涌.精通Matlab 6.5版[M].北京:北京航空航天大學(xué)出版社,2003.
[8]楊國(guó)慶.基于 FPGA的 FIR數(shù)字濾波器的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2008,31(19):184-186.