Последната актуализация на този раздел е от 2019 година.

 

 

5.3.  Проект

 

 

Етап Г)   Реализация на решението

 

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

            - Входовете и изходите в логическата структура на устройството;

            - Алгоритъма на собствената функция и задачите на външната среда.

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

      Можем да приемем, че проектираното устройство ще бъде неинициативно. Това означава, че в изходно състояние устройството се самоопределя чрез признак (Flag) за готовност, в смисъла на “Готово” или “Заето”, т.е. неготово.

      Това състояние трябва да се постига в два случая:

            - Принудително чрез външен сигнал от тип Reset, който ще се подава на специален вход;

            - Естествено, след изчисляване на резултата.

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

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

      Бъдещото устройство можем да си представим като “черна кутия”, чиито функция, входове и изходи са вече определени – фигура 5.1.

 

Фиг. 5.1.  Функционално означение на устройството

 

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

·         R           Вход за подаване на сигнал Reset. Нормално на този вход ще се подава нула, която е неактивна логическа стойност. При подаване на единица устройството ще се установява в изходно състояние;

·         C           Вход за тактовата последователност. Според указателя на входа, превключванията в устройството се извършват синхронно с предния фронт на тактовите импулси.

·         VD        Вход за сигнал, условно наречен Valid Data, с който външната среда следва да съобщи на устройството, че поставените от нея на данновата шина данни са валидни;

·         Start      Вход за стартиращия импулс;

·         Ackn     Acknowledge - изходен сигнал, потвърждаващ приемането на данните в устройството;

·         Flag       Признак за готовност на устройството.

 

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

 

 

Етап Г1)   Синтез на логическата структура

 

      Имаме вече готовност да представим логическата структура на проектираното устройство. Допълнителен коментар ще дадем за операция умножение. Тази операция се изпълнява два пъти на всеки цикъл. След достигане на зададената точност, се изпълнява още едно умножение. Приемаме умножението да се извършва в един последователен алгоритъм, натрупващ междинната сума с помощта на един суматор. Логическата структура е разработена при съблюдаване на предпоставките, които са били водещи при разработване на логическите структури, определени и представени в книга [1] – използване на елементарни RS-тригери (виж фигура 3.1.2), еднофазен запис в регистрите (запис с предварително нулиране (виж фигура 3.1.3)), изграждане между логическите възли на логически връзки от тип “всеки с всеки”, при стремеж към минимални апаратни разходи.

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

·         СМ             Двоичен комбинационен суматор с двойна дължина;

·         Рг.СМ        Регистър на суматора с двойна дължина – записва данни с предварително нулиране;

·         Рг.МС        Регистър на междинната сума с двойна дължина – записва данни с предварително нулиране;

·         Рг.МН        Регистър на множимото с двойна дължина – записва данни с предварително нулиране;

·         Рг.МТ         Регистър на множителя с двойна дължина – изместващ регистър, записва данни без предварително нулиране;

·         Буф.Рг.     Буферен регистър с двойна дължина – записва данни с предварително нулиране;

·         Рг.X           Регистър входен на делимото с единична дължина - записва данни с предварително нулиране;

·         Рг.Y           Регистър входен на делителя с единична дължина - записва данни с предварително нулиране;

·         Бр.Ц          Двоичен изваждащ брояч;

·         ТК              Тригер-ключ;

·         ВУУ           Вътрешно управляващо устройство.

 

 

Фиг. 5.2.  Логическа структура на устройството

 

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

                                        УС0: Рг.СМ := 0;                           УС12: Бр.Ц := const(2n-1);

                                        УС1: Рг.МС := 0;                           УС13: Бр.Ц := (Бр.Ц)-1;

                                        УС2: Рг.МН := 0;                           УС14: ЛИД1(Рг.МТ);

                                        УС3: Буф.Рг. := const(A0);             УС15: Рг.X := 0;

                                        УС4: Трг.К := 0;                             УС16: Рг.Y := 0;

                                        УС5: Трг.К := 1;                            УС17: Рг.X := ШД(X);

                                        УС6: Рг.МН := (Буф.Рг.);               УС18: Рг.Y := ШД(Y);

                                        УС7: Рг.МС := (Рг.СМ);                 УС19: Рг.МТ := ;

                                        УС8: Рг.СМ := ЛИД1(СМ);             УС20: Буф.Рг. := 0;

                                        УС9: Рг.СМ := СМ;                       УС21: Рг.МТ := (Буф.Рг.);

                                        УС10: Рг.МН := (Рг.X);             УС22: Буф.Рг. := (Рг.СМ).

                                        УС11: Рг.МН := (Рг.Y);

 

      Читателят, запознат със структурите, представени в книга [1], лесно ще различи във фигура 5.2 класическата структура на едно умножително устройство, към което на специфично място е добавен един буферен регистър. Предназначението на този буферен регистър е да съхранява текущото приближение, което явявайки се множител в първото от двете умножения на всяка итерация, изчезва, а при второто умножение, когато е необходимо като множимо, е необходимо. Всички логически възли имат двойна дължина (2n[b]) която беше вече обоснована. Остава да бъде определена дължината на брояча на циклите Бр.Ц. Предназначението на този брояч е да формира условието за край при изпълнение на циклическия алгоритъм на всяко умножение. Като се има предвид максималната начална стойност, която трябва да се представи като негово двоично съдържание – (2n-1) излиза, че дължината му може да се определи както следва:

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

      Алгоритъмът по който функционира представената логическа структура ще представим с помощта на езика на микрооперациите, дефиниран и използван в книга [1], глава 2 .

 

0::            Начало  {Текст на микропрограмата за деление

                                    по метода на реципрочната стойност}   ;

1::            ако  ( Start )  то   {  премини към   2::  ;  }

                                 иначе  {  премини към   1::  ;  }

{ установяване на изходното състояние }

2::            УС0:     Рг.СМ:=0   ,

          УС1:     Рг.МС:=0   ,

          УС2:     Рг.МН:=0   ,

          УС15:   Рг.X:=0      ,

          УС16:   Рг.Y:=0      ,

          УС3:     Буф.Рг.:=const()  ,

          Строб  “Ackn”         ; { сигнал потвърждение за приемане на операнд }

3::            ако  ( VD )  то  {  премини към   4::   ; }

                              иначе  {  премини към   3::   ; }

4::            УС17:   Рг.X:=ШД(X)   ,

          Строб  “Ackn”    ;  { сигнал потвърждение за приемане на операнд }

5::            ако  ( VD )  то  {  премини към 6::    ; }

                             иначе  {  премини към 5::    ; }

6::            УС18:   Рг.Y:=ШД(Y)   ;

7::            Flag:=1   ;    { установяване на признак “заето”  }

{ начални данни за първото умножение }

8::            УС11:   Рг.МН:=(Рг.Y)         ,

          УС12:   Бр.Ц:=const(2n-1)  ,

          УС21:   Рг.МТ:=(Буф.Рг.)     ;

{ начало на цикъла на първото умножение }

9::            ако  (  (Рг.МТ[0])  )  то  {  УС5:  ТК:=1   ; }

                                   иначе    {  УС4:  ТК:=0   ; }

10::    УС0:     Рг.СМ:=0   ,

          УС13:   Бр.Ц:=(Бр.Ц)-1  ;

{ проверка на условието за край на цикъла за първо умножение }

11::    ако  ( EQ )  то  {  премини към  12::    ;   }

                                 иначе   {    УС8:    Рг.СМ:=ЛИД1(СМ)   ,

                                                  УС14:  ЛИД1( (Рг.МТ) )            ;

                                                  УС1:    Рг.МС:=0                     ;

                                                  УС7:    Рг.МС:=(Рг.СМ)           ;

                                                  премини към  9::     ;        }

12::    УС9:     Рг.СМ:=СМ  ;

{ проверка на условието за край на итерациите }

13::    ако  ( .LT. )  то  {  премини към  21::    ;  }

                                 иначе   {

{ начални данни за второто умножение } 

                                                  УС19:   Рг.МТ:=  ,

                                                  УС2:     Рг.МН:=0                  ,

                                                  УС1:     Рг.МС:=0                  ,

                                                  УС12:   Бр.Ц:=const(2n-1)       ;   }

14::    УС6:     Рг.МН:=(Буф.Рг.)      ;

{ начало на цикъла на второто умножение – изчисление

                                                    на следващото приближение  }

15::    ако  (  (Рг.МТ[0])  )  то  {  УС5:  ТК:=1   ; }

                                              иначе    {  УС4:  ТК:=0   ; }

16::    УС0:     Рг.СМ:=0   ,

          УС13:   Бр.Ц:=(Бр.Ц)-1  ;

{ проверка на условието за край на цикъла за второ умножение  }

17::    ако  ( EQ )  то  {  премини към  18::    ;   }

                                   иначе   {  УС8:    Рг.СМ:=ЛИД1(СМ)   ,

                                                  УС14:  ЛИД1( (Рг.МТ) )            ;

                                                  УС1:    Рг.МС:=0                     ;

                                                  УС7:    Рг.МС:=(Рг.СМ)           ;

                                                  премини към  15::     ;        }

18::    УС9:     Рг.СМ:=СМ  ,

          УС20:   Буф.Рг.:=0      ;

19::    УС22:   Буф.Рг.:=(Рг.СМ)  ,

          УС1:     Рг.МС:=0        ,

          УС2:     Рг.МН:=0    ;

20::    премини към  8::     ;

{ начални данни за последното умножение }

21::    УС1:     Рг.МС:=0    ,

          УС2:     Рг.МН:=0    ,

          УС12:   Бр.Ц:=const(2n-1)    ;

22::    УС21:   Рг.МТ:=(Буф.Рг.)  ,

          УС10:   Рг.МН:=(Рг.X)           ;

{ начало на цикъла на последното умножение: Z=X.Ak }

23::    ако  (  (Рг.МТ[0])  )  то  {  УС5:  ТК:=1   ; }

                                         иначе    {  УС4:  ТК:=0   ; }

24::    УС0:     Рг.СМ:=0   ,

          УС13:   Бр.Ц:=(Бр.Ц)-1  ;

{ проверка на условието за край на цикъла за първо умножение }

25::    ако  ( EQ )  то  {  премини към  26::    ;   }

                           иначе   {    УС8:    Рг.СМ:=ЛИД1(СМ)   ,

                                            УС14:  ЛИД1( (Рг.МТ) )            ;

                                            УС1:    Рг.МС:=0                     ;

                                            УС7:    Рг.МС:=(Рг.СМ)           ;

                                            премини към  23::     ;        }

26::    УС9:     Рг.СМ:=СМ  ;

27::    Flag:=0   ;    { установяване на признак “готов”  }

28::    премини към  1::    ;

29::    Край    {  Край на текста на микропрограмата за деление   }

 

 

Етап Г2 )   Синтез на принципната логическа схема

 

      Всички логически възли, които се съдържат в синтезираната логическа структура, представена на фигура 5.2, са достатъчно прости във функционално отношение, а освен това тяхната принципна логическа реализация е представяна вече тук, в [2] или в [1], така че ние ще реализираме само принципната логическа схема на изместващия регистър на множителя Рг.МТ.

      От структурната схема се вижда, че този регистър записва паралелни данни от два различни източника (по УС19 и по УС21) и изпълнява логическо изместване надясно на един разряд (по УС14).

Принципната логическа схема на този регистър е представена на фигура 5.3.

 

Фиг. 5.3.  Принципна логическа схема на изместващия регистър Рг.МТ

 

 

      От фигурата се вижда, че за реализация на регистъра на множителя са избрани D-тригери с динамично управление, превключващи се по предния фронт на импулса, който се подава на синхронния им вход. Входните мултиплексорни схеми (U001; U002; … U2n-2  и  U2n-1) се превключват от управляващите сигнали УС14, УС19 и УС21. В логическия елемент U100 управляващите сигнали се стробират от инверсната фаза на тактовия генератор така, щото формираният записващ импулс, който излиза от този елемент, осъществява акта на запис в по-късен момент, когато данните са надеждно и стабилно установени на D-входовете на тригерите.

      Времедиаграмата за управлението на записа в Рг.МТ е представена на фигура 5.4

 

фиг. 5.4.  Времедиаграма на записващия импулс от изхода на логически елемент U100

 

 

 

 

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

6.  МПУУ с променлива продължителност на микротакта за структури с програмно закрепене логика