Директива 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 / 1pstime_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 — нет |
| Влияет на все задержки в файле | Общие задержки, задержки вентилей, задержки присваивания |
Задание
Что нужно сделать:
Добавьте недостающую директиву timescale, чтобы задержки соответствовали 10ns, 20ns и 30ns.
Шпаргалка
Директива `timescale устанавливает единицу времени и точность времени для симуляции. Она должна быть размещена перед любым определением модуля.
`timescale time_unit / time_precision`timescale 1ns / 1ps
initial begin
#10 a = 1; // Ожидание 10 наносекунд
endtime_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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU13Тайминг и задержки
Что такое задержкиЗадержки вентилейЗадержки в присваиванияхДиректива TimescaleГенерация тактового сигналаИтоги — управление таймингом5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial