Самое простое, что нужно сделать - это сдвинуть входной сигнал на один такт, как (в процессе):
i_button1_d <= i_button1;
А затем используйте 2 сигнала для определения переднего фронта входа с комбинаторным выражением:
i_button1_d = '0' and i_button1 = '1'
например, если в процессе. Выражение означает, что сигнал был «0» на предыдущих часах и «1» на текущих, поэтому просто пошел вверх.
Также очень часто тестируют с «1» и «0», чтобы получить уникальный импульс в «1» в (после) падающего фронта.
Затем вы можете объединить это выражение с другими (например, «ИЛИ» со входом или тем же импульсом, смещенным, например, еще на один цикл), если необходимо поддерживать сигнал вверх или вниз!