管理test case结束机制介绍

uvm中每个phase都有一个内置的objection ,为components和objects提供了同步方法,指示何时可以安全地结束这个phase,最终结束整个test case。
一般来说,由一个components或sequence在激励开始时raise phase objection,激励处理完毕之后drop objection。一旦所有提起的objections被dropped,该phase就终止了。
在仿真中,一个master agent可能需要在runphase停止之前完成所有的读写操作,一个reactive slave agent不会drop objection,因为它只是一直被动地处理事务。对于sequence来说,有三种可能的方式可以处理phase objection。
a)
class test extends ovm_test;task run_phase(uvm_phase phase); phase.raise_objection(this); seq.start(seqr); phase.drop_objection(this); endtaskendclass  
b)
class test extends ovm_test;task run_phase (uvm_phase phase); seq.set_starting_phase(phase); seq.start(seqr); endtaskendclassclass seq extends uvm_sequence #(data_item);task body(); uvm_phase p = get_starting_phase(); if(p) p.raise_objection(this); //some critical logic    if(p) p.drop_objection(this); endtaskendclass  
c)
class test extends ovm_test;task run_phase (uvm_phase phase); seq.set_starting_phase(phase); seq.start(seqr); endtaskendclassclass seq extends uvm_sequence #(data_item);function new(string name = seq);super.new(name); set_automatic_phase_objection(1);endfunction task body();// sequence logic with no objection// as it is already handled in the base classendtaskendclass  
上面的三种方式只需要实现其中一种即可。
当所有objections都被dropped,当前运行的phase就结束了。在仿真过程中,可能需要一些额外的cycle来向scoreboard传输最后一笔transaction。
为了适配这种情况,可以使用phase_ready_to_end()方法在必要时刻重新提出phase objection。
另外,也可以设置一个drain time ,在组件所有objections都被dropped之后注入一个延迟。一般是在env或者test级设置drain time。


原来自动驾驶界的潜伏者竟然是它?
电瓶修复—想自己配电池酸液的进(收藏备用)
生活用水下水道多参数在线监测系统好用吗
云桌面如何加速医疗行业数字化的发展
具有保护功能的单芯片电池电量监测计
管理test case结束机制介绍
格力空调通用维修技术资料
戴尔科技集团用x86服务器和小型机来承载Oracle RAC这种高端场景?
织物感应式静电测试仪的各项技术参数是什么
orinda无线网桥BR5822/BR5822EO
三镜头手机时代已经到来_三镜头到底强在哪?
无人机搭载红外热成像技术赋能建筑外墙检测
可视门铃设计难题解决方法与技术研究
西门子推出集成了人工智能芯片的全新模块 主要针对Simatic控制系统
英国比克科技发布用于调试PLC应用的Modbus解码软件
从一代机皇,到销量惨淡、年亏10几亿,魅族没落的真相
适应高占比大规模新能源出力特性的电力市场体系探索
Model S P85D超强3.4破百吓坏大妈 揭秘神秘字母D
隔离变压器和控制变压器区别
特斯拉Model3销售毛利率或将达到30%,用实力“打脸”批评者