In reply to dave_59:
Thank You Mr. Dave,
This was what I was looking for.
But there remains an issue, I made slight changes, so that ready triggers, 4 to 7 clocks cycles after valid is HIGH. And the assertion will pass for when ready is triggered 6:10 cycles after valid.
@(negedge clk) valid <= 1;
repeat ($urandom_range(4,7)) begin
ready <= 1;
@(negedge clk) ready <= 0; valid <= 0;
// @(negedge clk) $rose(valid) |-> ##[6:10] $stable(valid) && ready;
@(negedge clk) $rose(valid) |-> ready[=1] within valid[*6:10];
In this case, it shows error for 4 cycle delay. And shows passed for 6 and 7 cycle delays i.e., as we want it to behave.
But for delays of 5 cycle it shows passed, but that should also state an error, as the least delay should be 6 cycles.