基于FPGA的低通数字滤波器实现_图文_第1页
基于FPGA的低通数字滤波器实现_图文_第2页
基于FPGA的低通数字滤波器实现_图文_第3页
基于FPGA的低通数字滤波器实现_图文_第4页
基于FPGA的低通数字滤波器实现_图文_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ALTER/FPGA_CPLD课程设计基于FPGA 的低通数字滤波器实现姓名:学号:学院:专业:2010年12月29日摘要随着数字技术的发展,数字滤波器广泛应用于语音与图像处理、模式识别、雷达信号处理、频谱分析等领域,它有精度高、灵活性大等突出特点。FIR 数字滤波具有稳定性高,严格的线性相位,能用FFT 算法实现等特点。通过FPGA 实现FIR 数字滤波具有实时性高、处理速度快、精度高的特点。这种新思路不同于传统的设计观念,必将在高速滤波器设计、高速FFT 设计中得到广泛应用。本文在设计中提出了一种采用现场可编程门阵列器件(FPGA )实现线性FIR 数字滤波器,采用同一结构的FIR 滤波器

2、,并且通过调整参数实现不同频率段的滤波,利用分布式算法的并行处理的高效的特点,对于在FPGA 中实现FIR 滤波器的关键乘加运算,给出将乘加转化为加法树结构实现乘法器,并利用多级流水线方式实现运算。用Verilog HDL语言编写了程序,并用Matlab 软件进行参数计算和仿真,再用ModelSim 进行功能仿真,再用Quartus 软件进行时序仿真。仿真结束后下载到选定的FPGA 上,实现FIR 数字滤波器的功能。实验结果可以看出,这种改进滤波器实现结构的算法,结果表明研制的滤波器性能稳定可靠,可以灵活的处理综合的面积和速度的约束关系,使最后设计达到最优。由于采用FPGA ,使得滤波器的结构

3、实现简单,降低了对乘法存储容量的需求,并且不影响系统的速度,节约了硬件资源,加快了研制速度。关键词:FIR 滤波器 可编程门阵列器件 加法树 分布式 流水线 并行结构一、概述部分信号处理的内容含滤波、均衡、放大、噪声消除、信号产生、检测、运算和参量提取等许多方面。FPGA 器件作为ASIC 的一个重要分支,是一种已经完成了全部工艺制造,可以直从市场购买的产品,用户只需对它编程就可以实现所需要的功能,并且在保持了传统ASIC 低功耗、轻小型化、高可靠性等优点的同时,还具有较高的设计灵活性和适应性。1.1、设计所要实现的功能:设计一个15阶的线性相位FIR 低通滤波器过程如下要求:滤波器的设计指标

4、采样频率:50MHz 归一化截止频率: 0.4MHz类型: 低通 输入数据宽度: 4位阶数: 15阶 输出数据宽度: 11位采用汉宁窗函数(Hanning )设计15阶线性相位FIR 数字滤波器,并提取其特性参数。1.2、设计所采用的基本思想:目前FIR 滤波器的实现方法有三种:利用单片通用数字滤波器集成电路、DSP 器件和可编程逻辑器件实现。单片通用数字滤波器使用方便,但由于字长和阶数的规格较少,不能完全满足实际需要。使用DSP 器件实现虽然简单,但由于程序顺序执行,执行速度必然不快。FPGA 有着规整的内部逻辑块阵列和丰富的连线资源,特别适合细粒度和高并行度结构特点的数字信号处理任务,如F

5、IR 、FFT 等。在该FIR 滤波器的设计中,根据FPGA 的结构特点和资源,采用了如下的设计技巧:(1采用分布方式下的查找表和加法树的结构,简化了乘法器的设计;(2采用了流水线结构,减小了查找表ROM 的规模;(3利用状态机实现输入、移位和输出功能,条理清楚地简化计算过程;(4滤波器的参数独立于滤波器的结构,方便实现不同类型的滤波器;(5采用了Verilog HDL语言作为设计输入的手段,增加了设计可移植性;(6采用参数化的结构,可以根据应用情况调整设计的规模。二、FIR 数字滤波器设计原理2.1、滤波原理滤波器,顾名思义,其作用是对输入信号起到滤波的作用。 对图所示的LSL 系统其时域输

6、入输出关系是(n h n x n y *= 若x(n,y(n的傅立叶变换存在,则输出输入的频域关系是(j j j e H e X e Y =,(j j e H e X 再假定,如图所示, 那么由式,(j e Y 将如图所示。这样,x(n通过系统h(n的结果是使输出y(n中不再含有c >的频率成分,而使c <的成分“不失真”的给以通过。2.2、单位冲击响应h (n )的特点FIR 滤波器的单位冲击响应h(n是有限长(0n N 1),其z 变换为:n N m z n h z H -=10 ( (在有限Z 平面有(N-1)个零点,而它的(N-1)个极点均位于原点Z=0处。 有限冲击响应(

7、FIR的优点:(1既具有严格的线性相位,又具有任意的幅度。(2FIR滤波器的单位抽样响应是有限长的,因而滤波器性能稳定。(3只要经过一定的延时,任何非因果有限长序列都能变成因果的有限长序列,因而能用因果系统来实现。(4FIR滤波器由于单位冲击响应是有限长的,因而可用快速傅里叶变换(FFT算法来实现过滤信号,可大大提高运算效率。2.3、 设计基础:由上面的分析可得,滤波器的设计归结为选择一组h (n ),为了满足滤波器具有线性相位特性,h (n )在选择时必须注意保证其对称性和实值性。线性相位的FIR 滤波器共有4种:(1N为偶数,h (n )偶对称;(2N为偶数,h (n )奇对称;(3N为奇

8、数,h (n )偶对称;(4N 为奇数,h (n )奇对称,对称中心都为(1-=n n 。利用系数h (n )的对称性节省的硬件资源及优化算法。 一般情况下,分析15阶FIR 滤波器对15个数字通道(每通道8位)进行滤波,这样FIR 的系数h(0h(14是可以配置的,即可以作为RAM 提前写到滤波器元件中。如果是寄存器传输级设计,有三种设计方案:方案1. 例化15个FIR 滤波器,即有15个图1所示的模块并联,即每个通道单独使用一个滤波器; 方案2. 所有通道共享同一个例化FIR 滤波器,但是这种方案需要的资源也较多; 方案3. 共享FIR 滤波器,同时共享乘器和加器;从下表可以看出方案1实现

9、起来较简单,没有控制器,但是需要的资源较多,需要例化9个滤波器;方案3实现的是串行流水线操作,实现资源共享,最节省资源,但是又是最复杂的一种实现方法,同时执行效率很低。 一般在FPGA 的应用设计中要考虑的两个最重要的因素是系统的最高速率S 和综合所需要的逻辑单元数L 。从而我们取指标lg S SLR L =,可见对于同样要求的FIR 滤波器计来说SLR 大,则说明此FIR 滤波器的设计效果好。在设计的时灵活地设置模块数(即流水线的阶数),采用流水线的并行FIR 滤波器的设计,尽量增大SLR 值,从而在综合面积和速度上同时达到优化。三、系统设计部分3.1、整个设计的组织结构:FPGA 有着规整

10、的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP 芯片来说,其并行性和可扩展性更好。但长期以来,FPGA 一直被用于系统逻辑或时序控制上,很少有信号处理方面的应用,其原因主要是因为在FPGA 中缺乏实现乘法运算的有效结构。现在这个问题得到了解决,使FPGA在数字信号处理方面有了长足的发展。它们可以用较小的代价和与加法器级数无关的处理速度实现整数乘法运算,能比单纯地用查找表(DA方法用更少的逻辑资源实现FIR 滤波器。随着FPCA 集成规模的不断提高,许多复杂的数学运算已经可以用FPCA 来实现,利用单片FPGA 实现系统的设想即将变为现实际。 利用流

11、水线技术将复杂的数字逻辑电路分级实现。这样,使每一级的电路结构简化,从而减小输入到输出间的电路时延,在较小的时钟周期内就能够完成这一级的电路功能。在下一个时钟周期到来的时候,将前一级的结果锁存为该级电路的输入,这样逐级锁存,由最后一级完成最终的结果输出。流水线技术结构示意图见图: 在流水线技术中,由于算法分解后,数据逐级锁存,输出不是实时的,电路中有几级分步操作,输出相对于输入就会延迟相应的时钟周期。另外在每一级都要用寄存器将上一级的结果寄存,所以当电路中位数增加。这也是流水线技术为了得到较高的工作效率而增加额外的开销。流水线设计的一个关键在于整个设计时序的合理安排,要求每个操作步骤的划分合理

12、。流水线处理方式之所以频率较高,是因为复制了处理模块,它是面积换取速度思想的又一种具体体现。无论加法器、乘法器、还是整个FIR 滤波器都可以利用流水线技术,加快运算速度。3.2、各个子单元的设计思路:查找表可用所有输入变量的一同一位进行寻址。分布式算法在完成乘加功能时是通过将各输入数据每一对应位产生的部分积预先进相加形成相应部分积,然后在对各部分积进行累加形成最终结果,而传统算法是等到所有乘积产生之后再进行相加来完成乘加运算的。与传统算法相比,分布式算法可极大地减少硬件电路规模,很容易实现流水线处理,提高电路的执行速度。如图为实现分布式算法的硬件结构: 乘法造作采用加法树实现,八位输入、十六位

13、输出,通过连续赋值语句构造 门级基本框架,用always 语句实现每位相乘后的移位相加,实现乘法的操作功能。在这个模块里面,输出都有寄存器并且采用同一全局时钟,即流水线结构,大大增加了系统的吞吐量和数据处理速度。通过模块调用,可将加法树运用到所需乘法的相关领域,能够降低开发周期。它们可以用较小的代价和与加法器级数无关的处理速度实现整数乘法运算,能比单纯地用查找表(DA方法用更少的逻辑资源实现FIR 滤波器。其用硬件实现电路如图所示:设置三个状态s0、s1、s2 。状态s0完成数据的装入,数据寄存器需要成对出现,一个完成数据的延迟,另一个完成数据的移位,并将状态转移到s1;状态s1完成查找表功能

14、、数据移位和分布式算法的乘累加运算,数据移位一个数据宽带后将状态转移到s2; 状态s2完成数据的输出,并将状态转移到s0。状态机的实现如图所示:利用状态机可以条理清楚地简化计算过程,在算法实现时发挥着关键的作用。查找表的实现方式如图右所示。当实现固定系数的滤波器时,由于滤波器系数已经固定,因此,可以利用简化的乘法器(如查找表、逻辑树等 ,以减少设计所耗用的器件资源。这时的乘法和加法就可以并行地采用查找表实现了,其结构示意。 查找表算法的主要特点,是巧妙地利用ROM 查找表将固定系数的MAC 运算转化为查表操作,其运算速度不随系数和输入数据位数的增加而降低,而且相对直接实现乘法器而言在硬件规模上

15、得到了极大的改善。3.3、各个子单元之间的接口关系:为了避免由异步时钟域产生的错误,对于随机到达的数据,需要建立同步机制。可采用使数据通过RAM 或者FIFO 的缓存再读取的方法。数据的输入采用并行输入方式,通过移位寄存器实现移位,begin-end 语句块实现滤波器的延时处理,8级缓存,减少不必要的冒险和竞争。此外数据预处理部分也包含在着部分的描述中。这部分的描述如下:always(posedge clkbeginxfirst <= x;xsecond <= xfirst;xthird <= xsecond;xfourth <= xthird;xfifth <=

16、 xfourth;xsixth <= xfifth;xseventh <= xsixth;xeighth <= xseventh;end由于数据是逐字输入的,因此,前面的clk 信号和数据输入的时钟信号之间必须符合是序关系,信号由clk 信号延时得到,采用全局时钟网络。这部分的描述如下:initialbeginclk=0;forever #5 clk=clk;end乘法操作采用加法树函数调用的方式实现,函数的调用是通过将函数作为表达式中的操作数来实现的。在函数第一次调用时,返回二进制中一位的相乘,在函数第二次调用时,返回二进制中二位的相乘,最后用always 语句使它们移位相

17、加。这部分的描述如下:add_tree r1(yfirst,xfirst,h1,clk,r2(ysecond,xsecond,h2,clk,r3(ythird,xthird,h3,clk,r4(yfourth,xfourth,h4,clk,r5(yfifth,xfifth,h5,clk,r6(ysixth,xsixth,h6,clk,r7(yseventh,xseventh,h7,clk,r8(yeighth,xeighth,h8,clk;所谓流水线设计实际上是把规模较大、层次较多的组合逻辑电路分为几个级,在每级插入寄存器并暂存中间数据。他能提高吞吐量,是以消耗较多的寄存器资源为代价的。这部分

18、的描述如下:always(posedge clkbeginout1 = yfirst+ysecond;out2 = ythird+yfourth;out3 = yfifth+ysixth;out4 = yseventh+yeighth;out = out1+out2+out3+out4;endtimescale 10ns/1ns /define timemodule test;output10:0 out;input3:0 x;input clk;reg10:0 out;reg8:0 out1,out2,out3,out4;parameteralways #5 clk=clk; /设置时钟in

19、itial /initial processbeginclk=1;#5 x=$random%5;#5 x=$random%5;#5 x=$random%5;#50 $finish;EndFIR1 m(.out(out,.x(x,.clk(clk;initial $monitor ($time,"out=%bout1=%b out2=%bout3=%b",out,out1,out2,out3;endmodule 3.4设计与其它设计的接口方式;通过函数调用的方式,与其他设计进行连接,可以与其他设计连接。例如把FIR1和FIR2运用到视频传输系统和音频系统中,实现信号的发送、传

20、输和处理。FIR1 a(out,x,clk;FIR2 b(out,x,clk;接口可以通过运用wirer 、reg 定义引线类型,既可以作输入,又可以作输出,可以作为模块内部扩展功能。reg3:0 xfirst,xsecond,xthird,xfourth,xfifth,xsixth,xseventh,xeighth;wire7:0 yfirst,ysecond,ythird,yfourth,yfifth,ysixth,yseventh,yeighth;reg10:0 out;reg8:0 out1,out2,out3,out4;四、仿真综合部分4.1、片内各种资源的使用情况;我们看一看Str

21、atix 芯片的内部结构,如下图: Stratix 主要包括add_tree,I/O块,RAM 块和可编程连线(未表示出)。在Stratix 中,共使用了八个乘法器,七个加法器。一个add_tree包括17个相加器和八个寄存器和相关逻辑。片内硬件资源使用情况如下图所示: 4.2、关键节点、I/O引脚测试波形的描述:系统pin 如图所示: 可以用ModelSim SE 6.0 对各管脚的信号进行时序仿真,下图为加法树的仿真图,可以看出它实现的时一种乘法的功能。 4.3、仿真波形比较FIR1时序仿真如下图: 在上图可以看出,当输入3时,每个时钟输出分别为010,016,024,02E ,037;当

22、输入e 时,输出分别为04f,052,096。实现滤波功能。FIR2时序仿真如下图: 在上图可以看出,当输入3时,每个时钟输出分别为00c,010,016,024,02E ;当输入e 时,输出分别为03f,04f,052。实现滤波功能。4.4、RTL 级电路描述; 上图分别为FIR1、和add_tree和FIR2的RTL 级电路图。借鉴计算机体系结构中的流水的思想,可以考虑数据一边输入一边送入相关的功能部件进行计算,主要是加法器和乘法器。应该尽可能选择低位数的加法器和乘法器以减少设计成本。五、结论5.1、本文总结 本文首先给出了模拟和数字滤波器的技术指标和滤波器设计的基本原理,然后详细的论述了

23、有限冲击响应(FIR )数字滤波器的设计原理和设计方法以及在设计过程中运用的思想和实现过程。针对当前现场可编程门阵列器件(FPGA )在数字技术的发展和日益广泛的应用,为了提高有限冲击响应(FIR )数字滤波器的性价比,我们从其核心乘法器着手,从传统的以乘累加运算来实现乘法器,在根据FIR 数字滤波器的线性相位特性,分布式算法原理以及查找表的构造方法,逐渐的引入一种基于流水线分布式算法的乘法器。通过分析比较得出这种基于流水线分布式算法的乘法器在性能等方面都要优于传统的乘法器。接着根据这种算法思想,我们设计了一个15阶的FIR 滤波器;用Verilog HDL语言实现了上述思想,在Quartus

24、 上进行时序和功能仿真。下图为所设计的滤波器在Matlab 上的验证: 幅频特性曲线 相频特性曲线 冲击响应从上述实现的结果来看,系统信号传递的最大延迟大约为40ns ,完全满足整个系统对延迟的要求。这种改进滤波器实现结构的算法可以灵活的处理综合的面积和速度的约束关系,使最后设计达到最优。从上述设计和实现的过程来看,滤波器的结构和滤波器的滤波系数(决定了滤波器的类型 是分离的,因此可以很方便地实现不同类型的滤波器的设计移植,只需要将ROM 中的初始化参数进行重新设置,也就是改变件中的数据,重新进行编译和布局布线,就可以得到不同类型的滤波器的实现。此外,由于设计是采用Verilog HDL语言实

25、现的,增加了设计的可移植性。5.2、个人心得时间如白驹过隙,转瞬即逝,在这段时间里,我付出了很多,同时也收获了很多。我学会了,用Verilog HDL语言编写基本的设计程序和测试代码的编写,和Quartus 如何安装,创建以及使用进行项目开发以及后期测试维护,时序图是如何画出来的,RTL 级电路的实现等。作为一个学电子的学生,一直觉得应该学会一个制作设计电路的软件,这也是选择这门课得初衷,只是学了这么久,掌握到的却只是很少的一部分,对软件体会的也不是很多,但学了一个学期,收获还是很多的。学习软件是需要多练习和思考的,只有通过身体力行的实践才能真正懂得软件的作用,才能真正的达到学以致用的目的,所

26、以以后还要经常练习。这次课程设计对数字滤波器的设计,加强了我对FPGA 这门课程的理解,对其应用有了一定的认识,提高了我们综合运用知识的能力,以及分析问题、解决问题的能力。一方面,它加深与巩固了所学的数字滤波器各章节的理论,并将其综合运用,提高了我们综合运用知识的能力;另一方面,培养了我们对专业知识学习的趣。虽然学习过程中出现很多问题,但都是有必要的,通过对他们的解决和处理,加深了我对整个软件的理解及电路的认识,很高兴学了这门课程。六、参考文献1 夏宇闻Verilog 数字系统设计教程北京航空航天大学出版社,20082 程佩青. 数字信号处理教程. 北京:清华大学出版社,20073 郑学坚,

27、周斌. 微型计算机原理与应用. 北京:清华大学出版社,20024 王诚,ALTER/FPGA_CPLD设计. 西安:人民邮电出版社,2009七、附录1、Verilog HDL程序代码如下:(一)FIR1.Vmodule FIR1(out,x,clk;output10:0 out;input3:0 x;input clk;reg3:0 xfirst,xsecond,xthird,xfourth,xfifth,xsixth,xseventh,xeighth; wire7:0 yfirst,ysecond,ythird,yfourth,yfifth,ysixth,yseventh,yeighth;

28、reg10:0 out;reg8:0 out1,out2,out3,out4;/定义滤波器系数parameterh1=4'b0110, h2=4'b0010,h3=4'b0011, h4=4'b0100,h5=4'b0100, h6=4'b0011,h7=4'b0010, h8=4'b0110;always(posedge clkbegin /该begin-end 语句块实现滤波器的延时处理,8级缓存xfirst <= x;xsecond <= xfirst;xthird <= xsecond;xfourth &

29、lt;= xthird;xfifth <= xfourth;xsixth <= xfifth;xseventh <= xsixth;xeighth <= xseventh;endadd_tree r1(yfirst,xfirst,h1,clk, /乘法操作采用加法树实现r2(ysecond,xsecond,h2,clk,r3(ythird,xthird,h3,clk,r4(yfourth,xfourth,h4,clk,r5(yfifth,xfifth,h5,clk,r6(ysixth,xsixth,h6,clk,r7(yseventh,xseventh,h7,clk,r

30、8(yeighth,xeighth,h8,clk;always(posedge clkbeginout1 = yfirst+ysecond;out2 = ythird+yfourth;out3 = yfifth+ysixth;out4 = yseventh+yeighth;out = out1+out2+out3+out4;endendmodule(二)FIR2.Vmodule FIR2(out,x,clk;output10:0 out;input3:0 x;input clk;reg3:0 xfirst,xsecond,xthird,xfourth,xfifth,xsixth,xsevent

31、h,xeighth; reg4:0 s1,s2,s3,s4;wire8:0 yfirst,ysecond,ythird,yfourth;reg10:0 out;reg9:0 out1,out2;/定义滤波器系数parameterh1=4'b0110, h2=4'b0010,h3=4'b0011, h4=4'b0100;always(posedge clkbegin /该begin-end 语句块实现滤波器的延时处理,8级缓存xfirst <= x;xsecond <= xfirst;xthird <= xsecond;xfourth <=

32、 xthird;xfifth <= xfourth;xsixth <= xfifth;xseventh <= xsixth;xeighth <= xseventh;endalways(posedge clkbegins1 = xfirst+xeighth;s2 = xsecond+xseventh;s3 = xthird+xsixth;s4 = xfourth+xfifth;endadd_tree r1(yfirst,s1,h1,clk, /乘法操作采用加法树实现 r2(ysecond,s2,h2,clk,r3(ythird,s3,h3,clk,r4(yfourth,s

33、4,h4,clk;always(posedge clkbeginout1 = yfirst+ysecond;out2 = ythird+yfourth;out = out1+out2;endendmodule(三)add_tree.vmodule add_tree(out,a,b,clk;output15:0 out;input7:0 a,b;input clk;wire15:0 out;wire15:0 out1,c1;wire13:0 out2;wire11:0 out3,c2;wire9:0 out4;reg14:0 a_temp;reg13:0 a_temp1;reg12:0 a_te

34、mp2;reg11:0 a_temp3;reg10:0 a_temp4;reg9:0 a_temp5;reg8:0 a_temp6;reg7:0 a_temp7;assign out1=a_temp+a_temp1;assign out2=a_temp2+a_temp3;assign out3=a_temp4+a_temp5;assign out4=a_temp6+a_temp7;assign c1=out1+out2;assign c2=out3+out4;assign out=c1+c2;function7:0 and81;input7:0 operand;input sel;beginand81 = (sel ? (operand : 8'h00; endendfunctionalways(posedge clkbegina_temp14:7=and81(a,b7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论