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的按键消抖模块开发相关推荐

  1. 基于赫优讯COMX嵌入式模块开发EtherCAT从站设备

    摘要:随着实时工业以太网技术的发展,在最新版本的IEC61158 Ed.4标准中已经包含了Profinet,EtherCAT,Ethernet/IP,SERCOS III等11种实时以太网行规集.以n ...

  2. 京微齐力:基于HMEP060的心率血氧模块开发(1:FPGA发送多位指令)

    目录 日常·唠嗑: 实验结果 一.硬件解析 1.国产FPGA:HMEP060 2.MAX30102心率传感器模块 二.程序设计 1.波特率计算(25MHz时钟) 2.顶层模块 3.子模块 三.工程获取 ...

  3. 基于FPGA的图像增强系统的verilog开发(3000+字)

    在进行FPGA设计的时候,我们需要主要以下几个方面: 第一:关于图片大小的统一 这里,我们主要对你的直方图均衡算法进行FPGA的硬件的实现,这里,我们将图像的大小统一为100*100,这样的话,方便后 ...

  4. 基于FPGA的DES加解密系统开发(5000字详细介绍欢迎订阅)

    1.问题描述: DES是个块加密法,按64位块长加密数据,即把64位明文作为DES的输入,产生64位密文输出.加密与解密使用相同的算法和密钥,只是稍作改变.密钥长度为56位.基本原理图如1. 图1  ...

  5. 基于FPGA的数字交通红绿灯Verilog开发Modelsim仿真

    Control: Counter: JiaoTongDeng: 附:http://www.jh-tec.cn/archives/7160

  6. 基于FPGA的数字电子密码锁Verilog开发Modelsim仿真

    部分参考代码 (末尾附文件) module MiMaSuo (input clk,input rst_n,input ling,input yi,input er,input san,input si ...

  7. 基于FPGA的自动小车控制设计Verilog开发

    Control: XiaoChe: 附:http://www.jh-tec.cn/archives/7176

  8. 基于FPGA的自动售货机Verilog开发Modelsim仿真

    部分参考代码 (末尾附文件) module Sell(input clk,input reset_n,input yiyuan_set,input wuyuan_set,input shiyuan_s ...

  9. 基于FPGA的QPSK调制系统verilog开发

    目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础 正交相移键控(Quadrature Phase Shift Keying,QPSK)是一种数字调制方式.它分为绝对相移和相对相移两种.由于 ...

最新文章

  1. 负载均衡算法-权重轮询均衡
  2. 精确微妙计时minicom 源码节选
  3. 密码强弱度检测万能插件
  4. 文件创建和删除命令:touch、rm
  5. java上传文件至nas_使用JCIFS上传文件至NAS设备(Logon failure: unknown user name or bad password)解决...
  6. Silverlight实用窍门系列:51.Silverlight页面控件的放大缩小、Silverlight和Html控件的互相操作...
  7. Python学习笔记_1_基础_2:数据运算、bytes数据类型、.pyc文件(什么鬼)
  8. 2018/7/9-纪中某B组题【jzoj1503,jzoj1158,jzoj1161】
  9. 【机器学习】机器学习用到的常用术语
  10. 麦克风阵列原理(转载)
  11. mysql一张表能存多少条数据不影响性能_MySQL|优化案例两则
  12. 基于python的图书管理系统设计与实现论文_图书馆管理系统的设计与实现毕业论文...
  13. 直播平台常见直播礼物介绍
  14. java和C程序员工资待遇差别大吗
  15. 英语每日阅读---8、VOA慢速英语(翻译+字幕+讲解):脸肓症患者记不住别人的脸
  16. 超简单集成华为HMS Core MLKit 机器学习服务银行卡识别SDK,一键实现银行卡绑定
  17. android 各类demo链接
  18. python语言中的单行注释语句_Python入门基础系列(五)——单行和多行注释
  19. 冒泡排序(Bubble Sort)
  20. Python: scikit-image 图像的基本操作

热门文章

  1. 卷径计算详解(通过卷绕的膜长和膜厚进行计算)
  2. 串口 PLC 编程FAQ
  3. 虚拟机为域环境下的所有计算机设置统一壁纸(第二节)
  4. 「认识AI:人工智能如何赋能商业」【02】人工智能规划
  5. 如何识别和应对庄家洗盘的手法
  6. python(5) softmax回归实例
  7. VS 如何使用外部程序调试dll程序
  8. 联想 Y7000拯救者 家庭版 Windows自动跟新永久关闭
  9. 广大电脑朋友,请注意健康!
  10. 1.3数据库系统结构及组成(三级模式结构)