FPGA搭积木之按键消抖(改进版)

news2024/12/25 12:52:28

目录

1.前言

2.回顾之前的设计

3.基于读者思路的设计

4.ModelSim仿真


1.前言

  昨天分享的关于FPGA对机械按键消抖的设计,有读者指出了其中的不足,并给出了他的思路。今天就读者的设计思路,来再做一个按键消抖模块。这个程序大概是大学的时候写的,当时才开始学,没考虑那么多。现在开始写博客,才陆续把以前写过的东西翻出来、分享。首先感谢这位读者,给我提出意见,学习的时候就是要多互相交流才能进步。大家对文章有问题,欢迎来和我讨论。

2.回顾之前的设计

  之前的按键消抖模块链接

按键消抖过程

  之前的设计思路是,在检测到按键稳定时,延迟20ms再进行采样,然后得到稳定的按键信号。但是有读者说了,这样处理,按下去至少20ms才会生效,对于年轻人来说可能会明显的感觉到延迟,这样设计似乎更适合老年人哈哈哈哈。不过,该方法的一个好处就是,获取的按键值是稳定后的,可以避免一些误触,或者由于抖动之类的导致按键闭合,影响判断。

之前设计的消抖模块如下图所示,如果把延迟时间设置为5ms,一方面迟滞感就不会那么强,另一方面按键也还是稳定了一段时间才进行采样,避免了亚稳态。具体延迟时间可能要根据需求去设置,思路是这么个思路。

按键消抖过程

按键消抖过程

3.基于读者思路的设计

(1)在检测到按键按下时,按键即刻生效,输出一个时钟高电平脉冲。
(2)按键生效时,设置一个标志位;并开始计时20ms
(3)在计时没有完成之前,对按键作输入无效处理。
(4)计时结束,更改标志位状态,按键输入重新有效。
代码如下:

`timescale 1ns / 1ps
module key_debounce #(parameter DELAY_CNT = 'd1_000_000)//50M时钟时的20ms计数值
(    //防抖模块端口声明
      
      input  clk   ,//50M
      input  rst_n  ,
      input  key   , //定义按键输入
      
      output  key_out  //定义按键输出
);

wire        key_edge_pluse ;
wire [$clog2(DELAY_CNT) - 1:0] cnt    ;
wire        cnt_last  ;
reg         key_flag  ;

edge_detection #(.POSEDGE(1'b0))
u_edge_detection (
 .clk   (clk   ), 
 .edge_din     (key   ),
 .edge_pluse     (key_edge_pluse )
);

assign key_out = key_edge_pluse & ~key_flag;

always @ (posedge clk or negedge rst_n) begin
 if (!rst_n) 
  key_flag <= 1'b0;
 else if(key_edge_pluse)
  key_flag <= 1'b1;//检测到按键按下后,在计数结束前后续按键值无效
 else if(cnt_last)
  key_flag <= 1'b0;
end

counter #(.CNT_NUM(DELAY_CNT),
  .ADD(1'b1))
u_counter(
 .clk  (clk  ), 
 .rst_n  (rst_n  ),
 .En_cnt  (key_flag ),      
 .cnt  (cnt  ), 
 .cnt_last (cnt_last )
);
endmodule

其中使用到的计数器模块和边沿检测请参考之前的设计。
FPGA搭积木之计数器
FPGA搭积木之边沿检测电路

4.ModelSim仿真

`timescale 1ns / 1ps
module key_debounce_tb;
parameter T = 20;
reg  clk  ;
reg  rst_n ;
reg  key  ;
wire key_out ;


key_debounce #(.DELAY_CNT('d2_0))//为了减小仿真时间,将延时减小
u_key_debounce(
.clk    (clk    ), 
.rst_n  (rst_n  ),
.key    (key    ), 
.key_out(key_out) 
);

always #(T/2) clk = ~clk;

initial begin
 clk = 1'b0;
 rst_n = 1'b0;
 key = 1'b1;
 #(10*T)
 rst_n = 1'b1;
 //模拟按键抖动,实际只有一次按键输入
 #(T)
 key = 1'b0;
 #(T)
 key = 1'b1;
 #(T)
 key = 1'b0;
 #(3*T)
 key = 1'b1;
 #(T)
 key = 1'b0;
 #(5*T)
 key = 1'b1;
 #(T)
 key = 1'b0;
 #(T)
 key = 1'b1;
 //模拟第二次按键抖动
 #(20*T)
 key = 1'b0;
 #(T)
 key = 1'b1;
 #(2*T)
 key = 1'b0;
 #(T)
 key = 1'b1;
 #(T)
 key = 1'b0;
 #(5*T)
 key = 1'b1;
 #(T)
 key = 1'b0;
 #(T)
 key = 1'b1;
 
end
endmodule

为了减小仿真时间,例化按键消抖模块时,将延时计数器值改小,方便验证逻辑。然后模拟两次按键输入。

仿真

仿真

从仿真波形可以看到,只输出了两次按键值。   将设计参数化,放入自己的代码库,供有需要时直接使用。相比于官方提供的封闭的IP核,自己设计的IP核虽然性能比不过,但是更灵活,方便进行个性化修改。FPGA其实就像搭积木一样,只要自己的代码库够丰富,设计只会越来越轻松! 此合集持续分享一些笔者自己设计的可复用硬件模块:FPGA搭积木

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

arping 一键检测网络设备连通性(KALI工具系列二)

目录 1、KALI LINUX简介 2、arping工具简介 3、在KALI中使用arping 3.1 目标主机IP&#xff08;win&#xff09; 3.2 KALI的IP 4、操作示例 4.1 IP测试 4.2 ARP测试 4.3 根据存活情况返回 5、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发…

建投数据收获客户感谢信

建投数据自2021年提出“以数据为核心的智能科技服务商”&#xff0c;并一直在为“成为国内领先的数字化转型合作伙伴”而努力&#xff0c;在赋能行业客户创造更大价值的同时&#xff0c;也陆续收到来自客户的肯定。 建投数据始终践行“成就客户&#xff0c;创新为要&#xff0…

科技引领乡村振兴新潮流:运用现代信息技术手段,提升农业生产和乡村管理效率,打造智慧化、现代化的美丽乡村

一、引言 随着科技的不断进步&#xff0c;现代信息技术已经渗透到社会的各个领域&#xff0c;成为推动社会发展的重要力量。在乡村振兴战略的背景下&#xff0c;科技的力量同样不容忽视。本文旨在探讨如何运用现代信息技术手段&#xff0c;提升农业生产和乡村管理效率&#xf…

2024 年 电工杯(B题)大学生数学建模挑战赛 | 平衡膳食食谱 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 CS团队倾注了大量时间和心血&#xff0c;深入挖掘解决方案。通…

k8s遇到的错误记录

时隔四年有开始重新鼓捣k8s了&#xff0c;重新安装后遇到的错误记录如下&#xff1a; Error: Package: kubelet-1.14.0-0.x86_64 (kubernetes) Requires: kubernetes-cni 0.7.5 Available: kubernetes-cni-0.3.0.1-0.07a8a2.x86_64 (kubernetes) …

自学有点吃力,需不需要报六西格玛培训班学习?

在追求职业精进和企业管理优化的道路上&#xff0c;六西格玛管理方法论已经成为不少企业和个人的首选。然而&#xff0c;自学六西格玛往往伴随着一系列挑战&#xff0c;让不少学习者感到吃力。面对这样的困境&#xff0c;我们不禁要问&#xff1a;自学有点吃力&#xff0c;到底…

Docker 部署Jenkins

1、运行镜像 docker run --namejenkins \--restartalways \--privilegedtrue \-u root \-p 8080:8080 \-p 50000:50000 \-v /home/docker/jenkins/jenkins_home:/var/jenkins_home \-v /usr/bin/docker:/usr/bin/docker \-v /var/run/docker.sock:/var/run/docker.sock \-e TZ…

二十一、openlayers官网示例Custom Controls解析——自定义控件扩展Control类

官网demo地址&#xff1a; Custom Controls 这个示例讲的是如何自定义控件 首先创建了一个新的类继承了原本的Control&#xff0c;新增了一个button元素&#xff0c;然后调用了super方法将参数传给了父类。 const button document.createElement("button");button.…

《Rust奇幻之旅:从Java和C++开启》第1章Hello world 2/5

讲动人的故事,写懂人的代码 很多程序员都在自学Rust。 🤕但Rust的学习曲线是真的陡,让人有点儿怵头。 程序员工作压力大,能用来自学新东西的时间简直就是凤毛麟角。 📕目前,在豆瓣上有7本Rust入门同类书。它们虽有高分评价,但仍存在不足。 首先,就是它们介绍的Rust新…

[猫头虎分享21天微信小程序基础入门教程] 第11天:小程序的动态数据展示与实时更新

[猫头虎分享21天微信小程序基础入门教程] 第11天&#xff1a;小程序的动态数据展示与实时更新 — 第11天&#xff1a;小程序的动态数据展示与实时更新 &#x1f4ca; 自我介绍 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师。今天我们继续微信小程序的学习&a…

sCrypt受邀参加#Unlock Bitcoin活动

由Antalpha HackerHouse主办的#Unlock Bitcoin活动将于2024年6月16日至18日在美国拉斯维加斯举办&#xff0c;sCrypt创始人兼CEO刘晓晖将作为演讲嘉宾出席本次活动。 刘晓晖本次演讲的主题是&#xff1a; 《Bitcoin Smart Contracts》 请登录以下网址报名参会&#xff1a; ht…

安全牛专访美创CTO周杰:数据安全进入体系化建设阶段,数据安全管理平台应用正当时

在数字经济时代&#xff0c;数据作为生产要素发挥越来越重要的作用&#xff0c;数据安全也得到了前所未有的重视。而随着数据安全能力已经进入了相对体系化建设的阶段&#xff0c;更加智能化、协同化的新一代数据安全管理平台得到了各类企业组织的广泛关注。 本期牛人访谈邀请到…

新火种AI|复旦团队在“冷冻人脑”领域获得重大进展!人工智能是否会对此形成助力?

​在低温医学领域&#xff0c;“冷冻人脑”技术的研究和突破既是重点&#xff0c;也是难点。因为这项技术关乎着人类是否可以取得一个令人瞩目的突破——人类的生命是否能够得到延续。 早几年&#xff0c;诸如“利用人体冷冻技术将身患绝症的病人保存十几年&#xff0c;几十年…

大疆上云API本地部署与飞机上云

文章目录 前言一、安装基础环境1. EMQX 安装(版本4.4.0)2. MySql 安装(版本8.0.26)3. Redis 安装 二、部署后端&#xff08;JDK必须11及以上&#xff09;三、部署前端四、成为大疆开发者五、飞机注册上云六、绑定飞机七、无人机状态查看 前言 大疆上云API官方文档有些写的不是…

Python条件分支与循环

大家好&#xff0c;当涉及到编写高效和灵活的程序时&#xff0c;条件分支和循环是 Python 中至关重要的概念。它们允许我们根据不同的条件执行不同的代码块&#xff0c;或者重复执行一组语句。条件分支和循环是测试开发工程师在日常工作中经常使用的工具&#xff0c;无论是编写…

亚马逊SFP有何优势?跨境卖家又该如何申请?

一、亚马逊SFP概述 亚马逊SFP(Seller Fulfilled Prime)是亚马逊为卖家提供的一项物流计划&#xff0c;旨在让满足条件的卖家能够将其产品纳入Prime服务&#xff0c;获得Prime标识&#xff0c;并直接面向Prime会员市场。通过SFP&#xff0c;卖家可以获得亚马逊的流量倾斜&#…

复现Apache HTTPD 多后缀解析漏洞

准备一个纯净的Ubuntu系统 1.先更新一下安装列表 sudo apt-get update 2.安装dockers.io sudo apt install docker.io 查看是否安装成功 docker -v 3. 查看是否安装pip,没有的话就安装 sudo apt-get install python3-pip 4. 安装docker-compose pip install docker-comp…

2024年ai知识库:特点、应用与搭建

随着科技的进步和企业的需要&#xff0c;ai知识库逐渐走进大众的视野并深受企业的青睐&#xff0c;掀起了搭建ai知识库的热潮。LookLook同学就来简单介绍一下关于ai知识库的特点、应用与发展趋势&#xff0c;带你了解2024年的ai知识库。 一、ai知识库的定义与特点 ai知识库是结…

Java基础入门day55

day55 过滤器 简介 过滤器filter&#xff0c;是处于客户端与服务器端目标资源之间的一道过滤技术技术 作用 执行地位在servlet之前&#xff0c;客户发送请求时&#xff0c;会先经过Filter&#xff0c;再到达目标Servlet中。 相应时&#xff0c;会根据执行流程再次反向执行Fil…

网络安全资源和参考指南

由美国国防部&#xff08;DoD&#xff09;发布的《网络安全资源和参考指南》&#xff0c;旨在为美国政府、商业部门以及美国盟友和伙伴之间的安全合作提供有用的、现成的参考资料。文档涵盖了网络安全规范、最佳实践、政策和标准&#xff0c;这些都是由美国联邦政府、国防部以及…