аналог srand () для SystemVerilog - PullRequest
0 голосов
/ 22 марта 2011
Функции

C rand() и 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 один раз и rand () затем много раз

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

В разделе 18.13.3 стандарта IEEE SystemVerilog (1800-2009) описана функция srandom.В главе 18 приведен пример кода, показывающий, как его использовать с $urandom.

0 голосов
/ 01 января 2013

Большая часть рандомизации в 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 имеет отдельный генератор случайных чисел для каждого объекта, так что вы не изменяете остальную среду, когда изменяете этот объект.семя объекта.Конечно, вы можете также добавить ограничения к r_value, чтобы он попадал между диапазонами, например.

...