You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FPGA流水灯模式同步数码管显示故障排查及实现求助

FPGA LED流水灯与数码管显示问题解决方案

一、硬件原理图引脚修复

  • 找到FPGA的seg数码管段选引脚(注意区分共阴/共阳硬件类型),把代码里的seg输出端口直接连到原理图的数码管段选引脚上
  • 只用1个数码管的话,位选引脚直接接固定电平:共阴接GND,共阳接VCC,确保数码管能正常点亮

二、数码管显示逻辑修复

1. 段码映射错误修正

数码管段码必须和硬件类型匹配,直接用下面的标准映射:

  • 共阴数码管(a~g+dp,8段):
    // 索引1-8对应数字1-8的段码
    parameter [7:0] SEG_CODE[8:1] = '{8'h3f, 8'h06, 8'h5b, 8'h4f, 8'h66, 8'h6d, 8'h7d, 8'h07};
    
  • 共阳数码管:
    // 索引1-8对应数字1-8的段码
    parameter [7:0] SEG_CODE[8:1] = '{8'hc0, 8'hf9, 8'ha4, 8'hb0, 8'h99, 8'h92, 8'h82, 8'hf8};
    
  • 代码里加段码映射逻辑,直接根据当前模式编号输出对应段码:
    assign seg = SEG_CODE[mode];
    

2. 时钟同步问题处理

必须保证模式编号mode的更新和1Hz分频时钟同步,避免亚稳态:

reg [2:0] mode;
reg clk_1Hz;
// 50MHz转1Hz分频逻辑
reg [25:0] cnt;
always @(posedge clk) begin
    if(cnt == 26'd49_999_999) begin
        cnt <= 26'd0;
        clk_1Hz <= ~clk_1Hz;
    end else begin
        cnt <= cnt + 1'b1;
    end
end
// 模式循环更新,1Hz触发一次
always @(posedge clk_1Hz) begin
    mode <= (mode == 3'd8) ? 3'd1 : mode + 1'b1;
end

3. 输出端口检查

确认water_led.v的端口定义里seg是输出端口:

module water_led(
    input clk,
    input rst_n,
    output [7:0] led,
    output [7:0] seg  // 必须存在且为输出类型
);

三、仿真验证优化

在tb_water_led.v里加seg信号的观测逻辑:

  • 添加$monitor("Time: %0t, Mode: %d, SEG: %h", $time, mode, seg);,实时查看模式编号和段码的对应关系
  • 仿真时重点看1Hz时钟触发后,mode从1到8循环时,seg输出是否和预设段码一致

内容的提问来源于stack exchange,提问作者xcsoft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:52:44