2016-09-07 141 views
0

我正在学习SystemVerilog声明。我申请了SVA来检查有效的规范。规格如下:SystemVerilog声明有效(请求) - ack检查?

当有效驱动(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的)?

此致

+1

'pr1'乍一看显得正确。无论'ack'在做什么,只要'valid'被声明,'pr2'中的第一个后置条件就会匹配。这可能不是你想要的。 – Teajay

回答

0

按照SystemVerilog的LRM:

与一系列分钟最小和迭代可以与 连续重复操作符[*分钟来表示的最大最大数目的重复:最大。

在PR2您使用的重复操作,最大等于$它代表有限,但迭代的无限数量,从而valid断言和valid下山后才ack将被检查序列valid[*1:$]会持续多久。