FPGA交通灯实战:用Verilog在Quartus里实现可调时序的十字路口控制(附仿真代码)

FPGA交通灯实战:用Verilog在Quartus里实现可调时序的十字路口控制(附仿真代码)

十字路口交通信号控制是数字电路设计的经典案例,也是FPGA初学者掌握状态机设计的绝佳实践项目。本文将带你从零开始,用Verilog HDL在Quartus Prime开发环境中实现一个具备可调时序参数的交通灯控制器,并通过ModelSim完成功能验证。

1. 项目需求分析与设计思路

现代交通灯控制系统需要满足三个核心需求:安全性、灵活性和可扩展性。我们的设计将围绕这三点展开:

  • 基础功能:东西方向绿灯30秒+黄灯2秒,南北方向红灯32秒;随后切换为南北方向绿灯30秒+黄灯2秒,东西方向红灯32秒
  • 扩展功能:各方向红绿灯时间可通过参数灵活配置
  • 特殊状态:紧急情况下可手动切换为全方向黄灯闪烁模式

1.1 状态机设计

采用Moore型有限状态机(FSM)作为控制核心,定义四个状态:

parameter S_EW_GREEN = 2'b00;  // 东西绿灯,南北红灯
parameter S_EW_YELLOW = 2'b01; // 东西黄灯,南北红灯 
parameter S_NS_GREEN = 2'b10;  // 南北绿灯,东西红灯
parameter S_NS_YELLOW = 2'b11; // 南北黄灯,东西红灯

状态转移图如下:

        +---------------+
        |               |
        v               |
S_EW_GREEN -> S_EW_YELLOW
    ^               |
    |               v
S_NS_YELLOW <- S_NS_GREEN

1.2 模块划分

系统由五个核心模块构成:

  1. 时钟分频模块:将板载高频时钟分频为1Hz基准信号
  2. 状态控制模块:实现状态机及定时逻辑
  3. 灯控输出模块:根据状态生成灯控信号
  4. 倒计时显示模块:驱动数码管显示剩余时间
  5. 参数配置模块:存储可调时间参数

2. Verilog实现详解

2.1 顶层模块设计

module traffic_light(
    input clk,          // 板载时钟(如50MHz)
    input reset_n,      // 复位信号(低有效)
    input emergency,    // 紧急模式开关
    output reg [2:0] ew_light, // 东西方向灯控[红,黄,绿]
    output reg [2:0] ns_light, // 南北方向灯控[红,黄,绿]
    output [6:0] seg,   // 七段数码管段选
    output [3:0] an     // 数码管位选
);

// 参数化设计,便于修改时序
parameter EW_GREEN_TIME = 30;  // 东西绿灯时间
parameter EW_YELLOW_TIME = 2;  // 东西黄灯时间
parameter NS_GREEN_TIME = 30;  // 南北绿灯时间  
parameter NS_YELLOW_TIME = 2;  // 南北黄灯时间

wire clk_1Hz;  // 1Hz时钟信号
wire [5:0] count_val; // 当前倒
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值