Manchmal hat man das Problem, dass ein Eingangsignal prellt, man aber nicht warten kann, bis das Prellen aufgehört hat. Eine Auswertung des Flankenwechsels soll schnellstmöglich, quasi beim ersten Prellen ausgelöst, nachfolgende Preller aber ignoriert werden. Als Bais dient dieses Signal:
Hier kann die Schieberegister-Entprellung wieder ganz einfach verwendet werden. Allein durch das Ändern des Vergleichswertes wird praktisch die Schaltempfindlichkeit der Erkennung angepasst.
if (sr="11111110")... << sofort beim Wechsel 1->0 if (sr="11110000")... << bei "sauberer Flanke" 1->0 (kritisch) if (sr="10000000")... << wenn Wechsel 1->0, und 0 liegt stabil
Kritisch ist die mittlere Abfrage, weil u.U. Flanken nicht erkannt werden, wenn vor und nach der Flanke keine stabilen Signale anliegen und das Signal z.B. so aussieht:
Keine dieser unsauberen Flanken wird von dieser 2. Variante erkannt werden.
Hier der VHDL Code der Flankenerkennung:
: signal sr : std_logic_vector(7 downto 0); signal flanke : std_logic; signal pegel : std_logic; : process (clk) begin if rising_edge(clk) then -- Schieberegister sr <= sr(6 downto 0) & eingang; -- Flankenerkennung, 1 Sync-FF, dann sofort reagieren flanke <= '0'; if (sr="11111110") then flanke <= '1' end if; -- fallend if (sr="00000001") then flanke <= '1' end if; -- steigend -- Entprellen if (sr="11111111") then pegel <= '1' end if; -- high if (sr="00000000") then pegel <= '0' end if; -- low end if; end process; :