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

📄 00396.html

📁 这是一本关于verilog编程语言的教程,对学习verilog语言有帮助
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<title>3.7 string数据类型</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', '00396.html');" onmousedown="onBodyMouseDown();">

<!-- Begin Popups -->
<div class="Element801" id="popup00020">
<div class="Element800">
<div class="Element14">
链接</div>
<div class="Element11">
<div class="Element10">
<a href="00863.html" target="topic">第三章 数据类型</a>, <a href="00897.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, 'popup00020');"><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="00395.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="00863.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="00397.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">
3.7 string数据类型</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">
SystemVerilog包含一个<span style="color: #0000FF">string</span>数据类型,它是一个可变尺寸、动态分配的字节数组。SystemVerilog还包含许多特殊的方法来对字符串进行操作。&nbsp;</p>
<p class="Element10">
&nbsp;</p>
<p class="Element10">
Verilog也支持字符串文本,但这种支持仅仅是在词法级别上。在Verilog中,字符串文本表现为一个具有宽度为8位整数倍的压缩数组。当一个字符串文本被赋值到一个具有不同尺寸的<span style="color: #0000FF">integral</span>类型的压缩数组变量的时候,它或者被截短到变量的尺寸或者必要时在左侧填补<span style="color: #FF0000">0</span>。&nbsp;</p>
<p class="Element10">
&nbsp;</p>
<p class="Element10">
在SystemVerilog中,字符串文本的表现行为与Verilog相同。然而,SystemVerilog还支持<span style="color: #0000FF">string</span>数据类型,我们可以将一个字符串文本赋值到这种数据类型。当使用<span style="color: #0000FF">string</span>数据类型来替代一个<span style="color: #0000FF">integral</span>变量的时候,字符串可以具有任意的长度并且不会发生截短现象。当文本字符串赋值到一个<span style="color: #0000FF">string</span>数据类型或者在一个使用<span style="color: #0000FF">string</span>类型操作数的表达式中使用的时候,它会被隐式地转换成<span style="color: #0000FF">string</span>数据类型。&nbsp;</p>
<p class="Element10">
&nbsp;</p>
<p class="Element10">
<span style="color: #0000FF">string</span>类型的变量可以从<span style="color: #FF0000">0</span>到<span style="color: #FF0000">N-1</span>(数组的最后一个元素)进行索引,而且可以作用于一个特殊的空字符串:<span style="color: #575D94">&quot;&quot;</span>。从一个字符串读取一个元素会产生一个字节。&nbsp;</p>
<p class="Element10">
&nbsp;</p><div class="Element63">
<div class="TableDiv">
<table cellspacing="0" class="Table1">
<tr>
<td class="Element65" valign="top" width="100%">
<div class="Element66">
FPGA技术网提示:&nbsp;</div></td></tr><tr>
<td class="Element67" valign="top" width="100%">
<div class="Element68">
<span style="color: #0000FF">string</span>类型变量的索引从字符串的左侧开始排列,例如:对字符串<span style="color: #575D94">&quot;Hello World!&quot;</span>,索引0对应<span style="color: #575D94">&quot;H&quot;</span>,索引1对应<span style="color: #575D94">&quot;e&quot;</span>,依此类推...。&nbsp;</div></td></tr></table></div></div>
<p class="Element10">
&nbsp;</p>
<p class="Element10">
<span style="color: #0000FF">string</span>类型变量的声明语法如下: </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00020');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00020"><pre class="Element12"><span style="color: #0000FF">string</span> variable_name [<span style="color: #800080">=</span> initial_value]<span style="color: #800080">;</span></pre></div></div>
<p class="Element10">
这里的<i>variable_name</i>是一个有效的标识符,可选的<i>initial_value</i>可以是一个字符串文本也可以是一个空字符串(<span style="color: #575D94">&quot;&quot;</span>)。例如: </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00021');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00021"><pre class="Element12"><span style="color: #0000FF">string</span> myName <span style="color: #800080">=</span> <span style="color: #575D94">“John Smith”</span><span style="color: #800080">;</span></pre></div></div>
<p class="Element10">
如果在声明中没有指定初始值,变量会被初始化成空字符串(<span style="color: #575D94">&quot;&quot;</span>)。&nbsp;</p>
<p class="Element10">
&nbsp;</p>
<p class="Element10">
SystemVerilog提供了一组操作符,这些操作符可以用来处理字符串变量和字符串文本的组合。<span style="color: #0000FF">string</span>数据类型的基本操作符在表格3-2中给出。&nbsp;</p>
<p class="Element10">
&nbsp;</p>
<p class="Element10">
一个字符串文本可以被赋值到一个<span style="color: #0000FF">string</span>或<span style="color: #0000FF">integral</span>类型的变量。如果它们的尺寸不同,字符串文本会进行右调整,并且在必要的时候在左侧进行截短或者在左侧填补<span style="color: #FF0000">0</span>。例如: </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00022');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00022"><pre class="Element12"><span style="color: #0000FF">byte</span> c <span style="color: #800080">=</span> <span style="color: #575D94">&quot;A&quot;</span><span style="color: #800080">;</span>                  <span style="color: #008000">// 将c赋值为”A”</span>
<span style="color: #0000FF">bit</span> <span style="color: #800080">[</span><span style="color: #FF0000">10</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: #575D94">&quot;\x41&quot;</span><span style="color: #800080">;</span>         <span style="color: #008000">// 将a赋值为’b000_0100_0001</span>
<span style="color: #0000FF">bit</span> <span style="color: #800080">[</span><span style="color: #FF0000">1</span><span style="color: #800080">:</span><span style="color: #FF0000">4</span><span style="color: #800080">][</span><span style="color: #FF0000">7</span><span style="color: #800080">:</span><span style="color: #FF0000">0</span><span style="color: #800080">]</span> h <span style="color: #800080">=</span> <span style="color: #575D94">&quot;hello&quot;</span><span style="color: #800080">;</span>    <span style="color: #008000">// 将h赋值为”ello”</span></pre></div></div>
<p class="Element10">
一个<span style="color: #0000FF">string</span>、字符串文本、或压缩数组可以被赋值到一个<span style="color: #0000FF">string</span>变量。<span style="color: #0000FF">string</span>变量可以增长或缩减以便容纳压缩数组。如果压缩数组的尺寸(以位为单位)不是8的整数倍,那么压缩数组会在左侧填入<span style="color: #FF0000">0</span>。例如: </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00023');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00023"><pre class="Element12"><span style="color: #0000FF">string</span> s1 <span style="color: #800080">=</span> <span style="color: #575D94">&quot;hello&quot;</span><span style="color: #800080">;</span>   <span style="color: #008000">// 将s1设置为&quot;hello&quot;</span>
<span style="color: #0000FF">bit</span> <span style="color: #800080">[</span><span style="color: #FF0000">11</span><span style="color: #800080">:</span><span style="color: #FF0000">0</span><span style="color: #800080">]</span> b <span style="color: #800080">=</span> <span style="color: #FF0000">12</span><span style="color: #800080">'</span><span style="color: #0000FF">h</span><span style="color: #FF0000">a41</span><span style="color: #800080">;</span>
<span style="color: #0000FF">string</span> s2 <span style="color: #800080">=</span> b<span style="color: #800080">;</span>         <span style="color: #008000">// 将s2设置为'h0a41</span></pre></div></div>
<p class="Element10">
第二个例子: </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00024');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00024"><pre class="Element12"><span style="color: #0000FF">reg </span><span style="color: #800080">[</span><span style="color: #FF0000">15</span><span style="color: #800080">:</span><span style="color: #FF0000">0</span><span style="color: #800080">]</span> r<span style="color: #800080">;</span>
<span style="color: #0000FF">integer</span> i <span style="color: #800080">=</span> <span style="color: #FF0000">1</span><span style="color: #800080">;</span>
<span style="color: #0000FF">string</span> b <span style="color: #800080">=</span> <span style="color: #575D94">&quot;&quot;</span><span style="color: #800080">;</span>
<span style="color: #0000FF">string</span> a <span style="color: #800080">=</span> <span style="color: #800080">{</span><span style="color: #575D94">&quot;Hi&quot;</span><span style="color: #800080">, </span>b<span style="color: #800080">};</span>
r <span style="color: #800080">=</span> a<span style="color: #800080">;</span>           <span style="color: #008000">// OK</span>
b <span style="color: #800080">=</span> r<span style="color: #800080">;</span>           <span style="color: #008000">// OK (隐式强制类型转换,可以发布一个警告)</span>
b <span style="color: #800080">=</span> <span style="color: #575D94">&quot;Hi&quot;</span><span style="color: #800080">;</span>        <span style="color: #008000">// OK</span>
b <span style="color: #800080">=</span> <span style="color: #800080">{</span><span style="color: #FF0000">5</span><span style="color: #800080">{</span><span style="color: #575D94">&quot;Hi&quot;</span><span style="color: #800080">}};</span>   <span style="color: #008000">// OK</span>
a <span style="color: #800080">=</span> <span style="color: #800080">{</span>i<span style="color: #800080">{</span><span style="color: #575D94">&quot;Hi&quot;</span><span style="color: #800080">}};</span>   <span style="color: #008000">// OK(非常量复制)</span>
r <span style="color: #800080">=</span> <span style="color: #800080">{</span>i<span style="color: #800080">{</span><span style="color: #575D94">&quot;Hi&quot;</span><span style="color: #800080">}};</span>   <span style="color: #008000">// 无效(非常量复制)</span>
a <span style="color: #800080">=</span> <span style="color: #800080">{</span>i<span style="color: #800080">{</span>b<span style="color: #800080">}};</span>      <span style="color: #008000">// OK</span>
a <span style="color: #800080">=</span> <span style="color: #800080">{</span>a<span style="color: #800080">, </span>b<span style="color: #800080">};</span>      <span style="color: #008000">// OK</span>
a <span style="color: #800080">=</span> <span style="color: #800080">{</span><span style="color: #575D94">&quot;Hi&quot;</span><span style="color: #800080">, </span>b<span style="color: #800080">};</span>   <span style="color: #008000">// OK</span>
r <span style="color: #800080">=</span> <span style="color: #800080">{</span><span style="color: #575D94">&quot;H&quot;</span><span style="color: #800080">,</span><span style="color: #575D94">&quot;&quot;</span><span style="color: #800080">};</span>    <span style="color: #008000">// 产生&quot;H\0&quot;,&quot;&quot;被转换成8'b0</span>
b <span style="color: #800080">=</span> <span style="color: #800080">{</span><span style="color: #575D94">&quot;H&quot;</span><span style="color: #800080">,</span><span style="color: #575D94">&quot;&quot;</span><span style="color: #800080">};</span>    <span style="color: #008000">// 产生&quot;H&quot;,&quot;&quot;是空字符串</span>
a <span style="color: #800080">=</span> <span style="color: #800080">{</span>a<span style="color: #800080">, </span>b<span style="color: #800080">};</span>      <span style="color: #008000">// OK</span>
a<span style="color: #800080">[</span><span style="color: #FF0000">0</span><span style="color: #800080">]</span> <span style="color: #800080">=</span> <span style="color: #575D94">&quot;h&quot;</span><span style="color: #800080">;</span>      <span style="color: #008000">// OK, 与a[0] = &quot;hi&quot;相同</span></pre></div></div>
<p class="Element10" style="text-align: center">
&nbsp;</p>
<p class="Element10" style="text-align: center">
<strong>表格 3-2:字符串操作符</strong></p><div class="Element63">
<div class="TableDiv">
<table cellspacing="0" class="Table1">
<tr>
<td class="Element65" valign="top" width="30%">
<div class="Element66">
操作符&nbsp;</div></td><td class="Element65" valign="top" width="70%">
<div class="Element66">
语义&nbsp;</div></td></tr><tr>
<td class="Element67" valign="top" width="30%">
<div class="Element68">
<i>Str1</i> <span style="color: #800080">==</span> <i>Str2</i>&nbsp;</div></td><td class="Element67" valign="top" width="70%">
<div class="Element68">
相等。检查两个字符串是否相等。如果相等则结果为<span style="color: #FF0000">1</span>,否则结果为<span style="color: #FF0000">0</span>。两个字符串的类型可以都是<span style="color: #0000FF">string</span>,或者其中一个为字符串文本。如果两个均为字符串文本,那么表达式与Verilog中对整数类型的相等操作符相同。可以使用空字符串(<span style="color: #575D94">&quot;&quot;</span>)。&nbsp;</div></td></tr><tr>
<td class="Element67" valign="top" width="30%">
<div class="Element68">
<i>Str1</i> <span style="color: #800080">!=</span> <i>Str2</i>&nbsp;</div></td><td class="Element67" valign="top" width="70%">
<div class="Element68">
不等。<span style="color: #800080">==</span>的逻辑否。&nbsp;</div></td></tr><tr>
<td class="Element67" valign="top" width="30%">
<div class="Element68">
<i>Str1</i> <span style="color: #800080">&lt;</span> <i>Str2 Str1</i> <span style="color: #800080">&lt;=</span> <i>Str2</i><br><i>Str1</i> <span style="color: #800080">&gt;</span> <i>Str2 Str1</i> <span style="color: #800080">&gt;=</span> <i>Str2</i>&nbsp;</div></td><td class="Element67" valign="top" width="70%">
<div class="Element68">
比较,关系操作符。使用两个字符串的词典编撰顺序比较,如果对应的条件为真则返回<span style="color: #800080">1</span>。比较类似于ANSI C的strcmp函数(或字符串比较方法)(以词汇顺序),并且包含嵌入的空字节。两个操作数可以都是<span style="color: #0000FF">string</span>类型,或者其中一个是字符串文本。&nbsp;</div></td></tr><tr>
<td class="Element67" valign="top" width="30%">
<div class="Element68">
<span style="color: #800080">{<i></span>Str1<span style="color: #800080"></i>,</span> <i>Str2<span style="color: #800080"></i>,</span> …<span style="color: #800080">,</span> <i>Strn<span style="color: #800080"></i>}</span>&nbsp;</div></td><td class="Element67" valign="top" width="70%">
<div class="Element68">
串联。每一个操作符都可以是<span style="color: #0000FF">string</span>类型或一个字符串文本(它会被隐式地转换成<span style="color: #0000FF">string</span>类型)。如果至少一个操作数为<span style="color: #0000FF">string</span>类型,那么表达式计算成串联字符串并且具有<span style="color: #0000FF">string</span>的类型。如果所有的操作数都是字符串文本,那么表达式的行为就像Verilog中integral类型的串联一样。如果结果接着使用在一个调用<span style="color: #0000FF">string</span>类型的表达式中,那么它被隐式地转换成<span style="color: #0000FF">string</span>类型。&nbsp;</div></td></tr><tr>
<td class="Element67" valign="top" width="30%">
<div class="Element68">
<span style="color: #800080">{<i></span>multiplier<span style="color: #800080"></i>{<i></span>Str<span style="color: #800080"></i>}}</span>&nbsp;</div></td><td class="Element67" valign="top" width="70%">
<div class="Element68">
复制。<i>Str</i>可以是<span style="color: #0000FF">string</span>类型或者是字符串文本。<i>multiplier</i>必须是integral类型并且可以是非常量。如果<i>multiplier</i>是非常量或者<i>Str</i>是<span style="color: #0000FF">string</span>类型,那么结果就是包含N个<i>Str</i>串联的字符串,其中N由<i>multiplier</i>指定。如果<i>Str</i>是一个文本并且<i>multiplier</i>是常量,那么表达式的行为就类似于Verilog中的数值复制(如果结果被使用在另一个调用<span style="color: #0000FF">string</span>类型的表达式中,那么它被隐式地转换成<span style="color: #0000FF">string</span>类型)。&nbsp;</div></td></tr><tr>
<td class="Element67" valign="top" width="30%">
<div class="Element68">

⌨️ 快捷键说明

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