Полный сумматор (Full Adder)

Входы (Inputs)

ПинТипОписание
AbitПервое слагаемое
BbitВторое слагаемое
CarryInbitВходной перенос

Выходы (Outputs)

ПинТипОписание
SumbitA XOR B XOR CarryIn
CarryOutbit(A∧B)∨(A∧Ci)∨(B∧Ci)

Логика работы

Вспомни сложение столбиком: в каждом разряде ты складываешь две цифры и ещё «единицу в уме», пришедшую из младшего разряда. Полный сумматор делает ровно это: на входы A и B приходят биты текущего разряда, на CarryIn — перенос слева, а на выходах Sum и CarryOut появляются результат для текущего разряда и перенос вправо.

Главное свойство: Sum = XOR(XOR(A,B), Cin) — двойной XOR складывает все три бита без переноса, а CarryOut срабатывает, когда хотя бы два из трёх входов равны единице. Пример: 1+1+0 = 10₂ — Sum=0, CarryOut=1. А 1+1+1=11₂, то есть 3: единица и в сумме, и в новом переносе.

Собирается полный сумматор из двух полусумматоров и одного OR: первый складывает A и B, второй прибавляет к результату CarryIn, а OR объединяет их переносы. Нюанс кроется в цепочке: CarryOut каждого разряда заводится на CarryIn следующего, поэтому схему называют ripple-carry — перенос «плещется» по цепочке, как волна, и старший разряд вынужден ждать младших.

Таблица истинности и примеры

ABCarryInSumCarryOut
00000
00110
01010
01101
10010
10101
11001
11111

Восемь строк — по числу комбинаций трёх входов. Обрати внимание на крайние случаи: 0+0+0=0 без переноса и 1+1+1=3, где единицы и в Sum, и в CarryOut (итог 11₂). Ещё пример: при A=1, B=0, CarryIn=1 сумма равна 2 — Sum=0, CarryOut=1.

Применение

Полный сумматор — герой уровня 7, а на уровне 8 цепочка из восьми штук превращается в 8-битный сумматор: полусумматор обслуживает младший бит, ещё семь полных сумматоров проводят перенос через биты 1–7. Тот же блок лежит в основе АЛУ процессора, где сложение — главная арифметическая операция.

Каскад сумматоров умеет больше, чем кажется: вычитание в дополнительном коде — это сложение с инвертированным числом и единицей на входе переноса, сравнение чисел — вычитание с проверкой переноса. Даже счётчик команд (уровень 14) — это регистр плюс сумматор, прибавляющий единицу каждый такт.

Интерактивная демонстрация

Кликайте по входам, чтобы переключить значение (0 / 1)

Собери это сам →

Смежные компоненты

Статьи по теме

Частые вопросы

Зачем полному сумматору вход переноса?

Чтобы строить каскады для сложения многоразрядных чисел: перенос каждого разряда передаётся следующему.

Сколько полных сумматоров нужно для 8-битного сложения?

Восемь, соединённых цепочкой: перенос каждого переходит в следующий разряд.

Как собрать полный сумматор из полусумматоров?

Два полусумматора и один OR: первый складывает A и B, второй прибавляет CarryIn, а OR объединяет их выходы переноса в CarryOut.

Почему цепочку называют ripple-carry?

Перенос передаётся от младшего разряда к старшему, как волна: каждый разряд ждёт результата предыдущего, поэтому скорость ограничена длиной цепочки.