篇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;

相关