In reply to Ankit Bhange:
Disabling the assertion when sig2 goes down seems to do the trick. Is this approach correct?
NO!
// The throughout operator specifies that a signal (expression) must hold throughout a sequence.
( b throughout R )[/b] is equivalent to [b]( b [*0:$] intersect R )
// Use the
sequenc1 interesect sequence2 // and sequence1 is
($stable(sig1)[*1:$] ##1 !sig2) // Thus, if sig2==0 after 4 cycles,
// the consequent thread that will match will be
($stable(sig1)[*3] ##1 !sig2 // sig2==0 at cycle 4
property sig1_stable_throughout_sig2 (logic sig1, sig2);
$rose(sig2) |-> ##1 ($stable(sig1)[*1:$] ##1 !sig2) intersect !sig2[->1];
endproperty
// As mentioned in a previous post, I prefer to use |-> ##1 instead |=>
// See my next post
Ben Cohen
http://www.systemverilog.us/ ben@systemverilog.us
For training, consulting, services: contact http://cvcblr.com/home.html
** SVA Handbook 4th Edition, 2016 ISBN 978-1518681448
…
- SVA Package: Dynamic and range delays and repeats SVA: Package for dynamic and range delays and repeats - SystemVerilog - Verification Academy
- Free books: Component Design by Example https://rb.gy/9tcbhl
Real Chip Design and Verification Using Verilog and VHDL($3) https://rb.gy/cwy7nb - Papers:
- Understanding the SVA Engine,
https://verificationacademy.com/verification-horizons/july-2020-volume-16-issue-2 - SVA Alternative for Complex Assertions
https://verificationacademy.com/news/verification-horizons-march-2018-issue - SVA in a UVM Class-based Environment
https://verificationacademy.com/verification-horizons/february-2013-volume-9-issue-1/SVA-in-a-UVM-Class-based-Environment