ANALIZA ŞI SINTEZA DISPOZITIVELOR NUMERICE

 

 

curs
Bibliografie

 

1.    Circuite de comutare aplicate în calculatoarele electronice, V. Pop, Volker Popovici, ed. Facla, 1976

2.    Circuite integrate digitale, Gh. Ştefan, I. Drăghici, T. Mureşan, E. Barbu, EDP, 1983

3.    De la poarta TTL la microprocesor, I. Sztojanov ş.a., ET, 1987

4.    Proiectarea cu circuite logice MSI şi LSI standard, T.R. Blakeslee, ET, 1988

5.    Circuite integrate digitale, Gh. Stefan, V. Bistriceanu, Probleme, proiectare, EDP, 1992

6.    Circuite integrate digitale, Gh. Stefan, V. Bistriceanu, Probleme, proiectare, Ed. Albastră, 2000

7.    Automatizări discrete în industrie, Culegere de probleme, N. Sprânceană, R. Dobrescu, Th. Borangiu, ET, 1978

8.    Sisteme numerice cu circuite integrate, Culegere de probleme, Sanda Maican, ET, 1980

9.    Analiza şi sinteza dispozitivelor numerice, I.A. Leţia, Îndrumător de laborator, I.P. Cluj-Napoca, 1985

10.Analiza şi sinteza dispozitivelor numerice, A. Neţin, O. Creţ, Îndrumător de laborator, UT Press. Cluj-Napoca, 1998

 

 


Curs 1

 

CAPITOLUL I

ELEMENTE DE ALGEBRĂ BOOLEANĂ

 

1.1. Generalităţi

          Transferul, prelucrarea şi păstrarea datelor numerice sau nenumerice în interiorul unui calculator se realizează prin intermediul circuitelor de comutare. Aceste circuite se caracterizează prin faptul că prezintă două stări stabile care se deosebesc calitativ între ele. Stările sunt puse în corespondenţă cu valorile binare “0” şi “1” sau cu valorile logice “adevărat” şi “fals” (din acest motiv se mai numesc şi circuite logice). Pornind de la aceste considerente, un domeniul al logicii matematice, (ştiinţa care utilizează metode matematice în soluţionarea problemelor de logică) numit “algebra logicii” şi-a găsit o largă aplicare în analiza şi sinteza circuitelor logice. Algebra logicii operează cu propoziţii care pot fi adevărate sau false. Unei propoziţii adevărate i se atribuie valoarea “1”, iar unei propoziţii false i se atribuie valoarea “0”. O propoziţie nu poate fi simultan adevărată sau falsă, iar două propoziţii sunt echivalente d.p.d.v. al algebrei logice, dacă simultan ele sunt adevărate sau false. Propoziţiile pot fi simple sau compuse, cele compuse obţinându-se din cele simple prin legături logice de tipul conjuncţiei Ů, disjuncţiei Ú sau negaţiei Ř.

          Bazele algebrei logice au fost puse de matematicianul englez George Boole (1815-1864) şi ca urmare ea se mai numeşte şi algebră booleană. Ea a fost concepută ca o metodă simbolică pentru tratarea funcţiilor logicii formale, dar a fost apoi dezvoltată şi aplicată şi în alte domenii ale matematicii. În 1938 Claude Shannon a folosit-o pentru prima dată în analiza circuitelor de comutaţie.

 

1.2. Definirea axiomatică a algebrei booleene

Algebra booleană este o algebră formată din:

-        elementele {0,1};

-        2 operaţii binare numite SAU şi SI, notate simbolic + sau Ú şi × sau Ů;

-        1 operaţie unară numită NU negaţie, notată simbolic  sau Ř.

Operaţiile se definesc astfel:

          SI                                     SAU                                NU

          0 × 0 = 0                           0 + 0 = 0                          0 = 1

          0 × 1 = 0                           0 + 1 = 1                          1 = 0

          1 × 0 = 0                           1 + 0 = 1

          1 × 1 = 1                           1 + 1 = 1

          Axiomele algebrei booleene sunt următoarele:

          Fie o mulţime M compusă din elementele x1, x2,…xn, împreună cu operaţiile × şi +. Această mulţime formează o algebră dacă:

1)    Mulţimea M conţine cel puţin 2 elemente distincte x1 ą x2 (x1,x2Î M);

2)    Pentru " x1 Î M, x2 Î M avem:

x1 + x2 Î M şi x1 × x2 Î M

3)    Operaţiile × şi + au următoarele proprietăţi:

a.     sunt comutative

x1 × x2 = x2 × x1

x1 + x2 = x2 + x1

b.    sunt asociative

x1 × (x2 × x3) = (x1 × x2) × x3

x1 + (x2 + x3) = (x1 + x2) + x3

c.     sunt distributive una faţă de cealaltă

x1 × (x2 + x3) = x1 × x2 + x1 × x3

x1 + (x2 × x3) = (x1 + x2) × (x1 + x3)

4)    Ambele operaţii admit câte un element neutru cu proprietatea:

x1 + 0 = 0 + x1 = x1

x1 × 1 = 1 × x1 = x1

unde 0 este elementul nul al mulţimii, iar 1 este elementul unitate al mulţimii.

5)    Dacă mulţimea M nu conţine decât două elemente, acestea trebuie să fie obligatoriu elementul nul 0 şi elementul unitate 1; atunci pentru " x Î M există un element unic notat cu x cu proprietăţile:

x × x = 0       principiul contradicţiei

x + x = 1      principiul terţului exclus

x este inversul elementului x.

          În definirea axiomatică a algebrei s-au folosit diferite notaţii. În tabelul următor se dau denumirile şi notaţiile specifice folosite pentru diverse domenii:

 

Matematică

Logică

Tehnică

Prima lege de compoziţie

x1 + x2

Disjuncţie

x1 Ú x2

SAU

x1 + x2

A doua lege de compoziţie

x1 × x2

Conjuncţie

x1 Ů x2

SI

x1 × x2

Elementul invers

x

Negare

Řx

NU

x

 

 

          1.3. Proprietăţile algebrei booleene

          Plecând de la axiome se deduc o serie de proprietăţi care vor forma reguli de calcul în cadrul algebrei booleene. Aceste proprietăţi sunt:

1)    Principiul dublei negaţii

x = x       dubla negaţie duce la o afirmaţie

2)    Idempotenţa

x × x = x

x + x = x

3)    Absorbţia

x1 × (x1 + x2) = x1

x1 + (x1× x2) = x1

4)    Proprietăţile elementelor neutre

x × 0 = 0            x × 1 = x

x + 0 = x           x + 1 = 1

5)    Formulele lui De Morgan

x1 × x2 = x1 + x2

x1 + x2 = x1 × x2

Aceste formule sunt foarte utile datorită posibilităţii de a transforma produsul logic în sumă logică şi invers.

Formulele pot fi generalizate la un număr arbitrar de termeni:

x1 × x2 ×× xn = x1 + x2 + … + xn

x1 + x2 + … + xn = x1 × x2 ×× xn

6)    Principiul dualităţii – dacă în axiomele şi proprietăţile algebrei booleene se interschimbă 0 cu 1 şi + cu ×, sistemul de axiome rămâne acelaşi, în afara unor permutări.

Verificarea proprietăţilor se poate face cu ajutorul tabelelor de adevăr şi cu observaţia că două funcţii sunt egale dacă iau aceleaşi valori în toate punctele domeniului de definiţie. Prin tabelul de adevăr se stabileşte o corespondenţă între valorile de adevăr ale variabilelor şi valoarea de adevăr a funcţiei.

Obs. Comutativitatea şi asociativitatea pot fi extinse la un număr arbitrar, dar finit, de termeni, indiferent de ordinea lor.

 

          1.4. Funcţii booleene

          O funcţie f: Bn ® B, unde B = {0,1} se numeşte funcţie booleană. Această funcţie booleană y = f(x1, x2,…,xn) are drept caracteristică faptul că atât variabilele cât şi funcţia nu pot lua decât două valori distincte, 0 sau 1. Funcţia va pune în corespondenţă fiecărui element al produsului cartezian n dimensional, valorile 0 sau 1. Astfel de funcţii sunt utilizate pentru caracterizarea funcţionării unor dispozitive (circuite) construite cu elemente de circuit având două stări (ex.: un întrerupător închis sau deschis, un tranzistor blocat sau în conducţie; funcţionarea unui astfel de circuit va fi descrisă de o variabilă booleană xi).

 

          1.4.1. Funcţii booleene elementare

          Revenim la forma generală a unei funcţii booleene de n variabile:

          y = f(x1, x2,…,xn)

Domeniul de definiţie este format din m = 2n puncte. Deoarece în fiecare din aceste puncte funcţia poate lua doar valorile 0 şi 1 rezultă că numărul total al funcţiilor booleene de n variabile este N = 2m.

Vom considera în continuare funcţiile elementare de 1 variabilă. Pentru n = 1 avem m = 2 şi N = 4. Funcţia are forma y = f(x) şi cele 4 forme ale ei se găsesc în tabelul următor:

 

fi      x

0

1

Reprezentare

Denumire

f0

0

0

0

Constanta 0

f1

0

1

x

Variabila x

f2

1

0

x

Negaţia lui x

f3

1

1

1

Constanta 1

 

La fel se pot realiza toate funcţiile cu ajutorul unor funcţii de bază. Acestora le vor corespunde şi nişte circuite logice elementare, cu ajutorul cărora se poate realiza practic orice tip de circuit. Ţinând cont de faptul că circuitele logice de comutaţie au 2 stări stabile LOW (L) şi HIGH (H), asignând lui L ¬ 0 şi lui H ¬ 1 se poate întocmi un tabel al funcţiilor elementare.

 

 

Denumire

Funcţie

Simbol

Tabel de adevăr

Tabel de definiţie

Inversor – NOT

f = x

  x

          f = x

     x   f

     0   1

     1   0

     x     f

     L     H

     H     L

Poartă SI – AND

f = x1 × x2

x1

x2

           f=x1×x2

  x1  x2  f

0   0   0

0   1   0

1   0   0

1   1   1

  x1  x2  f

L   L   L

L   H   L

H   L   L

  H   H   H

Poartă SAU – OR

f = x1 + x2

x1

x2

          f=x1+x2

  x1  x2  f

0   0   0

0   1   1

1   0   1

  1   1   1

  x1  x2  f

L   L   L

L   H   H

H   L   H

  H   H   H

Poartă SI-NU – NAND

f = x1 × x2

x1

x2

           f=x1×x2

  x1  x2  f

0   0   1

0   1   1

1   0   1

  1   1   0

  x1  x2  f

L   L   H

L   H   H

H   L   H

  H   H   L

Poartă SAU-NU – NOR

f = x1 + x2

x1

x2

          f=x1+x2

  x1  x2  f

0   0   1

0   1   0

1   0   0

  1   1   0

  x1  x2  f

L   L   H

L   H   L

H   L   L

  H   H   L

SAU EXCLUSIV – XOR

f = x1 + x2

x1

x2

        f=x1 + x2

  x1  x2  f

0   0   0

0   1   1

1   0   1

  1   1   0

  x1  x2  f

L   L   L

L   H  H

H   L  H

  H   H  L

COINCIDENŢĂ

f = x1 ×  x2

x1

x2

        f=x1 ×  x2

         =x1 + x2

  x1  x2  f

0   0   1

0   1   0

1   0   0

  1   1   1

  x1  x2  f

L   L   H

L   H   L

H   L   L

  H   H   H

 

          1.4.2. Reprezentarea funcţiilor booleene

          Există două moduri de reprezentare a funcţiilor booleene: grafică şi analitică.

1.    Modalităţi grafice - se caracterizează printr-o reprezentare intuitivă, uşor de reţinut, dar sunt inadecvate pentru funcţii booleene cu un număr de variabile mai mare decât 4;

2. Modalităţi analitice - sunt mai greoaie, dar permit metode automate, deci algoritmi de simplificare a funcţiei; se folosesc în general pentru funcţii booleene cu numărul variabilelor mai mare decât 5.

1.4.2.1.      Modalităţi de reprezentare grafică

Modalităţile de reprezentare grafică sunt: tabel de adevăr, diagramă Karnaugh, schemă logică, diagramă de timp.

1.    Tabel de adevăr – se marchează într-un tabel corespondenţa dintre valorile de adevăr ale variabilelor de intrare şi valoarea de adevăr a funcţiei, în fiecare punct al domeniului de definiţie.

Pentru o funcţie cu n variabile de intrare vom avea 2n combinaţii.

Există situaţii în care, pentru anumite combinaţii ale variabilelor de intrare, valoarea funcţiei nu este specificată. Aceste funcţii se numesc incomplet definite. În tabel, în locul în care funcţia nu este specificată, se notează cu “X”. Dacă o funcţie booleană este incomplet definită pentru “m” combinaţii ale variabilelor de intrare se pot defini 2m funcţii noi prin alegerea arbitrară a valorilor incomplet definite.

2.    Diagramă Karnaugh

O diagramă Karnaugh pentru o funcţie booleană de n variabile se desenează sub forma unui pătrat sau dreptunghi împărţit în 2n compartimente. Fiecare compartiment este rezervat unui termen canonic al funcţiei, respectiv unuia dintre vârfurile cubului n dimensional din reprezentarea geometrică a funcţiei (2n n-uple ale funcţiei).

Diagrama Karnaugh este organizată astfel încât două compartimente vecine pe o linie sau pe o coloană corespund la doi termeni canonici care diferă numai printr-o singură variabilă, care apare în unul adevărată, iar în celălalt negată (la două n-pluri adiacente). Se consideră vecine şi compartimentele aflate la capetele opuse ale unei linii, respectiv coloane.

          Diagrama Karnaugh se notează fie indicând domeniul fiecărei variabile, fie indicând pe linie şi coloană n-uple de zerouri şi unităţi corespondente unui compartiment din diagramă şi ordinea variabilelor. Prima notaţie se foloseşte în cazul în care se reprezintă funcţia prin forma ei canonică sau normală. A doua notaţie se foloseşte în cazul în care funcţia se reprezintă prin tabel de adevăr. Pentru a putea reprezenta uşor funcţii exprimate în mod convenţional prin indicii termenilor canonici se poate nota fiecare compartiment cu indicele termenului corespondent, ţinând cont de o anumită ordine a variabilelor.

Exemple:

1)    Diagrama Karnaugh pentru funcţia de 2 variabile:

f(x1, x2) = x1×x2 + x1×x2

 

x2      x1 

0

1

 

x2      x1

0

1

0

x1x2

x1x2

 

0

0

1

x2

1

x1x2

x1x2

 

1

1

0

                                        x1

sau

                                   x1

00

01

11

10

 

 

 

 

                       x2

Obs. Numerotarea liniilor şi coloanelor se face în cod Gray (cod binar reflectat)

 

 

 

 

Cod binar direct

Cod Gray

0000

0000

0001

0001

0010

0011

0011

0010

0100

0110

0101

0111

0110

0101

0111

0100

1000

1100

1001

1101

1010

1111

1011

1110

1100

1010

1101

1011

1110

1001

1111

1000

2)    Diagrama Karnaugh pentru funcţia de 3 variabile:

y = f(x1,x2,x3)

Domeniul de definiţie este format din 23 = 8 puncte şi reprezintă vârfurile unui cub cu latura 1:

                              x1

 

                    001                  101

          011              111

 


                           000         100            x3

          010                  110

x2

 

 

          Diagramele Karnaugh corespunzătoare pot fi reprezentate astfel:

                                                                             x2

 


x1   x2x3

00

01

11

10

 

0

0

1

3

2

        x1

1

4

5

7

6

                                                                x3

sau

 

 

 

 

 

x3

 

 

x1x2   x3

0

1

 

 

00

0

1

 

01

2

3

  x2

         x1

11

6

7

 

 

10

4

5

 

3)    Diagrama Karnaugh pentru funcţia de 4 variabile:

y = f(x1,x2,x3,x4)

 

 

x4

 

 

 

x1x2   x3x4

00

01

11

10

 

00

0

1

3

2

 

01

4

5

7

6

  x2

   x1

11

12

13

15

14

 

 

10

8

9

11

10

 

                                                                        x3

Prin săgeţi am marcat vecinătăţile punctului de coordonate 0010.

          4) Diagramele Karnaugh pentru funcţii de mai mult de 4 variabile se construiesc din diagrame de 4 variabile considerate ca diagrame elementare.

3.    Schemă logică – reprezentare cu ajutorul simbolurilor circuitelor logice.

4.    Diagramă de timp – reprezentare utilă pentru studiul unor forme tranzitorii de hazard în circuitele logice. Se reprezintă funcţii logice în a căror evoluţie intervine timpul.

Exemplu:    f = x1×x2

 


x1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Curs 2

 

1.4.2.2. Modalităţi de reprezentare analitică

1) Formele canonice

Fie o funcţie booleană f(x), unde x = (x1,x2,…,xn). Se defineşte numărul i = x1×20 + x2×21 + … +  xn×2n-1 ca număr de combinaţii.

Exemplu:

          x1       x2       x3       f

          0        0        0

          0        0        1

          0        1        0                  ®      i = 0×22 + 1×21 + 0×20 = 2

          0        1        1

Fie funcţia Pi definită pe Bn ® B, deci Pi : Bn ® B

          Pi(x1,x2,…,xn) =  1 dacă numărul de combinaţii este i

                                      0 în caz contrar

Această funcţie se numeşte constituent al unităţii. Se poate arăta că orice funcţie booleană dată prin tabelul de adevăr se poate scrie ca o sumă de constituenţi ai unităţii.

          f(x1, x2,…,xn) = Pi1 + Pi2 + … + Pip = S  Pij

                                                                     i,jÎM1

unde M1 = mulţimea tuturor combinaţiilor argumentelor pentru care funcţia ia valoarea 1. Această formă de scriere se numeşte forma canonică disjunctivă FCD, iar termenii constituenţi se numesc termeni canonici conjunctivi sau mintermi (se mai numeşte şi forma sumă de produse).

Funcţia booleană se mai poate scrie şi sub forma Si : Bn ® B unde B = {0,1}.

          Si(x1,x2,…,xn) =  0 dacă numărul de combinaţii este i

                                      1 în caz contrar

          Se poate demonstra că orice funcţie booleană poate fi adusă la forma:

          f(x1, x2,…,xn) = Si1 × Si2 ×× Siq = P  Sij

                                                                     i,jÎM0

unde M0 = mulţimea tuturor combinaţiilor argumentelor pentru care funcţia ia valoarea 0. Această formă de scriere se numeşte forma canonică conjunctivă FCC, iar factorii constituenţi se numesc termeni canonici conjunctivi sau maxtermi (se mai numeşte şi forma produs de sume).

          Se poate demonstra că Si = Pi.

          Algoritmi de obţinere a formelor canonice pe baza tabelului de adevăr sau a diagramei Karnaugh:

 

          FCD

-        se determină toate combinaţiile variabilelor pentru care valoarea funcţiei este 1;

-        se scriu mintermii corespunzători (o variabilă apare nenegată dacă are valoarea 1 şi negată dacă are valoarea 0);

-        se însumează mintermii obţinuţi anterior.

FCC

-        se determină toate combinaţiile variabilelor pentru care valoarea funcţiei este 0;

-        se scriu maxtermii corespunzători prin însumarea variabilelor (o variabilă apare nenegată dacă are valoarea 0 şi negată dacă are valoarea 1);

-        se înmulţesc maxtermii obţinuţi anterior.

Exemplu:

          x1       x2       x3       f

          0        0        0        0

          0        0        1        1        mintermul este x1×x2×x3

          0        1        0        0        maxtermi sunt (x1+x2+x3)×(x1+x2+x3)

          Trecerea dintr-o formă canonică în alta se poate face în două moduri:

-        cu ajutorul tabelului de adevăr;

-        prin aplicarea dublei negaţii şi a teoremelor lui De Morgan.

Teorema lui Shannon

Complementul unei funcţii booleene se obţine prin complementarea fiecărei variabile şi interschimbarea operatorilor ŞI cu SAU şi reciproc.

          f(x1,x2,…,xn)+,× = f(x1,x2,…,xn)×,+

Teorema de expansiune

          Fie funcţia booleană f(x1,x2,…, xi-1, xi, xi+1,…,xn) care se expandează după variabila xi. Avem atunci:

          f(x1,x2,…, xi-1, xi, xi+1,…,xn) = xi×f(x1,x2,…, xi-1, 1, xi+1,…,xn) + xi×f(x1,x2,…, xi-1, 0, xi+1,…,xn)

          Funcţia duală este:

f = [xi + f(x1,x2,…, xi-1, 0, xi+1,…,xn)]×[xi + f(x1,x2,…, xi-1, 1, xi+1,…,xn)]

          2) Forma elementară

          La formele canonice ale funcţiilor booleene termenii conţin toate variabilele independente de intrare, negate sau nenegate. Termenii formei elementare nu conţin toate variabilele de intrare. Această formă se obţine din formele canonice prin minimizare.

          3) Forma neelementară

          Forma neelementară conţine variabile sau grupuri de variabile comune mai multor termeni. Se obţine din celelalte forme prin aplicarea algebrei booleene. Este folosită la implementarea funcţiilor logice deoarece permite reducerea numărului de intrări în circuitele logice. Are dezavantajul măririi numărului de nivele logice.

 

1.4.3. Minimizarea funcţiilor booleene

          Algebra booleană se foloseşte la analiza şi sinteza dispozitivelor numerice (circuite de comutaţie). Între gradul de complexitate al circuitului şi cel al funcţiei care îl descrie există o legătură directă. Aceasta este motivaţia pentru care, în etapa de sinteză a circuitelor de comutaţie, după definirea acestora, urmează în mod obligatoriu etapa de minimizare a funcţiei, având drept scop obţinerea unor forme echivalente mai simple (forma minimă).

          Soluţia minimă obţinută în urma minimizării ar trebui să fie cea mai avantajoasă (economie de porţi logice, obţinerea unei scheme mai fiabile, mai ieftine). În realitate nu este întotdeauna aşa. De exemplu, dorinţa de a obţine un sistem uşor depanabil poate duce la obţinerea unei soluţii neminimale, dar care prezintă proprietăţi interesante de simetrie şi regularitate.

          Prin aplicarea metodelor de minimizare (de simplificare) se ajunge la expresii minimale sub forma unor SAU-uri de SI-uri (reuniune minimală) ori a unor SI-uri de SAU-uri (intersecţie minimală).

          Criteriile utilizate în vederea minimizării sunt:

-        reducerea numărului de variabile;

-        reducerea numărului de termeni;

-        reducerea pe ansamblu a variabilelor şi termenilor, astfel ca suma lor să devină minimă.

Minimizarea constă în principal în transformarea formelor canonice şi a formelor elementare parţial simplificate în forme elementare minimale.

          Metodele de minimizare pot fi grupate în metode algebrice şi metode grafice.

          1.4.3.1. Minimizarea grafică

1.    Diagrama Karnaugh

Minimizarea se bazează pe proprietatea de adiacenţă a codului binar reflectat (Gray) cu ajutorul căruia se numerotează liniile şi coloanele diagramei Karnaugh. În vederea minimizării se aleg suprafeţele maxime (subcuburi) formate din constituenţi ai unităţii, respectiv din constituenţi ai lui 0, suprafeţe (subcuburi) având ca dimensiune un număr de pătrate (compartimente) egal întotdeauna cu puteri ale lui 2. Aceste suprafeţe vor corespunde termenilor canonici, termenii vecini fiind adiacenţi (diferă printr-un singur bit). Ca urmare, în urma grupării lor se vor reduce variabilele pe baza relaţiei: x1×x2 + x1×x2 = x1.

 

Metoda de minimizare:

-        se realizează grupări de compartimente (subcuburi) care sunt puteri ale lui 2. Un compartiment poate fi membru al mai multor suprafeţe. O suprafaţă cu 2m celule vecine va elimina 2m variabile de intrare.

-        se scriu ecuaţiile corespunzătoare fiecărei suprafeţe, obţinându-se astfel termenii elementari.

-        se realizează forma disjunctivă minimă (FDM) prin însumarea termenilor elementari obţinuţi prin gruparea constituenţilor lui 1 sau forma conjunctivă minimă (FCM) prin înmulţirea termenilor elementari obţinuţi prin gruparea de constituenţi ai lui 0; funcţiile minimale obţinute sunt identice, ele diferind numai prin forma de prezentare.

Pentru a se obţine forma minimală a unei funcţii booleene este util să se minimizeze ambele forme canonice, FCC şi FCD. Apoi, în funcţie de disponibilitatea componentelor şi de numărul de conexiuni care rezultă, se poate alege forma minimală a funcţiei booleene care va fi implementată.

Exemplu:

          f(x1,x2,x3,x4) = S (3, 7, 8, 9, 12, 13, 15)

 

 

 

x4

 

 

 

x1x2   x3x4

00

01

11

10

 

00

0

0

1

0

 

01

0

0

1

0

  x2

   x1

11

1

1

1

0

 

 

10

1

1

0

0

 

                                                                        x3

          Pentru FDM a funcţiei se obţin două variante, după cum se aleg suprafeţele pentru minimizare:

fFDM1 = x1×x3 + x1×x3×x4 + x1×x2×x4        sau

fFDM2 = x1×x3 + x1×x3×x4 + x2×x3×x4

 

          Implementarea cu porţi de tip SI-NU arată astfel:

 


          fFDM1 = x1×x3 + x1×x3×x4 + x1×x2×x4 = = x1×x3 × x1×x3×x4 × x1×x2×x4

 

        Minimizarea funcţiei negate va fi:

          fFDM = x1×x3 + x3×x4 + x1×x2×x3

 

          La fel se procedează şi la minimizarea funcţiei prin folosirea constituenţilor de 0:

 

 

x4

 

 

 

x1x2   x3x4

00

01

11

10

 

00

0

0

1

0

 

 

01

0

0

1

0

  x2

   x1

11

1

1

1

0

 

10

1

1

0

0

 

                                                                        x3

          Forma minimizată conjunctivă a funcţiei FCM este:

          fFCM = (x1+x3)×(x3+x4)×(x1+x2+x3)

 

2.    Diagrame Karnaugh pentru funcţii incomplet definite

Funcţiile incomplet definite sunt cele care în anumite puncte ale domeniului de definiţie pot lua valoarea 0 sau valoarea 1. Avem două posibilităţi:

-        combinaţii de intrare pentru care funcţia are valori indiferente (nedefinite);

-        combinaţii ale variabilelor care nu pot să apară din punct de vedere fizic; în aceste situaţii trebuie studiat dacă combinaţiile sunt susceptibile să se producă în urma unei manevre false sau în urma unui defect de funcţionare; pentru a evita funcţionarea greşită, în locaţiile corespunzătoare se impun valori pentru funcţie, astfel încât să nu se perturbe funcţionarea normală.

Valorile nespecificate precum şi locaţiile corespunzătoare din diagrama Karnaugh se numesc “indiferente” sau “arbitrare” sau “redundante”. Ele se notează cu “x” şi vor fi considerate în timpul minimizării ca având valoarea 1 sau 0, în funcţie de situaţie, pentru a se obţine o minimizare cât mai bună.

 

 

 

x4

 

 

 

x1x2   x3x4

00

01

11

10

 

00

 

x

1

 

 

01

x

1

 

x

  x2

   x1

11

1

1

1

 

 

10

1

x

1

x

 

                                                                        x3

          Ca să minimizăm funcţia în FDM considerăm că x au valoarea 1 şi grupăm aceşti x numai cu valorile de 1, nu şi între ei (o grupare între ei nu are nici o semnificaţie).

          Se obţine: fFDM = x1×x2 + x2×x3 + x1×x4 + x2×x4

Obs. În cazul funcţiilor incomplet definite, funcţia complementară simplificată prin grupări de 0 nu coincide întotdeauna cu complementul funcţiei.

3.    Diagrame Karnaugh cu expresii

a.    Superpoziţia funcţiilor booleene

Fie o funcţie booleană f(X) cu X = (x1,x2,…, xi, xi+1,…,xn). Dacă considerăm X1 = (x1,x2,…, xi) şi X2 = (xi+1,…,xn) şi dacă funcţia f(X) poate fi scrisă ca o funcţie f(X) = f3[f1(X1), f2(X2)] atunci spunem că f(X) a fost obţinută prin superpoziţia funcţiilor f1(X1) şi f2(X2).

Dacă X1ÇX2 = F atunci avem o superpoziţie disjunctă, iar dacă X1ÇX2 ą F avem o superpoziţie nedisjunctă.

          x1

                                        f        

          xn

          După superpoziţie avem:

          x1

                       f1

          xi

                                                  f3       f

          xi+1

                       f2

          xn

b.    Decompoziţia funcţiilor booleene

Dacă se dă o funcţie booleană şi un set de funcţii se cere să se realizeze o “spargere” a funcţiei booleene. S-a reuşit decompoziţia funcţiei booleene dacă:

          f = fm [fm-1(Xm-1), fm-2(Xm-2),…,f1(X1),X0]     unde Xi Ě X

Dacă f poate fi scrisă ca f = f2[f1(X1),X0] decompoziţia este simplă.

                                                          m-1

Decompoziţia este nedisjunctă dacă: ÇXi = F

                                                           i=j

                                                       m-1

Decompoziţia este disjunctă dacă: ÇXi ą F

                                                       i=j

Exemplu:

f(x1,x2,x3,x4) = S(0, 2, 3, 7, 9, 10, 11, 14)

 

 

x4

 

 

 

x1x2   x3x4

00

01

11

10

 

00

1

 

1

1

 

 

01

 

 

1

 

  x2

   x1

11

 

 

 

1

 

10

 

1

1

1

 

                                                                        x3

fFDM = x1×x2×x4 + x1×x3×x4 + x1×x3×x4 + x1×x2×x4 = x2(x1 × x4) + x3(x1 + x4) =

= x2×G + x3×G unde G = x1 + x4 şi deci f se poate scrie:

f = f2[G(x1,x4), x2,x3]

Pornind de la această formă pentru f, facem o minimizare.

          f = x2×G + x3×G = x2×G×(x3 + x3) + x3×G×(x2 + x2) =

= x2x3G + x2x3G + x2x3G + x2x3G = x2x3 + x2x3G + x2x3G

Diagrama Karnaugh corespunzătoare este:

x2   x3

0

1

0

G

1

x2

1

0

G

 

 

x3

          În general o diagramă Karnaugh cu “n” expresii (sau variabile) are 2n locaţii. Prin înglobarea în diagramă a “m” expresii (variabile) dimensiunea diagramei se reduce, numărul de locaţii devenind 2n-m.

          Pentru a minimiza o funcţie prin diagrame Karnaugh cu expresii se fac următorii paşi:

1)    se consideră toate variabilele din diagramă ca şi cum ar fi 0 şi se formează suprafeţe (subcuburi) cu constituenţii lui 1;

2)    se consideră toate locaţiile cu 1 indiferente şi se formează suprafeţe (subcuburi) cu variabilele înglobate;

3)    se consideră intersecţia variabilelor înglobate cu grupările obţinute în pasul 2;

4)    se face reuniunea termenilor din paşii 1 şi 3;

5)    pentru mai mult de o variabilă înglobată se tratează pe rând conform paşilor 1 - 4 numai câte o variabilă, celelalte fiind considerate 0, iar apoi se scrie reuniunea tuturor termenilor obţinuţi.

Exemplu:

          Să se minimizeze funcţia cu variabile înglobate:

x1   x2x3

00

01

11

10

0

 

a+b

1

c

1

1

 

1

x

Pasul 1.

x1   x2x3

00

01

11

10

0

 

 

1

 

1

1

 

1

x

          Se obţine      x2×x3 + x1×x3

Pasul 2 şi 3.

x1   x2x3

00

01

11

10

0

 

a+b

x

c

1

x

 

x

x

        Se obţine      c×x2 + (a+b)×x1×x3

Pasul 4. f = x2×x3 + x1×x3 + c×x2 + (a+b)×x1×x3

 

Curs 3

 

          1.4.3.2. Minimizarea algebrică

        Minimizarea algebrică a funcţiilor booleene se face cu ajutorul teoremelor algebrei booleene.

        În cazul în care numărul de variabile este mai mare decât 6 se utilizează metoda de minimizare Quine-Mc Cluskey. Această metodă are avantajul că algoritmul este uşor de implementat pe calculator. Pentru prezentarea metodei vom lua ca exemplu funcţia:

        f = S (0, 2, 3, 5, 7, 8, 10, 11, 13, 15)

        Etapele de minimizare sunt:

1.  Se grupează termenii canonici astfel încât termenii din fiecare grupă să conţină acelaşi număr de 1, respectiv 0.

TC              x1    x2    x3    x4

0         0     0     0     0

2         0     0     1     0

8         1     0     0     0

3         0     0     1     1

5         0     1     0     1

10               1     0     1     0

7         0     1     1     1

11               1     0     1     1

13               1     1     0     1

15               1     1     1     1

2.  Se compară fiecare termen dintr-o grupă cu toţi cei din grupa următoare, aplicând relaţia de reducere: x1×x2 + x1×x2 = x1. Se grupează termenii care diferă printr-o singură variabilă (o singură poziţie binară). Termenul obţinut prin combinare va conţine pe poziţia respectivă semnul -.

Comparare         Rezultatul comparării

        între                      x1    x2    x3    x4

        0, 2                              0          0          -           0

            0, 8                              -           0          0          0

            2, 3                              0          0          1          -

            2, 10                            -           0          1          0

            8, 10                            1          0          -           0

            3, 7                              0          -           1          1

            3, 11                            -           0          1          1

            5, 7                              0          1          -           1

            5, 13                            -           1          0          1

            10, 11                          1          0          1          -

            7, 15                            -           1          1          1

            11, 15                          1          -           1          1

            13, 15                          1          1          -           1

        În continuare se repetă procedeul de comparare până când nu mai este posibilă nici o reducere.

Comparare         Rezultatul comparării

        între                      x1    x2    x3    x4

        0, 2, 8, 10             -      0     -      0

        2, 3, 10, 11           -      0     1     -

        3, 7, 11, 15           -      -      1     1

        5, 7, 13, 15           -      1     -      1

        Termenii  rezultanţi, (0, 2, 8, 10),  (2, 3, 10, 11),  (3, 7, 11, 15) şi (5, 7, 13, 15) se numesc implicanţi primi IP.

3.  Se aleg acei implicanţi primi IP care asigură acoperirea minimală a termenilor canonici TC. Pentru aceasta se construieşte un tabel de acoperire, în care pe coloane se notează termenii canonici TC, iar pe linii implicanţii primi IP. În intersecţii se notează acei termeni canonici TC acoperiţi de fiecare implicant prim IP.

IP           TC

0      2      3      5      7      8      10      11      13      15

0, 2, 8, 10

x      x                              x       x

2, 3, 10, 11

        x      x                               x        x

3, 7, 11, 15

                x              x                         x                  x

5, 7, 13, 15

                        x      x                                   x        x

        Unii dintre implicanţii primi sunt implicanţi primi esenţiali pentru că acoperă cel puţin un termen canonic al funcţiei, care nu este acoperit de alt implicant prim. Implicanţii primi esenţiali vor face parte în mod obligatoriu din expresia minimizată a funcţiei. În cazul nostru implicanţi primi esenţiali sunt (0, 2, 8, 10) şi (5, 7, 13, 15). Pentru termenii canonici care au rămas neacoperiţi, 3 şi 11, se observă că pot fi aleşi 2 implicanţi primi, (2, 3, 10, 11) şi (3, 7, 11, 15), deci există 2 soluţii de minimizare.

f = (0, 2, 8, 10) + (5, 7, 13, 15) + (2, 3, 10, 11) = x2x4 + x2x4 + x2x3 şi

f = (0, 2, 8, 10) + (5, 7, 13, 15) + (3, 7, 11, 15) = x2x4 + x2x4 + x3x4

 

        1.4.4. Minimizarea sistemelor de funcţii booleene

        Sistemele de funcţii booleene sunt exprimate prin f: Bn ® Bm unde B ={0, 1}. Argumentele pot fi de n variabile şi sunt mai multe funcţii de acest tip: f1, f2,…, fm.

        Pentru a minimiza sistemele de funcţii se caută implicanţi primi pentru f1, f2,…, fm şi pentru produsele f1×f2, f1×f3…, f1×fm, … f1×f2×f3,…, f1×f2×f3×f4,…, … f1×f2××fm. Soluţia aleasă pentru implementarea sistemului de funcţii booleene va fi cea care va fi cea mai avantajoasă din punct de vedere al circuitelor disponibile şi al preţului.

 

 

Exemplu:

        f1(x1,x2,x3) = S (1, 5, 6, 7)

        f2(x1,x2,x3) = S (1, 4, 5, 6)

        f3(x1,x2,x3) = S (0, 2, 5, 6, 7)

1. Calculăm funcţiile produs:

        f1×f2 = S (1, 5, 6)

        f1×f3 = S (5, 6, 7)

        f2×f3 = S (5, 6)

        f1×f2×f3 = S (5, 6), identică cu f2×f3

2. Determinăm implicanţii primi din funcţiile simple şi din produsele determinate la punctul 1. Pentru determinarea implicanţilor primi se folosesc diagrame Karnaugh în care se iau toate acoperirile posibile.

Pentru f1:

x1   x2x3

00

01

11

10

0

 

1

 

 

1

 

1

1

1

Pentru f2:

x1   x2x3

00

01

11

10

0

 

1

 

 

1

1

1

 

1

Pentru f3:

x1   x2x3

00

01

11

10

0

1

 

 

1

1

 

1

1

1

Pentru f1×f2:

x1   x2x3

00

01

11

10

0

 

1

 

 

1

 

1

 

1

Pentru f1×f3:

x1   x2x3

00

01

11

10

0

 

 

 

 

1

 

1

1

1

Pentru f2×f3 şi f1×f2×f3:

x1   x2x3

00

01

11

10

0

 

 

 

 

1

 

1

 

1

3. Construim un tabel în care capetele de linii vor reprezenta funcţiile, iar coloanele vor fi implicanţii primi.

 

 

 

 

Funcţia

Implicanţi primi

Indici

Expresii

Notaţii

f1

1,5

6,7

5,7

x2x3

x1x2

x1x3

-

-

-

f2

1,5

4,5

4,6

x2x3

x1x2

x1x3

-

i

h

f3

0,2

2,6

6,7

5,7

x1x3

x2x3

x1x2

x1x3

g

f

-

-

f1×f2

1,5

6

x2x3

x1x2x3

e

-

f1×f3

5,7

6,7

x1x3

x1x2

d

c

f2×f3 = f1×f2×f3

5

6

x1x2x3

x1x2x3

b

a

4. Se notează IP pe coloana a patra din tabel începând cu ultimul, iar cei care apar dublaţi nu se mai notează.

5. Se construieşte un tabel al acoperirilor funcţiilor f1, f2, f3.

Notaţii

Indicii

Funcţia de unde au rezultat

f1

f2

f3

1

5

6

7

1

4

5

6

0

2

5

6

7

a

6

f1×f2×f3

 

 

x

 

 

 

 

x

 

 

 

x

 

b

5

f1×f2×f3

 

x

 

 

 

 

x

 

 

 

x

 

 

c

6, 7

f1×f3

 

 

x

x

 

 

 

 

 

 

 

x

x

d

5, 7

f1×f3

 

x

 

x

 

 

 

 

 

 

x

 

x

e

1, 5

f1×f2

x

x

 

 

x

 

x

 

 

 

 

 

 

f

2, 6

f3

 

 

 

 

 

 

 

 

 

x

 

x

 

g

0, 2

f3

 

 

 

 

 

 

 

 

x

x

 

 

 

h

4, 6

f2

 

 

 

 

 

x

 

x

 

 

 

 

 

i

4, 5

f2

 

 

 

 

 

x

x

 

 

 

 

 

 

6. Determinăm acoperirile optime ale funcţiilor f1, f2, f3.

A(f1) = e,c + e,d,a = A1 + A2     cu e implicant prim esenţial

A(f2) = e,h + e,i,a = B1 + B2      cu e implicant prim esenţial

A(f3) = g,c,b + g,c,d, + g,f,d + g,a,d = C1 + C2 + C3 + C4 cu g implicant prim esenţial

7. Se scriu toate acoperirile posibile pentru sistemul de funcţii şi se alege acea acoperire care realizează condiţiile de preţ minim şi disponibilitate de piese. Se face tabelul pentru acoperiri:

 

Acoperiri

Elementele acoperirii

Număr de termeni

Cost

A1B1C1

e,c,h,g,b

5

11

A1B1C2

e,c,h,g,d

5

10

A1B1C3

e,c,h,g,f,d

6

 

A1B1C4

e,c,h,g,a,d

6

 

A1B2C1

e,c,i,a,g,b

6

 

A1B2C2

e,c,i,a,g,d

6

 

A1B2C3

e,c,i,a,g,f,d

7

 

A1B2C4

e,c,i,a,g,d

6

 

A2B1C1

e,d,a,h,g,c,b

7

 

A2B1C2

e,d,a,h,g,c

6

 

A2B1C3

e,d,a,h,g,f

6

 

A2B1C4

e,d,a,h,g

5

11

A2B2C1

e,d,a,i,g,c,b

7

 

A2B2C2

e,d,a,i,g,c

6

 

A2B2C3

e,d,a,i,g,f

6

 

A2B2C4

e,d,a,i,g

5

11

Avem acoperiri minimale cu 5 termeni. Pentru a calcula costul unei acoperiri se face suma costurilor implicanţilor primi din acoperirea considerată. Costul unui implicant prim de n variabile din care lipsesc r variabile este n-r, pentru că fiecare variabilă prezentă necesită un contact, o legătură.

                 n-1

        C = S gr ×(n-r)

                r=0

unde gr este numărul subcuburilor din care lipsesc r variabile.

Pentru acoperirea A1B1C2, care are elementele e,c,h,g,d, avem costul:

       2

C = S gr ×(3-r) = g0×3 + g1×2 + g2×1 = 0×3 + 5×2 + 0×1 = 10

      r=0

e = x2x3

c = x1x2

h = x1x3

g = x1x3

d = x1x3

Minimizarea sistemului de funcţii va fi:

f1 = x2x3 + x1x2

f2 = x2x3 + x1x3

f3 = x1x3 + x1x3 + x1x2 = x1x2 + x1 + x3

Datorită reducerii corelate a sistemului de funcţii apar porţi comune mai multor funcţii.

 

Curs 4

 

CAPITOLUL II

CIRCUITE LOGICE COMBINAŢIONALE

 

          2.1. Definiţii

          Circuitele logice combinaţionale, CLC, sunt un caz particular al sistemelor secvenţiale finite sau al automatelor finite, numite automate de grad 0.

          Circuitele logice combinaţionale se caracterizează prin faptul că variabilele de ieşire sunt independente de timp şi de starea internă, fiind determinate numai de variabilele de intrare (starea variabilelor de intrare la momentul considerat).

Legătura dintre starea ieşirii şi starea intrării unui CLC este realizată de funcţia de transfer.

                    x1                                               y1

                    x2                                               y2

                                        CLC

 


                    xn                                               ym

 

Oricare funcţie de ieşire y (y1, y2,…, ym) este funcţie de toate variabilele de intrare (x1, x2,…, xn). Un CLC se poate descrie astfel:

y1 = f1(x1, x2,…, xn)

y2 = f2(x1, x2,…, xn)

 


ym = fm(x1, x2,…, xn)

          Funcţiile se vor exprima în forma canonică disjunctivă FCD sau în forma canonică conjunctivă FCC.

Independenţa faţă de timp presupune că o dată cu modificarea variabilelor de intrare se modifică simultan şi variabilele de ieşire. Din punct de vedere practic, datorită întârzierilor produse de circuitele logice şi de conexiuni, modificarea simultană nu este posibilă. Ca urmare, pe durata procesului tranzitoriu de stabilire a variabilelor de ieşire, vectorul ieşirilor poate lua valori intermediare diferite de valoarea finală, ceea ce conduce la fenomenul de hazard combinaţional, de care trebuie să se ţină cont la proiectarea unui sistem numeric.

          În general, la circuitele logice combinaţionale, vom face abstracţie de proprietăţile fizice ale porţilor logice, de faptul că un impuls teoretic diferă de unul real. Vom analiza aceste fenomene doar în cazul hazardului combinaţional.

 

          2.2. Analiza circuitelor logice combinaţionale

          În cadrul analizei CLC se pleacă de la cunoaşterea schemei logice a circuitului şi se urmăreşte stabilirea funcţionării acestuia. Stabilirea expresiei variabilei de ieşire se face de la intrare la ieşire, urmărind transformările variabilelor de intrare.

          Definim ca număr de nivele al unui CLC numărul maxim de porţi dintre intrări şi ieşiri. Numerotarea nivelelor se face de la ieşire înspre intrare.

                              x5

x1

x2

                                                                                          y1

x3

x4                                                                                       y2

                              x6                                     x7

 

          4                  3                  2                  1

 

Circuitul logic combinaţional din exemplu are 4 nivele.

Există şi următoarea situaţie de legături între porţi:

x1                                                                             y

x2

 


x3

 

 

 


          Acest circuit are şi legături inverse. Ultimele porţi nu pot fi numerotate, deci circuitul nu este un CLC.

          În CLC sunt admise legăturile inverse (ieşirea unei porţi dintr-un nivel inferior să fie dusă la intrarea unei porţi dintr-un nivel superior) cu condiţia ca definiţia CLC să fie respectată.

        Algoritm de determinare a legăturilor inverse în CLC

a. Se numerotează toate porţile logice care au ca intrări un subset din mulţimea variabilelor de intrare ale circuitului logic (de la 1 la k);

b. Se numerotează de la k+1 porţile care au ca intrări fie intrări ale circuitului, fie ieşiri ale porţilor numerotate la punctul a. Dacă am reuşit să numerotăm toate porţile circuitului logic, acesta este fără legături inverse şi este circuit combinaţional. Dacă nu am reuşit numerotarea tuturor porţilor logice, circuitul este de tip secvenţial.

 

 

 

          2.3. Sinteza circuitelor logice combinaţionale

          În cadrul sintezei circuitelor logice combinaţionale se cunoaşte funcţia pe care trebuie să o îndeplinească circuitul şi se caută să se găsească structura acestuia.

Etapele sintezei circuitelor logice combinaţionale sunt:

1.    Enunţul problemei;

2.    Alcătuirea tabelului de adevăr, definirea funcţiei sau funcţiilor;

3.    Minimizarea funcţiei sau funcţiilor;

4.    Desenarea schemei circuitului

Există mai multe metode de implementare a CLC, diferenţiate după nivelul de complexitate al circuitelor integrate folosite.

 

2.3.1. Sinteza CLC cu circuite integrate SSI

          Circuitele integrate de tip SSI – small scale integration – au până la 50 de tranzistoare integrate pe capsulă. Dintre aceste circuite fac parte porţile logice fundamentale: SI-NU (NAND), SAU-NU (NOR), NU (NOT), SI (AND), SAU (OR), SAU-EXCLUSIV (XOR).

          După parcurgerea etapelor de sinteză se face implementarea funcţiei sau funcţiilor logice cu ajutorul circuitelor integrate existente. CLC de tip SSI se folosesc mai mult pentru adaptarea la aplicaţie a circuitelor de tip MSI şi LSI standardizate, care nu satisfac cu exactitate cerinţele de proiectare. Ele vor fi utilizate acolo unde circuitele cu grad înalt de integrare nu pot fi folosite.

 

2.3.2. Sinteza CLC cu circuite integrate MSI

Circuitele integrate de tip MSI – medium scale integration – au până la 500 de tranzistoare integrate. Ele oferă structuri mai complexe, disponibile ca şi structuri standard.

Forma funcţiilor logice pe care dorim să le implementăm cu circuite de tip MSI trebuie să fie corelată cu circuitele disponibile. De obicei nu mai este necesară minimizarea funcţiilor.

          Circuite combinaţionale uzuale (specializate)

1.    Convertoare de cod

Convertoarele de cod sunt CLC care permit trecerea dintr-un cod binar în altul. La intrarea circuitului se aplică cuvintele unui cod şi la ieşire se obţine alt cod. Convertoarele de cod fac compatibilă funcţionarea a 2 sisteme în care informaţia este codificată în mod diferit.

Exemplu: Conversiile din cod Gray în cod binar-zecimal (BCD) şi invers

1) Cod Gray ® BCD

Cuvintele de cod în cele două coduri sunt:

Gray:           gn, gn-1,…, g0

BCD:           bn, bn-1,…, b0

Reguli:         bn = gn

g3

g2

g1

g0

b3

b2

b1

b0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

1

0

0

1

1

0

0

1

0

0

0

1

0

0

0

1

1

0

1

1

0

0

1

0

0

0

1

1

1

0

1

0

1

0

1

0

1

0

1

1

0

0

1

0

0

0

1

1

1

1

1

0

0

1

0

0

0

1

1

0

1

1

0

0

1

1

1

1

1

1

0

1

0

1

1

1

0

1

0

1

1

1

0

1

0

1

1

0

0

1

0

1

1

1

1

0

1

1

0

0

1

1

1

1

0

1

0

0

0

1

1

1

1

Se construiesc diagrame Karnaugh pentru determinarea funcţiilor minimizate pentru b3, b2, b1, b0.

Diagrama Karnaugh pentru b3:

g3g2     g1g0

00

01

11

10

00

 

 

 

 

01

 

 

 

 

11

1

1

1

1

10

1

1

1

1

Obţinem: b3 = g3

Diagrama Karnaugh pentru b2:

g3g2     g1g0

00

01

11

10

00

 

 

 

 

01

1

1

1

1

11

 

 

 

 

10

1

1

1

1

Obţinem b2 = g2g3 + g2g3 = g2 + g3

Diagrama Karnaugh pentru b1:

g3g2     g1g0

00

01

11

10

00

 

 

1

1

01

1

1

 

 

11

 

 

1

1

10

1

1

 

 

Obţinem b1 = g1g2g3 + g1g2g3 + g1g2g3 + g1g2g3 = g1(g2 + g3) + g1(g2 + g3) = g1 + g2 + g3

 

Diagrama Karnaugh pentru b0:

g3g2     g1g0

00

01

11

10

00

 

1

 

1

01

1

 

1

 

11

 

1

 

1

10

1

 

1

 

Obţinem b0 = g0g1g2g3 + g0g1g2g3 + g0g1g2g3 + g0g1g2g3 + g0g1g2g3 + g0g1g2g3 + g0g1g2g3 + g0g1g2g3 = g2g3(g0 + g1) + … = g0 + g1 + g2 + g3

În general:

bn = gn

                                             i

bi =    1        dacă  +  S gj = 1

                                           j=n-1

                    0        dacă nu

 

2) Conversia din BCD în Gray:

          gn = bn

          gi = bi  +  bi+1

2.    Codificatoare

Codificatoarele sunt CLC la care activarea unei intrări conduce la apariţia unui cuvânt de cod la ieşire.

Exemplu: Codificator din zecimal în BCD (binar codificat zecimal)

Zecimal

BCD

0

1

2

3

4

5

6

7

8

9

23

22

21

20

0

1

1

1

1

1

1

1

1

1

0

0

0

0

1

0

1

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

1

0

0

1

0

1

1

1

0

1

1

1

1

1

1

0

0

1

1

1

1

1

1

0

1

1

1

1

1

0

1

0

0

1

1

1

1

1

0

1

1

1

1

0

1

0

1

1

1

1

1

1

1

0

1

1

1

0

1

1

0

1

1

1

1

1

1

1

0

1

1

0

1

1

1

1

1

1

1

1

1

1

1

0

1

1

0

0

0

1

1

1

1

1

1

1

1

1

0

1

0

0

1

Intrările sunt active pe 0 logic. De exemplu, dacă este activă (adică 0) intrarea 5, pe ieşire se va obţine codul în BCD pentru 5, adică 0101.

Funcţiile pentru ieşiri sunt:

23 = 8 × 9

          22 = 4 × 5 × 6 × 7

          21 = 2 × 3 × 6 × 7

          20 = 1 × 3 × 5 × 7 × 9

          Codificatorul prioritar este un codificator care are mai multe intrări active simultan şi la ieşire se obţine cuvântul de cod care corespunde intrării care este cea mai prioritară. Prioritatea creşte de la cifra 0 înspre cifra 9.

3.    Decodificatoare

Decodificatoarele sunt CLC la care se activează doar una dintre ieşiri, pentru combinaţia (codul) corespunzătoare a variabilelor de intrare. Ele au funcţie inversă codificatoarelor. Ieşirile decodificatoarelor sunt active pe 0 logic (funcţionează în logică negativă).

          I1                                               y1

                          Circuite SI-NU

          In                                               ym

 

Numărul ieşirilor distincte este m Ł 2n.

Exemplu: Decodificator pentru 3 cifre binare.

I2

I1

I0

O7

O6

O5

O4

O3

O2

O1

O0

0

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

1

1

1

1

0

1

0

1

0

1

1

1

1

1

0

1

1

0

1

1

1

1

1

1

0

1

1

1

1

0

0

1

1

1

0

1

1

1

1

1

0

1

1

1

0

1

1

1

1

1

1

1

0

1

0

1

1

1

1

1

1

1

1

1

0

1

1

1

1

1

1

1

Funcţiile pentru ieşiri sunt: O7 = I2I1I0; O6 = I2I1I0; O5 = I2I1I0; O4 = I2I1I0; O3 = I2I1I0; O2 = I2I1I0; O1 = I2I1I0; O0 = I2I1I0.

4.    Multiplexoare

Multiplexoarele sunt CLC care permit trecerea datelor de pe una din intrări la o ieşire unică. Selecţia intrării se face printr-un cuvânt de cod de selecţie numit şi adresă.

          I0                                              

                                  MUX          y

        In-1

 

 


                              sm-1    s0

Cu m linii de selecţie se pot selecta 2m intrări. Funcţia realizată de ieşire este:

          y = Ik           unde k este numărul de combinaţii

k = sm-1 × 2m-1 + … + s0 × 20

Aplicaţiile cele mai importante ale MUX sunt la selecţia secvenţială a datelor, conversia paralel-serie a datelor, sisteme de transmisie a datelor pe un singur canal, implementarea circuitelor logice combinaţionale cu o singură ieşire.

Exemple

1)       I0

                              MUX           y

          I1                 2 : 1

 


                                     s

Multiplexorul de tip 2:1 are 2 semnale de intrare, I0 şi I1, un semnal de selecţie s şi o ieşire y. În funcţie de semnalul de selecţie avem pentru ieşire: y = I0 × s + I1 × s.

          s = 0  ®      y = I0

          s = 1  ®      y = I1

Deci multiplexorul lasă să treacă spre ieşire semnalul de pe acea linie de intrare corespunzătoare lui s.

2)       I0

        I1            MUX

          I2                 4 : 1                      y

          I3

 


         

                              s0       s1

Multiplexorul de tip 4:1 are 4 semnale de intrare, 2 semnale de selecţie şi un semnal de ieşire. Ieşirea va fi:

          y = I0 × s0 × s1 + I1 × s0 × s1 + I2 × s0 × s1 + I3 × s0 × s1

Există multiplexoare de tip 8 : 1, 16: 1, 32 : 1. Multiplexoarele integrate au disponibile atât ieşirea adevărată cât şi cea negată.  Ele au şi o intrare de “Enable” pentru validare, care permite o funcţie SI suplimentară.

5.    Demultiplexoare

Demultiplexoarele sunt CLC care permit transmiterea datelor de pe o intrare de date comună pe una din ieşirile selectate. Selectarea ieşirii se face cu ajutorul unui cuvânt de cod de selecţie numit şi adresă.

                                                            y0                                              

             I                  DEMUX

                                             yn-1

 

 


                              sm-1    s0

 

Cu m linii de selecţie se pot selecta 2m ieşiri. Funcţiile de ieşire sunt:

 

y0 = sm-1 ×× s0 × I

y1 = sm-1 ×× s0 × I

 


y2m = sm-1 ×× s0 × I

6.    Comparatoare numerice

Comparatoarele numerice sunt CLC care permit determinarea valorii relative a două numere binare. Comparatoarele pot fi de 1 bit sau de mai mulţi biţi.

Exemplu: Comparator pe 1 bit

          Ai                                     y1

                                                  y2

          Bi                                     y3

 

Funcţiile de ieşire sunt:

          y1 = Ai × Bi             pentru Ai < Bi,

          y2 = Ai + Bi            pentru Ai = Bi

          y3 = Ai × Bi             pentru Ai > Bi

Acest circuit constituie celula de bază pentru compararea numerelor cu mai mulţi biţi.

7.    Detectoare-generatoare de paritate

Detectoarele-generatoare de paritate sunt CLC cu rol de a determina şi genera paritatea sau imparitatea numărului de variabile de intrare egale cu 1. Bitul de paritate este utilizat ca metodă de verificare a transferului de date. Sunt posibile 2 situaţii:

a.     numărul biţilor de 1 + bitul de paritate = număr par

b.    numărul biţilor de 1 + bitul de paritate = număr impar

Realizarea detectoarelor de paritate se bazează pe funcţia logică SAU-EXCLUSIV (0 pentru par şi 1 pentru impar).

8.    Sumatoare-scăzătoare

Sumatoarele şi scăzătoarele sunt CLC care realizează adunarea, respectiv scăderea cifrelor binare.

          Semisumatorul este un CLC care efectuează suma a 2 numere binare de câte 1 bit, fără a ţine cont de transportul de la bitul de semnificaţie imediat inferioară. Semisumatorul este:

          A0                          S0

                    1/2 S

          B0                          C0

 

Valorile pentru suma S0 şi transportul spre rangul superior C0 sunt:

          S0 = A0 × B0 + A0 × B0 = A0 + B0

          C0 = A0 × B0

Sumatorul pentru bitul de rang n este:

          An                                    Sn

          Cn-1             S

          Bn                                    Cn

 

Valorile pentru suma Sn şi transportul Cn pentru rangul superior sunt:

          Sn = An × Bn × Cn-1 + An × Bn × Cn-1 + An × Bn × Cn-1  + An × Bn × Cn-1 =

= (An + Bn) × Cn-1 + (An + Bn) × Cn-1 = An + Bn + Cn-1

          Cn = An × Cn-1 + Bn × Cn-1 + An × Bn

          Sumatoarele pentru cuvinte binare cu mai mulţi biţi se realizează prin interconectarea sumatoarelor pentru 1 bit. Adunarea se efectuează în paralel, iar propagarea transportului în serie.

Semiscăzătorul de 1 bit are ieşirile:

          D0 = A0 × B0 + A0 × B0 = A0 + B0

          I0 = A0 × B0

Scăzătorul complet de rangul n are ieşirile:

          Dn = An × Bn × In-1 + An × Bn × In-1 + An × Bn × In-1  + An × Bn × In-1 =  =(An + Bn) × In-1 + (An + Bn) × In-1 = An + Bn + In-1

          In = An × In-1 + Bn × In-1 + An × Bn

          Scăzătoarele pentru cuvinte binare cu mai mulţi biţi se realizează prin interconectarea scăzătoarelor pentru 1 bit.

9.    Unităţi aritmetico-logice

Unităţile aritmetico-logice sunt CLC care realizează operaţii de tip aritmetic şi operaţii de tip logic.

 

Curs 5

 

          2.3.2.1. Implementarea funcţiilor booleene cu circuite MSI

          Circuitele integrate de tip MSI cum sunt decodificatorul DCD, demultiplexorul DEMUX şi multiplexorul MUX pot fi considerate circuite universale deoarece generează în interior toţi termenii canonici.

          Implementarea cu DCD a unei funcţii booleene nu necesită operaţii de minimizare. La ieşirea DCD se obţin toţi termenii canonici negaţi ai formei canonice disjunctive FCD ai funcţiei. Realizarea funcţiei se face cu o poartă logică de tip SI-NU, cu un număr de intrări egal cu numărul de termeni ai funcţiei.

          Implementarea cu MUX a unei funcţii booleene se bazează pe relaţia care defineşte funcţionarea sa. De exemplu, pentru un MUX de tip 4:1 avem ecuaţia ieşirii:

          y = I0 × x1 × x2 + I1 × x1 × x2 + I2 × x1 × x2 + I3 × x1 × x2

în care se observă că există intrări separate pentru fiecare din cele 4 combinaţii ale variabilelor de selecţie x1, x2.

          Dacă avem o funcţie booleană de n variabile de intrare se pot da factor variabilele x1 şi x2 şi se obţin 4 funcţii de n-2 variabile de intrare, care se vor conecta la intrările I0 – I3 ale unui MUX de tip 4:1. Similar, cu un MUX 8:1 se pot elimina 3 variabile de intrare, iar cu un MUX 16:1 se pot elimina 4 variabile de intrare.

          Dacă avem o funcţie de 4 variabile se pot elimina 3 variabile prin aplicarea lor pe intrările de selecţie ale unui MUX 8:1. La cele 8 intrări ale MUX se vor conecta cele 8 funcţii de o variabilă. Singurele funcţii posibile de o variabilă sunt: xi, xi, 0, 1. Deci putem implementa orice funcţie cu 4 variabile de intrare folosind un singur MUX de 8 căi şi fără porţi adiţionale.

Exemplu

Considerăm funcţia: f = (0, 1, 3, 5, 9, 10, 13, 15) = x3x2x1x0 + x3x2x1x0 + x3x2x1x0 + x3x2x1x0 + x3x2x1x0 + x3x2x1x0 + x3x2x1x0 + x3x2x1x0

Folosim un MUX 8:1 şi aplicăm variabilele x2x1x0 pe intrările de selecţie. Pentru a determina intrările multiplexorului, I0 – I7, vom face un tabel:

          I0                 x3                 x2x1x0

          I1                 1                  (x3 + x3) × x2x1x0

          I2                 x3                 x2x1x0

          I3                 x3                 x2x1x0

          I4                 0                  x2x1x0

          I5                 1                  (x3 + x3) × x2x1x0

          I6                 0                  x2x1x0

          I7                 x3                 x2x1x0

 

Implementarea funcţiei cu MUX este:

                              En

          x3

          1

x3

x3                           f

0                            f

1

0

x3       s2 s1 s0

 


                    x2 x1 x0

Avantajele implementării cu MUX:

-        se poate implementa funcţia cu un sigur circuit de tip MUX;

-        intrarea de Enable poate fi folosită ca un SI final cu întreaga funcţie;

-        doar o singură variabilă trebuie să fie disponibilă şi adevărată şi negată.

Dezavantajele implementării cu MUX:

-        nu se pot folosi termeni în comun în cazul minimizării sistemelor de funcţii (sisteme cu mai multe ieşiri);

-        nu se poate face implementarea funcţiilor la care numărul de termeni este mai mare decât numărul intrărilor MUX;

-        există multe funcţii care pot fi implementate comod prin utilizarea de porţi logice ® MUX utilizat doar pentru funcţii dificile.

Procedura de implementare cu MUX se poate face plecând de la diagrama Karnaugh. Se construieşte o diagramă Karnaugh în care se defineşte domeniul intrărilor I.

x3x2     x1x0

00

01

11

10

00

I0

I1

I3

I2

01

I4

I5

I7

I6

11

I4

I5

I7

I6

10

I0

I1

I3

I2

 

x3x2     x1x0

00

01

11

10

00

1

1

1

 

01

 

1

 

 

11

 

1

1

 

10

 

1

 

1

 

Variabila care variază este x3. Configuraţiile de 1 din diagrama Karnaugh indică modul de conectare a intrărilor MUX, la x3, x3, 1 sau 0.

I0 = x3; I1 = 1; I2 = x3; I3 = x3; I4 = 0; I5 = 1; I6 = 0; I7 = x3

 

          2.3.3. Sinteza CLC cu circuite integrate LSI

          Circuitele integrate de tip LSI – Large Scale Integration – au peste 500 de tranzistoare integrate pe capsulă. Pentru exemplificarea sintezei CLC se descriu două tipuri de circuite din această categorie: ROM (Read Only Memory) şi PLA (Programmable Logic Array), cu varianta FPLA.

          2.3.3.1. Sinteza CLC cu memorii de tip ROM

          Memoria de tip ROM este numită şi memorie fixă sau permanentă. Ea este nevolatilă, conţinutul ei nu se modifică în timpul funcţionării. Structura ei este stabilită în procesul de fabricaţie sau este stabilită de utilizator prin programare.

          I0                                               O0

 


                      DCD            Matrice

          In-1                                             Om-1

 

Memoria ROM este formată din două niveluri de porţi logice: SI (un decodificator) şi SAU-NU (matricea de memorie). DCD din primul nivel primeşte codurile de intrare în binar (n este numărul intrărilor) şi activează pentru fiecare cod o ieşire din cele 2n. Ieşirile DCD se conectează sau nu se conectează la circuitele de tip SAU-NU şi astfel se memorează un 0 sau un 1 logic.

          Vectorii de intrare în ROM se numesc adrese şi reprezintă codurile în binar ale numerelor asociate fiecărui cuvânt de memorie. Ieşirile sunt de obicei “three-state” sau “open colector” pentru a permite legarea în paralel cu ieşirile altor memorii.

Avem notaţiile:

          n = numărul de biţi ai vectorului de intrare (adresa)

          c = numărul de cuvinte memorate în ROM ® c = 2n

          b = numărul de biţi din fiecare cuvânt

Numărul de cuvinte trebuie să fie putere a lui 2. Modul de organizare a ROM este specificat prin produsul c x b. Capacitatea memoriei se exprimă prin numărul total de biţi memoraţi: C = 2n x b. Unitatea de măsură pentru capacitatea memoriei este kilobitul (1 Kb = 1024 biţi).

          Memoriile au o intrare de “Enable” care permite (E = 0) sau inhibă (E = 1) funcţionarea ROM. Dacă memoria este dezactivată, indiferent de adresare, ieşirile sunt pe semnal logic 1.

 

 

          Aplicaţiile mai importante ale memoriilor de tip ROM sunt:

-        memorarea instrucţiunilor şi datelor în sisteme de calcul şi automate secvenţiale;

-        transformări de adresă şi înmagazinarea instrucţiunilor în microprogramare;

-        conversii de cod;

-        generatoare de caractere;

-        generare de secvenţe de impulsuri;

-        implementarea CLC cu un număr mare de variabile de intrare şi ieşire.

Implementarea CLC cu un număr mare de variabile de intrare şi ieşire se bazează pe structura internă a memoriei ROM. Pe nivelul de DCD se decodifică toţi termenii canonici. Fiecare cuvânt de la intrarea matricei reprezintă de fapt un termen canonic format din variabilele de intrare. La nivelul următor se adună toţi termenii din expresia oricărei funcţii şi rezultă funcţia de ieşire. Lista de cuvinte din ROM este chiar tabelul de adevăr al CLC. La implementarea cu ROM nu este necesară minimizarea, deoarece sunt memoraţi toţi termenii canonici şi sunt incluse toate posibilităţile de apariţie a acestora în funcţia de ieşire.

Pentru folosirea eficientă a memoriei ROM în sinteza funcţiilor booleene, variabilele de intrare şi ieşire trebuie codate, astfel încât să conţină cât mai multă informaţie. Se poate codifica orice grup de variabile care sunt mutual exclusive, adică doar una dintre ele poate fi activă la un moment dat.

Pentru reducerea numărului de intrări în ROM se utilizează des şi multiplexoarele.

Exemplu: Să se implementeze cu ROM funcţiile:

          f0(x3,x2,x1,x0) = x3 × x2 × x1 × x0

          f1(x3,x2,x1,x0) = x2 × x1

          f2(x3,x2,x1,x0) = x3 × x2 × x1 × x0 + x3 × x2 × x0 + x3 × x2 × x0 + x2 × x1

Memoria folosită este de tipul:

                    x3       A3

                    x2       A2      16 x 4 biţi

                    x1       A1

                    x0       A0                          CS

 


                                        D3D2D1D0

 


                                            f2  f1  f0

Cu A s-au notat intrările de adrese, cu D datele şi cu CS (chip select), intrarea de Enable a circuitului.

Conţinutul înscris în memorie este dat în tabelul următor:

A3

A2

A1

A0

D3

f2

f1

f0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

0

0

0

1

0

0

0

0

0

0

0

1

1

0

0

0

0

0

1

0

0

0

0

1

0

0

1

0

1

0

0

1

0

0

1

1

0

0

1

0

0

0

1

1

1

0

1

0

0

1

0

0

0

0

1

0

0

1

0

0

1

0

0

0

0

1

0

1

0

0

1

0

1

1

0

1

1

0

0

0

0

1

1

0

0

0

0

1

0

1

1

0

1

0

1

1

0

1

1

1

0

0

1

0

0

1

1

1

1

0

1

0

0

 

          Scopurile urmărite la implementarea cu ROM sunt:

-        utilizarea unui număr minim de circuite integrate;

-        folosirea integrală a capacităţii memoriei.

          Pentru implementarea CLC cu memorii ROM trebuie urmărite următoarele etape:

-        stabilirea dimensiunii memoriei necesare pentru aplicaţia respectivă;

-        alegerea tipurilor de circuite de tip ROM cu dimensiuni identice sau cât mai apropiate de cele stabilite anterior;

-        dacă nu există memorii cu dimensiuni identice sau apropiate de cele dorite se fac transformări de dimensiuni (modificarea numărului de cuvinte sau numărului de biţi pe cuvânt);

-        stabilirea tabelului de adevăr al ROM;

-        reducerea dimensiunii ROM atunci când este posibil prin utilizarea codificării intrărilor sau ieşirilor şi a multiplexării intrărilor.

          2.3.3.2. Sinteza CLC cu PLA

          PLA (Programmable Logic Array) este un CLC cu două nivele de logică programabilă, o matrice de porţi SI şi o matrice de porţi SAU. PLA este de fapt o structură universală, extinsă, de implementare cu 2 nivele de porţi logice. Ambele matrici sunt programabile, în procesul de fabricaţie sau de către utilizator, conform aplicaţiei concrete. PLA este o structură mobilă şi se utilizează eficient pentru sisteme cu mai mult de 8 variabile de intrare.

          Deoarece la PLA sunt programabile ambele nivele, implementarea se face pornind de la termenii elementari ai funcţiei, obţinuţi prin minimizarea ei.

          Reprezentarea schematică a PLA cu n intrări, m ieşiri şi p termeni elementari realizabili este:

x1                                                         conexiune programabilă

 

 


x2

 

 

 

 


xn

 

 


                                  Matrice

                                     SI

                       1                       p

                                                                                1                        f1

          conexiune                           Matrice

          programabilă                      SAU

                                                                                                         fm

                                                                                m

                                                            conexiune                                                                                              programabilă

                                                                                                              CS

          Avantajele implementării cu PLA faţă de implementarea cu ROM se referă la posibilitatea programării matricei SI şi a complementării variabilelor de ieşire (variabilele de ieşire pot fi programate individual ca active pe 0 sau pe 1).

          Aplicaţii ale PLA sunt la:

          - microprogramare;

          - conversii de cod;

          - generare de caractere;

          - realizare de tabele de funcţii;

          - implementarea automatelor secvenţiale.

Observaţie. Există circuite integrate cu grad şi mai mare de integrare (VLSI) utilizate în implementare. Amintim dintre acestea FPGA (Field Programmable Gate Array).

 

 

 

2.4. Hazardul combinaţional

 

          Datorită întârzierilor produse de circuitele logice şi de firele de legătură ale unui CLC se poate ca starea ieşirii circuitului în momentul modificării stării variabilelor să nu coincidă cu valoarea funcţiei corespunzătoare valorii intrărilor în momentul considerat. Pentru timp scurt circuitul are o comportare greşită, numită hazard.

Exemplu

f(x1,x2,x3) = x1 × x3 + x2 × x3

x1                 D1                f’

x3                 g                            D3

                                                            f

x2                 D2

x3                 h

Diagrama Karnaugh pentru funcţie este:

x1   x2x3

00

01

11

10

0

1

 

1

1

1

 

 

1

 

 

          În practică întârzierile D1, D2, D3 ale porţilor SI-NU nu sunt egale, de aceea poate să apară hazardul combinaţional şi când se pune condiţia ca doar o singură variabilă de intrare să se modifice la un moment dat.

          Hazardul apare atunci când starea intrărilor x1x2x3 se modifică de la 010 la 011 sau invers.

 

          x1

 


          x2

 


          x3

                         D1

          g

 


                            D2

          h

 

          f’

 


          f

                                 D3

                               tr

D2 > D1 deşi starea ar trebui să fie nemodificată.

După timpul de reacţie tr = D1 + D2 va apare la ieşire un impuls negativ de durată Dt = D2 - D1 şi în această durată ieşirea ia o valoare incorectă.

        Eliminarea hazardului static se poate face în cazul în care se impune ca la un moment dat să se modifice starea unei singure variabile de intrare. Pentru realizarea funcţiei se consideră şi unii termeni redundanţi din diagrama Karnaugh, astfel încât oricare doi de 1 aflaţi în căsuţe adiacente în diagramă să fie incluşi cel puţin într-un contur luat în considerare la sinteza schemei.

          Pentru exemplul dat se va introduce în expresia funcţiei termenul x1x2.

          f = x2 × x1 + x3 × x1 + x3 × x2

 

          x1              g  D1

          x3

                                                  f’      

          x2              h  D2                         D3      f

          x3

 

          x1              i  Dt

          x2

 

          x1

 


          x2

 


          x3

                         D1

          g

 


                            D2

          h

i

 


          f’

 


          f

 


Observaţii

1.    Hazardul static poate să apară şi când D1 > D2, la schimbarea 011 în 000.

2.    Proiectarea unui CLC când se schimbă mai mult decât o singură variabilă de intrare la un moment dat, fără să apară hazard, este mai dificilă sau chiar imposibil de realizat (hazard de funcţie).

3.    Eliminarea sigură a hazardului se poate face luând în considerare ieşirea circuitului după un interval de timp mai mare decât întârzierea maximă din circuit.

 

Curs 6

 

CAPITOLUL III

CIRCUITE LOGICE SECVENŢIALE

 

        Circuitele logice secvenţiale, CLS, sunt automate de ordinul 1. Se obţin din automatele de ordinul 0 (CLC) prin introducerea unor reacţii (legături inverse). Sunt alcătuite din circuite logice combinaţionale şi elemente de memorare binară.

Semnalele de ieşire ale CLS depind atât de combinaţia semnalelor aplicate pe intrări cât şi de starea circuitului. Un CLS este caracterizat printr-o secvenţă a semnalelor de ieşire şi o secvenţă a stărilor elementelor de memorie, pentru fiecare secvenţă a semnalelor aplicate pe intrările circuitului.

          După modul de funcţionare (modul de transmitere a semnalelor) există 2 categorii principale de CLS:

1.    asincrone – comportarea este determinată de aplicarea pe intrări a semnalelor în momente oarecare; starea circuitului depinde de ordinea în care se schimbă semnalele;

2.    sincrone – comportarea este determinată de aplicarea pe intrări a semnalelor în momente discrete, bine determinate în timp; sincronizarea se realizează cu ajutorul unor impulsuri date de un generator de tact (ceas).

Exemple de CLS: bistabili, numărătoare, registre, memorii RAM.

 

         3.1. Circuite basculante bistabile

 

          Definiţie. Circuitele basculante bistabile (CBB sau bistabil) sunt circuite logice secvenţiale care au două stări stabile distincte. Trecerea dintr-o stare în alta se face la aplicarea unei comenzi din exterior.

          Caracteristica principală a CBB este că sunt sisteme cu memorie (elemente de memorie binară). Un bistabil poate păstra un timp nedefinit informaţia binară şi în acelaşi timp starea sa poate fi citită în orice moment. Se asociază uneia dintre cele 2 stări ale bistabilului funcţia de memorare a cifrei binare 1 şi celei de a doua stări funcţia de memorare a cifrei binare 0. Bistabilul are 2 ieşiri, una care pune în evidenţă cifra binară memorată, numită ieşire adevărată şi a doua, care pune în evidenţă valoarea negată a cifrei binare memorate, denumită ieşire negată.

 

          3.1.1. Bistabilul RS asincron (latch)

          Bistabilul RS asincron are 2 intrări de comandă (de date): S (Set) şi R (Reset) şi două ieşiri Q şi Q (complementare).

          Simbolul bistabilului RS asincron este:

                    S        Q

 

                    R        Q

 

          Tabelul de adevăr al bistabilului RS asincron este:

                          tn            tn+1

                    Sn       Rn      Qt+1

                    0        0        Qt

                    1        0        1

                    0        1        0

                    1        1        *

 

          Din punct de vedere logic nu are sens să se facă simultan înscrierea şi ştergerea informaţiei, ca urmare Sn = 1 şi Rn = 1 va fi o situaţie interzisă (de nedeterminare, pentru că nu se poate prevedea starea finală). Condiţia de bună funcţionare care se pune este Sn × Rn = 0.

          Pentru a face sinteza circuitului vom considera semnalul de ieşire Qt+1 la momentul tn+1, semnal care depinde de starea intrărilor Sn şi Rn şi de starea Qt, la momentul tn. Vom scrie Qt+1 ca o funcţie de 3 variabile:

 


          Qt       Sn       Rn      Qt+1

          0        0        0        0

          0        0        1        0

          0        1        0        1

          0        1        1        *

          1        0        0        1

          1        0        1        0

          1        1        0        1

          1        1        1        *

 

Diagramele Karnaugh pentru Qt+1 şi Qt+1 sunt următoarele:

Qt+1:

Qt    SnRn

00

01

11

10

0

0

0

x

1

1

1

0

x

1

 

Qt+1:

Qt    SnRn

00

01

11

10

0

1

1

x

0

1

0

1

x

0

 

        Dacă minimizăm funcţiile în FCC obţinem:

        Qt+1 = Rn × (Sn + Qt)

Qt+1 = Sn × (Rn + Qt)

 

Deducem funcţiile pentru schema cu porţi de tip SAU-NU:

 


        Qt+1 = Qt+1 = Rn × (Sn + Qt) = Rn + (Sn + Qt)

 


Qt+1 = Qt+1 =  Sn × (Rn + Qt) = Sn + (Rn + Qt)

 

        R                           Q

 

 

 


        S                            Q

 

        Schema bistabilului RS asincron realizat cu porţi de tip SI-NU se bazează pe funcţiile în forma FCD obţinute din diagramele Karnaugh:

        Qt+1 = Sn + (Qt × Rn)

Qt+1 = Rn + (Qt × Sn)

 


        Qt+1 = Sn + (Qt × Rn) = Sn × (Qt × Rn)

 


Qt+1 = Rn + (Qt × Sn) = Rn × (Qt × Sn)

 

        S                            Q

 

 

 


        R                           Q

 

        Pentru Sn = Rn = 1 rezultă Q = 0 şi Q = 0, cele două ieşiri nefiind complementare. Circuitul îşi pierde în acest caz caracterul de circuit bistabil, cu două stări distincte stabile.

        Bistabilul RS asincron este cel mai simplu element de memorare care poate fi realizat cu circuite logice elementare.

Observaţie. O aplicaţie tipică a bistabilului RS asincron este utilizarea acestuia la eliminarea oscilaţiilor ce apar la contactele mecanice.

 

 

 

 

        3.1.2. Bistabilul RS sincron (latch cu ceas)

        Bistabilul RS sincron se obţine din bistabilul RS asincron prin adăugarea unor porţi logice suplimentare cu scopul de a răspunde la semnalele de intrare R şi S numai sub acţiunea unui semnal de comandă numit impuls de tact (ceas).

                                      Sa

        S                                                  Q

 


        CLK

 


        R                                                  Q

 


                                      Ra

        Ieşirile bistabilului RS sincron se modifică doar când semnalul de tact (ceas) CLK este activ. Simbolul bistabilului RS sincron este:

               S     Q

               CLK

               R     Q

 

Diagrama de timp pentru bistabilul RS sincron este:

        CLK

 


        R

 


        S

 


        Q

 

Funcţionarea este descrisă de funcţiile:

        Qt+1 = S + R × Qt

Qt+1 = R + S × Qt

        S × R = 0

        Şi la acest bistabil situaţia intrărilor în care S = R = 1 introduce o nedeterminare, de aceea ea trebuie evitată.

        Cât timp CLK este 0, intrările de date nu influenţează bistabilul. Când CLK = 1 bistabilul urmăreşte modificările intrărilor de date. Când CLK redevine 0 bistabilul se zăvorăşte (de aceea se numeşte latch), păstrează informaţia avută anterior pe ieşire.

        Introducem noţiunea de funcţie de excitaţie, caracteristică pentru fiecare bistabil. Ea pune în evidenţă cum trebuie să fie intrările bistabilului (ce stare trebuie să aibă) pentru a se realiza o tranziţie specifică.

        Tabelul de excitaţie pentru bistabilul RS sincron este:

        Qt   Qt+1 R     S

        0     0     x     0

        0     1     0     1

        1     0     1     0

        1     1     0     x

 

Observaţie. În afara intrărilor sincrone, la bistabilul RS sincron se introduc şi intrări asincrone, Ra şi Sa, la nivelul bistabilului RS asincron (porţile SI-NU). Aceste intrări sunt utilizate cu scopul forţării la 0, prin Ra, sau la 1, prin Sa, a ieşirii bistabilului. Apariţia unor comenzi pe aceste intrări se execută independent de prezenţa sau absenţa tactului. Din acest motiv intrările asincrone ale unui bistabil sunt prioritare în raport cu intrările sincrone.

 

        3.1.3. Bistabilul D sincron (delay)

        Bistabilul D sincron are o singură intrare, D şi cele 2 ieşiri complementare, Q şi Q. Starea următoare a bistabilului D este determinată de modificarea intrării D. El întârzie cu un tact informaţia pe care o primeşte pe intrare (circuit elementar de întârziere). Sunt cele mai răspândite bistabile în registrele de date. Simbolul bistabilului D sincron:

 


                    S

               D     Q

               CLK

                       Q

                    R

 

 


        Bistabilul D se obţine din bistabilul RS sincron:

        D                                                  Q

 


      CLK

 


                                                            Q

 


        Funcţiile bistabilului D sunt:

        Qt+1 = D

        Qt+1 = D

        Tabelul de adevăr al bistabilului D este:

        D     Q

0               0

1               1

Tabelul de excitaţie al bistabilului D este:

        Qt   Qt+1 D

        0     0     0

        0     1     1

        1     0     0

        1     1     1

        Starea următoare a bistabilului de tip D sincron este dependentă doar de semnalul aplicat pe intrare, ea fiind independentă de starea actuală a bistabilului.

        Există două tipuri de bistabile de tip D sincron, unele care comută pe front (atunci când se schimbă tactul) şi altele care comută pe nivel (atunci când tactul este pe nivel).

 

        3.1.4. Bistabilul JK sincron

        Bistabilul JK sincron elimină situaţia de nedeterminare pe ieşiri, prezentă la bistabilul RS sincron, la combinaţia S = R = 1 pe intrări. Se folosesc reacţii (legături inverse) suplimentare.

        Tabelul de adevăr al bistabilului JK sincron este:

        J     K    Qt+1

        0     0     Qt

        0     1     0

        1     0     1

        1     1     Qt

 

        Tabelul de excitaţie al bistabilului JK sincron este:

        Qt   Qt+1 J     K

        0     0     0     x

        0     1     1     x

        1     0     x     1

        1     1     x     0

 

        Funcţiile pentru bistabilul de tip JK se determină din diagrama Karnaugh, pe baza tabelului de adevăr în forma detaliată:

        Qt   J     K    Qt+1

        0     0     0     0

        0     0     1     0

        0     1     0     1

        0     1     1     1

        1     0     0     1

        1     0     1     0

        1     1     0     1

        1     1     1     0

 

Qt+1:

Qt      JK

00

01

11

10

0

 

 

1

1

1

1

 

 

1

 

Qt+1 = J × Qt + K × Qt

Qt+1 = J × Qt + K × Qt

 

        Un bistabil de tip JK sincron se obţine din bistabilul RS sincron prin efectuarea legăturilor care permit eliminarea condiţiei R × S = 0.

        R = K × Qt

S = J × Qt

 

                                                              Q

J

        CLK                                                                  sau

 


K                                                            Q

 

 

 


                                      S

        J                                                          Q

 


        CLK

 


        K                                                         Q

 


                                      R

 


        Intrările S şi R sunt intrările asincrone, care acţionează la ultimul nivel de porţi logice, nu depind de semnalul de tact şi sunt prioritare faţă de intrările sincrone J şi K (adică în momentul în care una dintre ele se activează, bistabilul va funcţiona în regim asincron).

        Simbolul utilizat pentru bistabilul JK sincron este:

 


                    S

               J     Q

               CLK

               K    Q

                    R

 


        O analiză mai atentă a bistabilului JK sincron arată că atât timp cât intrarea de tact (CLK) rămâne pe 1 logic după stabilirea noii stări, bistabilul intră în oscilaţie (îşi tot schimbă starea). Pentru a exista o singură comutare, durata impulsului pe CLK trebuie să fie mai mare decât timpul de propagare a semnalului printr-o poartă logică şi mai mică decât timpul de propagare a semnalului prin două porţi logice.

 

        3.1.5. Bistabilul T sincron (Toggle)

        Bistabilul T sincron se obţine din bistabilul JK sincron prin legarea intrărilor J şi K împreună. Bistabilul schimbă starea (comută) când pe intrare are semnal logic 1.

 


                                      S

        T                                                         Q

 


        CLK

 


                                                                    Q

 


                                      R

 


        Tabelul de adevăr al bistabilului T sincron este:

        T     Qt+1

0               Qt

1     Qt

        Tabelul de excitaţie al bistabilului T sincron este:

        Qt   Qt+1 T

        0     0     0

        0     1     1

        1     0     1

        1     1     0

        Pentru determinarea funcţiilor bistabilului T sincron utilizăm diagrama Karnaugh de 2 variabile:

 

Qt        T

0

1

0

 

1

1

1

 

 

Qt+1 = T × Qt + T × Qt = T + Qt

Qt+1 = T × Qt + T × Qt = T + Qt = T  ×  Qt

 

        Bistabilul T sincron are aceleaşi deficienţe ca şi bistabilul JK sincron, legate de durata impusă a semnalului de tact.

        Bistabilul T sincron este util în aplicaţiile de numărătoare binare.

Concluzie. Deficienţa principală a structurilor de bistabile studiate este că nu se poate face o distincţie netă între intrările care condiţionează momentul comutării şi cele care determină modul comutării (nu se face distincţie netă între când şi cum).

 

        3.1.6. Bistabile master-slave MS

        Bistabilele de tip master-slave introduc un tip de structură care permite rezolvarea comutării bistabilelor. Acest principiul master-slave poate fi aplicat oricărui circuit bistabil.

Structura master-slave este compusă din 2 celule de memorie, una “master” şi cealaltă “slave”.

 

                       Master                 Slave

        S             SM   QM                 SS    QS   Q

                       CLK                             CLK

        R            RM  QM                 RS   QS   Q

 

        CLK

 

 


        Impulsul de tact are două fronturi, unul pozitiv ­ (de urcare de la 0 la 1, în logica pozitivă) şi unul negativ Ż (de coborâre de la 1 la 0, în logica pozitivă).

        La bistabilele master-slave pe frontul crescător al semnalului de tact se face înscrierea informaţiei în master, slave fiind practic deconectat. Pe frontul descrescător următor se face transferul informaţiei din master în slave şi informaţia va apare la ieşiri după frontul descrescător al impulsului de tact. Se asigură astfel o bună separare între intrările de date şi ieşirile bistabilelor.

 

S             1                                   3                            Q

 

 

 


               2                                   4                            Q

R

 


CLK

                       M                                  S

 

 

               2             3

CLK              1             4       5

 

 


Q

                              tS    tH

        tS este timpul de set-up = perioada în care datele trebuie să fie pregătite înainte de impulsul de tact.

tH este timpul de holding.

        Pe perioada 1 – 2 a impulsului de ceas, porţile de la intrare nu sunt încă deschise, iar porţile 3,4 se blochează şi astfel izolează slave de master.

Pe zona 2 – 3  porţile de intrare 1,2 se deschid şi informaţia trece în master. Porţile 3,4 sunt închise şi slave îşi păstrează vechea informaţie.

        Pe zona 3 – 4 porţile 1,2 se închid şi porţile 3,4 nu se deschid încă: master este izolat de intrare şi de slave.

        Pe perioada 4 – 5 porţile 3,4 se deschid, în timp ce porţile 1,2 sunt blocate şi informaţia apare pe ieşire.

        Perioada critică este cea de menţinere a datelor la intrare, tH, pe perioada 4 – 5.

        Memorarea se face pe frontul descrescător al impulsului de tact.

 

Curs 7

 

         3.2. Aplicaţii ale circuitelor basculante bistabile

 

          3.2.1. Numărătoare

          Numărătoarele sunt circuite logice secvenţiale care înregistrează numărul de impulsuri aplicate la intrare. Ele se realizează prin asocierea circuitelor basculante bistabile, având rol de celule de memorie binară, cu circuite logice combinaţionale, care determină modul corect în care urmează ca numărătorul să-şi schimbe starea la fiecare nou impuls aplicat la intrare.

          Clasificare

          Clasificarea numărătoarelor se face după anumite criterii:

1.    modul de funcţionare (comutare a bistabililor):

-        asincrone – celulele de memorie din care este construit numărătorul nu comută simultan ci aleator;

-        sincrone – celulele de memorie din care este construit numărătorul comută simultan sub acţiunea unui impuls de tact aplicat simultan tuturor celulelor.

2.    modul de modificare a stărilor (conţinutului):

-        directe – îşi cresc conţinutul cu o unitate la fiecare impuls aplicat la intrare;

-        inverse – conţinutul scade cu o unitate la fiecare impuls aplicat la intrare;

-        reversibile – numără direct sau invers, în funcţie de o comandă aplicată din exterior.

3.    modul de codificare a informaţiei:

-        binare

-        binar-zecimale

-        modulo “p” etc.

Numărătoarele se pot realiza cu celule de memorie de tip T care realizează o divizare cu 2. Prin interconectarea a “n” celule de memorie se obţine un numărător cu un număr de stări distincte. Fiecărei stări îi vom asocia câte un cuvânt de cod binar de lungime “n”, reprezentând conţinutul celor “n” celule binare pentru starea dată a numărătorului. Codul în care numără un numărător va fi dat de succesiunea cuvintelor de cod binar asociate stărilor numărătorului.

          Numărul stărilor stabile distincte posibile ale unui numărător format din “n” celule binare este 2n. Dacă din aceste stări se elimină “k” stări rezultă un numărător cu p = 2n – k stări distincte. Matematic, operaţia realizată de numărător este o operaţie modulo “p”.

 

Definiţii:

          Capacitatea numărătorului = numărul stărilor sale distincte.

          Factorul de divizare = raportul dintre numărul de impulsuri de la intrare şi numărul impulsurilor de la ieşire.

Observaţie. Un numărător funcţionează de fapt şi ca un divizor de frecvenţă.

          Tipuri de numărătoare

          1. Numărător binar asincron direct

          Schema logică a numărătorului este realizată prin conectarea în cascadă a bistabililor de tip JK în configuraţie de bistabili de tip T:

                              Q0                                    Q1                                    Q2

          J0       Q0                          J1       Q1                          J2       Q2

          CLK0                               CLK1                               CLK2

          K0      Q0                          K1      Q1                          K2      Q2

 


1                                      1                                      1                            R

 


Q0, Q1, Q2, ieşirile numărătorului, ne dau starea lui la un moment dat.

R este semnalul de Reset, folosit pentru aducerea numărătorului în starea iniţială, la 000.

Intrările bistabililor JK sunt toate legate la “1” logic, deci bistabilii vor comuta la fiecare impuls de tact.

Tact exterior se aplică doar pe intrarea primului bistabil.

          Formele de undă pentru numărătorul binar asincron direct sunt:

 


CLK

 


Q0

 


Q1

 


Q2

 

Q2      0        0        0        0        1        1        1        1

Q1      0        0        1        1        0        0        1        1

Q0      0        1        0        1        0        1        0        1

        Numărătorul este modulo 8, numărând direct în binar, de la 000 la 111. El basculează pe fronturile descrescătoare ale impulsurilor de tact.

          Dacă dorim să obţinem valorile numărului în zecimal putem utiliza ieşirile numărătorului, Q0, Q1, Q2, ca şi intrări într-un decodificator binar zecimal.

          Dezavantajul numărătorului asincron este că timpul de comutare, în cel mai defavorabil caz, este egal cu suma timpilor de comutare a tuturor bistabililor care îl compun. Avantajul lui constă în simplitatea schemei, realizată doar cu bistabile, prin interconectări directe.

          2. Numărător binar asincron invers

          Schema logică a numărătorului este:

                              Q0                                    Q1                                    Q2

          J0       Q0                          J1       Q1                          J2       Q2

          CLK0                               CLK1                               CLK2

          K0      Q0                          K1      Q1                          K2      Q2

 


1                                      1                                      1                            R

 


          Formele de undă pentru numărătorul binar asincron invers sunt:

 


CLK

 


Q0

 


Q1

 


Q2

 

Q2      0        1        1        1        1        0        0        0        0

Q1      0        1        1        0        0        1        1        0        0

Q0      0        1        0        1        0        1        0        1        0

        Numărătorul este modulo 8, numărând invers în binar, de la 111 la 000. El basculează pe fronturile descrescătoare ale impulsurilor de tact.

          3. Numărător binar asincron reversibil

          Numărătorul binar asincron reversibil are celula de memorie de bază ca şi numărătoarele asincrone anterioare, dar între celulele de memorie se intercalează multiplexoare de tip 2:1 prin care se comandă sensul de numărare.

                        Q0                                    Q1                                    Q2

          J0       Q0      A  Mux        J1       Q1      A  Mux        J2       Q2

          CLK0             2:1 Y         CLK1             2:1 Y         CLK2

          K0      Q0      B                  K1      Q1      B                  K2      Q2

 


1                                      1                                      1                  R

S

 

Pentru S = 0 numărătorul numără direct, iar pentru S = 1 numărătorul numără invers.

          4. Numărător binar sincron serie şi paralel

          Realizarea numărătoarelor de tip sincron are ca scop creşterea vitezei de comutare a numărătorului în ansamblu.

          Funcţionarea acestor numărătoare este sincronă, bistabilii, de tip JK, având intrările de CLK legate împreună. Pe baza tabelului de adevăr se obţine logica combinaţională suplimentară, care asigură funcţionarea corectă a numărătorului.

 

Nr.

Q0

Q1

Q2

Q3

0

0

0

0

0

1

1

0

0

0

2

0

1

0

0

3

1

1

0

0

4

0

0

1

0

5

1

0

1

0

6

0

1

1

0

7

1

1

1

0

8

0

0

0

1

9

1

0

0

1

10

0

1

0

1

11

1

1

0

1

12

0

0

1

1

13

1

0

1

1

14

0

1

1

1

15

1

1

1

1

 

          Schema logică pentru numărătorul binar sincron serie este:

 


                           Q0                        Q1                          Q2                       Q3

 

 


     1

                S                            S                            S                             S

          J         Q                 J         Q                 J         Q                 J         Q

          CLK                       CLK                       CLK                       CLK

          K       Q                 K       Q                 K       Q                 K       Q

                R                           R                            R                            R

 


Reset

 

          Intrările J şi K ale primului bistabil sunt legate la 1 “logic” şi vor comuta bistabilul la fiecare tact (conform tabelului de adevăr). Al doilea bistabil comută doar din 2 în 2 impulsuri de tact, adică atunci când Q0 trece din 1 în 0, deci pot fi legate la ieşirea primului bistabil. Al treilea bistabil basculează din 4 în 4 impulsuri şi va fi comandat de funcţia SI între ieşirile Q1 × Q0, iar al patrulea bistabil comută din 8 în 8 impulsuri şi va fi comandat de funcţia SI între ieşirile Q2 × Q1 × Q0. În cazul numărătorului binar sincron de tip serie porţile logice de tip SI utilizate vor fi toate cu 2 intrări, ca în schema logică anterioară.

          Pentru mărirea vitezei de răspuns a numărătorului se vor folosi porţi logice de tip SI cu numărul de intrări necesar funcţiei SI implementate, ca în schema de mai jos, corespunzătoare unui numărător binar sincron paralel.

 


                           Q0                        Q1                          Q2                       Q3

 

 


     1

                S                            S                            S                             S

          J         Q                 J         Q                 J         Q                 J         Q

          CLK                       CLK                       CLK                       CLK

          K       Q                 K       Q                 K       Q                 K       Q

                R                           R                            R                            R

CLK

Reset

 

          Timpul de comutare al numărătorului binar sincron paralel este mai mic decât la cel serie, dar există porţi de tip SI cu un număr mai mare de intrări.

          5. Numărător binar sincron reversibil

          Pentru realizarea reversibilităţii numărătorului binar sincron se folosesc 2 intrări suplimentare, Count-Up (numără direct) şi Count-Down (numără invers). Aceste numărătoare vor avea şi ieşiri pentru transport (Carry) şi împrumut (Borrow), care vor permite legarea în cascadă a numărătoarelor.

 

          Sinteza numărătoarelor modulo p

          Pentru a face sinteza unui numărător cu p ą 2n trebuie determinat numărul minim de celule de memorie binară necesare. Relaţia folosită este: 2n ł p. Celulele de memorie se interconectează apoi astfel încât să se omită (2n – p) stări. Din acest motiv există mai multe variante posibile pentru interconectare, deci şi pentru sinteza numărătorului.

 

Exemplu: Sinteza unui numărător modulo 5.

Pentru 2n ł 5 obţinem n = 3, deci vom avea 3 celule de memorie pentru numărător. Numărul stărilor omise va fi 23 – 5 = 8 – 5 = 3.

          Presupunem că avem următoarea succesiune a stărilor de numărare (ciclu de numărare):

          000              001              010              011              100

 

 


Evident că se putea alege şi altă succesiune a stărilor numărătorului.

          Folosim pentru realizarea numărătorului bistabili de tip JK.

          Se construieşte un tabel cu stările actuale ale numărătorului, cu stările următoare şi cu condiţionările intrărilor JK ale celor 3 bistabili folosiţi pentru sinteză. Completarea tabelului se face pe baza tabelului de excitaţie al bistabilului JK sincron.

        Qt   Qt+1 J     K

        0     0     0     x

        0     1     1     x

        1     0     x     1

        1     1     x     0

 

Q2t

Q1t

Q0t

Q2t+1

Q1t+1

Q0t+1

J2

K2

J1

K1

J0

K0

0

0

0

0

0

1

0

x

0

x

1

x

0

0

1

0

1

0

0

x

1

x

x

1

0

1

0

0

1

1

0

x

x

0

1

x

0

1

1

1

0

0

1

x

x

1

x

1

1

0

0

0

0

0

x

1

0

x

0

x

 

Diagramele Karnaugh pentru cele 6 intrări ale bistabilelor ne permit determinarea funcţiilor pentru intrări. Stările omise se consideră indiferente.

J2:

Q2  Q1Q0

00

01

11

10

0

 

 

1

 

1

x

x

x

x

J2 = Q1 × Q0

K2:

Q2  Q1Q0

00

01

11

10

0

x

x

x

x

1

1

x

x

x

K2 = 1

J1:

Q2  Q1Q0

00

01

11

10

0

 

1

x

x

1

 

x

x

x

J1 = Q0

K1:

Q2  Q1Q0

00

01

11

10

0

x

x

1

 

1

x

x

x

x

K1 = Q0

J0:

Q2  Q1Q0

00

01

11

10

0

1

x

x

1

1

 

x

x

x

J0 = Q2

K0:

Q2  Q1Q0

00

01

11

10

0

x

1

1

x

1

x

x

x

x

K0 = 1

          Schema logică pentru numărătorul modulo 5 va fi următoarea:

 


                              Q2                            Q1                        Q0

 

 


          J2       Q2                J1       Q1                J0       Q0

          CLK                       CLK                       CLK

 1       K2      Q2                K1      Q1           1   K0      Q0

                R2                          R1                          R0

 


CLK

      Reset

 

          Pentru rezolvarea completă a sintezei numărătorului modulo 5 trebuie discutată şi problema stărilor omise. Ce se întâmplă cu numărătorul dacă nu are secvenţă de iniţializare sau dacă ajunge cumva în una dintre stările care nu face parte din ciclul de numărare? Care va fi evoluţia numărătorului?

          Trebuie verificate tranziţiile numărătorului în cazul în care este într-o stare din afara ciclului de numărare. Putem avea 2 situaţii: fie numărătorul revine singur în ciclul de numărare, fie trebuie reproiectat astfel încât să revină în ciclul de numărare.

          Stările omise în exemplul dat sunt:

                    101    ®      010

                    110    ®      010    şi din starea aceasta se revine în ciclu

                    111    ®      010

Observaţie. Un numărător modulo p se poate obţine folosind un numărător binar sincron. Se lasă numărătorul binar să evolueze până la starea p-1. La atingerea stării “p” se aplică numărătorului, printr-o logică combinaţională, un impuls de ştergere (pe intrarea de Reset).

 

          Numărătoare Moebius

          Numărătoarele Moebius sunt numărătoare în inel cu coadă întoarsă (twisted tail ring counter).

          Deşi există numărătoare de tip MSI pentru numărarea binară sau a altor tipuri de secvenţe, există unele cazuri în care se preferă proiectarea unor numărătoare speciale cu bistabili şi porţi logice.

Exemplu: un numărător cu 8 stări la care la fiecare tranziţie se modifică numai un singur bit, se poate construi utilizând următoarea secvenţă:

0000                      0

                    1000                      8

                    1100                      12

                    1110                      14

                    1111                      15

                    0111                      7

                    0011                      3

                    0001                      1

          Proiectarea se face şi cu bistabili de tip D şi cu bistabili de tip JK.

Tabelul folosit pentru sinteza numărătorului este:

Q3t

Q2t

Q1t

Q0t

Q3t+1

Q2t+1

Q1t+1

Q0t+1

D3

D2

D1

D0

J3

K3

J2

K2

J1

K1

J0

K0

0

0

0

0

1

0

0

0

1

0

0

0

1

x

0

x

0

x

0

x

1

0

0

0

1

1

0

0

1

1

0

0

x

0

1

x

0

x

0

x

1

1

0

0

1

1

1

0

1

1

1

0

x

0

x

0

1

x

0

x

1

1

1

0

1

1

1

1

1

1

1

1

x

0

x

0

x

0

1

x

1

1

1

1

0

1

1

1

0

1

1

1

x

1

x

0

x

0

x

0

0

1

1

1

0

0

1

1

0

0

1

1

0

x

x

1

x

0

x

0

0

0

1

1

0

0

0

1

0

0

0

1

0

x

0

x

x

1

x

0

0

0

0

1

0

0

0

0

0

0

0

0

0

x

0

x

0

x

x

1

Diagramele Karnaugh ne permit să determinăm valorile pentru intrările bistabilelor D3 – D0 şi J3 – K0.

 

D3:

Q3Q2 Q1Q0

00

01

11

10

00

1

 

 

x

01

x

x

 

x

11

1

x

 

1

10

1

x

x

x

D3 = Q0

D2:

Q3Q2 Q1Q0

00

01

11

10

00

 

 

 

x

01

x

x

 

x

11

1

x

1

1

10

1

x

x

x

D2 = Q3

D1:

Q3Q2 Q1Q0

00

01

11

10

00

 

 

 

x

01

x

x

1

x

11

1

x

1

1

10

 

x

x

x

D1 = Q2

D0:

Q3Q2 Q1Q0

00

01

11

10

00

 

 

1

x

01

x

x

1

x

11

 

x

1

1

10

 

x

x

x

D0 = Q1

J3:

Q3Q2 Q1Q0

00

01

11

10

00

1

 

 

x

01

x

x

 

x

11

x

x

x

x

10

x

x

x

x

J3 = Q0

K3:

Q3Q2 Q1Q0

00

01

11

10

00

x

x

x

x

01

x

x

x

x

11

 

x

1

 

10

 

x

x

x

K3 = Q0

J2:

Q3Q2 Q1Q0

00

01

11

10

00

 

 

 

x

01

x

x

x

x

11

x

x

x

x

10

1

x

x

x

J2 = Q3

K2:

Q3Q2 Q1Q0

00

01

11

10

00

x

x

x

x

01

x

x

1

x

11

 

x

 

 

10

x

x

x

x

K2 =Q3

J1:

Q3Q2 Q1Q0

00

01

11

10

00

 

 

x

x

01

x

x

x

x

11

1

x

x

x

10

 

x

x

x

J1 = Q2

K1:

Q3Q2 Q1Q0

00

01

11

10

00

x

x

1

x

01

x

x

 

x

11

x

x

 

 

10

x

x

x

x

K1 = Q2

J0:

Q3Q2 Q1Q0

00

01

11

10

00

 

x

x

x

01

x

x

x

x

11

 

x

x

1

10

 

x

x

x

J0 = Q1

K0:

Q3Q2 Q1Q0

00

01

11

10

00

x

1

 

x

01

x

x

 

x

11

x

x

 

x

10

x

x

x

x

K0 = Q1

Cele 2 scheme logice pentru numărător sunt:

 

 


          D3      Q3      D2      Q2      D1      Q1      D0      Q0

 

          CLK   Q3      CLK   Q2      CLK   Q1      CLK   Q0

 


CLK

 

 

 


          J3       Q3      J2       Q2      J1       Q1      J0       Q0

          CLK             CLK             CLK             CLK

          K3      Q3      K2      Q2      K1      Q1      K0      Q0

 


CLK

 

Observaţie. Starea fiecărui bistabil este determinată de starea anterioară a bistabilului plasat în stânga sa, iar starea primului bistabil este determinată de ieşirea complementară a ultimului bistabil.

          Se pot construi numărătoare Moebius de orice dimensiune (ordin).

          Aplicaţii ale numărătoarelor Moebius

a. Se pot folosi ca şi numărătoare de stare. Dacă numărătorul este implementat cu bistabile JK, fiecare comutare a stării este controlată de câte o intrare diferită. Din acest motiv, modificarea oricărei stări va putea fi controlată independent, adăugând o poartă SI sau SI-NU pe intrarea respectivă (de exemplu tranziţia 0 ® 8 este controlată de J3, tranziţia 8 ® 12 de J2 ş.a.m.d.).

        b. Generatoare de ceas cu mai multe faze. Cele 8 ieşiri ale numărătorului generează de fapt 8 semnale de ceas defazate în mod egal, cu factor de umplere de 50%. În general un numărător Moebius de n biţi generează 2n faze de ceas.

          c. Decodificarea oricărei stări se poate face printr-o poartă cu 2 intrări. Pt. a face decodificarea stării se vor urmări cei 2 biţi adiacenţi distincţi, 1 şi 0.

          d. Decodificarea stărilor succesive se realizează prin porţi care au ca intrări ultimul 1 al primei stări şi primul 0 al ultimei stări.

 

Curs 8

 

          3.2.2. Registre

          Registrele sunt circuite logice secvenţiale care permit stocarea şi/sau deplasarea informaţiei codificate binar. Ele se realizează din celule de memorie binară (CBB) şi din circuite logice combinaţionale (CLC), care permit înscrierea, citirea şi transferul informaţiei. Capacitatea unui registru este dată de numărul celulelor de memorie.

          Orice informaţie binară, care nu depăşeşte capacitatea registrului, poate fi înscrisă prin acţionarea corespunzătoare a intrărilor (care depinde şi ea de natura bistabilelor).

          Registrele pot să fie de mai multe tipuri: de memorie; de deplasare; combinate; universale.

          Registrele de memorie memorează informaţia binară în celule de memorie binară. În fiecare celulă de memorie se memorează un bit de informaţie. Încărcarea se poate face paralel, prin intrările asincrone, de Set şi Reset.

          Registrele de deplasare sunt cele care realizează transferul informaţiei. Transferul se poate face: stânga-dreapta; dreapta-stânga; în ambele sensuri.

          La fiecare impuls de tact conţinutul registrului se deplasează cu câte o celulă (în sensul stabilit). Semnalul de ieşire este identic cu cel de intrare, dar întârziat cu un număr de impulsuri de tact egal cu numărul de celule de memorie din care este format registrul.

          Exceptând primul bistabil, ecuaţia de stare a unui registru de deplasare stânga-dreapta este dată de relaţia: Qi(t+1) = Qi-1(t) × c (unde c = impulsul de tact).

Exemplu: Registru de deplasare stânga-dreapta cu bistabile JK MS.

                              Q0                          Q1                          Q2                Q3

   SIN

          J0       Q0                J1       Q1                J2       Q2                J3       Q3

        CLK                      CLK                      CLK                      CLK

          K0      Q0                K1      Q1                K2      Q2                K3      Q3

                R                            R                             R                           R

Reset

 


CLK

La fiecare impuls de tact conţinutul bistabilului Qi se transferă în bistabilul Qi+1. În bistabilul Q0 se introduce informaţia din exterior, iar conţinutul ultimului bistabil se pierde. Încărcarea registrului se realizează deci în mod serie. Iniţializarea registrului se face prin semnalul de Reset, care forţează toate ieşirile registrului în 0 logic.

          Registrele de deplasare dreapta-stânga şi reversibile se realizează folosind circuite logice combinaţionale suplimentare.

          Registrele combinate sunt cele care au şi funcţia de memorare şi cea de deplasare.

          Registrele universale cumulează toate funcţiile: deplasare stânga-dreapta, deplasare dreapta-stânga, încărcare serie sau paralelă a informaţiei, citire serie sau paralelă a informaţiei.

                         RI      A                 B                    C              D       LI

S0

 


S1

 

 

 

 


                                    D    Q           D    Q            D    Q             D    Q       

CLK                           CLK             CLK              CLK              CLK

                                     CLR             CLR              CLR               CLR

 


CLR

                                                  Q0                Q1                Q2                Q3

          Intrările de selecţie S1S0 condiţionează modul de funcţionare a registrului. Avem:

          S1S0   = 00   păstrează conţinutul nemodificat;

          S1S0   = 01   deplasare stânga-dreapta;

          S1S0   = 10   deplasare dreapta-stânga;

          S1S0   = 11   încărcare paralelă.

          Ştergerea registrului se face asincron, prin semnalul CLR.

 

          Aplicaţii ale registrelor

          Registrele sunt utilizate în mai multe tipuri de aplicaţii, după funcţiile pe care pot să le îndeplinească.

1.    Registre de deplasare cu reacţie

Au ieşirile conectate la intrări şi pot fi:

-        registre de deplasare în inel – conţinutul ultimei celule de memorie se înscrie în prima celulă de memorie;

                                                            Q0      Q1      Q2      Q3

                                                            1        0        0        0

          SIN                                             0        1        0        0

                                                            0        0        1        0

        Q0  Q1  Q2  Q3                       0      0      0      1

                                                            1        0        0        0

          - registre (numărătoare) Johnson – în prima celulă se introduce conţinutul negat al ultimei celule.

                                                            Q0      Q1      Q2      Q3

                                                            0        0        0        0

          SIN                                             1        0        0        0

                                                            1        1        0        0

        Q0  Q1  Q2  Q3                       1      1      1      0

                                                            1        1        1        1

                                                            0        1        1        1

                                                            0        0        1        1

                                                            0        0        0        1

                                                            0        0        0        0

2. Memorie de tip FIFO (First In, First Out), primul înscris – primul citit (memorie coadă)

Se realizează cu registre de deplasare stânga-dreapta. Numărul registrelor depinde de lungimea cuvintelor ce urmează a fi memorate. Capacitatea memoriei depinde de lungimea registrelor. De exemplu, dacă registrele sunt de 4 biţi, capacitatea memoriei este de 4 cuvinte. La fiecare impuls de tact se introduc datele pe intrarea serială.

                                                                                y1

 


                    SIN                                             Ts

          x1

                                                                                y2

 


                    SIN                                             Ts

          x2

                                                                                y3

 


                    SIN                                             Ts

          x3

                                                                                y4

 


                    SIN                                             Ts

          x4

                                                                                          CLK

 

 

 

          3. Memorie de tip LIFO (Least In, First Out), ultimul introdus – primul citit (memorie stivă)

        Realizarea se face cu registre combinate. Numărul registrelor este dat de lungimea cuvântului de memorie, iar lungimea registrelor determină capacitatea de memorie.

               xi

          A0

          A1

                              A1      A0

                              SIN        Q0             yi

                                           Q1

                                           Q2

                                           Q3

                              R        CLK

 

 


          A1      A0

          0        1        deplasare stânga-dreapta ®  înscriere

          1        0        citire

          Memoria stivă poate fi organizată şi soft, în memoria de tip RAM, dar deşi capacitatea acesteia poate fi mare, timpul de acces va fi şi el mare.

          4. Conversia serie-paralel şi paralel serie a informaţiei

          Pentru conversia serie-paralel se face încărcarea registrului pe intrarea serială şi cu comandă de tact serie Ts şi se citeşte informaţia pe ieşiri, paralel.

          Pentru conversia paralel-serie se face încărcarea paralelă a informaţiei, cu comandă de tact paralel Tp şi apoi se deplasează informaţia stânga-dreapta, cu comandă de tact serie Ts şi se citeşte serie la ultima ieşire.

          5. Generatoare de secvenţe

          Generatoarele de secvenţe generează o succesiune de secvenţe binare (1 şi 0) de lungime dată (prestabilite). Lungimea secvenţei reprezintă numărul de biţi după care se repetă întreaga secvenţă. Secvenţele binare pot fi:

          - aleatoare, de lungime infinită;

          - deterministe, de lungime finită.

          Secvenţele binare deterministe de lungime maximă se numesc secvenţe pseudoaleatoare.

          Realizarea generatoarelor de secvenţe se face cu registre în reacţie cu circuite logice combinaţionale adecvate.

 

 

                              Q0                          Q1                          Q2

          y = Q0 + Q2

 


                    S0       Q0                S1       Q1                S2       Q2

                    CLK                       CLK                       CLK

                    R0      Q0                R1      Q1                R2      Q2               

          CLK

 


Secvenţa pseudoaleatoare generată la ieşirile Q0Q1Q2 este:

100 ® 110 ® 111 ® 011 ® 101 ® 010 ® 001

 

 


          3.2.3. Memorii RAM

          Memoriile de tip RAM (random access memory) sunt memorii de tip citeşte-scrie, cu acces aleator. Ele nu-şi păstrează informaţia după întreruperea tensiunii de alimentare.

          Memoria este formată din nivelul de decodificare, matricea de memorie realizată cu celule de memorie binară de tip “latch” şi nivelul de multiplexare.

          Dimensiunea memoriei este specificată prin numărul de cuvinte şi numărul de biţi pe cuvânt. Capacitatea memoriei este dată de numărul de biţi memoraţi în matricea de memorie.

          Schema funcţională de principiu a unei memorii RAM este următoarea:

 

          Adresă                                       CE sau CS (chip select)

          n                  Decodificator

 


                                        2n

                    n        Matrice de

                              memorie

                                        2n

                                                            WE  (write enable)

                              Multiplexor

 


                              Date

 

          Decodificatorul acţionează pentru selectarea fiecărei celule de memorie, iar multiplexorul permite selectarea oricărei celule de memorie la intrare – ieşire.

          Validarea memoriei se face prin intrarea CS. Citirea memoriei se face dacă WE = 1, iar scrierea memoriei se face dacă WE = 0.

Datele de intrare şi ieşire pot să folosească linii diferite sau aceeaşi linie bidirecţională. Memoriile pot avea un număr diferit de căi de date (de obicei cuvinte de 1 bit sau de un număr de biţi multiplu de 2).

          Memoriile de tip RAM pot să fie din punct de vedere constructiv de tip static sau dinamic. Cele dinamice sunt realizate cu condensatoare şi au nevoie de reîmprospătarea la diferite intervale de timp a informaţiei memorate, pentru a se evita pierderea ei.

          Extinderea capacităţii memoriilor se face atât prin extinderea dimensiunii cuvântului de memorie (numărul de biţi din cuvânt), cât şi prin extinderea numărului de cuvinte ale memoriei (adresa de memorie).

 

Curs 9

 

          3.3. Sinteza circuitelor logice secvenţiale sincrone

 

          Circuitele secvenţiale sincrone trec dintr-o stare în alta la momente distincte de timp, determinate de impulsurile de tact. Între două impulsuri de tact starea circuitului nu se modifică.

          Variabile de intrare

 


                              Generare stare nouă

Calculul excitaţiilor secundare

                                        CLC

 


                                        Excitaţii secundare

                    Tact

 

                              Registru de stări

                              Stări interne

                                        CL

 


                                                  Variabile secundare

                    Calculul variabilelor de ieşire

                                        CLC

 

CL = circuit logic general – păstrează starea internă ® registru de stări (bistabili RS, D, JK, registre, memorii); poate fi circuit logic secvenţial cu buclă de reacţie.

CLC = determină funcţiile de excitaţie secundare care în prezenţa tactului determină trecerea circuitului în altă stare ® se poate numi generatorul stării noi; se pot realiza cu porţi logice sau cu circuite specializate (multiplexoare, decodificatoare).

Variabilele de intrare sunt în general sincrone cu impulsul de tact, dar pot fi şi de tip asincron.

 

          3.3.1. Etapele de sinteză

1. Expunerea condiţiilor de funcţionare (descrierea comportării circuitului).

Stabilirea modalităţii de definire a circuitului care trebuie sintetizat prin:

-        tabel de tranziţii;

-        graf de tranziţii;

-        organigramă;

-        forme de undă.

Trebuie evidenţiate:

-        stările prin care trece circuitul;

-        valorile variabilelor de intrare pentru care se schimbă stările;

-        valorile rezultate ale variabilelor de ieşire.

Evoluţia circuitului începe într-o stare iniţială şi de obicei se revine la această stare, după ultima stare a ciclului.

          2. Se codifică stările circuitului.

          3. Se încearcă reducerea (simplificarea) numărului de stări a circuitului, dacă este posibil, încât să se păstreze funcţionarea lui corectă.

        4. Se decide asupra modului de implementare (registrul de stări interne).

        5. Se determină funcţiile de excitaţie şi cele de ieşire, dacă este posibil.

          6. Se studiază problemele legate de eventualele ieşiri false (hazard) sau tranziţii false.

          7. Se desenează circuitul.

          Etapa cea mai dificilă este cea de codificare a stărilor. În general funcţionările defectuoase se datorează unor tranziţii greşite între stări sau unor semnale greşite care apar la circuitul de generare a variabilelor de ieşire.

          Tranziţiile greşite între stări apar datorită prezenţei variabilelor de intrare asincrone (se elimină cel mai uşor dacă se sincronizează variabilele de intrare cu semnalul de tact).

          Codificarea stărilor se stabileşte astfel încât, în orice stare, pentru toate combinaţiile posibile de intrări asincrone, să nu fie mai mult decât o singură variabilă de stare dependentă de o variabilă de intrare asincronă. În aceste condiţii, două stări rezultate din calea de ieşire a unei intrări asincrone vor avea codificare adiacentă.

          Ieşirile false pot să apară din cauză că la trecerea dintr-o stare în alta, variabilele de stare practic nu se modifică simultan. Pentru evitarea tranziţiilor false ale ieşirilor se pot folosi metodele:

-        se realizează o codificare adiacentă a stărilor;

-        se forţează trecerea circuitului prin stări suplimentare;

-        se sincronizează variabilele de ieşire.

Observaţie: Hazardul static al CLC se elimină prin proiectare (se introduc termeni redundanţi, indiferenţi).

 

 

 

 

          3.3.2. Utilizarea organigramei în sinteza circuitelor logice secvenţiale sincrone

          Elementele componente ale organigramei de funcţionare a oricărui circuit secvenţial sincron sunt:

          - elementul de intrare (control sau decizie):

                    Variabile de intrare

                              - sincrone

 


var.              1

 


                              0

                              - asincrone

 


var.              1

 


                              0

          - elementul de stare:

                              Q2Q1Q0

                                 000

 


          - elementul de ieşire:

 


                    transfer

 


          Configuraţii elementare care unesc cele 3 elemente de bază:

          A       001    tranziţie simplă:

- contor de timp

                                        - soluţionarea problemei de codificare a stărilor

          B        011

 

 

 


          A                 stare cu ieşire

 


      Adună

 


          B

 

 

 


                    A       stare cu decizie

 


1        I1       0

 

      B                           C

 

 


                    A       stare cu ieşire şi decizie

 


                Scade

1        I1       0

      B                           C

 

 


                    A       stare cu ieşire condiţionată

 


          I1       1

                    0           Ieşire

 


                    B

 

 


                              A                 stări cu decizii multiple şi ieşire

                      0        I1     1

 


                    1

              I2                                   C

            0             1        0

                                I3

              B                               Ieşire

 

 


Observaţii

1.    Orice tranziţie între 2 stări ale circuitului se face într-un singur impuls de tact.

2.    La un moment dat circuitul se poate găsi într-o singură stare.

3.    Un circuit care se găseşte la un moment dat într-o stare dată, cu un set de intrări dat, poate avea o singură stare următoare.

 

3.3.3. Sinteza circuitelor secvenţiale sincrone cu diferite elemente de memorie

          În sinteza circuitelor secvenţiale sincrone se vor folosi ca elemente de memorie bistabili de tip D şi JK. Implementarea registrului de stări se va realiza cu aceste tipuri de bistabile.

Exemplu: Să se recunoască secvenţa 101 în şirul de cifre binare 10101.

Graful de tranziţii are în noduri stările circuitului. Pe arce avem tranziţia dintr-o stare în alta pentru o anumită intrare, cu o anumită ieşire.

 

                    0/0               1/0

                             1/0                0/0

    Init           A                 B                  C

                                                   1/1

                                  0/0

          Avem 2 variabile de stare pentru a putea codifica 2 stări (A=00, B=01, C=11). Cu x am notat intrarea, cu z ieşirea. Tabelul de tranziţii este:

                              St         St+1,z

                    Q1Q0            x=0    x=1

                    00      A       A,0    B,0

                    01      B        C,0     B,0

                    11      C        A,0    B,1

 

a. Implementăm registrul de stări cu bistabile de tip D.

Funcţiile de excitaţie se deduc explicitând diagrama stărilor pentru momentul t şi momentul t+1. Stările se vor înlocui cu codurile lor (A=00, B=01, C=11).

          St                 St+1 (Q1Q0)t+1                        z

          Q1Q0            D1D0            D1D0

                              x=0              x=1              x=0    x=1

          00 (A)          00 (A)          01 (B)          0        0

          01 (B)          11 (C)          01 (B)          0        0

          11 (C)          00 (A)          01 (B)          0        1

 

          Di = Qit        ecuaţia stării următoare

 

D1:

Q1Q0    x

0

1

00

0

0

01

1

0

11

0

0

10

x

x

D1 = Q1 × Q0 × x

D0:

Q1Q0    x

0

1

00

0

1

01

1

1

11

0

1

10

x

x

 

D0 = x + Q1 × Q0

z:

Q1Q0    x

0

1

00

0

0

01

0

0

11

0

1

10

x

x

z = Q1 × x

 

          La trecerea din starea C în starea A se poate trece prin starea B, ceea ce nu corespunde funcţionării. În mod normal se introduce o stare suplimentară pentru a rezolva situaţia.

          Schema pentru circuitul secvenţial sincron este:

 

          D1      Q1      D0      Q0                Q1

          CLK             CLK                       Q0                          D1

                    Q1                Q0                x

                R                 R                       Q0

Init                                                       Q1                                    D0

                                                            x

CLK                                                     Q1                z

                                                            x

 

          b. Implementăm registrul de stări cu bistabile de tip JK.

          Diagrama stărilor se completează ţinând cont de tabelul de excitaţie al bistabilului JK.

 

 

        Qt   Qt+1 J     K

        0     0     0     x

        0     1     1     x

        1     0     x     1

        1     1     x     0

 

          St              St+1(Q1Q0)t+1                                                 z

          Q1Q0                                J1K1   J0K0   J1K1   J0K0

                              x=0    x=1         x=0              x=1         x=0    x=1

          00 (A)          00      01      0x      0x      0x      1x      0        0

          01 (B)          11      01      1x      x0      0x      x0      0        0

          11 (C)          00      01      x1      x1      x1      x0      0        1

 

J1:

Q1Q0    x

0

1

00

0

0

01

1

0

11

x

x

10

x

x

J1 = Q0 × x

K1:

Q1Q0    x

0

1

00

x

x

01

x

x

11

1

1

10

x

x

K1 = 1

J0:

Q1Q0    x

0

1

00

0

1

01

x

x

11

x

x

10

x

x

J0 = x

K0:

Q1Q0    x

0

1

00

x

x

01

0

0

11

1

0

10

x

x

K0 = Q1 × x

 

z:

Q1Q0    x

0

1

00

0

0

01

0

0

11

0

1

10

x

x

z = Q1 × x

 

          3.3.4. Implementarea generatorului noii stări cu multiplexoare

          Pentru a realiza o implementare cu multiplexoare se scriu funcţiile de excitaţie pentru bistabile în forma canonică (fără a se minimiza).

Se iau în considerare locaţiile care sunt 1 sau care au o variabilă înglobată.

                    x

 


                              CLC

 

 


                              MUX

 

 


                    Registru de stare

 

 


                              CLC

 


                              y

 

          3.3.5. Implementarea generatorului noii stări cu decodificatoare

          În cazul implementării generatorului noii stări cu decodificatoare, la intrarea decodificatorului sunt aplicate variabilele de stare, iar la ieşire sunt individualizate stările interne.

 

          3.3.6. Implementarea generatorului noii stări cu memorii şi multiplexoare

          Acest tip de implementare a generatorului noii stări se utilizează în cazul circuitelor complexe. Se asigură o simplificare a logicii de generare a noii stări şi o creştere a siguranţei în funcţionare.

 

 

 

          Implementarea generatorului noii stări cu decodificatoare:

                    x

 


                              CLC

 


                    Registru de stări

 

                              DEC

 


                              CLC

 


                              y

 

Implementarea generatorului noii stări cu multiplexoare şi memorii:

                    x

 


                              MUX

 


                         Memorie

 

                    Registru de stări

 


                              CLC

 


                              y

 

 

Curs 10

 

Exemplu: Sinteza unui automat (circuit secvenţial sincron) de răspuns la telefon. Se poate programa numărul de apeluri sonore ale soneriei telefonului după care începe să funcţioneze automatul. Programul automatului se încheie în condiţiile: 1) după preluarea (înregistrarea) mesajului; 2) dacă apelantul închide; 3) dacă destinatarul răspunde la telefon.

1. Determinarea funcţionării – obţinerea organigramei.

Se stabileşte schema bloc a automatului, cu componentele periferice adiţionale necesare. Se stabilesc variabilele de intrare şi ieşire şi caracterul lor sincron sau asincron.

Avem nevoie de:

- telefon propriu-zis (TEL);

- numărător pentru apelurile sonore ale soneriei telefonului (NRT);

- casetofon pentru redarea mesajului de întâmpinare (PLAY);

- casetofon pentru înregistrarea mesajului apelantului (REC).

Variabilele folosite sunt:

Sonerie: fiecare apel al soneriei telefonului provoacă decrementarea numărătorului NRT până ce ajunge la 0. Nu este variabilă a automatului.

Start: variabilă de intrare asincronă, de la numărător, care determină începerea funcţionării automatului, dacă numărătorul a ajuns pe 0.

StartPlay (SP), StartRecord (SR): variabile de ieşire spre casetofon.

EndOfPlay (EP), EndOfRecord (ER): variabile de intrare asincrone, de la casetofon.

ApelantStop (AS): variabilă de intrare asincronă de la telefon (apelantul poate închide oricând telefonul).

DestinatarPick-Up (DPU): variabilă de intrare asincronă de la telefon; apare când destinatarul răspunde la telefon.

Init: variabilă de ieşire spre numărător; încarcă paralel numărătorul cu valoarea stabilită pentru numărul de apeluri ale soneriei telefonului până la intrarea în funcţiune a automatului.

Obs: variabilele de intrare AS şi DPU generează semnalul de Reset pentru bistabilii interni ai automatului şi opresc înregistrarea pe casetofon.

Schema bloc este:

                       CLK                     Sonerie

PL        NRT                                           TEL

                       Zero                                    AS  DPU

                              Start

                              Init   Automat     ER

                              SP

                                      EP  SR

                       PLAY                          REC

 

Organigrama automatului este:

                                                     000

                                                       A

 


                                                     Init

                                             1                    0

                                                     Start

                                      B     001

                                      SP

 


                              011 C

 


                              1             0

                                      EP

                       D     010

                       SR

               100 E

 


               1             0

                       ER

 


2. Codificarea stărilor

Pentru că variabilele de intrare sunt asincrone este nevoie de o codificare adiacentă a stărilor automatului (A,B), (C,D), (E,A) . Pentru 5 stări sunt necesare 3 variabile de stare pentru codificare. Se alege codificarea: A = 000; B = 001; C = 011; D = 010; E = 100.

Se construieşte diagrama Karnaugh pentru stări, pe baza codificării făcute:

Q2  Q1Q0

00

01

11

10

0

A

B

C

D

1

E

 

 

 

 

        Trebuie obţinute diagramele pentru stările următoare. Le vom suprapune şi vom desena o singură diagramă, înglobând şi variabilele de intrare. Completarea se face urmărind tranziţiile din organigramă şi completând pentru fiecare stare codul stării următoare. Locaţiile necompletate vor fi indiferente deoarece conţinutul lor nu poate fi atins prin funcţionare.

 

Q2  Q1Q0

00

01

11

10

0

00Start

011

01EP

100

1

ER00

 

 

 

 

3. Reducerea numărului de stări nu mai este posibilă.

4. şi 5. Registrul de stări se implementează cu bistabile de tip D, iar generatorul noii stări  (funcţiile de excitaţie) şi ieşirile cu porţi logice.

        a. Pentru implementarea registrului de stări cu bistabile de tip D se ţine cont de ecuaţia stării următoare a acestui tip de bistabil: Di = Qit.

        Diagramele Karnaugh pentru intrările bistabilelor vor fi:

D2:

Q2  Q1Q0

00

01

11

10

0

0

0

0

1

1

ER

x

x

x

D2 = ER × Q2 + Q1 × Q0

D1:

Q2  Q1Q0

00

01

11

10

0

0

1

1

0

1

0

x

x

x

D1 = Q0

D0:

Q2  Q1Q0

00

01

11

10

0

Start

1

EP

0

1

0

x

x

x

D0 = Start × Q2 × Q1 + EP × Q0 + Q1 × Q0

        Diagramele ieşirilor se completează ţinând cont de organigramă şi de diagrama stărilor.

Init:

Q2  Q1Q0

00

01

11

10

0

1

 

 

 

1

 

x

x

x

Init = Q2 × Q1 × Q0

SP:

Q2  Q1Q0

00

01

11

10

0

 

1

 

 

1

 

x

x

x

SP = Q1 × Q0

 

SR:

Q2  Q1Q0

00

01

11

10

0

 

 

 

1

1

 

x

x

x

SR = Q1 × Q0

7. Desenarea schemei circuitului

Ieşirile se realizează cu porţi logice de tip SI:

Q2

Q1                         Init

Q0

Q2                         SP

Q1

Q0                         SR

 

Generarea semnalului de Reset se realizează cu o poartă logică SAU-NU:

        Reset = AS + DPU

        AS

                                      Reset

        DPU

 

Registrul de stări este cu bistabile de tip D:

        D2   Q2          D1   Q1          D0   Q0

        Clk                Clk                Clk

               Q2                  Q1                  Q0

             R                           R                           R

                                                                    Clk

Reset

 

Funcţiile de excitaţie se implementează cu porţi logice:

Q2                                 D0

Q1

Q0

Q2

Q1                                 D2

Q0                                 D1

Start

ER

EP

 

b. Implementarea generatorului noii stări cu multiplexoare se poate realiza numai cu multiplexoare dacă numărul intrărilor de selecţie a multiplexorului este egal cu numărul variabilelor de stare. Dacă numărul intrărilor de selecţie este mai mic decât cel al variabilelor de stare, la intrările selectate se vor conecta circuite realizate cu porţi logice.

        Se scriu termenii canonici care conţin 1 sau variabile înglobate in diagrama Karnaugh.

        D2 = Q2 × Q1 × Q0 + ER × Q2 × Q1 × Q0

        D1 = Q2 × Q1 × Q0 + Q2 × Q1 × Q0

        D0 = Start × Q2 × Q1 × Q0 + EP × Q2 × Q1 × Q0 + Q2 × Q1 × Q0

        Implementarea cu MUX 8:1 este:

          0

          0        MUX

          1           8:1

0                            D2

ER                         D2

0        74151

0

0        s2 s1 s0

 


                    Q2 Q1 Q0

 

          0

          1        MUX

          0           8:1

1                            D1

0                            D1

0        74151

0

0        s2 s1 s0

 


                    Q2 Q1 Q0

 

                Start

                    1        MUX

                    0           8:1

        EP                            D0

          0                            D0

          0        74151

          0

          0        s2 s1 s0

 


                              Q2 Q1 Q0

 

        Dacă implementarea s-ar realiza cu MUX 4:1 pe intrările multiplexorului am avea ieşiri din porţi logice de tip SI.

        c. Implementarea generatorului noii stări cu decodificatoare se face aplicând la intrarea decodificatorului variabilele de stare. La ieşirile decodificatorului se obţin stările interne individualizate.

        Putem scrie:

        D2 = D + ER × E

        D1 = B + C

        D0 = Start × A + B + EP × C

        Pentru obţinerea funcţiilor de excitaţie se vor utiliza porţi logice de tip SI, SAU şi NU.

        Decodificatorul va fi de tip zecimal:

                       DCD      0     A

        0                    1     B                           D1

        Q2                  2     D

        Q1                  3     C

        Q0                  4     E

 

 


                              9

 

d. Implementarea generatorului noii stări cu memorii şi multiplexoare permite simplificarea logicii generării noii stări.

               ROM            A0                          MUX     0        Start

               16 x 4            A1                          8:1  1     0

                              A2                                 2     0

        y3  y2   y1   y0 A3                          Y    3     EP

                                                                    4     ER                                                                     5     0

        D2  Q2    D1  Q1    D0  Q0                   6     0

          Clk                Clk                Clk                     s2 s1 s0        7     0

 

 


Q2Q1Q0 A3A2A1A0     y3y2y1y0 Q2Q1Q0 A3A2A1A0        y3y2y1y0

(s2s1s0)                                 (s2s1s0)

000         0000              0000              000         1000               0001

001         0001              0011              001         1001               0000

010         0010              0100              010         1010               0000

011         0011              0010              011         1011               0011

100         0100              0000              100         1100               0100

101         0101              0000              101         1101               0000

110         0110              0000              110         1110               0000

111         0111              0000              111         1111               0000

        e. Implementarea circuitelor secvenţiale sincrone se poate realiza cu numărătoare MSI. Numărătorul va fi utilizat pentru funcţia de memorare şi parţial pentru efectuarea tranziţiilor.

Vom utiliza pentru implementare un numărător sincron (de exemplu  numărătorul zecimal 74162). Bistabilii interni ai acestuia pot memora starea circuitului.

        Codificarea stărilor se face ţinând cont de ordinea de numărare a numărătorului: A = 000; B = 001; C = 010; D = 011; E = 100.

 

Q2  Q1Q0

00

01

11

10

0

A

B

D

C

1

E

 

 

 

 

        Vom determina funcţiile de numărare fN şi încărcare (ramificare) fR şi vom realiza implementarea lor cu multiplexoare 8:1 (de tipul 74151). Intrările de selecţie vor fi ieşirile numărătorului, Q2Q1Q0. Diagramele pentru cele 2 funcţii vor fi:

 

fN:

Q2  Q1Q0

00

01

11

10

0

Start

1

1

EP

1

 

 

 

 

fR:

Q2  Q1Q0

00

01

11

10

0

 

 

 

 

1

ER

 

 

 

 

Stările următoare ale numărătorului trebuie specificate pentru stările din care au loc ramificări (E). D2 = Q2; D1 = Q1; D0 = Q0. În acest caz se utilizează încărcarea paralelă a numărătorului cu valoarea prestabilită pe intrările paralele.

        Schema circuitului trebuie completată şi cu logica pentru determinarea ieşirilor. Ieşirile Init, SP şi SR corespund stărilor A, B, D. Funcţiile de ieşire sunt:

        Init = Q2 × Q1 × Q0

        SP = Q1 × Q0

        SR = Q1 × Q0

Implementarea funcţiilor de ieşire se poate realiza cu porţi logice de tip SI sau cu un decodificator zecimal.

 

 

 

        Circuitul secvenţial sincron va avea următoarea implementare:

 


        0     0   En                        Start  0  En

        0     1  MUX                1     1  MUX

        0     2  8:1                            EP  2  8:1

        0     3  fR                              1     3  fN

        ER  4     Y                    0     4     Y

        0     5     Y                    0     5     Y               0  Init

        0     6                            0     6                 DCD 1   SP

        0     7  4151                 0     7  4151             2

               s2 s1 s0                           s2 s1 s0    0  D3          3   SR

                                                                        D2          4

                                                                        D1          5

                                                                        D0          6

                                                                              7

                              Q3Q2Q1Q0                               7442 8

        Reset             MR   74162  Clk                           9

                       LD  D3D2D1D0       EN

                              0

 

 

 

 


Curs 11

 

          3.4. Sisteme secvenţiale sincrone

 

          Evoluţia circuitelor secvenţiale sincrone a fost determinată de metodele de sinteză adecvate. Pentru circuitele secvenţiale sincrone cu număr mic de variabile de intrare şi de stare se poate utiliza sinteza pornind de la grafuri sau diagrame de tranziţii (metoda studiată). Pentru circuitele cu număr mare de variabile de intrare şi de stare se face o organigramă funcţională care pune în evidenţă direct stările interne şi tranziţiile, în funcţie de modificarea unei singure variabile de intrare. Aceste circuite se numesc sisteme secvenţiale sincrone (SSS).

          Structura unui sistem secvenţial sincron:

                                        START

                                        Încărcare R                                          S1

                                        numărător C = 0    căutarea biţilor = 1

                                                                      într-un registru de 8 biţi

                              DA        Ri = 1       NU                                  S2

 

 

          Prelucrare în funcţie                   Deplasare stânga R S3

          de rangul bitului                                  C = C – 1

          (succesiune de operaţii)

 

                                                            NU                                  S4

                                                                      C = 8

 


                                                                                DA

 

                                                                      STOP

          Analiza figurii permite determinarea a 2 blocuri funcţionale:

1.    Unitatea de execuţie UE – realizată cu regiştri, numărătoare, bistabili, CLC.

2.    Generatorul de secvenţe sau unitatea de comandă UC – secvenţiator care operează asupra unităţii de execuţie. UC trebuie să asigure:

- trecerea din starea Si în starea Si+1;

- întreruperi de secvenţe prin salt;

- bucle de aşteptare.

          Schema sistemului secvenţial complex

                                        UC                                                       UE

                                        Calculul secvenţei                      Stări

                                        următoare

          Generator

de tact                                                                      Unitate de

          CLK                                                                         execuţie  UE

          Generator de

secvenţe

                    secvenţe

                                        Bloc de determinare    acţiune

                    CLK             a acţiunii asupra UE      UE

 

 

Unităţile de comandă UC pot fi: cablate sau microprogramate. Generatorul de secvenţe poate deci fi realizat cablat sau microprogramat.

1) UC cablate – există 2 posibilităţi de realizare:

          a. Generatorul de secvenţe este realizat cu un numărător programabil. Acesta numără, se opreşte sau se încarcă cu o nouă valoare. Ieşirile sale sunt decodificate de un decodificator de secvenţe. Se generează secvenţe care validează acţiunile asupra elementului funcţional (UE).

          Generator

          de tact CLK 

 

 


    Calcul      Calcul adresă         Calcul adresă         Calcul adresă

    adresă      de salt                    următoare              de oprire

(condiţii de            (condiţii                 (condiţii de

întrerupere)            următoare)             oprire)

 


          Adresă         Load            Numărare       Oprire

                              (Salt)                                                                    UE

                              Numărător de secvenţă

 


                    Decodificator                   Calcul

                    de secvenţe                      acţiuni UE

                                                                      CLK

 

          b. Generatorul de secvenţe este realizat cu un registru de deplasare (decalaj) în care va circula un bit de 1. Fiecărei stări îi corespunde un bit din registrul de deplasare. Poziţia bitului de 1 semnalizează o anumită secvenţă. Pentru a obţine starea următoare registrul va fi decalat cu o poziţie sau va fi decalat în cazul saltului. Avantajul acestei variante constă în eliminarea decodificatorului de secvenţe.

          În fiecare secvenţă se realizează o acţiune sau un grup de acţiuni. O acţiune poate să necesite mai multe etape. Dirijarea în cadrul secvenţei se realizează cu ajutorul generatorului de tact.

          Variantele a şi b de UC cablate au dezavantajul că o modificare a funcţionării presupune o modificare a secvenţei de lucru, deci o modificare a cablajului.

          2) UC microprogramate

          Generatorul de secvenţe trebuie să aibă exact aceleaşi funcţii ca şi în cazul UC cablate.

 

          Generator

          de tact CLK 

 

 


          Calcul adresă         Calcul adresă         Calcul adresă

                    de salt                    următoare              de oprire

(condiţii de            (condiţii                 (condiţii de

CLK   întrerupere)            următoare)             oprire)

 


          Adresă         Load (Salt)   Numărare       Oprire

                    Registru de microinstrucţiune                                        UE

                    Registru de adresă microprogram

 


                              Adresă                                       Calcul

                    Memorie microprogram                       acţiuni UE

                    Adresă nouă          Acţiuni                             CLK

 

 

 


          La acest mod de realizare a UC se câştigă în fiabilitate deoarece se execută o singură operaţie într-o secvenţă, dar se pierde în viteză. Tactul acţionează asupra registrului (numărătorului) de microprogram.

 

          3.4.1. Principii de comandă a sistemelor secvenţiale sincrone

        Sistemele secvenţiale sincrone îşi modifică ieşirea în funcţie de intrare doar în prezenţa unui semnal de tact.

        Funcţii logice de comandă. Tabele de excitaţie

        Generatorul de tact furnizează un semnal de tact de bază, care provine de la un oscilator şi este un semnal periodic de durată şi perioadă constantă. Cu ajutorul semnalului de tact se vor genera toate semnalele de comandă necesare unui sistem secvenţial sincron.

        În sistemele cablate, în cadrul unei secvenţe se pot efectua mai multe operaţii. Din acest motiv este necesară dirijarea perioadei tactului pentru a stabili o succesiune a diferitelor acţiuni. Pot să apară următoarele situaţii:

Tact suprapus

                       T

 

 


CLK1

 


CLK2

 


CLK3

 

Tact adiacent

 


CLK1

 

CLK2

 


CLK3

 


Tact neadiacent

 


CLK1

 


CLK2

 


CLK3

 

        Sistemele secvenţiale sincrone se comandă prin funcţii care conţin unul dintre semnalele de tact CLKi, o stare a circuitului şi un semnal extern. Toate funcţiile de comandă care acţionează asupra elementelor din unitatea de execuţie UE vor conţine obligatoriu unul dintre semnalele de tact în cadrul expresiei funcţiei (validează o acţiune).

        Funcţiile logice de comandă nu ţin cont de natura elementului fizic utilizat. După alegerea elementelor fizice se vor grupa funcţiile de comandă într-un tabel de excitaţie. Tabelul de excitaţie conţine:

- numele elementului circuitului;

- tipul elementului;

- intrările elementului;

- modul de comandă a intrărilor;

- funcţia logică corespunzătoare fiecărei intrări, scrisă sub formă simbolică.

        3.4.2. Hazardul în funcţionarea sistemelor secvenţiale sincrone

        Hazardul reprezintă apariţia unei modificări neprevăzute şi nedorite a unei stări a sistemului secvenţial sincron.

        Hazardul poate fi:

        - static – datorat propagărilor pe căi diferite a semnalelor; se manifestă prin comutări fără semnificaţie logică;

        - dinamic – datorat proceselor asincrone pe intrări; se manifestă prin comutări fără semnificaţie logică.

        Cauzele apariţiei pot fi:

        - semnale parazite la funcţiile de excitaţie;

        - nerespectarea parametrilor dinamici;

        - durata insuficientă a impulsului de comandă.

        Metodele de evitare a hazardului:

        1) Sincronizarea intrărilor asincrone

 

semnal

asincron

extern

        CLK

                              tsetup        thold

 

Exemplu. Se consideră un numărător N care face o incrementare +1 la tactul CLK şi un semnal extern E. Incrementarea se face la CLK × E.

E                      N

CLK                     +1

 

 


E

 


CLK

 

CLK × E

 

Se poate ca semnalul CLK × E să aibă o durată foarte scurtă care va provoca o funcţionare greşită a numărătorului N. Se va face o sincronizare a semnalului asincron E cu ajutorul unui bistabil.

        E                           Es                   +1

                       CBB              CLK2

        CLK1

 

Dacă există mai multe semnale asincrone, pentru realizarea sincronizării se utilizează registre.

        2) Automodificarea unui circuit secvenţial

        Poate să apară în situaţii ca şi următoarea:

        f = s × CLK1 × CLK2 × Q1 × Q2

în cazul în care bistabilul al doilea, Q2, va comuta în 0.

               D     Q2

CLK2                   

                                      s

 

 


CLK2

 


s × CLK1 × Q1 × Q2                             durată foarte scurtă, neutilizabilă

 


        Q2

        Se face sincronizarea pentru Q2.

 

        Q1                  D     Q2

        s             CLK2

 

 


        CLK2

 


        s × Q1 × Q2

        Q2

 


        3) Probleme datorate decalajului de tact (defazarea tactului)

Dacă la CLK2 × s × Q1 × Q2 avem    Q3 ® 1 şi la  CLK2 × s × Q1 avem Q2 ® 0

        Dacă CLK2 care se aplică bistabilului 2 este în avans faţă de CLK2 aplicat bistabilului 3, s × Q1 × Q2 ® 0 prea repede şi nu se respectă thold pentru bistabilul 3, deci Q3 nu va ® 1.

                       J2    Q2          J3    Q3

CLK2

Q1                  CLK                     CLK

        s             K2                  K3

 

 

 


CLK2 × Q1

 


Q2

 


s × CLK2 × Q1

                   tsetup    thold

 

Pentru rezolvarea problemei este necesară aplicarea unui alt tact CLK3.

        4) Probleme datorate frecvenţei maxime a tactului

        Circuitele MSI au specificată în catalog frecvenţa maximă de lucru, care este de obicei valoarea tipică sau medie. Datorită CLC care se interpun creşte timpul de propagare (se adaugă la timpul de propagare prin CLS, timpul de propagare prin CLC şi timpul de setup) şi astfel scade frecvenţa maximă a tactului. Proiectarea trebuie făcută încât să se introducă cel mult 2 nivele de CLC între CLS.

        5) Probleme legate de iniţializare şi blocare

        Orice sistem secvenţial care conţine elemente de memorie trebuie prevăzut cu o logică de iniţializare la punerea sub tensiune. Altfel elementele de memorie pot să se găsească în orice stare şi succesiunea de stări nu urmează cursul firesc proiectat.

        Deoarece nu toate stările sunt folosite trebuie să se introducă o logică de autoiniţializare, care are ca scop aducerea circuitului secvenţial în secvenţa normală de lucru.

        3.4.3. Perturbaţii datorate structurii electrice

        Perturbaţiile pot fi de natură electrică, magnetică sau electromagnetică.

a. Perturbaţiile mediului înconjurător se elimină prin ecranare (câmpuri electrice şi magnetice) şi prin filtre de reţea (câmpul electromagnetic).

b. Efectele perturbatoare introduse de sursa de alimentare (în condiţiile în care poarta logică se asimilează cu un generator de tensiune cu rezistenţă internă şi cu ieşirea având un salt de la 0 la 5V, care determină un curent pe linia de conexiune şi prin linia de masă) se datorează:

- zgomotelor de pe liniile de masă – în cazul în care punerea la masă este incorectă (nu este aproape de porţile de emisie şi de recepţie) se generează curenţi paraziţi care se propagă pe linie şi pot produce impulsuri de tensiune parazite, care la rândul lor pot provoca răspunsuri false la ieşirile circuitelor logice;

- variaţiilor de curent continuu care apar la trecerea dintr-o stare logică în alta.

        Pentru eliminarea acestor probleme se cuplează la masă firele de legătură şi cablurile coaxiale cât mai aproape de porţile de emisie şi recepţie ale liniei. Decuplarea tensiunii de alimentare a porţilor de emisie şi de recepţie ale liniilor se realizează cu condensatoare pentru înaltă frecvenţă şi pentru joasă frecvenţă, montate cât mai aproape de circuitul logic. Pentru o decuplare şi mai eficientă se folosesc şi inductanţe pentru eliminarea oscilaţiilor.

        c. Diafonia reprezintă toate fenomenele de cuplaj electromagnetic între semnalele de pe liniile de legătură, care dacă interacţionează produc semnale parazite.

        O bucată de conductor poate fi privită ca şi o antenă slabă, dacă nu are o lungime de cel puţin Ľ l. Din acest motiv firele de legătură pot fi privite ca antene de recepţie pentru zgomote. Diafonia poate fi privită ca şi transmisie radio în care un conductor emite şi celălalt recepţionează. Din acest motiv 2 fire de legătură paralele alăturate pot produce diafonie. Eliminare se realizează prin introducerea unui traseu de masă între liniile de legătură. Ideală ar fi utilizarea firelor încrucişate (fir de legătură cu fir de masă în jurul lui).

        d. Propagarea şi reflexiile pe liniile de transmisie. Liniile de transmisie sunt caracterizate de impedanţă. Aceasta reprezintă raportul dintre tensiunea şi curentul semnalelor de înaltă frecvenţă care parcurg linia. Dacă terminaţia liniei este o rezistenţă egală cu impedanţa lui nu apar probleme de propagare. Altfel pot apărea reflexii, datorită neechilibrării liniei de transmisie, care se suprapun peste semnalul iniţial.

Dacă liniile de transmisie sunt foarte lungi timpul de propagare poate ajunge egal sau mai mare decât fronturile şi atunci pot să apară reflexii.

Aceste probleme sunt deosebit de importante pentru semnalele de tact, de aceea se va urmări cu atenţie lungimea şi terminaţia firelor de pe aceste semnale (altfel circuitul poate într-un singur tact să parcurgă mai multe stări).

 

Curs 12

 

CAPITOLUL IV

PROIECTAREA SISTEMELOR NUMERICE CU DISPOZITIVE PROGRAMABILE

 

4.1. Metodologii generale de proiectare a sistemelor numerice

 

4.1.1. Proiectarea clasică

          Să recapitulăm etapele fluxului de proiectare în varianta clasică.

-        se începe cu o specificaţie;

-        se construieşte o diagramă bloc;

-        se separă secţiunile organigramei, după care se detaliază fiecare până când se atinge nivelul corect al designului logic;

-        se integrează piesele; în caz că există un produs software dezvoltat anume pentru gestionarea sistemului, acesta este momentul când se va utiliza;

-        se creează prototipul, care este depanat şi corectat cu ajutorul softului; adeseori, prototipul nu funcţionează la viteza proiectată şi trebuie reexaminat pentru diverse corecţii (de exemplu gâtuiri - bottlenecks);

-        se realizează fizic sistemul pe placă (PCB - Printed Circuit Board); şi aici apar de multe ori corecţii care trebuie efectuate, aspecte impuse de condiţiile fizice de realizare a PCB-ului.

          Deci revenirile multiple în procesul de proiectare clasică constituie regula, nu excepţia. Procesul de proiectare este astfel costisitor din punct de vedere al timpului (circa 6-12 luni pentru sisteme de 500-1000 de circuite integrate (capsule)).

 

4.1.2. Proiectarea cu dispozitive programabile

          Noul scenariu de proiectare, cu dispozitive programabile, este următorul:

-        se porneşte şi aici tot de la specificaţie;

-        sistemul este apoi partiţionat în blocuri mari (memorii, microprocesoare, dispozitive logice programabile, FPGA-uri sau CPLD-uri şi logică de interfaţare);

-        se formulează o descriere de nivel înalt a sistemului, folosindu-se un editor schematic sau un limbaj de descriere hardware abstract (de exemplu, VHDL sau ABEL);

-        întregul sistem este simulat - înlocuindu-se astfel vechea fază de prototip;

-        se creează lista de componente (netlist) a sistemului;

-        netlista este folosită la realizarea PCB-ului; în timpul realizării fizice a PCB-ului, simularea mai este rafinată.

În acest tip de proiectare cele mai multe modificări, dacă nu chiar toate, apar în software, în PLD-uri sau în FPGA, nu în interconexiuni sau în componente secundare.

          Dacă designul a fost bine conceput, el poate fi reproiectat cu matrici de porţi, pentru a maximiza profitul la producţia de serie mare.

          Folosirea intensivă a circuitelor FPGA este o modalitate foarte eficientă de proiectare a sistemelor numerice. FPGA-urile permit proceduri de realizare fizică foarte rapide şi modificări chiar mai rapide ale designului, cu condiţia să fie corect folosite. Cheia succesului lor este time-to-market-ul (timpul de la conceperea abstractă a unui proiect până la realizarea sa efectivă) foarte rapid.

 

4.2. Definiţia şi structura unui circuit FPGA

 

4.2.1. Completitudine funcţională

          Un concept de bază în înţelegerea FPGA-urilor este completitudinea funcţională. Se ştie că orice funcţie poate fi realizată pornind de la o sumă de produse. Dacă un singur tip de poartă logică este capabilă de a forma o sumă de produse, atunci spunem că are proprietatea de completitudine funcţională. Asta înseamnă că orice funcţie booleană poate fi realizată folosindu-se numai acel tip de poartă logică. În consecinţă este avantajos să avem multe porţi de tipul respectiv.

          Calităţile esenţiale pentru completitudinea funcţională sunt:

- cu ajutorul porţii respective să poată fi construită funcţia logică ŞI;

- cu ajutorul porţii respective să poată fi construită funcţia logică NU

sau:

- cu ajutorul porţii respective să poată fi construită funcţia logică SAU;

- cu ajutorul porţii respective să poată fi construită funcţia logică NU.

          Nu este nevoie să impunem realizarea simultană a funcţiilor ŞI şi SAU, deoarece, dacă se poate realiza funcţia NU, atunci, folosind teoremele lui De Morgan, se poate obţine şi funcţia care lipseşte.

 

4.2.2. Funcţii universale

          Funcţiile universale sau generatoarele de funcţii sunt blocuri logice care pot fi configurate astfel încât să realizeze orice funcţie logică de intrările blocului. Există mai multe tipuri de astfel de blocuri logice. Cele mai cunoscute sunt memoriile (ROM, RAM, PROM, EPROM şi EEPROM) şi multiplexoarele. Toate aceste blocuri pot realiza funcţii, formând tabelele lor de adevăr. FPGA-urile sunt adeseori construite pe baza unor blocuri constructive care sunt funcţii universale.

          Să luăm exemplul unui multiplexor 4:1. Ecuaţia ieşirii este următoarea:

S1

S0

DATAOUT

0

0

D0

0

1

D1

1

0

D2

1

1

D3

DATAOUT = S1×S0×D0 + S1×S0×D1 + S1×S0×D2 + S1×S0×D3

 

 

          Examinând fie tabelul de adevăr al multiplexorului, fie ecuaţia ieşirii, obţinem:

-        dacă D0 = D1 = D2 = 0 şi D3 = 1, atunci funcţia DATAOUT va fi S1 × S0, adică ŞI logic;

-        dacă D0 = 0 şi D1 = D2 = D3 = 1, obţinem DATAOUT = S1+S0, adică SAU logic;

-        dacă D0 = D2 = 1 şi D1 = D3 = 0, obţinem DATAOUT = S0, adică NU logic.

Aceste observaţii arată că multiplexorul este complet funcţional. El este şi universal pentru că poate forma orice funcţie de cele două variabile de intrare S0 şi S1 (selecţiile) prin setarea valorilor lui D din tabelul de adevăr la 0 sau la 1 logic.

          Analog, un multiplexor 8:1 poate realiza orice funcţie de 3 variabile de intrare, iar un multiplexor 16:1 poate realiza orice funcţie de 4 variabile etc.

          O celulă care are proprietatea de completitudine funcţională poate realiza orice funcţie logică combinaţională folosind una sau mai multe copii ale sale.

          O funcţie logică universală poate face acelaşi lucru, dar s-ar putea să necesite mai puţine celule. Aici presupunem că celula universală are suficiente intrări pentru a fi eficientă, ceea ce poate să nu fie întotdeauna adevărat. Unele FPGA-uri folosesc ca blocuri constructive celule universale, altele folosesc celule funcţional complete.

 

4.2.3. Definiţia circuitului FPGA

          Un FPGA este o colecţie de elemente logice cu completitudine funcţională sau universale plasate într-o reţea de interconectare.

          Unele FPGA-uri arată ca nişte matrici de celule bidimensionale, cu canale de interconectare orizontale şi verticale între celule. Altele arată ca nişte porţi logice împreună cu matrici programabile, cu reacţie inversă, similare PLD-urilor obişnuite. Pentru a face distincţia între ele, primele au fost numite FPGA-uri, iar celelalte - CPLD-uri (Complex Programmable Logic Device); sau arhitecturi cu canale de rutare şi respectiv arhitecturi foldback.

 

 

Arhitecturi FPGA şi CPLD (foldback)

 

          Să luăm un exemplu de arhitectură FPGA pe care să o construim pe bază de multiplexoare. Pornim de la un multiplexor de tip 8:1.

          Dacă FPGA-ul ar fi construit numai pe bază de multiplexoare 8:1, bistabilele ar fi greu de implementat şi preţul realizării lor ar fi mult prea mare. O practică uzuală constă în a face celula universală (sau funcţional completă) să aibă ieşirea legată direct la intrarea unui bistabil D, care basculează pe front, obţinându-se astfel o celulă hibridă, care conţine şi un bistabil. Aici apare în continuare o problemă: toate funcţiile combinaţionale sunt obligate să folosească şi bistabile D.

 

Multiplexor cu ieşire prin registru

 

          Soluţia cea mai folosită constă în a adăuga încă un multiplexor în celulă, permiţând multiplexorului să conducă direct intrarea D a bistabilului sau să-l ocolească pentru a "ieşi" în exterior. Acum, structura blocului constructiv este rezonabilă din multe puncte de vedere. El poate forma orice funcţie combinaţională de trei variabile şi poate, de asemenea, forma funcţii secvenţiale realizate cu bistabile D. În figură se prezintă celula finală, împreună cu simbolul ei. De notat că intrările de date nu sunt scoase în afara celulei. Numai ceasul şi 4 intrări de selecţie sunt intrări pentru formarea funcţiilor logice, ceea ce reduce considerabil numărul de conexiuni externe necesare implementării de funcţii logice.

 

Celula de bază a unui FPGA cu blocuri logice universale

 

          Să vedem acum cum pot fi interconectate aceste celule. Potrivit celor expuse anterior există două moduri fundamentale de a realiza interconectarea: prin canale de rutare sau prin matrice programabilă de tip foldback, cu reacţie inversă.


 

 

Arhitectură FPGA cu canale de rutare a semnalelor inter-celulare


          Semnalele intră în structura din figură prin buffere de intrare, ajungând la liniile verticale şi orizontale. În toate punctele de intersecţie a unei linii orizontale cu una verticală se poate realiza o conexiune. Valorile logice de pe liniile de intrare (de date) ale multiplexoarelor sunt setate prin intermediul unor circuite de programare a FPGA-ului. Funcţia fiecărei celule este deci programată intern, iar ieşirea este rutată înspre mai multe linii verticale şi orizontale. Semnalele de la ieşirea unei celule pot fi rutate la intrările altor celule sau la ieşirile circuitului FPGA, ieşiri care sunt realizate prin buffere de ieşire.

 

 

Arhitectură CPLD de tip foldback, cu reacţie inversă

 

          În cazul arhitecturii CPLD, ieşirile tuturor celulelor sunt rerutate în interiorul matricii (reacţie inversă) către intrările tuturor celorlalte celule. Şi aici se presupune că circuitele de programare (configurare) a celulelor nu apar în figură. Funcţiile simple sunt realizate în celule, iar pentru cele mai complexe se folosesc căile de reacţie inversă. În figură apar puţine celule în structura foldback-ului, dar în realitate, cu tehnologia de azi, numărul acestor celule poate atinge câteva sute.

          Arhitecturile prezentate sunt relativ simple şi totuşi există un anumit număr de probleme care apar:

-        Câţi pini de intrare, ieşire şi bidirecţionali sunt necesari?

-        Este oare bine să avem pini de clock (tact) dedicaţi?

-        Care este numărul corect de linii de interconectare verticale şi orizontale necesare pentru a evita congestia?

-        Este bine oare să se divizeze liniile de interconectare în mai multe sub-segmente, în vederea evitării blocării unei căi?

La toate aceste probleme trebuie să se răspundă în funcţie de arhitectura specifică folosită (firma producătoare, tehnologia de realizare a FPGA-ului, structura celulei etc.).

 

Curs 13

 

4.3. Instrumentele software de susţinere a proiectării cu FPGA-uri

 

4.3.1. Introducere

          Arhitecturile prezentate anterior erau alcătuite din celule logice identice plasate într-o reţea de conexiuni posibile. Folosirea acestor arhitecturi necesită translatarea funcţiei dorite de către proiectant în conexiunile intra şi intercelulare necesare obţinerii designului final.

          Există două funcţii principale pe care trebuie să le realizeze instrumentele software de susţinere a proiectării cu circuite FPGA:

          1) să convertească funcţiile designului în funcţiile realizabile de către FPGA. Această funcţie se numeşte translatare (alteori compilare sau fitting - potrivire).

          2) să verifice dacă designul translatat este corect. Această funcţie se numeşte verificare şi poate fi realizată cu softul de verificare a designului şi de simulare logică.

          Ambele funcţii operează cu o versiune a designului numită netlist (listă de conexiuni şi componente) asupra căreia se pot face investigaţii, deoarece este o reprezentare comună a circuitului.

 

4.3.2. Problema translatării

          Paşii care trebuie parcurşi în cursul procesului de translatare sunt în general următorii:

          - se verifică dacă numărul pinilor de intrare/ieşire ai FPGA-ului este mai mare decât numărul pinilor necesari în design;

          - se verifică dacă există suficiente celule în FPGA pentru a acoperi numărul de porţi logice din design;

          - se caută în design grupuri de componente al căror număr de intrări şi de ieşiri este egal cu cel al celulei de bază din FPGA;

          - se aleg prima dată grupurile cele mai mari care pot fi formate (de exemplu porţile cu mai mult de trei intrări au nevoie de două sau mai multe celule).

          Instrumentul software utilizează un set de reguli pentru substituţiile de funcţii. La nivelul cel mai simplu, el are nevoie de un set de substituţii pentru porţile din design care să fie mapate în celule din FPGA. În continuare, el are nevoie de o strategie pentru a utiliza optimal regulile de substituţie.

          Procesul de translatare este alcătuit din trei etape esenţiale:

          - maparea tehnologică (inclusiv optimizarea);

          - plasarea;

          - rutarea.

          O operaţiune importantă este eliminarea părţilor redundante din design - altfel cele mai multe designuri nu pot fi implementate în FPGA.

Exemplu: Dacă în design apare un numărător pe 4 biţi din care se folosesc efectiv numai cei 2 biţi mai puţin semnificativi, softul va "sparge" implementarea numărătorului pe 4 biţi şi va realiza doar implementarea unui numărător pe 2 biţi, restul logicii iniţiale fiind de prisos în acest caz.

 

4.3.3. Optimizarea netlist-ei

          Este o etapă esenţială a procesului de proiectare automată cu FPGA-uri. Se folosesc de obicei metodele clasice: diagrame Karnaugh, teoremele algebrei booleene etc.

          Această optimizare este de fapt minimizarea designului după translatarea sa într-o netlistă. Netlista este un fişier text care conţine pur şi simplu funcţiile logice din design şi conexiunile lor de intrare şi de ieşire. Acelaşi format poate fi folosit la orice nivel de reprezentare. Un exemplu de netlistă:

 

*

NETSTART

*

OUT3 DFF I(OUT3_D, CLOCK) O(OUT3, N_ OUT3)

OUT3_D AN2 I(A1, N2O_1) O(OUT3_D)

B2O_1 INV I(A2) O(N2O_1)

OUT2_D OR2 I(N21_2, N21_4) O(OUT2_D)

OUT2 DFF I(OUT2_D, CLOCK) O(OUT2, N_OUT2)

B21_4 AN2 I(N21_3, A4) O(N21_4)

B21_2 AN2 I(N21_1, A2) O(N21_2)

B21_1 INV I(A1) O(N21_1)

B21_3 INV I(A3) O(N21_3)

OUT1 DFF I(OUT1_D, CLOCK) O(OUT1, N_OUT1)

B22_1 AN2 I(A1, A2) O(N22_1)

B22_2 AN2 I(A3, A4) O(N22_2)

OUT1_D OR2 I(N22_1, N22_2) O(OUT1_D)

*

NETEND

*

NETIN A1, A2, A3, A4, CLOCK

NETOUT OUT1, OUT2, OUT3

*

Exemplu de netlistă

          În această netlistă, DFF înseamnă bistabil D (D flip-flop), AN înseamnă poartă ŞI, INV înseamnă poartă NU, iar OR înseamnă poartă SAU.

Acesta este nivelul la care se fac substituţiile; există sute de reguli. Exemplu: Se elimină porţile logice din design ale căror ieşiri nu sunt folosite. Astfel se pot combina porţile care realizează funcţii identice, se pot elimina bistabile etc. Procesul de "convertire" a componentelor logice din design în componente logice implementabile de către celulele de bază din FPGA se numeşte mapare tehnologică.

 

4.3.4. Plasarea

          Este procesul de amplasare fizică a componentelor logice în celulele din FPGA. În principiu se urmăreşte amplasarea funcţiilor logice adiacente în celule alăturate (dacă un modul logic are ca intrări ieşirile altui modul, cele două module vor fi adiacente). Criteriul critic de plasare este următorul: să se poată face legăturile cu celelalte celule.

 

4.3.5. Rutarea

          Presupunând că s-a reuşit efectuarea unei plasări adecvate a componentelor logice în celulele din FPGA, pasul următor este interconectarea acestora. La început, netlista este inspectată, urmărindu-se informaţiile de interconectare din ea. Apoi se inspectează plasarea existentă în acest moment. Se consideră că dacă o linie metalică de interconexiune are ataşat un semnal de ieşire şi celălalt capăt al său este conectat la intrarea unei alte celule, atunci linia este folosită (consumată). Pe măsură ce procesul de interconectare avansează, liniile devin ocupate şi poate să apară congestia. În această situaţie, softul va reface plasarea, proces numit re-rutare.

          Rezultatul plasării şi rutării este un fişier care descrie designul originar în termenii celulelor FPGA-ului. Acest fişier conţine descrierea asignării poziţiilor celulelor şi interconexiunilor dintre celule pentru reţeaua de tip FPGA sau CPLD (foldback). În final fişierul este translatat într-o hartă de biţi care poate fi transmisă unui programator de dispozitive care configurează FPGA-ul.

          Se vede deci că un instrument software de rutare a semnelor din FPGA este vital pentru exploatarea posibilităţilor oferite de aceste circuite.

 

4.3.6. Căi critice

          Problemele care apar în proiectarea cu FPGA-uri sunt în special probleme de temporizare. De exemplu: un semnal trebuie să intre în FPGA, să ia parte la implementarea unei funcţii logice şi apoi să iasă imediat pentru a participa la alte operaţii în afara FPGA-ului (aşa se întâmplă deseori la sistemele cu microprocesoare, la decodificatoare, la comparatoare rapide etc.). Alteori, toate bistabilele dintr-un registru de deplasare sau numărător trebuie să fie plasate în celule adiacente din FPGA, pentru a garanta sosirea aproape simultană a semnalului de tact la aceste celule.

          Căile critice complică plasarea şi rutarea pentru că sporesc numărul de constrângeri adiţionale. De obicei se plasează întâi celulele aflate pe căi critice, apoi restul celulelor din design. În continuare se rutează în mod similar: întâi celulele aflate pe căi critice, apoi restul celulelor din design. În acest fel rămân mai puţine posibilităţi pentru plasarea şi rutarea restului designului.

          Se recomandă să se păstreze la un nivel minim căile critice, pentru că altfel sesiunile de plasare şi rutare devin mult mai lungi.

 

4.3.7. Verificarea designului

Cele mai simple instrumente de verificare a designului sunt programe care examinează netlista transformată şi analizează proprietăţile ordinare ale designului final. Iată câteva exemple de verificări efectuate:

          - se izolează ieşirea unei celule şi se numără la intrarea câtor altor celule este transmis acel semnal. Fiecare celulă în care intră semnalul contribuie la o sarcină cumulativă a acestuia şi este posibil ca atunci programul să intervină, distribuind sarcina respectivă la mai multe celule de ieşire identice;

          - se caută intrări lăsate neconectate ale celulelor, care creează probleme de zgomote;

- se caută ieşiri care nu sunt three-state şi sunt totuşi legate împreună.

          Uneori verificarea se face în etapa de translatare, alteori în etapa de simulare.

 

4.3.8. Simularea logică

          Acesta este instrumentul de bază pentru verificarea funcţionalităţii şi performanţelor temporale ale unui design cu FPGA. În orice tip de simulare, se creează un model al reţelei logice căruia i se aplică un model al intrărilor (numite stimuli) în vederea obţinerii unui model al ieşirilor (numite răspunsuri). O proprietate fundamentală a simulării este următoarea: ea permite observarea răspunsurilor logice interne, când aceste răspunsuri s-ar putea să nu fie observabile pe pinii de ieşire.

Există mai multe tipuri diferite de simulare:

4.3.8.1. Simularea funcţională

          În acest tip de simulare se modelează celulele logice, care sunt combinate cu un model al intrărilor binare (tensiuni), generându-se un model relativ de răspunsuri (tot tensiuni).

 

          Avantaje:

          - generează rapid rezultatele;

          - modelul este simplu.

          Dezavantajul principal:

          - nu oferă informaţii despre temporizare, ci numai relaţii relative între semnale.

4.3.8.2. Simularea temporală digitală

          În acest tip de simulare se creează un model al întregului design, interconectându-se modelele celulelor, asociindu-se în plus un element adiţional la ieşirea modelului fiecărei celule: un bloc de întârziere.

          Blocul de întârziere al unei celule este compus din trei factori:

          1) întârzierea introdusă de celulă în sine, în absenţa oricărei conexiuni externe. Şi această întârziere este de fapt alcătuită din două întârzieri:

          - întârzierea pentru tranziţia din "1" logic în "0" logic;

          - întârzierea pentru tranziţia din "0" logic în "1" logic.

          Specificarea acestor două valori în data sheet-ul circuitului integrat FPGA este opţională.

          2) întârzierea asociată capacităţii de rutare a firului de metal care uneşte două celule;

3) întârzierea dată de suma impedanţelor de intrare ale celulelor comandate.

          Uneori, întârzierile de la punctele 2) şi 3) sunt luate împreună. Această simulare este mult mai complexă. Nu vom intra în detaliile realizării efective a acestui tip de simulare (modul de realizare a modelelor, planificatorul de evenimente etc.)

4.3.8.3. Simularea defectelor

          În acest tip de simulare se folosesc tehnici speciale pentru a se obţine un "scor" (numit grad de defecte) pentru design şi stimulii aplicaţi. Se testează fiecare aspect al designului conform standardelor industriale.

          Ideea este de a crea probleme artificiale ("defecte") şi de a urmări dacă răspunsurile diferă de cele obţinute în cazul normal, corect. Simularea fundamentală constă în menţinerea ieşirilor unor celule la 0 sau la 1 logic, în timp ce se aplică stimulii. Acest proces nu este efectuat pentru toate nodurile deodată, dar poate fi realizat pentru mai multe noduri simultan, dacă acestea sunt suficient de independente unul faţă de celălalt.

Această simulare necesită multiple rulări pentru a calcula un grad de defecte şi de aceea este o mare consumatoare de timp.

          În general, pentru FPGA-uri se foloseşte mai ales simularea temporală, pentru PLD-uri - simularea funcţională, iar pentru ASIC-uri mari - simularea de defecte.

 

4.3.9. Evaluarea

          Simulatorul are o bibliotecă de funcţii în care fiecare intrare are ataşată o rutină care evaluează un tabel de adevăr. Spre deosebire de un tabel de adevăr normal, intrările într-un tabel de adevăr de simulator reflectă mai realist condiţiile electrice (de exemplu: ieşiri three-state, stări necunoscute etc. - vezi figura 9).

Ć = ZERO

1 = HIGH

* = NECUNOSCUT

3 = TRI-STATE

# = NEDETERMINAT

 

ŞI-NU

Ć

1

*

3

#

Ć

1

1

1

1

1

1

1

Ć

*

#

#

*

1

*

*

#

#

3

1

#

#

#

#

#

1

#

#

#

#

A) Modelul logic

B) Modelul cu o întârziere adăugată

Modelul de simulare al unei porţi ŞI-NU

 

          O poartă ŞI-NU normală are doar patru intrări în tabelul de adevăr. Acest tabel de adevăr are 25 de intrări deoarece intrările porţii pot avea 5 valori posibile per intrare. În figura 9, intrările pot fi valorile logice 0 şi 1, dar şi necunoscute, three-state sau nedeterminate. Condiţia necunoscută poate să apară într-o situaţie reală dacă intrarea porţii provine de la  un bistabil a cărui ieşire Q este necunoscută (de exemplu la punerea sub tensiune, start-up). Intrarea three-state poate să apară la o intrare dacă aceasta provine de la ieşirea unei porţi three-state de pe un nivel logic anterior. Condiţia nedeterminată a intrării poate să apară dacă două buffere three-state comandă acelaşi nod cu un nod care realizează un ŞI cablat atunci când un buffer eliberează comanda sa în timp ce celălalt buffer asertează.

          Cu cât număul de stări creşte, cu atât creşte şi acurateţea simulării, dar cu preţul unui consum sporit de timp de rulare.

 

4.3.10. Modelarea

          Simularea performantă include folosirea unor limbaje de modelare speciale, foarte eficiente, numite BLM (Behavioral Language Models). Acestea sunt modele de evaluare care generează răspunsuri de ieşire corecte la stimuli de intrare daţi. Un BLM este alcătuit de fapt din proceduri scrise pentru a reacţiona corect la un stimul, dar nu conţine vreun model de poartă anume. Cel mai simplu BLM este cel al unui bistabil D. Codul este scris în VHDL, care a fost optimizat pentru portabilitate pe multe sisteme de proiectare asistată de calculator.

EDGE_TRIGGERED_D: block (CLK = ‘1’ and not CLK ‘STABLE or CLR = ‘1’)

 

begin

 Q <= guarded ‘0’ when CLR = 1; else

 D when CLK = ‘1’ and not CLK ‘STABLE else

 Q;

end block EDGE_TRIGGERED_D;

Modelul unui bistabil în VHDL

 

          Abordarea BLM permite verificări interne pentru violări de timpi de setup şi de hold în interiorul rutinei care evaluează operaţia logică respectivă.

          Acelaşi bistabil D poate fi modelat şi în versiunea cu porţi (deci bistabilul e văzut ca un circuit de şase porţi ŞI-NU, cu reacţie). Această versiune necesită ca modelului să-i fie ataşată o funcţie externă, pentru a răspunde necesităţilor de verificare a timpilor de setup şi de hold ai modelului.

          BLM evaluează rapid, dar nu arată operaţiile interne - rămâne ca o cutie neagră.

          Versiunea cu porţi face o disecţie completă a operaţiilor modelului, necesitând un timp de simulare mai mare. În plus, ea permite o evaluare completă a gradului de defecte.

          De regulă, funcţiile mari sunt modelate şi simulate cu BLM, iar cele mai mici - cu ajutorul modelelor cu porţi.

 

4.3.11. Biblioteci

          Simulatoarele sunt livrate cu biblioteci de modele de simulare, cu blocurile constructive necesare gestionării celei mai mari părţi a designurilor. Aceste biblioteci includ porţi elementare, bistabile, intrări, ieşiri şi mai multe funcţii adiţionale.

          Aici se pot modifica întârzierile nodurilor interne, se pot rula subrutine ale stimulilor etc.

 

4.3.12. Back Annotation

          Procesul de alterare a întârzierilor nodurilor interne se numeşte back annotation, noţiune esenţială în proiectarea cu FPGA. Modelul de simulare iniţial era pur şi simplu netlista designului. Înainte de plasarea şi rutarea designului, întârzierile sunt necunoscute (între oricare două puncte din interiorul FPGA-ului). După plasarea şi rutarea designului, întârzierile devin precizate. Produsul software calculează întârzierile interne folosind legile circuitului electric, lungimea firelor metalice, constantele dielectrice şi alţi parametri.

          Folosind aceste întârzieri, softul alcătuieşte o netlistă cu întârzieri notate nod cu nod, modificând netlista originară. Acesta este procesul de back annotation. Simularea pe baza acestei noi netliste este mult mai precisă, detectând puncte critice care nu au cum să fie observate din lumea externă.

 

4.3.13. Procesul de proiectare cu FPGA

          În concluzie, putem sintetiza paşii procesului de proiectare cu FPGA:

 

 

Diagrama procesului de proiectare cu FPGA

 

          Recapitulând, putem distinge următorii paşi ai acestui proces:

1.    Se introduce designul folosind un editor schematic (schematic capture sau ecuaţii);

2.    Rezultă o netlistă care descrie designul;

3.    Netlista este transmisă simulatorului pentru verificare funcţională (pentru a vedea dacă au fost capturate funcţiile corecte);

4.    Urmează procesul de compilare: plasare şi rutare;

5.    După compilare, softul de analiză extrage întârzierile date de interconectarea celulelor şi realizează procesul de back annotation al netlistei;

6.    Dacă simularea noii netliste satisface condiţiile, atunci totul este în regulă şi se face inscripţionarea fizică a circuitului FPGA (programarea). În caz contrar, se reface simularea până la obţinerea versiunii definitive corecte.