Verilog如果同時存在多個initial/always block,他們會同時平行的開始執行。
SystemVerilog可以用 fork join block來達到平行行的效果,如同C/C++的thread。
有三種join方式fork join所有子Thread結束後完成fork join_any任何一個Thread結束後完成fork join_none所有子Thread生成後完成
Example - fork join:
1 | module tb; |
Output:
1 | # run 10000 |
fork join要等到三個thread都執行完畢之後才會往下執行
Example - fork join_any:
1 | module tb; |
fork join_any只要有一個thread執行完畢之後就會往下執行
Output:
1 | # run 10000 |
Example - fork join_none:
1 | module tb; |
Output:
1 | # run 10000 |
fork join_none只要thread開好之後就會往下執行
Example - disable join:
1 | module tb; |
Output:
1 | # run 10000 |
disable fork可以把前面fork出來的thread停掉
Example - wait fork:
1 | module tb; |
Output:
1 | # run 10000 |
wait fork可以用來等待前面的thread都執行完成後,才會往下執行。