Impara › Argomento 8
Multiplexer, decodificatori e codificatori spiegati
8 min di lettura · Team bitGateLab
I blocchi combinatori di media complessità sono i pezzi con cui si costruisce quasi ogni sistema digitale: il multiplexer sceglie un dato fra tanti, il demultiplexer instrada un dato verso una destinazione, il decodificatore attiva una sola linea in base a un numero binario e il codificatore fa il contrario. Qui vedrai le loro equazioni, le loro tabelle di verità e due applicazioni che compaiono in tutti gli esami: realizzare una funzione logica con un multiplexer e progettare un decodificatore per display a 7 segmenti.
Il multiplexer (MUX)
Un multiplexer con 2n ingressi dati ha n ingressi di selezione e un'uscita. Il numero binario sulle linee di selezione indica quale ingresso dati passa all'uscita. Il più semplice è il MUX 2 a 1:
Y = S·I0 + S·I1
Con S = 0 l'uscita copia I0; con S = 1 copia I1. Il MUX 4 a 1 usa due linee di selezione S1 S0 e ogni ingresso dati viene moltiplicato per il mintermine di selezione che gli corrisponde:
Y = S1·S0·I0 + S1·S0·I1 + S1·S0·I2 + S1·S0·I3
| S1 | S0 | Y |
|---|---|---|
| 0 | 0 | I0 |
| 0 | 1 | I1 |
| 1 | 0 | I2 |
| 1 | 1 | I3 |
Ogni termine è una AND dell'ingresso dati con le linee di selezione (dirette o negate), e tutte confluiscono in una OR.
Realizzare una funzione con un MUX
Poiché il MUX contiene già tutti i mintermini delle sue variabili di selezione, funziona da "funzione programmabile". Con un MUX a 2n ingressi puoi realizzare qualsiasi funzione di n variabili mettendo 0 o 1 su ogni ingresso dati. Meglio ancora: con lo stesso MUX puoi realizzare una funzione di n + 1 variabili se colleghi la variabile rimanente (o la sua negazione) agli ingressi dati.
Esempio: realizza F(A, B, C) = Σm(1, 2, 6, 7) con un MUX 4 a 1, usando A e B come selezione (A = S1, B = S0).
- Raggruppa la tabella di verità a coppie con lo stesso valore di A B e guarda come F dipende da C.
- AB = 00: m0 = 0 (C = 0), m1 = 1 (C = 1). F = C, quindi I0 = C.
- AB = 01: m2 = 1 (C = 0), m3 = 0 (C = 1). F = C, quindi I1 = C.
- AB = 10: m4 = 0, m5 = 0. I2 = 0.
- AB = 11: m6 = 1, m7 = 1. I3 = 1.
Verifica con A = 0, B = 1, C = 0 (mintermine 2): la selezione 01 sceglie I1 = C = 1. Corretto, m2 appartiene alla funzione.
Il demultiplexer e il decodificatore
Il demultiplexer (DEMUX) 1 a 4 prende un dato D e lo invia a una delle quattro uscite in base a S1 S0; le altre restano a 0: Y0 = D·S1·S0, Y1 = D·S1·S0, Y2 = D·S1·S0, Y3 = D·S1·S0.
Se nel DEMUX fissi D = 1 e lo chiami "abilitazione", ottieni un decodificatore: n ingressi e 2n uscite, delle quali una sola è attiva, quella che corrisponde al numero in ingresso. Un decodificatore 3 a 8 genera gli 8 mintermini di tre variabili. Per questo qualsiasi funzione di tre variabili si realizza con un decodificatore e una porta OR che riunisca le uscite dei suoi mintermini.
Esempio: sommatore completo con un decodificatore 3 a 8. Ingressi A, B e Cin.
- Somma S = Σm(1, 2, 4, 7): OR a 4 ingressi con le uscite Y1, Y2, Y4, Y7.
- Riporto Cout = Σm(3, 5, 6, 7): OR a 4 ingressi con Y3, Y5, Y6, Y7.
Controlla un caso: A = 1, B = 1, Cin = 0 è il numero 110 = 6. Si attiva solo Y6; Y6 non è nella OR di S (S = 0) ma è in quella di Cout (Cout = 1). Infatti 1 + 1 + 0 = 10 in binario.
Il codificatore a priorità
Il codificatore esegue l'operazione inversa: a partire da 2n linee fornisce il numero binario a n bit della linea attiva. Il problema è che cosa fare se se ne attivano due contemporaneamente; la soluzione pratica è il codificatore a priorità, che fornisce il numero della linea attiva più alta. Per 4 ingressi da D3 (quello a priorità maggiore) a D0:
Y1 = D3 + D2, Y0 = D3 + D2·D1, V = D3 + D2 + D1 + D0
L'uscita V ("valido") indica che c'è almeno un ingresso attivo; senza di essa non potresti distinguere "D0 attivo" da "nessuno attivo", perché entrambi danno Y1 Y0 = 00. Prova con D2 = D1 = 1: Y1 = 1 e Y0 = 0 + 0·1 = 0, ossia 10 = 2. Vince D2, come deve essere.
Decodificatore da BCD a 7 segmenti
Un display a 7 segmenti ha un LED per ogni segmento. Il decodificatore riceve una cifra BCD (A B C D, con A come bit più significativo) e accende i segmenti che disegnano quella cifra. Per un display a catodo comune, 1 significa segmento acceso:
| Cifra | ABCD | a | b | c | d | e | f | g |
|---|---|---|---|---|---|---|---|---|
| 0 | 0000 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 1 | 0001 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 2 | 0010 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| 3 | 0011 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
| 4 | 0100 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 5 | 0101 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 6 | 0110 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
| 7 | 0111 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 8 | 1000 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 9 | 1001 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
I codici da 1010 a 1111 non sono BCD validi, quindi vengono trattati come condizioni di indifferenza (X) nella mappa di Karnaugh. Questo semplifica molto ogni segmento.
Segmento a: vale 0 solo nelle cifre 1 e 4. Nella mappa a 4 variabili, con X da 10 a 15, i gruppi più grandi sono: A (8 celle con le X), C (8 celle), B·D (mintermini 5, 7, 13, 15) e B·D (i quattro angoli: 0, 2, 8, 10).
a = A + C + B·D + B·D
Verifica il 4 (0100): A = 0, C = 0, B·D = 1·0 = 0, B·D = 0·1 = 0. Risultato 0: il segmento a resta spento, corretto.
Se il display è ad anodo comune, ogni segmento si accende con 0, quindi tutte le uscite vanno invertite.
Errori comuni
- Invertire l'ordine delle linee di selezione: se S1 e S0 vengono scambiate, l'ingresso I1 si scambia con I2 e la funzione risulta sbagliata.
- Dimenticare che molti decodificatori hanno uscite attive basse e usare una OR dove serve una NAND.
- Progettare un codificatore senza priorità e senza uscita di validità, che fornisce 00 sia per "D0 attivo" sia per "nessuno attivo".
- Usare la tabella per catodo comune con un display ad anodo comune: si accendono proprio i segmenti opposti.
- Non sfruttare le combinazioni da 1010 a 1111 come condizioni di indifferenza e ritrovarsi con equazioni grandi il doppio.
Provalo nel simulatore
Confronta la tabella di verità della funzione con la versione realizzata con il multiplexer.
- Crea una tabella di verità con tre ingressi A, B, C e segna F = 1 nelle righe 1, 2, 6 e 7.
- Inserisci nell'editor un multiplexer 4 a 1 (oppure costruiscilo con quattro AND, due NOT e una OR a quattro ingressi) e collega A e B alla selezione.
- Collega C, la negazione di C, uno 0 fisso e un 1 fisso agli ingressi dati, in quest'ordine.
- Cambia gli ingressi percorrendo le otto combinazioni e osserva che l'uscita coincide con la tabella.
- Ripeti con il segmento a del display: inserisci la sua colonna in una tabella a 4 variabili, segna le righe da 10 a 15 come X e controlla i gruppi proposti dalla mappa di Karnaugh.
Esercizi
- Realizza F(A, B, C) = Σm(0, 3, 5, 6) con un MUX 4 a 1 usando A e B come selezione.
Risposta
AB = 00: m0 = 1, m1 = 0, I0 = C. AB = 01: m2 = 0, m3 = 1, I1 = C. AB = 10: m4 = 0, m5 = 1, I2 = C. AB = 11: m6 = 1, m7 = 0, I3 = C. È la funzione di parità pari (vale 1 quando c'è un numero pari di uni): F = A ⊕ B ⊕ C.
- Quante linee di selezione servono a un MUX a 16 ingressi e quante variabili può avere al massimo la funzione che realizza?
Risposta
4 linee di selezione (24 = 16). Collegando la variabile rimanente ai dati può realizzare qualsiasi funzione fino a 5 variabili.
- Ricava l'equazione del segmento e usando le combinazioni da 10 a 15 come condizioni di indifferenza.
Risposta
e = 1 in 0, 2, 6 e 8. Gruppi: B·D (0, 2, 8, 10) e C·D (2, 6, 10, 14). Risultato: e = B·D + C·D = D·(B + C).
- Nel codificatore a priorità a 4 ingressi, quale uscita si ottiene con D3 = 0, D2 = 0, D1 = 1, D0 = 1?
Risposta
Y1 = 0 + 0 = 0, Y0 = 0 + 1·1 = 1, V = 1. Uscita 01: D1 prevale su D0.