2025-03-08 11:32:53 +08:00
|
|
|
module TB();
|
|
|
|
//+FHDR--------------------------------------------------------------------------------------------------------
|
|
|
|
// Company:
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
|
|
// File Name : tb_TailCorr_en.v
|
|
|
|
// Department : HFNL
|
|
|
|
// Author : thfu
|
|
|
|
// Author's Tel :
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
|
|
// Relese History
|
|
|
|
// Version Date Author Description
|
|
|
|
// 2025-03-03 thfu
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
|
|
// Keywords :
|
|
|
|
//
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
|
|
// Parameter
|
|
|
|
//
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
|
|
// Purpose :
|
|
|
|
//
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
|
|
// Target Device:
|
|
|
|
// Tool versions:
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
|
|
// Reuse Issues
|
|
|
|
// Reset Strategy:
|
|
|
|
// Clock Domains:
|
|
|
|
// Critical Timing:
|
|
|
|
// Asynchronous I/F:
|
|
|
|
// Synthesizable (y/n):
|
|
|
|
// Other:
|
|
|
|
//-FHDR--------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
reg [1 :0] source_mode;
|
|
|
|
|
|
|
|
initial
|
|
|
|
begin
|
|
|
|
$fsdbDumpfile("TB.fsdb");
|
|
|
|
$fsdbDumpvars(0, TB);
|
|
|
|
$fsdbDumpMDA();
|
|
|
|
// $srandom(417492050);
|
|
|
|
source_mode = 2'd3; //1 for rect;2 for random;3 from matlab
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
reg rstn;
|
|
|
|
reg [31:0] a_re0;
|
|
|
|
reg [31:0] a_im0;
|
2025-03-12 14:36:22 +08:00
|
|
|
reg [31:0] b_re0;
|
|
|
|
reg [31:0] b_im0;
|
2025-03-08 11:32:53 +08:00
|
|
|
reg [31:0] ab_re0;
|
|
|
|
reg [31:0] ab_im0;
|
|
|
|
reg [31:0] abb_re0;
|
|
|
|
reg [31:0] abb_im0;
|
|
|
|
reg [31:0] ab_pow3_re0;
|
|
|
|
reg [31:0] ab_pow3_im0;
|
|
|
|
reg [31:0] ab_pow4_re0;
|
|
|
|
reg [31:0] ab_pow4_im0;
|
|
|
|
reg [31:0] ab_pow5_re0;
|
|
|
|
reg [31:0] ab_pow5_im0;
|
|
|
|
reg [31:0] ab_pow6_re0;
|
|
|
|
reg [31:0] ab_pow6_im0;
|
|
|
|
reg [31:0] ab_pow7_re0;
|
|
|
|
reg [31:0] ab_pow7_im0;
|
|
|
|
reg [31:0] b_pow8_re0;
|
|
|
|
reg [31:0] b_pow8_im0;
|
|
|
|
reg [31:0] a_re1;
|
|
|
|
reg [31:0] a_im1;
|
2025-03-12 14:36:22 +08:00
|
|
|
reg [31:0] b_re1;
|
|
|
|
reg [31:0] b_im1;
|
2025-03-08 11:32:53 +08:00
|
|
|
reg [31:0] ab_re1;
|
|
|
|
reg [31:0] ab_im1;
|
|
|
|
reg [31:0] abb_re1;
|
|
|
|
reg [31:0] abb_im1;
|
|
|
|
reg [31:0] ab_pow3_re1;
|
|
|
|
reg [31:0] ab_pow3_im1;
|
|
|
|
reg [31:0] ab_pow4_re1;
|
|
|
|
reg [31:0] ab_pow4_im1;
|
|
|
|
reg [31:0] ab_pow5_re1;
|
|
|
|
reg [31:0] ab_pow5_im1;
|
|
|
|
reg [31:0] ab_pow6_re1;
|
|
|
|
reg [31:0] ab_pow6_im1;
|
|
|
|
reg [31:0] ab_pow7_re1;
|
|
|
|
reg [31:0] ab_pow7_im1;
|
|
|
|
reg [31:0] b_pow8_re1;
|
|
|
|
reg [31:0] b_pow8_im1;
|
|
|
|
reg [31:0] a_re2;
|
|
|
|
reg [31:0] a_im2;
|
2025-03-12 14:36:22 +08:00
|
|
|
reg [31:0] b_re2;
|
|
|
|
reg [31:0] b_im2;
|
2025-03-08 11:32:53 +08:00
|
|
|
reg [31:0] ab_re2;
|
|
|
|
reg [31:0] ab_im2;
|
|
|
|
reg [31:0] abb_re2;
|
|
|
|
reg [31:0] abb_im2;
|
|
|
|
reg [31:0] ab_pow3_re2;
|
|
|
|
reg [31:0] ab_pow3_im2;
|
|
|
|
reg [31:0] ab_pow4_re2;
|
|
|
|
reg [31:0] ab_pow4_im2;
|
|
|
|
reg [31:0] ab_pow5_re2;
|
|
|
|
reg [31:0] ab_pow5_im2;
|
|
|
|
reg [31:0] ab_pow6_re2;
|
|
|
|
reg [31:0] ab_pow6_im2;
|
|
|
|
reg [31:0] ab_pow7_re2;
|
|
|
|
reg [31:0] ab_pow7_im2;
|
|
|
|
reg [31:0] b_pow8_re2;
|
|
|
|
reg [31:0] b_pow8_im2;
|
|
|
|
reg [31:0] a_re3;
|
|
|
|
reg [31:0] a_im3;
|
2025-03-12 14:36:22 +08:00
|
|
|
reg [31:0] b_re3;
|
|
|
|
reg [31:0] b_im3;
|
2025-03-08 11:32:53 +08:00
|
|
|
reg [31:0] ab_re3;
|
|
|
|
reg [31:0] ab_im3;
|
|
|
|
reg [31:0] abb_re3;
|
|
|
|
reg [31:0] abb_im3;
|
|
|
|
reg [31:0] ab_pow3_re3;
|
|
|
|
reg [31:0] ab_pow3_im3;
|
|
|
|
reg [31:0] ab_pow4_re3;
|
|
|
|
reg [31:0] ab_pow4_im3;
|
|
|
|
reg [31:0] ab_pow5_re3;
|
|
|
|
reg [31:0] ab_pow5_im3;
|
|
|
|
reg [31:0] ab_pow6_re3;
|
|
|
|
reg [31:0] ab_pow6_im3;
|
|
|
|
reg [31:0] ab_pow7_re3;
|
|
|
|
reg [31:0] ab_pow7_im3;
|
|
|
|
reg [31:0] b_pow8_re3;
|
|
|
|
reg [31:0] b_pow8_im3;
|
|
|
|
reg [31:0] a_re4;
|
|
|
|
reg [31:0] a_im4;
|
2025-03-12 14:36:22 +08:00
|
|
|
reg [31:0] b_re4;
|
|
|
|
reg [31:0] b_im4;
|
2025-03-08 11:32:53 +08:00
|
|
|
reg [31:0] ab_re4;
|
|
|
|
reg [31:0] ab_im4;
|
|
|
|
reg [31:0] abb_re4;
|
|
|
|
reg [31:0] abb_im4;
|
|
|
|
reg [31:0] ab_pow3_re4;
|
|
|
|
reg [31:0] ab_pow3_im4;
|
|
|
|
reg [31:0] ab_pow4_re4;
|
|
|
|
reg [31:0] ab_pow4_im4;
|
|
|
|
reg [31:0] ab_pow5_re4;
|
|
|
|
reg [31:0] ab_pow5_im4;
|
|
|
|
reg [31:0] ab_pow6_re4;
|
|
|
|
reg [31:0] ab_pow6_im4;
|
|
|
|
reg [31:0] ab_pow7_re4;
|
|
|
|
reg [31:0] ab_pow7_im4;
|
|
|
|
reg [31:0] b_pow8_re4;
|
|
|
|
reg [31:0] b_pow8_im4;
|
|
|
|
reg [31:0] a_re5;
|
|
|
|
reg [31:0] a_im5;
|
2025-03-12 14:36:22 +08:00
|
|
|
reg [31:0] b_re5;
|
|
|
|
reg [31:0] b_im5;
|
2025-03-08 11:32:53 +08:00
|
|
|
reg [31:0] ab_re5;
|
|
|
|
reg [31:0] ab_im5;
|
|
|
|
reg [31:0] abb_re5;
|
|
|
|
reg [31:0] abb_im5;
|
|
|
|
reg [31:0] ab_pow3_re5;
|
|
|
|
reg [31:0] ab_pow3_im5;
|
|
|
|
reg [31:0] ab_pow4_re5;
|
|
|
|
reg [31:0] ab_pow4_im5;
|
|
|
|
reg [31:0] ab_pow5_re5;
|
|
|
|
reg [31:0] ab_pow5_im5;
|
|
|
|
reg [31:0] ab_pow6_re5;
|
|
|
|
reg [31:0] ab_pow6_im5;
|
|
|
|
reg [31:0] ab_pow7_re5;
|
|
|
|
reg [31:0] ab_pow7_im5;
|
|
|
|
reg [31:0] b_pow8_re5;
|
|
|
|
reg [31:0] b_pow8_im5;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
reg [15:0] din_rect;
|
|
|
|
|
|
|
|
|
|
|
|
reg clk;
|
|
|
|
|
|
|
|
initial
|
|
|
|
begin
|
|
|
|
#0;
|
|
|
|
rstn = 1'b0;
|
|
|
|
clk = 1'b0;
|
|
|
|
|
|
|
|
a_re0 = 32'd55007237;
|
|
|
|
a_re1 = 32'd32690030;
|
|
|
|
a_re2 = 32'd429516;
|
|
|
|
a_re3 = 32'd0;
|
|
|
|
a_re4 = 32'd0;
|
|
|
|
a_re5 = 32'd0;
|
|
|
|
a_im0 = 32'd0;
|
|
|
|
a_im1 = 32'd0;
|
|
|
|
a_im2 = 32'd0;
|
|
|
|
a_im3 = 32'd0;
|
|
|
|
a_im4 = 32'd0;
|
|
|
|
a_im5 = 32'd0;
|
2025-03-12 14:36:22 +08:00
|
|
|
b_re0 = 32'd2143083068;
|
|
|
|
b_re1 = 32'd2145807236;
|
|
|
|
b_re2 = 32'd2146812530;
|
|
|
|
b_re3 = 32'd2147483648;
|
|
|
|
b_re4 = 32'd0;
|
|
|
|
b_re5 = 32'd0;
|
|
|
|
b_im0 = 32'd0;
|
|
|
|
b_im1 = 32'd0;
|
|
|
|
b_im2 = 32'd0;
|
|
|
|
b_im3 = 32'd0;
|
|
|
|
b_im4 = 32'd0;
|
|
|
|
b_im5 = 32'd0;
|
2025-03-08 11:32:53 +08:00
|
|
|
ab_re0 = 32'd54894517;
|
|
|
|
ab_re1 = 32'd32664510;
|
|
|
|
ab_re2 = 32'd429381 ;
|
|
|
|
ab_re3 = 32'd0;
|
|
|
|
ab_re4 = 32'd0;
|
|
|
|
ab_re5 = 32'd0;
|
|
|
|
ab_im0 = 32'd0;
|
|
|
|
ab_im1 = 32'd0;
|
|
|
|
ab_im2 = 32'd0;
|
|
|
|
ab_im3 = 32'd0;
|
|
|
|
ab_im4 = 32'd0;
|
|
|
|
ab_im5 = 32'd0;
|
|
|
|
abb_re0 = 32'd54782028;
|
|
|
|
abb_re1 = 32'd32639011;
|
|
|
|
abb_re2 = 32'd429247 ;
|
|
|
|
abb_re3 = 32'd0;
|
|
|
|
abb_re4 = 32'd0;
|
|
|
|
abb_re5 = 32'd0;
|
|
|
|
abb_im0 = 32'd0;
|
|
|
|
abb_im1 = 32'd0;
|
|
|
|
abb_im2 = 32'd0;
|
|
|
|
abb_im3 = 32'd0;
|
|
|
|
abb_im4 = 32'd0;
|
|
|
|
abb_im5 = 32'd0;
|
|
|
|
ab_pow3_re0 = 32'd54669770;
|
|
|
|
ab_pow3_re1 = 32'd32613532;
|
|
|
|
ab_pow3_re2 = 32'd429113 ;
|
|
|
|
ab_pow3_re3 = 32'd0;
|
|
|
|
ab_pow3_re4 = 32'd0;
|
|
|
|
ab_pow3_re5 = 32'd0;
|
|
|
|
ab_pow3_im0 = 32'd0;
|
|
|
|
ab_pow3_im1 = 32'd0;
|
|
|
|
ab_pow3_im2 = 32'd0;
|
|
|
|
ab_pow3_im3 = 32'd0;
|
|
|
|
ab_pow3_im4 = 32'd0;
|
|
|
|
ab_pow3_im5 = 32'd0;
|
|
|
|
ab_pow4_re0 = 32'd54557742;
|
|
|
|
ab_pow4_re1 = 32'd32588072;
|
|
|
|
ab_pow4_re2 = 32'd428979 ;
|
|
|
|
ab_pow4_re3 = 32'd0;
|
|
|
|
ab_pow4_re4 = 32'd0;
|
|
|
|
ab_pow4_re5 = 32'd0;
|
|
|
|
ab_pow4_im0 = 32'd0;
|
|
|
|
ab_pow4_im1 = 32'd0;
|
|
|
|
ab_pow4_im2 = 32'd0;
|
|
|
|
ab_pow4_im3 = 32'd0;
|
|
|
|
ab_pow4_im4 = 32'd0;
|
|
|
|
ab_pow4_im5 = 32'd0;
|
|
|
|
ab_pow5_re0 = 32'd54445943;
|
|
|
|
ab_pow5_re1 = 32'd32562633;
|
|
|
|
ab_pow5_re2 = 32'd428845 ;
|
|
|
|
ab_pow5_re3 = 32'd0;
|
|
|
|
ab_pow5_re4 = 32'd0;
|
|
|
|
ab_pow5_re5 = 32'd0;
|
|
|
|
ab_pow5_im0 = 32'd0;
|
|
|
|
ab_pow5_im1 = 32'd0;
|
|
|
|
ab_pow5_im2 = 32'd0;
|
|
|
|
ab_pow5_im3 = 32'd0;
|
|
|
|
ab_pow5_im4 = 32'd0;
|
|
|
|
ab_pow5_im5 = 32'd0;
|
|
|
|
ab_pow6_re0 = 32'd54334374;
|
|
|
|
ab_pow6_re1 = 32'd32537213;
|
|
|
|
ab_pow6_re2 = 32'd428711 ;
|
|
|
|
ab_pow6_re3 = 32'd0;
|
|
|
|
ab_pow6_re4 = 32'd0;
|
|
|
|
ab_pow6_re5 = 32'd0;
|
|
|
|
ab_pow6_im0 = 32'd0;
|
|
|
|
ab_pow6_im1 = 32'd0;
|
|
|
|
ab_pow6_im2 = 32'd0;
|
|
|
|
ab_pow6_im3 = 32'd0;
|
|
|
|
ab_pow6_im4 = 32'd0;
|
|
|
|
ab_pow6_im5 = 32'd0;
|
|
|
|
ab_pow7_re0 = 32'd54223033;
|
|
|
|
ab_pow7_re1 = 32'd32511813;
|
|
|
|
ab_pow7_re2 = 32'd428577 ;
|
|
|
|
ab_pow7_re3 = 32'd0;
|
|
|
|
ab_pow7_re4 = 32'd0;
|
|
|
|
ab_pow7_re5 = 32'd0;
|
|
|
|
ab_pow7_im0 = 32'd0;
|
|
|
|
ab_pow7_im1 = 32'd0;
|
|
|
|
ab_pow7_im2 = 32'd0;
|
|
|
|
ab_pow7_im3 = 32'd0;
|
|
|
|
ab_pow7_im4 = 32'd0;
|
|
|
|
ab_pow7_im5 = 32'd0;
|
|
|
|
|
|
|
|
b_pow8_re0 = 32'd2112530470;
|
|
|
|
b_pow8_re1 = 32'd2134108939;
|
|
|
|
b_pow8_re2 = 32'd2142120573;
|
2025-03-12 14:36:22 +08:00
|
|
|
b_pow8_re3 = 32'd2147483648;
|
2025-03-08 11:32:53 +08:00
|
|
|
b_pow8_re4 = 32'd0;
|
|
|
|
b_pow8_re5 = 32'd0;
|
|
|
|
b_pow8_im0 = 32'd0;
|
|
|
|
b_pow8_im1 = 32'd0;
|
|
|
|
b_pow8_im2 = 32'd0;
|
|
|
|
b_pow8_im3 = 32'd0;
|
|
|
|
b_pow8_im4 = 32'd0;
|
|
|
|
b_pow8_im5 = 32'd0;
|
|
|
|
|
|
|
|
din_rect = 16'd0;
|
|
|
|
|
|
|
|
#300;
|
|
|
|
rstn = 1'b1;
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
always #200 clk = ~clk;
|
|
|
|
|
|
|
|
reg [21:0] cnt;
|
|
|
|
always@(posedge clk or negedge rstn)
|
|
|
|
if(!rstn)
|
|
|
|
cnt <= 22'd0;
|
|
|
|
else
|
|
|
|
cnt <= cnt + 22'd1;
|
|
|
|
|
|
|
|
initial
|
|
|
|
begin
|
|
|
|
wait(cnt[16]==1'b1)
|
|
|
|
$finish(0);
|
|
|
|
end
|
|
|
|
|
|
|
|
wire vldi;
|
|
|
|
assign vldi = cnt >= 100 && cnt <=10100;
|
|
|
|
|
|
|
|
reg vldi_r1;
|
|
|
|
always@(posedge clk or negedge rstn)
|
|
|
|
if(!rstn)
|
|
|
|
vldi_r1 <= 1'b0;
|
|
|
|
else
|
|
|
|
begin
|
|
|
|
vldi_r1 <= vldi;
|
|
|
|
end
|
|
|
|
|
|
|
|
always@(posedge clk or negedge rstn)
|
|
|
|
if(!rstn)
|
|
|
|
din_rect <= 22'd0;
|
|
|
|
else if(vldi)
|
|
|
|
begin
|
|
|
|
din_rect <= 16'd30000;
|
|
|
|
end
|
|
|
|
else
|
|
|
|
begin
|
|
|
|
din_rect <= 16'd0;
|
|
|
|
end
|
|
|
|
|
|
|
|
reg signed [15:0] random_in [0:3];
|
|
|
|
|
|
|
|
always @(posedge clk or negedge rstn) begin
|
|
|
|
if (!rstn) begin
|
|
|
|
for (int i = 0; i < 4; i = i + 1) begin
|
|
|
|
random_in[i] <= 16'd0;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
else if (vldi) begin
|
|
|
|
for (int i = 0; i < 4; i = i + 1) begin
|
|
|
|
random_in[i] <= $urandom % 30000;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
else begin
|
|
|
|
for (int i = 0; i < 4; i = i + 1) begin
|
|
|
|
random_in[i] <= 16'd0;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
integer file[3:0];
|
|
|
|
reg [15:0] data[3:0];
|
|
|
|
integer status[3:0];
|
|
|
|
reg [15:0] reg_array[3:0];
|
|
|
|
|
|
|
|
initial begin
|
|
|
|
string filenames[0:3] = {"in0_matlab.dat", "in1_matlab.dat", "in2_matlab.dat", "in3_matlab.dat"};
|
|
|
|
for (int i = 0; i < 4; i = i + 1) begin
|
|
|
|
file[i] = $fopen(filenames[i], "r");
|
|
|
|
if (file[i] == 0) begin
|
|
|
|
$display("Failed to open file: %s", filenames[i]);
|
|
|
|
$finish;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
reg [0:0] vldi_matlab [3:0];
|
|
|
|
always @(posedge clk or negedge rstn) begin
|
|
|
|
if (!rstn) begin
|
|
|
|
for (int i = 0; i < 4; i = i + 1) begin
|
|
|
|
reg_array[i] <= 16'd0;
|
|
|
|
vldi_matlab[i] <= 16'd0;
|
|
|
|
end
|
|
|
|
end else begin
|
|
|
|
for (int i = 0; i < 4; i = i + 1) begin
|
|
|
|
status[i] = $fscanf(file[i], "%d\n", data[i]);
|
|
|
|
vldi_matlab[i] <= 16'd0;
|
|
|
|
if (status[i] == 1 ) begin
|
|
|
|
reg_array[i] <= data[i];
|
|
|
|
vldi_matlab[i] <= 1'b1;
|
|
|
|
end
|
|
|
|
else begin
|
|
|
|
reg_array[i] <= 16'd0;
|
|
|
|
vldi_matlab[i] <= 1'b0;
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
reg signed [15:0] iir_in[3:0];
|
|
|
|
|
|
|
|
always @(*)
|
|
|
|
case(source_mode)
|
|
|
|
2'b01 : begin
|
|
|
|
for (int i = 0; i < 4; i = i + 1) begin
|
|
|
|
iir_in[i] = din_rect;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
2'b10 : begin
|
|
|
|
for (int i = 0; i < 4; i = i + 1) begin
|
|
|
|
iir_in[i] = random_in[i];
|
|
|
|
end
|
|
|
|
end
|
|
|
|
2'b11 : begin
|
|
|
|
for (int i = 0; i < 4; i = i + 1) begin
|
|
|
|
iir_in[i] = reg_array[i];
|
|
|
|
end
|
|
|
|
end
|
|
|
|
endcase
|
|
|
|
|
|
|
|
wire [1:0] intp_mode;
|
|
|
|
assign intp_mode = 2'b10;
|
|
|
|
|
|
|
|
wire [1:0] dac_mode_sel;
|
|
|
|
assign dac_mode_sel = 2'b00;
|
|
|
|
|
|
|
|
wire tc_bypass;
|
|
|
|
wire vldo;
|
2025-03-12 14:36:22 +08:00
|
|
|
wire vldo_ref;
|
2025-03-08 11:32:53 +08:00
|
|
|
|
|
|
|
assign tc_bypass = 1'b0;
|
|
|
|
|
|
|
|
reg en;
|
|
|
|
always @(posedge clk or negedge rstn)begin
|
|
|
|
if(rstn==1'b0)begin
|
|
|
|
en <= 0;
|
|
|
|
end
|
|
|
|
else begin
|
|
|
|
en <= ~en;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
wire signed [15:0] dout_p[7:0];
|
2025-03-12 14:36:22 +08:00
|
|
|
wire signed [15:0] dout_ref_p[7:0];
|
2025-03-08 11:32:53 +08:00
|
|
|
|
|
|
|
|
|
|
|
TailCorr_top inst_TailCorr_top
|
|
|
|
(
|
|
|
|
.clk (clk ),
|
|
|
|
.en (en ),
|
|
|
|
.rstn (rstn ),
|
|
|
|
.vldi (vldi_matlab[0] ),
|
|
|
|
// .dac_mode_sel (dac_mode_sel ),
|
|
|
|
// .intp_mode (intp_mode ),
|
|
|
|
.din0 (iir_in[0]),
|
|
|
|
.din1 (iir_in[1]),
|
|
|
|
.din2 (iir_in[2]),
|
|
|
|
.din3 (iir_in[3]),
|
|
|
|
.a_re0 (a_re0),
|
|
|
|
.a_im0 (a_im0),
|
2025-03-12 14:36:22 +08:00
|
|
|
.b_re0 (b_re0),
|
|
|
|
.b_im0 (b_im0),
|
2025-03-08 11:32:53 +08:00
|
|
|
.ab_re0 (ab_re0),
|
|
|
|
.ab_im0 (ab_im0),
|
|
|
|
.abb_re0 (abb_re0),
|
|
|
|
.abb_im0 (abb_im0),
|
|
|
|
.ab_pow3_re0 (ab_pow3_re0),
|
|
|
|
.ab_pow3_im0 (ab_pow3_im0),
|
|
|
|
.ab_pow4_re0 (ab_pow4_re0),
|
|
|
|
.ab_pow4_im0 (ab_pow4_im0),
|
|
|
|
.ab_pow5_re0 (ab_pow5_re0),
|
|
|
|
.ab_pow5_im0 (ab_pow5_im0),
|
|
|
|
.ab_pow6_re0 (ab_pow6_re0),
|
|
|
|
.ab_pow6_im0 (ab_pow6_im0),
|
|
|
|
.ab_pow7_re0 (ab_pow7_re0),
|
|
|
|
.ab_pow7_im0 (ab_pow7_im0),
|
|
|
|
.b_pow8_re0 (b_pow8_re0),
|
|
|
|
.b_pow8_im0 (b_pow8_im0),
|
|
|
|
.a_re1 (a_re1),
|
|
|
|
.a_im1 (a_im1),
|
2025-03-12 14:36:22 +08:00
|
|
|
.b_re1 (b_re1),
|
|
|
|
.b_im1 (b_im1),
|
2025-03-08 11:32:53 +08:00
|
|
|
.ab_re1 (ab_re1),
|
|
|
|
.ab_im1 (ab_im1),
|
|
|
|
.abb_re1 (abb_re1),
|
|
|
|
.abb_im1 (abb_im1),
|
|
|
|
.ab_pow3_re1 (ab_pow3_re1),
|
|
|
|
.ab_pow3_im1 (ab_pow3_im1),
|
|
|
|
.ab_pow4_re1 (ab_pow4_re1),
|
|
|
|
.ab_pow4_im1 (ab_pow4_im1),
|
|
|
|
.ab_pow5_re1 (ab_pow5_re1),
|
|
|
|
.ab_pow5_im1 (ab_pow5_im1),
|
|
|
|
.ab_pow6_re1 (ab_pow6_re1),
|
|
|
|
.ab_pow6_im1 (ab_pow6_im1),
|
|
|
|
.ab_pow7_re1 (ab_pow7_re1),
|
|
|
|
.ab_pow7_im1 (ab_pow7_im1),
|
|
|
|
.b_pow8_re1 (b_pow8_re1),
|
|
|
|
.b_pow8_im1 (b_pow8_im1),
|
|
|
|
.a_re2 (a_re2),
|
|
|
|
.a_im2 (a_im2),
|
2025-03-12 14:36:22 +08:00
|
|
|
.b_re2 (b_re2),
|
|
|
|
.b_im2 (b_im2),
|
2025-03-08 11:32:53 +08:00
|
|
|
.ab_re2 (ab_re2),
|
|
|
|
.ab_im2 (ab_im2),
|
|
|
|
.abb_re2 (abb_re2),
|
|
|
|
.abb_im2 (abb_im2),
|
|
|
|
.ab_pow3_re2 (ab_pow3_re2),
|
|
|
|
.ab_pow3_im2 (ab_pow3_im2),
|
|
|
|
.ab_pow4_re2 (ab_pow4_re2),
|
|
|
|
.ab_pow4_im2 (ab_pow4_im2),
|
|
|
|
.ab_pow5_re2 (ab_pow5_re2),
|
|
|
|
.ab_pow5_im2 (ab_pow5_im2),
|
|
|
|
.ab_pow6_re2 (ab_pow6_re2),
|
|
|
|
.ab_pow6_im2 (ab_pow6_im2),
|
|
|
|
.ab_pow7_re2 (ab_pow7_re2),
|
|
|
|
.ab_pow7_im2 (ab_pow7_im2),
|
|
|
|
.b_pow8_re2 (b_pow8_re2),
|
|
|
|
.b_pow8_im2 (b_pow8_im2),
|
|
|
|
.a_re3 (a_re3),
|
|
|
|
.a_im3 (a_im3),
|
2025-03-12 14:36:22 +08:00
|
|
|
.b_re3 (b_re3),
|
|
|
|
.b_im3 (b_im3),
|
2025-03-08 11:32:53 +08:00
|
|
|
.ab_re3 (ab_re3),
|
|
|
|
.ab_im3 (ab_im3),
|
|
|
|
.abb_re3 (abb_re3),
|
|
|
|
.abb_im3 (abb_im3),
|
|
|
|
.ab_pow3_re3 (ab_pow3_re3),
|
|
|
|
.ab_pow3_im3 (ab_pow3_im3),
|
|
|
|
.ab_pow4_re3 (ab_pow4_re3),
|
|
|
|
.ab_pow4_im3 (ab_pow4_im3),
|
|
|
|
.ab_pow5_re3 (ab_pow5_re3),
|
|
|
|
.ab_pow5_im3 (ab_pow5_im3),
|
|
|
|
.ab_pow6_re3 (ab_pow6_re3),
|
|
|
|
.ab_pow6_im3 (ab_pow6_im3),
|
|
|
|
.ab_pow7_re3 (ab_pow7_re3),
|
|
|
|
.ab_pow7_im3 (ab_pow7_im3),
|
|
|
|
.b_pow8_re3 (b_pow8_re3),
|
|
|
|
.b_pow8_im3 (b_pow8_im3),
|
|
|
|
.a_re4 (a_re4),
|
|
|
|
.a_im4 (a_im4),
|
2025-03-12 14:36:22 +08:00
|
|
|
.b_re4 (b_re4),
|
|
|
|
.b_im4 (b_im4),
|
2025-03-08 11:32:53 +08:00
|
|
|
.ab_re4 (ab_re4),
|
|
|
|
.ab_im4 (ab_im4),
|
|
|
|
.abb_re4 (abb_re4),
|
|
|
|
.abb_im4 (abb_im4),
|
|
|
|
.ab_pow3_re4 (ab_pow3_re4),
|
|
|
|
.ab_pow3_im4 (ab_pow3_im4),
|
|
|
|
.ab_pow4_re4 (ab_pow4_re4),
|
|
|
|
.ab_pow4_im4 (ab_pow4_im4),
|
|
|
|
.ab_pow5_re4 (ab_pow5_re4),
|
|
|
|
.ab_pow5_im4 (ab_pow5_im4),
|
|
|
|
.ab_pow6_re4 (ab_pow6_re4),
|
|
|
|
.ab_pow6_im4 (ab_pow6_im4),
|
|
|
|
.ab_pow7_re4 (ab_pow7_re4),
|
|
|
|
.ab_pow7_im4 (ab_pow7_im4),
|
|
|
|
.b_pow8_re4 (b_pow8_re4),
|
|
|
|
.b_pow8_im4 (b_pow8_im4),
|
|
|
|
.a_re5 (a_re5),
|
|
|
|
.a_im5 (a_im5),
|
2025-03-12 14:36:22 +08:00
|
|
|
.b_re5 (b_re5),
|
|
|
|
.b_im5 (b_im5),
|
2025-03-08 11:32:53 +08:00
|
|
|
.ab_re5 (ab_re5),
|
|
|
|
.ab_im5 (ab_im5),
|
|
|
|
.abb_re5 (abb_re5),
|
|
|
|
.abb_im5 (abb_im5),
|
|
|
|
.ab_pow3_re5 (ab_pow3_re5),
|
|
|
|
.ab_pow3_im5 (ab_pow3_im5),
|
|
|
|
.ab_pow4_re5 (ab_pow4_re5),
|
|
|
|
.ab_pow4_im5 (ab_pow4_im5),
|
|
|
|
.ab_pow5_re5 (ab_pow5_re5),
|
|
|
|
.ab_pow5_im5 (ab_pow5_im5),
|
|
|
|
.ab_pow6_re5 (ab_pow6_re5),
|
|
|
|
.ab_pow6_im5 (ab_pow6_im5),
|
|
|
|
.ab_pow7_re5 (ab_pow7_re5),
|
|
|
|
.ab_pow7_im5 (ab_pow7_im5),
|
|
|
|
.b_pow8_re5 (b_pow8_re5),
|
|
|
|
.b_pow8_im5 (b_pow8_im5),
|
|
|
|
.dout_p0 (dout_p[0] ),
|
|
|
|
.dout_p1 (dout_p[1] ),
|
|
|
|
.dout_p2 (dout_p[2] ),
|
|
|
|
.dout_p3 (dout_p[3] ),
|
|
|
|
.dout_p4 (dout_p[4] ),
|
|
|
|
.dout_p5 (dout_p[5] ),
|
|
|
|
.dout_p6 (dout_p[6] ),
|
|
|
|
.dout_p7 (dout_p[7] ),
|
|
|
|
|
|
|
|
.vldo (vldo )
|
|
|
|
|
|
|
|
);
|
|
|
|
|
2025-03-12 14:36:22 +08:00
|
|
|
TailCorr_top_ref refm_TailCorr_top
|
|
|
|
(
|
|
|
|
.clk (clk ),
|
|
|
|
.en (en ),
|
|
|
|
.rstn (rstn ),
|
|
|
|
.vldi (vldi_matlab[0] ),
|
|
|
|
// .dac_mode_sel (dac_mode_sel ),
|
|
|
|
// .intp_mode (intp_mode ),
|
|
|
|
.din0 (iir_in[0]),
|
|
|
|
.din1 (iir_in[1]),
|
|
|
|
.din2 (iir_in[2]),
|
|
|
|
.din3 (iir_in[3]),
|
|
|
|
.a_re0 (a_re0),
|
|
|
|
.a_im0 (a_im0),
|
|
|
|
//.b_re0 (b_re0),
|
|
|
|
//.b_im0 (b_im0),
|
|
|
|
.ab_re0 (ab_re0),
|
|
|
|
.ab_im0 (ab_im0),
|
|
|
|
.abb_re0 (abb_re0),
|
|
|
|
.abb_im0 (abb_im0),
|
|
|
|
.ab_pow3_re0 (ab_pow3_re0),
|
|
|
|
.ab_pow3_im0 (ab_pow3_im0),
|
|
|
|
.ab_pow4_re0 (ab_pow4_re0),
|
|
|
|
.ab_pow4_im0 (ab_pow4_im0),
|
|
|
|
.ab_pow5_re0 (ab_pow5_re0),
|
|
|
|
.ab_pow5_im0 (ab_pow5_im0),
|
|
|
|
.ab_pow6_re0 (ab_pow6_re0),
|
|
|
|
.ab_pow6_im0 (ab_pow6_im0),
|
|
|
|
.ab_pow7_re0 (ab_pow7_re0),
|
|
|
|
.ab_pow7_im0 (ab_pow7_im0),
|
|
|
|
.b_pow8_re0 (b_pow8_re0),
|
|
|
|
.b_pow8_im0 (b_pow8_im0),
|
|
|
|
.a_re1 (a_re1),
|
|
|
|
.a_im1 (a_im1),
|
|
|
|
//.b_re1 (b_re1),
|
|
|
|
//.b_im1 (b_im1),
|
|
|
|
.ab_re1 (ab_re1),
|
|
|
|
.ab_im1 (ab_im1),
|
|
|
|
.abb_re1 (abb_re1),
|
|
|
|
.abb_im1 (abb_im1),
|
|
|
|
.ab_pow3_re1 (ab_pow3_re1),
|
|
|
|
.ab_pow3_im1 (ab_pow3_im1),
|
|
|
|
.ab_pow4_re1 (ab_pow4_re1),
|
|
|
|
.ab_pow4_im1 (ab_pow4_im1),
|
|
|
|
.ab_pow5_re1 (ab_pow5_re1),
|
|
|
|
.ab_pow5_im1 (ab_pow5_im1),
|
|
|
|
.ab_pow6_re1 (ab_pow6_re1),
|
|
|
|
.ab_pow6_im1 (ab_pow6_im1),
|
|
|
|
.ab_pow7_re1 (ab_pow7_re1),
|
|
|
|
.ab_pow7_im1 (ab_pow7_im1),
|
|
|
|
.b_pow8_re1 (b_pow8_re1),
|
|
|
|
.b_pow8_im1 (b_pow8_im1),
|
|
|
|
.a_re2 (a_re2),
|
|
|
|
.a_im2 (a_im2),
|
|
|
|
//.b_re2 (b_re2),
|
|
|
|
//.b_im2 (b_im2),
|
|
|
|
.ab_re2 (ab_re2),
|
|
|
|
.ab_im2 (ab_im2),
|
|
|
|
.abb_re2 (abb_re2),
|
|
|
|
.abb_im2 (abb_im2),
|
|
|
|
.ab_pow3_re2 (ab_pow3_re2),
|
|
|
|
.ab_pow3_im2 (ab_pow3_im2),
|
|
|
|
.ab_pow4_re2 (ab_pow4_re2),
|
|
|
|
.ab_pow4_im2 (ab_pow4_im2),
|
|
|
|
.ab_pow5_re2 (ab_pow5_re2),
|
|
|
|
.ab_pow5_im2 (ab_pow5_im2),
|
|
|
|
.ab_pow6_re2 (ab_pow6_re2),
|
|
|
|
.ab_pow6_im2 (ab_pow6_im2),
|
|
|
|
.ab_pow7_re2 (ab_pow7_re2),
|
|
|
|
.ab_pow7_im2 (ab_pow7_im2),
|
|
|
|
.b_pow8_re2 (b_pow8_re2),
|
|
|
|
.b_pow8_im2 (b_pow8_im2),
|
|
|
|
.a_re3 (a_re3),
|
|
|
|
.a_im3 (a_im3),
|
|
|
|
//.b_re3 (b_re3),
|
|
|
|
//.b_im3 (b_im3),
|
|
|
|
.ab_re3 (ab_re3),
|
|
|
|
.ab_im3 (ab_im3),
|
|
|
|
.abb_re3 (abb_re3),
|
|
|
|
.abb_im3 (abb_im3),
|
|
|
|
.ab_pow3_re3 (ab_pow3_re3),
|
|
|
|
.ab_pow3_im3 (ab_pow3_im3),
|
|
|
|
.ab_pow4_re3 (ab_pow4_re3),
|
|
|
|
.ab_pow4_im3 (ab_pow4_im3),
|
|
|
|
.ab_pow5_re3 (ab_pow5_re3),
|
|
|
|
.ab_pow5_im3 (ab_pow5_im3),
|
|
|
|
.ab_pow6_re3 (ab_pow6_re3),
|
|
|
|
.ab_pow6_im3 (ab_pow6_im3),
|
|
|
|
.ab_pow7_re3 (ab_pow7_re3),
|
|
|
|
.ab_pow7_im3 (ab_pow7_im3),
|
|
|
|
.b_pow8_re3 (b_pow8_re3),
|
|
|
|
.b_pow8_im3 (b_pow8_im3),
|
|
|
|
.a_re4 (a_re4),
|
|
|
|
.a_im4 (a_im4),
|
|
|
|
//.b_re4 (b_re4),
|
|
|
|
//.b_im4 (b_im4),
|
|
|
|
.ab_re4 (ab_re4),
|
|
|
|
.ab_im4 (ab_im4),
|
|
|
|
.abb_re4 (abb_re4),
|
|
|
|
.abb_im4 (abb_im4),
|
|
|
|
.ab_pow3_re4 (ab_pow3_re4),
|
|
|
|
.ab_pow3_im4 (ab_pow3_im4),
|
|
|
|
.ab_pow4_re4 (ab_pow4_re4),
|
|
|
|
.ab_pow4_im4 (ab_pow4_im4),
|
|
|
|
.ab_pow5_re4 (ab_pow5_re4),
|
|
|
|
.ab_pow5_im4 (ab_pow5_im4),
|
|
|
|
.ab_pow6_re4 (ab_pow6_re4),
|
|
|
|
.ab_pow6_im4 (ab_pow6_im4),
|
|
|
|
.ab_pow7_re4 (ab_pow7_re4),
|
|
|
|
.ab_pow7_im4 (ab_pow7_im4),
|
|
|
|
.b_pow8_re4 (b_pow8_re4),
|
|
|
|
.b_pow8_im4 (b_pow8_im4),
|
|
|
|
.a_re5 (a_re5),
|
|
|
|
.a_im5 (a_im5),
|
|
|
|
//.b_re5 (b_re5),
|
|
|
|
//.b_im5 (b_im5),
|
|
|
|
.ab_re5 (ab_re5),
|
|
|
|
.ab_im5 (ab_im5),
|
|
|
|
.abb_re5 (abb_re5),
|
|
|
|
.abb_im5 (abb_im5),
|
|
|
|
.ab_pow3_re5 (ab_pow3_re5),
|
|
|
|
.ab_pow3_im5 (ab_pow3_im5),
|
|
|
|
.ab_pow4_re5 (ab_pow4_re5),
|
|
|
|
.ab_pow4_im5 (ab_pow4_im5),
|
|
|
|
.ab_pow5_re5 (ab_pow5_re5),
|
|
|
|
.ab_pow5_im5 (ab_pow5_im5),
|
|
|
|
.ab_pow6_re5 (ab_pow6_re5),
|
|
|
|
.ab_pow6_im5 (ab_pow6_im5),
|
|
|
|
.ab_pow7_re5 (ab_pow7_re5),
|
|
|
|
.ab_pow7_im5 (ab_pow7_im5),
|
|
|
|
.b_pow8_re5 (b_pow8_re5),
|
|
|
|
.b_pow8_im5 (b_pow8_im5),
|
|
|
|
.dout_p0 (dout_ref_p[0] ),
|
|
|
|
.dout_p1 (dout_ref_p[1] ),
|
|
|
|
.dout_p2 (dout_ref_p[2] ),
|
|
|
|
.dout_p3 (dout_ref_p[3] ),
|
|
|
|
.dout_p4 (dout_ref_p[4] ),
|
|
|
|
.dout_p5 (dout_ref_p[5] ),
|
|
|
|
.dout_p6 (dout_ref_p[6] ),
|
|
|
|
.dout_p7 (dout_ref_p[7] ),
|
|
|
|
|
|
|
|
.vldo (vldo_ref )
|
|
|
|
|
|
|
|
);
|
|
|
|
|
2025-03-08 11:32:53 +08:00
|
|
|
|
|
|
|
integer signed In_fid[0:3];
|
|
|
|
integer signed dout_fid[0:7];
|
|
|
|
string filenames_in[0:3] = {"in0.dat", "in1.dat", "in2.dat", "in3.dat"};
|
|
|
|
string filenames_dout[0:7] = {"dout0.dat", "dout1.dat", "dout2.dat", "dout3.dat", "dout4.dat", "dout5.dat", "dout6.dat", "dout7.dat"};
|
|
|
|
|
|
|
|
initial begin
|
|
|
|
#0;
|
|
|
|
for (int i = 0; i < 4; i = i + 1) begin
|
|
|
|
In_fid[i] = $fopen(filenames_in[i]);
|
|
|
|
end
|
|
|
|
for (int i = 0; i < 8; i = i + 1) begin
|
|
|
|
dout_fid[i] = $fopen(filenames_dout[i]);
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
always @(posedge clk) begin
|
|
|
|
if (cnt >= 90) begin
|
|
|
|
for (int i = 0; i < 4; i = i + 1) begin
|
|
|
|
$fwrite(In_fid[i], "%d\n", $signed(iir_in[i]));
|
|
|
|
end
|
|
|
|
// for (int i = 0; i < 8; i = i + 1) begin
|
|
|
|
// $fclose(In_fid[i]);
|
|
|
|
// end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
always @(posedge clk) begin
|
|
|
|
if (vldo && en) begin
|
|
|
|
for (int i = 0; i < 8; i = i + 1) begin
|
|
|
|
$fwrite(dout_fid[i], "%d\n", $signed(dout_p[i]));
|
|
|
|
end
|
|
|
|
// for (int i = 0; i < 8; i = i + 1) begin
|
|
|
|
// $fclose(dout_fid[i]);
|
|
|
|
// end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
endmodule
|
|
|
|
|