build_phase是按照自上而下的顺序执行的,在下图中,先执行uvm_test_top的build_phase,再执行env的build_phase。 除了build_phase,所有不耗费仿真时间的phase都是自下而上执行的,对于connect_phase即先执行driver和monitor的connect_phase,再执行agent的connect_phase。 image-20240228151306612 看到这里,很多同学可能就有...
build_phase(准备阶段): build_phase是UVM中的一个“准备阶段”,它的作用就像是在开始建造房子之前,你需要准备好所有的建筑材料和蓝图。这个阶段不需要任何实际的“仿真时间”,也就是说,它发生在仿真计时器开始走之前。在UVM中,build_phase是一个函数(function),它被设计为在仿真开始前就完成执行,因此当你查看仿...
uvm_build_phase, uvm_final_phase继承于uvm_topdown_phase, 其余function phase继承于uvm_downtop_phase, task phase继承于uvm_task_phase。 对于build_phase, 函数exectue_phase会调用m_imp.traverse(top,this,UVM_PHASE_EXECUTING), traverse()函数在uvm_topdown_phase中定义,build_phase从top to down的执行顺...
反之 若monitor为mon,driver为drv,那么将会先执行driver的build_phase。 我们本节提到的bulid_phase、connect_phase、run_phase这些都是时间的概念,而上面这个图中各个component的关系是空间的概念。在执行时,先把各个component中的build_phase执行完,再执行各个component的connect_phase,再执行各个component的run_phase。
1)创建UVM默认的所有phases,即我们熟知的build phase、connect phase、run phase、main phase等等,并将其组织成我们前面会提到的有向无环图结构;实现这一步主要是靠调用uvm_domain中的get_common_domain 2)开始运行(1)创建组织好的phases,当然如果有用户自定义的phase,也会在规定的点运行起来;实现这一步主要是靠...
phase机制可以将 UVM仿真阶段层次化,即使各个phase按先后顺序执行,同时也使处于同一phase中的层次化组件之间按顺序执行,达到同步仿真过程的效果。 phase机制主要包括以下三个主要部分,并按如下顺序进行: Build Phases—— 验证平台的创建、连接、配置;包含3个子phase; ...
UVM中的phase,按照其是否消耗仿真时间($time打印出的时间)的特性,可以分成两大类,一类是function phase,如build_phase、connect_phase等,这些phase都不耗费仿真时间,通过函数来实现;另外一类是task phase,如run_phase等,它们耗费仿真时间,通过任务来实现。给DUT施加激励、监测DUT的输出都是在这些phase中完成的。在图...
UVM:5.1.3 phase 的执行顺序 1.UVM 在build_phase 里做实例化工作,假如在其他phase 实例化一个uvm_component,那么系统会报错。 2.uvm_object 可以在任何phase 实例化。 3..除了build_phase 外,所有function phase都是从叶到根执行。 4.对于兄弟关系的component,如driver 与monitor。同一phase 的执行顺序是字典...
UVM:5.1.5 super.phase 的内容,1.build_phase:自动获取通过config_db::set设置的参数。如果要关闭此功能,可以不用super.build_phase。2.除了build_phase外,其他phase几乎没做任何相关的事:1)除了build_phase外,其他phase完全可以不必加上super.xxx_phase语句。如
UVM将phase简单归为两大类,一类是通用phases,包括build、connect、end_of_elaboration、start_of_simulation、run和extract。如果想将新定义的phase插入到通用phase之间的话,需要通过get_common_domain()来获取handle。 uvm_domain dm=uvm_domain::get_common_domain(); ...