开发者

srand() analog for SystemVerilog

C rand() and srand() functions is very useful when you doing something like that:

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

Can I have something like this in SystemVerilog? Yeah, I know about $urandom(SEED)开发者_运维百科, but the thing is it should SRAND once and rand() then many times


Section 18.13.3 of the SystemVerilog IEEE Std (1800-2009) describes the srandom function. Chapter 18 has a code example showing how to use it with $urandom.


A lot of the randomization in SystemVerilog is generally done within classes, where SV has a powerful randomization infrastructure. You'd generally do something like this:

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();

The advantage is that SV has a separate random number generator for every object, so that you're not changing the rest of the environment when you change that one object's seed. Of course, you can then also add constraints to r_value to make it fall between a range, for example.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜