交通灯控制 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、整体仿真图、分频模块、控制模块、倒计时模块和显示模块等说明,并配有多张设计文档图片,可作为理解工程结构、仿真流程和模块功能的参考。
















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