System verilog assertion to check that signal 'a' takes a value only when it has taken some other particular value before

In reply to Saraswati:

You need to write the assertion in a forward-looking manner, meaning that if some condition (a sequence)now then a future condition (a property or sequence) later. DO this instead of thinking of "if a condition now, then a previous condition must have occurred.


    bit clk, a, b; 
    int d1=1, d2=2;  
    // signal 'a' takes a value ''d2' only when it has already had the value 
    // ''d1' anytime before, during the simulation. 
    // Assertion wirtten in a more generic manner for the values of "a"
    // If you want specific values, you can use the "let"
    // let d1=1; let d2=2; // no not declare d1 and d1 as variables 
    ap_d1d2: assert property(@ (posedge clk)
             a==d1 |=> strong(##[1:$] a==d2));   
    // or the following 
    ap_d1d2_b: assert property(@ (posedge clk)
              a==d1 |=> strong(a==d2[->1]));  

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