|
|
@@ -150,7 +150,7 @@ endmodule : floating_product
|
|
|
|
|
|
|
|
|
|
|
|
-module pipe #(parameter N=16)pipe(clk, reset, Q, D);
|
|
|
+module pipe #(parameter N=16)(clk, reset, Q, D);
|
|
|
input logic clk, reset;
|
|
|
input logic [N-1:0] D;
|
|
|
output reg [N-1:0] Q;
|
|
|
@@ -211,4 +211,49 @@ module floating_tb;
|
|
|
$display("Passed %d of %d tests", num_tests-num_err, num_tests);
|
|
|
$finish();
|
|
|
end
|
|
|
-endmodule : floating_tb
|
|
|
+endmodule : floating_tb
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+module floating32_tb;
|
|
|
+ reg reset, clk;
|
|
|
+ logic [31:0] input_a, input_b, result_add, result_mult;
|
|
|
+
|
|
|
+ floating_add#(.N(32), .M(8)) add0(
|
|
|
+ .input_1(input_a), .input_2(input_b), .sum(result_add), .diff()
|
|
|
+ );
|
|
|
+ floating_product#(.N(32), .M(8)) mult0(
|
|
|
+ .input_1(input_a), .input_2(input_b), .product(result_mult)
|
|
|
+ );
|
|
|
+
|
|
|
+ reg [31:0] test_mem [29:0][3:0];
|
|
|
+
|
|
|
+ initial $readmemh("scripts/fp32_test.hex", test_mem);
|
|
|
+
|
|
|
+
|
|
|
+ initial begin
|
|
|
+ static int num_err = 0;
|
|
|
+ static int num_tests = $size(test_mem) * 2;
|
|
|
+
|
|
|
+ for (int i=0; i < $size(test_mem); i++) begin
|
|
|
+ input_a = test_mem[i][0];
|
|
|
+ input_b = test_mem[i][1];
|
|
|
+
|
|
|
+ #10;
|
|
|
+ if(result_add != test_mem[i][2]) begin
|
|
|
+ if(num_err < 20)
|
|
|
+ $display("FAIL ADD: %H + %H = %H, expected %H", input_a, input_b, result_add, test_mem[i][2]);
|
|
|
+ num_err = num_err + 1;
|
|
|
+ end
|
|
|
+
|
|
|
+ if(result_mult != test_mem[i][3]) begin
|
|
|
+ if(num_err < 20)
|
|
|
+ $display("FAIL MULTIPLY: %H + %H = %H, expected %H", input_a, input_b, result_mult, test_mem[i][3]);
|
|
|
+ num_err = num_err + 1;
|
|
|
+ end
|
|
|
+
|
|
|
+ end
|
|
|
+ $display("Passed %d of %d tests", num_tests-num_err, num_tests);
|
|
|
+ $finish();
|
|
|
+ end
|
|
|
+endmodule : floating32_tb
|