兰德变量如何工作?

时间:2014-10-22 20:00:43

标签: system-verilog

我正在对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

1 个答案:

答案 0 :(得分:0)

rand修饰符将积分变量随机化为具有其范围的均匀分布。在该范围内选择一个值的概率是1 /范围。

在这种情况下,a1的范围是4,并且模拟器在for循环的前四次迭代中随机选取3。这种情况有1/64的可能性。

rand修饰符按预期工作。