2017-01-27 6 views
1

Ich versuche, zu Testzwecken in Verilog eine einzelne Bit-Zufallszahl für jeden Taktzyklus zu generieren. Ich mache das im Testbench-Modul. Hier ist der Code;1-Bit-Zufallszahlengenerator in Verilog

module tb; 

// Inputs 
reg clk; 
reg in; 

// Outputs 
wire x; 

// Instantiate the Unit Under Test (UUT) 
single_bit uut (
    .clk(clk), 
    .in(in), 
    .x(x) 
); 

integer seed=1; 
initial 
begin 
    clk=0; 
    forever 
    #5 clk=!clk; 
     in= $random(seed); 
end 

endmodule 

Aber nach der Simulation, ich konstanten Wert von 1 in seed bin immer und in hat x. Jede Hilfe wird geschätzt.

Antwort

2

Ihr Einzug ist irreführend. Hier ist, wie Sie Ihren Code analysiert wird:

initial begin 
    clk=0; 
    forever #5 clk=!clk; 
    in= $random(seed); 
end 

Ihr Code erreicht nie die Zuordnung zu in, weil Sie nie das Ende Ihrer forever Schleife erreichen. Da Sie in als reg deklariert haben und Sie nie einen Wert in zuweisen, behält es seinen Standardwert von x bei.

Die Zuordnung zu in sollte innerhalb der forever Schleife sein. Dies erzeugt einen zufälligen Strom von 0 und 1 für in an jeder Taktflanke:

initial begin 
    clk=0; 
    forever begin 
     #5 clk=!clk; 
     in = $random(seed); 
    end 
end 
+1

Vielen Dank. Es war sehr hilfreich. Jetzt werde ich diesen Fehler nie wieder machen. –

+1

Gern geschehen. Es ist ein leichter Fehler zu machen. Ich versuche sehr streng zu sein, wie ich Code umziehe; Die zusätzliche Zeit lohnt sich normalerweise, um diese häufigen Fehler zu vermeiden. – toolic