Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

00 Проектирование цифровых устройств

.pdf
Скачиваний:
257
Добавлен:
12.04.2015
Размер:
1.44 Mб
Скачать

31

значение модуля разности. Знак разности устанавливается по результату сравнения операндов во всех декадах вычитателя.

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–1a1a0 и n- разрядного множителя bn–1b1b0 добавляет два слагаемых: одно разрядности 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