I have 4 slave sequences where the body() is comprised as shown
virtual task body()
fork
process_req();
join
endtask
virtual function void write(trans trns);
trans local_trans = trans::type_id::create("ltrans",this);
local_trans.copy(trns);
local_trans_q.push(local_trans);
endfunction
task process_req();
trans l2_trans;
forever begin
while(local_trans_q.size() > 0) begin
l2_trans = local_trans_q.pop_front();
local_rsp_item.req = l2_trans.req;
...
send_request(local_rsp_item);
wait_for_done();
end
end
endtask
Each of these 4 sequences are running in parallel on different sequencers and drive transactions on 4 identical interfaces. If I need to add a condition that if these independent interfaces receive req's on the same clk, then the sequences need to execute in priority order of seq1,seq2,seq3,seq4. If there are no concurrent transactions each sequence can execute normally as above. What is the best implementation to establish this arbitration scheme? Currently all these sequences are started in parallel in the uvm_test in parallel using a fork.
How should I include the arbitration order within this seq body?