Реализация вычитания сумматором — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 2: Строка 2:
 
Что бы реализовать вычитание [[Каскадный сумматор|каскадным]] или [[Двоичный каскадный сумматор|двоичным каскадным сумматором]], нужно  сложить на нём уменьшаемое с противоположным по знаку вычитаемым, так же как и при вычитании обычных чисел. Тогда полученная сумма будет разностью данных чисел.
 
Что бы реализовать вычитание [[Каскадный сумматор|каскадным]] или [[Двоичный каскадный сумматор|двоичным каскадным сумматором]], нужно  сложить на нём уменьшаемое с противоположным по знаку вычитаемым, так же как и при вычитании обычных чисел. Тогда полученная сумма будет разностью данных чисел.
  
<math> \mathbf x - y = x +(-y)</math>
+
<math> x - y = x +(-y)</math>
 
 
  
 
Инверсия знака записанного в двоичном виде числа происходит точно так же, как и в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код#Дополнительный код|дополнительном коде]].<br/>
 
Инверсия знака записанного в двоичном виде числа происходит точно так же, как и в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код#Дополнительный код|дополнительном коде]].<br/>
 
Данное число нужно инвертировать и прибавить к нему единицу.
 
Данное число нужно инвертировать и прибавить к нему единицу.
  
<math> \mathbf -y = (\lnot y) + 1 </math>
+
<math> -y = (\lnot y) + 1 </math>
  
Например число <math> \mathbf - 19</math> будет записано как <math> \mathbf 01101 </math>, так как <math> \mathbf 19_\mathrm{10} = 10011_\mathrm{2}</math>,  а  <math> \mathbf (\lnot 10011) + 1 = 01100 + 1 = 01101 </math>
+
Например число <math> - 19</math> будет записано как <math> 01101 </math>, так как <math> 19_\mathrm{10} = 10011_\mathrm{2}</math>,  а  <math> (\lnot 10011) + 1 = 01100 + 1 = 01101 </math>
  
  
Строка 26: Строка 25:
 
![[Файл:XOR_logic_element.png|100px|XOR]]
 
![[Файл:XOR_logic_element.png|100px|XOR]]
 
| логический [[Реализация булевой функции схемой из функциональных элементов|функциональный элемент]] '''XOR'''<br />'''A''' и '''B''' входы и '''Y''' выход.
 
| логический [[Реализация булевой функции схемой из функциональных элементов|функциональный элемент]] '''XOR'''<br />'''A''' и '''B''' входы и '''Y''' выход.
!<math> \mathbf A \oplus B = Y</math><br /><math> \mathbf 0 \oplus 0 = 0</math><br /><math> \mathbf 0 \oplus 1 = 1</math><br /><math> \mathbf 1 \oplus 0 = 1</math><br /><math> \mathbf 1 \oplus 1 = 0</math>
+
!<math> A \oplus B = Y</math><br /><math> 0 \oplus 0 = 0</math><br /><math> 0 \oplus 1 = 1</math><br /><math> 1 \oplus 0 = 1</math><br /><math> 1 \oplus 1 = 0</math>
 
|-
 
|-
 
!<math> \mathbf {\color{Goldenrod}\mbox{A}_\mathrm{0} , \mbox{A}_\mathrm{1} ... \mbox{A}_\mathrm{N}} </math>
 
!<math> \mathbf {\color{Goldenrod}\mbox{A}_\mathrm{0} , \mbox{A}_\mathrm{1} ... \mbox{A}_\mathrm{N}} </math>
Строка 38: Строка 37:
 
!<math> \mathbf {\color{Green}\mbox{S}_\mathrm{0} , \mbox{S}_\mathrm{1} ... \mbox{S}_\mathrm{N}} </math>
 
!<math> \mathbf {\color{Green}\mbox{S}_\mathrm{0} , \mbox{S}_\mathrm{1} ... \mbox{S}_\mathrm{N}} </math>
 
|'''0'''-ой '''1'''-ый ... '''n'''-ный биты ответа.
 
|'''0'''-ой '''1'''-ый ... '''n'''-ный биты ответа.
!<math> \mathbf S = A \pm B</math>
+
!<math> S = A \pm B</math>
 
|-
 
|-
 
!<math> \mathbf {\color{Blue}T} </math>
 
!<math> \mathbf {\color{Blue}T} </math>
 
|бит отвечающий за знак операции<br />'''T''' подключён к '''C<small>0</small>''' 0-вому биту переноса в сумматоре
 
|бит отвечающий за знак операции<br />'''T''' подключён к '''C<small>0</small>''' 0-вому биту переноса в сумматоре
!0 если <math> \mathbf S = A + B</math><br />1 если <math> \mathbf S = A - B</math><br />
+
!0 если <math> S = A + B</math><br />1 если <math> S = A - B</math><br />
 
|-
 
|-
 
!<math> \mathbf {\color{OliveGreen}0 , 1 ... N} </math>
 
!<math> \mathbf {\color{OliveGreen}0 , 1 ... N} </math>

Версия 00:39, 10 декабря 2011

Преобразование чисел для вычитания сумматором

Что бы реализовать вычитание каскадным или двоичным каскадным сумматором, нужно сложить на нём уменьшаемое с противоположным по знаку вычитаемым, так же как и при вычитании обычных чисел. Тогда полученная сумма будет разностью данных чисел.

[math] x - y = x +(-y)[/math]

Инверсия знака записанного в двоичном виде числа происходит точно так же, как и в дополнительном коде.
Данное число нужно инвертировать и прибавить к нему единицу.

[math] -y = (\lnot y) + 1 [/math]

Например число [math] - 19[/math] будет записано как [math] 01101 [/math], так как [math] 19_\mathrm{10} = 10011_\mathrm{2}[/math], а [math] (\lnot 10011) + 1 = 01100 + 1 = 01101 [/math]


Оптимизация

Очевидно, что такой подход к вычитанию сумматором не оптимален, так как придётся вносить в схему последовательно 2 сумматора или блок памяти, для запоминания промежуточных действий таких как, сложение с единицей. Что бы упростить вычисления нужно воспользоваться лишним битом переноса в сумматоре, в который посылают ноль, и послать в него единицу при вычитании и ноль при суммировании. Вместо того что бы инвертировать вычитаемое число, можно сделать XOR бита первого переноса с каждым битом вычитаемого числа. Таким образом, можно посылать в полученный арифмометр числа точно так же как и при сложении, только первый бит переноса будет отвечать за знак операции: 0-сложение 1-вычитание.

Пример реализации вычитания сумматором

Условные обозначения Изображение арифмометра
XOR логический функциональный элемент XOR
A и B входы и Y выход.
[math] A \oplus B = Y[/math]
[math] 0 \oplus 0 = 0[/math]
[math] 0 \oplus 1 = 1[/math]
[math] 1 \oplus 0 = 1[/math]
[math] 1 \oplus 1 = 0[/math]
[math] \mathbf {\color{Goldenrod}\mbox{A}_\mathrm{0} , \mbox{A}_\mathrm{1} ... \mbox{A}_\mathrm{N}} [/math] 0-ой 1-ый ... n-ный биты первого слагаемого или уменьшаемого. [math] \mathbf A [/math]
[math] \mathbf {\color{Red}\mbox{B}_\mathrm{0} , \mbox{B}_\mathrm{1} ... \mbox{B}_\mathrm{N}} [/math] 0-ой 1-ый ... n-ный биты второго слагаемого или вычитаемого. [math] \mathbf B[/math]
[math] \mathbf {\color{Green}\mbox{S}_\mathrm{0} , \mbox{S}_\mathrm{1} ... \mbox{S}_\mathrm{N}} [/math] 0-ой 1-ый ... n-ный биты ответа. [math] S = A \pm B[/math]
[math] \mathbf {\color{Blue}T} [/math] бит отвечающий за знак операции
T подключён к C0 0-вому биту переноса в сумматоре
0 если [math] S = A + B[/math]
1 если [math] S = A - B[/math]
[math] \mathbf {\color{OliveGreen}0 , 1 ... N} [/math] блоки каскадного или двоичного каскадного сумматора Блок сумматор
Арифмометр

См. также

Сумматор
Матричный умножитель
Реализация булевой функции схемой из функциональных элементов

Ссылки

Subtractor
Negative Numbers and Binary Subtraction
Рабочий пример арифмометра