📄 00577.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<title>8.10 事件控制</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', '00577.html');" onmousedown="onBodyMouseDown();">
<!-- Begin Popups -->
<div class="Element801" id="popup00158">
<div class="Element800">
<div class="Element14">
链接</div>
<div class="Element11">
<div class="Element10">
<a href="00846.html" target="topic">第八章 过程语句和控制流</a>, <a href="00917.html" target="topic">主题</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, 'popup00158');"><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="00595.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="00846.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="00578.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">
8.10 事件控制</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">
<div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00293');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00293"><pre class="Element12">delay_or_event_control ::= <span style="color: #008000">// 引用自附录A.6.5</span>
delay_control
| event_control
| <strong><span style="color: #FF0000">repeat</span></strong> <strong><span style="color: #FF0000">(</span></strong>expression<strong><span style="color: #FF0000">)</span></strong> event_control
delay_control ::=
<strong><span style="color: #FF0000">#</span></strong>delay_value
| <strong><span style="color: #FF0000">#(</span></strong>mintypmax_expression<strong><span style="color: #FF0000">)</span></strong>
event_control ::=
<strong><span style="color: #FF0000">@</span></strong>hierarchical_event_identifier
| <strong><span style="color: #FF0000">@(</span></strong>event_expression<strong><span style="color: #FF0000">)</span></strong>
| <strong><span style="color: #FF0000">@*</span></strong>
| <strong><span style="color: #FF0000">@(*)</span></strong>
| <strong><span style="color: #FF0000">@</span></strong>sequence_instance
event_expression ::=
[edge_identifier] expression [<strong><span style="color: #FF0000">iff</span></strong> expression]
| sequence_instance [<strong><span style="color: #FF0000">iff</span></strong> expression]
| event_expression <strong><span style="color: #FF0000">or</span></strong> event_expression
| event_expression <strong><span style="color: #FF0000">,</span></strong> event_expression
edge_identifier ::= <strong><span style="color: #FF0000">posedge</span></strong> | <strong><span style="color: #FF0000">negedge </span><span style="color: #008000"></strong>// 引用自附录A.7.4</span></pre></div></div>
<p class="Element10" style="text-align: center">
<strong>语法 8-9—时延与事件控制语法(摘录自附录A)</strong></p><p class="Element10">
</p>
<p class="Element10">
像Verilog一样,一个变量或线网的任何变化都可以使用<span style="color: #800080">@</span>事件控制检测到。如果表达式的计算结果多于一位,那么结果中的任何一位发生变化(包括<span style="color: #FF0000">X</span>到<span style="color: #FF0000">Z</span>的变化)均会触发事件控制。 </p>
<p class="Element10">
</p>
<p class="Element10">
SystemVerilog为<span style="color: #800080">@</span>事件控制加入了一个<span style="color: #0000FF">iff</span>限定符。 </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00294');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00294"><pre class="Element12"><span style="color: #0000FF">module</span> latch <span style="color: #800080">(</span><span style="color: #0000FF">output logic</span> <span style="color: #800080">[</span><span style="color: #FF0000">31</span><span style="color: #800080">:</span><span style="color: #FF0000">0</span><span style="color: #800080">]</span> y<span style="color: #800080">,</span> <span style="color: #0000FF">input</span> <span style="color: #800080">[</span><span style="color: #FF0000">31</span><span style="color: #800080">:</span><span style="color: #FF0000">0</span><span style="color: #800080">]</span> a<span style="color: #800080">,</span> <span style="color: #0000FF">input</span> enable<span style="color: #800080">);</span>
always <span style="color: #800080">@(</span>a <span style="color: #0000FF">iff</span> enable <span style="color: #800080">==</span> 1<span style="color: #800080">)</span>
y <span style="color: #800080"><=</span> a<span style="color: #800080">;</span> <span style="color: #008000">// latch处于透明模式</span>
<span style="color: #0000FF">endmodule</span></pre></div></div>
<p class="Element10">
事件表达式仅仅在i<span style="color: #0000FF">ff</span>之后的表达式为“真”时才会触发,在上面的例子中就是<i>enable</i>等于1的情况。注意:这个表达式只有在<i>a</i>发生变化时计算,而不是<i>enable</i>发生变化的时候。还需要注意:<span style="color: #0000FF">iff</span>比<span style="color: #0000FF">or</span>具有更高的优先级。我们可以使用圆括号使这层含义更加清晰。 </p>
<p class="Element10">
</p>
<p class="Element10">
如果变量不是一个四态类型,那么<span style="color: #0000FF">posedge</span>和<span style="color: #0000FF">negedge</span>分别指的是从<span style="color: #FF0000">0</span>和到<span style="color: #FF0000">0</span>的跃变。 </p>
<p class="Element10">
</p>
<p class="Element10">
如果这个表达式表示一个时钟控制块的输入或双向端口(参见<a href="00871.html" target="topic">第十五章</a>),那么事件控制操作符使用同步的值,也就是时钟控制事件采样的值。表达式也可以表示一个由时钟控制事件触发的时钟控制块的名字(没有沿限定符)。 </p>
<p class="Element10">
</p>
<p class="Element10">
与事件控制一起使用的变量可以是任意integral数据类型(参见<a href="00390.html" target="topic">3.3.1节</a>)或者是字符串。这个变量可以是一个简单的变量也可以是<span style="color: #0000FF">ref</span>自变量(通过引用传递的变量);它可以是上述类型的数组、联合数组、或对象(类实例)的成员。 </p>
<p class="Element10">
</p>
<p class="Element10">
事件表达式必须返回单一值。如果表达式能够缩减到一个单一值,集合类型也可以使用在表达式中。对象成员或集合元素可以是任意类型,只要表达式的结果是一个单一值。 </p>
<p class="Element10">
</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -