163 lines
3.8 KiB
Coq
163 lines
3.8 KiB
Coq
|
|
||
|
`timescale 1 ns/1 ns
|
||
|
|
||
|
module TB();
|
||
|
initial
|
||
|
begin
|
||
|
$fsdbDumpfile("TB.fsdb");
|
||
|
$fsdbDumpvars(0, TB);
|
||
|
$fsdbDumpMDA();
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
reg clk ;
|
||
|
reg en;
|
||
|
reg [5:0] vldi;
|
||
|
reg rst_n;
|
||
|
|
||
|
|
||
|
reg signed [31:0] a_re [5:0];
|
||
|
reg signed [31:0] a_im [5:0];
|
||
|
reg signed [31:0] b_re [5:0];
|
||
|
reg signed [31:0] b_im [5:0];
|
||
|
|
||
|
|
||
|
wire signed [31:0] ao_re [5:0];
|
||
|
wire signed [31:0] ao_im [5:0];
|
||
|
wire signed [31:0] ab_re [5:0];
|
||
|
wire signed [31:0] ab_im [5:0];
|
||
|
wire signed [31:0] abb_re [5:0];
|
||
|
wire signed [31:0] abb_im [5:0];
|
||
|
wire signed [31:0] ab_pow3_re [5:0];
|
||
|
wire signed [31:0] ab_pow3_im [5:0];
|
||
|
wire signed [31:0] ab_pow4_re [5:0];
|
||
|
wire signed [31:0] ab_pow4_im [5:0];
|
||
|
wire signed [31:0] ab_pow5_re [5:0];
|
||
|
wire signed [31:0] ab_pow5_im [5:0];
|
||
|
wire signed [31:0] ab_pow6_re [5:0];
|
||
|
wire signed [31:0] ab_pow6_im [5:0];
|
||
|
wire signed [31:0] ab_pow7_re [5:0];
|
||
|
wire signed [31:0] ab_pow7_im [5:0];
|
||
|
wire signed [31:0] b_pow8_re [5:0];
|
||
|
wire signed [31:0] b_pow8_im [5:0];
|
||
|
|
||
|
|
||
|
parameter CYCLE = 20;
|
||
|
|
||
|
|
||
|
parameter RST_TIME = 3 ;
|
||
|
|
||
|
|
||
|
CoefGen uut(
|
||
|
.clk (clk ),
|
||
|
.rstn (rst_n ),
|
||
|
.vldi (vldi ),
|
||
|
.a_re (a_re ),
|
||
|
.a_im (a_im ),
|
||
|
.b_re (b_re ),
|
||
|
.b_im (b_im ),
|
||
|
.ao_re (ao_re ),
|
||
|
.ao_im (ao_im ),
|
||
|
.ab_re (ab_re ),
|
||
|
.ab_im (ab_im ),
|
||
|
.abb_re (abb_re ),
|
||
|
.abb_im (abb_im ),
|
||
|
.ab_pow3_re (ab_pow3_re ),
|
||
|
.ab_pow3_im (ab_pow3_im ),
|
||
|
.ab_pow4_re (ab_pow4_re ),
|
||
|
.ab_pow4_im (ab_pow4_im ),
|
||
|
.ab_pow5_re (ab_pow5_re ),
|
||
|
.ab_pow5_im (ab_pow5_im ),
|
||
|
.ab_pow6_re (ab_pow6_re ),
|
||
|
.ab_pow6_im (ab_pow6_im ),
|
||
|
.ab_pow7_re (ab_pow7_re ),
|
||
|
.ab_pow7_im (ab_pow7_im ),
|
||
|
.b_pow8_re (b_pow8_re ),
|
||
|
.b_pow8_im (b_pow8_im )
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
initial begin
|
||
|
clk = 0;
|
||
|
forever
|
||
|
#(CYCLE/2)
|
||
|
clk=~clk;
|
||
|
end
|
||
|
reg [15:0] st1;
|
||
|
reg [15:0] st2;
|
||
|
reg [15:0] st3;
|
||
|
reg [15:0] st4;
|
||
|
|
||
|
initial begin
|
||
|
rst_n = 0;
|
||
|
vldi <= 0;
|
||
|
st1 = 100;
|
||
|
st2 = 101;
|
||
|
st3 = 110;
|
||
|
st4 = 111;
|
||
|
repeat(3) @(posedge clk);
|
||
|
vldi[0] <= 1;
|
||
|
rst_n = 1;
|
||
|
a_re[0] <= 55007237;
|
||
|
a_im[0] <= 0;
|
||
|
b_re[0] <= 2143083068;
|
||
|
b_im[0] <= 0;
|
||
|
@(posedge clk);
|
||
|
vldi[0] <= 0;
|
||
|
a_re[0] <= 0;
|
||
|
a_im[0] <= 0;
|
||
|
b_re[0] <= 0;
|
||
|
b_im[0] <= 0;
|
||
|
repeat(8) @(posedge clk);
|
||
|
vldi[1] <= 1;
|
||
|
rst_n = 1;
|
||
|
a_re[1] <= 32690030;
|
||
|
a_im[1] <= 0;
|
||
|
b_re[1] <= 2145807236;
|
||
|
b_im[1] <= 0;
|
||
|
@(posedge clk);
|
||
|
vldi[1] <= 0;
|
||
|
a_re[1] <= 0;
|
||
|
a_im[1] <= 0;
|
||
|
b_re[1] <= 0;
|
||
|
b_im[1] <= 0;
|
||
|
repeat(8) @(posedge clk);
|
||
|
vldi[2] <= 1;
|
||
|
rst_n = 1;
|
||
|
a_re[2] <= 429516;
|
||
|
a_im[2] <= 0;
|
||
|
b_re[2] <= 2146812530;
|
||
|
b_im[2] <= 0;
|
||
|
@(posedge clk);
|
||
|
vldi[2] <= 0;
|
||
|
a_re[2] <= 0;
|
||
|
a_im[2] <= 0;
|
||
|
b_re[2] <= 0;
|
||
|
b_im[2] <= 0;
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
reg [21:0] cnt;
|
||
|
always@(posedge clk or negedge rst_n)
|
||
|
if(!rst_n) begin
|
||
|
cnt <= 22'd0;
|
||
|
end
|
||
|
else begin
|
||
|
cnt <= cnt + 22'd1;
|
||
|
end
|
||
|
|
||
|
initial
|
||
|
begin
|
||
|
wait(cnt[16]==1'b1)
|
||
|
$finish(0);
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
endmodule
|
||
|
|