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 |