Изменения

Перейти к: навигация, поиск

Двоичный каскадный сумматор

1887 байт добавлено, 22:17, 19 января 2016
Схема
{{Определение
|definition='''Двоичный каскадный сумматор''' (англ. ''Binary adder'') {{---}} цифровая [[Реализация булевой функции схемой из функциональных элементов|схема]], осуществляющая сложение двух многоразрядных двоичных чисел, с ускоренным формированием разрядов переноса.
}}
== Принцип работы ==
[[Файл:Полный_сумматор_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> {{---}} результат сложения. Рассмотрим один элемент [[Каскадный сумматор|линейного каскадного сумматора - 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} = 0</tex>, то <tex>C_{i+1} = 0</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> и построим таблицу значений (в столбце первый аргумент, в строке — второй):[[Файл:Пример компазиции.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>". == Схема == Сумматор состоит из двух частей. Первая часть {{---}} это группа полных сумматоров, вычисляющих ответ. Вторая часть {{---}} [[Дерево_отрезков._Построение|дерево отрезков]], с помощью которого вычисляется бит переноса.[[Файл:Двоичный_каскадный_сумматор.png|450px|left|thumb|Схема двоичного каскадного сумматора]]                               
Рассмотрим один элемент [[Каскадный сумматор|линейного каскадного сумматора]]. В некоторых случаях бит переноса <tex>C_{i+1}</tex> зависит только от значений <tex>X_{i}</tex> и <tex>Y_{i}</tex>:
* Generate(g): если <tex>X_{i} = Y_{i} = 1</tex>,&nbsp;&nbsp;то <tex>C_{i+1} = 1</tex>
* Kill(k): если <tex>X_{i} = Y_{i} = 0</tex>,&nbsp;&nbsp;то <tex>C_{i+1} = 0</tex>,
* Propagate(p): если <tex>X_{i} \ne Y_{i}</tex>,&nbsp;&nbsp;то <tex>C_{i+1} = C_{i}</tex>,
Обозначим композицию действий над переносами значком <tex>\bigotimes</tex> и построим таблицу значений(в столбце первый аргумент, в строке — второй):
{| border="1" cellpadding="5"
!<tex>\bigotimes</tex>
!k
!p
!g
|-
!k
|k
|k
|g
|-
!p
|k
|p
|g
|-
!g
|k
|g
|g
|-
|}
'''Пример'''
[[Файл:Пример компазиции.png‎|430px|Пример композиции]]
''' Замечание: ''' так как значение <tex>x \otimes p = x</tex>, функцию <tex>\bigotimes</tex> можно определить как последнее не "p".
== Схема ==
[[Файл:Двоичный_каскадный_сумматор.png|560px|thumb|Схема двоичного каскадного сумматора]]
Сумматор состоит из двух частей. Первая часть {{---}} это группа полных сумматоров, вычисляющих ответ. Вторая часть {{---}} [[Дерево_отрезков._Построение|дерево отрезков]], с помощью которого вычисляется бит переноса.
''' Обозначения '''
* <tex>"+" </tex> {{---}} полный сумматор, вычисляет результат сложения.,* <tex>\bigotimes</tex> вычисляет композицию {{---}} блок вычисления композиции двух переносов.,* <tex>\bigodot</tex> возвращает {{---}} блок вычисления <tex>C_{i}</tex>, старший бит старшего бита сумматора.
== Схемная сложность ==
Дерево отрезков вычисляет биты переноса за <tex>O(\log N)</tex>, оставшиеся действия выполняются за <tex>O(1)</tex>. Суммарное время работы {{---}} <tex>O(\log N)</tex>.
 == Ссылки См. также ==* [http://rain.ifmo.ru/cat/view.php/vis/arithmetics/binary-addition-2002/algorithm Дискретная математика: алгоритмы[Каскадный сумматор]]*[[Сумматор]]* [http://en.wikipedia.org/wiki/Adder_(electronics) Wikipedia[Троичный сумматор]]
[[Категория:Дискретная математика и алгоритмы]]
[[Категория:Схемы из функциональных элементов]]
 
== Источники информации ==
* [http://bookfi.net/book/556972 Е. Угрюмов "Цифровая схемотехника" 2001г.]
 
* [http://bookfi.net/book/532753 Дк. Ф. Уэйкерли "Проектирование цифровых устройств, том 1." 2002г.]
 
* [http://bookfi.net/book/637011 М.И. Богданович "Цифровые интегральные микросхемы" 1996г.]
172
правки

Навигация