UVM objection机制

objection的raise和drop主要用于引入结束仿真的问题。通常用于需要消耗时间的task中。

当所有组件的run_phase的objection全部drop下后,run_phase才会结束。

控制objection的最佳选择

因为只要有一个phase中的objection没有drop,则这个phase不会终止执行。所以整个环境的运行可以只在一个phase中进行objection的raise和drop。那么在哪里控制会更好?

起初在driver中进行,但是通常driver都是一个无限循环的代码。这样的话,drop就永远不会执行发送。

task driver::main_phase(uvm_phase phase);
phase.raise_objection(this);
while(1) begin
seq_item_port.get_next_item(req);
…//drive the interface according to the information in req
end
phase.drop_objection(this);
endtask

所以,一般验证平台中,通常会在以下两种objection的控制策略

1、scb中,但感觉并不常用

2、seq中:在sequence中提起sequencer的objection,这边seq没有phase,所以提起的是seqr的。(怎么实现)当sequence产生并被dut接收然后进行比较后,drop_objection。因此需要在seq传输过后等待一段时间。这段时间被称作drain_time。通常在对应的phase进行设置。一个phase对应一个drain time,并不是所有的phase都共享一个drain_phase。在没有设置的情况下,drain time的默认值为0。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值