Guest User

Untitled

a guest
Apr 4th, 2012
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 1.54 KB | None | 0 0
  1. LIBRARY ieee;
  2. USE ieee.std_logic_1164.all;
  3.  
  4.  
  5. ENTITY Teclado IS
  6. PORT  (  clk        : IN STD_LOGIC;
  7.      col        : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
  8.      row        : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
  9.      d      : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
  10.      dav        : OUT STD_LOGIC                 );
  11. END Teclado;
  12.  
  13.  
  14. ARCHITECTURE vhdl  OF Teclado IS
  15. SIGNAL freeze       : STD_LOGIC;
  16. SIGNAL data         : STD_LOGIC_VECTOR (3 DOWNTO 0);
  17. BEGIN
  18.    PROCESS (clk)
  19.    VARIABLE ring    : STD_LOGIC_VECTOR (3 DOWNTO 0);
  20.    BEGIN
  21.       IF (clk'EVENT AND clk = '1')     THEN
  22.       IF freeze = '0'   THEN
  23.          CASE ring IS
  24.         WHEN "1110" => ring := "1101";
  25.         WHEN "1101" => ring := "1011";
  26.         WHEN "1011" => ring := "0111";
  27.         WHEN "0111" => ring := "1110";
  28.         WHEN OTHERS => ring := "1110";
  29.          END CASE;
  30.       END IF;
  31.       dav <= freeze;
  32.       END IF;
  33.       row <= ring;
  34.  
  35.       CASE ring IS
  36.      WHEN "1110" => data(3 DOWNTO 2) <= "00";
  37.      WHEN "1101" => data(3 DOWNTO 2) <= "01";
  38.          WHEN "1011" => data(3 DOWNTO 2) <= "10";
  39.          WHEN "0111" => data(3 DOWNTO 2) <= "11";
  40.          WHEN OTHERS => data(3 DOWNTO 2) <= "00";
  41.       END CASE;
  42.  
  43.      
  44.       CASE col IS
  45.      WHEN "1110" => data(1 DOWNTO 0) <= "00";       freeze <= '1';
  46.      WHEN "1101" => data(1 DOWNTO 0) <= "01";       freeze <= '1';
  47.      WHEN "1011" => data(1 DOWNTO 0) <= "10";       freeze <= '1';
  48.          WHEN "0111" => data(1 DOWNTO 0) <= "11";       freeze <= '1';
  49.      WHEN OTHERS => data(1 DOWNTO 0) <= "00";       freeze <= '0';
  50.       END CASE;
  51.  
  52.    
  53.       IF freeze = '1' THEN d <= data;
  54.       ELSE        d <= "ZZZZ";
  55.       END IF;
  56.  
  57.     END PROCESS;
  58. END vhdl;
Advertisement
Add Comment
Please, Sign In to add comment