[sv-ac] [SV-AC] Any technical reasons why "n" could not be a sampled variable in ##n or [*n]

From: Ben Cohen <hdlcohen@gmail.com>
Date: Fri Aug 22 2014 - 12:54:24 PDT
A very common question I see in newsgroups is the classical issue in an
assertion where a delay or a repeat count is based on a sampled value of a
variable. In 1800'2012 using the value of a variable directly in an
assertion is illegal; for example:
​​


int n=6;
ap_illegal: assert property(@(posedge clock)
​x ##1 ​
a |-> ##n b);
ap_illegal2: assert property(@(posedge clock) a |-> b[*1:n]);


Of course, the general answer to this question is to use local variables.
Thus, for example


property p1;
  int v;

​x ##1​
 (a, v=n) |-> (1, v=v-1'b1)[*1:$] ## 1 v==0 ##0 b;
endproperty
ap_legal: assert property(@(posedge clock) p1);

*​​Thus, the question is:* Can we

​ (or should we)​
, in the next 1800, allow the use of the sampled value of a variable
for clock delays or repetition count?
​The value of the ​variable will be its content in the cycle it is
read.  Thus, for
​x ##1 ​
a |-> ##n bthe value for "n" will be the one in the cycle after the
1st successful attempt and  a==1. .



Ben Cohen

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Fri Aug 22 12:55:21 2014

This archive was generated by hypermail 2.1.8 : Fri Aug 22 2014 - 12:55:38 PDT