merge coverage --- vdb merge
前言:目前在数字电路验证中,主要还是coverage驱动型,就是说覆盖率是衡量验证工作的一个重要指标。但是在仿真过程中,会分成多个build或者说是conf,每个build下面的RTL可能是不同的。还有一种场景是:需要把IP收到的vdb同IT Level收到的vdb merge到一起,那这个过程怎么实现呢?本文将介绍一些VCS中覆盖率合并的命令,以及脚本化方法。
一、記錄一些常用的VCS Command
1.1、首先注意,需要在run simulation前(在build中)加VCS Option:
- -cm line+tgl+cond+fsm+assert+branch -cm_line contassign -cm_cond full+tf+for+anywidth
1.2、merge coverage:
urg -full64 -metric line+tgl+cond+fsm+assert+branch -warn none -dbname <merge_coverage_name>.vdb \
-dir ${vdb_path}/simv.vdb \
-elfile ${path}/${el_file_name.el}
- 注意:其中-dir之後的第一個vdb數據會被認為是base data,如果產生其他vdb的RTL與base不同,將不能被Merge進來
1.3、如果是把多條simv.vdb Merge在一起,可以用如下Command:
- 對於-warn none的Option需要謹慎,一般地還是不要加,把Warning信息報出來
- -metric -metric line+tgl+cond+fsm+assert+branch也可以不用加,黨要提取特定的Coverage數據時再指定
urg -full64 -metric line+tgl+cond+fsm+assert+branch -warn none -dbname ${merge_cov_name}.vdb \
-report urgReport_<data> -dir ${path_0}/simv.vdb \
${path_1}/simv.vdb \
${path_3}/simv.vdb \
${path_4}/simv.vdb \
${path_3}/simv.vdb \
${path_3}/simv.vdb \
-elfile ${el_file.el} > merge_log.out
1.4、查看coverage:
- verdi -cov -covdir <merge_coverage_name>.vdb &
1.5、其他用法
- 如果是用urg,則使用如下command:urg -dir simv.vdb &
- VCS收Coverage的command:-cm line+tgl+cond+fsm+assert+branch -cm_line contassign -cm_cond full+tf_foranywidth
- 如果修改了covergroup的name或者是採樣信號的定義,可以加如下option進行coverage merge:-flex_merge drop或者 -flex_merge reference或-flex_merge union
- 如果是看網頁版(擴展名為.html),則使用如下command打開: firefox ${sim}/urgReport/dashboard.html
1.6、如果新的simulation中,在covergroup中增加了coverpoint,并希望把新的數據與舊的merge到一起:
- urg -full64 -flex_merge union -dbname <merge_coverage_name>.vdb -dir simv.vdb &
1.7、如果新的simulation中,在covergroup中增加了coverpoint,并不想把新的數據與舊的merge到一起:
- urg -full64 -flex_merge drop -dbname <merge_coverage_name>.vdb -dir simv.vdb &
二、Coverage Result Reporting Utilities
2.1、VCS writes coverage data to a binary database file
-
The database directory is named simv.vdb
2.2、Convert to HTML:
-
urg –dir directory
- example: urg –dir simv.vdb
2.3、Convert to Text:
-
urg –dir directory -format text
- example: urg –dir simv.vdb –format text
2.4、上述改變Format的方法主要用於分析各種Case對Coverage的貢獻,以加快驗證工作的收斂。
三、注意事項
- 如果Hierarchy或者covergroup有修改,在Merge VDB的時候需要刪除之前的VDB數據。
- 如果在例化DUT的時候需要傳遞參數進去,導致生成的電路不一致,需要分別Merge,應為不同Hierarchy的module的VDB不能夠Merge在一起。
- 建議:在T4階段收Coverage的時候,把每天的數據Merge到一起,然後再往總的vdb裡面Merge,以免某一天的數據出錯,導致整個vdb file都不能使用。
- 建議Regression時每天新建一個workspace,用Linux crontab自動執行。否則,假如某天的VDB Data出錯,將無法Merge,導致的後果就是重新收Coverage