首页 > 解决方案 > 在系统verilog断言中何时使用暗示以及何时使用##delay

问题描述

我有断言的场景,其中首先 a 应该是高 1 个周期之后这个 b 应该是高的,然后 1 个周期之后 c 应该是高的,在这之后有 1 个周期延迟 d 应该是高的我对这些断言应该如何编码感到困惑. 我有三个选项,请帮助我,应该遵循正确的解决方案

选项1: a |=> b |=> c |=> d ;

选项2:a |=> b ##1 c ##1 d;

选项3:a ##1 b |=> c ##1 d;

我被困在要遵循的这些选项中。请指导我了解最佳解决方案以及原因

标签: system-verilog-assertions

解决方案


选项 2 是唯一正确的选项(假设您希望在 a 高时触发此选项)。如果前件为假或后件为真,则暗示为真。选项1: a |=> b |=> c |=> d ;-> 如果 !a,这是真的,如果 a ##1 !b,那么这是真的,如果 a ##1 b ##1 !c,那么这是真的。只要前件是假的,整个陈述就是真的。

基本上 (b |=> c) 当 b 为假时为真,这意味着选项 1 表示如果 a 为高且 b 在下一个周期为高且如果 c 在下一个周期为高,则 d 在最后一个周期必须为高循环。那不是你需要的。

虽然您的问题实际上是需要 a 然后 b 然后 c 然后 d。这将需要:

a ##1 b ##1 c ##1 d

推荐阅读