Уровень 31: Hello, Wire!

Задание

Соберите вентиль XOR, используя только and, or и not. Встроенный примитив xor отключён.

Модуль MyXor принимает два однобитных входа a и b и выдаёт out.

Главное правило Verilog: строки кода описывают физические соединения — все они работают одновременно, а не по порядку сверху вниз.

Решение

XOR выражается через AND, OR и NOT формулой: XOR = (A AND NOT B) OR (NOT A AND B).

  1. Объявите внутренние провода одной строкой: wire nota, notb, w1, w2; — они понадобятся для соединения выходов одних вентилей со входами других.
  2. Инвертируйте a в nota: not g1(nota, a); — первый аргумент выход, второй вход.
  3. Инвертируйте b в notb: not g2(notb, b);
  4. Первый AND — a AND notb: and g3(w1, a, notb);
  5. Второй AND — nota AND b: and g4(w2, nota, b);
  6. Объедините через OR: or g5(out, w1, w2); — выход на порт модуля.

Все пять вентилей «включены» одновременно — порядок их объявления неважен.