In reply to UVM_LOVE:
Of course you can do that. But a few things in your code are not correct.
(1) Using a virtual sequence you do not need p_sequencer.
(2) To start your local sequences you need the handles of the local sequencers in your virtual sequence.
Your code should look like this:
class my_virtual_seq extends uvm_sequence;
`uvm_object_utils (my_virtual_seq)
function new (string name = "my_virtual_seq")
super.new (name);
endfunction
apb_sequencer apb_sqr;
wb_sequencer wb_sqr;
pcie_sequencer pcie_sqr;
apb_rd_wr_seq m_apb_rd_wr_seq;
wb_reset_seq m_wb_reset_seq;
pcie_gen_seq m_pcie_gen_seq;
task pre_body();
m_apb_rd_wr_seq = apb_rd_wr_seq::type_id:create("m_apb_rd_wr_seq")
m_wb_reset_seq = wb_reset_seq:::type_id::create("m_wb_reset_seq");
m_pcie_gen_seq = pcie_gen_seq:::type_id::create("m_pcie_gen_seq");
endtask
task body();
...
m_apb_rd_wr_seq.start (apb_sqr );
fork
m_wb_reset_seq.start (wb_sqr);
m_pcie_gen_seq.start (pcie_sqr);
join
...
endtask
endclass
Now you have to take care to get the handles of your local sequencers into the virtual sequence. You have different options to do that:
(1) use the config_db
(2) assign the local sequencers in your test