Вентили AND, OR, NOT
Часть раздела Основы путешествия по Verilog на Coddy — урок 40 из 90.
В этом уроке рассматриваются три самых базовых логических вентиля: AND, OR и NOT. Эти вентили составляют основу проектирования цифровой логики.
Логический элемент И (AND)
Логический элемент И выдает 1 только тогда, когда все входные сигналы равны 1.
Таблица истинности (2 входа):
| a | b | out |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Вентильный примитив Verilog:
and(out, a, b);Эквивалент непрерывного присваивания:
assign out = a & b;Элемент ИЛИ (OR)
Элемент ИЛИ выдает 1, когда хотя бы один из входов равен 1.
Таблица истинности (для 2 входов):
| a | b | out |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Логический примитив Verilog:
or(out, a, b);Эквивалент непрерывного присваивания:
assign out = a | b;Элемент НЕ (NOT)
Элемент НЕ выдает результат, противоположный его единственному входному сигналу. Его также называют инвертором.
Таблица истинности:
| a | out |
|---|---|
| 0 | 1 |
| 1 | 0 |
Логический примитив Verilog:
not(out, a);Эквивалент с непрерывным назначением:
assign out = ~a;Несколько входов
Вентили AND и OR могут иметь более 2 входов:
and(out, a, b, c); // 3-входовый AND (out = a & b & c)
or(out, x, y, z, w); // 4-входовый ORВентили NOT всегда имеют ровно 1 вход.
Пример кода
module and_or_not (
input a, b,
output and_out,
output or_out,
output not_out
);
and(and_out, a, b); // Элемент AND
or(or_out, a, b); // Элемент OR
not(not_out, a); // Элемент NOT (инвертор)
endmoduleЗадание
Добавьте недостающие примитивы логических вентилей в соответствии с заданиями.
Что нужно сделать:
- Создайте вентиль AND с выходом
and_resultи входамиpиq - Создайте вентиль OR с выходом
or_resultи входамиpиq - Создайте вентиль NOT с выходом
not_resultи входомp
Шпаргалка
Основные логические вентили в Verilog с использованием примитивов вентилей и непрерывного назначения:
| Вентиль | Примитив | Назначение (Assign) | Выход равен 1, когда... |
|---|---|---|---|
| AND (И) | and(out, a, b); | assign out = a & b; | Все входы равны 1 |
| OR (ИЛИ) | or(out, a, b); | assign out = a | b; | Хотя бы один вход равен 1 |
| NOT (НЕ) | not(out, a); | assign out = ~a; | Вход равен 0 |
AND и OR поддерживают более 2 входов; NOT всегда имеет ровно 1 вход:
and(out, a, b, c); // 3-входовый AND
or(out, a, b, c, d); // 4-входовый ORmodule example (input a, b, output and_out, or_out, not_out);
and(and_out, a, b);
or(or_out, a, b);
not(not_out, a);
endmoduleПопробуйте сами
module gates_challenge (
input p,
input q,
output and_result,
output or_result,
output not_result
);
// TODO: Добавить вентиль AND (and_result = p & q)
// TODO: Добавить вентиль OR (or_result = p | q)
// TODO: Добавить вентиль NOT (not_result = ~p)
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