Documente Academic
Documente Profesional
Documente Cultură
Implementarea hardware/firmware
a algoritmilor de tip grup - secvenţial
3.1 INTRODUCERE
73
4. Algoritmul se execută de un sistem cu control centralizat sau
semicentralizat. În cazul controlului centralizat, operatorii sunt de tip
combinaţional şi, în consecinţă, nu necesită control local. În cazul semi-
centralizat, operatorii pot fi secvenţiali, caz în care necesită un control
local. Din punctul de vedere al controlului central, în ambele cazuri micro-
operaţiile sunt transferuri între registre.
5. Timpul de execuţie al diferitelor micro-instrucţiuni poate să fie diferit.
Datorită structurii grup-secvenţial, timpul de execuţie al unei micro-
instrucţiuni corespunde timpului celei mai lungi micro-operaţii. Acest timp
de execuţie poate fi fix sau variabil. Dacă este variabil, trecerea la o nouă
micro-instrucţiune este determinată de apariţia unui semnal de terminare a
micro-operaţiei.
6. Controlul se implementează sub forma unei maşini secvenţiale. Unele
variante presupun implementări hardware [13]. În acest capitol vom
prezenta implementarea firmware în care funcţiile de tranziţie a stărilor şi
a ieşirilor sunt memorate în module de memorie, iar funcţia de tranziţie a
stărilor este reprezentată de ordinea micro-instrucţiunilor din memorie şi
de diferite ramificaţii binare.
Sistemul cu control centralizat sau semi-centralizat este alcătuit din două sub-
sisteme (Figura 3.1): sub-sistemul de date şi sub-sistemul de control [5].
Sub-sistemul de date (numit şi secţiunea de date) implementează funcţia de
memorare a datelor şi pe aceea de transformare a datelor în timp ce sub-sistemul
de control (secţiunea de control) coordonează transferurile de date,
transformările şi secvenţierea acestora. În mod obişnuit, secţiunea de control
produce secvenţe de semnale de control (secvenţe de control) pentru a coordona
sub-calculele din secţiunea de date.
Intrările şi ieşirile sistemului constau din intrări şi ieşiri de date, intrări şi
ieşiri de control. Secţiunile de date şi de control comunică prin intermediul
semnalelor de control şi al condiţiilor. Condiţiile, generate de secţiunea de date,
sunt folosite de secţiunea de control în secvenţierile dependente de date, pentru a
genera semnale de control dependente da date.
Intrări de Ieşiri de
date Subsistem date
de date
Intrări de Ieşiri de
control Subsistem control
de control
74
Secţiunile de date şi de control sunt definite prin specificarea unui set de
componente (primitive), a unei structuri de conectare dintre componente, şi a
unui comportament care se realizează prin componentele interconectate.
Componentele folosite în sub-sistemul de date sunt module de memorie
(registre sau tablouri de registre), operatori şi trasee de date. O componentă are
de obicei intrări şi ieşiri de date care sunt identificate ca bit-vectori de intrare şi
de ieşire, intrări de control numite puncte de control şi, posibil, ieşiri de condiţii.
Operaţia care trebuie efectuată de o componentă este determinată de semnalele
de control generate de secţiunea de control şi prezentate la punctele de control.
O componentă mai este caracterizată ca modul prin parametri cum sunt:
întârziere, fan-out, etc.
Secţiunea de control este un sistem secvenţial. Funcţia lui de tranziţie
specifică precedenţele micro-instrucţiunilor din algoritm. Funcţia lui de ieşire
specifică semnalele de control care activează micro-operaţiile executate de sub-
sistemul de date. Funcţiile de tranziţie şi de ieşire, numite funcţii de control, pot
fi implementate în mai multe moduri: registre de stare, reţele combinaţionale,
unităţi de control microprogramate.
75
4. Constructori de secvenţe, care reprezintă restricţii de precedenţă ale
algoritmului.
5. Constructori de structură, care permit construirea algoritmilor din alţi
algoritmi.
6. Comentarii, care permit documentarea algoritmilor.
Obiecte
Exemplul 3.1
76
n 1
v( x) x X i 2i ,
i 0
A3 A2 A1 A0
B3 B2 B1 B0
X 3 X 2 X1 X 0 K
MUX
Y3 Y2 Y1 Y0
C out Cin E
Sumator Decodificator
S3 S 2 S1 S 0
....
L CLK Z7 Z 2 Z1 Z 0
Registru
W3 W2 W1 W0
(a)
X B A
4 4
4 MUX
K
Y 4
4
3
C out Cin E
Sumator Decodificator
S 4 8
L CLK Z
Registru
4 (b)
W
77
Exemplul 3.2
Valoarea "01110" poate fi notată "14" pentru o reprezentare binară
convenţională a întregilor, iar "01000001" poate fi notată "A" dacă se foloseşte
codul ASCII pentru caractere.
La nivelul inferior, singura structură de obiecte elementare permisă de limbaj
este tabloul. Tablourile vor fi notate printr-un şir de litere majuscule, iar
dimensiunea este indicată printr-o pereche de întregi care reprezintă numărul de
bit-vectori şi numărul de biţi din fiecare vector. Un bit-vector individual din
tablou este specificat cu un index între paranteze drepte. Pentru implementare,
tablourile de bit-vectori corespund tablourilor de registre, RAM, sau reţelelor
combinaţionale multidimensionale cu ieşiri multiple.
Exemplul 3.3
Tabloul M 2,6 reprezintă o matrice 2 6
M :
M [0]
M [1]
unde
M [0] : ( M 5 [0], M 4 [0], M 3 [0], M 2 [0], M 1[0], M 0 [0])
Funcţii (Operatori)
78
operatori implementaţi prin reţele secvenţiale: în acest caz operatorul include şi
controlul corespunzător (control semi-centralizat).
Operatorul este specificat prin funcţia pe care o realizează. Specificarea poate
fi dată prin tabele, expresii booleene, etc.
De asemenea, este posibil să se folosească operatorii limbajului la tipuri de
obiecte de nivel înalt. În aceste cazuri, specificaţia este dată în funcţie de funcţii
primitive convenţionale ale acestor tipuri de obiecte. De exemplu, dacă funcţia
este asupra obiectelor de tip întreg, în specificaţie pot fi folosite operaţiile
aritmetice de bază. În acest caz, implementarea constă dintr-o reţea
combinaţională (secvenţială) care realizează funcţia asupra bit-vectorilor codaţi.
de exemplu, funcţia unui sumator poate fi specificată sub forma
ADD( x, y ) : x y
unde A, B, C ,... sunt obiecte iar a, b, c,... sunt condiţii care pot fi propoziţii (cu
valoarea True sau False) sau expresii booleene (cu valoarea 0 sau 1). Valoarea
funcţiei este A dacă a True (sau 1), este B dacă b True (sau 1), etc. Cel
mult o condiţie poate avea valoarea True (sau 1) la un moment dat. dacă toate
condiţiile sunt False, ieşirea funcţiei de selecţie este nespecificată.
Selecţia condiţionată poate fi implementată prin porţi care au vectori la intrări,
sau prin multiplexoare care au vectori la intrări, ca în Figura 3.3.
A B C A B C
a b c
n n
.... 0 1 2 2p–1
s p
MUX
2p intrări x n biţi
n
.... n
(b)
n (a)
79
Pentru implementarea cu MUX, o construcţie mai utilă a limbajului este
A if s 0 | B if s 1 | C if s 2...
( A, B, C ,...)
3. Extragerea unui sub-vector dintr-un vector dat este specificată sub forma
unei concatenări de componente. De exemplu, A : ( B4 , B3 , B2 ) .
Asignări
DS
Asignarea este realizată dacă c True (sau 1). O asignare condiţionată poate
să conţină şi o zonă else:
if c then A B else D C
80
asignări din instrucţiunea care se execută. Aşadar, ordinea în care sunt scrise
asignările în instrucţiune nu este semnificativă, iar instrucţiuni ca
A B || B A sunt valide.
B
S S
LOAD c
A
CLK LOAD 1 CLK LOAD c
D D D
R T
C D
Add
Add
Decodificator
Semnal de
CLK încărcare
Z Semnal de
paralelă CLK încărcare
F
paralelă
B C
A
Add
CLK
F c3
81
Instrucţiunile se termină cu "punct şi virgulă". Pentru a identifica o
instrucţiune se foloseşte o etichetă. Aceasta constă dintr-un şir de caractere
alfanumerice, se află la începutul instrucţiunii şi este separată de aceasta prin
"două puncte". Eticheta nu este obligatorie. Exemple de instrucţiuni şi etichete:
Set: A B || C B if a | D if a' ;
C ADD( B, C );
cont: if a b then ( A, B, C ) ( D, E , F );
Secvenţe de instrucţiuni
Un algoritm de tip grup-secvenţial este alcătuit dintr-o secvenţă de
instrucţiuni. Secvenţierea (ordinea în care sunt executate instrucţiunile) poate fi
specificată explicit sau implicit.
Într-o secvenţiere explicită fiecare instrucţiune conţine o etichetă a
instrucţiunii care va fi executată la pasul următor. Această construcţie de limbaj
este scrisă ca parte a unei instrucţiuni după toate asignările şi constă dintr-o
săgeată orientată către dreapta urmată de etichetă.
Următoarea secvenţă de instrucţiuni foloseşte secvenţierea implicită (ne-
condiţională şi condiţională):
loop: W OP1( A, B) || next;
next: if c then A OP 2(W ) || more;
more: B OP3( A,W ) || loop if ab' | next if ba ' | end if a ' b' ;
end: A B;
82
asupra numărului de condiţii care pot fi folosite în construcţia secvenţierii
condiţionale (una în mod curent).
Spre deosebire de acestea, în secvenţierea implicită ordinea de execuţie este
determinată de ordinea în care instrucţiunile sunt scrise în algoritm. În
consecinţă, instrucţiunile nu necesită informaţie suplimentară despre următoarea
instrucţiune de executat. Pentru că această secvenţiere implicită este prea
restrictivă, sunt incluse instrucţiuni speciale numite salturi (condiţionate) pentru
a putea întrerupe secvenţa implicită. Construcţia de limbaj este similară cu aceea
din cazul explicit. Următoarea secvenţă de instrucţiuni foloseşte secvenţierea
implicită.
loop: W OP1( A, B) ;
next: if c then A OP 2(W ) |;
B OP3( A,W ) || loop if ab' | next if ba ' | end if a ' b' ;
loop if a | next if b;
end: A B;
83
unde c este o condiţie iar B1 şi B 2 sunt blocuri. Această construcţie înlocuieşte
secvenţa:
L1 if c | L 2 if c' ;
L1: begin B1;
..........
end B1 || L3;
L2: begin B 2;
..........
end B 2;
L3:
2. Execuţia repetată are forma:
84
unde Ai este o valoare a obiectului A, iar B este un bloc. Dacă A are valoarea Ai,
atunci se execută numai blocul Bi. Dacă A are o valoare diferită de Ai, atunci nu
se execută blocul Bi. Această construcţie înlocuieşte următoarea secvenţă
if A = A1 then B1 ║
.......
if A = Am then Bm
Construcţii structurale
Declaraţii
Punct de
intrare
Corp
arhitectural
......
Puncte de ieşire
condiţionate
85
Punctul de intrare este reprezentat de prima instrucţiune din corpul
arhitectural. Ramificaţiile din exterior sunt permise numai la acest punct. Partea
declarativă este o listă a tuturor obiectelor folosite în modul. Aceasta se împarte
în intrări globale, ieşiri globale şi obiecte locale. Pentru fiecare obiect se indică
tipul şi dimensiunea. În partea declarativă se pot da nume anumitor expresii.
Sintaxa pentru aceasta este:
NUME := expresie
Ori de câte ori se foloseşte NUME în corpul arhitectural, acesta va înlocui
expresia corespunzătoare. La implementare, aceasta corespunde cu atribuirea de
nume ieşirilor reţelelor combinaţionale.
În continuare este prezentat un exemplu de modul.
Exemplul 3.4
Un modul poate fi compus din sub-module mai mici. Aşadar, un algoritm este
un modul. O posibilă organizare a unui algoritm compus din module este
indicată în Figura 3.7.
O funcţie macro (macro function) are aceeaşi semantică şi sintaxă ca o funcţie
dar este extinsă într-o secvenţă de instrucţiuni de către un translator (sau de
proiectant într-o etapă ulterioară) pentru a fi implementată. Este utilizată pentru
funcţii complexe care nu sunt implementate direct prin reţele combinaţionale sau
secvenţiale autonome.
O subrutină are de asemenea semantica şi sintaxa unei funcţii. Pe durata
execuţiei se pot face ramificaţii la o rutină, execuţia unei rutine, apoi controlul
se întoarce la instrucţiunea de după apelul la subrutină. Avantajul faţă de
funcţiile macro este acela că într-un algoritm care necesită aceeaşi funcţie de
mai multe ori, secvenţa pentru acea funcţie este implementată numai o singură
dată, ceea ce conduce la economie de spaţiu de memorare. Dezavantajul unei
subrutine este acela că adresa instrucţiunii de retur trebuie să fie memorată în
prealabil, ceea ce conduce la un anumit consum de timp.
86
Declaraţii
Corp
arhitectural
Instrucţiuni
Modul
Declaraţii
Corp
arhitectural
Modul
87