Hardware Reference
In-Depth Information
Creating a framework for recursion that interacts well with the strong operators
involves dealing with negation and liveness in recursive forms. Again, SVA
currently avoids these issues through Restriction 1 .
17.3.2
Disable Clause
RESTRICTION 2: disable iff cannot be used in the declaration of a
recursive property.
disable iff cannot be nested, so its use within a recursive property declaration
is forbidden. If a disable clause is needed, it should be put in a wrapper property
around the recursive property or in an assertion statement. For example, the
following is illegal:
property illegal_disable( logic b, property p);
disable iff (b)
p and nexttime illegal_disable(b, p);
endproperty
The effect of the disable can be obtained using a wrapper, as in
property always_with_disable( logic b, property p);
disable iff (b)
my_always(p);
endproperty
where my_always is the recursive property from Fig. 17.1 .
17.3.3
Time Advance
RESTRICTION 3: If p is a recursive property, then, in the declaration of p ,
every instance of p must occur after a positive advance in time. In the case of
mutually recursive properties, all recursive instances must occur after positive
advances in time.
Briefly, recursion must occur after a positive advance in time. This restriction
is intended to avoid recursive forms that get “stuck” at a single point in time. For
example, the following is illegal:
property illegal_stuck( property p);
p and nexttime [0] illegal_stuck(p);
endproperty
Search WWH ::




Custom Search