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()那么多次
答案 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添加约束,使其落在范围之间,例如。