Sunteți pe pagina 1din 16

2014/10/19 13:33

1/16

Laboratorul 0 - Recapitulare

Laboratorul 0 - Recapitulare
Circuite combinaionale
Circuitele logice combinaionale aplic funcii logice pe intrri pentru a obine ieirile. Valorile de
ieire depind astfel doar de valorile de intrare, iar cnd starea unei intrri se schimb, se reflect
imediat pe ieiri.

Fig. 1: Diagrama bloc pentru un circuit combinaional cu n intrri i m ieiri


Logica combinaional poate fi reprezentat prin:

diagrame structurale la nivel de pori logice


tabele de adevr
expresii boolene (funcii logice)

Circuitele combinaionale sunt folosite n procesoare n cadrul componentelor de calcul, iar cele mai
des ntlnite sunt:

multiplexoarele i demultiplexoarele
codificatoarele i decodificatoarele
sumatoarele
comparatoarele
memoriile ROM (read-only, nu pstreaz stare)

Un exemplu de folosire a sumatoarelor este n cadrul Unitilor Aritmetice-Logice (UAL) din interiorul
procesoarelor.

Pori logice
Porile logice reprezint componentele de baz disponibile n realizarea circuitelor combinaionale. Ele
oglindesc operaiile din algebra boolean, algebr care st la baza teoriei circuitelor combinaionale.
n Tab. 1 sunt prezentate cele mai ntlnite pori logice mpreun cu operaia boolean pe care o
implementeaz.
Denumire

Simbol

AC Wiki - http://elf.cs.pub.ro/ac/wiki/

Operator Tabel de adevr

Last update: 2014/10/08 09:22

Inversor (NOT)

lab:lab00

http://elf.cs.pub.ro/ac/wiki/lab/lab00

f = !a

Poarta SAU
(OR)

f = a || b

Poarta I
(AND)

f = a && b

Poarta
SAU-NU
(NOR)

f = !(a || b)

Poarta
I-NU
(NAND)

f = !(a && b)

Poarta
SAU EXCLUSIV
(XOR)

f=a^b

Poarta
SAU EXCLUSIV NU
(XNOR)

f = !(a ^ b)

a
0
0
1
1
a
0
0
1
1
a
0
0
1
1
a
0
0
1
1
a
0
0
1
1
a
0
0
1
1

0
b
0
1
0
1
b
0
1
0
1
b
0
1
0
1
b
0
1
0
1
b
0
1
0
1
b
0
1
0
1

f
0
1
1
1
f
0
0
0
1
f
1
0
0
0
f
1
1
1
0
f
0
1
1
0
f
1
0
0
1

Tab. 1: Porile logice de baz

Sumatorul elementar
Sumatoarele (adders), folosite cel mai mult n unitile aritmetice logice ale procesoarelor, realizeaz
adunri pe un numr dat de bii, furniznd la ieirea circuitului suma i transportul (carry) rezultat n
urma operaiei.
Exist mai multe tipuri de sumatoare pentru adunarea numerelor pe n bii, iar acestea se bazeaz pe
sumatoare simple de 1 bit, care pot fi de dou tipuri:

sumatorul elementar parial (Half adder) - nsumeaz doi operanzi pe 1 bit i ofer la ieire suma
acestora i transportul.

http://elf.cs.pub.ro/ac/wiki/

Printed on 2014/10/19 13:33

2014/10/19 13:33

3/16

Laboratorul 0 - Recapitulare

sumatorul elementar complet (Full adder) - nsumeaz doi operanzi pe 1 bit i un transport i ofer
la ieire suma acestora i transportul.

Fig. 2: Diagrama bloc pentru half adder

Fig. 3: Diagrama bloc pentru full


adder

Sumatorul elementar parial


Acest sumator este n continuare descris prin expresiile boolene, tabelul de adevr i schema logic.
Inputs Outputs
a b sum c_out
0 0
0
0
0 1
1
0
1 0
1
0
1 1
0
1
Tab. 2: Tabelul de adevr pentru half adder
Din tabelul de adevr se pot deduce urmtoarele formule:
sum
= a ^ b
c_out = a && b
Conform acestor formule putem exprima circuitul prin pori logice, ca n Fig. 4:

Fig. 4: Schema logic pentru half adder


Despre tabele de adevr i deducerea expresiilor boolene (click aici)

AC Wiki - http://elf.cs.pub.ro/ac/wiki/

Last update: 2014/10/08 09:22

lab:lab00

http://elf.cs.pub.ro/ac/wiki/lab/lab00

Dintr-un tabel de adevr, pentru fiecare output se va deduce o funcie/expresie aplicnd urmtoarele
reguli:
1.
2.
3.
4.
5.

se ia fiecare rnd pentru care funcia are valoarea 1, care va forma un termen
termenii sunt formai din parametrii funciei legai prin I
dac parametrul are valoarea 1 se consider n form direct
dac parametrul are valoarea 0 se consider n form negat
se aplic SAU ntre toi termenii dedui

Pentru sumatorului elementar parial avem:

n multe cazuri aceste formule sunt prea complexe, coninnd multe operaii i necesitnd multe
pori logice pentru a fi implementate. Pentru a reduce complexitatea formulelor rezultate se poate
aplica un procedeu de minimizare. Minimizarea se poate realiza folosind teoremele algebrei boolene,
prin reducerea dimensiunii termenilor sau chiar eliminarea lor, sau grafic, prin diagrame Karnaugh.

Sumatorul elementar complet


Inputs Outputs
a b c_in sum c_out
00 0
0
0
01 0
1
0
10 0
1
0
11 0
0
1
00 1
1
0
01 1
0
1
10 1
0
1
11 1
1
1
Tab. 3: Tabelul de adevr pentru full adder
Din tabelul de adevr se pot deduce urmtoarele formule:
sum
=
a ^ b ^ c_in
c_out = ((a ^ b) && c_in) || (a && b)
Conform acestor formule putem exprima circuitul prin pori logice sau putem folosi sumatoare
elementare pariale, ca n Fig. 5:

http://elf.cs.pub.ro/ac/wiki/

Printed on 2014/10/19 13:33

2014/10/19 13:33

5/16

Laboratorul 0 - Recapitulare

Fig. 5: Schema logic pentru full adder


Codul C pentru full adder
void full_adder(int a, int b, int c_in, // inputs
int *sum, int *c_out)
// outputs
{
*sum
=
a ^ b ^ c_in;
*c_out = ((a ^ b) && c_in) || (a && b);
}

Multiplexorul 4:1
Un multiplexor digital este un circuit combinaional care implementeaz o funcie de selecie a uneia
dintre intrrile sale.

intrri
intrri de selecie
o ieire

Fig. 6: Diagrama bloc a multiplexorului 4:1

AC Wiki - http://elf.cs.pub.ro/ac/wiki/

Last update: 2014/10/08 09:22

lab:lab00

http://elf.cs.pub.ro/ac/wiki/lab/lab00

Fig. 7: Schema logic a


multiplexorului 4:1
Alegerea semnalului de ieire se face pe baza intrrilor de selecie, care reprezint n baza 2 numrul
intrrii ce trebuie selectate. n exemplul din Fig. 6 avem schema bloc a unui multiplexor cu 4 intrri,
iar acesta are nevoie de dou intrri de selecie. Circuitului din imagine i se mai pot aduga o intrare
de activare (EN - enable) i o ieire inversat.
Funcia invers a multiplexorului este realizat de ctre circuitele de demultiplexare, care preiau un
semnal de intrare i folosesc intrrile de selecie pentru a-l transmite pe una din ieirile posibile.
S2 S1 out
0 0 I1
0 1 I2
1 0 I3
1 1 I4
Tab. 4: Selecia intrrilor
Deoarece multiplexorul 4:1 are 6 intrri, tabelul de adevr devine destul de mare i nu mai este
indicat de pornit de la acesta pentru obinerea funciei logice. Din descrierea funcionrii circuitului (
Tab. 4) i proprietile porii AND, putem deduce termenii formulei:

Conform formulei se poate realiza circuitul cu pori logice din Fig. 7.


Codul C pentru un multiplexor 4:1
Multiplexor 4:1
void mux41(int s1, int s2,
int i1, int i2, int i3, int i4,
int *out)
http://elf.cs.pub.ro/ac/wiki/

// selection inputs
// inputs
// output
Printed on 2014/10/19 13:33

2014/10/19 13:33

7/16

Laboratorul 0 - Recapitulare

{
switch((s2 << 1) | s1)
{
case 0:
*out = i1;
break;
case 1:
*out = i2;
break;
case 2:
*out = i3;
break;
case 3:
*out = i4;
break;
}
}

Sumatorul cu transport succesiv


Cel mai intuitiv mod de a forma un sumator este de a lega n cascad mai multe sumatoare
elementare complete pe 1 bit. n acest fel se formeaz un sumator cu transport succesiv (eng.
ripple-carry adder), cum este cel pe 4 bii din Fig. 8, care primete la intrare a[3:0], b[3:0], c_in
i are ca ieiri suma s[3:0] i transportul c_out. n cazul sumatoarelor pe mai muli bii nu mai este
indicat de pornit ntai de la o tabel de adevr deoarece aceasta ajunge la dimensiuni prea mari.

Fig. 8: Schema sumatorului cu transport succesiv, pe 4 bii


Un alt avantaj al acestui design simplu, este c se pot forma sumatoare pe mai muli bii din
nlnuirea orictor sumatoare. De exemplu, pentru a nsuma numere pe 16 bii se poate crea un
sumator ripple-carry din legarea n cascad a 4 sumatoare pe 4 bii, ca n Fig. 9.

AC Wiki - http://elf.cs.pub.ro/ac/wiki/

Last update: 2014/10/08 09:22

lab:lab00

http://elf.cs.pub.ro/ac/wiki/lab/lab00

Fig. 9: Schema sumatorului cu transport succesiv, pe 16 bii


Dei are un design simplu, dezavantajul acestui sumator este c este lent, fiecare sumator elementar
ateptnd transportul de la sumatorul precedent. Exist alte sumatoare, cum ar fi cel cu transport
anticipat (eng. carry-lookahead adder), care ofer o funcionare mai rapid, eliminnd ateptarea
propagrii transportului.

Circuite secveniale
Spre deosebire de circuitele logice combinaionale, cele secveniale (eng: sequential logic) nu mai
depind exclusiv de valoarea curent a intrrilor, ci i de strile anterioare ale circuitului.
Logica secvenial poate fi de dou tipuri: sincron i asincron. n primul caz, cel cu care vom lucra
i la laborator, este folosit un semnal de ceas care comand elementul/elementele de memorare,
acestea schimbndu-i starea doar la impulsurile de ceas. n al doilea caz, ieirile se modific atunci
cnd se modific i intrrile, neexistnd un semnal de ceas pentru elementele de memorare.
Circuitele secveniale asincrone sunt mai greu de proiectat, pot aprea probleme de sincronizare i
sunt folosite mai rar.
n continuare ne vom referi doar la circuitele secveniale sincrone.

Fig. 10: Schema bloc a unui circuit secvenial sincron

http://elf.cs.pub.ro/ac/wiki/

Printed on 2014/10/19 13:33

2014/10/19 13:33

9/16

Laboratorul 0 - Recapitulare

Bistabilul D
Elementele de memorare din circuitele secveniale pot fi implementate prin bistabile (eng. flip-flops).
Acestea stocheaz valori n funcie de valoarea de la intrare i de semnalul de ceas. Valoarea stocat
poate fi schimbat doar atunci cnd ceasul realizeaz o tranziie activ (un semnal de ceas poate fi
activ pe front cresctor (eng. rising edge) sau pe front descresctor (eng. falling edge)).
Exist 4 tipuri principale de bistabile: D, T, SR i JK, iar n acest laborator ne vom axa pe bistabilul D.
Acesta are un design simplu i este folosit n general pentru implementarea registrelor din procesoare
(cea mai mic i mai rapid unitate de stocare din ierarhia de memorie).

Fig. 11: Diagrama bloc pentru bistabilul D


Intrrile i ieirile circuitului sunt:

D - valoarea (data) de stocat


clk - semnalul de ceas, considerat activ pe front cresctor n descrierile urmtoare
Q - starea curent
!Q - starea curent negat

Ca mod de funcionare, ecuaia caracteristic a sa este Qnext = D, adic starea urmtoare (Qnext)
a bistabilului depinde doar de intrarea D, fiind independent de starea curent (Q), dup cum se
observ i din Tab. 5.
D Q Qnext
0 0
0
0 1
0
1 0
1
1 1
1
Tab. 5: Tabelul de tranziii pentru bistabilul D
Pentru a nelege mai uor comportamentul bistabilelor, pe lang tabelele de tranziii mai sunt utile i
diagramele de semnale (eng. timing diagrams), cum este cea din Fig. 12, unde se poate observa cum
ieirea Q se schimb doar pe frontul cresctor de ceas i devine egal cu intrarea D n momentul
tranziiei ceasului.

AC Wiki - http://elf.cs.pub.ro/ac/wiki/

Last update: 2014/10/08 09:22

lab:lab00

http://elf.cs.pub.ro/ac/wiki/lab/lab00

Fig. 12: Diagrama de semnale pentru bistabilul D

Automate finite
Prin automate finite (eng. Finite-state machine - FSM) nelegem de fapt un circuit secvenial sincron
aa cum a fost el descris anterior. De obicei, proiectarea unui automat finit pornete de la o descriere
informal a modului n care automatul trebuie s funcioneze. Primul pas n realizarea automatului
este descrierea formal a funcionrii acestuia. Dou dintre metodele prin care un automat finit poate
fi descris sistematic sunt:

Diagrama de stri (Fig. 13) prezint ntr-un mod grafic funcionarea unui automat finit. Strile
automatului sunt reprezentate prin noduri, iar tranziiile sunt reprezentate prin arce ntre starea
surs i starea destinaie. Fiecare arc este marcat cu condiia necesar pentru a fi efectuat o
tranziie. De asemenea, eventualele semnale de ieire ale automatului sunt marcate n dreptul
strilor care genereaz acele ieiri.

Fig. 13: Exemplu de diagram de stri


Starea curent x y Starea urmtoare
S0
10
S1
S1
01
S0
Tab. 6: Exemplu de tabel de tranziii

Tabelul de tranziii (Tab. 6) prezint funcionarea unui automat finit sub form de tabel. Fiecare
rnd al tabelului reprezint o tranziie a automatului i conine starea curent, starea urmtoare i
intrrile necesare pentru a activa tranziia.

n continuare vom proiecta dou automate finite simple:

Recunoaterea secvenei "ba"


Se dorete proiectarea unui automat finit capabil s recunoasc secvena ba. Automatul primete la
intrare n mod continuu caractere codificate printr-un semnal de un bit (caracterele posibile sunt a
i b). Ieirea automatului va consta dintr-un semnal care va fi activat (valoarea 1) atunci cnd la
intrare am avut prezent irul ba.
Click pentru rezolvare
Vom ncepe proiectarea automatului prin identificarea intrrilor i ieirilor. Din descriere observm c
intrarea este format dintr-un singur semnal de 1 bit (automatul va avea i o intrare de ceas, ns
aceasta nu este considerat intrare propriu zis de date). Deoarece codificarea caracterelor nu este
specificat vom presupune c valoarea 0 indic un caracter a, iar valoarea 1 indic un caracter b.
Ieirea este format deasemenea dintr-un semnal de 1 bit cu valoarea 1 atunci cnd secvena
http://elf.cs.pub.ro/ac/wiki/

Printed on 2014/10/19 13:33

2014/10/19 13:33

11/16

Laboratorul 0 - Recapitulare

cutat a fost gsit i 0 n rest.


Vom realiza n continuare diagrama de stri a automatului. La pornire, vom initializa automatul ntr-o
stare pe care o vom numi S0. Dac la prima tranziie de ceas intrarea are valoarea:

0 (caracterul a) - vom avansa ntr-o stare pe care o vom numi Sa care ne spune c intrarea
precedent a fost a
1 (caracterul b) - vom avansa ntr-o stare pe care o vom numi Sb care ne spune c intrarea
precedent a fost b

n continuare vom analiza ce se ntmpl atunci cnd automatul este n starea Sa. Dac la intrare
avem valoarea:

0 (caracterul a) - automatul va rmne n acest stare, care ne spune c intrarea precedent a


fost a
1 (caracterul b) - automatul va trece n Sb, care ne spune c intrarea precedent a fost b

Dac ne aflm n starea Sb i automatul primete la intrare valoarea:

0 (caracterul a) - automatul a ntlnit secvena dorit ba (fiind n starea Sb intrarea precedent


a fost b, iar intrarea curent este a); vom avansa ntr-o stare pe care o vom numi SA n care
vom activa ieirea automatului; de asemenea, aceast stare ne spune i c intrarea precedent a
fost a, lucru folosit pentru a putea recunoate i urmtoarele secvene ba care vor mai fi
ntlnite la intrare
1 (caracterul b) - automatul va rmne n aceast stare, care ne spune c intrarea precedent a
fost b

Dac ne aflm n starea SA i automatul primete la intrare valoarea:

0 (caracterul a) - automatul va trece n starea Sa care ne spune c intrarea precedent a fost a,


ns nu vom activa ieirea automatului deoarece automatul nu a vzut i caracterul b
1 (caracterul b) - automatul va trece n starea Sb care ne spune cp intrarea precedent a fost b

n momentul de fa comportamentul automatului a fost descris complet, toate cele 4 stri


identificate avnd definite tranziiile pentru toate combinaiile semnalelor de intrare. Fig. 14 prezint
diagrama de stri a automatului.

AC Wiki - http://elf.cs.pub.ro/ac/wiki/

Last update: 2014/10/08 09:22

lab:lab00

http://elf.cs.pub.ro/ac/wiki/lab/lab00

Fig. 14: Automatul de recunoatere a secvenei "ba"


O dat determinat diagrama de stri a automatului, putem trece la implementarea acestuia ntr-un
limbaj cunoscut (C/C++/C#/Java):
Automatul de recunoatere a secvenei "ba"
void FSM_ba(int in,
int out) {

// FSM input: 0 - a, 1 - b
// FSM output: 0 - not found, 1 - found

int state = 0;

// FSM state: 0 - S0, 1 - Sa, 2 - Sb, 3 - SA

while(1) {
switch(state) {
case 0:
out = 0;
break;
case 1:
out = 0;
break;
case 2:
out = 0;
break;
case 3:
out = 1;
break:
}
read_inputs();
switch(state) {
http://elf.cs.pub.ro/ac/wiki/

Printed on 2014/10/19 13:33

2014/10/19 13:33

13/16

Laboratorul 0 - Recapitulare

case 0:
if(in == 0)
state = 1;
else
state = 2;
break;
case 1:
if(in == 0)
state = 1;
else
state = 2;
break;
case 2:
if(in == 0)
state = 3;
else
state = 2;
break;
case 3:
if(in = 0)
state = 1;
else
state = 2:
break:
}
}

Trecere de pietoni semaforizat


Se dorete realizarea unei treceri de pietoni semaforizate. Duratele de timp pentru cele 2 culori vor fi:
rou - 60 sec, verde - 30 sec.
Click pentru rezolvare
Vom ncepe proiectarea automatului prin identificarea intrrilor i ieirilor. Deoarece descrierea
informal nu conine informaii despre intrrile i ieirile necesare vom folosi oricte intrri i ieiri
avem nevoie pentru implementarea comportamentului. Un minim de ieiri pentru automat reprezint
semnalele de comand pentru culorile semaforului pentru pietoni i pentru maini. Cele 5 semnale
vor fi:

p_rosu - aprindere culoare roie pentru pietoni


p_verde - aprindere culoare verde pentru pietoni
m_rosu - aprindere culoare roie pentru maini
m_galben - aprindere culoare galben pentru maini

AC Wiki - http://elf.cs.pub.ro/ac/wiki/

Last update: 2014/10/08 09:22

lab:lab00

http://elf.cs.pub.ro/ac/wiki/lab/lab00

m_verde - aprindere culoare verde pentru maini

Pentru a msura duratele de timp am putea folosi semnalul de ceas al automatului, introducnd
multiple stri cu tranziii necondiionate, n care o culoare a semaforului este inut aprins. Avnd n
vedere ns c semnalul de ceas pentru un automat are o perioad de ceas mic (<< 1 sec) am avea
nevoie de multe stri pentru a realiza o durat de 30 sec. O soluie mult mai bun este s folosim un
numrtor pentru a realiza ntrzierile necesare. Numrtorul este un circuit secvenial (automat finit)
care poate numra cresctor sau descresctor tranziiile unui semnal, avand un semnal de ieire care
este activat atunci cnd indexul ajunge la 0 sau la o valoare care poate fi controlat. Concret, pentru
msurarea duratelor de timp n automatul nostru vom folosi un numrtor cresctor a crui valoare
maxim o vom configura pentru a obine duratele de timp necesare, n funcie de perioada de ceas a
automatului.
Vom aduga astfel o ieire (T), care va controla valoarea maxim a numrtorului i o intrare (done)
care va primi semnalul de terminare de la numrtor.
Diagrama de stri a automatului (Fig. 15) va urmri tranziia celor 3 culori ale semaforului pentru
maini: verde (m_verde) galben (m_galben) rou (m_rosu) verde (m_verde). Din descrierea
funcionrii deducem durata pentru culoarea roie (verde pentru pietoni: 30 sec) i mpreun pentru
culoarea verde i galben (rou pentru pietoni: 60 sec). n lipsa unei specificaii pentru durata culorilor
semaforului pentru maini vom alege 10 sec pentru culoare galben i 50 sec pentru culoarea verde.
Aceste durate vor putea fi relativ uor modificate prin schimbarea valorilor maxime cu care este
configurat numrtorul n fiecare stare.

Fig. 15: Automatul trecerii de pietoni


O dat determinat diagrama de stri a automatului, putem trece la implementarea acestuia ntr-un
limbaj cunoscut (C/C++/C#/Java):
Automatul trecerii de pietoni
void FSM_trecere(int done,
int T,
int p_rosu,
http://elf.cs.pub.ro/ac/wiki/

Printed on 2014/10/19 13:33

2014/10/19 13:33

15/16

int
int
int
int

p_verde,
m_rosu,
m_galben,
m_verde) {

int state = 0;
2 - m_rosu
while(1) {
read_inputs();
p_rosu = 0;
p_verde = 0;
m_rosu = 0;
m_galben = 0;
m_verde = 0;
switch(state) {
case 0:
p_rosu = 1;
m_verde = 1;
T = 50;
if(done == 1)
state = 1;
else
state = 0;
break;
case 1:
p_rosu = 1;
m_galben = 1;
T = 10;
if(done == 1)
state = 2;
else
state = 1;
break;
case 2:
p_verde = 1;
m_rosu = 1;
T = 30;
if(done == 1)
state = 0;
else
state = 2;
break;
}
}

AC Wiki - http://elf.cs.pub.ro/ac/wiki/

Laboratorul 0 - Recapitulare

// FSM state: 0 - m_verde, 1 - m_galben,

Last update: 2014/10/08 09:22

lab:lab00

http://elf.cs.pub.ro/ac/wiki/lab/lab00

Resurse
PDF laborator

From:
http://elf.cs.pub.ro/ac/wiki/ - AC Wiki
Permanent link:
http://elf.cs.pub.ro/ac/wiki/lab/lab00
Last update: 2014/10/08 09:22

http://elf.cs.pub.ro/ac/wiki/

Printed on 2014/10/19 13:33

S-ar putea să vă placă și