SVA中的暗示( - >)和## 0之间有什么区别?

时间:2016-08-28 07:10:10

标签: system-verilog system-verilog-assertions

以下陈述之间的细微差别

a -> b vs a ##0 b

SVA(SystemVerilog Assertions)中的

2 个答案:

答案 0 :(得分:2)

您必须检查的第一件事是单个蕴涵算子的语法a |-> b

在SystemVerilog断言中有两个表达式。

  1. a ##0 b
  2. a |-> b
  3. 实际上,它看起来像表达式中的相似。该表达式的第一个是检查a是否被置位(1)并且在0时钟周期b被置位(1)之后。第二个表达式是在b被置位时检查a是否(on)断言(1)然后在相同的posedge b上断言(1)或不断言。

    现在,实际上,当验证工程师编写这种断言时,他们会处理以下事情。

    1. a ##0 b在此表达式中,如果未声明a,则表示失败。
    2. a被置位(1)且同一时间戳b未被断言时,也会显示失败。

      1. a |-> b:在此表达式中,如果a被置位且b未被断言,那么它将显示失败。
      2. 如果未声明a,则不会检查b是否已声明。此行为与a ##0 b不同。

        如果你应用不同的输入数据,那么你可以看到表达式a ##0 b会比a |-> b给你更多的失败。上面已经解释了相同的原因。

        另外需要注意的是"蕴涵构造只能用于属性定义。它不能用于序列。"

        谢谢,

        Ashutosh说

答案 1 :(得分:1)

您的问题说明了蕴涵运算符|->)的重要性。此示例使用蕴涵运算符,非常有用:

a -> b表示"如果a为真,则b应为true" (有用)。

这不是,通常不是很有用:

a ##0 b表示" ab应始终为真" (不是很有用)。

https://www.edaplayground.com/x/47iN