SystemVerilog中的fork-join_any

描述

fork-join_any和fork-join有所不同,fork-join_any的父进程一直阻塞,直到任何一个并行的子进程结束。

需要注意的是,当其中任何一个子进程和父进程结束后,剩余未结束的子进程不会停止,而是会一直执行下去,直到仿真停止。

 

 module forkJoin;
 int a, b, c, d;
 initial
 begin
 fork : forkBlock
 
 begin //frst process
 #50 a = 5;
 $display($stime,,,"a = %0d",a);
 end
 
 begin //second process
 #100 b = 10;
 $display($stime,,,"b = %0d",b);
 end
 
 begin //third process
 #100 c = 20;
 $display($stime,,,"c = %0d",c);
 end
 
 begin //fourth process
 #40 d = 15;
 $display($stime,,,"d = %0d",d);
 end
 
 join_any
 
 $display($stime,,, "out of the loop");


 end
 endmodule

 

仿真log:

 

 40 d = 15
 40 out of the loop


 V C S S i m u l a t i o n R e p o r t

 

上面的fork-join-any示例中有4个子进程,分别在时间40,50,100,100执行。随着进程4结束,父进程也会结束,仿真随之停止。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分