Hardware Reference
In-Depth Information
subsequence synchronizes between ev1 and ev2 .By CF3 , ev2 flows to and governs
c ,but ev2 does not flow out of the enclosing parentheses by CF6 . As a result, |=>
is a synchronizer between ev2 and ev1 . In summary, the property is equivalent to
the following, in which each of the Booleans is explicitly clocked:
@(ev1) a ##1 @(ev1) b ##1 @(ev2) c |=> @(ev1) d
t
Example 12.5.
Analyze the clock flow in the following module:
module m1 ( logic a, b, c, d, event ev1, ev2);
1
default clocking EV1 @(ev1); endclocking
2
sequence s4; b ##1 @(ev2) c; endsequence
3
a10: assert property (a ##1 s4 |=> d);
4
endmodule
5
Solution: By CF1 , ev1 flows to a10 , hence flows to and governs a ( CF7 ) and flows
across ##1 to the instance of s4 ( CF8 ). By CF5 , ev1 flows into the body of s4 for
this instance and also across the instance ( CF5 ). Within the body of s4 , ev1 flows
to and governs b ( CF7 ), flows across ##1 ( CF8 ), and stops at @(ev2) ( CF4 ). ev2
governs c ( CF3 , CF7 ), but ev2 does not flow out of the instance of s4 ( CF5 ). ev1
flows across |=> ( CF8 ), and so it flows to and governs d ( CF7 ). In summary, a10
behaves the same as the property in the preceding example.
t
After application of the clock flow rules, each Boolean expression that stands as a
subsequence within a concurrent assertion must be governed by a clock. Otherwise,
the assertion is not legal. The following example illustrates an illegal assertion:
module m2 ( logic a, b, event ev1);
1
a11_illegal: assert property (
2
(@(ev1) a) implies b
3
);
4
endmodule
5
By CF3 and CF7 , ev1 governs a , but by CF6 ev1 does not flow out of the enclosing
parentheses. There is no default clock, so no clock governs b .
12.2.4.2
Semantic Leading Clocks
The rules of semantic leading clocks define how the leading clock or clocks of a
sequence or property are determined from the inside out. One of the basic ideas of
clock flow is that an outer clock is replaced by, rather than flowing through, an inner
clock. This means that @( c )@( d ) p behaves semantically the same as @( d ) p.
Syntactically, the leading clock of @( c )@( d ) p appears to be c, but semantically
it is d .
Another principle of concurrent assertions is that every subsequence, in particular
every Boolean that stands as a subsequence, must be clocked. When examining
semantic leading clocks from the inside out, though, there may be no clock at hand.
Search WWH ::




Custom Search