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

📄 00564.html

📁 这是一本关于verilog编程语言的教程,对学习verilog语言有帮助
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<title>7.18 流操作符(压缩/非压缩)</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', '00564.html');" onmousedown="onBodyMouseDown();">

<!-- Begin Popups -->
<div class="Element801" id="popup00137">
<div class="Element800">
<div class="Element14">
链接</div>
<div class="Element11">
<div class="Element10">
<a href="00860.html" target="topic">第七章 操作符与表达式</a>, <a href="00912.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, 'popup00137');"><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="00563.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="00860.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="00565.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">
7.18 流操作符(压缩/非压缩)</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">
在<a href="00387.html" target="topic">3.16节</a>描述了位流强制类型转换,当转换操作可以仅仅使用一个强制类型转换方便地表达,并且位流的特定顺序并不重要的时候,这种方法最为有用。然而,有时位流需要匹配于一个特定的组织形式。流操作符将位流类型(参见<a href="00387.html" target="topic">3.16节</a>)以用户指定的顺序压缩到一个位序列当中。当流操作符使用在表达式左侧的时候,它执行相反的操作:将位流解压缩成一个或多个变量。如果正在被压缩的数据包含任何四态类型,那么压缩操作的结果是四态类型,否则,结果为两态类型。将四态类型的位流解压缩成两态类型变量是通过一个向两态变量的强制类型转换实现的,反之亦然。&nbsp;</p>
<p class="Element10">
&nbsp;</p>
<p class="Element10">
位流串联的语法如下: </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00245');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00245"><pre class="Element12">streaming_expression ::= <strong><span style="color: #FF0000">{</span></strong>stream_operator [slice_size] stream_concatenation<strong><span style="color: #FF0000">}</span></strong>
<span style="color: #008000">                                                          // 引用自附录A.8.1</span>

stream_operator ::= <strong><span style="color: #FF0000">&gt;&gt;</span></strong> | <strong><span style="color: #FF0000">&lt;&lt;</span></strong>

slice_size ::= ps_type_identifier | constant_expression

stream_concatenation ::= <strong><span style="color: #FF0000">{</span></strong>stream_expression{<span style="color: #FF0000">,</span> stream_expression}<strong><span style="color: #FF0000">}</span></strong>

stream_expression ::= expression [<strong><span style="color: #FF0000">with</span></strong> <strong><span style="color: #FF0000">[</span></strong>array_range_expression<strong><span style="color: #FF0000">]</span></strong>]

array_range_expression ::=
    expression
  | expression <strong><span style="color: #FF0000">:</span></strong> expression
  | expression <strong><span style="color: #FF0000">+:</span></strong> expression
  | expression <strong><span style="color: #FF0000">-:</span></strong> expression

primary ::=
    ...
  | streaming_expression</pre></div></div>
<p class="Element10" style="text-align: center">
<strong>语法 7-4—位流串联语法(摘录自附录A)</strong></p><p class="Element10">
&nbsp;</p>
<p class="Element10">
流操作符决定了数据位流化的顺序:<span style="color: #800080">&gt;&gt;</span>使得数据以从左到右的顺序位流化,而<span style="color: #800080">&lt;&lt;</span>使得数据以从右到左的顺序位流化。如果指定了<i>slice-size</i>(分片尺寸),那么数据首先被分割成具有特定位数目的分片,然后这些分片以特定的顺序位流化。如果没有指定<i>slice-size</i>,那么缺省尺寸为<span style="color: #FF0000">1</span>(或<span style="color: #0000FF">bit</span>)。如果分片的时候最后一个分片小于设定的分片宽度,那么不会添加填充位。&nbsp;</p>
<p class="Element10">
&nbsp;</p>
<p class="Element10">
例如: </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00246');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00246"><pre class="Element12"><span style="color: #0000FF">int</span> j <span style="color: #800080">=</span> <span style="color: #800080">{</span><span style="color: #575D94">&quot;A&quot;</span><span style="color: #800080">,</span> <span style="color: #575D94">&quot;B&quot;</span><span style="color: #800080">,</span> <span style="color: #575D94">&quot;C&quot;</span><span style="color: #800080">,</span> <span style="color: #575D94">&quot;D&quot;</span><span style="color: #800080">};</span>

<span style="color: #800080">{&gt;&gt;</span> <span style="color: #800080">{</span>j<span style="color: #800080">}}</span>               <span style="color: #008000">// 产生流 &quot;A&quot; &quot;B&quot; &quot;C&quot; &quot;D&quot;</span>
<span style="color: #800080">{&lt;&lt;</span> <span style="color: #0000FF">byte</span><span style="color: #800080">{</span>j<span style="color: #800080">}}</span>           <span style="color: #008000">// 产生流 &quot;D&quot; &quot;C&quot; &quot;B&quot; &quot;A&quot; (小字节顺序)</span>
<span style="color: #800080">{&lt;&lt;</span> <span style="color: #FF0000">16</span><span style="color: #800080">{</span>j<span style="color: #800080">}}</span>             <span style="color: #008000">// 产生流 &quot;C&quot; &quot;D&quot; &quot;A&quot; &quot;B&quot;</span>
<span style="color: #800080">{&lt;&lt; {</span><span style="color: #FF0000">8</span><span style="color: #800080">'</span><span style="color: #0000FF">b</span><span style="color: #FF0000">0011</span><span style="color: #800080">_</span><span style="color: #FF0000">0101</span><span style="color: #800080">}}</span>    <span style="color: #008000">// 产生流 'b1010_1100 (位反转)</span>
<span style="color: #800080">{&lt;&lt;</span> <span style="color: #FF0000">4</span><span style="color: #800080">{</span><span style="color: #FF0000">6</span><span style="color: #800080">'</span><span style="color: #0000FF">b</span><span style="color: #FF0000">11</span><span style="color: #800080">_</span><span style="color: #FF0000">0101</span><span style="color: #800080">}}</span>     <span style="color: #008000">// 产生流 'b0101_11</span>
<span style="color: #800080">{&gt;&gt;</span> <span style="color: #FF0000">4</span><span style="color: #800080">{</span><span style="color: #FF0000">6</span><span style="color: #800080">'</span><span style="color: #0000FF">b</span><span style="color: #FF0000">11</span><span style="color: #800080">_</span><span style="color: #FF0000">0101</span><span style="color: #800080">}}</span>     <span style="color: #008000">// 产生流 'b1101_01 (相同)</span>
<span style="color: #800080">{&lt;&lt;</span> <span style="color: #FF0000">2</span><span style="color: #800080">{{&lt;&lt; {</span><span style="color: #FF0000">4</span><span style="color: #800080">'</span><span style="color: #0000FF">b</span><span style="color: #FF0000">1101</span><span style="color: #800080">}}}}</span> <span style="color: #008000">// 产生流 'b1110</span></pre></div></div>
<p class="Element10">
流操作符直接操作于integral类型和流。当应用于非压缩集合类型(例如非压缩数组、非压缩结构体、或类)的时候,它们会以深度最先的顺序递归地遍历数据直到得到单个integral类型。一个多维压缩数组会被当作单个integral类型,然而压缩条目的非压缩数组会使得每一个压缩条目被单独位流化。流操作符只能处理位流类型,处理任何其它类型都会产生一个错误。&nbsp;</p>
<p class="Element10">
&nbsp;</p>
<p class="Element10">
压缩操作的结果可以直接赋值到任何位流类型的变量。如果赋值左侧代表一个固定尺寸的变量并且流尺寸大于变量的尺寸,那么会产生一个错误。如果变量的尺寸大于流尺寸,那么流会向左调整并在右侧填充0。如果左侧代表一个动态尺寸的变量(例如队列或动态数组),那么变量会重新调整尺寸以便容纳整个流。如果调整后的变量尺寸大于流的尺寸,那么流会向左调整并在右侧填充0。流不是一个integral类型的值;为了在表达式中使用,需要一个强制类型转换。&nbsp;</p>
<p class="Element10">

⌨️ 快捷键说明

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