| module top ( | |
| input clk, | |
| input reset, | |
| input ping, | |
| input [1:0] cfg, | |
| output reg pong | |
| ); | |
| reg [2:0] cnt; | |
| localparam integer maxdelay = 8; | |
| always @(posedge clk) begin | |
| if (reset) begin | |
| cnt <= 0; | |
| pong <= 0; | |
| end else begin | |
| cnt <= cnt - |cnt; | |
| pong <= cnt == 1; | |
| if (ping) cnt <= 4 + cfg; | |
| end | |
| end | |
| assert property ( | |
| @(posedge clk) | |
| disable iff (reset) | |
| not (ping ##1 !pong [*maxdelay]) | |
| ); | |
| `ifndef FAIL | |
| assume property ( | |
| @(posedge clk) | |
| not (cnt && ping) | |
| ); | |
| `endif | |
| endmodule |