Lets take a simple example of a d flip flop with asynchronous reset.
q should be updated with d on next edge of clock, this can be written with simple implication operator assertion.
However how to capture reset behavior in assertion. I've tried following few
assert @(posedge rst) (1'b1 |-> !Q);
assert @(posedge rst) (1'b1 ##0 !Q);
both these assertions fail, I think because there is no next posedge of rst?
assert @(posedge clk) ($rose(rst) |-> !Q);
passes but requires free running clock and is asserted between 2 edges of clock (not ann inteded behavior for rst)
assert #0 (not (rst & Q));
As per my understanding this is a correct immediate assertion, however I can't see this one passing / failing in waveform viewer. Further more I think I won't be able to write cover on last type of assertion.