0

C++ から SystemC に移行していますが、次の基本的な質問に答えました。(Google で検索しましたが、単一の .cpp ファイルの例しか得られませんでした)。前もって感謝します。

次の「hello.cpp」が機能することを知っています:

//hello.cpp
#include "systemc.h"

SC_MODULE (hello_world) {
  SC_CTOR (hello_world) {   
  }
  void say_hello() {  
    cout << "Hello World.\n";
  }
};

int sc_main(int argc, char* argv[]) {
  hello_world hello("HELLO");
  hello.say_hello();
  return(0);
}

質問 1: どうすれば hello.h と hello.cpp に分けることができますか? 次のコードは C++ です。同等の SystemC コードを作成する方法がわかりません。

//hello.h
class hello_world
{
public:
    hello_world();
    void say_hello();
};

//hello.cpp
hello_world::hello_world()
{
}

hello_world::say_hello()
{
    cout << "Hello World.\n";
}

質問 2: SystemC でネストされたクラスを作成する方法は? たとえば、次の C++ に従った同等の SystemC コードは何ですか?

class foo
{
public:
    int fooAttr1;

    class bar
    {
    public:
        int barAttr1;
    };
};

質問 3: 属性/操作のスコープを指定するのに最適な場所はどこですか? (公開/保護/非公開)。

4

2 に答える 2

1

SystemC の宣言から実装を分離するときは、C++ で行うのと同じように通常の方法で行うことができます。

ただし、複数の引数を持つコンストラクターが必要な場合 (デフォルトのもの、つまりSC_CTORモジュール名を受け入れるものを除く) は、独自のコンストラクターを定義する必要があります。
また、モジュールに SystemC プロセス ( SC_THREADSC_METHODSC_CTHREAD) がある場合は、SC_HAS_PROCESSマクロを使用して、モジュールにプロセスがあることを示す必要があります。

ネストされたクラスに関しては、C++ と同じです。

3番目の質問の意味がわかりません。

于 2013-09-09T07:27:59.507 に答える
1

3 番目の質問については、通常 C++ プログラムで行うのと同じことができます。属性/操作のスコープを指定するのに最適な場所は、SC_MODULE の宣言部分です。それを cpp またはヘッダー ファイルに配置します。SystemC 設計では、通常、ポートとコンストラクタ/デストラクタのみを public として定義して、他のモジュールが接続できるようにする必要があります。モジュール。

于 2013-10-05T18:04:30.923 に答える