华为2021数字IC笔试题-fork...join_none

分析下面的程序,正确的打印结果是(     )
fork
begin
#20
$display("A");
end
begin
#10
$display("B");
end
join_none
#5 $display("C");

解析:
fork...join结构提供了创建并行进程的能力。在Systemverilog里主要有三种版本:
  • fork...join (join all)
  • fork...join_none
  • fork...join_any

fork-join:同verilog中的fork-join一样,要等到最后一个进程退出才返回
fork-join_none:直接返回,没有等任何进程完成

fork-join_any:在第一个进程完成后就返回了

例如,在下面代码中,
module fork_join_tests;
    integer out_val ;
    initial begin
    fork
        begin  //First process
    #5 $display(“exit first process at t = %0d”,$time) ;
end
begin //Second process
    #10 $display(“exit second process at t = %0d”,$time) ;
end    
join
$display(“exit fork join at t = %0d”,$time) ;
end
endmodule //fork_join_tests
输出结果为:
exit first process at t = 5
exit second process at t = 10
exit fork join at t = 10
当上面的代码中的join被join_any替换时,则显示输出:
exit first process at t = 5
exit second process at t = 10
exit fork join at t = 5

fork-join_any在第一个进程完成后退出,也就是说,在5个时间单位退出。

当join_none替换join时,则显示以下输出:
exit first process at t = 5
exit second process at t = 10
exit fork join at t = 0
fork-join_none不同等待其中任何一个进程完成,也就是说,在时间单位0时退出。

上述题用了fork...join_none,因此不用等待任何一个进程,在时间单位0直接退出,所以打印顺序为:CBA


summary

总体来说,三种形式各有用处,但在绝大多数情况下又可以用其中一种实现其他两种。 但在fork-join_none的应用范畴更广一些,在并行进程数不定的情况下需要用它才能实行并行。


参考:

#华为##笔试题目#
全部评论
题目用的是fork。。jion啊,是不是打错了
点赞 回复
分享
发布于 2021-05-16 16:19

相关推荐

4 4 评论
分享
牛客网
牛客企业服务