2024-10-08 11:23:42 +08:00
|
|
|
module TB();
|
|
|
|
|
|
|
|
initial
|
|
|
|
begin
|
|
|
|
$fsdbDumpfile("TB.fsdb");
|
|
|
|
$fsdbDumpvars(0, TB);
|
|
|
|
end
|
|
|
|
|
2024-10-17 17:29:11 +08:00
|
|
|
reg clk;
|
|
|
|
reg rstn;
|
|
|
|
reg en;
|
|
|
|
reg [21:0] cnt;
|
2024-10-08 11:23:42 +08:00
|
|
|
|
|
|
|
|
2024-10-17 17:29:11 +08:00
|
|
|
initial begin
|
2024-10-08 11:23:42 +08:00
|
|
|
|
2024-10-17 17:29:11 +08:00
|
|
|
#0;
|
|
|
|
rstn = 1'b0;
|
|
|
|
clk = 1'b0;
|
|
|
|
en = 1'b0;
|
|
|
|
#300;
|
|
|
|
rstn = 1'b1;
|
2024-10-08 11:23:42 +08:00
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
always #200 clk = ~clk;
|
|
|
|
|
2024-10-17 17:29:11 +08:00
|
|
|
wire clk_div16_0;
|
|
|
|
wire clk_div16_1;
|
|
|
|
wire clk_div16_2;
|
|
|
|
wire clk_div16_3;
|
|
|
|
wire clk_div16_4;
|
|
|
|
wire clk_div16_5;
|
|
|
|
wire clk_div16_6;
|
|
|
|
wire clk_div16_7;
|
|
|
|
wire clk_div16_8;
|
|
|
|
wire clk_div16_9;
|
|
|
|
wire clk_div16_a;
|
|
|
|
wire clk_div16_b;
|
|
|
|
wire clk_div16_c;
|
|
|
|
wire clk_div16_d;
|
|
|
|
wire clk_div16_e;
|
|
|
|
wire clk_div16_f;
|
2024-10-08 11:23:42 +08:00
|
|
|
|
|
|
|
|
|
|
|
clk_gen inst_clk_gen(
|
2024-10-17 17:29:11 +08:00
|
|
|
.rstn (rstn ),
|
|
|
|
.clk (clk ),
|
|
|
|
.clk_div16_0 (clk_div16_0 ),
|
|
|
|
.clk_div16_1 (clk_div16_1 ),
|
|
|
|
.clk_div16_2 (clk_div16_2 ),
|
|
|
|
.clk_div16_3 (clk_div16_3 ),
|
|
|
|
.clk_div16_4 (clk_div16_4 ),
|
|
|
|
.clk_div16_5 (clk_div16_5 ),
|
|
|
|
.clk_div16_6 (clk_div16_6 ),
|
|
|
|
.clk_div16_7 (clk_div16_7 ),
|
|
|
|
.clk_div16_8 (clk_div16_8 ),
|
|
|
|
.clk_div16_9 (clk_div16_9 ),
|
|
|
|
.clk_div16_a (clk_div16_a ),
|
|
|
|
.clk_div16_b (clk_div16_b ),
|
|
|
|
.clk_div16_c (clk_div16_c ),
|
|
|
|
.clk_div16_d (clk_div16_d ),
|
|
|
|
.clk_div16_e (clk_div16_e ),
|
|
|
|
.clk_div16_f (clk_div16_f ),
|
2024-10-08 11:23:42 +08:00
|
|
|
.clk_h (clk_h ),
|
|
|
|
.clk_l (clk_l )
|
2024-10-17 17:29:11 +08:00
|
|
|
);
|
2024-10-08 11:23:42 +08:00
|
|
|
|
|
|
|
always@(posedge clk_div16_f or negedge rstn)
|
2024-10-17 17:29:11 +08:00
|
|
|
if(!rstn)
|
|
|
|
cnt <= 22'd0;
|
|
|
|
else
|
|
|
|
cnt <= cnt + 22'd1;
|
2024-10-08 11:23:42 +08:00
|
|
|
|
|
|
|
|
2024-10-17 17:29:11 +08:00
|
|
|
initial begin
|
|
|
|
wait(cnt[17]==1'b1)
|
|
|
|
$finish(0);
|
2024-10-08 11:23:42 +08:00
|
|
|
end
|
|
|
|
always@(posedge clk_div16_f or negedge rstn)
|
|
|
|
begin
|
2024-10-17 17:29:11 +08:00
|
|
|
if(cnt >= 2047 )
|
|
|
|
begin
|
|
|
|
en <= 1'b1;
|
|
|
|
end
|
|
|
|
else
|
|
|
|
begin
|
|
|
|
en <= 1'b0;
|
|
|
|
end
|
2024-10-08 11:23:42 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
|
2024-10-17 17:29:11 +08:00
|
|
|
reg [47:0] fcw;
|
2024-10-08 11:23:42 +08:00
|
|
|
|
2024-10-17 17:29:11 +08:00
|
|
|
initial begin
|
|
|
|
fcw = 48'h0840_0000_0000;
|
2024-10-08 11:23:42 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
wire [15:0] cos;
|
|
|
|
wire [15:0] sin;
|
|
|
|
|
|
|
|
|
2024-10-17 17:29:11 +08:00
|
|
|
NCO inst_nco_0(
|
|
|
|
.clk (clk_div16_f ),
|
|
|
|
.rstn (rstn ),
|
|
|
|
.phase_manual_clr (1'b0 ),
|
|
|
|
.phase_auto_clr (1'b0 ),
|
|
|
|
.fcw (fcw ),
|
|
|
|
.pha (16'd0 ),
|
|
|
|
.cos (cos ),
|
|
|
|
.sin (sin )
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
wire [15:0] dout_p0;
|
|
|
|
wire [15:0] dout_p1;
|
|
|
|
wire [15:0] dout_p2;
|
|
|
|
wire [15:0] dout_p3;
|
|
|
|
wire [15:0] dout_p4;
|
|
|
|
wire [15:0] dout_p5;
|
|
|
|
wire [15:0] dout_p6;
|
|
|
|
wire [15:0] dout_p7;
|
|
|
|
|
|
|
|
|
|
|
|
wire [1:0] intp_mode;
|
|
|
|
assign intp_mode = 2'b11;
|
|
|
|
|
|
|
|
MeanIntp_8 inst_MeanIntp8
|
|
|
|
(
|
|
|
|
.clk (clk_div16_f ),
|
|
|
|
.rstn (rstn ),
|
|
|
|
.en (en ),
|
|
|
|
.intp_mode (intp_mode ),
|
|
|
|
.din (cos & {16{en}} ),
|
|
|
|
.dout_0 (dout_p0 ),
|
|
|
|
.dout_1 (dout_p1 ),
|
|
|
|
.dout_2 (dout_p2 ),
|
|
|
|
.dout_3 (dout_p3 ),
|
|
|
|
.dout_4 (dout_p4 ),
|
|
|
|
.dout_5 (dout_p5 ),
|
|
|
|
.dout_6 (dout_p6 ),
|
|
|
|
.dout_7 (dout_p7 )
|
2024-10-08 11:23:42 +08:00
|
|
|
|
|
|
|
);
|
2024-10-17 17:29:11 +08:00
|
|
|
integer signed In_fid;
|
|
|
|
integer X8_fid;
|
2024-10-08 11:23:42 +08:00
|
|
|
|
2024-10-17 17:29:11 +08:00
|
|
|
initial begin
|
|
|
|
#0
|
|
|
|
|
|
|
|
In_fid = $fopen("./in_intp8.dat");
|
|
|
|
X8_fid = $fopen("./out_intp8.dat");
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
always@(posedge clk_div16_f)
|
|
|
|
if(cnt >= 90)
|
|
|
|
$fwrite(In_fid,"%d\n",{{{~cos[15]}},cos[14:0]});
|
|
|
|
|
|
|
|
reg [15:0] cs_wave;
|
2024-10-08 11:23:42 +08:00
|
|
|
|
|
|
|
always@(*)
|
|
|
|
fork
|
2024-10-17 17:29:11 +08:00
|
|
|
// begin
|
|
|
|
@(posedge clk_div16_e) cs_wave = dout_p0;
|
|
|
|
@(posedge clk_div16_c) cs_wave = dout_p1;
|
|
|
|
@(posedge clk_div16_a) cs_wave = dout_p2;
|
|
|
|
@(posedge clk_div16_8) cs_wave = dout_p3;
|
|
|
|
@(posedge clk_div16_6) cs_wave = dout_p4;
|
|
|
|
@(posedge clk_div16_4) cs_wave = dout_p5;
|
|
|
|
@(posedge clk_div16_2) cs_wave = dout_p6;
|
|
|
|
@(posedge clk_div16_0) cs_wave = dout_p7;
|
2024-10-08 11:23:42 +08:00
|
|
|
|
|
|
|
// end
|
|
|
|
join
|
|
|
|
|
2024-10-17 17:29:11 +08:00
|
|
|
always@(*)
|
|
|
|
fork
|
|
|
|
|
|
|
|
@(posedge clk_div16_e)
|
|
|
|
if(cnt >= 90)
|
|
|
|
$fwrite(X8_fid,"%d\n",{{{~dout_p0[15]}},dout_p0[14:0]});
|
|
|
|
@(posedge clk_div16_c)
|
|
|
|
if(cnt >= 90)
|
|
|
|
$fwrite(X8_fid,"%d\n",{{{~dout_p1[15]}},dout_p1[14:0]});
|
|
|
|
@(posedge clk_div16_a)
|
|
|
|
if(cnt >= 90)
|
|
|
|
$fwrite(X8_fid,"%d\n",{{{~dout_p2[15]}},dout_p2[14:0]});
|
|
|
|
@(posedge clk_div16_8)
|
|
|
|
if(cnt >= 90)
|
|
|
|
$fwrite(X8_fid,"%d\n",{{{~dout_p3[15]}},dout_p3[14:0]});
|
|
|
|
@(posedge clk_div16_6)
|
|
|
|
if(cnt >= 90)
|
|
|
|
$fwrite(X8_fid,"%d\n",{{{~dout_p4[15]}},dout_p4[14:0]});
|
|
|
|
@(posedge clk_div16_4)
|
|
|
|
if(cnt >= 90)
|
|
|
|
$fwrite(X8_fid,"%d\n",{{{~dout_p5[15]}},dout_p5[14:0]});
|
|
|
|
@(posedge clk_div16_2)
|
|
|
|
if(cnt >= 90)
|
|
|
|
$fwrite(X8_fid,"%d\n",{{{~dout_p6[15]}},dout_p6[14:0]});
|
|
|
|
@(posedge clk_div16_0)
|
|
|
|
if(cnt >= 90)
|
|
|
|
$fwrite(X8_fid,"%d\n",{{{~dout_p7[15]}},dout_p7[14:0]});
|
|
|
|
join
|
|
|
|
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
|
2024-10-08 11:23:42 +08:00
|
|
|
|