Indice |
La riduzione, o minimizzazione, delle funzioni booleane (terza parte)
Dopo aver visto la riduzione di una funzione booleana mediante il metodo algebrico (LogicBignami (VI)) e mediante il metodo "grafico" delle mappe di Karnaugh (LogicBignami (VII)) analizziamo, adesso, un metodo, cosiddetto "tabellare", il Quine-McCluskey.
PREMESSA
Questo metodo non rientrava nel mio percorso di studi da Istituto Tecnico Industriale, per cui, prima di riassumerlo l'ho dovuto studiare io stesso. |
Questo metodo si presta ad essere tradotto in una routine da far svolgere ad un elaboratore dati, questo permette la riduzione di una funzione booleana con un numero qualsiasi (*) di variabili booleane, a differenza del metodo utilizzante le mappe di Karnaug che, come abbiamo detto nel precedente articolo LogicBignami (VII), oltre le 5 variabili booleane si complica eccessivamente.
(*) In realtà le tempistiche per la soluzione del problema di riduzione della funzione booleana con il metodo Quine-McCluskey cresce in maniera esponenziale all'aumentare del numero di variabili booleane da trattare, tant'è che, al di spora della decina di variabili booleane, convengono altri sistemi di riduzione di tipo euristico, la cui descrizione, però, esula l'impostazione data a questa serie di articoli divulgativi.
Il metodo di Quine - McCluskey si applica a funzioni booleane sottoforma di somma logica di prodotti logici e consta, essenzialmente, di due passaggi principali:
1) Eliminare più variabili booleane possibili dai singoli termini prodotto logico applicando ripetutamente la regola:
![]() |
dove
e
rappresentano due termini prodotto logico che differiscono unicamente per una variabile booleana,
, che, in un termine sarà normale e nell'altro risulterà complementata.
Ad esempio, considerando i due termini
notiamo che i due differiscono solo per la variabile booleana che, in un termine è normale e nell'altro è negata, per tanto, applicando la suddetta regola otterremo:
Da notare che il risultato a cui porta questa regola non cì è nuovo, in quanto l'avevamo già visto in LogicBignami VI con la riduzione algebrica delle funzioni booleane, con l'applicazione della proprietà distributiva, della regola della complementarietà e della regola dell'elemento neutro.
Il termine , risultato della semplificazione reiterata, quando non risulta più riducibile con nessun altro termine prodotto logico, prende il nome di implicante primo.
2) Usare una grafico che ci permette di selezionare il minimo numero di implicanti primi che, sottoposti a somma logica, forniscono la stessa funzione logica booleana di partenza con un numero ridotto di termini e variabili booleane.
La ricerca degli implicanti primi
Come abbiamo detto il metodo Quinde - McCluskey si applica a funzioni booleane somma logica di prodotti logici, e, nello specifico, in formato canonico (nel caso la funzione booleana non sia in tale formato, la si può ricavare secondo quanto visto in LogicBignami VI).
Il formato canonico ci permette di analizzare tutte le possibili copie di mintermini alle quali sia possibile applicare la regola appena citata:
![]() |
Vediamo allora come trovare tutti gli implicanti primi, ossia tutti i termini prodotto logico ridotti al minimo numero di variabili booleane possibile.
Innanzi tutto si costruisce una tabella suddividendo i mintermini, della funzione booleana da ridurre, in gruppi in base al numero di variabili booleane in stato logico .
In pratica avremo:
- il gruppo 0 conterrà il mintermine con tutte le variabili booleane in stato logico 0
- il gruppo 1 conterrà tutti i mintermini con una variabile booleana in stato logico 1
- il gruppo 2 conterrà tutti i mintermini con due variabili booleane in stato logico 1
- il gruppo 3 conterrà tutti i mintermini con tre variabili booleane in stato logico 1
- ... e così via fino al gruppo n, dove "n" è il numero delle variabili booleane presenti nei mintrmini della funzione booleana da ridurre, che conterrà il mintermine con tutte le variabili booleane in stato logico 1
Come si è detto questa tabella conterrà solo i mintermini di cui è composta la nostra funzione booleana da ridurre, quindi, non è detto che tutti i gruppi sopra indicati contengano dei termini.
Facciamo un esempio, consideriamo la seguente tabella della verità è ricabimone la funzione booleana in formato canonico:
Dalla sommatoria dei mintermini in stato logico , evidenziati in rosso, deriva la seguente funzione booleana in formato canonico:
Raggruppiamo, allora, questi mintermini, in gruppi come li abbiamo poc'anzi definiti:
Con questa tabella possiamo notare che i termini prodotto logico da comparare devono appartenere per forza a due gruppi adiacenti (0 e 1, 1 e 2, 2 e 3) perchè solo in questo frangente si può riscontrare che, tra quello appartenente ad un gruppo e quello del gruppo immediatamente successivo, sussiste la variazione di stato logico di un'unica variabile booleana.
Iniziamo, quindi a comparare il mintermine , del gruppo 0, con i mintermini
,
e
del gruppo 1.
Come possiamo notare tutte le coppie ,
e
differiscono tutte per lo stato logico di un'unica variabile booleana (rispettivamente
,
e
).
Applicando, allora, a queste coppie di mintermini, la regola , possiamo ricavare la seguente tabella, dove le variabili booleane eliminate dai mintermini sono state marcate con un
:
In questa tabella, con i termini si intendono gli implicanti derivanti dal confronto dei mintermini
e
.
A questo punto passiamo al gruppo 1 e confrontiamo ogni suo mintermine con quelli presenti nel gruppo 2 in modo da trovare tutte le possibili coppie che differiscono per lo stato logico di un'unica variabile booleana, operando come abbiamo appena visto nel confornto tra il gruppo 0 e il gruppo 1, e lo stesso facciamo confrontando ogni mintermine del gruppo 2 con quelli appartenenti al gruppo 3.
Alla fine otterremo una seconda tabella così composta:
E' utile evidenziare i mintermini che sono stati accoppiati almeno una volta (qui sono stati segnati con un asterisco) perchè quelli che non possono essere accoppiati, quindi quelli che non possono essere ridotti, saranno degli implicanti primi e finiranno, così come sono, nella formula della funzione booleana che sarà poi analizzata tramite il grafico degli implicanti primi.
Prendiamo, allora, questo secondo gruppo di tabelle di implicanti e ripetiamo i passaggi appena visti confrontando, questa volta, gli implicanti appartenenti a gruppi adiacenti, sempre al fine di trovare le coppie che differiscono per lo stato logico di un'unica variabile booleana.
Il confronto tra le diverse coppie di implicanti può risultare più semplice se si considera anche il simbolo
![]() |
Ad esempio, se confrontiamo la coppia e
risulta subito evidente che l'unica variabile che differisce di stato logico è I3
Quindi, come detto, ripetendo i passaggi di confronto e riduzione, anche sui gruppi della tabella di implicanti appena ottenuta, ricaviamo questa ulteriore tabella formata da due soli gruppi, dove con evidenziamo le coppie di implicanti
e
ridotte:
Gli implicanti possono anche essere rappresentati solo includendo all'interno delle parentesi l'elenco dei mintermini che essi riducono: [a, b, c, d].
Questo è sicuramente vantaggioso quando il numero delle semplificazioni aumenta. |
Vediamo che tre implicanti (indicati dalla freccia blu), equivalente a
,
equivalente a
e
equivalente a
non fanno coppia con nessun altro implicante appartenente ad un gruppo adiacente, per cui, non potendo più essere ridotti, sono degli implicanti primi e finiranno direttamente nella formula della funzione booleana con questo "livello" di riduzione.
Nell'ultima tabella, formata da due soli gruppi di implicanti, vediamo che non è possibile trovare delle coppie confrontabili che differiscano solamente per lo stato logico di un'unica variabile booleana, quindi ognuno di essi è un implicante primo.
In pratica quando non è più possibile trovare coppie di implicanti riducibili, il processo di confronto si arresta e tutti gli implicanti rimasti saranno considerati implicanti primi.
|
Notiamo, inoltre, la presenza, nel primo gruppo, di due coppie di implicanti uguali e, nel secondo gruppo di una coppia di implicanti uguali (indicati con le lettere a-a, b-b e c-c): nella funzione booleana ne verrà inserito uno solo di ognuna, in virtù della regola dell'idempotenza vista in LogicBignami II.
Quindi la nostra funzione booleana ridotta equivarrà alla somma logica di tutti gli implicanti primi risultanti dalle suddette tabelle:
Rispetto alla funzione booleana di partenza, questa potrebbe sembrare già ridotta, in realtà si può notare, che diversi termini contengono variabili booleane con il medesimo stato logico e quindi potrebbero essere, in parte, ulteriormente ridotti.
Infatti la sola ricerca degli implicanti primi porta ad una funzione booleana che contiene termini che hanno il minor numero di variabili booleane possibile, per singolo termine, ma non il minor numero di termini possibile.
Per ottenere la funzione booleana ridotta finale, sia come variabili booleane manipolate che come numero di termini che la compongono, si deve procedere con il secondo passo del metodo Quine-McCluskey, ossia utilizzare il grafico degli implicanti primi.
Utilizzo del grafico degli implicanti primi
Dopo aver visto come trovare tutti gli implicanti primi, mostriamo adesso il metodo per estrarre da questi il minimo numero di termini che ci permetteranno di esprimere la medesima funzione logica di partenza.
Per far ciò dobbiamo costruire un grafico dove metteremo in relazione gli implicanti primi, a cui assegneremo le righe del grafico, con i relativi mintermini della funzione booleana di partenza, a cui assegneremo le colonne.
Riprendiamo allora la nostra funzione booleana, in formato canonico, utilizzata all'inizio dell'esempio:
che corrisponde alla sommatoria dei seguenti mintermini che, come detto, rappresenteranno gli indici delle colonne del nostro grafico:
O = m0 + m1 + m2 + m5 + m6 + m7 + m8 + m9 + m10 + m14
Mentre, come abbiamo visto, gli implicanti primi, di questa funzione logica sono:
che rappresenteranno, invece, gli indici delle righe del grafico, che, a questo punto, avrà il seguente aspetto:
Ricordiamo che l'implicante, qualsiasi, è derivato dalla semplificazione della somma logica di mintermini indicati dai "pedici", così, ad esempio:
K[0,1][8,9] = K[0,1] + K[8,9] = (m0 + m1) + (m8 + m9) =
Nota: Ho tralasciato i passaggi intermedi della semplificazione in quanto già visti più volte, e quindi dovrebbero già essere assimilati.
Per questo, nel suddetto grafico, aggiungiamo una "x" per segnare, in ogni riga "puntata" da ogni implicante primo, quali mintermini ha ridotto:
ad esempio, nella riga relativa a metteremo una "x" nelle colonne dei mintermini
Il nostro grafico risulterà, allora, così compilato e completo:
A questo punto possiamo iniziare la fase di semplificazione: per prima cosa controlliamo se esistono colonne con un'unica "x", se esistono, l'implicante primo, della riga corrispondente a dove è presente quell'unica "x", diventa essenziale, perchè è l'unico che riduce quel mintermine la cui colonna contiene quell'unica "x".
Gli eventuali implicanti primi essenziali così trovati finiscono direttamente nella formula finale della nostra funzione booleana ridotta.
Nel nostro grafico vediamo che ci sono due colonne che hanno un'unica "x" (evidenziate con una cerchiatura), quella relativa al mintermine e quella relativa al mintermine m14.
In particolare:
- Alla "x" della colonna corrisponde la riga dell'implicante primo
- Alla "x" della colonna corrisponde la riga dell'implicante primo
questi diventano, quindi, implicanti primi essenziali e entrano direttamente nella formula della funzione booleana ridotta:
Selezionati gli eventuali implicanti primi essenziali, dal grafico vanno eliminati tutti gli elementi presenti sulle loro righe, come indicato di seguito:
Inoltre, in corrispondenza di ognuna di queste "x" eliminate nelle righe indirizzate dagli implicanti primi essenziali, elimineremo anche tutti gli elementi presenti nella corrispondente colonna, come evidenziato nella figura con le righe verticali verdi:
Da questo grafico, possiamo osservare che sono rimaste, non eliminate, due coppie di "x" appartenenti ai due mintermini e
:
- Le due "x" del mintermine ci indicano che quest'ultimo è ridotto dagli implicanti primi
e
- Le due "x" del mintermine m7, invece, ci indicano che quest'ultimo è ridotto dagli implicanti primi e
Di questi implicanti primi, vediamo che uno, , ha entrambe queste "x" sulla sua riga: in pratica, dei tre citati, è l'unico a ridurre contemporaneamente sia il mintermine
che il mintermine
(cancellati dalla linea magenta), e, come abbiamo visto in precedenza, a questo punto possiamo eliminare anche gli altri elementi presenti nelle colonne
e
(linee verdi).
L'implicante primo diventa l'ultimo termine nella nostra formula ridotta della funzione booleana:
Per verificare che, effettivamente, questa funzione booleana ridotta, copra tutti gli stati logici di quella in formato canonico, possiamo ricavarne la tabella della verità confrontandone gli stati logici d'uscita con quelli presenti nella tabella della verità di partenza:
Come si può vedere gli stati logici sono esattamente gli stessi.
Prima di concludere la trattazione del metodo Quine-McCluskey, analizziamo un caso particolare che non porta ad una riduzione unica.
Il grafico degli implicanti primi, ciclico
Supponiamo di avere la seguente tabella della verità:
La funzione booleana d'uscita, come somma logica di prodotti logici, è, come sappiamo, la somma dei seguenti mintermini: O = m0 + m1 + m2 + m5 + m6 + m7.
Come fatto in precedenza, cerchiamo gli implicanti primi, suddividendo questi mintermini in gruppi e cercando, tra questi, le possibili riduzioni:
Tutti i mintermini riescono ad essere ridotti negli implicanti riportati nella tabella di destra ma, nessuno di questi può essere ulteriormente ridotto, infatti nessun implicante di un gruppo "trova" nel gruppo adiacente un altro che differisca per lo stato logico di un'unica variabile booleana: per tanto tutti questi diventeranno implicanti primi.
Costruiamoci, allora, il grafico degli implicanti primi:
La prima cosa che salta all'occhio analizzando questo grafico è che, in nessuna colonna, è presente un'unica "x", ciò vuol dire che nessun implicante primo è un implicante primo essenziale.
Per ridurre il numero degli implicanti primi da inserire nella funzione booleana ridotta, a questo punto dovremmo cercare quelli che riducono, contemporaneamente più mintermini, in pratica dobbiamo vedere in quali righe sono presenti più "x".
Come si può vedere ogni riga contiene due "x": quindi non c'è un unico risultato di riduzione.
Potremmo, ad esempio, scegliere gli implicanti primi ,
e
in base alla seguente riduzione grafica:
e quindi ottenere la funzione booleana ridotta, come somma logica di tali implicanti primi:
ma potremmo, ugualmente scegliere gli implicanti primi ,
e
operando quest'altra riduzione grafica:
e otterremo, comunque, una funzione booleana validamente ridotta, come somma logica di tre termini:
Visto quest'ultimo esempio, abbiamo terminato la disamina della riduzione delle funzioni booleane anche con il metodo Quine-McCluskey.
Prima di analizzare alcuni circuiti combinatori d'uso comune e, per questo, realizzati anche come singolo componente elettronico integrato, vedremo, nel prossimo articolo, i sistemi di numerazione binaria e le principali operazioni ad esso collegate.