urg工具使用

urg 是synopsys公司推出的一个用于合并和处理仿真覆盖率数据的工具。下面为你介绍 urg 的常见使用方式:

基本功能概述

urg 工具主要用于合并多个覆盖率数据库文件,生成综合的覆盖率报告。它支持多种覆盖率类型,像代码覆盖率(行覆盖率、分支覆盖率等)、功能覆盖率等。

常用选项及示例

合并覆盖率数据库

运用 -dir 选项来指定包含覆盖率数据库文件的目录,urg 会合并这些数据库。

urg -dir simv.vdb

此命令会合并 simv.vdb 目录下的所有覆盖率数据库文件。
PS:我感觉这个指令怪怪的,urg指令的目的是合并多个.vdb文件,对一个.vdb文件操作似乎没啥意义吧

指定输出目录

借助 -report 选项来指定生成的覆盖率报告的输出目录。

urg -dir simv.vdb -report cov_report
  • 这个命令会把合并后的覆盖率报告生成到 cov_report 目录中。
  • 不带-report选项时,默认也会生产覆盖率报告,默认报名目录名为urgReport,如想关闭报告生产,需带上-noreport参数。

生成不同类型的覆盖率报告

可以使用 -format 选项指定报告的格式,例如 HTML、Text 等。

urg -dir simv.vdb -report cov_report -format html

该命令会生成 HTML 格式的覆盖率报告,便于在浏览器中查看。

包含特定的覆盖率类型

使用 -type 选项指定要包含的覆盖率类型,例如 line(行覆盖率)、branch(分支覆盖率)等。

urg -dir simv.vdb -report cov_report -type line,branch

此命令仅会包含行覆盖率和分支覆盖率的数据。

查看不同用例对覆盖率的提升度

  • 背景:我想知道该测试用例对于提升覆盖率有没有帮助,帮助提升在哪了,或者我想把对覆盖率提升没有帮助的测试用例删除,想实现上述目标需要确切的知道覆盖率信息是由哪个测试用例带来的。
    可以使用如下命令:
urg -dir xxx_compile_path/xxx.vdb \  
-dir xxx_compile_path/xxx_testcase_path1/xxx.vdb \  
-dir xxx_compile_path/xxx_testcase_path2/xxx.vdb \  
...  -dir xxx_compile_path/xxx_testcase_pathN/xxx.vdb \  
-dbname simv_merge.vdb \  
-show tests

然后使用命令:

urg -dir simv_merge.vdb -grade testfile

此时会在当前目录的urgReport下产生一个gradedtests.txt文件,来告诉你测试用例对提升覆盖率的贡献排名,这样你就可以更方便的管理你写的测试用例。
然后使用如下命令打开Verid来查看:

verdi -cov -covdir simv_merge.vd

然后选中你想看的覆盖率类型,包括line/toggle/FSM/Condition/Branch/Assert,然后选中想看的目标,比如某行代码或者某个信号,然后右键选择show associated tests,即可在左下角的Test List窗口查看到是哪个测试用例对其进行的覆盖。
亲测可用:

完整示例

假设你有多个仿真运行生成的覆盖率数据库文件,存放在 simv1.vdb、simv2.vdb 和 simv3.vdb 目录中,你可以按如下步骤合并这些数据库并生成 HTML 格式的覆盖率报告:

urg -dir simv1.vdb simv2.vdb simv3.vdb -report cov_report -format html

查看报告

生成 HTML 格式的报告后,你可以在浏览器中打开 cov_report/index.html 文件来查看覆盖率报告。

更多帮助信息

若你想了解 urg 工具的更多选项和详细使用说明,可以使用 -help 选项:

urg -help

更多参数

以下参数由AI生成,准确性未知,仅供参考,请以urg -help给出的为准。

实战运用

如果要合并一次回归仿真的覆盖率,需要使用如下命令进行合并:

urg -dir xxx_compile_path/xxx.vdb \  
-dir xxx_compile_path/xxx_testcase_path1/xxx.vdb \  
-dir xxx_compile_path/xxx_testcase_path2/xxx.vdb \  
...  
-dir xxx_compile_path/xxx_testcase_pathN/xxx.vdb \  
-dbname simv_merge.vdb

可以看到这里将一次回归中的多个仿真用例下的xxx.vdb进行了合并,最终得到了合并后的覆盖率信息simv_merge.vdb。
如果不想产生urgReport的话,可以加上-noreport选项。
如果是合并两次回归之后的simv_merge.vdb,则可以使用如下命令进行:

urg -dir xxx_path1/xxx_simv_merge1.vdb \  
-dir xxx_path2/xxx_simv_merge2.vdb \  
-dbname simv_merge.vdb

如果vdb文件很多的话,也可以通过指定filelist来合并:

urg -f xxx_path/xxx_vdb.fl \ 
 -dbname simv_merge.vdb

有时候我们需要把两个不同的仿真环境的覆盖率进行合并,而且只是将其中一个环境中的某个模块的覆盖率合并到另一个,比如常见的模块级IP验证的覆盖率合并到SOC环境的整体覆盖率中,如图:

把右边的md3模块的覆盖率合并到左边的在mod1中例化的md3a和md3b模块中,可以参考使用如下命令:

urg -dir top1.vdb tbblk.vdb -map md3

这样就把tbblk模块中例化的md3子模块的覆盖率合并到左边的top1模块下的覆盖率中去了。

参考资料

https://mp.weixin.qq.com/s/tNDVmgJBlmKwdrVNr6iwwQ

posted @ 2025-04-06 13:37  MKYC  阅读(735)  评论(0)    收藏  举报