fpga 去抖verilog

fpga 去抖verilog,第1张

这个不一样的 ,,always @(posedge clk) 这个模块是比较常用的去抖动电路,很简单,也很实用,三个clk上升沿以后,dout1,dout2,dout3将和key_in波形保持一致,只是相应的顺序延迟一个clk周期。 assign key_out=(dout1|dout2|dout3)// 能有效的将信号上出现的抖动纹波去除掉,尤其是低电平纹波。而assign key_out=dout1却不行。建议采用assign key_out=(dout1|dout2|dout3)//

消抖分为硬件消抖和软件消抖:硬件消抖是使用积分器或是低通滤波器等手段滤除按键抖动,而软件消抖是通过编程来解决。以下是按键输出电平示意图:

可以看出,消抖是为了避免在按键按下或是抬起时电平剧烈抖动带来的影响。一般来说,软件消抖的方法是不断检测按键值,直到按键值稳定。实现方法:假设未按键时输入1,按键后输入为0,抖动时不定。可以做以下检测:检测到按键输入为0之后,延时20ms,再次检测,如果按键还为0,那么就认为有按键输入。延时的20ms恰好避开了抖动期。

程序中所用的方法是不断检测按键值。每当Count[17]上升沿到来,就进行检测输入信号。其中dout1,dout2,dout3分别为当前、上个Count[17]上升沿、上上个Count[17]上升沿输入数值。正常情况下为1,假如连续三次为0,三个信号相与,使得key_done信号为0,出现下降沿,这样就认为是有按键。

另外,你问为什么是count[17],由于你本身没写清楚count[17]的定义,所以没有确定答案。不过据猜测,count[17]只是一个延时信号而已。很有可能count是一个18位的计数器,每一个时钟周期计数一次,那么他计数262143次为一个周期,出现一次上升沿。如果按照26M时钟计算的话,count[17]出现两个上升沿之间间隔约为10ms,连续检测3次就是在0ms,10ms,20ms处都检测到0,才算是有按键输入。

如果不明白可继续追问。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8075507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存