| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- module fifo_tb;
- reg reset_n;
- reg [15:0] data_in;
- wire [15:0] data_out;
- wire full, empty;
- reg fifo_push, fifo_pop, clk;
- simple_fifo dut (
- .clk(clk),
- .reset_n(reset_n),
- .push(fifo_push),
- .pop(fifo_pop),
- .data_in(data_in),
- .data_out(data_out),
- .full(full),
- .empty(empty)
- );
- initial begin
- clk = 1'b0;
- reset_n = 1'b1;
- repeat(4) #10 clk = ~clk;
- reset_n = 1'b0;
- forever #10 clk = ~clk; // generate a clock
- end
- reg [15:0] tmp;
- initial begin
- data_in = 16'h0; // initial value
- @(negedge reset_n); // wait for reset
- data_in = 16'hffff;
- repeat (8) begin
- @(posedge clk);
- fifo_push = 1'b1;
- @(negedge clk);
- fifo_push = 1'b0;
- data_in = ~data_in;
- end
- if (full != 1 && empty != 0) begin
- $display("Test failed!");
- end
- tmp = 16'hffff;
- repeat (8) begin
- @(posedge clk);
- fifo_pop = 1'b1;
- @(negedge clk);
- fifo_pop = 1'b0;
- if (data_out !== tmp) begin
- $display("Test failed!");
- end
- tmp = ~tmp;
- end
- if (full != 0 && empty != 1) begin
- $display("Test failed!");
- end
- repeat(5) @(posedge clk); //if this delay is odd it fails wtf?
- data_in = 16'h1234;
- repeat (8) begin
- @(posedge clk);
- fifo_push = 1'b1;
- @(negedge clk);
- fifo_push = 1'b0;
- data_in = ~data_in;
- end
- if (full != 1 && empty != 0) begin
- $display("Test failed!");
- end
- tmp = 16'h1234;
- repeat (8) begin
- @(posedge clk);
- fifo_pop = 1'b1;
- @(negedge clk);
- fifo_pop = 1'b0;
- if (data_out !== tmp) begin
- $display("Test failed!");
- end
- tmp = ~tmp;
- end
- if (full != 0 && empty != 1) begin
- $display("Test failed!");
- end
- $finish;
- end
- initial begin
- if ($test$plusargs("waves=1") != 0) begin
- $dumpfile("out/waves.vcd");
- $dumpvars(0, fifo_tb);
- if ($test$plusargs("dump_fifo=1") != 0) begin
- $dumpvars(0, dut.data[0]);
- $dumpvars(0, dut.data[1]);
- $dumpvars(0, dut.data[2]);
- $dumpvars(0, dut.data[3]);
- $dumpvars(0, dut.data[4]);
- $dumpvars(0, dut.data[5]);
- $dumpvars(0, dut.data[6]);
- $dumpvars(0, dut.data[7]);
- end
- end
- end
- endmodule
|