Altifigence Academy

11 / 63 · Concetto

Decoder, selezione one-hot e ingressi validi

Convertire indirizzi binari in selezioni e progettare enable, intervalli e invarianti.

Convertire un indirizzo in linee di selezione

Un decoderDecoder Attiva la linea corrispondente a un codice binario. Con enable disattivato può portare tutte le uscite a 0. a NN bit converte l'indirizzo nella selezione di una fra al massimo 2N2^N uscite. Con abilitazione ee, l'uscita did_i può essere definita così:

di=e∧(a=i)d_i=e\land(a=i)

Nel decoder 2-to-4 si ha d0=ea‾1a‾0d_0=e\overline a_1\overline a_0, d1=ea‾1a0d_1=e\overline a_1a_0, d2=ea1a‾0d_2=ea_1\overline a_0, d3=ea1a0d_3=ea_1a_0. Con enable=0 tutte le uscite sono 0; con enable=1 esattamente una vale 1.

Cambiate a1a0 con enable=1: si accende una sola delle uscite da d0 a d3. Verificate anche che enable=0 spenga tutte le selezioni.

Dall’indirizzo alle linee di selezione one-hot

d[i] = enable AND (2 × a1 + a0 = i)

I valori predefiniti completano la funzione

SystemVerilog
module decoder2 (
  input logic en,
  input logic [1:0] addr,
  output logic [3:0] select
);
  always_comb begin
    select = 4'b0000;
    if (en) begin
      case (addr)
        2'd0: select = 4'b0001;
        2'd1: select = 4'b0010;
        2'd2: select = 4'b0100;
        2'd3: select = 4'b1000;
        default: select = 4'b0000;
      endcase
    end
  end
endmodule

L'assegnazione iniziale copre tutti i percorsi d'esecuzione e impedisce di ricordare l'uscita precedente. Scrivere soltanto always_comb non rende automaticamente corretti i rami non definiti.

Quando il numero di uscite non è una potenza di due

Per dieci dispositivi serve un indirizzo a quattro bit, ma i codici 10–15 sono invalidi. Occorre specificare una politica, per esempio tutte le uscite a 0 e un flag d'errore a 1. Un codice inutilizzato non autorizza automaticamente uscite arbitrarie.

Oltre alla corrispondenza ingresso-uscita, verificate: non si attivano mai più selezioni insieme? Con disable sono tutte spente? Queste invariantiInvariante Condizione sempre vera in ogni esecuzione ammessa. Una FIFO profonda quattro contiene, per esempio, sempre da zero a quattro elementi. Approfondisci sono cruciali per write enable delle memorie e selezione dei bus. Decoder più grandi aumentano fan-out e carico dei collegamenti d'indirizzo, motivando una decodifica gerarchica.

Prova tu

Progettate un decoder con dieci uscite: definite larghezza d’indirizzo, numero di codici invalidi e condizione necessaria con en=0.

Leggi la spiegazione

Servono ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 bit e sei codici sono invalidi. Con en=0 tutte le selezioni devono valere 0, indipendentemente dall’indirizzo. Anche per indirizzi invalidi si possono prescrivere tutte le uscite a 0 e un errore separato.

La scelta vale per questo browser. Puoi modificarla in qualsiasi momento dal piè di pagina.