SystemVerilog断言:一旦A被置位,A保持高电平直到B被置低,之后A最终会低电平

时间:2018-05-15 10:00:35

标签: system-verilog verification system-verilog-assertions

我试着写一个断言:

一旦A被置位,A保持高电平直到B被置低。在那之后,A最终会断言。

我写的断言是:

MonthNames
--------------
 July, July, August, September

在断言A时,断言失败。伙计们,你能告诉我my_assertion在哪里做错了吗?是" [0:$]"使用不正确?

2 个答案:

答案 0 :(得分:2)

##的优先级高于throughout;参见IEEE1800-2012§16.9序列操作表16-1。

因此A throughout !B [->1] ## [0:$] !A是样本A throughout (!B [->1] ## [0:$] !A)。此操作失败,因为最后一个周期需要A为高(throughout的左侧)和低(throughout的右侧),这将始终评估为false。

我认为理想的行为是:(A throughout !B [->1]) ## [0:$] !A

答案 1 :(得分:1)

我认为你的问题是由于运营商的优先权。当A被置为无效时,这不会失败:

$rose(A) |-> (A throughout !B [->1]) ## [0:$] !A

而你所写的内容与:

相同
$rose(A) |-> A throughout (!B [->1] ## [0:$] !A)

永远无法通过,因为A不能同时为真和假。

https://www.edaplayground.com/x/4Vv9