circuiti combinatori porte logiche

anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
CIRCUITI COMBINATORI
Un circuito combinatorio (o rete combinatoria) è un insieme interconnesso di porte
logiche il cui output, istante per istante dipende unicamente dallo stato che gli ingressi
della rete hanno nell’istante medesimo e non dai valori che questi hanno assunto negli
istanti precedenti.
Una rete logica altro non è che una realizzazione fisica di una funzione binaria di variabili
binarie. I circuiti combinatori implementano, pertanto, le funzioni logiche esprimibili
nell’algebra di Boole.
I circuiti logici sono componenti hardware che manipolano informazione binaria. I circuiti di
base sono detti PORTE LOGICHE (logical gate). Per descrivere i comportamenti dei
circuiti digitali si può usare un’algebra (notazione matematica) che specifica l’operazione di
ogni gate e permette di analizzare e sintetizzare (disegnare) il circuito.
PORTE LOGICHE
Le porte logiche sono dei semplici circuiti elettronici che possono essere considerate dei
blocchi attraverso i quali poter svolgere delle operazioni logiche. Tali operazioni devono
sottostare alla cosiddetta algebra binaria o Booleana: essa si basa sugli stati “VERO” o
“FALSO” (TRUE or FALSE, in inglese) che, in elettronica, corrispondono al "passaggio" o
"non passaggio" di corrente elettrica e quindi ai cosiddetti "LIVELLI LOGICI" "0" e "1".
Le operazioni logiche fondamentali sono AND, OR, XOR, NOT. A queste si aggiungono le
versioni con l'uscita invertita delle prime tre che sono NAND, NOR, XNOR. Queste non
sono altro che, rispettivamente: AND+NOT, OR+NOT, XOR+NOT.
A parte la funzione NOT che ha un solo ingresso e le XOR e XNOR che dispongono al
massimo di due ingressi, le altre porte logiche possono disporre, teoricamente, di un
qualunque numero di ingressi, tutte invece dispongono di una sola uscita (o al massimo
anche dall'uscita complementare ovvero invertita).
Funzione logica AND
La funzione logica AND fornisce un'uscita "vera" solo quando tutti gli ingressi sono "veri".
Analogamente, una porta logica AND fornisce un livello logico "1" solo quando tutti gli
ingressi presentano un livello logico "1".
Da un punto di vista algebrico la funzione AND è rappresentata dal prodotto degli ingressi:
OUT = A * B
1
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
A
B
OUT = A*B
0
0
0
0
1
0
1
0
0
1
1
1
Un esempio pratico è il seguente:
La funzione logica OR
La funzione logica OR fornisce un'uscita "vera" quando almeno un ingresso è "vero".
Analogamente, una porta logica OR fornisce un livello logico "1" quando almeno un
ingresso presenta un livello logico "1".
Da un punto di vista algebrico la funzione OR è rappresentata dalla somma degli ingressi:
OUT = A + B.
A
B
OUT = A+B
0
0
0
0
1
1
1
0
1
1
1
1
Un esempio pratico di questa funzione è il seguente:
2
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
La funzione logica NOT
La funzione logica NOT fornisce un'uscita "vera" quando il suo ingresso presenta una
condizione "falsa" e viceversa. Analogamente, una porta logica NOT fornisce un livello
logico "1" quando il suo ingresso presenta un livello logico "0" e viceversa.
Da un punto di vista algebrico la funzione NOT è rappresentata dal complemento
dell’ingresso.
A
OUT = A
0
1
1
0
Un esempio pratico è dato dallo schema seguente: la lampada si accende quando
l’interruttore è aperto, si spegne quando è chiuso.
3
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
La funzione logica XOR
La funzione logica XOR fornisce un'uscita "vera" solo quando i due ingressi presentano le
condizioni logiche opposte. Analogamente, una porta logica XOR fornisce un livello logico
"1" solo quando i due ingressi presentano livelli logici opposti.
Dal punto di vista algebrico questa funzione è rappresentata da una somma particolare,
espressa con il simbolo ⊕ che ci indica che 1+1 = 0, al contrario di quanto avviene per la
funzione OR, ma che rende questa funzione più simile all’aritmetica binaria in cui 1 + 1 = 0
con riporto di 1.
A
B
OUT = A ⊕ B
0
0
0
0
1
1
1
0
1
1
1
0
Le Funzioni logiche NAND e NOR
Le funzioni logiche che abbiamo esaminato finora sono fondamentali. Tutte le altre
funzioni logiche possono essere ricavate da una combinazione di queste fondamentali. Un
esempio è dato dalle funzioni NAND e NOR che si ottengono negando l’uscita
rispettivamente dalla AND e della OR.
A
B
OUT = A * B
A
B
OUT = A + B
0
0
1
0
0
0
0
1
1
0
1
1
1
0
1
1
0
1
1
1
0
1
1
1
4
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
La negazione dell’uscita è rappresentata dal pallino posto su di essa.
In realtà anche la funzione XOR può essere ricavata da una combinazione delle prime tre.
Abbiamo che:
Si ricava dal circuito combinatorio:
Che è la realizzazione con porte logiche della funzione OUT = ( A * B) + (A * B ).
RICHIAMI DELL’ALGEBRA DI BOOLE
Come abbiamo detto in precedenza l’algebra di Boole è uno strumento che ci permette di
analizzare e sintetizzare un circuito logico.
I componenti dell’algebra booleana sono i seguenti:
Ø OPERATORI: sono le funzioni logiche AND, OR, NOT;
Ø Regole di trasformazione ed equivalenza tra operatori booleani;
Ø OPERANDI booleani: possono assumere sono due valori (vero / falso oppure 1 / 0).
Le regole fondamentali dell’algebra booleana sono le seguenti:
Idempotenza:
A + A = A;
A*A=A
Proprietà commutativa:
A + B = B + A;
A*B=B*A
Proprietà associativa:
(A+B)+C = A+(B+C);
(A*B)*C = A*(B*C)
5
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
Complementazione:
A + Ā = 1,
A*Ā=0
Proprietà distributiva:
A*(B+C) = A*B+A*C;
A+(B*C) = (A+B)*(A+C)
Ricorsività della negazione:
A =A
Proprietà di assorbimento:
A + 0 = A;
A*1=A
A + 1 = 1;
A*0=0
A + A *·B = A;
A *·(A + B) = A
A+Ā*B=A+B
A * (Ā + B) = A * B
Teoremi di De Morgan
Combinando opportunamente queste proprietà si giunge ai teoremi di De Morgan,
espressi dalle equazioni:
A+B = A+ B
A* B = A + B
6
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
ALCUNI ESEMPI PRATICI
Il circuito addizionatore (half adder)
Un esempio pratico di logica combinatoria è dato dal circuito addizionatore che esegue la
somma binaria di due ingressi e ci fornisce il risultato con il riporto:
Le funzioni logiche, rispettivamente per l’uscita somma e l’uscita riporto sono:
S = X ⊕Y
C = XY
Nel complesso dunque questo circuito implementa una funzione logica avente due
ingressi e due uscite la cui tavola della verità è:
0
somma
A ⊕ B
0
riporto
A*B
0
0
1
1
0
1
0
1
0
1
1
0
1
A
B
0
7
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
Il circuito addizionatore completo (full adder)
Il circuito addizionatore visto sopra ha il limite di addizionare solo due ingressi. Nel caso in
cui si sommino numeri con un numero di bit maggiore uguale di 2 è necessario tenere in
conto anche i riporti provenienti dai bit di peso più basso come nell’esempio seguente:
c3
c2
c1
c0
A
a3
a2
a1
a0
B
b3
b2
b1
b0
c2 +b3 +a3
c1 +b2 +a2
c0+ b1+ a1
b0+ a0
riporto
A+B
c3
dove ax e bx indicano i singoli bit del numero cx il bit di riporto.
La figura sopra è lo schema di un addizionatore completo. Si tratta in pratica di due
addizionatori in cascata i cui riporti sono sommati in una porta OR. L’uscita della porta OR
è il riporto complessivo. La tavola della verità di questo circuito è:
Cin
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
A
0
1
0
1
0
1
0
1
somma
0
1
1
0
1
0
0
1
Cout
0
0
0
1
0
1
1
1
8
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
Come visibile nella figura sopra, è possibile collegare più circuiti di questo tipo per ottenere
un addizionatore di numeri binari di lunghezza qualunque.
Il circuito multiplexer
Il circuito multiplexer è costituito da N ingressi ix , M ingressi di controllo cx ed un’uscita u.
Tramite gli ingressi di controllo si seleziona uno ed uno solo degli ingressi e viene portato
all’uscita.
La rappresentazione del multiplexer è la seguente:
La funzione logica del multiplexer è la seguente:
u = (i0 * c 0 * c1 ) + (i1 * c 0 * c1 ) + (i2 * c 0 * c1 ) + (i3 * c 0 * c1 )
La realizzazione del multiplexer e la tavola della verità sono le seguenti:
9
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
c1
c0
u
0
0
i0
0
1
I1
1
0
I2
1
1
I3
Il demultiplexer
Un circuito demultiplexer viene definito come l'inverso di un circuito multiplexer, ossia
come un elemento funzionale capace di commutare un solo ingresso su due o più uscite.
Per
convenzione,
le
uscite
"non
attivate"
assumono
il
valore
costante
0,
indipendentemente dal valore assunto dall'ingresso "dati". Notare che questa convenzione
pone un vincolo sui codici che possono essere utilizzati per trattare le informazioni in
uscita da un demultiplexer: il valore 0 deve poter essere interpretato come un valore non
significativo, una condizione di riposo, ecc., in quanto questo valore viene assegnato a
tutte le uscite non connesse con l'ingresso.
In figura é riportato un esempio di realizzazione di un demultiplexer a 2 uscite (comandato
da un segnale di controllo c) in grado di commutare informazioni codificate su due bit.
c1
c0
u0
u1
u2
u3
0
0
c0
0
0
0
0
1
0
c0
0
0
1
0
0
0
c0
0
1
1
0
0
0
c0
10
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
Il decoder
Il decoder (decodificatore) è un circuito ha n ingressi di controllo e 2n uscite. La funzione
espletata è di portare a valore logico 1 solo l’uscita corrispondente al codice di controllo
fornito. Il decoder può avere un ingresso di enable che ha il compito di disabilitare tutte le
uscite, indipendentemente dallo stato degli ingressi Cx.
C2
C1
C0
U0
U1
U2
U3
U4
U5
U6
U7
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
1
1
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
1
0
1
0
0
0
0
0
1
0
0
1
1
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
1
Per questo circuito, che ha più uscite, è necessario scrivere una funzione logica per ogni
uscita. Per l’uscita U0 vale: U0 = C0 * C1 * C 2
L’ encoder
Il codificatore o encoder fa la funzione inversa del decodificatore. Il codificatore ha 2n
ingressi ed n uscite. Quando un ingresso è attivo alle uscite è presente il numero binario
che identifica l’ingresso. Questi circuiti dispongono anche di un’uscita GS (group signal)
che segnala quando almeno un ingresso è attivo. Questo segnale è importante perché ci
permette di distinguere lo stato di almeno un ingresso attivo dallo stato di nessun ingresso
attivo in cui il valore che assumono le uscite non ha significato.
Supponendo di avere un codificatore con 8 ingressi e 3 uscite la tavola della verità sarà:
11
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
I0
I1
I2
I3
I4
I5
I6
I7
U2
U1
U0 GS
0
0
0
0
0
0
0
0
x
x
x
1
1
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
1
0
1
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
0
Si suppone che gli ingressi siano attivi a livello logico alto.
Comparatori
Scopo di un circuito comparatore é il confronto tra due numeri binari. Il confronto può
essere effettuato per verificare l'uguaglianza oppure una relazione d'ordine del tipo
"maggiore", "minore", ecc.
Comparatori di uguaglianza
Questi possono essere realizzati a partire dalla funzione elementare XNOR a due ingressi.
Dalla tavola di verità di questa funzione vediamo che, interpretando l'uscita 0 come "falso"
e l'uscita 1 come "vero", possiamo ottenere immediatamente in uscita il risultato del
confronto per rilevare l'uguaglianza tra le due variabili di ingresso.
Possiamo estendere il circuito in modo da operare il confronto tra due numeri con più bit,
utilizzando una funzione del tipo XNOR per ogni coppia di bit corrispondenti da
confrontare, calcolando poi l'AND tra i confronti di ogni cifra. Per esempio, in figura é
illustrata la realizzazione di un circuito comparatore per rilevare l'uguaglianza tra due
ingressi codificati ciascuno su 3 bit (usando ovviamente lo stesso codice per i due
ingressi).
12
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
La funzione booleana del circuito in figura è:
u = (a0 ⊕ b0 ) * (a1 ⊕ b1 ) * (a2 ⊕ b2 )
Comparatori a > b per numeri in codice binario
Il circuito diventa più complesso se dobbiamo confrontare due numeri per stabilire se uno
è maggiore dell’altro. Il confronto deve partire dalla cifra più significativa: se le due
rappresentazioni differiscono nella cifra più significativa, allora possiamo subito concludere
se la relazione a > b é vera o falsa, senza bisogno di considerare le cifre successive. Solo
se le cifre più significative delle due rappresentazioni a confronto sono uguali, allora
dobbiamo passare all'esame delle cifre successive per arrivare a concludere il valore di
verità della relazione di confronto. La soluzione consiste nell'individuare un modulo base di
confronto tra una coppia di cifre, e nel replicare tale modulo tante volte quante sono le
cifre delle rappresentazioni binarie da confrontare.
Il circuito di confronto può essere realizzato con un modulo circuitale con 4 ingressi e due
uscite, che realizza le operazioni di confronto su una singola cifra. Indichiamo con A e B le
due variabili di ingresso al modulo corrispondenti alla cifra "corrente" da esaminare per le
due rappresentazioni binarie; indichiamo con C e D due variabili di ingresso ausiliarie che
ci riportano la codifica del risultato del confronto sulle cifre più significative. In particolare,
stabiliamo di indicare con C=1 la condizione "i confronti precedenti non hanno portato
nessun risultato definitivo", e con C=0 la condizione "l'esito del confronto é già noto a
seguito del confronto delle cifre precedenti". Nel caso C=0, interpretiamo poi D=0 come
risposta "no, a non é maggiore di b" ed invece D=1 come risposta "si, a > b". Indichiamo
infine con E e R le due uscite che codificano l'esito del confronto. In particolare
13
anno scolastico 2009 / 2010
ELETTRONICA per Elettrotecnica ed Automazione
3° anno
indicheremo con E=1 la condizione "neanche l'esame di questa cifra ci permette di dare
una risposta definitiva", e con E=0 la condizione "la risposta é stata determinata"; in
quest'ultimo caso R=0 significa "no", mentre R=1 significa "si, a > b".
Per esempio un circuito comparatore a 3 bit può essere realizzato connettendo tre repliche
di tale modulo come illustrato in figura:
14