1-phase机制的必要性,phase自动执行的原理,phases及执行顺序(内含process知识点)

参考资料:

(1) uvm启动过程及phase机制实现原理介绍_HelloQili的博客-CSDN博客

(2) UVM1.1应用指南及源代码分析-张强

1.phase机制简介

1.1. phase机制的必要性

在不同的时间做不同的事情;

1.2. phase的自动执行(原理)

(1) uvm_root的run_test task中,调用uvm_phase的一个static task m_run_phases,开始了uvm_phases的启动;

 

注1:上段code中通过process得到进程的句柄;其中process是sv中内建类;

注2: 进程类型的对象在进程产生的时候在内部产生 ,用户不能通过调用new产生进程类型的对象;

注3: 进程类process不能被扩展;

注4: 进程类的self()函数返回当前进程的句柄;上述code中通过self函数得到了fork...join_none这个进程的句柄;

注5:得到进程的句柄后,可以通过控制句柄对进程进行控制,比如通过调用process.kill()函数可以杀死该进程;

(2) m_run_phases中启动forever进程不断get phase,get成功就执行phase的execute_phase task.

(3) uvm_phase的execute_phase task会通过调用traverse task对uvm_components tree上的所有component进行遍历.

(4) ...

2. uvm_phase简介及分类

注1:uvm_phase分为function phase(不耗费仿真时间)和task phase(耗费仿真时间),具体详见下表;

 

3. uvm_phase的执行顺序

注1:run_time phase中的reset_phase, configure_phase, main_phase, shutdown_phase都有与之对应的pre_*_phase和post_*_phase;

注2:run_phase与run-time phase并行运行;

注3:引入run_time phase是为了实现更加精细化的控制;

注4:只有当所有组件均执行完当前phase时,才会接着执行下一个phase(尤其是对于task phase而言);如下图所示,虽然对于A和B而言,都存在一段空白等待事件,但是从整个验证平台的角度来看,各个task phase之间是没有空白的,这可以称作phase间的同步;

注5:phase间的同步不止适用于不同component的各个run-time phase之间,还适用于不同component的run_phase与run_phase之间,以及同一component的run_phase与post_shutdown_phase之间;

3.1. 时间角度:

(1) uvm_phase按照上图所示从上到下的顺序执行,其中run_phase与其他12个run_time phase并行执行.

3.2. 空间角度:

3.2.1. UVM树中有直系关系的component(function phase)

(1) build_phase与finial_phase从上到下执行,其他function phase(如connect_phase)都是自下而上执行.

(2) UVM在build_phase做uvm_component的实例化工作,这也是build_phase从上到下执行的原因;只有parent uvm_component组件例化后,才能进行child uvm_component组件的例化;

3.2.2. UVM树中具有兄弟关系的component(function phase)

(1) 如driver与monitor:执行顺序按照字典序(这里的字典序的排序依据new时指定的名字).

3.2.3. UVM树中叔侄关系的component(function phase)

(1) 如my_scoreboard与my_driver:UVM树采用深度优先的原则,如果i_agt的build_phase执行完毕,接下来执行的是其孩子的build_phase,一直到整棵以i_agt为树根的UVM子树的build_phase执行完毕,之后再执行i_agt的兄弟的build_phase; 

3.2.4. UVM中task phase执行顺序

(1) run_phase, main_phase等task_phase也是按照自下而上的顺序执行. 确切的说,是自下而上的启动(先启动driver的run_phase,然后启动agent的run_phase),同时在运行,并不是说driver的run_phase执行完毕才开始执行agent的run_phase.

posted on 2021-11-14 11:04  知北游。。  阅读(2224)  评论(0编辑  收藏  举报

导航