工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

Verilog 表示タスク

表示システム タスクは、主に情報メッセージとデバッグ メッセージを表示して、ログ ファイルからシミュレーションの流れを追跡するために使用され、デバッグを高速化するのにも役立ちます。値を出力できる表示タスクと形式には、さまざまなグループがあります。

タスクの表示/書き込み

構文

両方 $display$write 引数リストに表示される順序で引数を表示します。

  
  
$display(<list_of_arguments>);
$write(<list_of_arguments>);

  

$write 改行文字 を追加しません $display の間、その文字列の最後まで 以下に示す例から確認できます。

  
  
module tb;
  initial begin
    $display ("This ends with a new line ");
    $write ("This does not,");
    $write ("like this. To start new line, use newline char 
");
    $display ("This always start on a new line !");
  end
endmodule

  
シミュレーションログ
ncsim> run
This ends with a new line 
This does not,like this. To start new line, use newline char 
Hi there !
ncsim: *W,RNQUIE: Simulation is complete.

Verilog ストロボ

$strobe 現在のデルタ時間ステップの最後に変数の最終値を出力し、$display のような同様の形式を持ちます .

  
  
module tb;
  initial begin
    reg [7:0] a;
    reg [7:0] b;
    
    a = 8'h2D;
    b = 8'h2D;
    
    #10;                  // Wait till simulation reaches 10ns
    b <= a + 1;           // Assign a+1 value to b
    
    $display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
    $strobe  ("[$strobe]  time=%0t a=0x%0h b=0x%0h", $time, a, b);
    
    #1;
    $display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
    $strobe  ("[$strobe]  time=%0t a=0x%0h b=0x%0h", $time, a, b);
    
  end
endmodule

  

$strobe に注意してください 変数 b の最終更新値を表示します 0x2E である時間 10ns 、および $display 11ns の次のシミュレーション デルタでのみそれを取得します。

シミュレーションログ
ncsim> run
[$display] time=10 a=0x2d b=0x2d
[$strobe]  time=10 a=0x2d b=0x2e
[$display] time=11 a=0x2d b=0x2e
[$strobe]  time=11 a=0x2d b=0x2e
ncsim: *W,RNQUIE: Simulation is complete.
ncsim> exit

Verilog 連続モニター

$monitor 引数リスト内の変数または式が変更されるたびに、変数または式の値を自動的に出力するのに役立ちます。 $display を呼び出すのと同様の効果があります その引数のいずれかが更新されるたびに。

  
  
module tb;
  initial begin
    reg [7:0] a;
    reg [7:0] b;
    
    a = 8'h2D;
    b = 8'h2D;
        
    #10;                  // Wait till simulation reaches 10ns
    b <= a + 1;           // Assign a+1 value to b
    
    $monitor ("[$monitor] time=%0t a=0x%0h b=0x%0h", $time, a, b);
    
    #1 b <= 8'hA4;
    #5 b <= a - 8'h33;
    #10 b <= 8'h1;
  
  end
endmodule

  

$monitor に注意してください 引数変数の値の変化を監視および表示するメインスレッドのバックグラウンドで実行するために生成されるタスクのようなものです。新しい $monitor task は、シミュレーション中に何度でも発行できます。

シミュレーションログ
ncsim> run
[$monitor] time=10 a=0x2d b=0x2e
[$monitor] time=11 a=0x2d b=0xa4
[$monitor] time=16 a=0x2d b=0xfa
[$monitor] time=26 a=0x2d b=0x1
ncsim: *W,RNQUIE: Simulation is complete.

Verilog フォーマット指定子

表示関数内の変数を表示するには、適切な 書式指定子 変数ごとに指定する必要があります。

引数 説明
%h, %H 16 進形式で表示
%d, %D 10 進形式で表示
%b, %B バイナリ形式で表示
%m, %M 表示階層名
%s, %S 文字列として表示
%t, %T 時間形式で表示
%f, %F 'real' を 10 進形式で表示
%e, %E 「実数」を指数形式で表示
  
  
module tb;
  initial begin
    reg [7:0]  a;
    reg [39:0] str = "Hello";
    time       cur_time;
    real       float_pt;
    
    a = 8'h0E;
    float_pt = 3.142;
    
    $display ("a = %h", a);
    $display ("a = %d", a);
    $display ("a = %b", a);
    
    $display ("str = %s", str);
    #200 cur_time = $time;
    $display ("time = %t", cur_time);
    $display ("float_pt = %f", float_pt);
    $display ("float_pt = %e", float_pt);
  end
endmodule

  
シミュレーションログ
ncsim> run
a = 0e
a =  14
a = 00001110
str = Hello
time =                  200
float_pt = 3.142000
float_pt = 3.142000e+00
ncsim: *W,RNQUIE: Simulation is complete.

Verilog エスケープ シーケンス

一部の文字は、改行、タブ、フォーム フィードなどの他の表示目的を表すため、特別と見なされます。これらの特殊文字を印刷するには 、そのような文字の出現ごとにエスケープする必要があります .

引数 説明
改行文字
タブ文字
キャラクター
" " 文字
%% % 文字
  
  
module tb;
  initial begin
    $write ("Newline character 
");
    $display ("Tab character 	stop");
    $display ("Escaping  " %%");
    
/*    
    // Compilation errors
    $display ("Without escaping ");       // ERROR : Unterminated string
    $display ("Without escaping "");       // ERROR : Unterminated string
*/
  end
endmodule

  
シミュレーションログ
ncsim> run
Newline character 
 
Tab character	stop
Escaping  " %
ncsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. Verilog チュートリアル
  2. Verilog 連結
  3. Verilog 割り当て
  4. Verilog ブロッキング &ノンブロッキング
  5. Verilog 関数
  6. Verilog タスク
  7. Verilog `ifdef 条件付きコンパイル
  8. Verilog 階層参照スコープ
  9. Verilog クロック ジェネレーター
  10. Verilog 表示タスク
  11. Verilog 数学関数