Can I use base class object in the extend class?

In reply to rgarcia07:

You don’t want to use the config_db() in this case. The best technique is to add a function in your base test which assigns ral_model to the sequence my_ral handle.

Again, you don’t want to instantiate every sequence in the base_test class. You should only use the required sequences in each derived test.


class my_base_seq extends uvm_sequence;
    my_reg_model    my_ral;
    ...
    my_ral = my_reg_mode::type_id_create("my_ral", this);
    ...
endclass
 
class my_seq0_seq; extends my_base_seq;
    ...
    virtual task body();
    ...
    my_ral.DATA.read(status, rdata);
    ...
endclass
 
class my_seq1_seq extends my_base_seq;
    ...
    virtual task body();
    ...
    my_ral.DATA.read(status, rdata);
    ...
endclass
 
class my_seq2_seq extends my_base_seq;
    ...
    virtual task body();
    ...
    my_ral.DATA.read(status, rdata);
    ...
endclass

class my_base_test extends uvm_test;
...
// Only have environment & config objects
// Don't create any sequences in the base test - they are test specific
function void build_phase(uvm_phase phase);
       ...
endfunction

function assign_ral(my_base_seq seq);
  seq.my_ral = ral_env.model;
endfunction

function void connect_phase(uvm_phase phase);
        ...
        ...
endfunction
endclass

class my_test1 extends my_base_test;
task run_phase(uvm_phase phase);
  my_seq1_seq seq1 = my_seq1_seq::type_id::create("seq1");
  my_seq2_seq seq2 = my_seq2_seq::type_id::create("seq2");
  assign_ral(seq1);
  assign_ral(seq2);
  seq1.start(env.agent.seqr);
  seq2.start(env.agent.seqr);
endtask
endclass