Documente Academic
Documente Profesional
Documente Cultură
ANALIZA şi
10111011010101000100100101110110110
11111000111010101001110101
10100100011110000000110101011
10101001110001010010101
010010001010000101000101010001001010010
101101001001010001001010010001010
10010010101001010001
10001001010010101000101001010
SINTEZA
DISPOZITIVELOR
NUMERICE
EDITURA ALMA MATER
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
3
CUPRINS
pagina
CAPITOLUL 0 (zero)
Elemente de algebră binară (algebră logică)
0.1. Introducere 5
0.2. Axiomele şi teoremele algebrei binare 6
0.3. Funcţii binare 8
0.4. Formele canonice ale funcţiilor logice 12
CAPITOLUL 1
Analiza şi sinteza circuitelor logice combinaţionale
1.1. Introducere 17
1.2. Elemente de analiză a circuitelor logice combinaţionale 18
1.3. Sinteza circuitelor logice combinaţionale 27
1.4. Minimizarea funcţiilor logice combinaţionale 29
1.4.1. Metoda minimizarii pe baza axiomelor si teoremelor algebrei
booleene 29
1.4.2. Metoda diagramelor Karnaugh 29
1.4.3. Metoda Quine-Mc Cluskey 37
1.4.4. Minimizarea funcţiilor logice combinaţionale incomplet definite 42
1.4.5. Minimizarea sistemelor de funcţii booleene 43
1.5. Apariţia hazardului 51
1.5.1. Eliminarea hazardului cu ajutorul diagramelor Karnaugh 53
1.6. Analiza circuitelor logice combinaţionale cu ajutorul pachetului de
programe OrCAD 55
1.6.1. Proiectarea schemei electronice cu ajutorul programului OrCAD
CAPTURE 55
1.6.1.1. Începerea unui proiect nou 55
1.6.1.2. Plasarea componentelor în schema electronică 57
1.6.1.3. Conectarea componentelor schemei electronice 59
1.6.1.4. Verificarea corectitudinii realizării schemei electrice 60
1.6.1.5. Plasarea punctelor de test pe schema electronică 61
1.6.1.6. Stabilirea profilului de simulare 61
1.6.1.7. Simularea circuitului 62
1.7. Analiza circuitelor logice combinaţionale cu ajutorul limbajelor
pentru descrierea structurii hardware (HDL) 62
1.7.1. Introducere 62
1.7.2. Limbajul Verilog HDL 67
1.7.2.1. Structura unui program Verilog HDL 67
1.7.2.2. Testarea programelor Verilog HDL 87
1.7.3. Limbajul VHDL 100
1.7.3.1. Structura unui program VHDL 100
1.7.3.2. Testarea programelor VHDL 103
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
4
CAPITOLUL 2
Analiza şi sinteza circuitelor logice secvenţiale
2.1. Introducere 108
2.2. Tabelul tranziţiilor şi al ieşirilor 111
2.3. Graful tranziţiilor 117
2.4. Alte modele ale circuitelor secvenţiale 118
2.5. Analiza circuitelor logice secvenţiale 121
2.6. Sinteza circuitelor logice secvenţiale 123
2.7. Circuite basculante bistabile folosite ca elemente de memorie
pentru circuitele secvenţiale 123
2.7.1. Introducere 123
2.7.2. Tabelele caracteristice, tabelele excitaţiilor şi ecuaţiile intrărilor 124
2.8. Exemplificarea sintezei unui circuit logic secvenţial 133
2.9. Analiza circuitelor logice secvenţiale asistată de calculator 140
2.9.1. Simularea circuitelor logice secvenţiale cu ajutorul aplicaţiei
OrCAD 140
2.9.2. Simularea circuitelor logice secvenţiale cu ajutorul Verilog HDL 142
2.9.3. Simularea circuitelor logice secvenţiale cu ajutorul VHDL 143
Seminar
Seminar 1 145
Seminar 2 147
Seminar 3
Seminar 4
Seminar 5
Seminar 6
Seminar 7
Laborator
Laborator 1
Laborator 2
Laborator 3
Laborator 4
Laborator 5
Laborator 6
Laborator 7
Laborator 8
Laborator 9
Laborator 10
Laborator 11
Laborator 12
Laborator 13
Laborator 14
Bibliografie
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
5
CAPITOLUL 0 (zero)
0.1. Introducere
Primul capitol al acestui curs este capitolul zero şi nu capitolul unu aşa cum se
obişnuieşte. Numărul zero a fost folosit din mai multe motive: în primul rând pentru ca
informaţia din acest capitol reprezintă o recapitulare a cunoştiinţelor dobândite la alte
cursuri şi el reaminteşte doar noţiuni ce vor fi folosite şi aici. Cele câteva elemente ale
algebrei binare prezentate, au doar scopul să limpezească noţiunile ce apar în capitolele
următoare. În al doilea rând, folosirea cifrei zero pentru numerotarea capitolului este
justificată şi de faptul că această cifră reprezintă primul simbol din orice baza de
numeraţie. Ultimul motiv, şi cel mai important, este determinat de faptul că în tehnica
numerică primul indice are valoarea zero şi deci este momentul să ne obişnuim cu
numerotarea: 0, 1, 2, … .
Algebra logică numită şi calcul propoziţional, operează cu propoziţii, despre care
are sens să afirmăm că sunt adevărate sau false. Din însăşi definirea propoziţiilor rezultă că
o propoziţie poate fi adevărată sau falsă. Propoziţiile pot fi simple sau copmuse. Cele
compuse se obţin ca rezultat al legăturii propoziţiilor simple, prin intermediul unor
conective logice. Adevărul sau falsitatea unei propoziţii compuse este în funcţie de
valoarea propoziţiilor simple din care se compune şi de tipul legăturii logice.
În logica simbolică se poate face abstracţie de sensul propoziţiilor, operând cu
relaţiile de valoare. Convenim ca unei propoziţii adevărate să-i atribuim valoarea binară
unu (1), iar falsitatea acesteia să o notăm cu valoarea binară zero (0).
Propoziţia compusă a cărei valoare depinde de valorile propoziţiilor simple, putând
avea două valori, se numeşte funcţie logică sau binară.
Funcţia compusă este complet definită cu ajutorul unui tabel finit în care se trec
valorile funcţiei în corespondenţă cu valorile propoziţiilor simple considerate
independente. O astfel de exprimare a funcţiei compuse este cunoscută sub numele de tabel
de adevăr.
Calculul propoziţiilor poate fi extrapolat în tehnică la sistemele automate care
utilizează elemente de comutaţie cu două stări. Acestora le putem atribui relaţii de valoare
(1 sau 0) binară corespunzătoare adevărului (1) sau falsităţii (0) propoziţiilor.
Algebra Boole operează pe mulţimea binară:
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
6
B = {x / x = 0,1} (0.1)
Tabelele de adevăr pentru aceste trei legi de compoziţie sunt (TABELUL 0.1):
x x y x x+y y x x+y
0 1 0 0 0 0 0 0
1 0 0 1 1 0 1 0
1 0 1 1 0 0
Complementarea 1 1 1 1 1 1
(negaţia) Disjuncţia Conjuncţia
Din tabelele de adevăr prezentate mai sus se constată că operaţia de disjuncţie este similară
operaţiei de adunare iar cea de conjuncţie cu cea de înmulţire.
O altă observaţie care trebuie făcută este faptul că toate relaţiile definite pe
mulţimea B sunt duale în sensul că se obţin relaţii echivalente dacă schimbăm operaţia de
disjuncţie cu cea de conjuncţie şi “1” în “0” (variabilele directe cu cele negate iar cele
negate cu variabilele directe).
În lipsa variabilei independente (n=0) se obţin două funcţii: F=1 şi F=0 – funcţiile
constante.
Pentru n=1 se obţin 4 funcţii : F=1, F=0, F=x şi F= x , unde x este variabila
independentă iar pentru n=2 se obţin 16 funcţii.
Prezentăm în continuare funcţiile logice combinaţionale cu două variabile şi acolo
unde este cazul, porţile logice care le implementează.
0 1 0
1 0 0 Denumirea circuitului logic:
1 1 1 ŞI (AND)
2ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
9
0 0 0 y
0 1 1
Denumirea circuitului logic:
1 0 1
SAU (OR)
1 1 1
3. şi 4. Negaţia F3 = x (non x )
F4 = y (non y )
0 1 0 1
1 0 1 0 Denumirea circuitului logic:
INVERSOR (INVERTER)
Tabelul de adevăr
y x F5
0 0 1
0 1 0
Circuitul logic nu are o denumire
1 0 1
consacrată
1 1 1
Tabelul de adevăr
y x F6
0 0 1
0 1 1 Circuitul logic nu are o denumire
1 0 0 consacrată
1 1 1
F7 = x ~ y
F7 = ( x → y) * ( y → x )
7. Echivalenţa
F7 = (x + y )* (x + y )
F7 = x ⊕ y
2ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
10
0 0 1
0 1 0
1 0 0 Denumirea circuitului logic:
1 1 1 COINCIDENŢĂ, COMPARATOR
F8 = x → y
8. Negarea implicaţiei directe F8 = x * y (x nu imlică y)
F8 = x + y
Tabelul de adevăr
y x F8
0 0 0
0 1 1 Denumirea circuitului logic:
1 0 0 INTERDICŢIE, INHIBARE
1 1 0
F9 = y → x
9. Negaţia imlicaţiei inverse F9 = x * y (y nu implică x)
F9 = x + y
Tabelul de adevăr
y x F9
0 0 0
0 1 0 Denumirea circuitului logic:
1 0 1 INTERDICŢIE, INHIBARE
1 1 0
F10 = x ~ y
F10 = ( x → y) * ( y → x )
10. Negarea echivalenţei (x nu este echivalent cu y)
F10 = (x + y )* (x + y )
F10 = x ⊕ y
(suma modulo 2)
2ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
11
F11 = x + y
11. Negarea disjuncţiei (x sau y negat)
F11 = x * y
0 0 1 y
0 1 0
1 0 0 Denumirea circuitului logic:
1 1 1 0 SAU-NU (NOR)
F12 = x * y
12. Negarea conjuncţiei (x şi y negat)
F12 = x + y
0 0 1 y
0 1 1
1 0 1 Denumirea circuitului logic:
1 1 0 ŞI-NU (NAND)
0 0 0
y
0 1 0
1 0 1 Denumirea circuitului logic:
1 1 1 IDENTITATE
TABELUL 0.6. Fiind dată o relaţie funcţională logică, numim formă normală
x y z f(x,y,z) disjunctivă a ei o relaţie echivalentă, care este o sumă de produse
elementare construite cu aceleaşi variabile ca şi relaţia dată iniţial,
0 0 0 0
fiecare produs conţinând toate variabilele posibile (ele sau
0 0 1 0
complementarele lor) iar formă normală conjunctivă, o relaţie
0 1 0 1 echivalentă care este un produs de sume elementare, construite
0 1 1 1 deasemenea cu aceleaşi variabile ca şi relaţia dată iniţial, fiecare
1 0 0 1 sumă conţinând toate variabilele posibile (ele sau complementarele
1 0 1 0 lor).
1 1 0 1 Exemplu : considerăm o funcţie logică de trei variabile : x, y şi z, a
1 1 1 0 cărui tabel de adevăr este TABELUL 0.6.
În tabel, valorile funcţiei f(x,y,z) sunt puse la întâmplare, deoarece exemplul se
referă la o funcţie oarecare. În această situaţie putem scrie forma normală disjunctivă a
funcţiei :
f ( x, y, z ) = x y z + x yz + x y z + xy z (0.14)
unde termenii funcţiei reprezintă acele combinaţii ale variabilelor de intrare pentru care
funcţia ia valoarea unu (pentru zero se scrie variabila negată iar pentru unu variabila
nenegată: x y z reprezintă combinaţia 010 iar f(010)=1). Termenii formei normale
disjunctive se mai numesc şi mintermi (o expresie minterm este o sumă de produse în care
fiecare produs conine toate variabilele în formă adevărată sau negată).
Pentru a obţine forma normală conjunctivă a funcţiei, bazându-ne pe principiul
dualităţii vom scrie forma normală disjunctivă pentru f ( xyz ) :
( )( )( )(
f ( xyz ) = x + y + z x + y + z x + y + z x + y + z ) (0.17)
Relaţia 0.17 reprezintă forma normală conjunctivă a funcţiei care se poate obţine
direct din tabelul de adevăr prin considerarea combinaţiilor variabilelor de intrare pentru
care funcţia ia valoarea zero, ca un produs de sume, fiecare sumă conţinând variabila
negată dacă aceasta are valoarea unu sau valoarea nenegată dacă aceasta are valoarea zero
în combinaţia respectivă. Termenii formei normală conjunctive se mai numesc şi
maxtermi (o expresie maxterm este o expresie produs de sume în care fiecare sumă
conţine toate variabilele sub formă adevărată sau negată).
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
14
Forma normală conjunctivă s-a obţinut din forma normală disjunctivă prin
aplicarea principiului dualităţii şi deci cele două forme de exprimare a funcţiilor logice
sunt echivalente.
Se observă că, FND conţine toţi termenii pentru care funcţia ia valoarea logică 1 iar
FNC conţine toţi termenii pentru care funcţia ia valoarea logică 0.
Există şi forma prescurtată de scriere a funcţiilor logice, forme numite : formă canonică
normală disjunctivă şi respectiv formă canonică normală conjunctivă.
Pentru exemplul prezentat mai sus forma canonică normală disjunctivă se scrie :
f 3 = P2 + P3 + P4 + P6 (0.18)
f 3 = S0 S1S5 S 7 (0.19)
Pi = Si şi Si = Pi (0.20)
În continuare vor fi prezentate câteva din teoremele aplicate funcţiilor logice scrise
sub forma canonică P, respectiv S, teoreme utile în analiza şi sinteza dispozitivelor
numerice.
Pi ⋅ Pj = 0, pentru i ≠ j (0.21)
Teorema 2. Suma logică a doi termeni S oarecare este întotdeauna egală cu unitatea, adică:
Si + S j = 1, pentru i ≠ j (0.22)
Se observă, fără dificultate, că fiecare termen P sau S din cei posibili ai unei funcţii logice
diferă de un alt termen prin existenţa a cel puţin a complementului unei variabile, şi cum
x ⋅ x = 0 , respectiv x + x = 1 (existenţa complementului, axioma 6, relaţia 0.7), rezultă
direct cele două teoreme enunţate anterior.
Teorema 3. O funcţie logică de n variabile poate fi reprezentată printr-o sumă logică unică
a termenilor P :
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
15
2 n −1
fn = ∑a P
i =0
i i (0.23)
Teorema 4. O funcţie logică de n variabile poate fi reprezentată printr-un produs logic unic
a termenilor S :
2 n −1
f n = ∏ (ai + Si ) (0.24)
i =0
În ultimile două relaţii coeficienţii ai se numesc numere caracteristice ale unei funcţii
logice şi reprezintă valoarea funcţiei logice respective pentru combinaţia i a variabilelor de
intrare. Pentru exemplul de mai sus, numerele caracteristice ale funcţiei logice sunt : a0 = 0,
a1 = 0, a2 = 1, a3 = 1, a4 = 1, a5 = 0, a6 = 1, a7 = 0.
2 n −1
fn= ∑a P
i =0
i i (0.25)
( )
2 n −1
f n = ∏ a i + Si (0.26)
i =0
Pentru a demonstra ultimile două teoreme se face apel la teorema lui De Morgan extinsă la
n variabile. De exemplu pentru a justifica relaţia 0.25 se scrie relaţia 0.24 sub forma :
2 n −1 2 n −1
f n = ∏ (ai + Si ) = ∑a S i i (0.27)
i =0 i =0
2 n −1
fn= ∑a P
i =0
i i (0.28)
Teorema 7. Suma logică a 2n termeni distincţi a unei funcţii logice de n variabile este egală
cu unu :
2 n −1
∑P =1
i =0
i (0.29)
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
16
Teorema 8. Produsul logic al 2n termeni distincţi a unei funcţii logice de n variabile este
egală cu zero :
2 n −1
∏S
i =0
i =0 (0.30)
2 n −1 2 n −1 2 n −1
1 = fn + fn = ∑a P + ∑a P = ∑P
i =0
i i
i =0
i i
i =0
i (0.31)
( )
2 n −1 2 n −1 2 n −1
0 = f n ⋅ f n = ∏ (ai + Si ) ⋅ ∏ a i + Si = ∏ Si (0.32)
i =0 i =0 i =0
deoarece ai ⋅ a i = 0 .
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
17
CAPITOLUL 1
1.1. Introducere
Circuitele logice combinaţionale numite şi circuite de comutare combinaţionale,
reprezintă circuitele logice cele mai simple, circuite logice de bază, denumite şi circuite
logice de ordinul zero care stau la baza tuturor celorlalte tipuri de ciruite logice.
Reprezentarea schematică a unui circuit logic combinaţional cu n+1 intrări şi m+1
ieşiri este reprezentat în figura 1.1.
Un circuit logic
I I combinaţional se
N x0 y0 E
T x1 y1 Ş
caracterizează prin aceea că
CIRCUIT LOGIC
R
… I starea ieşirilor, la un moment
Ă … COMBINAŢIONAL
R xn ym I R dat, depinde numai de starea
I intrărilor la acel moment de
timp. Acest lucru este descris
Fig. 1.1. Schema bloc a unui circuit logic combinaţional de relaţiile 1.1 în care starea
ieşirilor y0, y1, … ,ym
reprezintă m+1 funcţii de variabilele de intrare x0, x1, … , xn. Funcţiile care descriu astfel
de circuite reprezintă funcţii binare conform celor prezentate in capitolul 1.
X0
U1A
U5A 1 U2A U8A
3 1
1 2 2 3 1 2
X1 Y0
2
SN74S00/SO
SN74S04 SN74S00/SO SN74S04
X2
U6A U9A
1
1 2 3
Y1
U10A 2
1
X3
3 SN74S04 U3A SN74S86/SO
2 1
X4
U7A 3
SN74S86/SO 2
Y2
1 2
X5
SN74S00/SO
SN74S04
U4A
1 U11A
X6
3 1
2 3
X7
2
SN74S00/SO
SN74S86/SO
X8
Fiecare element logic din reţea corespunde unei porţi logice din circuitul de
comutare modelat. În reţelele logice nu se admite legarea ieşirilor elementelor logice decât
prin intermediul altor elemente logice. Atunci când circuitul de comutare modelat conţine
porţi care au proprietatea funcţiilor logice cablate, se reprezintă simbolic în reţea elementul
logic prin care sunt legate din punct de vedere funcţional ieşirile porţilor respective.
Semnalele aplicate la intrarile unui circuit logic, parcurg, în general, mai multe
porţi până se obţin semnalele de ieşire. Acest lucru se reflectă în reţea prin numărul
elementelor logice interpuse între intrările şi ieşirile reţelei. Maximumul numarului de
elemenete logice aflate între intrările şi ieşirile unei reţele logice dă numărul de niveluri
logice al reţelei. Numerotarea nivelurilor se face, în mod convenţional, de la ieşire spre
intrare (figura 1.3). În reţelele de comutare combinaţionale sunt admise legături inverse,
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
19
adică legarea ieşirii unui element logic la intrările elementelor logice precedente
acestuia (fig. 1.4), cu condiţia să fie respectată definiţia 1.1. Trebuie menţionat însă că
orice reţea cu elemente logice fară legături inverse este combinaţională, în schimb
numai anumite reţele cu legături inverse satisfac această condiţie. Reţelele cu elemente
logice fară legatură inversă se mai numesc grafuri booleene.
Analiza unui circuit trebuie să înceapă cu stabilirea tipului acestuia. Aşa cum s-a
arătat mai sus, dacă circuitul nu are legături inverse atunci el este un circuit logic
combinaţional. În cazul în care circuitul are legături inverse (figura 1.4.), atunci, pentru a
putea spune că acesta este un circuit logic combinaţional, va trebui să analizăm dependenţa
semnalelor de ieşire de cele de intrare şi să arătăm că ecuaţia 1.1. este respectată. Nu
intotdeauna este foarte uşor să detectăm existenţa unei legături inverse într-un circuit mai
ales dacă acesta este complicat. Din acest motiv se va prezenta în continuare o regulă prin
care se poate determina existenţa legăturilor inverse la scheme oricât de complicate.
X0
U12A U7A i
1
1 2
c 3
3 2
9
U1A a
2 74LS04/SO 74LS08
X1
1
3
1
X2
U5A d g
74LS02 1 U3A U4A
3 2 2
m
2
4 1 1
X3
3
7 3
11 Y0
74LS08
74LS02 74LS02
U9A k 74LS08
U6A 1
1
f 3
3 2
10
2
6
X6
74LS08
74LS08
4 3 2 1 0 NIVELUL
Figura 1.3. Reţea de comutare fără legătură inversă
Regula 1.1.
a. Elementele reţelei ale căror intrări fac toate parte din mulţimea intrărilor reţelei,
X={x1 x2,...,xn}, se numerotează, într-o ordine arbitrară, cu numerele 1 pina la k,
unde k este numărul elementelor ce îndeplinesc această condiţie.
b. Elementele reţelei ale căror intrări sunt fie intrări din mulţimea X, fie ieşiri ale
elementelor numerotate, la punctul a respectiv b, se numerotează în continuare
cu numerele k + 1 pâna la m, unde m - k este numărul elementelor ce
îndeplinesc această condiţie.
c. Dacă procedând în acest fel s-au putut numerota toate elementele reţelei, adică
m este numărul de elemente logice din reţea, rezultă că reţeaua nu are legături
inverse. În caz contrar în reţea există cel puţin o legatură inversă.
nu mai poate primi număr de ordine, deoarece unele din intrările sale provin de la
elemente nenumerotate care succed elementul dat, ceea ce înseamnă că există o legatură
inversă.
Referindu-ne la schema din figura 1.3, regula de ordonare se aplică astfel :
porţile 1 şi 2 se numerotează primele deoarece intrările acestor porţi fac parte din
mulţimea intrărilor circuitului x1şi x2 respectiv x4 şi x5. Urmează apoi elementul care se
numerotează cu 3 deoarece acesta are intrarea conectată la un element care a fost deja
numerotat (poarta numerotată cu 1), similar acestei situaţii este cea a elementului care a
fost numerotat cu 5, iar elementele numerotate cu 4, 6 şi 9 sunt conectate la elemente
deja numerotate şi intrări ale circuitului (poarta 1 şi intrarea x3, poarta 2 şi intrarea x6 şi,
respectiv poarta 7 şi intrarea x0). Elementele numerotate cu 7, 8, 10, 11 şi respectiv 12
pot şi ele numerotate succesiv, în această ordine, deoarece intrările acestor elemente
sunt conectate la elemente deja numerotate.
Pentru acest exemplu m = 12, toate elementele circuitului au putut fi numerotate
şi deci nu există nici o legătură inversă iar circuitul este combinaţional, adică starea
ieşirilor la un moment dat nu depinde decât de starea intrărilor la acel moment (relaţia
1.1).
Aplicind regula 1.1, definită mai sus, pentru reţeaua din figura 1.4 se constată că
nu este posibilă o ordonare parţială a tuturor elementelor reţelei şi prin urmare reţeaua
are o legatură inversă.
Pentru reţelele la care se poate face o ordonare parţială a elementelor, deci care
nu au legaturi inverse, se poate scrie expresia ieşirii fiecarui element logic, în ordinea
numerotării acestora, ca o funcţie de comutare de variabilele de intrare ale reţelei, de
unde rezultă că şi în expresia ieşirii intră numai variabilele de intrare ale reţelei. Funcţia
de comutare a unei asemenea reţele depinde deci numai de variabilele de intrare, prin
urmare reţeaua este combinaţională. Pentru reţeaua logică din figura 1.3 se obtine :
a = x1 + x2 (1.2)
b = x4 + x5 (1.3)
c = a = x1 + x2 (1.4)
d = a ⋅ x3 = ( x1 + x2 ) ⋅ x3 (1.5)
e = b = x4 + x5 (1.6)
(
f = c ⋅ x6 = x1 + x2 ⋅ x6 ) (1.7)
g = d + e = ( x1 + x2 ) ⋅ x3 + x4 + x5 = x1 ⋅ x3 + x2 ⋅ x3 + x4 + x5 (1.8)
h = e = x4 + x5 (1.9)
(
i = x0 ⋅ g = x0 ⋅ x1 ⋅ x3 + x2 ⋅ x3 + x4 + x5 ) (1.10)
( )
k = h ⋅ f = ( x4 + x5 ) ⋅ x1 + x2 ⋅ x6 (1.11)
( )
m = y0 = i + g = g ⋅ ( x0 + 1) = x1 ⋅ x3 + x2 ⋅ x3 + x4 + x5 ⋅ ( x0 + 1)
(1.12)
( ) ( )
n = y1 = g ⋅ k = x1 ⋅ x3 + x2 ⋅ x3 + x4 + x5 ⋅ ( x4 + x5 ) ⋅ x1 + x2 ⋅ x6
(1.13)
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
21
Din relaţia (1.12) rezultă că y0 iar din relaţia (1.13) rezultă că y1 depind numai de
variabilele de intrare ale reţelei şi deci reteaua din figura 1.3 este o reţea
combinaţională.
La reţelele care au legături inverse, expresia ieşirii se poate scrie numai dacă se
introduc variabile de intrare secundare datorate legăturilor inverse.
Pentru ca o astfel de reţea să fie combinaţională trebuie ca funcţiile de ieşire a
reţelei să depindă numai de variabilele de intrare principale adică să fie respectată
ecuaţia 1.1. şi deci variabilele de intrare secundare sunt neesenţiale. Demonstrarea
adestui lucru se poate face prin construirea tabelului de adevăr a funcţiei date, în care se
trec toate combinaţiile posibile ale variabilelor de intrare principale cât şi a celor
secundare. Dacă din acest tabel rezultă faptul că valorile funcţiei de ieşire a circuitului
depind numai de valorile variabilelor principale iar valoile variabilelor secundare nu au
nici o influenţă asupra ieşirii, atunci funcţia analizată este combinaţională.
Din cele arătate rezultă că oricarei reţele de comutare combinaţională cu legaturi
inverse îi corespunde cel puţin o reţea de comutare combinaţională fară legătură inversă.
U1A A U5D D
1 12
X0
3 11
2
1 13
4 Y0
X1
74LS08/SO 74LS08/SO
U2B 1 U6A
4
B 2
6 3 5
5
2 12
? Y1
X2
13
74LS08/SO 74LS260/SO
U3C C U4A E
9 1
8 3
10
3 2
?
74LS08/SO 74LS08/SO
Xa
y0 = x0 ⋅ x1 ⋅ x2 (1.14)
TABELUL 1.1.
x2 x1 x0 Xa A=x0x1 B=x1x2 C=x0x2 D=x0x1x2 E=x1x2Xa y1
0 0 0 0 0 0 0 0 0 1
0 0 1 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0 0 1
0 1 1 0 1 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1
1 0 1 0 0 0 0 0 0 1
1 1 0 0 0 1 1 0 0 0
1 1 1 0 1 1 1 1 0 0
x2 x1 x0 Xa A=x0x1 B=x1x2 C=x0x2 D=x0x1x2 E=x1x2Xa y1
0 0 0 1 0 0 0 0 0 1
0 0 1 1 0 0 0 0 0 1
0 1 0 1 0 0 0 0 0 1
0 1 1 1 1 0 0 0 0 0
1 0 0 1 0 0 0 0 0 1
1 0 1 1 0 0 0 0 0 1
1 1 0 1 0 1 1 0 1 0
1 1 1 1 1 1 1 1 1 0
y1 = x0 x1 + x1 x2 + x0 x2 + x0 x1 x2 = x0 x1 (1 + x2 ) + x1 x2 + x0 x2 =
(1.15)
= x0 x1 + x1 x2 + x0 x2
7432
U1A
1
x3 3 c
2
x4
7408
Pentru analiza unui arbore boolean se poate folosi o metodă formală care constă
în găsirea unei acoperiri a mulţimii n-uplelor funcţiei logice pentru care aceasta ia
valoarea unu.
Se va exemplifica această metodă pe circuitul din figura 1.5. construindu-se
tabelul 1.2. Tabelul construit va conţine toate variabilele principale ale funcţiei (x0, x1,
x2, x3, x4,), variabilele secundare (a, b, c) şi ieşirea circuitului (y0).
TABELUL 1.2.
x4 x3 x2 x1 x0 a b c y0 Observaţii
1 1
2 1 1 y0 = a b
x 1 1
3 a = x0 + x1
1 x 1
1 x 1 x
x x 1 1
4 b = x2 + c
1 1 x x
x 1 x 1
x x 1 x 1
1 1 x x 1
5 c = x3 x4
x x 1 1 x
1 1 x 1 x
Tabelul 1.2 se completează astfel: pe rândul unu se trece cifra unu pe coloana y0
simbolizându-se asfel faptul că se vor determina combinaţiile variabilelor de intrare
pentru care funcţia ia valoarea unu. Pe rândul doi se trec valorile variabilelor de pe
nivelul zero care determină valoarea unu la ieşire. Acestea vor fi: unu pentru variabila
secundară a şi unu pentru varibila secundară b. Deoarece numai această combinaţie a
variabilelor a şi b conduc la valoarea unu a funcţiei de ieşire y0, se trece la rândul trei
unde se vor determina combinaţiile variabilelor principale pentru care variabila
secundară a ia valoarea unu. Aşa cum se vede, sunt posibile 2 combinaţii pentru
variabilele principale x0 şi x1: variabila x0 ia valoarea unu şi atunci x1 poate avea orice
valoare (se notează cu x – indiferent) sau, cind x1 ia valoarea unu şi atunci x0 poate avea
orice valoare (x – indiferent). Se trece acum la rândul patru care determină combinaţile
variabilelor care duc la variabila b egala cu unu. Sunt doua posibilităţi: x2 egal cu unu şi
variabila c poate avea în acest caz orice valoare sau c egal cu unu şi atunci x2 poate avea
orice valoare. Aceste două posibilităţi se aplică celor două combinaţii determinate la
rândul trei şi rezultă patru combinaţii posibile.
La rândul cinci se explicitează variabila c pentru care nu există decât doua
posibilităţi: variabila c poate lua orice valoare şi atunci şi x3 şi x4 pot lua orice valoare
sau variabila c ia valoarea unu li atunci x3 = x4 = 1.
În momentul in care au fost explicitate toate variabilele secundare, completarea
tabelului a fost terminată şi sa găsit o acoperire a funcţiei pentru care aceasta ia valoarea
unu. Funcţia poate fi scrisă ca o sumă de produse a combinaţiilor găsite, din care se
elimină variabilele principale notate cu x (care pot avea orice valoare) şi se notează cu
variabila directă variabila principală egală cu unu şi cu variabila negată cea egală cu
zero în tabel. Pentru exemplul dat se obţine (forma normală disjunctivă):
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
24
y0 = x2 x0 + x4 x3 x0 + x2 x1 + x4 x3 x1 (1.16)
U7A
1
X4
3
c
2
X5
14093
TABELUL 1.3.
x5 x4 x3 x2 x1 x0 a b c d y0 Observaţii
1 0
2 1 1 y0 = cd
0 x 1
3 c = x4 x5
x 0 1
0 x 1 x
x 0 1 x
4 d =a+b
0 x x 1
x 0 x 1
0 x x x 1
x 0 x x 1 b = x3 x2
5
0 x 1 1 x
x 0 1 1 x
0 x x x 1 1
x 0 x x 1 1 a = x0 x1
6
0 x 1 1 x x
x 0 1 1 x x
( )( )( )(
y0 = x5 + x1 + x0 x4 + x1 + x0 x5 + x3 + x2 x4 + x3 + x2 ) (1.18)
y0 = ( x0 x1 + x2 x3 )x4 x5 (1.19)
PROGRAMUL 1.1.
Program logic1;
{se verifica daca ecuatia determinata pentru arbore boolean este corecta}
var
y1,y2,x0,x1,x2,x3,x4,x5:boolean;
begin
for x5:= false to true do
for x4:= false to true do
for x3:= false to true do
for x2:= false to true do
for x1:= false to true do
for x0:= false to true do
begin
{ecuatia 1.19}
y1:=not (((x0 and x1) or (x2 and x3)) and ( not (x4 and x5)));
{ecuatia 1.18}
y2:=(x5 or not x1 or not x0) and (x4 or not x1 or not x0) and (x5 or not x3 or not x2) and (x4 or not
x3 or not x2);
if y1<>y2 then
begin
writeln('Cele doua ecuatii nu sunt egale! Apasati ENTER');
readln;
halt(1);
end;
end;
writeln('Cele doua ecuatii sunt egale. Apasati ENTER');
readln;
end.
Vom exemplifica acest lucru pentru graful boolean din figura 1.7. care va fi
analizat în tabelul 1.4.
U3A
1
X0
3
b
a' 2
U2A
U1A 2
2 1
X1
1
a 3
Y0
x2'
3
X2
a'' U4A
1
x2'' 2 12
c
13
X3
TABELUL 1.4.
x3 x2 x'2 x"2 x1 x0 a a' a" b c y0 Observaţii
1 1
1 x
2 y0 = b + c
x 1
x x x 1
3 c = a” x2” x3
1 1 1 x
x x 1 1 x
4 b = x0 a’
1 1 x x 1
x x 1 1
5 a = a’ = a”
1 1 x 1
x x x 1 1
x 1 x x 1
6 a = x1 + x2’
1 x 1 1 x
1 1 1 x x
x x 1 1
x 1 x 1 x2 = x2’ =
7
1 1 1 x x2”
1 1 x x
Până la rândul cinci completarea tabelului se face în modul discutat deja mai sus.
În rândul cinci trebuie alese valorile pentru care a = a’ = a”. Sunt două situaţii: când a’ =
1 şi a” = x şi când a’ = x şi a” = 1 adică sunt posibile urmatoarele cazuri a’ = 1şi a” = 0
sau a’ = 1 şi a” = 1, respectiv a’ = 0 şi a” = 1 şi a’ = 1 şi a” = 1 (deoarece simbolul x
semnifică „orice valoare” adică zero sau unu). Evident, singura soluţie posibila este a =
a’ = a” = 1. Acelaşi raţionament este făcut pe rândul şapte când pentru x2’ = x şi x2” = x
rezultă x2 = x în celelalte situaţii, ca şi pe rândul cinci, soluţia este x2 = x2’ = x2” = 0.
Putem acum să scriem acum forma normală disjunctivă a funcţiei de ieşire:
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
27
y0 = x1 x0 + x2 x0 + x3 x2 x1 + x3 x2 = x1 x0 + x2 x0 + x3 x2 ( x1 + 1) =
= x1 x0 + x2 x0 + x3 x2 (1.20)
f 3 = S0 S1S 4 S6 =
( )( )(
= ( x2 + x1 + x0 ) x2 + x1 + x 0 x 2 + x1 + x0 x 2 + x1 + x0 ) (1.22)
(1.23)
y0 = x 2 x1 x 0 ⋅ x 2 x1 x0 ⋅ x2 x1 x0 ⋅ x2 x1 x0
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
28
x2 x1 x0 x2 x1 x0
1 2
1 2
1 2
x2
x2 x1 x0
x1 1
2 9
x0 8
P2
x2 x1 x0
1
2 9 2
8
P3 3
1
f3 = y0
4
5
x2 x1 x0
1
2 9
8
P5
x2 x1 x0
1
2 9
8
P7
Ecuaţie, care, aşa cum se vede, poate fi realizată fizic numai cu porţi ŞI-NU.
Pentru ca întreaga realizare fizică să conţină numai porţi logice ŞI-NU, inversoarele
folosite în figura 1.8. pentru obţinerea variabilelor de intrare negate, se vor înlocui cu
porţi ŞI-NU cu intrările scurtcircuitate. Conform tabelului de adevăr al acestei funcţii,
dacă pe toate intrările porţii se aplică aceeaşi valoare atunci se obţine un circuit
inversor.
Rezultatul acestor transformări este prezentat în figura 1.9.
Aşa cum rezultă din figura 1.9. pentru implementarea fizică a unei funcţii logice
combinaţionale, pe baza funcţiilor canonice, este necesar un număr relativ ridicat de
elemente logice. Din acest motiv este important să se găsească procedee de simplificare
a ecuaţiilor ce descriu funcţiile de ieşire ale circuitelor logice combinaţionale în vederea
reducerii numărului de porţi logice.
x2 x1 x0 x2 x1 x0
2
4
3
2
4
3
2
4
3
x2
x2 x1 x0
x1 1
2 12
x0 13
P2
x2 x1 x0
1
2 12 1
13
P3 2
6
f3 = y0
4
5
x2 x1 x0
1
2 12
13
P5
x2 x1 x0
1
2 12
13
P7
y0 = x2 x0 ( x0 + x1 ) + x 2 x1 x0 + x 2 x1 x0 (1.24)
y0 = x2 x0 + x 2 x1 x0 + x 2 x1 x0 (1.25)
(
y0 = x2 x0 + x 2 x0 x1 + x1 ) (1.26)
( )
y0 = x2 x0 + x 2 x0 = x0 x2 + x 2 = x 0 (1.27)
Acest exemplu simplu indică faptul că prelucrarea unei funcţii poate duce la
simplificarea considerabilă a acesteia. În activitatea de simplificare a funcţiei logice unii
termeni pot fi multiplicaţi, bazându-ne pe teorema idempotenţei, în scopul grupării
convenabile a acestora şi reducerea unor variabile.
x + xy = x
xy + x y = x (1.28)
x + xy = x + y
TABELUL 1.6.
x3 x2 x1 x0 y0 x3 x2 x1 x0 y0 x3 x2 x1 x0 y0 x3 x2 x1 x0 y0
0 0 0 0 0 f(0)=0 4 0 1 0 0 f(4)=1 8 1 0 0 0 f(8)=0 12 1 1 0 0 f(12)=1
1 0 0 0 1 f(1)=1 5 0 1 0 1 f(5)=0 9 1 0 0 1 f(9)=0 13 1 1 0 1 f(13)=0
2 0 0 1 0 f(2)=1 6 0 1 1 0 f(6)=1 10 1 0 1 0 f(10)=1 14 1 1 1 0 f(14)=1
3 0 0 1 1 f(3)=0 7 0 1 1 1 f(7)=0 11 1 0 1 1 f(11)=1 15 1 1 1 1 f(15)=0
x1
x1x0
00 01 11 10
x3x2
00 f(0) f(1) f(3) f(2) x0
01 f(4) f(5) f(7) f(6) x2 0 1
x3 11 f(12) f(13) f(15) f(14)
10 f(8) f(9) f(11) f(10) x3x2x1
000 f(0) f(1)
x0
a. 001 f(2) f(3)
011 f(6) f(7)
x3x2 010 f(4) f(5)
00 01 11 10
x1x0 110 f(12) f(13)
00 f(0) f(4) f(12) f(8) 111 f(14) f(15)
01 f(1) f(5) f(13) f(9) 101 f(10) f(11)
11 f(3) f(7) f(15) f(11) 100 f(8) f(9)
10 f(2) f(6) f(14) f(10) c.
b.
x1x0
00 01 11 10
x3x2
00 0 0 1 1 3 0 2 1
01 4 1 5 0 7 0 6 1
11 121 130 150 141
10 8 0 9 0 111 101
d.
Figura 1.10. a. b. c. Posibilităţi de realizare a tabelului Karnaugh pentru o
funcţie de patru variabile.
d. Tabelul Karnaugh pentru funcţia descrisă de ecuaţia (1.29).
Codul Gray (codul binar reflectat), cod ce poartă numele celui care l-a imaginat,
a fost construit pe principiul ca două secvenţe vecine să difere într-o singură poziţie
binară. Secvenţele codului Gray pot fi deduse din cele ale codului binar pe baza
următoarelor relaţii:
g0 = b0 ⊕ b1,
g1 = b1 ⊕ b2,
(1.30)
g2 = b2 ⊕ b3,
g3 = b3 ,
unde g0, g1, g2, g3, sunt poziţiile unei secvenţe Gray scrise de la dreapta spre stânga, iar
b0, b1, b2, b3, sunt poziţiile codului binar scrise în ordinea ponderilor.
Pentru exemplificare să considerăm cifra 6 scrisă în cod binar:
b3 b2 b1 b0
0 1 1 0
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
32
Pe baza relaţiilor (1.30) vom deduce succesiv valorile cifrelor binare din
secvenţa de cod Gray:
g0 = b0 ⊕ b1 = 0 ⊕ 1 = 1,
g1 = b1 ⊕ b2 = 1 ⊕ 1 = 0,
g2 = b2 ⊕ b3 = 1 ⊕ 0 = 1,
g3 = b3 = 0.
g3 g2 g1 g0
0 1 0 1
b0 = g0 ⊕ g1 ⊕ g2 ⊕ g3,
b1 = g1 ⊕ g2 ⊕ g3,
(1.31)
b2 = g2 ⊕ g3,
b3 = g3,
g1 g2 g1 g0
0 1 0 1
b0 = g0 ⊕ g1 ⊕ g2 ⊕ g3 = 1 ⊕ 0 ⊕ 1 ⊕ 0 = 0,
b1 = g1 ⊕ g2 ⊕ g3 = 0 ⊕ 1 ⊕ 0 = 1,
b2 = g2 ⊕ g3 = 1 ⊕ 0 = 1,
b3 = g3 = 0.
b3 b2 b1 b0
0 1 1 0
( )
x3 x2 x1 x 0 + x3 x2 x1 x 0 = x 3 + x3 x2 x1 x 0 = x2 x1 x 0 (1.32)
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
34
x 3 x 2 x1 x 0 + x 3 x2 x1 x 0 + x3 x2 x1 x 0 + x3 x 2 x1 x 0 =
( )
= x 3 x 2 + x 3 x2 + x3 x2 + x3 x 2 x1 x 0 = (1.33)
= [x (x
3 2 ) ( )]
+ x2 + x3 x 2 + x2 x1 x 0 = x1 x 0
x1 x1 x1 x1
1 1
1 x2
x2 x2 x2
1 1 1 1
x3 x3 x3
x3 1
x0 x0 x0 x0
Figura 1.12. a.
x1 x1 x1 x1
1 1 1 1 1 1 1
1 1 1
x2 x x2 x2 x2
3 1
x3 x3 x3 1
1 1 1 1
x0 x0 x0 x0
Figura 1.12. b.
x1 x1 x1
1 1 1 1 1 1
1 1 x2
x2 x2
1 1 1 1 1 1
x3 x3 1 1 1 1 x3 1 1 1 1
1 1
x0 x0 x0
Figura 1.12. c.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
35
x1 x1 x1 x1
1 1 1
1 1 1 1 x2 1 1 1
x2 x2 x2
1 1 1 1
x3 x3 x3 1
x3 1
x0 x0 x0 x0
Figura 1.12. d.
x 3 x 2 x1 x0
x1x0
00 01 11 10 x1 x 0
x3x2
x2 x1 x 0 00 0 1 0 1*
01 1* 0 0 1
11 1 0 0 1
10 0 0 1* 1
x3 x 2 x1
Figura 1.13. Diagrama Karnaugh pentru funcţia dată de ecuaţia 1.28
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
36
Nu toţi implicanţii primi ai unei funcţii sunt necesari pentru definirea acesteia.
Unii dintre implicanţii primi pot fi termeni redundanţi la care se poate renunţa, obţinând
astfel o formă mai simplă a funcţiei. Prin urmare, se pune problema alegerii unui număr
minim de implicanţi primi din mulţimea implicanţilor primi ai unei funcţii booleene
care să includă însă toţi termenii canonici ai funcţiei. Problema alegerii acestui set de
implicanţi este o problemă de acoperire cu cost minim. Expresia unei funcţii booleene în
care intră un număr minim din implicanţii săi primi se numeşte forma minimă
disjunctivă a funcţiei. Dacă un termen canonic al funcţiei este inclus într-un singur
implicant prim, din mulţimea de implicanţi primi ai funcţiei, acela devine implicant
prim esenţial şi trebuie să apară obligatoriu în forma minimă disjunctiva a funcţiei.
Pentru găsirea formei minime disjunctive trebuie deci determinant în primul rând
implicanţii primi esentiali. Pentru aceasta se marchează pe diagramă într-un mod
special, de exemplu cu asterisc, acele celule notate cu unu care sunt incluse într-un
singur implicant prim (figura 1.13). Trebuie menţionat însă faptul că în figura 1.13. nu
au fost marcaţi toţi implicanţii primi ai funcţiei, dar pentru claritate s-a renunţat la
marcarea unei părţi ai acestora. Implicanţii primi care conţin compartimente marcate cu
asterisc devin esenţiali. Compartimentele însemnate cu unu, rămase neacoperite de către
implicanţii primi esenţiali, se cauta să se acopere folosind un număr cât mai mic din
implicanţii funcţiei care au mai rămas. Din cele prezentate mai sus rezultă că forma
minimă disjunctivă a funcţiei dată de relaţia (1.29) este:
f 4 = x1 x 0 + x2 x1 x 0 + x3 x 2 x1 + x 3 x 2 x1 x0 (1.34)
Pentru a vedea care din formele: normală disjunctivă sau normală conjunctivă
oferă forma de cost minim, trebuie să găsim şi forma minimizată normală conjunctivă.
0 metodă simplă de determinare a formei minime conjunctive este aceea a
căutarii formei minime disjunctive pentru negata funcţiei date şi negarea acesteia.
Pentru exemplificare se ia tot funcţia dată prin diagrama Karnaugh din figura 1.13.
Negata acestei funcţii este dată prin compartimentele marcate cu zero. Aplicând metoda
de minimizare prezentată, pentru functia f 4 , unde f 4 este dată de relaţia (1.29), se
obţine pentru această formă, relaţia (1.35), determinată cu ajutorul diagramei din figura
1.14.
x 2 x1 x1
x1x0 x 3 x1 x0
00 01 11 10
x3x2
00 *0 1 1 *0
01 1 *0
0 1
11 1 0 0 1
10 0 *0 1 1
x2 x0
x3 x1 x0
Figura 1.14. Determinarea formei minime normal conjunctive
f 4 = x 2 x1 x 0 + x 3 x1 x0 + x3 x1 x0 + x2 x0 (1.35)
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
37
( )( )(
f 4 = f 4 = ( x2 + x1 + x0 ) x3 + x1 + x 0 x 3 + x1 + x 0 x 2 + x 0 ) (1.36)
1) se construieşte diagrama ;
2) se caută implicanţii primi ;
3) se determină implicanţii primi esenţiali ;
4) termenii canonici care nu sunt incluşi în implicanţii primi esenţiali se
acoperă cu un număr cât mai mic de implicanţi primi ;
5) forma minimă normală disjunctivă sau conjunctivă va conţine toţi
implicanţii primi esenţiali şi implicanţii primi neesenţiali ce conţin
termeni canonici ce nu sunt incluşi în implicanţii primi esenţiali.
Aşa cum s-a arătat, metoda diagramelor Karnaugh, deşi este o metodă foarte
simplă şi eficientă de minimizare a funcţiilor logice, ea nu poate fi aplicată decât
funcţiilor cu un număr redus de variabile (cel mult şapte-opt).
Pentru minimizarea funcţiilor cu un număr mai mare de variabile se recurge la
alte metode, algebrice sau tabelare, una dintre acestea fiind descrisă în paragraful
următor.
Algoritmul 1.1.
Fiecare termen canonic este reprezentat apoi sub forma unui număr binar, prin
n uplul de zerouri şi unităţi corespondente termenului respectiv.
b) Termenii canonici astfel înscrişi se împart în grupe, în funcţie de ponderea
acestora, adică de numărul cifrelor unu cuprinse în upul respectiv.
c) Grupele de termeni canonici sunt aranjate pe o coloană, în ordinea crescătoare
a ponderilor.
d) Se compară fiecare termen al unei grupe cu toţi termenii grupei de pondere
mai mare cu o unitate. Dacă numerele binare respective sunt adiacente, cei doi termeni
se pot asocia formând un cub 1 dimensional, notat printr un număr binar care are pe
poziţia prin care cei doi termeni componenţi diferă, un simbol « x », ceea ce semnfică
faptul că variabila corespondentă acelei poziţii lipşeşte; cei doi termeni care au format
subcubul rezultat se înscrie pe o nouă coloană. Toţi termenii normali (subcuburile 1
dimenionale) rezultaţi în urma comparării a două grupe din coloana temenilor canonici
formează o grupă în coloana subcuburilor 1 dimensionale. Prin urmare, coloana
cuburilor 1 dimensionale va conţine în cazul general cu o grupă mai puţin decât
coloana termenilor canonici (a cuburilor 0 dimensionale).
e) Se ia n=1. Se compară fiecare termen a unei grupe din coloana sucuburilor 1
dimensionale cu toţi termenii grupei cu pondere mai mare cu o unitate. Pentru ca doi
asemenea termeni să se poată asocia formând un subcub (n+1) dimensional trebuie ca
în ambii termenii simbolurile « x » să fie pe aceleaşi poziţii. Doi termeni care
îndeplinesc această condiţie şi sunt adiacenţi se asociază formând un subcub
(n+1) dimensional care se notează cu un nuămăr binar în care apare încă un « x » pe
poziţia prin care cei doi termeni diferă. Termenii care formează acest subcub se bifează,
iar subcubul (n+1) dimensional se înscrie pe o nouă coloană, coloana subcuburilor
(n+1) dimensional, care în cazul general are o grupă ai puţin decât cloana subcuburilor
n dimensionale. Dacă se obţine de mai multe ori un anumit termen acesta se consideră
o singură dată.
f) Se măreşte n cu o unitate şi se repetă punctul e) până când subcuburile ultimei
coloane nu se mai pot asocia în scoul formării unui subcub de dimensiune superioară.
Termenii rămaşi nebifaţi în coloanele rezultate formează grupul implicanţiilor
primi ai funcţiei considerate.
Pentru exemplificare vom considera funcţia logică combinaţională a cărei
ecuaţie sub forma canonică normală disjunctivă este prezentată în (1.37) :
numai printr-o cifră binară. În acest tabel s-au notat între paranteze termenii care se
repetă.
f 5 = x 3 x 2 x1 x0 + x3 x 2 x1 x 0 + x 4 x 3 x2 x1 + x4 x 3 x 2 x0 + x 4 x2 x1 x0 +
+ x 4 x 2 x1 + x 4 x 3 x 0 + x 3 x1 x 0 + x 4 x3 x0 + x4 x1 x 0 + x4 x 2 x1 + (1.38)
x4 x3 x 0 + x3 x1 x0 + x4 x3 x1 + x4 x3 x2
Pentru a găsi forma minimă disjunctivă a unei funcţii trebuie aleşi numai acei
împlicanţii primi care includ toţi termenii canonici ai funcţiei şi conduc la o formă a
funcţiei realizată cu cost minim. Implicanţii primi care respectă această condiţie
formează acoperirea cu cost minim. Pentru găsirea acoperirii cu cost minim trebuie
căutate toate acoperirile posibile pentru funcţia dată din care se alege acoperirea care
îndeplineşte condiţia de cost minim faţă de un anumit criteriu de cost.
De obicei, acoperirea minimală, adică acoperirea cu număr minim de elemente,
satisface condiţia de cost.
Algoritmul de obţinere a acopperiri cu cost minim, plecând de la mulţimea
implicanţilor primi, obţinuţi în etapa anterioară, este următorul:
Algoritmul 1.2.
TABELUL 1.10.
Implicanţi Termeni canonici
primi Indici Observaţii
0 1 2 4 6 7 8 9 11 13 15 17 18 19 22 24 26 27 28 30 31
x4x3x2x1x0
x0001 1,17 * *
x1000 8,24 * *
0011x 6,7 **
100x1 17,19 * *
0x111 7,15 * *
0 x 0 0 x 0,1,8,9 * * **
0 0 x x 0 0,2,4,6 * * * * E
x 0 x 1 0 2,6,18,22 * * * *
0 1 x x 1 9,11,13,15 * * * * E
1 x x 1 0 18,22,26,30 * * * *
1 x 0 1 x 18,26,19,27 * * * *
1 1 x x 0 24,26,28,30 * * * *
x 1 x 1 1 11,15,27,31 * * * *
1 1 x 1 x 26,27,30,31 * * * *
1 1 1 x x 28,27,30,31 * * * *
Conform tabelului 1.10., pentru funcţia a cărei ecuaţie este dată relaţia (1.27)
există doi implicanţi primi esenţiali. Aceşti termeni vor trebui să apară obligatoriu în
expresia minimă normală disjunctivă a funcţiei.
Căutăm acum o acoperire minimă a celorlalţi termeni canonici ai funcţiei şi
construim tabelul 1.11. conform regulii prezentate la punctul b al algoritmului 1.2.
TABELUL 1.11.
Implicanţi Termeni canonici Observaţii
primi Indici
1 7 8 17 18 19 22 24 26 27 28 30 31
x4x3x2x1x0
x0001 1,17 * * A
x1000 8,24 * * A
0011x 6,7 * A
100x1 17,19 * *
0x111 7,15 *
0 x 0 0 x 0,1,8,9 * *
x 0 x 1 0 2,6,18,22 * * A
1 x x 1 0 18,22,26,30 * * * *
1 x 0 1 x 18,26,19,27 * * * * A
1 1 x x 0 24,26,28,30 * * * *
x 1 x 1 1 11,15,27,31 * *
1 1 x 1 x 26,27,30,31 * * * *
1 1 1 x x 28,27,30,31 * * * * A
f 5 = x 4 x 3 x 0 + x 4 x3 x0 + x 3 x 2 x1 x0 + x3 x 2 x1 x 0 + x 4 x 3 x2 x1 +
(1.39)
+ x 3 x1 x 0 + x4 x 2 x1 + x4 x3 x2
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
42
TABELUL 1.12
nr. nr. nr. nr.
x x x x y x x x x y x x x x y x x x x y
crt. 3 2 1 0 0 crt. 3 2 1 0 0 crt. 3 2 1 0 0 crt. 3 2 1 0 0
0 0 0 0 0 1 4 0 1 0 0 1 8 1 0 0 0 u 12 1 1 0 0 1
1 0 0 0 1 1 5 0 1 0 1 u 9 1 0 0 1 u 13 1 1 0 1 0
2 0 0 1 0 1 6 0 1 1 0 1 10 1 0 1 0 1 14 1 1 1 0 1
3 0 0 1 1 u 7 0 1 1 1 u 11 1 0 1 1 1 15 1 1 1 1 0
f 4 = x 3 x 2 x1 x 0 + x 3 x 2 x1 x0 + x 3 x 2 x1 x 0 + x 3 x2 x1 x 0 + x 3 x2 x1 x 0 +
(1.40a)
+ x3 x 2 x1 x 0 + x 3 x 2 x1 x 0 + x3 x2 x1 x 0 + x3 x2 x1 x 0
x 3 x 2 x1 x0 = x 3 x2 x1 x0 = x 3 x2 x1 x0 = x3 x 2 x1 x 0 = x3 x 2 x1 x0 = u (1.40b)
unde relaţia (1.40a) reprezintă forma normală disjunctivă a părţii definite din funcţie, iar
relaţia (1.40b) precizează că restul combinaţiilor de valori ale variabulelor de intrare,
corespunzătoare părţii nedefinite din funcţie, nu apar în funcţionare, prin urmare pot fi
considerate combinaţii indiferente.
Pentru minimizarea acestei funcţii se întocmeşte tabelul din figura 1.15.
x1x0 x3
00 01 11 10
x3x2
x1 x 0 00 1 1 u 1
01 1 u u 1 x1 x 0
11 1 0 0 1
10 u u 1 1
x3 x 2
Figura 1.15. Diagrama Karnaugh pentru funcţia (1.40).
Forma normală disjunctivă minimă a funcţiei incomplet definite (1.40) este dată
în ecuaţia (1.41).
f 4 = x 3 + x1 x 0 + x1 x 0 + x3 x 2 (1.41)
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
43
Având în vedere faptul că funcţia este incomplet definită se poate găsi şi o altă
acoperire a funcţiei (figura 1.16).
x1x0
00 01 11 10 x1 x 0
x3x2
00 1 1 u 1
x 3 x1 01 1 u u 1
11 1 0 0 1
10 u u 1 1
x2 x1 x 0 x3 x 2 x1
Figura 1.16. Diagrama Karnaugh pentru funcţia (1.40).
f 4 = x1 x 0 + x 3 x1 + x2 x1 x 0 + x3 x 2 x1 (1.42)
Circuitele logice combinaţionale cu n intrări (x0, x1, … , xn) şi m ieşiri (y0, y1, …
,ym) pot fi sintetizate considerând fiecare ieşire separat, ca o funcţie independentă de n
variabile (graf boolean). Pe baza formei canonice, sau a tabelului de adevăr, aplicînd una
dintre metodele de sinteză, se obţine câte o realizarea fizică pentru fiecare ieşire, în final
acestea fiind puse împreună. Acest lucru se face de obicei atunci când metoda de sinteză
nu impune minimizarea funcţiilor. Astfel de metode vor fi discutate aici în capitolele
următoare.
În cazul în care sinteza se face cu ajutorul porţilor logice, este necesar să se obţină
forma minimă a unui sistem de funcţii booleene de forma (1.1).
Formele minime pentru un sistem de funcţii booleene sunt acele expresii
booleene disjunctive sau conjuctive în care apar un numar minim de termeni, respectiv
factori normali diferiţi, având un numar minim de literale (variabile de intrare). Pentru
obţinerea formelor minime ale unui sistem de funcţii booleene dat, se procedează la
minimizarea corelată a funcţiilor acestuia, adică la determinarea setului minim de
implicanţi primi care acoperă toţi termenii canonici ai tuturor funcţiilor sistemului.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
44
Una dintre metodele de minimizare corelată a mai multor funcţii booleene, f1, f2,
… fn se bazează pe determinarea implicanţilor primi ai funcţiilor f1, f2, … fn şi ai
funcţiilor produs f1f2, f1f3, …, fn-1fn, f1f2f3, f1f3f4, fn-2fn-1fn, …, f1f2f3·…· fn. Având acest
set de implicanţi primi, se calculează acoperirile posibile pentru fiecare dintre funcţii iar
apoi se alege cea mai avantajoasă combinaţie de acoperiri din punct de vedere al
costului, care reprezintă acoperirea minimala a sistemului.
Pentru obţinerea acoperirii minimale după această metodă se parcurg
urmatoarele etape:
Regula 1.2.
f 30 = ∑ (1,5,6,7 )
f 31 = ∑ (1,4,5,6) (1.43)
f 32 = ∑ (0,2,5,6,7 )
unde sub semnul sumei booleene s-au dat indicii termenilor canonici prezenţi în
forma canonică disjunctivă a funcţiei.
În prima etapă se calculează funcţiile produs:
f 30 ⋅ f 31 = ∑ (1,5,6 )
f 30 ⋅ f 32 = ∑ (5,6,7 )
(1.44)
f 31 ⋅ f 32 = ∑ (5,6)
f 30 ⋅ f 31 ⋅ f 32 = ∑ (5,6)
Functiile (1.44) conţin termenii canonici comuni pentru cele două, respectiv trei
funcţii inmulţite logic.
f 30 f 31 f 32
f 30 ⋅ f 31 f 30 ⋅ f 32 f 31 ⋅ f 32 =
= f 30 ⋅ f 31 ⋅ f 32
TABELUL 1.13.
Implicanţi primi Implicanţi primi
Funcţia Funcţia
Indici Expresie Notaţie Indici Expresie Notaţie
1 2 3 4 1 2 3 4
1,5 x1 x0 - 1,5 x1 x0 e
0
f 30 ⋅ f 31
f 3 5,7 x2 x0 - 6 x2 x1 x 0 -
7,6 x2 x1 - 5,7 x2 x0 d
f 30 ⋅ f32
1,5 x1 x0 i 7,6 x2 x1 c
f 31
4,6 x2 x 0 h 5 x2 x1 x0 b
5,7 x2 x0 - f ⋅f =
3
1
3
2
f 3
2
2,6 x1 x 0 g f 30 ⋅ f 31 ⋅ f 32 6 x2 x1 x 0 a
0,2 x2 x0 f
TABELUL 1.14.
Implicanţi primi Termeni canonici
1
Funcţia f
3 Funcţia f 32 Funcţia f 33
Notaţie Indici Funcţii
1 5 6 7 1 4 5 6 0 2 5 6 7
a 6 f 30 , f 31 , f 32 * * *
b 5 f 30 , f 31 , f 32 * * *
c 7,6 f ,f3
0
3
2
* * * *
d 5,7 f 30 , f 32 * * * *
e 1,5 f 30 , f 31 * * * *
f 0,2 f 32 * *
g 2,6 f 3
2
* *
h 4,6 f 3
1
* *
i 1,5 f 3
1
* *
( )
A f 30 = ec + eda = A1 + A2 (1.45)
De asemenea:
( )
A f 31 = hi + eh = B1 + B2 (1.46)
iar:
( )
A f 32 = dfg + cbf + adf + abcf = C1 + C2 + C3 + C4 (1.47)
Prin urmare, pentru funcţia f 30 s-au găsit două acoperiri, pentru f 31 de asemenea
două acoperiri, iar pentru f 32 patru acoperiri. Pentru a forma o acoperire a
sistemului se ia câte una din acoperirile fiecarei funcţii. Pentru a găsi acoperirea
minimală a sistemului se continuă cu punctul urmator.
TABELUL 1.15.
Elementele Numărul Variabile de
Nr. crt. Acoperire
acoperirii elementelor intrare
1 A1B1C1 echidfg 7 14
2 A1B1C2 echicbf 7 15
3 A1B1C3 echiadf 7 15
4 A1B1C4 echiabcf 8 18
5 A1B2C1 echdfg 6 12
6 A1B2C2 echcbf 6 13
7 A1B2C3 echadf 6 13
8 A1B2C4 echabf 6 14
9 A2B1C1 edahifg 7 15
10 A2B1C2 edahicbf 8 18
11 A2B1C3 edahif 6 13
12 A2B1C4 edahibcf 8 18
13 A2B2C1 edahfg 6 13
14 A2B2C2 edahcbf 7 16
15 A2B2C3 edahf 5 11
16 A2B2C4 edahbcf 7 16
f 30 = y0 = x1 x0 + x2 x0 + x2 x1 x 0
f 31 = y1 = x1 x0 + x2 x 0 (1.48)
f = y2 = x2 x0 + x 2 x 0 + x2 x1 x 0
3
2
PROGRAMUL 1.2.
Program logic2;
{se verifica daca forma minima a
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
48
U14A
X2 U2A U16A
1
X1
1 3 1
X0
3 2 3
2
d 2
Y0
7432
7408 7432
U6A
1 2 U3A
1
7404
3
2
e
U11A
7408 1
3
Y1
2
U10A
1 7432
3
2
h
7408
U17A
U12A 1
1 3
Y2
3 2
2
f
U13A 7432
1 2 7408
7404
var
y0_c,y1_c,y2_c,y0_m,y1_m,y2_m,x0,x1,x2:boolean;
begin
for x2:= false to true do
for x1:= false to true do
for x0:= false to true do
begin
{se compara forma canonica a functiei cu cea minimizata}
{forma canonica - ecuatiile (1.43)}
y0_c := ((not x2) and (not x1) and x0) or (x2 and (not x1) and x0) or
(x2 and x1 and (not x0)) or (x2 and x1 and x0);
y1_c := ((not x2) and (not x1) and x0) or (x2 and (not x1) and (not x0)) or
(x2 and (not x1) and x0) or (x2 and x1 and (not x0));
y2_c := ((not x2) and (not x1) and (not x0)) or ((not x2) and x1 and (not x0)) or
(x2 and (not x1) and x0) or (x2 and x1 and (not x0)) or (x2 and x1 and x0);
7410
U1A
1
2 12
13
a
OFFTIME = 5s C1 U2A
ONTIME = 5s CLK
1 2 7411
DELAY = 0 1 U2B 1
7404
STARTVAL = 0 3 4
0 0
OPPVAL = 1
7404
OFFTIME = 2.5s B1 U2C U3A
ONTIME = 2.5s 5 6 U4A 1 U3B
CLK
DELAY = 0 1 0 1 3 4
7404
STARTVAL = 0 3 2 6
OPPVAL = 1 2
d 1
0 5 0
Y0M
7432 V
OFFTIME = 1.25s A1 U2D 7408 7432
ONTIME = 1.25s CLK 9 8
0
DELAY = 0 1 0
7404 U2E
STARTVAL = 0
OPPVAL = 1 11 10
0 U4B
7404
4 0
1
e 6 U3C
5 9 0
0
X2 X1 VX0 V V
8
Y1M
7408 10 0
U4C
V
9 7432
0
8
10
h
7408
1
U3D
U4D 12
12 11
Y2M
11 13 1
13
f 1
U2F V
7432
13 12 7408
1
7404
În figura 1.23. se poate vedea faptul că formele de undă de ieşire y0C, y1C
respectiv y2C corespunzătoare ecuaţiilor canonice (1.43) sunt identice cu formele de
undă y0M, y1M respectiv y2M corespunzătoare ecuaţiilor minimizate. Acest lucru
demonstrează faptul că minimizarea sistemului de funcţii logice (1.43) a fost făcută
corect.
Din analiza în domeniul timp a circuitului obţinut s-a constatat apariţia hazardului la
frecvenţe ridicate pe ieşirea y1. Evitarea apariţiei hazardului va fi discutată în capitolul
următor.
CLK
X2
1
U5A
2 1
U1A
x2 x1
1 0 3
7404
V
2
U8A 1
1 2 7408 0 U4A
X1 U6A 1
7404
CLK 1 2 3
Y0
1 2 0
7404
V U2A V
7432
X0 U7A 0
1
3 x1 x0
CLK 1 2 2 0
1 0
7404
V
7408
Acest circuit construit cu porţi AND şi OR, care evident are la bază o ecuaţie
canonică de tip disjunctiv, prezintă un hazard static 1 atunci când x2=1, x0=1 şi x1
comută din unu în zero.
Să presupunem că toate porţile logice ale circuitului din figura 1.24 au acelaşi
timp de propagare Δt. În această situaţie putem desena un detaliu al diagramei de timp
(figura 1.25) a circuitului din figura 1.24.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
53
Comutarea semnalului de intrare x1 din unu în zero duce la comutarea din zero
în unu a semnalului x1 după timpul Δt datorită întârzierii prin poarta U8A. Semnalul x1
se aplică împreună cu semnalul x0 porţii U2A care comută în zero după Δt (timpul
necesar trecerii semnalului prin această poartă). Luând ca referinţă momentul comutării
semnalului x1 din unu în zero, comutarea porţii U2A din unu în zero se face după Δt.
Similar, poarta U1A care era în zero datorită semnalului x1 va comuta în unu după un
timp egal cu Δt (timpul de întârziere a porţii
U1A). Dacă ne raportăm la aceeaşi referinţă,
momentul comutării semnalului x1 din unu în
zero, comutarea porţii U1A se va face după
2Δt. Reamintim că semnalele x0 şi x2 au
valoarea unu. Datorită diferentei de timp egală
cu Δt a comutării celor două porţi apare un
impuls la ieşire cu valoarea zero cu durata Δt,
impuls ce nu ar trebui să apară dacă porţile ar
Figura 1.25. Diagrama de timp fi ideale.
explicativă pentru apariţia hazardului În figura 1.26 se prezintă rezultatul
simulării circuitului din figura 1.24.
hazard static-1
hazard static-0
Hazardul static-1
Hazardul static-1 apare atunci când o variabilă de intrare directă şi
complementul acesteia sunt conectate la două porţi AND diferite.
Atunci cînd folosim o diagramă Karnaugh, identificarea hazardului se poate face
prin identificarea subcuburilor adiacente ce cuprind termeni canonici diferiţi ai funcţiei.
Pentru exemplificare scriem ecuaţia canonică disjunctivă pentru circuitul din
figura 1.24.
y0 = x2 x1 + x1 x0 (1.49)
conecteze cele două suprafeţe, asa cum este arătat în figura 1.27.b.
x1x0
00 01 11 10
x2 Ecuaţia normală disjunctivă pentru cu hazardul
0 0 0 1 0 eliminat este:
1 1 1 1 0
Figura 1.27.b. Tabelul Karnaugh
y0 = x2 x1 + x1 x0 + x2 x0 (1.50)
Circuitul obţinut, corespunzător ecuaţiei (1.27.b) este cel din figura 1.28 iar
rezultatele simulării în figura 1.29.
X2 U5A U1A
CLK
1 2 1
1 0 3
7404
2 0
U8A
1 2 7408
X1 U6A
7404
CLK
1 2
1
7404
U2A U4A
1 1 U9A
U7A 0
X0 0 3 2 12 1 2
Y0
CLK
1 2 2 0 13 1 0
7404
1 0
7404
7408 7427
U3A
1
3
2 0
7408
Aşa cum se observă din figura 1.29 hazardul static-1 din semnalul de ieşire y0
este eliminat..
O altă posibilitate de eliminare a hazardului este cea de modificare a întârzierilor
în circuit prin adăugarea sau eliminarea de porţi. De exemplu în figura 1.28. se poate
renunţa la inversorul U8A semnalul x1 putând fi cules direct de la intrarea porţii U6A.
În acest caz se poate renunţa la poarta U3A. Din acest exemplu rezultă importanţa
deosebită a simulării funcţionării circuitelor logice, activitate ce poate scurta
considerabil timpul de proiectare şi punere la punct a unui circuit.
Hazardul static-0
Hazardul static-0 apare la circuitele compuse din porţi logice OR-AND, descrise
de ecuaţii normale conjunctive, atunci când o variabilă de intrare directă şi
complementul acesteia sunt conectate la două porţi OR diferite.
Eliminarea hazardului-0 se face printr-o metodă duală celei de eliminare a
hazardului static-1 cu ajutorul diagramelor Karnaugh. Hazardul static-0 poate fi
identificat acolo unde, în diagrama Karnaugh, apar suprafeţe adiacente, formate din
zerouri, care acoperă sume de termeni diferiţi. Eliminarea hazardului se va face prin
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
55
inserarea unui subcub suplimentar (implicant prim) care reprezintă o sumă de termeni ai
funcţiei şi care acoperă tranziţia variabilei care produce hazardul.
De asemenea se poate utiliza metoda modificării corespunzătoare a întărzierilor
prin adăugarea şi eliminarea de porţi şi simularea circuitului.
Pentru simularea unui circuit logic combinaţional realizat cu porţi logice este
necesară mai întâi realizarea circuitului electric cu ajutorul componentei OrCAD
Capture. Se va explica în continuare
modul de realizare şi de simulare a
schemei din figura 1.24 cu ajutorul
pachetului de programe OrCAD ver. 9.1.
apoi New după care se selectează opţiunea Project. Se deschide o fereastră pentru
crearea unui proiect nou, ca în figura 1.30.
În această fereastră trebuie scris numele
proiectului (aici a fost ales numele „test1”), se
alege tipul de proiect „Analog or Mixed Signal
Circuit Wizard” prin selectarea acestei opţiuni
şi apoi directorul unde se va găsi noul proiect
(aici „E:\Proiecte”) după care se apasă pe
butonul Ok.
Apare o nouă fereastră ca cea din figura
1.31 în care se cere includerea bibliotecilor
Figura 1.31. Selectarea bibliotecilor
Pspice care se vor folosi în acest proiect.
proiectului.
Încluderea bibliotecilor suplimentare se poate
face şi pe parcursul elaborării schemei electrice deci în această fază putem să selectăm
Meniul principal
Fereastra pentru
desenarea schemei
Fereastra
pentru
gestionarea
proiectului
Fereastra de mesaje
Figura 1.32. Deschiderea unui proiect în OrCAD Capture.
doar o parte din bibliotecile de componente folosite. Bibliotecile de componente Pspice
(cu extensia .olb) conţin, pe lângă simbolul
componentei folosite şi modelul aesteia (definit
conform regulilor programului SPICE) folosit la
simulare.
Vom selecta biblioteca 7400.olb după care se
apasă butonul Add>> pentru a adăuga această
bibliotecă iar în final se apasă butonul Finish.
Terminarea definirii proiectului nou determină
apariţia mai multor ferestre în spaţiul programului
OrCAD Capture: fereastra pentru gestiunea
proiectului care are numele proiectului, fereastra Figura 1.33. Fereastra pentru
pentru desenarea schemei cu numele / - gestiune a proiectului
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
57
Simbolul grafic al
componentei selectate
Pentru realizarea schemei electrice a circuitului din figura 1.24 se vor plasa pe
desen porţile logice. Din acest motiv se va selecta biblioteca „7400” în fereastra
bibliotecilor folosite în proiectul respectiv iar din fereastra componentelor se vor selecta
succesiv componentele: „7404”, „7408” şi respectiv „7432”.
După selectarea unei componente se apasă butonul OK al ferestrei de selecţiei a
componentei şi simbolul grafic al acesteia apare solidar cu cursorul mausului. Pentru
plasarea componentei se face clic pe butonul din stânga al mausului. Pentru încheierea
operaţiei de plasare a unui tip de componentă se face clic pe butonul din dreapta al
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
58
mausului iar în meniul desfăşurat se selectează End Mode. Tot în acest meniu sunt
opţiuni pentru rotirea componentei, aşezarea în oglindă etc. necesare editării schemei.
Pentru plasarea unei noi componente se selectează din nou opţiunea de plasare a
unei componente iar operaţiunea se repetă.
După aşezarea tuturor porţilor logice conform desenului 1.24 se vor plasa la
intrarea circuitului generatoarele de semnal. Pentru acesta, în fereastra de selecţie a
componentei, în fereastra de selecţie a bibliotecii, se va selecta biblioteca
SOURCE.OLB. Din această bibliotecă se va selecta componenta DigClock.
Componenta DigClock este o sursă de semnal digital care este folosit de obicei
ca semnal de ceas reprezentat de un semnal dreptunghiular periodic. După plasarea
componentei în schema electrică, dacă se face dublu clic pe imaginea acesteia se
deschide fereastra editorului proprietăţilor componentei (Property Editor) în care se
pot preciza: timpul după care apare prima tranziţie a ceasului (parametrul DELAY),
timpul cât durează nivelul ridicat (high), în fiecare perioadă a semnalului de ceas
(parametrul ONTIME), timpul cât durează nivelul scăzut (low), în fiecare perioadă a
semnalului de ceas (parametrul OFFTIME), starea nivelului scăzut a semnalului de
ceas - Low state, implicit aceasta este zero – (parametrul STARTVAL) şi starea
nivelului ridicat a semnalului de ceas - High state, implicit aceasta este unu –
(parametrul OPPVAL), aşa cum este arătat în figura 1.36.
f x 0 = 2 f x1 = 4 f x 2 (1.51)
********************************************************************************
*
* Design Rules Check
*
********************************************************************************
--------------------------------------------------
Checking Schematic: SCHEMATIC1
--------------------------------------------------
Checking Electrical Rules
Aceste mesaje indică faptul că schema electrică este corectă. În situaţia în care
apare o eroare la desenarea schemei, această eroare este semnalată printr-un mesaj şi se
afişează coordonatele punctului în care apare eroarea.
După ce desenarea schemei circuitului electronic a fost încheiată, se poate trece
la simularea funcţionării circuitului în vederea analizei comportării acestuia şi, apoi, la
proiectarea cablajului imprimat.
Pentru simulare se foloseşte componenta pachetului de programe OrCAD
PSPICE. Pregatirea simulării circuitului electronic presupune stabilirea punctelor de test
şi stabilirea profilului simulării.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
61
Punctele de test sunt punctele din schema electrică unde utilizatorul doreşte să
vizualizeze anumiţi parametri.
Din programul OrCAD CAPTURE se selectează din meniul principal opţiunea
PSpice iar din meniul desfăşurat, opţiunea Markers.
Opţiunea Markers permite alegerea punctelor de test de tip Voltage Level
(nivel de tensiune), Voltage Differential (diferenţă de tensiune), Current Into Pin
(curentul printr-un terminal) şi Advanced care permite o serie de măsurători complexe.
De asemenea, opţiunea Markers permite afişarea tuturor punctelor de măsură pe
schemă (Show All), ascunderea acestora (Hide All), ştergerea (Delete All) şi listarea
acestora (List …). Deoarece în urma simulării dorim să urmărim forma tensiunii
(nivelele logice) în anumite puncte se va selecta Voltage Level. Simbolul sondei de
măsură care apare solidar cu indicatorul mausului se plasează la capătul terminalelor
unde se doreşte afişarea, în simulatorul PSpice, a formelor de undă ale tensiunii.
Conform figurii 1.24, punctele de măsură se vor plasa la terminalele componentelor:
U5A:2, U6A:2, U7A:2 şi U4A:3.
1.7.1. Introducere
Dacă circuitul digital este de complexitate mai mare, o metodă de realizare des
utilizată presupune descompunerea circuitului în blocuri funcţionale, testarea separată a
acestora şi apoi, după stabilirea relaţiilor ierarhice între acestea, testarea ansamblului
compus din blocuri funcţionale. De regulă o astfel de metodă poate fi aplicată la
circuitele compuse din până la aproximativ şase sute de porţi.
Creşterea complexităţii sistemelor numerice odată cu dezvoltarea tehnologiei
digitale a dus la imposibilitatea folosirii metodelor clasice de proiectare şi realizare a
acestora.
Sistemele numerice actuale sunt extrem de complexe. La nivelul celor mai mici
detalii, ele constau în sute de miloane de elemente de tipul tranzistoarelor sau al porţilor.
De aceea, pentru sistemele numerice mari, proiectarea la nivelul porţilor este practic
imposibilă. Schema devine un paienjenis de conexiuni, care nu mai arata
functionalitatea proiectului.
Incepand cu 1970, inginerii de calculatoare si inginerii electronisti au apelat la
HDL (Hardware Description Language) care reprezintă, aşa cum arată şi numele
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
63
descrierea relaţiilor dintre semnalele de intrare şi ieşire şi din acest motiv arareori
descrierea comportamentală este unică.
o nivelul tranzistor;
o nivelul poartă logică;
o nivelul registrului de transfer (Register-transfer-level sau RT-level);
o nivelul procesor.
sistem digital. Trebuie reţinut însă faptul că, în realitate, semnalele şi circuitele sunt în
continuare continui. Cu ajutorul acestei abstractizări, descrierea comportării intrare-
ieşire se poate face cu prin intermediul ecuaţiilor algebrei logice (ecuaţii booleene)
renunţându-se la ecuaţiile diferenţiale care sunt cu mult mai complexe şi mai dificil de
folosit.
De asemenea informaţiile în domeniul timp sunt simplificate. Se foloseşte o
singură informaţie şi anume timpul de propagare (paragraful 2.3.3.) sau timpul de
întârziere (delay time – propagation delay) pentru specificarea caracteristicilor în
domeniul timp a porţii.
reset
m
clock Circuit digital
ieşire
semnale de
n
semnale de
test
După numele modulului urmează lista de porturi, scrisă între paranteze rotunde.
Această listă este în strânsă legătură cu descrierea porturilor în interfaţa modulului. În
acestă listă sunt enumerate porturile modulului, care sunt folosite pentru conectarea cu
alte module, separate prin virgulă. În interfaţa modulului se face declararea acestor
porturi prin specificarea direcţiei acestora : porturi de intrare (input), ieşire (output) sau
intrare/ieşire (inout),
Sectiunea <declararea parametrilor> din interfaţă, specifică obiectele de tip date
ca registre (reg), memorii si fire (wire), cât şi construcţiile procedurale ca function şi
task care vor fi explicate mai târziu.
Elementele externe suplimentare sunt declarate cu ajutorul directivelor include.
Un exemplu genearal al unui modul în care sunt precizate interfaţa şi elementele
externe suplimentare este prezentat în continuare.
COut CIn
UNITATE LOGICĂ ŞI ARITMETICĂ (ULA)
Result Equal
EXEMPLUL1
Descrierea prin fluxul de date reprezintă o listă de expresii care arată modul de
prelucrare a semnalelor de ieşire în aşa fel încăt să se obţină la ieşire valorile dorite,
similar cu descrierea cu ajutorul ecuaţiilor logice. Expresiile se pot baza pe o gamă largă
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
70
de operatori cum sunt : operatori logici, prelucrări la nivel de bit, operatori aritmetici,
operatori condiţionali etc.
1 2 7410
Sel0 NotSel1
7404 U4A
1
In1 2 12 Y1 1 U7A
13 2
U2A 7410 Y2 6
1 2 4 Out
Sel1 NotSel0 5
7404 7420
1 U5A
In2 2 12
13
7410
U6A
1 Y3
In3 2 12
13
7410
Descrierea structurală
EXEMPLUL 2
Analizând fluxul datelor circuitului din figura 1.43 putem construi diagrama de
semnal din figura 1.44. Acestă diagramă indică modul în care sunt prelucrate, din punct de
vedere logic, semnalele de intrare în scopul obţinerii semnalului de ieşire.
In0 “SI-NU”
logic
Sel0 “NU”
logic
In1 “SI-NU”
logic
“SI-NU” Out
Sel1 “NU” logic
logic
In2 “SI-NU”
logic
In3 “SI-NU”
logic
EXEMPLUL 3
output Out;
input In0, In1, In2, In3, Sel0, Sel1;
assign Out = ~[~(~Sel1 & ~Sel0 & In0) & ~(~Sel1 & Sel0 & In1) &
~(Sel1 & ~Sel0 & In2) & ~(Sel1 & Sel0 In3)];
endmodule
Descrierea comportamentală
In1
In2
Out
In3
In4
Sel1, Sel2
EXEMPLUL 4
output Out;
input In0, In1, In2, In3, Sel0, Sel1;
reg Out;
endmodule
EXEMPLUL 5
Porturile in1, in2 şi out sunt etichetele pe fire. Atribuirea continuă assign
urmăreşte în permanenţă eventualele modificări ale variabilelor din membrul drept,
pentru reevaluarea expresiei şi pentru propagarea rezultatului în membrul stâng (out).
Instrucţiunea de atribuire continuă este utilizată pentru a modela circuitele
combinationale la care ieşirile se modifică ca urmare a modificărilor intrărilor.
Specificarea structurală a unui modul AND (exemplul 6), obţinut ca urmare a
conectării ieşirii unei porţi NAND la cele două intrări ale altei porţi NAND (cea de-a
doua poartă folosită ca inversor – vezi şi paragraful 1.3).
EXEMPLUL 6
Acest modul are două instanţe ale lui NAND, numite NAND1 şi NAND2,
conectate printr-un fir intern w1.
Forma generală pentru invocarea unei instanţe este următoarea:
unde <lista de parametri> are valorile parametrilor, care sunt transferate către instanţă.
Un exemplu de parametru transferat ar fi intârzierea pe o poartă.
Urmatorul modul (exemplul 7) reprezintă un modul de nivel înalt, care stabileşte
anumite seturi de date şi care asigură monitorizarea variabilelor.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
74
EXEMPLUL 7
module test_AND;
// Modul de nivel inalt pentru testarea altor doua module.
reg a, b;
wire out1, out2;
initial
begin // Datele de test
a = 0; b = 0;
#1 a = 1;
#1 b = 1;
#1 a = 0;
end
initial
begin // Activarea monitorizarii
$monitor("Time=%0d a=%b b=%b out1=%b out2=%b",
$time, a, b, out1, out2);
end
// Instantele modulelor AND si NAND
AND gate1(a, b, out2);
NAND gate2(a, b, out1);
endmodule
Toate cele trei module vor fi plasate într-un fişier, care va fi executat de către
simulator pentru a produce urmatoarea ieşire:
Time=0 a=0 b=0 out1=1 out2=0
Time=1 a=1 b=0 out1=1 out2=0
Time=2 a=1 b=1 out1=0 out2=1
Time=3 a=0 b=1 out1=1 out2=0
Întrucât simulatorul iese din cadrul evenimentelor, nu a mai fost necesară oprirea
explicită a simulării.
În Verilog semnalele pot avea patru valori distincte: 1 – corespunzător valorii
logice “adevărat”, 0 – corespunzător valorii logice “fals”, x – corespuzător unei valori
logice oarecare (necunoscute) şi z – corespunzător stării de înaltă impedanţă. Aceste
semnale nu pot aparţine decât uneia din cele două clase: reţea sau registru.
Reţeaua reprezintă conexiunile între elementele fizice, nu are nici un fel de
capacitate de stocare iar valoarea semnalului de pe reţea depinde numai de valoarea
semnalului de sursă. O reţea are starea de înaltă impedanţă dacă nu este conectată la nici o
sursă de semnal.
Pe de altă parte, registrele pot stoca semnalul de o anumită valoare chiar şi atunci
când sunt deconectate. O valoare atribuită unui registru este păstrată de acesta până când îi
este atribuită o nouă valoare. Ca urmare, un registru joacă acelaşi rol ca şi o variabilă dintr-
un limbaj de programare. Trebuie reţinut faptul că registrul Verilog diferă de un registru
numeric deoarece registrul Verilog nu are nici o legătură cu semnalul de ceas.
Cele mai multe semnale dintr-un sistem sunt de tip reţea deoarece reprezintă
semnale trimise de ieşirile unor dispozitive către intrările altor dispozitive. Numele
(cuvintele rezervate) folosite în limbajul Verilog pentru semnalele de tip reţea vor fi
descrise pe scurt în continuare.
Prima categorie este reprezentată de semnalele, cel mai frecvent utilizate, de tip
wire şi tri. Semnalele de tip wire sunt folosite în reţelele cu o singură sursă iar semnalele
de tip tri sunt folosite în reţelele cu surse multiple. Cele două nume desemnează practic
acelaşi tip de reţea şi sunt folosite numai în scopul clarităţii programului sursă.
Numele de wand/triand şi wor/trior repezintă cea de-a doua categorie de
semnale de tip reţea care sunt folosite pentru a desemna reţele ale căror trasee realizează
funcţii logice cablate (capitolul 2.5). Cuvântul rezervat wand/triand este desemnat pentru
specificarea funcţiei „şi – and” cablată (figura 1.46) iar wor/trior specifică funcţia „sau –
or” cablată (figura 1.47). Şi în acest caz prefixul w- respectiv tri- sunt folosite doar în scop
pur funcţional, pentru creşterea clarităţii.
Cea de-a treia categorie de semnale de tip reţea sunt reprezentate de numele
+V +V K1
K2
R
…
Kn Out
K1 Out
K2
R
…
Kn
Figura 1.46. Funcţia logică „şi” Figura 1.47. Funcţia logică „sau”
cablată cablată
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
76
rezervate supply0, supply1, tri0, tri1, trireg care facilitează descrierea elementelor
speciale ale reţelelor specificaţiilor de nivel scăzut cum sunt tranzistoarele sau porţile
realizate în diverse tehnologii. Această categorie de semnale nu interesează aici deoarece
ele nu fac parte din obiectivul propus şi anume acela de simulare a circuitelor logice
combinaţionale.
Ca şi celelalte elemente ale limbajului verilog şi semnalele trebuie declarate înainte
de a fi folosite. Sintaxa declarării unui semnal este foarte simplă:
<tipul semnalului> <nume semnal> ;
unde <tipul semnalului> poate fi unul din cuvintele rezervate precizate mai sus: wire,
wand etc. iar <nume semnal> este un nume ales de programator, nume ce trebuie să
respecte regulile de scriere ale identificatorilor Verilog precizate la începutul acestui
capitol (descrierea structurii modulului). Linia declarării semnalului se termină, ca şi
celelalte linii, cu punct şi virgulă (;).
Într-un sistem descris cu ajutorul programului semnalele de tip reţea pot fi semnale
scalare corespunzătoare unei singure conexiuni sau semnale vectoriale corespunzătoare
magistralelor formate din mai multe conexiuni electrice. Cel mai adesea semnalele
vectoriale se întâlnesc în sistemele complexe similare cu cel descris în figura 1.42.
Aşa cum se vede în exemplul 1, un sistem poate avea semnale scalare: Cout,
Equal, Cin şi Mode şi semnale vectoriale: Result, In1, In2 şi OpSel.
Declararea semnalului vectorial se face în felul următor:
wire [MSB : LSB] <numele_vectorului>;
unde MSB (Most Significant Bit – cel mai semnificativ bit) este indicele bitului de rang
maxim al vectorului iar LSB (Least Significant Bit – cel mai puţin semnificativ bit) este
indicele bitului de rang minim al vectorului. În limbajul Verilog indicii sunt nume întregi
pozitive sau negative iar valoarea MSB poate fi mai mică decât LSB ceea ce este puţin
contradictoriu dacă ne gândim la modul de definire al acestor biţi la reprezentarea
informaţiei. Calculul dimensiunii vectorului se face cu relaţia următoare:
dimensiune = | MSB – LSB|
dimensiunea reprezentând numărul de biţi sau numărul de circuite ale vectorului
(magistralei).
Numele vectorului respectă aceleaşi reguli cu ceilalţi identificatori Verilog.
De asemenea semnalele pot fi interne sau externe unui modul. Semnalele externe
permit modulului să comunice cu celelalte module iar semnalele interne asigură
funcţionarea modulului. Diferenţa între semnalele interne şi cele externe constă în modul
în care acestea sunt declarate. Semnalele interne sunt declarate cu ajutorul identificatorilor
semnalelor iar semnalele externe sunt declarate prin intermediul porturilor modulului.
Specificarea porturilor unui modul se face prin intermediul a două elemente:
o porţi logice cu mai multe intrări (ce conţin şase primitive pentru
porţile logice: and – şi, nand – şi negat, nor – sau negat, or –
sau, xnor – sau exclusiv negat şi xor – sau exclusiv; aceste
porţi logice pot avea orice număr de intrări şi numai o singură
ieşire);
o porţi logice cu mai multe ieşiri (ce conţin două primitive buf –
circuitul de amplificare şi not - inversorul; oricare din aceste
porţi are o singură intrare şi un număr nelimitat de ieşiri;
o porţi logice cu trei stări (reprezintă circuite tampon – buffer – ce
pot fi activate cu una din valorile logice „zero” sau respectiv
„unu”: bufif0 şi respectiv bufif1 sau circuite inversoare cu trei
stări ce pot fi activate cu una din valorile logice „zero” sau
respectiv „unu”: notif0 şi respectiv notif1;
o porţi logice cu etajul final în gol (pull gates).
U1A
1 U2A
A AxorB
3 1
2 3
B 2 Sum
74136
Cin 74136
U3A
1 AandB
3
2
7408
U4A U6A
NCout U7A
1 AandCin 1
3 2 12 1 2
2 13
7404
Cout
7408 7427
U5A
1
3 BandCin
2
7408
EXEMPLUL 8
endmodule
În sfârşit, apelul unei funcţii (call) sau un sistem definit de utilizator, pot fi
folosiţi ca operanzi, dacă aceştia returnează o valoare compatibilă cu operatorul.
EXEMPLUL 9
// numere negative
-10 // număr reprezentat intern în cod complement faţă de doi pe
// 32 biţi
-8’d10 // echivalent cu – (8’d10)
16’b1100_0101_1111_1000
121_523_191
DataBus[5]
AddressBus[6:4]
care reprezintă un operand compus din trei biţi – biţii de pe poziţiile şase, cinci şi patru
ale vectorului AddressBus.
Operatorii aritmetici în număr de patru: “+” pentru adunare, “-“ pentru scădere,
“*” pentru înmulţire şi “/” pentru împărţire se folosesc cu căte doi operanzi. Operatorii
“+” şi “-“ pot fi folosiţi şi cu un singur operand pentru determinarea semnului acestuia.
În afară de aceşti operatori mai există şi operatorul modulo, notat cu “%”, care
returnează restul împărţirii întregi a doi operanzi.
EXEMPLUL 10
1. Codul Verilog:
integer intA;
intA = -4’d12 //variabilă de tip întreg
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
81
2. Codul Verilog:
reg[15:0] intA;
intA = -4’d12 //variabilă de tip registru
EXEMPLUL 11
Dacă cei doi operanzi nu sunt egali ca numar de simboluri, atunci operandul cu
un număr mai mic de simboluri este completat cu zerouri spre stânga. În exemplul 3 sau
exemplul 4, al doilea operand „11” este transformat în „0011” pentru a avea acelaşi
număr de simboluri cu primul operand „1100”.
În cazul egalităţii (neegalităţii) logice, dacă unul din operanzi conţine cel puţin
un bit în starea de înaltă impedanţă „z” sau starea bitului este necunoscută „x” atunci
rezultatul operaţiei este necunoscut.
EXEMPLUL 12
Operatorii logici sunt de două tipuri: operatori logici pe bit şi operatori logici
care acţionează asupra întregului operand.
Operatorii logici pe bit realizează operaţia logică separat pe fiecare bit ai
operanzilor şi furnizează o valoare corespunzătoare operaţiei logice efectuate.
Dacă operatorii logici pe bit au un singur operand atunci ei se numesc operatori
logici de reducere iar operaţia logică se realizează între toţi biţii operandului
furnizânduse un rezultat cu dimensiunea de un bit.
Operatorii logici care acţionează asupra întregului operand realizează operaţia
logică între valoarile logice de adevăr asociate operanzilor: „adevărat” dacă operandul
este diferit de zero sau „fals” dacă operandul este egal cu zero.
Operatorii logici pe bit (dacă se folosesc doi operanzi) sau de reducere (dacă se
foloseşte un singur operand) sunt: „~” (NOT), ”&” (AND), “|” (OR), “^” (XOR), şi
“~^” sau “^~” (XNOR).
Operatorii logici pe întregul operand sunt: „!” (NOT), “&&” (AND) şi „||” (OR).
EXEMPLUL 13
EXEMPLUL 14
Operatorul de concatenare combină doi sau mai mulţi operanzi într-un vector.
Operatorul de concatenare se notează cu paranteze acoladă: “ { } “.
EXEMPLUL 15
EXEMPLUL 16
EXEMPLUL 17
/* in functie de condita c se obtin rezultatele: a=x daca c este adevarat sau a=y daca c
este fals, implementare ce reproduce functionarea unui multiplexor la care x si y sunt
intrari de semnal, a este iesirea de semnal iar c este intrarea de comanda */
A X
B Z
C Y
D
Fig. 1.49. Modul pentru explicarea atribuirii implicite şi
EXEMPLUL 18
endmodule
wire X;
wire Y;
endmodule
Directivele compilatorului
Directivele compilatorului sunt comenzi speciale care încep cu caracterul ( ` -
atenţie acest simbol nu este apoatrof: ‘ ) şi care influenţează funcţionarea simulatorului
Verilog. Prezentăm în continuare câteva din directivele compilatorului.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
86
`timescale time_unit/time_precision;
EXEMOLUL 19
Directiva `include permite inserarea unui fişier text în punctul în care se găseşte
directiva. Directiva este similară celei din limbajul C/C++.
EXEMPLUL 20
initial begin
$displayh (al,ah ); // al si ah sunt afisate in hexazecimal
$monitor (“at time=%t, d=%h, $time, a);
end
EXEMPLUL 21
time ts;
ts = $time;
EXEMPLUL 22
module TestBench;
-------------------------------------------------------------------------------
reg … ; declararea semnalelor de stimulare
wire … ;
-------------------------------------------------------------------------------
initial
…
initial
#… $finish
---------------------------------------------------------------------------------
modname UUT (…); instanţierea modulului UUT
---------------------------------------------------------------------------------
initial monitorizarea rezultatelor
$monitor (…);
---------------------------------------------------------------------------------
endmodule
// modulul de testat
// fisierul de test
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
89
module TestBench;
…
combi UUT (.Y(…), .A(…), .B(…), C(…));
…
endmodule
Semnalele de simulare sunt declarate, aşa cum s-a arătat, în interiorul modulului
de testare sau într-un modul extern. Aceste semnale sunt asociate cu intrările modulului
UUT prin intermediul semnalelor declarate în modulul de test. Evoluţia în timp a
semnalelor de stimul se specifică într-o manieră secvenţială, de obicei în interiorul unor
blocuri de tip initial şi always.
Folosirea blocului initial cu comanda sistem $finish permite ca simularea să se
termine înr-o durată de timp determinată. Folosirea blocului always permite realizarea
buclelor infinite.
Corespondenţa între stimuli şi modulul de testat se realizează prin specificaţia
porturilor din instanţierea UUT.
În exemplul 24 se prezintă un modul corespunzător unui multiplexor cu două
intrări şi specificarea semnalelor de stimul pentru fişierul de test.
Schema electrică a multiplexorului este prezentată in figura 1.50.
COMANDA
Sel
U1A
INTRARE
1
A 3
2
7408
U3A
1 IESIRE
U4A 3
1 2 2 Y
7404 U2A 7432
1
INTRARE 3
2
B
7408
EXEMPLUL 24
assign Y = Sel ? A : B ;
endmodule
EXEMPLUL 25
a.
// fisierul de test cu afisarea rezultatelor pe ecran
module TestBench;
reg Sel, A, B;
wire Y;
b.
// fisierul de test cu salvarea rezultatelor in fisier
module TestBench;
reg Sel, A, B;
wire Y;
integer Res;
TIME A B Sel Y
0 0 1 x x
40 0 1 0 0
60 0 1 0 1
80 0 1 1 1
100 0 1 1 0
120 0 1 0 1
140 1 1 0 1
160 1 1 1 0
180 1 0 1 0
Vom prezenta în continuare modul în care se face simularea unui circuit logic
combinaţional cu ajutorul programului Silos, versiunea demonstrativă (2002.100), pus
la dispoziţia utilizatorilor în mod gratuit, de către firma Simucad Inc.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
92
sursă ce conţine modulul cu multiplexorul cu două intrări şi o ieşire există, atunci acel
fişier va fi inclus în proiect.
Pentru a crea acest fişier se poate utiliza orice editor de text sau un editor
specializat pentru scrierea programelor în limbajul Verilog. Se poate utiliza, în acest
caz, editorul programului Silos. Multiplexorul cu două intrări şi o ieşire are schema
electrică prezentată în figura 1.50. În exemplul 24 a fost descris acest circuit în modulul
„mux2to1” cu ajutorul descrierii comportamentale. Fiind vorba de un circuit logic
combinaţional vom folosi acum descrierea
structurală cu ajutorul porţilor logice. Se
selectează din meniul principal File după care se
selectează New moment în care se deschide
fereastra fişierului sursă numită generic
Source1. Se introduce textul corespunzător
modulului mux2to1 conform celor prezentate în
exemplul 26 după care se salvează acest fişier
cu numele mux2to1_module.v aşa cum este
arătat în figura 1.53.
După salvarea fişierului
mux2to1_module.v se selectează Project din
meniul principal, apoi Files şi se adaugă la
proiect acest fişier (figura 1.54). În acest
moment fişierul sursă poate fi verificat şi se
Figura 1.54. Adaugarea fişierului
mux2to1_module.v la proiect.
selectează din meniul principal opţiunea Debug,
apoi Go sau se apasă tasta. Dacă in fereastra de
ieşire a simulatorului nu sunt semnalate erori atunci fişierul sursa este corect din punct
de vedere sintactic. Dacă apar erori de sintaxă, acestea se corectează după care se reface
compilarea fişierului (acţiunea Debug -> Go).
EXEMPLUL 26
not (U4A,Sel);
and (U1A,A,Sel);
and (U2A,U4A,B);
or (Y,U1A,U2A);
endmodule
New sau se apasă combinaţia de taste Ctrl + N. În acest fişier se crează modulul de test
mux2to1_TB prezentat în exemplul 27.
EXEMPLUL 27
module mux2to1_TB;
reg Sel, A, B;
wire Y;
//simulare completa
$finish;
end
initial
begin
//valori initiale
Sel = 1;
A = 0;
B = 1;
end
endmodule
La sfârşit salvăm fişierul cu ajutorul comenzii File, Save As… folosind numele
mux2to1_TB.v pentru acesta. Includem apoi acest fişier în proiect cu succesiunea de
comenzi Project urmată de Files… iar în fereastra apărută, similară cu cea prezentată în
figura 1.54 se face dublu clic pe fişierul mux2to1_TB.v sau, se selectează acest fişier,
apoi se apasă butonul Add, în final selectându-se butonul OK.
Pentru testare lansăm în execuţie proiectul cu ajutorul comenzii Debug din
meniul principal, urmată de Go, sau se apasă pe butonul din bara principală de
unelte (Main Toolbar). În urma acestei acţiuni se face compilarea fişierelor şi simularea
acestora. Dacă în fereastra de ieşire nu sunt semnalate erori putem acum să vizualizăm
semnalele circuitului. Pentru aceasta selectăm fereastra Data Analizer prin selectarea
pictogramei sau apăsarea tastei F6 sau selectarea opţiunii Window, din meniul
principal, urmată de Open New Data Analizer. Se deschide de asemenea fereastra
Explorer prin selectarea pictogramei sau Window, din meniul principal, urmată de
Open Explorer. În această fereastră sunt afişate modulele din proiect, într-o structură
ierarhică, în partea stângă şi porturile aferente acestora, în partea dreaptă. Semnalele pe
care dorim să le afişăm trebuie să apară aici. Prin tehnica “drag and drop” aceste
semnale sunt “trase” din partea dreaptă a ferestrei Explorer şi puse în partea stângă a
ferestrei Data Analizer. Semnalele din fereastra Data Analizer de care nu mai avem
nevoie le putem şterge prin selectarea acestora şi apăsarea tastei Delete. În final, pentru
a vizualiza semnalele pe toată durata simulării apăsăm în mod repetat pictograma
.Fereastra principală a programulul Silos cu rezultatele simulării este prezentată în
figura 1.55.
Rezultatele simulării sunt prezentate în figura 1.56.
Welcome Menu).
Pentru a crea un proiect nou, din meniul principal se selectează File, din meniul
desfăşurat se alege New, după care se selectează Project… Se deschide fereastra
Create Project (figura 1.58), unde la Project Name se completează : test, la Project
Location se introduce locaţia proiectului, de exemplu :
E:\Modelsim teste\proiect1,
iar la Default Library Name rămâne valoarea implicită : work.
Limbajul VHDL este cel de-al doilea limbaj folosit pentru descrierea structurilor
fizice (hardware) pe care-l vom folosi la simularea circuitelor logice combinaţionale.
Acest limbaj realizează o descriere a comportării structurii fizice, ascunzând detaliile de
implementare şi acoperind astfel o gamă largă de aplicaţii, permiţând simularea
circuitelor digitale din cele mai diverse.
Limbajul VHDL este folosit în procesul de proiectare a circuitelor digitale
începând de la nivelul de sistem şi până la nivelul porţii logice. De asemenea, datorită
caracterului său descriptiv, limbajul VHDL poate constitui de multe ori documentaţia de
funcţionare a unei structuri fizice.
Etapele proiectării unui circuit logic digital cu ajutorul limbajului VHDL sunt:
1. descrierea detaliată a sistemului – se stabilesc cerinţele ce trebuie să
le îndeplinească sistemul ce urmează să fie proiectat;
2. proiectarea sistemului – se face modelarea comportării sistemului în
limbaj VHDL;
3. validare – verificarea modelului prin furnizarea stimulilor şi
verificarea răspunsului aşteptat;
4. proiectarea logică – modelarea structurii la nivel RTL (Register-
transfer-level sau RT-level) cu ajutorul programelor de sinteză.
Rezultatul este reprezentat o listă de conexiuni a circuitului (netlist)
sau un model la nivel de poartă logică;
5. validare – verificarea rezultatului prin furnizarea stimulilor şi
verificarea răspunsului aşteptat;
6. proiectarea circuitului – conversia automată a descrierii structurale;
7. validare – verificarea rezultatului prin furnizarea stimulilor şi
verificarea răspunsului aşteptat;
8. obţinerea planului general a circuitului – se obţin datele necesare
implementării fizice a circuitului pe baza listei de conexiuni (netlist);
9. validare – verificarea finală a rezultatului obţinut, cu ajutorul datelor
furnizate de fabricantul circuitelor, prin furnizarea stimulilor şi
verificarea răspunsului aşteptat.
În limbajul VHDL se consideră că un sistem este alcătuit din trei părţi esenţiale:
interfaţa (entity) sistemului cu mediul, corpul (architecture) sistemului cu ajutorul
căruia sunt prelucrate semnalele furnizate de interfaţă şi care trimite prin interfaţă
semnale spre exterior şi elementele suplimentare (package) adăugate corpului
sistemului pentru adăugarea unor funcţii noi. Aceste componente constituie elemente de
proiectare independente ale limbajului ce vor fi prezentate succint în continuare.
Elementul de bază a limbajului, care descrie interfaţa sistemului cu mediul
extern, este entitatea (entity). Nu poate fi conceput un program în limbaj VHDL fără
nici o entitate. De asemenea, proiectarea unui sistem va începe cu declararea unei
entităţi.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
101
EXEMPLUL 28
EXEMPLUL 29
-- or gate
entity org is
-----------------------------------------------------------
generic (tpd_hl : time := 1 ns; -- parametrii
tpd_lh : time := 1 ns);
-----------------------------------------------------------
port (in1, in2 : std_logic; -- conexiuni
out1 : out std_logic);
-----------------------------------------------------------
end org;
EXEMPLUL 30
Blocul este un element de bază într-o descriere VHDL. Un bloc este o zonă de
text, mărginită, care conţine o secţiune de declaraţii şi o secţiune executabilă. Un corp
arhitectural este un bloc cu deosebirea că, în interiorul unui corp arhitectural pot fi
formate alte blocuri. În exemplul 31 este prezentat corpul arhitectural
BLOCK_STRUCTURED. În blocul exterior al corpului arhitectural sunt incluse
blocurile A şi B. Blocurile A şi B pot fi formate de asemenea din sub-blocuri. Numărul
nivelelor de includere este, în general, nelimitat.
EXEMPLUL 31
Atunci când anumite elemente sunt mai frecvent întâlnite în programele VHDL
sau în situaţia în care dorim să utilizăm elemente predefinite în biblioteci se folosesc
pachetele (package) care încapsulează elemente ce pot fi folosite simultan în mai multe
unităţi de proiectare (date globale).
În programele VHDL se folosesc două clauze pentru apelarea unui pachet:
library şi use. Aceste clauze trebuie folosite înainte de utilizarea pachetului, de obicei
înaintea entităţii care foloseşte un element declarat în pachet.
În exemplul 32 se arată regula de definire a unui pachet.
EXEMPLUL 32
package <identificator> is
-- partea declarativă a pachetului
end [package] [identificator];
library Std;
use Std.TextIO.all;
library IEEE
use IEEE.Std_Logic_1164.all;
VHDL test bench este de asemenea o specificaţie care are propria ei entitate şi
arhitectură dar este o specificaţie de tip special cu elemente caracteristice unei astfel de
structuri.
Principalele elemente ale unei specificaţii test bench sunt:
EXEMPLUL 33
architecture TBArch of TB is
signal A, B, … :bit; -- declararea stimulilor
signal …;
begin
UUT: entity work.MyProcessor(Beh) -- instanţiere UUT
port map (…);
stimuli: process
begin
A <= …;
B <= …;
…
wait for …;
…
wait for …;
…
wait;
end process stimuli;
end architecture TBArch;
EXEMPLUL 34
EXEMPLUL 35
entity mux2to1 is
port ( IN0, IN1, SEL : IN std_logic;
MUX_OUT : OUT std_logic);
end mux2to1;
library IEEE;
use IEEE.std_logic_1164.all;
architecture TBArch of TB is
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
107
component mux2to1
port ( IN0, IN1, SEL : IN std_logic;
MUX_OUT : OUT std_logic);
end component;
begin
uut: mux2to1
port map (IN0, IN1, SEL, MUX_OUT);
stimuli: process
begin
SEL <= 'X'; IN0 <= '0'; IN1 <= '1'; wait for 0 ns;
SEL <= '0'; wait for 40 ns;
IN0 <= '1'; wait for 20 ns;
IN1 <= '0'; wait for 20 ns;
SEL <= '1'; wait for 40 ns;
IN1 <= '1'; wait for 20 ns;
wait;
end process;
end TBArch;
Aşa cum rezultă şi din cele prezentate, utilizarea limbajelor pentru descrierea
structurii fizice, degrevează proiectantul de activitatea privind amănuntele realizării
fizice a dispozitivului numeric, atenţia fiind îndreptată în primul rând spre funcţiile şi
performanţele sistemului.
Modul de implementare fizică a structurii proiectate reprezintă tehnologii proprii
ale firmelor producătoare de dispozitive numerice de tip ASIC (Application-Specific
Integrated Circuit) sau FPGA (Field-Programmable Gate Array) şi sunt supuse
continuu îmbunatăţirilor şi perfecţionărilor.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
108
CAPITOLUL 2
2.1. Introducere
Circuitele logice secvenţiale (CLS) sunt circuite logice la care starea ieşirilor la
un moment dat depinde de starea intrărilor la acel moment de timp şi de stările
anterioare ale circuitului. Din acest motiv se spune că circuitele logice secvenţiale sunt
circuite cu memorie.
Schema bloc a unui circuit logic secvenţial este prezentată în figura 2.1.
principale
Intrări
. .
Ieşiri
. .
. .
xn Circuit zm
y'0 y0 logic
Δ1 combina-
y’1 y1 ţional
secundare
. Δ2
secundare
.
Intrări
Ieşiri
. .
. .
y’k yk
Δk
z0 = z0 ( x0 , x1 , K, xn , y0 , y1 , K, yk )
z1 = z1 ( x0 , x1 , K, xn , y0 , y1 , K, yk )
(2.1)
M
zm = zm ( x0 , x1 , K, xn , y0 , y1 , K, yk )
y0' = y0' ( x0 , x1 , K, xn , y0 , y1 , K, yk )
y1' = y1' ( x0 , x1 , K, xn , y0 , y1 , K, yk )
(2.2)
M
yk' = yk' ( x0 , x1 , K, xn , y0 , y1 , K, yk )
z0 = z0 ( y0 , y1 , K, yk )
z1 = z1 ( y0 , y1 , K, yk )
(2.3)
M
zm = z m ( y0 , y1 , K, yk )
Circuitele secvenţiale la care ecuaţiile ieşirii sunt de forma (2.3) iar ecuaţiile stării
urmatoare de forma (2.2) se numesc circuite secvenţiale de tipul Moore, iar inodelul lor
matematic, automat de tipul Moore.
Atunci când numărul de stări interne ale unui circuit secvenţial este finit, circuitul
este denumit circuit secvential finit iar modelul sau matematic, automat finit.
În continuare se vor trata numai circuitele secvenţiale binare, la care fiecare dintre
variabilele de intrare, de ieşire, respectiv de stare pot avea numai două valori, zero şi unu,
cu număr finit de stări.
Temporizarea semnalelor este foarte importantă în circuitele secvenţiale. În acest
sens, circuitele logice secvenţiale sunt clasificate în două categorii:
amplitudine front
front
crescător
descrescător
timp
durata
palier unu
perioada (HIGH) palier zero
LOW
Figura 2.2. Elementele semnalului de ceas.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
111
ceas (clock, tact). În mod obişnuit semnalul de ceas (clock) este un semnal
dreptunghiular ale cărui elemente sunt redate în figura 2.2.
Când semnalul de ceas face o tranziţie de la zero la unu, avem un front
crescător; când semnalul de ceas face o tranziţie de la unu la zero, avem un front
căzător (sau descrescător).
Din diagrama de timp a semnalului se poate observa că perioada semnalului de
clock este intervalul de timp dintre două tranziţii succesive în acelaşi sens (între două
fronturi crescătoare sau între două fronturi căzătoare).
Tranziţiile în circuitele secvenţiale sincrone au loc doar în momentele când
semnalul de clock are fie un front crescător, fie un front căzător. La ieşirea unui circuit
sincron nu are loc nici o schimbare între două fronturi succesive, indiferent de valoarea
variabilelor aplicate la intrare.
Frecvenţa semnalului de ceas este inversul periadei semnalului de ceas.
Lăţimea semnalului de ceas este definită ca fiind intervalul de timp în care
semanlul are valoarea unu. Raportul dintre lăţimea semnalului şi perioada acestuia este
numit factor de umplere.
Un semnal de clock este activ pe front crescător dacă starea circuitului sincron se
schimbă pe frontul crescător al semnalului de clock. Dacă starea circuitului sincron se
schimbă pe frontul căzător, semnalul de clock este activ pe front căzător.
U1A U1A
2 2 Y’1
X0 X0
1 1
Δ0
Z0 Z0
3 3
Y1
7402
7402
U2A
U2A
2
1 Y0 2 Y’2
Z1
X1
3
3
1
Δ1 Z1
7402 X1
7402
Fig 2.3.a.
Fig 2.3.b.
stabile.
x0 z0
x1 z1
…
xn CIRCUIT LOGIC
zm
COMBINAŢIONAL
y0 y'0
y1 y'1
…
…
yk y'k
Q S
CBk R
…
…
Q S
CB1 R
Q S
CB0 R
SINCRONIZARE
Circuitul din fig. 2.3b are ieşirile z0, z1 identice cu intrările secundare y0,
respectiv y1. Ieşirea depinde numai de starea internă, deci circuitul secvenţial este de
tipul Moore. Deoarece există două variabile de stare, două intrări şi două ieşiri, circuitul
are patru stări interne, patru stări diferite ale intrărilor şi patru stări diferite ale ieşirilor şi
anume: 00, 01, 11 şi 10. Pentru a putea completa tabelul tranziţiilor se caută expresiile
funcţiilor y'0 şi y'1 realizate de circuit. În acest scop se foloseşte tabelul 2.2 întocmit în
modul arătat în paragraful 1.2 (tabelul 1.2).
TABELUL 2.2.
x0 x1 y0 y1 y'0 y'1 Observaţii Cunoscând funcţiile y'0(x0 x1, y0, y1) şi y'1(x0
1 y0' = x0 + y1 x1, y0, y1) se completează tabelul tranziţiilor
şi al ieşirilor (tabelul 2.1.a şi b.). Analizând
0 x x 0
tabelul 2.1.a observăm că, spre exemplu,
1 y1' = x1 + y0 pentru x0=0, x1=0 şi y0=0, y1=0 (intersecţia
x 0 0 x primei linii cu prima coloană) se obţine
valoarea y'0=1, y'1=1. Această valoare devine
valoarea lui y0y1 după o întărziere Δ (starea următoare devine stare prezentă) şi atunci
ne ducem în tabel la situaţia x0=0, x1=0 şi y0=1, y1=1. Pentru aceasta y'0=0, y'1=0 şi ne
întoarcem la prima stare. Rezultă deci, că circuitul oscilează între aceste două stări, fapt
semnalat în tabel cu săgetile cu linie punctată. Dacă vom considera acum că la intrările
circuitului avem situaţia x0=0, x1=0 şi y0=0, y1=1, observam din tabel că starea
următoare este y'0=0, y'1=1 ceea ce conduce la concluzia că circuitul rămâne în această
stare şi deci avem o stare stabilă. Săgeţile cu linie plină indică evoluţia circuitului către
stările stabile. În tabelul tranziţiilor (tabelul 2.1.a) s-au încercuit stările stabile. După
cum se vede, circuitu1 are trei stări stabile. În practică se găsesc însă numai două dintre
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
114
acestea : starea 10, numită starea 1 şi starea 01, denumită starea 0. Aceasta se datoreşte
faptului că la un circuit real nu poate fi controlată tranziţia din starea 00, decât în cazul
când se modifică numai una dintre variabilele de intrare. De exemplu, dacă circuitul se
află în starea stabila 00, ceea ce corespunde la x0=l şi x1=l şi se modifică starea intrării
x0 din 1 în 0, se trece din starea stabilă 00 în starea instabilă 10 din care se trece apoi în
starea stabila 10 (tabelul tranziţiilor, coloana a doua). Dacă însă circuitul se află în
starea stabila 00 şi se modifică intrarea x1 din 1 în 0, se trece prin starea instabilă. 01 în
starea stabila 01 (tabelul tranziţiilor, coloana a patra). Atunci când circuitul se află în
starea stabilă 00 şi se modifică ambele intrări, adică starea intrărilor devine x0=0 şi
x1=0, circuitul ar trebui sa intre teoretic în oscilaţie, adică să facă tot timpul tranziţia din
starea instabilă 11 în starea instabilă 00 (prima coloană din tabelul tranziţiilor). Această
situaţe nu poate să apară în practică deoarece, chiar dacă s-ar putea modifica simultan
ambele intrări, nu se pot modifica simultan, din cauza întârzierilor diferite pe cele două
căi de legatură inversă, stările interne ale circuitului astlel încât aceasta se stabileşte
după cum se modifică mai repede y0 sau y1, fie în starea 10 fie în starea 01. Pentru ca
circuitul să poată funcţiona determinist se impune deci condiţia ca intrările sa nu fie
niciodată simultan în starea 1. Aceasta condiţie se poate formula prin expresia logică :
x0 ⋅ x1 = 0 (2.5)
impunând circuitului studiat anterior coudiţia (2.5), acesta devine un circuit cu două
stări stabile, denumit circuit basculant bistabil RS ( x0 = S , x1 = R, z0 = Q, z1 = Q , figura
2.5).
SR
00 01 11 10
S
Q Q
1 1 0 - 1
0 0 0 - 1
Q Q⎢
R
a. b.
Timpul cât intrarea S respectiv intrarea R trebuie să stea în starea unu pentru ca
circuitul să fie adus, indiferent în ce stare s-ar afla, în starea unu, respectiv zero, este
limitat numai inferior şi anume acest timp trebuie să fie cel puţin egal cu suma
întârzierilor Δ0 şi Δ1. Deoarece există numai două stări stabile se foloseşte o singură
variabilă de stare, notata în figura 2.5 cu Q, care joacă şi rolul de variabilă de ieşire
(pentru convenţia facută privind işirile, z0 = Q, z1 = Q ). Tabelul tranziţiilor pentru
circuitul basculant bistabil RS este redat în figura 2.5b. Conform celor discutate, acest
tabel se construieşte astfel: prma coloană, din stânga tabelului, va conţine cele două stări
stabile ale circuitului pentru situaţia în care S=0 şi R=0; coloana a doua este coloana
comenzii RESET (S=0, R=1) în care circuitul trece din starea instabilă zero (când Q=1)
în starea stabilă zero; coloana a treia nu este definită pentru că se exlude situaţia în care
S=1, R=1 iar coloana a patra este coloana comenzii de SET când circuitul trece din
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
115
starea instabilă unu (când Q=0) în starea stabila unu. Trebuie menţionat că în timpul
tranziţiilor cele două ieşiri, respectiv intrări secundare nu sunt întotdeauna
complementare după cum se poate vedea din tabelul tranziţiilor 2.1 a. Din tabelul
tranziţiilor rezultat în urma consideraţiilor făcute mai sus (fig. 2.5b), se obţine ecuaţia
stării următoare, Q' ca funcţie de variabilele de intrare Q, R şi S sub forma :
Q| = S R + Q R (2.6)
determinată prin gruparea termenilor din tabelul prezentat în figura 2.5. Dacă ţinem cont
şi de faptul că S şi R nu pot fi simultan unu, adică:
SR = 0 (2.7)
(
Q| = S R + Q R + SR = S R + R + Q R = S + Q R ) (2.8)
11 10 00 01 tipul RS cu elemente
11
3
Q
(y|1)
2
R
74LS00
10 10 10 11 logice SI-NU, (fig.
11
Fig. 2.6. Bistabil RS cu 2.6.) căruia îi
porţi NAND corespunde tabelul
y'0y'1
tranziţiilor 2.3.
Trebuie notat faptul că nu s-au mai reprezentat întârzierile dar se ţine cont de ele. Acest
tabel se obţine procedând la fel ca şi în cazul circuitelor basculante bistabile de tipul RS cu
elemente logice SAU-NU. Se obţine tabelul 2.4. care reprezintă tabelul tranziţiilor
circuitului basculant bistabil RS realizat cu circuite ŞI-NU. Se vede imediat că ecuaţia care
descrie acest circuit este ecuaţia (2.8).
Z1
TABELUL 2.4. U2A
SR 00 01 11 10
X0
1
3
Q 2
1 - 1 1 0 7400
Z0
0 - 1 0 0 U3A
1
X1
3
| 2
Q
7400
U1
Circuitele basculante Y'
Q R
bistabile RS sunt circuite secvenţiale
elementare care pot juca rolul de Q S
element de memorie în cadrul unor Fig. 2.7. Circuit secvenţial cu bistabil RS.
circuite secvenţiale mai complexe.
Ca exemplu, se va analiza circuitul secvenţial din figura 2.7.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
116
Starea intenă a acestui circuit este determinată de starea bistabilului RS din bucla
de reacţie şi se modifică în conformitate cu ecuaţia de stare a acestuia, deci starea
următoare a circuitului va fi dată de relaţia :
Y | = S + RY (2.9)
( )
Y | = x1Y + x0 + Y Y = x0Y + x1Y (2.11)
TABELUL 2.5.
x0x1 Acestei ecuaţii îi corespunde tabelul tranziţiilor 2.5. Din
00 01 11 10
Y acest tabel rezultă că circuitul analizat se comportă, atâta
0 0 1 1 0 timp cât se aplică semnal de comandă numai la una din
1 1 1 0 0 intrări, ca un circuit basculant bistabil RS, iar atunci când
se comandă ambele intrări circuitul „basculeaza” (işi
Y | schimbă starea). În cazul circuitului analizat aplicarea unui
semnal de comandă la una din intrari
U1A 1
U2A
U3A înseamnă aducerea intrării respective
x
1
1 3 2
2 3 1
3 3 în starea 1. Circuitul cu o asemenea
2
74LS08
2 z comportare poartă denumirea de
74LS32 74LS32
circuit basculant bistabil JK, la care
a. se noteaza cu J intrarea de aducere in
starea 1 (J=x1,) iar cu K intrarea de
U1A
|
x y1 1 y0
aducere în starea 0 (K=x0). După cum
U2A
74LS32
se vede din tabelul tranziţiilor 2.5, pe
2 U3A
coloana corespunzătoare stării
y0 74LS08
3
| z intrărilor 11 nu există stare stabilă,
74LS32 y 1
U4
Δ1 deci acest circuit nu poate funcţiona
DELAY
asincron. Ecuaţia de stare a
U5 circuitului basculant bistabil JK
Δ0
asincron se poate obţine din ecuaţia
(2.11) realizând modificările
DELAY
b.
Figura 2.8. Circuit secvenţial asincron. menţionate mai sus. Se obţine ecuaţia
(2.12):
Q| = K Q + J Q (2.12)
Q| = T Q + T Q (2.13)
y0| = x + y1
(2.14)
y1| = xy0 + y1
Unde y|i(t) = yi(t+Δ), pentru i=0 şi 1, iar ecuaţia ieşirii, z, este dată de relaţia :
z = xy1 + y2 (2.15)
y|0y|1 z y|0y|1/z
se obţine tabelul 2.8 sau folosind numai indicii stărilor, ieşirilor şi intrărilor din relaţiile
(2.16), se obţine tabelul stărilor 2.9.
stare i0 i1 stare 0 1
prezentă prezentă
q0 q0/w0 q3/w0 0 0/0 3/0
q1 q2/w1 q2/w1 1 2/1 2/1
q2 q2/w1 q2/w1 2 2/1 2/1
q3 q0/w0 q2/w1 3 0/0 2/1
starea următoare/ieşire starea următoare/ieşire
0/1∨1/1
1/0 1/1
0/0
11 11
00∨10 00∨01 00 10
11
01
Fig. 2.9. Graful tranziţiilor Fig. 2.10. Graful tranziţiilor
pentru circuitul secvenţial din pentru circuitul secvenţial din
figura 2.7. figura 2.8.
Automatul finit A este dat prin urmare prin 5-uplul ordonat A =(Q, I, W, τ, ω).
De exemplu, se consideră automatul finit A1 dat prin :
⎧τ (q , i ) = q1 , ⎧ω (q0 , i0 ) = w1 ,
Q = {q0 , q1 , q2 }, ⎪ 0 0 ⎪ω (q , i ) = w ,
⎪τ (q1 , i0 ) = q2 , ⎪ 0 1
I = {i0 , i1}, ⎨ ⎨
0
(2.17)
⎪τ (q2 , i0 ) = q0 , ω (
⎪ 1 0q , i ) = w 0,
W = {w0 , w1}.
⎪⎩τ (q2 , i1 ) = q1 , ⎪⎩ω (q2 , i0 ) = w1.
Acest automat poate fi reprezentat prin diagrama stărilor din figura 2.11.
Un automat A este incomplet definit din punct de vedere al tranziţiilor dacă
Dτ=Q x I, şi complet definit dacă Dτ = Dω = Q x I. Atunci când un automat nu este
complet definit, el se numeşte automat incomplet sau automat incomplet definit.
Automatul A1 reprezentat prin diagrama stărilor din figura 2.11 este un exemplu de
automat incomplet definit.
Un automat finit Moore, A*, poate fi definit prin:
⎪⎧ω (q0 ) = w1
*
⎨ * (2.18)
⎪⎩ω (q2 ) = w0
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
120
i1/w0 i0/w1 i0
q0 q1 q0/w1 q1/-
i0/w0 i0
i1/- i0 i1
i0/w1 q2 q2/w0
Fig. 2.11 Diagrama stărilor Fig. 2.12. Diagrama stărilor
pentru un automat Mealy. pentru un automat Moore.
i1/w1
q0 q1 q2
q0 i0/w0∨i1/w1 q1 q0 ⎡ 0 i0 / w0 ∨ i1 / w1 0 ⎤
C A2 = q1 ⎢⎢ i1 / w1 0 i0 / − ⎥⎥
i0/w0
i0/w0 i0/- q2 ⎢⎣i0 / w0 i1 / w0 0 ⎥⎦
q2
Fig. 2.13. Diagrama stărilor şi matricea de conexiuni pentru
un automat Mealy.
i0
q0 q1 q2
q0/w0 q1/- q0 ⎡ 0 i0 i1 ⎤ ⎡ w0 ⎤
i0
i1 C *
A2
⎢
= q1 ⎢i0 0 i1 ⎥ W = ⎢⎢ − ⎥⎥
⎥
i1 i0∨ i1 q2 ⎢⎣ 0 i0 ∨ i1 0⎥⎦ ⎢⎣ w1 ⎥⎦
q2/w1
Fig. 2.14. Diagrama stărilor şi matricea de conexiuni pentru
un automat Moore.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
121
U10A
2
74LS08
economic decât primul.
1 2
74LS04 U5A
1
U8A
Vom explica modul de
3
1
2
3
U6A
analiză a circuitelor logice
2
74LS32
74LS00
1
2
3 secvenţiale printr-un exemplu.
CLC
74LS00 Considerăm circuitul din
U11 figura 2.15 compus din două
părţi, o parte combinaţională
Q0 D0 Q D
U12
notată pe figură cu CLC şi o
Q1 D1 Q D parte secvenţială, de memorie,
realizată cu două circuite
Memorie basculante de tip D.
Circuitul are o singură
Fig. 2.15. Circuit logic secvenţial.
intrare notată cu x şi o singură
ieşire notată cu z.
Ecuaţia de stare a circuitului basculant D asincron este foarte simplă, circuitul
repetă la ieşirea Q ceea ce se aplică pe intrarea D:
Q| = D (2.19)
z = xQ0
D0 = xQ0 + xQ1 (2.20)
D1 = xQ0 Q1 + xQ1Q0 = xQ0 Q1 + xQ1 + Q0
z = xQ0Q1 + xQ0 Q1
D0 = xQ0Q1 + xQ0 Q1 + xQ0Q1 + xQ0Q1
(2.21)
D1 = xQ0 Q1 + xQ1Q0 = xQ0 Q1 + xQ0Q1 + xQ0Q1 +
+ xQ0Q1 + xQ0Q1 + xQ0 Q1 + xQ0 Q1
Înlocuind relaţiile (2.21) în (2.19) se poate construi acum tabelul tranziţiilor şi al ieşirii
(tabelul 2.10).
TABELUL 2.10.
Q0Q1 Q0Q1
00 01 11 10 00 01 11 10
x x
0 01 11 11 00 0 0 0 0 0
1 01 01 10 11 1 0 0 1 1
Q|0Q|1 z
Circuitul studiat are două variabile de stare. Ca urmare cele 4 combinaţii posibile
ale valorilor acestora definesc stările circuitului. Putem scrie următoarea codificare:
y0 y1 sk
0 0 -> s0
0 1 -> s1 (2.22)
1 0 -> s2
1 1 -> sk
Dintre etapele prezentate mai sus, prima este cea mai dificilă şi afectată de erori.
Parcurgerea ei cu succes depinde foarte mult de experienţa şi abilităţile proiectantului.
Fiecare din celelalte etape pot fi parcurse în mod sistematic manual sau folosind
programe pe calculator special realizate.
În ceea ce priveşte prima etapă, se recomandă construirea unui label de tranziţii
primar unde să fie o singură stare stabilă pe fiecare linie a tabelului. Fiind doar o singură
stare stabilă pe fiecare linie a tabelului, ieşirea poate fi considerată ca depinzând numai de
starea curentă. În acest fel este posibil să se introducă stări suplimentare care însă pot fi
eliminate mai târziu în etapa de minimizare a stărilor.
În continuare vom exemplifica acest procedeu de sinteză a circuitelor logice
combinaţionale.
2.7.1. Introducere
memorie circuite basculante care pot funcţiona atât în regim sincron cât şi asincron,
intrările asincrone fiind utilizate pentru aducerea circuitului în starea iniţială, independent
de impulsul de tact.
TABELUL 2.12.
U3A U1A
/SH
1 1
S 3 3
Q
Circuitul basculant
2 2
0 0 Q(t) H
bistabil de tipul RS . Circuilul
0 1 0 U4A basculant bistabil de tipul RS,
U2A
1 0 1
/RH 3 3
2 2 /Q
R
1 1 ?
74LS00
respectiv SAU-NU, analizat în
74LS00
SH = S ⋅ H
(2.23)
RH = R ⋅ H
Ţinând cont de relaţiile (2.23) rezultă schema circuitului basculant bistabil din
figura 2.17.
Ecuaţia caracteristică a acestui bistabil, dedusă în paragraful 2.2, denumită şi
ecuaţie de stare, este următoarea:
Q| = S + RQ (2.24)
unde prin Q| s-a notat starea la momentul t+1, iar prin Q starea la momentul t.
În cadrul unui circuit secvenţial, circuitul basculant bistabil are rolul de a memora
starea unei anumite variabile de stare. Din acest motiv, starea sa trebuie să se modifice
funcţie de variabilele de intrare ale circuitului, în conformitate cu expresia care descrie
starea următoare a variabilei de stare considerate, denumită în acest caz ecuaţia de aplicare
a bistabilului. În general, starea următoare a unei variabile de stare Qk notată Q|k este o
funcţie de variabilele de intrare Xi, pentru i = l, ... , n şi de celalalte variabile de stare Qj,
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
125
pentru j = 1, ..., k, ..., p unde n şi p sunt numărul de variabile de intrare, respectiv de stare
pentru circnitul considerat (relaţia 2.25).
Dacă pentru memorarea stării acestei variabile se foloseşte un bistabil, notat tot cu
Qk, expresia (2.25) devine ecuaţia de aplicare pentru acest bistabil. Pentru ca bistabilul să
memoreze starea următoare a variabilei de stare, trebuie ca la intrărite sale să se aplice
astfel de comenzi încât starea sa următoare să corespundă ecuaţiei de aplicare. Pe baza
acestei condiţii se stabilesc expresiile booleene care descriu comenzile ce trebuie aplicate
la intrările bistabilului, denumite ecuaţiile intrărilor bistabilului. Problema determinării
ecuaţiilor de intrare pentru un anumit bistabil, în cazul considerat aici pentru bistabilul RS,
se reduce la rezolvarea sistemului de ecuaţii booleene (2.26), format din ecuaţia de aplicare
şi ecuaţia de stare a bistabilului:
S = f ( x1 , x2 ,..., xn , Q1 , Q2 ,..., Q p ),
(2.27)
R = f ( x1 , x2 ,..., xn , Q1 , Q2 ,..., Q p ).
Există mai multe metode practice pentru rezolvarea acestei probleme. Una din
metodele frecvent folosite se bazează pe tabelul de excitaţie al bistabilului. Tabelul de
excitaţie al unui anumit tip de bistabil arată care trebuie să fie valorile intrărilor pentru ca
bistabilul aflat într-o anumită stare sa treacă într-o stare următoare bine precizată.
TABELUL 2.13.
Q(t) Q(t+1) S R În tabelul excitaţiilor pentru bistabilul RS (tabelul 2.13) se
0 0 0 înscrie pe coloana intrării S, respectiv R, valoarea 0 şi 1, atunci
x
0 1 1 când una dintre aceste valori este obligatorie pentru tranziţia
0
1 0 0 respectivă sau se scrie un x, atunci când valoarea uneia sau a
1
1 1 x ambelor intrări este indiferentă. De exemplu, atunci când starea
0
prezentă a bistabitului este 0, iar starea sa următoare trebuie sa fie
tot 0, este obligatoriu ca intrarea S să fie în starea 0, dar intrarea R poate să fie în starea 0
sau în starea 1, adică se poate scrie x, după cum se vede în primul rând al tabelului 2.13.
Acest tabel se foloseşte pentru deducerea ecuaţiilor intrărilor bistabilului RS, aplicat într-
un caz concret, în felul urmator :
A| = AX 1 + B X 1 (2.28)
TABELUL 2.14.
X1 B A A| S R Se întocmeşte tabelul 2.14 pe baza relaţiei 2.28 şi a
0 0 0 0 0 x tabelului 2.13. Tabelul se realizează, aşa cum s-a arătat mai sus,
0 0 1 0 0 1 pe baza variabilelor funcţiei de aplicare (X1, B, A) cu ajutorul
0 1 0 1 1 0 ecuaţiei 2.28. La acest tabel se mai adaugă coloanele S şi R care
0 1 1 1 x 0 se completează conform tabelului 2.13, ţinând cont de faptul că
1 0 0 1 1 0 A reprezintă starea prezentă iar A| starea următoare.
1 0 1 0 0 1 Din tabelul 2.14 rezultă ecuaţiile intrărilor S şi R, în
funcţie de variabilele X1, B şi A, relaţia (2.29), obţnute în urma
1 1 0 1 1 0
minimizării funcţiilor S=f(X1, B, A) şi R=f(X1, B, A) cu ajutorul
1 1 1 0 0 1
diagramelor Karnaugh din figura 2.18.
AB AB
00 01 11 10 00 01 11 10
X1 X1
0 0 1 x 0 0 x 0 0 1
1 1 1 0 0 1 0 0 1 1
Funcţia S Funcţia R
S = AB + AX 1 = A(B + X 1 )
(2.29)
(
R = AB + AX 1 = A B + X 1 )
În general, ecuaţia de aplicare a unui bistabil Q se poate scrie, folosind teorema
dezvoltării, sub forma:
unde gQ şi hQ sunt funcţii boleene având ca variabile toate variabilele din ecuaţia de
aplicare a bistabilului Q cu excepţia variabilei Q.
Procedând la determinarea expresiilor intrărilor S şi R ale unui bistabil, plecând de
la ecuaţia de aplicare scrisă sub forma (2.30) se obţin, prin intermediul tabelului 2.15, în
modul arătat mai sus, funcţiile S=f(gQ, hQ, Q) şi R =f(gQ, hQ, Q), care minimizate cu
ajutorul diagramelor Karnaugh din figura 2.19, au forma :
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
127
S = QhQ ; R = Q gQ (2.31)
QhQ QhQ
00 01 11 10 00 01 11 10
gQ gQ
0 0 1 0 0 0 x 0 1 1
1 0 1 x x 1 x 0 0 0
Funcţia S Funcţia R
g A = B + X 1 ; hA = B + X 1 (2.32)
Având în vedere faptul că atunci când bistabilul RS se află în starea unu logic se
poate da comanda de aducere în starea unu logic fară să se modifice nimic, rezultă că
pentru ecuaţia intrării S se pot considera pe lângă unităţile din zona A şi cele din zona A,
adică toate unităţile din diagrama Karnaugh pe care se reprezintă ecuaţia de aplicare. Din
aceleaşi motive, pentru scrierea ecuaţiei intrării R se pot considera toate zerourile din
diagramă. Prin urmare, unităţile din zona A reprezintă condiţii ,,nu ţine cont" pentru
scrierea expresiei lui S, iar zerourile din zona A reprezintă condiţii ,,nu ţine cont" pentru
scrierea expresiei lui R. În diagrama din figura 2.20.b căsuţele corespunzătoare acestor
condiţii sunt marcate prin trasarea diagonalelor. Urmărind această diagramă se constată că
nu se pot obţine pentru S şi R expresii mai simple decât cele deduse anterior. De fapt în
aceste completări, diagrama din figura 2.20.b corespunde în întregime cu diagramele din
figura 2.18.
Circuitul basculant bistabil de tipul JK. Spre deosebire de circuital basculant bistabil RS,
circuitul basculant bistabil JK admite comenzi simultane la ambele intrări, circuitul fiind
astfel conceput incât atunci când apare un asemenea caz să-şi modifice starea. Tabelul
caracteristic şi tabelul excitaţiilor pentru un circuit basculant bistabil de tipul JK sunt date
în tabelul 2.16, respectiv 2.17.
Ecuaţia de stare a circuitului basculant bistabil JK este dată de relaţia:
Q = Q K + QJ
|
(2.33)
T T
U6A U10A
U4A 1 U8A
U2A 1
1 3 1 3
/Q
1 3 2 2 12 2 /Q
3 2 K 13
2 7400 7400
K 7400 7410
7408
a. b.
Considerând circuitul bistabil RS realizat sub forma din figura 2.17 şi având
ecuaţiile intrărilor (2.34), rezultă pentru circuitul bistabil JK schema din figura 2.22.a.
Facând uz de proprietatea de asociativitate a funcţiei SI, această schemă se poate realiza cu
mai puţine elemente în forma echivalentă dată în figura 2.22.b. După cum s-a văzul în
analiza făcuta asupra circuitelor sincrone, un asemenea circuit poate funcţiona corect
numai atunci când durata impulsului de sincronizare T nu depăşeşte timpul de reacţie al
circuitului.
Deducerea ecuaţiilor intrărilor bistabilului JK folosit ca element de memorare
într-un circuit secvenţial sincron se poate face în acelaşi mod ca şi în cazul circuitului
bistabil RS, folosind în acest scop tabelul excitaţiilor. În acest caz însă, expresiile intrărilor
rezultă mai simplu, prin identificarea lor cu funcţiile hQ şi gQ din ecuaţia de aplicare,
relaţiile (2.35) şi (2.36). Astfel din :
rezultă:
K = gQ şi J = hQ (2.36)
Din cele arătate mai sus rezultă o regulă practică pentru obţinerea expresiilor intrărilor,
având funcţia de aplicare reprezentată pe diagrama Karnaugh şi anume, pentru obţinerea
expresiilor intrării J se minimizează funcţia din zona Q a diagramei, iar pentru obţinerea
expresiei intrării K se minimizează negata funcţiei din zona Q a diagramei, considerând în
acest scop zerourile din această zonă.
Pentru exemplul considerat anterior, din diagrama Karnaugh pentru ecuaţia de aplicare A|
(fig. 2.20.a) rezultă :
J = B + X 1; K = B + X1 (2.37)
Circuitul basculant bistabil de tipul T. Acest circuit basculant bistabil are o singură intrare,
notată cu T, care atunci când trece din starea zero logic în starea unu logic cauzează
schimbarea stării interne a bistabilului.
Tabelul caracteristic al circuitului basculant bistabil de tipul T şi tabelul excitaţiilor
sunt date în tabelul 2.18, respectiv 2.19.
Ecuaţia de stare a bistabilului T, rezultată din tabelul 2.18, este :
Q| = QT + QT (2.38)
Se pot concepe bistabile de tipul T care să funcţioneze sincron sau bistabile de tipul
T care să funcţioneze asincron. Pentru a obţine un circuit basculant bistabil de tipul T
sincron, se poate pleca de la faptul că circuitul basculant bistabil de tipul JK işi modifică
starea atunci când intrările J şi K sunt comandate simultan, de unde rezultă că legând
impreună intrările JK ale unui circuit basculant JK se obţine schema unui circuit basculant
bistabil de tipul T. Acesta va funcţiona corect cu aceeaşi observaţie privind durata
impulsului de sincronizare ca şi la circuitul bistabil JK. La acelaşi rezultat se ajunge şi dacă
se porneşte de la ecuaţia de stare a bistabilului T, care se impune să fie ecuaţie de aplicare
pentru un bistabil JK, relaţia (2.38), reprezentată pe diagrama Karnaugh din figura 2.23.
Din diagrama Karnaugh din figura 2.23 rezultă, ţinând cont de cele arătate mai sus,
relaţiile:
J = hA = T ; K = gA =T (2.39)
T = QhQ + Q g Q (2.40)
TABELUL 2.20.
Q| = Q g Q + QhQ =
gQ hQ Q T
= QT + Q T QhQ
00 01 11 10
0 0 0 0 0 gQ
0 0 1 0 1 0 0 1 1 1
0 1 0 1 1 1 0 1 0 0
0 1 1 0 1 Funcţia T
1 0 0 0 0
1 0 1 1 0 Figura 2.24. Determinarea ecuaţiei intrării pentru
1 1 0 1 1 bistabilul T
1 1 1 1 0
Ecuaţia intrării T de mai sus (2.40) arată că pentru obţinerea sa se consideră funcţia
hQ şi negata funcţiei gQ din ecuaţia de aplicare a bistabilului. Având în vedere acest fapt se
poate deduce o regulă practică de obţinere a expresiei minime a intrării, atunci când ecuaţia
de aplicare este reprezentată pe diagrama Karnaugh şi anume: se consideră pentru scrierea
expresiei intrării T, unităţile din zona Q şi zerourile din zona Q a diagramei.
Folosind această regulă pentru ecuaţia de aplicare dată în diagrama Karnaugh din
figura 2.20.a, a exemplului prezentat anterior, rezultă pentru intrarea T a bistabilului A
expresia:
T = X 1 + AB + AB (2.41)
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
131
a. b. c. d.
( )
Q1| = Q1 T + Q2 + Q2T (2.43.a)
Q |
2 = Q (T + Q ) + Q T
1 2 2 (2.43.b)
Pe baza expresiilor (2.43) se obţine schema logică din figura 2.26. În vederea
reducerii numărului de elemente logice se înlocuieşte variabila Q 2 de la intrarea
elementului 1 cu expresia obţinuta prin negarea expresiei (2.43.b):
(
Q 2 = Q2T ⋅ Q1 Q2 + T ) (2.44)
adică cu conjuncţia ieşirilor elementelor logice 3 şi 5, care se poate realiza aplicând aceste
ieşiri la intrările elementului logic 1, pe baza legii asociativităţii funcţiei logice SI. În
vederea înlocuirii elementului de negare 8, care realizează complementul ieşirii Q|1, se
|
scrie pe baza diagramei Karnaugh din figura 2.25.d, expresia minimă a lui Q1 :
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
132
|
Q1 = Q1T + Q1 Q 2 + Q 2T = Q1 T + Q 2 + Q 2T ( ) (2.45)
U2A
Q1 /Q1 U4A U2A
1 U4A
3 1 1
2 2 3 1
2 4 3
2 Q1' (Z) 2 4 3
Q1' (Z)
2
T /T
U1A U3A
U1A U3A
U7A 1 1
/Q2 Q2 1 1
1 1 3 3 3 2 12 3
7 3 2 2 1 3
13 2
2
U6A /Q2 U6A
U5A 1 U5A 1
U8A 1 3
6 Q2'
1 6 3
1 5 3 2 /Q1 5 3 2 Q2'
8 3 2 2
2
/Q1 /Q2
a. b.
Figura 2.26. Schema logică a unui circuit bistabil de tipul T, asincron.
|
După cum rezultă din această relaţie, funcţia Q1 se poate obţine cu elementele
logice existente în schemă şi anume ea rezultă la ieşirea elementului logic 2, de unde poate
fi aplicată la intrarea elementului 5. În urma acestor modificări se obţine schema logică din
figura 2.26.b) cu numai şase elemente logice SI-NU. Ieşirea acestui circuit, Z, este identică
cu Q1| . Circuitelor din figura 2.26 li se pot adăuga intrări de tipul R şi S la elementele
logice 2, respectiv 4.
Circuitul bistabil de tipul T, asincron, din figura 2.26.b, poate sta la baza proiectării
unui circuit bistabil de tipul T, sincron, care să funcţioneze independent de durata
impulsului de sincronizzare. În acest scop se prevede la intrare un element logic SI-NU,
care realizează funcţia T = H T , unde H este impulsul de sincronizare.
Circuital basculant bistabil de tipul D. Acest circuit basculant bistabil are o intrare notată
cu D, iar starea bistabilului este determinată de starea acestei intrări şi anume starea
următoare este aceeaşi cu a intrării D, independent de starea prezentă a bistabilului. De
obicei intrarerea D este sincronizată, iar circuitul este prevăzut cu intrări asincrone pentru
aducerea în starea 0, respectiv 1. Tabelul caracteristic şi tabelul excitaţiilor pentru bistabilul
D sunt prezentate în tabelul 2.22, respectiv 2.23.
Din tabelul caracteristic rezultă ecuaţia de stare a bistabilului D :
Q| = D (2.46)
R = D şi S = D (2.47)
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
133
iar din tabelul 2.25 rezultă că forma minimă pentru intrările J şi K este :
K=D şi J =D (2.48)
U2A U1 U2A U3
1 2 Q 1 2 Q
D R Q D K Q
T T
S /Q J /Q
/Q /Q
T T
a. b.
Figura 2.27. Sinteza circuitului bistabil de tipul D.
Intrări
Semnificaţia stării Numele stării Ieşire
00 01 11 10
Intrări
Semnificaţia stării Numele stării Ieşire
00 01 11 10
Starea iniţială SInit SInit SInit SInit Detect1 0
Noua stare Detect1 se adaugă tabelului primar prin adăugarea unei linii
suplimentare şi procesul de mai sus se reia.
Numele Intrări
Semnificaţia stării Ieşire
stării 00 01 11 10
Starea iniţială SInit SInit SInit SInit Detect1 0
S-a detectat începutul
Detect1
secvenţei
Următoarea combinaţie din secvenţă, aplicată la intrare, care va duce la activarea
ieşirii (trecerea în starea unu logic a ieşirii) z0, dacă se completează secvenţa cerută la
intrare 10 -> 11 -> 01, este 11. Asta înseamnă că dacă, aflându-ne în starea Detect1, la
intrare se aplică combinaţiile 00 sau 01, secvenţa rezultată la intrare, pâna în acest moment,
va fi una din următoarele: (10, 00) sau, respectiv (10, 01) care conform specificaţiilor nu
vor putea duce la activarea ieşirii z0. Ca urmare, în aceste două cazuri circuitul va trebui să
se întoarcă în starea iniţială pentru a relua procesul de detecţie a secvenţei corecte. În cazul
în care combinaţia la intrare este 10, rezultă ca aceasta a rămas neschimbată aşa încât
circuitul va rămâne în continuare în starea Detectl aşteptând modificarea secvenţei de
intrare. Circuitul va trece într-o stare nouă doar dacă la intrare se aplică combinaţia 11.
Această nouă stare corespunde detecţiei celei de-a doua combinaţii din secvenţa care
activează ieşirea z0 aşa încât o vom numi Detect2. leşirea circuitului ramâne în continuare
în starea zero logic. Tabelul primar va arăta astfel:
Numele Intrări
Semnificaţia stării Ieşire
stării 00 01 11 10
Starea iniţială SInit SInit SInit SInit Detect1 0
S-a detectat începutul
Detect1 SInit SInit Detect2 Detect1 0
secvenţei
S-a detectat a doua
Detect2
combinaţie din secvenţă
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
135
Numele Intrări
Semnificaţia stării Ieşire
stării 00 01 11 10
Starea iniţială SInit SInit SInit SInit Detect1 0
S-a detectat începutul
Detect1 SInit SInit Detect2 Detect1 0
secvenţei
S-a detectat a doua
Detect2 SInit Detect3 Detect2 SInit 0
combinaţie din secvenţă
S-a detectat a treia
combinaţie din secvenţă Detect3 SInit Detect3 SInit SInit 1
(ultima)
Pasul 2.
În această etapă se urmăreşte eliminarea stărilor suplimentare introduse în procesul
de determinare a tabelului de tranziţie a circuitului.
Problema realizării unui circuit secvenţial cu o anumită comportare nu are o soluţie
unică. Se pot construi circuite secvenţiale cu aceeaşi comportare, dar de complexităţi
diferite, respectiv cu preţ de cost diferit. De obicei, dintre circuitele secvenţiale cu aceeaşi
comportare, acela este mai simplu şi realizabil cu o cheltuială mai redusă care are număr
mai mic de stări. Din acest motiv este important să se reducă la minimum numărul stărilor
din diagramă, respectiv tabelul stărilor care descrie comportarea circuitului secvenţial.
Pentru reducerea numărului de stări ale unui circuit secvenţial se caută acele stări
care realizează aceeaşi funcţie, adică nu se poate face distincţie între ieşirile rezultate în
urma aplicării la intrările circuitului aflat în oricare din aceste stări a aceleiaşi secvenţe de
intrări. Aceste stări se numesc echivalente şi pot fi înlocuite printr-o singură stare.
Echivalenţa a două stări se poate defini în felul următor: două stări qi şi qj ale aceluiaşi
circuit secvenţial A1, complet definit sau făcând parte din două circuite secvenţiale complet
definite A1 şi A2 se numesc echivalente, notat qi = qj, dacă pentru orice secvenţă de intrări
de lungime arbitrară aplicată circuitului A1 aflat în starea qi se obţine aceeaşi secvenţă de
ieşiri ca şi la aplicarea aceleiaşi secvenţe circuitului A1, respectiv A2 aflate in starea qj.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
136
Echivalenţa stărilor unui singur circuit secvenţial complet definit este o relaţie de
echivalenţă; prin urmare este reflexivă, simetrică şi tranzitivă şi împarte mulţimea stărilor
circuilului în clase de echivalenţă disjuncte.
Două circuite secvenţiale Al şi A2 sunt echivalente, notat Al = A2, dacă pentru
fiecare stare qj din A2 există o stare echivalentă qi în A1 şi invers, pentru fiecare stare qi din
Al există o stare echivalentă qj în A2.
Pasul 3.
Stările automatului sunt realizate prin inermediul variabilelor de stare. Cum aceste
variabile pot lua doar două valori, rezultă că pentru n stări vom avea nevoie de cel puţin m
variabile binare, unde 2m ≥ n. În cazul nostru n = 4 aşa încât vom utiliza 2 variabile de stare
pe care le vom nota cu y0 si y1.
Vom alege următoarea codificare a stărilor:
SInit -> y0=0 y1=0
Detectl -> y0=0 y1=l
Detect2 -> y0=1 y1=l
Detect3 -> y0=1 y1=0
În general există n! posibilităţi de codificare a celor n stări.
Pasul 4.
Înlocuind codurile de mai sus în tabelul de tranziţie, obţinem:
x0x1
00 01 11 10 z0
y0y1
00 00 00 00 01 0
01 00 00 11 01 0
11 00 10 11 00 0
10 00 10 00 00 1
Din acest tabel putem obţine diagramele Karnaugh pentru funcţiile de stare Y0, Y1
şi a ieşirii z0, corespunzăoare variabilelor de stare y0 şi y1. Pe baza acestor diagrame
realizăm minimizarea funcţiilor.
Y0 = x 0 x1 y0 + x0 x1 y1
Y1 = x0 x1 y 0 + x0 x1 y1
z 0 = y0 y1
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
137
Pasul 5.
În această etapă se alege tipul de celule de memorie folosite (tip RS, JK, D,T).
Pasul 6.
Pentru tipul de memorie aleasă se construieşte tabelul de excitaţie care indică
valorile excitaţiilor ce trebuiesc aplicate intrărilor memoriilor pentru a obţine starea
următoare dorită pentru fiecare combinaţie stare actuală-intrare. Aplicand regulile din
paragraful 2.7.2 se obţin următoarele tabele de excitaţii:
Pasul 7.
Pe baza diagramei Karnaugh şi a tabelelor de excitaţie ale celulelor de memorie
folosite, se obţin expresiile funcţiilor de excitaţie.
D0 = x 0 x1Q0 + x0 x1Q1
D1 = x0 x1 Q 0 + x0 x1Q1
R0 = x1 + x0 Q1
S 0 = x0 x1Q1
R1 = x 0 + x1Q0
S1 = x0 x1 Q 0
J 0 = x0 x1Q1
K 0 = x1Q0 + x0 Q1
J1 = x0 x1 Q 0
K1 = x 0 x1 + x1Q0
Pasul 8.
Funcţia z0 Pe baza tabelului de tranziţie se obţine expresia
x0x1 funcţiei de ieşire. Pentru toate cazurile, funcţia de ieşire
00 01 11 10 depinde numai de starea circuitului şi conform diagramei
Q0Q1
Karnaugh alăturate, va avea expresia:
00 0 0 0 0
01 0 0 0 0
z0 = Q0 Q1
11 0 0 0 0
10 1 1 1 1
Pasul 9.
Pe baza ecuaţiilor determinate la paşii 8 şi 9 se trasează schema logică a circuitului
care materializează funcţiile de excitaţie şi cele de ieşire la care se adaugă şi celulele de
memorie corespunzătoare. Schemele logice sunt date mai jos pentru fiecare tip de celulă de
memorie.
2ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
139
Celule de tip D
X0
1
1 2 2 12 1 D0
13 3
2 D Q
X1 /Q 1
1 3
2 12 1 D1 2 Z0
1 2 13 3
2 D Q
/Q
1
2 12
13
Celule de tip RS
1 R0
1 3
X0 3 2 R Q
2 S0
S /Q
1 2 1
3
1 2 Z0
2 12
13
X1
1 R1
1 3
1 2 3 2 R Q
2 S0
S /Q
1
2 12
13
Celule de tip JK
X0 1 J0
2 12
13 J Q
K0
1 2
1 K /Q
31
2 3
2
1
X1 1 3
3 2 Z0
2
1 2
1 J1
2 12
13 J Q
K1
1 K /Q
3 1
2 3
2
1
3
2
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
140
Celule de tipul T
1
3
2
X0
1 T0
2 12
1 2 13 T Q
/Q
X1
1
3
2 Z0
1
3 7408
2
1 2
1 T1
2 12
13 T Q
/Q
U2A
2
OFFTIME = 1uS S 1
/Q
ONTIME = 1uS CLK 3
DELAY = 0 V
STARTVAL = 0 V
74LS02
OPPVAL = 1
Se propune ca temă explicarea formelor de undă din figura din figura 2.30.
Următorul exemplu se referă la circuitul basculant bistabil realizat cu porţi ŞI-NU.
Se realizează în aplicaţia OrCAD Capture schema electrică din figura 2.31.
U2A
1
OFFTIME = 1uS /R U4A 3
ONTIME = 1uS CLK
DELAY = 0
1
7404
2 2
/Q
V
Figura 2.32. Rezultatul simulării circuitului din
figura 2.31.
STARTVAL = 0 V
7400
OPPVAL = 1
Se vor compara formele de undă din figura 2.30 cu cele din figura 2.32.
Simularea funcţionării unui circuit basculant bistabil sincron de tipul JK se va face
cu ajutorul circuitului din figura 2.33 iar rezultatul simulării este arătat în figura 2.34.
OFFTIME = 10mS J
ONTIME = 10mS CLK
DELAY = 0
STARTVAL = 0 V
OPPVAL = 1
U4A
OFFTIME = 5msS T 14 12
ONTIME = 5msS CLK J Q Q
DELAY = 0 1 V
STARTVAL = 0 CLK
V
OPPVAL = 1 3 13
CLR
K Q /Q
V
OFFTIME = 20msS
ONTIME = 20msSCLK
K 74LS73A
Figura 2.34. Rezultatul simulării bistabilului de tip
2
DELAY = 0
STARTVAL = 0
OPPVAL = 1
V
HI
JK
Figura 2.33. Schema de simulare a unui
circuit basculant bistabil de tipul JK.
În cazul simulării circuitelor
electronice care conţin circuite
basculante bistabile, cu ajutorul
aplicaţiei Orcad PSpice AD, se
efectuează aceeaşi paşi ce cei descrişi
în paragraful 1.6. În plus, se poate
stabili starea iniţială (la începutul
simulării) a circuitelor basculante
bistabile. Această stare iniţială se
stabileşte în profilul de simulare, aşa
cum este arătat în figura 2.35.
Pentru aceasta, se selectează din
meniul PSpice aflat în bara principală a
aplicaţiei OrCAD Capture, opţiunea de
Figura 2.35. Stabilirea stării iniţiale a bistabililor. creare a unui profil de simulare: New
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
142
Simulation Profile sau opţiunea de editare a unui profil de simulare existent: Edit
Simulation Profile, după caz. În fereastra apărută, selectăm Options, de aici Gate-level
Simulation şi apoi pentru Initialize all flip-flops to selectăm valoarea zero aşa cum se
arată în figura 2.35. Starea iniţială a bistabilelor poate fi zero, unu sau oarecare
(simbolozată cu X).
EXEMPLUL 36.
// Modul latch D
assign Q = Ck ? D : Q;
assign QN = Ck ? ~D : QN;
endmodule
Structura fişierului de test Test Bench, numit Latch D_TB.v este prezentată în
exemplul 37.
EXEMPLUL 37.
`timescale 1 ns/1ns
reg D;
wire Q, QN;
reg Ck;
initial
begin
Ck = 0;
D = 0;
#5 D = 1;
#30 D = 0;
#2 D = 1;
#8 D = 0;
$finish;
end
always #10 Ck <= ~Ck;
endmodule
EXEMPLUL 37.
-- Entitatea
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY D_latch IS
PORT(Ck, D: IN std_logic;
Q, QN: OUT std_logic);
END D_latch;
-- Arhitectura
ARCHITECTURE Comportament OF D_latch IS
BEGIN
Latch: PROCESS(Ck, D)
BEGIN
IF (Ck='1') THEN
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
144
Q <= D;
QN <= Not D;
END IF;
END PROCESS;
END Comportament;
EXEMPLUL 38.
-- Entitatea de test
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY Test IS
END Test;
COMPONENT Dcomp
PORT(Ck, D: IN std_logic;
Q, QN: OUT std_logic);
END COMPONENT;
BEGIN
END Test;
Seminar
Seminar 1
1.1. Cu ajutorul tabelelor de adevăr se vor verifica teorema absorbţiei (relaţia 0.11 din
curs) şi teorema de Morgan (relaţia 0.12 din curs).
f3 = P1 + P3 + P5 + P7 (s.1)
Pi ⋅ Pj = 0 pentru i ≠ j (s.3)
Si + Sj = 1 pentru i ≠ j (s.3)
xy = x ⋅ x y (s.4)
este adevărată.
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
146
Rezolvare
( )
x ⋅ x y = x ⋅ x + y = x x + xy = xy
1.7. Se consideră circuitul logic din figura s.1. Să se analizeze dacă acest circuit este
combinaţional. U1A
1
x0 3
2
x1 U3A
7408 1
2 12
x2 13 y0
U2A 7427
1
x3 3
2
7408
Figura s.1.
Rezolvare
U1A Se constată uşor că numerotarea reţelei
x0
1
3 A conform regulii 1.1 din curs (pagina 19) nu
2
x1
7408 1
U3A
este posibilă deci vom studia dacă această
x2
2
13
12
y0 reţea este combinaţională. Pentru aceasta se
1
U2A 7427 introduce variabila secundară xa şi se
x3
2
3
B
studiază influenţa acestei variabile, cu
xa 7408 ajutorul tabelului de adevăr, asupra ieşirii y0.
Figura s.2. În orma construirii tabelului de adevăr se
constată că ieşirea y0 depinde de variabila xa
şi deci circuitul nu este combinaţional.
1.8. Să se construiască folosind numai porţi ŞI-NU (NAND) circuitul logic secvenţial a
cărui ecuaţie logică a ieşirii este:
y0 = x3 x0 + x 2 x1
Rezolvare
y0 = x3 x0 ⋅ x2 x1
inversorul se va construi cu ajutorul unei porţi ŞI-NU cu toate intrările legate între ele (se
va studia şi exemplul de la pagina 28, figura 1.9 din curs).
1.9. Circuitul obţinut la problema 1.8 reprezintă un arbore boolean? Dacă răspunsul este
afirmativ atunci se va face analiza acestui circuit conform metodei descrise în curs la
pagina 23 din curs.
Seminar 2
2.1. Se dă circuitul din figura s.3.
1
x0 3 1
2 3
x1 2
1
3 1
2 3
2
1 1
x2 3 1 3
2 3 2 y0
x3 2 1
1 3
3 2
2
Figura s.3.
Să se analizeze dacă circuitul este combinaţional şi dacă răspunsul este afirmativ să se scrie
ecuaţia funcţiei de ieşire y0 şi să se realizeze un program pentru verificarea funcţiei
obţinute.
Rezolvare
Circuitul nu poate fi numerotat conform regulii 1.1 din curs. Se trece la analiza circuitului.
1
x0 3 1
2 1 3
x1 a 2 5
1 e
3 1
2 3 3
c 2
h
1 1
x2 3 1 3
2 2 3 2 y0
x3 b xa ? 1
1 f 3
3 2
2 4 g
d
Figura s.4.
Figura s.5.
Se observă din tabel că funcţia de ieşire y0 nu depinde de variabila xa şi deci circuitul este
combinaţional.
Pentru a scrie ecuaţia de ieşire se poate determină succesiv:
a = x1 x0
b = x3 x2
c = bx0 = x3 x2 x0
d = bx3 = x3 x2 x3
e = ac = x1 x0 x3 x2 x0
f = c + xa = x3 x2 x0 + xa
(
g = df = x3 x2 x3 x3 x2 x0 + xa )
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
149
( )
h = ge = x3 x2 x3 x3 x2 x0 + xa x1 x0 x3 x2 x0
( ) ( )
y0 = gh = x3 x2 x3 x3 x2 x0 + xa x3 x2 x3 x3 x2 x0 + xa x1 x0 x3 x2 x0
y0 = x3 x2 x3 x3 x2 x0 x3 x2 x3 x3 x2 x0 x1 x0 x3 x2 x0
program vizualizare_clc_4_variabile;
label
01,02;
type
tstr=string[8];
var
termeni:array[0..15] of tstr;
y,a,b,c,d,n,m,u:byte;
mes:tstr;
else
if a=0 then exit;
end;
m:=pos('b',termeni);
if m<>0 then
begin
if m<>1 then
begin
if termeni[m-1]='/' then
begin
if not b = 254 then exit;
end
else
if b=0 then exit;
end
else
if b=0 then exit;
end;
m:=pos('c',termeni);
if m<>0 then
begin
if m<>1 then
begin
if termeni[m-1]='/' then
begin
if not c = 254 then exit;
end
else
if c=0 then exit;
end
else
if c=0 then exit;
end;
m:=pos('d',termeni);
if m<>0 then
begin
if m<>1 then
begin
if termeni[m-1]='/' then
begin
if not d = 254 then exit;
end
else
if d=0 then exit;
end
else
if d=0 then exit;
end;
2 ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE
151
u:=1;
end;
begin
02:
for a:=0 to 15 do
termeni[a]:='';
writeln('Introduceti termenii functiei:');
for a:=0 to 15 do
begin
readln(mes);
if mes='' then goto 01;
termeni[a]:=mes;
end;
01:
n:=0;
for d:=0 to 1 do
for c:=0 to 1 do
for b:=0 to 1 do
for a:=0 to 1 do
begin
y:=0;
for m:=0 to 15 do
begin
eval_term(a,b,c,d,termeni[m],u);
y:=y or u;
end;
writeln('P',n,' ',d,c,b,a,'---','f4=',y);
n:=n+1;
end;
readln(mes);
if mes='q' then exit;
goto 02;
end.
După lansarea programului se introduc pe rând termenii funcţiei sub forma: a,b,c,d,
termenii direcţi (a fiind termenul de rang minim: 20 şi d termenul de rang maxim: 23 ) si /a,
/b, /c, /d termenii negaţi. După scrierea fiecărui termen se apasă tasta "ENTER". La
terminarea introducerii se mai apasă o dată tasta "ENTER" şi pe ecran va fi afişat
răspunsul funcţiei introduse.
Dacă raspunsul funcţiei minimizate coincide cu funcţia canonică înseamnă că
minimizarea s-a făcut corect.