对于消抖,有很多种写法。今天分享一下我的写法。

基本思路:

1. 看图

                   

图1                                                   图2                                    图3

  图1 是理想的按键按下信号变化,图2是FPGA采集到的按键按下的信号变化。图3是一个外部干扰导致的一个错误。

用什么办法能把图2中延续到我们图1中一样的信号呢,又怎样滤除图3中的干扰呢?

  在各位前辈的苦思下,总结出一个最好的解决办法,就是延迟消抖:如果抖动在一定范围内,系统不认为是一个正确的按键。

  正好今天我也是以延迟消抖的办法来设计。 如图3

  依照前辈们的经验,抖动时间一般会少于20ms. 也就是说,如果数据稳定20ms,认为可以采集该数据。

  设计基本思想,如果计数计数到20'HF_FFFF,则认为此时状态是稳定的状态。若计数计数到中间某值,输入有变化,则计数器会清零,重新计数。则等按键稳定20‘hf_ffff个时钟为止。下面给出按键的程序

 `define UD #
module key_jitter(
input clkin, input key_in,
output key_value,
output [:] tout
); // inner signal
reg [:] key_in_r;
wire pp;
reg [:] cnt_base;
reg key_value_r; //内部信号
always @(posedge clkin)
key_in_r<= `UD {key_in_r[],key_in}; // 检测有输入有没有变化
assign pp = key_in_r[]^key_in_r[]; //延迟计数器
always @(posedge clkin)
if(pp=='b1)
cnt_base <= `UD 'd0;
else
cnt_base <= `UD cnt_base + ; //输出
always @(posedge clkin)
if(cnt_base=='hf_ffff)
key_value_r <= `UD key_in_r[]; assign key_value = key_value_r;
endmodule

最新文章

  1. CSS基本知识4-CSS行模型
  2. Ubuntu 修改hosts
  3. MVC4中 访问webservice 出现无法找到资源的错误
  4. asp.net 项目在 IE 11 下出现 “__doPostBack”未定义 的解决办法
  5. 谈 DevOps 自动化时,也应该考虑到 SOX 等法案
  6. (三)Angularjs - 小实例
  7. cuzysdk购物模块 36kr+本期背景图
  8. Chapter 1 First Sight——6
  9. 第三章 Struts2配置详解
  10. Mybatis和JDBC区别
  11. mysql CMD命令
  12. 一个js的动画,以前以为只有flash可以实现
  13. Linux架构浅谈
  14. UI相关
  15. [Nuget]Nuget命令行工具安装
  16. live Templates 活动模板. 配置完之后,就可以快速编码-代码块
  17. jenkins学习:jenkins的基本配置
  18. I2C写时序图[转]
  19. TZOJ 3134: 渊子赛马修改版
  20. 浅析java修饰符之public default protected private static final abstract

热门文章

  1. cordova发送邮件插件:ngcordova plugin-Email Composer
  2. Python中的字符串处理
  3. Codeforces Round #200 (Div. 1) D Water Tree 树链剖分 or dfs序
  4. JQuery multiselect的相关使用
  5. 【Ionic】---App名字和图标修改+启动画修改(SplashScreen)
  6. disucz!NT 3.5.0 验证码点击不能变化只是样式变化
  7. 十六、Android 滑动效果汇总
  8. rs.open 打开数据库权限问题 rs.open sql,conn,1,3 等后缀权限问题
  9. MVC 构造
  10. 简单的json传送数据