1

Crand()srand()関数は、次のようなことを行うときに非常に便利です。

srand(SEED);
for()
{
    //doing something with one thing using rand()
}
srand(SEED);
for()
{
    //doing something with other thing using rand()
}

SystemVerilog でこのようなものを使用できますか? ええ、私は知って$urandom(SEED)いますが、問題は、SRAND を 1 回実行し、rand() を何度も実行する必要があることです。

4

2 に答える 2

2

SystemVerilog IEEE Std (1800-2009) のセクション 18.13.3 で、srandom関数について説明しています。第 18 章には、 での使用方法を示すコード例があります$urandom

于 2011-03-22T23:36:30.107 に答える
0

SystemVerilogでのランダム化の多くは、通常、SVが強力なランダム化インフラストラクチャを備えているクラス内で行われます。通常、次のようなことを行います。

class Foo;
  rand int r_value;
  function void reseed(int seed);
    srandom(seed);
  endfunction
  function void do_something();  
    randomize();
    $display("something: %0d", value);
  endfunction
  function void do_something_else(); 
    randomize();
    $display("something: %0d", value);
  endfunction
endclass

....

Foo foo = new();
foo.reseed(seed);
foo.do_something();
foo.reseed(seed);
foo.do_something_else();

利点は、SVがオブジェクトごとに個別の乱数ジェネレーターを備えているため、その1つのオブジェクトのシードを変更するときに、残りの環境を変更しないことです。もちろん、たとえば、r_valueに制約を追加して、範囲内に収まるようにすることもできます。

于 2013-01-01T02:38:41.253 に答える