Вентили XOR, XNOR
Часть раздела Основы путешествия по Verilog на Coddy — урок 41 из 90.
В этом уроке рассматриваются два дополнительных логических вентиля: XOR (исключающее ИЛИ) и XNOR (исключающее ИЛИ-НЕ). Эти вентили полезны для сравнения битов и проверки четности.
Элемент XOR
Элемент XOR выдает 1, когда входные сигналы различаются.
Таблица истинности (2 входа):
| a | b | out |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Логический примитив Verilog:
xor(out, a, b);Эквивалент непрерывного присваивания:
assign out = a ^ b;Элемент XNOR
Элемент XNOR выдает 1, когда входные сигналы одинаковы. Он является противоположностью XOR.
Таблица истинности (2 входа):
| a | b | out |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Примитив вентиля Verilog:
xnor(out, a, b);Эквивалент непрерывного присваивания:
assign out = a ~^ b; // или ~(a ^ b)Несколько входов
Вентили XOR и XNOR могут иметь более 2 входов. Результат:
- XOR: 1, если нечетное количество входов равны 1
- XNOR: 1, если четное количество входов равны 1
xor(out, a, b, c); // 3-входовый XOR
xnor(out, p, q, r, s); // 4-входовый XNORПример (3-входовый XOR):
| a | b | c | out |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 |
| 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 |
Распространенные варианты использования
| Применение | Пример |
|---|---|
| Сравнение двух битов на различие | xor(diff, a, b) |
| Сравнение двух битов на совпадение | xnor(same, a, b) |
| Генерация четности (нечетное количество единиц) | xor(parity, data[0], data[1], data[2], data[3]) |
| Проверка четности (четное количество единиц) | xnor(parity, data[0], data[1], data[2], data[3]) |
Пример кода
module xor_xnor_demo (
input a, b,
output xor_out,
output xnor_out
);
xor(xor_out, a, b);
xnor(xnor_out, a, b);
endmoduleСводная таблица
| Вентиль | Выход равен 1, когда | Примитив | Оператор |
|---|---|---|---|
| XOR | Входы различны | xor(out, a, b) | ^ |
| XNOR | Входы одинаковы | xnor(out, a, b) | ~^ |
Задание
Добавьте недостающие примитивы вентилей в соответствии с заданиями.
Что нужно сделать:
- Создайте вентиль XOR с выходом
xor_resultи входамиxиy - Создайте вентиль XNOR с выходом
xnor_resultи входамиxиy
Шпаргалка
XOR выдает 1, когда входные сигналы различаются. XNOR выдает 1, когда входные сигналы одинаковы.
| Вентиль | Выход 1, когда | Примитив | Оператор |
|---|---|---|---|
| XOR | Входы различаются | xor(out, a, b) | ^ |
| XNOR | Входы одинаковы | xnor(out, a, b) | ~^ |
Для нескольких входов: XOR выдает 1, если нечетное количество входов равно 1; XNOR выдает 1, если четное количество входов равно 1.
xor(out, a, b, c); // 3-входовый XOR
xnor(out, p, q, r, s); // 4-входовый XNORПопробуйте сами
module xor_xnor_challenge (
input x,
input y,
output xor_result,
output xnor_result
);
// TODO: Добавить вентиль XOR (xor_result = x ^ y)
// TODO: Добавить вентиль XNOR (xnor_result = x ~^ y)
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