Mirror of my github hw-experiments repository

fifo_tb.v 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. module fifo_tb;
  2. reg reset_n;
  3. reg [15:0] data_in;
  4. wire [15:0] data_out;
  5. wire full, empty;
  6. reg fifo_push, fifo_pop, clk;
  7. simple_fifo dut (
  8. .clk(clk),
  9. .reset_n(reset_n),
  10. .push(fifo_push),
  11. .pop(fifo_pop),
  12. .data_in(data_in),
  13. .data_out(data_out),
  14. .full(full),
  15. .empty(empty)
  16. );
  17. initial begin
  18. clk = 1'b0;
  19. reset_n = 1'b1;
  20. repeat(4) #10 clk = ~clk;
  21. reset_n = 1'b0;
  22. forever #10 clk = ~clk; // generate a clock
  23. end
  24. reg [15:0] tmp;
  25. initial begin
  26. data_in = 16'h0; // initial value
  27. @(negedge reset_n); // wait for reset
  28. data_in = 16'hffff;
  29. repeat (8) begin
  30. @(posedge clk);
  31. fifo_push = 1'b1;
  32. @(negedge clk);
  33. fifo_push = 1'b0;
  34. data_in = ~data_in;
  35. end
  36. if (full != 1 && empty != 0) begin
  37. $display("Test failed!");
  38. end
  39. tmp = 16'hffff;
  40. repeat (8) begin
  41. @(posedge clk);
  42. fifo_pop = 1'b1;
  43. @(negedge clk);
  44. fifo_pop = 1'b0;
  45. if (data_out !== tmp) begin
  46. $display("Test failed!");
  47. end
  48. tmp = ~tmp;
  49. end
  50. if (full != 0 && empty != 1) begin
  51. $display("Test failed!");
  52. end
  53. repeat(5) @(posedge clk); //if this delay is odd it fails wtf?
  54. data_in = 16'h1234;
  55. repeat (8) begin
  56. @(posedge clk);
  57. fifo_push = 1'b1;
  58. @(negedge clk);
  59. fifo_push = 1'b0;
  60. data_in = ~data_in;
  61. end
  62. if (full != 1 && empty != 0) begin
  63. $display("Test failed!");
  64. end
  65. tmp = 16'h1234;
  66. repeat (8) begin
  67. @(posedge clk);
  68. fifo_pop = 1'b1;
  69. @(negedge clk);
  70. fifo_pop = 1'b0;
  71. if (data_out !== tmp) begin
  72. $display("Test failed!");
  73. end
  74. tmp = ~tmp;
  75. end
  76. if (full != 0 && empty != 1) begin
  77. $display("Test failed!");
  78. end
  79. $finish;
  80. end
  81. initial begin
  82. if ($test$plusargs("waves=1") != 0) begin
  83. $dumpfile("out/waves.vcd");
  84. $dumpvars(0, fifo_tb);
  85. if ($test$plusargs("dump_fifo=1") != 0) begin
  86. $dumpvars(0, dut.data[0]);
  87. $dumpvars(0, dut.data[1]);
  88. $dumpvars(0, dut.data[2]);
  89. $dumpvars(0, dut.data[3]);
  90. $dumpvars(0, dut.data[4]);
  91. $dumpvars(0, dut.data[5]);
  92. $dumpvars(0, dut.data[6]);
  93. $dumpvars(0, dut.data[7]);
  94. end
  95. end
  96. end
  97. endmodule