Menu
Coddy logo textTech

Timescale Directive

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

timescale directiveは、シミュレーションのtime unittime precisionを設定します。これは、シミュレーターに#10のような遅延値をどのように解釈するかを伝えます。

これまでのレッスンでは、「10」が何を意味するのかを指定せずに、#10のような遅延を使用しました。10 nanosecondsでしょうか? 10ピコ秒でしょうか? timescale directiveがこの疑問に答えます。

構文:

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

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

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

一般的なTimescale値

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

遅延への影響

`timescale 1ns / 1ps

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

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

重要なルール

ルール説明
module の外側に置く必要がある任意の module 定義より前に配置する
バッククォート記号`timescale であり、'timescale ではない 
time unit ≥ time precision1ns / 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腕試し

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

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ