SVA重复非连续运营资格赛

时间:2015-12-02 06:09:45

标签: system-verilog system-verilog-assertions

我有以下属性:

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

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

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

2 个答案:

答案 0 :(得分:3)

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

让我们说a被断言。 暗示条件 满足,并进一步评估断言。

此后,b检查两次 c是什么。对于两个非连续时钟边沿,b 被发现被置为后,此后 c在1个时钟周期后被检查(由于{ {1}})。

如果##1 断言取消声明 c 被检查 2次,那么切换是考虑。在b的 2次断言之后,c被认为是

按照快照应该给出一个明确的想法:

传递快照:

Pass

失败捕捉:

Fail

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

有关详细信息,请参阅A Practical Guide for SystemVerilog Assertions pdfDoulos tutorial也是一个很好的。

答案 1 :(得分:0)

简而言之,是的,它会过去。无论c被断言在哪里,在观察到两个" b" s之后,它将等到c == 1。因此,如果c从一开始就是1并且永远不会变为零,那么它也会过去。

另一个要点是这个断言实际上会失败。它会在c被断言时通过,但如果没有,它将继续运行直到测试结束!您将仅在模拟结束时看到故障。