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