简介

按键

按键是输入设备,一般来说,按键在没有按下的时候是高电平;当按键按下的时候,为低电平。

DE2-70 User Manual

Each switch provides a high logic level (3.3 volts) when it is not pressed, and provides a low logic level (0 volts) when depressed. Since the pushbutton switches are debounced, they are appropriate for use as clock or reset inputs in a circuit.

这里介绍到了按键抖动(Button Bouncing)和按键消抖(Button Debouncing)。

按键消抖

按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。

上图描述的是硬件的按键消抖。可见,消抖后,一次按键,只产生了一次电平变化。

这对我们接下来利用按键意义重大。

物理消抖

简单介绍下实现上图的消抖。

电容滤波

将电容并联在按键的两端,利用电容的放电的延时特性。将产生抖动的电平通过电容吸收掉。从而达到消抖的作用。

RS触发器

利用RS触发器来吸收按键的抖动。一旦有键按下,触发器立即翻转,触电的抖动便不会再对输出产生影响。

程序消抖

按键在FPGA中必不可少,我们需要利用按键对一些变量进行累加或累减。比如频率、分数等。

未消抖

在一开始的学习中,我们可能只用到了开关(switch),编写开关控制的程序类似于将开关当作一个布尔(Boolean)变量。

但是按键与开关不同,以下面这段代码为例,期望作用是 按键按下后,LED灯状态改变

module Test(
input sys_clk,
input rst_n,
input key,
output reg led
);
always@(posedge sys_clk or negedge rst_n)
begin
if(rst_n == 1'b0)
led <= 1'b0;
else if(key == 1'b0)
led <= ~led;
else
led <= led;
end
endmodule

然而,上板测试发现,LED状态灯一直处于不亮的状态。

假设,我们的时钟频率是50MHz,那么它的周期就是20ns

那么,在你按按钮的全过程中,按下的状态持续了多长时间呢?

显然,远大于20ns,所以LED会多次取反。所以这种简单粗暴的方法是不适合按键的。

消抖

我们刚刚的问题是,短时间内重复检测,从而多次执行了按键后的行为。

可以想到,给这个按键定个时:当有按键按下,计数器不断自增,若因为抖动,则计数器会清空,重新计数,当不抖动的时候,就会计满,此时才会判定为按键按下。

代码

// 定时器消除抖动
module key_filter(
input wire sys_clk, // 50M时钟
input wire sys_rst_n, // 复位信号,低电平有效
input wire key, // 按键输入 output reg key_flag, // 按键信号有效信号
output reg key_value // 消抖后的按键信号
); reg [31:0] delay_cnt; // 32位定时器
reg key_reg; always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n) begin
key_reg <= 1'b1;
delay_cnt <= 32'd0;
end
else begin
key_reg <= key;
if(key_reg != key) // 检测到按键状态发生变化(按下 或 释放)
delay_cnt <= 32'd1000000; // 计数器装载初始值(计数时间为20ms)
else if(key_reg == key) begin // 按键状态稳定时,计数器递减,开始20ms倒计时
if(delay_cnt > 32'd0) // 不稳定时,重新计时
delay_cnt <= delay_cnt - 1'b1;
else
delay_cnt <= delay_cnt;
end
end
end always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n) begin // 复位
key_flag <= 1'b0; // 无效
key_value <= 1'b1; // 高电平为未按下
end
else begin
if(delay_cnt == 32'd1) begin // 按键稳定状态维持了20ms
key_flag <= 1'b1; // 此时消抖过程结束,信号有效
key_value <= key; // 保存此时按键信号
end
else begin
key_flag <= 1'b0;
key_value <= key_value;
end
end
end endmodule

如此,我们再重新写下刚刚的未消抖程序。

module Test(
input sys_clk, // 系统时钟
input rst_n, // 复位信号,低电平有效
input key, // 按键信号
output reg led // LED灯
); wire key_value;
wire key_flag;
// 例化
key_filter key_filter_inst(
.sys_clk (sys_clk), // 50M时钟
.sys_rst_n (sys_rst_n), // 复位信号,低电平有效
.key (key), // 按键输入) .key_flag (key_flag), // 按键信号有效信号
.key_value (key_value) // 按键消抖后的数据
);
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
begin
led <= 1'b0;
end
else if(key_flag && (~key_value)) // 按键是否有效按下
begin
led <= ~led;
end
else
begin
led <= led;
end
end
endmodule

成功,按键可以控制LED灯亮与熄灭。仿真略。

这是简单的计时消抖,读者有兴趣可阅读学习状态机的方法

参考文献

[1] 按键的硬件消抖电路原理详解

[2] FPGA要按键实现四个数码管加减计数怎么搞?

[3] FPGA学习—按键控制

[4] DE2-70 User Manual

FPGA按键消抖的更多相关文章

  1. 09B-独立按键消抖实验02——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.复习按键的设计 2.用模块化设计的方式实现每次按下按键0,4个LED显示状态以二进制加法格式加1,每次按下按键1,4个LED显示状态以二进制加法格式减 ...

  2. 09A-独立按键消抖实验01——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.复习状态机的设计思想并以此为基础实现按键消抖 2.单bit异步信号同步化以及边沿检测 3.在激励文件中学会使用随机数发生函数$random 4.仿真模 ...

  3. 基于FPGA的数字秒表(数码管显示模块和按键消抖)实现

    本文主要是学习按键消抖和数码管动态显示,秒表显示什么的,个人认为,拿FPGA做秒表真是嫌钱多. 感谢 感谢学校和至芯科技,笔者专业最近去北京至芯科技培训交流了一周.老师的经验还是可以的,优化了自己的代 ...

  4. FPGA学习笔记(八)—— 状态机设计实例之独立按键消抖

    ###### [该随笔中部分内容转载自小梅哥] ######### 独立按键消抖自古以来在单片机和FPGA中都是个不可避免的问题,首先,解释一下什么叫做按键抖动,如图,按键在按下和松开的那个瞬间存在大 ...

  5. 按键消抖-----verilog

    实际系统中常用的按键大部分都是轻触式按键,如下图所示.该按键内部由一个弹簧片和两个固定触点组成,当弹簧片被按下,则两个固定触点接通,按键闭合.弹簧片松开,两个触点断开,按键也就断开了.根据这种按键的机 ...

  6. 按键消抖——task任务和仿真平台搭建

    一.按键抖动原理 按键抖动原理:按键存在一个反作用弹簧,因此当按下或者松开时均会产生额外的物理抖动,物理抖动会产生电平的抖动. 消抖方法:一般情况下,抖动的总时间会持续20ms以内,按下按键后,等20 ...

  7. Verilog HDL那些事_建模篇笔记(实验三:按键消抖)

    实验三:按键消抖 首先将按键消抖功能分成了两个模块,电平检查模块和10ms延迟模块.电平检测模块用来检测按键信号的变化(是否被按下),10ms延迟模块用来稳定电平检查模块的输入,进而稳定按键信号,防止 ...

  8. 【代码】verilog之:按键消抖

    此模块完美运行 /*-------------------------------------------------------------------------------------- -- ...

  9. 09自动售货机综设实验(含按键消抖,led和状态机)

    一设计功能 1.上次状态机的练习 2这次自动售货机综设 (一)对比两次的售货机 上次售货机的关键是画出状态转移图.明确输入分几种,输出是啥,有哪些状态.如下图所示 (二)系统或综合设计的经验: 既然这 ...

  10. 强化版按键消抖Verilog实现

    介绍:按键的物理结构导致了会有抖动现象的出现,判断按键是否真正按下,需要把抖动的部分滤波.根据经验可知,抖动一般在20ms内,所以常规的消抖方法是从变化沿出现时刻开始,延时20ms后判断按键的状态.这 ...

随机推荐

  1. antv x6 神奇的图片边框

    昨天才把html节点中的图片转成base格式的,今天就发现一个用户体验的问题:那么是啥呢?就是我从左侧的树形菜单中拖拽节点的时候(鼠标按下也是同样问题),发现节点的图片区域那里会出现一个边框,持续时间 ...

  2. #Powerbi函数学习 SELECTEDVALUE与ISFILTERED

    Power BI中的DAX函数ISFILTERED可以用来判断一个表或者一个列是否被筛选器所影响. 这个函数的语法很简单,就是ISFILTERED(<table_or_column_name&g ...

  3. [OS/Linux] Linux核心参数:net.core.somaxconn(高并发场景核心参数)

    0 序言 近期工作在搞压力测试,我负责开发维护的.基于sring-cloud-gateway的大数据网关微服务,其底层是基于spring-webflux-->reactor-netty--> ...

  4. 音视频八股文(9)-- flv的h264六层结构和aac六层结构

    flv介绍 FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式,由于其封装后的⾳视频⽂件体积⼩.封装简单等特点,⾮常适合于互联⽹上使⽤.⽬前主流的视频⽹站基本都⽀持FLV.采⽤FLV ...

  5. 2022-12-17:订单最多的客户。以下数据,结果输出3。请问sql语句如何写? DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `

    2022-12-17:订单最多的客户.以下数据,结果输出3.请问sql语句如何写? DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `or ...

  6. 2021-04-10:给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的 第一个节点。如果不相交,返回null。【要求】如果两个链表长度之和为N,时间复杂度请达到O(N),额外空间复杂度 请达到O(1)。

    2021-04-10:给定两个可能有环也可能无环的单链表,头节点head1和head2.请实现一个函数,如果两个链表相交,请返回相交的 第一个节点.如果不相交,返回null.[要求]如果两个链表长度之 ...

  7. 2021-07-31:给定数组father,大小为N,表示一共有N个节点,father[i] = j 表示点i的父亲是点j, father表示的树一定是一棵树而不是森林,给定数组values,大小为N

    2021-07-31:给定数组father,大小为N,表示一共有N个节点,father[i] = j 表示点i的父亲是点j, father表示的树一定是一棵树而不是森林,给定数组values,大小为N ...

  8. vue全家桶进阶之路48:Vue3 跨域配置devServer的参数和设置

    devServer 是一个用于配置开发服务器的选项对象.它可以用来配置服务器的各种选项,例如代理,端口号,HTTPS 等. 以下是一些常用的 devServer 参数和设置: port:指定开发服务器 ...

  9. vue全家桶进阶之路20:ECMAScript脚本语言规范

    ECMAScript(简称 ES)是一种由 Ecma 国际组织定义的脚本语言标准,它定义了 JavaScript 语言的基本规范和特性.JavaScript 是一种基于 ECMAScript 标准的编 ...

  10. GPT大语言模型Vicuna本地化部署实践(效果秒杀Alpaca)

    背景 上一篇文章<GPT大语言模型Alpaca-lora本地化部署实践>介绍了斯坦福大学的Alpaca-lora模型的本地化部署,并验证了实际的推理效果. 总体感觉其实并不是特别理想,原始 ...