====== MUXERs library ======
The MUXERs library consists of the following 1 generic component:
* [[.:muxers#mux_N_W]]: N-input multiplexer, with W-bits for each input
The MUXERs library can be verified with this testbench: [[.:muxers#testbench|test_muxers]]
===== mux_N_W =====
-- ############################################################################
-- # Project : Leonardo CBT-Kernel #
-- # #
-- # Filename : muxers.vhd #
-- # #
-- # Component : muxN_W : N input multiplexer with W bits for each inputs.#
-- # #
-- # Model : rtl #
-- # #
-- # Designer : S. Theoharis,N. Zervas #
-- # Institute : VLSI Design Lab., University of Patras #
-- # Date : 01.05.1999 #
-- ############################################################################
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use work.useful_functions.all;
-- muxN_W Entity Description
entity muxN_W is
generic(N: INTEGER := 4; -- Number of input words
W: INTEGER := 1);-- Word Width
port(
INP: in stdv_2d(N-1 downto 0,W-1 downto 0);
SEL: in std_ulogic_vector(log2(N)-1 downto 0);
DOUT: out std_ulogic_vector(W-1 downto 0)
);
end muxN_W;
-- muxN_W Architecture Description
architecture rtl of muxN_W is
begin
muxN_W_Process: process(INP,SEL)
variable SEL_integer : integer range 0 to N-1;
begin
SEL_integer := Conv_Integer('0' & SEL,0);
for i IN W-1 downto 0 loop
-- Assign outputs
DOUT(i) <= INP(SEL_integer,i);
end loop;
end process muxN_W_Process;
end rtl;
===== Testbench =====
-- ############################################################################
-- # Project : Leonardo CBT-Kernel #
-- # #
-- # Filename : test_muxers.vhd #
-- # #
-- # Component : test_muxN_W : Test bench for an N input multiplexer with #
-- # W bits for each inputs. #
-- # #
-- # Model : rtl #
-- # #
-- # Designer : S. Theoharis,N. Zervas #
-- # Institute : VLSI Design Lab., University of Patras #
-- # Date : 01.05.1999 #
-- ############################################################################
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use work.useful_functions.all;
ENTITY test_muxers IS
END test_muxers;
ARCHITECTURE rtl OF test_muxers IS
COMPONENT mux_4_4 is
generic(N: INTEGER := 4; -- Number of input words
W: INTEGER := 1);-- Word Width
port(
INP: in stdv_2d(N-1 downto 0,W-1 downto 0);
SEL: in std_ulogic_vector(log2(N)-1 downto 0);
DOUT: out std_ulogic_vector(W-1 downto 0)
);
END COMPONENT;
FOR mux : mux_4_4 USE ENTITY work.muxN_W(rtl);
CONSTANT N : integer := 4;
CONSTANT W : integer := 4;
SIGNAL INP: stdv_2d(N-1 downto 0,W-1 downto 0);
SIGNAL SEL: std_ulogic_vector(log2(N)-1 downto 0);
SIGNAL DOUT: std_ulogic_vector(W-1 downto 0);
BEGIN
mux : mux_4_4
GENERIC MAP(N => N,
W => W)
port map(
INP => INP,
SEL => SEL,
DOUT => DOUT);
SEL <="11" AFTER 0150 ns,
"10" AFTER 0200 ns,
"01" AFTER 0250 ns,
"00" AFTER 0300 ns,
"ZZ" AFTER 0350 ns;
INP <= ("0000","1111","0011","1100");
END rtl;