2011-03-22 93 views
0

Çrand()srand()功能是非常有用的,當你做這樣的事情:srand()函數模擬了SystemVerilog的

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

SystemVerilog IEEE Std(1800-2009)的18.13.3部分描述了srandom函數。第18章有一個代碼示例,顯示如何將它與$urandom一起使用。

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添加約束以使其落入範圍之間。