Что такое задержки
Часть раздела Основы путешествия по Verilog на Coddy. Урок 67 из 90.
В Verilog задержки управляют тем, когда выполняется оператор или когда изменяется сигнал. Они используются для моделирования поведения реального оборудования во времени.
Зачем нужны задержки
Реальному оборудованию требуется время, чтобы сигналы проходили по проводам и логическим элементам. Задержки позволяют моделировать такое временное поведение.
- В симуляции без задержек всё происходит в момент времени 0
- Задержки позволяют распределять события во времени
- Они помогают тестировать проекты, чувствительные к времени, например clock и машины состояний
Типы задержек
| Тип задержки | Назначение |
|---|---|
| Задержки логических элементов | Задержка прохождения через логические элементы |
| Задержки присваивания | Задержка при присваивании значений |
| Директива Timescale | Задаёт единицы времени для моделирования |
Базовый синтаксис
delay записывается с помощью #, за которым следует число:
#10 clk = ~clk; // Подождать 10 единиц времени, затем переключить clock
#5 a = b; // Подождать 5 единиц времени, затем присвоить a = bЧисло после # — это количество единиц времени, которое нужно подождать.
Простой пример
initial begin
a = 0;
#10 a = 1; // После 10 единиц времени a становится 1
#5 a = 0; // После ещё 5 единиц времени a становится 0
endTiming:
- Time 0:
a = 0 - Time 10:
a = 1 - Time 15:
a = 0
Задержки в блоках Always
always #5 clk = ~clk; // Переключать тактовый сигнал каждые 5 единиц времениЭто создаёт непрерывный тактовый сигнал (при условии, что clk был first инициализирован значением 0 в блоке initial. В противном случае ~x остаётся равным x).
Важные правила
| Правило | Объяснение |
|---|---|
Символ # | Обозначает задержку |
Число после # | Сколько единиц времени нужно подождать |
| Задержки суммируются | #10, затем #20 — всего ожидается 30 |
| Не подлежит синтезу | Задержки предназначены только для симуляции |
Задание
Что нужно сделать:
Add пропущенные задержки, чтобы этот код выводил сообщения в моменты времени 0, 10, 25 и 40.
Попробуйте сами
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Введение
Что такое VerilogАппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU13Синхронизация и задержки
Что такое задержкиЗадержки вентилейЗадержки присваиванияДиректива timescaleГенерация тактового сигналаПовторение — управление временем5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и InitialПотренируйтесь самостоятельно: Онлайн-компилятор Verilog