222
CAPITOLO 12
CIRCUITI LOGICI
Con questo capitolo iniziamo lo studio dell’elettronica digitale, partendo dalle porte logiche che
costituiscono i circuiti digitali più elementari. In altre parole, un circuito digitale, per quanto
complesso, può essere ricondotto ad un insieme di porte logiche elementari variamente connesse tra
loro. L’insieme di tali porte logiche e delle loro connessioni prende il nome di circuito logico.
Per affrontare l’analisi delle porte logiche ed intraprendere lo studio dell’elettronica digitale,
sarà bene introdurre preliminarmente alcune nozioni di aritmetica binaria, fondamentale dato che
essa costituisce il “linguaggio” dell’elettronica digitale, e dell’algebra di Boole, che invece
rappresenta la “sintassi” di tale linguaggio, dato che essa fornisce uno strumento matematico per
l’analisi del funzionamento dei circuiti digitali.
12.1 Sistema binario
Un sistema di numerazione si basa su un numero finito di simboli. Tale numero prende il nome
di base. Per questo motivo il sistema decimale, che utilizza dieci cifre diverse (da 0 a 9), è noto
come sistema di numerazione in base 10. Il sistema di numerazione decimale, inventato dagli arabi,
si è diffuso ampiamente perché il numero delle cifre coincide con il numero delle dita delle mani.
Esso è un sistema di numerazione posizionale, vale a dire che il valore assunto da una cifra in un
numero dipende dalla sua posizione nel numero stesso. Ad esempio, la cifra 1 nel numero 172 ha un
significato diverso nel numero 591. La cifra più a sinistra di un numero prende il nome di cifra più
significativa, mentre quella più a destra è la cifra meno significativa.
Un numero espresso in base 10 si può scomporre in forma polinomiale, cioè come somma di
prodotti tra le cifre e una potenza di 10. Ad esempio il numero 591 è costituito da 5 centinaia, 9
decine ed 1 unità perciò si può così scomporre:
591 = 5 · 102 + 9 · 101 + 1 · 100 .
È possibile scomporre anche i numeri non interi; in questo caso, la parte decimale dopo il punto
è costituita da cifre che nella scomposizione vengono moltiplicate per le potenze di 10 ad esponente
223
negativo. Ad esempio il numero 591,37 presenta 3 decimi e 7 centesimi perciò si può così
scomporre:
591,37 = 5 · 102 + 9 · 101 + 1 · 100 + 3 · 10–1 + 7 · 10–2 .
Anche il sistema di numerazione binario è di tipo posizionale, ma esso si basa su due sole cifre:
0 e 1. La cifra del sistema binario prende il nome di bit (binary digit). Il bit più a sinistra di un
numero binario rappresenta il bit più significativo e si indica con MSB (most significant bit) mentre
il bit più a destra rappresenta il bit meno significativo e si indica con LSB (least significant bit).
Anche i numeri binari sono scomponibili come somma di prodotti tra i bit e le potenze di due. Ad
esempio il numero binario 1101 si scompone così:
(1101)2 = 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 = 8 + 4 + 1 = 13 .
La scomposizione polinomiale rappresenta un metodo per la conversione di un numero dal
sistema binario al decimale. Si noti che il numero binario assegnato è stato racchiuso in parentesi
tonda ed è stato messo un due dopo la parentesi chiusa per specificare che quel numero è espresso
in base due (si legge: UNO UNO ZERO UNO). Il MSB dell’esempio precedente ha peso 23 = 8,
mentre LSB ha peso 20 = 1.
Nella rappresentazione dei numeri binari gli zeri non significativi posti a sinistra del numero
possono essere soppressi. Ad esempio il numero (6)10 si esprime, in base 2, semplicemente con
(110)2.
Si fa notare che i numeri potenza di due (1, 2, 4, 8, 16, ecc.) si rappresentano in binario con 1,
seguito da tanti zeri quanto è l’esponente da dare al due per ottenere tale potenza. Ad esempio:
(16 = 24)10 = (10000)2 ,
oppure
(4 = 22)10 = (100)2 .
Anche i numeri binari possono essere non interi. Ad esempio il numero 110,101 si può
scomporre come:
(110,101)2 = 1 · 22 + 1 · 21 + 0 · 20 + 1 · 2–1 + 0 · 2–2 + 1 · 2–3 = 4 + 2 + 0,5 + 0,125 = 6,625 .
Quanto finora asserito per i numeri decimali e binari vale anche per numeri espressi in una base
diversa. Nel caso di una base maggiore di 9, le cifre mancanti vengono rimpiazzate da lettere. Ad
esempio, nel caso della base 16 (utilizzata anch’essa sovente in elettronica digitale), le cifre sono: 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
In Tab. 12.1 si mostrano le configurazioni dei primi 32 numeri binari.
224
Tab. 12.1 – Primi 32 numeri binari
Perché siamo così interessati alla rappresentazione dei numeri in forma binaria? Il motivo è che
qualunque tipo d’informazione espressa da un segnale elettrico numerico può assumere due soli
livelli di tensione: alto (indicato con “1”) e basso (indicato con “0”). Queste informazioni, sia
numeriche che alfanumeriche, vengono normalmente trattate ed elaborate da calcolatori elettronici
e conservate nella loro memoria centrale. Quest’ultima è costituita da circuiti integrati che
memorizzano i dati in forma binaria.
La memoria centrale della maggior parte degli elaboratori elettronici è organizzata in byte. Un
byte è un insieme di 8 bit. Un byte, pertanto, può assumere 28 = 256 configurazioni possibili.
I numeri interi in semplice precisione vengono rappresentati nella memoria del calcolatore in
una voce (o word). Una voce è costituita da 16 bit e quindi da due byte. Con 16 bit si possono
rappresentare 216 = 65536 numeri tra positivi e negativi.
n B4 B3 B2 B1 B0
0 0 0 0 0 0 1 0 0 0 0 1 2 0 0 0 1 0 3 0 0 0 1 1 4 0 0 1 0 0 5 0 0 1 0 1 6 0 0 1 1 0 7 0 0 1 1 1 8 0 1 0 0 0 9 0 1 0 0 1
10 0 1 0 1 0 11 0 1 0 1 1 12 0 1 1 0 0 13 0 1 1 0 1 14 0 1 1 1 0 15 0 1 1 1 1 16 1 0 0 0 0 17 1 0 0 0 1 18 1 0 0 1 0 19 1 0 0 1 1 20 1 0 1 0 0 21 1 0 1 0 1 22 1 0 1 1 0 23 1 0 1 1 1 24 1 1 0 0 0 25 1 1 0 0 1 26 1 1 0 1 0 27 1 1 0 1 1 28 1 1 1 0 0 29 1 1 1 0 1 30 1 1 1 1 0 31 1 1 1 1 1
225
Per i numeri positivi si pone il bit più significativo uguale a 0 e per quelli negativi uguale a 1;
con i restanti 15 bit si possono rappresentare tutti gli interi compresi tra 0 e 215 – 1 = 32767 (e tutti i
negativi compresi tra –32768 e –1, con una tecnica di rappresentazione, detta complemento a 2)
Se, invece, si vuole utilizzare un numero intero maggiore di 32767 (o minore di –32768), una
sola word non basta: se ne utilizzano due e si dice che si sta lavorando in doppia precisione; i bit
disponibili sono 32 con i quali si rappresentano i numeri positivi da 0 a 231 – 1 = 2.147.483.647 (ed
i numeri negativi da –231 a –1).
I numeri non interi vengono invece memorizzati in forma esponenziale: vengono cioè
memorizzati in due voci da 16 bit separatamente la mantissa e la caratteristica (l’esponente).
Tipicamente, un bit serve per il segno, i restanti 15 bit della prima voce più gli ultimi 8 della
seconda voce sono i bit destinati alla mantissa; infine i primi 7 bit della seconda voce memorizzano
la caratteristica.
12.2 Codici
Nei calcolatori possono essere rappresentati non solo caratteri numerici ma anche alfanumerici,
costituiti cioè da caratteri alfabetici maiuscoli e minuscoli, numeri, punteggiatura e caratteri speciali
di controllo (return, escape, ecc.). Ovviamente, in senso lato, questa situazione si presenta non solo
nei computer, ma ogniqualvolta si voglia leggere, elaborare o trasmettere un’informazione
attraverso dei sistemi digitali. Dato che questi ultimi lavorano soltanto con due livelli di tensione, ai
quali – come già detto – possono essere associate le due cifre del sistema binario, deve essere
possibile codificare le informazioni in modo che queste possano essere interpretate correttamente
dai circuiti. In altre parole, sorge la necessità di adottare dei codici che permettano di associare ad
un testo alfanumerico o a delle istruzioni o comandi particolari da svolgere, una precisa sequenza di
bit 0 e 1.
II codice senza dubbio molto diffuso nei personal e home computer è il codice ASCII (American
Standard Code for Information Interchange) che si basa su 7 bit, quindi permette la codifica di
27 = 128 caratteri. La codifica di ciascun carattere ASCII in realtà non avviene in 7 bit ma in 8, e
l’ultimo bit – detto di parità – viene adoperato per il controllo degli errori di trasmissione(♣).
I codici da 0 a 32 e il codice 127 sono caratteri speciali di comando alle periferiche del tipo
stampanti e telescriventi. Infatti, il codice ASCII fu elaborato per le trasmissioni dati con
telescriventi. In Tab. 12.2 si riportano i codici decimali, esadecimali ed i significati di tali linee.
(♣) Il bit di parità viene posizionato a 0 oppure a 1 in modo che il numero di 1 che costituisce il byte sia pari (parità pari). Quando si esegue la trasmissione di un carattere in codice ASCII da un dispositivo ad un altro, il dispositivo ricevitore possiede un circuito per il controllo di parità. Se una non corretta trasmissione provoca la commutazione di un solo bit: ciò cambia la parità del byte e il controllore di parità rileva, così, l'errore di trasmissione.
226
Spesso i computer utilizzano il codice ASCII esteso a 8 bit per il quale sono disponibili ben 256
configurazioni. Le prime 128 hanno lo stesso significato del codice ASCII originale, mentre le altre
sono utilizzate per la definizione di caratteri semigrafici e di controllo per la stampante. In Tab. 12.3
si riporta il codice ASCII esteso utilizzato dall’IBM sui suoi PC.
Tab. 12.2 – Significato dei caratteri di controllo del codice ASCII
DEC ESA CODICE SIGNIFICATO
0 0 NUL Nullo 1 1 SOM Start of Heading = Inizio testata 2 2 STX Start of text = Inizio testo 3 3 ETX End of text = Fine del testo 4 4 EOI End of trasmission = Fine trasmissione
5 5 ENQ Enquiry = Richiesta 6 6 ACK Acknowledge = Conferma
7 7 BEL Bell = Segnale acustico
8 8 BS Backspace = Ritorna indietro di 1 9 9 HT Horizontal tab = Tabulazione orizzontale
10 A LF Line feed = Avanzamento di una linea 11 B VT Vertical tab = Tabulazione verticale
12 C FF Form feed = Avanzamento carta 13 D CR Carriage return = Rit. car. con accettaz.
14 E SO Shift out = Shift disinserito
15 F SI Shift in = Shift inserito 16 10 OLE Data link escape = Uscita trasmissione
17 11 DC1 Direct control 1 = Controllo periferica 18 12 DC2 Direct control 2 = Controllo periferica 2
19 13 DC3 Direct control 3 = Controllo periferica 3
20 14 DC4 Direct control 4 = Controllo periferica 4 21 15 NAK Negative acknowledge = Conferma
22 16 SYN Synchronous idle = Attesa sincronizzata 23 17 ETB End trasmission block = Fine trasm.
24 18 CAN Cancel = Annulla 25 19 EM End of medium = Fine supporto
26 1A SUB Substitute= Sostituzione
27 1B ESC Escape = Uscita dal codice 28 1C FS Form separator = Separazione file
29 1D GS Group separator = Separatore di gruppo 30 1E RS Record separator = Separazione record
31 1F US Unit separator = Separazione unità
32 20 SP Space = Spazio 127 7F DEL Delete = Cancellazione del carattere
Vi sono altri codici, per lo più numerici, formulati per soddisfare esigenze particolari.
Il codice Gray (o codice riflesso) gode delle proprietà che passando da una configurazione alla
successiva cambia il valore di un solo bit. Con due bit si ha:
DEC GRAY 0 00 1 01 2 11 3 10
228
Per codificare in Gray con tre bit si fanno precedere da 0 le 4 configurazioni viste sopra mentre le
ultime 4 configurazioni, ottenute per “riflessione” attorno ad un immaginario asse di simmetria
posto tra la quarta e la quinta configurazione, si fanno precedere da 1.
Un altro codice spesso utilizzato per codificare le 10 cifre decimali da 0 a 9 è il codice BCD
(Binary Coded Decimal). La codifica di un numero decimale in BCD avviene componendolo nelle
sue cifre costituenti e codificando ciascuna cifra in binario naturale. Ad esempio, il numero 1209
viene così codificato
0001 0010 0000 1001
1 2 0 9
Il codice BCD richiede pertanto 4 bit per ogni cifra decimale codificata.
12.3 Algebra di Boole. Porte logiche
L’algebra di Boole (1815-1864) o algebra binaria, storicamente introdotta nello studio della
logica, cioè della scienza che studia le regole del ragionamento, fu ripresa e utilizzata dagli
scienziati intorno al 1940, per la costruzione dei calcolatori elettronici e per i sistemi di trasmissione
dati. Essa si fonda sul fatto che le variabili logiche possono assumere solo due stati che, come si è
detto, si indicano con 0 e 1 oppure con L o H, ove L indica il livello logico basso (L = Low) ed H
quello alto (H = High).
In matematica una funzione è rappresentata sia dalla sua espressione algebrica sia da una tabella
che elenca i valori della variabile indipendente e dei corrispondenti valori della funzione. Ad
esempio l’equazione di una retta può essere rappresentata sia dall’equazione y = mx + q, sia
mediante una tabella nella quale ad ogni valore di x corrisponde un determinato valore di y.
Nell’algebra booleana la tabella che rappresenta la funzione logica è detta tabella della verità.
In Fig. 12.1 è indicato un esempio di tabella della verità nel caso di un sistema digitale a due entrate
e tre uscite.
DEC GRAY 0 000 1 001 2 011 3 010 4 110 5 111 6 101 7 100
229
a) b)
Fig. 12.1 – a) Tabella della verità e b) schema a blocchi di un sistema digitale
combinatorio a due entrate e tre uscite
In essa E1 ed E2 rappresentano le variabili di entrata e nelle prime due colonne sono indicate le
possibili combinazioni binarie di tali variabili. In corrispondenza di ciascuna riga sono posti i
particolari valori assunti dalle variabili di uscita. Ad esempio la prima riga ci informa che se le
entrate sono entrambe nello stato logico 0 le corrispondenti uscite assumono i valori U1 = 0, U2 = 1,
U3 = 0, e così via per le altre combinazioni. Se il sistema digitale è ad n entrate ed m uscite, la
tabella della verità è costituita da 2n righe in corrispondenza delle quali si deve scrivere il valore
assunto dalle uscite. In generale, con n variabili d’entrata si hanno 2n combinazioni che a loro volta
possono dare origine a 22n funzioni d’uscita. Il numero delle possibili funzioni d’uscita cresce,
quindi, in modo esponenziale. Ad esempio, in Tab. 12.4 si riportano le sedici possibili combinazioni
nel caso di due variabili d’entrata A e B.
Tab. 12.4 – Funzioni digitali di una rete a due ingressi
In tutti i casi, fissato il numero delle variabili d’entrata, sono noti sia il numero delle righe che
compone la tabella della verità sia il numero delle possibili uscite; ciò indica che i problemi digitali
sono rappresentati da tabelle il cui numero di stati è finito (nel caso di funzioni analitiche il numero
di stati possibili (x, y) è invece infinito). Assegnato quindi, un problema di natura digitale è sempre
possibile compilare la tabella della verità dalla quale dedurre i circuiti logici necessari alla
realizzazione della rete richiesta.
Analizziamo adesso le operazioni logiche fondamentali dell’algebra booleana. Tali operazioni
fondamentali sono realizzate da dispositivi integrati denominati porte logiche (o GATE).
230
12.3.1 Somma logica OR
L’operazione di somma logica OR si esegue su due o più variabili e l’uscita assume lo stato 1 se
almeno una variabile d’ingresso è allo stato 1. Nel caso di due variabili A e B, detta Y l’uscita, si
scrive:
Y = A + B , (12.1)
e si legge “A OR B”. È d’uso, in ogni modo, leggere semplicemente “A più B”.
In Fig. 12.2 si mostra la tabella della verità e il simbolo elettrico relativo ad una porta OR a due
ingressi.
a) b)
Fig. 12.2 – a) Tabella della verità e b) simbolo elettrico di una porta OR a due ingressi
Il funzionamento di una porta OR nella logica ad interruttori è invece schematizzato in
Fig. 12.3. Si assegna alle variabili A e B la posizione dei due interruttori (0 = aperto, 1 = chiuso)
mentre si assume Y = 1 se la lampada è accesa; è facile verificare che il circuito di Fig. 12.3 realizza
la funzione dell’operatore OR.
Fig. 12.3 – Porta logica OR realizzata mediante due interruttori in parallelo
Infatti, la lampada sarà accesa (Y = 1) se uno o entrambi gli interruttori sono chiusi, viceversa la
lampada rimane spenta (Y = 0).
Il termine OR, in italiano «o», corrisponde ad affermare che l’uscita è vera (Y = 1) se è
verificata «o» la condizione A = 1 «o» la condizione B = 1, «o» entrambe (logica dei postulati).
Un’ultima interpretazione logica che ci permette d’interpretare il funzionamento della porta OR
è quella degli insiemi. L’operatore OR applicato a due variabili A e B corrisponde all’unione (∪) tra
231
due insiemi A e B. Si suppone che gli insiemi appartengano ad uno spazio di area unitaria, per cui 0
corrisponde all’insieme vuoto, mentre 1 corrisponde a tutto lo spazio.
12.3.2 Prodotto logico AND
L’operatore AND agisce su due o più variabili; l’uscita assume lo stato 1 solo se tutti gli
ingressi sono nello stato 1. Nel caso di due variabili A e B si pone:
Y = A · B , (12.2)
e si legge A AND B. È d’uso leggere semplicemente A per B.
In Fig. 12.4 si mostra la tabella della verità e il simbolo elettrico relativo ad una porta AND a
due ingressi.
a) b)
Fig. 12.4 – a) Tabella della verità e b) simbolo elettrico di una porta AND a due ingressi
Nell’algebra degli interruttori il funzionamento della porta AND è schematizzato dal circuito di
Fig. 12.5. Con le stesse ipotesi fatte per il circuito di Fig. 12.3 è facile verificare che la lampada è
accesa (Y = 1) solo se entrambi gli interruttori sono chiusi (A = B = 1).
Fig. 12.5 – Porta logica AND realizzata mediante due interruttori in serie
Il termine AND, in italiano «e», indica che l’uscita è vera (Y = 1), solo se A «e» B sono
contemporaneamente vere, cioè se A = B = 1.
Nella logica degli insiemi, infine, l’operatore AND corrisponde all’intersezione (∩) tra due o
più insiemi.
232
12.3.3 Negazione NOT
L’operazione di negazione si esegue su una sola variabile e si chiama anche inversione logica o
complementazione. L’uscita Y è uguale a 1 se l’ingresso è uguale a 0 e viceversa. L’equazione
algebrica corrispondente si scrive:
Y = A , (12.3)
e si legge A negato o A complementato.
In Fig. 12.6 si mostra la tabella della verità e i simboli elettrici di una porta NOT.
a) b)
Fig. 12.6 – a) Tabella della verità e b) simboli elettrici di una porta NOT
Il funzionamento di una porta NOT è sintetizzato nel circuito di Fig. 12.7. Si deduce che
lampada è accesa (Y = 1) se l’interruttore è aperto (A = 0) viceversa se l’interruttore è chiuso (A =
1) la lampada è spenta.
Fig. 12.7 – Porta logica NOT realizzata mediante un interruttore
Nella logica dei postulati, l’uscita è vera se l’ingresso è falso e viceversa. Nella logica degli
insiemi, NOT (A) equivale ad A complementato ( A ).
Le tre porte logiche AND, OR e NOT costituiscono un gruppo di operatori detto completo in
quanto con esso è possibile risolvere qualunque problema digitale (ossia è possibile ottenere
qualsiasi altra funzione).
Gli operatori logici fondamentali OR, AND, NOT possono essere collegati tra loro in modo da
realizzare funzioni digitali più complesse. Ad esempio l’espressione: Y = (A + B + C) · D, indica la
funzione digitale di una rete a quattro entrate A, B, C e D ed un’uscita Y ottenuta come prodotto
233
logico tra la variabile D e il risultato dell’OR a tre entrate tra A, B e C. L’uscita Y = 1 se D = 1 «e»
se almeno una tra le variabili A, B e C vale 1.
12.3.4 Somma logica negata NOR
L’operatore NOR è derivato da un operatore OR seguito da un NOT. L’uscita Y di una porta
NOR vale 1 solo se tutte le entrate sono nello stato logico 0, altrimenti vale 0. Nel caso di due
variabili A e B la funzione digitale si scrive:
Y = BA + . (12.4)
In Fig. 12.8 si mostra la tabella della verità e il simbolo elettrico di una porta NOR a due
ingressi. Si osservi che il cerchietto nel simbolo della porta NOR indica l’inversione logica.
a) b) c)
Fig. 12.8 – Porta NOR: a) tabella della verità; b) simbolo elettrico; c) schema equivalente
12.3.5 Prodotto logico negato NAND
L’operatore NAND agisce su due o più variabili; l’uscita vale 0 se tutti gli ingressi sono nello
stato logico 1. La porta NAND è derivata da una porta AND seguita da un NOT. Nel caso di due
variabili di ingresso A e B la funzione digitale dell’uscita risulta:
Y = BA ⋅ . (12.5)
In Fig. 12.9 si mostra la tabella della verità e il simbolo elettrico di una porta NAND a due
ingressi.
a) b) c)
Fig. 12.9 – Porta NAND: a) tabella della verità; b) simbolo elettrico; c) schema equivalente
234
12.3.6 OR esclusivo EXOR
L’operatore OR esclusivo indicato con EXOR, agisce su due variabili d’ingresso; l’uscita si
porta nello stato logico 1 se le entrate hanno stato logico diverso, da cui il nome di circuito di
anticoincidenza.
In Fig. 12.10 si riporta la tabella della verità e il simbolo elettrico di una porta EXOR.
a) b)
Fig. 12.10 – a) Tabella della verità e b) simbolo elettrico di una porta EXOR
L’equazione logica di un OR esclusivo assume la forma:
Y = BABABA +=⊕ , (12.6)
e si legge A OR ESCLUSIVO B.
12.3.7 Coincidenza o NOR esclusivo EXNOR
L’operatore coincidenza (o NOR esclusivo), indicato con EXNOR, è derivato dall’EXOR
mediante complementazione della variabile d’uscita. In Fig. 12.11 si mostra la tabella della verità e
il simbolo elettrico di una porta EXNOR.
a) b)
Fig. 12.11 – a) Tabella della verità e b) simbolo elettrico di una porta coincidenza
L’espressione digitale risulta:
Y = BABA ⊕=⊗ , (12.6)
e si legge A COINCIDENZA B.
235
Si osservi infine che il nome di coincidenza logica deriva dal fatto che l’uscita si porta ad 1 solo
se le entrate «coincidono» nello stato logico.
Vediamo adesso alcune proprietà ed alcuni teoremi dell’algebra di Boole, che risultano di
grande utilità quando si opera con circuiti logici. Gli assiomi e i teoremi dell’algebra booleana che
si descrivono si possono facilmente dimostrare tramite la logica degli insiemi, o ricorrendo altresì
all’uguaglianza delle tabelle della verità del primo e del secondo membro dell’espressione in esame.
– proprietà commutativa:
A + B = B + A , (12.7)
A · B = B · A ; (12.8)
– proprietà associativa:
A + (B + C) = (A + B) + C , (12.9)
A · (B · C) = (A · B) · C ; (12.10)
– proprietà distributiva:
A · (B + C) = AB + AC , (12.11)
A + (B · C) = (A + B) · (A + C) . (12.12)
Si osservi che la proprietà distributiva rispetto alla somma logica non ha un corrispettivo
nell’algebra ordinaria.
– assioma dell’annullamento:
A + 1 = 1 , (12.13)
A · 0 = 0 ; (12.14)
– assioma del complemento:
A + A = 1 , (12.15)
A · A = 0 ; (12.16)
– assioma dell’idempotenza:
A + A = A , (12.17)
A · A = A ; (12.18)
– assioma della negazione:
BA = ⇒ BA = ; (12.19)
– assioma della doppia negazione:
AA = . (12.20)
Una proprietà fondamentale dell’algebra booleana è espressa dal seguente principio di dualità:
data una funzione Y si chiama espressione duale Y quella che si ottiene scambiando l’operatore
AND con OR, 0 con 1 e sostituendo alle variabili i loro complementi e viceversa.
236
Ad esempio se: Y = A + ( CB ⋅ ) ,
l’espressione duale vale: Y = )( CBA +⋅ .
Riportiamo, infine, alcuni importanti teoremi dell’algebra booleana, tutti facilmente dimostrabili
invocando i principî prima descritti.
– teorema dell’assorbimento:
AYABAY =⇒+= ; (12.21)
– 1° teorema di De Morgan:
BAAB += ; (12.22)
– 2° teorema di De Morgan:
BABA ⋅=+ . (12.23)
I teoremi di De Morgan sono facilmente verificabili facendo ricorso alle tabelle di verità. Per il
1° teorema, ad esempio, si ha:
e
ed essendo Y1 = Y2 l’asserto è dimostrato.
12.4 Funzioni booleane e forme canoniche
Quando si deve progettare una rete combinatoria, generalmente si parte da una descrizione a
parole del problema e da questa si deve dedurre il circuito atto ad implementare il problema
proposto. Normalmente la procedura di progettazione consiste nel dedurre, dalla descrizione del
problema, la tabella della verità che sintetizza il funzionamento della rete digitale e
successivamente, da questa, si ricava la funzione booleana e quindi il circuito richiesto.
In questo paragrafo si descrivono i metodi che consentono di determinare la struttura di una rete
combinatoria nota la tabella della verità. Nel paragrafo successivo si analizzeranno i metodi che
consentono di semplificare o minimizzare il circuito digitale.
Una funzione digitale espressa in forma algebrica è costituita da un certo numero di termini dati
dalla somma o dal prodotto di variabili.
Un termine si dice canonico se contiene tutte le variabili della funzione. Si hanno pertanto
termini canonici somma e termini canonici prodotto. Una funzione, infine, si dice canonica se è
costituita da tutti termini canonici. Ad esempio, la funzione
237
Y (A, B, C) = A B C + AB + AC
non è canonica. Il primo termine è canonico perché contiene tutte le variabili della funzione mentre
il secondo e il terzo non sono canonici. Si osservi che la funzione è qui data come somma di termini
prodotto. Anche la funzione
Y (A, B, C) = (A + B + C) · ( A + B) · (A + C)
non è canonica. Si noti che in questo caso la funzione è data come prodotto di termini somma.
Esempi di funzioni canoniche sono invece i seguenti:
Y (A, B, C) = A B C + ABC + ABC ,
Y (A, B, C) = (A + B + C) · ( A + B + C ) · (A + B + C) .
Si definisce mintermine (o termine canonico prodotto) il prodotto logico delle variabili
d’ingresso di una funzione prese in forma naturale o complementata. Con due variabili, A e B,
abbiamo i seguenti 4 mintermini:
m0 = A · B , m1 = A · B, m2 = A · B , m3 = A · B ;
con tre variabili ne abbiamo 23 = 8, con n variabili 2n.
Si definisce maxtermine (o termine canonico somma) la somma logica delle variabili d’ingresso
di una funzione prese in forma naturale o complementata. Con due variabili, A e B, abbiamo i
seguenti 4 maxtermini:
M0 = A + B , M1 = A + B , M2 = A + B, M3 = A + B ;
analogamente a prima, con n variabili si hanno 2n maxtermini.
Date le seguenti definizioni, nota la tabella della verità di una funzione booleana, quest’ultima è
esprimibile mediante due forme canoniche equivalenti:
– PRIMA FORMA CANONICA:
Una funzione booleana è espressa dalla somma dei mintermini in corrispondenza dei quali
l’uscita vale «1». La variabile d’ingresso si considera in forma naturale se essa vale 1, mentre in
forma complementata se essa vale 0. Ad esempio, data la seguente tabella della verità relativa ad
una funzione Y(A, B):
poiché essa vale 1 in corrispondenza delle prime due righe, potremo scrivere:
A B Y
0 0 1 0 1 1
1 0 0
1 1 0
238
A B
Y
A B
Y
Y (A, B) = A B + AB = m0 + m1 .
La forma canonica si presta ad un’interpretazione intuitiva. Nell’esempio precedente, la
funzione vale 1 se
1) A «e» B sono entrambe uguali a 0, cioè se A AND B = 0: ciò è possibile solo se
Y = A AND B ,
oppure se
2) A = 0 «e» B = 1, cioè se Y = A AND B = 1.
– SECONDA FORMA CANONICA:
Una funzione booleana è espressa dal prodotto dei maxtermini in corrispondenza dei quali
l’uscita vale «0». Al contrario di prima, la variabile d’ingresso si considera in forma naturale se essa
vale 0, mentre in forma complementata se essa vale 1. Data la tabella della verità dell’esempio
precedente, si ha dunque:
Y (A, B) = ( A + B ) · ( A + B) = M3 + M2 .
Si noti che si può passare da una forma canonica all’altra applicando i due teoremi di De
Morgan.
Le due forme canoniche relative all’esempio precedente possono essere rappresentate in forma
circuitale utilizzando porte AND, OR e NOT
Fig. 12.12 – Esempio di circuiti logici relativi ad una funzione booleana espressa
sotto forma di a) somma di mintermini e b) prodotto di maxtermini
12.5 Minimizzazione delle funzioni booleane. Mappe di Karnaugh
Nei precedenti paragrafi si è analizzata la procedura che consente di realizzare una rete digitale
con porte logiche nota la tabella della verità. Si è anche visto che una stessa funzione logica può
essere rappresentata da diverse espressioni booleane e quindi può essere realizzata con diversi
a) b)
239
circuiti. Una fase fondamentale della progettazione di una rete digitale consiste nel determinare, tra
le diverse soluzioni possibili, quella che a parità di prestazioni ha il minimo costo.
Se si tiene conto che il costo di un circuito è sostanzialmente legato al numero di porte logiche
utilizzate si deduce che minimizzare una funzione booleana consiste nel determinare quella
espressione logica che può essere realizzata con il minor numero di porte logiche elementari.
Le procedure di minimizzazione delle funzioni booleane si basano o sulla manipolazione
algebrica mediante l’applicazione delle proprietà, assiomi e teoremi dell’algebra di Boole o
mediante dei procedimenti grafici come il metodo della mappa di Karnaugh (o per mezzo di metodi
di tabulazione automatici, come quello di Quine-McKlusky, che esulano dagli scopi di questo
corso).
I vari metodi di minimizzazione non conducono, in generale, ad un’unica espressione, sia
perché possono essere applicati separatamente alla prima e alla seconda forma canonica e inoltre
perché per ciascuna di esse si ottengono, come vedremo in seguito, diverse soluzioni equivalenti. Il
progettista ha quindi più possibilità di scelta che gli consentono di ottimizzare la soluzione
circuitale.
La mappa di Karnaugh è uno dei metodi sistematici di minimizzazione delle funzioni logiche
più usato. Si basa sull’applicazione della proprietà distributiva e sull’assioma del complemento cioè
sulla semplificazione di espressioni del tipo:
ABX + AB X = AB(X + X ) = AB · 1 = AB . (12.24)
La precedente relazione indica che se due mintermini differiscono solo per una variabile, che in
uno compare in forma naturale (X) e nell’altro in forma complementata ( X ), questa variabile può
essere eliminata e la somma logica sostituita da un solo termine prodotto. La procedura di
minimizzazione consiste nella ricerca dei mintermini che soddisfano la (12.24), fino a giungere a
una espressione contenente termini non semplificabili denominati primi implicanti. Il metodo della
mappa di Karnaugh ben si adatta a funzioni con un massimo di quattro variabili. Il metodo si può, in
ogni caso, estendere a funzioni di cinque o sei variabili usando rispettivamente due o quattro
mappe. Per facilitare la ricerca dei primi implicanti Karnaugh propone di rappresentare la tabella
della verità in modo diverso e precisamente mediante la costruzione di una mappa nella quale i
termini canonici sono il più possibile contigui. In Fig. 12.13 sono mostrate le mappe di Karnaugh
per funzioni a 1, 2, 3, e 4 variabili. Ogni mappa è costituita da un numero di caselle pari al numero
di possibili combinazioni delle variabili d’ingresso. Per ogni variabile, la mappa è divisa con linee
orizzontali e verticali in due parti: in una la variabile è «vera» (1) e nell’altra è «falsa» (0). La
compilazione della mappa di Karnaugh avviene inserendo nella cella indirizzata dalla combinazione
riga-colonna il valore (0 o 1) assunto dalla funzione per la combinazione binaria prescelta, se data
240
sotto forma di tabella della verità. Se la funzione è data sotto forma algebrica si devono da questa
riconoscere le combinazioni per cui la funzione vale 0 o 1. Ad esempio se:
Y (A, B, C) = A B C + ABC + ABC ,
si deve usare la mappa di Karnaugh a tre variabili e scrivere 1 nella cella ABC = 101, ABC = 010 e
in ABC = 111; in tutte le altre caselle si deve scrivere 0. Se la funzione è data sotto forma algebrica
non canonica è necessario prima canonizzare la funzione e successivamente compilare la mappa di
Karnaugh. Per canonizzare la funzione basta applicare l’assioma del complemento e la proprietà
distributiva. Se ad esempio, una funzione a tre variabili A, B e C possiede il termine non canonico
AB, per canonizzarlo basta moltiplicarlo per (C + C ) (che è uguale a 1) e pertanto si hanno i due
termini canonici ABC + ABC .
Fig. 12.13 – Mappe di Karnaugh a 1, 2, 3 e 4 variabili
Si osservi che la suddivisione di ogni singola mappa e le configurazioni binarie associate ad
ogni casella sono tali che nel passare da una casella a quella immediatamente «adiacente» sulla riga
e sulla colonna cambia una sola variabile. Ad esempio, con riferimento alla Fig. 12.14, relativa ad
una mappa a quattro variabili, la casella corrispondente alla combinazione ABCD = 0001, indicata
con un asterisco, risulta adiacente alle caselle indicate con una freccia. Infatti è facile verificare che
le quattro caselle che contornano la casella ABCD = 0001 differiscono da quest’ultima per il
cambiamento di una sola variabile.
241
Fig. 12.14 – Mappe di Karnaugh di una funzione a 4 variabili in cui si evidenzia
l’adiacenza tra la casella indicata con un asterisco e le quattro che la
contornano, indicate con una freccia
In definitiva sono da considerarsi adiacenti, sia le caselle immediatamente contigue sulla riga e
sulla colonna sia quelle che si trovano sulla periferia e che hanno stessa riga ma colonna opposta,
oppure stessa colonna ma riga opposta. La mappa di Karnaugh si può quindi immaginare posta su
un’ipotetica sfera in modo da considerare contigui i lati opposti. Si osservi che le combinazioni
binarie di riga e colonna seguono il codice Gray che gode della proprietà di modificare un solo bit
nel passare da una configurazione binaria a quella immediatamente precedente o seguente.
La procedura di minimizzazione con il metodo della mappa di Karnaugh può essere effettuato se
la funzione booleana è espressa nella prima o nella seconda forma canonica. Una volta disegnata la
mappa si scrive in ogni casella il valore che la funzione assume per quelle combinazioni delle
variabili d’entrata.
Consideriamo la minimizzazione nella prima forma canonica. Per la proprietà (12.24) due
caselle adiacenti contenenti ciascuna «1» corrispondono ad un unico termine formato solo dalle
variabili comuni. Analogamente se vi sono quattro caselle adiacenti contenenti «1», che possono
trovarsi in fila o formare un quadrato, si hanno due variabili che cambiano e che sono quindi
eliminate. L’implicante primo corrispondente è costituito dalle variabili che in tutte le caselle hanno
lo stesso valore.
In generale, 2n caselle adiacenti consentono l’eliminazione di n variabili. Se una casella contiene
un « 1 » isolato, ad esso corrisponde un termine canonico non semplificabile. La minimizzazione
avviene considerando dapprima i gruppi che contengono un numero elevato di «1» adiacenti,
giacché questi sono descritti da un implicante primo con un numero minimo di variabili.
La stessa procedura è valida se la funzione è espressa nella seconda forma canonica salvo che
sostituire «1» con «0» e considerare i maxtermini invece dei mintermini. Evidentemente l’utilizzo
242
della seconda forma canonica conviene di più, quando si ha un numero minore di caselle con «0» in
quanto ciò conduce ad un numero minore di maxtermini.
Come esempio si consideri la funzione
Y = A B C + A B C + A B C + ABC ;
si costruisce la mappa di Karnaugh:
e si ricava la funzione minimizzata:
Y = A B + B C + ABC .