7.25学习记录-objection机制

1.drop之前一定要raise

  objectionb本身的意思是反对,而drop_objection是撤销反对意见,试想,如果在和别人沟通的时候,你还没提出反对意见,就忽然说撤销刚才的反对意见,会不会让人觉得奇怪呢,所以为了良好的沟通,drop之前一定要先raise。

2.验证平台的关闭

  当进入某一phase时,UVM会收集此phase提出的所有objection,并且实时监控所有的objection是否被撤销。当发现所有被撤销后,就会关闭此phase,进入下一phase,当发现所有phase执行完毕后,就会调用$finish关掉整个验证平台。故在UVM中想执行一些耗费时间的代码,就要在此phase下任意一个component中至少raise一次objection。加延时是没用的(如#100)。

3.特殊的run_phase

  结论2不适用于run_phase,run_phase和所有动态运行的phase是并行的,所以12个动态运行的phase有objection被提起的话,run_phase不用raise就可以自动执行。也就是说run_phase有两个选择可以使其中代码运行。选择1是其他动态运行的phase有objection被raise,但此时run_phase的运行手其他phase控制。选择2是run_phase自己raise,这种情况下运行时间由自己控制。

4.objection的位置

  上述我们了解了挂起与撤销,以及objection是如何控制仿真结束的,那objection应该放在哪里呢??哪里都可以放吗?首先不建议放在driver和monitor中,因为这两者都是无限循环的,会导致无法退出。其次可以放在scoreboard中,最后最好是放在sequence中,在sequ中提起sequencer的objection,当sequence完成后,再撤销objection。毕竟UVM的设计哲学就是全部用sequence来控制激励的生成。

5.set_drain_time的使用

  为什么要使用:任何功能模块都存在延时,而DUT的输入和输出之间也存在延时。在sequence中,n时刻发送完最后一个tranction,如果此时drop_objection,那么n+p时刻DUT输出的包无法收到。因此,drop后需要延时操作。

  怎么使用:每个sequence都需要延时,而延时的大小是随机的,我们只能根据吉利选择一个最大的延时。而假设我们设置好延时后,某一天,DUT对于同样的激励,延时变大,我们又要一个个改很麻烦,所以我们通过set_drain_time设置统一的延时。在运行过程中,drop后UVM会看有没有set_drain_time,有的话等待,没有的话进入post_configure_phase。

  还有一点要提的是,每一个phase用一个set_drain_time,并不是所有phase共享一个drain_time。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值