1632
правки
Изменения
м
Рассмотрим один элемент полного сумматора:{{Определение|definition='''Двоичный каскадный сумматор''' (англ. ''Binary adder'') {{---}} цифровая [[Реализация булевой функции схемой из функциональных элементов|схема]], осуществляющая сложение двух многоразрядных двоичных чисел, с ускоренным формированием разрядов переноса.}} == Принцип работы ==[[Файл:Полный_сумматор_1.png|right|200px|leftthumb|[[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}<Br/tex> зависит только от значений <tex>X_{i}<Br/tex>и <tex>Y_{i}<Br/tex>: * если <Br/tex>X_{i} = Y_{i} = 1<Br/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> {| border="1"{---}} ''порождение'' переноса,* <tex> \mathbf{k} \mathtt{ill}</tex> {{---}} ''уничтожение'' переноса,| x || y || * <tex> C_i \rightarrow C_mathbf{p} \mathtt{ropagate}</tex> {{i+1---}} ''проталкивание'' переноса. Поскольку последовательное применение этих трёх действий над переносами принадлежит также одному из этих типов, то можно определить композицию действий над переносами. Обозначим композицию значком <tex>\otimes</tex> и построим таблицу значений (в столбце первый аргумент, в строке — второй):[[Файл:Пример компазиции.png|right|450px| Условные обозначения thumb|Пример композиции]]{|class="wikitable" align="center" style="color: blue; background-color:#ccffcc;" cellpadding="3"!colspan="20" | ДействиеТаблица значений|- align="center"| 0 <tex>\otimes</tex> || 0 <tex> \mathbf{k} </tex> || 0 <tex> \mathbf{p} </tex> || k(kill) || Поглощение переноса<tex> \mathbf{g} </tex>|- align="center"| 0 <tex> \mathbf{k} </tex> || 1<tex>k</tex> | rowspan="2"| <tex> P_1 k</tex> ||rowspan="2"| p(propagate) ||rowspan="2"| Перенос переноса<tex>g</tex>|- align="center"| 1 <tex> \mathbf{p} </tex> || <tex>k</tex> || <tex>p</tex> || 0<tex>g</tex>|- align="center"| 1 <tex> \mathbf{g} </tex> || 1 <tex>k</tex> || 1 <tex>g</tex> || <tex>g(generate) </tex>|| Порождение переноса-align="center"
Обозначим композицию действий над переносами значком <tex>\bigotimes</tex> и рассмотрим таблицу:{| border="1" !<tex>\bigotimes</tex> !k !p= Источники информации == !g |- !k |k |k |g |- !p |k |p |g |- !g |k |g |g |- |}<Br/>Пример:<Br/>* [[Файлhttp:Пример компазиции.png|430px]]<Br/>Таким образом функцию <tex>\bigotimes</tex> можно определить как последнее не "P"bookfi.<Brnet/><Brbook/>Пусть <tex>f_{i}\epsilon \left \{k,p,g\right \}</tex>, тогда: <tex>C_{i}=(f_{1}\bigotimes f_{2}\bigotimes f_{3}\bigotimes556972 Е.Угрюмов "Цифровая схемотехника" 2001г..\bigotimes f_{i})_{(0)}</tex>.<Br/><Br/>Пусть элемент[[Файл:Первый_элемент.png|130px]]возвращает <tex>\bigotimes</tex> двух функций,<Br/> а элемент[[Файл:Второй_элемент.png|130px]] возвращает <tex>C'</tex>, старший бит сумматора.<Br/>
Схема двоичного каскадного сумматора выглядит следующим образом:[[Файл:Двоичный_каскадный_сумматор.png|560px]]<Br/>Сумматор состоит из двух частей. Первой частью является дерево отрезков * [http://ru.wikipediabookfi.orgnet/wikibook/Дерево_отрезков], с помощью которого, вычисляется бит переноса637011 М.И. Вторая часть это группа полных сумматоров, вычисляющих ответБогданович "Цифровые интегральные микросхемы" 1996г.]
rollbackEdits.php mass rollback
|}
Поскольку функция ассоциативна, то можно распространить её на любое количество аргументов. Более того, поскольку для любого действия <tex>x</tex> выполняется равенство <tex>x \otimes p = x</tex>, то функцию от нескольких действий можно определить как "последнее не <tex>p</tex>".
== Схема ==
Сумматор состоит из двух частей. Первая часть {{---}} это группа полных сумматоров, вычисляющих ответ. Вторая часть {{---}} [[Дерево_отрезков._Построение|дерево отрезков]], с помощью которого вычисляется бит переноса.
[[Файл:Двоичный_каскадный_сумматор.png|450px|left|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://bookfi.net/book/532753 Дк. Ф. Уэйкерли "Проектирование цифровых устройств, том 1." 2002г.]