Multiplexor

Última modificación: 5 de marzo del 2023

Problema

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.

Descripción del Circuito

AHDL

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;

VHDL

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;

Verilog

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