FPGA百秒内倒计时设计,基于小脚丫step-max10版本

2.2  时钟分频

2.2.1  时钟输入电路

下图2-2为小脚丫FPGA板的时钟输入信号(CLK)电路,输入固有频率为12MHz。晶体振荡器电路能提供精度较高的脉冲信号,其缺点为输出信号频率由晶振的固有频率决定,最终要得到1HZ的脉冲信号,必须增加分频电路才能实现。

 

图2-2  输入频率电路图

2.2.2  分频器

时钟信号的处理是FPGA的特色之一因此分频器也是FPGA设计中使用频率非常高的设计之一我们需要对系统时钟进行分频,可用计数的方式分频频率等于输入信号频率除以分频系数(clk_div = clk/PERIOD), 占空比为1/ PERIOD(在一个输入信号的周期中)。而输入固有频率为12MHz且占空比为50%,由此可推算出分频参数大约为6000000使其分频出的信号的占空比也为50%,即可通过计数器划为1Hz频率(12000000/1)*50%=6000000,当计数器达到它的时候电平进行翻转,就可以实现结果了。图2-3为分频器的流程图。同时,在产生报警信号时使用了另外一个分频器,但原理和此分频器一致,可以精确地从报警时开始计时。

 

图2-3  分频器设计流程框图

2.3  按键消抖

按键消抖,通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因此在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。本设计中的“按键消抖”是必不可少的,对于用户的体验也是直线上升。在没有按键消抖下的设计,按键功能是不太靠谱的,常常出现无法正常使用的情况。在本设计中采用通过“延时消抖”方法,可任意设置按键的个数。如图2-4为按键原理图。

 

图2-4  按键原理图

2.3.1  延时前脉冲边沿检测

检测按键按下时要用到脉冲边沿检测的方法,捕捉信号的突变、捕捉时钟的上升沿或下降沿时经常会用到这种方法。简单地说就是用一个频率更高的时钟去触发要检测的信号,用两个寄存器去储存相邻两个时钟采集到的值,然后进行异或运算,如果不为零,代表产生了上升沿或下降沿。

在“按键消抖”的过程中,同样运用了脉冲边沿检测。用两个寄存器储存相邻时钟采集的值(例如keypre,key),然后将data取反与前一个值相与(state=keypre&(~key)),如果为1则判断有下降沿,即按键按下由高到低;否则无变化。

将一个信号由连续时钟采集,相邻两个钟触发的值存入两个寄存器。此时利用了非阻塞赋值的特点,经过两个时钟触发,key_rst存储的是当前时刻key的值,key_rst_pre存储的是前一个时钟的key的值。图2-3为按键状态的存储流程图。脉冲边沿检测:key_edge= key_rst_pre & (~key_rst)。当key检测到下降沿时,key_edge产生一个时钟周期的高电平。

 

图2-5  按键状态存储流程图

2.3.2  产生延时

当检测到key_edge有效是计数器清零开始计数。([17:0] cnt)产生延时所用的计数器,系统时钟12MHz,要延时20ms左右时间,至少需要18位计数器。如图2-6为延时流程图。

 

图2-6  延时流程图

2.3.3  延时后检测按键

如果按键状态变低产生一个时钟的高脉冲。如果按键状态是高的话说明按键无效。通过两个寄存器:key_sec_pre和key_sec,当延时结束后将第一次上key_sec赋值。如图2-7为延时后按键存储的流程图。

 

图2-7  延时后按键存储流程图

与此同时,检测电平寄存器变量key_sec_pre会存储key_sec的值。如图2-8。

 

图2-8  电平按键存储流程图

通过边沿检测,输出信号key_pulse = key_sec_pre & (~key_sec)。得到“按键消抖”后的按键值。

2.4  倒计时

该模块为此设计的核心部分,完成对数码管的动态显示和倒计时的功能实现。首先,完成对数码管的显示值进行编码。其为两个七段数码管,并且显示0-F的值,通过初始化的方式将写入16位寄存器seg中。需要设置时所使用的“个”与“十”寄存器、供其显示的“个”与“十”寄存器、输入分频的脉冲信号和输入信号、输出的两个数码管的寄存器和状态标志位。每当分频脉冲信号为高电平且开始标志为高电平时进入倒计时,每次对“个”寄存器进行减1。当个位为0时先判断十位是否为0,如果为0倒计时结束发出报警通过数码管显示“FF”,并伴有RGB灯和LED流水灯的显示效果,否则十位减1。如此循环则进入倒计时。

2.4.1  数码管设计

数码管是工程设计中使用很广的一种显示输出器件,此开发板为两个7段数码管组成,每个数码管分别由a、b、c、d、e、f、g和表示小数点的dp组成。如图2-9为数码管原理图。

 

 图2-9  数码管原理图

下图2-10为7段数码管原理图。

 

图2-10  7段数码管原理图

数码管实际上是由8个led灯组成。共阴极8段数码管的信号端低电平有效,可以控制输出信号控制FPGA的管脚进而使数码管显示。如下表2-1所示。

 

 

表2-1  数码管显示表

输入码

输出码(共阴极)

字型

A3  A2  A1  A0

g   f   e   d   c   b   a

 

0   0   0   0

0   1   1   1   1   1  1

0

0   0   0   1

0   0   0   0   1   1  0

1

0   0   1   0

1   0   1   1   0   1  1

2

0   0   1   1

1   0   0   1   1   1  1

3

0   1   0   0

1   1   0   0   1   1  0

4

0   1   0   1

1   1   0   1   1   0  1

5

0   1   1   0

1   1   1   1   1   0  1

6

0   1   1   1

0   0   0   0   1   1  1

7

1   0   0   0

1   1   1   1   1   1  1

8

1   0   0   1

1   1   0   1   1   1  1

9

1   0   1   0

1   1   1   0   1   1  1

A

1   0   1   1

1   1   1   1   1   0  0

B

1   1   0   0

0   1   1   1   0   0  1

C

1   1   0   1

1   0   1   1   1   1  0

D

1   1   1   0

1   1   1   1   0   0  1

E

1   1   1   1

1   1   1   0   0   0  1

F

 

数码管可正常显示倒计时,并且同步用户操作的“数码管”显示功能。在状态0时,当计数的“个”与“十”寄存器发生变化将会触发“数码管”显示保存的操作。在状态1时,当设置的“个”与“十”寄存器发生变化将会触发“数码管”显示当前数的操作。在报警时和报警后正常显示“FF”。如图2-11为倒计时功能流程图。

 

图2-11  倒计时流程图

2.5  按键控制模块

此前,我们已经对按键进行了“消抖”处理,接下来对四个按键的功能进行了划分。按键1具有中断计数和设置数加1的功能、按键2具有开始计时、暂停计时和设置数减1的功能、按键3具有复位的功能以及按键4具有选择功能状态的功能。以此规划按键,可以节省不少资源,设置好按键值后可自动保存倒计时的值,从而使得倒计时可以通过按键操作实现设置0-99的倒计时数。当按下按键时,KEY导通,对应为上升沿。所以敏感信号为上升沿触发,并且各按键设置有标志位,用于协调系统的运行。例如,通过状态位来控制各个按键的具体功能是什么,是设置还是计时。如图2-11为按键电路图。这里只介绍设置个和十位寄存器的部分。

 

图2-12  按键电路

2.5.1  按键规划

规划按键在本设计中存在一定问题,但根据实际使用来说已是够用,且有一定的人机交互体验。如图2-12为按键框图。

 

图2-13  按键框图

2.5.2  设置部分

当按键1或按键2操作时对应进行加减,当遇到其为0或9时进行判断处理来设置个位寄存器和十位寄存器。如图2-13为设置部分流程图。

 

图2-14  设置部分流程图

 

2.6  RGB灯模块

RGB灯实际上是由三基色红绿蓝组成,在电路中由三个LED灯组成一个RGB灯。如图2-13为RGB电路原理图。当FPGA对应引脚产生低电平时,对应灯点亮。对其进行编码可以组成23 = 8种色,在设计中只使用了三基色闪烁,并且随着报警的计数值变化。

 

图2-15  RGB灯电路

根据需求对输入进行编码。如表2-2。

表2-2  RGB显示表

输入信号

输出信号

G      B      R 

颜色

0      1      1

绿

1      0      1

1      1      0

 

2.7  流水灯模块

流水灯电路由8个LED灯组成,且当FPGA引脚在处于低电平时导通LED灯使其点亮。本设计模拟报警系统,在计数状态和报警结束后显示1个LED灯,在报警过程中所有LED灯点亮。

 

图2-16  流水灯电路

 

第3章  基于小脚丫FPGA的Quartus II使用

3.1  配置

使用不同型号的FPGA配置也是不同的,不仅要对应芯片的类型,还要将软件所定义的输入与输出对应于硬件的管脚。此设计使用的开发板兼容Quartus,并且安装了相应的器件包,对于开发来说是一件容易的事。

3.1.1  设备的配置

在下载程序前对设备进行配置。如下图3-1,选择10M08SCM153I7G,修改I/O standard为3.3-V LVTTL,修改Reserve all unused pins为as input tri-stated with weak pull-up。

 

图3-1  硬件配置

3.1.2  管脚的配置

在Assignments->Pin Planer中配置管脚信息,可用手输入也可使用text文件导入等,但其实工作量差不多,如果为copy别人的项目或者任务分工来说这样会大大缩短开发时间。下图3-2对应了FPGA管脚的配置,根据提供的手册中的管脚分布图可自由分配管脚。

 

图3-2  管脚配置

3.2  RTL视图

在Tools->Netlist Viewers->RTL Viewer中打开可观察各模块之间的关系,使用者可分析原理图的结果与所设想中的设计一致,可以校验代码的正确性,排除一些简单问题的错误。

 

图3-3  RTL视图

 

例如,下图3-4为时钟分频模块结构图。

 

图3-4  时钟分频RTL

3.3  程序下载

如果拥有开发板,并且可以有烧录程序,下载时间也不算特别长。我们可以把测试的部分往后稍稍,先将代码送入开发板,观察板子的具体运行状态。

开发板使用的是USB-Blaster,在软件目录中有驱动程序的安装文件。

第一步,打开Tools->Programmer,硬件选择USB-Blaster。

第二步,点击Add File,在output files文件夹中选择“.pof”文件。

第三步,选中Program/Configure和Verify并点击Start,开始烧录。如下图为已下载成功。如下图3-5程序下载图。

 

图3-5  程序下载图

 

 

 

 

 

该设计为本人电子课程设计。

完整代码及说明连接:https://download.csdn.net/download/qq_42047541/12093274

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1、设计要求基于小脚丫FPGA开发板和四位数码管实现数字时钟的设计,要求: 1)采用FPGA+按键+四位数码管实现数字时钟功能; 2)时间显示格式:XX:XX:XX (时:分:秒),采用24小时制; 3)四位数码管显示时分秒,可以通过按键控制选择显示时分界面还是分秒界面。 4)通过按键设定初始时间。 5)设置在整点12点时,通过蜂鸣器响示意整点报时。蜂鸣器响维持大概5S; 2、硬件连接FPGA的系统时钟来自于小脚丫FPGA开发板配置的24MHz时钟晶振,连接FPGA的C1引脚。 本设计用到五个个按键K1~K5,硬件设计如图1所示,五个按键分别连接到FPGA的B8、C8、A10、A11和A12引脚。 图1. 按键硬件设计设计用到一个蜂鸣器来示意整点报时,硬件设计如图1所示,蜂鸣器连接到FPGA的B2引脚。 图2. 蜂鸣器硬件设计设计用到四位数码管来显示时间,四位数码管用两个74HC595驱动,硬件设计如图1所示,74HC595的串行时钟SCK、并行时钟RCK和串行数据DIN分别连接到FPGA的N2、M1和K1引脚上。 图3. 数码管驱动74HC595硬件设计 3、工作原理1)使用计数器做分频处理,得到周期为1秒的脉冲信号; 2)使用三个8bit的BCD码表示时钟、分钟、秒钟的值,其中高4bit表示值的十位,低4bit表示值的个位; 3)正常运行时,每来一个1S脉冲信号个位加1,个位满10清零同时十位加1,当秒钟满60清零同时分钟个位加1,依次进行...直到23:59:59的下一刻全部清零; 4)按键K5,模式调节,设计共分4中模式(分秒显示、分秒调节、时分显示、时分调节),按动K5依次切换模式; 5)按键K2,时间调节,当数字时钟在时针调节、分针调节或秒针调节模式时,按动K2调节对应时间位; 6)在调时分和调分秒两个状态,可以通过K4和K2键分别左移右移要调整的位,要调整的位会通过对应位的闪烁来示意。通过K4和 K2左右移动选择好要调整的位以后,就可以通过K1和K3来增大或调小对应的位; 4、代码设计为了实现所需要的功能,我们将整个设计划分不同的模块,如图4所示。 图4. 数字时钟程序设计框架 4.1五位按键消抖模块 图5. 五位按键消抖模块 Ø输入:五位的按键电平信息输入 Ø输出:五位消抖后的脉冲输出 Ø功能:将按键按下一次的电平信号,经过消抖后变成一个维持一个时钟周期的脉冲信号; Ø原理: 图6. 按键抖动特性 FPGA过20ms检测按键是否按下,存储检测到的值,并且按位取反与前一个20ms检测的值相与,得到一个值,如果为1,则判断按键按下,否则则无按下。 图7. FPGA按键的理解示意图 4.2电子表显示控制模块。 图8. 电子表显示控制模块 Ø输入:五位的按键脉冲 Ø输出:十六位的BCD码输出,每四个代表一个十进制数; Ø原理:四位的位闪烁控制信号。某一位为一代表这位对应的数码管的一位进行闪烁显示。(在调整状态下,会让当前调整的哪一位进行闪烁。正常显示状态下seg_flash_data全为零); Ø功能:主要就是一个状态机,通过检查输入的按键信息,进行显示状态切换,时间调整。四个状态分别为:显示分秒,调分秒,时分显示,调时分;当K5按键按下(key_pulse[4])时依次跳转,如图9所示。 图 9. 数字时钟状态控制设计 4.3数码管译码模块 图10. 数码管译码模块 Ø输入:四位的BCD码数据 Ø输出:八位的七段数码数据 Ø功能:一个case语句,将输入的四位BCD码转化为七段数码数据; Ø原理:数码管分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳极(COM)需接+5V才能使其工作。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码,共阴极(COM)需接GND才能使其工作。小脚丫拓展板上的数码管如下图所示: 图11. 数码管内部电路 共阴极数码管: 位选为低电平(即0)选中数码管;各段选为高电平(即接+5V时)选中各数码段;由0到f的编码为: 4.4四位数码管显示控制模块。 图12. 数码管显示控制模块 Ø输入:四个八位的七段数码管数据和位闪烁控制信号seg_flash_data. Ø输出:需要串行输出给74HC595的十六位数据; Ø功能:模块就是循环的将四位七段数码数据,组合一个十六位的输出数据; 4.5 74HC595驱动功能模块 图13. 74HC595驱动功能模块 Ø输入:十六位的位选段选数据。 1)duan_wei_data[13:0]分别对应: 2)[ X,X,H+,H-,DIG4,DIG3,DIG2,DIG1,DP,G,F,E,D,C,B,A] ; Ø输出:SPI接口输出,串行输出十六位位选段选信号; Ø
1、设计要求基于小脚丫FPGA开发板和Nokia5110液晶屏实现数字时钟的设计,要求: 1)采用FPGA+按键+液晶屏实现数字时钟功能; 2)时间显示格式:XX:XX:XX (时:分:秒),采用24小时制; 3)增加按键控制,时分秒三位分别可调,处于调节状态的位闪烁区别; 2、硬件连接FPGA的系统时钟来自于小脚丫FPGA开发板配置的24MHz时钟晶振,连接FPGA的C1引脚。 本设计用到两个按键K1和K2,硬件设计如图1所示,两个按键分别连接到FPGA的A2和B7引脚。 图1、按键硬件设计 设计中需要驱动Nokia5110液晶屏作为显示,液晶屏与小脚丫FPGA开发板之间的连接关系如图2所示,对应的管脚如下。 液晶屏RSTCEDCDINCLKVCCBLGND FPGAN3P2N2M1K13.3VJ1GND 图2、液晶屏硬件连接 3、工作原理1)使用计数器做分频处理,得到周期为1秒的脉冲信号sec_clk; 2)使用三个8bit的BCD码表示时钟、分钟、秒钟的值,其中高4bit表示值的十位,低4bit表示值的个位; 3)正常运行时,每来一个sec_clk秒钟个位加1,个位满10清零同时十位加1,当秒钟满60清零同时分钟个位加1,依次进行...直到23:59:59的下一刻全部清零; 4)按键K1,模式调节,设计共分4中模式(运行模式、时针调节、分针调节、秒针调节),按动K1依次切换模式; 5)按键K2,时间调节,当数字时钟在时针调节、分针调节或秒针调节模式时,按动K2调节对应时间位; 6)硬件连接图中,程序复位控制线控制程序复位,断开重连设计复位。 4、代码设计为了实现所需要的功能,我们将整个设计划分不同的模块,如图3所示。 图3、数字时钟程序设计框架 4.1 clock_ctl模块Clock_ctl模块主要实现数字时钟的模式控制,本设计共有4种模式(normal、hour_set、minute_set、second_set)当K1按键按下(set_en为高电平)时依次跳转,如图4所示。 图4、数字时钟状态控制设计 4.2 clock_cnt模块Clock_cnt模块主要实现时钟逻辑模块: 1)当处于normal模式时,每来一个sec_clk秒钟个位加1,个位满10清零同时十位加1,当秒钟满60清零同时分钟个位加1,依次进行...直到23:59:59的下一刻全部清零。 2)当处于second_set模式时,每次K2按键按下(up_en为高电平)时,秒钟个位加1,个位满10清零同时十位加1,当秒钟满60清零,分钟和时钟保持不变,如下: 5、系统运行图5、系统运行 视频地址: https://v.youku.com/v_show/id_XMTM5MDE4OTE2MA==.html?from=s1.8-1-1.2 6、资源报告资源数量比例说明 LUTs71856% 寄存器17911% 存储器00% IO管脚12 时钟频率25MHz 7、知识点Ø时钟计数分频 Ø按键消抖处理 Ø串行/并行转换 ØNokia5110液晶屏驱动 8、参考文档Lattice MachXO2数据手册Nokia5110液晶屏资料 9、相关文件文件名称功能 Digital_clock顶层模块,将所有功能模块接口连接起来 Clock_div实现分频,产生按键、显示和秒时钟 key_board实现按键消抖 clock_ctl实现数字时钟的模式控制 clock_cnt时钟逻辑,产生时分秒的数值 LCD_nokia5110驱动Nokia5110液晶屏的显示

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值