0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何优雅地结束UVM Test

芯片验证日记 来源:芯片验证日记 作者:芯片验证日记 2022-12-17 11:23 次阅读

1. 前言

众所周知,在传统的测试平台中,通常在完成复位、配置、数据传输和自动检查等所有步骤后,通过调用verilog的系统函数$finish来结束仿真

但相对于传统的测试平台,UVM在Testbench架构的几乎每个方面都做了创新,当然结束仿真的控制也发生了很大变化。在UVM验证环境中结束仿真最常用的就是drop_objection机制,当然所有phase都结束后,还是调用系统函数$finish来结束仿真。

下面,分享一下在UVM验证环境中,结束仿真的几种方式,这些结束方式,适用于不同的应用场景。我的表达能力不强,大家重点看代码。

2. 本文的内容目录

poYBAGOdNEiAfn2wAAOe6MAtDt0572.png

3. Raising & Droping Objection机制

3.1 drop_objection的函数原型

下图是uvm1.1d源码中关于drop_objection函数的定义,如下图所示。

poYBAGOdNGaAKN2eAAFbYfqfbmU984.png

3.2 在seq中使用drop_objection

下图是在sequence中调用drop_objection的示例,如下图所示,同样来自于uvm源码。

pYYBAGOdNJqAPNWZAAJFCKzvWno024.png

3.3 在scoreboard中使用drop_objection

poYBAGOdNMqAJC2yAAFaKB6Hi5I742.png

3.4 在test中使用drop_objection

pYYBAGOdNOWAbKM_AANHPedUyeY723.png

3.5 使用drop_objection总结

结合上面的例子,强调两点:

一是:drop_objection可以用在任何一个component中;当然也可以用在sequence中,但不可以用在其他uvm_object类里面,因为uvm_object里面没有phase的概念,那sequence其实也没有phase的概念,为什么可以?这也是一个小知识点,有的面试官问的仔细了,也可能问到,我就不展开了。

二是:在实际项目中的整个验证环境中,最好只用一对raise_objection/drop_objection,不要在很多组件中都使用它,否则很容易造成死锁,而且很难debug,尽管uvm的语法也允许这么做。

4. phase_ready_to_end(微信公众号《芯片验证日记》)

4.1 phase_ready_to_end的官方解释

pYYBAGOdNQWAXAc6AAUfPlx5xnI936.png

4.2 phase_ready_to_end的理解

phase_ready_to_end(uvm_phase phase)是组件类的回调方法(函数),当相应phase的所有objection均被放下并且该phase将要结束时,会调用该方法。组件类可以使用此回调方法来定义phase即将结束时需要执行的任何功能。例如,如果某个组件希望将phase结束延迟到某个条件,甚至在所有objections均被放下之后,也可以使用此回调方法来完成。再比如,如果一个激励或应答sequence正在运行,在主sequence结束之前,则可以使用main_phase()中的phase_ready_to_end()回调方法来停止那些激励或应答sequence。再比如一个component想要延迟某个run-time phase的生命周期,那么可以在所有的objection都被dropped之后使用这个回调方法。

对于sequences, tests和许多完整的测试平台,在phase的正常寿命期间phase objections的提起和撤销是足够的。但是,有时某个组件不希望在phase的正常生命周期内主动提起和撤销objections,但确实希望延迟从一个phase到下一类phase的过渡。这在事务中经常出现这种情况,出于性能原因,不能针对每笔事务提出objection,并且通常情况下是端到端的记分板。为了在所有其他组件同意该phase应该结束之后延迟phase结束,该组件应该在phase_ready_to_end方法中提出objections。然后它负责在组件的主体中或在phase_ready_end_method的任务fork / join none中撤销这些objections。

4.3 在env中使用的一个示例

注意,phase_ready_to_end是一个function,但用fork/join_none将wait_for_ok_to_finish和drop_objection进行了处理,这允许function立即返回。

poYBAGOdNSiAfmMUAAM51dfE5Uc973.png

4.4 在scoreboard中使用的一个示例

poYBAGOdNUaAFK_mAAOmz44csMs988.png

4.5 在scoreboard中使用的另一个示例

pYYBAGOdNWeARDaJAALV90F4FJU540.png

5. set_drain_time

5.1 set_drain_time的解释

下图是官方对set_drain_time的解释,以及函数原型的定义。

pYYBAGOdNYSAdYcVAAM0DOY2s3o766.png

5.2 set_drain_time的使用示例

set_drain_time的使用方法,同样来自最权威的source code.

poYBAGOdNZ2AVrUeAAHgoDdHvmQ904.png

5.3 set_drain_time的另一个示例

poYBAGOdNb6AOof6AALIzE0n7Tc684.png

写文章不易,如果觉得对您有帮助,麻烦一键三连,或者赏个鸡腿也行!

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18965
收藏 人收藏

    评论

    相关推荐

    UVM环境的看门狗怎么没看住超时了?

    uvm验证环境里一般通过objection机制来控制仿真的结束,不过在机制之外,有时还需要通过看门狗来watchdog避免仿真环境挂死,watchdog配合objection一起来控制仿真的进行与结束
    的头像 发表于 12-04 11:42 499次阅读

    IC验证“UVM验证平台加入objection机制和virtual interface机制“(七)

    机制来控制验证平台的关闭。细心的读者可能发现,在上节的例子中,并没有如**《IC验证"一个简单的UVM验证平台"是如何搭建的(五)》**所示显式地调用 finish语句来结束仿真
    发表于 12-09 18:28

    数字IC验证之“什么是UVM”“UVM的特点”“UVM提供哪些资源”(2)连载中...

    原文链接:https://zhuanlan.zhihu.com/p/345775995大家好,我是一哥,上章内容主要讲述两个内容,芯片验证以及验证计划。那本章我们主要讲述的内容有介绍什么是uvm
    发表于 01-21 16:00

    什么是uvmuvm的特点有哪些呢

    大家好,我是一哥,上章内容我们介绍什么是uvmuvm的特点以及uvm为用户提供了哪些资源?本章内容我们来看一看一个典型的uvm验证平台应该是什么样子的,来看一个典型的
    发表于 02-14 06:46

    谈谈UVM中的uvm_info打印

      uvm_info宏的定义如下:  `define uvm_info(ID,MSG,VERBOSITY) \  begin \  if (uvm_report_enabled(VERBOSITY
    发表于 03-17 16:41

    UVM中seq.start()和default_sequence执行顺序

      1. 问题  假如用以下两种方式启动sequence,方法1用sequence的start()方法启动seq1,方法2用UVM的default_sequence机制启动seq2。那么seq1
    发表于 04-04 17:15

    我的第一个UVM代码——Hello world

    run_test调用了uvm_test派生出来的testcase(hello_world)。 为什么run_test能够通过字符串\"hello_world\"找到testcase?与宏定义
    发表于 11-03 10:18

    什么是UVM environment?

    UVM environment**包含多个可重用的验证组件,并根据test case的需求进行相应的配置。例如,UVM environment可能具有多个agent(对应不同的interface)、scoreboard、func
    的头像 发表于 03-21 11:35 785次阅读
    什么是<b class='flag-5'>UVM</b> environment?

    介绍一个通过GUI方式自动生成UVM环境的工具

    工具来源于DVCon US 2022的一篇论文:Novel GUI Based UVM Test Bench Template Builder。
    的头像 发表于 05-04 09:23 804次阅读
    介绍一个通过GUI方式自动生成<b class='flag-5'>UVM</b>环境的工具

    UVM学习笔记(一)

    driver应该派生自uvm_driver,而uvm_driver派生自uvm_component。
    的头像 发表于 05-26 14:38 885次阅读
    <b class='flag-5'>UVM</b>学习笔记(一)

    UVM中的uvm_do宏简析

    uvm_do宏及其变体提供了创建、随机化和发送transaction items或者sequence的方法。
    的头像 发表于 06-09 09:36 2916次阅读
    <b class='flag-5'>UVM</b>中的<b class='flag-5'>uvm</b>_do宏简析

    管理test case结束机制介绍

    UVM中每个phase都有一个内置的objection ,为components和objects提供了同步方法,指示何时可以安全地结束这个phase, 最终结束整个test case。
    的头像 发表于 06-11 09:35 349次阅读

    UVMuvm_config_db机制背后的大功臣

    本次讲一下UVM中的uvm_config_db,在UVM中提供了一个内部数据库,可以在其中存储给定名称下的值,之后可以由其它TB组件去检索。
    的头像 发表于 06-20 17:28 798次阅读

    UVMuvm_config_db机制背后的大功臣

    本次讲一下UVM中的uvm_config_db,在UVM中提供了一个内部数据库,可以在其中存储给定名称下的值,之后可以由其它TB组件去检索。
    的头像 发表于 06-29 16:57 616次阅读

    一文详解UVM设计模式

    本篇是对UVM设计模式 ( 二 ) 参数化类、静态变量/方法/类、单例模式、UVM_ROOT、工厂模式、UVM_FACTORY[1]中单例模式的补充,分析静态类的使用,UVM中资源池的
    的头像 发表于 08-06 10:38 903次阅读
    一文详解<b class='flag-5'>UVM</b>设计模式