代码覆盖率说明个人总结
代码覆盖率说明个人总
结
This model paper was revised by LINDA on December 15, 2012.
代码覆盖率说明
一、指令介绍
代码覆盖率分为行覆盖率、条件覆盖率、状态机覆盖率和翻转覆盖率。在vcs仿真工具下覆盖率信息存储在.cm文件中,使用urg工具解析、合并和生成报告;在ncsim仿真工具下覆盖率信息存储在文件中,使用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/
+define+marco=VCS+
./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/ +ntb_random_seed=666666 2>&1 |tee log/vcs/
vcs -lca +v2k -sverilog -cm line+cond+fsm+tgl -cm_dir CovData/vcs/
+define+marco=VCS+
./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/ +ntb_random_seed=888888 2>&1 |tee log/vcs/
vcs -lca +v2k -sverilog -cm line+cond+fsm+tgl -cm_dir CovData/vcs/
+define+marco=VCS+
./simv -cm line+cond+fsm+tgl -cm_dir CovData/vcs/ +ntb_random_seed=555555 2>&1 |tee log/vcs/
urg -dir CovData/vcs/ -metric group -report FcovReport/vcs/test_1 -format text
urg -dir CovData/vcs/ -metric group -report FcovReport/vcs/test_2 -format text
urg -dir CovData/vcs/ -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/ -metric line+cond+fsm+tgl -report
CovReport/vcs/test_1 -format text
urg -dir CovData/vcs/ -metric line+cond+fsm+tgl -report
CovReport/vcs/test_2 -format text
urg -dir CovData/vcs/ -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后缀,名称要求同用例名,例:。
注:在vcs仿真器下,代码覆盖率信息(行覆盖率、条件覆盖率、状态机覆盖率、翻转覆盖率)存放在cm后缀的数据库文件夹中;功能覆盖率和断言覆盖率存放在vdb后缀的数据库文件夹0中。cm后缀的数据库的生成与编译和运行阶段都有关,vdb后缀的数据库的生成仅与运行阶段有关。
(2)运行
-cm line+cond+fsm+tgl:增加运行期添加行覆盖率、条件覆盖率、状态机覆盖率、翻转覆盖率信息。
-cm_dir CovData/vcs/{TC_NAME}.cm:将运行期生成的覆盖率数据库放到
CovData/vcs目录中,若目录不存在,将自动创建。代码覆盖率信息将写入以cm后缀的数据库文件夹中,生成的功能覆盖率数据库文件夹以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用于读入指定目录下指定覆盖率数据库文件夹,通配符 * 表示读入指定目录下所有覆盖率数据库文件夹。
-metric用于指定输出覆盖率类型,line表示行覆盖率、cond表示条件覆盖率、fsm表示状态机覆盖率,tgl表示跳转覆盖率。这里必须和仿真环节相对应,否则没有该类型的覆盖率信息,urg工具会报错。
-report用于指定输出覆盖率报告的路径,每个用例的代码覆盖率报告要求分别输出到同用例名CovReport/vcs/{TC_NAME}的目录下,总的代码覆盖率报告要求输出到CovReport/vcs/total的目录下。若指定的目录不存在,将自动创建。
-format用于指定输出报告的格式,text表示输出文本格式,不指定则输出html格式。
注:由于指定了其他的覆盖率类型,因此此时在输出功能覆盖率报告时需要添加-metric group。否则不能得到功能覆盖率的报告。
2、ncsim指令介绍
1)样例
(ICCR脚本文件)
set TC_NAME test_1
set TC_NAME test_2
set TC_NAME test_3
set TC_NAME total
set_dut_modules test DUV_TEST
merge CovData/ncsim/* -output total
sh mkdir -p FcovReport/ncsim/$TC_NAME sh mkdir -p CovReport/ncsim/$TC_NAME load_test CovData/ncsim/$TC_NAME
report_summary -module -best DUV_TEST > CovReport/ncsim/$TC_NAME/
report_summary -d -instance -cgopt test > FcovReport/ncsim/$TC_NAME/
report_detail -both -module -best DUV_TEST > CovReport/ncsim/$TC_NAME/
report_detail -both -d -instance -cgopt test > FcovReport/ncsim/$TC_NAME/
rm -r irun* iccr* CovData/ncsim/* FcovReport/ncsim/* CovReport/ncsim/* IN* mkdir FcovReport/ncsim
irun -sv -svseed 666666 -covoverwrite -coverage a -covwork CovData -covdesign ncsim -covtest test_1
iccr -keywords+summary+detail+code+func+test_1
irun -sv -svseed 888888 -covoverwrite -coverage a -covwork CovData -covdesign ncsim -covtest test_2
iccr -keywords+summary+detail+code+func+test_2
irun -sv -svseed 555555 -covoverwrite -coverage a -covwork CovData -covdesign ncsim -covtest test_3
iccr -keywords+summary+detail+code+func+test_3
iccr -keywords+summary+detail+func+total
iccr -keywords+summary+detail+code+total
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}目录,用于存放覆盖率数据库。
注:ncsim仿真器下,所有的覆盖率信息都存放在库中,与vcs的分数据库文件夹存放有所不同。
(3)生成覆盖率报告
-keywords <+关键字><+关键字>…<+关键字> 脚本:用命令行的方式启动ICCR,关键字的功能在脚本中描述。
ICCR生成覆盖率报告的流程为:合并覆盖率数据库(仅用于输出总覆盖率报告) => 读覆盖率数据库 => 输出覆盖报告(概要报告或者详细报告)。
脚本说明:
1)<关键字>和关键字>中间描述在-keywords中添加该关键字将执行的指令。注
意,一条指令只能在一行中描述,<关键字>和关键字>也必须分列一行。
2)在-keywords中添加的关键字顺序和关键字所对应的指令执行的顺序无关。
3)每一条用例必须对应一套
符$TC_NAME赋值为用例名,如:set TC_NAME {TC_NAME}。用于在每次运行用例
时在-keywords中添加用例名使每次运行只输出以该条用例名命名的覆盖率报告
文件,以方便界面处理。
4)需在脚本中添加
的指令包括:
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/文件中。这些参数都是必须的,否则输出报告有误。
8)report_detail:输出覆盖率详细信息。-module表示为基于模块的;-b表示输出
报告为行覆盖率,-e表示输出报告为条件覆盖率,-s表示为状态机覆盖率,-t
表示为翻转覆盖率,可以同时指定多个;DUV_TEST为rtl的顶层模块名;> 表示将覆盖率报告重镜象至指定文件中,按照要求每条用例或总代码覆盖率概要信息
必须保存在CovReport/ncsim/{TC_NAME}|total/文件中。这些参数都是必须的,否则输出报告有误。
以上第 5) 至 8) 条每次运行时都必须执行。
通过配置关键字(用例名)的方式,每运行一条用例时都启动一次ICCR输出一份该用例的覆盖率报告,所有用例运行完后再启动一次ICCR输出一份总的覆盖率报告。
二、输出分析
代码覆盖率输出有两种方式,图形工具和文本输出。
1、图形工具
vcs仿真器下用的是cmView,在命令行中键入cmView即可开启。开启cmView后点击design,选择/CovData/vcs/{TC_NAME}|db/verilog目录下的打开项目。
然后再选择Line、Toggle、Cond、FSM、Branch中的一个打开所需要查看的覆盖率信息,展开Module Hierarchy,选择到rtl顶层,点击左上角的Add添加覆盖率信息,选择/CovData/vcs/{TC_NAME}|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/和中。详细报告建议用界面调用工具查看,在此不介绍。
vcs仿真器下的代码覆盖率概要报告:
ncsim仿真器下的代码覆盖率概要报告: