systemverilog中实数的随机化

时间:2017-07-22 01:37:16

标签: random system-verilog

我想从以下分布中获取随机值:

从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:

我在论坛上看到,有一些模拟器不允许实时随机化。我担心,我的模拟器就是这样的。

你能告诉我一些解决方案吗?

3 个答案:

答案 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
    }; }