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

LED呼吸灯Testbench无波形输出问题求助

仿真时LED输出始终为X的原因及修复方案

问题根源

你的Verilog模块中,r_Count和r_PWM这两个寄存器没有显式初始化:

  • 在Verilog仿真环境中,未初始化的寄存器默认初始值为X(未知状态)。
  • 所有基于X的算术或逻辑运算结果依然是X,导致w_Intensity、r_PWM全程保持X,最终o_LED输出始终为X。
  • 板级运行正常是因为FPGA硬件上电后,寄存器会被自动初始化为0(或硬件默认状态),但仿真不会自动执行这个初始化操作。

修复方案

在模块中给寄存器添加初始值即可解决问题,修改后的模块代码如下:

`timescale 1ns / 1ps

module LED_Glow(i_Clk, o_LED);
input i_Clk;
output o_LED;

// Clock frequency 125MHz, glow frequency 1Hz -> count up to 125MHz
reg [26:0] r_Count = 27'd0; // 显式初始化计数器为0
wire [5:0] w_Intensity = r_Count[26] ? r_Count[25:20] : ~r_Count[25:20];
reg [6:0] r_PWM = 7'd0; // 显式初始化PWM寄存器为0

always @(posedge i_Clk)
    begin
        r_Count <= r_Count + 1;
        r_PWM <= r_PWM[5:0] + w_Intensity;
    end

assign o_LED = r_PWM[6];
    
endmodule

补充说明

你的Testbench时钟周期设置为#1(对应500MHz),比实际开发板的125MHz快,但这不会导致仿真异常,只是会让仿真中的呼吸灯周期比实际硬件短。如果需要更贴合实际的仿真,可以把时钟周期改为#4(125MHz对应8ns周期,半周期为4ns)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:57:35