Modelsim中怎样才能将各个激励的覆盖记录进行合并,做到对覆盖率的全面监测
在一篇文章中看到如下内容:
modelsim的高级功能:Code Coverage
a) 代码覆盖率是验证激励是否完备,检验代码质量的一个重要手段。测试激励的代码覆盖率至少要达到95%以上,才能基本认为代码在逻辑上是通过质量控制的,才能进入综合步骤;
b) 代码覆盖率是保证高质量代码的必要条件,但却不是充分条件。即便代码行覆盖和分支覆盖都能够达到100%,也不能肯定的说代码已经得到100%的验证。除非所有的分支覆盖都能够进行组合遍历。
c) 在大的设计中,如果想通过一个激励就验证完一个设计或者模块是不现实的。一方面是从逻辑功能上很难做到;另外一方面是因为如果在一个激励中包括了各种情况,整个仿真过程的速度会随着计算机内存的消耗而成线性下降,效率低下。
d) 通常的做法是每一个激励只验证电路功能的某个方面。整个电路的功能验证由数个激励共同完成。在这种验证方法中代码覆盖率更显重要,因为可以通过代码覆盖率来控制激励对功能的覆盖程度。
e) modelsim的Code coverage不但能记录各个激励对代码的“行覆盖”和“分支覆盖”,而且能够将各个激励的覆盖记录进行合并,做到对覆盖率的全面监测。
请问怎样才能将各个激励的覆盖记录进行合并?
可以使用coverage save选项来保存覆盖率统计信息,默认为ucdb文件;使用vcover merge命令来对多个种子产生的ucdb文件进行合并,形成最终的覆盖率统计信息,也是ucdb文件;然后通过add testbrowser命令来打开这些ucdb文件,右击ucdb文件选择invoke coverageview mode可以查看对应的覆盖率信息。
fcover save name.ucdb——用于将覆盖率信息保存为ucdb文件。这条指令可以写在宏文件.do中。
如何自动化的获取覆盖率数据库ucdb文件?在测试文件中多加上一个$stop语句,然后在do文件内容中这样写:“run -all;fcover save NAME.ucdb;run -all;exit”,即可实现,如果使用多条同样的语句,可实现批处理地产生覆盖率数据库文件。
以上是个人的经验总结,请参考,具体操作还要自己实践一下。
以上操作不仅仅针对代码覆盖率,也包括功能覆盖率。如果小编只是用工具统计代码覆盖率的话,可以忽略后者。后者一般是测试平台来提供的。
非常感谢,我去试一试
非常感谢您的回复,你说的方法是可行的。
因为是经验总结嘛,不行的话,就估计是具体操作上的问题了。呵呵。
高手有这方面的资料吗?给推荐一下啊。
也遇到了这样的问题
好东西啊
好东西
学习一下
按照上面说的,代码覆盖率能搞定,但是功能覆盖率却不知道怎么弄,求指导,谢谢!
功能覆盖率需要自己定义coverage bin,并给出什么时候sample。跑仿真后,coverage信息会收集在ucdb文件里,merge后就能看到了。
不错的问题
试一下
可有大虾们只有有什么书记专门介绍这个的呢,用HDL 的
多个case跑完之后,进行ucdb merge,得到的总覆盖率吗,是不同case的相同covergroup覆盖率叠加吗,需要加权吗?谢谢
这个是好帖子,有本书专门讲modelsim的使用,里面说的好像还不如这详细。