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が無効になるかをテストしています。 自分で書いてる分にはいいですが、これを他人から検証環境として引き継いだらキレそう。。。