Sunteți pe pagina 1din 20

Aplicaţia 2

Partea 1

Studiul porţilor logice (operatori logici


fundamentali)
Considerente teoretice

Reprezentarea operaţiilor logice prin porţi logice

Algebra logică sau de comutaţie este o algebră booleană cu aplicaţii în domeniul


calculatoarelor şi se defineşte ca o mulţime B = {0,1}, căreia i se asociază trei operaţii: SAU
(OR, adunare logică, disjuncţie), ŞI (AND, înmulţire logică, conjuncţie) şi NU (NOT,
negaţie), reprezentate, respectiv, prin simbolurile:
SAU : +, , ;
ŞI :  , , ;
NU : , ’
Aceste operaţii se mai numesc şi operaţii logice fundamentale. Elementele 0 (F – fals,
false) şi 1 (A – adevărat, T – true) se numesc constante logice. Variabilele care intervin în
diverse expresii din algebra logică se mai numesc variabile logice şi pot lua una dintre cele
două valori din mulţimea B: 0 sau 1.Operaţiile logice se pot reprezenta fie prin scheme cu
contacte, fie prin circuite electronice (Tabelul 1.1). Circuitele electronice care realizează
aceste operaţii logice elementare se numesc porţi logice, iar valorilor logice li asociază
niveluri de tensiune: jos (LOW-L) pentru 0 şi înalt (HIGH-H) pentru 1.Intrările porţilor
corespund operanzilor iar ieşirile corespund valorilor funcţiilor.
Funcţiile logice monodimensionale sunt funcţii de tipul:

f : S n  S1
, (1.1)
unde:

S1 = {x0}, iar Sn = {xn-1,xn-2, … … , x0}

Expresia unei funcţii logice se bazează pe operaţiile logice prezentate (+,  , ), cu


variabilele logice din Sn. Prin f, fiecărui punct din Sn i se asociază valoarea logică 0 sau 1.
Circuitele care implementează astfel de funcţii logice, la care ieşirea depinde doar de
variabilele de intrare, se numesc circuite logice combinaţionale.
Operatorii SAU, ŞI, NU se numesc fundamentali deoarece ei sunt suficienţi pentru a
putea implementa orice funcţie logică. Simbolurile grafice pentru operatorii logici
fundamentali sunt prezentate în Tabelul 1.1.Combinând operatorul NU cu operatorii ŞI, SAU,
se obţine perechea de operatori: ŞI-NU (NAND), SAU-NU (NOR) care sunt, de asemenea,
suficienţi pentru a implementa orice funcţie logică. Simbolurile grafice pentru aceşti operatori
sunt prezentate de asemenea în Tabelul 1.1.

1
Alt operator logic important este operatorul XOR (sumă modulo 2, sau exclusiv):  .
Simbolul grafic al operatorului (porţii) XOR este prezentat în Tabelul 1.1.Operatorul XOR se
poate exprima cu ajutorul operatorilor logici fundamentali:

x  y  x y  x  y (1.2)

Porţile logice stau la baza implementării circuitelor digitale integrate, indiferent de


complexitate al acestora. În funcţie de gradul de integrare (numărul de porţi logice
încorporate), circuitele digitale integrate se clasifică astfel:
1. SSI (Small Scale Integration – Integrare pe scară mică: între 1 și 20 porți logice;
2. MSI (Middle Scale Integration – Integrare pe scară medie): între 20 și 100 porți logice
(circuite basculante, numărătoare);
3. LSI (Large Scale Integration – Integrare pe scară mare). Acestea conțin între 100 și 10000
de porți logice (microprocesoare pe 4 sau 8 biți);
4. VLSI(Very Large Scale Integration– Integrare pe scară foarte mare). Acestea conțin un
număr mai mare de 10000 de porți logice (microprocesoare pe 16 sau 32 biți, elemente de
memorie, alte componente folosite pentru proiectarea calculatoarelor).
Operatorii logici sunt definiţi pentru un operand (NOT) sau pentru doi operanzi
(AND, OR, XOR). Datorită proprietăţii de asociativitate[], aceştia din urmă se pot extinde la
mai mulţi operanzi, existând porţi logice cu două, trei sau mai multe intrări. Expresiile
operaţiilor logice pentru porţile logice elementare sunt date în Tabelul 1.2, în care, prin .
In această lucrare de laborator se vor studia porţile logice elementare cu una sau cu
două intrări: NOT, AND, NAND, OR, NOR şi XOR.

Tabelul 1.1. Reprezentarea grafică a porţilor logice cu una sau două intrări
Nume funcție Simbol Reprezentare prin contacte
NOT
(NU) Contact normal - închis

AND
Circuit serie cu contacte de tip normal-
(ȘI)
deschis

NAND
(ȘI NEGAT) Circuit paralel cu contacte de tip
normal închis

OR
(SAU) Circuit paralel cu contacte de tip
normal-deschis
NOR
(SAU NEGAT) Circuit serie cu contacte de tip normal -
închis
XOR
( SAU EXCLUSIV) Contact dublu

2
Tabelul 1.2. Expresiile operaţiilor logice pentru porţile logice elementare

Denumirea Notaţie operaţie


porţii logice logică

NOT yx

AND y  x1  x2
OR y  x1  x2
NAND y  x1  x 2
NOR y  x1  x 2
XOR y  x1  x2

XNOR y  x1  x 2

Funcţiile logice (în particular şi porţile logice elementare) pot fi descrise atât prin
expresii analitice, precum cele din tabelul 1.2, cât şi prin tabele (numite, în cazul funcţiilor
logice, tabele de adevăr).

Poarta logică NOT


Poarta logică NOT (NU) are expresia matematică y  x , iar simbolul şi tabelul de
adevăr sunt prezentate în Fig. 1.1.Poarta logică NOT (sau inversorul logic) va avea totdeauna
la ieșire o valoare egală cu complementul faţă de 1 al intrării. Expresia matematică se citește
“y este egal cu x negat”.
x y
0 1
1 0
a) b)
Fig. 1.1. Poartalogică NOT: a) simbol electric, b) tabel de adevăr;
x – intrare, y - ieşire

Poarta logică AND


Poarta logică AND(ŞI) are expresia matematică y  x1  x2 , iar simbolul şi tabelul de
adevăr sunt prezentate în Fig. 1.2. Din interpretarea tabelului de adevăr, se observă că poarta
logică AND are valoarea logică 1 la ieșire doar când ambele intrări au valoarea logică 1.
Există porți logice AND standardizate cu 2, 3, 4 sau 8 intrări. În acest caz, la ieșirea porţii
logice ANDse obține valoarea logică 1 dacă şi numai dacă toate intrările au valoarea logică
1.Expresia matematică se citește „y este egal cu x1 şi x2 ”, sau, pur şi simplu, „x1x2”.

3
x1 x2 y
0 0 0
0 1 0
1 0 0
1 1 1
a) b)
Fig. 1.2. Poarta logică AND: a) simbol electric, b) tabel de adevăr;
x1, x2 – intrări, y - ieşire

Poarta logică NAND


Poarta logică AND, combinată cu poarta NOT formează poarta NAND. Poarta logică
NAND (ŞI NEGAT)are expresia matematică y  x1  x 2 , iar simbolul şi tabelul de adevăr sunt
prezentate în Fig. 1.3. Din interpretarea tabelului de adevăr, se observă că poarta logică
NAND are valoarea logică 1 la ieșire doar când ambele intrări nu au simultan valoarea logică
1. Există porți logice NAND standardizate cu 2, 3, 4 sau 8 intrări. În acest caz, la ieșirea porţii
logice NAND se obține valoarea logică 1 dacă şi numai dacă toate intrările nu sunt simultan
1.Expresia matematică se citește "y este egal cu x1şi x2, totul negat" sau, pur şi simplu, „x1x2,
totul negat”.
x1 x2 y
0 0 1
0 1 1
1 0 1
1 1 0
a) b)
Fig. 1.3. Poarta logică NAND: a) simbol electric, b) tabel de adevăr;
x1, x2 – intrări, y - ieşire

Poarta logică OR
Poarta logică OR (SAU) are expresia matematică y  x1  x2 , iar simbolul şi tabelul
de adevăr sunt prezentate în Fig. 1.4. Din interpretarea tabelului de adevăr, se observă că
poarta logică OR are valoarea logică 1 la ieșire dacă cel puţin una dintre intrări are valoarea
logică 1. Există porți logice AND standardizate cu 2, 3 sau 4 intrări. Expresia matematică se
citește „y este egal cu x1saux2 ”, sau, pur şi simplu, „x1 plusx2”.

x1 x2 y
0 0 0
0 1 1
1 0 1
1 1 1
a) b)
Fig. 1.4. Poarta logică OR: a) simbol electric, b) tabel de adevăr
x1, x2 – intrări, y - ieşire
4
Poarta logică NOR
Poarta logică OR, combinată cu poarta NOT formează poarta NOR. Poarta logică
NOR(SAU NEGAT) are expresia matematică y  x1  x 2 , iar simbolul şi tabelul de adevăr
sunt prezentate în Fig. 1.5. Din interpretarea tabelului de adevăr, se observă că poarta logică
NOR are valoarea logică 1 la ieșire dacă ambele intrări are valoarea logică 0. Expresia
matematică se citește „y este egal cu x1 sau x2, totul negat”, sau, pur şi simplu, „x1 plusx2,
totul negat”.

x1 x2 y
0 0 1
0 1 0
1 0 0
1 1 0
a) b)
Fig. 1.5. Poarta logică NOR: a) simbol electric, b) tabel de adevăr
x1, x2 – intrări, y - ieşire

Poarta logică XOR


Poarta logică XOR(SAU EXCLUSIV) are expresia matematică y  x1  x2 , iar
simbolul şi tabelul de adevăr sunt prezentate în Fig. 1.6.

x1 x2 y
0 0 0
0 1 1
1 0 1
1 1 0
a) b)
Fig. 1.6. Poarta logică XOR: a) simbol electric, b) tabel de adevăr
x1, x2 – intrări, y - ieşire
Din interpretarea tabelului de adevăr, se observă că poarta logică XOR are valoarea
logică 1 la ieșire dacă cele două intrări au valori logice diferite, manifestându-se ca un
detector de necoincidenţă. Expresia matematică se citește „y este egal cu x1 sau exclusiv x2 ”.

Poarta logică XNOR


Poarta logică XOR, combinată cu poarta NOT formează poarta XNOR. Poarta logică
XNOR(SAU EXCLUSIV NEGAT) are expresia matematică y  x1  x 2 , iar simbolul şi tabelul
de adevăr sunt prezentate în Fig. 1.7. Din interpretarea tabelului de adevăr, se observă că
poarta logică XNOR are valoarea logică 1 la ieșire dacă ambele intrări au aceeaşi valoarea
logică,manifestându-se ca un detector de coincidenţă. Expresia matematică se citește „y este
egal cu x1sauexclusiv x2, totul negat”.

5
x1 x2 y
0 0 1
0 1 0
1 0 0
1 1 1
a) b)
Fig. 1.6. Poarta logică XNOR: a) simbol electric, b) tabel de adevăr
x1, x2 – intrări, y - ieşire

Modul de lucru. Montaje şi rezultate experimentale

Aduceți-vă aminte modul de lucru cu modulul de interfața pentru placa de teste. Vor
fi folosite comenzile „dw” și „dr” din Matlab în funcție de context.
Pașii sunt următorii:

1. Porniți mașina virtuală.


2. Atașați dispozitivul USB acesteia (Devices->USB->...).
3. Porniți Matlab-ul.
4. Rulați script-ul de mai jos (exist pe Moodle - serial_init.m). Acesta ar trebui să
returneze la consolă varianta softului instalat pe modulul de interfațare.

s = serial('COM3');
set(s,'BaudRate',115200);
fopen(s);
pause(3);
cmd='rv';
fprintf(s,cmd);
out = fgets(s)

În anexa 1 este prezentată codul Matlab pentru o funcție care generează automat toate
combinațiile variabilelor de intrare și verifică dacă ieșirea circuitului este cea dorită (există pe
Moodle - verificare1.m).

Sintaxa pentru această funcție este:

[Eroare, pozitie]=verificare1(s,NvarIn,y)

s reprezintă portul serial la care este conectat modulul de interfațare (inițial portul
trebuie deschis).
NvarIn reprezintă numărul variabilelor de intrare NvarIn ≤16.
y reprezintă un vector cu valorile ieșirilor față de care se dorește verificarea.
Valorile returnate sunt descrise de asemenea în anexa 1

Pentru utilizarea funcției verificare1 trebuie acordată atenție modului în care


sunt conectate firele corespunzătoare variabilelor logice la modulul de interfață. Astfel este
nevoie ca firul corespunzător lui x0 să fie conectat la ieșirea digitala nr. 0 a modulului, x1 la
6
ieșirea digitală 1 ș.a.m.d.. Ieșirea circuitului verificat trebuie conectată la intrarea digitală
numărul 0 a modului de interfață. Pentru alte moduri de interconectare va trebui modificată
funcția verificare1.

Exemplu de utilizare:

[Er, p] =verificare1(s,4,[0 1 1 0 0 0 1 1 0 0 0 0 1 1 0 1])

Nr. | x3 x2 x1 x0 | y | e | Cmd(hex) | Intrari citite


============================================================
0 | 0 0 0 0 | 0 | 0 | dw 0000 | 1010101111001110
-----+-------------+---+---+-----------+--------------------
1 | 0 0 0 1 | 0 | 1 | dw 0001 | 1010101111001110
-----+-------------+---+---+-----------+--------------------
2 | 0 0 1 0 | 0 | 1 | dw 0002 | 1010101111001110
-----+-------------+---+---+-----------+--------------------
3 | 0 0 1 1 | 0 | 0 | dw 0003 | 1010101111001110
-----+-------------+---+---+-----------+--------------------
4 | 0 1 0 0 | 0 | 0 | dw 0004 | 1010101111001110
-----+-------------+---+---+-----------+--------------------
5 | 0 1 0 1 | 0 | 0 | dw 0005 | 1010101111001110
-----+-------------+---+---+-----------+--------------------
6 | 0 1 1 0 | 0 | 1 | dw 0006 | 1010101111001110
-----+-------------+---+---+-----------+--------------------
7 | 0 1 1 1 | 0 | 1 | dw 0007 | 1010101111001110
-----+-------------+---+---+-----------+--------------------
8 | 1 0 0 0 | 0 | 0 | dw 0008 | 1010101111001110
-----+-------------+---+---+-----------+--------------------
9 | 1 0 0 1 | 0 | 0 | dw 0009 | 1010101111001110
-----+-------------+---+---+-----------+--------------------
10 | 1 0 1 0 | 0 | 0 | dw 000A | 1010101111001110
-----+-------------+---+---+-----------+--------------------
11 | 1 0 1 1 | 0 | 0 | dw 000B | 1010101111001110
-----+-------------+---+---+-----------+--------------------
12 | 1 1 0 0 | 0 | 1 | dw 000C | 1010101111001110
-----+-------------+---+---+-----------+--------------------
13 | 1 1 0 1 | 0 | 1 | dw 000D | 1010101111001110
-----+-------------+---+---+-----------+--------------------
14 | 1 1 1 0 | 0 | 0 | dw 000E | 1010101111001110
-----+-------------+---+---+-----------+--------------------
15 | 1 1 1 1 | 0 | 1 | dw 000F | 1010101111001110
-----+-------------+---+---+-----------+--------------------

Er =

p =

1 2 6 7 12 13 15

7
Experimentul 1. Studiul porţii logice AND cu 3 intrări.
Modul de lucru:
1. Se calculează tabelul de adevăr al funcției (Tabelul 1)

Tabelul 1. Rezultate pentru studiul porţii logice AND


x2 x1 x0 y
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

2. Se identifică circuitul 74LS11 pe placa de test.


3. Abordarea ar trebui să fie cea din figura 1.7. Etapa 1 este cea în care se înțelege logica
circuitului. Etapa 2 este cea a schemei electrice în care deja se știu circuitele folosite
precum și pinii acestora. Etapa 3 este cea în care se realizează montajul.

Fig. 1.7. Etapele experimentului

4. Pentru verificarea automată a circuitului se va folosi funcția verificare1. (1pct)


5. În cazul în care apar erori, se pot seta ieșirile din modul la una din combinațiile de intrări
care au generat ieșirea eronată a circuitului. Spre exemplu, dacă ieșirea eronată este
corespunzătoare combinației de intrări 111, atunci se poate trimite comanda „dw 0007”
și se analizează sursa erorii. Reamintim că succesiunea de comenzi în acest scop este cea
de mai jos (disponibilă pe Moodle - test.m).
cmd='dw 0007';
fprintf(s,cmd);
out = fgets(s)

8
Notă: Pentru generarea de o manieră automată și a tabelului de adevăr pe baza unei
funcții logice puteți utiliza programul din anexa 2. Spre exemplu, pentru funcția =
( , , )= ∙ + , va genera rezultatul de mai jos. y-ul respectiv poate fi
folosit mai departe în funcția verificare1.

>> gen_y

Nr. | x2 x1 x0 | y
====================
0 | 0 0 0 | 0
-----+----------+---
1 | 0 0 1 | 1
-----+----------+---
2 | 0 1 0 | 0
-----+----------+---
3 | 0 1 1 | 0
-----+----------+---
4 | 1 0 0 | 1
-----+----------+---
5 | 1 0 1 | 1
-----+----------+---
6 | 1 1 0 | 1
-----+----------+---
7 | 1 1 1 | 1
-----+----------+---
>> y'

ans =

0 1 0 0 1 1 1 1

TEMĂ DE CASĂ
1.1.1. Să se implementeze funcţia logică (1.3) utilizând porţi elementare standardizate. Să se
precizeze indicatorul comercial şi pinii pentru fiecare poartă.
f ( x2 , x1 , x0 )  x2 ( x0  x1 ) (1.3)
1.1.2. Pornind de la relaţia (1.2), să se implementeze operatorul XOR cu NAND – uri cu două
intrări, de tip 7400. Sa se marcheze pinii folosiţi pentru fiecare poartă.
1.1.3. Să se implementeze cu porţi logice comerciale funcţia logică (1.4), marcând circuitele
şi pinii folosiţi.
f ( x3 , x2 , x1 , x0 )  x3  x2  x1  x0 (1.4)
1.1.4. Să se implementeze un circuit de conversie din cod binar natural în cod Gray (ciclic)
utilizând porţi logice de tip XOR.

9
Partea a 2-a

Minimizarea funcţiilor logice


Considerente teoretice

Reprezentarea funcţiilor logice prin forme disjunctive. Minimizarea în


forma disjunctivă. Eliminarea hazardului static

Moduri de reprezentare a funcţiilor logice. Forma canonică disjunctivă (FCD) şi forma


canonică conjunctivă (FCC)

O funcţie logică poate fi reprezentată în forma analitică (operaţii algebrice între


variabile) sau în forma tabelară (tabele de adevăr, diagrame Karnaugh). Pentru o funcţie
logică dată există mai multe expresii analitice echivalente, dar un singur tabel de adevăr şi o
singură diagramă Karnaugh. Dintre formele analitice, cele mai folosite sunt cele disjunctive şi
cele conjunctive. Se spune că o funcţie logică f : S n  S1 este în formă disjunctivă dacă
expresia ei analitică este o sumă de produse logice (2.1):

k 1
y : f ( x0 , x1 ,..., xn 1 )   pi (2.1)
i 0

unde pi sunt produse de variabile normale sau negate ale spaţiului logic Sn. În cadrul unui
produs logic, numele variabilelor nu se repetă.
Dacă toţi termenii pi sunt mintermeni (adică fiecare produs conţine toate variabilele,
normale sau negate), atunci reprezentarea (2.1) se numeşte formă canonică disjunctivă
(FCD). Pentru un spaţiu Sn , avem 2n mintermeni posibili. Mintermenii se pot scrie din
cuvintele de cod corespunzătoare de n biţi, atribuind variabila normală pentru simbolul 1 şi
variabila negată pentru simbolul 0.
Se spune că o funcţie logică este în formă conjunctivă dacă expresia ei analitică este
un produs de sume logice (2.2):

m 1
y : f ( x0 , x1 ,..., xn1 )   si (2.2)
i 0

unde si sunt sume din variabile normale sau negate.


Dacă toţi termenii si sunt maxtermeni (adică fiecare sumă conţine toate variabilele,
normale sau negate), atunci reprezentarea (2.2) se numeşte formă canonică conjunctivă
(FCC). Pentru un spaţiu Sn, avem 2n maxtermeni posibili care se pot scrie din cuvintele de
cod corespunzătoare de n biţi, atribuind variabila normală pentru simbolul 0 şi variabila
negată pentru simbolul 1.

10
Folosind proprietăţile algebrei logice, sau direct, din tabelul de adevăr, orice funcţie
poate fi adusă la forma canonică disjunctivă sau la forma canonică conjunctivă. Pentru o
funcţie logică dată FCD şi FCC sunt unice. Astfel, din tabelul de adevăr se poate scrie direct
FCD, prin relaţia (2.3), iar FCC, prin relaţia (2.4):

2 n 1
y   ai  mi , (2.3)
i 0
2 n 1
y   (bi  M i ) (2.4)
i 0

unde ai este valoarea funcţiei f din tabelul de adevăr corespunzătoare mintermenului mi,
respectiv, bi este valoarea funcţiei f din tabelul de adevăr corespunzătoare maxtermenului Mi.

Minimizarea funcţiilor logice în forma disjunctivă


Pentru o implementare eficientă a unei funcţii logice interesează ca numărul de porţi
logice şi numărul de intrări ale porţilor să fie cât mai mici. Aceste numere pot fi reduse la o
formă minimală, echivalentă, prin mai multe metode: metoda analitică, metoda diagramelor
Veitch – Karnaugh, algoritmul Quine – Mc Cluskey. Metoda analitică foloseşte proprietăţile
algebrei logice. Această metoda este greoaie şi se aplică doar pentru expresii de întindere
mică.
Metoda diagramelor Veitch – Karnaugh utilizează diagramele bidimensionale codate
ciclic (Cod Gray şi pe orizontală şi pe verticală) pentru reprezentarea spaţiului logic Sn şi a
funcţiei logice. Dacă un subspaţiu al lui Sn (în care variabilele logice corespunzătoare apar cu
ambele valori 0 şi 1) este acoperit de funcţia logică respectivă (în toată zona sunt valori ale
funcţiei egale cu 1), atunci acest subspaţiu (variabilele logice respective) poate fi eliminat din
expresiile mintermenilor respectivi, care se înlocuiesc cu un produs format din variabilele
rămase. Acest lucru este posibil doar dacă 1 – urile din diagramă sunt adiacente pe orizontală
şi/sau pe verticală (adiacent înseamnă distanţă 1 între cuvintele de cod corespunzătoare, adică
acestea să difere într-un singur bit). Se vor avea în vedere grupări de câte 2k elemente, k≥1.
Referitor la această metodă, trebuie să se ţină seama de următoarele observaţii: i) Pentru
simplificări eficiente, se caută să se pună în evidenţă subspaţii acoperite cât mai mari (grupări
cât mai mari); ii) Un punct poate fi folosit în mai multe grupări; iii) Metoda este eficientă în
cazul funcţiilor cu un număr mic de variabile şi nu este comodă pentru proiectarea software.
Algoritmul Quine – Mc Cluskey este mai comod de implementat software datorită
unei mai bune sistematizări. El se poate aplica pentru minimizarea funcţiilor cu un număr
mare de variabile. Pentru alcătuirea algoritmului, se pleacă de la mintermenii prezenţi în
tabelul de adevăr al funcţiei. Aceştia se reordonează într-un alt tabel în care, pe coloana 1 se
pun numele corespunzătoare mintermenilor, pe coloana 2 se pun reprezentările binare ale
mintermenilor, pe coloana 3 se pun rezultatele iteraţiei 1, pe coloana 4 se pun rezultatele
iteraţiei 2 ş.a.m.d.
Ordonarea se face pe grupe: grupa 0 – care are numai mintermeni cu variabile negate
(numai 0), deci conţine un singur mintermen, grupa 1 – care are mintermeni cu o singură
valoare de 1 (o singură variabilă nenegată), grupa 2 – care are două valori de 1 ş.a.m.d. Se
observă că două grupe adiacente diferă printr-un singur bit.
Elementele fiecărei grupe sunt implicanţi. Un implicant este un produs logic p, cu
proprietatea că, dacă p = 1, atunci, valorile logice ale variabilelor corespunzătoare lui p,
înlocuite în f, conduc, de asemenea la f = 1. Un implicant p se numeşte prim dacă, eliminând
11
o componentă a sa, nu mai are loc această proprietate. Într-o diagramă Karnaugh, implicanţii
primi corespund celor mai mari grupări care acoperă spaţiul respectiv. O formă disjunctivă
minimală este o sumă de implicanţi primi.
Iteraţia 1 constă în următoarele: Se consideră elementul din grupa 0 a coloanei 2 şi se
caută un element pereche din grupa 1 a aceleaşi coloane care să difere de primul printr-un
singur bit (evident are un 1 în plus). Acestei perechi de implicanţi îi va corespunde un
implicant în coloana următoare (se trece acest element în coloana 3), ce va avea n-1 variabile:
cele identice din implicanţii pereche, iar în locul variabilei lipsă se va pune simbolul − .
Algoritmul continuă, baleind de sus în jos coloana 2, comparând elementele din grupa i cu
elementele din grupa i+1, până la finalul coloanei. Implicanţii pereche se marchează cu √ , iar
implicantul rezultat prin comasare se trece în coloana următoare (care, de asemenea, se
organizează pe grupe). Implicanţii nepereche se marchează cu * şi vor fi implicanţi primi.
Se trece apoi la iteraţia 2 (completarea coloanei 4), comparând (ca mai sus) termenii
din grupele adiacente din coloana 3. De această dată, în două grupe se compară doar termenii
care conţin simbolul − în aceeaşi poziţie.
Procedeul continuă, adăugând coloane în dreapta până la epuizarea posibilităţilor de
comparare.
Evident, coloanele din dreapta vor avea din ce în ce mai puţini implicanţi, iar ultima
coloană va avea doar implicanţi primi.
Toţi mintermenii se regăsesc în mulţimea implicanţilor primi, care, de regulă, este
redundantă.
După obţinerea implicanţilor primi, pentru a obţine forma minimală a lui f se
procedează astfel:
► Se observă şi se marchează mintermenii care apar intr-un singur implicant
prim. Aceşti implicanţi se numesc implicanţi primi esenţiali.
► Dintre implicanţii primi rămaşi se selectează un număr minim care să acopere
toţi ceilalţi mintermeni.
► O formă minimală a funcţiei logice va avea expresia obţinută prin sumarea
logică a implicanţilor primi esenţiali şi a implicanţilor primi selectaţi, obţinuţi prin
înlocuirea lui 1 cu variabila normală corespunzătoare, înlocuirea lui 0 cu variabila
negată şi eliminarea simbolului −.

Eliminarea hazardului static din forma minimală


Hazardul static în 1 poate fi prezent în cazul formelor disjunctive, atunci când există două
combinaţii de intrare care se deosebesc printr-o singură variabilă şi au, ambele, ieşirile
corespunzătoare egale cu 1. Pentru eliminarea hazardului se pot introduce termeni
suplimentari (redundanţi), obţinând o nouă funcţie logică, echivalentă din punctul de vedere
al comportării ideale cu cea iniţială, dar care nu mai prezintă fenomenul de hazard. O metodă
simplă de eliminare a hazardului în 1 este metoda diagramelor Karnaugh. În acest caz, toate
grupările de 1, selectate pentru minimizare, trebuie să fie înlănţuite (să nu fie separate).
Termenii suplimentari introduşi faţă de forma minimală elimină glitch-urile, susţinând
valoarea 1 pe această durată, şi se numesc termeni de consens.

12
Modul de lucru. Montaje şi rezultate experimentale

Experimentul 2.2.1.
Se dă funcţia logică în forma disjunctivă (2.5):

y  x 2 x1  x1 x0  x 2 x1 x 0 (2.5)
i) Să se facă montajul pentru funcţia logică y folosind placa de lucru. Pe cale
experimentală să se completeze tabelul de adevăr dând toate valorile posibile variabilelor de
intrare. Pe baza tabelului să se scrie forma canonică disjunctivă yFCD . (0,5pct)

Indicaţie: Considerând valorile 1 ale funcţiei se obţine (2.6):

y FCD  x 2 x1 x 0  x 2 x1 x0  x 2 x1 x 0  x2 x1 x0 (2.6)

ii) Să se minimizeze funcţia y utilizând diagrama Karnaugh. Să se facă montajul pentru


forma minimizată yM a funcţiei folosind placa de lucru. Pe cale experimentală să se
completeze tabelul de adevăr a lui yM şi să se compare cu tabelul de adevăr al lui y. Ce se
observă? (0,5pct)
Indicaţie: Dispunând de tabelul de adevăr se obţine imediat diagrama Karnaugh (Fig.
2.2). Se observă că sunt două grupări care dau cele două produse logice din (2.7), iar forma
minimizată este:

y M  x 2 x 0  x 1 x0 (2.7)
x 1 x0
00 01 11 10
x2
0 1 1 0 1

1 0 1 0 0

Fig. 2.2. Minimizarea cu ajutorul diagramei Karnaugh

iii) Să se elimine hazardul static din forma minimală. Să se facă montajul pentru forma
minimizată fără hazard static yMC a funcţiei. Pe cale experimentală să se completeze tabelul
de adevăr a lui yMC şi să se compare cu tabelul de adevăr al lui y. Ce se observă? (0,5pct)
Indicaţie: Deoarece grupările adiacente din diagrama Karnaugh (Fig. 2.3) nu sunt
înlănţuite, trebuie introdus un termen de consens (evident, având cât mai puţine variabile).
Acesta este marcat cu linie întreruptă şi reprezintă ultimul produs din (2.8). Astfel, forma
minimală care conţine termenul de consens (forma minimală fără hazard static) are expresia
următoare:

y MC  x 2 x 0  x 1 x 0  x 2 x 1 (2.8)
13
x 1 x0
00 01 11 10
x2
0 1 1 0 1

1 0 1 0 0

Fig. 2.3. Introducerea termenului de consens

iv) Să se minimizeze funcţia utilizând algoritmul Quine – Mc Cluskey.


Indicaţie: Pentru aceasta, pornind de la tabelul de adevăr, se completază tabelele de mai
jos. Primul (Tabelul 2.1) se referă la determinarea tuturor implicanţilor primi (notaţi prin *)
obţinuţi prin marcarea implicanţilor nepereche din algoritmul descris mai sus. În al doilea
tabel (Tabelul 2.2) se selectează implicanţii primi strict necesari pentru acoperirea tuturor
mintermenilor. Se observă că mintermenul m2 este acoperit doar de implicantul prim x 2 x 0 şi
mintermenul m5 este acoperit doar de implicantul prim x1 x0 , deci aceşti implicanţi primi sunt
esenţiali şi vor fi necesari pentru includerea în foma minimală. Pe de altă parte cei doi
implicanţi primi acoperă împreună mintermenii rămaşi, m0 şi m1. Rezultă că suma celor doi
implicanţi primi esenţiali reprezintă forma minimală a funcţiei şi se observă că are aceasta are
expresia (2.7).

Tabelul 2.1. Determinarea tuturor implicanţilor primi.


Reprezentare
Mintermen Etapa I
binara
Col.
Nr 1 2 3

0 m0 000 (0,1)
( x 2 x1 x 0 ) 00−*

1 m1 001 (0,2)
( x 2 x1 x0 ) 0−0*

2 m2 010 (1,5)
( x 2 x1 x 0 ) −01*

5 m5 101
( x2 x1 x0 )

14
Tabelul 2.2. Selectarea implicanţilor primi

Minter. m0 m1 m2 m5
Impl.
00−
X X
( x 2 x1 )

0−0
X X
(x2 x0 )

−01
X X
( x 1 x0 )

Experimentul 2.2.2.
Se dă funcţia logică în forma disjunctivă (2.9):

y  x 3 x1 x 0  x 3 x2 x0  x 3 x1 x 0  x3 x2 x0 (2.9)
i) Să se facă montajul pentru funcţia logică y folosind placa de lucru. Pe cale
experimentală să se completeze tabelul de adevăr dând toate valorile posibile variabilelor de
intrare. Pe baza tabelului să se scrie forma canonică disjunctivă yFCD . (0,5pct)
ii) Să se minimizeze funcţia y utilizând diagrama Karnaugh. Să se facă montajul pentru
forma minimizată yM a funcţiei. Pe cale experimentală să se completeze tabelul de adevăr a
lui yM şi să se compare cu tabelul de adevăr al lui y. Ce se observă? (0,5pct)
iii) Să se elimine hazardul static din forma minimală. Să se facă montajul pentru forma
minimizată fără hazard static yMC a funcţiei. Pe cale experimentală să se completeze tabelul
de adevăr a lui yMC şi să se compare cu tabelul de adevăr al lui y. Ce se observă? (0,5pct)
iv) Să se minimizeze funcţia utilizând algoritmul Quine – Mc Cluskey.

Experimentul 2.2.3.

Pentru a primi încă un punct solicitați profesorului încă un exercițiu.

TEMĂ DE CASĂ
2.3.1. Sa se implementeze funcţia logică (2.10) într-o formă disjunctivă utilizând porţi logice
integrate comerciale.

f ( x3 , x 2 , x1 , x 0 )  ( x 3  x 2 x 1 )  ( x 0  x1 )  x 2 (2.10)

2.3.2. Să se facă tabelul de adevăr şi apoi să se implementeze funcţia logică (2.10) în formă
canonică disjunctivă utilizând porţi logice integrate comerciale.

15
2.3.3. Utilizând tabelul de adevăr să se implementeze funcţia logică (2.10) în formă canonică
conjunctivă utilizând porţi logice integrate comerciale.
2.3.4. Utilizând forma disjunctivă să se minimizeze funcţia prin metoda diagramei
Karnaugh. Să se facă montajul pentru forma minimizată yM a funcţiei folosind porţi
logice integrate comerciale.
2.3.5. Să se elimine hazardul static din forma minimală. Să se facă montajul pentru forma
minimizată fără hazard static yMC a funcţiei folosind porţi logice integrate comerciale.
2.3.6. Să se minimizeze funcţia utilizând algoritmul Quine – Mc Cluskey. Pe baza acestui
algoritm să se facă un program adecvat pentru minimizarea funcţiei logice.

16
Anexa 1

%------------------------------------------------------------
% Program pentru verificarea unui circuit pe baza tabelului
% de adevar.
%------------------------------------------------------------
% Aceasta varianta prespune ca variabilele de intrare xi
% au fost conectate la iesirile digitale i, unde i=0:N-1, iar N
% este numarul de variabile de intrare.
% Se testeaza o singura iesire a circuitului, aceasta trebuind
% sa fie conectata la intrarea digitala 0.
%
% Varianta: 0.1 beta
% Data: 20.03.2016
%-------------------------------------------------------------

function [Eroare, pozitie]=verificare1(s,NvarIn,y)


% s este portul serial
% NvarIn este numarul de variabile de intrare
% y reprezinta vectorul valorilor de iesire in ordine,
% astfel: y(p) corespunde iesirii combinatie de intrare
% p_baza10=xN-1xN-2...x1x0_baza2+1
% (nota: se aduga 1 pentru ca in Matlab indicii pornesc de la 1)
% Functia returneaza:
% Eroare=0 cand tabelul a fost verificat cu succes
% Eroare=1 cand exista cel putin o inadvertenta intre
% iesirile citite si cele de referinta. In acest
% caz, pozitie va returna un vector cu pozitiile
% din vectorul y care nu corespund
% Eroare=2 cand vectorul y are o dimensiune necorespunzatoare
% Eroare=3 cand vectorul y nu are componentele 0 sau 1,
% pozitie va indica pozitia elementelor gresite
% Eroare=4 o comanda catre interfata nu a fost confirmata
% Eroare=5 raspunsul comenzii de citire a intrarilor digitale
% este eronat.
% Ex:
% pentru N=4, y va avea 16 elemente, de la y(1):y(16)
% unde y(1) corespunde lui y0 cu x3x2x1x0=0000_baza2
% ...
% y(5) corespunde lui y4 cu x3x2x1x0=0100_baza2
% ...
% y(16) corespunde lui y15 cu x3x2x1x0=1111_baza2
%
%

%Initializare
Eroare=0;
pozitie=[];
pauza=0.1;
fAfisare=1; %1 reprezinta ecranul

N=2^NvarIn; %dimenisunea spatiului variabilelor de intrare


L=length(y); %numarul de componente al vectorului de intrare
if N~=L
Eroare=2;
return;

17
end
%verificarea vectorului de iesire dat ca parametru
for i=1:N
if (y(i)~=0)&&(y(i)~=1)
Eroare=3;
pozitie=[pozitie i];
end
end
if Eroare~=0
return;
end

%construirea vectorului de comenzi


x=0:N-1; % genererare combinatiilor
xHexStr=dec2hex(x,4); % transformarea in hexa cu 4 caractere
cmd=[]; % lista de comenzi este initial vida
for i=1:N
cmd=[cmd ; 'dw ' xHexStr(i,:)];
end
% acum cmd contine cate o comanda pe fiecare linie

% trimiterea comenzilor pe seriala si analizarea rezultatului


% afisarea capului de tabel
L1=' Nr. |';
L2='======';
for i=NvarIn:-1:1
L1=[L1 sprintf(' x%d',i-1)];
L2=[L2 '==='];
if i>10
L2=[L2 '='];
end
end
L1=[L1 ' | y | e | Cmd(hex) | Intrari citite '];
L2=[L2 '=========================================='];
fprintf(fAfisare,'\n%s\n%s\n',L1,L2);
for i=1:N
Li=sprintf(' %3d |', i-1);
Lip1='-----+';
sInBin=dec2bin(x(i),NvarIn);
for j=1:NvarIn
Li=[Li ' ' sInBin(j)];
Lip1=[Lip1 '---'];
end
Li=[Li ' |'];
Lip1=[Lip1 '-+'];
%trimiterea comenzii
fprintf(s,cmd(i,:));
ans = fgets(s);
ans='ACK';
if ans~='ACK'
Eroare=4;
pozitie=i-1;
fprintf(fAfisare,'%s Eroare ACK \n', Li);
return
end
%citirea intrarilor
pause(pauza);
fprintf(s,'dr');
ans = fgets(s);
% ans='1abce'; %pentru testare
18
if ans(1)~='1'
Eroare=5;
pozitie=i-1;
fprintf(fAfisare,'%s Eroare la citire \n', Li);
return
end
yn=hex2dec(ans(2:5)); %se converteste in zecimal eliminand 1
ym=mod(yn,2); %se verifica primul bit
ye=abs(y(i)-ym); %eroarea iesirii
if ye>0
Eroare=1;
pozitie=[pozitie i-1];
end
Li=[Li sprintf(' %d | %d | %s | %s',ym,ye,cmd(i,:),dec2bin(yn,16))];
Lip1=[Lip1 '---+---+-----------+--------------------'];
fprintf(fAfisare,'%s\n%s\n',Li,Lip1);
end

end

19
Anexa 2

% Program pentru generarea unui tabel de adevar


% si a variabilei de iesire y ca referinta

NvarIn=3; % Numarul variabilelor de intrare


N=2^NvarIn; % Dimensiunea spatiului
xd=[0:N-1]'; % Combinatiile zecimale
x=zeros(N,NvarIn); % Initializarea vectorului x
% x va avea pe linii toate combinatiile posibile,
% iar pe coloane va avea combinatia binara a variabilelor
% Atentie! Indicii vor fi decalati cu 1 (Matlab)

sBin=dec2bin(xd,NvarIn);
for j=1:NvarIn
x(:,NvarIn-j+1)=str2num(sBin(:,j));
end

% Caluclul iesirii
% Exemplu pentru y=x0*!x1+x2

y=x(:,1)&not(x(:,2))|x(:,3);

%afisarea tabelului
%mai inati capul de tabel
L1=' Nr. |';
L2='======';
for i=NvarIn:-1:1
L1=[L1 sprintf(' x%d',i-1)];
L2=[L2 '==='];
if i>10
L2=[L2 '='];
end
end
L1=[L1 ' | y '];
L2=[L2 '====='];
fprintf('\n%s\n%s\n',L1,L2);
%acum e randul tabelului
for i=1:N
Li=sprintf(' %3d | ', xd(i));
Lip1='-----+';
for j=NvarIn:-1:1
Li=[Li sprintf(' %d ',x(i,j))];
Lip1=[Lip1 '---'];
end
Li=[Li sprintf('| %d ',y(i))];
Lip1=[Lip1 '-+---'];
fprintf('%s\n%s\n',Li,Lip1);
end

20

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