除了formal verification外,在基于SV/UVM的随机验证中,也可以通过断言来检查所有模块,如仲裁、FIFO和其他自定义逻辑。
但断言的一个特征是空成功。(|->或|=>)的左侧是检查的条件,如果条件为true,右侧结果的值才有意义。如果左侧是false不成功,则默认认为该断言属性成功。这被称为“空成功”。
考虑以下情况:
我们有一个仲裁器,在接收到request以后N个周期后,可以断言grant。为了验证是否每个request都获得grant,我们将有以下属性:
property check();
@(posedge clk)
req |-> ##[0:$] gnt;
endproperty
但在这里,如果接收到请求之后,而我们从未从仲裁器那里获得grant,那么这种断言将在仿真结束时会空成功。
如果我们以某种方式使这种断言的空成功转化成fail,那么这将极大地有助于节省定位周期。
SystemVerilog LRM提供了一个“strong”运算符来通知断言失败。根据IEEE 1800-2017,第16.12.1节:
strong(sequence_expr) evaluates to true if, and only if, there is a nonempty match of the sequence_e
SystemVerilog断言的空成功及解决办法

最低0.47元/天 解锁文章
800

被折叠的 条评论
为什么被折叠?



