作者:单文军 周雪纯 李文华
来源:《现代电子技术》2013年第14期
摘要: 简要介绍了FIR数字滤波器的结构特点和基本原理,提出基于FPGA和DSP Builder的FIR数字滤波器的基本设计流程和实现方案。在Matlab/Simulink环境下,采用DSP Builder模块搭建FIR模型,根据FDATool工具对FIR滤波器进行了设计,然后进行系统级仿真和ModelSim功能仿真,其仿真结果表明其数字滤波器的滤波效果良好。通过SignalCompiler把模型转换成VHDL语言加入到FPGA的硬件设计中,从QuartusⅡ软件中的虚拟逻辑分析工具SignalTapⅡ中得到数字滤波器实时的结果波形图,结果符合预期。
关键词: FPGA; DSP Builder; FIR数字滤波器; ModelSim功能仿真
中图分类号: TN911⁃34 文献标识码: A 文章编号: 1004⁃373X(2013)14⁃0123⁃04
Design and implementation of FIR digital filter based on FPGA
SHAN Wen⁃jun, ZHOU Xue⁃chun, LI Wen⁃hua
(China Flight Test Establishment, Xi’an 7100, China)
Abstract: The structure feature and the basic principle of FIR digital filter is introduced briefly. The basic design process and implementation scheme of the FIR digital filter based on FPGA and DSP Builder is proposed in this paper. FIR model is structured with DSP Builder module in the Matlab/Simulink environment. The FIR digital filter is designed according to the FDATool. The system level simulation and ModelSim function simulation were completed. The simulation results show that the filter has excellent effect. The model is converted to VHDL language through SingalCompiler and added to FPGA hardware design. The real⁃time waveform graph of the FIR digital filter was received by the virtual logic analysis tool SignalTapⅡ in QuartusⅡ. The results conform to the expected requirement.
Keywords: FPGA; DSP Builder; FIR digital filter; ModelSim function simulation
在信息信号处理过程中,数字滤波器是信号处理中使用最广泛的一种方法。通过滤波运算,将一组输入数据序列转变为另一组输出数据序列,从而实现时域或频域中信号属性的改变[1]。常用的数字滤波器可分为有限脉冲响应(FIR)滤波器和无限脉冲响应(IIR)滤波器两种。其中,FIR数字滤波器具有严格的线性相位[2],而且非递归结构也保证了运算的稳定性。在实时性要求比较高的应用场合,采用可编程芯片FPGA加以实现,相比于DSP芯片或专用芯片的实现方法,具有高速、高精度、高灵活性的优点[3]。本文在采取了一种基于FPGA和DSP Builder的方法设计FIR数字滤波器时,采用了层次化、模块化的设计思想,遵循DSP Builder的设计开发流程,在Matlab/Simulink中建立模型并进行系统级仿真,再进行Verilog语言转换,ModelSim仿真验证无误后实现了FIR数字滤波器的实时测试。
1 FIR数字滤波器的基本原理及结构
对于一个FIR滤波器系统,它的冲击响应总是有限长的,其系统函数可以记为:
(1)
该数学表达式可用差分方程来表示:
(2)
式中:是输入采样序列;是滤波器系数;是滤波器阶数;表示滤波器的输出序列。
图1为阶FIR数字滤波器的结构框图。
2 FIR数字滤波器的设计流程
该设计流程主要涉及到Matlab/Simulink、DSP Builder和Quartus Ⅱ等工具软件的开发设计。整个设计流程,包括从系统描述直至硬件实现,可以在一个完整的设计环境中完成[4],如图2所示。
图1 FIR数字滤波器的结构框图
图2 DSP Builder设计流程图
(1)Matlab/Simulink中设计输入,即在Matlab的Simulink环境中建立一个扩展名为mdl的模型文件,用图形方式调用Altera DSP Builder和其他Simulink库中的图形模块(Block),构成系统级或算法级设计框图(或称Simulink设计模型)。
(2)利用Simulink的图形化仿真、分析功能,分析此设计模型的正确性,完成模型仿真,也叫系统级仿真。
(3)DSP Builder设计实现的关键一步,通过SignalCompiler把Simulink的模型文件转化成通用的硬件描述语言Verilog文件。
(4)转换好的Verilog源代码用ModelSim软件进行功能仿真,验证Verilog文件的正确性。接下来的几个步骤是对以上设计产生的Verilog的RTL代码和仿真文件在Quartus Ⅱ工具软件中进行综合、编译适配,生成扩展名为.sof的文件加载到FPGA硬件系统中。
3 FIR数字滤波器的详细设计
3.1 FIR数字滤波器模块设计与系统级仿真
根据FIR数字滤波器的原理,在Simulink环境下搭建16阶的FIR数字滤波器结构,如图3所示。
在模型的搭建过程中,使用了两个8位的Shift Taps移位寄存器模块对输入信号进行分解,然后根据数字滤波器的原理进行算法计算。
图3 FIR数字滤波器的Simulink结构图
模型搭建好之后,需要确定16阶FIR数字滤波器的系数,在这使用Matlab中的FDATool滤波器设计工具来确定。确定好滤波器的指标:
(1)设计一个16阶的FIR 滤波器;
(2)低通滤波器;
(3)采样频率fs为16 384 Hz,截频点频率fs为533 Hz;
(4)输入序列位宽为16位。
在设计滤波器界面中,如图4所示,进行下列选择:
(1)滤波器类型(Filter Type)为低通(Lowpass);
(2)设计方法(Design Method)为FIR,采用窗口法(Window);
(3)滤波器阶数(Filter Order)定制为15(设置为15阶而不是16阶,是由于设计的16阶FIR滤波器的常系数项);
(4)滤波器窗口类型为Kaiser,Beta为0.5。
所有的选项确定好后,在FDATool滤波器设计界面中点击“Design Filter”,Matlab就会计算滤波器系数并作相关分析。图5所示为滤波器的幅频响应,图6所示为滤波器的阶跃响应。
图4 FDATool的滤波器设计界面
图5 FIR滤波器的幅频响应
图6 FIR滤波器的阶跃响应
由于所有的模块都在同一个Simulink图中,这时的Simulink设计图显得很复杂,不利于阅读和排错,因此把FIR数字滤波器模型做成一个子系统在设计图中显示出来,如图7所示,这就是Matlab中的层次化设计,在顶层设计图中,滤波器作为名称是SubFIR_533_16js的一个模块出现。同时,图7中还设置了其他模块,包括仿真信号输入模块、Signal Tap Ⅱ信号实时监测模块、Signal Compiler模块、硬件开发板模块、TestBench模块。
图7 FIR数字滤波器的顶层设计图
这样整个滤波器的Simulink电路设计模型就完成了,然后要对该模型进行系统级仿真,查看其仿真结果,在频率为533 Hz的波形输入上加入了频率为3 600 Hz的扰动波形,其Simulink仿真结果如图8所示。
图8 Simulink仿真结果图
图中,上面的波形是533 Hz的输出,中间的波形是533 Hz加上3 600 Hz高频干扰后的输出,下面的波形是经过滤波后的输出。
3.2 从模型文件到Verilog代码的RTL级转换和编译
适配
利用Signal Compiler模块将电路模型文件即Simulink模块文件(.mdl)转换成RTL级的Verilog代码表述和Tcl(工具命令语言)脚本。这种转换是用来对数字滤波器Simulink模型进行结构化分析的[5]。获得转换好的VHDL描述后就可以调用Verilog综合器,这里我们选用Quartus Ⅱ,用来生成底层网表文件,同时也就可以得到其网表文件对应的RTL电路图。如图9所示。
图9 数字滤波器RTL电路图
3.3 数字滤波器的ModelSim功能仿真
ModelSim软件可支持VHDL和Verilog混合仿真,无论是FPGA设计的RTL级和门级电路仿真,还是系统的功能仿真都可以用ModelSim来实现[4⁃5]。由Signal Compiler生成的Verilog硬件描述语言模块,在ModelSim中可以直接对Verilog代码进行仿真,检测源代码是否符合功能要求。图10所示的16阶FIR数字滤波器的功能仿真结果图。与图8的Simulink仿真结果图的波形一致,表明经过转换的Verilog源代码可以实现正常的滤波功能。
图10 ModelSim时序仿真结果图
3.4 FIR数字滤波器的FPGA硬件实现
FIR数字滤波器一般是嵌入在采集器的采集板卡中进行工作的,把由数字滤波器的Verilog源代码生成的模块嵌入到采集板卡的FPGA逻辑中,如图11所示。在Quartus Ⅱ环境下,数字滤波器的内部逻辑经过编译适配之后,以.sof文件的形式直接加载到FPGA中。
图11 数字滤波器Verilog模块逻辑图
4 FIR数字滤波器的FPGA实时测试
进行实时测试的电路是应用FPGA和USB的数据采集电路[3],如图12所示。
图12 测试电路原理框图
测试时把信号发生器设置好的输入信号输入到A/D,采样得到的数据经过FPGA,再通过USB与PC机相连,应用QuartusⅡ中的SignalTapⅡ工具进行实时检测,结果如图13所示,其中,上面的波形为输入波形,频率为200 Hz,下面的波形为输出波形,由于200 Hz在低通的带通内,所以两者的波形相差不大。当输入波形为频率533 Hz时,由于是在截频点,其输出波形的幅值约为输入波形幅值的71%,如图13和14所示。
图13 数字滤波器的硬件调试结果图(一)
5 结 语
FIR数字滤波器在数字信号处理领域有着广泛的使用,本文通过仿真和实时验证两种方式实现了一种基于FPGA和DSP Builder的FIR数字滤波器。先根据FIR滤波器的基本原理和结构框图搭建了滤波器的模型,再根据滤波器的性能指标通过FDATool工具对其进行设计,并通过系统级仿真和ModelSim功能仿真进行了简要的可行性分析,最后通过QuartusⅡ软件对FIR数字滤波器进行实时验证,表明所设计的FIR滤波器功能正确,性能良好。
图14 数字滤波器的硬件调试结果(二)
参考文献
[1] 陈家祯,郑子华,叶锋,等.基于FPGA的数字滤波系统设计[J].计算机仿真,2009,26(12):329⁃332.
[2] 刘艳,赵洪,于效宇,等.可配置参数FIR数字滤波系统设计[J].数据采集与处理,2009,24(6):835⁃839.
[3] 孙耀奇,高火涛,熊超,等.基于Matlab和FPGA的FIR数字滤波器设计及实现[J].现代电子技术,2008,31(11):⁃92.
[4] 王旭东,潘明海.数字信号处理的FPGA实现[M].北京:清华大学出版社,2011.
[5] 杜勇,路建功,李元洲.数字滤波器的Matlab与FPGA实现[M].北京:电子工业出版社,2012.
[6] 戴曜泽,王春雷,朱智强.基于FPGA高阶FIR滤波器的实现[J].现代电子技术,2012,35(8):110⁃113.
[7] 周云波,刘小群.基于Matlab的FIR数字滤波器的优化设计[J]. 电子科技,2010(10):28⁃29.