Двоичный каскадный сумматор — различия между версиями
(→Принцип работы) |
м (rollbackEdits.php mass rollback) |
||
(не показано 29 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
{{Определение | {{Определение | ||
− | |definition='''Двоичный каскадный сумматор''' {{---}} цифровая [[Реализация булевой функции схемой из функциональных элементов|схема]], осуществляющая сложение двух многоразрядных двоичных чисел. | + | |definition='''Двоичный каскадный сумматор''' (англ. ''Binary adder'') {{---}} цифровая [[Реализация булевой функции схемой из функциональных элементов|схема]], осуществляющая сложение двух многоразрядных двоичных чисел, с ускоренным формированием разрядов переноса. |
}} | }} | ||
Строка 7: | Строка 7: | ||
Используемые обозначения: <tex>X_{i}, Y_{i}</tex> {{---}} <tex>i</tex>-ый разряд суммируемых чисел, <tex>C_{i}, C_{i+1}</tex> {{---}} биты переноса, <tex>F_{i}</tex> {{---}} результат сложения. | Используемые обозначения: <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>: | + | Рассмотрим один элемент [[Каскадный сумматор|линейного каскадного сумматора - Ripple-carry adder]]. В некоторых случаях бит переноса <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} = 1</tex>, то <tex>C_{i+1} = 1</tex>, |
− | * если <tex>X_{i} = Y_{i} = 0</tex>, то <tex>C_{i+1} = 0</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>. | Иначе (<tex>X_i \neq Y_i</tex>) бит переноса не изменяется, то есть <tex>C_{i + 1} = C_i</tex>. | ||
Три случая называются следующим образом: | Три случая называются следующим образом: | ||
− | * | + | * <tex> \mathbf{g} \mathtt{enerate}</tex> {{---}} ''порождение'' переноса, |
− | * | + | * <tex> \mathbf{k} \mathtt{ill}</tex> {{---}} ''уничтожение'' переноса, |
− | * | + | * <tex> \mathbf{p} \mathtt{ropagate}</tex> {{---}} ''проталкивание'' переноса. |
Поскольку последовательное применение этих трёх действий над переносами принадлежит также одному из этих типов, то можно определить композицию действий над переносами. Обозначим композицию значком <tex>\otimes</tex> и построим таблицу значений (в столбце первый аргумент, в строке — второй): | Поскольку последовательное применение этих трёх действий над переносами принадлежит также одному из этих типов, то можно определить композицию действий над переносами. Обозначим композицию значком <tex>\otimes</tex> и построим таблицу значений (в столбце первый аргумент, в строке — второй): | ||
− | [[Файл:Пример компазиции.png|right| | + | [[Файл:Пример компазиции.png|right|450px|thumb|Пример композиции]] |
− | {| | + | {| class="wikitable" align="center" style="color: blue; background-color:#ccffcc;" cellpadding="3" |
− | + | !colspan="20"|Таблица значений | |
− | + | |-align="center" | |
− | + | | <tex>\otimes</tex> || <tex> \mathbf{k} </tex> || <tex> \mathbf{p} </tex> || <tex> \mathbf{g} </tex> | |
− | + | |-align="center" | |
− | + | | <tex> \mathbf{k} </tex> || <tex>k</tex> || <tex>k</tex> || <tex>g</tex> | |
− | + | |-align="center" | |
− | + | | <tex> \mathbf{p} </tex> || <tex>k</tex> || <tex>p</tex> || <tex>g</tex> | |
− | + | |-align="center" | |
− | + | | <tex> \mathbf{g} </tex> || <tex>k</tex> || <tex>g</tex> || <tex>g</tex> | |
− | + | |-align="center" | |
− | + | |} | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Поскольку функция ассоциативна, то можно распространить её на любое количество аргументов. Более того, поскольку для любого действия <tex>x</tex> выполняется равенство <tex>x \otimes p = x</tex>, то функцию от нескольких действий можно определить как "последнее не <tex>p</tex>". | Поскольку функция ассоциативна, то можно распространить её на любое количество аргументов. Более того, поскольку для любого действия <tex>x</tex> выполняется равенство <tex>x \otimes p = x</tex>, то функцию от нескольких действий можно определить как "последнее не <tex>p</tex>". | ||
== Схема == | == Схема == | ||
− | + | ||
Сумматор состоит из двух частей. Первая часть {{---}} это группа полных сумматоров, вычисляющих ответ. Вторая часть {{---}} [[Дерево_отрезков._Построение|дерево отрезков]], с помощью которого вычисляется бит переноса. | Сумматор состоит из двух частей. Первая часть {{---}} это группа полных сумматоров, вычисляющих ответ. Вторая часть {{---}} [[Дерево_отрезков._Построение|дерево отрезков]], с помощью которого вычисляется бит переноса. | ||
+ | [[Файл:Двоичный_каскадный_сумматор.png|450px|left|thumb|Схема двоичного каскадного сумматора]] | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
''' Обозначения ''' | ''' Обозначения ''' | ||
− | * <tex> | + | * <tex>+ </tex> {{---}} полный сумматор, вычисляет результат сложения, |
− | * <tex>\bigotimes</tex> | + | * <tex>\bigotimes</tex> {{---}} блок вычисления композиции двух переносов, |
− | * <tex>\bigodot</tex> | + | * <tex>\bigodot</tex> {{---}} блок вычисления <tex>C_{i}</tex>, старшего бита сумматора. |
== Схемная сложность == | == Схемная сложность == | ||
Дерево отрезков вычисляет биты переноса за <tex>O(\log N)</tex>, оставшиеся действия выполняются за <tex>O(1)</tex>. Суммарное время работы {{---}} <tex>O(\log N)</tex>. | Дерево отрезков вычисляет биты переноса за <tex>O(\log N)</tex>, оставшиеся действия выполняются за <tex>O(1)</tex>. Суммарное время работы {{---}} <tex>O(\log N)</tex>. | ||
− | + | == См. также == | |
− | == | + | *[[Каскадный сумматор]] |
− | * [ | + | *[[Сумматор]] |
− | * [ | + | *[[Троичный сумматор]] |
[[Категория:Дискретная математика и алгоритмы]] | [[Категория:Дискретная математика и алгоритмы]] | ||
[[Категория:Схемы из функциональных элементов]] | [[Категория:Схемы из функциональных элементов]] | ||
+ | |||
+ | == Источники информации == | ||
+ | * [http://bookfi.net/book/556972 Е. Угрюмов "Цифровая схемотехника" 2001г.] | ||
+ | |||
+ | * [http://bookfi.net/book/532753 Дк. Ф. Уэйкерли "Проектирование цифровых устройств, том 1." 2002г.] | ||
+ | |||
+ | * [http://bookfi.net/book/637011 М.И. Богданович "Цифровые интегральные микросхемы" 1996г.] |
Текущая версия на 19:18, 4 сентября 2022
Определение: |
Двоичный каскадный сумматор (англ. Binary adder) — цифровая схема, осуществляющая сложение двух многоразрядных двоичных чисел, с ускоренным формированием разрядов переноса. |
Принцип работы
Используемые обозначения:
— -ый разряд суммируемых чисел, — биты переноса, — результат сложения.Рассмотрим один элемент линейного каскадного сумматора - Ripple-carry adder. В некоторых случаях бит переноса зависит только от значений и :
- если , то ,
- если , то ;
Иначе (
) бит переноса не изменяется, то есть .Три случая называются следующим образом:
- — порождение переноса,
- — уничтожение переноса,
- — проталкивание переноса.
Поскольку последовательное применение этих трёх действий над переносами принадлежит также одному из этих типов, то можно определить композицию действий над переносами. Обозначим композицию значком
и построим таблицу значений (в столбце первый аргумент, в строке — второй):Таблица значений | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Поскольку функция ассоциативна, то можно распространить её на любое количество аргументов. Более того, поскольку для любого действия
выполняется равенство , то функцию от нескольких действий можно определить как "последнее не ".Схема
Сумматор состоит из двух частей. Первая часть — это группа полных сумматоров, вычисляющих ответ. Вторая часть — дерево отрезков, с помощью которого вычисляется бит переноса.
Обозначения
- — полный сумматор, вычисляет результат сложения,
- — блок вычисления композиции двух переносов,
- — блок вычисления , старшего бита сумматора.
Схемная сложность
Дерево отрезков вычисляет биты переноса за
, оставшиеся действия выполняются за . Суммарное время работы — .