Встроенные примитивы вентилей
Часть раздела Основы путешествия по Verilog на Coddy — урок 39 из 90.
В Verilog есть встроенные примитивы вентилей, которые позволяют описывать логические схемы, используя реальные символы вентилей. Это называется структурным моделированием — вы создаете схемы, соединяя вентили, точно так же, как при рисовании электрической схемы.
Вентильные примитивы — это предопределенные ключевые слова, которые моделируют базовые логические вентили. Вместо написания выражения вида assign out = a & b, вы создаете экземпляр вентиля:
and(out, a, b); // Вентиль И с выходом out и входами a и bОбщий синтаксис
gate_type (output, input1, input2, ...);- Первым аргументом всегда является выход
- Следующие аргументы — это входы (1 или более, в зависимости от логического элемента)
Доступные примитивы вентилей
| Тип вентиля | Ключевое слово | Количество входов |
|---|---|---|
| AND | and | 2 или более |
| OR | or | 2 или более |
| NOT | not | 1 |
| NAND | nand | 2 или более |
| NOR | nor | 2 или более |
| XOR | xor | 2 или более |
| XNOR | xnor | 2 или более |
Как работают вентильные примитивы
Когда вы пишете and(out, a, b), Verilog создает вентиль AND, который непрерывно управляет out результатом a & b. Всякий раз, когда a или b изменяются, out обновляется немедленно — точно так же, как настоящий вентиль.
Вентильные примитивы и непрерывное назначение
Оба метода создают одну и ту же аппаратную логику:
// Вентильный примитив
and(out, a, b);
// Непрерывное назначение (тот же результат)
assign out = a & b;Вентильные примитивы полезны, когда вы хотите описать схему как набор вентилей (структурный стиль). Непрерывное присваивание лучше подходит для поведенческого стиля (выражения).
Задание
Что нужно сделать:
- Добавьте правильный примитив вентиля, чтобы эта схема заработала. Модуль должен выводить результат логического И (AND) входов
aиb. Выходной порт уже имеет имяc.
Шпаргалка
Вентильные примитивы (Gate primitives) в Verilog позволяют выполнять структурное моделирование путем прямого создания экземпляров логических вентилей.
Синтаксис: первым аргументом всегда является выход, за которым следуют входы:
gate_type(output, input1, input2, ...);Доступные примитивы:
| Вентиль | Ключевое слово | Входы |
|---|---|---|
| AND | and | 2+ |
| OR | or | 2+ |
| NOT | not | 1 |
| NAND | nand | 2+ |
| NOR | nor | 2+ |
| XOR | xor | 2+ |
| XNOR | xnor | 2+ |
Вентильные примитивы и оператор assign создают эквивалентное оборудование:
and(out, a, b); // structural (gate primitive)
assign out = a & b; // behavioral (continuous assignment)Попробуйте сами
module gate_challenge (
input a,
input b,
output c
);
// TODO: Добавьте правильный примитив вентиля
// Выход c должен быть a AND b
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial