LoginSignup
1
0

More than 5 years have passed since last update.

Forkしたプロセスの制御 - disable fork

Last updated at Posted at 2018-09-27

本記事は以下の3部構成の一部です。

  1. fork joinとその仲間たち
  2. Forkしたプロセスの制御 - disable fork
  3. Forkしたプロセスの制御 - processクラス

disable forkとは

disable forkはforkしたプロセスを停止する命令です。

disableと似ていますが、disableは引数を取るのに対してdisable forkでは引数がありません。命令が実行されたスコープ内での全てのforkされたプロセスが停止します。複数のプロセスを一気にまとめて停止するのに便利ですが、スコープに注意を払わないと意図したものより多くのプロセスを停止させてしまう可能性があるので注意してください。

下のサンプルプログラムでは複数のforkしたプロセスで、シミュレーション開始から3ns後にメッセージを表示させています。並行して2nsの時点でdisable forkでスコープ内にあるプロセスを停止させています。

ログの通り、メッセージが表示されているのはdisable forkより上の階層にある"d1"のみとなります。

 module top;
  initial begin
    fork: d1
      delayPrint("d1", 3ns);
      begin
        fork: d2_a
          delayPrint("d2_a", 3ns);
        join_none

        fork: d2_b
          delayPrint("d2_b", 3ns);
          fork: d3
            delayPrint("d3", 3ns);
          join
        join_none

        #2ns;
        disable fork;
      end
    join
  end

  task automatic delayPrint(input string s,
                            input time dly = 0ns);
    #dly;
    $display(s);
  endtask
endmodule
run -all;
# KERNEL: d1
# KERNEL: Simulation has finished. There are no more test vectors to simulate.

参考文献

"9.6.3 Disable fork statement". 1800-2017 - IEEE Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language. p.229

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0