| module testbench; |
| reg clk; |
| |
| initial begin |
| // $dumpfile("testbench.vcd"); |
| // $dumpvars(0, testbench); |
| |
| #5 clk = 0; |
| repeat (10000) begin |
| #5 clk = 1; |
| #5 clk = 0; |
| end |
| |
| $display("OKAY"); |
| end |
| |
| |
| reg [7:0] data_a = 0; |
| reg [5:0] addr_a = 0; |
| reg we_a = 0; |
| wire [7:0] q_a; |
| reg mem_init = 0; |
| |
| top uut ( |
| data_a, |
| addr_a, |
| we_a, |
| clk, |
| q_a |
| ); |
| |
| always @(posedge clk) begin |
| #3; |
| data_a <= data_a + 17; |
| |
| addr_a <= addr_a + 1; |
| end |
| |
| always @(posedge addr_a) begin |
| #10; |
| if(addr_a > 6'h3E) |
| mem_init <= 1; |
| end |
| |
| always @(posedge clk) begin |
| //#3; |
| we_a <= !we_a; |
| end |
| |
| uut_mem_checker port_a_test(.clk(clk), .init(mem_init), .en(!we_a), .A(q_a)); |
| |
| endmodule |
| |
| module uut_mem_checker(input clk, input init, input en, input [7:0] A); |
| always @(posedge clk) |
| begin |
| #1; |
| if (en == 1 & init == 1 & A === 8'bXXXXXXXX) |
| begin |
| $display("ERROR: ASSERTION FAILED in %m:",$time," ",A); |
| $stop; |
| end |
| end |
| endmodule |