Menu
Coddy logo textTech

Вентили XOR, XNOR

Часть раздела Основы путешествия по 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

Пример (3-входовый XOR):

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

Сводная таблица

ВентильВыход равен 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

Шпаргалка

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
quiz iconПроверьте себя

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

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