16 / 63 · Теория
Сумматоры и структуры распространения переноса
Выведите формулы полного сумматора и совместно проанализируйте функцию, разрядность и задержку последовательного переноса.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Сумма одного разряда представляется двумя битами
Сумма лежит в диапазоне 0–3, поэтому нужны бит суммы и перенос в следующий разряд . Нечётное число единиц на трёх входах даёт sum=1, минимум две единицы — carry=1.
Определим generate и propagate . Тогда , где означает OR. Полусумматор — частный случай без входного переноса: сумма задаётся XOR, перенос — AND.
Меняйте три входа и проверяйте постоянство a+b+cin = sum+2×cout. Перенос становится входом следующего разряда; его вес отличается от веса sum.
a + b + cin = sum + 2 × cout
Насколько далеко распространяется перенос
Рассмотрим 4-битное 1111 + 0001. Перенос возникает в бите 0 и проходит ещё три разряда. Сохраняемая сумма — 0000, старший carry — 1. В структуре ripple-carry перенос младшего разряда может заставить старшие разряды ждать.
Раскрытие выражений показывает возможность параллельного расчёта переносов. Быстрые сумматоры объединяют групповые propagate/generate, но возникает компромисс площади и задержки с учётом fan-in, проводников и библиотеки ячеек. Оператор + в RTL не обязательно реализуется одним конкретным ripple-carry-сумматором.
Явно сохраняйте ширину суммы в проекте
logic [3:0] a, b, sum;
logic cin, cout;
logic [4:0] wide_sum;
assign wide_sum = {1'b0, a} + {1'b0, b} + {4'b0000, cin};
assign sum = wide_sum[3:0];
assign cout = wide_sum[4];Максимум , поэтому 5 бит достаточно. Сначала решите, нужна ли лишь младшая часть суммы, передаётся ли carry дальше и нужно ли насыщение. Интерактивный элемент проверяет таблицу истинностиТаблица истинности перечисляет все возможные комбинации входов и выход для каждой из них. Изменения во времени проверяют отдельно по временным диаграммам. Подробнее одного полного сумматора, а не измеряет задержку реального результата синтеза.
Измените входы
Попробуйте сами
Для 4-битных unsigned , , найдите полную сумму, 4-битную сумму и carry. Можно ли судить о переполнении только по carry, интерпретируя ту же схему как знаковое сложение?
Прочитать объяснение
Полная сумма 16, битовая строка 10000, поэтому sum=0000, carry=1. В знаковой интерпретации 1001 равно −7, так что находится в диапазоне. Carry и знаковое переполнение — разные условия.