systemVerilog-如何将$URADOM/$random与范围一起使用?

systemVerilog-如何将$URADOM/$random与范围一起使用?,random,system-verilog,Random,System Verilog,有没有方法使用$urandom/$random随范围使用 我通过以下方式成功地使用最大范围(在本例中,11是最大范围): 但是,我如何才能为max和min执行此操作,例如max=11,min=8。您需要$uradom\u range,例如: temp = $urandom_range(maxVal,minVal); minVal是可选的;如果不使用它,最小值将为零。还要注意,$urandom_range的参数是int无符号的,因此-1将被视为一个非常正数,如果minVal大于maxVal,它们

有没有方法使用$urandom/$random随范围使用

我通过以下方式成功地使用最大范围(在本例中,11是最大范围):


但是,我如何才能为max和min执行此操作,例如max=11,min=8。

您需要
$uradom\u range
,例如:

temp = $urandom_range(maxVal,minVal);

minVal
是可选的;如果不使用它,最小值将为零。

还要注意,$urandom_range的参数是int无符号的,因此-1将被视为一个非常正数,如果minVal大于maxVal,它们将自动交换

$urandom_range非常方便,但您也可以查看std::randomize(),并使用“inside”设置一个内嵌约束,例如:

ok = std::randomize(a) with {a inside {0, [12:23], 42}; };

看看

@jonesofcam-我不能使用随机化()因为我使用的ModelSim不支持它。我不能使用$urandom\u range,因为我希望能够使用seed。@sara8d
$urandom\u range
的种子设定方式与
$urandom
的种子设定方式相同。具体方式取决于供应商。Verilog标准中定义了
$random
的种子设定方式,但如果您使用
$random
,您就可以仅获取一个随机数生成器,因此随机稳定性较差。这就是每个事务将获取不同种子的原因。@sara8d不一定。这取决于您如何对其进行编码。在系统verilog中,如果使用
$urandom
$urandom\u range
random()
,每个线程都有自己的随机数生成器(RNG)并且该RNG是从父线程播种的。因此,每个线程的种子取决于生成线程时父线程的RNG状态。因此,当您随机化事务时,RNG使用执行
$urandom
$urandom\u range
随机化()
这通常是sequencer中的代码所使用的线程(或您想调用的任何线程)。@sara8d巧合地刚刚运行,今天晚些时候再次运行。我想您可能会发现它很有用。
ok = std::randomize(a) with {a inside {0, [12:23], 42}; };