Applistar

7. 3. 3 SC_METHODの記述スタイル

  7. 3. 3 SC_METHODの記述スタイル  

7. 3. 3 SC_METHODの記述スタイル

SC_METHODプロセスにはwait()は書かない(推奨)

書くと、実行時に、次のように言われます。

Error: (E519) wait() is only allowed in SC_THREADs and SC_CTHREADs:
        in SC_METHODs use next_trigger() instead
In file: sc_wait.cpp:157

稀に SC_THREAD プロセスと指定しているはずなのに、上のように 言われることがあります。 これは、 例えば sc_start() の前に、そのプロセスを起動 しようとすると、そのプロセスがまだ thread として登録されていな くて、そのようになります。

SC_METHODプロセスに無限ループを記述しない(必要)

SC_METHOD と指定したプロセスには、 wait()が記述できません。 そのため、もし無限ループを書くと、 プロセスの切替えができなくなってしまいます。

プロセスに無限ループを書くのは SC_THREAD の場合です。 SC_METHOD と指定したプロセスの場合は起動し、 処理が終ったら、必ず終了するように書きます。

SC_METHODにはsensitive文を必ず書きます(必要)

SC_METHOD はプロセスの起動条件を

sensitive << 信号名 ;

あるいは

sensitive << 信号名1 ;
sensitive << 信号名2 ;             // OR

あるいは

sensitive << 信号名1 << 信号名2 ;  // AND

のように書きます。これがないと、SC_METHOD で指定しているプロセスが 起動しません。 sensitive 文の記述をうっかり忘れてしまっても、 コンパイル時も、シミュレーション時にも、それについてのお知らせの類いは 何も表示されず、単にそのプロセスが起動しないだけなので注意が必要です。

RTL記述にSC_METHOD以外のプロセスは使用しない(推奨)

RTL で記述する場合には、プロセスには SC_METHOD 指定をします。

  7. 3. 3 SC_METHODの記述スタイル