Tecla4b Final En este proyecto va aparecer el contador de anillo de 4 bits en leds y la salida por leds de la tecla apretada. Como se colocó un reloj muy lento, se observara de manera didáctica que solo detectara la tecla si está en el estado adecuado. Cada estado representa el estado de una sola columna. Tenemos 4 estados para columna 0, columna1, columna 2 y columna3. Cuando se está en cada estado se insertara el código del pdf anterior” tecla4a”. Si estamos en el estado 0 llamado “col0”, solo detectara los números de esa columna, ya sea: 1, 4, 7 o *. Pero si se está en el estado “col1”, detectara si se apretó la tecla 2, 5,8 o 0. Etc. El código es el siguiente: Tenemos: anillo4b, reloj lento y el TOP de armado. Aquí solo se muestra el módulo de anillo Anillo4b.vhdl library ieee; use ieee.std_logic_1164.all; entity anillo4b is port(clk, reset: in std_logic; row: in std_logic_vector (3 downto 0); col: buffer std_logic_vector (3 downto 0); leds, count:out std_logic_vector (3 downto 0)); end entity anillo4b; architecture arqanillo4b of anillo4b is subtype state is std_logic_vector(3 downto 0); signal present_state, next_state: state; constant col0: state:= "1110"; constant col1: state:= "1101"; constant col2: state:= "1011"; constant col3: state:= "0111"; begin process(clk,col) begin if rising_edge(clk) then if (reset='0') then present_state<=col0; --col<= (others=>'1'); -- todo apagado else present_state<= next_state; end if; end if; end process; process(present_state) begin case present_state is when col0 => case row is col<= (0=> '0',others=>'1'); --tecla con salida negada when "1110"=> leds <= "1110"; --1 => 0001 when "1101"=> leds <= "1011"; --4 => 0100 when "1011"=> leds <= "1000"; --7 => 0111 when "0111"=> leds <= "0000" ; --* => 15=> 1111 when others=> leds <= "1111"; end case; next_state<=col1; when col1 => col<= (1=> '0',others=>'1'); --row f4f3f2f1, leds 3 2 1 0 case row is --tecla con salida negada when "1110"=> leds <= "1101"; --2 => 0010 when "1101"=> leds <= "1010"; --5 => 0101 when "1011"=> leds <= "0111"; --8 => 1000 when "0111"=> leds <= "1111" ; --0 => 0000 when others=> leds <= "1111"; end case; next_state<=col2; when col2 => col<= (2=> '0',others=>'1'); --row f4f3f2f1, leds 3 2 1 0 case row is --tecla con salida negada when "1110"=> leds <= "1100"; --3 => 0011 when "1101"=> leds <= "1001"; --6 => 0110 when "1011"=> leds <= "0110"; --9 => 1001 when "0111"=> leds <= "0001" ; --# => 14 => 1110 when others=> leds <= "1111"; end case; next_state<=col3; when col3 => col<= (3=> '0',others=>'1'); --row f4f3f2f1, leds 3 2 1 0 case row is --tecla con salida negada when "1110"=> leds <= "0101"; --A =>10 => 1010 when "1101"=> leds <= "0100"; --B => 11=> 1011 when "1011"=> leds <= "0011"; --C => 12=> 1100 when "0111"=> leds <= "0000" ; --C => 15=> 1111 when others=> leds <= "1111"; end case; next_state<=col0; when others => next_state<=col0; end case; count <= present_state; end process; end arqanillo4b;