SVA: check an event occurred in a window of time in the past

In reply to Mohamed_TN:

In reply to ben@SystemVerilog.us:
In this way the assertion will check B in each cycle in the window, consider the case when A is triggered by only one B event during the window [1:20].


Again, this assertion is far better, and is more expressive
p1: assert property(@(posedge clk)
    b |-> ##[1:20] a); // better 

With the generate, you end up with 20 separate assertions, one or more of which may succeed if b was true at 1 or more previous cycles, and the others will fail. 
There is no $past with a range. 
The $past function provides the sampled value that an expression held in a previous nth cycle. The syntax of the function is: [1]
$past( expression1 [, number_of_ticks] [, expression2] [, clocking_event])

    generate for (genvar i=1; i<=20; i++) 
        p1: assert property(@(posedge clk)
        a |-> $past(b, i)); 
    endgenerate
 The nature of the beast! 
 

Ben Cohen
http://www.systemverilog.us/ ben@systemverilog.us
For training, consulting, services: contact Home - My cvcblr


See Paper: 1) VF Horizons:PAPER: SVA Alternative for Complex Assertions - SystemVerilog - Verification Academy
2) http://systemverilog.us/vf/SolvingComplexUsersAssertions.pdf