1.要实现真正的pre_tran,首先要定义上节所说的类A:
1)A 一定要从uvm_callback 派生,pre_tran 一定要是virtual,因为要重载。
2)然后声明一个A_pool。除了指明这是一个A 类型的池子,还有指明这个池子会被那个类使用。
2之后,在my_driver 中如下:
1)声明与A_pool类似,要指明my_driver 和A。
2)main_phase 中调用pre_tran 使用了一个宏。
第一个是调用pre_tran 的类的名字,my_driver。
第二个是哪个类具有pre_tran,A。
第三个是调用的function/task,pre_tran,要顺便给出pre_tran 的参数。
3.以上都是VIP 的开发者应该做的事情,作为VIP 的用户,做如下:
1)首先从A 派生一个类:
2)例化,并加入到A_pool 中:
例化在connect_phase 中完成,然后将my_cb 加入A_pool 中。同时指定是给哪个my_driver 使用的。因为很可能整个base_test 例化多个my_env,从而有多个my_driver。
4.至此一个简单的callback 机制就完成了。大部分callback 机制的使用都与这个例子类似。总结:
1)VIP 开发者。
2)VIP 使用者。
5.既可以使用driver 的factory机制重载,也可以使用callback。