下载此文档

高通FIR数字滤波器设计verilog要点.doc


文档分类:通信/电子 | 页数:约18页 举报非法文档有奖
1/18
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/18 下载此文档
文档列表 文档介绍
该【高通FIR数字滤波器设计verilog要点 】是由【流星蝴蝶龙泉剑】上传分享,文档一共【18】页,该文档可以免费在线阅读,需要了解更多关于【高通FIR数字滤波器设计verilog要点 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。电子科技大学ASIC课程设计报告二学 号: 201222240937姓 名 : 周 恒课题题目 : 高通FIR数字滤波器设计2013年5月FIR数字滤波器设计已知FIR型数字滤波器的 z域系统函数为:H(z) (1 4z2 z4)即:H(z) (2 7z1 8z2 7z3 2z4)要求如下:?设计平台:基于QuartusII 或ISE平台,选择AlteraCycloneII 系列的EP2C8F256C8 或XilinxSparten3 系列的XC3S400(PQ208);testbench的信号输入激励源使用Matlab生成三角波信号;输入位宽16位,输出位宽24位,中间级可自行截位;设计(1)直接型FIR设计画出直接实现结构的框图,完成其verilogHDL电路描述及testbench,完成功能仿真和时序仿真,给出仿真波形图;一、 直接型结构框图如下:Xn(15:0)Z-1Z-1Z-1Z-1H(0) H(1) H(2) H(3) H(4)+++++Yn(23:0)长度为M的因果有限冲激响应滤波器由传输函数H(z)描述:M1H(z)h(k)zk(1)k0它是次数为M-1的z-1的一个多项式。在时域中,上述有限冲激响应滤波器的输入输出关系为:M 1y(n)h(k)x(nk)(2)k0其中y(n)和x(n)分别是输出和输入序列。有限冲激响应滤波器的一种直接型实现,可由式(2)生成,M=5的情况如上图所示。通常一个长度为M的有限冲激响应滤波器由M个系数描述,并且需要M个乘法器和(M-1)个双输入加法器来实现。本设计包含的模块有4个16位寄存器块、5个16位乘法器、4个32位加法器模块用QuartusII综合,顶层模块框图如下:1、寄存器模块寄存器用于寄存一组二值代码,只要求它们具有置 1、置0的功能即可。在本设计中用D触发器组成寄存器,实现寄存功能。本设计中使用带异步复位reset_n端的D触发器,当reset_n=1时,输出信号q_out=d_in,当reset_n=0且上升沿脉冲到达时 q_out=0。其综合框图部分截图如下图所示。程序代码如下:moduledff16(reset_n,clk,d_in,q_out);inputreset_n,clk;input[15:0]d_in;outputreg[15:0]q_out;always@(posedgeclkornegedgereset_n)beginif(!reset_n)q_out<=16'h0;elseq_out<=d_in;endendmodule在顶层文件中例化了D1、D2、D3、D4四个寄存器模块dff16D1(.reset_n(reset_n),.clk(clk),.d_in(x_in),.q_out(q1)),D2(.reset_n(reset_n),.clk(clk),.d_in(q1),.q_out(q2)),D3(.reset_n(reset_n),.clk(clk),.d_in(q2),.q_out(q3)),D4(.reset_n(reset_n),.clk(clk),.d_in(q3),.q_out(q4));2、乘法器模块从资源和速度考虑,常系数乘法运算可用移位相加来实现。 本设计采用加法树乘法器兼顾了资源与速度, 将每个乘数例化了一个数组, 然后移位相加得出乘积,这样使得乘法运算可以一个周期内完成。程序代码如下:modulemult16(e,a,b);input[15:0]a,b;outputwire[31:0]e;wire[30:0]temp0;wire[29:0]temp1;wire[28:0]temp2;wire[27:0]temp3;wire[26:0]temp4;wire[25:0]temp5;wire[24:0]temp6;wire[23:0]temp7;wire[22:0]temp8;wire[21:0]temp9;wire[20:0]temp10;wire[19:0]temp11;wire[18:0]temp12;wire[17:0]temp13;wire[16:0]temp14;wire[15:0]temp15;function[15:0]mult16x1;input[15:0]operand;inputsel;beginmult16x1=(sel)?(operand):15'b0;endendfunctionassigntemp15=mult16x1(a,b[0]);assigntemp14=((mult16x1(a,b[1]))<<1);assigntemp13=((mult16x1(a,b[1]))<<2);assigntemp12=((mult16x1(a,b[1]))<<3);assigntemp11=((mult16x1(a,b[1]))<<4);assigntemp10=((mult16x1(a,b[1]))<<5);assigntemp9=((mult16x1(a,b[1]))<<6);assigntemp8=((mult16x1(a,b[1]))<<7);assigntemp7=((mult16x1(a,b[1]))<<8);assigntemp6=((mult16x1(a,b[1]))<<9);assigntemp5=((mult16x1(a,b[2]))<<10);assigntemp4=((mult16x1(a,b[3]))<<11);assigntemp3=((mult16x1(a,b[4]))<<12);assigntemp2=((mult16x1(a,b[5]))<<13);assigntemp1=((mult16x1(a,b[6]))<<14);assigntemp0=((mult16x1(a,b[7]))<<15);wire[31:0]out1,c1,d1;wire[29:0]out2;wire[27:0]out3,c2;wire[25:0]out4;wire[23:0]out5,c3,d2;wire[21:0]out6;wire[19:0]out7,c4;wire[17:0]out8;assignout1=temp0+temp1;assignout2=temp2+temp3;assignout3=temp4+temp5;assignout4=temp6+temp7;assignout5=temp8+temp9;assignout6=temp10+temp11;assignout7=temp12+temp13;assignout8=temp14+temp15;assignc1=out1+out2;assignc2=out3+out4;assignc3=out5+out6;assignc4=out7+out8;assignd1=c1+c2;assignd2=c3+c4;e=d1+d2;endmodule其综合框图部分截图如下图所示。本设计例化了5个乘法器分别为 m0,m1,m2,m3,(.e(mout0),.a(x_in),.b(8'd2)),m1(.e(mout1),.a(q1),.b(8'd7)),m2(.e(mout2),.a(q2),.b(8'd8)),m3(.e(mout3),.a(q3),.b(8'd7)),m4(.e(mout4),.a(q4),.b(8'd2));3、加法器模块由于本设计只涉及到相加,而没有减法,所以本加法器实现两个 32位无符号数的相加运算。即将输入的两数,在时钟脉冲到来时相加运算,输出结果。由于加法器相对于乘法器等模块占用的资源少,所以本设计没有再单独设计加法器,而是直接综合出加法器。程序代码如下:moduleadd32(a,b,out);input[31:0]a,b;output[34:0]out;assignout=a+b;endmodule在本设计中共有 4个加法器a1,a2,a3,a4add32a1(.a(mout0),.b(mout1),.out(aout1)),a2(.a(aout1),.b(mout2),.out(aout2)),a3(.a(aout2),.b(mout3),.out(aout3)),a4(.a(aout3),.b(mout4),.out(aout4));二、波形仿真首先用Matlab产生一个周期为16点位宽为16位三角波:n=1:7;x1(n)=n-1;n=8:15;x1(n)=15-n;x1=x1*100;x2=uint16(x1);fid=fopen('E:/CX/Verilog/design/FIR/FIR1/','wt+');fprintf(fid,'%x\n' ,x2);fclose(fid);产生的三角波如下:n=1:15;subplot(3,1,1);stem(n,x1);subplot(3,1,2);x1fft=fft(x1);stem(n,abs(x1fft));,将各个模块添加到顶层图中联合测试,最终实现所需要的功能。测试代码如下所示:timescale1ns/1ps`defineclock50moduletest;regclk,reset_n;reg[15:0]x_in;reg[15:0]data_mem[0:15];integeri;wire[23:0]y_out;always#`clockclk=~clk;initialbeginclk=0;reset_n=1;#20reset_n=0;#10reset_n=1;endinitialbegin$readmemh("",data_mem);endalways@(posedgeclkornegedgereset_n)beginif(!reset_n)beginx_in<=15'b0;i<=0;endelseif(i<=13)beginx_in<=data_mem[i];i<=i+1;endelsebeginx_in<=data_mem[i];i<=0;endendfir_topfir(.reset_n(reset_n),.clk(clk),.x_in(x_in),.y_out(y_out));

高通FIR数字滤波器设计verilog要点 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息