平时都看别人在讨论,觉得自己有必要总结一些:
刚开始看SV,发现还是有点意思,但SV只是一种语言而已,如何将它应用到验证之中、为验证服务,则需要靠VMM或OVM这类验证方法学了;所以,VMM或OVM究竟有什么用途,则需要我们要去学习的地方。
VMM强大的地方在于继承了SV的一些优点,比如:
1. 使用类的概念,可以构建可重用的测试环境;
2. 强大的random控制,可以在约束条件下产生很多随机的测试向量,构造出许多不容易想到的情况,从而可以轻松检测到不容易发现的bug;
3. SV特有的function coverage可以保证测例测试到了所有自己想测试的功能点。
OVM的架构比VMM更适合可重用的测试,因为OVM的架构较VMM更加清晰,易于维护。
有些人也提到VMM的优点,还有以下几点:
1) 用channel替代sv的mailbox,components通讯起来更方便(ovm的tlm更强大);
2) 用notify替代了sv的event,更加可靠;
3) 用自带的消息管理替代$display,更能更强大;
4) 各种generator,方便产生各种激励(ovm的sequencer更强大);
5) RAL提供了更加强大的寄存器读写功能;
6) callback可以在不修改testbench的情况下改变component的行为(ovm的factory功能更强大)。
另外:
1)使用方法学,可以确保不同的验证工程师搭建的验证平台的一致性,便于非验证平台开发人员进行阅读和维护;如果不使用验证方法学,对于验证团队的leader就悲催了,互检、X检、验证平台搭建和测试例编写由不同的人实现、验证平台搭建和维护由不同的人实现等会浪费大量的人力成本;
2)使用vmm的宏,可以很方便生成一些components,如generator、transaction等;
3)vmm_env、vmm_xactor使用固定的形式,是验证工程师更多的考虑功能实现,而不是搭建验证平台的架构;
4)使用方法学,可以减少大量的注释,(而且是合法的,呵呵,可以在vmm_env中不加一行注释,leader也不能说什么,不用方法学的话,20%以上的注释就是必须的了)。