用于SystemVerilog的srand()模拟

时间:2011-03-22 17:38:59

标签: random verilog system-verilog

当你做这样的事情时,

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 个答案:

答案 0 :(得分:2)

SystemVerilog IEEE Std(1800-2009)的第18.13.3节描述了srandom功能。第18章有一个代码示例,说明如何将其与$urandom一起使用。

答案 1 :(得分: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为每个对象都有一个单独的随机数生成器,因此当您更改一个对象的种子时,您不会更改其余的环境。当然,您也可以向r_value添加约束,使其落在范围之间,例如。