set_drain_time的使用

文章讨论了在UVM测试中,如何通过set_drain_time属性来管理sequence中的延时,确保在发送最后一个交易后等待适当的处理时间,避免因DUT响应变化导致的同步问题。它解释了如何在phase结构中使用set_drain_time来协调各个阶段的执行顺序。
摘要由CSDN通过智能技术生成
set_drain_time的使用

无论任何功能的模块,都有其处理延时。如图1a所示,0时刻DUT开始接收输入,直到p时刻才有数据输出。

图1
  • 在sequence中,n时刻发送完毕最后一个transaction,如果此时立刻drop_objection,那么最后在n+p时刻DUT输出的包将无法接 收到。因此,在sequence中,最后一个包发送完毕后,要延时p时间才能drop_objection:
  • 要延时的时间与激励有很大关系。图1a中处理的是短包,所以延时只有p;图1b中处理的是长包,延时的时间大于图1a。在随机发送激励时,延时的大小也是随机的。所以无法精确地控制延时,只能根据激励选择一个最大的延时。
  • 这种延时对于所有sequence来说都是必须的,如果在每个sequence中都这样延时,显然是不合理的。如果某一天,DUT对于同 样的激励,其处理延时变大,那就要修改所有的延时大小。
  • 考虑到这种情况,UVM为所有的objection设置了drain_time这一属性。所谓drain_time,drain_time的设置方式为:

代码清单:

24 task base_test::main_phase(uvm_phase phase);
25 phase.phase_done.set_drain_time(this, 200);
26 endtask
  • phase_done是uvm_phase内定义的一个成员变量:
  • 当调用phase.raise_objection或者phase.drop_objection时,其实质是调用phase_done的raise_objection和drop_objection。当UVM在 main_phase检测到所有的objection被撤销后,接下来会检查有没有设置drain_time。如果没有设置,则马上进入到 post_main_phase,否则延迟drain_time后再进入post_main_phase。如果在post_main_phase及其后都没有提起objection,那么最终会 前进到final_phase,结束仿真。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值