Documente Academic
Documente Profesional
Documente Cultură
CIRCUITE LOGICE
SECVENÚIALE SINCRONE
CIRCUITE LOGICE
SECVENÚIALE SINCRONE
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
1.1 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
Figura 1.2
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.4 Latch-uri S R ºi S̄ R̄
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.
Î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
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
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:
1.2.1 Bistabili D
Douã simboluri de bistabil D ºi tabelele de funcþionare corespunzãtoare
sunt reprezentate în Fig.1.17.
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.
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.
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.
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.
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.
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
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
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ã.
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
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
2.1 Generalit|Ûi
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
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
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.
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.
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.
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.
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
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
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
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.
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).
Î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.
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
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
Figura 2.30
70 Cap.2 Sinteza şi analiza maşinilor secvenÛiale
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
Figura 2.32
Figura 2.33
Figura 2.34
Figura 2.35
Figura 2.36
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|).
Figura 2.39
Figura 2.40
Figura 2.41
Figura 2.42
Figura 2.43
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
Figura 2.47
Circuite Logice SecvenÛiale Sincrone 83
Figura 2.48
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.
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
Figura 2.52
Figura 2.53
Circuite Logice SecvenÛiale Sincrone 87
Figura 2.54
Figura 2.55
88 Cap.2 Sinteza şi analiza maşinilor secvenÛiale
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
Figura 2.58
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.60
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
Figura 2.62
Circuite Logice SecvenÛiale Sincrone 95
Figura 2.63
96 Cap.2 Sinteza şi analiza maşinilor secvenÛiale
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
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
Figura 2.66
Figura 2.67
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
Figura 2.72
Circuite Logice SecvenÛiale Sincrone 103
Figura 2.73
Figura 2.74
Figura 2.75
Figura 2.76
Figura 2.77
106 Cap.2 Sinteza şi analiza maşinilor secvenÛiale
Figura 2.78
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.
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
Figura 2.83
Figura 2.84
Circuite Logice SecvenÛiale Sincrone 111
Figura 2.85
112 Cap.2 Sinteza şi analiza maşinilor secvenÛiale
Figura 2.86
Figura 2.87
114 Cap.2 Sinteza şi analiza maşinilor secvenÛiale
Figura 2.88
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
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
Figura 2.92
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
Figura 2.95
Figura 2.96
Figura 2.97
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
Figura 2.99
Figura 2.100
Figura 2.101
Figura 2.102
Cap.3 NUM{R{TOARE
3.1 Generalit|Ûi
Figura 3.1
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).
Figura 3.13
Figura 3.17
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.
Figura 3.20
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
Figura 3.25
142 Cap.3 Num|r|toare
Figura 3.28
144 Cap.3 Num|r|toare
Figura 3.30
Circuite Logice SecvenÛiale Sincrone 145
R = S̄3·S2·S̄1·S̄0·Z̄3·Z2·Z1·Z̄0·Ū3·U2·U1·U0.
154 Cap.3 Num|r|toare
Î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.
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
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
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
Figura 3.53
Figura 3.54
Figura 3.55
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
Figura 3.58
Figura 3.59
Figura 3.60
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
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
Figura 3.64
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
Figura 3.67
Figura 3.68
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
Figura 3.69
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
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
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|.
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.
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
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
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
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
Figura 3.85
Figura 3.86
Circuite Logice SecvenÛiale Sincrone 185
Figura 3.87
Figura 3.88
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.
Figura 3.90
Circuite Logice SecvenÛiale Sincrone 189
Figura 3.91
Figura 3.92
190 Cap.3 Num|r|toare
Figura 3.93
Figura 3.94
Circuite Logice SecvenÛiale Sincrone 191
Figura 3.95
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
Figura 3.97
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.
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.
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.
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
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
î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
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.
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.
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
Î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.
Figura 4.23
Circuite Logice SecvenÛiale Sincrone 217
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.
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
Figura 4.31
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:
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
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
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.
Figura 4.34
226 Cap.4 Registre
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
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
Î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
Implementarea acestui bloc cu ajutorul unui num|r|tor (binar sau BCD) este
prezentat| în Fig.4.38.
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.
Figura 4.42
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
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
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
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
5.1 Generalit|Ûi
- 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).
Î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
(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).
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.
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
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.
Î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
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.
3 − Vbit −
I D1 = + Istandby (5.30)
RB
3 − Vbit − 5 − V1 read
I D1 = + . (5.31)
RB R1
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|
Pdinamic = f ⋅ C ⋅ VDD
2
. (5.42)
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.
Î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
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|
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|
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.
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|
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Û|
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|
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
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|
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
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
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
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)
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.
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
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.
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
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
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
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
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.
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.
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.
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|
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.
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
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.
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.
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
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
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
..............
@ready; // aşteptarea evenimentului ready
Spre deosebire de celelalte tipuri de date, variabilelor de tip event nu li se
atribuie valori.
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
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.
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
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.
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
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|.
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);
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
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
- 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.
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
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
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
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
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.
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
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.
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
Î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_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
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
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
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
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
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.
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
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).
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
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
always
clock = #5 ~ clock;
endmodule
Rezultatele simul|rii modulului freqDiv_sim sunt ilustrate în Fig.7.28.
@ (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.
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.
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
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.
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
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
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
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.
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.
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
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.
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.
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
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.
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
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