Reti combinatorie
Sintetizzare e minimizzare una rete combinatoria significa trasformare una funzione booleana in una che abbia il minor numero di termini e di letterali. Si può arrivare al risultato mediante semplificazione algebrica, le mappe di Karnaugh o le tabelle di Quine-McKluskey. Per le semplificazioni algebriche basta applicare le regole viste nella pagina sulla numerazione binaria, riguardo agli altri due metodi approfondiremo solo quello delle mappe di Karnaugh. Il metodo delle mappe di Karnaugh è un metodo sistematico e agibile anche all'uomo senza ausilio del calcolatore (fino a un certo numero di variabili in ingresso).
Per ogni combinazione delle variabili in ingresso vi è una casella, la mappa sarà relativa a una variabile in uscita e ogni casella conterrà il valore della variabile in questione quando si ha la combinazione di ingressi rappresentata dalla casella. Le singole mappe di Karnaugh saranno agibili fino a 4 variabili, dopo di che per la quinta variabile risulta più agibile disegnare due mappe da quattro variabili di cui una per ogni possibile valore della quinta variabile.
Le mappe di Karnaugh si ottengono dalle tabelle di verità quindi innanzitutto impareremo a strutturare una tabella di verità.
Per scrivere le combinazioni di n ingressi nella tabella di verità basterà scrivere in binario i numeri da 0 a (2^n)-1 ponendo una cifra (0 o 1) su ogni colonna e rappresentando ogni numero su una riga. Cosi facendo nelle prime n colonne (quelle relative alle variabili in ingresso) troveremo tutte le possibili combinazioni in ingresso, una per ogni riga.

Ogni mappa di Karnaugh rappresenterà una sola colonna della tabella di verità e per questo ne servirà una per ogni uscita.Come avete potuto notare abbiamo raggruppato le celle adiacenti in cui trovavamo il valore 1. Le celle adiacenti differiscono di un solo bit e non dipenderanno da quel bit, di qua notiamo che mentre B mantiene il suo valore nelle due caselle, A cambia valore ma l'uscita resta 1 dunque non dipende da A ma solo da B e C e in tutti i casi in cui B e C valgono 1 allora l'uscita vale 1, da questo raggruppamento otteniamo l'espressione booleana U1=BC.Ricordiamo che la disgiunzione rende 1 ogni volta che almeno uno dei due ingressi vale uno e la congiunzione rende 1 solo se sono entrambi veri.Avremo potuto considerare l'uscita U1=BCA+BCA', in questo caso BCA e BCA' vengono detti implicanti di U1 (p è un implicante di f se f vale 1 quando p vale 1), BC è invece un implicante primo per U1 in quanto non esistono altri implicanti con meno letterali di BC che implicano BC. E' dimostrabile che per ogni funzione booleane esiste una sommatoria di implicanti primi che esprime la funzione. L'implicante primo viene detto non ridondante se almeno un suo elemento non è implicato da altri raggruppamenti, in caso contrario sarà ridondante in quanto viene già implicato da altri implicanti per la funzione e dunque è superfluo.Tal volta il valore di un uscita potrebbe essere indifferente rispetto a una combinazione degli ingressi, in tal caso lo considereremo un valore "don't care" e sulla mappa di Karnaugh scriveremo d. Il fatto che queste in alcune combinazioni un uscita possa valere sia zero che uno ci permette di usare i don't care per costruire implicanti primi più grandi (considerando che le d siano 1) o di ignorarli (considerando che le d siano 0). Ricapitolando:1. Lo scopo è esprimere la funzione booleana che rappresenta la rete logica da minimizzare in forma canonica "somme di prodotti", ovvero avremo degli or tra implicanti primi;2. Si rappresenta la funzione con una mappa di Karnaugh 3. Nella mappa si identificano gli implicanti primi essenziali più grandi possibile (contenenti cioè il maggior numero possibile di "1" ricordando che i raggruppamenti devono essere fatti tra un numero di caselle che sia una potenza di 2) 4. Si sintetizza la rete minima come somma di prodotti degli implicanti primi essenziali individuati.
Altro sull'argomento
A questo punto andando nel capitolo sui Circuiti logici potremmo utilizzare le rappresentazioni circuitali delle porte logiche per disegnare la nostra rete combinatoria e successivamente sostituendo alle porte logiche il loro equivalente fisico (ottenuto mediante l'uso dei transistor) potremo costruire la nostra rete combinatoria.
Se non siete qui per costruire una rete combinatoria ma solo per imparare a semplificare un espressione booleana da inserire nel vostro codice di Arduino allora dovrete andare sulla parte riguardante i tipi di dato in c++ e imparare a programmare con le variabili booleane. La vostra lettura finisce qui.