Задержки вентилей
Часть раздела Основы путешествия по Verilog на Coddy — урок 68 из 90.
В предыдущем уроке мы рассмотрели общие задержки, используемые вроде #10 a = b;, — они выжидают перед выполнением инструкции.
В этом уроке мы рассмотрим задержки вентилей (gate delays), которые специфичны для встроенных примитивов вентилей, таких как and, or и not. Задержка вентиля моделирует время, необходимое аппаратному вентилю для формирования выходного сигнала после изменения его входных сигналов.
В реальном оборудовании вентили не срабатывают мгновенно — существует небольшая задержка. Когда вы используете встроенные примитивы вентилей, вы можете добавить `delay`, чтобы смоделировать время распространения сигнала вентиля. `output` изменяется только после указанной задержки.
Разница между общей задержкой (General Delay) и задержкой вентиля (Gate Delay)
| General Delay | Gate Delay | |
|---|---|---|
| Синтаксис | #10 a = b; | and #5 (out, a, b); |
| Позиция | # перед оператором | # внутри примитива вентиля |
| Назначение | Ожидание перед выполнением | Моделирование времени распространения сигнала вентиля |
Синтаксис:
gate_type #(delay) (output, input1, input2, ...);#(delay) указывает, сколько единиц времени требуется вентилю для реагирования.
Простой пример
and #5 (out, a, b);Этому AND gate требуется 5 time unit, чтобы изменить свой output после изменения a или b.
Задержка вентиля с несколькими входами
nand #8 (out, a, b, c, d); // 4-входовый NAND с задержкой в 8 единиц времениВажные правила
| Правило | Пояснение |
|---|---|
| Задержка указывается после имени вентиля | and #5 (out, a, b) |
| Значение задержки в единицах времени | Основано на директиве timescale |
| Все входы влияют на выход | Любое изменение входа запускает задержку |
| Не синтезируется | Задержки вентилей предназначены только для моделирования |
Задание
Добавьте пропущенные задержки вентилей в этот `module`. Используйте разные задержки (`delay`) для каждого вентиля (`gate`).
Что нужно сделать:
- Вентиль AND: задержка 5 единиц времени (`unit` `time`)
- Вентиль OR: задержка 3 единицы времени (`unit` `time`)
- Вентиль NOT: задержка 2 единицы времени (`unit` `time`)
Попробуйте сами
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Введение
Что такое 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