0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【紫光同创国产FPGA教程】【第六章】PDS下按键消抖实验

FPGA技术专栏 来源:芯驿电子科技 作者:芯驿电子科技 2021-02-04 13:24 次阅读

原创声明:

本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(alinx.com)。

适用于板卡型号:

PGL22G/PGL12G

1. 文档简介

本文主要讲解按键消抖原理及程序编写,程序实现按键按下后数字加1,并在led出来,通过PDS软件编译调试。

2. 实验环境

3. 实验原理

按键做为基本的人机输入接口,在很多电子设计中都能见到,由于机械特性,在按键按下或松开的时候,按键输入值是有抖动的,无论按下去是多平稳,都难以消除抖动,按键消抖方式有很多,本实验主要是通过FPGA计时来消抖。实验中设计了一个计数器,当按键输入有变化时,计时器清零,否则就累加,直到加到一个预定值(例如10ms),就认为按键稳定,输出按键值,这样就得到以后没有抖动的按键值。由于在很多地方需要用到按键下降沿或上升沿的检测,按键消抖模块直接集成了上升沿和下降沿检测的功能。

o4YBAGAY4guAEo5jAAAVvrZUY3w009.jpg

4. 程序设计

如下图所示,通过按键消抖后,在按键按下时,十进制计数器加1,通过数码管译码扫描后显示出来。

pIYBAGAY4gyABqtsAAAQEYgXsnE414.jpg

按键消抖部分的原理在上节已经讲过,按键消抖部分代码写的非常精炼,阅读起来稍显费解,建议结合仿真波形去读代码。在提供的例程文件下的src文件夹中同时提供了仿真文件key_debounce_tb.v,可以通过添加仿真文件来进行仿真观察代码中信号的变化

信号名称 方向 说明
clk in 时钟输入
rst_n in 异步复位输入,低复位
button_in in 按键输入
button_posedge out 消抖后按键上升沿,高有效,1个时钟周期
button_negedge out 消抖后按键下升沿,高有效,1个时钟周期
button_out out 消抖后按键输出

按键消抖模块(ax_debounce)端口

LED显示部分在本章不做说明,就例程中按键消抖模块“ax_debounce”模块做一些讲解,模块中通过了两级D触发器来寄存键值,只有当键值稳定时才将键值输出。我们可以看到在assign赋值语句中有一条“assign a_reset=(DFF1 ^ DFF2)”,学过数字电路的应该都知道“ ^ ”是异或运算符,运算符两边相同运算结果为0, 不同运算结果为1。在程序中DFF1和DFF2比较运算后的值通过“assign”赋给“a_reset”表示比较锁存键值的前后两级寄存器的值是否一致,只有前后两级寄存器的值一致,也就是a_reset的值为0时才表示当前锁存的键值没有变化。当计数器累加到“TIMER_MAX_VAL”,表示锁存的键值已经稳定可以输出。另外在模块中我们可以看到“{.......}”符号,要注意这可不是大括号,这表示位拼接运算符,其作用是将运算符内的两位,或是多位信号拼接在一起,具体用法请参考例程。

最后,程序中需要说明的是“button_posedge”和“button_negedge”两个输出信号,这是一种常用的上升沿和下降沿的采集方法,其描述的RTL视图如下:

o4YBAGAY4gyATkvyAAAXG_SbSYI531.jpg

当然还有其他的边沿检测电路的描述方法,但是其基本原理都是在逻辑时序电路里先将需要检测的信号作为输入非阻塞赋值给一个自定义寄存器,通过判断前后两级寄存器的值来判断是上升沿或是下降沿,由0 ->1 变化是上升沿,由1 -> 0变化是下降沿;

5. Modelsim仿真

$random生成随机数模拟按键抖动,按下按键对应输出二进制数据加一。按键的按下和释放经消抖后会得到一个稳定的下降沿和上升沿。仿真结果和部分仿真文件如下图所示:

pIYBAGAY4g2Ad0ZaAAB7a0vLSUo341.jpgo4YBAGAY4g2ADswDAAAnAWTR0EI572.jpg

button_negedge为按键经过消抖后按键的下降沿,button_posedge为按键经过消抖后按键的上升沿。

6. 实验现象

开发板上电后下载程序,按下“KEY2”按键,可以看到4个LED会变化,对应二进制数据,按一次加一,如果不经过消抖,是无法实现按一次加一的。

开发板操作

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21644

    浏览量

    601419
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59675
  • 按键
    +关注

    关注

    4

    文章

    223

    浏览量

    57560
  • PDS
    PDS
    +关注

    关注

    2

    文章

    28

    浏览量

    15262
  • 紫光同创
    +关注

    关注

    5

    文章

    80

    浏览量

    27477
收藏 人收藏

    评论

    相关推荐

    紫光同创盘古PGX-Nano教程】——(盘古PGX-Nano开发板/PG2L50H_MBG324第二按键实验例程

    灯、按键、拨码开关等。 二:实验目的 对按键PB0进行按键 三:
    发表于 04-28 17:57

    数据采集光盘实例第一第六章

    数据采集光盘实例第一第六章
    发表于 06-28 21:02

    数据采集光盘实例第六章至第十二

    数据采集光盘实例第六章至第十二
    发表于 06-28 21:17

    【ALIENTEK 战舰STM32开发板】STM32开发指南--第六章 跑马灯实验

    第六章 跑马灯实验STM32最简单的外设莫过于IO口的高低电平控制了,本章将通过一个经典的跑马灯程序,带大家开启STM32之旅,通过本章的学习,你将了解到STM32的IO口作为输出使用的方法。在本章
    发表于 01-10 15:50

    求王庆利《单片机设计标准教程》第六章的一个函数!!

    在做一个设计,急需《单片机设计标准教程》里第六章 的I2C总线函数 #include“IIClib.h” 谁有帮忙拍张图片传一
    发表于 05-05 21:20

    《测控电路》习题完整参考答案(第六章

    《测控电路》习题完整参考答案(第六章
    发表于 05-07 11:36

    三相电路(第六章)

    三相电路(第六章) 一、 三相电源及其连接若三个电压源的电压uA,uB,uC的最大值相等,频率相同,相位互差120°,则此三个电压源的组合称为对称
    发表于 05-23 15:17 38次下载

    高频电子线路第六章答案

    高频电子线路第六章答案.
    发表于 06-05 10:41 41次下载

    PCB布线设计经验谈附原理图(第六章)

    PCB布线设计经验谈附原理图(第六章)   对于12位传感系统的布线,应用的电路是一负载单元电路,该电路可精确测量传感器上施加的
    发表于 10-28 09:30 1001次阅读
    PCB布线设计经验谈附原理图(<b class='flag-5'>第六章</b>)

    《测控电路》习题完整参考答案(第六章

    《测控电路》习题完整参考答案(第六章
    发表于 02-07 15:17 0次下载

    数字信号处理 第六章

    数字信号处理 第六章
    发表于 10-19 09:34 4次下载
    数字信号处理 <b class='flag-5'>第六章</b>

    静噪基础第六章_EMI静噪滤波器

    静噪基础第六章,EMI静噪滤波器
    发表于 01-24 16:25 4次下载

    STM8S BLDC电机第六章工程的stm8选项字节配置

    STM8S BLDC电机第六章工程的stm8选项字节配置
    发表于 03-05 15:07 8次下载

    电力系统继电保护第六章-变压器保护(课件)下载.ppt

    继电保护第六章-变压器保护(课件)
    发表于 04-28 09:45 0次下载
    电力系统继电保护<b class='flag-5'>第六章</b>-变压器保护(课件)下载.ppt

    计算机网络第六章应用层资源下载

    计算机网络第六章应用层资源下载
    发表于 05-17 10:25 0次下载