有什么区别:
if (dataoutput[7:0] == 8'bx) begin
和
if (dataoutput[7:0] === 8'bx) begin
执行后dataoutput = 52'bx
,第二个给1,但第一个给0。为什么?(0 或 1 为比较结果。)
Verilog 中的一些数据类型,例如reg
,是四态的。这意味着每个位可以是 4 个值之一:0,1,x,z。
使用“大小写相等”运算符,===
比较 x,结果为 1。
如您所说,使用==
,比较的结果不是 0;相反,根据 IEEE Std (1800-2009) 第 11.4.5 节“平等运算符”,结果是 x:
对于逻辑相等和逻辑不等运算符(== 和 !=),如果由于操作数中的未知位或高阻抗位,关系不明确,则结果应为 1 位未知值 (x)。
在 Verilog 中:
== 用于比较位(0 或 1) === 用于比较所有 4 种状态(0、1、x、z)
== 可以合成为硬件(x 或非门),但 === 不能合成,因为 x 在数字中不是有效的逻辑电平,它实际上具有介于 0 和 1 之间的电压。而 z 不是本身任何逻辑,它显示电路断开。