aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/synth/issue1650/debounce.vhdl
blob: 0ea40d1a561e8b2bdf111c1b23f779a8551c0c92 (plain)
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
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity debounce is
	generic (
		N_CYCLES: integer := 255
	);
	port
	(
		clk: in std_ulogic;
		reset_n: in std_ulogic;
		debounce_in: in std_ulogic;
		debounced_out: buffer std_ulogic
	);
end debounce;

architecture rtl of debounce is
    signal counter: integer range 0 to N_CYCLES;
    signal previous_debounce_in: std_ulogic := '0';
begin
	process(clk, reset_n)
	begin
        if (reset_n = '0') then
            previous_debounce_in <= '0';
			debounced_out <= '0';
			counter <= 0;
        elsif rising_edge(clk) then

			if debounce_in = previous_debounce_in then
				if counter = N_CYCLES then
					debounced_out <= debounce_in;
				else
					counter <= counter + 1;
				end if;
			else
				counter <= 0;
            end if;

            previous_debounce_in <= debounce_in;
		end if;
	end process;
end rtl;