篇4-testcase结束的管理
1.objection
(1) UVM的objection机制实现了组件间的层次状态信息交流;
(2) 每一个phase都有内建的objection,为components和objection间测试行为的同步提供了方法,可以表明什么时候可以安全的结束当前phase;
(3) 通常情况下, component或sequence对objection的使用过程如下:
(3.1) 在activity起始前,raise objection;
(3.2) 在activity终止后, drop objection;
(3.2) 当当前phase的所有raised objection都被终止掉,就会退出该phase;
(4) 当所有的objection都被dropped, 当前phase就结束了; 实际上,这种情况下,可能还需要额外的cycle来确保最后一笔transaction完成; 针对这种情况,有如下解决方法:
(4.1) 方式一:如果有transaction正在进行中, 使用phase_ready_to_end() task重新raise objection;
(4.2) 方式二:设置drain time来引入一段delay;
2.component对objection的使用
(1)可以在uvm_test的派生类中控制objection的raise与drop;
3.sequence对objection的使用
3.1 non-phase aware sequences
(1) user在seq调用前后处理objection的raise与drop;
(2) sequence本身不处理objection;
3.2 phase aware sequences (explicit objection)
(1) 在启动sequence前,为其starting_phase变量赋值;
(2) sequence显式的raise/drop objection;
3.3 phase aware sequences (implicit objection)
(1) 在启动sequence前,指定其starting phase;
(2) 在sequence内部,通常是sequence的new函数内, user调用set_automatic_phase_objection(1)函数;
(3) uvm_sequence_base会在pre/post_start之前或之后自动处理phase的raise与drop;