System verilog SVA重复非连续运行合格事件

System verilog SVA重复非连续运行合格事件,system-verilog,system-verilog-assertions,System Verilog,System Verilog Assertions,我拥有以下财产: property p; @(posedge clk) a |=> b[=2] ##1 c; endproperty 它告诉我们,如果断言了a,那么从下一个clk开始,b应该非连续地断言两次,然后在最后一个b之后的任何时间断言c 我的问题是,如果在第一个b和第二个b之间断言c,该怎么办。断言应该立即失败还是继续? 一些参考书说它应该失败,但我对此表示怀疑。预期的行为是什么?在c为真之前的时钟周期中,[=或非连续重复运算符类似于转到重复,但表达式不必为真 假设断言了a。

我拥有以下财产:

property p;
  @(posedge clk) a |=> b[=2] ##1 c;
endproperty
它告诉我们,如果断言了
a
,那么从下一个
clk
开始,
b
应该非连续地断言两次,然后在最后一个
b
之后的任何时间断言
c

我的问题是,如果在第一个
b
和第二个
b
之间断言
c
,该怎么办。断言应该立即失败还是继续?
一些参考书说它应该失败,但我对此表示怀疑。预期的行为是什么?

c
为真之前的时钟周期中,
[=
非连续重复运算符类似于转到重复,但表达式不必为真

假设断言了
a
。满足了蕴涵条件,进一步评估了断言

此后,
b
被检查两次,无论
c
是什么,一旦发现
b
被断言为两个非连续时钟边,之后在1个时钟周期后检查
c
(由于
#1

如果在检查
b
c
断言de断言两次
,则不考虑该切换。
c
被考虑的是
b
的两次断言之后的

以下快照应给出一个清晰的概念:

传递捕捉:

失败捕捉:

在这里,即使
c
中有一个小故障,断言也没有通过

有关更多详细信息,请参阅。
[=
非连续重复运算符类似于转到重复,但表达式不必在
c
为真之前的时钟周期中为真

假设断言了
a
。满足了蕴涵条件,进一步评估了断言

此后,
b
被检查两次,无论
c
是什么,一旦发现
b
被断言为两个非连续时钟边,之后在1个时钟周期后检查
c
(由于
#1

如果在检查
b
c
断言de断言两次
,则不考虑该切换。
c
被考虑的是
b
的两次断言之后的

以下快照应给出一个清晰的概念:

传递捕捉:

失败捕捉:

在这里,即使
c
中有一个小故障,断言也没有通过

有关更多详细信息,请参阅。
也很好。

简言之,是的,它将通过。无论在哪里断言c,在观察到两个“b”后,它将等待c==1。因此,如果c从一开始就是1,并且从未变为零,它也将通过


还有一点需要说明的是,这个断言何时会真正失败。当断言c时,它将通过,但如果不是,它将一直运行到测试结束!您将只在模拟结束时看到失败。

简而言之,是的,它将通过。无论断言c在哪里,在两个“b”之后如果观察到s,它会一直等到c==1。所以,如果c从一开始就是1,并且永远不会变为零,它也会通过


还有一点需要说明的是,这个断言何时会真正失败。当断言c时,它将通过,但如果没有通过,它将一直运行到测试结束!您将只在模拟结束时看到失败。

它是否也适用于
转到重复
(我的意思是,当检查两次
b
时,我们可以忽略
c
,也就是说,如果我们使用
goto repeation
非连续重复
,那么在检查
b
时,不要查找
c
。对于提到的序列,
cb
两次后检测到de>。因此,这两个都不会失败,都会通过。但是,如果您有类似
a!b b!b!b c
的内容,则转到重复将失败,但非连续重复将通过。是的,这也适用于转到重复。好的,现在我理解并同意您的看法。我刚刚得到了coNF由您给出的链接中的语句使用:在类似属性中,它表示:
这意味着a后面跟着任意数量的时钟**其中c为false**,b为true,介于1到3次之间,最后一次是c为true之前的时钟。
他们在这里是否做出了错误的语句(在检查b时要求c为false)?哦,这是一个解释问题,没有严格的条件要求c为假。只是在模拟时没有检查
c
。它是否也适用于
goto重复
(我的意思是,当检查两次
b
时,我们可以忽略
c
,也就是说,如果我们使用
goto repeation
非连续重复
,那么在检查
b
时,不要查找
c
。对于提到的序列,
cb
两次后检测到de>。因此,这两个都不会失败,都会通过。但是,如果您有类似
a!b b!b!b c
的内容,则转到重复将失败,但非连续重复将通过。是的,这也适用于转到重复。好的,现在我理解并同意您的看法。我刚刚得到了co由lin中的语句使用