Applistar

7. 3. 2 SC_MODULEの記述スタイル

  7. 3. 2 SC_MODULEの記述スタイル  

7. 3. 2 SC_MODULEの記述スタイル

モジュールの信号はpublicにします。

private にすると、上位からトレース出来なくなります

pos(), neg()のようなエッジはbool、sc_logic型だけに使えます

例えば次のように bool でも sc_logic でもない例えば int と宣言した bin という名前の入力について sensitive に pos() を指定すると

SC_MODULE(box)             // box というモジュールクラスを定義する
{
  sc_in<int> bin;
  sc_out<int> bout;
  void box::connect();

  SC_CTOR(box) {            // コンストラクタ (初期化部分)
    SC_METHOD(connect);
    sensitive << bin.pos();
  }
};

次のように pos は宣言されていない、という文法誤りとされます。

simple2.h:14: error: `pos' undeclared (first use this function)
同一モジュールに登録出来るプロセスの数の上限に注意する(必要)

同一モジュールに登録出来るプロセスの数には上限があります。 例えば、Visual C++ 6 を使っている場合には、次の部分により 10 に制限されています。

{{inc_dir("src/")}} {{incex2(systemc/kernel/sc_module.h,382,389)}}

7. 3. 2. 1 モジュールコンストラクタ記述方法

モジュールコンストラクタ (SC_CTOR) には、プロセスの登録、センシティビティリスト、 下位モジュールの接続だけを記述します。

SC_CTORの中でモジュールのポートに代入してはならない(runtime ?)

初期化はプロセス内で記述するか initialize() メソッドを使う

例えば、次のように代入文を書いたとします。

SC_MODULE(fox)             // fox というモジュールクラスを定義する
{
  sc_in<bool>       fin;
  ...
  SC_CTOR(fox) {            // コンストラクタ (初期化部分)
        ...
        //               box1                  box2
        //            +-------+              +-------+
        //    fin -> bin    bout -- line -- bin .. bout -> fout
        //            +-------+              +-------+
        box1 ->bin(fin);
        ....
        fin = 4;
  }

その時のコンパイルエラーは、次のように 「operator= が定義されていない」となります。

In file included from simple.cpp:5:
simple.h: In constructor `fox::fox(sc_module_name)':
simple.h:44: error: no match for 'operator=' in 'this->fox::fin = 4'
/cygdrive/d/cygwin/home/makoto/local-src/systemc-2.0.1/include/systemc/communication/sc_signal_ports.h:559: error: candidates
   are: sc_in<bool>& sc_in<bool>::operator=(const sc_in<bool>&)
make: *** [simple.o] Error 1
makoto@makoto 10:57:46/040917(~/systemc/simple)>
下位モジュールの端子接続はSC_CTORの中に書きます

下位モジュール端子の接続はコンストラクタ(SC_CTOR)の中に書きます

下位モジュールの配置

ポインタは SC_MODULE の中に、 実際の配置は SC_CTOR の中 に記述します。

  7. 3. 2 SC_MODULEの記述スタイル