基于SG FIR Filter的设计方法与分析
2011-03-06廖连贵
崔 杨,赵 利,廖连贵
(桂林电子科技大学 信息与通信学院,广西 桂林 541004)
0 引言
FIR滤波器作为一种最重要的数字信号处理部件,被广泛用于雷达、通信等工程领域[1]。考虑到FPGA具有集成度高、高速和高可靠性等优点,使用FPGA来实现FIR滤波器,既具有实时性,又兼顾了一定的灵活性,为数字信号处理提供了一种很好的解决方案[2]。
Xilinx System Generator for DSP是一种广泛公认的高效FPGA开发工具,基于其所提供的Simulink的图形环境和Xilinx DSP核的预定义模块集,在Simulink平台上来完成在FPGA中创建数字信号处理设计[3]。丰富且易用的环境下搭建的系统不但可以包括针对外部总线存贮器读写访问、系统数据同步和整体系统控制的同步接口而且可读性强,这同时满足了系统框架结构设计师和硬件设计人员的需要,近几年在数字通信领域得到广泛应用。
1 FIR滤波器设计方案
FIR滤波器的实现结构有很多种,最常见的有串行结构,并行结构和流水线结构等[4]。
这里基于科研项目所使用的Lyrtech SFF SDR平台及相配套的Xilinx System Generator for DSP 9.2工具,给出了FIR compiler1_0与FDA Tool联合设计、横截型结构设计和基于Black Box嵌入.v程序实现的三种FIR滤波器设计方案,并进行了简要的步骤和功能说明。
1.1 FIR compiler1_0与FDA Tool联合设计
在Xilinx System Generator for DSP 9.2版本的模块库中,专门提供了用于FIR滤波器设计的FIR compiler v1_0编译模块,通常此模块与FDA Tool工具联合使用。FDA Tool是专用的数字滤波器设计工具[5],可以方便的对滤波器的类型、阶数、采样率、通带截止频率和阻带截止频率等参数进行选择、修改及设定,以完成滤波器的设计。
双击FIR compiler v1_0模块,Coefficient vector栏填写:[xlfda_numerator('FDA Tool')]表示使用当前FDA Tool模块设计的滤波器抽头系数作为FIR滤波器抽头系数。则就能实现FIR compiler v1_0与FDA Tool模块结合工作,完成滤波功能,如图1所示。
图1 FIR compiler与FDATool联合开发
两者结合的优点是滤波器设计简洁和修改方便,但对于FIR compiler1_0模块来说,它只适用于Virtex4系列芯片,则存在适用范围的局限性。不过随着软件版本的提高和模块库的完善,这个问题会很快得到解决。
1.2 基于导出方式的横截型结构FIR设计
FIR滤波器的横截型结构如图2所示,是通过加法器、乘法器及延时单元共同搭建实现的FIR滤波器最基本的结构。滤波器的设计也是利用FDA Tool模块来完成的。用FDA Tool工具完成滤波器类型、参数等的设计后,可以导出Simulink Model。因为所设计的滤波器最终要在FPGA硬件芯片上实现,所以导出的Simulink Model要使用System Generator中的加法器、乘法器和延时单元模型替代,完成横截型结构设计,最终完成编译下载到硬件实现(FDA Tool模块可在导出Simulink Model后可删除。)
图2 横截型结构
此方法适用Xilinx家族中支持System Generator for DSP工具的任何型号FPGA芯片,适用范围广。但模型替代繁琐,而且输出的定点位数设定还要用示波器进行跟踪,确定。一旦滤波器系数确定,就不便修改,就此点没有第一种方法方便。此种方法适合于那些不支持FIR compiler模块并且对滤波阶数要求不高的FPGA芯片。
1.3 基于Black Box嵌入.v程序的FIR设计
System Generator的模块库中包含可调用Verilog或VHDL代码的Black Box模块,如图3所示。可根据滤波器设计要求进行Verilog或VHDL代码编写,然后通过Black Box模块调用已编写好的.v 文件,它会自动转换成MATLAB的m文件,并在Simulink中进行仿真。FIR的滤波参数是通过MATLAB来求得的[4]。生成的新模块与硬件描述语言设计的模块具有相同的输入/输出端口和功能。
图3 BlackBox模块
此种方法的优点是,实现了模型与代码的有机结合,体现了代码编译的灵活性和模型设计的直观性和系统性。虽然它也适用于Xilinx家族中支持System Generator for DSP工具的任何型号FPGA芯片。
但Black Box的使用还有许多需要注意的地方,如对可综合的HDL代码的要求,对于Verilog要求模块和端口名称必须是用小写字母表示,并遵循HDL编写标准;时钟设置不支持下降沿触发[6]。还要注意 Configuration Wizard的配置等。这里不再敖述,可以参阅文献[6]了解具体的内容。
2 仿真验证与分析
2.1 设计实例与分析
例如:设计一个低通滤波器,用以滤除叠加在 1.5 kHz信号中的6 kHz的高频成分。设计参数为:
滤波器阶数N=18;
通带截止频率Fp=3 kHz;
阻带截止频率Fs=5 kHz;
采样率为fs=18 kHz;
带内波动Apss=1 dB;
带外衰减Astop=60 dB;
三种方法的仿真结果如图4、图5、图6所示。
图4 滤波前后时域波形
图5 滤波前频域谱
图6 滤波后频域谱
如图4为信号的时域谱,上路input为输入,是两个信号的叠加信号;下路output是经过滤波后的输出,可以看出滤波后只剩单一频率的正弦信号。图5为信号的滤波前频域普,可以清晰的看到有两个信号谱,分别位于1.5 kHz和6 kHz位置;图6是信号经过滤波后的频域谱,由6图可知已6 kHz高频成分已被衰减60 dB,可认为已经滤掉,只剩1.5 kHz处的单一频率谱。
仿真结果表明,三种设计方法实现的FIR滤波器均达到了设计指标要求,实现了预定滤波效果,从而证明了三种滤波设计方法的可行性和有效性。
2.2 硬件资源消耗分析
可以采用System Generator for DSP自带的Resource Estimated模块来评估在FPGA上实现时所需要的硬件资源。各种设计方法消耗的FPGA硬件资源情况如表1所示。消耗量1是用FIR compiler1_0与FDA Tool联合设计方法实现滤波设计的资源消耗情况;消耗量2是用横截型结构设计实现滤波设计的资源消耗情况;消耗量3是用Black Box设计实现滤波设计的资源消耗情况。
可以看出消耗量2所示的消耗资源最多。因为横截型结构设计中使用的乘法器是通过逻辑门的来实现乘累加功能,并不是采用Xilinx专有的DSP48硬件乘法器,在表中用Emb.Mults(嵌入式乘法器)表示,所以占用的Slices和LUTS会比较多一些。这里DSP48硬件乘法器是在FPGA芯片内部的内核乘法器,数量有限。
对于消耗量1和消耗量3的方法所占用的资源相对较少,因为他们都是基于HDL语言的Ipcore,其中FIR compiler是已经进行优化封装好的Ipcore,而BlackBox是对针对用户开放的Ipcore,可自行编写HDL代码,灵活嵌入。从占用资源角度来看,第一和第三种方法占用的资源较少,虽然第一种方法比第三种方法更多的使用了Slices和LUTS,但其消耗的Emb.Mults少一些,如何高效、限量的利用DSP48也是衡量一个优化系统的重要标准。而且相对第三种方法第一种方法更加简单方便,规范性强,还能缩短开发时间,所以综合考虑调用已有Ipcore即FIR compiler模块的方法最优。
表1 三种方法资源消耗表
3 结语
在System Generator for DSP 9.2的基础上介绍了三种设计及实现FIR滤波器的方法,进行了举例仿真,并对于每种方法所占用的资源进行了详细的分析比较,认为使用已封装好的Ipcore,不但简单方便可以减少系统开发时间,又能有效利用硬件资源,是最优的选择。前提是硬件芯片支持此Ipcore。每种方法也都有其自己身的优缺点,使用设计方法的选择,可根据现有硬件资源、环境情况及各个方法的特点进行取舍。
[1] 王春来,欧阳喜.基于FPGA的半并行FIR滤波器设计[J].新中国新通信,2009,15(08):86-89.
[2] 王秀敏,汪毓铎,张洋,等.通信系统中FIR数字滤波器的设计研究[J].通信技术,2009,42(09):3-6.
[3] TIM VANEVENHOVEN.使用MATLAB为System Generator for DSP创建IP[J].今日电子,2008,5(05):52-57.
[4] 杜德,李小文.TD-SCDMA中FIR滤波器的DSP实现[J].通信技术,2008,9(09):92-112.
[5] 孟惠霞,耿俊梅.MATLAB-DSP集成环境下的FIR数字滤波器设计[J].信息安全与通信保密,2009,6(06):58-63.
[6] 田耕,胡彬,徐文波,等.Xilinx ISE Design Suite 10.x FPGA开发指南[M].北京:人民邮电出版社,2009.