Menu
Coddy logo textTech

Директива Timescale

Часть раздела Основы путешествия по Verilog на Coddy — урок 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 → Симуляция округляется до ближайшей пикосекунды

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

Единица времениТочностьВариант использования
1ns / 1nsНаносекундаПростые симуляции
1ns / 1psПикосекундаБолее точные
1ps / 1psПикосекундаВысокоскоростные проекты
1us / 1nsМикросекундаМедленные симуляции

Как это влияет на задержки

`timescale 1ns / 1ps

initial begin
  #10 a = 1;   // Ожидание 10 наносекунд
end

Без timescale некоторые симуляторы используют значение по умолчанию (часто 1нс). Лучше всего всегда указывать его.

Важные правила

ПравилоОбъяснение
Должно находиться вне модулейРазмещается перед любым определением модуля
Символ обратного апострофа (backtick)`timescale, а не 'timescale 
Единица времени ≥ точность времени1ns / 1ps — допустимо, 1ps / 1ns — нет
Влияет на все задержки в файлеОбщие задержки, задержки вентилей, задержки присваивания
challenge icon

Задание

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

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

Шпаргалка

Директива `timescale устанавливает единицу времени и точность времени для симуляции. Она должна быть размещена перед любым определением модуля.

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

initial begin
  #10 a = 1;   // Ожидание 10 наносекунд
end
  • time_unit — базовая единица для задержек (например, #10 = 10нс)
  • time_precision — насколько точно округляется симуляция (должна быть ≤ единицы времени)
Масштаб времени (Timescale)Вариант использования
1ns / 1nsПростые симуляции
1ns / 1psБолее точные
1ps / 1psВысокоскоростные проекты
1us / 1nsМедленные симуляции

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

// TODO: Добавить директиву timescale (1нс / 1пс)

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Проверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы