| |
Callback Hooks
为所有基于uvm_component的object定义了以下回调。
建议:
不要使用回调钩子。 它们没有用处,在整个模拟降级仿真性能中会被反复调用。
Objection Mechanics
objection计数在组件层次结构中向上传播,并且在每次显式提起和撤销时由任何组件传播。为每个组成部分保留两个计数器值:对其自己明确提出的objection的计数以及对其及其所有子项(如果有)提出的所有objection的计数。因此,管理main_phase的组件mytest的提起导致mytest的objection计数为1,mytest的总(隐含)objection计数为1,uvm_top为1,即所有UVM组件的隐式顶层。如果mytest.myenv.myagent.mysequencer提出objection,则导致mysequencer的objection计数为1,mysequencer的总(隐含)objection计数为1,myagent为1,myenv为1,mytest为2 和uvm_top为2。撤销objection以相同的方式传播,除了当组件层次结构的任何层次的隐式objection计数达到0时,层次结构中的传播直到用户定义的drain_time(默认值:0)延迟完成并且该组件对all_dropped() 的回调已执行。如果在此期间,在该等级层次或低于该等级层次的情况下重新提出objection,则 all-dropped的条件被否定,并且 all-dropped条件的进一步分层传播被中止。
Raising an objection causes the following:
1.计数参数增加了组件或sequence的源(显式)objection计数;
2.计数参数增加了组件或sequence的总(隐式)objection计数;
3.如果是组件,则调用其raise()回调;
4.如果parent为非null,则对父级重复步骤1-3。
序列的父级是它当前正在运行的sequencer组件。 传播不会发生在sequence层次结构中。
虚拟sequences(其m_sequencer句柄为null)不会传播。
Dropping an objection causes the following:
1.由count参数减少组件或sequence的源(显式)objection计数;
2.计数参数减少了组件或sequence的总(隐式)objection计数;
3.如果是组件,则调用其dropped()回调函数;
4.如果object的总objection计数不为零且父级为非空,则对父级重复步骤1-3;
5.如果object的总objection计数为零,则分叉执行以下内容(drop_objection是非阻塞的):
- 等待drain time延迟完成;
- 调用all_dropped()这个虚拟task(它是一个回调task)并等待完成;
- 通过以后发生的任何提起或撤销objection来调整计数参数。 如果撤销计数仍为非零,请转到第4
步。