在 SystemVerilog 中 fork join_none 后仅等待一些线程完成

问题描述 投票:0回答:2

在 SystemVerilog 中,我需要等待一些在 fork join_none 结构中执行的线程完成。但是在另一个 fork join_none 结构中还有另一个进程永远不会结束。

我的代码是这样的:

  fork
     process_that_will_never_end();
  join_none

  fork
     for(int i = 0; i < 40; i++) begin
        fork
           process_that_must_end(i);
        join_none
     end
  join

包含 for 循环的 fork join 没有效果(这是我所期望的)。我考虑过在最后使用“等待叉”,但这也会等待 process_that_will_never_end(),所以它不会工作。

有没有办法只等待所有 process_that_must_end() 线程完成?

system-verilog fork-join
2个回答
3
投票

你几乎拥有它。您只需要将

begin/end
的范围移动到 for 循环之外。那么
wait fork
只适用于第二个
fork
的孩子。

fork : first_fork
     process_that_will_never_end();
join_none

fork begin : second_fork
  for(int i = 0; i < 40; i++) 
     fork : third_forks
       automatic int k = i;
       process_that_must_end(k);
     join_none
   wait fork;
end join

0
投票

为什么需要第二个叉子?下面应该工作?

begin
  for(int i = 0; i < 40; i++) 
     fork : third_forks
       automatic int k = i;
       process_that_must_end(k);
     join_none
   wait fork;
end
© www.soinside.com 2019 - 2024. All rights reserved.