OpenCores
URL https://opencores.org/ocsvn/ddr2_sdram/ddr2_sdram/trunk

Subversion Repositories ddr2_sdram

[/] [ddr2_sdram/] [trunk/] [Buttons_VHDL.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 john_fpga
---------------------------------------------------------------------
2
-- File :                       Buttons_VHDL.vhd
3
-- Projekt :            Prj_12_DDR2
4
-- Zweck :                      Buttons und Schalter entprellen
5
-- Datum :        19.08.2011
6
-- Version :      2.0
7
-- Plattform :    XILINX Spartan-3A
8
-- FPGA :         XC3S700A-FGG484
9
-- Sprache :      VHDL
10
-- ISE :                                ISE-Design-Suite V:13.1
11
-- Autor :        UB
12
-- Mail :         Becker_U(at)gmx.de
13
---------------------------------------------------------------------
14
library IEEE;
15
use IEEE.STD_LOGIC_1164.ALL;
16
use IEEE.STD_LOGIC_ARITH.ALL;
17
use IEEE.STD_LOGIC_UNSIGNED.ALL;
18
 
19
        --------------------------------------------
20
        -- Beschreibung :
21
        --
22
        -- hier werden die Buttons und Schalter
23
        -- mit dem Clock syncronisiert
24
        --
25
        -- weil die Taster prellen
26
        -- werden sie mit einer Verzögerung eingelesen
27
        -- sonst kommt es zu anzeigefehlern
28
        --
29
        -- damit die Read/Write Funktionen
30
        -- bei gedruecktem Button nicht
31
        -- staendig aufgerufen werden,
32
        -- wird aus allen 4 Buttons
33
        -- ein OnClick-Eregnis gemacht
34
        --------------------------------------------
35
 
36
entity Buttons_VHDL is
37
 
38
        --------------------------------------------
39
        -- Port Deklerationen
40
        --------------------------------------------
41
        port (
42
                clk_in : in std_logic;
43
                button_in : in std_logic_vector(3 downto 0);
44
                switch_in : in std_logic_vector(3 downto 0);
45
                debounce_out : out std_logic_vector(7 downto 0);
46
                risingedge_out : out std_logic_vector(3 downto 0)
47
        );
48
 
49
end Buttons_VHDL;
50
 
51
architecture Verhalten of Buttons_VHDL is
52
 
53
        --------------------------------------------
54
        -- Interne Signale
55
        --------------------------------------------
56
        signal v_debounce : std_logic_vector(7 downto 0) := (others => '0');
57
        signal v_btn_old : std_logic_vector(3 downto 0):= (others => '0');
58
        signal v_btn_tic : std_logic_vector(3 downto 0):= (others => '0');
59
 
60
        -- verzoegerung für die tasten, weil sie prellen        
61
        constant BUTTON_SLEEP : integer := 6650000; -- Zeit = 50ms bei 133MHz Quarz 
62
        signal v_counter :  natural range 0 to BUTTON_SLEEP := BUTTON_SLEEP;
63
 
64
begin
65
 
66
        -----------------------------------------
67
        -- Einclocken von Asyncronen Signalen
68
        -----------------------------------------
69
        P_ASYNC : process(clk_in)
70
        begin
71
                if falling_edge(clk_in) then
72
                        if v_counter = 0 then
73
                                -- wenn Verzögerungszeit um, die zustände der 
74
                           -- buttons und schalter übergeben
75
                                v_counter <= BUTTON_SLEEP;
76
                                v_debounce(3 downto 0) <= button_in(3 downto 0);
77
                                v_debounce(7 downto 4) <= switch_in(3 downto 0);
78
                        else
79
                                v_counter <= v_counter -1;
80
                        end if;
81
                end if;
82
        end process P_ASYNC;
83
 
84
        -- übergabe der Signale------------------
85
        debounce_out <= v_debounce;
86
 
87
        -----------------------------------------
88
        -- Aus den Tastern jeweils ein
89
        -- einzelnes 1Clock langes Signal machen,
90
        -- bis der Taser wieder verlassen ist
91
        -- damit die Funktionen (+/-, read,write)
92
        -- nur einmal ausgeführt werden
93
        -----------------------------------------
94
        P_Buttons : process(clk_in)
95
        begin
96
                if falling_edge(clk_in) then
97
                        -- TIC merker zurücksetzen
98
                        v_btn_tic(3 downto 0) <= "0000";
99
 
100
                        -- button east-------------------------------                   
101
                        if v_debounce(0)='1' and v_btn_old(0)='0' then
102
                                v_btn_old(0) <= '1';
103
                                v_btn_tic(0) <= '1';
104
                        elsif v_debounce(0)='0' and v_btn_old(0)='1' then
105
                                v_btn_old(0) <= '0';
106
                        end if;
107
 
108
                        -- button north-----------------------------                    
109
                        if v_debounce(1)='1' and v_btn_old(1)='0' then
110
                                v_btn_old(1) <= '1';
111
                                v_btn_tic(1) <= '1';
112
                        elsif v_debounce(1)='0' and v_btn_old(1)='1' then
113
                                v_btn_old(1) <= '0';
114
                        end if;
115
 
116
                        -- button south-----------------------------                    
117
                        if v_debounce(2)='1' and v_btn_old(2)='0' then
118
                                v_btn_old(2) <= '1';
119
                                v_btn_tic(2) <= '1';
120
                        elsif v_debounce(2)='0' and v_btn_old(2)='1' then
121
                                v_btn_old(2) <= '0';
122
                        end if;
123
 
124
                        -- button west------------------------------                    
125
                        if v_debounce(3)='1' and v_btn_old(3)='0' then
126
                                v_btn_old(3) <= '1';
127
                                v_btn_tic(3) <= '1';
128
                        elsif v_debounce(3)='0' and v_btn_old(3)='1' then
129
                                v_btn_old(3) <= '0';
130
                        end if;
131
                end if;
132
        end process P_Buttons;
133
 
134
        -- übergabe der Signale------------------
135
        risingedge_out <= v_btn_tic;
136
 
137
end Verhalten;
138
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.