📄 vlog_ref_body.html
字号:
<li><i>Behavioral</i> - modeled with procedural blocks or continuous assignment statements.</li>
<li><i>Structural</i> - modeled as a netlist of module instances or primitive instances.</li>
<li>A combination of behavioral and structural.</li>
</ul>
<li>Module definitions may not be nested. Instead, modules instantiate other modules.</li>
<li>Module definitions may be expressed using <a href="#8.0 Module Instances">parameter
constants</a>. Each instance of a module may redefine the parameters to be unique to that
instance. </li>
<li>Module items may appear in any order, but port declarations and data type declarations
should be listed before the ports or signals are referenced.</li>
</ul>
<hr>
<h3><a name="6.0 Module Port Declarations"><font color="#0000FF">6.0 Module Port
Declarations</font></a></h3>
<div align="center"><center>
<table border="1" cellspacing="1" cellpadding="4" width="430" BGcolor="#FFFFFF">
<tr>
<td><p align="center"><b>Syntax</b></td>
</tr>
<tr>
<td><a href="#port_direction">port_direction</a> <code><font color="#FF0000">[</font></code><a href="#port_size">port_size</a><code><font color="#FF0000">]</font></code> <font color="#00AA00"><i>port_name</i></font><code><font color="#FF0000">, </font></code><font color="#00AA00"><i>port_name</i></font><code><font color="#FF0000">,</font><font color="#00AA00"> </code>...</font> <code><font color="#FF0000">;</font></code></td>
</tr>
</table>
</center></div>
<p><a name="port_direction"><font color="#0000FF"><i>port_direction</i></font></a> is
declared as:<br>
<ul type="disc">
<li><code><font color="#FF0000">input</font></code> for scalar or vector input ports.</li>
<li><code><font color="#FF0000">output</font></code> for scalar or vector output ports.</li>
<li><code><font color="#FF0000">inout</font></code> for scalar or vector bi-directional
ports.</li>
</ul>
<p><a name="port_size"><font color="#0000FF"><i>port_size</i></font></a> is a range from <code><font color="#FF0000">[</font></code><font color="#00AA00"><i> msb</i></font> <code><font color="#FF0000">:</font></code><font color="#00AA00"><i> lsb</i></font> <code><font color="#FF0000">]</font></code> (most-significant-bit to least-significant-bit).<br>
<ul type="disc">
<li>The <font color="#00AA00"><i>msb</i></font> and <font color="#00AA00"><i>lsb</i></font>
must be literal integers, integer parameters, or an expression that resolves to an integer
constant.</li>
<li>Either little-endian convention (the lsb is the smallest bit number) or big-endian
convention (the lsb is the largest bit number) may be used.</li>
<li>The maximum port size may be limited, but will be at least 256 bits.</li>
</ul>
<p> </p>
<div align="center"><center>
<table border="1" cellspacing="1" cellpadding="4" width="500" BGcolor="#E0E0E0">
<tr>
<td width="50%"><p align="center"><b>Examples</b></td>
<td width="50%"><p align="center"><b>Notes</b></td>
</tr>
<tr>
<td width="50%"><code><font color="#00AA00">input a,b,sel;</font></code></td>
<td width="50%">3 scalar ports</td>
</tr>
<tr>
<td width="50%"><code><font color="#00AA00">output [7:0] result;</font></code></td>
<td width="50%">little endian convention</td>
</tr>
<tr>
<td width="50%"><code><font color="#00AA00">inout [0:15] data_bus;</font></code></td>
<td width="50%">big endian convention</td>
</tr>
<tr>
<td width="50%"><code><font color="#00AA00">input [15:12] addr;</font></code></td>
<td width="50%">msb:lsb may be any integer</td>
</tr>
<tr>
<td width="50%"><code><font color="#00AA00">parameter word = 32;<br>
input [word-1:0] addr;</font></code></td>
<td width="50%">constant expressions may be used</td>
</tr>
</table>
</center></div>
<p> </p>
<hr>
<h3><a name="7.0 Data Type Declarations"><font color="#0000FF">7.0 Data Type Declarations</font></a></h3>
<div align="center"><center>
<table border="1" cellspacing="1" cellpadding="4" width="650" BGcolor="#FFFFFF">
<tr>
<td><p align="center"><b>Syntax</b></td>
</tr>
<tr>
<td><a href="#7.1 Register Data Types">register_type</a> <code><font color="#FF0000">[</font></code><a href="#size">size</a><code><font color="#FF0000">] </font></code><font color="#00AA00"><i>variable_name</i></font>
<code><font color="#FF0000">, </font></code><font color="#00AA00"><i>variable_name</i></font>
<code><font color="#FF0000">,</font><font color="#00AA00"> </code>...</font> <code><font color="#FF0000">;</font></code></td>
</tr>
<tr>
<td><a href="#7.1 Register Data Types">register_type</a> <code><font color="#FF0000">[</font></code><a href="#size">size</a><code><font color="#FF0000">] </font></code><font color="#00AA00"><i>memory_name</i></font>
<code><font color="#FF0000">[</font></code><a href="#array_size">array_size</a><code><font color="#FF0000">];</font></code></td>
</tr>
<tr>
<td><a href="#7.2 Net Data Types">net_type</a> <code><font color="#FF0000">[</font></code><a href="#size">size</a><code><font color="#FF0000">] #(</font></code><a href="#delay">delay</a><code><font color="#FF0000">) </font></code><font color="#00AA00"><i>net_name</i></font> <code><font color="#FF0000">, </font></code><font color="#00AA00"><i>net_name</i></font> <code><font color="#FF0000">,</font><font color="#00AA00"> </code>...</font> <code><font color="#FF0000">;</font></code></td>
</tr>
<tr>
<td><a href="#7.2 Net Data Types">net_type</a> <code><font color="#FF0000">(</font></code><a href="#strength">drive_strength</a><code><font color="#FF0000">) [</font></code><a href="#size">size</a><code><font color="#FF0000">] #(</font></code><a href="#delay">delay</a><code><font color="#FF0000">) </font></code><font color="#00AA00"><i>net_name</i></font> <code><font color="#FF0000">= </font></code><a href="#12.0 Continuous Assignments">continuous_assignment</a>
<code><font color="#FF0000">;</font></code></td>
</tr>
<tr>
<td><code><font color="#FF0000">trireg (</font></code><a href="#strength">capacitance_strength</a><font color="#FF0000">) [</font><a href="#size">size</a><code><font color="#FF0000">] #(</font></code><a href="#delay">delay</a><code><font color="#FF0000">, </font></code><a href="#decay_time">decay_time</a><code><font color="#FF0000">) </font></code><font color="#00AA00"><i>net_name</i></font><code><font color="#FF0000">, </font></code><font color="#00AA00"><i>net_name</i></font><code><font color="#FF0000">,</font> </code><font color="#00AA00">...</font><code><font color="#FF0000"> ;</font></code></td>
</tr>
<tr>
<td><code><font color="#FF0000">parameter</font></code> <font color="#00AA00"><i>constant_name</i></font><code><font color="#FF0000"> = </font></code><font color="#00AA00"><i>value</i></font><code><font color="#FF0000">,</font></code> <font color="#00AA00"><i>constant_name</i></font><code><font color="#FF0000"> = </font></code><font color="#00AA00"><i>value</i></font><code><font color="#FF0000">, </font></code><font color="#00AA00">...</font><code><font color="#FF0000"> ;</font></code></td>
</tr>
<tr>
<td><code><font color="#FF0000">specparam</font></code> <font color="#00AA00"><i>constant_name</i></font><code><font color="#FF0000"> = </font></code><font color="#00AA00"><i>value</i></font><code><font color="#FF0000">,</font></code> <font color="#00AA00"><i>constant_name</i></font><code><font color="#FF0000"> = </font></code><font color="#00AA00"><i>value</i></font><code><font color="#FF0000">, </font></code><font color="#00AA00">...</font><code><font color="#FF0000"> ;</font></code></td>
</tr>
<tr>
<td BGcolor="#FFFFFF" width="663"><code><font color="#FF0000">event</font></code> <font color="#00AA00"><i>event_name</i></font><code><font color="#FF0000">, </font></code><font color="#00AA00"><i>event_name</i></font><code><font color="#FF0000">, </font></code><font color="#00AA00">...</font><code><font color="#FF0000"> ;</font></code></td>
</tr>
</table>
</center></div>
<p><a name="delay"><font color="#0000FF"><i>delay</i></font></a> (optional) may only be
specified on net data types. The syntax is the same as <a href="#Primitive Delay Syntax">primitive
delays</a>.</p>
<p><a name="size"><font color="#0000FF"><i>size</i></font></a> is a range from <code><font color="#FF0000">[</font></code><font color="#00AA00"><i>msb</i></font> <code><font color="#FF0000">:</font></code> <font color="#00AA00"><i>lsb</i></font><code><font color="#FF0000">]</font></code> (most-significant-bit to least-significant-bit).<br>
<ul type="disc">
<li>The <font color="#00AA00"><i>msb</i></font> and <font color="#00AA00"><i>lsb</i></font>
must be integers, integer parameters or an expression that resolves to an integer
constant.</li>
<li>Either little-endian convention (the lsb is the smallest bit number) or big-endian
convention (the lsb is the largest bit number) may be used.</li>
<li>The maximum vector size is at least 65,536 bits (2<sup>16</sup>).</li>
</ul>
<p><a name="array_size"><font color="#0000FF"><i>array_size</i></font></a> is from <code><font color="#FF0000">[</font></code> <font color="#00AA00"><i>first_address</i></font> <code><font color="#FF0000">:</font></code> <font color="#00AA00"><i>last_address</i></font><code><font color="#FF0000">]</font></code>.</p>
<p><i><font color="#00AA00">first_address</font></i> and <font color="#00AA00"><i>last_address</i></font>
must be integers, integer parameters, or an expression that resolves to integer.<br>
<ul type="disc">
<li>Either ascending or descending address order may be used.</li>
<li>The maximum array size is at least 16,777,216 words (2<sup>24</sup>).</li>
</ul>
<p><a name="strength"><font color="#0000FF"><i>strength</i></font></a> (optional) is
specified as <code><font color="#FF0000">(</font></code><font color="#00AA00"><i>strength1</i></font><code><font color="#FF0000">,</font></code> <font color="#00AA00"><i>strength0</i></font><code><font color="#FF0000">)</font></code> or <code><font color="#FF0000">(</font></code><font color="#00AA00"><i>strength0</i></font><code><font color="#FF0000">,</font></code> <font color="#00AA00"><i>strength1</i></font><code><font color="#FF0000">)</font></code>. See <a href="#4.6 Logic Strengths">Logic Strengths</a> for keywords.</p>
<p><a name="decay_time"><font color="#0000FF"><i>decay_time</i></font></a> (optional)
specifies the amount of time a trireg net will store a charge after all drivers turn-off,
before decaying to logic X. The syntax is <code><font color="#FF0000">(</font></code><font color="#00AA00"><i>rise_delay</i></font><code><font color="#FF0000">,</font></code> <font color="#00AA00"><i>fall_delay</i></font><code><font color="#FF0000">,</font></code> <font color="#00AA00"><i>decay_time</i></font><code><font color="#FF0000">)</font></code>. The
default decay is infinite.</p>
<h4><a name="7.1 Register Data Types"><font color="#0000FF">7.1 Register Data Types</font></a></h4>
<div align="center"><center>
<table border="1" cellspacing="1" cellpadding="4" width="425" BGcolor="#FFFFFF">
<tr>
<td width="150"><p align="center"><b>Keyword</b></td>
<td width="275"><p align="center"><b>Functionality</b></td>
</tr>
<tr>
<td width="150"><p align="center"><font color="#FF0000"><code>reg</code></font></td>
<td width="275">unsigned variable of any bit size</td>
</tr>
<tr>
<td width="150"><p align="center"><font color="#FF0000"><code>integer</code></font></td>
<td width="275">signed 32-bit variable</td>
</tr>
<tr>
<td width="150"><p align="center"><font color="#FF0000"><code>time</code></font> </td>
<td width="275">unsigned 64-bit variable</td>
</tr>
<tr>
<td width="150"><p align="center"><font color="#FF0000"><code>real</code></font> or <font color="#FF0000"><code>realtime</code></font></td>
<td width="275">double-precision floating point variable</td>
</tr>
</table>
</center></div>
<p>Register data types are used as variables in procedural blocks.<br>
<ul type="disc">
<li>Registers store logic values only (no logic strength).</li>
<li>A register data type must be used when the signal is on the left-hand side of a
procedural assignment.</li>
</ul>
<h4><a name="7.2 Net Data Types"><font color="#0000FF">7.2 Net Data Types</font></a></h4>
<div align="center"><center>
<table border="1" cellspacing="1" cellpadding="4" width="500" BGcolor="#FFFFFF">
<tr>
<td width="20%"><p align="center"><b>Keyword</b></td>
<td width="80%"><p align="center"><b>Functionality</b></td>
</tr>
<tr>
<td width="20%" align="center"><font color="#FF0000"><code>wire</code></font> or <font color="#FF0000"><code>tri</code></font></td>
<td width="80%">Simple interconnecting wire</td>
</tr>
<tr>
<td width="20%" align="center"><font color="#FF0000"><code>wor</code></font> or <font color="#FF0000"><code>trior</code></font></td>
<td width="80%">Wired outputs OR together</td>
</tr>
<tr>
<td width="20%" align="center"><font color="#FF0000"><code>wand</code></font> or <font color="#FF0000"><code>triand</code></font></td>
<td width="80%">Wired outputs AND together</td>
</tr>
<tr>
<td width="20%" align="center"><font color="#FF0000"><code>tri0</code></font></td>
<td width="80%">Pulls down when tri-stated</td>
</tr>
<tr>
<td width="20%" align="center"><font color="#FF0000"><code>tri1</code></font></td>
<td width="80%">Pulls up when tri-stated</td>
</tr>
<tr>
<td width="20%" align="center"><font color="#FF0000"><code>supply0</code></font></td>
<td width="80%">Constant logic 0 (supply strength)</td>
</tr>
<tr>
<td width="20%" align="center"><font color="#FF0000"><code>supply1</code></font></td>
<td width="80%">Constant logic 1 (supply strength)</td>
</tr>
<tr>
<td width="20%" align="center"><font color="#FF0000"><code>trireg</code></font></td>
<td width="80%">Stores last value when tri-stated (capacitance strength)</td>
</tr>
</table>
</center></div>
<p>Net data types connect structural components together.<br>
<ul type="disc">
<li>Nets transfer both logic values and logic strengths.</li>
<li>A net data type must be used when:</li>
<ul type="disc">
<li>A signal is driven by the output of some device.</li>
<li>A signal is also declared as an input port or inout port.</li>
<li>A signal is on the left-hand side of a continuous assignment.</li>
</ul>
</ul>
<h4><a name="7.3 Other Data Types"><font color="#0000FF">7.3 Other Data Types</font></a></h4>
<div align="center"><center>
<table border="1" cellspacing="1" cellpadding="4" width="525" BGcolor="#FFFFFF">
<tr>
<td width="20%"><p align="center"><b>Other Types</b></td>
<td width="80%"><p align="center"><b>Functionality</b></td>
</tr>
<tr>
<td width="20%"><p align="center"><font color="#FF0000"><code>parameter</code></font></td>
<td width="80%">Run-time constant for storing integers, real numbers, time, delays, or
ASCII strings. Parameters may be <a href="#8.0 Module Instances">redefined</a> for each
instance of a module.</td>
</tr>
<tr>
<td width="20%"><p align="center"><font color="#FF0000"><code>specparam</code></font></td>
<td width="80%">Specify block constant for storing integers, real numbers, time, delays or
ASCII strings</td>
</tr>
<tr>
<td width="20%"><p align="center"><font color="#FF0000"><code>event</code></font></td>
<td width="80%">A momentary flag with no logic value or data storage. Often used for
synchronizing concurrent activities within a module.</td>
</tr>
</table>
</center></div>
<p> </p>
<h4><font color="#0000FF">7.4 Data Type Declaration Examples</font></h4>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -