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 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
Символ обратной кавычки`timescale, а не 'timescale 
Единица времени ≥ точность времени1ns / 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Проверьте себя

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

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