Sunteți pe pagina 1din 505

Damian IMBREA

CIRCUITE LOGICE
SECVENÚIALE SINCRONE

Editura “Politehnium” Iaşi


2013
Damian IMBREA

CIRCUITE LOGICE
SECVENÚIALE SINCRONE

Editura “Politehnium” Iaşi


2013
CUPRINS

Introducere .................................................................................................... 1
Cap.1 Celule elementare de memorie ......................................................... 7
1.1 Latch-uri ......................................................................................... 7
1.2 Bistabili (Flip-Flops) .................................................................... 16
1.2.1 Bistabili D .............................................................................. 17
1.2.2 Bistabili JK ............................................................................. 25
1.2.3 Scan Flip-Flops ....................................................................... 29
1.2.4 Monostabili şi astabili ............................................................. 33
Cap.2 Sinteza şi analiza maşinilor secvenÛiale ......................................... 39
2.1 Generalit|Ûi ................................................................................... 39
2.2 Exemplu de sintez| şi analiz| ........................................................ 42
2.3 Aspecte de proiectare a maşinilor secvenÛiale .............................. 58
2.3.1 Tratarea intr|rilor asincrone ................................................... 58
2.3.2 Clock skew .............................................................................. 62
2.3.3 Hazardul ................................................................................. 65
2.4 Probleme rezolvate ........................................................................ 67
2.5 Probleme propuse spre rezolvare ................................................ 120
Cap.3 Num|r|toare .................................................................................. 127
3.1 Generalit|Ûi ................................................................................. 127
3.2 Num|r|toare binare ..................................................................... 133
3.2.1 Num|r|toare binare modulo 2n ............................................ 133
3.2.2 Num|r|toare binare modulo p (p … 2n) ................................. 141
3.3 Num|r|toare zecimale ................................................................ 150
3.3.1 Num|r|toare zecimale modulo 10n ...................................... 150
3.3.2 Num|r|toare zecimale modulo p (p … 10n) .......................... 153
3.4 Num|r|toare în baze de numeraÛie oarecare ............................... 155
3.5 Divizoare de frecvenÛ| ................................................................ 156
3.6 Probleme rezolvate ..................................................................... 160
3.7 Probleme propuse spre rezolvare ................................................ 189
Cap.4 Registre .......................................................................................... 193
4.1 Moduri de operare ale registrelor ............................................... 193
4.2 AplicaÛii cu registre .................................................................... 197
4.2.1 Conversii de date serie-paralel şi paralel-serie .................... 197
4.2.2 Memorii FIFO şi LIFO ......................................................... 199
4.2.3 Generatoare de secvenÛe pseudo-aleatoare ........................... 201
4.2.4 Analiza de semn|tur| ........................................................... 207
4.2.5 Scanarea serie ....................................................................... 211
4.2.6 Arhitecturi pipeline .............................................................. 212
4.3 Probleme rezolvate ...................................................................... 215
4.4 Probleme propuse spre rezolvare ................................................ 233
Cap.5 Circuite de memorie şi logic| programabil| .............................. 237
5.1 Generalit|Ûi ................................................................................. 237
5.2 Memorii ROM, PROM, EPROM, EEPROM ............................. 243
5.3 Memorii RAM ............................................................................ 251
5.3.1 Circuite SRAM .................................................................... 251
5.3.2 Circuite DRAM .................................................................... 274
5.4 Circuite logice programabile ....................................................... 294
5.4.1 Circuite PLA şi PAL ............................................................ 296
5.4.2 CPLD ................................................................................... 300
5.4.3 FPGA ................................................................................... 303
Cap.6 Testarea circuitelor secvenÛiale sincrone .................................... 307
6.1 Proiectarea pentru testabilitate (DFT) ........................................ 308
6.1.1 Analiza testabilit|Ûii ............................................................. 308
6.1.2 Scanarea ............................................................................... 315
6.1.2.1 Reguli scan-design ......................................................... 321
6.1.2.2 Scan-design flow ........................................................... 325
6.1.3 Standardul de scanare IEEE 1149.1 ..................................... 331
6.2 Autotestarea (BIST) .................................................................... 341
6.2.1 Generalit|Ûi .......................................................................... 341
6.2.2 Reguli BIST-design ............................................................. 343
6.2.3 Arhitecturi BIST .................................................................. 344
Cap.7 Proiectarea circuitelor digitale cu Verilog HDL ........................ 351
7.1 Generalit|Ûi ................................................................................. 351
7.2 Digital design flow ..................................................................... 353
7.3 Modelarea şi simularea cu Verilog ............................................. 357
7.3.1 Elemente de baz| ale limbajului Verilog ............................ 357
7.3.1.1 Sistemul de valori logice ............................................. 358
7.3.1.2 Şiruri alfanumerice şi numere constante ..................... 358
7.3.1.3 Tipuri de date ............................................................... 360
7.3.1.4 OperaÛii şi operanzi ...................................................... 363
7.3.1.5 Blocuri begin-end şi fork-join ..................................... 367
7.3.1.6 ConstrucÛii şi bucle ...................................................... 368
7.3.1.7 Controlul timpului şi al evenimentelor ......................... 372
7.3.1.8 Procese şi atribuiri ....................................................... 373
7.3.2 FuncÛii şi task-uri ................................................................. 375
7.3.3 Primitive ............................................................................... 382
7.3.3.1 Primitive predefinite .................................................... 382
7.3.3.2 Primitive definite de utilizator ..................................... 383
7.3.4 Module ................................................................................. 387
7.3.4.1 Conceptul de modul ..................................................... 387
7.3.4.2 Test bench-uri .............................................................. 390
7.3.5 Directive de compilare ......................................................... 398
7.4 Probleme rezolvate ..................................................................... 401
7.5 Probleme propuse spre rezolvare ................................................ 483
Index .......................................................................................................... 493
Bibliografie ............................................................................................... 499
Circuite Logice Secvenþiale Sincrone 1

INTRODUCERE

Circuitele logice secvenþiale sunt alcãtuite din blocuri combinaþionale ºi


din anumite celule, structuri sau topologii bazate pe legãturi de reacþie pozitivã
care genereazã capacitatea de memorare. Aceasta înseamnã cã rãspunsul unui
circuit secvenþial la orice moment de timp depinde nu numai de valorile logice
curente aplicate la intrãri ci ºi de valorile anterioare. Istoricul acestora se
menþine la nivelul circuitului sub forma unor variabile interne de stare. O
reprezentare matematica simplã, care scoate în evidenþã deosebirile
fundamentale dintre cele douã categorii de circuite logice, este ilustratã prin
ecuaþiile urmãtoare. Mãrimile vectoriale notate Out, In, St au semnificaþiile de
rãspuns (ieºire), comandã (intrare) ºi respectiv stare (memorie) la momentul
curent sau prezent; Out+ , St+ reprezintã rãspunsul ºi respectiv starea circuitului
la momente de timp viitoare. Circuitele combinaþionale nu au stare. Literele F,
G ºi H desemneazã funcþii sau expresii logice arbitrare.
Out+ = F(In) - circuit combinaþional (i.1)
Out+ = G(In, St), St+ = H(In, St) - circuit secvenþial (i.2)
Odatã cu trecerea timpului rãspunsurile ºi stãrile viitoare devin rãspunsuri ºi
respectiv stãri curente. Schimbarea vectorului de intrare la un moment dat,
dintr-o stare curentã, determinã valorile viitoare ale rãspunsului ºi stãrii.
Acestea din urmã devin efective dupã un proces tranzitoriu a cãrui duratã ºi
moment de declanºare depind de structura circuitului logic.
Funcþiile care pot fi realizate cu logicã secvenþialã sunt mult mai
complexe decât cele obþinute cu circuite combinaþionale, dar ºi efortul de
calcul necesar în toate etapele de proiectare (modelare, sintezã, analizã, testare)
este considerabil mai mare.
Multe operaþii matematice (adunare, scãdere, comparare, înmulþire) dar ºi alte
funcþii aritmetice-logice pot fi implementate atât în logicã pur combinaþionalã
cât ºi în logicã secvenþialã. Varianta combinaþionalã are de regulã vitezã de
operare mult mai mare în comparaþie cu cea secvenþialã însã ºi consumul de
arie este pe mãsurã.
Majoritatea circuitelor sau sistemelor logice secvenþiale actuale sunt de
tip sincron. Starea acestor circuite se memoreazã în celule elementare de 1 bit,
latch-uri ºi/sau bistabili iar funcþionarea se bazeazã pe unul sau mai multe
2 Introducere

semnale periodice globale de sincronizare sau de ceas. De obicei unul dintre


fronturile semnalului de ceas (tranziþiile L6H sau H6L), numit ºi front activ,
declanºeazã regimurile tranzitorii de schimbare ale rãspunsului ºi stãrii
circuitului secvenþial. Pentru o funcþionare corectã perioada ceasului, adicã
intervalul de timp dintre douã fronturi active consecutive, trebuie sã fie mai
mare decât durata regimurilor tranzitorii dupã care rãspunsul ºi starea ajung la
valori stabile. Fronturile active ale ceasului constituie momentele de referinþã
în raport cu care se definesc valorile curente ºi cele viitoare. Distribuirea
semnalului de ceas cãtre toþi bistabilii se realizeazã cu o reþea logicã (clock
tree) formatã în principal din buffere ºi inversoare. Aceste componente comutã
la fiecare front al ceasului astfel cã puterea disipatã în reþeaua de distribuþie
este importantã, mai ales la frecvenþe mari.
O altã categorie de circuite logice secvenþiale este formatã din cele de tip
asincron. În contrast cu circuitele sincrone, logica secvenþialã asincronã este
alcãtuitã din pãrþi relativ autonome ºi nu necesitã semnale de ceas. Sunt însã
necesare unele semnale de control locale care sã autorizeze operaþiile,
asemãnãtoare cu cele din cadrul unui protocol de transfer al datelor.
Metodele ºi instrumentele software de analizã, modelare, sintezã ºi testare au
un grad de complexitate mare ºi sunt încã în dezvoltare; acestea nu au atins
gradul de maturizare specific proiectãrii circuitelor secvenþiale sincrone.
O ilustrare simplificatã a diferenþelor structurale dintre logica secvenþialã
sincronã ºi cea asincronã este prezentatã în Fig.i.1, în care s-a considerat ca
exemplu o maºinã secvenþialã cu numãr finit de stãri (FSM - Finite State
Machine).

Fig.i.1 FSM: sincron vs. asincron


Circuite Logice Secvenþiale Sincrone 3

Registrul Reg din Fig.i.1a conþine celule elementare de memorie. Legãturile de


reacþie pozitivã care determinã capacitatea de memorare sunt realizate în
interiorul acestor celule. Semnalul de sincronizare Clock menþine starea St
memoratã în registru blocând accesul noilor date furnizate de blocul
combinaþional; accesul datelor ce constituie starea viitoare St+ se realizeazã
periodic, pe intervale scurte de timp, declanºate de fronturile pozitive ale
ceasului Clock. Cu excepþia acestor intervale de timp în care registrul este
transparent se poate spune cã legãturile de reacþie la nivelul blocului
combinaþional sunt întrerupte.
Versiunea asincronã a maºinii secvenþiale din Fig.i.1b nu conþine celule de
memorie bine definite. Blocul Delay conþine elemente de circuit care produc
diferite întârzieri ºi nu are capacitate de memorare. Legãturile de reacþie la
nivelul blocului combinaþional par a fi permanente. Pentru a genera capacitate
de memorare reacþia trebuie sã fie pozitivã. Numãrul de biþi memoraþi este egal
cu numãrul de bucle de reacþie distincte. Funcþia de memorare se realizeazã la
nivelul blocului combinaþional.
O buclã de reacþie pozitivã conþine un numãr arbitrar de porþi logice din
care cele inversoare trebuie sã fie în numãr par. Un exemplu de buclã cu
capacitate de memorare este prezentat în Fig.i.2.

Fig.i.2 Buclã de memorare asincronã


Bucla reþine sau memoreazã oricare dintre valorile logice 0 sau 1 la ieºirea St
atunci când In1In2 = 01. În aceastã situaþie porþile 1 ºi 2 sunt sensibilizate.
Celelalte trei combinaþii, menþinute suficient timp, blocheazã cel puþin una
dintre porþile 1, 2 ºi astfel controleazã sau forþeazã o valoare logicã pe buclã
astfel: In1In2 = 00 Y St = 1, In1In2 = 10 sau 11 Y St = 0. Blocarea oricãrei
porþi poate fi privitã ºi ca o întrerupere temporarã a buclei de reacþie.
Circuitul din Fig.i.2 este unul simplu. Cu structuri asemãnãtoare se
construiesc celulele elementare de memorie denumite latch-uri. Controlul
valorii binare stocate într-un latch se realizeazã pe palierele LOW sau HIGH
ale semnalelor de control Bistabilii sunt celule elementare mai complexe decât
latch-urile ºi sunt componente logice cu adevãrat sincrone, în sensul cã
tranziþiile active ale semnalelor de ceas sunt cele care declanºeazã schimbarea
valorilor stocate. Se spune cã latch-urile sunt sensibile la nivel (level sensitive)
4 Introducere

iar bistabilii sunt sensibili la fronturi sau tranziþii (edge sensitive).


Logica sincronã este un caz particular de logicã asincronã. Se pot face
diverse comparaþii între logica secvenþialã sincronã ºi cea asincronã. O parte
dintre avantajele ºi dezavantajele acestora sunt prezentate în continuare, dupã
anumite criterii.
(1) - clock skew
Acest termen se referã la decalajele în timp dintre momentele la care are ajung
fronturile semnalului global de ceas la bistabili, datoritã cãilor diferite de
propagare prin arborele de ceas. Evident, problemele generate de aceste
decalaje sunt specifice numai circuitelor sincrone. Menþinerea clock skew la
valori mici ºi acceptabile implicã o creºtere a efortului de proiectare a reþelei
de distribuþie a ceasului. Clock skew constituie ºi o limitare a frecvenþei
maxime de ceas. În cazul circuitelor asincrone nu existã semnale globale de
sincronizare ºi nici probleme generate de eventuale decalaje.
(2) - puterea disipatã în regim dinamic
Cea mai importantã componentã a puterii disipate de o poartã logicã în regim
dinamic este datã de relaþia
Pd = f C V2 (i.3)
în care V este o tensiune aproximativ egalã cu tensiunea de alimentare, C este
capacitatea de sarcinã a porþii iar f este frecvenþa de comutare a porþii. În
general f are o valoare mai micã decât frecvenþa semnalului global de ceas în
cazul circuitelor sincrone. Însã în arborelui de distribuþie a ceasului, format în
principal din buffere ºi inversoare, fiecare componentã comutã cu frecvenþa
ceasului iar puterea dinamicã disipatã este considerabilã. S-au dezvoltat tehnici
de reducere a puterii disipate ce au la bazã blocarea ceasului (clock gating) pe
unele ramuri în anumite intervale de timp, cãtre acele blocuri care trebuie doar
sã pãstreze rezultatele în anumite etape de procesare. Economia de putere se
obþine atât în arborele de distribuþie a ceasului cât ºi în blocurile cu activitatea
blocatã de lipsa tranziþiilor ceasului.
Majoritatea tranziþiilor care au loc în structura unui circuit asincron sunt utile,
adicã apar schimbãri de valori logice doar în blocurile implicate în operaþii
curente aflate în desfãºurare. Componentele nefolosite vremelnic sunt de cele
mai multe ori blocate automat, limitându-se astfel risipa de putere în mod
natural, fãrã efort de proiectare suplimentar.
(3) - viteza maximã de operare
În cazul circuitelor sincrone frecvenþa maximã a ceasului trebuie adaptatã la
condiþiile de operare cele mai grele (worst-case) care iau în considerare valorile
minime acceptate pentru tensiunea de alimentare ºi zgomotul de pe liniile de
alimentare, temperaturile extreme, variaþiile procesului tehnologic sau cornerele
tehnologice precum ºi cãile sau porþiunile din circuit care au întârzieri mari
(critice) deºi sunt mai rar utilizate.
Circuite Logice Secvenþiale Sincrone 5

În cazul circuitelor asincrone viteza de operare se modificã dinamic, fiind


guvernatã de valorile medii ale întârzierilor ºi nu de cele maxime. De asemenea,
cãile sau porþiunile de circuit cu întârzieri mai mari, chiar ºi neoptimizate,
afecteazã în micã mãsurã performanþele de vitezã.
(4) - zgomotul generat
Zgomotul generat de circuitele sincrone este concentrat în jurul frecvenþei
semnalului de ceas ºi ale armonicelor acestuia. Circuitele asincrone genereazã
un zgomot cu spectru mai împrãºtiat ºi cu valori mai mici deoarece activitãþile
(tranziþiile) sunt mai puþin corelate între ele.
(5) - efortul de calcul necesar în etapele de proiectare
Indiferent de coplexitatea funcþionalã, proiectarea unui circuit secvenþial
sincron se reduce de multe ori la proiectarea unor blocuri combinaþionale.
Majoritatea instrumentelor software au fost dezvoltate pentru proiectarea
circuitele sincrone iar unele dintre ele nu pot fi utilizate în cazul circuitelor
asincrone. Modelarea sincronã se bazeazã în mare parte pe operaþiile
elementare AND, OR, NOT. De asemenea, prodedurile de testare sunt
asemãnãtoare cu cele dezvoltate pentru blocurile combinaþionale.
Bazele matematice utilizate în proiectarea circuitelor asincrone sunt
considerabil mai sofisticate ºi depind de arhitectura blocurilor particulare sau
de protocoalele implementate la nivelul întregului sistem. Modelele matematice
au la bazã ºi operaþii noi, care includ timpul într-o manierã mult mai
complicatã, cum ar fi secvenþierea ºi venjuncþia. Noile operaþii implicã ºi noi
reguli de calcul, care de asemenea au o complexitate mare în comparaþie cu
regulile algebrei logice. Câteva elemente referitoare la secvenþiere ºi venjuncþie
sunt prezentate în continuare.
Fie ‹x› = ‹x1 x2 ... xn› un set ordonat de variabile logice binare, x i 0 {0, 1} ºi un
moment de timp la care toate coordonatele setului ‹x› au valoare logicã 0, adicã
‹x› = ‹0 0 ... 0›. Setul ‹x› reprezintã o secvenþiere dacã la momentele viitoare,
necorelate între ele, se produc toate tranziþiile 0 _ 1 în ordine strictã de la x1 la
xn , ajungându-se în final la ‹x› = ‹1 1 ... 1›. Orice altã evoluþie spre starea finalã
‹x› = ‹1 1 ... 1› nu reprezintã o secvenþiere.
Venjuncþia este o operaþie logicã dinamicã între douã variabile logice x ºi y,
notatã x p y. Aceastã operaþie este asimetricã sau necomutativã, adicã x p y …
y p x. Tranziþia 0 _ 1 a variabilei x pe fundalul y = 1 ºi în continuare cât timp
variabilele x ºi y rãmân la valoarea logicã 1 implicã x p y = 1. În rest x p y = 0.
O comparaþie utilã dintre operaþia de venjuncþie ºi cea de conjuncþie (AND, v)
a douã variabile logice x ºi y este prezentatã cu ajutorul diagramelor din Fig.i.3,
din care rezultã cã
x v y = (x p y) w ( y p x) (i.4)

unde simbolul w are semnificaþia de operaþie logicã OR.


6 Introducere

Fig.i.3 Conjuncþie vs. Venjuncþie

(6) - influenþa hazardului


Circuitele secvenþiale sincrone eºantioneazã diverse semnale în momentele
determinate de fronturile active ale ceasului. Operaþiile nu sunt afectate de
hazard atât timp cât semnalele eºantionate au valori logice valide ºi stabile în
vecinãtatea fronturilor de ceas.
În cazul circuitelor asincrone orice impuls parazit este considerat o schimbare
validã ºi afectezã funcþionarea. Astfel, este obligatorie proiectarea blocurilor
fãrã hazard, ceea ce constituie o sarcinã suplimentarã ºi de multe ori dificilã.

Pe parcursul întregii cãrþi se trateazã numai probleme referitoare la


circuitele secvenþiale de tip sincron.
Circuite Logice Secvenþiale Sincrone 7

Cap.1 CELULE ELEMENTARE DE MEMORIE

Celulele de bazã care îndeplinesc funcþia de memorare în circuitelor


secvenþiale sincrone sunt latch-urile ºi bistabilii. Latch-ul este cea mai simplã
structurã logicã cu reacþie pozitivã care memoreazã un bit de informaþie,
aceastã celulã este sensibilã la nivelul comenzilor (high, low) cu ajutorul cãrora
se poate modifica bitul memorat. Bistabilul memoreazã tot un singur bit însã
are o structurã mai complexã decât latch-ul ºi este sensibil la frontul sau
tranziþia activã a unui semnal de ceas sau de sincronizare. Valorile logice ale
comenzilor (high, low) prin care se poate schimba valoarea bitului memorat
sunt eºantionate de frontul activ de ceas; în restul timpului semnalul de ceas
blocheazã accesul comenzilor la informaþia stocatã.

1.1 Latch-uri

În Fig.1.1 sunt desenate douã dintre simbolurile utilizate pentru a


reprezenta un latch. Comenzile sau variabilele de intrare prin care se poate
actualiza bitul memorat se numesc S (SET) ºi R (RESET) iar variabila logicã
care desemneazã bitul memorat este ieºirea Q. Ieºirea notatã Q̄ sau QN este
complementul ieºirii Q.

Fig.1.1 Simboluri de latch-uri

Latch-ul din Fig.1.1a (Fig.1.1b) are comenzile SET, RESET active High (Low).
Tabelele din Fig.1.2 descriu funcþionarea doritã pentru latch-urile de mai sus;
8 Cap.1 Celule elementare de m em orie

Q reprezintã valoarea logicã de la momentul curent iar Q+ este o valoare din


viitor care reflectã efectul comenzilor S ºi R aplicate la momentul curent.
Intervalul de timp dintre momentl curent ºi cel viitor, când ieºirile Q, Q̄ ajung
la valori logice stabile (valide), depine de întârzierile cumulate din structura
fizicã a latch-ului.

Figura 1.2

Se doreºte ca orice schimbare a bitului Q datoratã comenzilor aplicate la un


moment dat sã se facã fãrã oscilaþii, adicã funcþionarea latch-ului sã nu fie
afectatã de hazard. De asemenea, atunci când sunt prevãzute ambele ieºiri Q ºi
QN, acestea ar trebui sã ajungã simultan la valorile stabile; acest lucru este de
obicei mai greu de realizat practic cu structuri simple.
În tabelele din Fig.1.2 situaþiile în care ambele comenzi S, R (S̄, R̄) sunt active
simultan, adicã SR = 11 (S̄ R̄ = 00), nu au sens ºi reprezintã ambiguitãþi cu
privire la viitoarea valoare care va fi stocatã în latch. Semnul întrbãrii din
tabele are semnificaþia de ambiguitate. Funcþia de memorare sau de conservare
a informaþiei este realizatã de combinaþia SR = 00 (S̄ R̄ = 11) ºi se poate scrie
matematic astfel:

Q+ = Q, Q̄+ = Q̄ (sau QN+ = QN) (1.1)


Celelalte douã combinaþii ale comenzilor SET, RESET în care una este activã
ºi cealaltã este inactivã la momentul curent, constituie modalitãþile prin care se
poate modifica sau actualiza bitul stocat; activarea comenzii SET are ca efect
Q+ = 1 (înscrierea informaþiei) iar activarea comenzii RESET va produce
ºtergerea informaþiei, adicã Q+ = 0.
Pentru a determina structuri de latch-uri la nivel de portã logicã, se vor
înlocui ambiguitãþile (?) din tabelele de mai sus cu valori logice indiferente (().
Tabelele de adevãr modificate sunt reprezentate în Fig.1.3 împreunã cu
grupãrile de acoperire corespunzãtoare. Se obþin urmãtoarele expresii logice:

Q+ = R + S + Q, QN+ = S + R + QN (1.2)
Circuite Logice Secvenþiale Sincrone 9

Q+ = S̄ R̄ Q, Q̄+ = R̄ S̄ Q̄ (1.3)

Fig.1.3 Tabele de tranziþie a stãrilor

Sistemelor de ecuaþii (1.2) ºi (1.3) le corespund structurile logice reprezentate


în Fig.1.4a ºi respectiv în Fig.1.4b.

Fig.1.4 Latch-uri S R ºi S̄ R̄

Existã câte o singurã buclã de reacþie pozitivã în structura latch-urilor. De


obicei, în literaturã, schemele acestor latch-uri sunt reprezentate ca în Fig.1.5,
în care se creeazã iluzia existenþei a câte douã bucle de reacþie.

Figura 1.5

Modul în care s-au fãcut grupãrile de acoperire în tabelele din Fig.1.3 conduce
la urmãtoarele rezolvãri ale ambiguitãþilor menþionate în tabelele din Fig.1.2:
10 Cap.1 Celule elementare de m em orie

S R = 11 | Q = 0 ºi QN = 0 (1.4)
S̄ R̄ = 00 | Q = 1 ºi Q̄ = 1 (1.5)
Astfel, în cazul în care ambele comenzi sunt active ieºirile latch-ului nu mai
sunt complementare. Luând ca referinþã ieºirea Q, se poate spune cã latch-ul
SR are comanda R prioritarã iar latch-ul S̄ R̄ are comanda S̄ prioritarã.
O altã formã de modelare a funcþionãrii unui latch ºi în general a unui
circuit secvenþial este graful de tranziþie a stãrilor. Un astfel de graf este
compus din noduri ºi din arce orientate. Fiecare nod reprezintã o stare a
circuitului, adicã ansamblul tuturor valorilor logice stocate în celulele
elementare de memorie din circuit. Din fiecare nod pleacã 2k arce, unde k
reprezintã numãrul variabilelor de intrare sau de comandã (control). Un arc
pleacã dintr-un nod sursã (sau stare curentã) ºi ajunge într-un nod destinaþie
(sau stare viitoare); nodurile sursã ºi destinaþie nu trebuie sã fie neapãrat
distincte. În Fig.1.6 sunt desenate grafurile de tranziþie corespunzãtoare latch-
urilor SR ºi S̄ R̄ prezentate anterior.

Fig.1.6 Grafuri de tranziþie a stãrilor

În grafurile din Fig.1.6 arcele sunt reprezentate sau enumerate în mod explicit.
Un astfel de graf este unic pentru un circuit secvenþial dat ºi este echivalentul
formelor canonice de reprezentare a funcþiilor logice combinaþionale. Însã
aceastã formã a grafului nu este practicã atunci când numãrul variabilelor de
control k este mare. Existã mai multe posibilitãþi de reprezentare implicitã a
arcelor, care conduc la simplificãri importante în grafurile de tranziþie a
stãrilor. Aceste reprezentãri implicite au la bazã cumularea într-un singur arc
a mai multor condiþii care determinã aceeaºi tranziþie dintre douã stãri, nu
neapãrat distincte. De exemplu, pentru graful din Fig.1.6a cele trei arce care
pleacã din starea Q = 0 ºi sosesc în starea Q = 0, definite de condiþiile SR = 00,
SR = 01 ºi respectiv SR = 11, pot fi înlocuite cu un singur arc având aceeaºi
Circuite Logice Secvenþiale Sincrone 11

orientare ºi caracterizat prin (S = 0 w R = 1) sau (S̄ + R = 1); operaþia + din


ultima parantezã are semnificaþia de adunare logicã (w, OR).
Un graf de tranziþie a stãrilor cu reprezentare implicitã a arcelor nu este în
general unic pentru un circuit secvenþial dat.
În Fig.1.7 sunt desenate grafuri cu reprezentare implicitã a arcelor, echivalente
cu cele din Fig.1.6.

Fig. 1.7 Grafuri de tranziþie cu arce reprezentate implicit

Tabelele ºi grafurile de tranziþie a stãrilor unui latch oferã o imagine de


funcþionare staticã, în sensul cã se poate determina starea circuitului
considerând o combinaþie oarecare de valori logice la intrãrile SET, RESET
care se pãstreazã suficient timp. Comportarea în regim dinamic a unui latch,
atunci când se aplicã impulsuri (High sau Low) cu durate mici la intrãrile SET,
RESET depinde de structura circuitului ºi de întârzierile componentelor.
În continuare se va considera urmãtorul model de întârziere simplificat, valabil
pentru orice poartã logicã,

trise = 0, tfall = 0, tpLH = tpHL = tp (1.6)


în care tranziþiile semnalelor au duratã nulã iar rãspunsul porþii este întârziat
cu o valoare constantã tp (timp de propagare) faþã de tranziþiile de la intrãrile
ei. În diagramele de timp din Fig.1.8 sunt ilustrate aspecte de funcþionare atât
în regim static cât ºi dinamic pentru latch-ul SR (sau NOR-NOR) din Fig.1.4a.
Cifrele 1, 2, ..., 20 marcheazã pe axa timpului momente succesive t1, t2, ..., t20
la care au loc schimbãri în cel puþin unul din cele patru semnale S, R, Q ºi QN.
Pânã la momentul 1 comenzile S ºi R au determinat starea Q = 1, QN = 0.
Tranziþia L _ H a comenzii R de la momentul 1 determinã tranziþia H ` L a
ieºirii Q de la momentul 2; intervalul [t1 ... t2] reprezintã timpul de propagare
tp al porþii 1. Între momentele 2 ºi 3 ambele comenzi S ºi R sunt active iar
ieºirile latch-ului nu mai sunt complementare, Q = QN = 0.
12 Cap.1 Celule elementare de m em orie

Fig.1.8 Rãspunsul în timp al unui latch SR

Dezactivarea intrãrii R de la momentul 3 produce tranziþia L_H de la momentul


4 în ieºirea Q, cu întârzierea tp. Starea Q = 1, QN = 0 se pãstreazã atât pe
intervalul [t4 ... t5] fiind forþatã de comanda S activã, cât ºi pe intervalul [t5 .. t6]
când ambele comenzi sunt inactive iar latch-ul pãstreazã sau memoreazã efectul
ultimei acþiuni, de înscriere a informaþiei. Pe intervalul [t 6 ... t9] este activ
numai RESET-ul ºi va forþa ºtergerea, adicã starea Q = 0, QN = 1. Întâi are loc
tranziþia H ` L la ieºirea Q, dupã tp faþã de momentul 6 ºi apoi tranziþia L _ H
la ieºirea QN, dupã 2tp faþã de momentul 6. Latch-ul memoreazã în intervalul
[t9 ... t10 ]. Activarea comenzii SET în intervalul [t10 ... t13] determinã înscrierea
informaþiei, ordinea de schimbare a ieºirilor fiind QN, Q iar întârzierile
aferente tp ºi respectiv 2tp faþã de momentul 10. Impulsul care apare în intrarea
R, delimitat de momentele 14 ºi 15, este mai mic ca duratã decât timpul de
propagare al porþilor 1 ºi 2. Aceste impulsuri scurte nu au de obicei energie
suficientã ca sã producã schimbarea stãrii circuitului ºi sunt “filtrate”.
Evoluþia comenzilor S, R în intervalul [t18 ... t20] scoate în evidenþã principalul
dezavantaj al latch-urilor NOR-NOR ºi NAND-NAND (Fig.1.4). Astfel, dupã
ce S ºi R au fost active simultan iar starea circuitului devine Q = QN = 0, nu
se mai poate determina starea viitoare dacã S ºi R se dezactiveazã simultan
(momentul 19). Cu siguranþã se va ajunge dupã momentul 20, considerând mai
departe cã S ºi R rãmân inactive, fie în starea Q = 0, QN = 1 fie în starea
complementarã Q = 1, QN = 0. Aceastã “alegere” este influenþatã de asimetriile
din circuitul fizic ºi se considerã o pierdere a controlului asupra stãrii. O
situaþie asemãnãtoare apare dupã conectarea tensiunii de alimentare a latch-ului
dacã ambele comenzi SET, RESET sunt menþinute inactive; stãrile Q = 0, QN
= 1 ºi Q = 1, QN = 0 sunt echiprobabile, neputându-se determina în care dintre
Circuite Logice Secvenþiale Sincrone 13

ele va ajunge circuitul.


Evitarea sau eliminarea dezavantajului menþionat anterior, referitor la
intervalul [t18 ... t20 ] din Fig.1.8, se face cu ajutorul unei intrãri auxiliare de
control care sã blocheze sau sã autorizeze accesul comenzilor S, R la bitul
memorat. O variantã de latch cu aceastã caracteristicã este desenatã în Fig.1.9.

Fig.1.9 Latch cu intrare de autorizare

Intrarea de autorizare LE (Latch Enable) nu realizeazã nici ºtergerea ºi nici


înscrierea informaþiei. Când LE = 1 latch-ul devine transparent la comenzile
S, R iar funcþionarea este identicã cu aceea a circuitului din Fig.1.5b, cu
excepþia schimbãrii nivelului activ al lui S ºi R din 0 în 1 ºi mãrirea timpilor de
propagare de la S, R la Q, Q̄ cu valoarea t p. Acestea se datoreazã evident
porþilor 3 ºi 4. Când LE = 0 porþile 3, 4 se blocheazã, ieºirile acestora fiind
puse la valoarea logicã 1 indiferent de valorile comenzilor S ºi R; astfel,
structura de bazã formatã din porþile 1, 2 se aflã în regim de memorare.
Semnalul de control LE trebuie sã punã latch-ul în stare de transparenþã numai
pe anumite intervale de timp, cunoscute din proiectare, cãnd S ºi R nu sunt
active simultan. Diagramele din Fig.1.10 constituie un exemplu în acest sens.

Fig.1.10 Funcþionarea în regim dinamic a latch-ului din Fig.1.9


14 Cap.1 Celule elementare de m em orie

Intervalele de transparenþã determinate de nivelul High al semnalului LE


intersecteazã urmãtoarele combinaþii ale comenzilor SR: 10, 01, 01, 10 ºi 00.
Atunci când starea latch-ului se schimbã, prima datã are loc tranziþia L _ H ºi
apoi tranziþia H _ L în perechea Q, Q̄ cu o întârziere de 2tp ºi respectiv 3tp faþã
de momentele la care au loc tranziþiile L _ H în semnalul de autorizare LE.
Intervalele de transparenþã trebuie sã aibã o lungime minimã egalã cu 3tp pentru
a se garanta corectitudinea stãrii viitoare, în concordanþã cu valorile eºantionate
din SET ºi RESET.
Funcþionarea latch-ului din Fig.1.9 se poate modela prin urmãtorul graf de
tranziþie a stãrilor, în care arcele sunt reprezentate în mod implicit.

Fig.1.11 Graful de tranziþie a stãrilor latch-ului din Fig.1.9

Condiþiile care sunt asociate cu arcele pot fi exprimate în mai multe moduri, cu
ajutorul regulilor de calcul din algebra logicã. De asemenea, se pot face diferite
convenþii cu privire la expresiile care definesc arcele din graf. Astfel, se pot
scrie toate expresiile în forma potrivitã care sã reprezinte o singurã valoare
logicã sau de adevãr. În acest mod nu mai este necesarã specificarea explicitã
a valorii comune tuturor arcelor, aceasta putând fi omisã. De exemplu, dacã se
considerã valoarea comunã 1 (TRUE) atunci graful de mai sus se poate
redesena dupã cum urmeazã.

Figura 1.12

Circuitul din Fig.1.9 se poate modifica, prin introducerea unor noi


componente în schemã, astfel încât sã nu fie permise toate cele patru
combinaþii de valori la intrãrile S, R ci numai combinaþiile 01 ºi 10. Aceastã
restricþie este echivalentã cu expresia logicã R = S̄ (sau S = R̄) ºi necesitã
Circuite Logice Secvenþiale Sincrone 15

pentru implementare un singur inversor logic. Circuitul modificat este numit


latch de tip D (delay) ºi este desenat în Fig.1.13.

Fig.1.13 Latch de tip D

Graful de tranziþie a stãrilor latch-ului D se poate obþine fãcând simplificãrile


corespunzãtoare (D = S = R̄) în graful din Fig.1.12. Rezultã

Fig.1.14 Graful de tranziþie a stãrilor latch-ului de tip D

Expresia logicã sau ecuaþia care descrie funcþionarea latch-ului D are forma:
Q+ = LE@Q + LE@D (1.7)
+
Când latch-ul este transparent (LE = 1) se obþine Q = D, adicã ieºirea Q
copiazã intrarea D.
Ecuaþia (1.7) sugereazã posibilitatea de implementare cu ajutorul unui MUX2:

Fig.1.15 Implementarea celulei latch-D cu MUX2


16 Cap.1 Celule elementare de m em orie

Ieºirea Q̄ nu este reprezentatã în Fig.1.15; aceasta se poate extrage din structura


internã a multiplexorului, fãrã sã fie nevoie de porþi logice suplimentare.
Disponibilitatea porþilor de transmisie în tehnologiile CMOS creeazã
oportunitãþi noi de implementare a unui latch D. Douã scheme asemãnãtoare
sunt desenate în Fig.1.16.

Fig.1.16 Latch-uri CMOS de tip D

În schema din Fig.1.16a orice schimbare de nivel logic în semnalul de


autorizare LE se propagã mai întâi la poarta de transmisie TG2 ºi apoi la TG1,
decalajul fiind egal cu întârzierea tp a inversorului 3. Acest lucru evitã
conflictele dintre ieºirea inversorului 2 ºi sursa de semnal D deoarece, dupã
tranziþia pozitivã din LE când ambele porþi de transmisie se aflã simultan în
conducþie aproximativ tp, Q ºi D au valori logice egale.
În schema din Fig.1.16b apar conflicte între ieºirea inversorului 2 ºi sursa de
semnal D, imediat dupã frontul pozitiv din LE, atunci când D … Q (adicã atunci
când starea viitoare este diferitã de starea curentã a latch-ului). Sursa de semnal
D trebuie sã “domine” inversorul 2, ceea ce înseamnã D v Q = D.
Implementarea acestei condiþii este uºor de realizat ºi constã în reducerea
raportului W/L al tranzistoarele din inversorul 2. Acest tip de latch, denumit ºi
keeper, se conectezã de obicei la linii de bus care nu trebuie sã rãmânã în gol
sau flotante; când toate driverele unei linii sunt în stare de înaltã impedanþã, pe
linie se pãstreazã ultima valoare logicã furnizatã de ultimul driver activ. Orice
driver care devine activ dominã keeper-ul liniei iar transmisia datelor nu este
afectatã de prezenþa lui.

1.2 Bistabili (Flip-Flops)

În toate grafurile de tranziþie a stãrilor prezentate în subcap.1.1,


declanºarea tranziþiilor dintre o stare curentã ºi una viitoare începe odatã cu
schimbãrile de valori logice ale variabilelor care definesc expresiile logice
asociate arcelor. Aceastã caracteristicã este specificã circuitelor secvenþiale
asincrone; momentele la care se produc tranziþiile din graf nu se succed, în
Circuite Logice Secvenþiale Sincrone 17

general, la intervale regulate adicã nu sunt periodice.


Grafurile de tranziþie a stãrilor circuitelor secvenþiale sincrone ºi în particular
al bistabililor, nu se deosebesc ca aspect ºi mod de construcþie faþã de cele ale
circuitelor asincrone. Existã însã o deosebire fundamentalã în privinþa
declanºãrii tranziþiilor dintre stãri. Condiþiile asociate arcelor determinã numai
starea viitoare în care va ajunge circuitul nu ºi momentul la care începe
schimbarea stãrii; acesta este stabilit de cãtre semnalul de ceas ºi coincide cu
frontul denumit “activ”. Semnalul de ceas este periodic ºi nu apare în graf în
formã explicitã (prin numele lui) ci în mod implicit, fiind reprezentat de arcele
grafului. De asemenea, fiecare stare din graf are o duratã egalã cu perioada
ceasului sau cu un multiplu întreg al acesteia.

1.2.1 Bistabili D
Douã simboluri de bistabil D ºi tabelele de funcþionare corespunzãtoare
sunt reprezentate în Fig.1.17.

Fig.1.17 Bistabili de tip D

De obicei intrãrile de ceas sunt marcate în simbolul circuitului cu un triunghi.


Convenþia utilizatã pentru indicarea nivelelor active se aplicã ºi semnalelor de
ceas (clock), doar cã se vizeazã frontul pozitiv sau negativ ºi nu nivelul logic
High sau Low. Tabelele alãturate celor douã simboluri din figura de mai sus
descriu funcþionarea urmãtoare:
- la momentul apariþiei frontului activ al ceasului Ck se realizeazã copierea
informaþiei prezentã la intrarea D, adicã Q+ = D;
- în restul timpului, adicã pe palierele High, Low sau frontul inactiv de ceas,
18 Cap.1 Celule elementare de m em orie

starea bistabilului nu se modificã (Q+ = Q).


Copierea în bistabil a informaþiei de la intrarea D existentã strict la
momentul frontului activ de ceas este o operaþie idealã. Circuitele reale
aproximeazã aceastã funcþionare. Tranziþia activã a ceasului nu are loc
instantaneu ci dureazã un anumit interval de timp iar operaþia de copiere sau de
schimbare a stãrii se face cu vitezã finitã. Din aceste motive se impune
restricþia ca valoarea logicã de la intrarea D sã fie stabilã (constantã) într-o
vecinãtate a frontului activ de ceas. Aceastã vecinãtate se compune din douã
intervale de timp, denumite tsetup (înainte de frontul activ) ºi respectiv thold (dupã
frontul activ). Respectarea acestor doi parametri caracteristici bistabilului
garanteazã corectitudinea operaþiei de copiere; altfel funcþionarea va fi afectatã
de erori, pierzându-se controlul asupra stãrii.
Graful de tranziþie a stãrilor unui bistabil D este prezentat în Fig.1.18.

Fig.1.18 Graful de tranziþie a stãrilor bistabilului D

Intrarea D este numitã ºi intrare sincronã de date. Prezenþa hazardului pe


aceastã intrare, cu excepþia vecinãtãþii [tsetup, thold] a frontului activ de ceas, nu
produce erori în funcþionarea bistabilului.
Bistabilul D este o celulã comunã tuturor bibliotecilor de celule digitale
standard, cum sunt porþile logice sau componente ca MUX2, DEMUX2, HA
(Half Adder), FA (Full Adder) etc. O bibliotecã digitalã conþine de obicei, pe
lângã celule simple ca cele ilustrate în Fig.1.17, ºi bistabili D cu structurã mai
complexã care au ºi intrãri de control asincrone de tip SETsau RESET. Aceste
intrãri au rol de iniþializare, adicã de forþare a unei valori Q cunoscute dupã
aplicarea tensiunii de alimentare sau la orice alt moment de timp.
Simboluri de bistabili D cu intrãri de control asincrone sunt desenate în
Fig.1.19. S-au considerat nivele active Low pentru comenzile S, R ºi frontul
pozitiv pentru Ck, însã orice combinaþie este posibilã. Dupã cum se observã din
tabelele de funcþionare ataºate fiecãrui simbol, comenzile asincrone sunt
prioritare în raport cu ceasul Ck ºi cu intrarea sincronã D. Se poate spune însã
cã funcþionarea de bazã este datã de intrãrile Ck ºi D iar comenzile de
iniþializare S ºi R au un rol secundar.
Diagramele de timp din Fig.1.20 ilustreazã, în mod simplificat, comportarea în
regim dinamic al bistabilului D din Fig.1.19c.
Circuite Logice Secvenþiale Sincrone 19

Fig.1.19 Bistabili D cu intrãri de control asincrone

Fig.1.20 Rãspunsul unui D-ff cu intrãri SR asincrone

În diagramele de mai sus s-au marcat fronturile active de ceas cu numerele de


la 1 la 12. Copierea informaþiei de la intrarea sincronã D (Q+ = D) are loc la
20 Cap.1 Celule elementare de m em orie

toate fronturile active ale ceasului cu excepþia fronturilor 1 ºi 4 când sunt active
comenzile S ºi respectiv R. Aceste comenzi asincrone se mai activeazã pe
porþiunile 5-6 ºi 11-12, fãrã sã se suprapunã cu fronturile active de ceas, ºi
produc efectele corespunzãtoare.
Semnalele asincrone SET ºi RESET, indiferent de locul în care sunt
generate (în interiorul sau în exteriorul chip-ului), trebuie sã ajungã la intrãrile
bistabililor fãrã sã fie afectate de hazard. Aceste semnale ca ºi cele de ceas
solicitã un efort de calcul mare în etapele de proiectare.
În cele mai multe cazuri se poate rezolva problema iniþializãrii bistabililor fãrã
sã fie nevoie de intrãri de control asincrone. Soluþia este prezentatã în Fig.1.21.

Fig.1.21 Bistabili D cu iniþializare sincronã

Noile intrãri de date sincrone sunt notate Def ºi reprezintã datele efective care
trebuie copiate în bistabili. Comenzile S̄ ºi R, la fel ca ºi D ef, trebuie sã fie
stabile doar într-o vecinãtate a frontului activ de ceas. Considerând t p
întârzierea porþilor NAND2 ºi NOR2 iar tsetup ºi thold parametrii caracteristici
bistabilului Dff, rezultã cã Def , S̄ ºi R trebuie sã fie stabile pe intervalele de
timp cu duratele
tsetup-ef = tsetup + tp, thold-ef = thold - tp (1.8)
înainte ºi respectiv dupã momentul frontului activ de ceas. Este posibil ca thold-ef
sã aibã valoare negativã, ceea ce înseamnã cã Def, S̄ ºi R pot sã înceapã deja sã
se modifice chiar înainte de frontul activ al semnalului de sincronizare Ck,
dupã cum se aratã în Fig.1.22.

Fig.1.22 Date sincrone - parametrii setup ºi hold


Circuite Logice Secvenþiale Sincrone 21

Datele sincrone Def, S̄ ºi R trebuie sã ajungã la valori logice valide (High, Low)
ºi sã fie stabile cel târziu la momentul 1. De asemenea, ele trebuie sã rãmânã
constante cel puþin pânã la momentul 2, adicã o duratã minimã tsetup + thold.
Ambele comenzi de iniþializare sincrone S ºi R pot fi “adãugate” la un bistabil
D simplu, ca în exemplul urmãtor. S̄ este prioritar faþã de R̄ ºi Def.

Fig.1.23 Bistabil D cu SET ºi RESET sincrone

Cea mai simplã structurã de bistabil D se obþine prin interconectarea a


douã latch-uri dupã principiul master-slave ilustrat în Fig.1.24.

Fig.1.24 Bistabil D master-slave

Pe durata unei perioade a ceasului Ck existã patru situaþii distincte:


1) Ck = 0
Latch-ul Master este blocat (zãvorât) ºi latch-ul Slave este transparent;
2) Frontul pozitiv al ceasului
Începe deblocarea Master-ului ºi blocarea Slave-ului;
3) Ck = 1
Latch-ul Master devine transparent ºi latch-ul Slave se blocheazã;
4) Frontul negativ al ceasului
Începe blocarea Master-ului ºi deblocarea Slave-ului.
Aceste patru faze se repetã cu perioada ceasului, în aceastã ordine. În schema
de mai sus, prin notaþia Ck se aratã cã frontul activ al ceasului este cel negativ.
22 Cap.1 Celule elementare de m em orie

Întradevãr acesta este momentul în care începe schimbarea stãrii Q (ieºirea


bistabilului); starea nouã se transferã din Master în Slave. Înainte de frontul
negativ de ceas latch-ul Master era transparent, adicã QM urmãrea cu o
întârziere de 2tp ... 3tp schimbãrile de nivel logic de la intrarea D. Tranziþiile
pozitive de la D se propagã la QM pe calea formatã din porþile 7 ºi 5, iar cele
negative se propagã pe calea 8, 6, 5. Stocarea în condiþii de siguranþã, fãrã
ambiguitãþi, a stãrii noi în latch-ul Master presupune ca ultima tranziþie la
intrarea D dinaintea frontului negativ de ceas sã aibã loc mai devreme cu cel
puþin 3tp. Rezultã cã tsetup are o valoare aproximativã de 3tp.
Prima tranziþie la intrarea D de dupã frontul negativ de ceas, nu mai poate
schimba informaþia din Master dacã apare dupã blocarea porþilor 7 ºi 8. Rezultã
cã thold are valoarea aproximativã tp .
Frontul pozitiv al ceasului ºi apoi palierul High al acestuia blocheazã accesul
la Slave iar schimbãrile care au loc în Master nu sunt vizibile la ieºirea Q a
bistabilului.
În afarã de parametrii tsetup ºi thold care sunt constrângeri pentru intrãrile
de date sincrone, bistabilii se caracterizeazã ºi prin viteza lor de rãspuns.
Aceasta se apreciazã indirect prin tp Ck - QQ̄ care aratã dupã cât timp de la frontul
activ al ceasului ieºirile Q ºi Q̄ sunt disponibile, adicã au ajuns la noile valori
logice. De asemenea, palierele High ºi Low ale ceasului (cu duratele tHCk ºi
respectiv tLCk) trebuie sã fie suficient de lungi pentru a se asigura duratele
minime de transparenþã ale fiecãrui latch (master ºi slave), dupã cum s-a
menþionat în cadrul analizei regimului dinamic al latch-ului din Fig.1.9 pe baza
diagramelor din Fig.1.10. Bistabilul din Fig.1.24 se poate caracteriza astfel:
t setup $ 3tp, thold $ tp, tp Ck - QQ̄ = 3tp, tHCk $ 3tp, tLCk $ 3tp (1.9)
O altã modalitate de construire a unui bistabil D, tot prin interconectarea
unor latch-uri, este ilustratã în Fig.1.25. Fiecare pereche de porþi 1-2, 3-4 ºi 5-6
formeazã câte un latch NAND-NAND. S-au notat ieºirile porþilor 1, 2, 3 ºi 4
cu o1, o2, o3 ºi respectiv o4. Variabilele o2 ºi o3 au semnificaþie de S̄ ºi
respectiv R̄ pentru latch-ul 5-6. Frontul activ al ceasului Ck este cel pozitiv. În
continuare se face o analizã prin care se demonstreazã cã circuitul opereazã ca
bistabil D. Intrãrile de iniþializare S̄ ºi R̄ sunt asincrone, deoarece indiferent de
Ck ºi D au loc urmãtoarele implicaþii logice:
S̄ R̄ = 01 | o1 = 1, o2 = Ck, o3 = 1 | Q = 1 ºi QN = 0,
S̄ R̄ = 10 | o2 = 1 | Q = 0 ºi QN = 1.
Mai departe se considerã inactive comenzile asincrone, adicã S̄ R̄ = 11. Pe
palierul Ck = Low rezultã o2 = 1 ºi o3 = 1 iar latch-ul 5-6 este blocat (Q+ = Q).
De asemenea, o4 = D̄ iar o1 = D. Presupunând o valoare D oarecare dar stabilã
în vecinãtatea frontului pozitiv de ceas, trecerea de la Ck = Low la Ck = High
va produce schimbãrile o2 = D̄ ºi o3 = D. La rândul lor acestea determinã noua
Circuite Logice Secvenþiale Sincrone 23

stare Q+ = D. Apoi, pe palierul Ck = High, dupã thold de la frontul pozitiv de


ceas, modificãrile la intrarea sincronã D nu mai pot schimba starea circuitului.
Astfel, cu o2 = 0 (ºi o3 = 1) se blocheazã porþile 1 ºi 3, la intrãrile cãrora ajung
variaþiile de la intrarea D; cu o3 = 0 (ºi o2 = 1) se blocheazã poarta 4 ºi
propagarea de la D în restul circuitului. Frontul negativ de ceas care urmeazã
dupã palierul High va readuce o2 ºi o3 la valoarea logicã 1, ceea ce nu are efect
asupra stãrii Q.

Fig.1.25 Bistabil D compus din trei latch-uri

Bistabilul din Fig.1.25 se caracterizeazã prin parametrii urmãtori:


tsetup $ tp4 + tp1 = 2tp
thold $ tp2 + tp3 = 2tp
tp S - QQN = tp1 + tp2 + tp3 = 3tp (1.10)
tp R - QQN = tp2 || tp6 + tp5 = 2tp
tp Ck - QQN = tp2 + tp3 + tp5 + tp6 = 4tp
t HCk $ t p Ck - QQN, tLCk $ tsetup
Parametrul tsetup reprezintã durata necesarã pentru copierea valorii logice de la
intrarea D la o4 ºi la o1. Menþinerea constantã a intrãrii D dupã frontul pozitiv
de ceas este obligatorie pânã când se terminã copierea valorii de la o1 la o2 ºi
apoi de la o2 la o3 (parametrul thold).
Comenzile asincrone nu sunt conectate numai la latch-ul de ieºire 5-6. Dacã s-
ar acþiona numai asupra acestui latch pot sã aparã douã tipuri de funcþionare
defectuoasã. Pe de o parte activarea unei comenzi asincrone nu ar garanta
24 Cap.1 Celule elementare de m em orie

complementaritatea ieºirilor bistabilului iar pe de altã parte, dupã dezactivarea


comenzii asincrone, nu s-ar pãstra efectul asupra stãrii (considerând cã ceasul
nu are tranziþii pozitive). Timpii de propagare de la intrãrile asincrone la
ieºirile bistabilului sunt notaþi în (1.10) cu t p S - QQN ºi tp R - QQN; valorile 3t p ºi
respectiv 2tp reprezintã ºi durata minimã de activare a acestor comenzi.
Structurile de bistabili D în tehnologiile CMOS includ de obicei ºi porþi
de transmisie. De exemplu, cu douã latch-uri ca cel din Fig.1.16a, se poate
obþine urmãtorul bistabil D master-slave.

Fig.1.26 Bistabil D master-slave în tehnologie CMOS

În schema de mai sus se pot introduce comenzi asincrone S, R. Pentru aceasta


inversorul 1 sau 2 ºi unul dintre inversoarele 5 sau 6 trebuie înlocuite cu porþi
NAND2 sau cu NOR2 ca în Fig.1.27.

Fig.1.27 Dff master-slave CMOS cu RESET asincron

O aplicaþie simplã cu un bistabil D este divizorul de frecvenþã cu 2,


prezentat în Fig.1.28 împreunã cu diagramele de timp aferente funcþionãrii.

Fig.1.28 Divizor de frecvenþã cu 2


Circuite Logice Secvenþiale Sincrone 25

Semnalul de intrare în circuit este ceasul Ck iar semnalul de ieºire este Q sau
Q̄. Semnalul de ceas are un anumit factor de umplere (duty cycle), definit ca
raportul tHCk/TCk. Bistabilul comutã la fiecare front pozitiv al ceasului în starea
complementarã celei curente, Q+ = Q̄, astfel cã semnalul de ieºire Q are
perioada TQ = 2T Ck (sau frecvenþa f Q = f Ck/2) ºi un factor de umplere egal cu
0.5, independent de factorul de umplere al semnalului de intrare Ck.
Diagramele de timp din Fig.1.28 corespund funcþionãrii la frecvenþe mici, când
perioada ceasului este mare în comparaþie cu timpul de rãspuns al bistabilului.
La frecvenþe mari de operare diagramele pot sã arate ca în Fig.1.29.

Fig.1.29 Funcþionarea divizorului de frecvenþã cu 2 la frecvenþe mari

Timpii de propagare de la intrarea de ceas la ieºirile Q ºi Q̄ sunt diferiþi între


ei ºi depind în general de sensul în care se modificã ieºirile, de la High spre
Low sau invers. Aceºti timpi sunt de regulã mai mari decât t hold , lucru
confirmat în (1.9) ºi (1.10). Astfel, în schema din Fig.1.28 restricþia asupra
intrãrii D referitoare la thold este respectatã fãrã sã mai fie nevoie de
introducerea unei întârzieri suplimentare între Q̄ ºi D.
Condiþiile tHCk $ tp Ck - QQN, tLCk $ tsetup oferã o valoare pentru frecvenþa maximã
de ceas, f Ck max = 1/(tsetup + tp Ck - QQN ). Dupã cum se observã în Fig.1.29, la
frecvenþe mari factorul de umplere al semnalului de ieºire din divizorul de
frecvenþã cu 2 este diferit de 0.5.

1.2.2 Bistabili JK
Simbolul unui bistabil JK fãrã comenzi asincrone împreunã cu tabela de
funcþionare sunt desenate în Fig.1.30. Tabela aratã valoarea care se va obþine
la ieºirea Q dupã frontul pozitiv de ceas, în funcþie de intrãrile sincrone J ºi K.
În restul timpului, adicã palierele High, Low ºi frontul negativ de ceas, starea
bistabilului nu se modificã (Q+ = Q). Combinaþia JK = 11 produce schimbarea
nivelelor logice la ieºirile Q ºi Q̄ dupã fiecare front activ de ceas, ceea ce
reprezintã operaþia de divizare în frecvenþã cu 2 a semnalului periodic Ck. Cu
excepþia acestei combinaþii, J ºi K au semnificaþii de SET sincron ºi respectiv
26 Cap.1 Celule elementare de m em orie

de RESET sincron. Bistabilul JK este mai complex decât bistabilul D din punct
de vedere funcþional, dar ºi structural.

Fig.1.30 Bistabil de tip JK

Funcþionarea bistabilului JK se poate exprima prin urmãtoarea expresie logicã,


fãcând minimizarea de forma '(() în tabelã:
Q+ = J Q̄ + K̄ Q (1.11)
Relaþia este valabilã numai la frontul activ al ceasului; dacã bistabilul are ºi
intrãri de control asincrone (SET, RESET), acestea se presupun a fi inactive.
Dacã se cunoaºte starea curentã Q ºi se doreºte o anumitã stare viitoare Q+ , se
pot calcula valorile necesare pentru J ºi K în modul urmãtor:
Q = 0 | J = Q+ ºi K = ( (valoare indiferentã)
Q = 1 | J = ( ºi K = Q̄+ (1.12)
Deºi par banale, relaþiile (1.12) stau la baza sintezei circuitelor secvenþiale
sincrone care au în componenþa lor bistabili JK.
Funcþionarea în regim dinamic al unui bistabil JK este ilustratã în
Fig.1.31. Perioada ceasului este mare în comparaþie cu timpii de rãspuns ai
circuitului.

Fig.1.31 Rãspunsul unui JK-ff cu intrãri SR asincrone


Circuite Logice Secvenþiale Sincrone 27

Parametrii caracteristici bistabilului JK sunt aceeaºi ca ai bistabilului D,


ºi anume: restricþiile intrãrilor de date sincrone JK (t setup , t hold), timpii de
rãspuns la comenzile asincrone (tp S - QQ̄ , tp R - QQ̄ ) ºi timpul de rãspuns sincron
(tp Ck - QQ̄ ). Pentru calculul frecvenþei maxime a ceasului se determinã duratele
minime ale palierelor High ºi Low (tHCk, tLCk).
Comparând ecuaþiile de funcþionare sincronã ale bistabililor D ºi JK,
Q+ = D ºi respectiv Q+ = J Q̄ + K̄ Q, prin tranzitivitate rezultã D = J Q̄ + K̄ Q,
ceea ce sugereazã posibilitatea de implementare a bistabilului JK cu un bistabil
D ºi trei porþi logice dupã cum se aratã în figura urmãtoare.

Fig.1.32 Bistabil JK obþinut din bistabil D ºi porþi logice

Aceastã structurã de bistabil JK are performanþe inferioare faþã de bistabilul D


component. Cele douã nivele de porþi AND-OR mãresc tsetup cu 2tp ºi evident
scade frecvenþa maximã de operare a circuitului.
Structura master-slave de bistabil JK din Fig.1.33 are performanþe comparabile
cu ale bistabilului D master-slave; sunt prevãzute ºi comenzile asincrone S̄ R̄.

Fig.1.33 Bistabil JK master-slave

Parametrii caracteristici acestui bistabil JK sunt:


28 Cap.1 Celule elementare de m em orie

tsetup $ 3tp, thold $ tp


tp S̄ - QQ̄ = 5tp, tp R̄ - QQ̄ = 5tp
tp Ck - QQ̄ = 4tp (1.13)
tHCk $ 3tp, tLCk $ 4tp
Comenzile asincrone S̄, R̄ sunt conectate atât la master cât ºi la slave pentru a
se garanta funcþionarea corectã. Valoarea 5tp a timpilor de rãspuns la comenzile
asincrone corespunde cazului cel mai defavorabil, când latch-ul master este
blocat ºi latch-ul slave este transparent. Dupã 2tp de la activarea uneia dintre
comenzile S̄ sau R̄ apare efectul în master, ieºirile acestuia QM ºi Q̄ M ajungând
la valori logice complementare. Acestea se propagã în paralel prin porþile 3 - 4
ºi apoi în serie prin porþile 1 -2 sau 2 - 1, determinând valori complementare la
ieºirile bistabilului. În intervalul de lungime 2tp începând de la activarea unei
comenzi asincrone nu se garanteazã complementaritatea ieºirilor Q ºi Q̄. Dupã
dezactivarea comenzii asincrone, efectul asupra ieºirilor bistabilului se
pãstreazã; dacã se acþioneazã numai asupra latch-ului slave, dupã dezactivarea
comenzii asincrone efectul acesteia nu se pãstreazã deoarece se recopiazã
starea existentã în master.

Celulele divizoare de frecvenþã cu 2 realizate fie cu bistabil JK fie cu


bistabil D pot fi prevãzute cu o intrare auxiliarã de control care sã autorizeze
sau nu operaþia, fãrã sã condiþioneze accesul semnalului de ceas. Aceste celule,
denumite ºi bistabili de tip T (Toggle) sunt desenate în Fig.1.34 împreunã cu
diagrama de timp care ilustreazã modul de funcþionare. Toate tranziþiile ieºirii
Q sunt declanºate de fronturile active de ceas.

Fig.1.34 Bistabili de tip T


Circuite Logice Secvenþiale Sincrone 29

Funcþionarea bistabilului T nu este afectatã de prezenþa hazardului în semnalul


de autorizare T, însã acesta trebuie sã respecte tsetup ºi thold.
Circuitele din Fig.1.35 se aseamãnã ca funcþionare cu bistabilul T, însã prezintã
douã dezavantaje: semnalul de autorizare T nu trebuie sã conþinã hazard ºi
tranziþiile ieºirii Q nu sunt declanºate numai de fronturile ceasului Ck.

Fig.1.35 Circuite cu semnal de ceas condiþionat

1.2.3 Scan Flip-Flops


Circuitele secvenþiale care au o complexitate funcþionalã mare, numite ºi
sisteme digitale, conþin un numãr mare de celule elementare de memorie,
majoritatea fiind bistabili de tip D. Controlul ºi observarea tuturor valorilor
logice stocate în sistem sunt operaþii foarte greu de realizat ºi uneori imposibile
datoritã limitãrii accesului dintre exteriorul ºi interiorul chip-ului la un numãr
relativ mic de pini. Acest lucru înseamnã dificultãþi mari în testarea chip-ului
ºi evident creºteri mari de costuri.
Cel mai eficient mod de rezolvare a problemelor referitoare la controlul ºi
observarea valorilor logice memorate într-un sistem digital constã în înlocuirea
unor bistabili “obiºnuiþi” cu bistabili de tip scan. Acest tip de bistabil are
capacitate de interconectare mai mare decât unul obiºnuit. Toþi bistabilii de tip
scan dintr-un sistem pot fi conectaþi între ei în serie, printr-o comandã logicã,
astfel încât sã formeze un lanþ de scanare. Capetele lanþului sunt legate la doi
pini ai chip-ului, special adãugaþi. Un lanþ de scanare poate sã efectueze
“deplasarea” valorilor logice stocate în celulele componente de la un capãt la
celãlalt. Operaþia este sincronizatã de semnalul de ceas; la fiecare front activ
de ceas, informaþia dintr-un bistabil este copiatã în bistabilul vecin,
corespunzãtor sensului de deplasare.
30 Cap.1 Celule elementare de m em orie

Prin operaþia de scanare (deplasare, shift) se pot controla ºi observa toþi


bistabilii de tip scan. Testabilitatea unui astfel de sistem digital este
considerabil mãritã în comparaþie cu testabilitatea sistemului realizat numai cu
bistabili obiºnuiþi, fãrã capacitate de scanare. În schimb, utilizarea bistabililor
de tip scan determinã creºterea ariei ocupate ºi reducerea frecvenþei maxime de
operare a sistemului.
Structura de bazã a unui bistabil de tip scan, reprezentatã în Fig.1.36,
conþine un MUX2 ºi un bistabil de tip D.

Fig.1.36 Bistabil de tip scan cu o singurã intrare de ceas

Intrarea de selecþie a multiplexorului, N̄/S (normal/scan), stabileºte modul de


operare. În modul normal (N̄/S = 0) în bistabilul D se copiazã la frontul activ
de ceas bitul ND (normal data) iar în modul scanare (N̄/S = 1) se copiazã bitul
SD (scan data). Ceasul Ck este comun ambelor moduri de operare.
Schema de mai sus se poate modifica astfel încât fiecare dintre cele douã
moduri de operare sã aibã propriul semnal de ceas; intrarea de selecþie N̄/S nu
mai este necesarã. Noua structurã de circuit este desenatã în figura urmãtoare.

Fig.1.37 Bistabil de tip scan cu douã intrãri de ceas

Semnalele de ceas NCk ºi SCk nu sunt independente ci trebuie corelate astfel


încât cele douã moduri de operare (normal ºi scanare) sã nu se suprapunã.
Circuite Logice Secvenþiale Sincrone 31

Diagramele de timp desenate în Fig.1.38 scot în evidenþã mai multe detalii


referitoare la condiþiile care trebuie respectate pentru funcþionarea corectã a
circuitului.

Fig.1.38 Funcþionarea SDff (scan-Dff) din Fig.1.37 în regim dinamic

Duratele palierelor High ale ceasurilor NCk ºi SCk, tH NCk ºi respectiv tH SCk, sunt
egale cu tLCk ºi trebuie sã fie suficient de mari pentru a respecta t setup minim
impus de bistabilul D. De asemenea, “intercalarea” ceasurilor NCk-SCk
determinã ºi durata tHCk ,a cãrei valoare minimã este impusã tot de bistabilul D.
Dupã cum se observã în diagramele de funcþionare, intervalele de timp în care
ND = 1 ºi SD = 1 trebuie sã includã intervalele în care NCk = 1 ºi respectiv
SCk = 1. Întârzierile pe cãile de propagare de la NCk, SCk la intrãrile D ºi Ck
ale bistabilului D trebuie controlate astfel încât t p1(2) + tp3 - tp4 > thold.
Schema unui SDff master-slave este prezentatã în Fig.1.39; circuitul are
performanþe superioare faþã de cel din Fig.1.37. Funcþia de multiplexare este
realizatã în structura bistabilului D ºi nu în exteriorul acestuia. În acest mod se
reduce numãrul nivelelor de porþi logice din schemã, rezultând cãi de propagare
mai scurte între intrãrile ºi ieºirile circuitului.
În modul de operare normal SCk = 1; ieºirea porþii 1 este blocatã la 0 iar bitul
SD nu are acces la master. Pe palierul Low al ceasului NCk poarta 3 are ieºirea
blocatã la 0 iar bitul ND se propagã la ieºirea latch-ului master, Q M = ND.
32 Cap.1 Celule elementare de m em orie

Latch-ul slave memoreazã (Q+ = Q) pe bucla formatã din porþile 6 ºi 8; porþile


5 ºi 7 sunt blocate cu ieºirile la 0.
Frontul pozitiv din NCk ºi în continuare palierul High zãvorãºte latch-ul
master; mai întâi se formeazã bucla de reacþie pozitivã (porþile 3-4) ºi apoi se
blocheazã la 0 ieºirea porþii 2. Timpul de propagare al porþii 3 trebuie sã fie
mai mic decât cel al porþii 2 (pentru semnalul NCk).

Fig.1.39 Scan-Dff master-slave

NCk = 1 întrerupe bucla de reacþie 6-8 din slave prin blocarea ieºirii porþii 6 la
0 ºi propagã bitul din master pe calea 5-8 la ieºirea bistabilului (Q = Q̄ M = ND).
Frontul negativ din NCk ºi în continuare palierul Low zãvorãºte latch-ul slave
ºi permite accesul urmãtorului bit ND la master. Timpul de propagare al porþii
6 trebuie sã fie mai mic decât cel al porþii 5 (pentru semnalul NCk).
În regim de scanare NCk = 1 iar funcþionarea este similarã cu aceea din modul
normal, informaþia copiatã în bistabil la frontul pozitiv al ceasului SCk fiind
bitul SD. Timpul de propagare al porþii 3 trebuie sã fie mai mic decât cel al
porþii 1; de asemenea, timpul de propagare al porþii 7 trebuie sã fie mai mic
decât cel al porþii 5 (propagarea se referã doar la semnalul SCk).
Cele douã moduri de operare ale bistabilului nu trebuie sã se suprapunã.
Aceasta se realizeazã prin corelarea adecvatã a semnalelor de ceas NCk ºi SCk.
Bistabilul din Fig.1.39 are parametrii caracteristici urmãtori:
tsetup > tp1(2) + tp4 ( tp1(2) se referã la propagarea SD (ND) prin poarta 1(2))
thold > tp1(2) ( tp1(2) se referã la propagarea SCk (NCk) prin poarta 1(2))
tp SCk-Q = tp5 + tp8, tp NCk-Q = tp5 + tp8 (1.14)
tH SCk (tH NCk) > max{ tp1(2), tp5 + tp8}
tL SCk (tL NCk) > tp1(2) + tp4 ( tp1(2) se referã la propagarea SCk (NCk) prin
poarta 1(2)).
Circuite Logice Secvenþiale Sincrone 33

1.2.4 Monostabili ºi astabili


Bistabilul are douã stãri complementare stabile; în oricare dintre acestea
circuitul poate sã rãmânã oricât de mult timp, dacã nu se activeazã comenzile
prin care se forþeazã trecerea în starea complementarã celei curente.
Capabilitatea de pãstrare a unei stãri în timp defineºte funcþia de memorare.
Monostabilul are tot douã stãri complementare din care numai una este
stabilã; pe aceasta circuitul o poate memora. Sub acþiunea unei comenzi
exterioare monostabilul poate sã treacã în starea instabilã; în aceastã stare
circuitul rãmâne o duratã finitã, determinatã în principal de o constantã de
timp, dupã care revine în starea stabilã fãrã sã fie forþat.
Aplicaþia de bazã a monostabilului este aceea de generator de monoimpulsuri.
Existã diverse structuri logice sau analogice de monostabil. În acest paragraf
se aratã cum se poate “transforma” un bistabil în monostabil. Un exemplu este
prezentat în Fig.1.40.

Fig.1.40 Monostabil obþinut din Dff

Se considerã cã valoarea rezistenþei R este suficient de mare astfel încât ieºirea


Q poate sã furnizeze prin ramura R-C curentul Imax = VDD /R în starea Q = High
(Q –VDD ). De asemenea, se presupune cã intrarea Reset a bistabilului are
impedanþã foarte mare (cum este cazul circuitelor MOS), ceea ce înseamnã cã
la orice moment de timp R ºi C sunt parcurse de acelaºi curent. Tensiunea pe
condensatorul C, v(t), activeazã comanda Reset dacã are valoare mai mare sau
egalã cu tensiunea de comutare (tranziþie) Vtr a intrãrii Reset.
În starea stabilã a circuitului, Q = 0, condensatorul C este descãrcat (v = 0) iar
curentul prin R-C este nul. Prima tranziþie pozitivã din semnalul Ck determinã
copierea informaþiei de la intrarea D, adicã Q+ = 1. Saltul de tensiune la ieºirea
Q de la 0 la VDD determinã încãrcarea exponenþialã a condensatorului C de la
0 cãtre VDD cu constanta de timp RC:
34 Cap.1 Celule elementare de m em orie

v(t) = VDD [1 - exp(- t/RC)] (1.15)


Starea Q = 1 se menþine o duratã è care se calculeazã astfel:
VDD [1 - exp(- è/RC)] = Vtr | è = RC ln[VDD /(VDD - Vtr)] (1.16)
Dupã aceea, prin activarea comenzii Reset, bistabilul comutã în starea stabilã
iar condensatorul se descarcã exponenþial cu aceeaºi constantã de timp:
v(t) = Vtr exp(- t/RC) (1.17)
Acest monostabil este de tip neretriggerabil. Termenul se referã la faptul cã
circuitul ajuns în starea instabilã nu rãspunde la o nouã comandã; oricâte
fronturi pozitive apar la intrarea Ck în timp ce bistabilul se aflã în starea Q =
1, durata è nu se modificã. Dupã revenirea în starea stabilã circuitul îºî recapãtã
“sensibilitatea” la comenzi.
Un nou front pozitiv aplicat la intrarea Ck produce la ieºirea Q un impuls High
cu durata è numai dacã s-a descãrcat complet condensatorul C; altfel impulsul
generat va fi mai scurt ca duratã. Aceste aspecte sunt ilustrate în Fig.1.41.

Fig.1.41 Rãspunsul monostabilului neretriggerabil la diferite comenzi

Fronturile pozitive de ceas care declanºeazã monostabilul sunt marcate cu


cifrele 1, 2 ºi 3. Comenzile 1 ºi 2 produc impulsuri cu durata è la ieºirea Q
deoarece condensatorul este complet descãrcat la acele momente de timp.
Comanda 3 apare prea devreme faþã de comanda 2; încãrcarea condensatorului
nu începe de la 0 iar atingerea pragului Vtr de cãtre tensiunea v(t) se face mai
repede, dupã un timp ô < è.
Capacitatea monostabilului neretriggerabil de a rejecta comenzile
multiple care apar în intervalul de timp è, adicã pe durata stãrii instabile, se
poate utiliza la “prelucrarea” semnalelor provenite de la tastaturi. Starea unei
taste (buton) poate sã fie transformatã într-un nivel logic dupã cum se aratã în
Fig.1.42.
Circuite Logice Secvenþiale Sincrone 35

Fig.1.42 Generarea nivelelor logice prin apãsarea tastelor

Prin apãsarea tastei T se pot genera semnale active Low (Ā) sau active High
(B). Imediat dupã apãsarea tastei apare un regim tranzitoriu oscilant în
tensiunea de ieºire care se datoreazã vibraþiilor mecanice. În general semnalele
Ā, B nu pot fi utilizate în aceastã formã ca intrãri de control în circuitele logice
secvenþiale; trecerea lor printr-un monostabil neretriggerabil va produce
impulsuri de comandã valide.
Astabilul este un circuit logic care oscileazã între douã stãri instabile ºi
se utilizeazã ca generator de semnal dreptunghiular periodic. Ca ºi în cazul
monostabilului, existã multe posibilitãþi de implementare. Exemplul urmãtor
nu prezintã interes practic din mai multe motive, unul fiind risipa de arie, însã
analiza circuitului este importantã.

Fig.1.43 Astabil construit din monostabili

Starea stabilã a fiecãruia dintre cei doi monostabili este Q = 0. Circuitul are
patru stãri distincte Q1 Q2 0 {00, 01, 10, 11}. Starea Q 1 Q 2 = 00 este stabilã,
36 Cap.1 Celule elementare de m em orie

indiferent de valorile constantelor de timp R1 C1 ºi R2 C2, iar celelalte trei stãri


sunt instabile.
Din starea curentã Q1 Q2 = 11 circuitul evolueazã în funcþie de încãrcarea
condensatoarelor C1 ºi C2 dupã cum urmeazã. Dacã tensiunile v 1 ºi v 2 ajung
simultan sau la momente de timp foarte apropiate la valoarea Vtr atunci starea
viitoare va fi Q1 Q2 = 00, deoarece comenzile asincrone de Reset devenind
active vor anula efectele tranziþiilor pozitive care apar la intrãrile de ceas ale
bistabililor. Dacã v1 atinge pragul Vtr mai repede decât v2 atunci starea viitoare
va fi Q1 Q2 = 01 ºi invers, dacã v2 atinge pragul Vtr mai repede decât v1 atunci
starea viitoare va fi Q1 Q2 = 10.
Oscilaþia între stãrile instabile Q1 Q2 = 01 ºi Q 1 Q 2 = 10 pare sã fie la fel de
probabilã ca ºi “blocarea” în starea stabilã Q1 Q2 = 00. Pentru amorsarea
oscilaþiilor este necesarã o comandã specialã de start-up. Schema astabilului
completat este redesenatã în Fig.1.44. Nu sunt necesare ambele soluþii
prezentate, Start-up1 ºi Start-up2, ci doar una dintre ele. Impulsul de start-up
duce circuitul din starea stabilã Q1 Q2 = 00 în starea instabilã Q1 Q2 = 10.

Fig.1.44 Astabil cu start-up

Oscilaþiile care apar dupã amorsare au perioada variabilã în timp. Aceasta are
o tendinþã de scãdere deoarece cresc valorile minime ale tensiunilor v1 ºi v2
atinse la descãrcarea condensatoarelor C1 ºi respectiv C2. Ambele
condensatoare se încarcã pânã la pragul Vtr. Dacã perioada oscilaþiei scade la
valori suficient de mici atunci astabilul va ajunge înapoi în starea stabilã Q 1 Q 2
= 00. Existã ºi posibilitatea ca tendinþa de scãdere a perioadei sã disparã ºi sã
se ajungã la un regim permanent de oscilaþie. Acest regim se caracterizeazã
prin duratele stãrilor Q1 Q2 = 10 ºi Q1 Q2 = 01, è1 ºi respectiv è2 , perioada T =
è1 + è2 ºi valorile minime ale tensiunilor v1 ºi v2 , notate în continuare V 1 ºi
respectiv V2. Evident, V 1 ºi V2 trebuie sã fie suficient de mici faþã de V tr.
Calculele care urmeazã au la bazã încãrcarea (descãrcarea) exponenþialã a unui
condensator, cu o constantã de timp RC, exprimatã prin relaþia
Circuite Logice Secvenþiale Sincrone 37

v(t) = VF + (VI - VF) exp(- t/RC) (1.18)


în care VF ºi VI sunt valoarea finalã v(4) ºi respectiv valoarea iniþialã v(0) de
la care începe încãrcarea sau descãrcarea.
În regim permanent de oscilaþie, pe durata stãrii Q1 Q2 = 10, C 1 se încarcã de la
V1 cãtre VDD iar C2 se descarcã de la Vtr cãtre 0:
v1(t) = VDD + (V1 - VDD ) exp(- t/RC), v1 (è1) = Vtr
v2(t) = Vtr exp(- t/RC), v2(è1) = V2
Rezultã
è1 = R1 C1 ln[(V DD - V1)/(V DD - Vtr)] = R2 C2 ln(Vtr/V2) (1.19)
Pe durata stãrii Q1 Q2 = 01, C1 se descarcã de la Vtr cãtre 0 iar C2 se încarcã de
la V2 cãtre VDD :
v1(t) = Vtr exp(- t/RC), v1(è2) = V1
v2(t) = VDD + (V2 - VDD ) exp(- t/RC), v2 (è2) = Vtr
Rezultã
è2 = R2 C2 ln[(V DD - V2)/(V DD - Vtr)] = R1 C1 ln(Vtr/V1) (1.20)
Interpretarea relaþiilor (1.19) ºi (1.20) în cazul general R1 C1 … R2 C2 este mai
dificilã. În cazul particular R1 C1 = R2 C2 se obþine è1 = è2 = è ºi V1 = V2.= V.
Tensiunea V este soluþia ecuaþiei
x2 - x VDD + Vtr(VDD - Vtr) = 0 (x1 = Vtr, x2 = VDD - Vtr)
Condiþia V < Vtr ar putea sã fie îndeplinitã de soluþia x2 dacã tensiunea de
comutare Vtr are o valoare mai mare decât VDD /2. Dacã Vtr .VDD/2 atunci
oscilaþiile nu pot sã aibã un regim permanent.
Din aceastã analizã se constatã cã procesul de descãrcare al celor douã
condensatoare are un rol esenþial în determinarea unui regim de oscilaþie
permanent. Dacã ambele condensatoare C1 ºi C2 s-ar descãrca pânã la 0 pe
duratele è2 ºi respectiv è1, adicã V1 = V2.= 0, atunci regimul de oscilaþie
permanent ar fi garantat. Mai mult, dupã amorsare oscilaþia ar avea perioada
constantã ºi determinatã în principal de componentele R1, C1, R2 ºi C2 :
è1 = R1 C1 ln[VDD /(VDD - Vtr)] (1.21)
è2 = R2 C2 ln[VDD /(VDD - Vtr)] (1.22)
T = (R1 C1 + R2 C2 ) ln[VDD /(VDD - Vtr)] (1.23)
Schema din Fig.1.43 nu poate sã realizeze descãrcarea condensatoarelor astfel
încât V1 = V2 = 0. Acest lucru se poate face numai dacã se micºoreazã
constantele de timp de descãrcare, pãstrându-le neschimbate pe acelea de
încãrcare. O soluþie este ilustratã în Fig.1.45; modalitatea prin care se face
startarea nu mai este reprezentatã.
38 Cap.1 Celule elementare de m em orie

Fig.1.45 Astabil cu regim permanent de oscilaþie

În starea Q1 Q2 = 10 tranzistorul N1 este blocat ºi C1 se încarcã iar N2 (triodã)


menþine v2 = 0; în starea Q1 Q2 = 01 tranzistorul N 2 este blocat ºi C 2 se încarcã
iar N1 (triodã) menþine v1 = 0. Încãrcarea condensatoarelor C1 ºi C2 se face cu
constanta de timp R1 C1 ºi respectiv R2 C2; descãrcarea completã a celor douã
condensatoarelor se face brusc, într-un interval de timp semnificativ mai mic
decât è1 sau è2.
Circuite Logice SecvenÛiale Sincrone 39

Cap.2 SINTEZA ŞI ANALIZA MAŞINILOR SECVENÚIALE

Maşinile secvenÛiale sunt circuite logice care se situeaz| pe urm|toarea


treapt| de complexitate, dup| celulele elementare de memorie. Sunt numite şi
maşini secvenÛiale cu num|r finit de st|ri (FSM - finite state machine). Ele se
pot modela prin grafuri de tranziÛie a st|rilor iar sinteza şi analiza se pot face
înc| manual dac| volumul de calcule nu dep|şeşte o limit| rezonabil|.
Calculele manuale, deşi nu pot s| trateze toate aspectele acoperite cu
instrumentele soft de proiectare, au un rol important în înÛelegerea funcÛion|rii
circuitului. Aceast| înÛelegere este deosebit de util| în etapele de proiectare în
care iteraÛiile succesive de modificare-optimizare a structurii sau de “rezolvare”
a diferitelor tipuri de erori implic| intervenÛii manuale.

2.1 Generalit|Ûi

O maşin| secvenÛial| este alc|tuit| dintr-un bloc combinaÛional şi din


celule elementare de memorie (de obicei bistabili). Schema de principiu este
desenat| în figura de mai jos.

Fig.2.1 Structura unei maşini secvenÛiale sincrone


40 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

ToÛi bistabilii comut| simultan în noua lor stare la frontul activ al ceasului. O
parte dintre bistabili pot s| aib| intr|ri asincrone S sau R, comandate în paralel
de un semnal numit generic Reset; acesta are rolul de iniÛializare a maşinii
adic| de forÛare a unei st|ri cunoscute atunci când se impune acest lucru. Starea
curent| a circuitului CS (current state) este format| din toate valorile logice
stocate în bistabili, CS = Qn...Q2Q1, şi poate fi privit| ca un num|r binar de n
biÛi sau ca un vector n dimensional. Starea viitoare NS (next state) este
ansamblul de valori aplicate la intr|rile sincrone ale bistabililor (D, J, K) sau
rezultatul produs de acestea dup| frontul activ al ceasului, adic| (Qn...Q2Q1)+.
Ceasul Ck şi semnalul de iniÛializare Reset sunt intr|ri speciale şi se trateaz| în
proiectare separat faÛ| de celelalte variabile de intrare, care sunt grupate sub
numele In (vector).
Blocul combinaÛional proceseaz| în fiecare perioad| de ceas valorile aplicate
la intr|rile lui, adic| vectorii CS şi In. Rezultatele sunt ieşirile Out (vector) şi
informaÛiile care determin| starea viitoare. Schema din Fig.2.1 nu exclude
posibilitatea ca o parte dintre variabilele vectorului In s| fie conectate direct la
intr|rile sincrone ale unor bistabili şi nici situaÛia în care o parte dintre ieşirile
Out sunt chiar ieşiri Q, QN de bistabili.
FuncÛionarea maşinii secvenÛiale în cazul general, poate fi descris| formal
prin sistemul de relaÛii
Out = Out (In, CS)
NS = NS (In, CS) (2.1)
în care ceasul nu apare în mod explicit iar intrarea de iniÛializare se presupune
a fi inactiv|. În expresiile logice ale componentelor vectorilor Out şi NS apar
sub form| explicit| nume de variabile din In şi din CS. Acest lucru înseamn|
c| de la toate intr|rile blocului combinaÛional pot s| existe c|i de propagare
directe c|tre toate ieşirile acestuia.Un caz particular de maşin| secvenÛial| este
definit de sistemul de relaÛii
Out = Out (CS)
NS = NS (In, CS) (2.2)
în care, faÛ| de (2.1), s-au simplificat expresiile ieşirilor Out astfel încât ele s|
nu mai conÛin| în mod explicit nume ale variabilelor de intrare. În structura
blocului combinaÛional nu mai exist| c|i de propagare directe între In şi Out;
propagarea valorilor logice de la In la Out se face îns| indirect, prin bistabili,
deoarece starea viitoare devine stare curent| dup| frontul activ al ceasului:
In — NS — CS — Out.
Sistemele (2.1) şi (2.2) definesc maşinile secvenÛiale de tip Mealy şi
respectiv de tip Moore. Chiar din aceste relaÛii formale se poate observa c|
maşina Moore rejecteaz| hazardul prezent la intr|rile In, ieşirile Out nefiind
Circuite Logice SecvenÛiale Sincrone 41

sensibile la tranziÛiile care au loc în semnalele de intrare. Maşina Mealy nu are


aceast| capacitate îns| se pot face unele “corecÛii” la nivelul intr|rilor prin care
s| se blocheze propagarea impulsurilor şi oscilaÛiilor nedorite c|tre ieşirile Out,
dup| cum se va ar|ta în subcap.2.3.
Se poate spune c| (2.1) sau (2.2) reprezint| rezultatul sintezei maşinii
secvenÛiale deoarece între structura fizic| a blocului combinaÛional şi aceste
expresii logice exist| o corespondenÛ| biunivoc|.
Sinteza oric|rui bloc logic, combinaÛional sau secvenÛial, are la baz| un model.
În sinteza automat| modelul este de obicei un text scris într-un limbaj HDL
(hardware description language), îns| pentru sinteza manual| circuitul poate
s| fie descris sub form| de tabele de adev|r, diagrame de decizie binar| sau
graf de tranziÛie a st|rilor. Acesta din urm| este utilizat şi de c|tre
instrumentele software dedicate sintezei maşinilor secvenÛiale.
La construirea unui graf de tranziÛie se aloc| un num|r s de st|ri distincte,
cât mai mic posibil, numite şi st|ri valide. Fiecare stare valid| poate s| fie
reprezentat| printr-un nume sugestiv, un simbol, o cifr| zecimal| sau un cod
binar. Între num|rul de st|ri valide s şi num|rul de bistabili n din structura
maşinii secvenÛiale exist| relaÛia n = [log2 s] (partea întreag|) sau s # 2n. Dac|
s < 2n atunci maşina are şi st|ri invalide, în num|r de 2n - s. În astfel de cazuri
graful iniÛial nu este complet. Pe lâng| st|rile invalide exist| şi arce care nu
apar în graful iniÛial, numite în continuare arce invalide. Sunt asem|n|ri între
un graf cu st|ri invalide şi o funcÛie combinaÛional| incomplet definit|.
Înainte de sinteza logic|, st|rile şi arcele invalide pot fi “tratate” în dou|
moduri diametral opuse:
1) - toate sunt impuse sau fixate astfel încât funcÛionarea maşinii s| fie dictat|
numai de st|rile şi arcele valide;
2) - toate sunt l|sate “libere” sau indiferente.
Ambele abord|ri se utilizeaz| în proiectare. St|rile şi arcele l|sate indiferente
constituie un câştig potenÛial de arie deoarece în etapele de minimizare ele
contribuie la simplificarea expresiilor logice. Sistemul (2.1) sau (2.2) obÛinut
în urma sintezei conÛine o imagine complet| asupra funcÛion|rii maşinii
secvenÛiale. Din analiza sistemului se poate determina graful de tranziÛie
complet în care apar toate st|rile şi toate arcele. Analiza vizeaz| în principal
st|rile şi arcele invalide. Dac| în funcÛionarea maşinii pot s| apar| “blocaje”
în st|ri invalide, oscilaÛii între st|ri invalide sau alte manifest|ri defectuoase
atunci trebuie impuse (fixate) anumite arce invalide şi ref|cut| sinteza.
Num|rul minim de iteraÛii necesare pentru obÛinerea unei funcÛion|ri
acceptabile nu este îm general predictibil.
Un graf de tranziÛie cu s st|ri valide din 2n descrie aceeaşi maşin|
secvenÛial| indiferent de modul de codificare a st|rilor. Din cele 2n cuvinte de
cod, adic| numere binare de n biÛi, se pot alege oricare s pentru a codifica
st|rile valide. Num|rul de variante este Cns (combin|ri). Fiind alese cele s
42 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

combinaÛii valide de n biÛi, se pot face s! = Ps (permut|ri) corespondenÛe


biunivoce de tip stare - cod binar. Rezult| c| acelaşi graf de tranziÛie a st|rilor
reprezint| modelul pentru s!·Cns = Ans (aranjamente) maşini secvenÛiale care
sunt echivalente funcÛional sau izomorfe. Codificarea st|rilor are în general un
impact semnificativ asupra ariei ocupate pe chip şi asupra num|rului mediu de
tranziÛii declanşate de fronturile active de ceas la ieşirile porÛilor logice din
structura maşinii. Num|rul de tranziÛii sau de comut|ri într-o perioad| de ceas
este proporÛional cu puterea dinamic| disipat|. În sinteza automat| se poate
opta pentru o structura care s| aib| vitez| maxim| de operare sau arie minim|
sau putere disipat| minim|. Toate opÛiunile au leg|tur| cu alegerea şi atribuirea
codurilor pentru st|rile valide din graful de tranziÛie.
FuncÛionarea corect| a unei maşini secvenÛiale, în conformitate cu graful
de tranziÛie a st|rilor, presupune respectarea parametrilor tsetup şi thold ai fiec|rui
bistabil în parte, pe orice perioad| de ceas. Fie Inj o intrare şi ff_i un bistabil în
schema din Fig.2.1, între care exist| cel puÛin o cale de propagare prin structura
blocului combinaÛional, cu întârzierea Tp j-i. Dac| ultima schimbare de nivel
logic în semnalul de intrare Inj , dintr-o perioad| oarecare de ceas, are loc mai
devreme cu tarrival j faÛ| de frontul activ, atunci
tarrival j - Tp j-i $ tsetup (2.3)
este condiÛia de respectare a parametrului tsetup. Aceast| condiÛie trebuie
îndeplinit| pentru orice pereche (j, i) posibil|. Urm|toarea tranziÛie în semnalul
de intrare Inj poate s| aib| loc la momentul thold - Tp j-i faÛ| de frontul activ de
ceas. FrecvenÛa maxim| de operare a maşinii secvenÛiale se calculeaz| cu
relaÛia
fCk max = 1/(tp Ck - QQ̄ + Tp j-i max + tsetup) (2.4)
în care Tp j-i max este întârzierea celei mai lungi c|i dintre intr|rile In şi ieşirile
NS ale blocului combinaÛional.

2.2 Exemplu de sintez| şi analiz|

Fie X = x1, x2, x3, x4, ... o secvenÛ| de valori binare în care fiecare bit xj are
o durat| egal| cu perioada unui semnal de ceas Ck. Aceast| secvenÛ| este
monitorizat| de maşina secvenÛial| reprezentat| în Fig.2.2. Monitorizarea
începe dup| aplicarea unui impuls de start şi const| în verificarea periodicit|Ûii
secvenÛei X, astfel:
- dac| X este de forma ..., v, v, v̄, v, v, v̄, v, v, v̄, ... atunci ieşirea Er a maşinii
r|mâne la nivelul inactiv 1 (v 0 {0, 1}, TX = 3TCk);
- începând cu prima abatere a secvenÛei X de la periodicitatea menÛionat|
anterior, se activeaz| semnalul de eroare (Er = 0).
Maşina memoreaz| prima eroare din secvenÛa X. Pentru a relua monitorizarea
Circuite Logice SecvenÛiale Sincrone 43

este necesar| aplicarea unui nou impuls de start.

Fig.2.2 Detector de secvenÛe periodice (T = 3TCk)

Semnalul Start trebuie s| forÛeze trecerea maşinii secvenÛiale, din orice stare
curent|, într-o stare de aşteptare (sau de plecare, de reset, iniÛial|). Aceast|
operaÛie se poate implementa cu ajutorul comenzilor asincrone S, R ale
bistabililor sau cu logic| sincron|.
În afar| de starea de aşteptare, graful de tranziÛie trebuie s| conÛin| o stare cu
semnificaÛia de eroare şi dou| bucle independente formate fiecare din câte trei
st|ri. Buclele corespund cazurilor v = 0 şi respectiv v =1. FuncÛionarea va
ajunge într-una din aceste bucle dac| secvenÛa X este periodic| (T = 3TCk),
începând cu bitul x3. Circuitul intr| în starea de eroare dac| x1 = x2 = x3 sau
dac| “tiparul” definit de primii trei biÛi nu va fi respectat de urm|torii biÛi.
Graful de tranziÛie a st|rilor este desenat în Fig.2.3. Numele date st|rilor sunt
st0, st1, st2, etc. Valorile trecute pe arce au semnificaÛia X/Er.

Fig.2.3 Graful de tranziÛie a st|rilor detectorului de secvenÛe periodice


44 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

S-a considerat Start = 0; toate tranziÛiile din graf sunt declanşate de fronturile
pozitive ale ceasului Ck. TranziÛiile c|tre starea iniÛial| st0 care sunt
determinate de Start = 1 nu sunt reprezentate. Starea de eroare este st13.
Cele 14 st|ri utilizate în Fig.2.3 sunt st|ri valide. Num|rul necesar şi suficient
de bistabili este 4 iar num|rul de st|ri generate este 16. Fie Q3, Q2, Q1 şi Q0
valorile logice stocate în bistabili. Oricare 14 st|ri din cele 16 pot fi asociate
cu numele st0, st1, ..., st13. În acest exemplu se va utiliza codificarea
“natural|”
nume stare — Q3Q2Q1Q0
st0 — 0000
st1 — 0001
st2 — 0010
st3 — 0011
st4 — 0100
st5 — 0101
st6 — 0110
st7 — 0111
st8 — 1000
st9 — 1001
st10 — 1010
st11 — 1011
st12 — 1100
st13 — 1101.
Codurile neutilizate 1110 şi 1111 reprezint| cele dou| st|ri invalide ale
maşinii, c|rora li se vor da numele st14 şi respectiv st15.
Din starea iniÛial| st0, în care se ajunge şi care se menÛine oricât timp cu
Start = 1, maşina secvenÛial| începe monitorizarea secvenÛei X imediat dup| ce
Start = 0. OperaÛia se desf|şoar| continuu, pân| la viitoarea resetare. Buclele
din graf corespunz|toare tiparelor de periodicitate (0, 0, 1) şi (0, 1, 1) sunt
formate din st|rile (st7, st8, st9) şi respectiv (st10, st11, st12).
Semnalizarea erorii prin Er = 0 se poate face în dou| moduri:
- numai dup| ce circuitul a ajuns în starea de eroare st13 (maşina Moore),
- începând din starea din care se face tranziÛia c|tre starea st13 (maşina Mealy).
Arcele care pornesc din st2, st6, st7, st8, st9, st10, st11, st12 şi ajung în starea
st13 au asociate valorile 0/a sau 1/a; a = 1 corespunde maşinii Moore iar a =
0 maşinii Mealy. Starea de eroare st13 se p|streaz| oricât de mult timp,
indiferent de valorile viitoare din secvenÛa X.
În acest exemplu grafurile de tranziÛie a st|rilor celor dou| tipuri de maşini sunt
aproape identice. În general, maşinile de tip Mealy pot fi modelate cu mai
puÛine st|ri valide în comparaÛie cu versiunile Moore.
InformaÛiile existente în graful de tranziÛie a st|rilor din Fig.2.3 pot fi
reprezentate şi sub form| de tabele, utilizând codificarea binar| a st|rilor
Circuite Logice SecvenÛiale Sincrone 45

indicat| mai sus. Din aceste tabele (Fig.2.4) se obÛin expresiile logice
minimizate care stau la baza implement|rii blocului combinaÛional din structura
maşinii secvenÛiale.

Fig.2.4 Tabelele de adev|r ale detectorului de secvenÛe periodice

St|rile invalide şi arcele care pleac| din acestea au fost l|sate libere sau
indiferente. Implementarea ieşirii Er nu depinde de tipul de bistabil (D sau JK)
utilizat; expresiile logice de forma ((') obÛinute prin acoperirea zerourilor
sunt:
Er = (Q3 + Q2 + Q̄1 + Q0 + X)(Q̄3 + Q̄2 + X)(Q̄3 + Q̄0 + X)(Q̄3 + Q̄2 + Q̄0) @
@(Q̄2 + Q̄1 + X̄)(Q̄3 + Q2 + Q0 + X̄) (maşina Mealy)
Er = Q̄3 + Q̄2 + Q̄0 (maşina Moore)
Se observ| c| variabila de intrare X nu apare în expresia ieşirii maşinii Moore.
Structurile logice combinaÛionale care determin| starea viitoare (NS)
depind de tipul de bistabil utilizat. În cazul sintezei cu bistabili de tip D,
46 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

tabelele Q3+, Q2+, Q1+ şi Q0+ din Fig.2.4 sunt identice cu tabelele de adev|r ale
comenzilor sincrone D3, D2, D1 şi respectiv D0; funcÛionarea sincron| a unui
bistabil de tip D este reprezentat| de expresia logic| Q+ = D. Tabelele
rearanjate într-o form| mai apropiat| de p|trat şi grup|rile de acoperire sunt
indicate în figura urm|toare.

Fig.2.5 Sinteza cu bistabili de tip D

D3 = (Q3 + Q2 + Q0 + X̄)(Q2 + Q1 + Q̄0 + X̄)(Q3 + Q1 + Q0)(Q3 + Q2 + Q1)


D2 = Q̄3Q̄2Q1Q̄0 + Q2Q̄1Q̄0X̄ + Q̄2Q̄0X + Q̄3Q2X + Q3Q0
D1 = (Q3 + Q2 + Q̄1 + X)(Q2 + Q1 + Q0)(Q̄2 + Q1 + X)(Q̄2 + Q̄1 + X̄) @
@(Q̄3 + Q̄1 + X̄)(Q̄3 + Q̄0 + X)(Q̄2 + Q̄0)
D0 = Q̄2Q̄1Q0X + Q2Q̄1X̄ + Q2Q1X + Q3Q2Q0 + Q3Q̄2Q̄0 + Q̄0X̄ + Q1Q̄0 + Q3X̄

Grup|rile efectuate în tabelele din Fig.2.5 au fixat st|rile şi arcele invalide.


Circuite Logice SecvenÛiale Sincrone 47

Astfel, dac| starea curent| a maşinii este st14 (1110) atunci starea viitoare va
fi st11 (cu X = 0) sau st9 (cu X = 1); din starea curent| st15 (1111) se va ajunge
în st13 indiferent de valoarea curent| X. Graful de tranziÛie complet este
desenat în Fig.2.6; st|rile şi arcele invalide sunt reprezentate cu linii întrerupte.
Modul în care au fost fixate st|rile şi arcele invalide este convenabil.

Fig.2.6 Graful complet de tranziÛie a st|rilor maşinii secvenÛiale (Moore)

Dac| se doreşte o reducere suplimentar| a ariei ocupate, în detrimentul


vitezei de operare, atunci se poate continua minimizarea sistemului {D3, D2, D1,
D0, Er} prin identificarea şi factorizarea unor p|rÛi comune. Exist| mai multe
posibilit|Ûi de optimizare a ariei. O variant| este prezentat| în continuare.
Fie produsele logice
P1 = Q̄3Q̄2 , P2 = Q3Q0 , P3 = Q̄1Q̄0 , P4 = Q1Q̄0 ,
P5 = Q̄2Q̄0 , P6 = Q̄2Q̄1Q0X şi P7 = Q2(Q̄1 r X)
în care r este operaÛia XOR. Cu aceste notaÛii sistemul {D3, D2, D1, D0, Er}
poate s| fie rescris astfel:
D3 = P1(Q̄0X + Q̄1) + P3Q̄3 + P6
D2 = P1P4 + P3Q2X̄ + (P5 + Q̄3Q2)X + P2
D1 = P1Q1X̄ + P3Q̄2 + P7 + Q3Q1X + P2X̄ + Q2Q0
D0 = Er + P6 + P7 + P5Q3 + (Q3 + Q̄0)X̄ + P4
Er = P2Q2
Implementarea acestor expresii logice este ilustrat| în Fig.2.7. În schema
48 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

detectorului de secvenÛe periodice este introdus şi semnalul Start cu care se


controleaz| intr|rile de reset asincron ai celor patru bistabili.

Fig.2.7 Implementare cu bistabili D a detectorului de secvenÛe periodice


Circuite Logice SecvenÛiale Sincrone 49

Schema detectorului de secvenÛe cu perioada 3TCk în versiunea cu Start sincron


este desenat| în figura urm|toare. Durata impulsului Start = 1 trebuie s| fie mai
mare decât o perioad| de ceas.

Fig.2.8 Detector de secvenÛe periodice cu Start sincron


50 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Pentru a obÛine o putere disipat| cât mai mic| în regim dinamic,


codificarea st|rilor valide trebuie f|cut| astfel încât num|rul mediu de noduri
din circuit care comut| într-o perioad| de ceas s| fie cât mai mic. În cazul
acestui exemplu de maşin| secvenÛial| num|rul de comut|ri este determinat de
num|rul de tranziÛii ale semnalului de intrare X şi ale ieşirilor celor patru
bistabili. FuncÛionarea cea mai probabil| a maşinii se deruleaz| pe termen lung
într-una din buclele formate din st|rile st7, st8 şi st9 sau st10, st11 şi st12.
Codificarea binar| natural| a st|rilor care a fost utilizat| determin| la ieşirile
bistabililor, la o singur| parcurgere a buclei, 8 şi respectiv 6 tranziÛii dup| cum
se poate observa în schiÛa din figura urm|toare.

Figura 2.9

Num|rul minim posibil de tranziÛii pe o bucl| format| din 3 st|ri este 4. Exist|
mai multe variante de codificare optim| a celor dou| bucle. Codurile 0100,
1100, 1000 constituie un exemplu.
Sinteza cu bistabili de tip JK implic| o etap| de calcul în plus faÛ| de
sinteza cu bistabili de tip D. Din ecuaÛia Q+ = JQ̄ + K̄Q de funcÛionare sincron|,
cunoscându-se starea curent| şi cea viitoare, se determin| valorile necesare J
şi K astfel:
J = Q+ şi K = ( dac| Q = 0,
J = ( şi K = Q̄+ dac| Q = 1.
În tabelele de sintez| din Fig.2.10 s-a p|strat codificarea binar| natural| a
st|rilor pentru a face comparaÛii între implementarea cu bistabili D şi cea cu
bistabili JK. Grup|rile de acoperire a unit|Ûilor sau a zerourilor efectuate în
tabelele de adev|r conduc la urm|toarele expresii logice:
J3 = (Q2 + Q0 + X̄)(Q1 + Q0)(Q2 + Q1), K3 = Q̄2Q̄1Q0X
J2 = (Q3 + Q1 +X)(Q̄3 + Q0 + X)(Q3 + Q̄0), K2 = (Q1 + Q0 +X)(Q3 + X̄)(Q̄3 + Q̄0)
J1 = (Q0 +X)(Q̄3 + X)(Q2 + Q0)(Q̄2 + Q̄0), K1 = Q̄3Q̄2X̄ + Q2X + Q3X + Q0X̄
J0 = Q3Q̄2 + X̄ + Q1, K0 = Q̄3Q̄2X̄ + Q̄3Q1X̄ + Q̄2Q1X + Q̄3Q2Q̄1X.
Circuite Logice SecvenÛiale Sincrone 51

Q0 X Q 3+ J3 K3
Q 3 Q 2 Q 1 00 01 11 10 00 01 11 10 00 01 11 10
0 0 0 0 0 0 0 0 0 0 0 ( ( ( (
0 0 1 1 0 1 1 1 0 1 1 ( ( ( (
0 1 1 1 1 1 1 1 1 1 1 ( ( ( (
0 1 0 0 0 1 1 0 0 1 1 ( ( ( (
1 1 0 1 1 (1 1 ( ( ( 0 0 0 0
1 1 1 ( ( ( ( ( ( ( ( ( ( ( (
1 0 1 1 1 1 1 ( ( ( ( 0 0 0 0
1 0 0 1 1 0 1 ( ( ( ( 0 0 1 0

Q0 X Q 2+ J2 K2
Q 3 Q 2 Q 1 00 01 11 10 00 01 11 10 00 01 11 10
0 0 0 0 1 0 0 0 1 0 0 ( ( ( (
0 0 1 1 1 0 0 1 1 0 0 ( ( ( (
0 1 1 0 1 (1 0 ( ( ( 1 0 0 1
0 1 0 1 1 (1 0 ( ( ( 0 0 0 1
1 1 0 1 0 (1 1 ( ( ( 0 1 0 0
1 1 1 ( ( ( ( ( ( ( ( ( ( ( (
1 0 1 0 1 1 1 0 1 1 1 ( ( ( (
1 0 0 0 1 1 1 0 1 1 1 ( ( ( (

Q0 X Q 1+ J1 K1
Q 3 Q 2 Q 1 00 01 11 10 00 01 11 10 00 01 11 10
0 0 0 0 0 1 1 0 0 1 1 ( ( ( (
0 0 1 0 1 1 0 ( ( ( ( 1 0 0 1
0 1 1 1 0 0 0 ( ( ( ( 0 1 1 1
0 1 0 0 1 0 0 0
( ( (1 0 0 (
1 1 0 0 1 0 0 0
( ( (1 0 0 (
1 1 1 ( ( ( ( ( ( ( ( ( ( ( (
1 0 1 1 0 0 0 ( ( ( ( 0 1 1 1
1 0 0 0 0 1 0 0 0 1 0 ( ( ( (

Q0 X Q 0+ J0 K0
Q 3 Q 2 Q 1 00 01 11 10 00 01 11 10 00 01 11 10
0 0 0 1 0 1 (0 1 0 ( ( ( 0 1
0 0 1 1 1 0 (0 1 1 ( ( ( 1 1
0 1 1 1 1 1 (0 1 1 ( ( ( 0 1
0 1 0 1 0 0 (1 1 0 ( ( ( 1 0
1 1 0 1 0 1 (1 1 0 ( ( ( 0 0
1 1 1 ( ( ( ( ( ( ( ( ( ( ( (
1 0 1 1 1 0 1 1 1 ( ( ( ( 1 0
1 0 0 1 1 1 1 1 1 ( ( ( ( 0 0
Fig.2.10 Sinteza cu bistabili de tip JK
52 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Schema circuitului este ilustrat| în figura de mai jos.

Fig.2.11 Implementare cu bistabili JK a detectorului de secvenÛe periodice

Determinarea grafului complet de tranziÛie a st|rilor necesit| de asemenea


un efort suplimentar de calcul faÛ| de sinteza cu bistabili de tip D, unde trebuie
doar identificate valorile atribuite simbolurilor ( (don’t care) dup| efectuarea
grup|rilor de acoperire a zerourilor sau a unit|Ûilor. La sinteza cu bistabili de
tip JK, fixarea st|rilor şi arcelor invalide l|sate iniÛial libere sau indiferente se
determin| cu ajutorul sistemului de ecuaÛii rezultat în urma sintezei. Astfel,
dac| starea curent| a maşinii secvenÛiale este st14 sau st15 se obÛine:

Q3Q2Q1Q0 = 1110
X = 0 | J3 = 1, K3 = 0 | Q3+Q2+Q1+Q0+ = 1011 (st11), Er = 1
J2 = 0, K2 = 1
J1 = 0, K1 = 0
J0 = 1, K0 = 0
Circuite Logice SecvenÛiale Sincrone 53

X = 1 | J3 = 1, K3 = 0 | Q3+Q2+Q1+Q0+ = 1001 (st9), Er = 1


J2 = 1, K2 = 1
J1 = 1, K1 = 1
J0 = 1, K0 = 0
Q3Q2Q1Q0 = 1111
X = ( | J3 = 1, K3 = 0 | Q3+Q2+Q1+Q0+ = 1101 (st13), Er = 0
J2 = 1, K2 = 0
J1 = 0, K1 = 1
J0 = 1, K0 = 0
Valoarea de ieşire s-a calculat cu expresia logic| Er = Q̄3 + Q̄2 + Q̄0 (Moore). În
mod întâmpl|tor, graful complet este identic cu cel din Fig.2.6, corespunz|tor
sintezei cu bistabili de tip D.
Resursele consumate (num|rul de componente logice sau de celule)
pentru implementarea detectorului de secvenÛe cu perioada 3TCk prin sinteza cu
bistabili D şi respectiv JK sunt comparabile. Num|rul de porÛi logice din
schemele desenate în figurile 2.7 şi 2.11 este 34 şi respectiv 30; ariile celor
dou| circuite sunt aproximativ egale.
Conexiunile dintre componentele din schemele anterioare au fost
reprezentate în form| explicit|. O alternativ| de construire a schemelor mai
uşoar| const| în realizarea unor conexiuni în mod implicit, adic| prin nume;
dou| sau mai multe conexiuni care au acelaşi nume sunt conectate între ele.
În funcÛionarea detectorului de secvenÛe cu perioada T = 3TCk exist| trei
operaÛii distincte:
1) detectarea şi memorarea tiparului de periodicitate definit de primii 3 biÛi ai
secvenÛei X;
2) validarea tiparului de periodicitate şi compararea continu| cu acesta, în
ritmul semnalului de ceas, a biÛilor de intrare urm|tori;
3) memorarea şi semnalizarea erorii în cazul apariÛiei primei abateri de la
periodicitate în secvenÛa X.
Aceste operaÛii nu au corespondenÛe şi la nivel structural, în sensul c| nu pot
fi identificate şi separate trei porÛiuni distincte din circuit care s| le
îndeplinesc| pe fiecare în parte. În continuare se va prezenta o abordare de
acest fel, adic| de construire a unui detector de secvenÛe periodice bazat| pe o
corespondenÛ| de tip structur| - funcÛie. Noul circuit secvenÛial const| din
interconectarea a trei maşini secvenÛiale sincronizate de acelaşi semnal de ceas.
Num|rul necesar de bistabili este mai mare decât în schemele anterioare, îns|
aria ocupat| nu este în mod obligatoriu mai mare.
54 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Structurile logice obÛinute prin interconectarea mai multor maşini secvenÛiale


şi eventual blocuri combinaÛionale cu funcÛii bine definite, se situeaz| pe o
treapt| de complexitate superioar| faÛ| de aceea a unei maşini secvenÛiale.
Realizarea detecÛiei secvenÛelor periodice cu o singur| maşin| secvenÛial|
implic| un efort de calcul cosiderabil mai mare dac| perioada T a semnalului
monitorizat X se m|reşte chiar şi numai cu o singur| perioad| de ceas TCk.
Sinteza maşinii trebuie ref|cut| complet pentru fiecare valoare a perioadei T.
Schema din Fig.2.12 nu prezint| aceste dezavantaje; ea se poate redimensiona
cu uşurinÛ| pentru orice perioad| T a secvenÛei X.

Fig.2.12 Detector de secvenÛe periodice complex

În schema de mai sus maşina secvenÛial| FSM1 detecteaz| şi memoreaz|


tiparul de periodicitate definit de primii 3 biÛi ai secvenÛei X, celula
combinaÛional| Comparare&Validare realizeaz| validarea tiparului şi
Circuite Logice SecvenÛiale Sincrone 55

compararea iar maşina secvenÛial| FSM2 are rolul de memorare şi semnalizare


a erorilor. Maşina FSM3 este blocul de control al acestui “microsistem digital”;
impulsul generat Z are durata egal| cu perioada semnalului monitorizat X, dup|
cum se arat| în diagrama urm|toare.

Fig.2.13 FuncÛionarea maşinii FSM3

Graful de tranziÛie a st|rilor desenat în Fig.2.14 modeleaz| maşina FSM3.


Comanda Start acÛioneaz| intr|rile de reset asincron ale bistabililor.

Fig.2.14 Modelul generatorului de impuls FSM3

St|rile din graf sunt cele valide şi au fost codificate astfel încât s| se
minimizeze num|rul de tranziÛii la ieşirile Q2, Q1, Q0 ale celor trei bistabili din
structura maşinii. Arcele desenate cu linie continu| sunt declanşate de
fronturile negative de ceas iar cele desenate cu linie întrerupt| sunt produse de
semnalul Start. Valorile logice asociate arcelor reprezint| ieşirea Z. St|rile şi
arcele invalide sunt l|sate libere (indiferente).
Tabelele de sintez| împreun| cu grup|rile de acoperire a unit|Ûilor sau a
zerourilor sunt prezentate în Fig.2.15. Structura circuitului este descris| de
sistemul de relaÛii D2 = Q1 , D1 = Q1 + Q0 , D0 = Q̄2 , Z = Q0. Schema FSM3 şi
graful complet de tranziÛie a st|rilor sunt desenate în figurile 2.16 şi respectiv
2.17. St|rile şi arcele invalide sunt reprezentate cu linii întrerupte; tranziÛiile
c|tre starea 000 produse de comanda Start = 1 nu sunt reprezentate.
56 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Fig.2.15 Sinteza FSM3 cu bistabili de tip D

Fig.2.16 Schema FSM3

Fig.2.17 Graful complet de tranziÛie a st|rilor FSM3

În intervalul de lungime 3TCk când Z = 1, bistabilul din structura FSM2


este resetat (Er = 0) şi primii 3 biÛi x0, x1, x2 ai secvenÛei X care definesc tiparul
de periodicitate se deplaseaz| prin bistabilii maşinii FSM1 de la Dff2 la Dff0;
dup| al treilea front pozitiv al ceasului Ck rezult| Q2 = x2, Q1 = x1 şi Q0 = x0.
Dup| ce Z comut| la valoarea logic| 0, cei 3 biÛi “capturaÛi” în FSM1 sunt
permutaÛi circular sau rotiÛi între cei trei bistabili.
Circuite Logice SecvenÛiale Sincrone 57

Poarta XOR din blocul Comparare&Validare compar| urm|torii biÛi din


secvenÛa X cu tiparul de periodicitate astfel: x3 cu x0, x4 cu x1, x5 cu x2, x6 cu x0,
x7 cu x1, ş.a.m.d. Prima nepotrivire, dac| apare, se memoreaz| în bistabilul din
FSM2 (Er = 1). PorÛile AND3 şi NOR3 valideaz| tiparul; dac| cei 3 biÛi
capturaÛi în FSM1 sunt identici atunci tiparul nu este valid. Aceast| situaÛie se
semnalizeaz| în schema din Fig.2.12 tot prin Er = 1 îns| se poate face şi
separat, dup| cum se arat| în Fig.2.18.

Fig.2.18 Detector de secvenÛe periodice cu ieşiri distincte, de eroare


şi respectiv de invalidare a tiparului de periodicitate

Pentru perioade mai mari ale secvenÛei X, maşina FSM1 şi blocul de


validare a tiparului de periodicitate se expandeaz| uşor, f|r| efort de calcul.
58 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Numai circuitul FSM3 trebuie ref|cut complet pentru a genera impulsuri Z mai
lungi, egale cu perioada T a secvenÛei X, îns| efortul de calcul necesar este
relativ mic.
2.3 Aspecte de proiectare a maşinilor secvenÛiale
Modelarea funcÛion|rii printr-un graf de tranziÛie a st|rilor şi minimizarea
expresiilor logice corespunz|toare structurii sunt etape de baz| în proiectarea
unei maşini secvenÛiale care urm|resc în principal comportarea în regim static.
Analiza circuitului obÛinut dup| o prim| iteraÛie de sintez|, realizat| de obicei
prin simulare în regim dinamic sau tranzitoriu, poate s| scoat| în evidenÛ|
efecte secundare nedorite în funcÛionarea normal| cum ar fi impulsurile,
tranziÛiile sau oscilaÛiile parazite din semnalele de ieşire. Caracteristicile
acestor fenomene parazite depind de structura blocului combinaÛional al
maşinii (determinat| de modul de codificare binar| a st|rilor), de sincronizarea
cu ceasul a semnalelor de intrare şi de decalajele dintre momentele de apariÛie
a frontului activ de ceas la fiecare bistabil. De asemenea, modificarea
condiÛiilor de operare a circuitului (tensiunea de alimentare, temperatura) şi
variaÛiile procesului tehnologic pot s| favorizeze abaterile de la funcÛionarea
dorit|.
2.3.1 Tratarea intr|rilor asincrone
Semnalele de intrare asincrone nu sunt corelate cu semnalul de ceas.
TranziÛiile L _ H şi H ` L la o intrare asincron| pot s| apar| la orice moment
faÛ| de frontul activ al ceasului iar propagarea acestora c|tre intr|rile sincrone
ale bistabililor (D, J, K) prezint| un potenÛial mare de înc|lcare a parametrilor
tsetup şi thold. Starea viitoare şi r|spunsul maşinii secvenÛiale nu mai sunt
predictibile; circuitul poate s| ajung| chiar şi într-o stare invalid|. Reducerea
riscului de funcÛionare defectuoas| se poate realiza prin sincronizarea cu ceasul
a tuturor intr|rilor asincrone, dup| cum se arat| în Fig.2.19.

Fig.2.19 Schem| de sincronizare a semnalelor asincrone


Circuite Logice SecvenÛiale Sincrone 59

Bistabilul de tip D produce la ieşirea Q impulsuri sincronizate cu fronturile


negative ale ceasului Ck; aceste impulsuri sunt întârziate faÛ| de cele de la
intrarea D cu cel mult o perioad| de ceas şi au o durat| egal| cu un multiplu
întreg de TCk. Impulsurile din semnalul asincron Inasinc care dureaz| mai puÛin
decât o perioad| de ceas şi care nu se intersecteaz| cu fronturile negative ale
ceasului sunt filtrate sau eliminate din semnalul sincronizat Insinc. Impulsurile
filtrate sunt în general parazite iar operaÛia este una util|.
Schimb|rile de nivel logic în semnalul Inasinc care se produc în vecin|tatea
frontului negativ de ceas (tsetup, thold) au un efect incert asupra ieşirii Q a
bistabilului. Sunt posibile urm|toarele situaÛii:
- ieşirea Q nu se modific|;
- Q comut| la noua valoare logic| impus| de tranziÛia de la intrarea Inasinc;
- frontul negativ de ceas declanşeaz| la ieşirea bistabilului un regim tranzitoriu
oscilant, comparabil ca durat| cu timpul de r|spuns tp Ck - Q.
În ultimul caz oscilaÛia poate s| aib| mai multe alternanÛe dar valoarea final|
este una valid|, 0 sau 1 logic.
OscilaÛiile care pot s| apar| în semnalul Insinc nu afecteaz| funcÛionarea
maşinii secvenÛiale dac| ele se sting cu suficient timp înainte de frontul pozitiv
de ceas. Dac| acest lucru nu se întâmpl| atunci fie se m|reşte perioada ceasului
fie se modific| schema de sincronizare ca în figura urm|toare.

Fig.2.20 Schem| de sincronizare cu doi bistabili

TranziÛiile semnalului Inasinc marcate cu linie mai groas| în diagramele de mai


sus au loc în vecin|tatea frontului negativ de ceas (tsetup, thold) şi pot s| produc|
60 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

oscilaÛii la ieşirea bistabilului dff_1. Aceste oscilaÛii sunt eliminate de


bistabilul dff_2. Impulsurile scurte care nu se intersecteaz| cu fronturile
negative ale ceasului Ck sunt filtrate de primul bistabil. Impulsurile de la
intrarea asincron| care se propag| prin cei doi bistabili ajung la intrarea maşinii
secvenÛiale cu o întârziere de maxim 2TCk.
O schem| de sincronizare care poate s| captureze din semnalul asincron
Inasinc şi impulsuri cu durate mici în comparaÛie cu perioada ceasului este
desenat| în Fig.2.21. Latch-ul are comenzile Set = Inasinc şi Reset = Insinc; în
raport cu ieşirea conectat| la intrarea bistabilului, comanda Set este prioritar|,
adic| S = R = 1 | D = 1.

Fig.2.21 Schem| de sincronizare cu capacitate de captur|

În diagrama de timp s-a considerat c| durata impulsurilor de intrare este


suficient de mare pentru a produce comutarea latch-ului şi c| la intrarea D a
bistabilului nu au loc tranziÛii L _ H sau H ` L în vecin|tatea frontului negativ
de ceas (tsetup, thold); de asemenea, s-au neglijat timpii de r|spuns ai bistabilului
şi latch-ului. Impulsurile de intrare notate cu 4 şi 5 sunt capturate în latch şi
“lungite” pân| dup| primul frontul negativ de ceas (tranziÛiile H ` L marcate
cu linie mai groas| în semnalul D). Impulsurile 2 şi 6 sunt filtrate; acestea ar
fi fost capturate în lipsa impulsurilor 1 şi respectiv 5.
Schema din Fig.2.21 poate s| captureze şi s| sincronizeze toate impulsurile
(high) din semnalul de intrare Inasinc dac| acestea sunt suficient de dep|rtate
între ele. Un exemplu de acest fel este ilustrat prin diagramele de timp din
Fig.2.22.
Circuite Logice SecvenÛiale Sincrone 61

Fig.2.22 Captur| şi sincronizare realizate de circuitul din Fig.2.21

Semnalul de intrare asincron poate s| produc| tranziÛii la intrarea bistabilului


D în vecin|tatea frontului negativ de ceas. OscilaÛiile care apar la ieşirea
bistabilului se pot filtra ad|ugând în schema circuitului înc| un bistabil, aşa
cum s-a procedat în Fig.2.20; aceast| modificare determin| o întârziere
suplimentar|, egal| cu perioada ceasului Ck, a semnalului Insinc.
Circuitul de sincronizare şi captur| din Fig.2.23 se aseam|n| cu cel
prezentat mai înainte îns| resetarea latch-ului se face în mod diferit, cu
impulsuri scurte faÛ| de perioada ceasului şi care sunt generate de un
monostabil neretriggerabil declanşat de frontul pozitiv de ceas.
SecvenÛele de intrare asincrone Inasinc considerate în diagramele din Fig.2.21 şi
Fig.2.23 sunt identice. Comparând r|spunsurile Insinc ale celor dou| circuite se
poate spune c| schema din Fig.2.23 nu filtreaz| nici un impuls din semnalul de
intrare; impulsurile care sunt insuficient de dep|rtate sunt transformate într-un
singur impuls de ieşire. DistanÛa minim| necesar| dintre dou| impulsuri (high)
consecutive la intrarea asincron| Inasinc pentru a se produce dou| impulsuri
(high) distincte la ieşirea sincron| Insinc este egal| cu perioada ceasului Ck.
ComparaÛia dintre r|spunsurile celor dou| circuite de sincronizare şi captur|
la semnalul de intrare asincron reprezentat de succesiunea celor şapte impulsuri
se poate face şi prin intermediul secvenÛelor de biÛi furnizaÛi la intrarea maşinii
secvenÛiale, fiecare având o durat| egal| cu perioada ceasului, astfel:
(Fig.2.21) Insinc = 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1
(Fig.2.23) Insinc = 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1
Ordinea biÛilor corespunde parcurgerii diagramelor de timp de la stânga la
dreapta. Virgula reprezint| frontul negativ al ceasului Ck.
R|spunsurile Insinc ale celor dou| circuite de sincronizare şi captur|
analizate anterior, la acelaşi semnal asincron de intrare Inasinc, sunt identice dac|
62 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Fig.2.23 Schem| de captur| şi sincronizare cu monostabil

impulsurile (high) consecutive din Inasinc sunt dep|rtate în timp la cel puÛin o
perioad| de ceas. Duratele impulsurilor pot s| fie oarecare şi în orice ordine.
DiferenÛe nepredictibile pot s| apar| numai dac| exist| tranziÛii la intr|rile
bistabililor de tip D (comandaÛi de latch-urle NAND-NAND) în vecin|tatea
fronturilor negative ale semnalului de ceas (tsetup, thold).

2.3.2 Clock skew


FuncÛionarea unui circuit secvenÛial sincron şi în particular a unei maşini
secvenÛiale are la baz| ipoteza c| frontul activ de ceas ajunge la fiecare bistabil
la acelaşi moment de timp, ceea ce va determina copierea în paralel a tuturor
biÛilor care formeaz| starea viitoare. Termenul clock skew este mai realist şi se
refer| la decalajele dintre momentele la care bistabilii primesc frontul activ de
ceas. Acest decalaj este dependent de structura reÛelei de distribuÛie a ceasului,
Circuite Logice SecvenÛiale Sincrone 63

format| în principal din buffere şi/sau inversoare, de frecvenÛa semnalului de


ceas (viteza de operare), de tipul de bistabil utilizat sau de capacit|Ûile din
intr|rile de ceas ale bistabililor, de temperatur| şi de tensiunea de alimentare
(condiÛiile de operare) dar şi de elementele parazite din layout şi de variaÛiile
procesului tehnologic.
Simetrizarea c|ilor de propagare a ceasului de la un anumit nod al reÛelei de
distribuÛie c|tre un grup de bistabili de interes constituie cel mai eficient mijloc
de compensare a decalajelor (clock skew). Simetrizarea c|ilor se realizeaz|
prin utilizarea aceluiaşi tip şi num|r de componente de circuit dar şi prin modul
de construire a layout-ului, adic| de plasare şi routare.
Efectele unui clock skew prea mare, care afecteaz| funcÛionarea normal|,
sunt ilustrate în urm|toarele dou| exemple.
În funcÛionarea normal| a circuitului din Fig.2.24 are loc loc un transfer al
datelor în serie, de la dff-1 la dff-2. Diagramele de timp asociate arat|
diferenÛele dintre r|spunsurile Q1, Q2 corecte şi cele eronate, cauzate de clock
skew.

Fig.2.24 Efectul clock skew la transferul datelor în serie


64 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

S-a considerat c| tranziÛiile semnalului asincron In nu au loc în vecin|tatea


fronturilor pozitive ale ceasului Ck1, (tsetup, thold). Altfel semnalul In trebuie
sincronizat cu ceasul Ck. Dac| clock skew este nul (∆t1 = ∆t2) atunci Q2 este
replica semnalului Q1 întârzit| cu o perioad| de ceas. Aceast| situaÛie este
normal| sau corect|. Valorile pozitive ale clock skew (∆t1 > ∆t2) au efecte
nesemnificative asupra ieşirii Out dac| sunt suficient de mici în comparaÛie cu
perioada ceasului. În schimb, valorile negative ale clock skew (∆t1 < ∆t2) care
sunt mai mari în valoare absolut| decât timpul de r|spuns tp Ck1-Q1 al bistabilului
dff-1 determin| o întârziere a ieşirii Out = Q2 faÛ| de Q1 egal| cu ∆t2 - ∆t1, mult
mai mic| decât TCk. Semnalele Q1 şi Q2 sunt aproape identice în acest caz iar
corecÛia acestei erori nu se poate face prin sincronizarea intr|rii In.
În funcÛionarea normal| (∆t1 = ∆t2) a circuitului din Fig.2.25 datele de la
intrarea In, care este sincronizat| cu frontul pozitiv al ceasului Ck, se transfer|
în paralel la cei doi bistabili (Q1 = Q2). Atât valorile negative cât şi cele
pozitive ale clock skew au efect asupra uneia dintre ieşirile Out1 sau Out2.

Fig.2.25 Efectul clock skew la transferul datelor în paralel


Circuite Logice SecvenÛiale Sincrone 65

În diagramele din Fig.2.25 s-a considerat ∆t1 < ∆t2; semnalul Q2 este afectat,
fiind deplasat spre stânga cu o perioad| de ceas. CorecÛia erorilor datorate
clock skew, ∆t1 < ∆t2 şi ∆t1 > ∆t2, se poate face în acest caz prin sincronizarea
intr|rii In cu frontul negativ al semnalului Ck şi nu cu cel pozitiv, cum s-a
considerat.

2.3.3 Hazardul
Sincronizarea intr|rilor asincrone şi compensarea clock skew, în ipoteza
c| parametrii tsetup şi thold ai fiec|rui bistabil în parte sunt respectaÛi, nu sunt
suficiente pentru ca r|spunsul unei maşini secvenÛiale s| nu conÛin| impulsuri
parazite, de scurt| durat| în comparaÛie cu perioada semnalului de ceas.
ApariÛia unor astfel de impulsuri nedorite este determinat| în principal de
întârzierile c|ilor de propagare din structura blocului combinaÛional al maşinii
(Fig.2.1) dar şi de modul de codificare binar| a st|rilor. TranziÛiile dintre st|ri
care implic| un num|r mai mare de schimb|ri ale valorilor logice din bistabili
au un potenÛial mai mare de manifestare a hazardului. Dac| nu sunt eliminate
sau filtrate, impulsurile parazite pot s| produc| erori în funcÛionarea blocurilor
conectate la ieşirile Out (Fig.2.1).
Hazardul poate s| apar| în circuite combinaÛionale foarte simple şi chiar
şi atunci când se modific| nivelul logic numai al unei singure variabile de
intrare. Un exemplu este prezentat în Fig.2.26.

Fig.2.26 Hazard produs de tranziÛia H ` L a variabilei c


66 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Diagramele de timp au fost desenate considerând c| toate cele 4 porÛi au


aceeaşi întârziere tp. Impulsul Low apare la ieşirea g datorit| întârzierilor
diferite ale c|ilor de propagare c-d-e-g şi c-f-g.
Dac| tp1, tp2, tp3, tp4 sunt întârzierile celor 4 porÛi ale schemei din Fig.2.26 atunci
durata impulsului (Low) parazit de la ieşirea g are valoarea tp1 + tp2 - tp3, în
ipoteza c| tp1 + tp2 > tp3. Dac| tp1 + tp2 < tp3 atunci impulsul (Low) parazit la
ieşirea g apare dup| tranziÛia pozitiv| a variabilei c şi are durata tp3 - tp1 - tp2. În
ambele cazuri durata impulsului parazit poate s| fie micşorat| semnificativ prin
echilibrarea întârzierilor tp1 + tp2 şi tp3. Acest lucru se realizeaz| “brut”, prin
alegerea unor porÛi echivalente cu 1, 2 şi 3 dar care s| aib| alte întârzieri şi
“fin”, prin intermediul elementelor parazite din layout. Orice impuls cu durat|
suficient de mic| este filtrat de capacit|Ûile parazite din nodurile circuitului iar
propagarea lui înceteaz|.
O alternativ| la aceast| tehnic| de eliminarea a hazardului prin echilibrarea
întârzierilor const| în introducerea redundanÛei structurale. FuncÛia logic| g,
considerat| ca exemplu în acest paragraf, are un cost minim de implementare
sau o arie minim|. FuncÛia G = ac̄ + bc + ab este echivalent| funcÛional cu g,
mintermenul ab fiind redundant. Aceste dou| funcÛii se obÛin prin grup|rile de
acoperire a unit|Ûilor aceleiaşi tabele de adev|r, dup| cum se arat| în Fig.2.27.

Fig.2.27 Sinteza funcÛiilor logice g şi G

Cât timp variabilele a şi b sunt menÛinute la nivelul logic 1, funcÛiile g şi G au


valorile c + c̄ şi respectiv 1. Hazard poate s| apar| numai la tranziÛiile
variabilei c în implementarea funcÛiei g.
Se pot face diverse comparaÛii între cele dou| metode de eliminare a
hazardului. Consumul de arie pare s| fie mai mare prin introducerea
redundanÛei structurale. Ambele metode necesit| un anumit efort manual de
calcul şi iteraÛii sintez|-simulare. Ajustarea layout-ului pentru a modifica
elementele RC parazite implic| un efort manual mai mare dar şi simul|ri post-
layout. Ambele metode pot fi utilizate în proiectarea aceluiaşi bloc secvenÛial.
Impulsurile parazite generate local şi care se propag| la intr|rile sincrone
Circuite Logice SecvenÛiale Sincrone 67

ale bistabililor din structura maşinii secvenÛiale nu afecteaz| funcÛionarea,


deoarece ele pot s| apar| numai dup| frontul activ de ceas şi dispar pân| la
urm|torul front activ.

2.4 Probleme rezolvate

1. a) S| se sintetizeze cu bistabili şi porÛi logice generatorul de semnale


periodice reprezentat prin simbolul din Fig.2.28a. Semnalele de ieşire Z şi Y
sunt desenate în diagramele din Fig.2.28b. Dac| este necesar, se poate utiliza
o intrare INIT de iniÛializare a circuitului, sincron| sau asincron|.
b) S| se repete punctul (a) pentru semnalele periodice desenate în diagramele
de timp din Fig.2.28c.

Figura 2.28
R e z o l v a r e:
a) Perioada semnalului Y este multiplu al perioadei semnalului Z, TY = 2TZ.
Generatorul de semnale poate fi modelat utilizând 6 st|ri valide, ceea ce
înseamn| c| sunt necesari 3 bistabili. Fie st0, st1, ..., st5 şi st6, st7 numele
(etichetele) st|rilor valide şi respectiv ale celor invalide; toate st|rile vor fi
68 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

codificate binar cu 3 biÛi (Q2Q1Q0). Alocarea st|rilor valide şi graful de


tranziÛie care modeleaz| funcÛionarea maşinii secvenÛiale sunt prezentate în
Fig.2.29. St|rile invalide sunt l|sate indiferente cu scopul de a reduce aria
ocupat|.

Figura 2.29

Arcele din graf sunt declanşate de fronturile pozitive de ceas. Valorile logice
ale ieşirilor Z şi Y nu sunt trecute în graf deoarece nu sunt constante pe durata
fiec|rei st|ri valide. Se pot scrie expresii “simbolice” pentru Z şi Y urm|rind
diagramele din Fig.2.29a, astfel:
Z = St0 Ck + St1 Ck + St2 Ck + St3 Ck + St4 Ck + St5 Ck,
Y = St1 + St2 Ck + St4 Ck.
În aceste expresii numele st|rilor scrise cu majuscul| (liter| mare) desemneaz|
câte o variabil| care ia valoarea logic| 1 numai pe durata acelei st|ri. De
exemplu, St3 = 1 cât timp circuitul se afl| în starea st3 iar în rest St3 = 0.
Expresiile finale dup| care se fac implement|rile funcÛiilor Z şi Y depind de
codificarea binar| a st|rilor. O variant| de codificare ce minimizeaz| num|rul
de tranziÛii la ieşirile celor 3 bistabili, la un parcurs complet al grafului din
Fig.2.29b este urm|toarea:
stare Q2Q1Q0
st0 000
st1 001
st2 011
st3 010
st4 110
st5 100
Circuite Logice SecvenÛiale Sincrone 69

Num|rul de tranziÛii este minim şi are valoarea 6. Aceast| codificare se va


utiliza mai departe la sinteza circuitului. F|r| a mai avea importanÛ|, codurile
invalide 101 şi 111 se atribuie st|rilor invalide st6 şi respectiv st7.
Din expresiile simbolice ale ieşirilor Z şi Y se obÛin expresiile logice:
Z = (St0 + St5)Ck + (St2 + St3)Ck + (St1 + St4)Ck =
= Q̄1Q̄0Ck + Q̄2Q1Ck + (Q̄2Q̄1Q0 + Q2Q1Q̄0)Ck =
= (Q̄1Q̄0 + Q̄2Q1)Ck + (Q̄2Q̄1Q0 + Q2Q1Q̄0)Ck,
Y = Q̄2Q̄1Q0 + Q1(Q2rQ0)Ck.
Tabelele de sintez| cu bistabili de tip JK şi ecuaÛiile de funcÛionare ale maşinii
secvenÛiale sunt prezentate în Fig.2.30.

Figura 2.30
70 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Graful complet de tranziÛie a st|rilor circuitului sintetizat este desenat în


Fig.2.31a. Din starea curent| 101 (st6) se obÛin valorile J2 = 0, K2 = 1, J1 = 1,
K1 = 0, J0 = 0, K0 = 0 iar starea viitoare este 011 (st2); din starea curent| 111
(st7) rezult| J2 = 0, K2 = 0, J1 = 1, K1 = 0, J0 = 0, K0 = 1 iar starea viitoare este
110 (st4). Maşina secvenÛial| nu se blocheaz| în st|rile invalide şi intr|
automat în subgraful format din st|rile valide, f|r| s| fie nevoie de vreo
comand| de iniÛializare sau de reset. Schema generatorului de semnale
periodice este desenat| în Fig.2.31b.

Figura 2.31

Dup| frontul pozitiv de ceas cel mai devreme se pot modifica valorile
logice de la intr|rile K2, J1, K1 şi K0 deoarece aceste intr|ri sunt conectate
direct la ieşiri de bistabil. Timpul de r|spuns tp Ck-QQ̄ al bistabililor este de
Circuite Logice SecvenÛiale Sincrone 71

regul| mai mare decât thold , astfel c| acest parametru este respectat; parametrul
tsetup se “gestioneaz|” prin intermediul perioadei semnalului de ceas. Pe lâng|
valoarea minim| a perioadei, bistabilii impun şi durate minime pentru palierele
ceasului, tHCk şi tLCk, sau un factor minim de umplere (duty cycle) tHCk/TCk.
În schema circuitului din Fig.2.31 implementarea ieşirilor nu urmeaz| în
mod direct expresiile logice Z = (Q̄1Q̄0 + Q̄2Q1)Ck + (Q̄2Q̄1Q0 + Q2Q1Q̄0)Ck şi
respectiv Y = Q̄2Q̄1Q0 + Q1(Q2rQ0)Ck. S-au f|cut diverse factoriz|ri pentru
reducerea ariei. De exemplu, produsul Q̄2Q̄1Q0 nu a fost implementat cu o
poart| NAND3 ci în forma (Q̄2Q̄1)Q0 (porÛile 1 şi 7). Mai mult, acest mintermen
este folosit în comun de Z şi Y.
Ambele ieşiri depind de Q2, Q1, Q0 şi de Ck. TranziÛiile variabilelor Q2, Q1, Q0
au loc dup| fronturile pozitive de ceas. Prin modul de codificare a st|rilor
fiecare front activ de ceas produce strict comutarea unui singur bistabil. Una
dintre condiÛiile necesare de generare a hazardului se poate scrie în forma
Z (sau Y) = X + X̄ sau Z (sau Y) = X@X̄
în care X poate fi oricare dintre Q2, Q1, Q0 sau Ck. O situaÛie de acest fel apare
la tranziÛia din st1 în st2 şi anume Y = Q1 + Q̄1; bistabilul 1 comut| din Q1 = 0
în Q1 = 1. TranziÛia pozitiv| de la Q1 se propag| la Y prin porÛile 14 şi 15 iar
tranziÛia negativ| de la Q̄1 se propag| la Y prin porÛile 1, 7 şi 15. Ajustarea
întârzierilor astfel încât tp14 > tp1 + tp7 şi nu invers sau introducerea redundanÛei
structurale sunt soluÛii de eliminare a hazardului produs la Y de comutarea
bistabilului 1. Exist| şi posibilitatea de a implementa ieşirea Y în alt fel:
Y = Q̄2Q̄1Q0 + Q1(Q2rQ0)Ck = (Q̄2Q̄1Q0 + Q̄2Q1Q0Ck) + Q2Q1Q̄0Ck =
= Q̄2Q0(Q̄1 + Q1Ck) + Q2Q1Q̄0Ck = Q̄2Q0(Q̄1 + Ck) + Q2Q1Q̄0Ck =
= Q̄2Q̄1Q0 + Q̄2Q0Ck + Q2Q1Q̄0Ck = Q̄2Q̄1Q0 + (Q̄2Q0 + Q2Q1Q̄0)Ck.
Pe durata st|rilor st1 şi st2 rezult| Y = Q̄1 + Ck deoarece Q2 = 0 şi Q0 = 1 iar
condiÛia de hazard menÛionat| mai sus nu mai este satisf|cut|. Dup| fiecare
front pozitiv de ceas,
Y = (Q̄2Q̄1Q0 + Q̄2Q0) + Q2Q1Q̄0 = Q̄2Q0 + Q2Q1Q̄0
şi nu apar condiÛii de hazard nici la tranziÛiile variabilelor Q2 şi Q0.
ObservaÛie:
CondiÛia de hazard X + X̄ sau X@X̄ este necesar| dar nu şi suficient|.De
exemplu, atunci când Q2 = Q0 = 0 (st0 şi st3), dup| frontul pozitiv de ceas se
obÛine expresia logic| Z = Q1 + Q̄1.
Mai sunt necesare dou| condiÛii pentru generarea unui impuls parazit (Low) la
ieşirea Z şi anume: 1) între st0 şi st3 s| existe tranziÛii în care se modific| Q1,
2) tp Q1-Z > tp Q̄1-Z sau tp Q1-Z < tp Q̄1-Z , în funcÛie de sensul tranziÛiei dintre st0 şi
st3. Hazard nu apare la Z deoarece nu exist| tranziÛii între st0 şi st3.
72 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

b) Între perioadele semnalelor Z şi Y nu mai exist| relaÛie de multiplicitate. Cel


mai mic multiplu comun al celor dou| perioade este 15TCk. O abordare de
modelare a funcÛion|rii circuitului asem|n|toare cu cea de la punctul (a)
necesit| 15 st|ri valide (4 bistabili). Alocarea st|rilor valide este indicat| în
diagramele de timp din Fig.2.32; starea invalid| are numele st15. Graful de
tranziÛie a st|rilor este format dintr-o singur| bucl| cu cele 15 st|ri valide,
succesiunea lor fiind ca în diagram|.

Figura 2.32

Se va utiliza urm|toarea codificare binar| a st|rilor:


stare Q3Q2Q1Q0
st0 0 0 0 0
st1 0 0 0 1
st2 0 0 1 1
st3 0 0 1 0
st4 0 1 1 0
st5 0 1 1 1
st6 0 1 0 1
st7 0 1 0 0
st8 1 1 0 0
st9 1 1 0 1
st10 1 1 1 1
st11 1 1 1 0
st12 1 0 1 0
st13 1 0 1 1
st14 1 0 0 1
st15 1 0 0 0
Circuite Logice SecvenÛiale Sincrone 73

Num|rul de comut|ri ale bistabililor la o parcurgere complet| a grafului este


16. Tabelele de adev|r ale funcÛiilor Z şi Y împreun| cu grup|rile de acoperire
a zerourilor şi unit|Ûilor şi expresiile logice minimizate sunt prezentate în
Fig.2.33. Starea invalid| st15 este l|sat| liber| (indiferent|).

Figura 2.33

Tabelele de sintez| cu bistabili de tip D şi ecuaÛiile de funcÛionare ale maşinii


secvenÛiale sunt prezentate în Fig.2.34.

Figura 2.34

Din tabelele de mai sus se observ| c| maşina nu se blocheaz| în starea


invalid|; dac| starea curent| este st15 (1000), frontul activ de ceas urm|tor
determin| trecerea în starea valid| st0 (0000). Nu este necesar| comanda de
iniÛializare sau de reset.
CondiÛia necesar| de generare a hazardului, X + X̄ sau X@X̄, nu apare la
ieşirea Z; în niciuna dintre cele 16 st|ri nu se obÛine Z = Q2Q̄2 sau Z = Q0Q̄0.
La ieşirea Y pot s| apar| impulsuri parazite la comutarea fiec|rui bistabil, în
afar| de bistabilul 0, deoarece:
74 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

- Y = Q3 + Q̄3 când Q2 = 1, Q1 = 0, Q0 = 0 (st7, st8) şi exist| tranziÛie de la st7


la st8 în care se modific| Q3 de la 0 la 1;
- Y = Q2 + Q̄2 când Q3 = 0, Q1 = 1, Q0 = 0 (st3, st4) şi exist| tranziÛie de la st3
la st4 în care se modific| Q2 de la 0 la 1;
- Y = Q1 + Q̄1 când Q3 = 1, Q2 = 0 (st12, st13, st14, st15).şi exist| tranziÛie de
la st13 la st14 în care se modific| Q1 de la 1 la 0.
În fiecare din aceste trei cazuri se poate genera impuls (Low) parazit la ieşirea
Y dac| suplimentar, sunt îndeplinite şi condiÛiile de întârziere
tp Q3 -Y > tp Q̄3 -Y, tp Q2 -Y > tp Q̄2 -Y şi respectiv tp Q1 -Y < tp Q̄1 -Y.
Dac| inegalit|Ûile de mai sus se inverseaz| atunci impulsurile parazite
corespunz|tore de la ieşire nu mai apar. Echilibrarea întârzierilor c|ilor de
propagare const| în egalizarea perechilor de timpi de propagare din relaÛiile de
mai sus şi poate fi utilizat| ca m|sur| de eliminare a hazardului numai atunci
când exist| tranziÛii bidirecÛionale între st|rile implicate şi nu unidirecÛionale
ca în acest exemplu de sintez|.
Prin introducerea redundanÛei structurale se urm|reşte neîndeplinirea
condiÛiilor necesare de tip X + X̄ sau X@X̄, ca m|sur| alternativ| de eliminare a
hazardului. Tabela de adev|r a funcÛiei Y are o structur| foarte simpl|. Chiar
şi în astfel de cazuri, grup|rile de acoperire orientate pe minimizarea ariei
ocupate pot s| produc| un potenÛial mare de generare a hazardului. Dac| pentru
eliminarea hazardului se utilizeaz| numai redundanÛa structural| atunci câştigul
de arie obÛinut prin minimizare poate fi anulat; mintermenii redundanÛi care ar
trebui ad|ugaÛi în expresia funcÛiei Y sunt
St7 + St8 = Q2Q̄1Q̄0
St3 + St4 = Q̄3Q1Q̄0
St13 + St14 = Q3Q̄2Q0.
În tabela de adev|r a funcÛiei Y din Fig.2.35a sunt marcate cu linie continu|
grup|rile iniÛiale f|cute în Fig.2.33 şi cu linie întrerupt| grup|rile
corespunz|toare mintermenilor redundanÛi de mai sus. Gruparea iniÛial|
format| din unit|Ûile de pe linia 2 nu mai este necesar|. Noua expresie a
funcÛiei este
Y = '(() = Q3Q̄1 + Q̄2Q1 + Q2Q̄1Q̄0 + Q̄3Q1Q̄0 + Q3Q̄2Q0.
Aria ocupat| este aproape dubl| faÛ| de cea minim| îns| se obÛine o
“imunitate” faÛ| de valorile întârzierilor din circuit, ceea ce uneori constituie
un avantaj major.
Minimizarea funcÛiei Y în forma ((') sau prin acoperirea zerourilor este
ilustrat| în Fig.2.35b. Cele 3 grup|ri pot fi reprezentate şi sub forma st0·st1,
st6·st5 şi respectiv st10·st11. Între aceste 6 st|ri nu exist| decât tranziÛiile
st0 | st1, st5 | st6 şi st10 | st11 astfel c| niciun maxtermen redundant nu
Circuite Logice SecvenÛiale Sincrone 75

este necesar, deoarece


Y = ((') = (st0·st1)(st6·st5)(st10·st11) =
= (Q3 +Q2 +Q1)(Q3 +Q̄2 +Q̄0)(Q̄3 +Q̄2 +Q̄1)
nu are hazard. CondiÛia de hazard X@X̄ este satisf|ct| în dou| situaÛii
- Y = Q3Q̄3 când Q2 = 1, Q1 = 1, Q0 = 1 (st5, st10)
- Y = Q2Q̄2 când Q3 = 0, Q1 = 0, Q0 = 1 (st1, st6)
dar nu exist| tranziÛii între st5 şi st10, nici între st1 şi st6. Minimizarea în
forma ((') este mai avantajoas| ca arie ocupat| decât în forma '(().

Figura 2.35

O implementare a generatorului de semnale periodice Z, Y cu perioadele


TZ = 3TCk şi TY = 5TCk, diferit| de cea prezentat|, este indicat| în Fig.2.36.

Figura 2.36

Semnalele Z şi Y sunt generate de maşinile secvenÛiale FSMA şi respectiv


FSMB, sincronizate de acelaşi front al ceasului Ck. Alocarea st|rilor valide
76 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

este indicat| în diagramele de timp din Fig.2.36. Num|rul de bistabili necesari


pentru implementarea celor dou| maşini este 2 + 3 = 5, cu unul mai mult decât
în soluÛia anterioar|. Sincronizarea maşinilor nu este suficient| pentru corelarea
semnalelor Z şi Y ca în diagrame; este nevoie şi de un semnal de iniÛializare,
sincron sau asincron, care s| forÛeze una dintre urm|toarele perechi de st|ri:
(stA0, stB0), (stA1, stB1), (stA2, stB2), (stA0, stB3), (stA1, stB4).

2. S| se sintetizeze cu bistabili şi porÛi logice maşina secvenÛial| din


Fig.2.37 care s| genereze semnalul periodic Z, cu perioada şi factorul de
umplere controlate de intr|rile CT şi respectiv CF dup| cum se arat| în tabelele
al|turate simbolului maşinii. Dac| este necesar, se poate utiliza o intrare INIT
de iniÛializare a circuitului, sincron| sau asincron|.

Figura 2.37

R e z o l v a r e:
Cele 4 combinaÛii de 2 biÛi care se pot aplica la intr|rile CT, CF definesc 4
moduri de operare a circuitului. Perioada cea mai mare a semnalului de ieşire
fiind 7TCk sunt necesare şi suficiente 7 st|ri valide pentru a modela
funcÛionarea maşinii. Graful de tranziÛie a st|rilor este desenat în Fig.2.38.
Valorile asociate arcelor au semnificaÛia CTCF/Z.

Figura 2.38
Circuite Logice SecvenÛiale Sincrone 77

Graful modeleaz| o maşin| Mealy deoarece la tranziÛiile din st2 în st3 valoarea
ieşirii Z depinde de valoarea intr|rii CF. Num|rul necesar de bistabili este 3.
Calculele care urmeaz| se bazeaz| pe codificarea binar|
stare Q2Q1Q0
st0 000
st1 001
st2 011
st3 010
st4 110
st5 111
st6 101
st7 1 0 0 (starea invalid|).

Tabelele de sintez| cu bistabili de tip D sunt prezentate în Fig.2.39.

Figura 2.39

EcuaÛiile de funcÛionare care se obÛin în conformitate cu grup|rile indicate în


tabele sunt:
D2 = Q̄2Q1Q̄0 + Q2Q1CT
D1 = Q̄2Q0 + Q̄2Q1 + Q1Q̄0CT
D0 = Q̄2Q̄1 + Q2Q1CT
Z = Q̄2Q̄1 + Q̄2Q0CF
Din graful complet de tranziÛie a st|rilor desenat în Fig.2.40 rezult| c| nu este
78 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

necesar| comanda de iniÛializare; maşina intr| automat în regiunea valid| de


funcÛionare. Schema circuitului este reprezentat| în Fig.2.41.

Figura 2.40

Figura 2.41

CondiÛia de hazard X + X̄ nu se îndeplineşte în expresia logic| a ieşirii Z pentru


niciuna dintre variabilele locale Q2, Q1, Q0, îns| hazardul prezent la intrarea CF
se poate propaga la Z. Astfel, dac| Q2 = 0, Q1 = 1 şi Q0 = 1 (st2) atunci Z = CF.
O maşin| secvenÛial| de tip Moore se poate obÛine prin ad|ugarea unei
st|ri valide în graful din Fig.2.38. Graful de tranziÛie modificat, corespunz|tor
maşinii Moore, este desenat în Fig.2.42. În sinteza noului circuit se pot utiliza
fie bistabili D fie JK. De asemenea, st|rile pot fi codificate binar în alt mod
decât în cel folosit mai înainte; num|rul de variante este 8! (permut|ri de 8).
Maşina Moore modelat| prin graful din Fig.2.42 nu are st|ri invalide, astfel c|
Circuite Logice SecvenÛiale Sincrone 79

Figura 2.42

nu este necesar| comanda de iniÛializare, indiferent de orientarea arcelor


invalide CTCF = 0( care pleac| din st|rile st5 şi st6.
Prin intermediul intr|rilor de control CTCF se selecteaz| unul din cele 4
moduri de operare ale maşinii. În regim normal de funcÛionare valorile logice
aplicate la intr|rile CTCF se menÛin pe intervale de timp relativ mari.
Schimbarea modului de operare reprezint| un regim tranzitoriu de funcÛionare.
Cu ajutorul grafului complet de tranziÛie a st|rilor din Fig.2.40 se poate
determina r|spunsul Z la orice variaÛie în timp a biÛilor de control CTCF. Un
exemplu este ilustrat în Fig.2.43; s-a considerat c| starea iniÛial| este st5.

Figura 2.43

3. S| se sintetizeze cu bistabili JK şi porÛi logice maşina secvenÛial| din


Fig.2.44a care s| genereze semnalul neperiodic Z în conformitate cu diagramele
de timp desenate în Fig.2.44b. Duratele nivelelor logice H şi L aplicate la
intrarea X pot fi oricât de mari. Dou| impulsuri H de comand| consecutive,
suficient de dep|rtate în timp între ele, produc r|spunsuri diferite; impusurile
80 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Figura 2.44
de comand| impare (primul, al treilea, etc) produc r|spunsul Zimpar iar cele pare
(al doilea, al patrulea, etc) r|spunsul Zpar. Dac| este necesar, se poate utiliza o
intrare de iniÛializare a circuitului, sincron| sau asincron|.
R e z o l v a r e:
Alocarea st|rilor valide este indicat| în diagramele de timp din figura
urm|toare.

Figura 2.45

Circuitul are patru st|ri de “aşteptare” şi anume s0, s6, s7 şi s13. În st|rile s0
şi s7 se aşteapt| tranziÛia pozitiv| la intrarea X iar în st|rile s6 şi s13 se aşteapt|
tranziÛia negativ| la intrarea X. Num|rul necesar de bistabili este 4; st|rile s14
şi s15 sunt invalide. Graful de tranziÛie a st|rilor este desenat în Fig.2.46;
Circuite Logice SecvenÛiale Sincrone 81

st|rile invalide sunt l|sate libere. Valorile asociate arcelor au semnificaÛia X/Z.

Figura 2.46

Pentru sinteza maşinii se va utiliza urm|toarea codificare binar| a st|rilor:


stare Q3Q2Q1Q0
s0 0 0 0 0
s1 0 0 0 1
s2 0 0 1 1
s3 0 0 1 0
s4 0 1 1 0
s5 0 1 1 1
s6 0 1 0 1
s7 0 1 0 0
s8 1 1 0 0
s9 1 1 0 1
s10 1 1 1 1
s11 1 1 1 0
s12 1 0 1 0
s13 1 0 1 1
s14 1 0 0 1
s15 1 0 0 0
Expresia logic| a ieşirii Z se poate determina pornind de la expresia simbolic|
S3 + S5 + S8 + S12 (aceste 4 variabile au valoarea 1 numai pe durata st|rii s3,
s5, s8 şi respectiv s12):
Z = Q̄3Q̄2Q1Q̄0 + Q̄3Q2Q1Q0 + Q3Q2Q̄1Q̄0 + Q3Q̄2Q1Q̄0 =
= Q̄2Q1Q̄0 + Q2(Q̄3Q1Q0 + Q3Q̄1Q̄0)
CondiÛia de hazard nu este îndeplinit| de niciuna dintre variabilele Q3, Q2, Q1,
82 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Q0. De asemenea, hazardul de la intrarea X nu se poate propaga la ieşirea Z


deoarece maşina este de tip Moore.
Tabelele de sintez| cu bistabili JK sunt prezentate în Fig.2.47.

Figura 2.47
Circuite Logice SecvenÛiale Sincrone 83

Figura 2.47 (continuare)

Graful complet de tranziÛie a st|rilor este desenat în Fig.2.48. În starea


invalid| s14 (Q3Q2Q1Q0 = 1001) rezult|
Z = 0, J3 = 0, K3 = X̄, J2 = K2 = 0, J1 = 1, K1 = X̄, J0 = 1, K0 = 0;
84 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

în starea invalid| s15 (Q3Q2Q1Q0 = 1000) rezult|


Z = 0, J3 = 0, K3 = 1, J2 = K2 = 0, J1 = 0, K1 = X̄, J0 = 1, K0 = 0.

Figura 2.48

Maşina nu se blocheaz| în st|rile invalide. În lipsa unei intr|ri de iniÛializare,


dup| conectarea tensiunii de alimentare, circuitul poate fi adus într-una din cele
4 st|ri de aşteptare menÛinând o valoare constant| la intrarea X. Astfel, dac| se
menÛine X = 0 maşina ajunge dup| cel mult 6 perioade de ceas fie în starea s0,
fie în starea s7; dac| se menÛine X = 1 maşina ajunge dup| cel mult 6 perioade
de ceas fie în starea s6, fie în starea s13. Dac| este obligatoriu ca starea iniÛial|
s| fie s0 se poate proceda în dou| moduri:
- se utilizeaz| 4 bistabili cu intrare de reset (sincron| sau asincron|) şi un
semnal de iniÛializare;
- numai bistabilul 2 are intrare asincron| de reset iar iniÛializarea maşinii se
face în dou| etape: cu resetul inactiv se menÛine X = 0 cel puÛin 6 perioade de
ceas, starea obÛinut| fiind s0 sau s7, dup| care se activeaz| şi dezactiveaz|
resetul (un singur impuls) menÛinând X = 0.
Dup| tranziÛiile din s0 în s1 şi din s7 în s8 r|spunsul Z devine
independent de variaÛiile intr|rii X pân| când maşina ajunge în s5 şi respectiv
în s12. Diagramele de timp de mai jos ilustreaz| acest lucru.

Figura 2.49
Circuite Logice SecvenÛiale Sincrone 85

Implementarea direct| a expresiilor obÛinute pentru Z, J3, K3, J2, K2, J1, K1, J0
şi K0 necesit| 26 de porÛi logice.

4. S| se sintetizeze cu bistabili şi porÛi logice maşina secvenÛial| din


Fig.2.50a care s| funcÛioneze în conformitate cu diagramele de timp desenate
în Fig.2.50b. Duratele nivelelor logice H şi L aplicate la intrarea X pot fi oricât
de mari. Cât timp X = 1 la ieşirea Z se genereaz| un semnal periodic cu
perioada 3TCk şi factorul de umplere 1/3; pe palierul X = 0 r|spunsul Z este un
singur impuls high cu durata 2TCk. IniÛializarea maşinii se realizeaz| menÛinând
intrarea X la valoarea 0 suficient timp

Figura 2.50

R e z o l v a r e:
Alocarea st|rilor valide ilustrat| în diagramele de timp din Fig.2.51 va produce
o maşin| secvenÛial| de tip Moore.

Figura 2.51
86 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Graful de tranziÛie a st|rilor este desenat în Fig.2.52. Valorile asociate arcelor


au semnificaÛia X/Z.

Figura 2.52

Din orice stare valid| circuitul ajunge în starea s0 dac| X se menÛine la


valoarea 0 cel puÛin 4 perioade de ceas. Starea s0 poate fi considerat| stare
iniÛial|. Calculele care urmeaz| se bazeaz| pe urm|toarea codificarea binar|:
stare Q2Q1Q0
st0 000
st1 001
st2 011
st3 010
st4 110
st5 111
st6 101
st7 1 0 0 (starea invalid|).

Tabelele de sintez| cu bistabili de tip D sunt prezentate în Fig.2.53. Starea


invalid| este l|sat| liber|.

Figura 2.53
Circuite Logice SecvenÛiale Sincrone 87

Se obÛin urm|toarele expresii logice:


D2 = Q1 X̄ + Q̄2Q0 X̄
D1 = Q̄2Q0 + Q1 Q̄0 X̄
D0 = Q2Q1 + Q̄0 X + Q̄1 X
Z = S3 + (S5 + S6) = Q̄2Q1Q̄0 + Q2Q0
Graful complet de tranziÛie a st|rilor şi schema circuitului sunt prezentate în
figurile 2.54 şi respectiv 2.55.

Figura 2.54

Figura 2.55
88 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Ieşirea Z nu este afectat| de hazard deoarece nu depinde în mod explicit de


intrarea X iar condiÛia de hazard nu este îndeplinit| de niciuna dintre variabilele
Q2, Q1, Q0.

5. Circuitul logic secvenÛial sincron din Fig.2.56a, compus din latch-urile


A, B şi din maşina secvenÛial| FSM, are funcÛionarea urm|toare. Când
semnalul Start (sincron cu frontul negativ de ceas) are nivelul High, ieşirea Out
(sincron| cu frontul pozitiv de ceas) este pus| la 0 logic iar latch-urile sunt
transparente. Dup| ce intrarea Start cap|t| valoarea logic| 0 şi se menÛine la
0, cele dou| latch-uri se “z|vor|sc” iar maşina FSM intr| într-unul din cele 3
moduri de operare definite de biÛii QAQB stocaÛi în latch-uri dup| cum urmeaz|:
QAQB operaÛie
0 0 divizor de frecvenÛ| cu 3,
0 1 generator de semnal cu perioada 5TCk,
1 0 generator de semnal neperiodic.
CombinaÛia QAQB = 11 nu se utilizeaz|. Detalii despre aceste moduri de
operare sunt prezentate în diagramele de timp din Fig.2.56b.
S| se sintetizeze cu bistabili de tip D (f|r| comenzi SET, RESET) şi porÛi
logice maşina FSM şi s| se analizeze circuitul obÛinut.

Figura 2.56
Circuite Logice SecvenÛiale Sincrone 89

R e z o l v a r e:
Blocarea sau “z|vorârea” latch-urilor A, B când Start = 0 împiedic|
propagarea hazardului de la intr|rile In1, In2 c|tre maşina FSM. De asemenea,
respectarea parametrilor tsetup şi thold ai bistabililor din FSM nu este condiÛionat|
de variabilele QA şi QB ci doar de structura intern| a maşinii.
Alocarea st|rilor valide indicat| în diagramele de timp din Fig.2.57
corespunde unei maşini secvenÛiale de tip Moore.

Figura 2.57

Graful de tranziÛie a st|rilor este desenat în Fig.2.58. Valorile asociate arcelor


au semnificaÛia Start QAQB/Out. Num|rul necesar de bistabili este 4. Arcele
trasate cu linie mai groas| corespund celor 3 moduri de operare şi st|rii de
aşteptare s0. Cu Start = 1 se face iniÛializarea maşinii în starea s0, operaÛia
fiind sincronizat| cu frontul pozitiv de ceas.
Arcele care nu apar în graful de tranziÛie a st|rilor (arcele invalide) nu au nici
o influenÛ| asupra celor trei moduri de operare ale maşinii FSM deoarece cât
timp Start = 0 valorile logice ale variabilelor QA şi QB nu se modific|. La
sinteza circuitului arcele invalide care au eticheta Start = 0 pot fi l|sate libere
(indiferente), ceea ce constituie un câştig potenÛial de arie; dup| sintez|,
analiza acestor arce nu mai este necesar| în acest caz.
Arcele invalide Start QAQB = 011 corespund unui mod de operare invalid.
90 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Figura 2.58

Pentru sinteza maşinii FSM se va utiliza urm|toarea codificare binar| a st|rilor:


stare Q3Q2Q1Q0
s0 0 0 0 0
s1 0 0 0 1
s2 1 0 0 1
s3 1 0 0 0
s4 0 1 0 0
s5 0 1 1 0
s6 1 1 1 0
s7 1 0 1 0
s8 0 0 1 0
s9 1 1 0 0
s10 1 0 1 1
s11 0 0 1 1
s12 0 1 0 1
s13 1 1 0 1
s14 1 1 1 1
s15 0 1 1 1

Num|rul de comut|ri ale bistabililor din structura FSM pe buclele s1-s2-s3-s1,


s4-s5-s6-s7-s8-s4 este 4 şi respectiv 6; aceste valori sunt cele mai apropiate
posibil faÛ| de minimele 3 şi respectiv 5. Num|rul de comut|ri la parcurgerea
secvenÛei s9-s10-s11-s12-s13-s14-s15 este 9, cu 3 mai mare decât minimul 6.
Fie S0, S1, S5, S8, S11 şi S15 variabile care au valoarea logic| 0 numai pe
durata st|rii s0, s1, s5, s8, s11 şi respectiv s15. Aceste 6 st|ri au fost codificate
Circuite Logice SecvenÛiale Sincrone 91

astfel încât s| se obÛin| o expresie cât mai simpl| pentru ieşirea Out:
Out = ((') = S0@S1@S5@S8@S11@S15 = (S0@S1@S8@S11)@(S5@S8@S11@S15),
Out = (Q3 + Q2)(Q3 + Q̄1) = Q3 + Q2Q̄1.
La tranziÛiile care se produc prin comutarea unui singur bistabil nu se
genereaz| hazard la ieşirea Out deoarece condiÛia necesar| de hazard X + X̄ sau
X·X̄ nu este îndeplinit| de niciuna dintre variabilele Q3, Q2, Q1 care apar în
expresia logic| de mai sus. La tranziÛia s8 Y s4 comut| simultan bistabilii 2 şi
1 iar Out = Q2Q̄1. La ieşirea Out se produce o singur| tranziÛie, din 0 în 1,
indiferent de care dintre bistabili comut| primul. O situaÛie identic| apare la
tranziÛia s11 Y s12. La tranziÛia s9 Y s10 comutarea simultan| a bistabililor 1
şi 2 nu are efect asupra ieşirii deoarece Out = Q3 = 1. La tranziÛia s0 Y s9
comut| simultan bistabilii 3 şi 2, ambii din 0 în 1; indiferent de care dintre
aceştia comut| primul, are loc o singur| tranziÛie la ieşire (din 0 în 1). Astfel,
prin modul de alocare şi codificare a st|rilor maşinii, ieşirea Out nu este
afectat| de hazard.
Tabelele de sintez| cu bistabili de tip D sunt prezentate în Fig.2.59; toate arcele
invalide, care nu sunt reprezentate în Fig.2.58, sunt l|sate libere.

Figura 2.59
92 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Figura 2.59 (continuare)


Grup|rile efectuate în tabelele de mai sus determin| expresiile logice
D3 = Start· (QAQ̄1 + Q̄AQ̄2Q0 + Q̄AQ2Q1)
D2 = Start· (QAQ̄3 + QBQ̄3 + Q2Q0)
D1 = Start· (Q̄AQ2 + QAQ3 + Q3Q1 + Q2Q1)
D0 = Start· Q̄B· (Q̄A + Q2 + Q1)· (QA + Q3 + Q0).
Comportarea maşinii secvenÛiale în modul de operare invalid (QAQB = 11) se
poate determina fie prin calcul cu ajutorul relaÛiilor de mai sus, fie prin
identificarea direct| a valorilor logice atribuite simbolurilor ( în tabelele de
sintez| dup| efectuarea grup|rilor de acoperire. Rezult| c| dup| tranziÛia
negativ| a semnalului Start, st|rile maşinii se succed periodic în modul
urm|tor:
s0 Y s9 Y s7 Y s8 Y s4 Y s9 Y s7 Y s8 Y s4 Y s9 ...
La ieşirea Out se obÛine un semnal cu perioada 4TCk şi factorul de umplere 3/4:
0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, ...
În acest şir virgula reprezint| frontul pozitiv al ceasului Ck iar prima valoare
0 este generat| în starea s0; tiparul de periodicitate este 1, 1, 0, 1.
Circuite Logice SecvenÛiale Sincrone 93

Schema circuitului este desenat| în Fig.2.60. Latch-urile A şi B nu sunt


reprezentate ci doar ieşirile lor, QA şi respectiv QB.

Figura 2.60

Deoarece QA şi QB au valori constante dup| ce Start trece în 0 logic, nu


este obligatoriu ca cele trei moduri de operare valide s| fie modelate cu seturi
disjuncte de st|ri; st|rile alocate unui mod de operare pot fi realocate şi altor
moduri de operare. Procedând în acest mod, num|rul de st|ri valide necesar
pentru modelarea maşinii secvenÛiale se micşoreaz|. Ca urmare, este posibil ca
şi num|rul necesar de bistabili s| scad|, ceea ce conduce la un câştig de arie.
94 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Maşina secvenÛial| care se obÛine prin realocarea st|rilor este de tip Mealy.
Numai 8 st|ri valide sunt necesare pentru a modela maşina FSM, dup| cum se
arat| în diagramele din Fig.2.61.

Figura 2.61

Graful de tranziÛie a st|rilor este desenat în Fig.2.62.

Figura 2.62
Circuite Logice SecvenÛiale Sincrone 95

La sintez|, arcele care nu sunt reprezentate în graful de tranziÛie pot fi l|sate


libere (indiferente). Se va utiliza urm|toarea codificare binar| a st|rilor
maşinii:
stare Q2Q1Q0
s0 000
s1 001
s2 011
s3 010
s4 110
s5 111
s6 101
s7 1 0 0.

Tabelele de sintez| sunt prezentate în Fig.2.63.

Figura 2.63
96 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

În conformitate cu grup|rile de acoperire din tabelele de sintez| de mai sus, se


obÛin urm|toarele ecuaÛii de funcÛionare ale maşinii FSM:
D2 = Start·(Q2 + QAQ1Q̄0 + QBQ1Q̄0)
D1 = Start·( Q̄2Q0 + QAQ1Q̄0 + QBQ1)
D0 = Start·(Q2Q1 + Q̄2Q̄1 + Q̄AQ̄BQ̄0) = Start·(Q2rQ1 + QA + QB + Q0).
Out = Start·(Q1 + Q0)(QA + QB + Q1)·QBQ1Q0 ·QAQ̄2Q̄0.
Schema circuitului este desenat| în Fig.2.64.

Figura 2.64

Analiza de hazard la ieşirea Out se poate face separat, în fiecare din cele trei
moduri de operare, deoarece QA şi QB nu se pot modifica dup| ce semnalul
Start cap|t| valoarea logic| 0. Expresiile logice ale ieşirii Out, caracteristice
Circuite Logice SecvenÛiale Sincrone 97

modurilor de operare valide sunt:


Start QAQB = 000 Y Out = Q1 (Q1 + Q0) = Q1
Start QAQB = 001 Y Out = (Q1 + Q0)·Q1Q0 = Q1rQ0
Start QAQB = 010 Y Out = (Q1 + Q0)(Q2 + Q0).
La tranziÛiile care implic| comutarea unui singur bistabil nu se genereaz|
hazard la ieşirea Out în niciunul din cele trei moduri de operare. La tranziÛia
s3 Y s1 comut| bistabilii 1 şi 0; aceast| tranziÛie are loc în modul de operare
QAQB = 00 şi nu apare hazard la ieşire (Out = Q1). La tranziÛia s5 Y s1 (modul
de operare QAQB = 01) comut| simultan bistabilii 2 şi 1; ieşirea Out nu
depinde de Q2 şi nu este afectat| de hazard. De asemenea, dac| semnalul Start
comut| la nivelul logic 1, chiar dac| latch-urile A şi B devin transparente, nu
apare hazard la ieşire deoarece aceasta este forÛat| la nivelul logic 0.
În modul de operare invalid (QAQB = 11), dup| ce Start comut| la 0 logic,
st|rile maşinii FSM se succed astfel:
s0 Y s1 Y s2 Y s3 Y s4 Y s5 Y s5 Y s5 ...
La ieşirea Out se genereaz| secvenÛa neperiodic| : 0, 1, 0, 0, 1, 0, 0, 0, ...

6. S| se sintetizeze o maşin| secvenÛial| care s| realizeze comparaÛia a


dou| numere binare f|r| semn A = anan-1an-2...a1a0 şi B = bnbn-1bn-2...b1b0, unde
n este un num|r natural oricât de mare. OperaÛia începe dup| tranziÛia negativ|
a unui semnal de control Enable şi dureaz| atât timp cât Enable = 0. Pe durata
unei perioade de ceas este disponibil| numai o singur| pereche de biÛi (aj, bj),
începând de la rangul cel mai mare (j = n) câtre rangul 0.Rezultatul
comparaÛiei, A < B sau A = B sau A > B, se valideaz| dup| tranziÛia pozitiv|
a semnalului Enable şi se menÛine pe intervalul de timp cât Enable = 1. O nou|
comparaÛie începe dup| ce Enable comut| în 0 logic.
R e z o l v a r e:
Simbolul maşinii este reprezentat în Fig.2.65.

Figura 2.65

Dup| ce intrarea Enable comut| în 1 logic, una şi numai una dintre cele 3 ieşiri
ale circuitului se activeaz| (High); cât timp Enable = 0 valorile logice de la
98 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

ieşiri nu au relevanÛ| şi nu sunt luate în considerare.


Maşina secvenÛial| poate s| fie modelat| de urm|torul graf de tranziÛie a
st|rilor. Valorile asociate arcelor au semnificaÛia Enable aj bj /Out1 Out2 Out3.

Figura 2.66

Palierele Low ale semnalului Enable trebuie s| aib| durata (n + 1)TCk. Se va


utiliza urm|toarea codificare binar| a st|rilor maşinii:
stare Q2Q1Q0 (3 bistabili)
s0 000
s1 001
s2 011
s3 010
s4 101
s5 111
s6 110
s7 1 0 0 (stare invalid|).
Tabelele de sintez| cu bistabli de tip D sunt prezentate în Fig.2.67. Cele 4 arce
invalide (Enable aj bj = 1(() care pleac| din starea s0 şi toate arcele care
pleac| din starea invalid| s7 sunt l|sate libere. EcuaÛiile de funcÛionare ale
circuitului sunt urm|toarele:
D2 = Enable
D1 = (Enable + Q̄2)(Q1 + Q̄0)(Enable + aj + b̄j + Q1)(Enable + aj + b̄j + Q̄0)
D0 = (Enable + Q̄2)(Q̄1 + Q0)(āj + bj + Q0)(Enable + āj + bj + Q̄1)
Out1 = Q̄1 , Out2 = Q1Q0 , Out3 = Q̄0 (maşin| de tip Moore).
Circuite Logice SecvenÛiale Sincrone 99

Figura 2.67

Niciuna dintre cele 3 ieşiri nu este afectat| de hazard. Graful complet de


100 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

tranziÛie a st|rilor este desenat în Fig.2.68.

Figura 2.68
Dup| conectarea tensiunii de alimentare, menÛinând o valoare constant| la
intrarea Enable, maşina poate s| ajung| şi s| aştepte în orice stare în afar| de
s0 şi s7. Dac| se porneşte cu Enable = 1 atunci, dup| primul front activ de ceas,
maşina ajunge într-una din st|rile s4, s5 sau s6; acest prim rezultat de la ieşirile
circuitului trebuie neglijat. ComparaÛiile operanzilor A, B încep de la primul
palier Enable = 0 iar o comand| suplimentar| de reset nu este necesar|.
Schema circuitului este reprezentat| în Fig.2.69.

Figura 2.69
Circuite Logice SecvenÛiale Sincrone 101

ObservaÛii:
1) Starea s2 nu este necesar|. Rolul acesteia poate fi suplinit de starea s0, aşa
cum se arat| în graful de tranziÛie simplificat, desenat în Fig.2.70.

Figura 2.70

2) Una dintre cele 3 ieşiri Out1, Out2 sau Out3 este reduntant|. Oricare dintre
ele se poate determina din celelalte dou| cu relaÛia:
Outx = Outy + Outz
unde x, y şi z sunt 1, 2, 3 în orice ordine. Expresiile logice obÛinute pentru cele
trei ieşiri, Out1 = Q̄1, Out2 = Q1Q0 şi Out3 = Q̄0, îndeplinesc aceast| condiÛie dar
pe durata st|rilor s4, s5 şi s7. În celelalte st|ri rezultatul comparaÛiei nu a fost
luat în considerare şi poate s| nu fie corect. Din graful complet de tranziÛie a
st|rilor reprezentat în Fig.2.68 se observ| c| erori apar numai în st|rile s0 şi s7.
3) St|rile s4, s5 şi s6 au rolul de “salvare” a rezultatului comparaÛiei atunci
când semnalul de control Enable comut| în 1 logic. Blocurile logice care au ca
intr|ri variabilele Out1, Out2, Out3 nu trebuie s| aib| capacitate de stocare ale
acestora. Dac| îns| toate blocurile care preiau rezultatul comparaÛiei îl şi
memoreaz| sau stocheaz| local, atunci structura comparatorului secvenÛial se
poate simplifica. Numai 3 st|ri valide sunt suficiente pentru a modela maşina,
dup| cum se arat| în graful urm|tor.

Figura 2.71
102 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Copierea rezultatului comparaÛiei în exteriorul maşinii secvenÛiale trebuie


f|cut| de frontul pozitiv al semnalului Enable.
4) ComparaÛia secvenÛial| a operanzilor A şi B poate s| fie decis| mai devreme
de n + 1 perioade de ceas (durata maxim| necesar|), şi anume atunci când
apare prima situaÛiede tipul aj … bj. În intervalul de timp cât Enable = 0, st|rile
s1 şi s2 din graful din Fig.2 71 au semnificaÛia A < B şi respectiv A > B. O
ieşire auxiliar|, de exemplu Ready, poate s| fie prev|zut| şi activat| la prima
inegalitate aj … bj iar blocurile care “aşteapt|” rezultatul comparaÛiei s| îl poat|
prelua înainte de frontul pozitiv al semnalului Enable. Copierea rezultatului în
exteriorul maşinii trebuie declanşat| de tranziÛia ieşirii Ready în nivelul activ.

7. Fie numerele binare întregi, f|r| semn, de n biÛi X = xn - 1 xn - 2 xn - 3... x1


x0, Y = yn - 1 yn - 2 yn - 3... y1 y0 şi Z = zn - 1 zn - 2 zn - 3... z1 z0. Cifrele acestor 3 numere
sunt generate secvenÛial, începând de la rangul 0 pân| la rangul n - 1. Fiecare
triplet (xj, yj, zj), j = 0, n - 1 este disponibil pe o durat| de timp egal| cu o
singur| perioad| de ceas. S| se sintetizeze o maşin| secvenÛial| care s|
efectueze operaÛia X + Y - Z. Fiecare bit al rezultatului trebuie menÛinut la o
ieşire a maşinii o singur| perioad| de ceas, timp în care se face copierea şi
stocarea lui într-un alt circuit logic, din exteriorul maşinii.
R e z o l v a r e:
Rezultatul final R = X + Y - Z este un num|r binar de n + 1 biÛi. Dac| X + Y >
Z atunci R este un num|r pozitiv iar formatul de n + 1 biÛi reprezint| modulul
acestuia. Dac| X + Y < Z atunci R este un num|r negativ în cod complementar
faÛ| de 2 (C2); bitul cel mai semnificativ are valoarea 1 (rn = 1) iar ceilalÛi biÛi
reprezint| modulul. Aceast| “interpretare” este valabil| şi pentru rezultatele
parÛiale Rj = Xj + Yj - Zj în care operaÛia a ajuns la rangul arbitrar j. Altfel spus,
s-au procesat numai primii j + 1 biÛi ai operanzilor X, Y şi Z (Xj = xj xj - 1 ...x1 x0,
Yj = yj yj - 1 ...y1 y0, Zj = zj zj - 1 ...z1 z0).
O implementare intuitiv| a maşinii secvenÛiale este ilustrat| în Fig.2.72. Blocul
combinaÛional Σ∆ realizeaz| într-o perioad| de ceas operaÛia x + y + cin - z - bin,
unde x, y şi z sunt biÛii din rangul j ai operanzilor X, Y şi respectiv Z iar cin şi bin

Figura 2.72
Circuite Logice SecvenÛiale Sincrone 103

sunt transportul şi respectiv împrumutul generate în perioada de ceas


anterioar|, corespunz|toare rangului j - 1. Cei doi bistabili care memoreaz|
transportul şi împrumutul sunt iniÛial resetaÛi, astfel c| în rangul 0 se efectueaz|
operaÛia x0 + y0 - z0. Începând cu rangul 1 în operaÛia de adunare-sc|dere sunt
5 biÛi. Operanzii fiind independenÛi, toate cele 8 combinaÛii de 3 biÛi pot s|
apar| la intr|rile x, y şi z ale blocului Σ∆. Îns| cin şi bin nu pot s| aib| simultan,
în aceeaşi perioad| de ceas, valoarea logic| 1. Starea Q1Q0 = 11 a maşinii
secvenÛiale din Fig.2.72 este invalid| iar celelalte trei st|ri sunt valide.
Rezultatul final, sau orice rezultat parÛial trebuie interpretat în modul urm|tor:
Dac| bout = 0 atunci Rj = cout rj rj - 1 ...r1 r0 (num|r pozitiv f|r| semn); cout este cel
mai semnificativ bit al modulului sau valorii absolute. Dac| bout = 1 atunci
rezultatul este un num|r negativ în codul C2, Rj = bout rj rj - 1 ...r1 r0
Tabelele de sintez| ale celulei combinaÛionale Σ∆ sunt prezentate în Fig.2.73.

Figura 2.73

Structura celulei Σ∆ este descris| de urm|toarele trei funcÛii logice:


bout = x̄ ȳ z Q̄0 + x̄ ȳ Q1 + x̄ z Q1 + ȳ z Q1
cout = x y z̄ Q̄1 + y z̄ Q0 + x y Q0 + x z̄ Q0
r = x r y r z r Q1 r Q0.
Variabilele cin şi bin au fost înlocuite cu Q0 şi respectiv Q1. Aceast| maşin|
secvenÛial| este de tip Mealy.
În circuitul logic din Fig.2.72 s-a realizat o separare la nivel structural
între funcÛia de calcul aritmetic şi cea de memorare ale transportului şi
împrumutului. În implementarea care urmeaz| nu se urm|reşte realizarea
corespondenÛelor de tip funcÛie-structur|.
104 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Maşina secvenÛial| care efectueaz| operaÛia X + Y - Z are simbolul reprezentat


în Fig.2.74 şi poate s| fie modelat| prin graful de tranziÛie a st|rilor desenat în
Fig.2.75; acest graf corespunde unei maşini de tip Mealy.

Figura 2.74

Figura 2.75

Valorile asociate arcelor au semnificaÛia xyz/bcr; b(borrow), c(carry) şi


r(result) sunt ieşirile maşinii. Starea s0 este o stare iniÛial| în care circuitul este
forÛat s| ajung| prin intermediul comenzii asincrone de reset; aceast| comand|
nu este reprezentat| în graf. Toate arcele declanşate de frontul pozitiv de ceas
care sosesc în starea s0 determin| b = c = 0. Toate arcele care ajung în st|rile
s1 şi s2, declanşate de frontul activ de ceas, produc bc = 01 şi respectiv bc =
10. Sunt necesari 2 bistabili; starea s3 este invalid|.
În graful de mai sus arcele valide au fost enumerate în mod explicit. O
reprezentare mai simpl| se obÛine în cazul enumer|rii implicite. Un astfel de
graf este cel din Fig.2.76. În locul enumer|rii tuturor combinaÛiilor de 3 biÛi xyz
s-au formulat expresii algebrice echivalente. De asemenea, menÛionarea
explicit| a ieşirilor b şi c nu este necesar|; toate arcele care ajung în s0, s1 şi
s2 produc valorile logice bc = 00, bc = 01 şi respectiv bc = 10. Trebuie
menÛionat în mod explicit valoarea rezultatului r.
Circuite Logice SecvenÛiale Sincrone 105

Figura 2.76

La sintez| se va utiliza codificarea urm|toare:


stare Q1Q0
s0 00
s1 01
s2 10
s3 1 1 (starea invalid|).

Tabelele de sintez| cu bistabili de tip D sunt prezentate în Fig.2.77.

Figura 2.77
106 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Se observ| c| tabelele D1 şi b sunt identice; la fel sunt tabelele D0 şi c.


EcuaÛiile de funcÛionare ale maşinii sunt:
D1 = b = x̄ ȳ z Q̄0 + x̄ ȳ Q1 + x̄ z Q1 + ȳ z Q1
D0 = c = x y z̄ Q̄1 + y z̄ Q0 + x y Q0 + x z̄ Q0
r = x r y r z r Q1 r Q0.
Se constat| c| s-a obÛinut o structur| de circuit identic| cu cea din Fig.2.72. În
general, soluÛiile acestor dou| abord|ri de sintez| nu sunt identice; exemplul
detectorului de secvenÛe periodice tratat în paragraful 2.2 este concludent în
acest sens.

8. Fie numerele binare f|r| semn, de n biÛi, X = xn - 1 xn - 2 xn - 3... x1 x0 şi


Y = yn - 1 yn - 2 yn - 3... y1 y0. Cifrele acestor dou| numere sunt generate secvenÛial,
începând de la rangul 0 pân| la rangul n - 1. Fiecare pereche (xj, yj), j = 0, n-1
este disponibil| pe o durat| de timp egal| cu o singur| perioad| de ceas. S| se
sintetizeze maşina secvenÛial| reprezentat| în Fig.2.78, care s| efectueze
operaÛia aritmetic| R = 5X + Y. Fiecare bit al rezultatului trebuie menÛinut la
ieşirea R a maşinii o singur| perioad| de ceas, timp în care se face copierea şi
stocarea lui într-un alt circuit logic, din exteriorul maşinii. IniÛializarea
circuitului se realizeaz| cu semnalul Reset, sincron sau asincron. OperaÛia
aritmetic| menÛionat| începe dup| dezactivarea intr|rii Reset şi activarea
semnalului de control Enable, cu care se valideaz| datele de intrare X şi Y.
R e z o l v a r e:

Figura 2.78

Rezultatul final R = 5X + Y este un num|r binar de n + 3 biÛi:


R = rn + 2 rn + 1 rn rn -1... r1 r0.
Semnalul Enable se activeaz| pe un interval de timp egal cu n perioade de ceas,
când se genereaz| biÛii operanzilor X şi Y. Dup| comutarea în 0 logic a
semnalului Enable, intr|rile x şi y ale maşinii FSM sunt blocate în 0 (Low) şi
nu mai pot s| afecteze rezultatul R.
Maşina secvenÛial| efectueaz| operaÛia R = 5X + Y dup| schema de calcul
Circuite Logice SecvenÛiale Sincrone 107

urm|toare (R = 22X + X + Y):


0 0 x0 x1 x2 x3 ... xn - 3 xn - 2 xn - 1 0 +
x0 x1 x2 x3 x4 x5 ... xn - 1 0 0 0 +
y0 y1 y2 y3 y4 y5 ... yn - 1 0 0 0 +
0 c1 c2 c3 c4 c5 ... cn - 1 cn cn + 1 cn + 2 +
0 0 0 0 C4 C5 ... Cn - 1 Cn Cn + 1 0
r0 r1 r2 r3 r4 r5 ... rn - 1 rn rn + 1 rn + 2
LSB MSB.
În perioada j de ceas când se determin| bitul rj al rezultatului R, se genereaz|
transporturile cj + 1 şi Cj + 2 care trebuie stocate şi adunate în rangurile j + 1 şi
respectiv j + 2. Cel mult unul dintre biÛii cj + 1 şi Cj + 2 are valoarea 1 deoarece
suma celor 5 biÛi, corespunz|toare unui rang oarecare al rezultatului, are
valoarea maxim| egal| cu 5 (101(2)) şi nu 6 (110(2)):
xj - 2 + xj + yj + cj + Cj = Cj + 2 cj + 1 rj (2) # 101(2) = 5(10).
Cei mai semnificativi biÛi ai rezultatului (rn, rn + 1 şi rn + 2) se obÛin dup|
comutarea în 0 logic a semnalului Enable, în urm|toarele 3 perioade de ceas.
O implementare a maşinii FSM bazat| pe schema de calcul de mai sus este
prezentat| în Fig.2.79.

Figura 2.79

Blocul de adunare ' poate fi implementat cu porÛi logice sau utilizând dou|
semisumatoare (HA) şi dou| sumatoare elementare (FA), dup| cum se arat| în
Fig.2.80.
108 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Figura 2.80
Sinteza acestei maşini secvenÛiale pornind de la construirea unui graf de
tranziÛie a st|rilor implic| un efort de calcul considerabil mai mare.

9. La intrarea x a maşinii secvenÛiale din Fig.2.81 se aplic| secvenÛa de


biÛi X = x0, x1, x2, x3, ..., xn, xn + 1, xn + 2, ... (virgula reprezint| frontul activ al
ceasului). Dup| iniÛializarea circuitului prin intermediul semnalului Reset se
efectueaz| succesiv dou| operaÛii:
1) se aşteapt| apariÛia în secvenÛa de intrare X a unui tipar oarecare de 6 biÛi a0,
a1, a2, a3, a4, a5 definit de valorile logice aplicate la intr|rile cu aceleaşi nume.
În acest timp de aşteptare, semnalul z generat de circuit are nivelul L (low).
2) dac| tiparul menÛionat este detectat, atunci dup| frontul activ urm|tor de
ceas, semnalul z comut| în H (high) şi se menÛine în H pe o durat| de timp
egal| strict cu N perioade de ceas, determinat| de urm|torii 29 de biÛi cu
valoarea 1. De exemplu, dac| dup| detectarea tiparului, adic|
xj, xj + 1 , xj + 2, xj + 3, xj + 4, xj + 5 = a0, a1, a2, a3, a4, a5,
în subsecvenÛa xj + 6, xj + 7, ..., xj + 201 sunt exact 28 de biÛi cu valoare 1 şi urmeaz|
xj + 202 = 1 atunci N are valoarea 197.
Dup| ce ieşirea z revine la valoarea logic| 0 se repet| operaÛiile 1 şi 2,
ş.a.m.d. Comanda Reset forÛeaz| începerea operaÛiei 1. Dac| secvenÛa de intrare
X este aleatoare atunci duratele palierelor z = L şi z = H sunt variabile şi
impredictibile. S| se sintetizeze maşina FSM.

Figura 2.81
Circuite Logice SecvenÛiale Sincrone 109

R e z o l v a r e:
Maşina FSM poate s| fie modelat| de graful de tranziÛie a st|rilor desenat în
Fig.2.82. Activarea semnalului Reset determin| trecerea în starea s0 din orice
stare curent|; acest semnal nu este reprezentat în graf. Valorile asociate arcelor
au semnificaÛia x / z.

Figura 2.82

Graful conÛine 35 de st|ri valide, ceea ce înseamn| un num|r necesar de 6


bistabili. Cele dou| operaÛii pe care le efectueaz| maşina sunt bine conturate
în graf; st|rile s0 ÷ s5 corespund operaÛiei de identificare a tiparului a0, a1, a2,
a3, a4, a5 iar st|rile s6 ÷ s34 sunt alocate pentru contorizarea sau num|rarea a
29 de biÛi cu valoare 1 din secvenÛa X. Cu toate acestea nu se obÛine şi o
separare la nivel structural a celor dou| operaÛii.
Sinteza manual| a maşinii pornind de la graful din Fig.2.82 implic| un efort de
calcul mare.
O alt| abordare a sintezei, bazat| pe separarea la nivel structural a celor
dou| operaÛii menÛionate în enunÛul problemei, este indicat| în Fig.2.83.
Maşina FSM din Fig.2.81 este descompus| în dou| maşini secvenÛiale FSMA
şi FSMB, sincronizate de acelaşi semnal de ceas şi între care exist| un schimb
reciproc de informaÛii. Tiparul de 6 biÛi a0, a1, a2, a3, a4, a5 este reprezentat prin
vectorul a<0:5>, ceea ce înseamn| c| a0 = a<0>, a1 = a<1>, ..., a5 = a<5>.
Maşina FSMA realizeaz| detecÛia tiparului a<0:5> în secvenÛa de intrare X şi
“informeaz|” maşina FSMB atunci când se produce acest lucru, prin semnalul
GO = High. Maşina FSMB începe contorizarea sau num|rarea biÛilor urm|tori
cu valoare 1 din secvenÛa X, de dup| cei 6 biÛi care au coincis cu tiparul
110 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

a<0:5>. Când contorul ajunge la valoarea 29, maşina FSMB informeaz| la


rândul ei maşina FSMA prin semnalul START = High. Cele dou| maşini
efectueaz| pe rând operaÛiile (sau alternativ).

Figura 2.83

Palierele high ale semnalelor GO şi START au durata egal| cu o perioad| de


ceas, suficient| pentru a se face “informarea” reciproc| între cele dou| maşini.
Grafurile de tranziÛie a st|rilor circuitelor FSMA şi FSMB sunt reprezentate în
Fig.2.84. Semnalul Reset nu este reprezentat în aceste grafuri; prin activarea lui
se forÛeaz| simultan st|rile sA0 şi respectiv sB0. Valorile asociate arcelor celor
dou| grafuri au semnificaÛiile START x / GO şi respectiv GO x / START z.

Figura 2.84
Circuite Logice SecvenÛiale Sincrone 111

Pentru implementarea celor dou| maşini secvenÛiale, FSMA şi FSMB, sunt


necesari 3 şi respectiv 5 bistabili. Consumul de arie este mai mare decât în
cazul sintezei unei singure maşini, modelat| prin graful din Fig.2.82; viteza de
operare nu se modific| îns|.
Schema din Fig.2.83 nu determin| o reducere substanÛial| a efortului de calcul
manual faÛ| de prima abordare.
Efortul manual de calcul, necesar pentru implementarea circuitului
secvenÛial descris în enunÛul aceastei probleme, se poate reduce considerabil
dac| se accept| o “risip|” mai mare de arie. O soluÛie de acest fel este
prezentat| în Fig.2.85.

Figura 2.85
112 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Circuitul conÛine 3 maşini secvenÛiale.


Maşina FSMA realizeaz| detecÛia tiparului binar a<0:5> impus. BiÛii din
secvenÛa X sunt deplasaÛi continuu, în ritmul ceasului Clock, de la bistabilul 5
la bistabilul 0. Astfel, în cei 6 bistabili din FSMA se stocheaz| dup| j (j > 5)
fronturi active de ceas informaÛia Q5Q4Q3Q2Q1Q0 = xj xj - 1 xj - 2 xj - 3 xj - 4 xj - 5 care
se compar| cu a5 a4 a3 a2 a1 a0. Sunt luate în considerare numai egalit|Ûile
xj xj - 1 xj - 2 xj - 3 xj - 4 xj - 5 = a5 a4 a3 a2 a1 a0
care au loc în intervalele de timp când semnalul Start generat de FSMC are
nivelul high. Semnalul Det = high are semnificaÛia de detectare a tiparului,
informaÛie ce este furnizat| maşinii FSMC. Structura FSMA se poate expanda
f|r| nici un efort de calcul la orice dimensiune impus| de codul (tiparul) ce
trebuie detectat.
Maşina FSMB num|r| biÛii cu valoare logic| 1 din secvenÛa X, în ritmul
ceasului Clock, dup| ce semnalul Go comut| în nivelul high (adic| dup| ce
intr|rile de reset asincron ai celor 5 bistabili se dezactiveaz|). Num|rarea se
realizeaz| în cod binar natural şi porneşte întotdeauna de la 0. Aceast| operaÛie
se poate scrie sub forma
Q4+Q3+Q2+Q1+Q0+ = Q4Q3Q2Q1Q0 + xj
în care + este adunarea algebric| iar xj este bitul curent din secvenÛa X. Şi
structura FSMB se poate expanda f|r| efort de calcul la orice dimensiune.
DetecÛia num|rului de biÛi cu valoare 1 care trebuie contorizaÛi se realizeaz| cu
un circuit AND. În acest caz 29(10) = 24 + 23 + 22 + 20 iar semnalul prin care se
informeaz| maşina FSMC este Sum = Q4·Q3·Q2·Q0 (produs logic).
Maşina FSMC este blocul de control şi trebuie s| genereze semnalele Start şi
Go (intr|ri în FSMA şi respectiv FSMB) astfel încît s| se obÛin| funcÛionarea
impus| în enunÛul problemei.
Diagramele de timp din Fig.2.86 descriu funcÛionarea maşinii FSMC. Cât
timp Reset = high maşina FSMC este blocat| în starea s0. Dup| dezactivarea
semnalului Reset maşina FSMC menÛine ieşirea Start la nivelul 0 logic pe o
durat| egal| cu 5 perioade de ceas (st|rile s1 ÷ s5), timp în care primii 5 biÛi
din secvenÛa X se încarc| în maşina FSMA. Apoi Start comut| în 1 logic şi se
menÛine la acest nivel (starea s6 a maşinii FSMC) pân| când FSMA detecteaz|
tiparul de 6 biÛi a5 a4 a3 a2 a1 a0. Acest lucru produce Det = 1, tranziÛia din 0 în
1 având loc imediat dup| frontul pozitiv al ceasului Clock. Primul front negativ
de ceas care apare produce tranziÛia 0 _ 1 în semnalul Go, ceea ce conduce la
deblocarea bistabililor maşinii FSMB pentru operaÛia de num|rare sau
contorizare care urmeaz|. Primul front pozitiv de ceas care g|seşte Det = 1
produce tranziÛia s6 Y s7 în maşina FSMC. Aceast| schimbare de stare
determin| Start = 0 şi apoi Det = 0. Palierul high din semnalul Det dureaz| o
perioad| de ceas; ambele tranziÛii, marcate cu linie mai groas|, au loc imediat
dup| fronturi pozitive de ceas. În continuare, maşina FSMC r|mâne în starea
Circuite Logice SecvenÛiale Sincrone 113

Figura 2.86

s7 pân| când maşina FSMB contorizeaz| 29 de biÛi cu valoare 1 în secvenÛa X


şi produce comutarea semnalului Sum în 1 logic. Primul front negativ de ceas
care urmeaz| determin| Go = 0 şi apoi Sum = 0. Frontul pozitiv de ceas care
urmeaz| produce tranziÛia s7 Y s1 în maşina FSMC. OperaÛiile de identificare
a tiparului şi de contorizare se repet|.
Semnalul Go este determinat de semnalele Det şi Sum. Un singur bistabil JK
este suficient pentru generarea comenzii Go, dup| cum se arat| în Fig.2.87.
Comutarea în 0 logic a semnalului Sum are loc dup| frontul negativ de ceas, cu
o întârziere egal| cu suma tp Ck - Q (JK) + tp R̄ - Q (FSMB) + tp AND4 , mai mare decât thold

Figura 2.87
114 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

al bistabilului JK. Semnalul Go nu este afectat de hazard, ceea ce este


obligatoriu deoarece este utilizat în maşina FSMB ca reset asincron.
Bistabilul JK din Fig.2.87 reprezint| o parte distinct| (separabil| structural) din
maşina FSMC. Aceasta mai conÛine înc| 3 bistabili, care alc|tuiesc maşina
secvenÛial| propriuzis|, modelat| prin graful de tranziÛie a st|rilor desenat în
Fig.2.88. Semnalele de intrare şi ieşire sunt Go şi respectiv Start, z.
Implementarea ieşirilor Start şi z este simpl|: Start = St6, z = St7. Variabilele
St6 şi St7 au valoarea 1 logic numai pe durata st|rilor s6 şi respectiv s7.

Figura 2.88

Arcele desenate cu linie întrerupt| corespund activ|rii semnalului de reset


asincron (Reset = 1). Valorile asociate arcelor valide desenate cu linie continu|
corespund semnalului Go iar tranziÛiile dintre st|ri sunt declanşate de fronturile
pozitive ale semnalului de ceas Clock. În calculele care urmeaz|, st|rile s0÷s7
sunt codific| binar astfel:
stare Q2Q1Q0 (FSMC)
s0 0 0 0
s1 0 0 1
s2 0 1 1
s3 0 1 0
s4 1 1 0
s5 1 1 1
s6 1 0 1
s7 1 0 0
Rezult| Start = Q2Q̄1Q0 şi z = Q2Q̄1Q̄0. Aceste semnale nu sunt afectate de
Circuite Logice SecvenÛiale Sincrone 115

hazard la tranziÛiile care implic| comutarea unui singur bistabil; toate tranziÛiile
sunt de acest fel cu excepÛia tranziÛiei s7 Y s1, în care comut| simultan
bistabilii 2 şi 0. Sunt posibile evoluÛiile urm|toare:
s7 (100) Y s1 (001),
s7 (100) Y s0 (000) Y s1 (001),
s7 (100) Y s6 (101) Y s1 (001).
În ultimul caz poate s| apar| un impuls parazit high numai la ieşirea Start, a
c|rui durat| este comparabil| cu timpul de comutare al unui bistabil. Acest
impuls apare dup| frontul pozitiv de ceas, astfel c| nu are nici un efect asupra
funcÛion|rii circuitului. Impulsuri parazite de acest fel (f|r| efect) pot fi
generate şi de FSMA, FSMB în semnalele Det şi respectiv Sum. Este posibil
ca porÛile AND4 din Fig.2.85 s| filtreze majoritatea impulsurilor cu durate mici
care apar la intr|rile lor.
Tabelele de sintez| a maşinii FSMC cu bistabili JK, sunt prezentate în Fig.2.89.

Figura 2.89
116 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Arcele invalide au fost l|sate libere (indiferente). Determinarea grafului de


tranziÛie a st|rilor complet nu mai este necesar| deoarece maşina are comand|
asincron| de reset.
Bistabilul 0 se poate înlocui cu un bistabil de tip D (D0 = J0). Structura
complet| a maşinii FSMC este desenat| în Fig.2.90.

Figura 2.90

10. Circuitul secvenÛial din Fig.2.91 este compus din trei maşini
secvenÛiale sincronizate de acelaşi semnal de ceas: FSMA, FSMB şi FSMC.

Figura 2.91
Circuite Logice SecvenÛiale Sincrone 117

Grafurile de tranziÛie a st|rilor FSMA şi FSMB sunt desenate în Fig.2.92.


Aceste dou| circuite nu au st|ri şi arce invalide. Valorile asociate arcelor au
semnificaÛiile EnA / zA şi respectiv EnB / zB; EnA şi EnB sunt intr|ri de autorizare.
Prin intermediul semnalelor zA şi zB active high, maşinile FSMA şi FSMB
semnalizeaz| trecerea lor prin st|rile sA6 şi respectiv sB11.

Figura 2.92

Comanda asincron| Reset = 1 (nu este reprezentat| în grafurile de mai sus)


forÛeaz| simultan st|rile sA0 şi sB0.
Intr|rile de autorizare definesc dou| moduri de operare pentru FSMA şi FSMB,
controlate de maşina FSMC:
En OperaÛie
0 Wait (aşteptare)
1 Run (schimbarea st|rii).

S| se sintetizeze cu bistabili JK şi porÛi logice maşina FSMC astfel încât


ansamblul FSMA-FSMB s| funcÛioneze astfel:
a) - dup| dezactivarea comenzii asincrone Reset ambele maşini A şi B intr| în
modul Run;
b) - când FSMA se afl| în sA6, FSMB intr| în modul Wait şi invers, când
FSMB se afl| în sB11, FSMA intr| în modul Wait;
c) - dac| FSMA şi FSMB ajung simultan în sA6 şi respectiv sB11 atunci
ambele maşini continu| funcÛionarea în modul Run.
S| se determine dup| câte perioade de ceas maşinile ajung din nou, simultan,
în st|rile sA0 şi respectiv sB0.
118 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

R e z o l v a r e:
În funcÛionarea normal| cel puÛin una dintre maşinile A sau B se afl| în modul
Run. Maşina FSMC poate s| fie modelat| prin graful de tranziÛie a st|rilor
desenat în Fig.2.93. Semnalul Reset nu este reprezentat; prin activarea lui se
forÛeaz| starea sC0. Valorile asociate arcelor au semnificaÛiile zA zB / EnA EnB.

Figura 2.93

Aceste 3 st|ri valide vor fi codificate astfel: sC0 — 00, sC1 — 01 şi sC2 — 10.
Starea invalid| sC3 — 11 şi arcele invalide vor fi l|sate libere (indiferente).
Tabelele de sintez| sunt reprezentate în Fig.2.94.

Figura 2.94

EcuaÛiile de funcÛionare ale maşinii FSMC sunt:


J1 = z̄ A zB , K1 = 1
J2 = zA z̄ B , K2 = 1
EnA = zA + z̄ B = J̄ 1
EnB = z̄ A + zB = J̄ 2
Circuite Logice SecvenÛiale Sincrone 119

Rezult| c| FSMC nu este o maşin| secvenÛial| ci un simplu circuit


combinaÛional, compus din dou| porÛi logice. Bistabilii sunt inutili deoarece nu
este necesar| informaÛia memorat| Q1, Q0 în expresiile ieşirilor EnA şi EnB.
Schema circuitului din Fig.2.91 este echivalent| cu cea din figura urm|toare.

Figura 2.95

Dup| 17 perioade de ceas de la momentul dezactiv|rii semnalului Reset,


FSMA ajunge din nou în starea sA0 iar FSMB ajunge în starea sB15. În acest
interval de timp FSMA a intrat o singur| dat| în modul Wait iar FSMB de dou|
ori. La fel se întâmpl| şi pe urm|toarele 17 perioade de ceas, dup| care FSMA
se afl| în starea sA0 iar FSMB în starea sB14. În urm|toarele 16 perioade de
ceas fiecare maşin| intr| în aşteptare o singur| dat| deoarece apare o situaÛie
de trecere simultan| prin sA6 şi respectiv sB11; dup| aceste 16 TCk st|rile
curente ale maşinilor sunt sA0 şi sB13. Dup| înc| 17 TCk st|rile curente sunt
sA0 şi respectiv sB12. În urm|toarele 16 TCk FSMA funcÛioneaz| permanent
în modul Run în timp ce FSMB intr| de dou| ori în Wait; dup| acest timp
st|rile maşinilor sunt sA0 şi sB10. Dup| înc| 34 TCk se ajunge în sA0 şi sB8.
Succesiunea de st|ri care urmeaz| este redat| explicit:
sA1 — sB9
sA2 — sB10
sA3 — sB11
sA3 — sB12
sA4 — sB13
sA5 — sB14
sA6 — sB15
sA7 — sB15
sA0 — sB0.
Prin adunarea intervalelor de timp menÛionate anterior rezult| c| circuitul
dinFig.2.95 trece prin situaÛia în care st|rile curente ale maşinilor sunt sA0 şi
sB0 o dat| la 126 TCk.
120 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

2.5 Probleme propuse spre rezolvare

1. a) S| se sintetizeze cu bistabili şi porÛi logice generatorul de semnale


periodice reprezentat prin simbolul din Fig.2.96a. Semnalele de ieşire Z şi Y
depind de intrarea de control G şi sunt desenate în diagramele din figurile
2.96b şi 2.96c (G = 0 şi respectiv G = 1). Dac| este necesar, se poate utiliza o
intrare INIT de iniÛializare a circuitului, sincron| sau asincron|.
b) S| se analizeze funcÛionarea circuitului obÛinut, cu ajutorul grafului complet
de tranziÛie a st|rilor şi s| se determine dac| ieşirile Z şi Y sunt afectate de
hazard. Dac| este cazul, s| se adopte o soluÛie pentru eliminarea hazardului.

Figura 2.96

2. a) S| se sintetizeze cu bistabili JK şi porÛi logice generatorul de semnal


periodic reprezentat prin simbolul din Fig.2.97a. Semnalul generat Z este
controlat de intr|rile A, B dup| cum se arat| în diagramele de timp din
Fig.2.97b.
b) S| se analizeze funcÛionarea circuitului obÛinut, cu ajutorul grafului complet
de tranziÛie a st|rilor şi s| se determine dac| este necesar| o intrare de
Circuite Logice SecvenÛiale Sincrone 121

iniÛializare. De asemenea, dac| apare hazard la ieşirea Z s| se adopte o soluÛie


pentru eliminarea acestuia.
c) S| se determine r|spunsul maşinii secvenÛiale la comenzile A, B desenate în
Fig.2.97c.

Figura 2.97

3. a) Maşina secvenÛial| cu simbolul desenat în Fig.2.98a recepÛioneaz|


la intrarea In secvenÛa de biÛi X = x1, x2, x3, ..., xn, ... sincronizat| cu frontul
negativ al ceasului Ck (fiecare bit are o durat| egal| cu perioada ceasului). S|
se sintetizeze circuitul cu bistabili şi porÛi logice astfel încât semnalul de ieşire
Z, sincron cu frontul pozitiv de ceas, s| comute alternativ din 0 în 1 dup|
recepÛionarea a 3 biÛi cu valoarea 1 şi din 1 în 0 dup| recepÛionarea a 4 biÛi cu
valoarea 0, ş.a.m.d. Aceast| funcÛionare este autorizat| cât timp semnalul de
intrare Enable are nivelul 1 logic; când Enable = 0 ieşirea Z este forÛat| la
122 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

nivelul 0 logic.
Diagramele din Fig.2.98b ilustreaz| funcÛionarea maşinii pe un interval de timp
limitat la 17 perioade de ceas.
b) S| se analizeze funcÛionarea circuitului obÛinut, cu ajutorul grafului complet
de tranziÛie a st|rilor şi s| se determine dac| este necesar| o intrare de
iniÛializare. De asemenea, dac| apare hazard la ieşirea Z s| se adopte o soluÛie
pentru eliminarea acestuia.

Figura 2.98

4. a) S| se sintetizeze cu bistabili JK şi porÛi logice maşina secvenÛial|


din Fig.2.99a care s| funcÛioneze în conformitate cu diagramele de timp
desenate în Fig.2.99b. Duratele nivelelor logice H şi L aplicate la intrarea
asincron| X pot fi oricât de mari. Pe palierul X = 1 la ieşirea Z se genereaz| un
singur impuls high cu durata 3TCk iar pe palierul X = 0 se genereaz| un singur
impuls high cu durata TCk.
b) S| se analizeze funcÛionarea circuitului obÛinut, cu ajutorul grafului complet
de tranziÛie a st|rilor şi s| se determine dac| este necesar| o intrare de
iniÛializare.
c) S| se analizeze dac| ieşirea Z este afectat| de hazard. În caz afirmativ s| se
studieze posibilitatea eliminarii acestuia prin recodificarea st|rilor valide.
d) S| se determine r|spunsul Z considerînd c| la intrarea X se aplic| un semnal
cu perioada 4TCk şi factorul de umplere 1/2.
Circuite Logice SecvenÛiale Sincrone 123

Figura 2.99

5. Maşina secvenÛial| din Fig.2.100a genereaz| un impuls high


sincronizat cu frontul pozitiv de ceas. Acest impuls de la ieşirea Z este
declanşat de semnalul de intrare Start (sincronizat cu frontul negativ de ceas).
Durata impulsului şi momentul declanş|rii sunt determinate de valorile logice
aplicate la intr|rile a şi b dup| cum se arat| în diagramele de timp din
Fig.2.100b. Duratele nivelelor logice H şi L aplicate la intrarea Start pot fi
oricât de mari.
a) S| se modeleze maşina secvenÛial| printr-un graf de tranziÛie a st|rilor.
b) S| se sintetizeze circuitul cu bistabili şi porÛi logice.
c) S| se determine graful complet de tranziÛie a st|rilor circuitului obÛinut şi s|
se analizeze necesitatea unei intr|ri de iniÛializare.
d) S| se analizeze dac| ieşirea Z este afectat| de hazard iar în caz afirmativ s|
se identifice o metod| de eliminare.
e) S| se determine r|spunsul Z în cazul ab = 11.
f) Pentru fiecare din cele 4 combinaÛii de valori logice de la intr|rile a, b s| se
determine r|spunsul Z considerând c| semnalul Start este periodic; perioada
acestuia este 6TCk iar factorul de umplere 1/2.

6. S| se sintetizeze şi s| se analizeze un detector de semnal periodic cu


perioada 2TCk luând ca model exemplul din paragraful 2.2 (detectorul de
semnal periodic cu perioada 3TCk).
124 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

Figura 2.100

7. Maşina secvenÛial| din Fig.2.101a este un generator de impuls.


Declanşarea se face cu semnalul de intrare Start, sincronizat cu frontul negativ
al ceasului. Impulsul high generat la ieşirea Z este sincronizat cu frontul pozitiv
de ceas şi are o durat| dependent| de durata palierului H din semnalul Start,
dup| cum se arat| în Fig.2.101b. Astfel, dac| durata impulsului Start este egal|
cu cel mult 3 perioade de ceas (1TCk, 2TCk sau 3TCk) atunci impulsul generat are
durata TCk; dac| impulsul Start dureaz| mai mult de 3 perioade de ceas atunci
la ieşirea Z se obÛine un impuls cu durata 2TCk .
a) S| se modeleze maşina secvenÛial| printr-un graf de tranziÛie a st|rilor astfel
încât s| nu fie necesar| o comand| de iniÛializare care s| garanteze
funcÛionarea corect|.
b) S| se sintetizeze circuitul cu bistabili de tip D şi porÛi logice; s| se repete
sinteza considerând bistabili de tip JK.
c) S| se determine graful complet de tranziÛie a st|rilor circuitului obÛinut şi s|
se demonstreze posibilitatea de iniÛializare f|r| o comand| explicit| de SET sau
de RESET.
d) S| se analizeze dac| ieşirea Z este afectat| de hazard iar în caz afirmativ s|
se identifice o metod| de eliminare.
Circuite Logice SecvenÛiale Sincrone 125

Figura 2.101

8. Circuitul secvenÛial din Fig.2.102 este un generator de impulsuri care


se poate implementa utilizând dou| sau mai multe maşini secvenÛiale
interconectate între ele şi sincronizate cu acelaşi semnal de ceas.

Figura 2.102

R|spunsul Z este sincron cu frontul pozitiv de ceas şi se declanşeaz| dup|


tranziÛia H `L a semnalului Start. Valorile logice a0, a1, ..., a5 determin|
r|spunsul Z în funcÛie de nivelul logic aplicat la intrarea A, astfel:
- dac| A = 0 atunci Z = a0, a1, a2, a3, a4, a5, 0, 0, 0, ...;
- dac| A = 1 atunci Z = a0, a1, a2, a3, a4, a5, a0, a1, a2, a3, a4, a5, 0, 0, 0, ...;
- înainte de declanşare Z = 0.
126 Cap.2 Sinteza şi analiza maşinilor secvenÛiale

În secvenÛele Z scrise mai sus virgula reprezint| frontul pozitiv de ceas. S| se


sintetizeze generatorul de impulsuri şi s| se analizeze structura obÛinut|.

9. Fie numerele binare întregi, f|r| semn, de n biÛi


X = xn - 1 xn - 2 xn - 3... x1 x0 şi Y = yn - 1 yn - 2 yn - 3... y1 y0.
Cifrele acestor 2 numere sunt generate secvenÛial, începând de la rangul 0 pân|
la rangul n - 1. Fiecare pereche (xj, yj), j = 0, n - 1 este disponibil| pe o durat|
de timp egal| cu o singur| perioad| de ceas. S| se sintetizeze o maşin|
secvenÛial| care s| efectueze operaÛia R = *X - Y*. Fiecare bit al rezultatului
trebuie menÛinut la o ieşire a maşinii o singur| perioad| de ceas, timp în care
se face copierea şi stocarea lui într-un alt circuit logic, din exteriorul maşinii.

10. a) O maşin| secvenÛial| recepÛioneaz| secvenÛa de biÛi


X = x1, x2, x3, ..., xn, xn+1, xn+2, ...
sincronizat| cu frontul negativ al ceasului Ck (fiecare bit are o durat| egal| cu
perioada ceasului). S| se sintetizeze circuitul cu bistabili şi porÛi logice astfel
încât acesta s| genereze un semnal de ieşire Z, sincron cu frontul pozitiv de
ceas, care s| aib| urm|toarea structur|:
Z = x1, x1rx2, x1rx2rx3, x4, x4rx5, x4rx5rx6, x7, x7rx8, x7rx8rx9, x10, ...
Aceast| funcÛionare este autorizat| cât timp un semnal de autorizare Enable are
nivelul 1 logic; când Enable = 0 ieşirea Z este forÛat| la nivelul 0 logic.
b) S| se analizeze funcÛionarea circuitului obÛinut, cu ajutorul grafului complet
de tranziÛie a st|rilor şi s| se determine dac| este necesar| o intrare de
iniÛializare. De asemenea, dac| apare hazard la ieşirea Z s| se adopte o soluÛie
pentru eliminarea acestuia.
Circuite Logice SecvenÛiale Sincrone 127

Cap.3 NUM{R{TOARE

Num|r|toarele sunt maşini secvenÛiale particulare care îndeplinesc


funcÛia de num|rare. Num|rarea se face secvenÛial, în ritmul semnalului de
ceas. Se poate spune c| sunt num|rate (contorizate) fronturile active de ceas
sau perioadele de ceas cuprinse într-un interval de timp oarecare.

3.1 Generalit|Ûi

Cea mai simpl| şi general| reprezentare a unui num|r|tor este ilustrat|


în Fig.3.1. Ieşirea Out reprezint| un ansamblu de biÛi care trebuie structurat
astfel încât num|rarea s| se fac| într-un format de n cifre într-o baz| de
numeraÛie B (B $ 2) dorit|.

Figura 3.1

FuncÛionarea circuitului se poate modela prin ecuaÛiile


Out+ = Out ± 1 (3.1)
+
în care Out reprezint| valoarea actualizat| a contorului dup| frontul activ al
semnalului de ceas Ck iar semnele + şi - corespund operaÛiilor de num|rare
direct| (înainte, count-up, incrementare) şi respectiv de num|rare invers|
(înapoi, count-down, decrementare).
Datorit| formatului limitat al ieşirii Out, num|rarea este de tip modulo. Astfel,
dac| Max este valoarea maxim| a num|rului Out atunci ecuaÛiile 3.1 trebuie
interpretate ca o form| simplificat| de scriere a ecuaÛiilor
Out+ = (Out ± 1) modulo (Max + 1). (3.2)
128 Cap.3 Num|r|toare

Considerând echivalentul zecimal al ieşirii Out, funcÛionarea num|r|toarelor


directe şi respectiv inverse se poate reprezenta dinamic prin urm|toarele
succesiuni sau secvenÛe de num|rare în care virgula reprezint| frontul activ al
ceasului Ck:
Out: ..., Max - 1, Max, 0, 1, 2, 3, ..., Max - 1, Max, 0, 1, 2, 3, ... (count-up)
Out: ..., 2, 1, 0, Max, Max - 1, Max - 2, ..., 3, 2, 1, 0, Max, ... (count-down).
Un num|r|tor ca cel din Fig.3.1 este fie direct fie invers. Ambele sensuri
de num|rare pot fi incluse într-un singur num|r|tor, numit reversibil, numai
dac| acesta este prev|zut cu o intrare suplimentar|. O posibilitate de realizare
a unui num|r|tor reversibil este indicat| în Fig.3.2.

Fig.3.2 Num|r|tor reversibil cu intrare de sens Ū/D

Intrarea auxiliar| Ū/D trebuie s| aib| valori logice stabile în vecin|tatea


fronturilor active de ceas.
Reversibilitatea num|r|toarelor se poate obÛine şi prin utilizarea a dou|
semnale de ceas, dup| cum se arat| în Fig.3.3.

Fig.3.3 Num|r|tor reversibil cu dou| semnale de ceas

Unul din cele dou| semnale de ceas, CkU sau CkD, trebuie fixat sau blocat pe
un nivel logic valid (High în exemplul de mai sus) iar sensul de num|rare este
determinat de ceasul activ.
Num|r|toarele trebuie s| fie prev|zute cu cel puÛin o comand| de
Circuite Logice SecvenÛiale Sincrone 129

iniÛializare sau de reset, sincron| sau asincron|, care s| permit| forÛarea unei
valori cunoscute a num|rului Out. În Fig.3.4 este desenat un num|r|tor cu reset
asincron (simbolul ( reprezint| orice valoare logic| sau front pentru Ck).

Fig.3.4 Num|r|tor cu reset asincron

O comand| de iniÛializare mai general| decât cea de reset este înc|rcarea


paralel| (Parallel Load). Orice valoare a ieşirii Out de la 0 la Max poate fi
forÛat| prin activarea intr|rii de înc|rcare paralel|, sincron| sau asincron|.
Pentru aceasta num|r|torul trebuie s| aib| un num|r suplimentar de intr|ri In
egal cu num|rul de ieşiri Out. Un num|r|tor de acest fel este prezentat în
Fig.3.5.

Fig.3.5 Num|r|tor cu înc|rcare paralel| asincron|

Num|r|toarele cu înc|rcare paralel| pot s| execute secvenÛe de num|rare


complexe care includ salturi (jump-uri) la valori mai mari sau mai mici decât
valoarea curent| a ieşirii, în funcÛie de marimile de control In şi PL.
În unele aplicaÛii cu num|r|toare, pe anumite intervale de timp, trebuie
p|strat| sau conservat| valoarea ieşirii Out f|r| a bloca ceasul. Aceast|
funcÛionare se obÛine cu ajutorul unei intr|ri de autorizare (Enable) sincron|,
dup| cum se arat| în Fig.3.6. Conservarea ieşirii prin blocarea temporar| a
ceasului (clock gating) este ilustrat| în Fig.3.7.
Deşi aceste dou| tehnici de implementare a funcÛiei Hold par identice prin
compararea tabelelor de funcÛionare, între ele exist| urm|toarele deosebiri:
- semnalul de control Enable din Fig.3.6 trebuie s| aib| valori stabile doar în
130 Cap.3 Num|r|toare

Fig.3.6 Num|r|tor cu intrare de autorizare

Fig.3.7 Num|r|tor cu clock gating

vecin|tatea fronturilor pozitive ale ceasului Ck, ceea ce înseamn| c| poate fi


afectat de hazard;
- orice impuls parazit din Enable în Fig.3.7, care apare atunci când Ck = H,
poate s| afecteze num|r|torul deoarece CkN = Enable· Ck, astfel c| acest
semnal nu trebuie s| aib| hazard;
- la intrarea de ceas CkN pot s| apar| fronturi pozitive cauzate de Enable dac|
acest semnal este independent de Ck (Fig.3.8);
- în regimul de operare Hold (Enable = 0) puterea disipat| de circuitul din
Fig.3.7 este mai mic| decât cea disipat| de circuitul din Fig.3.6.

Fig.3.8 Efectul intr|rii de autorizare în clock gating

Pe lâng| intr|rile auxiliare descrise anterior, flexibilitatea num|r|toarelor


Circuite Logice SecvenÛiale Sincrone 131

poate fi crescut| şi prin intermediul unor ieşiri suplimentare. De obicei se


semnalizeaz| trecerea num|r|torului prin 0 la num|rarea invers| şi trecerea
prin Max la num|rarea direct|; aceste ieşiri sunt numite de împrumut (borrow)
şi respectiv de transport (carry).
Semnalizarea trecerii prin 0 la num|rarea invers| se poate face în cele dou|
moduri ilustrate prin diagramele de timp din Fig.3.9.

Fig.3.9 Num|r|tor invers cu ieşire de împrumut

Trecerea prin 0 se poate semnaliza prin activarea ieşirii Borrow pe o durat|


egal| cu perioada ceasului
Br_1 = 0 dac| Out = 0
sau pe un interval de timp mai mic, egal cu tLCk
Br_2 = 0 dac| Out = 0 şi Ck = 0.
Semnalizarea trecerii prin valoarea maxim| a ieşirii Out (Max) la num|rarea
direct| se poate face în cele dou| moduri ilustrate prin diagramele de timp din
Fig.3.10. Astfel, ieşirea Carry se poate activa pe o durat| egal| cu perioada
ceasului
Cy_1 = 0 dac| Out = Max
sau pe un interval de timp mai mic, egal cu tLCk
Cy_2 = 0 dac| Out = Max şi Ck = 0.
Orice combinaÛie de intr|ri şi ieşiri auxiliare prezentate în acest paragraf
132 Cap.3 Num|r|toare

Fig.3.10 Num|r|tor direct cu ieşire de transport

poate fi utilizat| în proiectarea num|r|toarelor. Structura general| a unui


num|r|tor, privit ca maşin| secvenÛial|, este desenat| în Fig.3.11.

Fig.3.11 Schema bloc a unui num|r|tor

CS şi NS reprezint| starea curent| şi respectiv starea viitoare a maşinii


secvenÛiale. Blocurile Comb1, Comb2 şi Comb3 sunt combinaÛionale.
Circuite Logice SecvenÛiale Sincrone 133

În paragrafele urm|toare se trateaz| aspecte referitoare la baza de numeraÛie în


care se face num|rarea.

3.2 Num|r|toare binare

Num|r|toarele binare opereaz| în baza de numeraÛie 2. Fiecare bit din


ansamblul ieşirilor Out constituie o cifr| a num|rului generat; un format de n
cifre în baza 2 implic| n semnale în grupul Out. Aceste semnale reprezint|
coordonatele unui vector binar n-dimensional Out[n - 1:0].
Echivalentul zecimal al num|rului binar reprezentat de Out[n - 1:0] se obÛine
prin adunarea
Out(10) = Out[n - 1]·2n-1 + Out[n - 2]·2n-2 + ...+ Out[1]·21 + Out[0]·20 (3.3)
Cifra cea mai semnificativ| (MSB - most significant bit) este Out[n - 1] iar cea
mai puÛin semnificativ| (LSB - least significant bit) este Out[0].

3.2.1 Num|r|toare binare modulo 2n


Num|rarea se face într-un format de n biÛi, Out[n - 1:0], iar valoarea
maxim| (echivalentul zecimal) este Max = 2n - 1. Un astfel de circuit conÛine
n bistabili şi toate cele 2n st|ri generate sunt valide.
Fie St0, St1, St2, ..., Stmax numele atribuite st|rilor num|r|torului. Fiecare
stare este reprezentat| de o combinaÛie distinct| de n biÛi Qn-1 Qn-2 ... Q1 Q0
(ieşirile celor n bistabili). Stabilirea acestor corespondenÛe biunivoce este
numit| codificarea st|rilor. În cazul codific|rii naturale Stj --- j(10) blocul
Comb3 din Fig.3.11 nu este necesar deoarece CS = Out. Pentru orice alt| form|
de codificare blocul Comb3 este necesar, acesta fiind un convertor de cod.
Cel mai simplu mod de a obÛine un num|r|tor binar modulo 2n este
ilustrat în Fig.3.12; s.au conectat în serie (cascad|) n celule divizoare de
frecvenÛ| cu 2.

Fig.3.12 Num|r|tor binar compus din celule divizoare de frecvenÛ| cu 2


134 Cap.3 Num|r|toare

Bistabilii nu comut| în paralel, ci în serie; decalajul dintre momentul la care


bistabilul j primeşte un front pozitiv la intrarea lui de ceas şi momentul
frontului pozitiv al semnalului Ck este Δt = j · tp Ck-QN. Diagramele de timp din
Fig.3.13 corespund unui num|r|tor compus din 3 celule (n = 3), numit şi
num|r|tor binar de 3 biÛi sau num|r|tor binar modulo 8.

Figura 3.13

S-a f|cut aproximarea c| timpii de r|spuns ai bistabililor tp Ck-Q şi tp Ck-QN sunt


egali. La ieşirile Q2 Q1 Q0 rezult| num|rare direct| iar la ieşirile Q̄2 Q̄1 Q̄0
num|rarea este invers|. În diagramele de mai sus perioada ceasului Ck nu este
suficient de mare pentru a se putea neglija timpii de r|spuns ai bistabililor. În
acest caz se observ| c| secvenÛele de num|rare marcate sunt întrerupte de st|ri
sau valori nedorite. “Citirea” f|r| erori a ieşirilor num|r|torului este posibil|
dac| se utilizeaz| cel puÛin un semnal de eşantionare care s| fac| st|rile
transparente numai pe un anumit interval de timp din fiecare perioad| de ceas.
În schema de expandare de tip serie din Fig.3.12 se impune urm|toarea
restricÛie sau constrângere asupra ceasului Ck
TCk > n · tp Ck-QN + tsample (3.4)
unde tsample este durata minim| a ferestrei de eşantionare.
Circuite Logice SecvenÛiale Sincrone 135

Celula divizoare de frecvenÛ| cu 2 poate fi considerat| num|r|tor binar


de 1 bit (de o cifr|) sau num|r|tor binar modulo 2. În Fig.1.34 (cap.1) a fost
prezentat bistabilul de tip T (toggle); acest bistabil poate fi considerat
num|r|tor binar modulo 2 cu intrare de autorizare.

Fig.3.14 Num|r|tor binar de 1 bit cu intrare de autorizare

EcuaÛia de funcÛionare a bistabilului T este: Q+ = Tr Q. (3.5)


O schem| de num|r|tor binar modulo 2n, obÛinut| prin expandarea celulei din
Fig.3.14, în care toÛi bistabilii comut| în paralel este desenat| în Fig.3.15.

Fig.3.15 Num|r|tor binar de n biÛi cu bistabili T

EcuaÛiile num|r|torului din figura de mai sus sunt


T0 = 1
T1 = Q0
T j = Q j - 1 · Q j - 2 · ... · Q1 · Q0 , j = 2, n - 1
şi se obÛin din sinteza logic| specific| maşinilor secvenÛiale. Se va ar|ta acest
lucru pentru cazul particular n = 3. Tabelele de sintez| şi grup|rile de acoperire
sunt reprezentate în Fig.3.16. Pentru determinarea valorilor logice ale intr|rilor
T se utilizeaz| relaÛia 3.5 rescris| sub forma T = Q+ r Q.
La ieşirile Q2 Q1 Q0 num|rarea este direct| iar la Q̄2 Q̄1 Q̄0 num|rarea este
136 Cap.3 Num|r|toare

Fig.3.16 Sinteza num|r|torului binar de 3 biÛi cu bistabili T

invers|. Diagramele de timp corespunz|toare num|r|rii directe sunt cele din


Fig.3.17. La fel ca în cazul diagramelor din Fig.3.13, s-a considerat c|
perioada ceasului Ck nu este suficient de mare pentru a se putea neglija timpii
de r|spuns ai bistabililor tp Ck - Q , tp Ck - QN.

Figura 3.17

Toate st|rile (numerele) generate dureaz| câte o perioad| de ceas fiecare şi nu


apari st|ri false (erori), astfel c| pentru citirea rezultatelor nu este necesar
vreun semnal de eşantionare.
Din punct de vedere al ariei consumate, implementarea cea mai avantajoas| a
reÛelei combinaÛionale de calcul al variabilelor logice Tj , j = 2, n - 1 este cea
desenat| în Fig.3.18. Calea de propagare cea mai lung|, de la Q0 la Tn - 1 , are
o întârziere egal| cu (n - 2) · tp AND2 unde tp AND2 este timpul de propagare prin
Circuite Logice SecvenÛiale Sincrone 137

Fig.3.18 ReÛea de calcul al variabilelor T cu consum minim de arie

poarta AND2. RestricÛia care trebuie impus| asupra semnalului de ceas este
TCk > tp Ck - Q + (n - 2) · tp AND2 + tsetup (3.6)
tsetup fiind parametru al bistabilului T.
Schema de num|r|tor binar de n biÛi din Fig.3.19 este asem|n|toare cu
cea din Fig.3.12 (bistabilii comut| în serie). Fiec|rei celule divizoare de
frecvenÛ| cu 2 i s-a ad|ugat un bypass pentru semnalul de ceas astfel încât
fronturile de la ieşire, transmise c|tre celula urm|toare, s| apar| mai devreme.

Fig.3.19 Num|r|tor binar de n biÛi cu bypass pentru clock

Ieşirile porÛilor OR2 sunt semnale de transport de tip Cy_2 (Fig.3.10).


FuncÛionarea ca num|r|tor invers, în cazul particular n = 3, este ilustrat| prin
diagramele de timp din Fig.3.20. Timpul de propagare prin poarta OR2 este
mai mic decât timpul de r|spuns al bistabilului (tp OR2 < tp Ck -QN). În Fig.3.20 s-a
considerat c| perioada ceasului Ck are o valoare apropiat| de minim. Se
observ| c| în secvenÛa de num|rare apar erori sau st|ri false, ceea ce implic|
necesitatea eşantion|rii rezultatului.
138 Cap.3 Num|r|toare

Figura 3.20

RestricÛia ce trebuie impus| semnalului de ceas Ck este


TCk > n · tp OR2 + tsample. (3.7)
Cum era de aşteptat, structura de num|r|tor binar din Fig 3.19 are performanÛe
superioare celei din Fig.3.12.
Num|r|toarele binare de n biÛi din figurile 3.12, 3.15 .şi 3.19 realizeaz|
simultan num|rare direct| şi num|rare invers|. Pentru a obÛine un num|r|tor
reversibil ieşirile Q şi Q̄ trebuie multiplexate dup| cum se arat| în figura
urm|toare. Se obÛin num|r|toare reversibile cu intrare de selecÛie a sensului de
num|rare Ū/D.

Fig.3.21 Num|rare up/down multiplexat|


Circuite Logice SecvenÛiale Sincrone 139

Num|r|toarele reversibile cu dou| semnale de ceas, CkU şi CkD, au la baz|


tehnici de condiÛionare a ceasului (clock gating). Schema de principiu este
desenat| în Fig.3.22. Blocurile count up şi count down sunt combinaÛionale.
Pentru num|rare direct| CkD se fixeaz| la 1 logic iar blocul Count down trebuie
s| valideze porÛile AND2, adic| s| pun| la nivel high intr|rile de jos ale acestor
porÛi. De asemenea, blocul Count up trebuie s| distribuie ceasul CkU la intr|rile
de sus ale porÛilor AND2. Fronturile ceasului trebuie s| ajung| simultan şi cu
întârzieri minime la bistabili. Pentru num|rare invers| se fixeaz| la 1 logic CkU.

Fig.3.22 Num|r|tor reversibil cu dou| semnale de ceas

Structura din figura de mai sus este valabil| pentru num|r|toare din orice baz|
de numeraÛie. Bistabilii opereaz| ca divizoare de frecvenÛ| cu 2.
Schemele de expandare din figurile 3.12, 3.15 şi 3.19, aplicate unor
celule de num|rare de 1 bit, pot fi generalizate în sensul c| fiecare celul|
(divizor de frecvenÛ| cu 2) se poate înlocui cu un num|r|tor binar de orice
dimensiune dar de acelaşi tip. În Fig.3.23 sunt prezentate scheme de expandare
pentru diferite tipuri de num|r|toare binare.
Num|r|toarele din Fig.3.23a nu au ieşire de transport îns| tranziÛia negativ| al
celui mai semnificativ bit are loc la trecerea din valoarea Max = 111...1 în
valoarea 000...0. De aici rezult| c| cea mai semnificativ| ieşire dintr-un
num|r|tor se poate utiliza ca semnal de ceas pentru num|r|torul urm|tor.
Ieşirile de transport Br ale num|r|toarelor din Fig.3.23b sunt active pe nivelul
high. Dac| Enable = 0 toate num|r|toarele trec în regim de conservare (Hold).
FrecvenÛa sau viteza de modificare a nivelelor logice de la ieşirile
oric|rui num|r|tor scade de la LSB c|tre MSB.
140 Cap.3 Num|r|toare

Fig.3.23 Scheme de expandare a num|r|toarelor binare


Circuite Logice SecvenÛiale Sincrone 141

3.2.2 Num|r|toare binare modulo p (p … 2n)


Aceste circuite logice, indiferent de dimensiune, se pot obÛine prin dou|
metode distincte:
- prin sinteza logic| specific| maşinilor secvenÛiale, prin care se determin|
structuri combinaÛionale de calcul ale valorilor ce trebuie aplicate la intr|rile
sincrone ale bistabililor (D, J, K, T);
Şi circuitele cu clock gating ca cel din Fig.3.22 fac parte din aceast| categorie,
cu deosebirea c| valorile logice calculate de structurile combinaÛionale care fac
obiectul sintezei sunt utilizate pentru condiÛionarea semnalelor de ceas.
- prin intermediul unei leg|turi de reacÛie globale, aplicate la nivelul unui
num|r|tor binar modulo 2n, 2n > p, care s| produc| o resetare periodic| a
circuitului (dup| fiecare p perioade de ceas).
Ambele metode vor fi utilizate în continuare, ca exemple, pentru a obÛine
un num|r|tor binar invers modulo 6.
Tabelele de sintez| cu bistabili D şi grup|rile de acoperire sunt prezentate în
Fig.3.24. Ieşirile num|r|torului sunt ieşirile Q2 Q1 Q0 ale celor trei bistabili.

Fig.3.24 Sinteza num|r|torului binar invers modulo 6

Graful de tranziÛie a st|rilor num|r|torului este desenat în Fig.3.25.

Figura 3.25
142 Cap.3 Num|r|toare

St|rile 7 şi 6 sunt invalide. Circuitul intr| automat în bucla de funcÛionare


normal|, format| din st|rile valide 5, 4, 3, 2, 1 şi 0 îns| o intrare de reset este
necesar| pentru a forÛa pornirea num|r|rii dintr-o stare cunoscut|. Schema
num|r|torului este desenat| în Fig.3.26; bistabilii pot s| aib| intrarea de ceas
activ| fie pe front pozitiv fie pe front negativ.

Fig.3.26 Num|r|tor binar invers modulo 6 obÛinut prin sintez| logic|

Perioada minim| a ceasului se determin| cu relaÛia


TCk > tp Ck - QQN + tp AND + tp OR + tsetup.
În cazul utiliz|rii tehnicilor de clock gating trebuie respectat| regula ca numai
fronturile semnalului de ceas s| produc| comutarea bistabililor nu şi fronturile
semnalelor de condiÛionare a ceasului. O schem| de num|r|tor modulo 6 invers
cu clock gating se poate obÛine din schema mai general| reprezentat| în
Fig.3.27. Fiecare bistabil este configurat ca divizor de frecvenÛ| cu 2. Dac|
semnalul de condiÛionare a ceasului Cj are valoarea logic| 0, în starea curent|
CS = Q2 Q1 Q0, atunci primul front pozitiv de ceas care urmeaz| va produce
comutarea bistabilului j. Tabelele de adev|r ale variabilelor C2, C1 şi C0 sunt
urm|toarele:
Q2 Q1 Q0 C 2 C 1 C 0
0 0 0 0 1 0
1 0 1 1 1 0
1 0 0 0 0 0
0 1 1 1 1 0
0 1 0 1 0 0
0 0 1 1 1 0
0 0 0 0 1 0
Circuite Logice SecvenÛiale Sincrone 143

Fig.3.27 Schem| de maşin| secvenÛial| cu clock gating

În st|rile invalide 6 şi 7 (Q2 Q1 Q0 = 110 şi 111) variabilele C2, C1 şi C0 au


valori indiferente (don’t care). Se obÛin expresiile logice:
C2 = Q1 + Q0
C1 = Q̄2 Q̄1 + Q0
C0 = 0.
Graful complet de tranziÛie a st|rilor şi schema num|r|torului binar modulo 6
invers cu clock gating sunt reprezentate în figurile 3.28 şi respectiv 3.29.
Suplimentar, în schem| s-au f|cut optimiz|rile
Ck0 = Ck, Ck1 = Ck + Q̄2 Q̄1 + Q0, Ck2 = Ck + Q1 + Q0.
Din expresiile variabilelor C2, C1 şi C0 rezult|
Q2 Q1 Q0 = 110 Y C2 C1 C0 = 100 Y Q2+ Q1+ Q0+ = 101
Q2 Q1 Q0 = 111 Y C2 C1 C0 = 110 Y Q2+ Q1+ Q0+ = 110.

Figura 3.28
144 Cap.3 Num|r|toare

Fig.3.29 Num|r|tor binar invers modulo 6 cu clock gating

Circuitul intr| automat în bucla de funcÛionare normal|. Comanda RN este


necesar| pentru a controla num|rul iniÛial. Trebuie impus| restricÛia
tHCk > tp OR + tp Ck -QQN (tp AND nu conteaz| în acest caz particular).
Faptul c| numai fronturile ceasului Ck determin| comut|rile bistabililor se
demonstreaz| cu ajutorul diagramele de timp din Fig.3.30.

Figura 3.30
Circuite Logice SecvenÛiale Sincrone 145

O schem| de num|r|tor binar invers modulo 6 obÛinut prin aplicarea unei


reacÛii pe intrarea de înc|rcare paralel| asincron| a unui num|r|tor binar invers
modulo 8 este desenat| în Fig.3.31.

Fig.3.31 Num|r|tor binar invers modulo 6 cu reacÛie asincron|

În absenÛa leg|turii de reacÛie şi cu PL = 1 num|rarea include toate cele 8 st|ri.


Poarta NAND3 detecteaz| starea sau num|rul 7 (Q2 Q1 Q0 = 111). Din starea
curent| 0 circuitul comut| în starea 7 la primul front pozitiv de ceas; îns| în
aceast| stare se activeaz| intrarea de înc|rcare paralel| şi se forÛeaz| imediat
noua stare Q2 Q1 Q0 = 101. În continuare, înainte de urm|torul front pozitiv de
ceas, intrarea de înc|rcare paralel| se dezactiveaz| iar circuitul îşi reia
funcÛionarea sincron|. Înc|rcarea paralel| a num|r|torului se face dup| fiecare
6 perioade de ceas. O porÛiune din funcÛionarea num|r|torului cu reacÛie este
ilustrat| în diagramele de timp din Fig.3.32.

Fig.3.32 FuncÛionarea num|r|torului cu reacÛie din Fig.3.31


146 Cap.3 Num|r|toare

St|rile 7 şi 5 dureaz| împreun| o perioad| de ceas. La ieşirea Q1 apare un


impuls nedorit, a c|rui durat| este tp NAND3 + tp PL - Q.
În general schemele de num|r|toare cu reacÛie ca cea din Fig.3.31 sunt
susceptibile la erori cauzate de durata insuficient| de activare a intr|rii
asincrone (Reset, PL); este posibil ca anumite schimb|ri de valori la ieşiri s|
nu aib| succes. Garantarea unei durate suficiente pentru impulsul de Reset sau
PL se poate obÛine prin introducerea unui bistabil în bucla de reacÛie. Schema
anterioar| modificat| în acest mod este redesenat| în Fig.3.33.

Fig.3.33 Num|r|tor binar invers cu bistabil în bucla de reacÛie asincron|

Starea care trebuie detectat| pentru activarea reacÛiei este 0. FuncÛionarea


circuitului este prezentat| în diagramele de timp urm|toare.

Fig.3.34 FuncÛionarea num|r|torului cu bistabil în bucla de reacÛie


Circuite Logice SecvenÛiale Sincrone 147

Trecerea dintr-o stare curent| în starea viitoare se face cu întârzierea tp Ck - Q (Nr)


faÛ| de frontul pozitiv de ceas, cu excepÛia trecerii din starea 0 în starea 5; în
acest caz întârzierea este tp NAND + tp PL - Q (Nr). Aceste dou| întârzieri au valori
apropiate. Semnalul Ck trebuie s| îndeplineasc| urm|toarea condiÛie:
tHCk > max{tp Ck - Q (Nr) , tp NAND + tp PL - Q (Nr)} + tp NOR + tsetup dff.
Diagramele din Fig.3.34 au fost trasate în ipoteza c|
tp Ck - Q (Nr) > tp NAND + tp PL - Q (Nr).
Schemele de num|r|toare din figurile 3.31 şi 3.33 nu au comenzi de
iniÛializare. Un exemplu de introducere a unei comenzi asincrone active low,
prin care s| se poat| forÛa circuitul din Fig.3.33 în starea 1 (Q2 Q1 Q0 = 001)
este prezentat în figura de mai jos.

Fig.3.35 Num|r|tor binar invers modulo 6 cu intrare de iniÛializare

Pentru a obÛine un num|r|tor binar direct modulo 6 cu reacÛie asincron|


este necesar şi suficient ca num|r|torul binar direct modulo 8 s| aib| comand|
de reset; înc|rcarea paralel| este suficient| dar nu şi necesar|. Schema
circuitului şi graful de tranziÛie a st|rilor sunt desenate în Fig.3.36.
PerformanÛele acestui circuit sunt identice cu cele ale num|r|torului invers din
Fig.3.31. Poarta NAND2 detecteaz| st|rile 6 şi 7 (mintermenul Q2Q1) îns|,
num|rarea fiind direct|, starea 6 este cea care va produce activarea intr|rii RN
a num|r|torului modulo 8.
Schema de num|r|tor binar direct modulo 6 cu bistabil în bucla de reacÛie
asincron| este reprezentat| în Fig.3.37.
148 Cap.3 Num|r|toare

Fig.3.36 Num|r|tor binar direct modulo 6 cu reacÛie asincron|

Fig.3.37 Num|r|tor binar direct cu bistabil în bucla de reacÛie asincron|

Poarta AND2 din figura de mai sus detecteaz| st|rile 5 şi 7, acoperite de


mintermenul Q2Q0. Resetarea num|r|torului este determinat| de trecerile prin
starea 5.
PerformanÛe comparabile cu ale num|r|toarelor binare modulo p, p … 2n,
cu bistabil în bucla de reacÛie asincron| se pot obÛine prin reacÛie sincron|.
Num|r|torul binar modulo 2n c|ruia i se aplic| reacÛia trebuie s| aib| o
comand| sincron| de reset sau de înc|rcare paralel|. Un exemplu de num|r|tor
cu reacÛie sincron| este cel din Fig.3.38; diagramele de timp corespunz|toare
funcÛion|rii circuitului sunt reprezentate în Fig.3.39. Num|r|torul binar direct
modulo 8 poate s| aib| orice tip de arhitectur| intern|, nu neap|rat cu bypass
pentru semnalul de ceas.
Pentru ca semnalele interne Ck1 şi Ck2 s| nu fie afectate de hazard, palierul
high al ceasului Ck trebuie s| aib| o durat| care s| respecte condiÛia
tHCk > tp Ck - QN + tp AND2.
Circuite Logice SecvenÛiale Sincrone 149

Fig.3.38 Num|r|tor binar direct modulo 6 cu reacÛie sincron|

Perioada minim| a ceasului se calculeaz| cu relaÛia


TCk > tp Ck - Q + tp NAND2 + tp AND2 + tsetup.

Fig.3.39 Diagramele de funcÛionare ale num|r|torului din Fig.3.38


150 Cap.3 Num|r|toare

3.3 Num|r|toare zecimale

Celula de num|rare elementar| sau de o cifr| în baza 10 este num|r|torul


binar modulo 10 direct, invers sau reversibil. Un num|r|tor zecimal sau BCD
(Binary Coded Decimal) de n cifre sau digiÛi este compus din n celule de
num|rare elementare iar num|rul semnalelor de ieşire este 4n.
Structura unei celule de num|rare BCD se obÛine prin sintez| logic|, urmând
proceduri similare cu acelea utilizate pentru circuitele din figurile 3.26 şi 3.29.
Celula de num|rare BCD este o maşin| secvenÛial| ce conÛine 4 bistabili; 6 din
cele 16 st|ri ale maşinii sunt invalide.

3.3.1 Num|r|toare zecimale modulo 10n


În Fig.3.41 sunt desenate scheme de num|r|toare zecimale modulo 10n.
Fie D0 digitul sau cifra cea mai puÛin semnificativ| (cifra unit|Ûilor) şi Dn-1 cifra
cea mai semnificativ|. Num|rul generat poate fi scris sub forma
Out = D0 + D1·101 + D2·102 + ... + Dn - 1·10n - 1. (3.8)
Pe durata unui ciclu complet de num|rare, de la 0...00 la 9...99 sau invers,
fiecare cifr| Dj, j = 0, n - 1, ia toate valorile cuprinse între 0 şi 9. Codurile
invalide 10 = 10102, 11 = 10112, ..., 15 = 11112 pot s| apar| imediat dup|
conectarea tensiunii de alimentare dac| nu se actveaz| intrarea de iniÛializare.
Num|r|torul zecimal modulo 10n are 10n st|ri valide şi (24n - 10n) st|ri invalide.
Dac| fiecare celul| BCD are intrare automat| în bucla format| din st|rile
valide 0, 1, 2, ..., 9 atunci şi num|r|torul de n cifre va intra automat în bucla
normal| de funcÛionare; o intrare de iniÛializare este îns| necesar|.
În continuare se va determina structura unei celule de num|rare BCD
reversibile şi cu înc|rcare paralel| asincron|. Bistabilul utilizat trebuie s| aib|
comenzi asincrone de SET şi RESET. Logica de înc|rcare asincron| a unui
bistabil este modelat| şi implementat| ca în Fig.3.40.
Structura celulei de baz| care va fi sintetizat| este desenat| în Fig.3.42; logica
de înc|rcare paralel| asincron| a bistabililor nu este reprezentat|.

Fig.3.40 Bistabil cu înc|rcare asincron|


Circuite Logice SecvenÛiale Sincrone 151

Fig.3.41 Scheme de expandare a num|r|toarelor BCD


152 Cap.3 Num|r|toare

Fig.3.42 Celul| de num|rare BCD reversibil|, cu dou| ceasuri

Ceasul inactiv trebuie blocat la valoarea logic| 1. Bistabilii opereaz| ca


divizoare de frecvenÛ| cu 2. Tabelele de adev|r ale blocurilor UP şi DOWN
sunt reprezentate în figura de mai jos.

Fig. 3.43 Sinteza blocurilor UP şi DOWN


Circuite Logice SecvenÛiale Sincrone 153

La num|rare direct| (CkD blocat în 1) un front pozitiv ale ceasului CkU va


produce comutarea bistabilului j dac| si numai dac| valoarea curent| a
variabilei Cj este 0. Astfel
- bistabilul 0 comut| la fiecare front pozitiv de ceas
- bistabilul 1 comut| dac| starea curent| este 1, 3, 5 sau 7
- bistabilul 2 comut| dac| starea curent| este 3 sau 7
- bistabilul 3 comut| dac| starea curent| este 5 sau 9.
În mod asem|n|tor se determin| şi locaÛiile zerourilor din tabelele variabilelor
B3, B2, B1 care controleaz| num|rarea invers| (CkU blocat în 1).
Se obÛin urm|toarele expresii logice:
C1 = Q3 + Q̄0
C2 = Q3 + Q̄1 + Q̄0
C3 = (Q3 + Q̄2 + Q̄1 + Q̄0)(Q̄3 + Q2 + Q1 + Q̄0)
B1 = (Q3 + Q̄1 + Q0)(Q3 r Q2 + Q1 + Q0)
B2 = Q3 r Q2 + Q1 + Q0
B3 = Q2 + Q1 + Q1.
Cy_1 = Q3 + Q̄2 + Q̄1 + Q0 + CkD
Br_1 = Q3 + Q2 + Q1 + Q0 + CkU
Cy_2 = Q3 + Q̄2 + Q̄1 + Q0 + CkD + CkU
Br_2 = Q3 + Q2 + Q1 + Q0 + CkU + CkD
Se utilizeaz| fie Cy_1 şi Br_1 fie Cy_2 şi Br_2 (definite în Fig. 3.9 şi 3.10).
Ieşirile de transport se activeaz| numai la num|rarea direct| iar cele de
împrumut se activeaz| numai la num|rarea invers|.

3.3.2 Num|r|toare zecimale modulo p (p … 10n)


Un num|r|tor de acest tip se obÛine printr-o reacÛie sincron| sau
asincron| aplicat| unui num|r|tor zecimal modulo 10n (10n > p). Ca exemplu
se va construi un num|r|tor zecimal direct modulo 467 în 3 variante, ilustrate
în Fig.3.44.
Decodificatorul utilizat pentru activarea comenzii RESET are o structur|
simplificat|, bazat| pe ordonarea st|rilor de la num|rarea direct|. Un
decodificator care genereaz| un impuls high numai pe durata st|rii 467 strict,
are ecuaÛia de funcÛionare

R = S̄3·S2·S̄1·S̄0·Z̄3·Z2·Z1·Z̄0·Ū3·U2·U1·U0.
154 Cap.3 Num|r|toare

Fig.3.44 Num|r|toare zecimale modulo 467 cu reacÛie


Circuite Logice SecvenÛiale Sincrone 155

Decodificatorul simplificat este descris de expresia logic|


R = S2·Z2·Z1·U2·U1·U0.
Se obÛine R = 1 în st|rile 467, 477, 567, 577, 667, 677, 767 şi 777 îns| numai
starea 467 activeaz| reacÛia în regimul permanent de funcÛionare. Starea 467
este decodificat| în schema din Fig.3.44a; în schemele din Fig.3.44b şi
Fig.3.44c se decodific| starea 466.
Atunci când se utilizeaz| reacÛia sincron|, circuitul trebuie s| conÛin| o logic|
suplimentar| care s| determine aplicarea frontului activ de ceas simultan la
toate celulele de num|rare. Aceast| acÛiune este autorizat| numai în starea
decodificat|. În schema din Fig.3.44c, pe durata st|rii 466 la ieşirea porÛii
NAND3 se obÛine nivelul logic 0; prin intermediul celor dou| multiplexoare,
frontul pozitiv care urmeaz| s| apar| în semnalul Ck va acÛiona şi celulele de
num|rare cu semnificaÛiile de zeci şi sute. Dup| acest front de ceas num|r|torul
ajunge în starea 000 iar nivelul 1 logic de la ieşirea porÛii NAND3 reface calea
de propagare a ceaslui între celule.
Grafurile de tranziÛie a st|rilor celor trei num|r|toare din Fig.3.44 a, b,
c sunt desenate în Fig.3.45. St|rile invalide ale num|r|torului modulo 103 nu
sunt reprezentate.

Fig.3.45 Grafuri de tranziÛie a st|rilor nr. zecimal modulo 467

3.4 Num|r|toare în baze de numeraÛie oarecare

Celula de num|rare elementar| sau de o cifr| într-o baz| B oarecare este


num|r|torul binar modulo B direct, invers sau reversibil. Un num|r|tor de n
cifre în baza B este compus din n celule de num|rare elementare în baza B iar
156 Cap.3 Num|r|toare

num|rul semnalelor de ieşire este n × f, unde f reprezint| formatul sau num|rul


minim de biÛi cu care se poate scrie (B - 1).
Toate aspectele tratate în paragraful anterior, referitoare la num|r|toarele
zecimale, sunt uşor de extins şi de reformulat pentru oricare alt| baz| de
numeraÛie, mai mic| sau mai mare decât 10.

3.5 Divizoare de frecvenÛ|

OperaÛia efectuat| de un divizor de frecvenÛ| cu factorul k (num|r întreg)


este descris| prin diagramele de timp reprezentate în Fig.3.46; In şi Out sunt
intrarea şi respectiv ieşirea divizorului.

Fig.3.46 Divizare de frecvenÛ| cu num|rul întreg k

În afar| de relaÛia fOut = fIn / k sau TOut = k × TIn , divizarea de frecvenÛ| înseamn|
şi reducerea de k ori a num|rului de tranziÛii la ieşire faÛ| de intrare. Altfel
spus, pe un interval de timp TOut semnalul de ieşire Out conÛine o singur|
tranziÛie H ` L şi o singur| tranziÛie L _ H. Raportul r/k se numeşte factor de
umplere al semnalului periodic Out.
Prin conectarea în serie sau în cascad| a divizoarelor de frecvenÛ| cu
factorii k1, k2, ..., kn se obÛine un divizor de frecvenÛ| cu factorul k = k1 k2 ... kn;
ordinea de conectare a circuitelor nu conteaz|.
O maşin| secvenÛial| care are un graf de tranziÛie a st|rilor valide ca cel
din figura de mai jos poate fi un divizor de frecvenÛ| cu factorul k.

Fig.3.47 Maşin| secvenÛial| cu potenÛial de divizare de frecvenÛ|


Circuite Logice SecvenÛiale Sincrone 157

Toate cele k st|ri valide ale maşinii secvenÛiale sunt înl|nÛuite într-o singur|
bucl|. Ieşirea este una dintre variabilele de stare ale circuitului. Forma grafului
reprezint| o condiÛie necesar| dar nu şi suficient| pentru divizarea de frecvenÛ|.
Realizarea operaÛiei depinde de modul de codificare binar| a st|rilor. Un
exemplu de codificare pentru a obÛine factorul de divizare 12 este urm|torul.
stare Q3Q2Q1Q0
S0 0 0 0 0
S1 0 1 0 0
S2 0 1 1 0
S3 1 1 1 0
S4 1 0 1 0
S5 1 1 1 1
S6 1 0 0 1
S7 1 1 0 1
S8 0 1 0 1
S9 0 1 1 1
S10 0 0 1 1
S11 0 0 0 1
Divizare de frecvenÛ| cu 12 se obÛine la Q3 şi la Q0. Factorii de umplere ai
acestor semnale sunt 5/12 şi respectiv 7/12.
Num|r|toarele sunt şi divizoare de frecvenÛ|. Orice num|r|tor în baza B
(B > 2), modulo Bn, realizeaz| operaÛia de divizare în frecvenÛ| a ceasului cu
factorul Bn, la ieşirea cea mai semnificativ|; un num|r|tor modulo p (p … Bn),
realizeaz| operaÛia de divizare în frecvenÛ| a ceasului cu factorul p la ieşirea
cea mai semnificativ| care nu este constant|.
Schemele de num|r|toare zecimale din Fig.3.44 pot fi utilizate ca divizoare de
frecvenÛ| cu 467; ieşirea divizorului este S2 iar factorul de umplere al acestui
semnal periodic are valoarea 67/467.
Schemele de num|r|toare cu reacÛie destinate diviz|rii de frecvenÛ| sunt
mai puÛin restrictive şi mai uşor de implementat decât cele cu rol de num|r|tor.
Schema de divizor de frecvenÛ| cu 6 din Fig.3.48 este asem|n|toare cu cea de
num|r|tor binar invers modulo 6 din Fig.3.33. Poarta OR2 detecteaz| st|rile
Q2Q1Q0 = 000 şi Q2Q1Q0 = 001; num|r|torul fiind invers, prima care apare
dintre acestea este 001. Frontul pozitiv de ceas care urmeaz| încarc| bistabilul
cu 0 şi în continuare num|r|torul cu 5 (1012). Urm|torul front pozitiv de ceas
g|seşte num|r|torul blocat în starea 5, deoarece intrarea de înc|rcare paralel|
asincron| este înc| activ|; îns| bistabilul comut| în starea Q = 1 şi deblocheaz|
158 Cap.3 Num|r|toare

num|r|torul pentru fronturile urm|toare de ceas. Rezult| c| num|r|torul


r|mâne în starea 5 dou| perioade de ceas consecutive. St|rile num|r|torului se
succed astfel: ..., 3, 2, 1, 5, 5, 4, 3, 2, 1, 5, 5, 4, 3, 2, 1, 5, 5, 4, 3, 2, 1, ...

Fig.3.48 Divizor de frecvenÛ| cu 6

Diagramele de timp din Fig. 3.49 ofer| mai multe detalii despre comportarea
dinamic| a circuitului. Divizare de frecvenÛ| cu 6 se obÛine la ieşirile Q2 şi Q1;
factorii de umplere au valorile 3/6 = 50% şi respectiv 2/6 = 33%.
Ieşirile de transport şi de împrumut ale num|r|toarelor cu înc|rcare
paralel| pot fi utilizate în locul decodificatoarelor externe pentru a obÛine
divizoare de frecvenÛ|. Schemele de acest tip se mai numesc şi divizoare de

Fig.3.49 FuncÛionarea divizorului de frecvenÛ| din Fig.3.48


Circuite Logice SecvenÛiale Sincrone 159

frecvenÛ| “programabile” deoarece schimbarea factorului de divizare de


frecvenÛ| nu necesit| nici o modificare în structura circuitului ci doar
schimbarea valorilor logice de la intr|rile de înc|rcare paralel|. Un exemplu de
divizor de frecvenÛ| programabil este cel din Fig.3.50; comenzile de înc|rcare
paralel| ale celor trei celule de num|rare invers| BCD sunt de tip asincron.

Fig.3.50 Divizor de frecvenÛ| programabil

În regim permanent de funcÛionare num|rarea se face de la Sin Zin Uin pân| la


starea decodificat| şi semnalizat| la ieşirea BrS; aceast| stare depinde de modul
de implementare a semnaliz|rii trecerii prin 0 la nivelul celulei BCD:
- dac| ieşirea de împrumut este de tip Br_1 (Fig.3.9) atunci BrS se activeaz|
începând cu starea Sout Zout Uout = 099;
- dac| ieşirea de împrumut este de tip Br_2 (Fig.3.9) atunci BrS se activeaz| în
starea Sout Zout Uout = 000, pe palierul low al ceasului Ck.
Starea Sin Zin Uin se va menÛine în num|r|tor dou| perioade de ceas consecutive,
astfel c| un ciclu complet de funcÛionare normal| a divizorului corespunde
secvenÛelor de st|ri
Sin Zin Uin , Sin Zin Uin , Sin Zin Uin - 1, Sin Zin Uin - 2, ..., 101, 100, 099
şi respectiv
Sin Zin Uin , Sin Zin Uin , Sin Zin Uin - 1, Sin Zin Uin - 2, ..., 002, 001, 000.
Valorile maxime ale factorilor de divizare în aceste dou| cazuri sunt
(Sin Zin Uin - 97) şi respectiv (Sin Zin Uin + 2).
De regul| semnalul de ieşire al divizorului de frecvenÛ| este ieşirea cea mai
semnifictiv| a num|r|torului, care nu are valoare constant|. De exemplu, dac|
Sin Zin Uin = 528 atunci Sout 3 = 0 (constant|) iar ieşirea circuitului este Sout 2;
aceasta are valoarea logic| 1 pe un interval de 30 perioade de ceas consecutive
(528, 528, 527, 527, ..., 501, 500) şi valoarea logic| 0 în rest. Celor dou|
moduri de implementare a ieşirii de împrumut le corespund factorii de divizare
160 Cap.3 Num|r|toare

de frecvenÛ| 431 şi respectiv 530; factorii de umplere au valorile 30/431 şi


respectiv 30/530. În acest exemplu particular se realizeaz| divizare de frecvenÛ|
cu 431, respectiv 530 şi la ieşirea Sout 1. Aceast| ieşire se menÛine la 1 logic pe
parcursul a 200 de perioade de ceas consecutive, când cifra sutelor are valorile
3 şi 2. Factorii de umplere la ieşirea Sout 1 au valorile 200/431 şi respectiv
200/530.

3.6 Probleme rezolvate

1. a) S| se determine structura celulei elementare de num|rare în baza 7


având simbolul desenat în figura de mai jos. Semnalizarea trecerii prin 6 la
num|rare direct| şi prin 0 la num|rare invers| se face la aceeaşi ieşire, notat|
Cy / Br şi activ| low. Se vor utiliza bistabili de tip D f|r| comenzi asincrone
SET-RESET.
b) S| se deseneze o schem| de expandare a celulei, pentru obÛinerea unui
num|r|tor de n cifre în baza 7.

Figura 3.51

R e z o l v a r e:
a) Implementarea celulei de num|rare reversibil| în baza 7 descris| în enunÛul
problemei se poate face cu schema reprezentat| în Fig.3.52. Intr|rile D ale
bistabililor sunt multiplexate; cele trei circuite MUX2 au intrarea de selecÛie
controlat| de semnalul PL. Trebuie sintetizate blocurile combinaÛionale notate
NextState-Logic şi Expand-Logic.
Ieşirea Cy/Br se activeaz| pe toat| durata st|rii 6 (o perioad| de ceas) la
num|rarea direct| şi pe toat| durata st|rii 0 la num|rarea invers|. Structura
blocului Expand-Logic este descris| de expresia logic|

Cy / Br = (U/D̄)·Out[2]·Out[1] + (U/D̄)·Out[2]·Out[1]·Out[0] =
(U/D̄)·Out[2]·Out[1] · (U/D̄ + Out[2] + Out[1] + Out[0]).
Circuite Logice SecvenÛiale Sincrone 161

Figura 3.52

Dac| se doreşte ca ieşirea de transport/împrumut s| fie activ| numai pe palierul


LOW al semnalului de ceas şi nu pe întreaga perioad|, atunci la expresia
anterioar| trebuie ad|ugat| (operaÛia logic| OR) variabila Ck, adic|
162 Cap.3 Num|r|toare

Cy / Br = (U/D̄)·Out[2]·Out[1] · (U/D̄ + Out[2] + Out[1] + Out[0]) + Ck.


Blocul NextState-Logic este modelat prin tabelele de adev|r reprezentate în
Fig.3.53.

Figura 3.53

Grup|rile de acoperire ale unit|Ûilor din aceste tabele determin| urm|toarele


expresii logice:

D2 = U/D̄@ EnQ̄2Q̄1Q̄0 + U/D̄ @ EnQ1Q0 + U/D̄ @ Q2Q1 + U/D̄ @ Q2Q̄1 +


+ EnQ2 + Q2Q0 = En (U/D̄ · Q̄2Q̄1Q̄0 + U/D̄ · Q1Q0) + Q2 (U/D̄rQ1 + En + Q0)
D1 = U/D̄ @ EnQ̄1Q̄0 + U/D̄ @ EnQ̄1Q0 + U/D̄@ Q̄2Q1Q̄0 + U/D̄@ Q1Q0 +
+ EnQ1 = EnQ̄1@ U/D̄rQ0 + Q1(U/D̄@ Q̄2Q̄0 + U/D̄@ Q0 + En)
Circuite Logice SecvenÛiale Sincrone 163

D0 = U/D̄ @ EnQ̄2Q̄0 + U/D̄ @ EnQ1Q̄0 + EnQ2Q̄1Q̄0 + EnQ0.


Graful complet de tranziÛie a st|rilor num|r|torului din Fig.3.52, corespunz|tor
situaÛiei PL = 1, este reprezentat în Fig.3.54; starea 7 este invalid|. Valorile
asociate arcelor au semnificaÛia En U/D̄.

Figura 3.54

b) Schema de expandare a celulei de num|rare în baza 7 este desenat| în


Fig.3.55.

Figura 3.55

2. S| se sintetizeze o celul| de num|rare binar| direct| modulo 9, care s|


se expandeze dup| schema indicat| în Fig.3.56 pentru a obÛine un num|r|tor
direct în baza 9 de n cifre; EI şi EO sunt intrarea de expandare şi respectiv
ieşirea de expandare. Fiecare celul| are o intrare de iniÛializare sincron|, activ|
high, prin intermediul c|reia se poate forÛa starea 1 (C[3:0] = 0001).
164 Cap.3 Num|r|toare

Figura 3.56

R e z o l v a r e:
Din schema de expandare rezult| c| num|rarea este permis| numai dac| la
intrarea de expandare EI se aplic| nivelul logic 1. Celula cu rangul 0 num|r|
toate fronturile pozitive de ceas. Celula cu rangul j, j = 1, n - 1 trebuie s|
numere numai fronturile pozitive de ceas care produc trecerea din starea 8 în
starea 0 a celulei cu rangul j - 1. Altfel spus, st|rile celulei cu rangul 0 se
modific| la intervale de timp egale cu perioada ceasului TCk iar st|rile celulei
cu rangul j se modific| la intervale de timp egale cu 9 j · TCk. Din acest motiv
ieşirea EO nu poate fi un simplu decodificator pentru starea 8, adic|
EO … C[3]· C̄[2]· C̄[1]· C̄[0].
Este nevoie ca impulsul high generat la ieşirea EO a fiec|rei celule s| dureze
o perioad| de ceas, indiferent de poziÛia celulei în lanÛul de expandare. Acest
lucru se poate obÛine astfel:
EO = EI · C[3]· C̄[2]· C̄[1]· C̄[0].
Deoarece num|rarea este direct|, decodificarea st|rii 8 se poate simplifica; este
suficient s| se detecteze doar valoarea 1 a bitului C[3] iar expresia ieşirii de
expandare devine:
EO = EI · C[3].
Este uşor de observat c| dac| impulsul high aplicat la intrarea de expandare EI
a unei celule are o durat| egal| cu TCk atunci la ieşirea de expandare EO a
celulei apare un impuls high cu durata egal| tot cu TCk, numai dac| celula se
afl| în starea 8. Diagramele de timp din Fig.3.57 ilustreaz| acest raÛionament.
Schema de iniÛializare sincron| în starea 8 a unei celule de num|rare cu
bistabili de tip D este desenat| în Fig.3.58; schema conÛine întreaga structur|
a celulei. Blocul combinaÛional notat Count-Logic conÛine logica necesar|
operaÛiei de num|rare direct| modulo 9, condiÛionat| de intrarea EI. Aceast|
intrare cu rol de expandare are în acest caz şi semnificaÛie de autorizare a
Circuite Logice SecvenÛiale Sincrone 165

Figura 3.57

num|r|rii (Enable). Bistabilii comut| în paralel la fronturile pozitive de ceas.


Ieşirile Q sunt ieşirile celulei: C[3] = Q3, C[2] = Q2, C[1] = Q1 şi C[0] = Q0.

Figura 3.58

Tabelele de sintez| a blocului Count-Logic sunt reprezentate în Fig.3.59. Când


Init = 0 blocul Count-Logic genereaz| starea viitoare a celulei:
A0 = D0, A1 = D̄1, A2 = D̄2, A3 = D̄3.
St|rile invalide 9, 10, 11, 12, 13, 14 şi 15 au fost l|sate indiferente atât în
modul de operare hold (EI = 0) cât şi în regim de num|rare (EI = 1).
166 Cap.3 Num|r|toare

Figura 3.59

Structura blocului Count-Logic este descris| de expresiile logice:


A3 = (EI + Q̄3)· EI Q2Q1Q0
A2 = Q̄2Q̄1 + Q̄2Q̄0 + EI Q̄2 + EI Q2Q1Q0
A1 = Q̄1Q̄0 + EI Q̄1 + EI Q1Q0
A0 = EI Q0 + EI Q̄3Q̄0.
Circuite Logice SecvenÛiale Sincrone 167

Graful complet de tranziÛie a st|rilor în cazul Init = 0 este desenat în Fig.3.60.


Pe arce sunt trecute valorile intr|rii de expandare EI.

Figura 3.60

3. S| se construiasc| divizoare de frecvenÛ| cu factorul 247 utilizând


celule de num|rare ca acelea reprezentate în Fig.3.61. Intrarea de înc|rcare
paralel| a celulei de num|rare binar| de 4 biÛi este asincron| iar intrarea de
reset a celulei de num|rare BCD este sincron|.

Figura 3.61
R e z o l v a r e:
a) Num|rul celulelor de num|rare binar| de 4 biÛi necesar pentru realizarea
unui divizor de frecvenÛ| cu 247 se determin| din formatul echivalentului binar
al acestui factor: 24710 = 27 + 26 + 25 + 24 + 22 + 21 + 20 = 111101112. Sunt
necesare dou| celule.
168 Cap.3 Num|r|toare

În schema de divizor de frecvenÛ| din Fig.3.62 se detecteaz| starea 247.


Când num|r|torul ajunge în aceast| stare se activeaz| intrarea de înc|rcare
paralel| şi se forÛeaz| trecerea num|r|torului în starea 0. În aceast| stare
înc|rcarea paralel| se dezactiveaz| şi num|rarea continu| în ritmul impus de
semnalul de ceas. St|rile 247 şi 0 dureaz| împreun| TCk.

Figura 3.62

Ieşirea divizorului este Y = OutB[3]. Din starea 0 pân| în starea 127 inclusiv,
Y = 0; apoi Y = 1 în st|rile 128 ÷ 246. Factorul de umplere este 119/247.
Prin introducerea unui bistabil în bucla de reacÛie se obÛine schema din
Fig.3.63. Starea 0 se menÛine 2 perioade de ceas, astfel c| starea care trebuie
detectat| este 246. Factorul de umplere al semnalului Y devine 118/247.

Figura 3.63

În locul detectorului “extern” realizat cu porÛi AND şi NAND se poate


utiliza ieşirea de transport CyB. Schema unui astfel de divizor de frecvenÛ| este
desenat| în Fig.3.64. Trebuie determinate valorile logice care urmeaz| s| fie
Circuite Logice SecvenÛiale Sincrone 169

Figura 3.64

înc|rcate paralel. Prima stare care activeaz| intr|rile de înc|rcare paralel| PL


depinde de modul de semnalizare a trecerii prin starea 15 (11112) a celulei de
num|rare de 4 biÛi. În diagramele de timp din Fig.3.65 sunt reprezentate ieşirile
de transport ale celulelor A şi B corespunz|toare celor dou| tipuri de
semnalizare indicate în Fig.3.10.

Figura 3.65

Starea notat| cu semnul întreb|rii (?) în diagramele de mai sus este starea
determinat| de cele 8 valori logice aplicate la intr|rile de date paralele din
Fig.3.64. Din diagrame se observ| c|:
- în cazul transportului de tip Cy_1 valoarea maxim| a factorului de divizare
de frecvenÛ| care se poate obÛine cu schema din Fig.3.64 este 240;
170 Cap.3 Num|r|toare

- dac| transportul este de tip Cy_2 atunci st|rile 255 şi ? dureaz| împreun| o
perioad| de ceas.
Starea care trebuie înc|rcat| paralel în cele dou| celule este ? = 810, adic|
InA[0:3] = 0001 şi InB[0:3] = 0000. Ieşirea Y are valoarea logic| 1 pe durata
st|rilor 128 ÷ 255 iar factorul de umplere este aproximativ 127,5/247.
Pentru a obÛine un divizor de frecvenÛ| cu 247 dintr-un num|r|tor compus
din dou| celule de num|rare cu ieşiri de transport de tip Cy_1, schema din
Fig.3.64 trebuie modificat| dup| cum se arat| în Fig.3.66.

Figura 3.66

Înc|rcarea celulelor A şi B se produce dup| frontul pozitiv al semnalului CyB,


adic| imediat dup| starea 255. Diagramele de timp din Fig.3.67 ilustreaz|
funcÛionarea circuitului în vecin|tatea st|rii 25510.

Figura 3.67

Bistabilul D se încarc| cu 0 o singur| dat| într-un ciclu de num|rare. Starea


Qdff = 0 se menÛine pe o durat| egal| cu tHCk ; palierul low al ceasului activeaz|
intrarea asincron| SET şi determin| Qdff = 1. Factorul de umplere al semnalului
Circuite Logice SecvenÛiale Sincrone 171

de ieşire Y are valoarea 128/247.


b) Sunt necesare 3 celule de num|rare BCD pentru a obÛine un divizor de
frecvenÛ| cu 247. Schema circuitului este desenat| în Fig.3.68.

Figura 3.68

La ieşirea porÛii NAND3 se obÛine valoarea logic| 0 pe durata st|rii 754. La


urm|torul front pozitiv de ceas starea viitoare a num|r|torului va fi 000 şi nu
753. St|rile num|r|torului se succed astfel:
..., 000, 999, 998, 997, ..., 756, 755, 754, 000, 999, ...
Num|rul de st|ri parcurse de circuit într-un ciclu complet de num|rare este
1000 - 753 = 247.
Deoarece cifra sutelor ia ciclic doar valorile 0, 9, 8 şi 7, adic|
S[0:3] = ..., 0000, 1001, 0001, 1110, 0000, 1001, 0001, 1110, ...
divizarea de frecvenÛ| cu factorul 247 se obÛine la trei dintre ieşirile circuitului,
şi anume S[3], S[2], S[1]. Cifra 0 dureaz| o singur| perioad| de ceas iar
duratele cifrelor 9, 8 şi 7 sunt 100, 100 şi respectiv 46 de perioade de ceas.
Rezult| c| factorii de umplere ai semnalelor periodice S[3], S[2] şi S[1] au
valorile 200/247, 46/247 şi respectiv 46/247. Semnalele S[2] şi S[1] sunt
identice.
Circuitul combinaÛional utilizat în Fig.3.68 pentru detecÛia st|rii 754 se poate
simplifica, luând în considerare faptul c| st|rile circuitului apar în ordinea
dictat| de num|rarea invers|. Prin observarea cifrelor zecimale scrise pe
coloan| în ordine invers|, de la 9 la 0, în formatul binar de 4 biÛi se constat|
urm|toarele:
- prima apariÛie a cifrei 7 coincide cu prima apariÛie a valorii logice 0 în
coloana bitului de rang 3;
- prima apariÛie a cifrei 5 coincide cu prima apariÛie a valorilor logice 0 în
172 Cap.3 Num|r|toare

coloanele biÛilor de rang 3 şi 1;


- prima apariÛie a cifrei 4 coincide cu prima apariÛie a valorilor logice 0 în
coloanele biÛilor de rang 3, 1 şi 0.

rang = 3 2 1 0
9= 1 0 0 1
8= 1 0 0 0
7= 0 1 1 1
6= 0 1 1 0
5= 0 1 0 1
4= 0 1 0 0
3= 0 0 1 1
2= 0 0 1 0
1= 0 0 0 1
0= 0 0 0 0

Divizorul de frecvenÛ| cu detectorul st|rii 754 simplificat este reprezentat în


figura de mai jos.

Figura 3.69

4. S| se analizeze funcÛionarea circuitului din Fig.3.70 şi s| se determine


regimurile permanente. Starea iniÛial| a num|r|torului binar de 4 biÛi poate fi
oricare din cele 16. De asemenea, latch-ul NAND-NAND se poate afla iniÛial
în oricare din cele dou| st|ri.
R e z o l v a r e:
Ieşirile porÛilor 1 şi 2 au semnificaÛia de SET şi respectiv de RESET pentru
latch-ul format din porÛile 3-4, relativ la ieşirea din poarta 3 care este utilizat|
pentru a controla sensul de num|rare. Comanda SET are prioritate mai mare
Circuite Logice SecvenÛiale Sincrone 173

Figura 3.70

decât comanda RESET; astfel dac| ambele sunt active se obÛine Ū/D = 1 adic|
efectul dat de SET.
Poarta 1 detecteaz| st|rile 1 şi 9 ale num|r|torului (Q3Q2Q1Q0 = (001), în care
activeaz| comanda SET; poarta 2 detecteaz| st|rile 4 şi 12 (Q3Q2Q1Q0 = (100),
în care activeaz| comanda RESET.
Dac| starea curent| a num|r|torului este 1 sau 9 atunci funcÛionarea continu|
cu num|rare invers|; dac| starea curent| a num|r|torului este 4 sau 12 atunci
funcÛionarea continu| cu num|rare direct|.
Circuitul poate s| ajung| în oricare din urm|toarele dou| regimuri permanente
de funcÛionare, descrise prin cîte o succesiune periodic| de st|ri (scrise în baza
10):
..., 1, 0, 15, 14, 13, 12, 13, 14, 15, 0, 1, 0, 15, 14, 13, 12, ...
..., 9, 8, 7, 6, 5, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 5, 6, 7, 8, 9, ...
În aceste dou| secvenÛe nu apar st|rile 2, 3, 10 şi 11. Dac| starea curent| a
num|r|torului ar fi una dintre aceste st|ri, indiferent de sensul de num|rare, se
va ajunge într-una din st|rile 1, 4, 9 sau 12 şi apoi se continu| cu unul dintre
regimurile permanente.
În primul regim permanent de funcÛionare ieşirile Q3 şi Q2 sunt identice;
acestea reprezint| o divizare cu 10 în frecvenÛ| a semnalului de ceas şi au
factorul de umplere egal cu 7/10. Forma semnalului Q2 r|mâne aceeaşi şi în al
doilea regim permanent, semnalul Q3 este inversat (= Q̄2) şi are factorul de
umplere 3/10.
Dac| intrarea Ū/D a num|r|torului ar fi conectat| la ieşirea porÛii 4 atunci se
obÛin regimurile permanente:
..., 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, ...
..., 9, 10, 11, 12, 11, 10, 9, 10, 11, 12, ...
174 Cap.3 Num|r|toare

5. Utilizând celule de num|rare BCD cu înc|rcare paralel| asincron|, s|


se construiasc| un generator de impuls care s| aib| o durat| programabil|, de
la 3 la 900 perioade de ceas. Declanşarea circuitului trebuie f|cut| cu un
impuls de start de scurt| durat|, dup| cum se arat| în figura de mai jos.

Figura 3.71
R e z o l v a r e:
Sunt necesare 3 celule de num|rare BCD. O posibilitate de implementare a
generatorului de impuls este prezentat| în Fig.3.72. Se consider| c| ieşirea de
împrumut a celulei de num|rare BCD se activeaz| pe toat| durata st|rii 0.

Fig.3.72

Nivelul 0 logic al semnalului Start forÛeaz| înc|rcarea asincron| a


num|r|torului cu Sin Zin Uin.. Dac| Sin … 0 atunci Out = 1 iar fronturile ceasului
se propag| prin poarta AND. Num|rarea începe de la valoarea Sin Zin Uin , dup|
ce semnalul Start comut| în 1 logic. Când num|r|torul ajunge la 099 ieşirea
Out comut| în 0 şi blocheaz| accesul ceasului Ck prin poarta AND c|tre
num|r|tor. Circuitul r|mâne blocat în starea 099 pân| la aplicarea unui nou
impuls Start.
Durata impulsului generat la ieşirea Out este egal| cu (Sin Zin Uin - 100) · TCk;
duratele minim| şi maxim| sunt TCk şi respectiv 900 TCk. Dac| palierul low al
semnalului Start este mai mare decât perioada ceasului atunci durata impulsului
Circuite Logice SecvenÛiale Sincrone 175

Out creşte. Considerând c| ΔtStart 0 [(n - 1) TCk , n TCk) este durata de activare
a înc|rc|rii paralele, rezult| un impuls high de ieşire cu durata
(Sin Zin Uin - 100) · TCk + (n - 1) TCk.
Schema generatorului de impuls cu durat| programabil| poate fi implementat|
cu orice tip de celul| de num|rare înzestrat| cu operaÛia auxiliar| de înc|rcare
paralel|.

6. Utilizând celule de num|rare adecvate, s| se construiasc| un convertor


de cod zecimal-binar de n digiÛi. S| se generalizeze schema pentru a realiza
conversii secvenÛiale între dou| baze de numeraÛie oarecare.
R e z o l v a r e:
Schema de principiu a unui convertor zecimal-binar secvenÛial este desenat| în
figura urm|toare.

Fig.3.73 Convertor secvenÛial BCD-binar

Intrarea în circuitul din Fig.3.73 este num|rul zecimal de n digiÛi In[0 : n-1].
Acest num|r se încarc| în num|r|torul zecimal invers de n digiÛi pe palierul
low al semnalului Start, simultan cu resetarea num|r|torului binar direct de m
biÛi. Dup| ce semnalul Start comut| în nivelul high, fronturile ceasului Ck se
propag| prin poarta AND la cele dou| num|r|toare. Detectorul de zero
blocheaz| poarta AND atunci când num|r|torul zecimal ajunge în starea 0; din
acest moment accesul semnalului de ceas la cele dou| num|r|toare este blocat.
Aceast| stare a circuitului se menÛine pân| la urm|torul impuls de Start.
Rezultatul conversiei este disponibil la ieşirile Out [0 : m-1] ale num|r|torului
binar direct de m biÛi. Num|rul m se calculeaz| din relaÛia 10n < 2m. Activarea
ieşirii Z̄ a detectorului de zero indic| sfârşitul operaÛiei de conversie.
176 Cap.3 Num|r|toare

Cele dou| num|r|toare, binar şi zecimal, din schema din Fig.3.73 se obÛin de
regul| prin expandarea unor celule de num|rare cu dimensiuni mai mici.
O schem| de conversie secvenÛial| între bazele de numeraÛie B1 şi B2 este
reprezentat| în Fig.3.74. Reprezentarea binar| a cifrelor celor dou| baze
necesit| câte un format de k şi respectiv de p biÛi. Leg|tura dintre numerele n
şi m este dat| de relaÛia B1n < B2m în ipoteza c| B1 > B2.

Fig.3.74 Convertor secvenÛial B1-B2

7. Circuitul din Fig.3.75, numit şi acumulator, funcÛioneaz| ca num|r|tor


binar direct de 4 biÛi sau modulo 16. Ieşirile num|r|torului sunt ieşirile Q ale
celor 4 bistabili, Q3Q2Q1Q0 (Q3 = MSB şi Q0 = LSB). Intrarea de transport Cin
a sumatorului binar de 4 biÛi este intrare de autorizare a num|r|rii:
(Q3Q2Q1Q0)+ = Q3Q2Q1Q0 dac| Enable = 0,
(Q3Q2Q1Q0)+ = Q3Q2Q1Q0 + 1 dac| Enable = 1.
a) S| se modifice schema din Fig.3.75 astfel încât se se obÛin|:
- num|r|tor binar modulo 16 invers,
- num|r|tor BCD direct,
- num|r|tor BCD invers,
- num|r|tor modulo 13 direct,
- num|r|tor modulo 12 invers.
În toate aceste cazuri se consider| Q3 = MSB şi Q0 = LSB.
b) S| se modifice schema din Fig.3.75 astfel încât semnificaÛiile MSB şi LSB
s| fie permutabile circular, adic|
- Q2Q1Q0Q3 Q2 = MSB şi Q3 = LSB
- Q1Q0Q3Q2 Q1 = MSB şi Q2 = LSB
- Q0Q3Q2Q1 Q0 = MSB şi Q1 = LSB.
Circuite Logice SecvenÛiale Sincrone 177

c) S| se g|seasc| modalit|Ûi de introducere în schema din Fig.3.75 a unei


comenzi de RESET sincron/asincron sau de înc|rcare paralel| sincron|.

Fig.3.75 Num|r|tor binar direct de 4 biÛi

R e z o l v a r e:
a) OperaÛia de num|rare direct| modulo 16 se poate scrie sub forma
G[3:0] = A[3:0] + 1.
Bitul G[4] = Cout se neglijeaz|. OperaÛia modulo 16 este luat| în considerare în
mod implicit. Dac| în Fig.3.75 se înlocuiesc valorile B[3:0] = 0000 şi Cin = 1
cu B[3:0] = 1111 şi Cin = 0 (sau B[3:0] = 1110 şi Cin = 1) atunci sumatorul de
4 biÛi efectueaz| operaÛia
G[3:0] = A[3:0] + 15 = A[3:0] + (16 - 1) = A[3:0] - 1,
ceea ce reprezint| o num|rare invers| modulo 16.
O schem| de num|r|tor binar reversibil de 4 biÛi se poate obÛine f|r| a
introduce componente suplimentare, din schema de num|r|tor binar direct de
mai sus dup| cum se arat| în Fig.3.76.
O num|rare BCD direct| se obÛine cu schema din Fig.3.77. Pe durata
st|rilor 0, 1, 2, 3, 4, 5, 6, 7 şi 8 la ieşirea porÛii AND2 se obÛine nivelul logic
0. Dup| urm|torul front pozitiv de ceas circuitul trece în starea 9 (10012) iar
operandul B cap|t| valoarea 6 (01102). Noua stare a circuitului va fi:
G[3:0]10 = 9 + 6 + 1 = 16 (modulo 16) = 0.
178 Cap.3 Num|r|toare

Fig.3.76 Num|r|tor binar reversibil de 4 biÛi

Nivelul logic de la ieşirea porÛii AND2 se schimb| în 0 iar num|rarea continu|


de la 0 la 9 în mod ciclic.

Fig.3.77 Num|r|tor BCD direct


Circuite Logice SecvenÛiale Sincrone 179

Pentru a obÛine o num|rare BCD invers| acumulatorul trebuie configurat ca în


figura de mai jos.

Fig.3.78 Num|r|tor BCD invers

Poarta OR4 detecteaz| starea 0; pe durata acestei st|ri operandul B are valoarea
zecimal| 9 (10012) iar la frontul pozitiv de ceas urm|tor în bistabili se încarc|
starea 9. Apoi B = 11112 şi num|rarea se face invers, de la 9 la 0, secvenÛ| de
st|ri care se repet|.
Pentru a obÛine un num|r|tor BCD reversibil, schemele din figurile 3.77 şi 3.78
trebuie combinate într-una singur|. În schema din Fig.3.77 se poate muta
valoarea 1 de la intrarea Cin la intrarea B[0], adic| valorile acestor dou| intr|ri
s| devin| Cin = 0 şi B[0] = 1. Procedând în acest mod, combinarea celor dou|
scheme const| în sinteza unui bloc combinaÛional care s| comande intr|rile
B[3:1] ale sumatorului. Simbolul acestui bloc logic este desenat în Fig.3.79.

Figura 3.79
180 Cap.3 Num|r|toare

FuncÛionarea blocului Up-Down este descris| de tabela de adev|r urm|toare.

B[2] = B[1] = (Ū/D + Q3)(Ū/D + Q1 + Q0)(Q3 + Q2 + Q1 + Q0)

Schema de num|r|tor modulo 13 direct este asem|n|toare cu schema de


num|r|tor BCD direct din Fig.3.77; în locul st|rii 9 (10012) trebuie detectat|
starea 13 (11012). Poarta AND2 se înlocuieşte cu AND3 iar intr|rile acesteia
se conecteaz| la Q3 , Q2 şi Q0. Ieşirea porÛii AND3 comand| intrarea B[1] a
sumatorului, ceilalÛi 3 biÛi ai operandului B fiind puşi la 0 logic.
Schema de num|r|tor invers modulo 12 este asem|n|toare cu schema de
num|r|tor BCD invers din Fig.3.78. Poarta OR4 ce detecteaz| starea 0 trebuie
s| comande intr|rile B[1] şi B[0] ale sumatorului iar B[3] = B[2] = 1.
Schemele de num|r|tor direct modulo 13 şi de num|r|tor invers modulo 12 pot
fi combinate într-una singur| urmând exemplul anterior, referitor la
num|r|torul BCD reversibil.
b) Schema de num|r|tor binar direct de 4 biÛi cu permutare circular| a
semnificaÛiilor sau rangurilor ieşirilor Q3 , Q2 , Q1 , Q0 este desenat| în Fig.3.80.
Dac| Enable = 0 atunci fronturile active de ceas nu modific| starea circuitului;
dac| Enable = 1 atunci un singur bit al operandului B va avea valoarea 1 în
conformitate cu tabela de adev|r a demultiplexorului şi se va obÛine o num|rare
direct|.
Sel[1:0] B[3] B[2] B[1] B[0]
0 0 0 0 0 1
0 1 0 0 1 0
1 0 0 1 0 0
1 1 1 0 0 0

Bitul B[k] = 1, k = 0, 3 determin| ca ieşirea Q k s| fie în poziÛia LSB (cea mai


puÛin semnificativ|), adic| s| aib| rangul 0. Rangul oric|rei ieşiri Q j se
determin| cu relaÛia: rang (Q j) = (j + k) modulo 4.
Circuite Logice SecvenÛiale Sincrone 181

Fig.3.80 Num|r|tor binar direct de 4 biÛi cu permutarea rangurilor ieşirilor

De exemplu, în cazul Sel[1:0] = 10 şi Enable = 1 st|rile circuitului din Fig.3.80


se succed astfel:
MSB LSB
Q1 Q0 Q3 Q2
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
....................
1 1 1 0
1 1 1 1
0 0 0 0 etc.

c) O comand| de reset asincron se poate obÛine dac| cei patru bistabili din
schemele anterioare de acumulator se înlocuiesc cu bistabili care au intrare de
RESET asincron; aceste intr|ri se leag| împreun|.
Schemele din figurile 3.81 şi 3.82 sunt prev|zute cu RESET sincron şi
respectiv cu înc|rcare paralel| sincron|. Când Reset = 0 frontul pozitiv de ceas
încarc| toÛi bistabilii cu 0 indiferent de valoarea logic| aplicat| la intrarea
Enable. Când PL = 0 frontul pozitiv de ceas încarc| bistabilii cu valorile logice
de la intr|rile paralele P3P2P1P0.
182 Cap.3 Num|r|toare

Fig.3.81 Num|r|tor binar direct de 4 biÛi cu RESET sincron

Dup| ce semnalul PL comut| în 1 logic Cin = Enable, operanzii cap|t| valorile


A[3:0] = Q[3:0] şi B[3:0] = 0000 iar num|rarea se reia de la P3P2P1P0.

Fig.3.82 Num|r|tor binar direct de 4 biÛi cu înc|rcare paralel| sincron|


Circuite Logice SecvenÛiale Sincrone 183

8. a) S| se analizeze circuitul reprezentat în Fig.3.83 şi s| se determine


succesiunea st|rilor num|r|torului NR2 în regim permanent de funcÛionare.
Ieşirea de transport Cy a num|r|torului NR2 se activeaz| pe toat| durata st|rii
15 (adic| B[3:0] = 11112) iar comanda de înc|rcare paralel| este sincron|.
b) S| se g|seasc| o soluÛie cât mai simpl| de iniÛializare a circuitului; în acest
scop cele dou| num|r|toare pot fi prev|zute cu intr|ri/ieşiri auxiliare adecvate.

Figura 3.83

R e z o l v a r e:
a) Num|r|torul NR2 num|r| toate fronturile pozitive ale ceasului Ck în timp
ce NR1 num|r| numai fronturile care se propag| prin poarta OR2; aceste
fronturi apar la trecerile NR2 prin starea 15 (B[3:0] = 11112). FuncÛionarea
circuitului în vecin|tatea st|rii 15 a num|r|torului NR2 este ilustrat| în
diagramele de timp urm|toare.

Figura 3.84
184 Cap.3 Num|r|toare

Ambele num|r|toare trec prin toate st|rile adic|


A[3:0], B[3:0] 0 {0000, 0001, 0010, 0011, ..., 1100, 1101, 1110, 1111}.
Succesiunea st|rilor num|r|torului NR2 este reprezentat| sugestiv în graficul
urm|tor.

Figura 3.85

Pantele cresc|toare desenate cu linie continu| corespund num|r|rii directe a


circuitului NR2; c|derile verticale reprezentate cu linie întrerupt| sunt
determinate de înc|rcarea paralel| a NR2 cu starea de la acel moment a
num|r|torului NR1. Un ciclu complet de funcÛionare al ansamblului format din
cele dou| num|r|toare din Fig.3.83 are 136 de perioade de ceas:
16 + 15 + 14 + 13 + ... + 2 + 1 = 136.
PorÛiunea de funcÛionare în care NR1 ajunge la valoarea maxim| este ilustrat|
în diagramele de timp din Fig.3.86.

Figura 3.86
Circuite Logice SecvenÛiale Sincrone 185

b) O soluÛie de iniÛializare a circuitului, în sensul de forÛare a unui punct


oarecare din regimul permanent de funcÛionare schiÛat în Fig.3.85 este
prezentat| în figura de mai jos.

Figura 3.87

Comanda de iniÛializare Init este sincron|. Trebuie menÛinut nuvelul logic 0 la


aceast| intrare aproximativ o perioad| de ceas, adic| un interval de timp în care
s| apar| cel puÛin un front pozitiv de ceas. În NR2 se încarc| starea curent| din
NR1, ceea ce înseamn| un punct de funcÛionare situat la începutul unei pante
cresc|toare în graficul din Fig.3.85; acest punct de funcÛionare poate fi oricare
din cele 16 posibile, deci necunoscut, iar operaÛia nu corespunde întocmai cu
una de iniÛializare. Dac| se doreşte forÛarea st|rii 0, adic| începutul celei mai
lungi pante din grafic, pe lâng| poarta AND2 trebuie ca NR1 s| aib| intrare de
RESET asincron legat| la linia Init. Aceasta reprezint| într-adev|r o soluÛie de
iniÛializare a circuitului.
Dac| în locul soluÛiei de iniÛializare prezentat| mai sus, cu poart| AND2
şi RESET asincron pentru NR1, se ia decizia ca doar NR2 s| fie prev|zut cu
RESET asincron atunci prin activarea acestei comenzi circuitul va fi scos din
regimul permanent de funcÛionare. Dup| dezactivarea comenzii RESET, NR2
num|r| de la 0 la 15 şi apoi se încarc| cu starea necunoscut| aflat| în NR1;
circuitul reintr| în regimul permanent de funcÛionare dar f|r| s| aib| un punct
de funcÛionare cunoscut, adic| iniÛializarea nu s-a produs.
Nici abordarea din Fig.3.88 nu constituie o soluÛie corect| de iniÛializare pentru
ansamblul de num|r|toare NR1-NR2 prezentat în enunÛul acestei probleme. Un
impuls low aplicat la intrarea Init care se intersecteaz| cu cel puÛin un front
pozitiv al ceasului Ck nu va iniÛializa circuitul ci doar îl va scoate din regimul
permanent de funcÛionare, ca în cazul reset|rii asincrone a num|r|torului NR2.
186 Cap.3 Num|r|toare

Figura 3.88

9. a) S| se analizeze circuitul din Fig.3.89 şi s| se determine succesiunea


st|rilor celor dou| num|r|toare în regimul/regimurile permanente de
funcÛionare. Bistabilul de tip T comut| în starea complementar| (Q* = Q̄)
atunci când ieşirile num|r|toarelor NR1 şi NR2 coincid (A[3:0] = B[3:0]).
b) S| se g|seasc| o soluÛie de iniÛializare a circuitului, sincron| sau asincron|.
În acest scop se pot ad|uga componente suplimentare în schem| şi/sau intr|ri
SET/RESET/PL num|r|toarelor şi bistabilului.

Figura 3.89
Circuite Logice SecvenÛiale Sincrone 187

R e z o l v a r e:
a) Sensurile de num|rare ale celor dou| num|r|toare sunt opuse şi ambele
circuite num|r| toate fronturile pozitive ale semnalului Ck. IntersecÛia sau
egalitatea dintre numerele A şi B poate s| aib| loc numai în domeniul mai
restrâns definit de NR1, adic| {0000, 0001, 0010, ..., 1001}sau, cu notaÛia
zecimal| {0, 1, 2, ..., 9}.
Fie k1 un num|r oarecare din mulÛimea {0, 1, 2, ..., 9} şi k2 un num|r oarecare
din mulÛimea {0, 1, 2, ..., 15}. Dac| la momentul curent 0 st|rile celor dou|
num|r|toare NR1 şi NR2 sunt A(0) = k1 şi respectiv B(0) = k2 atunci dup| n
fronturi pozitive de ceas rezult|:
A(n) = (k1 + n) modulo10 şi B(n) = (k2 - n) modulo16
sau
A(n) = (k1 - n) modulo10 şi B(n) = (k2 + n) modulo16.
ObservaÛie: St|rile A şi B sunt numere pozitive. Valorile negative care se obÛin
în relaÛiile de mai sus pentru num|r|torul invers, fie NR1 fie NR2, se
transform| în valori pozitive prin adunare cu 10 sau cu 16. De exemplu
(-7) modulo10 = (10 - 7) modulo10 = 3,
(-2) modulo16 = (16 - 2) modulo16 = 14.
Notând cu M10 şi M16 un multiplu oarecare întreg (pozitiv sau negativ) de 10
şi respectiv de 16, relaÛiile de mai sus referitoare la A(n) şi B(n) se poate scrie
sub forma:
k1 ± n = M10 + A(n)
k2 K n = M16 + B(n).
A şi B vor trece prin valorile k1 şi respectiv k2 simultan la fiecare 80 de
perioade de ceas, 80 fiind cel mai mic multiplu comun ale numerelor 10 şi 16.
Circuitele NR1 şi NR2 îşi vor schimba sensurile de num|rare avute la
momentul 0 dac| şi numai dac| st|rile lor se vor intersecta, adic| dac| exist|
cel puÛin un moment (front pozitiv de ceas) n la care A(n) = B(n).
Este evident faptul c| exist| 10 regimuri permanente de funcÛionare distincte
caracterizate prin A(0) = B(0) = k 0 {0, 1, 2, ..., 9}. În aceste regimuri de
funcÛionare num|r|toarele NR1 şi NR2 îşi schimb| simultan sensurile de
num|rare la fiecare 80 de perioade de ceas. Aceste regimuri au perioada egal|
cu 160·TCk; dup| fiecare 160 de fronturi pozitive de ceas st|rile şi sensurile de
num|rare ale num|r|toarelor se repet|.
În cazul general k1 … k2 circuitul din Fig.3.89 poate s| evolueze în dou| moduri
distincte:
- se ajunge într-unul din cele 10 regimuri permanente de funcÛionare definite
de A(0) = B(0) dac| numerele k1 şi k2 sunt ambele pare sau ambele impare;
188 Cap.3 Num|r|toare

- dac| unul dintre numerele k1 şi k2 este par iar cel|lalt este impar atunci
intersecÛia dintre A şi B nu va avea loc niciodat| şi se va ajunge la un regim
permanent de funcÛionare cu perioada 80·TCk în care num|r|toarele NR1 şi
NR2 îşi p|streaz| fiecare sensurile de num|rare iniÛiale.
b) IniÛializarea circuitului din Fig.3.89 se poate face în funcÛie de regimul de
funcÛionare dorit. Dintre toate posibilit|Ûile, cel mai simplu mod de iniÛializare
se obÛine prin introducerea comenzilor de RESET asincron sau sincron atât
pentru bistabilul de tip T cât şi pentru cele dou| num|r|toare NR1 şi NR2. Cel
mai flexibil mod de iniÛializare a circuitului const| în utilizarea a dou|
num|r|toare NR1 şi NR2 cu înc|rcare paralel| şi a unui bistabil cu SET şi
RESET; acest mod de iniÛializare permite selectarea oric|rui regim de
funcÛionare a circuitului.

10. S| se construiasc| o structur| logic| de multiplicator (circuit de


înmulÛire) secvenÛial pentru doi operanzi de n biÛi f|r| semn.
R e z o l v a r e:
Fie A şi B dou| numere oarecare de n biÛi f|r| semn. Reprezentarea produsului
P = A×B necesit| un format de 2n biÛi. Circuitul secvenÛial din Fig.3.90,
compus dintr-un acumulator şi un num|r|tor binar cu înc|rcare paralel|, poate
s| execute operaÛia de înmulÛire A×B. Ieşirea de împrumut a num|r|torului
binar invers semnalizeaz| trecerea prin zero a acestuia şi blocheaz| accesul
semnalului de ceas prin poarta AND2; semnalul Br indic| prin nivelul 0 şi

Figura 3.90
Circuite Logice SecvenÛiale Sincrone 189

sfârşitul operaÛiei de înmulÛire. Operandul A ocup| cele mai puÛin


semnificative n coordonate ale intr|rii Y; la cele mai semnificative n
coordonate ale intr|rii Y se aplic| valoarea logic| 0. Operandul B se încarc| în
num|r|torul binar invers simultan cu resetarea bistabililor D, atunci când
semnalul Start se activeaz|. ÎnmulÛirea se realizeaz| dup| schema de adunare
P = A + A + A +... + A,
în care A apare de B ori. Evident, A şi B îşi pot schimba locurile. Durata
operaÛiei de înmulÛire este determinat| de operandul care se încarc| în
num|r|torul binar invers.

3.7 Probleme propuse spre rezolvare

1. S| se sintetizeze un num|r|tor binar reversibil, modulo 13 direct şi


modulo 11 invers, cu reset asincron şi ieşiri de transport şi de împrumut în cele
dou| variante indicate în Fig.3.91.

Figura 3.91

2. a) S| se sintetizeze celula de num|rare reversibil| în baza 11


reprezentat| prin simbolul din Fig.3.92. Ieşirea notat| Exp se utilizeaz| pentru
expandare în ambele sensuri de num|rare.

Figura 3.92
190 Cap.3 Num|r|toare

b) Utilizând celule de num|rare în baza 11 s| se construiasc| o schem| de


divizor de frecvenÛ| cu factorul 441; s| se precizeze care este semnalul de
ieşire şi factorul de umplere al acestuia.

3. S| se realizeze un divizor de frecvenÛ| cu factorul 150 utilizând


structura din Fig.3.93 compus| dintr-un num|r|tor binar direct de 4 biÛi şi un
num|r|tor zecimal invers de 1 digit. Ieşirea de transport Cy a num|r|torului
binar se activeaz| pe toat| durata st|rii Out[0:3] = 1111. Intr|rile de înc|rcare
paralel| şi de reset sunt de tip asincron. S| se determine factorul de umplere al
semnalului de ieşire din divizorul de frecvenÛ|.

Figura 3.93

4. S| se construiasc| un convertor BCD-binar de 3 digiÛi utilizând


num|r|toare care nu au capacitate de înc|rcare paralel|.

5. Num|r|toarele din Fig.3.94 au intr|ri de înc|rcare paralele PL


sincrone. Ieşirea de transport Cy se activeaz| pe toat| durata st|rii X[0:3] =
1111 iar ieşirea de împrumut Br se activeaz| pe toat| durata st|rii Y[0:3] =
0000. S| se determine regimurile permanente de funcÛionare ale circuitului şi
perioadele acestora. S| se repete acest exerciÛiu luând în considerare toate
combinaÛiile posibile care se pot aplica la intr|rile Xin şi Yin.

Figura 3.94
Circuite Logice SecvenÛiale Sincrone 191

6. S| se configureze circuitul desenat în Fig.3.95 astfel încât s| se obÛin|


num|r|tor binar reversibil de 4 biÛi şi num|r|tor BCD reversibil. Ieşirile
circuitului sunt ieşirile Q ale celor 4 bistabili (Q3 = MSB, Q0 = LSB).

Figura 3.95

7. Utilizând celule de num|rare adecvate (binare, zecimale, reversibile


etc), bistabili şi porÛi logice, s| se construiasc| o schem| de num|r|tor
reversibil care s| funcÛioneze dup| cum se arat| în Fig.3.96.

Figura 3.96

SecvenÛa 0, 1, 2, ..., 8, 9, 8, 7, ..., 1, 0, 1, 2, ..., 14, 15, 14, 13, ..., 2, 1 scris| în
baza 10 corespunde unui ciclu complet de num|rare cu perioada T = 48TCk.
192 Cap.3 Num|r|toare

8. S| se analizeze schema desenat| în Fig.3.97 şi s| se determine


perioada semnalului Qdff în funcÛie de numerele N1 şi N2. Ieşirile Cy şi Br se
activeaz| pe toat| durata st|rilor 9 şi respectiv 0. Intr|rile de înc|rcare paralel|
PL sunt de tip asincron.

Figura 3.97

9. S| se construiasc| o schem| de multiplicator (circuit de înmulÛire)


secvenÛial pentru doi operanzi de câte 2 digiÛi fiecare şi f|r| semn.

10. Fie X şi Y dou| numere binare de 2n şi respectiv de n biÛi. S| se


construiasc| o schem| secvenÛial| pentru a calcula X moduloY.
Circuite Logice SecvenÛiale Sincrone 193

Cap.4 REGISTRE

Un registru este un circuit secvenÛial în care se poate stoca informaÛia


binar|. Aceast| informaÛie poate s| fie doar p|strat| sau depozitat| pentru o
anumit| durat| arbitrar| sau poate s| fie şi “prelucrat|”, în funcÛie de operaÛiile
cu care registrul este înzestrat din proiectare.
Registrele au capacitate de stocare şi geometrie. Capacitatea de stocare
a unui registru este dat| de num|rul de celule sau de bistabili din strucura sa.
O celul| are complexitate mai mare decât a unui bistabil; în general celula de
baz| a unui registru conÛine un bistabil, un MUX şi porÛi logice. Geometria
registrului se refer| la modul de aranjare spaÛial| a celulelor şi poate fi
unidimensional|, bidimensional| sau tridimensional|. Aceste caracteristici sunt
asem|n|toare cu cele ale memoriilor.
În anumite configuraÛii particulare de funcÛionare registrele pot fi tratate
ca maşini secvenÛiale.

4.1 Moduri de operare ale registrelor

F|r| a pierde din generalitate, se va considera un registru unidimensional.


Modurile de operare elementare sau de baz| ale unui registru sunt urm|toarele:
- înc|rcare paralel| (parallel load),
- deplasare serie stânga / dreapta (shift left / shift right),
- menÛinere (hold).
Simbolul unui registru cu 4 moduri de operare este desenat în Fig.4.1.

Fig.4.1 Registru de n biÛi cu 4 moduri de operare


194 Cap.4 Registre

Cele patru moduri de operare ale registrului de n biÛi sunt controlate de intr|rile
de selecÛie sel[1:0]. Fiec|rui num|r de 2 biÛi sel[1:0] 0 {00, 01, 10, 11} i se
poate asocia un mod de operare. De exemplu

sel[1:0] operaÛie
00 înc|rcare paralel|
01 deplasare dreapta
10 deplasare stânga
11 menÛinere.

În modul înc|rcare paralel|, frontul activ al ceasului Ck determin|


(Q0Q1 ... Qn-2Qn-1)+ = P0P1 ... Pn-2Pn-1
(valoarea logic| de la intrarea paralel| de date Pk se încarc| în celula k a c|rei
ieşire este Qk).
În modul menÛinere starea registrului nu se modific| dup| frontul activ de ceas,
adic|
(Q0Q1 ... Qn-2Qn-1)+ = Q0Q1 ... Qn-2Qn-1.
Intr|rile serie SinR şi SinL sunt sursele de date pentru deplas|rile dreapta (de la
Q0 la Qn-1) şi respectiv stânga (de la Qn-1 la Q0). Aceste deplas|ri se definesc
astfel:
Q0+ = SinR, Q1+ = Q0, Q2+ = Q1, Q3+ = Q2, ..., Qn-1+ = Qn-2 (dreapta),
Qn-1+ = SinL, Qn-2+ = Qn-1, Qn-3+ = Qn-2, ..., Q1+ = Q2, Q0+ = Q1 (stânga).
Deplas|rile serie se pot scrie şi sub form| compact|:
(Q0Q1 ... Qn-2Qn-1)+ = SinRQ0 ... Qn-1Qn-2 (deplasare serie dreapta),
(Q0Q1 ... Qn-2Qn-1)+ = Q1Q2 ... Qn-2 SinL (deplasare serie stânga).
ObservaÛii: 1) Se pot utiliza mai multe semnale de ceas; fiecare mod de operare
poate s| aib| propriul semnal de ceas.
2) Cele dou| moduri de deplasare (dreapta/stânga) pot s| aib| în comun o
singur| intrare de date serie; aceast| versiune ofer| îns| o flexibilitate mai mic|
de funcÛionare a registrului.
3) Modul de înc|rcare paralel| poate s| fie folosit în multe aplicaÛii şi pentru
iniÛializarea sincron| a registrului. Îns| în anumite cazuri este necesar| o
comand| explicit| de RESET; resetarea sincron| constituie o operaÛie
elementar| şi poate fi introdus| ca un mod de operare distinct.
Registrul de n biÛi cu cele patru moduri de operare descrise mai sus are
o structur| echivalent| cu aceea reprezentat| în Fig.4.2. Celula de baz| este
format| dintr-un bistabil de tip D şi un MUX4.
Circuite Logice SecvenÛiale Sincrone 195

Fig.4.2 Schema registrului de n biÛi din Fig.4.1


196 Cap.4 Registre

Termenii dreapta/stânga sunt relativi. În Fig.4.2 “stânga” înseamn| “jos” iar


“dreapta” înseamn| “sus”. Denumirile “deplasare serie de la Q0 la Qn-1” şi
“deplasare serie de la Qn-1 la Q0” sunt mai potrivite pentru a indica sensul.
Deplas|rile dreapta/stânga se pot transforma în rotiri dreapta/stânga prin
realizarea conexiunilor indicate în Fig.4.3. Fiecare front pozitiv de ceas
deplaseaz| sau roteşte datele Q din registru cu o poziÛie.

Fig.4.3 Registru de n biÛi cu rotire dreapta/stânga a datelor

În afar| de modurile de operare elementare menÛionate anterior se pot


defini şi implementa moduri de operare mai sofisticate. De exemplu, simultan
cu deplasarea de la de la Q0 la Qn-1 poate s| aib| loc şi modificarea informaÛiei
dup| o anumit| regul| sau dup| un set de reguli. Astfel,
Q0+ = Q0rSinR, Q1+ = Q1rQ0, Q2+ = Q2rQ1, Q3+ = Q3rQ2, ..., Qn-1+ = Qn-1rQn-2
constituie o deplasare combinat| cu operaÛia XOR, regula general| fiind
Q j+ = Q jrQ j-1, j = 0, n-1, Q -1 = SinR.
Sau,
Q0+ = SinR, Q1+ = Q1rQ0, Q2+ = Q1, Q3+ = Q3rQ2, Q4+ = Q3, ...
setul de reguli fiind
Q j+ = Q j-1, j = par > 0, Q0+ = SinR,
Q j+ = Q jrQ j-1, j = impar.
OperaÛiile XOR-XNOR sunt operaÛii liniare în sensul c| F(xry) = F(x)rF(y),
oricare ar fi funcÛia logic| F combinaÛional| şi variabilele logice x, y.
Num|rul modurilor de operare ale unui registru nu este limitat la 4.
Dimensiunea MUX-ului din celula de baz| determin| num|rul maxim de
operaÛii disponibile. Registrele fac parte din categoria circuitelor logice
reconfigurabile. Configurarea unui registru multimod const| în selectarea
pentru un anumit interval de timp a unei operaÛii sau a unui mod de operare,
Circuite Logice SecvenÛiale Sincrone 197

prin intermediul biÛilor de control sau de selecÛie ai multiplexoarelor. Într-un


mod de operare dat sunt utilizate numai o parte din resursele hardware ale
circuitului. Num|rul modurilor de operare afecteaz| într-o mic| m|sur| viteza
maxim| de operare a registrului îns| coduce la creşterea considerabil| a ariei.

4.2 AplicaÛii cu registre

4.2.1 Conversii de date serie-paralel şi paralel-serie


Datele sau cuvintele de cod pot fi transmise între blocurile unui sistem
digital în serie sau în paralel. Transmisia serie înseamn| accesul la un singur
bit într-o perioad| de ceas iar transmisia paralel| înseamn| accesul simultan la
toÛi biÛii unui cuvânt de cod într-o singur| perioad| de ceas.
O schem| de conversie serie-paralel este desenat| în Fig.4.4.

Fig.4.4 Convertor de date serie-paralel

EmiÛ|torul şi receptorul sunt registrele RegE şi respectiv RegR; RegE opereaz|


ca registru de deplasare iar RegR opereaz| în modul înc|rcare paralel|.
Cuvintele de cod au lungimea n (biÛi). Dup| fiecare grup de n fronturi pozitive
ale semnalului Ck registrul RegE conÛine câte un cuvânt de cod. Urm|torul
front pozitiv, care va deplasa în RegE primul bit din urm|torul cuvânt de cod,
realizeaz| şi copierea în registrul RegR a cuvântului aflat în RegE. Registrele
nu au nevoie de vreo comand| de iniÛializare îns| divizorul de frecvenÛ| cu
factorul n trebuie resetat la începutul conversiei (transmisiei) datelor, pentru
determinarea corect| a momentului de înc|rcare a registrului RegR.
Conversia paralel-serie a datelor se poate realiza cu schema de principiu
reprezentat| în Fig.4.5. Registrul emiÛ|tor RegE trebuie s| aib| dou| moduri
198 Cap.4 Registre

de operare, înc|rcare paralel| şi deplasare. RecepÛia datelor se face cu ajutorul


unui registru de deplasare.

Fig.4.5 Convertor de date paralel-serie

Registrul RegE opereaz| în modul deplasare de la 0 la n-1 (dreapta) când la


intrarea de selecÛie sel se aplic| 0 logic; înc|rcarea paralel| se face cu sel = 1.
Ieşirile paralele ale registrului RegE nu sunt necesare şi nu au fost reprezentate.
Ieşirea serie Sout este ieşirea din celula cu rangul cel mai mare, Qn-1.
Modul de operare al registrului emiÛ|tor este controlat de ieşirea div_Ck a
divizorului de frecvenÛ| cu n. Acest semnal este reprezentat în diagramele de
timp din Fig.4.6.

Fig.4.6 FuncÛionarea divizorului de frecvenÛ| cu n

Fronturile de ceas marcate în figura de mai sus încarc| în RegE un nou cuvânt
de cod P[0:n-1] simultan cu deplasarea în RegR a bitului P[0] din cuvântul
anterior. Semnalul div_Ck poate fi utilizat ca semnal de ceas pentru blocul
logic care furnizeaz| cuvintele de cod P[0:n-1] cât şi pentru blocul care preia
rezultatul Q[0:n-1] din registrul RegR. Un nou cuvânt P[0:n-1] trebuie s| fie
Circuite Logice SecvenÛiale Sincrone 199

preg|tit la intr|rile registrului RegE de frontul pozitiv din div_Ck iar preluarea
rezultatului Q[0:n-1] s| fie declanşat| de frontul negativ din div_Ck.

4.2.2 Memorii FIFO şi LIFO


Memoriile FIFO (First In First Out) şi LIFO (Last In First Out) sunt
registre bidimensionale.
Schema unei memorii FIFO realizat| cu registre de deplasare dreapta este
desenat| în Fig.4.7. Cuvintele de cod au formatul sau lungimea egal| cu
num|rul de registre; capacitatea memoriei (num|rul de cuvinte stocate) este
egal| cu lungimea registrelor (num|rul de celule). Registrele au câte o ieşire
serie Sout; acestea sunt fie Q0 fie Qm-1.

Fig.4.7 Memorie FIFO compus| din registre de deplasare

Ordinea în care sunt memorate cuvintele la intrare Win [n-1:0] coincide cu


ordinea în care vor fi citite sau extrase cuvintele la ieşire Wout [n-1:0]; primul
cuvânt înscris va fi şi primul cuvânt citit. Cuvintele care sunt citite sunt şi
eliminate din memorie.
Memoriile de tip FIFO se pot construi şi din registre simple, cu înc|rcare
paralel|. Un exemplu este ilustrat în Fig.4.8. Între registre are loc o deplasare
a informaÛiei de sus în jos. Pentru a p|stra geometria memoriei din Fig.4.7 s-au
conectat m registre, fiecare având câte n celule.
Memoria LIFO este o memorie stiv|; ultimul cuvânt înscris va fi primul
cuvânt citit. O memorie LIFO se poate construi din registre cu dou| moduri de
operare, ambele de deplasare, dup| cum se arat| în Fig.4.9.
200 Cap.4 Registre

Fig.4.8 Memorie FIFO compus| din registre cu înc|rcare paralel|

Fig.4.9 Memorie LIFO

Deplasarea de la Q0 la Qm-1 sau în jos se face când sel = 1 (Ū/D = 1) şi


corespunde înscrierii informaÛiei. Deplasarea de la Qm-1 la Q0 sau în sus se face
când sel = 0 (Ū/D = 0) şi corespunde citirii informaÛiei. Intrarea serie Sin poate
fi utilizat| în comun pentru ambele sensuri de deplasare. Trebuie prev|zute
numai ieşirile Q0 din fiecare registru; ieşirile din celulele Q1 ÷ Qm-1 nu sunt
Circuite Logice SecvenÛiale Sincrone 201

necesare. Înscrierea cuvântului Win [0:n-1] înseamn| copierea lui în cele n


celule Q0 ale registrelor; aceste celule formeaz| vârful stivei. La fel ca în cazul
memoriei FIFO, citirea unui cuvânt din memoria LIFO implic| şi “ştergerea”
lui. Dac| la un moment dat diferenÛa dintre num|rul de înscrieri şi num|rul de
citiri efectuate dep|şeşte valoarea m atunci cuvintele de cod aflate anterior la
baza stivei, alc|tuit| din celulele Qm-1, se pierd şi apar erori în funcÛionarea
sistemului digital din care face parte memoria LIFO.

4.2.3 Generatoare de secvenÛe pseudo-aleatoare


SecvenÛele pseudo-aleatoare sunt secvenÛe binare deterministe periodice
care au propriet|Ûi asem|n|toare cu ale secvenÛelor aleatoare. Fie m num|rul
de biÛi care definesc perioada unei secvenÛe pseudo-aleatoare. O secvenÛ| de
acest tip are propriet|Ûile urm|toare:
1) - num|rul de biÛi cu valoarea 1 difer| cu 1 faÛ| de num|rul de biÛi cu
valoarea 0;
2) - num|rul de subsecvenÛe constante formate numai din biÛi consecutivi cu
valoare 1 este egal cu num|rul de subsecvenÛe constante formate numai din biÛi
consecutivi cu valoare 0;
3) - jum|tate din num|rul subsecvenÛelor constante au lungimea 1, un sfert au
lungimea 2, o optime au lungimea 3, ş.a.m.d.
Generarea secvenÛelor pseudo-aleatoare se poate face cu registre de
deplasare cu reacÛie liniar| (LFSR - Linear Feedback Shift Register).
Structurile acestor circuite sunt reprezentate în figurile 4.10 şi 4.11. Ambele
reÛele de reacÛie pot fi reconfigurate prin intermediul valorilor logice aplicate
la intr|rile de selecÛie ale multiplexoarelor (C1, C2, ..., Cn-1).

Fig.4.10 LFSR cu porÛi XOR în exterior


202 Cap.4 Registre

Fig.4.11 LFSR cu porÛi XOR în interior

Registrele de deplasare cu reacÛie liniar| din figurile 4.10 şi 4.11 conÛin resurse
hardware identice iar ariile lor pot fi considerate egale. Vitezele maxime de
operare sunt îns| diferite. Fie tpMUX, tpXOR, tp Ck-Q şi tsetup timpul de propagare prin
MUX, prin poarta XOR, timpul de r|spuns al bistabilului D şi respectiv
parametrul setup al acestuia. Calculul vitezei maxime de operare a registrului
cu porÛile XOR în exterior se face cu relaÛia:
TCk $ tp Ck-Q + tpMUX + (n - 1) tpXOR + tsetup (4.1)
Calea de propagare cea mai lung| este format| din bistabilul dff n-1, MUX-ul
de la ieşirea acestui bistabil şi toat| reÛeaua de porÛi XOR. Aceast| reÛea poate
fi “paralelizat|” dup| cum se arat| în Fig.4.12. Procedând în acest mod,
termenul (n - 1) tpXOR din relaÛia 4.1 poate fi redus aproximativ la jum|tate.
Dac| nu se doreşte o structur| reconfigurabil| de LFSR ci una fix|,
caracterizat| de valorile constante C1, C2, ..., Cn-1 atunci din reÛeaua de reacÛie
pot fi eliminate perechile MUX-XOR corespunz|toare constantelor Ck = 0.

Fig.4.12 ReÛea XOR cu întârziere redus|


Circuite Logice SecvenÛiale Sincrone 203

Calculul vitezei maxime de operare a registrului cu porÛile XOR în interior se


face cu relaÛia:
TCk $ tp Ck-Q + tpMUX + tpXOR + tsetup (4.2)
Viteza de operare a acestui LFSR este mai mare şi nu depinde de num|rul
celulelor, ceea ce constituie un avantaj.
SecvenÛele periodice generate de un LFSR sunt reprezentate de
succesiunile de valori logice (biÛi) care se obÛin la o ieşire Q dintr-o celul|
oarecare. SecvenÛele pseudo-aleatoare sunt secvenÛele cu lungime maxim|,
egal| cu 2n - 1. Pentru orice dimensiune n a registrului exist| cel puÛin un set
de valori C1, C2, ..., Cn-1 care s| determine generarea secvenÛelor cu lungimea
maxim|. În tabelul urm|tor sunt date exemple de astfel de seturi pentru valori
ale lui n de la 3 la 32; sunt indicate numai constantele Cj = 1 prin indicele j.
n constante Cj cu valoare 1 [j]
3 [1]
4 [1]
5 [2]
6 [1]
7 [1]
8 [2, 3, 4]
9 [4]
10 [3]
11 [2]
12 [1, 4, 6]
13 [1, 3, 4]
14 [1, 3, 5]
15 [1]
16 [2, 3, 5]
17 [3]
18 [7]
19 [1, 2, 5]
20 [3]
21 [2]
22 [1]
23 [5]
24 [1, 3, 4]
204 Cap.4 Registre

n constante Cj cu valoare 1 [j]


25 [3]
26 [1, 2, 6]
27 [1, 2, 5]
28 [3]
29 [2]
30 [1, 4, 6]
31 [3]
32 [2, 6, 7]

Registre formate din 4 celule care genereaz| secvenÛe pseudo-aleatoare,


adic| secvenÛe cu lungimea 15 (perioada 15TCk), sunt reprezentate în Fig.4.13.

Fig.4.13 Generatoare de secvenÛe cu lungimea 15

Dac| starea iniÛial| a registrelor din figura de mai sus este Q1Q2Q3Q4 = 0000
atunci (Q1Q2Q3Q4)+ = 0000; aceast| stare nu se poate schimba prin intermediul
semnalului de ceas şi are semnificaÛia de blocare a circuitului. Dac| îns| cel
puÛin un bistabil conÛine valoarea logic| 1 atunci regimul de funcÛionare este
de generator de secvenÛe pseudo-aleatoare. St|rile celor dou| registre se succed
periodic astfel:
Circuite Logice SecvenÛiale Sincrone 205

(a) Q1Q2Q3Q4 (b) Q1Q2Q3Q4


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

Se observ| c| pentru registrul din Fig.4.13a secvenÛele Q2, Q3 şi Q4 sunt


identice cu Q1 doar c| sunt întârziate cu 1, 2 şi respectiv 3 perioade de ceas. Şi
în cazul registrului din Fig.4.13b cele 4 secvenÛe sunt identice dar defazate
între ele; Q2, Q3 şi Q4 sunt întârziate faÛ| de Q1 cu 12, 13 şi respectiv 14
perioade de ceas. SecvenÛele generate de cele dou| registre sunt diferite între
ele dar îndeplinesc cele trei propriet|Ûi formulate la începutul acestui paragraf.
Se va ar|ta acest lucru pentru secvenÛa Q1 generat| de registrul din Fig.4.13a:
- num|rul de unit|Ûi din aceast| secvenÛ| este 8 iar num|rul de zerouri este 7
- subsecvenÛele constante sunt marcate mai jos; dintre acestea 4 sunt formate
din unit|Ûi şi 4 sunt formate din zerouri
..., 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, ...
..., 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, ...
- num|rul tuturor subsecvenÛelor constante este 8; jum|tate dintre acestea
(adic| 4) au lungimea 1, un sfert (adic| dou|) au lungimea 2, o optime (adic|
una) au lungimea 3.
Schemele din Fig.4.13 pot fi modificate dup| cum se arat| în Fig.4.14
pentru ca şi starea Q1Q2Q3Q4 = 0000 s| fac| parte din secvenÛele generate.
Aceste circuite nu mai au nevoie de vreo comand| de iniÛializare pentru a intra
206 Cap.4 Registre

Fig.4.14 Generatoare de secvenÛe cu lungimea 16

în regimul normal de funcÛionare. Regula de modificare aplicat| în schemele


din Fig.4.14 se poate generaliza pentru orice dimensiune n a registrelor. Astfel,
se detecteaz| starea Q1Q2Q3...Qn-1 = 000...0 cu un circuit echivalent cu o poart|
NOR (cu n - 1 intr|ri) iar ieşirea acestui circuit se conecteaz| la reÛeaua de
reacÛie a registrului printr-o poart| XOR.
Succesiunile st|rilor celor dou| registre modificate din Fig.4.14 sunt identice
cu succesiunile st|rilor circuitelor iniÛiale din Fig.4.13 cu urm|toarea excepÛie.
Starea Q1Q2Q3Q4 = 0000 este introdus| între st|rile 0001 şi 1000 (Fig.4.14a)
şi respectiv între st|rile 0001 şi 1100 (Fig.4.14b).
(a) Q1Q2Q3Q4 (b) Q1Q2Q3Q4
.............. ..............
0 0 1 0 0 0 1 0
0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0
1 0 0 0 1 1 0 0
1 1 0 0 0 1 1 0
.............. ..............
Generatoarele de secvenÛe pseudo-aleatoare se pot utiliza ca generatoare
Circuite Logice SecvenÛiale Sincrone 207

de teste aleatoare. Un LFSR cu dimensiunea n poate s| genereze teste pentru


orice bloc combinaÛional cu n intr|ri; ieşirile Q ale registrului se conecteaz| la
intr|rile blocului care trebuie testat, în orice ordine.
De asemenea, caracteristicile funcÛiei de autocorelaÛie a secvenÛelor pseudo-
aleatoare arat| c| aceste semnale sunt asem|n|toare cu zgomotul alb şi c| pot
fi utilizate în domeniul transmisiunilor de date.

4.2.4 Analiza de semn|tur|


Analiza de semn|tur| este o tehnic| de compresie a datelor utilizat| în
testarea circuitelor logice. Datele comprimate sub form| de semn|tur| sunt
r|spunsurile unui circuit logic la un set de teste sau la o secvenÛ| de teste.
Circuitele cele mai folosite ca analizoare de semn|tur| sunt registrele de
deplasare cu reacÛie liniar| reprezentate în figurile 4.10 şi 4.11. Modelul
matematic adecvat analizei de semn|tur| aparÛine algebrei polinoamelor.
Registrele reconfigurabile din figurile 4.10 şi 4.11 pot fi modelate printr-un
polinom caracteristic definit cu ajutorul coeficienÛilor binari C1, C2, ..., Cn-1:
P(x) = 1 + C1 x + C2 x2 + C3 x3 + ... + Cn-1 xn-1 + xn (4.3)
Adunarea din relaÛia 4.3 este adunarea (algebric|) din baza 2 adic| operaÛia
XOR. Simbolul x nu desemneaz| o variabil| logic| ci o deplasare sau o
întârziere; astfel x j indic| o întârziere cu j fronturi (perioade de ceas) faÛ| de
x0 = 1 sau o deplasare spaÛial| cu j celule în registru.
Seturile de valori binare C1, C2, ..., Cn-1 care determin| generarea secvenÛelor
cu lungimea maxim| (2n - 1) definesc polinoame caracteristice primitive.
Registrul din Fig.4.11 utilizat ca analizor de semn|tur|, pentru r|spunsul
R de la o singur| ieşire a unui circuit testat, este redesenat în Fig.4.15. În
aceast| aplicaÛie registrul este denumit SISR (Single Input Signature Register).

Fig.4.15 LFSR utilizat ca analizor de semn|tur| (SISR)


208 Cap.4 Registre

R|spunsul R, obÛinut la o ieşire a circuitului care este testat prin aplicarea a m


teste, const| dintr-o succesiune de m biÛi r0, r1, r2, ..., rm-1; de regul| m >> n.
Polinomul asociat r|spunsului R este
R(x) = r0 xm-1 + r1 xm-2 + r2 xm-3 + r3 xm-4 + ... + rm-2 x1 + rm-1 (4.4)
Registrul SISR trebuie s| aib| o comand| de iniÛializare (reset). Deplasarea
celor m biÛi ai secvenÛei R în analizorul de semn|tur| (în ordinea apariÛiei lor,
de la r0 la rm-1), considerând starea iniÛial| a acestuia Q1Q2Q3...Qn = 000...0, va
determina o anumit| stare final| S(R) ce reprezint| semn|tura secvenÛei R.
OperaÛia efectuat| de circuitul din Fig.4.15 este echivalent| cu împ|rÛirea
polinomului R(x) la polinomul P(x):
R(x) = P(x)·C(x) + S(x) (4.5)
Câtul împ|rÛirii C(x) se pierde iar restul S(x) = S(R(x)) r|mâne în celulele
registrului pân| la urm|toarea resetare a circuitului, care precede o nou|
operaÛie de compresie. Polinomul S(x) are gradul n - 1:
S(x) = Q1 + Q2 x + Q3 x2 + ... + Qn xn-1 (4.6)
Se va considera ca exemplu secvenÛa R = 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1,
(virgula semnific| frontul activ al ceasului) şi circuitul de compresie
caracterizat de polinomul caracteristic primitiv P(x) = 1 + x + x4. Figura
urm|toare conÛine o reprezentare simplificat| a circuitului.

Fig.4.16 Compresie de date cu SISR

Pe baza analizei circuitului secvenÛial din Fig.4.16 redat| în Fig.4.17, în care


s-a pornit din starea forÛat| de comanda RESET adic| Q1Q2Q3Q4 = 0000,
rezult| starea final| sau semn|tura secvenÛei R:
Q1Q2Q3Q4 = 1110 Y S(x) = 1 + x + x2.
Dup| aplicarea ultimului bit din secvenÛa R mai urmeaz| un front activ de ceas.
CoeficienÛii polinomului cât C(x) sunt valorile aflate succesiv în bistabilul 4:
C(x) = x8 + x5 + x3 + x2.
Circuite Logice SecvenÛiale Sincrone 209

R Q1Q2Q3Q4 C = Q4 rang (exponent)


1 0 0 0 0 0 12
0 1 0 0 0 0 11
0 0 1 0 0 0 10
0 0 0 1 0 0 9
1 0 0 0 1 1 8
1 0 1 0 0 0 7
0 1 0 1 0 0 6
1 0 1 0 1 1 5
1 0 1 1 0 0 4
0 1 0 1 1 1 3
0 1 0 0 1 1 2
1 1 0 0 0 0 1
1 1 1 0 0 0 0
1 1 1 0
Fig.4.17 Determinarea semn|turii prin analiza circuitului de compresie

La rezultatele obÛinute prin analiza de mai sus se ajunge şi prin efectuarea


împ|rÛirii polinomului R(x) = x12 + x8 + x7 + x5 + x4 + x + 1 la polinomul
caracteristic al SISR, P(x) = x4 + x + 1.

x12 + x8 + x7 + x5 + x4 + x + 1 x4 + x + 1
x12 + x9 + x8 x8 + x5 + x3 + x2 = C(x)
x9 + x7 + x5
x9 + x6 + x5
x7 + x6 + x4
x7 + x4 + x3
x6 + x3 + x
x6 + x3 + x2
x2 + x + 1 = S(x)
Fig.4.18 Determinarea semn|turii prin împ|rÛire de polinoame

Cele dou| tipuri de analiz|, prezentate în figurile 4.17 şi 4.18, se pot face cu un
210 Cap.4 Registre

simulator de circuit digital şi respectiv cu un program de calcul matematic.


Resursele şi efortul de calcul necesare în a doua variant| de analiz| sunt
considerabil mai mici.
Comprimarea r|spunsurilor în semn|turi, utilizat| ca metod| de testare
a circuitelor digitale, are avantaje şi dezavantaje. Metodele de testare
convenÛionale, bazate pe compararea r|spunsurilor necomprimate, sunt mai
sofisticate decât cele bazate pe compararea semn|turilor îns| au precizii mai
mari. Dou| r|spunsuri sau secvenÛe binare cu aceeaşi lungime şi diferite între
ele R1 … R2, pot s| aib| acceaşi semn|tur| S(R1) = S(R2) dup| compresia
realizat| cu acelaşi SISR sau realizat| cu dou| registre de semn|tur| diferite
dar care au polinoame caracteristice identice.
Anumite categorii de erori sau de diferenÛe dintre R1 şi R2 pot fi identificate pe
baza relaÛiei 4.5.
R1(x) = P(x)·C1(x) + S1(x)
R2(x) = P(x)·C2(x) + S2(x)
R1(x) + R2(x) = P(x)·(C1(x) + C2(x)) + (S1(x) + S2(x))
R1(x) + R2(x) = P(x)·C(x) + (S1(x) + S2(x)) (4.7)
Polinoamele ER(x) = R1(x) + R2(x) şi ES(x) = S1(x) + S2(x) conÛin diferenÛele
sau erorile dintre R1 şi R2, respectiv dintre S1 şi S2.
Comprimarea a dou| r|spunsuri R1 … R2 poate s| produc| semn|turi identice
S(R1) = S(R2), adic| S1(x) = S2(x), dac| şi numai dac| ER(x) este un multiplu al
polinomului P(x). DemonstraÛia este banal|, Ûinând cont c|
grad ES(x) < grad P(x).
Analiza de semn|tur| se poate extinde la comprimarea simultan| a mai
multor r|spunsuri sau ieşiri din circuitul testat O1, Q2, O3, ... într-o singur|
semn|tur| S. Registrul utilizat în acest scop este denumit MISR (Multiple Input
Signature Register). Num|rul maxim de r|spunsuri comprimate simultan este
limitat de obicei la num|rul de celule ale registrului. Un MISR cu dimensiunea
n şi cu porÛile XOR în interior este desenat în Fig.4.19.
Fie E1(x), E2(x), ..., En(x) polinoamele de erori asociate cu r|spunsurile O1(x),
O2(x), ..., On(x). Polinomul
n
ER(x) = ∑ E ( x) x
i =1
i
i −1
(4.8)

în care G este suma modulo 2 sau operaÛia XOR, conÛine erorile efective ale
tuturor r|spunsurilor comprimate. Anumite erori conÛinute în polinoamele
E1(x), E2(x), ..., En(x) se anuleaz| reciproc şi nu mai apar în polinomul rezultant
E(x). Dac| acest polinom nu este un multiplu al polinomului caracteristic P(x)
Circuite Logice SecvenÛiale Sincrone 211

Fig.4.19 LFSR utilizat ca MISR pentru n r|spunsuri

atunci starea final| a MISR sau semn|tura S(x) indic| prezenÛa a cel puÛin unei
erori în r|spunsurile O1(x), O2(x), ..., On(x). Altfel, semn|tura obÛinut|
mascheaz| sau ascunde toate erorile.

4.2.5 Scanarea serie


Generarea secvenÛelor pseudo-aleatoare şi analiza de semn|tur| sunt
tehnici BIST (Built In Self Test) adic| de autotestare a circuitelor digitale.
Scanarea este o tehnic| de proiectare pentru testabilitate (DFT - Design For
Testability). Structurile de bistabili de tip scan prezentate în cap.1, echivalente
cu MUX2-bistabil D, fac posibil| introducerea modului de deplasare (shift) pe
lâng| cel de baz| ( înc|rcarea paralel|). ToÛi bistabilii dintr-un sistem digital
pot s| fie înlocuiÛi cu bistabili de tip scan şi apoi aranjaÛi într-unul sau în mai
multe lanÛuri de scanare. Fiecare lanÛ de scanare necesit| câte un pin de intrare
(scan in) şi un pin de ieşire (scan out) a datelor, în plus faÛ| de cei existenÛi în
proiectul f|r| scanare. Pentru schimbarea modului de operare (normal =
înc|rcare paralel|, testare = deplasare) este nevoie de un singur pin de control
pentru toÛi bistabilii, indiferent de num|rul şi lungimea lanÛurilor de scanare.
Scanarea serie face posibil| observarea şi controlul fiec|rui bistabil. În afar|
de creşterea considerabil| a testabilit|Ûii circuitelor secvenÛiale şi sc|derea
costurilor asociate cu testarea, utilizarea tehnicilor de scanare face posibil ca
algoritmii şi instrumentele soft dezvoltate pentru circuitele combinaÛionale s|
fie reutilizabile pentru logica secvenÛial|, cu mici modific|ri.
În Fig.4.20 sunt prezentate schemele de principiu ale unei maşini secvenÛiale,
cu şi f|r| scanare. În cazul scan|rii complete (full scan), comanda de
iniÛializare a maşinii nu mai este necesar|.
212 Cap.4 Registre

Fig.4.20 Maşin| secvenÛial| (a) normal| (b) cu scanare complet|

Planul de testare a maşinii cu scanare complet| are dou| faze care se repet|
pentru fiecare test.
- faza 1: se trece registrul Reg în modul deplasare (N̄/T = 1) şi se încarc| cei
q biÛi “serie” ai unui nou test, aplicaÛi succesiv la intrarea Scan_in;
OperaÛia dureaz| q perioade de ceas şi are loc simultan cu extragerea serie a q
biÛi din r|spunsul la testul anterior, prin pinul Scan_out.
- faza 2: se trece registrul Reg în modul normal de operare (N̄/T = 0), se aplic|
cei n biÛi “paralel” ai noului test (vectorul X) dup| care se aplic| un singur front
activ de ceas.
Dup| acest puls de ceas sunt disponibili m biÛi r|spuns (vectorul Z); ceilalÛi q
biÛi r|spuns sunt înc|rcaÛi în bistabilii registrului Reg şi apoi extraşi în serie în
urm|toarea faz| 1.
Complexitatea planului de testare creşte cu num|rul de nivele ierarhice ale
blocurilor secvenÛiale.
Scanarea complet| a unui sistem secvenÛial implic| creşteri relative mari
de arie. Un compromis acceptabil între costurile asociate cu testarea şi cele
datorate creşterii ariei se realizeaz| prin tehnici de scanare parÛial| (partial
scan). Aceste tehnici includ în lanÛul sau lanÛurile de scanare numai o parte
dintre bistabilii sistemului secvenÛial; selectarea bistabililor pentru scanare este
dependent| de arhitectura sistemului.

4.2.6 Arhitecturi pipeline


Tehnicile BIST şi DFT prezentate în paragrafele anterioare utilizeaz| în
general bistabilii existenÛi într-un bloc normal, rezultat prin sinteza logic|
Circuite Logice SecvenÛiale Sincrone 213

automat|. Cu toate acestea, modurile noi de operare introduse la nivelul


registrelor determin| creşteri de arie. În plus, scade şi viteza maxim| de operare
a circuitelor modificate deoarece logica suplimentar| introduce întârzieri noi
pe c|ile de propagare ale semnalelor.
Tehnicile de tip pipeline au ca scop creşterea vitezei de operare a circuitelor
logice. Aceste tehnici de proiectare se pot aplica la nivelul descrierii
algoritmilor de procesare a datelor (pre-sintez|) sau la nivel hardware (post-
sintez|). Orice structur| de tip pipeline conÛine registre noi, inexistente într-un
circuit normal, ceea ce înseamn| consum suplimentar de arie. De obicei aceste
registre pipeline au un singur mod de operare, înc|rcarea paralel|. Principiul
pipeline, la nivel structural sau hardware, este ilustrat în Fig.4.21.

Fig.4.21 Principiul pipeline

Structura din Fig.4.21a, alc|tuit| din registrele Reg1, Reg2 şi un bloc


combinaÛional Comb reprezint| o porÛiune dintr-un circuit “normal”. Dac| cea
mai mare întârziere pe c|ile de propagare prin Comb este tp Comb atunci viteza
maxim| de operare a structurii Reg1-Comb-Reg2 se determin| din relaÛia
TCk (a) > tp Ck-Q1 + tp Comb + tsetup2 (4.9)
214 Cap.4 Registre

în care tp Ck-Q1 şi tsetup2 sunt timpii de r|spuns şi respectiv de setup ai bistabililor


ce compun registrele Reg1 şi Reg2.
Structura din Fig.4.21b se obÛine prin împ|rÛirea (secÛionarea) blocului Comb
în dou| p|rÛi, Comb1 şi Comb2, între care s-a introdus registrul Reg3. Se
doreşte ca blocurile Comb1 şi Comb2 s| aib| întârzieri maxime aproximativ
egale, tp Comb1 = tp Comb2, iar num|rul de conexiuni dintre ele s| fie cât mai mic;
acest num|r reprezint| dimensiunea registrului suplimentar Reg3. Viteza
maxim| de operare a structurii pipeline obÛinute se determin| din relaÛia
TCk (b) > tp Ck-Q1 + tp Comb1 + tsetup3 – tp Ck-Q3 + tp Comb2 + tsetup2 (4.10)
în care tp Ck-Q3 şi tsetup3 sunt timpii de r|spuns şi respectiv de setup ai bistabililor
ce compun registrul Reg3. Considerând c| bistabilii din cele trei registre sunt
identici, rezult|

TCk (b) t p Ck − Q + 0.5t p Comb + tsetup


= . (4.11)
TCk (a) t p Ck − Q + t p Comb + tsetup

Dac| tp Comb >> tp Ck-Q + tsetup atunci prin modificarea f|cut| în Fig.4.21b se
obÛine o creştere de vitez| de aproximativ dou| ori. Dac| îns| tp Comb este
comparabil cu (tp Ck-Q + tsetup) atunci câştigul în vitez| devine nesemnificativ în
comparaÛie cu pierderea de arie.
În structura normal| din Fig.4.21a blocul Comb efectueaz| o operaÛie
într-o perioad| de ceas TCk (a). O dat| cu înc|rcarea în Reg1 a unui nou vector
de intrare se salveaz| în Reg2 r|spunsul la vectorul de intrare anterior, dup|
schema de corespondenÛ| urm|toare:
Reg1: In1 In2 In3 In4 In5 ...
Reg2: - Out1 Out2 Out3 Out4 ...
Şi structura pipeline din Fig.4.21b efectueaz| câte o operaÛie într-o perioad| de
ceas TCk (b) îns| corespondenÛele intrare-ieşire sunt diferite faÛ| de cele de mai
sus:
Reg1: In1 In2 In3 In4 In5 ...
Reg2: - - Out1 Out2 Out3 ...
Decalajul dintre Inj şi Outj, numit şi latenÛ|, are valoarea 1TCk (a) şi respectiv
2TCk (b); în valoare absolut| aceste decalaje sunt aproximativ egale.
Blocul Comb din Fig.4.21a se poate secÛiona în mai multe p|rÛi, nu neap|rat în
dou|. În fiecare zon| de secÛionare trebuie introdus un registru pipeline.
Tehnicile pipeline se aplic| de obicei în blocurile logice care alc|tuiesc
c|ile de date, acestea fiind mai uşor de partiÛionat. Un exemplu este ilustrat în
Fig.4.22. Blocul secÛionat este un sumator binar care execut| într-un singur pas
operaÛia (A + B) + (C + D) = E, operanzii având acelaşi format.
Circuite Logice SecvenÛiale Sincrone 215

Fig.4.22 Sumator binar pipeline

În timp ce rezultatele parÛiale S1j = (Aj + Bj) şi S2j = (Cj + Dj) sunt stocate în
registrele pipeline Reg1 şi respectiv Reg2, sumatoarele Σ1 şi Σ2 efectueaz|
urm|toarele operaÛii S1j + 1 = (Aj + 1 + Bj + 1) şi respectiv S2j + 1 = (Cj + 1 + Dj + 1) iar
Σ3 efectueaz| operaÛia S3j = S1j + S2j.

4.3 Probleme rezolvate

1. S| se determine regimurile permanente de funcÛionare ale registrelor


de deplasare cu reacÛie desenate în Fig.4.23 şi s| se sintetizeze câte un bloc
logic prin intermediul c|ruia s| se realizeze selectarea acestor regimuri (în
cazurile în care exist| mai multe).
R e z o l v a r e:
În toate cele 4 scheme din Fig.4.23 deplasarea se face de la bistabilul 3 c|tre
bistabilul 0. St|rile registrelor, Q3Q2Q1Q0, se vor reprezenta în grafurile de
tranziÛie a st|rilor prin echivalentul lor zecimal
Q3 23 + Q2 22 + Q1 21 + Q0.
216 Cap.4 Registre

Figura 4.23
Circuite Logice SecvenÛiale Sincrone 217

Grafurile de tranziÛie a st|rilor fiec|rui registru se obÛin prin determinarea st|rii


viitoare pornind de la o stare curent| cunoscut|, în ipoteza c| orice stare
curent| este posibil|.
Registrul (a) are graful de tranziÛie a st|rilor reprezentat în figura
urm|toare.

Fig.4.24 Graful de tranziÛie a st|rilor registrului din Fig.4.23a

Acest circuit are dou| regimuri permanente de funcÛionare, A şi B, ambele


formate din câte 8 st|ri. Pentru a selecta unul dintre aceste regimuri de
funcÛionare trebuie “ataşat” circuitului un bloc de control. O variant| este cea
din figura de mai jos; blocul de control activeaz| comenzile asincrone ale
bistabililor.

Fig.4.25 Registrul (a) cu selectare a regimurilor de funcÛionare

Prin activarea uneia dintre comenzile Ā, B̄ se forÛeaz| st|rile Q3Q2Q1Q0 = 000(
218 Cap.4 Registre

(010 sau 110) şi respectiv Q3Q2Q1Q0 = 1001 (910). În regim normal de operare
comenzile Ā, B̄ sunt inactive (Ā B̄ = 1 1).
Registrul (b) are urm|torul graf de tranziÛie a st|rilor. Sunt patru regimuri
permanente de funcÛionare, corespunz|toare subgrafurilor notate A, B, C şi D.

Fig.4.26 Graful de tranziÛie a st|rilor registrului din Fig.4.23b

Dac| se accept| ca bistabilii registrului (b) s| aib| fiecare comenzi S̄ şi R̄


asincrone atunci blocul de selectare a regimului de funcÛionare poate fi modelat
dup| cum se arat| în tabelul de mai jos. Comenzile A, B, C şi D sunt active
high.
ABCD S̄3 R̄3 S̄2 R̄2 S̄1 R̄1 S̄0 R̄0
1000 1 0 1 0 1 0 1 0
0100 ( ( 0 1 0 1 0 1
0010 1 0 0 1 1 0 ( (
0001 0 1 0 1 1 0 ( (
0000 1 1 1 1 1 1 1 1

Activarea comenzilor A, B, C şi D forÛeaz| st|rile 0, 7 sau 15, 4 sau 5 şi


respectiv 12 sau 13. Blocul selector, cu intr|rile A, B, C, D şi ieşirile S̄3, R̄3,
S̄2, R̄2, S̄1, R̄1, S̄0, R̄0 este unul combinaÛional şi se poate implementa în
conformitate cu ecuaÛiile de funcÛionare
S̄3 = D̄, R̄3 = A + C
S̄2 = B + C + D, R̄2 = Ā
S̄1 = B̄, R̄1 = A + C + D
S̄0 = B̄, R̄0 = Ā.
Circuite Logice SecvenÛiale Sincrone 219

Registrul (c) are un singur regim permanent de funcÛionare, reprezentat


de succesiunea periodic| a st|rilor 0, 8, 4, 2 şi 1, dup| cum se poate observa în
graful de tranziÛie a st|rilor desenat în Fig.4.27. Dup| conectarea aliment|rii
circuitul intr| automat în regimul permanent, cu o întârziere de cel mult trei
perioade de ceas.

Fig.4.27 Graful de tranziÛie a st|rilor registrului din Fig.4.23c

Graful de tranziÛie a st|rilor registrului (d), reprezentat în figura de mai


jos, arat| c| sunt dou| regimuri permanente A şi B. Selectarea regimului B se
poate face prin activarea comenzilor SET ale celor 4 bistabili. Un singur
bistabil trebuie s| aib| şi comand| RESET; prin activarea acesteia se forÛeaz|
o stare diferit| de 15, dup| care circuitul intr| automat în regimul A.

Fig.4.28 Graful de tranziÛie a st|rilor registrului din Fig.4.23d


220 Cap.4 Registre

2. S| se sintetizeze blocul logic COMB din Fig.4.29 astfel încât registrul


de deplasare cu reacÛie s| aib| un regim permanent de funcÛionare caracterizat
de secvenÛa periodic| (Q3Q2Q1Q0):
a) ..., 0101, 0010, 0001, 0000, 1000, 1100, 1110, 0111, 1011, 0101, 0010, ...
b) ..., 0011, 1001, 1100, 1010, 1101, 0110, 0011, 1001, ...

Figura 4.29

R e z o l v a r e:
Deplasarea se face de la Q3 c|tre Q0. Ieşirea blocului combinaÛional COMB
constituie intrarea serie Sin a registrului.
a) Analizând secvenÛa format| din cele 9 st|ri se constat| c| aceasta se poate
obÛine printr-o deplasare simpl| la dreapta. Blocul COMB trebuie s| furnizeze
o secvenÛ| potrivit| de biÛi la intrarea serie a registrului; tabela de adev|r
urm|toare modeleaz| acest bloc.

Figura 4.30

În conformitate cu grup|rile efectuate, reÛeaua de reacÛie determin| graful


complet de tranziÛie a st|rilor reprezentat în Fig.4.31.
Circuite Logice SecvenÛiale Sincrone 221

Figura 4.31

Circuitul obÛinut are un singur regim permanent de funcÛionare; st|rile sunt


reprezentate prin numere zecimale (Q3 = MSB, Q0 = LSB).
b) TranziÛiile 1001 Y 1100 şi 1100 Y 1010 nu pot fi obÛinute cu structura din
Fig.4.29, oricare ar fi blocul COMB. SecvenÛa de st|ri precizat| nu este una
valid| iar funcÛionarea cerut| nu poate fi implementat|.

3. Registrul de deplasare cu reacÛie din Fig.4.32 poate s| genereze orice


secvenÛ| periodic| sau succesiune de st|ri care nu dep|şeşte lungimea maxim|
16, printr-o proiectare corespunz|toare a blocului combinaÛional COMB. S| se
sintetizeze acest bloc astfel încât registrul s| funcÛioneze ca num|r|tor invers
modulo 10 sau BCD, considerând Q3 = MSB şi Q0 = LSB.

Figura 4.32
222 Cap.4 Registre

R e z o l v a r e:
FuncÛionarea ca num|r|tor BCD invers este descris| prin tabelele urm|toare:

Q3Q2Q1Q0 Q3+Q2+Q1+Q0+ d3d2d1d0


0 0 0 0 1 0 0 1 1001
0 0 0 1 0 0 0 0 0001
0 0 1 0 0 0 0 1 0000
0 0 1 1 0 0 1 0 0011
0 1 0 0 0 0 1 1 0001
0 1 0 1 0 1 0 0 0110
0 1 1 0 0 1 0 1 0110
0 1 1 1 0 1 1 0 0101
1 0 0 0 0 1 1 1 0011
1 0 0 1 1 0 0 0 1100

Valorile ieşirilor blocului COMB s-au calculat cu relaÛiile:


d3 = Q3+
d2 = Q2+ r Q3
d1 = Q1+ r Q2
d0 = Q0+ r Q1.

Grup|rile efectuate în tabelele de sintez| de mai sus determin| expresiile


logice:
d3 = Q3Q0 + Q̄3Q̄2Q̄1Q̄0
d2 = (Q3 + Q2)(Q1 + Q0)
d1 = (Q3 + Q1 + Q0)(Q2 + Q1 + Q̄0)(Q̄2 + Q̄1 + Q̄0)(Q2 + Q̄1 + Q0)
d0 = (Q̄1 + Q0)(Q̄3 + Q̄0)(Q̄2 + Q1 + Q̄0).
Circuite Logice SecvenÛiale Sincrone 223

4. La intrarea registrului de deplasare cu reacÛie din figura urm|toare se


aplic| secvenÛa periodic| X = 1, 0, 0, 1, 0, 0, 1, 0, 0, ...(TX = 3TCk). S| se
determine secvenÛele generate la ieşirile registrului, pentru orice stare iniÛial|.

Figura 4.33
R e z o l v a r e:
În bistabilul dff3 se încarc| bitul D3 = X r Q1 r Q0. SecvenÛele Q3, Q2, Q1 şi Q0
sunt identice ca tipar de biÛi îns| între ele exist| întârzieri egale cu 1, 2 şi 3
perioade de ceas. Deplasarea se face de la Q3 la Q0.
Considerând starea iniÛial| a registrului Q3Q2Q1Q0 = 0000, st|rile viitoare se
succed astfel:
X Q 3 Q2 Q1 Q0
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
1 0 0 1 0
0 0 0 0 1
0 1 0 0 0
1 0 1 0 0
0 1 0 1 0
0 1 1 0 1
1 1 1 1 0
0 0 1 1 1
0 0 0 1 1
1 0 0 0 1
0 0 0 0 0
0 0 0 0 0
1 0 0 0 0

Perioada secvenÛelor generate la ieşirile registrului este T = 15TCk. Aceste


224 Cap.4 Registre

secvenÛe periodice se obÛin pentru oricare din st|rile iniÛiale 0000, 0001, 0010,
0100 şi 1110. Registrul trece succesiv şi periodic prin st|rile zecimale 0, 8, 4,
2, 1, 8, 4, 10, 13, 14, 7, 3, 1, 0, 0 (Q3 = MSB, Q0 = LSB).
Considerând starea iniÛial| a registrului Q3Q2Q1Q0 = 0011, st|rile viitoare se
succed astfel:
X Q 3 Q2 Q1 Q0
1 0 0 1 1
0 1 0 0 1
0 1 1 0 0
1 0 1 1 0
0 0 0 1 1
0 0 0 0 1
1 1 0 0 0
0 1 1 0 0
0 0 1 1 0
1 1 0 1 1
0 1 1 0 1
0 1 1 1 0
1 1 1 1 1
0 1 1 1 1
0 0 1 1 1
1 0 0 1 1

Perioada secvenÛelor este T = 15TCk; acestea se obÛin pentru oricare din st|rile
iniÛiale 0011, 0110, 1000, 1011 şi 1111. Registrul trece succesiv şi periodic
prin st|rile zecimale 3, 9, 12, 6, 3, 1, 8, 12, 6, 11, 13, 14, 15, 15, 7.
Dac| starea iniÛial| a registrului este Q3Q2Q1Q0 = 1001, st|rile viitoare se
succed astfel:
X Q 3 Q2 Q1 Q0
1 1 0 0 1
0 0 1 0 0
0 0 0 1 0
1 1 0 0 1

Perioada secvenÛelor este T = 3TCk; registrul trece periodic şi succesiv prin


st|rile zecimale 9, 4, 2.
Dac| starea iniÛial| a registrului este Q3Q2Q1Q0 = 0101, st|rile viitoare se
succed astfel:
Circuite Logice SecvenÛiale Sincrone 225

X Q 3 Q2 Q1 Q0
1 0 1 0 1
0 0 0 1 0
0 1 0 0 1
1 1 1 0 0
0 1 1 1 0
0 1 1 1 1
1 0 1 1 1
0 1 0 1 1
0 0 1 0 1
1 1 0 1 0
0 0 1 0 1
0 1 0 1 0
1 1 1 0 1
0 0 1 1 0
0 1 0 1 1
1 0 1 0 1

Perioada secvenÛelor este T = 15TCk; acestea se obÛin pentru oricare din st|rile
iniÛiale 0101, 1100, 0111, 1010 şi 1101. Registrul trece succesiv şi periodic
prin st|rile zecimale 5, 2, 9, 12, 14, 15, 7, 11, 5, 10, 5, 10, 13, 6, 11.
În toate cele 4 regimuri de funcÛionare prezentate mai sus, secvenÛele
generate nu sunt pseudo-aleatoare; cele trei propriet|Ûi specifice secvenÛelor
pseudo-aleatoare, care au fost menÛionate la începutul paragrafului 4.2.3, nu
sunt îndeplinite.

5. S| se determine regimul permanent de funcÛionare în care ajunge


circuitul din Fig.4.34 dac| st|rile iniÛiale ale registrelor Reg1 şi Reg2 sunt
a) ABCD = 0101, EFGH = 1100
b) ABCD = 1001, EFGH = 0010.

Figura 4.34
226 Cap.4 Registre

Ambele registre de 4 biÛi opereaz| în modul deplasare de la stânga la dreapta


şi au acelaşi semnal de ceas (nereprezentat în schem|).
R e z o l v a r e:
a) Comparatorul binar de 1 bit compar| biÛii din celulele D şi H, în aceast|
ordine. Succesiunea st|rilor celor dou| registre este indicat| în tabelul urm|tor.
< ABCD > EFGH
0 0101 1 1100
0 0010 0 1110
0 0001 0 0111
1 0000 0 0011
1 1000 0 0001
0 1100 0 0000
0 0110 0 0000 regimul permanent este
0 0011 1 0000 format din aceste 8 linii
0 0001 1 1000
0 0000 0 1100
0 0000 0 0110
1 0000 0 0011

b) St|rile registrelor Reg1 şi Reg2 se succed dup| cum se arat| în tabelul


urm|tor (de sus în jos).
< ABCD > EFGH
0 1001 1 0010
1 0100 0 1001
0 1010 0 0100
0 0101 1 0010 regimul permanent este
1 0010 0 1001 format din aceste 8 linii
0 1001 1 0100
0 0100 0 1010
1 0010 0 0101
0 1001 1 0010
Cele dou| regimuri permanente (a) şi (b) sunt distincte.

6. a) La intrarea In a registrului de semn|tur| din Fig.4.35 se aplic|


secvenÛa de biÛi A = 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1,. S| se determine
semn|tura acestei secvenÛe.
b) Care dintre urm|toarele 3 secvenÛe B, C şi D au semn|tura identic| cu cea
a secvenÛei A?
Circuite Logice SecvenÛiale Sincrone 227

B = 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1,
C = 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1,
D = 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,.

Figura 4.35
R e z o l v a r e:
a) Înainte de a începe o nou| operaÛie de compresie registrul trebuie resetat. În
tabelul care urmeaz| se calculeaz| st|rile circuitului, ultima fiind semn|tura
S(A) a secvenÛei A.
A Q1 Q2 Q3 Q4 Q5
1 0 0 0 0 0
1 1 0 0 0 0
0 1 1 0 0 0
1 0 1 1 0 0
1 1 0 1 1 0
1 1 1 0 1 1
0 0 1 0 0 1
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
1 0 0 0 1 0
0 1 0 0 0 1
0 1 1 1 0 0
1 0 1 1 1 0
1 1 0 1 1 1
0 0 1 1 1 1
1 1 0 0 1 1
0 1 1 0 1

Rezult| S(A) = 10110 (Q5Q4Q3Q2Q1); polinomul asociat semn|turii este


S(x) = x4 + x2 + x.
Acelaşi rezultat se obÛine prin împ|rÛirea polinomului A(x), asociat secvenÛei
228 Cap.4 Registre

A, la polinomul caracteristic al registrului P(x) = 1 + x2 + x5.

x16 + x15 + x13 + x12 + x11 + x6 + x3 + x2 + 1 x5 + x2 + 1


x16 x13 x11 x11 + x10 + x5 + x2 + x + 1
x15 + x12
x15 + x12 + x10
x10 + x6 + x3 + x2 + 1
x10 + x7 + x5
x7 + x6 + x5 + x3 + x2 + 1
x7 + x4 + x2
x6 + x5 + x4 + x3 + 1
x6 + x3 + x
x5 + x4 + x + 1
x5 + x2 + 1
x4 + x2 + x = S(x)

b) DiferenÛele dintre dou| secvenÛe binare de lungimi egale sau, echivalent,


dintre dou| polinoame de acelaşi grad se obÛin prin sumare modulo 2.
A = 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1
B = 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1
A r B = 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0
A r B(x) = x11 + x10 + x7 + x5 = x5 (x6 + x5 + x2 + 1) … multiplu P(x)

A = 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1
C = 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1
A r C = 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0
A r C(x) = x9 + x8 + x6 + x5 + x4 + x3 = x3 (x6 + x5 + x3 + x2 + x + 1) =
= x3 (x + 1)(x5 + x2 + 1) = multiplu P(x)

A = 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1
D = 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0
A r D = 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1
A r D(x) = x8 + x3 + x2 + 1 = (x3 + 1)(x5 + x2 + 1) = multiplu P(x)
Circuite Logice SecvenÛiale Sincrone 229

Rezult| S(A) = S(C) = S(D) … S(B).

7. S| se construiasc| o schem| de convertor de cod “binar - C2" de n biÛi,


secvenÛial (C2 este codul complementar faÛ| de 2). În acest enunÛ prin cod
binar se va înÛelege cod binar cu semn codificat, + ] 0 şi - ] 1. De asemenea,
se va considera c| toÛi cei n biÛi definesc modulul num|rului binar de intrare.
R e z o l v a r e:
F|r| a pierde din generalitate se va presupune c| num|rul binar cu semn
codificat este întreg; conversiile binar - C2 şi C2 - binar sunt independente de
tipul formatului, întreg sau fracÛionar.
Fie X = xn xn-1xn-2 ... x1x0 un num|r binar cu semn codificat (bitul xn reprezint|
semnul) şi C2(X) complementul faÛ| de 2 a num|rului X.
C2(X) = X, dac| xn = 0
C2(X) = 1 x̄ n-1x̄ n-2 ... x̄ 1x̄ 0 + 20, dac| xn = 1
O schem| de conversie este desenat| în figura de mai jos.

Fig.4.36 Convertor secvenÛial binar - C2


230 Cap.4 Registre

Începutul conversiei se face prin aplicarea unui impuls high la intrarea Start a
blocului de control. Acest impuls, cu durata oricât de mare, forÛeaz| Sel = 0 şi
genereaz| o calea de propagare a semnalului de ceas de la intrarea Clock la
ieşirea Ck; aceast| cale de propagare se p|streaz| pân| la sfârşitul conversiei.
Cât timp Start = 1 ieşirea Sel r|mâne la valoarea logic| 0 iar fronturile pozitive
ale semnalului Ck determin| înc|rcarea biÛilor num|rului X în cei n bistabili
din schem|.
Dup| tranziÛia H ` L a intr|rii Start, semnalul Sel comut| în 1 logic şi r|mâne
la aceast| valoare pân| la terminarea conversiei, care va dura exact n perioade
de ceas. Registrul format din bistabilii dffn-1, dffn-2, ..., dff0 intr| în modul de
operare shift (deplasare de jos în sus). Dac| num|rul X este pozitiv (xn = 0)
atunci biÛii de modul x0, x1, x2, ..., xn-1 traverseaz|, în aceast| ordine,
semisumatorul binar Half Adder f|r| s| fie modificaÛi şi se întorc înapoi în
registru, ocupând vechile poziÛii dup| n perioade de ceas.
Dac| num|rul X este negativ (xn = 1) atunci biÛii x̄ 0, x̄ 1, x̄ 2, ..., x̄ n-1 trec prin
semisumatorul binar. Starea iniÛial| Qn = 1 a bistabilului dffn determin|
adunarea valorii 1 (20) la num|rul x̄ n-1x̄ n-2 ... x̄ 1x̄ 0; dup| n perioade de ceas
rezultatul conversiei este disponibil în celulele dffn-1dffn-2...dff0.
La sfârşitul operaÛiei de conversie blocul de control genereaz| Stop = 1 şi
blocheaz| calea semnalului de ceas de la Clock la Ck.
FuncÛionarea blocului de control este descris| prin diagramele de timp
din figura urm|toare.

Figura 4.37

Din aceste diagrame se observ| c| Sel = Start, Ck = Stop + Clock. Blocul de


control este o maşin| secvenÛial| care are ca sarcin| de baz| generarea
impulsului Stop la comanda Start, în conformitate cu diagramele de mai sus.
Circuite Logice SecvenÛiale Sincrone 231

Implementarea acestui bloc cu ajutorul unui num|r|tor (binar sau BCD) este
prezentat| în Fig.4.38.

Fig.4.38 Implementarea blocului de control cu un num|r|tor

Schema din Fig.4.36 opereaz| atât cu numere negative cât şi cu numere


pozitive. Procesarea numerelor pozitive nu este necesar| şi poate s| fie
eliminat|. O schem| simplificat| de convertor secvenÛial binar - C2 care
proceseaz| numai numere negative este desenat| în Fig.4.40. Noul bloc de
control este modelat prin diagramele de timp din Fig.4.39.

Figura 4.39

În cazul numerelor negative (xn = 1) diagramele din figurile 4.37 şi 4.39 sunt
identice. Dac| X este un num|r pozitiv (xn = 0) atunci semnalele Ck şi Stop
232 Cap.4 Registre

generate de blocul de control r|mân blocate la nivelul high. Dup| tranziÛia din
1 în 0 a intr|rii Start, semnalul Stop = 1 indic| deja sfârşitul conversiei şi nu
mai are loc deplasarea biÛilor de modul prin Half Adder.

Fig.4.40 Convertor secvenÛial binar - C2 simplificat

Schema blocului de control este desenat| în figura urm|toare.

Fig.4.41 Blocul de control al covertorului din Fig.4.40


Circuite Logice SecvenÛiale Sincrone 233

4.4 Probleme propuse spre rezolvare

1. S| se determine regimurile permanente de funcÛionare ale registrelor


de deplasare cu reacÛie desenate în Fig.4.42 şi s| se sintetizeze câte un bloc
logic prin intermediul c|ruia s| se realizeze selectarea acestor regimuri (în
cazurile în care exist| mai multe).

Figura 4.42

2. La intrarea registrului de deplasare cu reacÛie din Fig.4.43 se aplic|


secvenÛa periodic|
a) X = 1, 0, 0, 1, 0, 0, 1, 0, 0, ...(TX = 3TCk)
234 Cap.4 Registre

b) X = 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, ...(TX = 4TCk).
S| se determine secvenÛele generate la ieşirile Q3, Q2, Q1 şi Q0 ale registrului,
pentru orice stare iniÛial|.

Figura 4.43

3. S| se determine regimul permanent de funcÛionare în care ajunge


circuitul din Fig.4.44 dac| st|rile iniÛiale ale registrelor Reg1 şi Reg2 sunt
a) ABC = 101, DEF = 100
b) ABC = 001, DEF = 110.
Ambele registre de 3 biÛi opereaz| în modul deplasare de la stânga la dreapta
şi au acelaşi semnal de ceas (nereprezentat în schem|).

Figura 4.44

4. Fie C2(X) = xn xn-1xn-2 ... x1x0 un num|r binar în cod complementar faÛ|
de 2 (bitul xn reprezint| semnul). Regula de conversie invers|, “C2 - binar”, se
poate formula astfel:
X = C2(X), dac| xn = 0
X = 1inv(xn-1xn-2 ... x1x0 - 20), dac| xn = 1.
Circuite Logice SecvenÛiale Sincrone 235

OperaÛia inv( ) complementeaz| sau inverseaz| biÛii num|rului din parantez|;


de exemplu, inv(1101) = 0010.
a) S| se construiasc| o schem| de convertor “C2 - binar”, dup| modelul din
Fig.4.40.
b) S| se construiasc| o schem| de convertor reversibil, care s| poat| realiza
ambele conversii “binar - C2” şi “C2 - binar”. Sensul conversiei se va face prin
intermediul unei comenzi suplimentare.
ObservaÛie: Conversia “C2 - binar” în cazul C2(X) = 1000 ... 0 nu poate fi
realizat| deoarece constituie o dep|şire a formatului de n biÛi alocat modulului.
Ca urmare circuitul trebuie prev|zut cu o ieşire de semnalizare a dep|şirii
formatului (overflow).

5. Registrul (SISR) din Fig.4.45 este de tipul “cu porÛi XOR în exterior”;
polinomul caracteristic asociat este P(x) = 1 + x + x4. Polinomul obÛinut cu
relaÛia de calcul Pr(x) = x4·P(1/x) = 1 + x3 + x4 se numeşte reciproc. SecvenÛei
de intrare R i se pot asocia de asemenea dou| polinoame R(x) şi Rr(x). S| se
verifice dac| semn|tura S(x) sau reciproca Sr(x) se poate obÛine prin împ|rÛire
de polinoame, R(x) sau Rr(x) împ|rÛit la P(x) sau Pr(x). Se va considera un caz
particular de secvenÛ| de intrare, format| din 15 biÛi.

Figura 4.45

6. Fie A = a3 a2 a1 a0 şi B = b3 b2 b1 b0 dou| numere binare întregi şi f|r|


semn. ÎnmulÛirea A × B = P se poate realiza dup| schema de calcul
a3 a2 a1 a0 ×
b3 b2 b1 b0
a3 b0 a2 b0 a1 b0 a0 b0
a3 b1 a2 b1 a1 b1 a0 b1
a3 b2 a2 b2 a1 b2 a0 b2
a3 b3 a2 b3 a1 b3 a0 b3
p7 p6 p5 p4 p3 p2 p1 p0
236 Cap.4 Registre

Circuitul din figura urm|toare poate s| genereze succesiv coloanele din tabla
de adunare a schemei de calcul, de la dreapta la stânga, în 7 perioade (fronturi
pozitive) ale ceasului CkB.

Figura 4.46

Registrul RegA are un singur mod de operare - înc|rcare paralel|. Registrul


RegB are dou| moduri de operare - înc|rcare paralel| (Sel = 0) şi deplasare la
stânga (Sel = 1). Intrarea serie Serial_in este conectat| permanent la nivelul
low. Mai întâi registrele RegA şi RegB trebuie înc|rcate cu a3 a2 a1 a0 şi
respectiv cu 0 0 0 b0 b1 b2 b3; la ieşirile celor 4 porÛi AND2 se obÛin valorile
logice a0 b0, 0, 0, 0 (coloana cea mai puÛin semnificativ| din tabla de adunare).
Apoi se trece registrul RegB în modul deplasare şi se obÛin la ieşirile porÛilor
AND2, în ritmul ceasului CkB, valorile de pe coloanele urm|toare, ultima
coloan| fiind format| din 0, 0, 0, a3 b3.
S| se completeze schema din Fig.4.46 astfel încât s| se obÛin| un multiplicator
secvenÛial pentru operanzi binari de 4 biÛi, f|r| semn.
Circuite Logice SecvenÛiale Sincrone 237

Cap.5 CIRCUITE DE MEMORIE ŞI LOGIC{


PROGRAMABIL{

Circuitele de memorie sau memoriile semiconductoare sunt subsisteme


electronice care stocheaz| cantit|Ûi mari de informaÛie în form| binar|; fiecare
bit de informaÛie se memorez| într-o celul| distinct|. Sistemul din care face
parte circuitul de memorie utilizeaz| informaÛiile stocate prin citirea lor; în
multe cazuri sistemul poate s| şi înscrie informaÛii noi în memorie. La un
moment dat se pot accesa, adic| se pot citi sau înscrie simultan, un num|r
limitat de celule. Acest num|r defineşte lungimea cuvintelor din memorie.
Accesul se realizeaz| cu ajutorul unor semnale de control.
Termenul de memorie, utilizat în echipamentele electronice, este mai
general decât cel de memorie semiconductoare. Memoriile optice şi cele
magnetice se deosebesc fundamental de memoriile semiconductoare prin
structura fizic| a celulelor elementare de stocare şi prin modul de organizare
sau de aranjare spaÛial| ale acestora. Toate tipurile de memorii pot fi utilizate
într-un acelaşi echipament electronic; informaÛiile pot fi transferate între ele
prin intermediul unor interfeÛe adecvate. În acest capitol sunt prezentate numai
aspecte referitoare la memoriile semiconductoare.
Circuitele de memorie fac parte din categoria dispozitivelor logice
programabile. Un circuit programabil este un bloc logic universal în sensul c|
poate fi configurat/reconfigurat pentru a implementa o mare diversitate de
funcÛii logice combinaÛionale sau secvenÛiale.

5.1 Generalit|Ûi

Arhitectura intern| a unui circuit generic de memorie este reprezentat|


simplificat în Fig.5.1 (nu sunt desenate liniile de alimentare, intr|rile de
control, driverele de intrare/ieşire).
Decodificatorul 1-din-2n realizeaz| selecÛia simultan| a 2mw celule de memorie
(o coloan| a matricei din Fig.5.1). Fiecare celul| selectat| se conecteaz| la un
amplificator de bit prin intermediul a dou| linii BL (bit line) şi BL. InformaÛia
este reprezentat| de diferenÛa dintre tensiunile de pe aceste dou| linii, BL - BL;
valoarea pozitiv| a diferenÛei se asociaz| cu High iar cea negativ| cu Low.
238 Cap.5 Circuite de memorie şi logic| programabil|

Fig.5.1 Structura de baz| a unui circuit de memorie


Circuite Logice SecvenÛiale Sincrone 239

Amplificatorul de bit este un circuit care face conversia tensiune diferenÛial| -


nivel logic în ambele sensuri, corespunz|toare operaÛiilor de citire şi respectiv
de scriere. Aceste dou| operaÛii sunt selectate cu ajutorul unei intr|ri de control
Read/Write care nu a fost reprezentat| în Fig.5.1.
Din cei 2mw biÛi ai coloanei selectate de ieşirea activ| a decodificatorului pot
fi accesaÛi simultan câte w biÛi, ce definesc un cuvânt de date (word), prin
intermediul blocului MUX/DEMUX de 2m c|i de date. Cei mai semnificativi
n biÛi de adres| sunt intr|rile decodificatorului iar cei mai puÛin semnificativi
m biÛi de adres| sunt intr|rile de selecÛie ale blocului MUX/DEMUX.
Împ|rÛirea celor a biÛi de adres| în n şi m nu este “transparent|” în exteriorul
circuitului. Aceast| împ|rÛire determin| îns| dimensiunile matricei şi implicit
dimensiunea decodificatorului, num|rul amplificatoarelor de bit şi num|rul
c|ilor de date ale blocului MUX/DEMUX. Astfel, dac| n = a şi m = 0 blocul
MUX/DEMUX nu mai este necesar iar num|rul amplificatoarelor de bit este
minim (w); în schimb, decodificatorul are dimensiune maxim| (2a). În funcÛie
de tehnologia de fabricaÛie se pot determina valorile n şi m care s| conduc| la
arie minim| şi/sau vitez| de operare maxim|.
Un circuit de memorie poate fi caracterizat de parametrii urm|tori:
- capacitatea, egal| cu num|rul de celule (2aw);
- geometria, definit| de num|rul de cuvinte (2a) şi de lungimea cuvântului (w);
- puterea consumat| pe bit;
- volatilitatea (pierderea informaÛiei la deconectarea tensiunilor de alimentare);
- timpul de acces la citire sau la scriere;
- frecvenÛa maxim| de citire sau de scriere (viteza de operare).
Simbolul unui circuit de memorie (f|r| pinii de alimentare) este desenat
în Fig.5.2.

Fig.5.2 Circuit de memorie (simbol)

Intr|rile de control au semnificaÛiile urm|toare:


- R/W (read/write);
Cu acest semnal se selecteaz| operaÛia de citire sau de scriere. În cazul
memoriilor care nu pot fi înscrise aceast| comand| lipseşte.
240 Cap.5 Circuite de memorie şi logic| programabil|

- OE (output enable);
Nivelul logic High aplicat la aceast| intrare blocheaz| circuitele (driverele) de
ieşire în starea de înalt| impedanÛ|.
- CS (chip select).
FuncÛionarea normal| are loc atunci când CS = 0. Cu CS = 1 se reduce
tensiunea de alimentare a circuitului, f|r| s| se altereze informaÛia din celulele
de memorie (în cazul memoriilor volatile), obÛinându-se astfel o reducere
semnificativ| a puterii disipate. De asemenea, deselectarea determin| şi starea
de înalt| impedanÛ| la ieşirile Data[w -1:0].
În Fig.5.3 sunt desenate diagramele de timp corespunz|toare operaÛiei de
citire a unei memorii în trei situaÛii diferite. Pentru memoriile care se pot şi
înscrie se consider| R/W = 1(high).

Fig.5.3 Citirea datelor dintr-un circuit de memorie


Circuite Logice SecvenÛiale Sincrone 241

Timpul de acces (taccess) la citire este intervalul definit de momentul schimb|rii


adresei şi momentul în care datele corespunz|toare acesteia devin stabile la
ieşirile circuitului. Acest timp depinde de semnalele de control CS şi OE; dac|
acestea se fixeaz| la nivelul activ (low) atunci timpul de acces are valoare
minim| (Fig.5.3c).
Pentru ca citirea s| se fac| f|r| erori, datele trebuie menÛinute la ieşirea
memoriei cel puÛin o durat| tdata. Acest timp depinde de arhitectura sistemului
din care face parte memoria şi de viteza dispozitivelor care citesc informaÛia.
FrecvenÛa maxim| de citire este dat| de durata minim| a unui ciclu de citire
TReadCycle, care poate s| fie mai mic| decât suma taccess + tdata (dup| cum se poate
observa în Fig.5.3c).
Diagramele de timp corespunz|toare operaÛiei de scriere a unei memorii sunt
ilustrate în Fig.5.4.

Fig.5.4 Scrierea datelor într-un circuit de memorie

Timpul de acces (taccess) la scriere este intervalul definit de momentul schimb|rii


adresei şi momentul în care datele aplicate la ieşirile circuitului pot s| modifice
datele existente în celulele de memorie. Acest timp depinde de semnalele de
control CS, OE şi R/W. Datele care urmeaz| s| fie înscrise trebuie menÛinute
la valori constante în vecin|tatea (tsetup D, thold D) a frontului pozitiv al semnalului
R/W. De asemenea şi adresa trebuie menÛinut| dup| acest front cel puÛin o
durat| thold A. Dup| ce R/W = 1 valorile din celulele de memorie şi cele forÛate
la ieşiri devin identice, astfel c| între driverele conectate simultan în nodurile
de ieşire nu apar conflicte. Acestea pot s| apar| dac| se forÛeaz| valori la
ieşirile memoriei în regim de citire, adic| atunci când CS = 0 şi R/W = 1.
Schimbarea datelor (Data) din Z4 în valori logice valide la începutul diagramei
din Fig.5.4, înainte de activarea semnalului CS, indic| forÛarea lor din exterior.
În regim de scriere valorile logice aplicate la ieşirile de date domin| valorile
logice din celule.
242 Cap.5 Circuite de memorie şi logic| programabil|

Memoriile sunt circuite expandabile; dou| sau mai multe circuite de


memorie se pot interconecta fie pentru a obÛine cuvinte mai lungi fie pentru a
obÛine mai multe cuvinte. Dou| scheme de expandare sunt desenate în Fig.5.5.

Fig.5.5 Scheme de expandare a memoriilor

În schema din Fig.5.5b cel mult un singur circuit de memorie poate fi selectat.
Dac| CS = 1 ambele circuite au ieşirile în stare de înalt| impedanÛ|; când CS
are nivelul 0 logic selecÛia se face cu bitul de adres| cel mai semnificativ A[a]
astfel: A[a] = 0 selecteaz| circuitul MEM0 iar A[a] = 1 selecteaz| MEM1.
Circuitele de memorie care pot fi numai citite dar nu şi înscrise de c|tre
sistemul din care fac parte sunt de urm|toarele tipuri:
- ROM (Read Only Memory),
- PROM (Programmable Read Only Memory),
Circuite Logice SecvenÛiale Sincrone 243

- EPROM (Erasable Programmable Read Only Memory).


Categoriile de memorii care pot fi atât citite cât şi înscrise de c|tre sistemul din
care fac parte sunt:
- RAM (Random Access Memory),
- Flash,
- EEPROM (Electricaly Erasable Programmable Read Only Memory).
Memoriile ROM, PROM, EPROM, EEPROM şi Flash sunt nevolatile;
aceste circuite p|streaz| informaÛiile în lipsa tensiunilor de alimentare.
Memoriile RAM sunt volatile; informaÛiile înscrise în celule se pierd la
deconectarea tensiunilor de alimentare.

5.2 Memorii ROM, PROM, EPROM, EEPROM

Memoriile ROM conÛin informaÛii care sunt fixate definitiv în procesul


de fabricare. În Fig.5.6 sunt prezentate dou| porÛiuni din matrice de celule
ROM realizate în tehnologii bipolare.

Fig.5.6 Matrice ROM în tehnologii bipolare


244 Cap.5 Circuite de memorie şi logic| programabil|

InformaÛia dintr-o celul| se asociaz| cu lipsa sau cu prezenÛa dispozitivului


(diod| Schottky sau tranzistor npn). Fiecare celul| este conectat| la o singur|
linie de bit şi nu la o pereche de linii ca în Fig.5.1. Nivelele logice low, high
asociate liniilor de bit sunt determinate de curenÛii şi nu de tensiunile acestora.
De exemplu, dac| WL2 = 1 (celelalte linii de selecÛie a cuvintelor fiind
inactive) atunci pe liniile BL1, BL2 apar curenÛi iar linia BL3 r|mâne flotant|
(Fig.5.6a). În Fig.5.6b WL2 = 1 determin| apariÛia unui curent prin linia BL2
şi las| în stare de înalt| impedanÛ| liniile BL1, BL3. Valorile curenÛilor sunt
fixate de circuitele de la capetele liniilor de bit (amplificatoarele de bit din
Fig.5.1).
Circuitul desenat în Fig.5.7, realizat într-o tehnologie MOS, este de tip
NOR-ROM. Un singur semnal WL este activ (high). Tranzistoarele nMOS
conectate la aceeaşi linie de bit implementeaz| operaÛia logic| NOR:
BL1 = WL1 + WL3 + WL4
BL2 = WL2 + WL3
BL3 = WL2 + WL4
BL4 = WL1 + WL2.
Subcircuitul notat Pull-up poate fi un rezistor, un tranzistor nMOS cu canal
iniÛial (cu grila şi sursa legate împreun|) sau un tranzistor pMOS cu canal indus

Fig.5.7 Memorie MOS de tip NOR-ROM


Circuite Logice SecvenÛiale Sincrone 245

(cu grila conectat| la VSS). Tranzistoarele din celulele de memorie sunt de tip
nMOS cu canal indus. Cele patru cuvinte de 4 biÛi stocate în memoria de mai
sus sunt:
WL1 WL2 WL3 WL4 BL1 BL2 BL3 BL4
1 0 0 0 0 1 1 0 (word1)
0 1 0 0 1 0 0 0 (word2)
0 0 1 0 0 0 1 1 (word3)
0 0 0 1 0 1 0 1 (word4).
Amplificatoarele de bit sunt buffere inversoare sau neinversoare.
O memorie MOS de tip NAND-ROM este prezentat| în Fig.5.8. Liniile
de selecÛie WL sunt active low (1 din 4).

Fig.5.8 Memorie MOS de tip NAND-ROM

Expresiile logice corespunz|toare liniilor de bit sunt:


BL1 = WL1·WL3·WL4 = WL1 + WL3 + WL4
BL2 = WL2·WL3 = WL2 + WL3
BL3 = WL2·WL4 = WL2 + WL4
BL4 = WL1·WL2 = WL1 + WL2.
246 Cap.5 Circuite de memorie şi logic| programabil|

Cele patru cuvinte de 4 biÛi stocate în memoria NAND-ROM din Fig.5.8 sunt:
WL1 WL2 WL3 WL4 BL1 BL2 BL3 BL4
0 1 1 1 1 0 0 1 (word1)
1 0 1 1 0 1 1 1 (word2)
1 1 0 1 1 1 0 0 (word3)
1 1 1 0 1 0 1 0 (word4).
Memoriile NAND-ROM au un num|r de biÛi pe unitatea de arie mai mare
decât a celor de tip NOR-ROM, dac| se utilizeaz| acelaşi proces tehnologic şi
aceleaşi reguli de proiectare. În schimb, memoriile NOR-ROM au timpi de
acces mai mici.
Timpul de acces al unei memorii ROM este determinat de rezistenÛele şi
capacit|Ûile parazite ale liniilor WL şi BL precum şi de curenÛii disponibili
pentru comanda acestor linii.
Memoriile PROM sunt specifice tehnologiilor bipolare. Fiecare celul| de
memorie PROM conÛine un tranzistor npn şi un fuzibil (fuse), dup| cum se
arat| în Fig.5.9.

Fig.5.9 Celula de memorie PROM

Dup| fabricare toate fuzibilele sunt intacte. Programarea se poate face o


singur| dat| şi const| în arderea selectiv| a fuzibilelor. Pentru aceasta se face
selecÛia celulelor unui cuvânt cu WL = 1, se creşte tensiunea de alimentare VCC
la 10 ÷ 15 V iar pentru fuzibilele care trebuie arse se pun liniile BL la 0 V.
Arderea se produce la curenÛi de emitor cu valori cuprinse între 10 şi 30 mA.
În funcÛionarea normal| VCC are valoarea 5 V iar fuzibilele care nu au fost arse
în faza de programare r|mân intacte pe durata citirilor viitoare ale memoriei.
OperaÛia de programare nu se realizeaz| de c|tre sistemul din care va face parte
memoria ci cu un echipament electronic distinct, numit programator de PROM.
Memoriile EPROM sunt specifice tehnologiilor MOS. Matricea de celule
are o structur| de tip NOR. Se utilizeaz| tranzistoare nMOS cu dou| grile, una
comandat| şi una izolat| (sau flotant|). O secÛiune transversal| prin structura
fizic| a dispozitivului este ilustrat| simplificat în Fig.5.10a.
Circuite Logice SecvenÛiale Sincrone 247

Fig.5.10 Tranzistorul nMOS din celula EPROM

FuncÛionarea se bazeaz| pe capabilitatea de stocare a sarcinii electrice pe grila


flotant| G1. Când pe grila G1 nu exist| sarcin| electric|, potenÛialul acesteia
este 0 V (considerând c| grila G2 nu este comandat|). Prin aplicarea unei
tensiuni pozitive între grila G2 şi sursa S (conectat| la substratul B) potenÛialul
grilei G1 creşte; acest potenÛial este determinat de divizorul capacitiv C2 - C1.
Formarea canalului între dren| şi surs| apare când VG1-S atinge pragul VT, lucru
care se produce atunci când VG2-S – 2VT. O celul| de memorie cu grila G1 f|r|
sarcin| electric| corespunde valorii stocate 0 (low) într-o matrice de tip NOR.
Pentru înscrierea valorii 1 (high), pe grila G2 şi drena D se aplic| o tensiune
pozitiv| de aproximativ 25 V faÛ| de sursa S, mult mai mare decât tensiunea de
alimentare de +5 V din funcÛionarea normal|. Între dren| şi surs| circul| un
curent relativ mare iar câmpul electric din regiunea de sarcin| spaÛial| dren|-
substrat are valori suficient de mari încât produce o str|pungere prin avalanş|
a joncÛiunii D-B. Avalanşa contribuie la creşterea considerabil| a curentului de
dren|. O parte dintre electronii acceleraÛi de câmpul electric traverseaz| stratul
subÛire de oxid şi ajung pe grila G1, unde vor r|mâne dup| ce tensiunea de
scriere dispare. Sarcina negativ| a grilei G1 determin| un potenÛial negativ de
aproximativ -5 V dac| tensiunea VG2 S = 0 V. O tensiune de comand| specific|
operaÛiei normale, VG2-S = +5 V, nu mai poate s| formeze canalul dintre D şi S.
O celul| de memorie cu grila G1 înc|rcat| cu sarcin| electric| negativ|
corespunde valorii stocate 1 (high) într-o matrice de tip NOR.
Sarcina pe G1 se poate p|stra pe durate de ordinul anilor deoarece oxidul de
siliciu este un foarte bun izolator. Exist| îns| posibilitatea ca grila G1 s| fie
desc|rcat|, adic| celula de memorie s| fie ştears|. Acest lucru se obÛine prin
expunerea oxidului de siliciu (care izoleaz| G1) la radiaÛii ultraviolete (UV) cu
intensitate relativ mare, între 15 şi 30 de minute. RadiaÛiile fac oxidul uşor
248 Cap.5 Circuite de memorie şi logic| programabil|

conductor, prin generarea perechilor electron-gol, iar electronii blocaÛi pe grila


G1 reuşesc s| treac| înapoi în substrat.
Capsula (package-ul) unei memorii EPROM este de obicei prev|zut| cu o
fereastr| de quartz care permite ştergerea prin expunere la radiaÛii UV;
ştergerea este neselectiv|, în sensul c| toate celulele matricei sunt afectate.
Înscrierea se face cu un echipament numit programator de EPROM. Num|rul
de ştergeri-înscrieri nu este limitat. Fereastra de quartz se acoper| cu o folie
opac| dup| înscriere, ca m|sur| de protecÛie la ştergere accidental|.
Exist| şi o versiune de încapsulare mai ieftin|, în care lipseşte fereastra de
quartz. Un astfel de EPROM devine un PROM sau OTP (one time
programmable).
Memoriile EEPROM se aseam|n| cu cele EPROM prin faptul c| sunt
utilizate tot tranzistoare nMOS cu dou| grile, una comandat| şi una izolat|.
Mecanismul de înscriere-ştergere a celulelor este îns| diferit, ca urmare a unei
modific|ri realizate în structura fizic| a tranzistorului. O anumit| porÛiune a
dielectricului care izoleaz| grila G1 de substrat şi de dren| are o grosime mai
mic|, lucru ilustrat şi în simbolul tranzistorului (Fig.5.11). O tensiune de
aproximativ ±10 V aplicat| pe acest dielectric subÛire determin| trecerea
electronilor prin efect tunnel din dren| la G1 sau invers. Acest mecanism
reversibil permite înscrierea sau ştergerea prin simpla inversare a tensiunii pe
dielectricul cu grosimea redus|. Comanda efectiv| se face între grila G2 şi
dren| iar tensiunea necesar| are o valoare dubl| (20 V). O celul| de memorie
EEPROM este desenat| în Fig.5.11; celula conÛine dou| tranzistoare.

Fig.5.11 Celula de memorie EEPROM

Pe durata citirii linia de programare PL (Programming Line) are nivelul high


(5 V). Dac| grila G1 a tranzistorului 1 este înc|rcat| atunci canalul între drena
şi sursa acestuia nu se poate forma iar WL = high implic| BL = high; matricea
este de tip NOR. Dac| grila G1 este desc|rcat| atunci tranzistorul 1 opereaz|
Circuite Logice SecvenÛiale Sincrone 249

în regim de triod| şi pune la mas| (VSS) sursa tranzistorului 2; WL = high


implic| BL = low. Tensiunile utilizate în regim de citire au valoarea maxim|
5 V (VDD). În regim de programare, adic| de ştergere sau de înscriere, se
utilizeaz| tensiuni de aproximativ 20 V. CondiÛiile pentru înscriere (înc|rcarea
cu sarcin| negativ| a grilei G1 a tranzistorului 1) sunt
BL = 0 V şi WL = PL = 20 V.
CondiÛiile de ştergere sau de desc|rcare a grilei G1 sunt
PL = 0 V şi WL = BL = 20 V.
Chiar dac| tensiunile necesare în fazele de ştergere/înscriere sunt diferite
faÛ| de cele utilizate la citire, programarea poate fi realizat| de c|tre sistemul
din care face parte memoria EEPROM. Tensiunile cu valoare mare pot fi luate
din exteriorul circuitului de memorie sau pot fi generate intern cu ajutorul unor
pompe de sarcin| (charge pump). Datorit| unui mecanism de uzur|, num|rul
de program|ri este limitat la ordinul sutelor de mii. Deoarece programarea se
face cu vitez| relativ mic|, este de preferat ca aceast| operaÛie s| se fac| pe
blocuri mari de celule şi nu la nivel de bit sau de cuvânt. De asemenea şi viteza
de citire este relativ mic| (timp de acces relativ mare).
Circuitele de memorie FLASH sunt foarte asem|n|toare cu cele
EEPROM ca principiu de funcÛionare. Ele sunt mai recente şi mai performante
în multe privinÛe (vitez| de operare mult mai mare, num|r de celule pe unitatea
de arie mai mare, tensiuni de programare mai mici). Se fabric| atât NOR-Flash
cât şi NAND-Flash. Citirea şi înscrierea memoriilor Flash se pot face la nivel
de cuvânt îns| ştergerea se face numai pe blocuri sau pe sectoare mai mari;
ştergerea doar a unei singure celule dintr-un sector implic| ştergerea întregului
sector şi apoi reînscrierea acelor celule care nu trebuiau s| fie şterse.
Celula de memorie Flash conÛine un singur tranzistor nMOS cu dou| grile de
polisiliciu. In Fig.5.12 sunt ilustrate condiÛiile de înscriere şi de ştergere ale
unei celule.

Fig.5.12 Celula de memorie Flash


250 Cap.5 Circuite de memorie şi logic| programabil|

Înscrierea se obÛine prin devierea unor electroni cu energie mare (hot-electron)


din dren| în grila flotant| G1, prin stratul subÛire de oxid (20 nm). Ştergerea
înseamn| desc|rcarea grilei G1 de sarcina electric| negativ|; electronii trec din
G1 înapoi în dren| prin efect tunnel. Tensiunea de 12 V necesar| pentru
înscriere/ştergere se genereaz| în interiorul chip-ului de memorie, cu ajutorul
pompelor de sarcin|, din tensiunea de alimentare de 5 V; aceasta din urm| se
utilizeaz| la citire.
În figura urm|toare sunt prezentate structuri NOR-Flash şi NAND-Flash.

Fig.5.13 Structuri Flash NOR şi NAND

ReÛelele de conexiuni (sau routing-ul) formate din liniile de bit (BL) şi cele de
mas| (gnd) din structurile NAND-Flash sunt mult mai simple decât cele din
structurile NOR-Flash. Din acest motiv memoriile NAND-Flash au capacit|Ûi
de stocare mai mari pe unitatea de arie sau pe chip.
Circuite Logice SecvenÛiale Sincrone 251

Num|rul de cicluri ştergere/înscriere , o m|sur| a uzurii, este de ordinul sutelor


de mii (comparabil cu cel al memoriilor EEPROM).

5.3 Memorii RAM

FuncÛionarea circuitele logice combinaÛionale sau secvenÛiale, în general,


se bazeaz| sau nu pe sarcina stocat| în diferite capacit|Ûi, intrinseci sau voit
introduse în structur|. Din acest punct de vedere circuitele sunt denumite
dinamice şi respectiv statice. Circuitele dinamice, bazate pe sarcina stocat|, au
nevoie de semnale speciale de control; acestea sunt asem|n|toare cu semnalele
de ceas. Denumirile static-dinamic se aplic| şi circuitelor de memorie. Toate
circuitele descrise în subcapitolul 5.2 sunt statice. În paragrafele urm|toare sunt
prezentate aspecte referitoare la memoriile RAM statice (SRAM) şi RAM
dinamice (DRAM).

5.3.1 Circuite SRAM


Circuitele SRAM sunt cele mai rapide memorii care pot fi programate
(adic| şterse sau înscrise) de c|tre sistemul din care fac parte. Viteza lor de
operare este îns| mai mic| decât a circuitelor ROM. Indiferent de tehnologia
de fabricare (bipolar| sau MOS), celula SRAM are o structur| echivalent| cu
aceea desenat| în Fig.5.14; liniile de alimentare nu sunt reprezentate.

Fig.5.14 Schema de principiu a unei celule SRAM

Semnalul de comand| R/W nu este o intrare în celula de memorie; controlul


operaÛiilor de citire şi scriere se face la nivelul amplificatoarelor de bit. Citirea
unei celule const| în deblocarea porÛilor de transmisie TG1, TG2 cu WL = 1
şi conversia într-un nivel logic valid a tensiunii diferenÛiale de pe cele dou|
linii de bit complementare BL, BL. Scrierea, adic| înscrierea/ştergerea, const|
în forÛarea pe liniile de bit a unei tensiuni diferenÛiale adecvate care s| aib|
252 Cap.5 Circuite de memorie şi logic| programabil|

putere de comand| mai mare decât aceea a inversoarelor 1 şi 2; curenÛii care


apar pe duratele scurte de conflict dintre sursele de comand| a liniilor de bit şi
ieşirile inversoarelor nu trebuie s| produc| defecte. FuncÛia de memorare se
datoreaz| buclei de reacÛie pozitiv| format| din inversoarele celulei. Structura
din Fig.5.14 reprezint| un latch.
În Fig.5.15 sunt desenate dou| scheme de celule SRAM realizate în
tehnologii bipolare. Denumirile de cuplare prin emitor şi cuplare prin diod|
se refer| la modul de conectare a celulelor la liniile de bit.

Fig.5.15 Celule SRAM bipolare


Circuite Logice SecvenÛiale Sincrone 253

Resistoarele RB nu fac parte din structura celulei; o singur| pereche de


rezistoare este utilizat| în comun de toate celulele de memorie legate la aceeaşi
pereche BL-BL. Condensatoarele CB sunt intrinseci şi modeleaz| cuplajul
dintre substrat şi liniile de bit, a c|ror lungime este relativ mare, dar şi
capacit|Ûile dispozitivelor conectate la aceste linii. Capacit|Ûile parazite CP şi
CW aferente liniilor PSL şi respectiv WL au de asemenea valori relativ mari.
Toate aceste capacit|Ûi limiteaz| viteza de operare (timpii de acces).
Cel mult o singur| celul| asociat| unei perechi de linii de bit este selectat|.
Selectarea celulei din Fig.5.15a se face prin ridicarea simultan| a potenÛialelor
liniilor WL şi PSL la valorile 2 V şi respectiv 4,3 V iar deselectarea prin
coborârea acestora la 0,3 V şi respectiv 1,3 V. În Fig.5.15b selectarea se
realizeaz| prin coborârea potenÛialului liniei WL la 0,4 V iar deselectarea prin
ridicarea acestuia la 2,5 V. Dac| nici o celul| nu ar fi selectat|, ambele linii de
bit se încarc| la 1,5 V. O analiz| detaliat| a funcÛion|rii celor dou| circuite
bipolare este prezentat| în continuare.
InformaÛia stocat| sau memorat| într-o celul| SRAM cu cuplare prin
emitor este reprezentat| de starea de saturaÛie/blocare a tranzistoarelor Q1 şi Q2
(unul este saturat iar cel|lalt blocat). Rezistoarele de colector au valori egale
R1 = R2. Se va considera c| 1 logic sau HIGH este reprezentat de Q1 saturat şi
Q2 blocat; starea complementar| Q1 blocat şi Q2 saturat reprezint| nivelul 0
logic sau LOW.
În stare neselectat| sau de standby, PSL = 1,3 V şi WL = 0,3 V determin|
blocarea joncÛiunilor baz|-emitor ale tranzistoarelor Q1 şi Q2 marcate cu litera
“a” iar informaÛia din celul| nu este “vizibil|” pe liniile de bit. Starea celulei
este p|strat| prin intermediul joncÛiunilor marcate cu litera “b”. CurenÛii prin
tranzistoare au urm|toarele valori:
IB1 = (PSL - WL - VBE1 on)/R2 , IB2 = 0
IC1 = (PSL - WL - VCE1 sat)/R1 , IC2 = 0
sau (5.1)
IB2 = (PSL - WL - VBE2 on)/R1 , IB1 = 0
IC2 = (PSL - WL - VCE2 sat)/R2 , IC1 = 0.
CondiÛia de saturaÛie IC < β·IB este echivalent| cu
PSL - WL - VCE sat < β·(PSL - WL - VBE on). (5.2)
S-a notat cu β factorul de amplificare în curent de la baz| la colector în
regiunea activ| normal| de funcÛionare. Aproximând VCE sat şi VBE on cu 0,1 V
şi respectiv 0,7 V rezult| β > 3; aceast| condiÛie este satisf|cut|. Indiferent de
valoarea R1 = R2, unul dintre tranzistoare este într-adev|r saturat iar cel|lalt
blocat; celula nu poate s| ajung| într-o stare în care ambele tranzistoare s| fie
254 Cap.5 Circuite de memorie şi logic| programabil|

blocate sau ambele s| fie în conducÛie. Curentul IC + IB absorbit de o celul|


aflat| în standby de la linia PSL este injectat în linia WL şi are valoarea
aproximativ| (f|r| curenÛii reziduali)
Istandby = (2·PSL - 2·WL - VBE2 on - VCE2 sat)/R1 (2) – 1,2 V /R1 (2). (5.3)
Luând ca referinÛ| organizarea memoriei prezentat| în Fig.5.1, în care fiecare
linie de selecÛie WLj este “înc|rcat|” cu 2mw celule, rezult| c| driverul de la o
ieşire inactiv| a decodificatorului trebuie s| absoarb| curentul 2mw·Istandby. Acest
curent trebuie generat de driverul sau circuitul de comand| a liniei PSLj
asociat| cu linia WLj.
Pentru citirea informaÛiei dintr-o celul| cu cuplare prin emitor trebuie
f|cut| selectarea acesteia; toate celulele conectate la aceeaşi pereche de linii
PSL-WL vor fi selectate. Trecerea din starea neselectat| în cea selectat| nu
modific| informaÛia din celul|; are loc doar o comutare a curenÛilor între
joncÛiunile “b” şi “a” ale aceluiaşi tranzistor. În starea selectat| joncÛiunile “b”
se blocheaz|. Prin intermediul joncÛiunilor “a” informaÛia din celul| devine
vizibil| pe liniile de bit. În regim static de funcÛionare, adic| dup| schimb|rile
şi stabilizarea potenÛialelor liniilor PSL, WL, BL şi BL, curenÛii prin
tranzistoarele Q1, 2 se calculeaz| cu relaÛiile

IB1 = (PSL - BL - VBE1 on)/R2 , IB2 = 0


IC1 = (PSL - BL - VCE1 sat)/R1 , IC2 = 0 (BL = 1,5 V)
IB1 + IC1 = (BL - 1,5 V)/RB
sau (5.4)
IB2 = (PSL - BL - VBE2 on)/R1 , IB1 = 0
IC2 = (PSL - BL - VCE2 sat)/R2 , IC1 = 0 (BL = 1,5 V)
IB2 + IC2 = (BL - 1,5 V)/RB.
Una dintre liniile de bit r|mâne la 1,5 V iar cealalt| ajunge la un potenÛial Vbit
cuprins între 1,5 V şi 2 V. Acest potenÛial trebuie s| fie cu cel puÛin 100 mV
mai mic decât WL pentru ca joncÛiunile “b” s| r|mân| blocate; o valoare
apropiat| de 1,8 V asigur| acest lucru. DiferenÛa Vbit - 1,5 V = 0,3 V reprezint|
o margine de zgomot rezonabil|, care nu conduce la dificult|Ûi în proiectarea
amplificatoarelor de bit. Curentul IC + IB absorbit de o celul| selectat| de la
linia PSL este injectat printr-una din liniile de bit şi rezistorul RB aferent în
sursa de tensiune de 1,5 V şi are valoarea aproximativ|
Iread = (2·PSL - 2·Vbit - VBE2 on - VCE2 sat)/R1 (2) – 4,2 V /R1 (2). (5.5)
Consumul de curent al unei celule selectate creşte de aproximativ 3,5 ori faÛ|
de consumul celulei neselectate, adic| Iread •3,5·Istandby. Valorile absolute ale
Circuite Logice SecvenÛiale Sincrone 255

acestor curenÛi sunt determinate de rezistenÛa R1 (2). Din relaÛiile 5.4 se obÛine
valoarea necesar| pentru rezistenÛa RB (RB = 0,3 V/Iread). Dup| înc|rcarea liniei
WL la 2 V, adic| a condensatorului CW, curentul generat de ieşirea driverului
liniei WL se anuleaz|.
Pentru înscrierea informaÛiei într-o celul| cu cuplare prin emitor aceasta
trebuie s| fie selectat| iar una din liniile de bit trebuie forÛat| la 0 V cu ajutorul
unui driver de tip “open collector” din structura amplificatorului de bit, dup|
cum se arat| în figura urm|toare.

Fig.5.16 Înscrierea celulei SRAM cu cuplare prin emitor

Tranzistoarele Q, Q̄ pot s| comande liniile de bit BL şi respectiv BL numai în


regim de scriere (R/W = 0). În regim de citire şi standby aceste tranzistoare
sunt blocate. F|r| a pierde din generalitate se va considera înscrierea valorii 1
logic, adic| Data = high, într-o celul| înscris| anterior cu 0 logic. Starea
curent| a celulei din Fig.5.16 este Q1 blocat şi Q2 saturat iar potenÛialele din
nodurile circuitului, înainte de activarea comenzii de scriere, sunt
VC2 = VB1 = VCE sat + Vbit = 0,1 V + 1,8 V = 1,9 V
VB2 = VC1 = VBE on + Vbit = 0,7 V + 1,8 V = 2,5 V (5.6)
VBL = VE1a = 1,5 V şi VBL = VE2a = Vbit = 1,8 V.
256 Cap.5 Circuite de memorie şi logic| programabil|

JoncÛiunea BE1a este direct polarizat| cu 0,4 V. Dup| activarea comenzii de


scriere, R/W = 0, tranzistorul Q se satureaz| iar Q̄ r|mâne blocat. PotenÛialul
liniei BL coboar| la VCE sat = 0,1 V şi se forÛeaz|
VB1 = VC2 = VCE sat + VBE on = 0,8 V
(5.7)
VC1 = VB2 = 2·VCE sat = 0.2 V.
Tranzistorul Q1 se satureaz| iar Q2 se blocheaz|; potenÛialul liniei BL coboar|
la 1,5 V. Curentul static absorbit de tranzistorul Q se calculeaz| cu relaÛia
Iwrite = (1,5 V - VCE sat)/RB + (2·PSL - VBE on - 3·VCE sat)/R1 (2) =
= 1,4 V/RB + 7,6 V /R1 (2).= 4,67·Iread + 1,81·Iread = (5.8)
= 6,48·Iread = 22,68·Istandby.
Dup| dezactivarea comenzii de scriere celula p|streaz| noua informaÛie pân|
la viitoarea operaÛie de înscriere sau pân| la deconectarea aliment|rii.
FuncÛionarea în regim dinamic a celulei SRAM cu cuplare prin emitor
este ilustrat| în diagramele de timp din Fig.5.17. Valoarea iniÛial| stocat| în
celul| este 0 logic.

Fig.5.17 FuncÛionarea în regim dinamic a celulei din Fig.5.15a


Circuite Logice SecvenÛiale Sincrone 257

Timpul de acces la citire are o component| determinat| de decodificatorul de


adres| împreun| cu driverele care comand| liniile PSL-WL, una determinat|
de amplificatoarele de bit cu driverele de ieşire şi o component| determinat|
de viteza de înc|rcare a capacit|Ûii liniei de bit CB de la 1,5 V la 1,8 V.
Înc|rcarea se face printr-un tranzistor saturat, Q1 sau Q2, conform cu ecuaÛia
v(t) = Vbit + (1,5 - Vbit)·exp(-t/τ) = 1,8 - 0,3·exp(-t/τ) (5.9)
în care τ = CB·(RB || R1 || R2) este constanta de timp. Dup| o durata egal| cu 3·τ
potenÛialul liniei de bit ajunge la 1,785 V.
Timpulde acces la scriere depinde, de asemenea, de decodificatorul de adres|
împreun| cu driverele care comand| liniile PSL-WL, de logica de comand|, de
blocul amplificatoarelor de bit şi de viteza de comutare a st|rii celulei.
CorespondenÛa dintre st|rile de saturaÛie/blocare ale tranzistoarelor Q1,
Q2 şi valoarea bitului stocat în celula SRAM cu cuplare prin emitor este
echivalent| cu relaÛiile
BL > BL Y high şi BL > BL Y low. (5.10)
Pentru a se p|stra convenÛia de mai sus şi pentru celula SRAM cu cuplare prin
diod| rezult| c| 1 logic este reprezentat prin Q1 blocat şi Q2 saturat; starea
complementar| Q1 saturat şi Q2 blocat reprezint| 0 logic.
În stare neselectat| sau de standby diodele Schottky D1 şi D2 sunt blocate iar
liniile de bit sunt înc|rcate la 1,5 V. Curentul Istandby absorbit de la linia de
alimentare este injectat în linia de selecÛie WL. Considerând R1a = R2a = Ra şi
R1b = R2b = Rb rezult|
Istandby = (VCC - VBE on - WL)/Ra + (VCC - VCE sat - WL)/(Ra + Rb) =
= 0,3V/Ra + 0,9V/(Ra + Rb). (5.11)
În stare selectat| potenÛialul liniei WL coboar| de la 2,5 V la 0,4 V. MenÛinerea
în blocare a unuia dintre cele dou| tranzistoare se face prin limitarea c|derii de
tensiune pe rezistorul Rb din colectorul tranzistorului saturat, la valori mici în
comparaÛie cu VBE on - VCE sat. O parte din curentul de colector al tranzistorului
saturat este luat de la sursa de alimentare VCC = 3,5 V printr-un rezistor Ra şi
o parte de la sursa de 1,5 V (prin RB, o linie de bit şi o diod| Schottky).
PotenÛialul liniei de bit la care este conectat tranzistorul saturat coboar| de la
1,5 V la Vbit = 1,2 V. Curentul static Iread pe care trebuie s| îl absoarb| driverul
liniei de selecÛie de la o singur| celul| este
Iread = (1,5 - Vbit)/RB + [VCC - (Vbit - VD on)]/Ra + (VCC - VBE on - WL)/Ra
= 0,3V/RB + 2,8V/Ra + 2,4V/Ra = 0,3V/RB + 5,2V/Ra. (5.12)
Tensiunea VD on – 0,5 V este c|derea de tensiune pe dioda Schottky aflat| în
258 Cap.5 Circuite de memorie şi logic| programabil|

conducÛie. Primii doi termeni din relaÛia 5.12 reprezint| componentele


curentului de colector menÛionate anterior iar al treilea termen este curentul de
baz|. Din condiÛia de saturaÛie IC < β·IB se obÛine
Ra < (8·β - 9,3)·RB. (5.13)
C|derea de tensiune pe rezistorul Rb din colectorul tranzistorului saturat este
de aproximativ 0,2 V. Valoarea acestei rezistenÛe se calculeaz| cu relaÛia
Rb = 0,2V/IC = Ra·RB/(1,5·Ra + 14·RB). (5.14)
Tensiunea BE a celuilalt tranzistor are valoarea 0,3 V ceea ce verific| ipoteza
de blocare. Dioda din colectorul tranzistorului blocat este polarizat| direct cu
0,4 V deoarece potenÛialul din catodul acesteia este WL + VBE on = 1,1 V; ca
urmare, curentul prin diod| este nul.
Înscrierea celulei SRAM cu cuplare prin diod| se face, dup| selectare, prin
ridicarea potenÛialului unei linii de bit la o valoare Vwrite mai mare decât 1,6 V.
Pentru ca celula s| comute în starea complementar| celei curente, trebuie
crescut potenÛialul liniei de bit la care este conectat tranzistorul saturat.
Curentul static Iwrite care trebuie injectat în linia de bit de c|tre driverul acesteia,
are dou| componente:
Iwrite = (Vwrite - 1,5V)/RB + 0,4V/Rb. (5.15)
Primul termen din relaÛia de mai sus este curentul absorbit de sursa de 1,5 V
prin rezistenÛa RB. Al doilea termen reprezint| un supliment minim care trebuie
introdus în curentul de colector al tranzistorului saturat pentru ca pe rezistorul
Rb tensiunea s| creasc| cu 0,4 V (de la 0,2 V la 0,6 V). Aceast| creştere
minim| a curentului de colector nu scoate tranzistorul din saturaÛie îns|
produce intrarea în conducÛie a tranzistorului care era mai înainte blocat.
Dep|şirea uşoar| a valorii de 1,6 V pe linia de bit forÛeaz| comutarea celulei.
În funcÛie de tipul driverului utilizat pentru comanda liniilor de bit (la scriere),
este sau nu este nevoie de rezistoarele R1c, R2c de limitare a curenÛilor de baz|;
aceste rezistoare cu valori egale sunt necesare în cazul comenzii în tensiune.
Din relaÛia 5.13 rezult| c| Ra << RB. Úinând cont de aceast| inegalitate,
din (5.14) se obÛine Rb • Ra/14 = 0,07·Ra. Se pot face aproximaÛii şi în relaÛiile
5.11, 5.12 şi 5.15; acestea conduc la urm|toarele rezultate:
Istandby .1,14V/Ra
Iread . 5,2V/Ra (5.16)
Iwrite > 5,6V/Ra.
Altfel spus Iwrite > 1,08·Iread şi Iread = 4,56·Istandby. Consumul relativ de curent al
unei celule cu cuplare prin diod| între modurile de operare standby, read şi
write are o variaÛie mai mic| decât a unei celule cu cuplare prin emitor, unde
Circuite Logice SecvenÛiale Sincrone 259

Iwrite = 6,48·Iread şi Iread = 3,5·Istandby.


FuncÛionarea în regim dinamic a celulei SRAM cu cuplare prin diod| este
ilustrat| în diagramele de timp din Fig.5.18. Valoarea iniÛial| stocat| în celul|
este 0 logic.

Fig.5.18 FuncÛionarea în regim dinamic a celulei din Fig.5.15b

Înc|rcarea unei linii de bit de la 1,2 V la 1,5 V se face cu o constanta de timp


CB·RB relativ mare; acest proces are loc numai dac| urm|toarea celul| selectat|
nu forÛeaz| potenÛialul liniei de bit înapoi la 1,2 V. Desc|rcarea unei linii de bit
de la 1,5 V la 1,2 V într-o operaÛie de citire se face cu o constant| de timp
semnificativ mai mic|, CB·(RB || Rb) – CB·Rb. Aceste diferenÛe dintre vitezele de
înc|rcare şi desc|rcare a liniilor de bit sunt redate calitativ în diagramele de
mai sus. Constanta de timp cu care se încarc| linia de bit pân| la Vwrite este
determinat| în principal de driverul de scriere.
Dou| scheme de celule SRAM realizate în tehnologie NMOS sunt
desenate în Fig.5.19. Toate tranzistoarele sunt cu canal indus, cu excepÛia
tranzistoarelor M5 şi M6 care au canal iniÛial. Rezistoarele R1 şi R2 sunt din
polisiliciu nedopat, caracterizat de o rezistenÛ| pe p|trat foarte mare (10 MΩ).
260 Cap.5 Circuite de memorie şi logic| programabil|

Fig.5.19 Celule SRAM - NMOS

Deşi nu sunt reprezentate în schemele din figura de mai sus, capacit|Ûile


parazite ale liniilor de selecÛie şi de bit sunt CB şi respectiv CW iar capacit|Ûile
parazite din drenele tranzistoarelor M1 şi M2 sunt C1 şi respectiv C2. Toate
aceste capacit|Ûi sunt raportate la nodul de referinÛ| VSS, adic| au o arm|tur|
legat| la substratul circuitului.
Tranzistoarele M1 şi M2 sunt identice; la fel sunt M3 - M4, M5 - M6 şi R1 - R2.
Se va considera c| toate tranzistoarele cu canal indus au aceeaşi tensiune de
prag pozitiv| VT+ iar M5, M6 au tensiunea de prag negativ| VT-.
În standby, tranzistoarele de trecere sau de transmisie M3, M4 sunt blocate iar
liniile de bit se încarc| (relativ lent) la o tensiune de aproximativ 3 V.
Înc|rcarea capacit|Ûilor CB se face prin rezistenÛe cu valoare relativ mare sau
cu circuite echivalente conectate permanent la liniile de bit. În regim de scriere,
fiecare linie de bit este comandat| de un driver de scriere activ; acesta devine
inactiv în afara intervalelor de scriere, adic| trece în starea de înalt| impedanÛ|.
Circuite Logice SecvenÛiale Sincrone 261

Blocarea tranzistoarelor de trecere M3, M4 se face cu WL = 0 V iar deblocarea


acestora sau accesul la ieşirile celulei se face cu WL = 5 V. În concordanÛ| cu
convenÛia stabilit| de relaÛia (5.10), M1 blocat - M2 triod| reprezint| 1 logic iar
M1 triod| - M2 blocat reprezint| 0 logic. Dimensiunile tranzistoarelor, W şi L,
precum şi valoarea R a rezistenÛelor R1, R2 în cazul celulei SRAM cu sarcin|
rezistiv|, trebuie alese astfel încât consumul de curent (standby, citire, scriere)
s| fie cât mai mic posibil f|r| ca s| existe riscul de alterare a informaÛiei
stocate în intervalele de citire.
În modul standby, unul dintre tranzistoarele cu canal iniÛial M5, M6
opereaz| în regim de triod| având curent de dren| nul iar cel|lalt este activ
(adic| opereaz| în regiunea de saturaÛie a curentului de dren|). CurenÛii
reziduali sau de leakage sunt neglijaÛi în calculele urm|toare.
F|r| a pierde din generalitate se consider| situaÛia M1 triod| - M2 blocat, din
care rezult| c| V2 = VDD şi V1 0 [0 ... VT+). Se doreşte ca V1 s| fie cât mai
aproape de 0. Din egalitatea curenÛilor de dren| ai tranzistoarelor M1 şi M5 se
obÛine ecuaÛia
ε ox W1 1 2 1 ε W
μn [(VDD − VT+ )V1 − V1 ] = μ n ox 5 VT-2 = Istandby (5.17)
tox L1 2 2 tox L 5
în care µn, εox, tox reprezint| mobilitatea electronilor, permitivitatea electric| a
oxidului de siliciu şi respectiv grosimea acestuia.
În cazul celulei cu sarcin| rezistiv| curentul consumat în standby se determin|
din relaÛia
ε ox W1 1 2 V − V1
μn [(VDD − VT+ )V1 − V1 ] = DD = Istandby . (5.18)
tox L1 2 R
Reducerea curentului Istandby la valori rezonabil de mici se poate face pentru
ambele structuri din Fig.5.19 şi anume, prin dimensionarea corespunz|toare a
tranzistoarelor cu canal iniÛial, W5 (6) = “mic” şi L5 (6) = “mare” (relaÛia 5.17) sau
prin alegerea unei valori suficient de mari pentru rezistenÛa R (relaÛia 5.18);
mai avantajoas| din punctul de vedere al ariei ocupate este celula cu sarcin|
rezistiv|. Micşorarea tensiunii V1 se obÛine prin creşterea raportului W1/L1 (în
ambele scheme din Fig.5.19).
În modul citire tranzistoarele de trecere M3 şi M4 intr| în conducÛie.
PotenÛialul liniei BL creşte peste valoarea 3 V, capacitatea CB a acesteia fiind
înc|rcat| de la sursa VDD prin tranzistorul M6 sau prin rezistorul R2 şi
tranzistorul de trecere M4. Imediat dup| ce M4 intr| în conducÛie, potenÛialul
V2 scade de la 5 V pân| la o valoare mai mare decât 3 V, astfel c| M1 r|mâne
în conducÛie. Circuitele de înc|rcare a liniei BL “extrase” din schemele din
Fig.5.19(a, b) sunt desenate în Fig.5.20(a, b) iar diagramele de timp aferente
funcÛion|rii acestora sunt reprezentate în Fig.5.20c. S-a considerat c|
262 Cap.5 Circuite de memorie şi logic| programabil|

tranzistorul M2 r|mâne blocat pe durata citirii.

Fig.5.20 Înc|rcarea unei linii de bit la citirea celulelor din Fig.5.19

În figura de mai sus V2 read şi Vbit + sunt valorile la care se stabilizeaz| tensiunile
v2 şi respectiv BL. Dup| deblocare, tranzistorul de trecere M4 funcÛioneaz| în
regiunea activ|; regimul de triod| începe din momentul în care tensiunea dren|-
Circuite Logice SecvenÛiale Sincrone 263

surs| devine suficient de mic|, adic|


v2 (t) - BL(t) < 5 - BL(t) - VT+. (5.19)
În cazul celulei cu sarcin| activ| tranzistorul M6 iese din regimul de triod| şi
opereaz| ca surs| de curent constant începând cu momentul t1; valoarea
curentului Istandby este dat| de relaÛia 5.17.
Regimurile tranzitorii de desc|rcare a capacit|Ûii C2 şi de înc|rcare a capacit|Ûii
CB, corespunz|toare subcircuitelor (a) şi (b) din Fig.5.20, dureaz| pân| la
momentele t2 şi sunt descrise de ecuaÛiile 5.20 şi respectiv 5.21. Momentele t2
nu sunt neap|rat identice pentru cele dou| subcircuite.

dv2 (t ) BL(t ) − 3 dBL(t )


Istandby − C 2 = + CB (5.20)
dt RB dt

5 − v2 ( t ) dv (t ) BL(t ) − 3 dBL(t )
− C2 2 = + CB (5.21)
R2 dt RB dt
Tranzistorul M4 intr| în regim de triod| înainte de momentul t2. Conform
ecuaÛiei 5.19, acest lucru are loc la momentul când
v2 (t) = 5 - VT+. (5.22)
Valorile V2 read şi Vbit + se obÛin din (5.20) şi (5.21) dup| terminarea regimurilor
tranzitorii, ca valori finale ale tensiunilor v2 şi respectiv BL, când toate
derivatele în raport cu timpul devin nule. Rezult|

Vbit+ − 3
Istandby = (5.23)
RB
5 − V2 read Vbit+ − 3
= . (5.24)
R2 RB
Linia de bit BL ajunge în subcircuitul (a) şi respectiv (b) la potenÛialul
Vbit + = 3 V + RB·Istandby (5.25)
Vbit + = 3 V + (RB/R2)·(5 - V2 read). (5.26)
Cu excepÛia Vbit+ în cazul celulei cu sarcin| activ|, m|rimile Vbit + şi V2 read
depind de dimensiunile W şi L ale tranzistorului de trecere M4; creşterea
raportului W4 /L4 determin| reducerea tensiunii V2 read şi creşterea tensiunii
Vbit+, p|strându-se inegalitatea V2 read > Vbit +.
Dup| deselectarea celulei (WL = 0 V) linia de bit BL revine la 3 V cu
264 Cap.5 Circuite de memorie şi logic| programabil|

constanta de timp CB·RB iar potenÛialul din drena tranzistorului M2 tinde c|tre
5 V; C2 se încarc| liniar la curentul constant Istandby (a) şi respectiv exponenÛial
cu constanta de timp C2·R2 (b).
PotenÛialul liniei BL scade sub 3 V, capacitatea CB fiind desc|rcat| prin
tranzistoarele M3 şi M1. Tranzistorul M3 trebuie s| r|mân| în regim de triod|
şi s| menÛin| tensiunea V1 sub pragul VT+, altfel M2 intr| în conducÛie şi poate
s| produc| schimbarea st|rii celulei, ceea ce ar constitui o eroare. Pentru
evitarea acestei situaÛii “divizorul de tensiune” M1 - M3 trebuie dimensionat
corect. Circuitele de desc|rcare a liniei BL “extrase” din schemele din
Fig.5.19(a, b) sunt desenate în Fig.5.21(a, b) iar diagramele de timp aferente
funcÛion|rii acestora sunt reprezentate în Fig.5.21c; V1 read şi Vbit - sunt valorile
la care se stabilizeaz| tensiunile v1 şi respectiv BL. Dup| deblocare (WL = 5V),
tranzistorul de trecere M3 funcÛioneaz| în regim de triod| deoarece condiÛia
urm|toare este îndeplinit| pe toat| durata citirii.
BL(t) - v1 (t) < 5 - v1 (t) - VT+ (5.27)
Regimurile tranzitorii de înc|rcare a capacit|Ûii C1 şi de desc|rcare a capacit|Ûii
CB, corespunz|toare subcircuitelor (a) şi (b) din Fig.5.21, sunt descrise de
ecuaÛiile 5.28 şi respectiv 5.29.

dv1 (t ) 3 − BL(t ) dBL(t )


iD1 (t ) + C1 = − CB + Istandby (5.28)
dt RB dt

dv1 (t ) 3 − BL(t ) dBL(t ) 5 − v1 (t )


iD1 (t ) + C1 = − CB + (5.29)
dt RB dt R1
Curentul Istandby din relaÛia 5.28 este cel determinat în (5.17). Dup| terminarea
regimurilor tranzitorii, din cele dou| ecuaÛii de mai sus se obÛin:

3 − Vbit −
I D1 = + Istandby (5.30)
RB

3 − Vbit − 5 − V1 read
I D1 = + . (5.31)
RB R1

Pentru ca tensiunea V1 read s| r|mân| suficient de mic| faÛ| de valoarea VT+,


curentul ID3 = (3 - Vbit -)/RB absorbit din linia de bit BL trebuie s| produc| o
c|dere de tensiune mai mare pe M3 şi mai mic| pe M1; conductanÛa
tranzistorului M1 trebuie s| fie de câteva ori mai mare decât aceea a
tranzistorului M3, ceea ce înseamn| W3 /L3 << W1 /L1.
Circuite Logice SecvenÛiale Sincrone 265

Fig.5.21 Desc|rcarea unei linii de bit la citirea celulelor din Fig.5.19


266 Cap.5 Circuite de memorie şi logic| programabil|

Linia de bit BL ajunge în subcircuitul (a) şi respectiv (b) la potenÛialul


Vbit - = 3 V - RB·(ID1 - Istandby) (5.32)
Vbit - = 3 V - RB·[ID1 - (5 - V1 read)/R1]. (5.33)
CurenÛii ID1 - Istandby şi ID1 - (5 - V1 read)/R1 depind de dimensiunile tranzistoarelor
M1 şi M3. Comparând relaÛiile 5.25 cu 5.32 şi 5.26 cu 5.33 se constat| c|
tensiunile Vbit + şi Vbit - nu sunt simetrice faÛ| de sursa de 3 V. Altfel spus,
tensiunea rezultat| la citirea celulei de memorie NMOS nu este chiar una
diferenÛial|, îns| reprezint| un avantaj faÛ| de celulele SRAM bipolare.
Curentul static Iread consumat la citire poate fi considerat o medie aritmetic|
între curenÛii IDD şi ISS.
Iread = 1,5·Istandby + (3 - Vbit -)/2RB (5.34)
Iread = (5 - V2 read)/R + (5 - V1 read)/2R + (3 - Vbit -)/2RB (5.35)
Expresiile 5.34 şi 5.35 corespund celulei cu sarcin| activ| şi respectiv cu
sarcin| rezistiv|. Dac| pentru aceasta din urm| se aproximeaz| Istandby • 5/R, se
observ| c| suma primilor doi termeni din (5.35) este mai mic| decât Istandby.
ContribuÛia celulelor NMOS din Fig.5.19 la timpul de acces la citire este
determinat| de curenÛii cu care sunt înc|rcate/desc|rcate liniile de bit; curentul
de înc|rcare este limitat de rezistoarele R1 (2) sau de sursele de curent constant
M5 (6) iar curentul de desc|rcare este limitat de tranzistoarele M1 (2) şi M3 (4).
Exist| un compromis între puterea consumat| şi viteza de citire.
Înscrierea celulelor NMOS se face prin forÛarea unei singure linii de bit
la 0 V (dup| selectare); dac| se forÛeaz| BL se înscrie 1 logic iar dac| se
forÛeaz| BL se înscrie 0 logic. Diagramele de timp din Fig.5.22c ilustreaz|
procesele care au loc la înscrierea valorii logice 0 într-o celul| NMOS în care
valoarea curent| stocat| este 1. Durata impulsului de selecÛie a fost în mod
intenÛionat m|rit| astfel încât imediat dup| înscriere s| urmeze o citire; de
regul| se face fie numai înscriere fie numai citire, nu ambele operaÛii în acelaşi
interval de selecÛie a celulei.
Pe durata scrierii se activeaz| driverul liniei BL; ieşirea acestui circuit este
reprezentat| de tranzistorul Mdrv. IniÛial Mdrv opereaz| în regiunea activ|,
curentul Idrv având valoarea CB·(dBL/dt). Viteza de desc|rcare a liniei depinde
de dimensiunile tranzistorului Mdrv. Apoi, Mdrv opereaz| în regim de triod| şi
menÛine linia BL la un potenÛial apropiat de 0 V. Pentru a schimba starea
celulei trebuie ca potenÛialul v1 s| coboare şi s| se menÛin| sub valoarea de prag
VT+. În diagramele din Fig.5.22c, nivelul la care se stabilizeaz| v1 s-a notat cu
V1 write. Tranzistorul M2 trece din triod| în blocare iar M1 din blocare în triod|.
Dup| comutare,
Idrv + ID1 – 3V/RB + Istandby. (5.36)
Circuite Logice SecvenÛiale Sincrone 267

Fig.5.22 Înscrierea celulelor din Fig.5.19 cu valoarea logic| 0


268 Cap.5 Circuite de memorie şi logic| programabil|

Curentul static de scriere Iwrite consumat de o celul| NMOS de la sursele VDD


şi VSS este egal cu Istandby, mai mic decât curentul de citire Iread.
Celula SRAM desenat| în figura urm|toare este realizat| în tehnologie
CMOS standard. Terminalele bulk (substrat) ale tranzistoarelor nu sunt
reprezentate; acestea sunt conectate la VDD (pMOS) şi respectiv la VSS (nMOS).

Fig.5.23 Celul| SRAM - CMOS standard

Structurile N1 - P1 şi N2 - P2 sunt inversoare CMOS. Celula format| din aceste


dou| inversoare se conecteaz| la liniile de bit prin intermediul tranzistoarelor
de trecere Npass1 şi Npass2. Tranzistoarele Pprecharge1 şi Pprecharge2 sunt sarcini active
care încarc| liniile de bit BL şi respectiv BL la VDD atunci când nici o celul|
nu este conectat| (adic| selectat|); dup| înc|rcarea capacit|Ûilor CB, aceste
tranzistoare funcÛioneaz| în regim de triod| la curent de dren| zero.
Capacit|Ûile liniilor de bit cumuleaz| şi capacit|Ûile dren|-gril| sau surs|-gril|
ale tranzistoarelor de trecere blocate; o astfel de capacitate este comparabil| cu
a unui tranzistor aflat în conducÛie. C1 şi C2 sunt capacit|Ûile intrinseci de gril|
ale perechilor N1 - P1 şi respectiv N2 - P2. Tranzistoarele Nwrite1 şi Nwrite2
reprezint| ieşirile driverelor de scriere.
Valoarea minim| a tensiunii de alimentare este
VDD min = VTn + |VTp|, (5.37)
Circuite Logice SecvenÛiale Sincrone 269

unde VTn > 0 V şi VTp < 0 V sunt tensiunile de prag ale tranzistoarelor nMOS
şi respectiv pMOS.
În modul standby (WL = 0 V) tranzistoarele de trecere sunt blocate iar
starea celulei de memorie este fie v1 = 0 şi v2 = VDD (N1 şi P2 sunt triode iar N2
şi P1 sunt blocate), fie v1 = VDD şi v2 = 0 (N1 şi P2 sunt blocate iar N2 şi P1 sunt
triode); prima stare reprezint| 0 logic iar a doua 1 logic. F|r| a pierde din
generalitate se va considera c| valoarea curent| stocat| în celul| este 1 logic.
Curentul Istandby consumat de la sursa de alimentare este nul (neglijând curenÛii
de leakage).
În modul citire WL = VDD iar driverele de scriere sunt inactive. Dac|
ambele linii de bit sunt înc|rcate la VDD atunci tranzistorul Npass1 r|mâne blocat
iar Npass2 intr| în conducÛie. Linia BL r|mâne înc|rcat| la VDD iar linia BL se
descarc| conform ecuaÛiei urm|toare. Tranzistorul Pprecharge2 trece din triod| în
surs| de curent constant dac| potenÛialul BL coboar| sub |VTp|, altfel opereaz|
numai ca triod|. N2 r|mâne triod| pe toat| durata citirii.
ε ox WN2 1 2 dv dBL
μn [(VDD − VTn )v2 − v2 ] + C1 2 = ipch2 + C B (5.38)
tox L N2 2 dt dt
Dup| terminarea regimului tranzitoriu linia BL ajunge la valoarea Vbit. Dac|
Vbit < |VTp| atunci din ecuaÛia 5.38 se obÛin urm|toarele valori pentru curentul
static de citire Iread şi tensiunea V2 read la care ajunge v2.

1 ε W
I read = μ p ox pch2 (VDD + VTp ) 2 = I precharge2
2 tox L pch2
(5.39)
μ p L N2 Wpch2
2(VDD − VTn )V2 read − V 2
= (VDD + VTp ) 2
μ n WN2 L pch2
2 read

Tensiunea V2 read trebuie s| fie mai mic| decât pragul VTn pentru ca N1 s|
r|mân| blocat. Tranzistorul Npass2 funcÛioneaz| în regiunea de saturaÛie a
curentului de dren| pân| când potenÛialul liniei BL ajunge la VDD - VTn, dup|
care opereaz| ca triod|. În final prin N2, Npass2 şi Pprecharge2 circul| curentul Iread,
determinat numai de Pprecharge2. Atât Vbit cât şi V2 read depind de dimensiunile
tranzistoarelor N2 şi Npass2; de regul| raportul (W/L)N2 = (W/L)N1 se alege de
câteva ori mai mare decât (W/L)pass2 = (W/L)pass1. De asemenea, aceste
dimensiuni determin| şi constanta de timp sau viteza de desc|rcare a liniei BL.
(M|rimile Wpch2 şi Lpch2 din relaÛia 5.39 reprezint| l|Ûimea şi respectiv lungimea
tranzistorului Pprecharge2 iar curentul prin acesta este notat ipch2 în relaÛia 5.38.)
Pentru înscrierea valorii logice 0 în celula din Fig.5.23 trebuie f|cut|
selectarea (WL = VDD) şi activarea driverului de scriere a liniei de bit BL;
270 Cap.5 Circuite de memorie şi logic| programabil|

comanda R/W = 0 şi Data = 0 produc intrarea în conducÛie a tranzistorului


Nwrite1. Acesta trebuie s| coboare potenÛialul liniei BL la o valoare suficient de
mic| astfel încât v1 s| scad| sub pragul VTn iar N2 s| se blocheze; P2 intr| în
conducÛie (în final ca triod|) iar v2 creşte c|tre VDD şi determin| comutarea
inversorului N1 - P1. În acest moment starea celulei este schimbat| iar driverul
liniei BL poate fi dezactivat.
Tranzistorul de trecere Npass1 intr| în conducÛie când potenÛialul BL ajunge la
valoarea VDD - VTn. Pe m|sur| ce potenÛialul BL scade, curentul prin Npass1
creşte
dv1 (t )
ipass1 (t ) = iP1 (t ) + C 2 (5.40)
dt
şi produce sc|derea tensiunii v1. În intervalul de timp cât v1 scade de la VDD la
VDD + VTp tranzistorul P2 r|mâne blocat dar tensiunea v2 începe s| creasc| c|tre
V2 read < VTn ca în regimul de citire; de asemenea, Npass1 şi P1 funcÛioneaz| în
regiunea de saturaÛie a curentului de dren| şi respectiv de triod|. Când v1 (în
sc|dere) atinge valoarea VDD + VTp tranzistorul P2 intr| în conducÛie şi începe
s| m|reasc| tensiunea v2 peste V2 read. Odat| atins pragul VTn de c|tre v2, intr|
în conducÛie N1. În acest moment toate cele 4 tranzistoare din structura celulei
sunt în conducÛie iar reacÛia pozitiv| accelereaz| tendinÛele de modificare,
conducând în final la v1 = 0 şi v2 = VDD. Tranzistorul de trecere Npass2 se
blocheaz| pe m|sur| ce linia BL tinde c|tre VDD iar Npass1 se afl| în regim de
triod| la curent nul. Astfel, curentul static de scriere Iwrite este zero.
Dimensiunile tranzistoarelor P1, P2 nu influenÛeaz| tensiunea Vbit asociat| cu
informaÛia stocat|, îns| afecteaz| viteza de reacÛie la schimbarea st|rii prin
intermediul amplific|rii celor dou| inversoare. Raportul (W/L)P1 = (W/L)P2 se
alege, de regul|, mai mic decât (W/L)N1 = (W/L)N2.
Curentul prin driverul activ Nwrite1 scade, de la un vârf iniÛial mare cauzat de CB,
la valoarea final|
Idriver = Iprecharge1 = Iread. (5.41)
Dac| driverul se dezactiveaz| dar celula r|mâne selectat| atunci potenÛialul
liniei BL creşte liniar la Vbit; deselectarea produce înc|rcarea liniei la curent
constant pân| când Pprecharge1 intr| în regim de triod| (adic| pân| la valoarea
|VTp|) şi apoi exponenÛial pân| la VDD.
O succesiune de operaÛii standby-citire-scriere ale celulei CMOS standard
este ilustrat| calitativ în diagramele de timp din Fig.5.24. S-a considerat c|
valoarea iniÛial| stocat| în celula de memorie este 0 logic. Pe durata operaÛiei
write1 linia de bit BL începe s| se descarce prin tranzistoarele N1 şi Npass1 pân|
când celula comut| în starea complementar| în care N1 se blocheaz| iar P1 intr|
în conducÛie. Dac| potenÛialul BL a coborât sub VDD - VTn atunci P1 contribuie
la reînc|rcarea liniei BL pân| ce acest prag va fi atins. Apoi Npass1 se blocheaz|
Circuite Logice SecvenÛiale Sincrone 271

şi P1 continu| s| încarce capacitatea C2 pân| la VDD; înc|rcarea capacit|Ûii CB


pân| la VDD este continuat| de tranzistorul Pprecharge1.

Fig.5.24 Diagrame de funcÛionare a celulei SRAM - CMOS standard

Celula SRAM fabricat| în tehnologie CMOS standard are un consum


static de curent (şi implicit de putere) foarte mic în modurile standby şi scriere,
datorat numai curenÛilor reziduali sau de leakage. În regim dinamic îns|,
puterea disipat| creşte considerabil. Un nod de circuit a c|rui capacitate
intrinsec| este C şi care comut| între VSS = 0 V şi VDD cu frecvenÛa f implic|
un consum dinamic de putere

Pdinamic = f ⋅ C ⋅ VDD
2
. (5.42)

Acest factor constituie o limitare drastic| a densit|Ûii de integrare a circuitelor


de memorie; de asemenea, reprezint| un dezavantaj major pentru aplicaÛiile
bazate pe alimentarea de la baterii.
În tehnologiile submicronice (în special sub 100 nm) curenÛii de leakage trebuie
luaÛi în considerare. Valorile acestor curenÛi care traverseaz| joncÛiunile pn
polarizate invers, fie de izolare fie din structura dispozitivelor, depind de
tehnologia de fabricare, de temperatura chip-ului şi de tensiunea de alimentare.
Reducerea tensiunii de alimentare VDD sub limita precizat| în (5.37) nu este
posibil| pentru celula de memorie CMOS standard; funcÛionarea tranzistoarelor
272 Cap.5 Circuite de memorie şi logic| programabil|

unui astfel de circuit are la baz| fenomenul de inversiune puternic|. Acest


lucru înseamn| conducÛia curentului prin canale formate la suprafaÛa
semiconductorului prin acÛiunea unor tensiuni de comand| cu valori mai mari
decât anumite praguri (threshold). Dac| tensiunile de comand| au valori foarte
apropiate de prag, uşor mai mici sau mai mari, atunci inversiunea este denumit|
slab| şi respectiv moderat|.
Tranzistoarele MOS pot fi utilizate şi în situaÛiile în care canalul
conductor de la suprafaÛa semiconductorului nu este complet format, datorit|
faptului c| tensiunile de comand| au valori mai mici sau semnificativ mai mici
decât cele de prag. Acest tip de funcÛionare este numit conducÛie sub prag
(subthreshold) sau sub-VT şi se bazeaz| mult pe curenÛii reziduali ai
joncÛiunilor pn din structura tranzistorului. Tensiunea de alimentare VDD a
circuitelor care funcÛioneaz| în acest regim se poate reduce considerabil, la
valori sub 0,6 V (adic| mai mici decât VTn şi |VTp|). Rezult| o sc|dere mare a
curentului şi implicit a puterii (dinamice) consumate de la sursa de alimentare;
acestea scad exponenÛial şi respectiv p|tratic odat| cu micşorarea tensiunii de
alimentare. AplicaÛiile de interes sunt diverse: aparate portabile cu alimentare
de la baterie (laptop-uri şi dispozitive de comunicaÛii portabile), implanturi
medicale, wireless etc.
Modelele de simulare ale tranzistoarelor MOS din tehnologiile CMOS au la
baz| ipoteza de polarizare invers| a tuturor joncÛiunilor pn. Circuitele de tip
sub-VT necesit| modele adecvate, care s| includ| polarizarea direct| a
joncÛiunilor dar şi alte fenomene din substrat care nu mai pot fi neglijate.
Tehnologiile adaptate la aplicaÛii sub-VT sunt numite DTMOS (dynamic
threshold MOS). Denumirea se refer| la modificarea tensiunii de prag VT în
funcÛie de tensiunea de comand| aplicat| tranzistorului; o tensiune de comand|
mai mare determin| reducerea tensiunii VT. Acest lucru se datoreaz| modului
special de construcÛie a tranzistorului MOS, în care terminalele gril| şi bulk
(substrat) sunt conectate fizic împreun|. Simboluri de tranzistoare DT-NMOS
şi DT-PMOS sunt desenate în figura de mai jos.

Fig.5.25 Simboluri de tranzistoare DTMOS


Circuite Logice SecvenÛiale Sincrone 273

Nu toate tranzistoarele fabricate pe un chip într-o tehnologie DTMOS sunt


neap|rat de tip DTMOS; se fabric| concomitent şi tranzistoare nMOS şi pMOS
normale, care funcÛioneaz| în inversiune puternic|, moderat| sau slab|. De
asemenea, ca în orice tehnologie MOS, se fabric| şi dispozitivele uzuale ca
tranzistoare bipolare verticale sau laterale, diode, rezistoare diverse, capacit|Ûi.
Exist| dou| tipuri diferite de tehnologii DTMOS, derivate din tehnologiile
CMOS şi anume:
- bulk-DTMOS, în care fiecare tranzistor DTMOS este realizat într-un well
(NW sau PW) izolat de substratul chip-ului prin joncÛiuni polarizate invers sau
prin trench-uri de SiO2;
- SOI-DTMOS (Silicon On Insulator), în care izolarea tranzistoarelor este
f|cut| cu ajutorul unui strat de oxid de siliciu îngropat.
Tehnologiile SOI-CMOS şi SOI-DTMOS sunt mult mai performante dar şi
mult mai scumpe în comparaÛie cu cele de tip bulk..
În Fig.5.26 sunt reprezentate structuri fizice (secÛiuni transversale) de
tranzistoare de tip bulk-DTMOS. Well-urile PW şi NW reprezint| bulk-urile
tranzistoarelor DT-NMOS şi respectiv DT-PMOS.

Fig.5.26 Tranzistoare bulk-DTMOS

JoncÛiunile substrat n - PW şi respectiv substrat p - NW sunt polarizate invers,


astfel c| tranzistorul este izolat de restul dispozitivelor de pe chip. În ambele
well-uri exist| câte un tranzistor bipolar intrinsec (BJT - bipolar junction
transistor), conectat în paralel cu tranzistorul MOS. Curentul prin MOS circul|
aproape de suprafaÛa semiconductorului în timp ce curentul tranzistorului
bipolar este constituit din fluxul de purt|tori care circul| prin volumul well-ului
(bulk-ului). InteracÛiunea dintre cei doi curenÛi poate fi neglijat| astfel c| suma
lor reprezint| curentul prin dispozitivul compus:
IDTMOS = IBJT + IMOS. (5.43)
JoncÛiunea baz|-emitor este polarizat| direct de tensiunea de comand| VGS.
274 Cap.5 Circuite de memorie şi logic| programabil|

Curentul invers al joncÛiunii de izolare dintre substrat şi well este “capturat” de


baza tranzistorului bipolar şi afectez| într-un anumit grad funcÛionarea
dispozitivului DTMOS, descris| global de relaÛia 5.43.
Structura fizic| a tranzistorului SOI-DTnMOS este prezentat| în Fig.5.27; prin
schimbarea tipurilor de difuzii n+ cu p+(p) şi invers se obÛine structura de
tranzistor SOI-DTpMOS. Tranzistorul bipolar intrinsec, conectat în paralel cu
cel de tip MOS, este scos în evidenÛ| de secÛiunea transversal| b-b.

Fig.5.27 Tranzistor SOI-DTnMOS

ObservaÛie: În funcÛie de grosimea semiconductorului tdiff (thickness), adic| a


difuziilor n+ şi p(p+) de dren|-surs| şi respectiv canal, raportat| la grosimea
Ydepletion a regiunii de sarcin| spaÛial| (de golire) din canalul de sub gril|,
tehnologia SOI este numit|
- PDSOI (partially depleted SOI) dac| tdiff > Ydepletion, sau
- FDSOI (fully depleted SOI) dac| tdiff • Ydepletion.
Tranzistorul PDSOI-MOS are un “bulk flotant”, fiind asem|n|tor într-o
anumit| m|sur| cu tranzistorul bulk-MOS dar este mai performant datorit|
modului de izolare; cele mai bune performanÛe sunt oferite de tranzistorul
FDSOI-MOS.
Celula SRAM-CMOS standard din Fig.5.23 şi derivatele acesteia pot fi
transformate în celule SRAM-DTMOS prin înlocuirea tuturor tranzistoarelor
MOS, sau numai a unora dintre acestea, cu tranzistoare de tip DTMOS.
Tensiunea de alimentare şi implicit puterea disipat| în regim dinamic se reduc
substanÛial, îns| aria ocupat| creşte.

5.3.2 Circuite DRAM


Densitatea de integrare a unui circuit RAM poate fi m|rit| prin dou|
metode de proiectare şi anume:
- prin reducerea num|rului de dispozitive (tranzistoare) din structura celulei;
Circuite Logice SecvenÛiale Sincrone 275

- prin reducerea num|rului de conexiuni dintre fiecare celul| şi celelalte blocuri


care fac parte din circuitul de memorie.
Concomitent cu m|rirea densit|Ûii de integrare trebuie redus| şi puterea
consumat| la nivelul celulei (sau pe unitatea de arie).
Reducerea dimensiunilor dispozitivelor şi ale conexiunilor (poly, metale, via,
etc.) poate s| aib| un impact major asupra densit|Ûii de integrare îns| Ûine de
tehnologia de fabricare a circuitelor.
Celula SRAM-CMOS standard din Fig.5.23 poate fi simplificat| dup|
cum se arat| în Fig.5.28; rezultatul reprezint| o celul| DRAM-CMOS standard.
Au fost eliminate tranzistoarele P1, P2 şi linia de alimentare VDD a celulei.

Fig.5.28 Celul| DRAM - CMOS standard cu 4 tranzistoare

FuncÛionarea celulei DRAM din figura de mai sus se deosebeşte fundamental


faÛ| de aceea a celulei SRAM din care a fost obÛinut|. În standby, capacit|Ûile
intrinseci C1 şi C2 din grilele tranzistoarelor N1 şi respectiv N2 pot s| menÛin|
pentru o anumit| durat| starea celulei; astfel, C1 desc|rcat şi C2 înc|rcat
determin| şi menÛine starea N1 blocat - N2 triod| iar C1 înc|rcat şi C2 desc|rcat
determin| şi menÛine starea complementar| N1 triod| - N2 blocat. Dac| durata
de standby dep|şeşte o anumit| limit| atunci, datorit| curenÛilor de leakage,
capacitatea care a fost mai înainte înc|rcat| se va desc|rca iar celula ajunge
într-o stare de eroare sau invalid|, în care ambele tranzistoare sunt blocate.
Durata st|rii de standby maxim permis| pentru a nu se pierde informaÛia
276 Cap.5 Circuite de memorie şi logic| programabil|

stocat| depinde de tensiunea iniÛial| pe C1 (2), de dimensiunile tranzistoarelor


N1 (2) şi de tehnologia de fabricare; ultimele dou| determin| atât valorile
capacit|Ûilor C1 (2) cât şi nivelul curenÛilor reziduali care produc pierderile de
sarcin| electric|.
ObservaÛie: CurenÛii de leakage nu pot s| încarce capacit|Ûile C1 (2) ci doar s|
le descarce pân| la 0 V.
FuncÛionarea în condiÛii de siguranÛ| a celulei DRAM necesit| refacerea
periodic| a sarcinii pierdute din C1 sau din C2, dup| caz. Aceast| operaÛie
poart| numele de refresh şi este specific| circuitelor DRAM. În cazul celulei
din Fig.5.28 simpla operaÛie de selectare (WL = VDD) produce refresh-ul, dup|
cum se arat| în continuare. Se consider| c| celula se afl| în standby cu C2
desc|rcat (v1 = 0 V) şi cu C1 în curs de desc|rcare (v2 ` 0 V). De asemenea, se
presupune c| potenÛialul v2 este înc| mai mare decât pragul VTn şi asigur|
conducÛia lui N1; acest tranzistor opereaz| în regim de triod| la curent de dren|
nul. Dac| linia de selecÛie WL comut| la VDD, ambele tranzistoare de trecere
Npass1 şi Npass2 intr| în conducÛie. N1 r|mîne triod| şi începe s| descarce linia
BL, menÛinînd potenÛialul v1 sub pragul VTn. Ca urmare, N2 r|mâne în
continuare blocat iar C1 se încarc| prin transfer de sarcin| de la linia BL, prin
Npass2, pân| la o valoare apropiat| de VDD - VTn. Reînc|rcarea capacit|Ûii C1
pân| la valoarea “iniÛial|” VDD - VTn se face cu vitez| relativ mare, astfel c|
durata necesar| a impulsului high pe linia de selecÛie WL este mai mic| decât
în cazul operaÛiei de citire. Citirea dureaz| mai mult timp deoarece linia BL (în
acest caz) trebuie desc|rcat| pân| la valoarea Vbit.
Se pot face urm|toarele preciz|ri referitoare la operaÛia de refresh:
- citirea unei celule produce şi refresh-ul acesteia;
- durata unei operaÛii de citirie este mai mare decât durata unui refresh;
- toate celulele conectate la aceeaşi linie WL sunt refresh-ate simultan;
- operaÛia de refresh este periodic| iar cea de citire este aleatoare;
- refresh-ul nu implic| “vizibilitatea” vreunei celule la ieşirile memoriei.
Citirea celulei DRAM din Fig.5.28 este aproape identic| cu citirea celulei
SRAM din Fig.5.23 în privinÛa liniei de bit care d| informaÛia stocat|, adic| a
liniei care urmeaz| s| fie desc|rcat| pân| la valoarea Vbit. Considerând c| în
ambele celule N1 este triod| (v1 = 0 V), adic| valoarea stocat| este 0 logic,
desc|rcarea liniei BL are loc în condiÛiile urm|toare:
- înainte de momentul select|rii celulei, tensiunea de comand| a grilei
tranzistorului N1 este v2 > VTn (DRAM) şi respectiv v2 = VDD (SRAM);
- imediat dup| selectare v2 • VDD - VTn (DRAM) şi respectiv v2 = VDD (SRAM).
Dac| tensiunea de alimentare, dimensiunile tranzistoarelor şi capacitatea liniei
de bit sunt la fel, atunci linia BL se descarc| de la VDD la Vbit mai repede în
celula SRAM datorit| tensiunii de comand| v2 mai mare.
Deosebiri apar în raport cu linia de bit complementar| BL. Tranzistorul de
Circuite Logice SecvenÛiale Sincrone 277

trecere Npass2 r|mâne blocat pe durata citirii celulei SRAM dar intr| în
conducÛie la citirea celulei DRAM şi realizeaz| operaÛia de refresh ( încarc|
C1 pân| aproape de VDD - VTn); deoarece CB >> C1, potenÛialul liniei BL scade
puÛin sub VDD dup| care revine la VDD datorit| curentului injectat de Pprecharge2.
OperaÛia de înscriere a celulei DRAM se face, dup| selectare, tot prin
activarea unuia dintre driverele celor dou| linii de bit. Dac| se activeaz| Nwrite1
se descarc| C2 şi se blocheaz| N2 iar C1 se încarc| la VDD - VTn şi determin|
conducÛia lui N1 ca triod|. Datorit| lipsei reacÛiei pozitive din structura celulei
DRAM, viteza de schimbare a st|rii este mai mic| faÛ| de cea a celulei SRAM.
Diagramele de timp din Fig.5.29 ilustreaz| calitativ o succesiune de
operaÛii standby-refresh-citire-scriere ale celulei DRAM cu 4 tranzistoare (4T)
din Fig.5.28. S-a considerat c| operaÛiile de scriere, citire şi refresh sunt
controlate de semnalele active high Write, Read şi respectiv Refresh.

Fig.5.29 Diagrame de funcÛionare a celulei DRAM 4T


278 Cap.5 Circuite de memorie şi logic| programabil|

O schem| de celul| DRAM-CMOS cu 3 tranzistoare (3T) este desenat|


în Fig.5.30. SelecÛia se realizeaz| cu ajutorul a dou| linii R_WL şi W_WL, una
pentru citire şi una pentru scriere:
R_WL = AND (R, WL) = R·WL
(5.44)
W_WL = AND (W, WL) = W·WL.
În relaÛia de mai sus R, W şi WL sunt active high şi reprezint| comenzile
externe de citire, scriere şi respectiv o ieşire Word Line a decodificatorului de
linii (decodificatorul de adres| 1-din-2n din Fig.5.1). Celula se conecteaz| la o
singur| linie de bit BL.

Fig.5.30 Celul| DRAM - CMOS standard 3T

Starea celulei este determinat| de tensiunea v(t) pe capacitatea de gril| C a


tranzistorului N: v < VTn (N blocat) şi v > VTn (N triod|) reprezint| 1 şi
respectiv 0 logic. În standby (R_WL = 0, W_WL = 0) tranzistoarele de trecere
Npass1 şi Npass2 sunt blocate iar C se descarc| datorit| curenÛilor de leakage
(joncÛiunea surs|-bulk Npass2). Driverul liniei de bit nu este activ (Nwrite blocat)
iar CB este înc|rcat| la VDD de c|tre Pprecharge. Pentru citire, linia de selecÛie
R_WL comut| la 1 logic (W_WL = 0, Nwrite blocat) şi pune în conducÛie Npass1;
dac| N este blocat atunci linia BL r|mâne la potenÛialul VDD (echivalent cu
high), altfel N triod| descarc| BL pân| la potenÛialul Vbit (echivalent cu low).
OperaÛia de citire a acestei celule nu asigur| automat şi refresh-ul, adic|
reînc|rcarea capacit|Ûii C, ca în cazul celulei din Fig.5.28.
Pentru scriere, linia de selecÛie W_WL comut| la 1 logic (R_WL = 0) şi pune
în conducÛie Npass2. Dac| Data = 0 atunci Nwrite r|mîne blocat iar între CB şi C
are loc un transfer de sarcin| care produce o uşoar| sc|dere a potenÛialului pe
linia BL şi o creştere a potenÛialului v pân| aproape de VDD - VTn. Altfel, dac|
Data = 1 atunci Nwrite conduce ca triod| şi pune la 0 V linia BL; C se descarc|
prin Npass2 iar v scade sub pragul VTn şi blocheaz| tranzistorul N.
OperaÛia de refresh se realizeaz| mai complicat, printr-o operaÛie compus| şi
Circuite Logice SecvenÛiale Sincrone 279

anume o secvenÛ| citire-salvare-scriere; toate celulele conectate la aceeaşi


pereche de linii de selecÛie R_WL şi W_WL sunt refresh-ate în paralel. Fiecare
linie de bit trebuie s| fie conectat| la câte un latch, eventual prin intermediul
amplificatoarelor de bit. Ansamblul de latch-uri asociate liniilor de bit
formeaz| un registru cu înc|rcare paralel| în care se face salvarea temporar|
a informaÛiilor din celulele aflate în faza de refresh. Citirea şi scrierea dintr-o
secvenÛ| de refresh nu sunt operaÛii propriuzise de citire şi scriere în sensul c|
datele aferente acestora nu sunt neap|rat transmise sau recepÛionate în/din
exteriorul circuitului de memorie. Rezult| c| relaÛiile 5.44 trebuie “ajustate”
astfel încât s| includ| şi citirea/scrierea din fazele de refresh.
Fie Rrefresh şi Wrefresh dou| semnale periodice, generate în interiorul circuitului
de memorie, prin intermediul c|rora se realizeaz| refresh-ul. Expresiile logice
5.44 se modific| astfel:
R_WL = (R + Rrefresh) ·WL
(5.45)
W_WL = (W + Wrefresh) ·WL.
Generarea semnalelor periodice Rrefresh şi Wrefresh pentru toate liniile din matricea
de memorie se poate face cu un registru de deplasare cu 2·2n ieşiri (bistabili),
dup| cum se arat| în figura de mai jos.

Fig.5.31 Generarea semnalelor Rrefresh şi Wrefresh

Semnalul de ceas nu a fost reprezentat; perechile de ieşiri 1, 2, ..., 2n se


asociaz| cu semnalele WL1, WL2, ..., WL2n (Fig.5.1). NotaÛia rsh este o
prescurtare pentru refresh. Registrul de deplasare cu reacÛie din Fig.5.31
realizeaz| rotirea secvenÛei binare 100...0 de la dreapta la stânga. Pentru fiecare
linie de celule din matricea de memorie întâi se activeaz| Rrefresh şi apoi Wrefresh.
Toate cele 2n perechi de semnale R_WL, W_WL (5.45) trebuie s| aib| “forÛ|”
de comand| suficient| pentru a înc|rca şi desc|rca rapid capacit|Ûile relativ
mari ale liniilor de selecÛie.
O schem| logic| de principiu a celulei DRAM cu 3 tranzistoare (3T) care
include detalii de refresh, derivat| din schema desenat| în Fig.5.30, este
280 Cap.5 Circuite de memorie şi logic| programabil|

prezentat| în Fig.5.32. În locul liniei de bit BL se utilizeaz| dou| linii distincte,


Din şi Dout, pentru scriere şi respectiv pentru citire; informaÛia analogic| Dout
este transformat| de amplificatorul de bit al liniei într-un nivel logic valid
Dout_logic.

Fig.5.32 Celul| DRAM 3T cu linii distincte de scriere şi citire

InformaÛia care se va înscrie în celul| are expresia logic|


Din = W·Data + Wrefresh·Dout_logic. (5.46)
Capacit|Ûile CR şi CW ale liniilor de citire şi respectiv de scriere sunt mult mai
mari decât capacitatea C a grilei tranzistorului N; capacit|Ûile liniilor R_WL şi
W_WL nu au fost reprezentate. Diagramele de timp din Fig.5.33 ilustreaz|
calitativ o succesiune de operaÛii standby-refresh-citire-scriere ale celulei
DRAM 3T din Fig.5.32; valoarea logic| iniÛial| este 1.
Refresh-ul celulelor care conÛin 1 logic nu este necesar deoarece capacitatea de
gril| C se menÛine desc|rcat| oricât de mult timp; efectuarea operaÛiei nu poate
fi îns| condiÛionat|, Ûinând cont c| se efectueaz| în paralel pentru toate celulele
conectate la aceleaşi linii de selecÛie R_WL şi W_WL.
O celul| de memorie cu o structur| mai simpl| decât a celor descrise
anterior, atât ca num|r de componente cât şi ca num|r de conexiuni, este celula
DRAM-CMOS 1T cu schema desenat| în Fig.5.34; circuitele de acest tip au
densit|Ûi de integrare mult mai mari. Celula conÛine un singur tranzistor de
trecere Npass şi un condensator C care îndeplineşte funcÛia de memorare; C nu
reprezint| o capacitate parazit| ci este realizat ca dispozitiv distinct, având o
durat| de reÛinere a sarcinii mai mare de zeci de ori faÛ| de o capacitate
intrinsec| de gril|. Într-o tehnologie DRAM 1T se urm|reşte obÛinerea
Circuite Logice SecvenÛiale Sincrone 281

performanÛelor cât mai bune pentru condensatoare şi nu pentru tranzistoare,


adic| o capacitate pe unitatea de arie şi o durat| de reÛinere a sarcinii electrice
cât mai mari.

Fig.5.33 Diagrame de funcÛionare a celulei DRAM 3T din Fig.5.32

Fig.5.34 Celul| DRAM - CMOS 1T


282 Cap.5 Circuite de memorie şi logic| programabil|

În Fig.5.35 sunt prezentate secÛiuni transversale prin dou| celule DRAM 1T


care se deosebesc între ele prin modul de realizare a condensatorului C.

Fig.5.35 Structuri fizice de celule DRAM 1T

În standby Npass este blocat (WL = 0 V) iar potenÛialul v scade în timp, dac| este
mai mare de 0 V; pierderea sarcinii electrice din condensatorul C se face prin
curentul Ileakage al joncÛiunii surs|-substrat, polarizat| invers. Linia de bit BL
este preînc|rcat| la o tensiune Vprecharge egal| cu aproximativ jum|tate din
tensiunea de alimentare (VDD/2).
Scrierea valorilor logice 0 şi 1 înseamn| desc|rcarea forÛat| a capacit|Ûii C
(adic| v = 0) şi respectiv înc|rcarea acesteia pân| aproape de valoarea maxim|
VDD - VTn. Pe durata scrierii tranzistorul de trecere Npass se afl| în conducÛie
(WL = VDD); driverul liniei de bit (nereprezentat în Fig.5.34) se activeaz| şi
descarc| CB pân| la 0 V sau încarc| CB pân| la VDD.
Citirea celulei este distructiv|, în sensul c| potenÛialul v este forÛat la o valoare
Circuite Logice SecvenÛiale Sincrone 283

apropiat| de Vprecharge, dup| cum se arat| în continuare. Deşi tehnologic se


urm|reşte obÛinerea unei valori relativ mari pentru capacitatea C, aceasta este
mult mai mic| decât CB. Pe durata citirii WL = VDD iar condensatoarele C şi CB
sunt conectate în paralel; tensiunile acestora, v şi respectiv Vprecharge dinaintea
intr|rii în conducÛie a tranzistorului de trecere, se modific| prin transfer rapid
de sarcin| electric| şi ajung la aceeaşi valoare vBIT (neglijând c|derea de
tensiune pe Npass).

1
vBIT = (C ⋅ v + C B ⋅ Vprecharge ) (5.47)
C + CB
Aceast| valoare “iniÛial|” vBIT, fie mai mic| fie mai mare decât Vprecharge, nu se
p|streaz| în timp. Curentul Ileakage descarc| capacitatea C + CB. Dac| v = 0 V
atunci tranzistorul Nprecharge încarc| C + CB (acÛiune dominant| faÛ| de leakage)
şi vBIT _ Vprecharge; altfel, dac| v > Vprecharge rezult| vBIT ` Vprecharge (Pprecharge fiind
blocat). În ambele cazuri vBIT tinde la Vprecharge şi prin aceasta informaÛia citit|
se pierde cu timpul. Şansele cele mai mari de a “recupera” valoarea logic| din
celul| sunt imediat dup| comutarea liniei de selecÛie WL de la 0 V la VDD, când
diferenÛa dintre vBIT şi Vprecharge este maxim|:

C C
vBIT − Vprecharge = (v − Vprecharge )  (v − Vprecharge ). (5.48)
C + CB CB
DiferenÛa negativ| în relaÛia de mai sus reprezint| 0 iar cea pozitiv| 1 logic.
Nivelul 0 logic produce o sc|dere a potenÛialului liniei BL egal| cu fracÛiunea
C/CB din Vprecharge; nivelul 1 logic produce o creştere de potenÛial, dependent|
îns| de starea capacit|Ûii C. Durata de standby nu afecteaz| 0 logic îns| poate
s| conduc| la erori în cazul 1 logic. Astfel, dac| diferenÛa vBIT - Vprecharge este
apropiat| de zero atunci amplificatorul de pe linia de bit se afl| în dificultate
iar r|spunsul lui este incert; dac| C s-a desc|rcat suficient sub limita Vprecharge
atunci amplificatorul detecteaz| 0 în loc de 1 logic.
Amplificatorul de bit (sense amplifier) trebuie s| sesizeze schimbarea relativ
mic| de potenÛial pe linia BL (100 ÷ 200 mV), s| fac| conversia acesteia în
nivelul logic corect şi apoi s| rescrie celula citit| cu aceast| informaÛie.
Conversia “variaÛie de tensiune - nivel logic” presupune implicit şi salvarea
temporar| într-un registru a nivelului logic obÛinut. Orice operaÛie de citire
trebuie s| fie urmat| de o rescriere a informaÛiei curente, în aceeaşi locaÛie.
Refresh-ul este o operaÛie periodic| relativ independent| de scrierea sau citirea
propriuzise, care sunt operaÛii aleatoare. SecvenÛa citire-salvare-scriere
constituie “structura” operaÛiei de refresh.
Schema desenat| în Fig.5.36 conÛine toate componentele şi semnalele de
comand| necesare efectu|rii operaÛiilor de scriere, citire şi refresh ale celulelor
284 Cap.5 Circuite de memorie şi logic| programabil|

DRAM-CMOS 1T. Matricea format| din celulele de memorie este împ|rÛit|


fizic, în layout, în dou| p|rÛi egale. Accesul la una dintre aceste p|rÛi (stânga
şi respectiv dreapta în schema de mai jos) se face prin intermediul liniilor de
selecÛie Word Lines dar este determinat şi de cel mai semnificativ bit de adres|

Fig.5.36 DRAM 1T - circuite de scriere, citire şi refresh


Circuite Logice SecvenÛiale Sincrone 285

A[a-1]. Astfel, dac| acest bit este 1 atunci o singur| linie WL din partea stâng|
poate fi activ| pe un anumit interval de timp dar nici una din partea dreapt|;
dac| A[a-1] = 0 atunci o singur| linie WL din partea dreapt| poate fi activ| dar
nici una din partea stâng|.
Liniile de bit BL sunt înc|rcate cu acelaşi num|r de celule de memorie, ceea
ce înseamn| c| au sarcini capacitive CB identice. De asemenea, la fiecare linie
de bit este conectat| ieşirea unui buffer (driver) cu trei st|ri care devine activ
pe durata scrierii; toate driverele de scriere din aceeaşi parte a memoriei, stânga
sau dreapta, se activeaz| simultan şi numai în faza de scriere propriuzis| (adic|
atunci când Write = 1).
La fiecare pereche de linii de bit, de exemplu BL1 şi BL2 în Fig.5.36, una din
partea stâng| şi cealalt| din partea dreapt|, se ataşeaz| un circuit de
preînc|rcare la tensiunea Vprecharge şi un amplificator cu reacÛie pozitiv| (latch).
Circuitul de preînc|rcare este format din tranzistoarele Nprecharge1, Nprecharge2 şi
Nequal. În faza de înc|rcare (Precharge = 1) liniile BL1, BL2 sunt scurtcircuitate
de tranzistorul de egalizare Nequal. Dup| dezactivarea comenzii de înc|rcare cele
3 tranzistoare nMOS menÛionate se blocheaz|, liniile BL1 şi BL2 devin
flotante, izolate între ele şi au acelaşi potenÛial Vprecharge.
Amplificatorul este compus din inversoarele 1 şi 2. În standby acest subcircuit
nu este alimentat, aceasta facându-se numai la citire şi refresh. Comenzile
Read/Refresh trebuie s| se activeze dup| faza de înc|rcare, imediat dup| ce o
linie de selecÛie WL comut| la VDD. Una dintre liniile de bit, fie BL2, p|streaz|
potenÛialul Vprecharge (o uşoar| sc|dere are loc datorit| curenÛilor de leakage ai
tranzistoarelor blocate care sunt conectate la acest| linie), care în continuare
va avea rol de referinÛ|. Pe linia BL1 celula selectat|, marcat| în Fig.5.36,
determin| o schimbare de potenÛial de la Vprecharge la vBIT. Activarea uneia dintre
comenzile Read sau Refresh determin| alimentarea amplificatorului (sense
amplifier); acesta intr| în zona liniar| de funcÛionare deoarece ambele
inversoare 1 şi 2 au tensiunile de intrare şi ieşire apropiate de mijlocul
domeniului de alimentare. ReacÛia pozitiv| amplific| tendinÛa de modificare de
pe linia BL1 şi se ajunge într-una din urm|toarele dou| st|ri limit|, ambele
stabile: BL1 = 0 V şi BL2 = VDD sau BL1 = VDD şi BL2 = 0 V. În ambele cazuri
informaÛia din celula selectat| se reface complet, v = 0 V sau v = VDD - VTn,
înainte de comutarea la 0 V a liniei de selecÛie WL. Cu excepÛia scopului
diferit, operaÛiile de citire şi refresh sunt identice din punct de vedere al
proceselor care au loc.
Structura de latch a amplificatorului poate s| reÛin| starea oricât timp dac|
Read + Refresh = High, Write = Low şi Precharge = Low.
Rezult| c| amplificatorul îndeplineşte şi rolul de registru de salvare temporar|
sub form| digital| a informaÛiei accesate; aceast| informaÛie “vizibil|” pe linia
BL1 poate fi preluat| în exteriorul circuitului de memorie.
286 Cap.5 Circuite de memorie şi logic| programabil|

OperaÛia de scriere (Write = 1) nu necesit| preînc|rcarea liniilor de bit şi nici


vreun aport din partea amplificatorului. Pe durata scrierii datelor din exterior
amplificatorul nu este alimentat, îns| contribuie la înc|rcarea capacitiv| a liniei
de bit. Comanda Write = 1 activeaz| toate driverele de scriere buf_if_H din
partea stâng| sau din partea dreapt| iar celulele care urmeaz| s| fie înscrise cu
date din exteriorul circuitului de memorie sunt selectate de linia WL activ|.
Pe toat| durata de funcÛionare a circuitului din Fig.5.36 nu apar conflicte
între sursele de comand| ale unei linii de bit, adic| între driverul de scriere,
amplificator şi tranzistorul nMOS de preînc|rcare, fapt care constituie o
relaxare în proiectarea acestora.
Diagramele de timp din figura urm|toare ilustreaz| calitativ o secvenÛ|
de operaÛii efectuate de celula de memorie marcat| în circuitul din Fig.5.36.

Fig.5.37 Diagrame de funcÛionare a circuitului din Fig.5.36


Circuite Logice SecvenÛiale Sincrone 287

Tranzistoarele Nprecharge1 şi Nprecharge2 în conducÛie aduc liniile de bit BL1, BL2


la potenÛialul Vprecharge fie prin înc|rcarea fie prin desc|rcarea acestora. În locul
tranzistoarelor nMOS Nprecharge1, Nprecharge2 şi Nequal se pot utiliza tranzistoare de
tip pMOS, situaÛie în care comanda Precharge trebuie inversat| logic.
Celulele de memorie conectate la linia “ajut|toare” BL2 nu sunt afectate de
variaÛiile de potenÛial ale acesteia deoarece nici una nu este selectat|.
Din diagramele din Fig.5.37 se observ| c| tranziÛia liniei WL de la 0 la VDD
produce mai întâi creşterea potenÛialului pe linia BL1, de la Vprecharge c|tre vBIT;
linia BL2 r|mâne la Vprecharge. Apoi, tranziÛia de la 0 la VDD a semnalului Read
sau Refresh determin| alimentarea amplificatorului de la sursele de tensiune
VDD şi VSS prin tranzistoarele Pup şi respectiv Ndown, ceea ce va produce o
sc|dere de potenÛial pe linia BL2, în conformitate cu caracteristica de transfer
în tensiune a inversorului 2 (tendinÛa inversorului 1 de a sc|dea potenÛialul pe
linia BL1 este dominat| de acÛiunea inversorului 2). ReacÛia pozitiv| amplific|
aceast| sc|dere şi conduce în final la BL1 = VDD şi BL2 = 0 V.
VariaÛiile tensiunilor v, BL1 şi BL2 în porÛiunea read1/refresh1 a
diagramelor din Fig.5.37 au fost reprezentate în ipoteza simplificatoare c| Pup
şi Ndown intr| simultan în conducÛie şi conecteaz| amplificatorul format din
inversoarele 1 şi 2 la liniile de alimentare VDD şi VSS la acelaşi moment. În
realitate exist| un anumit decalaj între momentele de intrare în conducÛie ca
triode, ale tranzistoarelor Pup şi Ndown. Dup| schema din Fig.5.36 primul care
intr| în conducÛie este Ndown. Pân| la intrarea în conducÛie a lui Pup,
tranzistoarele nMOS din inversoarele 1 şi 2 produc efecte pe liniile BL1 şi BL2
dup| cum se poate constata din schema simplificat|, desenat| în figura de mai
jos. Capacit|Ûile intrinseci de gril| ale tranzistoarelor sunt mici faÛ| de CB, au
aceeaşi valoare şi nu dezechilibreaz| liniile BL1, BL2.

Fig.5.38 Amplificatorul (sense amplifier) alimentat numai la VSS

Ambele linii de bit încep s| se descarce; BL2 se descarc| cu o vitez| iniÛial|


ceva mai mare decât BL1 deoarece la început tranzistorul nMOS din inv2 este
comandat aproximativ cu vBIT (> Vprecharge) iar cel din inv1 este comandat cu
Vprecharge. DiferenÛa de potenÛial BL1 - BL2, egal| iniÛial cu vBIT - Vprecharge, nu se
p|streaz| în timp ci creşte pân| la intrarea în conducÛie a tranzistoarelor pMOS
288 Cap.5 Circuite de memorie şi logic| programabil|

din inv1 şi inv2, ceea ce înseamn| c| viteza de desc|rcare a liniei BL2 r|mâne
mai mare decât viteza de desc|rcare a liniei BL1. Caracteristica de transfer în
tensiune a unui inversor CMOS este desenat| în Fig.5.39.

Fig.5.39 Caracteristica Vout - Vin a inversorului CMOS

Punctele A, A* şi B, B* corespund caracteristicilor de transfer ale inv1 şi


respectiv inv2 (s-a considerat c| Vprecharge – VDD/2); A şi B reprezint| momentul
de intrare în conducÛie a tranzistorului Ndown. Când intr| în conducÛie Pup, A şi
B se afl| în poziÛiile A* şi respectiv B*. La intrarea în conducÛie a
tranzistoarelor pMOS din inv1 şi inv2 tensiunile surs|-gril| ale acestora sunt
diferite; cel din inv1 are tensiune de comand| mai mare. PotenÛialul liniei BL1
nu mai scade ci începe s| creasc| iar cel al liniei BL2 continu| s| scad|,
ambele cursuri fiind accelerate de reacÛia pozitiv|.
Tensiunilor v, BL1 şi BL2 din porÛiunea read1/refresh1 a diagramelor din
Fig.5.37 sunt reprezentate la o scar| mai mare în Fig.5.40; variaÛiile acestor
tensiuni sunt uşor modificate, în conformitate cu ipoteza c| amplificatorul se
conecteaz| succesiv la liniile de alimentare, mai întâi la VSS şi apoi la VDD.
Durata operaÛiei de citire sau de refresh este relativ mic|, astfel c| aportul
curenÛilor de leakage la sc|derea potenÛialelor v, BL1 şi BL2 nu este luat în
considerare. Momentele la care amplificatorul este conectat la VSS şi VDD sunt
marcate în Fig.5.40 prin numele tranzistoarelor Ndown şi respectiv Pup.
OservaÛie: Dac| intervalul de timp dintre momentele de intrare în conducÛie a
tranzistoarelor Ndown şi Pup este prea mare (ipotez| nerealist|) atunci potenÛialul
liniei BL2 poate s| coboare sub pragul VTn, caz în care tranzistorul nMOS din
inv1 se blocheaz| iar potenÛialul liniei BL1 se opreşte din sc|dere şi r|mâne
relativ constant (curenÛii de leakage continu| s| descarce linia BL1, dar cu
vitez| mic|). Tranzistorul nMOS din inv2 continu| s| descarce linia BL2 c|tre
0 V. Conectarea amplificatorului la tensiunea VDD prin Pup determin| intrarea
în conducÛie a tranzistorului pMOS din inv1, care încarc| linia BL1 c|tre VDD.
Circuite Logice SecvenÛiale Sincrone 289

Linia BL2 continu| s| se descarce c|tre 0 V. În acest scenariu de comutare a


latch-ului, reacÛia pozitiv| nu are nici un aport. Din acest raÛionament nu
rezult| vreo restricÛie cu privire la momentul de intrare în conducÛie a
tranzistorului Pup, în sensul prevenirii apariÛiei erorilor.

Fig.5.40 OperaÛiile read1/refresh1 ale circuitului din Fig.5.36

Densitatea de integrare a memoriile DRAM 1T este limitat| de


condensatorul din structura celulei, numit| şi DRAM 1T-1C (un tranzistor - un
condensator); capacitatea trebuie s| aib| valori minime de ordinul zeci de fF.
Scalarea tranzistoarelor nu conduce automat şi la reducerea ariei ocupate de o
celul| deoarece condensatoarele de tip stack, trench (Fig.5.35) sau de orice alt
tip nu se supun regulilor de scalare; prin reducerea dimensiunilor fizice ale
unui condensator nu se poate conserva sau m|ri capacitatea acestuia ci
dimpotriv|, capacitatea se micşoreaz|.
În tehnologiile sub 45 nm soluÛiile de creştere a densit|Ûii de integrare au
290 Cap.5 Circuite de memorie şi logic| programabil|

la baz| eliminarea condensatorului din structura celulei. Aceast| nou| celul|


de memorie este numit| capacitorless-DRAM şi conÛine un singur dispozitiv
activ. Principiile de funcÛionare ale unor celule capacitorless-DRAM sunt
prezentate în continuare.
Tranzistorul PDSOI (partially depleted SOI) poate fi utilizat ca celul| de
memorie, f|r| sprijinul vreunui dispozitiv electronic auxiliar. În Fig.5.41 sunt
ilustrate calitativ procesele fizice din structura tranzistorului PDSOI asociate
cu operaÛiile de baz| ale unei celule de memorie DRAM.

Fig.5.41 Tranzistorul nMOS-PDSOI - celul| capacitorless DRAM

OperaÛiile de scriere şi de citire se fac prin aplicarea tensiunilor indicate în


figura de mai sus, astfel:
- la scrierea valorii logice 1 curentul de electroni dintre surs| şi dren| (care
Circuite Logice SecvenÛiale Sincrone 291

circul| prin canalul n de la suprafaÛa semiconductorului) genereaz| goluri în


zona drenei unde câmpul electric este intens, fenomen numit ionizare prin
impact;
Golurile generate se acumuleaz| în bulk-ul flotant (în partea de jos, c|tre
oxidul de siliciu) şi au ca efect reducerea tensiunii de prag VT a tranzistorului.
- la scrierea valorii logice 0 golurile din bulk (body) sunt “aspirate” de c|tre
drena tranzistorului;
Curentul de electroni din canal (inversion layer) îşi schimb| sensul. Lipsa
golurilor din bulk-ul flotant restabileşte valoarea “normal|” a tensiunii de prag.
- citirea const| în m|surarea indirect| a tensiunii de prag, prin intermediul
curentului de dren|.
Tensiunea de prag VT este mai mic| atunci când sunt acumulate goluri în bulk
(body). Curentul “citit” în starea 1 logic este mai mare decât curentul în starea
0 logic, dup| cum se poate observa în figura urm|toare. La citire tranzistorul
nMOS funcÛioneaz| în regiunea de triod|.

Fig.5.42 Caracteristica ID-VGS a tranzistorului nMOS-PDSOI

OperaÛia de citire nu este distructiv| deoarece curentul de dren| este un curent


de suprafaÛ| şi nu afecteaz| sarcina stocat| (sau nu) în bulk.
În standby potenÛialul grilei (linia WL) şi al drenei (linia BL) se fixeaz| la 0 V.
Refresh-ul este necesar datorit| fenomenelor de generare-recombinare din bulk,
care duc la dispariÛia golurilor acumulate la scrierea valorii logice 1. Durata de
retenÛie a golurilor din bulk sau de p|strare a st|rii 1 de c|tre tranzistorul
PDSOI (zeci-sute de milisecunde) este mai mic| cu 2 - 3 ordine de m|rime faÛ|
de durata de p|strare a st|rii 1 de c|tre o celul| DRAM 1T-1C (100 secunde).
În locul tranzistorului nMOS din structura PDSOI se poate utiliza ca
dispozitiv de memorare tranzistorul bipolar npn parazit, dup| cum se arat| în
Fig.5.43. Golurile se genereaz| la scrierea valorii logice 1 în regiunea baz|-
colector şi sunt apoi atrase la suprafaÛa semiconductorului de tensiunea
negativ| aplicat| pe gril|. Curentul de colector este unul de volum. La scrierea
valorii logice 0 nu se genereaz| goluri în exces în regiunea de baz| (bulk). La
292 Cap.5 Circuite de memorie şi logic| programabil|

citire apare o diferenÛ| între valorile curentului de colector corespunz|toare


celor dou| st|ri (0 sau 1). Curent mai mare se obÛine atunci când în regiunea
de baz| exist| goluri în exces (starea 1); curentul “citit” în starea 0 este mult
mai mic şi se datoreaz| leakage-ului joncÛiunii baz|-colector. OperaÛia de citire
nu este distructiv| îns| refresh-ul st|rii 1 este necesar datorit| pierderii în timp
a golurilor prin recombinare. În standby potenÛialul grilei coboar| sub -1 V iar
cel de colector se fixeaz| la 0 V.
Utilizarea tranzistorului BJT din structura PDSOI, pentru a obÛine funcÛia
de memorare, are dou| avantaje faÛ| de utilizarea tranzistorului MOS:
- golurile generate în bulk-ul flotant la scrierea valorii 1 sunt reÛinute mai mult
timp la suprafaÛa semiconductorului de c|tre tensiunea de gril|;
Capacitatea dintre gril| şi suprafaÛa semiconductorului este mai mare decât
capacitatea dintre gril| şi extremitatea inferioar| a bulk-ului p. AcÛiunea de

Fig.5.43 Tranzistorul npnBJT-PDSOI - celul| capacitorless DRAM


Circuite Logice SecvenÛiale Sincrone 293

refresh se poate face la intervale de timp mai mari.


- raportul dintre curenÛii de colector (curenÛi de volum) rezultaÛi la citire în
starea 1 şi respectiv în starea 0 este mult mai mare decât raportul curenÛilor de
dren| (curenÛi de suprafaÛ|).
Acest lucru implic| o durat| de citire mai mic| şi permite reducerea
dimensiunilor structurii, adic| creşterea densit|Ûii de integrare.
Din figurile 5.41 şi 5.43 se constat| c| toate regimurile de operare ale
celulei capacitorless DRAM (citire, scriere 0, scriere 1 şi refresh) se obÛin cu
ajutorul a dou| semnale (tensiuni) de comand|, WL şi BL. InformaÛia obÛinut|
la citire este curentul de dren| sau de colector; acest curent urmeaz| s| fie
convertit într-o tensiune cu nivel logic valid în cadrul amplificatorului de bit.
Creşterea duratei de retenÛie a golurilor la suprafaÛa semiconductorului
(Fig.5.43) se poate face prin modificarea structurii fizice a tranzistorului, dup|
cum se arat| în Fig.5.44.

Fig.5.44 Tranzistor PDSOI cu durat| crescut| de retenÛie a golurilor

Regiunea p de baz| (bulk) slab dopat| are o form| convex|, ridicându-se


deasupra regiunilor n+ de emitor şi colector. Golurile atrase de potenÛialul
negativ aplicat pe gril| la scrierea valorii logice 1 au o durat| de viaÛ| mai mare
cu un ordin de m|rime în comparaÛie cu structura plan| din Fig.5.43.
O alt| posibilitate de a mai creşte durata de retenÛie a golurilor const| în
utilizarea SiGe în zona convex|, material semiconductor caracterizat de un
bandgap (banda interzis| din diagrama de benzi energetice) mai mic decât al
siliciului. Barierele de potenÛial ale joncÛiunilor E-B şi C-B cresc şi reduc
num|rul de goluri din regiunea p de baz| care le traverseaz|.
Alte dou| dispozitive utilizate ca celule capacitorless DRAM sunt
desenate în Fig.5.45. FuncÛionarea tranzistorului nMOS cu dou| grile, ca celul|
de memorie, este asem|n|toare cu accea a tranzistorului FDSOI (fully depleted
SOI); la echilibru, toat| regiunea de bulk este golit| de purt|tori iar potenÛialul
în tot volumul (în orice punct) este 0 V.
Memorarea în cazul celulei din Fig.5.45b exploateaz| caracteristica de transfer
curent-tensiune în form| de “S” a tiristorului. Raportul dintre curenÛii Ion şi Ioff,
294 Cap.5 Circuite de memorie şi logic| programabil|

obÛinuÛi la citirea st|rilor 1 şi respectiv 0, poate s| dep|şeasc| 106.

Fig.5.45 Celule capacitorless DRAM

5.4 Circuite logice programabile

Circuitele integrate digitale de complexitate funcÛional| şi implicit


structural| foarte mare (SoC - System on Chip) pot fi concepute fie pentru
scopuri sau aplicaÛii particulare strict definite, fie pentru uz general sau
universal. Prima categorie de circuite poart| numele ASIC (Application
Specific Integrated Circuit). Circuitele de uz general pot fi programate sau
reconfigurate pentru o gam| larg| de aplicaÛii; un exemplu este FPGA (Field
Programmable Gate Array). Ambele categorii de circuite pot fi proiectate prin
trei metode (design flow) care vor fi descrise sumar în continuare.
1). Full-custom design este un flow utilizat în proiectarea sistemelor digitale,
analogice şi mixte (analog-digitale) în care fiecare bloc este conceput la nivel
de tranzistor; toate dispozitivele elementare utilizate (tranzistoare MOS, BJT,
diode, rezistoare, condensatoare etc.) se dimensioneaz| în funcÛie de necesit|Ûi.
La construirea layout-ului de bloc sau de subcircuit se utilizeaz| view-urile de
layout parametrizate ale dispozitivelor elementare (dac| sunt disponibile) şi
layer-ele tehnologice de baz|; orice layout-ul se poate ajusta şi optimiza
manual. De asemenea, pot fi incluse blocuri proiectate şi verificate anterior.
Aceast| metod| de proiectare se caracterizeaz| printr-un layout foarte compact
şi performanÛe de vitez| superioare altor metode. În schimb, durata de
Circuite Logice SecvenÛiale Sincrone 295

proiectare este relativ mare deoarece nici una dintre m|ştile tehnologice
(photolithographic masks) nu poate s| fie fabricat| în avans, înainte ca
proiectul (top layout) s| fie terminat. Proiectantul trebuie s| aib| cunoştinÛe
despre procesul tehnologic şi de fizica semiconductorului. Mai mult, sunt şanse
ca circuitele fabricate s| nu funcÛioneze conform aştept|rilor.
2). Standard-cell design este un flow de proiectare în care se utilizeaz| celule
digitale predefinite (model HDL, schem| electric|, layout, parametrii electrici
etc.) şi care conÛine urm|toarele etape de baz|:
- definirea funcÛiilor circuitului, arhitecturii formale şi specificaÛiilor electrice;
- descrierea sau modelarea circuitului utilizând un limbaj HDL (Hardware
Description Language) precum Verilog sau VHDL;
Acest| etap| se mai numeşte RTL (Register Transfer Language) design.
- verificarea funcÛional| sau validarea modelului HDL;
În acest scop se utilizeaz| instrumente software de simulare logic| şi/sau de
verificare formal| sau alte proceduri.
- sinteza logic|;
În aceast| etap| modelul text HDL este transformat într-un netlist (este tot o
form| de text) care conÛine celule standard şi conexiunile dintre acestea.
Celulele (de exemplu porÛi AND, NAND, OR, NOR, INV, XOR, XNOR,
macroporÛi AOI - AndOrInvert şi OAI - OrAndInvert, HA - HalfAdder, FA -
FullAdder, MUX/DEMUX) sunt luate dintr-o bibliotec| standard furnizat| de
fabric|.
- generarea layout-ului (cu software de plasare, routare, optimizare);
- extragerea elementelor RC parazite din layout şi determinarea timpilor de
întârziere;
- evaluarea performanÛelor (static timing analysis);
- DRC (Design Rule Checking) şi LVS (Layout versus Schematic).
Acest flow de tip top-down implic| în general mai multe iteraÛii în proiectare,
adic| reveniri la etapele anterioare pentru diverse ajust|ri/optimiz|ri.
Utilizarea celulelor standard conduce la obÛinerea unui layout compact, cu o
densitate de funcÛii implementate pe unitatea de arie relativ mare. De
asemenea, şansele ca circuitele fabricate s| funcÛioneze conform aştept|rilor
sunt foarte mari, aceleaşi celule fiind utilizate anterior în foarte multe proiecte.
În afar| de celulele standard pot fi incluse în proiect şi blocuri verificate/testate
cum ar fi SRAM şi IP-uri (Intellectual Property Core).
Durata de proiectare este relativ mare deoarece, la fel ca în metoda full-custom,
nici una dintre m|ştile tehnologice nu poate s| fie fabricat| înainte ca layout-ul
s| fie terminat şi verificat.
3). (Masked) Gate-array design (sau semi-custom design), este un flow de
proiectare în care tranzistoarele şi alte dispozitive elementare sunt predefinite
şi chiar fabricate pe chip-urile de siliciu în avans; wafer-ele conÛinând aceast|
296 Cap.5 Circuite de memorie şi logic| programabil|

arhitectur| (neterminat| înc|) sunt Ûinute în stoc. Ulterior, un proiect care


“încape” în structura prefabricat| va defini doar m|ştile de metalizare iar
procesul tehnologic îşi poate relua cursul. Nu toate dispozitivele prefabricate
vor fi utilizate într-un proiect dat; gradul de utilizare se schimb| de la proiect
la proiect. O masc| de metalizare conÛine informaÛii referitoare la conexiunile
dintre componente şi nu poate fi executat| decât dup| terminarea proiectului.
Chiar dac| arhitectura predefinit| a chip-ului nu s-ar fabrica în avans, toate
m|ştile aferente sunt cunoscute şi pot fi realizate dinainte. De aici rezult| o
reducere considerabil| a duratei de proiectare-fabricare sau de producÛie.
Din clasa de circuite logice programabile sau reconfigurabile fac parte
PLA, PAL, CPLD şi FPGA; acestea vor fi descrise în paragrafele urm|toare.

5.4.1 Circuite PLA şi PAL


Circuitele PLA (Programmable Logic Array) au ap|rut ca o soluÛie
alternativ| la implementarea sistemelor mari de funcÛii logice combinaÛionale,
realizat| iniÛial cu ajutorul memoriilor de tip PROM. Un PLA se caracterizeaz|
printr-un num|r mare de intr|ri-ieşiri şi are structura de principiu desenat| în
Fig.5.46. FuncÛiile implementate au forma generic| Σ(Π).

Fig.5.46 Arhitectura PLA AND-OR

Matricea AND realizeaz| toate produsele logice (mintermeni) necesare în


expresiile funcÛiilor combinaÛionale de ieşire. Num|rul acestor produse este
foarte mare îns| nu sunt realizate toate combinaÛiile de variabile posibile, ca în
cazul memoriilor PROM; în schimb, num|rul variabilelor de intrare poate fi
mult mai mare decât num|rul biÛilor de adres|. De asemenea, viteza de operare
este mai mare în comparaÛie cu implement|rile axate pe circuite PROM.
Matricea OR genereaz| funcÛiile dorite prin sum|ri logice de mintermeni.
Pentru a obÛine un layout compact şi cu arie cât mai mic|, topologia la nivel de
Circuite Logice SecvenÛiale Sincrone 297

tranzistor utilizat| în cele dou| matrice AND şi OR nu este CMOS standard ci


una apropiat| de pseudo-NMOS. Un exemplu este ilustrat în Fig.5.47 (bulk-
urile tranzistoarelor nMOS şi pMOS sunt conectate implicit la VSS şi la VDD).
Pentru a reduce puterea consumat|, ambele matrice NOR sunt conectate
succesiv la liniile de alimentare. În faza de preînc|rcare (Precharge = 0)
tranzistoarele pMOS încarc| la VDD liniile care ies din matricele NOR, adic|
Σ1 ÷ Σ6 şi respectiv F, G; capacit|Ûile acestor linii nu au fost reprezentate în
Fig.5.47. În acest timp tranzistoarele nMOS comandate de semnalul Precharge
sunt blocate iar variabilele de intrare a, b, c, d, e pot s|-şi modifice valorile; de

Fig.5.47 PLA de tip NOR-NOR


298 Cap.5 Circuite de memorie şi logic| programabil|

asemenea, ieşirile F şi G înc|rcate la VDD nu depind înc| de valorile logice ale


intr|rilor a, b, c, d, e. La momentul tranziÛiei pozitive a semnalului Precharge
toate variabilele trebuie s| aib| valori stabile; apoi, când Precharge = 1
tranzistoarele pMOS se blocheaz| iar cele nMOS care au sursele conectate la
VSS determin| valorile de la ieşirile matricelor, în conformitate cu expresiile
logice urm|toare:
Σ1 = a + c̄ + d + ē
Σ2 = ā + b + d̄ + e
Σ3 = b + c + d̄
Σ4 = b̄ + d + ē
Σ5 = ā + c̄ + d̄
Σ6 = b̄ + c + d + e
F = Σ1 + Σ3 + Σ4 + Σ6 = Π(Σ) =
= (a + c̄ + d + ē)(b + c + d̄)(b̄ + d + ē)( b̄ + c + d + e)
G = Σ2 + Σ5 + Σ6 = Π(Σ) =
= (ā + b + d̄ + e)(ā + c̄ + d̄)(b̄ + c + d + e).
În faza de evaluare (Precharge = 1) sunt desc|rcate la 0 V numai liniile ale
c|ror valori (dependente de variabilele a, b, c, d, e) sunt 0 logic.
Arhitectura PLA NOR-NOR implementeaz| funcÛiile logice de ieşire în forma
Π(Σ) şi nu Σ(Π); altfel spus, structura de tip NOR-NOR este echivalent| cu cea
de tip OR-AND.
Circuitele PLA NOR-NOR sunt foarte rapide, viteza lor de operare fiind
limitat| în principal de capacit|Ûile liniilor lungi care traverseaz| cele dou|
matrice, Σ1 ÷ Σ6 şi respectiv F, G. Capacit|Ûile liniilor comandate de variabilele
de intrare şi de complementele acestora sunt înc|rcate la VDD sau desc|rcate la
0 V înaintea fazei de evaluare; bufferele liniilor a, b, c, d, e nu au fost
reprezentate în Fig.5.47. Este posibil ca şi ieşirile F, G s| aib| nevoie de
buffere. Între tranzistoarele nMOS şi pMOS utilizate pentru înc|rcarea şi
desc|rcarea liniilor Σ1 ÷ Σ6 şi F, G nu apar conflicte, adic| nu pot fi simultan
în conducÛie, lucru care se datoreaz| comenzii în antifaz| ale acestora f|cute
de semnalul Precharge.
Exist| dou| abord|ri distincte în conceperea şi implementarea unui
circuit de tip PLA:
- se implementeaz| strict numai funcÛiile necesare dintr-o aplicaÛie particular|;
În aceast| abordare se evit| redundanÛa pentru a se reduce aria ocupat|.
Suplimentar, în matricele NOR sunt prev|zute numai acele tranzistoare nMOS
Circuite Logice SecvenÛiale Sincrone 299

care contribuie la expresiile logice de ieşire. Schema din Fig.5.47 corespunde


acestei situaÛii.
- se introduce în structura PLA, deliberat, o anumit| redundanÛ|.
Pe de o parte se dimensioneaz| cele dou| matrice NOR pentru un num|r maxim
de variabile şi un num|r maxim de funcÛii care pot fi implementate; aceste
numere maxime sunt fixate în funcÛie de gama de aplicaÛii care trebuie s| fie
acoperit|. Pe de alt| parte sunt prez|zute tranzistoare nMOS în toate punctele
de intersecÛie dintre liniile şi coloanele matricelor. Toate m|ştile tehnologice
necesare fabric|rii acestor tranzistoare, pân| la Metal_1 inclusiv, pot fi dinainte
realizate. Numai o parte dintre tranzistoarele din punctele de intersecÛie linie-
coloan|, în funcÛie de aplicaÛie, urmeaz| s| fie conectate la liniile şi coloanele
matricelor; m|ştile de metalizare corespunz|toare acestor conexiuni pot fi
realizate numai dup| terminarea proiectului.
Circuitele PAL (Programmable Array Logic) au multe elemente comune
cu cele de tip PLA şi pot fi considerate extensii ale acestora. Matricea de
intrare, la fel ca aceea dintr-un PLA, implementeaz| un num|r mare de sume
sau de produse logice; num|rul variabilelor de intrare este de asemenea mare.
Num|rul de funcÛii logice implementate în matricea de ieşire este limitat, îns|
structura include celule noi precum porÛi XOR, MUX-uri, latch-uri şi bistabili.
Ca urmare, circuitele PAL pot s| realizeze şi funcÛii logice secvenÛiale, pe
lâng| cele combinaÛionale; viteza de operare este relativ mare.
În Fig.5.48 sunt prezentate câteva elemente dintr-un circuit PAL. NotaÛiile NS
şi CS au semnificaÛiile NextState şi respectiv CurrentState. Variabilele de stare
pot fi semnale de ieşire din PAL şi/sau pot fi folosite ca intr|ri în oricare din
cele dou| matrice NOR. Matricea de ieşire implementeaz| atât funcÛii
combinaÛionale cât şi funcÛii secvenÛiale.

Fig.5.48 Circuit PAL


300 Cap.5 Circuite de memorie şi logic| programabil|

FuncÛiile logice care nu se preteaz| la o implementare NOR-NOR din diverse


motive sunt realizate cu dispozitive şi componente separate de cele dou|
matrice. Semnalele de ceas şi cele de iniÛializare asincron| se routeaz| separat,
prin exteriorul matricelor.
Circuitele PLA şi PAL sunt cu adev|rat programabile numai dac| conÛin
redundanÛ| suficient|; o flexibilitate funcÛional| mare este determinat| de un
grad mare de redundanÛ| structural|. OperaÛia de programare se realizeaz| prin
intermediul m|ştilor de metalizare, care stabilesc conexiunile dintre
dispozitivele predefinite (Masked Gate-Array design flow).
ObservaÛie: Calitatea de circuit programabil sau reconfigurabil nu se obÛine
numai prin metoda de proiectare Masked Gate-Array; aceast| tehnic| este
specific| şi memoriilor ROM/PROM. Programarea se poate face şi cu celule
EPROM, EEPROM, Flash sau SRAM în rolul de comutator (switch) şi este
accesibil| flow-urilor Full-custom şi Standard-cell.

5.4.2 CPLD
Circuitele CPLD (Complex Programmable Logic Device) sunt la fel de
rapide ca cele de tip PAL dar sunt mult mai complexe. Un CPLD conÛine mai
multe PAL-uri şi este proiectat şi fabricat cu aceleaşi tool-uri soft şi respectiv
în aceleaşi tehnologii ca şi un PAL. Arhitectura CPLD este reprezentat| în
figura de mai jos. Blocul funcÛional FB este un PAL; num|rul acestora nu este
limitat la 8. Fiecare PAL poate s| fie configurat/reconfigurat pentru a îndeplini
un set de funcÛii logice combinaÛionale şi secvenÛiale în mod independent faÛ|

Fig.5.49 Arhitectura CPLD


Circuite Logice SecvenÛiale Sincrone 301

de celelalte blocuri funcÛionale. Blocurile I/O (input/output) conÛin celule


bidirecÛionale. Matricea de conexiuni este alc|tuit| din reÛele de linii
(perpendiculare în layout) şi comutatoare programabile amplasate în fiecare
punct de intersecÛie a liniilor.
O celul| I/O are structura desenat| în Fig.5.50. Bufferul buf_if_0 asigur|
nivelul de tensiune şi puterea de comand| necesare la ieşirea din chip.

Fig.5.50 Celul| I/O

Comutatoarele programabile (switch-urile), prin intermediul c|rora se


realizeaz| routarea în interiorul matricei de conexiuni şi configurarea blocurilor
funcÛionale, pot s| fie realizate în mai multe moduri. O variant| de switch,
compus dintr-o celul| de memorie SRAM şi un tranzistor, este prezentat| în
Fig.5.51. Cele dou| linii perpendiculare sunt conectate electric între ele dac|
celula SRAM este înc|rcat| cu 1 logic.

Fig.5.51 Structur| de switch programabil

Comutatorul programabil din figura de mai sus este unul volatil, caracteristic|
“moştenit|” de la celula SRAM. Celulele de memorie EEPROM şi FLASH
sunt switch-uri programabile nevolatile. Un exemplu de switch nevolatil dar
programabil numai o singur| dat| este structura antifuse din Fig.5.52 (FOX =
Field Oxide = SiO2). În stare iniÛial| sau neprogramat| rezistenÛa dintre liniile
de polisiliciu şi difuzie n+ este mare. Dielectricul dintre aceste linii este un
302 Cap.5 Circuite de memorie şi logic| programabil|

sandwich de tip ONO (oxid-nitrur|-oxid). Programarea const| în transformarea


dielectricului într-un material conductor, lucru care se produce prin aplicarea
unei tensiuni relativ mari între cele dou| linii.

Fig.5.52 Structur| antifuse

Structuri de tip antifuse se pot obÛine şi între dou| linii de metal, de exemplu
M1-M2. Ca dielectric se utilizeaz| siliciu amorf, care în faza de programare se
transform| în polisiliciu (material conductor).
Flow-ul de configurare a unui CPLD este desenat în Fig.5.53. Rezultatul

Fig.5.53 Flow de configurare CPLD


Circuite Logice SecvenÛiale Sincrone 303

const| într-un fişier care conÛine în principal biÛii de programare a switch-


urilor. EcuaÛiile obÛinute dup| sinteza logic| sunt prelucrate astfel încât s| se
respecte constrângerile de întârziere impuse semnalelor de intrare/ieşire dar şi
posibilit|Ûile de implementare limitate de structura intern| a CPLD. Aceast|
activitate de “proiectare cu CPLD” nu necesit| cunoştinÛe de fizica
semiconductorului sau de tehnologia de fabricare a circuitelor, în contrast cu
proiectarea CPLD care este o activitate mult mai complicat| şi costisitoare.
Un CPLD poate s| îndeplineasc|, dup| configurare, funcÛiile unor
sisteme digitale complexe de genul controller (cash, LAN, grafic). De regul|,
opÛiunea pentru CPLD este determinat| de num|rul necesar de bistabili specific
aplicaÛiei care urmeaz| s| fie implementat|; acest num|r nu trebuie s| fie prea
mare. Un CPLD în care toate comutatoarele pot fi programate/reprogramate în
timpul funcÛion|rii normale a sistemului (din care face parte CPLD) poate s|-şi
modifice comportarea în timp, îndeplinind succesiv rolurile mai multor
subsisteme. De exemplu, schimbarea dinamic| a protocolului în comunicaÛii
şi transmisii de date.

5.4.3 FPGA
Circuitele FPGA (Field Programmable Gate Array) au o structur|
diferit| faÛ| de PLA, PAL sau CPLD; organizarea structural| a FPGA este
matriceal|, caracteristic| ce este specific| ASIC. Din acest motiv orice FPGA
care conÛine resurse suficiente poate fi configurat uşor ca prototip pentru un
ASIC. Cu ajutorul FPGA se pot valida şi testa fizic proiecte ce urmeaz| s| fie
implementate ca ASIC. Spre deosebire de CPLD, num|rul de intr|ri în FPGA
este mult mai mic îns| num|rul bistabililor disponibili este semnificativ mai
mare. Switch-urile programabile utilizate în FPGA sunt fie de tip SRAM -
tranzistor nMOS (Fig.5.51) fie antifuse de tip M1- siliciu amorf - M2.
Arhitectura FPGA este desenat| în Fig.5.54. Structura conÛine o matrice de
blocuri logice secvenÛiale reconfigurabile LB (logic block), celule I/O
reconfigurabile şi canale de routare. Switch-urile programabile sunt amplasate
atât în punctele de intersecÛie a liniilor metalice din canalele de routare cât şi
în interiorul blocurilor LB. ReÛelele de conexiuni care traverseaz| chip-ul în
ambele direcÛii perpendiculare, sunt formate din trei categorii de linii: scurte,
medii şi lungi; acest detaliu nu este reprezentat în Fig.5.54. Conectarea
blocurilor LB la liniile lungi se face prin buffere cu trei st|ri. Anumite linii
lungi, numite linii globale de ceas, sunt special proiectate pentru a avea
impedanÛ| mic|, cuplaje capacitive reduse şi implicit timpi de propagare mici;
bufferele de ceas sunt distribuite uniform în structura circuitului.
Structura de principiu a unei celule I/O este desenat| în Fig.5.55. Bus-ul
global este format din linii lungi iar cel local din linii scurte şi medii. Bufferul
de ieşire buf_if_0 are putere de comand| reglabil| prin intermediul curentului
304 Cap.5 Circuite de memorie şi logic| programabil|

Fig.5.54 Arhitectura general| a FPGA

Fig.5.55 Celul| I/O reconfigurabil|


Circuite Logice SecvenÛiale Sincrone 305

de polarizare. Semnalele transmise la ieşire sunt generate local, în apropierea


padului, de celula Exit cell. Semnalele de intrare pot fi translate din TTL în
CMOS sau invers şi apoi prelucrate de celula Entry cell înainte de a ajunge la
destinaÛia mai apropiat| sau mai dep|rtat| de pad.
Un subcircuit de baz| care se utilizeaz| la nivelul blocurilor LB pentru
implementarea funcÛiilor combinaÛionale cu num|r mic de variabile poart|
numele LUT (look-up table). Un exemplu este prezentat în figura de mai jos.

Fig.5.56 Structura LUT de 3 variabile

Cu acest LUT3 poate fi implementat| oricare din cele 28 = 256 funcÛii de 3


variabile. FuncÛia implementat| este definit| de conÛinutul registrului format
din cele 8 celule SRAM. Celulele de tip LUT sunt expandabile la fel ca
multiplexoarele.
Un bloc LB conÛine un set de componente din categoriile LUT, FA (full adder),
MUX, porÛi logice şi bistabili. O maşin| secvenÛial| de complexitate relativ
mic| poate fi realizat| prin configurarea unui singur bloc LB.
Flow-ul de configurare a unui FPGA este aproape identic cu cel
reprezentat în Fig.5.53 pentru CPLD. În afar| de utilizarea ca prototip de ASIC,
FPGA acoper| o gam| larg| de aplicaÛii din domenii cum ar fi:
- procesare de semnale,
- recunoaşterea vorbirii,
- criptografie,
- emulare hardware,
- bioinformatic|,
- sateliÛi şi radio astronomie,
- comunicaÛii şi transmisii de date etc.
FPGA reprezint| soluÛia optim| de substituire a sistemelor digitale integrate
306 Cap.5 Circuite de memorie şi logic| programabil|

care ar urma s| aib| volum redus de producÛie (de serie mic|).


Anumite aplicaÛii pot fi realizate atât cu FPGA cât şi cu CPLD. În tabelul
urm|tor este prezentat| o comparaÛie sumar| între CPLD şi FPGA.

CPLD FPGA
arhitectur| tip PAL tip Gate-array
densitate de integrare mic|...medie medie...mare
vitez| de operare mare şi predictibil| dependent| de aplicaÛie
putere consumat| mare medie

Densitate mare de integrare înseamn|, ca referinÛ|, echivalentul a un milion de


porÛi logice.
Viteza de operare a FPGA este dependent| de aplicaÛie deoarece nu toate
blocurile care apar în ierarhia proiectului pot s| fie implementate fiecare cu
câte un singur LB. Multe p|rÛi dintr-un proiect se mapeaz| natural pe câte un
PAL din structura CPLD, situaÛie mai rar întâlnit| la FPGA unde mai multe
blocuri LB trebuie alocate pentru a realiza funcÛiile unui singur bloc din
proiect. Acest lucru implic| propag|ri prin canalele de routare şi implicit timpi
de întârziere mai mari.
Circuite Logice SecvenÛiale Sincrone 307

Cap.6 TESTAREA CIRCUITELOR SECVENÚIALE


SINCRONE

Proiectarea unui bloc logic secvenÛial necesit| un efort de calcul mai


mare în comparaÛie cu proiectarea unui bloc combinaÛional, considerând c|
acestea dou| au dimensiuni comparabile (dimensiunea unui bloc oarecare se
poate aproxima printr-un num|r echivalent de porÛi logice). Proiectarea include
şi problemele referitoare la testare. Aceasta din urm| nu reprezint| doar o
singur| etap| bine definit| în flow-ul de proiectare; diferite elemente
referitoare la testare sunt distribuite în toate etapele de proiectare. Mai mult,
testarea se desf|şoar| pe o durat| mai lung| decât proiectarea propriuzis|.
Astfel, dup| fabricarea şi/sau încapsularea chip-urilor se fac verific|ri şi
m|sur|tori care aparÛin tot de domeniul test|rii. Ponderea test|rii în costul final
al unui chip poate s| fie semnificativ| sau chiar dominant| dac| se ia în calcul
şi consumul suplimentar de arie necesar pentru m|rirea testabilit|Ûii.
Termenii “simulare” şi “testare” par a fi sinonimi şi în multe situaÛii pot
fi utilizaÛi ca atare. Îns| în proiectare aceşti termeni desemneaz| activit|Ûi care
se deosebesc radical între ele, dup| cum se arat| în continuare.
Simularea reprezint| un mijloc de evaluare a funcÛion|rii circuitelor prin care
se valideaz| detaliile structurale noi care apar între dou| etape succesive din
flow-ul de proiectare. De exemplu, structura obÛinut| prin sintez| logic| trebuie
s| fie echivalent| funcÛional cu modelul text (HDL - hardware description
language) de intrare în tool-ul de sintez|; prin optimizarea arie/vitez| a unei
porÛiuni dintr-un bloc logic trebuie s| se p|streze echivalenÛa funcÛional| dintre
structura iniÛial| şi cea final|. EchivalenÛa menÛionat| anterior se refer| la
regimul static de funcÛionare; în regim dinamic pot s| apar| diferenÛe, care îns|
nu sunt în general esenÛiale. Un circuit proiectat şi validat pentru fabricare este
numit în testare “circuit bun”, în contrast cu termenul “circuit defect”.
Testarea are ca scop principal identificarea circuitelor defecte. În etapele de
proiectare sunt create modele distincte pentru circuitele defecte, care sunt
simulate cu ajutorul simulatoarelor de defecte; aceste instrumente soft sunt
mult mai complexe decât simulatoarele obişnuite, cu care se evalueaz| numai
funcÛionarea circuitelor bune. Circuitele defecte au o funcÛionare diferit| faÛ|
de a celor bune şi trebuie rejectate. Defectele sunt de natur| fizic| şi se
datoreaz| imperfecÛiunilor procesului tehnologic. Anumite erori care apar în
308 Cap.6 Testarea circuitelor secvenÛiale sincrone

funcÛionarea circuitelor fabricate nu sunt cauzate de defectele fizice ci provin


din etapele de proiectare. Unele erori de proiectare nu constituie greşeli f|cute
de c|tre proiectanÛi, acestea fiind determinate de imperfecÛiunea modelelor
dispozitivelor precum şi de imprecizia simulatoarelor utilizate. În schimb,
validarea funcÛion|rii unui bloc f|r| acoperirea tuturor cornerelor tehnologice,
a modurilor şi ale condiÛiilor de operare reprezint| greşeli care se datoreaz|
exclusiv proiectanÛilor.

6.1 Proiectarea pentru testabilitate

Reducerea costurilor asociate cu testarea unui circuit se face prin


includerea în structura acestuia a unor componente auxiliare care s| m|reasc|
testabilitatea. Aceste metode sau tehnici de proiectare poart| numele DFT
(design for testability).

6.1.1 Analiza testabilit|Ûii


Testabilitatea reprezint| o m|sur| a dificult|Ûii de testare a unui circuit
sau bloc şi are dou| componente: controlabilitatea şi observabilitatea.
Controlabilitatea unui nod sau net din structura unui circuit digital se refer| la
efortul de calcul sau la dificultatea de a determina valoarea logic| 0 sau 1 în
acel nod prin intermediul valorilor logice aplicate la intr|rile circuitului.
Fiec|rui nod N i se asociaz| dou| numere naturale, C0(N) - controlabilitatea
valorii logice 0 şi respectiv C1(N) - controlabilitatea valorii logice 1. Valorile
mici ale numerelor C0 şi C1 înseamn| dificult|Ûi mici de control iar valorile
mai mari înseamn| dificult|Ûi mai mari de control al nodului. Exist| o corelaÛie
între num|rul de teste sau combinaÛii de valori logice ale intr|rilor primare care
determin| 0 şi 1 logic în nodul N şi respectiv controlabilit|Ûile C0(N) şi C1(N);
existenÛa unui num|r mic de teste implic| în general o dificultate mai mare de
control. Nodurile apropiate de intr|rile primare (intr|ri direct accesibile) sunt
mai uşor de controlat; nodurile apropiate de ieşirile primare (ieşiri direct
accesibile) sunt mai greu de controlat. Apropierea sau dep|rtarea dintre dou|
noduri ale unui circuit reprezint| num|rul de porÛi logice care trebuie traversate
pe cea mai scurt| cale de propagare dintre acestea.
Observabilitatea unui nod sau net din structura unui circuit digital se refer| la
efortul sau la dificultatea de a propaga valoarea logic| din acel nod (0 sau 1)
pân| la cel puÛin una dintre ieşirile accesibile; propagarea se realizez| tot prin
intermediul unui set de valori logice aplicate la intr|rile circuitului. Fiec|rui
nod N i se asociaz| un singur num|r real O(N) cu semnificaÛia de
observabilitate. Nodurile mai apropiate de ieşirile primare sunt mai uşor de
observat, adic| numerele O asociate nodurilor sunt mai mici; cel mai greu de
Circuite Logice SecvenÛiale Sincrone 309

observat sunt de obicei intr|rile primare, acestea fiind net-urile cele mai
dep|rtate faÛ| de ieşiri.
În cazul analizei unui model structural la nivel de poart| logic| (gate
level), disponibil îns| dup| etapa de sintez| logic|, controlabilit|Ûile C0 şi C1
corespunz|toare tuturor net-urilor se determin| printr-o singur| traversare a
circuitului, de la intr|ri c|tre ieşiri. Pentru orice intrare in a unui bloc oarecare
dintr-un sistem (chip) se poate considera c| C0(in) = C1(in) = 0. Acest lucru
presupune accesul direct, din exteriorul chip-ului, la intrarea in a blocului. În
multe cazuri aceast| ipotez| nu este adev|rat| îns| rezultatele obÛinute pot fi
corect utilizate; ele indic| dificult|Ûile de control relative la intr|rile blocului
respectiv iar nodurile mai greu de controlat ies în evidenÛ|. Dup| ce se cunosc
valorile absolute ale controlabilit|Ûilor de la intr|rile unui bloc se pot determina
şi valorile absolute ale controlabilit|Ûilor fiec|rui net sau nod intern, repetând
aceeaşi procedur| de calcul înc| o dat|.
Tabelul din Fig.6.1 conÛine formulele de baz| utilizate în calculul
controlabilit|Ûilor net-urilor dintr-un circuit combinaÛional reprezentat la nivel
de poart| logic|. S-a notat cu out şi in ieşirea şi respectiv o intrare oarecare a
unei porÛi; BUF şi INV au câte o singur| intrare, XOR şi XNOR au câte dou|
intr|ri iar celelalte porÛi au cel puÛin câte dou| intr|ri.

C0(out) = C1(out) =
BUF C0(in) + 1 C1(in) + 1
INV C1(in) + 1 C0(in) + 1
AND min{C0(inj)} + 1 '[C1(inj)] + 1
NAND '[C1(inj)] + 1 min{C0(inj)} + 1
OR '[C0(inj)] + 1 min{C1(inj)} + 1
NOR min{C1(inj)} + 1 '[C0(inj)] + 1
XOR min{C1(in1) + C1(in2), min{C1(in1) + C0(in2),
C0(in1) + C0(in2)} + 1 C0(in1) + C1(in2)} + 1
XNOR min{C1(in1) + C0(in2), min{C1(in1) + C1(in2),
C0(in1) + C1(in2)} + 1 C0(in1) + C0(in2)} + 1

Fig.6.1 Calculul controlabilit|Ûilor C0 şi C1 la traversarea porÛilor logice

OperaÛiile sum| şi minim din tabel se realizeaz| luând în considerare toate


intr|rile inj, j = 1, 2, ..., n ale porÛilor.
310 Cap.6 Testarea circuitelor secvenÛiale sincrone

Observabilit|Ûile net-urilor se determin| printr-o singur| traversare a circuitului


în sens invers, de la ieşiri c|tre intr|ri. Pentru orice ieşire out a unui bloc
oarecare se poate considera c| O(out) = 0. Tabelul din Fig.6.2 conÛine
formulele de baz| utilizate în calculul observabilit|Ûilor net-urilor dintr-un
circuit combinaÛional reprezentat la nivel de poart| logic|.

BUF/INV O(in) = O(out) + 1


AND/NAND O(inj) = O(out) + '[C1(ink)] + 1, k … j
OR/NOR O(inj) = O(out) + '[C0(ink)] + 1, k … j
XOR/XNOR O(in1) = O(out) + min{C0(in2), C1(in2)} + 1
O(in2) = O(out) + min{C0(in1), C1(in1)} + 1
stem min{O(ramur|j)}

Fig.6.2 Calculul observabilit|Ûilor la traversarea porÛilor logice

Stem-ul reprezint| o surs| de semnal care se ramific|, adic| o surs| cu fanout


supraunitar. Observabilitatea stemului este determinat| de ramura cea mai uşor
de observat; controlabilit|Ûile ramurilor sunt egale cu cele ale stemului.
Un exemplu de calcul al controlabilit|Ûilor şi observabilit|Ûilor este
prezentat mai jos, pentru circuitul combinaÛional din Fig.6.3 (celula elementar|
a sumatorului cu transport anticipat).

Fig.6.3 Analiza testabilit|Ûii celulei elementare de adunare

Valorile numerice asociate cu fiecare conexiune a circuitului au semnificaÛiile


C0/C1/O. Valorile logice cele mai greu de controlat sunt High la ieşirea porÛii
4 şi Low la ieşirea porÛii 5; intrarea inversorului 3 şi intrarea porÛii 4 comandat|
Circuite Logice SecvenÛiale Sincrone 311

de poarta 1 sunt conexiunile cele mai greu de observat.


Formulele de calcul din tabelele anterioare se utilizeaz| şi pentru analiza
testabilit|Ûii circuitelor secvenÛiale; trebuie ad|ugate relaÛii de calcul specifice
latch-urilor şi bistabililor. Pentru bistabilul de tip D din Fig.6.4 se utilizeaz|
formulele urm|toare.

Fig.6.4 Bistabil de tip D cu reset asincron

C0(q) = min{C0(rn), C1(rn) + C0(d) + C0(ck) + C1(ck)} + 1


C1(q) = C1(rn) + C1(d) + C0(ck) + C1(ck) + 1
O(d) = O(q) + C1(rn) + C0(ck) + C1(ck) + 1 (6.1)
O(rn) = O(q) + C1(q) + min{C0(ck), C1(ck)} + 1
O(ck) = O(q) + C1(rn) + C0(ck) + C1(ck) + min{C0(d) + C1(q), C1(d) +
+ C0(q)} + 1

Semnalele de ceas şi cele de control asincron sunt intr|ri speciale care trebuie
tratate cu mult| precauÛie. Distribuirea lor în interiorul chip-ului, de la
pini/paduri pân| la intr|rile bistabililor se face de obicei prin intermediul unor
reÛele combinaÛionale alc|tuite din buffere şi inversoare (de tip “arbore”).
Cuplajele capacitive dintre traseele pe care se propag| aceste semnale speciale
şi traseele de propagare ale celorlalte semnale (de date sau de control sincron)
trebuie s| fie suficient de mici; tranziÛiile L _ H sau H ` L ale semnalelor de
date/control sincron nu trebuie s| induc| tranziÛii parazite în semnalele de
ceas/control asincron. Prin intermediul reÛelei de distribuÛie semnalele de
ceas/control asincron sunt uşor de controlat; controlabilitatea este egal| cu
num|rul de buffere/inversoare traversate. Rezult|, în general, c| termenii
dominanÛi în sistemul (6.1) sunt C0(d), C1(d) şi O(q).
O alt| modalitate de evaluare a dificult|Ûilor de controlare/observare a
nodurilor unui circuit logic const| în utilizarea probabilit|Ûilor în locul
numerelor naturale. Astfel, dac| C0, C1 şi O sunt probabilit|Ûi atunci valorile
acestora sunt numere cuprinse în intervalul [0, 1]. De asemenea, pentru orice
312 Cap.6 Testarea circuitelor secvenÛiale sincrone

net N are loc relaÛia


C0(N) + C1(N) = 1. (6.2)
Valorile mai mici ale probabilit|Ûilor C0, C1 şi O înseamn| dificult|Ûi mai mari
de control/observare. Formulele de calcul corespunz|toare travers|rii porÛilor
logice sunt prezentate în tabelele de mai jos (Fig.6.5, Fig.6.6).

C0(out) = C1(out) =
BUF C0(in) C1(in)
INV C1(in) C0(in)
AND 1 - C1(out) (C1(inj)
NAND (C1(inj) 1 - C0(out)
OR (C0(inj) 1 - C0(out)
NOR 1 - C1(out) (C0(inj)
XOR 1 - C1(out) C1(in1) · C0(in2) + C0(in1) · C1(in2)
XNOR 1 - C1(out) C0(in1) · C0(in2) + C1(in1) · C1(in2)

Fig.6.5 Calculul probabilit|Ûilor C0 şi C1 la traversarea porÛilor logice

BUF/INV O(in) = O(out)


AND/NAND O(inj) = O(out) · (C1(ink), k … j
OR/NOR O(inj) = O(out) · (C0(ink), k … j
XOR/XNOR O(in1) = O(out) · max{C0(in2), C1(in2)}
O(in2) = O(out) · max{C0(in1), C1(in1)}
stem max{O(ramur|j)}

Fig.6.6 Calculul probabilit|Ûilor O la traversarea porÛilor logice

Probabilit|Ûile de control ale intr|rilor şi cele de observare ale ieşirilor unui


bloc oarecare B, C0(inj), C1(inj) = 1 - C0(inj) şi respectiv O(outk), trebuie
calculate prin traversarea succesiv| a acelor blocuri care se interpun între B şi
Circuite Logice SecvenÛiale Sincrone 313

frontierele chip-ului (începând de la pinii chip-ului). Se poate considera c|


probabilitatea de observare a unui pin oarecare al chip-ului este 1 şi c|
probabilit|Ûile de control C0 şi C1 sunt egale cu 1/2.
Formulele de calcul specifice bistabilului din Fig.6.4, care trebuie utilizate în
locul sistemului (6.1), sunt:

C0(q) = C0(rn) + C1(rn) · C0(d) · C0(ck) · C1(ck)


C1(q) = C1(rn) · C1(d) · C0(ck) · C1(ck)
O(d) = O(q) · C1(rn) · C0(ck) · C1(ck) (6.3)
O(rn) = O(q) · C1(q) · max{C0(ck), C1(ck)}
O(ck) = O(q) · C1(rn) · C0(ck) · C1(ck) · max{C0(d)·C1(q), C1(d)·C0(q)}.

Probabilit|Ûile de control C0 şi C1 ale semnalelor de ceas şi SET/RESET


asincron sunt egale cu 1/2, astfel c| sistemul (6.3) devine:

C0(q) = 1/2 + 1/8 · C0(d)


C1(q) = 1/8 · C1(d)
O(d) = 1/8 · O(q) (6.4)
O(rn) = 1/2 · O(q) · C1(q)
O(ck) = 1/8 · O(q) · max{C0(d)·C1(q), C1(d)·C0(q)}.

Cele dou| metode de evaluare a testabilit|Ûii prezentate anterior sunt


statice, în sensul c| utilizeaz| doar structura (topologia) circuitului nu şi teste
sau stimuli. Metodele de evaluare a testabilit|Ûii care utilizeaz| teste, adic|
simularea circuitului, sunt numite “dinamice”.
Fie n num|rul de teste simulate. Pentru fiecare conexiune c a circuitului se
contorizeaz| de câte ori aceasta este egal| cu 0 (Low) şi de câte ori este
“sensibil|” la propagare; acest din urm| contor este activat numai dac| c este
şi intrare a unei porÛi logice. Se calculeaz| apoi

C0(c) = [nr.(c = 0)]/n


C1(c) = 1 - C0(c) (6.5)
S(c) = [nr.(c = sensibil| la propagare)]/n.

Numerele C0(c), C1(c) şi S(c) au semnificaÛii de probabilit|Ûi de control şi


respectiv de sensibilizare la propagare a conexiunii c. În Fig.6.7 sunt marcate
cu câte un punct intr|rile porÛilor din structura celulei de adunare din Fig.6.3
314 Cap.6 Testarea circuitelor secvenÛiale sincrone

care sunt sensibilizate de testul x y cyin = 101.

Fig.6.7 Sensibilizarea la propagare în celula elementar| de adunare

Printr-o singur| traversare direct| a circuitului se determin| valorile logice ale


tuturor conexiunilor şi se marcheaz| intr|rile sensibilizate ale porÛilor (aceste
operaÛii trebuie repetate pentru fiecare test). Marcarea intr|rilor sensibilizate
se face utilizând ipoteza simplificatoare, mai puÛin realist|, c| erorile pot s|
apar| la o singur| intrare a unei porÛi oarecare şi nu simultan la mai multe
intr|ri. În cazul porÛii 4 (NOR2), în acest test, erorile se propag| la ieşirea ei
d chiar dac| apar simultan la ambele intr|ri a şi b. Acest lucru nu se întâmpl|
îns| şi în cazul porÛii 5 (XOR2); dac| eroarea 1/0 (1 reprezint| valoarea logic|
din circuitul bun sau f|r| defecte iar 0 este valoarea logic| datorat| prezenÛei
unui defect) apare simultan pe conexiunile d şi cyin atunci are loc o compensare
sau o anulare reciproc| iar conexiunea s îşi p|streaz| valoarea corect|:
s = (1/0) r (1/0) = 0.
Probabilit|Ûile de observare se calculeaz| dup| simularea tuturor testelor,
printr-o singur| traversare invers| a circuitului. Se consider| c|
observabilitatea oric|rei ieşiri este maxim|, egal| cu 1. Observabilitatea unei
intr|ri a unei porÛi, de exemplu a intr|rii a în poarta 4, se calculeaz| cu relaÛia
O(a) = S(a)·O(d).
Toate metodele de evaluare a testabilit|Ûii sunt aproximative. Cu toate
acestea, rezultatele obÛinute indic| corect porÛiunile de circuit care sunt mai
greu de testat. Dup| identificarea acestora trebuie f|cute modific|ri structurale
astfel încât s| se p|streze funcÛionarea de baz| şi s| se îmbun|t|Ûeasc|
testabilitatea. Modific|rile structurale f|cute în acest scop, numite şi tehnici de
proiectare pentru testabilitate, implic| de obicei creşterea ariei ocupate, a
num|rului de pini/paduri şi reducerea vitezei maxime de operare. Aceste
Circuite Logice SecvenÛiale Sincrone 315

penalit|Ûi sunt îns| compensate de reducerea considerabil| a efortului de calcul


implicat în generarea testelor şi simularea defectelor dar şi de durata mai mic|
necesar| pentru testarea circuitelor fabricate.

6.1.2 Scanarea
În general bistabilii şi latch-urile dintr-un circuit logic sunt componentele
cele mai greu de controlat şi de observat. Se va justifica aceast| afirmaÛie cu
ajutorul unei maşinii secvenÛiale ce are o funcÛionare oarecare. Structura logic|
desenat| în Fig.6.8, compus| dintr-un bloc combinaÛional şi 3 bistabili de tip
D, reprezint| o maşin| secvenÛial| cu 8 st|ri.

Fig.6.8 Maşin| secvenÛial| f|r| scanare

Testarea blocului combinaÛional din structura maşinii secvenÛiale din figura de


mai sus se realizeaz| prin aplicarea unei secvenÛe de teste de lungime n
oarecare t1<1:4>, t2<1:4>, t3<1:4>, ..., tn<1:4> la intr|rile In<1:4> = {In1, In2,
In3, In4} şi observarea r|spunsurilor r1<1:3>, r2<1:3>, r3<1:3>, ..., rn<1:3>
obÛinute la ieşrile Out<1:3> = {Out1, Out2, Out3}. Intr|rile In5, In6, In7 şi
ieşirile Out4, Out5, Out6 nu sunt direct accesibile. Prin intermediul comenzii
asincrone Reset se poate forÛa doar starea In5In6In7 = 100 nu şi celelalte 7
combinaÛii de 3 biÛi. St|rile 000, 001, 010, 011, 101, 110 şi 111 pot fi în general
controlate prin intermediul unor secvenÛe binare aplicate la intr|rile In1, In2,
In3, In4. Dificultatea controlului st|rii bistabililor depinde îns| de structura
316 Cap.6 Testarea circuitelor secvenÛiale sincrone

blocului combinaÛional; este posibil ca anumite st|ri din cele 7 s| nu poat| fi


atinse, indiferent de lungimea şi structura secvenÛelor binare aplicate la intr|rile
accesibile. Ca urmare nu orice combinaÛie de biÛi In1In2 ... In7 poate fi luat|
în considerare pentru testarea blocului combinaÛional. De asemenea, prin
actvarea unor defecte erorile generate se pot propaga în bistabili iar observarea
acestora la Out1, Out2, Out3 implic| diferite grade de dificultate. DetecÛia
erorilor se face cu o anumit| latenÛ| sau întârziere, exprimat| printr-un num|r
de perioade de ceas.
O simplificare considerabil| a test|rii circuitului din Fig.6.8 se poate obÛine
prin modificarea indicat| în Fig.6.9, în care se utilizeaz| bistabili cu
capabilitate de scanare.

Fig.6.9 Maşin| secvenÛial| cu scanare

În schema de mai sus nu este necesar| vreo comand| de iniÛializare a


bistabililor. Spre deosebire de maşina secvenÛial| f|r| scanare, în care bistabilii
formeaz| un registru cu un singur mod de operare şi anume de înc|rcare
paralel|, registrul maşinii cu scanare are un mod de operare suplimentar.
Acesta const| în deplasarea informaÛiei stocate între celulele registrului.
Înc|rcarea paralel| a bistabililor cu valorile logice de la ieşirile Out4, Out5,
Out6 corespunde operaÛiei normale a circuitului (Sel = 0). Modul deplasare sau
shift (Sel = 1) se utilizeaz| pentru controlarea şi observarea bistabililor; efortul
necesar este mic. Oricare din cele 8 st|ri se poate înc|rca în registrul maşinii
prin deplasarea în ritmul ceasului a tiparului binar aplicat la intrarea Scan-in.
Circuite Logice SecvenÛiale Sincrone 317

Toate cele 27 = 128 combinaÛii de 7 biÛi se pot utiliza pentru testarea blocului
combinaÛional. Durata de aplicare a unui test este determinat| de operaÛia de
deplasare; în acest caz sunt necesare 3 perioade de ceas pentru fiecare test.
Dup| ce un test oarecare a fost aplicat se comut| din modul deplasare (sau
scanare) în modul normal de operare pentru o singur| perioad| de ceas în care
bistabilii se încarc| cu rezultatele obÛinute la Out4, Out5, Out6. Aceast|
informaÛie este observat| la ieşirea Scan-out simultan cu deplasarea în registru
a urm|torului grup de 3 biÛi din cadrul testului urm|tor. Cu excepÛia duratei mai
mari de aplicare a testelor, scanarea reduce dificultatea test|rii secvenÛiale la
nivelul dificult|Ûii test|rii combinaÛionale.
Arhitecturile cu scanare pot fi totale sau parÛiale dup| cum toÛi bistabilii
sau numai o parte dintre aceştia sunt înlocuiÛi cu bistabili de tip scan flip-flop.
Decizia de alegere a unei arhitecturi determin| consumul suplimentar de arie.
Bistabilii scanaÛi pot fi conectaÛi într-un singur lanÛ sau în mai multe; fiecare
lanÛ de scanare necesit| 3 pini suplimentari (Scan-in, Scan-out, Sel). Utilizarea
mai multor lanÛuri de scanare independente permite creşterea vitezei de testare;
dac| se utilizeaz| n lanÛuri cu aceeaşi lungime atunci viteza de testare creşte de
n ori în comparaÛie cu utilizarea unui singur lanÛ compus din cele n.
Arhitecturile cu scanare parÛial| reprezint| un compromis între costurile
suplimentare (arie mai mare, num|r mai mare de pini, sc|derea vitezei maxime
de operare) şi complexitatea test|rii.
Orice sistem logic secvenÛial este alc|tuit din blocuri combinaÛionale şi
registre interconectate între ele. Un exemplu este ilustrat în Fig.6.10. Structura

Fig.6.10 Arhitectur| arbitrar| de sistem secvenÛial


318 Cap.6 Testarea circuitelor secvenÛiale sincrone

conÛine 3 blocuri combinaÛionale şi 4 registre sincronizate cu acelaşi semnal de


ceas (nereprezentat în schem|). Intr|rile A, B, ieşirile X, Y, Z şi conexiunile
interne sunt în general bus-uri cu diferite dimensiuni. Uşor de controlat sunt
bistabilii din Reg4 conectaÛi la intr|rile B iar uşor de observat sunt bistabilii din
Reg2 conectaÛi la ieşirile Y; ceilalÛi bistabili sunt relativ dificil de controlat şi
de observat f|r| scanare. În continuare se presupune c| registrele Reg1, Reg2,
Reg3 şi Reg4 conÛin fiecare câte n1, n2, n3 şi respectiv n4 bistabili.
Versiunea cu scanare complet| (full-scan) a sistemului secvenÛial din Fig.6.10,
în care se utilizeaz| un singur lanÛ de scanare, este desenat| în Fig.6.11. F|r|
a pierde din generalitate se consider| c| bistabilii de tip scan care înlocuiesc
bistabilii registrelor din Fig.6.10 au o intrare de ceas şi una de selecÛie a
modului de operare Normal/Scan; aceste semnale de control, aplicate în paralel
celor 4 registre, nu sunt reprezentate în Fig.6.11. Structuri de bistabili scan sunt
prezentate în cap.1. Ordinea optim| de plasare a bistabililor în lanÛul de scanare
se stabileşte în funcÛie de adiacenÛa acestora, informaÛie care trebuie extras| din
layout. Modul de construire a registrului de scanare compus din Reg1, Reg2,
Reg3 şi Reg4 afecteaz| viteza de testare, adic| frecvenÛa maxim| de aplicare
a testelor precum şi aria ocupat|. În acest exemplu este posibil ca pentru
semnalele Scan-in şi Scan-out s| nu fie nevoie de pini suplimentari; una dintre
intr|rile B şi una dintre ieşirile Y pot s| substituie intrarea şi respectiv ieşirea
lanÛului de scanare.
Planul de testare a circuitului cu scanare total| conÛine urm|toarele dou| faze
sau etape care se repet| pentru fiecare test:

Fig.6.11 Versiune full-scan a sistemul secvenÛial din Fig.6.10


Circuite Logice SecvenÛiale Sincrone 319

1) Se trece registrul de scanare în modul deplasare şi se încarc| cu biÛii


corespunz|tori unui test tk; operaÛia dureaz| Nshift = n1 + n2 + n3 + n4 perioade
de ceas. SecvenÛa de biÛi se aplic| la intrarea Scan-in.
Componentele testului tk stocate Reg4 se aplic| blocului Comb1, cele din Reg1
se aplic| blocurilor Comb2 şi Comb3, cele din Reg2 se aplic| la Comb3 iar
cele din Reg3 se aplic| la intr|rile Comb3. BiÛii deplasaÛi în celulele din Reg2
care sunt conectate la ieşirile Y nu fac parte din structura testului tk iar valorile
lor sunt indiferente.
2) Se aplic| în paralel la intr|rile A şi B valorile logice binare care completeaz|
testul tk, se comut| registrul în modul înc|rcare paralel| (operarea normal|
pentru care a fost proiectat sistemul) şi apoi se aplic| un singur front activ de
ceas. La ieşirile X, Y şi Z se observ| o parte din r|spunsul sistemului la tk.
Observarea r|spunsului capturat în registrul de scanare în faza 2 se face la
ieşirea Scan-out. Aceast| operaÛie se realizeaz| simultan cu înc|rcarea serie a
testului urm|tor, tk+1. Rezult| c| pentru fiecare test sunt necesare Nshift + 1
perioade de ceas.
O versiune cu scanare parÛial| (partial-scan) a sistemului secvenÛial din
Fig.6.10, în care se utilizeaz| un singur lanÛ de scanare, este prezentat| în
Fig.6.12. SelecÛia registrelor care urmeaz| s| fie scanate se face, în general, în
conformitate cu urm|toarele dou| criterii care trebuie îndeplinite simultan:
- întreruperea tuturor buclelor de reacÛie;
- minimizarea num|rului de bistabili din lanÛul de scanare.
Orice registru de scanare, indiferent de dimensiune, are pe durata test|rii rolul

Fig.6.12 Versiune partial-scan a sistemul secvenÛial din Fig.6.10


320 Cap.6 Testarea circuitelor secvenÛiale sincrone

atât de intr|ri cât şi de ieşiri direct accesibile din punct de vedere al


controlabilit|Ûii şi observabilit|Ûii. Din acest motiv un astfel de registru poate
fi privit ca un set de intr|ri şi ieşiri, ceea ce este echivalent cu întreruperea unor
c|i de propagare din structura sistemului.
Sistemul logic secvenÛial din Fig.6.10 are dou| tipuri de bucle de reacÛie. O
bucl| este local|, la nivelul blocului Comb3, iar cealalt| poate fi considerat|
global| deoarece cuprinde toate blocurile combinaÛionale. Scanarea registrului
Reg3 este obligatorie, fiind singura soluÛie de întrerupere a buclei de reacÛie
local|. Pentru întreruperea buclei globale este suficient| scanarea doar a unui
singur registru dintre Reg1, Reg2 şi Reg4. Se alege registrul cu cel mai mic
num|r de bistabili; s-a considerat c| acesta este Reg4. Registrele scanate Reg3
şi Reg4 trebuie s| fie înzestrate şi cu modul de operare hold (menÛinere).
Spre deosebire de versiunea full-scan în care lungimea lanÛului de scanare este
n1 + n2 + n3 + n4, dimensiunea lanÛului în versiunea partial-scan este n3 + n4.
Planul de testare a circuitului din Fig.6.12 este urm|torul:
1) Se trece registrul de scanare în modul deplasare şi se încarc| cu biÛii
corespunz|tori unui test tk; operaÛia dureaz| Nshift = n3 + n4 perioade de ceas.
2) Se aplic| în paralel la intr|rile A şi B valorile logice binare care completeaz|
testul tk, se comut| registrul de scanare în modul hold şi se aplic| dou| fronturi
active de ceas celor 4 registre.
Segmentele care alc|tuiesc r|spunsul sistemului la testul tk se încarc| în Reg1
dup| o perioad| de ceas iar în Reg2 dup| dou| perioade de ceas. InformaÛia din
Reg1 înc|rcat| de primul front activ de ceas se p|streaz| neschimbat| şi dup|
cel de-al doilea front deoarece valorile logice de la intr|rile blocului Comb1 nu
se modific|. InformaÛia înc|rcat| în Reg2 dup| al doilea front activ de ceas
corespunde testului tk.
3) Se comut| Reg3 şi Reg4 în modul înc|rcare paralel| şi se aplic| un front de
ceas tuturor registrelor.
Dup| cele trei fronturi de ceas aplicate în fazele sau etapele 2 şi 3, la ieşirile X,
Y şi Z se observ| o parte din r|spunsul sistemului la tk. Simultan cu repetarea
etapei 1, corespunz|toare testului urm|tor tk+1, se observ| segmentele din
r|spunsul la testul tk care au fost înc|rcate în Reg3 şi Reg4 în etapa 3. Rezult|
c| pentru fiecare test sunt necesare Nshift + 3 perioade de ceas.
Consumul suplimentar de arie şi durata de aplicare a testelor specifice unui
sistem cu scanare parÛial| sunt mai mici sau mult mai mici decât în cazul
scan|rii totale. În schimb, informaÛia din registrele care nu sunt scanate nu este
direct accesibil|. Deoarece complexitatea test|rii r|mâne comparabil| cu cea
combinaÛional|, abord|rile de tip partial-scan constituie de obicei opÛiunea de
baz| în proiectare.
Transformarea unui sistem secvenÛial oarecare într-unul echivalent
funcÛional care s| includ| şi capabilit|Ûi de scanare nu const| doar în înlocuirea
Circuite Logice SecvenÛiale Sincrone 321

unor registre simple cu unele de tip scan. În afar| de aceast| operaÛie sunt
necesare şi alte modific|ri structurale, în concordanÛ| cu regulile scan-design.
O parte dintre aceste reguli sunt prezentate în paragraful urm|tor.

6.1.2.1 Reguli scan-design


Aceste reguli sunt menite s| asigure funcÛionarea corect| a operaÛiei de
deplasare ce are loc în modul test şi p|strarea funcÛiilor corespunz|toare
regimului normal de operare.
Structura logic| desenat| în Fig.6.13 reprezint| o porÛiune dintr-un bloc
de control al driverelor unei linii de date. Cel mult un singur driver trebuie s|
fie activ la orice moment de timp. În acest exemplu driverele sunt buffere cu
3 st|ri şi cu intrare de autorizare (enable) activ| High.

Figura 6.13

Dac| bistabilii dff1, dff2 şi dff3 se înlocuiesc cu bistabili de tip scan atunci, pe
durata operaÛiei de deplasare în lanÛul de scanare, este foarte probabil ca
valorile logice din aceste 3 celule s| nu respecte cerinÛa modului normal de
operare şi anume en1 en2 en3 0 {000, 001, 010, 100}. Deoarece secvenÛele
deplasate în timpul operaÛiei de scanare sunt oarecare, evitarea conflictelor sau
scurtcircuitelor dintre driverele buf1, buf2, buf3 trebuie forÛat| cu ajutorul unor
componente suplimentare. Evident, aria ocupat| pe chip creşte. O soluÛie la
transformarea circuitului din Fig.6.13 în conformitate cu regulile scan-design
322 Cap.6 Testarea circuitelor secvenÛiale sincrone

este cea din Fig.6.14. Deplasarea se face de la sdff1 c|tre sdff3.

Fig. 6.14 Drivere de bus

S-a ales ca pe durata test|rii bufferele buf2 şi buf3 s| fie în starea de înalt|
impedanÛ| iar buf1 s| fie activ. Latch-ul format din cele dou| inversoare
conectate la linia de date, numit şi bus keeper, fixeaz| linia la o valoare logic|
valid| în cazul în care conexiunea en1 ar fi blocat| la 0 (stuck-at-0).
Tranzistoarele din bus keeper au de obicei dimensiunile minime sau apropiate
de acestea, astfel c| înc|rcarea suplimentar| a driverului activ este
nesemnificativ|.
Conflicte pot s| apar| şi în cazul pinilor bidirecÛionali ale c|ror direcÛii
sunt controlate de bistabili ce urmeaz| s| fie incluşi în lanÛuri de scanare. Un
exemplu simplu este prezentat în Fig.6.15(a - structura iniÛial|, b - structura
final|). Bufferul de ieşire 1 are trei st|ri şi poate intra în conflict cu sursa de
semnal care trebuie s| comande bufferul de intrare 2. Prin intermediul porÛii
AND, pe durata test|rii bufferul1 este pus în starea de înalt| impedanÛ| iar
testerul conectat la pinul I/O poate s| injecteze secvenÛele de test.
Circuite Logice SecvenÛiale Sincrone 323

Fig. 6.15 Pin bidirecÛional

Regulile scan-design impun modific|ri structurale şi în zonele de circuit


în care ceasul este condiÛionat de unul sau de mai multe semnale (clock gating).
Bistabilii cu ceas de acest tip incluşi într-un lanÛ de scanare ar bloca deplasarea
în modul test. “Ajustarea” conform| cu scan-design a unui circuit cu clock
gating este ilustrat| în figura de mai jos.

Fig.6.16 Clock gating


324 Cap.6 Testarea circuitelor secvenÛiale sincrone

În modul test (Normal/Scan = 1) latch-ul se încarc| cu 1 logic şi valideaz|


propagarea ceasului Ck prin poarta AND. Dac| fronturile de ceas nu ar ajunge
la bistabilul sdff atunci lanÛul de scanare s-ar bloca în acest loc, în sensul c|
datele de la intrarea SD nu ar ajunge la Q; datele transmise mai departe în
lanÛul de scanare ar avea valoarea constant| existent| în sdff.
Semnalele de ceas derivate din ceasul global trebuie înlocuite cu acesta
din urm| pe durata scan|rii. Regula scan-desig referitoare la ceasuri derivate
este ilustrat| în Fig.6.17.

Fig.6.17 Semnal de ceas derivat din ceasul global

Semnalele de ceas obÛinute prin multiplicare de frecvenÛ| utilizând circuite


PLL sunt tot ceasuri derivate şi trebuie s| respecte regula de mai sus.
Blocurile combinaÛionale care conÛin bucle de reacÛie asincron| (adic|
logica secvenÛial| asincron|) trebuie transformate pe durata scan|rii astfel încât
reacÛia s| devin| sincron| cu ceasul utilizat în modul test. Altfel spus, logica
secvenÛial| asincron| trebuie transformat| în logic| secvenÛial| sincron|.
Fiecare bucl| de reacÛie distinct| trebuie întrerupt| în modul test prin
introducerea unui bistabil suplimentar de tip scan, inclus într-un lanÛ de
scanare. Aceast| regul| este prezentat| în Fig.6.18.
Bistabilii cu intr|ri de control asincron Set sau Reset care urmeaz| s| fie
scanaÛi trebuie înlocuiÛi cu bistabili de tip scan, care la rândul lor trebuie s|
aib| intr|ri de control asincron identice. Aceste intr|ri trebuie îns| dezactivate
pe durata test|rii pentru a se evita blocarea lanÛului de scanare într-o valoare
Circuite Logice SecvenÛiale Sincrone 325

constant|, 0 sau 1. Exemplul din Fig.6.19 evidenÛiaz| aceast| regul|.

Fig.6.18 Logic| secvenÛial| asincron|

Fig.6.19 Bistabil cu intrare de control asincron

6.1.2.2 Scan-design flow


Implementarea operaÛiei de scanare într-un proiect sintetizat care nu are
aceast| caracteristic| este o sarcin| complex| deoarece trebuie luate în
considerare foarte multe detalii structurale. Trebuie identificate şi modificate
toate porÛiunile din circuitul iniÛial care nu sunt în concordanÛ| cu regulile scan-
design. De asemenea, capturarea paralel| şi apoi deplasarea serie a datelor în
lanÛurile de scanare nu trebuie s| fie afectat| de clock skew.
326 Cap.6 Testarea circuitelor secvenÛiale sincrone

Flow-ul tipic de implementare a scan|rii într-un sistem logic secvenÛial


sincron are structura urm|toare.

Fig.6.20 Scan-design flow

Dac| sistemul secvenÛial iniÛial este un netlist (gate level) rezultat dintr-o
sintez| logic| şi care nu are capabilitate de scanare atunci etapele din flow-ul
de mai sus se execut| cu tool-uri scan synthesis. În acest caz proiectul scanabil
se obÛine utilizând succesiv dou| flow-uri de sintez| distincte.
În prezent modelul RTL (Register Transfer Language) al unui sistem secvenÛial
sincron oarecare poate fi direct sintetizat, utilizând un singur flow de sintez|
Circuite Logice SecvenÛiale Sincrone 327

care include toate tr|s|turile specifice scan design. Bistabilii care urmeat| s|
fie substituiÛi cu bistabili de tip scan pot fi stabiliÛi în modelul RTL. De
asemenea, la nivelul codului RTL pot fi verificate şi implementate anumite
reguli scan-design.
Verificarea regulilor scan-design şi fixarea erorilor se efectueaz| înainte
de sintez| dar şi la finalul acesteia din urm|toarele motive:
- sinteza cu bistabili scanabili este o etap| anterioar| celei de sintez| a reÛelei
de distribuÛie a semnalului (semnalelor) de ceas;
Primul netlist obÛinut nu include şi reÛeaua de buffere/inversoare prin care se
propag| ceasul la intr|rile bistabililor.
- arborele de ceas generat iniÛial trebuie ajustat iterativ pân| când îndeplineşte
toÛi parametrii caracteristici (setup time, hold time, latenÛ|, skew);
- dup| transferul arborelui de ceas în netlistul global se extrag informaÛii noi
referitoare la timing, adic| la setup time, hold time, latenÛ|, skew şi de obicei
trebuie f|cute noi ajust|ri structurale;
Aceast| etap| are loc dup| plasarea componentelor în layout şi interconectarea
lor f|r| detalii de routare.
- dup| routarea final| (detaliat|) sunt posibile noi ajust|ri structurale.
Configurarea lanÛurilor de scanare defineşte arhitectura sistemului, full-
scan sau partial-scan. Pinii şi implicit padurile I/O asociate acestora pot fi
utilizaÛi prin multiplexare, atât în funcÛionarea normal| a sistemului cât şi în
modul test; fac excepÛie padurile de vitez| sau frecvenÛ| mare deoarece
înc|rcarea suplimentar| a acestora nu este permis|.
Ordinea bistabililor în lanÛurile de scanare depinde de plasarea lor în layout;
bistabilii vecini în layout ocup| poziÛii succesive în lanÛul de scanare. Înainte
de plasarea preliminar| a componentelor în layout lanÛurile se construiesc în
mod aleator. Structura final| se obÛine prin operaÛii de reordonare. În cazul
arhitecturilor cu mai multe registre de scanare reordonarea include şi
transferuri de bistabili între lanÛuri.
Este posibil ca ambele fronturi ale aceluiaşi semnal de ceas s| fie utilizate
pentru comanda bistabililor dintr-un registru de scanare. Ordinea corect| a
bistabililor într-un astfel de registru se determin| prin simulare; deplasarea
oric|rei secvenÛe de biÛi trebuie s| se fac| f|r| erori. Luarea în considerare a
tuturor secvenÛelor este practic imposibil|, de aceea se utilizeaz| anumite tipare
de biÛi sau pattern-uri cu lungime fix|.
Decalajele dintre fronturile de ceas (clock skew) pot fi relativ uşor
controlate/reglate pentru bistabilii care aparÛin aceluiaşi domeniu de clock,
adic| au ca surs| acelaşi semnal de ceas. Acest lucru nu se poate face la fel de
uşor atunci când bistabilii dintr-un lanÛ de scanare nu fac parte din acelaşi
domeniu de clock. Pentru ca la deplasarea biÛilor s| nu apar| erori datorate
clock skew trebuie incluse latch-uri suplimentare între bistabilii vecini care
328 Cap.6 Testarea circuitelor secvenÛiale sincrone

aparÛin la domenii de clock diferite. Un exemplu este prezentat în Fig.6.21.

Fig.6.21 Controlul clock skew între domenii diferite de ceas

Dup| definitivarea arhitecturii scan design, adic| dup| plasarea şi


routarea întregului sistem digital, se fac o serie de verific|ri referitoare la:
- integritatea lanÛurilor;
- deplasarea corect| a datelor, adic| funcÛionarea în modul test;
- capturarea sau înc|rcarea paralel| specific| modului normal de operare;
- secvenÛele de iniÛializare prin intermediul c|rora se comut| între modurile de
operare normal şi scanare.
Defectele care pot fi detectate cu un grad mare de acoperire prin
capturarea erorilor în lanÛurile de scanare sunt conexiunile stuck-at,
scurtcircuitele dintre surse de semnal, tranzistoarele blocate (stuck-on, stuck-
off) şi crosstalk (cuplajele capacitive). Pentru detecÛia cu grad mare de
acoperire a defectelor de tip delay asociate cu c|ile de propagare prin blocurile
combinaÛionale este nevoie de o secvenÛ| format| din dou| teste care trebuie
aplicate la viteza normal| de operare a sistemului. Fiecare celul| de scanare ar
trebui s| poat| aplica doi biÛi, unul dup| altul, în nodul pe care îl controleaz|.
O soluÛie, numit| enhanced scan, const| în modificarea structurii celulei de
scanare dup| cum se arat| în Fig.6.22; fiecare celul| de scanare conÛine un
bistabil de tip scan şi un latch transparent la comanda LatchEn = High.
FuncÛionarea registrului este identic| cu aceea a unui registru de scanare
obişnuit dac| se fixeaz| semnalul de control LatchEn la 1 logic, cu excepÛia
unei întârzieri uşor mai mari de la intrarea de ceas Ck la ieşirea din celula de
scanare care se conecteaz| la blocul combinaÛional: tp Ck-Q (sddf) + tp D-Q (latch).
Aceast| întârziere suplimentar| introdus| de latch afecteaz| viteza normal| de
operare; viteza în regim de scanare (deplasare serie de la Scan-in la Scan-out)
r|mâne neschimbat|. Pentru detecÛia defectelor de tip delay cu o pereche
arbitrar| de teste t1 = a1 b1 c1 d1 e1 f1 g1, t2 = a2 b2 c2 d2 e2 f2 g2 se execut|
urm|toarea secvenÛ| de operaÛii:
1) se deplaseaz| biÛii e1, f1 şi g1 în bistabilii sdff1, sdff2 şi respectiv sdff3
(LatchEn = 0 şi Sel = 1);
Circuite Logice SecvenÛiale Sincrone 329

2) se transfer| paralel informaÛia din bistabili în latch-uri prin aplicarea unui


impuls High de scurt| durat| pe linia de comand| LatchEn;
3) se deplaseaz| biÛii e2, f2 şi g2 în bistabilii sdff1, sdff2 şi respectiv sdff3
(LatchEn = 0 şi Sel = 1);
4) se aplic| valorile a1, b1, c1 şi d1 la intr|rile In1, In2, In3 şi respectiv In4;
În acest moment la cele 7 intr|ri ale blocului combinaÛional In1...In7 este
aplicat testul t1, care are rolul de a sensibiliza anumite c|i de propagare.
R|spunsul la t1 obÛinut la ieşirile Out1...Out6 nu prezint| interes.
5) se comut| în modul normal de operare (Sel = 0), se aplic| valorile logice a2,
b2, c2, d2 la intr|rile In1, In2, In3, In4 şi un impuls High de scurt| durat| pe linia
de comand| LatchEn care determin| tansferul paralel din bistabili în latch-uri;
În acest moment la intr|rile blocului combinaÛional este aplicat testul t2.
6) dup| un interval de timp corelat cu timpii de propagare prin blocul
combinaÛional se aplic| un front activ pe linia Ck şi se captureaz| r|spunsulde
la Out6, Out5, Out4 în bistabilii sdff1, sdff2, sdff3 simultan cu observarea
ieşirilor Out1, Out2, Out3.
Dac| vreuna dintre c|ile de propagare sensibilizate are întârziere mai mare

Fig.6.22 Maşin| secvenÛial| cu scanare “avansat|” (enhanced scan)


330 Cap.6 Testarea circuitelor secvenÛiale sincrone

decât intervalul de timp dintre frontul negativ al semnalului LatchEn şi frontul


pozitiv de ceas aplicat în faza 6 atunci r|spunsul la testul t2 conÛine erori.
Semnalele de control LatchEn, Sel şi Ck corespunz|toare secvenÛei de operaÛii
1 ÷ 6 sunt reprezentate în diagramele de timp din Fig.6.23.

Fig.6.23 DetecÛia defectelor de tip delay prin scanare avansat|

Schimbarea brusc| a testului (t1 6 t2) are loc pe durata fazei 5 în diagrama de
mai sus. Frontul de ceas marcat cu 6 produce r|spunsul cu eventuale erori
cauzate de defectele de tip delay. Observarea biÛilor r|spuns capturaÛi în
bistabilii sdff1, sdff2, sdff3 are loc pe durata operaÛiei 1 corespunz|toare
urm|toarei perechi de teste t1, t2.
O parte dintre defectele de tip delay pot fi detectate şi cu lanÛuri de
scanare normale. Gradul mai mic de acoperire se datoreaz| faptului c| testul
t2 nu poate fi ales complet independent de t1. Primul test (t1) poate fi ales în
mod arbitar. Componentele celui de-al doilea test (t2) aplicate la intr|rile direct
accesibile (In1, In2, In3 şi In4 din exemplul anterior) pot fi independente de t1
îns| nu şi componentele din lanÛul de scanare. În acelaşi plan de testare se pot
combina dou| metode de construire a perechilor de teste t1, t2 dup| cum se arat|
în diagramele de timp desenate în Fig.6.24.
Fronturile ceasului Ck marcate cu 1 şi 2 reprezint| momentele de început ale
testelor t1 şi respectiv t2. Captura r|spunsului este declanşat| de frontul marcat
cu 3. În ambele cazuri (a, b) intervalul de timp dintre fronturile 2 şi 3, care nu
este neap|rat egal cu o perioad| de ceas, constituie termenul de comparaÛie
pentru întârzierile de propagare.
Diagramele (a) corespund metodei normale de testare bazat| pe scanarea serie
a bistabililor, în care dup| fiecare operaÛie de deplasare se execut| câte o
singur| înc|rcare paralel|. În acest caz componentele testelor t1 şi t2 care sunt
stocate în bistabili provin din acelaşi tipar (pattern) şi se deosebesc între ele ca
urmare a deplas|rii cu o singur| poziÛie. Num|rul de diferenÛe este dependent
de pattern şi anume de num|rul de tranziÛii asociate acestuia. De exemplu,
Circuite Logice SecvenÛiale Sincrone 331

Fig.6.24 DetecÛia defectelor de tip delay cu lanÛuri de scanare normale

tiparul de 9 biÛi 110100101 conÛine 6 tranziÛii, adic| 6 schimb|ri între oricare


doi biÛi consecutivi. Prin deplasarea la dreapta cu o singur| poziÛie se obÛine
structura (11010010 (bitul ( poate fi 0 sau 1). Suma modulo 2
1 1 0 1 0 0 1 0 1r
(1 1 0 1 0 0 1 0
? 0 1 1 1 0 1 1 1
arat| 6 sau 7 deosebiri dintre testele t1 şi t2.
Metoda de testare corespunz|toare diagramelor (b) schimb| radical modul de
obÛinere a testului t2. La sfârşitul unei operaÛii de scanare se produce testul t1
dup| care se comut| în modul de înc|rcare paralel|. Frontul de ceas 2 încarc|
în lanÛul de scanare componentele testului t2; acestea sunt determinate atât de
t1 cât şi de blocul combinaÛional. Modul de înc|rcare paralel| se menÛine pe un
interval de timp egal cu dou| perioade de ceas.

6.1.3 Standardul de scanare IEEE 1149.1


Testarea la nivel de plac| (PCB - printed circuit board) este semnificativ
mai complicat| decât testarea la nivel de circuit integrat (chip). Reducerea
costurilor asociate cu testarea pl|cilor poate fi realizat| prin extinderea scan|rii
la ansambluri de chip-uri. Pentru aceasta fiecare chip component trebuie s|
îndeplineasc| un set suplimentar de reguli de proiectare care vizeaz| în
principal padurile sau celulele I/O. Regulile generale referitoare la sistemele
digitale sunt cuprinse în standardul IEEE 1149.1. Limbajul de descriere
hardware asociat este numit Boundary-Scan Description Language (BSDL).
În prezent exist| o familie de standarde, IEEE 1149.x, care acoper| şi testarea
332 Cap.6 Testarea circuitelor secvenÛiale sincrone

sistemelor în care exist| paduri analogice şi/sau paduri digitale de mare vitez|,
a reÛelelor de comunicaÛie digitale cu cuplaje AC şi/sau mod de transmisie
diferenÛial, etc.
Standardul IEEE 1149.1 defineşte un protocol de testare şi un tip de
celul| I/O care s| permit| configurarea padurilor într-un registru de deplasare,
numit boundary-scan register. Protocolul de testare se refer| la chip-urile
digitale precum şi la partea digital| din cadrul chip-urilor analog-digitale. De
asemenea, pentru implementarea protocolului este necesar| o anumit| logic|
suplimentar| care trebuie inclus| în fiecare chip.
În Fig.6.25 se indic| transformarea de principiu care se aplic| celulelor
I/O digitale, indiferent de direcÛia acestora (intrare, ieşire, bidirecÛional). Sunt
excluse padurile de alimentare şi cele analogice.

Fig.6.25 Conversie “celul| I/O — celul| boundary-scan”

Circuitele integrate care sunt proiectate dup| standardul IEEE 1149.1 se pot
interconecta astfel încât s| se obÛin| lanÛuri sau registre de scanare a padurilor
(boundary-scan chain) dup| cum se arat| în exemplul urm|tor.

Fig.6.26 Registru de scanare la nivel de plac|


Circuite Logice SecvenÛiale Sincrone 333

Cele 3 chip-uri din Fig.6.26 pot s| aib| şi lanÛuri interne proprii de scanare;
acestea pot fi conectate la rândul lor la registrul boundary-scan.
Structura tipic| a unei celule boundary-scan (scan I/O) digitale este desenat|
în Fig.6.27. Terminalele IN şi OUT se conecteaz| la un pad şi respectiv la o
intrare în miezul (core) chip-ului sau la o ieşire din miez şi respectiv la un pad,
dup| cum direcÛia este “intrare” sau “ieşire”. Celulele boundary-scan
bidirecÛionale şi cele cu 3 st|ri conÛin mai multe componente de circuit.

Fig.6.27 Celul| scan I/O

Bistabilul dr1 (data register 1) se poate înc|rca la frontul pozitiv al ceasului


clock_dr fie de la terminalul IN când shift_dr = 0, fie din lanÛul de scanare când
shift_dr = 1. Aceste dou| situaÛii corespund operaÛiilor captur| şi respectiv
scanare. Semnalul de control Normal/Test este prioritar şi stabileşte fluxul
normal al datelor de la IN la OUT sau forÛeaz| în nodul OUT valoarea logic|
din bistabilul dr2 (data register 2); în ultimul caz, frontul pozitiv al ceasului
update_dr realizeaz| operaÛia update în nodul de ieşire.
Logica suplimentar| cu ajutorul c|reia se implementeaz| protocolul de
testare definit de standardul IEEE 1149.1 este reprezentat| simplificat în
Fig.6.28. FuncÛiile de baz| ale chip-ului sunt implementate de “Logica intern|
specific| aplicaÛiei”. Acest bloc poate s| conÛin| la rândul lui anumite p|rÛi
auxiliare cum ar fi registre de scanare cu pinii suplimentari aferenÛi şi registre
BIST (built-in self-test); acestea din urm| sunt prezentate în subcapitolul
urm|tor.
Arhitectura boundary-scan conÛine urm|toarele componente hardware:
- pinii TDI (Test Data Input), TDO (Test Data Output), TMS (Test Mode
Signal), TCK (Test Clock) şi opÛional TRST (Test Reset);
Acest ansamblu de pini suplimentari poart| numele TAP (Test Access Port).
334 Cap.6 Testarea circuitelor secvenÛiale sincrone

Fig.6.28 Chip cu arhitectur| boundary-scan IEEE 1149.1

- maşina secvenÛial| numit| TAP Controller;


- registrul de instrucÛiuni şi decodificatorul asociat;
- registre de test diverse: opÛionale, obligatorii (registrul boundary-scan,
registrul bypass cu lungimea 1) sau specifice proiectului.
Procedura tipic| de testare se deruleaz| astfel:
1) O instrucÛiune de test se încarc| serie în registrul de instrucÛiuni prin intrarea
TDI;
2) InstrucÛiunea de test este decodificat| şi se obÛin semnalele de control
necesare configur|rii logicii de test;
3) O secvenÛ| de test se încarc|, tot prin intermediul liniei TDI, în registrul de
date care a fost selectat;
4) R|spunsul sistemului este capturat în diferite registre de date;
5) Simultan cu deplasarea serie a r|spunsului capturat pe linia de ieşire TDO,
Circuite Logice SecvenÛiale Sincrone 335

are loc înc|rcarea unei noi secvenÛe de test;


6) Paşii 3, 4 şi 5 se repet| pentru toate secvenÛele de test asociate cu
instrucÛiunea de test.
Graful de tranziÛie a st|rilor maşinii secvenÛiale TAP Controller este
desenat în Fig.6.29. St|rile se pot schimba la frontul pozitiv al ceasului TCK
în funcÛie de semnalul de intrare TMS, ale c|rui valori logice sunt indicate
pentru fiecare arc. Ceasul TCK este independent de ceasurile chip-urilor
scanate. St|rile care conÛin în nume DR sunt alocate pentru controlul tuturor
registrelor de date iar cele care conÛin în nume IR sunt alocate numai pentru
controlul registrului de instrucÛiuni.

Fig.6.29 Graful de tranziÛie a st|rilor TAP Controller


336 Cap.6 Testarea circuitelor secvenÛiale sincrone

Maşina secvenÛial| genereaz| semnalele de control ClockDR, ShiftDR,


UpdateDR, ClockIR, ShiftIR, UpdateIR, Select (pentru MUX-ul conectat la
pinul TDO), un semnal de ceas derivat din TCK şi un semnal de autorizare
Enable.
Starea Test-Logic-Reset corespunde funcÛion|rii normale a chip-ului, în care
logica boundary-scan nu este autorizat|. În starea Run-test/Idle se aşteapt|
terminarea unor operaÛii de tip BIST sincronizate cu ceasul TCK. Cele 7 st|ri
de control al registrelor de date au urm|toarele semnificaÛii:
Select-DR-Scan este o stare temporar| din care se poate iniÛia o secvenÛ| de
scanare, cu TMS = 0.
În starea Capture-DR toate registrele selectate de instrucÛiunea curent| se
încarc| în paralel.
Toate registrele de date legate între TDI şi TDO, specificate de instrucÛiunea
curent| (stocat| în registrul de instrucÛiuni) deplaseaz| informaÛia cu o poziÛie
la fiecare front activ al ceasului TCK în stare Shift-DR. Cu TMS = 0 starea
Shift-DR se poate menÛine oricâte perioade de ceas TCK consecutive pentru a
termina deplasarea planificat|.
Exit1-DR este o stare temporar| în care datele curente din registre se
p|streaz|.
Pe durata st|rii Pause-DR operaÛiile de scanare sunt oprite pentru a permite
circuitului master al bus-ului de test situat pe plac| s| furnizeze din când în
când date noi. Pauze de acest fel au loc în cazul secvenÛelor de test cu lungime
mare.
Starea Exit2-DR indic| fie sfârşitul st|rii Pause-DR, ceea ce va conduce la
reluarea operaÛiilor de deplasare, fie sfârşitul operaÛiilor de deplasare.
În starea Update-DR se face înc|rcarea latch-urilor care dubleaz| bistabilii
unor registre de date (de exemplu dr2 în Fig.6.27).
St|rile alocate pentru controlul registrului de instrucÛiuni au semnificaÛii
similare cu cele prezentate mai sus.
Registrul de instrucÛiuni are fiecare celul| alc|tuit| din câte dou|
elemente de memorie, un bistabil şi un latch, la fel ca registrul din Fig.6.22.
Structura permite recepÛionarea prin deplasare serie a unei noi instrucÛiuni în
timp ce instrucÛiunea curent| se menÛine la ieşirile registrului.
Standardul IEEE 1149.1 prevede executarea obligatorie a urm|toarelor patru
instrucÛiuni de test: BYPASS, SAMPLE, PRELOAD şi EXTEST. OpÛional se
pot include instrucÛiunile INTEST, RUNBIST, CLAMP, IDCODE, USRCODE
şi HIGHZ.
InstrucÛiunea BYPASS determin| “şuntarea” registrului boundary-scan sau a
lanÛurilor de scanare interne legate între pinii TDI şi TDO, de c|tre registrul
bypass. Atunci când testarea unui circuit de pe plac| se termin|, acel circuit
trebuie comutat în modul bypass pentru a reduce lungimea lanÛului global de
Circuite Logice SecvenÛiale Sincrone 337

scanare şi de a creşte viteza de aplicare a testelor.


InstrucÛiunea SAMPLE permite capturarea datelor de la pinii circuitelor în
funcÛionarea normal| şi plasarea lor în registrul boundary-scan. Capturarea
datelor sau eşantionarea se face cu ceasul TCK. “Instantaneele” obÛinute se
extrag din registrul de scanare şi se analizeaz|.
InstrucÛiunea PRELOAD determin| deplasarea datelor de test în registrul
boundary-scan f|r| ca acestea s| interfereze cu datele din funcÛionarea
normal|, dup| cum se arat| în Fig.6.30. Dup| ce o secvenÛ| de test a fost
deplasat| în lanÛul format din celulele de tip dr1, aceasta se copiaz| paralel în
celulele de tip dr2; lanÛul de celule dr1 este disponibil pentru o nou| sarcin|.
Liniile mai groase reprezint| c|ile de date care sunt activate.

Fig.6.30 ExecuÛia instrucÛiunii PRELOAD

InstrucÛiunea EXTEST are ca scop verificarea interconexiunilor de pe plac|.


Aceast| operaÛie nu implic| logica de aplicaÛie a niciunui chip, dup| cum se
arat| în Fig.6.31. Semnalele care intr| în chip, de pe plac|, printr-un pin de tip
Input sunt capturate şi transmise înapoi pe plac| printr-un pin Output.
InstrucÛiunea INTEST are ca scop verificarea operaÛiilor scanare (shift), update
şi captur| ale tuturor celulelor scan I/O dintr-un chip. Aceste 3 faze se execut|
alternativ, de mai multe ori.
InstrucÛiunea RUNBIST permite tuturor chip-urilor de pe plac| (care au aceast|
instrucÛiune implementat|) s| execute în paralel funcÛiile proprii de autotestare.
OperaÛia are loc în starea Run-test/Idle a TAP Controller-ului. Logica BIST şi
semnalele de control aferente dintr-un chip nu sunt cuprinse în standardul IEEE
1149.1 (nici lanÛurile de scanare interne nu sunt acoperite de acest standard).
338 Cap.6 Testarea circuitelor secvenÛiale sincrone

Fig.6.31 ExecuÛia instrucÛiunii EXTEST

InstrucÛiunea CLAMP forÛeaz| la toÛi pinii de ieşire valorile stocate în bistabilii


(sau latch-urile) de tip dr2; aceste valori binare au fost deplasate în celulele
scan I/O anterior, pe durata unei instrucÛiuni PRELOAD. De asemenea, lanÛul
boundary-scan dintre pinii TDI şi TDO este şuntat de registrul bypass.
InstrucÛiunea IDCODE se utilizeaz| atunci când registrul de identificare de 32
biÛi (ID- register) este inclus în chip; ea determin| înc|rcarea ID-register cu
anumite informaÛii “confidenÛiale” stocate undeva în interiorul chip-ului (cum
ar fi codul fabricantului, versiunea chip-ului, num|rul componentei) şi apoi
extragerea acestora prin intermediul lanÛului de scanare.
InstrucÛiunea USERCODE este util| în cazul chip-urilor care pot fi programate
în diferite moduri. Un cod de 32 de biÛi stocat undeva în interiorul chip-ului şi
care conÛine informaÛii de programare a chip-ului respectiv se încarc| în ID-
register şi se extrage apoi prin deplasare serie.
InstrucÛiunea HIGHZ determin| starea de înalt| impedanÛ| la toÛi pinii cu
direcÛia ieşire şi şuntarea c|ii TDI-TDO de c|tre registrul bypass.
Exist| mai multe arhitecturi boundary-scan la nivel de plac| sau la nivel
de sistem (ansamblu format din mai multe pl|ci).
În Fig.6.32 sunt desenate trei arhitecturi de testare la nivel de plac|. Cel mai
simplu controller al bus-ului de test al pl|cii genereaz| doar 4 semnale şi
corespunde configuraÛiei în inel din Fig.6.32a. În acest caz toate chip-urile
execut| simultan acelaşi tip de operaÛie (captur|, shift sau update) îns| este
posibil ca instrucÛiunile curente s| nu fie identice. Unele chip-uri execut|
instrucÛiunea EXTEST, altele BYPASS ş.a.m.d. IniÛial registrul boundary-scan
Circuite Logice SecvenÛiale Sincrone 339

Fig.6.32 Arhitecturi boundary-scan la nivel de plac|


340 Cap.6 Testarea circuitelor secvenÛiale sincrone

are lungimea maxim| iar pe m|sur| ce unele chip-uri intr| în modul BYPASS
lungimea lui se reduce.
ConfiguraÛia de test în inel cu semnale TMS distincte din Fig.6.32b permite ca
fiecare chip s| fie testat în mod independent, doar c| exist| un singur lanÛ de
scanare a pinilor.
ConfiguraÛia stea din Fig.6.32c implic| conectarea împreun| ale ieşirilor TDO
din cele N chip-uri. Pentru evitarea conflictelor este obligatoriu ca numai una
singur| dintre aceste ieşiri s| fie activ| la un moment dat. În mod independent
se pot iniÛia procese diferite în fiecare chip, inclusiv de autotestare. Un singur
chip poate s| transmit| la un moment dat informaÛii c|tre controller-ul de test
situat pe plac|, utilizând propriul registru boundary-scan; acesta se conecteaz|
la liniile TDI şi TDO ale pl|cii.
Cea mai utilizat| arhitectur| boundary-scan la nivel de sistem, numit|
multidrop, este cea desenat| în Fig.6.33. Controller-ul de test master al
sistemului genereaz| doar 4 semnale de control. Fiecare plac| trebuie s|

Fig.6.33 Arhitectur| boundary-scan la nivel de sistem


Circuite Logice SecvenÛiale Sincrone 341

conÛin| o component| adresabil| (Multi-Drop Device) prin intermediul c|reia


se realizeaz| selecÛia unei singure pl|ci, care se va conecta la bus-ul master
pentru un anumit interval de timp. SelecÛia pl|cilor are la baz| un protocol
special iniÛiat de Master Test Controller.

6.2 Autotestarea

6.2.1 Generalit|Ûi
Tehnicile de proiectare built-in self-test (BIST) sunt forme mai avansate
de proiectare pentru testabilitate (DFT) decât scanarea; BIST se refer| la
capacitatea unui sistem de a se testa singur, adic| de a-şi genera singur teste şi
de a-şi analiza într-o anumit| form| propriile r|spunsuri. Pentru suportul
acestor operaÛii trebuie introdus| logic| suplimentar| sau auxiliar|.
Exist| dou| categori distincte de tehnici BIST:
1) on-line BIST, în care autotestarea are loc pe durata funcÛion|rii normale a
sistemului şi poate fi concurent| sau nonconcurent|;
Testarea concurent| are loc chiar în timp ce sistemul proceseaz| efectiv
informaÛii iar cea nonconcurent| are loc în starea Idle, adic| atunci când
sistemul este inactiv sau în aşteptare.
2) off-line BIST, în care autotestarea se face atunci când sistemul nu se afl| în
funcÛionare normal|.
Deşi nu au capacitatea de a detecta defecte în timp real (tranzitorii,
intermitente), tehnicile off-line sunt foarte utilizate în proiectarea circuitelor
integrate. Schema tipic| off-line BIST este cea desenat| în Fig.6.34.

Fig.6.34 Sistem digital de tip off-line BIST


342 Cap.6 Testarea circuitelor secvenÛiale sincrone

Generatoarele de teste şi analizoarele de semn|tur| sunt alc|tuite, în


general, din registrele sistemului original la care se adaug| componente
suplimentare pentru a obÛine registre cu mai multe moduri de operare. Astfel
de registre sunt prezentate în cap.4.
Din punctul de vedere al testelor aplicate, CUT este testat exhaustiv (dac| are
un num|r relativ mic de intr|ri), pseudo-exhaustiv sau pseudo-aleator.
Analizorul de semn|tur| realizeaz| o comprimare a r|spunsurilor CUT sub
forma unei semn|turi.
Controller-ul BIST realizeaz| sincronizarea TPG, CUT şi ORA. De
asemenea, face comparaÛia dintre semn|tura generat| de ORA şi semn|tura de
referinÛ| stocat| în interiorul chip-ului. Rezultatul comparaÛiei este comunicat
în exterior, c|tre un controller de test master care gestioneaz| un proces de
testare mai complex, la nivel de plac| sau de sistem, bazat pe scanare.
Avantajele tehnicilor BIST off-line sunt urm|toarele:
- se elimin| în multe situaÛii necesitatea unui echipament de testare extern;
- pot fi detectate defecte de tip delay sau defecte care nu au fost modelate;
- se pot realiza diagnostic|ri foarte eficiente;
- costurile de testare se micşoreaz| considerabil.
Dezavantajele principale sunt, ca şi în cazul scan|rii, creşterea ariei şi
reducerea vitezei maxime de operare a sistemului. De asemenea, analiza
r|spunsurilor bazat| pe comprimarea în semn|turi reduce gradul de acoperire
a defectelor datorit| fenomenelor de compensare sau de mascare a erorilor.
În cazul aplic|rii tehnicilor BIST off-line sistemelor cu arhitecturi orientate pe
bus-uri (magistrale) penalit|Ûile de arie sunt mai mici. Acest lucru se poate
justifica cu ajutorul Fig.6.35. Registrele R1 şi R2 se transform| în generator de
teste şi respectiv în analizor de semn|tur|, în modul BIST, pentru mai multe

Fig.6.35 Sistem cu BIST off-line parÛial


Circuite Logice SecvenÛiale Sincrone 343

blocuri din sistem (Combk). Registrele Rink şi Routk asociate blocului


combinaÛional Combk nu trebuie modificate, singurul lor mod de operare fiind
înc|rcarea paralel|. La un moment dat se pot comprima r|spunsurile de la un
singur bloc. Blocurile conectate succesiv la TPG şi ORA în modul BIST prin
intermediul magistralei BUS pot s| aib| complexit|Ûi oarecare (nu trebuie s|
fie neap|rat blocuri combinaÛionale).

6.2.2 Reguli BIST-design


Regulile off-line BIST-design sunt mult mai restrictive în comparaÛie cu
regulile scan-design. Pe lâng| includerea acestora din urm|, este necesar ca
toate elementele de memorie (latch-uri, bistabili) din TPG, CUT şi ORA s| fie
iniÛializate la valori logice dinainte cunoscute. Orice valoare logic|
necunoscut| X care se propag| în analizorul de semn|tur| va altera semn|tura
produs|. Sursele de valori necunoscute trebuie blocate prin introducerea
punctelor de control suplimentare. Dou| exemple sunt prezentate în Fig.6.36.

Fig.6.36 Blocarea surselor de valori necunoscute

Sursa X din Fig.6.35a a fost blocat| sau “fixat|” prin introducerea unui punct
de control al valorii 1; semnalul BIST_mode este activ High. SoluÛia din
Fig.6.35b este numit| şi bypass; sursa X este înlocuit| în modul BIST cu o
surs| care genereaz| valori logice cunoscute, atât 0 cât şi 1. Orice soluÛie de
fixare a valorilor necunoscute m|reşte penalit|Ûile de arie şi de vitez|.
Sursele de semnale care pot genera valori logice necunoscute sunt diverse:
- convertoarele analog-digitale,
- latch-urile şi bistabilii neincluşi în lanÛurile de scanare,
- memoriile SRAM şi DRAM,
- buclele de reacÛie combinaÛionale,
- semnalele de control asincron SET/RESET,
- driverele de bus cu trei st|ri,
- c|ile de propagare false şi cele critice,
- c|ile de propagare multi-ciclu,
- porturile flotante şi unele porturi bidirecÛionale.
344 Cap.6 Testarea circuitelor secvenÛiale sincrone

O alt| surs| de erori care poate s| altereze semn|turile provine din


întârzierile de propagare dintre TPG şi CUT pe de o parte şi dintre CUT şi
ORA pe de alt| parte; registrele TPG şi ORA pot fi situate la distanÛe relativ
mari faÛ| de CUT iar clock skew devine o problem|. Resincronizarea (re-
timing) este soluÛia recomandat| pentru eliminarea potenÛialelor erori. Modul
de implementare este ilustrat în Fig.6.37.

Fig.6.37 Resincronizarea c|ilor de propagare lungi

Ceasurile Ck1, Ck2 şi Ck3 aparÛin aceluiaşi domeniu de ceas (arbore de ceas).
La intrarea în orice “receptor” aflat la distanÛ| relativ mare faÛ| de sursa de
transmisie trebuie introdus registrul pipe-line format din 2 bistabili de tip D;
CUT este receptor pentru TPG şi surs| de transmisie pentru ORA.

6.2.3 Arhitecturi BIST


Exist| multe arhitecturi BIST off-line. În fiecare arhitectur| anumiÛi
bistabili sunt înlocuiÛi cu celule de memorie mai complexe, care transform|
registrele normale în registre cu mai multe moduri de operare. Aceste moduri
de operare suplimentare sunt utilizate pe durata test|rii (autotest|rii). În afar|
de shift şi hold registrele BIST au ca moduri de operare suplimentare TPG şi
ORA, adic| moduri în care registrul devine generator de teste sau analizor de
Circuite Logice SecvenÛiale Sincrone 345

semn|tur|. Tehnicile BIST off-line sunt compatibile cu scanarea intern| şi cu


boundary-scan.
În Fig.6.38 este reprezentat| arhitectura LOCST (Level sensitive scan
design On-Chip Self-Test).

Fig.6.38 Arhitectura LOCST

Registrele R1 şi R2 sunt formate din celule boundary-scan. TPG şi ORA sunt


activate numai în modul test (BIST); componentele acestora nu sunt utilizate
în funcÛionarea normal|. Procesul de testare se desf|şoar| astfel:
1) TPG, lanÛul de scanare format din R1, R2 şi registrele de scanare din
interiorul CUT precum şi ORA se încarc| cu o secvenÛ| de iniÛializare aplicat|
la intrarea suplimentar| Scan-in;
2) Se activeaz| modul autotestare, adic| se autorizeaz| TPG, ORA şi se
dezactiveaz| ceasurile normale pentru registrele R1, R2;
3) Se execut| autotestarea prin repetarea alternativ| a doi paşi şi anume
- un test generat de TPG se deplaseaz| în lanÛul de scanare şi simultan,
informaÛia extras| este comprimat| de c|tre ORA;
De obicei TPG este un generator de secvenÛe pseudoaleatoare iar perioada
secvenÛelor generate este egal| cu 2 la puterea num|rul de celule din TPG. Un
test are lungimea dictat| de lungimea lanÛului de scanare.
346 Cap.6 Testarea circuitelor secvenÛiale sincrone

- se actveaz| ceasurile normale pentru o singur| perioad| (un singur front


activ) şi se încarc| lanÛul de scanare (mai puÛin R1).
Paşii de mai sus se repet| pân| când se obÛine un grad acceptabil de acoperire
a defectelor.
4) Controller-ul BIST (On-chip monitor) compar| semn|tura generat| de ORA
dup| aplicarea tuturor testelor cu semn|tura de referinÛ| stocat| în interiorul
chip-ului.
Pe linia Scan-out se pot extrage in exteriorul chip-ului diverse informaÛii,
inclusiv secvenÛele de intrare în ORA.
În Fig.6.39 este reprezentat| arhitectura STUMPS (Self-Testing Using
MISR and Parallel Sequence generator). TPG este un generator de teste
pseudo-aleatoare iar ORA este un registru de semn|tur| de tip MISR.
Arhitectura se preteaz| la sisteme cu mai multe lanÛuri de scanare; celulele
boundary-scan nu sunt utilizate.

Fig.6.39 Arhitectura STUMPS

Toate c|ile de scanare din interiorul CUT sunt alimentate în paralel de la


ieşirile TPG. Lungimea secvenÛelor pseudo-aleatoare generate este egal| cu
lungimea celui mai mare registru de scanare. Schema din figura de mai sus se
poate aplica atât la nivel de chip cât şi la nivel de plac|.
Arhitectura desenat| în Fig.6.40, numit| CBIST (concurrent BIST), ia în
considerare numai autotestarea blocurilor combinaÛionale. Toate componentele
din logica BIST sunt suplimentare, nefiind utilizate în funcÛionarea normal|.
Nu se utilizeaz| registrele de scanare şi nici boundary-scan. Prin multiplexare-
demultiplexare aceeaşi logic| BIST se poate utiliza pentru mai multe blocuri
Circuite Logice SecvenÛiale Sincrone 347

combinaÛionale. Aceast| arhitectur| are tr|s|turi de BIST on-line.

Fig.6.40 Arhitectura CBIST

Autotestarea off-line se realizeaz| la comanda Normal/Test = 1. Semnalul


Enable devine ativ şi autorizeaz| funcÛionarea TPG şi ORA. La intr|rile CUT
se aplic| testele generate de TPG iar r|spunsurile CUT sunt comprimate în
semn|tur| de ORA.
Autotestarea on-line se realizeaz| în modul normal de operare, la comanda
Normal/Test = 0. La intr|rle CUT se aplic| secvenÛele de intrare normale. TPG
şi ORA se iniÛializeaz| fiecare în câte o stare de aşteptare, prin intermediul
unor semnale de control nereprezentate în Fig.6.40. Când valorile binare
aplicate la intr|rile normale la un moment dat sunt identice cu starea TPG,
comparatorul genereaz| un impuls High (Enable = 1) care determin|
348 Cap.6 Testarea circuitelor secvenÛiale sincrone

schimbarea st|rii TPG şi înc|rcarea r|spunsului CUT în ORA. Ori de câte ori
tiparul de biÛi aplicat la intr|rile normale este identic cu testul preg|tit dinainte
de c|tre TPG, r|spunsul CUT la acel test este capturat de c|tre ORA. Când
TPG ajunge în anumite st|ri predefinite, semn|tura stocat| în ORA este
verificat|.
Pe durata autotest|rii, TPG şi ORA pot s| fie unul şi acelaşi bloc. Aceast|
caracteristic| este specific| arhitecturii CSTP (Circular Self-Test Path).
Structura din Fig.6.41, alc|tuit| din registre şi blocuri combinaÛionale, este de
tip CSTP. Registrele R1, R2, R6, R7 şi R8 sunt alc|tuite din bistabili de tip D-
BIST a c|ror structur| este indicat| în Fig.6.41. Celelalte registre (R3, R4 şi
R5) conÛin bistabili D simpli. Arhitectura impune dou| condiÛii:
- toate intr|rile şi ieşirile primare trebuie s| fie asociate cu bistabili D-BIST;
- toate celulele de memorie din sistem trebuie s| fie iniÛializabile.

Fig.6.40 Arhitectur| CSTP


Circuite Logice SecvenÛiale Sincrone 349

Fig.6.41 Bistabil de tip D-BIST

Registrele R1, R2, R6, R7 şi R8 formeaz| un registru de deplasare cu reacÛie


al c|rui polinom caracteristic are forma 1 + xm, unde m este num|rul de celule.
Acest registru îndeplineşte pe durata test|rii ambele roluri, de generator de
teste (TPG) şi de analizor de semn|tur| (ORA).
Registrele R3, R4 şi R5 nu trebuie s| aib| comenzi SET/RESET pentru a fi
iniÛializate. Dac| se menÛine activ| comanda asincron| de reset a registrelor
R1, R2, R6, R7 şi R8 (adic| RN = 0) atunci primul front activ de ceas încarc|
registrele R3 şi R4 cu valorile logice determinate de blocurile C1 şi respectiv
C2. Al doilea front activ de ceas încarc| registrul R5 cu valorile determinate
de blocul C3.
Arhitectura BIST on-line concurent| are forma general| reprezentat| în
Fig.6.42. Blocurile B1, B2, B3, ... sunt p|rÛi ale sistemului digital şi pot
îndeplini funcÛii oarecare, combinaÛionale şi/sau secvenÛiale. Deoarece
(auto)testarea trebuie f|cut| în timp ce sistemul opereaz| normal, detecÛia
erorilor nu trebuie s| se bazeze pe cunoaşterea testelor şi implicit nici pe
cunoaşterea r|spunsurilor. Deşi pare imposibil, acest lucru este realizabil.
Toate funcÛiile la nivelul fiec|rui bloc trebuie redefinite cu ajutorul tehnicilor
de codificare. Prin codificare se pot obÛine propriet|Ûi cunoscute şi invariante
pentru toate r|spunsurile corecte posibile ale unui bloc funcÛional.
R|spunsurile corecte constituie cuvinte de cod. Blocurile de control locale
Checkerk din Fig.6.42 sunt combinaÛionale şi au rolul de a verifica apartenenÛa
r|spunsurilor blocului Block la mulÛimea cuvintelor de cod Mk. Orice r|spuns
care nu este cuvânt de cod conÛine cu certitudine erori iar acestea indic|
prezenÛa defectelor. Dac| îns| un anumit r|spuns este cuvânt de cod acest lucru
nu înseamn| neap|rat absenÛa erorilor. Este posibil ca anumite defecte s|
“transforme” anumite cuvinte de cod tot în cuvinte de cod; num|rul acestor
cazuri depinde în principal de metoda de codificare. Orice metod| de codificare
reprezint| o form| de introducere a redundanÛei informaÛionale; cu cât
redundanÛa introdus| este mai mare cu atât mai mult scad şansele ca în prezenÛa
defectelor s| se obÛin| ca r|spunsuri cuvinte de cod. RedundanÛa implic| îns|
350 Cap.6 Testarea circuitelor secvenÛiale sincrone

Fig.6.42 Arhitectura BIST on-line concurent|

consum suplimentar de arie, putere disipat| şi eventual sc|derea vitezei


maxime de operare.
Un exemplu de cod utilizat în tehnicile de proiectare BIST on-line este codul
i-din-n; cuvintele acestui cod au fiecare câte n biÛi iar dintre aceştia exact i biÛi
au valoarea logic| 1.
Schema din Fig.6.42 are o rezoluÛie de diagnosticare relativ mare. Aceasta
depinde de num|rul de circuite de control local. Circuitul de control global
poate s| identifice circuitul local care a semnalizat eroarea şi implicit blocul
funcÛional.
Circuite Logice SecvenÛiale Sincrone 351

Cap.7 PROIECTAREA CIRCUITELOR DIGITALE


cu Verilog HDL

7.1 Generalit|Ûi

Proiectarea unui bloc sau sistem digital are la baz| modelarea sau
descrierea printr-un limbaj de tip HDL (hardware description language).
Limbajul prezentat în acest capitol este Verilog. Un model sau o descriere
Verilog a unui circuit digital este un text; acesta trebuie s| respecte un set de
reguli care definesc sintaxa limbajului. FuncÛionarea circuitului este
determinat| de semantica textului. Într-un model Verilog pot fi mixate descrieri
structurale cu descrieri funcÛionale sau comportamentale. De asemenea,
limbajul Verilog trateaz| în mod natural structurile ierarhice.
Pe parcursul etapelor de proiectare care alc|tuiesc flow-ul digital sunt
necesare trei tipuri de tool-uri sau instrumente soft şi anume:
- simulator digital şi/sau tool de verificare formal|,
- tool de sintez| logic|,
- tool de plasare şi routare.
Cu ajutorul simulatorului se valideaz| codul Verilog iniÛial; aceast| etap|
este numit| şi simulare pre-sintez|. Dup| etapa de sintez| logic| din codul
Verilog iniÛial se obÛine un netlist de tip Verilog. Simularea post-sintez|
evalueaz| acest rezultat luând în considerare fişiere tehnologice şi de întârziere.
Simularea implic| în general eforturi mari de calcul. Anumite operaÛii cum ar
fi cele de stabilire a echivalenÛelor funcÛionale între dou| coduri Verilog, între
un cod Verilog şi un netlist Verilog sau între dou| netlist-uri Verilog pot fi
realizate mai avantajos ca efort de calcul cu ajutorul tool-urilor de verificare
formal|. Verificarea formal| nu utilizeaz| informaÛii tehnologice sau de
întârziere ci un set de proceduri matematice.
Fişierele de intrare şi de ieşire dintr-un tool de sintez| logic| sunt indicate
în Fig.7.1. Întârzierile specificate în modelul Verilog sunt valabile pentru
simulatorul digital dar nu sunt luate în considerare de c|tre tool-ul de sintez|.
Întârzierile care produc efecte în netlist-ul de ieşire sunt cele specificate prin
intermediul constrângerilor de timp; tool-ul de sintez| are un limbaj propriu de
programare, diferit de limbajul Verilog.
Rezultatul sintezei este reprezentat de dou| fişiere: un netlist Verilog şi un sdf
(standard delay format).
352 Cap.7 Proiectarea circuitelor digitale cu Verilog

Fig.7.1 Sinteza logic| - intr|ri şi ieşiri

Intr|rile şi ieşirile din tool-ul de plasare şi routare sunt indicate în Fig.7.2.


Netlist-ul Verilog de intrare este cel obÛinut dup| etapa de sintez| logic|. De
asemenea, fişierul sdf generat de tool-ul de sintez| logic| ce conÛine estim|rile
iniÛiale de întârziere urmeaz| s| fie “corectat” în mai mulÛi paşi de tool-ul de
plasare şi routare. Acest proces de ajustare a informaÛiilor de întârziere odat|
cu iteraÛiile de plasare şi routare se numeşte back annotation. Dup| plasarea
final| a componentelor/celulelor ce alc|tuiesc blocul sau sistemul proiectat şi
routarea detaliat| se obÛin fişierele finale. Netlist-ul de ieşire conÛine şi arborele
de ceas; acesta este sintetizat şi verificat de c|tre tool-ul de plasare şi routare.
InformaÛiile referitoare la layout sunt conÛinute în fişierele de tip gds (graphic
data system) şi lef (library exchange format). Un fişier de tip gds poate s|
conÛin| toate layer-ele tehnologice; fişierul de tip lef conÛine numai informaÛii
necesare pentru routare.

Fig.7.2 Plasare şi routare - intr|ri şi ieşiri


Circuite Logice SecvenÛiale Sincrone 353

7.2 Digital design flow


Flow-ul tipic de proiectare a unui sistem digital este desenat în Fig.7.3.

Fig.7.3 Digital design flow


354 Cap.7 Proiectarea circuitelor digitale cu Verilog

Primele trei etape din flow-ul de proiectare tipic desenat în Fig.7.3 sunt
numite şi etape pre-sintez|:
- specificarea arhitecturii sistemului digital şi a parametrilor electrici,
- scrierea modelelor Verilog pentru sistemul digital şi test bench-ul asociat,
- simularea exhaustiv|.
Circuitul sau schema de simulare a sistemului digital care se proiecteaz| se
numeşte şi test bench.
Modelul Verilog ce urmeaz| s| fie sintetizat este numit deseori şi cod RTL
(register transfer language); RTL este o form| de reprezentare a circuitelor
digitale şi anume ca reÛea de registre şi blocuri combinaÛionale între care au loc
transferuri de informaÛii. Un circuit digital poate s| fie reprezentat sub mai
multe forme, numite şi nivele de reprezentare:
- system level;
În descrierea funcÛion|rii se utilizeaz| sisteme de ecuaÛii matematice.
- RTL level;
Se obÛine prin rescrierea ecuaÛiilor matematice utilizând un limbaj de tip HDL.
- gate level;
Este o form| de reprezentare obÛinut| dup| sinteza logic|. Circuitul are o
structur| detaliat| în care sunt interconectate diverse celule standard (porÛi
logice de tip NAND, NOR, XOR, XNOR, buffere şi inversoare, structuri de tip
AO, AOI, OA şi OAI, MUX, DMUX, FullAdder, latch-uri, bistabili, etc.).
- transistor level (reÛele de tranzistoare);
- physical level (layout).
Sinteza logic| include DFT (lanÛuri de scanare, boundary scan) şi BIST.
Etapele 5÷12 sunt numite şi etape post-sintez|. Dintre acestea, 5 şi 6 sunt etape
pre-layout iar 7÷12 sunt etape post-layout.
EchivalenÛa dintre netlist-ul rezultat dup| sinteza logic| şi codul RTL de
intrare în tool-ul de sintez| se demonstreaz| prin verificare formal| (etapa 5).
În lipsa unui tool de verificare formal| se poate utiliza un simulator digital.
Analiza de timp static| STA (static timing analysis) din etapa 6 are ca
scop identificarea bistabililor la care nu sunt respectaÛi parametrii tsetup şi thold.
Dac| abaterile sunt minore atunci corecÛiile pot fi amânate pân| la urm|toarea
analiz| STA (etapa 9); altfel, se reface sinteza impunând alte condiÛii de
optimizare. Tot în etapa 6 se genereaz| fişierele design.sdf şi constraints.sdf.
Primul fişier conÛine informaÛiile de întârziere ale c|ilor din structura
sistemului, estimate înainte de construirea layout-ului şi se utilizeaz| în
simulare. InformaÛiile din fişierul constraints.sdf constituie un ghid pentru
floorplan-ul iniÛial, adic| pentru prima versiune de plasare a celulelor în layout.
În etapa 7 se realizeaz| o variant| de layout în care se urm|reşte numai
optimizarea plas|rii sau poziÛion|rii componentelor, nu şi a leg|turilor dintre
ele. Layout-ul include şi arborele de distribuÛie a semnalului de ceas, ceea ce
Circuite Logice SecvenÛiale Sincrone 355

înseamn| modificarea netlist-ului obÛinut dup| sinteza logic|. Ca urmare este


necesar| o nou| verificare formal|, de tip netlist versus netlist (etapa 8). Prin
analiza STA din etapa 9 se evalueaz| calitatea plas|rii celulelor; are loc o
updatare a fişierului design.sdf.
Dup| rezolvarea problemelor de timing (setup şi hold) detectate în etapa
9 se trece la optimizarea conexiunilor dintre celule, adic| la routarea detaliat|
(etapa 10). Valorile finale ale întârzierilor sunt extrase la analiza STA din etapa
11, dac| nu apar probleme de timing. Se face şi updatarea design.sdf.
Urmeaz| etapa 12 cu verific|rile finale ale layout-ului, anume DRC
(design rule checking) şi LVS (layout versus schematic). Simularea post-layout
a sistemului proiectat este opÛional|.
Mai multe detalii referitoare la sinteza logic| sunt prezentate în Fig.7.4.
Numele comenzilor menÛionate în acest flow de sintez| (de exemplu
set_input_delay) fac parte din limbajul tool-ului de sintez|, limbaj care este
diferit de Verilog. Toate comenzile dintr-un flow de sintez| (sunt mult mai
multe decât cele indicate în Fig.7.4) pot fi incluse într-un singur script sau în
mai multe scripturi şi apoi executate.
Bibliotecile link_library şi target_library conÛin celulele standard sau
primitivele din tehnologia în care se implementeaz| proiectul (porÛi logice,
latch-uri, bistabili, etc). Biblioteca symbol_library conÛine simboluri cu
ajutorul c|rora se genereaz| diverse scheme. Biblioteca synthetic_library este
independent| de tehnologie şi conÛine diverse blocuri sintetizabile (sumatoare,
comparatoare, multiplicatoare, etc).
Contextul în care urmeaz| s| funcÛioneze blocul proiectat determin| selecÛia
celulelor standard care vor alc|tui structura acestuia. Acest context este
prezentat în Fig.7.5. VariaÛiile de proces tehnologic, tensiunea de alimentare
şi temperatura definesc condiÛiile de operare iar blocurile de intrare şi de ieşire
definesc mediul de funcÛionare.

Fig.7.5 Mediul şi condiÛiile de operare ale unui circuit


356 Cap.7 Proiectarea circuitelor digitale cu Verilog

Fig.7.4 Sinteza logic| - flow-ul de baz|


Circuite Logice SecvenÛiale Sincrone 357

InfluenÛa condiÛiilor de operare asupra vitezei sau frecvenÛei maxime de


funcÛionare a blocului proiectat este prezentat| în Fig.7.6. CondiÛiile de operare
normale şi cele extreme sunt denumite Nominal şi respectiv Worst, Best.

Fig.7.6 Viteza de operare versus condiÛii de operare

Tool-ul de sintez| încearc| s| obÛin| o structur| logic| optim|, care s|


îndeplineasc| toate constrângerile impuse.
Dup| definirea unei strategii de compilare/optimizare şi executarea comenzii
compile se obÛine netlist-ul care constituie structura logic| echivalent|
funcÛional cu codul RTL de intrare.
Este posibil ca anumite constrângeri care au fost impuse s| nu fie realiste şi
astfel s| nu poat| fi îndeplinite de structura generat|. De asemenea, priorit|Ûile
impuse pot s| conduc| la imposibilitatea îndeplinirii unor constrângeri. Din
aceste motive rezultatul sintezei trebuie analizat iar problemele detectate
trebuie rezolvate. În general sunt necesare mai multe iteraÛii în flow-ul de
sintez| pân| când se obÛine un rezultat acceptabil.

7.3 Modelarea şi simularea cu Verilog

7.3.1 Elemente de baz| ale limbajului Verilog


În orice limbaj sunt prev|zute anumite facilit|Ûi de editare prin care s| se
obÛin| aranj|ri în pagin| cât mai inteligibile. Astfel, spaÛiile şi/sau liniile l|sate
în mod intenÛionat goale sau libere, indiferent de num|rul lor, nu constituie
erori de sintax|. De asemenea, sunt foarte utile comentariile incluse în modelul
Verilog (RTL); acestea sunt tolerate atât de simulator cât şi de tool-ul de
sintez|, indiferent de locul unde sunt plasate. Comentariile care încap într-o
singur| linie se introduc prin // (dublu slash); textul de la // şi pân| la sfârşitul
liniei este considerat comentariu. Mai multe linii consecutive pot fi comentate
358 Cap.7 Proiectarea circuitelor digitale cu Verilog

prin plasarea la început şi la sfârşit a caracterelor /* (slash steluÛ|) şi respectiv


*/ (steluÛ| slash).

7.3.1.1 Sistemul de valori logice


Verilog are un set de patru valori logice predefinite: 0, 1, x şi z. Valoarea
z are semnificaÛia de înalt| impedanÛ|; x 0 {0, 1, z} reprezint| o valoare logic|
necunoscut| sau o tranziÛie necunoscut|.
Conflictele dintre driver-ele conectate în paralel sau în acelaşi nod se
rezolv| prin intermediul puterii sau forÛei asociate valorilor logice. Exist| patru
nivele de putere pentru drivere (driving strength) şi trei nivele de putere pentru
capacit|Ûi (charge storage strength). Denumirile şi ierarhizarea acestor şapte
nivele de putere sunt prezentate în tabelul urm|tor.

nivel tip nume


7 driver supply0, supply1
6 driver strong0, strong1
5 driver pull0, pull1
4 condensator large0, large1
3 driver weak0, weak1
2 condensator medium0, medium1
1 condensator small0, small1

Tabelul 7.1 Puterile valorilor logice 0 (Low) şi 1 (High)

În cazul driver-elor (porÛi logice de exemplu) puterea default este strong.


Puterile supply0 şi supply1 corespund liniilor de alimentare (gnd, vss, ...) şi
respectiv (vcc, vdd, ...).

7.3.1.2 Şiruri alfanumerice şi numere constante


Un şir alfanumeric sau un string este o succesiune de caractere scrise
între ghilimele, de exemplu “tip|reşte/22 3-*,?8 ”. String-ul trebuie s| încap|
într-o singur| linie. Anumite caractere speciale, cum ar fi new line (ENTER),
Tab, \ (back slash), “ şi % pot fi incluse în string-uri astfel:
\n, \t, \\, \” şi respectiv %%.
Orice string poate fi utilizat ca operand sau ca parte a unei expresii. În
Circuite Logice SecvenÛiale Sincrone 359

aceste cazuri fiecare caracter al string-ului este evaluat prin codul ASCII de 8
biÛi asociat. String-ul “ab 2c” este evaluat ca un num|r de 5·8 = 40 biÛi. SpaÛiile
libere (blank) din string sunt caractere ASCII; ghilimelele care definesc
începutul şi sfârşitul string-ului nu sunt luate în considerare.
Numerele constante pot fi numere întregi sau numere reale. Constantele
întregi şi f|r| semn se scriu în forma
width ‘ radix value
în care width este un num|r zecimal ce reprezint| formatul binar sau num|rul
de biÛi, radix indic| baza de numeraÛie b (2), o (8), d (10) sau h (16) iar value
este valoarea num|rului scris| cu cifrele bazei radix. Cifrele celor patru baze
sunt urm|toarele:
b Y 0, 1, x, z
o Y 0, 1, 2, 3, 4, 5, 6, 7, x, z
h Y 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, x, z
d Y 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Câmpurile width şi radix sunt opÛionale. Dac| ambele lipsesc atunci value
reprezint| un num|r zecimal scris într-un format de 32 de biÛi. Dac| lipseşte
numai width atunci formatul este 32 de biÛi (default).
Exemple de numere întregi:
592 // num|rul zecimal cinci sute nou|zeci şi doi
4 ‘ b1001 // num|rul binar 1001 sau zecimal 9
3 ‘ b01x // num|rul binar 01x
5 ‘ d6 // num|rul zecimal 6 scris cu 5 biÛi, adic| 00110
‘ o317 // num|rul binar 00000000000000000000000011001111 sau
zecimal 207
9 ‘ o3x4 // num|rul binar 011xxx100
‘ hA2F // num|rul 00000A2F în baza 16
8 ‘ h9x // num|rul binar 1001xxxx
7_349 // num|rul zecimal 7349
12 ‘ b0100_1110_0011 // num|rul binar 010011100011
12 ‘ b_0100_1110_0011 // eroare de sintax|: nu se accept| caracterul
underscore sau underline _ la începutul
num|rului (value)
39x // eroare de sintax|: nu se accept| x în baza 10
12 ‘ hx // un num|r necunoscut de 12 biÛi
7A2 // eroare de sintax|: în baza 10 nu exist| cifra A.
360 Cap.7 Proiectarea circuitelor digitale cu Verilog

Constantele întregi cu semn se scriu în forma


± width ‘ radix value
în care semnul se atribuie valorii num|rului (value). Reprezentarea binar| a
numerelor cu semn se face în codul complementar faÛ| de 2 (C2). Plasarea
semnului ± între câmpurile width şi radix sau între radix şi value constituie
erori de sintax|.
Constantele reale pot fi scrise în urm|toarele dou| moduri sau formate:
± parte întreag|.parte fracÛionar| (de exemplu - 713.26),
± mantis| e exponent (de exemplu +23.8e-5).
Baza funcÛiei exponenÛiale în cel de-al doilea format este 10, adic| e-5
reprezint| 10-5. Mantisa este un num|r real iar exponentul este un num|r întreg.

7.3.1.3 Tipuri de date


În Verilog exist| dou| categorii sau tipuri de date, fizice şi abstracte.
Acestea sunt enumerate în tabelul de mai jos.

Date fizice Date abstracte


1) net wire 1) integer
wand, wor 2) time
tri0, tri1
3) real
supply0, supply1
4) parameter
trireg
2) reg 5) event

Tabelul 7.2 Tipuri de date în Verilog

Net-urile de tip wire modeleaz| conexiunile dintre componente iar wand


şi wor modeleaz| funcÛiile cablate AND şi OR. Conexiunile legate la liniile de
alimentare prin rezistoare (pull resistor) sunt modelate de tri0 şi tri1. Liniile
de alimentare sunt modelate de supply0 şi supply1. Net-urile de tip trireg
modeleaz| efectele capacitive de stocare a sarcinii electrice.
Forma general| prin care se declar| un net este urm|toarea.
netType chargeStrength range delay listOfNames; (7.1)
În primul câmp se specific| tipul de net, unul din cele indicate în tabelul 7.2.
Circuite Logice SecvenÛiale Sincrone 361

ObservaÛie: Dac| într-o descriere Verilog apare un nume de variabil| care nu


a fost declarat atunci acel nume reprezint| în mod implicit un net de tip wire.
Câmpul chargeStrendth trebuie menÛionat numai pentru net-ul de tip trireg, în
conformitate cu puterile definite în tabelul 7.1 (nivelele 1, 2, 4). De exemplu
(medium0, medium1).
Câmpul range este opÛional; acesta indic| dimensiunea în cazul bus-urilor sau
vectorilor multidimensionali. Formatul prin care se specific| dimensiunea unui
bus este
[n : 0] sau [0 : n].
Dac| range lipseşte atunci dimensiunea este 1, adic| net-ul este un scalar.
Orice net poate s| aib| o întârziere proprie (delay). Forma general| de
specificare a întârzierii este
#(R_min: R_typ: R_max, F_min: F_typ: F_max, Z_min: Z_typ: Z_max)
în care R, F şi Z au semnificaÛiile rise (creştere), fall (c|dere) şi respectiv de
trecere în stare de înalt| impedanÛ|. TranziÛia Low _ High a net-ului are o
întârziere cuprins| în intervalul [R_min, R_max] iar valoarea tipic| a acestei
întârzieri este R_typ.
Specificarea întârzierii în forma #(d1, d2, d3) înseamn|
R_typ = d1,
F_typ = d2,
Z_typ = d3.
De asemenea, formele simplificate #(d1, d2) şi #d1 au semnificaÛiile
R_typ = d1,
F_typ = d2
şi respectiv
R_typ = F_typ = d1.
Dac| nu se specific| nimic în câmpul delay atunci întârzierea are valoarea 0.
Dup| cum s-a precizat în subcap.7.1, toate întârzierile specificate în modelul
Verilog sunt neglijate de tool-ul de sintez| dar sunt luate în considerare de
c|tre simulatorul digital.
Câmpul listOfNames conÛine un nume sau o list| de nume separate prin virgul|.
Aceste nume reprezint| variabile logice asociate cu acelaşi tip de net şi care au
aceleaşi caracteristici: chargeStrength, range şi delay. Caracterul ; (punct şi
virgul|) reprezint| sfârşitul declaraÛiei.
Exemple de declaraÛii ale unor net-uri:
trireg (small0, small1) alfa, T5, u17;
362 Cap.7 Proiectarea circuitelor digitale cu Verilog

wire [7 : 0] #(3, 2) a, b, in1, in2, out5;


wire [0 : 5] a21,
b9,
Enable;

Net-urile wire, wand şi wor nu au capabilitate de stocare sau de memorare a


valorilor logice atribuite. Ca urmare, acestor tipuri de net-uri trebuie s| li se
atribuie valori în mod continuu.
Variabilele de tip reg memoreaz| valorile logice atribuite la un moment
dat şi le p|streaz| pân| la urm|toarea atribuire, indiferent când aceasta va avea
loc. O variabil| reg nu implic| neap|rat existenÛa vreunui latch sau bistabil în
structura circuitului. DeclaraÛia variabilelor de tip reg are forma
reg range listOfNames; (7.2)
Variabilele de tip net şi reg sunt interpretate de simulator ca numere întregi f|r|
semn.
Datele sau variabilele de tip integer au 32 de biÛi şi memoreaz| valorile
logice atribuite la un moment dat, la fel ca şi variabilele reg. Un integer este
interpretat ca num|r binar în cod complementar faÛ| de 2.
Variabilele de tip time sunt echivalente cu reg de 64 de biÛi. Cele de tip real au
formatul ±mantis| e exponent. Exemple de declaraÛii:
integer i, j, k;
time t_setup, t_hold;
real a, G;
Datele de tip parameter sunt constante c|rora li se asociaz| nume. DeclaraÛia
are forma
parameter range nume1 = valoare1, nume2 = valoare2, ...; (7.3)
Câmpul range este opÛional. Valoarea atribuit| unui parametru determin| felul
acestuia. ToÛi parametrii trebuie setaÛi înainte ca simularea s| înceap| iar
valorile acestora nu se modific| pe durata simul|rii. Exemple:
parameter d1 = 3, d2 = 2.5, d3 = 5;
parameter alfa = d2*4;
Variabilele de tip event se utilizeaz| pentru sincronizarea activit|Ûilor din
diferite p|rÛi ale modelului Verilog. Dup| declaraÛia unui eveniment, acesta se
declanşeaz| într-un loc şi se aşteapt| apariÛia lui într-un alt loc. Exemplu:
event clock, e5, ready; // declaraÛia a trei evenimente
..............
-> ready; // declanşarea evenimentului ready
Circuite Logice SecvenÛiale Sincrone 363

..............
@ready; // aşteptarea evenimentului ready
Spre deosebire de celelalte tipuri de date, variabilelor de tip event nu li se
atribuie valori.

7.3.1.4 OperaÛii şi operanzi


OperaÛiile din Verilog sunt prezentate în tabelul 7.3. Între aceste operaÛii
exist| priorit|Ûile indicate în tabelul 7.4. Aceste priorit|Ûi au efect numai în
porÛiunile dintr-o expresie în care apar mai multe operaÛii şi în care lipsesc
parantezele, adic| perechile formate din caracterele ( şi ). Utilizarea
parantezelor dicteaz| ordinea de execuÛie a operaÛiilor, indiferent de priorit|Ûile
dintre acestea. Parantezele se pot folosi chiar şi atunci când nu sunt necesare,
împreun| cu spaÛiile sau liniile goale, pentru a face mai uşoar| citirea.. În orice
expresie num|rul de paranteze deschise trebuie s| fie egal cu num|rul de
paranteze închise; altfel se comit erori de sintax|.

categorie sau nume operaÛie simboluri


aritmetic| + - * /
relaÛional| sau de comparaÛie > >= < <=
logic| (NOT, AND, OR) ! && | |
egalitate/inegalitate logic| == !=
condiÛional ?:
concatenare {,}
modulo %
egalitate/inegalitate (case) === !==
bit-wise (NOT, AND, OR, XOR, ~ & | ^
XNOR) ~ ^ sau ^~
reducere la un singur bit (AND, NAND, OR, NOR, & ~& | ~|
XOR, XNOR) ^ ~ ^ ^~
deplasare stânga/dreapta << >>

Tabelul 7.3 OperaÛiile din Verilog


364 Cap.7 Proiectarea circuitelor digitale cu Verilog

ObservaÛie: Caracterul sau simbolul = (egal) este utilizat în combinaÛie cu alte


caractere şi nu apare singur în tabelul 7.3. Utilizat singur, caracterul = are
semnificaÛia de atribuire, aspect care este tratat în paragraful 7.3.1.8.

(simbol) operaÛie observaÛii


[ ] bit-select sau part-select (range)
(prioritatea cea mai mare)
( ) paranteze (rotunde)
! ~ negare logic| şi bitwise
& | ~& ~| ^ ~ ^ ^~ reducere la un singur bit
(unary reduction)
{,} concatenare
* / % înmulÛire, împ|rÛire şi modulo
+ - adunare şi sc|dere
<< >> deplasare stânga şi dreapta
> >= < <= mai mare, mai mare sau egal,
mai mic, mai mic sau egal
== != === !== egalitate şi inegalitate
& bitwise AND
^ ^~ ~^ bitwise XOR şi XNOR
| bitwise OR
&& AND logic
|| OR logic
?: condiÛional
(prioritatea cea mai mic|)

Tabelul 7.4 Priorit|Ûile dintre operaÛiile din Verilog

Priorit|Ûile operaÛiilor din tabelul de mai sus descresc de sus în jos. Termenii
bit-select şi part-select se refer| la un singur bit dintr-un vector sau la un grup
Circuite Logice SecvenÛiale Sincrone 365

de biÛi. De exemplu, dac| alfa este un wire sau un reg cu dimensiunea [11 : 0]
atunci alfa [7] reprezint| un bit-select iar alfa [9 : 1] este un part-select.
O expresie logic| este compus| din operanzi şi operaÛii. OperaÛiile se
efectueaz| asupra operanzilor. Operanzii pot fi
- numere,
- variabile de tip wire şi reg (inclusiv bit-select, part-select, concaten|ri),
- funcÛii (apel|ri de funcÛii).
OperaÛiile aritmetice (+, -, *, /) au ca rezultat x dac| operanzii au vreun
bit cu valoare x sau z.
ComparaÛiile (<, <=, >, >=) dintre doi operanzi au ca rezultat 0 (fals), 1
(adev|rat) sau x dac| exist| vreun bit cu valoare x sau z în structura
operanzilor. OperaÛiile = =, = = =, ! =, ! = = sunt tot comparaÛii ce au ca
rezultat un singur bit. Deosebirile dintre acestea sunt scoase în evidenÛ| în
exemplul urm|tor.
comparaÛie rezultat
' b1x0 = = ' b1x0 x
' b1x0 = = = ' b1x0 1
' b10z1 ! = ' b10x1 x
' b10z1 ! = = ' b10x1 1
ComparaÛiile = = şi ! = dau ca rezultat bitul x dac| operanzii conÛin cel puÛin
un bit x sau z. BiÛii cu valoare x şi z sunt îns| luaÛi în considerare de c|tre
comparaÛiile = = = şi ! = =.
OperaÛiile logice NOT, AND şi OR (!, &&, ||) genereaz| un singur bit
rezultat şi anume 0, 1 sau x.
OperaÛia ? : implic| trei operanzi şi are forma general|
(expresie) ? TRUE_result : FALSE_result (7.4)
în care rezultatul se decide astfel. Dac| operandul expresie este evaluat la 1
(adev|rat) atunci operaÛia are ca rezultat operandul TRUE_result. Altfel, dac|
operandul expresie este evaluat la 0 (fals) atunci operaÛia are ca rezultat
operandul FALSE_result.
Operandul expresie nu trebuie s| fie neap|rat o expresie logic|; dac| este un
vector (wire, reg, parameter, etc), evaluarea produce rezultatul 0 (fals) atunci
când toate coordonatele au valoarea 0 şi rezultatul 1 (adev|rat) când cel puÛin
o coordonat| este nenul|.
Concatenarea { , } al|tur| sau lipeşte mai multe variabile sau constante
pentru a forma un vector cu dimensiune mai mare. De exemplu
{1' b1, 2' b01, 1' b1} produce rezultatul 4' b1011,
{3' b0x1, 4' h9} produce rezultatul 7' b0x11001,
366 Cap.7 Proiectarea circuitelor digitale cu Verilog

{2' b0x, 5{1' b1}, 3' o2} produce rezultatul 10' b0x11111010,
{9, 173, 78} produce rezultatul 917378.
OperaÛia % (modulo) are ca rezultat restul împ|rÛirii primului operand la
cel de-al doilea. Rezultatul preia semnul primului operand. Dac| vreun bit al
operanzilor are valoarea x sau z atunci rezultatul este x. Exemple:
operaÛie rezultat
13 % 5 3
- 10 % 4 -2
17 % -6 5

OperaÛiile de tip bitwise implic| doi operanzi care au acelaşi format, cu


excepÛia neg|rii ~ (NOT) care se aplic| unui singur operand. Rezultatul
p|streaz| formatul operanzilor. Exemple:
operaÛie rezultat
~ (1001x01x) 0110x10x
(0x110) & (1110x) 0x100
(0x110) | (1110x) 1111x
(0x110) ^ (1110x) 1x01x
(0x110) ^~ (1110x) 0x10x.
OperaÛiile de reducere se aplic| unui singur operand iar rezultatul este un
singur bit. Exemple:
operaÛie rezultat
& (1001x01x) 0
~& (1001x01x) 1
| (1001x01x) 1
~| (1001x01x) 0
^ (1001x01x) x
^ (10011010) 0
~ ^ (1001x01x) x.
Orice operaÛie de reducere are un rezultat identic cu acela obÛinut la ieşirea
unei porÛi logice (AND, NAND, OR, NOR, XOR, XNOR) la intr|rile c|reia se
aplic| toÛi biÛii operandului (num|rul de intr|ri ale porÛii logice este egal cu
formatul operandului).
Deplas|rile la stânga şi la dreapta (<<, >>) implic| doi operanzi. Ca
rezultat, operandul din partea stâng| a expresiei se deplaseaz| la stânga şi
Circuite Logice SecvenÛiale Sincrone 367

respectiv la dreapta cu un num|r de poziÛii specificate de c|tre operandul din


partea dreapt| a expresiei. PoziÛiile vacante rezultate în urma deplas|rilor se
completeaz| cu biÛi de valoare 0. Exemple:
operaÛie rezultat
10111001111 << 3 11001111000
10x11001x11 << 3 11001x11000
10x11001x11 >> 3 00010x11001
10110z01011 >> 2 0010110z010.

7.3.1.5 Blocuri begin-end şi fork-join


Mai multe declaraÛii, atribuiri sau acÛiuni pot fi grupate într-un singur
bloc utilizând perechile de cuvinte cheie begin ... end sau fork ... join. Un astfel
de bloc este tratat ca o singur| propoziÛie sau statement. AcÛiunile din blocurile
begin-end se execut| în serie, în ordinea scrierii lor. AcÛiunile din blocurile
fork-join se execut| în paralel; ordinea scrierii lor nu are relevanÛ|. Sintaxa este
urm|toarea:
begin
// atribuiri şi/sau alte acÛiuni (7.5)
..................... ;
end
sau
begin : nume_bloc
// declaraÛii
..................... ;
// atribuiri şi/sau alte acÛiuni (7.6)
..................... ;
end

fork
// atribuiri şi/sau alte acÛiuni (7.7)
..................... ;
join
sau
fork : nume_bloc
// declaraÛii
..................... ;
// atribuiri şi/sau alte acÛiuni (7.8)
..................... ;
join
368 Cap.7 Proiectarea circuitelor digitale cu Verilog

Dup| cuvintele begin, end, fork şi join nu se pune ; (punct şi virgul|). Acest
caracter reprezint| sfârşitul unei declaraÛii, atribuiri sau acÛiuni.
Numele blocului este opÛional. În blocurile care au nume, 7.6 şi 7.8, se pot
declara variabile locale; aceste variabile sunt dominante, în sensul c| sunt luate
în considerare în locul oric|ror variabile cu aceleaşi nume declarate în
exteriorul blocului. De asemenea, execuÛia unui bloc cu nume poate fi oprit|
înainte de terminarea normal|, cu ajutorul comenzii disable. Aceasta poate fi
plasat| şi în interiorul blocului respectiv şi are sintaxa:
disable nume_bloc ; (7.9)
Ca şi parantezele, perechile begin-end se pot folosi în exces, chiar şi atunci
când nu sunt neap|rat necesare.

7.3.1.6 ConstrucÛii şi bucle


Limbajul Verilog prevede construcÛiile if ... else, case ... endcase şi
buclele for, repeat, while, forever.
ConstrucÛia if ... else are urm|toarea sintax|.
if (expresie)
begin
.............. ;
end
else (7.10)
begin
.............. ;
end
Dac| valoarea expresiei din parantez| este diferit| de 0 sau este adev|rat|
atunci se va executa primul bloc begin-end, cel care urmeaz| dup| cuvântul
cheie if. Altfel, dac| expresia are valoare 0 sau este fals| atunci se va executa
al doilea bloc begin-end, adic| cel care urmeaz| dup| cuvântul cheie else.
Cuvântul else şi implicit blocul begin-end care urmeaz| dup| else sunt
opÛionale; dac| acestea lipsesc atunci construcÛia if ... else este incomplet|.
ObservaÛie: De regul|, tool-urile de sintez| asociaz| construcÛiile if ... else cu
multiplexoare (MUX2 în cazul relaÛiei 7.10). Intr|rile de selecÛie ale MUX sunt
controlate de variabilele care apar în expresia din paranteza de dup| cuvântul
cheie if. Dac| a doua parte a construcÛiei lipseşte, adic| else şi al doilea bloc
begin-end, atunci este posibil ca rezultatul sintezei s| includ| şi un latch sau
bistabil în afar| de MUX.
ConstrucÛia if ... else se poate ramifica în forma if ... else if ... else dup|
cum se arat| în continuare. Num|rul de ramific|ri sau ramificaÛii, adic| de
utiliz|ri ale cuvintelor cheie else if nu este limitat.
Circuite Logice SecvenÛiale Sincrone 369

if (expresie1)
begin
.............. ;
end
else if (expresie2) (7.11)
begin
.............. ;
end
else if (expresie3)
begin
.............. ;
end
............................
else
begin
.............. ;
end
În construcÛiile if ... else incomplete, în care num|rul cuvintelor if este
mai mare decât cel al cuvintelor else trebuie acordat| atenÛie la modul în care
se fac perechile if-else. De exemplu, în construcÛia
if (expresie1)
if (expresie2)
begin
................ ;
end
else
begin
.................. ;
end
else face pereche cu al doilea if, adic| cu cel condiÛionat de expresie2. Pentru
a schimba aceast| situaÛie, adic| else s| devin| perechea primului if (cel
condiÛionat de expresie1), codul de mai sus trebuie rescris astfel:
if (expresie1)
begin
if (expresie2)
begin
................ ;
end
end
370 Cap.7 Proiectarea circuitelor digitale cu Verilog

else
begin
.................. ;
end
ConstrucÛia case ... endcase are sintaxa urm|toare. Valoarea expresiei din
paranteza al|turat| cuvântului cheie case se compar| pe rând cu fiecare dintre
valorile val1, val2, ..., valN. Dac| exist| egalitate între valoarea expresiei şi
valK atunci se execut| blocul begin-end asociat cu valK. Dac| valoarea
expresiei este diferit| de toate valorile val1, val2, ..., valN atunci se execut|
blocul begin-end asociat cuvântului cheie default. Ordinea în care sunt scrise
câmpurile val1, val2, ..., valN şi default este indiferent|.
case (expresie)
val1 : begin
.......... ;
end
val2 : begin
.......... ;
end
........................ (7.12)
valN : begin
.......... ;
end
default : begin
.......... ;
end
endcase

ObservaÛii:
1) Tool-urile de sintez| asociaz| construcÛia case ... endcase cu multiplexoare.
Intr|rile de selecÛie ale MUX sunt controlate de variabilele care apar în
expresia din paranteza de dup| cuvântul cheie case. Dac|cuvântul cheie default
împreun| cu blocul begin-end asociat lipsesc, atunci este posibil ca rezultatul
sintezei s| includ| şi latch-uri sau bistabili în afar| de MUX.
2) Valoarea valK, K = 1, 2, ..., N poate s| fie o simpl| constant| sau o list| de
expresii separate prin virgul|.
3) ConstrucÛiile casex ... endcase şi casez ... endcase au sintaxe identice cu 7.12
şi accept| ca valK, K = 1, 2, ..., N s| conÛin| caracterele speciale x, z, ? şi
respectiv z, ?. Caracterul ? substituie pe oricare dintre valorile 0, 1, x şi z.
4) ConstrucÛia if ... else if ... else este mai general| decât case ... endcase. În
aceasta din urm| se utilizeaz| o singur| expresie, în timp ce if ... else if ... else
include un set de expresii.
Circuite Logice SecvenÛiale Sincrone 371

Bucla for are sintaxa


for (iniÛializare; condiÛie; actualizare) (7.13)
begin
............... ;
end
La intrarea în bucl| se execut| o singur| dat| iniÛializarea (primul câmp din
parantez|). Apoi se repet| paşii urm|tori pân| la p|r|sirea buclei:
- se verific| valoarea de adev|r a condiÛiei (al doilea câmp),
- dac| rezultatul anterior este 1 (TRUE) se execut| blocul begin-end, altfel se
p|r|seşte bucla,
- dup| execuÛia blocului begin-end se actualizeaz| bucla (al treilea câmp).
Sintaxa buclei repeat este urm|toarea.
repeat (expresie) (7.14)
begin
............... ;
end
Expresia din parantez| se evalueaz| o singur| dat| la intrarea în bucl|;
rezultatul trebuie s| fie un num|r natural. Acesta indic| de câte ori consecutiv
urmeaz| s| fie executat blocul begin-end.
Sintaxa buclei while este urm|toarea.
while (expresie) (7.15)
begin
............... ;
end
Spre deosebire de bucla repeat, în cazul while expresia din parantez| se
evalueaz| de mai multe ori. Dac| la intrarea în bucl| expresia este adev|rat|
atunci se execut| o dat| blocul begin-end. Dup| aceasta se evalueaz| din nou
expresia; în funcÛie de rezultat, TRUE sau FALSE, se execut| din nou blocul
begin-end sau se p|r|seşte bucla, ş.a.m.d.
Bucla forever este una infinit|. Sintaxa este
forever (7.16)
begin : nume_bloc
............... ;
end
Este obligatorie întreruperea buclei forever pentru a împiedica tool-ul de
sintez| s| produc| reacÛii globale asincrone. Acest lucru se poate face cu
ajutorul comenzii disable (7.9) şi prin mijloacele de control al timpului şi al
evenimentelor, plasate în interiorul blocului begin-end.
372 Cap.7 Proiectarea circuitelor digitale cu Verilog

7.3.1.7 Controlul timpului şi al evenimentelor


Limbajul Verilog prevede trei forme de control al timpului prin care
atribuirile sau în general acÛiunile cu care se asociaz| pot fi reprogramate sau
amânate şi anume:
# expresie
@ eveniment // sau @ (list|_de_evenimente) (7.17)
wait (expresie)
Forma # expresie produce o suspendare sau o amânare cu un num|r de
unit|Ûi de timp specificate de expresie; aceasta poate fi şi o simpl| constant|,
de exemplu # 37.
Durata amân|rii execuÛiei unei acÛiuni prin utilizarea formei @eveniment
depinde de momentul apariÛiei sau producerii evenimentului invocat.
Evenimentul poate s| fie reprezentat de:
- o variabil| reg sau wire de orice dimensiune, adic| de schimbarea a cel puÛin
unui bit al variabilei (vector),
- tranziÛia pozitiv| a unei variabile unidimensionele (scalar),
- tranziÛia negativ| a unei variabile unidimensionele,
- o variabil| de tip event.
TranziÛiile sau fronturile pozitive şi negative sunt desemnnate de cuvintele
cheie posedge şi respectiv negedge, urmate de numele variabilei. Exemple:
// declaraÛii
reg [5:0] A, B, C;
reg a, b, c;
wire x1, x2;
wire [7:0] alfa;
event e1, e2;
........................
// forme de control de tip @eveniment
@A
@b
@ alfa
@ posedge a
@ negedge x2
@ e1
........................
// forme de control de tip @ (list|_de_evenimente)
@ (B or c or posedge x1)
@ (e2 or C or negedge a)
@ (a or b or c)
Circuite Logice SecvenÛiale Sincrone 373

Evenimentele dintr-o list| sunt separate cu spaÛii libere şi de cuvântul cheie or.
În cazul utiliz|rii unei liste de evenimente, suspendarea sau amânarea acÛiunii
asociate este determinat| de evenimentul care se produce cel mai repede.
Forma de control wait (expresie) produce amânarea acÛiunii cu care se
asociaz| pân| când expresia din parantez| devine adev|rat|.
ObservaÛie: Formele de control 7.17 pot fi combinate în diverse moduri. De
exemplu
@ (negedge clock) #3 begin .......; ....... ; ........ ; end
În acest caz execuÛia blocului begin-end este amânat| pân| la apariÛia frontului
negativ al variabilei clock, dup| care se mai aşteapt| înc| 3 unit|Ûi de timp.

7.3.1.8 Procese şi atribuiri


Atribuirea este mecanismul de baz| prin care se dau valori variabilelor
de tip net şi reg (vectori sau scalari). Variabila este reprezentat| fie prin numele
ei fie sub forme precum bit-select, part-select şi concaten|ri.
Atribuirea unei variabile de tip net este o atribuire continu| (continuous
assignment); atribuirea unei variabile de tip reg este o atribuire procedural|
(procedural assignment). Atribuirea continu| are forma
variabil|_de_tip_net = expresie; (7.18)
iar cea procedural| are formele urm|toare
variabil|_de_tip_reg = expresie;
variabil|_de_tip_reg = #delay expresie; (7.19)
variabil|_de_tip_reg = @eveniment expresie;
variabil|_de_tip_reg <= expresie;
variabil|_de_tip_reg <= #delay expresie; (7.20)
variabil|_de_tip_reg <= @eveniment expresie;
Atribuirile procedurale 7.19 şi 7.20 sunt de tip blocking şi respectiv non-
blocking. Deosebirile dintre acestea dou| sunt prezentate în paragraful 7.3.4.2.
ObservaÛii:
1) CombinaÛia de caractere <= este utilizat| atât ca operaÛie (comparaÛia mai
mic sau egal) cât şi ca echivalent pentru = (egal). Acest lucru nu produce
confuzii deoarece “<=” cap|t| sens în funcÛie de contextul în care este utilizat.
2) Variabilelor net sau reg li se atribuie valoarea expresiei din partea dreapt|
a semnului = . La momentul execuÛiei unei atribuiri se determin| de fapt
valoarea expresiei iar variabila cap|t| aceast| valoare fie imediat fie cu o
anumit| întârziere specificat| prin #delay sau @eveniment.
374 Cap.7 Proiectarea circuitelor digitale cu Verilog

Atribuirile 7.18, 7.19, 7.20 nu sunt declaraÛii (propoziÛii) independente;


acestea se fac numai într-un cadru special. Astfel, atribuirea continu| se face
invocând cuvântul cheie assign iar cea procedural| se face în cadrul proceselor
initial şi always precum şi în cadrul funcÛiilor şi task-urilor (paragraf 7.3.2).
DeclaraÛia assign modeleaz| un circuit combinaÛional care comand| net-
uri (vectori sau scalari). Sintaxa are forma general|
assign driveStrength delay listOfAssignments; (7.21)
Câmpurile driveStrength şi delay sunt opÛionale. Default-ul pentru
driveStrength este (strong0, strong1). Dac| delay lipseşte atunci toate
atribuirile din lista listOfAssignments se fac f|r| nici o întârziere. Exemplu:
assign (strong0, pull1) #(5, 2) s = a ^ b ^ cin,
cout = (a & b) | (cin & (a | b));
În declaraÛia de mai sus se fac atribuiri, adic| se dau valori net-urilor cu numele
s şi cout (scalari), acestea fiind ieşirile unei celule elementare de adunare
FullAdder. Intr|rile celulei sunt a, b şi cin. Atribuirile sunt numite continue
deoarece la orice moment de timp la care apare cel puÛin o schimbare în
variabilele de intrare a, b sau cin, expresiile
a ^ b ^ cin şi (a & b) | (cin & (a | b))
se reevalueaz| iar valorile rezultate se atribuie lui s şi respectiv cout. Deoarece
câmpul delay este menÛionat, atribuirile se fac cu întârziere; astfel, valoarea 1
se atribuie cu o întârziere de 5 unit|Ûi de timp faÛ| de momentul evalu|rii iar
valoarea 0 se atribuie dup| 2 unit|Ûi de timp.
DeclaraÛiile 7.1 şi 7.21 pot fi combinate astfel:
netType range driveStrength delay listOfAssignments; (7.22)
În aceast| form| a declaraÛiei cuvântul cheie assign este substituit de netType
dar este reprezentat în mod implicit prin lista de atribuiri listOfAssignments.
Câmpul range din relaÛia 7.22 specific| dimensiunea comun| a vectorilor de tip
net (netType) c|rora li se atribuie valori în conformitate cu lista. Câmpul delay
p|streaz| semnificaÛia avut| în relaÛia 7.21. DeclaraÛia din exemplul anterior
se poate rescrie în forma
wire (strong0, pull1) #(5, 2) s = a ^ b ^ cin,
cout = (a & b) | (cin & (a | b));
Procesul initial se execut| o singur| dat| şi are sintaxa
initial
begin
............. ; // atribuiri de forma 7.19 (7.23)
end
Circuite Logice SecvenÛiale Sincrone 375

Sintaxa general| a procesului always este urm|toarea


always
begin
............. ; // atribuiri de forma 7.19 sau 7.20 (7.24)
end
În procesul always blocul begin-end asociat se execut| la nesfârşit, f|r| oprire.
Singurele întreruperi sunt cele determinate de formele de control 7.17 care apar
în declaraÛiile din interiorul blocului begin-end. Sintaxa 7.25 constituie o form|
particular| a procesului.
always @ (list|_de_evenimente)
begin
............. ; // atribuiri de forma 7.19 sau 7.20 (7.25)
end
În acest caz procesul se declanşeaz| imediat dup| producerea unui eveniment
din lista asociat| şi const| din execuÛia blocului begin-end o singur| dat|. Dup|
aceasta se aşteapt| din nou producerea unui eveniment din list| şi se execut|
înc| o dat| blocul begin-end, ş.a.m.d.
ObservaÛii:
1) În blocurile begin-end din cadrul proceselor initial şi always se pot utiliza
toate operaÛiile, construcÛiile şi buclele prezentate în paragrafele anterioare.
2) Blocurile begin-end din 7.24 şi 7.25 pot s| fie prev|zute cu nume. Comanda
disable (7.9) plasat| în interiorul unui astfel de bloc poate s| întrerup| execuÛia
curent| începând de la locul acesteia; apoi se reia execuÛia blocului begin-end
de la început, fie imediat (7.24) fie dup| un timp de aşteptare (7.25).
3) CombinaÛia urm|toare dintre procesul initial şi bucla forever este
echivalent| cu procesul always:
initial
forever
begin
............ ;
end

7.3.2 FuncÛii şi task-uri


FuncÛiile modeleaz| circuite combinaÛionale şi pot fi uni-dimensionale
(scalari) sau multi-dimensionale (vectori). Variabilele de care depinde o funcÛie
sunt intr|rile acesteia; ele trebuie declarate în interiorul funcÛiei cu ajutorul
cuvântului cheie input. Prin interiorul funcÛiei se înÛelege textul cuprins între
cuvintele cheie function şi endfunction. Aceeaşi funcÛie poate s| aib| intr|ri cu
dimensiuni diferite. De asemenea, în definirea unei funcÛii se pot utiliza date
376 Cap.7 Proiectarea circuitelor digitale cu Verilog

de tip reg, integer, parameter; acestea trebuie declarate fie în interiorul funcÛiei
fie în exteriorul ei. Toate declaraÛiile din interiorul unei funcÛii au caracter local
şi sunt dominante. Ieşirea sau valoarea unei funcÛii este reprezentat| de numele
ei. Acesta poate s| fie invocat în diverse expresii, de task-uri sau apelat de c|tre
alte funcÛii. În mod implicit numele funcÛiei este tratat ca o dat| de tip reg.
Sintaxa general| a unei funcÛii în Verilog este urm|toarea.
function [range] nume_funcÛie; (7.26)
// declaraÛii intr|ri
input [range] list|_de_nume;
............................................ ;
// declaraÛii variabile locale de tip integer, reg, parameter
............................................ ;
begin
// construcÛii if ... else if ... else şi case ... endcase
// bucle for, repeat
// atribuiri
end
endfunction
Exemplu:
function MUX4;
input in0, in1, in2, in3;
input [1:0] sel;
case (sel)
2' b00: MUX4 = in0;
2' b01: MUX4 = in1;
2' b10: MUX4 = in2;
2' b11: MUX4 = in3;
default: MUX4 = 1‘ bx;
endcase
endfunction
Ordinea în care sunt declarate intr|rile funcÛiei constituie referinÛa pentru orice
apelare a funcÛiei. Astfel, în declaraÛia
assign #3 alfa = MUX4 (a, R, G, w, p);
prin care ieşirea funcÛiei MUX4 este evaluat| şi atribuit| continuu net-ului cu
numele alfa, exist| corespondenÛele poziÛionale
a ] in0, R ] in1, G ] in2, w ] in3, p ] sel.
Circuite Logice SecvenÛiale Sincrone 377

ObservaÛii:
1) Orice funcÛie trebuie s| aib| cel puÛin o variabil| de intrare (argument).
2) Variabila intern| cu numele funcÛiei trebuie s| fie atribuit| cel puÛin o dat|.
3) În descrierea funcÛiilor nu se pot folosi mijloacele de control 7.17; evaluarea
oric|rei funcÛii se face imediat, într-un singur moment de simulare.
4) FuncÛiile nu pot s| apeleze sau s| invoce task-uri.
Task-urile modeleaz| atât circuite combinaÛionale cât şi secvenÛiale; sunt
construcÛii mai elaborate decât funcÛiile. Sintaxa general| a unui task în Verilog
are forma
task nume_task; (7.27)
// declaraÛii intr|ri
input [range] list|_de_nume;
............................................ ;
// declaraÛii inout-uri
inout [range] list|_de_nume;
............................................ ;
// declaraÛii ieşiri
output [range] list|_de_nume;
............................................ ;
// declaraÛii variabile locale de orice tip
............................................ ;
// bucle for, repeat, forever
begin
// construcÛii if ... else if ... else şi case ... endcase
// bucle for, repeat, while
// atribuiri
end
endtask
ObservaÛii:
1) În descrierea task-urilor se pot folosi mijloacele de control 7.17.
2) Un task poate s| nu aib| argumente sau poate s| aib| argumente de orice tip
(input, inout, output). În mod implicit argumentele inout şi output sunt tratate
ca date de tip reg.
3) Task-urile pot s| invoce task-uri şi funcÛii; un task se poate autoapela, direct
sau dintr-un alt task apelat de acesta.
4) Invocarea unui task are sintaxa
nume_task (list|_de_argumente); (7.28)
Argumentele de la locul apel|rii unui task (reprezentate prin nume de variabile)
trebuie s| respecte ordinea definit| în interiorul acestuia. În 7.27 argumentele
input, inout şi output se pot scrie în orice ordine îns| aceast| ordine devine
378 Cap.7 Proiectarea circuitelor digitale cu Verilog

referinÛ| în 7.28.
5) În interiorul unui task se poate utiliza comanda de întrerupere
disable nume_task;
asem|n|toare cu întreruperea unui bloc begin-end c|ruia i s-a pus nume.
Task-ul multiply1 din exemplul urm|tor modeleaz| un circuit
combinaÛional de înmulÛire a doi operanzi A şi B, întregi şi f|r| semn. F|r| a
pierde din generalitate se consider| formatul de 8 biÛi pentru A şi B; în zecimal
operanzii au valori de la 0 la 255, inclusiv. Formatul produsului P = A*B
trebuie s| fie dublu faÛ| de cel al operanzilor, adic| de 16 biÛi.
task multiply1;
input [7 :0] A, B;
output [15 :0] P;
reg [7 :0] OpA, OpB;
reg [16 :0] RezP;
begin
OpA = A;
OpB = B;
RezP = 0;
repeat (8)
begin
if (OpB[0])
RezP = RezP +{1' b0, OpA, 8' h00};
RezP = RezP >> 1;
OpB = OpB >> 1;
end
P = RezP [15 : 0];
end
endtask
Operanzii A şi B sunt copiaÛi în variabilele locale de tip reg cu numele OpA şi
respectiv OpB. Rezultatul înmulÛirii se obÛine prin concaten|ri, adun|ri şi
deplas|ri. Dac| bitul OpB[0] are valoarea 1 atunci se execut| operaÛia
RezP = RezP +{1' b0, OpA, 8' h00};
altfel, dac| OpB[0] = 0, nu se întâmpl| nimic. Cuvântul cheie else lipseşte.
Forma complet| a acestei construcÛii este
if (OpB[0])
RezP = RezP +{1' b0, OpA, 8' h00};
else ;
Circuite Logice SecvenÛiale Sincrone 379

SpaÛiul liber sau gol dintre cuvântul else şi caracterul ; nu conÛine nici o
acÛiune. Dup| execuÛia construcÛiei if se execut| deplas|rile la dreapta cu o
poziÛie în rezultatul parÛial RezP şi în OpB. Rezultatul RezP necesit| un format
de 17 biÛi în loc de 16; bitul cel mai semnificativ RezP[17] este rezervat
transportului. Operanzii RezP şi {1' b0, OpA, 8' h00} au MSB (most significant
bit) egal cu 0 îns| dup| operaÛia de adunare RezP +{1' b0, OpA, 8' h00} este
posibil ca MSB al rezultatului RezP s| devin| 1, adic| RezP[17] = 1.
La invocarea task-ului
multiply1 (Q, R, W);
A şi B cap|t| valorile lui Q şi respectiv R iar rezultatul P se transfer| la W.
O versiune uşor modificat| a task-ului multiply1 este task-ul multiply2
care urmeaz|. Exist| numai dou| argumente, unul de tip input (A) şi unul de
tip inout (P). IniÛial, operandul B este conÛinut în cei mai puÛin semnificativi 8
biÛi ai lui P; dup| executarea task-ului, P conÛine rezultatul înmulÛirii.
task multiply2;
input [7 :0] A;
inout [15 :0] P;
reg [7 :0] OpA, OpB;
reg [16 :0] RezP;
begin
OpA = A;
OpB = P [7 :0];
RezP = 0;
repeat (8)
begin
if (OpB[0])
RezP = RezP +{1' b0, OpA, 8' h00};
RezP = RezP >> 1;
OpB = OpB >> 1;
end
P = RezP [15 : 0];
end
endtask
Invocarea acestui task are sintaxa
multiply2 (arg1, arg2);
în care arg1 şi arg2 sunt variabile de 8 şi respectiv de 16 biÛi. Variabila intern|
A este o copie a primului argument arg1; din al doilea argument arg2 se
determin| OpB iar la final în arg2 se copiaz| rezultatul înmulÛirii P.
380 Cap.7 Proiectarea circuitelor digitale cu Verilog

ÎnmulÛirea operanzilor OpA şi OpB realizat| cu task-urile multiply1 şi


multiply2 se poate face şi cu ajutorul funcÛiilor. De exemplu
function [15 :0] prod;
input [7 :0] A, B;
reg [7 :0] OpA, OpB;
reg [16 :0] RezP;
begin
OpA = A;
OpB = B;
RezP = 0;
repeat (8)
begin
if (OpB[0])
RezP = RezP +{1' b0, OpA, 8' h00};
RezP = RezP >> 1;
OpB = OpB >> 1;
end
prod = RezP [15 : 0];
end
endfunction
Task-ul urm|tor nu poate fi înlocuit de nici o funcÛie datorit| utiliz|rii
formei de control @eveniment. AcÛiunea realizat| de acest task este de a stinge
un LED de o anumit| culoare dup| un num|r de perioade de ceas dependent de
culoare.
task LED_off;
output culoare;
input [11 : 0] durat|;
begin
repeat (durat|)
@ (posedge clock5);
culoare = off ; //stingerea LED-ului “culoare”
end
endtask
Apelarea acestui task poate s| aib| forma
LED_off (VERDE, 972);
iar acÛiunea const| în stingerea LED-ului de culoare VERDE dup| 972 de
fronturi pozitive ale semnalului sau variabilei scalare clock5, declarat| în
exteriorul task-ului. Aşteptarea celor 972 de fronturi pozitive din clock5 este
determinat| de bucla repeat. Dup| execuÛia buclei urmeaz| stingerea LED-ului.
Circuite Logice SecvenÛiale Sincrone 381

Un task f|r| argumente are sintaxa


task nume_task; (7.29)
begin
//acÛiuni asupra variabilelor externe
.................. ;
//apel|ri funcÛii şi task-uri sistem
$display .... ;
$monitor.... ;
................... ;
end
endtask
FuncÛiile şi task-urile descrise anterior (7.26, 7.27) sunt definite de
utilizator, adic| de proiectantul care scrie modele Verilog. Anumite funcÛii şi
task-uri (denumite funcÛii sistem şi respectiv task-uri sistem) sunt predefinite
şi stocate în biblioteci Verilog. Numele funcÛiilor şi task-urilor predefinite
încep cu caracterul $. Prin intermediul acestora se realizeaz| comunicarea cu
simulatorul. Câteva funcÛii/task-uri sistem sunt prezentate în continuare.
Comanda $display determin| afişarea anumitor informaÛii pe ecranul
monitorului. De exemplu, execuÛia comenzii
$display (“ %d ns”, $time,,,,, “A = %0b ==> B = %h”, alfa, beta);
poate s| aib| ca rezultat
70 ns A = 1011 ==> B = 3C9.
String-urile sau şirurile de caractere scrise între ghilimele se tip|resc întocmai
cum apar în parantez|, cu excepÛia grupurilor %b, %c, %d, %o, %h şi %s care
urmeaz| s| fie înlocuite cu valori în format biar, ASCII, zecimal, octal, hexa
şi respectiv string. În exemplul de mai sus cele trei grupuri de control al
formatului %d, %0b şi %h sunt înlocuite cu 7010, 10112 şi respectiv 3C916.
Momentul la care s-a executat task-ul $display a fost 70 unit|Ûi de timp şi este
indicat de funcÛia $time. Grupurile %0b şi %h sunt înlocuite cu valorile
variabilelor alfa şi respectiv beta de la momentul 70. Plasarea unui 0 între %
şi litera care indic| baza de numeraÛie (b, o, d sau h) determin| eliminarea
zerourilor nesemnificative. Dac| comanda de mai sus ar fi avut forma
$display ($time,,,,, “A = %0d ==> B = %0b”, alfa, beta);
atunci rezultatul afişat ar fi fost
70 A = 11 ==> B = 1111001001.
Câmpurile din paranteza asociat| task-ului $display sunt separate prin virgul|.
O singur| virgul| este echivalent|, la afişare, cu un singur spaÛiu (blank). Dac|
382 Cap.7 Proiectarea circuitelor digitale cu Verilog

se pun N virgule între dou| câmpuri consecutive atunci se obÛin N spaÛii libere
între acestea. SpaÛiile libere dintre câmpuri nu au nici un efect asupra afiş|rii.
Task-ul $monitor are aceeaşi sintax| ca $display. Comanda
$monitor (“ %d ns”, $time,,,,, “A = %0b ==> B = %h”, alfa, beta);
are toate caracteristicile menÛionate pentru $display; singura deosebire const|
în faptul c| afişarea se declanşeaz| ori de câte ori se modific| valorile
variabilelor alfa sau beta. Modificarea timpului în simulare reprezentat| prin
câmpul $time nu declanşeaz| afişarea.
Task-ul $strobe are de asemenea aceeaşi sintax| ca $display şi aceleaşi
caracteristici; singura deosebire const| în faptul c| $display afişeaz| starea
existent| dup| momentul de simulare iar $strobe afişeaz| starea existent|
înainte de momentul de simulare.
Şi task-ul $write are aceeaşi sintax| ca $display şi aceleaşi caracteristici;
singura deosebire const| în faptul c| $display avanseaz| la o linie nou| la
sfârşitul execuÛiei, adic| tip|reşte şi caracterul ENTER (new line sau \n).
Afiş|rile pe ecran produse de task-urile $display, $monitor, $strobe şi
$write au versiuni pentru “afiş|rile” (adic| scrierile) în fişiere, anume
$fdisplay, $fmonitor, $fstrobe şi respectiv $fwrite. Primul câmp din paranteza
asociat| acestor task-uri este un descriptor; acesta este un num|r de 32 de biÛi
generat prin execuÛia comenzii
$fopen (“nume fişier“); // = descriptor
Dac| fişierul menÛionat nu poate s| fie deschis pentru scriere atunci rezultatul
task-ului $fopen este num|rul 0; altfel, num|rul generat este unul natural nenul.
Închiderea unui fişier se face prin intermediul comenzii
$fclose (descriptor);
Comanda $stop; (f|r| parametri) opreşte simularea şi returneaz| controlul
interpretorului de comenzi al simulatorului. Comanda $finish; (f|r| parametri)
opreşte simularea şi returneaz| controlul sistemului de operare.

7.3.3 Primitive
Spre deosebire de procesele always şi initial cu ajutorul c|rora se
construiesc modele Verilog comportamentale sau funcÛionale, primitivele sunt
utilizate pentru a descrie structura circuitelor într-o form| apropiat| de
implementarea fizic| obÛinut| dup| sinteza logic|.

7.3.3.1 Primitive predefinite


Primitivele predefinite modeleaz| funcÛiile sau operaÛiile logice standard
la nivel de poart| şi au nume identice cu acestea: and, nand, or, nor, xor, xnor,
Circuite Logice SecvenÛiale Sincrone 383

buf, not, bufif0, bufif1, notif0, notif1. Ultimele patru modeleaz| buffer-ele şi
inversoarele cu trei st|ri; astfel, inversorul de tip notif0 este activ dac| intrarea
de control este pus| la 0 logic. Apelarea sau invocarea unei astfel de primitive
are sintaxa
primitiveType strength delay listOfInstances; (7.30)
ObservaÛii:
1) Apelarea unei primitive oarecare, predefinit| sau definit| de utilizator, se
numeşte instanÛiere. Fiecare primitiv| din lista asociat|, numit| şi instanÛ|, are
caracteristicile strength şi delay precizate în 7.30. Default-ul pentru strength
este (strong0, strong1) iar pentru delay este 0. Forma general| de specificare
a întârzierii este
#(R_min: R_typ: R_max, F_min: F_typ: F_max, Z_min: Z_typ: Z_max).
2) Orice instanÛ| din lista listOfInstances (7.30) trebuie specificat| în forma
nume (list| de porturi), în care numele este opÛional iar lista de porturi sau
terminale (adic| intr|ri şi ieşiri) trebuie s| respecte urm|toarele reguli:
- primitivele buf şi not pot s| aib| oricâte ieşiri, singura intrare fiind ultima din
lista de porturi;
- primitivele bufif0, bufif1, notif0 şi notif1 au câte 3 porturi, listate în ordinea
ieşire, intrare, control(enable);
- primitivele and, nand, or, nor, xor şi xnor pot s| aib| oricâte intr|ri, singura
ieşire fiind prima din lista de porturi.
Exemple de instanÛieri:
buf #5 (out1, out2, out3, A), B14(Y, in);
notif0 (pull0, pull1) G37 (F, K, x3), (a1, b1, c1);
and #(2, 3) AN4(out, a, b, c, d), (u, x2, m);

7.3.3.2 Primitive definite de utilizator


Setul de primitive se poate extinde dup| necesit|Ûile unui proiect.
Primitivele definite de utilizator (UDP - user defined primitive) sunt mijloace
compacte şi eficiente de modelare prin care se poate m|ri viteza de simulare şi
reduce gradul de pesimism determinat de valoarea logic| x.
Sintaxa general| a unei primitive UDP este
primitive nume_primitiv| (list| de porturi); (7.31)
output numele_ieşirii;
input list|_de_nume;
table
........... ;
endtable
endprimitive
384 Cap.7 Proiectarea circuitelor digitale cu Verilog

Lista de porturi din paranteza asociat| cu numele primitivei este cea care
fixeaz| ordinea terminalelor şi nu declaraÛiile output, input care urmeaz|. Orice
UDP are o singur| ieşire şi oricâte intr|ri; nu se accept| pini bidirecÛionali.
Ieşirea trebuie s| fie prima din list|. De asemenea, toate porturile trebuie s| fie
scalari. În tabela de adev|r delimitat| de cuvintele cheie table - endtable nu se
accept| valoarea z.
Sintaxa general| pentru instanÛierea unei primitive UDP este
nume_primitiv| list|_de_instanÛe; (7.32)
în care nume_primitiv| este definit în 7.31. Fiecare instanÛ| din lista de instanÛe
trebuie s| primeasc| un nume.
Primitiva majority din exemplul urm|tor este combinaÛional| şi indic|
prin 0 sau 1 la ieşirea out dac| majoritatea intr|rilor au valoarea 0 sau 1.
primitive majority (out, a, b, c);
input c, a, b;
output out;
table
//abc : out; Ordinea a, b, c este luat| din parantez|.
000 : 0;
001 : 0;
010 : 0;
011 : 1;
100 : 0;
101 : 1;
110 : 1;
111 : 1;
endtable
endprimitive
InstanÛierea acestei primitive poate s| aib| forma
majority M2of3 (w, S, u7, beta), U17 (d1, e1, e2, e3);
în care M2of3 şi U17 sunt numele date celor dou| instanÛe de tip majority. De
asemenea, w şi d1 sunt ieşirile din M2of3 şi respectiv din U17. Conexiunile S,
u7 şi beta ale instanÛei M2of3 corespund intr|rilor a, b şi respectiv c din
definiÛia primitivei.
Modul în care a fost construit| tabela de adev|r a primitivei majority nu
reduce gradul de pesimism din simulare. Dac| o intrare are valoarea x atunci
şi rezultatul va fi evaluat la x, ceea ce uneori poate s| însemne o pierdere de
informaÛie. De exemplu, abc = 0x0 ar trebui s| implice out = 0 (şi nu out = x).
Primitiva urm|toare, denumit| majorityX, constituie o variant| a primitivei
majority în care sunt eliminate toate pierderile de informaÛie cauzate de
Circuite Logice SecvenÛiale Sincrone 385

intr|rile cu valoare x.
primitive majorityX (out, a, b, c);
input c, a, b;
output out;
table
000 : 0;
001 : 0;
010 : 0;
011 : 1;
100 : 0;
101 : 1;
110 : 1;
111 : 1;
00x : 0;
0x0 : 0;
x00 : 0;
11x : 1;
1x1 : 1;
x11 : 1;
endtable
endprimitive
Dac| oricare dou| sau toate cele trei intr|ri au valoarea x atunci ieşirea are
valoarea x. Acest lucru nu trebuie s| fie specificat în mod explicit în tabel|;
pentru orice combinaÛie de intrare care nu apare în tabel| se atribuie x la ieşire.
Tabela de adev|r de mai sus se poate scrie şi în forma comprimat|
table
00? : 0;
0?0 : 0;
?00 : 0;
11? : 1;
1?1 : 1;
?11 : 1;
endtable
în care caracterul ? (întrebare) substituie pe oricare dintre 0, 1 şi x.
Primitivele UDP pot s| modeleze şi logic| secvenÛial| de tip level-
sensitive sau edge-sensitive, asem|n|toare ca funcÛionare cu latch-urile sau cu
bistabilii. În tabelele de adev|r care definesc primitive secvenÛiale apar mai
multe combinaÛii de intrare decât în cazul celor care definesc primitive
combinaÛionale. Pentru scrierea mai compact| a tabelelor de adev|r se pot
folosi notaÛiile prescurtate prezentate în tabelul 7.5.
386 Cap.7 Proiectarea circuitelor digitale cu Verilog

simbol interpretare observaÛii


0 low
1 high
x necunoscut
? substituent pentru 0, 1, x nu se atribuie la ieşiri
b substituent pentru 0, 1 nu se atribuie la ieşiri
- nici o schimbare se atribuie numai la ieşiri
(vw) tranziÛie de la v la w v, w 0 {0, 1, x, b}
( echivalent cu (??) orice schimbare la o intrare
r echivalent cu (01) front pozitiv la o intrare
f echivalent cu (10) front negativ la o intrare
p substituent pentru oricare
dintre (01), (0x) sau (x1)
n substituent pentru oricare
dintre (10), (1x), sau (x0)

Tabelul 7.5 NotaÛii prescurtate în descrierea primitivelor

Primitiva urm|toare modeleaz| un latch de tip D, transparent când LE = 1.


primitive latchD (Q, LE, D);
output Q;
reg Q;
input LE, D;
table
// LE D : stare : Q;
0 ? : ? : -;
1 0 : ? : 0;
1 1 : ? : 1;
x 1 : 1 : 1;
x 0 : 0 : 0;
endtable
endprimitive
Circuite Logice SecvenÛiale Sincrone 387

Tabela de adev|r conÛine o coloan| pentru starea curent|, delimitat| de : (dou|


puncte). Ieşirea Q trebuie declarat| variabil| de tip reg şi reprezint| starea
viitoare a circuitului. Ultimele dou| linii din tabela de adev|r contribuie la
reducerea gradului de pesimism în simulare.
Bistabilul de tip JK activ pe frontul negativ de ceas, prev|zut cu reset asincron
activ low, poate fi modelat astfel:
primitive JKflipflop (Q, RN, Ck, J, K);
output Q;
reg Q;
input RN, Ck, J, K;
table
// RN Ck J K : stare : Q ;
0 * ? ? : ? : 0;
x * 0 ? : 0 : 0;
1 p ? ? : ? : -;
1 ? ? ? : ? : -;
1 f 1 0 : ? : 1;
1 f 0 1 : ? : 0;
1 f 1 1 : 0 : 1;
1 f 1 1 : 1 : 0;
1 n 0 0 : ? : -;
1 n 1 0 : 1 : 1;
1 n 0 1 : 0 : 0;
endtable
endprimitive
Liniile 2, 3, 4, 9, 10 şi 11 din tabela bistabilului JK reduc pierderile de
informaÛii în simulare.

7.3.4 Module
7.3.4.1 Conceptul de modul
Modulul este unitatea de baz| în Verilog. Un modul poate s| reprezinte
un circuit logic de orice complexitate, de la o simpl| poart| logic| pân| la un
sistem precum o reÛea de calculatoare. De obicei modulele conÛin numai cod
sintetizabil, care se adreseaz| tool-ului de sintez|. Simulatorul accept| toate
construcÛiile limbajului Verilog; acest tool opereaz| cu test bench-uri. Un test
bench este un modul nesintetizabil.
Structura general| a unui modul are forma 7.33. Porturile unui modul pot
fi listate în orice ordine. ReferinÛa este dat| de paranteza asociat| cu numele
modulului şi nu de ordinea declaraÛiilor care urmeaz| (input, inout, output).
388 Cap.7 Proiectarea circuitelor digitale cu Verilog

module nume_modul(list| de porturi); (7.33)


//declaraÛii porturi
input [range] list|;
output [range] list|;
inout [range] list|;
//declaraÛii globale de tip wire, reg, parameter, integer, real
............................... ;
//funcÛii şi task-uri definite de utilizator
............................... ;
//instanÛieri de primitive predefinite şi/sau UDP
nume_primitiv| list|_de_instanÛe;
............................... ;
//instanÛieri de module
nume_modul list|_de_instanÛe;
............................... ;
//atribuiri continue
assign .................... ;
............................... ;
//procese always
always
begin
......... ;
end
............................... ;
endmodule
Modulul sintetizabil nu trebuie s| conÛin| date abstracte de tip event,
procese initial, blocuri fork-join şi nici funcÛii/task-uri sistem. Întârzierile,
indiferent de forma în care sunt introduse în modelul Verilog, sunt tolerate de
tool-urile de sintez| şi nu sunt luate în considerare. Din acest motiv poate s|
apar| diferenÛe între rezultatele simul|rilor pre-sintez| şi cele post-sintez|.
În orice modul se pot mixa descrieri structurale cu descrieri funcÛionale.
Descrierile structurale sunt reprezentate de c|tre instanÛierile de primitive şi
module iar cele funcÛionale sunt reprezentate de procesele always şi atribuirile
continue. InstanÛierea este mijlocul prin care se creeaz| structuri ierarhice.
Primitivele sunt unit|Ûi structurale independente, asem|n|toare cu modulele;
o primitiv| nu se defineşte în cadrul unui modul ci poate doar s| fie instanÛiat|
în structura acestuia.
InstanÛierea unui modul are sintaxa
nume_modul #(list|_de_valori) list|_de_instanÛe; (7.34)
Câmpul #(list|_de_valori) este opÛional. Dac| în cadrul modulului sunt
Circuite Logice SecvenÛiale Sincrone 389

declaraÛi anumiÛi parametri, valorile atribuite acestora prin declaraÛia 7.3


reprezint| default-ul. La instanÛiere se pot schimba aceste valori în ordinea
fixat| de 7.3. Exemplu:
module SIGMA(W, a, b, out, G);
input a, b;
parameter L1 = 8, L2 = 4; //parametrii se definesc înainte
//s| fie utilizaÛi în vreo expresie
input [L1 - 1 : 0] G;
inout W;
output [L2 - 1 : 0] out;
....................... ; //descrierea modulului SIGMA
........................................
endmodule

//instanÛierea modulului SIGMA într-un alt modul


SIGMA #(4, 2) SIG1(H, P, D, n, m),
SIG2(.a(s), .out(alfa), .G(beta), .W(q7), .b(r));
Cele dou| instanÛe SIG1 şi SIG2 au parametrii L1 = 4, L2 = 2. În cazul instanÛei
SIG1 s-a utilizat corespondenÛa poziÛional| dintre porturi, adic|
H ] W, P ] a, D ] b, n ] out, m ] G
iar în cazul instanÛei SIG2 s-a utilizat corespondenÛa prin nume. Aceasta din
urm| permite alegerea unei ordini a porturilor diferit| de cea stabilit| în
definiÛia modulului SIGMA. Schema din Fig.7.7 ofer| o imagine complet| a
rezultatului instanÛierii.

Fig.7.7 InstanÛierea modulului SIGMA

Toate instanÛele, atribuirile continue şi procesele dintr-un modul sunt


evaluate în paralel de c|tre simulator, indiferent de num|rul şi de ordinea în
care sunt scrise, la fel cum toate blocurile dintr-un sistem fizic opereaz| în
paralel. Pentru a reuşi acest lucru simulatorul trebuie s| fie de tip event-driven,
390 Cap.7 Proiectarea circuitelor digitale cu Verilog

adic| trebuie s| aib| la baz| un mecanism de determinare şi planificare în timp


a evenimentelor, dup| cum se arat| în Fig.7.8. În acest context prin eveniment
se înÛelege orice tranziÛie a oric|rei variabile.

Fig.7.8 Principiul de simulare event-driven

Simulatorul execut| toate acÛiunile/evenimentele de la momentul curent şi


determin| ce evenimente vor avea loc şi când (la ce momente din viitor).Un
eveniment ce are loc la momentul curent poate s| produc| alte evenimente, atât
la momentul curent cât şi la momentele viitoare. Timpul simulatorului nu este
cel real; simulatorul trece la momentul urm|tor de simulare numai dup| ce a
procesat toate evenimentele de la momentul curent. Momentele t1, t2, t3, t4, etc
sunt egal dep|rtate între ele; distanÛa dintre dou| momente consecutive
reprezint| o unitate de timp. Num|rul de evenimente difer| de la un moment
de simulare la altul, astfel c| timpul simulatorului nu se scurge uniform. Un
model Verilog în care nu exist| mijloace de control al timpului (#, @, wait),
cum ar fi o funcÛie, produce evenimente numai la un singur moment de
simulare.

7.3.4.2 Test bench-uri


Test bench-ul este un modul nesintetizabil care reprezint| cadrul de
simulare pentru unul sau pentru mai multe module sintetizabile. Acestea sunt
instanÛiate în test bench. Structura general| a unui test bench este tot 7.33, cu
anumite excepÛii:
- sunt admise date abstracte de tip event, comenzi disable, procese initial,
precum şi funcÛii/task-uri sistem;
Circuite Logice SecvenÛiale Sincrone 391

- lista de porturi asociat| cu numele test bench-ului este opÛional| şi are alt|
semnificaÛie faÛ| de cea a unui modul sintetizabil.
Când lista de porturi lipseşte atunci lipsesc şi declaraÛiile input, output, inout.
Rezultatele simul|rii, afişate într-o fereastr| de pe ecranul monitorului, sunt
determinate cu ajutorul task-urilor sistem $display şi/sau $monitor. Dac| se
menÛioneaz| unul sau mai multe porturi în list|, atunci acestea au semnificaÛii
de ieşiri şi trebuie declarate (output). Toate aceste ieşiri vor fi afişate grafic sub
forma diagramelor de timp, într-o fereastr| diferit| de aceea alocat| task-urilor
$display şi $monitor.
ObservaÛie: Test bench-urile sunt module terminus (sau de TOP) la care se
încheie ierarhia. Acestea nu mai pot fi la rândul lor instanÛiate.
Structura simplificat| a unui test bench numit MODUL_sim este
reprezentat| în schema din Fig.7.9; în acest caz se simuleaz|/verific|/testeaz|
un singur modul sintetizabil cu numele generic MODUL.

Fig.7.9 Test bench versus modul

Variabilele in1, in2 şi in3 din interiorul modulului MODUL sunt de tip wire;
în exterior acestea sunt conectate la variabile de tip reg. Variabilele out1 şi
out2 sunt fie de tip wire fie de tip reg, dup| felul în care sunt atribuite în
interiorul modulului MODUL. În exterior, out1 şi out2 sunt conectate la
variabile de tip wire.
Modulul simulat cu schema de mai sus poate s| aib| o structur| ierarhic|
în care sunt instanÛiate alte module. Test bench-ul MODUL_sim include
întreaga ierarhie din MODUL. Modulele se stocheaz| în fişiere de tip
nume_fişier.v; extensia .v este specific| Verilog. Numele fişierului nu trebuie
s| fie neap|rat identic cu numele modulului. Un fişier poate s| conÛin| oricâte
module. Test bench-ul împreun| cu toate modulele care apar în ierarhia lui
392 Cap.7 Proiectarea circuitelor digitale cu Verilog

trebuie înc|rcate în simulator şi apoi compilate. OperaÛia de compilare


determin| leg|turile dintre componentele ierarhiei şi realizeaz| o conversie a
textului sau limbajului Verilog într-o baz| de date specific| simulatorului.
În continuare se prezint| exemple de module şi test bench-uri precum şi
rezultatele simul|rilor.
Sumatorul elementar de un bit FullAdder poate fi modelat astfel:
module FA(a, b, cin, cout, s); //versiunea 1
input a, b, cin;
output cout, s;
reg s;
assign cout = (a & b) | (cin & (a | b));
always @ (a or b or cin)
s = a ^ b ^ cin;
endmodule
În aceast| descriere a, b, cin şi cout sunt în mod implicit de tip wire; s este
declarat reg deoarece este atribuit procedural (în procesul always). Ambele
ieşiri cout şi s pot fi atribuite continuu sau procedural. Modulul FA nu conÛine
întârzieri, adic| opereaz| cu vitez| infinit|.
Test bench-ul cu numele FA_sim genereaz| toate combinaÛiile de trei biÛi la
intr|rile a, b, cin ale modulului FA, în ordine cresc|toare de la 000 la 111.
Aceste teste sunt aplicate la intervale egale cu 10 unit|Ûi de timp; fiecare test
este aplicat o singur| dat|.
module FA_sim;
reg r1, r2, r3;
wire o1, o2;
integer j;
FA sum(r1, r2, r3, o1, o2); //instanÛierea modulului FA
initial
begin
$display (“ns”,,, “a b cin cout s”);
$monitor ($time,,, “%b %b %b %b %b”,
r1, r2, r3, o1, o2);
for(j = 0; j <= 7; j = j + 1)
begin
{r1, r2, r3} = j[2:0];
#10;
end
end
endmodule
Circuite Logice SecvenÛiale Sincrone 393

Rezultatele simul|rii modulului FA_sim sunt afişate astfel:


ns a b cin cout s
0 0 0 0 0 0
10 0 0 1 0 1
20 0 1 0 0 1
30 0 1 1 1 0
40 1 0 0 0 1
50 1 0 1 1 0
60 1 1 0 1 0
70 1 1 1 1 1
Prima linie este produs| de task-ul $display iar urm|toarele 8 sunt generate de
task-ul $monitor. La momentul 0 de simulare, la intr|rile a, b şi cin ale instanÛei
FA cu numele sum, se aplic| prin intermediul variabilelor r1, r2 şi respectiv r3
combinaÛia 000. InstanÛa sum r|spunde instantaneu cu 00. La orice moment din
din urm|toarele 7 (10, 20, ..., 70) la care se schimb| testul, instanÛa r|spunde
cu vitez| infinit|.
Dac| în modulul FA se introduc întârzieri, ca în versiunea 2 de mai jos,
module FA(a, b, cin, cout, s); //versiunea 2
input a, b, cin;
output cout, s;
reg s;
assign #2 cout = (a & b) | (cin & (a | b));
always @ (a or b or cin)
s = # 3 a ^ b ^ cin;
endmodule
atunci rezultatele simul|rii se modific| dup| cum urmeaz|.
ns a b cin cout s
0 0 0 0 x x
2 0 0 0 0 x
3 0 0 0 0 0
10 0 0 1 0 0
13 0 0 1 0 1
20 0 1 0 0 1
30 0 1 1 0 1
32 0 1 1 1 1
33 0 1 1 1 0
40 1 0 0 1 0
42 1 0 0 0 0
394 Cap.7 Proiectarea circuitelor digitale cu Verilog

43 1 0 0 0 1
50 1 0 1 0 1
52 1 0 1 1 1
53 1 0 1 1 0
60 1 1 0 1 0
70 1 1 1 1 0
73 1 1 1 1 1
Evenimentele de la momentele 2 şi 3 sunt tranziÛiile din x în 0 ale ieşirilor cout
şi respectiv s. Toate evenimentele intermediare, care au loc între momentele de
schimbare a testului, sunt detectate şi afişate de task-ul $monitor.
Exact aceleaşi rezultate produc şi urm|toarele dou| versiuni ale modulului FA.
module FA(a, b, cin, cout, s); //versiunea 3
input a, b, cin;
output cout, s;
assign #2 cout = (a & b) | (cin & (a | b));
assign #3 s = a ^ b ^ cin;
endmodule

module FA(a, b, cin, cout, s); //versiunea 4


input a, b, cin;
output cout, s;
reg cout, s;
always @ (a or b or cin)
begin
cout = # 2 (a & b) | (cin & (a | b));
s = # 1 a ^ b ^ cin;
end
endmodule
În versiunea 3 nu conteaz| ordinea de scriere a celor dou| atribuiri continue
deoarece acestea sunt executate în paralel de c|tre simulator. Ordinea
atribuirilor procedurale de tip blocking din versiunea 4 conteaz|. La fiecare
declanşare a procesului always de la momentele 0, 10, 20, 30, 40, 50, 60 şi
respectiv 70, blocul begin-end se execut| o singur| dat|. Atribuirile lui cout şi
s se fac dup| 2 şi respectiv 2 + 1 = 3 unit|Ûi de timp de la declanşarea
procesului.
Modulul Reg4bit din exemplul urm|tor reprezint| un registru de 4 biÛi.
DiferenÛa dintre cele dou| variante ale modulului const| în tipul de atribuiri
procedurale utilizate, blocking şi respectiv non-blocking. Modulul de simulare
sau test bench-ul este denumit Reg4bit_sim.
Circuite Logice SecvenÛiale Sincrone 395

module Reg4bit (RN, Ck, In, Q); //versiunea blocking


input RN, Ck, In;
output [3 :0] Q;
reg [3 :0] Q;
always @ (posedge Ck or negedge RN)
begin
if (!RN)
Q = 0;
else
begin
Q[0] = In;
Q[1] = Q[0];
Q[2] = Q[1];
Q[3] = Q[2];
end
end

module Reg4bit (RN, Ck, In, Q); //versiunea non-blocking


input RN, Ck, In;
output [3 :0] Q;
reg [3 :0] Q;
always @ (posedge Ck or negedge RN)
begin
if (!RN)
Q = 0;
else
begin
Q[0] <= In;
Q[1] <= Q[0];
Q[2] <= Q[1];
Q[3] <= Q[2];
end
end
Registrul Reg4bit are comand| asincron| de reset, activ| Low. Procesul always
se declanşeaz| la fronturile pozitive ale ceasului Ck şi la fronturile negative ale
semnalului RN. Dac| procesul s-a declanşat şi se evalueaz| RN = 0 atunci se
face atribuirea Q = 0 (adic| Q [3 :0] = 4' b0000) şi apoi se aşteapt| o nou|
declanşare a procesului. Dac| procesul s-a declanşat şi se evalueaz| RN = 1
atunci se execut| blocul begin-end asociat cu else, dup| care se aşteapt| o nou|
declanşare a procesului ş.a.m.d. În acest de-al doilea caz procesul este
declanşat de frontul pozitiv de ceas, deci atribuirile sunt sincronizate cu acest
396 Cap.7 Proiectarea circuitelor digitale cu Verilog

front. În versiunea blocking cele patru atribuiri se fac în serie, astfel:


- se evalueaz| întâi In şi i se d| aceast| valoarea lui Q[0],
- apoi se evalueaz| Q[0] şi i se d| aceast| valoarea lui Q[1],
- apoi se evalueaz| Q[1] şi i se d| aceast| valoarea lui Q[2],
- apoi se evalueaz| Q[2] şi i se d| aceast| valoarea lui Q[3].
ExecuÛia avanseaz| numai dup| ce o atribuire este rezolvat| efectiv; în acest
timp simulatorul este “blocat” în sensul c| nu poate s| avanseze la linia de cod
urm|toare. Ca rezultat se obÛine o înc|rcare paralel| a celor 4 celule ale
registrului cu valoarea curent| de la intrarea In.
În versiunea non-blocking cele patru atribuiri se fac în paralel, astfel:
- întâi se evalueaz| toate valorile din partea dreapt| a egalit|Ûilor (<=),
simulatorul avansând liniile de cod f|r| s| rezolve efectiv vreo atribuire,
- apoi se fac cele patru atribuiri în paralel.
Ca rezultat se obÛine o deplasare serie între cele 4 celule ale registrului şi
valoarea curent| de la intrarea In.
Rezultatele sintezei logice sunt ilustrate în Fig.7.10.

Fig.7.10 Implement|rile modulului Reg4bit

În modulul de simulare s-a asociat numelui Reg4bit_sim o list| compus| din


patru porturi; toate semnalele (variabilele) din aceast| list| vor fi afişate sub
forma diagramelor de timp. Task-urile sistem $display şi $monitor nu sunt
utilizate în acest test bench.
CondiÛiile iniÛiale reset = 0 şi clock = 0 (sau clock = 1) sunt obligatorii. Dac|
nu se porneşte simularea cu valori cunoscute în cei patru bistabili atunci starea
circuitului r|mâne necunoscut| (Q = 4' bxxxx) pân| când se activeaz| prima
dat| comanda de reset. Dac| nu se porneşte simularea cu o valoare cunoscut|
Circuite Logice SecvenÛiale Sincrone 397

pentru semnalul clock atunci procesul always genereaz| numai valori x.

module Reg4bit_sim (reset, clock, in, out);


output reset, clock, in;
output [3 : 0] out;
reg reset, clock, in;
// în mod implicit out este de tip wire
Reg4bit regSorP(reset, clock, in, out); // SorP = serie sau paralel
initial //condiÛiile iniÛiale sunt obligatorii
begin reset = 0; clock = 0; in = 0; end
always //generarea unui semnal de ceas cu perioada 20
clock = #10 !clock; // în loc de ! se poate folosi ~
initial //dezactivare reset şi generare impulsuri de intrare
begin
reset = #2 1; //echivalent cu #2 reset = 1;
# 3; in = 1; # 15 in = 0; # 20; in = 1; # 20 in = 0; # 20 in =1;
end
endmodule
Rezultatele simul|rilor sunt prezentate în Fig.7.11. Abrevierile NB şi B au
semnificaÛiile non-blocking şi respectiv blocking.

Fig.7.11 Rezultatele simul|rii modulului Reg4bit_sim


398 Cap.7 Proiectarea circuitelor digitale cu Verilog

7.3.5 Directive de compilare


Directivele compilatorului Verilog definite de standardul IEEE 1364 din
anul 2001 sunt urm|toarele.
`celldefine
`default_nettype
`define
`else
`elsif
`endcelldefine
`endif
`ifdef
`ifndef
`include
`line
`nounconnected_drive
`resetall
`timescale
`unconnected_drive
`undef
Acestea sunt cuvinte cheie care încep cu accentul grav (`) şi nu se termin| cu
punct virgul| (;) ca o declaraÛie Verilog. Directivele controleaz| modul de
interpretare a modelelor Verilog de c|tre tool-urile soft. Numai `define şi
`include pot fi utilizate într-un modul sintetizabil; celelalte directive se
adreseaz| în special simulatorului. O directiv| produce efecte din momentul
execuÛiei şi pân| când este înlocuit| sau oprit| de c|tre o alt| directiv|.
`resetall determin| toate directivele s| revin| la valorile default; cele care
nu au valori default nu sunt afectate.
`timescale fixeaz| unitatea de timp şi precizia pentru întârzierile din
modulele care urmeaz|. Unitatea de timp poate s| fie 1, 10 sau 100 de s, ms,
us, ns, ps sau fs. De exemplu
`timescale 1 ns / 10 ps
fixeaz| 1 ns ca unitate de timp şi precizia calculelor de 10 ps.
Perechea `celldefine ... `endcelldefine se utilizeaz| pentru a eticheta
anumite module sau porÛiuni de cod ca fiind celule. Eticheta este necesar|
pentru anumite tool-uri, de exemplu pentru calculatorul de întârzieri. Într-un
model (sau descriere) Verilog se pot folosi mai multe perechi `celldefine ...
`endcelldefine. Aceste directive se pot plasa oriunde în modelul Verilog dar nu
în interiorul modulelor. Directiva `resetall include efectul directivei
`endcelldefine.
Circuite Logice SecvenÛiale Sincrone 399

`default_nettype se poate plasa numai în exteriorul modulelor şi afecteaz|


toate modulele care urmeaz|, pân| la sfârşitul modelului Verilog sau pân| la
urm|toarea apariÛie a `default_nettype. Sintaxa acestei directive este
`default_nettype tip_net (7.35)
în care tip_net poate fi una dintre categoriile wire, wand, wor, tri, triand, trior,
tri0, tri1, trireg, none. Directiva fixeaz| sau controleaz| tipul conexiunilor
implicite. Defaul-ul pentru tip_net este wire.
ObservaÛie: În modulele sintetizabile conexiunile implicite trebuie s| fie
obligatoriu de tip wire.
`unconnected_drive are ca argument fie pull0 fie pull1. Toate intr|rile
flotante ale modulelor cuprinse între liniile
`unconnected_drive pull0 //sau pull1
...............................
`nounconnected_drive
sunt conectate automat la 0 logic (sau la 1 logic). Directiva `resetall include
efectul directivei `nounconnected_drive, adic| intr|rile flotante r|mân
neconectate. Perechea `unconnected_drive ... `nounconnected_drive se plaseaz|
în exteriorul modulelor.
`include poate s| fie plasat| oriunde în modelul Verilog, inclusiv în
interiorul modulelor sintetizabile. Aceast| directiv| are ca argument calea
relativ| sau absolut| c|tre un fişier Verilog. Sintaxa directivei este
`include “cale /nume_fişier.v” (7.36)
Compilatorul anexeaz| tot conÛinutul fişierului nume_fişier.v în codul surs|
începând de la linia directivei. Pe aceast| linie sunt acceptate comentarii. La
rândul lui, fişierul inclus poate s| conÛin| alte directive `include. Avantajul
major al utiliz|rii directivei `include const| în îmbun|t|Ûirea organiz|rii şi
mentenanÛei codurilor surs| Verilog. De exemplu, funcÛiile şi task-urile definite
de utilizator pot fi stocate în fişiere distincte şi apoi incluse în orice modul.
`line se foloseşte pentru schimbarea num|rului liniei curente şi numelui
fişierului curent din codul surs| şi are sintaxa urm|toare
`line num|r_linie “nume_fişier” cod (7.37)
în care num|r_linie devine num|rul liniei curente şi nume_fişier înlocuieşte
numele fieşierului curent. Câmpul cod este un num|r (0, 1 sau 2) care indic|
- intrarea într-un fişier inclus în codul surs| cu directiva `include (codul 1),
- ieşirea dintr-un fişier inclus în codul surs| cu directiva `include (codul 2),
- nici una dintre cele dou| situaÛii anterioare (codul0).
Rezultatul directivei nu este afectat de `resetall. Pe m|sur| se compilatorul
400 Cap.7 Proiectarea circuitelor digitale cu Verilog

avanseaz| are loc actualizarea num|rului liniei şi numelui fişierului.


`define creeaz| macro-uri pentru diverse substituiri şi poate s| fie plasat|
oriunde în modelul Verilog, inclusiv în interiorul modulelor sintetizabile.
Directiva are sintaxa
`define nume(arg1, arg2, arg3, ...) text (7.38)
în care nume reprezint| numele macro-ului, (arg1, arg2, arg3, ...) este o list|
opÛional| de argumente formale iar text este un text arbitrar care conÛine
identificatorii arg1, arg2, arg3, ... şi care este înlocuit în codul surs| cu
`nume(val1, val2, val3, ...). Valorile val1, val2, val3, ... sunt date argumentelor
formale arg1, arg2, arg3, ... la locul utiliz|rii macro-ului.
Exemple:
`define size 12
reg [`size-1 : 0] RA, RB; // vectori de 12 biÛi
.........................
`define pXOR(delay, s0, s1) xor (s0, s1) # delay
.........................
//instanÛierea a dou| primitive xor
`pXOR(3, pull0, strong1) G1(Y1, a1, b1);
`pXOR(5, weak0, pull1) G2(Y2, a2, b2);
.........................
`define Tck 12 // Tck reprezint| perioada ceasului
always # ( ` Tck / 2 ) clock = ~ clock;
.........................
`define min(a, b) ((a) < (b) ? (a) : (b))
q = `min (alfa, M + r);
ObservaÛii:
1) Dac| în 7.38 text nu încape pe aceeaşi linie cu directiva `define atunci noile
linii ocupate de text trebuie s| înceap| cu \ (backslash). Caracterele \ nu fac
parte din text. Prima linie care nu mai începe cu \ indic| sfârşitul textului
substituit de macro.
2) Dup| text se accept| comentarii specificate prin // (dublu slash);
comentariile nu fac parte din text.
3) Textul text din 7.38 poate fi şi un spaÛiu gol (blank).
4) Utilizarea macro-urilor permite modificarea uşoar| a fişierelor surs|
Verilog; modificarea textului text din 7.38 determin| modificarea tuturor
apariÛiilor acestuia reprezentate prin numele macro-ului.
5) Directiva `resetall nu are efect asupra directivei `define.
`undef nume suprim| definiÛia macro-ului nume. Mai departe în codul
surs|, începând de la aceast| linie, `nume nu mai este recunoscut, ca şi cum
macro-ul nu a fost definit anterior.
Circuite Logice SecvenÛiale Sincrone 401

Grupul de directive `ifdef, `else, `elseif, `endif, `ifndef permite realizarea


unor construcÛii condiÛionale, similare cu if ... else if ... else, prin care se pot
include linii opÛionale în modelul Verilog (codul surs|) pe durata compil|rii.
ConstrucÛiile condiÛionale sunt utile în selectarea versiunilor de module
(comportamental, structural, comutator), informaÛiilor de întârziere, testelor sau
stimulilor, etc. Sintaxa general| are forma
`ifdef nume_macro1 //sau `ifndef nume_macro1 (7.39)
.................. ; //linii de cod Verilog
`elseif nume_macro2
.................. ; //linii de cod Verilog
`elseif nume_macro3
.................. ; //linii de cod Verilog
...................................
`else
.................. ; //linii de cod Verilog
`endif
Directivele `ifdef (/ if defined) şi `ifndef (/ if not defined) verific| dac|
nume_macro1 este definit şi respectiv dac| nu este definit (definirea sau
crearea unui macro se face cu directiva `define).
Exemplu:
`ifdef behavioral
assign (strong0, pull1) #(1, 4) Z1 = ~ (r & s & q) ,
Z2 = (sel) ? (a | c) : ((b ^ (c & d));
`else
nand (strong0, pull1) #(1, 4) (Z1, r, s, q);
and (n1, c, d), (n3, n2, n4), (n6, n5, sel);
not (n4, sel);
or (n5, a, c);
or (strong0, pull1) #(1, 4) (Z2, n3, n6);
xor (n2, n1, b);
`endif
Atribuirile continue ale net-urilor Z1 şi Z2 sunt echivalente funcÛional cu
modelul structural obÛinut prin instanÛierile primitivelor cuprinse între `else şi
`endif.

7.4 Probleme rezolvate

1. Fie e1, e2, e3 şi e4 patru evenimente abstracte. S| se scrie un model


Verilog care s| declanşeze evenimentul e4
a) numai dup| ce evenimentele e2, e1 şi e3 au avut loc, strict în aceast| ordine;
402 Cap.7 Proiectarea circuitelor digitale cu Verilog

b) numai dup| ce fiecare dintre evenimentele e1, e2 şi e3 a avut loc de câte trei
ori cel puÛin, indiferent de ordine.
În ambele cazuri (a, b) dup| declanşarea evenimentului e4 trebuie s| se revin|
la starea iniÛial|, din care începe o alt| contorizare în vederea unei noi
declanş|ri a evenimentului e4 ş.a.m.d.
R e z o l v a r e:
a) ..........................
event e1, e2, e3;
..........................
module triggerA;
event e4;
reg [1:0] k;
initial
k = 0;
always
begin : trigg
if (k = = 0)
fork
@ e1 disable trigg;
@ e2 begin k = 2; disable trigg; end
@ e3 disable trigg;
join
else if (k = = 1)
fork
@ e1 begin k = 0; disable trigg ; end
@ e2 begin k = 2; disable trigg ; end
@ e3 begin k = 0; -> e4; disable trigg ; end
join
else if (k = = 2)
fork
@ e1 begin k = 1; disable trigg ; end
@ e2 disable trigg ;
@ e3 begin k = 0; disable trigg ; end
join
else
begin k = 0; disable trigg ; end
end
endmodule
Evenimentele e1, e2 şi e3 sunt declarate în exteriorul modulului triggerA şi
sunt declanşate în procese din alte module.
La momentul 0 de simulare procesul initial forÛeaz| k = 0. Procesul always
Circuite Logice SecvenÛiale Sincrone 403

repet| la nesfârşit blocul begin-end cu numele trigg. În blocurile fork-join


evenimentul care apare primul (e1, e2 sau e3) opreşte execuÛia curent| a
blocului trigg, eventual dup| ce i se atribuie lui k o nou| valoare. ExecuÛia
blocului trigg se reia de la început, testându-se valoarea lui k.
b) ..........................
event e1, e2, e3;
..........................
module triggerB;
event e4;
integer k1, k2, k3;
initial
begin
k1 = 0; k2 = 0; k3 = 0;
end
always
begin
fork : trigg
@ e1 begin
if (k1 < 3) k1 = k1 +1;
else disable trigg;
end
@ e2 begin
if (k2 < 3) k2 = k2 +1;
else disable trigg;
end
@ e3 begin
if (k3 < 3) k3 = k3 +1;
else disable trigg;
end
join
if ((k1 = = 3) && (k2 = = 3) && (k3 = = 3))
begin -> e4; k1 = 0; k2 = 0; k3 = 0; end
else ;
end
endmodule
La momentul 0 de simulare procesul initial forÛeaz| contorii k1, k2 şi k3 la
valoarea 0. Blocul begin-end din procesul always se repet| la nesfârşit. ApariÛia
evenimentelor e1, e2, e3 este contorizat| în paralel în blocul fork-join cu
numele trigg. Valoarea maxim| la care poate s| ajung| k1, k2 şi k3 este 3. Dac|
un contor kj (j = 1, 2 sau 3) atinge valoarea 3 atunci urm|toarea apariÛie (adic|
404 Cap.7 Proiectarea circuitelor digitale cu Verilog

declanşare) a evenimentului ej va opri execuÛia blocului trigg. Mai departe se


verific| dac| toÛi contorii au valoarea maxim|. CondiÛia se poate rescrie astfel
if (k1*k2*k3 = = = 27).
În caz afirmativ se declanşeaz| evenimentul e4 şi se reseteaz| cei trei contori,
altfel nu se face nici o acÛiune. ExecuÛia curent| a blocul begin-end se termin|
şi începe o nou| execuÛie. Declanşarea evenimentului e4 în procesul always se
face dup| un num|r variabil şi necunoscut de execuÛii ale blocului begin-end,
dependent de felul în care se declanşeaz| evenimentele e1, e2 şi e3 în
exteriorul modulului triggerB.

2. S| se scrie modelul Verilog pentru un circuit aritmetic-logic care s|


fac| operaÛii de adunare, sc|dere, AND, OR şi XOR dintre doi operanzi întregi
f|r| semn de 32 de biÛi. Simbolul circuitului şi tabela de funcÛionare sunt
desenate în figura de mai jos. În cazul adun|rii şi sc|derii bitul cel mai
semnificativ R[32] al rezultatului reprezint| transportul şi respectiv
împrumutul; acest bit nu are relevanÛ| în cazul operaÛiilor logice. S| se utilizeze
operaÛia ? : în modelarea circuitului.

Fig.7.12 Circuit aritmetic-logic

R e z o l v a r e:
module ALU(A, B, op, R);
input [31:0] A, B;
input [2:0] op;
output [32:0] R;
parameter sum = 3' o0, dif = 3' o1, si = 3' o2, sau = 3' o3, excl = 3' o4;
assign R = ((op = = sum) ? A + B : (
(op = = dif) ? A - B : (
(op = = si) ? {0, A & B} : (
(op = = sau) ? {0, A | B} : (
(op = = excl) ? {0, A ^ B} : 0 )))));
endmodule
Circuite Logice SecvenÛiale Sincrone 405

Bitul R[32] este setat la valoarea 0 pentru operaÛiile logice AND, OR şi XOR.
De asemenea, rezultatului R i se atribuie valoarea 0 atunci când codul binar
aplicat la intr|rile de control op nu corespunde niciuneia din cele 5 operaÛii
definite; R = 0 înseamn| R = 010 echivalent cu R = 33` b00...0.
În locul declaraÛiei parameter se poate utiliza directiva `define astfel:
module ALU(A, B, op, R);
input [31:0] A, B;
input [2:0] op;
output [32:0] R;
`define sum 000
`define dif 001
`define si 010
`define sau 011
`define excl 100
assign R = ((op = = `sum) ? A+B:(
(op = = `dif) ? A-B:(
(op = = `si) ? {0, A & B} : (
(op = = `sau) ? {0, A | B} : (
(op = = `excl) ? {0, A ^ B} : 0 )))));
endmodule

3. S| se modeleze un decodificator 1 din 4 cu ieşiri active High şi intrare


de autorizare a funcÛion|rii, cu ajutorul unei funcÛii de decodificare adecvate.
S| se introduc| întârzieri în modelul Verilog. S| se scrie test bench-ul asociat
decodificatorului.
R e z o l v a r e:
FuncÛia de decodificare 1 din 4 urm|toare descrie operaÛia cerut| în enunÛul
problemei; A şi EN (enable negat) au semnificaÛiile de adres| şi respectiv de
autorizare. Dac| intrarea de autorizare nu este activ| (EN = 1) sau dac|
vreunul dintre biÛii de adres| are valoarea necunoscut| x atunci toate
coordonatele funcÛiei cap|t| valoarea 0.
function [3 : 0] decode;
input EN;
input [1 : 0] A;
begin
if (EN)
decode = 4` b0000;
else
case (A)
2' b00 : decode = 4' b0001;
406 Cap.7 Proiectarea circuitelor digitale cu Verilog

2' b01 : decode = 4' b0010;


2' b10 : decode = 4' b0100;
2' b11 : decode = 4' b1000;
default : decode = 4' b0000;
endcase
end
endfunction
FuncÛia decode se poate salva ca fişier distinct, de exemplu func_decode.v,
într-o anumit| locaÛie din structura de directoare a sistemului de operare gazd|.
/cale/func_decode.v
Calea specificat| poate s| fie absolut| sau relativ| la directorul de lucru.
Modelul Verilog al decodificatorului f|r| întârzieri are structura
module decoder1of4 (address, enableN, out);
input enableN;
input [1 : 0] address;
output [3 : 0] out; reg [3 : 0] out;
`include “/cale/func_decode.v”
always @ (enableN or address)
out = decode (enableN, address);
endmodule
iar test bench-ul (modulul de simulare) poate fi urm|torul.
module decoder1of4_sim;
reg en;
reg [1:0] ad;
wire [3:0] OUT;
decoder1of4 DEC(.address(ad), .out(OUT), .enableN(en));
integer k;
initial
begin
$display (“time EN Ad Out”);
$monitor (“%d ns”, $time,,, “%b %b %b”, en, ad, OUT
);
en = 1; #10; en = 0;
for (k =0; k < 4; k = k + 1)
begin ad = k; #10; end
end
endmodule
Circuite Logice SecvenÛiale Sincrone 407

Rezultatele simul|rii modulului decoder1of4_sim sunt urm|toarele:


time EN Ad Out
0 ns 1 xx 0000
10 ns 0 00 0001
20 ns 0 01 0010
30 ns 0 10 0100
40 ns 0 11 1000.
Întârzieri în funcÛionarea decodificatorului se pot specifica prin intermediul
atribuirii procedurale, de exemplu
out = #3 decode (enableN, address);
Aceast| modificare în modulul decoder1of4 produce rezultatele
time EN Ad Out
0 ns 1 xx xxxx
3 ns 1 xx 0000
10 ns 0 00 0000
13 ns 0 00 0001
20 ns 0 01 0001
23 ns 0 01 0010
30 ns 0 10 0010
33 ns 0 10 0100
40 ns 0 10 0100
43 ns 0 11 1000.
ObservaÛie: Nu se accept| specificarea întârzierii în formele
out = #(3, 5) decode (enableN, address);
out = #(3, 4, 6) decode (enableN, address);
Întârzierile asociate cu net-urile şi porÛile din structura unui modul sunt
întârzieri distribuite. Un alt mod de specificare a întârzierilor const| în
asocierea acestora cu c|ile de propagare dintre intr|rile şi ieşirile modulului.
Acest lucru se poate face cu ajutorul blocului specify-endspecify. El se poate
plasa oriunde în interiorul unui modul. O form| simplificat| a acestui bloc este
specify (7.40)
specparam param1 = val1, param2 = val2, ... ;
(intrare => ieşire) = (param1, param2); //parallel connection
// (intrare => ieşire) = (d1, d2);
// (intrare => ieşire) = d;
(list|_intr|ri *> list|_ieşiri) = (param3, param7); //full connection
endspecify
408 Cap.7 Proiectarea circuitelor digitale cu Verilog

Prin intermediul blocului specify-endspecify se pot defini c|i de propagare de


la intr|ri la ieşiri în dou| moduri şi anume:
a) (intrare => ieşire)
În aceast| construcÛie cele dou| porturi trebuie s| aib| acelaşi range [N-1 : 0];
se definesc N c|i de propagare paralele sau un bus. Capetele unei c|i au aceeaşi
coordonat|. Porturile intrare, ieşire pot s| fie şi scalari (N = 1).
b) (list|_intr|ri *> list|_ieşiri)
În aceast| construcÛie cele dou| liste pot s| aib| orice structur| de scalari şi
vectori. Toate perechile formate dintr-un bit de intrare şi unul de ieşire definesc
c|i de propagare. Num|rul acestora este egal cu produsul dintre num|rul de biÛi
din list|_intr|ri şi num|rul de biÛi din list|_ieşiri.
DeclaraÛia specparam este opÛional|. Constantele d1, d2, d nu trebuie declarate.
Întârzierile au formele (param1, param2), (d1, d2) în care param1 şi d1 au
semnificaÛie de rise delay iar param2 şi d2 au semnificaÛie de fall delay; dac|
se specific| o singur| valoare d, aceasta reprezint| atât rise cât şi fall delay.
Specificarea întârzierilor în decoder1of4 cu ajutorul blocului 7.40 se poate face
astfel:
module decoder1of4 (address, enableN, out);
input enableN;
input [1 : 0] address;
output [3 : 0] out; reg [3 : 0] out;
`include “/cale/func_decode.v”
specify
specparam tr = 3, tf = 4;
(enableN *> out) = 1;
(address *> out) = (tr, tf);
endspecify
always @ (enableN or address)
out = decode (enableN, address);
endmodule
Simularea acestei noi versiuni produce rezultatele
time EN Ad Out
0 ns 1 xx xxxx
1 ns 1 xx 0000
10 ns 0 00 0000
11 ns 0 00 0001
20 ns 0 01 0001
23 ns 0 01 0011
24 ns 0 01 0010
Circuite Logice SecvenÛiale Sincrone 409

30 ns 0 10 0010
33 ns 0 10 0110
34 ns 0 10 0100
40 ns 0 11 0100
43 ns 0 11 1100
44 ns 0 11 1000.

4. Simbolul şi tabela de adev|r ale unui codificator de adres| cu prioritate


sunt reprezentate în figura de mai jos. Valoarea necunoscut| x are semnificaÛie
şi de valoare indiferent| în acest caz. Ieşirea OE (output enable) activ| High
valideaz| codul Y2Y1Y0. Codul generat este invalid când toate intr|rile
circuitului au valoarea 0.

Fig.7.13 Codificator de adres| cu prioritate

S| se modeleze codificatorul de adres| utilizând: a) construcÛia if-else if-else;


b) construcÛia case-endcase; c) bucla for. S| se scrie test bench-ul asociat.
R e z o l v a r e:
a) module PAE (A, OE, Y);
input [7:0] A;
output OE; reg OE;
output [2:0] Y; reg [2:0] Y;
always @ (A)
begin
OE = | A;
if (A[7]) Y = 7;
else if (A[6]) Y = 6;
else if (A[5]) Y = 5;
else if (A[4]) Y = 4;
else if (A[3]) Y = 3;
410 Cap.7 Proiectarea circuitelor digitale cu Verilog

else if (A[2]) Y = 2;
else if (A[1]) Y = 1;
else if (A[0]) Y = 0;
else Y = 3' bx;
end
endmodule
b) module PAE (A, OE, Y);
input [7:0] A;
output OE; reg OE;
output [2:0] Y; reg [2:0] Y;
always @ (A)
begin
OE = | A;
casex (A)
8' b1xxxxxxx : Y = 7;
8' b01xxxxxx : Y = 6;
8' b001xxxxx : Y = 5;
8' b0001xxxx : Y = 4;
8' b00001xxx : Y = 3;
8' b000001xx : Y = 2;
8' b0000001x : Y = 1;
8' b00000001 : Y = 0;
default : begin OE = 0; Y = 3' bx; end
endcase
end
endmodule
c) module PAE (A, OE, Y);
input [7:0] A;
output OE; reg OE;
output [2:0] Y; reg [2:0] Y;
always @ (A)
begin: search
integer k;
for (k = 0; k < 8; k = k + 1)
if (A[7 - k])
begin OE = 1; Y = 7 - k; disable search; end
OE = 0;
Y = 3' bx;
end
endmodule
Circuite Logice SecvenÛiale Sincrone 411

Bucla for se poate scrie şi în forma


for (k = 7; k >= 0; k = k - 1)
if (A[k])
begin OE = 1; Y = k; disable search; end
Versiunea (c) se adapteaz| foarte uşor pentru a modela codificatorul de adres|
cu 2n intr|ri; num|rul de linii din structura modulului nu se modific|.
Test bench-ul poate s| aib| structura urm|toare.
module PAE_sim;
reg [7:0] address;
wire valid;
wire [2:0] out;
PAE encoder(address, valid, out);
initial
begin
$display (“time A[7:0] Y[2:0] OE”);
$monitor(“%d ns %b %b %b”, $time, address,
out, valid);
address [7] = 1; #10;
address [7:6] = 1; #10;
address [7:5] = 1; #10;
address [7:4] = 1; #10;
address [7:3] = 1; #10;
address [7:2] = 1; #10;
address [7:1] = 1; #10;
address = 1; #10;
address = 0;
end
endmodule
Simularea acestui modul de test produce rezultatele
time A[7:0] Y[2:0] OE
0 ns 1xxxxxxx 111 1
10 ns 01xxxxxx 110 1
20 ns 001xxxxx 101 1
30 ns 0001xxxx 100 1
40 ns 00001xxx 011 1
50 ns 000001xx 010 1
60 ns 0000001x 001 1
70 ns 00000001 000 1
80 ns 00000000 xxx 0.
412 Cap.7 Proiectarea circuitelor digitale cu Verilog

Dac| se introduce blocul


specify
(A *> OE, Y) = (3, 2); //rise delay = 3 şi fall delay = 2
endspecify
în oricare din cele trei versiuni (a, b, c) ale codificatorului de adres| PAE
atunci rezultatele simul|rii se modific| astfel:
time A[7:0] Y[2:0] OE
0 ns 1xxxxxxx xxx x
3 ns 1xxxxxxx 111 1
10 ns 01xxxxxx 111 1
12 ns 01xxxxxx 110 1
20 ns 001xxxxx 110 1
22 ns 001xxxxx 100 1
23 ns 001xxxxx 101 1
30 ns 0001xxxx 101 1
32 ns 0001xxxx 100 1
40 ns 00001xxx 100 1
42 ns 00001xxx 000 1
43 ns 00001xxx 011 1
50 ns 000001xx 011 1
52 ns 000001xx 010 1
60 ns 0000001x 010 1
62 ns 0000001x 000 1
63 ns 0000001x 001 1
70 ns 00000001 001 1
72 ns 00000001 000 1
80 ns 00000000 000 1
82 ns 00000000 000 0
83 ns 00000000 xxx 0.
Se observ| c| tranziÛiile ieşirilor x Y 1 şi 0 Y x de la momentele de simulare
3 ns şi respectiv 83 ns sunt întârziate cu rise delay.

5. Circuitul desenat în Fig.7.14a reprezint| o celul| de comparare


expandabil|; schema de expandare este desenat| în Fig.7.14b. NotaÛiile im, ie
şi iM au semnificaÛiile input mai mic, input egal şi respectiv input mai mare;
semnificaÛii similare au şi notaÛiile om, oe şi oM doar c| reprezint| ieşiri
(output). Comparatorul j+1 are prioritate faÛ| de comparatorul j. De asemenea,
comparaÛia operanzilor A şi B (în aceast| ordine) are prioritate faÛ| de
informaÛia de intrare {im, ie, iM} în determinarea rezultatului {om, oe, oM}.
Circuite Logice SecvenÛiale Sincrone 413

Fig.7.14 Comparator expandabil

S| se scrie un model Verilog pentru celula COMP şi test bench-ul asociat


COMP_sim.
R e z o l v a r e:
Atât {im, ie, iM} cât şi {om, oe, oM} sunt coduri de tip 1 din 3, adic| unul şi
numai unul din cei trei biÛi are valoarea 1 iar ceilalÛi doi au valoarea 0.
module COMP (A, B, im, ie, iM, om, oe, oM);
input [3 :0] A, B;
input im, ie, iM;
output om, oe, oM;
reg om, oe, oM;
always @ (A or B or im or ie or iM)
begin
if (A > B) {om, oe, oM} = 3' b001;
else if (A < B) {om, oe, oM} = 3' b100;
else if (A = = B) {om, oe, oM} = {im, ie, iM};
else {om, oe, oM} = 3' bx;
end
specify
(im => om) = 2; (ie => oe) = 2; (iM => oM) = 2;
(A, B *> om, oe, oM) = (4, 3);
endspecify
endmodule
C|ile im — om, ie — oe şi iM — oM definite prin declaraÛiile
(im => om) = 2; (ie => oe) = 2; (iM => oM) = 2;
au întârzierea egal| cu 2 (tranziÛiile pozitive şi negative de la ieşiri sunt
întârziate cu 2). DeclaraÛia
(A, B *> om, oe, oM) = (4, 3);
defineşte 24 de c|i. TranziÛiile pozitive şi cele negative de la ieşirile om, oe,
414 Cap.7 Proiectarea circuitelor digitale cu Verilog

oM sunt întârziate cu 4 şi respectiv cu 3 unit|Ûi de timp faÛ| de schimb|rile de


la intr|rile A şi B care le declanşeaz|.
Test bench-ul urm|tor aplic| stimuli sau teste la intr|rile celulei COMP astfel
încât fiecare din cele 3 ieşiri s| se activeze de câte dou| ori.
module COMP_sim;
reg [3:0] A, B;
reg im, ie, iM;
wire om, oe, oM;
COMP expComp (A, B, im, ie, iM, om, oe, oM);
initial
begin
$display (“time A B im ie iM om oe oM”);
$monitor (“%d ns %b %b %b %b %b %b %b %b”,
$time, A, B, im, ie, iM, om, oe, oM);
A = 13; B = 5; #10;
A = 2; B = 10; #10;
A = 9; B = 9; #10;
A = 7; B = 7; im = 0; ie = 0; iM = 1; #10;
A = 3; B = 11; #10;
A = 8; B = 1; #10;
A = 14; B = 14; im = 0; ie = 1; iM = 0;
end
endmodule
Rezultatele simul|rii sunt urm|toarele:
time A B im ie iM om oe oM
0 ns 1101 0101 x x x x x x
2 ns 1101 0101 x x x 0 0 1
10 ns 0010 1010 x x x 0 0 1
13 ns 0010 1010 x x x 0 0 0
14 ns 0010 1010 x x x 1 0 0
20 ns 1001 1001 x x x 1 0 0
23 ns 1001 1001 x x x x 0 0
24 ns 1001 1001 x x x x x x
30 ns 0111 0111 0 0 1 x x x
32 ns 0111 0111 0 0 1 0 0 1
40 ns 0011 1011 0 0 1 0 0 1
43 ns 0011 1011 0 0 1 0 0 0
44 ns 0011 1011 0 0 1 1 0 0
50 ns 1000 0001 0 0 1 1 0 0
53 ns 1000 0001 0 0 1 0 0 0
Circuite Logice SecvenÛiale Sincrone 415

54 ns 1000 0001 0 0 1 0 0 1
60 ns 1110 1110 0 1 0 0 0 1
62 ns 1110 1110 0 1 0 0 1 0.
ObservaÛie: Simularea acestui modul scoate în evidenÛ| anumite rezultate care
nu sunt în concordanÛ| cu aştept|rile. De exemplu, testele A şi B de la
momentul de simulare 0 produc rezultatul corect numai dup| 2 ns, ca şi cum
propag|rile s-au f|cut pe c|ile im — om, ie — oe şi iM — oM. Acelaşi lucru
se întâmpl| cu testele A, B aplicate la momentele 30 ns şi 60 ns.

6. Circuitul din Fig.7.15 execut| deplas|ri şi rotiri la stânga sau la dreapta


out = SHIFT_L (in),
out = SHIFT_R (in),
out = ROTATE_L (in),
out = ROTATE_R (in),
conform tabelei de funcÛionare. Num|rul de ranguri sau de poziÛii ale acestor
operaÛii este determinat de vectorul de intrare nr (nr = 0, 1, 2, ..., 7).

Fig.7.15 Circuit de deplasare-rotire

S| se scrie un model Verilog şi un test bench pentru acest circuit.


R e z o l v a r e:
module barrelShifter (in, op, dir, nr, out);
input [15:0] in;
input op, dir;
input [2:0] nr;
output [15:0] out;
assign # 3 out = (!op) ? sh(in, dir, nr) : rot(in, dir, nr);
function [15:0] sh;
input [15:0] in;
input dir;
416 Cap.7 Proiectarea circuitelor digitale cu Verilog

input [2:0] nr;


begin
sh = (dir = = 0) ? (in << nr) : (in >> nr);
end
endfunction
function [15:0] rot;
input [15:0] in;
input dir;
input [2:0] nr;
reg [15:0] Reg_rotate;
reg tmp;
begin
Reg_rotate = in;
if (!dir)
repeat (nr)
begin
tmp = Reg_rotate [15];
Reg_rotate = Reg_rotate << 1;
Reg_rotate [0] = tmp;
end
else
repeat (nr)
begin
tmp = Reg_rotate [0];
Reg_rotate = Reg_rotate >> 1;
Reg_rotate [15] = tmp;
end
rot = Reg_rotate;
end
endfunction
endmodule

module barrelShifter_sim;
reg [15:0] in;
reg op, dir;
reg [2:0] nr;
wire [15:0] out;
barrelShifter BS (in, op, dir, nr, out);
initial begin
$display (“time op dir nr in out”);
Circuite Logice SecvenÛiale Sincrone 417

$monitor (“%d ns %b %b %d %b %b”,


$time, op, dir, nr, in, out);
op = 0; dir = 0; nr = 3; in = 37211; #10;
op = 0; dir = 1; nr = 7; in = 40030; #10;
op = 1; dir = 0; nr = 4; in = 37211; #10;
op = 1; dir = 1; nr = 5; in = 40030;
end
endmodule
Simularea modulului barrelShifter_sim produce rezultatele
time op dir nr in out
0 ns 0 0 3 1001000101011011 xxxxxxxxxxxxxxxx
3 ns 0 0 3 1001000101011011 1000101011011000
10 ns 0 1 7 1001110001011110 1000101011011000
13 ns 0 1 7 1001110001011110 0000000100111000
20 ns 1 0 4 1001000101011011 0000000100111000
23 ns 1 0 4 1001000101011011 0001010110111001
30 ns 1 1 5 1001110001011110 0001010110111001
33 ns 1 1 5 1001110001011110 1111010011100010.
ObservaÛie: Dac| în atribuirea continu| se specific| întârzierea în forma
assign # (3, 1) out = (!op) ? sh(in, dir, nr) : rot(in, dir, nr);
atunci rezultatele simul|rii sunt urm|toarele:
time op dir nr in out
0 ns 0 0 3 1001000101011011 xxxxxxxxxxxxxxxx
1 ns 0 0 3 1001000101011011 1000101011011000
10 ns 0 1 7 1001110001011110 1000101011011000
11 ns 0 1 7 1001110001011110 0000000100111000
20 ns 1 0 4 1001000101011011 0000000100111000
23 ns 1 0 4 1001000101011011 0001010110111001
30 ns 1 1 5 1001110001011110 0001010110111001
31 ns 1 1 5 1001110001011110 1111010011100010.
R|spunsurile out nu se modific|, îns| momentele la care apar acestea sunt
altele decât în simularea anterioar|. Dac| în vectorul out au loc tranziÛii
pozitive şi negative simultan atunci toate sunt întârziate la fel, cu fall delay,
ceea ce nu corespunde realit|Ûii. Dac| îns| toate tranziÛiile din vectorul out ar
fi de acelaşi fel, numai pozitive sau numai negative, atunci întârzierea care se
aplic| este rise delay şi respectiv fall delay. Este cazul testului in aplicat la
momentul 20 ns; acesta produce numai tranziÛii pozitive la ieşire (coordonatele
12, 10, 7 şi 0), ca urmare planificarea evenimentelor se face la momentul 23 ns.
418 Cap.7 Proiectarea circuitelor digitale cu Verilog

7. Fie A, B dou| numere întregi şi f|r| semn de N biÛi. OperaÛia de


adunare A + B + cin = {cout, S}
în care cin şi cout sunt transporturile de intrare şi respectiv de ieşire iar S
reprezint| suma, se poate efectua cu vitez| mare dac| urmeaz| principiul
ilustrat în Fig.7.16.

Fig.7.16 Principiul de adunare cu transport selectat

În fiecare rang sunt necesare dou| celule FullAdder şi dou| MUX2. Cele dou|
FA execut| în paralel operaÛiile A[k] + B[k] + 0 şi respectiv A[k] + B[k] + 1.
Transportul c[k] generat în rangul k-1 selecteaz| rezultatele S[k] şi c[k+1] din
rangul k. Toate celulele FA, din toate rangurile, opereaz| în paralel.
S| se scrie modelul Verilog pentru un sumator cu transport selectat de N biÛi
şi test bench-ul pentru simularea unei instanÛe de 4 biÛi, utilizând urm|toarele
8 teste: cin A B
0 0000 0000
0 0000 1111
0 1111 0000
0 1010 1010
1 0000 1111
1 1111 0000
1 1111 1111
1 0101 0101.
R e z o l v a r e:
În modelul comportamental al sumatorului de N biÛi se utilizeaz| notaÛiile
S0[N-1:0], cy0[N-1:0], S1[N-1:0], cy1[N-1:0] cu semnificaÛiile urm|toare:
{cy0[k], S0[k]} = A[k] + B[k] + 0
{cy1[k], S1[k]} = A[k] + B[k] + 1
k = 0, 1, 2, ..., N-1
{ , } reprezint| concatenarea.
Circuite Logice SecvenÛiale Sincrone 419

module carrySelAdder (A, B, cin, cout, S); // model comportamental 1


parameter N = 16;
input [N-1:0] A, B;
input cin;
output cout; reg cout;
output [N-1:0] S; reg [N-1:0] S;
reg [N-1:0] cy0, cy1, S0, S1;
reg [N:0] c;
always @ (A or B or cin)
begin
#1; //întârzierile porÛilor AND şi OR sunt egale cu 1
cy0 = A & B;
cy1 = A | B;
#1; //întârzierile porÛilor XOR şi XNOR sunt egale cu 2
S0 = A ^ B;
S1 = A ~ ^ B;
end
always @ (A or B or cin)
begin: select
integer j; //variabil| local|
c[0] = cin;
for (j = 0; j < N; j = j + 1)
if (c[j])
begin
#1; // întârzierea prin MUX2
c[j+1] = cy1[j];
S[j] = S1[j];
end
else
begin
#1; // întârzierea prin MUX2
c[j+1] = cy0[j];
S[j] = S0[j];
end
cout = c[N];
end
endmodule
Cele dou| procese always se desf|şoar| în paralel. În primul proces
transporturile cy0 şi cy1 cap|t| valorile corecte dup| 1 unitate de timp de la
modificarea intr|rilor A, B sau cin; a doua întârziere se cumuleaz| cu prima,
420 Cap.7 Proiectarea circuitelor digitale cu Verilog

ceea ce înseamn| c| valorile corecte S0 şi S1 apar dup| 2 unit|Ûi de timp. În al


doilea proces always fiecare iteraÛie din bucla for adaug| o întârziere de 1
unitate de timp; aceasta modeleaz| întârzierile multiplexoarelor.

module carrySelAdder_sim;
reg [3:0] operand1, operand2;
reg carry_in;
wire carry_out;
wire [3:0] sum;
carrySelAdder # (4) CSA(operand1, operand2, carry_in,
carry_out, sum);
//în instanÛierea de mai sus # (4) reprezint| N = 4
initial
begin
$display (“time cin A B cout S”);
$monitor (“%d ns %b %d %d %b %d”, $time, carry_in,
operand1, operand2, carry_out, sum);
carry_in = 0; operand1 = 4' b0000; operand2 = 4' b0000; #10;
carry_in = 0; operand1 = 4' b0000; operand2 = 4' b1111; #10;
carry_in = 0; operand1 = 4' b1111; operand2 = 4' b0000; #10;
carry_in = 0; operand1 = 4' b1010; operand2 = 4' b1010; #10;
carry_in = 1; operand1 = 4' b0000; operand2 = 4' b1111; #10;
carry_in = 1; operand1 = 4' b1111; operand2 = 4' b0000; #10;
carry_in = 1; operand1 = 4' b1111; operand2 = 4' b1111; #10;
carry_in = 1; operand1 = 4' b0101; operand2 = 4' b0101;
end
endmodule
Dac| se anuleaz| toate cele patru întârzieri #1 plasate în modulul
carrySelAdder atunci se obÛin rezultatele (corecte):
time cin A B cout S
0 ns 0 0 0 0 0
10 ns 0 0 15 0 15
20 ns 0 15 0 0 15
30 ns 0 10 10 1 4
40 ns 1 0 15 1 0
50 ns 1 15 0 1 0
60 ns 1 15 15 1 15
70 ns 1 5 5 0 11.
Dac| se comenteaz| (anuleaz|) numai întârzierile din primul proces always
atunci rezultatele arat| astfel (formatul lui S s-a schimbat din %d în %b):
Circuite Logice SecvenÛiale Sincrone 421

time cin A B cout S


0 ns 0 0 0 x xxxx
1 ns 0 0 0 x xxx0
2 ns 0 0 0 x xx00
3 ns 0 0 0 x x000
4 ns 0 0 0 0 0000
10 ns 0 0 15 0 0000
11 ns 0 0 15 0 0001
12 ns 0 0 15 0 0011
13 ns 0 0 15 0 0111
14 ns 0 0 15 0 1111
20 ns 0 15 0 0 1111
30 ns 0 10 10 0 1111
31 ns 0 10 10 0 1110
32 ns 0 10 10 0 1100
34 ns 0 10 10 1 0100
40 ns 1 0 15 1 0100
43 ns 1 0 15 1 0000
50 ns 1 15 0 1 0000
60 ns 1 15 15 1 0000
61 ns 1 15 15 1 0001
62 ns 1 15 15 1 0011
63 ns 1 15 15 1 0111
64 ns 1 15 15 1 1111
70 ns 1 5 5 1 1111
73 ns 1 5 5 1 1011
74 ns 1 5 5 0 1011.
R|spunsurile corecte la cele 8 teste se obÛin la momentele 4, 14, 20, 34, 43, 50,
64 şi 74 ns. Testele aplicate la momentele 20 şi 50 par s| produc| r|spunsurile
f|r| nici o întârziere din cauz| c| acestea nu produc schimb|ri faÛ| de testele
anterioare aplicate la momentele 10 şi respectiv 40 ns.. Dac| se face rocada
între aceste dou| teste atunci toate r|spunsurile apar cu întârziere.
Simularea cu întârzieri în ambele procese always produce rezultatele:
time cin A B cout S
0 ns 0 0 0 x xxxx
2 ns 0 0 0 x xx0x
3 ns 0 0 0 x x00x
4 ns 0 0 0 0 000x
10 ns 0 0 15 0 000x
11 ns 0 0 15 0 0000
12 ns 0 0 15 0 0010
422 Cap.7 Proiectarea circuitelor digitale cu Verilog

13 ns 0 0 15 0 0110
14 ns 0 0 15 0 1110
20 ns 0 15 0 0 1110
21 ns 0 15 0 0 1111
30 ns 0 10 10 0 1111
32 ns 0 10 10 0 1101
34 ns 0 10 10 1 0101
40 ns 1 0 15 1 0101
43 ns 1 0 15 1 0001
50 ns 1 15 0 1 0001
51 ns 1 15 0 1 0000
60 ns 1 15 15 1 0000
62 ns 1 15 15 1 0010
63 ns 1 15 15 1 0110
64 ns 1 15 15 1 1110
70 ns 1 5 5 1 1110
71 ns 1 5 5 1 1111
73 ns 1 5 5 1 1011
74 ns 1 5 5 0 1011.
În acest caz apar erori la bitul S[0] deoarece în celula de rang 0 a sumatorului
valorile corecte S0[0] şi S1[0] apar mai târziu cu 1 ns faÛ| de momentul în care
acestea sunt preluate şi propagate prin MUX2 la ieşirea S[0], ceea ce nu
corespunde realit|Ûii. Urm|toarea versiune de 4 biÛi a sumatorului nu are aceste
dezavantaje, specifice atribuirilor procedurale.
module carrySelAdder (A, B, cin, cout, S); // model comportamental 2
input [3:0] A, B;
input cin;
output cout;
output [3:0] S;
reg [3:0] cy0, cy1, S0, S1;
wire [3:0] c;
always @ (A or B or cin)
begin
#1; //întârzierile porÛilor AND şi OR sunt egale cu 1
cy0 = A & B;
cy1 = A | B;
#1; //întârzierile porÛilor XOR şi XNOR sunt egale cu 2
S0 = A ^ B;
S1 = A ~ ^ B;
end
Circuite Logice SecvenÛiale Sincrone 423

assign c[0] = cin;


assign #1 c[1] = (c[0]) ? cy1[0] : cy0[0], S[0] = (c[0]) ? S1[0] : S0[0];
assign #2 c[2] = (c[1]) ? cy1[1] : cy0[1], S[1] = (c[1]) ? S1[1] : S0[1];
assign #3 c[3] = (c[2]) ? cy1[2] : cy0[2], S[2] = (c[2]) ? S1[2] : S0[2];
assign #4 cout = (c[3]) ? cy1[3] : cy0[3], S[3] = (c[3]) ? S1[3] : S0[3];
endmodule
Rezultatele simul|rii acestui model sunt:
time cin A B cout S
0 ns 0 0 0 x xxxx
3 ns 0 0 0 x xxx0
4 ns 0 0 0 x xx00
5 ns 0 0 0 0 xx00
6 ns 0 0 0 0 x000
8 ns 0 0 0 0 0000
10 ns 0 0 15 0 0000
13 ns 0 0 15 0 0001
14 ns 0 0 15 0 0011
15 ns 0 0 15 0 0111
16 ns 0 0 15 0 1111
20 ns 0 15 0 0 1111
30 ns 0 10 10 0 1111
33 ns 0 10 10 0 1110
34 ns 0 10 10 0 1100
35 ns 0 10 10 1 1100
36 ns 0 10 10 1 0100
40 ns 1 0 15 1 0100
41 ns 1 0 15 1 0101
43 ns 1 0 15 1 0100
45 ns 1 0 15 1 0000
50 ns 1 15 0 1 0000
60 ns 1 15 15 1 0000
63 ns 1 15 15 1 0001
64 ns 1 15 15 1 0011
65 ns 1 15 15 1 0111
66 ns 1 15 15 1 1111
70 ns 1 5 5 1 1111
75 ns 1 5 5 0 1111
76 ns 1 5 5 0 1011.
424 Cap.7 Proiectarea circuitelor digitale cu Verilog

8. S| se scrie un model Verilog structural pentru sumatorul de 4 biÛi cu


transport selectat, considerând c| celula de baz| este cea desenat| în Fig.7.16.
De asemenea, se consider| cunoscute modulele MUX2(in0, in1, sel, Y) şi
FA(a, b, ci, co, s).
R e z o l v a r e:
Celula din Fig.7.16 este redesenat| în Fig.7.17. Tuturor conexiunilor din
schem| li s-au pus nume; aceste nume au valabilitate numai pe acest nivel
ierarhic, adic| nu intr| în conflict cu nume identice situate pe nivele ierarhice
inferioare sau superioare.

Fig.7.17 Celul| de adunare de 1 bit cu transport selectat (csa_1)

module csa_1(a, b, ci, co, s);


input a, b, ci;
output co, s;
wire n1, n2, n3, n4, n5, n6; //nu este neap|rat necesar|
//aceast| declaraÛie
FA FA1(a, b, n5, n1, n2), FA2(a, b, n6, n3, n4);
MUX2 M1(n1, n3, ci, co), M2(n2, n4, ci, s);
assign n5 = 0, n6 = 1;
endmodule
Schema sumatorului de 4 biÛi cu transport selectat este desenat| în Fig.7.18.

Fig.7.18 Sumator de 4 biÛi cu transport selectat


Circuite Logice SecvenÛiale Sincrone 425

module carrySelAdder (A, B, cin, cout, S); // model structural


input [3:0] A, B;
input cin;
output cout;
output [3:0] S;
csa_1 cell0 (A[0], B[0], cin, c1, S[0]),
cell1 (A[1], B[1], c1, c2, S[1]),
cell2 (A[2], B[2], c2, c3, S[2]),
cell3 (A[3], B[3], c3, cout, S[3]);
endmodule
Întârzieri se pot plasa numai în interiorul modulelor de pe nivelul ierarhic cel
mai mic, adic| în MUX2 şi FA.

9. S| se scrie modelul Verilog şi un test bench pentru o celul|


expandabil| de adunare de o cifr| în baza 7.
R e z o l v a r e:
Cifrele bazei 7 se codific| cu 3 biÛi şi iau valorile 0, 1, 2, 3, 4, 5 şi 6.
module adderMod7_1 (A, B, cin, cout, S); //versiunea 1
input [2:0] A, B;
input cin;
output cout; reg cout;
output [2:0] S; reg [2:0] S;
always @ (A or B or cin)
begin
S = (A + B + cin)%7;
if ((A + B + cin) > = 7)
cout = 1;
else
cout = 0;
end
endmodule

module adderMod7_1_sim;
reg [2:0] op1, op2;
reg cy_in;
wire cy_out;
wire [2:0] sum;
adderMod7_1 am7 (op1, op2, cy_in, cy_out, sum);
initial
begin
426 Cap.7 Proiectarea circuitelor digitale cu Verilog

$display (“time cin A B cout S”);


$monitor (“%d ns %b %d %d %b %d”, $time, cy_in,
op1, op2, cy_out, sum);
cy_in = 0; op1 = 3' b001; op2 = 3' b100; #10;
cy_in = 1; op1 = 3' b101; op2 = 3' b011; #10;
cy_in = 0; op1 = 3' b010; op2 = 3' b101; #10;
cy_in = 1; op1 = 3' b110; op2 = 3' b000; #10;
cy_in = 1; op1 = 3' b011; op2 = 3' b010;
end
endmodule
Simularea produce rezultatele:
time cin A B cout S
0 ns 0 1 4 0 5
10 ns 1 5 3 1 2
20 ns 0 2 5 1 0
30 ns 1 6 0 1 0
40 ns 1 3 2 0 6.
ObservaÛie: OperaÛiile înmulÛire, împ|rÛire şi modulo (*, /, %) nu sunt
sintetizabile, astfel c| versiunea 1 a celulei adderMod7_1 nu este sintetizabil|.
Versiunile 2 şi 3 sunt sintetizabile.
module adderMod7_1 (A, B, cin, cout, S); //versiunea 2
input [2:0] A, B;
input cin;
output cout; reg cout;
output [2:0] S; reg [2:0] S;
always @ (A or B or cin)
if ((A + B + cin) > = 7)
begin cout = 1; S = A + B + cin - 7; end
else
begin cout = 0; S = A + B + cin; end
endmodule

module adderMod7_1 (A, B, cin, cout, S); //versiunea 3


input [2:0] A, B;
input cin;
output cout;
output [2:0] S;
assign S = ((A + B + cin) > = 7) ? (A + B + cin - 7) : (A + B + cin),
cout = ((A + B + cin) > = 7) ? 1 : 0;
endmodule
Circuite Logice SecvenÛiale Sincrone 427

10. Împ|rÛirea a dou| numere întregi şi f|r| semn (A/B) se poate face
prin comparaÛii şi sc|deri astfel: din A se scade B dac| A >= B, iar aceast|
operaÛie se repet| pentru A Z A - B ş.a.m.d. Câtul împ|rÛirii este egal cu
num|rul de sc|deri efectuate iar restul împ|rÛirii este rezultatul ultimei sc|deri.
Pe baza acestui algoritm s| se scrie un model Verilog pentru circuitul de
împ|Ûire a dou| numere A[N-1:0] şi B[P-1:0], N > P.
R e z o l v a r e:
module divider(A, B, C, R, valid);
parameter N = 32, P = 8;
input [N-1:0] A;
input [P-1:0] B;
output valid; reg valid;
output [N-1:0] C; reg [N-1:0] C; //câtul împ|rÛirii
output [P-1:0] R; reg [P-1:0] R; //restul împ|rÛirii
reg [N-1:0] rA, nr;
reg [P-1:0] rB;
integer k;
always @ (A or B)
begin: div_alg
rA = A; rB = B; nr = A; C = 0;
if (rB)
begin
valid = 1;
if (rA = = 0) R = 0;
else
for (k = nr; k > 0; k = k -1)
if (rA >= rB)
begin
rA = rA - rB; C = C + 1;
end
else
begin
R = rA[P-1:0]; disable div_alg;
end
end
else
begin valid = 0; R = ‘bx; C = ‘bx; end
end
endmodule
Ieşirea valid are valoare 0 dac| B = 0, caz în care valorile generate de simulator
pentru C şi R nu trebuie luate în considerare. Împ|rÛirea se poate face numai
428 Cap.7 Proiectarea circuitelor digitale cu Verilog

dac| B este nenul, situaÛie semnalizat| prin valid = 1. Variabila întreag| k


folosit| în bucla for este iniÛializat| la valoarea maxim|, egal| cu num|rul A;
num|rul de operaÛii de sc|dere are aceast| valoare dac| B = 1.
Un test bench pentru verificarea modulului divider poate fi urm|torul.
module divider_sim;
reg [7:0] op1; // operand 1 sau deîmp|rÛit
reg [3:0] op2; // operand 2 sau împ|rÛitor
wire [7:0] cat;
wire [3:0] rest;
wire OK;
divider #(8, 4) Div (op1, op2, cat, rest, OK); // N = 8 şi P = 4
initial
begin
$display (“time A B C R valid”);
$monitor (“%d ns %d %d %d %d %b”, $time, op1, op2,
cat, rest, OK);
op1 = 8' b11001101; op2 = 4' b1001; #10;
op1 = 8' b10000110; op2 = 4' b0011; #10;
op1 = 8' b00000000; op2 = 4' b1000; #10;
op1 = 8' b00000110; op2 = 4' b0111; #10;
op1 = 8' b01100000; op2 = 4' b0000;
end
endmodule
Simularea modulului divider_sim produce rezultatele:
time A B C R valid
0 ns 205 9 22 7 1
10 ns 134 3 44 2 1
20 ns 0 8 0 0 1
30 ns 6 7 0 6 1
40 ns 96 0 x x 0.
ObservaÛie: Algoritmul de împ|rÛire poate fi modelat printr-un task astfel:
module divider(A, B, C, R, valid);
parameter N = 32, P = 8;
input [N-1:0] A;
input [P-1:0] B;
output valid; reg valid;
output [N-1:0] C; reg [N-1:0] C; //câtul împ|rÛirii
output [P-1:0] R; reg [P-1:0] R; //restul împ|rÛirii
always @ (A or B) div(A, B, C, R, valid);
Circuite Logice SecvenÛiale Sincrone 429

task div;
input [N-1:0] op1;
input [P-1:0] op2;
output [N-1:0] cat;
output [P-1:0] rest;
output OK;
reg [N-1:0] rA, nr;
reg [P-1:0] rB;
integer k;
begin: div_alg
rA = op1; rB = op2; nr = op1; cat = 0;
if (rB)
begin
OK = 1;
if (rA = = 0) rest = 0;
else
for (k = nr; k > 0; k = k -1)
if (rA >= rB)
begin
rA = rA - rB; cat = cat + 1;
end
else
begin
rest = rA[P-1:0]; disable div_alg;
end
end
else
begin OK = 0; rest = ‘bx; cat = ‘bx; end
end
endtask
endmodule
Parametrii N şi P sunt definiÛi în exteriorul task-ului. Task-ul div poate fi salvat
ca fişier distinct (de exemplu div_task.v) şi apoi inclus în modulul divider
utilizând directiva de compilare `include, dup| cum se arat| mai jos.
module divider(A, B, C, R, valid);
parameter N = 32, P = 8;
input [N-1:0] A;
input [P-1:0] B;
output valid; reg valid;
output [N-1:0] C; reg [N-1:0] C;
430 Cap.7 Proiectarea circuitelor digitale cu Verilog

output [P-1:0] R; reg [P-1:0] R;


`include “cale_fişier / div_task.v”
always @ (A or B)
div(A, B, C, R, valid);
endmodule

11. În Fig.7.19 este desenat simbolul unei memorii RAM care conÛine 4K
cuvinte de 32 biÛi. OperaÛiile de citire şi scriere sunt controlate de semnalele
Read şi respectiv Write, EnableW; Read şi Write sunt generate în contratimp
cu ajutorul unui semnal de ceas Clock dup| cum se arat| în Fig.7.20.

Fig.7.19 Circuit RAM

Fig.7.20 Generarea semnalelor Read şi Write

S| se modeleze în Verilog memoria RAM din Fig.7.19, generatorul de semnale


din Fig.7.20, modulul de TOP care le conÛine pe acestea dou| precum şi test
bench-urile necesare.
R e z o l v a r e:
DeclaraÛiile
wire a; wire [7:0] b;
reg c; reg [11:0] d;
Circuite Logice SecvenÛiale Sincrone 431

definesc scalari (a, c) şi vectori (b, d). Atât scalarii cât şi vectorii pot s| fie
matrice (array) unidimensionale sau multidimensionale. Sintaxa general| a unei
declaraÛii de tip array are forma
wire [range] name1 [index range][index range] ..., name2 [... ; (7.41)
reg [range] name1 [index range][index range] ..., name2 [... ;
Atât range cât şi index range se pot defini cu ajutorul constantelor şi/sau
expresiilor. Exemple:
wire alfa [7:0] [19:0]; //matrice bidimensional| de scalari
wire [3:0] beta [0: 15]; //matrice unidimensional| de vectori
reg gama [2*w : 0], teta [0:L]; //matrice unidimensionale de scalari
reg [3:0] mem [255:0][127:0]; //matrice bidimensional| de vectori
Referirile la datele organizate ca matrice pot fi de tip bit-select sau part-select.
Numai câte un singur element din matrice poate fi invocat:
name1 [index number][index number] ...
name1 [index number][index number] ... [bit number] (7.42)
name1 [index number][index number] ... [part select]
Exemple:
alfa [5][11] = 0;
alfa [3] = 1; //ilegal
beta [8][2] = 1; //bit-select
beta [7][4:2] = 3' b010; //part-select
beta [1:12][3] = 12' b100111000101; //ilegal
mem [122:57][81:24][2] = ...; //ilegal
mem [101][118:93][1] = ...; //ilegal
mem [204][17][3] = 1; //bit-select
mem [29][100][2:1] = 2' b01; //part-select
Datele stocate în circuitul RAM din Fig.7.19 sunt organizate ca matrice
unidimensional| de vectori. Un model Verilog al acestui circuit este urm|torul:
`celldefine
`timescale 1ns / 10ps
module RAM (Read, Write, EnableW, Address, DataIn, DataOut);
input [11:0] Address;
input Read, Write, EnableW;
input [31:0] DataIn;
output [31:0] DataOut;
reg [31:0] RAM [4095:0];
//citire (read cycle) cu timp de acces egal cu 4 ns
assign #4 DataOut = (Read) ? RAM [Address] : 32' hz;
//scriere (write cycle)
432 Cap.7 Proiectarea circuitelor digitale cu Verilog

always @ (posedge Write or Address or DataIn or EnableW)


begin
if (Write & EnableW)
RAM [Address] = DataIn;
else ;
end
specify
specparam tsetup = 0.75 : 1.0 : 1.25,
thold = 0.4 : 0.5 : 0.6;
$setup (DataIn, Write, tsetup);
$hold (Write, DataIn, thold);
endspecify
endmodule
`endcelldefine
Parametrii tsetup şi thold din blocul specify reprezint| întârzieri, asociate cu
operaÛia de scriere prin intermediul cuvintelor cheie $setup şi $hold. Cele 3
câmpuri separate prin : (dou| puncte) au semnificaÛiile minim : tipic : maxim
şi se aplic| atât la tranziÛiile pozitive (rise) cât şi la cele negative (fall).
Deşi încep cu $, $setup şi $hold nu sunt task-uri sistem (predefinite) ci
subrutine de control temporal (timing checks). Aceste subrutine calculeaz| un
interval de timp delimitat de primele dou| argumente şi compar| acest interval
cu valoarea reprezentat| de cel de-al treilea argument. Fereastra sau intervalul
de timp se determin| dup| cum se arat| în Fig.7.21. Nivelul sau palierul activ
al semnalului Write este 1 (High).

Fig.7.21 Ferestrele de timp calculate de $setup şi $hold

SituaÛiile ∆s # tsetup şi ∆h # thold sunt raportate de $setup şi respectiv $hold


(timing violations).
Modulul controlSigGen urm|tor genereaz| semnalele Read şi Write.
`celldefine
`timescale 1ns / 10ps
module controlSigGen (EN, Clock, Read, Write);
Circuite Logice SecvenÛiale Sincrone 433

input EN, Clock;


output Read, Write;
reg Read, Write;
parameter delay = 2;

always @ (posedge Clock)


begin
Write = 0; Read = 0;
if (EN)
begin
Write = #(delay - 0.3 : delay : delay + 0.3) 1;
@ (posedge Clock)
Write = 0;
if (EN)
Read = #(delay - 0.3 : delay : delay + 0.3) 1;
else ;
end
else ;
end
endmodule
`endcelldefine
Simularea acestui modul se poate face cu test bench-ul controlSigGen_sim.
`celldefine
`timescale 1ns / 10ps
module controlSigGen_sim (enable, Ck, R, W);
output enable, Ck, R, W;
reg enable, Ck;
wire R, W;
initial
begin
enable = 0; Ck = 0; #3; enable = 1; #50; enable = 0;
end
always
Ck = #(4.9 : 5 : 5.1) !Ck;
controlSigGen RWgen (enable, Ck, R, W);
endmodule
`endcelldefine
În Fig.7.22 este desenat| structura modulului de TOP cu numele MEM, alc|tuit
din modulele RAM şi controlSigGen.
434 Cap.7 Proiectarea circuitelor digitale cu Verilog

Fig.7.22 Structura modulului MEM

Modelul Verilog al celulei MEM este unul structural, în care trebuie instanÛiate
modulele RAM şi controlSigGen.
`celldefine
`timescale 1ns / 10ps
module MEM (en, Ck, enW, A, DI, DO, Read, Write);
input en, Ck, enW;
input [31 : 0] DI;
input [11 : 0] A;
output Read, Write;
output [31 : 0] DO;
RAM M4K(Read, Write, enW, A, DI, DO);
controlSigGen RWgen(en, Ck, Read, Write);
endmodule
`endcelldefine
Read şi Write sunt conexiuni interne îns| au fost declarate ieşiri pentru a fi
afişate de task-ul $monitor şi/sau ca diagrame de timp. Simularea celulei de
TOP se poate face cu test bench-ul MEM_sim urm|tor.
`celldefine
`timescale 1ns / 10ps
module MEM_sim (en, Ck, enW, A, DI, DO, Read, Write);
output en, Ck, enW, Read, Write;
output [31 : 0] DI, DO;
output [11 : 0] A;
reg en, Ck, enW;
reg [31 : 0] DI;
reg [11 : 0] A;
wire Read, Write;
wire [31 : 0] DO;
MEM memory (en, Ck, enW, A, DI, DO, Read, Write);
Circuite Logice SecvenÛiale Sincrone 435

initial
begin
$display(“time Ck en Read Write enW DI DO”);
$monitor(“%d ns %b %b %b %b %b %d %d”, $time,
Ck, en, Read, Write, enW, DI, DO);
Ck = 0; en = 0; enW = 0; A = 582; DI = 33355;
#3; en = 1; #9; enW = 1; #3.4; DI = 495127; #18.7;
DI = 177; #4; enW = 0; #4; DI = 8321; #10; #3; en = 0;
end
always
Ck = #(4.9 : 5 : 5.1) !Ck;
endmodule
`endcelldefine
ObservaÛie: Pentru simularea test bench-ului MEM_sim trebuie înc|rcate în
simulator şi compilate modulele RAM, controlSigGen, MEM şi MEM_sim,
adic| fişierele Verilog care le conÛin pe acestea. Fiecare fişier începe cu
directivele `celldefine şi `timescale 1ns / 10ps şi se termin| cu `endcelldefine.
Toate cele patru module pot fi stocate într-un singur fişier. În acest caz trebuie
înc|rcat şi compilat doar acesta. De asemenea, directivele `celldefine şi
`timescale 1ns / 10ps trebuie plasate doar la începutul fişierului iar directiva
`endcelldefine la sfârşitul fişierului.
Rezultatele simul|rii afişate sub form| de diagrame de timp sunt ilustrate
în Fig.7.23. OperaÛiile de scriere/citire se fac la adresa A = 582 (locaÛia 582).

Fig.7.23 Rezultatele simul|rii modulului MEM_sim


436 Cap.7 Proiectarea circuitelor digitale cu Verilog

Task-urile $display şi $monitor produc afişarea sub form| de tabel (sau tablou):
time Ck en Read Write enW DI DO
0 ns 0 0 x x 0 33355 x
3 ns 0 1 x x 0 33355 x
5 ns 1 1 0 0 0 33355 x
7 ns 1 1 0 1 0 33355 x
9 ns 1 1 0 1 0 33355 z
10 ns 0 1 0 1 0 33355 z
12 ns 0 1 0 1 1 33355 z
15 ns 1 1 0 0 1 33355 z
Error: ./MEM/TOP.v(nr linie) : $hold(Write:15 ns, DataIn:15.4 ns, 0.5 ns);
Time: 15400 ps Iteration: 2 Instance: /MEM_sim/memory/M4K
15 ns 1 1 0 0 1 495127 z
17 ns 1 1 1 0 1 495127 z
20 ns 0 1 1 0 1 495127 z
21 ns 0 1 1 0 1 495127 33355
25 ns 1 1 0 0 1 495127 33355
27 ns 1 1 0 1 1 495127 33355
29 ns 1 1 0 1 1 495127 z
30 ns 0 1 0 1 1 495127 z
34 ns 0 1 0 1 1 177 z
Error: ./MEM/TOP.v(nr linie) : $setup(DataIn:34.1 ns, Write:35 ns, 1 ns);
Time: 35 ns Iteration: 3 Instance: /MEM_sim/memory/M4K
35 ns 1 1 0 0 1 177 z
37 ns 1 1 1 0 1 177 z
38 ns 1 1 1 0 0 177 z
40 ns 0 1 1 0 0 177 z
41 ns 0 1 1 0 0 177 177
42 ns 0 1 1 0 0 8321 177
45 ns 1 1 0 0 0 8321 177
46 ns 1 0 0 0 0 8321 177
47 ns 1 0 0 1 0 8321 177
49 ns 1 0 0 1 0 8321 z
50 ns 0 0 0 1 0 8321 z
55 ns 1 0 0 0 0 8321 z
Subrutinele de control temporal $setup şi $hold plasate în blocul specify din
modulul RAM au detectat dou| cazuri de înc|lc|ri ale parametrilor hold şi
setup. Erorile de mai sus se afişeaz| chiar dac| nu se utilizeaz| task-urile
sistem $display şi $monitor.
În ambele forme de afişare a rezultatelor au fost luate în considerare valorile
tipice ale întârzierilor.
Circuite Logice SecvenÛiale Sincrone 437

ObservaÛie: Semnalele de ceas nu trebuie s| aib| neap|rat factorul de umplere


egal cu 50%. Un astfel de semnal se genereaz| cel mai uşor. Generarea unui
semnal de ceas cu perioada TCk şi factorul de umplere DC (duty cycle) se face
în modul urm|tor.
.................
parameter TCk = 10, DT = 0.37; //aceste valori reprezint| default-ul
.................
initial
begin
clock = 0;
forever
begin
clock = # ((1 - DT)*TCk) 1;
clock = # (DT*TCk) 0;
end
end
12. S| se detemine deosebirile funcÛionale dintre circuitele
combinaÛionale comb1 şi comb2 precum şi dintre circuitele secvenÛiale secv1
şi secv2 urm|toare.
module comb(a, b, c, d, Y); //comb1
input a, b, c;
output d, Y;
reg Y, d;
always @ (a or b or c)
begin
d = #3 a & b; //atribuire de tip blocking
Y = #1 d | c;
end
endmodule

module comb(a, b, c, d, Y); //comb2


input a, b, c;
output d, Y;
reg Y, d;
always @ (a or b or c)
begin
d <= #3 a & b; //atribuire de tip non-blocking
Y <= #1 d | c;
end
endmodule
438 Cap.7 Proiectarea circuitelor digitale cu Verilog

module secv(clock, a, b, c, d, Y); //secv1


input clock, a, b, c;
output Y, d;
reg Y, d;
always @ (posedge clock)
begin
d = #3 a & b; //atribuire de tip blocking
Y = #1 d | c;
end
endmodule

module secv(clock, a, b, c, d, Y); //secv2


input clock, a, b, c;
output Y, d;
reg Y, d;
always @ (posedge clock)
begin
d <= #3 a & b; //atribuire de tip non-blocking
Y <= #1 d | c;
end
endmodule
R e z o l v a r e:
Modulele comb1 şi comb2 pot fi simulate cu test bench-ul comb_sim urm|tor.
module comb_sim (a, b, c, d, Y);
output a, b, c, d, Y;
reg a, b, c;
comb COMBcell(a, b, c, d, Y);
initial
begin
a = 0; b = 0; c = 0; # 10; a = 1; b = 1; c = 1;
end
endmodule
Rezultatele simul|rii sunt generate sub form| de diagrame de timp. În Fig.7.24a
sunt ilustrate r|spunsurile d şi Y ale modelelor Verilog comb1 şi comb2.
Structurile acestor dou| circuite generate de tool-ul de sintez| logic| sunt
identice (Fig.7.24b). Valorile iniÛiale ale variabilelor d şi Y de tip reg sunt
necunoscute (x). În cazul comb1 cele dou| atribuiri se fac în serie, d prima şi
Y a doua , cu întârzierile de 3 ns şi respectiv de (3 + 1) ns faÛ| de momentele
la care se modific| intr|rile a, b sau c.
Circuite Logice SecvenÛiale Sincrone 439

Fig.7.24 Structura şi r|spunsurile circuitelor comb1, comb2

În cazul comb2 evalu|rile se fac în paralel iar atribuirile în ordinea cronologic|


a evenimentelor. La momentul 0 de simulare se evalueaz| d = 0 şi Y = x
(deoarece d are valoarea x) ; prima atribuire efectiv| are loc la momentul 1 ns
şi anume Y = x iar a doua atribuire efectiv|, d = 0, se face la momentul 3 ns.
Schimb|rile variabilelor a, b şi c de la momentul 10 ns declanşeaz| evalu|rile
d = 1 şi Y = d | c = 0 | 1 = 1; aceste atribuiri se fac la momentele 13 ns şi
respectiv 11 ns.
FuncÛionarea descris| de modulul comb2 nu corespunde realit|Ûii. Tool-ul de
sintez| produce acceaşi structur| logic| pentru comb1 şi comb2 deoarece nu
ia în considerare întârzierile plasate în cadrul modulelor.
Modulele secv1 şi secv2 pot fi simulate cu test bench-ul secv_sim urm|tor.
module secv_sim (clock, a, b, c, d, Y);
output clock, a, b, c, d, Y;
reg clock, a, b, c;
secv SECVcell(clock, a, b, c, d, Y);
initial
begin
clock = 0; a = 0; b = 0; c = 0;
# 6; a = 1; # 4; b = 1; # 1; c = 1;
end
always
clock = #5 ~ clock;
endmodule
În Fig.7.25 sunt prezentate rezultatele simul|rii şi structura corespunz|toare
modulului secv1. Dup| fiecare front pozitiv al semnalului de intrare clock se
440 Cap.7 Proiectarea circuitelor digitale cu Verilog

atribuie mai întâi valoarea la ieşirea d cu întârzierea de 3 ns şi apoi, dup| înc|


1 ns, se atribuie valoarea la ieşirea Y. Aceasta din urm| este afectat| de
valoarea atribuit| anterior la d.

Fig.7.25 FuncÛionarea şi structura circuitului secv1

Cele dou| întârzieri, 3 ns şi 1 ns, corespund timpului de basculare al celor doi


bistabili (tp clock - Q) şi respectiv de propagare prin poarta OR2. TranziÛiile
variabilelor a, b şi c nu produc evenimente la ieşirile d şi Y. Rezult| c| circuitul
sintetizat trebuie s| stocheze valorile expresiei a & b şi variabilei c.
În Fig.7.26 sunt prezentate rezultatele simul|rii şi structura corespunz|toare
modulului secv2. Dup| fiecare front pozitiv al semnalului de ceas clock se
evalueaz| a & b şi d | c în paralel. Atribuirile efective se fac dup| 1 ns la ieşirea
Y şi dup| 3 ns la ieşirea d, luând ca referinÛ| frontul pozitiv de ceas. Valoarea
atribuit| la Y nu depinde de noua valoare care urmeaz| s| fie atribuit| la ieşirea
d ci de valoarea veche, existent| la momentul frontului de ceas. La momentul
de simulare 6 ns bistabilul dff2 se încarc| cu x deoarece d = x şi c = 0 la
momentul 5 ns. În bistabilul dff1 se încarc| valoarea 0 la momentul (5 + 3) ns.
La urm|torul front de ceas, care are loc la momentul 15 ns, se fac evalu|rile
a&b = 1 şi d | c = 0 | 1 = 1; la 16 ns se face atribuirea Y = 1 iar la 18 ns se face
atribuirea d = 1. Timpii de basculare ai bistabililor sunt 3 ns şi respectiv 1 ns.
Structurile diferite ale circuitelor secv1 şi secv2 nu sunt determinate de valorile
întârzierilor ci de tipul atribuirii, blocking şi respectiv non-blocking. Ca şi în
cazul modulelor comb1 şi comb2, tool-ul de sintez| nu ia în considerare
întârzierile plasate în codurile Verilog.
Circuite Logice SecvenÛiale Sincrone 441

Fig.7.26 FuncÛionarea şi structura circuitului secv2

13. S| se scrie un model Verilog pentru divizorulde frecvenÛ|


programabil desenat în Fig.7.27. Divizarea are loc dac| intrarea de autorizare
enable este pus| la nivelul High; altfel, dac| enable = Low atunci Y = 0.
Perioada şi factorul de umplere ale semnalului de ieşire sunt determinate de
vectorii de intrare P (period) şi respectiv DC (duty cycle). S| se verifice
funcÛionarea prin simulare.

Fig.7.27 Divizor de frecvenÛ| programabil

R e z o l v a r e:
Acest divizor de frecvenÛ| este un circuit parametrizat; se consider| default-ul
N = 8 şi M = 4, ceea ce înseamn| perioada maxim| TY, max = 255·TCk şi durata
maxim| a impulsului Y = High egal| cu 15·TCk. Este evident faptul c|, în afar|
de enable = 1, trebuie respectate condiÛiile P $ 2, DC $ 1 şi P > DC pentru ca
442 Cap.7 Proiectarea circuitelor digitale cu Verilog

divizarea de frecvenÛ| s| aib| loc. Dac| P < 2 sau DC = 0 se va seta Y = 0 iar


dac| P # DC se va seta Y = 1. În modelul Verilog urm|tor intr|rile de control
enable, P şi DC sunt sincrone cu ceasul clock.
module freqDiv (enable, clock, P, DC, Y); //versiunea 1
input enable, clock;
parameter N = 8, M = 4;
input [N-1:0] P;
input [M-1:0] DC;
output Y;
reg Y;
always @ (posedge clock)
begin
if ((enable = = 0) | | (P < 2) | | (DC = = 0))
Y = 0;
else if (P <= DC)
Y = 1;
else
begin
Y = 0;
repeat(P - DC - 1)
@ (posedge clock) Y = 0;
repeat(DC)
@ (posedge clock) Y = 1;
end
end
endmodule
Simularea divizorului de frecvenÛ| se poate face cu test bench-ul de mai jos.
module freqDiv_sim (enable, clock, P, DC, Y);
output enable, clock, Y;
output [2:0] P, DC;
reg enable, clock;
reg [2:0] P, DC;
wire Y;
freqDiv #(3, 3) FD (enable, clock, P, DC, Y);
initial
begin
P = 5; DC = 2; enable = 0; clock = 0;
#3; enable = 1; #104; DC = 6; #36; enable = 0;
end
Circuite Logice SecvenÛiale Sincrone 443

always
clock = #5 ~ clock;
endmodule
Rezultatele simul|rii modulului freqDiv_sim sunt ilustrate în Fig.7.28.

Fig.7.28 Simularea modulului freqDiv (versiunea 1)

În diagramele de mai sus se observ| dou| erori de modelare:


- frontul de ceas de la 115 ns trebuia s| determine Y = 1 deoarece DC > P,
- frontul de ceas de la 145 ns trebuia s| determine Y = 0 deoarece enable = 0.
Aceste erori se datoreaz| faptului c| odat| intrat în blocul begin-end asociat cu
else acesta se execut| complet, f|r| s| se mai testeze valorile intr|rilor enable,
P şi DC. Versiunea urm|toare a modulului freqDiv are funcÛionarea corect|.
module freqDiv (enable, clock, P, DC, Y); //versiunea 2
input enable, clock;
parameter N = 8, M = 4;
input [N-1:0] P;
input [M-1:0] DC;
output Y; reg Y;
`define condition (enable = = 0) | | (P < 2) | | (DC = = 0)
always @ (posedge clock)
begin: div
if (`condition) Y = 0;
else if (P <= DC) Y = 1;
else
begin
Y = 0;
repeat (P - DC - 1)
begin
444 Cap.7 Proiectarea circuitelor digitale cu Verilog

@ (posedge clock)
if(`condition)
begin Y = 0; disable div; end
else if (P <= DC)
begin Y = 1; disable div; end
else Y = 0;
end
repeat (DC)
begin
@ (posedge clock)
if(`condition)
begin Y = 0; disable div; end
else if (P <= DC)
begin Y = 1; disable div; end
else Y = 1;
end
end
end
endmodule
Simularea acestei noi versiuni produce rezultatele din figura de mai jos.

Fig.7.29 Simularea versiunii 2 a modulului freqDiv

ObservaÛie: Dac| procesul always nu este urmat de @ (posedge clock), în


oricare din cele dou| versiuni ale modulului freqDiv descrise anterior, atunci
simulatorul va intra într-o bucl| infinit|, f|r| s| produc| vreun rezultat. Pentru
a ieşi din aceast| situaÛie, simularea trebuie întrerupt| (Break) şi apoi oprit|
(End Simulation).
În orice modul sintetizabil cuvântul cheie always trebuie s| fie urmat de un
eveniment sau de o list| de evenimente, niciunul abstract (dat| de tip event).
Circuite Logice SecvenÛiale Sincrone 445

14. S| se modeleze şi s| se simuleze un bistabil de tip D cu intr|ri de


control SET sincron activ High, RESET asincron activ Low şi cu ceas activ pe
front negativ.
R e z o l v a r e:
module dff (D, Ck, Ss, RNa, Q, QN); //versiunea 1
input D, Ck, Ss, RNa;
output Q, QN;
reg Q, QN;
always @ (negedge Ck or negedge RNa)
begin
if (! RNa)
begin Q = 0; QN = 1; end
else
begin
if (Ss)
begin Q = 1; QN = 0; end
else
begin Q = D; QN = ~D; end
end
end
endmodule
Simularea bistabilului se poate face cu test bench-ul urm|tor.
module dff_sim (data, clock, set, reset, Q, QN);
output data, clock, set, reset, Q, QN;
reg data, clock, set, reset;
dff Dbist (data, clock, set, reset, Q, QN);
always
begin #0; clock = #5 ~clock; end
initial
begin
clock = 1; data = 0; set = 1; reset = 1;
#12; set = 0; #11; data = 1; #8; reset = 0; #1; reset = 1;
#12; reset = 0; set = 1; #2; reset = 1; set = 0;
end
endmodule
ObservaÛie: Este posibil ca ordinea proceselor initial şi always din cadrul
modulului dff_sim s| conteze. Astfel, dac| primul ar fi always atunci semnalul
clock generat în acest proces ar putea s| fie pus permanent la valoarea x
începînd de la momentul de simulare 5 ns, adic| ceasul clock nu ar fi o
446 Cap.7 Proiectarea circuitelor digitale cu Verilog

alternanÛ| de 1 şi 0 cu perioda 10 ns. “CorecÛia” acestei situaÛii const| fie în


plasarea unei întârzieri cu valoare 0 în procesul always (dup| cum s-a procedat
mai sus), fie în schimbarea ordinii proceselor (întâi initial şi apoi always).
Rezultatele simul|rii sunt ilustrate în Fig.7.30.

Fig.7.30 FuncÛionarea bistabilului dff (versiunea 1)

Impulsul reset = 0 din intervalul [31...32] ns evidenÛiaz| caracterul asincron al


acestei comenzi. De asemenea, intervalul [44...46] ns arat| c| reset-ul este
prioritar faÛ| de set, data şi clock.
Bistabilul poate s| fie modelat şi cu ajutorul unei primitive (UDP).
Aceasta trebuie modelat| ca o entitate independent| de modulul dff şi apoi
instanÛiat| în structura dff.
primitive D_udp (Q, RN, Ck, S, D);
output Q;
reg Q;
input S, RN, Ck, D;
table
// RN Ck S D : stare : Q;
0 * ? ? : ? : 0;
1 p ? ? : ? : -;
1 f 1 ? : ? : 1;
1 f 0 1 : ? : 1;
1 f 0 0 : ? : 0;
endtable
endprimitive
Primitiva are o singur| ieşire (Q) iar aceasta trebuie s| fie prima din lista care
urmeaz| dup| numele D_udp. Ordinea intr|rilor din tabel| (RN, Ck, S, D) este
fixat| de list|.
Circuite Logice SecvenÛiale Sincrone 447

module dff (D, Ck, Ss, RNa, Q, QN); //versiunea 2


input D, Ck, Ss, RNa;
output Q, QN;
wire Q, QN;
D_udp U17 (Q, RNa, Ck, Ss, D);
assign QN = ~Q;
endmodule
Pentru simularea versiunii 2 a modulului dff trebuie înc|rcate în simulator şi
compilate primitiva D_udp împreun| cu modulele dff şi dff_sim. Rezultatele
simul|rii sunt prezentate în Fig.7.31.

Fig.7.31 FuncÛionarea bistabilului dff (versiunea 2)

Comparând r|spunsurile din figurile 7.30 şi 7.31 se observ| c| primitiva


introduce un grad mare de pesimism în simulare. Pentru a corecta aceste
ambiguit|Ûi de funcÛionare trebuie completat| tabela primitivei cu informaÛii
referitoare la tranziÛiile variabilelor de intrare data, set şi reset astfel:

primitive D_udp (Q, RN, Ck, S, D); //f|r| pierderi de informaÛie


output Q;
reg Q;
input S, RN, Ck, D;
table
// RN Ck S D : stare : Q;
0 * ? ? : ? : 0;
0 ? ? ? : ? : 0;
1 p ? ? : ? : -;
p ? ? ? : ? : -;
1 ? n ? : ? : -;
448 Cap.7 Proiectarea circuitelor digitale cu Verilog

1 ? 0 p : ? : -;
1 f 1 ? : ? : 1;
1 f 0 1 : ? : 1;
1 f 0 0 : ? : 0;
endtable
endprimitive
Simularea versiunii 2 a modulului dff în care se instanÛiaz| primitiva
completat| produce rezultate identice cu cele din Fig.7.30.

15. S| se scrie un model Verilog pentru num|r|torul binar reversibil


desenat în Fig.7.32. Num|rarea direct| este modulo 14 (upDown = 1) iar cea
invers| este modulo 12 (upDown = 0). Autorizarea num|r|rii se face cu enable
= 1. Intrarea de înc|rcare paralel| PL este asincron|. Ieşirea flag semnalizeaz|
trecerea prin OUT = 13 la num|rarea direct| şi trecerea prin OUT = 0 la
num|rarea invers|. S| se simuleze circuitul.

Fig.7.32 Num|r|tor binar reversibil

R e z o l v a r e:
module binCounter (enable, clock, upDown, PL, PI, OUT, flag); //v1
input clock, enable, upDown, PL;
input [3:0] PI;
output flag;
output [3:0] OUT; reg [3:0] OUT;
always @ (posedge clock or negedge PL)
begin
if (~PL) OUT = PI;
else if (! enable) OUT = OUT;
else
begin
if (upDown) OUT = (OUT + 1) % 14;
Circuite Logice SecvenÛiale Sincrone 449

else OUT = (OUT - 1) % 12;


end
end
assign flag = ((upDown) && (OUT = = 13)) ? 0 : (
((! upDown) && (OUT = = 0)) ? 0 : 1);
endmodule
Aceast| versiune v1 nu este sintetizabil| datorit| operaÛiei modulo (%), dar se
poate modifica uşor într-una sintetizabil| (versiunea v2 de mai jos).
module binCounter (enable, clock, upDown, PL, PI, OUT, flag); //v2
input clock, enable, upDown, PL;
input [3:0] PI;
output flag;
output [3:0] OUT; reg [3:0] OUT;
always @ (posedge clock or negedge PL)
begin
if (~PL) OUT = PI;
else if (! enable) OUT = OUT;
else
begin
if (upDown)
begin
if (OUT < 13) OUT = OUT + 1;
else OUT = 0;
end
else
begin
if (OUT > 0) OUT = OUT - 1;
else OUT = 11;
end
end
end
assign flag = ((upDown) && (OUT = = 13)) ? 0 : (
((! upDown) && (OUT = = 0)) ? 0 : 1);
endmodule
Simularea num|r|torului binCounter se poate face cu test bench-ul urm|tor.
module binCounter_sim (en, ck, uD, PL, PI, nr, flag);
output en, ck, uD, PL, flag;
output [3:0] PI, nr;
reg en, ck, uD, PL;
450 Cap.7 Proiectarea circuitelor digitale cu Verilog

reg [3:0] PI;


binCounter NR (en, ck, uD, PL, PI, nr, flag);
initial
begin
en = 1; ck = 0; uD = 1; PL = 0; PI = 10;
#3; PL = 1; #10; en = 0; #4; en = 1; #39; uD = 0;
#2; PI = 4; #3; PL = 0; #6; PL = 1; #25; en = 0;
#5; en = 1; #30; PI = 5; #10; PL = 0; #1; PL = 1;
end
always
ck = #5 !ck;
endmodule
Rezultatele simul|rii sunt ilustrate în Fig.7.33.

Fig.7.33 FuncÛionarea modulului binCounter

16. S| se scrie un model Verilog pentru num|r|torul zecimal reversibil


desenat în Fig.7.34. Num|rarea direct| este produs| de fronturile pozitive ale
ceasului CkU, dac| CkD = High; num|rarea invers| este produs| de fronturile
pozitive ale ceasului CkD, dac| CkU = High. Fiecare ceas constituie o comand|
de autorizare pentru cel|lalt ceas; dac| unul din cele dou| ceasuri este fixat la
nivelul 0 logic atunci num|r|torul îşi p|streaz| starea. Intr|rile asincrone Clear
şi Preset sunt active Low şi forÛeaz| st|rile OUT = 0 şi respectiv OUT = 9;
Circuite Logice SecvenÛiale Sincrone 451

activarea simultan| a acestora forÛeaz| starea OUT = 0, adic| se atribuie o


prioritate mai mare comenzii Clear. Ieşirile Carry şi Borrow (active Low)
semnalizeaz| trecerea circuitului prin OUT = 9 la num|rarea direct| şi
respectiv trecerea prin OUT = 0 la num|rarea invers|. S| se simuleze circuitul.

Fig.7.34 Num|r|tor BCD reversibil

R e z o l v a r e:
module BCDcounter (Clear, Preset, CkU, CkD, OUT, Carry, Borrow);
input CkU, CkD, Clear, Preset;
output Carry, Borrow ; reg Carry, Borrow ;
output [3:0] OUT; reg [3:0] OUT;
always @ (posedge CkU or negedge Clear or negedge Preset)
begin
if (!Clear) OUT = 0;
else if (!Preset)
begin
OUT = 9;
Carry = (CkD) ? 0 : 1;
end
else
begin
if (~ CkD) OUT = OUT;
else
begin
if (OUT < 8)
begin OUT = OUT + 1; Carry = 1; end
else if (OUT = = 8)
begin OUT = 9; Carry = 0; end
else
begin OUT = 0; Carry = 1; end
end
452 Cap.7 Proiectarea circuitelor digitale cu Verilog

end
end
always @ (posedge CkD or negedge Clear or negedge Preset)
begin
if (!Clear)
begin
OUT = 0;
Borrow = (CkU) ? 0 : 1;
end
else if (!Preset) OUT = 9;
else
begin
if (~ CkU) OUT = OUT;
else
begin
if (OUT > 1)
begin OUT = OUT - 1; Borrow = 1; end
else if (OUT = = 1)
begin OUT = 0; Borrow = 0; end
else
begin OUT = 9; Borrow = 1; end
end
end
end
endmodule
Verificarea funcÛion|rii modulului BCDcounter se poate face cu test bench-ul
urm|tor.
module BCDcounter_sim (ck, cl, pr, cku, ckd, nr, cy, br);
output ck, cl, pr, cku, ckd, cy, br;
output [3:0] nr;
reg ck, cl, pr, cku, ckd;
wire cy, br; wire [3:0] nr;
reg up, down;
BCDcounter NR (.CkD(ckd), .Borrow(br), .Preset(pr),
.OUT(nr), .Carry(cy), .CkU(cku), .Clear(cl));
initial
begin
ck = 0; cku = 1; ckd = 0; cl = 1; pr = 0; up = 1; down = 0;
#3; pr = 1; #30; cl = 0; pr = 0; #3; pr = 1; cl = 1;
#19; down = 1; up = 0; #58; pr = 0; #3; pr = 1;
end
Circuite Logice SecvenÛiale Sincrone 453

always
begin
ck = #5 ~ck;
cku = up | ck;
ckd = down | ck;
end
endmodule
Diagramele de timp din Fig.7.35 reprezint| rezultatele simul|rii circuitului.

Fig.7.35 FuncÛionarea num|r|torului BCDcounter


ObservaÛii:
1) Activarea simultan| a comenzilor asincrone Clear(cl) şi Preset (pr) în
intervalul [33...36] ns reflect| prioritatea mai mare a lui Clear. O astfel de
comand| nu trebuie aplicat| în funcÛionarea normal| a circuitului fizic
deoarece dezactivarea semnalelor Clear şi Preset nu poate fi riguros f|cut| la
acelaşi moment de timp; dup| o astfel de comand| starea viitoare a
num|r|torului devine incert|, fie 0 fie 9.
2) Prelungirile nivelelor High din r|spunsurilor Carry(cy) şi Borrow(br),
reprezentate în Fig.7.35 cu linie întrerupt|, sunt uneori dorite în funcÛionarea
num|r|torului. Pentru aceasta modelul Verilog trebuie modificat astfel:
module BCDcounter (Clear, Preset, CkU, CkD, OUT, Carry, Borrow);
input CkU, CkD, Clear, Preset;
output Carry, Borrow ; wire Carry, Borrow ;
output [3:0] OUT; reg [3:0] OUT;
454 Cap.7 Proiectarea circuitelor digitale cu Verilog

reg CY, BR;


always @ (posedge CkU or negedge Clear or negedge Preset)
begin
if (!Clear) OUT = 0;
else if (!Preset)
begin
OUT = 9;
CY = (CkD) ? 0 : 1;
end
else
begin
if (~ CkD) OUT = OUT;
else
begin
if (OUT < 8)
begin OUT = OUT + 1; CY = 1; end
else if (OUT = = 8)
begin OUT = 9; CY = 0; end
else
begin OUT = 0; CY = 1; end
end
end
end
always @ (posedge CkD or negedge Clear or negedge Preset)
begin
if (!Clear)
begin
OUT = 0;
BR = (CkU) ? 0 : 1;
end
else if (!Preset) OUT = 9;
else
begin
if (~ CkU) OUT = OUT;
else
begin
if (OUT > 1)
begin OUT = OUT - 1; BR = 1; end
else if (OUT = = 1)
begin OUT = 0; BR = 0; end
else
Circuite Logice SecvenÛiale Sincrone 455

begin OUT = 9; BR = 1; end


end
end
end
assign Carry = CY | CkU | (! Clear) | (! Preset);
assign Borrow = BR | CkD | (! Clear) | (! Preset);
endmodule
3) Semnalele de ceas CkU şi CkD nu trebuie s| aib| neap|rat aceleaşi
caracteristici (perioad|, factor de umplere). În modulul BCDcounter_sim cele
dou| ceasuri sunt derivate din acelaşi semnal ck.

17. S| se scrie un model Verilog generic pentru maşina secvenÛial|


desenat| în Fig.7.36a; aceast| structur| acoper| şi forma de reprezentare din
Fig.7.36b. NotaÛiile CS şi NS au semnificaÛiile de stare curent| (current state)
şi respectiv de stare viitoare (next state).

Fig.7.36 Structuri generale de maşini secvenÛiale (FSM)

R e z o l v a r e:
Blocurile combinaÛionale pot fi modelate prin atribuiri continue (assign) şi/sau
atribuiri procedurale (procese always). În modelele urm|toare se utilizeaz|, din
considerente de simplitate, numai procesele always.
module FSM (reset, clock, in, out); //versiunea 1
input [range1] in;
input reset, clock;
output [range2] out;
reg [range2] out;
456 Cap.7 Proiectarea circuitelor digitale cu Verilog

reg [range3] CS, NS;


parameter [range3] eticheta1 = val1, eticheta2 = val2, ... ;
always @ (in or CS)
begin: comb
case (CS)
....................
etichetaK : begin
out = ....... ;
NS = ....... ;
end
....................
endcase
end
always @ (posedge clock or negedge reset)
begin: register
if (! reset) //reset asincron
CS = # tp reset-Q stare_de_iniÛializare;
else
CS = # tp clock-Q NS;
end
endmodule
În procesul always care modeleaz| registrul (cu înc|rcare paralel|) sunt
sugerate valori pentru întârzieri; plasarea acestora este opÛional|. Se pot
introduce întârzieri şi în primul proces always, care modeleaz| blocul
combinaÛional.
DeclaraÛia parameter este opÛional|; ea permite recodificarea st|rilor la
instanÛierea maşinii secvenÛiale într-un alt modul, situat pe un nivel ierarhic
superior. Etichetele sunt nume oarecare date st|rilor iar valorile asociate cu
acestea (binare sau zecimale) reprezint| default-ul. Numele st|rilor pot fi puse
şi prin intermediul directivei de compilare `define respectând sintaxa
`define etichetaK valK.
În aceast| variant| se pierde avantajul parametriz|rii, adic| posibilitatea de
schimbare a codurilor default alocate st|rilor atunci când se fac instanÛieri.
Versiunea 1 de modelare prezentat| anterior poate s| conÛin| şi un bloc
specify prin intermediul c|ruia s| se defineasc| parametri referitori la
întârziere, c|i de propagare şi întârzieri asociate cu acestea precum şi verific|ri
de tip timing checks ($setp, $hold). C|ile de propagare nu pot îns| s| înceap|
de la CS şi nici s| se sfârşeasc| la NS deoarece CS şi NS nu sunt declarate
intr|ri şi respectiv ieşiri ale maşinii secvenÛiale. Din acest motiv se prefer|
uneori ca blocul combinaÛional s| fie modelat separat şi apoi instanÛiat în
Circuite Logice SecvenÛiale Sincrone 457

modulul FSM, dup| cum se arat| în continuare.


module comb (in, CS, out, NS);
input [range1] in;
input [range3] CS;
output [range2] out; reg [range2] out;
output [range3] NS; reg [range3] NS;
parameter [range3] eticheta1 = val1, eticheta2 = val2, ... ;
always @ (in or CS)
begin: comb
case (CS)
....................
etichetaK : begin
out = ....... ;
NS = ....... ;
end
....................
endcase
end
specify
specparam list|_de_parametri_şi_valori ;
(in *> out) = ... ; // full connection
(in *> NS) = ... ;
(CS *> out) = ... ;
(CS *> NS) = ... ;
// sau (in *> out, NS) = ... ;
// (CS *> out, NS) = ... ;
// sau (in, CS *> out) = ... ;
// (in, CS *> NS) = ... ;
// sau (in, CS *> out, NS) = ... ;
// sau alte combinaÛii, full şi parallel connection
endspecify
endmodule

module FSM (reset, clock, in, out); //versiunea 2


input [range1] in;
input reset, clock;
output [range2] out;
wire [range2] out; //declaraÛie opÛional|
reg [range3] CS;
wire [range3] NS; //declaraÛie opÛional|
458 Cap.7 Proiectarea circuitelor digitale cu Verilog

always @ (posedge clock or negedge reset)


begin
if (! reset) //reset asincron
CS = # tp reset-Q stare_de_iniÛializare;
else
CS = # tp clock-Q NS;
end
//instanÛierea comb (cu posibilitatea de recodificare a st|rilor)
comb #(list|_de_coduri_noi) CombCell (in, CS, out, NS);
specify
specparam tsetup = d1, thold = d2;
$setup (in, posedge clock, tsetup);
$hold (posedge clock, in, thold);
endspecify
endmodule
ObservaÛii:
1) Subrutinele de calcul temporar $setup şi $hold pot fi înlocuite de subrutina
$setuphold, aceasta având sintaxa
$setuphold (posedge clock, in, tsetup, thold);
2) Modelarea blocului combinaÛional din structura maşinii secvenÛiale cu
ajutorul construcÛiei case-endcase este cea mai potrivit| (în general) dar nu este
obligatorie. În anumite cazuri poate s| fie mai simpl| utilizarea unor construcÛii
if-else if-else.
3) În niciuna din versiunile 1 şi 2 ale maşinii secvenÛiale cu numele generic
FSM, prezentate anterior, variabilele de stare CS şi NS nu au fost incluse în
lista de porturi deoarece acestea sunt conexiuni interne. Dac| în simulare se
doreşte şi afişarea st|rii maşinii atunci cel puÛin una dintre CS, NS trebuie
declarat| ca ieşire.
4) Circuitele secvenÛiale prezentate în problemele anterioare (divizorul de
frecvenÛ| programabil freqDiv şi cele dou| celule de num|rare binCounter şi
BCDcounter) fac parte din categoria maşinilor secvenÛiale, astfel c| ele pot fi
modelate şi dup| acest tipar.

18. S| se modeleze ca maşin| secvenÛial| un num|r|tor binar direct


modulo 6, cu reset sincron activ High, set asincron activ High şi ieşire de
transport activ| Low. S| se introduc| întârzieri în modelul Verilog şi s| se
simuleze circuitul.
R e z o l v a r e:
Numele porturilor din modelul care urmeaz| au semnificaÛiile: Ck(ceas), S(set),
Circuite Logice SecvenÛiale Sincrone 459

R(reset), Q(num|rul generat), Cy(transport, Cy = 0 când Q = 5), CS(starea


curent|). Acesta din urm| este declarat ieşire, scopul fiind afişarea ca rezultat
al simul|rii num|r|torului.
`celldefine
`timescale 1 ns / 10ps
module nrMod6 (Ck, S, R, Q, Cy, CS);
input Ck, S, R;
output [2:0] Q, CS; reg [2:0] Q, CS;
output Cy; reg Cy;
reg [2:0] NS;
parameter [2:0] st0 = 0, st1 = 1, st2 = 2, st3 = 3, st4 = 4, st5 = 5;
always @ (R or CS)
begin: comb
case (CS)
st0: if (R) begin # 1; NS = st0; Q = 0; Cy = 1; end
else begin # 4; NS = st1; Q = 1; Cy = 1; end
st1: if (R) begin # 1; NS = st0; Q = 0; Cy = 1; end
else begin # 4; NS = st2; Q = 2; Cy = 1; end
st2: if (R) begin # 1; NS = st0; Q = 0; Cy = 1; end
else begin # 4; NS = st3; Q = 3; Cy = 1; end
st3: if (R) begin # 1; NS = st0; Q = 0; Cy = 1; end
else begin # 4; NS = st4; Q = 4; Cy = 1; end
st4: if (R) begin # 1; NS = st0; Q = 0; Cy = 1; end
else begin # 4; NS = st5; Q = 5; Cy = 0; end
st5: if (R) begin # 1; NS = st0; Q = 0; Cy = 1; end
else begin # 4; NS = st0; Q = 0; Cy = 1; end
default: begin NS = 3'bx; Q = 3'bx; Cy = 1'bx; end
endcase
end
always @ (posedge Ck or posedge S)
begin: register
if (S) CS = # 1 st3; //set asincron (forÛeaz| starea st3)
else CS = # 2 NS;
end
specify
specparam tsetup = 1, thold = 0.5;
$setuphold (posedge Ck, R, tsetup, thold);
endspecify
endmodule
`endcelldefine
460 Cap.7 Proiectarea circuitelor digitale cu Verilog

Simularea se poate face cu test bench-ul urm|tor.


`celldefine
`timescale 1 ns / 10ps
module nrMod6_sim (reset, Q, ck, set, CS, cy); //v1
output ck, set, reset, cy;
output [2:0] Q, CS;
reg ck, set, reset;
initial
begin
ck = 0; reset = 0; set = 0; #3; set = 1; #3; set = 0;
#39; reset = 1; # 9.5; reset = 0; #30; set = 1; #2; set = 0;
end
always
ck = #5 !ck;
nrMod6 upNr (.CS(CS), .Q(Q), .S(set), .R(reset),
.Ck(ck), .Cy(cy));
endmodule
`endcelldefine
Rezultatele simul|rii sunt ilustrate în figura de mai jos.

Fig.7.37 FuncÛionarea modulului nrMod6

Subrutina de control temporar $setuphold detecteaz| dou| înc|lc|ri ai


parametrilor precizaÛi în blocul specify şi anume thold la momentul 45 ns şi
Circuite Logice SecvenÛiale Sincrone 461

tsetup la momentul 55 ns. Aceste viol|ri sunt cauzate de semnalul reset.


InstanÛierea modulului nrMod6 în test bench-ul nrMod6_sim se poate face cu
specificarea altor coduri în locul default-ului, de exemplu
nrMod6 #(3, 1, 4, 0, 6, 2) upNr (.CS(CS), .Q(Q), .S(set),
.R(reset), .Ck(ck), .Cy(cy));
Noile coduri alocate st|rii curente CS (st0 = 3, st1 = 1, st2 = 4, st3 = 0, st4 =6
şi st5 = 2) sunt scrise în paranteze în Fig.7.37; ieşirile Q p|streaz| îns|
succesiunea de valori corespunz|toare num|r|rii directe modulo 6. Aceast|
nou| codificare a st|rilor implic| o nou| structur| logic| pentru blocul
combinaÛional comb din componenÛa maşinii secvenÛiale.

19. S| se modeleze ca maşin| secvenÛial| şi s| se simuleze generatorul


de semnal neperiodic descris prin diagramele de timp desenate în Fig.7.38.
Intr|rile circuitului sunt Ck, Reset şi In iar ieşirea este Out. TranziÛiile intr|rii
In nu sunt sincronizate (corelate) cu fronturile ceasului Ck. Semnalul Reset
(nereprezentat în diagrame) este asincron, activ High şi are rolul de iniÛializare
a circuitului într-o stare convenabil|.

Fig.7.38 R|spunsul generatorului de semnal neperiodic

Palierele High şi Low ale intr|rii In pot s| dureze oricât de mult. Dup| tranziÛia
L _ H a intr|rii In, la ieşirea Out se obÛin dou| impulsuri High (notate 1 şi 2)
cu durate egale cu perioada ceasului Ck dar sincronizate cu fronturile pozitive
şi respectiv negative ale acestuia. Dup| tranziÛia H ` L a intr|rii In, la ieşirea
Out se obÛine impulsul notat cu 3. Pentru ca semnalul Out s| aib| forma
descris| este necesar ca palierele comenzii In, High şi Low, s| aib| durate
minime mai mari decât trei şi respectiv o perioad| de ceas.
R e z o l v a r e:
În Fig.7.39 sunt prezentate dou| moduri de alocare a st|rilor maşinii, ce
corespund tipurilor Moore şi respectiv Mealy; maşina Moore are nevoie de 7
st|ri valide distincte (s0 ÷ s6) iar maşina Mealy de 5 st|ri (s0 ÷ s4). Fiecare
stare este delimitat| de dou| fronturi pozitive consecutive de ceas.
462 Cap.7 Proiectarea circuitelor digitale cu Verilog

Fig.7.39 Alocarea st|rilor maşinii

Ambele maşini au în structura lor câte 3 bistabili. Cele 4 semnale “auxiliare”


notate a, b, c şi d decodific| st|rile s1, s2, s3 şi respectiv s6 în cazul maşinii
Moore; pentru maşina Mealy st|rile s1 şi s2 sunt utilizate pentru ambele paliere
ale intr|rii In, astfel c| diferenÛa dintre semnalele b şi d este dat| de In = 1 şi
respectiv de In = 0. Expresia logic| a ieşirii Out, în care + şi · reprezint|
operaÛiile OR şi AND, este:
Out = a + b·Ck + (c + d)·Ck //Moore
Out = In·(a + b·Ck + c·Ck) + In·d·Ck //Mealy
F|r| a pierde din generalitate se va aborda maşina Moore.
module sigGen (Reset, Ck, In, Out); //versiunea 1
input Reset, Ck, In;
output Out;
parameter s0 = 2, s1 = 4, s2 = 7, s3 = 1, s4 = 0, s5 = 3, s6 = 5;
reg [2:0] CS, NS; //starea curent| şi starea viitoare
reg a, b, c, d;
always @ (posedge Ck or posedge Reset)
begin: seq
if (Reset) CS = s0;
else CS = NS;
end
Circuite Logice SecvenÛiale Sincrone 463

always @ (CS or In)


begin: comb
case (CS)
s0: if (In) begin NS = s1; {a, b, c, d} = 4' b0000; end
else begin NS = s0; {a, b, c, d} = 4' b0000; end
s1: if (In) begin NS = s2; {a, b, c, d} = 4' b1000; end
else begin NS = s5; {a, b, c, d} = 4' b1000; end
s2: if (In) begin NS = s3; {a, b, c, d} = 4' b0100; end
else begin NS = s5; {a, b, c, d} = 4' b0100; end
s3: if (In) begin NS = s4; {a, b, c, d} = 4' b0010; end
else begin NS = s5; {a, b, c, d} = 4' b0010; end
s4: if (In) begin NS = s4; {a, b, c, d} = 4' b0000; end
else begin NS = s5; {a, b, c, d} = 4' b0000; end
s5: if (In) begin NS = s1; {a, b, c, d} = 4' b0000; end
else begin NS = s6; {a, b, c, d} = 4' b0000; end
s6: if (In) begin NS = s1; {a, b, c, d} = 4' b0001; end
else begin NS = s0; {a, b, c, d} = 4' b0001; end
default: begin NS = s0; {a, b, c, d} = 4' b0000; end
endcase
end
assign Out = a | (b & (~Ck)) | ((c | d) & Ck);
endmodule
Codurile st|rilor s0 ÷ s6 specificate prin declaraÛia parameter din modulul
sigGen sunt modificate la instanÛierea acestuia în test bench-ul de mai jos.
module sigGen_sim (R, ck, in, out);
output R, ck, in, out;
reg R, ck, in;
sigGen #(3, 2, 1, 0, 4, 5, 6) NPSG (R, ck, in, out);
initial
begin
R = 1; ck = 0; in = 0; #6; R = 0;
#5; in = 1; #62; in = 0;
end
always
ck = #5 !ck;
endmodule
Rezultatele simul|rii sunt ilustrate în Fig.7.40. Starea curent| nu este afişat|
deoarece nu a fost declarat| ca port al modulului sigGen; CS este o variabil|
intern| a maşinii secvenÛiale şi ca urmare, nefiind vizibil|, nu poate s| fie
464 Cap.7 Proiectarea circuitelor digitale cu Verilog

declarat| nici în lista de ieşiri a test bench-ului sigGen_sim.

Fig.7.40 Rezultatele simul|rii modulului sigGen_sim

Prin activarea opÛiunii Enable hazard checking simulatorul scoate în evidenÛ|


posibilitatea de apariÛie a hazardului la ieşirea Out (impulsurile parazite de la
momentele 35, 45 şi 95 ns). Eliminarea celor trei impulsuri nedorite se poate
face fie prin introducerea unor întârzieri adecvate în blocul combinaÛional
modelat prin atribuirea continu| assign, fie prin ad|ugarea a doi bistabili cu
ceas activ pe front negativ. Urm|toarea versiune a modulului sigGen conÛine
bistabili suplimentari.
module sigGen (Reset, Ck, In, Out); //versiunea 2
input Reset, Ck, In;
output Out;
parameter s0 = 2, s1 = 4, s2 = 7, s3 = 1, s4 = 0, s5 = 3, s6 = 5;
reg [2:0] CS, NS; //starea curent| şi starea viitoare
reg a, b, B, d, D;
always @ (posedge Ck or posedge Reset) //3 bistabili
begin: seq
if (Reset) CS = s0;
else CS = NS;
end
always @ (CS or In)
begin: comb
case (CS)
s0: if (In) begin NS = s1; {a, b, d} = 3' b000; end
else begin NS = s0; {a, b, d} = 3' b000; end
s1: if (In) begin NS = s2; {a, b, d} = 3' b100; end
else begin NS = s5; {a, b, d} = 3' b100; end
s2: if (In) begin NS = s3; {a, b, d} = 3' b010; end
else begin NS = s5; {a, b, d} = 3' b010; end
Circuite Logice SecvenÛiale Sincrone 465

s3: if (In) begin NS = s4; {a, b, d} = 3' b000; end


else begin NS = s5; {a, b, d} = 3' b000; end
s4: if (In) begin NS = s4; {a, b, d} = 3' b000; end
else begin NS = s5; {a, b, d} = 3' b000; end
s5: if (In) begin NS = s1; {a, b, d} = 3' b000; end
else begin NS = s6; {a, b, d} = 3' b000; end
s6: if (In) begin NS = s1; {a, b, d} = 3' b001; end
else begin NS = s0; {a, b, d} = 3' b001; end
default: begin NS = s0; {a, b, d} = 3' b000; end
endcase
end
always @ (negedge Ck) // 1 bistabil
begin
if(b) B = 1;
else B = 0;
end
always @ (negedge Ck) // 1 bistabil
begin
if(d) D = 0;
else D = 1;
end
assign Out = a | B | ( d & D);
endmodule
Cele 3 impulsuri din Fig.7.38, notate 1, 2 şi 3, sunt reprezentate în versiunea
2 a modulului sigGen de semnalele a, B şi respectiv d & D.

20. a) S| se modeleze registrul de deplasare cu reacÛie liniar| din Fig.4.11


(se adaug| o intrare asincron| de reset şi una sincron| de set). Registrul este
format din n celule şi poate s| fie (re)configurat cu ajutorul vectorului de
intrare C[1 : n - 1].
b) S| se simuleze circuitul în cazul particular n = 4 şi C[1 : 3] = 3' b100.
c) S| se remodeleze registrul astfel încât s| genereze secvenÛe cu lungimea 16
în cazul n = 4 / C[1 : 3] = 3' b100 şi s| se verifice acest lucru prin simulare.
R e z o l v a r e:
a) module LFSR (reset, set, clock, C, Q);
input reset, set, clock;
parameter n = 20;
input [1 : n - 1] C;
output [1 : n] Q;
reg [1 : n] Q, NS; //Q este starea curent|
466 Cap.7 Proiectarea circuitelor digitale cu Verilog

always @ (posedge clock or posedge reset)


begin
if (reset) Q = 0;
else if (set) Q[1] = 1;
else Q = NS;
end
always @ (Q or C)
begin
if (Q[n]) NS = {1' b1, Q[1 : n - 1] ^ C[1 : n - 1]};
else NS = {1' b0, Q[1 : n - 1]};
end
endmodule
Comanda reset este necesar| pentru verificarea faptului c| registrul nu poate
s| p|r|seasc| starea Q = 0. Comanda set încarc| valoarea 1 într-un singur
bistabil şi este util| pentru determinarea secvenÛei pseudo-aleatoare cu
lungimea 2n - 1 pe care o genereaz| circuitul la fiecare din ieşirile Q.
b) Task-ul sistem $monitor din test bench-ul urm|tor determin| afişarea
rezultatelor simul|rii sub form| de tabel.
module LFSR_sim;
reg R, S, Ck;
reg [1 : 3] conexiuni;
wire [1 : 4] out;
LFSR #(4) pseudoGen (.Q(out), .C(conexiuni), .reset(R),
.set(S), .clock(Ck));
initial
begin
$display(“timp Ck R S Q”);
$monitor(“%d ns %b %b %b %d”, $time, Ck, R, S, out);
Ck = 0; R = 1; S = 0; conexiuni = 3' b100;
#3; R = 0; #20; S = 1; #4; S = 0;
end
always
Ck = #5 !Ck;
endmodule
Rezultatele simul|rii sunt listate mai jos.
timp Ck R S Q
0 ns 0 1 0 0
3 ns 0 0 0 0
5 ns 1 0 0 0
10 ns 0 0 0 0
Circuite Logice SecvenÛiale Sincrone 467

15 ns 1 0 0 0
20 ns 0 0 0 0
23 ns 0 0 1 0
25 ns 1 0 1 8
27 ns 1 0 0 8
30 ns 0 0 0 8
35 ns 1 0 0 4
40 ns 0 0 0 4
45 ns 1 0 0 2
50 ns 0 0 0 2
55 ns 1 0 0 1
60 ns 0 0 0 1
65 ns 1 0 0 12
70 ns 0 0 0 12
75 ns 1 0 0 6
80 ns 0 0 0 6
85 ns 1 0 0 3
90 ns 0 0 0 3
95 ns 1 0 0 13
100 ns 0 0 0 13
105 ns 1 0 0 10
110 ns 0 0 0 10
115 ns 1 0 0 5
120 ns 0 0 0 5
125 ns 1 0 0 14
130 ns 0 0 0 14
135 ns 1 0 0 7
140 ns 0 0 0 7
145 ns 1 0 0 15
150 ns 0 0 0 15
155 ns 1 0 0 11
160 ns 0 0 0 11
165 ns 1 0 0 9
170 ns 0 0 0 9
175 ns 1 0 0 8
180 ns 0 0 0 8
185 ns 1 0 0 4
190 ns 0 0 0 4
195 ns 1 0 0 2
St|rile circuitului se succed în ordinea
..., 8, 4, 2, 1, 12, 6, 3, 13, 10, 5, 14, 7, 15, 11, 9, 8, 4, 2, ...
468 Cap.7 Proiectarea circuitelor digitale cu Verilog

La momentele de simulare 3, 23 şi 27 ns afişarea este declanşat| de tranziÛiile


semnalelor R şi S; celelalte linii afişate se datoreaz| tranziÛiilor ceasului Ck şi
a ieşirii Q.
c) Comanda set nu mai este necesar|.
module LFSRmax (reset, clock, C, Q);
input reset, clock;
parameter n = 20;
input [1 : n - 1] C;
output [1 : n] Q;
reg [1 : n] Q, NS;
always @ (posedge clock or posedge reset)
begin
if (reset) Q = 0;
else Q = NS;
end
always @ (Q or C)
begin
if (Q[n] ^ (~| Q[1 : n-1]))
NS = {1' b1, Q[1 : n - 1] ^ C[1 : n - 1]};
else NS = {1' b0, Q[1 : n - 1]};
end
endmodule
În locul condiÛiei Q[n] = 1 din cel de-al doilea proces always se testeaz|
condiÛia Q[n] ^ (~| Q[1 : n-1]) = 1, adic| semnalul de reacÛie
feedback = Q[n] r (Q[1] + Q[2] + ... + Q[n-1]).
module LFSRmax_sim;
reg R, Ck;
reg [1 : 3] conexiuni;
wire [1 : 4] out;
LFSRmax #(4) pseudoGen (.Q(out), .C(conexiuni), .reset(R),
.clock(Ck));
initial
begin
$display(“timp Ck R Q”);
$monitor(“%d ns %b %b %d”, $time, Ck, R, out);
Ck = 0; R = 1; conexiuni = 3' b100; #3; R = 0;
end
always
Ck = #5 !Ck;
endmodule
Circuite Logice SecvenÛiale Sincrone 469

Rezultatele simul|rii sunt urm|toarele.


timp Ck R Q
0 ns 0 1 0
3 ns 0 0 0
5 ns 1 0 12
10 ns 0 0 12
15 ns 1 0 6
20 ns 0 0 6
25 ns 1 0 3
30 ns 0 0 3
35 ns 1 0 13
40 ns 0 0 13
45 ns 1 0 10
50 ns 0 0 10
55 ns 1 0 5
60 ns 0 0 5
65 ns 1 0 14
70 ns 0 0 14
75 ns 1 0 7
80 ns 0 0 7
85 ns 1 0 15
90 ns 0 0 15
95 ns 1 0 11
100 ns 0 0 11
105 ns 1 0 9
110 ns 0 0 9
115 ns 1 0 8
120 ns 0 0 8
125 ns 1 0 4
130 ns 0 0 4
135 ns 1 0 2
140 ns 0 0 2
145 ns 1 0 1
150 ns 0 0 1
155 ns 1 0 0
160 ns 0 0 0
165 ns 1 0 12
170 ns 0 0 12
175 ns 1 0 6
St|rile circuitului se succed în ordinea
..., 0, 12, 6, 3, 13, 10, 5, 14, 7, 15, 11, 9, 8, 4, 2, 1, 0, 12, 6, ...
470 Cap.7 Proiectarea circuitelor digitale cu Verilog

21. Circuitul desenat în Fig.7.41 este alc|tuit din 3 maşini secvenÛiale


numite Counter, Trigger şi PulseGen. Fiecare maşin| are propriul ei semnal de
ceas. Ceasul Clock1 are o frecvenÛ| mult mai mic| decât Clock2 şi Clock3;
acestea din urm| au frecvenÛe comparabile. În cazul în care Clock2 şi Clock3
au frecvenÛe egale se consider| c| între ele exist| un defazaj oarecare.

Fig.7.41 Generator de impulsuri cu perioad| reglabil|

Blocul Counter produce un num|r de N biÛi (number = 5 ÷ 2N - 1) şi semnalul


clear cu rol de iniÛializare a blocurilor Trigger şi PulseGen. Comanda Reset
este asincron| şi forÛeaz| number = 5. Num|rul generat se poate m|ri, în ritmul
ceasului Clock1, cu Up = 1. Atât timp cât Reset = 1 sau Up = 1, maşinile
Trigger şi PulseGen sunt Ûinute în st|rile lor de reset.
Blocul PulseGen genereaz| la ieşirea pulse un şir de impulsuri oarecare. Pentru
simplitate se consider| tiparul din figura de mai jos. RN nu este reprezentat.

Fig.7.42 FuncÛionarea maşinii PulseGen


Circuite Logice SecvenÛiale Sincrone 471

Blocul Trigger declanşeaz| generatorul de impulsuri PulseGen la intervale de


timp dependente de num|rul binar aplicat la intrarea delay dup| cum se arat|
în Fig.7.43. Comanda RN nu este reprezentat|.

Fig.7.43 FuncÛionarea maşinii Trigger

S| se modeleze în Verilog circuitul din Fig.7.41 şi s| se verifice funcÛionarea


acestuia prin simulare.
R e z o l v a r e:
FuncÛionarea ansamblului Trigger - PulseGen presupune o anumit|
corelaÛie dintre st|rile de reset ale acestor dou| maşini. Fie s0 starea de reset
a blocului PulseGen, forÛat| de comanda RN = 0. Din diagramele prezentate în
enunÛul problemei se observ| c| maşina Trigger trebuie s| aib| ca stare de reset
una în care ieşirea start are valoarea 0; oricare stare asociat| cu intervalul
delay*TCk marcat în Fig.7.43 poate fi aleas| ca stare de reset.
În structura ierarhic| din Fig.7.41 sunt prezentate nume de porturi situate
pe nivelul de top (Up, Reset, Clock1, Clock2, Clock3, Out) dar şi nume de
porturi situate pe un nivel mai jos (reset, change, clear, number, delay, enable,
start, go, done, pulse, Ck, RN). Anumite conexiuni din top nu au înc| nume, de
exemplu aceea dintre Trigger.start şi PulseGen.go (referinÛele la un semnal
situat pe un nivel ierarhic inferior se fac prin indicarea c|ii, caracterul punct(.)
fiind utilizat ca separator). Conexiunile f|r| nume vor primi câte unul prin
intermediul declaraÛiilor de instanÛiere a modulelor.
Modulele Counter şi Trigger depind de parametrul N; se va considera
valoarea default N = 8. În continuare sunt prezentate modelele Verilog şi test
bench-urile blocurilor din Fig.7.41.
module Counter (Ck, reset, change, clear, number);
input Ck, reset, change;
output clear;
parameter N = 8;
output [N-1 : 0] number; reg [N-1 : 0] number;
always @ (posedge Ck or posedge reset)
472 Cap.7 Proiectarea circuitelor digitale cu Verilog

begin: b1
if (reset) number = 5;
else
begin
if (change)
begin
if (& number = = 0) number = number + 1;
//dac| bitul & number = 1 atunci number are valoarea maxim|
else number = 5;
end
else ;
end
end
assign clear = ~ (reset | change);
endmodule
module Counter_sim (ck, reset, ch, cl, nr);
output ck, reset, ch, cl;
output [3 :0] nr;
reg ck, reset, ch;
Counter # 4 NrGen (ck, reset, ch, cl, nr);
initial
begin
ck = 0; reset = 1; ch = 0;
#6; reset = 0; # 21; ch = 1; # 40; ch = 0;
end
always
ck = #5 ! ck;
endmodule
Rezultatele simul|rii modulului Counter_sim sunt ilustrate în figura de mai jos.

Fig.7.44 Rezultatele simul|rii modulului Counter_sim


Circuite Logice SecvenÛiale Sincrone 473

module Trigger (Ck, RN, delay, enable, start);


input Ck, RN, enable;
parameter N = 8;
input [N-1 : 0] delay;
output start;
reg start;
always @ (posedge Ck or negedge RN)
begin: b1
if (!RN) start = 0;
else if (! enable) start = 1;
else
begin: b2
integer k;
start = 0;
for (k = 1; k < delay - 1; k = k + 1)
@ (posedge Ck)
begin
if (enable) start = 0;
else disable b1;
end
@ (posedge Ck) start = 1;
@ (negedge enable) disable b1;
end
end
endmodule
module Trigger_sim (ck, rn, del, en, st);
output ck, rn, en, st;
output [3 : 0] del;
reg ck, rn, en;
reg [3 : 0] del;
Trigger # 4 declPG (ck, rn, del, en, st);
initial
begin
del = 3; rn = 0; en = 0; ck = 0;
# 6; rn = 1; # 16; en = 1; # 35; en = 0; # 10; en = 1;
end
always
ck = # 5 !ck;
endmodule
Rezultatele simul|rii modulului Trigger_sim sunt ilustrate în Fig.7.45.
474 Cap.7 Proiectarea circuitelor digitale cu Verilog

Fig.7.45 Rezultatele simul|rii modulului Trigger_sim

module PulseGen (Ck, RN, go, done, pulse);


input Ck, RN, go;
output done, pulse;
reg done, pulse; reg [2:0] CS, NS;
parameter s0 = 0, s1 = 1, s2 = 2, s3 = 3, s4 = 4, s5 = 5;
always @ (posedge Ck or negedge RN)
begin: seq
if (!RN) CS = s0;
else CS = NS;
end
always @ (CS or go)
begin
case(CS)
s0: if (go) begin NS = s1; done = 1; pulse = 0; end
else begin NS = s0; done = 1; pulse = 0; end
s1: if (go) begin NS = s2; done = 0; pulse = 1; end
else begin NS = s0; done = 0; pulse = 1; end
s2: if (go) begin NS = s3; done = 0; pulse = 1; end
else begin NS = s0; done = 0; pulse = 1; end
s3: if (go) begin NS = s4; done = 0; pulse = 0; end
else begin NS = s0; done = 0; pulse = 0; end
s4: if (go) begin NS = s5; done = 0; pulse = 1; end
else begin NS = s0; done = 0; pulse = 1; end
s5: if (go) begin NS = s5; done = 1; pulse = 0; end
else begin NS = s0; done = 1; pulse = 0; end
default: begin NS = s0; done = 1; pulse = 0; end
endcase
end
endmodule
Circuite Logice SecvenÛiale Sincrone 475

module PulseGen_sim (ck, rn, go, done, pulse);


output ck, rn, go, done, pulse;
reg ck, rn, go;
PulseGen # ( 3, 2, 0, 7, 1, 6) impG (ck, rn, go, done, pulse);
initial
begin
ck = 0; rn = 0; go = 0;
# 3; rn = 1; # 20; go = 1; # 70; go = 0;
end
always
ck = #5 !ck;
endmodule
Simularea modulului PulseGen_sim produce diagrame ca acelea din Fig.7.42.
Urm|torul modul, denumit periodImpGen_sim, reprezint| test bench-ul de
simulare a schemei din Fig.7.41 (periodImpGen este o prescurtare pentru
generator de impulsuri periodice). În lista de porturi din declaraÛia module sunt
trecute toate intr|rile, ieşirile şi conexiunile interne din nivelul ierarhic de top;
int_nrDel, int_RN, int_stGo, int_dEn reprezint| urm|toarele conexiuni interne
(în aceast| ordine):
Counter.number - Trigger.delay,
Counter.clear - Trigger.RN - PulseGen.RN,
Trigger.start - PulseGen.go,
PulseGen.done - Trigger.enable.
module periodImpGen_sim (Clock1, Clock2, Clock3, Reset, Up,
Out, int_nrDel, int_RN, int_stGo, int_dEn);
output Clock1, Clock2, Clock3, Reset, Up, Out;
output int_RN, int_stGo, int_dEn;
output [3 :0] int_nrDel;
reg Clock1, Clock2, Clock3, Reset, Up;
Counter # 4 NrGen (Clock1, Reset, Up, int_RN, int_nrDel);
Trigger # 4 declPG (Clock2, int_RN, int_nrDel,
int_dEn, int_stGo);
PulseGen # (1, 4, 5, 3, 0, 2) impG (Clock3, int_RN, int_stGo,
int_dEn, Out);
initial
begin
Reset = 1; Clock1 = 0; Clock2 = 0; Up = 0;
# 4; Reset = 0; # 5; Up = 1; # 23; Up = 0;
end
always Clock1 = # 10 ~ Clock1;
476 Cap.7 Proiectarea circuitelor digitale cu Verilog

always Clock2 = # 5 !Clock2;


initial
begin: timeShift
Clock3 = 0;
# 3;
forever Clock3 = # 5 !Clock3;
end
endmodule
Semnalele de ceas Clock2 şi Clock3 au perioade egale cu 10 ns îns| sunt
defazate. Defazajul în timp de 3 ns este introdus în Clock3 cu ajutorul
construcÛiei initial + forever. Blocul begin-end numit timeShift se execut| o
singur| dat| deoarece este plasat într-un proces initial. Valoarea Clock3 = 0 se
menÛine în intervalul de simulare 0 ns ÷ 8 ns; prima tranziÛie pozitiv| a acestui
semnal are loc în bucla forever la momentul (3 + 5) ns.
În simulator trebuie înc|rcate şi compilate modulele periodImpGen_sim,
Counter, Trigger şi PulseGen.
Circuitul din Fig.7.41 poate fi descris structural ca un modul în care se
instanÛiaz| Counter, Trigger şi PulseGen dup| cum se arat| în continuare.
module TOP (Clock1, Clock2, Clock3, Reset, Up, Out);
input Clock1, Clock2, Clock3, Reset, Up;
output Out;
wire int_RN, int_dEn, int_stGo;
wire [3:0] int_nrDel;
Counter # 4 NrGen (Clock1, Reset, Up, int_RN, int_nrDel);
Trigger # 4 declPG (Clock2, int_RN, int_nrDel,
int_dEn, int_stGo);
PulseGen # (2, 0, 5, 4, 7, 1) impG (Clock3, int_RN, int_stGo,
int_dEn, Out);
endmodule
Test bench-ul asociat modulului TOP este urm|torul.
module TOP_sim (Ck1, Ck2, Ck3, R, U, O);
output Ck1, Ck2, Ck3, R, U, O;
reg Ck1, Ck2, Ck3, R, U;
TOP pPgen (Ck1, Ck2, Ck3, R, U, O);
initial
begin
R = 1; Ck1 = 0; Ck2 = 0; U = 0;
# 4; R = 0; # 5; U = 1; # 23; U = 0;
end
Circuite Logice SecvenÛiale Sincrone 477

always Ck1 = # 10 ~ Ck1;


always Ck2 = # 5 !Ck2;
initial
begin: timeShift
Ck3 = 0;
# 3;
forever Ck3 = # 5 !Ck3;
end
endmodule
În simulator trebuie înc|rcate şi compilate modulele TOP_sim, TOP, Counter,
Trigger şi PulseGen. Semnalele int_RN, int_dEn, int_stGo şi int_nrDel nu pot
s| fie afişate ca rezultate ale simul|rii. Dac| se doreşte acest lucru atunci ele
trebuie incluse în lista de porturi şi declarate ca ieşiri atât în modulul TOP cât
şi în TOP_sim.
Modulul TOP_sim are structura ierarhic| reprezentat| în Fig.7.46. Din
ierarhia unui modul fac parte modulele instanÛiate, funcÛiile, task-urile şi
blocurile begin-end şi fork-join care au nume.

Fig.7.46 Ierarhia modulului TOP_sim

Numele ierarhice ale tuturor “obiectelor” definite în codul Verilog al modulului


TOP_sim se scriu sub form| de c|i. Exemple:
TOP_sim. pPgen.declPG.delay[2],
478 Cap.7 Proiectarea circuitelor digitale cu Verilog

TOP_sim. pPgen.declPG.b1.b2,
TOP_sim. pPgen.impG.NS,
TOP_sim. pPgen.int_stGo,
TOP_sim. pPgen.int_nrDel[0],
TOP_sim. timeShift.

22. a) S| se modeleze şi s| se simuleze generatorul de impuls pGen


descris în Fig.7.47. Impulsul High de la ieşirea Out dureaz| N perioade de ceas
începând cu primul front pozitiv de ceas care apare dup| tranziÛia negativ| a
comenzii Start.

Fig.7.47 Generator de impuls

b) Utilizând celula din figura de mai sus s| se construiasc| un circuit care s|


genereze 3 impulsuri la un impuls de Start, dup| cum se arat| în Fig.7.48. Cele
trei impusuri de la ieşire au duratele 1, 2 şi respectiv 3 perioade de ceas.

Fig.7.48 Generator de impulsuri neperiodice

c) S| se modifice circuitul de la punctul b astfel încât un singur impuls de Start


s| determine generarea periodic| a secvenÛei de impulsuri 1, 2, 3. Perioada
semnalului de ieşire este 9TCk.
R e z o l v a r e:
a) Semnalul Start acÛioneaz| ca o comand| de reset activ High. Celula pGen
este parametrizat|.
module pGen (Start, Ck, Out);
input Start, Ck;
Circuite Logice SecvenÛiale Sincrone 479

output Out;
reg Out;
parameter N = 5;
integer k;
always @ (Start)
if(Start)
begin
Out = 0;
@ (negedge Start);
for (k = 1; k <= N; k = k + 1)
@ (posedge Ck) Out = 1;
@ (posedge Ck) Out = 0;
end
else
begin
@ (posedge Start) Out = 0;
@ (negedge Start);
for (k = 1; k <= N; k = k + 1)
@ (posedge Ck) Out = 1;
@ (posedge Ck) Out = 0;
end
endmodule
Simularea modulului pGen se poate face cu test bench-ul urm|tor.
module pGen_sim (Start, Ck, Out);
output Start, Ck, Out;
reg Start, Ck;
pGen # 4 U4(Start, Ck, Out);
initial
begin
Start = 0; Ck = 0; # 7; Start = 1; # 10; Start = 0;
end
always
Ck = # 5 ~Ck;
endmodule
În intervalul de simulare 0 ns ÷ 7 ns ieşirea Out are valoare necunoscut| (x)
deoarece starea circuitului nu este cunoscut|.
b) Circuitul care genereaz| impulsurile ilustrate în Fig.7.48 este desenat în
Fig.7.49. Modulul pGen se instanÛiaz| de 3 ori în structura modulului p3Gen;
cele 3 instanÛe denumite pGen1, pGen2 şi pGen3 au parametrul N fixat la
valoarea 1, 2 şi respectiv 3.
480 Cap.7 Proiectarea circuitelor digitale cu Verilog

Fig.7.49 Structura generatorului de impulsuri neperiodice

module p3Gen (Out, Ck, Start);


input Ck, Start;
output Out;
wire a, b, c;
pGen # 1 pGen1(Start, Ck, a);
pGen # 2 pGen2(a, Ck, b);
pGen # 3 pGen3(b, Ck, c);
assign Out = a | b | c;
endmodule

module p3Gen_sim (start, out, clock);


output clock, start, out;
reg start, clock;
p3Gen NP(out, clock, start);
initial
begin
clock = 0; start = 1; # 2; start = 0;
# 104; start = 1; # 2; start = 0;
end
always
clock = # 5 ~clock;
endmodule
Rezultatele simul|rii modulului p3Gen_sim sunt ilustrate în Fig.7.50. Ieşirea
Out are valoarea necunoscut| x în intervalele 0 ns ÷ 5 ns şi 10 ns ÷ 15 ns. Pân|
la momentul 5 ns ieşirea b din celula pGen2 are valoarea x; ieşirea c din celula
pGen3 se menÛine la valoarea x pân| la momentul 15 ns. În continuare a, b şi
c au valori cunoscute. Al doilea impuls de start, notat cu 2 în diagramele din
Fig.7.50, produce secvenÛa de ieşire corect|. Se observ| c| semnalul de start
are efectul unui reset asincron.
Circuite Logice SecvenÛiale Sincrone 481

Fig.7.50 Rezultatele simul|rii modulului p3Gen_sim

c) Pentru ca un singur impuls de start s| produc| generarea cu perioada 9TCk


a secvenÛei de impulsuri 1, 2, 3 din Fig.7.48, trebuie ad|ugat| o conexiune de
reacÛie în schema din Fig.7.49, dup| cum se arat| în figura de mai jos.

Fig.7.51 Structura generatorului de impulsuri periodice

module Pp3Gen (Out, Ck, Start);


input Ck, Start;
output Out;
wire a, b, c, d;
pGen # 1 pGen1(d, Ck, a);
pGen # 2 pGen2(a, Ck, b);
pGen # 3 pGen3(b, Ck, c);
assign Out = a | b | c, d = Start | c;
endmodule

module Pp3Gen_sim (start, out, clock);


output clock, start, out;
reg start, clock;
Pp3Gen P(out, clock, start);
482 Cap.7 Proiectarea circuitelor digitale cu Verilog

initial
begin
clock = 0; start = 1; # 3; start = 0;
end
always
clock = # 5 ~clock;
endmodule
Rezultatele simul|rii modulului Pp3Gen_sim sunt ilustrate în Fig.7.52.

Fig.7.52 Rezultatele simul|rii modulului Pp3Gen_sim

Schema din Fig.7.53 include modurile de operare ale circuitelor din Fig.7.49
şi Fig.7.51. Cu mod = 0/1 se genereaz| impulsuri neperiodice/periodice la un
singur impuls High aplicat la intrarea Start.

Fig.7.53 Generator de impulsuri periodice/neperiodice

module PNP_p3Gen (Out, Ck, Start, mod);


input Ck, Start, mod;
output Out;
wire a, b, c, d;
pGen # 1 pGen1(d, Ck, a);
Circuite Logice SecvenÛiale Sincrone 483

pGen # 2 pGen2(a, Ck, b);


pGen # 3 pGen3(b, Ck, c);
assign Out = a | b | c, d = Start | (c & mod);
endmodule

7.5 Probleme propuse spre rezolvare

1. S| se modeleze în Verilog şi s| se scrie test bench-urile pentru


simularea urm|toarelor circuite combinaÛionale:
a) convertor binar cu semn codificat - cod complementar faÛ| de 2 (C2), pentru
numere de N biÛi;
b) convertor cod complementar faÛ| de 2 - binar cu semn codificat, pentru
numere de N biÛi;
c) convertor BCD (cu semn) - cod complementar faÛ| de 10 (C10), pentru
numere de N cifre (digiÛi);
d) convertor cod complementar faÛ| de 10 - BCD (cu semn), pentru numere de
N cifre (digiÛi);
e) convertor binar (8 biÛi) - BCD;
f) convertor BCD (3 digiÛi) - binar.

2. S| se scrie modelele Verilog şi test bench-urile pentru un sumator de


4 biÛi cu transport anticipat şi pentru un sumator de 16 biÛi cu dou| nivele de
anticipare a transportului.

3. S| se scrie un task care s| realizeze operaÛia:


a) de înmulÛire a dou| numere binare de N biÛi utilizând algoritmul Booth,
b) de conversie a unui num|r de 8 cifre din baza 9 în baza 5 (num|rul de cifre
ale rezultatului trebuie determinat).

4. Circuitul combinaÛional desenat în Fig.7.54 (decodificator


termometric) are funcÛionarea urm|toare. Dac| In = 0 atunci toate ieşirile
circuitului au valoarea logic| 0; dac| In = 3110 atunci toate ieşirile au valoarea

Fig.7.54 Decodificator termometric


484 Cap.7 Proiectarea circuitelor digitale cu Verilog

logic| 1. Pentru o valoare intermediar| In = k10 rezult| Out [k : 1] = 111 ... 1 şi


Out [31 : k + 1] = 000 ... 0.
a) S| se modeleze în Verilog decodificatorul din Fig.7.54 şi s| se scrie test
bench-ul pentru simulare.
b) S| se remodeleze decodificatorul astfel încât s| devin| celul| expandabil|
şi apoi s| se scrie un model Verilog pentru un decodificator termometric cu N
biÛi de intrare (N > 5).

5. Decodificatorul BCD - 7 segmente desenat în Fig.7.55 are urm|toarea


tabel| de funcÛionare(LT - lamp test, BL - blanking, ( - indiferent):
LT BL DCBA Display
0 ( (((( 8
1 0 (((( blank
1 1 0000 0
1 1 0001 1
1 1 0010 2
1 1 0011 3
1 1 0100 4
1 1 0101 5
1 1 0110 6
1 1 0111 7
1 1 1000 8
1 1 1001 9
1 1 1010 E
1 1 1011 P
1 1 1100 H
1 1 1101 U
1 1 1110 F
1 1 1111 - (minus).

Fig.7.55 Decodificator BCD - 7 segmente


Circuite Logice SecvenÛiale Sincrone 485

S| se modeleze decodificatorul BCD - 7 segmente cu ajutorul unei funcÛii şi s|


se scrie test bench-ul pentru simulare.

6. S| se modeleze un MUX4 (multiplexor de 4 c|i) cu ajutorul unei


primitive definite de utilizator (UDP) care se va instanÛia apoi în modulul
MUX4. S| se scrie test bench-ul pentru simularea circuitului.

7. S| se modeleze cu ajutorul primitivelor UDP bistabilii de tip scan cu


o singur| intrare de ceas (Fig.1.36) şi cu dou| intr|ri de ceas (Fig.1.37).

8. a) S| se scrie un model Verilog structural pentru bistabilul scan-dff


master-slave desenat în Fig.1.39 şi s| se verifice funcÛionarea acestuia prin
simulare. Se va considera c| toate porÛile din schem| (primitivele predefinite)
au întârzieri tipice egale cu o unitate de timp.
b) S| se determine, prin simulare, utilizând subrutinele de control temporal
$setup şi $hold (sau $setuphold) care sunt valorile parametrilor tsetup şi thold.
Aceste valori sunt calculate cu formulele (1.14).
c) S| se determine prin simulare timpii de propagare de la ceasurile SCk şi
NCk la ieşirea Q.

9. Schema desenat| în fig.7.56 reprezint| structura unui bistabil JK cu


Reset asincron. S| se modeleze în Verilog circuitul (utilizând o primitiv| UDP
pentru bistabilul D) şi s| se scrie test bench-ul pentru simulare.

Fig.7.56 “Conversie” bistabil D - bistabil JK

10. S| se rescrie codul Verilog al modulul pulse2 urm|tor dup| “tiparul”


de maşin| secvenÛial|. Acest circuit genereaz| dou| impulsuri High cu duratele
1 şi respectiv 3 perioade de ceas; declanşarea este produs| de frontul negativ
al semnalului Start. S| se verifice echivalenÛa celor dou| modele prin simulare.
module pulse2 (Start, Ck, Out);
input Start, Ck;
output Out; reg Out;
486 Cap.7 Proiectarea circuitelor digitale cu Verilog

always @ (Start)
if(Start)
begin
Out = 0;
@ (negedge Start);
@ (posedge Ck) Out = 1;
@ (posedge Ck) Out = 0;
@ (posedge Ck) Out = 1;
@ (posedge Ck) Out = 1;
@ (posedge Ck) Out = 1;
@ (posedge Ck) Out = 0;
end
else
begin
@ (posedge Start) Out = 0;
@ (negedge Start);
@ (posedge Ck) Out = 1;
@ (posedge Ck) Out = 0;
@ (posedge Ck) Out = 1;
@ (posedge Ck) Out = 1;
@ (posedge Ck) Out = 1;
@ (posedge Ck) Out = 0;
end
endmodule

11. S| se rescrie codul Verilog al modulului dataCompress de mai jos


utilizând atribuiri procedurale de tip blocking în locul celor de tip non-
blocking. S| se verifice echivalenÛa codurilor prin simulare.
module dataCompress (RN, Ck, D, Q);
input RN, Ck;
input [3 : 0] D;
output [3 : 0] Q;
reg [3 : 0] Q;
always @ (posedge Ck or negedge RN)
begin
if (~RN) Q = 0;
else
begin
Q[0] <= D[0] ^ Q[3];
Q[1] <= D[1] ^ Q[0];
Q[2] <= D[2] ^ Q[1];
Circuite Logice SecvenÛiale Sincrone 487

Q[3] <= D[3] ^ Q[2] ^ Q[3];


end
end
endmodule

12. a) S| se modeleze un bistabil de tip D, cu reset asincron, care s| aib|


semnalul de ceas activ pe ambele fronturi.
b) S| se scrie un model Verilog pentru un num|r|tor BCD direct de un digit în
care s| se instanÛieze 4 bistabili de tip D activi pe ambele fronturi de ceas. S|
se simuleze aceast| celul| de num|rare.

13. S| se modeleze în Verilog şi s| se simuleze divizorul de frecvenÛ|


“programabil” desenat în Fig.7.57. Ieşirea de împrumut Br a num|r|torului
zecimal invers se activeaz| la trecerea prin zero (ZU = 0010). Comanda de
înc|rcare paralel| a num|r|torului (PL) şi intrarea de reset (R) a bistabilului
sunt asincrone.

Fig.7.57 Divizor de frecvenÛ| programabil

14. S| se scrie modelul Verilog şi test bench-ul pentru num|r|torul binar


din Fig.7.58. Ceasul Ck1 produce înc|rcarea paralel| (Q+ = P) dac| Ck2 are
nivelul High; ceasul Ck2 produce num|rarea direct| modulo 16 dac| Ck1 are
nivelul logic High. Ieşirea de transport Cy se activeaz| la trecerea
num|r|torului prin starea Q = 1510.

Fig.7.58 Num|r|tor binar direct cu înc|rcare paralel|


488 Cap.7 Proiectarea circuitelor digitale cu Verilog

15. S| se modeleze în Verilog analizorul de semn|tur| compus din N


celule, reprezentat în Fig.4.15. S| se simuleze circuitul luând în considerare
urm|toarele:
- bistabilii au intrare asincron| de reset,
- registrul are 8 celule (N = 8),
- polinomul caracteristic al registrului este P(x) = 1 + x2 + x3 + x4 + x8,
- secvenÛele de intrare pentru care se determin| semn|turile sunt
R1 = 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1
R2 = 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1
R3 = 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1
R4 = 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.
Dup| fiecare secvenÛ| analizat| registrul trebuie resetat.

16. Circuitul din Fig.7.59, numit şi automat celular, este compus din
dou| tipuri de celule notate CelA şi CelB. Toate celulele au câte 4 intr|ri
(Clock, SN, in1, in2) şi o singur| ieşire Q. Din motive de simplificare a
schemei, la celulele din mijloc ieşirea Q este reprezentat| de dou| ori.

Fig.7.59 Automat celular

Fiecare celul| conÛine un bistabil de tip D şi porÛi logice. FuncÛionarea celor


dou| tipuri de celule este descris| de ecuaÛiile
CelA: Q+ = Q-1 r Q+1
CelB: Q+ = Q-1 r Q r Q+1,
în care Q+ şi Q sunt starea viitoare şi respectiv starea curent| a celulei iar Q-1
şi Q+1 sunt st|rile curente ale celulelor vecine. Comanda SN (set negat) este
asincron|.
a) S| se scrie modelele Verilog pentru celulele CelA, CelB şi automatul din
Fig.7.59 (acesta conÛine câte dou| instanÛe de CelA şi CelB).
b) S| se determine funcÛionarea automatului prin simulare (r|spunsul Q[3 : 0]).
c) S| se scrie modelele Verilog şi test bench-urile pentru automatele compuse
numai din celule de tip A şi respectiv numai din celule de tip B. S| se simuleze
Circuite Logice SecvenÛiale Sincrone 489

circuitele şi s| se determine grafurile de tranziÛie a st|rilor.


d) S| se determine structurile (polinoamele caracteristice) registrelor de
deplasare cu reacÛie care sunt echivalente funcÛional cu automatele simulate la
punctele b şi c.

17. Circuitul secvenÛial din Fig.7.60 monitorizeaz| o secvenÛ| de biÛi


oarecare (Sin) şi semnalizeaz| prin done = 1 fiecare apariÛie a tiparului 1, 1, 0,
1, 0, 0, 1, 1, 0. Num|rul de apariÛii ale acestui tipar este contorizat în form|
binar| la ieşirea count. S| se modeleze în Verilog şi s| se simuleze circuitul.

Fig.7.60 Detector de pattern

18. S| se modeleze în Verilog şi s| se simuleze circuitele desenate în


Fig.7.61a, b. Operanzii A şi B au câte N biÛi. În cazul comparatorului ordinea
de aplicare a biÛilor este de la MSB (most significant) la LSB (least significat);
ordinea se inverseaz| la adunare.
NotaÛiile m, eq şi M au semnificaÛiile mai mic, egal şi respectiv mai mare. În
structura comparatorului / sumatorului sunt 3 şi respectiv (N + 1) bistabili.

Fig.7.61 Comparator şi sumator secvenÛial

19. S| se simuleze modulul condPgen urm|tor (test bench-ul este


condPgen_sim) pe intervalul 0 ns ÷ 250 ns şi apoi s| se scrie un cod Verilog
echivalent funcÛional f|r| s| se utilizeze while şi disable. S| se simuleze noua
versiune a modulului folosind acelaşi test bench şi s| se verifice echivalenÛa
celor dou| modele prin compararea r|spunsurilor out. În ce condiÛii un impuls
High aplicat la intrarea start declanşeaz| generarea semnalului de ieşire?
490 Cap.7 Proiectarea circuitelor digitale cu Verilog

module condPgen (ck, start, stop, out);


input ck, start, stop;
output out;
reg out;
always @ (start)
begin: go
if (start)
begin
out = 0;
@ (negedge start) ;
if(stop) disable go;
else
while(!stop)
begin
@ (posedge ck) out = 1;
@ (posedge ck) out = 1;
@ (posedge ck) out = 0;
end
end
else
begin
if(stop) disable go;
else
while(!stop)
begin
@ (posedge ck) out = 1;
@ (posedge ck) out = 1;
@ (posedge ck) out = 0;
end
end
end
endmodule

module condPgen_sim (out, ck, start, stop);


output stop, ck, out, start;
reg ck, stop, start;
condPgen U107 (ck, start, stop, out);
initial
begin
ck = 0; start = 1; stop = 0;
# 16; start = 0; # 40; start = 1; # 40; stop = 1; # 33;
Circuite Logice SecvenÛiale Sincrone 491

start = 0; # 2; stop = 0; # 26; start = 1; # 2; s tart = 0;


end
always ck = # 5 ~ck;
endmodule

20. S| se simuleze modulul parallelJobs pe intervalul 0 ns ÷ 350 ns şi


apoi s| se scrie un model Verilog echivalent funcÛional f|r| s| se utilizeze
while şi fork-join. S| se simuleze noua versiune a modulului parallelJobs
folosind acelaşi test bench şi s| se verifice echivalenÛa celor dou| modele.
module parallelJobs(start, ck, in1, in2, out1, out2, out3);
input start, ck, in1, in2;
output out1, out2, out3;
reg out1, out2, out3;
reg flag1, flag2;
always@ (negedge start)
begin
out1 = 0; out2 = 0; out3 = 0;
flag1 = 1; flag2 = 1;
fork
@(posedge in1)
begin
@(posedge ck) out1 = 1;
@(posedge ck) out1 = 0;
@(posedge ck) out1 = 0;
@(posedge ck) out1 = 1;
flag1 = 0;
end
@(negedge in2)
begin
@(posedge ck) out2 = 1;
@(posedge ck) out2 = 1;
@(posedge ck) out2 = 1;
@(posedge ck) out2 = 1;
@(posedge ck) out2 = 0;
flag2 = 0;
end
while (flag1 & flag2)
@(posedge ck) out3 = ~ out3;
join
end
endmodule
492 Cap.7 Proiectarea circuitelor digitale cu Verilog

module parallelJobs_sim (ck, start, in1, out1, in2, out2, out3);


output ck, start, in1, out1, out3, in2, out2;
reg ck, start, in1, in2;
parallelJobs U23 (start, ck, in1, in2, out1, out2, out3);
initial
begin
start = 1; in1 = 0; in2 = 1; ck = 0;
#17; start = 0; #30; in1 = 1; #21; in2 = 0; #100;
start = 1; #10; in1 = 0; #4; in1 = 1; #6; start = 0;
#34; in2 = 1; #13; in2 = 0; #24; in1 = 0; #2; in1 = 1;
end
always
ck = #5 ~ ck;
endmodule
Circuite Logice SecvenÛiale Sincrone 493

INDEX

A
acumulator 176
always 375
analiza de semn|tur| 207
ASIC 294
asincron 2, 19
assign 374
astabil 33, 35, 38
atribuire 373

B
begin-end 367
BIST 341
bistabil D 17, 20, 21, 23, 24
bistabil JK 25, 26, 27
bistabil T 28
bit-select 365
blocking 373, 395
boundary-scan 332, 334
BSDL 331
bulk-DTMOS 273
bus-keeper 322

C
capacitorless DRAM 290, 292
case - endcase 370
`celldefine - `endcelldefine 398
charge storage strength 358
clock 17
clock gating 130, 143, 323
clock skew 62, 63, 328
compilare 392
controlabilitate 308, 309
CPLD 300
494 Index

D
`default_nettype 399
`define 400, 443
deplasare serie 193, 194
design flow 353
DFT 308
directive de compilare 398
disable 378
$display 381
divizor de frecvenÛ| 24, 156
DRAM 275, 278, 281
DRC 355
driving strength 358
DTMOS 272

E
edge-sensitive 3, 385
EEPROM 248
enhanced scan 329
EPROM 247
event 360
event-driven 390
expandare 140, 242

F
factor de umplere 25, 156
$fclose 382
$fdisplay 382
FDSOI 274
FIFO 199
$finish 382
$fmonitor 382
$fopen 382
for 371
forever 371
fork - join 367
FPGA 303
full-custom design 294
full-scan 318
function - endfunction 376
funcÛie sistem 381
Circuite Logice SecvenÛiale Sincrone 495

$fwrite 382

G
gate-array design 295
graf de tranziÛie a st|rilor 10, 41, 43, 218

H
hazard 65
HDL 351
$hold 432, 458

I
IEEE 1149.1 331
ieşire de transport/împrumut 161
if - else 368
if - else if - else 369
`ifdef - `elseif - `else - `endif 401
`include 399, 408, 430
initial 374
iniÛializare 18
integer 360
instanÛiere 383, 388

L
latch 7, 9, 13, 16
level-sensitive 3, 385
LFSR 201
LIFO 199
`line 399
LUT 305
LVS 355

M
master-slave 21, 24, 27
maşin| secvenÛial| sincron| 39
maşini Mealy, Moore 40
memorie 239
memorie Flash 249
MISR 210
module - endmodule 387
496 Index

$monitor 382
monostabil 33

N
neretriggerabil 34
NAND - Flash 250
NAND - ROM 245
non-blocking 373, 395
NOR - Flash 250
NOR - ROM 244
`nounconnected_drive 399
num|r|tor binar 141
num|r|tor direct 132
num|r|tor invers 141
num|r|tor reversibil 128, 139, 152
num|r|tor zecimal 150, 152

O
observabilitate 308, 310
off-line / on-line BIST 341
operaÛii Verilog 363

P
PAL, PLA 296
parameter 360
partial-scan 319
part-select 365
PDSOI 274
pipeline 213
polinom caracteristic 207
primitive - endprimitive 383
primitive predefinite 382, 383
PROM 246

R
RAM 251
real 360
reacÛie asincron|/sincron| 145, 149
redundanÛ| structural| 66
refresh 276
Circuite Logice SecvenÛiale Sincrone 497

reg 360
registru 193
repeat 371
RESET 7
`resetall 398
ROM 243
RTL 326, 354

S
scanare 211, 315
scan-design 321, 325
scan flip-flop 29
secvenÛiere 5
secvenÛ| pseudo-aleatoare 201
SET 7

$setup 432, 458


$setuphold 459
sincron 1, 18
SISR 207
SOI - DTMOS 273
specify - endspecify 407, 408, 413, 432
specparam 407, 408, 432
SRAM 251, 260, 268
STA 354
standard-cell design 295
standard delay format 351, 354
stare
curent|/viitoare 10, 40
valid|/invalid| 41
$stop 382
string 358
supply0/supply1 360

T
table - endtable 383, 384
task - endtask 377
task sistem 381
test bench 387
testabilitate 308
thold/tsetup 18, 20, 22, 23
498 Index

`timescale 398
$time 381, 382
timp de acces la memorie 241
tri0/tri1 360
trireg 360

U
UDP 383
`unconnected_drive 399
`undef 400

V
venjuncÛie 5

W
wait 372
while 371
wire/wand/wor 360
$write 382
Circuite Logice SecvenÛiale Sincrone 499

BIBLIOGRAFIE

[1] Chris J. Myers, Asynchronous Circuit Design, John Wiley & Sons Inc.,
New York, 2001
[2] Wayne Wolf, Modern VLSI Design: Systems on Silicon, 2nd edition,
Prentice Hall, New Jersey, 1998
[3] Damian Imbrea, Circuite Logice CombinaÛionale, Editura Gh. Asachi,
Iaşi, 2004
[4] M. Morris Mano, Computer Engineering: Hardware Design, Prentice
Hall, New Jersey, 1988
[5] *** Design Considerations for Logic Products: Application Book, Texas
Instruments, 1998
[6] *** Design Compiler Reference Manual: Constraints and Timing,
Synopsys, 2000
[7] *** Design Compiler Reference Manual: Optimization and Timing
Analysis, Synopsys, 2000
[8] I. Sztojanov, E. Borcoci, N. Tomescu, D. Bulik, M. Petrec, C. Petrec,
De la Poarta TTL la Microprocesor, vol.1&2, Editura Tehnic|, Bucureşti,
1987
[9] R. Jacob Baker, Harry W. Li, David E. Boyce, CMOS: Circuit Design,
Layout, and Simulation, IEEE Press, 1998
[10] Richard F. Tinder, Engineering Digital Design, 2nd edition, Academic
Press, 2000
[11] Eby G. Friedman, Clock distribution design in VLSI circuits - an
overlview, Proc. of IEEE ISCAS, vol.3, p. 1475-1478, Chicago, 1993
[12] Tolga Soyata, Eby G. Friedman and J. H. Mulligan, Integration of clock
skew and register delays into a retiming algorithm, Proc. of IEEE
ISCAS, vol.3, p. 1483-1487, Chicago, 1993
[13] Steve Heath, Embedded Systems Design, Newnes, 2003
[14] David A. Hodges and Horace G. Jackson, Analysis and Design of Digital
Integrated Circuits, McGraw-Hill, 1983
[15] Myeong-Eun Hwang and Kaushik Roy, A 135 mV 0.13 µW process
tolerant 6T subthreshold DTMOS SRAM in 90 nm Technology, IEEE
CICC, p. 419-422, 2008
500 Bibliografie

[16] Fariborz Assaderaghi, D. Sinitsky, S. A. Parke, J. Bokor, Ping K. Ko and


Chenming Hu, Dynamic threshold-voltage MOSFET (DTMOS) for ultra-
low voltage VLSI, IEEE Trans. on Electron Devices, vol.44, p. 414-422,
1997
[17] Vandana Niranjan and M. Gupta, An analytical model of the bulk-
DTMOS transistor, Journal of Electron Devices, vol.8, p. 329-338, 2010
[18] Bulusu Anand, M. P. Desai and V. Rangopal Rao, Silicon film thickness
optimization for SOI-DTMOS from circuit performance considerations,
IEEE Electron Device Letters, vol.25, p. 436-438, 2004
[19] Bruce Jacob, W. Spencer and D. T. Wang, Memory Systems: Cache,
DRAM, Disk, Elsevier, 2008
[20] Houri Johari and Farrokh Ayazi, High-density embedded deep trench
capacitors in silicon with enhanced breakdown voltage, IEEE Trans. on
components and packaging technology, vol.32, p. 808-815, 2009
[21] Hyun-Jin Cho, F. Nemati, R. Roy, R. Gupta, K. Yang, M. Ershov, S.
Banna, M. Tarabbia, C. Salling, D. Hayes, A. Mittal and S. Robins, A
novel capacitor-less DRAM cell using thin capacitively-coupled
thyristor, Electron Devices Meeting Technical Digest, p. 311-314, 2005
[22] Gino Giusi, M. A. Alam, F. Crupi and S. Pierro, Bipolar mode operation
and scalability of double-gate capacitorless 1T-DRAM cells, IEEE Trans.
on Electron Devices, vol.57, p. 1743-1750, 2010
[23] Min Cho, Thin-Body SOI Capacitorless DRAM Cell Design
Optimization and Scaling, Technical Report No. UCB/EECS-2012-176,
Berkeley, 2012
[24] Wolfgang Mueller and Michael Kund, Future memory technologies,
Proc. of SPIE, vol.7363, 2009
[25] Min H. Cho, Changhwan Shin and Tsu-Jae King Liu, Convex Channel
Design for Improved Capacitorless DRAM Retention Time, Technical
Report No. UCB/EECS-2009-147, Berkeley, 2009
[26] Stephen D. Brown and Jonathan Rose, “FPGA and CPLD architectures:
A tutorial”, IEEE Design and Test of Computers, vol.13, p. 42-57, 1996
[27] *** MAX II Device Handbook, Altera Corporation, 2008
[28] *** Virtex-4 FPGA User Guide, Xilinx, 2008
[29] M. Abramovici, M. A. Breuer, A. D. Friedman, Digital Systems Testing
and Testable Design, IEEE Press, New York, 1990
[30] Michael L. Bushnell, Vishwani D. Agrawal, Essentials of Electronic
Testing for Digital, Memory and Mixed-Signal VLSI Circuits, Kluwer
Academic Publishers, 2000
[31] Laung-Terng Wang, Cheng-Wen Wu, Xiaoqing Wen, VLSI Test
Principles and Architectures: Design for Testability, Elsevier, 2006
Circuite Logice SecvenÛiale Sincrone 501

[32] Damian Imbrea, Testarea şi Testabilitatea Sistemelor Digitale, Editura


VIE, Iaşi, 2000
[33] *** IEEE Standard 1364 Verilog HDL, 2001
[34] Donald E. Thomas and Philip R. Moorby, The Verilog Hardware
Description Language, Kluwer Academic Publishers, 1991
[35] *** HDL Compiler for Verilog Reference Manual, Synopsys, 2000
[36] Douglas J. Smith, A Practical Guide for Designing, Synthesizing and
Simulating ASICs and FPGAs Using VHDL or Verilog, Doone
Publications, 1998
[37] J. Bhasker, Verilog HDL Synthesis: A practical primer, Star Galaxy
Publishing, 1998

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