I have a sequencer:
class l3_ack_sequencer #(type REQ = uvm_sequence_item) extends uvm_sequencer #(REQ); `uvm_component_utils_begin(l3_ack_sequencer#(REQ)) `uvm_component_utils_end uvm_analysis_imp #(REQ, l3_ack_sequencer) generate_res; function new (string name, uvm_component parent); super.new(name, parent); generate_res = new("generate_ack", this); endfunction virtual function void build_phase(uvm_phase phase); super.build_phase(phase); endfunction virtual function void connect_phase(uvm_phase phase); super.connect_phase(phase); endfunction // Generate ack virtual function void write(REQ item); endfunction endclass
Then I declare a handle somewhere:
l3_ack_sequencer #(core_l3q_ireq_tran) l3r_ireq;
Using Synopsys VCS I have an error:
Error-[ICTTFC] Incompatible complex type usage
.../l3_ack_sequencer.sv, 33
Incompatible complex type usage in task or function call.
The following expression is incompatible with the formal parameter of the
function. The type of the actual is 'class $unit::l3_ack_sequencer#(class
$unit::core_l3q_ireq_tran)', while the type of the formal is 'class
$unit::l3_ack_sequencer#(class uvm_pkg::uvm_sequence_item)'. Expression:
this
Source info: uvm_analysis_imp_8::new("generate_ack", this)
Can anyone help me to solve this problem or explain why it cant be solved?