mdykj33的个人空间 https://bbs.21ic.com/?1591856 [收藏] [复制] [RSS]

日志

基于ALTERA实现的篮球倒计时案例

已有 2393 次阅读2017-5-9 16:00 |个人分类:明德扬-至简设计法|系统分类:嵌入式系统| ALTERA, FPGA, 倒计时, 明德扬, 至简设计法

本案例:明德扬首创全新FPGA设计技巧--至简设计法,教你如何一步一步去完成一个复杂电路的设计,里面很多有实用技巧,熟练运用这些技巧,有助于你写出非常优秀的FPGA设计代码。非常简洁易读,欢迎比较。

一、功能描述

本工程包含了两个按键和4位数码管显示,共同实现一个篮球24秒倒计时、并具有暂停和重新计数复位的功能。具体功能如下:

1.数码管显示秒十位、秒个位、0.1秒和0.01秒。

2.上电后,数码管显示2399,表示时间是23.99秒。

3.按下按键1,进入倒计时状态,进行倒计时,一直计到0000后停止。

4.在倒计时状态时,再次按下按键1,则暂停计时;再按下按键1,则继续倒计时。

5.在任何时刻,按下按键2,则复位显示为2399。


二、平台效果图

1.Altera核心板效果图

2.Xilinx核心板效果图

三、实现过程

首先根据所需要的功能,列出工程顶层的输入输出信号列表。

信号名I/O位宽说明
clk
I1系统工作时钟50M
rst_nI1系统复位信号,低电平有效
key_vldI2独立按键
segmentO8数码管段选
seg_selO8数码管位选

我们可以把工程划分成三个模块,分别是倒计时模块、BCD译码模块和数码管显示模块。


1.倒计时模块

倒计时模块实现的是24s倒计时功能,其输出两组计数信号cnt_scnt_ms。例如当时间为23.99时,cnt_s的值为23cnt_ms的值为99;当时间为08.12时,cnt_s的值为8cnt_ms的值为12

模块还实现了暂停和重开始功能,按下按键1开始倒计时,再次按下则暂停,再次按下则开始,无论何时按下按键2,恢复到23.99


本模块的信号列表如下:

信号名I/O位宽说明
clk
I1系统工作时钟50M
rst_nI1系统复位信号,低电平有效
cnt_sO8秒计数器
cnt_msO8毫秒计数器
key_vldI2两个独立按键
din_vldO1输出数据有效指示信号

 

2.BCD译码模块

由于倒计时模块输出的是2进制的cnt_scnt_ms,但数码管是个位和十位分别显示的。例如当cnt_s值为10时,也就是8’b00001010,而送给数码管的个位值为4’b0000,十位值为4’b0001。这个转换过程也就是BCD译码,也就是本模块要实现的功能。

此处介绍二进制转BCD码的硬件实现,采用左移加3的算法,具体描述如下:(此处以8-bit 二进制码为例)

1、左移要转换的二进制码1位 

2、左移之后,BCD码分别置于百位、十位、个位 

3、如果移位后所在的BCD码列大于或等于5,则对该值加3

4、继续左移的过程直至全部移位完成

 

举例:将十六进制码0xFF转换成BCD码

本模块的信号列表如下:

信号名I/O位宽说明
rst_nI1系统复位信号,低电平有效
clkI1系统工作时钟50M
dinI32输入要译码的数据
din_vldI1输入数据有效指示信号
doutO12输出的BCD数据,共12比特,每4比特一组,分别表示百、十、个位的值
dout_vldO1输出数据有效指示信号

由于秒和毫秒都要译码,所以要例化两个BCD译码模块。

 

3.数码管显示模块

数码管显示模模块功能是将二进制数码,转成BCD数码管显示,其功能相对比较简单,不再啰嗦。


本模块信号列表

信号名I/O位宽说明
rst_nI1系统复位信号,低电平有效
clkI1系统工作时钟50M
dinI32每个数码管的时间数据
seg_selO8数码管位选
segmentO8数码管段选


代码资料下载:http://pan.baidu.com/s/1mix5rc8


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)