| 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 [8:0] a = 0; |
| reg [8:0] b = 0; |
| wire [8:0] o1,o1p; |
| wire [2:0] o2,o2p; |
| reg [2:0] c = 0; |
| reg [2:0] d = 0; |
| wire [2:0] o3,o3p; |
| wire [2:0] o4,o4p; |
| reg s = 0; |
| |
| top uut_top ( |
| .a(a), |
| .b(b), |
| .o1(o1), |
| .o2(o2), |
| .c(c), |
| .d(d), |
| .o3(o3), |
| .o4(o4), |
| .s(s) |
| ); |
| |
| |
| |
| |
| always @(posedge clk) |
| begin |
| s <= ~s; |
| a <= a + 12; |
| b <= b + 33; |
| c <= c + 17; |
| d <= d + 22; |
| end |
| |
| assign o1p = (s ? 0 : a + b); |
| assign o2p = (s ? a : a - b); |
| assign o3p = (s ? 4'b1111 : d + c); |
| assign o4p = (s ? d : c - d); |
| |
| uut_top_checker o1_check(.clk(clk), .A(o1), .B(o1p)); |
| uut_top_checker o2_check(.clk(clk), .A(o2), .B(o2p)); |
| uut_top_checker o3_check(.clk(clk), .A(o3), .B(o3p)); |
| uut_top_checker o4_check(.clk(clk), .A(o4), .B(o4p)); |
| |
| endmodule |
| |
| |
| module uut_top_checker(input clk, input [2:0] A, input [2:0] B); |
| always @(posedge clk) |
| begin |
| //#20 |
| if (A != B) |
| begin |
| $display("ERROR: ASSERTION FAILED in %m:",$time," ",A," ",B); |
| $stop; |
| end |
| end |
| endmodule |