Queremos diseñar un circuito combinacional que tenga la siguiente funcion: recibir 2^n entradas y por medio de un selector de n bits, escoger un solo bit de salida que mostrará el dato de la posición de entrada a la que se haga referencia con el selector. A este circuito se le llama multiplexor o MUX y se puede clasificar por su número de entradas, por ejemplo en el MUX de la figura 1 que tiene 8 entradas y 1 salida lo llamamos MUX de 8 a 1 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 MUX 4 a 1 en AHDL.
SUBDESIGN MUX(
a[3..0] : INPUT;
s[1..0] : INPUT;
z : OUTPUT;
)
BEGIN
IF s[]==0 THEN
z = a[0];
ELSIF s[]==1 THEN
z = a[1];
ELSIF s[]==2 THEN
z = a[2];
ELSE
z = a[3];
END IF;
END;
Implementación de un MUX 4 a 1 en VHDL.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY MUX IS
PORT(a : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
s : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
z : OUT STD_LOGIC);
END MUX;
ARCHITECTURE Behaviour OF MUX IS
BEGIN
WITH s SELECT
z <= a(0) WHEN "00",
a(1) WHEN "01",
a(2) WHEN "10",
a(3) WHEN "11";
END Behaviour;
Implementación de un MUX 4 a 1 en Verilog.
module MUX(a, s, z);
input [3:0]a;
input [1:0]s;
output z;
assign z = (s == 0) ? a[0] : ((s == 1) ? a[1] : ((s == 2) ? a[2] : a[3]));
endmodule