In reply to Tudor Timi:
I mean uvm_analysis_export/ports that are additional fields in the extended class (not present in the parent one) and that need to be connected in the connect_phase of the (extended) environment wrapper class.
As far as I see, set_type_override is just useful for modifying class task/functions behaviour, but variables (and for this reason also uvm_analysis_export/ports) cannot be referred.
For example:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// class a_ref_model
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class a_ref_model extends uvm_component;
`uvm_component_utils_begin(analysis_ref_model)
`uvm_component_utils_end
uvm_analysis_export #(trans1) monitor1_export;
uvm_analysis_export #(trans2) monitor2_export;
// Analysis FIFOs to provide blocking capabilities to each kind of transaction
uvm_tlm_analysis_fifo #(trans1) container_1;
uvm_tlm_analysis_fifo #(trans2) container_2;
function new(string name, uvm_component parent);
super.new(name, parent);
endfunction: new
function void build_phase(uvm_phase phase);
super.build_phase(phase);
....
endfunction: build_phase
function void connect_phase(uvm_phase phase);
....
endfunction: connect_phase
task run_phase(uvm_phase phase);
....
endfunction: run_phase
endclass: a_ref_model
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// class a_custom_ref_model
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class a_custom_ref_model extends a_ref_model;
// configuration object
analysis_config cfg;
`uvm_component_utils_begin(a_custom_ref_model)
`uvm_field_object(cfg, UVM_DEFAULT)
`uvm_component_utils_end
uvm_analysis_export #(trans3) a_monitor_export;
uvm_analysis_port #(trans3) updated_a_ap;
function new(string name, uvm_component parent);
super.new(name, parent);
endfunction: new
function void build_phase(uvm_phase phase);
super.build_phase(phase);
....
endfunction: build_phase
function void connect_phase(uvm_phase phase);
....
endfunction: connect_phase
task run_phase(uvm_phase phase);
....
endfunction: run_phase
endclass: a_custom_ref_model
This are the 2 classes. While creating the wrapper a_custom_env as an extension of a_env it is needed to connect for example a_monitor_export to something. Using the a_ref_model (and then set_type_override in the test) it generates a compilation error since such export it is not part of the base class.
Thanks, sorry if the problem is unusual or not standard.