按键消抖
按键消抖主要针对的是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了保证系统能正确识别按键的开关,就必须对按键的抖动进行处理,这就是按键消抖。

开始时的回弹时间和结束时的回弹时间一般为5~10ms,稳定时间一般为20ms,这里采用一个计数器,计数最大时间的为20ms,系统的晶振为50Mhz(换算成时间为20ns),20ms/20ns=1000000,所以计数器计数最大值为999999(从0开始计数)。当是系统检测到按键为低电平时,计数器开始计数,当系统检测到高电平时,对计数器清零。当计数到最大值时,让计数器保持值不变

然后再定义一个标志信号对按键消抖的稳定状态进行采集。当是计数器计数到最大值时,说明按键已经处于稳定状态。

RTL代码

module   key_shake
#(parameter     CNT_MAX = 20'd999_999//计数最大值,20ms
)
(input  wire            sys_clk     ,input  wire            sys_rst_n   ,input  wire            key_in      ,output reg             key_flag
);reg   [19:0]      cnt;always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)cnt <= 20'd0;else    if(key_in == 1'b1)cnt <= 20'd0;else if(cnt == CNT_MAX)cnt <= CNT_MAX;elsecnt <= cnt + 1'b1;always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)key_flag <= 1'b0;else if(cnt == CNT_MAX)key_flag <= 1'b1;elsekey_flag <= 1'b0;endmodule

testbench

`timescale  1ns/1ns
module  tb_key_shake();reg          sys_clk;
reg         sys_rst_n;
reg         key_in;
reg [7:0]   tb_cnt;
wire        key_flag;initial    beginsys_clk = 1'b0;sys_rst_n <= 1'b0;key_in <= 1'b1;#20sys_rst_n <= 1'b1;endalways    #10 sys_clk = ~sys_clk;//把按键消抖过程压缩至250个系统周期
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)tb_cnt <= 8'd0;else  if(tb_cnt == 8'd249)tb_cnt <= 8'd0;elsetb_cnt <= tb_cnt + 1'b1;//模拟按键抖动
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)tb_cnt <= 8'd0;else  if(tb_cnt <= 8'd24 || tb_cnt >= 8'd224)key_in <= 1'b1;else   if((tb_cnt <= 8'd74 && tb_cnt > 8'd24)||(tb_cnt <= 8'd224 && tb_cnt >= 8'd174))key_in <= {$random}%2;elsekey_in <= 1'b0;key_shake
#(.CNT_MAX(70)
)
key_shake_inst
(.sys_clk       (sys_clk),.sys_rst_n        (sys_rst_n),.key_in         (key_in),.key_flag       (key_flag)
);endmodule

仿真结果把按键按下时长缩短到250个系统时钟周期。定义一个计数器tb_cnt,计数最大值为249,然后模拟按键被按下的过程。过程如下图所示

modelsim仿真结果

由仿真结果得,每一次模拟按键的稳定状态都被标志信号key_flag采集到。
ps:(部分图片和学习教程由野火提供)

FPGA——按键消抖相关推荐

  1. stm32 工业按键检测_STM32单片机按键消抖和FPGA按键消抖大全

    写在前面: 物联网STM32入门 - 直播课程 - 创客学院​www.makeru.com.cn 按键去抖:由上图可以看出理想波形与实际波形之间是有区别的,实际波形在按下和释放的瞬间都有抖动的现象,抖 ...

  2. stm32硬件消抖_STM32单片机按键消抖和FPGA按键消抖大全

    原标题:STM32单片机按键消抖和FPGA按键消抖大全 写在前面: 按键去抖:由上图可以看出理想波形与实际波形之间是有区别的,实际波形在按下和释放的瞬间都有抖动的现象,抖动时间的长短和按键的机械特性有 ...

  3. FPGA按键消抖(高级篇)

    一. 硬件介绍 FPGA开发板 一个按键 一个led灯 二. 功能介绍 可以满足三种不同要求的消抖方式 通过led灯测试三种消抖方式 三. 消抖方式介绍 mode 0 : 按键按下消抖后,算一次. m ...

  4. FPGA编程按键消抖

    FPGA按键消抖 编写思路 1.按键消抖的基本原理 2.代码原理 3.代码部分 4.仿真代码编写 5.仿真 6.总结 一.按键消抖的基本原理 按键消抖,按下,松开存在毛刺,主要为了消除毛刺.通过稳定后 ...

  5. 【 FPGA 】按键消抖与LED灯流动小实验

    记录一个小实验吧,实验的目的是仅仅是塞塞牙缝而已,没其他意思,很简单. 功能:拨码开关控制led灯工作与否,拨码开关为on,led灯工作,否则不工作:导航按键up和down,也就是独立按键而已,控制l ...

  6. FPGA学习笔记---利用连续赋值语句延时功能实现按键消抖

    最近一直在学习FPGA,今天在学习延时语句时,发现了连续赋值的一个特点.在连续赋值语句中添加延时时,任何小于延迟值的输入变化都会被滤除而不会体现在输出上.比如  #10 B = A; 当A的变化小于1 ...

  7. [FPGA入门笔记](十):按键消抖实验

    简介 今天购买了AXLINX AX7020的开发板,从今天开始每一个例程都要做文档记录,为自己加油. 本实验,基于ALINX AX7020开发板,芯片为xc7z020clg400-2.开发板输入时钟为 ...

  8. FPGA VerilogHDL语言 数字钟 按键消抖

    1.描述 一个简单的基于FPGA的数字钟,语言用的是VerilogHDL,可以实现以下功能: 1. 数码管显示0-59(秒表) 2. 数码管显示:时-分-秒 3. 数码管显示时分秒并且可以设置时间(小 ...

  9. FPGA学习-Verilog实现独立按键消抖

    文章目录 前言 一.独立按键消抖原理 二.按键消抖程序实现(Verilog) 1.按键触发判断 2.计数器模块实现 3.按键状态更新 4.按键控制led亮灭 三.仿真测试文件编写 四.编译结果 前言 ...

  10. verilog基础-状态机之FPGA独立按键消抖设计与验证(熟练testbench的写法)

    独立按键消抖设计与验证 本实验主要是为了锻炼状态机的思维模式以及熟练掌握TB的写法 本节主要收获了:define的用法,另外就是,顶层的input在TB中是reg的真正含义,其实就是把激励当做寄存器来 ...

最新文章

  1. ubuntu server安装php mysql_Ubuntu Server 下Apache+MySQL+PHP安装
  2. VS2012及VS系列怎样屏蔽CMD窗口~
  3. 重游java(猜拳项目)
  4. signature=4bfbf257ebc393e8ee3071d531b76778,(Mannose).
  5. 2012-01-10 自己写的基于jquery的翻页效果
  6. mongodb python 存文件_Python保存MongoDB上的文件到本地的方法介绍
  7. php mvc 通过 htaccess 隐藏 index.php 或 index.php?arg=
  8. Android已申请动态权限报错,Android 读取或者写入U盘时,报错:Permission denied
  9. Autodesk Map3d的应用和开发
  10. java开发面试中经常问到的问题(2019年5月)
  11. oracle 两表关联查询
  12. jQuery 梁桐老师笔记 - 选择器
  13. 领扣LintCode算法问题答案-983. 棒球游戏
  14. 【LOJ6198】谢特(后缀自动机)(01Trie)(dsu on tree)
  15. 常用正则表达式大全(包含港澳台身份证等校验)
  16. linux安装tomcat,菜鸟教程
  17. 【Android折叠屏适配】基于AutoSize框架适配折叠屏并兼容多窗口模式
  18. [译] 3.泛型和子类型
  19. zip解压文件 删除文件和文件目录
  20. UV-ARC符合铁路应用EN 50317-2002标准,可用于动车组、高铁受电弓电火花检测

热门文章

  1. Python 数据处理 | 详解缩尾处理(winsorize)和代码实践
  2. Kotlin学习教程推荐
  3. Python源码保护
  4. 【python基础】windows下python环境版本更新教程
  5. 【Python程序设计(七)】文件和数据格式化
  6. 两个栈实现一个队列以及两个队列实现一个栈(Java)
  7. 正则表达式的语法及使用
  8. JS 判断字符串是否为空
  9. AFNetworking 2.0 来了
  10. Vue3 非常好用的中文文档以及一份 Vue 3 新文档学习笔记