📄 00865.html
字号:
<a href="00087.html" target="topic">12.9 动态的约束修改</a> </div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
SystemVerilog中提供了几种方法来动态地修改随机化方法: </p>
<ul class="Element630">
<li class="Element600">蕴涵以及<span style="color: #0000FF">if</span>...<span style="color: #0000FF">else</span>风格的约束允许声明具有判决条件的约束。</li>
<li class="Element600">可以使用<span style="color: #0000FF">contraint_mode</span><span style="color: #800080">()</span>内建方法来激活或关闭约束块。初始情况下,所有的约束块均处于激活状态。未激活的约束会被<span style="color: #0000FF">randomize</span><span style="color: #800080">()</span>函数忽略。</li>
<li class="Element600">可以使用<span style="color: #0000FF">rand_mode</span><span style="color: #800080">()</span>内建方法来激活或关闭随机变量。初始情况下,所有的<span style="color: #0000FF">rand</span>和<span style="color: #0000FF">randc</span>变量都处于激活状态。未激活的随机变量会被<span style="color: #0000FF">randomize</span><span style="color: #800080">()</span>函数忽略。</li>
<li class="Element600">在<span style="color: #0000FF">dist</span>约束中的权重可以被改变,从而影响了被选定集合中特定值出现的概率。</li>
</ul><p class="Element207">
</div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00039.html" target="topic">12.10 内联随机变量控制</a> </div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
<span style="color: #0000FF">randomize</span><span style="color: #800080">()</span>方法可以用来临时性地控制一个类实例或对象中的随机变量和状态变量的集合。当调用无参数的<span style="color: #0000FF">randomize</span>方法的时候,它的行为就像前一节所描述的那样,也就是说,它会为对象中所有使用<span style="color: #0000FF">rand</span>或<span style="color: #0000FF">randc</span>声明的随机变量赋新的值,这样所有的约束都会被满足。当调用带有参数的<span style="color: #0000FF">randomize</span>的时候,它的参数指定了该对象内随机变量的完整集合;对象中的所有其它变量都被认为是状态变量。例如,考虑下面的类以及对<span style="color: #0000FF">randomize</span>方法的调用: </div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00041.html" target="topic">12.11 范围变量的随机化 — std::randomize()</a> </div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
内建的类随机化方法对类成员变量执行专有的操作。使用类来对需要随机化的数据建模是一种强大的机制,它使得我们能够产生通用、可复用的包含随机变量的对象,并能够产生可以在以后扩展、继承、约束、过载、使能、关闭、以及从其它对象合并或分离的约束。类及与其关联的随机变量和约束在处理上的方便性使得类非常适合描述和处理随机数据和约束。然而,某些要求较少的问题并不需要类的这些完整的灵活性,它可以使用一个较为简单的机制来随机化不属于一个类的数据。范围随机函数(<span style="color: #0000FF">std</span><span style="color: #800080">::</span><span style="color: #0000FF">randomize</span><span style="color: #800080">()</span>)使得用户能够随机化当前范围内的数据,而无需定义一个类或实例化一个类对象。<br><br>范围随机化函数的语法如下: </div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00043.html" target="topic">12.12 随机数系统函数与方法</a> </div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
</div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00049.html" target="topic">12.13 随机稳定性</a> </div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
随机数发生器(RNG)对于线程和对象是本地的。因为被一个线程或对象返回的随机值序列独立于其它线程或对象的RNG,所以这个特性被称为随机稳定性。随机稳定性应用于:</p>
<ul class="Element630">
<li class="Element600">系统随机化调用,<span style="color: #0000FF">$urandom</span><span style="color: #800080">()</span>和<span style="color: #0000FF">$urandom_range</span><span style="color: #800080">()</span>。</li>
<li class="Element600">对象和进程随机播种方法,<span style="color: #0000FF">srandom</span><span style="color: #800080">()</span>。</li>
<li class="Element600">对象随机化方法,<span style="color: #0000FF">randomize</span><span style="color: #800080">()</span>。</li>
</ul><p class="Element207">
在面对用户代码小的改变的时候,具有这种特点的测试平台能够展示更加稳定的RNG行为。另外,对于通过手工设置种子的线程和对象,它能够更精确地控制随机值的产生。 </div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00053.html" target="topic">12.14 为随机化手工设置种子</a> </div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
每一个对象维护了它自己的内部随机数发生器,这个随机数发生器它的<span style="color: #0000FF">randomize</span><span style="color: #800080">()</span>方法所专用。这就使得对象能够各自独立地被随机化并能够相对于其它的随机化函数独立地调用。当产生一个对象的时候,它的随机数发生器(RNG)能够使用来自产生这个对象的线程的RNG的下一个值设置种子。这个过程被称为层次化的对象播种。<br><br>有时我们希望能够使用<span style="color: #0000FF">srandom</span><span style="color: #800080">()</span>方法手工地设置种子。这种功能或者在一个类方法中,或者在类定义的外部完成。<br><br>作为一个类方法在内部为RNG设置种子的例子如下: </div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00054.html" target="topic">12.15 随机加权的条件 — randcase</a> </div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
</div></td></tr><tr>
<td class="Element202" valign="top" width="50%">
<div class="Element203">
<a href="00055.html" target="topic">12.16 随机序列产生 — randsequence</a> </div></td><td class="Element206" valign="top" width="50%">
<div class="Element207">
分析程序生成器,例如yacc,使用巴科斯-诺尔范式(BNF)或类似的符号来描述被分析语言的文法。因此文法被用来产生一个程序,它能够检查一个标记流是否代表了该语言中一个语法正确的表达方式。SystemVerilog的序列产生器反转了这个过程。它使用文法来随机地产生一个文法所描述的语言的正确的表达方式(也就是一个标记流)。随机序列发生器对于随机地产生结构化的激励序列(例如指令或网络流量模式)非常有用。<br><br>序列发生器使用个<span style="color: #0000FF">randsequence</span>块内的一组规则和生成式。<span style="color: #0000FF">randsequence</span>块的语法如下: </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="00925.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="我要啦免费统计" 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 + -