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

Книги / Книга Проектирование ВПОВС (часть 2)

.pdf
Скачиваний:
84
Добавлен:
01.06.2015
Размер:
4.62 Mб
Скачать

Для упрощения будем полагать, что группа содержит полноразрядные

сумматоры, тогда схема сумматора будет иметь вид (рис. 2.40).

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

S

П

S

П

S

П

S

П

S

П

 

 

4n

 

4n-1

 

4n-2

 

42

 

41

 

 

 

 

 

 

 

 

 

 

 

 

S

П

S

П

S

П

S

П

S

П

 

 

 

 

 

 

 

 

 

 

 

Gi

 

 

 

 

 

 

 

 

 

П

S

Двухрядный код

“a”

 

 

 

 

“б”

Рис. 2.40

 

Время суммирования в таком сумматоре равно задержке сигнала на 1 и 2

слоях, т.е. tc 2 .

 

 

 

 

 

На втором слое число групп равно

m

 

 

n

, а каждая группа складывает 4

2

8

 

 

 

 

 

 

 

операнда и так до тех пор пока на выходе остается 6 операндов. Они суммируются на 6-входовом двухрядном сумматоре, содержащем 3 слоя двухрядных сумматоров. В конце полученный двухрядный код преобразуется в однорядный на обычном сумматоре с переносами.

Таким образом, общее время умножения равно

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

T

n

 

 

log

 

n

 

1 3

 

 

 

 

 

 

 

 

2

 

 

.

 

 

 

2

 

 

 

 

 

 

При больших n получаем достаточно большой выигрыш. Например, для n = 64 имеем T 64 7 71 , т.е. почти в два раза.

Схема такого умножителя показана на рис. 2.41.

111

 

G

1

G

1

 

 

 

 

 

G

1

 

 

 

 

 

 

 

 

 

 

 

 

1

2

 

 

 

 

 

16

П

 

S

П

 

 

S

 

 

 

П

 

 

S

 

G

1

G

1

 

 

 

 

 

G

1

 

 

 

 

 

 

 

 

 

 

 

1

2

 

 

 

 

 

 

8

П

 

S

П

 

 

S

 

 

 

П

 

 

S

 

G1

G1

 

G1

 

 

G1

 

1

2

 

 

3

 

 

 

 

4

П

 

S

П

 

 

S

П

 

S

П

 

 

S

 

 

 

G

1

 

G

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

2

 

 

 

 

 

 

 

 

П

 

 

S

П

 

S

 

 

 

 

6 входовой

 

 

 

 

 

 

 

 

 

 

 

сумматор

 

 

 

 

 

 

 

 

 

 

 

 

двух рядный сумматор

двух рядный сумматор

 

 

П

S

 

 

 

 

 

П

S

 

 

 

 

 

двух рядный сумматор

 

 

 

 

 

 

 

 

 

П

 

 

S

 

 

 

 

 

 

 

 

 

 

двух рядный сумматор

 

 

 

 

 

 

 

 

 

 

П

S

 

 

 

 

 

 

 

 

 

обычный двоичный

 

 

 

 

 

 

 

 

 

 

 

сумматор

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис.2.41

 

 

 

 

 

 

 

 

 

 

 

 

 

112

 

 

 

 

 

 

 

Таблица. 2.1

N

Наименование метода

1Поразрядное умножение на параллельном сумматоре Поразрядное умножение на

2двухрядном сумматоре (сумматор с запоминанием переноса)

3Умножение с суммированием на разрядных счетчиках Умножение с суммированием на

4многовходовом m пирамидальном сумматоре

5Умножение с суммированием на матрице сумматоров

6Умножение с суммированием на матрице двухрядных сумматоров Умножение с суммированием на

7многовходовом двурядном сумматоре Умножение с суммированием на

8пирамидальном двухрядном сумматоре

Выражение для определения времени умножения (Т)

T = n2

T = (2n-1) + зап

T = (n+]log2N[)

T

n

 

n m 1

 

 

 

m

T = (3n-1)

T = 2n

 

 

n

 

 

T m 2

n m 1

 

m

 

 

 

 

1

log2

 

 

 

T n

 

n

4

 

 

2

 

 

 

 

При таком построении последовательного вычислителя можно достичь

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

резко возрастает. Вероятность получения при тех же затратах лучших

результатов возрастает, если воспользоваться параллельными системами на

основе специальных кодов, которые будут рассмотрены далее.

113

ГЛАВА 3. ОПЕРАЦИОННЫЕ УСТРОЙСТВА С ПЕРЕМЕННОЙ

РАЗРЯДНОСТЬЮ

3.1. Код опережающий

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

Для параллельных систем с изменяемой разрядностью наиболее эффективны системы счисления, непосредственно связанные с двоичными системами. Самая известная – это система с запоминанием переноса. Однако данная система имеет существенные недостатки. Во-первых, её использование приводит к существенному увеличению оборудования при реализации операционных узлов. Во-вторых, в данной системе невозможно реализовать логические операции типа больше меньше. Всё это делает систему мало пригодной для решения поставленной задачи.

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

кодированных кода: «опережающий перенос», предложенный в работе [**] и двоично-избыточный знакоразрядный код [**].

________________

[**] – В. Е. Золотовский Организация вычислений с произвольной разрядностью для решения краевых задач для интегрально-дифференциальных уравнений теории переноса. – Киев: Наукова думка, 1989. – №2 – С. 12 – 17.

114

Система с опережением переноса строится следующим образом.

Исходное число разрядностью n разбивается на группы разрядностью m (m<<n), число групп равно l = n / m ( n = l * m ). Если l не целое, то справа или слева в зависимости от формы представления (дробное или целое) добавляются нули. Каждая группа снабжается дополнительным разрядом. Тогда число

Х= 0.11.01.11.01.01 (n = 10, m = 4) представляется в виде

Х= 0 . 1101 . 0 . 1101 . 0 . 0100.

Эти дополнительные разряды служат для того, чтобы перенос не пробегал через все поле от точки возникновения до начала числа.

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

Если количество разрядов в исходном числе не кратно группе, то для дробных чисел младшая группа дополняется до полной нулями, а для целых чисел старшие разряды дополняются до полной группы размножением знакового разряда.

3.2.Выполнение арифметических операций в коде опережающий перенос

3.2.1.Выполнение операции суммирования

Рассмотрим, как будет выполняться операция сложения в данной

системе.

Пусть даны два числа Х и Y:

Х = 0 . 1101

0 . 1101

0 . 0100,

Y = 0 . 0000

0 . 1110

0 . 1001.

При выполнении операции суммирования операция в каждой группе

выполняется независимо. Чтобы исключить пробег переноса, в каждой группе добавляется дополнительный разряд. При выполнении операции алгебраического сложения в младший разряд старшей группы прибавляется 1 (предваряя перенос из младшей группы), чтобы операция в целом выполнялась правильно, в дополнительный разряд младшей группы прибавляется 1 со

115

знаком минус и тем же весом, что и перенос в старшую группу. Тогда при

возникновении переноса из младшей группе минус единица в ее

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

Таким образом, сложение происходит следующим образом:

+1 -1 +1

Х = 0.1101

0.1101

Y = 0.0001

0.1110

Z = 0.1110

0.1100

-1

0.0100,

0.1001,

1

.1101.

Теперь мы видим, что исходные числа могут содержать в

дополнительном разряде либо 0, либо -1, и при сложении могут встретиться

следующие случаи, которые приведены в таблице.

В таблице X, Y – Разряды групп, Z – отрицательная единица компенси-

рующая опережающий перенос и П – положительная единица перенос из

группы.

Доп. разряд

 

 

Число в

X

Y

Z

П

дополнительном

 

 

разряде

 

 

 

 

0

0

1

0

-1

1

0

1

0

-2

0

1

1

0

-2

1

1

1

0

-3

0

0

1

1

0

1

0

1

1

-1

0

1

1

1

-1

1

1

1

1

-2

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

разрядов возрастает в пределе до (-3), то после каждого суммирования

требуется коррекция результата. Коррекция выполняется вычитанием значения

дополнительного разряда младшей группы из ближайшей старшей группы, т.е.

на суммирование поля отводится два такта. На первом такте формируется

промежуточная сумма, на втором – за счёт коррекции определяется

окончательный результат в коде "опережающий перенос". При этом вычитание

заменяется сложением с дополнением дополнительного разряда, как это

116

показано ниже. Здесь в первой строке показаны две группы старшая и младшая.

Во второй строке старшая группа во время коррекции (дополнительный разряд обнуляется). В третьей строке значение коррекции здесь 1.11. 101 –

дополнительный код (-3).

 

 

 

 

 

 

* . ** .... ***

(-3), **...

 

 

 

 

 

 

 

0 . ** .... ***

 

 

 

 

 

 

 

 

 

1 . 11 .... 101

 

 

 

 

 

 

 

 

 

0/1. ** ... ***

 

 

 

 

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

 

Пример 3.1. Выполнение операции сложения в коде «опережающий

перенос»

 

 

 

 

 

 

 

 

 

 

0 . 1100

1

. 1110

1

. 0001

 

 

 

 

 

0 . 0001

1

. 0001

1

. 0010

 

 

 

 

 

0 . 1110 -2 . 0000 -3 . 0011

 

 

 

 

Коррекция вспомогательных разрядов

Сложение в двоичном коде

 

 

0 . 1110

0 . 0000 0 . 0011

0 . 101111010001

 

+

1 . 1110

1 . 1101

 

 

+ 0 . 000000000010

 

 

 

 

 

 

 

 

 

 

 

 

 

0 . 1100

1

. 1101

0 . 0011

0 . 101111010011

 

Преобразуя результат из кода «опережающий перенос» в двоичный код,

получим 0 . 101111010011. Как видим, результаты совпадают.

3.2.2. Выполнение операции вычитания

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

Дополнительный код в коде «опережающий перенос» формируется следующим образом. Пусть заданно число в коде «опережающий перенос»

X = [d], x x x, [d], x x x,…….[d], x x x.

Сформировать дополнение числа X это равносильно присвоения ему знака минуса, т. е.

Доп [ X] = – X = – ([d], x x x, [d], x x x,……. [d], x x x).

117

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

Таким образом,

Доп [x] = – X =

n

2

 

 

xi

r

 

 

i

i 0

 

 

 

n

2

r i

= Допxi

 

i 0

 

 

,

где xi i группа исходного числа.

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

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

рассматривается как знаковый.

Рассмотрим выполнение операции вычитания на примере.

Пример 3.2.

Пусть даны два числа Х и Y:

Х = 0 . 1101

0 . 1101

0 . 0100,

Y = 0 . 0001

0 . 1110

0 . 1001.

Возьмем дополнительный код второго числа:

Хдоп = 0 . 1101

0 . 1101

0. 0100,

Yдоп = 1 . 1111

1 . 0010

1 . 0111.

Далее выполним операции суммирования дополнительных кодов Хдоп +Yдоп .

Первый этап

 

 

1

-1

1

-1

0. 1101

0. 1101

0. 0100

1 . 1111 1 . 0010 1 . 0111

0. 1101 1 . 0000 -2. 1011

Второй этап – коррекция

0. 1101 0. 0000 0. 1011

118

1. 1111

1. 1110

0. 0000

1. 1100

1. 1110

0. 1011

Хдоп +Yдоп .= 1.

1100 1. 1110 0. 1011.

Преобразуем в двоичный код

Хдоп +Yдоп .= 1.

101111101011.

Для контроля

возьмем дополнительный код второго числа и

осуществим суммирование:

Хдоп = 0. 110111010100; Yдоп = 1. 111000010111;

Хдоп +Yдоп = 0. 101111101011;

Как видим, результаты совпадают.

Пример 3.3. Пусть заданны:

x = 0.1010 1.0101 1.0111 – уменьшаемое и y = 0.1001 0.1101 1.1011 – вычитаемое.

Необходимо найти z = x – y.

Найдем дополнение вычитаемого:

Доп y = 1.0111 1.0011 0.0101.

Для получения проведем суммирование уменьшаемого с дополнением

вычитаемого.

1 этап

0.1010

1.0101

1.0111

+

1.0011

0.0101

1.0111

0.0010 -3.1001 -2.1100

2 этап коррекция

0.0010

0.1001

0.1100

+1.1101 1.1110

1.1111 0.0111 0.1100

Результат в двоичном коде zДОП = 1.1111 0111 1100.

Для сравнения приведём x и y двоичный код: x = 0.1001 0100 0111,

119

y = 0.1001 1100 1011.

Выполним вычитание в двоичном коде:

-x = 0.1001 0100 0111 y = 0.1001 1100 1011

z = -0.0000 1000 0100

Результат zДОП = 1.1111 0111 1100.

Как видим, и здесь результаты совпадают.

3.2.3. Параллельный перенос в системах с произвольной разрядностью

Для снижения времени суммирования в сумматоре сокращается время пробега переноса, т.е. строится параллельный перенос. С этой целью, как уже было сказано выше, отдельные разряды слагаемых объединяются в произвольные группы. В случае кода «опережающий перенос» все разряды исходного числа разбиваются на группы. Разрядность группы выбирается произвольно. Однако для систем разрядность групп выбирается равной четырем или восеми бит плюс дополнительный бит. Большее число бит усложняет аппаратную реализацию. Рассмотрим построение сумматора для 4-

битовой группы (рис. 3.1).

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

120