Задержки вентилей
Часть раздела Основы путешествия по Verilog на Coddy. Урок 68 из 90.
В предыдущем уроке мы рассмотрели общие задержки, используемые, например, так: #10 a = b;. Они заставляют ждать перед выполнением инструкции.
В этом уроке мы рассмотрим задержки логических элементов — особенности встроенных примитивов логических элементов, таких как and, or и not. Задержка логического элемента моделирует время, необходимое аппаратному логическому элементу для формирования выходного сигнала после изменения входных сигналов.
В реальном оборудовании логические элементы реагируют не мгновенно. Возникает небольшая задержка. При использовании встроенных примитивов логических элементов можно добавить задержку, чтобы смоделировать время распространения сигнала через элемент. Выход изменяется только после указанной задержки.
Разница между общей задержкой и задержкой логического элемента
| Общая задержка | Задержка логического элемента | |
|---|---|---|
| Синтаксис | #10 a = b; | and #5 (out, a, b); |
| Позиция | # перед оператором | # внутри примитива логического элемента |
| Назначение | Ожидание перед выполнением | Моделирование времени распространения сигнала через логический элемент |
Синтаксис:
gate_type #(delay) (output, input1, input2, ...);#(delay) задаёт, сколько единиц времени требуется логическому элементу для отклика.
Простой пример
and #5 (out, a, b);Этому элементу И требуется 5 единиц времени, чтобы изменить выход после изменения a или b.
Задержка логического элемента с несколькими входами
nand #8 (out, a, b, c, d); // 4-входовый NAND с задержкой в 8 единиц времениВажные правила
| Правило | Объяснение |
|---|---|
| Задержка указывается после имени логического элемента | and #5 (out, a, b) |
| Значение задержки задаётся в единицах времени | Зависит от директивы timescale |
| Все входы влияют на выход | Изменение любого входа может изменить выход, но только после задержки |
| Не синтезируется | Задержки логических элементов используются только для моделирования |
Задание
Добавь в этот модуль недостающие задержки вентилей. Используй для каждого вентиля разную задержку.
Что нужно сделать:
- Вентиль AND: задержка 5 единиц времени
- Вентиль OR: задержка 3 единицы времени
- Вентиль NOT: задержка 2 единицы времени
Попробуйте сами
module gate_delay_challenge;
reg a, b;
wire and_out, or_out, not_out;
// TODO: Добавьте логический элемент AND с задержкой 5 единиц времени (входы a, b)
// TODO: Добавьте логический элемент OR с задержкой 3 единицы времени (входы a, b)
// TODO: Добавьте логический элемент NOT с задержкой 2 единицы времени (вход a)
initial begin
$monitor("Time %0t: a=%b, b=%b | and=%b, or=%b, not=%b",
$time, a, b, and_out, or_out, not_out);
a = 1; b = 1;
#10 $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