状态机按键消抖(学习笔记)

news2024/9/25 17:21:18

状态转移图:

module key_filter(
    Clk,
    Reset_n,
    Key,
//    Key_P_Flag,
//    Key_R_Flag,
    Key_Flag,
    Key_state
    );
    input Clk;
    input Reset_n;
    input Key;
//    output reg Key_P_Flag;
//    output reg Key_R_Flag;
    output Key_Flag;
    output reg Key_state;    
    
    
     reg Key_P_Flag;
     reg Key_R_Flag;
     assign Key_Flag = Key_P_Flag | Key_P_Flag;
     
    reg [1:0] r_Key;
    always@(posedge Clk)
        r_Key <= {r_Key[0],Key};
        
//     always@(posedge Clk)begin       
//        r_Key[0] <= Key;
//        r_Key[1] <= r_Key[0];
//      end

//上升沿下降沿
        wire pedge_key;
        assign pedge_key = r_Key == 2'b01;
        wire nedge_key;
        assign nedge_key = r_Key == 2'b10;
        
        reg [19:0] cnt;
        
        reg [1:0] state;
        always@(posedge Clk or negedge Reset_n)
        if(!Reset_n)begin
            state <= 0;
            Key_R_Flag <= 1'b0;
            Key_P_Flag <= 1'b0;
            cnt <= 0;
            Key_state <= 1;
         end
         else begin
            case(state)
                0:
                    begin
                        Key_R_Flag <= 1'b0;
                        if(nedge_key)
                            state<=1;
                         else
                            state<=0;
                         end
                1:
                    if( (pedge_key)&&(cnt < 1000000-1))
                        state<=0;
                     else if(cnt >= 1000000-1)begin
                        state<=2;
                        cnt <= 0;
                        Key_P_Flag <= 1;
                        Key_state <=0;
                        end
                        else begin
                            cnt <= cnt + 1'b1;
                            state<=1;
                         end
                         
                     2:
                         begin
                            Key_P_Flag <= 0;
                             if(pedge_key)
                                state <= 3;
                             else
                                state <= 2;  
                             end                     
                      3:
                           if((nedge_key)&&(cnt<1000000-1))
                                state<=2;
                             else if(cnt>=1000000-1)begin
                                state<=0;
                                cnt <= 0;
                                Key_R_Flag <= 1'b1;
                                Key_state<=1;
                            end
                            else begin
                                 cnt <= cnt +1'b1;
                                 state <=3;
                              end
                           endcase
                        end

endmodule
`timescale 1ns / 1ns
//



module key_filter_tb();

    reg Clk;
    reg Reset_n;
    reg Key;
//    wire Key_P_Flag;
//    wire Key_R_Flag;
    wire Key_Flag;
    wire Key_state;
    
     key_filter key_filter(
        Clk,
        Reset_n,
        Key,
//        Key_P_Flag,
//        Key_R_Flag,
        Key_Flag,
        Key_state
        );
        
     initial Clk = 1;
     always#10 Clk = ~Clk;
     
     initial begin
        Reset_n = 0;
        Key = 1;
        #201;
        Reset_n = 1;
        
        #3000;
        
        Key = 0;
        #20000;
        Key = 1;
        #30000;
        
        Key = 0;
        #20000;
        Key = 1;
        #30000;
        
        Key = 0;
        #20000;
        Key = 1;
        #30000;
         
         Key = 0;
        #20000;
        Key = 1;
        #30000;
        
        Key = 0;
        #50000000;

        Key = 1;
        #30000;
        Key = 0;
        #20000;
        
        Key = 1;
        #30000;
         Key = 0;
        #20000;
        Key = 1;
        #500000000;
                Key = 0;
        #20000;
        Key = 1;
        #30000;
        
        Key = 0;
        #20000;
        Key = 1;
        #30000;
        
        Key = 0;
        #20000;
        Key = 1;
        #30000;
         
         Key = 0;
        #20000;
        Key = 1;
        #30000;
        
        Key = 0;
        #50000000;

        Key = 1;
        #30000;
        Key = 0;
        #20000;
        
        Key = 1;
        #30000;
         Key = 0;
        #20000;
        Key = 1;
        #500000000;
        
        $stop;
        
     end
     
endmodule

   

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

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

相关文章

002 JavaClent操作RabbitMQ

Java Client操作RabbitMQ 文章目录 Java Client操作RabbitMQ1.pom依赖2.连接工具类3.简单模式4.工作队列模式&#xff08;work&#xff09;公平调度示例 5.发布/订阅模式&#xff08;fanout&#xff09;交换机绑定示例代码 6.路由模式&#xff08;direct&#xff09;7.Topic匹配…

RQ-RAG:提升检索增强生成模型的查询精炼能力

人工智能咨询培训老师叶梓 转载标明出处 大模型在面对未见场景时&#xff0c;往往会产生不准确或虚构的回答&#xff0c;这限制了它们的实用性。为了解决这一问题&#xff0c;香港科技大学、香港理工大学和麻省理工学院的研究团队提出了一种名为RQ-RAG&#xff08;Retrieval-A…

国产芯片LT8711HE:TYPE-C/DP1.2转HDMI2.0转换器,4k60Hz高分辨率

以下为LT8711HE芯片的简单介绍&#xff0c;如有介绍不尽之处&#xff0c;请指出 LT8711HE是一个高性能的Type-C/DP1.2到HDMI2.0转换器&#xff0c;用于连接USB Type-C源或DP1.2源到HDMI2.0接收器。 LT8711HE集成了一个DP1.2兼容的接收器和一个HDMI2.0兼容的发射器。另外&…

出处不详 取数游戏

目录 取数游戏题目描述背景输入输出数据范围 题解解法优化 打赏 取数游戏 题目描述 背景 两人将 n n n个正整数围成一个圆环&#xff0c;规则如下&#xff1a; 第一名玩家随意选取数字&#xff1b;第二名玩家从与第一名玩家相邻的两个数字中选择一个&#xff1b;而后依次在…

MOM成功实施分享(五)刨花板制造数字化聚焦业务场景

刨花板是一种人造板材&#xff0c;由木材或其他植物纤维原料制成。 在制造生产过程中目前存在以下痛点&#xff1a; 原材料质量不稳定&#xff1a;刨花板的质量很大程度上取决于原材料的质量&#xff0c;如果原材料的来源不稳定、质量参差不齐&#xff0c;会影响刨花板的性能…

从线段中搜寻提取闭合轮廓(三)

1.前言 做底层和数据的调试问题也是个麻烦事&#xff0c;如果没有方便的可视化工具辅助&#xff0c;那将令人感到痛苦&#xff0c;借助可视化的工具可以让我们高效、省心&#xff0c;进而心情舒畅&#xff0c;重要的是可以提高调试效率。 当然可视化工具也分不同层次的…

我对 monorepo 的一些思考

我对 monorepo 的一些思考 我对 monorepo 的一些思考 前言它的由来技术选型 管理工具语言与打包调试工具测试框架代码规范与质量控制本地引用与发包替换发包流程Github 相关配置部署 使用手册 功能特性总结如何使用&#xff1f;清除默认的包(可选)模板包介绍 packagesapps 更新…

25虾皮笔试shopee笔试测评sea笔试测评题型

虾皮笔试shopee笔试测评用的自己的笔试系统&#xff0c;全英文笔试&#xff1a; 1.Numerical Reasoning Test&#xff1a;10题&#xff0c;言语推断和数学计算 2. Verbal Reasoning Test&#xff1a;10题&#xff0c;言语理解&#xff0c;每题一段英文材料&#xff0c;选对错…

医院管理|基于java的医院管理系统小程序(源码+数据库+文档)

医院管理系统小程序 目录 基于java的医院管理系统小程序 一、前言 二、系统设计 三、系统功能设计 医生信息管理 排班信息管理 科室信息管理 科室预约 病历信息 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a;…

浅谈模型在信贷营销中的应用

浅谈模型在信贷营销中的应用 当前在信贷营销场景中,用户流量竞争愈加激烈,获客成本持续攀高,客户消费观念和消费信心趋向保守,传统的信贷营销方式效果逐渐乏力,借助数据挖掘技术对用户进行多元优化及精细化管理已经成为企业在经营发展中的普遍趋势。在此背景下,本文将围…

如何设置新建每个Python文件开头带上作者名和时间?

1、在pycharm界面中点击"File->Settings" 2、点击"Editor->File and Code Templates->Python Script" 3、添加信息后&#xff0c;点击"ok" # encoding: utf-8 # File : ${NAME}.py # Author: jianlu # Date : ${YEAR}/${MONTH}/${DA…

LBS 开发微课堂|轨迹重合率分析API升级:距离无上限,操作更简便

为了让广大的开发者 更深入地了解 百度地图开放平台的 技术能力 轻松掌握满满的 技术干货 更加简单地接入 位置服务 我们特别推出了 “位置服务&#xff08;LBS&#xff09;开发微课堂” 系列技术案例 第二期的主题是 《轨迹重合率分析API升级》 百度地图的鹰眼轨迹…

算法设计(一)

1.汉诺塔 介绍 汉诺塔&#xff08;Hanoi Tower&#xff09;:它描述了如何将一堆大小不同、穿在一根柱子上的盘子移动到另一根柱子上&#xff0c;同时满足以下规则&#xff1a; 每次只能移动一个盘子。 每个移动盘子时&#xff0c;大的盘子不能放在小的盘子上面。 可以使用一根…

若依RuoYi项目环境搭建教程(RuoYi-Vue + RuoYi-Vue3版本)

文章目录 一、开发脚手架选择二、RuoYi框架1、介绍2、版本发展3、为什么选择若依4、优缺点5、项目内置功能 三、后端项目部署1、拉取源码2、环境要求3、Maven构建4、MySQL相关&#xff08;1&#xff09;导入SQL脚本&#xff08;2&#xff09;配置信息 5、Redis相关&#xff08;…

crdownload格式后缀的文件是什么东西?crdownload格式是什么

crdownload格式就是浏览器没下载完成的文件&#xff0c;如果下载完成了&#xff0c;那么就显示正常的格式和文件名了。

ARM32开发——DMA

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 基础概念CPURAM外设 ARM32程序存储 执行过程取数据 执行操作流程总结 基础概念 CPU CPU&#xff08;Central Processing Unit&am…

[点云处理] cloud compare二次插件功能开发(三)CC插件总结与加速开发

本文完成一个点云变换的插件&#xff0c;同时也是对CC接口的使用做进一步说明&#xff0c;进一步理解CC插件开发流程&#xff0c;利用CC平台和已有代码加快实现定制功能。 这个功能在 cc 已有的功能已经存在&#xff0c;位于 edit->apply_transformation 这里 文件逻辑组织还…

如何让人工智能训练更快

影响人工智能训练时间的因素 在深度学习训练中&#xff0c;训练时间的计算涉及到多个因素&#xff0c;包括 epoch 数、全局 batch size、微 batch size、计算设备数量等。下面是一个基本的公式来说明这些参数之间的关系&#xff08;注意&#xff0c;这只是一个基本的说明公式&…

改变事件

窗口的某些属性的状态发生改变时就会触发该事件 对应的事件类型包括 QEvent::ToolBarChange, QEvent::ActivationChange, QEvent::EnabledChange, QEvent::FontChange,QEvent::StyleChange, QEvent::PaletteChange, QEvent::WindowTitleChange, QEvent::IconTextChange, QEve…

【大模型基础】P2 Bag-of-Words

目录 词袋模型 概述词袋模型 实例第1步 构建语料库第2步 对句子进行分词第3步 创建词汇表第4步 转换词袋表示第5步 计算余弦相似度 词袋模型的局限性 词袋模型 概述 词袋模型&#xff0c;Bag-of-Words&#xff0c;是一种简单的文本表示方法&#xff0c;也是 NLP 中的一个经典模…