Hi all,
There is problem with having callbacks with type parameterized classes:
1. Callback class:
typedef class driver; virtual class driver_cb extends uvm_callback; virtual task drive( driver driver, ref transaction req, ref transaction rsp ); endtask function new(string name="driver_cb"); super.new(name); endfunction endclass
2. Class with type parameter:
class driver #( type transaction_t = transaction_base ) extends uvm_driver #(transaction_t); `uvm_component_param_utils_begin(driver#(transaction_t)) `uvm_component_utils_end `uvm_register_cb(driver#(transaction_t), driver_cb) function new(string name, uvm_component parent); super.new(name, parent); endfunction virtual task drive(transaction_t req, transaction_t rsp); endtask task main_phase(uvm_phase phase); `uvm_do_callbacks(driver#(transaction_t), driver_cb, drive(this, req, rsp)); endtask endclass typedef uvm_callbacks #(driver, driver_cb) driver_cb_pool;
Compiler claims about type incompatibility and expects that type parameter should be "transaction_base" only.
Any help is welcome.