Skip to Main Content
白皮书

揭开功能覆盖率的复杂性

简化使用模型的高级指南

Covergroup with option.per_instance=1
Covergroup 是一个功能异常强大的验证组件,但要正确设置 covergroup,难度可能很大。本文将概括一套用于编写明确的功能覆盖率模型的指导准则。其中展示了如何避免一些潜在的误区,例如无法合并的covergroup、不必要的性能开销或受到限制的调试可见性等。

了解 covergroup 选项

SystemVerilog 既不是第一种包含功能覆盖率概念的语言,也不是第一种难以充分理解的语言。该语言有诸多优缺点,可能会严重影响您通过仿真观察到的结果。定义简单的 covergroup 非常简单,但是,一旦引入了尝试合并同一 covergroup 的多个实例的概念,其复杂性就会大幅增加,而根据不同的实现方法,这往往有可能导致截然不同的结果。 当您拥有嵌入式 covergroup,继而尝试在设计中的各种实例间合并这些 covergroup 时,要想理解它们就会变得越发复杂。最终,这些 covergroup 可能根本无法合并,导致您无法真正了解您在达成覆盖率目标方面的进展情况。 如果没有正确地创建 covergroup,您有可能引入不必要的性能开销,或者制约 covergroup 自身的调试可见性。这些类型的决策往往是在项目早期做出,而且在某些情况下没有任何其他资源能够解决问题,继而对验证平台环境做出大量的更改。要想在这种情况演变为问题之前加以避免,必须正确地了解 covergroup 的创建和所需的功能。

在本文中,我们将概括一套用于编写明确的覆盖率模型的指导准则。什么该做,什么不该做,以及怎样做。

分享