Реализация вычитания сумматором — различия между версиями
(→Пример реализации вычитания сумматором) |
|||
Строка 11: | Строка 11: | ||
Очевидно, что реализация преобразования в дополнительный код отдельным сумматором делает вычисление разности в два раза медленнее, чем вычисление суммы. Чтобы ускорить вычисления нужно воспользоваться первым битом переноса в сумматоре: для реализации суммы в него посылают ноль, а для реализации вычитания посылать в него единицу при вычитании и ноль при суммировании. Вместо того, чтобы инвертировать вычитаемое число, можно делать XOR бита первого переноса с каждым битом вычитаемого числа. Таким образом, полученная схема будет работать как для суммирования, так и для вычитания, и при этом вычитание не требует больше времени, чем сложение. | Очевидно, что реализация преобразования в дополнительный код отдельным сумматором делает вычисление разности в два раза медленнее, чем вычисление суммы. Чтобы ускорить вычисления нужно воспользоваться первым битом переноса в сумматоре: для реализации суммы в него посылают ноль, а для реализации вычитания посылать в него единицу при вычитании и ноль при суммировании. Вместо того, чтобы инвертировать вычитаемое число, можно делать XOR бита первого переноса с каждым битом вычитаемого числа. Таким образом, полученная схема будет работать как для суммирования, так и для вычитания, и при этом вычитание не требует больше времени, чем сложение. | ||
− | == | + | ==Схема реализации вычитания сумматором== |
{| | {| | ||
|- | |- | ||
!Условные обозначения | !Условные обозначения | ||
− | !Изображение | + | !Изображение схемы |
|- | |- | ||
| | | | ||
Строка 34: | Строка 34: | ||
|- | |- | ||
!<tex> \mathbf {\mbox{A}_\mathrm{0} , \mbox{A}_\mathrm{1}, \dots, \mbox{A}_\mathrm{N}} </tex> | !<tex> \mathbf {\mbox{A}_\mathrm{0} , \mbox{A}_\mathrm{1}, \dots, \mbox{A}_\mathrm{N}} </tex> | ||
− | | | + | |биты первого слагаемого (уменьшаемого) |
!<tex> \large A </tex> | !<tex> \large A </tex> | ||
|- | |- | ||
!<tex> \mathbf {\mbox{B}_\mathrm{0} , \mbox{B}_\mathrm{1}, \dots, \mbox{B}_\mathrm{N}} </tex> | !<tex> \mathbf {\mbox{B}_\mathrm{0} , \mbox{B}_\mathrm{1}, \dots, \mbox{B}_\mathrm{N}} </tex> | ||
− | | | + | |биты второго слагаемого (вычитаемого) |
!<tex> \large B</tex> | !<tex> \large B</tex> | ||
|- | |- | ||
!<tex> \mathbf {\mbox{S}_\mathrm{0} , \mbox{S}_\mathrm{1}, \dots, \mbox{S}_\mathrm{N}} </tex> | !<tex> \mathbf {\mbox{S}_\mathrm{0} , \mbox{S}_\mathrm{1}, \dots, \mbox{S}_\mathrm{N}} </tex> | ||
− | | | + | |биты ответа. |
!<tex> \large S = A \pm B</tex> | !<tex> \large S = A \pm B</tex> | ||
|- | |- | ||
!<tex> \mathbf {T} </tex> | !<tex> \mathbf {T} </tex> | ||
− | |бит отвечающий за знак операции | + | |бит, отвечающий за знак операции |
'''T''' подключён к '''C<small>0</small>''' | '''T''' подключён к '''C<small>0</small>''' | ||
|<center>'''0''' если <tex> \large S = A + B</tex><br />'''1''' если <tex> \large S = A - B</tex></center> | |<center>'''0''' если <tex> \large S = A + B</tex><br />'''1''' если <tex> \large S = A - B</tex></center> | ||
|- | |- | ||
− | !<tex> \mathbf 0 , 1, \dots, N </tex> | + | !<tex> \mathbf {0 , 1, \dots, N} </tex> |
− | | | + | |полные сумматоры |
|[[Файл:Full_Adder.png|250px|Блок сумматор]] | |[[Файл:Full_Adder.png|250px|Блок сумматор]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
|[[Файл:Arithmometer_SUM_SUB.png|400px|Арифмометр]] | |[[Файл:Arithmometer_SUM_SUB.png|400px|Арифмометр]] |
Версия 13:15, 12 января 2012
Содержание
Преобразование чисел для вычитания сумматором
Чтобы реализовать вычитание каскадным или двоичным каскадным сумматором, нужно сложить на нём уменьшаемое с противоположным по знаку вычитаемым, так же как и при вычитании обычных чисел. Тогда полученная сумма будет разностью данных чисел: .
Инверсия знака записанного в двоичном виде числа происходит точно так же, как и в дополнительном коде.
Данное число нужно инвертировать и прибавить к нему единицу:
.Например, число
будет записано как , так как , аОптимизация
Очевидно, что реализация преобразования в дополнительный код отдельным сумматором делает вычисление разности в два раза медленнее, чем вычисление суммы. Чтобы ускорить вычисления нужно воспользоваться первым битом переноса в сумматоре: для реализации суммы в него посылают ноль, а для реализации вычитания посылать в него единицу при вычитании и ноль при суммировании. Вместо того, чтобы инвертировать вычитаемое число, можно делать XOR бита первого переноса с каждым битом вычитаемого числа. Таким образом, полученная схема будет работать как для суммирования, так и для вычитания, и при этом вычитание не требует больше времени, чем сложение.
Схема реализации вычитания сумматором
Условные обозначения | Изображение схемы | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|