平台有很多的代码,如基本配置的代码、实例化对象的代码、端口链接的代码。显然,我们需要先实例化对象,在连接端口实现平台可以正常的工作,因此UVM引出phase机制,实现平台各个phase有序进行。那么各个phase的执行顺序是怎么样的呢?
1.从phase的维度所有function phase 的执行顺序都是自上向下执行:build_phase--->connect_phase--->end_of_elaboration...........
2、同一个phase在各个组件执行的顺序是下而上的:比如connect_phase:先在driver 实例化,再在input_agent实例化,最后在env实例化(build_phase正好相反。)
3、run_phase和12个分支phase是并行执行,也就是同步执行
run_phase执行中:run_phase-----------
12分支:pre_reset--->reset_phase-----
4、如果run_phase和12个分支phase内有raise_phase, drop_phase.后续的phase会有延迟。比如:pre_reset执行以后马上是reset_phase,假如pre_reset 有raise_phase, drop_phase会依次执行raise_phase, drop_phase内部的语句在进入reset_phase.
5、由于run_phase和12个分支phase是并行执行,所以不好通过控制run_phase和12个分支phase控制平台,因此在真实的平台中几乎没有用run_phase和12个分支phase。