⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00875.html

📁 这是一本关于verilog编程语言的教程,对学习verilog语言有帮助
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<title>第五章 数据声明</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', '00875.html');" onmousedown="onBodyMouseDown();">

<!-- Begin Popups -->
<div class="Element801" id="popup00102">
<div class="Element800">
<div class="Element14">
链接</div>
<div class="Element11">
<div class="Element10">
<a href="00907.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, 'popup00102');"><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="00521.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><img src="btn_up_d.gif" border="0" alt="Up" title="Up"><a href="00540.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">
第五章 数据声明</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="Element14">
<a onclick="toggleVisibilityStored('主题');" class="a_Element14"><img src="sectionminus.png" border="0" alt="" title="" id="img主题">主题</a></div>
<div id="div主题">
<div class="Element11">
<div class="Element10">
<div class="Element212">
<div class="TableDiv">
<table cellspacing="0" class="Table0">
<tr>
<td class="Element200" valign="top" width="50%">
<div class="Element201">
主题&nbsp;</div></td><td class="Element204" valign="top" width="50%">
<div class="Element205">
描述&nbsp;</div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00540.html" target="topic">5.1 简介(一般信息)</a>&nbsp;</div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
在SystemVerilog中存在几种形式的数据:文本值(参见<a href="00857.html" target="topic">第二章</a>)、参数(参见第<a href="00855.html" target="topic">二十一章</a>)、常量、变量、线网、以及属性(参见<a href="00859.html" target="topic">第六章</a>)。<br><br>在Verilog-2001中,常量可以是文本值、<span style="color: #0000FF">genvar</span>参数、<span style="color: #0000FF">localparam</span>和<span style="color: #0000FF">specparam</span>。Verilog-2001还具有变量和线网。变量必须使用过程语句写入,线网必须通过连续赋值或端口写入。<br><br>SystemVerilog扩展了变量的功能,变量既可以使用过程语句写入,也可以像<span style="color: #0000FF">wire</span>那样使用单一的连续赋值进行驱动。由于关键字<span style="color: #0000FF">reg</span>在许多情况下不再描述用户意图,所以加入了关键字<span style="color: #0000FF">logic</span>作为等价于<span style="color: #0000FF">reg</span>的更为精确的描述。Verilog-2001已经不赞成使用术语“寄存器”,取而代之的是术语“变量”。<br><br>除了隐式线网之外,SystemVerilog遵从Verilog中关于数据必须在其使用之前声明的规定。隐式线网的规则与Verilog-2001中的规定相同。<br><br>变量可以是静态的(在实例化的时候分配存储空间并且永远不会释放),也可以自动的(在进入变量作用范围(例如任务、函数或块)时分配并在退出时释放)。C语言具有static和auto关键字。SystemVerilog遵从Verilog中关于静态缺省存储类,以及自动的任务和函数的规则,但允许在这些任务和函数中使用静态存储覆盖一个特定变量的动态存储。&nbsp;</div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00541.html" target="topic">5.2 数据声明语法</a>&nbsp;</div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
&nbsp;</div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00542.html" target="topic">5.3 常量</a>&nbsp;</div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
常量是永远也不会改变的命名数据变量。SystemVerilog中有三种类型的常量,它们分别使用关键字<span style="color: #0000FF">localparam</span>、<span style="color: #0000FF">specparam</span>和<span style="color: #0000FF">const</span>声明。所有这三种类型的常量都使用一个文本值来初始化。 &nbsp;</div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00543.html" target="topic">5.4 变量</a>&nbsp;</div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
变量声明包含一个数据类型紧跟着一个或多个变量实例。 &nbsp;</div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00544.html" target="topic">5.5 作用范围与生命周期</a>&nbsp;</div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
在模块、接口、任务或函数外声明的任何数据都具有全局的作用范围(可以在其声明后的任何地方使用),并且具有一个静态的生命周期(在整个确立和仿真时间内存在)。<br><br>在模块或接口内但在任务、进程或函数之外声明的SystemVerilog数据具有本地的作用范围,并具有静态的生命周期(在模块或接口的生命周期内存在)。这大致等价于C语言中在函数外声明的静态数据,它对于文件来说是本地的。<br><br>在自动任务、函数或块内声明的数据具有调用期或激活期内的生命周期,并且具有本地的作用范围。这大致等价于C的自动变量。<br><br>在一个静态任务、函数或块内声明的数据缺省情况下具有静态的生命周期并具有本地的作用范围。<br><br>注意:在SystemVerilog中,数据既可以在未命名的块中声明也可以在命名的块中声明。这些数据对未命名的块及其底层的嵌套块都是可见的。但不能使用层次化引用来通过名字访问数据。<br><br>Verilog-2001允许将任务和函数声明成<span style="color: #0000FF">automatic</span>的,这使得任务或函数内的所有存储空间都是自动的。SystemVerilog允许一个静态任务或函数内的特定数据被显式地声明成<span style="color: #0000FF">automatic</span>的。声明成自动的数据具有调用或块内的生命周期,并且在每次进入调用或块内的时候进行初始化。<span style="color: #0000FF">fork...jion</span>、<span style="color: #0000FF">fork...jion_any</span>或<span style="color: #0000FF">fork...join_one</span>块的生命周期应该包含块内所有进程的执行。一个包含任何<span style="color: #0000FF">fork...jion</span>块范围的生命周期包括<span style="color: #0000FF">fork...jion</span>块的生命周期。<br><br>SystemVerilog也允许数据被显式地声明成静态的。在一个自动任务、函数或块内声明的静态数据具有静态的生命周期并且对于块来说具有本地的作用范围。这类似于C语言中在一个函数内声明的静态数据。 &nbsp;</div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00545.html" target="topic">5.6 线网、reg、与logic</a>&nbsp;</div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
Verilog-2001指出,线网可以使用一个或多个连续赋值语句、原语输出或模块端口写入。多驱动的结果值由线网类型的解析函数确定。线网不能使用过程赋值语句。如果端口一侧的线网被端口另一侧的变量所驱动,那么隐含是连续赋值。<span style="color: #0000FF">force</span>语句可以覆盖线网的值。当其被释放以后,线网返回到解析的值。<br><br>Verilog-2001还指出,一个或多个过程语句可以对变量执行写操作,包括过程连续赋值。最后一次执行的写入操作确定变量的值。变量不能被连续赋值。<span style="color: #0000FF">force</span>语句覆盖过程赋值语句,它轮流覆盖正常的赋值。变量不能通过端口写入,它必须通过一个隐含的由连续赋值驱动的线网写入。<br><br>在SystemVerilog中,所有变量现在都可以通过连续赋值写入,或者通过一个或多个过程语句写入,包括过程连续赋值。在一个被写入的逻辑变量的最长静态前缀扩展中(关于一个最长静态前缀扩展的定义,参见<a href="00598.html" target="topic">9.2.1节</a>),对其中任何项使用连续赋值或过程赋值与连续赋值的混合来执行写入操作都是错误的。所有数据类型都可以通过一个端口写入。<br><br>SystemVerilog变量可以是其它数据类型的压缩或非压缩集合。对变量中独立元素的多个赋值被单独地检查。左侧包含了一个分片的赋值被看作是对整个分片的单一赋值。使用过程赋值与连续赋值的混合形式写入一个压缩结构体或压缩数组类型是错误的。因此,一个非压缩结构体或非压缩数组中的一个元素可以过程化赋值,而另一个元素可以进行连续赋值。并且,一个压缩结构体或压缩数组的每一个元素都可以使用单一的连续赋值。例如,对于下面的结构体声明: &nbsp;</div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00546.html" target="topic">5.7 信号别名</a>&nbsp;</div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
Verilog <span style="color: #0000FF">assign</span>语句是单向赋值并可以结合一个延时和强度变化。为了建模一个双向短路连接,很有必要使用<span style="color: #0000FF">alias</span>语句。一个别名列表的成员是那些共享相同物理网络的信号。下面的例子实现了总线<i>A</i>和总线<i>B</i>之间的字节顺序交换。 &nbsp;</div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00547.html" target="topic">5.8 类型兼容性</a>&nbsp;</div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
为了使操作数是合法的,某些SystemVerilog结构和操作要求某种程度的类型兼容。SystemVerilog具有四种层次的类型兼容,形式上进行如下的定义:等价、赋值兼容、强制转换兼容、以及不等价。<br><br>注意:这里没有定义相同类型这一类别,因为SystemVerilog语言中没有哪种结构需要这种类别。例如,就像下面定义的那样,<span style="color: #0000FF">int</span>可以与<span style="color: #0000FF">bit signed</span> <span style="color: #800080">[</span><span style="color: #FF0000">0</span><span style="color: #800080">:</span><span style="color: #FF0000">31</span><span style="color: #800080">]</span>互换,只要在语法上这样做是合法的。用户可以使用<span style="color: #0000FF">$typename</span>系统函数(参见<a href="00283.html" target="topic">23.3节</a>,typname函数)或通过使用PLI来定义自己的类型标识层次。&nbsp;</div></td></tr></table></div></div>
</div>
</div>
</div>
<a name="Links"></a><div class="Element14">
<a onclick="toggleVisibilityStored('链接');" class="a_Element14"><img src="sectionminus.png" border="0" alt="" title="" id="img链接">链接</a></div>
<div id="div链接">
<div class="Element11">
<div class="Element10">
<a href="00907.html" target="topic">主题</a></div>
</div>
</div>
</div>
<!-- End Page Content -->

<!-- Begin Page Footer -->
<hr width="98%" align="center" size="1" color="#CCCCCC" />
<table align="center" cellpadding="0" cellspacing="0" border="0">
	<tbody>
		<tr height="10">
			<td></td>
		</tr>
		<tr align="center">
			<td>
<script type="text/javascript"><!--
google_ad_client = "pub-5266859600380184";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_ad_channel ="";
google_page_url = document.location;
//--></script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
			</td>
		</tr>
		<tr height="15">
			<td></td>
		</tr>
		<tr align="center">
			<td>
				<font size=2>除非特别声明,原文版权归作者所有,如有转摘请注明原作者以及译者(<a href="http://www.fpgatech.net/"  target="_blank">FPGA技术网</a>)信息。<br />
如果您对本主题有何建议或意见,请登陆<a href="http://www.fpgatech.net/forum/forumdisplay.php?fid=18" target="_blank">FPGA开发者家园</a>提交,您的参与是我们前进的动力。</font>
<script language="javascript" type="text/javascript" src="http://js.users.51.la/195685.js"></script>
<noscript><a href="http://www.51.la/?195685" target="_blank"><img alt="&#x6211;&#x8981;&#x5566;&#x514D;&#x8D39;&#x7EDF;&#x8BA1;" src="http://img.users.51.la/195685.asp" style="border:none" /></a></noscript>
			</td>
		</tr>
	</tbody>
</table>

<!-- End Page Footer -->
</div>
</div>

<!-- End Client Area -->
</body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -