Menu
Coddy logo textTech

Timescale Directive

Часть раздела Основы путешествия по Verilog на Coddy. Урок 70 из 90.

Директива timescale задаёт единицу времени и точность времени для симуляции. Она сообщает симулятору, как интерпретировать значения задержки, такие как #10.

В предыдущих уроках мы использовали задержки, такие как #10, не уточняя, что означает «10». Это 10 nanoseconds? 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 → Моделирование округляется до ближайшей пикосекунды

Распространённые значения timescale

Time ЕдиницаТочностьВариант использования
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

Задание

Что нужно сделать:

Добавьте отсутствующую директиву timescale, чтобы задержки соответствовали 10ns, 20ns и 30ns.

Попробуйте сами

// 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