
名称交通信号灯控制系统 Verilog Vivado软件Vivado语言Verilog功能介绍本设计为交通信号灯控制系统使用 Verilog 在 Vivado 环境下实现。系统面向主干道与支干道交叉路口控制场景能够输出主干道红灯、绿灯、黄灯、左转灯以及支干道红灯、绿灯、黄灯、左转灯等控制信号并带有数码管倒计时显示接口。 设计支持支路有车检测输入 car_branch可根据支路车辆信号参与交通灯状态控制。顶层模块 trafic 将分频、状态机和显示功能连接在一起使交通灯控制逻辑、倒计时数据和数码管显示形成完整闭环。 该工程包含 testbench 与 Vivado 仿真相关文件适合用于课程设计、FPGA 入门综合实验、有限状态机项目训练以及交通灯控制逻辑参考。代码层次简洁模块划分明确便于二次修改信号灯时序、状态跳转条件或显示方式。运行环境开发语言Verilog 开发软件Vivado 工程类型Vivado FPGA 工程 顶层模块trafic 主要源文件trafic.v、state_machine.v、div.v、display.v、trafic_vlg_tst.v设计思路设计采用顶层模块统一组织分频、状态机控制和数码管显示三个主要功能单元。外部输入包括系统时钟、复位信号以及支路有车信号输出包括主干道和支干道的红灯、绿灯、黄灯、左转灯控制信号同时通过数码管输出倒计时信息。 时钟处理部分由 div 模块完成将输入时钟分频得到 1Hz 节拍作为交通灯状态切换和倒计时递减的时间基准。这样可以把较快的显示扫描时钟与较慢的交通控制节拍区分开便于状态机逻辑和动态数码管显示分别工作。 核心控制由 state_machine 模块实现。该模块根据复位信号、1Hz 时钟以及 car_branch 支路有车信号进行状态转移分别驱动主干道和支干道的红、绿、黄、左转信号灯并输出 main_cnt、branch_cnt 两组倒计时数据。显示模块 display 接收两路倒计时数据通过 SEG1 和 SEL1 完成数码管段选、位选显示。 整体结构清晰适合作为交通灯控制、有限状态机设计、Verilog 模块化设计、Vivado 仿真与综合练习项目使用。模块结构顶层模块为 trafic负责连接分频模块、状态机控制模块和数码管显示模块。 主要模块包括 1. trafic系统顶层模块定义输入输出接口并例化各功能模块。 2. div分频模块将输入时钟转换为 1Hz 控制节拍。 3. state_machine交通灯状态机模块负责主干道、支干道信号灯控制和倒计时输出。 4. display数码管显示模块接收主路和支路倒计时数据输出段选 SEG1 与位选 SEL1。 5. trafic_vlg_tst仿真测试模块用于行为仿真验证。演示视频配套演示视频展示交通信号灯控制系统的运行效果可用于直观查看主干道、支干道信号灯状态切换以及倒计时显示效果。演示视频请关注公众号后获取对应资料查看。仿真图/仿真说明/设计文档图片设计文档包含工程文件、程序文件、程序编译、RTL 图、仿真图、Testbench、顶层仿真图、分频模块、状态机控制模块和数码管显示模块等内容可用于查看工程组织方式、模块连接关系与仿真参考结果。部分代码以下展示顶层模块trafic的部分代码完整代码可关注下方公众号卡片获取。module trafic( input clk,//1K input rst_p,//复位 input car_branch,//支路有车信号 output main_red,//主干道红灯 output main_green,//主干道绿灯 output main_yellow,//主干道黄灯 output main_left,//主干道左转灯 output branch_red,//支干道红灯 output branch_green,//支干道绿灯 output branch_yellow,//支干道黄灯 output branch_left,//支干道左转灯 output [7:0] SEG1,//数码管段选显示 output [3:0] SEL1 //数码管位选显示 ); wire clk_1Hz; wire [7:0] main_cnt; wire [7:0] branch_cnt; //分频模块 div i_div( . clk(clk),//时钟 . clk_1Hz(clk_1Hz)//1Hz ); //状态机控制模块 state_machine i_state_machine( . clk_1Hz(clk_1Hz),//1Hz . rst_p(rst_p), . car_branch(car_branch),//支路有车信号 . main_red(main_red), . main_green(main_green), . main_yellow(main_yellow), . main_left(main_left), . branch_red(branch_red), . branch_green(branch_green), . branch_yellow(branch_yellow), . branch_left(branch_left), . main_cnt(main_cnt), . branch_cnt(branch_cnt) ); //显示模块 display i_display ( . clk_1K(clk),//时钟 . main_data(main_cnt),//主路,两个数码管 . branch_data(branch_cnt),//支路,两个数码管 . SEG1(SEG1),//数码管段选显示 . SEL1(SEL1) //数码管位选显示 ); endmodule代码获取点击下方公众号卡片