使用ModelSim进行Verilog仿真时发现,将一个reg信号直接作为if的判断条件时,可能会导致仿真错误,而将判断条件改成wire信号后,即使是同一个信号仿真也能正常运行。只在前仿真中发现,后仿真和板级测试未发现问题。
Verilog代码
将reg SCLK2X直接作为if的判断:
wire test2;
assign test2 = SCLK2X;
always @(posedge Clk, negedge Rst_n) begin
if (!Rst_n) DAC_SCLK <= 1'b1;
else if (en) begin
if (SCLK2X) DAC_SCLK <= ~DAC_SCLK;
else DAC_SCLK <= DAC_SCLK;
end else DAC_SCLK <= 1'b1;
end
将与SCLK2X相同的wire信号test2作为if的判断:
wire test2;
assign test2 = SCLK2X;
always @(posedge Clk, negedge Rst_n) begin
if (!Rst_n) DAC_SCLK <= 1'b1;
else if (en) begin
if (test2) DAC_SCLK <= ~DAC_SCLK;
else DAC_SCLK <= DAC_SCLK;
end else DAC_SCLK <= 1'b1;
end
运行结果及报错内容
reg直接做判断:
变成wire做判断: