Hardware Reference
In-Depth Information
Fig. 11.11
previously
p
property
t
clock ticks
11.2.1.1
Past Temporal Operators
In SVA, all property operators are directed to the future. For example,
always
p
means that from the current clock tick on the property
p
holds,
s_eventually
p
means that
p
happens in the current or in a future clock tick,
p
until
q
means that
p
holds from now on until
q
happens,
nexttime
p
means, that
p
holds in the next
clock tick, etc.
There exists also past temporal logic [
34
] in which the operators are directed or
operate on past values of signals. We illustrate such past operators in Table
11.3
.
It may be shown that past temporal operators do not add any additional expressive
power to the language. Everything that may be expressed with future and past
temporal operators may be expressed with future temporal operators only. Using
past temporal operators just makes the formulas more succinct.
The past temporal operators are
not
part of SVA; nevertheless, it may be of
interest to find an appropriate work-around. In the special case when the operands
are Boolean, and not arbitrary property expressions, it is natural to use sequence
method
triggered
as shown in Fig.
11.12
. The figure shows property definitions
that implement several past temporal operators applied to Boolean values.
6
Besides
the operators listed in Table
11.3
, the figure contains the operator
first
that is not
part of a past temporal logic, but is closely related to it. This operator does not have
arguments; it returns
true
in clock tick 0, and
false
in all other clock ticks.
Figure
11.12
illustrates several points that we mentioned earlier:
Sequence methods can be applied to sequence instances only; therefore, we had
to create auxiliary sequences, such as
seq_previously
,
seq_once
,etc.
Sequence methods return Boolean values
true
(1Šb1)
and
false
(1Šb0)
.Itiscor-
rect to use Boolean negation
!seq_once(!e).triggered
in the implementation
of
sofar
instead of property negation
not
seq_once(!e).triggered
.Thisalso
applies to the implementation of
first
.
It is legal to apply sequence methods to a sequence with arguments, such as
seq_previously(e).triggered
.
Figure
11.12
does not contain implementations of operators before and backto.
Their implementation is left to the reader as exercise (Exercises
11.15
and
11.16
)
6
For some tools, it may be more efficient to implement
seq_not_first
using modeling code
to set a flag after clock tick 0.
Search WWH ::
Custom Search