neither the item’s sequencer nor dedicated sequencer has been supplied to start item in write_seq uvm fatal error
-Why these type of errors comes into picture?
neither the item’s sequencer nor dedicated sequencer has been supplied to start item in write_seq uvm fatal error
-Why these type of errors comes into picture?
In reply to NEHA JAIN:
Hi Neha,
Can you please share your code in which you are getting this error ?
Regards,
Chetan Shah
In reply to cashah85:
Hey, my problem is related to virtual sequencer, how it will handle the non-virtual sequencer.c
UVM fatal error is occurring for bad handle assignment.
//please any one can help me, how to assign handler to virtual sequencer through this method
** Fatal: (SIGSEGV) Bad handle or reference.
-What i am doing is assigning the handler to virtual sequencer in test classes which are extends form test_base class. Like this–
//-----------------------Virtual sequencer---------------------------------------
//----------Virtual sequencer--------------------------------
class virtual_seqr extends uvm_sequencer#(and_transaction);
//References to non-virtual sequencer
//my_seqr real_seqr_inst;
`uvm_component_utils(virtual_seqr) //uvm factory....registration
function new(string name = "virtual_seqr", uvm_component parent=null); //constructor
super.new(name,parent);
endfunction
endclass: virtual_seqr
//-------------------------------end virtual sequencer----------------------------
//-------------------non virtual sequencer--------------------------------------------
class my_seqr extends uvm_sequencer#(and_transaction);
function new(string name = "my_seqr", uvm_component parent=null); //constructor
super.new(name,parent);
endfunction
`uvm_component_utils(my_seqr) //uvm factory....registration
endclass:my_seqr
//-------------------------------end non virtual sequencer------------------------------
//------------my_reset_test-------------------------------------------
class my_reset_test extends my_base_test;
`uvm_component_utils(my_reset_test) //uvm factory…registration
//------------------------------------------
// Methods
//------------------------------------------
// Standard UVM Methods:
//function new(string name = “my_reset_test”, uvm_component parent = null);
//function void build_phase(uvm_phase phase);
//task run_phase(uvm_phase phase);
function new(string name=“my_reset_test”, uvm_component parent=null); //constructor
super.new(name,parent);
endfunction
function void build_phase(uvm_phase phase);
super.build();
endfunction:build_phase
task run_phase(uvm_phase phase);
// uvm_info("test",$sformatf(" enter inside run_phase of PUT SEQUENCES ON SEQUENCER "),UVM_NONE); //
uvm_info(“test”,$sformatf(" enter inside run_phase of my_reset_test "),UVM_NONE);
and_reset and_reset_inst = and_reset::type_id::create(“and_reset_inst”);
// We raise objection to keep the test from completing
phase.raise_objection(this, “Test Started”);
and_reset_inst.virtual_seqr_inst = env_inst.agent_inst.seqr; //fatal error is occurring beacsuse of this assignment
// start sequence put on the sequencer
and_reset_inst.start(null);
`uvm_info(“test”,$sformatf("and_reset seq starting "),UVM_NONE);
// #1000ns;
// uvm_report_info(“”,“Global Request”, UVM_LOW);
// global_stop_request();
// We drop objection to allow the test to complete
phase.drop_objection(this, “Test Finished”);
`uvm_info(“test”,$sformatf("and_reset seq ending "),UVM_NONE)
endtask :run_phase
function void end_of_elaboration();
print();
endfunction : end_of_elaboration
endclass :my_reset_test
//------------------------------------end my_reset_test------------------------------------
//-----------------------------------------agent class------------------------------------
//-----------------------agent-----------------------
// The agent contains sequencer, driver, and monitor (not included)
class my_agent extends uvm_component;
`uvm_component_utils(my_agent)
//*********************************************************
// Create Instance of analysis port
//*********************************************************
uvm_analysis_port #(and_transaction) ap;
//*********************************************************
// Create Instance of agent configuration
//*********************************************************
agent_config agent_config_inst;
//*********************************************************
// Create Instance of Sequencer
//*********************************************************
my_seqr seqr;
//*********************************************************
// Create Instance of Sequencer
//*********************************************************
// virtual_seqr virtual_seqr_inst;
//*********************************************************
// Create Instance of Driver
//*********************************************************
my_driver drv;
//*********************************************************
// Create Instance of Monitor
//*********************************************************
my_monitor monitor;
function new (string name, uvm_component parent);
super.new(name,parent);
endfunction
//*********************************************************
// Build Method
//*********************************************************
function void build_phase(uvm_phase phase);
super.build_phase(phase);
//*********************************************************
// Construct analysis port
//*********************************************************
uvm_report_info(“”,“Creating Agent Analaysis Port…”, UVM_LOW);
ap = new(“ap”, this);
//*********************************************************
// Construct agent configuration
//*********************************************************
uvm_report_info(“”,“Creating Agent Configuration…”, UVM_LOW);
agent_config_inst = agent_config::type_id::create( .name( “agent_config_inst” ), .parent( this ) );
//*********************************************************
// Check agent configuration = ACTIVE
// Construct Driver and Sequencer
//*********************************************************
if ( agent_config_inst.active == UVM_ACTIVE )
begin
uvm_report_info(“”,“Creating Driver and Sequencer…”, UVM_LOW);
drv = my_driver::type_id::create(“drv”, this);
seqr = my_seqr::type_id::create(“seqr”, this);
// virtual_seqr_inst = virtual_seqr::type_id::create(“virtual_seqr_inst”, this);
end
//*********************************************************
// Construct Monitor
// Agent Configuration = ACTIVE OR PASSIVE
//*********************************************************
uvm_report_info(“”,“Creating Monitor…”, UVM_LOW);
monitor = my_monitor::type_id::create( .name( “monitor”), .parent( this ) );
endfunction: build_phase
//endfunction : build_phase
//*********************************************************
// Connection Method
//*********************************************************
// In UVM connect phase, we connect the sequencer to the driver.
function void connect_phase(uvm_phase phase);
//*********************************************************
// Connecting Agent and Monitor(TLM port - port)
// analysis port[agent] <—> analysis port[monitor]
//********************************************************
uvm_report_info(“”,“Connecting Agent and Monitor…”, UVM_LOW);
ap = monitor.ap;
//*********************************************************
// Check agent configuration = ACTIVE &
// Connecting Driver and Sequencer (TLM port - export)
// seq_item_port[driver] <—> seq_item_export[sequencer]
//*********************************************************
if ( agent_config_inst.active == UVM_ACTIVE ) begin
uvm_report_info(“”,“Connecting Driver and Sequencer…”, UVM_LOW);
drv.seq_item_port.connect(seqr.seq_item_export);
//drv.seq_item_port.connect(virtual_seqr.seq_item_export);
end
endfunction :connect_phase
endclass
//--------------------------------------end agent_class------------------------------------------------------
In reply to NEHA JAIN:
Can you please elaborate what is the intent of this line?
and_reset_inst.virtual_seqr_inst = env_inst.agent_inst.seqr
Regards,
Vikas
In reply to NEHA JAIN:
In reply to cashah85:
and_reset_inst.virtual_seqr_inst = env_inst.agent_inst.seqr; //fatal error is occurring beacsuse of this assignment
Your problem is in this line wher you are connecting your local (non-virtual) sequencer to the virtual sequencer instance. This is not legal, because the virtual sequencer is never generating seq_items.
You have to implement a handle to your local sequencer in the virtual sequencer. Then you can connect it in this way.