Menu
Coddy logo textTech

Display と Monitor

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 75/90。

$display$monitor は、シミュレーションから情報を出力するために使用されるシステムタスクです。これらは、設計の内部で何が起きているかを確認するのに役立ちます。

$display

$display は、実行された瞬間にメッセージを一度だけ表示します。

構文:

$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 は、変数のいずれかが変化するたびに自動的にメッセージを表示します。

構文:

$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
表示のタイミング実行時に一度だけ変数が変化するたびに
出力回数呼び出した回数分継続的に(変更されるまで)
用途ヘッダー、テストメッセージ変化する信号の追跡

一般的な書式指定子

指定子意味
%b2進数$display("%b", a);
%d10進数$display("%d", count);
%h16進数$display("%h", data);
%t時間$display("%t", $time);
%0t時間(スペースなし)$display("%0t", $time);
%s文字列$display("%s", "Hello");

重要なルール

ルール説明
$display は一度だけ出力しますヘッダーや最終結果に適しています
$monitor は値が変化したときに出力します信号の監視に適しています
有効な $monitor は1つだけです最後のものが以前のものを上書きします
停止するには $finish を使用しますそうしないと、シミュレーションが永久に実行される可能性があります
challenge icon

チャレンジ

このテストベンチに、不足している $display および $monitor ステートメントを追加してください。

作業内容:

  1. ヘッダーを出力するために $display を追加してください: "Testing OR Gate"
  2. 信号が変化するたびに時間、x、y、zを出力するために $monitor を追加してください。フォーマット: "Time %0t: x=%b, y=%b, z=%b"
  3. 最後に "Test complete" と出力するために $display を追加してください

チートシート

$display は実行時に一度だけ表示されます。$monitor は変数のいずれかが変化するたびに自動的に表示されます。

$display("message", variables);
$monitor("message", variables);

例:

initial begin
  $display("Simulation started");
  $monitor("Time %0t: a=%b, b=%b", $time, a, b);
  #10 a = 1;
  #10 b = 1;
end

一般的なフォーマット指定子:

  • %b — 2進数
  • %d — 10進数
  • %h — 16進数
  • %t / %0t — 時刻(パディングあり/なし)
  • %s — 文字列

主なルール:

  • 一度にアクティブにできる $monitor は1つだけです。最後に呼び出されたものが以前のものを上書きします。
  • シミュレーションを停止するには $finish を使用します。

自分で試してみよう

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
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン