SystemVerilog中的fork-join

描述

在fork-join语句块中,每个语句都是并发进程。在这个语句块中,父进程一直被阻塞,直到所有由“fork-join”产生的子进程都执行完:

 

module forkJoin;
 int a, b, c, d;
 
 initial
 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
 #50 d = 15;
 $display($stime,,, "d = %0d",d);
 end
 
 //frst, second, third and fourth processes execute in parallel.
 join
 endmodule

 

仿真log:

 

 50 a = 5
 50 d = 15
 100 b = 10
 100 c = 20
 V C S S i m u l a t i o n R e p o r t

 

上面的fork-join产生了4个并行的子进程,都使用begin-end区分,在每个begin-end中间的语句都是串行执行的。

1. 第1个进程在时间50执行;
2. 第2个进程在时间100执行;
3. 第3个进程在时间100执行;
4. 第4个进程在时间50执行;

这4个进程的时序都是独立的。

  审核编辑:汤梓红

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

全部0条评论

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

×
20
完善资料,
赚取积分