7.25学习记录-phase机制

1.phase机制初识

   UVM中的phase,按照是否消耗仿真时间分为两类,一类是function phase,如build_phase,final_phase不消耗仿真时间,一类是task phase,消耗仿真时间,如run_pahse,图中灰色部分也就是task phase。

2.phase的运行顺序

  上述所有的phase都会按照图中的顺序自上而下的运行。而具体到每一个phase中时。首先build时自上而下(final_phase也是)的运行,也就是先执行agent的build_phase,再执行driver的build_phase。其次connect_phase自底向上,也就是先执行driver和monitor的connect_phase,再执行agent的connect_phase。

  那么问题来了,,对于同一层次,具有兄弟关系的component,如driver和monitor,谁先运行呢?是不是按照实例化的顺序呢?并不是!他们的执行顺序是按照字典序的,也就是new时制定的名字。如下列代码,dddd会先build。

  A_inst0=A::type_id::creat("zzzz".this);

  A_inst1=A::type_id::creat("dddd".this);

  A_inst2=A::type_id::creat("jjjj".this);

  最后谈一下run_phase,run_phase也是自底向上,但是它耗费时间,所以并不会等到下面的phase执行完才执行上面的pahse,而是将这些run_phase通过fork...join_none的形式全都启动。更准确的说是自下而上的启动,同时在运行。

  小结,也就是说在UVM中,build1、build2、build3运行后,connect3、connect2、connect1运行,然后run_phase,最后final_phase运行。

3.UVM中phase机制中run phase和其他的12个Phase是并行执行的吗?

  是的,不同的run_phase是自下而上执行的,而run_phase和这些小的phase是并行执行的,同一个component中12个run-time的phase是顺序执行的。如在同一个component中,各个main phase执行完后,才会执行post_main_phase,而在所有的post_shutdown_phase和run_phase执行完后才会进入extract_phase。

  需要指出的是,run_phase包括了12个phase,而不是将run_phase拆分成了这些小过程。它们共同存在。

4.OVM中其他phase已经存在,run_phase是新引入的,优点是什么?

  分成小的phase是为了实现更加精细化的控制。假如在运行过程中需要对DUT进行一次复位操作,在没有细分之前,需要在scoreboard,reference model等加入一些额外的代码来保证验证平台不会出错,但有了这些小的phase后,只需要在对应reset_phase写好代码,复位操作时通过跳转即可实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值