按键消抖Verilog
时钟频率为50MHz,从0开始计数记到999_999时为20ms,当key_in为低电平时cnt_20ms开始计数,当计数到999_998时,key_flag输出一个周期的脉冲信号,cnt_20ms保持为999_999(若计数到999_999时才输出脉冲的画,当中间停留时间太长就会导致输出多个脉冲周期,也是非常不好的一种现象)。
Verilog代码为
module key_filter
#(parameter CNT_MAX=20'd999_999)
(input wire sys_clk,input wire sys_rst_n,input wire key_in,output reg key_flag);reg [19:0]cnt_20ms;always@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n==1'b0)cnt_20ms<=20'd0;else if(key_in==1'b1)cnt_20ms<=20'd0;else if(cnt_20ms==CNT_MAX)cnt_20ms<=CNT_MAX;elsecnt_20ms<=cnt_20ms+20'd1;endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n==1'b0)key_flag<=1'd0;else if(cnt_20ms==(CNT_MAX-20'd1))key_flag<=1'd1;elsekey_flag<=1'd0;end
endmodule
仿真测试的时候用一个tb_cnt来模拟按键的抖动,当 tb_cnt在0~19、169~249之间时保持一个高电平,在69~149时保持一个低电平,在16~69、149~169之间产生随机数来模拟按键的抖动。
则仿真测试代码为
`timescale 1ns / 1nsmodule tb_key_filter();reg sys_clk;
reg sys_rst_n;
reg key_in;
reg [7:0]tb_cnt;
wire key_flag;initialbeginsys_clk=1'b1;sys_rst_n<=1'b0;#20sys_rst_n<=1'b1;endalways #10 sys_clk<=~sys_clk;always@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n==1'b0)tb_cnt<=8'd0;else if(tb_cnt==8'd249)tb_cnt<=8'd0;elsetb_cnt<=tb_cnt+2'd1;end
always@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n==1'b0)key_in<=1'b1;else if((tb_cnt>=8'd19)&&(tb_cnt<=8'd69)||(tb_cnt>=8'd149)&&(tb_cnt<=8'd169))key_in<={$random}%2;else if((tb_cnt<8'd19)||(tb_cnt>8'd169))key_in<=1'b1;elsekey_in<=1'b0;end key_filter
#(.CNT_MAX(20'd50))
key_filter_inst
(
.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
.key_in(key_in),
.key_flag(key_flag));endmodule
vivado仿真的波形图
计数到最大值减一的时候产生一个时钟周期的脉冲。
模拟按键消抖
按键消抖Verilog相关推荐
- 【Verilog HDL 训练】第 09 天(按键消抖)
5月7日 按键防抖 1. 用verilog实现按键抖动消除电路,抖动小于15ms,输入时钟12MHz. 在编写Verilog代码之前,先分析下一些前提问题,首先是几个按键(1个,多个),我们以1个和三 ...
- Verilog功能模块 —— 按键消抖
一. 什么是按键消抖 按键消抖_百度百科 (baidu.com) 按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断 ...
- 基于verilog按键消抖设计
关于键盘的基础知识,我就以下面的一点资料带过,因为这个实在是再基础不过的东西了.然后我引两篇我自己的博文,都是关于按键消抖的,代码也正是同目录下project里的.这两篇博文都是ednchina的博客 ...
- Verilog中按键消抖检测的实现
Verilog按键消抖是FPGA学习时的一个入门教程,为避免眼高手低,还是再次分析与记录一下.此处着重介绍按键消抖的基本原理,对按键消抖与检测的关键技术进行分析,并进行功能仿真. 一.按键消抖基本原理 ...
- c语言实现按键的抖动与消除,【Verilog HDL 训练】第 09 天(按键消抖)
5月7日 按键防抖 1. 用verilog实现按键抖动消除电路,抖动小于15ms,输入时钟12MHz. 在编写Verilog代码之前,先分析下一些前提问题,首先是几个按键(1个,多个),我们以1个和三 ...
- FPGA学习-Verilog实现独立按键消抖
文章目录 前言 一.独立按键消抖原理 二.按键消抖程序实现(Verilog) 1.按键触发判断 2.计数器模块实现 3.按键状态更新 4.按键控制led亮灭 三.仿真测试文件编写 四.编译结果 前言 ...
- Verilog实现4位按键消抖,分别控制一个LED
Verilog实现4位按键消抖,分别控制一个LED 代码思路(完整代码在后) 完整代码 参考:(主要是第一篇,第二篇不严谨) <按键消抖与LED控制>实验的个人思考与总结 Verilog实 ...
- verilog基础-状态机之FPGA独立按键消抖设计与验证(熟练testbench的写法)
独立按键消抖设计与验证 本实验主要是为了锻炼状态机的思维模式以及熟练掌握TB的写法 本节主要收获了:define的用法,另外就是,顶层的input在TB中是reg的真正含义,其实就是把激励当做寄存器来 ...
- Verilog实现独立按键消抖(状态机)
本文参考小梅哥的独立按键消抖视频 1,实验原理: 这里是黑金开发板教程中的图,可以看出,按键未按下时的状态是高电平,按下为低电平.下边是小梅哥画的图解. 因为是机械按键,按下时候有一个不稳定的抖动期, ...
- verilog之按键消抖的理解
按键在按下时会产生抖动,释放时也会产生抖动,所以在设计键盘扫描程序时必须考虑按键的消抖,我们一般只考虑按下时的抖动,而放弃对释放时抖动的消抖.抖动时间一般为20ms左右.按下的最终结果是低电平. 按键 ...
最新文章
- Java中的数据结构
- 特别篇 :从 0 开始创作云原生应用 (殷达)
- OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结
- 《MySQL——如何解决一主多从的读写分离的过期读问题》
- leetcode 645. 错误的集合
- oracle只读事物,oracle的只读事务
- 第一行代码(第二版)全书代码下载
- Mysql数据库——高级用法(视图、事务、索引、自连接、用户管理)
- [区块链] 密码学——Merkle 树
- 排查DHCP服务器故障
- 有关Altera 的CPLD工程编译报错的解决方法
- 2021 泰迪杯 A 题思路
- 解决传奇hero引擎和登陆器不配套的方法
- WPS和Office 字体乱码问题
- 信捷XC PLC与施耐德ATV12变频器通讯程序
- [Codeforces1155F][DP]Delivery Oligopoly
- vue中forEach跳出循环的问题,以及for循环
- 网络摄像头IPC国标GB28181协议国标安防视频流媒体平台EasyGBS视频流不上线排查步骤
- PTA:最佳情侣身高差 (10分)(c++版)
- 二次判别分析(QDA)和Python实现