1.作用
实现验证平台的可重用性。
2.步骤
2.1实现一个callback基类
注意:这里callback基类里提供的两个方法必须为virtual类型(目的:为了实现多态)且为空(具体实现内容在子callback类里实现)并且要继承自uvm_callback。
2.2 在组件中调用callback基类中提供的方法
在my_driver.sv中调用callback方法,需要用到两个宏:`uvm_register_cb(CMP,CALLBACK_BASE)、`uvm_do_callbacks(CMP,CALLBACK_BASE,function_or_task)
解析这两个宏:
(1)`uvm_register_cb(CMP,CALLBACK_BASE)
第一个参数CMP:表示要调用callback函数的组件类,这里就是my_driver;
第二个参数CALLBACK_BASE:表示实现callback机制的基类,这里就是my_driver_base_callback
(2)`uvm_do_callbacks(CMP,CALLBACK_BASE,function_or_task)
前两个参数和`uvm_register_cb的两个参数一致;
第三个参数function_or_task:即要调用的callback方法。
2.3 在具体的callback类中实现具体的方法
注意:具体的callback类必须继承自callback基类,这里对pre_send方法进行了重载,这里只是打印了一句信息。
2.4 在特定的testcase中与具体的callback类关联上
在testcase中,首先要例化具体的callback类,最后调用uvm_callbacks#( CMP,CALLBACK_BASE)::add(cmp_inst,callback_inst)将具体的callback类关联到具体的组件中。
解析uvm_callbacks#( CMP,CALLBACK_BASE)::add(cmp_inst,callback_inst):
第一个参数CMP:表示要调用callback函数的组件类,这里就是my_driver;
第二个参数CALLBACK_BASE:表示实现callback机制的基类,这里就是my_driver_base_callback
第三个参数cmp_inst:即要调用callback方法的具体组件实例
第四个参数callback_inst:即实现具体功能的具体callback类的实例