Skip to content

About

FPGA-based traffic light controller in Verilog with countdown display, flashing warning, emergency mode, and simulation results.

Topics

Resources

Stars

6 stars

Watchers

0 watching

Forks

Repository files navigation

基于 FPGA 的交通灯控制系统

本项目为数字逻辑课程设计,目标是在 FPGA 平台上实现一个十字路口交通灯控制系统。系统面向主干道与支干道的交替放行场景,完成红、黄、绿三色信号灯控制、双路倒计时显示、末 3 秒闪烁提醒以及紧急状态切换等功能。

仓库当前仅保留课程展示、仿真复现与源码阅读所需的核心文件;Quartus 编译缓存、仿真数据库、输出产物以及本地工程中间文件均不纳入版本管理。

1. 课设目标

根据题目要求,系统需满足以下功能:

  1. 主干道与支干道交替通行。
  2. 主干道通行时间为 60 s,支干道通行时间为 45 s。
  3. 每次绿灯结束后切换为黄灯 5 s,再转入对向通行。
  4. 通行阶段显示剩余倒计时。
  5. 黄灯闪烁,红灯与绿灯在结束前 3 s 进行闪烁提醒。
  6. 支持紧急状态切换。

结合当前实现,系统采用有限状态机完成四个基本状态轮转,并通过按键边沿触发进入/退出紧急模式。

2. 系统方案

2.1 整体结构

系统由时钟/分频、状态控制、灯态输出、双路倒计时计算以及数码管串行驱动几部分组成。整体结构图如下:

系统整体框架图

2.2 状态机设计

系统核心状态机包含 4 个常规状态:

状态 持续时间 主干道 支干道 说明
S_MAIN_GREEN 60 s 绿灯 红灯 主干道通行
S_MAIN_YELLOW 5 s 黄灯 红灯 主干道由通行转为停止
S_SUB_GREEN 45 s 红灯 绿灯 支干道通行
S_SUB_YELLOW 5 s 红灯 黄灯 支干道由通行转为停止

在此基础上,设计了独立的紧急模式:

  1. 通过 emergency_key 单次按键边沿触发进入或退出紧急状态。
  2. 紧急状态下主干道与支干道同时置红。
  3. 退出紧急状态后,系统重新从“主干道绿灯”初态开始计时。

状态机仿真示意如下:

仿真状态机图

2.3 显示与驱动设计

当前实现中,数码管显示采用串行移位方式输出,顶层代码注释表明使用两片级联移位寄存器进行 64 位整帧发送。显示内容按照“主干道倒计时 + 主状态码 + 支状态码 + 支干道倒计时”的方式组织,其中:

  1. 1 表示绿灯状态;
  2. 2 表示黄灯状态;
  3. 3 表示红灯状态;
  4. 9 表示紧急状态。

该设计使灯态输出与倒计时显示保持同步,便于在实验箱上直接观察运行过程。

3. 关键实现说明

3.1 顶层模块

主程序文件为 traffic_top.v,实现内容包括:

  1. 基于时钟计数的秒级节拍产生;
  2. 主/支干道交通灯状态机;
  3. 紧急按键同步、消抖与边沿检测;
  4. 主/支干道双路倒计时计算;
  5. 数码管段码编码与串行刷新输出。

从代码实现看,末 3 秒闪烁策略为:

  1. 当前放行方向的绿灯在结束前 3 s 闪烁;
  2. 当前黄灯阶段在结束前 3 s 闪烁;
  3. 与黄灯对应方向相对的红灯在结束前 3 s 闪烁,用于提示即将放行。

3.2 仿真文件

仿真文件为 tb_traffic.v。该 testbench 通过定义 SIM 宏启用快速仿真模式,将“1 s”缩短为少量时钟周期,从而在较短仿真时间内完成:

  1. 主干道 60 s 通行;
  2. 主干道黄灯 5 s 过渡;
  3. 支干道 45 s 通行;
  4. 支干道黄灯 5 s 过渡;
  5. 紧急模式进入与退出测试。

仿真波形图如下:

仿真波形图

4. 硬件环境与引脚信息

4.1 开发环境

建议环境如下:

  1. Intel Quartus Prime Lite 18.1;
  2. ModelSim(Verilog 仿真);
  3. Cyclone IV E 系列 FPGA 开发板;
  4. USB-Blaster 下载器。

4.2 目标器件

本地工程配置对应器件为:

  • FPGA 器件:EP4CE15F17C8
  • 器件系列:Cyclone IV E
  • 系统时钟:100 MHz

4.3 主要引脚分配

由于本仓库不上传 .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

5. 复现方式

5.1 仿真复现

若使用 ModelSim,可新建工程后加入 traffic_top.v 与 tb_traffic.v,执行 Verilog 编译并运行 tb_traffic 顶层测试。由于 testbench 已启用快速仿真,单次运行即可观察完整状态切换和紧急模式响应。

5.2 下载与验收

硬件演示结果见下图:

最终验收成果

如本机无法识别 USB-Blaster,可参考 USB-Blaster.txt 中记录的手动安装步骤。该文件是本机环境下的操作记录,适合作为排障参考,不应视为不同系统版本下的统一驱动安装手册。

6. 仓库内容说明

本仓库仅建议上传以下文件:

文件名 说明
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 驱动安装记录

不建议上传的内容包括但不限于:

  1. db/、incremental_db/、output_files/、simulation/ 等自动生成目录;
  2. .qpf、.qsf、.qws 等本地工程配置文件;
  3. 视频原文件如 show.mp4;
  4. 其他与课程展示无关的中间文件、缓存文件和平台相关文件。

7. 工程化说明

本项目已经完成课程设计所需的功能实现、仿真验证与硬件验收展示,但仍应将其视为“课程实验工程”,而非面向长期部署的工业级控制系统。在进一步扩展时,建议补充以下工作:

  1. 完善时序约束与时序收敛分析;
  2. 增加更细粒度的模块划分与独立单元测试;
  3. 为紧急状态、按键抖动、显示刷新等边界情况补充系统级验证;
  4. 针对目标开发板补全正式的工程配置与使用说明。

8. 结论

该设计围绕“主/支干道交替通行”这一典型控制问题,完成了从题目要求分析、状态机建模、Verilog 实现、仿真验证到硬件验收展示的完整闭环。项目具备较好的课程设计展示价值,也为后续扩展为更复杂的交通控制系统提供了基础实现框架。

About

FPGA-based traffic light controller in Verilog with countdown display, flashing warning, emergency mode, and simulation results.

Topics

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages