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
相关产品推荐
相关产品推荐

