UVM中所有的phase是按照一定的顺序执行的,那么UVM是如何组织的?下面我们详细说明一下。
首先在phase运行之前已经生成了完整的common domain,这个common domain中的node就是执行的顺序。牵扯到的核心函数是
task uvm_phase::m_run_phases();
uvm_root top = uvm_root::get();
// initiate by starting first phase in common domain
begin
uvm_phase ph = uvm_domain::get_common_domain();
void'(m_phase_hopper.try_put(ph));
end
forever begin
uvm_phase phase;
m_phase_hopper.get(phase);
fork
begin
phase.execute_phase();
end
join_none
#0; // let the process start running
end
endtask
变量m_phase_hopper是一个mailbox;
第一步:m_phase_hopper.get(phase):
此时拿到的phase是common_ domain,接着执行代码common_domain::execute_phase()
这个phase的phase_type类型是domain,意味着不会真正执行任何操作,接下来put到m_phase_hopper的是common_domain的唯一后继build_node;
第二步:m_phase_hopper.get(phase):
此时拿到的ph
UVM phase机制执行流程详解

本文详细介绍了UVM相位机制,从m_phase_hopper.get(phase)的五个步骤出发,解析了UVM如何按顺序执行相位。重点讨论了build_phase在UVM_PHASE_EXECUTING阶段构建环境的过程,以及run_phase、run_time_phase的执行特点,特别是objection机制的作用。最后提到了extract_node、check_node、report_node和finial_node的执行顺序。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



