Jump to content

VHDL for FPGA Design/Decoder

From Wikibooks, open books for an open world

Decoder VHDL Code

[edit | edit source]
  library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.numeric_std.all;   entity Decoder is  port(E : in std_logic;  din : in std_logic_vector(2 downto 0);  dout : out std_logic_vector(7 downto 0)); end Decoder;   architecture descript of Decoder is begin    dout <="00000000" when E='0' else  "00000001" when E='1' and din="000" else  "00000010" when E='1' and din="001" else  "00000100" when E='1' and din="010" else  "00001000" when E='1' and din="011" else  "00010000" when E='1' and din="100" else  "00100000" when E='1' and din="101" else  "01000000" when E='1' and din="110" else  "10000000" when E='1' and din="111"; end descript; 

Decoder Testbench File

[edit | edit source]
LIBRARY ieee; USE ieee.std_logic_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use IEEE.STD_LOGIC_ARITH.ALL;   -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values USE ieee.numeric_std.ALL;   ENTITY tb_Decoder IS END tb_Decoder;   ARCHITECTURE behavior OF tb_Decoder IS     -- Component Declaration for the Unit Under Test (UUT)    COMPONENT Decoder  PORT(  E : IN std_logic;  din : IN std_logic_vector(2 downto 0);  dout : OUT std_logic_vector(7 downto 0)  );  END COMPONENT;    --Inputs  signal E : std_logic := '0';  signal din : std_logic_vector(2 downto 0) := (others => '0');  --Outputs  signal dout : std_logic_vector(7 downto 0);  -- No clocks detected in port list. Replace clk below with   -- appropriate port name    signal clk : std_logic; constant clk_period : time := 10 ns;   BEGIN   -- Instantiate the Unit Under Test (UUT)  uut: Decoder PORT MAP (  E => E,  din => din,  dout => dout  );  -- Clock process definitions  clk_process :process  begin clk <= '0'; wait for clk_period/2; clk <= '1'; wait for clk_period/2;  end process;     -- Stimulus process  stim_proc: process  begin  -- hold reset state for 100 ns.  wait for 100 ns; din <= "001"; wait for clk_period; din <= "010"; wait for clk_period; din <= "011"; wait for clk_period; din <= "100"; wait for clk_period; din <= "101"; wait for clk_period; din <= "110"; wait for clk_period; din <= "111"; wait for clk_period; E <= '1'; wait for clk_period; din <= "000"; wait for clk_period; din <= "001"; wait for clk_period; din <= "010"; wait for clk_period; din <= "011"; wait for clk_period; din <= "100"; wait for clk_period; din <= "101"; wait for clk_period; din <= "110"; wait for clk_period; din <= "111";   -- insert stimulus here   wait;  end process; END; 

Decoder Simulation Waveform

[edit | edit source]
 
[edit | edit source]

Video of how to get to the Decoder RTL Schematic (circuit diagram) in the Xilinx ISE Project Navigator

See Also

[edit | edit source]