WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 |   ...   | 9 | 10 || 12 | 13 |

0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 1 СЧТ1:=СЧТ1 – 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 2 +Рсложение мл. тет 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 1 рад 0 1 1 0 0 0 0 0 0 0 1 0 0 1 0 1 1 2 коррекция + 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 2 результат сложение ст. тет0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 рад 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 2 коррекция +результат;

0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 СЧТ1:=СЧТ1 – AR((РСМ,Р2),1тет);

0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 СЧТ:=СЧТ – 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 2 1 СЧТ1:=0 0 0 0 0 0 1 0 0 1 0 0 0 2 1 +Рсложение мл. тет 0 0 1 1 0 0 2 рад сложение ст. тет0 0 0 0 0 0 1 1 0 2 рад результат;

0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 СЧТ1:=СЧТ1 – 0 0 0 0 0 0 1 0 0 1 0 0 1 1 +Рсложение мл. тет 0 1 0 1 0 1 рад 0 1 1 0 1 1 коррекция + 1 0 0 0 0 1 1 результат сложение ст. тет 0 0 1 1 0 1 рад;

результат;

0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 СЧТ1:=СЧТ1 – AR((РСМ,Р2),1тет);

0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 СЧТ:=СЧТ – AR((РСМ,Р2),1тет);

0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 n+1 сдвиг результат умноже0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 ния, равный 600(10) Второй алгоритм умножения позволяет существенно сократить количество операций сложения по сравнению с первым. В его основу положено разложение множителя по степеням двойки, т.е. на 1-, 2-, 4-, 8-кратные составляющие. Таким образом, множитель Y представляется в следующем виде:

Y8421=8*z1+4*z2+2*z3+z4=2*(2*(2*z1+z2)+z3)+z4, где zi – значение, полученное объединением битов одинакового веса каждой из тетрад, начиная со старшей.

Например, Y=3872(10), тогда [Y]8421=0011100001110010.

Тетрады Старшая 0 0 1 1 0 0 0 1 1 Младшая 0 0 1 Получаем сомножители, взяв биты одинакового веса каждой из тетрад сверху вниз z1=0100 z2=0010 z3=1011 z4=Алгоритм умножения состоит из следующих шагов:

1. Множимое умножается на z1. Результат сдвигается влево на 1 бит.

2. Множимое умножается на z2. Результат сдвигается влево на 1 бит.

3. Множимое умножается на z3. Результат сдвигается влево на 1 бит.

4. Множимое умножается на z4.

Следует отметить, что для реализации такого алгоритма требуется 2*n-разрядный сумматор, где n – разрядность процессора, что можно отнести к его недостатку. Рассмотрим пример выполнения такого алгоритма.

Умножить X на Y в процессоре, работающем в формате целых чисел со знаком в коде 8421 (под знак отводится одна тетрада, а под разряды – две тетрады).

X=24(10); [X8421]1=000100100;

Р1=000000100100;

Y=25(10); [Y8421]1=0000100101;

Р2=000000100101;

z1=00;

z2=01;

z3=10;

z4=01.

РСМ Комментарий Знак Тетрада 4 Тетрада 3 Тетрада 2 Тетрада * * * * * * * * * * * * * * * * * * * * 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 РСМ:=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 умножение на z1= 0 0 0 0 0 0 0 0 * на старший 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 сложение 0 0 0 0 0 0 0 0 * на младший 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 сложение 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 AL(РСМ, 1) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 умножение на z2= 0 0 0 0 0 0 0 0 * на старший 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 сложение 0 0 1 0 0 1 0 0 * на младший 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 сложение 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 AL(РСМ, 1) 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 умножение на z3= 0 0 1 0 0 1 0 0 * на старший 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 сложение 0 0 0 0 0 0 0 0 * на младший 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 сложение 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 AL(РСМ, 1) 0 1 1 0 в тетраде коррекция +110(2), так как при сдвиге был перенос из этой тетрады 0 1 1 0 результат коррекции 0 1 1 0 в тетраде коррекция +110(2), так как при сдвиге был перенос из этой тетрады 0 1 1 1 результат коррекции 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 результат умножения на z0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 умножение на z4= 0 0 0 0 0 0 0 0 * на старший 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 сложение 0 0 1 0 0 1 0 0 * на младший 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 1 0 1 0 сложение 0 1 1 0 в тетраде коррекция +110(2), так как ее значение 1001(2) 1 0 0 0 0 результат коррекции 1 0 1 0 добавление в тетраду 0 1 1 0 в тетраде коррекция +110(2), так как ее значение 1001(2) 1 0 0 0 0 результат коррекции 0 0 1 1 0 добавление в тетраду 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 результат умножения на zВ РСМ результат умножения, равный 600(10) 4.12. Алгоритм деления чисел в BCD-кодах Деление операндов в BCD-кодах выполняется по алгоритму, аналогичному алгоритму деления двоичных операндов с восстановлением остатка. Отличие состоит в том, что в BCD-коде очередная цифра частного может принимать значение от 0 до 9. Эта цифра частного получается следующим образом. На первом шаге алгоритма из делимого (на следующих шагах из остатка) вычитается делитель. Если полученный остаток положительный или равен 0, то к очередной получаемой цифре частного (ее начальное значение равно 0) прибавляется 1. Вычитание делителя в цикле выполняется до тех пор, пока остаток от вычитания не станет отрицательным. В этом случае значение цифры частного не увеличивается, а остаток восстанавливается путем добавления делителя. Все вышеперечисленное повторяется количество раз, равное разрядности регистра частного. Результатом деления будет частное в Р2 и остаток в РСМ. Рассмотрим пример выполнения такого алгоритма.

Разделить X на Y в процессоре, работающем в формате целых чисел со знаком в коде 8421 (под знак отводится одна тетрада, а под разряды – две тетрады).

X=625(10); [X8421]2=011000100101;

РСМ=00000000011000100101;

Y=25(10); [Y8421]2=000000100101;

–Y= –25(10); [–Y8421]2=111101110101;

Р1=000000100101;

– Р1=111101110101.

РСМ РСЧТ Комментарий Знак Тетрада 2 Тетрада 1 Тетрада 2 Тетрада * * * * * * * * * * * * * * * * * * * * 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 2 (РСМ,Р2):=Х; СЧТ:=1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 1 0 1 2 –Р1; пробное вычитание 0 1 0 1 1 0 0 1 0 0 1 0 1 2 вычитание в тетраде 0 1 1 0 0 0 1 0 0 1 0 1 2 коррекция +110(2) 1 0 0 0 1 0 0 1 0 0 1 0 1 2 результат коррекции 1 1 1 1 1 0 0 0 0 0 0 1 0 0 1 0 0 1 0 1 2 вычитание в тетраде результат пробного вычитания; так как 1 1 1 1 1 0 0 0 0 0 0 1 0 0 1 0 0 1 0 1 остаток 0, деление состоится +Р1; восстановление 0 0 0 0 0 0 1 0 0 1 0 1 отрицательного остатка 1 1 1 1 1 0 1 0 0 1 1 0 0 0 1 0 0 1 0 1 2 результат сложения 0 1 1 0 2 коррекция +110(2) 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 1 2 результат коррекции 1 1 1 1 0 1 1 1 0 1 0 1 2 –Р 0 0 1 1 1 0 1 0 1 0 0 0 0 2 вычитание в тетраде 0 1 1 0 1 0 1 0 1 0 0 0 0 2 вычитание в тетраде 0 1 1 0 0 1 0 1 0 0 0 0 2 коррекция +110(2) 0 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 2 результат коррекции 2 результат вычитания 0, поэтому к циф0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 0 0 0 ре частного Р2 (тетрада 1) прибавляется 1 1 1 1 0 1 1 1 0 1 0 1 2 –Р 1 1 0 0 2 вычитание в тетраде 0 1 1 0 2 коррекция +110(2) 0 0 1 0 2 результат коррекции 0 1 0 1 1 2 вычитание в тетраде 0 1 1 0 2 коррекция +110(2) 0 0 0 0 0 0 0 1 2 результат коррекции 2 результат вычитания 0, поэтому к циф0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 ре частного Р2 (тетрада 1) прибавляется 1 1 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 0 1 0 2 – Р 0 0 1 1 1 0 1 0 1 0 0 1 0 2 вычитание в тетраде 0 1 0 0 0 0 1 0 1 0 0 1 0 2 вычитание в тетраде результат вычитания <0, поэтому цифра 1 1 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 частного не увеличивается 2 +Р1; восстановление 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 1 0 0 1 отрицательного остатка 0 1 1 0 0 0 1 0 1 0 0 1 0 2 вычитание в тетраде 0 1 1 0 0 1 0 1 0 0 1 0 2 коррекция +110(2) 1 0 0 1 0 0 1 0 1 0 0 1 0 2 результат коррекции 1 0 1 1 0 1 0 1 0 0 1 0 2 вычитание в тетраде 0 1 1 0 0 1 0 1 0 0 1 0 2 коррекция +110(2) 1 0 0 0 1 0 1 0 1 0 0 1 0 2 результат коррекции 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 2 результат вычитания 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 СЧТ:=СЧТ – 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1 AL((РСМ,Р2),1тетраду);

1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 0 0 0 1 –Р 0 1 0 1 0 0 0 1 0 0 0 0 0 1 вычитание в тетраде 0 1 1 0 0 0 1 0 0 0 0 0 1 коррекция +110(2) 1 0 0 0 0 0 0 1 0 0 0 0 0 1 результат коррекции 0 1 0 1 0 0 0 1 0 0 0 0 0 1 вычитание в тетраде 0 1 1 0 0 0 1 0 0 0 0 0 1 коррекция +110(2) 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 результат коррекции 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 результат вычитания 1 результат вычитания 0, поэтому к циф0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ре частного Р2 (тетрада 1) прибавляется 1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 0 0 1 1 –Р 0 1 0 1 0 0 1 0 0 0 0 1 1 вычитание в тетраде 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 1 1 вычитание в тетраде 0 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 0 0 0 1 1 результат вычитания результат вычитания 0, поэтому к циф0 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 0 0 1 0 ре частного Р2 (тетрада 1) прибавляется 1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 0 1 0 1 –Р 0 1 0 1 0 0 0 1 0 0 0 1 0 1 вычитание в тетраде 0 1 1 0 0 0 1 0 0 0 1 0 1 коррекция +110(2) 1 0 0 0 0 0 0 1 0 0 0 1 0 1 результат коррекции 1 1 1 1 0 0 1 0 0 0 1 0 1 вычитание в тетраде 0 1 1 0 0 0 1 0 0 0 1 0 1 коррекция +110(2) 0 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 результат коррекции 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 1 0 1 результат вычитания результат вычитания 0, поэтому к циф0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 1 1 ре частного Р2 (тетрада 1) прибавляется 1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 0 1 1 1 –Р 0 1 0 1 0 0 1 0 0 0 1 1 1 вычитание в тетраде 0 1 1 0 0 0 0 1 0 0 0 1 1 1 вычитание в тетраде 0 1 1 0 0 0 1 0 0 0 1 1 1 коррекция +110(2) 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 1 результат коррекции 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 1 1 1 результат вычитания результат вычитания 0, поэтому к циф0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 ре частного Р2 (тетрада 1) прибавляется 1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 1 0 0 1 –Р 0 1 0 1 0 0 0 1 0 0 1 0 0 1 вычитание в тетраде 0 1 1 0 0 0 1 0 0 1 0 0 1 коррекция +110(2) 1 0 0 0 0 0 0 1 0 0 1 0 0 1 результат корреции 1 0 1 0 0 0 1 0 0 1 0 0 1 вычитание в тетраде 0 1 1 0 0 0 1 0 0 1 0 0 1 коррекция +110(2) 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 результат корреции 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 результат вычитания результат вычитания 0, поэтому к циф0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 ре частного Р2 (тетрада 1) прибавляется 1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 1 0 0 1 –Р 0 0 1 0 1 0 0 1 0 0 1 0 0 1 вычитание в тетраде 0 0 1 1 1 0 0 1 0 0 1 0 0 1 вычитание в тетраде 1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 1 0 0 1 результат вычитания результат вычитания <0, поэтому цифра 1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 1 0 0 частного не увеличивается +Р1; восстановление 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 отрицательного остатка 0 1 0 1 0 0 0 1 0 0 1 0 0 1 вычитание в тетраде 0 1 1 0 0 0 1 0 0 1 0 0 1 коррекция +110(2) 1 0 0 0 0 0 0 1 0 0 1 0 0 1 результат коррекции 1 0 1 0 0 0 1 0 0 1 0 0 1 вычитание в тетраде 0 1 1 0 0 0 1 0 0 1 0 0 1 коррекция +110(2) 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 результат коррекции 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 результат сложения 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 СЧТ:=СЧТ – Так как СЧТ равен 0, деление завершено. В Р2 частное, равное 25(10), а в РСМ остаток равен 0. Результат верен.

5. Контроль выполнения арифметических операций Цифровые процессоры используются и в таких областях применения, где ошибки в работе должны быть исключены, в том числе и при выполнении арифметических операций. К этим областям относятся управление космическими объектами, управление ядерными реакторами, управление военными объектами. Чтобы полностью исключить ошибку, при вычислениях используется метод «дублирования», который состоит в том, что цифровое устройство повторяется (дублируется) с кратностью 3, 5 и т.д. Любая операция выполняется одновременно на всех устройствах. Полученные результаты от каждого из устройств сравниваются между собой. Если они все совпали, ошибки нет. Если не совпали, то, например для трехкратного дублирования, возможны два случая:

- результаты от двух устройств одинаковы, и тогда этот результат принимается за правильный (так называемый мажоритарный выбор);

- результаты от всех трех устройств разные, результат неверный и вычисление выполняется заново.

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

Рассмотрим такой метод, который получил наибольшее распространение. Это метод контроля по модулю, основанный на следующих положениях теории чисел.

Если задан модуль q, то для любого числа N существует соотношение NRN(mod q).

Данное выражение читается как «число N сравнимо с RN по модулю q», где RN – наименьший вычет числа N по модулю q, или другими словами, наименьший остаток от целочисленного деления N на q.

Тогда N=p*q+ RN, где р – частное от целочисленного деления N на q.

RN используется в качестве контрольного кода в методе контроля по модулю. Рассмотрим пример получения вычета от числа N=13(10) по модулю q=3. Целочисленное деление дает p=4; RN=1.

Тогда можно записать 131(mod3).

Из теории чисел известно, что два числа – N1 и N2 – сравнимы по модулю q, если равны их вычеты по этому модулю:

N1N2(modq), если RN1=RN2.

При выполнении контроля арифметических операций по модулю q исходное число N представляют в цифровом процессоре, состоящем из двух частей: самого числа и его вычета по модулю q.

число N <операнд> <вычет по модулю q m разрядов процессора k разрядов процессора (m+k)-разрядный процессор Для эффективного контроля должно соблюдаться условие k<

Принципы контроля выполнения арифметических операций основаны на следующих свойствах вычетов:

- для сложения N1+N2=N3 выполняется условие RN1+RN2=RN3;

- для вычитания N1–N2=N3 выполняется условие RN1–RN2=RN3;

- для умножения N1*N2=N3 выполняется условие RN1*RN2=RN3;

- для деления N1/N2=N3(N4) выполняется условие RN1=RN2*RN3+RN4.

Функциональная схема контроля операции сложения по модулю приведена на рис. 5.1.

5.1. Выбор значения модуля и вычисление вычета От выбранного значения модуля q зависят:

- контролирующая способность контрольного кода;

- сложность контрольного оборудования.

С ростом модуля q увеличивается контролирующая способность кода, но увеличиваются и затраты на контрольное оборудование. Исследования показали, что наилучшим вариантом выбора модуля q будет выбор значения q из числового ряда, определяемого выражением 2k – 1, где (k = 2, 3, 4, 5 …), т.е. 3, 7, 15, 31… Рис. 5.1. Функциональная схема ОА с контролем операции сложения по модулю При таком выборе модуля q вычет от операнда получается суммированием по модулю q разрядов исходного числа, группируемых по k разрядов. Для целого числа группировка выполняется справа налево, а для дробного числа слева направо. То, что вычет можно получить суммированием («короткой операцией»), а не делением («длинной операцией»), существенно сказывается на скорости операции контроля. Рассмотрим пример получения вычета числа N=185(10) в восьмиразрядном процессоре Пример 1. N=185(10)=10111001(2).

Получим вычет по модулю 7=(23 – 1), для чего операнд разобьем на триады справа налево, а затем суммируем триады, начиная с младшей по модулю 7.

Разбиваем: (10)(111)(001). Суммируем:

Триада Комментарий 0 0 1 младшая 1 1 1 средняя 0 0 1 результат сложения по модулю 0 1 0 старшая 0 1 1 сложение по модулю 7; конечный результат Получен вычет, равный Действительно, наименьший остаток от целочисленного деления 185(10) на 7 равен 3.

Пример 2. Получим вычет того же операнда, но по модулю 3=(22–1), для чего операнд разбивается по два разряда справа налево, а затем они суммируются по модулю 3.

Разбиваем: (10)(11)(10)(01). Суммируем:

Два разряда Комментарий 0 1 младшая (первая) 1 0 вторая 0 0 результат сложения по модулю 3;

1 1 третья 1 1 сложение по модулю 3;

1 0 четвертая 1 0 сложение по модулю 3; конечный результат Получен вычет, равный Действительно, наименьший остаток от целочисленного деления 185(10) на 3 равен 2.

Рассмотрим выполнение контроля операции сложения на примере сложения операндов в восьмиразрядном процессоре:

N3=N1+N2;

N1=53(8)=00101011(2);

N2=61(8)=00110001(2).

Пример 1. Контроль осуществим по модулю 7. Вычисление вычетов операндов дает следующий результат:

RN1=1;

RN2=0.

Pages:     | 1 |   ...   | 9 | 10 || 12 | 13 |






















© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.