0

我正在从 C++ 迁移到 SystemC,遇到了以下基本问题。(我在谷歌搜索过,但只有一个 .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宏来指示你的模块有进程/es。

关于嵌套类,它与 C++ 中的相同。

我不确定你的第三个问题是什么意思。

于 2013-09-09T07:27:59.507 回答
1

关于您的第三个问题:您可以像通常在 C++ 程序中那样做。指定属性/操作范围的最佳位置是 SC_MODULE 的声明部分,无论您将其放在 cpp 还是头文件中。在 SystemC 设计中,通常只有端口和构造函数/析构函数应该定义为公共的,以允许其他模块与之连接,除非您有充分的理由并希望打破 systemc 设计的模块化以显式访问一个模块。

于 2013-10-05T18:04:30.923 回答