Verilog中“==”和“===”有什么区别?

44

这两者有什么区别:

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

并且

if (dataoutput[7:0] === 8'bx) begin 
执行 dataoutput = 52'bx 后,第二个结果为1,但第一个结果为0。 为什么?(0或1是比较结果。)
4个回答

43

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

使用“case equality”运算符===,可以比较x,并且结果为1。

使用==,根据IEEE标准(1800-2009)第11.4.5节“等式运算符”的规定,比较的结果不是0;相反,结果是x:

 

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


23

在Verilog中:

  • == 测试逻辑相等性(测试 1 和 0,其他所有结果均为 x)
  • === 测试 4 状态逻辑相等性(测试 1、0、z 和 x)

7

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

== 可以合成为硬件(x-nor门),但 === 无法合成,因为x不是数字逻辑中有效的逻辑电平,实际上它的电压介于0和1之间。而z本身并不代表任何逻辑,它表示电路的断开。


x 可以表示 0 或 1。 - toolic
4
X是一个未知状态...未复位的flipflop在上电时会处于什么状态?X。实际上它可能是0或1。Z是一个未知电压/浮动状态,就像当没有输出连接到网络时所得到的状态。 - Robert Stoddard

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接