一、线程的控制
1.1 fork并行线程语句块
fork join_any 当T3结束时,退出fork join_any 后,T1和T2还会执行。
1.1.1 fork … join
上述代码中,在fork join中开辟了4个子线程,当4个子线程执行完之后,才能执行下面的$dispaly语句。
1.1.2 fork … join_any
1.1.3 fork … join_none
fork join_none 与 fork join_any 不同的是先执行after join_none 在执行 parallel start。
如果上述三行代码最后都没有“… finish after”那句代码,只有fork join在仿真结束之前,可以将之前打印的句子都打印完全。
1.2 等待所有衍生线程
- 在SV中,当程序中的initial块全部执行完毕,仿真器就退出了。
- 如果我们希望等待fork块中的所有线程执行完毕再退出结束initial块,我们可以使用wait fork语句来等待所有子线程结束。
1.3 停止线程
1.3.1 停止单个线程
- 在使用了fork join_any 或者 fork join_none以后,我们可以使用disable来指定需要停止的线程。
1.3.2 停止多个线程
- disable fork 可以停止从当前线程中衍生出来的所有子线程。
1.3.3 停止被多次调用的任务
- 如果你给某一个任务或者线程指明标号,那么当这个线程被调用多次以后,如果通过disable去禁止这个线程标号,所有衍生的同名线程都将被禁止。
在initial begin end 调用了三次wait_for_time_out()任务,因为wait_for_time_out()里面是fork join_none 相当于并行执行。