Altifigence Academy

11 / 63 · Concepto

Decodificadores, selección one-hot y entradas válidas

Convierta direcciones binarias en líneas de selección y defina enable, rangos e invariantes.

De una dirección a líneas de selección

Un decodificadorDecodificador Circuito que activa la línea de salida correspondiente a un código binario. Con enable, puede llevar todas las salidas a 0 cuando está deshabilitado. de NN bits convierte una dirección en una selección entre hasta 2N2^N salidas. Con enable ee, puede definirse:

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

En un decodificador 2 a 4: 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, todas las salidas valen 0; con enable=1, exactamente una vale 1.

Cambie a1a0 con enable=1 y observe que se activa solo una de d0–d3. Después ponga enable=0 y compruebe que todas se apagan.

De la dirección a líneas de selección one-hot

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

El valor predeterminado completa la función

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

La asignación inicial cubre todos los caminos de ejecución para evitar conservar la salida anterior. Escribir always_comb no convierte automáticamente una rama indefinida en un circuito correcto.

Cuando el número de salidas no es una potencia de dos

Diez dispositivos requieren cuatro bits de dirección, pero 10–15 son inválidos. Debe especificarse una política, como todas las salidas a 0 y un indicador de error a 1. Que un código no se use no autoriza cualquier salida.

Además de la correspondencia entrada-salida, verifique que nunca se activan varias selecciones a la vez y que al deshabilitar se apagan todas. Estos invariantesInvariante Condición que debe cumplirse en toda ejecución permitida. Por ejemplo, la ocupación de una FIFO de profundidad 4 siempre está entre 0 y 4. Más información son especialmente importantes para permisos de escritura de memoria y selección de buses. Al crecer el decodificador aumentan fan-out y carga de cableado de las direcciones; por eso puede convenir una decodificación jerárquica.

Inténtalo tú

Diseñe un decodificador de diez salidas. Determine el ancho de dirección, el número de códigos inválidos y la condición obligatoria con en=0.

Leer la explicación

La dirección necesita ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 bits y hay seis códigos inválidos. Con en=0, todas las selecciones deben valer 0, cualquiera que sea la dirección. Para una dirección inválida puede especificarse que todas valgan 0 y se indique un error por separado.

Tu elección se aplica a este navegador. Puedes cambiarla en el pie de página.