verilog中的urandom_range(),urandom(),random()

时间:2016-04-18 15:17:39

标签: random verilog

我对这三个功能感到困惑,我想知道一些解释。如果我设置范围,我如何使范围独占或包容?如果我没有指定范围,范围是包含还是排他?

2 个答案:

答案 0 :(得分:9)

除了@ dave_59的答案外,还有其他重要的区别:

i)$random返回带符号的32位整数; $urandom$urandom_range返回无符号的32位整数。

ii)$random中指定了$urandom的随机数生成器。使用相同的种子,您将在任何SystemVerilog模拟器中获得完全相同的随机数序列。对于$urandom_range$urandom,情况并非如此,其中随机数生成器的设计取决于EDA供应商。

iii)每个线程都有自己的随机数生成器$urandom_range$random,而initial只有一个随机数生成器在所有线程之间共享(即只有一个用于整个模拟)。这非常重要,因为为每个线程分别使用随机数生成器可以帮助您模拟改进名为随机稳定性的属性。假设您使用随机数生成器生成随机刺激。假设您发现了一个错误并修复了它。这可以轻松地更改执行线程(即always$urandom块)的顺序。如果这个改变改变了随机数生成的顺序,那么你永远不会知道这个错误是否已经消失,因为你已经修复了它,或者因为刺激已经改变了。如果你为每个线程都有一个随机数生成器,那么你的测试平台就不那么容易受到这样的影响 - 你可以更加确定这个bug已经消失了,因为你修复了它。该属性称为随机稳定性

所以,正如@ dave_59所说,你应该只使用$urandom_rangecell.selectionStyle = UITableViewCellSelectionStyle.None

答案 1 :(得分:6)

您应该只使用$urandom$urandom_range。这两个函数提供了比$random更好的质量随机数和更好的种子初始化和稳定性。 $ urandom_range指定的范围始终包含在内。

虽然$random为每次调用生成完全相同的随机数序列,但是一旦对设计或测试平台进行任何更改,就很难保持相同的调用顺序。当多个线程同时生成随机数时更加困难。