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.
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;
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;
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