§ 2.3   Език на микрооперациите

Microoperations language

 

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

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

      Тук по-долу ще определим средствата с които ще представяме логическите структури. Тези средства са валидни както за тази книга, така и за свързаните с нея книги [2], [3], [4] и [5].

 

А)  Означаване на думи, регистри, шини

      За означаване на думи, т.е. на информация (число, код, адрес, отместване, признак, маска и др. подобни) се използват символични имена – идентификатори, които най-често се построяват като буквена или буквено-цифрова последователност. Например X, Y, Z могат да означават:

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

      Когато е необходимо да се изрази поразрядната структура на число, на поле или на възел, след идентификатора може да следва разряден указател. Например РгА[0] означава, разряд с номер 0 в регистър А. Разрядният указател се затваря в квадратни скоби и може да бъде заместван от идентификатора на подполето, което описва. Например, ако структурата на един регистър, който съдържа операнд с плаваща запетая с формат SP (единична точност 32[b]), е като на следната рисунка:

то полето на мантисата се описва, т.е. представя, така: РгА[220] или така: РгА[M], а полето за знак на числото така: РгА[31], или така: РгА[Sign]. Самият регистър може да бъде представен от името си – РгА, или още от името и разрядния указател – РгА[310].

      Ако е необходимо да се изрази съдържанието на един регистър или части от него, съответният идентификатор се затваря в малки скоби. Например (РгА) означава съдържанието на регистър А, което представлява числото Х. Така става възможно да се запише равенството Х=(РгA). Ако е необходимо да се означи само знакът на числото, то може да се запише (РгА[31]), или още Sign=(РгА[31]). Последното се чете така: знакът на числото е равен на съдържанието на бит №31 от регистър А.

      Предаването на информация от една точка А в друга точка В се осъществява с помощта на логическа връзка, изобразявана като линия (логическа линия). Всяка логическа връзка носи във всяка своя точка по цялата си дължина във всеки един момент от времето една единствена логическа стойност (0 или 1). Фактически (физически, на практика) логическата връзка може да бъде изпълнена като цяло (или в отделни участъци по цялата й дължина) с помощта на различни материални средства – например най-често това са проводници от проводящ материал (мед, алуминий, сребро, злато) или оптично влакно и др.

      За да се разбира кой е приемник и кой предавател на логическата стойност, връзките в логическите структури имат стрелки. Казаното може да се види на фигура 2.2.4 и фигура 2.2.5.

      Съвкупността от логически линии с обща логическа интерпретация се нарича шина. Шините се представят от широки ивици или от дебела линия (вижте фигура 2.2.4 и фигура 2.2.5). Шината е основно средство за осъществяване на връзки между възлите. Тя също се именува и може да има разряден указател – например ШВхД[07], което се чете така: шина, входна, за данни, обединяваща 8 логически линии с номера от 0 до 7.

 

Б)  Означаване на памет и части от нея

      Запомнящите устройства интерпретират като последователност масив (вектор) от клетки. Във всяка клетка може да се запомни определена порция данни, например с дължина един байт. Като идентификатор на оперативната памет може да се употреби името ОП, ако тя е оперативна, а за други видове памет, например постоянна памет – името ПЗУ, ROM, EPROM и др. Ако се има предвид методът на достъп, например асоциативен, името може да бъде АЗУ, RAM и т.н. Името може да е свързано с предназначението на ЗУ, с метода на достъп, с основните видове операции, изпълнявани в него, с някои негови качествени характеристики. Например РгЗУ следва да се разбира като регистрово запомнящо устройство.

      Идентификаторът на паметта може да бъде последван от индекс. Индексът е списък от индексиращи количества,  заградени в правоъгълни скобки, например ОП[0k-1] означава участък от паметта, включващ всички клетки с номера от 0 до (k-1). Ако този участък има смисъл на структурна единица, например сегмент, то същото може да се изрази и със записа ОП[Сегмент1]. Ако трябва да се изрази съдържанието на младшия полубайт на 21-та клетка, се записва следното: (ОП[21,30]).

 

В)  Означаване на микрооперациите

      Както вече беше пояснено, микрооперацията представлява определен начин за преработка на информацията. Преработката може да бъде постигната в електронна схема, имитираща логически, аритметически или функционални действия. Важно е да се отбележи още, че даден начин за преработка се възбужда (индицира или заповядва) с помощта на допълнителен сигнал, наречен управляващ. Управляващите сигнали, които възбуждат микродействието, се изобразяват с триъгълен връх, както е показано на следващата рисунка:

      Както може да се види на фигура 2.2.4 и фигура 2.2.5, те се подвеждат към линии, шини, логически възли.

      Понятието микрооперация се определя с помощта на метаформата на Бекус като структурен запис, който има следния вид:

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

      Основният микрооператор има смисъл на функция за присвояване (използва се знакът )

т.е. означеният чрез идентификатор в него структурен елемент получава ново съдържание:

      И така, записът

означава, че при подаване на управляващия сигнал УС5, разрядите от 0 до 7 на регистър В приемат (записват), инвертираното съдържание на разрядите с номера от 30 до 23 на регистър А. С други думи, това е запис на част от съдържанието на РгВ в съответните разряди на РгА. Същото може да бъде изразено и по следния начин:

 ,

където операцията логическо инвертиране е изразена с английската дума not – отрицание. Появата или подаването на управляващия сигнал УС5 означава момент (такт), в който на линията, по която той се разпространява, да се появи логическа стойност единица, т.е. УС5=1. Във всички други моменти УС5=0, т.е. той не активен, не е подаден. С други думи управляващите сигнали се появяват под формата на логически импулси.

      Като имаме предвид, че понятието устройство беше определено като събирателно от две части (алгоритмична и структурна), горе обясненият запис трябва да се разбира като същност на алгоритмичната част. Съответстващият му структурен израз има вида, показан на рисунката от фигура 2.3.1.

 

Фиг. 2.3.1.  Структурно означение на микрооперация запис (присвояване)

 

      Означената на рисунката 8-битова междурегистрова връзка, управлявана от УС5, в този вид не притежава изяснена логика. Логиката на връзката може да се изясни, само ако се уточни от какви тригери ще бъде изграден РгВ и как те ще приемат информация – еднофазно или двуфазно, еднотактно или двутактно (за подробности вижте в книга [2]).

      Както се разбира, логиката на връзката е свързана с оператора за присвояване. И още, актът на присвояване (фиксиране) на новото съдържание завършва в определен момент, който зависи от логическата структура на тригерите – управлявани по ниво или управлявани по фронт. В този смисъл всяка микрооперация следва да се интерпретира и разбира при анализ или синтез на дадено устройство тристранно:

- алгоритмично;

- структурно (схемно);

- като процес, протичащ във времето.

      Типични микрооперации (записани в оператор за присвояване) са:

·         “установяване”:

ТргV := V   – тригерът на признака за препълване приема стойността на логическата функция V;

ТргЗн := 0   – тригерът на знака се нулира;

РгА := 0       – регистър А се нулира;

БрЦ := n/2   – брояч на циклите приема начална стойност – числото n/2;

 

·         “броене”:

БрЦ := (БрЦ) + 1  – съдържанието на брояча на циклите се увеличава с единица;

БрЦ := (БрЦ) - 1   – съдържанието на брояча на циклите се намалява с единица;

 

·         “изместване”:

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

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

ЛИД1(РгА)    – логическо изместване надясно на 1 разряд съдържанието на регистър А;

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

                                 (2.3.1)

      Както беше определено, микрооперация изместване (2.3.1) се реализира в междурегистровата връзка и в логическите структури се изразява чрез косото й прекарване, както е показано на рисунката от фигура 2.3.2.

 

Фиг. 2.3.2.  Коса връзка между логически възли

 

      На рисунката е показан управляващият сигнал УС8, по чиято заповед регистър А приема изместеното надясно на един разряд съдържание на регистър В. Така всеки разряд от регистър А определя новото си съдържание напълно според микрооператорите (2.3.1). Микрооператорът, с който ще изразим микрооперацията от фигура 2.3.2, можем да запишем още така:

      Ако микрооперация изместване се изпълнява върху съдържанието на регистъра, при което се унищожава старото съдържание, то структурният й израз е показан на фигура 2.3.3.

 

Фиг. 2.3.3.  Изместващ регистър (на 1 бит)

 

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

ЛИЛ2(РгА)    – логическо изместване наляво на 2 разряда съдържанието на регистър А;

АИД(РгА)      – аритметическо изместване надясно на 1 разряд съдържанието на регистър А;

РотЛ1(РгА)   – ротация наляво на 1 разряд съдържанието на регистър А;

РотД1(РгА)   – ротация надясно на 1 разряд съдържанието на регистър А;.

 

·         “конкатенация”:

     Тази микрооперация се изразява с вертикална черта |, поставена между съединяващите се части. Например:

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

 

·         “празен такт”:

     В микропрограмните текстове тази микрооперация се означава с мнемониката NOP, а в блок-схемите на алгоритмите се означава чрез символа за празно множество Æ. Микрооперацията означава временен участък (такт) в общия процес на изпълнение на управляващия алгоритъм, по времето на който липсват управляващи сигнали. Нарича се още "празен такт".

 

·         “разрешение за достъп”:

     В редица логически възли, с цел повишаване на надеждността на тяхното управление или за повишаване на универсалността им, се въвеждат допълнителни условия, които се налагат върху вградените им функции. Типичен пример може да бъде дешифраторът, който ще дешифрира, ако му е разрешено. Обикновено разрешението се присвоява като логическа стойност на променлива до момента на поява на управляващия сигнал, с който се възбужда определена функция (микрооперация) на даден възел. Смисълът на сигнали от този тип се определя от функцията на схемите, изграждащи логическия възел, например:

§         enable (E)   – разрешение за достъп;

§         disable (D)  – забрана за достъп;

§         chip select (CS)  – избор на чип.

 

      Освен микрооператор за присвояване, реализацията на различните алгоритмични структури изисква наличието поне още на два микрооператора. Това са микрооператорите за безусловен и за условен преход. Смисълът на този тип микрооператори изисква определяне на ключови думи, които ние ще изписваме с плътен наклонен шрифт.

      Микрооператорът за безусловен преход има структурата:

      Конструкцията  представлява уникален идентификатор за означаване (маркиране) на микрооператор. В повечето случаи входната точка ще отбелязваме с число, последвано от две двоеточия, например:

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

      Микрооператорът за условен преход има структурата:

      В тези микрооператори, след ключовите думи то и иначе, могат да следват блокове от микрооператори, оградени с големи скоби {...}. Микрооператорите, включени в блоковете, могат да бъдат разделени със запетая (,) или с точка и запетая (;). Последното зависи от броя на тактовете, които реализира съответния блок. Общата точка на двата клона на микрооператор Ако се отбелязва с разделителя (;), поставен след последната голяма скоба.

      Всяка микропрограма започва с микрооператор Начало и завършва с микрооператор Край.

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

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

 

Г)  Разбиране за изпълнението на управляващия алгоритъм

      Сработването на един автомат в отговор на сигнал “Пуск” (вижте фигура 2.2.5), т.е. изпълнението на потребителската му функция, по същество представлява изпълнение на заложения в неговото управляващо устройство алгоритъм (микропрограма) за управление на операционното му устройство. Изпълнението на потребителската функция е процес, който протича във времето. В общ план този процес съответства на определения в началото на тази глава изчислителен процес. Малко по-конкретно, според теорията на крайните автомати, това е процес на последователни превключвания на логическите елементи. Този процес не е непрекъснат, той е дискретен – протича в отделни тактове. Неговото детайлизиране на ниво микрооперации беше представено по-горе. Изпълнението на една микрокоманда заема един такт. Така от продължителността на отделните тактове се формира продължителността за изпълнение на цялата потребителска функция.

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

      Асинхронният метод на управление изисква за своята практическа реализация всеки възел да бъде снабден с допълнителен изходен сигнал, чиято задача е да оповести края на превключването му, т.е. края на микрооперацията, изпълнявана в него. Всеки сигнал за край на превключване е старт за следващото превключване. Като двигател на последователните превключвания се явяват сигналите от всеки възел. В резултат на това всеки отделен такт е с продължителност, равна на реалното (фактическото) време за превключване, което зависи не само от логическата схема на възела, но и от конкретно обработваните в него операнди. По този начин времето за изпълнение на микропрограмата е равно на сумата от фактическата продължителност на всеки отделен такт, т.е. е възможно най-малкото в конкретните условия. За съжаление този метод за управление на превключванията има сериозен недостатък, който се изразява в необходимостта от реализация на голям брой оповестяващи сигнали, което е свързано със значителни апаратни разходи. Пример за това твърдение е асинхронният двоичен суматор, чийто синтез е изложен в книга [2]. Методиката за синтез на асинхронни управляващи автомати е представена подробно в книга [3].

      Алтернативата на този метод е методът на синхронно управление. Същността на синхронния метод се изразява в това, че причината за превключване, т.е. причината за преход от микрооперация към микрооперация, е външен сигнал (тактов импулс), който се появява независимо и периодично. Този сигнал се генерира от тактов генератор с постоянна честота. Така тактовият генератор се явява двигател на превключванията. Продължителността на всяка микрооперация е равна на периода на тактовия сигнал, а продължителността на микропрограмата може да се изрази чрез броя на последователно изпълнените микрооперации, т. е. чрез броя на тактовете.

      Синхронният метод за управление на превключването води до отстраняване на недостатъка на асинхронния метод, но въвежда свой. Недостатъкът на този метод е снижаване на общото бързодействие на микропрограмата. Това се дължи на необходимостта продължителността на такта да се настройва спрямо най-тежките (най-бавните) случаи за изпълнение на всяка микрооперация.

      За повишаване на бързодействието на синхронни устройства се използват специално разработени методики за проектиране (вижте книга [2]).

 

 

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

ГЛАВА  3   Операционни структури   ( Operating logical structures )