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

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

3天内不再提示

聊一聊所谓的Objection机制

sanyue7758 来源:芯片学堂 2023-06-09 11:16 次阅读

Objection是UVM框架中用来同步不同组件的相同phase,以及决定当前测试用例什么时候结束(end-of-test)的机制,这也是用户在拿到UVM之后最直白的使用场景。本篇文章除了介绍Objection的工作原理和常规使用方式,还会介绍Objection的一些非常规用法。

01 Objection工作原理

为什么把同步phase或者说管理仿真结束的机制叫做Objection?这是个没有多少实际意义的问题,不过理清楚之后,也许你再也不会忘了Objection机制的用途。

按照UVM reference的介绍:“Objections provide a facility for coordinating status information between two or more participating components, objects, and even module-based IP. ” 这个描述还是比较抽象,说Objection用于协调多个对象之间的状态信息,不过可以简单理解成就是“同步”。

本系列前面的文章【深入Phase机制,看懂Phase机制实现原理】介绍到,基于UVM的仿真程序执行严格按照Phase来执行,而每一级phase都按照UVM定义的状态机做跳转,其中有一个状态比较特殊,叫UVM_PHASE_READ_TO_END。

这个状态的特点是:只有当同级phase的所有objection都被撤销(drop)之后(通过计数器实现),才会进入该状态;进入该状态之后,会遍历执行验证组件中定义的phase_ready_to_end回调函数,待执行完成之后且没有objection被置起(raise),才会跳转到下一个状态UVM_PHASE_ENDED。

54e20b0e-05e7-11ee-962d-dac502259ad0.png

按照这个逻辑,以耗时(time-consuming)phase为例,这里忽略pre_*和post_*的phase,可以得到下面这个执行流图。图中从左往右表示执行的先后顺序,可以看到,相同phase都是在同一时刻开始往后执行,也就实现了“同步”。

5517994a-05e7-11ee-962d-dac502259ad0.png

最后怎么去理解“Objection”这个词?可以这么说,仿真执行过程中,仿真程序会不停地问:“我要进入下一个phase了,还有谁有意见?”,那些还没有执行完的phase线程就会大喊:“我反对我反对!”,于是仿真程序就等在那了,最终只有等到所有人都执行完了,才得以退出当前phase。Objection也符合“a feeling or expression of disapproval”的释义了。

02 Objection常规用法

Objection的常规用法很简单,在很多文章中都会提到,即raise_objection(),drop_objection() 和 set_drain_time()。这三件套是我们应用Objection机制时最常用到的方法。

Objection计数器在每次调用raise_objection()和drop_objection()会进行增减。在实际应用中,不建议在很多组件的耗时phase中都去raise-drop objection,两个原因:一个是objection的控制会比较分散,不便于objection的管理;另一个是反复的调用会使得仿真效率比较低。可以考虑在测试用例顶层和sequence中进行objection的控制。示例代码如下:

552bf732-05e7-11ee-962d-dac502259ad0.png

以上是UVM 1.1对objection的用法。到了UVM 1.2,弃用了uvm_sequence_base:: starting_phase这个变量,改用set_starting_phase和get_starting_phase两个方法;弃用了raise_objection和drop_objection两个方法,改用uvm_sequence_base:: set_automatic_phase_objection。这些改进的目的是优化objection的使用体验,UVM library帮你多省掉了一些代码和出错的机会。示例代码如下:

55609898-05e7-11ee-962d-dac502259ad0.png

set_drain_time()方法的使用场景是在objection都撤销了之后,往后延长仿真结束的时间。这么做的目的是让DUT有多余的时间去完成动作,使其完整响应我们输入的测试激励。

除了set_drain_time()方法可以解决这个问题,我们还可以在撤销objection之前去做一些有意义的条件判断,也可以在test的phase_ready_to_end回调函数中去实现一些检查逻辑。不过还是set_drain_time()用的多。

03 Objection非常规用法

非常规用法指的是平时不怎么用得到的使用场景,但这些使用方法在有些场景下会有用,比如调试。

追踪Objection状态用的命令行参数+UVM_OBJECTION_TRACE。当仿真命令加上该参数,就可以在仿真日志中看到谁谁谁置起了objection,谁谁谁撤销了objection,以及objection计数器的数值等等。

另外我们可以通过phase.get_objection()拿到负责同步当前phase的objection句柄,之后就可以调用该句柄有的一些方法。比如get_drain_time()方法可以返回当前objection对象的排空时间(drain time);clear()方法可以直接清零当前objection对象的计数器,且释放对当前phase的同步;display_objections()方法可以打印该objection对象的具体信息等。





审核编辑:刘清

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

    关注

    14

    文章

    1633

    浏览量

    107095
  • 计数器
    +关注

    关注

    32

    文章

    2253

    浏览量

    94343
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    19133
  • DUT
    DUT
    +关注

    关注

    0

    文章

    189

    浏览量

    12335

原文标题:SystemVerilog | UVM | 使用Objection管理仿真结束

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    从焊接角度,设计PCB的5个建议

    完成个电路板,需要PCB工程师、焊接工艺、焊接工人等诸多环节的把控。今天通过定位孔、MARK点、留边、焊盘过孔、辅助工具这五个方面从画板的角度跟大家PCB设计。
    的头像 发表于 02-06 10:31 1968次阅读
    从焊接角度<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>,设计PCB的5个建议

    消息队列技术选型的7种消息场景

    我们在做消息队列的技术选型时,往往会结合业务场景进行考虑。今天来消息队列可能会用到的 7 种消息场景。
    的头像 发表于 12-09 17:50 1317次阅读
    <b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>消息队列技术选型的7种消息场景

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

    在上节中,**《IC验证"UVM验证平台加入factory机制"(六)》**虽然输出了“main_phase is called”,但是“data is drived”并没有
    发表于 12-09 18:28

    Altium中Fill,Polygon Pour,Plane的区别和用法

    Fill会造成短路,为什么还用它呢?来Altium中Fill,Polygon Pour,Plane的区别和用法
    发表于 04-25 06:29

    stm32的低功耗调试

    前言:物联网的大部分设备都是电池供电的,设备本身低功耗对延长设备使用至关重要,今天就实际调试总结stm32的低功耗调试。1、stm32在运行状态下的功耗上图截图自stm32l15x手册
    发表于 08-11 08:18

    7系列FPGA的供电部分

    前几篇咱们说了FPGA内部逻辑,本篇咱们再聊7系列FPGA的供电部分。首先咱们说spartan7系列,通常咱们需要使用以下电源轨:1,VCCINTFPGA内部核心电压。其不损坏FPGA器件的范围
    发表于 11-11 09:27

    平衡小车代码的实现

    前言今天代码,只有直立功能的代码。代码总体思路给定个目标值,单片机通过IIC和mpu6050通信,得知数据后,根据角度环计算出个P
    发表于 01-14 08:29

    FPGA的片内资源相关知识

    大家好,到了每日学习的时间了。今天我们来FPGA的片内资源相关知识。 主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、DCM和DSP)的硬核
    的头像 发表于 05-25 14:11 8900次阅读
    <b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>FPGA的片内资源相关知识

    IIC总线设计

    大家好,又到了每日学习的时间了,今天咱们来 IIC 总线设计。 、概述: IIC 是Inter-Integrated Circuit的缩写,发音为eye-squared cee
    的头像 发表于 06-22 10:32 9277次阅读

    小米米2月19日停止服务 米宣布关闭服务器

    v8.8.70 及以上版本支持批量导出。 2010年12月10日,反应迅速的小米仅仅用了不到2个月的时间,发布了中国第款模仿kik的产品——米。Kik是款基于手机通信录的社交软件,用户可以免费短信聊天。 2012年5月,
    的头像 发表于 01-20 05:43 6627次阅读

    复活了 能维持多久?

    2021年2月19日,米宣布停服,2021年2月26日,米重新上线。不过这次,米却是以全新的面貌与大家相见。
    发表于 03-08 16:32 1139次阅读

    FPGA中的彩色转灰度的算法

    大家好,又到了每日学习的时间了,今天我们来FPGA学习中可以遇到的些算法,今天就
    的头像 发表于 04-15 15:47 1925次阅读

    【职场杂谈】与嵌入式物联网架构师几个话题

    【职场杂谈】与嵌入式物联网架构师几个话题
    的头像 发表于 08-23 09:19 1298次阅读
    【职场杂谈】与嵌入式物联网架构师<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>几个话题

    简单DPT技术-double pattern technology

    今天想来简单DPT技术-double pattern technology,也就是双层掩模版技术,在目前先进工艺下,这项技术已经应用的很普遍了。
    的头像 发表于 12-05 14:26 1600次阅读

    芯片设计的NDR是什么?

    今天突然想route相关的问题,讲讲NDR是什么,我也梳理总结下我对NDR的认识。
    的头像 发表于 12-06 15:14 1798次阅读