Menu
Coddy logo textTech

Timescaleディレクティブ

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

timescaleディレクティブは、シミュレーションの時間単位時間精度を設定します。これは、シミュレータに#10のような遅延値の解釈方法を伝えます。

以前のレッスンでは、#10 のような遅延を、「10」が何を意味するのかを指定せずに使用してきました。それは10ナノ秒でしょうか?10ピコ秒でしょうか?timescale ディレクティブがこの疑問に答えます。

構文:

`timescale time_unit / time_precision
項目意味
time_unit遅延の基本単位1ns
time_precisionシミュレーションの精度1ps

timescale の前にあるバッククォート ` は、それがコンパイラディレクティブであることを意味します。

`timescale 1ns / 1ps
  • time_unit = 1ns#10 は10ナノ秒を意味します
  • time_precision = 1ps → シミュレーションは最も近いピコ秒に丸められます

一般的なタイムスケール値

時間単位精度ユースケース
1ns / 1nsナノ秒単純なシミュレーション
1ns / 1psピコ秒より高精度
1ps / 1psピコ秒高速設計
1us / 1nsマイクロ秒低速なシミュレーション

遅延への影響

`timescale 1ns / 1ps

initial begin
  #10 a = 1;   // 10ナノ秒待機します
end

timescaleがない場合、一部のシミュレータはデフォルト値(多くの場合1ns)を想定します。常に指定することをお勧めします。

重要なルール

ルール説明
モジュールの外に配置する必要がありますモジュール定義の前に記述します
バッククォート記号'timescale ではなく `timescale を使用します 
時間単位 ≥ 時間精度1ns / 1ps は問題ありませんが、1ps / 1ns は不可です
ファイル内のすべての遅延に影響します一般的な遅延、ゲート遅延、代入遅延
challenge icon

チャレンジ

やること:

遅延が 10ns、20ns、および 30ns を表すように、不足している timescale ディレクティブを追加してください。

チートシート

`timescale ディレクティブは、シミュレーションの時間単位時間精度を設定します。これは、モジュール定義の前に配置する必要があります。

`timescale time_unit / time_precision
`timescale 1ns / 1ps

initial begin
  #10 a = 1;   // 10ナノ秒待機します
end
  • time_unit — 遅延の基本単位(例:#10 = 10ns)
  • time_precision — シミュレーションの丸め精度の細かさ(時間単位以下である必要があります)
タイムスケールユースケース
1ns / 1ns単純なシミュレーション
1ns / 1psより高精度
1ps / 1ps高速設計
1us / 1ns低速なシミュレーション

自分で試してみよう

// TODO: タイムスケール・ディレクティブ (1ns / 1ps) を追加してください

module timescale_challenge;
  
  initial begin
    $display("Time %0t", $time);
    #10 $display("Time %0t (10ns = 10000ps)", $time);
    #10 $display("Time %0t (20ns = 20000ps)", $time);
    #10 $display("Time %0t (30ns = 30000ps)", $time);
    $finish;
  end
endmodule
quiz icon腕試し

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

基礎のすべてのレッスン