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