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

Subversion Repositories uos_processor

[/] [vhdl/] [debounce.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 droggen
--------------------------------------------------------------------------------
2
--
3
--   FileName:         debounce.vhd
4
--   Dependencies:     none
5
--   Design Software:  Quartus II 32-bit Version 11.1 Build 173 SJ Full Version
6
--
7
--   HDL CODE IS PROVIDED "AS IS."  DIGI-KEY EXPRESSLY DISCLAIMS ANY
8
--   WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
9
--   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
10
--   PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL DIGI-KEY
11
--   BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL
12
--   DAMAGES, LOST PROFITS OR LOST DATA, HARM TO YOUR EQUIPMENT, COST OF
13
--   PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
14
--   BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF),
15
--   ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER SIMILAR COSTS.
16
--
17
--   Version History
18
--   Version 1.0 3/26/2012 Scott Larson
19
--     Initial Public Release
20
--
21
--------------------------------------------------------------------------------
22
 
23
LIBRARY ieee;
24
USE ieee.std_logic_1164.all;
25
USE ieee.std_logic_unsigned.all;
26
 
27
ENTITY debounce IS
28
  GENERIC(
29
    counter_size  :  INTEGER := 19); --counter size (19 bits gives 10.5ms with 50MHz clock)
30
  PORT(
31
    clk     : IN  STD_LOGIC;  --input clock
32
    button  : IN  STD_LOGIC;  --input signal to be debounced
33
    result  : OUT STD_LOGIC); --debounced signal
34
END debounce;
35
 
36
ARCHITECTURE logic OF debounce IS
37
  SIGNAL flipflops   : STD_LOGIC_VECTOR(1 DOWNTO 0); --input flip flops
38
  SIGNAL counter_set : STD_LOGIC;                    --sync reset to zero
39
  SIGNAL counter_out : STD_LOGIC_VECTOR(counter_size DOWNTO 0) := (OTHERS => '0'); --counter output
40
BEGIN
41
 
42
  counter_set <= flipflops(0) xor flipflops(1);   --determine when to start/reset counter
43
 
44
  PROCESS(clk)
45
  BEGIN
46
    IF(clk'EVENT and clk = '1') THEN
47
      flipflops(0) <= button;
48
      flipflops(1) <= flipflops(0);
49
      If(counter_set = '1') THEN                  --reset counter because input is changing
50
        counter_out <= (OTHERS => '0');
51
      ELSIF(counter_out(counter_size) = '0') THEN --stable input time is not yet met
52
        counter_out <= counter_out + 1;
53
      ELSE                                        --stable input time is met
54
        result <= flipflops(1);
55
      END IF;
56
    END IF;
57
  END PROCESS;
58
END logic;

powered by: WebSVN 2.1.0

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