Out of File declaration of tasks from UVM testcase

HI ,

I am using out of file declaration for testcase but getting compilation, Quick help is appreciated.

Compile error:: ** Error: umi_basic_access_test.sv(84): (vlog-2731) Method never defined for ‘task’ ‘umi_WRITE’.
** Error: /umi_basic_access_test.sv(236): Number of actuals and formals does not match in task call.

class umi_basic_access_test extends chip_base_test;
  `uvm_component_utils(umi_basic_access_test)
 
  virtual umi_if umi_virtual_vif_h;
  virtual S2P_if S2P_virtual_vif_h;
 
  extern function new(string name = "umi_basic_access_test", uvm_component parent=null);
 
  extern virtual function void build();
 
  extern virtual function void connect();
 
  extern virtual task run_phase(uvm_phase phase);
 
  extern virtual task umi_WRITE(bit [19:0] umi_addr, bit[7:0] umi_data);
 
endclass: umi_basic_access_test
 
 
function umi_basic_access_test::new(string name = "umi_basic_access_test", uvm_component parent=null);
 
 
  super.new(name, parent);
endfunction
 
//--------------------------------------------------------------------
// build
//--------------------------------------------------------------------
function void umi_basic_access_test::build();
 
 
  super.build();
  `uvm_info(get_type_name(), "build method of umi_basic_access_test", UVM_LOW);
endfunction : build
 
//-----------------------------------------------------------------------------
// connect
//-----------------------------------------------------------------------------
function void umi_basic_access_test::connect();
 
    
    typedef uvm_vif_container #(virtual umi_if) umi_vif_container_t;
    umi_vif_container_t umi_vif_container_h;
 
    typedef uvm_vif_container #(virtual S2P_if)    S2P_vif_container_t;
     S2P_vif_container_t S2P_vif_container_h;
 
  super.connect();
  `uvm_info(get_type_name(), "Connect method of umi_basic_access_test", UVM_LOW);
 
    if(!get_config_object("umi_vif_container_h", dummy, 0)) begin
      uvm_report_error("build", "no virtual interface available");
    end
    else begin
      if(!$cast(umi_vif_container_h, dummy)) begin
        uvm_report_error("build", "virtual interface is incorrect type");
      end
      else begin
        umi_virtual_vif_h = umi_vif_container_h.m_vif_h;
      end
    end
 
     if(!get_config_object("S2P_vif_container_h", star, 0)) begin
      uvm_report_error("build", "no virtual interface available");
    end
    else begin
      if(!$cast(S2P_vif_container_h, star)) begin
        uvm_report_error("build", "virtual interface is incorrect type");
      end
      else begin
        S2P_virtual_vif_h = S2P_vif_container_h.m_vif_h;
      end
    end
 
 
  
endfunction : connect
 
//--------------------------------------------------------------------
// run
//--------------------------------------------------------------------
task umi_basic_access_test::run_phase(uvm_phase phase);
 
 
     umi_WRITE(20'h30001,8'h45);
 
#100ns;  
 
  `uvm_info(get_type_name(), "Finishing test umi_basic_access_test", UVM_LOW);
  phase.drop_objection(this, "run - drop_objection");
 
endtask : run_phase
 
`endif

NEW FILE::

 
`ifndef umi_basic_access_test_SV
`define umi_basic_access_test_SV
 
 
`include "umi_basic_access_test.sv"
 
task umi_basic_access_test::umi_WRITE(bit [19:0] umi_addr, bit[7:0] umi_data);
 
    `S2P_write(20'h30001,8'h45,2'b00);
     umi_virtual_vif_h.en = 1'b1;
 
    //enabling clock umi
 
#100ns;
    umi_virtual_vif_h.umi_top_reg_wr = 1'b1;
    
#100ns;
    umi_virtual_vif_h.umi_top_reg_wr = 1'b0;
#10ns;  
 
     umi_virtual_vif_h.en = 1'b0;
 
 
endtask
 
`endif

~Taahir

In reply to syed taahir ahmed:

Hard to know without seeing your compilation script, but my guess is you are compiling umi_basic_access_test.sv instead of NEW FILE::

In reply to dave_59:

In reply to syed taahir ahmed:
Hard to know without seeing your compilation script, but my guess is you are compiling umi_basic_access_test.sv instead of NEW FILE::

Hi Dave,

No i am compiling both, please check this compile script.

The thing is NEW file is represented the task declared in testcase.Test pkg has tescase

<COMPILE_SPEC name = “chip_umi_test” spec_ver = “2.0”>

uvc_chip

HI Dave,

If possible can you shown an simple example where in testcase calls the tasks fom outside file declaration what i have shown,Quicjkhelpis really appreciated.

~taahir