递归和非递归属性:这些断言是否相等?

时间:2017-12-23 05:17:48

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

考虑以下规范:

"interrupt must hold until interrupt ack is received"

enter image description here

这些断言是否相等且符合规范?

1-第一个断言(使用递归属性):

property intr_hold(intr, intrAck);
   intrAck or (intr and (1'b1 |=> intr_hold(intr, intrAck)));
endproperty 

assert property @(posedge clk) $rose(intr) |=> intr_hold(intr, intrAck);

2-秒断言(使用非递归属性):

assert property @(posedge clk) intr |=> intr or past(intrAck);

谢谢

1 个答案:

答案 0 :(得分:0)

第一个属性不接受intrintrAck都很低的周期。在这样的循环中,or的第一部分失败,因此必须评估第二部分。这部分无法通过,因为and的第一部分失败,因此连接失败。整个财产都失败了。

即使我们忽略了这样的循环,第一个断言也不能解决失败的情况。

让我们分析一下intr信号变高时的示例。

    第一个循环intrAck上的
  • 失败,但or的第二部分开始匹配。 intr传递,暗示的前导符合并触发下一周期的递归评估
  • 在第二个周期,对物业的新评价开始,同样的事情重复。仍然存在对前一周期(递归评估)的结果的评估。对于这个,将安排另一个递归评估。现在,对该物业的两次评估是“活跃的"。
  • 在第三个周期intrAck传递,新属性尝试通过。之前计划的两个属性评估也会通过,因为intrAck很高并且声明在第1周期和第2周期开始的属性评估也会通过。

非递归表格很好。

从模拟效率的角度来看,即使以某种方式重写了递归形式以符合规范,也会更糟。这是因为有许多待定的属性评估。在第1周期开始的财产评估仍然是“活着”#34;直到第3周期开始的属性评估在第3周期之前仍然存在,因此在第2周期中,如果确定通过/失败需要第4个周期,则会有第3个未决评估。一旦启动了相同属性的新属性,一个工具可以通过忽略先前的评估来更有效地实现这一点(因为失败将无论如何得到信号),但是模拟器通常显示何时为了调试目的而开始完成的属性评估并且这得到更多如果" old"评估被抛弃,取而代之的是递归评估。