The problem is:
i have a virtual sequence:
class credits_virtual_seq extends wlcc_virtual_base_sequence;
// Sequences libraries
reg_check_credits_seq check_credits_seq;
sys_request_sequence request_seq;
`uvm_object_utils_begin(credits_virtual_seq)
`uvm_object_utils_end
`uvm_declare_p_sequencer(wlcc_virtual_sequencer)
function new(string name = "credits_virtual_seq");
super.new(name);
endfunction: new
virtual task body();
`uvm_info(get_name(),"DEBUG: body of virtual sequence is starting", UVM_LOW)
`uvm_do_on(request_seq, p_sequencer.sys_sequencer)
`uvm_do_on(check_credits_seq, p_sequencer.reg_sequencer)
`uvm_info(get_name(),"DEBUG: the end of the body of virtual sequence", UVM_LOW)
endtask: body
endclass: credits_virtual_seq
When request_seq is executing only body method is called (but not pre_body)
class sys_request_sequence extends wlcc_sys_base_sequence;
…
virtual task pre_body();
$display("BRANCH");
if(starting_phase != null) begin
starting_phase.raise_objection(this, "starting sequence");
if(scope_name == "") begin
scope_name = get_full_name();
end
assert(uvm_config_db#(wlcc_credits)::get(null, scope_name, "credits", credits))
else `uvm_fatal(get_name(), "No system credits available.")
assert(uvm_config_db#(wlcc_sys_cfg)::get(null, scope_name, "sys_cfg", cfg))
else `uvm_fatal(get_name(), "No system configuration available.")
end
…
virtual task body();
$display("BRANCH !");
(HERE ERROR BECAUSE WE DIDNT GET GFG)`uvm_info(get_name(),$sformatf(“The number of packets is %d \n”,cfg.num_pkts),UVM_LOW)
repeat(cfg.num_pkts) begin
…
VCS says:
… @ 1315000: uvm_test_top.wlcc_tb_env.wl0_virtual_sequencer@@credits_virtual_seq [credits_virtual_seq] DEBUG: body of virtual sequence is starting
BRANCH !
Error-[NOA] Null object access
The object is being used before it was constructed/allocated.
Please make sure that the object is newed before using it.
Why the pre_body method is not called?