debouncing example
[hwmod.git] / debouncing / src / debounce_top_struct.vhd
diff --git a/debouncing/src/debounce_top_struct.vhd b/debouncing/src/debounce_top_struct.vhd
new file mode 100644 (file)
index 0000000..3d1bcb8
--- /dev/null
@@ -0,0 +1,90 @@
+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