2016-04-26 21 views
2
typedef enum int { IPV4_VERSION = 0, IPV4_IHL = 1, IPV4_TOTAL_LENGTH = 2,IPV4_CHECKSUM = 3 } ipv4_corrupton; 

ipv4_corrupton ipv4_corrupt; 

std::randomize(ipv4_corrupt) with {ipv4_corrupt dist { IPV4_VERSION :=2,IPV4_IHL := 4,IPV4_TOTAL_LENGTH := 4,IPV4_CHECKSUM := 2}; }; 

Ich lief den obigen Code 10 mal und immer IPV4_CHECKSUM. Ich mache einen Fehler?Generate Random Enum mit System Verilog

+1

werden Sie die gleiche Randomisierung in der gleichen Simulation zu wiederholen oder verschiedene Simulationen mit jeweils einer Randomisierung ausführen n? Der erste sollte Ihnen zufällige Werte geben. Die zweite wird durch den Samen von der Kommandozeile bestimmt. Ich glaube, dass das Standard-Saatgut 1 ist. Lesen Sie in Ihrem Handbuch nach, wie Sie das Saatgut einstellen. Die Option ist in der Regel "-seed", "-svseed" oder "-sed". Auch hier handelt es sich um Tool-spezifische Funktionen. Überprüfen Sie das Handbuch. In der Regel kann der Wert ein vorzeichenbehafteter 32-Bit-Wert oder das Wort "rand" oder "random" sein, das den Pseudozufallswert Ihres Betriebssystems verwendet. – Greg

+1

Ja, ich rufe die obige Randomisierung in der gleichen Simulation 10 Mal. Ich mache immer eine Simulation mit verschiedenen Samen. Aber ich sehe immer noch denselben Wert generiert werden. – user3510047

+1

Hallo, ich habe versucht, Ihr Stück Code zu laufen und es funktioniert gut.Ich habe kein Problem mit diesem Code.Sie geben zufälligen Wert von Enum-Typ Variable.So, ich schlage vor, Sie es zu überprüfen und versuchen, mehr zu erkunden es oder einige Ergebnisse in Bezug darauf. – ChetanJoshi

Antwort

0

Ich habe Ihren Code ein wenig modifiziert und die erwartete Ausgabe erhalten.

module test; 

    typedef enum int { IPV4_VERSION = 0, IPV4_IHL = 1, IPV4_TOTAL_LENGTH = 2,IPV4_CHECKSUM = 3 } ipv4_corrupton; 

    ipv4_corrupton ipv4_corrupt; 

    initial begin 

    repeat(10) begin 

     #1 

     std::randomize(ipv4_corrupt) with {ipv4_corrupt dist { 0 :=2,1 := 4,2:= 4,3:= 2}; }; 

     $display ("Value is %s",ipv4_corrupt); 

    end 

    end 

endmodule 

Ausgang:

Wert wird IPV4_VERSION

Wert ist IPV4_IHL

Wert ist IPV4_TOTAL_LENGTH

Wert wird IPV4_IHL

Wert ist IPV4_VERSION

Wert ist IPV4_TOTAL_LENGTH

Wert ist IPV4_CHECKSUM

Wert ist IPV4_TOTAL_LENGTH

Wert ist IPV4_IHL

Wert ist IPV4_IHL