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实现所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)