2011-03-22 4 views
0

fonctions C rand() et srand() est très utile lorsque vous faites quelque chose comme ça:srand() analogique pour SystemVerilog

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

Puis-je avoir quelque chose comme ça dans SystemVerilog? Oui, je sais $urandom(SEED), mais la chose est qu'il devrait Srand une fois rand(), puis à plusieurs reprises

Répondre

2

Section 18.13.3 de la SystemVerilog IEEE Std (1800-2009) décrit la fonction srandom. Le chapitre 18 contient un exemple de code montrant comment l'utiliser avec $urandom.

0

Une grande partie de la randomisation dans SystemVerilog est généralement effectuée dans les classes, où SV dispose d'une puissante infrastructure de randomisation. Vous souhaitez généralement faire quelque chose comme ceci:

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

L'avantage est que SV a un générateur de nombres aléatoires séparés pour chaque objet, de sorte que vous ne changez pas le reste de l'environnement lorsque vous changez qu'une semence de l'objet . Bien sûr, vous pouvez également ajouter des contraintes à r_value pour le faire tomber entre une plage, par exemple.

Questions connexes