我对这三个功能感到困惑,我想知道一些解释。如果我设置了范围,如何使范围不包含或包含?如果我不指定范围,范围是包含的还是不包含的?
最佳答案
除了@dave_59 的回答之外,还有其他重要的区别:
i) $random
返回一个有符号的 32 位整数; $urandom
和 $urandom_range
返回无符号 32 位整数。
ii) $random
的随机数生成器在 IEEE Std 1800-2012 中指定.使用相同的种子,您将在任何 SystemVerilog 模拟器中获得完全相同的随机数序列。 $urandom
的情况并非如此和 $urandom_range
,其中随机数生成器的设计取决于 EDA 供应商。
iii) 每个线程都有自己的随机数生成器,用于 $urandom
和 $urandom_range
,而 $random
只有一个随机数生成器在所有线程之间共享(即整个模拟只有一个)。这非常重要,因为为每个线程使用单独的随机数生成器可以帮助您模拟提高称为随机稳定性的属性。假设您正在使用随机数生成器来生成随机刺激。假设您发现了一个错误并修复了它。这很容易改变线程(即 initial
和 always
块)的执行顺序。如果该更改更改了生成随机数的顺序,那么您将永远不会知道错误是否已消失,因为您已修复它或因为刺激已更改。如果您为每个线程都有一个随机数生成器,那么您的测试平台就不太容易受到这种影响 - 您可以更加确定错误已经消失,因为您修复了它。该特性称为随机稳定性。
所以,正如@dave_59 所说,你应该只使用 $urandom
和 $urandom_range
.
关于random - urandom_range(), urandom(), verilog 中的 random(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36698091/