1.6.1 关于覆盖率指标
VCS在仿真期间监视HDL代码的执行。 验证工程师可以确定哪些部分代码尚未经过测试,以便他们可以将精力集中在这些领域,以实现100%的覆盖率(通常是不可能的)。 VCS提供两种覆盖技术来测试你的HDL代码:代码覆盖率和功能覆盖率。
代码覆盖率
代码覆盖率(Code Coverage)是反映testcase对被测dut覆盖程度的重要指标,也是衡量验证工作进展情况的重要指标。它也是对验证工作进行量化的重要指标之一,验证工作往往不如设计那样激动人心,一个重要原因之一就是验证难于量化,而代码覆盖率恰恰是解决这一问题的重要指标。
代码覆盖率分为如下几种:
- 行覆盖率(Line) - 该指标衡量HDL代码已在仿真中执行的语句。
- 切换覆盖率(Toggle) - 该指标衡量在仿真期间切换的逻辑位。切换简单的意味着位(bit)从0变为1或从1变为0.它是硬件设计中最古老的覆盖率指标之一,可用于寄存器传输级(RTL)和门级。
- 条件覆盖率(Condition) - 该指标衡量在仿真期间如何评估条件语句中的变量或子表达式。它可以在条件语句中找到其他覆盖率分析无法找到的错误。
- 分支覆盖率(Branch) - 该指标衡量影响HDL控制流(例如if语句和while语句)的表达式和case语句的覆盖范围。它侧重于影响HDL执行控制流的决策点。
- FSM覆盖率(FSM) - 该指标衡量状态机的每个合法状态是否已被访问,并且状态之间的每个转换都已被覆盖。
功能覆盖率
功能覆盖检查实现的整体功能。 要执行功能覆盖,必须为DUT中涵盖的功能定义覆盖点。 VCS支持Native Testbench(NTB)和SystemVerilog covergroup模型。 Covergroups由用户指定。 它们允许系统监视变量和信号的值和转换。 它们还可以实现变量和信号之间的交叉覆盖。其中Covergroups和Coverpoints等均是Systemverilo的语法,如果想了解更多,请参考SV LRM或者本系列教程中的systemverilog语法部分。
Chapter 19, “Functional Coverage” in the SystemVerilog LRM IEEE Std. 1800 - 2012
代码覆盖率vcs选项
VCS compile and runtime option
- 指定要设置的coverage类型
-cm <options>