UVM_FATAL: default timeout of 9200 hit, indicating a probable testbench issue

I am new to UVM and working on alu test bench.
at every time i simulating it is giving the following error, after execution of Monitor Run Phase, please can any one suggest that where i have done wrong.

Thanks in Advance.
suresh.

In reply to jpms.suresh:

This means 9200s simulation time passed and stop_request() was not called. This is a large number, does your test/sequences need all of that time (and more) to finish?
→ If yes, you can change that default number via set_timeout() method.
→ If no, then perhaps check for objections that were raised, but never dropped.

In reply to ayehia:

Thanks ayehia.
i have checked with raise and drop objections they are ok, but the thing is After Start of Run_Phase of Test it is going up to Monitor Run_Phase and executing it but not at all coming back to Test Run_phase.

In reply to jpms.suresh:

Can you put piece of your code in monitor and testcase

In reply to yaswanth021:

hi this my Monitor Code.

//UVM_MONITOR

class alu_monitor extends uvm_monitor;

virtual  intf vntf; //virtual interface


data_packet data_collected; //create sequence item


uvm_analysis_port#(data_packet)mport;


`uvm_component_utils(alu_monitor) //Factory registration


function new(string name, uvm_component parent); //Construct function new

super.new(name,parent);
endfunction

//Build phase
function void build_phase (uvm_phase phase);
  super.build_phase(phase);
     mport= new ("mport",this);
     data_collected= data_packet::type_id::create("data_collected",this);
 if(!uvm_config_db#(virtual intf):: get(this,"","vntf",vntf))
  `uvm_fatal("MONITOR::NOVIF",{"virtual interface must be set for:",get_name(),".vntf"})
 else
  `uvm_info(get_name(),"MONITOR::BuildPhase complete", UVM_LOW)
endfunction

//Run phase
virtual task run_phase (uvm_phase phase);
 `uvm_info(get_name(),"Monitor Run Phase\n", UVM_MEDIUM)
@( vntf.mon_cb)
 // forever
   repeat(10)  @(vntf.mon_cb)
    begin
      collect_data();//task to collect data 
    end 
endtask

virtual task collect_data ();

@( vntf.mon_cb)
begin
if(vntf.mon_cb.inp_en==1)

fork
data_collected.inp_en<=vntf.mon_cb.inp_en;
data_collected.a<= vntf.mon_cb.a;
data_collected.b<= vntf.mon_cb.b;
data_collected.opcode<=vntf.mon_cb.opcode;
  data_collected.outp<=vntf.mon_cb.outp;
data_collected.valid_out<=vntf.mon_cb.valid_out;
mport.write(data_collected);
join
end
`uvm_info(get_full_name(), "data collected form virtual interface", UVM_NONE)
$display("a=%0d,b=%0d,opcode=%0d,outp=%0d,valid_out=%0d", vntf.mon_cb.a, vntf.mon_cb.b, vntf.mon_cb.opcode, vntf.mon_cb.outp,       vntf.mon_cb.valid_out,$time);
endtask : collect_data

endclass : alu_monitor	

And this is my Test code.

//ALU_TESTCASE

import uvm_pkg::*;
`include "uvm_macros.svh"

class test1 extends base_test;

alu_environment envn;
//Factory registration
`uvm_component_utils(test1)
alu_sequence seqn;

//Construct function new
function new(string name="test1",uvm_component parent=null);
super.new(name,parent);
endfunction

//Build phase
function void build_phase(uvm_phase phase);
envn=alu_environment::type_id::create("envn",this);
seqn= alu_sequence::type_id::create("seqn");
super.build_phase(phase);
//uvm_config_db#(uvm_object_wrapper):: set(this,"envn.agent.sequencer.run_phase", "default_sequence",alu_sequence::type_id::get());
endfunction

task run_phase(uvm_phase phase);
`uvm_info(get_full_name(), "start of run phase",UVM_NONE)
phase.raise_objection(this);
seqn.start(envn.agent.sequencer);
#500ns;
phase.drop_objection(this);
uvm_report_info(get_full_name(),"end of run phase",UVM_NONE);
uvm_top.stop_request ();
endtask:run_phase



endclass : test1

Hi,

In your test case in build_phase, the call to “super.new” should be after the declaration.

ie.

function void build_phase(uvm_phase phase);
super.build_phase(phase);  
 envn=alu_environment::type_id::create("envn",this);
 seqn= alu_sequence::type_id::create("seqn");
 //uvm_config_db#(uvm_object_wrapper):: set(this,"envn.agent.sequencer.run_phase", "default_sequence",alu_sequence::type_id::get());
 endfunction

You can use “+UVM_OBJECTION_TRACE” on the command line. This will print message about objection.

Hope this will help.

In reply to upendra123:

Hi Upendra, what difference does this make? Calling super.new after the function build_phase?