You need to enable JavaScript to run this app. Verilog实现LED每秒交替闪烁异常:所有LED同时点亮问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Verilog实现LED每秒交替闪烁异常:所有LED同时点亮问题排查

问题排查与代码修正

1. 硬件电平错配

  • 绝大多数开发板的板载LED为低电平点亮结构:输出逻辑0时LED亮,输出逻辑1时LED灭。代码中给LED2、LED4的初始值为0,匹配该硬件逻辑时这两个LED上电就会常亮;如果老款硬件平台不支持综合器识别的reg上电初始值,LED1、LED3的输出随机落到0电平,就会出现四个LED全部点亮的表观效果。
  • 对照开发板原理图确认LED点亮电平后,需对输出逻辑做匹配调整:如果是低电平点亮,要么将寄存器输出取反后接到LED引脚,要么修改初始值为硬件匹配的有效电平,确保两组LED初始状态相反。

2. 设计逻辑缺陷

  • 计数器存在冗余死分支:三层判断逻辑里的else r_Count <= 0永远不会触发——只要计数器计数到c_CYCLESINSECOND,就会立刻进入LED翻转分支把计数器清0,计数器永远不会出现大于阈值的状态,该分支属于无效代码。
  • 计数阈值与实际时钟不匹配:c_CYCLESINSECOND = 50_000_000是针对50MHz时钟的1秒周期数,如果开发板实际输入时钟不是50MHz(常见的12MHz、24MHz、27MHz晶振),实际闪烁周期会远大于1秒,慢到人眼无法区分闪烁,看起来就是所有LED常亮。
  • 上电初始值可靠性不足:在reg定义时直接赋值初始值的写法,仅支持带片上上电状态存储的新型FPGA;对于普通CPLD、老款FPGA,这类初始值不会被综合工具识别,所有寄存器上电状态随机,很可能四个LED初始输出全部落到点亮对应的电平,直接表现为全亮。可靠设计需额外增加全局复位逻辑,不依赖工具识别的上电初始值。

3. 外围配置错误

  • 检查引脚约束正确性:如果约束文件将LED输出引脚配置错误,比如把所有输出绑到同一个LED、绑到电源/地引脚,就会出现所有LED同时点亮的现象。
  • 检查时钟输入连接:如果模块的i_Clk引脚没有正确连接到开发板的晶振输出,所有时序逻辑不会跳变,输出停在上电随机状态,大概率表现为全亮。

修正后的核心计数器逻辑

去掉冗余分支,调整为边界判断逻辑,降低计数溢出风险:

always @(posedge i_Clk)
begin
    if (r_Count >= c_CYCLESINSECOND - 1) begin
        r_LED_1 <= ~r_LED_1;
        r_LED_2 <= ~r_LED_2;
        r_LED_3 <= ~r_LED_3;
        r_LED_4 <= ~r_LED_4;
        r_Count <= 0;
    end else begin
        r_Count <= r_Count + 1'b1;
    end
end

同时需要做位宽校验:计数器位宽需满足2^N >= c_CYCLESINSECOND,避免位宽不足导致计数提前溢出、计时不准。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 15:15:04