【问题标题】:What is the difference between == and === in Verilog?Verilog中==和===有什么区别?
【发布时间】: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为比较结果。)

【问题讨论】:

    标签: verilog hdl


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      在 Verilog 中:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • x 可以代表 0 或 1。
        • X 是一个未知状态...上电时未复位触发器的状态是什么? X. 在现实中可能是 0 或 1。 Z 是一个未知的电压/浮动状态,就像没有输出连接到网络时得到的一样。
        【解决方案4】:

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

        参见 systemverilog 参考文档中的图片。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-20
          • 2016-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多