3.2.5.3
Умножение с
два разряда
едновременно
(с младшите
разряди
напред)
Multiplication with two bits at
the same time (with the juniors ahead)
До
идеята за
умножение с
повече от
един разряд
от множителя
едновременно
се стига твърде
лесно.
Интерпретирайки
групата от
цифри на
множителя
като цяло
число, с
което трябва
да се формира
всяко
поразрядно
произведение,
се
предполага, че
броят на
тактовете,
необходими
за получаване
на
произведението,
ще намалее
няколкократно
(пропорционално
на дължината
на групата) в
сравнение с
тези при
последователно
умножение цифра
по цифра. В
този смисъл
предварително
е ясно, че
такова
умножение ще
повиши значително
бързодействието
на
операцията.
Тъй като това
повишение е
отнапред
гарантирано,
т.е. то е
абсолютно,
алгоритмите
за умножение
с два и
повече
разряда
едновременно
се отнасят
към групата
на апаратните
методи за
ускоряване
на операция
умножение.
Тук ще
бъде
разгледан
алгоритъм,
който се основава
на метода за
умножение с
младшите разряди
напред по
схемата с
неподвижно множимо.
За формиране
на
поразрядните
произведения
ще бъдат
анализирани едновременно
две цифри на
множителя - yi+1 и yi.
Възможните
комбинации
от тези две
цифри са
следните - 00,
01, 10 и 11,
и те имат
съответно
еквивалентните
десетични
стойности 0, 1, 2 и 3. Да се
умножава
множимото с
двойката
цифри на
множителя
практически
означава, че
е необходимо
да се
формират
следните
поразрядни
произведения:
X.0=0, X.1=X,
X.2=2X и X.3=3X.
Очевидно е, че първите две поразрядни произведения (0 и X) могат да се получат лесно без фактическо умножение, т.е. да бъдат съобразени.
Третото - X.2,
може да бъде
получено
също лесно
чрез изместване
на множимото X
наляво на
един разряд
(на един бит).
Четвъртото
поразрядно
произведение
X.3
обаче не може
да се получи
елементарно
в рамките на
един такт, т.е.
чрез
еднотактна
микрооперация.
Ето защо неговото
натрупване
се
разпределя в
последователни
тактове, въз
основа на
представянето
му чрез
разликата X.3=(X.4) - (X.1). Този
начин на
разлагане на
поразрядното
произведение
се основава
на израза (3.2.5.1.1).
Дяснопосочното
изместване
на междинната
сума в
настоящия
случай
определя
реда на натрупване
на тази
разлика, а
именно: в
текущия такт
се натрупва
умалителят (-X.1), а
умаляемото (+X.4) се
отнася за
натрупване
към
следващия
такт.
Получаването
на тези две произведения
само по себе
си не
представлява
проблем –
първото
съвпада с
множимото, което
следва да се
извади, а
второто може
да се получи
чрез
изместване
на множимото
на два
разряда, тъй
като е
възможно
представянето
4=22. По
отношение на
следващия
такт, където
се анализира
следващата
двойка
разряди на множителя,
недовършеното
в текущия
такт натрупване
има смисъл на
корекция на
поразрядното
произведение,
тегловната
стойност на
която, след
междувременно
направеното
изместване
на
междинната
сума надясно
на два
разряда, е +X. Така в
общия случай
текущо
определеното
поразрядно
произведение
се разглежда
съвместно с
корекцията
от
предидущия
такт и се
формира
резултантната
за текущия
такт стойност,
която следва
да се натрупа.
Обобщавайки
всички
възможни
ситуации, процесът
на умножение
с произволна
по ред двойка
разряди на
множителя
може да бъде
изразен чрез
резултантните
операции.
Възможните
случаи са
осем и
съответстват
на двоичните
комбинации,
образувани
от стойностите
на двойката
цифри и
функцията на
корекцията,
както е
показано в
таблицата.
Таблица
3.2.5.3.1
Определяне
на поредната операция
и корекция
|
|
|
операция |
|
0 |
0 |
0 |
+0 |
0 |
0 |
0 |
1 |
+X |
0 |
0 |
1 |
0 |
+2X |
0 |
0 |
1 |
1 |
-X |
1 |
1 |
0 |
0 |
+X |
0 |
1 |
0 |
1 |
+2X |
0 |
1 |
1 |
0 |
-X |
1 |
1 |
1 |
1 |
+0 |
1 |
Тази
таблица
изразява по
същество
алгоритъма
за умножение
с два разряда
едновременно
на числа
представени
в прав код.
Във
втората и
третата
колонки на
таблицата са
представени
цифрите на
текущата
двойка разряди
от множителя Y, а в
първата и
последната
колонки са
означени
логическите
стойности на
коригиращата
функция K от
предидущия и
в текущия
такт
съответно. Смисълът
на тази
логическа
функция се
определя по
следния начин:
В
колонката "операция"
на таблицата
е означена
резултантната
операция,
която се
получава от
съвместното
разглеждане
на
стойността
на двойката
разряди на
множителя и
теглото на
корекцията. Така
например, в
последния
ред на таблицата,
назначената
операция е +0, но тя
се получава
от сумата (-X+X),
където (-X) е
операцията,
съответстваща
на двойката (11), а (+X) е теглото
на
корекцията
от
предидущия
такт след
изместването
на
междинната
сума надясно
на 2 разряда.
Фактът, че
двойката
цифри (11)
не се
реализира
непосредствено
като (+3.X),
се отбелязва
чрез
стойността
на функцията
на
корекцията
която ще
бъде
отчетена в
комбинация
със следващата
(t+1)-ва двойка
разряди на
множителя.
От таблицата произтичат следните изводи:
1. Тъй като
измежду
назначените
операции има
и операция
изваждане,
логическата
структура на
устройството
за умножение
трябва да
функционира
в
допълнителен
код. Тогава най-удобно
е и
операндите
да се
представят в
допълнителен
код.
2. Тъй като
операцията +2.Х се
реализира
чрез
едноразрядно
изместване
на множимото Х
наляво,
следователно
множимото и
междинната
сума е удобно
да бъдат
представени
в модифициран
допълнителен
код. Тъй като
обаче в
(n+1)-битовото
поле числото +2.Х
практически
остава само с
един знаков
разряд, а
ситуацията
на препълване
при неговото
натрупване е
напълно възможна,
изместването
надясно на
два разряда
се налага да
се изпълнява
като модифицирано
аритметическо
изместване дори
и в условията
на
модифициран
допълнителен
код.
Другото
решение на
проблема с
изчезващия
знак в този
алгоритъм
може да се
постигне с
въвеждане на
още един
допълнителен,
(n+1)-ви разряд, в
полето на
суматора. За
да не се увеличава
обаче
дължината на
суматора може
да бъде
извършено
предварително
изместване
на междинната
сума на един
разряд
надясно. Това
е едно
по-просто
решение, но
то води до
по-бавно
изпълнение
на
умножението.
За да се реализира този алгоритъм за умножение е необходимо във всеки такт да се разпознава необходимостта от корекция. За целта, въз основа на таблица 3.2.5.3.1, се синтезира логическата функция на корекцията, чийто вид е:
От
горния израз
се вижда, че
корекцията
се описва
чрез времева
логическа
функция. Това
означава, че
нейната
реализация
изисква логически
елемент с
памет, т.е.
тригер.
Началната
стойност на корекцията
трябва да
бъде нула, т.е.
В
зависимост
от
реализацията
на логическата
функция, тази
начална
стойност ще
определи и
началното
установяване
на тригера в
схемата.
Умножението
на числа в
прав код
обикновено
се нарича умножение
по модул, тъй
като в
цифровата
част на
разрядната
мрежа се
намира
модулът на множителя.
В случай, че
разрядната
мрежа се интерпретира
за числа без
знак,
същността на умножението
не се
променя, но в
последния
такт е
възможно да
се получи
грешка. Ето защо
след
последното
изместване, в
този случай е
необходимо
да се направи
проверка на функцията
за корекция.
Ако
натрупаната
сума е с
недостиг.
Налага се да се
изпълни
последно
прибавяне на множимото,
тъй като
теглото на
корекцията след
изместване
на
междинната
сума надясно
на два
разряда е +1.Х.
И така, в заключение трябва да изясним възможността за реализация на описания алгоритъм за умножение въз основа базовите логически структури от фигура 3.2.2.1.1 и фигура 3.2.2.2.1. Анализът показва, че реализацията е възможна и тя ще доведе до логическа структура, която може да се получи лесно след минимални изменения в базовата структура. Тези изменения се отнасят до следното:
-
Реализация
на логическата
функция на
корекцията
(3.2.5.3.2);
- Изграждане на логически връзки за едновременно изместване на два разряда надясно в регистрите на множителя и на междинната сума;
-
Добавяне на
необходимите
разряди в
съответните
логически
възли с цел
представяне на
междинната
сума и на
множимото в
модифициран
код;
-
Реализиране
на
логическата
функция за възстановяване
на знаковите
разряди на
междинната
сума при
препълване - от вида
(3.2.3.4).
Тук ние не
представяме
логическата
структура на
устройство
за умножение с
два разряда
едновременно.
Тази
логическа
структура,
както и
съответната
за нея микропрограма,
оставяме
като задача
за самостоятелна
работа на
читателя.
Представените
в
предидущите
пунктове
решения
могат да
бъдат пример
за търсеното
тук решение.
Илюстрация
на
алгоритъма
чрез
подходящи
числени примери
читателят
може да
намери в книга [2].
Следващият
раздел е:
3.2.5.3.1
Умножение с
два разряда
едновременно
в
допълнителен
код (с
младшите
разряди
напред)
Multiplication
with two bits at the same
time in two’s complement (with the juniors ahead)