SVA断言是一个强时序的技术,很多时候SVA的实际时序和验证工程师的期望可能不同,这种不同很难调试定位。
下面是一个SVA断言的示例,验证工程师期望断言
当检测到req的上升沿后,再持续高电平6个周期
hold_request: assert property (@(clk1))
$rose(req) | => ##6 (!$fell(req));
需要注意的是,上面的断言中的参数只指定一个普通的时钟信号@(clk1),而不是指定时钟的边沿@(posedge clk1)。
在这种情况下,断言对时钟的上升沿和下降沿都是敏感的。
对于简单的断言,对上升沿和下降沿都敏感一般只会导致额外的检查,所以最终是无害的。个别场景下,会有一些比较大的性能代价(这种性能代价可以通过sim profile
来优化)。
但是,当出现上面断言中的重复周期时,如##6运算符,后果就要严重多了。因为实际上的延迟不符合预期,只是预期的一半。
本来验证工程师预期延迟6个周期,实际上只是延迟3个周期。
这种问题,只能通过仔细地代码检视才能够发现。
作者:验证哥布林
链接:https://mp.weixin.qq.com/s/kIRA7neLX_zt24JXCcWhng
推荐阅读
更多数字IC设计技术干货等请关注数字芯片实验室专栏。添加极术小姐姐(微信:aijishu20)微信可申请加入IC设计交流群。