| module top | |
| ( | |
| input x, | |
| input y, | |
| input cin, | |
| output reg A, | |
| output reg cout | |
| ); | |
| reg ASSERT = 1; | |
| (* anyconst *) reg foo; | |
| (* anyseq *) reg too; | |
| initial begin | |
| begin | |
| A = 0; | |
| cout = 0; | |
| end | |
| end | |
| `ifndef BUG | |
| always @(posedge x) begin | |
| if ($initstate) | |
| A <= 0; | |
| A <= y + cin + too; | |
| assume(too); | |
| assume(s_eventually too); | |
| end | |
| always @(negedge x) begin | |
| if ($initstate) | |
| cout <= 0; | |
| cout <= y + A + foo; | |
| assert(ASSERT); | |
| assert(s_eventually ASSERT); | |
| end | |
| `else | |
| assign {cout,A} = cin - y * x; | |
| `endif | |
| endmodule |