Un codificatore o (coder) è un circuito combinatorio che trasforma un codice cioè (codifica), in un altro codice, è una mappa essenzialmente, che associa un elemento di un dato codice in un altro. In generale un codificatore, ha \( 2^n\) morsetti (linee) di ingresso ed \(n\) linee di uscita, oppure se vi piace di più, equivalentemente, \( n\) ingressi e \( log_2(n) \) uscite. Quindi ad esempio, un codificatore con \(8\) ingressi avrà \( 3\) uscite, lo indichedemo \( cod[8\div3]\). Il funzionamento di un codificatore è semplicissimo: L'uscita è una sequenza di bit tutti nulli, in cui compare un solo \( 1\) solo nella posizione relativa al valore \( NBN\) in input.


Il coder a 4 bit

L'esempio più semplice di codificatore è senz'altro quello a due bit di ingresso.

Schema a blocchi di un coder

Tavola di verità


Osservate come tra tutte le combinazioni di sequenze di \( n\) bit, si prendono solo quelle in cui compare un solo \( 1\), le altre cengono buttate via, perchè inutili, in quanto il coder semplicemente associa alla 1-sequenza il corrispettivo valore in \(NBN\).

Schemi circuitali
Di seguito riporto la realizzazione circuitale nelle due versioni "tradizionale", mediante l'impiego delle porte logiche elementari e compatta, nella versione a matrice.

Schema circuitale di un coder 4-2

Schema a matrice compatto



Il coder ad 8 bit

Il prossimo passo è vedere il caso ad \( 8\) ingressi e \(4\) uscite. Lo schema rimane lo stesso, abbiamo un solo livello formato da \( 3\) porte OR che rappresentano le uscite mappate sugli \( 8\) bit di ingresso secondo la configurazione alternata, in particolare, le variabili ad 1-alternanza \( x_1+x_3+x_5+x_7\) costituiscono gli ingressi della prima delle tre porte OR, \( z_0\) le variabili a 2-alternanza \( x_2+x_3 + x_6+x_7\) gli ingressi della porta \( z_1\) ed infine quelle a 4-alternanza \( x_4+x_5+x_6+x_7 \) per la \(z_2\). Riassumendo abbiamo le espressioni che mettono in relazione ingressi con uscite in base alla tavola di verità: $$\begin{cases} z_0 = x_1+x_3+x_5+x_7 \\ z_1 = x_2+x_3 + x_6+x_7 \\ z_2 = x_4+x_5+x_6+x_7 \end{cases} $$ Per quanto riguarda i circuiti, riporto nuovamente, sia la versione tradizionale che lo schema a matrice. Osservatecome nella versione a matrice del circuito è messa in evidenza l'alternanza delle variabili sui sui cerchietti della somma logica OR:

Schema circuitale di un coder 8-3

Schema a matrice compatto



Il coder ad 16 bit
Come ultimo esempio vediamo lo schema del coder a \(16\) bit. Per il caso generale il discorso è analogo: ogni linea di uscita riporta una somma "logica alternata". $$\begin{cases} z_0 = x_1+x_3+x_5+x_7+x_9+x_{11}+x_{13}+x_{15} \\ z_1 = x_2+x_3 + x_6+x_7+x_{10}+x_{11}+x_{14}+x_{15} \\ z_2 = x_4+x_5+x_6+x_7+x_{12}+x_{13}+x_{14}+x_{15} \\ z_3 = x_8+x_9+x_{10}+x_{11}+x_{12}+x_{13}+x_{14}+x_{15} \end{cases} $$

Schema circuitale di un coder 16-8

Schema a matrice compatto


Osservate come all'aumentare del numero di morsetti di input, aumenta la complessità delle interconnessioni nel circuito, questo porta alla definizione delle cosiddette matrici di switching, che vedremo di seguito, dove vengono implementati tutti i collegamenti interni ai circuiti, la cosiddetta "logica di interconnessione", ma ne parleremo successivamente.
$$ \diamond $$