Verilog按键防抖模块实现代码分析
这段程序实现了按键防抖功能。输入的按键信号('i_key')可能会出现抖动现象,即按键在短时间内多次切换状态。该程序通过采样和计数的方式,确保按键稳定后再输出键值,从而避免了抖动现象的影响。
具体实现方式如下:
-
将输入的按键信号采样至'key_samp1',再将'key_samp1'锁存至'key_samp1_locked'。'key_samp1_locked'记录了上一个时钟周期的按键状态,'key_samp1'记录了当前时钟周期的按键状态。
-
当按键从1变为0时,'key_changed1'由0变为1,只维持一个时钟周期。'key_changed1'表示按键的状态变化。
-
一个计数器'cnt'用来记录按键稳定的时间。一旦有按键按下,'cnt'立即被清零。当按键没有变化(即'key_changed1'为0)时,'cnt'加1。当'cnt'达到20ms(50MHz时钟周期数的值)时,表示按键已经稳定,可以输出键值了。
-
将输入的按键信号采样至'key_samp2',只有当按键不变化(不抖动),且维持20ms以上时,才将'i_key'采集至'key_samp2'。再将'key_samp2'锁存至'key_samp2_locked'。
-
当按键从1变为0时,'key_changed2'由0变为1,只维持一个时钟周期。'key_changed2'表示按键的状态变化。
-
最后,每次按键稳定后,输出键值。输出的键值是'key_changed2'的反值,即按下为0,松开为1。
原文地址: https://www.cveoy.top/t/topic/olv9 著作权归作者所有。请勿转载和采集!