| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // synopsys translate_off
- `timescale 1 ps / 1 ps
- // synopsys translate_on
- module fpu32_tb();
- reg reset, clk;
- reg [31:0] input_a, input_b, result_add, result_div, result_mul;
- wire nan, overflow, underflow, zero;
- fpu_add adder(
- .aclr(reset),
- .clock(clk),
- .input_a(input_a),
- .input_b(input_b),
- .result(result_add)
- );
- fpu_div divider(
- .aclr(reset),
- .clock(clk),
- .input_a(input_a),
- .input_b(input_b),
- .result(result_div)
- );
- fpu_mul multipler(
- .aclr(reset),
- .clock(clk),
- .dataa(input_a),
- .datab(input_b),
- .result(result_mul)
- );
- task test_inputs;
- input [31:0] in_a, in_b, expected_add, expected_mul, expected_div;
- input_a = in_a;
- input_b = in_b;
- #10ps;
- // assert(exception_adder == 0);
- // assert(exception_mult == 0);
- // assert(overflow == 0);
- // assert(underflow == 0);
- if(result_add == expected_add)
- $display("PASS: %H + %H = %H", input_a, input_b, expected_add);
- else
- $error("FAIL ADD: a=%H b=%H c=%H, expected c=%H", input_a, input_b, result_add, expected_add);
- if(result_mul == expected_mul)
- $display("PASS: %H * %H = %H", input_a, input_b, expected_mul);
- else
- $error("FAIL MUL: a=%H b=%H c=%H, expected c=%H", input_a, input_b, result_mul, expected_mul);
- if(result_div == expected_div)
- $display("PASS: %H * %H = %H", input_a, input_b, expected_div);
- else
- $error("FAIL DIV: a=%H b=%H c=%H, expected c=%H", input_a, input_b, result_div, expected_div);
- #10ps;
- endtask : test_inputs
- initial forever #15ps clk = ~clk;
- initial begin
- clk = 0;
- reset = 1;
- test_inputs(32'h42480000, 32'hbf800000, 32'h42440000, 32'hc2480000, 32'hc2480000);
- end
- endmodule : fpu32_tb
|