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

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

日志

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

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

在过去的几年中,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


点赞

评论 (0 个评论)

facelist

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

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

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

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

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

GMT+8, 2024-4-25 21:33 , Processed in 0.016759 second(s), 12 queries , Gzip On, Redis On.

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