Hardware Reference
In-Depth Information
Let us apply these rules to the example. First consider assertion
a_until
.For
substituting
seq_impl_prop
instance body into the assertion requires to determine
its actual arguments. The first two actual arguments are missing in the instance spe-
cification; therefore, default values are used. In this case, they are inferred. For
rst
the argument
$inferred_disable
is inferred from
default disable iff
and
thus it is
!reset
.For
clk
,
$inferred_clock
is inferred from
default clocking
and thus it is
posedge
clock
.
The third argument is an instance of sequence
sf_after_a
which itself needs
its actual arguments. The first argument is again inferred from
default clocking
as
posedge
clock
. The second one is variable
w
and the third one is an instance
of sequence
s
. The last argument is for
pf
, and it is simply
x
until
y
where
x
and
y
are variables declared in the module. The assertion with the actual arguments
substituted has the following form:
a:
assert property
(seq_impl_prop(!reset, (
posedge
clock),
sf_after_a((
posedge
clock), w, s, 1), (x
until
y));
We can now proceed with the substitution of the arguments into the body of
seq_impl_prop
. It becomes
disable iff
(!reset) @(
posedge
clock)
(sf_after_a((
posedge
clock), w, s, 1)) |-> (x
until
y)
The next step is to substitute the body of the sequence
sf_after_a
. Its sequence
expression after substitution of the actual arguments becomes
@(
posedge
clock) w ##1 (v[
*
3])
where
(v[
*
3])
is the body of sequence
s
. The final form of the body of assertion
a_until
before clock flow is applied is as follows:
disable iff
(!reset) @(
posedge
clock) (@(
posedge
clock)
(w ##1 (v[
*
3])) |-> (x
until
y)
The top-level clock is pushed into the antecedent sequence of the implication and
then flows into the consequent property as explained in detail in Chap.
12
. The result
in this case is a single-clocked property, running on
posedge
clk
.
disable iff
(!reset) @(
posedge
clock)
(w ##1 v[
*
3]) |-> (x
until
y)
What is the type of expressions
x
and
y
? Since
x
and
y
are variables (i.e., Boolean
expressions), these expressions are in fact simple Boolean sequences. They are used
in a property context as the operands of the
until
operator, hence they are
promoted
to properties.
Regarding the
cover property
statement
c_seq
, the sequence instance is
identical to one used in the assertion; therefore, the final form of the sequence
expression used in the property expression is as follows:
disable iff
(!reset) (@(
posedge
clock) w ##1 (v[
*
3]))
Search WWH ::
Custom Search