我正在尝试为握手程序编写SVA断言。
在我的搜索中,我发现了以下内容:
property p_handshake(clk,req,ack);
@(posedge clk)
req |=> !req [*1:max] ##0 ack;
endproperty
assert property(p_handshake(clock,valid,done));
然而,在有效周期变高后,允许我的“完成”信号进入许多周期。你如何使这个陈述确保在声明有效之后任何点声明“完成”,而没有有效的解除声明?
答案 0 :(得分:2)
$rose(req) |=> req[*1:$] ##0 ack;
$rose
将在req
的上升沿启动断言。 [*1:$]
表示对于1到无限时钟的范围,左侧必须为true。您可以使用等同于[+]
的{{1}}。
其他一些编写检查器的方式是:
[*1:$]
答案 1 :(得分:0)
你是否还需要一个SVA来确保在有效$ rose的情况下,还没有声明完成? 如果你这样做,那么请考虑这个SVA- $ rose(有效)| - > 〜完成## 1 $稳定(〜完成)[* 949:950] ## [1:$]完成;
以上要求在一段时间内不断言,然后在将来的某个时间断言。