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)