debouncing example
[hwmod.git] / debouncing / src / event_counter_beh.vhd
diff --git a/debouncing/src/event_counter_beh.vhd b/debouncing/src/event_counter_beh.vhd
new file mode 100644 (file)
index 0000000..9d7b8b8
--- /dev/null
@@ -0,0 +1,31 @@
+library ieee;\r
+use ieee.std_logic_1164.all;\r
+use ieee.numeric_std.all;\r
+\r
+architecture beh of event_counter is\r
+  signal sense_old, sense_old_next : std_logic;\r
+  signal cnt_int, cnt_next : std_logic_vector(CNT_WIDTH - 1 downto 0);\r
+begin\r
+  cnt <= cnt_int;\r
+\r
+  process(sys_clk, sys_res_n)\r
+  begin\r
+    if sys_res_n = '0' then\r
+      cnt_int <= (others => '0');\r
+      sense_old <= RESET_VALUE;\r
+    elsif rising_edge(sys_clk) then\r
+      cnt_int <= cnt_next;\r
+      sense_old <= sense_old_next;\r
+    end if;\r
+  end process;\r
+  \r
+  process(cnt_int, sense, sense_old)\r
+  begin\r
+    sense_old_next <= sense;\r
+    cnt_next <= cnt_int;\r
+\r
+    if sense_old /= sense and sense = '0' then\r
+      cnt_next <= std_logic_vector(unsigned(cnt_int) + 1);\r
+    end if;\r
+  end process;\r
+end architecture beh;\r