Assertion for signal stability inside a window

Hi all,
my purpose is to check that ‘c’ is stable since a fell down (and b is low) and until a goes high again.

I wrote this SVA:


assert property (@(posedge clk) disable iff (!reset_n) (!a && !b |=> ($stable(c) throughout (a) [-> 1])))

I’ve uploaded the image here…

The problem is that the assertion fails because it’s checking the clock next a returns high
Can anyone help me with this?

In reply to alexkidd84:

Your requirements are not clear; I believe that this is what you are trying to express:
At (fell(a) && !b) then starting from the next clock “c” holds the value it had at the fell(a)
until a rose(a). At the rose(a), “c” can change value.


//my purpose is to check that 'c' is stable since a fell down (and b is low) 
    //and until a goes high again. 
    property p_cstable;
        bit v; 
        @(posedge clk) disable iff (!reset_n)
        ($fell(a) && !b, v=c )|=>  c==v s_until  $rose(a);
    endproperty 
    ap_c_stable: assert property(p_cstable);  

If this is not your requirements, then please re-express them again.
Ben Cohen
http://www.systemverilog.us/ ben@systemverilog.us
For training, consulting, services: contact Home - My cvcblr


  1. SVA Alternative for Complex Assertions
    Verification Horizons - March 2018 Issue | Verification Academy
  2. SVA: Package for dynamic and range delays and repeats | Verification Academy
  3. SVA in a UVM Class-based Environment
    SVA in a UVM Class-based Environment | Verification Horizons | Verification Academy

In reply to ben@SystemVerilog.us:


// Ths is equivalent to the  property p_cstable
ap_c_stable2: assert property(@ (posedge clk) disable iff (!reset_n)
       ($fell(a) && !b)|=> $stable(c) s_until  $rose(a));  

    property p_cstable;
        bit v; 
        @(posedge clk) disable iff (!reset_n)
        ($fell(a) && !b, v=c )|=>  c==v s_until  $rose(a);
    endproperty  
    ap_c_stable: assert property(p_cstable);  
      

Thanks Ben!!
I was using 2005 sv version and I didn’t know the construct s_until.