Двоичный каскадный сумматор — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (ну блин)
Строка 1: Строка 1:
Рассмотрим один элемент полного сумматора:
+
{{Определение
[[Файл:Полный_сумматор_1.png‎|200px|left]] Где <tex>X_{i}, Y_{i}</tex> - i-ный разряд суммируемых чисел, <tex>C_{i}, C_{i+1}</tex> - Биты переноса, а <tex>F_{i}</tex> - Результат сложения.
+
|definition='''Двоичный каскадный сумматор''' {{---}} цифровая [[Реализация булевой функции схемой из функциональных элементов|схема]], осуществляющая сложение двух многоразрядных двоичных чисел.
<Br/>
+
}}
<Br/>
+
 
<Br/>
+
== Принцип работы ==
<Br/>
+
[[Файл:Полный_сумматор_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|Полный сумматор]]]]
<Br/>
+
'''Обозначения:'''
Построим таблицу зависимости <tex>C_{i+1}</tex> от <tex>X_{i}, Y_{i}, C_{i}</tex>, и введем условные обозначения:
+
* <tex>X_{i}, Y_{i}</tex> {{---}} i-ый разряд суммируемых чисел
{| border="1"
+
* <tex>C_{i}, C_{i+1}</tex> {{---}} биты переноса
| x || y || <tex> C_i \rightarrow C_{i+1} </tex> || Условные обозначения ||align="center" | Действие
+
* <tex>F_{i}</tex> {{---}} результат сложения.
|- align="center"
+
 
| 0 || 0 || 0 || k(kill) || Поглощение переноса
+
Рассмотрим один элемент [[Каскадный сумматор|линейного каскадного сумматора]]. В некоторых случаях бит переноса <tex>C_{i+1}</tex> зависит только от значений <tex>X_{i}</tex> и <tex>Y_{i}</tex>:
|- align="center"
+
* Generate(g): <tex>X_{i} = Y_{i} = 1</tex>,&nbsp;&nbsp;тогда <tex>C_{i+1} = 1</tex>
| 0 || 1
+
* Kill(k): <tex>X_{i} = Y_{i} = 0</tex>,&nbsp;&nbsp;тогда <tex>C_{i+1} = 0</tex>,
| rowspan="2"| <tex> P_1 </tex> ||rowspan="2"| p(propagate) ||rowspan="2"| Перенос переноса
+
* Propagate(p): <tex>X_{i} \ne Y_{i}</tex>,&nbsp;&nbsp;тогда <tex>C_{i+1} = C_{i}</tex>, 
|- align="center"
 
| 1 || 0
 
|- align="center"
 
| 1 || 1 || 1 || g(generate) || Порождение переноса
 
|}
 
  
  
 
Обозначим композицию действий над переносами  значком <tex>\bigotimes</tex> и рассмотрим таблицу:
 
Обозначим композицию действий над переносами  значком <tex>\bigotimes</tex> и рассмотрим таблицу:
{| border="1"
+
{| border="1" cellpadding="5"
 
  !<tex>\bigotimes</tex>
 
  !<tex>\bigotimes</tex>
 
  !k
 
  !k
Строка 44: Строка 39:
 
  |-
 
  |-
 
  |}
 
  |}
<Br/>
 
Пример:
 
<Br/>[[Файл:Пример компазиции.png‎|430px]]
 
<Br/>
 
Таким образом функцию <tex>\bigotimes</tex> можно определить как последнее не "P".
 
<Br/><Br/>
 
Пусть <tex>f_{i}\epsilon \left \{k,p,g\right \}</tex>, тогда: <tex>C_{i}=(f_{1}\bigotimes f_{2}\bigotimes f_{3}\bigotimes...\bigotimes f_{i})_{(0)}</tex>.
 
<Br/>
 
<Br/>
 
Пусть элемент
 
[[Файл:Первый_элемент.png‎|130px]]
 
возвращает <tex>\bigotimes</tex> двух функций,<Br/> а элемент
 
[[Файл:Второй_элемент.png‎|130px]] возвращает <tex>C'</tex>, старший бит сумматора.
 
<Br/>
 
  
  
Схема двоичного каскадного сумматора выглядит следующим образом:
+
 
[[Файл:Двоичный_каскадный_сумматор.png|560px]]
+
'''Пример'''
<Br/>
+
 
Сумматор состоит из двух частей. Первой частью является дерево отрезков [http://ru.wikipedia.org/wiki/Дерево_отрезков], с помощью которого, вычисляется бит переноса. Вторая часть это группа полных сумматоров, вычисляющих ответ.
+
[[Файл:Пример компазиции.png‎|430px|Пример композиции]]
 +
 
 +
Таким образом, функцию <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]
 +
 
 +
[[Категория:Дискретная математика и алгоритмы]]
 +
[[Категория:Схемы из функциональных элементов]]

Версия 00:21, 17 ноября 2011

Определение:
Двоичный каскадный сумматор — цифровая схема, осуществляющая сложение двух многоразрядных двоичных чисел.


Принцип работы

Обозначения:

  • [math]X_{i}, Y_{i}[/math] — i-ый разряд суммируемых чисел
  • [math]C_{i}, C_{i+1}[/math] — биты переноса
  • [math]F_{i}[/math] — результат сложения.

Рассмотрим один элемент линейного каскадного сумматора. В некоторых случаях бит переноса [math]C_{i+1}[/math] зависит только от значений [math]X_{i}[/math] и [math]Y_{i}[/math]:

  • Generate(g): [math]X_{i} = Y_{i} = 1[/math],  тогда [math]C_{i+1} = 1[/math]
  • Kill(k): [math]X_{i} = Y_{i} = 0[/math],  тогда [math]C_{i+1} = 0[/math],
  • Propagate(p): [math]X_{i} \ne Y_{i}[/math],  тогда [math]C_{i+1} = C_{i}[/math],


Обозначим композицию действий над переносами значком [math]\bigotimes[/math] и рассмотрим таблицу:

[math]\bigotimes[/math] k p g
k k k g
p k p g
g k g g


Пример

Пример композиции

Таким образом, функцию [math]\bigotimes[/math] можно определить как последнее не "P".


Схема

Схема двоичного каскадного сумматора

Сумматор состоит из двух частей. Первая часть — это группа полных сумматоров, вычисляющих ответ. Вторая часть — дерево отрезков, с помощью которого вычисляется бит переноса.

Обозначения

  • [math]"+"[/math] — полный сумматор, вычисляет результат сложения.
  • [math]\bigotimes[/math] вычисляет композицию двух переносов.
  • [math]\bigodot[/math] возвращает [math]C_{i}[/math], старший бит сумматора.


Схемная сложность

Дерево отрезков вычисляет биты переноса за [math]O(\log N)[/math], оставшиеся действия выполняются за [math]O(1)[/math]. Суммарное время работы — [math]O(\log N)[/math].


Ссылки