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

SV及UVM高级话题篇之四:OVM到UVM的移植

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

在过去的几年中,UVM在几大EDA公司不遗余力的推广和工具的支持下,迅速成为了verifier的必备技术之一。而对于那些大公司,那些有深厚技术储备的公司,他们在验证技术的演变中一直在扮演着迁徙者的角色,即从水草贫乏之地(以前不是这样的)迁完丰饶的地方。这种迁移譬如当年的VMM到OVM、或者OVM到UVM等等。而我们今天要介绍的OVM到UVM的转化,更贴近目前的演化阶段。在OVM迁移到UVM时,不少验证组都会评估代码迁移的好处和代价,如果有更多的好处,更少的代价,那是最好的。


首先来看看,如果迁移后的好处是什么?

  • 主流的仿真器都将支持重心迁移到UVM,而OVM的特性则不再主要考虑,这意味着后者最终会停止更新和支持。

  • UVM的寄存器模型包现在成为了验证领域的主流,而之前OVM一侧的各个第三方的寄存器模型包不具有共通性,另外OVM在后期也本身引入了UVM的寄存器宝。

  • 主流的VIP都是以UVM为主,从VIP的数量来看,UVM也逐渐占据多数,与OVM的VIP数量拉开了距离。

  • 从接下来五年的验证潮流来看,目前找不到直接的竞争对手会取代UVM,这就使得在迁移后整个团队保持了与最新技术的联系。


造成OVM与UVM在2013年前后势均力敌的原因之一在于,他们在2013前后的受欢迎度是不分伯仲的。这也使得早年应用OVM的人,已经习惯了OVM,而UVM之初仅仅是迁移了OVM的所有特性并没自己什么个性的时候,这些OVM用户并没有做出要迁移到UVM的决定。然而各领风骚四五年,UVM而今已经不容置疑地统一了动态仿真界,在这一形势下,即便UVM并不会从技术上有太多突破,但在外部资源、技术更新上的考虑,越来越多的人选择了迁往UVM,或者将新的UVM VIP置入到原有的OVM环境中,做两种方法学的混合仿真(这一点我们会在下一节《OVM与UVM的混合仿真》谈到)。


那做了迁移的决定之后,我们需要考虑,什么样的方法会使得迁移的成本最小呢?

  • 在迁移之前,我们需要审视现有的OVM环境代码,得出哪些方式在UVM中已经被废弃了(不建议使用)。我们应该替换掉这些废弃代码,转而使用推荐的代码方式。

  • 一个合适的脚本可以帮助我们完成批量处理。

  • 在脚本帮助完成转化之后,我们还需要再次完成编译和回归测试,确保转换前后的回归测试结果是一致的。

  • 在转换过程中,我们应当遵守单元测试的原则,先完成从OVC到UVC的转化和测试,再完成OVM顶层转换到UVM顶层转换和测试的目标,逐级完成转换和测试。


在2013年初,Verilab公司的Litterick Mark(首席验证顾问)就推出了关于如何实现从OVM到UVM的自动化转化的论文和相关脚本。在他的论文中提出利用脚本实现从OVM到UVM转换的四个基本步骤:

  • 检视原有的OVM代码,移除已经废止的用法和不建议的用法。

  • 通过脚本实现从OVM到UVM的一些通用关键词的转换(批量处理)。

  • 通过脚本或者手动修改的方式将OVM的编码方式修改为UVM的吧编码方式。

  • 使用新的UVM的特性。



而在具体操作过程中,上面四个步骤,Litterick Mark又分别给出了四个脚本来对应,通过这些脚本,或者可以帮助检查出需要修改的地方,或者可以帮助用户直接完成替换。下面的表格中,可以看到通过脚本首先可以生成一些报告,指出代码中需要修改的部分,继而再通过后续脚本进行替换或者手动替换。关于这些脚本,读者可以在本书对应的目录中找到。



在推出这一方式之后,UVM委员会考虑并吸取了这一思想和部分脚本,经过简化之后,在目前的UVM-1.2安装包中,用户通过$UVM_HOME/bin/ovm-to-uvm10.pl完成上述步骤的第二部,即通过批量处理完成OVM关键词到UVM关键词的转换,而更多的特性用法则需要用户自己检视代码和手动修改。因此,目前UVM官方给出的转换步骤进化为了下面的方式:

  • 用户需要自己检视代码(而不再是通过脚本来检视和报告)

  • 通过脚本完成基本的关键词转换

  • 完成从OVM phase到UVM phase的编码转换

  • 抛弃原有的OVM objection方式转而使用UVM objection编码方式

  • 用UVM configuration替换原有的OVM configuration方式

  • 添加新的UVM特性



可以看到UVM委员会给出的转换方式舍弃了之前Litterick建议的脚本检视和后续的自动替换,而只保留了最“安全”的替换基本关键词的脚本,例如ovm_component到uvm_component的转换。而路桑通过实际的转换经验,建立读者有需要的情况下,使用“中和”的方式:

  • 通过脚本完成检视,替换掉已经废止和不建议的OVM用法。

  • 通过脚本完成从OVM到UVM的基本关键词转换。

  • 剩余的部分考虑到需要更多的语义和结构分析,建议进行手动替换。


接下来,我们就这一建议的方式来给出大致的操作步骤,而相关的脚本读者可以在本书附赠的源代码包中找到。


OVM代码检视


这一环节中的脚本ovm_audit.pl的作用是用来检视OVM代码和生成报告:

  • 指出已经被废止的OVM代码

  • 指出不建议使用的代码

  • 指出在OVM中有效而在UVM已经废除的代码


检视脚本的作用是用来生成报告,并不会修改代码本身。而下进行下一个步骤之前,用户应该根据检视报告来修改那些不合适的代码,在修改完之后用户可以在OVM环境中编译运行,确保修改不影响原有的功能。下面是脚本的使用范例:

audit one file:

% ovm_audit.pl file.svh

audit a set of files:

% ovm_audit.pl *.sv*

audit a whole tree of files:

% find . -name "*.sv*" | xargs -r ovm_audit.pl


这些关键词在OVM-2.1.2中已经被废止或者不建议使用:

  • ovm_test_top

  • ovm_top_levels

  • ovm_phase_func

  • post_new_ph

  • export_connections_ph

  • import_connections_ph

  • configure_ph

  • pre_run_ph

  • ovm_find_component

  • ovm_print_topology

  • avm_

  • global_reporter

  • ovm_threaded_component

  • do_sprint

  • print_unit

  • do_test

  • m_do_test_mode

  • do_task_phase

  • set_parent_seq

  • get_parent_seq

  • seq_item pre_do

  • seq_item body

  • seq_item mid_do

  • seq_item post_do

  • seq_item wait_for_grant

  • seq_item send_request

  • seq_item wait_for_item_done

  • start_sequence

  • OVM_REPORT_

  • ovm_seq_prod_if

  • ovm_seq_cons_if

  • ovm_seq_item_prod_if

  • ovm_seq_item_cons_if

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 。

日历

« 2018-08-19  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

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

RSS订阅

Open Toolbar