基于FPGA的LED流水灯与按键消抖:实验原理

实验原理

(1)LED流水灯。流水灯是一个典型的FPGA程序设计,通过完成控制8位LED向左依次循环点亮的实验,达到对硬件语言、软件开发平台等初步认识的目的。

①if语句的使用。

Verilog HDL语言中的if语句与C语言中的十分相似,其使用方法有以下三种:

a.if(条件1)语句块1;

b.if(条件1)语句块1;

else语句块2;

c.if(条件1)语句块1;

else if(条件2)语句块2;

……

else if(条件 )语句块 

else语句块 +1。

在上述三种方式中,“条件”一般为逻辑表达式或关系表达式,也可以是一位的变量。如果表达式的值出现0(假),x(未知),z(高阻),则全部按“假”来处理;若为“1”,则按“真”来处理。语句块若为单句,直接书写即可;若为多句,则需要用“begin end”块括起来。建议无论多句还是单句都用“begin end”块括起来。

②case语句的使用。

case语句是一个多路条件分支语句,常用于多路译码、状态机和微处理机的指令译码等场合。case语句的语法格式为:

case(条件表达式)

分支1:语句块1;

分支2:语句块2;

……

分支 :语句块 n

default

endcase

其中,“分支 ”通常都是一些常量表达式。case语句先对“条件表达式”求值,然后同时对各分支项求值并进行比较,这是与if语句最大的不同。比较完成后,与条件表达式值相匹配的分支中的语句被执行。分支项需要互斥,否则会出现逻辑矛盾。default将覆盖没有被分支表达式覆盖的其他所有分支。此外,当case语句跳转到某一分支后,其余分支将不再比较,直接执行endcase后的语句。

如果多个分支都对应着同一个操作,则可以通过逗号将各个不同分支的取值隔开,其格式为:

分支1,分支2,…,分支 :语句块;

(2)按键的抖动以及消抖。

如图3.4.1所示,按键在闭合和断开时,触点会存在抖动现象。在按键按下或者释放的时候都会出现一个不稳定的抖动时间,如果不对抖动进行处理,则系统会认为出现了多个上升沿和下降沿,从而影响实验结果。

图3.4.1 按键的抖动以及消抖

本实验消抖的思路是,当检测到键值有从1到0的变化时,进行一段时间的时延,然后再检测时延后的键值是不是0。如果是,则说明按键被按下;如果不是,则说明按键被误触发。

本实验用到的检测键值变化的方法称为边沿检测法,其思路如下:每一时刻的键值,都与上一时刻的键值取反相与,相与结果为1,则为检测到一个下降沿。例如:

时刻:1 2 3 4 5 6

当前时刻键值:1 1 1 0 0 1 1

取反:0 0 0 1 1 0 0

下一时刻键值:1 1 0 0 1 1

相与:0 0 0 0 1 0

即在时刻4的键值变化后,可在时刻5得到一个时钟的1。消抖思路相同,只是时刻之间的间隔已变成设定的时延。

版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。http://www.apmygs.com/2666.html
返回顶部