System Verilog Module的不同实例有不同的行为


always @ (RSTDAC_B or EN or  DSR or  DSR_B )
begin
if (RSTDAC_B === 1'b0) begin stepp = 1'b0; stepn = 1'b0; end
else if (RSTDAC_B === 1'b1) begin    
if (EN & DSR   === 1'b1)  begin stepn = 1'b1;end
else if (EN & DSR_B  === 1'b1) begin stepp = 1'b1;end
end
end

上面的代码来自一个在设计中实例化了8次的动态寄存器模块。目的是当EN(able)高时,根据DSR或DSR_B是否高,步长或步长都高。我看到当DSR_B变高时,stepp和stepp在8个实例中有6个都变高。在2种情况下,设计行为符合预期,只有当EN &

我在很多工具上都看到过这种情况,所以我不认为这是工具的错。由于

这不是有效的组合逻辑。您必须对所有可能的代码分支中的所有变量赋值。对于stepnstepp,你不能这样做

如果您正在使用SystemVerilog,您应该使用always_comb而不是always @(explicit_list_of_signals)

相关内容

最新更新