【问题标题】:What is the difference between implication (->) and ##0 in SVA?SVA中的暗示(->)和##0有什么区别?
【发布时间】:2016-08-28 07:10:10
【问题描述】:

以下语句之间的细微差别是什么

a -> ba ##0 b

在 SVA(SystemVerilog 断言)中?

【问题讨论】:

    标签: system-verilog system-verilog-assertions


    【解决方案1】:

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

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

    1. a ##0 b
    2. a |-> b

    实际上,它看起来像一个类似的表达方式。这个表达式的第一个是检查a 是否被断言(1) 并且在0 个时钟周期之后b 是否被断言(1)。第二个表达式是检查b 在断言a 时是否(打开)断言(1)然后在相同的姿势b 是否断言(1)。

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

    1. a ##0 b在这个表达式中,如果 a 没有被断言,那么它显示失败。

    a 被断言(1) 并且在同一时间戳b 未被断言时,也会显示失败。

    1. a |-> b:在这个表达式中,如果a 被断言并且b 未被断言,那么它将显示失败。

    如果a 没有被断言,那么它不会检查b 是否被断言。这种行为与a ##0 b 不同。

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

    还有一点需要注意的是“蕴含构造只能与属性定义一起使用。它不能在序列中使用。”

    谢谢,

    阿苏托什

    【讨论】:

      【解决方案2】:

      您的问题说明了蕴涵运算符 (|->) 的重要性。这个例子使用了一个隐含运算符并且很有用:

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

      这不是而且通常不是很有用:

      a ##0 b 表示“ab 在任何时候都应该为真”(不是很有用)。

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

      【讨论】:

        猜你喜欢
        • 2016-02-19
        • 2016-03-23
        • 2021-06-16
        • 1970-01-01
        • 2012-09-23
        • 2021-02-13
        • 2012-08-02
        • 1970-01-01
        相关资源
        最近更新 更多