Mit dem Maxim-Dallas Baustein MAX6816 gibt es eine Harwarelösung zur Entprellung einer Taste. Eigentlich ein schöner kleiner Baustein, ist es trotzdem sinnvoll, diese Funktionalität ins FPGA zu übernehmen.
Hier ein Bild aus dem Datenblatt
Der folgende VHDL-Code bildet das Verhalten des Bausteins nach:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity Debounce is
Port ( clk : in STD_LOGIC;
keyin : in STD_LOGIC;
keyout : out STD_LOGIC);
end Debounce;
architecture Behavioral of Debounce is
signal keydeb : std_logic := '0';
signal debcnt : integer range 0 to 63 := 0;
begin
process begin
wait until rising_edge(clk);
-- XOR
if (keyin=keydeb) then debcnt <= 0;
else debcnt <= debcnt+1;
end if;
-- Latch
if (debcnt=63) then keydeb <= keyin;
end if;
end process;
keyout <= keydeb;
end Behavioral;