📄 00164.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<title>17.14.1 在多时钟控制特性中的时钟解析</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<meta name="generator" content="Doc-O-Matic" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<link rel="STYLESHEET" href="default.css" type="text/css" />
<script type="text/javascript" src="scripts.js"></script>
</head>
<body class="Element700" onload="onBodyLoadEx('systemverilog31a.html', 'topic', '00164.html');" onmousedown="onBodyMouseDown();">
<!-- Begin Popups -->
<div class="Element801" id="popup00368">
<div class="Element800">
<div class="Element14">
链接</div>
<div class="Element11">
<div class="Element10">
<a href="00163.html" target="topic">17.14 时钟解析</a></div>
</div>
</div>
</div>
<!-- End Popups -->
<!-- Begin Page Header -->
<div class="Element710" id="areafixed">
<div class="Element92">
<table width="100%" cellspacing="0" cellpadding="0">
<tr><td width="33%">
<div class="Element1">
<a href="#" onmousedown="showPopup(this, 'popup00368');"><img src="seealsolink.png" border="0" alt="" title=""></a> SystemVerilog 3.1a语言参考手册</div>
</td><td width="34%">
<div class="Element2">
</div>
</td><td width="33%">
<div class="Element90">
<a href="00163.html" target="topic"><img src="btn_prev_lightblue.gif" border="0" alt="Previous" title="Previous" onmouseover="switchImage(this, 'btn_prev_lightblue_hover.gif');" onmouseout="switchImage(this, 'btn_prev_lightblue.gif');"></a><a href="00163.html" target="topic"><img src="btn_up_lightblue.gif" border="0" alt="Up" title="Up" onmouseover="switchImage(this, 'btn_up_lightblue_hover.gif');" onmouseout="switchImage(this, 'btn_up_lightblue.gif');"></a><a href="00165.html" target="topic"><img src="btn_next_lightblue.gif" border="0" alt="Next" title="Next" onmouseover="switchImage(this, 'btn_next_lightblue_hover.gif');" onmouseout="switchImage(this, 'btn_next_lightblue.gif');"></a></div>
</td></tr></table><div class="Element5">
17.14.1 在多时钟控制特性中的时钟解析</div>
</div>
</div>
<!-- End Page Header -->
<!-- Begin Client Area -->
<div class="Element720" id="areascroll">
<div class="Element721">
<!-- Begin Page Content -->
<div class="Element58">
<a name="描述"></a><div class="Element11">
<div class="Element10">
<p class="Element10">
Throughout this subsection, s, s1, s2 denote sequences without clocking events; p, p1, p2 denote properties without clocking events; m, m1, m2 denote multiply-clocked sequences, q, q1, q2 denote multiply-clocked properties; and c, c1, c2 denote non-identical clocking event expressions. </p>
<p class="Element10">
</p>
<p class="Element10">
Due to clock flow, juxtaposition of two clocks nullifies the first. This and the nesting of clocking events within other property building operators mean that there are subtleties in the general interpretation of the restrictions about where the clock can change in multiply-clocked properties. For example, </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00772');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00772"><pre class="Element12">@(c) s |-> @(c) (p and @(c1) p1)</pre></div></div>
<p class="Element10">
appears legal because the antecedent is clocked by c and the consequent begins syntactically with the clocking event @(c). However, the consequent sequence is equivalent to </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00773');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00773"><pre class="Element12">(@(c) p) and (@(c1) p1)</pre></div></div>
<p class="Element10">
and |-> cannot synchronize between clock c from the antecedent and clock c1 from the second conjunct of the consequent. Similarly, </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00774');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00774"><pre class="Element12">@(c) s |-> @(c1) (@(c) p)</pre></div></div>
<p class="Element10">
appears illegal due to the apparent clock change from c to c1 across |->. However, it is legal, although arguably misleading in style, because the consequent property is equivalent to @(c) p. </p>
<p class="Element10">
</p>
<p class="Element10">
This subsection gives a more precise treatment of the restrictions on multiply-clocked use of |-> and if/if...else than the intuitive discussion in Section 17.12. The present treatment depends on the notion of the set of semantic leading clocks for a multiply-clocked sequence or property. </p>
<p class="Element10">
</p>
<p class="Element10">
Some sequences and properties have no explicit leading clock event. Their initial clocking event is inherited from an outer clocking event according to the flow of clocking event scope. In this case, the semantic leading clock is said to be inherited. For example, in the property </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00775');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00775"><pre class="Element12">@(c) s |=> p and @(c1) p1</pre></div></div>
<p class="Element10">
the semantic leading clock of the subproperty p is inherited since the initial clock of p is the clock that flows </p>
<p class="Element10">
across |=>. </p>
<p class="Element10">
</p>
<p class="Element10">
A multiply-clocked sequence has a unique semantic leading clock, defined inductively as follows.
<ul class="Element632">
<li class="Element602">The semantic leading clock of s is inherited.</li>
<li class="Element602">The semantic leading clock of @(c) s is c.</li>
<li class="Element602">If inherited is the semantic leading clock of m, then the semantic leading clock of @(c) m is c. Otherwise, the semantic leading clock of @(c) m is equal to the semantic leading clock of m.</li>
<li class="Element602">The semantic leading clock of (m) is equal to the semantic leading clock of m.</li>
<li class="Element602">The semantic leading clock of m1 ## m2 is equal to the semantic leading clock of m1.</li>
</ul>The set of semantic leading clocks of a multiply-clocked property is defined inductively as follows.
<ul class="Element632">
<li class="Element602">The set of semantic leading clocks of m is {c}, where c is the unique semantic leading clock of m.</li>
<li class="Element602">The set of semantic leading clocks of p is {inherited}.</li>
<li class="Element602">If inherited is an element of the set of semantic leading clocks of q, then the set of semantic leading clocks of @(c) q is obtained from the set of semantic leading clocks of q by replacing inherited by c. Otherwise, the set of semantic leading clocks of @(c) q is equal to the set of semantic leading clocks of q.</li>
<li class="Element602">The set of semantic leading clocks of (q) is equal to the set of semantic leading clocks of q.</li>
<li class="Element602">The set of semantic leading clocks of not q is equal to the set of semantic leading clocks of q.</li>
<li class="Element602">The set of semantic leading clocks of q1 and q2 is the union of the set of semantic leading clocks of q1 with</li>
<li class="Element602">the set of semantic leading clocks of q2.</li>
<li class="Element602">The set of semantic leading clocks of q1 or q2 is the union of the set of semantic leading clocks of q1 with the set of semantic leading clocks of q2.</li>
<li class="Element602">The set of semantic leading clocks of m |-> p is equal to the set of semantic leading clocks of m.</li>
<li class="Element602">The set of semantic leading clocks of m |=> p is equal to the set of semantic leading clocks of m.</li>
<li class="Element602">The set of semantic leading clocks of if (b) q is {inherited}.</li>
<li class="Element602">The set of semantic leading clocks of if (b) q1 else q2 is {inherited}.</li>
<li class="Element602">The set of semantic leading clocks of a property instance is equal to the set of semantic leading clocks of the multiply-clocked property obtained from the body of its declaration by substituting in actual arguments.</li>
</ul>For example, the multiply-clocked sequence </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00776');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00776"><pre class="Element12">@(c1) s1 ## @(c2) s2</pre></div></div>
<p class="Element10">
has c1 as its unique semantic leading clock, while the multiply-clocked property </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00777');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00777"><pre class="Element12">not (p1 and (@(c2) p2)</pre></div></div>
<p class="Element10">
has {inherited, c2} as its set of semantic leading clocks. </p>
<p class="Element10">
</p>
<p class="Element10">
In the presence of an incoming outer clock, the inherited semantic leading clock is always understood to refer to the incoming outer clock. On the other hand, if a property has only explicit semantic leading clocks, then the incoming outer clock has no effect on the clocking of the property since the explicit clock events replace the incoming outer clock. Therefore, the clocking of a property q in the presence of incoming outer clock c is equivalent to the clocking of the property @(c) q. </p>
<p class="Element10">
</p>
<p class="Element10">
The rules for using multiply-clocked overlapping implication and if/if...else in the presence of an incoming outer clock can now be stated more precisely. </p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -