在DV中,我们可以使用factory,override机制来实现方法的重载,继而修改现有类的方法和属性。想象一下下面的一个应用场景,driver从sequencer拿到transaction,需要根据一些条件进行一些特殊处理才可以驱动到interface上,而现有的环境没有做这方面的处理。这个时候我们可以重载这个类,修改这个方法(用户的角度),但是TB开发人员(有时候不是用户),比如VIP开发的时候,开发人员可能无法穷经所有的情况,或者锁着项目的迭代,出现了一些新的特性,在TB中使用回调函数变成了一种可选项,这里我们介绍一下uvm_callback是怎么使用的,以及内部的机理是什么。
回调函数基本的3个步骤,
(1)注册
(2)添加
(3)调用
class mycb extends uvm_callback;
virtual function void do_processing();
endfunction
endclass
class my_comp extends uvm_component;
`uvm_register_cb(my_comp,mycb);
task run_phase(uvm_phase phase);
`uvm_do_callacks(my_comp,mycb,do_processing());
endtask
enclass
在上述代码中,`uvm_register_cb(my_comp,mycb)起到的是注册是作用。
define uvm_regis