Уровень 34: Полный сумматор (Verilog)

Задание

Напишите полный сумматор на Verilog. Он складывает три бита: a, b и перенос со входа c_in. Результат — sum и перенос на выход c_out.

Можно использовать готовый модуль HalfAdder из предыдущего уровня — это отличная возможность научиться переиспользовать компоненты.

Напоминание: Verilog — не программа, а описание схемы. Все строки кода работают одновременно.

Материалы по теме

Решение

Полный сумматор удобно собрать из двух полусумматоров (модуль HalfAdder из уровня 33) и одного вентиля OR.

Порядок портов HalfAdder: (sum, carry, a, b).

  1. Объявите три внутренних провода: wire sum1, carry1, carry2;
  2. Первый полусумматор складывает a и b: HalfAdder ha1(sum1, carry1, a, b);
  3. Второй складывает sum1 со входным переносом c_in: HalfAdder ha2(sum, carry2, sum1, c_in);
  4. Объедините оба переноса через OR: or g1(c_out, carry1, carry2);

Обратите внимание: первый HalfAdder даёт промежуточную сумму sum1 и первый перенос carry1. Второй HalfAdder даёт окончательную сумму sum и второй перенос carry2. Переносы carry1 и carry2 никогда не равны 1 одновременно — OR безопасно их объединяет.

Альтернативно: можно собрать FullAdder из пяти примитивов (2×XOR, 2×AND, 1×OR) — попробуйте оба подхода!