参考IP核,将输入系数的位宽都改为32位;使用参数化的方法来控制
This commit is contained in:
parent
5f445faf9e
commit
d25f7e4439
162
rtl/IIR_Filter.v
162
rtl/IIR_Filter.v
|
@ -31,75 +31,81 @@
|
||||||
// Synthesizable (y/n):
|
// Synthesizable (y/n):
|
||||||
// Other:
|
// Other:
|
||||||
//-FHDR--------------------------------------------------------------------------------------------------------
|
//-FHDR--------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
parameter data_in_width = 16;
|
||||||
|
parameter coef_width = 32;
|
||||||
|
parameter frac_data_out_width = 20;//X for in,5
|
||||||
|
parameter frac_coef_width = 31;//division
|
||||||
|
parameter feedback_width = 36;
|
||||||
|
parameter data_out_width = 36;
|
||||||
|
parameter saturation_mode = 0;
|
||||||
|
parameter out_reg = 1;
|
||||||
|
|
||||||
module IIR_Filter (
|
module IIR_Filter (
|
||||||
rstn,
|
input rstn
|
||||||
en,
|
,input clk
|
||||||
clk,
|
,input en
|
||||||
din_re,
|
,input signed [data_in_width-1:0] din_re
|
||||||
din_im,
|
,input signed [data_in_width-1:0] din_im
|
||||||
a_re,
|
,input signed [coef_width-1 :0] a_re
|
||||||
a_im,
|
,input signed [coef_width-1 :0] a_im
|
||||||
b_re,
|
,input signed [coef_width-1 :0] b_re
|
||||||
b_im,
|
,input signed [coef_width-1 :0] b_im
|
||||||
dout
|
|
||||||
|
,output signed [data_in_width-1:0] dout
|
||||||
);
|
);
|
||||||
|
|
||||||
input rstn;
|
|
||||||
input clk;
|
|
||||||
input en;
|
|
||||||
input signed [15:0] din_re;
|
|
||||||
input signed [15:0] din_im;
|
|
||||||
input signed [36:0] a_re;
|
|
||||||
input signed [36:0] a_im;
|
|
||||||
input signed [20:0] b_re;
|
|
||||||
input signed [20:0] b_im;
|
|
||||||
|
|
||||||
output signed [15:0] dout;
|
wire signed [data_in_width+frac_data_out_width:0] x1_re;
|
||||||
|
wire signed [data_in_width+frac_data_out_width:0] x1_im;
|
||||||
wire signed [31:0] x1_re;
|
mult_C
|
||||||
wire signed [31:0] x1_im;
|
#(
|
||||||
wire signed [31:0] x2_re;
|
.A_width(data_in_width)
|
||||||
wire signed [31:0] x2_im;
|
,.B_width(data_in_width)
|
||||||
wire signed [31:0] v_re;
|
,.C_width(coef_width+frac_data_out_width)
|
||||||
wire signed [31:0] v_im;
|
,.D_width(coef_width+frac_data_out_width)
|
||||||
reg signed [31:0] v1_re;
|
,.frac_coef_width(frac_coef_width)
|
||||||
reg signed [31:0] v1_im;
|
)
|
||||||
|
inst_c1 (
|
||||||
wire signed [31:0] y_re;
|
|
||||||
wire signed [31:0] y_im;
|
|
||||||
wire signed [31:0] y1_re;
|
|
||||||
wire signed [31:0] y1_im;
|
|
||||||
wire signed [31:0] y2_re;
|
|
||||||
wire signed [31:0] y2_im;
|
|
||||||
|
|
||||||
reg signed [15:0] dout_re;
|
|
||||||
|
|
||||||
mult_C #(16,16,37,37) inst_c1 (
|
|
||||||
.clk (clk ),
|
.clk (clk ),
|
||||||
.rstn (rstn ),
|
.rstn (rstn ),
|
||||||
.en (en ),
|
.en (en ),
|
||||||
.a (din_re ),
|
.a (din_re ),
|
||||||
.b (din_im ),
|
.b (din_im ),
|
||||||
.c (a_re ),
|
.c ({a_re,{frac_data_out_width{1'b0}}}),
|
||||||
.d (a_im ),
|
.d ({a_im,{frac_data_out_width{1'b0}}}),
|
||||||
.Re (x1_re ),
|
.Re (x1_re ),//a*x(n)
|
||||||
.Im (x1_im )
|
.Im (x1_im )
|
||||||
);
|
);
|
||||||
|
wire signed [data_in_width+frac_data_out_width+1:0] x2_re;
|
||||||
mult_C #(32,32,21,21) inst_c2 (
|
wire signed [data_in_width+frac_data_out_width+1:0] x2_im;
|
||||||
|
mult_C
|
||||||
|
#(
|
||||||
|
.A_width(data_in_width+frac_data_out_width+1)
|
||||||
|
,.B_width(data_in_width+frac_data_out_width+1)
|
||||||
|
,.C_width(coef_width)
|
||||||
|
,.D_width(coef_width)
|
||||||
|
,.frac_coef_width(frac_coef_width)
|
||||||
|
)
|
||||||
|
inst_c2 (
|
||||||
.clk (clk ),
|
.clk (clk ),
|
||||||
.rstn (rstn ),
|
.rstn (rstn ),
|
||||||
.en (en ),
|
.en (en ),
|
||||||
.a (x1_re ),
|
.a (x1_re ),//a*x(n)
|
||||||
.b (x1_im ),
|
.b (x1_im ),
|
||||||
.c (b_re ),
|
.c (b_re ),
|
||||||
.d (b_im ),
|
.d (b_im ),
|
||||||
.Re (x2_re ),
|
.Re (x2_re ),//a*b*x(n-1)
|
||||||
.Im (x2_im )
|
.Im (x2_im )
|
||||||
);
|
);
|
||||||
|
wire signed [data_in_width+frac_data_out_width+1:0] v_re;
|
||||||
|
wire signed [data_in_width+frac_data_out_width+1:0] v_im;
|
||||||
|
|
||||||
assign v_re = x1_re - x2_re;
|
assign v_re = x1_re + x2_re;
|
||||||
assign v_im = x1_im - x2_im;
|
assign v_im = x1_im + x2_im;
|
||||||
|
|
||||||
|
reg signed [data_in_width+frac_data_out_width+1:0] v1_re;
|
||||||
|
reg signed [data_in_width+frac_data_out_width+1:0] v1_im;
|
||||||
|
|
||||||
always @(posedge clk or negedge rstn)
|
always @(posedge clk or negedge rstn)
|
||||||
if (!rstn)
|
if (!rstn)
|
||||||
|
@ -118,19 +124,44 @@ always @(posedge clk or negedge rstn)
|
||||||
v1_im <= v1_im;
|
v1_im <= v1_im;
|
||||||
end
|
end
|
||||||
|
|
||||||
mult_C #(32,32,21,21) inst_c3 (
|
wire signed [data_in_width+frac_data_out_width+1:0] y_re;
|
||||||
|
wire signed [data_in_width+frac_data_out_width+1:0] y_im;
|
||||||
|
wire signed [data_in_width+frac_data_out_width+1:0] y1_re;
|
||||||
|
wire signed [data_in_width+frac_data_out_width+1:0] y1_im;
|
||||||
|
wire signed [data_in_width+frac_data_out_width+1:0] y2_re;
|
||||||
|
wire signed [data_in_width+frac_data_out_width+1:0] y2_im;
|
||||||
|
|
||||||
|
reg signed [data_in_width-1:0] dout_re;
|
||||||
|
|
||||||
|
mult_C
|
||||||
|
#(
|
||||||
|
.A_width(data_in_width+frac_data_out_width+2)
|
||||||
|
,.B_width(data_in_width+frac_data_out_width+2)
|
||||||
|
,.C_width(coef_width)
|
||||||
|
,.D_width(coef_width)
|
||||||
|
,.frac_coef_width(frac_coef_width)
|
||||||
|
)
|
||||||
|
inst_c3 (
|
||||||
.clk (clk ),
|
.clk (clk ),
|
||||||
.rstn (rstn ),
|
.rstn (rstn ),
|
||||||
.en (en ),
|
.en (en ),
|
||||||
.a (y_re ),
|
.a (y_re ),//y(n)=a*x(n)+a*b*x(n-1)+b^2*y(n-2)
|
||||||
.b (y_im ),
|
.b (y_im ),
|
||||||
.c (b_re ),
|
.c (b_re ),
|
||||||
.d (b_im ),
|
.d (b_im ),
|
||||||
.Re (y1_re ),
|
.Re (y1_re ),//b*y(n-1)
|
||||||
.Im (y1_im )
|
.Im (y1_im )
|
||||||
);
|
);
|
||||||
|
|
||||||
mult_C #(32,32,21,21) inst_c4 (
|
mult_C
|
||||||
|
#(
|
||||||
|
.A_width(data_in_width+frac_data_out_width+2)
|
||||||
|
,.B_width(data_in_width+frac_data_out_width+2)
|
||||||
|
,.C_width(coef_width)
|
||||||
|
,.D_width(coef_width)
|
||||||
|
,.frac_coef_width(frac_coef_width)
|
||||||
|
)
|
||||||
|
inst_c4 (
|
||||||
.clk (clk ),
|
.clk (clk ),
|
||||||
.rstn (rstn ),
|
.rstn (rstn ),
|
||||||
.en (en ),
|
.en (en ),
|
||||||
|
@ -138,13 +169,34 @@ mult_C #(32,32,21,21) inst_c4 (
|
||||||
.b (y1_im ),
|
.b (y1_im ),
|
||||||
.c (b_re ),
|
.c (b_re ),
|
||||||
.d (b_im ),
|
.d (b_im ),
|
||||||
.Re (y2_re ),
|
.Re (y2_re ),//b^2*y(n-2)
|
||||||
.Im (y2_im )
|
.Im (y2_im )
|
||||||
);
|
);
|
||||||
|
|
||||||
assign y_re = v1_re + y2_re;
|
assign y_re = v1_re + y2_re;
|
||||||
assign y_im = v1_im + y2_im;
|
assign y_im = v1_im + y2_im;
|
||||||
|
|
||||||
|
reg signed [data_in_width+frac_data_out_width+2:0] dout_round;
|
||||||
|
|
||||||
|
always@(posedge clk or negedge rstn)
|
||||||
|
if(!rstn)
|
||||||
|
begin
|
||||||
|
dout_round <= 'h0;
|
||||||
|
end
|
||||||
|
else if(en) begin
|
||||||
|
if(y_re[data_in_width+frac_data_out_width+1] == 1'b0)
|
||||||
|
begin
|
||||||
|
dout_round <= y_re + {{1'b1},{(frac_data_out_width-1){1'b0}}};
|
||||||
|
end
|
||||||
|
else if (y_re[data_in_width+frac_data_out_width+1] == 1'b1)
|
||||||
|
begin
|
||||||
|
dout_round <= y_re + {{1'b1},{(frac_data_out_width-1){1'b0}}} - 1'b1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
dout_round <= dout_round;
|
||||||
|
end
|
||||||
|
|
||||||
always @(posedge clk or negedge rstn)
|
always @(posedge clk or negedge rstn)
|
||||||
if (!rstn)
|
if (!rstn)
|
||||||
begin
|
begin
|
||||||
|
@ -152,7 +204,7 @@ always @(posedge clk or negedge rstn)
|
||||||
end
|
end
|
||||||
else if(en)
|
else if(en)
|
||||||
begin
|
begin
|
||||||
dout_re <= y_re[31:16];
|
dout_re <= dout_round[data_in_width+frac_data_out_width+2:frac_data_out_width];
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
|
|
|
@ -71,32 +71,32 @@ input rstn;
|
||||||
input clk;
|
input clk;
|
||||||
input en;
|
input en;
|
||||||
input tc_bypass;
|
input tc_bypass;
|
||||||
input signed [15:0] din_re;
|
input signed [31:0] din_re;
|
||||||
input signed [15:0] din_im;
|
input signed [31:0] din_im;
|
||||||
input signed [36:0] a0_re;
|
input signed [31:0] a0_re;
|
||||||
input signed [36:0] a0_im;
|
input signed [31:0] a0_im;
|
||||||
input signed [20:0] b0_re;
|
input signed [31:0] b0_re;
|
||||||
input signed [20:0] b0_im;
|
input signed [31:0] b0_im;
|
||||||
input signed [36:0] a1_re;
|
input signed [31:0] a1_re;
|
||||||
input signed [36:0] a1_im;
|
input signed [31:0] a1_im;
|
||||||
input signed [20:0] b1_re;
|
input signed [31:0] b1_re;
|
||||||
input signed [20:0] b1_im;
|
input signed [31:0] b1_im;
|
||||||
input signed [36:0] a2_re;
|
input signed [31:0] a2_re;
|
||||||
input signed [36:0] a2_im;
|
input signed [31:0] a2_im;
|
||||||
input signed [20:0] b2_re;
|
input signed [31:0] b2_re;
|
||||||
input signed [20:0] b2_im;
|
input signed [31:0] b2_im;
|
||||||
input signed [36:0] a3_re;
|
input signed [31:0] a3_re;
|
||||||
input signed [36:0] a3_im;
|
input signed [31:0] a3_im;
|
||||||
input signed [20:0] b3_re;
|
input signed [31:0] b3_re;
|
||||||
input signed [20:0] b3_im;
|
input signed [31:0] b3_im;
|
||||||
input signed [36:0] a4_re;
|
input signed [31:0] a4_re;
|
||||||
input signed [36:0] a4_im;
|
input signed [31:0] a4_im;
|
||||||
input signed [20:0] b4_re;
|
input signed [31:0] b4_re;
|
||||||
input signed [20:0] b4_im;
|
input signed [31:0] b4_im;
|
||||||
input signed [36:0] a5_re;
|
input signed [31:0] a5_re;
|
||||||
input signed [36:0] a5_im;
|
input signed [31:0] a5_im;
|
||||||
input signed [20:0] b5_re;
|
input signed [31:0] b5_re;
|
||||||
input signed [20:0] b5_im;
|
input signed [31:0] b5_im;
|
||||||
|
|
||||||
output signed [15:0] dout;
|
output signed [15:0] dout;
|
||||||
|
|
||||||
|
@ -116,6 +116,8 @@ reg signed [15:0] din_r1;
|
||||||
reg signed [15:0] din_r2;
|
reg signed [15:0] din_r2;
|
||||||
reg signed [15:0] din_r3;
|
reg signed [15:0] din_r3;
|
||||||
reg signed [15:0] din_r4;
|
reg signed [15:0] din_r4;
|
||||||
|
reg signed [15:0] din_r5;
|
||||||
|
|
||||||
reg signed [15:0] dout_r;
|
reg signed [15:0] dout_r;
|
||||||
|
|
||||||
diff inst_diffRe
|
diff inst_diffRe
|
||||||
|
@ -223,6 +225,7 @@ always @(posedge clk or negedge rstn)
|
||||||
din_r2 <= 'h0;
|
din_r2 <= 'h0;
|
||||||
din_r3 <= 'h0;
|
din_r3 <= 'h0;
|
||||||
din_r4 <= 'h0;
|
din_r4 <= 'h0;
|
||||||
|
din_r5 <= 'h0;
|
||||||
end
|
end
|
||||||
else if(en)
|
else if(en)
|
||||||
begin
|
begin
|
||||||
|
@ -231,6 +234,7 @@ always @(posedge clk or negedge rstn)
|
||||||
din_r2 <= din_r1;
|
din_r2 <= din_r1;
|
||||||
din_r3 <= din_r2;
|
din_r3 <= din_r2;
|
||||||
din_r4 <= din_r3;
|
din_r4 <= din_r3;
|
||||||
|
din_r5 <= din_r4;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
|
@ -239,9 +243,10 @@ always @(posedge clk or negedge rstn)
|
||||||
din_r2 <= din_r2;
|
din_r2 <= din_r2;
|
||||||
din_r3 <= din_r3;
|
din_r3 <= din_r3;
|
||||||
din_r4 <= din_r4;
|
din_r4 <= din_r4;
|
||||||
|
din_r5 <= din_r5;
|
||||||
end
|
end
|
||||||
|
|
||||||
assign Ysum = dout_0 + dout_1 + dout_2 + dout_3 + dout_4 + dout_5 + din_r4;
|
assign Ysum = dout_0 + dout_1 + dout_2 + dout_3 + dout_4 + dout_5 + din_r5;
|
||||||
|
|
||||||
always@(posedge clk or negedge rstn)
|
always@(posedge clk or negedge rstn)
|
||||||
if (!rstn)begin
|
if (!rstn)begin
|
||||||
|
|
|
@ -47,6 +47,7 @@ parameter integer A_width = 8;
|
||||||
parameter integer B_width = 8;
|
parameter integer B_width = 8;
|
||||||
parameter integer C_width = 8;
|
parameter integer C_width = 8;
|
||||||
parameter integer D_width = 8;
|
parameter integer D_width = 8;
|
||||||
|
parameter integer frac_coef_width = 31;//division
|
||||||
|
|
||||||
input rstn;
|
input rstn;
|
||||||
input clk;
|
input clk;
|
||||||
|
@ -56,8 +57,8 @@ input signed [B_width-1:0] b;
|
||||||
input signed [C_width-1:0] c;
|
input signed [C_width-1:0] c;
|
||||||
input signed [D_width-1:0] d;
|
input signed [D_width-1:0] d;
|
||||||
|
|
||||||
output signed [A_width+C_width-22:0] Re;
|
output signed [A_width+C_width-frac_coef_width-1:0] Re;
|
||||||
output signed [A_width+D_width-22:0] Im;
|
output signed [A_width+D_width-frac_coef_width-1:0] Im;
|
||||||
|
|
||||||
wire signed [A_width+C_width-1:0] ac;
|
wire signed [A_width+C_width-1:0] ac;
|
||||||
wire signed [B_width+D_width-1:0] bd;
|
wire signed [B_width+D_width-1:0] bd;
|
||||||
|
@ -107,7 +108,7 @@ always@(posedge clk or negedge rstn)
|
||||||
Im_tmp <= Im_tmp;
|
Im_tmp <= Im_tmp;
|
||||||
end
|
end
|
||||||
|
|
||||||
assign Re = Re_tmp[A_width+D_width-1:20];
|
assign Re = Re_tmp[A_width+D_width-1:frac_coef_width];
|
||||||
assign Im = Im_tmp[A_width+D_width-1:20];
|
assign Im = Im_tmp[A_width+D_width-1:frac_coef_width];
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
48
rtl/z_dsp.v
48
rtl/z_dsp.v
|
@ -85,30 +85,30 @@ input [1:0] intp_mode;
|
||||||
input [1:0] dac_mode_sel;
|
input [1:0] dac_mode_sel;
|
||||||
input signed [15:0] din_re;
|
input signed [15:0] din_re;
|
||||||
input signed [15:0] din_im;
|
input signed [15:0] din_im;
|
||||||
input signed [36:0] a0_re;
|
input signed [31:0] a0_re;
|
||||||
input signed [36:0] a0_im;
|
input signed [31:0] a0_im;
|
||||||
input signed [20:0] b0_re;
|
input signed [31:0] b0_re;
|
||||||
input signed [20:0] b0_im;
|
input signed [31:0] b0_im;
|
||||||
input signed [36:0] a1_re;
|
input signed [31:0] a1_re;
|
||||||
input signed [36:0] a1_im;
|
input signed [31:0] a1_im;
|
||||||
input signed [20:0] b1_re;
|
input signed [31:0] b1_re;
|
||||||
input signed [20:0] b1_im;
|
input signed [31:0] b1_im;
|
||||||
input signed [36:0] a2_re;
|
input signed [31:0] a2_re;
|
||||||
input signed [36:0] a2_im;
|
input signed [31:0] a2_im;
|
||||||
input signed [20:0] b2_re;
|
input signed [31:0] b2_re;
|
||||||
input signed [20:0] b2_im;
|
input signed [31:0] b2_im;
|
||||||
input signed [36:0] a3_re;
|
input signed [31:0] a3_re;
|
||||||
input signed [36:0] a3_im;
|
input signed [31:0] a3_im;
|
||||||
input signed [20:0] b3_re;
|
input signed [31:0] b3_re;
|
||||||
input signed [20:0] b3_im;
|
input signed [31:0] b3_im;
|
||||||
input signed [36:0] a4_re;
|
input signed [31:0] a4_re;
|
||||||
input signed [36:0] a4_im;
|
input signed [31:0] a4_im;
|
||||||
input signed [20:0] b4_re;
|
input signed [31:0] b4_re;
|
||||||
input signed [20:0] b4_im;
|
input signed [31:0] b4_im;
|
||||||
input signed [36:0] a5_re;
|
input signed [31:0] a5_re;
|
||||||
input signed [36:0] a5_im;
|
input signed [31:0] a5_im;
|
||||||
input signed [20:0] b5_re;
|
input signed [31:0] b5_re;
|
||||||
input signed [20:0] b5_im;
|
input signed [31:0] b5_im;
|
||||||
|
|
||||||
output signed [15:0] dout0;
|
output signed [15:0] dout0;
|
||||||
output signed [15:0] dout1;
|
output signed [15:0] dout1;
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
%%% so means original, s_mean means mean value
|
|
||||||
function [s,s_mean] = MeanIntp(s,s_r1)
|
|
||||||
|
|
||||||
s_mean = (s+s_r1)/2;
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,35 +0,0 @@
|
||||||
function out = MyIIR(a,b,x,YStartState,sel_double)
|
|
||||||
|
|
||||||
len = length(x);
|
|
||||||
|
|
||||||
switch sel_double
|
|
||||||
case 0
|
|
||||||
x = int64(x);
|
|
||||||
a = int64(a);
|
|
||||||
b = int64(b);
|
|
||||||
y(1) = int64(YStartState);
|
|
||||||
case 1
|
|
||||||
x = double(x);
|
|
||||||
a = double(a);
|
|
||||||
b = double(b);
|
|
||||||
y(1) = double(YStartState);
|
|
||||||
end
|
|
||||||
|
|
||||||
switch sel_double
|
|
||||||
|
|
||||||
case 0
|
|
||||||
|
|
||||||
for i = 1:len-1
|
|
||||||
y_tmp(i+1) = a*x(i+1) - b*y(i)';
|
|
||||||
y(i+1) = bitsra(y_tmp(i+1),20) + bitget(y_tmp(i+1),64);
|
|
||||||
end
|
|
||||||
out = bitsra(y,16);
|
|
||||||
|
|
||||||
case 1
|
|
||||||
|
|
||||||
for i = 1:len-1
|
|
||||||
y_tmp(i+1) = floor(a*x(i+1) - b*y(i)');
|
|
||||||
y(i+1) = floor(y_tmp(i+1)/2^20) + bitget(int64(y_tmp(i+1)),64);
|
|
||||||
end
|
|
||||||
out = floor(y/2^16);
|
|
||||||
end
|
|
|
@ -1,31 +0,0 @@
|
||||||
clc;clear;close all
|
|
||||||
|
|
||||||
%%%verification of single IIR Filter by comparing matlab and verilog
|
|
||||||
cd('/data/work/thfu/TailCorr/script_m');
|
|
||||||
|
|
||||||
a = 13740916;
|
|
||||||
b = -1047703;
|
|
||||||
y(1) = 0;
|
|
||||||
|
|
||||||
sel_double = 0;
|
|
||||||
|
|
||||||
switch sel_double
|
|
||||||
case 0
|
|
||||||
iir_in = int64(importdata("/home/thfu/work/TailCorr/v02/sim/in") -32768);
|
|
||||||
iir_out = int64(importdata("/home/thfu/work/TailCorr/v02/sim/out") -32768);
|
|
||||||
case 1
|
|
||||||
iir_in = double(importdata("/home/thfu/work/TailCorr/v02/sim/in") -32768);
|
|
||||||
iir_out = double(importdata("/home/thfu/work/TailCorr/v02/sim/out") -32768);
|
|
||||||
end
|
|
||||||
|
|
||||||
Script_out = MyIIR(a,b,iir_in,y(1),sel_double)';
|
|
||||||
y_revised = iir_in + Script_out;
|
|
||||||
tau = finddelay(y_revised,iir_out);
|
|
||||||
|
|
||||||
Script_outPhi = cat(1,zeros(1,tau)',Script_out(1:end-tau,1));
|
|
||||||
|
|
||||||
n = 1:length(iir_in);
|
|
||||||
diff = iir_out(n)-Script_outPhi(n);
|
|
||||||
|
|
||||||
diff_plot(iir_out, Script_outPhi)
|
|
||||||
tau
|
|
|
@ -1,45 +0,0 @@
|
||||||
%%%verification of polyphase structures using trig
|
|
||||||
clc;clear all;close all
|
|
||||||
|
|
||||||
fs = 1e8;
|
|
||||||
t = (0:1:1e2)'/fs;
|
|
||||||
% f = 20e6;
|
|
||||||
% s = sin(2*pi*f*t);
|
|
||||||
s = triang(1e2-1);
|
|
||||||
s = [zeros(1,10) s' zeros(1,10)]';
|
|
||||||
N = length(s);
|
|
||||||
ts = (0:1:N-1)'/fs;
|
|
||||||
%%%
|
|
||||||
s_r1 = [0 s(1:end-1,1)']';
|
|
||||||
[s2,s2_mean] = MeanIntp(s,s_r1);
|
|
||||||
|
|
||||||
s_intp2 = zeros(2*N,1);
|
|
||||||
s_intp2(1:2:2*N) = s2_mean;
|
|
||||||
s_intp2(2:2:2*N) = s2;
|
|
||||||
t_intp2 = (0:1:2*N-1)'/fs/2;
|
|
||||||
%%%
|
|
||||||
s2_r1 = [0 s2(1:end-1,1)']';
|
|
||||||
|
|
||||||
[s4_4,s4_3] = MeanIntp(s2,s2_mean);
|
|
||||||
[s4_2,s4_1] = MeanIntp(s2_mean,s2_r1);
|
|
||||||
|
|
||||||
s_intp4 = zeros(4*N,1);
|
|
||||||
s_intp4(1:4:4*N) = s4_1;
|
|
||||||
s_intp4(2:4:4*N) = s4_2;
|
|
||||||
s_intp4(3:4:4*N) = s4_3;
|
|
||||||
s_intp4(4:4:4*N) = s4_4;
|
|
||||||
|
|
||||||
t_intp4 = (0:1:4*N-1)'/fs/4;
|
|
||||||
|
|
||||||
|
|
||||||
figure('Units','normalized','Position',[0.000390625,0.517361111111111,0.49921875,0.422916666666667]);
|
|
||||||
plot(ts,s,t_intp2,s_intp2)
|
|
||||||
grid on
|
|
||||||
% xlim([0.58 0.62]*1e-6)
|
|
||||||
%
|
|
||||||
%
|
|
||||||
figure('Units','normalized','Position',[0.500390625,0.517361111111111,0.49921875,0.422916666666667]);
|
|
||||||
plot(t_intp4,s_intp4)
|
|
||||||
grid on
|
|
||||||
% xlim([0.58 0.62]*1e-6)
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
function out = TailCorr(alpha,beta,iir_in,YStartState,sel_double)
|
|
||||||
|
|
||||||
len = length(iir_in);
|
|
||||||
N = length(alpha);
|
|
||||||
|
|
||||||
iir_inR1 = cat(1,0,iir_in(1:end-1,1));
|
|
||||||
|
|
||||||
diff = iir_in - iir_inR1;
|
|
||||||
|
|
||||||
Ystart = YStartState;
|
|
||||||
|
|
||||||
for i = 1:1:N
|
|
||||||
y(1:len,i) = MyIIR(alpha(i),beta(i),diff,Ystart,sel_double);
|
|
||||||
y = floor(y);
|
|
||||||
end
|
|
||||||
|
|
||||||
switch sel_double
|
|
||||||
|
|
||||||
case 0
|
|
||||||
y_sum = int64(sum(y,2));
|
|
||||||
|
|
||||||
case 1
|
|
||||||
y_sum = double(sum(y,2));
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
out = iir_in+y_sum;
|
|
|
@ -1,63 +0,0 @@
|
||||||
%%%2024-10-15
|
|
||||||
%%%verification 8 linear interpolation result by comparing matlab and verilog result
|
|
||||||
clc;clear;close all
|
|
||||||
|
|
||||||
cd('/data/work/thfu/TailCorr/script_m');
|
|
||||||
|
|
||||||
sel_double = 0;
|
|
||||||
|
|
||||||
switch sel_double
|
|
||||||
|
|
||||||
case 0
|
|
||||||
iir_in_verilog = int64(importdata("/home/thfu/work/TailCorr/sim/in.dat") - 32768);
|
|
||||||
% iir_out_x1 = int64(importdata("/home/thfu/work/TailCorr/sim/X1_data.dat") -32768);
|
|
||||||
% iir_out_x2 = int64(importdata("/home/thfu/work/TailCorr/sim/X2_data.dat") -32768);
|
|
||||||
% iir_out_x4 = int64(importdata("/home/thfu/work/TailCorr/sim/X4_data.dat") -32768);
|
|
||||||
iir_out_verilog_x8 = int64(importdata("/home/thfu/work/TailCorr/sim/X8_data.dat") -32768);
|
|
||||||
|
|
||||||
case 1
|
|
||||||
iir_in = double(importdata("/home/thfu/work/TailCorr/sim/in") + 0);
|
|
||||||
iir_out_x1 = double(importdata("/home/thfu/work/TailCorr/sim/X1_data.dat") - 32768);
|
|
||||||
iir_out_x2 = double(importdata("/home/thfu/work/TailCorr/sim/X2_data.dat") - 32768);
|
|
||||||
iir_out_x4 = double(importdata("/home/thfu/work/TailCorr/sim/X4_data.dat") - 32768);
|
|
||||||
iir_out_x8 = double(importdata("/home/thfu/work/TailCorr/sim/X8_data.dat") - 32768);
|
|
||||||
|
|
||||||
end
|
|
||||||
% iir_out_x1 = [iir_out_x1' zeros(1,2)]';
|
|
||||||
% iir_out_x2 = [iir_out_x2' zeros(1,3)]';
|
|
||||||
% iir_out_x4 = [iir_out_x4' zeros(1,6)]';
|
|
||||||
|
|
||||||
alpha = [1757225200, 1045400392, 13740916];
|
|
||||||
beta = -[1042856 1046395 1047703];
|
|
||||||
|
|
||||||
|
|
||||||
Ystart = 0;
|
|
||||||
|
|
||||||
y_revised_matlab = TailCorr(alpha,beta,iir_in_verilog,Ystart,sel_double);
|
|
||||||
|
|
||||||
N = length(y_revised_matlab);
|
|
||||||
x1 = (1:1:N)';
|
|
||||||
x8 = (1:1/8:N+1-1/8)';
|
|
||||||
y_revised_intp8_matlab = int64(interp1(x1,double(y_revised_matlab),x8,'linear'));
|
|
||||||
|
|
||||||
|
|
||||||
%%%
|
|
||||||
%tau0 = finddelay(y_revised_matlab,iir_out_x1);
|
|
||||||
%y_revisedPhi0 = cat(1,zeros(1,tau0)',y_revised_matlab(1:end-tau0,1));
|
|
||||||
%figure('Units','normalized','Position',[0.500390625,0.517361111111111,0.49921875,0.422916666666667]);
|
|
||||||
%diff_plot(iir_out_x1, y_revisedPhi0,'verdi','matlab',[200 N]);
|
|
||||||
%%%
|
|
||||||
%tau2 = finddelay(s_intp2,iir_out_x2);
|
|
||||||
%y_revisedPhi2 = cat(1,zeros(1,tau2)',s_intp2(1:end-tau2,1));
|
|
||||||
%figure('Units','normalized','Position',[0.500390625,0.517361111111111,0.49921875,0.422916666666667]);
|
|
||||||
%diff_plot(iir_out_x2, y_revisedPhi2,'verdi','matlab',[0 4e4])
|
|
||||||
%%%
|
|
||||||
%tau4 = finddelay(s_intp4,iir_out_x4);
|
|
||||||
%y_revisedPhi4 = cat(1,zeros(1,tau4)',s_intp4(1:end-tau4,1));
|
|
||||||
%figure('Units','normalized','Position',[0.000390625,0.034027777777778,0.49921875,0.422916666666667]);
|
|
||||||
%diff_plot(iir_out_x4, y_revisedPhi4,'verdi','matlab',[0 8e4])
|
|
||||||
%%%
|
|
||||||
tau8 = finddelay(y_revised_intp8_matlab,iir_out_verilog_x8);
|
|
||||||
y_revisedPhi8 = cat(1,zeros(1,tau8)',y_revised_intp8_matlab(1:end-tau8,1));
|
|
||||||
figure('Units','normalized','Position',[0.000390625,0.517361111111111,0.49921875,0.422916666666667]);
|
|
||||||
diff_plot(iir_out_verilog_x8, y_revisedPhi8,'verdi','matlab',[400 800]);
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
%in+iir_out with 8 intp
|
||||||
|
clc;clear;close all
|
||||||
|
|
||||||
|
in = importdata("/home/thfu/work/TailCorr/sim/in.dat");
|
||||||
|
wave_verdi = importdata("/home/thfu/work/TailCorr/sim/OrgOut.dat");
|
||||||
|
|
||||||
|
dout0 = importdata("/home/thfu/work/TailCorr/sim/dout0.dat");
|
||||||
|
dout1 = importdata("/home/thfu/work/TailCorr/sim/dout1.dat");
|
||||||
|
dout2 = importdata("/home/thfu/work/TailCorr/sim/dout2.dat");
|
||||||
|
dout3 = importdata("/home/thfu/work/TailCorr/sim/dout3.dat");
|
||||||
|
|
||||||
|
N = length(dout0);
|
||||||
|
cs_wave = zeros(4*N,1);
|
||||||
|
cs_wave(1:4:4*N) = dout0;
|
||||||
|
cs_wave(2:4:4*N) = dout1;
|
||||||
|
cs_wave(3:4:4*N) = dout2;
|
||||||
|
cs_wave(4:4:4*N) = dout3;
|
||||||
|
|
||||||
|
A = [0.025 0.015 0.0002 0];
|
||||||
|
tau = -[1/250 1/650 1/1600 0];
|
||||||
|
fs = 2e9;
|
||||||
|
|
||||||
|
coef_len = length(A);
|
||||||
|
for i = 1:coef_len
|
||||||
|
b(i) = exp(1e9/fs/(1-A(i))*tau(i));
|
||||||
|
a(i) = A(i)/1/(1-A(i))*exp(1e9/fs/(1-A(i))/2*tau(i));
|
||||||
|
h_ideal(:,i) = filter(a(i),[1 -b(i)],diff(in));
|
||||||
|
end
|
||||||
|
|
||||||
|
wave_float = in(2:end)+ sum(h_ideal,2);
|
||||||
|
|
||||||
|
wave_float_len = length(wave_float);
|
||||||
|
wave_float_8 = interp1(1:wave_float_len,wave_float,1:1/8:(wave_float_len+1-1/8),'linear')';
|
||||||
|
|
||||||
|
[cs_wave_A,wave_float_8_A,Delay] = alignsignals(cs_wave,wave_float_8);
|
||||||
|
N = min(length(wave_float_8_A),length(cs_wave_A));
|
||||||
|
% figure()
|
||||||
|
% diff_plot(wave_float_8_A(90:end), cs_wave_A(154:end),'float','verdi',[0 N]);
|
||||||
|
%
|
||||||
|
%Test of iir filter
|
||||||
|
[wave_float_A,wave_verdi_A,Delay] = alignsignals(wave_float,wave_verdi);
|
||||||
|
N = min(length(wave_float_A),length(wave_verdi_A));
|
||||||
|
figure()
|
||||||
|
diff_plot(wave_float_A, wave_verdi_A,'float','verdi',[0 N]);
|
||||||
|
%%
|
||||||
|
signalAnalyzer(wave_float,wave_verdi,'SampleRate',1);
|
||||||
|
%%
|
||||||
|
|
||||||
|
a_fix = round(a*2^31);
|
||||||
|
b_fix = round(b*2^31);
|
||||||
|
|
||||||
|
a_hex = dec2hex(a_fix,8);
|
||||||
|
b_hex = dec2hex(b_fix,8);
|
||||||
|
|
||||||
|
a_bin = dec2bin(a_fix,32);
|
||||||
|
b_bin = dec2bin(b_fix,32);
|
||||||
|
|
||||||
|
fprintf('a_fix is %d\n',a_fix);
|
||||||
|
fprintf('b_fix is %d\n',b_fix);
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
clc;clear;close all
|
|
||||||
|
|
||||||
cd('/data/work/thfu/TailCorr/script_m');
|
|
||||||
|
|
||||||
sel_double = 1;
|
|
||||||
|
|
||||||
switch sel_double
|
|
||||||
case 0
|
|
||||||
iir_in = int64(importdata("/home/thfu/work/TailCorr/v02/sim/in") -32768);
|
|
||||||
iir_out = int64(importdata("/home/thfu/work/TailCorr/v02/sim/out") -32768);
|
|
||||||
case 1
|
|
||||||
iir_in = double(importdata("/home/thfu/work/TailCorr/v02/sim/in") -32768);
|
|
||||||
iir_out = double(importdata("/home/thfu/work/TailCorr/v02/sim/out") -32768);
|
|
||||||
end
|
|
||||||
|
|
||||||
alpha = [1757225200, 1045400392, 13740916];
|
|
||||||
beta = -[1042856 1046395 1047703];
|
|
||||||
|
|
||||||
|
|
||||||
Ystart = 0;
|
|
||||||
|
|
||||||
y_revised = TailCorr(alpha,beta,iir_in,Ystart,sel_double);
|
|
||||||
|
|
||||||
tau = finddelay(y_revised,iir_out);
|
|
||||||
y_revisedPhi = cat(1,zeros(1,tau)',y_revised(1:end-tau,1));
|
|
||||||
|
|
||||||
diff_plot(iir_out, y_revisedPhi,'verdi','matlab',[0 1e4])
|
|
|
@ -1,73 +0,0 @@
|
||||||
%%%20241009,comparing matlab and verilog result
|
|
||||||
clc;clear;close all
|
|
||||||
|
|
||||||
cd('/data/work/thfu/TailCorr/script_m');
|
|
||||||
|
|
||||||
sel_double = 1;
|
|
||||||
|
|
||||||
switch sel_double
|
|
||||||
|
|
||||||
case 0
|
|
||||||
iir_in = int64(importdata("/home/thfu/work/TailCorr/Test/sim/in") -32768);
|
|
||||||
iir_out_x1 = int64(importdata("/home/thfu/work/TailCorr/Test/sim/X1_data.dat") -32768);
|
|
||||||
iir_out_x2 = int64(importdata("/home/thfu/work/TailCorr/Test/sim/X2_data.dat") -32768);
|
|
||||||
iir_out_x4 = int64(importdata("/home/thfu/work/TailCorr/Test/sim/X4_data.dat") -32768);
|
|
||||||
case 1
|
|
||||||
iir_in = double(importdata("/home/thfu/work/TailCorr/Test/sim/in") + 0);
|
|
||||||
iir_out_x1 = double(importdata("/home/thfu/work/TailCorr/Test/sim/X1_data.dat") - 32768);
|
|
||||||
iir_out_x2 = double(importdata("/home/thfu/work/TailCorr/Test/sim/X2_data.dat") - 32768);
|
|
||||||
iir_out_x4 = double(importdata("/home/thfu/work/TailCorr/Test/sim/X4_data.dat") - 32768);
|
|
||||||
|
|
||||||
end
|
|
||||||
% iir_out_x1 = [iir_out_x1' zeros(1,2)]';
|
|
||||||
% iir_out_x2 = [iir_out_x2' zeros(1,3)]';
|
|
||||||
% iir_out_x4 = [iir_out_x4' zeros(1,6)]';
|
|
||||||
|
|
||||||
alpha = [1757225200, 1045400392, 13740916];
|
|
||||||
beta = -[1042856 1046395 1047703];
|
|
||||||
|
|
||||||
|
|
||||||
Ystart = 0;
|
|
||||||
|
|
||||||
y_revised = TailCorr(alpha,beta,iir_in,Ystart,sel_double);
|
|
||||||
|
|
||||||
s = round(y_revised);
|
|
||||||
N = length(s);
|
|
||||||
|
|
||||||
s_r1 = [0 s(1:end-1,1)']';
|
|
||||||
[s2,s2_mean] = MeanIntp(s,s_r1);
|
|
||||||
s2 = floor(s2);
|
|
||||||
s2_mean = floor(s2_mean);
|
|
||||||
|
|
||||||
s2_r1 = [0 s2(1:end-1,1)']';
|
|
||||||
[s4_4,s4_3] = MeanIntp(s2,s2_mean);
|
|
||||||
[s4_2,s4_1] = MeanIntp(s2_mean,s2_r1);
|
|
||||||
s4_1 = floor(s4_1);
|
|
||||||
s4_2 = floor(s4_2);
|
|
||||||
s4_3 = floor(s4_3);
|
|
||||||
s4_4 = floor(s4_4);
|
|
||||||
|
|
||||||
s_intp2 = zeros(2*N,1);
|
|
||||||
s_intp2(1:2:2*N) = s2_mean;
|
|
||||||
s_intp2(2:2:2*N) = s2;
|
|
||||||
|
|
||||||
s_intp4 = zeros(4*N,1);
|
|
||||||
s_intp4(1:4:4*N) = s4_1;
|
|
||||||
s_intp4(2:4:4*N) = s4_2;
|
|
||||||
s_intp4(3:4:4*N) = s4_3;
|
|
||||||
s_intp4(4:4:4*N) = s4_4;
|
|
||||||
%%%
|
|
||||||
tau1 = finddelay(y_revised,iir_out_x1);
|
|
||||||
y_revisedPhi1 = cat(1,zeros(1,tau1)',y_revised(1:end-tau1,1));
|
|
||||||
figure('Units','normalized','Position',[0.000390625,0.517361111111111,0.49921875,0.422916666666667]);
|
|
||||||
diff_plot(iir_out_x1, y_revisedPhi1,'verdi','matlab',[0 2e4])
|
|
||||||
|
|
||||||
tau2 = finddelay(s_intp2,iir_out_x2);
|
|
||||||
y_revisedPhi2 = cat(1,zeros(1,tau2)',s_intp2(1:end-tau2,1));
|
|
||||||
figure('Units','normalized','Position',[0.500390625,0.517361111111111,0.49921875,0.422916666666667]);
|
|
||||||
diff_plot(iir_out_x2, y_revisedPhi2,'verdi','matlab',[0 4e4])
|
|
||||||
|
|
||||||
tau4 = finddelay(s_intp4,iir_out_x4);
|
|
||||||
y_revisedPhi4 = cat(1,zeros(1,tau4)',s_intp4(1:end-tau4,1));
|
|
||||||
figure('Units','normalized','Position',[0.000390625,0.034027777777778,0.49921875,0.422916666666667]);
|
|
||||||
diff_plot(iir_out_x4, y_revisedPhi4,'verdi','matlab',[0 8e4])
|
|
|
@ -6,7 +6,8 @@ Script_out = Script_out(1:N);
|
||||||
n = 0:1:N-1;
|
n = 0:1:N-1;
|
||||||
diff = iir_out-Script_out;
|
diff = iir_out-Script_out;
|
||||||
|
|
||||||
subplot(211)
|
tiledlayout(2,1)
|
||||||
|
ax1 = nexttile;
|
||||||
plot(n,iir_out,n,Script_out)
|
plot(n,iir_out,n,Script_out)
|
||||||
xlabel('n')
|
xlabel('n')
|
||||||
legend(leg1,leg2)
|
legend(leg1,leg2)
|
||||||
|
@ -14,15 +15,20 @@ xlim(a)
|
||||||
title('time domain')
|
title('time domain')
|
||||||
grid on
|
grid on
|
||||||
|
|
||||||
subplot(212)
|
ax2 = nexttile;
|
||||||
plot(n,diff)
|
plot(n,diff)
|
||||||
xlabel('n')
|
xlabel('n')
|
||||||
title('diff')
|
title('diff')
|
||||||
grid on
|
grid on
|
||||||
hold on
|
hold on
|
||||||
xlim(a)
|
xlim(a)
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
|
||||||
[diff_max,R_mpos] = max(abs(diff));
|
[~,R_mpos_max] = max(diff);
|
||||||
plot(n(R_mpos),diff(R_mpos),'r*')
|
[~,R_mpos_min] = min(diff);
|
||||||
text(n(R_mpos), diff(R_mpos), ['(',num2str(n(R_mpos)),',',num2str(diff(R_mpos)),')'],'color','k');
|
|
||||||
% max(abs(diff))
|
plot(n(R_mpos_max),diff(R_mpos_max),'r*')
|
||||||
|
plot(n(R_mpos_min),diff(R_mpos_min),'r*')
|
||||||
|
|
||||||
|
text(n(R_mpos_max), diff(R_mpos_max), ['(',num2str(n(R_mpos_max)),',',num2str(diff(R_mpos_max)),')'],'color','k');
|
||||||
|
text(n(R_mpos_min), diff(R_mpos_min), ['(',num2str(n(R_mpos_min)),',',num2str(diff(R_mpos_min)),')'],'color','k');
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
%%%2024-10-17,verify 8 intp by comparing matlab and verilog
|
|
||||||
clc;clear all;close all;
|
|
||||||
|
|
||||||
in = importdata("/home/thfu/work/TailCorr/sim/in_intp8.dat");
|
|
||||||
intp8_verilog = importdata("/home/thfu/work/TailCorr/sim/out_intp8.dat");
|
|
||||||
|
|
||||||
N = length(in);
|
|
||||||
time = 1:1:N;
|
|
||||||
time8 = 1:1/8:N+1-1/8;
|
|
||||||
intp8_matlab = floor(interp1(time,in,time8,'linear'))';
|
|
||||||
|
|
||||||
%figure
|
|
||||||
%plot(time,in);
|
|
||||||
%hold on
|
|
||||||
%plot(time8,intp8_verilog);
|
|
||||||
%xlim([4500 5500])
|
|
||||||
|
|
||||||
tau8 = finddelay(intp8_matlab(1.8e4:3e4),intp8_verilog(1.8e4:3e4));
|
|
||||||
intp8_matlab_revised = cat(1,zeros(1,tau8)',intp8_matlab(1:end-tau8,1));
|
|
||||||
figure('Units','normalized','Position',[0.000390625,0.517361111111111,0.49921875,0.422916666666667]);
|
|
||||||
diff_plot(intp8_verilog, intp8_matlab_revised,'verdi','matlab',[2e4 2.2e4]);
|
|
|
@ -54,6 +54,15 @@ reg clk;
|
||||||
reg clk_div2;
|
reg clk_div2;
|
||||||
reg clk_div4;
|
reg clk_div4;
|
||||||
|
|
||||||
|
//a_fix is 55007237
|
||||||
|
//a_fix is 32690030
|
||||||
|
//a_fix is 429516
|
||||||
|
//a_fix is 0
|
||||||
|
//b_fix is 2143083068
|
||||||
|
//b_fix is 2145807236
|
||||||
|
//b_fix is 2146812530
|
||||||
|
//b_fix is 2147483648
|
||||||
|
|
||||||
initial
|
initial
|
||||||
begin
|
begin
|
||||||
#0;
|
#0;
|
||||||
|
@ -64,29 +73,33 @@ begin
|
||||||
en = 1'b0;
|
en = 1'b0;
|
||||||
|
|
||||||
din_im = 16'd0;
|
din_im = 16'd0;
|
||||||
a0_re = 32'd1757225200;
|
|
||||||
a0_im = 32'd0;
|
a0_re = 32'd55007237 ;
|
||||||
b0_re = -32'd1042856;
|
a1_re = 32'd32690030 ;
|
||||||
b0_im = 32'd0;
|
a2_re = 32'd429516;
|
||||||
a1_re = 32'd1045400392;
|
|
||||||
a1_im = 32'd0;
|
|
||||||
b1_re = -32'd1046395;
|
|
||||||
b1_im = 32'd0;
|
|
||||||
a2_re = 32'd13740916;
|
|
||||||
a2_im = 32'd0;
|
|
||||||
b2_re = -32'd1047703;
|
|
||||||
b2_im = 32'd0;
|
|
||||||
a3_re = 32'd0;
|
a3_re = 32'd0;
|
||||||
a3_im = 32'd0;
|
|
||||||
b3_re = -32'd0;
|
|
||||||
b3_im = 32'd0;
|
|
||||||
a4_re = 32'd0;
|
a4_re = 32'd0;
|
||||||
a4_im = 32'd0;
|
|
||||||
b4_re = -32'd0;
|
|
||||||
b4_im = 32'd0;
|
|
||||||
a5_re = 32'd0;
|
a5_re = 32'd0;
|
||||||
|
|
||||||
|
a0_im = 32'd0;
|
||||||
|
a1_im = 32'd0;
|
||||||
|
a2_im = 32'd0;
|
||||||
|
a3_im = 32'd0;
|
||||||
|
a4_im = 32'd0;
|
||||||
a5_im = 32'd0;
|
a5_im = 32'd0;
|
||||||
b5_re = -32'd0;
|
|
||||||
|
b0_re = 32'd2143083068;
|
||||||
|
b1_re = 32'd2145807236;
|
||||||
|
b2_re = 32'd2146812530;
|
||||||
|
b3_re = 32'd0;
|
||||||
|
b4_re = 32'd0;
|
||||||
|
b5_re = 32'd0;
|
||||||
|
|
||||||
|
b0_im = 32'd0;
|
||||||
|
b1_im = 32'd0;
|
||||||
|
b2_im = 32'd0;
|
||||||
|
b3_im = 32'd0;
|
||||||
|
b4_im = 32'd0;
|
||||||
b5_im = 32'd0;
|
b5_im = 32'd0;
|
||||||
|
|
||||||
fcw = 48'h0840_0000_0000;
|
fcw = 48'h0840_0000_0000;
|
||||||
|
@ -551,123 +564,22 @@ always@(*)
|
||||||
wire [15:0] diff;
|
wire [15:0] diff;
|
||||||
assign diff = cs_wave1 - cs_wave;
|
assign diff = cs_wave1 - cs_wave;
|
||||||
integer signed In_fid;
|
integer signed In_fid;
|
||||||
integer X1_fid;
|
integer signed OrgOut_fid;
|
||||||
integer X2_fid;
|
|
||||||
integer X4_fid;
|
|
||||||
integer X8_fid;
|
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
#0;
|
#0;
|
||||||
In_fid = $fopen("./in.dat");
|
In_fid = $fopen("./in.dat") ;
|
||||||
case (intp_mode)
|
OrgOut_fid = $fopen("./OrgOut.dat");
|
||||||
2'b00 : X1_fid = $fopen("./X1_data.dat");
|
|
||||||
2'b01 : X2_fid = $fopen("./X2_data.dat");
|
|
||||||
2'b10 : X4_fid = $fopen("./X4_data.dat");
|
|
||||||
2'b11 : X8_fid = $fopen("./X8_data.dat");
|
|
||||||
|
|
||||||
endcase
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
always@(posedge clk_div16_f)
|
always@(posedge clk_div32_f)
|
||||||
if(cnt >= 90)
|
if(cnt >= 90) begin
|
||||||
$fwrite(In_fid,"%d\n",{{{~iir_in[15]}},iir_in[14:0]});
|
$fwrite(In_fid, "%d\n",$signed(TB.inst1_Z_dsp.inst_TailCorr_top.din_re));
|
||||||
|
$fwrite(OrgOut_fid,"%d\n",$signed(TB.inst1_Z_dsp.inst_TailCorr_top.dout ));
|
||||||
|
|
||||||
always@(*)
|
|
||||||
fork
|
|
||||||
case (intp_mode)
|
|
||||||
2'b00 :
|
|
||||||
begin
|
|
||||||
@(posedge clk_div16_e)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X1_fid,"%d\n",{{{dout_p0[15]}},dout_p0[14:0]});
|
|
||||||
end
|
|
||||||
2'b01 :
|
|
||||||
begin
|
|
||||||
@(posedge clk_div16_e)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X2_fid,"%d\n",{{{dout_p0[15]}},dout_p0[14:0]});
|
|
||||||
@(posedge clk_div16_6)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X2_fid,"%d\n",{{{dout_p1[15]}},dout_p1[14:0]});
|
|
||||||
end
|
|
||||||
2'b10 :
|
|
||||||
begin
|
|
||||||
@(posedge clk_div16_e)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X4_fid,"%d\n",{{{dout_p0[15]}},dout_p0[14:0]});
|
|
||||||
@(posedge clk_div16_a)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X4_fid,"%d\n",{{{dout_p1[15]}},dout_p1[14:0]});
|
|
||||||
@(posedge clk_div16_6)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X4_fid,"%d\n",{{{dout_p2[15]}},dout_p2[14:0]});
|
|
||||||
@(posedge clk_div16_2)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X4_fid,"%d\n",{{{dout_p3[15]}},dout_p3[14:0]});
|
|
||||||
end
|
|
||||||
2'b11 :
|
|
||||||
begin
|
|
||||||
@(posedge clk_div32_f)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X8_fid,"%d\n",{{{dout_p0[15]}},dout_p0[14:0]});
|
|
||||||
@(posedge clk_div32_d)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X8_fid,"%d\n",{{{dout_p1[15]}},dout_p1[14:0]});
|
|
||||||
@(posedge clk_div32_b)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X8_fid,"%d\n",{{{dout_p2[15]}},dout_p2[14:0]});
|
|
||||||
@(posedge clk_div32_9)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X8_fid,"%d\n",{{{dout_p3[15]}},dout_p3[14:0]});
|
|
||||||
@(posedge clk_div32_7)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X8_fid,"%d\n",{{{dout_p4[15]}},dout_p4[14:0]});
|
|
||||||
@(posedge clk_div32_5)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X8_fid,"%d\n",{{{dout_p5[15]}},dout_p5[14:0]});
|
|
||||||
@(posedge clk_div32_3)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X8_fid,"%d\n",{{{dout_p6[15]}},dout_p6[14:0]});
|
|
||||||
@(posedge clk_div32_1)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X8_fid,"%d\n",{{{dout_p7[15]}},dout_p7[14:0]});
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
endcase
|
|
||||||
join
|
|
||||||
|
|
||||||
/*
|
|
||||||
always@(posedge clk_div16_e)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(In_fid,"%d\n",{{~{iir_in[15]}},iir_in[14:0]});
|
|
||||||
|
|
||||||
always@(posedge clk_div16_e)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X1_fid,"%d\n",{{~{dout_p3[15]}},dout_p3[14:0]});
|
|
||||||
|
|
||||||
always@(posedge clk_div16_e)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X2_fid,"%d\n",{{~{dout_p1[15]}},dout_p1[14:0]});
|
|
||||||
always@(posedge clk_div16_6)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X2_fid,"%d\n",{{~{dout_p3[15]}},dout_p3[14:0]});
|
|
||||||
|
|
||||||
always@(posedge clk_div16_e)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X4_fid,"%d\n",{{~{dout_p0[15]}},dout_p0[14:0]});
|
|
||||||
always@(posedge clk_div16_a)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X4_fid,"%d\n",{{~{dout_p1[15]}},dout_p1[14:0]});
|
|
||||||
always@(posedge clk_div16_6)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X4_fid,"%d\n",{{~{dout_p2[15]}},dout_p2[14:0]});
|
|
||||||
always@(posedge clk_div16_2)
|
|
||||||
if(cnt >= 90)
|
|
||||||
$fwrite(X4_fid,"%d\n",{{~{dout_p3[15]}},dout_p3[14:0]});
|
|
||||||
*/
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue