Sunteți pe pagina 1din 13

Cap.4.

UNITATEA DE COMANDĂ Şl CONTROL

Funcţiile principale ale unităţii de comandă şi control (UCC) sunt următoarele:


• Decodificarea codului operaţiei;
• Calculul adresei operanzilor care participă la operaţie şi extragerea lor din
memorie;
• Generarea secvenţei de comenzi necesare execuţiei instrucţiunii;
• Generarea secvenţei de comenzi necesare memorării rezultatului şi a
informaţiilor de stare;
• Calculul adresei instrucţiunii următoare şi citirea acesteia din memorie.

4.1. Microoperaţii
Prelucrările efectuate de UCP pentru execuţia unei singure instrucţiuni
reprezintă un ciclu de instrucţiune. Fiecare ciclu de instrucţiune constă din
următoarele subcicluri:
• Subciclul de extragere a instrucţiunii din memorie;
• Subciclul de execuţie;
• Subciclul de întrerupere.
Pe lângă aceste subcicluri, la execuţia unei instrucţiuni mai poate apărea
subciclul de indirectare. Execuţia unei instrucţiuni poate necesita extragerea
unuia sau a mai multor operanzi din memorie. Aceşti operanzi pot fi adresaţi
direct sau indirect. După extragerea instrucţiunii, se verifică dacă operandul
necesar este adresat în modul indirect. In caz afirmativ, se încarcă operandul
respectiv utilizând adresarea indirectă.
Ciclul de instrucţiune, completat cu subciclul de indirectare, este reprezentat
simplificat în figura 4.1.

Subciclul de
extragere

Subciclul de Subciclul de
întrerupere indirectare

Subciclul de
execuţie

Fig.4.1

Fiecare subciclu al unei instrucţiuni poate fi descompus într-o serie de


operaţii elementare. O asemenea operaţie elementară, care realizează o
prelucrare numerică a informaţiei sau un transfer al acesteia, pe durata unui
singur impuls al generatorului de tact, se numeşte microoperaţie. Unitatea de
comandă şi control are rolul de a genera succesiunea semnalelor de comandă
care asigură secvenţa corectă de execuţie a fiecărei microoperaţii. Această suc-
cesiune este specifică fiecărei instrucţiuni, fiind determinată atât de codul operaţiei
cât şi de recepţionarea unor semnale de stare de la circuitele controlate, prin care
se verifică îndeplinirea unor condiţii.
In continuare se analizează subciclurile care intră în componenţa unei
instrucţiuni şi microoperaţiile din care se compune fiecare subciclu. Pentru
aceasta să presupunem că UCP utilizează următorii regiştri:
- Registrul de adrese al memoriei (RA). Acest registru este conectat la liniile
de adresă ale magistralei sistem şi conţine adresa din memorie a unei
instrucţiuni sau a unei date.
- Registrul de date al memoriei (RD). Acest registru este conectat la liniile
de date ale magistralei sistem şi conţine valoarea care trebuie depusă în
memorie sau ultima valoare citită din memorie.
- Contorul de program (PC) conţine adresa următoarei instrucţiuni care se va
executa.
- Registrul de instrucţiuni (Rl) conţine ultima instrucţiune citită.

4.1.1. Subciclul de extragere


In acest subciclu este adusă în UCP o instrucţiune din memorie. Figura 4.2
prezintă transferurile de date din acest subciclu. Registrul PC conţine adresa
instrucţiunii care urmează să fie executată. Această adresă este depusă în RA şi
apoi este plasată pe magistrala de adrese (MA). Unitatea de comandă solicită o
operaţie de citire a memoriei, trimiţând pe magistrala de comandă (MC) o
comandă către Unitatea de memorie. Conţinutul locaţiei de memorie a cărei
adresă a fost transmisă Unităţii de memorie este plasat pe magistrala de date
(MD) şi reţinut în registrul de date (RD). In acelaşi timp UCC elaborează
comanda de incrementare a registrului Program Counter (PC), pregătind astfel
următorul ciclu de extragere. Registrul, RD fiind unica poartă de intrare în UCP,
trebuie golit de informaţiile pe care le conţine, astfel încât instrucţiunea care se
află în acesta este transferată în registrul de instrucţiuni (RI). In RI instrucţiunea
este decodificată şi este păstrată pe toată perioada executării acesteia.
Operaţiile executate în acest subciclu sunt indicate în figura 4.2.
Generatorul de tact al sistemului de calcul generează impulsuri de tact
(ceas) la intervale constante. Fiecare impuls de ceas defineşte o unitate de timp.
Această unitate de timp este aleasă astfel încât fiecare microoperaţie să poată fie
executată pe durata unui singur impuls de ceas. Unităţile de timp sunt notate cu
t1, t 2 , t3 .
Simbolic, secvenţa de microinstrucţiuni care descrie microoperaţiile
prezentate anterior se poate scrie astfel:
UCP MA MD MC

PC RA
Memorie

UCC

RI RD

Fig.4.2 Subciclul de extragere

t1 : RA ← PC
t2 : RD ← Mem
PC ← PC+1
t 3 : RI ← RD
A treia microoperaţie se poate executa şi în unitatea de timp t3, fără a afecta
subciclul de extragere.

4.1.2. Subciclul de indirectare


După extragerea instrucţiunii din memorie, urmează să se încarce
operanzii care participă la operaţie specificată de această instrucţiune. Unitatea de
comandă examinează conţinutul registrului Rl şi, dacă este indicată o adresare
directă, aduce în RD conţinutul locaţiei de memorie a cărei adresă este specificată
în câmpul de adresă a instrucţiunii. Adresarea directă se referă la situaţia în
care câmpul de adresă conţine adresa efectivă a operandului (Figura 4.3):
Instrucţiune

CO Adresă Memorie

Operand
Fig. 4.3
Acest mod de adresare presupune o singură referire la memorie şi nu
necesită un calcul de adresă.
In cazul adresării indirecte, urmează un subciclu de indirectare care
precede subciclul de execuţie. Adresarea indirectă se referă la situaţia în care
în câmpul de adresă al instrucţiunii se găseşte o referinţă la un cuvânt de
memorie, care conţine adresa completă a operandului (Figura 4.4).
Instrucţiune

CO ADR 1 Memorie

ADR 2

Operand

Fig. 4.4

Câmpul de adresă din registrul de instrucţiuni Rl este transferat în RA.


Această adresă este utilizată apoi pentru încărcarea adresei operandului în
registrul de date RD. Câmpul de adresă din Rl este actualizat pentru a conţine
adresa directă a operandului.

UCP MA MD MC

RA
Memorie

UCC

RI RD

Fig.4.5 Subciclul de indirectare

Registrul Rl conţine în acest moment adresa din memorie a operandului şi


este pregătit pentru subciclul de execuţie. Operaţiile executate în acest subciclu
sunt indicate în figura 4.5.
Descrierea simbolică a microoperaţiilor prezentate este următoarea:
t1 : RA ← RI(ADR1)
t2 : RD ← Mem
t3 : Rl ← RD (ADR2)
O instrucţiune este formată din cel puţin două câmpuri. Primul câmp
conţine codul operaţiei ce trebuie executată iar cel de al doilea câmp conţine
adresa din memorie a operandului implicat în operaţie. Astfel RI(ADR1) se
referă la câmpul de adresă a instrucţiunii conţinută de RI.

4.1.3. Subciclul de execuţie


Subciclurile de extragere şi de indirectare, ca şi subciclul de întrerupere,
implică secvenţe fixe de microinstrucţiuni. Subciclul de execuţie diferă în funcţie
de instrucţiune, pentru fiecare instrucţiune existând o secvenţă proprie de
microinstrucţiuni care trebuiesc executate.
Considerăm ca exemplu instrucţiunea:
ADD R1, X
care adună valoarea variabilei X din memorie la conţinutul registrului R1,
rezultatul fiind memorat tot în R1.
Execuţia acestei instrucţiuni poate fi descrisă prin următoarea secvenţă de
microinstrucţiuni:
t1 : RA ← RI(ADR)
t2 : RD ← Mem
t3 : R1 ← R1+RD
Rl conţine codul instrucţiunii ADD. La primul pas (t1), partea de adresă din
Rl, care reprezintă adresa variabilei X, este încărcată în RA. La pasul t2 se copie,
din locaţia de memorie adresată, valoarea variabilei X şi se depune în RD. In
final (t3), conţinutul registrului R1 (numit registru acumulator) şi al RD sunt
adunate de UAL şi rezultatul este memorat tot în registrul R1.

4.1.4. Subciclul de întrerupere


Sistemul de întreruperi este acea parte a unui sistem de calcul care
permite detectarea unor evenimente externe sau interne şi declanşarea unor
acţiuni corespunzătoare pentru tratarea lor. Aceste evenimente pot fi: tentativa
de execuţie a unui cod de instrucţiune nepermis, terminarea unei anumite
operaţii de către un dispozitiv de I/E, o eroare produsă în timpul execuţiei unei
operaţii aritmetice (împărţire la zero, depăşire superioară sau inferioară),
situaţii critice in funcţionarea unui sistem de calcul (ex: eroare de paritate,
fluctuaţii ale tensiunii de alimentare, etc.).
Pentru a stabili ordinea de deservire a cererilor concurente de
întrerupere, sistemele de întrerupere utilizează o ierarhie de priorităţi.
Prioritatea unei întreruperi se stabileşte pe baza importantei acordate
evenimentului tratat si a restricţiilor de timp în soluţionarea acesteia. Sistemul
de întreruperi al unui calculator poate să identifice mai multe niveluri de
întrerupere. Adresele de început ale acestor rutine se păstrează intr-un tabel
din memorie. In funcţie de cerinţele programului executat, anumite niveluri de
întrerupere pot fi invalidate, temporar sau pe toată durata aplicaţiei.
La terminarea subciclului de execuţie, în cazul în care întreruperile sunt
validate, se testează dacă a apărut o cerere de întrerupere. In caz afirmativ, se
execută un subciclu de întrerupere. Secvenţa de operaţii executate este
următoarea:
1. Se salvează contextul programului curent. Prin context se înţelege
conţinutul registrului PC, în care se găseşte adresa instrucţiunii ce urmează să fie
executată după reluarea execuţiei programului, conţinutul registrului de stare
PSW, precum şi a altor regiştri care conţin date semnificative pentru programul
respectiv.
2. Se încarcă în contorul de program adresa programului de servire a
întreruperii. UCP va executa în continuare instrucţiunile din rutina de servire, după
care va reveni la programul întrerupt.
Transferurile de date din subciclul de întrerupere se prezintă în figura
4.6.
UCP MA MD MC

PC RA
Memorie

UCC

RD

Fig.4.6 Subciclul de întrerupere

Subciclul de întrerupere poate fi descris prin următoarea secvenţă de


microinstrucţiuni:
t1 : RD ← PC
t2 : RA ← Adresa_salvare
PC ← Adresa_rutina
t3 : Mem ← RD
După cum se constată, în momentul t2, adresa rutinei de tratare a
întreruperii se transferă în PC. Ca urmare, următorul ciclu de instrucţiune va
începe prin extragerea primei instrucţiuni din rutina de tratare a întreruperii.
Procesoarele actuale au extins sistemul de întrupări pentru a eficientiza
funcţionarea UCP. De exemplu, cele mai multe periferice sunt mult mai lente
în comparaţie cu UCP şi aceasta ar trebui să rămână inactivă până la
terminarea unei operaţii de transfer cu un dispozitiv I/E. Prin mecanismul
întreruperilor, în timpul unei operaţii de I/E, UCP poate executa instrucţiunile
altui program.
Sistemul de întreruperi este utilizat de asemenea pentru rularea mai
multor programe în acelaşi timp (time sharing). Datorită vitezei mari de lucru a
procesorului se lansează în execuţie mai multe programe, pentru fiecare dintre
acestea alocându-se o anumită cuantă de timp. In acest mod utilizator are
senzaţia că programele sunt executate simultan.

4.2.1 Semnale de control ale UCC


Pentru a-şi realiza funcţiile, unitatea de comandă trebuie să primească o
serie de semnale care să-i permită determinarea stării sistemului iar pe baza
acestor informaţii elaborează semnale care controlează funcţionarea sistemului.
Intrările şi ieşirile unei unităţi de comandă şi control sunt prezentate în figura
4.7. UCC are următoarele intrări:
- Semnalul de ceas. UCC comandă execuţia unei microinstrucţiuni (sau a
unui set de microinstrucţiuni simultane) la fiecare impuls de ceas. Perioada
semnalului de ceas se mai numeşte ciclu de ceas.
- Codul operaţiei este citit din registrul de instrucţiuni, care păstrează
instrucţiunea curentă, şi se utilizează pentru a determina microinstrucţiunile care
trebuie executate în timpul ciclului de execuţie.
- Indicatorii de condiţii sunt necesari pentru a determina starea UCP şi
rezultatul operaţiei precedente executate de UAL, în scopul executării
instrucţiunilor de salt condiţionat.
- Semnale de control. Magistrala de control transmite către UCC semnale
de întrerupere, sau de achitare (terminare) a unei întreruperi.
MC
RI
Semnale de
control UCP

Indicatori Semnale de la
de condiţie MC
UCC

Semnale de
control la MC

Ceas
Fig. 4.7 Semnale de control UCC

UCC elaborează următoarele semnale de ieşire:


- Semnale prin care se comandă funcţionarea UCP. Acestea sunt de două
tipuri: semnalele care determină transferul datelor dintr-un registru în altul şi
semnalele care activează funcţii specifice ale UAL.
- Semnale de control transmise pe magistrala de control. Acestea sunt tot
de două tipuri: semnale de control către memorie şi semnale de control către
modulele de I/E.
Pentru a înţelege funcţionarea UCC să considerăm din nou ciclul de
încărcare al unei instrucţiuni. Adresa instrucţiunii care urmează să fie executată
este păstrată în registrul PC. Primul pas constă în transferul:
RA ← PC
Acest transfer se efectuează prin activarea unui semnal de control care
deschide (activează) porţile dintre cele două registre.
Următorul pas constă în citirea din memorie a instrucţiunii de la adresa
indicată, aducerea acesteia în registrul de date şi incrementarea contorului de
program PC:
RD ← Mem
PC ← PC + 1
Aceste operaţii se efectuează prin activarea simultană de către UCC a
următoarelor semnale de control:
1. un semnal de control care validează depunerea conţinutului RA pe
magistrala de adrese.
2. un semnal de control trimis pe magistrala de control, pentru citirea
memoriei.
3. un semnal de control care validează memorarea conţinutului de pe
magistrala de date în registrul de date RD.
4. semnale de control prin care se incrementează cu 1 conţinutul PC şi se
depune rezultatul înapoi în PC.
Ultimul pas constă în transferul:
RI ← RD
pentru care se activează un alt semnal de control care validează transferul.
In continuare UCC trebuie să decidă dacă urmează un ciclu de indirectare
sau un ciclu de execuţie. Pentru aceasta, examinează conţinutul registrului de
instrucţiuni Rl şi testează dacă se utilizează o adresare indirectă, caz în care
stabileşte secvenţa corespunzătoare de microoperaţii.
Pentru ciclul de execuţie, UCC testează codul de operaţie al instrucţiunii,
pe baza căruia decide secvenţa de microoperaţii care va fi executată.

4.2.2. Implementarea UCC


Pentru implementarea UCC se utilizează diferite metode, care se pot
încadra într-una din următoarele două categorii:
• UCC cablată;
• UCC microprogramată.
O unitate de comandă cablată este, în principiu, un circuit secvenţial care
transformă semnalele logice de intrare într-un set de semnale electrice de ieşire,
ce reprezintă semnalele de control. Modificarea funcţiilor unei astfel de unităţi de
comandă necesită modificări ale structurii hardware a circuitului.

4.2.3. UCC cablată care utilizează un decodificator


UCC preia de la registrul RI codul instrucţiunii ce urmează să fie executată
şi pe baza acestuia va stabili acţiunile ce urmează fă fie executate. In cazul unităţii
de comandă luată în discuţie codul instrucţiunii este decodificat cu ajutorul unui
decodificator care activează la un moment dat un singur semnal de ieşire.
Impulsurile generatorului de ceas al sistemului acţionează asupra unui
generator de faze, care generează semnalele de intrare T1,T2 ,..., Tn ce asigură
secvenţierea în timp a semnalelor de comandă. In fiecare din aceste momente
UCC activează semnalele de comandă cerute de codul instrucţiunii. La sfârşitul
fiecărui ciclu de instrucţiune, UCC reiniţializează generatorul de faze pentru a
relua generarea secvenţei T1,T2 ,..., Tn .
Structura unei UCC cu decodificator este prezentată în figura 4.8. Codul
instrucţiunii este preluat din registrul RI şi transformat de circuitul de decodificare în
semnalele binare D1, D2, DDn. La fiecare din momentele T1,T2,DTn UCC va
elabora câte un semnal de comandă C1, C2,D Cn, care vor declanşa acţiunile
implicate de execuţia instrucţiunii decodificate.
RI

Decodificator

Dn D2 D1

T1

Ceas Generator T2
Indicatori de
de UCC condiţii
faze
Tn

Cn … C2 C1

Fig. 4.8 UCC cu decodificator

4.2.4. Unităţi de comandă microprogramate


Semnalele de comandă elaborate de UCC pot fi reunite sub forma unei
succesiuni de cifre binare, numită cuvânt de comandă. Fiecare microoperaţie se
caracterizează printr-un cuvânt specific de comandă, iar succesiunea cuvintelor
de comandă prin care se indică secvenţa corectă a microoperaţiilor, pentru fiecare
operaţie, poate fi memorată într-o memorie de comandă.
O unitate de comandă în care succesiunea cuvintelor de comandă, este
memorată, se numeşte unitate de comandă microprogramată. Fiecare cuvânt de
comandă memorat în memoria de comandă formează o microinstrucţiune, iar
secvenţa de microinstrucţiuni formează un microprogram.
O unitate de comandă microprogramată are două funcţii principale:
- Funcţia de control propriu-zis, prin care se stabilesc microinstrucţiunile
care trebuiesc executate pentru instrucţiunea decodificată.
- Funcţia de secvenţiere, prin care se determină adresa microinstrucţiunii
următoare.

Adresă microinstrucţiune

Câmp de condiţii
- Salt necondiţionat
- Zero
- Depăşire
- Bit de indirectare

Semnale de control pentru


magistrala sistem

Semnale de control pentru


UCP

Fig. 4.9

In conformitate cu aceste funcţii pe care trebuie să le îndeplinească


unitatea ce comandă microprogramată, o microinstrucţiune este formată din
următoarele câmpuri principale (Fig. 4.9):
- Câmpul semnalelor de comandă generate pentru controlul UCP. Acest
câmp conţine câte un bit pentru fiecare semnal de comandă intern al UCP.
- Câmpul semnalelor de comandă pentru magistrala sistem. Acest câmp
conţine câte un bit pentru fiecare semnal de comandă al magistralei sistem.
- Câmpul de condiţii, de care depinde următoarea microinstrucţiune care va
fi executată.
- Câmpul de adresă, care conţine adresa următoarei microinstrucţiuni care
se va executa, dacă o anumită condiţie este adevărată. De exemplu, dacă bitul de
indirectare din codul instrucţiunii este 1 (condiţia aste adevărată), se va executa
secvenţa de microinstrucţiuni pentru calcularea adresei efective a operandului.
Dacă acest bit este 0 (condiţia este falsă), se va executa următoarea
microinstrucţiune din memoria de comandă, a cărei adresă este indicată în câmp.
Acest tip de microinstrucţiune se numeşte microinstrucţiune orizontală. Spre
deosebire de acestea se utilizează şi microinstrucţiuni verticale care utilizează un
cod pentru fiecare operaţie care trebuie executată.
Totalitatea microinstrucţiunilor care constituie o unitate logică formează un
microprogram.
O microinstrucţiune orizontală este interpretată în modul următor:
1. Pentru execuţia unei microinstrucţiuni, se activează toate semnalele de
control cărora le corespunde un bit de 1 în câmpul semnalelor de comandă şi se
dezactivează cele cărora le corespunde un bit de 0.
2. In cazul în care condiţia indicată de câmpul de condiţie este falsă, se
trece la execuţia următoarei microinstrucţiuni din microprogram. In cazul în care
condiţia indicată de câmpul de condiţie este adevărată, se trece la execuţia
microinstrucţiunii indicată de câmpul de adresă.
In figura 4.10 se prezintă amplasarea microprogramelor în memoria de
comandă.
.
. Rutina pentru
Salt la indirectare sau execuţie. ciclul de extragere
.
. Rutina pentru
Salt la execuţie ciclul de indirectare
.
. Rutina pentru
Salt la extagere ciclul de întrerupere

Salt la decodificarea codului op. Început ciclu de execuţie


.
.
Rutina pentru ADD
Salt la întrerupere sau extragere
.
. Rutina pentru AND
Salt la întrerupere sau extragere
.
.
.

.
. Rutina pentru JMP
Salt la întrerupere sau extragere

Fig. 4.10

Fiecare rutină este constituită dintr-un microprogram. Microinstrucţiunile din


fiecare rutină sunt executate secvenţial. Fiecare rutină se termină cu o
instrucţiune de salt care indică următoarea rutină care va fi executată. Există o
rutină specială pentru începutul unui subciclu de execuţie, care după încărcare şi
decodificare indică rutina care va fi executată pentru diferitele instrucţiuni (ADD,
AND, ..., JMP), în funcţie de codul instrucţiunii.
Memoria de comandă reprezintă o descriere completă a funcţionării UCC,
deoarece defineşte secvenţa de microinstrucţiuni care trebuie executate în timpul
fiecărui subciclu (de extragere, de indirectare, de execuţie, de întrerupere) şi
specifică secvenţierea acestor subcicluri.
In figura 4.11 se prezintă elementele principale ale unei unităţi de comandă
microprogramate.
Registrul de microadrese RMA conţine adresa următoarei microinstrucţiuni
care va fi citită din memoria de comandă. După citirea din memoria de comandă,
microinstrucţiunea este transferată în registrul de microinstrucţiuni RMI.
Unitatea microprogramată are aceleaşi intrări (Rl, indicatori de condiţii ai
UAL, ceas) şi ieşiri (semnale de comandă) ca şi o unitate de comandă cablată.
Unitatea de comandă microprogramată funcţionează astfel:
1. Instrucţiunea din RI este decodificată de decodificatorul 1 rezultând
adresa din memoria de comandă a următoarei microinstrucţiuni.
2. Pentru extragerea microinstrucţiunii a cărei adresă se găseşte în
RMA, logica de secvenţiere activează un semnal de citire a memoriei de
comandă.
3. Microinstrucţiunea extrasă din memoria de comandă este depusă în
registrul de microinstrucţiuni (RMI).

RI

Decodificator 1
Indicatori de
condiţii
Logică de
secvenţiere RMA

Ceas

READ Memorie de
comandă

RMI

Decodificator 2

Semnale de Semnale de control


control UCP pe magistrala
sistem
Fig. 4.11 Unitate de comandă microprogramată
4. După decodificarea microinstrucţiunii din RMI sunt activate semnalele
de control pentru UCP, magistrala de control şi pentru blocul de secvenţiere.
5. Logica de secvenţiere încarcă o nouă adresă în registrul de microadrese,
pe baza informaţiilor despre adresa următoare de la registrul de microinstrucţiuni
RMI şi a indicatorilor de condiţii ai UAL.
Avantajul principal al utilizării microprogramării pentru implementarea
unităţilor de comandă este simplificarea proiectării acestora. O unitate de
comandă cablată trebuie să conţină o logică complexă pentru secvenţierea
microinstrucţiunilor din ciclul de instrucţiune. In schimb, decodificatoarele şi
logica de secvenţiere dintr-o unitate de comandă microprogramată sunt mai
simple.
Dezavantajul unităţilor microprogramate este că sunt mai lente decât cele
cablate realizate într-o tehnologie comparabilă. Cu toate acestea, micro-
programarea este tehnica cea mai utilizată pentru implementarea unităţilor de
comandă.

S-ar putea să vă placă și