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

Verilog timescaleのマスター:単位、精度、正確なシミュレーションタイミング

Verilogシミュレーションは、時間がどのように定義されるかに依存します。なぜなら、シミュレータは#1が時間の面から何を意味するかを知る必要があるからです。`timescaleコンパイラディレクティブは、それに続くモジュールの時間単位と精度を指定します。

構文

`timescale <time_unit>/<time_precision>
// 例
`timescale 1ns/1ps
`timescale 10us/100ns
`timescale 10ns/1ns

time_unitは遅延とシミュレーション時間の測定単位であり、time_precisionは遅延値がシミュレーションで使用される前にどのように丸められるかを指定します。

同じ設計で異なる時間単位を使用するには、以下のtimescale構造を使用します。設計内の遅延仕様は合成可能ではなく、ハードウェアロジックに変換できないことに注意してください。

文字 単位
s 秒
ms ミリ秒
us マイクロ秒
ns ナノ秒
ps ピコ秒
fs フェムト秒

これらの仕様の整数部分は1、10、または100のみ可能で、単位を指定する文字列は上記テーブルのいずれかの値を取れます。

例 #1: 1ns/1ns

// time_unitが1ns、time_precisionも1nsのtimescaleを宣言
`timescale 1ns/1ns
module tb;
  // timescaleの効果を理解するため、
  // 信号をいくつかの遅延後に値で駆動
  reg val;
  initial begin
    // 時間0単位で信号を0に初期化
    val <= 0;
    // 1時間単位進め、メッセージ表示してvalをトグル
    #1 $display ("T=%0t At time #1", $realtime);
    val <= 1;
    // 0.49時間単位進めてvalをトグル
    #0.49 $display ("T=%0t At time #0.49", $realtime);
    val <= 0;
    // 0.50時間単位進めてvalをトグル
    #0.50 $display ("T=%0t At time #0.50", $realtime);
    val <= 1;
    // 0.51時間単位進めてvalをトグル
    #0.51 $display ("T=%0t At time #0.51", $realtime);
    val <= 0;
    // さらに5時間単位シミュレーション実行して終了
    #5 $display ("T=%0t End of simulation", $realtime);
  end
endmodule

最初の遅延文は#1を使用し、`timescaleディレクティブで指定された1時間単位(1ns)ちょうど待機させます。2番目の遅延文は0.49を使用し、半分の時間単位未満です。しかし時間精度が1nsと指定されているため、シミュレータは1nsより小さくできず、与えられた遅延文を丸めて0nsになります。したがって、2番目の遅延はシミュレーション時間を進めません。

3番目の遅延文はちょうど半分の時間単位[hl]#0.5[/lh]を使用し、またシミュレータが値を丸めて#1(1時間単位全体)を得ます。したがってこれはT=2nsで出力されます。

4番目の遅延文は半分より大きい値を使用し、同様に丸められてT=3nsで表示されます。

ncsim> run
T=1 At time #1
T=1 At time #0.49
T=2 At time #0.50
T=3 At time #0.51
T=8 End of simulation
ncsim: *W,RNQUIE: Simulation is complete.

シミュレーションは予想通り8nsで実行されますが、波形には各ナノ秒間のより小さな分割がないことに注意してください。これは時間の精度が時間単位と同じであるためです。

例 #2: 10ns/1ns

前の例からの唯一の変更は、timescaleが1ns/1nsから10ns/1nsに変更されたことです。したがって、時間単位は10ns、精度は1nsです。

// time_unitが10ns、time_precisionが1nsのtimescaleを宣言
`timescale 10ns/1ns
// 注: テストベンチは前の例と同じ
module tb;
  reg val;
  initial begin
    val <= 0;
    #1 $display ("T=%0t At time #1", $realtime);
    val <= 1;
    #0.49 $display ("T=%0t At time #0.49", $realtime);
    val <= 0;
    #0.50 $display ("T=%0t At time #0.50", $realtime);
    val <= 1;
    #0.51 $display ("T=%0t At time #0.51", $realtime);
    val <= 0;
    #5 $display ("T=%0t End of simulation", $realtime);
  end
endmodule

実際のシミュレーション時間は、#で指定された遅延に時間単位を乗算し、その後精度に基づいて丸めることで得られます。最初の遅延文は10nsになり、2番目は14.9nsで15nsに丸められます。

3番目の文も同様に5ns(0.5 × 10ns)を加算し、総時間は20nsになります。4番目はさらに5ns(0.51 × 10)を加算し、総時間を25nsに進めます。

ncsim> run
T=10 At time #1
T=15 At time #0.49
T=20 At time #0.50
T=25 At time #0.51
T=75 End of simulation
ncsim: *W,RNQUIE: Simulation is complete.

波形の基本単位が10ナノ秒刻みで、精度1nsであることに注意してください。

例 #3: 1ns/1ps

前の例からの唯一の変更は、timescaleが1ns/1nsから1ns/1psに変更されたことです。したがって、時間単位は1ns、精度は1psです。

// time_unitが1ns、time_precisionが1psのtimescaleを宣言
`timescale 1ns/1ps
// 注: テストベンチは前の例と同じ
module tb;
  reg val;
  initial begin
    val <= 0;
    #1 $display ("T=%0t At time #1", $realtime);
    val <= 1;
    #0.49 $display ("T=%0t At time #0.49", $realtime);
    val <= 0;
    #0.50 $display ("T=%0t At time #0.50", $realtime);
    val <= 1;
    #0.51 $display ("T=%0t At time #0.51", $realtime);
    val <= 0;
    #5 $display ("T=%0t End of simulation", $realtime);
  end
endmodule

新しい精度値1psに合わせて時間単位がスケーリングされていることがわかります。また、時間が最小解像度(この場合ピコ秒)で表現されていることにも注意してください。

ncsim> run
T=1000 At time #1
T=1490 At time #0.49
T=1990 At time #0.50
T=2500 At time #0.51
T=7500 End of simulation
ncsim: *W,RNQUIE: Simulation is complete.

Verilog

  1. Verilogマスター:デジタル回路設計のための完全チュートリアル
  2. Verilog連結マスター:実践ガイド
  3. Verilog代入文の理解:種類、構文、ベストプラクティス
  4. Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
  5. Verilog関数のマスター:効率的なRTL設計のために
  6. Verilogタスクの理解:関数との違い、構文、使用法
  7. Verilogスケジューリングセマンティクスの理解:タイミング、イベント、実行順序
  8. Verilogクロックジェネレータ:設計と実装ガイド
  9. Verilog数学関数のマスター:効率的なハードウェア設計のために
  10. Verilog $timeformatのマスター:精度と表示制御
  11. 任意のスコープでのVerilog timescale理解と表示