|
发表于 2020-10-7 22:32:08
|
显示全部楼层
输入虽然是0101,但是你还是要进行量化,否则右移以后就全是0了。如果不会写可以试试HDL coder。下面是一个例子,已经仿过了,可以直接用。
`timescale 1ns/1ps
module lpf
( output [ 18 : 0 ] lpf_out,
input [ 15 : 0 ] lpf_in,
input clk,
input rst );
wire [ 15 : 0 ] lpf_in_div64;
wire [ 16 : 0 ] sum1;
reg [ 16 : 0 ] sum1_d1;
wire [ 16 : 0 ] sum1_d1_31div32;
wire [ 17 : 0 ] sum2;
wire [ 17 : 0 ] sum2_15div16;
assign lpf_in_div64 = lpf_in >> 6;
assign sum1 = lpf_in_div64 + sum1_d1_31div32;
always @( posedge clk or posedge rst ) begin
if( rst ) sum1_d1 <= 17'b0;
else sum1_d1 <= sum1;
end
assign sum1_d1_31div32 = ( sum1_d1 >> 1 )
+ ( sum1_d1 >> 2 )
+ ( sum1_d1 >> 3 )
+ ( sum1_d1 >> 4 )
+ ( sum1_d1 >> 5 );
assign sum2 = sum1 + sum1_d1;
assign sum2_15div16 = ( sum2 >> 1 )
+ ( sum2 >> 2 )
+ ( sum2 >> 3 )
+ ( sum2 >> 4 );
assign lpf_out = ( lpf_in >> 4 ) + sum2_15div16;
endmodule |
|