如何在SystemC Hello World程序中使用头文件

How to use header file in SystemC Hello World program?

本文关键字:文件 程序 World SystemC Hello      更新时间:2023-10-16

我正在从C++迁移到SystemC,遇到了以下基本问题。(我在谷歌上搜索过,但只有一个.cpp文件中的例子)。提前谢谢。

我知道以下"你好.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:指定属性/操作范围的最佳位置在哪里?(公共/受保护/私有)。

在 SystemC 中将实现与声明分离时,您可以像在 C++ 中一样以正常方式执行此操作。

但是当你想要一个具有多个参数的构造函数时(默认的除外,即 SC_CTOR接受模块名称)您必须定义自己的构造函数。
如果模块有 SystemC 进程(SC_THREADSC_METHODSC_CTHREAD),那么你将不得不使用 SC_HAS_PROCESS 宏来指示你的模块有进程。

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

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

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