【问题标题】:What exactly do x and z values represent in Verilog?x 和 z 值在 Verilog 中究竟代表什么?
【发布时间】:2021-10-11 17:54:58
【问题描述】:

Verilog 标准定义了四种类型的位值:0、1、x 和 z,其中 0 表示低,1 表示高,x 表示未知,z 表示未驱动的网络。

几个问题:

  1. x 是否意味着我们不知道值是 0 还是 1? 0 或 1 还是 z?或者该值只是未知的并且可以是 0、1 或 z 以外的其他值?
  2. 既然 z 代表一个未驱动的网络,reg 类型可以有一个 z 位吗?如果有,是什么意思?

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    通常,x 表示我们不知道值是 0 还是 1。我想它也可能包括 z。我不认为它意味着 0/1/z 以外的任何东西。

    模拟中的 x 通常意味着信号未初始化为 0 或 1。如果您正在建模没有复位的触发器,这很常见。

    x 的另一个常见原因是网络由多个驱动程序驱动(争用)。如果一个驱动 0 而另一个驱动 1,则结果为 x。

    是的,reg 的值可以是 z。通常对reg 使用过程分配。下面是一个简单的三态驱动示例:

    module tb;
    
    reg en = 0;
    reg out;
    
    always @* out = en ? 1 : 'z;
    
    initial begin
        $monitor($time, " en=%b out=%b", en, out);
        #5 en = 1;
        #5 en = 0;
        #5 $finish;
    end
    
    endmodule
    

    打印:

                   0 en=0 out=x
                   5 en=1 out=1
                  10 en=0 out=z
    

    这也可以使用连续赋值来建模:

    wire out = en ? 1 : 'z;
    

    在这两种情况下(regwire),z 的含义相同。

    【讨论】:

      【解决方案2】:

      X 值的含义取决于您所指的信号类型以及它是如何获得该值的。

      对于具有 4 状态数据数据类型的 变量,X 是默认初始状态,这意味着它的值是 unknown 并且有可能是任何值。这是一个符号状态,因为真实硬件在任何特定时间点都将处于特定状态 0 或 1。 您还可以将变量分配给值 X,因为您不关心它的值是什么,或者认为该操作是非法的。综合工具在优化您的逻辑时使用该无关信息,它将产生确定性逻辑。

      网络的值是一个或多个驱动程序或连续分配的解析函数。内置网络类型通过查看他们的驱动强度来解决多个驱动程序,最高强度获胜。当驱动 0 和 1 的相等强度之间存在冲突时,wire 使用 X 值解决冲突。没有任何力量被称为Z状态。

      可以为变量分配 X 或 Z 状态,并让该值通过连续分配驱动网络。如果以更强的力量驱动线材,则以强力量的价值为准。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-19
        • 1970-01-01
        • 2017-03-20
        • 2016-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多