Menu
Coddy logo textTech

Timescaleディレクティブ

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

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

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

構文:

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

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

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

共通の Timescale 値

Time UnitPrecisionユースケース
1ns / 1nsナノ秒シンプルなシミュレーション
1ns / 1psピコ秒より高精度
1ps / 1psピコ秒高速設計
1us / 1nsマイクロ秒低速なシミュレーション

遅延への影響

`timescale 1ns / 1ps

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

timescale を指定しない場合、一部のシミュレータはデフォルト値(多くは 1ns)を前提とします。常に明示的に指定するのが最善です。

重要なルール

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

チャレンジ

作業内容:

遅延が 10ns、20ns、30ns を表すように、不足している timescale directive を追加します。

自分で試してみよう

// TODO: timescaleディレクティブを追加 (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腕試し

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

基礎のすべてのレッスン