Что такое задержки
Часть раздела Основы путешествия по Verilog на Coddy — урок 67 из 90.
В Verilog задержки управляют тем, когда выполняется оператор или когда изменяется сигнал. Они используются для моделирования временных характеристик реального оборудования.
Зачем нужны задержки
Реальному оборудованию требуется время для прохождения сигналов через провода и логические вентили. Задержки позволяют имитировать такое временное поведение.
- В симуляции без задержек всё происходит в момент времени 0
- Задержки позволяют распределять события во времени
- Они помогают тестировать чувствительные к таймингам схемы, такие как тактовые генераторы и конечные автоматы
Типы задержек
| Тип задержки | Назначение |
|---|---|
| Задержки вентилей | Задержка прохождения через логические вентили |
| Задержки присваивания | Задержка при присваивании значений |
| Директива Timescale | Устанавливает единицы времени для симуляции |
Базовый синтаксис
Задержка записывается с помощью символа #, за которым следует число:
#10 clk = ~clk; // Подождать 10 единиц времени, затем инвертировать тактовый сигнал
#5 a = b; // Подождать 5 единиц времени, затем выполнить присваивание a = bЧисло после # — это количество единиц времени ожидания.
Простой пример
initial begin
a = 0;
#10 a = 1; // Спустя 10 единиц времени, a становится равным 1
#5 a = 0; // Спустя еще 5 единиц времени, a становится равным 0
endВремя:
- Время 0:
a = 0 - Время 10:
a = 1 - Время 15:
a = 0
Задержки в блоках always
always #5 clk = ~clk; // Переключение сигнала тактовой частоты каждые 5 единиц времениЭто создает непрерывный тактовый сигнал.
Важные правила
| Правило | Объяснение |
|---|---|
Символ # | Обозначает задержку |
Число после # | Сколько единиц времени ждать |
| Задержки суммируются | #10, затем #20 — ожидание в сумме 30 |
| Не синтезируется | Задержки предназначены только для симуляции |
Задание
Что нужно сделать:
Добавьте недостающие задержки, чтобы этот код выводил сообщения в моменты времени 0, 10, 25 и 40.
Шпаргалка
В Verilog задержки используют #, за которым следуют единицы времени, чтобы управлять моментом выполнения инструкций:
#10 a = 1; // Подождать 10 единиц времени, затем выполнить присваиваниеЗадержки являются накопительными — каждая задержка добавляется к текущему времени:
initial begin
a = 0; // Время 0
#10 a = 1; // Время 10
#5 a = 0; // Время 15
endИспользуйте в блоках always для генерации тактовых сигналов:
always #5 clk = ~clk; // Переключение каждые 5 единицПримечание: Задержки предназначены только для симуляции — они не синтезируемы.
Попробуйте сами
module delay_challenge;
initial begin
$display("Time %0t: Start", $time);
// TODO: Добавьте задержку, чтобы достичь времени 10
$display("Time %0t: After first delay", $time);
// TODO: Добавьте задержку, чтобы достичь времени 25
$display("Time %0t: After second delay", $time);
// TODO: Добавьте задержку, чтобы достичь времени 40
$display("Time %0t: End", $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