路科验证的个人空间 https://blog.eetop.cn/1561828 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

SV及UVM高级话题篇之五(终):OVM与UVM的混合仿真

已有 2748 次阅读| 2018-6-29 19:06 |个人分类:验证系统思想|系统分类:芯片设计

我们目前所处的验证潮流中,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兼容层的技术提高了较高的要求。



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-23 14:43 , Processed in 0.025198 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部