Documente Academic
Documente Profesional
Documente Cultură
Definiție: Un sistem digital este orice sistem de calcul ce reprezintă informația sub forma unui set finit de
simboluri. Fiecare din aceste simboluri este un digit. Sistemele digitale realizează calcule și alte procesări asupra
informației exprimate sub formă digitală. Spre deosebire de sistemele digitale, cele analogice reprezintă
informația sub forma unui set continuu și infinit de valori.
Sisteme Digitale
Reprezentarea Digitală a Valorilor Numerice
În orice sistem digital, valorile numerice sunt reprezentate printr-o secvență de N simboluri digitale de
forma aN-1aN-2aN-3aN-4...a5a4a3a2a1a0. Numărul de simboluri din setul folosit reprezintă baza de numerație. De
exemplu, în cazul setului de simboluri zecimal, baza de numerație este 10, iar în cazul setului de simboluri binar,
baza de numerație este 2.
Valoarea numerică (reprezentată zecimal) V a unei secvențe de simboluri într-o bază de numerație B este dată
de ecuația:
𝑉=∑𝑁−1𝑖=0(𝑎𝑖𝐵𝑖)V=∑i=0N−1(aiBi)
Exemple:
Secvența de simboluri 1101 în baza 2 are valoarea zecimală 13
Aceeași secvență de simboluri are în baza 3 valoarea 37
Folosind ecuația de mai sus se poate determina valoarea maximă pe care o poate avea o secvență
de N simboluri într-o bază de numerație B.
𝑉𝑁,𝐵𝑀𝐴𝑋=𝐵𝑁−1VMAXN,B=BN−1
Transformarea inversă, a valorii V din zecimal într-o bază de numerație B, se realizează identificând cea mai
mare putere a lui B care este mai mică decât V, scăzând această valoare din V, și repetând iterativ până
când V devine zero, atribuind în același timp valori simbolurilor ai.
Evident, soluția naturală de reprezentare este să asociem fiecare din cele B simboluri unei valori particulare de
tensiune între 0V și VCC. Circuitul va interpreta orice valoare VS a tensiunii de la bornele sale ca fiind un simbol.
Mai precis, circuitul va interpreta valoarea de tensiune VIN = VS+VZ fiind posibil ca, din cauza adăugării tensiunii
de zgomot peste tensiunea de la borne, să se realizeze greșit interpretarea simbolului de la bornele circuitului.
Condiția de maximizare a fiabilității circuitului ne duce la soluția unde cele B simboluri sunt maximal spațiate în
gama 0-VCC astfel încât diferența de tensiune între două simboluri este de minim VCC/(B-1) și tensiunile
corespunzătoare simbolurilor sunt:
𝑉𝑖=𝑖𝑉𝐶𝐶𝐵−1,∀𝑖∈[0,𝐵)Vi=iVCCB−1,∀i∈[0,B)
Avem astfel o soluție optimă pentru orice bază de numerație B. Totuși, rămâne de evaluat dacă există diferențe
din punctul de vedere al fiabilității între diferite baze de numerație, în contextul dat. Pentru fiecare bază de
numerație, valoarea maximă a zgomotului tolerat este egală cu diferența de tensiune între simboluri, ce este
invers proporționață cu numărul de simboluri. Rezultă astfel că baza de numerație 2 (reprezentarea binară)
tolerează zgomotul de valoare maximă, oferind astfel fiabilitate optimă circuitului.
Conversia Analogic-Digital
Majoritatea semnalelor întâlnite în lumea înconjurătoare sunt analogice:
temperatura
sunetul
intensitatea luminoasă
Prin urmare, procesarea digitală a acestor semnale necesită mai întâi o transpunere a semnalului din domeniul
analogic în domeniul digital (Analog-to-Digital Conversion, sau ADC). Acest proces se face în doi pași:
1. eșantionarea semnalului analogic la momente discrete de timp
2. cuantizarea valorii analogice, prin atribuirea unui simbol digital sau secvență de simboluri, din setul de
valori suportate de sistemul digital
Acest proces e ilustrat în figura de mai jos:
De asemenea, efectul unei procesări în domeniul digital este de multe ori necesar a se manifesta în mod
analogic: aprinderea unui LED cu intensitate variabilă, producerea unui semnal vocal, etc. Din acest motiv
sistemele digitale se interfațează de cele mai multe ori cu lumea analogică prin convertoare digital-analogice.
Un sistem complet este ilustrat în figura de mai jos și realizează digitizarea unui semnal analogic, procesarea sa
în domeniul digital, apoi conversia rezultatelor în semnale analogice.
Logică Booleană
Axiomele Algebrei Boolene
Algebra Booleană definește operații matematice pe valori binare. Folosind algebra Booleană putem implementa
procesări matematice asupra unor valori exprimate binar, și putem de asemenea realiza optimizări asupra
funcțiilor logice și matematice pentru ale reduce complexitatea.
Precedența operatorilor este următoarea (de la cel mai prioritar către cel mai puțin prioritar):
1. Parantezele
2. Operatorul de complementare
3. Operatorul ȘI
4. Operatorul SAU
Folosind aceste axiome poate fi analizată corectitudinea oricărei ecuații (teoreme) în spațiul numerelor binare.
Teoreme Importante
Următoarele teoreme sunt utile pentru simplificarea funcțiilor logice și pot fi demonstrate folosind axiomele
logicii Boolene sau prin verificarea ecuației pentru toate valorile posibile ale x și y:
Teoremele 8 și 9 sunt denumite teoreme DeMorgan și permit transformarea unei funcții logice bazate pe
operații ȘI în una bazată pe SAU, sau invers, adăugând operații de complementare.
Tabele de Adevăr
Tabelele de adevăr reprezintă o explicitare grafică a valorilor unei funcții logice pentru toate combinațiile de
valori ale operanzilor săi, și poate înlocui expresia analitică (matematică) a funcției.
Funcție Tabel de adevăr Funcție
Tabel de adevăr
A B A ȘI B A B A SAU B
000 000
ȘI 010 SAU 011
100 101
111 111
A B A ȘI-NU B
COMPLEMENT
A 001
A
COMPLEMENT ȘI-NU 011
01
101
10
110
A B A SAU-NU B A B A XOR B
001 SAU 000
SAU-NU 010 EXCLUSIV 0 1 1
100 (XOR) 101
110 110
Reprezentarea Pictografică
Funcțiile logice elementare pot fi reprezentate și sub formă de desen, fiecare având asociată o pictogramă.
Aceste pictograme sunt următoarele:
La fel cum orice funcție logică, indiferent de complexitate, se poate asambla din funcții logice elementare, se
poate construi o reprezentare grafică a oricărei funcții asamblând și conectând pictograme ce reprezintă
funcțiile logice elementare. De exemplu, funcția logică 𝑄(𝐴,𝐵,𝐶)=(𝐴⋅𝐵)+((𝐵+𝐶)⋅(𝐵⋅𝐶))Q(A,B,C)=(A⋅B)+
((B+C)⋅(B⋅C)) este reprezentată grafic în modul următor:
Circuite Logice Combinaționale
Descrierea circuitelor logice combinaționale (CLC).
Un CLC poate avea, în general, orice număr N de semnale de intrare de 1 bit, denumite generic 𝐼𝑗Ij și orice
număr M de semnale de ieșire de 1 bit, denumite generic 𝑄𝑖Qi.
Valoarea fiecărui semnal de ieșire este generată de o funcție logică ce are ca operanzi valorile semnalelor de
intrare:
𝑄𝑖=𝐹𝑖(𝐼0,𝐼1,...,𝐼𝑁−1),∀𝑖∈[0,𝑀−1]Qi=Fi(I0,I1,...,IN−1),∀i∈[0,M−1]
Dat fiind această relație între valorile intrărilor și ieșirilor, se poate spune că 𝐹𝑖Fi definește funcționalitatea
circuitului combinațional. CLC pot fi clasificate ca fiind neregulate atunci când funcția logică e diferită pentru
fiecare ieșire, sau regulate atunci când aceeași funcție logică caracterizează mai multe din ieșirile circuitului.
Se cere identificarea tabelului de adevăr al funcției logice corespunzătoare circuitului. Primul pas constă în
denumirea tuturor semnalelor din schemă, altele decât cele de intrare sau ieșire. În acest exemplu, există doar
două astfel de semnale, conectate la ieșirile porții ȘI, respectiv SAU, semnale ce vor fi denumite W1, respectiv
W2.
Urmează construirea tabelului de adevăr al ieșirii Q a circuitului în funcție de intrările A, B, C. Mai ușor este să
construim tabelul de adevăr al Q în funcție de valorile 𝑊1W1 și 𝑊2W2, care la rândul lor pot fi exprimate direct
în funcție de A, B, C. Iată un exemplu:
𝑊1=𝐴⋅𝐵W1=A⋅
ABC 𝑊2=𝐵+𝐶W2=B+C 𝑄=(𝑊1⋅𝑊2)′Q=(W1⋅W2)′
B
0 000 0 1
0 010 1 1
0 100 1 1
0 110 1 1
1 000 0 1
1 010 1 1
1 101 1 0
1 111 1 0
Tabelul se completează cu semnalele din schemă începând cu intrările, apoi semnalele intermediare,
parcurgând schema dinspre intrări către ieșiri, iar ultima coloană reprezintă ieșirea Q.
În continuarea acestei lecții vom descrie implementarea fizică a porților logice pentru a putea explica natura
timpului de propagare și relația între funcția logică a unei porți și numărul de tranzistoare necesare pentru
implementarea acesteia.
Implementarea CMOS a Porților Logice
Implementarea tuturor circuitelor digitale se face folosind exclusiv tranzistoare de tip MOS. Acestea sunt de tip
P (PMOS) și N (NMOS). Atunci când ambele tipuri de tranzistor MOS sunt folosite într-un circuit, spunem că
respectivul circuit este implementat în tehnologie MOS complementară (Complementary MOS - CMOS).
Circuitele digitale folosesc tranzistoarele MOS ca întrerupătoare controlabile. Astfel, vom începe discuția
stabilind ce tip de întrerupător poate fi implementat de fiecare din cele două tipuri de tranzistor MOS.
Diagrama de mai jos indică în mod grafic felul în care poate fi folosit fiecare tip de tranzistor în rolul de
întrerupător.
Tranzistorul NMOS conduce curent atunci când tensiunea poartă-sursă 𝑉𝐺𝑆VGS trece de pragul de
tensiune 𝑉𝑇𝑛=0.7𝑉VTn=0.7V, iar cel PMOS conduce curent atunci când tensiunea sursă-poartă 𝑉𝑆𝐺VSG trece
de pragul de tensiune 𝑉𝑇𝑝=0.7𝑉VTp=0.7V. Astfel, se desprind 4 situații posibile:
Combinând proprietățile tranzistoarelor PMOS și NMOS, se poate implementa un inversor CMOS în modul
descris mai jos:
Asamblând 4 tranzistoare se pot implementa funcții logice mai complexe. În următoarea figură este prezentată
implementarea porții logice SAU-NU (NOR). Ieșirea circuitului este conectată la 𝑉𝐷𝐷VDD (deci are valoarea
logică '1') doar dacă ambele tranzistoare PMOS conduc, prin urmare 𝑉𝐴=𝑉𝐵=0𝑉VA=VB=0V deci ambele intrări
sunt '0' logic. În schimb, ieșirea circuitului este conectată la masă (deci are valoarea logică '0') dacă oricare din
tranzistoarele NMOS conduc, prin urmare 𝑉𝐴=𝑉𝐷𝐷VA=VDD sau 𝑉𝐵=𝑉𝐷𝐷VB=VDD deci dacă oricare din intrări
sunt '1' logic. Veți recunoaște în acest comportament funcția SAU-NU.
În mod similar, următoarea figură prezintă implementarea porții logice ȘI-NU (NAND). Ieșirea circuitului este
conectată la 𝑉𝐷𝐷VDD (deci are valoarea logică '1') dacă oricare din tranzistoarele PMOS conduc, prin
urmare 𝑉𝐴=0𝑉VA=0V sau 𝑉𝐵=0𝑉VB=0V deci dacă oricare din intrări sunt '0' logic. În schimb, ieșirea circuitului
este conectată la masă (deci are valoarea logică '0') doar dacă ambele tranzistoare NMOS conduc, prin
urmare 𝑉𝐴=𝑉𝐵=𝑉𝐷𝐷VA=VB=VDD deci ambele intrări sunt '1' logic.Veți recunoaște în acest comportament
funcția ȘI-NU.
Este de notat faptul că nu se pot implementa direct porțile ȘI, respectiv SAU folosind un montaj CMOS
serie/paralel similar celor de mai sus. Porțile SAU se implementează folosind porți SAU-NU urmate de
inversoare. Porțile ȘI se implementează folosind porți ȘI-NU urmate de inversoare. Prin urmare, porțile ȘI/SAU
folosesc 6 tranzistoare în timp ce porțile ȘI-NU/SAU-NU folosesc doar 4 tranzistoare.
Folosind 6 sau mai multe tranzistoare se pot de asemenea implementa diverse alte funcții logice, cu 2 sau mai
multe intrări. Iată un exemplu de poartă ȘI-NU cu 3 intrări, implementată folosind 6 tranzistoare:
Optimizarea Circuitelor Combinaționale
O sarcină importantă a oricărui inginer proiectant de circuite digitale este să optimizeze parametrii unui circuit,
în funcție de criteriile de performanță enumerate anterior. În această secțiune vom discuta tehnici de
optimizare a timpului de propagare, și a ariei unui circuit, estimată prin numărul de tranzistoare. Vom discuta
două tehnici de optimizare:
Minimizarea funcțiilor logice prin diagrame Karnaugh, care pornește de la o expresie dată prin tabelul de
adevăr a unei funcții logice F și urmărește găsirea unei expresii analitice a funcției F cu număr minim de
operatori (porți) ȘI/SAU/NU.
Conversia la logică NAND sau NOR, care urmărește înlocuirea porților ȘI și SAU cu porți NAND sau NOR.
Metoda diagramelor Karnaugh (diagramă K, iar în engleză K-map) exprimă tabelul de adevăr al unei funcții în
mod grafic astfel încât fiecare locație în tabel reprezintă un produs (denumit minterm) între unul sau mai multe
din intrări, sau valorile negate ale intrărilor, iar sume între produse adiacente în diagramă se simplifică. Pentru a
ilustra acest concept, vom incepe cu prezentarea unei diagrame K pentru minimizarea funcțiilor cu 2 intrări:
După cum se observă în figură, fiecare spațiu în diagramă, notat 𝑚𝑖mi, reprezintă un produs (minterm). Astfel,
𝑚0=𝑥′⋅𝑦′m0=x′⋅y′ și este 1 dacă 𝑥=0x=0 și 𝑦=0y=0
𝑚1=𝑥′⋅𝑦m1=x′⋅y și este 1 dacă 𝑥=0x=0 și 𝑦=1y=1
𝑚2=𝑥⋅𝑦′m2=x⋅y′ și este 1 dacă 𝑥=1x=1 și 𝑦=0y=0
𝑚3=𝑥⋅𝑦m3=x⋅y și este 1 dacă 𝑥=1x=1 și 𝑦=1y=1
Observăm că fiecare produs devine '1' logic pentru o combinație particulară a valorilor variabilelor de intrare x
și y, prin urmare fiecare produs corespunde acelei combinații de valori. Produsele sunt astfel aranjate în
diagramă astfel încât suma produselor pe orice linie sau coloană să se reducă prin aplicarea teoremelor algebrei
Boolene:
Pe linia 1, 𝑚0+𝑚1=𝑥′⋅𝑦′+𝑥′⋅𝑦=𝑥′⋅(𝑦′+𝑦)=𝑥′m0+m1=x′⋅y′+x′⋅y=x′⋅(y′+y)=x′
Pe linia 2, 𝑚2+𝑚3=𝑥⋅𝑦′+𝑥⋅𝑦=𝑥⋅(𝑦′+𝑦)=𝑥m2+m3=x⋅y′+x⋅y=x⋅(y′+y)=x
Pe coloana 1, 𝑚0+𝑚2=𝑥′⋅𝑦′+𝑥⋅𝑦′=𝑦′⋅(𝑥′+𝑥)=𝑦′m0+m2=x′⋅y′+x⋅y′=y′⋅(x′+x)=y′
Pe coloana 2, 𝑚1+𝑚3=𝑥′⋅𝑦+𝑥⋅𝑦=𝑦⋅(𝑥′+𝑥)=𝑦m1+m3=x′⋅y+x⋅y=y⋅(x′+x)=y
Observăm că liniile se reduc la 𝑥x sau 𝑥′x′ în vreme ce coloanele se reduc la 𝑦y sau 𝑦′y′. În dreptul fiecărei linii
sau coloane este valoarea variabilei care face ca suma de produse corespunzătoare liniei sau coloanei
respective să aibă valoarea '1' logic.
În cele ce urmează vom folosi diagrama K pentru a minimiza o funcție F oarecare. Pornim de la tabelul de
adevăr al funcției F:
XYF
001
011
100
111
Vom scrie un '1' în diagrama K în căsuțele corespunzătoare fiecărui produs doar dacă F este 1 pentru
combinația de valori ale x și y corespunzătoare produsului respectiv. Astfel:
𝐹=1F=1 pentru 𝑥=0x=0 și 𝑦=0y=0, care corespund 𝑚0m0, deci scriem '1' în diagramă în căsuța lui 𝑚0m0
𝐹=1F=1 pentru 𝑥=0x=0 și 𝑦=1y=1, care corespund 𝑚1m1, deci scriem '1' în diagramă în căsuța lui 𝑚1m1
𝐹=1F=1 pentru 𝑥=1x=1 și 𝑦=1y=1, care corespund 𝑚3m3, deci scriem '1' în diagramă în căsuța lui 𝑚3m3
După ce am terminat acest pas de completare a diagramei K, putem acum exprima F ca suma tuturor
produselor 𝑚𝑖mi care au '1' în dreptul lor în diagramă. Astfel,
𝐹=𝑚0+𝑚1+𝑚3=𝑥′𝑦′+𝑥′𝑦+𝑥𝑦F=m0+m1+m3=x′y′+x′y+xy
Dar ținând cont de faptul că sumele de produse se reduc pe linii și coloane (exprimat grafic pe diagramă
încercuind liniile și coloanele respective), și că putem duplica în suma de produse orice produs dat fiind
că 𝑚𝑖+𝑚𝑖=𝑚𝑖mi+mi=mi (exprimat grafic prin faptul că 𝑚1m1 se află în două zone încercuite), atunci putem
reduce avantajos suma de produse:
𝐹=𝑚0+𝑚1+𝑚1+𝑚3=(𝑚0+𝑚1)+(𝑚1+𝑚3)=𝑥′+𝑦F=m0+m1+m1+m3=(m0+m1)+(m1+m3)=x′+y
Aceasta este forma analitică minimală a funcției F, a cărei implementare necesită un inversor și o poartă SAU.
Funcțiile logice cu 3, respectiv 4 intrări se pot minimiza folosind diagrame K mai complexe:
Conversia la logică NAND/NOR
Din discuțiile anterioare legate de implementarea CMOS a porților logice, am aflat că porțile ȘI-NU/SAU-NU
sunt implementate folosind 4 tranzistoare în timp ce porțile ȘI/SAU folosesc 6 tranzistoare. Din acest motiv
putem optimiza un circuit digital transformându-l astfel încât se folosesc doar porți de tip ȘI-NU/SAU-NU.
Pentru a transforma porțile ȘI/SAU în porți ȘI-NU/SAU-NU vom folosi proprietățile algebrei Boolene:
𝑥+𝑦=((𝑥+𝑦)′)′x+y=((x+y)′)′ (transformare din SAU în SAU-NU)
𝑥+𝑦=(𝑥′⋅𝑦′)′x+y=(x′⋅y′)′ (transformare din SAU în ȘI-NU cu teorema DeMorgan)
𝑥⋅𝑦=((𝑥⋅𝑦)′)′x⋅y=((x⋅y)′)′ (transformare din ȘI în ȘI-NU)
𝑥⋅𝑦=(𝑥′+𝑦′)′x⋅y=(x′+y′)′ (transformare din ȘI în SAU-NU cu teorema DeMorgan)
(𝑥′)′=𝑥(x′)′=x (anularea inversoarelor consecutive)
În formă grafică:
Comparatorul
Comparatorul este circuitul care determină egalitatea între două semnale A și B, fiecare din acestea fiind
formate din N biți. Ieșirea comparatorului este un semnal de un singur bit, a cărui valoare este 1 logic dacă A
este egal cu B, și zero logic dacă A este diferit de B.
Există multiple metode de a implementa comparatorul, dar toate se bazează pe același concept: două numere
multi-bit A, respectiv B sunt egale dacă fiecare bit din A este egal cu bitul cu același index din B. Astfel, circuitul
trebuie să determine relația de egalitate sau ne-egalitate între biții cu același index din A și B; apoi să realizeze
agregarea rezultatelor comparațiilor bit cu bit folosind un arbore de porți. Avem mai jos două exemple:
În primul exemplu, porțile XNOR produc toate 1 logic pe ieșire dacă există egalitate între fiecare pereche de biți
cu același index din A, respectiv B. Arborele de porți AND produce 1 logic pe ieșire dacă toate ieșirile porților
XNOR au fost 1, altfel spus dacă egalitatea există între toate perechile de biți cu același index, prin urmare dacă
A este egal cu B.
Un rezultat identic obținem prin structura de mai jos. În acest caz, porțile XOR produc 1 logic pe ieșire atunci
când există o diferență între biții comparați. Arborele de porți SAU, încheiat cu SAU-NU, produce 1 logic pe
ieșire dacă toate intrările sunt 0 logic, deci dacă nu există diferențe între niciuna din perechile de biți cu același
index din A, respectiv B.
Multiplexorul Elementar
Multiplexorul este circuitul fundamental de selecție între două sau mai multe semnale. Multiplexorul
elementar (EMUX) realizează selecția între două semnale de un singur bit A, B, în funcție de un semnal de
selecție S care are el însuși un bit. Funcția multiplexorului elementar poate fi precizată mai bine prin tabelul său
de adevăr:
SABQ
00 0 0
00 1 1
01 0 0
01 1 1
10 0 0
10 1 0
11 0 1
11 1 1
Astfel, ieșirea Q a multiplexorului este egală cu intrarea B atunci când intrarea S este '0' logic, și egală cu
intrarea A atunci când intrarea S este '1' logic. Această funcție este implementată de circuitul de mai jos în
logică NU/ȘI/SAU:
Implementarea de mai sus a multiplexorului implică 20 de tranzistoare. În logică NAND, aceeași funcție poate fi
implementată cu 14 tranzistoare conform schemei de mai jos:
Pentru o reprezentare grafică mai ușoară, vom folosi următoarea pictogramă pentru multiplexorul elementar:
Se poate observa că selecția se face mai întâi între 𝐼0I0 și 𝐼1I1 prin un multiplexor elementar cu intrarea de
selecție 𝑆0S0, apoi rezultatul aceste selecții inițiale trece printr-un al doilea multiplexor elementar, cu intrarea
de selecție 𝑆1S1. Se observă că, dacă interpretăm semnalele 𝑆1S1 și 𝑆0S0 ca fiind biții cel mai semnificativ,
respectiv cel mai puțin semnificativ, ai unui semnal multi-bit 𝑆S, atunci valoarea zecimală a lui 𝑆S ne spune care
din intrări este selectată, conform tabelului:
S
S (zecimal) Q
(binar)
00 0 𝐼0I0
01 1 𝐼1I1
10 2 𝐼2I2
11 3 𝐼2I2
Acest concept se poate extinde la orice număr de intrări. Figura următoare ilustrează un multiplexor cu 4 intrări
(MUX4):
Se observă din exemplele anterioare că multiplexorul de 3 intrări utilizează 2 multiplexoare elementare,
organizate în două straturi, iar multiplexorul cu 4 intrări utilizează 3 multiplexoare elementare organizate în 2
straturi.
Dorim să analizăm multiplexorul generic cu N intrări de 1 bit pentru a determina numărul minim de
multiplexoare elementare din care este constituit, cât și numărul de straturi de multiplexare. Aceste două
caracteristici ne permit să evaluăm dimensiunea și adâncimea multiplexorului cu N intrări.
Folosind conceptul de multiplexare arborescentă, pornim analiza determinând câte multiplexoare elementare
trebuie să adăugăm pentru a dubla numărul de intrări, de la 4 la 8. Pentru a multiplexa cele 8 intrări, vom folosi
două MUX4, ale căror ieșiri vor fi multiplexate folosind un EMUX. Rezultă structura de mai jos a unui MUX8:
Astfel, numărul de multiplexoare elementare a crescut de mai mult de două ori (s-a dublat prin folosirea a doua
MUX4, plus adăugarea unui EMUX suplimentar) ajungând la 7 EMUX. Numărul de straturi a crescut cu 1, prin
adăugarea unui EMUX ce selectează între ieșirile MUX4.
Putem cu ușurință să folosim aceeași metodologie pentru a construi un MUX16 din două MUX8 și un EMUX, sau
un MUX2N din MUXN, oricare ar fi N, și putem deriva în acest mod următoarele relații pentru numărul de
EMUX folosite de MUXN (notat E), și adâncimea MUXN ca număr de straturi de EMUX (notată D):
Se observă faptul că adâncimea MUXN depinde de următoarea putere a lui 2 mai mare decât N. Astfel,
adâncimea este identică pentru
MUX3 si MUX4
MUX5, MUX6, MUX7 și MUX8
etc
Cunoscând dimensiunea EMUX (14 tranzistoare) și adâncimea acestuia (3 porți între selecție și ieșire, respectiv
2 porți între intrări și ieșire) se poate calcula dimensiunea și adâncimea cu precizie pentru un MUXN:
numărul de tranzistoare 𝑇=14⋅𝐸T=14⋅E
adâncimea 𝐴=2⋅𝐷+1
Multiplexorul cu Intrări Multi-Bit
Se pune problema selecției între semnale multi-bit. Această situație este de exemplu întâlnită atunci când, în
structura unui procesor x86, se selectează între diverse semnale interne de 32 de biți în cadrul circuitelor
artimetico-logice.
O selecție între două semnale de intrare A, B, de M biți fiecare, astfel încât ieșirea Q are de asemenea M biți, se
realizează prin M multiplexoare elementare. Fiecare din aceste multiplexoare elementare generează un bit i al
ieșirii Q, notat 𝑄𝑖Qi, selectând între bitul i al A și bitul i al B, notate 𝐴𝑖Ai respectiv 𝐵𝑖Bi. Schema de circuit pentru
un multiplexor cu semnale de intrare de 4 biți fiecare este următoarea:
Dorim să analizăm dimensiunea E și adâncimea D ale multiplexorului (ca număr de multiplexoare elementare,
respectiv număr de straturi de multiplexoare elementare) în funcție de numărul de biți M al intrărilor și ieșirii.
Folosim observația că atunci când M se dublează, trebuie să dublăm de asemenea numărul de EMUX, dar
acestea sunt așezate pe un singur strat. Prin urmare:
𝐸=𝑀E=M, prin urmare clasa de complexitate a multiplexorului cu 2 intrări de M biți este 𝑂(𝑀)O(M)
𝐷=1D=1 indiferent de M, prin urmare clasa de complexitate a adâncimii multiplexorului cu 2 intrări de M biți
este 𝑂(1)O(1)
Dacă analizăm cazul general al unui multiplexor cu N intrări de M biți fiecare, folosind analiza de mai sus și cea
legată de multiplexorul cu intrări multiple, putem obține clasele de complexitate pentru dimensiunea și
adâncimea circuitului pentru orice N și M:
clasa de complexitate a dimensiunii multiplexorului este 𝑂(𝑁⋅𝑀)O(N⋅M)
clasa de complexitate a adâncimii multiplexorului este 𝑂(𝑙𝑜𝑔2𝑁)O(log2N)
Semi-Sumatorul
Semi-sumatorul (Half-Adder) este circuitul care realizează suma între două numere de un bit. Ieșirea semi-
sumatorului este un număr de 2 biți care semnalează câte dintre intrările semi-sumatorului au valoarea '1' logic.
Tabelul de adevăr al funcției semi-sumatorului este următorul:
A B 𝑄1Q1 𝑄0Q0
000 0
010 1
A B 𝑄1Q1 𝑄0Q0
100 1
111 0
Analizând separat fiecare din cei doi biți ai ieșirii semi-sumatorului, putem imediat deduce faptul că:
𝑄0=𝐴⊕𝐵Q0=A⊕B (A sau-exclusiv B)
𝑄1=𝐴⋅𝐵Q1=A⋅B (A și B)
În mod canonic, cei doi biți ai ieșirii Q sunt denumiți în felul următor:
𝑄0Q0 este denumit S și indică suma parțială de 1 bit a celor două intrări
𝑄1Q1 este denumit C și este semnalul de deplasare (carry) care indică acele situații când valoarea sumei
este prea mare pentru a fi reprezentată corect folosind doar semnalul S
Sumatorul Elementar
Deși semi-sumatorul ne permite sumarea a două numere de 1 bit, acesta nu ne permite sumarea numerelor de
mai mulți biți pentru că nu permite propagarea unui semnal de deplasare. Semi-sumatorul generează semnal
de deplasare (Carry) dar nu accepta semnal de deplasare pe intrare.
Sumatorul elementar (Full-Adder) este un circuit care accepta semnal de deplasare pe intrare și realizează suma
între două semnale de un bit și semnalul de deplasare.
Prin urmare, structura de circuit a sumatorului elementar este bazată pe două semi-sumatoare în modul
următor:
Sumatorul Multi-Bit
În majoritatea cazurilor de utilizare a unui sumator, operanzii sunt numere multi-bit (de exemplu sumarea a doi
operanzi de 32 sau 64 de biți într-un procesor de tip x86). Se poate implementa un sumator multi-bit prin
înlănțuirea mai multor sumatoare elementare, astfel încât fiecare sumator elementar sumează câte un bit din
fiecare operand (biții cu același index) și semnalul de deplasare generat de lanțul de sumatoare elementare
conectate la biții cu index inferior. Iată schema de circuit corespunzătoare unui sumator de 4 biți:
Se poate observa cum semnalele de deplasare (carry) se propagă de la un sumator elementar la următorul, în
cascadă. Această structură este denumită 'ripple-carry adder' datorită acestei propagări cascadate. Carry se
propagă de la sumatorul elementar aferent bitului cel mai puțin semnificativ (bitul 0) către cel aferent bitului
celui mai semnificativ (3 în acest caz).
Rezultatul sumei a două numere de N biți este întotdeauna un număr Q de 𝑁+1N+1 biți, care în cazul
sumatorului este format concatenând semnalele S și semnalul de deplasare generat de sumatorul elementar
aferent biților celor mai semnificativi. În cazul exemplului de mai sus, avem:
𝑄={𝐶4,𝑆3,𝑆2,𝑆1,𝑆0}Q={C4,S3,S2,S1,S0}
În structura de mai sus, avem de asemenea figurată intrarea de carry 𝐶0C0 a sumatorului elementar aferent
biților celor mai nesemnificativi. Putem trata această intrare în două feluri:
o conectăm la '0' logic, caz in care 𝑄=𝐴+𝐵Q=A+B
o conectăm la '1' logic,, caz in care 𝑄=𝐴+𝐵+1Q=A+B+1
o conectăm la un semnal oarecare, caz în care 𝑄=𝐴+𝐵+𝐶0Q=A+B+C0
Dorim în cele ce urmează să analizăm dimensiunea și adâncimea sumatorului, în funcție de numărul N de biți al
semnalelor de intrare (operanzii sumei). Legat de dimensiune, pornim de la observația că numărul de
sumatoare elementare este întotdeauna egal cu numărul de biți al semnalelor de intrare. Prin urmare, număril
E de sumatoare elementare este
𝐸=𝑁E=N, prin urmare clasa de complexitate a dimensiunii sumatorului este 𝑂(𝑁)O(N)
Adâncimea circuitului de sumare poate fi determinată observând propagarea semnalului de deplasare. Astfel,
acesta este generat inițial de sumatorul elementar corespunzător biților celor mai puțini semnificativi, apoi
continuă parcurgând toate celelalte sumatoare elementare. Astfel, adâncimea D ca număr de sumatoare
elementare este
𝐷=𝑁D=N, prin urmare clasa de complexitate a dimensiunii sumatorului este tot 𝑂(𝑁)O(N)
Putem atfel observa că atât dimensiunea cât si adâncimea, deci timpul de propagare prin sumator, cresc direct
proporțional cu numărul de biți al operanzilor.
Scăzătorul
Operația complementară sumării este scăderea. În aritmetica binară, scăderea B din A reprezintă sumarea lui A
cu complementul față de 2 a lui B. Complementul este format inversând B bit cu bit și sumând apoi cu 1. Prin
urmare, funcția de scădere poate fi exprimată în felul următor:
𝐴−𝐵=𝐴+𝐵′+1A−B=A+B′+1 unde 𝐵′B′ este inversul bit cu bit al lui B
Se observă faptul că pentru a reprezenta numerele de la 0 la N-1 (în total N valori) avem nevoie în reprezentare
One-Hot de N biți, spre deosebire de reprezentare binară obișnuită unde avem nevoie de 𝑙𝑜𝑔2𝑁log2N biți. Prin
urmare un decodor cu N biți de intrare are întotdeauna 2𝑁2N biți de ieșire.
Prin urmare, decodorul este în același timp un circuit de transformare între reprezentare binară și
reprezentare One-Hot, și un circuit aritmetic de exponențiere.
Decodorul Elementar
Începem discuția legată de implementarea decodorului tratând cea mai simplă formă de decodor, cel cu 1 bit
de intrare. Numim acest circuit decodorul elementar (EDCD). Conform relației între numărul de biți ai intrării și
ieșirii, decodorul elementar are 21=221=2 biți de ieșire. Tabelul de adevăr asociat este:
I 𝑄1Q1 𝑄0Q0
00 1
11 0
Separând biții ieșirii, putem calcula funcțiile care transformă intrare în fiecare din biții ieșirii, anume 𝑄0=𝐼′Q0=I
′ și 𝑄1=𝐼Q1=I, ceea ce corespunde următoarelor posibile structuri de circuit a EDCD:
Ambele structuri realizează funcția logică dorită. Structura din dreapta are avantajul de a nu oferi o cale directă
(care nu trece prin nicio poartă) între intrare și ieșire. Această proprietate este de dorit datorită unor
considerente de integritate a semnalului în circuit.
Decodorul Multi-Bit
Pentru a realiza o implementare a decodorului cu mai mult de 1 bit la intrare, analizăm tabelul de adevăr al
acestuia și observăm următoarea proprietate: fiecare din biții de la ieșire corespunde unui produs (minterm) al
biților de la intrare. Astfel, pentru exemplul de decodor cu 3 biți de intrare (x, y și z), avem următoarele relații
între biții de ieșire si cei de intrare:
𝑦0=𝑥′0⋅𝑥′1⋅𝑥′2y0=x0′⋅x1′⋅x2′
𝑦1=𝑥0⋅𝑥′1⋅𝑥′2y1=x0⋅x1′⋅x2′
𝑦2=𝑥′0⋅𝑥1⋅𝑥′2y2=x0′⋅x1⋅x2′
𝑦3=𝑥0⋅𝑥1⋅𝑥′2y3=x0⋅x1⋅x2′
𝑦4=𝑥′0⋅𝑥′1⋅𝑥2y4=x0′⋅x1′⋅x2
𝑦5=𝑥0⋅𝑥′1⋅𝑥2y5=x0⋅x1′⋅x2
𝑦6=𝑥′0⋅𝑥1⋅𝑥2y6=x0′⋅x1⋅x2
𝑦7=𝑥0⋅𝑥1⋅𝑥2y7=x0⋅x1⋅x2
Astfel, dacă avem la dispoziție 𝑥0,𝑥1,𝑥2,𝑥′0,𝑥′1,𝑥′2x0,x1,x2,x0′,x1′,x2′ putem implementa fiecare din ieșirile
decodorului printr-o poartă ȘI cu 3 intrări. În mod echivalent, putem implementa ieșirile decodorului cu oricâți
biți de intrare:
Observație: porțile ȘI cu mai mult de 3 intrări vor fi intotdeauna înlocuite cu arbori de porți ȘI cu 2 intrări.
Dorim în continuare să analizăm aria și adâncimea decodorului ca funcție a numărului N de biți de intrare.
Începem cu aria, observând faptul că în structura decodorului avem câte un decodor elementar conectat la
fiecare bit de intrare, prin urmare vom avea N circuite EDCD în structura unui decodor multi-bit, deci 2N
inversoare. De asemenea, pentru a genera fiecare bit de ieșire, avem o poartă ȘI cu N intrări, care poate fi
implementată folosind un arbore de porți ȘI cu 2 intrări, ce utilizează N-1 porți. Dat fiind că avem 2𝑁2N biți de
ieșire, rezultă că aria decodorului este în clasa de complexitate 𝑂(𝑁⋅2𝑁)O(N⋅2N).
Adâncimea circuitului este dată majoritar de arborele de porți ȘI de la intrare, a cărui adâncime
este 𝑙𝑜𝑔2𝑁log2N, prin urmare adâncimea este în clasa de complexitate 𝑂(𝑙𝑜𝑔2𝑁)O(log2N). Se observă astfel că
în cazul decodorului, creșterea numărului de intrări, respectiv ieșiri ne afectează în principal din punctul de
vedere al ariei, care crește mult mai rapid decât adâncimea circuitului atunci când N crește.
Circuitul Latch
Stabilitatea Buclelor de Reacție
Circuitele combinaționale, conform definițiilor date, nu conțin bucle de reacție, iar valorile ieșirilor sunt
întotdeauna generate din valorile intrărilor la orice moment de timp. Conform acestei definiții, CLC nu au
memorie, deci nu pot stoca o valoare logică oarecare pe ieșiri după ce valorile intrărilor s-au schimbat.
Ce se întâmplă totuși atunci când introducem o buclă de reacție într-un circuit digital? Vom analiza cel mai
simplu caz, anume o buclă de reacție între ieșirea și intrarea unui circuit format doar din inversoare:
Prin urmare o buclă de reacție închisă peste un număr par de inversoare produce o formă primitivă de
memorare, întrucât circuitul își menține starea un timp nedefinit. Intuim o posibilitate de a folosi această buclă
pentru implementarea unui circuit practic de memorare, dar avem următoarele probleme:
valoarea logică a fiecărui punct din circuit nu poate fi determinată a priori, stabilizarea pe 0 sau 1 logic
este dată de efecte fizice în circuit (deplasări de sarcină, câmp electromagnetic, efecte cuantice)
nu putem impune modificarea stării circuitului astfel încât să determinăm ce valoare se memorează
Prin urmare o buclă de reacție este necesară, dar nu suficientă pentru realizarea unui circuit practic de
memorare.
Latch RS
Pornind de la ideea de a folosi o buclă de reacție peste două inversoare, extindem circuitul pentru a permite
controlarea valorii logice a fiecărui punct din structura acestuia. Astfel, primul pas este de a încerca forțarea
valorii ieșirii Q din circuitul de mai jos prin controlarea (on/off) a unui comutator S0 conectat între Q' și masă.
Atunci când S0 este închis, 𝑄′=0Q′=0 și 𝑄=1Q=1, deci putem aduce forțat Q la valoarea 1 logic închizând S0.
Când S0 este deschis, circuitul va memora valoarea forțată anterior. Totuși, această soluție funcționează doar
pe jumătate, întrucât nu putem aduce Q la valoarea 0 logic. Pentru o soluție completă, adăugăm încă un
comutator, S1, circuitului:
Cu această schemă de circuit, Q este forțat la 1 logic când S0 este închis, la 0 logic când S1 este închis, și
menține valoarea lui Q atunci când S0 și S1 sunt ambele deschise. O situație invalidă ce duce la destabilizarea
circuitului este atunci când S0 și S1 sunt închise simultan, forțând valori logice pe Q și Q' incompatibile cu
structura logică a circuitului.
Pentru a avea un circuit practic de memorare, rămâne să implementăm cele două comutatoare folosind logică
digitală. Folosim câte o poartă ȘI pentru a implementa fiecare din cele două comutatoare:
Astfel, S0 și S1 devin intrări de comandă în cele două porți ȘI. Funcția îndeplinită de circuit este ilustrată de
tabelul de adevăr:
S0 S1 Q' Q
0 0 1 1
0 1 0 1
1 0 1 0
1 1 Q' Q
Se observă că Q și Q' reacționează cu întârziere la acțiunea semnalelor S0 și S1, datorită timpului de propagare a
semnalului prin porțile circuitului. Se observă de asemenea că aplicarea unui 0 logic pe S1 duce la stabilizarea
lui Q pe valoarea 0 logic, în timp ce aplicarea unui 0 logic pe S0 duce la stabilizarea lui Q pe valoarea 1 logic.
Datorită acestui comportament, redenumim S0 și S1 în S (Set), respectiv R (Reset).
Prin combinarea porților ȘI cu inversoarele rezultă următoarea schemă echivalentă cu porți ȘI-NU:
Circuitul Bistabil
Bistabilul
Deși putem memora folosind circuitul latch D sau RS, acestea două sunt circuite transparente, ceea ce înseamnă
că în anumite situații se comportă ca circuitele combinaționale, producând valorile logice ale ieșirilor direct din
valorile logice ale intrărilor. Această proprietate este uneori nedezirabilă, pentru că permite propagarea
necontrolată a anumitor valori logice prin circuit.
Vom încerca să producem un circuit netransparent folosind circuite latch D. Acestea sunt transparente atunci
când semnalul de intrare En este 1 logic. Prin urmare, următorul circuit este netransparent:
În acest montaj, atunci când Clock este 1, primul latch (denumit Master) este transparent, dar al doilea
(denumit Slave) nu este. Atunci când Clock este 0, situația este inversată. Pentru ambele valori ale lui Clock,
schema nu este transparentă complet. Pentru ca valoarea lui D să fie memorată la ieșirea Q, este necesar ca
Clock să fie 1 (pentru propagare prin Master) și apoi Clock să devină 0 (pentru propagare prin Slave), deci este
necesar un front negativ al semnalului Clock. Acest circuit este denumit bistabil (Flip-Flop în engleză).
O colecție de bistabile ce stochează biții unui semnal multi-bit este denumit registru. Vom denumi circuit
secvențial orice circuit care include bistabile și, opțional, circuite combinaționale.
Parametri de Propagare
Pentru funcționarea corectă a bistabilului este nevoie ca anumite relații în timp să fie respectate de semnalele
de date și control ale circuitului. Aceste relații sunt necesare datorită structurii circuitului, și sunt următoarele:
Timpul de set-up 𝑇𝑆𝑈TSU – perioada de timp, înainte de frontul activ al ceasului, când valoarea lui D trebuie să
rămână constantă. 𝑇𝑆𝑈TSU este egal cu timpul de propagare prin latch-ul Master și este necesar pentru ca
datele prezentate la intrare bistabilului să aibă timp să ajungă la intrarea circuitului latch Slave înainte de
schimbarea valorii semnalului de ceas. Este întotdeauna pozitiv.
Timpul de hold 𝑇𝐻TH – perioada de timp, după frontul activ al ceasului, când valoarea intrării D trebuie să
rămână constantă. 𝑇𝐻TH poate fi pozitiv sau negativ, și este cauzat de propagarea ceasului către cele două
circuite latch. În particular, este cauzat de faptul că semnalul de ceas ajunge mai devreme la unul din circuitele
latch decât la celălalt, fiind astfel posibil ca modificarea valorii lui D să se propage mai rapid decât frontul
ceasului până la intrarea Slave, cauzând un comportament nedorit.
Timpul clock-to-out 𝑇𝐶𝑂TCO – perioada de timp necesară pentru ca valoarea Q să se actualizeze după frontul
activ al ceasului. Întotdeauna pozitiv și egal cu timpul de propagare prin latch-ul slave:
Semnale de control și Tipuri de bistabil
Bistabilul poate avea semnale suplimentare de control:
Enable - dacă acest semnal este prezent în structura bistabilului și este activ, bistabilul memorează
valoarea intrării D la fiecare front activ al ceasului. Dacă semnalul Enable este inactiv, bistabilul ignoră
orice modificări ale semnalului D, păstrând valoarea ieșirii Q.
Set - activarea acestui semnal forțează ieșirea Q a bistabilului la valoarea 1 logic. Dacă semnalul Set este
sincron, atunci el are efect la următorul front activ al ceasului după activarea Set. Dacă semnalul Set este
asincron, efectul este imediat.
Reset - similar cu Set, dar efectul este de forțare a ieșirii bistabilului în 0 logic.
Funcționarea bistabilului
Mai jos avem forme de undă ce prezintă funcționarea unui bistabil de tip
D sensibil pe frontul pozitiv al ceasului și a unui bistabil de tip D sensibil
pe frontul negativ al ceasului.
Functionarea FD(A)R
Analiza Temporală
Parametri de Propagare
Un circuit secvențial este orice circuit care include în structura sa minim un bistabil. Putem reprezenta in mod
generic structura unui circuit secvențial ca în figura de mai jos.
Din constrângerile impuse de bistabil ( 𝑇𝑆𝑈TSU, 𝑇𝐶𝑂TCO ) și timpii de propagare prin circuitele combinaționale,
putem calcula proprietăți importante ale circuitelor secvențiale, cum ar fi frecvența maximă a semnalului de
ceas.
Să analizăm următorul circuit secvențial, reprezentat prin schema sa croncretă:
În acest circuit avem un registru format din N bistabile, și o buclă de semnal de la ieșirea bistabilelor la intrarea
lor, printr-un circuit combinațional. În acest exemplu, circuitul combinațional realizează incrementare și timpul
de propagare prin acesta este 𝑇𝐶𝐿𝐶TCLC. Perioada minimă de operare a acestui circuit este dată de relația:
𝑇𝑚𝑖𝑛𝐶𝐿𝐾=𝑇𝐶𝑂+𝑇𝐶𝐿𝐶+𝑇𝑆𝑈TCLKmin=TCO+TCLC+TSU
Dacă semnalul de ceas are o frecvență mai mare de atât, nu este suficient timp între două fronturi consecutive
de ceas pentru propagarea semnalului de la ieșirea bistabilului, prin incrementator, înapoi la intrarea
bistabilului, și stabilizarea acestui semnal de la intrare inainte de fereastra definită de timpul de set-up. Prin
urmare la frecvențe mai mari condiția de set-up a bistabilului va fi incălcată iar circuitul nu va funcționa corect.
Aplicație: Setul de Registre
Definitie si structura setului de registre
Setul de registre este un circuit secvențial și o componentă a majorității procesoarelor moderne. Acesta reprezintă
o colecție de registre ce pot stoca variabile locale de program. Din setul de registre se pot citi uzual minim două
valori simultan (cei 2 operanzi ai unei instrucțiuni) iar în același timp poate fi scris un rezultat. Parametrii
importanți din punct de vedere funcțional sunt:
R - numărul de registre din setul de registre (pentru majoritatea procesoarelor moderne RISC, R este 32
sau 64)
L - numărul de biți ai fiecărui registru (procesoarele moderne folosesc registre de 64 de biți)
P - numărul de porturi de citire (câte din registre pot fi citite simultan)
Structura internă a unui set de registre este ilustrată în figura următoare. Se observă folosirea unui decodor
împreună cu o porțile ȘI pentru a genera un semnal enable pentru fiecare registru. Astfel, semnalul enable al
fiecărui registru este 1 logic doar dacă enable de scriere global este 1 logic și adresa de scriere este egală cu
indexul registrului.
Citirea se face prin atâtea multiplexoare câte porturi avem. Multiplexoarele selectează registrul dorit, în funcție
de adresa de citire a portului respectiv.
Bistabilul Toggle
Bistabilul Toggle
Bistabilul Toggle este un circuit care schimbă valoarea logică a ieșirii sale
la fiecare front activ de ceas, dacă valoarea intrării T este 1 logic:
Numărătorul
Numărătorul
Numărătorul este circuitul care produce o secvență crescătoare de valori pe ieșirea sa. Valorile se
incrementează la fiecare front activ al casului. Structura internă a numărătorului de 4 biți este ilustrată mai jos:
Ieșirea Q de 4 biți este trecută printr-un circuit de incrementare și rezultatul este plasat la intrarea registrului,
care va memora valoarea incrementată la următorul front activ de ceas. Putem realiza într-un mod similar
numărătoare de orice număr N de biți. Valorea ieșirii Q se va incrementa la fiecare front activ de ceas.
Numărătorul cu Enable
În anumite aplicații este de dorit ca numărarea să poată fi oprită o perioadă de timp. În astfel de situații este util
numărătorul cu Enable, care este construit din bistabile cu Enable (FDE) conform figurii de mai jos:
Atunci când INC_EN este 1 logic, la fiecare front activ de ceas bistabilele memorează valoarea prezentă pe
intrările lor, iar valoarea ieșirii Q se va incrementa. Dacă INC_EN este 0 logic, atunci bistabilele nu memorează
valoarea intrării ci păstrează nemodificată valoarea anterioară de ieșire, astfel încât Q rămâne stabil, până când
INC_EN redevine 1 logic.
Numărătorul cu Preload
În multe aplicații dorim să putem inițializa numărătorul la o valoare oarecare, apoi să numărăm pornind de la
acea valoare. În aceste cazuri putem folosi structura numărătorului cu preload, ilustrată în figura de mai jos:
Observăm elementele unui numărător obisnuit, registrul și incrementatorul de N biți. În plus, apare un
multiplexor care dă semnalului D valoarea PRELOAD_VALUE atunci când PRELOAD_EN este 1 logic. Atunci când
PRELOAD_EN este 0 logic, semnalul D ia valoarea semnalului Q_INC, adică valoarea ieșirii, plus 1.
Prima soluție propusă pentru obținerea unui semnal de ceas cu frecvență mică din unul cu frecvență mare este
să folosim proprietatea observată în figura de mai jos:
Fiecare din biții din ieșirea numărătorului este un semnal periodic dreptunghiular și are o perioadă de 2 ori mai
are decât bitul cu indexul imediat mai mic. Bitul 0 are o perioadă de 2 ori mai are decât semnalul de ceas. Astfel,
perioada bitului cu indexul N din ieșirea numărătorului este dată de relația:
𝑇𝑁=2𝑁+1⋅𝑇𝐶𝐿𝐾TN=2N+1⋅TCLK
Prin urmare, putem, dacă aplicăm un semnal de 100 MHz la intrarea de ceas a numărătorului, vom obține un
semnal de 50 MHz pe bitul 0 al ieșirii, 25 MHz pe bitul 1, etc. Observăm astfel că putem genera semnalul de
ceas VGA de 50 MHz dar nu putem genera semnalul de ceas de 1 Hz folosind exclusiv un numărător pentru că
nu există o valoarea întreagă pentru N care să producă rezultatul dorit în ecuația de mai sus, pornind de la un
ceas de intrare de 100 MHz.
Structura divizorului este formată din circuite prezentate anterior. Formele de undă din dreapta prezintă
comportamentul diverselor semnale interne atunci când F este egal cu 2, respectiv 1. Se observă că perioada
ceasului de ieșire este de 6 ori mai mare decât a ceasului de intrare atunci când F este 2, și de 4 ori mai mare
atunci când F este 1. Relația generală între frecvențele semnalelor de ceas de intrare, respectiv ieșire, pentru
acest circuit, este:
𝑇𝐶𝐿𝐾_𝑂𝑈𝑇=2(𝑁+1)𝑇𝐶𝐿𝐾_𝐼𝑁TCLK_OUT=2(N+1)TCLK_IN
𝐹𝐶𝐿𝐾_𝑂𝑈𝑇=12(𝑁+1)𝐹𝐶𝐿𝐾_𝐼𝑁FCLK_OUT=12(N+1)FCLK_IN
Conform acestor relații, dacă dorm să obținem un semnal de ceas cu frecvența de 1 Hz din unul cu frecvența de
100 MHz, valoarea lui F trebuie să fie 49.999.999, ceea ce impune folosirea unui numărător de 26 de biți.
Nucleu de Procesor
Un procesor foarte simplu poate fi alcătuit din circuitele deja discutate: circuite combinaționale pentru
implementarea ALU, bistabilul și multiplexorul / decodorul pentru implementarea setului de
registre, numărătorul pentru implementarea PC. Vom construi în această lecție un nucleu simplu de procesor
RISC (Reduced Instruction Set Computer), de tip Harvard (magistrale separate pentru program și date), capabil
să execute 8 instrucțiuni simple pe operanzi de 8 biți:
ADD Rd, Ra, Rb - suma Ra + Rb, rezultatul fiind plasat în registrul Rd
SUB Rd, Ra, Rb - diferența Ra - Rb, rezultatul fiind plasat în registrul Rd
AND Rd, Ra, Rb - ȘI logic pe biți între Ra și Rb, cu rezultatul în Rd
OR Rd, Ra, Rb - SAU logic pe biți între Ra și Rb, cu rezultatul în Rd
JMPZ Rb, Ra - salt condiționat de valoarea zero a registrului Rb; saltul se face la adresa conținută în Ra
MOV Rd, Ra - copierea valorii din Ra în Rd
LOAD Rd, Ra - copiere din memorie de la adresa conținută de Ra în registrul Rd
SAVE Rb, Ra - copiere din registrul Rb în memorie la adresa conținută de Ra
Instrucțiunile operează pe 4 registre de 8 biți, și sunt cuvinte de 9 biți formate din:
3 biți codul instrucțiunii
2 biți adresa registrului Rd
2 biți adresa registrului Ra
2 biți adresa registrului Rb
Folosind aceste instrucțiuni puteți implementa orice program, deși viteza de execuție a sa va fi evident mult mai
mică decât a unui procesor x86 dar fiind setul foarte mic de instrucțiuni. Altfel spus, acest procesor este Turing-
complet.
Pentru a putea realiza funcția definită de noi, procesorul va avea următoarele interfețe cu exteriorul, definite ca
funcționalitate, număr de biți, și direcție relativ la procesor (intrare în procesor sau ieșire din procesor):
Interfață de citire din memoria de program
o semnal de adresă - 8 biți, ieșire
o semnal de date citite - 9 biți, intrare
Interfață de scriere/citire în/din memoria de date
o semnal de adresă - 8 biți, ieșire
o semnal de selecție scriere sau citire - 1 bit, ieșire
o semnal de date pentru scriere - 8 biți, ieșire
o semnal de date citite - 8 biți, intrare
Vom vedea în cele ce urmează cum arată structura internă a acestuia și cum funcționează aceasta, în detaliu.
https://wiki.dcae.pub.ro/index.php/CID_Aplicatii_1
https://wiki.dcae.pub.ro/index.php/CID_Aplicatii_2
https://wiki.dcae.pub.ro/index.php/CID_Aplicatii_3
https://curs.upb.ro/mod/url/view.php?id=200583
https://curs.upb.ro/mod/url/view.php?id=200585
https://curs.upb.ro/mod/url/view.php?id=200591
https://curs.upb.ro/mod/url/view.php?id=200607