build_phase是按照自上而下的顺序执行的,在下图中,先执行uvm_test_top的build_phase,再执行env的build_phase。 除了build_phase,所有不耗费仿真时间的phase都是自下而上执行的,对于connect_phase即先执行driver和monitor的connect_phase,再执行agent的connect_phase。 image-20240228151306612 看到这里,很多同学可能就有...
代码的书写顺序会影响代码的实现(代码之间存在依赖关系,如代码B依赖于代码A),所以区分出build_phase、connect_phase等,让被依赖的phase(代码A)先执行,依赖的phase(代码B)后执行,这样可以解决因代码顺序杂乱可能会引发的问题。 2 UVM中phase的执行顺序 按上图所示顺序自上而下执行不同phase,且同类phase执行完后,需...
ag2 = agent::type_id::create("ag2",this);endfunction: build_phasefunctionvoidconnect_phase(uvm_phase phase); uvm_report_info(get_full_name(),"Connect", UVM_LOW);endfunctionfunctionvoidend_of_elaboration_phase(uvm_phase phase); uvm_report_info(get_full_name(),"End_of_elaboration", UVM...
如对于connect_phase即先执行driver和monitor的connect_phase,再执行agent的connect_phase。在build_phase中做实例化的工作时,driver和monitor都是agent的成员变量,所以它们的实例化都要在agent的build_phase中执行。如果在agent的build_phase之前执行driver的build_phase,此时driver还根本没有实例化,所以调用driver.build_ph...
只要把代码填入对应的phase,这些代码就会自动执行。phase 的引入在很大程度上解决了代码顺序杂乱可能会引发的问题。它本质上是通过把代码顺序强制固定来实现这个目的的,如 build_phase 的代码一定在connect_phase之前执行 ,而 connect_phase的代码一定在 end_of_elaboration_phase之前执行等等。遵循 UVM 的这种代码顺序...
事实上,除了build_phase之外,所有不耗费仿真时间的phase(即function phase)都是自下而上执行的。如对于connect_phase即先执行driver和monitor的connect_phase,再执行agent的connect_phase。 (2)于同一层次的、具有兄弟关系的component 现执行顺序是按照字典序的。依据new时指定的名字。假如monitor在new时指定的名字为aaa...
phase机制: uvm中根据是否消耗时间将phase分为function phase和task phase; uvm中所有的Phase的会按照自上而下的顺序执行;对于function phase, 比如build_phase, connect_phase等,在同一时间只有一个phase在执行;但是对于task phase, run_phase和reset_phase, main_phase等12个Phase是并行进行的,此12个phase称为动态...
<1>function phase:不消耗仿真时间,而其也可分成两大类: a. 继承自uvm_bottomup_phase, 在UVM component树中,自下而上的执行, 如connect_phase b. 继承自uvm_topdown_phase, 在UVM component树中,自上而下执行, 如build_phase<2>task phase:消耗仿真时间的,也称动态运行(run-time)phase. ...
除了自上而下的执行方式外,UVM的phase还有一种执行方式是自下而上。事实上,除了build_phase之外,所有的不消耗仿真时间的phase(即function phase)都是自下而上执行的。如对于connect_phase,限制性driver和monitor的connect_phase,再执行agent的connect_phase。