debouncing sys_res_n
[hwmod.git] / src / debouncing / debounce_top_struct.vhd
1 library ieee;\r
2 use ieee.std_logic_1164.all;\r
3 use work.debounce_pkg.all;\r
4 use work.sync_pkg.all;\r
5 use work.event_counter_pkg.all;\r
6 \r
7 architecture struct of debounce_top is\r
8   constant CLK_FREQ : integer := 33330000;\r
9   constant TIMEOUT : time := 1 ms;\r
10   constant RES_N_DEFAULT_VALUE : std_logic := '1';\r
11   constant SYNC_STAGES : integer := 2;\r
12   constant BTN_A_RESET_VALUE : std_logic := '1';\r
13   constant EVENT_CNT_WIDTH : integer := 8;\r
14 \r
15   signal sys_res_n_sync, btn_a_sync : std_logic;\r
16   signal event_cnt : std_logic_vector(EVENT_CNT_WIDTH - 1 downto 0);\r
17 \r
18   function to_segs(value : in std_logic_vector(3 downto 0)) return std_logic_vector is\r
19   begin\r
20     case value is\r
21       when x"0" => return "1000000";\r
22       when x"1" => return "1111001";\r
23       when x"2" => return "0100100";\r
24       when x"3" => return "0110000";\r
25       when x"4" => return "0011001";\r
26       when x"5" => return "0010010";\r
27       when x"6" => return "0000010";\r
28       when x"7" => return "1111000";\r
29       when x"8" => return "0000000";\r
30       when x"9" => return "0010000";\r
31       when x"A" => return "0001000";\r
32       when x"B" => return "0000011";\r
33       when x"C" => return "1000110";\r
34       when x"D" => return "0100001";\r
35       when x"E" => return "0000110";\r
36       when x"F" => return "0001110";\r
37       when others => return "1111111";\r
38     end case;\r
39   end function;  \r
40 begin\r
41   sys_res_n_debounce_inst : debounce\r
42     generic map\r
43     (\r
44       CLK_FREQ => CLK_FREQ,\r
45       TIMEOUT => TIMEOUT,\r
46       RESET_VALUE => RES_N_DEFAULT_VALUE,\r
47       SYNC_STAGES => SYNC_STAGES\r
48     )\r
49     port map\r
50     (\r
51       sys_clk => sys_clk,\r
52       sys_res_n => '1',\r
53       data_in => sys_res_n,\r
54       data_out => sys_res_n_sync\r
55     );\r
56 \r
57     btn_a_debounce_inst : debounce\r
58     generic map\r
59     (\r
60       CLK_FREQ => CLK_FREQ,\r
61       TIMEOUT => TIMEOUT,\r
62       RESET_VALUE => BTN_A_RESET_VALUE,\r
63       SYNC_STAGES => SYNC_STAGES\r
64     )\r
65     port map\r
66     (\r
67       sys_clk => sys_clk,\r
68       sys_res_n => sys_res_n_sync,\r
69       data_in => btn_a,\r
70       data_out => btn_a_sync\r
71     );\r
72 \r
73   event_cnt_inst : event_counter\r
74     generic map\r
75     (\r
76       CNT_WIDTH => EVENT_CNT_WIDTH,\r
77       RESET_VALUE => BTN_A_RESET_VALUE\r
78     )\r
79     port map\r
80     (\r
81       sys_clk => sys_clk,\r
82       sys_res_n => sys_res_n_sync,\r
83       sense => btn_a_sync,\r
84       cnt => event_cnt\r
85     );\r
86 \r
87   seg_a <= to_segs(event_cnt(3 downto 0));\r
88   seg_b <= to_segs(event_cnt(7 downto 4));\r
89 \r
90 end architecture struct;\r