1、设计要求
基于小脚丫FPGA开发板设计带数码管显示倒计时的交通灯系统,要求:
- 1)一个道路绿灯持续时间25S,红灯持续时间10S,黄灯持续时间3S;
- 2)另一道路绿灯持续时间10S,红灯持续时间25S,黄灯持续时间3S;
- 3)第一位数码管和第二位数码管显示倒计时;
2、硬件连接
FPGA的系统时钟来自于小脚丫FPGA开发板配置的25MHz时钟晶振,连接FPGA的C1引脚。
本设计除了时钟和复位键以外没有其他的输入,故只用到一个按键K6硬件设计如图1所示,按键连接到FPGA的B1引脚。
图1、复位键硬件设计
设计中需要两个RGB的led进行交通灯显示的呈现,每一个RGB的LED都有三个引脚需要跟小脚丫连接在一起。两个LED跟小脚丫FPGA开发板之间的连接关系如图2所示,对应的管脚如下。
图2、RGB_LED硬件连接
设计中需要使用数码管进行倒计时的显示,小脚丫通过74HC595来控驱动和控制数码管。74HC595跟小脚丫FPGA开发板之间的连接关系如图3所示,对应的管脚如下。
图3、数码管驱动74HC595硬件连接
3、工作原理和状态转换
- 2)使用一个6bit的BCD码表示倒计时时间的值,其中高2bit表示值的十位,低4bit表示值的个位;
- 3)用以下四个状态分别表示交通灯不同的显示;
- S0: 大路绿灯亮,小路红灯亮,持续25S;
- S1: 大路黄灯(蓝灯)亮,小路红灯持续3S;
- S2: 大路红灯亮,小路绿灯亮,持续10S;
- S3: 大路红灯亮,效率黄灯(蓝灯)亮,持续3S;
- 得到状态转换图如下:
图4、交通灯状态转换图
4、代码设计
为了实现所需要的功能,我们将整个设计在顶层划分为五个不同的模块,如图5所示。
图5、交通灯程序框图
4.1 clock_division模块
Clock_division模块主要实现数字时钟的模式控制,程序代码截图如下:
4.2 Curren_state模块
这部分代码的作用是将次态赋值给当前态,这是三段式的标志性模块。该模块程序代码截图如下:
4.3 Output&count模块
这部分代码可以说是整个代码的核心部分,交通灯的显示在这部分完成。此外,这一部分还负责进行倒计时,这部分的代码将即使数字分为个位和十位进行分别倒计时。此举有利用后面对74HC595驱动数码管的代码进行调用。其序代码截图如下:
4.4 CubeDisplay模块
这部分代码用于74HC595的控制,以使得数码管能够按照计划进行倒计时显示。这部分代码截图如下:
5、系统运行
图6、系统运行
视频地址:
优酷视频(基于小脚丫FPGA的倒计时交通灯):
https://v.youku.com/v_show/id_XMTU0NDI4NjQ1Mg==.html
6、资源报告
资源 | 数量 | 比例 | 说明 |
LUT4s | 249 | 19% | |
寄存器 | 115 | 7% | |
存储器 | 0 | 0% | |
IO管脚 | 11 | ||
时钟频率 | 25MHz |
7、知识点
- 时钟计数分频
- 三段式程序段的编写
- 串行/并行转换
- 74HC595控制
9、相关文件
文件名称 | 功能 |
Traffic_Light | 交通灯状态转换和灯显示,以及顶层模块功能 |
DLED_4Bit | 倒计时显示模块 |