In reply to dave_59:
Hi Dave,
sorry for asking again.
my doubt is start method is not defined in the following example and it is defined in the uvm_base_sequence. mem_sequence_obj.start(sequencer) is called from test case. then this start is calling the uvm_sequence_base class start.but wait_for_grant is defined in the mem_sequence .could you please provide clarification how body method of mem_sequence is called.
class mem_sequence extends uvm_sequence#(mem_seq_item);
`uvm_sequence_utils(mem_sequence,mem_sequencer)
//Constructor
function new(string name = "mem_sequence");
super.new(name);
endfunction
virtual task body();
req = mem_seq_item::type_id::create("req");
wait_for_grant();
req.randomize();
send_request(req);
wait_for_item_done();
endtask
endclass