-----------------------------------------------------------------
-- File Name : mux_4to1.vhd
-----------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
ENTITY mux_4to1 IS
GENERIC (
BIT_WIDTH :integer
);
PORT (
clk : IN STD_LOGIC ;
reset_n : IN STD_LOGIC ;
i_in1 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in2 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in3 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in4 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_mux_sel: IN STD_LOGIC_VECTOR( 1 DOWNTO 0) ;
o_mux_out: OUT STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0)
);
END mux_4to1;
ARCHITECTURE Arch OF mux_4to1 IS
BEGIN
P_mux : PROCESS(clk)
BEGIN
IF (reset_n = '0') THEN
o_mux_out <= (OTHERS => '0');
ELSIF( rising_edge(clk) ) THEN
CASE i_mux_sel IS
WHEN "00" =>
o_mux_out <= i_in1;
WHEN "01" =>
o_mux_out <= i_in2;
WHEN "10" =>
o_mux_out <= i_in3;
WHEN OTHERS =>
o_mux_out <= i_in4;
END CASE;
END IF;
END PROCESS P_mux;
END Arch;
Test bench:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
ENTITY mux_4to1_tb IS
END mux_4to1_tb;
ARCHITECTURE tb OF mux_4to1_tb IS
CONSTANT BIT_WIDTH : INTEGER := 18;
SIGNAL clk : STD_LOGIC;
SIGNAL reset_n : STD_LOGIC;
SIGNAL i_in1 : STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0):= "00" & X"ABCD";
SIGNAL i_in2 : STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0):= "00" & X"FFFF";
SIGNAL i_in3 : STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0):= "11" & X"1000";
SIGNAL i_in4 : STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0):= "00" & X"1111";
SIGNAL i_mux_sel : STD_LOGIC_VECTOR( 1 DOWNTO 0) ;
SIGNAL o_mux_out : STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
CONSTANT PERIOD : TIME := 5 ns;
COMPONENT mux_4to1 IS
GENERIC (
BIT_WIDTH :integer
);
PORT (
clk : IN STD_LOGIC ;
reset_n : IN STD_LOGIC ;
i_in1 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in2 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in3 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in4 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_mux_sel: IN STD_LOGIC_VECTOR( 1 DOWNTO 0) ;
o_mux_out: OUT STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0)
);
END COMPONENT;
BEGIN
inst_mux_4to1 : mux_4to1
GENERIC MAP(
BIT_WIDTH => BIT_WIDTH
)
PORT MAP (
clk => clk ,
reset_n => reset_n ,
i_in1 => i_in1 ,
i_in2 => i_in2 ,
i_in3 => i_in3 ,
i_in4 => i_in4 ,
i_mux_sel=> i_mux_sel,
o_mux_out=> o_mux_out
);
clk_process :process
begin
clk <= '0';
wait for PERIOD/2;
clk <= '1';
wait for PERIOD/2;
end process;
-------------------------------------------
-- Stimulus generation
--------------------------------------------
stimulus: process
begin
-- Put initialisation code here
reset_n <= '0';
wait for PERIOD;
reset_n <= '1';
wait for PERIOD;
wait;
end process;
-------------------------------------------
-- mux_sel stimulus generation
--------------------------------------------
process
begin
-- Put initialisation code here
i_mux_sel <= "01";
wait for PERIOD * 30;
i_mux_sel <= "00";
wait for PERIOD * 10;
i_mux_sel <= "11";
wait;
end process;
END tb;
Simulation waveform :
-- File Name : mux_4to1.vhd
-----------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
ENTITY mux_4to1 IS
GENERIC (
BIT_WIDTH :integer
);
PORT (
clk : IN STD_LOGIC ;
reset_n : IN STD_LOGIC ;
i_in1 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in2 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in3 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in4 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_mux_sel: IN STD_LOGIC_VECTOR( 1 DOWNTO 0) ;
o_mux_out: OUT STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0)
);
END mux_4to1;
ARCHITECTURE Arch OF mux_4to1 IS
BEGIN
P_mux : PROCESS(clk)
BEGIN
IF (reset_n = '0') THEN
o_mux_out <= (OTHERS => '0');
ELSIF( rising_edge(clk) ) THEN
CASE i_mux_sel IS
WHEN "00" =>
o_mux_out <= i_in1;
WHEN "01" =>
o_mux_out <= i_in2;
WHEN "10" =>
o_mux_out <= i_in3;
WHEN OTHERS =>
o_mux_out <= i_in4;
END CASE;
END IF;
END PROCESS P_mux;
END Arch;
Test bench:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
ENTITY mux_4to1_tb IS
END mux_4to1_tb;
ARCHITECTURE tb OF mux_4to1_tb IS
CONSTANT BIT_WIDTH : INTEGER := 18;
SIGNAL clk : STD_LOGIC;
SIGNAL reset_n : STD_LOGIC;
SIGNAL i_in1 : STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0):= "00" & X"ABCD";
SIGNAL i_in2 : STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0):= "00" & X"FFFF";
SIGNAL i_in3 : STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0):= "11" & X"1000";
SIGNAL i_in4 : STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0):= "00" & X"1111";
SIGNAL i_mux_sel : STD_LOGIC_VECTOR( 1 DOWNTO 0) ;
SIGNAL o_mux_out : STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
CONSTANT PERIOD : TIME := 5 ns;
COMPONENT mux_4to1 IS
GENERIC (
BIT_WIDTH :integer
);
PORT (
clk : IN STD_LOGIC ;
reset_n : IN STD_LOGIC ;
i_in1 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in2 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in3 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_in4 : IN STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0);
i_mux_sel: IN STD_LOGIC_VECTOR( 1 DOWNTO 0) ;
o_mux_out: OUT STD_LOGIC_VECTOR( BIT_WIDTH-1 DOWNTO 0)
);
END COMPONENT;
BEGIN
inst_mux_4to1 : mux_4to1
GENERIC MAP(
BIT_WIDTH => BIT_WIDTH
)
PORT MAP (
clk => clk ,
reset_n => reset_n ,
i_in1 => i_in1 ,
i_in2 => i_in2 ,
i_in3 => i_in3 ,
i_in4 => i_in4 ,
i_mux_sel=> i_mux_sel,
o_mux_out=> o_mux_out
);
clk_process :process
begin
clk <= '0';
wait for PERIOD/2;
clk <= '1';
wait for PERIOD/2;
end process;
-------------------------------------------
-- Stimulus generation
--------------------------------------------
stimulus: process
begin
-- Put initialisation code here
reset_n <= '0';
wait for PERIOD;
reset_n <= '1';
wait for PERIOD;
wait;
end process;
-------------------------------------------
-- mux_sel stimulus generation
--------------------------------------------
process
begin
-- Put initialisation code here
i_mux_sel <= "01";
wait for PERIOD * 30;
i_mux_sel <= "00";
wait for PERIOD * 10;
i_mux_sel <= "11";
wait;
end process;
END tb;
Simulation waveform :
Titanium Fidget Spinner | Titsanium Arts
ReplyDeleteTitanium titanium wood stoves Fidget Spinner · titanium max Classic Plastic Spinner edc titanium · Classic Titsanium Spinner ion chrome vs titanium · Classic Titsanium Spinner tube supplier · Classic Titsanium Spinner · Classic Titsanium Spinner · Classic Titsanium Spinner.