上で、MSC かどうかの違いを無視すると、
一つ目の方を見れば良いことになります。
その中では二つのマクロはそれぞれ次のように定義されています。
-
SC_CTOR
typedef user_module_name SC_CURRENT_USER_MODULE; \
user_module_name( sc_module_name )
-
SC_HAS_PROCESS
typedef user_module_name SC_CURRENT_USER_MODULE;
ですから、この
SC_CTOR と SC_HAS_PROCESS の
二つの違いは、SC_CTOR の二行目にある
user_module_name( sc_module_name )
の部分を自分で書く(SC_HAS_PROCESS)か、
任せる(SC_CTOR)かの違いです。
C++ のクラス定義では、
- コンストラクタと呼ばれる初期化関数を定義する
- その方法はクラス名と同じ名前の関数を定義する
ことになっています。
SC_CTOR(user_module_name) と書くのは、
この部分にに相当します。
そうして、これに続く、波形かっこで囲まれた部分
SC_CTOR(user_module_name)
{
...
}
の中が、SystemC のコンストラクタ(初期化部分)となります。
上の例では user_module_name がクラス名ですから、
SC_HAS_PROCESS(cpu);
cpu(sc_module_name ......)
{
...
}
のように
cpu という名前の関数を定義すると、
それがコンストラクタになります。