• 正文
  • 相关推荐
申请入驻 产业图谱

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

06/08 07:45
153
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称:交通灯控制 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
(
// ... 以下代码略,完整源码请下载压缩包查看

代码获取:点击【来源:www.hdlcode.com

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

本站代码库拥有大量 Verilog/VHDL的FPGA代码资源:hdlcode.com。代码有详细注释、演示视频、仿真图等资料,适合入门学习

微信公众号