代码覆盖率说明(个人总结)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
代码覆盖率说明
一、指令介绍
代码覆盖率分为行覆盖率、条件覆盖率、状态机覆盖率和翻转覆盖率。
在vcs仿真工具下覆盖率信息存储在.cm文件中,使用urg工具解析、合并和生成报告;在ncsim仿真工具下覆盖率信息存储在icc.data文件中,使用iccr工具解析、合并和生成报告。
代码覆盖率指令主要包括编译、运行和生成覆盖率报告三个部分,指令结构大体同功能覆盖率。
为了工具的统一性和方便界面提取,先做如下规定:
➢覆盖率数据库文件夹均放在CovData目录下,ncsim生成的放入ncsim子目录、vcs 生成的放入vcs子目录。
➢覆盖率报告均放在CovReport目录下,ncsim生成的放入ncsim子目录、vcs生成的放入vcs子目录。
➢每条用例都生成独自的同用例名的覆盖率数据库和覆盖率报告文件夹。
➢最后生成总的覆盖率数据库和覆盖率报告文件夹,名称为total。
文档指令描述中,{TC_NAME}表示匹配用例名。
1、vcs仿真环境
1)样例
rm -r simv* CovData/vcs/* FcovReport/vcs/* CovReport/vcs/*
vcs -lca +v2k -sverilog -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_1.cm +define+marco=VCS+ test_1.sv
./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_1.cm +ntb_random_seed=666666 2>&1 |tee log/vcs/test_1.log
vcs -lca +v2k -sverilog -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_2.cm +define+marco=VCS+ test_2.sv
./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_2.cm +ntb_random_seed=888888 2>&1 |tee log/vcs/test_2.log
vcs -lca +v2k -sverilog -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_3.cm +define+marco=VCS+ test_3.sv
./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/test_3.cm +ntb_random_seed=555555 2>&1 |tee log/vcs/test_3.log
urg -dir CovData/vcs/test_1.vdb -metric group -report FcovReport/vcs/test_1 -format text urg -dir CovData/vcs/test_2.vdb -metric group -report FcovReport/vcs/test_2 -format text urg -dir CovData/vcs/test_3.vdb -metric group -report FcovReport/vcs/test_3 -format text urg -dir CovData/vcs/*.vdb -metric group -report FcovReport/vcs/total -format text
urg -dir CovData/vcs/test_1.cm -metric line+cond+fsm+tgl -report CovReport/vcs/test_1 -format text
urg -dir CovData/vcs/test_2.cm -metric line+cond+fsm+tgl -report CovReport/vcs/test_2 -format text
urg -dir CovData/vcs/test_3.cm -metric line+cond+fsm+tgl -report CovReport/vcs/test_3 -format text
urg -dir CovData/vcs/*.cm -metric line+cond+fsm+tgl -report CovReport/vcs/total -format
text
2)指令说明
(1)编译
-lca:增加LCA的支持,vcs0812及以后的版本需要,此前的版本不需要。
-cm line+cond+fsm+tgl:增加编译期添加行覆盖率、条件覆盖率、状态机覆盖率、翻转覆盖率信息。
-cm_dir CovData/vcs/{TC_NAME}.cm:将编译期生成的覆盖率信息(不包括功能覆盖率)放到CovData/vcs目录中,若目录不存在,将自动创建。
生成的代码覆盖率数据库文件夹以cm后缀,名称要求同用例名,例:test_1.cm。
注:在vcs仿真器下,代码覆盖率信息(行覆盖率、条件覆盖率、状态机覆盖率、翻转覆盖率)存放在cm后缀的数据库文件夹中;功能覆盖率和断言覆盖率存放在vdb后缀的数据库文件夹0中。
cm后缀的数据库的生成与编译和运行阶段都有关,vdb后缀的数据库的生成仅与运行阶段有关。
(2)运行
-cm line+cond+fsm+tgl:增加运行期添加行覆盖率、条件覆盖率、状态机覆盖率、翻转覆盖率信息。
-cm_dir CovData/vcs/{TC_NAME}.cm:将运行期生成的覆盖率数据库放到CovData/vcs 目录中,若目录不存在,将自动创建。
代码覆盖率信息将写入以cm后缀的数据库文件夹中,生成的功能覆盖率数据库文件夹以vdb后缀,名称要求同用例名,例:test_1.vdb。
注:在运行期中,-cm_dir命令只能指定代码覆盖率信息存放的数据库文件夹,而以功能覆盖率信息存放的数据库文件夹是不能指定后缀的,且存放路径同代码覆盖率数据库文件夹,因此虽然指定了cm后缀,但生成的功能覆盖率数据库文件夹仍以.vdb后缀。
(3)生成覆盖率报告
urg -dir CovData/vcs/{TC_NAME}.cm -metric line+cond+fsm+tgl -report CovReport/vcs/{TC_NAME} -format text:用于生成各个用例的代码覆盖率报告。
urg -dir CovData/vcs/*.cm -metric line+cond+fsm+tgl -report CovReport/vcs/total -format text:用于生成总的代码覆盖率报告。
其中:-dir用于读入指定目录下指定覆盖率数据库XXX.cm文件夹,通配符* 表示读入指定目录下所有覆盖率数据库文件夹。
-metric用于指定输出覆盖率类型,line表示行覆盖率、cond表示条件覆盖率、fsm 表示状态机覆盖率,tgl表示跳转覆盖率。
这里必须和仿真环节相对应,否则没有该类型的覆盖率信息,urg工具会报错。
-report用于指定输出覆盖率报告的路径,每个用例的代码覆盖率报告要求分别输出到同用例名CovReport/vcs/{TC_NAME}的目录下,总的代码覆盖率报告要求输出到CovReport/vcs/total的目录下。
若指定的目录不存在,将自动创建。
-format用于指定输出报告的格式,text表示输出文本格式,不指定则输出html 格式。
注:由于指定了其他的覆盖率类型,因此此时在输出功能覆盖率报告时需要添加-metric group。
否则不能得到功能覆盖率的报告。
2、ncsim指令介绍
1)样例
cov.cmd(ICCR脚本文件)
<test_1>
set TC_NAME test_1
</test_1>
<test_2>
set TC_NAME test_2
</test_2>
<test_3>
set TC_NAME test_3
</test_3>
<total>
set TC_NAME total
set_dut_modules test DUV_TEST
merge CovData/ncsim/* -output total
</total>
sh mkdir -p FcovReport/ncsim/$TC_NAME
sh mkdir -p CovReport/ncsim/$TC_NAME
load_test CovData/ncsim/$TC_NAME
<summary>
<code>
report_summary -module -best DUV_TEST > CovReport/ncsim/$TC_NAME/dashboard.txt </code>
<func>
report_summary -d -instance -cgopt test > FcovReport/ncsim/$TC_NAME/dashboard.txt </func>
</summary>
<detail>
<code>
report_detail -both -module -best DUV_TEST > CovReport/ncsim/$TC_NAME/modinfo.txt </code>
<func>
report_detail -both -d -instance -cgopt test > FcovReport/ncsim/$TC_NAME/grpinfo.txt
</func>
</detail>
rm -r irun* iccr* CovData/ncsim/* FcovReport/ncsim/* CovReport/ncsim/* IN*
mkdir FcovReport/ncsim
irun -sv -svseed 666666 -covoverwrite test_1.sv -coverage a -covwork CovData -covdesign ncsim -covtest test_1
iccr -keywords+summary+detail+code+func+test_1 cov.cmd
irun -sv -svseed 888888 -covoverwrite test_2.sv -coverage a -covwork CovData -covdesign ncsim -covtest test_2
iccr -keywords+summary+detail+code+func+test_2 cov.cmd
irun -sv -svseed 555555 -covoverwrite test_3.sv -coverage a -covwork CovData -covdesign
ncsim -covtest test_3
iccr -keywords+summary+detail+code+func+test_3 cov.cmd
iccr -keywords+summary+detail+func+total cov.cmd
iccr -keywords+summary+detail+code+total cov.cmd
2)指令说明
(1)编译
irun指令将编译和运行集成,因此对添加代码覆盖率没额外需求。
(2)运行
-coverage a:收集覆盖率选项,a表示所有的覆盖率,b表示行覆盖率,e表示条件覆盖率,f表示状态机覆盖率,t表示翻转覆盖率,u表示基于SV的功能覆盖率。
-covoverwrite:再次运行时可覆盖已生成的覆盖率数据库,不加则不能覆盖。
-covwork:指定生成的cov_work目录,要求指定为CovData目录。
-covdesign:指定成生的design目录,要求指定为ncsim目录。
-covtest:指定生成的test目录,要求指定为{TC_NAME}目录,用于存放覆盖率数据库icc.data。
注:ncsim仿真器下,所有的覆盖率信息都存放在icc.data库中,与vcs的分数据库文件夹存放有所不同。
(3)生成覆盖率报告
-keywords <+关键字><+关键字>…<+关键字> 脚本:用命令行的方式启动ICCR,关键字的功能在脚本中描述。
ICCR生成覆盖率报告的流程为:合并覆盖率数据库(仅用于输出总覆盖率报告)=> 读覆盖率数据库=> 输出覆盖报告(概要报告或者详细报告)。
cov.cmd脚本说明:
1)<关键字>和</关键字>中间描述在-keywords中添加该关键字将执行的指令。
注意,
一条指令只能在一行中描述,<关键字>和</关键字>也必须分列一行。
2)在-keywords中添加的关键字顺序和关键字所对应的指令执行的顺序无关。
3)每一条用例必须对应一套<TC_NAME>和</TC_NAME>,在该套关键字描述内将给
通配符$TC_NAME赋值为用例名,如:set TC_NAME {TC_NAME}。
用于在每次
运行用例时在-keywords中添加用例名使每次运行只输出以该条用例名命名的覆盖
率报告文件,以方便界面处理。
4)需在脚本中添加<total>和</total>的关键字套,用于输出总的覆盖率报告。
其中的
指令包括:
set:指定通配符为total;
set_dut_modules:指定rtl代码的顶层模块名如DUV_TEST为了合并代码覆盖率,指定用例模块名如test为了合并功能覆盖率,不指定则合并不成功,可以同时指定多个。
merge:合并覆盖率数据库,CovData/ncsim/* 表示合并CovData/ncsim/目录下的所有覆盖率数据库文件,-output total表示输出合并后的覆盖率数据库至
CovData/ncsim/total目录下。
5)sh mkdir:在配置好通配名或者合并好覆盖率数据库后需要创建覆盖率报告目录,
代码覆盖率目录按照要求为CovReport/ncsim/{TC_NAME}|total,功能覆盖率目录
按照要求为FcovReport/ncsim/{TC_NAME}|total。
6)load_test:读指定目录下覆盖率数据库,目录为CovData/ncsim/{TC_NAME}|total。
7)report_summary:输出覆盖率概要信息。
-module表示为基于模块的;-b表示输出
报告为行覆盖率,-e表示输出报告为条件覆盖率,-s表示为状态机覆盖率,-t表示
为翻转覆盖率,可以同时指定多个;DUV_TEST为rtl的顶层模块名;> 表示将覆
盖率报告重镜象至指定文件中,按照要求每条用例或总代码覆盖率概要信息必须
保存在CovReport/ncsim/{TC_NAME}|total/dashboard.txt文件中。
这些参数都是必
须的,否则输出报告有误。
8)report_detail:输出覆盖率详细信息。
-module表示为基于模块的;-b表示输出报告
为行覆盖率,-e表示输出报告为条件覆盖率,-s表示为状态机覆盖率,-t表示为翻
转覆盖率,可以同时指定多个;DUV_TEST为rtl的顶层模块名;> 表示将覆盖率
报告重镜象至指定文件中,按照要求每条用例或总代码覆盖率概要信息必须保存
在CovReport/ncsim/{TC_NAME}|total/modinfo.txt文件中。
这些参数都是必须的,
否则输出报告有误。
以上第5) 至8) 条每次运行时都必须执行。
通过配置关键字(用例名)的方式,每运行一条用例时都启动一次ICCR输出一份该用例的覆盖率报告,所有用例运行完后再启动一次ICCR输出一份总的覆盖率报告。
二、输出分析
代码覆盖率输出有两种方式,图形工具和文本输出。
1、图形工具
vcs仿真器下用的是cmView,在命令行中键入cmView即可开启。
开启cmView后点击design,选择/CovData/vcs/{TC_NAME}|total.cm/db/verilog目录下的cm.decl_info打开项目。
然后再选择Line、Toggle、Cond、FSM、Branch中的一个打开所需要查看的覆盖率信息,展开Module Hierarchy,选择到rtl顶层,点击左上角的Add添加覆盖率信息,选择/CovData/vcs/{TC_NAME}|total.cm/coverage/verilog/中的以相应后缀的覆盖率数据库(行覆盖率为line、条件覆盖率为cond、状态机覆盖率为fsm、翻转覆盖率为tgl),即可以显示覆
盖率信息概要,双击概要可以打开详细说明。
详细说明使用不在此介绍。
ncsim仿真器下用的是ICCR的图形界面,在命令行中键入iccr -GUI即可开启。
开启ICCR图形后点击File或者红圈标出的图标,选择/CovData/ncsim/{TC_NAME}|total目录打开项目。
ICCR图形界面可以同时打开多个项目,在Test下拉菜单中选择显示。
详细信息可以在子页面中显示,也不在此介绍。
2、文本输出
vcs和ncsim两种仿真器下都可以输出文本格式的代码覆盖率报告,概要报告和详细报告分别存放在CovReport/vcs|ncsim/{TC_NAME}|total/bashboard.txt和modinfo.txt中。
详细报告建议用界面调用工具查看,在此不介绍。
vcs仿真器下的代码覆盖率概要报告:
ncsim仿真器下的代码覆盖率概要报告:。