saixiliya的个人空间 https://blog.eetop.cn/320550 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

fork join join_any join_none总结

已有 12409 次阅读| 2013-5-10 14:50 |个人分类:普及概念

verilog中的fork...join将执行fork语句的进程,并阻塞父进程的执行,直到fork...join中所有进程(子进程)中止。通过加入join...any和join...none关键字,systemverilog提供了三种选择来指定父进程何时恢复执行。
fork...join结构中,父进程会被阻塞直到所有的子进程结束;join...any结构中,父进程会
被阻塞直到其中任意一个子进程结束;join_none父进程会立即与产生的所有进程并发执行。

在下面的例子中,包含两个进程分支,第一个等待20ns,第二个等待命名事件eventA被触发。因为指定了join关键字,父进程应该阻塞直到这两个进程结束;也就是说,直到过了20ns并且eventA被触发。

fork
    begin
        $display("First Block\n");
        #20ns;
    end
    begin
        $display("Second Block\n");
        @eventA;
    end
join

在一个fork...join语句的关联文中使用return语句是非法的,并且会导致一个编译错误。例如:

task wait_20;
    fork
        #20;
        return; // 非法的:不能返回;任务位于另外一个进程中
    join_none
endtask

只要fork...join块作用范围内声明的自动变量进入它们的作用范围,在产生任何进程之前,这些自动变量应该被初始化成它们的初始值。这些变量对于循环结构产生的进程存储唯一的、每次都交互的数据非常有用。例如:

initial
    for(int j = 1; j <= 3; ++j)
        fork
            automatic int k = j;     // 对每一个j值的本地拷贝
            #k $write("%0d", k);
            begin
                automatic int m = j; // m的值是不确定的
                ...
            end
        join_none

上面的例子的输出为:123。

 

 

 


点赞

全部作者的其他最新日志

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 9

    获赞
  • 8

    评论
  • 518

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-30 13:12 , Processed in 0.023393 second(s), 15 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部