一、什么是线程?
线程是指程序能够独立运行的最小单位,在verilog中有两种形式,分别为begin end 和fork join,SV在这基础上新增了两种类型,为fork join_any和fork join_none。
二、fork join、 fork join_any和fork join_none的区别?
fork join:块内语句并行执行,且需要每一个语句块都执行完毕才能继续往下执行。
fork join_any:块内语句并行执行,其中有任何一个语句块执行完毕就会执行下面的内容,不会等 fork join_any中所有语句执行完才往下执行。
fork join_none:不会等任何一个语句块执行完毕就会继续续往下执行,类似于“点火”。
三、wait fork 与 disable fork
wait fork:当使用fork join_none时,有可能出现这一种情况是initial begin end里语句都执行万了,仿真都退出了,但是fork join_none里的进程还没有执行完,这个时候可以在等其他程序执行完了的最后加一个wait fork来等待fork join_none里面的线程执行完毕,如下所示:
task ....();
fork
......; //线程A
......; //线程B
......; //线程C
join_none
......; //其它任务
......;
wait fork;
endtask