|
|
@@ -230,31 +230,37 @@ module floating_tb;
|
|
|
reg reset, clk;
|
|
|
logic [15:0] input_a, input_b, result_add, result_mult;
|
|
|
logic [4:0] diff;
|
|
|
+ logic [15:0] expected_add, expected_mult;
|
|
|
|
|
|
floating_add adder1(.input_1(input_a), .input_2(input_b), .sum(result_add), .diff(diff), .clk(clk), .reset(reset));
|
|
|
|
|
|
floating_product multiplier1(.input_1(input_a), .input_2(input_b), .product(result_mult), .clk(clk), .reset(reset));
|
|
|
|
|
|
initial forever #5 clk = ~clk;
|
|
|
-
|
|
|
+ localparam PIPELINES = 3;
|
|
|
|
|
|
reg [15:0] test_mem [29:0][3:0];
|
|
|
|
|
|
initial $readmemh("scripts/fp16_test.hex", test_mem);
|
|
|
|
|
|
-
|
|
|
initial begin
|
|
|
static int num_err = 0;
|
|
|
static int num_tests = $size(test_mem) * 2;
|
|
|
+
|
|
|
+ clk = 0;
|
|
|
+ reset = 1;
|
|
|
|
|
|
- clk = 0;
|
|
|
- reset = 1;
|
|
|
-
|
|
|
- #15;
|
|
|
- reset = 0;
|
|
|
-
|
|
|
+ #15;
|
|
|
+ reset = 0;
|
|
|
+
|
|
|
+ expected_add = 0;
|
|
|
+ expected_mult = 0;
|
|
|
|
|
|
- for (int i=0; i < $size(test_mem); i++) begin
|
|
|
+ for (int i=0; i < $size(test_mem)+PIPELINES; i++) begin
|
|
|
+ if(i >= PIPELINES) begin
|
|
|
+ expected_add = test_mem[i-PIPELINES][2];
|
|
|
+ expected_mult = test_mem[i-PIPELINES][3];
|
|
|
+ end
|
|
|
input_a = test_mem[i][0];
|
|
|
input_b = test_mem[i][1];
|
|
|
|
|
|
@@ -271,7 +277,10 @@ module floating_tb;
|
|
|
num_err = num_err + 1;
|
|
|
end
|
|
|
|
|
|
- end
|
|
|
+ end
|
|
|
+ expected_add = 0;
|
|
|
+ expected_mult = 0;
|
|
|
+ #50;
|
|
|
$display("Passed %d of %d tests", num_tests-num_err, num_tests);
|
|
|
$finish();
|
|
|
end
|