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


前言

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命令详解(一):编译命令
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 &
  • 49
    点赞
  • 275
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值