我想从以下分布中获取随机值:
从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:
我在论坛上看到,有一些模拟器不允许实时随机化。我担心,我的模拟器就是这样的。
你能告诉我一些解决方案吗?
答案 0 :(得分:3)
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
答案 1 :(得分:1)
如果你有一个较新的ncsim版本(我知道15+工作肯定)并且你有混合信号许可证(我忘记了该许可证的确切名称),你可以随机化实数。
答案 2 :(得分:0)
稍后我可以使用以下代码解决此问题(通过引入初始化):
rand real randx = 0.001;
constraint constraint_randx {
randx dist{
[0.001 : 0.010] :/ 90,
[0.100 : 1.000] :/ 10
}; }