交通灯控制系统 FPGA 设计 Verilog Quartus

名称:交通灯控制系统 FPGA 设计 Verilog Quartus

软件:Quartus

语言:Verilog

开发板/平台:Cyclone IV FPGA开发板

功能介绍

本设计实现一个基于 FPGA 的交通灯控制系统,使用 Verilog HDL 编写,工程环境为 Quartus。系统面向常见十字路口交通灯逻辑,提供东西方向、南北方向的状态控制和剩余时间显示,适合 FPGA 课程设计、实验教学以及交通灯时序控制类项目参考。 系统通过 LED 输出模拟交通信号灯状态,通过数码管显示两个方向的剩余通行或等待时间。顶层模块接入系统时钟、复位信号以及两个按键输入,输出包括 4 位数码管位选、8 位数码管段选和 6 路 LED 控制信号,整体接口清晰,便于在开发板上连接显示器件进行观察。 除正常红绿灯运行模式外,设计中还加入了按键控制逻辑,可通过按键状态切换到黄灯闪烁相关显示/控制模式。该功能使工程不仅能展示基本交通灯状态切换,也能体现按键输入、状态控制、数码管动态显示和 LED 输出之间的协同设计。

运行环境

开发语言:Verilog 开发软件:Quartus 适用平台:Cyclone IV FPGA 开发板 工程顶层:top_traffic

设计思路

设计采用模块化结构,将交通灯时序控制、数码管显示、LED 灯控制和按键状态处理分离实现。顶层模块 top_traffic 负责连接各功能模块,把交通灯控制模块输出的东西方向剩余时间、南北方向剩余时间以及当前交通灯状态,分别送入数码管显示模块和 LED 控制模块完成外设显示。 traffic_light 模块承担核心交通灯状态机功能,生成东西方向 ew_time、南北方向 sn_time 以及 state 状态信号。state 信号用于描述当前交通灯所处阶段,LED 控制模块据此驱动 6 路 LED,形成对应方向的红、黄、绿灯显示效果;倒计时数据则送入数码管模块,方便直观看到当前阶段剩余时间。 seg_led 模块负责数码管动态扫描显示,根据 ew_time、sn_time 以及 key_state 控制显示内容。led 模块根据交通灯状态和按键模式输出 LED 使能信号。key_ctrl 模块接收 key_1、key_2 两个按键输入,生成 key_state,用于在正常红绿灯模式和黄灯闪烁模式之间进行控制。 这种划分方式便于理解和调试:状态机负责交通逻辑,显示模块负责倒计时输出,LED 模块负责灯光呈现,按键模块负责模式切换。各模块之间通过少量清晰的状态和时间信号连接,适合二次修改倒计时时长、扩展更多交通模式或替换显示方式。

模块结构

主要模块包括: 1. top_traffic:系统顶层模块,连接时钟、复位、按键、数码管和 LED 输出,并例化各子模块。 2. traffic_light:交通灯控制模块,产生东西方向剩余时间 ew_time、南北方向剩余时间 sn_time 以及交通灯状态 state。 3. seg_led:数码管显示模块,负责位选 sel 和段选 seg_led 输出,用于显示交通灯倒计时及按键模式相关内容。 4. led:LED 灯控制模块,根据 state 和 key_state 控制 6 路 LED 输出。 5. key_ctrl:按键控制模块,处理 key_1、key_2 输入,输出 key_state,实现正常红绿灯与黄灯闪烁模式控制。

开发板验证

工程包含面向 Cyclone IV FPGA 开发板的 Quartus 工程与管脚约束,可用于开发板下载验证。顶层端口覆盖系统时钟、复位、按键输入、数码管位选/段选以及 LED 输出,能够在板级环境中观察交通灯状态切换、倒计时显示和按键模式变化。

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

包含仿真测试文件 tb_top_traffic.v,可用于对顶层交通灯系统进行仿真参考。工程同时包含 Quartus 项目文件,便于继续进行综合、编译和板级调试。

部分代码

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

module top_traffic( 
    input                  sys_clk   ,    //系统时钟信号
    input                  sys_rst_n ,    //系统复位信号
    input                  key_1,
	 input                  key_2,
	 
    output       [3:0]     sel       ,    //数码管位选信号
    output       [7:0]     seg_led   ,    //数码管段选信号
    output	     [5:0]	   led            //LED使能信号
);

//wire define    
wire   [5:0]  ew_time;                    //东西方向状态剩余时间数据
wire   [5:0]  sn_time;                    //南北方向状态剩余时间数据 
wire   [1:0]  state  ;                    //交通灯的状态,用于控制LED灯的点亮
wire key_state;
//*****************************************************
//**                    main code                      
//*****************************************************

key_ctrl i_key_ctrl(
.sys_clk(sys_clk)   ,    //系统时钟信号
.sys_rst_n(sys_rst_n) ,    //系统复位信号
.key_1(key_1),//低电平有效
.key_2(key_2),//低电平有效
.key_state(key_state)//按键状态,0表示正常红绿灯,1表示黄灯闪烁
);


//交通灯控制模块    
traffic_light u0_traffic_light(
    .sys_clk                (sys_clk),   
    .sys_rst_n              (sys_rst_n),      
    .ew_time                (ew_time),
    .sn_time                (sn_time),
    .state                  (state)
);

//数码管显示模块	
seg_led    u1_seg_led(
    .sys_clk                (sys_clk)  ,
    .sys_rst_n              (sys_rst_n),
    .ew_time                (ew_time),
    .sn_time                (sn_time), 
	 .key_state(key_state),//按键状态,0表示正常红绿灯,1表示黄灯闪烁
    .en                     (1'b1),   
    .sel                    (sel), 
    .seg_led                (seg_led)
);

//led灯控制模块
led   u2_led(
    .sys_clk                (sys_clk  ),
    .sys_rst_n              (sys_rst_n),
    .state                  (state    ),
	 .key_state(key_state),//按键状态,0表示正常红绿灯,1表示黄灯闪烁
    .led                    (led      )
); 


   
endmodule

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 交通灯控制系统 FPGA 设计 Verilog Quartus

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

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