交通灯控制 FPGA 设计 Verilog Quartus DE2-115
2026/6/7 15:02:55 网站建设 项目流程

名称:交通灯控制 FPGA 设计 Verilog Quartus DE2-115

软件:Quartus

语言:Verilog

开发板/平台:DE2-115

功能介绍

本设计实现一个基于 FPGA 的交通灯控制系统,使用 Verilog 语言完成主路与支路的红、黄、绿灯时序控制,并通过数码管显示对应道路当前状态的倒计时时间。系统输入为 50MHz 时钟,内部通过分频得到 1Hz 计时基准,使交通灯状态按秒级节拍运行。 交通灯逻辑按主干道与支干道两个方向进行组织,主路绿灯时间设置为 55 秒,支路绿灯时间设置为 25 秒,主路与支路黄灯时间均设置为 10 秒。运行过程中,主路和支路的信号灯互锁切换,避免两个方向同时放行,适合用于 FPGA 数字逻辑课程设计、交通信号灯实验和 Verilog 时序控制学习。 显示部分使用 4 位七段数码管,其中 HEX0、HEX1 用于主干道倒计时显示,HEX2、HEX3 用于支干道倒计时显示。设计同时输出主路、支路各自的红灯、绿灯、黄灯控制信号,可直接对应开发板 LED 或外接指示灯观察运行状态。

运行环境

开发语言:Verilog 开发软件:Quartus 目标开发板:DE2-115 工程包含 Quartus 工程文件、Verilog 源码、管脚约束文件、编译输出文件以及 ModelSim 仿真相关文件。

设计思路

系统以 50MHz 板载时钟作为输入,首先由分频模块产生 1Hz 时钟信号,作为交通灯状态机和倒计时计数的时间基准。这样可以将高速 FPGA 时钟转换为便于观察的秒级交通灯节拍,使 LED 指示和数码管倒计时都能够按照实际秒数变化。 交通灯控制模块负责主路与支路的红、黄、绿灯状态切换,并根据预设时间输出各阶段倒计时数据。主路绿灯、主路黄灯、支路绿灯、支路黄灯时间在顶层中通过常量配置,便于理解和修改。控制逻辑在主路放行时保持支路红灯,在支路放行时保持主路红灯,中间通过黄灯阶段完成状态过渡。 数码管显示逻辑与交通灯状态联动,根据当前亮灯状态选择对应的倒计时数据,并转换为七段数码管可显示的编码。主路与支路分别输出两位倒计时显示,使用户可以同时观察两个方向的剩余时间。顶层模块将分频、灯控、显示数据生成和七段显示模块连接起来,形成完整的交通灯控制系统。

模块结构

顶层模块:traffic_light,负责连接时钟输入、交通灯输出、数码管显示输出以及各子模块。 分频模块:div,将 50MHz 时钟分频为 1Hz 时钟,为交通灯计时提供秒脉冲。 交通灯控制模块:led,完成主路与支路红、黄、绿灯状态控制,并输出各阶段倒计时 BCD 数据。 显示数据生成模块:shumaguan_data,根据当前灯色状态选择主路和支路需要显示的倒计时数据。 数码管显示模块:display,将倒计时数据转换为 HEX0、HEX1、HEX2、HEX3 的七段数码管显示信号。

开发板验证

工程面向 DE2-115 开发板建立,包含 Quartus 管脚约束/分配文件,可用于将主路与支路红黄绿灯信号以及 4 位数码管显示信号分配到开发板对应引脚。工程已包含编译输出文件,适合在 DE2-115 板卡上下载验证交通灯状态切换和倒计时显示效果。

演示视频

包含交通灯运行演示视频,可用于查看主路、支路红黄绿灯切换以及数码管倒计时显示效果。

演示视频请关注公众号后获取对应资料查看。

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

设计文档内容包含工程文件、程序文件、程序编译、RTL 图、管脚分配、Testbench 和仿真图等说明,可辅助理解工程结构、编译流程、模块连接关系和仿真验证过程。

部分代码

以下展示顶层模块traffic_light的部分代码,完整代码可关注下方公众号卡片获取。

module traffic_light( input clk,//50Mhz 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) ); //调整时间 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'd10;//主路黄灯时间设置为10秒 assign branch_yellow_time=8'd10;//支路黄灯时间设置为10秒 assign main_green_time=8'd55;//主路绿灯55秒 assign branch_green_time=8'd25;//支路绿灯25秒 /////////////////////////////// reg [7:0] display_main; reg [7:0] display_branch; //////////////////////////////// //交通灯控制模块 led led( . clk_1Hz(clk_1Hz), . 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 ( // ... 以下代码略,完整源码请下载压缩包查看

代码获取:点击下方公众号卡片

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询