1

Verilog の $display と$strobe$ monitorの違いは何ですか? イベント キューでそれぞれが適用されるのはいつで、ステートメントはどのように相互作用しますか? ステートメントは別のステートメントを禁止できますか?

4

2 に答える 2

10

LRM (Language Reference Manual)の概要を説明しますが、読んでおいてください。すべてはIEEE Std 1800-2012 § 21.2表示システム タスクにあります(技術的には SystemVerilog ですが、これらの機能は同一です。)

  • $display: 即値を表示
    • § 21.2.1表示タスクと書き込みタスク
  • $strobe: 現在のタイムステップの最後に値を出力します
    • § 21.2.2ストローブ監視
  • $monitor: 値が変更された場合、現在のタイムステップの最後に値を出力します。$monitor一度だけ呼び出すことができます。順次呼び出しは前のものをオーバーライドします。
    • § 21.2.3継続的な監視
  • $write: と同じ$displayですが、改行で終了しません ( \n)
    • § 21.2.1表示タスクと書き込みタスク

例:

reg [3:0] a,b;
integer i;
initial begin
  $monitor("monitor a:%h b:%h @ %0t", a, b, $time);
  for(i=0; i<4; i=i+1) begin
    $strobe("strobe  a:%h b:%h @ %0t", a, b, $time);
    $display("display a:%h b:%h @ %0t", a, b, $time);
    case(i)
      0 : a = 4;
      1 : b = 1;
      2 : begin end // do nothing
      3 : {a,b} = 9;
    endcase
    $display("display a:%h b:%h @ %0t", a, b, $time);
    #1;
  end
end

出力: (印刷順序とそのモニターが時間 2 で表示されていないことに注意してください)

ディスプレイ a:xb:x @ 0
ディスプレイ a:4 b:x @ 0
モニター a:4 b:x @ 0
ストロボ a:4 b:x @ 0
ディスプレイ a:4 b:x @ 1
ディスプレイ a:4 b: 1 @ 1
モニター a:4 b:1 @ 1
ストロボ a:4 b:1 @ 1
ディスプレイ a:4 b:1 @ 2
ディスプレイ a:4 b:1 @ 2
ストロボ a:4 b:1 @ 2
ディスプレイ a :4 b:1 @ 3
ディスプレイ a:0 b:9 @ 3
モニター a:0 b:9 @ 3
ストロボ a:0 b:9 @ 3

于 2015-09-29T21:59:35.627 に答える
4

Verilog/SystemVerilog には、よく整理されたイベント キューが含まれています。各タイムスタンプのすべてのステートメントは、このキューに従って実行されます。

  • $display はACTIVE regionで実行されるため、非ブロッキング割り当て (INACTIVE 領域で実行される) がある場合、それは $display によって表示されません。
  • $write はACTIVE regionでも実行されますが、別の行を挿入するには改行文字 (\n) を明示的に呼び出す必要があります。このシステムタスクは、一般的に for ループを使用して多次元配列を表示したい場合に使用されます。
  • $strobe はMONITOR/POSTPONE regionで、つまりタイムスタンプの最後に実行されます。したがって、更新された値は $strobe によって表示されます。
  • $monitor は、表示パラメータの 1 つが変更されるたびに表示されます。シミュレーションごとに 1 つの $monitor のみが使用されます。

この画像を見てください:VERILOG EVENT REGIONS

サンプルコードは、Display/Strobe/Monitorで入手できます。

このコードがそれを明確にすることを願っています。

于 2015-09-30T04:54:17.790 に答える