objection机制

 objection机制与phase之间的同步关系密切!!

一:objection机制概述

1:  在进入到某一phase时,UVM会收集此phase提出的所有objection,并且实时监测所有objection是否已经被drop掉,当发现所有都已经drop掉时,就会关闭次phase,开始进入下一个phase。

2:如果此phase并没有被raise_objection,那么就直接进入下一个phase。

3:如果想执行一些耗时代码,那么一定要在某一component的此phase中进行raise和drop objection。(需要注意的是,这里谈及的phase的raise和drop只针对于run_phase包含的12个动态phase中)

4:植物大战僵尸

二:控制objection的最佳选择

在uvm树中,树的结点如此之多,那么在什么地方控制objection最合理?由于driver,monitor等都是永动机可能phase.drop_objection永远不会被执行到。因此我们可以使用两种方法:

1:在scb中添加参数,对比足够多数量后跳出循环,执行drop_objection.

2:直接在seq中进行phase的raise和drop。

三:set_drain_time的使用

无论任何功能的模块,处理数据时都有其延时,当trans输入到DUT与输出时肯定有一个p的延时时间,如果在最后一笔trans传输结束时立马drop,此时可能DUT还没有输出,因此在最后一个trans发送完毕后要延时p时间才能drop_objection。这种延时对于每一个seq来说是必须的,但是在每个seq中都这样延时并不合理,此时我们需要drain_time这一属性。

task base_test::main_phase(uvm_phase phase);
  phase.phase_done.set_drain_time(this,200);
endtask

uvm_objection phase_done;

drain_time是当每个phase结束之后的延时时间。当UVM在main_phase检测到所有的onjection被drop后,接下来并不会直接进行到下一个phase,而是会检测有没有drain_time,如果有就延时200ns后在到下一个phase。

drain_time是objection机制的一个特性,而且是每个动态phase都会对应一个drain_time。在没有设置的情况下,drain_time默认为0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值