我正在研究SystemVerilog Assertion。我应用 SVA 来检查有效的确认规范。规格如下:
当驱动有效值(0 到 1(时,有效值应等于 1 直到 ACK 被驱动 (1(。当确认被取消断言(1 到 0(时, 有效也是取消断言的(1 到 0(。
为了检查这个规范,我写了两个属性(pr1 和 pr2(。您可以从下面的链接中看到 SVA 代码。https://www.edaplayground.com/x/5gHd
我预计两个属性的工作方式完全相同。但是,pr2 没有按我的预期工作(我预计断言可能会在 50ns 时失败,因为有效值等于 1,但在 50ns 时 ack 等于 0(。
波形:https://www.edaplayground.com/w/x/u5
pr2(50ns时(出了什么问题?
此致敬意
根据SystemVerilog LRM:
最小最小和最大最大迭代次数范围的重复可以用 连续重复运算符 [* 最小值:最大值]。
在 pr2 中,您使用了 max 等于 $
的重复运算符,它代表有限但无限的迭代次数,因此只要断言valid
,序列valid[*1:$]
就会持续,并且只有在valid
下降后才会检查ack
。