尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Quartus II 21.1 交通灯状态机设计:4状态转换与60s/20s计时器实现

Quartus II 21.1 交通灯状态机设计:4状态转换与60s/20s计时器实现
📅 发布时间:2026/7/11 10:08:08

Quartus II 21.1 交通灯状态机设计:四状态转换与动态计时器实现

十字路口的交通信号控制是数字逻辑设计的经典案例。本文将基于Quartus II 21.1开发环境,使用Verilog HDL实现一个具备车辆感应功能的智能交通灯控制器。该系统采用有限状态机(FSM)架构,包含四个核心状态,并集成60秒/20秒可配置计时器,能够根据实时交通需求动态调整信号时序。

1. 系统架构与设计原理

现代交通灯控制系统需要平衡通行效率与安全性。我们的设计采用分层架构:

  • 控制层:四状态有限状态机(MGCR, MYCR, MRCG, MRCY)
  • 时序层:可配置的倒计时模块(主干道60秒/支路20秒)
  • 感应层:车辆检测传感器信号处理
  • 显示层:LED信号灯与数码管倒计时显示
module traffic_controller( input clk, // 50MHz系统时钟 input rst_n, // 低电平复位 input sensor_s, // 支路车辆检测信号 output reg [5:0] lights, // [MG,MY,MR,CG,CY,CR] output [7:0] display // 数码管倒计时显示 );

状态转移逻辑遵循以下规则:

  1. 默认状态MGCR(主干道绿灯,支路红灯)
  2. 当sensor_s激活且主干道通行≥60秒,转入MYCR状态(黄灯过渡)
  3. 无论sensor_s是否持续,MRCG状态最长维持20秒
  4. 退出MRCG状态后进入MRCY状态(黄灯过渡)

2. 四状态机详细实现

2.1 状态编码与定义

采用独热码(one-hot)编码方案,提高状态机的可读性和可靠性:

localparam [3:0] MGCR = 4'b0001, // 主绿乡红 MYCR = 4'b0010, // 主黄乡红 MRCG = 4'b0100, // 主红乡绿 MRCY = 4'b1000; // 主红乡黄 reg [3:0] current_state, next_state;

2.2 状态转移条件

状态转移由组合逻辑实现,关键转移条件如下表所示:

当前状态转移条件下一状态
MGCRsensor_s & timer≥60sMYCR
MYCR黄灯计时结束(4s)MRCG
MRCGtimer≥20s | ~sensor_sMRCY
MRCY黄灯计时结束(4s)MGCR

对应的Verilog实现:

always @(*) begin case(current_state) MGCR: next_state = (sensor_s && main_timer >= 60) ? MYCR : MGCR; MYCR: next_state = (yellow_timer == 0) ? MRCG : MYCR; MRCG: next_state = (sub_timer >= 20 || !sensor_s) ? MRCY : MRCG; MRCY: next_state = (yellow_timer == 0) ? MGCR : MRCY; default: next_state = MGCR; endcase end

3. 可配置计时器模块

3.1 计时器架构设计

系统包含三个独立计时器:

  • 主干道计时器(60秒可调)
  • 支路计时器(20秒可调)
  • 黄灯计时器(固定4秒)
reg [7:0] main_timer; // 主干道计时 0-255秒 reg [7:0] sub_timer; // 支路计时 0-255秒 reg [3:0] yellow_timer; // 黄灯计时 0-15秒

3.2 计时器控制逻辑

每个时钟周期递减计时器,并在状态切换时重置:

always @(posedge clk or negedge rst_n) begin if(!rst_n) begin main_timer <= 8'd60; sub_timer <= 8'd20; yellow_timer <= 4'd4; end else begin case(current_state) MGCR: if(main_timer > 0) main_timer <= main_timer - 1; MYCR: if(yellow_timer > 0) yellow_timer <= yellow_timer - 1; MRCG: if(sub_timer > 0) sub_timer <= sub_timer - 1; MRCY: if(yellow_timer > 0) yellow_timer <= yellow_timer - 1; endcase // 状态切换时的计时器重置 if(current_state != next_state) begin case(next_state) MGCR: begin main_timer <= 8'd60; yellow_timer <= 4'd4; end MYCR: yellow_timer <= 4'd4; MRCG: begin sub_timer <= 8'd20; yellow_timer <= 4'd4; end MRCY: yellow_timer <= 4'd4; endcase end end end

4. 车辆检测与响应机制

4.1 传感器信号处理

为避免噪声干扰,对传感器信号进行消抖处理:

reg [2:0] sensor_sync; always @(posedge clk) begin sensor_sync <= {sensor_sync[1:0], sensor_s}; end wire sensor_clean = (sensor_sync[2] & sensor_sync[1]);

4.2 优先权控制逻辑

系统设置两种优先权模式:

  1. 时间优先:强制主干道最小通行60秒
  2. 需求优先:支路有车时最大通行20秒
reg priority_mode; // 0=时间优先,1=需求优先 // 在MRCG状态下的特殊处理 always @(posedge clk) begin if(current_state == MRCG) begin if(priority_mode && sensor_clean) sub_timer <= (sub_timer < 20) ? sub_timer + 1 : 20; end end

5. 显示驱动与输出控制

5.1 信号灯输出编码

always @(*) begin case(current_state) MGCR: lights = 6'b100_001; // MG+CR MYCR: lights = 6'b010_001; // MY+CR MRCG: lights = 6'b001_100; // MR+CG MRCY: lights = 6'b001_010; // MR+CY default: lights = 6'b100_001; endcase end

5.2 数码管倒计时显示

采用BCD编码驱动两位共阳极数码管:

wire [7:0] current_time = (current_state == MGCR || current_state == MYCR) ? main_timer : (current_state == MRCG || current_state == MRCY) ? sub_timer : 8'd0; segment_driver seg_disp( .clk(clk), .value(current_time), .display(display) );

6. 仿真验证与调试技巧

6.1 Testbench设计要点

initial begin // 初始化 rst_n = 0; sensor_s = 0; #100 rst_n = 1; // 测试正常状态转换 #100000 sensor_s = 1; // 触发支路请求 #200000 sensor_s = 0; // 取消请求 // 测试最小通行时间 #100000 sensor_s = 1; #50000 sensor_s = 0; // 在60秒前取消 end

6.2 常见问题排查

  1. 状态锁死:检查所有状态转移条件是否完备
  2. 计时异常:验证时钟分频是否正确
  3. 显示乱码:确认数码管译码逻辑
  4. 信号抖动:增加传感器消抖时间

调试提示:使用SignalTap II嵌入式逻辑分析仪实时抓取状态信号和计时器值,可以快速定位时序问题。

7. 硬件实现与优化

7.1 FPGA资源利用

设计在Cyclone V 5CSEMA5F31C6器件上的资源占用:

资源类型使用量总量利用率
逻辑单元32032K<1%
寄存器4832K<1%
存储器比特04M0%

7.2 时序约束与优化

# Quartus II SDC约束示例 create_clock -name clk -period 20 [get_ports clk] set_input_delay -clock clk 5 [get_ports sensor_s] set_output_delay -clock clk 3 [get_ports lights[*]]

通过上述设计,我们实现了一个响应灵敏、运行可靠的智能交通灯控制系统。该系统可根据实际交通流量动态调整信号配时,在保证主干道通行效率的同时,兼顾支路的通行需求。

相关新闻

  • TID质量竞争大会分享议题丨正元智晟科技CEO:大模型时代,软件测试如何做到可证可信?
  • 碧蓝航线Perseus补丁:3分钟解锁全皮肤终极指南
  • RT-Thread Studio 2.2.7 + LVGL 8.3 移植:非官方BSP适配3大核心文件修改与线程配置

最新新闻

  • linux添加静态路由(附windows添加静态路由)
  • 如何彻底突破游戏修改器的专业版限制:Wand-Enhancer完全指南
  • 卡地亚中国大陆官方售后服务中心|最新维修地址及电话权威收录(2026年7月最新) - 卡地亚中国服务中心
  • 2026 太原沙发软包沙发硬包沙发换皮门店测评,窗帘定制翻新前五本地门店实测 - LYL仔仔
  • 如何用QMK Toolbox三分钟搞定机械键盘固件刷写?免费开源工具终极指南
  • 2026年上海GEO优化公司推荐 - 资讯纵览

日新闻

  • OpenClaw本地部署:一键直连微信的私有化AI Agent实战指南
  • Kubernetes 系列【10】控制器:ReplicaSet(副本集)
  • 怎么寄快递才能便宜呢?2026年7月寄快递省钱攻略 - 生活情报姬

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号