Display と Monitor
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 75/90。
$display と $monitor は、シミュレーションから情報を出力するために使用されるシステム・タスクです。これらを使用することで、設計の内部で何が起きているかを確認できます。
$display
$display は、実行された瞬間に 1回だけ メッセージを出力します。
構文:
$display("message", variables);例:
initial begin
$display("Simulation started");
#10;
$display("Time 10");
#10;
$display("Time 20");
end出力:
Simulation started
Time 10
Time 20$monitor
$monitor は、指定した変数(variables)のいずれかが変更されるたびに自動的にメッセージをプリントします。
構文:
$monitor("message", variables);例:
initial begin
a = 0; b = 0;
$monitor("Time %0t: a=%b, b=%b", $time, a, b);
#10 a = 1;
#10 b = 1;
#10 a = 0;
end出力:
Time 0: a=0, b=0
Time 10: a=1, b=0
Time 20: a=1, b=1
Time 30: a=0, b=1$display vs $monitor
| $display | $monitor | |
|---|---|---|
| 出力タイミング | 実行された時に1回 | 値(variable)が変更されるたび |
| 実行回数 | 呼び出した回数分 | 継続的(変更されるまで) |
| 用途 | ヘッダー、テストメッセージ | 変化する信号の追跡 |
よく使われるフォーマット指定子
| 指定子 | 意味 | 例 |
|---|---|---|
%b | Binary | $display("%b", a); |
%d | 10進数 | $display("%d", count); |
%h | 16進数 | $display("%h", data); |
%t | Time | $display("%t", $time); |
%0t | Time (スペースなし) | $display("%0t", $time); |
%s | 文字列 | $display("%s", "Hello"); |
重要なルール
| ルール | 説明 |
|---|---|
$display は1回出力する | ヘッダーや最終結果に最適 |
$monitor は変更時に出力する | 信号の監視に最適 |
アクティブな $monitor は1つのみ | 最後のものが以前のものを上書きする |
停止するには $finish を使用する | そうしないとシミュレーションが永久に実行される可能性があります |
チャレンジ
この testbench に不足している $display および $monitor ステートメントを追加してください。
手順:
- ヘッダーを出力する
$displayを追加します: "Testing OR Gate" - いずれかの信号が変化したときに time、x、y、z を出力する
$monitorを追加します。フォーマット: "Time %0t: x=%b, y=%b, z=%b" - 最後に "Test complete" を出力する
$displayを追加します
自分で試してみよう
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
// TODO: $display ヘッダー "Testing OR Gate" を追加
// TODO: 時間、x、y、z を追跡する $monitor を追加
// フォーマット: "Time %0t: x=%b, y=%b, z=%b"
// 刺激を適用
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
// TODO: $display "Test complete" を追加
$finish;
end
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。