交通灯控制系统 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环境中继续查看和运行仿真工程。













部分代码
以下展示顶层模块 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
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 交通灯控制系统 Verilog Quartus Cyclone IV