VCS 覆盖率收集

1. 覆盖率

        随着设计越来越复杂,采用受约束的随机测试方法对它们进行全面验证,它利用随机化产生一套定向测试向量集。此时就需要使用覆盖率来衡量测试进行的程度。

1.1 功能覆盖率

        衡量设计的是实现情况,工具自动帮你完成覆盖率的收集,这部分的数据的收集可以通过VCS功能设置一些选项完成。

        它主要包括如下三种:

  • 行覆盖率(line): 多少号代码被执行过。
  • 路径覆盖率:在穿过代码和表达式的路径中有那些已经被执行过。
  • 反转覆盖率(toggle):代码中寄存器变量是否发生1,0之间对的反转。
  • 状态机覆盖率(FSM):代码中的状态机对的状态的哪些已经被访问过。

首要的选择式使用更多的种子来运行现有的测试程序,其次是建立新的约束。只有在确实需要的时候才会创建定向测试

1.2 断言覆盖率

        断言是用于一次性或在一段时间对一个或多个设计信号在逻辑或者时序上的声明代码。可以使用cover property 来测量这些关系的信号值或者状态是否发生变化。

1.3 功能覆盖率

        功能覆盖率与设计意图紧密相连,衡量哪些设计特征已经被测试程序测试过的一个指标。如果设计者漏掉某些功能的开发,代码覆盖率即使达到100%也不能发现这个错误,但是功能覆盖率可以。

2 使用VCS完成覆盖率收集

        通常我们对项目只编译一次,然后使用不同seed进行多次仿真,每一个case都会产生一个回归结果,然后在对所有的case的回归结果进行收集。

2.1 仅需要在VCS命令行下添加一些option便可以产生覆盖率信息。

vcs -cm line+tgl \
    -cm_dir xxx_compile_path/xxx.vdb \
    -f xxx_path/xxx.fl \
    -l xxx_compile_path/xxx_compile.log

-cm line+tgl :表示收集代码行覆盖率和翻转覆盖率,除此之外还有cond|fsm|branch|assert
-cm_dir xxx_compile_path/xxx.vdb:指定生成的编译设计及环境信息的路径和名称
-f xxx_path/xxx.fl:指定吃进去的设计和验证环境文件列表
-l xxx_compile_path/xxx_compile.log: 指定生成的编译日志的路径和名称

        当有多个测试用例,且如果同一个case 跑不同的seed的覆盖率信息需要单独保存,需要-cm_name 和 -cm_test 编译选项的搭配使用。默认的覆盖率信息的保存路径是./simv.vdb/snps/coverage/db/testdata/xxx_test_name,通过搭配使用便可以指定其覆盖率信息的具体路径。

simv -cm line+tgl \
    -cm_dir xxx_compile_path/xxx_testcase_path/xxx.vdb \
    -cm_name xxx_test_name \
    -cm_test xxx_compile_path/xxx_testcase_path/xxx_test_name \
    -l xxx_compile_path/xxx_testcase_path/sim.log

-cm line+tgl :表示收集代码行覆盖率和反转覆盖率
-cm_dir xxx_compile_path/xxx_testcase_path/xxx.vdb:指定生成的仿真覆盖率信息的路径和名称
-cm_name xxx_test_name :用于指定覆盖率信息在simv.vdb文件中的所在目录名称
-cm_test xxx_compile_path/xxx_testcase_path/xxx_test_name :类似-cm_name,后面会解释
-l xxx_compile_path/xxx_testcase_path/sim.log: 指定生成的仿真日志的路径和名称

2.2 合并覆盖率 urg

        接着上面,如果要合并一次回归仿真的覆盖率,需要使用如下命令进行合并,可以看到这里将一次回归中的多个仿真用例下的xxx.vdb进行了合并,最终得到了合并后的覆盖率信息simv_merge.vdb.

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

如果测试用例很多,也可以将这些测试用例覆盖率信息路径整合到filelist,并通过如下命令合并:

urg -f xxx_path/xxx_vdb.fl \
    -dbname simv_merge.vdb
    -noreport # 不产生urgReport的报告

firefox urgReport //表示用浏览器打开覆盖率,进行查看

2.3 查看覆盖率

dev 工具的查看命令是

dve -cov -dir simv_merge.vdb &

verdi工具的查看命令

verdi -cov -covdir simv_merge.vd

     https://zhuanlan.zhihu.com/p/620471082icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/620471082

https://www.cnblogs.com/Alfred-HOO/articles/17589481.htmlicon-default.png?t=N7T8https://www.cnblogs.com/Alfred-HOO/articles/17589481.html

  • 24
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值