SystemVerilog:fork~join/join_any/join_none

今回の勉強題材はこちら。
SystemVerilog Fork Disable "Gotchas"

automatic

これはVerilog-HDL 2001から automatic が追加されています。

fork~join_any

サンプルコードは書いてあるので、省略。
fork~joinの場合の出力結果はこちらになります。

# waited 5, then did stuff
# waited 10, then did stuff
# fork has been joined

次に記事でも書いてありますが、join_anyを使った場合がこちらになります。

# waited 5, then did stuff
# fork has been joined
# waited 10, then did stuff

■fork~join_anyを使った場合、

forkした処理がどれか1つ完了したら次の処理(例では$display)にいきます。

ということで、disable fork;した場合には、wait 10がキャンセルされたということになります。

fork~join_none

fork~join_noneの出力結果はこちらになります。

# fork has been joined
# waited 5, then did stuff
# waited 10, then did stuff

■fork~join_noneを使った場合、

forkした処理と並行して次の処理(例では$display)を行います。

後半の内容

disable fork; とした場合に、どのforkが無効になるかをテストしています。 自分で書いてる分にはいいですが、これを他人から検証環境として引き継いだらキレそう。。。