2017-01-27 21 views
1

私はテスト目的でVerilogのすべてのクロックサイクルで1ビットの乱数を生成しようとしています。私はテストベンチモジュールでこれをやっています。ここにコードがあります。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 

しかし、シミュレーションの後、私はseedに1の一定の値を取得していますし、inはXを持っています。 何か助けていただければ幸いです。

答えて

2

あなたのインデントは誤解を招きます。ここにあなたのコードが解析される方法です:あなたはforeverループの最後に到達することはありませんので、

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

あなたのコードinへの割り当てに達することはありません。 inregと宣言したので、決して値をinに割り当てないと、そのデフォルト値はxのままです。

inへの割り当ては、foreverループ内にある必要があります。これにより、クロックエッジごとにinに対して0と1のランダムストリームが生成されます。

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

ありがとうございます。本当に役に立ちました。さて、私はこのミスをもう一度やりません。 –

+1

ようこそ。それは簡単に間違いです。私はコードをどのようにインデントするか非常に厳しくしようとします。余分な時間は通常、これらの一般的なエラーを避けるために支払われます。 – toolic

関連する問題