Advertisement
Guest User

dekoder

a guest
May 18th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 2.09 KB | None | 0 0
  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3.  
  4.  
  5. entity KbdDec is
  6.     Port ( KbdDO : in  STD_LOGIC_VECTOR (7 downto 0);
  7.            KbdE0 : in  STD_LOGIC;
  8.            KbdF0 : in  STD_LOGIC;
  9.            KbdRd : in  STD_LOGIC;
  10.            Clk : in STD_LOGIC;
  11.            Key : out  STD_LOGIC_VECTOR (3 downto 0);
  12.            Wave : out STD_LOGIC_VECTOR(1 downto 0);
  13.            KeyRD : out STD_LOGIC;
  14.            WaveCurr: out STD_LOGIC_VECTOR(1 downto 0)
  15.            );
  16. end KbdDec;
  17.  
  18.  
  19.  
  20. architecture Behavioral of KbdDec is
  21.    signal KeyTemp : STD_LOGIC_VECTOR (3 downto 0):="1111";
  22.    signal WaveTemp : STD_LOGIC_VECTOR (1 downto 0):="00";
  23.  
  24. begin  
  25.  
  26.    process (Clk, KbdRd)
  27.    begin
  28.  
  29.    if rising_edge(Clk) and KbdRd='1' then
  30.       case KbdDO & KbdE0 & KbdF0 is
  31.             when X"1A" & "00" => KeyTemp <= "0000"; -- Z
  32.             when X"1B" & "00" => KeyTemp <= "0001"; -- S
  33.             when X"22" & "00" => KeyTemp <= "0010"; -- X
  34.             when X"23" & "00" => KeyTemp <= "0011"; -- D
  35.             when X"21" & "00" => KeyTemp <= "0100"; -- C
  36.             when X"2A" & "00" => KeyTemp <= "0101"; -- V
  37.             when X"34" & "00" => KeyTemp <= "0110"; -- G
  38.             when X"32" & "00" => KeyTemp <= "0111"; -- B
  39.             when X"33" & "00" => KeyTemp <= "1000"; -- H
  40.             when X"31" & "00" => KeyTemp <= "1001"; -- N
  41.             when X"3B" & "00" => KeyTemp <= "1010"; -- J
  42.             when X"3A" & "00" => KeyTemp <= "1011"; -- M
  43.             when others => KeyTemp <= "1111";
  44.        end case;  
  45.       end if;
  46.    end process;
  47.  
  48.    Key <= KeyTemp;      
  49.            
  50.    KeyRD <= '1' when KeyTemp /= "1111" else '0';
  51.  
  52.  
  53.    process (Clk, KbdRd)
  54.    begin
  55.       if KeyTemp = "1111" then
  56.          if rising_edge(Clk) and KbdRd='1' then
  57.             case KbdDO is
  58.                when X"16" => WaveTemp <= "00";
  59.                when X"1E" => WaveTemp <= "01";
  60.                when X"26" => WaveTemp <= "10";
  61.                when others => NULL;
  62.             end case;
  63.          end if;
  64.       end if;
  65.    end process;  
  66.  
  67.    Wave <= WaveTemp;
  68.    WaveCurr <= WaveTemp;
  69.  
  70. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement