fpu32.sv 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // synopsys translate_off
  2. `timescale 1 ps / 1 ps
  3. // synopsys translate_on
  4. module fpu32_tb();
  5. reg reset, clk;
  6. reg [31:0] input_a, input_b, result_add, result_div, result_mul;
  7. wire nan, overflow, underflow, zero;
  8. fpu_add adder(
  9. .aclr(reset),
  10. .clock(clk),
  11. .input_a(input_a),
  12. .input_b(input_b),
  13. .result(result_add)
  14. );
  15. fpu_div divider(
  16. .aclr(reset),
  17. .clock(clk),
  18. .input_a(input_a),
  19. .input_b(input_b),
  20. .result(result_div)
  21. );
  22. fpu_mul multipler(
  23. .aclr(reset),
  24. .clock(clk),
  25. .dataa(input_a),
  26. .datab(input_b),
  27. .result(result_mul)
  28. );
  29. task test_inputs;
  30. input [31:0] in_a, in_b, expected_add, expected_mul, expected_div;
  31. input_a = in_a;
  32. input_b = in_b;
  33. #10ps;
  34. // assert(exception_adder == 0);
  35. // assert(exception_mult == 0);
  36. // assert(overflow == 0);
  37. // assert(underflow == 0);
  38. if(result_add == expected_add)
  39. $display("PASS: %H + %H = %H", input_a, input_b, expected_add);
  40. else
  41. $error("FAIL ADD: a=%H b=%H c=%H, expected c=%H", input_a, input_b, result_add, expected_add);
  42. if(result_mul == expected_mul)
  43. $display("PASS: %H * %H = %H", input_a, input_b, expected_mul);
  44. else
  45. $error("FAIL MUL: a=%H b=%H c=%H, expected c=%H", input_a, input_b, result_mul, expected_mul);
  46. if(result_div == expected_div)
  47. $display("PASS: %H * %H = %H", input_a, input_b, expected_div);
  48. else
  49. $error("FAIL DIV: a=%H b=%H c=%H, expected c=%H", input_a, input_b, result_div, expected_div);
  50. #10ps;
  51. endtask : test_inputs
  52. initial forever #15ps clk = ~clk;
  53. initial begin
  54. clk = 0;
  55. reset = 1;
  56. test_inputs(32'h42480000, 32'hbf800000, 32'h42440000, 32'hc2480000, 32'hc2480000);
  57. end
  58. endmodule : fpu32_tb