System verilog 兰德变量是如何工作的?
我正在运行一个针对兰德变量的Systemverilog样本测试。 为什么a1不在本模块中随机分配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
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