2011-03-10 1 views
0

私は、initialまたはalwaysを使用しないVerilogモジュールを$ displayステートメントを使ってデバッグしようとしています。しかし、これらは初期ブロックまたは常にブロックの外側では違法であるように見えます。何故ですか?私の選択肢は何ですか?

答えて

1

なぜですか?これが、IEEE標準がそれをどのように指定したかによるものです。

代わりに、テストベンチからモジュールインスタンスをスコープすることもできます。テストベンチにinitialまたはalwaysブロックがあり、$displayと呼びます。別の有用なシステムタスクは$monitorです:

module tb; 

reg a = 0; 

dut dut (.a(a)); 

initial begin 
    $monitor("time=%0t, a=%b, b=%b", $time, a, dut.b); 
    #5 a = 1; 
    #5 a = 0; 
    #5 $finish; 
end 

endmodule 

module dut (input a); 
    wire b = ~a; 
endmodule 
シミュレーションを実行するときは、出力のこの種を取得する必要があります

time=0, a=0, b=1 
time=5, a=1, b=0 
time=10, a=0, b=1 

更新: dut.b信号がダウン範囲にあなたを可能にする階層指定子ですトップレベルモジュール(tb)から別のモジュールに移動します。 dutはインスタンス名、bはdutインスタンス内のシグナル名です。ピリオドはインスタンス名と信号名を区切ります。

+0

私はテストベンチからモジュールを調べる方法を理解していません。私は$ displayステートメントを可能にするために、変数の開始と終了を表示するモジュールを作成しました。変数を検査したいモジュールから呼び出されます。これは同じことを成し遂げますか? –

+0

私は、モジュールを調べることに関する情報で自分の答えを更新しました。ポート接続を使って '$ display'を使ってあなたのモジュール信号をモジュールに接続すると、あなたが説明したことがうまくいくでしょう。 – toolic