<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[蓝水映像 - FPGA]]></title>
<link>http://www.blovewater.com/</link>
<description><![CDATA[]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[boruan@gmail.com(蓝水映像)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>蓝水映像</title>
	<url>http://www.blovewater.com/images/logos.gif</url>
	<link>http://www.blovewater.com/</link>
	<description>蓝水映像</description>
</image>

			<item>
			<link>http://www.blovewater.com/article.asp?id=22</link>
			<title><![CDATA[SystemVerilog学习笔记(7) ------ 结构体(2)]]></title>
			<author>boruan@gmail.com(蓝水映像)</author>
			<category><![CDATA[FPGA]]></category>
			<pubDate>Sun,11 Jan 2009 01:08:38 +0800</pubDate>
			<guid>http://www.blovewater.com/default.asp?id=22</guid>
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SystemVerilog 中的结构体分为压缩和非压缩结构体.</p>
<div class="codeText">
<div class="codeHead">SystemVerilog代码</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">typedef</span><span>&nbsp;</span><span class="keyword">struct</span><span>&nbsp;</span><span class="keyword">packed</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">bit</span><span>&nbsp;[7:0]&nbsp;&nbsp;&nbsp;main_ver;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">bit</span><span>&nbsp;[15:0]&nbsp;&nbsp;sub_ver;&nbsp;&nbsp;</span></span></li>
    <li><span>}version;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 计算机在处理一般的结构体时, 对于结构体中的成员处理的方式仍是按一般的数据类型对待的. 如在处理 byte 类型的数据时, 计算机可能按照 32 bit 处理, 因为对于一般的 32 位操作系统来说,处理 32 位数据比 8 位数据可能要简单, 因此, 8 bit 的数据所占的内存空间可能不是 8 bit, 而是 32 bit. 这种情况实际在 C 语言中也有的. C 中也有相应的编译参数来处理这种情况. 这种占用空间可能比变量实际大小要大的情况, 有时对于处理数据会很不方便, 所以在 SystemVerilog 中, 可以用 packed 声名方式来避免这种问题.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于压缩结构体, 计算机会把其整体看作是一个向量来处理, 结构体中的成员在内存中是连续存放的. 所以压缩结构体的成员必须是整型数据, 不能是 real, shorreal 以及非压缩结构体, 非压缩的联合体, 非压缩数组.</p>
<div class="codeText">
<div class="codeHead">SystemVerilog代码</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span>version&nbsp;ver_0,&nbsp;ver_1;&nbsp;&nbsp;</span></span></li>
    <li><span>ver_0[23:16]&nbsp;=&nbsp;8'h1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;用向量的方式来访问压缩结构体.</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>ver_0[15:0]&nbsp;&nbsp;=&nbsp;16'h0a;&nbsp;&nbsp;</span></li>
    <li><span>ver_1&nbsp;=&nbsp;ver_0&nbsp;&lt;&lt;&nbsp;2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="comment">//&nbsp;把压缩结构体当作整体来参加运算.</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为压缩结构体是被当作向量来处理的, 所以压缩结构体还可以加上 signed, unsigned 标志. 这个符号标志是针对压缩结构体整体的, 不会影响到结构体内部的成员.</p>
<div class="codeText">
<div class="codeHead">SystemVerilog代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">typedef</span><span>&nbsp;</span><span class="keyword">struct</span><span>&nbsp;</span><span class="keyword">packed</span><span>&nbsp;</span><span class="keyword">signed</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">bit</span><span>&nbsp;[15:0]&nbsp;hi_bit;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">bit</span><span>&nbsp;[15:0]&nbsp;lo_bit;&nbsp;&nbsp;</span></span></li>
    <li><span>}data;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.blovewater.com/article.asp?id=21</link>
			<title><![CDATA[SystemVerilog学习笔记(6) ------ 结构体(1)]]></title>
			<author>boruan@gmail.com(蓝水映像)</author>
			<category><![CDATA[FPGA]]></category>
			<pubDate>Fri,09 Jan 2009 00:47:41 +0800</pubDate>
			<guid>http://www.blovewater.com/default.asp?id=21</guid>
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SystemVerilog的结构体声名和C中的声名类似, 有匿名结构体和自定义结构体. 和C不同的是, SystemVerilog在声名结构体时, 大括号左边不能像C可以有个标识符.</p>
<div class="codeText">
<div class="codeHead">SystemVerilog代码</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">struct</span><span>&nbsp;[</span><span class="keyword">packed</span><span>[signing]]{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="comment">//&nbsp;匿名结构体</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;struct_members<br />
    </span></li>
    <li class="alt"><span>}struct_variable_name;<br />
    </span></li>
    <li>&nbsp;</li>
    <li class="alt"><span><span class="keyword">typedef</span><span>&nbsp;</span><span class="keyword">struct</span><span>&nbsp;[</span><span class="keyword">packed</span><span>[signing]]{&nbsp;&nbsp;</span><span class="comment">//&nbsp;自定义类型结构体</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;struct_members</span></li>
    <li class="alt"><span>}struct_type;<br />
    </span></li>
    <li class="alt"><span>struct_type struct_variable_name;&nbsp; <span class="comment">//&nbsp;声名结构体变量</span></span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 结构体中的成员变量在定义结构体时就可以一并赋上初值, 也可以在声名变量时赋初值.</p>
<div class="codeText">
<div class="codeHead">SystemVerilog代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">typedef</span><span>&nbsp;</span><span class="keyword">struct</span><span>{&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;&nbsp;i_a&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;定义结构体时赋初值</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;&nbsp;i_b&nbsp;=&nbsp;1;&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">real</span><span>&nbsp;r_c;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}data_t;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>data_t&nbsp;data1&nbsp;=&nbsp;'{2,&nbsp;3,&nbsp;4};&nbsp;<span class="comment">/*&nbsp;定义变量时赋初值,&nbsp;值的顺序要得结构体中</span>&nbsp;</span></li>
    <li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;定义的顺序一致&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>data_t&nbsp;data2&nbsp;=&nbsp;'{i_b:5,&nbsp;i_a:6,&nbsp;r_c:7.0};&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/*&nbsp;按成员名称来赋值,&nbsp;用这种方式赋值时,&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;所有的量都要用成员名来赋值.&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>data_t&nbsp;data3&nbsp;=&nbsp;'{<span class="keyword">default</span><span>:0};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;所在成员设置成0.</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>data_t&nbsp;data4&nbsp;=&nbsp;'{<span class="keyword">int</span><span>:8,&nbsp;</span><span class="keyword">real</span><span>:9.0};&nbsp;</span><span class="comment">//&nbsp;按成员类型赋值.</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>data_t&nbsp;data5&nbsp;=&nbsp;'{<span class="keyword">int</span><span>:10,&nbsp;</span><span class="keyword">default</span><span>:0,&nbsp;i_b:11};&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/*&nbsp;混合赋值时,&nbsp;成员名优先级最高,</span>&nbsp;</span></li>
    <li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;数据类型其次,&nbsp;default最低.&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>]]></description>
		</item>
		
			<item>
			<link>http://www.blovewater.com/article.asp?id=20</link>
			<title><![CDATA[SystemVerilog学习笔记(5) ------ 枚举(2)]]></title>
			<author>boruan@gmail.com(蓝水映像)</author>
			<category><![CDATA[FPGA]]></category>
			<pubDate>Sat,03 Jan 2009 01:36:50 +0800</pubDate>
			<guid>http://www.blovewater.com/default.asp?id=20</guid>
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SV 中的枚举类型是一种强类型, 不象 Verilog 中各种类型可以相互随意赋值. 在 SV 中对枚举类型赋值有 3 种方法:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 用枚举类型中的标签对枚举变量赋值.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 同一枚举类型定义的不同变量间相互赋值.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. 用强制类型转换.</p>
<div class="codeText">
<div class="codeHead" style="text-align: left">SystemVerilog代码</div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">typedef</span><span>&nbsp;</span><span class="keyword">enum</span><span>&nbsp;{red,&nbsp;green,&nbsp;yellow}&nbsp;Colors; &nbsp;&nbsp;</span></span></li>
    <li><span>Colors&nbsp;col_0,&nbsp;col_1,&nbsp;col_2; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>col_0&nbsp;=&nbsp;red; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>col_0&nbsp;=&nbsp;green; &nbsp;&nbsp;</span></li>
    <li><span>col_0&nbsp;=&nbsp;yellow;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;用标签对枚举变量赋值. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>col_1&nbsp;=&nbsp;col_0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;同类型枚举变量间赋值. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>col_2&nbsp;=&nbsp;Colors'(0);&nbsp;&nbsp;</span><span class="comment">//&nbsp;强制类型转换赋值. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="vars">$cast</span>(col_2,&nbsp;1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;动态强制类型转换.&nbsp;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 枚举类型中的标签可以被直接引用, 用来给其它变量赋值或参与运算.</p>
<div class="codeText">
<div class="codeHead">SystemVerilog代码</div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">typedef</span><span>&nbsp;</span><span class="keyword">enum</span><span>&nbsp;{red,&nbsp;green,&nbsp;yellow}&nbsp;Colors;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">typedef</span><span>&nbsp;</span><span class="keyword">enum</span><span>&nbsp;{Mo,Tu,We,Th,Fr,Sa,Su}&nbsp;Week;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>Colors&nbsp;col_0;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>Week&nbsp;week_0,&nbsp;week_1;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">int</span><span>&nbsp;i,&nbsp;j;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>col_0&nbsp;=&nbsp;green;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>week_0&nbsp;=&nbsp;We;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>i&nbsp;=&nbsp;col_0&nbsp;+&nbsp;week_0;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;枚举类型可以自动转换成&nbsp;int&nbsp;类型.&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span>j&nbsp;=&nbsp;red+&nbsp;We;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;直接用标签进行赋值.&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>week_1&nbsp;=&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;错误的,&nbsp;int不能自动转换到枚举类型. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>week_1&nbsp;=&nbsp;week_0&nbsp;+&nbsp;1;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;错误的,&nbsp;等式右边在做运算时已经转换 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="comment">//&nbsp;成整形,&nbsp;不能再直接赋值给枚举类型变量.</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SV 中为了方便枚举类型的使用, 提供了一些方法.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. first()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回枚举类型的第一个值.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. last()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回枚举类型的最后一个值.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. next()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回枚举类型的下一个值. 如果当前值是最后一个则返回第一个值.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. prev()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回枚举类型的前一个值. 如果当前值是第一个则返回最后一个值.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5. num()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回枚举类型中标签的个数.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6. name()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据所给的值返回标签名称字符串, 如果值不在枚举类型中,则返回一个空字符串.</p>]]></description>
		</item>
		
			<item>
			<link>http://www.blovewater.com/article.asp?id=16</link>
			<title><![CDATA[SystemVerilog学习笔记(4) ------ 枚举(1)]]></title>
			<author>boruan@gmail.com(蓝水映像)</author>
			<category><![CDATA[FPGA]]></category>
			<pubDate>Sat,27 Dec 2008 18:33:29 +0800</pubDate>
			<guid>http://www.blovewater.com/default.asp?id=16</guid>
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SV 中的枚举类型和 C 中的枚举类型差不多, 但 SV 中的枚举的定义比 C 中的要多一种东西, SV 中的枚举可以定义枚举中成员的类型. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;和 C 中一样, SV 中的枚举在不定义数据类型时, 默认为 int. 当然也可以定义为 integer, bit 等整型.</p>
<table cellspacing="0" cellpadding="5" width="550" align="center" bgcolor="#ffffcc" border="0">
    <tbody>
        <tr>
            <td><span style="color: #0000ff"><span style="font-family: Courier New">enum</span></span><span style="font-family: Courier New"> <span style="color: #000000">{red, yellow, green} color1;</span><br />
            <span style="color: #0000ff">enum integer</span> <span style="color: #000000">{red, yellow, green} color2;</span><br />
            <span style="color: #0000ff">enum bit</span> [2:0] </span><span style="color: #000000"><span style="font-family: Courier New">{red, yellow, green} color3;</span></span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;枚举中的成员都是隐含有数值的, 默认第一个成员为 0, 后续成员依次递增, 则 color1, color2, color3 中的 red = 0, yellow = 1, green = 3.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然我们也可以手动的为这些成员设定值.&nbsp;</p>
<table cellspacing="0" cellpadding="5" width="550" align="center" bgcolor="#ffffcc" border="0">
    <tbody>
        <tr>
            <td><span style="color: #0000ff"><span style="font-family: Courier New">enum</span></span><span style="font-family: Courier New"> </span><span style="color: #000000"><span style="font-family: Courier New">{red = 1, yellow = 3, green} color4;</span></span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在这种情况下, 没有赋值的量的值是在它前面一个量的基础上加一的. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要注意的是, 一个枚举变量中的成员的值不能重复.&nbsp;&nbsp;</p>
<table cellspacing="0" cellpadding="5" width="550" align="center" bgcolor="#ffffcc" border="0">
    <tbody>
        <tr>
            <td><span style="color: #0000ff"><span style="font-family: Courier New">enum</span></span><span style="font-family: Courier New"> <span style="color: #000000">{red = 1, yellow, green = 2} color5;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #339966"><span style="font-family: Courier New">// 错误, 因为 yellow的值也为2</span></span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 枚举变量中的成员的值不能超过枚举数据类型的范围.如 int 类型的枚举成员不能赋值为 &quot;z&quot; 或 &quot;x&quot;, 向量类型 bit [2:0] 不能表示大于 3'h7 的值. 当枚举成员中有被赋值为 &quot;z&quot; 或 &quot;x&quot; 的, 其后面的成员也必须赋值.<br />
&nbsp;</p>
<table cellspacing="0" cellpadding="5" width="550" align="center" bgcolor="#ffffcc" border="0">
    <tbody>
        <tr>
            <td>
            <p><span style="color: #0000ff"><span style="font-family: Courier New">enum</span></span><span style="font-family: Courier New"> <span style="color: #000000">{red = 1, yellow = 'x, green = 'z} color6;</span>&nbsp;&nbsp;&nbsp; </span><span style="color: #339966"><span style="font-family: Courier New">// int 类型不能赋值为&quot;x&quot;</span><br />
            </span><span style="font-family: Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #339966">// 或 &quot;z&quot;</span><br />
            <span style="color: #0000ff">enum bit</span> [2:0] <span style="color: #000000">{red, yellow = 4'h9, green} color7;</span>&nbsp;<span style="color: #339966">// 超过了bit[2:0]能表示</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #339966">// 的范围<br />
            </span><span style="color: #0000ff">enum integer</span> <span style="color: #000000">{red = 'x, yellow, green} color8;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339966">// yellow, green 也必须<br />
            </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #339966"><span style="font-family: Courier New">// 赋值.</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;枚举变量中的成员还有一种定义的方法. 语法类似于向量类型的声名 .&nbsp;</p>
<table bordercolor="#000000" cellspacing="0" cellpadding="2" width="550" align="center" border="1">
    <tbody>
        <tr>
            <td width="120">name[N]</td>
            <td width="430">声名N个成员: name0, name1, ... , nameN-1. N只能是常量</td>
        </tr>
        <tr>
            <td>name[N] = C</td>
            <td>声名N个成员: name0, name1, ... , nameN-1, 它们的值从 C 依次递增.N只能是常量</td>
        </tr>
        <tr>
            <td>name[N:M]</td>
            <td>声名M - N + 1个成员: nameN, nameN+1, ... , nameM-2, nameM-1. N和M只能是常量.</td>
        </tr>
        <tr>
            <td>name[N:M] = C</td>
            <td>声名M - N + 1个成员: nameN, nameN+1, ... , nameM-2, nameM-1. 它们的值从 C 依次递增. N 和M只能是常量.</td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<table cellspacing="0" cellpadding="5" width="550" align="center" bgcolor="#ffffcc" border="0">
    <tbody>
        <tr>
            <td><span style="color: #0000ff"><span><span style="font-family: Courier New">enum</span></span></span><span style="font-family: Courier New"> <span style="color: #000000">{ add=10, sub[2], jmp[6:8] } E1;</span><br />
            <span style="color: #0000ff">enum</span> </span><span style="color: #000000"><span style="font-family: Courier New">{ register[2] = 1, register[2:4] = 10 } E2;</span></span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的代码实际可以扩展为:<br />
&nbsp;</p>
<table cellspacing="0" cellpadding="5" width="550" align="center" bgcolor="#ffffcc" border="0">
    <tbody>
        <tr>
            <td><span style="color: #0000ff"><span><span style="font-family: Courier New">enum</span></span></span><span style="font-family: Courier New"> <span style="color: #000000">{ add=10, sub0, sub1, jmp6, jmp7, jmp8} E1;</span><br />
            <span style="color: #0000ff">enum</span> </span><span style="color: #000000"><span style="font-family: Courier New">{ register0 = 1, register1, register2 = 10, register3, register4} E2;</span></span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.blovewater.com/article.asp?id=15</link>
			<title><![CDATA[SystemVerilog学习笔记(3) ------ string(2)]]></title>
			<author>boruan@gmail.com(蓝水映像)</author>
			<category><![CDATA[FPGA]]></category>
			<pubDate>Wed,24 Dec 2008 00:16:07 +0800</pubDate>
			<guid>http://www.blovewater.com/default.asp?id=15</guid>
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string 所特有的几种操作符 ==, !=, &gt;, &lt;, &gt;=, &lt;= 和 C 中的字符串比较是一样的, 这6种操作符两边的量可以是 string, 或者是字符串文本.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><strong>连接操作</strong></u></p>
<table cellspacing="0" cellpadding="0" width="400" border="0">
    <tbody>
        <tr>
            <td width="60">&nbsp;</td>
            <td bgcolor="#ffffcc"><span style="color: #000000"><span style="font-family: Courier New">&nbsp;</span><span style="color: #ff0000"><span style="font-family: Courier New">{Str1, Str2, ..., StrN}</span></span></span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;连接操作可以将多个字符串连接起来, StrN 可以是 string 类型的变量, 也可是以字符串文本.</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><strong>复制操作</strong></u><br />
&nbsp;</p>
<table cellspacing="0" cellpadding="0" width="400" border="0">
    <tbody>
        <tr>
            <td width="60">&nbsp;</td>
            <td bgcolor="#ffffcc"><span style="color: #000000"><span style="font-family: Courier New">&nbsp;</span><span style="color: #ff0000"><span style="font-family: Courier New">{multiplier{Str}}</span></span></span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;复制操作可以把一个字符串进行多次复制,并连接. multiplier 可是是常量, 也可是是变量, 但必须是整数. Str 可以是一个 string 类型的量, 也可是一个字符串文本, 甚至是一个整型的数. 要注意的是, 当 Str 是一个整数时, Str 会先按照整型隐式转换成 string 的方法进行转换, 然后再进行复制操作.例如:<br />
&nbsp;</p>
<table cellspacing="0" cellpadding="0" width="560" border="0">
    <tbody>
        <tr>
            <td width="60">&nbsp;</td>
            <td width="479" bgcolor="#ffffcc"><span style="color: #0000ff"><span style="font-family: Courier New">&nbsp;bit</span></span><span style="font-family: Courier New"> <span style="color: #000000">[11:0] bit_str= 12'h544;</span><br />
            <span style="color: #0000ff">&nbsp;string</span> <span style="color: #000000">b = {2{bit_str}};</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #339966"><span style="font-family: Courier New">// b is 32'h05440544, not 24'h544544</span></span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><strong>string 的一些常用的函数<br />
</strong></u></p>
<table width="560" border="1" cellpadding="0" cellspacing="0" bordercolor="#252525">
<tbody>
        <tr>
            <td width="60">&nbsp;</td>
            <td width="200" bordercolor="#000000">function int len()</td>
            <td width="300" bordercolor="#000000">返回字符串的长度, 空字符串返回0.</td>
    </tr>
        <tr>
            <td>&nbsp;</td>
            <td width="200" bordercolor="#000000">task putc(int i, byte c)</td>
            <td bordercolor="#000000">设置第i 个字符为c, 和b[i] = c的效果一样.</td>
    </tr>
        <tr>
            <td>&nbsp;</td>
            <td width="200" bordercolor="#000000">function byte getc(int i)</td>
            <td bordercolor="#000000">返回第i个字符, 和 c = b[i] 的效果一样.</td>
    </tr>
        <tr>
            <td>&nbsp;</td>
            <td width="200" bordercolor="#000000">function string toupper()</td>
            <td bordercolor="#000000">小写字母转换成大写字母.</td>
    </tr>
        <tr>
            <td>&nbsp;</td>
            <td width="200" bordercolor="#000000">function int compare(string s)</td>
            <td bordercolor="#000000">和 C 中的 strcmp 的功能一样.大小写不敏感</td>
    </tr>
        <tr>
            <td>&nbsp;</td>
            <td width="200" bordercolor="#000000">function int icompare(string s)</td>
            <td bordercolor="#000000">和 C 中的 strcmp 的功能一样.但大小写敏感</td>
    </tr>
        <tr>
            <td>&nbsp;</td>
            <td width="200" bordercolor="#000000">function string substr(int i, int j)</td>
            <td bordercolor="#000000">返回第i到第j之间的子字符串</td>
    </tr>
        <tr>
            <td>&nbsp;</td>
            <td width="200" bordercolor="#000000">function integer atoi()<br />
            function integer atohex()<br />
            function integer atooct()<br />
          function integer atobin()</td>
            <td bordercolor="#000000">以十进制, 十六进制, 八进制或者二进制把字符串转换成整数.</td>
    </tr>
        <tr>
            <td>&nbsp;</td>
            <td bordercolor="#000000">function real atoreal()</td>
            <td bordercolor="#000000">字符串转换成实数.</td>
    </tr>
        <tr>
            <td>&nbsp;</td>
            <td bordercolor="#000000">
            <p>task itoa(integer i)<br />
            task hextoa(integer i)<br />
            task octtoa(integer i)<br />
            task bintoa(integer i)<br />
            &nbsp;</p>
          </td>
            <td bordercolor="#000000">将十进制, 十六进制, 八进制或者二进制的整数转换成字符串.</td>
    </tr>
        <tr>
            <td>&nbsp;</td>
            <td bordercolor="#000000">task realtoa(real r)</td>
            <td bordercolor="#000000">将实数转换成字符串.</td>
    </tr>
    </tbody>
</table>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.blovewater.com/article.asp?id=14</link>
			<title><![CDATA[SystemVerilog学习笔记(2) ------ string(1)]]></title>
			<author>boruan@gmail.com(蓝水映像)</author>
			<category><![CDATA[FPGA]]></category>
			<pubDate>Tue,23 Dec 2008 00:35:21 +0800</pubDate>
			<guid>http://www.blovewater.com/default.asp?id=14</guid>
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string 在 Verilog 中也有, 但是仅仅只是表现为一个8-bit整数倍的数组, 而在 SystemVerilog 中, string 是尺寸可变, 动态分配并且提供了很多操作字符串的方法的.</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><strong>string的声名方法</strong></u></p>
<table cellspacing="0" cellpadding="0" width="475" border="0">
    <tbody>
        <tr>
            <td width="60">&nbsp;</td>
            <td width="415" bgcolor="#ffffcc"><span style="font-family: Courier New">&nbsp;<span style="color: #0000ff">string</span> </span><span style="color: #000000"><span style="font-family: Courier New">variable_name [= initial_value];</span></span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; variable_name 为变量名; initial_value 为初始值, 在声名时可有可无. 如果不给初始值, string 变量的默认初值为&quot;&quot;, 即一个的空字符串. 例:</p>
<table cellspacing="0" cellpadding="0" width="475" border="0">
    <tbody>
        <tr>
            <td width="60">&nbsp;</td>
            <td width="415" bgcolor="#ffffcc"><span style="font-family: Courier New">&nbsp;<span style="color: #0000ff">string</span> </span><span style="color: #000000"><span style="font-family: Courier New">site_name = &quot;<span style="color: #800000">blove_water</span>&quot;;</span></span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><strong>string 中的字符可以通过下标的方式来访问</strong></u>. 例如:</p>
<table cellspacing="0" cellpadding="0" width="475" border="0">
    <tbody>
        <tr>
            <td width="59">&nbsp;</td>
            <td width="92" bgcolor="#ffffcc">&nbsp;<span style="color: #000000">&nbsp;<span style="font-family: Courier New">site_name[0]</span><br />
            &nbsp;&nbsp;<span style="font-family: Courier New">site_name[6]</span></span></td>
            <td width="316" bgcolor="#ffffcc"><span style="color: #000000">的值为 &quot;<span style="color: #800000">b</span>&quot;<br />
            的值为 &quot;<span style="color: #800000">w</span>&quot;</span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><strong>string 中不能有 &quot;\0&quot;, 所有的 &quot;\0&quot; 会被忽略掉</strong></u>. 例如:&nbsp;</p>
<table cellspacing="0" cellpadding="0" width="475" border="0">
    <tbody>
        <tr>
            <td width="60">&nbsp;</td>
            <td width="415" bgcolor="#ffffcc"><span style="font-family: Courier New"><span style="color: #0000ff">&nbsp;bit </span><span style="color: #000000">[27:0]&nbsp;&nbsp; i = 28'h0410042;<br />
            </span>&nbsp;<span style="color: #0000ff">string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">str = string'(i);<br />
            </span>&nbsp;$<span style="color: #ff0000">display</span></span><span style="color: #000000"><span style="font-family: Courier New">(&quot;<span style="color: #800000">str = %s</span>&quot;, str);</span></span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;得到的结果是: <span style="font-family: Courier New">str = AB</span>;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><strong>string 是以 8-bit 为单位的</strong></u><strong>.</strong> 当整型转换为 string 时, 如果整型的宽度不是 8-bit 的整数陪, 则在整数的左边补零, 直到宽度为 8-bit 的整数陪. 例如:&nbsp;</p>
<table cellspacing="0" cellpadding="0" width="480" border="0" style="width: 480px; height: 34px">
    <tbody>
        <tr>
            <td width="61">&nbsp;</td>
            <td width="413" bgcolor="#ffffcc"><span style="color: #0000ff"><span><span style="font-family: Courier New">&nbsp;bit </span></span></span><span style="color: #000000"><span style="font-family: Courier New">[11:0] b = 12&rsquo;ha41;&nbsp;&nbsp;<br />
            </span></span><span style="color: #ff6600"><span style="font-family: Courier New">&nbsp;</span></span><span style="color: #0000ff"><span><span style="font-family: Courier New">string </span></span></span><span style="color: #000000"><span style="font-family: Courier New">s2 = string&rsquo;(b);</span></span><span><span style="font-family: Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="color: #339966"><span><span style="font-family: Courier New">// sets s2 to 16&rsquo;h0a41</span></span></span><span style="font-family: Courier New">&nbsp;</span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.blovewater.com/article.asp?id=12</link>
			<title><![CDATA[SystemVerilog学习笔记(1) ------ 整型]]></title>
			<author>boruan@gmail.com(蓝水映像)</author>
			<category><![CDATA[FPGA]]></category>
			<pubDate>Mon,22 Dec 2008 01:45:26 +0800</pubDate>
			<guid>http://www.blovewater.com/default.asp?id=12</guid>
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SystemVerilog中的整型数据可以看作是Verilog和C中整型数据的一种杂交, 因些看起来有些象Verilog也有些象C.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整型可分为基本整型和向量整型(直译的<img alt="" src="http://www.blovewater.com/fckeditor/editor/images/smiley/qq2007/27.gif" />).下面是IEEE1800中定义的.</p>
<table cellspacing="0" cellpadding="0" border="0" style="width: 476px; height: 49px">
    <tbody>
        <tr>
            <td width="57">&nbsp;</td>
            <td nowrap="nowrap" width="413" bgcolor="#ffffcc"><span style="color: #ff0000">integer_type ::= integer_vector_type | integer_atom_type<br />
            integer_atom_type ::= byte | shortint | int | longint | integer | time<br />
            integer_vector_type ::= bit | logic | reg</span></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基本整型有: byte, shortint, int, longint, integer, time.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向量整型有: bit, logic, reg.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这些整型又为分2态和4态数据类型. 2态即'0', '1'. 4态是在2态的基础上增加了 'Z'&nbsp; 和 'X'. 不论是基本整型还是向量类整型, 它们之中都有2态和4态之分.详细内容可看下表:</p>
<table bordercolor="#252525" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td width="60">&nbsp;</td>
            <td bordercolor="#000000" width="60">byte</td>
            <td bordercolor="#000000" width="300">2 态 8-bit 整型, 相当于 C 中的 char</td>
            <td bordercolor="#000000" width="60">signed</td>
        </tr>
        <tr>
            <td width="60">&nbsp;</td>
            <td bordercolor="#000000" width="60">shortint</td>
            <td bordercolor="#000000" width="300">2 态 16-bit 整型, 相当于 C 中的 short</td>
            <td bordercolor="#000000" width="60">signed</td>
        </tr>
        <tr>
            <td width="60">&nbsp;</td>
            <td bordercolor="#000000" width="60">int</td>
            <td bordercolor="#000000" width="300">2 态 32-bit 整型, 相当于 C 中的 int</td>
            <td bordercolor="#000000" width="60">signed</td>
        </tr>
        <tr>
            <td width="60">&nbsp;</td>
            <td bordercolor="#000000" width="60">longint</td>
            <td bordercolor="#000000" width="300">2 态 64-bit 整型</td>
            <td bordercolor="#000000" width="60">signed</td>
        </tr>
        <tr>
            <td width="60">&nbsp;</td>
            <td bordercolor="#000000" width="60">integer</td>
            <td bordercolor="#000000" width="300">4&nbsp;态 32-bit 整型, Verilog 的数据类型</td>
            <td bordercolor="#000000" width="60">signed</td>
        </tr>
        <tr>
            <td width="60">&nbsp;</td>
            <td bordercolor="#000000" width="60">time</td>
            <td bordercolor="#000000" width="300">4 态 64-bit 整型, Verilog 的数据类型</td>
            <td bordercolor="#000000" width="60">unsigned</td>
        </tr>
        <tr>
            <td width="60">&nbsp;</td>
            <td bordercolor="#000000" width="60">bit</td>
            <td bordercolor="#000000" width="300">2 态向量类整型</td>
            <td bordercolor="#000000" width="60">&nbsp;</td>
        </tr>
        <tr>
            <td width="60">&nbsp;</td>
            <td bordercolor="#000000" width="60">logic</td>
            <td bordercolor="#000000" width="300">4&nbsp;态向量类整型</td>
            <td bordercolor="#000000" width="60">&nbsp;</td>
        </tr>
        <tr>
            <td width="60">&nbsp;</td>
            <td bordercolor="#000000" width="60">reg</td>
            <td bordercolor="#000000" width="300">4&nbsp;态向量类整型, Verilog 的数据类型</td>
            <td bordercolor="#000000" width="60">&nbsp;</td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SystemVerilog 做为 Verilog 的扩展, 因此在 SystemVerilog 中这些数据类型仍可以使用. 在这些类型之中, int 和 integer 基本上可以看做一样, 只是一个是 2 态,一个是 4 态. (在能只用 2 态的情况下尽量用 int, 因为 2 态数据类型在仿真的过程中可以有更高的效率.)&nbsp;logic 和 reg 在 SystemVerilog 中是相等的, 因为 logic 在字面意义上能够更好的表示 4 态, 而不象&nbsp;reg 给人感觉不清, 所以尽量的用 logic&nbsp;代替&nbsp; reg.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 4 态类型转换为 2 态类型时, 'Z' 和 'X' 会转换为 '0'.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整型还为分有符号和无符号的.用关键字 signed 和 unsigned 表示. 在声名时一定要注意 SystemVerilog 和 C 的不同.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 C 中声名一个整数的方法为:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int a;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而在 SystemVerilog 中声名的方法为:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int unsigned a;<br />
&nbsp;</p>]]></description>
		</item>
		
</channel>
</rss>
