2023.3.20 继续学习跑回归测试,以及查看覆盖率
有两类覆盖率
对于code coverage,在编译和仿真需要加额外参数。对于function coverage,编译和仿真不需要加额外参数。
编译如果带有coverage选项,会在编译目录下,生成simv.vdb
目录,里面包含了coverage model
使用的较多的是-cm
, -cm_name
, -cm_dir
这三个选项编译和仿真过程都要加上。
-cm
:指定使能覆盖率的类型,包括:line、cond、fsm、tgl、path、branch和assert
-cm line+cond+fsm+tgl+branch+assert
-cm_count
:在统计是否覆盖的基础上,进一步统计覆盖的次数
-cm_dir
:指定覆盖率统计结果的存放路径,默认是simv.vdb,更改默认的coverage model生成的目录
-cm_log
:指定保存覆盖率结果的文本文件的名称
-cm obc
:使能可观察覆盖率的编译
-cm_name
:修改默认的test目录。对于每一个test,生成的coverage数据,默认是在simv.vdb/snps/coverage/db/testdata/test目录下。比如-cm_name load_test,那么coverage数据,就会生成在simv.vdb/snps/coverage/db/testdata/load_test目录下。
-cm_hier
:指定覆盖率统计的范围,可以指定是module名、层次名和源文件等。0表示统计所有,1表示只统计当前层,2表示统计当前层和下一层,之后依次类推。
-cm_tgl mda
:为Verilog 2001和SystemVerilog未打包的多维数组启用翻转覆盖
-cm_noconst
:告诉VCS不要监视由于信号始终为1或0值而永远无法满足的条件或永远无法执行的线路
-cm_noseqconst
:(没找到啥意思)
-cm_cond
:由一个或多个参数指定的修改后的条件覆盖率
-cm_fsmcfg
:指定状态机覆盖率配置文件
-cm_line contassign
:收集行覆盖率,并且忽略连续赋值语句
-cm_cond nocasedef
:在统计case语句的条件覆盖率时,不考虑default条件未达到的情况
在编译代码的时候加上这些覆盖率选项
-cm line+cond+fsm+tgl+branch
-cm_linecontassign
-cm_cond allops+anywidth+event
-cm_noseqconst
-debug_all
参考链接:
VCS命令详解(一):编译命令
VCS 编译仿真方法总结
dve -full64 -cov -dir simv.vdb
verdi -cov -covdir *.vdb/ &
verdi -cov -cov_dir simv.vdb
问题:不知道为啥没有license,目前只能用dve去看覆盖率,could not checkout verdi coverage license
(未解决)
在eetop看到一个解决方法是,在src中添加license feature “VerdiCoverage”
,再去生成license,我尝试过,dat文件里面有这个feature了,但是还是用verdi查看不了覆盖率
在当前目录下,会生成 urgReport
目录,里面有生成的html文件,使用浏览器即可查看这些文件。
urg -dir simv.vdb
firefox urgReport //表示用浏览器打开覆盖率,进行查看
urg:Unified Report Generator,将coverage数据转换为html格式
-dir
:指定需要拿到的db的hier
-dbname
:指定输出的merge db的hier
-elfile
:指定exclusive的file,这样更好计算coverage
-elfilelist
:忽略中每一个.el文件
-noreport
:不输出最终的report,只是merge db
-report
:输出report
-format text/both
:指定report的输出格式,both意思是两种格式都输出
-matric
[line,cond,fsm,tgl,branch,assert]:执行计算的coverage类型
-parallel
:并行merge
-full64
:以64bit的程序进行merge,如果是64位,也可以不加这个选项
-warn none
:忽略warning信息
-metric
:+line等等,意思位提取特定的coverage
这行代码的功能是,从当前目录下查找vdb文件,将其覆盖率进行合并,合并后的文件叫做merged.vdb
,且是并行merge
的,最后输出report,文件名叫做urgReport
,里面有html格式的覆盖率。
urg -full64 -dir *.vdb -dbname merged -parallel -report urgReport
假如修改了覆盖率相关的代码,如新添加了coverpoint等等,希望把新收集的和以前的merge到一起,可以使用选项-flex_merge union
,不希望合并就使用-flex_merge drop
urg -full64 -flex_merge union -dbname <merge_coverage_name>.vdb -dir simv.vdb &
urg -full64 -flex_merge drop -dbname <merge_coverage_name>.vdb -dir simv.vdb &