Hardware Reference
In-Depth Information
In an
initial
procedure, the flow of execution is initiated at the beginning of
simulation, and is carried on until the end of the procedure, without ever returning
to the initial point again. During this flow of execution, an assertion is invoked
whenever it is reached. Embedding a concurrent assertion in an
initial
procedure
is shown in Example
14.3
.
Example 14.3.
A concurrent assertion in an
initial
procedure:
module
b1Unit(
input bit
clk, rst, ...);
bit
running;
initial begin
:B1
if
(!rst)
begin
a3:
assert property
(@(
posedge
clk) running
until
rst);
...
end
end
...
endmodule
Procedural block
B1
is executed at time 0. Suppose that
rst
is initially low. At that
point, assertion
a3
is initiated. It waits until the clock tick
posedge
clk
occurs, and
then starts an evaluation attempt. No more new assertion attempts are started, but
the initial attempt will continue its evaluation until completed in accordance with
the normal assertion semantics.
t
14.2
Clock Inferencing
When an assertion leading clock is not explicitly specified, this clock is inferred
from the assertion context. For concurrent assertions outside procedural code, the
clock inference rules have been discussed in Chap.
12
. For procedural concurrent
assertions, the inferred clock is derived from the preceding event control statement
in the procedure. In the examples seen so far, the inferred clock has been the entire
event expression of the event control. The rules for clock inference follow synthesis
guidelines to provide for more general extraction of an inferred clock. There is some
subtlety to the rules, and in some cases the form of the procedure will not admit any
inferred clock.
Clock inferencing closely follows common design synthesis guidelines.
We say that an event expression is
inferable
if the entire expression has one of
the following forms:
I1
An event variable or a clocking block event.
Search WWH ::
Custom Search