当前位置: 首页 > news >正文

15 ABC基于状态机的按键消抖原理与状态转移图

1. 基于状态机的按键消抖

1.1 什么是按键?

从按键结构图10-1可知,按键按下时,接点(端子)与导线接通,松开时,由于弹簧的反作用力,接点(端子)与导线断开。

从原理图10-2可知,按键按下时为低电平,未按下为高电平

1.2 为什么要消抖?

1.3 基于按键消抖的状态转移图

2. 写设计代码,仿真代码并仿真(未使用随机函数的测试)

1. 设计代码

module key_filter(clk,rstn,key,
//    key_p_flag,
//    key_r_flag,key_flag,key_state
);input clk;input rstn;input key;
//   output reg key_p_flag;
//   output reg key_r_flag;output reg key_flag;output reg key_state;//边沿检测reg [1:0] r_key;always@(posedge clk)r_key <= {r_key[0], key}; 
//    reg [1:0] r_key;    
//    always@(posedge clk)begin
//        r_key[0] <= key;
//        r_key[1] <= r_key[0]; 
//    endwire nedge_key;wire pedge_key;assign nedge_key = (r_key == 2'b10);assign pedge_key = (r_key == 2'b01);reg [1:0]state;reg [19:0] cnt;always@(posedge clk or negedge rstn)if(!rstn)beginstate <= 0;cnt <= 0;
//        key_p_flag <= 0;
//        key_r_flag <= 0;key_flag <= 0;key_state <= 1;endelsecase(state)0: begin
//            key_r_flag <= 0;key_flag <= 0;if(nedge_key == 1) beginstate <= 1;endelsestate <= 0;end 1:beginif((pedge_key == 1) && (cnt < 1000000 - 1))beginstate <= 0;cnt <= 0;endelse if((pedge_key == 0) && (cnt >= 1000000 - 1))beginstate <= 2;
//               key_p_flag <= 1'd1;key_flag <= 1'd1;key_state <= 0;cnt <= 0;endelsecnt <= cnt + 1'd1;end2:begin
//           key_p_flag <= 0;key_flag <= 0;if(pedge_key == 1)state <= 3;elsestate <= 2;end3:beginif((nedge_key == 1) && (cnt < 1000000 - 1))beginstate <= 2;cnt <= 0;endelse if((nedge_key == 0) && (cnt >= 1000000 - 1))beginstate <= 0;
//                key_r_flag <= 1;key_flag <= 1'd1;key_state <= 1;cnt <= 0;endelsecnt <= cnt + 1'd1;endendcaseendmodule

2. 仿真代码

`timescale 1ns / 1psmodule key_filter_tb();reg clk;reg rstn;reg key;
//    wire key_p_flag;
//    wire key_r_flag;wire key_flag;wire key_state;key_filter key_filter_inst(.clk(clk),.rstn(rstn),.key(key),
//        .key_p_flag(key_p_flag),
//       .key_r_flag(key_r_flag),.key_flag(key_flag),.key_state(key_state));initial clk = 1;always #10 clk = ~clk;initial beginrstn = 0;key = 1;#201;rstn = 1;#200;key = 1;#50000000;key = 0;#30000;key = 1;#30000;key = 0;#30000;key = 1;#30000;key = 0;#50000000;key = 1;#30000;key = 0;#30000;key = 1;#30000;key = 0;#30000;key = 1;#50000000;$stop;endendmodule

3. 仿真波形

 3. 基于verilog系统函数random的随机测试下的按键抖动(tb编写语法)

通过系统函数random产生一个随机的延迟值,来模拟真实情况下的延迟。

3.1 系统函数random的两个例子:

1. 产生一个[-(b+1): (b-1)]的随机数:$random% b;

2.产生一个[0: b-1]的随机数:{$random}% b;;

修改后的仿真代码:

`timescale 1ns / 1psmodule key_filter_tb();reg clk;reg rstn;reg key;
//    wire key_p_flag;
//    wire key_r_flag;wire key_flag;wire key_state;key_filter key_filter_inst(.clk(clk),.rstn(rstn),.key(key),
//        .key_p_flag(key_p_flag),
//       .key_r_flag(key_r_flag),.key_flag(key_flag),.key_state(key_state));initial clk = 1;always #10 clk = ~clk;reg [19:0] rand;initial beginrstn = 0;key = 1;#201;rstn = 1;#200;press_key(1);$stop;endtask press_key;input [2:0] seed;beginkey = 1;#20000000; repeat(5) beginrand = {$random(seed)} % 9999999; //产生0到9999999ns的延迟#rand key = ~key;endkey = 0;#40000000;repeat(5) beginrand = {$random(seed)} % 9999999; //产生0到9999999ns的延迟#rand key = ~key;endkey = 1;#40000000;endendtaskendmodule

4. 调试(产生多余38ns的原因)

 

相关文章:

15 ABC基于状态机的按键消抖原理与状态转移图

1. 基于状态机的按键消抖 1.1 什么是按键&#xff1f; 从按键结构图10-1可知&#xff0c;按键按下时&#xff0c;接点&#xff08;端子&#xff09;与导线接通&#xff0c;松开时&#xff0c;由于弹簧的反作用力&#xff0c;接点&#xff08;端子&#xff09;与导线断开。 从…...

λ-矩阵的多项式展开

原文链接 定义. 对于 m n m \times n mn 的 λ \lambda λ-矩阵 A ( λ ) [ a 11 ( λ ) . . . a 1 n ( λ ) ⋮ ⋮ a m 1 ( λ ) . . . a m n ( λ ) ] \mathbf{A}(\lambda)\begin{bmatrix} a_{11}(\lambda) & ... & a_{1n}(\lambda)\\ \vdots & & \vdo…...

如何在PDF 文件中删除页面?

查看不同的工具以及解释如何在 Windows、Android、macOS 和 iOS 上从 PDF 删除页面的步骤&#xff1a; PDF 是最难处理的文件格式之一。曾经有一段时间&#xff0c;除了阅读之外&#xff0c;无法用 PDF 做任何事情。但是今天&#xff0c;有许多应用程序和工具可以让您用它们做…...

蓝桥杯官网填空题(质数拆分)

问题描述 将 2022 拆分成不同的质数的和&#xff0c;请问最多拆分成几个&#xff1f; 答案提交 本题为一道结果填空的题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将结果输出即可。 运行限制 import java.util.Scanner;public class Main {static int …...

【数据结构】二叉树的顺序结构及链式结构

目录 1.树的概念及结构 1.1树的概念 1.2树的相关概念 ​编辑 1.3树的表示 1.4树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构 2.1二叉树的概念 2.2现实中的二叉树 ​编辑 2.3特殊的二叉树 2.4二叉树的性质 2.5二叉树的存储结…...

海外IP代理:解锁网络边界的实战利器

文章目录 引言&#xff1a;正文&#xff1a;一、Roxlabs全球IP代理服务概览特点&#xff1a;覆盖范围&#xff1a;住宅IP真实性&#xff1a;性价比&#xff1a;在网络数据采集中的重要性&#xff1a; 二、实战应用案例一&#xff1a;跨境电商竞品分析步骤介绍&#xff1a;代码示…...

如何写好一个简历

如何编写求职简历 论Java程序员求职中简历的重要性 好简历的作用 在求职过程中&#xff0c;一份好的简历是非常重要的&#xff0c;它甚至可以直接决定能否被面试官认可。一份出色或者说是成功的个人简历&#xff0c;最根本的作用是能让看这份简历的人产生一定要见你的强烈愿…...

【AutoML】AutoKeras 进行 RNN 循环神经网络训练

由于最近这些天都在人工审查之前的哪些问答数据&#xff0c;所以迟迟都没有更新 AutoKeras 的训练结果。现在那部分数据都已经整理好了&#xff0c;20w 的数据最后能够使用的高质量数据只剩下 2k。这 2k 的数据已经经过数据校验并且对部分问题的提问方式和答案内容进行了不改变…...

H12-821_74

74.在某路由器上查看LSP&#xff0c;看到如下结果&#xff1a; A.发送目标地址为3.3.3.3的数据包时&#xff0c;打上标签1026&#xff0c;然后发送。 B.发送目标地址为4.4.4.4的数据包时&#xff0c;不打标签直接发送。 C.当路由器收到标签为1024的数据包&#xff0c;将把标签…...

有趣儿的组件(HTML/CSS)

分享几个炫酷的组件&#xff0c;起飞~~ 评论区留爪&#xff0c;继续分享哦~ 文章目录 1. 按钮2. 输入3. 工具提示4. 单选按钮5. 加载中 1. 按钮 HTML&#xff1a; <button id"btn">Button</button>CSS&#xff1a; button {padding: 10px 20px;text-tr…...

1、深度学习环境配置相关下载地址整理(cuda、cudnn、torch、miniconda、pycharm、torchvision等)

一、深度学习环境配置相关&#xff1a; 1、cuda&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive 2、cudnn&#xff1a;https://developer.nvidia.com/rdp/cudnn-archive 4、miniconda&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/?C…...

Spring Boot3自定义异常及全局异常捕获

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 目的 主要步骤 定义自定义异常类 创建全局异常处理器 手动抛出自定义异常 前置条件 已经初始化好一个…...

【python】网络爬虫与信息提取--Beautiful Soup库

Beautiful Soup网站&#xff1a;https://www.crummy.com/software/BeautifulSoup/ 作用&#xff1a;它能够对HTML.xml格式进行解析&#xff0c;并且提取其中的相关信息。它可以对我们提供的任何格式进行相关的爬取&#xff0c;并且可以进行树形解析。 使用原理&#xff1a;它能…...

谷歌浏览器,如何将常用打开的网站创建快捷方式到电脑桌面?

打开谷歌浏览器&#xff0c;打开想要创建的快捷方式的网页 点击浏览器右上角的三个点&#xff1a; 点击选择【更多工具】 选择【创建快捷方式】 然后&#xff0c;在浏览器上方会弹出一个框&#xff0c;让命名此创建的快捷方式的名称 命名好之后&#xff0c;再点击【创…...

产品经理面试题解析:业务架构是通往成功的关键吗?

大家好&#xff0c;我是小米&#xff01;今天我要和大家聊的是产品经理面试中的一个热门话题&#xff1a;“业务架构”&#xff01;相信不少小伙伴在准备面试的时候都会遇到这个问题&#xff0c;究竟什么是业务架构&#xff1f;它又与产品经理的工作有着怎样的关系呢&#xff1…...

【蓝桥杯】灭鼠先锋

一.题目描述 二.解题思路 博弈论&#xff1a; 只能转移到必胜态的&#xff0c;均为必败态。 可以转移到必败态的&#xff0c;均为必胜肽。 最优的策略是&#xff0c;下一步一定是必败态。 #include<iostream> #include<map> using namespace std;map<string,bo…...

2024年华为OD机试真题-求字符串中所有整数的最小和-Python-OD统一考试(C卷)

题目描述: 输入字符串s,输出s中包含所有整数的最小和 说明 1. 字符串s,只包含 a-z A-Z +- ; 2. 合法的整数包括 1) 正整数 一个或者多个0-9组成,如 0 2 3 002 102 2)负整数 负号 - 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023 输入描述: 包含…...

数据分析基础之《pandas(7)—高级处理2》

四、合并 如果数据由多张表组成&#xff0c;那么有时候需要将不同的内容合并在一起分析 1、先回忆下numpy中如何合并 水平拼接 np.hstack() 竖直拼接 np.vstack() 两个都能实现 np.concatenate((a, b), axis) 2、pd.concat([data1, data2], axis1) 按照行或者列…...

fluent脱硝SCR相对标准偏差、氨氮比、截面速度计算

# -*- coding: utf-8 -*- """ Created on Wed Sep 20 20:40:30 2023 联系QQ:3123575367&#xff0c;专业SCR脱硝仿真。 该程序用来处理fluent通过export-solution-ASCII-Space导出的数据&#xff0c;可计算标准偏差SD、相对标准偏差RSD,适用于求解平面的相对均匀…...

Codeforces Round 925 (Div. 3)(A~E)

题目暂时是AC&#xff0c;现在是Hack阶段&#xff0c;代码仅供参考。 A. Recovering a Small String 题目给出的n都可以由字母来组成&#xff0c;比如4可以是aab&#xff0c;字母里面排第一个和第二个&#xff0c;即1124。但是会歧义&#xff0c;比如aba为1214&#xff0c;也是…...

别再问SAP权限怎么配了!从MM01物料创建权限入手,5分钟搞懂PFCG角色配置核心逻辑

SAP权限配置实战&#xff1a;从MM01物料创建权限掌握PFCG角色设计精髓 在SAP项目实施中&#xff0c;权限配置往往是新手顾问最容易卡壳的环节。当用户抱怨"为什么我点这个按钮就报权限错误"时&#xff0c;很多刚入行的顾问只能尴尬地回应"我查查后台配置"。…...

终极IDE评估周期管理方案:开源ide-eval-resetter完整解析

终极IDE评估周期管理方案&#xff1a;开源ide-eval-resetter完整解析 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 在当今快节奏的开发环境中&#xff0c;JetBrains IDE系列产品凭借其卓越的代码智能和丰富的功…...

手把手教你用Google Cloud语音API为Android App加个“耳朵”和“嘴巴”(附免费额度避坑指南)

实战指南&#xff1a;在Android应用中集成Google Cloud语音技术 想象一下&#xff0c;你的Android应用能够听懂用户说话&#xff0c;还能用自然流畅的语音回应——这不再是科幻电影里的场景。借助Google Cloud的语音API&#xff0c;即使是独立开发者也能快速为应用添加专业的语…...

LangChain学习之提示词模板 Prompts(2/8)

模块 2: 提示词模板 (Prompts) 2.1 提示词 (Prompts) 概述 在与大型语言模型&#xff08;LLM&#xff09;交互时&#xff0c;提示词 (Prompt) 是向模型发出的指令或问题。一个好的提示词能够引导模型生成高质量、符合预期的输出。LangChain 提供了强大的提示词管理功能&#…...

2026年大模型内容精准收录实操,企业长效流量布局核心方法论

引言&#xff1a;大模型正在成为企业品牌认知的新前置入口。当越来越多用户绕过搜索引擎、直接向AI提问"哪家公司更适合""某个方案值不值得选"时&#xff0c;企业在AI回答中的位置、语气和引用来源&#xff0c;已经构成真实的竞争格局。本文将从大模型内容…...

收藏备用!【2025 版】CMD 命令超详细大全,零基础全覆盖

在Windows操作系统中&#xff0c;命令提示符&#xff08;CMD&#xff09;是一个强大的工具&#xff0c;允许用户通过输入命令来执行各种操作。无论是系统管理、网络配置&#xff0c;还是文件管理&#xff0c;CMD都能提供高效的解决方案。 一、基本命令 cd&#xff1a;更改目录…...

瑞芯微RK3588核心板规格书,详细参数配置,定位ARM高端AIOT智能模组,板对板连接器320Pin 间距0.5 B to B连接器

触觉智能研发的瑞芯微RK3588核心板&#xff0c;板对板连接器320Pin 间距0.5 B to B连接器&#xff0c;型号简写SOM3588-V1&#xff0c;在CSDN平台留下规格书方便大家查看。1. 产品概述1.1 IDO-SOM3588-V1适用范围IDO-SOM3588-V1核心板适用于工业主机&#xff0c;边缘计算网关、…...

有这5个迹象,说明你公司内斗很严重!

见字如面&#xff0c;我是军哥&#xff01;昨天&#xff0c;一位读者小王给我留言。他在某大厂担任项目经理&#xff0c;最近工作推进得很艰难。同一件事开了好几次会&#xff0c;领导就是不拍板。跨部门协作费力不讨好&#xff0c;谁都不愿负责&#xff0c;项目卡在那里没有进…...

测试工程师的沟通技巧:如何向开发工程师反馈bug

在软件研发的协作链条中&#xff0c;测试工程师与开发工程师的互动至关重要&#xff0c;而反馈bug则是两者沟通的核心场景之一。高效、专业的bug反馈&#xff0c;不仅能加速问题解决&#xff0c;提升产品质量&#xff0c;更能维护良好的团队协作氛围。对于软件测试从业者而言&a…...

【万字文档+源码】基于SpringBoot+vue社区药房系统 -可用于毕设-课程设计-练手学习

【万字文档源码】基于SpringBootvue社区药房系统 -可用于毕设-课程设计-练手学习 【万字文档源码】基于SpringBootvue社区药房系【万字文档源码】基于SpringBootvue社区药房系统 -可用于毕设-课程设计-练手学习 1.项目简介 药品对于每个国家&#xff0c;每个家庭&#xff0c;…...