Уровень 34: Переход к шинам данных

Открыть уровень →

Задание

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

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

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

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

Решение

Представьте, что вы паяете микросхему на плату: HalfAdder ha1(sum1, carry1, a, b); — это припаянная деталь (экземпляр модуля), wire — дорожки между её ножками, а имя экземпляра ha1 — наклейка на корпусе, чтобы отличать детали друг от друга. Модуль HalfAdder — это чертёж детали, а каждый экземпляр — отдельная физическая копия на плате.

Полный сумматор удобно собрать из двух полусумматоров (модуль 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) — попробуйте оба подхода!

Схема решения уровня 34 — Переход к шинам данных
Авторское решение уровня 34 в симуляторе (тёмная тема)