systemVerilog-如何将$URADOM/$random与范围一起使用?
有没有方法使用$urandom/$random随范围使用 我通过以下方式成功地使用最大范围(在本例中,11是最大范围):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,它们
但是,我如何才能为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}; };