一、在vcs仿真脚本里增加统计代码覆盖率的选项
在vcs里增加-cm
选项,把需要统计的代码覆盖率类型选上。常见的代码覆盖率类型有:
line
:行覆盖率
cond
:条件覆盖率
fsm
:状态机覆盖率
tgl
:toggle覆盖率
branch
:分析覆盖率
assert
:断言覆盖率
另外,通过-cm_hier
指定到rtl top层,只统计RTL部分,排除掉验证环境、仿真model等模块。
vcs
-cm line+cond+fsm+tgl+branch+assert
-cm_hier cm_hier.file
+tree tb.u_digital_top
设置好覆盖率option之后,仿真log的末尾有提示仿真过程中记录了哪些覆盖率类型。
---------------------------------------------------------------------------
VCS Coverage Metrics: during simulation line, cond, FSM, branch, tgl was monitored
---------------------------------------------------------------------------
V C S S i m u l a t i o n R e p o r t
二、用verdi查看覆盖率报告
对于单个case,可以直接用命令verdi -cov
先打开gui,再点菜单上的Open/Add Database...
,选择当前目录下的simv.vdb
,就可以看到覆盖率报告了。
对于多个testcase,每个case只仿真了芯片的部分功能,真实覆盖率需要合并后查看。
可以写个脚本,把多个case下的simv.vdb用-covdir
选项拼接到一起,下面是一个例子:
import os
tclist = ['tc_testcase1', 'tc_testcase2', 'tc_testcase3']
cmd = verdi -cov
for tc in tclist:
cmd += ' -covdir' + tc + '/simv.vdb'
os.system(cmd)
运行脚本就可以看到合并之后的代码覆盖率报告了。