SVA 重复非连续操作资格赛

SVA Repetition Non-Consecutive Operation Qualifying Event

我有以下 属性:

property p;
  @(posedge clk) a |=> b[=2] ##1 c;
endproperty

告诉我们,如果a被断言,那么从下一个clk开始,b应该非连续断言两次,然后c是在最后一个 b.

之后的任何时间断言

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

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

假设 a 成立。 蕴含条件满足并且进一步评估断言。

此后,b被检查两次不管什么是c。一旦 b 被发现被断言 两个非连续的时钟边沿, 此后 c 在 1-时钟周期(由于 ##1)。

如果 c 断言 并且 被反断言 b 时检查 2 次,然后 考虑切换。 c 被认为是 2 个断言 b.

之后

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

通过快照:

失败快照:

在这里,即使 c 中出现故障,断言也没有通过。

有关详细信息,请参阅 A Practical Guide for SystemVerilog Assertions pdfDoulos tutorial也不错

总之,是的,它会过去的。无论 c 在何处断言,在观察到两个 "b" 之后,它都会等到 c==1。所以,如果 c 从一开始就是 1 并且永远不会变为零,它也会通过。

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