路科验证(Rocker IC)专注于验证系统思想和前沿工程资讯,拥有一支活跃的技术原创团队,著有《芯片验证漫游指南》一书,致力为高校微电子相关专业学生与IC从业人员提供技术食粮。 您可以在手机移动端同步关注微信订阅号“路科验证”或是登录网页www.rockeric.com了解更多资讯。如果您需要联系我们,请发送邮件至 bin.rocker.liu@intel.com 。

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

上一篇 / 下一篇  2018-06-12 21:06:58 / 个人分类:验证系统思想

  

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


XVM

对于上面的两种方法,都有一些不足,例如UMV-ML尽管照顾了多种语言和方法学的交互,然而确为此不得不将C作为中间的数据中转站,这也使得语言之间的资源开销较大;而对于OVM兼容层的思想,由于需要OVM原生的方法行为与UVM对应的方法并不是严格一致的,这就增加了后期在OVM兼容层上调试OVM代码的难度,同时在OVM兼容层的照顾下,仍然需要修改一部分已经废止掉的OVM代码使其与UVM代码习惯保持一致。


在这个背景下,同样来自于Intel公司的Mohamed Elmalaki提出了XVM的理念,并且成功在项目中应用。该思想也借鉴了UVM-ML,并且由于照顾的只是OVM与UVM的兼容,因此并不需要额外依靠C来做数据转换适配,而是通过开发一个小型的数据适配包XVM来实现OVM与UVM真正地在仿真环境中并存,进行真•混合仿真。虽然XVM的包暂时没有被开源出来,但路桑希望通过分享这一思想,使得读者有实践经验可以参考,并考虑将这一思想运用到自己所处的OVM、UVM混合仿真中去。



首先来看一看,OVM与UVM的组件如何实现共存呢?下面是一个例子,该环境的顶层是OVM,而例化了一个UVM的组件在其中。XVM的核心思想是,“尘归尘,土归土”,OVM与UVM的组件在例化中,应该属于不同的层次结构。下面的ovm scoreboard的顶层是soc_env(OVM),而uvm monitor尽管也在soc_env中例化,但它无法挂靠在一个OVM组件上,因此它选择了全局的静态变量xvm_pkg::xvm_uvm_parent。




这种方式使得OVM与UVM的组件看似共存在一个顶层下面(OVM顶层或者UVM顶层),但实际上它们无法保持混合的结构方式,即OVM组件无法将UVM环境作为自己的parent,UVM组件也无法将OVM环境作为自己的parent。因此上面例码中的xvm_pkg::xvm_uvm_parent的定义如下:



在解决了组件层次的问题之后再来考虑如何开始仿真的问题。XVM提供的开始仿真的方式可以完成下面要素:

  • 启动UVM的phase调度器(scheduler)。

  • 启动OVM的phase调度器。

  • 同步OVM与UVM之间的phase。




我们在之前的《UVM世界观篇》中就介绍了UVM的各个phase,而这些phase与OVM的phase通过XVM实现了同步。XVM实现的同步时两种方法学调度器之间的同步。


在保证了OVM与UVM之间的phase同步,使得它们都在同一起跑线出发之后,还需要考虑OVM与UVM组件之间的通信问题。读者已经知道OVM与UVM的组件不能直接相见,隔窗而望的同时还要保持克制,以免发生意外。因此,XVM也提供了中间的TLM缓冲通道,该缓冲通道可以实现从OVM到XVM到UVM,或者从UVM到XVM到OVM的数据传输。



下面的例码即是利用XVM的缓冲桥,实现不同方法学组件之间的通信:


因此从上述对XVM的主要实现来看,它通过数据中转同步的方式(基于SV),实现了OVM与UVM的混合仿真:

  • 通过OVM与UVM的独立顶层,实现了双方的组件互补依赖,各自保持独立的层次关系。

  • 保证OVM与UVM环境在各个phase阶段的同步。

  • 通过中间数据缓存区,实现了OVM与UVM组件的数据同步。


到此,我们已将SV和UVM相关的高级话题介绍完毕,尽管还有不少的遗珠可以考虑为路粉们做介绍,然而顾及到二八原则,我们在本书的第一版中主要以满足UVM的新手和日常实际问题为主。本书的十八掌经历了一年三个月,也就可以打完收工告一段落了。手机阅读不便于记笔记、做练习,路粉们也可以期待本书的早日出版,尽早结束每周的追新。而对于本书的内容,路桑仍不免对其不完美的地方惴惴不安,因此也在编校第一版的同时下了决心,伴随着功能验证技术的日新月异,我们本书的内容也会做出后续的更新,比如说第二版。至于十八掌后还有没有十九章,想有还是会有的,路桑也会精心策划我们后续的章节,并作为本书第二版的内容基础。


谢谢你对路科验证的关注,也欢迎你分享和转发真正的技术价值,你的支持是我们保持前行的动力。



TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

路科验证

路科验证

路科验证(Rocker IC)专注于验证系统思想和前沿工程资讯,拥有一支活跃的技术原创团队,为高校微电子相关专业学生与IC从业人员提供技术食粮。 您可以在手机移动端同步关注微信订阅号“路科验证”。如果您需要联系我们,请发送邮件至 rocker.ic@vip.163.com 或者 bin.rocker.liu@intel.com 。

日历

« 2018-06-21  
     12
3456789
10111213141516
17181920212223
24252627282930

数据统计

  • 访问量: 114750
  • 日志数: 221
  • 建立时间: 2016-06-25
  • 更新时间: 2018-06-14

RSS订阅

Open Toolbar
博聚网