Sunteți pe pagina 1din 64

ASC – Dan Olaru

Lecţii ASC
Scurt istoric
Trebuie remarcat deosebirea între cei doi termeni, care în limba română sunt cunoscuţi ca maşina
de calcul şi sistem de calcul echivalent cu calculator programabil sau mai simplu, calculator.
Pentru acestea, în limba engleză se utilizează termenii de calculator, respectiv computer (cu
pronunţia engleză). Prima noţiune reprezintă o maşină de socotit, sau calculat, pentru tipuri de
operaţii stabilite dinainte, aşa cum este un calculator de buzunar, ne-programabil. Cea de-a doua
noţiune reprezintă o maşină secvenţială, a cărei funcţionare este guvernată de un program format
din instrucţiuni aritmetice sau logice, eventual chiar cu caracter simbolic sau cu elemente de
inteligenţă artificială.
Primele încercări teoretice de a concepe o maşină de calcul sunt datorate lui Leibnitz şi Pascal.
Primul proiect nerealizat, dar care a evidenţiat bazele structurii unui calculator îi aparţine lui
Charles Babbage, încă din secolul IX (1830). Mult mai târziu, în 1937 Howard Aiken de la
Universitatea Harvard construieşte primul sistem de calcul (deci programabil) denumit
“Calculator cu secvenţă de comandă automată”, realizarea având mai mult un caracter
demonstrativ.
În apropierea celui de-al doilea război mondial, necesităţile calcul şi de prelucrare a informaţiei
sunt accelerate de dezvoltarea tehnologiei şi chiar de imperativele apropierii războiului. Astfel, în
acest scop, în SUA au fost create colective specializate, şi finanţate care au pus la punct între
1939 şi 1944 primul calculator, în sensul în care este acceptat astăzi, denumit Mark1. Acesta era
realizat cu elemente de comutaţie electro-mecanice (comutatoare cu relee) şi avea performanţe
foarte reduse. În perioada imediat următoare a fost realizat primul calculator electronic denumit
ENIAC, cu titulatura engleză: “Electronic Numerical Integrator and Comparator”, determinată de
funcţiile pentru care era destinat. Acesta conţinea 18000 de tuburi cu vid electronice, realiza 5000
de adunări pe secundă, avea o memorie de 20 de numere cu reprezentare zecimală şi era
programat cu ajutorul a 6000 de comutatoare mecanice.
Dezvoltarea ulterioară a calculatoarelor a fost marcată de caracterul de universalitate dat de
structura concepută de matematicianul John von Neumann, care s-a implicat şi în proiectele
viitoare. Aceasta permitea dezvoltarea unei funcţionalităţi flexibile, destinată prelucrării
informaţiei (datelor) într-o manieră generalizată şi universală, păstrându-şi actualitatea până în
prezent. Astfel, un sistem de calcul trebuie să conţină unităţi funcţionale care să asigure
următoarele funcţii: 1) preluarea datelor de intrare (dispozitive de intrare); 2) memorarea datelor
(memoria); 3) prelucrarea datelor şi calculul rezultatelor (unitatea de calcul aritmetic şi logic); 4)
transmisia la ieşire a rezultatelor (dispozitive de ieşire); 5) comanda întregului sistem (unitatea de
comandă). Aceste concepte au permis realizarea calculatorului EDVAC şi apoi, în anul 1951,
prima formă comercială de calculator, sub denumirea de UNIVAC (Universal Automatic
Computer).
În istoria claculatoarelor acestea au căpătat diferite forme şi moduri de realizare, în funcţie de
modurile de lucru şi mijloacele tehnice disponibile la momentul respectiv. Astfel, perioada anilor
1960-1970 a fost dominată de calculatoarele denumite “main frame” realizate cu tranzistori sau
circuite integrate simple a căror configuraţie conţinea mai multe dulapuri şi ocupa o sală răcită cu
instalaţii de climatizare. Pe măsura miniaturizării dispozitivelor electronice au fost dezvoltate
apoi minisistemele (1970-1980) cu o configuraţie concentrată într-unul sau mai multe dulapuri de
format mic, până la calculatoarele personale, staţiile de lucru sau serverele din prezent.
ASC – Dan Olaru

Evoluţia calculatoarelor poate fi clasificată, mai ales urmărind considerente tehnologice, atât
hardware cât şi software în mai multe generaţii de calculatoare, punctând anumite caracteristici
pentru: hardware (HD), software (SW), memorie (MM) şi viteza de procesare (VP):
Generaţia I (1946-1956): HW – relee şi tuburi electronice; SW – program cablat (forma
neintegrată a memoriilor ROM), programare în cod maşină şi limbaj de asamblare; MM – 2 KB
(kilo-bytes sau kilo-octeţi); VP – 10000 operaţii/sec.
Generaţia II (1957-1963): HW – tranzistori, memorii cu innele de ferită, cablaj imprimat; SW –
programare în limbaj ALGOL, FORTRAN, etc.; MM – 32KB; VP – 200000 op/sec.
Generaţia III (1964-1981): HW – circuite integrate, cablaj multistrat, discuri magnetice mai
performante, microprocesoare (µP) simple; SW – programare în limbaje de nivel foarte înalt,
programare structurată, baze de date, prelucrări grafice; MM – 1-2 MB; VP – 5M Instr/sec.
Generaţia IV (1982-1989): HW – circuite VLSI, sisteme distribuite, µP pe 16/32 biţi; SW –
pachete de programe (medii de programare), sisteme expert, programe orientate pe obiecte, baze
relaţionale; MM – 8-10MB; VP – 30 M Instr/sec.
Generaţia V (în dezvoltare): HW – circuite ULSI (ultra large scale integration), eventual
configuraţii 3D; arhitecturi paralele, reţele neorale; SW – limbaje concurente dezvoltate,
programare funcţională, programare simbolică, baze de cunoştinţe, sisteme expert evoluate; MM
– sute, chiar mii MB; VP – 1G, 1T instr/sec.

Puterea de calcul, caracteristică unui anumit sistem este determinată de mai mulţi factori, printre
care pot fi enumeraţi:
- frecvenţa maximă de lucru a dispozitivelor de comutaţie şi a căilor de date (MHz – GHz);
- numărul de biţi ai unui cuvânt (32 – 64);
- arhitectura unităţii centrale, a căilor de comunicaţie şi a dispozitivelor periferice;
- volumul de memorie şi viteza de acces a acesteia (MB – GB);
- performanţele de calcul cu virgulă flotantă (Mflop).

1. Elemente de bază - operatorul binar


Sistemul de calcul (calculator/ordinator) este destinat să prelucreze informaţie. În acceptiunea
actuală acesta este o maşină programabilă. Terminologia “maşină” este larg utilizată, deşi în acest
caz aceasta este constituită, în principal de circuite electronice. Acestea lucrează, de regulă, cu
nivele de tensiune, aflate în starea sus – pentru nivelul de tensiune superior sau în starea jos
pentru nivelul de tensiune inferior.
Funcţionarea se bazează pe parcurgerea unei mulţimi de stări (maşină secvenţială/maşină
algoritmică de stări - “algoritmic state machine”). Trecerea dintr-o stare în alta se face sub
controlul programului, reţinut în memorie. Acesta, la rândul lui, este definit de stările
dispozitivelor de memorare.
Deci, calculatorul conţine o parte fizică (hardware) alcătuită din dispozitive electronice sau
electromecanice şi o parte constituită din programe (software). Este important de reţinut că
programul coordonează sau comandă funcţionarea părţii fizice şi, realizarea aceloraşi funcţii se
poate face cu structuri diferite hardware sau software, cu grade de complexitate diferite, care pot
fi concentrate, mai mult, fie într-o zonă, fie în cealaltă.
ASC – Dan Olaru

Înţelegerea noţiunii de informaţie este foarte importantă. Din punct de vedre fizic aceasta este
reprezentată de stările maşinii, deci simbolic poate fi reprezintată ca o mulţime de cifre binare.
Acesta, la rândul ei poate fi structurată în cuvinte (grupuri de cifre binare). Cu ajutorul acestora
se pot reprezenta (codifica) simboluri, texte, numere, grafice, programe, funcţii, etc. Sistemul de
calcul poate realiza funcţii diferite, referitoare la memorarea, transmisia şi prelucrarea
informaţiei. Aceasta poate aparţine, de exemplu, domeniului ingineresc (referitoare la calcule,
proiectare, etc.) sau domeniului informatic (referitoare la prelucrarea fişelor, înregistrărilor de
date, etc.).
Dacă informaţia este reprezentată binar, deci cu cifre binare (bit, prescurtare de la binary digit),
prelucrarea acesteia se bazează pe operatori binari (dacă au două variabile de intrare), sau unari
(în cazul unei singure variabile). Cifrele binare pot reprezenta numere (câte obiecte are o
mulţime), dar şi valoarea de adevăr a unei propoziţii logice. De exemplu, se poate spune că dacă
o afirmaţie este adevărată, are valoarea logică “1”, iar dacă este falsă are valoarea logică “0”. De
aceea aceşti operatori se mai numesc operatori logici, deşi ei pot realiza şi funcţii aritmetice cu
numere sau cifre reprezentate binar.
Atunci când n+1 cifre binare reprezintă un număr (deci în baza 2), scris sub forma:
cncn-1…c3c2c0, valoarea zecimală a acestuia poate fi calculată astfel:

Val. zecimală = c020+c121+c222+c323+…+cn2n (1)

Din punct de vedere abstract (simbolic), tipurile şi caracteristicile operatorilor binari sunt descrise
de Algebra lui Boole. Printre operatorii binari (logici) simpli pot fi enumeraţi: non, şi, sau, şi-nu,
sau-nu, etc. Datorită corespondenţei cu teoria mulţimilor, operatorul şi poate fi simbolizat cu “∧”,
iar operatorul sau poate fi simbolizat cu “∨”. Simbolul “∧” a fost ales datorită similitudinii cu
noţiunea de “intersecţie de mulţimi” când elementul rezultant aparţine şi unei mulţimi şi
celeilalte. Simbolul “∨” a fost ales datorită similitudinii cu noţiunea de “reuniune de mulţimi”
când elementul rezultant aparţine sau unei mulţimi sau celeilalte.
Aşa cum s-a spus aceşti operatori pot avea o semnificaţie numerică sau logică. Astfel, avem
următoarea corespondenţă:

Operator funcţie logică funcţie aritmetică


----------------------------------------------------------------------------------------------
non negare logică schimbarea bitului de semn
şi =1 dacă ambele intrări =1 înmulţire aritmetică binară
altfel =0
sau =1 dacă cel puţin o intrare =1 adunare aritmetică binară
altfel =0

Dacă valoarea ieşirii depinde exclusiv de valorile instantanee ale intrărilor, se spune că operatorul
este de tip combinaţional. Dacă valoarea ieşirii depinde şi de evoluţia precedentă a intrărilor se
spune că operatorul este de tip secvenţial. Este interesant faptul că operatorii secvenţiali pot fi
construiţi pe baza operatorilor combinaţionali.
Operatorii pot fi complet defeiniţi de tabelul de adevăr asociat. Cel mai simplu caz este cel al
operatorilor combinaţionali, când sunt descrise valorile ieşirilor (out) pentru toate combinaţiile de
ASC – Dan Olaru

la intrări. Acestea pot fi parcurse dacă se folosesc chiar codurile binare ale numerelor naturale.
De exemplu pentru operatorii şi (AND), respectiv sau (OR) avem:

In1 In2 Out (AND) In1 In2 Out (OR)


--------------------------- --- -----------------------------
0 0 0 0 0 0
0 1 0 0 1 0
1 0 0 1 0 0
1 1 1 1 1 1

Sistemul de calcul trebuie să fie capabil să memoreze, să transmită şi să prelucreze informaţie. De


aceea, structura lui trebuie să conţină elemente de memorie şi dispozitive de prelucrare
(operatori). Pentru o anumită soluţie tehnică (implementare) structura hardware are la bază un
dispozitiv electronic elementar, care realizează o funcţie de operator binar, numit poartă logică.
Aceasta este structura cea mai simplă, având două intrări şi o ieşire şi poate realiza o operaţie
binară. Se arată că cu ajutorul unui anumit de poartă logică se pot construi atât operatori unari sau
binari, de diferite tipuri dar şi operatori secvenţiali. Rezultă că întreaga structură hardware a
calculatorului poate avea la bază un singur tip de poartă logică (sau eventual un număr foarte
redus de tipuri). Acesta este un aspect tehnologic şi economic deosebit de important, deoarece
orice structură poate fi implementată folosind acelaşi element de bază, şi realizat cu aceeaşi
tehnologie. De aceea, tehnicile care folosesc operatori logici sau digitali (digit - cifră) au avut în
ultimul timp o evoluţie impresionantă. Deşi proiectarea dispozitivelor este mai uşor de efectuat şi
de organizat, complexitatea circuitelor poate creşte mult mai ales datorită reprezentării numerice
a unor mărimi cu evoluţie continuă. Totuşi, tehnicile moderne de integrare a circuitelor
electronice a permis evoluţia şi dominanţa tehnicilor digitale. Deoarece un rol hotărâtor în acest
domeniu l-au avut, mai ales la început, companiile din SUA, terminologia engleză s-a impus în
acest domeniu şi este recomandată. De asemenea, simbolistica folosită pentru reprezentarea
circuitelor digitale s-a răspândit în forma americană (mai intuitivă), deşi nu este neapărat
standard.
De exemplu, operatorul sau poarta Şi-Nu (Şi cu ieşire negată) pe care s-a bazat evoluţia primei
serii de circuite integrate digitale are simbolul şi tabelul de adevăr de forma următoare:

In1 In2 Out (NAND)


___
A B AB
-------------------------------
A 0 0 1
___
AB 0 1 1
B 1 0 1
1 1 0

Se observă că, atunci când semnalul la una dintre intrări este 0 logic (jos), starea ieşirii va fi
forţată în starea jos (trecută în mod necondiţionat în starea jos). Dacă însă semnalul la o intrare
este în starea logică 1, starea ieşirii va fi determinată în mod direct de cea de-a doua intrare şi
deci poarta NAND se va comporta ca un circuit inversor. Se poate spune astfel, că acest tip de
ASC – Dan Olaru

operator, are intrările active pe zero. Acest mod de interpretare se poate extinde, în general,
pentru orice tip de dispozitiv, schemă sau circuit. Astfel, starea logică a unui semnal de intrare
care duce la acţiuni sau schimbări de stare semnificative va fi considerată ca stare activă. De
exemplu, dacă scrierea unei memorii (memorarea datelor) are loc atunci când semnalul de
comandă (WRITE) este 0, atunci se spune că acesta este activ pe zero şi se notează prescurtat în
schemă cu W .
Având în vedere că un operator (poartă) logic este realizat cu componente electronice, poate fi
caracterizat de mărimi electrice. Aceste dispozitive trebuie alimentate de la o sursă de tensiune
(5V, de obicei), se comportă la ieşire ca o sursă de tensiune (ne-ideală) şi pentru intrările,
comandate în tensiune, sunt caracterizate de anumite impedanţe. Dacă o sursă de tensiune este
ideală, impedanţa ei ar fi nulă, deci ar putea susţine un curent de valoare oricăt de mare. În
realitate ieşirea unei porţi nu poate comanda oricâte intrări ale altor porţi. De aceea, pentru un
anumit tip de poartă, este definit un număr maxim de porţi care pot fi comandate (fan-out).
Aceste mărimi electrice definesc, alături de timpul de propagare, performanţele porţii. Timpul de
propagare se referă la timpul necesar stabilizării tensiunii de ieşire, după ce la intrări a fost
schimbat nivelul de tensiune. Acest timp va caracteriza viteza de lucru a calculatorului.
Impedanţele de intrare determină curentul absorbit, şi implicit puterea absorbită. Structura porţii
trebuie să conţină tranzistori, care joacă rolul dispozitive de amplificare (active) pentru a
compensa atenuarea semnalului de tensiune care se transmite prin aceasta. Aceştia necesită la
rândul lor putere consumată, uneori chiar în lipsa tranziţiilor. Puterea consumată devine un
parametru deosebit de important atunci când numărul de dispozitive integrate este foarte mare,
depăşind, în prezent, ordinul milioanelor.
Trebuie menţionat că aceste dispozitive nu trebuie să funcţioneze în regim liniar, adică semnalul
de ieşire să depindă proporţional de semnalul de intrare. Pentru a se mări imunitatea la zgomot,
adică la semnale perturbatoare, suprapuse peste semnalul util, starea ieşirii trebuie să se schimbe
numai dacă tensiunea de la intrări depăşeşte anumite nivele. La ieşire, nivelul de tensiune trebuie
să corespundă nivelului standard pentru starea “sus” (high) sau “jos”(low).
Rezultă că implementarea (realizarea fizică) a unui operator (poartă) într-o formă ideală trebuie
să îndeplinească anumite condiţii oarecum contradictorii: putere consumată aproape nulă, viteză
de propagare cât mai mare, imunitate la zgomot cât mai mare. Acest deziderat a fost atins într-o
anumită măsură de circuitele integrate VLSI (very large scale integration) bazate pe tehnologia
C-MOS (complementary metal-oxide-semiconductor field-effect-transistor).

Operatorul binar unic


Din punct de vedere tehnologic, folosirea în majoritate a unei singure structuri de circuit
electronic este foarte eficientă. Astfel, întregul sistem poate fi alcătuit din circuite conţinând
diferite scheme conţinând combinaţii ale unui acelaşi circuit de bază. Rezultă că, odată pusă la
punct, aceeaşi structură semiconductoare va fi multiplicată la nivelul întregului sistem, diferitele
funcţiile fiind realizate prin diferite scheme de conexiune.
În algebra binară, bazată pe cifrele 0 şi 1 necesită numai trei operaţii: adunarea, înmulţirea şi
negarea (negaţia). Adunarea şi înmulţirea sunt operatori binari (cu doi operanzi), negaţia fiind
operator unar (transformă 0 în 1 sau invers). Deci, circuitele logice (cu două stări) ar necesita un
operator SAU (pentru adunare), unul ŞI (pentru înmulţire) şi unul pentru negaţie (NON). Dacă
ASC – Dan Olaru

este utilizat un operator de tip NAND (ŞI-NU), cu o intrare fixată la 1 logic, se poate obţine
operatorul de negaţie, datorită echivalenţei:

echivalent cu:
1
Funcţia ŞI se realizează simplu prin negarea ieşirii operatorului NAND:
1 AB
A
B __
AB
Relaţiile De Morgan, permit transformarea sumelor în produse şi invers, ca în exemplul de mai
jos, considerând nişte variabile binare oarecare a şi b:
a+ b = a⋅ b respectiv a⋅ b = a+ b
Astfel, ţinând cont că dubla negaţie nu are nici un efect, expresia de la ieşirea unui operator
NAND poate fi pusă sub forma:
A⋅ B = A+ B = A+ B
Rezultă că operatorul NAND joacă rolul unui operator SAU pentru variabilele de intrare negate.
Astfel, pentru a realiza un operator SAU mai este necesară negarea intrărilor:
_
A
A
1 _ A+B
1 B
B

Din cele arătate mai sus decurge concluzia importantă că implementarea unui circuit logic
oarecare se poate realiza cu un singurtip de operator (în cazul nostru de tip NAND).
Este interesant de remarcat că dacă într-o configuraţie oarecare avem mai multe nivele de
operatori aceştia realizează funcţii ŞI, respectiv SAU, în mod alternativ. Astfel, în exemplul de
mai jos, care conţine două nivele de operatori de tip NAND, operatorii de pe primul nivel joacă
rolul de operatori ŞI, iar cei de pe nivelul următor joacă rolul de operatori SAU:
__
AB
A
B __ AB ⋅ CD = AB + CD
C CD
D

Aceasta se poate justifica dacă expresia de la ieşirea operatorului combinat este adusă la o formă
de tip sumă, cu ajutorul relaţiilor De Morgan. Considerând ca intrări variabilele AB şi CD , şi
ţinând cont că dubla negaţie nu are nici un efect, se obţine:
( ) (
AB ⋅ CD = AB ⋅ CD = AB + CD = AB + CD )
2. Principii de funcţionare pentru un sistem de calcul
Aşa cum s-a menţionat un sistem de calcul trebuie să realizeze funcţii referitoare la memorarea,
trasmisia şi prelucrarea informaţiei. Deci, informaţia trebuie structurată şi vehiculată între
ASC – Dan Olaru

diferitele unităţi (părţi componente) ale calculatorului în vederea memorării sau prelucrării ei.
Rezultă că structura unui calculator trebuie să conţină căi de comunicaţie şi dispozitive
specializate. Structura de comunicaţie principală este numită magistrală (BUS) şi trebuie să facă
legătura cu păţile principale ale calculatorului, destinate comunicaţiei cu exteriorul, memorării
programelor sau datelor şi prelucrării informaţiei.
În forma simplificată, această configuraţie poartă denumirea de “maşină von Neumann” după
numele unuia dintre pionierii în domeniul teoriei calculatoarelor, şi are forma:

Unitate Memorie Dispozitive


centrală principală de intrare
+ HD şi ieşire

În cazul unui calculator personal (PC), magistrala este realizată la nivelul plăcii de bază (mother-
board), rolul unităţii centrale este jucat de propcesor (micro-procesor), memoria principală se
găseşte concentrată la nivelul RAM-ului (random-access-memory) şi este extinsă la nivelului
discurilor (hard-disk) iar dispozitivele de intrare-ieşire sunt constituite de tastatură şi monitor
(diplay), din unităţile de CD (DVD) şi floppy–disk, din dispozitivele grafice de intrare sau de
ieşire, de porturile de comunicaţie (paralel – pentru imprimantă, seial, USB, etc.).

Magistrala asigură transmisia datelor între diferitele dispozitive, de regulă, într-o manieră
bidirecţională, adică atât într-un sens, cât şi în celălalt. Acest mod de lucru este oarecum firesc în
cazul comunicaţiei dintre procesor şi memorie, dar se dovedeşte util chiar în cazul dispozitivelor
de intrare sau de ieşire.
Unitatea centrală conţine setul de operatori, necesari prelucrării datelor, dar şi dispozitive de
memorie locală, necesare funcţionării sau creşterii performanţelor (ca memoria Cache, de
exemplu).
Memoria RAM, implementată cu circuite integrate este volatilă (nu îşi conservă conţinutul la
dispariţia tensiunii de alimentare) şi are timp de acces redus, totuşi relativ mare faţă de memoria
Cache şi registrele procesorului. Memoria “de masă” (cu capacitate foarte) mare se află la nivelul
discului magnetic dur (hard-disk), este nevolatilă (dipolii magnetici îşi conservă starea în lipsa
tensiunii de alimentare) şi are timp de acces relativ ridicat faţă de memoria RAM..
Dispozitivele de intrare ieşire au cunoscut de-a lungul evoluţiei calculatoarelor o evoluţie
dinamică şi interesantă, începând cu dispozitivele cu bandă perforată sau disc flexibil şi
îndreptându-se către dispozitive optice (CD, DVD) sau memorii Flash.

Deşi unitatea elementară de informaţie este reprezentată de un bit este mai firesc şi eficient ca la
nivelul calculatorului informaţia să fie prelucrată şi vehiculată sub formă de “cuvinte” structurate,
în funcţie de tipul calculatorului pe un număr de 8, 16, 32, sau 64 de biţi. Numărul de biţi ales
pentru reprezentarea unui cuvânt este de regulă o putere a lui 2 (8=2 3, 16=24, 32=25, 64=26).
ASC – Dan Olaru

Alături de bit (o cifră binară), octetul (cuvântul de 8 biţi) este larg utilizat ca unitate intermediară
de reprezentare a informaţiei.

Este important ca numarul de biţi ai unui cuvânt să fie o putere a lui pentru a avea o mai bună
corespondenţă între valoarea unui cuvânt şi modul de selecţie a biţilor acestuia. Selecţia se poate
face cu circuite de tip selector sau decodificator (DEC), reprezentat în figura de mai jos. Acest
circuit îşi activează: ieşirile B0, B1 sau B2 în funcţie de valoarea codului reprezentat de cele 8
intrări: A0,…, A7. Astfel, dacă la intrări avem codul 101, va fi activată ieşirea a 5-a, adică B 4,
corespunzătoare valorii: 1 ⋅ 2 2 + 0 ⋅ 21 + 1 ⋅ 2 0 = 4 + 1 = 5

B0
A0
A1
DEC
A2 B7

Este evident că numărul de ieşiri ale unui decodificator cu n intrări va fi egal cu 2n. În structura
circuitelor unui calculator, în mod frecvent este folosit procesul de selecţie (pentru adresarea
memoriei, selecţia liniilor magistralei, transferul de date în cadrul procesorului, etc.). Deoarece
căile de date sunt grupate la nivel de cuvânt, trebuie să existe o corespondenţă între numărul căii
de date şi bitul corespunzător. Rezultă că este firesc ca numărul de selecţii posibile să corespundă
unei puteri a lui doi. Altfel, o parte din circuitele şi ieşirile decodificatoarelor vor rămâne
nefolosite.

Alături de decodificatoare, un rol foarte important în structura unui sistem calculator îl au


circuitele destinate dirijării fluxurilor de date, necesesare pentru comunicaţia cu magistrala, dar
mai ales pentru asigurarea funcţionării unităţii centrale şi tuturor dispozitivelor destinate
transferului sau prelucrării datelor (cuploare, interfeţe, controlere de memorie sau magistrală,
dispozitive specializate pentru calcul numeric sau prelucrări grafice, etc.).
În scopul dirijării fluxurilor de date se utilizează circuite multiplexoare (MUX) şi circuite
demultiplexoare (DMUX). Ambele circuite conţin linii de comandă pentru selectarea fluxurilor
de date. În funcţie de codul acestora, multiplexorul plasează pe liniile de ieşire nivelele logice
corespunzătoare căii de date selectate, iar demultiplexorul transferă datele de pe liniile de intrare
pe calea de date de ieşire selectată. Ca şi în cazul decodificatorului, pentru o implementare mai
eficientă, multiplexoarele şi demultiplexoarele sunt dotate cu un număr de căi de date
corespunzătoare unei puteri a lui doi.
ASC – Dan Olaru

Ieşire Intrare
date date
Căi de Căi de
intrare MUX ieşire
DMUX

Selecţie Selecţie

Fig.*. Schema de principiu pentru circuitul multiplexor şi demultiplexor

Pentru ca un operator să poată calcula rezultatul corespunzător a două variabile, acestea trebuie să
corespundă semnalelor (valorilor tensiunilor) de la intrările dispozitivului electronic respectiv.
Deci, pentru a obţine un rezultat corect este necesar ca atât intrările dispozitivului (operatorului)
cât şi ieşirile acestuia să se găsească într-o stare stabilă. Rezultă că, în afara operatorilor propriu-
zişi, unitatea centrală trebuie să conţină elemente de memorie care să asigure, pe de o parte intrări
stabile şi pe de altă parte reţinerea (stocarea) rezultatului în intervalul de stabilitate. Deci, este
necesar ca unitatea centrală să conţină, în afara operatorilor, elemente de memorie (registre de
memorie) care să furnizeze datele la intrarea operatorilor şi să memoreze rezultatele de la ieşire.
Dispozitivele periferice, indiferent pe ce principiu lucrează, din punctul de vedere al comunicaţiei
cu procesorul, sunt văzute sau identificate ca locaţii de memorie, sub forma aşa-ziselor porturi de
comunicaţie, specifice fiecărui dispozitiv. Acestea, de fapt, sunt registre de memorie care pot fi
citite, scrise sau şi scrise, şi scrise.
Fiecare dispozitiv periferic (de intrare/ieşire) conţine pe de o parte o structură constructivă
specifică (tastatură, monitor, imprimantă, etc.), aflată, de regulă, la distanţă de calculatorul
propriu-zis şi o structură electronică dedicată, care asigură comunicaţia cu magistrala (cuplor,
interfaţă, etc.). Uneori pot fi conectate mai multe unităţi identice, cuplate pe o magistrală
dedicată, la acelaşi cuplor cum este cazul unităţilor de hard-disk şi a celor de CD/DVD (Fig.*)
sau chiar al plăcilor de memorie RAM.
ASC – Dan Olaru

Magistrale externe dedicate penru RAM, HD,CD

Banc 1 Unitate Unitate


memorie HD 2 CD 2

Banc 1 Unitate Unitate


memorie HD 1 CD 1

Unitatea
Cuplor
centrală Cuplor Cuplor
memorie
RAM discuri (HD) CD, DVD

Magistrala principală

Fig.*. Exemplu de utilizare a magistralelor externe pentru unităţi identice

Trebuie menţionat că de-a lungul evoluţiei calculatoarelor modurile de implementare a


schematicii şi modurile de realizare au fost foarte diferite. În special, dacă ne referim la unitatea
centrală care conţine majoritatea dispozitivelor electronice, schimbările au fost spectaculoase.
Dacă primele calculatoare foloseau dispozitive de comutaţie cu relee sau tuburi electronice cu
vid, în prezent, tehnologia planară a siliciului a permis integrarea pe un singur cip a unor structuri
de procesoare complexe bazate pe milioane de dispozitive semiconductoare.

Magistrala de comunicaţie

1. Rolul şi amplasarea magistralei


Magistrala (Bus) calculatorului realizează conexiunea între diferitele dispozitive ale configuraţiei
şi asigură comunicaţia dintre acestea, referitoare la transmisia datelor şi informaţiilor de comandă
şi stare. Fizic magistrala este implementată la nivelul plăcii de bază (cazul PC), iar, mai rar la
anumite tipuri de calculatoare poate conţine segmente flexibile, pentru legatura între plăci
electronice sau subansamble de plăci (configurate în sertare sau dulapuri).
Performanţele magistralei se referă la cantitatea de informaţie care poate fi transmisă la un
moment dat (număr de linii de semnal) şi viteza de transmisie respectivă.
Magistrala propriu-zisă conţine căile căile de transmisie a semnalelor electrice (conexiuni).
Pentru funcţionarea acesteia sunt necesare dispozitive specifice (circuite integrate), grupate sub
denumirea de cipset care au rolul de a asigura trasmisia efectivă a semnalelor electrice, dar şi
funcţionarea protocolului de comunicaţie, pentru diferite regimuri de funcţionare.
Comunicaţia pe magistrală este diferită de simpla transmisie unor semnale electrice pe o linie
(conductor electric). În cazul liniei se consideră că la un capăt al liniei se găseşte un emiţător, sau
transmiţător, iar la celălalt capăt se găseşte un receptor. Primul se comportă ca o sursă de energie,
ASC – Dan Olaru

iar celălal ca un receptor. Dacă emiţătorul este o sursă de tensiune, acesta va debita curent către
receptor.
În cazul magistralei nu este importantă energia, ci informaţia trasmisă. Deci, în acest caz
transmiţătorul trebuie să furnuzeze suficientă energie (de fapt suficient curent, pentru că
emiţătorul se comportă ca o sursă de tensiune) pentru ca starea receptorului să se schimbe. Deci
puterea transmisă pe magistrală trebuie să fie capabilă să comande receptorul într-o manieră
corectă, deci să asigure imunitatea la zgomotul electric care apare datorită cuplajelor capacitive
sau inductive cu alte surse.
Dacă un dispozitiv nu este capabil să susţină curentul cerut este necesar ca pe linia de transmisie
să fie intercalat un amplificator de curent (buffer).
Spre deosebire de o linie electrică care transmite semnale continui, transmisia pe magistrală se
realizează în impulsuri, într-o manieră secvenţială. Adică, la anumite momente de timp
transmiţătorul îşi schimbă starea ieşirii, având drept consecinţă schimbarea stării receptorului.
Această comunicaţie trebuie să dureze un timp cât mai scurt. De aceea apariţia acestui eveniment
(schimbarea de stare) trebuie memorată la nivelul receptorului, permiţând astfel ca emiţătorul să
nu mai fie activ (să nu mai necesite semnal de comandă). Astfel circuitele de comandă ale
emiţătorului pot realiza alte funcţii. În plus, pentru ca circuitele de comandă ale emiţătorului să
nu depindă de viteza de transmisie pe magistrală, informaţia (schimbarea de stare) furnizată
acestuia trebuie, la rândul ei, memorată la nivelul emiţătorului. Rezultă că dispozitivele care sunt
conectate la magistrală trebuie dotate cu circuire de memorare (registre de memorie tampon, sau
registre latch), atât la emisie cât şi la recepţie. Deci magistrala trebuie să asigure transmisia
informaţiei de schimbare de stare, de la emiţător la receptor. Starea unei linii (low sau high), de
fapt reprezintă semnificaţia unei cifre binare, 0 sau 1 (bit). În acest fel se poate spune că pe
magistrală sunt transmise date, purtătoare de informaţie. Astfel, starea dispozitivului emiţător este
transmisă receptorului. În realitate, pe magistrală se transmit simultan grupuri de stări (sau biţi),
corespunzătoare cuvintelor de date prin care este codificată informaţia. Deci, zona transmisiei de
date a magistralei conţine un număr de linii corespunzător lungimii cuvântului de date (8, 16,32,
64 de biţi).
Pentru ca dispozitivele conectate la magistrală să funcţioneze într-o manieră flexibilă, acestea
trebuie identificate, şi la un moment dat trebuie stabilită calitatea de emiţător sau receptor (pentru
că un anumit dispozitiv poate transmite sau primi date).
Identificarea dispozitivelor sau zonelor de memorie între care se realizează comunicaţia se face
prin codul de adresă. Pe liniile de adresă ale magistralei va fi trasmis un cod care va activa un
anumit dispozitiv, registru sau o anumită zonă (cuvânt sau locaţie) de memorie.
Stabilirea calităţii de emiţător sau receptor se face cu ajutorul unor semnale de control (comandă),
trasmise pe anumite linii speciale. Dispozitivul care controlează magistrala (secvenţa de
comunicaţie) poartă denumirea de master. Este posibil ca alt dispozitiv să ceară controlul
magistralei (deci să obţină calitatea de master).
Începerea unei secvenţe de comunicaţie impune ca magistrala să fie liberă. Dacă se impun
comunicaţii urgente sau datorate unor evenimente exterioare imprevizibile (asincrone), cererea de
comunicaţie este transmisă pe linii de comandă speciale (linii de întrerupere) către procesor, care
joacă rolul de master în majoritatea timpului.
Este posibil ca, la un moment dat, să existe mai multe cereri de întrerupere simultane. În acest
caz, trebuie stabilită care dintre comunicaţii va fi realizată prim, prin intermediul unui disapozitiv
numit arbitru de priorităţi.
ASC – Dan Olaru

Protocolul de comunicaţie pe magistrală reuneşte totalitatea tipurilor de secvenţelor de


comunicaţie, de începere, încheiere şi sincronizare a acestora. Protocoalele de comunicaţie sunt
specifice tipului de calculator, plăcii de bază şi dispozitivelor conectate la aceasta.
Tot în cadrul magistralei pot fi considerate anumite circuite speciale de comunicaţie ca, de
exemplu, circuitul DMA (Direct Memory Access). Acesta poate asigura controlul magistaralei,
sincronizarea, generarea secvenţelor de început şi sfârşit, pentru realizarea transmisiei de
informaţie, cu viteză mare, sub forma pachetelor (masivelor) de date între diferite dispozitive şi
memorie (RAM), fără implicarea procesorului. De regulă, acest tip de transfer se face între hard-
disk şi memoria RAM.

Conform celor arătate, magistrala de comunicaţie, considerată ca ansamblul de căi de semnal şi


circuite electronice de control trebuie să conţină următoarele componente (organizate sub formă
de circuite integrate mai mult sau mai puţin distribuite):
- amplificatoare de magistrală (buffer);
- registre tampon (latch);
- arbitru de priorităţi;
- circuite de sincronizare.

Semnalele transmise pe magistrală au de regulă următoarea funcţie semnificaţie şi notaţie (pentru


calculator cu un cuvânt de date şi de adresă de 32 de biţi):
- conexiunile de date (D0,D1,…,D31)
- conexiunile de adresă (A0,A1,…,A31)
- linii de comandă
- scriere şi citire în memorie sau regiştri (R şi W);
- cerere control magistrală (BUSRQ – BusRequest);
- acceptare control magistrală (BUSAQ – BusAcknowledge);
- cerere de întrerupere (IRQ – Interrupt Request);
- acceptare cerere de întrerupere (IAQ – Interrupt Acknowledge);
- semnale de identificatre a stărilor procesorului, pentru primul ciclu masină, de exemplu.

Un dispozitiv din configuraţia calculatorului va fi conectat la magistrală după următoarea


schemă:
ASC – Dan Olaru

Conexiuni interne

Latch
date

Receptori Buffer Receptori


adresă date comenzi

Linii adresă
Linii date
Linii comandă

Fig.*. Conexiunile unui dispozitiv la magistrală

Fiecare dispozitiv trebuie dotat cu registre Latch şi circuite electronice pentru transmisie şi
recepţie. Acestea sunt amplificatoare cu ieşirea pe magistrală, capabile să susţină curentul de
comandă a altor dispozitive. De asemenea trebuie dotat cu circuite receptoare, conectate cu
intrarea la linia magistralei.
Conexiunile la liniile de date trebuie să fie bidirecţionale pentru orice dispozitiv care transferă
date în ambele sensuri. Trebuie menţionat că datele transmise nu reprezintă numai informaţiile
necesare execuţiei programului, dar şi cele legate de starea sau comanda unui dispozitiv.
Conexiunea la liniile de adrese se face numai cu circuite de emisie în cazul dispozitivelor de tip
master şi cu circuite de recepţie pentru cele care nu au niciodată această calitate. Registrul de tip
latch se comportă ca un grup de celule de memorie corespunzătoare unui grup de biţi (cuvânt).
Întreaga structură a calculatorului se bazează pe celule de memorie care au capabilitatea de a
transmite date între ele. Acestea sunt organizate fie în cadrul unui banc de memorie (circuit
integrat utilizat numai ca memorie), fie sub forma registrelor prezente la nivelul procesorului sau
a altor dispozitive. Conexiunile se fac fie la magistrală, fie în interiorul dispozitivului. Fiecare
celulă conţine, de fapt o celula de tip latch şi circuite (amplificatoare) de emisie/recepţie.

Carcateristic pentru conexiunea de tip magistrală este posibilitatea de comunicaţie în ambele


sensuri şi posibilitatea ca mai multe dispozitive să fie conectate împreună, pe aceleaşi linii. De
exemplu, dacă am avea două dispozitive A şi B conectate la o linie, atunci când A transmite
informaţie lui B, A se va comporta ca un emiţător şi B ca receptor. Dacă se doreşte comunicaţia
inversă, de la B la A rolurile se vor schimba. Rezultă că, pentru a fi posibil acest lucru, trebuie ca
la linia respectivă să fie conectate (în acelaşi timp) ambele emiţătoare şi ambele receptoare.
Conectarea simultană a receptoarelor nu este o problemă deoarece intrările acestora au impedanţă
de intrare de valoare mare şi nivelul de tensiune al liniei nu este afectat. Conectarea simultană a
două emiţătoare nu este însă permisă deoarece ele reprezintă surse de tensiune comandate. Dacă
iesirea unui emiţător se află la un moment dat în starea sus, iar a celuilalt în starea jos, primul va
debita un curent important care va trece prin circuitul de ieşire al celui de-al doilea, lucru
ASC – Dan Olaru

nepermis. Rezultă că emiţătoarele trebuie realizate şi comandate astfel încât acest lucru să nu se
întâmple. Soluţia tehnică este utilizarea ieşirii cu trei stări (three state), şi anume: starea Jos (nivel
de tensiune scăzut), starea Sus (nivel de tensiune ridicat), ambele cu impedanţă redusă, deci
capabile să furnizeze sau să absoarbă curent, şi starea izolată (a treia stare) atunci când impedanţa
de ieşire este ridicată şi nu mai influenţează nivelul de tensiune al liniei.
Rezultă că transferul bidirecţional al informaţiei se poate realiza prin activarea, la un moment dat,
a unui singur circuit de emisie (având starea Sus sau Jos) şi dezactivarea celorlalte emiţătoare
conectate la linia respectivă, prin trecerea lor în starea a treia (izolată). Atunci când un
transmiţător este activ, poate avea loc o operaţie de scriere (write) într-o celulă de memorie, dacă,
bineînţeles există şi o comandă internă de memorare (scriere) pentru celula respectivă. În acest
caz se spune că în celula receptoare are loc o operaţie de citire (read). Atunci un circuit de tip
latch îşi schimă starea, conform cu nivelul de tensiune de la intrare.
Intrare date

Comandă
memorare
b0 b1 b2 b3 b4 b5 b6 b7

Ieşire date
Fig.*. Registru Latch (paralel) pentru 1 octet (byte)

Buffer
Conexiunea la
emisie-recepţie
magistrala internă Memorare (pt.magistrală)
recepţie Magistrala
calculatorului
(Magistrala
Latch recepţie externă)

Latch emisie
Conexiune
Memorare
internă
emisie
Comandă scriere
Pe magitrală

Fig.*. Structura conexiunilor unei celule de memorie la magistrala internă şi externă

În mod obisnuit magistrala realizează comunicaţii bidirecţionale. Există totuşi cazuri când din
motive tehnice sau economice este mai avantajos ca transmisia de informaţie să se facă într-un
singur sens. În acest caz (magistrală de tip Daisy-chain), dispozitivele au intrări şi ieşiri separate
atât pentru emiţătorul şi receptorii liniei de adresă (EA, RA1, RA2, RA3) cât şi pentru emiţătorii şi
receptorii liniilor de date (ED1, ED2, ED3, ED4 şi RD1, RD2, RD3, RD4). O asemenea soluţie este
ASC – Dan Olaru

folosită uneori pentru dispozitivele conectate la acelaşi cuplor (sau interfaţă) cum ar fi unităţile de
memorie pe disc.

Linii de adrese

EA RA1 RA2 RA3

RD1 ED1 RD3 ED3 RD4 ED4


RD2 ED2

Linii de date

Fig.*. Magistrala de tip unidirecţional (Daisy-chain)

Dacă lungimea magistralei este scurtă în raport cu viteza de propagare a semnalului (şi
stabilizarea nivelului de tensiune), atunci se poate considera că transmisia stărilor este instantanee
şi că în secvenţa semnalelor sau comenzilor nu trebuie să fie introduse întârzieri, sau timpi de
aşteptare (magistrală sincronă).
Un caz special apare atunci când nu există întârzieri datorită propagării, dar viteza de răspuns a
anumitor circuite este mai redusă. De exemplu, timpul de memorare poate fi mai lung decât
timpul scurs între două schimbări de stare a procesorului. Când acest lucru este cunoscut,
cuplorul de memorie trebuie să introducă semnale de aşteptare (wait) care să prelungească starea
de la ieşirea procesorului.
Astfel, secvenţa de scriere în memorie (folosind semnalul de scriere Write) poate decurge ca în
Fig.*

În cazul când timpul de propagare pe magistrală este relativ mare, din punctul de vedere al
procesorului (sau dispozitivului emiţător), nu poate fi cunoscut cu precizie momentul când
semnalele sunt stabile la intrările unui dispozitiv. De exemplu, procesorul poate dezactiva
semnalul de scriere înainte ca acesta să se fi propagat până la intrarea memoriei. Atunci sunt
necesare conexiuni şi semnale suplimentare pentru confirmarea sosirii informaţiei de schimbare
de stare la nivelul receptoarelor (magistrală asincronă). În Fig.* este dat un exemplu simplificat
de magistrală cu protocol de tip hand shake (strângere de mână). Acesta este asemănător salutului
prin strângere de mână. Pentru aceasta sunt folosite semnalele de sincronizare suplimentare:
SendData, DataSent, DataAcepted, BusClear.
ASC – Dan Olaru

Send data

Data sent
Dispozitiv Dispozitiv
“master” Data acepted “slave”
Bus clear

Fig.*. Semnalele de sincronizare pentru magistrala “hand-shake”

Astfel, dispozitivul Master transmite semnalul de cerere de date SendData (“întinde mâna”).
Atunci când dispozitivul Slave primeşte acest semnal (după timpul de propagare respectiv)
validează (emite) datele pe liniile corespunzatoare şi răspunde cu semnalul DataSent (“întinde şi
el mâna”). Când semnalul DataSent ajunge (după un timp de propagare) la dispozitivul Master,
acesta ia la cunoştiinţă că datele sunt stabile la intrările lui şi îşi poate comanda circuitele Latch
pentru memorare. După aceasta datele nu mai sunt necesare la intrările lui şi este cazul să
înştinţeze dispozitivul transmiţător (care are calitatea de Slave) că acesta poate să elibereze
magistrala, adică să îşi comande ieşirile în starea a treia (de impedanţă mare). Astfel, dispozitivul
Master transmite semnalul DataAccepted (“îşi retrage mâna”). Atunci când dispozitivul Slave îl
primeşte, acesta va avea confirmarea că datele transmise au fost memorate şi eliberează
magistrala, odată cu transmiterea semnalului BusClear care înştinţează dispozitivul “master” că
poate utiliza magistrala. După receptionarea acestui semnal, eliberarea magistralei este
confirmată şi din acest moment Master-ul poate utiliza magistrala, activând emiţătoarele proprii,
care până atunci au fost menţinute în starea a treia.

Noţiunea de magistrală ocupată sau liberă se referă, pe de o parte la starea electrică a liniilor, iar
pe de altă, parte la existenţa unei secvenţe de comunicaţie. În primul caz, toate emiţătoarele
dispozitivelor conectate la magistrală sunt în starea a treia (izolată), potenţialul liniei este
“flotant”, adică este la discreţia oricărei surse de tensiune (emiţător) care poate fi activată. Deci,
în această stare, un dispozitiv poate commanda magistrala, dacă aceasta se doreste. În cel de-al
doilea caz, magistrala este considerată ocupată dacă o secvenţă de comunicaţie este în curs şi
liberă în situaţia contrară. În lipsa unor semnale speciale care să indice că există o asemenea
secvenţă, situaţia magistralei poate fi detectată fie prin analiza evoluţiei semnalelor electrice, fie
prin alocarea calităţii de Master unui singur dispozitiv, la un moment dat.

Performanţele calculatorului sunt determinate, printre altele, de numărul de conexiuni ale


magistralei. Putem folosi denumirea de spaţiu de adresă sau zonă de adresă pentru numărul de
linii utilizate pentru adresare şi spaţiu de date sau zonă de date pentru cele de date. Cu cât avem
un spaţiu de adresă mai mare, cu atât pot fi adresate mai multe locaţii (cuvinte) de memorie, deci
poate fi accesată o memorie RAM mai voluminoasă. Cu cât avem un spaţiu de date mai mare, cu
atât valorile numerelor care pot fi reprezentate cu un cuvânt sunt mai mari, deci nu este nevoie ca
reprezentarea numerelor întregi sau zecimale mari să fie departajată pe mai multe cuvinte.
Modul de calcul pentru numărul maxim de adrese, ca şi pentru valoarea maximă reprezentată de
un cuvânt, este acelaşi ca pentru evaluarea unui număr binar. Ca şi la reprezentarea binară, pentru
ASC – Dan Olaru

o procesare mai uşoară, numărul de conexiuni folosit reprezintă, de regulă, o putere a lui 2. De
exemplu, o magistrală care conţine 16 linii de adresă poate accesa: 216-1 = 65536 cuvinte de
memorie. Analog, o magistrală care conţine 32 linii de date poate transmite cuvinte cu valoarea
maximă: 232-1 =4294967296. Pentru a lucra mai uşor cu aceste numere, se obişnuieşte ca să fie
exprimate în multipli de biţi, octeţi (bytes) sau cuvinte specifice unui anumit calculator. De
asemenea se foloseşte prescurtarea “b” pentru biţi, “B” pentru bytes şi “W” (word) pentru
cuvinte. În această convenţie, multiplu kilo nu reprezintă 1000 de unităţi, ci 1024 de unităţi,
corespunzător puterii 10 a lui 2, adică 210=1024. Rezultă că 65536 cuvinte reprezintă de fapt 64k
cuvinte, pentru că: 65536 = 64*1024.
Trebuie remarcat că în cazul calculatoarelor complexe, în această categorie putând fi considerate
şi anumite configuraţii de PC, structura de magistrală poate evolua către arhitecturi de magistrale
multiple, care lucrează cu număr de linii şi viteze diferite. De exemplu, se pot utiliza magistrale
separate pentru perifericele rapide (cuplorul de discuri sau placa video), şi respectiv magistrale cu
viteză redusă pentru perifericele lente (cuplor de imprimantă, interfeţe seriale, etc), ca în Fig.*.
Bineînţeles că nici legătura cu memoria RAM, nici conexiunea DMA nu este necesară magistrale
separate. Totuşi această structură permite ca unitatea centrală să poată da comenzi unor
dispozitive, în timp ce are loc un transfer DMA şi, de asemenea, să comunice cu memoria cu un
protocol mai eficient şi cu o viteză mai mare decât cea permisă de magistrala rapidă.
În cazul unei structuri cu o singură magistrală, realizarea ciclurilor DMA trebuie să nu interfereze
cu acţiunea procesorului şi, în acelaşi timp, să-şi păstreze eficienţa. Astfel, sunt utilizate câteva
strategii ca, de exemplu, metodele: ********

Cuplor Interfaţă Periferie


imprimantă serială lentă

Magitrală lentă
CPU Magitrală rapidă

Periferie rapidă
Controler Cuplor
Placă video
DMA discuri
Magitrală unităţi de disc
RAM
Conexiune DMA

Fig.*.Structură de magistrală multiplă.

Transferul DMA
Pentru transferurile de tip DMA se utilizează un controler special, care poate fi integrat în cadrul
cip-setului plăcii de bază. Pentru analiza funcţionării DMA se va lua în consideraţie o structură
mai simplă (Intel 8257), specifică unui microsistem cu procesorul Z-80, dezvoltat înaintea
apariţiei IBM-PC.
ASC – Dan Olaru

-I/OR 1 40 A7 Ampli
DB 0-7
-I/OW 2 39 A6 Date Can 0
-MEMR 3 38 A5 DRQ0
-MEMW 4 37 A4 -IOR DACK0
MARK 5 36 TC -IOW
READY 6 35 A3
HLDA 7 34 A2 CLK
ADSTB 8 33 A1 Can 1
RESET
AEN 9 32 A0 DRQ1
HRQ 10 31 Vcc A0 Bloc R/W DACK1
-CS 11 30 D0 A1
CLK 12 29 D1 A2
RESET 13 28 D2 A3
-DACK2 14 27 D3 Can 2
-CS
-DACK3 15 26 D4 DRQ2
DRQ3 16 25 -DACK0 A4 DACK2
DRQ2 17 24 -DACK1 A5
DRQ1 18 23 D5 A6
DDRQ0 19 22 D6 A7 Can 3
GND 20 21 D7
Ready DRQ3
DACK3
HRQ
HLDA Bloc C-dă
Arbitru
-MEMR priorităţi
-MEMW
AEN
ADSTB

TC
MARK

Fig.* Schema bloc a controlerului DMA

Controlerul 8257 poate asigura transferul DMA, simultan (în mod time-sharing) între memorie şi
patru porturi. Sincronizarea operaţiilor de citire sau scriere se face prin semnale de eşantionare,
care comandă memorarea datelor, după ce acestea ajung la nivele stabile pe magistrală.
Semnificaţia semnalelor utilizate este următoarea (semnul minus arată că sunt active pe “0”):
-IOR – de la/spre magistrală, pentru eşantionarea datelor citite din port;
-IOW – de la/spre magistrală, pentru eşantionarea datelor scrise în port;
-MEMR - de la/spre magistrală, pentru eşantionarea datelor citite din locaţia de memorie
adresată;
-MEMW - de la/spre magistrală, pentru eşantionarea datelor scrise în locaţia de memorie
adresată;
MARK – semnal emis la fiecare al 128-lea octet transferat;
READY – semnal care permite introducerea unor stări de aşteptare, SW, înaintea încheierii
transferului, având portul şi locaţia de memorie selectate;
READY – semnal primit de la magistrală, indicând eliberarea acesteia, în vederea transferurilor
DMA;
ADDSTB – semnal de eşantionare pentru încărcarea unui port adiţional (de tip 8212) cu octetul
cel mai semnificativ al adresei de memorie;
AEN – semnal indicator al ocupării magistralei pentru transferuri DMA, care validează emiterea
octetului cel mai semnificativ de adresă din portul adiţional;
ASC – Dan Olaru

HRQ – semnal de solicitare a magistralei, în vederea eliminării procesorului;


-CS - semnal de selecţie a controlerului, invalid în timpul ciclurilor DMA;
CLK - semnal de sincronizare (tact sau ceas);
RESET - semnal de iniţializare a controlerului;
-DACK0,1,2,3 - semnal de selecţie pentru porturile corespunzătoare canalelor 0,1,2,3. Se emite
după obţinerea magistralei, în vederea selectării portului, pentru efectuarea transferului;
DRQ0,1,2,3 – semnal care semnalizează controlerului DMA că este necesar un transfer pe
canalele 0,1,2,3;
TC – semnalizează sfârşitul transferului şirului de octeţi. Se emite în timpul ultimului transfer.

Memoria calculatorului

Memoria sistemului de calcul are rolul pe de o parte de a stoca programele şi datele de sistem şi
de aplicaţie şi pe de altă parte de a facilita şi îmbunătăţi comunicaţia şi operarea la nivelul
calculatorului. Alături de elementele de memorie distribuite la nivelul unităţii centrale sau
dispozitivelor periferice (registre Latch sau registre ale unităţii centrale) sistemul de calcul este
dotat cu blocuri de memorie cu capacităţi şi viteze de acces diferite, implementate şi realizate sub
diferite forme tehnologice. Trebuie menţionat că în cadrul comfiguraţiei sistemului anumite
periferice pot fi considerate ca dispozitive de intrare-ieşire, desi, în esenţă sunt dispozitive de
memorare pe un suport amovibil, destinat trasportului de informaţie în exteriorul calculatorului,
ca de exemplu: discurile de tip disc flexibil (Floppy disc), CD (Compact disk), DVD (Digital
Video disk), memoriile Stick sau Flash, etc.

Din punct de vedere tehnologic, pentru dispozitivele de memorie sunt folosite soluţii tehnice
diferite, cu caracteristici diferite. Deoarece memoria ocupă un loc esenţial în funcţionarea
calculatorului, de-a lungul evoluţie calculatoarelor s-a acordat o mare atenţie găsirii unor soluţii
tehnice cât mai eficiente şi cu caracteristici cât mai performante.
Este important că sistemul de calcul trebuie să conţină, în mod necesar, măcar parţial, memorii
nevolatile care îşi pot păstra conţinutul atunci când dispare tensiunea de alimentare (calculatorul
nu mai este alimentat electric), spre deosebire de memoria volatilă, care îşi pierde conţinutul în
lipsa tensiunii de alimentare. În altă ordine de idei, funcţionarea calculatorului necesită, pe de altă
parte, o memorie cu viteză de acces ridicată, dar care poate avea o capacitate mai redusă şi poate
fi volatilă, utilizată de unitatea centrală în timpul execuţiei programelor (memoria prinsipală sau
RAM) şi pe de altă, o memorie de masă, cu capacitate foarte mare, nevolatilă, care conţine
cantităţi foarte mari de informaţie.
Este important de menţionat că memoria principală terbuie să permită accesul rapid şi imediat la
nivelul fiecărei unităţi de date memorate (cuvânt de date), denumită şi memorie cu acces aleator
(random access memory - RAM), în sensul că accesul se poate face la orice cuvânt, oricare ar fi
acesta. Spre deosebire de aceasta, memoria de masă poate avea un caracter secvenţial, adică poate
permite accesul la un anumit cuvânt de date numai după ce a fost citită, cuvânt cu cuvânt, o
anumită zonă de date în care se află cuvântul respectiv. Acest mod de lucru apare deoarece
posibilităţile de sincronizare, adică de identificarea sau regăsirea unor elemente de informaţie se
poate face numai numai la nivelul unor şiruri sau blocuri de informaţie înregistrată, urmând ca
identificarea informaţiei în cadrul şirului să se facă prin citirea succesivă a conţinutilui acestuia.
ASC – Dan Olaru

În acest mod se lucreză cu blocurile înregistrate pe bandă magnetică sau cu sectoarele


înregistrate pe pistele circulare ale discurilor.
Încă din perioada timpurie a evoluţiei calculatoarelor s-a observat că materialele magnetice au
proprietăţi corespunzătoare unei memorii nevolatile, adică dacă sunt magnetizate într-un anumit
sens, atunci când sunt plasate în câmpul magnetic produs de trecerea unui curent electric, acestea
îşi păstrează această proprietate (magnetizaţie) până când are loc un nou proces de magnetizare în
sens opus.
La începutul evoluţiei calculatoarelor, memoria RAM era realizată cu ajutorul unor matrici,
conţinând în noduri inele de ferită (folosite ca dipoli magnetici), parcurse de o reţea de
conductoare electrice, folosite atât pentru magnetizare, dar şi pentru citire, utilizând anumite
procese de regim tranzitoriu. Pentru memoria de masă se folosea tamburul magnetic, discul
magnetic, banda magnetică. În perioada modernă a calculatoarelor, marcată de utilizarea
circuitelor integrate, memoria RAM este realizată cu dispozitive semiconductoare, iar memoria
de masă foloseşte discuri etanşe (hard-disk – HD), care permit densităţi mari de informaţie prin
eliminarea prafului şi impurităţilor.

Pentru anumite scopuri sunt necesare chiar memorii nevolatile a căror conţinut nu se schimbă,
după procesul de fabricaţie sau configurare a calculatotului, utilizate, de exemplu, pentru stocarea
programului de încărcare a sistemului de operare sau pentru zona BIOS. Acestea sunt memorii de
tip ROM (read only memory), realizate de regulă, sub formă de matrice conductoare, având în
noduri diode. Totuşi, pentru necesităţi de reconfigurare, s-au dovedit utile unităţi de memorie
ROM programabile sau reprogramabile, realizate în diferite tehnologii: PROM (programable
ROM, EPROM (erasable PROM), EEPROM (electric EPROM).
Din punct de vedere tehnologic s-a dovedit că se pot realiza memorii cu capacităţi mult mai mari
(deci cu densitate de componente pe cip mai mare) dacă, în loc de circuite bistabile (pe care se
bazează memoriile statice), se folosesc elemente de memorie bazate pe stocarea informaţiei în
capacitatea de poartă a unui tranzistor MOS, cunoscute sub denumirea de memorii dinamice.
Folosirea memoriilor statice este mai simplă, în sensul că, o dată ce informaţia a fost scrisă în
memorie, aceasta se păstrează un timp nelimitat (dacă există tensiune de alimentare). Memoria
dinamică, având un caracter capacitiv, îşi pierde în timp conţinutul dacă nu au loc procese
repetate de reînscriere a informaţiei (cicluri de refrech), comandate de procesor sau alt circuit
spacializat.
Totuşi, pentru memoria Cache, care lucrează, de regulă, cu acceeaşi frecvenţă de tranziţie ca şi
procesorul, se preferă utilizarea dispozitivelor statice, permiţând eliminarea ciclurilor de
reînprospătare care necesită un timp preţios pentru transferul de informaţie cu procesorul.
Organizarea şi modul de acces la memorie este diferit în funcţie de tipul şi funcţionalitatea
acesteia.
Astfel, memoria RAM conţine, de regulă mai multe bancuri implementate cu circuite integrate
(cipuri) care pot fi activate separat, cu semnalul CS (cip select) şi ale căror ieşiri pot fi activate cu
semnalul OE (output enable). Fiecare cuvânt de date este accesat separat, corespunzător unui cod
plasat la intrările de adresă.
Un sistem poate funcţiona cu o memorie RAM cu o capacitate adresabilă mai mare decât este
permisă de numărul de conexiuni disponibile ale procesorului sau dispozitivului Master care
comandă liniile de adresă. În acest caz, se spune că memoria este paginată hardware (deoarece se
referă la schema de conexiuni). Atunci, o parte din informaţia de adresă provine de la un registru
ASC – Dan Olaru

de tip latch, iar restul de la magistrala de adresă. Astfel, este necesar ca procesul de adresare să se
execute în două etape (secvenţe). În prima, în registrul latch este înscrisă informaţia numărului de
pagină. Pentru aceasta sunt folosite o parte din conexiunile magistralei de adrese, în funcţie de
numărul de pagini. La ieşirile circuitului Latch se va menţine această informaţie, în a doua etapă,
când se va produce adresarea propriu-zisă. De regulă, din motive tehnologice, memoria este
constituită din mai multe bancuri, implementate cu circuite integrate (cipuri) diferite.
Selecţia fiecăruia se face cu semnalele de cip select produse la ieşirea decodificatorului (DEC).
Acesta activează câte o singură ieşire (pentru starea corespunzătoare selecţiei cipului de
memorie), în funcţie de codul binar furnizat de registrul Latch.
Metoda de adresare paginată, pentru magistrale de adresă şi date cu câte opt conexiuni (8 biţi de
adresă şi 8 biţi de date), pentru o memorie implementată cu patru cipuri este schiţată în Fig.*.
Cele patru cipuri de memorie sunt identice şi au câte şase intrări de adresă şi opt linii de date. Se
observă, că în acest caz numărul de pagini adresate, prin intermediul circuitului Latch este egal cu
numărul de cipuri utilizate pentru implementarea memoriei. Bineînţeles că într-o schemă
oarecare, se pot folosi diferite combinaţii între numărul de pagini adresate şi numărul de cipuri
folosite pentru implementarea memoriei, cu condiţia ca numărul de pagini să poată fi codificat cu
numărul de biţi corespunzători liniilor de adresă.

A0-A5

A5
latch DEC
A4

A0-A5
CS A0-A5 CS CS A0-A5 CS A0-A5

M0 M1 M2 M3
W W W W

OE D0-D7 OE D0-D7 OE D0-D7 OE D0-D7


Write
Read

D0-D7

Fig.*. Schema de adresare “paginată” pentru o memorie implementată cu 4 cipuri.

În afara memoriei RAM care a existat totdeauna în structura unui calculator, s-a dovedit că este
utilă folosirea unei memorii speciale, cunoscută sub denumirea de Cache (sau memorie
intermediară). Aceasta poate avea două funcţii principale. Pe de o parte poate fi utilizată ca
memorie tampon în care sunt aduse pagini din memoria RAM, care conţin date acesate de
procesor la un moment dat. Pe de altă parte, (aşa cum este considerată de obicei) este utilizată
pentru stocarea datelor (sau instrucţiunilor de program) cel mai des utilizate de procesor, pe
ASC – Dan Olaru

parcursul execuţiei unui program, indiferent de ordinea în care sunt plasate în memoria RAM.
Pentru a realiza această funcţie, memoria Cache trebuie să stocheze atât cuvinte de date din
memoria RAM, dar şi informaţii asupra codului de adresă unde se găsesc acestea (etichete sau
Tag-uri). Astfel, datele sunt căutate în memoria Cache într-o manieră asociativă, adică nu după
adresa acestora, ci după conţinutul acestora, după principiul următor. Înainte ca procesorul să
facă acces la o anumită la o anumită adresă din RAM, verifică dacă, nu cumva, codul acestei
adrese (sau eventual partea de adresă din cadrul paginii curente) nu se găseşte în memoria Cache.
Dacă da, datele sunt citite (foarte rapid) numai din memoria Cache. Dacă nu, datele se citesc din
memoria RAM (relativ mai lent), dar acestea sunt copiate şi în memoria Cache, într-o locaţie
stabilită după un algoritm care să permită menţinerea datelor utilizate cel mai des. Căutarea
datelor, în mod asociativ (printr-un proces de comparare succesivă) se face, de asemenea după
algoritmi care urmăresc criterii de performanţă.
Constructiv, memoria Cache se găseşte cât mai aproape de procesor, eventual chiar pe acelaşi cip
şi lucrează la o frecvenţă maximă comparabilă sau identică procesorului. Spre deosebire de
memoria RAM aceasta are un mod de conectare, special construit, pentru mărirea performanţelor
de procesare. De regulă, este conectată cu procesorul prin mai multe magistrale dedicate, care
permit adresări simultane şi cicluri de citire/scriere simultane pentru mai multe zone ale
memoriei. Capacitatea memoriei cache este în general redusă faţă de memoria RAM, în special
din motive economice, constructive dar şi pentru a putea mări viteza de căutare în mod asociativ.

Memoria totală a calculatorului este distribuită sub următoarele forme:


- setul de registre ale unităţii centrale (procesorului);
- memoria Cache (memorie temporară);
- memorie ROM (continând programele BIOS);
- memoria pe discuri.

Unitatea centrală

Unitatea centrală (procesorul) are rolul de a coordona întreaga activitate a calculatorului


(transferul de informaţie şi comanda dispozitivelor) şi de a efectua execuţia programelor prin
calcule şi prelucrări asupra datelor de intrare. Procesorul este, de obicei dispozitivul Master
asigurând adresarea memoriei şi comunicaţia cu dispozitivele. Toată activitatea acestuia se
bazează pe execuţia instrucţiunilor de program. Funcţiile de sistem sunt îndeplinite de programele
(procedurile) sistemului de operare sau BIOS-ului. Programele de aplicaţie, în timpul execuţiei
preiau controlul procesorului care execută instrucţiunile acestora. Execuţia unei instrucţiuni se
bazează pe mai multe cicluri maşină, fiecare dintre ele fiind compus din mai multe faze sau stări.
Cicli maşină se referă în general la etapele de execuţie a unei instrucţiuni, de exemplu: încărcarea
instrucţiunii (etapa de “fetch”), decodificarea acesteia, calculele aritmetice, memorarea
rezultatelor.
Unitatea centrală conţine un automat sau maşină secvenţială (cu mai multe stări) care realizează
transferurile de date şi comanda magistralei. Calculele propriu-zise sunt efectuate în unitatea sau
operatorul aritmetic. Tranziţia stărilor maşinii secvenţiale are loc sub comanda unor impulsuri
(de tact) generate de oscilatorul (ceasul) sistemului plast la nivelul plăcii de bază sau, de obicei,
integrat în structura procesorului.
ASC – Dan Olaru

Procesorul conţine, în principal, registre cu rol de memorii tampon, pentru câte un cuvânt de date
şi unul sau mai mulţi operatori aritmetici şi logici. Operatorii aritmetici (şi logici) au o structură
combinaţională adică, atunci când la intrarea lor sunt plasate anumite date de intrare (sub formă
de nivele de tensiune) la ieşire se obţine codul corespunzător rezultatului. În realitate stabilizarea
datelor la ieşire nu este instantanee datorită timpului necesar propagării semnalelor electrice prin
structura electronică. Se poate arăta că orice operator aritmetic se poate realiza ca o structură de
porţi, de obicei bazată, în principal, pe acelaşi tip de poartă, care corespunde cel mai bine unei
anumite tehnologii de fabricaţie. Asa cum s-a mai arătat mai sus, în algebra binară (Booleană) din
punct de vedere formal (adică după modul de reprezentate) nu există deosebire între operaţiile
aritmetice sau logice, la nivelul unui singur bit (cifră binară). Deşi operaţiile aritmetice implică
numere (care arată numărul de elemente ale unei mulţimi), iar operaţiile logice implică valori de
adevăr (corespunzătoare unor afirmaţii logice subînţelese), modul de operare este similar şi se
bazează pe operatori tip poartă. În realitate calculele aritmetice implică grupuri de biţi (cuvinte)
care reprezintă coduri numerice binare. Şi operaţiile logice se pot face la nivelul grupurilor de
biţi, de exemplu, operaţiile de negare cuvânt (schimbare din 0 în 1 şi din 1 în zero pentru toţi
biţii), deplasare în cadrul unui cuvânt (poziţiile biţilor sunt translatate la stânga sau la dreapta),
comparare între două cuvinte (bitul rezultatului va fi zero dacă biţii corespondenţi sunt diferiţi).
Automatul secveţial al unităţii centrale trebuie să genereze semnale corespunzătoare diferitelor
stări. Principiul de lucru se bazează pe utilizarea semnalului de ceas (impulsuri cu o anumită
frecvenţă) şi generarea unor semnale diferite în funcţie de numărul stării, corespunzător
numărului de ordine al impulsului curent (Fig.*).

Oscilator Numărător
Impulsuri
de tact
A B C Cod binar

Decodificator
(de stări)

Semnale activare stări

O0 O1 O2 O3 O4 O5 O6 O7

Fig.*. Principiul de generare al semnalelor de stare

Circuitul numărător generează la ieşire un cod corespunzător numărului impulsului de la intrare


(reprezentat de biţii: A, B, C). Aceasta se poate efectua dacă tranziţia stărilor este produsă nu de
palierele impulsurilor, ci de fronturile acestora. În Fig.* sunt prezentate, pentru cazul unui
numărător cu patru stări, formele de undă corespunzătoare impulsurilor de intrare şi stării ieşirilor
(A şi B) ale numărătorului. În funcţie de acestea, “decodificatorul” va activa câte o ieşire (O 0, O1,
O2, sau O3) cu numărul de ordine dat de codul de la ieşirea numărătorului, aceasta trecând în
starea 1, restul ieşirilor rămânând în starea 0.
Pentru cazul din Fig.*, tabelele de adevăr corespunzătoare numărătorului de trei biţi (cu opt stări)
şi decodificatorului cu opt ieşiri, sunt următoarele:
ASC – Dan Olaru

Tabelul 1
Numărul Ieşiri: ABC Ieşiri: O0 O1 O2 O3 O4 O5 O6 O7
impulsului (numărător) (decodificator)
0 0 0 0 1 0 0 0 0 0 0 0
1 0 0 1 0 1 0 0 0 0 0 0
2 0 1 0 0 0 1 0 0 0 0 0
3 0 1 1 0 0 0 1 0 0 0 0
4 100 0 0 0 0 1 0 0 0
5 101 0 0 0 0 0 1 0 0
6 110 0 0 0 0 0 0 1 0
7 111 0 0 0 0 0 0 0 1

Impulsuri la intrarea numărătorului

Stările ieşirii B a numărătorului

Stările ieşirii A a numărătorului

00 01 10 11 Codurile corespunzătoare stărilor A şi B

A=0 A=0 A=1 A=1


B=0 B=1 B=0 B=1
Ieşirea activă a decodificatorului
O0=1 O1=1 O2=1 O3=1 (cu nivelul 1, restul având nivelul 0)

Fig.* Formele de undă şi stările la intrarea şi ieşirile unui numărător de 2 biţi (patru stări).

Bineînţeles, după un anumit număr de impulsuri ciclul maşină se reia. În realitate conţinutul şi
succesiunea stărilor depinde şi de codul instrucţiunii active. Deci, în locul unui numărător simplu
acţiunează, de fapt, un circuit de secvenţă ale cărei tranziţii de stări sunt comandate de
impulsurile de tact.
In cadrul procesorului, semnalele corespunzătoare fiecărei stări active comandă direcţia fluxurilor
de date şi încărcarea registrelor cu operanzi de intrare, rezultate de ieşire sau date transferate, de
la, sau către, magistralele interne sau externe. Dirijarea fluxurilor de date este guvernată de
circuite multiplexoare care dirijază semnalele, corespunzătoare datelor de intrare, către un grup
sau alt grup de ieşiri, în funcţie de nivelul semnalului de selecţie.

Structura minimală a unităţii centrale


Unitatea centrală, în principal, are rolul de a executa operaţii artmetice şi logice cu date
(organizate în cuvinte) stocate în memoria RAM. Aceasta se ralizează conform unei anumite
ASC – Dan Olaru

secvenţe de lucru, specifice unei anumite instrucţiuni. Deci, în principiu, aşa cum s-a arătat mai
sus, procesorul trebuie să conţină o unitate de comandă (UC), cu rol de automat secvenţial, şi o
unitate aritmetică-logică (ALU- aritmetic logic unit), cu rol de operator efectiv. Pentru ca datele
să fie procesate, trebuie să fie prezente la intrările unităţii aritmetic-logice. Dacă comunicaţia cu
memoria RAM se realizează (ca de obicei) printr-o singură magistrală, rezultă că, chiar dacă un
operand ar fi preluat direct de pe magistrală, trebuie să existe cel puţin un registru care să
stocheze celălalt operand şi cel puţin un registru Latch în care să fie depus rezultatul, care apoi
urmează să fie transferat tot în acumulator. Plasarea operanzilor trebuie specificată la nivelul
instrucţiunilor de program. Astfel, procesorul trebuie să conţină, cel puţin, un registru de
manevră, cu rol de memorie temporară, numit Acumulator care să poată fi referit şi de
instrucţiunile maşină. Aceastea fac parte din limbajul de asamblare ale cărei instrucţiuni
corespund, în mod direct, cu secvenţele de lucru ale procesorului.
Pentru aducerea fiecărei instrucţiuni din memorie (prin ciclul de “fetch”), sub forma codului
corespunzător, reprezentat pe unul sau mai multe cuvinte, este necesară adresarea ei. Prin aceasta
se înţelege citirea cuvintelor de cod de la adresele corespunzătoare din RAM. Rezultă că este
necesar să existe un registru care să conţină adresa instrucţiunii următoare, numit contor de
program (PC-program counter) sau numărător de instrucţiuni. Cuvintele de cod parţiale ale
instrucţiunii, dacă este cazul, vor fi citite automat, în mod succesiv, având ca referinţă adresa din
rămânâ.
În cadrul funcţionării unui procesor este necesar ca anumite informaţii simple să fie transmise de
la o instrucţiune la alta. Acestea, de regulă, pot fi reprezentate cu câte un singur bit şi sunt
memorate într-un set de bistabili care formează registrul de stare al procesorului, numit de
regulă, PSW (program status word). Aceste informaţii de câte un bit se numesc indicatori de
stare sau Flag-uri (fanion). Ca exemplu de indicatori de stare pot fi enumeraţi: bitul (Flagul) de
Transport sau împrumut, necesar operaţiilor aritmetice pe mai multe cifre binare, bitul de Zero,
activat atunci când rezultatul unei operaţii aritmetice sau de comparare este zero, bitul de
Întrerupere care indică activarea întreruperilor hardware, etc.
Rezultă că structura minimală a unui procesor trebuie să conţină, alături de ALU şi UC registrele
PC, AC şi PSW. În Fig.* sunt reprezentate conexiunile dindre acestea, care pot avea un caracter
bidirecţional: AC-ALU-MD (pentru transferul operanzilor), PSW-ALU, PSW-UC (pentru
transferul biţilor de stare sau unidirecţional UC-MC (pentru transmisia comenzilor), UC-PC
(pentru încărcarea numărătorului de instrucţiuni), MD-UC (pentru încărcarea codului
instrucţiunilor), UC-ALU (pentru transmisia codului de operaţie). Trebuie menţionat că
decodificarea codului instrucţiunii se efectuează la nivelul unităţii de comandă, care în funcţie de
aceasta stabileşte secvenţa de lucru.
Pentru funcţionarea eficientă a unui calculator mai sunt necesare, chiar în structurile minimale,
implementate la nivelul celor mai simple procesoare, registre indicator (RI) de stivă (SP-stack
pointer) şi registre de tip Index. Indicatorul de stivă conţine adresa (relativă) a vârfului de stivă.
Utilizarea stivei este foarte eficientă, mai ales atunci când se lucrează cu mai multe programe
simultan, când este necesară întreruperea reciprocă a acestora, în timpul execuţiei prin partajare
în timp (time sharing). În acest caz este necesară salvarea (memorarea) informaţiilor de stare a
programului întrerupt (conţinutul PC şi PSW) pentru a putea fi reluat după terminarea procesului
de întrerupere. Adresarea stivei este foarte simplă (numai prin conţinutul SP), pentru că datele
sunt memorate la adrese succesive şi apoi sunt extrase în ordine inversă. Aceasta permite, într-o
ASC – Dan Olaru

manieră eficientă, lucrul cu mai multe programe, care se pot întrerupe reciproc, informaţiile de
stare respective fiind memorate în stivă în ordinea în care au avut loc întreruperile.
Registrele de tip Index sunt foarte utile atunci când se utilizează adresarea idexată. În acest caz
adresa cuvântului de date căutat se găseşte, la rândul ei, într-o locaţie descrisă de o altă adresă.
Adresarea indexată se foloseşte când se lucrează în acelaşi segment de memorie. În acest caz
adresa bazei segmentului rămâne aceeaşi şi se schimbă, pe parcursul execuţiei numai adresa
relativă din interiorul segmentului. Deci, fiecare adresă absolută (propriu-zisă) va fi formată din
adresa bazei segmentului suplimentată cu adresa relativă. Astfel, este mai efucient ca contorul de
program (PC) să lucreze numai cu adresa relativă, iar adresa bazei să fie memorată în registrul
index (RI).
Procesoarele performante, de regulă, conţin mai multe regisre index şi mai multe registre de
manevră cu funcţii multiple, numite şi registre generale pentru a putea lucra simultan cu mai
multe programe. Aparent, ar fi benefic ca dimensiunea setului de registre să fie cât mai mare,
pentru a putea creşte viteza de transfer şi operare a datelor. Totuşi, actualizarea lor cu datele
aflate în memoria RAM devine dificilă şi durează mai mult, mai ales că aceasta trebuie făcută
prin instrucţiuni mai multe şi mai complicate. De aceea se preferă utilizarea memoriei Cache care
realizează transferulri rapide şi este manevrată, în mod automat de către procesor.

Bistabil
INT
întrerupere

Unitate de
Comandă
UC

PC

AC

ALU
PSW
Magistrală comenzi (MC)
Magistrală adrese (MA)

Magistrală date (MD)

Clasificarea structurilor de procesoare


Dacă se ţine seama de explicaţiile de mai sus, rezultă că structurile de memorie temporară sau de
manevră, la care are acces procesorul pot fi diferite şi cu dimensiuni diferite. Astfel, putem avea o
configuraţie dominată de un set registre mai evoluat, de utilizarea mai intensivă a stivei sau de
folosirea mai intensă a acumulatorului. Aceste variante nu numai că marchează complexitatea şi
ASC – Dan Olaru

costul sistemului de calcul dar influenţează în mod direct structura şi modul de realizare al
programelor. De regulă, un calculator mai complex “hardware” va putea avea instrucţiuni maşină
mai complexe, o programare mai eficientă şi o putere de calcul mai mare. Dacă structura
hardware este mai simplă, funcţiile calculatorului trebuie compensate, la nivel de program, adică
prin software, programarea devenind mai puţin eficientă şi timpul de lucru mai lung.
În această ordine de idei, se poate face următoarea clasificare a configuraţiilor de calculator:
structuri de calculatoare “orientate pe acumulator”, structuri “orientate pe stivă” sau structuri
“orientate pe registre generale”.

Unitatea centrală cu un singur tact


Este cunoscut faptul că, pentru realizarea operaţiilor la nivelul unităţii centrale sunt necesare
transferuri de date între registre (accesibile sau nu prin instrucţiunile limbajului maşină) sau la
nivelul magistralei, către memorie sau echipamentele de intrare/ieşire. Aceste transferuri necesită,
de fapt, activarea unor stări ale procesorului, prin semnalele produse de decodificatorul de stări.
Este deci necesar ca execuţia unei instrucţiuni să conţină un număr de stări maşină organizate sub
formă de cicli masină şi faze de execuţie.
Totuşi, pentru înţelegerea mai uşoară a funcţionării unităţii centrale este utilă considerarea unei
structuri cât mai simple, dar care să ofere aceeaşi funcţionalitate. Aceasta este reprezentată de un
procesor modelat de maşina cu un singur tact.
În mod convenţional, se poate considera că prelucrarea datelor la nivelul unui sistem de calcul
constă, de fapt, în modificarea succesivă a conţinutului unei memorii la care căile de intrare (date
scrise) şi căile de ieşire (date citite) sunt separate şi au linii de adresă individuale. Această
memorie ar conţine, la început, alături de program, şi datele de intrare corespunzătoare, iar după
execuţie, datele de ieşire ale programului.
La fiecare pas de execuţie, operatorul ALU (aritmetic-logic unit) calculează un rezultat pe baza
operatorilor de intrare şi a codului de operaţie. Semnalul de tact ccomandă scrierea simultană a
informaţiilor în registru de adrese, memorie şi registru tampon. Se consideră că registrul de
adrese şi registrul tampon au o viteză de scriere sporită faţă de memorie. Astfel, datele vor putea
fi stocate în registrul tampon, înainte ca starea ieşirilor memoriei să se schimbe. Registrul de
adresă asigură stabilitatea codului de adresă pe durata scrierii în memorie. Se observă că în
această configuraţie o instrucţiune de salt poate acţiona decât după execuţia instrucţiunii care o
urmează.
Se observă că acest model ipotetic de calculator se folseşte un singur semnal de comandă, deci
reprezintă o maşină de stări cu un singur impuls de tact. Funcţionarea este posibilă datorită
timpului de propagare la nivelul memoriei. Concluzia este că această construcţie este posibilă, dar
nu este eficientă datorită intervalelor de siguranţă care trebuie să existe între valorile timpilor de
tranziţie, deci nu poate fi folosită frecvenţa maximă de lucru specifică unei anumite tehnologii.
ASC – Dan Olaru

Salt instrucţiune următoare


Registru de adrese
Program + operanzi
Adrese instrucţiuni,
operanzi şi rezultate

Memorie
Rezultate
program,
Tact scriere date de intrare,
date de ieşire
Cod operaţie, valori
operanzi şi rezultate
Registru tampon

Operator ALU
(aritmetic şi logic)

Fig.*. Schema convenţională a unei maşini cu un singur tact

Mai interesant ar fi să se considere tot o structură ipotetică de calculator, dar la care să poată fi
individualizate structura cuvintelor de date şi a semnalelor de comandă. Deşi este mai realist, nici
acest concept nu se foloseşte în realitate, dar este important pentru că evidenţiază modul de
funcţionare a unui model de procesor care utilizează un număr minimal de blocuri şi semnale
interne.
Pentru a putea fi generate semnalele utilizate în scheme, trebuie să fie cunoscută structura codului
instrucţiunii de program. Tipurile de instrucţiuni decodificate şi interpretate de unitatea centrală
corespund unui anumit limbaj maşină sau limbaj de asamblare. Acesta face referire chiar la
componentele (care joacă rolul de argumente sau variabile), modul de funcţionare şi operatorii
specifici structurii electronice a unui anumit tip de procesor. Spre deosebire de limbajul maşină,
limbajele de nivel înalt, destinate, de obicei utilizatorilor, folosesc instrucţiuni specifice unui
anumit mod de operare sau unui anumit tip de variabile, care nu are legătură cu structura
procesorului. De aceea, pentru a putea fi executate este necesar ca fiecare instrucţiune să fie
transformată (translatată sau compilată) în mai multe instrucţiuni maşină, cu o structură mai
simplă, prin acţiunea unui porogram numit translator sau compilator.
O instrucţiune maşină este reprezentată de un cod binar care este interpretat de către logica
electronică (circuitele logice) a unităţii centrale. Trebuie menţionat că limbajul de asamblare
coorespunde limbajului maşină dar, pentru a fi mai uşor de utilizat, reprezentarea se face cu
ajutorul unor denumiri textuale, numite mnemonice.
Instrucţiunile maşină sunt stocate în memoria de program şi decodificate de catre circuitele
combinaţionale ale decodificatorului de instrucţiuni. Acesta permite identificarea câmpurilor (sau
zonelor) codului instrucţiunii, generarea semnalelor de comandă, a codurilor de operaţie, şi a
codurilor de identificare a operanzilor.
ASC – Dan Olaru

În general, se poate considera, în mod pur convenţional, că un cod de instrucţiune poate conţine
trei câmpuri, ca mai jos.

Cod operaţie Cod operand A Cod operand B

Codul de operaţie specifică tipul operaţiei aritmetice, logice sau de transfer care trebuie realizată.
Codul operanzilor furnizează informaţiile de identificare pentru primul şi al doilea operand de
intrare, dar şi pentru plasarea rezultatului care va fi suprapus peste operandul A. Trebuie
specificat că, în funcţie de codul de operaţie, codurile operanzilor vor putea reprezenta: adrese ale
operanzilor, coduri parţiale de adresă (adresă relativă, adresă în interiorul unui segment, etc.),
coduri referitoare la regiştre, adrese de salt sau indicaţii de translatare a adresei curente (Offset).

Schema maşinii cu un singur tact trebuie să conţină, pe de o parte logica de operare a datelor de
intrare şi pe de altă parte logica de adresare a instrucţiunii următoare, respectiv cea de
decodificare şi generare a semnalelor de comandă. Prin termenul “logică”, în acest context se
înţelege ansamblul de circuite electronice binare sau logice a structurii respective.
Pentru a reduce restricţiile legate de diferenţele între timpii de tranziţie a stărilor memoriei sau
registrelor se va considera că modelul de procesor este de tip Load/Store adică utilizează
instrucţiuni speciale şi separate pentru accesele la memorie adică pentru operaţii de încârcare din
memorie (Load) şi, respectiv, scriere în memorie (Store).
Schema de operare a datelor de intrare (Fig.*) conţine următoarele componente (blocuri):
- operatorul aritmetic-logic (ALU);
- blocul registrelor generale (REG);
- blocul memoriei de date (MemD);
- multiplexorul datelor de intrare (MuxD);
- multiplexorul datelor de ieşire (MuxR);

OpIm
R1 R2 Rd DatIm
CodOp
WR
MuxD Load
CK
CR1
REG ALU
CRd CR2 AdrM
WM MuxR

CK MEMD

Fig.*.Schema de operare a datelor de intrare

Principiu de funcţionare este următorul. La intrarea operatorului aritmetic (ALU), comandat de


codul de operaţie (CodOp) operanzii sunt furnizaţi, fie direct de către setul de registre generale
(REG) fie de multiplexorul MuxD. Dacă semnalul OpIm este activ, înseamnă că este vorba de un
ASC – Dan Olaru

operand imediat, adică specificat chiar în codul instrucţiunii. Atunci multiplexorul va prelua
operandul direct de la decodificatorul de instrucţiuni. În caz că operanzii implică setul de registre,
numele (codurile) registrelor care vor conţine operanzii respectivi, specificate în codul
instrucţiunii, vor fi identificate de semnalele R1, R2 şi Rd obţinute tot prin decodificatorul de
instrucţiuni. Acestea indică registrii operanzilor de intrare (RG1, RG2) şi registrul destinaţie
pentru rezultat (RGd). Astfel, la ieşirile CR1 şi CR2 va fi transmis conţinutul registrelor RG1”şi
“RG2”, iar conţinutul de la intrarea CRd va fi înscris în registrul “RGd”.
Rezultatul, selectat prin multiplexorul MuxR (atunci când semnalul Load nu este activ) va fi
înscris în registrul destinaţie, specificat cu codul RGd, la apariţia semnalului de tact sau de ceas
(CK–clock). Se presupune că operaţia de scriere este suficient de rapidă, astfel încât, starea
celorlalte circuite să nu se schimbe.
Aşa cum s-a spus mai sus această schemă corespunde unei maşini (procesor) de tip Load/Store
care are instrucţiuni speciale şi separate pentru accesul la memorie (de date). În cazul
instrucţiunilor de prelucrare a datelor, acestea utilizează numai setul de registre, fără a implica
memoria de date. Atunci când apar instrucţiuni de tip Load, de încărcare din memoria de date,
semnalul “Load” este activat şi multiplexorul MuxR selectează ieşirea memoriei de date.
Conţinutul (cuvântul) de la adresa specificată de semnalele Adr va fi transmis, prin multiplexor,
către setul de registre şi înscris, atunci când semnalul CK devine activ, într-unul din regiştrii
pentru operanzi. Operandului respectiv va deveni utilizabil, la o instrucţiune de operare
următoare. Atunci când apar instrucţiuni de tip Store, de înscriere din memoria de date, odată cu
apariţia semnalului CK, conţinutul cuvântului ce va fi scris va fi preluat din setul de regiştrii. Este
interesant că, deşi, atât setul de registre cât şi memoria de date folosesc acelaşi semnal de
comandă pentru scriere (CK), nu apare nici un conflict de transfer datorită faptului că sunt
folosite instrucţiuni diferite, care vor activa, fie semnalul WR, fie semnalul WM.

Logica de determinare a adresei instrucţiunii următoare este dată de schema din Fig.* şi conţine
urmatoarele componente:
- blocul memoriei de program (MemPrg);
- registrul numărător de instrucţiuni (PC);
- multiplexorul de adresă (MuxA);
- sumatorul de incrementare (SumI);
- sumatorul de adresare (SumA).
ASC – Dan Olaru

SumI Salt

LCod MuxA
Adr Date
SumA PC MemPrg
PrgDec
AdrJ CK

AbsJ

Fig.*. Schema de calcul a adresei instrucţiunii următoare.

Principiul de funcţionare este următorul. Dacă instrucţiunea precedentă nu este una de salt, atunci
adresei instrucţiunii următoare se calculează prin incrementare (adunare) cu un număr
corespunzător numărului de cuvinte de cod ale instrucţiunii precedente (LCod), cu ajutorul
sumatorului SumI. De exemplu, dacă aceasta se întinde pe două cuvinte, se va adăuga valoarea
doi. În caz că instrucţiunea precedentă este una de salt la altă adresă în program, atunci adresa
următoare se calculează adunând la adresa precedentă valoarea specificată în instrucţiunea de salt
(AdrJ), cu ajutorul sumatorului SumA. Se lucrează aşa deoarece deoarece, în mod obişnuit,
salturile se realizează într-o manieră relativă faţă de adresa precedentă. În caz că apare o
instrucţiune de salt care conţine o adresă absolută, sumatorul va aduna valoarea zero. Adresa
instrucţiunii următoare va fi încărcată în registrul numărător de instrucţiuni (PC), la activarea
semnalului CK şi va fi folosită de memoria de program. Scrierea acesteia se face numai prin
procedura de încărcare a programului, înaintea începerii execuţiei. Timpul de tranziţie al
numărătorului de instrucţiuni trebuie să fie mult mai scurt decât cel de citire din memorii sau cel
de propagare prin circuitele de operare sau de control al fluxului de date.
La ieşirea memoriei de program va apare codul instrucţiunii, corespunzător adresei respective.
Acesta este introdus în Decodificatorul de instrucţiuni (PrgDec) din Fig.*, care furnizează la
ieşire semnalele de comandă sau codurile necesare celor două scheme.

MemPrg

PrgDec

Load WR WM R1 R2 Rd AdrM CodOp OpIm DatIm Salt AdrJ AbsJ LCod


ASC – Dan Olaru

Procesoarele microprogramate
Aşa cum s-a arătat, unitatea centrală (procesorul) poate fi partajat în două secţiuni principale, şi
anume, unitatea de comandă (UC) şi unitatea aritmetică şi logică (ALU). Unitatea de comandă
sau automatul secvenţial, prin stările care le parcurge, realizează transferurile de date interne sau
externe (prin comanda magistralei). Transferurile interne sunt efectuate fie între regiştrii
accesibili de utilizator, prin instrucţiunile maşină, fie între registre Latch cu rol de memorii
tampon pentru funcţionarea corectă a unităţii aritmetice/logice. Unitatea de comandă poate să fie
implementată cu o reţea de porţi şi circuite bistabile, fără ca acestea să aibă destinaţii privilegiate,
sau poate să aibă la rândul ei o structură de maşină von Neumann (Fig.*). Atunci fiecare
instrucţiune maşină este considerată ca element de program la intrarea unui subansamblu, cu
structură de calculator. Astfel, execuţia fiecărei instrucţiuni este realizată printr-o secvenţă de
microprogram, care conţine operaţii (microinstrucţiuni) mai simple. Instrucţiunea maşină este
preluată din zona de program a memoriei, adresată prin registrul PC şi este plasată într-un
registru de instrucţiuni. În funcţie de codul acesteia, unitatea de secvenţă de microprogram aduce
din memoria de microprogram secvenţa necesară de prelucrare a instrucţiunii, prin intermediul
unităţii aritmetice-logice de microprogram.
Trebuie menţionat că, deşi microinstrucţiunile conţin operaţii mai simple, totuşi în anumite cazuri
lungimea unei microinstrucţiuni poate fi mai mare decât lungimea unei instrucţiuni maşină.
Astfel, într-o microinstrucţiune pot fi incluşi toţi operanzii şi execuţia acesteia se poate realiza
mai repede, eventual într-un singur ciclu de tact, folosind eventual subunităţi de prelucrare care
acţionează în paralel.
Memoria de instrucţiuni
PC (instrucţiuni maşină)

Registru instrucţiuni
Adresă
microprogram
Memoria de
microprogram Unitatea de secvenţă
Cod microprogramată
microprogram
Magistrală
de date
ALU
microprogram

Comunicarea cu perifericele
Comunicaţia cu dispozitivele perifericele prin intermediul magistralei poate fi controlată şi
comandată numai de un dispozitiv cu calitatea de Master. În afară de procesor, de regulă, cel mai
important dispozitiv de acest tip este Controlerul DMA.
Trebuie remarcat faptul că dispozitivele periferice propriu-zise sau echipamentele exterioare
calculatorului nu comunică direct pe magistrală ci utilizează un subansamblu electronic, numit
“controler”, “interfaţă”, “cuplor” sau “placă”. Aceasta asigură transferul, eventual memorarea
temporară a datelor, şi realizează trecerea de la protocolul de comunicaţie pe magistrală (mai
rapid şi mai performant) la cel al dispozitivului cuplat cu calculatorul.
ASC – Dan Olaru

În cele de mai sus au fost analizată funcţionarea internă a unei unităţi centrale, rezumată la
execuţia instrucţiunilor, preluate din memoria de program şi prelucrarea datelor aflate în memoria
de date. Însă, pentru a putea comunica cu dispozitivele conectate pe magistrală trebuie utilizate
semnale de comandă specifice. Trebuie remarcat că, semnalele utilizate pot avea un caracter
sincron sau asincron. Un semnal este sincron dacă este generat conform unei anumite secvenţe
sau protocol. Deci, acesta este generat într-un moment de timp corelat sau aflat în
interdependenţă cauzală cu semnalele care identifică sau generează fazele de funcţionare a
procesorului. În caz că apariţia semnalului este independentă, deci poate apare la un moment de
timp oarecare, eventual datorită unui eveniment exterior, se consideră că semnalul este de tip
asincron.
În mod obişnuit, comunicaţia sincronă se realizează pe parcursul ciclurilor de citire sau scriere în
memorie. Acestea folosesc semnalele de citire sau Read (R) şi de scriere Write (W). Trebuie
remarcat că spaţiul de adresare a dispozitivelor periferice este mult mai restrâns decât cel al
memoriei (RAM). La un periferic spaţiul de adresare se referă, de regulă, la adresele registrelor
interfeţei respective, destinate transferului de date, biţilor de stare sau mesajelor de comandă.
Acestea au un număr de adrese mai restrâns şi este firesc ca adresarea să se realizeze separat,
pentru memoria RAM şi pentru periferice, cu un număr de biţi mai redus în ultimul caz. Pentru a
putea departaja cele două tipuri de adrese, sunt utilizate semnalele suplimentare de selecţie,
notate de regulă cu MEM şi I/O.
Pentru comunicaţia între procesor şi celelate dispozitive, eventual chiar de tip Master poate
necesita, da la caz la caz identificarea unor cicluri de funcţionare a procesorului. Cel mai des se
utilizează un semnal, (notat M1) sau eventual două semnale (notate S1,S2).
Necesitatea controlerului DMA apare atunci când este necesară realizarea şi coordonarea unei
transmisiei rapide (de exemplu, între memorie şi unitatea de disc) a unor cantităţi importante de
date (masive de date) printr-un protocol special numit DMA (direct memory acces). Acesta
necesită câteva faze preliminare de programare la nivelul controlerului DMA a informaţiilor de
adresă a dispozitivelor sursă şi destinaţie, de lungime de mesaj, de prioritate a transferului şi de
obţinere a controlului magistralei. Pentru aceasta sunt emise, către procesor, semnale de cerere a
controlului magistralei (BUSRQ). Dacă este posibilă eliberarea magistralei (prin terminarea
transferurilor în curs), procesorul răspunde cu semnalul BUSAQ. Atunci ieşirile circuitului DMA
va putea controla liniile de adresă sau de date.
Există situaţii când activitatea procesorului trebuie iniţializată, întârziată, sau chiar oprită. În acest
scop sunt folosite semnalele: RESET, WAIT şi HOLD.
În primul caz, semnalul RESET poate fi primit de procesor într-o manieră asincronă, de regulă
după conectarea la tensiunea de alimentare sau după generarea unei erori grave care impune
trecerea tuturor circuitelor într-o stare iniţială bine definită. Aceasta, de obicei, implică încărcarea
cu biţi zero a anumitor registre (în primul rând numărătorul de instrucţiuni – PC), fixarea
bistabililor de stare şi control într-o anumită stare şi declanşarea, după un anumit timp a secvenţei
de încărcare a primei instrucţiuni de program.
Semnalul WAIT, aşa cum s-a amintit şi mai sus are rorul de a prelungi durata ciclului maşină,
pentru ca anumite dispozitive mai lente să poată prelua date sau să execute comenzi, procese care
implică, de fapt, o operaţie de scriere în registrele acestuia.
ASC – Dan Olaru

RESET
HOLD
HOLDA
WAIT
BUSRQ
BUSAQ
INT
INTAQ
M1
CPU
MEM
I/O
R
W

Fig.*. Conexiunile şi semnalele de comandă la nivelul unităţii centrale.

Comunicaţia sincronă este avantajoasă atunci dispozitivul Master este acela care iniţiază şi
termină comunicaţia cu un dispozitiv care primeşte comenzi sau este implicat într-un proces de
scriere sau citire. Există însă cazuri, foarte frecvente în modul de lucru al calculatorului când
dispozitivul Slave este acela care trebuie să iniţieze sau să determine sfârşitul procesului de
comunicaţie, datorită unui eveniment exterior calculatorului sau intern dispozitivului Slave. De
exemplu, în cazul unui defect de tipărire, imprimanta este aceea care trebuie să ceară oprirea
transferului de date. Dacă problema se rezolvă, tot imprimanta este aceea care trebuie să ceară
reluarea comunicaţiei. Foarte interesantă, da asemenea, este comunicaţia cu dispozitivele de
memorare pe disc. La acestea, unitatea centrală coordonează comunicaţia, însă transferul de date
nu se poate face imediat, ca în cazul memoriilor electronice (de tip RAM) şi nici ne este eficientă
întârzierea cu semnale de tip WAIT.

Dispozitivele cu disc sunt caracterizate de un transfer de date rapid, mai ales la hard-disk, rata de
transfer fiind determinată de viteza de rotaţie a discului (de fapt viteza periferică în dreptul
capului de citire/scriere). Totuşi, datorită modului de organizare a datelor pe disc, procesul global
de comunicaţie implică manevre intermediare. Astfel, poziţionarea capetelor de citire/scriere,
căutarea cilindrului (pistei) şi sectorului pe care se găsesc datele, sincronizarea fluxului de date cu
poziţia de început şi sfârşit de sector, etc., necesită comenzi suplimentare, la care dispozitivul
poate răspunde relativ lent. În plus, se pot utiliza unităţi de disc multiple, conectate printr-o
magistrală specială, care pot comunica aparent simultan, când fiecare dintre ele poate realiza
funcţii diferite şi se poate afla în stări diferite. Deci în timp ce una dintre unităţi realizează o
anumită manevră, altă unitate poate transfera date sau primi comenzi. În plus, chiar înre
intervalele de timp necesare pentru realizarea comenzilor intermediare, procesorul poate executa
porţiuni din alte programe.
Rezultă că folosirea semnalelor de tip WAIT este total ioportună şi mai avantajoasă este
utilizarea unui mod de lucru prin care dispozitivul Slave să poată înştinţa dispozitivul Master
asupra stării lui şi asupra “intenţiilor” care le are în legătură cu iniţierea sau oprirea unui proces
ASC – Dan Olaru

de comunicaţie. În acest scop pot fi folosite două modalităţi. Fie, procesorul (sau Master-ul)
testează periodic starea dispozitivului Slave, fie acesta transmite un semnal de informare asupra
unei schimbări semnificative de stare. Dacă a apărut o schimbare stare, dispozitivul Master poate
iniţia o procedură de interogare a stării, după care să iniţieze un transfer de date sau o transmisie
de comenzi. Este evident că a doua soluţie este mai eficientă deoarece dialogul între dispozitive
ia naştere numai în momentul unei schimbări de stare. Testarea reciprocă a stării consumă timp
preţios, mai ales pentru procesor, care are viteză mare de lucru şi poate realiza alte funcţii în acest
interval.
Primul procedeu poartă denumirea de poling, adică Master-ul interoghează periodic starea
dispozitivului, până când se produce evenimentul aşteptat. Acest mod de lucru este ineficient şi
rar utilizat, numai în cazuri speciale.
Al doilea procedeu, numit mod de lucru în întreruperi este specific modului de operare al
procesorului. Denumirea arată că acest mod de comunicaţie degrevează procesorul de o sarcină
permanentă (cum este poling-ul), acesta întrerupându-şi activitatea curentă numai “la cerere”. În
acest caz, atunci când apare o schimbare de stare semnificativă, perifericul (dispozitivul Slave)
transmite un semnal de întrerupere (notat de regulă cu INT), pe o linie specială de comandă a
magistralei, câtre o intrare specială a procesorului, care va răspunde cu un semnal de aceptare a
întreruperii, notat IAQ (interrupt acknowledge). Apariţia acestui semnal este memorată de un
bistabil special care va da naştere la o secvenţă de întrerupere. Aceasta intră în acţiune după
terminarea execuţiei instrucţiunii aflate în curs, şi va avea ca efect următoarele operaţii:
- procesorul eliberează magistrala de date (ieşirile trec în starea izolată);
- procesorul transmite semnalul IAQ (interrupt acknowledge);
- perifericul transmite vectorul de întrerupere pe magistrala de date;
- procesorul citeşte vectorul de întrerupere şi calculează adresa procedurii de serviciu;
- procesorul execută procedura de serviciu a întreruperii.

Vectorul de întrerupere reprezintă adresa (sau adresa relativă) a locaţiei de memorie unde se
găseşte procedura (programul) care conţine instrucţiunile ce trebuie executate în urma apariţiei
întreruperii. Trebuie menţionat că aceste întreruperi sunt de tip “hardware”, pentru că utilizează
semnale şi circuite electronice specializate, spre deosebire de întreruperile de tip “software”,
reprezentate de instrucţiuni de salt la o altă adresă, corespunzătoare unei anumite proceduri
speciale, în timpul execuţiei unui program.
În realitate, un calculator utilizează mai multe linii pe care pot fi transmise semnale de
întrerupere, dotate cu diferite nivele de prioritate. Acestea indică prioritatea sau ordinea de
servire a unei întreruperi, atunci când sunt emise simultan mai multe semnale de întrerupere.
Prioritatea întreruperilor poate fi stabilită, pe de o parte prin identificarea intrării de întrerupere,
atunci când nu se utilizează o intrare unică. Atunci când numărul de periferice care pot lansa
semnale de întrerupere depăşeşte numărul de intrări respective, situaţie care poate apare frecvent,
este necesară stabilirea priorităţii prin modul de conexiune al perifericelor la liniile de
întrerupere, corespunzător unei anumite soluţii constructive. Cel mai utilizat este modul de
conectare lanţ sau în cascadă, exemplificat în Fig.*, pentru trei dispozitive periferice.
ASC – Dan Olaru

INT

Procesor DP1 DP2 DP3


IAQ
RIA1 EIA1 RIA2 EIA2 RIA3 EIA3

Magistrală de date

Fig.*. Asigurarea priorităţilor de întrerupere prin conexiune “lanţ”.

În această schemă semnalul de acceptare a întreruperii, IAQ emis de către procesor trece prin
circuite electronice specializate, la nivelul dispozitivelor periferice. Fiecare periferic este dotat cu
câte un receptor (RIA1, RIA2, RIA3) şi cu câte un emiţător (EIA1, EIA2, EIA3) de semnal. Acestea
sunt comandate electronic, astfel încât dacă un periferic nu a transmis nici un semnal de
întrerupere INT pe linia comună, atunci transmite mai departe semnalul IAQ, iar dacă un
periferic a transmis un semnal de întrerupere, atunci semnalul IAQ nu este transmis mai departe,
câtre următorul periferic. Rezultă că, dacă mai multe periferice transmit simultan cereri de
întrerupere, propagarea semnalului de confirmare, între periferice va fi oprit de dispozitivul care a
transmis semnal INT, aflat cel mai apropiat de procesor. Deci, prioritatea de întrerupere este
stabilită de modul de aşezare a perifericelor în conexiunea cascadă.

Conexiunea UC – Controler - Periferic


Orice comunicaţie între unitatea centrală şi un dispozitiv periferic se realizează prin intermediul
unei interfeţe (cuplor), care poate fi integrat pe placa de bază, conectat direct la magistrala
calculatorului. Dispozitivul periferic poate face parte din configuraţia calculatorului (în aceeaşi
carcasă), cum sunt, de regulă, unitaţile de discuri sau se poate afla în exterior (ca de exemplu,
imprimanta). În orice caz, legătura dintre cuplor şi periferic se face printr-o conexiune specială,
diferită, ca mod de funcţionare şi performanţe, de magistrala calculatorului.

SO + INT Registre
Magistrală adrese stare

Unitate Magistrală date Registre


centrală comenzi

Magistrală comenzi Registre Periferic


R/W, sincronizări date (mem) Conexiune
PSI
dedicată
Generator
Controler întreruperi
întreruperi Cerere de
întrerupere
ASC – Dan Olaru

În general, indiferent de tipul de periferic, legătura cu unitatea centrală foloseşte anumite


concepte şi mijloace specifice. Funcţiile de bază trebuie să asigure: transmisia datelor (de regulă
bidirecţional), determinarea stării perifericului şi comanda acestuia. Funcţiile de interogare a
stării şi de comandă implică, de fapt, tot transmisii de date, dar cu un caracter şi semnificaţie
specială. La nivelul cuplorului există elemente de memorie, configurate de regulă sub forma unor
registre sau zone restrânse de memorie (buffer). Acestea sunt identificate prin coduri de adresă,
aflate de obicei în zona de adrese dedicate periferiei (Intrări/Ieşiri).
Comunicaţia cu perifericul are loc sub forma unor secvenţe tipice. Unitatea centrală dă comenzi
sau transmite date, ţinând cont de starea cuplorului, prin interogarea (citirea) registrului de stare.
Atunci când apar evenimente independente de funcţionarea calculatorului (în mod asincron),
cuplorul generează întreruperi (hardware), care determină saltul în subprograme speciale de
servire a perifericului (PSI – programe de servire a întreruperilor). Întrega coordonare a
perifericului este subordonată sistemului de operare (SO) şi sistemului de întreruperi software
(INT) prin care perifericul asigură diferite funcţii şi servicii.
Conexiunea dedicată cu perifericul, în general are caracteristici similare unei magistrale, dar cu
posibilităţi şi performanţe mai restrânse.

Arhitecturi complexe
Pentru mărirea performanţelor procesoarelor, în afara alegerea unei anumite arhitecturi interne,
optimizate dintr-un anumit punct de vedere, se utilizează diferite strategii bazate pe conceptul
prelucrării paralele. Aceasta se referă, fie la execuţia simultană a unor instrucţiuni diferite (cazul
calculatoarelor vectoriale sau paralele), fie la realizarea simultană a unor operaţii parţiale,
necesare prelucrării instrucţiunilor (cazul calculatoarelor pipe-line). În primul caz, unitatea
centrală conţine mai multe procesoare identice, destinate execuţiei paralele a instrucţiunilor.
Chiar dacă acestea există, ele nu pot fi utilizate eficient decât dacă succesiunea instrucţiunilor
este cunoscută şi dacă acestea sunt independente, adică o instrucţiune nu trebuie să conţină ca
operanzi de intrare date rezultate din execuţia altor instrucţiuni.
Din punct de vedere istoric, elemente de prelucrare paralelă s-au folosit odată cu apariţia co-
procesoarelor numerice şi a procesoarelor de date grafice. Primele erau capabile să execute, în
mod independent, instrucţiuni de calcul cu virgulă flotantă, deci cu numere zecimale, care altfel
ar fi trebuit realizate prin proceduri complexe la nivelul procesorului propriu-zis. Procesoarele
grafice erau destinate execuţiei unor instrucţiuni de tip grafic (translaţii sau rotaţii geometrice, de
exemplu), efectuând operaţii identice asupra unor operanzi vectoriali cu câte trei componente,
corespunzător celor trei axe de coordonate ale spaţiului cu trei dimensiuni.
În realitate, pe de o parte, succesiunea instrucţiunilor nu este cunoscută deoarece pe parcursul
execuţiei programului pot apare instrucţiuni de salt care pot depinde de rezultate obţinute pe
parcurs. Pe de altă parte, independenţa instrucţiunilor, de obicei, nu poate fi garantată. De aceea,
procesarea paralelă propriu-zisă nu poate fi făcută decât dacă programul este construit într-o
formă particulară şi conţine directive speciale pentru directarea instrucţiunilor către procesoarele
paralele. Aceasta duce la o creştere a preţului de rezolvare a aplicaţiilor şi la necesitatea rescrierii
programelor existente.
O soluţie aplicabilă pentru orice program este utilizarea structurii denumite Pipe-line (conductă)
sau “bandă de asamblare”. În acest caz, structura procesorului este divizată în mai multe
subunităţi destinate prelucrării instructiunii la diferite nivele, în intervale de timp diferite. Fiecare
ASC – Dan Olaru

dintre subunităţi este comandată de tactul (semnalul de ceas) propriu şi conţine memorii tampon
sub formă de registre Latch. În acestea vor fi stocate coduri, corespunzătoare instrucţiunilor,
aflate la diferite nivele de prelucrare, organizate sub formă de “cozi de aşteptare”. Structura de
“coadă” furnizează la ieşire datele care au fost memorate la începutul formării segmentului
respectiv (conceptul “primul intrat – primul ieşit” sau “first in – first out”). Memoriile tampon
permit ca subunităţile să nu aştepte date de intrare, chiar dacă ciclurile lor de prelucrare necesită
timpi diferiţi.
Prelucrarea unei instrucţiuni poate fi departajată, spre exemplu, într-o manieră primară, în fazele
de: încărcare din memorie (operaţia de “fetch”), decodificare, execuţie propriu-zisă (sau calcul)
şi înscrierea rezultatelor în memorie. Execuţia unei instrucţiuni implică mai mulţi cicli maşină,
conţinând la rândul lor mai multe faze de execuţie (perioade de tact sau ceas). În maniera clasică,
când nu este încărcată altă instrucţiune, până nu se termină execuţia celei precedente, execuţia
completă a unei instrucţiuni va necesita un anumit număr de cicli de ceas.
Dacă procesorul este departajat în subunităţi, spre exemplu, atunci când o instrucţiune se află în
faza de execuţie propriu-zisă, altă instrucţiune poate intra în faza de decodificare, şi respectiv,
altă instrucţiune poate fi încărcată din memorie. Se poate spune că, în acest caz, că un procesor de
tip Pipe-line conţine, în diferite faze de execuţie, trei instrucţiuni diferite.
Dacă subunităţile sunt realizate astfel încât să poată prelucra codul intermediar într-un singur
ciclu de tact, rezulta că, la fiecare ciclu de ceas, pe de o parte, va fi încărcată câte o instrucţiune
şi, pe de altă parte, vor fi disponibile rezultatele în memorie.

Procesoare din familia Intel

Dezvoltarea calculatoarelor a fost determinată şi accelerată de realizarea şi evoluţia micro-


procesoarelor. Acestea reprezintă unităţi centrale integrate într-o singură capsulă. Astfel a putut fi
revoluţionată proiectarea, tehnologia, realizarea efectivă, întreţinerea (mentenanţa) şi fiabilitatea
calculatoarelor, mai ales din punctul de vedere al costurilor şi timpului de realizare. Trebuie
menţionat că, înainte de utilizarea µ-procesoarelor, costurile şi eforurile de proiectare,
construcţie, punere în funcţiune, depanare şi întreţinere erau uriaşe şi, de regulă, calculatoarele
puteau fi utilizate şi întreţinute numai în intreprinderi specializate (centre de calcul) dotate cu
personalul şi mijloacele adecvate. În prezent, µ-procesorul a devenit o componentă universală cu
funcţionalitate şi fiabilitate garantată. Astfel sunt excluse problemele generate de conexiunile
dintre componentele discrete (ne-integrate), funcţiile procesorului fiind testate înainte de
începerea fabricaţiei, prin programe de simulare complexe. Trebuie menţionat că, în structura
integrată, ansamblul de componente electronice realizate pe acelaşi cip de siliciu se comportă ca
un tot unitar, cu proprietăţi de fiabilitate comparabile cu cele specifice unei singure componente.
Este interesant că, la început, când mijloacele tehnologice nu erau suficient de dezvoltate, ideea
realizării unor dispozitive programabile integrate (logică programată) nu părea tentantă şi nici
viabilă din punct de vedere economic. Prima realizare reuşită de µ-procesor s-a datorat, de fapt,
încercării de construcţie, într-o formă mai compactă, nu a unui calculator, ci a unui terminal
video (monitor sau diasplay), destinat unui calculator clasic deja existent.
Evoluţia µ-procesoarelor a fost caracterizată de apariţia, aplicarea sau dezvoltarea unor concepte
specifice arhitecturii calculatoarelor şi funcţionării acestora la nivelele de bază. Deşi piaţa de
ASC – Dan Olaru

procesoare se află în plină evoluţie, foarte interesantă este evoluţia µ-procesoarelor dezvoltate de
firma americană INTEL (“Integrated Electronics” fondată în 1960).
Enumerarea, pe scurt, a caracteristicilor produselor reprezentative ale firmei, realizate de-a lungul
timpului, oferă o perspectivă interesantă asupra evoluţiei structurii şi performanţelor
procesoarelor.

Intel 8086 (1979): Conexiuni pentru 16 biţi de date, 20 biţi de adresă (1MB adresaţi direct);
Memorie segmentată cu 16 segmente de memorie, a câte 64 kB; 2 unităţi de procesare paralele;
sistem de operare MS-DOS (Micro Soft Disk Operating Sistem).
Intel 80286 (1982): 16 biţi de date, 24 biţi de adresă (16MB adresaţi direct); Memorie cu
segmente de lungime variabilă: 16 seg.x (1-64 kB) = 1GB pentru fiecare task (program în
execuţie); Execuţie Multi-task, Memorie virtuală = 4GB pentru 4 task-uri procesate în paralel;
Mod de lucru protejat cu 4 nivele şi comutare de task-uri; 4 unităţi paralele; Utilizarea unui co-
procesor matematic pentru realizarea calculelor în virgulă mobilă; A stat la baza configuraţiei
IBM PC AT.
Intel 80386 (1986): 32 biţi de date, 32 biţi de adresă (4GB adresaţi direct); 16 seg.x (1-4 GB) =
64TB; Memorie virtuală = 64 TB /task; Memorie paginată, 1 pagină = 4kB; Mod de lucru “real”
şi “virtual”; 4 nivele de protecţie; “Spaţiu de memorie liniar protejat” (lungimea unui segment =
spaţiul adresabil); 6 unităţi paralele; Co-procesor matematic extern.
Intel 80486 (1989): Configuraţie analoagă lui Intel 80386; Memorie Cache=8 kB (nivel L1), cu
acces într-un ciclu de de ceas (1CK); Arhitectură RISC (1CK); Structură Pipe-Line (1CK) cu 5
nivele pentru unităţile de decodificare şi execuţie; Co-procesor matematic intern.
Intel Pentium I(1994): 64 biţi de date, 32 biţi de adresă; Două memorii Cache, pe nivelul L1, în
arhitectură MESI, separat pentru instrucţiuni program şi date, de câte 8 kB; Două structuri Pipe-
Line paralele (denumite U şi V), asigurând procesarea a câte două instrucţiuni pe fiacare ciclu de
ceas (CK); Căi de date interne extinse (128 respectiv 256 biţi), necesare transferurilor paralele;
Estimator pentru instrucţiunile de salt (Branch Prediction); Registru pentru evidenţa
instrucţiunilor de salt (Branch Target Buffer); Facilităţi multiproces APIC (Advanced Program
Interupt Control)
Pentium I MMX (Multi Media Extension): Conţine facilităţi pentru prelucrarea datelor de tip
multimedia (semnale Audio, Video), cu ajutorul instrucţiunilor de tip SIMD (Single Instruction –
Multiple Data) şi registrelor de tip DSP (Digital Signal Processor) care acţionează asupra unor
structuri de date de tip vectorial; Memorie Cache L1 dublată la 32kB.
Pentium I PRO: 64 biţi de date, 36 biţi de adresă (64 GB adresaţi direct); Structură superscalară
cu trei tronsoane Pipe-Line, putând executa simultan 3 instrucţiuni pe fiecare ciclu de ceas;
Execuţie “dinamică” a programului, având următoarele facilităţi: Analiza fluxului de
microinstrucţiuni; Execuţia instrucţiunilor în altă ordine (succesiunii din program), pentru a putea
reduce dependenţa reciprocă; Prezicerea instrucţiunilor de salt; Execuţie speculativă (prin
estimarea salturilor); Trei unităţi paralele de decodificare care generează câte o secvenţă de
micro-cod (micro-program); Memorie tampon pentru instrucţiuni (Instruction Pool); Cinci unităţi
de execuţie paralelă (2 pentru instrucţiuni întregi, 2 pentru instrucţiuni în virgulă mobilă); Unitate
de retragere-extragere a instrucţiunilor (Retirement Unit), pentru a reface ordinea dată de
program; Două nivele de memorie Cache: două pe nivelul L1, cu conexiune Dual-port, a câte
8kB (pentru cod şi date) şi 256kB pentru nivelul L2, având o magistrală separată de 64 biţi.
ASC – Dan Olaru

Pentium II : constă, în esenţă, într-un procesor Pentium-Pro, cu toate facilităţile structurii MMX,
la care s-a dublat nivelul L1 al memoriei Cache.
Pentium III : constă, în esenţă, într-un procesor Pentium II la care s-a extins setul de instrucţiuni
(70 de instrucţiuni suplimentare), cu noi instrucţiuni de tip SIMD în virgulă mobilă pe 32 de biţi,
acţionând asupra unor pachete de date de 128 biţi.

Memoria
Memoria, alături de procesor determină în mod hotărâtor performanţele calculatorului. Cu cât
viteza de acces la datele sau instrucţiunile programului în execuţie este mai mare, cu atât
procesorul poate acţiona (opera) mai eficient. Din motive tehnologice, aşa cum s-a amintit, există
departajarea sub forma de memorie principală (RAM) implementată cu circuite integrate
semiconductoare şi sub formă de memorie de masă (Hard Disc). Trebuie menţionat că au existat
şi încercări de implementare a memoriei de masă cu ajutorul unor dispozitive statice (fără
mişcare mecanică), prin folosirea unui material cu dipoli magnetici mobili (memorie cu bule).
De-a lungul istoriei calculatoarelor, pentru memoria de masă s-au folosit diferite suporturi
(tambur magnetic, benzi magnetice, discuri magnetice demontabile, etc.). Deosebirea esenţială
între memoria RAM şi memoria de masă este modul de acces al datelor. În cazul RAM (random
acces memory) accesul se poate realiza la orice locaţie (cuvânt) de memorie, după codul de
adresă. În cazul memoriei de masă accesul se face secvenţial (pe banda magnetică) sau pseudo-
secvenţial (pe disc). Astfel, datele nu pot fi citite sau scrise individual, ci numai sub formă de
pachete, care includ şi informaţiile de sincronizare cu mişcarea benzii sau discului. Acest mod de
lucru permite transferul mai rapid a unor masive mari de date, pe care suportul respectiv le poate
înregistra. În cazul discului accesul este secvenţial numai la nivelul sectoarelor (segmente
circulare de pistă), poziţionarea pe piste fiind făcută într-o manieră aleatoare. Este astfel evident
că, din motive de viteză, în timpul execuţiei parogramelor trebuie să se facă accese numai în zona
de memorie RAM. Totuşi, pentru a extinde spaţiul de memorie zone din RAM pot fi transferate
(“mapate”) pe disc.
Tot aspecte de ordin tehnologic fac ca viteza de transfer la nivelul procesorului să fie mult
superioară vitezei de lucru al memoriei RAM. Aceasta face necesar ca o parte din date să fie
transferate (într-o manieră ciclică) la nivelul memoriei Cache (memorie temporară), plasată, de
regulă, pe cipul procesorului şi având o viteză de lucru comparabilă cu acesta. Deci, din punct de
vedere funcţional, în mod obişnuit, memoria RAM conţine codul şi datele programelor aflate în
execuţie, care de altfel sunt memorate pe disc, iar memoria Cache conţine secvenţe de program,
la care se fac acese mai frecvente. Astfel, este necesar ca cele trei nivele de memorie să aibă
caracteristici şi moduri de lucru diferite, uneori relativ complexe.
Modul de organizare a memoriilor este esenţial atât pentru eficienţa procesării datelor, dar şi
pentru ordonarea proceselor care au loc.

Structura şi adresarea memoriei


Modul de organizare a memoriei, prin identificarea anumitor structuri de date, este determinat de
fapt de modul de adresare. În acest sens sunt utilizaţi anumiţi termeni specifici.
Memoria fizică – este reprezentată chiar de implementarea hardware, iar codul de adresă (adresa
fizică) coincide cu semnalele de pe magistrală.
Memoria logică – este o reprezentare, într-o anumită măsură, simbolică deoarece codul de adresă
(adresa logică), folosit la nivelul software (deci, în program) nu mai coincide cu cel fizic, legătura
ASC – Dan Olaru

realizându-se printr-un anumit procedeu de calcul (de exemplu, “translatarea” adreselor). Aceasta
permite în program să poată fi utilizate adrese convenţionale care să nu depindă direct de
structura calculatorului şi de modul de execuţie a programului. Calculul adreselor propriu-zise
(fizice) se va realiza prin intervenţia Sistemului de operare.
Dacă în cadrul unei zone de memorie logică codurile de adresă sunt consecutive, spunem că
memoria sau adresarea este liniară.

Pentru a mări eficienţa lucrului, dar şi pentru a asigura evidenţa operaţiilor efectuate, memoria
poate fi structurată, căpătând atributele sau caracteristicile de : Memorie paginată, Memorie
segmentată şi Memorie virtuală.
Memoria este paginată atunci când sunt definite anumite zone, de regulă cu lungime fixă
(corespunzătoare spaţiului adresabil). Acestea sunt identificate printr-o adresă de pagină, în
interiorul cărora se lucrează cu o adresă relativă, având ca referinţă adresa de început de pagină.
Împărţirea în pagini nu ţine cont de conţinutul zonelor de memorie. Aceasta este însă avantajoasă
pentru uşurarea transferurilor de date între diferitele dispozitive de memorare. Deoarece, de
regulă, execuţia unui program utilizează cu predilecţie anumite zone continui de memorie este
firesc, ca atunci când este cerut accesul la o anumită adresă să se tranfere, într-o manieră
temporară (în cache sau de pe disc) şi pagina care o conţine.

Memoria este segmentată dacă se lucrează cu segmente de memorie, corespunzătoare unor


anumitor structuri de date (instrucţiuni de program, date, zone alocate execuţiei unui program,
etc.). Şi în acest caz, codul de adresă este departajat în adresa de segment şi adresa relativă din
cadrul segmentului respectiv (adresă efectivă). Totuşi, împărţirea pe segmente este legată de
structura programelor şi nu de forma blocurilor de date transferate.

Memoria este virtuală dacă spaţiul de adrese depăşeşte ca dimensiune pe cel al memoriei fizice.
Astfel, în mod aparent ar apare adrese care nu pot să aibă corespondenţă în memoria RAM. Calea
de rezolvare depinde de context. Dacă zonele aparţin mai multor programe care se află în
execuţie simultan (în modul time sharing), acestea sunt “mapate” în memoria RAM numai pe
durata de timp alocată programului respectiv. Dacă un anumit program necesită o zonă de
memorie mai mare decât cea disponibilă în RAM, aceasta va fi extinsă pe disc sub forma unei
structuri asemănătoare celei din RAM (RAM virtual).

Mecanismele de gestionare a memoriei au ca scop mărirea eficienţei execuţiei programelor.


Totuşi, din motive de portabilitate (independenţa faţă de configuraţia hardware şi software a
calculatorului) conţinutul acestora nu trebuie să conţină informaţii referitoare la utilizarea şi
structura memoriei. De aceeea, fie gestionarea memoriei trebuie realizată la nivelul procesorului,
într-o manieră automată, transparentă pentru utilizator, fie indicaţiile de organizare a memoriei
trebuie obţinute prin procesul de compilare (transformarea codului sursă, conceput de utilizator,
în cod executabil) sau să fie incluse în procedurile sistemului de operare. Astfel, structura
segmentelor de memorie, necesară execuţiei unui program, este stabilită de compilator (de
exemplu, lungimea şi adresele relative ale segmentelor de cod, date şi stivă). Modelul memoriei
virtuale este implementat la nivelul sistemului de operare. Lucrul cu memoria Cache şi
mecanismele de paginare sunt realizate, de regulă, automat de către părţi specializate ale
ASC – Dan Olaru

procesorului. Acest mod de lucru este cel mai avantajos, eficient şi nu implică un efort de
programare suplimentar.
Mecanismul de paginare este o problemă mai simplă şi urmăreşte optimizarea transferurilor între
diferite structuri de memorie. De exemplu, majoritatea structurilor de date se găsesc stocate la
nivelul memoriei de masă (disc). Atunci când procesorul cere accesul la o anumită informaţie,
dacă aceasta nu se găseşte în memoria RAM este transferată întreaga pagină care o conţine.
Memoria Cache lucrează într-o manieră similară, numai că, de regulă transferul se face la nivel
de linie (o succesiune de bytes).

Funcţionarea memoriei Cache este mult mai complexă, mai ales datorită necesităţilor de
actualizare într-o manieră eficientă. Scopul urmărit este aducerea în zona Cache a datelor cel mai
frecvent utilizate. De obicei, datele deja aflate în Cache sunt înlocuite atunci când nu mai este
spaţiu pentru noile date accesate.
Memoria Cache lucrează după următorul principiu de bază. Atunci când procesorul are nevoie de
date încearcă să le obţină din memoria Cache. Dacă acestea sunt disponibile (situaţia de Hit) nu
se mai face acces la memoria RAM.ele sunt transferate. Dacă nu sunt disponibile, se face
transferul din memoria RAM şi imediat datele sunt copiate şi în Cache, pentru a putea fi utilizate
cu altă ocazie. Problema scrierii în memorie este însă mai coplicată. Procesorul va efectua, de
regulă, scrierea numai în memoria Cache, actualizarea memoriei RAM urmând să fie realizată
după anumiţi algoritmi de eficienţă, astfel încât gradul de ocupare al procesorului să fie minim.
Tot din motive de eficienţă stocarea şi căutarea în memoria Cache se efectuează într-o manieră
mai specială. Astfel, datele aduse în Cache nu sunt ordonate (într-o manieră liniară) după codul
de adresă aşa cum se lucrează în RAM. Acestea sunt transferate în Cache în funcţie de modul de
acces controlat de program. Deci, aceste date vor corespunde unor adrese diferite (din RAM),
care nu se află într-o anumită ordine prestabilită. Astfel, nu există nici o legătură între adresele
din Cache, unde sunt păstrate temporar datele şi adresele din RAM, corespunzătoare funcţionării
programului. Totuşi, procesorul face accese urmărind codul de adresă, specific programului. De
aceea, pentru a putea fi căutate, în memoria Cache trebuie păstrate şi informaţii suplimentare,
referitoare la adresa reală din memoria RAM, plasate în vecinătatea datelor propriu-zise (în
structura Cache) în locaţii cunoscute sub numele de Tag (etichetă). Deoarece execuţia unui
program se face, de regulă, în zone relativ localizate de memorie informaţia din Tag nu conţine
întreaga adresă din RAM, ci numai o parte a acesteia, corespunzătoare unei anumite zone de
adrese.
Astfel, căutarea datelor în Cache trebuie făcută după codul adresei reale, memorat odată cu datele
transferate din RAM în locaţiile de Tag. Deci, operaţia de căutare se face prin comparaţia adresei
căutate cu cele disponibile deja în Cache. De aceea, se spune că memoria Cache este o memorie
asociativă.
Pentru a mări eficienţa de transfer pentru structura memoriei Cache sunt utilizate diferite structuri
pentru liniile de date, corespunzătoare unui datelor transferate într-un singur ciclu şi diferite
moduri (algoritme) de asociativitate. Alegerea dimensiunii liniilor, blocurilor sau grupurilor
urmăreşte criterii de eficienţă corespunzătoare vitezei de lucru ale memoriei şi procesorului şi
structurii ciclurilor maşină.
Asociativitatea totală permite ca orice locaţie din Cache să stocheze conţinutul oricărei adrese din
RAM. Aceasta presupune, ca la fiecare operaţie de căutare, să fie comparate toate codurile de
adresă, fiind necesar un timp inacceptabil, mai ales în cazul memoriilor Cache voluminoase.
ASC – Dan Olaru

De exemplu, structura unei memorii Cache de 512 octeţi, asociata procesoarelor I 386/486, cu 32
biţi de adresă fizică este următoarea. Cei 2 biţi, mai puţin semnificativi selectează numărul
octetului dintr-o linie conţinând câte 4 octeţi. Biţii 2, până la 31 reprezintă câte un “tag”, necesar
pentru căutarea asociativă, într-o listă cu 128 de valori (512/4=128).
Asociativitatea directă lucrează pe blocuri, structurile de date aduse în Cache corespunzând unor
zone cu adrese consecutive. În acest mod numărul de comparaţii este mult mai redus. Deşi
aparent mai expansivă, ocuparea memoriei Cache este eficientă deoarece programele lucrează cu
zone realtiv localizate de memorie.
De exemplu, pentru un Cache de 64 kB, putem folosi biţii 2-15 ai adresei fizice ca Index în
cadrul zonei (blocului cu adrese consecutive) corespunzătoare aceluiaşi Tag, pentru care vor fi
folosiţi biţii 16-31.
Asociativitatea parţială combină flexibilitatea celei totale cu simplitatea celei directe. Memoria
Cache este structurată pe grupuri, care lucrează în paralel, fiecare lucrând în maniera directă.
De exemplu, un Cache de 64 kB poate fi organizat în 2 grupuri a câte 32kB. Pentru câmpul index,
în cadrul fiecarui bloc, utilizăm 13 biţi (biţii 2-14), cu care va fi selectată una dintre cele 8kB de
locaţii posibile, din fiecare dintre cele două grupe. Câmpul Tag va avea 17 biţi (biţii 15-31) şi va
fi simultan (în acelaşi ciclu) comparat cu cele 2 câmpuri Tag corespunzătoare celor 2 grupuri.

În cazul când, la o încercare de acces, datele nu se găsesc în memoria Cache (situaţia de Miss-
Cache), acestea trebuie preluate din memoria RAM şi imediat trebuie făcută actualizarea în
Cache. Deoarece, în mod obişnuit, zona Cache este complet ocupată trebuie stabilit un mod de
alegere a datelor care vor fi substituite, corespunzator unui algoritm de înlocuire.
Algoritmul LRU (Least Recent Used) – realizează înlocuirea datei cel mai puţin recent utilizate.
Metoda este cea mai performantă, dar necesită un indicator al “vechimii” acceselor şi un
mecanism de actualizare a acestuia.
Algoritmul FIFO (First In, First Out) - realizează înlocuirea în ordine. Vechimea unui acces este
memorată cu ajutorul unui numărător asociat grupului respectiv.
Algoritmul de înlocuire aleatoare (Random) – şi această metodă poate folosi numărătoare, cu
deosebirea că, acestea pot fi incrementate de evenimente exterioare, cum ar fi un semnal de ceas
sau alte acţiuni de înlocuire.

În situaţia în care un anumit rezultat (sau date) trebuie memorat, procesorul va iniţia o operaţie de
scriere în memoria Cache, urmănd ca apoi să se facă actualizarea în RAM, algoritmul de transferl
urmărind anumite criterii de optim.
Algoritmul de scriere imediată (Write through) – execută scrierea în RAM după fiecare scriere în
Cache, angajând procesorul în operaţii de scriere repetate, expansive ca timp de lucru.
Algoritmul de scriere cu buffer (Buffered Write through) – memorează informaţia care trebuie
scrisă în RAM într-o memorie tampon (buffer). Realizarea scrierii necesită circuite specializate,
dar permite procesorului să efectueze alte operaţii, în paralel.
Algoritmul de scriere cu întoarcere (Write Back) – execută scrierea mai târziu, fără intervenţia
directă a procesorului, într-un moment ales după criterii de performanţă. Scrierea în memoria
RAM se poate face mai eficient dacă se aşteaptă copletarea unui întreg bloc de date. Dacă însă
există o altă cerere de scriere la o intrare deja utilizată, salvarea datelor precedente este
obligatorie, fiind nevoie de un ciclu de scriere “artificial”, neiniţiat de procesor, care însă pentru
performanţe optime necesită circuite hardware speciale.
ASC – Dan Olaru

Trebuie menţionat că, atunci când actualizarea scrierii în memoria RAM nu se face imediat, vor
putea apare locaţii invalide (dirty cells), care vor putea furniza date eronate, fără corespondenţă
cu cele din Cache.

Arhitectura procesorului Intel 80286 (I 286)


Interfaţa cu magistrala
Latch-uri
Unitate gestionare memorie (AU) Drivere
Adrese
Sumator Unitate Interf.
adr. fizică Extragere CoProc.

Offset Bază, Dim. Control


Limită Seg. Magistrala
Amplif.
Date ↔
ALU Coadă
Instr.Ext.
Registre UC
Coadă DEC
Unitate de execuţie (EU) Instr.Dec. Instr.
NMI BUSY
INTR ERROR Unit. tratare instrucţ.(Q)
Concepte Pentium
Procesorul Intel Pentium I a deschis seria procesoarelor superscalare, caracterizate prin existenţa
a două structuri Pipe-Line paralele (“U” şi “V”), la care se adaogă şi o unitate de calcul în virgulă
mobilă, pentru numerele reprezentate zecimal.
Dezideratul principal al structurii Pipe-Line este execuţia unei instrucţiuni într-un singur ciclu de
ceas. Aceasta nu înseamnă că pe durata unui ciclu de ceas sau tact (definit de impulsul notat CK)
se încărcă codul instrucţiunii şi se obţine rezultatul în memorie. De fapt, este vorba de acţiunea
mediată asupra unui şir de instrucţiuni, prin care la fiecare ciclu de ceas, “la intrare” este
încărcată câte o instrucţiune şi la ieşire se obţin rezultatele execuţiei altei instrucţiuni, care a fost
încărcată mai devreme.
Acest mod de lucru ar fi posibil, într-o manieră simplistă, dacă operatorul aritmetic-logic (ALU)
ar fi combinaţional la intrare caruia ar fi disponibilă instrucţiunea în forma completă (cod de
operaţie, plus operanzi). În realitate însă, pe de o parte, operanzii se pot afla la adrese de memorie
diferite între ele şi diferite de cea a codului instrucţiunii, iar pe de altă parte operatorul
procesorului, din motive tehnice, nu poate avea o structură combinaţională.
Rezolvarea primei probleme se face prin intermediul memoriei Cache, conectate la procesor prin
mai multe căi de date, similare unei magistrale multiple, care permite accesul simultan al
operanzilor. Cea de-a doua problemă se rezolvă prin scindarea prelucrării unei instrucţiuni în mai
multe faze de lucru şi prin suprapunerea în timp a fazelor de execuţie de la mai multe instrucţiuni.
Pentru ca fiecare subunitate a procesorului să funcţioneze optim, este necesar ca să nu apară timpi
de aşteptare la intrare şi aceasta să intre în funcţiune imediat ce este eliberată, după o fază de
execuţie. Această problemă se rezolvă prin utilizarea cozilor de aşteptare, plasate în memorii
ASC – Dan Olaru

tampon speciale, care conţin coduri sau operanzi aflaţi în faze de execuţie intermediare. Această
metodă asigură şi sincronizarea atunci când duratele de prelucrare, pentru fazele intermediare,
sunt diferite.
În cazul unei funcţionări optime, structura superscalară ar trebui să permită execuţia simultană a
mai multor instrucţiuni, pe durata unui singur ciclu de ceas. Rezultă o prelucrare în paralel a
instrucţiunilor unui program oarecare, care nu conţine restricţii specifice procesării paralele.
Înseamnă că pot apare diferite dependenţe, în sensul că o instrucţiune poate folosi, ca operand de
intrare, rezultatul execuţiei altei instrucţiuni. Pe de altă parte, succesiunea instrucţiunilor nu poate
fi, de la început, cunoscută deoarece pot apare instrucţiuni de salt, dependente la rândul lor de alte
rezultate intermediare.
În altă ordine de idei, disponibilităţile hardware ale procesorului nu sunt totdeauna aceleaşi, la
orice moment de timp. Astfel, prelucrarea unei instrucţiuni poate necesita la un moment dat
acţiunea unui subansamblu sau operator care este implicat în procesarea altei instrucţiuni.
Pentru rezolvarea acestor probleme, abordarea structurilor suprscalare a necesitat dezvoltarea mai
multor categorii de concepte noi, prezentate mai jos.
Execuţia dinamică (Dynamic Execution) – Codul operaţiei este scindat în mai multe micro-
operaţii de lungime fixă, care după o rearanjare corespunzătoare se execută simultan, într-un
singur ciclu de ceas.
Execuţia speculativă (Speculative Execution) – Instrucţiunile sunt executate în altă ordine decât
cea impusă de program. În acest fel este evitată acţiunea salturilor. Rezultatele temporare sunt
stocate temporar într-o zonă de memorie tampon, urmând ca apoi să fie supuse unei operaţii de
rearanjare. În cazul apariţiei unei instrucţiuni de salt, chiar înainte ca aceasta să fie complet
executată, procesorul continuă încărcarea de instrucţiuni pentru a completa coada de aşteptare de
la intrare. Alegerea adreselor de încărcare a instrucţiunilor este estimată (speculată), urmând ca
apoi, să fie verificată şi confirmată. Dacă adresa de salt nu a fost corect estimată, coada de
instrucţiuni deja încarcate este golită şi se reia procesul de încărcare de la adresa corectă.
Execuţie în orice ordine (Out of order execution) – Execuţia instrucţiunilor se face în paralel, fără
a ţine cont de execuţia lor secvenţială din program. Dacă apare o indisponibilitate a unei resurse
hardware, procesorul va executa instrucţiunea următoare, care nu intră în conflict cu precedenta,
urmând să revină ulterior la instrucţiunea peste care a sărit.
Reordonare (utilizarea ROB – Re-Order-Buffer) – Rezultatele temporare, obţinute după execuţia
speculativă a unui număr de microinstrucţiuni de lungime fixă, sunt stocate într-o zonă tampon
(ROB). Rezultatele finale trebuie aranjate apoi în ordinea corespunzatoare.
Predicţia salturilor (Branch Prediction)- Este o procedură prin care sunt estimate adresele de salt,
pentru a permite încărcarea de instrucţiuni în coada de aşteptare, înainte de execuţia completă a
instrucţiunii de salt. Estimarea are loc pe baza informaţiilor obţinute, într-o manieră statistică, de
la execuţiile anterioare ale instrucţiunilor de salt, care au avut loc într-o perioadă relativ recentă,
folosind o memorie tampon.
Detecţia dependenţelor – Determinarea dependenţelor, la nivelul operanzilor, între instrucţiuni.
Cu ajutorul unui set de comparatoare se determină dacă registrul de scriere a unei instrucţiuni,
aflate într-o etapă mai avansată, este folosit, ca intrare, de alte instrucţiuni aflate în fazele de
prelucrare precedente. Dacă se întâmplă aşa, prelucrarea instrucţiunii respective (din faza
precedentă) este blocată până la obţinerea datelor necesare.
Modul de Înaintare (Forward) – Este folosită atunci când rezultatele obţinute în urma execuţiei
unei instrucţiuni, conform programului, trebuie plasate într-un registru, pentru a fi folosite de o
ASC – Dan Olaru

instrucţiune următoare. Pentru mărirea eficienţei, circuite specializate transferă rezultatul către
instrucţiunea următoare, când aceasta se află încă în faza de decodificare, fără a mai efectua
transferuri intermediare cu regiştri.

Branch
Instr.Cache
Target
Buffer

Prefetch Buffer
Data
Microcode
Bus Instr. Decode ROM
Addr
Bus
Ctrl Control Unit
Mag
Ctrl.
Adr.Gen (U) Adr.Gen (V) FPU
Control
Page
Unit Int. Reg. File FP. Reg. File
ALU (U) ALU (V)
Add
Shifter
Multiply
Data Cache
Divide
TLB

Fig.*. Schema de principiu a microprocesorului Pentium I.

Adresarea memoriei
Funcţionarea procesorului, în orice moment, este guvernată de un program care constă în
instrucţiuni (comenzi) maşină, care pot fi încărcate şi executate prin intermediul circuitelor
electronice (hardware) aferente. Deci, orice program, scris într-un anumit limbaj, trebuie
transformat (compilat) în limbaj de asamblare, bazat numai pe istrucţiunile specifice procesorului
utilizat. Codul unei instrucţiuni (determinat de formatul instrucţiunii) specifică tipul operaţiei şi
informaţiile necesare identificării operanzilor de intrare şi de ieşire, care se găsesc iniţial în
memoria RAM (memoria principală) sau care, eventual, au fost transferaţi în registrele
procesorului. Deoarece pe parcursul execuţiei programului sunt efectuate numeroase accese la
memorie, din motive de eficienţă (viteză de lucru) şi de simplitate în scrierea programelor există
mai multe moduri de specificare a locaţiei unde se găsesc operanzii, cunoscute ca moduri de
adresare a memoriei. Tot din motive de eficienţă dimensiunea (mărimea) locaţiilor adresate
trebuie să corespundă volumului datelor stocate. De aceea, adresarea memoriei, şi chiar a
registrelor procesorului se poate face la nivel de octet (byte), cuvânt sau dublu-cuvânt. Acest mod
ASC – Dan Olaru

de lucru permite, pe de altă parte compatibilitatea cu programele mai vechi, scrise pentru
procesoare cu o dimensiune mai redusă a cuvântului de date.
Adresarea imediată (directă) – Operandul este un octet sau un cuvânt conţinut în codul
instrucţiunii.
Adresarea directă la registru – Operandul este conţinutul unui registru, specificat în codul
instrucţiunii.
Adresarea directă la memorie – Operandul se află în memorie la adresa efectivă (offset)
specificată în codul instrucţiunii.
Adresarea indirectă la memorie prin registru – Operandul se află în memorie la adresa efectivă
dată de conţinutul unui registru (de bază sau index).
Adresarea indirectă la memorie prin registru cu deplasare – Operandul se află în memorie la o
adresă efectivă dată de suma între conţinutul unui registru de bază sau index, şi un deplasament
specificat în codul instrucţiunii.
Adresarea indirectă la memorie prin două registre – Operandul se află în memorie la adresa
efectivă dată de suma conţinuturilor registrelor de bază şi index, specificate în codul instrucţiunii.
Adresarea indirectă la memorie prin două registre cu deplasare – La adresa operandului,
calculată ca mai sus, se adaogă o valoare corespunzătoare unui deplasament, specificat în codul
instrucţiunii.

Setul de registre
Familia de microprocesoare produse de firma Intel, desemnată prescurtat I 80X86, identificate
prin indicativele: 8086, 8088, 80186, 80286, 80386, 80486, conţine acelaşi set de bază de registre
generale. Pentru tipurile mai recente au foste aduse diferite îmbunătăţiri, păstrând
compatibilitatea cu cele precedente. Dezvoltările ulterioare, cunoscute sub denumirea de
Pentium, s-au bazat, de asemenea, pe aceleaşi concepte.
a) Grupul de Registre generale se poate împărţi, la rândul lui, în două subgrupuri:
Registre de date: AX, BX, CX, DX se caracterizează prin faptul că pot fi adresate şi la nivel de
octet, care poate ocupa jumătatea inferioară (AL, de exemplu) sau superioară (AH, de exemplu) a
unui registru. Deşi aceste registre sunt considerate ca registre generale, există şi instrucţiuni
aritmetice care le acordă anumite semnificaţii speciale, aşa ca mai jos:
AX – operaţii de intrare/ieşire pe 16 biţi (un cuvânt) sau registru implicit (când nu este specificat
în instrucţiunea respectivă) pentru înmulţiri şi împărţiri pe 16 biţi;
AL - operaţii de intrare/ieşire pe 8 biţi şi registru implicit în aritmetica BCD, înmulţiri şi împărţiri
pe 8 biţi;
AH - registru implicit pentru înmulţiri şi împărţiri pe 8 biţi;
BX – operaţii cu memoria, adresare indirectă;
CX - registru implicit pentru operaţii cu şiruri şi bucle;
CL – operaţii de deplasare sau rotaţie a poziţiei biţilor în cadrul registrului;
DX - operaţii de intrare/ieşire cu adresare indirectă şi registru implicit pentru înmulţiri şi împărţiri
pe 16 biţi.
Registre de adresare care pot fi clasificate în:
Registre indicatoare de adresă în stivă:
SP (“Stack Pointer”) – conţine adresa curentă în stivă;
BP – registru implicit, conţinând adresa de bază pentru adresarea indirectă a stivei;
Registre indicatoare de adresă index pentru şiruri:
ASC – Dan Olaru

DI – registru index pentru şirul destinaţie (operator de intrare);


SI - registru index pentru şirul sursă. (operator de ieşire).
Registrele de adresare, de asemenea, pot fi utilizate în anumite instrucţiunui aritmetice sau logice
pentru date de 16 biţi.

b) Registrele de segment pot conţine informaţia de adresă pentru:


- Segmentul de program – CS (code segment);
- Segmentul de date curent – DS (data segment);
- Segmentul de date suplimentar – EX (exttra segment);
- Segmentul de stivă – SS (stack segment).

Astfel adresa completă a codului instrucţiunii este formată din conţinutul registrului CS şi
deplasamentul (offsetul) numărătorului de program IP (Instruction Pointer). Registrul DS conţine
de obicei adresa bazei segmentului de date. În cazuri speciale sunt folosite registrele BP, SP sau
DI. De obicei, segmentul de stivă este identificat prin SS. Atunci când sunt utilizate în mod
implicit sau explicit registrele BP şi SP se consideră că segmentul de date este definit explicit
prin conţinutul registrului ES.

Configuraţia unui Cipset


În cadrul arhitecturilor timpurii ale plăcilor de bază ale calculatoarelor PC, datorită posibilităţilor
de integrare mai modeste, se foloseau circuite integrate specializate pentru anumite funcţii. Pe
măsura dezvoltării tehnologice, aceste funcţii au fost cumulate şi integrate într-un număr redus de
cipuri, utilizând de regulă două cipuri de capacitate mare destinate transferurilor de date cu viteză
mare şi viteză moderată sau lentă. De obicei, acestea păstrează modul şi caracteristicile de
funcţionare ale componentelor iniţiale, care au devenit clasice.
Pentru a putea urmări modul de lucru se va considera, ca exemplu, structura unei plăci de bază de
la începutul dezvoltării PC, bazată pe procesorul Intel 80386, foarte sugestivă pentru studiul unei
arhitecturi de bază, la care pot fi identificate elementele componente.
Cipsetul CS 8230 destinat calculatorului AT/386 coonţine şapte cipuri VLSI şi conţine, aproape
în întregime circuitele logice necesare unei arhitecturi iAPX386, acesta oferind o soluţie PC AT
compatibilă. Arhitectura acestuia conţine elemente flexibile, care permite implementarea unor
staţii de lucru specializate (CAD/CAE, sisteme de birou, industriale sau financiare). Combinat cu
controlerul de periferice integrat 82C206 se obţine un sistem complet, compatibil PC AT,
conţinând 40 de componente, plus dispozitivele de memorie.
Cipsetul CS 80230 conţine componente din seria 82xxx şi au funcţiile următoare.
82C301 – Controler de magistrală;
82C302 – Controler de memorie;
82A303 sau 82A304 – Interfaţă (latch şi driver) pentru magistrala de adrese;
82A305 - Interfaţă (driver) pentru magistrala de date;
82A306 – Buffer (driver) pentru semnalele de control.

Se observă că aceste cipuri realizează funcţii specifice lucrului cu magistrala. Printre acestea
sunt: amplificarea în curent a semnalelor de adrese sau de date (funcţia de driver); generarea
respectiv amplificarea semnalelor de control şi eventual memorarea temporară a informaţiilor de
adresă sau date, atunci când se lucrează cu blocuri de memorie sau cu tronsoane de magistrală
ASC – Dan Olaru

multiplexate (pe care se transmit succesiv informaţii referitoare la zonele de adresă sau coduri de
adresă şi date).

Cipsetul CS 80230 admite o magistrală locală pentru procesor (CPU), un sistem de memorie de
32 de biţi şi magistralele secifice arhitecturii AT (advanced technology), corespunzător Fig.*.
Cipurile 82C301 şi 82A306 asigură generarea şi sincronizarea semnalelor de control pentru toate
magistralele. Circuitul 82C301 suportă, de asemenea, un semnal de ceas independent şi permite
alegerea dinamică a semnalului de ceas pentru procesor. Circuitul 82A306 conţine amplificatoare
(buffer) pentru semnalele de control de magistrală şi circuite necesare altor funcţii logice.
Circuitul 82C302 permite funcţionarea subsistemului de memorie în regim de memorie paginată.
Circuitele 82A303 şi 82A304 asigură interfaţarea între toate magistralele de adresă, generează
semnalele de adresă RAS/CAS pentru sistemul de memorie şi adresele necesare pentru transferul
între căile de date. Două circuite sunt folosite pentru interfaţarea între sistemul de memorie local
şi magistralele de date. De asemenea, poate realiza transferul între căi de date cu parametrii
diferiţi.
Sistemul bazat pe cipsetul CS 80230 conţine patru magistrale, şi anume: magistrala locală a
procesorului (A şi D - adrese şi date), magistrala sistemului de memorie (MA şi MD), magistrala
canalelor de intrare-ieşire (I/O – SA şi SD), magistrala extinsă X-bus (XA si XD). Magistrala
sistemului de memorie este utilizată pentru interfaţarea controlerului DRAM cu circuitul 82C302.
Magistrala canalelor de intrare-ieşire (I/O) este destinată cuploarelor compatibile magistralei AT,
pentru dispozitive funcţionând pe 8 sau 16 biţi. Magistrala “X” este utilizată pentru periferice
atunci când într-o structură IBM PC AT sunt prezente controlere DMA şi de temporizare (Timer).
Aceasta contine numai căi de date de 8 biţi. Termenul de magistrală AT (AT bus) se referă la
magistrala canalelor I/O şi magistrala “X”. Sunt prevăzute, de asemenea, extensii ale magistralei
I/O pentru 32 de biţi.
ASC – Dan Olaru

Local Bus System Memory Bus I/O Channel Peripheral Bus


32 D 32 A 36 MD 32 MA 16 SD 24 SA 8 XD 24 XA
82A303
82A304
Adress
Buffers
80287
80387

82A305
80386 (x2)
Data
Buffers

82C301 Control ROM BIOS


82A306 82A206
Integrated
82C302
Peripheral
(x2)
Controller
Memory
Control AT
Control Add-on
Boards
8042
Buffers
Keyboard
Controller

DRAM

Fig.*. Schema bloc a sistemului AT/386

Sistemul AT/386 a rezultat dezvoltării sistemului AT/286, bazat pe un cipset conţinând


componentele următoare.
82C201 – controler de sistem, destinat generării majorităţii semnalelor de ceas şi a semnalelor de
control necesare funcţionării întregului sistem. Semnalele produse de 82C201 sunt utilizate în
toată structura sistemului pentru comanda şi controlul circuitelor logice. Toate ciclurile de
magistrală sunt coordonate, decodate sau temporizate de catre acest dispozitiv. Acesta reprezintă
una dintre componentele care asigură functionarea unitară a sistemului.

82C202 – realizează funcţiile de decodificare şi selecţie necesare circuitelor de memorie RAM


sau ROM şi a unei părţi a circuitelor de intrare-ieşire (I/O). Circuitul 82C202 foloseşte semnalele
RAS/CAS şi generează semnalele de selecţie pentru diferite tipuri de cipuri de memorie. De
asemenea, conţine circuite auxiliare pentru comanda ceasului de timp real (care generează
coordonata de timp) şi pentru semnalelor de selecţie a controlerului de tastatură (Keyboard
controller) şi a Portului “B” (system control/status port).

82C203 – realizează memorarea temporară a codului de adresă (latching) şi amplificarea


semnalelor aferente (buffering). Semnalele de control generate de circuitul 82C201 sunt
amplificate de 82C203 dotat cu ieşiri cu trei stări. De asemenea, în circuitul 82C203 este integrat
portul de stare şi control al sistemului, referit ca Port B.
ASC – Dan Olaru

82A204 – conţine amplificatoarele (driver) pentru liniile de adresă inferioare pentru magistrala
extinsă, pentru magistrala I/O şi magistrala memorie. În afară de amplificarea (buffering)
semnalelor de adresă pentru memorie, 82A204 mai realizează multiplexarea pe linii şi coloane la
memorie şi numărarea ciclurilor de reînprospatare (refrech).

82A205 – reprezintă amplificatorul (buffer-ul) sistemului pentru liniile magistralei de date. De


asemenea, circuitul mai realizează încă două funcţii suplimerntare. Prima, se referă la trasferul de
date de la procesorul pe 16 biţi la dispozitivele pe 8 biţi. În acest caz este necesară memorarea
(latching) unui byte (jumătate de cuvânt) şi translatarea byte-ul inferior sau superior. Cea de-a
doua funcţie se referă la generarea bitului de paritate şi verificarea transferurilor de date în
sistem. De asemenea, circuitul conţine şi logica de detecţie şi semnalare a erorilor.

Elemente constructive

Dispozitive electronice de comutaţie


Operatorii logici, deci cu două stări posibile la ieşire, conţin, de fapt, dispozitive electronice de
comutaţie, care se pot afla fie în stare de conducţie, caracterizată prin trecerea curentului, fie în
stare blocată, când curentul este aproape nul. De regulă, sunt folosiţi tranzistori (denumirea
provine de la sintagma “trans-rezistor”) bipolari sau MOS (care utilizează tehnologia metal-oxid-
semiconductor).
Tranzistorul bipolar (Fig.*) intră în conducţie când curentul prin “bază” are o valoare şi polaritate
corespunzătoare tipului de tranzistor (npn sau pnp). Analog, se pot realiza tranzistori MOS (cu
canal indus) care intră în conducţie atunci când poarta este polarizată corespunzător tipului de
tranzistor (tip n sau tip p). Simbolurile pentru tranzistorul bipolar npn şi tranzistorului MOS de
tip p sunt date în (Fig.*). Pentru cazurile pnp sau tip n sensurile curenţilor, şi polarităţilor se vor
schimba.

colector drena
baza poarta

emitor
sursa

Din punct de vedere constructiv, tranzistorii se bazează pe joncţiuni între materiale


semiconductoare, de tip n sau de tip p, create prin procese de difuzie, la temperatură ridicată.
Materialul semiconductor folosit în circuitele logice este Siliciul. Acesta se spune că este de tip n
dacă este dopat cu o substanţă care creează electroni în exces sau că este de tip p dacă este dopat
cu o substanţă care creează goluri în exces. Materialul de tip n conţine în reţeaua cristalină
electroni suplimentari, faţă de reţeaua iniţială, iar materialul de tip p conţine lipsuri de electroni
(goluri) faţă de reţeaua iniţială. Cu toate acestea, sarcina globală rămâne neutră deoarece
electronii sau golurile suplimentare sunt asociate nucleelor din substanţa dopantă, care la rândul
lor conţin protoni (deci sarcină) suplimentari.
Într-o joncţiune pn, pentru stabilirea echilibrului forţelor de legătură între particule, aceste
difuzează către părţile opuse ale joncţiunii, unde se creează câte o sarcină spaţială. Procesul de
ASC – Dan Olaru

difuzie se opreşte în momentul când câmpul electric generat de sarcinile spaţiale echilibrează
forţele care au generat difuzia.
În lipsa aplicării unei tensiuni exterioare, pe laturile joncţiunii, nu există conducţie electrică
deoarece deplasarea sarcinii spaţiale este oprită de câmpul rezultat, care se opune procesului de
difuzie al purtătorilor. Dacă însă este aplicată o tensiune exterioară, contrară câmpului creat de
sarcini (joncţiunea este polarizată direct), aceasta va reduce influenţa câmpului şi purtătorii de
sarcină vor putea migra mai departe. Dacă prin bornele joncţiunii pot circula curenţi, aceştia vor
alimenta permanent joncţiunea cu purtători, menţinându-se astfel un circuit electric prin
joncţiune.
Dispozitivul electronic cu o singură joncţiune reprezintă o diodă. Datorită mecanismului
prezentat mai sus aceasta poate conduce curentul numai într-un singur sens. Principiul de
funcţionare al tranzistorului bipolar se bazează pe o structură cu două jonctiuni (npn de exemplu),
în care grosimea zonei dintre joncţiuni este foarte redusă. Astfel, un curent în joncţiunea bază-
emitor (polarizată direct) poate alimenta cu purtători joncţiunea vecină (bază-colector) care este
polarizată invers. Se dovedeşte astfel că joncţiunea bază-colector este blocată în lipsa unui curent
de bază, iar atunci când acesta este prezent, curentul prin joncţiune bază-colector este “comandat”
de curentul de bază . Acest fenomen poate avea loc datorită “modulării” zonei de sarcină spaţială
din zona bazei, vecină colectorului, prin intermediul curentului de bază care curge spre emitor.
Deci, la un tranzistor bipolar tensiunea bază-emitor, care este polarizată direct, are variaţii reduse,
comanda realizându-se prin intermediul curentului de bază.
Funcţionarea tranzistorului MOS este mult diferită. Deşi avem o structură de joncţiuni care pare
asemănătoare, comanda curentului drenă-sursă se realizează diferit. Constructiv, tranzistorul (de
tip p, de exemplu) este realizat pe o structură de tip p, zonele corespunzătoare sursei şi drenei
fiind de tip n (Fig.*). Deasupra zonei de legătură între drenă şi sursă se găseşte electrodul de
poartă, izolat de structura semiconductoare printr-un strat, extrem de subţire, de oxid de siliciu
(SiO2). Dacă electrodul de poartă nu este polarizat, circulaţia curentului între sursă şi drenă este
blocată de una dintre cele două joncţiuni, care este polarizată invers. Atunci când între electrodul
de poartă şi cel al sursei se aplică o diferenţă de potenţial, aceasta creează un câmp electric
deasupra zonei de legătură dintre sursă şi drenă. Când acest câmp este destul de puternic, acesta
extrage purtători de sarcină din structura semiconductoare, care devin liberi. Aceştia vor asigura
procesul de conducţie între sursă şi drenă.

sursa poarta drena


emitor bază colector

p n n E n
canal de purtători
n
substrat Structură p

Elemente de circuit
Circuite de multiplexare şi demultiplexare
În cazul când căile de date conţin numai o singură linie, corespunzătoare transferului unui singur
bit de date, pentru selecţie este necesară numai o singură conexiune. Schema multiplexorului (a)
ASC – Dan Olaru

poate fi implementată cu trei porţi Şi-Nu (NAND) şi un inversor. În funcţie de starea intrării va fi
validată numai una dintre porţi, care se va comporta ca un inversor. Starea celeilalte va fi forţată
pe nivelul “1”. Rezultă că poarta de la ieşire se va comporta tot ca un inversor, pentru datele
transmise. Se observă că porţile de la intrare joacă rolul unor operatori de tip ŞI (înmulţire
binară), iar poarta de la ieşire joacă rolul unui operator SAU (adunare binară). Deci, porţile de la
intrare pot permite sau nu transferul datelor, iar poarta de ieşire transmite la ieşire numai
contribuţia intrării porţii validate, indiferent de nivelul logic al celeilalte intrări. Tabelul de
adrevăr pentru această structură de multiplexor este Tab.1.
În schema demultiplexorului (b), valoarea de la intrare este distribuită către cele două porţi de
validare a trasferului. În funcţie de nivelul conexiunii de selecţie, va fi validată numai o singură
poartă, care va juca rol de inversor, iar cealaltă va fi forţată în starea “1”. Inversoarele de la ieşire
au rolul de a restabii nivelul de la intrare (ne-inversat). Dacă acestea sunt de tip “trei-stări”, la
ieşirea inactivă vom avea impedanţă mare (nivel flotant). În caz contrar, ieşirea inactivă va fi
poziţionată pe “0”. Tabelul de adevăr Tab.2 corespunde ieşirilor cu două nivele logice, iar Tab.3
celor cu trei-stări. Deşi demultiplexoarele integrate separate nu au, de regulă, ieşiri cu trei-stări,
totuşi această schemă este foarte utilă în cazul structurilor complexe cu multe nivele de conexiuni
sau magistrale interne multiple.

Tab.1 Tab.2 Tab.3


Selecţie A B Q Selecţie IN QA QB Selecţie IN QA QB
0 0 x 0 0 0 0 0 0 0 0 x
0 1 x 1 0 1 1 0 0 1 1 x
1 x 0 0 1 0 0 0 1 0 x 0
1 x 1 1 1 1 0 1 1 1 x 1

A
QA

Q IN

B
QB
(a) Selecţie (b)
Selecţie
Fig.*. Schema multiplexorului şi demultiplexorului cu câte două căi selectate

Circuite de memorie
Circuitele de memorie au un rol esenţial în alcătuirea şi funcţionarea unui sistem de calcul.
Acestea sunt prezente nu numai la nivelul dispozitivelor propriu-zise de memorie (RAM, Cache),
dar şi la nivelul procesorului sau dispozitivelor periferice (cuploare), sub forma registrelor de
memorie (Latch) sau a elementelor bistabile.
Memoriile sau regiştrii de tip static conţin colecţii de circuite bistabile interconectate. Acestea
sunt elemente de memorie cu două stări care pot memora o unitate de informaţie (un bit). Astfel,
ASC – Dan Olaru

circuitul trece în starea logică corespunzătoare intrării (prin operaţia de scriere) spunem că acesta
memorează informaţia de la intrare, până când are loc o nouă operaţie de scriere.
Cu ajutorul circuitelor bistabile se pot construi circuite secvenţiale. Acestea sunt caracterizate de
mai multe stări, specifice stărilor individuale ale bistabililor din care sunt alcătuite. De exemplu,
dacă un circuit secvenţial conţine trei bistabili, acesta va putea avea cel mult 8 stări,
corespunzătoare tuturor combinaţiilor de stări ale celor trei bistabili. Astfel, dacă codificăm
(reprezentăm) starea fiecărui bistabil cu câte un bit, care poate fi 0 sau 1, rezultă că starea globală
a circuitului secvenţial poate fi reprezentată de trei biţi. Un număr cu trei biţi poate avea valori (în
zecimal) de la 0 la 7, deci în total 8 valori sau 8 stări. Este important că acestea nu mai depind
direct de stările (valorile logice) de la intrare. De fapt, la un moment dat, starea globală a
circuitului secvenţial depide de starea iniţială a acestuia (la punerea în funcţiune), de starea
instantanee a intrărilor dar şi de istoria (evoluţia) intrărilor până în acel moment. Cu toate
aceestea se poate arăta că un circuit secvenţial poate fi construit cu operatori combinaţionali, de
tipul porţilor logice. Funcţionarea circuitului, bazată pe stări stabile, care nu sunt direct
dependente de intrări se poate realiza prin folosirea unor bucle de reacţie pozitivă (conexiuni de
la ieşiri către intrări).
Un exemplu simplu de circuit bistabil poate fi implementat cu două porţi NAND (Fig.*).

SA
QA

SB QB

Pentr această conexiune, stările la ieşire sunt determinate în modul următor. Dacă, de exemplu,
intrarea SA are starea logică 0, ieşirea corespunzătoare QA va trece obligatoriu în starea 1,
conform modului de lucru al porţii NAND. Cealaltă ieşire, QB va fi determinată de intrarea SB şi
iesirea QA. Dacă SB are starea logică 0, QB va trece obligatoriu în starea 1, iar QA va depinde de
starea intrării SA şi ieşirii QB. Dacă ambele intrări sunt în starea 0, ambele ieşiri vor fi forţate în 1,
iar dacă ambele intrări sunt în starea 1, aceste nu vor influenţa porţile NAND, starea lor
rămânând cea precedentă. Rezultă funcţionarea descrisă de tabelului *.

Tabelul *
Intrarea SA Intrarea SB Ieşirea QA Ieşirea QB
0 0 1 1
0 1 1 0
1 0 0 1
1 1 St. prec. St. prec.

Se observă că acest circuit bistabil poate fi folosit ca o celulă de memorie. Atunci când la intrări
se aplică valori logice complementare, acestea vor determina starea bistabilului, similar unei
operaţii de scriere. Această stare va fi menţinută, chiar dacă nu mai avem informaţie la intrări, cu
condiţia ca acestea să fie trecute în starea logică 1. Astfel, o celulă de memorie, în forma cea mai
ASC – Dan Olaru

simplă, poate fi construită dacă adăugăm circuitului bistabilul două porţi pentru validarea
operaţiei de scriere şi un circuit inversor, pentru obţinerea intrărilor cu valori logice
complementare (Fig.*). Dacă semnalul de scriere Write este în starea 0, ieşirile porţilor de
validare vor avea valoarea 1, iar bistabilul îşi va păstra starea precedentă, care va putea fi citită la
ieşire. Dacă semnalul de scriere are valoarea logică 1, porţile de validare vor inversa şi vor aplica
la intrările bistabilului semnalele complementare de la intrarea şi de la ieşirea inversorului.
Astfel, dacă la intrare avem starea 0, respectiv 1 logic, aceasta se va regăsi la ieşire după operaţia
de scriere.

Intrare

Ieşire

Write

Fig.*. Celula de memorie

Celula de memorie de tip dinamic nu se bazează pe un circuit bistabil. În acest caz informaţia
(valoarea sau starea descrisă de un bit) corespunde stării de încărcat sau descărcat a capacităţii
de poartă a unui tranzistor MOS (Fig.*). Avantajul major al acestei structuri este faptul că pentru
stocarea informaţiei este necesar un singur tranzistor, deci densitatea celulelor de memorie pe cip
şi implicit capacitatea totală ve memorie este mult mai mare.

Date intrare Date ieşire

selecţie

Fig.*. Structura unei celule de memorie dinamică

Această schemă de principiu a celulei de memorie conţine trei tranzistori MOS. Capacitatea de
poartă a celui din mijloc reprezintă elementul de stocare. Ceilalţi doi tranzistori joacă rol de
elemente de comutaţie. Capacitatea de stocare poate fi încărcată sau descărcată dacă tranzistorul
de la intrare este în stare de conducţie. Datele sunt acesibile pentru citire dacă tranzistorul de
ieşire este în conducţie.
În realitate, se utilizează o schemă mai eficientă (Fig.*), la care fiecare celulă de memorie
(corespunzătoare unui bit) conţine numai doi tranzistori MOS, unul pentru obţinerea capacităţii
de stocare, figurat cu un condensator, iar celălalt pentru conectarea acestuia la o reţea de
conexiuni, cu o structură matriceală (figurat printr-un comutator).
ASC – Dan Olaru

Memoria RAM dinamică, deşi poate oferi capacităţi mult mai mari, pentru acelaşi număr de
componente, pune două probleme. Prima se referă la pierderea, în timp a sarcinii din capacitatea
de stocare. De aceea, pentru ca memoria să-şi păstreze conţinutul, sunt necesare cicluri de
reîmprospătare sau Refresh prin care este regenerată sarcina capacităţilor de stocare.
În al doilea rând, capacitatea tranzistorilor MOS, de dimensiuni foarte reduse (de ordinul
micronului) este foarte mică şi sarcina stocată în aceasta nu este capabilă să comande
amlificatoarele de magistrală.
Atunci când memoria dinamică este în funcţiune, datorită prezenţei unor circuite suplimentare,
ciclurile de Refresh, de fapt, sunt realizate odată cu operaţiile de scriere sau citire. Aceasta se
impune datorită faptului că prin operaţia de scriere sau citire sarcina stocată se pierde, fiind
distribuită pe intrările comparatoarelor. Astfel, este necesară o secvenţă de lucru specială, care
permite detecţia prezenţei sarcinii de stocare, la nivelul tranzistorilor MOS şi care acţionează în
modul următor:
- înainte de fiecare operaţie de citire, comutatoarele de la nivelul superior generează o
secvenţă de preîncărcare care se obţine o sarcină electrică, la nivelul liniei de bit,
localizată de fapt în porţile tranzistoarelor MOS de la intrarea comparatoarelor;
- în momentul când un comutator de legătură cu o capacitate de stocare intră în conducţie
(comandată de linia de cuvânt), sarcinile de preîncărcare se redistribuie în funcţie de
starea de încărcare a capacităţii de stocare. În funcţie de această redistribuire se va obţine
o anumită valoare pentru potenţialul la intrarea comparatoarelor, care vor comanda linia
de ieşire în starea Sus sau Jos;
- refacerea sarcinilor de stocare se face prin închiderea comutatoarelor de Refresh. Dacă
este vorba de o operaţie de citire, semnalul este luat de la ieşirea comparatoarelor,
bineînţeles după invalidarea intrărilor şi memorarea temporară a stării acestora. În cazul
unei operaţii de scriere, semnalul este preluat chiar de pe magistrală.

Acest mod de lucru este necesar deoarece, pe de o parte, sarcina de stocare este foarte redusă şi
nu este capabilă, singură, să comande intrările comparatoarelor şi, pe de altă parte, valoarea
potenţialului obţinut prin redistribuirea sarcinii poate fi mai bine controlată.
Atât liniile de preîncărcare ca şi liniile de cuvânt sunt comandate corespunzător cuvântului
selectat prin codul de adresă. Trebuie menţionat însă, că pentru a mări eficienţa procesului de
Refresh operaţia de citire se poate extinde la nivelul unui grup de cuvinte, corespunzător unei
anumite structuri matriceale de partiţionare a memoriei, selecţia cuvăntului citit pe magistrală
facându-se prin intermediul unui multiplexor (MUX).
ASC – Dan Olaru

Vcc/2
Preîncărcare
Celula
de 1 bit

Linie cuvânt

Linie de bit
Vcc/2 Vcc/2 Vcc/2
Refresh
Comparatoare

MUX

Fig.*. Structura memoriei RAM dinamice.

Din punct de vedere hardware, memoria este organizată în plăci (card-uri) care conţin mai multe
circuite integrate. Fiecare dintre acestea conţin un anumit număr de celule de memorie. Fiecare
celulă poate memora câte un bit. Totuşi funcţionarea calculatorului şi adresarea datelor se
bazează pe transferuri de grupuri de biţi (cuvinte). Deci cipul de memorie trebuie să conţină
circuite electronice suplimentare care să permită adresarea la citire sau scriere a câte unui grup de
celule de memorie, corespunzătoare cuvântului adresat. De asemenea, sunt necesare circuite
amplificatoare de curent, la ieşiri, şi circuite de recepţie, pentru transferul datelor către celulele de
memorie. Dacă liniile de ieşire trebuie să fie comune cu liniile de intrare, aşa cum se întâmplă în
cazul conexiunii directe la magistrală, fără intervenţia unui controler de memorie,
amplificatoarele de ieşire trebuie să fie cu trei-stări şi să fie activate numai în timpul operaţiei de
citire, prin de semnalul Read.
În Fig.* este descrisă o structură care conţine 16 celule de memorie, organizate în patru cuvinte.
Pentru adresarea celulelor de memorie este utilizat un circuit decodificator, care pentru fiecare
cod de adresă selectează câte o linie de celule de memorie, corespunzătoare unui cuvânt. Pentru
citirea datelor pe magistrală este activat semnalul CitireDate sau Read care validează
amplificatoarele de ieşire, care în caz contrar rămân în starea-a-treia (izolată).
ASC – Dan Olaru

b b b b

b b b b
Cod Adresă Reţea de
b b b b celule de
memorie
DEC
b b b b

Citire date
D3 D3
Data D2 D2 Data
In D1 D1 Out
D0 D0

Fig.*. Structura memoriei de adresare a memoriei.

CK D Q
Amplificator
(buffer) de intrare
CK Reprezentarea
CK simbolică

CK
Amplificator
(buffer) de ieşire
Fig.*. Schema de principiu a unui bistabil de tip “Latch” în implementare CMOS.
ASC – Dan Olaru

QA

IN

QB

(b) Selecţie OE

Circuite secvenţiale şi bistabilul Maser-Slave (Stăpân-Sclav)


Acest bistabil este o componentă de bază a circuitelor secvenţiale larg utilizate în toată structura
unui sistem de calcul. Modul de lucru Master-Slave permite ca diferite categorii de circuite să fie
acţionate de către frontul (crescător sau descrescător) al unui impuls de comandă. Astfel, poate fi
redus timpul de comandă şi stabilizare, identificându-se mai uşor momentul tranziţiei. De regulă,
toate schimbările de stare ale circuitelor secvenţiale sunt comandate de fronturile impulsurilor de
ceas generare de un oscilator cu undă dreptunghiulară.
Circuitul numărător
Acesta produce la ieşiri un cod corespunzător numărului impulsului aplicat la intrare (bineînţeles,
într-o manieră ciclică). Prin adăugarea unui decodificator pot fi activate diferite conexiuni,
corespunzător la diferite momentele de timp. În acest fel pot fi configurate circuite (secvenţiale)
care să parcurgă o anumită mulţime de stări.
Circuitele de numărare conţin un grup de bistabili comandaţi pe frontul impulsului de tact (T). În
cazul numărătorului asincron aceştia sunt comandaţi din aproape în aproape, iar în cazul
numărătorului sincron sunt comandaţi simultan, schimbările de stare având loc in funcţie de
ieşirile bistabililor precedenţi şi a intrării conectate la ieşirea finală sau una de transport. Deşi are
o construcţie mai complexă, numărătorul sincron este superior deoarece schimbările de stare se
produc simultan, iar viteza de lucru este mai mare deoarece nu mai este necesar timpul de
propagare a informaţiei de la intrare câtre ieşire.
T
T T T In

Q0 Q1 Q2 Q0 Q1 Q2

Fig.*. Conexiunea numărătorului asincron, respectiv sincron


Registrul de deplasare (serial)
Acest tip de registru de deplasare este foarte utilizat în cadrul operaţiilor aritmetice care necesită
deplasarea poziţională a numererlor (cazul algoritmului de înmulţire, de exemplu) sau în cadrul
interfeţelor care folosesc transferul de date serial. În ultimul caz, registrul este încărcat paralel, cu
cuvăntul de date preluat de pe o magistrală, şi apoi acesta este transformat într-o succesiune de
impulsuri, la ieşirea unui registru de deplasare.
Schema de principiu a unui registru de deplasare se bazează pe un set de bistabili master-slave
(M-S) cu ieşirile conectate la intrările următoare. Astfel după fiecare impuls de tact, informaţia
(date de un singur bit) se deplasează de la un bistabil la bistabilul următor. Circuitele master-
ASC – Dan Olaru

slave permit ca funcţionarea să fie stabilă, deoarece pe frontul crescător secţiunea master preia
datele de la bistabilul precedent, la care starea secţiunii master rămâne stabilă, iar pe frontul
descrescător este modificată starea secţiunii master a tuturor bistabililor.
Atunci când registrul este folosit la deplasarea datelor datelor (biţilor) unui cuvânt încărcarea se
face paralel, la comanda semnalului de încărcare (Load), apoi este comandată deplasarea cu un
număr de poziţii şi apoi datele se obţin la ieşirile paralele. Registrul poate fi configurat astfel
încât datele să fie deplasate atât la stânga cât şi la dreapta, în acest caz folosidu-se două semnale
de tact separate. De asemenea, deplasarea se poate face ciclic, atunci când ultima ieşire este
conectată la intrarea serială sau poziţiile rămase libere în urma deplasării pot fi completate cu 0
sau 1 în funcţie de starea intrarii seriale.
Registrul poate, de asemenea, să fie folosit la transformarea datelor din forma paralelă (ca pe
magistrală, de exemplu) în forma serială (ca la portul serial, de exemplu), atunci când se
utilizează intrările paralele şi ieşirea serială (SO) sau la transformarea datelor din forma serială în
forma paralelă atunci când se utilizează intrarea serială (SI) şi ieşirile paralele.
Intrări de date paralele
L

SI SO
M-S M-S M-S M-S
T (CK)

Ieşiri de date paralele

Structura circuitului bistabil Maser-Slave


Schema de principiu pentru un bistabil master-slave implementat, în forma cea mai simplă,
conţinând numai intrarea de tact şi la care s-a renunţat la intrarea de iniţializare (Clear) este dată
în Fig.*. Circuitul poate fi îmbunătăţit prin adăugarea a două intrări speciale, J şi K obţinându-se
bistabilul de tip J-K Master-Slave. Acesta reprezintă o formă generală, care prin diferite
conexiuni ale intrărilor J şi K se pot funcţii particulare ca cele de întârziere, memorare (Latch)
sau comutaţie pe fronturile impulsului de tact. Pentru claritate în implementare s-au utilizat
numai porţi ŞI-NU (NAND).
Schema de bază conţine două circuite bistabile, corespunzător secţiunilor Slave şi Master. Ieşirile
Q, Q ale întregii structuri master-slave comută la apariţia fronturilor căzătoare (descrescătoare)
ale semnalului de comandă T. Principiul de funcţionare este redat în tabelul de mai jos.
Simbolurile cu majuscule reprezintă ieşirile porţilor logice independente (A,B,C,D) sau
configurate ca bistabili de tip R-S (P, P ,Q, Q ). Pentru o scriere mai compactă, stările ieşirilor
grupurilor de porţi au fost grupate. De exemplu, în coloana corespunzătoare grupului de ieşiri A
A
şi B, figurat prin sunt indicate cele două stări după fiecare schimbare a nivelului impulsului
B
de tact.
Să considerăm că, în starea iniţială, ieşirile schemei au stările Q = 0 şi Q = 1, iar intrarea de tact
se află pe nivelul zero (T = 0). Ştiind că ieşirea unei porţi NAND este “0” numai dacă ambele
intrări au nivelul “1” rezultă: A = 1 şi B = 1. Aceste nivele nu schimbă stările ieşirilor primului
ASC – Dan Olaru

bistabil, care rămân la nivelele: P = 0 şi P = 1. Împreună cu ieşirile A şi B acestea determină


starea porţilor C şi D: C = 1 şi D = 0 determinând stările stabile (presupuse la început) pentru
ieşirile Q, Q ale celui de-al doilea bistabil.
Să considerăm că intrarea de tact trece pe nivelul unu (T = 1), în timp ce ieşirile Q, Q se află încă
în stările precedente (Q = 0, Q = 1). Rezultă noua stare a porţilor A şi B: A = 0 şi B = 1. Acestea
vor determina trecerea ieşirilor primului bistabil în stările: P = 1, P = 0. Împreună cu A şi B,
acestea determină nivelele pentru C şi D (C = 1 şi D = 1) care vor conserva starea bistabilului de
la ieşire (Q = 0, Q = 1).
Să considerăm revenirea nivelului intrării de tact în starea “0”. Astfel, ieşirile A şi B vor fi forţate
pe nivelul “1”: A = 1, B =1. Acestea vor lăsa nemodificată starea primului bistabil (P=1, P =0).
Combinaţiile de la intrări va trece porţile C şi D pe nivelele: C = 0 , D = 1. Acestea vor forţa
schimbarea stării bistabilului de ieşire: Q = 1, Q = 0.
Din cele arătate mai sus rezultă că modul de lucru al bistabilului Master-Slave se bazează pe
următoarele faze de funcţionare:
- atunci când intrarea de tact comută pe nivelul “1” primul bistabil schimbă starea, deci se
poate spune că informaţia de la intrare a fost memorată de secţiunea Slave;
- atunci când intrarea de tact revine pe nivelul “0”, bistabilul din secţiunea Slave îşi
conservă starea, iar cel din secţiunea Master comută;
- dacă intrarea de tact trece iar pe nivelul “1”, bistabilul Slave comută, în timp ce bistabilul
“master” îşi conservă starea până la revenirea intrării pe nivelul “0”.

Se observă că, pentru aceasta configuraţie, bistabilul Slave comută pe frontul crescător al
impulsului de intrare, iar bistabilul Master comută pe frontul căzător al acestuia.

Q Q
T A P C Q
B P D Q
C D
0 1 0 1 0
1 1 0 1
1 0 1 1 0
P
P
1 0 1 1
0 1 1 0 1
1 0 1 0 A B

T
Fig.*.Schema de principiu a unui bistabil “master-slave”
ASC – Dan Olaru

Sumatorul
În cadrul sistemului de calcul datele sunt reprezentate cu cifre binare. Un număr binar poate
conţine mai multe cifre binare, valoarea acestuia fiind dată de o sumă de puteri ale lui doi având
drept coeficienţi cifrele binare ale numărului.
Suma a două numere binare trebuie făcută cifră cu cifră, transmiţând transportul de la o operaţie
la alta.
Combinaţiile de adunare pentru numere reprezentate de câte o cifră binară sunt:
0 0 1 1 termenul(A)
+ 0 +1 + 0 +1 termenul(B)
0 1 1 10 transportul(C) si suma (S)
În cazul IV cifra 0 reprezintă suma iar cifra 1 din stânga ei reprezintă transportul (carry) care
trebuie adogat la suma cifrelor plasate la stânga dacă numerele adunate au mai multe cifre. Se
observă că valoarile sumei şi transportului se pot obţine cu următoarele expresii de algebră
binară:
S = AB + AB C = AB
Tabelul de adevăr pentru cele două expresii este:
Termenul A Termenul B Suma S Transportul C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

Schema logică a sumatorului poate fi implementată astfel:


A
B
S
A
B

A
B C

Dacă numărul binar conţine maimulte cifre, pentru calculul sumei şi transportului se pot utiliza
următoarele expresii logice:
S = ABC n − 1 + AB C n − 1 + ABC n − 1 + ABC n − 1
C = BC n − 1 + AC n − 1 + AB
Regula de sumare pentru fiecare ordin al cifrelor binare, pentru toate valorile posibile ale
termenilor şi transportului se va conforma tabelului de adevăr de mai jos:
Intrări Ieşiri
Transportul Cn-1 Termenul A Termenul B Suma Transportul Cn
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
ASC – Dan Olaru

0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

Componentele unui sumator complet pentru numere cu câte două cifre binare este descris de
următoarele scheme logice:
A
B B
Cn-1 Cn-1
A Cn

S
ASC – Dan Olaru

Plan
1. Concepte de bază, Circuite de comutaţie, Algebra Booleană
Disp.de comutaţie – generaţiile calculatoarelor;
Semnificaţia logică şi aritmetică a cifrei binare (bit);
Reprezentarea numerelor – zecimală, binară, hexa, (ASCII).

2. Elemente de bază a arhitecturii calculatoarelor


Magistrala (conectare paralelă-trei stări, sensul de transmisie, comenzi;
Operatorul NAND, el.combinaţionale:DEC (selectorul), MUX, DMUX, Sumatorul,
el.secvenţiale: Bistabilul (M-S), registrul (MEM), Numărătorul, Maşina secvenţială.

3. Principii de funcţionare
Transmisia datelor, Operaţii aritmetice, Secvenţa de program;
Instrucţiunea maşină, format, operanzi, cod operaţie.

4. Memoria
RAM, ROM, CACHE, Registre, Fişiere (CD, DVD, Flash).

5. Procesorul
Maşina cu un tact;
Arhitecturi evoluate.

6. Periferice
Porturi, Întreruperi (hard, soft), Programe de serviciu (Drivere).

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