Documente Academic
Documente Profesional
Documente Cultură
1/16
Laboratorul 0 - Recapitulare
Laboratorul 0 - Recapitulare
Circuite combinaionale
Circuitele logice combinaionale aplic funcii logice pe semnalele de intrare pentru a obine
semnalele de ieire. Valorile de ieire depind doar de valorile de intrare, iar cnd starea unei intrri se
schimb, acest lucru se reflect imediat la ieirile circuitului.
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 - https://elf.cs.pub.ro/ac/wiki/
Inversor (NOT)
lab:lab00
https://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
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.
https://elf.cs.pub.ro/ac/wiki/
2016/10/16 14:47
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.
adder
semnale pentru full adder
Fig. 4: Diagrama
sum
= a ^ b
c_out = a && b
Conform acestor formule putem exprima circuitul prin pori logice, ca n Fig. 5:
AC Wiki - https://elf.cs.pub.ro/ac/wiki/
lab:lab00
https://elf.cs.pub.ro/ac/wiki/lab/lab00
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, care va reduce dimensiunea termenilor sau chiar i va elimina.
Minimizarea se poate realiza folosind teoremele algebrei booleene sau grafic, prin diagrame
Karnaugh.
https://elf.cs.pub.ro/ac/wiki/
2016/10/16 14:47
5/16
Laboratorul 0 - Recapitulare
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. 6:
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
AC Wiki - https://elf.cs.pub.ro/ac/wiki/
lab:lab00
https://elf.cs.pub.ro/ac/wiki/lab/lab00
2016/10/16 14:47
7/16
Laboratorul 0 - Recapitulare
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:
// selection inputs
// inputs
// output
case 1:
*out = i2;
break;
case 2:
*out = i3;
break;
case 3:
*out = i4;
break;
}
}
AC Wiki - https://elf.cs.pub.ro/ac/wiki/
lab:lab00
https://elf.cs.pub.ro/ac/wiki/lab/lab00
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 deoarece pot aprea probleme de
sincronizare. Din aceast cauz ele sunt folosite mai rar.
n continuare ne vom referi doar la circuitele secveniale sincrone.
https://elf.cs.pub.ro/ac/wiki/
2016/10/16 14:47
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).
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
AC Wiki - https://elf.cs.pub.ro/ac/wiki/
lab:lab00
https://elf.cs.pub.ro/ac/wiki/lab/lab00
1 0
1
1 1
1
Tab. 5: Tabelul de tranziii pentru bistabilul D
Pentru a nelege mai uor comportamentul bistabilelor, pe lng tabelele de tranziii mai sunt utile i
diagramele de semnale (eng. timing diagrams), cum este cea din Fig. 13, 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.
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. 14) 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.
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.
https://elf.cs.pub.ro/ac/wiki/
2016/10/16 14:47
11/16
Laboratorul 0 - Recapitulare
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:
AC Wiki - https://elf.cs.pub.ro/ac/wiki/
lab:lab00
https://elf.cs.pub.ro/ac/wiki/lab/lab00
// FSM input: 0 - a, 1 - b
// FSM output: 0 - not found, 1 - found
int state = 0;
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) {
https://elf.cs.pub.ro/ac/wiki/
2016/10/16 14:47
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:
}
}
AC Wiki - https://elf.cs.pub.ro/ac/wiki/
lab:lab00
https://elf.cs.pub.ro/ac/wiki/lab/lab00
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, avnd 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. 16) 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.
2016/10/16 14:47
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 - https://elf.cs.pub.ro/ac/wiki/
Laboratorul 0 - Recapitulare
lab:lab00
https://elf.cs.pub.ro/ac/wiki/lab/lab00
Resurse
PDF laborator
Ghid asistent
From:
https://elf.cs.pub.ro/ac/wiki/ - AC Wiki
Permanent link:
https://elf.cs.pub.ro/ac/wiki/lab/lab00
Last update: 2016/10/16 14:47
https://elf.cs.pub.ro/ac/wiki/