
名称交通灯控制 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_redmain_red_led;//主路灯 assign main_greenmain_green_led;//主路灯 assign main_yellowmain_yellow_led ;//主路灯 assign branch_redbranch_red_led;//支路灯 assign branch_greenbranch_green_led;//支路灯 assign branch_yellowbranch_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_time8d10;//主路黄灯时间设置为10秒 assign branch_yellow_time8d10;//支路黄灯时间设置为10秒 assign main_green_time8d55;//主路绿灯55秒 assign branch_green_time8d25;//支路绿灯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 ( // ... 以下代码略完整源码请下载压缩包查看代码获取点击下方公众号卡片