Salta al contenuto
Note per Studenti Esercizio 31 · rete combinatoria con condizioni di indifferenza

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 ABCDABCD (AA è il bit più significativo): le sole combinazioni che si presentano sono 0000,…,10010000, \dots, 1001 (da 0 a 9); le combinazioni 1010,…,11111010, \dots, 1111 non si presentano mai. Progettare una rete combinatoria con ingressi A,B,C,DA, B, C, D e uscita F=1F = 1 se e solo se la cifra è divisibile per 3 (0 compreso).

  1. Scrivere la tabella di verità e la funzione in forma canonica (SOP), indicando le condizioni di indifferenza (don't care).
  2. Minimizzare con una mappa di Karnaugh sfruttando le condizioni di indifferenza.
  3. Realizzare la rete con soli NAND (e inverter).
  4. 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: 0,3,6,90, 3, 6, 9. Le righe 10,…,1510, \dots, 15 sono condizioni di indifferenza (XX): l'uscita può valere 0 o 1, si sceglie il valore che semplifica di più.

cifra AA BB CC DD FF
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 XX

F(A,B,C,D)=∑m(0,3,6,9)+d(10,11,12,13,14,15).F(A,B,C,D) = \sum m(0, 3, 6, 9) + d(10, 11, 12, 13, 14, 15).

Senza usare le condizioni di indifferenza la forma canonica avrebbe 4 mintermini da 4 variabili: A‾ B‾ C‾ D‾+A‾ B‾CD+A‾BCD‾+AB‾ C‾D\overline{A}\,\overline{B}\,\overline{C}\,\overline{D} + \overline{A}\,\overline{B}CD + \overline{A}BC\overline{D} + A\overline{B}\,\overline{C}D.

2. Mappa di Karnaugh

Righe ABAB e colonne CDCD in codice Gray (00, 01, 11, 10); le celle adiacenti, anche ai bordi, differiscono per una sola variabile.

AB\CDAB \backslash CD 00 01 11 10
00 1 (m0m_0) 0 (m1m_1) 1 (m3m_3) 0 (m2m_2)
01 0 (m4m_4) 0 (m5m_5) 0 (m7m_7) 1 (m6m_6)
11 X (m12m_{12}) X (m13m_{13}) X (m15m_{15}) X (m14m_{14})
10 0 (m8m_8) 1 (m9m_9) X (m11m_{11}) X (m10m_{10})

Si raggruppano gli 1 usando le XX solo se servono a ingrandire i gruppi (e non è obbligatorio coprire le XX):

  • m9m_9 con m11m_{11}, m13m_{13}, m15m_{15}: gruppo da 4 (righe 10 e 11, colonne 01 e 11): restano A=1A = 1 e D=1D = 1 → ADAD;
  • m3m_3 con m11m_{11}: gruppo da 2 nella colonna 11, righe 00 e 10: restano B=0B = 0, C=1C = 1, D=1D = 1 → B‾CD\overline{B}CD (AA cambia e sparisce);
  • m6m_6 con m14m_{14}: gruppo da 2 nella colonna 10, righe 01 e 11: restano B=1B = 1, C=1C = 1, D=0D = 0 → BCD‾BC\overline{D};
  • m0m_0: nessuna cella adiacente a 1 o X (i vicini m1m_1, m2m_2, m4m_4, m8m_8 valgono 0): resta un mintermine da solo, A‾ B‾ C‾ D‾\overline{A}\,\overline{B}\,\overline{C}\,\overline{D}.

F=A‾ B‾ C‾ D‾+B‾CD+BCD‾+ADF = \overline{A}\,\overline{B}\,\overline{C}\,\overline{D} + \overline{B}CD + BC\overline{D} + AD

I 4 gruppi sono implicanti primi essenziali: ciascuno contiene un 1 che nessun altro copre. Le XX usate come 1 sono m11m_{11}, m13m_{13}, m14m_{14}, m15m_{15}; le non usate (m10m_{10}, m12m_{12}) 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 A‾,B‾,C‾,D‾\overline{A}, \overline{B}, \overline{C}, \overline{D}), si calcola ogni prodotto con un NAND e si combinano le uscite con un NAND:

F=  A‾ B‾ C‾ D‾‾ ⋅ B‾CD‾ ⋅ BCD‾‾ ⋅ AD‾  ‾F = \overline{\;\overline{\overline{A}\,\overline{B}\,\overline{C}\,\overline{D}}\ \cdot\ \overline{\overline{B}CD}\ \cdot\ \overline{BC\overline{D}}\ \cdot\ \overline{AD}\;}

  • primo livello: NAND a 4 ingressi (A‾,B‾,C‾,D‾\overline{A}, \overline{B}, \overline{C}, \overline{D}), NAND a 3 (B‾,C,D\overline{B}, C, D), NAND a 3 (B,C,D‾B, C, \overline{D}), NAND a 2 (A,DA, D);
  • 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

python
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 vietate

La 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 ADAD, B‾CD\overline{B}CD, BCD‾BC\overline{D}) o come 1 obbligatori (e fare gruppi che non servono).
  • Scrivere il gruppo da 2 della colonna 11 come A‾ B‾CD\overline{A}\,\overline{B}CD: l'adiacenza con m11m_{11} (A=1A = 1) elimina AA.
  • Dimenticare che m0m_0 non ha vicini utili e resta un mintermine completo.
  • Nella realizzazione NAND-NAND, dimenticare gli inverter sugli ingressi negati.
  • Verificare solo sulle cifre dove F=1F = 1: bisogna controllare tutte le 10 cifre.

Versione ripasso

Rete combinatoria per "cifra BCD divisibile per 3", con condizioni di indifferenza (1010…11111010 \ldots 1111 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 →.

F=∑m(0,3,6,9)+d(10,…,15)F = \sum m(0, 3, 6, 9) + d(10, \dots, 15)

AB\CDAB \backslash CD 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 XX solo se servono): {m9,m11,m13,m15}→AD\{m_9, m_{11}, m_{13}, m_{15}\} \to AD; {m3,m11}→B‾CD\{m_3, m_{11}\} \to \overline{B}CD; {m6,m14}→BCD‾\{m_6, m_{14}\} \to BC\overline{D}; {m0}\{m_0\} isolato →A‾ B‾ C‾ D‾\to \overline{A}\,\overline{B}\,\overline{C}\,\overline{D}.

F=A‾ B‾ C‾ D‾+B‾CD+BCD‾+ADF = \overline{A}\,\overline{B}\,\overline{C}\,\overline{D} + \overline{B}CD + BC\overline{D} + AD

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: XX trattate come 0 o come 1 obbligatori; gruppo A‾ B‾CD\overline{A}\,\overline{B}CD al posto di B‾CD\overline{B}CD; inverter dimenticati; verifica solo dove F=1F = 1.

Teoria collegata