Tecla4b Final En este proyecto va aparecer el contador de anillo de

Anuncio
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;
Descargar