生成随机数 - 种子更改仅一次

时间:2012-11-15 19:29:50

标签: verilog modelsim

我在循环中生成一个0到10000之间的verilog数字,如下所示:

wire rand;
integer i, seed;
initial 
   begin
      i=1;
      seed=0;
      while (i<10)
        begin
        force rand = $random(seed) % 10000;
      end
   end

种子只改变一次并在其余迭代中保持不变的问题。 (我在ModelSim中看到了值)。

2 个答案:

答案 0 :(得分:2)

它应该可以进行一些微小的修改,如果需要,随机数大于1位,并且不会在0时间内执行。 for循环优于while循环。

integer i, seed;
reg [31:0] rand;

initial begin
  seed=0;
  for(i=0; i<10; i=i+1) begin
    rand = $random(seed) % 10000;
    $display("rand %d", rand);
    #1ns; //Stop loop executing in 0 time
  end
end

答案 1 :(得分:1)

你不需要在那个循环中有某种延迟吗? AFAIK它会瞬间迭代所有10次迭代,最终会强制rand到最终生成的值。

另外,你在哪里增加i?或者你在粘贴代码之前修改了它?