42

有什么区别:

if (dataoutput[7:0] == 8'bx) begin

if (dataoutput[7:0] === 8'bx) begin 

执行后dataoutput = 52'bx,第二个给1,但第一个给0。为什么?(0 或 1 为比较结果。)

4

4 回答 4

40

Verilog 中的一些数据类型,例如reg,是四态的。这意味着每个位可以是 4 个值之一:0,1,x,z。

使用“大小写相等”运算符,===比较 x,结果为 1。

如您所说,使用==,比较的结果不是 0;相反,根据 IEEE Std (1800-2009) 第 11.4.5 节“平等运算符”,结果是 x:

对于逻辑相等和逻辑不等运算符(== 和 !=),如果由于操作数中的未知位或高阻抗位,关系不明确,则结果应为 1 位未知值 (x)。

于 2011-05-08T17:35:42.097 回答
23

在 Verilog 中:

  • == 测试逻辑相等(测试 1 和 0,所有其他结果为 x)
  • === 测试 4 状态逻辑相等(测试 1、0、z 和 x)
于 2011-05-08T13:58:37.467 回答
6

== 用于比较位(0 或 1) === 用于比较所有 4 种状态(0、1、x、z)

== 可以合成为硬件(x 或非门),但 === 不能合成,因为 x 在数字中不是有效的逻辑电平,它实际上具有介于 0 和 1 之间的电压。而 z 不是本身任何逻辑,它显示电路断开。

于 2014-12-09T03:34:23.567 回答
0

正如许多人已经评论的那样,如果信号有 X,“正常”比较运算符可能会导致未知状态/答案。因此,如果您从可以提供 U 或 X 状态的 RAM 进行比较,并且想要真正检查匹配,那么您应该使用 "===" 和 "!==" 运算符。

请参阅 systemverilog 参考文档中的图片。 systemverilog 参考的快照

于 2021-10-11T08:27:43.370 回答