Objections
Objections
uvm_objection类提供了一种在参与组件和sequences之间共享计数器的方法。
每个参与者可以异步地“提起”和“撤销”异议,这会增加或减少计数器值。
当计数器达到零(意思是从非零值到零)时,出现“全部撤销”状态。 “全撤销”事件的含义取决于特定objection object的预期应用。 例如,UVM phasing机制使用uvm_objection
object来协调每个运行时阶段的结束。 用户流程在phase中启动以提起objection为触发条件,且在phase中结束以撤销objection为触发条件。
当phase的objection计数变为零时,它向phase机制指示每个参与者都同意应该结束phase。
objection处理的细节相当复杂,并且会产生很高的开销。
通常,建议仅使用控制UVM结束的内置object。 建议不要创建和使用您自己的objection。
注意:objection计数传播仅限于组件和sequence。 其他object类型可以参与,但它们必须使用组件或sequence object对象作为context。
Interfaces
uvm_objection类有三个接口或API。
Objection Control
提起和撤销objection以及设定 drain time的方法:
- raise_objection ( uvm_object bj = null, string description = "" , int count = 1).
按count计算源object的objection数,默认为1.objection的提升沿层次结构向上传播; - drop_objection ( uvm_object bj = null, string description = "" , int count = 1).
按计数撤销源object的objection数,默认为1.objection的撤销在层次结构中向上传播。 如果任何组件的objection计数降为0,则首先执行可选的drain_time和该组件的all_dropped()回调。 如果此后objection计数仍为0,则传播进入层次结构中的下一级别; - set_drain_time ( uvm_object bj = null, time drain).
设置给定object的drain time。
建议:
- 在组件的phase method中使用phase.raise_objection / phase.drop_objection,使该组件参与管理phase结束;
- 始终提供描述 - 它有助于调试;
- 通常使用默认计数值;
- 将drain_time的使用限制在uvm_top或顶层test(如果使用的话)。
Objection Status
用于获得关于objection的状态信息的方法:
- get_objection_count ( uvm_object obj)
返回给定object显式提起的objection计数值; - get_objection_total ( uvm_object bj = null)
返回object和所有子类的objection计数值; - get_drain_time ( uvm_object obj)
返回object的 drain time(默认值:0ns)。
display_objections ( uvm_object bj = null, bit show_header = 1)
显示有关object的objection信息。
建议:
- 通常只对调试有用;
- 将+ UVM_OBJECTION_TRACE添加到vsim命令行以打开详细的run-time objection跟踪。 这样可以在不必修改代码和重新编译的情况下进行调试;
- 在调试phase间跳转的问题时,还要添加+ UVM_PHASE_TRACE以增强objection跟踪。