Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. `timescale 1ns / 1ps
  2.  
  3. module hypotenuse_testbench;
  4. parameter CLOCK_HALF_PERIOD = 500; // 1000ns = 100MHz
  5.  
  6. reg clk_in, rst_in, start_in;
  7. reg [7:0] a_in, b_in;
  8. wire busy_out;
  9. wire [15:0] hyp_out;
  10.  
  11. hypotenuse hyp(
  12. .clk(clk_in), .rst(rst_in), .start(start_in), .a_in(a_in), .b_in(b_in),
  13. .busy(busy_out), .out(hyp_out)
  14. );
  15.  
  16. initial begin
  17. clk_in = 0;
  18. forever #CLOCK_HALF_PERIOD clk_in = !clk_in;
  19. end
  20.  
  21. integer test_i, test_expected, cycles_taken;
  22.  
  23. localparam TestCount = 13;
  24.  
  25. integer a_test [0:(TestCount - 1)];
  26. integer b_test [0:(TestCount - 1)];
  27. integer out_test [0:(TestCount - 1)];
  28.  
  29. initial begin
  30. a_test[0] = 0; b_test[0] = 0; out_test[0] = 0;
  31.  
  32. a_test[1] = 0; b_test[1] = 1; out_test[1] = 1;
  33. a_test[2] = 1; b_test[2] = 0; out_test[2] = 1;
  34. a_test[3] = 1; b_test[3] = 1; out_test[3] = 1;
  35. a_test[4] = 2; b_test[4] = 2; out_test[4] = 2;
  36. a_test[5] = 4; b_test[5] = 7; out_test[5] = 8;
  37. a_test[6] = 11; b_test[6] = 3; out_test[6] = 11;
  38. a_test[7] = 44; b_test[7] = 24; out_test[7] = 50;
  39. a_test[8] = 123; b_test[8] = 79; out_test[8] = 146;
  40. a_test[9] = 140; b_test[9] = 180; out_test[9] = 228;
  41. a_test[10] = 181; b_test[10] = 181; out_test[10] = 255;
  42.  
  43. a_test[11] = 182; b_test[11] = 182; out_test[11] = 26;
  44. a_test[12] = 200; b_test[12] = 200; out_test[12] = 120;
  45.  
  46. for (test_i = 0; test_i < TestCount; test_i = test_i + 1) begin
  47. rst_in = 1;
  48. a_in = a_test[test_i];
  49. b_in = b_test[test_i];
  50. test_expected = out_test[test_i];
  51.  
  52. repeat(2) @(posedge clk_in);
  53.  
  54. rst_in = 0;
  55. start_in = 1;
  56. repeat(1) @(posedge clk_in);
  57.  
  58. cycles_taken = 0;
  59. while (busy_out) begin
  60. repeat (1) @(posedge clk_in);
  61. cycles_taken <= cycles_taken + 1;
  62. end
  63.  
  64. if (hyp_out == test_expected)
  65. $display("[+] sqrt(%d^2 + %d^2) = %d, cycles taken: %d", a_in, b_in, hyp_out, cycles_taken);
  66. else begin
  67. $display("Expected %d for sqrt(%d^2 + %d^2), got %d", test_expected, a_in, b_in, hyp_out);
  68. $stop;
  69. end
  70. end
  71. $finish;
  72. end
  73. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement