この質問は UVM 固有のものではありませんが、私が取り組んでいる例は UVM 関連です。UVM 環境に一連のエージェントがあり、それらすべてに対してシーケンスを並行して起動したいと考えています。
私が以下を行う場合:
foreach (env.agt[i])
begin
seq.start(env.agt[i].sqr);
end
の場合、シーケンスseq
は最初に で実行されenv.agt[0].sqr
ます。それが終わったら、それを実行しenv.agt[1].sqr
ます。
すべてのシーケンサーseq
で並列に実行されるように、foreach-fork ステートメントを実装したいと考えています。agt[i]
fork-join と foreach をどのように注文しても、それを達成することはできません。並列シーケンスの起動動作を取得するのを手伝ってもらえますか?
ありがとう。
私が解決しようとしている問題を明確にするための更新: 以下のコード構成の結果は、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