Сумматор , или сумматор , [1] — это цифровая схема , которая выполняет сложение чисел. Во многих компьютерах и других типах процессоров сумматоры используются в арифметико-логических устройствах (АЛУ). Они также используются в других частях процессора, где они используются для вычисления адресов , индексов таблиц , операторов инкремента и декремента и подобных операций.
Хотя сумматоры могут быть построены для многих числовых представлений , таких как двоично-десятичные или избыточные-3 , наиболее распространенные сумматоры работают с двоичными числами . В случаях, когда для представления отрицательных чисел используется дополнение до двух или дополнение до единиц , тривиально модифицировать сумматор в сумматор-вычитатель . Другие знаковые представления чисел требуют больше логики вокруг базового сумматора.
В 1937 году Джордж Штибиц изобрел 2-битный двоичный сумматор ( модель K ).
Полусумматор складывает две отдельные двоичные цифры и . Он имеет два выхода, сумму ( ) и перенос ( ). Сигнал переноса представляет собой переполнение в следующую цифру многозначного сложения. Значение суммы равно . Простейшая конструкция полусумматора , изображенная справа, включает в себя вентиль XOR для и вентиль AND для . Булева логика для суммы (в данном случае ) будет тогда как для переноса ( ) будет . С добавлением вентиля OR для объединения их выходов переноса два полусумматора можно объединить, чтобы получить полный сумматор. [2] Полусумматор складывает два входных бита и генерирует перенос и сумму, которые являются двумя выходами полусумматора. Входные переменные полусумматора называются битами слагаемого и слагаемого. Выходные переменные — это сумма и перенос.
Таблица истинности для полусумматора следующая:
Различные схемы цифровой логики полусумматора:
Полный сумматор складывает двоичные числа и учитывает как входящие, так и исходящие значения. Однобитный полный сумматор складывает три однобитных числа, часто записываемых как , , и ; и являются операндами, и бит, перенесенный из предыдущей менее значимой стадии. [3] Схема выдает двухбитный выход. Выходной перенос и сумма обычно представлены сигналами и , где сумма равна . Полный сумматор обычно является компонентом в каскаде сумматоров, которые складывают 8-, 16-, 32- и т. д. битные двоичные числа.
Полный сумматор может быть реализован многими различными способами, например, с помощью пользовательской схемы транзисторного уровня или составлен из других вентилей. Наиболее распространенная реализация — с помощью:
Приведенные выше выражения для и могут быть получены с помощью карты Карно для упрощения таблицы истинности.
В этой реализации последний вентиль ИЛИ перед выходом переноса может быть заменен вентильом XOR без изменения результирующей логики. Это происходит потому, что когда A и B оба равны 1, термин всегда равен 0, и, следовательно, может быть только 0. Таким образом, входы в последний вентиль ИЛИ никогда не могут быть оба равны 1 (это единственная комбинация, для которой выходы OR и XOR различаются).
Благодаря свойству функциональной полноты вентилей NAND и NOR полный сумматор также может быть реализован с использованием девяти вентилей NAND [ 4] или девяти вентилей NOR .
Использование только двух типов вентилей удобно, если схема реализуется с использованием простых интегральных микросхем, которые содержат только один тип вентилей на микросхему.
Полный сумматор также может быть построен из двух полусумматоров путем подключения и ко входу одного полусумматора, затем взятия его суммирующего выхода в качестве одного из входов для второго полусумматора и в качестве его другого входа, и, наконец, переносящие выходы из двух полусумматоров подключаются к вентилю ИЛИ. Сумма-выход из второго полусумматора является окончательным суммарным выходом ( ) полного сумматора, а выход из вентиля ИЛИ является окончательным переносящим выходом ( ). Критический путь полного сумматора проходит через оба вентиля XOR и заканчивается на бите суммы . Предполагая, что для завершения вентиля XOR требуется 1 задержка, задержка, налагаемая критическим путем полного сумматора, равна:
Критический путь переноса проходит через один вентиль XOR в сумматоре и через 2 вентиля (AND и OR) в блоке переноса, и поэтому, если вентилям AND или OR требуется 1 задержка для завершения, то задержка составит:
Таблица истинности для полного сумматора:
Инвертирование всех входов полного сумматора также инвертирует все его выходы, что может быть использовано при проектировании быстрых сумматоров с непрерывным переносом, поскольку нет необходимости инвертировать перенос. [5]
Различные схемы цифровой логики полного сумматора:
Можно создать логическую схему, используя несколько полных сумматоров для сложения N -битных чисел. Каждый полный сумматор вводит , который является предыдущего сумматора. Этот тип сумматора называется сумматором с непрерывным переносом (RCA), поскольку каждый бит переноса «переносится» на следующий полный сумматор. Первый (и только первый) полный сумматор может быть заменен полусумматором (при условии, что ).
Схема сумматора с непрерывным переносом проста, что позволяет сократить время проектирования; однако сумматор с непрерывным переносом относительно медленный, поскольку каждый полный сумматор должен ждать вычисления бита переноса из предыдущего полного сумматора. Задержку вентиля можно легко вычислить, проверив схему полного сумматора. Каждому полному сумматору требуется три уровня логики. В 32-битном сумматоре с непрерывным переносом имеется 32 полных сумматора, поэтому задержка критического пути (наихудший случай) составляет 3 (от входа до переноса в первом сумматоре) + 31 × 2 (для распространения переноса в последующих сумматорах) = 65 задержек вентиля. [6] Общее уравнение для наихудшей задержки для n -битного сумматора с непрерывным переносом, учитывающее как сумму, так и биты переноса, выглядит следующим образом:
Конструкция с чередующимися полярностями переноса и оптимизированными вентилями И-ИЛИ-инвертирования может быть примерно в два раза быстрее. [7] [5]
Чтобы сократить время вычислений, Вайнбергер и Смит изобрели более быстрый способ сложения двух двоичных чисел с помощью сумматоров с предпросмотром переноса (CLA). [8] Они ввели два сигнала ( и ) для каждой позиции бита, в зависимости от того, распространяется ли перенос из менее значимой позиции бита (по крайней мере один вход равен 1), генерируется в этой позиции бита (оба входа равны 1) или уничтожается в этой позиции бита (оба входа равны 0). В большинстве случаев является просто выходом суммы полусумматора и является выходом переноса того же сумматора. После генерации и создаются переносы для каждой позиции бита.
Простым выводом CLA-рекуррентности Вайнбергера-Смита являются: сумматор Брента-Кунга (BKA) [9] и сумматор Когге-Стоуна (KSA). [10] [11] Это было показано в статье Оклобджии и Зейделя в журнале IEEE Journal of Solid-State Circutis. [12]
Некоторые другие архитектуры многоразрядных сумматоров разбивают сумматор на блоки. Можно изменять длину этих блоков в зависимости от задержки распространения цепей для оптимизации времени вычислений. Эти блочные сумматоры включают сумматор с пропуском переноса (или обходом переноса) , который определяет значения и для каждого блока, а не для каждого бита, и сумматор с выбором переноса, который предварительно генерирует сумму и значения переноса для любого возможного входа переноса (0 или 1) в блок, используя мультиплексоры для выбора соответствующего результата, когда известен бит переноса.
Объединяя несколько сумматоров с переносом и просмотром вперед, можно создавать еще большие сумматоры. Это можно использовать на нескольких уровнях для создания еще больших сумматоров. Например, следующий сумматор — это 64-битный сумматор, который использует четыре 16-битных CLA с двумя уровнями блоков переноса с просмотром вперед .
Другие конструкции сумматоров включают сумматор с выбором переноса , сумматор условной суммы , сумматор с пропуском переноса и сумматор с полным переносом.
Если схема сложения должна вычислить сумму трех или более чисел, может быть выгодно не распространять результат переноса. Вместо этого используются трехвходовые сумматоры, генерирующие два результата: сумму и перенос. Сумма и перенос могут быть поданы на два входа последующего сумматора из трех чисел без необходимости ожидания распространения сигнала переноса. Однако после всех стадий сложения должен использоваться обычный сумматор (такой как ripple-carry или lookahead) для объединения окончательной суммы и результатов переноса.
Полный сумматор можно рассматривать как компрессор с потерями 3:2 : он суммирует три однобитных входа и возвращает результат в виде одного двухбитного числа; то есть он отображает 8 входных значений в 4 выходных значения. (термин «компрессор» вместо «счетчика» был введен в [13] ). Так, например, двоичный вход 101 дает на выходе 1 + 0 + 1 = 10 (десятичное число 2). Перенос представляет собой бит один результата, в то время как сумма представляет собой бит ноль. Аналогично, полусумматор можно использовать как компрессор с потерями 2:2 , сжимая четыре возможных входа в три возможных выхода.
Такие компрессоры можно использовать для ускорения суммирования трех или более слагаемых. Если количество слагаемых равно ровно трем, то схема известна как сумматор с сохранением переноса . Если количество слагаемых равно четырем или более, необходимо более одного слоя компрессоров, и существуют различные возможные конструкции схемы: наиболее распространенными являются деревья Дадда и Уоллеса . Этот тип схемы чаще всего используется в схемах умножителей , поэтому эти схемы также известны как умножители Дадда и Уоллеса.
Используя только квантовые логические вентили Тоффоли и CNOT , можно создавать квантовые полные и полусумматоры. [14] [15] [16] Те же схемы могут быть реализованы и в классических обратимых вычислениях , поскольку и CNOT, и Тоффоли также являются классическими логическими вентилями .
Поскольку квантовое преобразование Фурье имеет низкую сложность схемы , его можно эффективно использовать и для сложения чисел. [17] [18] [19]
Как и в двоичных сумматорах, объединение двух входных токов эффективно складывает эти токи. В рамках ограничений оборудования недвоичные сигналы (т. е. с основанием выше 2) могут быть сложены вместе для вычисления суммы. Также известный как «суммирующий усилитель», [20] этот метод может использоваться для уменьшения количества транзисторов в схеме сложения.