3.3.5.1   Логическа структура на устройство за работа с ПЗ и натрупващ суматор

FPU with accumulator

 

 

      На фигура 3.3.5.1.1 по-долу е представена примерна логическа структура на устройство за изпълнение на четирите алгебрически операции върху числа, представени във форма с плаваща запетая. Характерно за нея е следното:

1.       Че е синтезирана със суматори от натрупващ тип;

2.       Че мантисата и порядъкът на числата са представени като числа със знак в прав код, а разрядната мрежа е структурирана във вида (±M , ±p) (вижте фиг.1.6);

3.       Че за реализация на операциите събиране и изваждане за вътрешен инверсен код се използва модифициран обратен код.

      Като имаме предвид сложността на алгоритмите, в представената логическа структура е показана само онази част от връзките и управляващите сигнали, с помощта на която ще бъдат пояснени кратко алгоритмите за изпълнение на операциите с плаваща запетая.

      Разрядната мрежа на устройството е разположена разпределено в представената логическа структура върху акумулатора на мантисата АкмМ и акумулатора на порядъка АкмР. И двата акумулатора работят с модифициран код, което се вижда от допълнителните знакови разряди АкмМ[1] и АкмР[k]. Както е известно, модифицирания код облекчава откриването на препълване, както и извършването на аритметическото изместване надясно. Входният регистър има същата структура – РгВхМ и РгВхР, но без допълнителните знакови разряди, т.е. съдържанието му представлява число в обикновен машинен код. Дължината на тези логически възли се определя от съответните параметри на разрядната мрежа.

      За осъществяване на алгоритмите в логическата структура е въведен един допълнителен регистър РгДоп. Този регистър, както и входният, в частта, предназначена за мантисата, е разширен отдясно с един допълнителен разряд – РгДоп[-m], РгВх[-m]. Тези допълнителни разряди са необходими за съхранение на текущо изхвърляния от мантисата разряд в процеса на изравняване на порядъците. С други думи в допълнителния разряд на регистъра в крайна сметка може да остане само най-старшата цифра на загубващата се част от мантисата при изместването й надясно. С това се цели да се намали грешката от тази загуба. Акумулаторът от своя страна е разширен отдясно с два допълнителни разряда, като най-десният АкмМ[-m-1], е необходим на процедурата за закръгляне на резултата. Върху съдържанието на някои регистри са предвидени дешифратори за разпознаване на нулева комбинация, което се сигнализира чрез флаговете Z (Zero).

      Тъй като описваното устройство е от натрупващ тип, всички операции, които ще бъдат разгледани, използуват като първи операнд резултата от предидущото действие, т.е. съдържанието на акумулатора.

 

 

Фиг. 3.3.5.1.1.   Примерна логическа структура от натрупващ тип за работа с плаваща запетая

1.  Изпълнение на операция събиране (изваждане).

      Вторият операнд Y се приема във входния регистър и се пристъпва към проверка на мантисите.

      Ако първият операнд X, намиращ се в акумулатора, е числото нула, то вторият операнд се зарежда в акумулатора, в качеството му на резултат (в случай на изваждане, знакът му се сменя).

      За сравняване на порядъците трябва да се получи разликата

      Преди това, за временно съхранение, в РгДоп се изпраща порядъкът на първия операнд  px.

      За да се извърши операция изваждане, двата порядъка следва да се представят в инверсен машинен код. Като такъв е избран обратният код. Ето защо, ако порядъкът px е отрицателно число, с помощта на управляващия сигнал УС2 в акумулатора на порядъците АкмР се получава неговия обратен код:

      Едновременно с това, чрез УС6 във входния регистър на порядъка РгВхР се получава обратния код на умалителя

като преди това се инвертира знаковия бит. Възможността да получаваме инверсния код на отрицателните числа във всеки от възлите на устройството чрез просто инвертиране (без допълнително прибавяне на единица, т.е. без необходимост от суматор) обуславя избора на обратния код.

      След събирането на двата обратни кода, т.е. (АкмР)+(РгВхР), в този акумулатор се получава обратния код на търсената разлика (ако няма препълване разбира се), т.е.

      Ако за този резултат се появи флагът Z1, операцията завършва, като в акумулатора АкмР се зарежда по-големия порядък, в противен случай се пристъпва към процедурата за изравняване на порядъците, като преди това знакът на разликата се запомня в тригера на знака ТS. Този знак е необходим за да бъде определен в последствие кой е бил по-големият порядък. Самата разлика, която остава в акумулатора на порядъците, се използва за организиране на следващото последователно изместване на съответната мантиса.

      Ако получената в АкмР разлика

е положително число, се пристъпва към изместване на съдържанието РгВхМ надясно (това е мантисата на втория операнд Y). След всяко изместване на мантисата на един разряд, от АкмР се изважда единица. Изместването продължава, докато се появи флагът Z : (АкмР)=0, с което завършва етапа на изравняване на порядъците.

      Ако разликата в АкмР е отрицателно число, то надясно се измества съдържанието на АкмМ, а в АкмР се прибавят единици, докато същият се нулира.

      След описаната подготовка на операндите се извършва същинската операция събиране (изваждане) на мантисите. За целта, тъй като мантисите са числа със знак, същите се представят в инверсен код, т.е. в обратен код. След проверка на знака, мантисата на първия операнд остава такава каквато е, ако е положителна, или чрез управляващия сигнал УС1 в АкмМ се получава обратния й код, ако е отрицателна. По същия начин с помощта на УС4 в РгВхМ се подготвя мантисата на втория операнд. При операция изваждане обаче преди това се инвертира знакът й.

      Получаването на обратния код чрез управляващите сигнали УС1, УС2, УС4 или УС6 представлява по същество инвертиране на всички разряди в цифровата част на логическите възли. Манипулирането на знаковите битове се осъществява с управляващи сигнали, които не са показани на рисунката, както беше уговорено в началото. Ако тези манипулации трябва да се извършват в едно АЛУ с фиксирана запетая в резултат на машинни команди, изпълняващи се в рамките на машинна програма, емулираща работата на устройство с плаваща запетая, то това не би могло да стане без представяне на числата в допълнителен код и изпълнение на операциите събиране и изваждане в допълнителен код.

      По време на събирането (изваждането) на мантисите, в АкмР трябва да се зареди по-големият порядък. По-големият порядък се зарежда от РгДоп, ако (TS)=0, или от ВхРгР, ако (TS)=1 и веднага след това следва да се получи неговият обратен код, тъй като по време на процедурата за нормализация на резултата е възможно той да бъде коригиран.

      В последния етап на алгоритъма се извършва нормализиране на резултата. За целта сумата от мантисите, която е в обратен код, се превръща в прав код. Ако се налага тя се измества в съответната посока, а порядъкът се коригира.

      След нормализиране на мантисата, се получава правият код на порядъка, в резултат на което в акумулаторите се получава окончателният вид на числото (мантиса и порядък представени в прав код) и неговите признаци.

2.  Изпълнение на операция умножение.

      Съдържанието на акумулаторите в логическата структура се интерпретира като множител, а зареденото във входния регистър число - като множимо. Сумата на порядъците се получава в акумулатора АкмР. Както и при операция събиране (изваждане), порядъците се обработват в обратен код. В края на операцията порядъкът се превръща в прав код.

      Мантисите се умножават, като междинните суми се натрупват в акумулатора на мантисите АкмМ. За да започне умножението, неговото съдържание (т.е. множителя) се изпраща в допълнителния регистър РгДоп, след което акумулаторът се нулира. Умножението се извършва по модул с младшите разряди напред по схемата с неподвижно множимо. Съхранява се само старшата част на произведението. При желание, акумулаторът може да бъде свързан по веригата за изместване с РгДоп, в който да се запомни и младшата половина на произведението. След нормализация и закръгляне на резултата, се формира правият код на порядъка и в АкмМ се внася знакът на произведението, определен предварително чрез функцията (3.2.2.2).

      За организиране на цикъла в алгоритъма за умножение в логическата структура се включва броячът на циклите БрЦ.

3.  Изпълнение на операция деление.

      Съдържанието на акумулаторите в логическата структура се интерпретира в случая като делимо, а зареденото във входния регистър число - като делител. При това положение, разликата на порядъците се получава в акумулатора на порядъците в обратен код.

      Делението на мантисите се извършва по модул по схемата с неподвижен делител, като цифрите на частното се записват в допълнителния регистър РгДоп. Операцията се контролира чрез брояча БрЦ.

      След получаване на частното, същото се записва в АкмМ, нормализира се, закръгля се и му се приписва знакът, подготвен предварително според функцията (3.2.2.2), а в АкмР се получава правият код на порядъка, с което операцията завършва.

 

 

Следващият раздел е:

3.3.5.2   Логическа структура с комбинационен суматор   ( FPU with combination adder )