芯创电子手把手教你学习FPGA—按键篇

目录

1.实验简介 (3)

2.背景知识 (3)

2.1.按键的基础知识 (3)

2.2.按键消抖基本原理 (3)

2.3.DIY开发板按键电路图 (5)

3.实验环境 (5)

4.实验一(按键控制LED亮灭) (6)

4.1.实验目的 (6)

4.2.试验任务 (6)

4.3.原理分析 (6)

4.4.代码实现 (6)

4.5.实验步骤 (7)

4.6.实验现象 (7)

4.7.日积月累 (8)

4.8.课后作业 (8)

5.实验二(按键消抖控制LED亮灭) (8)

5.1.实验目的 (8)

5.2.试验任务 (8)

5.3.原理分析 (8)

5.4.代码实现 (9)

5.5.实验步骤 (11)

5.6.实验现象 (11)

5.7.日积月累 (12)

5.8.课后作业 (12)

1.实验简介

本教程以实验为主,力求以详细的步骤和讲解让大家以最快的方式了解FPGA的开发的基本流程以及Quartus II软件的使用方法。按键篇的实验相对简单,为基础实验,希望通过对按键篇的学习,大家能够掌握以下知识要点:

熟悉和掌握FPGA开发的基本流程和Quartus II软件的基本使用方法。

掌握按键的基本原理和使用方法。

掌握按键消抖的基本原理和实现方法。

2.背景知识

2.1.按键的基础知识

按键是电子开关,是一种常用的机械装置,按键开关是各种电子设备不可或缺的人机接口,是电子设计中必不可少的输入设备,使用时轻轻点按开关按钮就可使开关接通,当松开手时开关即断开,其内部结构是靠金属弹片受力弹动来实现通断的。

2.2.按键消抖基本原理

通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。按键按下时会有抖动,也就是说我们其实只按一次,但是实际产生的“按下”却是许多次的,因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图所示,为了不产生这种现象而作的措施就是按键消抖。

按键的抖动时间由按键的机械特性所决定,一般为5ms—10ms。所以我们在做按键检测时都要加一个消抖的过程。按键消抖主要有两种方案:一是硬件消抖;二是软件消抖。

硬件消抖

在键数较少时可用硬件方法消除键抖动。下图所示的RS触发器为常用的

硬件去抖。

图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析RS触发器的工作过程很容易得到验证。

软件消抖

如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。

2.3.DIY开发板按键电路图

通过原理图可以看出,当按键未被按下时,与按键相连的相应FPGA管脚接3.3V为高电平,当按键被按下时,与按键相连的相应FPGA管脚接GND为高电平,所以我们只要检测与按键相连的相应FPGA的IO口的电平即可获知相应按键是否被按下。

3.实验环境

硬件实验环境为EEPW FPGA开发板DIY活动套件

软件实验环境为Quartus II9.0开发软件

4.实验一(按键控制LED亮灭)

4.1.实验目的

掌握按键控制LED的基本原理和实现方法。

掌握采用Verilog HDL语言编程实现按键控制LED亮灭的设计方法。

4.2.试验任务

当独立按键KEY按下后,相应的LED被点亮;KEY再次按下后,相

应的LED熄灭,

4.3.原理分析

当独立按键KEY按下后,相应的LED被点亮;KEY再次按下后,LED

做翻转输出,即LED熄灭,从而实现按键控制LED亮灭。本实验没有

对按键做消抖处理。

4.4.代码实现

4.5.实验步骤

(1)建立新工程项目:

打开Quartus II软件,进入集成开发环境,点击File→New project wizard建立一个工程项目。

(2)建立文本编辑文件:

点击File→New..在该项目下新建Verilog HDL源程序文件,输入试验程

序中的源程序代码保存后选择工具栏中的按钮启动编译,若在编译

中发现错误,则找出并更正错误,直到编译成功为止。

(3)选择器件型号及引脚的其他设置:

选择所用的FPGA器件----EP2C5Q208C8,以及进行一些配置。选择配置

器件EPCS4,设置不需要使用的IO功能为As inputs,tri-stated。点击两

次ok,回到主界面。

(4)配置FPGA引脚:

在Quartus II软件主页面下,选择Assignments→Pins或选择工具栏上按钮,配置相关引脚。

(5)编译工程项目:

在Quartus II主页面下,选择Processing→Start Compilation或点击工具

栏上的按钮启动编译,直到出现“Full Compilation Report”对话框,点击OK即可。

(6)下载设计程序.sof文件到目标FPGA,下载采用JTAG方式(由于配置芯片擦写次数有限,实验均采用JTAG下载方式)。

4.6.实验现象

当独立按键KEY按下后,相应的LED被点亮;再次按下后,有时LED

却没有熄灭,由于没有对按键做消抖处理,故会出现此种抖动现象。

4.7.日积月累

Verilog HDL语言中的if语句与C语言的十分相似,使用起来也很简单,

其使用方法有一下三种:

1)If(条件1)语句块1

2)If(条件1)语句块1

else 语句块2

3)if(条件1)语句块1

else if(条件2)

.........

else if(条件n) 语句块n

else 语句块n+1

在上面三种方式中,“条件”一般为逻辑表达式或者关系表达式,也可以

是一位的变量。在应用中,else if分支的语句数目由实际情况决定;else

分支也可以缺省,但在组合逻辑中会产生一些不可预料的逻辑单元,导

致设计功能失败,因此应该尽量保持if语句分支的完整性。

4.8.课后作业

按键控制1位数码管循环显示0-9

5.实验二(按键消抖控制LED亮灭)

5.1.实验目的

掌握按键消抖的基本原理和实现方法。

掌握脉冲边沿检测的基本原理和实现方法。

掌握采用Verilog HDL语言编程实现按键消抖设计方法。

5.2.试验任务

实现按键消抖控制LED亮灭,当独立按键KEY按下后,相应的LED被

点亮;KEY再次按下后,相应的LED熄灭,

5.3.原理分析

按键在按下时会产生抖动,释放时也会产生抖动,所以在设计键盘扫描

程序时必须考虑按键的消抖,我们一般只考虑按下时的抖动,而放弃对释放时抖动的消抖。抖动时间一般为20ms左右。按下的最终结果是低电平。在单片机设计的的按键去抖思路是:检测到按下时延时20ms再检测,如果状态仍为按下,则确认是按下的;如果状态为弹起的,则确认是干扰,无按键按下。

有一个概念要理一下,按键按下时会有抖动,也就是说我们其实只按一次,但是实际产生的“按下”却是许多次的,这些许多次集中在这20ms里。我们按的只是一次,而实际却产生了许多次,那么就必须滤除其他的次数。单片机为了得到真正的“按下”,通过延时20ms,把其他的“按下”(也就是抖动)给滤除了。然后再次判断是否有按下,因为有的时候干扰很大。

而在FPGA中,基于下面的程序,理解如下:在这个程序里检测按键是否按下的方法是脉冲边沿检测法。而在单片机里是判断是否为低电平的方法(那么在FPGA中可不可以也用这个方法呢?)第一次检测到后,启动20ms 计数器,时间到后再检测。这里的检测方法跟脉冲边沿检测法有异曲同工之处,FPGA过20ms检测按键是否按下,存储检测到的值,并且按位取反与前一个20ms检测的值相与,得到一个值,如果为1,则判断按键按下,否则则无按下。所以跟单片机按键扫描的原理是一样的,不同的是检测方法不一样。

5.4.代码实现

5.5.实验步骤

(1)建立新工程项目:

打开Quartus II软件,进入集成开发环境,点击File→New project

wizard建立一个工程项目。

(2)建立文本编辑文件:

点击File→New..在该项目下新建Verilog HDL源程序文件,输入试验程

序中的源程序代码保存后选择工具栏中的按钮启动编译,若在编译

中发现错误,则找出并更正错误,直到编译成功为止。

(3)选择器件型号及引脚的其他设置:

选择所用的FPGA器件----EP2C5Q208C8,以及进行一些配置。选择配置

器件EPCS4,设置不需要使用的IO功能为As inputs,tri-stated。点击两

次ok,回到主界面。

(4)配置FPGA引脚:

在Quartus II软件主页面下,选择Assignments→Pins或选择工具栏上按钮,配置相关引脚。

(5)编译工程项目:

在Quartus II主页面下,选择Processing→Start Compilation或点击工具

栏上的按钮启动编译,直到出现“Full Compilation Report”对话框,点击OK即可。

(6)下载设计程序.sof文件到目标FPGA,下载采用JTAG方式(由于配置芯片擦写次数有限,实验均采用JTAG下载方式)。

5.6.实验现象

当独立按键KEY按下后,相应的LED被点亮;KEY再次被按下后,LED 熄灭,由于对按键做了消抖处理,故不会出现上次实验中的抖动现象。

5.7.日积月累

脉冲边沿检测就是检测输入信号上升沿或者下降沿的检测,具体就是建

立2个寄存器,形成二级寄存器,在时钟触发中,首先把数据送入第一

个寄存器中,然后在下一个时钟上沿到来时,将第一个寄存器中的数据

存入第二个寄存器,也就是说第二个寄存器中的数据始终比第一个寄存

器晚一个周期,即晚一个数据,然后再将第一个寄存器中的数据取反与

第二个寄存器的数据相与,产生的数存入一个新的寄存器里,这样产生

的结果是当第一个寄存器中的数据由1变为0时,就会在新的寄存器里

产生一个高电平,并维持一个周期,这样就完成了下降沿的检测。用同

样的方法也可实现脉冲上升沿的检测。

5.8.课后作业

按键消抖控制1位数码管循环显示0-9

芯创电子手把手教你学习FPGA将在以下QQ群持续更新,敬请期待!芯创电子工作室一群:110873059

芯创电子工作室二群:163614167

芯创电子工作室三群:190940465

欢迎大家加入,一起交流学习FPGA!

相关文档
最新文档