这个问题不是 UVM 特定的,但我正在研究的示例与 UVM 相关。我的 UVM 环境中有一组代理,我想在所有代理上并行启动一个序列。
如果我执行以下操作:
foreach (env.agt[i])
begin
seq.start(env.agt[i].sqr);
end
,序列seq
首先在 上执行env.agt[0].sqr
。一旦结束,它就会继续执行env.agt[1].sqr
,依此类推。
我想实现一个 foreach-fork 语句,以便在所有定序器seq
上并行执行。agt[i]
无论我如何订购 fork-join 和 foreach,我都无法做到这一点。你能帮我得到那个并行序列启动行为吗?
谢谢。
更新以澄清我要解决的问题:以下代码结构的结果与上面没有分叉连接的结果完全相同。
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