Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

SystemVerilog: process(その1)

Verification Engineerの戯言 : SystemVerilogの世界へようこそ

SystemVerilogには、processというクラスがあります。

今週は、このprocessについて、4連続でアップしていきます。

IEEE 1800-2005では、このprocessクラスは、つぎのように宣言されています(実装は別です)。

    class process;
      enum state { FINISHED, RUNNING, WAITING, SUSPENDED, KILLED };

      static function process self();
      function state status();
      function void kill();
      task await();
      function void suspend();
      task resume();

    endclass

各プロセスに対するアクセスをする前に、かならずプロセスのハンドルをself関数で獲得する必要があります。

    process pid;

    pid = process::self();

self関数は、宣言の最初にstaticがついているのでクラス関数になります。
なので、process::self()のようにクラス名(process)の後に::を付け、
その後に関数名(self())が続きます。

各プロセスは、状態を持ちます。この状態をstateで表現しています。
プロセスの状態を知りたいときは、status関数を呼びます。

各状態は、次のようになります。
    FINISHED  :プロセスが正常終了した
    RUNNING   :プロセスが現在、動作中である(ブロッキングされていない)
    WAITING   :プロセスがブロッキング文で待ち状態である
    SUSPENDED :プロセスが停止中である(復帰を待っている状態)
    KILLED    :プロセスが強制的に終了した(強制終了、あるいは、disableが実行された)

(その2)に続く。

検証、Verification、SystemVerilog