[验证百花筒] 详细实例讲解如何将模块级的覆盖率合并到top级

引言

对于复杂模块,通常我们会专门搭建模块级的验证环境详细验证模块的功能,代码覆盖率通常都会达到100%或者指定的验收标准。验证完毕后,该模块又会作为更高一级的DUT例化在其中,姑且我们称之为top级DUT中的一个inst实例,而由于我们模块级已经完整验证了该模块的功能,系统级收集覆盖率的时候我们又不想完全把他exclude掉,或者说模块级我们只收集了一部分覆盖率,另一部分覆盖率我们留在系统级来收集,那么我们就需要将模块级收集的覆盖率与系统级收集的该模块的覆盖率进行合并。本文就用详细实例讲解如何实现上述需求。

仿真环境目录结构

仿真目录文件结构如下图所示:
仿真环境文件结构
其中rtl目录包含顶层设计B.v和模块级设计ip.v,需要merge的覆盖率就是ip模块的覆盖率
sim_module目录是模块级仿真目录,收集的覆盖率为sim_module/cov.vdb
sim_top目录为顶层仿真目录,,收集的覆盖率为sim_top/cov.vdb
两级仿真目录有各自的顶层testbench文件tb.sv以及相同的Makefile文件,flist为各自仿真编译需要吃的相关代码文件,cov_file指定覆盖率收集层次。
Makefile核心代码片段如下:Makefile核心代码段

仿真文件介绍

相关文件详细介绍如下

1、最终需要merge的设计文件ip.v

ip.v代码

2、模块级仿真(仿真目录sim_module,tb.u_ip)

模块级testbench代码

3、模块级的覆盖率

模块级覆盖率

4、top级代码B.v(例化了模块ip)

B.v代码

5、top级仿真(sim_top目录,tb.b_inst.u_ip)

top级testbench代码

6、top级覆盖率

top级覆盖率

7、将模块级ip的覆盖率结果merge到top级覆盖率结果上

模块级和top级各自生成coverage后,通过以下指令进行merge
urg -dir sim_top/cov.vdb sim_module/cov.vdb -dbname merge.vdb -map ip
以上指令分为三部分:
-dir 后面跟的是需要merge的vdb目录(包含若干个参数分别指向多个coverage目录,但是第一个参数作为汇总后的coverage,所以需要把top级的coverage目录作为第一个参数)
-dbname后面跟的是merge后的vdb名字
-map 后面跟的是需要merge coverage的模块名(没有将会报如下图所示的database mismatch)
缺少-map后merge失败报错
merge之后的覆盖率结果如下图所示:
将模块级覆盖率结果merge到top级
如果把模块级的coverage目录作为第一个参数,执行如下指令:
urg -dir sim_module/cov.vdb sim_top/cov.vdb -dbname merge.vdb -map ip
合并后的覆盖率如下图所示,可以发现也可以实现把ip的覆盖率进行合并,但是模块级覆盖率上没有的模块就不会在合并后的覆盖率结果上显示了,这也很好理解,就相当于把top级ip的覆盖率merge到了模块级
将top级覆盖率结果merge到模块级覆盖率结果上

总结

本文提供了一种使用synopsys工具urg将模块级覆盖率结果merge到top级的方法,更多实用验证技巧,后面慢慢补上。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值