交通灯控制系统 FPGA 设计 Verilog Quartus(2)

名称:交通灯控制系统 FPGA 设计 Verilog Quartus(2)

软件:Quartus

语言:Verilog

功能介绍

本设计实现了一个双向路口交通灯控制系统,使用 Verilog 编写,工程环境为 Quartus。系统面向主路与支路的交通信号控制,能够完成红、黄、绿三色信号灯的周期切换,并通过 4 位七段数码管显示主路和支路当前状态的倒计时。 正常运行时,交通灯按照固定相位循环:主路绿灯25秒、主路黄灯5秒、支路绿灯25秒、支路黄灯5秒。主路绿灯和黄灯期间,支路保持红灯;支路绿灯和黄灯期间,主路保持红灯,符合双向路口互斥放行的基本控制要求。 系统带有紧急按键输入 lock_key。当紧急信号有效时,主路与支路均进入红灯状态,适合模拟紧急车辆通行、异常路况处理等场景。紧急状态解除后,系统恢复正常相位运行。 显示功能使用 HEX0、HEX1、HEX2、HEX3 四个 8 位段码输出接口,分别显示主干道和支干道的倒计时信息。整体设计结构清晰,适合作为 FPGA 课程设计、Verilog 状态机练习、交通灯控制实验和数码管显示综合实验参考。

运行环境

开发语言:Verilog 开发软件:Quartus 仿真环境:ModelSim 工程顶层模块:traffic_light 主要文件:traffic_light.v、led.v、shumaguan.v、display.v、div.v、traffic_light.qsf 工程输出包含 SOF、POF、编译报告、时序分析报告、引脚报告等 Quartus 生成文件。

设计思路

系统采用分层模块化设计,将双向路口交通灯控制拆分为时钟分频、交通灯状态控制、倒计时数据处理和七段数码管显示几个部分。顶层 traffic_light 模块负责统一管理外部接口,并把 50MHz 系统时钟、紧急按键、主支路灯输出以及 HEX0-HEX3 数码管输出连接到各个功能模块。 核心控制思路基于有限状态机。正常模式下,系统按“主路绿灯25秒、主路黄灯5秒、支路绿灯25秒、支路黄灯5秒”的顺序循环运行;主路通行时支路保持红灯,支路通行时主路保持红灯,从而保证两个方向不会同时放行。每个阶段通过秒脉冲推进计数,并输出对应的 BCD 计时数据,供后级倒计时显示使用。 紧急处理由 lock_key 输入控制。当 lock_key 为高电平时,系统进入紧急状态,主路和支路均切换为红灯,计时过程暂停,避免继续执行正常相位切换;紧急状态解除后,系统从安全状态重新进入正常交通灯流程。 显示部分将主路和支路的剩余时间转换为数码管显示数据。shumaguan_data 模块根据当前灯色和对应计时值计算倒计时,display 模块再将 BCD 数据转换为 HEX0-HEX3 的七段段码,实现四位数码管的实时显示。

模块结构

工程主要由 traffic_light、led、div、shumaguan_data、display 等模块组成。 traffic_light:顶层模块,连接系统时钟、紧急按键、主支路红黄绿灯输出和四位数码管输出,并完成各子模块实例化。 led:交通灯核心控制模块,负责主路与支路的红、黄、绿灯状态切换、倒计时计数以及紧急状态处理。 div:时钟分频模块,将 50MHz 系统时钟分频为 1Hz 秒脉冲,为交通灯相位切换和倒计时提供时间基准。 shumaguan_data:倒计时数据处理模块,根据当前交通灯状态和计时数据生成主路、支路的 BCD 倒计时显示值。 display:七段数码管显示模块,将 BCD 数据转换为 HEX0-HEX3 的段码输出,实现主路和支路倒计时显示。

演示视频

演示视频展示了交通灯控制系统的运行效果,可用于直观看到主路、支路信号灯切换以及倒计时显示的联动过程。结合工程仿真结果,适合在下载前了解系统功能表现和交互效果。

仿真图/仿真说明/设计文档图片

配套设计文档包含工程文件说明、程序文件说明、编译结果、RTL 图、Testbench、整体仿真图以及分频模块、控制模块、倒计时模块、显示模块的仿真说明。 整体仿真覆盖 clk、lock_key、主路红绿黄灯、支路红绿黄灯以及 HEX0-HEX3 数码管输出。仿真中可以观察到主路与支路按设定相位交替通行,数码管实时显示剩余时间;当 lock_key 为高电平时,系统进入紧急模式,主路和支路均显示红灯。 分频模块仿真验证了 50MHz 输入时钟到 1Hz 秒脉冲的转换。控制模块仿真展示了主路绿灯、主路黄灯、支路绿灯、支路黄灯的循环过程,以及主路红灯时间与支路绿灯加黄灯时间、支路红灯时间与主路绿灯加黄灯时间之间的对应关系。 倒计时模块仿真说明了主路和支路在红灯、绿灯、黄灯不同状态下的剩余时间计算方式。显示模块仿真展示了 BCD 数据到七段数码管段码的转换,支持数字 0-9 的显示,HEX3+HEX2 与 HEX1+HEX0 分别用于两路倒计时显示。

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image1.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image10.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image11.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image12.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image13.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image14.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image15.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image16.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image17.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image18.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image19.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image2.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image3.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image4.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image5.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image6.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image7.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image8.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image9.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image1.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image10.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image2.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image3.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image4.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image5.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image6.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image7.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image8.png

交通灯控制系统 FPGA 设计 Verilog Quartus(2) 设计文档图片 image9.png

部分代码

以下展示顶层模块 traffic_light 的部分代码,完整源码请下载压缩包查看。

module traffic_light(
input clk,//50Mhz
input lock_key,//紧急按键--按下均为红灯,为1紧急状态,为0正常状态
output main_red,//主路灯
output main_green,//主路灯
output main_yellow,//主路灯
output branch_red,//支路灯
output branch_green,//支路灯
output branch_yellow,//支路灯

output [7:0] HEX0,//(主干道)数码管0
output [7:0] HEX1,//(主干道)数码管1
output [7:0] HEX2,//(支干道)数码管2
output [7:0] HEX3//(支干道)数码管3
);

 wire clk_1Hz;
 wire [7:0] main_green_BCD;
 wire [7:0] main_yellow_BCD;
 wire [7:0] main_red_BCD;
 wire [7:0] branch_green_BCD;
 wire [7:0] branch_yellow_BCD;
 wire [7:0] branch_red_BCD;
 wire [7:0] main_data_out;
 wire [7:0] branch_data_out;
 
wire main_red_led;//主路灯
wire main_green_led;//主路灯
wire main_yellow_led;//主路灯

wire branch_red_led;//支路灯
wire branch_green_led;//支路灯
wire branch_yellow_led;//支路灯

assign main_red=main_red_led;//主路灯
assign main_green=main_green_led;//主路灯
assign main_yellow=main_yellow_led ;//主路灯

assign branch_red=branch_red_led;//支路灯
assign branch_green=branch_green_led;//支路灯
assign branch_yellow=branch_yellow_led ;//支路灯 

//分频模块
div div100
(
. clk(clk),
. clk_out(clk_1Hz)
);

//红灯时间30秒,绿灯时间25秒,黄灯时间5秒
//按键调整时间
wire [7:0]main_green_time;//由外部控制
wire [7:0]main_yellow_time;
wire [7:0]branch_green_time;//由外部控制
wire [7:0]branch_yellow_time;

assign main_yellow_time=8'd5;//主路黄灯时间设置为5秒
assign branch_yellow_time=8'd5;//支路黄灯时间设置为5秒
assign main_green_time=8'd25;//默认绿灯25秒
assign branch_green_time=8'd25;//默认绿灯25秒


///////////////////////////////
reg [7:0] display_main;
reg [7:0] display_branch;

////////////////////////////////
//交通灯控制模块
led led(
. clk_1Hz(clk_1Hz),
. lock_key(lock_key),//紧急按键,为1紧急状态,为0正常状态

. main_red(main_red_led),//主路灯
. main_green(main_green_led),//主路灯
. main_yellow(main_yellow_led),//主路灯

. branch_red(branch_red_led),//支路灯
. branch_green(branch_green_led),//支路灯
. branch_yellow(branch_yellow_led),//支路灯

. main_green_time(main_green_time),
. main_yellow_time(main_yellow_time),
. branch_green_time(branch_green_time),
. branch_yellow_time(branch_yellow_time),

. main_green_BCD(main_green_BCD),//绿灯时间计数
. main_yellow_BCD(main_yellow_BCD),//黄灯时间计数
. main_red_BCD(main_red_BCD),//红灯时间计数
. branch_green_BCD(branch_green_BCD),//绿灯时间计数
. branch_yellow_BCD(branch_yellow_BCD),//黄灯时间计数
. branch_red_BCD(branch_red_BCD)//红灯时间计数
);

//显示数据生成模块(倒计时)
shumaguan_data shumaguan_data(
. clk(clk),

. main_red(main_red_led),//主路灯
. main_green(main_green_led),//主路灯
. main_yellow(main_yellow_led),//主路灯

. branch_red(branch_red_led),//支路灯
. branch_green(branch_green_led),//支路灯
. branch_yellow(branch_yellow_led),//支路灯

. main_green_BCD(main_green_BCD),//绿灯时间计数
. main_yellow_BCD(main_yellow_BCD),//黄灯时间计数
. main_red_BCD(main_red_BCD),//红灯时间计数
. branch_green_BCD(branch_green_BCD),//绿灯时间计数
. branch_yellow_BCD(branch_yellow_BCD),//黄灯时间计数
. branch_red_BCD(branch_red_BCD),//红灯时间计数

. main_green_time(main_green_time),
. main_yellow_time(main_yellow_time),
. branch_green_time(branch_green_time),
. branch_yellow_time(branch_yellow_time),

. main_data_out(main_data_out),//主路数码管数据显示
. branch_data_out(branch_data_out)//支路数码管数据显示
);
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 交通灯控制系统 FPGA 设计 Verilog Quartus(2)

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员