Esercizio 31rete combinatoria con condizioni di indifferenza
In questa pagina 5
Testo (tipo di esercizio previsto dalla modalità di verifica del corso per la parte di reti logiche; nessun tema pubblico di questo tipo è stato trovato, quindi il testo è originale). Una cifra decimale è codificata in BCD su 4 bit ( è il bit più significativo): le sole combinazioni che si presentano sono (da 0 a 9); le combinazioni non si presentano mai. Progettare una rete combinatoria con ingressi e uscita se e solo se la cifra è divisibile per 3 (0 compreso).
- Scrivere la tabella di verità e la funzione in forma canonica (SOP), indicando le condizioni di indifferenza (don't care).
- Minimizzare con una mappa di Karnaugh sfruttando le condizioni di indifferenza.
- Realizzare la rete con soli NAND (e inverter).
- Verificare la rete su tutte le 10 cifre.
Teoria: Reti combinatorie e mappe di KarnaughRete combinatoria (uscite funzione dei soli ingressi attuali); mintermini e maxtermini, forme canoniche SOP e POS; mappe di Karnaugh a 3 e 4 variabili con esempi svolti; condizioni di indifferenza; costo e ritardo di una rete a due livelli.Reti combinatorie e mappe di Karnaugh →, Algebra di Boole e porte logicheVariabili booleane, operatori AND, OR, NOT e derivati (NAND, NOR, XOR, XNOR) con tabelle di verità; assiomi e teoremi dell'algebra di Boole, De Morgan; porte logiche e completezza di NAND e NOR; semplificazione algebrica con esempio.Algebra di Boole e porte logiche →.
1. Tabella di verità
Divisibili per 3 tra 0 e 9: . Le righe sono condizioni di indifferenza (): l'uscita può valere 0 o 1, si sceglie il valore che semplifica di più.
| cifra | |||||
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 |
| 1 | 0 | 0 | 0 | 1 | 0 |
| 2 | 0 | 0 | 1 | 0 | 0 |
| 3 | 0 | 0 | 1 | 1 | 1 |
| 4 | 0 | 1 | 0 | 0 | 0 |
| 5 | 0 | 1 | 0 | 1 | 0 |
| 6 | 0 | 1 | 1 | 0 | 1 |
| 7 | 0 | 1 | 1 | 1 | 0 |
| 8 | 1 | 0 | 0 | 0 | 0 |
| 9 | 1 | 0 | 0 | 1 | 1 |
| 10-15 (1010 ... 1111) | 1 | 0 o 1 | 0 o 1 | 0 o 1 |
Senza usare le condizioni di indifferenza la forma canonica avrebbe 4 mintermini da 4 variabili: .
2. Mappa di Karnaugh
Righe e colonne in codice Gray (00, 01, 11, 10); le celle adiacenti, anche ai bordi, differiscono per una sola variabile.
| 00 | 01 | 11 | 10 | |
|---|---|---|---|---|
| 00 | 1 () | 0 () | 1 () | 0 () |
| 01 | 0 () | 0 () | 0 () | 1 () |
| 11 | X () | X () | X () | X () |
| 10 | 0 () | 1 () | X () | X () |
Si raggruppano gli 1 usando le solo se servono a ingrandire i gruppi (e non è obbligatorio coprire le ):
- con , , : gruppo da 4 (righe 10 e 11, colonne 01 e 11): restano e → ;
- con : gruppo da 2 nella colonna 11, righe 00 e 10: restano , , → ( cambia e sparisce);
- con : gruppo da 2 nella colonna 10, righe 01 e 11: restano , , → ;
- : nessuna cella adiacente a 1 o X (i vicini , , , valgono 0): resta un mintermine da solo, .
I 4 gruppi sono implicanti primi essenziali: ciascuno contiene un 1 che nessun altro copre. Le usate come 1 sono , , , ; le non usate (, ) restano 0 nella rete: fuori dal campo del BCD, il valore non importa.
3. Realizzazione con soli NAND
Una somma di prodotti si realizza con NAND-NAND (legge di De Morgan): si invertono gli ingressi dove serve (4 inverter per ), si calcola ogni prodotto con un NAND e si combinano le uscite con un NAND:
- primo livello: NAND a 4 ingressi (), NAND a 3 (), NAND a 3 (), NAND a 2 ();
- secondo livello: un NAND a 4 ingressi con le quattro uscite.
Costo: 4 inverter + 5 NAND. Il doppio livello di inversione si cancella: l'uscita è la somma dei prodotti.
4. Verifica
def nand(*x):
return 0 if all(x) else 1
def F(a, b, c, d):
na, nb, nc, nd = 1 - a, 1 - b, 1 - c, 1 - d
t1 = nand(na, nb, nc, nd) # NAND(A' B' C' D')
t2 = nand(nb, c, d) # NAND(B' C D)
t3 = nand(b, c, nd) # NAND(B C D')
t4 = nand(a, d) # NAND(A D)
return nand(t1, t2, t3, t4) # secondo livello
for n in range(10): # cifre BCD valide
a, b, c, d = (n >> 3) & 1, (n >> 2) & 1, (n >> 1) & 1, n & 1
assert F(a, b, c, d) == int(n % 3 == 0), n
print("0..9 verificate")
print([(n, F((n >> 3) & 1, (n >> 2) & 1, (n >> 1) & 1, n & 1)) for n in range(10, 16)])
# [(10, 0), (11, 1), (12, 0), (13, 1), (14, 1), (15, 1)]: valori scelti dalla minimizzazione sulle combinazioni vietateLa rete dà l'uscita giusta per le 10 cifre; per le combinazioni 10-15 (che non si presentano) vale 0, 1, 0, 1, 1, 1, cioè quanto serve per avere gruppi più grandi.
Errori comuni
- Trattare le condizioni di indifferenza come 0 (e perdere i gruppi , , ) o come 1 obbligatori (e fare gruppi che non servono).
- Scrivere il gruppo da 2 della colonna 11 come : l'adiacenza con () elimina .
- Dimenticare che non ha vicini utili e resta un mintermine completo.
- Nella realizzazione NAND-NAND, dimenticare gli inverter sugli ingressi negati.
- Verificare solo sulle cifre dove : bisogna controllare tutte le 10 cifre.
Versione ripasso
Rete combinatoria per "cifra BCD divisibile per 3", con condizioni di indifferenza ( non si presentano). Teoria: Reti combinatorie e mappe di KarnaughRete combinatoria (uscite funzione dei soli ingressi attuali); mintermini e maxtermini, forme canoniche SOP e POS; mappe di Karnaugh a 3 e 4 variabili con esempi svolti; condizioni di indifferenza; costo e ritardo di una rete a due livelli.Reti combinatorie e mappe di Karnaugh →.
| 00 | 01 | 11 | 10 | |
|---|---|---|---|---|
| 00 | 1 | 0 | 1 | 0 |
| 01 | 0 | 0 | 0 | 1 |
| 11 | X | X | X | X |
| 10 | 0 | 1 | X | X |
Gruppi (le solo se servono): ; ; ; isolato .
NAND-NAND: 4 inverter + 4 NAND al primo livello (a 4, 3, 3, 2 ingressi) + 1 NAND a 4 ingressi. Verificata su tutte le cifre 0-9.
Errori comuni: trattate come 0 o come 1 obbligatori; gruppo al posto di ; inverter dimenticati; verifica solo dove .