簡介
可通過 -cm_hier 配置文件來控制覆蓋率收集范圍
Coverage Metrics覆蓋指標:
-cm
vcs使用編譯選項 -cm (line+cond+tgl)生成simv.vdb文件夾,仿真選項中使用-cm (line+cond+tgl),會在simv.vdb/snps/coverage/db/testdata/your_cm_name下產生覆蓋率xml文件;
-cm_name
編譯選項or仿真選項 -cm_name your_cm_name 將會生成覆蓋率文件:simv.vdb/snps/coverage/db/testdata/your_cm_name;
-cm_dir
默認情況下,vcs會編譯出可執行文件simv,同時,會生成simv.vdb,如果使用了編譯選項-o simv_name,可執行文件會更名為simv_name,而vdb文件的名字會變成simv_name.vdb;
編譯選項 -cm_dir simv_path_name,可以獨立指定vdb的路徑和文件名。vcs -cm tgl -cm_dir /net/design1/mycm source.v,會在/net/design1下生成mycm.vdb;
如果在編譯選項中指定了cm_dir,則默認此simv的所有coverage數據會產生在其指定路徑;
仿真選項-cm_dir simv_path_name,僅指定本次仿真的coverage數據存放路徑;
-cm_dir 優先級大於-o;
在使用urg時,用-dir 載入各個vdb文件夾:urg -full64 -dir /net/design1/my_cov_info -dir /net/design1/int_dat_files;
merge
在一次編譯多次仿真時,可在仿真選項中使用cm_dir 或 cm_name 來改變存放覆蓋率文件的名稱和位置,以避免各個仿真的覆蓋率文件被覆蓋;
urg -full64 -dir simv.vdb simv1.vdb simv2.vdb -dbname mergedir/merged 會將所有覆蓋率xml文件合並在mergedir.vdb/snps/coverage/db/testdata/merged下,並產生報告文件urgReport;
VCS相關命令
常用編譯選項:
-cm
可選擇line | cond | fsm | tgl | branch | assert,如-cm line+cond+tgl
-cm_dir
-cm_name
-cm_hier filename
控制覆蓋率收集范圍
-cm_tgl mda
使能多維數組的toggle coverage 收集
常用仿真選項:
-cm
-cm_dir
-cm_name
-covg_cont_on_error
當仿真運行到 illegal functional coverage bin,將會繼續運行
-covg_disable_cg
關閉所有的功能覆蓋率covergroups
-covg_dump_range
保存bin的定義,配合urg的-group show_bin_values,將會把bin的定義生成到report中
實用的選項:
-covg_disable_cg編譯選項、仿真選項
若作為編譯選項,則關閉covergroup並忽略其實例相關的語句;
若作為仿真選項,則僅關閉covergroup;
可用於分析function coverage帶來的性能降低;
-cg_coverage_control=0
從0ns關閉function coverage,但可以使用$cg_coverage_control系統函數再次打開;
-cm_glitch period 編譯選項、仿真選項
用於避免毛刺帶來的多余coverage,如–cm_glitch 0可過濾delta cycle 毛刺。period的單位是timeunit;
作為編譯選項時,可過濾所有類型的覆蓋率;
作為仿真選項時,僅過濾toggle coverage;
系統函數:
系統函數可以在運行期動態查詢或修改覆蓋率選項;
系統函數需要編譯選項和仿真選項 -cm;
$cm_coverage(mode,type,include_hierarchy,"module_or_instance",...)
查詢正在收集的覆蓋率類型,使能或關閉某些覆蓋率類型;
$cm_get_coverage and $cm_get_limit
使用URG及其參數:
利用urg產生覆蓋率報告,如:urg -full64 -dir simv.vdb -report both & 將在both文件夾產生report;
-dir directory_name
用於處理的原數據庫,可跟多個vdb文件,空格隔開;
-f file_name
用於處理的原數據庫的filelist;
-dbname dirname/testname
merge覆蓋率將其生成在dianame.vdb文件夾下,若無testname,則testname默認為test;
-noreport
不產生report,常配合 -dbname 使用
-elfile <file>
urg -elfile filename.el,用於加載el文件;
-elfilelist <filelist>
用法同verilog的filelist;
-format text
僅生成text報告;
-format both
生成test和html報告;
-hier filename
用法同vcs命令選項;
-line nocasedef
不計算default case的line coverage;
-show brief
report中僅顯示未覆蓋的部分;
-show tests
顯示是哪些testcase覆蓋到了此處,可搭配-show maxtests N(默認3)使用;如果是merge后的vdb文件,那么則無法看到具體的testcase;
用DVE查看coverage:
-使用 dve -full64 -cov -dir simv.vdb& 打開圖形界面;
生成驗證計划
hvp genxls -lca -plan ei_SoC_planfile.hvp
一個簡單的ei_SoC_planfile.hvp文件如下

生成的驗證計划

反標覆蓋率
hvp annotate -lca -plan ../plan/ut_test_plan.xml -dir ./simv.vdb -plan_out ../plan/ut_test_plan_out.xml -hvm_source_missing

參考原文鏈接:https://blog.csdn.net/scuGordenZhang/article/details/107058172
