Электротехника и электроника. Часть 2

3.10. Арифметические устройства

К ним относятся устройства для выполнения арифметических действий над двоичными числами. Так же, как и в логических устройствах, в них используются только два значения – «0» и «1», но здесь они понимаются не как логические переменные, а как двоичные цифры. Поэтому действия над ними подчиняются правилам двоичной арифметики.

Двоичная арифметика. Числа, которыми мы привыкли пользоваться, называются десятичными, и арифметика, которой мы пользуемся, также называется десятичной. Это потому, что каждое число можно составить из набора цифр, содержащего 10 символов-цифр-"0123456789".

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

Наиболее простая арифметика получается, если 10 заменить на 2, что и используется в вычислительных устройствах. Полученная система счисления называется двоичной, и число в ней определяется следующим образом:

anan-1….a2a1 = an * 2n-1 + an-1 * 2n-2 + … + a2 * 21 + a1 * 20 ,

где ai  – это символ из набора "0 или 1", 2i – весовые коэффициенты.

Эта система самая простая из всех возможных, так как в ней любое число образуется только из двух цифр 0 и 1. Понятно, что проще уже некуда. Примеры двоичных чисел: 10, 111, 101.

Двоичное число можно представить в виде десятичного числа, и, наоборот, десятичное число можно представить в виде двоичного.

Двоичное в десятичное. Метод такого перевода даёт наш способ записи чисел. Возьмём следующее двоичное число 1001. Разложим его по степеням двойки. Получим следующее:

1001 = 1 * 23 + 0 * 22 + 0 * 21 + 1 * 20 .

Выполним все записанные действия и получим:

1 * 23 + 0 * 22 + 0 * 21 + 1 * 20 = 8 + 0+ 0 + 1 = 9.

Таким образом, получаем, что 1001(двоичное) = 9(десятичное).

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

арифметических действиях.

Сложение двоичных чисел. Способ сложения столбиком, в общем-то, такой же, как и для десятичного числа. То есть сложение выполняется поразрядно, начиная с младшей цифры. Если при сложении двух цифр получается СУММА больше девяти, то записывается цифра = СУММА – 10, а ЦЕЛАЯ ЧАСТЬ (СУММА/10) добавляется к старшему разряду (сложите пару чисел столбиком вспомните, как это делается). Так и с двоичным числом. Складываем поразрядно, начиная с младшей цифры. Если получается больше 1, то записывается 1 и 1 добавляется к старшему разряду (говорят "на ум пошло").

Выполним пример: 10011 + 10001:

Первый разряд: 1 + 1 = 2. Записываем 0 и 1 перешла в виде переноса в старший разряд.

Второй разряд: 1 + 0 + 1(запомненная единица) = 2. Записываем 0 и 1 также перешла в виде переноса в старший разряд.

Третий разряд: 0 + 0 + 1(запомненная единица) = 1. Записываем 1.

Четвертый разряд 0 + 0 = 0. Записываем 0.

Пятый разряд 1 + 1 = 2. Записываем 0 и добавляем к шестым разрядом 1.

Переведём все три числа в десятичную систему и проверим правильность сложения:

10011 = 1*24 + 0*23 + 0*22 + 1*21 + 1*20 = 16 + 2 + 1 =19;

10001 = 1*24 + 0*23 + 0*22 + 0*21 + 1*20 = 16 + 1 = 17;

100100 = 1*25 + 0*24 + 0*23 + 1*22 + 0*21 + 0*20 =32+4=36.

В итоге 17 + 19 = 36 – верное равенство.

Примеры для самостоятельного решения:

а) 11001 +101 =…

б) 11001 +11001 =…

с) 1001 + 111 =…

д) 10011 + 101 =…

е) 11011 + 1111 =…

д) 11111 + 10011 =…

Вычитание двоичных чисел. Вычитать числа будем также столбиком и общее

правило тоже, что и для десятичных чисел, вычитание выполняется поразрядно, и если в разряде не хватает  единицы, то она занимается в старшем. Решим следующий пример:

Первый разряд: 1 – 0 = 1. Записываем 1.

Второй разряд: 0 –1. Не хватает единицы. Занимаем её в старшем разряде. Единица  из старшего разряда переходит в младший, как две единицы (потому что старший разряд представляется двойкой большей степ
ени) 2 – 1 = 1. Записываем 1.

Третий разряд. Единицу этого разряда мы занимали, поэтому сейчас в разряде 0 и есть необходимость занять единицу старшего разряда. 2 – 1 = 1. Записываем 1.

Проверим результат в десятичной системе:

1101 – 110 = 13 – 6 = 7 (111). Верное равенство.

Еще один интересный способ выполнения вычитания связан с понятием дополнительного кода, который позволяет свести вычитание к сложению. Получается число в дополнительном коде исключительно просто, берём число, заменяем нули на единицы, единицы, наоборот, заменяем на нули и к младшему разряду добавляем единицу. Например, 10010, в дополнительном коде будет 011011.

Правило вычитания через дополнительный код утверждает, что вычитание можно заменить на сложение, если вычитаемое заменить на число в дополнительном коде.

Пример: 34 – 22 = 12.

Запишем этот пример в двоичном виде. 100010 – 10110 = 1100.

Дополнительный код числа 10110 будет такой: 01001 + 00001 = 01010.

Тогда исходный пример можно заменить сложением так: 100010 + 01010 = = 101100. Далее, необходимо отбросить одну единицу в старшем разряде. Если это сделать, то получим 001100. Отбросим незначащие нули и получим 1100, то есть пример решён правильно.

Выполните вычитания. Обычным способом и в дополнительном коде, переведя предварительно десятичные числа в двоичные:

а) 456 – 112;

б) 234 –12;

в) 345 – 232;

г) 456 – 78;

д) 567 – 109;

е) 67 – 45.

Выполните проверку, переведя двоичный результат в десятичную систему счисления.

Для представления отрицательных чисел вводится знаковый разряд z. Если число положительное, то он имеет значение «0», если отрицательное – то «1». Например:

+7 → 0 0111;  -7 → 1 0111.

Умножение в двоичной системе счисления. Для начала рассмотрим следующий любопытный факт. Для того чтобы умножить двоичное число на 2 (десятичная двойка это 10 в двоичной системе), достаточно к умножаемому числу слева приписать один ноль.

Пример: 10101 * 10 = 101010.

Проверка:

10101 = 1*24 + 0*23 + 1*22 + 0*21 + 1*20 = 16 + 4 + 1 = 21.

101010 = 1*25 + 0*24 + 1*23 + 0*22 + 1*21 +0*20 = 32 + 8 + 2 = 42.

21 * 2 = 42.

Если мы вспомним, что любое двоичное число разлагается по степеням двойки, то становится ясно, что умножение в двоичной системе счисления сводится к умножению на 10 (то есть на десятичную 2), а стало быть, умножение – это ряд последовательных сдвигов. Общее правило таково: как и для десятичных чисел, умножение двоичных выполняется поразрядно. И для каждого разряда второго множителя к первому множителю добавляется один ноль справа. Пример (пока не столбиком):

1011 * 101. Это умножение можно свести к сумме трёх поразрядных умножений: 1011 * 1 + 1011 * 0  + 1011 * 100 = 1011 +101100 = 110111. В столбик это же самое можно записать так:

Проверка:

101 = 5 (десятичное);

1011 = 11 (десятичное);

110111 = 55 (десятичное);

5*11 = 55 верное равенство.

Примечание: Кстати, таблица умножения в двоичной системе состоит только из одного пункта 1 * 1 = 1.

Деление двоичных чисел. Деление двоичных чисел сводится к выполнению вычитаний и сдвигов. Пример. Выполнить деление  110110 (54) на 110 (6).

Результат: 54:6 = 9(10 c.с.) = 1001(2 с.с.).

Операция деления чисел, представленных в ЭВМ в форме с фиксированной точкой, сводится к выполнению многократных вычитаний и сдвигов. При этом разряды частного определяются, начиная со старшего, последовательным вычитанием делителя сначала из делимого, а затем из образующихся в процессе деления сдвигаемых остатков.

Используют и другие виды двоичных кодов, некоторые из них приведены ниже.

Дополнительные коды используются для реализации операции вычитания на основе типовых схем сумматоров, применяемых в арифметических устройствах. Существуют две разновидности дополнительных кодов: код с дополнением до единицы (обратный код) и с дополнением до двух. Первый характеризуется тем, что результат сложения преобразованного числа с исходным дает единицы во всех разрядах. Код с дополнением до двух характерен тем, что суммирование преобразованного и исходного чисел дает нули во всех разрядах с переносом единицы из старшего бита результрующего числа. Для получения дополнения до двух необходимо во всех разрядах заменить единицы и нули на противоположные символы, а к полученному результату в младший бит добавить единицу.

Особое место занимают коды, предназначенные для отображения десятичных чисел (табл.
3.5).

3) Код 2 из 5. Преимущество этого кода состоит в простоте обнаружения ошибок в аппаратуре, поскольку единичное искажение любого символа может быть легко опознано по количеству единиц в слове.

4) Код Джонсона представляет собой чередующиеся “волны” нулей и единиц. Формирование последовательности чисел в таком виде может быть реализовано использованием сдвигающих регистров.

Кроме кодов, перечисленных в табл. 3.5, для отображения десятичной информации используется двоично-десятичный код (ДДК). Он применяется для устройств, использующих декадную форму отображения информации (цифровые измерительные приборы, калькуляторы, аппаратура цифропечати и т.д.). Этот код для отображения каждого десятичного разряда требует четыре двоичных разряда, комбинации двоичных чисел от 10 до 15 включительно считаются избыточными или нештатными и используются для упрощения структурных схем преобразователей кодов или для обнаружения ошибок.

Сумматоры. Полусумматор – цифровое устройство функционального назначения, предназначенное для сложения двух одноразрядных двоичных чисел.

При сложении двух одноразрядных двоичных чисел, кроме сигнала суммы, может образовываться сигнал переноса, поэтому полусумматор представляет собой устройство с двумя входами Х1 и Х2 и выходами: S – сигнала суммы и Р – сигнала переноса в старший разряд.

Построение двоичных сумматоров обычно начинается с сумматора по модулю 2, который не учитывает переносов. На 3.16 приведена таблица истинности этого сумматора.

В соответствии с принципами построения произвольной таблицы истинности получим схему сумматора по модулю 2. Эта схема приведена на рис. 3.17.

3.16 Таблица истинности сумматора по модулю 2

Рис 3.17 Принципиальная схема, реализующая таблицу истинности сумматора по модулю 2

Сумматор по модулю 2 выполняет суммирование без учёта переноса. В обычном двоичном сумматоре требуется учитывать перенос, поэтому требуются схемы, позволяющие формировать перенос в следующий двоичный разряд. Таблица истинности такой схемы, называемой полусумматором, приведена на рис. 3.18.

Рис. 3.18 Таблица истинности полусумматора

Рис. 3.19 Принципиальная схема, реализующая таблицу истинности полусумматора

В соответствии с принципами построения произвольной таблицы истинности получим схему полусумматора. Эта схема приведена на рис. 3.19.

Полусумматор изображается на схемах как показано на рис. 3.20.

Схема полусумматора формирует перенос в следующий разряд, но не может учитывать перенос из предыдущего разряда, поэтому она и называется полусумматором. Таблица истинности полного двоичного одноразрядного сумматора, который учитывает такой перенос, приведена на рис. 3.21.

В соответствии с принципами построения схемы по произвольной таблице истинности выпишем логические уравнения для суммы и переноса:

;

.

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

.

Реализуя полученные уравнения, получим схему полного двоичного одноразрядного сумматора. Эта схема приведена на рис. 3.22.

Рис. 3.20 Изображение полусумматора на схемах

Рис. 3.21 Таблица истинности полного двоичного одноразрядного

Рис. 3.22 Принципиальная схема, реализующая таблицу истинности полного двоичного одноразрядного сумматора

Полный двоичный одноразрядный сумматор изображается на схемах как показано

на рис. 3.23.

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

Полный двоичный многоразрядный сумматор изображается на схемах как показано на рис. 3.25.

p>

Рис 3.23 Обозначение полного двоичного одноразрядного сумматора на схемах

Рис. 3.24 Принципиальная схема многоразрядного двоичного сумматора

Рис. 3.25 Изображение полного двоичного многоразрядного сумматора

на схемах