按键消抖与仿真源文件中的随机数

这篇具有很好参考价值的文章主要介绍了按键消抖与仿真源文件中的随机数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

按键消抖原理

由于按键的机械弹簧结构,在按键按下与释放的过程中,存在类似接触不良,断断续续的信号,导致电平信号的抖动。
在C程序中一般通过延时函数解决,根据按键速度,一般延时20ms之后再重新对引脚判断是否真正按下,来解决抖动问题。
在FPGA中可以通过对信号的快速精准判断,只需要根据电平持续时间来解决抖动问题,按键按下一般会有20ms以上的电平平稳时间,就是通过按键的边沿开始计算,只要20ms中没有多个边沿触发,就说明不是抖动。

状态划分与转移

共4个状态:

  1. 空闲态,没有按键按下
  2. 按下抖动态,正在按下,信号不平稳
  3. 按下态,按下信号出去稳定状态
  4. 释放抖动态,正在释放按键,信号不平稳

状态转移,根据按键边沿信号和时间值。

仿真源文件中的编码

task任务

可以使用task任务,创建任务后,可以多次调用:

task press_key;
        input [1:0]flag;//空闲、按下抖动、按下、释放抖动
        begin
            case(flag)
                0:begin
                    Key = 1;
                    #20000000;
                end
                1:
                   repeat(5)begin
                        rand = {$random(2)} % 10000000;
                        #rand Key = ~Key;
                    end
                 2:begin
                    Key = 0;
                    #20000000;
                end
                3:
                   repeat(5)begin
                        rand = {$random(2)} % 10000000;
                        #rand Key = ~Key;
                    end
            endcase
        end
    endtask

调用如同函数调用,直接填写参数值就可以传递给input变量了:
press_key(0);
press_key(1);
press_key(2);

随机数random

上边还有:随机数
rand = {$random(2)} % 10000000;
$random(2): 会产生一个随机数
{$random(2)}:对随机数取绝对值
{$random(2)} % 10000000 :对随机数取绝对值后再取余,限制其范围

循环repeat

循环体
repeat(5)begin
//循环体
end
:表示循环5次

亚稳态现象的优化

通过多级触发器进行信号优化,信号的稳定状态和正确率提高了,不过判断信号的时间略微延迟。
一般通过2级触发器就可以达到一个较好的稳定水平。文章来源地址https://www.toymoban.com/news/detail-684100.html

到了这里,关于按键消抖与仿真源文件中的随机数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Docker安装kkfileview,kkfileview在docker部署后预览出现预览中的字体样式与源文件不同的解决办法,动态水印 kkfileview漏洞修复

    Docker安装kkfileview,kkfileview在docker部署后预览出现预览中的字体样式与源文件不同的解决办法,动态水印 kkfileview漏洞修复

    目录 1.Docker安装kkfileview 2.kkfileview在docker部署后预览出现预览中的字体样式与源文件不同的解决办法 2.1. 物理机或虚拟机上运行  2.2. Docker容器环境环境运行  3.docker中更改kkfileview的配置文件application.properties 4.如何水印文本内容动态传值 动态水印 静态水印 5.扩展漏洞,修复

    2024年02月14日
    浏览(8)
  • 最新UI作品集源文件文件模板Sketch和Adobe XD源文件格式

    最新UI作品集源文件文件模板Sketch和Adobe XD源文件格式

    俗话说:人靠衣服马靠鞍!设计师要想进入面试环节,一个优秀的作品集是很有力的敲门砖。但是你想面试?你拿什么作品谈条件!你想跳槽?你拿什么作品跳槽! UI作品集 前几天更新过 今天小编给大家带来了 最新一整套作品集模板-64页 XD+Sketch格式的 可用于参考/学习/替换

    2024年02月11日
    浏览(9)
  • Intellj idea新建的java源文件夹不是蓝色,怎么解决让它成为蓝色源文件
  • Figma怎么导出源文件?

    Figma怎么导出源文件?

    Figma 是一款备受网页和 UI 设计师喜爱的基于矢量的设计工具。那么,如何在 Figma 中导出源文件呢?本篇文章将为大家演示如何以更加简单的方式,从 Figma 快速、免费导出源文件。 即时设计 是一款拥有强大导入导出功能的设计工具,全面覆盖了 Figma 设计能力的且为全中文的

    2024年02月11日
    浏览(11)
  • vscode 无法打开源文件

    vscode 无法打开源文件

    以下是c/c++插件的intelligense设置情况: 解决办法: 重新安装vsode无用;重新下载mingw64,管用了!(我猜可能是之前换电脑移植文件的时候导致了部分文件丢失)

    2024年02月07日
    浏览(9)
  • VScode中添加头文件和源文件的方法

    VScode中添加头文件和源文件的方法

            在正常情况下,若同一文件夹下若头文件、源文件、和主要代码在同一文件夹下,则可以正常运行程序。 如图(此为Visual Studio 示例):   编译结果(无报错):     但在VScode中,同样的使用方式会产生报错。 如下:    main.c:  myheadfile.h: myheadfile.c:    报错如

    2023年04月09日
    浏览(7)
  • Visual Studio C++ 的 头文件和源文件

    在Visual Studio C++中,头文件(Header Files)和源文件(Source Files)是两种不同的文件类型,用于组织和管理C++代码。 头文件(Header Files): 后缀名为 .h 或 .hpp 的文件,例如 example.h 。 包含类、结构体、函数的声明、宏定义和类型定义等。 通常用于存放函数原型、类的声明、常

    2024年02月07日
    浏览(9)
  • CMake获取目录下所有源文件

    1、aux_source_directory指令         aux_source_directory( dir variable ) 比如:         aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} ALL_SOURCE) , 这样将当前目录所有的源文件(.cpp 和.c文件)都放到了ALL_SOURCE变量中,但是头文件并没有被包括进去,若在头文件有函数的实现部分,采用这

    2024年02月15日
    浏览(7)
  • 【C++】源文件.cpp和头文件.h分离编程

    【C++】源文件.cpp和头文件.h分离编程

    将C++代码分为头文件(.h)和源文件(.cpp)的做法有以下几个好处: 模块化和代码组织:将函数和类的声明(包括函数原型、类的成员和属性等)放在头文件中,将函数和类的实现(具体的函数逻辑、成员函数的定义等)放在源文件中。这种分离有助于对代码进行模块化和组

    2024年02月09日
    浏览(8)
  • Linux--多个源文件编译成同一个可执行文件

    Linux--多个源文件编译成同一个可执行文件

    写法一:不推荐 写法二、推荐 $@: 代表目标文件    $^: 代表生成目标文件的所有源文件

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包