SV fork...join/join_none/join_any

前言

摘自绿皮书

1.1 fork…join

fork...join块里的代码都是并发执行的,所以带短时延的语句执行得比带长时延的语句早。

语法很简单,没什么好讲的,但是和begin...end结合的时候,则需要注意

initial begin
    A
    #10 B
    fork
        C
        #50 D
        #10 E
        begin
            #30 F
            #10 G
        end
    join
        H
        #80 I
   
end
0 : A
10: B
10: C
20: E
40: F
50: G // 注意这一点!!!!
60: D
60: H
140:I

本人在Modelsim SE10.7下跑的结果如下:

`timescale 1ns/1ps
module test;

initial begin
    $display("@ %0t: A", $time);
    #10 $display("@ %0t: B", $time);
    fork
        $display("@ %0t: C", $time);
        #50 $display("@ %0t: D", $time);
        #10 $display("@ %0t: E", $time);
        begin
            #30 $display("@ %0t: F", $time);
            #10 $display("@ %0t: G", $time);
        end
        join
        $display("@ %0t: H", $time);
        #80 $display("@ %0t: I", $time);
    
end
endmodule
# @ 0: A
# @ 10000: B
# @ 10000: C
# @ 20000: E
# @ 40000: F
# @ 50000: G
# @ 60000: D
# @ 60000: H
# @ 140000: I

1.2 fork…join_none

fork...join_none块在调度其块内语句时,父线程继续执行。:即注意下面的H的执行!

initial begin
    A
    #10 B
    fork
        C
        #50 D
        #10 E
        begin
            #30 F
            #10 G
        end
    join_none
    H
    #80 I
end

执行结果:

0 : A
10: B
10: H
10: C
20: E
40: F
50: G
60: D
90: I

1.3 fork…join_any

fork...join_any块对块内语句进行调度,当第一个语句完成后,父线程才继续执行,其他停顿的线程也得以继续。

initial begin
    A
    #10 B
    fork
        C
        #50 D
        #10 E
        begin
            #30 F
            #10 G
        end
    join_any
    H
    #80 I
end

执行结果:

0 : A
10: B
10: C
10: H
20: E
40: F
50: G
60: D
90: I
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Greate AUK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值