Demultiplexer VDHL Code 1-to-8 (when-else)
The following VHDL Code is written using when-else statement.
D input is permanently held logic HIGH, while select input S changes through 000 to 111, connecting D to output line Y0 to Y7 respectively.
VHDL Code:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Demux_1to8 is
Port ( D : in STD_LOGIC;
S : in STD_LOGIC_VECTOR (2 downto 0);
Y : out STD_LOGIC_VECTOR (7 downto 0));
end Demux_1to8;
architecture Behavioral of Demux_1to8 is
begin
Y <= "0000000"&D when S="000" else
"000000"&D&'0' when S="001" else
"00000"&D&"00" when S="010" else
"0000"&D&"000" when S="011" else
"000"&D&"0000" when S="100" else
"00"&D&"00000" when S="101" else
'0'&D&"000000" when S="110" else
D&"0000000" when S="111" else
"ZZZZZZZZ";
end Behavioral;
Testbench:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY Demux_tb IS
END Demux_tb;
ARCHITECTURE behavior OF Demux_tb IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT Demux_1to8
PORT(
D : IN std_logic;
S : IN std_logic_vector(2 downto 0);
Y : OUT std_logic_vector(7 downto 0)
);
END COMPONENT;
--Inputs
signal D : std_logic := '0';
signal S : std_logic_vector(2 downto 0) := (others => '0');
--Outputs
signal Y : std_logic_vector(7 downto 0);
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: Demux_1to8 PORT MAP (
D => D,
S => S,
Y => Y
);
-- Stimulus process
stim_proc: process
begin
D<='1';
S <= "000"; wait for 5 ns;
S <= "001"; wait for 5 ns;
S <= "010"; wait for 5 ns;
S <= "011"; wait for 5 ns;
S <= "100"; wait for 5 ns;
S <= "101"; wait for 5 ns;
S <= "110"; wait for 5 ns;
S <= "111"; wait for 5 ns;
S <= "UXZ"; wait for 5 ns;
end process;
END;
Output:
Comments
Post a Comment