I hope you are doing well Tudor Timi,
As far as I know, start() method calls body() method. If there is no body() method but I call it from user task, I get the null error message.
class virtual_seq extends uvm_sequence #(seq_item); core_A_seq Aseq; core_B_seq Bseq; core_A_sequencer seqr_A; core_B_sequencer seqr_B; `uvm_object_utils(virtual_seq) `uvm_declare_p_sequencer(virtual_sequencer) function new (string name = "virtual_seq"); super.new(name); endfunction task my_task(); `uvm_info(get_type_name(), "virtual_seq: Inside Body", UVM_LOW); Aseq = core_A_seq::type_id::create("Aseq"); Bseq = core_B_seq::type_id::create("Bseq"); Aseq.start(p_sequencer.seqr_A); Bseq.start(p_sequencer.seqr_B); endtask endclass
After execute, I faced a NULL Pointer Error
xmsim: *E,TRNULLID: NULL pointer dereference. File: ./sequence.sv, line = 69, pos = 25 Scope: worklib.$unit_0x4ccdf83b::virtual_seq@4292_23.my_task Time: 0 FS + 44
I confused that p_sequencer is declared in `uvm_declare_p_sequencer(virtual_sequencer) so I can expected I can start the sequence in the task my_task().
But I don’t know why I got Null Pointer Error interms of p_sequencer. What is the difference is between the way the sequence starts running and why p_sequencer makes a Null Pointer Error?
For your understand I compose it With Virtual Sequnce & virtual sequecer (p_seq(1) - EDA Playground