一:类型
line(行)覆盖率,Toggle(跳变)覆盖率,condition(条件)覆盖率,FSM(状态机)覆盖率,path(路径)覆盖率
二:覆盖率
1:行覆盖率
一般要求100%,例如缺else,default
例子如下,缺少else,default;但这不一定是错误,可能故意为之;二次检查
2:条件覆盖率
代码中有if语句,实际可能出现某种情况,但程序没有覆盖,则报告
3:Toggle coverage
信号是否有0->1,1->0的跳变;x->1,x->0不会报告
4:FSM覆盖率
报告state1-state2没有转换
5:path覆盖率
路径是否覆盖
三:什么时候使用覆盖率
1:behavior code
line,condition,path,FSM
2:RTL code
line, condition,path,Toggle(not command),FSM
3:Gate-level code
Toggle
四:覆盖率编译执行开关
1:compile
#vcs -cm<coverage_type> <other option>;例如 -cm cond+line+tgl+fsm+path
coverage_type:
line,tgl,cond,fsm,path
2:simulation
#./simv -cm<coverage_type> <other switches>
-cm_name filename: 覆盖率文件的名字
-cm_dir directory_of_file:覆盖率文件所在文件;后缀为vdb
-cm_log:覆盖率log文件
3:dve
dve -covdir *.vdb & 即可看覆盖率文件
在dve界面,file-generate URG report-Report Format-可选中网页或者txt方式阅读覆盖率文件
4:不想报告某段code或者文件的覆盖率(比如一些在仿真时辅助的行为级代码,后仿真时会去掉)
针对某段code屏蔽覆盖率报告但不屏蔽综合://VCS coverage off
//VCS coverage on
针对某段code屏蔽覆盖率报告且屏蔽综合 ://synopsys translate_off
//synopsys translate_on
针对某个文件屏蔽覆盖率 :
在compile开关中添加-cm_hier<name_of_file>。-cm_hier ./filename 先在当前文件夹下新建一个文件,用gvim打开这个文件,输入-module fs,则在报告中屏蔽这个module的报告;输入 +module fs,则报告里只有fs的覆盖率;输入-file fs.v,则在报告里屏蔽fs.v文件;输入+file fs.v,则只有文件fs的报告