Calling of build phase?

In reply to chris_le:

The fact that your current UVM implementation creates components in a predictable order does not change the fact that you should NOT rely on components being created in any particular order. With the standardization of IEEE 1800.2, much of the internals of UVM ARE no longer dictated by the standard in order to give developers and vendors the opportunity to optimize UVM implementations.
The only thing you can rely on is that a parent will create it child(ren) in its build_phase() method, and the child(ren)'s build_phase() method will run sometime later, after completion of the parent’s build_phase(). PERIOD.
If you do anything else, it might work now, but there is no guarantee that it will work with your next version of UVM. And if it doesn’t work in the future, it will be because you broke the rules, not because the UVM implementation changed.
I can’t say this strongly enough:
DO NOT ASSUME ANY ORDER TO THE EXECUTION OF THE BUILD_PHASE() METHODS OF ANY UVM COMPONENTS OTHER THAN THAT A PARENT’S BUILD_PHASE WILL COMPLETE BEFORE THE CHILD(REN)'S BUILD_PHASE GETS CALLED.