Demultiplexor

Última modificación: 5 de marzo del 2023

Problema

Queremos diseñar un circuito combinacional que tenga la siguiente funcion: recibir una entrada y por medio de un selector de n bits direccionar la salida a solo una de las 2^n salidas. A este circuito se le llama demultiplexor o DEMUX y se puede clasificar por su número de entradas, por ejemplo en el DEMUX de la figura 1 que tiene 1 entrada y 8 salidas lo llamamos DEMUX de 1 a 8 donde el primer dígito representa el número de entradas y el segundo el número de salidas.

Para crear este circuito podemos hacerlo mediante mapas de Karnaugh o tablas de verdad y de esa forma encontraríamos la ecuación lógica que lo describe, pero ya que sabemos que hoy en día podemos hacer uso de herramientas CAD para facilitar este proceso, procederé a mostrar directamente su implementación en los HDL's.

Descripción del Circuito

AHDL

Implementación de un DEMUX 1 a 8 en AHDL.

SUBDESIGN DEMUX(
    a       : INPUT;
    s[2..0] : INPUT;
    z[7..0] : OUTPUT;
)

BEGIN
    IF (s==0) THEN
        z[0] = a;
    ELSIF (s==1) THEN
        z[1] = a;
    ELSIF (s==2) THEN
        z[2] = a;
    ELSIF (s==3) THEN
        z[3] = a;
    ELSIF (s==4) THEN
        z[4] = a;
    ELSIF (s==5) THEN
        z[5] = a;
    ELSIF (s==6) THEN
        z[6] = a;
    ELSIF (s==7) THEN
        z[7] = a;
    END IF;
END;

VHDL

Implementación de un DEMUX 1 a 8 en VHDL.

ENTITY DEMUX IS 
    PORT(a : IN BIT;
         s : IN INTEGER RANGE 0 TO 7;
         z : OUT BIT_VECTOR(7 DOWNTO 0));
END DEMUX;

ARCHITECTURE Behaviour OF DEMUX IS
BEGIN
    PROCESS(a, s)
    BEGIN
        z <= "00000000";
        z(s) <= a;
    END PROCESS;
END Behaviour;

Verilog

Implementación de un DEMUX 1 a 8 en Verilog.

module DEMUX(a, s, z);
    input a;
    input [2:0] s;
    output reg [7:0] z;
    
    always @(a, s)
    begin
        z = 0;
        z[s] = a;
    end
endmodule