004-FIR实现

004-FIR实现,第1张

概述2019年10月7日19:13:37 待提升:分布式计算研究(参考:http://www.elecfans.com/d/782268.html) 以及各种改进实现思路的论文:     基本型FIR实现:      需要具备的应用: 1)乘法器; 2)加法器; 3)延时器; 以6阶FIR举例——  对应code `timescale 1ns / 1psmodule fir_6tap(

2019年10月7日19:13:37

待提升:分布式计算研究(参考:http://www.elecfans.com/d/782268.html)

以及各种改进实现思路的论文:

 

 

基本型FIR实现:

 

 

 需要具备的应用:

1)乘法器;

2)加法器;

3)延时器;

以6阶FIR举例——

 对应code

`timescale 1ns / 1psmodule fir_6tap(        input Clk,input signed [15:0] Xin,output reg signed [23:0] Yout        );        //Internal variables.    wire signed   [7:0] H0,H1,H2,H3,H4,H5;    wire signed   [23:0] MCM0,MCM1,MCM2,MCM3,MCM4,MCM5,add_out1,add_out2,add_out3,add_out4,add_out5;    wire signed     [23:0] Q1,Q2,Q3,Q4,Q5;    //filter coefficIEnt initializations.//H = [-2 -1 3 4]  8bits    assign H0 = -15;    assign H1 = 19 ;    assign H2 = 123;    assign H3 = 123;    assign H4 = 19;    assign H5 = -15;//Multiple constant multiplications.    assign MCM5 = H5*Xin;    assign MCM4 = H4*Xin;    assign MCM3 = H3*Xin;    assign MCM2 = H2*Xin;    assign MCM1 = H1*Xin;    assign MCM0 = H0*Xin;//adders    assign add_out1 = Q1 + MCM4;    assign add_out2 = Q2 + MCM3;    assign add_out3 = Q3 + MCM2;        assign add_out4 = Q4 + MCM1;       assign add_out5 = Q5 + MCM0;   //flipflop instantiations (for introducing a delay).    DFF dff1 (.Clk(Clk),.D(MCM5),.Q(Q1));    DFF dff2 (.Clk(Clk),.D(add_out1),.Q(Q2));    DFF dff3 (.Clk(Clk),.D(add_out2),.Q(Q3));    DFF dff4 (.Clk(Clk),.D(add_out3),.Q(Q4));    DFF dff5 (.Clk(Clk),.D(add_out4),.Q(Q5));//Assign the last adder output to final output.    [email protected] (posedge Clk)        Yout <= add_out5;endmodule

  对于任意阶:

module fir6Tap(clk,rst,xin,yout);/******************** ParaMETER ********************/parameter DATINWIDTH = 16;parameter COEFWIDTH = 8;parameter DATOUTWIDTH = COEFWIDTH + DATINWIDTH ; parameter FIRTAPS = 6;/******************** input OUTPUT ********************/input    clk;input    rst;input    signed    [DATINWIDTH - 1:0]     xin;output    reg     signed   [DATOUTWIDTH - 1:0]    yout;/******************** FIR ********************/wire    signed    [COEFWIDTH - 1:0]    firCoef    [FIRTAPS - 1:0] = {	-8‘d15,8‘d19,8‘d123,-8‘d15};wire    signed    [DATOUTWIDTH - 1:0]    dataMult    [FIRTAPS - 1:0];reg    signed    [DATOUTWIDTH - 1:0]    dataDelay    [FIRTAPS - 2:0];wire    signed    [DATOUTWIDTH - 1:0]    dataOut    [FIRTAPS - 2:0];genvar ii;generate for(ii = 0; ii < FIRTAPS - 1; ii = ii + 1) begin	assign dataMult[ii] = firCoef[ii] * xin;	assign dataOut[ii] = dataDelay[ii] + dataMult[FIRTAPS - 2 - ii];endendgenerateassign dataMult[FIRTAPS - 1] = firCoef[FIRTAPS - 1] * xin;genvar jj;generate for (jj = 1; jj < FIRTAPS - 1; jj = jj + 1)always @(posedge clk)  begin	dataDelay[jj] <= dataOut[jj - 1];endendgeneratealways @(posedge clk)  begin	dataDelay[0] <= dataMult[FIRTAPS - 1];endalways @(posedge clk) begin	yout <= dataOut[FIRTAPS - 2]; endendmodule
总结

以上是内存溢出为你收集整理的004-FIR实现全部内容,希望文章能够帮你解决004-FIR实现所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1031068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存