// Internal - Implementation//--------------------------typedefbitedges_t[uvm_phase];// Associative array type for storing predecessor/successor lists// Implementation - Construction//------------------------------protecteduvm_phase_typem_phase_type;protecteduvm_phasem_parent;// our 'schedule' node [or points 'up' one level]uvm_phasem_imp;// phase imp to call when we execute this node// Implementation - State//-----------------------// Could move this to hopper// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvlocaluvm_phase_statem_state;localintm_run_count;// num times this phase has executed// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^protecteduvm_phase_state_changem_state_chg;
endendfunction:get_adjacent_successor_nodesfunctionvoiduvm_phase::get_predecessors(refedges_tpredecessors);foreach(m_predecessors[p])predecessors[p]=1;endfunction:get_predecessorsfunctionvoiduvm_phase::get_successors(refedges_tsuccessors);foreach(m_successors[p])successors[p]=1;endfunction:get_successorsfunctionvoiduvm_phase::get_sync_relationships(refedges_trelationships);foreach(m_sync[i])relationships[m_sync[i]]=1;endfunction:get_sync_relationships// Internal implementation, more efficient than calling get_predessor_nodes on all// of the successors returned by get_adjacent_successor_nodesfunctionvoiduvm_phase::get_predecessors_for_successors(outputedges_tpred_of_succ);bitdone;uvm_phasesuccessors[];get_adjacent_successor_nodes(successors);// get all predecessors to these successorsforeach(successors[s])foreach(successors[s].m_predecessors[pred])