有什么区别:
if (dataoutput[7:0] == 8'bx) begin
和
if (dataoutput[7:0] === 8'bx) begin
执行dataoutput = 52'bx
后,第二个给出1,但第一个给出0.为什么? (0或1是比较结果。)
答案 0 :(得分:24)
Verilog中的某些数据类型(例如reg
)是4状态。这意味着每个位可以是4个值中的一个:0,1,x,z。
使用“case equality”运算符===
,比较x,结果为1.
对于==
,比较结果不是0,如您所述;相反,结果是x,根据IEEE标准(1800-2009),第11.4.5节“平等算子”:
对于逻辑相等和逻辑 不等式运算符(==和!=),如果, 由于未知或高阻抗位 在操作数中,关系是 暧昧,那么结果应该是一个 1位未知值(x)。
答案 1 :(得分:18)
在Verilog中:
答案 2 :(得分:5)
==用于比较位(0或1) ===用于比较所有4个状态(0,1,x,z)
==可以合成为硬件(x-nor gate),但是= =不能合成,因为x不是数字中的有效逻辑电平,它实际上具有介于0和1之间的电压并且z本身不是任何逻辑,它表示电路断开。