Bootstrap

vcs coverage收集

目录结构

 当在vcs编译命令后加上 -cm 选项时,vcs就会在产生simv可执行文件之后建立simv.vdb目录。vcs编译过程中会将design的数据文件放到snps/coverage/db/design目录;在仿真过程中,vcs会将每个test case产生的coverage 结果放到 snps/coverage/db/testdata目录。
 关于simv.vdb:

  • 可通过在vcs命令后加上 -o mysimv来改变名字成 mysimv.vdb, 绿色名字由用户自己定。
  • 可通过在vcs命令后加上 -cm_dir /a/b/mycm 来改变vdb的名字和path,即产生/a/b/mycm.vdb。-cm_dir的优先级比-o 高。

 关于每个test仿真的中间数据文件:

  • 对于每个test的每次仿真,默认会在snps/coverage/db/testdata目录生成 line.verilog.data.xml. fsm.verilog.data.xml. cond.verilog.data.xml tgl.verilog.data.xml branch.verilog.data.xml。故为了保存每次test的每次仿真coverage结果,需要通过在vcs命令之后加上 -cm_name xxx 来为每次仿真创建一个snps/coverage/db/xxx目录用于存储每次coverage数据。推荐为同一个test的每次仿真加上一个带ID标志的cm_name
  • 如果在./simv之后加上-cm_name xxx,新的仿真数据会替换掉之前xxx目录的数据。
#方案1:每个test的每次仿真都有不同的目录记录coverage数据文件;在simv.vdb/snps/coverage/db/testdata下产生 test1  test2 目录
vcs -cm coverge_arguments  additionnal_options_and_source_files
simv -cm_name test1 -cm coverage_arguments additional_runtime_options
simv -cm_name test2 -cm coverage_arguments additional_runtime_options
#方案2:每个test的每次仿真使用同一个目录记录coverage数据文件;在outsimv.vdb/snps/coverage/db/testdata下产生test1 test2 目录
vcs -cm_dir /a/b/outsimv.vdb -cm coverage_arguments additional_options_and_source_files
simv -cm_name test1 -cm coverage_arguments addtional_runtime_options

vcs 收集coverage的默认配置

 默认情况下,vcs不收集library cell。可通过在vcs命令后添加 -cm_libs yv+celldefine 使能vcs收集lib module的coverage收集

  • flist中 使用 -v /b/c/d.v,即d.v中所有的module都不收集coverage。
  • 使用 -y /a/b/c_lib,即/a/b/c_lib下文件中的所有module都不收集
  • 文件中使用celldefine包含的module

vcs 对systemverilog语法的使用限制

 vcs 并不对所有的systemverilog construct都支持coverage收集。请参考 coverage technology reference manual 章节systemverilog support for code coverage。

vcs coverage options

 有些option既是编译option也是仿真Option。

编译option

  • -cm line|cond|fsm|tgl|branch|assert ,当要收集多个类型的coverage时,使用+。soc 级推荐使用 -cm line+cond+fsm+tgl+branch+assert
  • -cg_coverage_control=value,控制是否收集coverage。value=0不收集,value=1收集。系统函数$cg_coverage_control的优先级高于该命令行option。
  • -cm_assert_hier filename 只有-cm assert存在的情况下才生效,只对filename中指定的module或者module instance进行assertion 控制。该option在有混合语言仿真时失效。
#filename中内容
-assert <assertion_name> #不收集该assertion
-assert <assertion_hierachical_name>#不收集指定层次的assertion
-assert A*  #不收集assertion name匹配A*的所有assertion
+assert <assertion_name> #收集某个assertion
+tree <assertion_hierachical_name> #收集某个hierarchical下所有的assertion coverage
-tree <assertion_hierachical_name> #不收集某个hierarchical下所有的assertion coverage
+module <module_name> #收集某个module的所有assertion
  • -assert hier=<hier_filename> 用于使能或者关闭某些assertion的coverage收集。
  • -cm_cond basic|std|full|allops|event|for|tf|obs
  • -cm_count 让urg统计tgl的0->1 1->0数量。
  • -cm_dir directory_path_name 这是一个编译/仿真选项。
  • -cm_exclude_macrofile filename 不收集宏的coverage。-cm_ignore_pragma 和该命令会冲突,当使用-cm_ignore_pragma时,-cm_exclude_macrofile会自动失效。
  • -cm_fsmcfg filename
  • -cm_fsmopt allowTmp|excludeCalcFsms|report2StateFsms|reportvalues|reportWait|reportXassign|stopSelectInPackedMDA|…
  • -cm_fsmresetfilter filename
  • -cm_hier filename
  • -cm_ignorepragmas
  • -cm_libs yv|celldefine
  • -cm_line constassign
  • -cm_name name
  • -cm_report unencrypted_hierachicals 使能对加密设计的coverage
  • -cm_report no initial 不收集initial block的coverage
  • -cm_tgl mda
  • -cm_tgl signalsort
  • -power=coverage 需要使用urg -lpcov来查看low power coverage。
  • -power=dump_hvp
  • -cm_constfile filename 将常量信号放到一个文件中。只影响coverage数据分析。
  • -cm_constfile_cont_on_error 当-cm_constfile 的filename中出现错误时,会停止编译并报错。
  • -cm_noconst 使能常量分析并从coverage监控中去除常量信号的coverage数据。
  • -cm_seqnoconst 对-cm_noconst的加强分析。
  • -diag noconst 当加上 -cm_noconst 和 -cm_seqnoconst时,需要加上 -diag noconst以产生 constfile.txt文件用于记录分析的常量。

仿真option

  • -cm_dir directory_path_name
  • -cm_glitch period 让vcs不收集glitch造成的coverage数据
  • -cm_log filename 记录检测到的coverage数据。
  • -cm_name
  • -cm_start/-cm_stop N 指定coverage收集的起始时刻和结束时刻。
  • -cm_starts 这是一个默认开启的选项。指定vcs在仿真开始即收集coverage数据。可通过 -cm_starts none来关闭。
  • -covg_cont_on_error 当仿真命中了一个illegal function coverage bin时,停止仿真。
  • -covg_disable_cg 关闭所有的功能覆盖率统计。
  • -covg_dump_range 使能将bins的定义加载到coverage数据中。这样urg就可以通过 - group show_bins_values来查看。
  • -covg_no_guad_in_shape

拓展option

  • -cm_tgl mda|fullintf|structarr|
  • 系统函数$cm_coverage可以动态使能和关闭coverage数据收集。
  • -cm_tgl portsonly 只收集ports的coverage。
  • -cm_hier file 来配置coverage收集。(+/- module/tree/node/instance/moduletree/file/filelist )可以使用通配符*或者?
  • -cm_hier_enable_moduletree_vhdl
  • -cm_report unencrypted_hierachies 使能对加密设计的coverage监控
#只收集port
begin tgl(portsonly)
   +module mid
end
#收集line+ports的tgl+cond
begin line+tgl(portsonly)+cond
  +module mid
end

urg命令option

 使用urg命令合并多个vdb数据。

  • -dir 指定原始vdb目录
  • -format test|both
  • -metric line+cond+tgl+fsm+branch+assert
  • -elfile
  • -elfilist
  • -excl_bypass_checks
  • -excl_strict
  • -dump full_exclusions
  • -dbname
  • -noreport
  • -plan
  • -grade quick|index|cost|score|greedy|list
  • -parallel <machine_file>
  • -parallel -maxjobs
  • -mapfile <file_name>
  • -map <module_name>
  • -show test
;