Documente Academic
Documente Profesional
Documente Cultură
Magistrala (Bus-ul) 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).
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,
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 amplificator de curent).
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. 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 memorată si 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 (jos) sau high (sus)
reprezintă semnificaţia unei cifre binare (bit) „0” sau „1”. Pe magistrală sunt transmise date,
purtătoare de informaţie. Astfel, starile de la iesirea dispozitivului emiţător sunt transmise
receptorului. Pe magistrală se transmit simultan grupuri de stări (sau biţi), corespunzătoare
cuvintelor de date prin care este codificată informaţia. Deci, tronsonul pentru transmisia de date al
magistralei conţine un număr de linii corespunzător lungimii cuvântului de date (8, 16, 32, 64 de biţi).
Dispozitivele conectate la magistrală trebuie identificate şi la, un moment dat, trebuie stabilită
calitatea de emiţător sau receptor (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 este trasmis un cod care va activa un anumit
dispozitiv, registru sau o anumită locaţie (cuvânt) de memorie.
Stabilirea calităţii de emiţător sau receptor se face cu ajutorul unor semnale de control (comenzi),
trasmise pe anumite linii speciale. Dispozitivul care controlează magistrala (secvenţa de comunicaţie)
poartă denumirea de master. Este posibil ca si 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 datorate unor evenimente exterioare imprevizibile (asincrone), cererea de comunicaţie
este transmisă pe linii de comandă speciale (linii de cerere de întrerupere externa) 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ă prima, prin intermediul unui disapozitiv numit
arbitru de priorităţi.
Magistralei foloseste anumite circuite speciale de comunicaţie ca, de exemplu, circuitul DMA (Direct
Memory Access). Acesta 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 periferice şi memoria RAM, fără implicarea procesorului.
De regulă, acest tip de transfer se face între hard-disk (sau alte memorii de masa) şi memoria RAM.
- arbitru de priorităţi;
- circuite de sincronizare;
- circuite DMA;
- linii de comandă
- comanda de scriere şi citire în memorie sau regiştri (Read şi Write);
Conexiuni interne
Latch
date
Receptori Buffer Receptori
adresă date comenzi
Linii adresă
Linii date
Linii comandă
Fiecare dispozitiv trebuie dotat cu registre „latch” pentru memorarea datelor şi circuite electronice
pentru transmisie şi recepţie.
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 cu circuite de emisie în cazul dispozitivelor de tip master şi cu
circuite de recepţie pentru cele de tip slave. Registrul de tip latch se comportă ca un grup de celule
de memorie corespunzătoare unui grup de biţi (cuvânt de date).
Carcateristic pentru conexiunea de tip magistrală este posibilitatea de comunicaţie în ambele sensuri
şi posibilitatea ca mai multe dispozitive să fie conectate electric împreună (in paralel), 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 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ţă de iesire redusă, capabile să
furnizeze sau să absoarbă curent şi starea izolată (stare a 3-a) atunci când impedanţa 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ă 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 b b b2 b3 b b b b
0 1 4 5 6 7
Ieşire
date
Registru Latch (paralel) pentru 1 octet (byte)
Buffer
Conexiunea la
Memorar emisie-recepţie
magistrala internă Magistrala
e
(pt.magistrală)
recepţie calculatorului
Latch recepţie
(Magistrala
Latch emisie externă)
Conexiune
Memorare
internă
emisie
Comandă scriere
Pe magitrală
Î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ţătorii ş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 folosită uneori pentru
dispozitivele conectate la acelaşi cuplor (sau interfaţă) cum ar fi unităţile de memorie pe disc (sau
SD-solid disc).
Linii de adrese
Dacă lungimea magistralei este relativ 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.
Un caz special apare atunci când pot exista întârzieri datorită propagării sau 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. In acest caz, cuplorul de memorie trebuie să
introducă semnale de aşteptare (wait) care să prelungească starea de la ieşirea procesorului.
În cazul când timpul de propagare pe magistrală este relativ lung, din punctul de vedere al
procesorului (sau dispozitivului emiţător), nu poate fi cunoscut cu precizie momentul când semnalele
devin stabile la intrările unui dispozitiv. Procesorul ar putea 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ă). Mai jos este dat un exemplu simplificat de magistrală cu protocol de tip hand
shake (asemanator salutului strângerii mâinii). Acesta este asemănător salutului prin strângere de
mână. Pentru aceasta sunt folosite semnalele de sincronizare suplimentare: Send_Data, Data_Sent,
Data_Acepted, Bus_Clear.
Send data
Dispozitiv Dispozitiv
Data sent
“master” “slave”
Data acepted
Bus clear
Astfel, dispozitivul Master transmite semnalul de cerere de date Send_Data (“master-ul î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 Data_Sent (“slave-ul
întinde şi el mâna”). Când semnalul Data_Sent 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 Data_Accepted (“îş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 Bus_Clear care înştinţează dispozitivul Master că poate utiliza
magistrala. După receptionarea acestui semnal, eliberarea magistralei este confirmată şi din acest
moment dispozitivul Master 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 cazul „liber”, 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ă. In această stare, un
dispozitiv poate commanda magistrala, dacă aceasta doreste. 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 dispozitiv, la un
moment dat.
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 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.
Î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.
Cuplor Interfaţă Periferie
imprimant serială
lentă
ă
CPU Magitrală lentă
Magitrală rapidă
Conexiune DMA
Controlul magitralei (Bus-ului) se face prin circuitele Chip-Set-ului, care au urmatoarele functii:
Reg.S
PC (IP) Reg.Prg. SP (Point.Stiva)
Reg.
Acumulator Reg.Generale
Gen.
Adresa
Blocuri Blocuri Bloc Blocuri Blocuri Blo
MUX DMUX Serv.Int. MUX DMUX M
Adrese
Date
Comenzi
Programul este alcatuit din codurile instructiunilor, plasate in zona de program a memoriei, la adrese
succesive. Acestea sunt executate in aceasta ordine daca pe parcurs nu apar instructiuni de salt, prin
care continuarea programului, in momentul respectiv, se face la o adresa specificata de instructiunea
de salt (adresa de salt), unde se gaseste segmentul de program cu care se va continua, conditionat
sau nu, in functie de tipul instructiunii de salt. Acesta este un instrument puternic in tehnica
programarii, prin care in functie de diferite conditii, pot fi parcurse diferite ramuri de program.
Realizarea buclelor (cicluri de tip FOR) de program, utilizarea functiilor conditionale (de tip IF),
intrarea in subprograme (subroutine, proceduri sau functii de program) utilizeaza instructiuni de salt
specifice.
Pentru executia unei instructiuni, CPU trebuie sa aduca din RAM codul instructiunii, prin operatia de
“Fetch” (contine codul de operatie si informatiile pt. accesul operanzilor ce trebuie prelucrati). Dupa
executie, CPU comanda (daca e cazul) transferul rezultatului in RAM.
O instructiune de program poate avea ca efect o operatie aritmetica, logica sau un “salt” in program,
la o anumita adresa a unui alt segment de program.
CPU, in afara de structurile paralele, contine module care pot realiza functii diferite intr-o maniera
simultana (de ex. operatii in timpul transferurilor la memorie).
– Registre speciale (PC, SP, SWR, AC), Reg. Generale (A, B, C, D, etc.)
- Modul FPU (floating point unit) (unitatea de calcul in virgula mobila), pentru operatii cu numere
zecimale reprezentatea cu mantisa (contine cifrele semnificative) si exponent (contine ordinul de
marime, reprezentat printr-o putere a lui 10)
Modulul MMU este foarte importat. El comanda accesul la memorie si realizeaza operatiile
aritmetice necesare re-calcularii adreselor in timpul re-alocarilor (maparilor) in memoria virtuala.
- Primeste semnalul de tip IRQ (interrupt_request) – cerere de intrerupere externa – atunci cand un
alt dispozitiv, altul decat procesorul cere accesul la magistrala pentru comunicatie sau pentru a
deveni “master” pe magistrala (preluarea controlului magistralei);
- Returneaza semnalul de tip IAK (interrupt_aknoledge) dupa ce procesorul (sau dispozitivul “master”
a eliberat magistrala (iesirile lui au trecut in starea izolata cu impedanta mare (starea a-3a);
In cazul mai simplu al intreruperilor ne-vectorizate, dupa aparitia semnalului IRQ unitatea de
comanda face un salt in programul de serviciu la o adresa fixata, specifica procesorului respectiv.
Pentru a avea operanzii disponibili si pentru a realiza diferite operatii sau transferuri intermediare
unitatea centrala este dotata cu un set de registre, care reprezinta celule de memorie pentru un
singur cuvant de date (64 biti, de ex.), cu functii speciale, legate de modul de functionare al CPU sau
rol general (memorii temporare utilizate de programe). Registrii ca si alte zone de memorie sunt
accesati fizic tot prin coduri de adresa, dar in programele de asamblare pot referiti dupa denumirea
lor, ca registri.
Registrele speciale
PC (IP) – Program Counter (Numarator de program) sau Instruction Pointer (Pointer de Instructiuni) –
este incarcat cu adresa instructiunii urmatoare, cea care va fi incarcata din memorie si va fi
executata. Este incrementat dupa fiecare instructiune. Daca se executa o instructiune de salt,
valoarea lui este modificata corespunzator cu adresa de salt.
SP (Stack_Pointer) – Pointerul de Stiva – Contine adresa curenta la care se fac scrierile sau citirile in
memoria de stiva. Este incrementat dupa fiecare scriere (instructiunea “Push”) si decrementat dupa
fiecare citire (instructiunea “Pop”).
PSW (Program_Status_Word) – Contine bitii de stare (Flaguri) – care indica starea CPU (terminarea
operatiilor cu eroare sau depasire (overflow), memorarea “transportului operatiilor aritmetice,
marcarea operatiilor “cu semn”, etc.). In PSW bitii de stare ai programului, memorati in circuite
bistabile (memorie de un bit), pot fi setati sau resetati separat, spre deosebire de alti rgistrii din
sistem, unde scrierea sau citirea se face pentru intreg cuvantul de date.
AC – Registrul “acumulator” este registrul intermediar sau “de manevra” pentru memorarea
temporara unui operator sau rezultat implicit, in anumite operatii in care codul de operatie este mai
redus (contine referinta numai pentru un singur operand).
Sunt utilizate pentru memorarea temporara a operanzilor sau rezultatelor transferate in sau din
memoria RAM (unde transferul se face cuvant cu cuvant de date). Prezenta simultana a operanzilor
in procesor este necesara pt. efectuarea operatiilor, prin actiunea circuitelor care au functia de
“operator”, prin care se realizeaza operatiile aritmetice sau logice.
Operatiile aritmetice actioneaza asupra grupurilor de biti (cuvinte de date) care reprezinta numere
(operanzi).
Rezultatul instructiunii, din motive de eficienta, de regula nu contine un cod special si este plasat
peste unul dindre operanzi.
Fazele de executie si numarul lor sunt determinate de structura circuitelor (hardware) sau de
arhitectura respectiva. Pentru a putea realiza cat mai multe operatii rapide in paralel, se prefera
divizarea executiei instructiunii in cat mai multe faze (10-20). In modul cel mai simplu, fazele
principale (fiecare poate contine alte sub-faze) pot fi descrise de:
- Incarcarea codului instructiunii in CPU, prin transferul din zona de memorie de program din RAM
(denumita “Fetch” in terminologia engleza consacrata);
- Identificarea locatiei operanzilor si aducerea lor din memorie (zona de date) (Dec_2;
- Executia propriu-zisa (Exec), conform codului de operatie, realizeaza operatiile necesare si poate
contine multe faze, in functie de complexitatea operatiei. Pentru marirea performantelor se doreste
ca operatia respectiva sa se efectueza intr-o maniera cat mai combinationala (obtinerea imediata a
rezultatelor, intr-un singur pas).
Execuţia instrucţiunilor poate afecta biţii de stare ai procesorului (“Flag-uri”) memorati in registrul
PSW, pentru a putea fi utilizati de instructiunile urmatoare (bitul de transport sau semn) sau de
mersul ulterior al programului (bitul de depasire, de eroare, etc.)
Mai jos este dat un exemplu simplu pt. conexiunile şi semnalele de comandă (minimale), pe
magistrala (bus), la nivelul unei unităţii centrale elementare.
RESET
HOLD
HOLDA
WAIT
BUSRQ
BUSAK
IRQ
IAK
CPU M1
MEM
I/O
R
W
BUSRQ (Bus_Request)- Cerere de control magistrala (bus) – situatia de “Master” de catre alt
dispozitiv (de ex. controlerul DMA);
MEM – Acces pe magistrala la zona de memorie (are acelasi spatiu de adrese ca si dispozitivele de
intrare-iesire (I/O);
R (Read) – Comanda de citire (din memorie sau registre) – Activeaza iesirile altor dispozitive care
devin surse de tensiune pentru tronsonul de date al magistralei;
MEMORIA SISTEMULUI
Realizarea Tehnologica
Mem. Statica – Celulele pt. memorarea bitilor sunt circuite bistabile formate din cate 2 tranzistori
conectati incrucisat.
Nu trebuie facuta confuzia cu memoria (alocarea) Statica si Dinamica din structurile de date ale
programelor care se refera la adresele de alocare ale variabilelor (cu adresa fixata sau nu, in timpul
executiei programului).
Mem. Volatila – isi pierdre continutul in lipsa alimentarii (mem. RAM, de ex.)
Mem. Nevolatila – isi pastreaza continutul in lipsa alimentarii (ex. mem. de masa: HD, SD, SSD, Flash,
dar si mem. de tip ROM).
Mem. ROM (read only memory) – sunt programate (inscrise) in procesul de fabricatie si pot fi numai
citite (sunt si ne-volatile) – utilizate in automatica si in trecut pt. BIOS.
Mem. PROM (programable read only memory) – similare ROM, fabricate fara continut, continutul
este programat (inscris) o singura data, cu ajutorul unui programator.
Mem. EPROM (eraseble programable read only memory) – bazate pe tranzistori MOS speciali
sensibili la lumina, care pastreaza informatia in timp. Memoria poate fi reinscrisa (reprogramata),
numai dupa ce a fost stearsa in totalitate, prin luminarea intensa cu lumina UV (ultra-violeta).
Mem. EEPROM (electrical eraseble programable read only memory) – bazate pe tranzistori MOS
speciali (cu poarta flotanta) care isi pastreaza informatia in timp. Memoria poate fi reinscrisa (la nivel
de cuvant sau de date) prin aplicarea unui regim electric special.
Toate aceste tipuri de memorii si-au restrans utilizarea partial sau total, cu exceptia memoriei
EEPROM care se foloseste in controlere si care a dus la tehnologiile pentru fabricarea memoriilor de
masa electronice (Flash, SD, SSD).
Memoria din sistem este referita ca memorie logica pentru structurile de date din software. Adresele
ei sunt cele care pot apare in programe. Memoria fizica este cea implementata in dispozitivele si
circuitele electronice care formeaza structurile de memorie. Corespondenta de adrese si recalcularea
acestora se face prin modulul MMU din procesor.
Structurile de date alocate sau transferate in memorie lucreaza la nivel de pagina logica sau fizica
(memorie paginata). Organizarea datelor se poate face pe segmente (memorie segmentata).
Accesul se face dupa adresa de baza a segmentului si adresa din interiorul segmentului. Astfel, in
cadrul segmentului (alocarea in segment), calculul si alocarea adreselor se poate face cu un cod
separat, mai scurt, in timp ce codul segmentului ramane fix.
Adresarea memoriei, din ratiuni de tehnica programarii se poate face in mai multe moduri:
Adr. Indirecta - Codul instructiunii contine adresa la care se gaseste, de fapt, adresa operandului
respectiv;
Adr. Indexata - Codul instructiunii contine un index dupa care se fac adresari succesive, in masivele
mari de date (siruri de date);
Memoria virtuala este cel mai complex si evoluat concept de organizare si acces la memorie.
In modul cel mai simplist si primitiv codul de program ar trebui incarcat incepand cu adresa zero,
pentru ca adresele din program sa coincida cu cele fizice din RAM, in caz ca acestea ar fi suficiente.
Lucrul cu Memoria virtuala permite ca datele sa fie alocate in paginile disponibile ale memoriei RAM,
iar corespondenta adreselor fizice cu adresele din program sa se faca prin recalcularea lor de catre
procesor, prin MMU (memory management unit), prin refacerea referintei (adresa de baza) si
translatarea celorlalte. Acest mod de lucru permite lucrul simultan cu mai multe programe (procese)
si extinderea, oricat de mult este necesar, a spatiului logic de memorie cerut de ficare program. La un
moment dat, de fapt, se lucreaza intr-o pagina fizica de memorie, care corespunde numai unei parti
din memoria logica ceruta de program.
Structurile de memorie fizica din sistem sunt organizate in memorii de tip: RAM, CACHE, STIVA si
MASA. Acestea au functii (destinatii), structuri de date si moduri de alocare (identificarea locatiilor de
memorie) profund diferite.
Memoria RAM
- este memoria operativa a sistemului, gestionata de modul MMU (memory management unit);
Activarea comenzii de citire (Read) sau scriere (Write) (BUS tronsonul de comenzi);
C-da Read - Activeaza iesirile altor dispozitive care devin surse de tensiune pentru tronsonul de date
al magistralei; In lipsa comenzii Read conexiunile de date pe BUS ale unui dispozitiv care nu este
adresat, trec in starea de impedanta ridicata, tronsonul de date al BUS-ului putand fi comandat de alt
dispozitiv adresat, care primeste comanda Read.
Meoria CACHE
-Transparenta fata de programe; Gestionata hardware numai de procesor; Poate avea dimensiuni
variabile sau poate lipsi;
- Mai multe nivele (L1, L2, L3) cu functii, timp acces si structura cailor de date diferita.
Pt. fiecare nivel, cu cat timpul de acces este mai scurt cu atat capacitatea este mai mica;
- acces foarte rapid (frecventa de ordinul GHz, datorita distantei de propagare f.scurte);
- acces multiplu - cai de date multiple (cod.instr.+cod date), citiri + scrieri simultane;
– Citirea din CACHE este Asociativa - Cautarea datelor pentru o anumita adresa se face prin cautarea
codului de adresa respectiva, prin comparatii succesive, cu codurile de adresa deja stocate in CACHE;
Structura de informatii din CACHE contine atat cuvinte de date, cat si codurile de adresa la care sunt
memorate datele respective in RAM. La o incercare de citire, procesorul cauta adresa respectiva in
lista adreselor stocate in CACHE. Daca o gaseste, face citirea rapida a datelor corespunzatoare. Daca
nu, citirea se face in RAM si sunt copiate in CACHE atat cuvantul de Date cat si Adresa
corespunzatoare. Daca in CACHE nu exista spatiu disponibil, se elimina unele date stocate, conform
unor algoritmi de inlocuire care lucreaza dupa diferite criterii (de ex. “vechimea” datelor din CACHE).
Se doreste pastrarea datelor utilizate mai recent, in speranta ca programul in lucru va mai face apel
la ele, relativ curand.
Deci, citirea in CACHE se face asociativ, dupa codul de adresa cautat, iar scrierea se face la copierea
datelor (odata cu codurile de adresa) din RAM, eventual utilizand algoritmii de inlocuire.
Memoria de STIVA
- Este utila si eficienta pt. intrarea/iesirea in/din sub-programe, numite si subroutine, proceduri sau
functii de program, etc.;
- Zona de memorie este alocata (“mapata”) in RAM (adresa este generata de registrul
SP-stack_pointer)(la write – se incrementeaza SP; la read se decrementeaza SP);
Utilitatea memoriei de stiva este pusa in evidenta la intrarea si iesirea din sub-programele incluse
unele in altele (imbricate). La fiecare intrare intr-un sub-program (care poate avea variabile proprii cu
aceleasi nume ca in programul in care este inclus) trebuie salvate (memorate) valorile variabilelor
(parametrii sub-programului) si cuvantul de stare al programului. La fiecare iesire din sub-program
acestea trebuie restaurate (refacute). Cum ordinea intrarilor in sub-programele imbricate este
inversa fata de ordinea iesirilor, salvarile si restaurarile se pot face simplu si firesc prin utilizarea
instructiunilor PUSH si POP.
- Necesita un cuplor intre BUS si o magistrala speciala pe care pot fi conectate mai multe dispozitive
de memorie de masa;
- Este necesar sistemul de operare si programul utilitar de lucru cu fisiere (de ex.Windows Explorer);
- Accesul fizic se face pt. structuri mari de date (sectoare disc, registre extinse de date, pagini de
memorie);
- Accesul efectiv se face prin directivele Sistemului de Operare, care fac apel la proceduri din
bibliotecile de sistem, care sunt incluse incluse in codul executabil, la faza de link-editare pentru
forma executabila a programului;
- Tabelele de corespondenta (FAT- file allocation table) intre adresele logice (utilizate de programe) si
adresele fizice (locatiile in cadrul sectoarelor de disc sau macro-registrilor SD sau SSD);
- Harta dispozitivului (Map) – contine informatiile zonelor ocupate, libere si modul de adresare a lor.
Toate aceste structuri se construiesc in zone specifice, rezervate in dispozitivul de memorie de masa
(de ex. primele sectoare ale HD)
- Structura de fisier trebuie creata, iar noul nume trebuie adaugat in Lista Numelor fisierelor;
- La fiecare acces e cauta numele fisierului in lista respectiva (prin comparatii succesive, in mod
asociativ);
- La fiecare operatie de scriere in fisier, se completeaza FAT cu locatiile fizice gasite libere pt. scrierea
datelor si alocate fisierului respectiv;
- La fiecare operatie de citire in fisier se cauta numele fisierului in lista si se recupereaza datele din
locatiile fizice, dupa informatiile din FAT;
- Stergerea fisierelor se face numai prin modificari in lista numelor fisierelor, inregistrarile fizice
raman neschimbate, dar se poate rescrie peste ele, la operatiile urmatoare.
In memoria RAM (random access memory) localizarea datelor (cuvintelor de date) se face prin codul
de adresa transmis pe magistrala. Structura fizica a unei memorii, de tip 4x4 (4 cuvinte de date a cate
4 biti) poate fi privita ca un „tabel” constand in celule de stocare de cate un bit. Liniile tabelului
corespund cuvintelor de date si sunt accesate simultan, fiind activate prin selectia iesirilor
decodificatorului DEC avand la intrare codul de adresa. La fiecare celula este conectata cate o linie de
scriere si cate o linie de citire. Liniile de scriere sunt intrari de amplificatoare si au impedanta mare.
Liniile de citire sunt iesiri de amplificatoare. Daca amplificatoarele au iesiri cu 3 stari, atunci intrarile
si iesirile de date pot fi conectate impreuna la liniile unei magistrale. Cand semnalul de citire (Read)
este activ iesirile au impedanta redusa si nivel de tensiune corespunzator bitului memorat. Daca
„Read” nu este activ, acestea trec in starea „izolata”, cu impedanta mare si linia magistralei poate fi
comandata de alt dispozitiv.
In mod obisnuit memoria RAM este de tip dinamic, avand avantajul ca pentru memorarea fiecarui
unui bit este necesar numai un cate un singur tranzistor cu efect de camp de tip MOS, spre deosebire
de memoria statica, unde pentru fiecare bit este necesr cate un circuit bistabil, compus din cate doi
tranzistori. Tranzistorul tip MOS (metal-oxid-semiconductor) lucreaza in regim de condensator, prin
capacitatea de poarta. Totusi, dezavantajul memoriei dinamice consta in necesitatea ciclurilor de
refresh (re-improspatare) prin care, periodic, sarcina stocata in tranzistori trebuie refacuta, printr-o
procedura speciala de „re-scriere”, descrisa in Apendice.
b b b b
b b b b
Cod Adresă Reţea de
DEC b b b b celule de
memorie
b b b b
Citire date
D3 D3
Data D2 D2 Data
D1 D1
In D0 D0 Out
de 1 bit
Linie cuvânt
Linie de bit
Vcc/2 Vcc/2 Vcc/2
Refresh
Comparatoar
e
MUX
- Este cuplat la magistrala (Bus). Este un circuit integrat separat sau integrat structura Chipset-ului,
sau altor module de control a magistralei.
- Realizeaza transferul continuu si rapid pentru structurile de date extinse, intre memoria RAM si
memoria de MASA, sau invers, fara interventia procesorului (CPU). Acestea corespund sectoarelor de
disc sau macro-registrelor memoriei SD. In timpul transferului DMA gestioneaza comanda si
sincronizarea transmisiei (generarea succesiva a codurilor de adresa si semnalele de citire-scriere);
Prin procedura de programare, procesorul, sub comanda programului de serviciu DMA, rezident in
sistemul de operare, scrie in registrele speciale DMA datele referitoare la sursa si destinatia
transferurilor precum si cantitatea de date (numarul cuvintelor) care va fi transferata.
Dupa initializare (comanda de incepere transfer) circuitul DMA face cererea de control a magistralei
(prin semnalul BUSRQ-bus_request), asteapta confirmarea eliberarii magistralei (prin semnalul
BUSAK-bus_aknoledge) si apoi incepe procedura de transfer propriu-zis. La terminarea ei activeaza
un semnal de intrerupere externa (IRQ-interrupt_request), pentru cedarea controlului magistralei.
Exemplu (informativ) pentru schema de conexiuni la magistrala si schema functionala a unui circuit
DMA (la nivel de schema bloc de principiu).
Apendice
GND – 13
FunctionareaD7memoriei RAM dinamice DACK3
28
Celula de memorie
14
de tip dinamic nu se bazează pe un circuit bistabil. În acest caz informaţia
Ready
(valoarea sau
27 starea descrisă de un bit) corespunde stării de încărcat sau descărcat a capacităţii de
poartă a unui
15
tranzistor MOS. Avantajul major al acestei structuri este faptul că pentru stocarea
HRQ
informaţiei 26
de un bit este necesar un singur tranzistor de tip MOS, deci densitatea celulelor de
HLDA de memorie este mult mai mare.
memorie pe16cip şi implicit capacitatea totală
25 -MEMR
17 -MEMW
24
AEN
Date Date
18
intrare 23 ADSTB ieşire
19
22
TC
20
MARK
selecţie
21
În realitate, se utilizează o schemă mai eficientă, 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).
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 (mai mici de un
micron), este foarte mică şi sarcina stocată în aceasta nu este capabilă să comande amplificatoarele
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:
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).
Interfetele de intrare-iesire (I/O)
Interfetele de intrare-iesire sunt dispozitivele prin care sistemul de calcul comunica in vederea
transferului de date. Interfata este cuplata la magistrala (bus) si comunica cu un anumit periferic
folosind cai de comunicatie si protocoale (secvente necesare realizarii unui anumit tip de
comunicatie) specifice. Perifericele pot fi echipamente de intrare-iesire propriu-zise ca de exemplu
consola calculatorului (tastatura + display) sau alte dispozitive ale configuratiei, interne in carcasa
sistemului sau externe, atasate sistemului sau portabile. De exemplu memorii de masa tip hard-discul
(HD), disc optic (CD, DVD), solide (SD,SSD, Flash, Stick), scanere, digitizoare, plottere, proiectoare,
alte dispozitive pentru preluarea sau transmiterea datelor, pentru achizitii de date sau comenzi
electrice, linii de comunicatie externe paralele sau seriale.
Caile de comunicatie sunt de tip magistrala (bus) atunci cand pot fi conectate simultan mai multe
periferice. De exemplu magistralele specifice memoriilor de masa, cele USB, etc. Acestea au alte
caracteristici si performante fata de magistrala propriu-zisa a sistemului (aflata pe placa de baza la
PC) si pot avea conexiuni paralele sau seriale.
Conexiunea paralela este mai performanta, putand transmite simultan mai multi biti (4, 8 sau chiar
intregul cuvant de date al sistemului (64 de biti, de ex.), dar necesita un numar mare de conexiuni,
corespunzatoare numarului de biti transmisi simultan.
Conexiunea seriala la aceeasi frecventa maxima de lucru are capacitate mult mai mica. Nivelele de
tensiune corespunzatoare bitilor de date sunt transmise unul cate unul, sub forma de impulsuri,
corespunzatoare unor intervale de timp dinainte stabilite, dupa o secventa sincronizata (sincrona)
sau nu, cu nu (asincrona) semnal de ceas (CK) de referinta. Transmisia sincrona este preferata pentru
fluxuri mari de date.
Legatura seriala, de regula, foloseste cate un singur conductor pentru fiecare sens de transmisie, deci
este mai economica. De-a lungul evolutiei calculatoarelor, frecventele maxime au crescut si
interfetele paralele au putut fi inlocuite cu interfete seriale (cazul memoriilor de masa (HD sau SD).
Desi mult mai simpla fizic (coexiuni foarte putine), comunicatia seriala necesita protocoale si circuite
mai complicate, legate de „impachetarea” si „despachetarea” grupului de biti (pachet de date)
corespunzator cuvantului de date transmis.
Toate interfetele sunt cuplate cu unitatea centrala si memoria RAM printr-o magistrala a sistemului.
De regula in sistem (si in PC) magistrala este partajata intr-un tronson de viteza mare, care impreuna
cu circuitele de comanda formeaza este numita „nord-bridge” (pentru comunicatia cu memoria si
procesorul video) si intr-un tronson mai lent, numit „south-bridge”, pentru celelalte periferice.
Fiind conectata pe magistrala o interfata trebuie sa contina zone de memorie locala si/sau registri
unde sa fie transferate date, intr-un sens sau altul, cu scopul transmisiei comenzilor, interogarii starii
perifericului si transmisiei datelor. Acestea sunt accesate (localizate) prin codul de adresa de pe
magistrala.
Pentru a putea comunica cu procesorul, prin programele din sistemul de operare sau de aplicatie,
pentru fiecare interfata trebuie sa existe un program asociat (numit program de serviciu sau program
„driver”) care, de regula, trebuie instalat inainte de a face interfata operationala.
O problema foarte importanta este modul de „dialog” intre unitatea centrala si interfata. Inceputul si
sfarsitul unui transfer poate sa aiba un caracter asincron, dependent de anumite evenimente
imprevizibile, legate de starea perifericului. Astfel, in mod imprevizibil, poate apare necesitatea unui
transfer din partea perifericul sau semnalarea unei schimbari in starea sau modulul lui de
functionare. Unitatea centrala trebuie instiintata pentru a raspunde solicitarii in timp util. Solutia cea
mai simpla ar fi interogarea periodica (citirea registrului de stare) a perifericului, prin procesul numit
„polling”. Aceasta metoda ocupa din timpul de lucru al procesorului, interogarile necesare fiind cu
atat mai frecvente cu cat perifericele sunt mai multe si mai rapide. Rezulta ca este necesara o
metoda „asincrona” care sa activeze dialogul cu procesorul numai atunci cand este necesar. Metoda
se numeste „intrerupere externa” si se bazeaza pe un semnal de cerere de intrerupere (IRQ-interrupt
request) care instiinteaza procesorul asupra necesitatii inceperii „dialogului” cu perifericul. Inainte ca
acesta sa inceapa, trebuie ca procesorul sa-si intrerupa activitatea curenta (executia programului in
lucru) si sa elibereze magistrala (iesirile catre magistrala trebuie trecute in „starea a 3-a”, cu
impedanta mare) pentru comunicatia cu perifericul, care la randul lui trebuie instiintat printr-un
semnal de confirmare a acceptarii cererii de intrerupere (IAK-interrupt acknowledge).
Rezulta ca atat interfata cat si procesorul trebuie dotate cu module specializate de generare a cererii
de intrerupere (la nivelul interfetei) si de servire a cererii de intrerupere (la nivelul procesorului).
Secventa de servire a cererii de intrerupere trebuie sa permita transmisia informatiilor
corespunzatoare identificarii perifericului si a programului de serviciu. Acestea se transmit pe
tronsonul de date al magistralei, de catre interfata (dupa ce a fost sub forma eliberata magistrala si
emis semnalul de confirmare IAK) sub forma „vectorului de intrerupere”, cuvant de date care contine
informatia de adresa a programului de serviciu.
Utilizarea vectorului de intrerupere permite existenta unei singure conexiuni de cerere de intrerupere
(IRQ) pentru mai multe periferice. Daca exista cate o conexiune separata pentru fiecare periferic
apelul programului de serviciu se face pe baza unei adrese fixate la nivelul sistemului de operare sau
structurii procesorului (in cazul µ-Controlerului). Conexiunea separata rezolva simplu si problema
prioritatii acordarii si servirii intreruperii pentru cereri IRQ simultane, cand arbitrajul se rezolva la
nivelul circuitelor procesorului (eventual programate anterior) sau cu ajutorul unui controler auxiliar
numit arbitru de prioritati.
In cazul utilizarii unei conexiuni IRQ pentru mai multe dispozitive periferice (DPk), problema
arbitrajului cererilor IRQ simultane trebuie rezolvata printr-un mod de conexiune special al
interfetelor, cu topologie „serie” „lant” sau „cascada”.
IRQ
Magistrală de
date
Secventa de intrerupere
Secventa de intrerupere externa reprezinta succesiunea de operatii si transferuri de date care permit
inceperea „dialogului” de comunicatie intre un periferic si unitatea centrala, in urma producerii unui
eveniment extern (de ex. cuplrea la un port USB). Sunt utilzate liniile IRQ si IAK ale tronsonlui de
comenzi ale BUS-ului si eventual tronsonul de date, pentru intreruperile vectorizate. Daca, la un
moment dat, starea perifericului se schimba, unitatea centrala trebuie instiintata pritr-un semnal
electric (IRQ) si ea trebuie sa activeze programul de serviciu corespunzator interfetei. Prima operatie
care trebuie facuta, prin actiunea unitatii de comanda a CPU, este citirea starii perifericului. In functie
de aceasta se vor desfasura comenzile sau secventele ulterioare. Succesiunea operatiilor (pentru
intreruperea vectorizata) este urmatoarea:
- activarea procedurii (hardware) de oprire a programului curent, aflat in lucru si salvarea starii
acestuia;
- eliberarea magistralei de catre CPU, prin trecerea iesirilor de date in starea a 3-a (izolata);
- activarea iesirilor de date ale interfetei si plasarea vectorului de intrerupere (IVC-interrupt vector)
pe magistrala;
Adresa: 378h – Registrul de date, bidirecţional (“Data Latch”) în regim de scriere (Write) memorează
şi transmite un byte către imprimantă, iar în regim de citire (Read), furnizează ultimul byte transmis.
Adresa: 379h – Registrul de stare (Printer Status) poate fi numai citit (Read-only).
Adresa: 37Ah – Registrul de comandă (Printer Controls) are regim de citire/scriere (Read/Write).
Exceptând registrul de date, la celelalte registre biţii pot fi setati sau resetati individual si au
semnificaţii diferite, corespunzător stării sau comenzii date dispozitivului. Au următoarea
semnificaţie:
b7 b6 b5 b4 b3 b2 b1 b0
Bitul 3: Indicator de eroare negat (-ERROR) – ia valoarea 0 în cazul unei erori de transmisie;
Bitul 4: Imprimanta este selectată, deci activă “logic” şi poate comunica cu calculatorul;
Bitul 5: Indică lipsa hârtiei, luând valoarea “1” (+PE – paper out);
Bitul 6: Indicator (negat) de disponibilitate pentru preluarea codului unui caracter (-ACK –
acknowledge, ready for next character);
Bitul 7: Indicator (negat) de stare ocupată, când nu poate fi preluat un nou caracter, sau imprimantă
inactivă logic, nepornită sau necuplată (-BUSY or off-line error).
Bitul 1: Comandă saltul unei linii de tipărire (+AUTO Line Feed – LF after CR);
Bitul 2: Semnal (negat) de Reset pentru imprimantă – iniţializarea tuturor comenzilor şi indicatorilor
de stare (-INIT);
Bitul 3: Comandă de selecţie (logică) a imprimantei, capabilă să comunice cu calculatorul (+SLCT IN);
Bitul 4: Activează sistemul de întreruperi al cuplorului. Atunci când este activ, este generat un semnal
de întrerupere hardware către procesor dacă se activează indicatorul ACK (devine zero).
Bitul 5: indică cuplorului sensul de transfer a datelor (0 – dacă sunt transmise date imprimantei sau
dispozitivului, 1 - dacă sunt citite date).
BUSY
-- ACK
DATA
-- STROBE
0.5s
0.5s minimum
- Datele trebuie să fie stabile înaintea apariţiei semnalului STROBE generat de interfaţă, catre
imprimanta; Semnalul STROBE comandă memorarea datelor;
- Imediat după recepţia semnalului STROBE imprimanta răspunde cu semnalul BUSY pentru a
împiedica transmisia a încă unui caracter, înainte ca registrul de date să fie disponibil (datele să fie
preluate si tiparite);
- După ce datele au fost utilizate, imprimanta anunţă prin semnalul ACK că pe liniile de date poate fi
trimis codul caracterului următor;
- La scurt timp după activarea semnalului ACK, semnalul BUSY revine la starea iniţială (inactivă).
Deşi, aparent ar putea fi folosit un singur semnal de validare, în loc de cele doua semnale ACK şi
BUSY, funcţiile lor sunt, oarecum departajate, ACK permiţând transmisia de date noi (tranziţia liniilor
de date), iar BUSY permiţând activarea semnalului STROBE.
Înlănţuirea schimbărilor de stare a semnalelor STROBE, BUSY, ACK este următoarea. Transmisia
semnalului STROBE determină apariţia semnalului BUSY (blocarea transmisiei caracterului următor),
iar la eliberarea registrului tampon al imprimantei, aceasta transmite semnalul de confirmare ACK şi
resetează semnalul BUSY.
Schema bloc de principiu pentru comunicatia cu interfata paralela
Program Stare
PC
Reg
C-dă
INT S.O.
VCI
Schimbare
VCI
Stare
IRQ
Secvenţă Generator
BIOS
Întreruper Întrerupere
IAK
e
CALCULUL PARALEL
Mai multe programe active simultan. Procesorul nu contine module multiple pentru executia paralela.
Multi-Programare: sunt incarcate in memorie mai multe programe. Executia trece de la unul la celalalt
(Intrerupere software) in momentul cand un program face o cerere de transfer intrare-iesire (mult mai
lent decat executia in CPU).
Executie paralela (hardware): Procesorul contine module multiple identice pentru executia paralela.
Multi-Threading (Hyper- Threading) – Executia simultana pentru mai multe segmente (thread-uri=fire)
de program. Procesorul contine module identice care partajaza aceleasi zone de memorie.
Multi-Proces: Procesorul Multi-Core (Nuclee multiple) contine module identice care lucreaza cu zone de
memorie separate
Pentu lucrul Multi-Threading sau Multi-Core sunt necesare in programe directive speciale care distribuie
programele sau segmentele de program modulelor identice separate.
Executia unei instructiuni necesita mai multe faze. Rezulta ca sunt necesare mai multe perioade de
“ceas” (clock-CK) de comanda a tranzitiilor procesorului pentru executia unei singure instructiuni (ciclu
de instructiune). Fiecare ciclu de instructiune, la randul lui contine mai multe cicluri masina, fiecare
necesitand mai multe impulsuri de ceas (CK).
Deci, frecventa maxima de executie a instructiunilor este mult mai mica decat cea a impulsurilor de CK
(de ordinul GHz), determinata de tipul tehnologiei de realizare a circuitului integrat. Pentru a executa o
instructiune completa la fiecare impuls de ceas (1_intructiune/1_CK) se realizeaza suprapunerea fazelor
de executie, intr-o structura hardware denumita “Pipe-line” (=conducta) (banda de asamblare). In banda
de asamblare se realizeaza “aducerea în avans a instrucţiunilor” de la adresele urmatoare din memorie,
inainte de terminarea executiei instructiunii curente (deja incarcate).
Pentru o singura bandă de asamblare (Pipe-line), notam Tact_1, Tact_2, Tact_3, etc., momentele
impulsurilor de ceas (CK) de comanda si cu FT, DC, EX, RZ fazele de executie a instructiunii, unde:
FT I1 I2 I3 I4 I5 I6 I7 I8
DC I1 I2 I3 I4 I5 I6 I7
OP_1 I1 I2 I3 I4 I5 I6
OP_2 I1 I2 I3 I4 I5
EX I1 I2 I3 I4
RZ I1 I2 I3
Modulele paralele executa simultan faze de executie de la instructiuni diferite. De ex. la tactul 6 se
executa simultan faze de la 6 instructiuni diferite. Astfel, se pot obtine rezultate, pentru cate o
instructiune, la fiecare impuls de ceas (CK) – pentru Tact_6, Tact_6, Tact_8, in tabel.
Eficienta benzii de asamblare se reduce atunci cand in sirul de instructiuni apare o instructiune de salt in
program. In acest caz, programul va continua cu alte instructiuni decat cele care urmeaza la adresele
succesive. Deci, incarcarea acestora devine inutila, coada de incarcare trebuie stearsa si trebuie incarcate
instructiunile de la adresa de salt. Pentru a mari eficienta se utilizeaza o metoda de estimare a salturilor,
pe baza celor care s-au realizat inainte, memorate in “History-Buffer”, mizandu-se pe o executie repetata
si periodica a anumitor segmente de program (situatie frecventa in structura programelor). Aceasta
metoda utilizeaza un tabel de estimare a salturilor numit “speculative jump table” (Tabel de Predicţie),
in momentele estimate de un numarator al pasilor de program la care au avut loc salturile precedente
(Contor de Salturi).
Pentru executia simultana a mai multor instructiuni complete se pot utiliza mai multe benzi de
asamblare (“pipe-line”) in paralel – Structura “Multi-Pipeline” sau “Super-Scalara” (de ex. doua pipe-line
la procesorul Pentium_1 si trei la Pentium_Pro). Astfel se pot executa simultan mai multe instructiuni
pentru fiecare impuls de ceas (CK) (m.m. intr./1CK).
In acest caz unitatea de comanda a procesorului imparte programul in mai multe segmente de program.
In acest caz apare problema dependentei instructiunilor, cand o instructiune dintr-un segment are ca
operanzi rezultate calculate de o alta instructiune, aflata in alt segment. Problema se rezolva prin
executia “in alta ordine” (“out of order”) a instructiunilor, decat cea care apare in program. Modul de
lucru out of order necesita Detecţia Dependenţelor si existenta unei structuri hardware numita “statie de
rezervare” sau “statie de planificare si distribuire a instructiunilor” (“reservation station”) care tine
evidenta executiei instructiunilor si pastreaza operanzii pana la executia completa, definita de “fereastra
de executie a instructiunii” (“instruction window”). Dupa terminarea executiilor rezultatele trebuie
aranjate si plasate in memorie in ordinea ceruta de program, memorata in “registrul de reordonare”
(“ReOrder- Register”), pe baza unei “unitati de extragere a rezultatelor”.
O alta problema care apare in executia simultana a instructiuni sau fazelor acestora este modul de
utilizare a registrelor generale ale procesorului. In timpul executiei paralele pot apare referiri simultane
la acelasi registru, datorita suprapunerii registrilor cu acelasi nume, utilizati de instructiuni diferite. In
acest caz este necesara alocarea temporara a unor registri diferiti, pentru registrii cu acelasi nume,
corespunzatori operanzilor de la instructiuni diferite (Mapare Registrilor”). Acestia sunt denumiti “alias
registers” si sunt implementati in circuite separate, cu atat mai numeroase cu cat avem mai multe
executii simultane.
Faze prelucrare
B I - FT I1 I3 I5 I7 I9 I 11 I 13 I 15
B II - FT I2 I4 I6 I8 I 10 I 12 I 14 I 16
B I - DC I1 I3 I5 I7 I9 I 11 I 13
B II - DC I2 I4 I6 I8 I 10 I 12 I 14
B I - EX I1 I3 I5 I7 I9 I 11
B II - EX I2 I4 I6 I8 I 10 I 12
B I - RZ I1 I3 I5 I7 I9
B II - RZ I2 I4 I6 I8 I 10
Problemele Calculului Paralel
In general, prin Calcul Paralel se intelege posibilitatea unitatii centrale (procesorului) de a executa mai
multe instructiuni masina simultan (instructiunile decodificate direct de catre procesor si in care au fost
descompuse programele in limbaje de nivel inalt in forma executabila (tip “.exe” sau “.com”), prin
procesul de compilare. Pentru aceasta trebuie sa existe mai multe module (hardware) similare si o
modalitate de distribuire a instructiunilor de program catre acestea.
Avand in vedere ca instructiunile se por descompune in mai multe faze de executie, paralelismul se poate
realiza la nivelul acestora.
La nivel mai superior, se poate vorbi de executia in paralel a programelor (task-uri), care sunt
descompuse in procese si fire (secvente) de program sau “thread-uri”. Ultimele partajaza aceeasi zona de
memorie (ca in procesoarele de tip multi-thread), iar procesele actioneaza ca programe independente
(ca in procesoarele de tip multi-core sau multi-nucleu).
Astfel, daca intr-o structura ne-paralela fiecare instructiune masina este executata in cadrul mai multor
cicluri de instructiune si mai multor cicluri masina. Rezulta ca pentru executia completa a unei
instructiuni sunt necesare mai multe perioade de ceas (CK) sau tact ale impulsurilor care comanda
tranzitiile de stari din procesor.
Problema cea mai complexa in realizarea paralelizarii este modul cum pot fi segmentate programele,
astfel incat sa fie dirijate catre module de procesare diferite, avand in vedere ca intre variabilele si
parametrii programului pot exista diferite dependente. Problema se rezolva prin executia in alta ordine
(out of order execution), astfel incat sa fie evitate dependentele. Apoi, un modul special realizeaza
reordonarea si memorarea rezultatelor in ordinea initiala.
Pentru fiecare instructiune trebuie urmarita parcurgerea tuturor fazelor de executie incluse in asa
numita “instruction window” printr-un modul numit “statie de rezervare” (rezervation station).
Pe de alta parte executia instructiunilor trebuie pregatita anterior prin modulul de planificare a executiei
(din unitatea de comanda), care aduce din memorie codurile instructiunilor si realizeaza decodificarea si
descompunerea acestora in operatii elementare, prin strategia de tip RISC (reduced instruction set
computer), care utilizeaza module pentru operatii mai simple, dar foarte reapide. In momentul cand in
program apar instructiuni de salt, prin care continuarea programului de face intr-un alt segment care nu
are adresa din memorie urmatoare celei a instructiunii in curs, este necesara refacerea secventei de
incarcare a instructiunilor. Rezolvarea acestei probleme se realizeaza prin utilizarea metodei si tabelului
de estimare a adresei de salt (adrese de salturi speculative).
Partajarea resurselor (fizice) de calcul (registre si operatori) trebuie facuta pentru ca referirile identice
din diferite segmente de program aflate in executie simultana sa fie dirijate temporar catre resurse
fictive diferite, numite “alias registers” sau “alias operators” unde sunt mapate valorile operanzilor.
Viteza de calcul poate fi imbunatatita daca, in cadrul unui segment de program, valorile variabilelor sunt
transmise direct catre instructiunile unde sunt parametri de intrare, fara sa se mai treaca prin locatiile
din RAM unde sunt referite adresele operanzilor instructiunilor, prin asa numitele tehnici de by-passing
si forward parameter transmision.
Daca paralelizarea calculului se face la nivelul fazelor de executie ale instructiunii, atunci procedeul se
numeste de tip pipeline (banda de asamblare). Prin suprapunerea fazelor de executie de la diferite
instructiuni, defazate in timp, se poate obtine cate un rezultat la fiecare impuls de tact (ceas - CK), daca
fiecare faza se realizeaza, la randul ei, in cate o perioada de tact. Astfel, numarul de instructiuni
executate pe unitatea de timp este egal cu frecventa de comanda a procesorului (de ordinul GHz). Deci,
avem cate o 1_instructiune/1CK.
Deci, vom avea cate o structura de tip pipeline pentru a paraleliza fazele de executie pentru cate o
instructiune. Daca se doreste executia completa a mai multor instructiuni deodata, atunci se folosesc
structuri multi-pipeline, sau superscalare. In acest caz pot fi executate mai_multe_instructiuni/1CK.
In evolutia procesoarelor Intel, aceasta tehnica a aparut incepand cu “Pentium I”, care continea doua
structuri pipeline, insa numai una dintre ele continea modul de calcul in virgula mobila (pentru calcule cu
numere zecimale).
Eficienta metodei pipeline depinde de numarul de faze de executie ale instructiunii masina si de timpul
de lucru asociat executiei unei faze. Evident se urmareste ca fazele sa fie cat mai simple (deci implict, mai
multe) si timpul lor de executie cat mai scurt (prin tehnica RISC).
In cazul superscalar, aparent pentru o paralelizarea cat mai puternica, ar trebui utilizate cat mai multe
tronsoane pipeline. Totusi, se arata ca din cauza dependentelor inerente dintre variabilele (parametrii)
programului, multiplicarea extensiva a structurilor pipeline nu este eficienta.
Metodele mentionate mai sus (tip pipeline si superscalar) sunt independente de program, pentru in
functionarea lor nu este necesara nici o informatie provenita din constructia programului. Deci,
programatorul nu este implicat in tehnica de paralelizare a calculului.
Gradul de paralelizare poate fi insa sporit oricat de mult (pana la limitele de volum hardware, date de
numarul maxim de module sau procesoare din sistemul de calcul) daca ramificatia operatiilor,
instructiunilor sau segmentelor de program catre procesoare sau module integrate diferite se face prin
instructiuni sau directive speciale, la nivelul programului si limbajului de programare, prin tehnicile de
paralelizare dependende de program. Solutiile contin trei tipuri de strategii.
Daca variabilele sau structurile de date din program au, prin natura lor, o structura vectoriala (cu mai
multe componente sau coordonate), atunci pot fi definite operatii (vectoriale) care sa actioneze similar
asupra componentelor vectorului de date. Este cazul prelucrarilor semnalului audio pe mai multe canale
(stereo – cu doua canale, quadro – cu patru, “studio”- cu sapte canale) sau datelor video (grafice) in doua
(2D) sau trei (3D) dimensiuni. In cazul “video” transformarile grafice (geometrice) se pot descompune in
operatii de translatii sau rotatii asupra componentelor, care sunt prelucrate prin aceleasi tipuri de
operatii.
Alta solutie utilizeaza ramificarea segmentelor de program, definite la nivelul programului de baza ca fire
de program (thread-uri) sau procese, prin directive speciale (instructiuni de comanda). Acesta este cazul
obisnuit al modulelor sistemului de operare (ca si Windows, de ex.). Acesta contine un modul
“planificator” (scheduler) special care gestioneaza cozile de asteptare ale proceselor active si rularea
(executia) lor pe nucleele sau modulele diferite ale procesoarelor.
O solutie globala se aplica la nivelul retelelor de calculatoare si foloseste tehnica de tip “grid”, prin care
masive foarte mari de date sunt prelucrate, cu diferite programe de aplicatie la nivelul unor calculatoare
diferite, cuplate prn internet la distanta, eventual in institutii si/sau tari diferite. Este cazul prelucrarilor
experimentelor de amploare care au loc in centre internationale de cercetare, ca CERN de exemplu.
Circuitele electronice utilizate in prezent in tehnica de calcul sunt bazate exclusiv pe tranzistoare cu efect
de camp de tip MOS (metal-oxid-semiconductor) (schita din dreapta). Spre deosebire de tranzistorul
“bipolar” (schita din stanga), acesta este comandat in tensiune prin electrodul de poarta (nu consuma
curent de comanda in regim de curent continuu), deci puterea de comanda este mult redusa. Totusi.
aceasta creste odata cu viteza de comutatie datorita capacitatii parazite a portii. In cazul memoriilor
dinamice, capacitatea portii devine utila, similara unei capacitati de stocare.
La tranzistorul bipolar (TB) curentul emitor-colector este comandat prin injectia unui curent in zona
subtire a bazei. Structura se bazeaza pe jonctiunile care se formeaza intre zonele dopate de tip n, p, n, la
care sunt conectati electrozii. Conductia in tranzistorul MOS se bazeaza pe obtinerea unui canal de
conductie, datorita extragerii de purtatori din substrat, sub influenta campului electric creat de poarta.
Viteza de comutatie creste odata cu reducerea dimensiunilor tranzistorului (in prezent sub 10 nm =
1010-9).
p n n E n
canal de purtători
n
substrat Structură p
Implementarea este actiunea prin care se trece de la nivelul de reprezentare (cu scheme, simboluri, etc.)
la nivelul de realizare fizica, cu circuite electronice.
Avantajul logicii si algebrei booleene (dupa ideile lui George Boole) este faptul ca, daca se defineste un
anumit tip de operator (unic sau universal) de baza, atunci toate functiile si operatiile aritmetice sau
logice se pot reprezenta si implementa numai cu ajutorul acestuia prin scheme diferite de conexiune.
Acesta este un avantaj urias din punct de vedere tehnologic. Odata ce s-a proiectat, optimizat si verificat
circuitul corespunzator operatorului unic, din punct de vedere electric si tehnologic, realizarea pentru
alte functii in circuitele integrate se poate face numai prin combinatii si conexiuni, utilizand medii
software de editare si dezvoltare specifice, fara a mai fi necesara proiectarea sau verificarea electrica a
unor structuri complexe (nu este vorba de verificarile in procesul de productie). Astfel se pot realiza
circuite cu miliarde de componente integrate numai prin editarea schemelor, cu module predefinite,
aflate in bibliotecile mediului de dezvoltare software, eventual prin munca (divizata) simultana a unui
numar mare de participanti. In cazurile complexe, se pot folosi cateva tipuri diferite de operatori
(circuite) tipizate si apoi multiplicate in structura integrata cu diferite tipuri de conexiuni.
Functii (operatiile) logice (non, si, sau, etc.) au ca variabile de intrare biti (stari logice). Prin traditiea
analizei validitatii conditiilor si “propozitiilor” logice, o variabila (bit) se considera adevarata daca are
valoarea “1” si falsa daca are valoarea “0”.
Astfel, in mod intuitiv, un operator “si” cu doua intrari are iesirea de valoare “1” daca, si o intrare, si
cealalta intrare, au valoarea “1”. In acelasi mod se pot construi operatori si cu oricate intrari. Analog, un
operator “sau” cu doua intrari are iesirea de valoare “1” daca, sau o intrare, sau cealalta intrare, au
valoarea “1”. Evident, un operator si va avea iesirea “1” daca ambele intrari au valoarea “1”.Analog, un
operator sau va avea iesirea “1” daca cel putin o intrare are valoarea “1”.
In mod evident operatorul “non” va schimba prin negatie valoarea unui bit, “0” in “1” si invers.
Operatorul NAND (si-nu) face o negatie dupa operatia si. Analog, operatorul NOR (sau-nu) face o negatie
dupa operatia sau.
Un alt mare avantaj al algebrei booleene este faptul ca, din punctul de vedere al operatorului, nu exista
deosebire intre operatiile logice si cele aritmetice. Daca bitul de la intrare face parte dintr-un numar
binar el este interpretat ca cifra binara si operatia logica sau va corespunde operatiei aritmetice
adunare, iar operatia logica si va corespunde operatiei aritmetice inmultire. De aceea pentru simbolul
operatiei sau (or) se utilizeaza si simbolul “+”, iar pentru simbolul operatiei si (&) se utilizeaza si simbolul
“•”.
Operatorii logici sunt descrisi prin tabele de adevar, care dau toate combinatiile de iesire pentru toate
combinatiile de intrare. Pentru operatorul NAND avem simbolul (conventional) si tabelul de adevar de
mai jos.
___
A B AB
-------------------------------
A
___
0 0 1
AB
0 1 1
B
1 0 1
1 1 0
____
A
___
AB
B
A B A+B
-------------------------------
0 0 0
0 1 0
1 0 0
1 1 1
In virtutea proprietatilor operatorului de tip unic, operatorul NAND poate fi utilizat pentru construirea
altor operatori, de exemplu, dacă este utilizat un operator de tip NAND (ŞI-NU), cu o intrare fixată la 1
logic, se poate obţine operatorul de negaţie „non”, datorită echivalenţei:
echivalent cu:
1
Similar, funcţia ŞI se realizează simplu prin negarea ieşirii unui operator 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:
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:
AB = 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 cu ajutorul operatorului NAND este necesară negarea intrărilor:
_
A
A
_ A+B
1
B
1
B
Este interesant de remarcat că dacă într-o configuraţie oarecare avem mai multe nivele de operatori
aceştia realizează funcţii diferite, Ş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:
__
A
AB
__ AB CD = AB + CD
B
CD
C
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)
Operatorii aritmetici pentru numere reprezentate binar sunt alcatuiti din combinatii de operatorilor
logici, care realizeaza operatia aritmetica (echivalenta cu una logica) la nivelul cifrelor binare (biti). La
fiecare suma a doua cifre binare ale unui numar se ia in consideratie transportul rezultat la suma cifrelor
de ordin mai mic si se transmite valoarea noului transport la suma cifrelor de ordin mai mare.
Combinaţiile posibile la adunarea a doua numere reprezentate prin 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 )
Se observă că valoarile sumei cifrelor şi transportului transmis se pot obţine cu următoarele expresii de
algebră binară. Valoarea sumei este ne-nula numai cand cifrele sunt diferite. Valoarea transportului este
ne-nula numai cand acestea au, ambele, valoare ne-nula.
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
Rezulta ca schema logică pentru calculul sumei a doua cifre binare si a transportului urmator poate fi
implementată astfel:
B S
A
B
A
C
B
Dacă numărul binar conţine mai multe cifre, cand trebuie considerat si transportul precedent (de la suma
de ordin inferior) pentru calculul sumei cifrelor şi transportului urmator se pot utiliza următoarele
expresii logice:
C = BCn −1 + ACn −1 + AB
Regulile de calcul pentru fiecare ordin al cifrelor binare, pentru toate valorile posibile ale termenilor şi
transportului precedent se conformeaza 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
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
Rezulta ca schema logică pentru calculul sumei a doua cifre binare si a transportului urmator, tinand cont
de transportul precedent, poate fi implementată astfel:
A
B
B
Cn-1
Cn-1 Cn
A
S
Circuitele logice se impart in doua categorii importante: circuite combinationale si circuite secventiale.
Acestea pot fi privite ca blocuri cu o multitudine de intrari si iesiri. Acestea pot fi referite, mai compact,
ca intrare de date si stare a intrarii (incluzand toate conexiunile intrarilor si starile lor) sau iesire de date
si stare a iesirii (incluzand toate conexiunile iesirilor si starile lor).
Circuitele combinationale nu au proprietati de memorie. Starile logice de la iesiri depind exclusiv de cele
de la intrari. Functionarea poate fi descrisa complet de tabelul de adevar. Daca starile de la intrari se
schimba, aproape simultan se vor schimba starile de la iesiri, dupa un timp scurt numit timp de
propagare sau timp de stabilizare necesar propagarii fizice a semnalului de tensiune in interiorul
circuitului electronic.
Circuitele secventiale poseda proprietati sau elemente de memorie. Starile logice de la iesiri depind atat
de starea intrarilor, dar si de starile precedente ale circuitului (determinate de elementele interne de
memorie). Pentru fiecare stare stabila a intrarii (incluzand toate starile intrarilor) circuitul poate parcurge
o succesiune de stari interne, care sa duca la succesiune de stari ale iesirii (incluzand toate starile
iesirilor). Pentru comanda sincrona a tranzitiilor starilor este utila o intrare speciala, separata, numita
intrare de tact sau ceas, notata de regula cu CK (clock). Aceste circuit se numesc circuite secventiale
sincrone. Daca tranzitia starilor interne si de iesire se produce numai sub influenta schimbarii starilor de
la intrari, circuitele se numeste circuite secventiale asincrone. In acest caz stabilizarea iesirilor nau mai
apare imediat dupa impulsul de tact (CK) datorita unui timp de propagare a tranzitiilor interne. In plus,
pana la stabilizare, iesirile pot parcurge o succesiune de stari instabile imprevizibile care complica
utilizarea circuitului intr-un ansamblu si necesita masuri de siguranta suplimentare. Din aceasta cauza
circuitele secventiale asincrone sunt mai rar folosite.
Multiplexoarele (MUX) comandate de un cod de selectie, realizeaza selectia unei dintre caile de date de
la intrare, pentru a intra in conexiune cu o singura cale de iesire. Astfel, cuvantul de date aflat intr-un
anumit registru sau celula de memorie poate fi transferat pe magistrala de comunicatie.
Deemltiplexoarele (DMUX) intr-o maniera similara, comandate de codul de selectie, realizeaza selectia
unei dintre caile de date de la iesire, pentru a intra in conexiune cu o singura cale de intrare. Astfel,
cuvantul de date existent pe magistrala de comunicatie poate fi transferat intr-un anumit registru sau
celula de memorie din structura unui modul sau dispozitiv.
Mai jos sunt figurate schemele bloc corespunzatoare. Sagetile groase simbolizeaza caile de date,
continand grupuri de conexiuni, caracterizate prin stari logice cu un anumit numar de biti. Numarul de
cai selectate este dat de puterea lui 2 (1, 2, 4, 8, etc.), corespunzatoare codului si conexiunilor de selectie
(cu un anumit numar de biti). De exemplu, cu 1 bit vom selecta 2 cai, cu 2 biti - 4 cai, cu 3 biti – 8 cai, etc.
Numarul de biti ai cailor de date (corespunzator cuvantului de date) este ales tot ca o putere a lui 2. Se
prefera asa, pentru ca atunci cand este necesara selectia bitilor, in cadrul unui cuvant de date, sa poata fi
utilizate toate combinatiile unui cod de selectie. Exista si exceptii, de exemplu codul instructiunilor de la
controlerele industriale are un numar de biti ales in functie de marimea setului de instructiuni.
Numele tipului pentru un multiplexor sau un demultiplexor reflecta configuratia acestuia. De exemplu:
MUX 48 specifica un multiplexor cu 4 cai de intrare, a cate 8 biti; DMUX 24 specifica un demultiplexor
cu 2 cai de iesire, a cate 4 biti; Evident, primul va avea un cod de selectie de 2 biti, iar al doilea de 1 singur
bit.
Ieşire Intrar
date e date
Căi de Căi de
intrare MUX DMUX ieşire
Selecţie Selecţie
Selecţia cailor intr-un multiplexor sau intr-un demultiplexor se face cu un modul special numit selector
sau decodificator (DEC), care se fabrica si ca circuit integrat separat. In schema bloc de mai jos. In acest
caz (decodificator de 3 biti) ieşirile B0, B1 … B7 sunt activate (setate pe „1” sau resetate pe „0”, in functie
de varianta), conform cu valoarea codului reprezentat de cele 3 intrări: A0, A1 si A2. Astfel, dacă la intrări
avem codul 101, va fi activată ieşirea a 5-a, adică B5, 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.).
Este firesc ca numărul de selecţii posibile să corespundă unei puteri a lui doi. Altfel, o parte din ieşirile
decodificatorului vor rămâne nefolosite.
Mai jos sunt date schemele logice cu circuite NAND (operator SI-NU) si INVERSOARE (operator
NON-negatie) pentru un multiplexor si un demultiplexor cu cate doua cai selectate, fiecare de cate un
bit.
A
QA
Q IN
B
QB
(a) Selecţie (b)
Selecţie
Schema logica a multiplexorului şi demultiplexorului cu câte două căi selectate
Circuitul de multiplexare
Î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) 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.
Circuitul de demultiplexare
Î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 conectate direct la magistrale de comunicatie.
Circuitele secventiale
Un circuit bistabil de tip R-S (reset-set) poate fi implementat cu două porţi NAND. Caracteristic
bistabilului R-S sunt iesirile QA si QB cu caracter complementar si necesitatea a doua intrari de comanda.
In functie de activarea intrarilor SA sau SB (active pe „0” logic), iesirile pot fi setate sau resetate in mod
complementar. Daca ambele intrari au starea „1” logic circuitul pastreaza (memoreaza) starea
precedenta.
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ă
in tabel.
Se observă că acest circuit bistabil, la care sunt adaugate cateva circuite suplimentare (porti sau
operatori logici), poate fi folosit ca o celulă de memorie de un bit. Atunci când la intrările bistabilului 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 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. 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şirea celulei de memorie. Dacă semnalul de scriere are
valoarea logică „1”, porţile de validare vor inversa starile complementare, provenite de la intrarea si
iesirea circuitului inversor şi le vor aplica la intrările bistabilului. Astfel, dacă la intrarea celulei de
memorie avem starile „0”, respectiv „1” logic, aceastea se vor regăsi la ieşire după operaţia de scriere
(cand intrarea Write este activa).
Intrare
Ieşire
Write
La fiecare impuls de intrare, codul de iesire al numaratorul binar creste cu cate o unitate (se
incrementeaza). Astfel, evolutia in timp a iesirilor este de forma unor impulsuri de tensiune,
corespunzatoare starilor bitilor de stare. Pentru o anumita frecventa de intrare, frecventa impulsurilor de
la iesire este divizata cu o putere a lui doi si este cu atat mai mica cu cat bitul codului de iesire este mai
semnificativ.
Structura numaratorului contine bistabili de tip Master-Slave interconectati in serie. La acest tip de
bistabili comanda se face frontul crescator al impulsului de intrare. Rezulta ca fiecare bistabil va realiza
un ciclu complet (set-reset) (impuls de iesire) dupa doua fronturi ascendente succesive la intrare. Deci,
lungimea impulsului de iesire este dubla fata de cea a impulsului de intrare si se poate considera ca
bistabilul Master-Slave este un divizor de frecventa cu doi. In acelasi timp, numarul de impulsuri care va
apare la iesire este jumatate fata de cel de la intrare. Deci, se poate admite ca bistabilul Master-Slave
este un numarator binar, ciclic, pentru cate doua impulsuri. Pentru mai multi bistabili conectati in serie,
numaratorul va realiza o divizare a frecventei cu o putere a lui 2 (divizare cu 4 pentru 2 bistabili, cu 8
pentru 3 si cu 16 pentru patru bistabili) si va deveni un circuit de numarare ciclic cu 4, 8 sau 16 stari.
Daca schimbarile de stare ale bistabililor se fac pe masura propagarii semnalului (informatiei de stare) de
la intrare catre iesire avem un numarator asincron. Acesta, de regula, este evitat din cauza starilor
intamplatoare care pot sa apara la iesiri, pentru durate foarte scurte, pana la stabilizarea lor (propagarea
completa intrare-iesire). Daca schimbarile de stare se fac sincron cu un semnal de tact (ceas-CK) atunci
avem un numarator sincron, la care iesirile tranziteaza simultan, fara stari aleatorii.
T
T T T In
Q0 Q1 Q2 Q0 Q1 Q2
In structura sistemelor de calcul numaratorul binar este foarte util pentru obtinerea semnalelor de tact
(ceas-CK) cu frecvente divizate si pentru realizarea secventelor de comanda, in cadrul unitatilor de
comanda (construite ca automate secventiale). Pentru fiecare impuls de tact codul numaratorului se
schimba si activeaza cate o alta iesire a decodificatorului, care la randul ei activeaza cate o alta
configuratie (diferita) a circuitelor unitatii centrale pentru operatiile de transfer, operatii logice sau
aritmetice.
Oscilator Numărător
Impulsuri
Decodificator
(de stări)
Semnale activare
stări
O0 O1 O2 O3 O4 O5
O6 O7
Tabelul de stari
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
Formele de undă şi stările la intrarea şi ieşirile unui Numărător de 2 biţi (patru stări).
O0=1 O1=1 O2=1 O3=1
Registrele de tip „latch” joaca rolul unei memorii temporare (buffer), de regula, de dimensiunea unui
cuvant de date. Incarcarea (scrierea) se face simultan pentru toti bitii.
Comanda de scriere (memorare), in functie de varianta, poate fi activa pe nivel (pozitiv sau negativ) sau
pe front (crescator sau descrescator).
Structura registrului contine circuite bistabile (cu doua stari), reprezentand celule pentru memorarea
fiecarui bit, care sunt setate sau resetate la comanda de scriere in functie de starile intrarilor.
Sunt utilizate in toate dispozitivele (inclusiv procesorul) di structura sistemului. Datele sunt disponibile si
la iesiri fie permanent, fie la o comanda separata (de citire) cand registrul are iesiri cu 3 stari si este
cuplat la o magistrala. Intrarile pot fi cuplate permanent la magistrala deoarece au impedanta mare si nu
influenteaza electric (si implicit logic) magistrala, atunci cand este comandata de alt dispozitiv.
Intrare date
Comandă
memorare b b b2 b3 b b b b
0 1 4 5 6 7
Ieşire
date
Registru Latch (paralel) pentru 1 octet (byte)
Registrul de deplasare (universal) poate fi comandat astfel incat atat informatia de intrare, cat si de iesire
sa fie accesibila si sub forma seriala, transferata printr-o singura conexiune electrica (un singur fir) sub
forma unor siruri de biti (pachet de biti). Registrul serial trebuie sa contina, in mod necesar, o intrare de
tact sau ceas (clock-CK). Aceasta comanda deplasarea informatiei in cadrul registrului, catre stanga sau
dreapta, in functie de varianta fabricata sau o comanda suplimentara (sens de deplasare).
La intrarea sau iesirea seriala, pastrarea corespondentei cu bitii cuvantului de date se face prin corelarea
cu momentul de timp in care se face scrierea sau citirea pe conexiunea seriala. Astfel, la o intrare seriala
primul bistabil (1) (conectat la intrare), la comanda impulsului de tact va prelua (memora) starea logica
(nivelul de tensiune) a intrarii, din momentul respectiv. La urmatorul impuls de tact, starea bistabilului
(1) va fi transferata bistabilului urmator (2), iar bistabilul (1) va prelua starea de la intrare din momentul
respectiv, s.a.m.d.. Astfel, dupa n impulsuri de tact, registrul se va incarca (prin deplasarea bitilor in
structura registrului) cu starile bitilor care au existat la intrare de-a lungul evolutiei in timp a impulsurilor
de tact.
Analog, la o iesire seriala, va apare pentru fiecare moment corespunzator impulsului de tact, starea
bitului care se va propaga, pas cu pas, in structura registrului si va ajunge la iesire la momentul respectiv.
Pentru ca bistabilele componente ale registrului sa efectueze, la fiecare impuls de tact, doua operatii
simultane (preluarea noii stari de la bistabilul precedent si transmisia starii curente catre bistabilul
urmator) este necesar ca acestea sa contina doua sub-circuite bistabile (numite sectiune Master si
sectiune Slave), care sa actioneze impreuna, pentru fiecare impuls de tact, in doua faze. Pe frontul
ascendent, starea bitului (curent) se transmite de la celula Master la celula Slave si devine accesibila
pentru bistabilului urmator, care o va memora la randul lui. Apoi, pe frontul descendent celula Master
preia satrea bitului din bistabilul precedent. Analog lucraeza fiecare bistabil Master-Slave, informatiile
bitilor trecand de la unul la celalalt, propagandu-se de-a lungul registrului de deplasare.
Registrul de deplasare se utilizeaza in unitatile aritmetice, pentru calcule care necesita deplasarea
numerelor binare, in cadrul algoritmilor operatiilor aritmetice de ordinul doi (inmultiri, impartiri) sau
pentru transmisia seriala a informatiei (pe liniile seriale, printr-un singur fir). In primul caz, scrierea
numarului in registru se face paralel (toti bitii deodata), apoi se face deplasarea la stanga sau la dreapta,
in functie de necesitatile operatiei, dupa care se face citirea numarului, tot sub forma paralela.
In cazul al doilea, serializarea (impachetarea) cuvantului de date se face in scopul transmisiei seriale pe
un singur fir a informatiei. La emisie, registrul transmitator primeste cuvantul de date paralel (de la o
magistrala de date, de ex.) si il transmite serial, bit cu bit, sincron cu un semnal de tact (ceas). La receptie
registrul receptor se incarca serial, pe durata mai multor impulsuri de tact, dupa care informatia este
preluata paralel, pentru tot cuvantul de date.
SI SO
M-S M-S M-S M-S
T (CK)
Tipuri de reprezentare numerică (pe octet sau cuvânt): binară, hexa, zecimală, ASCII (American Standard
Code for Information Interchange).
* Forma binară (baza “2”) foloseşte cifrele “0”şi “1” şi poate reprezenta o valoare numerică sau un grup
de stări logice (valori de adevăr).
* Forma Hexa (baza “16”) foloseşte cifrele: 0,…,9,A(=10), B(=11), C(=12), D(=13), E(=14), F(=15). Este
foarte avantajoasă pentru reprezentarea codurilor binare, care la origine folosesc numai simbolurile “0”
şi “1”. Datorită relaţiei biunivoce între fiecare cifră hexa (0…F) şi fiecare grup de patru cifre binare se
poate obţine o formă concisă a codurilor binare, foarte folosită atunci când se lucrează direct cu limbajul
maşină sau cu conţinutul locaţiilor de memorie.
* Forma ASCII reprezintă un caracter (cifră, litera, simbol grafic) corespunzător unui cod numeric.
Un număr binar poate reprezenta un set de stări logice sau valori de adevăr. Operaţiile logice vor acţiona
la nivel de bit (cifră binară). Pentru cifrele binare avem următoarea corespondenţă între operatiile
aritmetice şi logice:
Pentru un număr cu două cifre, reprezentarea operatorilor implementati cu circuite electronice, pentru
operaţiile logice AND şi OR,fara “Transport”(“Carry”), foloseşte simbolurile:
A0 A0
C0 C0
B0 B0
C1 C1
A1 A1
B1 B1
Intervalul de variaţie al numerelor întregi fără semn este:
- pe octet (pe 8 biţi): [0..255];
- pe cuvânt (word -16 biţi): [0..65535];
- pe dublu cuvânt (double word – 32 biţi): [0..232].
Intervalul de variaţie al numerelor întregi cu semn (reprezentate în “cod complementar fata de 2”) este:
- pe octet: [-128..+127];
- pe cuvânt: [-32268...+32267];
- pe dublu cuvânt: [-231..+ 231-1].
Atunci când se lucrează în mod text, pentru caracterele alfa-numerice, se foloseşte, de regulă,
reprezentarea ASCII. Acesta diferă de codul BCD (“neîmpachetat") prin prima tetrada (primul grup de 4
biţi) care este 3H in loc de 0H (reprezentarea Hexa).
Conversia numerică
În cadrul calculatorului, numerele sunt memorate sub formă binară. Aceasta poate să reprezinte chiar
forma binară a numărului sau poate să reprezinte (codificat) cifrele unei alte reprezentări. Atunci când
este afişat, calculatorul realizează operaţii de conversie, prin care se obţine şirul de simboluri
corespunzătoare cifrelor modului de reprezentare dorit.
De exemplu, numărul cu valoarea 200z (indicele arată reprezentarea zecimală) are următoarele
reprezentări în baza 16 (hexazecimal), respectiv în baza 2 (binar):
200 z = 2 10 2 + 0 101 + 0 10 0
C8h = C 16 + 8 = (12)z 16 + 8
11001000 b = 1 2 7 + 1 2 6 + 0 2 5 + 0 2 4 + 1 2 3 + 0 2 2 + 0 21 + 0 2 0
În tehnica de calcul se preferă reprezentarea hexazecimală deoarece este mai concisă şi trecerea la
reprezentarea binară se poate face mai direct, prin conversia individuală a cifrelor hexa, evitându-se
calculul cu puteri mari ale bazei. Fiecare cifră hexa este convertită în cod binar cu 4 cifre, valoarea
maximă fiind aceeşi (=15z). Există astfel o corespondenţă biunivocă între cele două reprezentări,
indiferent de valoarea numărului. Deci, se poate trece da la reprezentarea hexa la cea binară, indiferent
de semnificaţia unui cod numeric oarecare. În exemplul de mai sus, cifra C corespunde grupului 1100, iar
cifra 8 corespunde grupului 1000.
Cu toate acestea, uneori, numerele sunt codificate binar prin conversia individuală a cifrelor zecimale, în
reprezentarea notată “BCD” (Binary Code Decimal). Trebuie menţionat că pentru reprezentarea binară a
fiecărei cifre zecimale sunt necesare câte 4 cifre binare (4 biţi), deci o parte din cod nu va fi folosit
(corespunzător valorilor de la 10 la 15).
Pentru memorarea datelor, poate fi folosit câte un octet pentru codul binar al fiecărei cifre zecimale
(aliniat la dreapta), rezultând reprezentarea “BCD Neimpachetată” sau se poate utiliza un octet pentru
câte două cifre zecimale, rezultând reprezentarea “BCD Împachetată”.
L 1. TRANSFERUL DE DATE ÎN CADRUL PC
1.Sis.Oper.
5.Generator
(+Proc.Int.)
întreruperi
2.Software bază
(hardware)
Compilatoare, 8.Periferic
6.Unitate
etc. e
3.BIOS Centrală
HD,…
9.Disp.I/O
(procesor) 10.Conexiuni
(ROM)
monitor,
4.Programe 7.Memori exterioare
a tastatură,
de aplicaţie
RAM porturi
Noţiunile de bază:
Instrucţiunile maşină (decodificate direct de circuitele procesorului) reprezintă un cod care conţine codul
operaţiei şi informaţii asupra adreselor operanzilor şi rezultatului. Acestea pot avea lungime şi structură
diferită. De regulă, rezultatul se suprapune peste unul dintre operanzi, instrucţiunea având următorul
format:
Execuţia instrucţiunilor poate afecta biţii de stare ai procesorului (“Flag-uri”) şi poate realiza operaţii
aritmetice, logice, de comparaţie, salturi în program, etc.
Instrucţiunile de transfer au structura cea mai simplă. De exemplu instrucţiunea: “MOV dest, src”
realizează transferul de date din locaţia “sursă” către locaţia “destinaţie”. Acestea pot reprezenta
registre sau locaţii de memorie, conform cu mecanismele de adresare. De exemplu, “mov ax, 1h”
realizează transferul valorii constante “1”, reprezentată în formă hexazecimală (baza 16) în registrul AX.
Interfata USB (universal serial BUS) s-a raspandit si s-a generalizat in domeniul calculatoarelor de tip PC
(personal computer) ca interfata universala standard, pentru toata gama de dispozitive externe.
Desi denumirea face apel la termenul de BUS care desemneaza o structura de magistrala, functionarea
USB este mai speciala. Caile de transmisie nu sunt bidirectionale, utilizand o conexiune separata pentru
transmisie si una pentru receptie. Conectarea perifericelor nu se face electric in paralel. Pentru
conectarea simultana a mai multor periferice pe conexiunea USB sunt necesare dispozitivele numite
HUB, care realizeaza ramificarea catre dispozitive individuale, atat logic cat si electric. Ramificarea logica
(directarea pachetelor de informatie catre periferice diferite) se face printr-un cod de adresa transmis tot
serial, in cadrul unei secvente a protocolului specific USB. Functionarea USB este complexa, uitilizand
structuri de date si secvente de lucru specifice. Fiecare transfer de date util (cuvantul de date care
trebuie transmis perifericului) in transmisia seriala este incadrat de semnale (coduri) necesare pentru
sincronizare (corespondenta intre momentele de timp corespunzatoare semnalului de tact sau ceas-CK si
duratele de timp corespunzatoare starilor bitilor transmisi), identificarii si dirijarii pachetului de
informatie, precum si stabilirii functiei de transfer specifice (scriere, citire, etc.).
O alta deosebire fata de o magistrala propriu-zisa este modul de stabilire a dialogului cu perifericele.
Calitatea de master o are numai calculatorul, iar detectia evenimentelor, la nivelul perifericelor nu se
face prin intreruperi, ci printr-un sistem de polling, deci prin interogare periodica a starii perifericelor,
care insa nu o efectueaza procesorul calculatorului ci controlerul interfetei (hub-ului) din sistem.
Interfata USB foloseste structuri de date de tip “pachet”, care sunt vehiculate prin conexiunea serială.
Acestea, în afară de transmisia efectivă de date, pot avea rolul de a transmite mesaje sau comenzi, între
dispozitive. Pachetele de informaţie conţin coduri de adresă şi mijloace de sincronizare a receptorilor,
pentru identificarea stărilor de “0” sau “1” conţinute în mesaj.
Pentru stabilirea direcţiei de transfer se foloseşte conceptul de “token” (jeton). Acesta este un mesaj
special, cu rol de comandă care, în anumite situaţii, permite unui dispozitiv să transmită date.
O caracteristică importantă a interfeţei USB este posibilitatea de a lucra pe “nivele” diferite atât din
punct de vedere hardware cât şi software. Astfel, prin intermediul “hub-urilor” comunicaţia se poate
face cu echipamente diferite, dar şi cu “zone” diferite a acestora, identificate prin anumite adrese.
Fiecare zonă adresată poate avea funcţii specifice. La nivel software, interfaţa poate lucra cu programe
aflate fie la nivelul sistemului de operare fie la nivelul programelor de aplicaţie.
Informaţia transmisa este codificată prin nivele de tensiune ale conexiunii seriale. Aceasta foloseşte
modul de codare “NRZI” (Non Return to Zero Invert) bazat pe existenţa sau non-existenţa unor tranziţii
ale tensiunii, corespunzătoare unor anumite momente de timp. Acestea sunt determinate, la rândul lor,
prin metoda de sincronizare folosită. În acest context, starea “1” este reprezentată prin lipsa unei
tranziţii, iar starea “0” prin apariţia unei tranziţii (faţă de starea precedentă a nivelului de tensiune).
Astfel, un sir de “1” duce la lipsa tranziţiilor pe durată mai lungă, iar un şi de “0” produce tranziţii la
fiecare pas de timp (stabilit prin mecanismul de sincronizare). Un exemplu de codificare NRZI este arătat
mai jos.
Aşa cum s-a arătat mai sus, pentru utilizarea codului NRZI este necesar să existe o corelaţie între
tranziţiile de tensiune pe linie şi momentele (paşii) de timp. Deci, transmiţătorul produce anumite
tranziţii de tensiune, corespunzător unor anumite momente de timp care se succed periodic. Fizic,
acestea sunt determinate cu ajutorul unui generator de impulsuri. La nivelul receptorului trebuie să
existe, de asemenea, un generator de impulsuri, care însă trebuie sincronizat cu cel al transmiţătorului.
Aceasta se poate realiza prin detectarea momentelor (fazelor) tranziţiilor, atunci când au loc, în cadrul
unui mesaj oarecare, oscilatorul generatorului fiind astfel comandat, încât fronturile impulsurilor să fie
sincrone cu apariţia tranziţiilor (utilizând un bloc electronic cunoscut sub denumirea de PLL–“Phase
Looked Loop” adică “buclă de blocare a fazei”).
Structura de adresă
Structura unui sistem USB, din punctul de vedere al protocolului este diferit în raport cu structura fizică
(constructivă). Un dispozitiv conectat la un “hub” (denumit aici şi “host”- gazdă), acesta reprezentând
echipamentul de ramificaţie al conexiunilor, este referit în acest context sub denumirea de “funcţie”
(function), deşi sensul propriu al cuvântului are altă semnificaţie. În documentaţia de specificaţie a
produsului acest termen este definit astfel: Funcţie – un dispozitiv USB care oferă o anumită capabilitate
(facilitate) dispozitivului “host”, ca de exemplu, o conexiune ISDN , un microfon cu transmisie numerică,
dispozitive audio, comandate numeric, etc. O “funcţie” poate să posede mai multe “endpoints” (capete).
Pentru un anumit dispozitiv, acestea sunt definite astfel: Device endpoints – o porţiune (zonă) unui
adresabilă a unui dispozitiv USB, care poate fi sursa sau destinaţia unui flux de informaţie, vehiculat între
“host” şi dispozitiv.
Specific comunicaţiei USB este faptul că datele transmise, indiferent că acestea sunt purtătoare de
informaţie sau sunt necesare protocolului din punct de vedere tehnic (pentru sincronizare, identificarea
dispozitivelor, transmisia comenzilor, detecţia erorilor, etc.) sunt structurate în “pachete”. Acestea
reprezintă “unităţi” de informaţie vehiculată şi, la rândul lor pot fi organizate în mai multe zone
(câmpuri). Dacă anumite câmpuri, ca de exemplu, cele de tip “SYNC” sau “PID” sunt conţinute în mod
standard în toate tipurile de pachete, altele sunt specifice numai pentru anumite grupuri particulare de
pachete. Astfel câmpul “FrameNumber” (număr de cadru), apare numai în cadrul pachetelor de tip
“Start-of-Frame” (început de cadru). Zona biţilor de definiţie a pachetului nu este în format codificat
(NRZI). În mod special s-a renunţat la codificarea NRZI şi “bit stuffing” din motive de claritate a
reprezentării. Toate pachetele conţin câmpurile de delimitare disticte: “Start-of-Packet” şi
“End-of-Packet”. Procedura „bit stuffing” este o metoda utilizata pentru imbunatatirea modului de
sincronizare, pe care nu o mai detaliem aici.
Câmpul SYNC
Toate pachetele conţin la început un câmp de sincronizare (SYNC), care constă într-o secvenţă codificată
astfel încât să asigure o densitate de tranziţii maximă. Aceasta permite circuitului de intrare să
sincronizeze oscilatorul (clock) local cu faza de tranziţie a datelor de intrare. Secvenţa de SYNC
corespunde duratei a 8 biţi pentru regimul de viteză “full/low” şi 32 de biţi pentru regimul de viteză
“high”. În continuare câmpul SYNC va fi considerat implicit şi nu va fi figurat în diagramele structurilor
pachetelor. Ultimii doi biţi ai câmpului SYNC reprezintă un “marker” şi sunt utilizaţi pentru identificarea
sfârşitului câmpului SYNC şi începutul câmpului “PID”.
Acesta este referit ca “packet identifier field” (PID) şi urmează imediat după câmpul SYNC al fiecărui
pachet USB. Un “PID” conţine patru biţi, care indică tipul pachetului, urmaţi de încă patru biţi de
verificare. Tot din câmpul PID este determinat formatul pachetului şi modul de detecţie a erorii de
transmisie. Cei patru biţi de verificare, permit confirmarea recepţionării corecte a codului PID, pentru ca
restul pachetului să poată fi interpretat corect. Sub-câmpul de verificare este generat din codul PID, prin
aplicarea complementului faţă de unu (prin negarea individuală a biţilor). Dacă biţii de verificare nu
reprezintă negarea biţilor de identificare însemnă ca câmpul PID a fost recepţionat eronat.
(LSb) (MSb)
Câmpurile de adresă
Punctul de destinaţie a unui trasfer de date, definit ca “Function Endpoint” este adresat prin utilizarea a
două câmpuri: câmpul de adresă a “funcţiei” (“Address Field”) şi câmpul adresei capătului (Endpoint).
Pentru ca un mesaj (token) să poată să fie transmis corect, ambele câmpuri trebuie decodificate şi
interpretate corect.
Câmpul de adresă a “funcţiei” (ADDR) specifică funcţia, prin adresa ei, care reprezintă fie sursa fie
destinaţia unui pachet de date, aceasta depinzând de valoarea codului PID. Aşa cum se arată în figura de
mai jos, pot fi specificate 128 de adrese prin câmpul ADDR, conţinând şapte biţi (<0:6>). Câmpul ADDR
este specificat pentru mesajele de tip: “IN”, “SETUP” sau “OUT” şi pentru mesajele speciale de tip “PING”
sau “SPLIT”. Prin definiţie, fiecare valoare ADDR defineşte o singură “funcţie”. Până la apariţia unei
comenzi de “reset” sau “power-up”, adresa unei funcţii are valoarea implicită zero şi apoi adresa trebuie
stabilită (programată) de “host”, în timpul “procesului de enumerare”. Adresa zero este rezervată ca
adresă implicită şi poate fi folosită pentru alt scop.
(LSb) (MSb)
Un câmp de suplimentar de patru biţi, denumit “Endpoint Field” (ENDP) permite o adresare mai flexibilă,
atunci când, în cadrul funcţiilor, sunt necesare mai multe destinaţii. Exceptând adresa zero, valorile
corespunzătoare capetelor sunt specifice funcţiilor. Câmpurile “endpoint” sunt definite pentru mesajele
(token) de tip: IN, SETUP sau OUT şi pentru mesajul special de tip PING.
Din punct de vedere funcţional, comunicarea cu “funcţiile” este structurată la nivelul unor căi (linii) de
comunicaţie abstracte (independente de structura fizică), referite cu termenul de “pipe”. Fiecare funcţie
trebuie să accepte o linie de comandă asignată unui capăt (endpoint) cu adresa implicită zero (Default
Control Pipe).
Dispozitivele cu viteză redusă (lowspeed devices) suportă maximum trei căi (pipes) pentru fiecare funcţie:
o linie de comandă implicită, plus două linii adiţionale (fie două de tip “control pipe”, fie una “control
pipe” şi una de tip “interrupt endpoint”, fie două “interrupt endpoint”). Funcţiile de tip “full-speed” şi
“high-speed” pot suporta până la 16 capete de tip “IN” şi “OUT”.
(LSb) (MSb)
Câmpul pentru Numărul de Cadru conţine 11 biţi şi este incrementat de către Host, în funcţie de numărul
cadrului. Acesta poate creşte până la o valoare maximă de 7FF (Hexa) şi este transmis numai în mesajele
de tip “Start-of-Frame” la începutul fiecărui cadru sau micro-cadru. Figura de mai jos arată structura
cadrelor, respectiv a micro-cadrelor, corespunzător variantelor de standard 1.1 şi 2.0.
1ms 1ms
Câmpul de Date
Câmpul de date poate conţine între zero şi 1024 bytes (octeţi) şi trebuie să aibă un număr întreg de
bytes. În cadrul fiecărui byte, biţii de date sunt decalaţi în timp (transmisie de tip serial), începând cu
bitul cel mai puţin semnificativ (LSb–Low Significant bit). Formatul câmpului de date şi dimensiunea unui
pachet de date depinde de tipul de transfer (mesaj), de exemplu, transfer (mesaj) de întrerupere,
transfer (mesaj) de comandă sau transfer uniform în timp (“isochronous transfer”)
Tipuri de pachete
Figura de mai jos arată formatul câmpului pentru un pachet de tip jeton. Acesta constă într-o zonă de
PID, care specifică dacă câmpul este de tip IN, OUT sau SETUP eventual de tip ADDR sau ENDP. Pachetul
special de tip PING conţine aceleaşi câmpuri ca şi alte pachete jeton. Pentru transferurile de tip OUT sau
SETUP, câmpurile de adresă şi de capăt (endpoint) definesc în mod univoc destinaţia (corespunzătoare
unui endpoint) care trebuie să primească pachetul de date următor. Pentru transferul de tip IN acestea
definesc în mod univoc care “sursă” (corespunzătoare unui endpoint) trebuie să transmită pachetul de
date. Pentru transferul de tip PING acestea definesc dispozitivul (specificat prin endpoint) care va
răspunde cu un pachet de tip “handshake”.
Pachetele de tip jeton pot fi generate numai de către “host”. Un pachet de tip IN PID defineşte un
transfer de date de la un dispozitiv (“function”) către host. Pachetele de tip OUT şi SETUP PID definesc
transferuri de date de la host către un dispozitiv (“function”). Un pachet de tip PING PID defineşte un
transfer “handshake” de la dispozitiv către host.
Pachetele de tip jeton şi SOF (Start-of-Frame) sunt delimitate de un cod EOP (End-of-Pachet) după trei
bytes ai câmpului pachetului de date. Dacă la decodificarea pachetului este recunoscut codul unui jeton
sau SOF, dar care nu se termină cu un EOP, după trei bytes, acesta trebuie considerat invalid şi trebuie
ignorat de câtre receptor.
(LSb) (MSb)
Nr.de biţi 8 7 4 5
Pachetele de tip handshake, aşa cum se arată mai jos, constau numai în codul PID. Acestea sunt utilizate
pentru a raporta starea transferului de date şi pot returna valori (coduri) indicând recepţia cu succes a
datelor, acceptarea sau respingerea unei comenzi, controlul fluxului de date şi condiţiile de oprire.
Codurile “handshake” pot fi returnate numai dacă tipul de transfer respectiv suportă controlul fluxului de
date. Codurile “handshake” sunt totdeauna returnate în etapa sau faza de handshake a transferului şi
pot fi returnate, în locul datelor, în faza de transfer de date. Pachete “handshake” sunt delimitate de un
EOP după un byte al câmpului pachetului. Dacă la decodificarea pachetului este recunoscut codul
handshake, dar care nu se termină cu un EOP după un byte, acesta trebuie considerat invalid şi trebuie
ignorat de câtre receptor.
(LSb) (MSb)
Câmpul PID
Nr.de biţi 8
(LSb) (MSb)
Nr.de biţi 8 11 5
Pachetul SOF face obiectul unui transfer de tip jeton în sensul propriu şi nu de date suplimentare. Acesta
distribuie (transferă) o informaţie de marcare (SOF marker), însoţită de numărul de cadru, sincronizată
la anumite intervale de timp corespunzătoare începutului fiecărui cadru. Toate dispozitivele (“funcţiile”)
de tip full-speed şi high-speed, incluzând pe cele de tip “hub” pot recepţiona pachete SOF. La
recepţionarea pachetelor jeton SOF dispozitivele (funcţiile) receptoare nu returnează nici un mesaj. De
aceea nu poate fi garantată primirea codului SOF.
Pachete de Date
Un pachet de date constă într-un cod PID, un câmp de date conţinând zero sau mai mulţi bytes de date
(informaţie) şi un cod CRC, aşa cum este indicat mai jos. Există patru tipuri de pachete de date,
identificate de coduri PID diferite: DATA0, DATA1, DATA2 şi MDATA. Două dintre codurile PID, pentru
DATA0 şi DATA1, sunt astfel definite pentru a putea realiza sincronizarea tranziţiilor pe calea de date.
Toate cele patru coduri PID pot fi utilizate în secvenţa de PID pentru dispozitive (endpoints) cu mare
lărgime de bandă (high bandwidth) şi transfer uniform în timp de mare viteză (high-speed isochronous
transfer). Trei dintre codurile PID (MDATA, DATA0, DATA1) sunt utilizate în transferuri de tip “Split”.
Datele trebuie transmise totdeauna printr-un număr întreg de bytes. Codul CRC este calculat numai în
funcţie de câmpul de date din pachet şi nu include codul PID, care are propriul său câmp de verificare.
Întinderea maximă a câmpului de date pentru dispozitivele low-speed este de 8 bytes. Pentru
dispozitivele full-speed este 1023 bytes, iar pentru dispozitivele high-speed este 1024 bytes.
(LSb) (MSb)
Pachete de tip PING formează o clasă de pachete utilizate numai pentru dispozitive de tip “high-speed”.
Acestea sunt utilizate pentru determinarea vitezei de transfer.
NIVELELE DE TRANSFER
Nivelul handshake
Procedurile de handshake sunt diferite, corespunzator diferitelor tipuri de conexiuni. Un dispozitiv de tip
“host” poate să trimită unui dispozitiv de tip “funcţie” o cerere de interogare de tip IN sau OUT. În
funcţie de starea dispozitivului “funcţie”, răspunsul poate să permită dispozitivului “host” să scrie date în
registrul tampon (buffer) al primului sau să anuleze transferul. Acelaşi lucru este posibil în situaţia
inversată.
Corecţia de eroare
Apariţia unei erori poate fi detectată datorită câmpului CRC al unui pachet, dar anumite câmpuri posedă
propriile mijloace de verificare. Cîmpul PID conţine informaţia redundantă a biţilor negaţi şi eroarea
poate fi detectată chiar dacă convenţia de “bit-stuffing” nu este respectată. Trebuie notat totuşi, că în
cazul transferului “izocron”, care are loc într-o manieră unidirecţională, nu există nici o posibilitate
pentru trimiterea pachetelor de tip NAK şi re-recepţionarea datelor, de aceea acest tip de transmisie este
rezervat pentru dispozitivele cu comunicaţie de tip “stream”, unde controlul erorii nu este important
(camere de luat vederi, etc.).
În sensul clasic, conexiunea USB permite numai transferul între două dispozitive aflate la capete (“host”
şi “function”). Dezvoltarile ulterioare (USB 2.0) au permis ramificarea unei conexiuni USB cu ajutorul unui
dispozitiv de tip “Hub”. Acesta conţine circuite electonice care permit identificarea dispozitivelor
interconectate şi transferul între acestea. Dipozitivele plasate la capătul ramificaţiilor pot lucra pe un
nivel de viteză mai redus.
Comunicaţia prin intermediul unui hub conţine secvenţe specifice de comunicaţie, între host şi hub,
numite “split transactions”. Acestea conţin două părţi: “strat-split” şi “complete-split”, necesare,
respectiv, începerii şi încheierii unui ciclu de comunicaţie.
În diagrama de mai jos sunt indicate categoriile (nivelele) de comunicaţie, între host şi hub, respectiv
între hub şi device.
Este important de remarcat, că modul de comunicaţie USB poate fi reprezentat, la nivel abstract, pe mai
multe nivele, aşa cum se obişnuieste, de exemplu, în tehnica reţelelor de date. În general, aceste nivele
pot reprezenta conexiuni cablate, plăci (circuite) de comunicaţie şi căi de comunicaţie (“pipes”) între
programe de sistem, programe de aplicaţie sau proceduri ale sistemului de operare.
Aceste nivele sunt legături logice (abstracte sau simbolice) şi reprezintă asocieri între un “capăt” (adresă
sau locaţie) al unui dispozitiv şi programe localizate la nivel de “host”. O astfel de cale de comunicaţie
(“pipe”) poate avea diferite atribute, de exemplu, poate transfera date sub formă de şiruri (stream pipe)
sau date sub formă de mesaje (message pipe). Calea de nivel zero (Pipe 0) este rezervată şi este
prevăzută în software-ul asociat oricărui dispozitiv.