Объявить сигналы:
signal I : std_logic; -- input
signal I_d : std_logic := '0'; -- input delayed by 1 cycle
signal I_re : std_logic; -- rising edge
signal I_fe : std_logic; -- falling edge
signal I_ch : std_logic; -- changed
Задержка входного сигнала:
I_d <= I when rising_edge(Clock);
Обнаружение нарастания фронта:
I_re <= not I_d and I; -- old = 0, new = 1 => rising edge
Обнаружение падения края:
I_fe <= I_d and not I; -- old = 1, new = 0 => falling edge
Обнаружение края / изменения:
I_ch <= I_d xor I; -- old <> new => changed