In reply to dave_59:
Could you please give an example? I have tried in this way,
class mem_sequence extends uvm_sequence#(mem_seq_item);
`uvm_object_utils(mem_sequence)
//Constructor
function new(string name = "mem_sequence");
super.new(name);
endfunction
virtual task body();
req = mem_seq_item::type_id::create("req"); //create the req (seq item)
uvm_config_db#(mem_seq_item)::set(null,"uvm_test_top.*","user_config",this.req); //set method
wait_for_grant(); //wait for grant
assert(req.randomize()); //randomize the req
send_request(req); //send req to driver
wait_for_item_done(); //wait for item done from driver
get_response(rsp); //get response from driver
endtask
endclass
And in scoreboard tried to get like this:
task run_phase(uvm_phase phase);
if(!(uvm_config_db#(mem_seq_item)::get(this,"","user_config",req1) )
`uvm_fatal(get_full_name(),{"Did not get the user Config"})
endtask
After you mentioned about uvm_event_pool I have looked into it did not understand how to incorporate that concept in my code. As per my understanding of uvm_event_pool we will create and event as soon as the sequence generates and in scoreboard we will for that event. As soon as we get that event our scoreboard run_phase will continue. Is this understanding correct? Correct me if I am wrong.