Встроенные примитивы логических элементов
Часть раздела Основы путешествия по Verilog на Coddy. Урок 39 из 90.
В Verilog есть встроенные gate primitives, которые позволяют описывать логические схемы с использованием настоящих обозначений gate. Это называется моделированием structural. Вы создаёте схемы, соединяя gate, точно так же, как при рисовании принципиальной схемы.
Gate primitive — это предопределённые ключевые слова, моделирующие базовые логические gates. Вместо записи выражения вроде assign out = a & b вы создаёте экземпляр gate:
and(out, a, b); // вентиль AND с выходом out, входами a и bОбщий синтаксис
gate_type (output, input1, input2, ...);- Первый аргумент всегда является output
- Следующие аргументы — это inputs (1 или больше, в зависимости от gate)
Доступные Gate-примитивы
| Тип Gate | Ключевое слово | Количество inputs |
|---|---|---|
| AND | and | 2 или более |
| OR | or | 2 или более |
| NOT | not | 1 |
| NAND | nand | 2 или более |
| NOR | nor | 2 или более |
| XOR | xor | 2 или более |
| XNOR | xnor | 2 или более |
Как работают примитивы Gate
Когда вы пишете and(out, a, b), Verilog создаёт вентиль AND, который непрерывно подаёт в out result операции a & b. Каждый раз, когда изменяется a или b, out немедленно обновляется — совсем как у настоящего вентиля.
Примитивы Gate в сравнении с непрерывным присваиванием
Оба метода создают одинаковое аппаратное обеспечение:
// Примитив вентиля
and(out, a, b);
// Непрерывное присваивание (тот же результат)
assign out = a & b;Gate primitives полезны, когда вы хотите описать схему как collection of gates (стиль structural). Непрерывное присваивание лучше подходит для behavioral style (выражений).
Задание
Что нужно сделать:
- Добавьте правильный примитив gate, чтобы эта схема работала. module should выдавать AND входов
aиb. Порт output уже названc.
Попробуйте сами
module gate_challenge (
input a,
input b,
output c
);
// TODO: Добавьте правильный примитив вентиля
// Выход c должен быть a AND b
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogАппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и InitialПотренируйтесь самостоятельно: Онлайн-компилятор Verilog