(7)UVM objection机制

  • objection机制
  • 控制objection的最佳选择

UVM-1.1之后,结束仿真的机制有且只有一种,那就是利用objection挂起机制来控制仿真结束。

objection机制

参与到objection机制中的参与组件,可以独立的各自挂起objection,来防止run_phase退出,但是只有这些组件都落下objection后,uvm_objection共享的counter才会变为0,这意味run_phase退出的条件满足,因此可以退出run_phase。

task main_phase(uvm_phase phase); phase.raise_objection(this);
...phase.drop_objection(this);
endtask

在run的过程中,至少要有一个组件挂起objection若没有任何一个组件举起objection,则会立刻退出uvm;退出到run_phase进行到下一个阶段;

在进入到某一phase时,UVM会收集此phase提出的所有objection,并且实时监测所有objection是否已经被撤销了,当发现所有都已经撤销后,那么就会闭此phase,开始进入下一个phase。当所有的phase都执行完毕后,就会调用Sfinish来将整个的验证平台关掉。

对于component()而言,用户可以在run_phase()中使用phase.raise_objection()/phase.drop_objection()来控制run phase退出。对于uvm_top或者uvm_test_top应该尽可能少地使用set_drain_time()。

//挂起objection
raise_objection(uvm_object obj=null,string description="",int count=1)
//落下objection
drop_objection(uvm_object obj=null,string description="",int count=1)
//设置退出时间
set_drain_time(uvm_object obj=null,time drain)

控制objection的最佳选择

在monitor和reference model中,都有类似的情况,它们都是无限循环的。因此一般不会在driver和monitor中控制objection

一般来说,在一个实际的验证平台中,通常会在以下两种objection的控制策略中选择一种:

  • 第一种是在scoreboard中进行控制。,scoreboard的main_phase被做成一个无限循环。如果要在scoreboard中控制objection,则需要去除这个无限循环,通过config_db:;set的方式设置收集到的transaction的数量pkt_num,当收集到足够数量的transaction后跳出循环。
task my_scoreboard::main_phase(uvm_phase phase); phase.raise_objection(this); fork while(1) begin exp_port.get(get_expect); expect_queue.push_back(get_expect); end for(int i=0;i<pkt_num;i++) begin act_port.get(get_actual); ...end join_any phase.drop_objection(this);
endtask

上述代码中将原本的fork.join语句改为了fork…join_any。当收集到足够的transaction后,第二个进程终结,从而跳出fork…join_any,执行drop_objection语句。

  • 第二种,在sequence中提起sequencer的objection,当sequence完成后,再撤销此objection。

以上两种方式在验证平台中都有应用。其中用得最多的是第二种,这种方式是UVM提倡的方式。UVM的设计哲学就是全部由sequence来控制激励的生成,因此一般情况下只在sequence中控制objection

这篇笔记参考《UVM实战》、《芯片验证漫游指南》和某验证视频整理而成,仅作学习心得交流,如果涉及侵权烦请请告知,我将第一时间处理。

(7)UVM objection机制相关推荐

  1. UVM objection机制

    objection的raise和drop主要用于引入结束仿真的问题.通常用于需要消耗时间的task中. 当所有组件的run_phase的objection全部drop下后,run_phase才会结束. ...

  2. UVM的objection机制

    UVM通过objection机制来控制验证平台的关闭.在每个phase中,UVM会检查是否有objection被提起(raise_objection),如果有,那么等待这个objection被撤销(d ...

  3. UVM中objection机制学习

    文章目录 objection机制介绍 objection使用注意点 代码实例 objection机制介绍 在UVM中可以通过drop_objection来通知系统可以关闭验证平台,且在drop_obj ...

  4. UVM factory机制源码探微

    文章目录 1. UVM factory机制的使用 2. class 在factory 中的注册过程 2.1. `uvm_component_utils() 2.1.1. m_uvm_component ...

  5. UVM config_db机制源码探微

    文章目录 1. uvm_config_db 基础 1.1. 简单set 1.2. 多重set 2. uvm_resource 2.1. uvm_resource_base 2.2. uvm_resou ...

  6. 【UVM实战】第五章:UVM验证平台的运行(2)objection机制

    文章目录 5.2.1.objection与task phase 5.2.2.参数phase的必要性 5.2.3.控制objection的最佳选择 5.2.4.set_drain_time的使用 5.2 ...

  7. UVM phase机制(一)

    UVM的执行严格按照phase机制在执行的,顺序是: ->build_phase ->connect_phase ->end_of_elaboration_phase ->st ...

  8. 02、UVM工厂机制

    一.工厂机制的意义 工厂机制也是软件的一种典型设计模式,UVM工厂的存在就是为了更方便地替换验证环境中的实例或者注册了的类型,同时工厂的注册机制也带来了配置的灵活性. 这里的实例或者类型替代,在UVM ...

  9. (3)UVM 工厂机制

    工厂机制 文章目录 工厂机制 一.工厂的意义 二.工厂机制 三.构建函数new 四.uvm_coreservice_t类 关注作者 工厂(factor)机制是UVM的真正魅力所在.工厂机制也是软件的一 ...

最新文章

  1. 什么是可重入函数和不可重入函数
  2. java中的集合_Java中集合中的基本概念
  3. stdthread(3)detach
  4. fiddler抓包工具使用技巧
  5. celery监控服务器性能,Python:使用celery处理多个服务器上的参数列表
  6. 飞天茅台也可以在天猫上购买了,售价1499元!
  7. Part 4 —— Go 模块:v2 及更高版本
  8. eclipse svn 忽略 target/.project /.classpath /.settings等 目录
  9. 国外企业级区块链 联盟链
  10. 计算机添加pdf打印机驱动,win10系统添加pdf打印机的解决方案
  11. Http状态代码指示
  12. 打印机驱动无法安装到计算机是,电脑打印机无法安装驱动的解决方法
  13. Ceph 分布式存储架构解析与工作原理
  14. 专题:手把手学习硬件基础------8、驱动电路
  15. Mac Catalina系统关闭/打开开机duang音效
  16. 录屏——制作gif图片——压缩图片大小
  17. html 输入框标签讲解,input标签详解
  18. 从事数据科学Python和R语言学哪个好?
  19. .Net 官方学习文档
  20. spring security登陆认证成功后无法控制权限

热门文章

  1. 8种方案,保证缓存和数据库的最终一致性
  2. 众包综述——关于众包的一些研究方向
  3. 病毒是计算机软件吗,Win10系统是否需要安装防病毒软件,例如计算机管理器?...
  4. 【数据结构:线性表】单链表
  5. 黑客如何攻击图神经网络?别小看土豪转账一分钱
  6. 经验分享 | Arcgis模型构建器实现批处理
  7. jQuery html()方法获取tr/td/th标签的HTML的代码获取不到,只能获取到里面的值
  8. 加速下载ios的sdk(Speed up the download of xcode)
  9. 中国商品交易市场统计年鉴(2001-2020年)
  10. 基于SpringBoot家庭理财系统(Java项目)