|
|
@@ -20,8 +20,8 @@ module cadder#(parameter N=32)(clk, rst, x, x_ack, x_stb, y, y_ack, y_stb);
|
|
|
output y_stb;
|
|
|
|
|
|
wire left_ack, left_stb;
|
|
|
- assign x_ack[0] = left_ack;
|
|
|
- assign x_ack[1] = left_ack;
|
|
|
+ assign x_ack[0] = left_stb & left_ack;
|
|
|
+ assign x_ack[1] = left_stb & left_ack;
|
|
|
assign left_stb = x_stb[0] & x_stb[1];
|
|
|
|
|
|
adder add0 (
|
|
|
@@ -134,7 +134,7 @@ endmodule : adder_casc
|
|
|
module adder_casc_tb();
|
|
|
logic clk, rst;
|
|
|
|
|
|
- localparam K=4;
|
|
|
+ localparam K=2;
|
|
|
logic [31:0] x [2**K-1:0];
|
|
|
logic [31:0] y;
|
|
|
logic ack [2**K-1:0];
|
|
|
@@ -162,23 +162,15 @@ module adder_casc_tb();
|
|
|
|
|
|
foreach(stb[i]) stb[i] = 0;
|
|
|
output_io.ack = 0;
|
|
|
- #20
|
|
|
- rst = 0;
|
|
|
// Initialise with floating point 2**i
|
|
|
- foreach(x[i]) x[i] = ('h400 + (i*8)) << 20;
|
|
|
- foreach(stb[i]) stb[i] = 1;
|
|
|
+ // foreach(x[i]) x[i] = ('h400 + (i*8)) << 20;
|
|
|
+ x = {'h41ea6000, 'h42ea6000, 'h411ba000, 'h413cc000};
|
|
|
|
|
|
- fork
|
|
|
- foreach(ack[i]) begin
|
|
|
- fork
|
|
|
- wait(ack[i] == 1);
|
|
|
- #20
|
|
|
- stb[i] = 0;
|
|
|
- join
|
|
|
- end
|
|
|
- join
|
|
|
- #20
|
|
|
-
|
|
|
+ #10;
|
|
|
+ rst = 0;
|
|
|
+ foreach(stb[i]) stb[i] = 1;
|
|
|
+ #20;
|
|
|
+ foreach(stb[i]) stb[i] = 0;
|
|
|
wait(output_io.stb == 1);
|
|
|
output_io.ack = 1;
|
|
|
assert(y[0] == 'h47ffff00);
|