【按键消抖】基于FPGA的按键消抖模块开发
1.软件版本
QUARTUSII8.1
Modelsim6.5d
2.系统源码
module tops(i_clk, //100Mi_rst, //系统复位功能,高电平复位,如果不使用这个角,那么一直接低电平即可i_input1, //按键输入1i_input2, //按键输入2o_output1,//脉冲输出1o_output2,//脉冲输出2test_cnt1,//测试计数器1test_cnt2,//测试计数器2test_enable1,//测试使能信号test_enable2 //测试使能信号);//100M等于10ns,所以1s中就是10_000_000个100M时钟周期
//仿真的时候,为了方便看到仿真效果,所以将10_000_000改为一个较小的值10_000
//parameter NUM = 32'd10000000; //实际用
parameter NUM = 32'd100; //仿真用 input i_clk;//100M为10ns
input i_rst;
input i_input1;
input i_input2;output o_output1;
output o_output2;
output[31:0]test_cnt1;
output[31:0]test_cnt2;
output test_enable1;
output test_enable2;reg o_output1 = 1'b0;
reg o_output2 = 1'b0;
reg test_enable1 = 1'b0;
reg test_enable2 = 1'b0;
reg[31:0]cnt1 = 32'd0;
reg[31:0]cnt2 = 32'd0;reg flag1 = 1'b1;
reg flag2 = 1'b1;always @(posedge i_clk or posedge i_rst)//处理主要进程
beginif(i_rst)//系统复位begintest_enable1 <= 1'b0;//定义使能信号test_enable2 <= 1'b0;//定义使能信号 cnt1 <= 32'd0; cnt2 <= 32'd0; flag1 <= 1'b1; flag2 <= 1'b1; end
else beginif(i_input1 == 1'b0 & i_input2 == 1'b1 & flag1 == 1'b1)//按下按键1,不按按键2begin//1s钟内使能维持10_000_000个时钟周期 cnt2 <= 32'd0;if(cnt1 < NUM)//不到1sbegincnt1 <= cnt1 + 32'd1;test_enable1 <= 1'b1;//输出1个脉冲,//按下按钮后,持续1s钟test_enable2 <= 1'b0; flag1 <= 1'b1;//用来屏蔽第二个按钮 flag2 <= 1'b0;//用来屏蔽第二个按钮 endif(cnt1 == NUM)//到1s,停止输出begincnt1 <= cnt1; test_enable1 <= 1'b0;test_enable2 <= 1'b0; flag1 <= 1'b1; flag2 <= 1'b1; end endif(i_input1 == 1'b1 & i_input2 == 1'b0 & flag2 == 1'b1)//按下按键2,不按按键1begin//50s钟内使能维持cnt1 <= 32'd0;if(cnt2 < 50*NUM)//不到50sbegincnt2 <= cnt2 + 32'd1;test_enable1 <= 1'b0;//输出1个脉冲,//按下按钮后,持续1s钟test_enable2 <= 1'b1; flag1 <= 1'b0;//用来屏蔽第1个按钮 flag2 <= 1'b1;//用来屏蔽第1个按钮 endif(cnt2 == 50*NUM)//到1s,停止输出begincnt2 <= cnt2; test_enable1 <= 1'b0;test_enable2 <= 1'b0; flag1 <= 1'b1; flag2 <= 1'b1; end endif(i_input1 == 1'b1 & i_input2 == 1'b1)//不发生按键操作begincnt1 <= 32'd0;cnt2 <= 32'd0;endend
end
assign test_cnt1 = cnt1;
assign test_cnt2 = cnt2;//下面根据是能信号,输出脉冲//定义两个脉冲计数器
reg[31:0]pcnt1 = 32'd0;
reg[31:0]pcnt2 = 32'd0;
always @(posedge i_clk or posedge i_rst)//处理主要进程
beginif(i_rst)//系统复位beginpcnt1 <= 32'd0;pcnt2 <= 32'd0;o_output1 <= 1'b0;o_output2 <= 1'b0; end
else beginif(test_enable1 == 1'b1)//1s内一个100ns的脉冲,即1s内发生一个10M的脉冲信号beginpcnt1 <= pcnt1 + 32'd1;if(pcnt1 < 32'd10)begino_output1 <= 1'b1;//产生100ns的信号endelse begino_output1 <= 1'b0;endendelse beginpcnt1 <= 32'd0;o_output1 <= 1'b0; endif(test_enable2 == 1'b1)//50s内50个100ns的脉冲,即1s内发生一个10M的脉冲信号beginif(pcnt2 == NUM-1)beginpcnt2 <= 32'd0;endelse beginpcnt2 <= pcnt2 + 32'd1;end if(pcnt2 < 32'd10)begino_output2 <= 1'b1;//产生100ns的信号endelse begino_output2 <= 1'b0;endendelse beginpcnt2 <= 32'd0;o_output2 <= 1'b0; end end
endendmodule
3.仿真结论
QII自带仿真说明:
我们将波形进行局部放大:
第一部分,可以看到input1为高,input2为低,说明2按下了,所以output2产生连续的50个脉冲。
第二部分,input1为低,第一个按键按下了,所以只产生一个高电平信号
第三部分,还是第一个按钮被按下了,所以只产生一个脉冲。
Modelsim仿真说明:
我们将仿真进行局部放大:
按键一按下:
按键二被按下;
还是按键二被按下。
A35-09
【按键消抖】基于FPGA的按键消抖模块开发相关推荐
- 基于赫优讯COMX嵌入式模块开发EtherCAT从站设备
摘要:随着实时工业以太网技术的发展,在最新版本的IEC61158 Ed.4标准中已经包含了Profinet,EtherCAT,Ethernet/IP,SERCOS III等11种实时以太网行规集.以n ...
- 京微齐力:基于HMEP060的心率血氧模块开发(1:FPGA发送多位指令)
目录 日常·唠嗑: 实验结果 一.硬件解析 1.国产FPGA:HMEP060 2.MAX30102心率传感器模块 二.程序设计 1.波特率计算(25MHz时钟) 2.顶层模块 3.子模块 三.工程获取 ...
- 基于FPGA的图像增强系统的verilog开发(3000+字)
在进行FPGA设计的时候,我们需要主要以下几个方面: 第一:关于图片大小的统一 这里,我们主要对你的直方图均衡算法进行FPGA的硬件的实现,这里,我们将图像的大小统一为100*100,这样的话,方便后 ...
- 基于FPGA的DES加解密系统开发(5000字详细介绍欢迎订阅)
1.问题描述: DES是个块加密法,按64位块长加密数据,即把64位明文作为DES的输入,产生64位密文输出.加密与解密使用相同的算法和密钥,只是稍作改变.密钥长度为56位.基本原理图如1. 图1 ...
- 基于FPGA的数字交通红绿灯Verilog开发Modelsim仿真
Control: Counter: JiaoTongDeng: 附:http://www.jh-tec.cn/archives/7160
- 基于FPGA的数字电子密码锁Verilog开发Modelsim仿真
部分参考代码 (末尾附文件) module MiMaSuo (input clk,input rst_n,input ling,input yi,input er,input san,input si ...
- 基于FPGA的自动小车控制设计Verilog开发
Control: XiaoChe: 附:http://www.jh-tec.cn/archives/7176
- 基于FPGA的自动售货机Verilog开发Modelsim仿真
部分参考代码 (末尾附文件) module Sell(input clk,input reset_n,input yiyuan_set,input wuyuan_set,input shiyuan_s ...
- 基于FPGA的QPSK调制系统verilog开发
目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础 正交相移键控(Quadrature Phase Shift Keying,QPSK)是一种数字调制方式.它分为绝对相移和相对相移两种.由于 ...
最新文章
- 负载均衡算法-权重轮询均衡
- 精确微妙计时minicom 源码节选
- 密码强弱度检测万能插件
- 文件创建和删除命令:touch、rm
- java上传文件至nas_使用JCIFS上传文件至NAS设备(Logon failure: unknown user name or bad password)解决...
- Silverlight实用窍门系列:51.Silverlight页面控件的放大缩小、Silverlight和Html控件的互相操作...
- Python学习笔记_1_基础_2:数据运算、bytes数据类型、.pyc文件(什么鬼)
- 2018/7/9-纪中某B组题【jzoj1503,jzoj1158,jzoj1161】
- 【机器学习】机器学习用到的常用术语
- 麦克风阵列原理(转载)
- mysql一张表能存多少条数据不影响性能_MySQL|优化案例两则
- 基于python的图书管理系统设计与实现论文_图书馆管理系统的设计与实现毕业论文...
- 直播平台常见直播礼物介绍
- java和C程序员工资待遇差别大吗
- 英语每日阅读---8、VOA慢速英语(翻译+字幕+讲解):脸肓症患者记不住别人的脸
- 超简单集成华为HMS Core MLKit 机器学习服务银行卡识别SDK,一键实现银行卡绑定
- android 各类demo链接
- python语言中的单行注释语句_Python入门基础系列(五)——单行和多行注释
- 冒泡排序(Bubble Sort)
- Python: scikit-image 图像的基本操作