| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- `include "mult32.v"
- module fpu32p_tb;
- reg reset, clk;
- logic [31:0] input_a, input_b, result_add, result_mult;
- logic [31:0] expected_add, expected_mult;
- fp_adder#(.N(32), .M(8)) adder1(
- .clk(clk),
- .reset(reset),
- .input_a(input_a),
- .input_b(input_b),
- .output_z(result_add)
- );
- mult_32 multiplier1(
- .clk(clk),
- .a(input_a),
- .b(input_b),
- .out(result_mult),
- .zero2(),
- .invalid2(),
- .overflow1()
- );
- initial forever #5 clk = ~clk;
- localparam PIPELINES_ADD = 2;
- localparam PIPELINES_MUL = 12;
- 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;
- clk = 0;
- reset = 1;
- #15;
- reset = 0;
- expected_add = 0;
- expected_mult = 0;
- for (int i=0; i < $size(test_mem)+PIPELINES_MUL; i++) begin
- if(i >= PIPELINES_ADD) expected_add = test_mem[i-PIPELINES_ADD][2];
- if(i >= PIPELINES_MUL) expected_mult = test_mem[i-PIPELINES_MUL][3];
- input_a = test_mem[i][0];
- input_b = test_mem[i][1];
- #10;
- if(result_add != expected_add) begin
- if(num_err < 20)
- $display("FAIL ADD: %H + %H = %H, expected %H", test_mem[i-PIPELINES_ADD][0], test_mem[i-PIPELINES_ADD][1], result_add, test_mem[i][2]);
- num_err = num_err + 1;
- end
- if(result_mult != expected_mult) begin
- if(num_err < 20)
- $display("FAIL MULTIPLY: %H x %H = %H, expected %H", test_mem[i-PIPELINES_MUL][0], test_mem[i-PIPELINES_MUL][1], result_mult, test_mem[i][3]);
- num_err = num_err + 1;
- end
- end
- expected_add = 0;
- expected_mult = 0;
- #50;
- $display("Passed %d of %d tests", num_tests-num_err, num_tests);
- $finish();
- end
- endmodule : fpu32p_tb
|