我正在对rand变量运行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
结果:
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
答案 0 :(得分:0)
rand修饰符将积分变量随机化为具有其范围的均匀分布。在该范围内选择一个值的概率是1 /范围。
在这种情况下,a1的范围是4,并且模拟器在for循环的前四次迭代中随机选取3。这种情况有1/64的可能性。
rand修饰符按预期工作。