按键消抖VERILOG实现
2024-10-20 16:44:07
对于消抖,有很多种写法。今天分享一下我的写法。
基本思路:
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
最新文章
- CSS基本知识4-CSS行模型
- Ubuntu 修改hosts
- MVC4中 访问webservice 出现无法找到资源的错误
- asp.net 项目在 IE 11 下出现 “__doPostBack”未定义 的解决办法
- 谈 DevOps 自动化时,也应该考虑到 SOX 等法案
- (三)Angularjs - 小实例
- cuzysdk购物模块 36kr+本期背景图
- Chapter 1 First Sight——6
- 第三章 Struts2配置详解
- Mybatis和JDBC区别
- mysql CMD命令
- 一个js的动画,以前以为只有flash可以实现
- Linux架构浅谈
- UI相关
- [Nuget]Nuget命令行工具安装
- live Templates 活动模板. 配置完之后,就可以快速编码-代码块
- jenkins学习:jenkins的基本配置
- I2C写时序图[转]
- TZOJ 3134: 渊子赛马修改版
- 浅析java修饰符之public default protected private static final abstract
热门文章
- cordova发送邮件插件:ngcordova plugin-Email Composer
- Python中的字符串处理
- Codeforces Round #200 (Div. 1) D Water Tree 树链剖分 or dfs序
- JQuery multiselect的相关使用
- 【Ionic】---App名字和图标修改+启动画修改(SplashScreen)
- disucz!NT 3.5.0 验证码点击不能变化只是样式变化
- 十六、Android 滑动效果汇总
- rs.open 打开数据库权限问题 rs.open sql,conn,1,3 等后缀权限问题
- MVC 构造
- 简单的json传送数据