0

次のようなループ内で 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 に値が表示されます)。

4

2 に答える 2

2

いくつかのマイナーな変更、必要に応じて 1 ビットより広い乱数で動作し、0 時間で実行されないはずです。ここでは、while ループよりも for ループの方が適しています。

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

そのループ内である種の遅延は必要ありませんか? 私の知る限り、10回の反復すべてを瞬時に反復randし、最終的に生成された値を強制するだけです。

また、どこでインクリメントしていますiか? それとも、コードを貼り付ける前にそれを削除しましたか?

于 2012-11-15T20:30:38.970 に答える