SV中线程分析(fork..join,fork...join_any,fork...join_none)

   发现了一点新的东西,加深了我对这几个线程的理解,写点东西记录一下。

1,并行的实际执行顺序

    大家都知道fork...join里面是并行执行的,但计算机执行语句肯定是有先后顺序的,具体那些并行的语句是怎么执行的呢?

    这要看具体使用的SV 仿真器是怎么操作的。虽然fork...join里面是并行的,但VCS会先执行并行的写在前面的语句。

    这个program中fork...join里的两个begin...end是并行的,VCS会先执行a = b + d;然后再执行b = a + e;运行的结果如下:

    将两个begin...end调换顺序后,发现就会先执行b = a + e;

结果如下

2,fork...join_none

    fork...join_none块后面接的不消耗仿真时间的语句会先于fork...join_none块执行。然后注意下面这句话(这不是fork...join_none特有的,是SV这门语言仿真的执行过程):

    所以对于如下的一段fork...join_none

    执行的结果如下:

    可以看到这几句话的执行先后顺序,注意有句话没有执行,因为这个initial 块已经到达了底部,所以simulation will terminate at that simulation time regardless of whether or not child threads still have future events to be executed。

3,fork...join_any

执行结果如下:

    可以看下这几句语句的执行顺序,然后发现还是有句话没有执行,因为initial 块到达了底部,仿真终止了。

  • 11
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值