首页 > 其他分享 >verilog实现消抖操作

verilog实现消抖操作

时间:2024-11-05 08:50:37浏览次数:5  
标签:clk 高电平 消抖 pulse verilog key rst 操作 输入

发的第一篇文章,是我仿照别人做的verilog消抖代码,有什么不足之处希望各位大佬能帮我提出来,尽管批评!也欢迎各位和我一样的初学者来和我一起讨论.

设计思路:通过按键按下代表输入高电平,当检测到有输入时,开始计时,短暂计时结束后如果发现仍有输入,则判断为有效输入,输出高电平,否则为抖动.

设计代码:

module eli_vibrat(clk,rst,key_pulse,key);
input clk,rst;
parameter N=1;  //按键个数
input [N-1:0] key;  //输入
output wire [N-1:0] key_pulse;  //输出脉冲:输入为1输出高电平,反之低电平

reg [N-1:0] key_now;    //当前时刻的输入状态
reg [N-1:0] key_now_pre;    //上一时钟的输入状态

always@(posedge clk or posedge rst)
begin
if(rst) begin   //高电平有效置零
key_now <= {N{1'b0}};
key_now_pre <= {N{1'b0}};
end
else begin
key_now <= key;     //获得当前输入
key_now_pre <= key_now;     //非阻塞赋值获得上一时钟的输入
end
end

reg [N-1:0] key_sec;    //延时后的输入

wire [N-1:0] key_edge;      //判断按键是否按下
assign key_edge= key_now & (~key_now_pre);
reg [33:0] cnt;     //设置为34位是为了设置两秒的延时方便上板观察
always@(posedge clk or posedge rst)
begin
if(rst) cnt<=0;
else if(key_edge) cnt<=0;
else cnt<=cnt+1;
end

always@(posedge clk or posedge rst)
begin
if(rst) key_sec<={N{1'b0}};
else if (cnt==34'd20) key_sec <= key;   //延时后获取当前key值
end

assign key_pulse = key_sec;

endmodule

测试代码:

module eli_vibrat_tb();
reg clk,rst;
parameter N=1;
reg [N-1:0] key;
wire [N-1:0] key_pulse;
eli_vibrat e(
.clk(clk),
.rst(rst),
.key(key),
.key_pulse(key_pulse));
always #1 clk <= ~clk;
initial begin
clk<=0;rst<=1;key<=0;
#5 rst<=0;
#5 key<=1;
#5 key<=0;
#100 key<=1;
end
endmodule

最终仿真结果如下:

标签:clk,高电平,消抖,pulse,verilog,key,rst,操作,输入
From: https://blog.csdn.net/2402_83350384/article/details/143499358

相关文章

  • 【JavaScript进阶部分——DOM操作 (节点获取,节点属性修改,节点创建与插入,CSS样式的修改)
    ‌DOM操作‌是指对文档对象模型(DocumentObjectModel,简称DOM)进行增删改查等操作的过程。DOM是一种表示和操作HTML、XML等文档的标准编程接口,它将文档解析为一个由节点和对象(包含属性和方法)组成的集合,开发者可以通过DOM提供的接口来访问和操作文档的各个部分,包括元素、属性、文......
  • 知识点:Python中的列表合并操作
    知识点:该题目考查的知识点是Python中的列表合并操作。以下是该知识点的相关内容和题目的详细解答过程:知识点:Python中的列表合并操作在Python中,合并两个或多个列表是一项常见的操作,可以通过以下几种方法实现:使用+运算符:使用+运算符可以将两个列表直接拼接在一起,形成一个......
  • 初始JavaEE篇 —— 文件操作与IO
    找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程程(ಥ_ಥ)-CSDN博客所属专栏:JavaEE目录文件介绍 Java标准库中提供操作文件的类文件系统操作File类的介绍File类的使用 文件内容操作二进制文件的读写操作文本文件的读写操作文件介绍 文件......
  • 二叉树的一些相关操作
    前言    链式结构二叉树的访问基本使用递归来进行访问,同时也可以体现出递归的暴力美学。因为有涉及到二叉树的相关操作,因此先要手动构造一个二叉树,在对其进行一些操作。        本篇一切对二叉树的操作都基于我创建的二叉树        这个是我构造的......
  • 数据库操作与数据管理——Rust 与 SQLite 的集成
    第六章:数据库操作与数据管理第一节:Rust与SQLite的集成在本节中,我们将深入探讨如何在Rust中使用SQLite数据库,涵盖从基本的CRUD操作到事务处理、数据模型的构建、性能优化以及安全性考虑等方面。SQLite是一个轻量级的关系型数据库,适合嵌入式应用和小型项目。我们将利......
  • ArkUI常用数据处理:掌握Map操作与动态数据管理
    在HarmonyOS应用开发中,ArkUI框架提供了丰富的数据处理能力,尤其是对于Map这类非线性容器的操作。本文将详细介绍ArkUI中Map的基本概念、操作方法,以及如何在实际开发中应用Map进行数据处理和动态数据管理。Map的重要性Map是非线性容器的一种,它提供了快速查找、插入和删除键值......
  • C语言版数据结构算法(考研初试版—4)--链表删除操作
    删除链表中值为m的结点(1)创建一个链表(2)打印删除前的链表(3)查找值为m的前一个结点(4)执行删除操作(5)打印删除后的链表#include<stdio.h>#include<stdlib.h>typedefstructLNode{ intdata; structLNode*next;}LNode,*LinkList;//头插法LinkListCreateList_L(){......
  • 连接数据库与JDBC的简单操作
    连接数据库的步骤没有错,但是mysql--8与jar包--5的版本不匹配导致数据库连接不成功,后面导入8版本的jar包后就连接数据库成功了。但是报错:Exceptioninthread"main"java.sql.SQLException:Theservertimezonevalue'�й���׼ʱ��'isunrecognizedorrepresentsmorethanoneti......
  • 物联网操作系统
    物联网1.操作系统的出现和迭代是时代需求和技术制约下的平衡上承落地应用,下接海量终端前端数据的收集 高速传递数据和信息 OTA升级 端云互联一体(连接管理平台确保物联网系统自主运行) 在云侧,以云平台为支撑的中间件服务、数据服务和信息服务目前现状:终端......
  • 操作字符串都有哪些类以及它们之间有什么区别
     1.**String**:  -是不可变对象。每次对String类型进行修改时都会生成一个新的对象。  -适用于不频繁修改字符串的情况。2.**StringBuilder**:  -线程不安全,效率高,多用于单线程环境。  -适用于需要频繁修改字符串的操作。3.**StringBuffer**:  -线程安全......