2017-04-17 1 views
-1
class Base 
rand bit b; 
// constraint c1 { every 5th randomization should have b =0;} 
endclass 

Ich weiß, ich kann eine statische Zählvariable und Update machen, die variable zählt und dann in Constraint kann ich überprüfen, ob 5 count% Null ist, dann machen b = 0, aber Gibt es einen besseren Weg, das zu tun? Vielen Dank.SystemVerilog Constraint, Wert Fixing jede n-ten Iteration

+1

Veröffentlichen Sie den tatsächlichen Code, den Sie verwenden würden. Dann können die Menschen einen besseren Weg anbieten, wenn es einen gibt. – toolic

+0

Es wurde nur in einem Interview gefragt. –

Antwort

0

Es ist nicht notwendig, die Zählung statisch zu machen, nur nicht zufällig.

class Base; 
    rand bit b; 
    int count; 
    constraint c1 { count%5 -> b==0;} 
    function post_randomize(); 
    count++; 
    endfunction 
endclass 
+0

Danke @ dave_59. Können Sie mir bitte mitteilen, wie die Anzahl der nicht-statischen Mitglieder von allen Instanzen der Klasse geteilt wird? Danke im Voraus. –

+0

Sie haben in Ihrer ursprünglichen Frage nicht angegeben, ob Sie ein Objekt wiederholt randomisieren oder viele Objekte erstellen möchten, die sie einmal zufällig verteilen. Ja, für Letzteres müsste die Zählung statisch sein. –

+0

Danke @ dave_59. –

-1

Wenn Sie die obere Grenze der b kennen, dann können Sie eine Einschränkung wie Folge schreiben.

constraint abc 
{ 
    b dist {0:=20, 1:=80} 
} 

Dies wird Gewicht von 0-20 und Gewicht von 1 zu 80 machen. Auf diese Weise wird 0 einmal in jeder Randomisierung auftreten.

+0

Das ist nicht korrekt. Eine Wahrscheinlichkeit von 1 zu 5 ist nicht die gleiche wie einmal in 5 Vorkommen, –

+0

Also meinst du zu sagen, dass es nicht garantiert ist, dass Werkzeug 0 einmal alle 5 Randomisierung mit der obigen Einschränkung erzeugen wird? –

+1

Korrekt. Wahrscheinlichkeit ist keine Garantie. –