1、UVM 中的phase
1、右边的是task phase,消耗时间的phase;
2、左边的是function phase,不消耗仿真时间;
3、uvm_component 的实例化只能在build_phase中;
4、uvm_object的实例化可以在任何phase完成;
2、phase的执行顺序
1、build_phase自上而下执行,因为只有build了上层才能去例化下层。
对于兄弟关系的uvm component,他们的build_phase执行顺序按照字典的顺序执行,即例化名。
uvm 采用深度优先的uvm树遍历方式。这样叔侄关系的uvm_component的build phase执行的顺序会根据叔叔辈的字典顺序决定。
2、其他function_phase都是自下而上执行的。
3、各个uvm_component 的run_phase是通过fork join形式同时执行的。
3、super.xxx_phase
1、build_phase中的super.build_phase是必须的,因为build_phase自上而下执行,为了使得上层的配置信息生效,必须这样做。
2、uvm_component 类通过扩展,需要保留父类中phase的信息需要加入super.xxx_phase。
4、phase跳转
支持跳转的phase有下面的phase
5、objection机制
在进入到某一phase时,UVM会收集此phase提出的所有objection,并且实时监测所有objection是否已经被撤销了,
当发现所有已经撤销后,那么就会关闭此phase,开始进入下一个phase。
一个phase对应一个drain_time,并不是所有的phase共享一个drain_time。在没有设置的情况下,drain_time的默认值为0。
6、phase、objection的调试
1、simv参数UVM命令行参数UVM_PHASE_TRACE
2、simv参数UVM命令行参数UVM_OBJECTION_TRACE