Уровень 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).
- Объявите внутренние провода одной строкой:
wire nota, notb, w1, w2;— они понадобятся для соединения выходов одних вентилей со входами других. - Инвертируйте
aвnota:not g1(nota, a);— первый аргумент выход, второй вход. - Инвертируйте
bвnotb:not g2(notb, b); - Первый AND —
a AND notb:and g3(w1, a, notb); - Второй AND —
nota AND b:and g4(w2, nota, b); - Объедините через OR:
or g5(out, w1, w2);— выход на порт модуля.
Все пять вентилей «включены» одновременно — порядок их объявления неважен.