交通灯控制 FPGA 设计 Verilog Vivado(2)

名称:交通灯控制 FPGA 设计 Verilog Vivado(2)

软件:Vivado

语言:Verilog

开发板/平台:EGO1

功能介绍

本设计实现一个面向 FPGA 的交通灯控制系统,使用 Verilog HDL 编写,在 Vivado 环境下完成工程搭建、综合实现与仿真。系统以主路和支路两个方向的红、黄、绿灯为控制对象,完成正常交通信号灯的交替通行逻辑,同时配合数码管显示当前阶段的倒计时。 交通灯输出包括主路红灯、主路绿灯、主路黄灯,以及支路红灯、支路绿灯、支路黄灯。倒计时部分通过位选和段选信号驱动数码管显示,使当前通行方向和等待方向的剩余时间能够直观呈现。代码中设置主路绿灯 18 秒、黄灯 2 秒,支路绿灯 18 秒、黄灯 2 秒,红灯时间由另一方向通行阶段组合形成。 系统还包含复位/控制输入 rst_p,注释中说明该信号可用于控制主路常绿与正常红绿灯交替工作状态,适合用于 FPGA 课程设计、数字逻辑实验、交通灯状态机学习以及数码管动态显示练习。

运行环境

开发语言:Verilog 开发软件:Vivado 目标开发板:EGO1 工程类型:FPGA 交通灯控制工程,包含 Vivado 工程文件、Verilog 源码、Testbench、仿真工程文件、约束文件以及 bit 文件。

设计思路

设计采用模块化结构,将交通灯系统拆分为时钟分频、交通灯控制、显示数据生成和数码管显示几个部分。顶层模块 traffic_light 负责连接各子模块,并统一对外输出主路、支路的红黄绿灯信号以及数码管位选、段选信号。 系统首先通过 div 分频模块将输入时钟转换为 1Hz 节拍信号,作为交通灯倒计时和状态切换的时间基准。交通灯控制模块 led 接收 1Hz 时钟、复位/控制信号以及各方向绿灯、黄灯时间参数,根据当前状态输出主路和支路的红、黄、绿灯控制信号,并生成对应阶段的 BCD 倒计时数据。 显示部分由 shumaguan_data 和 display 配合完成。shumaguan_data 根据当前灯色状态和倒计时计数值选择需要显示的数据,分别生成主路和支路的数码管显示内容;display 模块负责将显示数据转换为数码管位选 weixuan 与段选 duanxian,实现倒计时动态显示。 整体思路清晰,既体现了交通灯状态机控制,也包含 FPGA 实验中常见的分频、计数、BCD 时间显示和数码管扫描显示,便于学习者按模块理解和修改。

模块结构

顶层模块:traffic_light 主要模块包括: led:交通灯控制模块,负责主路/支路红黄绿灯状态切换和倒计时计数。 shumaguan_data:显示数据生成模块,根据当前灯色状态选择主路、支路倒计时数据。 display:数码管显示模块,输出位选和段选信号。 div:分频模块,生成 1Hz 时钟节拍。 test:仿真测试模块,用于行为仿真验证。 顶层 traffic_light 连接 div、led、shumaguan_data、display 等模块,形成完整的交通灯控制与倒计时显示系统。

开发板验证

工程提供 EGO1 开发板管脚约束文件 ego1_pins.xdc,并已生成实现阶段 bit 文件,可用于 EGO1 开发板的上板验证参考。约束覆盖交通灯输出、数码管位选/段选以及时钟、复位等硬件连接信号,便于按照工程配置进行下载测试。

演示视频

包含交通灯系统演示视频,可用于查看红黄绿灯状态切换和数码管倒计时显示效果。

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

设计文档内容覆盖工程文件、程序文件、程序编译、RTL 图、Testbench、整体仿真图、分频模块、控制模块、倒计时模块和显示模块等说明,并配有多张设计文档图片,可作为理解工程结构、仿真流程和模块功能的参考。

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image17.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image16.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image15.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image14.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image13.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image12.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image11.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image1.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image4.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image5.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image6.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image7.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image8.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image10.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image9.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image3.png

交通灯控制 FPGA 设计 Verilog Vivado(2) 设计文档图片 image2.png

部分代码

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

module traffic_light(
input clk,//时钟
input rst_p,//复位

output main_red,//主路灯
output main_green,//主路灯
output main_yellow,//主路灯

output branch_red,//支路灯
output branch_green,//支路灯
output branch_yellow,//支路灯
//倒计时
output [3:0] weixuan,//数码管位选
output [7:0] duanxian//数码管段选
);

 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;
//主路红灯20秒,绿灯18秒(6秒闪烁),黄灯2秒
assign main_yellow_time=8'd2;//主路黄灯时间设置为2秒
assign main_green_time=8'd18;

//主路红灯20秒,绿灯18秒(6秒闪烁),黄灯2秒
assign branch_yellow_time=8'd2;//支路黄灯时间设置为2秒
assign branch_green_time=8'd18;


////////////////////////////////
//交通灯控制模块
led led(
. clk_1Hz(clk_1Hz),
. rst_p(rst_p),//控制按键--为1表示主路常绿,为0正常红绿灯(主路支路交替通行)

. 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资源下载 » 交通灯控制 FPGA 设计 Verilog Vivado(2)

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

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