【发布时间】:2011-05-08 13:07:55
【问题描述】:
有什么区别:
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。
使用“大小写相等”运算符===,比较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本身不是任何逻辑,它表示电路断开。
【讨论】: