vcs 覆盖率收集2——覆盖率选项 + 合并覆盖率

文章目录

  • 前言
  • 一、覆盖率
    • 1、覆盖率选项
  • 二、覆盖率查看
    • 1、dve查看
    • 2、verdi查看
    • 3、urg查看
  • 三、合并覆盖率urg


前言

2023.3.20 继续学习跑回归测试,以及查看覆盖率


一、覆盖率

有两类覆盖率

  • 代码覆盖率
  • 功能覆盖率

对于code coverage,在编译仿真需要加额外参数。对于function coverage,编译和仿真不需要加额外参数。

编译如果带有coverage选项,会在编译目录下,生成simv.vdb目录,里面包含了coverage model

1、覆盖率选项

使用的较多的是-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:由一个或多个参数指定的修改后的条件覆盖率

  • basic:只有逻辑条件,没有多个条件
  • std:仅逻辑和敏感条件
  • allops:逻辑和非逻辑条件
  • full:完整的逻辑和非逻辑,多种情况,不敏感条件
  • event:事件控制的敏感列表位置中的信号都是条件
  • anywidth:启用需要超过32位的条件
  • for:如果启用for循环,则启用条件
  • tf:在用户定义的任务和功能中启用条件

-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 覆盖率收集2——覆盖率选项 + 合并覆盖率_第1张图片

参考链接:
VCS命令详解(一):编译命令
VCS 编译仿真方法总结

二、覆盖率查看

1、dve查看

dve -full64 -cov -dir simv.vdb

2、verdi查看

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查看不了覆盖率

3、urg查看

在当前目录下,会生成 urgReport 目录,里面有生成的html文件,使用浏览器即可查看这些文件。

urg -dir simv.vdb
firefox urgReport  //表示用浏览器打开覆盖率,进行查看

三、合并覆盖率urg

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 &

你可能感兴趣的:(EDA工具仿真,学习)