-
Notifications
You must be signed in to change notification settings - Fork 0
/
gestionEntradas.vhd
103 lines (88 loc) · 2.83 KB
/
gestionEntradas.vhd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
----------------------------------------------------------------------------------
-- Company: UC3M
-- Engineers: Dario Jimenez Juiz
-- Gabriel Minelli Lli
-- Alvaro Manzanero Moran
--
-- Create Date: 28.10.2019 09:54:00
-- Module Name: gestionEntradas - Behavioral
-- Project Name: SpaceInv
-- Description: Detector de flancos para cada boton contemplado en el bloque
-- y sistema anti-rebotes.
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
entity gestionEntradas is
Port ( clk : in std_logic;
reset : in std_logic;
botonIz : in STD_LOGIC;
botonDer : in STD_LOGIC;
izquierda : out STD_LOGIC;
derecha : out STD_LOGIC);
end gestionEntradas;
architecture Behavioral of gestionEntradas is
component temporizador
generic(
ancho : integer
);
port(Clk : in STD_LOGIC;
Reset : in STD_LOGIC;
Clear : in STD_LOGIC;
Enable : in STD_LOGIC;
Cuenta : out unsigned (ancho-1 downto 0)
);
end component;
--Señales auxiliares de los detectores de flanco y el sistema anti rebotes
signal aux1 : std_logic;
signal aux2 : std_logic;
signal auxIzquierda : std_logic;
signal auxDerecha : std_logic;
--Señales del temporizador
signal clear : std_logic;
signal enable : std_logic;
signal cuenta : unsigned(24 downto 0);
begin
ctemp: temporizador generic map(25) port map(clk,reset,clear,enable,cuenta);
--Detector de flanco de bajada del boton izquierda
process(reset,clk)
begin
if reset = '1' then
aux1 <= '0';
elsif rising_edge(clk) then
aux1 <= botonIz;
end if;
end process;
auxIzquierda <= '1' when botonIz = '0' and aux1 = '1' else '0';
--Solo aceptamos la primera pulsacion. Para evita rebotes usamos un temporizador.
izquierda <= '1' when auxIzquierda = '1' and cuenta = 0 else '0';
--Detector de flanco de bajada del boton derecha
process(reset,clk)
begin
if reset = '1' then
aux2 <= '0';
elsif rising_edge(clk) then
aux2 <= botonDer;
end if;
end process;
auxDerecha <= '1' when botonDer = '0' and aux2 = '1' else '0';
--Solo aceptamos la primera pulsacion. Para evita rebotes usamos un temporizador.
derecha <= '1' when auxDerecha = '1' and cuenta = 0 else '0';
--Durante 100ms cada vez que detectamos un flanco de bajada bloqueamos
--los subsiguientes pulsos para evitar rebotes.
process(reset,clk)
begin
if reset = '1' then
enable <= '0';
elsif rising_edge(clk) then
if auxDerecha = '1' or auxIzquierda = '1' then
enable <= '1';
clear <= '0';
elsif cuenta = 20000000 then
enable <= '0';
clear <= '1';
end if;
end if;
end process;
end Behavioral;