systemverilog 中实数的随机化

Imr*_*ran 2 random system-verilog

我想从以下分布中获得一个随机值:

从 1 到 10,概率为 90% 从 100 到 1000,概率为 10%

为了实现这一目标,我写了以下内容:

    constraint constraint_randx {
    randx dist{
        [0.001   :   0.010] :/ 90,
        [0.100   :   1.000] :/ 10
    }; }
Run Code Online (Sandbox Code Playgroud)

应用随机化命令后,我收到以下错误消息:

ncsim: *W,RNDOCS: These variables contribute to the set of conflicting constraints:
Run Code Online (Sandbox Code Playgroud)

我从论坛上看到,有一些模拟器不允许真实的随机化。恐怕我的模拟器就是这样的。

你能给我一些解决方案吗?

dav*_*_59 5

SystemVerilog 标准仅定义具有积分约束的随机积分变量。您可以将随机变量缩放为实数 1000 倍的整数,并缩放约束。然后在 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
Run Code Online (Sandbox Code Playgroud)