《FPGA全程进阶---实战演练》第七章 让按键恢复平静

1基础理论部分

A:“怎么按键按下去之后,结果不正常?”,B:“按键你消抖了吗?”A:“消什么抖,还要消抖?”,  B:“先检测按键变化,然后消抖过滤波动信号,最后输出稳定信号”,A:“我好像漏掉了什么。。。。。”。

正如上述所说,小小一个按键,里面学问也是较多的。对于按键,无论您是学什么开发板或者用什么开发板或者自己开发板子,按键资源是必不可少的,可能是整个工程中算是用到比较多的,这也是人机工程交互最直接的一个例子。下图7.1是一个常用的按键。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静《FPGA全程进阶---实战演练》第七章 让按键恢复平静

图7.1 按键

在使用的按键中,用的最多的是机械弹性按键,当机械触点断开,闭合时,由于机械触点的弹性作用,一个按键开关不会马上稳定地接通,断开时也不会一下子断开,所以这导致人在按键的过程中,会导致一连串的抖动,这样的抖动如果不及时处理,若是被捕获到,那么危害也是可想而知的。如图7.2是一个抖动的直观图。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

图7.2 按键抖动

由按键的机械特性决定,一般为5~10ms,为了保持最大稳定,可以选择10ms,这足以应对正常人按键的频率了。按键消抖有两种方法,一种是硬件消抖,一种是软件消抖;图7.3是硬件消抖电路,利用两个与非门的组合电路被称为双稳态电路,经过双稳态电路可以输出稳定的波形,起到滤波作用。

在数字系统中,一般常用软件消抖,这个带来的好处是可以节约PCB的成本和空间,利用软件消抖只需一个延时操作即可,操作不麻烦。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

图7.3 硬件消抖

2 Verilog代码实现部分

按照图7.4中所示的,可以进行10ms延时即可,对于人的按键完全满足要求。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

图7.4 延时示意图

实现步骤:按键检测------延时------输出有效键值

  封装之后的模块端口声明:

端口名

功能

clk

时钟

50MHz

rst_n

复位

初始为0

key_in

输入按键

初始值全为高电平

key_valid

输出有效值

按下的按键为高电平,其他为低电平

key_flag

输出使能值,作为和下一个模块沟通的

高电平

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

注意这种模块的书写格式,可以很方便的去更改相关的参数,达到最大化的移植。只需更改key_width就可以进行对按键数目的更改。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

在进行计数的时候,有相应的条件,即当有键按下时才会计数,否则停止计数,这样可以节省资源。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

产生使能部分,方便对下一个模块的使能,能够进行良好的沟通。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

3 Modelsim仿真部分

3.1 Testbench测试脚本程序:

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

上述仍然是时钟和复位task模块。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

上述是模仿按键抖动的测试程序,70行到79行模拟按键刚按下时的抖动,80行输出稳定值,紧接着81行到93行是松开时抖动的情况。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

上述是运行各个模块,并输入模拟按键值。

3.2 仿真结果:

图7.5是仿真结果图,可以看到捕获到的有效信号和捕获使能信号,最终按键松开所有值恢复到高阻态。图7.6是脚本测试输出文件。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

图7.5 仿真结果

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

图7.6 测试脚本输出

4 联合测试部分

对于按键测试部分,将前面的LED部分和本节的按键进行连接即可,由按键产生的有效信号没有直接送给LED模块,而是加入一个LED_control模块用来对按键操纵LED的编码,实现的功能是按键按下LED发光,再次按下,熄灭。此部分代码在EX5_LED中。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

按键key_valid信号接入led_control模块。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

上述是实现按键对LED的编解码操作。

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

在key_led_top模块将各个信号进行连接。最终实现的RTL视图如下图7.7所示.

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

图7.7 RTL视图

上一篇:删除正在登录的SQL账号


下一篇:MySQL 5.6 & 5.7最优配置文件模板