| module testbench; | |
| reg [2:0] in; | |
| reg patt_out = 0; | |
| reg patt_carry_out = 0; | |
| reg patt_out1 = 0; | |
| reg patt_carry_out1 = 0; | |
| wire out; | |
| wire carryout; | |
| initial begin | |
| // $dumpfile("testbench.vcd"); | |
| // $dumpvars(0, testbench); | |
| #5 in = 0; | |
| repeat (10000) begin | |
| #5 in = in + 1; | |
| end | |
| $display("OKAY"); | |
| end | |
| top uut ( | |
| .x(in[0]), | |
| .y(in[1]), | |
| .cin(in[2]), | |
| .A(out), | |
| .cout(carryout) | |
| ); | |
| always @(posedge in[0]) begin | |
| patt_out1 <= ~in[1] + &in[2]; | |
| end | |
| always @(negedge in[0]) begin | |
| patt_carry_out1 <= in[2] ? |in[1] : patt_out; | |
| end | |
| always @(*) begin | |
| if (in[0]) | |
| patt_out <= patt_out|in[1]~&in[2]; | |
| end | |
| always @(*) begin | |
| if (~in[0]) | |
| patt_carry_out <= patt_carry_out1&in[2]~|in[1]; | |
| end | |
| assert_Z out_test(.A(out)); | |
| endmodule |