在System Verilog中 initial/always/task/function/fork 等都会产生进程,过程是自动产生的(process),用户不可以手动的产生process,但是可以引用已经存在的进程句柄,从而实现进程的管理,在实际的使用中,fork 进程是使用较多的情况,也是容易产生混淆的
3中格式的fork
fork join : fork join 产生子进程中各个语句是并发执行的,会block 父进程的执行,直到所有子进程结束。
fork join_any:fork join-any 产生子进程中各个语句是并发执行的,会block 父进程的执行,直到任意一个子进程救赎。
fork join_none:子进程不会block父进程执行,子进程的执行时间是父进程遇到了延时或者阻塞语句(#0延时也是ok的)
与fork 进程相关的是wait fork 以及disable fork,,,
wait fork: 等父进程的所有直接子进程结束(不用care 子进程本身产生的子进程(相对父进程来说就是孙进程))
disable fork: kill 掉所有由父进程产生的子进程(包括子进程本身产生的子进程)
module thread;
initial begin
fork
child1();
child2();
join_none
do_test();
$display("%t,finsish the parent thread",$time);
end