VCS coverage覆盖率工具常用功能

目录

简介

Coverage Metrics覆盖指标:

merge

VCS相关命令

常用编译选项:

常用仿真选项:

系统函数:

使用URG及其参数:

用DVE查看coverage:


简介

可通过 -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& 打开图形界面;

-过滤可排除的覆盖率;

 

-将Exclude保存为el文件;

<think>好的,用户想了解如何在VCS中计算或展示代码覆盖率,特别是与group相关的部分。首先,我需要回忆一下VCS覆盖率功能VCS常用的仿真工具,支持代码覆盖率,包括语句覆盖、分支覆盖、条件覆盖等。用户提到的group可能指的是covergroup,这是SystemVerilog中的功能,用于功能覆盖率。但用户的问题是关于代码覆盖率的group,这可能是指代码覆盖的分组管理。 接下来,我需要查看提供的引用内容。引用[1]提到VCS作为覆盖率工具,使用covergroup和coverpoint。引用[3]讨论了代码覆盖率功能覆盖率的区别。引用[4]展示了覆盖组的参数化使用。但用户的问题更偏向于代码覆盖率,而covergroup属于功能覆盖率。这里可能存在用户对术语的混淆,需要澄清。 可能用户是想知道如何在VCS中管理代码覆盖率的分组,比如将不同模块的覆盖率分组显示。或者用户可能将功能覆盖组的配置与代码覆盖混淆。需要确认VCS中是否支持代码覆盖率的分组设置。 查找VCS文档,代码覆盖率通常按模块自动统计,但可以通过选项合并或分组。例如,使用-cm_dir指定目录,-cm_name设置测试名称,-cm_group进行分组。此外,urg工具生成报告时可以按组合并。需要说明具体步骤,如编译时的选项,仿真时的参数,以及生成报告的方法。 同时,需要区分代码覆盖率功能覆盖率。代码覆盖率是自动生成的,而功能覆盖率需要用户定义covergroup。用户可能想同时查看两种覆盖率,但问题集中在代码覆盖率的group支持。因此,回答应明确代码覆盖率的分组管理方法,可能涉及编译选项、仿真参数和报告生成工具urg的使用。 最后,确保回答结构清晰,分步骤说明,并引用提供的资料。例如,引用[1]提到VCS作为工具,引用[3]解释代码覆盖率功能覆盖率的区别。同时,生成相关问题,帮助用户深入理解。</think>### 如何在VCS中计算代码覆盖率并管理分组? 在VCS中计算代码覆盖率时,可以通过以下步骤实现分组管理和展示: --- #### **1. 代码覆盖率类型与编译选项** VCS支持多种代码覆盖率类型,包括: - **语句覆盖率**(`-cm line`) - **分支覆盖率**(`-cm branch`) - **条件覆盖率**(`-cm cond`) - **表达式覆盖率**(`-cm tgl`) 编译时需通过选项启用覆盖率收集: ```bash vcs -cm line+branch+cond -cm_dir ./coverage_data <其他编译选项> ``` 此处 `-cm_dir` 指定覆盖率数据存储目录,`-cm` 后接具体覆盖率类型[^1]。 --- #### **2. 分组管理方法** VCS支持通过 **`-cm_group`** 和 **`-cm_name`** 对覆盖率数据进行分组: - **`-cm_name`**:为当前仿真分配名称,用于区分不同测试用例。 - **`-cm_group`**:将多个仿真的覆盖率数据合并到同一组中。 **示例命令**: ```bash # 编译时定义覆盖率组名 vcs -cm line -cm_name test1 -cm_dir ./group1 <其他选项> # 仿真时指定组名 simv -cm line -cm_name test1 -cm_group functional_tests ``` --- #### **3. 覆盖率数据合并与报告生成** 使用 **`urg`** 工具合并多组覆盖率数据并生成报告: ```bash urg -dir group1/*.vdb group2/*.vdb -report coverage_report ``` 通过 `-format both` 可生成HTML和文本报告,报告中会按组分类展示覆盖率结果[^3]。 --- #### **4. 与功能覆盖率的区别** - **代码覆盖率**:自动统计代码执行情况(如行覆盖、分支覆盖),无需手动定义。 - **功能覆盖率**:需通过 `covergroup` 和 `coverpoint` 定义目标场景(如参数组合)[^2][^4]。 --- #### **5. 关键注意事项** - 若代码覆盖率高但功能覆盖率低,可能遗漏了设计的关键状态[^3]。 - 分组管理可帮助分析不同测试场景对覆盖率的影响。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值