UVM-Objection机制
objection与task phase
object字面意思是“反对”,通过drop来通知系统关闭验证平台,drop之前一定要先raise。
代码一:
task main_phase(uvm_phase phase);phase.raise_objection(this);
......phase.drop_objection(this);
endtask
当一个phase中所有objection都已经撤销后,就会关闭此phase进入下一个phase,当所有phase执行完毕后,就会调用$finish来将整个验证平台关掉。
代码二:
task driver::main_phase(uvm_phase phase); phase.raise_objection(this); #100; phase.drop_objection(this);
endtask
task monitor::main_phase(uvm_phase phase); while(1) begin
...... end
endtask
如果main_phase中没有raise和drop,即没有任何objection被提起,那么他会直接跳转到post_main_phase,此时假设进入main_phase的时刻为0,那么进入post_main_phase的时刻也是0。如果想要执行一些耗费时间的代码,那么要在此phase下任意一个component中至少提起一次objection。
以上结论只适用于12个run-time的phase,不适用于run_phase。run_phase与动态运行的phase是并行运行的,如果12个动态运行的phase中有objection被提起,那么run_phase根本不需要raise_objection就可以自动执行。
图1形象地展示了component与phase之间的关系,这里不再赘述。
图1 component与phase
参数phase的必要性
Phase的引入是为了解决何时结束仿真的问题,它更多面向main_phase等task phase,而不是面向function phase,因此一般不用于function phase中。
控制objection的最佳选择
在UVM树的什么位置控制objection比较合适呢?
尽量不要在driver和monitor中raise和drop:因为driver和monitor中通常是一个while(1)无限循环的代码,在while循环的end后面drop将永远不会被执行到。
通常会在以下两种objection的控制策略中选择一种:
1、在scb中控制,scb中的main_phase假如是一个无限循环,则通过config_db::set方式设置收集到的transaction的数量pkt_num,当收集到足够数量后跳出循环。
2、用得最多的一种:在seq中提起objection,完成后撤销。UVM的思想就是全部由seq来控制激励的生成,因此一般只在seq中控制objection。
set_drain_time的使用
0时刻DUT开始接收输入,直到p时刻才有数据输出,若n时刻发送完毕最后一个transaction立刻drop,那么在n+p时刻DUT输出的包将无法接收到。因此sequence中,最后一个包发送完毕后要延时p才能drop。延时对所有seq都是必须的,如果在每个seq中都这样延时,显然是不合理的。
UVM为所有的objection设置了drain_time属性:
task base_test::main_phase(uvm_phase phase);phase.phase_done.set_drain_time(this,200);
endtask
phase_done是uvm_phase内部定义的成员变量:
//UVM源代码
uvm_objection phase_done;//phase done objection
当调用phase.raise_objection或者phase.drop_objection时,其实质是调用phase_done的raise和drop,接下来当所有objection被撤销后,检查有没有设置drain_time,若没有设置,则马上进入到post_main_phase。如果post_main_phase及后面都没有及其objection,则最终前进到final_phase,结束仿真。
UVM-Objection机制相关推荐
- (7)UVM objection机制
(7)UVM objection机制 objection机制 控制objection的最佳选择 UVM-1.1之后,结束仿真的机制有且只有一种,那就是利用objection挂起机制来控制仿真结束. o ...
- UVM objection机制
objection的raise和drop主要用于引入结束仿真的问题.通常用于需要消耗时间的task中. 当所有组件的run_phase的objection全部drop下后,run_phase才会结束. ...
- UVM的objection机制
UVM通过objection机制来控制验证平台的关闭.在每个phase中,UVM会检查是否有objection被提起(raise_objection),如果有,那么等待这个objection被撤销(d ...
- UVM中objection机制学习
文章目录 objection机制介绍 objection使用注意点 代码实例 objection机制介绍 在UVM中可以通过drop_objection来通知系统可以关闭验证平台,且在drop_obj ...
- UVM factory机制源码探微
文章目录 1. UVM factory机制的使用 2. class 在factory 中的注册过程 2.1. `uvm_component_utils() 2.1.1. m_uvm_component ...
- 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 ...
- 【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 ...
- UVM phase机制(一)
UVM的执行严格按照phase机制在执行的,顺序是: ->build_phase ->connect_phase ->end_of_elaboration_phase ->st ...
- 02、UVM工厂机制
一.工厂机制的意义 工厂机制也是软件的一种典型设计模式,UVM工厂的存在就是为了更方便地替换验证环境中的实例或者注册了的类型,同时工厂的注册机制也带来了配置的灵活性. 这里的实例或者类型替代,在UVM ...
- (3)UVM 工厂机制
工厂机制 文章目录 工厂机制 一.工厂的意义 二.工厂机制 三.构建函数new 四.uvm_coreservice_t类 关注作者 工厂(factor)机制是UVM的真正魅力所在.工厂机制也是软件的一 ...
最新文章
- TCP/UDP对比总结
- 剑指offer:面试题04. 二维数组中的查找
- JSP page指令
- Linux Kernel TCP/IP Stack — L1 Layer
- Java的char数据类型存储一个中文字符
- Ubuntu 调节屏幕亮度
- poweramp最完美设置_2020年感恩节,你最想感谢的人是谁?
- ElasticSearch重启策略
- 我发现我的Java重拍了!
- Redis:06---数据库管理
- html与js加载的顺序问题defer 代表延迟(加载完所有html在执行js)
- 数据科学 IPython 笔记本 7.15 高性能 Pandas
- 解决HttpServletRequest InputStream只能读取一次问题
- mysql数据库一列多值查询
- vue的路由怎么换端口_vue.js如何更改默认端口号8080为指定端口的方法
- java调用python脚本并向python脚本传递参数
- Windows10如何彻底卸载MySQL
- Jmeter常用插件下载
- 计算机信息单位换算中的t是,算力单位换算(算力单位t)
- Unity画面像素化shader
热门文章
- 股价下跌由少数人决定
- ios 打印 详细错误日志_【专家专栏】林相宇 | IOS错误日志抓取和分析
- 2018清北学堂普及组冲刺班6连考总结反思
- netty客户端连接多个服务端
- 【顺序结构】线性表之单链表
- 【爬虫实战】python爬取虎牙直播间封面美女图片
- arcgis 切片 多少级_arcgis切片的一些经验和尝试.doc
- 台式计算机配置怎么看,怎么样看台式电脑配置高低 ?
- Removing obsolete files from server... Could not clean server of obsolete files: 前言中不允许有内容。
- 戴尔服务器映射设置,2020年最新版图解戴尔iDRAC服务器远程控制设置.docx