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
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
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
18 function to_segs(value : in std_logic_vector(3 downto 0)) return std_logic_vector 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
41 sys_res_n_debounce_inst : debounce
\r
44 CLK_FREQ => CLK_FREQ,
\r
46 RESET_VALUE => RES_N_DEFAULT_VALUE,
\r
47 SYNC_STAGES => SYNC_STAGES
\r
53 data_in => sys_res_n,
\r
54 data_out => sys_res_n_sync
\r
57 btn_a_debounce_inst : debounce
\r
60 CLK_FREQ => CLK_FREQ,
\r
62 RESET_VALUE => BTN_A_RESET_VALUE,
\r
63 SYNC_STAGES => SYNC_STAGES
\r
68 sys_res_n => sys_res_n_sync,
\r
70 data_out => btn_a_sync
\r
73 event_cnt_inst : event_counter
\r
76 CNT_WIDTH => EVENT_CNT_WIDTH,
\r
77 RESET_VALUE => BTN_A_RESET_VALUE
\r
82 sys_res_n => sys_res_n_sync,
\r
83 sense => btn_a_sync,
\r
87 seg_a <= to_segs(event_cnt(3 downto 0));
\r
88 seg_b <= to_segs(event_cnt(7 downto 4));
\r
90 end architecture struct;
\r