Salta al contenuto
Note per Studenti Decoder, encoder e priority encoder

Decoder, encoder e priority encoder

In questa pagina 6

Sono i blocchi combinatori che cambiano codifica: il decoder da binario a 1-hot, l'encoder da 1-hot a binario. Sono la base dei selettori, dei decoder di indirizzo delle memorie (Memorie ROM e RAM - SRAM, DRAM e organizzazione dei chipUna memoria è un insieme di celle (word da più bit) con circuiteria di controllo. Classificazioni: sola lettura (ROM) o lettura/scrittura; ad accesso casuale (RAM), seriale (SAM) o ibrido (Flash); volatile (SRAM, DRAM) o non volatile. Una RAM $2^k\times n$ ha $k$ bit di indirizzo (indipendenti da $n$), $n$ bit dati, read/write e chip select. SRAM: cella bistabile (latch), veloce, senza refresh; DRAM: condensatore, più densa, con refresh. Organizzazione: decoder di riga e colonna (coincident selection), uscite tri-state, array di chip (più chip per più parole, più bit per più linee dati).Memorie ROM e RAM - SRAM, DRAM e organizzazione dei chip →) e delle unità di controllo.

Codifica 1-hot

Nella codifica one-hot una configurazione a mm bit contiene uno e un solo 1, in una posizione che identifica il valore. Con n=3n=3 bit binari i valori 0,…,70,\dots,7 diventano:

binario 000 001 010 011 100 101 110 111
one-hot (8 bit) 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000

La 1-hot usa più bit, ma è comoda: ogni bit "dice" una cosa sola (anche per gli stati di una macchina, Sintesi delle reti sequenziali - riconoscitore di sequenza e codifica degli statiSintesi di una rete sequenziale sincrona: specifiche $\to$ diagramma degli stati $\to$ tabella (riduzione degli stati equivalenti) $\to$ codifica binaria degli stati $\to$ scelta del FF (D PET) $\to$ equazioni di ingresso dei FF e delle uscite $\to$ minimizzazione $\to$ circuito e verifica. Lo stato riassume la parte di storia utile; per i riconoscitori si ha uno stato per ogni prefisso riconosciuto, riusando gli stati (sovrapposizioni). Reset: stato iniziale noto. Codifica Gray (numero minimo di FF) vs 1-hot (un FF per stato, logica più semplice): per il riconoscitore 1101 Gray costa circa la metà.Sintesi delle reti sequenziali - riconoscitore di sequenza e codifica degli stati →).

Decoder

Un decoder nn-to-mm ha nn ingressi e m≤2nm\le2^n uscite D0,…,Dm−1D_0,\dots,D_{m-1}: pone a 1 l'uscita il cui indice è codificato dagli ingressi e a 0 le altre. Se a ogni combinazione degli ingressi corrisponde un'uscita valida, m=2nm=2^n. Esempio: ingresso A1A0=11A_1A_0=11 (cioè 33) ⇒\Rightarrow D3D2D1D0=1000D_3D_2D_1D_0=1000.

Le uscite di un decoder sono i 2n2^n mintermini degli ingressi: Di=miD_i=m_i (Forme canoniche - mintermini, maxtermini, SOP e POSUn mintermine è un prodotto che contiene una e una sola volta tutte le variabili (dirette o negate) e vale 1 su una sola riga della tabella di verità; un maxtermine è la somma duale e vale 0 su una sola riga; con $n$ variabili ci sono $2^n$ mintermini e $2^n$ maxtermini, e $\overline{m_i}=M_i$. Forma canonica SOP = somma dei mintermini delle righe con $F=1$; POS = prodotto dei maxtermini delle righe con $F=0$. Le forme canoniche si ricavano sempre dalla tabella ma sono ridondanti: servono come punto di partenza per la minimizzazione. SOP e POS si realizzano con circuiti a due livelli.Forme canoniche - mintermini, maxtermini, SOP e POS →). Quindi si realizza con mm porte AND a nn ingressi, ciascuna con la combinazione di ingressi diretti e negati del proprio mintermine.

  • 1-to-2: D0=A‾D_0=\overline A, D1=AD_1=A (un inverter e un filo).
  • 2-to-4: D0=A‾1A‾0D_0=\overline A_1\overline A_0, D1=A‾1A0D_1=\overline A_1A_0, D2=A1A‾0D_2=A_1\overline A_0, D3=A1A0D_3=A_1A_0: 2 inverter e 4 AND a 2 ingressi.

Approccio gerarchico e costo

Per decoder grandi, un'AND per mintermine con nn ingressi ciascuna è troppo costosa. Si collegano decoder piccoli: ad esempio un 3-to-8 si ottiene con un decoder 2-to-4, un decoder 1-to-2 e 8 AND a 2 ingressi (ogni AND combina un'uscita del 2-to-4 con una del 1-to-2). Un 6-to-64 si realizza con due decoder 3-to-8 e 64 AND a 2 ingressi.

Costo come numero di ingressi di porta (gli inverter contano 1):

circuito calcolo costo
2-to-4 2 (inv.)+4⋅22\ (\text{inv.})+4\cdot2 10
3-to-8 gerarchico 10+1+8⋅210+1+8\cdot2 27
6-to-64 gerarchico 2⋅27+64⋅22\cdot27+64\cdot2 182
6-to-64 "piatto" 6+64⋅66+64\cdot6 AND a 6 ingressi =390=390 390

(Il 6-to-64 piatto richiede 64 AND a 6 ingressi, non a 7.) La struttura gerarchica costa meno della metà.

Decoder con enable

Un enable EN abilita o meno le uscite: con EN=0EN=0 tutte le uscite valgono 0. Si realizza con mm AND di enable sulle uscite oppure, per decoder grandi (n≥4n\ge4) più economico, collegando EN agli ingressi del decoder (a livello delle AND finali).

Realizzare una funzione con un decoder

Una funzione in SOP è la somma dei suoi mintermini; il decoder genera tutti i mintermini. Quindi ogni funzione si realizza con un decoder e una porta OR a cui si collegano le uscite dei mintermini della SOP.

Esempio: sommatore completo. Ingressi X,Y,ZX,Y,Z (addendi e riporto), S=∑m(1,2,4,7)S=\sum m(1,2,4,7) e C=∑m(3,5,6,7)C=\sum m(3,5,6,7): decoder 3-to-8 e due OR a 4 ingressi, S=D1+D2+D4+D7S=D_1+D_2+D_4+D_7, C=D3+D5+D6+D7C=D_3+D_5+D_6+D_7 (Sommatori binari - half adder, full adder e ripple carryHalf adder (2 ingressi): $S=X\oplus Y$, $C=XY$. Full adder (3 ingressi, con riporto in ingresso $Z$): $S=X\oplus Y\oplus Z$, $C=XY+XZ+YZ=G+PZ$ con $P=X\oplus Y$, $G=XY$; si realizza con due half adder e una OR. Il ripple carry adder a $n$ bit concatena $n$ full adder: il riporto "ondeggia" dal LSB al MSB, quindi il ritardo cresce linearmente con $n$. È un circuito iterativo (gerarchico e regolare). Il moltiplicatore a 2 bit usa 4 AND e 2 half adder.Sommatori binari - half adder, full adder e ripple carry →).

Conviene quando la funzione ha pochi mintermini. Se ne ha più della metà, la OR diventa grande: si usa invece una NOR a cui si collegano i mintermini della funzione complementata (F=∑mi∉F‾F=\overline{\sum m_{i\notin F}}, cioè F=1F=1 solo quando nessun mintermine di F‾\overline F è attivo).

Esempio: decoder da BCD a sette segmenti

Il display a sette segmenti ha i segmenti a,b,c,d,e,f,ga,b,c,d,e,f,g (da quello in alto, in senso orario, poi quello centrale). Il circuito riceve una cifra BCD ABCDABCD e accende i segmenti giusti. Tabella (1 = acceso, caratteri usuali; 66 con il segmento aa, 99 con dd):

cifra a b c d e f g
0 1 1 1 1 1 1 0
1 0 1 1 0 0 0 0
2 1 1 0 1 1 0 1
3 1 1 1 1 0 0 1
4 0 1 1 0 0 1 1
5 1 0 1 1 0 1 1
6 1 0 1 1 1 1 1
7 1 1 1 0 0 0 0
8 1 1 1 1 1 1 1
9 1 1 1 1 0 1 1

Con le combinazioni 10101010–11111111 come don't care, le sette mappe di Karnaugh danno (variabili AA = MSB, DD = LSB):

segmento SOP minima
aa A+C+BD+B‾ D‾A+C+BD+\overline B\,\overline D
bb B‾+C‾ D‾+CD\overline B+\overline C\,\overline D+CD
cc B+C‾+DB+\overline C+D
dd A+B‾ D‾+B‾C+CD‾+BC‾DA+\overline B\,\overline D+\overline BC+C\overline D+B\overline CD
ee B‾ D‾+CD‾\overline B\,\overline D+C\overline D
ff A+BC‾+BD‾+C‾ D‾A+B\overline C+B\overline D+\overline C\,\overline D
gg A+B‾C+BC‾+BD‾A+\overline BC+B\overline C+B\overline D

Tre realizzazioni possibili: (1) porte con sette mappe indipendenti, condividendo i prodotti comuni tra le uscite per risparmiare AND; (2) decoder 4-to-16 più sette OR, collegando a ogni OR i mintermini del segmento; (3) sette multiplexer 8-to-1 (Multiplexer e funzioni logiche realizzate con decoder e multiplexerIl multiplexer (MUX) $2^n$-to-1 ha $2^n$ ingressi dati, $n$ ingressi di selezione e un'uscita che copia l'ingresso selezionato: $Y=\sum_i m_i(S),I_i$. Si realizza con decoder + AND di enable + OR (costo 22 per il 4-to-1) o direttamente (costo 18). Un MUX $2^n$-to-1 realizza qualunque funzione di $n$ variabili (ingressi dati = colonna della tabella di verità); con un MUX $2^{n-1}$-to-1 si usano le $n-1$ variabili come selezione e gli ingressi dati valgono $0$, $1$, $X$ o $\overline X$ (l'ultima variabile). I MUX a vettori selezionano gruppi di bit.Multiplexer e funzioni logiche realizzate con decoder e multiplexer →). Controllo: la cifra 22 (A=0,B=0,C=1,D=0A=0,B=0,C=1,D=0) deve spegnere solo cc e ff: c=B+C‾+D=0+0+0=0c=B+\overline C+D=0+0+0=0 ✓; f=A+BC‾+BD‾+C‾ D‾=0+0+0+0=0f=A+B\overline C+B\overline D+\overline C\,\overline D=0+0+0+0=0 ✓; a=C=1a=C=1 ✓.

Encoder

L'encoder esegue l'operazione inversa del decoder: riceve un segnale 1-hot a 2n2^n bit e produce la codifica binaria a nn bit. Per l'encoder da ottale a binario con ingressi D0,…,D7D_0,\dots,D_7 (un solo 1 alla volta): A0=D1+D3+D5+D7,A1=D2+D3+D6+D7,A2=D4+D5+D6+D7.A_0=D_1+D_3+D_5+D_7,\quad A_1=D_2+D_3+D_6+D_7,\quad A_2=D_4+D_5+D_6+D_7 . Ogni uscita è la OR degli ingressi il cui indice ha quel bit a 1. La tabella di verità ha solo 88 righe specificate; le altre 256−8256-8 combinazioni sono don't care.

Due problemi.

  1. Se due ingressi valgono 1 insieme (per esempio D3=D6=1D_3=D_6=1) l'uscita è la OR dei codici: 011+110=111011+110=111, uguale a quella del solo D7D_7: errata.
  2. Se tutti gli ingressi valgono 0 l'uscita è 000000, uguale a quella di D0=1D_0=1.

Priority encoder

Il priority encoder gestisce ingressi non 1-hot con due modifiche:

  1. una funzione di priorità: conta solo l'ingresso a 1 con la priorità più alta, gli altri sono ignorati;
  2. un'uscita V (valid): V=1V=1 se almeno un ingresso vale 1, V=0V=0 se sono tutti 0 (e allora l'uscita AA è don't care).

Esempio a 4 ingressi, priorità D3>D2>D1>D0D_3>D_2>D_1>D_0:

D3D_3 D2D_2 D1D_1 D0D_0 A1A_1 A0A_0 VV
0 0 0 0 X X 0
0 0 0 1 0 0 1
0 0 1 X 0 1 1
0 1 X X 1 0 1
1 X X X 1 1 1

Mappe di Karnaugh (con le X come don't care) danno A1=D3+D2,A0=D3+D2‾D1,V=D3+D2+D1+D0.A_1=D_3+D_2,\qquad A_0=D_3+\overline{D_2}D_1,\qquad V=D_3+D_2+D_1+D_0 . Verifica su D3D2D1D0=0110D_3D_2D_1D_0=0110: A1=1A_1=1, A0=0+1‾⋅1=0A_0=0+\overline1\cdot1=0, quindi A=10A=10 cioè 22, l'indice dell'ingresso a 1 più alto (D2D_2) ✓. Il controllo su tutte le 16 combinazioni (confronto con l'indice del primo 1 incontrato partendo da D3D_3) dà sempre lo stesso risultato.

Il priority encoder è alla base della gestione delle priorità tra interrupt (Interfacce di input-output - strobing, handshaking, interrupt e DMALe periferiche (tastiera, disco, display) hanno velocità, codici e funzionamento diversi dalla CPU: servono interfacce che sincronizzano e adattano i dati. Un unico bus collega più periferiche, ognuna con un decoder di indirizzo (memory-mapped: indirizzi comuni con la memoria; isolated: linee di controllo separate). Controllo asincrono con strobing (senza conferma) o handshaking (con conferma, più robusto). Trasmissione seriale (meno linee) o parallela; simplex, half e full duplex; USB a pacchetti con codifica NRZI. Modi di trasferimento: I/O programmato (busy-wait, spreca la CPU), interrupt (priorità: daisy chain, parallela con maschera), DMA (il controllore prende il bus con BR/BG e trasferisce senza CPU).Interfacce di input-output - strobing, handshaking, interrupt e DMA →).

Errori comuni

  • Credere che il decoder produca la forma binaria: produce una 1-hot.
  • Dimenticare che un encoder semplice è corretto solo con ingresso 1-hot.
  • Non gestire il caso "tutti gli ingressi a 0" nel priority encoder (serve VV).
  • Contare male il costo: nel 6-to-64 piatto le AND hanno 6 ingressi (non 7).

Versione ripasso

Esercizi su questo argomento

Teoria collegata