我正在研究SystemVerilog Assertion。我申请SVA来检查valid-ack规范。规格如下:
当有效驱动(0到1)时,有效值应等于1 直到ack被驱赶(1)。当ack被置低(1到0)时, valid也被置为无效(1到0)。
为了检查这个规范,我写了两个属性(pr1和pr2)。您可以从以下链接中查看SVA代码。 https://www.edaplayground.com/x/5gHd
我预计两个属性完全相同。但是,pr2不能像我预期的那样工作(我预计断言可能会在50ns失败,因为有效值等于1但acns在50ns时等于0)。
波形: https://www.edaplayground.com/w/x/u5
pr2(50ns)有什么问题?
致以最诚挚的问候,
答案 0 :(得分:0)
根据SystemVerilog LRM:
具有最小最小和最大最大迭代次数范围的重复可用表达式表示 连续重复运算符[* min:max]。
在pr2中,你使用了重复运算符,其最大值等于$
,它代表有限但无限的迭代次数,因此只要valid[*1:$]
被置位,序列valid
就会持续ack
只有在valid
出现故障后才会检查{1}}。