XOR XNOR Gates
Часть раздела Основы путешествия по 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Пример (XOR с 3 входами):
| 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Сводная таблица
| Gate | Выход равен 1, когда | Примитив | Оператор |
|---|---|---|---|
| XOR | Входы различаются | xor(out, a, b) | ^ |
| XNOR | Входы одинаковы | xnor(out, a, b) | ~^ |
Задание
Добавьте отсутствующие примитивы логических элементов в соответствии с заданиями.
Что нужно сделать:
- Создайте элемент XOR с выходом
xor_resultи входамиxиy - Создайте элемент XNOR с выходом
xnor_resultи входамиxиy
Попробуйте сами
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Введение
Что такое VerilogАппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicПотренируйтесь самостоятельно: Онлайн-компилятор Verilog