Quartus II 21.1 交通灯状态机设计:4状态转换与60s/20s计时器实现
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 // 数码管倒计时显示 );状态转移逻辑遵循以下规则默认状态MGCR主干道绿灯支路红灯当sensor_s激活且主干道通行≥60秒转入MYCR状态黄灯过渡无论sensor_s是否持续MRCG状态最长维持20秒退出MRCG状态后进入MRCY状态黄灯过渡2. 四状态机详细实现2.1 状态编码与定义采用独热码(one-hot)编码方案提高状态机的可读性和可靠性localparam [3:0] MGCR 4b0001, // 主绿乡红 MYCR 4b0010, // 主黄乡红 MRCG 4b0100, // 主红乡绿 MRCY 4b1000; // 主红乡黄 reg [3:0] current_state, next_state;2.2 状态转移条件状态转移由组合逻辑实现关键转移条件如下表所示当前状态转移条件下一状态MGCRsensor_s timer≥60sMYCRMYCR黄灯计时结束(4s)MRCGMRCGtimer≥20s | ~sensor_sMRCYMRCY黄灯计时结束(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 end3. 可配置计时器模块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 8d60; sub_timer 8d20; yellow_timer 4d4; 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 8d60; yellow_timer 4d4; end MYCR: yellow_timer 4d4; MRCG: begin sub_timer 8d20; yellow_timer 4d4; end MRCY: yellow_timer 4d4; endcase end end end4. 车辆检测与响应机制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 优先权控制逻辑系统设置两种优先权模式时间优先强制主干道最小通行60秒需求优先支路有车时最大通行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 end5. 显示驱动与输出控制5.1 信号灯输出编码always (*) begin case(current_state) MGCR: lights 6b100_001; // MGCR MYCR: lights 6b010_001; // MYCR MRCG: lights 6b001_100; // MRCG MRCY: lights 6b001_010; // MRCY default: lights 6b100_001; endcase end5.2 数码管倒计时显示采用BCD编码驱动两位共阳极数码管wire [7:0] current_time (current_state MGCR || current_state MYCR) ? main_timer : (current_state MRCG || current_state MRCY) ? sub_timer : 8d0; 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秒前取消 end6.2 常见问题排查状态锁死检查所有状态转移条件是否完备计时异常验证时钟分频是否正确显示乱码确认数码管译码逻辑信号抖动增加传感器消抖时间调试提示使用SignalTap II嵌入式逻辑分析仪实时抓取状态信号和计时器值可以快速定位时序问题。7. 硬件实现与优化7.1 FPGA资源利用设计在Cyclone V 5CSEMA5F31C6器件上的资源占用资源类型使用量总量利用率逻辑单元32032K1%寄存器4832K1%存储器比特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[*]]通过上述设计我们实现了一个响应灵敏、运行可靠的智能交通灯控制系统。该系统可根据实际交通流量动态调整信号配时在保证主干道通行效率的同时兼顾支路的通行需求。