Menu
Coddy logo textTech

XOR XNOR Gates

Часть раздела Основы путешествия по Verilog на Coddy. Урок 41 из 90.

В этом уроке рассматриваются ещё два логических элемента: XOR (исключающее ИЛИ) и XNOR (исключающее НЕ-ИЛИ). Эти элементы полезны для сравнения битов и проверки чётности.

Вентиль XOR

Вентиль XOR выдаёт 1, когда входы разные.

Таблица истинности (2 входа):

about
000
011
101
110

Примитив логического элемента Verilog:

xor(out, a, b);

Эквивалент непрерывного присваивания:

assign out = a ^ b;

Элемент XNOR

Элемент XNOR выдаёт 1, когда входы одинаковы. Это противоположность XOR.

Таблица истинности (2 входа):

about
001
010
100
111

Примитив логического элемента 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 входами):

abcout
0000
0011
0101
0110
1001
1010
1100
1111

Распространённые применения

ПрименениеПример
Сравнение двух битов на различие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)~^
challenge icon

Задание

Добавьте отсутствующие примитивы логических элементов в соответствии с заданиями.

Что нужно сделать:

  1. Создайте элемент XOR с выходом xor_result и входами x и y
  2. Создайте элемент 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
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog