| ||
我们目前所处的验证潮流中,UVM占据了动态仿真的绝对主导,而如果将时间再回溯5年的时间,那个时候OVM与UVM在使用率上还是相差不多的。尽管OVM团队在过去也已经认识到了UVM统一动态验证领域只是时间的问题,然而由于整个项目的投入都是基于OVM,在紧张的项目进度下,要完成将OVM整个都迁移到UVM,并不是件容易的事。所以,如何实现OVM与UVM的混合仿真是一件贴合项目实情的诉求,只有通过这种过渡的方法,才能满足在一段时间内,项目新的模块验证环境基于UVM,而复用原有其它模块的OVM环境,在顶层集成中实现OVM与UVM的混合仿真。同时,在时间和人力允许的情况下,逐步考虑将现有的OVM环境转换为UVM环境,这种循序渐进的方式对于项目而言是安全的,降低了风险,对于技术团队而言,也留出了更充裕的时间去拥抱从OVM到UVM的变化。
我们本节中为读者带来三种可供OVM与UVM混合仿真的方式,并且这些方式都已经过了项目的检验。基于商业的考虑,路桑在本节只做概念阐述和大致实现的方式,希望通过抛砖引用的方式,让读者可以了解下面三种方式各自的特点,同时如果读者也有混合仿真的需求(具体项目实现),可以通过扫描二维码与路科团队取得联系,获取更多的增值服务。
UVM-ML (UVM Multi-Language)验证框架
UVM-ML提供一钟验证框架使得各种语言、方法学实现的组件都可以最终共容在一个验证环境当中。UVM-ML是由AMD公司与Cadence公司合作的产物,读者可以通过下面的链接下载这个开源软件包。通过UVM-ML,它可以使得多种标准语言IEEE-1800(SystemVerilog)、IEEE-1647(e)、IEEE-1666(SystemC)在同一仿真器的验证环境中共存,当然也能够使得OVM和UVM不同的方法学结构下的环境实现混合仿真。在过去的技术会议中,已经有关于UVM-ML的实践,例如实现了UVM与SystemC之间的通信(UVM and SystemC Transactions - An Update, DVCon2016, David Long,Doulos)
http://forums.accellera.org/files/file/65-uvm-ml-open-architecture/
推出UVM-ML的背景在于验证发展的过往中,验证语言的各自为阵,新语言的发展和旧语言的衰落逐渐造成了公司中旧有语言、方法学结构环境的发展受限,同时也使得不同语言、方法学构建的验证资源无法很好地整合。尽管验证思想、手段在过往的十年中没有重大的改动,但例如VMM、OVM、UVM的各个验证IP之间依然有方法学包的壁垒,而无法并容在一个环境当中。同时如何欢迎eRM方法学的验证环境和SystemC,也成为了整合验证资源的课题之一。例如下图是实现e与UVM混合仿真的示例结构:
同样地,通过UVM-ML也可以实现作为中间转译层来实现OVM与UVM环境中间的数据中转,这是通过UVM-ML提供的底层C API来实现数据中转交换的。更多的例子读者可以通过上面给出的连接,下载这个软件包。软件包中包含:
UVM-ML底层库提供的API函数。
示例结构框架和适配器(adapter)(三个例子,UVM-SV、UVM-e、UVM-SC)。
一些示例来演示这些混合框架之间是如何互动和协调测试的。
用户手册和类的参考文档。
OVM兼容层 (Comptabile Layer)
在2013年,来自于Intel的Hassan Shehab在DVCon2013大会的培训演示环节中分享了他们在项目中的实践。关于分享的实习读者可以在下面的连接中得到。
http://www.accellera.org/images/community/uvm/UVM_Tutorial_DVCon_2013.pdf
Hassan在项目实践中指出,通过在Mark Glasser分享的开源包上做了更多的改进,继而实现了在几乎不改变原有OVM代码的情况下,将OVM的验证组件融入到UVM环境中去。
https://verificationacademy.com/forums/downloads/uvm-ea-ovm-compatibility-kit
这种不修改OVM代码而可以使其OVC直接融入UVM环境的核心思想在于创建一个OVM兼容层,该层的作用就是将原有的一些OVM关键词和宏做二次定义,间接由UVM的内核去替代它们。例如下面给出的一些OVM宏在这个兼容层下新的定义:
又或者OVM的关键词也间接由UVM的关键词取代:
除了上面这些“暗度陈仓”的修改之外,还有一些UVM文件我们还需要修改,使得它们可以兼容OVM的一些用法;或者,我们转而在OVM的源代码上进行修改,将一些废除的或者不建议的代码替换为与UVM兼容的代码。通过OVM兼容层的方式,可以通过修改OVM库的方式,使其内核都间接使用UVM的类、宏,并且将OVM的代码用法与UVM的用法保持兼容。因此通过无论是顶层是UVM环境,或者是OVM环境,都可以通过这种方式实现OVM与UVM的混合仿真。
从OVM兼容层的思想来看,它是通过提供一个修改后的OVM包,而这个包是基于UVM包之上的,以此来将OVM环境中对应的类、宏和方法都间接转换到UVM一侧。因此,从实质上将,通过这种方式实现的OVM与UVM的混合仿真是一种假的混合仿真,背后仍然是纯粹的UVM环境支撑,而OVM兼容层的思路值得借鉴,因为它通过投入时间在修改完善OVM兼容层后,可以完成构建与之上的多个OVC到UVC的转变,从人力投入的性价比来看是一个好的选择,而这种方式也对完善OVM兼容层的技术提高了较高的要求。