systemverilog中实数的随机化
randomization of real numbers in systemverilog
我想从以下分布中获得一个随机值:
从 1 到 10 的概率为 90%
从 100 到 1000,概率为 10%
为了达到这个目的,我写了以下内容:
constraint constraint_randx {
randx dist{
[0.001 : 0.010] :/ 90,
[0.100 : 1.000] :/ 10
}; }
应用随机化命令后,我收到以下错误消息:
ncsim: *W,RNDOCS: These variables contribute to the set of conflicting constraints:
我在论坛上看到有些模拟器不允许真实随机化。恐怕,我的模拟器就是这样的。
你能告诉我一些解决方案吗?
SystemVerilog 标准只定义了具有积分约束的随机积分变量。您可以将随机变量缩放为实数的 1000 倍的 int 并缩放约束。然后在 post_randomize 中,将值除以 1000.0 进行缩放。
rand int randx;
real realx;
constraint constraint_randx {
randx dist{
[0001 : 0010] :/ 90,
[0100 : 1000] :/ 10
}; }
function void post_randomize();
realx = randx/1000.0;
endfunction
如果你有较新的 ncsim 版本(我知道 15+ 肯定有效)并且你有混合信号许可证(我忘记了那个许可证的确切名称),你可以随机化实数。
我后来使用以下代码(通过引入初始化)解决了这个问题:
rand real randx = 0.001;
constraint constraint_randx {
randx dist{
[0.001 : 0.010] :/ 90,
[0.100 : 1.000] :/ 10
}; }
我想从以下分布中获得一个随机值:
从 1 到 10 的概率为 90% 从 100 到 1000,概率为 10%
为了达到这个目的,我写了以下内容:
constraint constraint_randx {
randx dist{
[0.001 : 0.010] :/ 90,
[0.100 : 1.000] :/ 10
}; }
应用随机化命令后,我收到以下错误消息:
ncsim: *W,RNDOCS: These variables contribute to the set of conflicting constraints:
我在论坛上看到有些模拟器不允许真实随机化。恐怕,我的模拟器就是这样的。
你能告诉我一些解决方案吗?
SystemVerilog 标准只定义了具有积分约束的随机积分变量。您可以将随机变量缩放为实数的 1000 倍的 int 并缩放约束。然后在 post_randomize 中,将值除以 1000.0 进行缩放。
rand int randx;
real realx;
constraint constraint_randx {
randx dist{
[0001 : 0010] :/ 90,
[0100 : 1000] :/ 10
}; }
function void post_randomize();
realx = randx/1000.0;
endfunction
如果你有较新的 ncsim 版本(我知道 15+ 肯定有效)并且你有混合信号许可证(我忘记了那个许可证的确切名称),你可以随机化实数。
我后来使用以下代码(通过引入初始化)解决了这个问题:
rand real randx = 0.001;
constraint constraint_randx {
randx dist{
[0.001 : 0.010] :/ 90,
[0.100 : 1.000] :/ 10
}; }