00 Проектирование цифровых устройств
.pdf31
значение модуля разности. Знак разности устанавливается по результату сравнения операндов во всех декадах вычитателя.
1.3.3. Использование сумматоров для вычитания двоичнодесятичных чисел
Для упрощения схемной реализации вычислительных машин было бы удобно вместо отдельных сумматора и вычитателя иметь одно универсальное вычислительное устройство. Оказывается, что использование простого математического приема позволяет приспособить сумматор для выполнения операции вычитания.
Рассмотрим этот прием на примерах трехдекадных чисел. Возможны два случая: 1) вычитаемое число меньше уменьшаемого, и разность является положительным числом; 2) вычитаемое больше уменьшаемого, и разность имеет отрицательный знак. В любом случае мы будем складывать уменьшаемое в прямом коде и вычитаемое в дополнительном к числу 999. В первом случае сумма превышает величину 999, сигнал переноса в четвертую декаду прибавляется к полученной трехдекадной сумме. Итоговое число равно искомой разности. Во втором случае переполнения не будет, результат сложения следует дополнить до числа 999, и полученное число будет равно разности со знаком минус. Сначала рассмотрим примеры с использованием десятичных чисел.
Первый пример. Найдем разность чисел 274 – 186 = 88.
Дополняем вычитаемое до 999, получаем 813. Суммируем уменьшаемое 274 в прямом коде и вычитаемое в дополнительном: 274 + 813 = (1)087. Прибавляем единицу переноса и получаем окончательный результат 087 + 1 = 88.
Второй прмер. Найдем разность чисел 145 – 286 = –141.
Дополняем вычитаемое до 999, получаем 713. Суммируем уменьшаемое 145 в прямом коде и вычитаемое в дополнительном: 145 + 713 = 858. Переполнения нет, значит, разность имеет отрицательный знак. Находим дополнение полученной суммы до 999, оно равно 141, что и соответствует условию примера.
Теперь рассмотрим эти же примеры с использованием двоичнодесятичных чисел. В таблице 1.х показаны этапы вычислений для первого примера, а в таблице 1.х – для второго примера.
32
Таблица 1.х. Алгоритм вычитания двоично-десятичных чисел при положительной разности
Прямой код вычитаемого 186 |
|
0001 |
1000 |
0110 |
Инверсия кодов тетрад вычитаемого 186 |
+ |
1110 |
0111 |
1001 |
Десятичная коррекция дополнения до 999 |
1010 |
1010 |
1010 |
|
Вычитаемое в дополнительном коде |
|
1000 |
0001 |
0011 |
Прямой код уменьшаемого 274 |
+ |
0010 |
0111 |
0100 |
Сумма уменьшаемого и вычитаемого |
1010 |
1000 |
0111 |
|
Десятичная коррекция суммы |
+ |
(1)0000 |
1000 |
0111 |
Циклический перенос |
0000 |
0000 |
0001 |
|
Окончательный результат – плюс 88 |
|
0000 |
1000 |
1000 |
При десятичной коррекции кода дополнения вычитаемого переносы между декадами блокируются, а при десятичной коррекции суммы уменьшаемого и дополнения вычитаемого – включаются.
Таблица 1.х. Алгоритм вычитания двоично-десятичных чисел при отрицательной разности
Прямой код вычитаемого 286 |
|
0010 |
1000 |
0110 |
Инверсия кодов тетрад вычитаемого 286 |
+ |
1101 |
0111 |
1001 |
Десятичная коррекция дополнения до 999 |
1010 |
1010 |
1010 |
|
Вычитаемое в дополнительном коде |
+ |
0111 |
0001 |
0011 |
Прямой код уменьшаемого 145 |
0001 |
0100 |
0101 |
|
Сумма уменьшаемого и вычитаемого |
|
1000 |
0101 |
1000 |
Инверсия кодов тетрад суммы |
+ |
0111 |
1010 |
0111 |
Десятичная коррекция суммы |
1010 |
1010 |
1010 |
|
Окончательный результат – минус 141 |
|
0001 |
0100 |
0001 |
Таким образом, двоично-десятичный сумматор можно приспособить для вычитания двоично-десятичных чисел, добавив преобразователь вычитаемого числа в код, дополнительный до 999, и логическую схему анализа результата сложения уменьшаемого в прямом коде и вычитаемого в дополнительном до 999.
33
B3 |
|
B2 |
|
B1 |
|
B0 |
|
|
|
1 |
A3 |
1 |
A2 |
1 |
A1 |
1 |
A0 |
|
|
|
|
|
||||
|
|
SM |
|
SM |
|
SM |
|
SM |
|
|
S3 |
|
S2 |
|
S1 |
|
S0 |
Рис. 1.18. Использование полных сумматоров и инверторов в четырехразрядном вычитателе
Рассмотрим использование сумматоров для выполнения операции двоичного вычитания. На рисунке 1.18 показаны четыре одноразрядных сумматора, объединенные в систему, работающую как четырехразрядный параллельный вычитатель. Четыре инвертора, установленных на входах В3В2В1В0 каждого сумматора, обеспечивают преобразование двоичного числа b3b2b1b0 в форму обратного кода. Они инвертируют значение каждого разряда вычитаемого. Сумматоры складывают двоичные числа a3a2a1a0 и b3b2b1b0. Дополнительный (циклический) перенос осуществляется по шине циклического переноса с выхода переноса сумматора разряда «8» на вход переноса сумматора разряда «1».
Этот способ очень просто реализовать на четырехразрядных двоичных сумматорах. Схема одной декады изображена на рисунке
1.19.
34
Рис. 1.19. Схема преобразователя одной тетрады двоично-десятичного кода в дополнительный к 9
1.4. Матричные умножители (MPL)
Умножение в двоичном коде производится подобно умножению «в столбик» в десятичной системе счисления. При этом потребуется перемножить каждый разряд множимого на соответствующий разряд множителя. Рассмотрим в качестве примера умножение двух четырёхразрядных двоичных чисел. Пусть требуется умножить число
1011(2) = 11(10) на число 1101(2) = 13(10). Мы ожидаем получить в результате умножения число 10001111(2) = 143(10). Выполним
операцию умножения в столбик, как это показано на рисунке 1.20.
|
|
|
× |
1 |
1 |
0 |
1 |
|
|
|
1 |
0 |
1 |
1 |
|
+ |
|
|
|
1 |
1 |
0 |
1 |
|
|
1 |
1 |
0 |
1 |
|
|
+ |
|
|
|
||||
|
0 |
0 |
0 |
0 |
|
|
|
+ |
|
|
|
||||
1 |
1 |
0 |
1 |
|
|
|
|
|
|
|
|
||||
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
Рис.1.20. Выполнение операции умножения «в столбик»
35
Для формирования произведения требуется вычислить четыре частичных произведения. Обратите внимание, что в двоичной арифметике требуется выполнять умножение только на числа 0 и 1. Это означает, что нужно либо суммировать множимое к сумме остальных частичных произведений, либо нет.
Рассмотрим задачу в общем виде. Необходимо выполнить операцию умножения двух четырехразрядных чисел A = a3a2a1a0 и B = b3b2b1b0. На рисунке 1.21 изображена схема алгоритма умножения «в столбик» этих операндов (сомножителей).
|
|
|
|
× |
a3 |
a2 |
a1 |
a0 |
|
|
|
|
b3 |
b2 |
b1 |
b0 |
|
|
|
|
|
|
||||
+ |
|
|
|
|
a3b0 |
a2b0 |
a1b0 |
a0b0 |
|
|
a3b1 |
|
a2b1 |
a1b1 |
a0b1 |
|
|
+ |
|
|
|
|
||||
|
a3b2 |
a2b2 |
|
a1b2 |
a0b2 |
|
|
|
+ |
|
|
|
|
||||
a3b3 |
a2b3 |
a1b3 |
|
a0b3 |
|
|
|
|
|
|
|
|
|
||||
M7 |
M6 |
M5 |
M4 |
|
M3 |
M2 |
M1 |
M0 |
Рис.1.21. Алгоритм умножения «в столбик» двух четырехразрядных чисел
Требуется 16 конъюнкторов Для получения частичных произведений вида aibj (a0b0, a1b0,…, a2b3, a3b3) можно воспользоваться логическими элементами “2И”. Кроме операции умножения на один разряд, требуется осуществлять его сдвиг влево на число разрядов, соответствующее весу разряда множителя. Сдвиг можно осуществить простым соединением соответствующих разрядов частичных произведений к необходимым разрядам двоичного сумматора.
Схема умножителя на одноразрядных сумматорах, приведенная на рисунке 1.22, похожа на алгоритм двоичного умножения.
36
|
|
|
a3b1 |
a3b0 |
a2b0 |
|
a1b0 |
a0b0 |
||
|
|
|
0 |
|
a2b1 |
|
a1b1 |
|
a0b1 |
|
|
|
|
SM a2b2 |
|
a1b2 SM a0b2 |
|
0 |
|
||
|
|
|
SM |
|
||||||
|
a3b2 |
|
SM |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
a2b3 |
SM a1b3 |
|
a0b3 |
|
0 |
|
|
|
a3b3 |
SM |
SM |
|
|
|
|||||
|
SM |
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
0
SM SM SM SM
M7 M6 |
M5 |
M4 |
M3 |
M2 |
M1 |
M0 |
Рис.1.22. Схема умножителя на одноразрядных сумматорах
Для реализации двоичного умножения на интегральных схемах сумматоров достаточно трех четырёхразрядных микросхем. Принципиальная схема умножителя приведена на рисунке 1.23. Формирователи частичных произведений на логических элементах “2И” на схеме не показаны.
a0b0 |
|
a1b0 |
D1 |
A0 SM |
|
a2b0 |
A1 |
a3b0 |
A2 |
0 |
A3 |
a0b1 |
B0 |
a1b1 |
B1 |
a2b1 |
B2 |
a3b1 |
B3 |
|
C0 |
S0
S1
S2
S3
C4
D2
a0b2 a1b2 a2b2 a3b2
A0 SM |
S0 |
A1 |
S1 |
A2 |
S2 |
A3 |
S3 |
B0 |
|
B1 |
|
B2 |
|
B3 |
|
C0 |
C4 |
D3
a0b3 a1b3 a2b3 a3b3
|
|
M0 |
|
|
M1 |
|
|
M2 |
A0 SM S0 |
M3 |
|
A1 |
S1 |
M4 |
A2 |
S2 |
M5 |
A3 |
S3 |
M6 |
B0 |
|
|
B1 |
|
|
B2 |
|
|
B3 |
|
|
C0 |
C4 |
M7 |
Рис.1.23. Схема матричного умножителя 4*4 на четырехразрядных сумматорах
37
Сумматор, выполненный на микросхеме D1, суммирует первое и второе частные произведения. При этом младший разряд первого частного произведения не нуждается в суммировании (см. рис. 1.22). Поэтому он подаётся на выход умножителя непосредственно (разряд M0). Второе частное произведение должно быть сдвинуто на один разряд. Это осуществляется тем, что младший разряд выходного числа сумматора D1 соединяется со вторым разрядом произведения (M1). Но тогда первое частное произведение необходимо сдвинуть на один разряд по отношению ко второму частному произведению! Это выполняется тем, что младший разряд группы входов A соединяется с первым разрядом частного произведения, первый разряд группы входов A соединяется со вторым разрядом частного произведения, и т. д. Однако старший разряд группы входов A не с чем соединять! Вспомним, что если добавить к числу слева ноль, то значение числа не изменится, поэтому мы можем этот разряд соединить с общим проводом схемы.
Точно таким же образом осуществляется суммирование третьего и четвёртого частного произведения. Это суммирование выполняют микросхемы D2 и D3 соответственно. Отличие заключается только в том, что здесь не нужно задумываться о старшем разряде предыдущей суммы, ведь предыдущая микросхема сумматора формирует сигнал переноса.
Проводники, по которым передаются разряды числа A и числа B, образуют матрицу. В точках пересечения этих проводников находятся логические элементы “2И”. Именно по этой причине умножители, реализованные по данной схеме, получили название
матричных перемножителей.
Скорость работы схемы, приведенной на рис. 1.23, определяется максимальным временем распространения сигнала по цепи, включающей в себя конъюнктор “2И” и группу сумматоров в правой диагонали схемы и в нижней горизонтали до выхода старшего разряда произведения M7. Время работы схемы можно сократить, если сумматоры располагать не последовательно друг за другом, как это предполагается алгоритмом, приведенным на рис. 1.23, а суммировать частичные произведения попарно, затем суммировать пары частичных произведений и т. д. В этом случае время выполнения операции умножения значительно сократится. Особенно
38
заметен выигрыш в быстродействии при построении многоразрядных умножителей. Однако, в обмен на быстродействие придётся заплатить увеличением разрядности сумматоров, а значит сложностью схемы. Если сумматоры частных произведений останутся той же разрядности, что и ранее, то разрядность сумматоров пар частичных произведений должна быть увеличена на единицу. Разрядность сумматоров четвёрок частичных произведений будет на два разряда больше разрядности сумматоров частичных произведений и т. д.
a7b0 |
0 a6b0 |
0 a5b0 |
0 a4b0 |
0 a3b0 |
0 a2b0 |
0 a1b0 |
0 a0b0 |
0 |
|
a6b1 |
a5b1 |
a4b1 |
a3b1 |
a2b1 |
a1b1 |
a0b1 |
0 |
a7b1
0
a7b2 |
|
|
|
|
|
|
|
|
a6b2 |
a5b2 |
a4b2 |
a3b2 |
a2b2 |
a1b2 |
a0b2 |
a6b3 |
a5b3 |
a4b3 |
a3b3 |
a2b3 |
a1b3 |
a0b3 |
0 |
a7b3
0
p11 p10 |
p9 |
p8 |
p7 |
p6 |
p5 |
p4 |
p3 |
p2 |
p1 |
p0 |
Рис. 1.24. Схема матричного умножителя 8×4 на множительно-суммирующих блоках 4×2
39
40
Матричные перемножители могут быть просто
множительными блоками (МБ) или множительно-
суммирующими (МСБ), последние обеспечивают удобство наращивания размерности умножителя. МСБ реализует операцию
Р = Аm × Вn + Сm + Dn,
т. е. к произведению m-разрядного множимого am–1…a1a0 и n- разрядного множителя bn–1…b1b0 добавляет два слагаемых: одно разрядности m, совпадающей с разрядностью множимого, другое разрядности n, совпадающей с разрядностью множителя.
Принцип наращивания размерности умножителя иллюстрируется на рисунке 1.24 на примере построения MPL "8 × 4" из малоразрядных множительно-суммирующих блоков МСБ "4 × 2". На поле частичных произведений выделены четыре зоны, воспроизведение которых возможно на блоках размерности 4 × 2. В каждой зоне перемножаются старшие и младшие разряды первого и второго операндов. Перемножение в пределах зон дает частичные
произведения: (a3a2a1a0)(b1b0), (a7a6a5a4)(b1b0), (a3a2a1a0)(b3b2), (a7a6a5a4)(b3b2). На рисунке 1.25 изображена схема множительно-
суммирующего блока с размерностью 4 × 2, реализованная на одноразрядных сумматорах. Для получения конечного значения произведения эти частичные произведения нужно сложить с учетом их взаимного положения (сдвига одного относительно другого).
c3 |
a3b0 |
c2 |
a2b0 |
c1 |
a1b0 |
c0 a0b0 |
|
|
|
|
|
|
d0 |
a3b1 |
a2b1 |
|
a1b1 |
|
a0b1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
d1 |
|
p5 |
p4 |
p3 |
p2 |
p1 |
p0 |
Рис. 1.25. Схема множительно-суммирующего блока 4 × 2