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 &
我在很多工具上都看到过这种情况,所以我不认为这是工具的错。由于
这不是有效的组合逻辑。您必须对所有可能的代码分支中的所有变量赋值。对于stepn
和stepp
,你不能这样做
如果您正在使用SystemVerilog,您应该使用always_comb
而不是always @(explicit_list_of_signals)