Двоичный каскадный сумматор — различия между версиями
Bobrov (обсуждение | вклад) |
(→Принцип работы) |
||
Строка 5: | Строка 5: | ||
== Принцип работы == | == Принцип работы == | ||
[[Файл:Полный_сумматор_1.png|right|200px|thumb|[[Cумматор#.D0.9F.D0.BE.D0.BB.D0.BD.D1.8B.D0.B9_.D1.81.D1.83.D0.BC.D0.BC.D0.B0.D1.82.D0.BE.D1.80|Полный сумматор]]]] | [[Файл:Полный_сумматор_1.png|right|200px|thumb|[[Cумматор#.D0.9F.D0.BE.D0.BB.D0.BD.D1.8B.D0.B9_.D1.81.D1.83.D0.BC.D0.BC.D0.B0.D1.82.D0.BE.D1.80|Полный сумматор]]]] | ||
− | + | Используемые обозначения: <tex>X_{i}, Y_{i}</tex> {{---}} <tex>i</tex>-ый разряд суммируемых чисел, <tex>C_{i}, C_{i+1}</tex> {{---}} биты переноса, <tex>F_{i}</tex> {{---}} результат сложения. | |
− | |||
− | |||
− | |||
Рассмотрим один элемент [[Каскадный сумматор|линейного каскадного сумматора]]. В некоторых случаях бит переноса <tex>C_{i+1}</tex> зависит только от значений <tex>X_{i}</tex> и <tex>Y_{i}</tex>: | Рассмотрим один элемент [[Каскадный сумматор|линейного каскадного сумматора]]. В некоторых случаях бит переноса <tex>C_{i+1}</tex> зависит только от значений <tex>X_{i}</tex> и <tex>Y_{i}</tex>: | ||
− | * | + | * если <tex>X_{i} = Y_{i} = 1</tex>, то <tex>C_{i+1} = 1</tex> |
− | * | + | * если <tex>X_{i} = Y_{i} = 0</tex>, то <tex>C_{i+1} = 0</tex> |
− | + | Иначе (<tex>X_i \neq Y_i</tex>) бит переноса не изменяется, то есть <tex>C_{i + 1} = C_i</tex>. | |
+ | Три случая называются следующим образом: | ||
+ | * '''G'''enerate {{---}} "порождение" переноса | ||
+ | * '''K'''ill {{---}} "уничтожение" переноса | ||
+ | * '''P'''ropagate {{---}} "проталкивание" переноса | ||
− | + | Поскольку последовательное применение этих трёх действий над переносами принадлежит также одному из этих типов, то можно определить композицию действий над переносами. Обозначим композицию значком <tex>\otimes</tex> и построим таблицу значений (в столбце первый аргумент, в строке — второй): | |
+ | [[Файл:Пример компазиции.png|right|430px|thumb|Пример композиции]] | ||
{| border="1" cellpadding="5" | {| border="1" cellpadding="5" | ||
− | !<tex>\ | + | !<tex>\otimes</tex> |
!k | !k | ||
!p | !p | ||
Строка 40: | Строка 42: | ||
|} | |} | ||
− | + | Поскольку функция ассоциативна, то можно распространить её на любое количество аргументов. Более того, поскольку для любого действия <tex>x</tex> выполняется равенство <tex>x \otimes p = x</tex>, то функцию от нескольких действий можно определить как "последнее не <tex>p</tex>". | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Схема == | == Схема == |
Версия 13:56, 12 января 2012
Определение: |
Двоичный каскадный сумматор — цифровая схема, осуществляющая сложение двух многоразрядных двоичных чисел. |
Содержание
Принцип работы
Используемые обозначения:
— -ый разряд суммируемых чисел, — биты переноса, — результат сложения.Рассмотрим один элемент линейного каскадного сумматора. В некоторых случаях бит переноса зависит только от значений и :
- если , то
- если , то
Иначе (
) бит переноса не изменяется, то есть .Три случая называются следующим образом:
- Generate — "порождение" переноса
- Kill — "уничтожение" переноса
- Propagate — "проталкивание" переноса
Поскольку последовательное применение этих трёх действий над переносами принадлежит также одному из этих типов, то можно определить композицию действий над переносами. Обозначим композицию значком
и построим таблицу значений (в столбце первый аргумент, в строке — второй):k | p | g | |
---|---|---|---|
k | k | k | g |
p | k | p | g |
g | k | g | g |
Поскольку функция ассоциативна, то можно распространить её на любое количество аргументов. Более того, поскольку для любого действия
выполняется равенство , то функцию от нескольких действий можно определить как "последнее не ".Схема
Сумматор состоит из двух частей. Первая часть — это группа полных сумматоров, вычисляющих ответ. Вторая часть — дерево отрезков, с помощью которого вычисляется бит переноса.
Обозначения
- — полный сумматор, вычисляет результат сложения.
- вычисляет композицию двух переносов.
- возвращает , старший бит сумматора.
Схемная сложность
Дерево отрезков вычисляет биты переноса за
, оставшиеся действия выполняются за . Суммарное время работы — .