按键消抖原理及VHDL代码实现
(已通过板级验证)
按键抖动原理
如上图所示,当我们按下FPGA上的button键之后,我们理想的状态如黑线所示,但是实际的情况是如红线所示,会有几次的来回抖动,然后才会变得稳定。这个问题就会导致FPGA检测到数次1,这样可能就会运行数次操作,从而得到错误的结果。
按键消抖原理
因为按下FPGA的按键时,弹簧片最低震动频率不会低于50 HZ,所以,两次下降沿出现的时间差不会超过20ms, 也就是说,当我们检测到一次下降沿/上升沿之后,再在20ms内检测是否有下降沿/上升沿产生,如果有,则重新检测,如果没有,则说明按键稳定。(一般而言,按钮被释放比按钮被按下去的反弹要少很多)
实验要求
通过实验开发板按键输入key0和key1,当按下key0的时候,+1,当按下key1时,-1。按键结果显示在四个led灯中。
key_state为当前按键状态:按下为0,释放为1;
key_flag为一个单脉冲信号,当key_state翻转时产生,也就是按键输入稳定20ms的时候。