Verilog 中的 x 和 z 值究竟代表什么?
What exactly do x and z values represent in Verilog?
Verilog 标准定义了四种类型的位值:0、1、x 和 z,其中 0 表示低,1 表示高,x 表示未知,z 表示未驱动网络。
几个问题:
- x是否表示我们不知道该值是0还是1? 0 或 1 或 z?或者该值只是未知的,可以是 0、1 或 z 以外的其他值?
- 由于 z 表示未驱动的网络,
reg
类型可以有 z 位吗?如果是,那是什么意思?
通常情况下,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;
在这两种情况下(reg
和 wire
),z 的意思相同。
值 X
有多种含义,具体取决于您指的是哪种信号以及它如何获得该值。
对于具有 4 态数据类型的 变量,X 是默认的初始状态,这意味着它的值为 未知 并且有可能成为任何价值。这是一个符号状态,因为真实硬件在任何特定时间点都将处于特定状态 0 或 1。
您还可以将变量赋给值 X,因为某些操作您 不关心 它的值是什么,或者想认为该操作是非法的。综合工具在优化逻辑时使用 无关 信息,它会产生确定性逻辑。
网络的值是一个或多个驱动程序或连续分配的分辨率函数。内置的网络类型通过查看驱动强度来解决多个驱动程序,最高强度获胜。当驱动 0 和 1 的相等强度之间存在冲突时,wire
将使用 X 值解决冲突。没有任何力量被称为Z
状态。
可以为变量分配 X 或 Z 状态,并让该值通过连续分配驱动网络。如果用更强的强度驱动电线,则以该强度值为准。
Verilog 标准定义了四种类型的位值:0、1、x 和 z,其中 0 表示低,1 表示高,x 表示未知,z 表示未驱动网络。
几个问题:
- x是否表示我们不知道该值是0还是1? 0 或 1 或 z?或者该值只是未知的,可以是 0、1 或 z 以外的其他值?
- 由于 z 表示未驱动的网络,
reg
类型可以有 z 位吗?如果是,那是什么意思?
通常情况下,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;
在这两种情况下(reg
和 wire
),z 的意思相同。
值 X
有多种含义,具体取决于您指的是哪种信号以及它如何获得该值。
对于具有 4 态数据类型的 变量,X 是默认的初始状态,这意味着它的值为 未知 并且有可能成为任何价值。这是一个符号状态,因为真实硬件在任何特定时间点都将处于特定状态 0 或 1。 您还可以将变量赋给值 X,因为某些操作您 不关心 它的值是什么,或者想认为该操作是非法的。综合工具在优化逻辑时使用 无关 信息,它会产生确定性逻辑。
网络的值是一个或多个驱动程序或连续分配的分辨率函数。内置的网络类型通过查看驱动强度来解决多个驱动程序,最高强度获胜。当驱动 0 和 1 的相等强度之间存在冲突时,wire
将使用 X 值解决冲突。没有任何力量被称为Z
状态。
可以为变量分配 X 或 Z 状态,并让该值通过连续分配驱动网络。如果用更强的强度驱动电线,则以该强度值为准。