Kmila
Todas las lecciones
Fácil Ejemplo ~12 min

Ejemplo: decodificador 3 a 8

Un decodificador toma un código binario pequeño y lo convierte en una salida one-hot: exactamente una salida está en alto, y su posición coincide con el código.

  sel  │  y
  000  │  00000001
  001  │  00000010
  010  │  00000100
  011  │  00001000
  100  │  00010000
  101  │  00100000
  110  │  01000000
  111  │  10000000

Los decodificadores viven dentro de todo sistema de memoria — las líneas de dirección manejan un decodificador, y la salida "fila seleccionada" habilita exactamente una fila. Cada vez que oyes "decodificador de direcciones", esto es lo que hay debajo.

El VHDL

Un decodificador es el caso de libro de texto para with/select:

with sel select
  y <=
    "00000001" when "000",
    "00000010" when "001",
    "00000100" when "010",
    "00001000" when "011",
    "00010000" when "100",
    "00100000" when "101",
    "01000000" when "110",
    "10000000" when others;

Nota el when others al final. sel es un std_logic_vector(2 downto 0) — 3 bits — así que hay 2³ = 8 combinaciones binarias, pero como std_logic tiene nueve estados, el compilador necesita la cláusula others para cubrir todo (se sintetiza igual que "111").

Qué hace el ejemplo

La configuración hace pasar sel por los ocho valores de 3 bits, 10 µs cada uno. En la pestaña de formas de onda verás los 8 bits de y convertirse en un '1' caminante — una "luz corrediza" digital.

Tu turno

Cuando corra:

  • Amplíalo a un decodificador 4 a 16. Puedes hacerlo a mano o reescribir el cuerpo como y <= std_logic_vector(shift_left(to_unsigned(1, 16), to_integer(unsigned(sel))));. Ambos se sintetizan igual — elige el que te parezca más legible.
  • Agrega una entrada enable. Cuando enable = '0', todas las salidas van a cero sin importar sel.
s1 0 s0 0 NOT NOT AND AND AND AND y0 1 y1 0 y2 0 y3 0
1 / 4
t = 0
Reiniciar Paso atrás Reproducir Paso adelante
Señales
s1 0
s0 0
y0 1
y1 0
y2 0
y3 0
sel = 00. Ambos inversores salen en 1 — por eso sus cables están calientes. Solo AND0 ve DOS entradas calientes, así que y0 es el ganador. Este es el comportamiento 'one-hot': exactamente una salida en alto a la vez, y su posición es el código de entrada en binario.
Ocurrió un error no controlado. Recargar 🗙