This question is not UVM specific but the example that I am working on is UVM related. I have an array of agents in my UVM environment and I would like to launch a sequence on all of them in parallel.
If I do the below:
foreach (env.agt[i])
  begin
    seq.start(env.agt[i].sqr);
  end
, the sequence seq first executes on env.agt[0].sqr. Once that gets over, it then executes on env.agt[1].sqr and so on.
I want to implement a foreach-fork statement so that seq is executed in parallel on all agt[i] sequencers.
No matter how I order the fork-join and foreach, I am not able to achieve that. Can you please help me get that parallel sequence launching behavior?
Thanks.
Update to clarify the problem I am trying to solve: The outcome of the below code constructs is the exact same as above without the fork-join.
foreach (env.agt[i])
  fork
    seq.start(env.agt[i].sqr);
  join
fork
  foreach (env.agt[i])
    seq.start(env.agt[i].sqr);
  join
// As per example in § 9.3.2 of IEEE SystemVerilog 2012 standard
for (int i=0; i<`CONST; ++i)
  begin
    fork
      automatic int var_i = i;
      seq.start(env.agt[var_i].sqr);
    join
  end