本项目为数字逻辑课程设计,目标是在 FPGA 平台上实现一个十字路口交通灯控制系统。系统面向主干道与支干道的交替放行场景,完成红、黄、绿三色信号灯控制、双路倒计时显示、末 3 秒闪烁提醒以及紧急状态切换等功能。
仓库当前仅保留课程展示、仿真复现与源码阅读所需的核心文件;Quartus 编译缓存、仿真数据库、输出产物以及本地工程中间文件均不纳入版本管理。
根据题目要求,系统需满足以下功能:
- 主干道与支干道交替通行。
- 主干道通行时间为 60 s,支干道通行时间为 45 s。
- 每次绿灯结束后切换为黄灯 5 s,再转入对向通行。
- 通行阶段显示剩余倒计时。
- 黄灯闪烁,红灯与绿灯在结束前 3 s 进行闪烁提醒。
- 支持紧急状态切换。
结合当前实现,系统采用有限状态机完成四个基本状态轮转,并通过按键边沿触发进入/退出紧急模式。
系统由时钟/分频、状态控制、灯态输出、双路倒计时计算以及数码管串行驱动几部分组成。整体结构图如下:
系统核心状态机包含 4 个常规状态:
| 状态 | 持续时间 | 主干道 | 支干道 | 说明 |
|---|---|---|---|---|
S_MAIN_GREEN |
60 s | 绿灯 | 红灯 | 主干道通行 |
S_MAIN_YELLOW |
5 s | 黄灯 | 红灯 | 主干道由通行转为停止 |
S_SUB_GREEN |
45 s | 红灯 | 绿灯 | 支干道通行 |
S_SUB_YELLOW |
5 s | 红灯 | 黄灯 | 支干道由通行转为停止 |
在此基础上,设计了独立的紧急模式:
- 通过
emergency_key单次按键边沿触发进入或退出紧急状态。 - 紧急状态下主干道与支干道同时置红。
- 退出紧急状态后,系统重新从“主干道绿灯”初态开始计时。
状态机仿真示意如下:
当前实现中,数码管显示采用串行移位方式输出,顶层代码注释表明使用两片级联移位寄存器进行 64 位整帧发送。显示内容按照“主干道倒计时 + 主状态码 + 支状态码 + 支干道倒计时”的方式组织,其中:
1表示绿灯状态;2表示黄灯状态;3表示红灯状态;9表示紧急状态。
该设计使灯态输出与倒计时显示保持同步,便于在实验箱上直接观察运行过程。
主程序文件为 traffic_top.v,实现内容包括:
- 基于时钟计数的秒级节拍产生;
- 主/支干道交通灯状态机;
- 紧急按键同步、消抖与边沿检测;
- 主/支干道双路倒计时计算;
- 数码管段码编码与串行刷新输出。
从代码实现看,末 3 秒闪烁策略为:
- 当前放行方向的绿灯在结束前 3 s 闪烁;
- 当前黄灯阶段在结束前 3 s 闪烁;
- 与黄灯对应方向相对的红灯在结束前 3 s 闪烁,用于提示即将放行。
仿真文件为 tb_traffic.v。该 testbench 通过定义 SIM 宏启用快速仿真模式,将“1 s”缩短为少量时钟周期,从而在较短仿真时间内完成:
- 主干道 60 s 通行;
- 主干道黄灯 5 s 过渡;
- 支干道 45 s 通行;
- 支干道黄灯 5 s 过渡;
- 紧急模式进入与退出测试。
仿真波形图如下:
建议环境如下:
- Intel Quartus Prime Lite 18.1;
- ModelSim(Verilog 仿真);
- Cyclone IV E 系列 FPGA 开发板;
- USB-Blaster 下载器。
本地工程配置对应器件为:
- FPGA 器件:
EP4CE15F17C8 - 器件系列:
Cyclone IV E - 系统时钟:
100 MHz
由于本仓库不上传 .qsf/.qpf 等工程配置文件,关键引脚信息在此直接列出,便于重新建工程时手动约束:
| 信号名 | 方向 | 引脚 |
|---|---|---|
clk |
输入 | A8 |
rst_n |
输入 | M2 |
emergency_key |
输入 | E15 |
main_red |
输出 | J12 |
main_yellow |
输出 | K10 |
main_green |
输出 | F14 |
side_red |
输出 | D14 |
side_yellow |
输出 | C14 |
side_green |
输出 | D12 |
dig_si |
输出 | M8 |
dig_oe |
输出 | P8 |
dig_rck |
输出 | M9 |
dig_sck |
输出 | P9 |
若使用 ModelSim,可新建工程后加入 traffic_top.v 与 tb_traffic.v,执行 Verilog 编译并运行 tb_traffic 顶层测试。由于 testbench 已启用快速仿真,单次运行即可观察完整状态切换和紧急模式响应。
硬件演示结果见下图:
如本机无法识别 USB-Blaster,可参考 USB-Blaster.txt 中记录的手动安装步骤。该文件是本机环境下的操作记录,适合作为排障参考,不应视为不同系统版本下的统一驱动安装手册。
本仓库仅建议上传以下文件:
| 文件名 | 说明 |
|---|---|
README.md |
项目说明文档 |
traffic_top.v |
顶层 Verilog 源码 |
tb_traffic.v |
仿真测试文件 |
traffic_system_architecture.svg |
系统整体框架图 |
State_Machine.png |
状态机示意图 |
Wave.png |
仿真波形图 |
show.gif |
最终验收演示图 |
USB-Blaster.txt |
本机 USB-Blaster 驱动安装记录 |
不建议上传的内容包括但不限于:
db/、incremental_db/、output_files/、simulation/等自动生成目录;.qpf、.qsf、.qws等本地工程配置文件;- 视频原文件如
show.mp4; - 其他与课程展示无关的中间文件、缓存文件和平台相关文件。
本项目已经完成课程设计所需的功能实现、仿真验证与硬件验收展示,但仍应将其视为“课程实验工程”,而非面向长期部署的工业级控制系统。在进一步扩展时,建议补充以下工作:
- 完善时序约束与时序收敛分析;
- 增加更细粒度的模块划分与独立单元测试;
- 为紧急状态、按键抖动、显示刷新等边界情况补充系统级验证;
- 针对目标开发板补全正式的工程配置与使用说明。
该设计围绕“主/支干道交替通行”这一典型控制问题,完成了从题目要求分析、状态机建模、Verilog 实现、仿真验证到硬件验收展示的完整闭环。项目具备较好的课程设计展示价值,也为后续扩展为更复杂的交通控制系统提供了基础实现框架。


