【问题标题】:Different instances of a System Verilog Module have different behaviour系统 Verilog 模块的不同实例具有不同的行为
【发布时间】:2021-09-02 22:21:11
【问题描述】:
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) 为高电平时,stepp 或 stepn 为高电平,具体取决于 DSR 或 DSR_B 是否为高电平。我看到当 DSR_B 变高时, stepp 和 stepn 在 8 个实例中有 6 个都变高。在 2 种情况下,设计行为符合预期,只有在 EN 和 DSR_B 为高电平时 stepp 才会变为高电平。

我在多个工具上都看到过这种情况,所以我认为这不是工具的问题。谢谢

【问题讨论】:

  • 您描述了可能由状态逻辑中的故障引起的典型行为(您有一个锁存器)。至少在 DSR 中检查故障。

标签: logic verilog system-verilog


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多