Уровень 34: Полный сумматор (Verilog)
Задание
Напишите полный сумматор на Verilog. Он складывает три бита: a, b и перенос со входа c_in. Результат — sum и перенос на выход c_out.
Можно использовать готовый модуль HalfAdder из предыдущего уровня — это отличная возможность научиться переиспользовать компоненты.
Напоминание: Verilog — не программа, а описание схемы. Все строки кода работают одновременно.
Материалы по теме
- Анатомия сумматора
- Full Adder — полный сумматор
Решение
Полный сумматор удобно собрать из двух полусумматоров (модуль HalfAdder из уровня 33) и одного вентиля OR.
Порядок портов HalfAdder: (sum, carry, a, b).
- Объявите три внутренних провода:
wire sum1, carry1, carry2; - Первый полусумматор складывает
aиb:HalfAdder ha1(sum1, carry1, a, b); - Второй складывает
sum1со входным переносомc_in:HalfAdder ha2(sum, carry2, sum1, c_in); - Объедините оба переноса через OR:
or g1(c_out, carry1, carry2);
Обратите внимание: первый HalfAdder даёт промежуточную сумму sum1 и первый перенос carry1. Второй HalfAdder даёт окончательную сумму sum и второй перенос carry2. Переносы carry1 и carry2 никогда не равны 1 одновременно — OR безопасно их объединяет.
Альтернативно: можно собрать FullAdder из пяти примитивов (2×XOR, 2×AND, 1×OR) — попробуйте оба подхода!