Need to Use Variable in Assertions ## Delay

In reply to sharadha:
I put a lot of thought into Mantis 5067 (for 1800’2018) where delays and repeat operators can use module variables as the value for the delays or repeat. I now believe that the best approach would be to specify something like the following:

  1. The range for the ​delay or ​repeat cannot be greater than 32, as specified by a bit vector of no more than 5 bits.
  2. The delay or repeat statement is in a sequence that is used as a property, and not as a sequence (e.g., no end points, no implication operator after the sequence).

Thus,


  bit[2:0] v=3;
  ap_delay: assert property( $rose(a) |-> d ##v b); 
// The compiler would automatically implement something like the following:
generate for (genvar g_i=0; g_i<8; g_i++) begin
      ap_delay_gen:  assert property ($rose(a) |-> d ##0 v==g_i |-> ##g_i b);    
end endgenerate   

The above approach is simple to implement, fits most application​s, and is more generic conceptually.
​The use of local variables is complex, but feasible. But the use of the generate statement is much easier to express and understand.
Ben Cohen http://www.systemverilog.us/

  • SystemVerilog Assertions Handbook, 3rd Edition, 2013
  • A Pragmatic Approach to VMM Adoption
  • Using PSL/SUGAR … 2nd Edition
  • Real Chip Design and Verification
  • Cmpt Design by Example
  • VHDL books