目录
3.1.3 uvm_build_phase::exec_func
3.2.1 uvm_bottomup_phase::traverse
3.2.2 uvm_connect_phase::execute
3.2.3 uvm_connect_phase::exec_func
3.3.1 uvm_task_phase::traverse
3.3.3 uvm_run_phase::exec_task
0. 引言
初始调用run_test后,调用了uvm_phase::m_run_phase(),进而开始在后台进程中执行phase,而phase实例是从m_phase_hopper这个mailbox中拿到的。在上一章,主要讲述了第一个要执行execute_phase的phase实例——get_common_domain返回的domain,它的后继节点为build_phase,那么是如何再将build phase node添加到m_phase_hopper中?后续又怎么执行呢?核心即是本文所介绍的execute_phase。主要是过程行为,没有深入细枝末节。
1. phase state
先看一下phase node都有什么状态,如下枚举
typedef enum { UVM_PHASE_UNINITIALIZED = 0,
UVM_PHASE_DORMANT = 1,
UVM_PHASE_SCHEDULED = 2,
UVM_PHASE_SYNCING = 4,
UVM_PHASE_STARTED