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

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

3天内不再提示

【教程分享】 FPGA零基础学习:按键控制LED

电子发烧友论坛 来源:未知 2023-06-13 08:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。


系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。后续会陆续更新 Xilinx 的 Vivado、ISE 及相关操作软件的开发的相关内容,学习FPGA设计方法及设计思想的同时,实操结合各类操作软件,会让你在技术学习道路上无比的顺畅,告别技术学习小BUG卡破脑壳,告别目前忽悠性的培训诱导,真正的去学习去实战应用,这种快乐试试你就会懂的。话不多说,上货。


按键控制LED


利用按键控制LED的要求为:按一下按键,改变一下LED的状态。按键按一次,LED由熄灭变为点亮,按键再按一次,LED由点亮变为熄灭。


硬件介绍



开发板上面有四个按键,当按键按下时,将对应的网络置成低电平;当按键释放时,将对应的网络置成高电平。


开发板上面有四个LED发光二极管,FPGA输出高电平时,LED点亮;FPGA输出低电平时,LED熄灭。


设计原理

通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。



按键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。

抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。

我们可以在按键和主控设备之间加入消抖电路(消抖芯片、电容等),此种方法会增大PCB面积和花费一定的物料费用。大多数的板子直接将按键和主控设备相连接,将带有抖动的波形输入到主控设备内部,由内部进行消抖处理。

单片机一般采用延迟重采样的方式进行消抖。当检测到信号为低时,延迟一段时间(一般为20ms),再次检测信号是否为低,如果为低,则证明按键按下,否则认为按键没有按下,继续下一次检查。

在FPGA设计时,笔者推荐另外一种方式:持续采样。当检测到信号持续为低10ms,认为按键按下;当检测到信号持续为高10ms,认为按键释放。

在设计时,需要考虑到外部的按键信号为异步信号,需要进行同步处理。具体请参考附录2 FPGA中的同步信号、异步信号和亚稳态。

每次按键按下的时间的长短不一,经过消抖后,低电平的持续长度长短也不一样。此长度远远大于一个时钟周期的长度。要求每次按下只能够切换一次LED的状态,所以不能够直接用此电平当做输出翻转的使能。

经过消抖的波形,每次按下只有一个下降沿(按键按下时)、只有一个上升沿(按键释放时)。所以通过检测下降沿(上升沿)的变化,产生一个新的信号------脉冲(一个时钟周期的脉冲),利用此脉冲作为翻转的使能即可。利用检测到下降沿的脉冲翻转时,LED的状态会在按下时就会改变;利用检测到上升沿的脉冲翻转时,LED的状态会在释放时发生改变。本设计中采用检测到下降沿的脉冲进行翻转。


设计架构和信号说明

本设计模块命名为key_led。



在设计中,共分为三个模块。

  • key_filter(按键消抖模块):将外部输入的带有抖动的波形进行消抖。

  • edge_check(边沿检测模块):将消抖后的波形进行下降沿检测,并产生对应的脉冲。

  • led_ctrl(led控制模块):利用脉冲,翻转led的输出状态。



key_filter设计实现

本设计采用状态机实现,状态机的具体原理请参看附录3。


对key_n信号为异步信号,需要进行同步两拍,命名为key_n_r和key_n_rr。状态机的判断信号为key_n_rr信号。


本设计共分为四个状态,KEY_OFF(按键释放状态),SHAKE_ON(按键按下时抖动判断状态),KEY_ON(按键按下状态),SHAKE_OFF(按键释放时抖动判断状态)。


按键没有按下时,一直KEY_OFF状态,当按键信号变为低电平时,就转入SHAKE_ON状态,检测低电平的持续时间。如果持续时间没有达到T_10ms就变为高电平,则清零计数器并返回KEY_OFF状态;如果持续时间没有达到T_10ms并且也一直为低电平,则继续在SHAKE_ON状态计数;如果持续时间达到T_10ms并且为低电平,则清零计数器并进入KEY_ON状态。在KEY_ON状态,外部输入为低电平时,则继续在KEY_ON状态;如果外部输出为高电平,则转入SHAKE_OFF状态。在SHAKE_OFF状态,如果持续时间没有到达T_10ms就变为低电平,则清零计数器并返回KEY_ON状态;如果持续时间没有达到T_10ms并且一直为高电平,则继续在SHAKE_OFF状态计数;如果持续时间达到T_10ms并且一直为高电平,则清零计数器并转入KEY_OFF状态。


在KEY_OFF和SHAKE_ON状态,认为按键没有按下;在KEY_ON和SHAKE_OFF状态,认为按键为按下。


状态转移图如下:




设计代码为:


localparam可以定义参数,与parameter的区别在于,parameter定义的参数可以在例化时进行参数修改,而localparam定义的参数在例化时则不能够修改。定义状态机状态时,一般采用localparam的定义方式。在不希望别人修改参数时,也可以定义为localparam。


edge_check设计实现

在一个波形中,如果当前时刻为低电平,上一个时刻为高电平,则认为波形中有一个下降沿;如果当前时刻为高电平,上一个时刻为低电平,则认为波形中有一个上升沿。


在数字电路设计时,可以采用寄存器来存储上一个时刻的值。



在寄存器电路中,Q的值,永远是上一个CLK的有效边沿所采样的D值。因此Q为上一时刻值,而D为当前时刻的值。


设计代码为:


在设计中,注释掉的两行代码和其下方的一行代码的功能是相同的。例:对于上升沿脉冲来说,现在为1,过去为0即为上升沿。由于寄存器每个时钟周期都刷新,满足这个要求的只会存在一个时钟周期,所以flag_pos为一个时钟周期的脉冲。


led_ctrl设计实现

本模块中,利用脉冲进行led状态的翻转即可。


设计代码为:


key_led设计实现

本模块只是负责将上述的三个模块按照架构图的方式进行连接,形成最终的设计。


设计代码为:


在设计中,采用了按键按下时的脉冲(检测到下降沿的脉冲),按键按下时led的状态即可进行翻转。



功能仿真

在仿真时,将按键消抖中的T_10ms的参数修改为20,即持续时间不超过400ns都不认为是有效按下或者抬起。


仿真代码如下:


将okey_n、flag信号添加出来。



通过RTL仿真图,可以清晰的看到okey_n信号将key_n的抖动滤除掉;flag信号为okey_n信号的下降沿时所产生的脉冲;led在flag信号为高时,反正翻转。


分配管脚、下板测试之前,应该将按键消抖里面的T_10ms参数重新改为500_000,否则下板后可能会达不到消抖的效果。


下板成功后,可以修改在设计中使用上升沿的脉冲,得到的现象应该是按键释放时,LED的状态发生反转。


切记:每次修改代码,一定要进行重新编译,否则更改将不会生效。






声明本文由电子发烧友社区发布,转载请注明以上来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com。


更多热点文章阅读

  • 采用先进成熟工艺和自主产权体系结构,紫光同创FPGA开发板入门指导

  • 嵌入式Linux开发秘籍!工程师大佬亲历分享项目样例

  • RK3568!四核64位ARMv8.2A架构,汇聚编译源码及实战样例

  • 尺寸仅有21mm*51mm,板边采用邮票孔设计,合宙 Air105 核心板开发总结

  • 基于Cortex-M3内核的32位微控制器STM32项目实战分享!


原文标题:【教程分享】 FPGA零基础学习:按键控制LED

文章出处:【微信公众号:电子发烧友论坛】欢迎添加关注!文章转载请注明出处。

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

原文标题:【教程分享】 FPGA零基础学习:按键控制LED

文章出处:【微信号:gh_9b9470648b3c,微信公众号:电子发烧友论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【瑞萨RA6E2】 配置Keil开发环境+使用按键控制LED+串口/调试器烧录程序

    一、 概述 本报告旨在记录基于瑞萨RA6E2 MCU评估板的初步开发体验。主要内容包括: 软件开发环境的搭建与配置。 实现一个基础的GPIO控制功能:通过用户按键控制LED灯的亮灭。 实践两种程序
    发表于 11-26 20:53

    【EASY EAI Nano-TB(RV1126B)开发板试用】+LED闪烁效果及按键控制

    过程见图2所示。 图2 触摸检测 将状态检测值保存到变量的方法如图3所示。 图3 状态存储 以按键控制LED的脚本程序如下: 经脚本程序的运行,其效果如图4和图5所示。 图4 点亮LED 图5 熄灭
    发表于 10-30 14:38

    【RA4M2-SENSOR】+按键控制LED

    RA4M2-SENSOR开发板配有LED按键,利用它可进行GPIO口的输入输出测试,其电路见图1所示。 图1LED按键电路 为实现以按键控制
    发表于 09-02 16:18

    免焊BNC接头接法:零基础快速安装指南与信号稳定技巧

    通过以上步骤,即使零基础用户也能快速完成免焊BNC接头的安装,确保视频、音频信号稳定传输,满足监控、音视频工程等场景需求。
    的头像 发表于 08-28 16:59 742次阅读
    免焊BNC接头接法:<b class='flag-5'>零基</b>础快速安装指南与信号稳定技巧

    ZX8002D LED触摸调光集成芯片数据手册

    ZX8002D台灯按键三档调光IC芯片,单键调光IC输入电压2.5-5V,三档亮度调节,一路灯串输出,一个按键控制按键三档亮度调节。多用于LED台灯,
    发表于 07-07 10:16 12次下载

    【教程】零基础!手把手教你使用STM32F4进行E22-400T22S编程通信

    通过本文带大家零基础使用STM32F407VET6单片机进行E22-400T22S模块编程并进行简单的通信,当然如果学会了,也可以举一反三应用于E22、E220、E32所有模块上。一STM32环境
    的头像 发表于 07-03 19:32 1044次阅读
    【教程】<b class='flag-5'>零基</b>础!手把手教你使用STM32F4进行E22-400T22S编程通信

    零基学习LuatOS编程:快速上手开发实战教程!

    无论你是刚接触物联网编程的新手,还是希望拓展技能的技术爱好者,本教程将为零基础的读者提供一条清晰的LuatOS学习路径。从安装开发工具到编写第一个程序,我们将通过实例讲解核心概念,助你快速实现从理论
    的头像 发表于 06-13 17:27 445次阅读
    <b class='flag-5'>零基</b>础<b class='flag-5'>学习</b>LuatOS编程:快速上手开发实战教程!

    如何把 电位器旋钮控制改为面板或按键控制

    ),所以希望能找到人帮忙把电位器调速旋钮改为面板或按键控制控制器或调速器,如下图。 。这款控制器可以在面板上设置/控制电机转速,但是这款控制
    发表于 05-18 07:40

    【「零基础开发AI Agent」阅读体验】+读《零基础开发AI Agent》掌握扣子平台开发智能体方法

    收到发烧友网站寄来的《零基础开发AI Agent》这本书已经有好些天了,这段时间有幸拜读了一下全书,掌握了一个开发智能体的方法。 该书充分从零基础入手,先阐述了Agent是什么,它的基本概念和知识
    发表于 05-14 19:51

    【「零基础开发AI Agent」阅读体验】+ 入门篇学习

    很高兴又有机会学习ai技术,这次试读的是「零基础开发AI Agent」,作者叶涛、管锴、张心雨。 大模型的普及是近三年来的一件大事,万物皆可大模型已成为趋势。作为大模型开发应用中重要组成部分,提示词
    发表于 05-02 09:26

    【「零基础开发AI Agent」阅读体验】+初品Agent

    期待中的《零基础开发AI Agent——手把手教你用扣子做智能体》终于寄到了,该书由叶涛、 管锴、张心雨完成,并由电子工业出版社出版发行。 全书分为三个部分,即入门篇、工具篇及实践篇。由此可见这是
    发表于 04-22 11:51

    基于51/32单片机按键控制步进电机正反转,A4988驱动

    基于51/32单片机按键控制步进电机正反转,A4988驱动
    发表于 04-14 15:05 6次下载

    零基学习一阶RC低通滤波器(从原理到实践)

    *附件:零基学习一阶RC低通滤波器(从原理到实践).docx
    发表于 03-26 14:35

    Vivado Tcl零基础入门与案例实战【高亚军编著】

    Vivado Tcl零基础入门与案例实战-高亚军编写
    发表于 01-14 11:13

    告别繁琐按键,双触摸LED让你轻松调光调色!

    方案开发双触摸按键LED单/双色温驱动控制方案-ZHUOLIANWEIKEJI-定制服务品质保障技术领先在现代家居与照明设计中,便捷性、智能化以及个性化需求日益增长。传统的按键控制方式
    的头像 发表于 12-07 01:08 1046次阅读
    告别繁琐<b class='flag-5'>按键</b>,双触摸<b class='flag-5'>LED</b>让你轻松调光调色!