0

我在这样的循环中生成一个介于 0 到 10000 之间的 ve​​rilog 数字:

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

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

4

2 回答 2

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
于 2012-11-15T21:12:53.333 回答
1

您不需要在该循环中进行某种延迟吗?AFAIK 它只会立即迭代所有 10 次迭代,并且最终会强制rand到最终生成的值。

另外,你在哪里增加i?或者你只是在粘贴代码之前把它删掉了?

于 2012-11-15T20:30:38.970 回答