交通灯控制系统 Verilog Quartus Cyclone IV

名称:交通灯控制系统 Verilog Quartus Cyclone IV

软件:Quartus

语言:Verilog

开发板/平台:Cyclone IV FPGA开发板

功能介绍

本设计实现一个双向交通灯控制系统,面向主干道和支干道分别提供红灯、黄灯、绿灯输出,并通过K1、K2传感器输入参与交通状态控制。系统使用50 MHz时钟,经分频后获得1 Hz节拍,按照设定时序驱动各方向信号灯切换,形成完整的红绿灯周期。主路绿灯时间设置为45秒,支路绿灯时间设置为25秒,主路和支路黄灯时间均为5秒,时间参数集中在顶层模块中,便于根据实际路口需求调整。\n\n在灯态输出的同时,系统将当前相位剩余时间转换为BCD数据,并通过数码管驱动电路显示主路和支路倒计时。四路HEX输出分别承担主干道与支干道的倒计时显示,帮助观察当前交通相位和剩余时间。工程还包含分频、交通灯控制、倒计时数据处理和数码管显示等独立模块,便于学习状态机时序设计、模块化连接以及FPGA外设控制。

运行环境

硬件平台为Cyclone IV FPGA开发板,工程采用Verilog HDL编写,使用Intel Quartus工程文件进行编译与配置。顶层工程名为traffic_light,时钟输入为50 MHz,管脚分配通过traffic_light.qsf完成,输出包括主路和支路的红、黄、绿灯信号以及HEX0至HEX3数码管接口。工程目录同时提供qpf、qsf、Verilog源文件和已生成的编译输出,使用Quartus打开traffic_light.qpf即可查看完整工程结构。

设计思路

设计采用分层模块化方法构建。顶层traffic_light负责时钟、传感器、灯信号和数码管接口的统一连接,并在顶层集中设置主路绿灯、支路绿灯及两路黄灯的持续时间。div模块把50 MHz系统时钟转换为1 Hz控制节拍,使交通灯状态转换和倒计时更新以秒为单位进行,便于直接对应实际交通信号时序。\n\nled模块承担核心交通灯控制,根据K1、K2传感器输入和当前计时状态产生主路、支路的红黄绿灯信号,同时输出各灯态对应的BCD倒计时数据。shumaguan_data模块根据当前灯态选择主路或支路的剩余时间,并整理成数码管显示数据;display模块负责数码管段码和扫描显示。通过这种分工,灯态控制、计时数据和显示驱动彼此独立,后续可单独修改时长策略或扩展显示接口。

模块结构

工程主要由以下模块组成:\n\n1. traffic_light:顶层模块,连接50 MHz时钟、K1/K2传感器、六路交通灯输出和四路数码管输出,并实例化各功能模块。\n2. div:时钟分频模块,将系统时钟转换为1 Hz控制时钟。\n3. led:交通灯控制模块,完成主路与支路红黄绿灯状态切换、传感器输入处理及各灯态倒计时BCD数据生成。\n4. shumaguan_data:倒计时数据处理模块,依据当前灯态选择对应时间并输出主路、支路数码管显示数据。\n5. display:数码管显示模块,将倒计时数据转换为HEX段码并完成显示接口驱动。\n\n顶层信号链路为50 MHz时钟经div分频后送入led,led产生灯态和BCD计时数据,再由shumaguan_data与display完成四位数码管显示。

开发板验证

工程已完成Cyclone IV FPGA开发板的管脚约束配置,traffic_light.qsf中包含时钟、传感器、六路信号灯及数码管接口的分配信息。将工程编译生成的配置文件下载到开发板后,可观察主路和支路红黄绿灯按设定时序切换,并通过HEX0至HEX3查看两方向倒计时。K1、K2可接入相应传感器或按键输入,用于验证传感器参与交通状态控制的逻辑。

演示视频

提供交通灯系统演示视频,可直观看到主路与支路信号灯切换过程以及数码管倒计时显示效果,用于配合工程下载后的上板观察。

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

设计文档包含工程文件说明、程序编译、RTL结构、Testbench、整体仿真以及分频模块、交通灯控制模块、倒计时控制模块和显示模块的说明与配图。配套仿真工程位于traffic_light_sim/simulation/modelsim目录,可在ModelSim环境中继续查看和运行仿真工程。

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image1.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image10.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image11.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image12.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image13.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image14.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image2.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image3.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image4.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image5.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image6.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image7.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image8.png

交通灯控制系统 Verilog Quartus Cyclone IV 设计文档图片 image9.png

部分代码

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

module traffic_light(
input clk,//50Mhz
input K1,//支路传感器
input K2,//主路传感器
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 branch_red=branch_red_led;//支路灯
assign branch_green=branch_green_led;//支路灯

assign main_yellow=main_yellow_led;
assign branch_yellow=branch_yellow_led;
//分频模块
div div100
(
. clk(clk),
. clk_out(clk_1Hz)
);

//调整时间
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'd45;//主路绿灯45秒
assign branch_green_time=8'd25;//支路绿灯25秒


////////////////////////////////
//交通灯控制模块
led led(
. clk_1Hz(clk_1Hz),
. K1(K1),//支路传感器
. K2(K2),//主路传感器
. 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)//支路数码管数据显示
);

//显示模块		
display display
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

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

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

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