Hardware Reference
In-Depth Information
10
20
30
40
50
60
70
80
90
100
clk
retry
a
b
Fig. 13.5
Waveform for
a_accept
property begins. This starts monitoring of the abort condition, using sampled values
of
retry
, and also starts evaluation of the underlying property. Because the abort is
asynchronous, the sampled value of
retry
is checked in every time step, including
the first, that the evaluation of the underlying property is ongoing and has neither
been aborted nor already completed on its own. If the sampled value of
retry
is
1'b1
in any of these checks, then the evaluation is aborted and passes in that time
step. If the evaluation is not aborted, then it completes when the underlying property
evaluation completes (i.e., at the next occurrence of
posedge
clk
) and the result of
the evaluation is the same as that of the underlying property.
The difference between Figs.
13.1
and
13.4
is that in the former the condition is
not sampled and the outcome of evaluation when the condition is true is
disabled
,
and in the latter the sampled value is used and the outcome is
success
.
Figure
13.5
shows an example waveform for
a_accept
. It is similar to Fig.
13.2
and will illustrate differences between an asynchronous abort and a disable clause.
The evaluation attempt of
a_accept
that begins at time 20 is aborted in the first
time step after time 35 and passes at that time. The evaluation does not abort at
time 35 because sampled value of
retry
is
1'b0
in that time step. The sampled
value of
retry
at time 40 is
1'b1
, so the attempt beginning at time 40 immediately
aborts and passes in that time step. The 0-width glitch on
retry
at time 60 does not
affect any sampled value, so the evaluation beginning at time 60 is not aborted. This
evaluation fails at time 80. The evaluation beginning at time 80 is also not aborted
and passes at time 100.
Abort operators may be nested. The scope of the outer abort condition includes
any nested abort property. The scope of the nested abort condition is limited to the
underlying property of that abort operator. While evaluating the inner abort property,
the outer abort condition takes precedence over the inner abort condition in case both
conditions occur in the same time step.
Figure
13.6
shows a concurrent assertion with nested asynchronous aborts. The
outer abort is an
accept_on
with abort condition
retry
whose scope is the entire
property of the concurrent assertion. The inner abort is a
reject_on
with abort
condition
bad
whose scope is the consequent of
|=>
. The entire assertion is singly
clocked by
posedge
clk
. The inner abort does not begin evaluation until after
Search WWH ::
Custom Search