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 pdf。
Doulos tutorial也不错
总之,是的,它会过去的。无论 c 在何处断言,在观察到两个 "b" 之后,它都会等到 c==1。所以,如果 c 从一开始就是 1 并且永远不会变为零,它也会通过。
还有一点需要说明,这个断言何时会真正失败。当 c 被断言时它将通过,但如果没有,它将保持 运行 直到测试结束!您只会在模拟结束时看到失败。
我有以下 属性:
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 pdf。 Doulos tutorial也不错
总之,是的,它会过去的。无论 c 在何处断言,在观察到两个 "b" 之后,它都会等到 c==1。所以,如果 c 从一开始就是 1 并且永远不会变为零,它也会通过。
还有一点需要说明,这个断言何时会真正失败。当 c 被断言时它将通过,但如果没有,它将保持 运行 直到测试结束!您只会在模拟结束时看到失败。