Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog 兰德变量是如何工作的?_System Verilog - Fatal编程技术网

System verilog 兰德变量是如何工作的?

System verilog 兰德变量是如何工作的?,system-verilog,System Verilog,我正在运行一个针对兰德变量的Systemverilog样本测试。 为什么a1不在本模块中随机分配 class Simple; rand bit [1:0] a1; randc bit [1:0] b1; endclass Simple p = new; initial begin $display("Randomize state %d",p.a1.rand_mode()); for (int i=0;i<=3;i++) begin p.r

我正在运行一个针对兰德变量的Systemverilog样本测试。 为什么a1不在本模块中随机分配

class  Simple;
    rand bit [1:0] a1;
    randc bit [1:0] b1;
endclass

Simple p = new;

initial begin
   $display("Randomize state %d",p.a1.rand_mode());
   for (int i=0;i<=3;i++) begin
        p.randomize();
        $display("\a1 is %d",p.a1);
        $display("\b1 is %d",p.b1);
   end
end

“兰德”修改器将整变量随机化为均匀分布及其范围。它选择该范围内的值的概率为1/2

在这种情况下,a1的范围是4,模拟器在for循环的前四次迭代中随机选择3。这种情况发生的几率为1/64


rand修饰符按预期工作。

对我有效(将代码包装在模块中并删除\)
\run-all\35;随机化状态1#a1为0#b1为3#a1为1#b1为0#a1为0#b1为2#a1为2#b1为1
在初始块中插入新语句时,我得到的随机序列为2。这可能是特定于工具的事情。你在用什么工具?我用奎斯塔。尝试运行10的循环。是的,成功了。我在初始块外添加了rand变量,并将迭代次数增加到10次。a1现在是
3 3 0 3 2 1 3
。连续四次将a1随机化为3的几率为1/64。我想这就是兰德和兰迪的区别。有了randc,我们保证可以在整个范围内循环。对于兰德,我们不是。我不知道这篇文章为什么会被否决。这是一个合理的问题。谢谢你,戴夫。
 Randomize state           1
    a1 is 3
    b1 is 2
    a1 is 3
    b1 is 3
    a1 is 3
    b1 is 0
    a1 is 3
    b1 is 1