Hi
I have a question on using one uvm_sequence_base to start transactions on different agents in parallel. If I have the test snippet as below:
class my_test extends uvm_test;
base_env my_env;
uvm_sequence_base seqb;
`uvm_component_utils(test_base_seq)
function new(string name="test_base_seq", uvm_component parent=null);
super.new(name, parent);
endfunction
function void build_phase(uvm_phase phase);
super.build_phase(phase);
my_env=base_env::type_id::create("my_env", this);
seqb = new("seqb");
endfunction
virtual task run_phase(uvm_phase phase);
uvm_sequence_item rsp;
super.run_phase(phase);
phase.raise_objection(this);
fork
begin //Thread 1
pkt_type1 mypkt1;
mypkt1= pkt_type1::type_id::create("mypkt1");
seqb.start_item(mypkt1, -1, my_env.m_agent.sqr1);
mypkt1.randomize();
seqb.finish_item(mypkt1, -1);
seqb.get_base_response(rsp, -1);
end
begin //Thread 2
pkt_type1 mypkt2;
mypkt2= pkt_type2::type_id::create("mypkt2");
seqb.start_item(mypkt2, -1, my_env.m_agent.sqr2);
mypkt2.randomize();
seqb.finish_item(mypkt2, -1);
seqb.get_base_response(rsp, -1);
end
begin //Thread 3
pkt_type1 mypkt3;
mypkt3= pkt_type3::type_id::create("mypkt3");
seqb.start_item(mypkt3, -1, my_env.m_agent.sqr3);
mypkt3.randomize();
seqb.finish_item(mypkt3, -1);
seqb.get_base_response(rsp, -1);
end
begin //Thread 4
pkt_type1 mypkt4;
mypkt4= pkt_type4::type_id::create("mypkt4");
seqb.start_item(mypkt4, -1, my_env.m_agent.sqr4);
mypkt4.randomize();
seqb.finish_item(mypkt4, -1);
seqb.get_base_response(rsp, -1);
end
join
phase.drop_objection(this);
endtask
endclass
I have 4 thread launched in parallel. These threads are using same sequence (seqb) but starting the transactions on different agents. Assuming these agents are independent, will the use of same sequence (seqb) result in serializing the transaction instead of launching the transactions simultaneously on all the agents.
My understanding is seqb.start_item() block until it get a grant from the sequencer which is triggered by get_next_item() call in driver. So if one driver is blocked while processing the current transaction will it effect the transactions being sent to other agents.
Please let me know if my understanding is incorrect.
Thank you
Sudarshan Vempati