+library ieee;\r
+use ieee.std_logic_1164.all;\r
+use work.debounce_pkg.all;\r
+use work.sync_pkg.all;\r
+use work.event_counter_pkg.all;\r
+\r
+architecture struct of debounce_top is\r
+ constant CLK_FREQ : integer := 33330000;\r
+ constant TIMEOUT : time := 1 ms;\r
+ constant RES_N_DEFAULT_VALUE : std_logic := '1';\r
+ constant SYNC_STAGES : integer := 2;\r
+ constant BTN_A_RESET_VALUE : std_logic := '1';\r
+ constant EVENT_CNT_WIDTH : integer := 8;\r
+\r
+ signal sys_res_n_sync, btn_a_sync : std_logic;\r
+ signal event_cnt : std_logic_vector(EVENT_CNT_WIDTH - 1 downto 0);\r
+\r
+ function to_segs(value : in std_logic_vector(3 downto 0)) return std_logic_vector is\r
+ begin\r
+ case value is\r
+ when x"0" => return "1000000";\r
+ when x"1" => return "1111001";\r
+ when x"2" => return "0100100";\r
+ when x"3" => return "0110000";\r
+ when x"4" => return "0011001";\r
+ when x"5" => return "0010010";\r
+ when x"6" => return "0000010";\r
+ when x"7" => return "1111000";\r
+ when x"8" => return "0000000";\r
+ when x"9" => return "0010000";\r
+ when x"A" => return "0001000";\r
+ when x"B" => return "0000011";\r
+ when x"C" => return "1000110";\r
+ when x"D" => return "0100001";\r
+ when x"E" => return "0000110";\r
+ when x"F" => return "0001110";\r
+ when others => return "1111111";\r
+ end case;\r
+ end function; \r
+begin\r
+ sys_res_n_debounce_inst : debounce\r
+ generic map\r
+ (\r
+ CLK_FREQ => CLK_FREQ,\r
+ TIMEOUT => TIMEOUT,\r
+ RESET_VALUE => RES_N_DEFAULT_VALUE,\r
+ SYNC_STAGES => SYNC_STAGES\r
+ )\r
+ port map\r
+ (\r
+ sys_clk => sys_clk,\r
+ sys_res_n => '1',\r
+ data_in => sys_res_n,\r
+ data_out => sys_res_n_sync\r
+ );\r
+\r
+ btn_a_debounce_inst : debounce\r
+ generic map\r
+ (\r
+ CLK_FREQ => CLK_FREQ,\r
+ TIMEOUT => TIMEOUT,\r
+ RESET_VALUE => BTN_A_RESET_VALUE,\r
+ SYNC_STAGES => SYNC_STAGES\r
+ )\r
+ port map\r
+ (\r
+ sys_clk => sys_clk,\r
+ sys_res_n => sys_res_n_sync,\r
+ data_in => btn_a,\r
+ data_out => btn_a_sync\r
+ );\r
+\r
+ event_cnt_inst : event_counter\r
+ generic map\r
+ (\r
+ CNT_WIDTH => EVENT_CNT_WIDTH,\r
+ RESET_VALUE => BTN_A_RESET_VALUE\r
+ )\r
+ port map\r
+ (\r
+ sys_clk => sys_clk,\r
+ sys_res_n => sys_res_n_sync,\r
+ sense => btn_a_sync,\r
+ cnt => event_cnt\r
+ );\r
+\r
+ seg_a <= to_segs(event_cnt(3 downto 0));\r
+ seg_b <= to_segs(event_cnt(7 downto 4));\r
+\r
+end architecture struct;\r