Книги / Книга Проектирование ВПОВС (часть 2)
.pdf
|
|
|
p |
|
|
|
|
|
k 1 |
|
|
|
( k 1) |
|
|
|
|
|
Y |
3 |
Y |
|
|
xy |
|
|
2 |
*(1 (1 xy |
|
|
1 |
|
|
|
|||
|
(1 |
|
) |
|
|
) |
2 |
). |
|
(4.31) |
||||||||
|
|
|
|
|
|
|
|
|
||||||||||
p |
0 |
|
|
0 |
|
|
|
|
0 |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
k 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
2 |
p |
||
Погрешность на шаге итерации в этом случае равна |
, т.е. за шаг |
|||||||||||||||||
|
||||||||||||||||||
|
|
|
||||||||||||||||
формируется не |
менее |
2-p |
верных |
разряда. Учитывая, что начальное |
||||||||||||||
приближение обратной величины имеет не менее двух верных разрядов и при числе разрядов группы поля n = 16 формула для определения величины P
|
|
( p 1) |
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
( 2 |
2 |
2 |
). Откуда получаем P + 1 = Y, т.е. P = 3. |
|
|
|
|||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||
|
|
|
При определении следующих групп поля результата достаточно одной |
||||||||||||||||||||||||||||||||||||||||||||
итерации, т.е. P = 1. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
Таким образом, общий алгоритм определения обратной величины имеет |
||||||||||||||||||||||||||||||||||||||||||||
вид |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
Y |
3 |
Y |
(Z |
|
|
Z |
2 |
* (1 Z |
|
2 |
) Z |
|
4 |
(1 Z |
3 |
)); |
|
||||||||||||||||||||||||
|
|
|
|
|
|
|
1 |
|
1 |
1 |
|
1 |
1 |
|
|||||||||||||||||||||||||||||||||
|
|
|
|
|
|
Y |
|
|
i1 |
|
|
|
0 |
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
x |
Y Y |
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
1 |
|
|
|
|
0 |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
Z |
|
|
(1 Z |
|
3 |
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
Y Y |
* |
Y |
* |
X |
|
|
|
; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
1 |
|
|
|
1 |
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, |
(4.32) |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
Y Y |
1) |
* (1 X |
Y |
|
|
|
) |
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||
|
|
|
|
|
|
Y |
|
|
|
i |
|
|
|
|
(i |
|
|
|
|
|
|
|
|
|
|
i |
|
i 1 |
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
* |
|
Y Y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
i 1 |
|
|
|
i |
|
|
Y |
|
i |
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
Y |
|
|
|
|
Y |
* |
|
|
* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
i 1 |
|
|
|
i 1 |
|
|
|
|
|
|
i 1 |
|
|
i 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
i = 2, 3, …., N3 ; N – число групп поля. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||
|
|
|
Здесь использованы следующие обозначения: |
|
|
||||||||||||||||||||||||||||||||||||||||||
|
|
|
Xi – поле содержащее i-групп, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||
|
|
|
Xi = Xi - Xi-1 – последняя i-группа поля Xi, |
|
|
|
|||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
y |
|
|
|
|
|
|
|
|
F(x1 y) y2 x, |
|
||||||||||||||||||||||||||||
|
|
|
Вычисление |
|
|
функции |
|
|
|
|
x . |
Положим |
|
тогда |
|||||||||||||||||||||||||||||||||
F |
' |
(x y) 2 y |
и |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Y |
|
|
1 |
( |
X |
Y ) |
. |
|
|
|
(4.33) |
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i 1 |
|
2 |
|
|
Yi |
|
|
i |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
254 |
|
|
|
|
|
|
|
|
|
|||||
При формировании начального приближения используем 4 старших разряда XM. Соответствующие приближения приведены в табл. 4.6.
Таблица 4.6
|
XМдвоичое |
XМдесятичное |
Y |
X |
0 |
||
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
||
|
0,0000 |
|
0,0000 |
|
0.0001,0.0000; 0.0000 |
||
|
|
|
|
|
|
||
|
1,0001 |
|
1,0625 |
|
0.0001,0.0000; 0.0111 |
||
|
|
|
|
|
|
||
|
1,0010 |
|
1,1250 |
|
0.0001,0.0000; 0.1111 |
||
|
|
|
|
|
|
||
|
1,0011 |
|
1,1875 |
|
0.0001,0.0001; 0.1100 |
||
|
|
|
|
|
|
||
|
1,0100 |
|
1,2500 |
|
0.0001,0.0001; 0.1110 |
||
|
|
|
|
|
|
||
|
1,0101 |
|
1,3125 |
|
0.0001,0.0010; 0.0101 |
||
|
|
|
|
|
|
||
|
1,0110 |
|
1,3750 |
|
0.0001,0.0010; 0.1100 |
||
|
|
|
|
|
|
||
|
1,0111 |
|
1,4375 |
|
0.0001,0.0011; 0.0011 |
||
|
|
|
|
|
|
||
|
1,1000 |
|
1,5000 |
|
0.0001,0.0011; 0.1001 |
||
|
|
|
|
|
|
||
|
1,1001 |
|
1,5625 |
|
0.0001,0.0100; 0.0000 |
||
|
|
|
|
|
|
||
|
1,1010 |
|
1,6250 |
|
0.0001,0.0100; 0.0110 |
||
|
|
|
|
|
|
||
|
1,1011 |
|
1,6875 |
|
0.0001,0.0100; 0.1100 |
||
|
|
|
|
|
|
||
|
1,1100 |
|
1,7500 |
|
0.0001,0.0101; 0.0010 |
||
|
|
|
|
|
|
||
|
1,1101 |
|
1,8125 |
|
0.0001,0.0101; 0.1000 |
||
|
|
|
|
|
|
||
|
1,1110 |
|
1,8750 |
|
0.0001,0.0101; 0.1110 |
||
|
|
|
|
|
|
||
|
1,1111 |
|
1,9375 |
|
0.0001,0.0110; 0.0100 |
||
|
|
|
|
|
|
|
|
Аналогично вычисляется кубический корень и корни более высоких степеней. Вычисление обратной величины корня в некоторых случаях также оказывается полезной.
4.2.2. Вычисление обратной величины квадратного корня
Пусть задана функция |
y |
1 |
|
. |
|
|
|
|
|||
|
|
||||
|
|
|
x |
||
256
не кратное размеру группы. Кроме того, возникает необходимость умножения на числа число разрядов, которых не кратны числу разрядов в группе. Всё это приводит к необходимости разработки специальных операционных узлов для вычислителя функций.
4.3.1. Двоично-кодированные системы
Для эффективной реализации операционных узлов формирования функциональных зависимостей необходимо выбрать систему счисления,
которая позволит вести операции, начиная со старших разрядов, и обеспечит возможность организации параллельных и конвейерных вычислений. Это условие не обеспечивается широко применяемыми в практике цифровой обработки позиционных систем счисления. Опыт применения непозиционных систем счисления, таких как система в остаточных классах [32], знакоразрядная двоично-избыточная система малоэффективны в связи с ограниченными возможностями. Они позволяют эффективно реализовать операции сложения и умножения, а остальные (сравнение, логические операции и ряд других)
приходится проводить на обычных позиционных системах счисления.
Значительное время потребуется на перевод данных из одной системы счисления в другую, что делает их неприемлемыми для нашей цели.
Для организации параллельных систем с произвольной разрядностью двоичная система счисления (ДСС) оказывается малоэффективной из-за сложности организации параллельного сумматора высокой или переменной разрядности. При увеличении разрядности обрабатываемых чисел существенно возрастает сложность системы ускорения переноса, а в случае динамически изменяемой разрядности (переменной разрядности) известные методы ускорения переноса не работают. Для параллельных систем с изменяемой разрядностью наиболее эффективны системы счисления, непосредственно связанные с двоичными системами. Это системы с запоминанием переноса и системы с опережением переноса [29]. Система с запоминанием переноса предполагает наличие двухрядного кода. Сохранение двухрядного кода в
258
системе увеличивает объем оперативной памяти (в 2 раза), так как необходимо хранить данные в двухрядном коде (перенос и сумма по модулю 2). В системе с запоминанием переноса операция умножения потребует для каждого кода одного числа наличие двух устройств умножения. Кроме того, для выполнения логических операций необходимо преобразование двухрядного кода в двоичный код. Все это усложняет построение операционных узлов, в связи, с
чем код с запоминанием переноса применяется в узкоспециализированных устройствах, например в умножителях при суммировании частичных произведений. В отличие от кода с запоминанием переноса, код с опережением переноса свободен от вышеуказанных недостатков, сохраняет все положительные свойства двоичной системы и позволяет вести операции начиная со старших разрядов чисел, исключая ожидание пробега переноса от младших разрядов к старшим.
4.3.2. Организация представления данных и выполнение основных операций в коде «опережающий перенос»
Система с опережением переноса [7] строится следующим образом.
Исходное число разрядностью 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.
Эти дополнительные разряды служат для того, чтобы перенос не пробегал через все поле от точки возникновения до начала числа.
Таким образом, для организации числа в коде опережающий перенос достаточно разбить число на группы и ввести в каждую группу дополнительный разряд. Число значащих разрядов в каждой группе одинаково.
Если количество разрядов в исходном числе не кратно группе, то для дробных чисел младшая группа дополняется до полной нулями, а для целых
259
чисел старшие разряды дополняются до полной группы размножением знакового разряда.
4.3.2.1. Организация основных операций в коде «опережающий перенос»
При выполнении операции суммирования [7] операция в каждой группе выполняется независимо. Чтобы исключить пробег переноса, в каждой группе добавляется дополнительный разряд. При выполнении операции алгебраического сложения в младший разряд старшей группы прибавляется 1 (предваряя перенос из младшей группы), чтобы операция в целом выполнялась правильно, в дополнительный разряд младшей группы прибавляется 1 со знаком минус и тем же весом, что и перенос в старшую группу. Тогда при возникновении переноса из младшей группе минус единица в ее дополнительном разряде уничтожается, а при его отсутствии сохраняется.
В связи с тем, что после суммирования значение дополнительных разрядов возрастает в пределе до (–3), то после каждого суммирования требуется коррекция результата. Коррекция выполняется вычитанием значения дополнительного разряда младшей группы из ближайшей старшей группы, т.е.
на суммирование поля отводится два такта. На первом такте формируется промежуточная сумма, на втором – за счёт коррекции определяется окончательный результат в коде "опережающий перенос". При этом вычитание заменяется сложением с дополнением дополнительного разряда.
Операция вычитания [7] заменяется операцией сложения с дополнительным кодом вычитаемого. Для получения дополнительного кода поля, состоящего из n-групп, необходимо сформировать дополнительный код каждой группы, и их совокупность есть искомый дополнительный код поля.
При формировании дополнения группы, дополнительный разряд рассматривается как знаковый. Каждая группа рассматривается как отдельное число, и формируется дополнительный код каждой группы по правилам формирования дополнительного кода двоичного числа. Дополнительный разряд рассматривается как знаковый.
260


, то условно можно считать, что