我正在从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:指定属性/操作范围的最佳位置在哪里? (公共/受保护的/私有)。
答案 0 :(得分:1)
当从SystemC中的声明中分离出实现时,你可以像在C ++中那样以正常方式完成它。
但是当你想要一个带有多个参数的构造函数时(除了默认值SC_CTOR
接受模块名称),你必须定义自己的构造函数。
如果模块具有SystemC进程(SC_THREAD
,SC_METHOD
,SC_CTHREAD
),那么您将必须使用SC_HAS_PROCESS
宏来指示您的模块具有进程/ es。< / p>
关于嵌套类,它与C ++中的相同。
我不确定第3个问题是什么意思。
答案 1 :(得分:1)
关于你的第三个问题:你可以像在C ++程序中那样做。指定属性/操作范围的最佳位置是SC_MODULE的声明部分,无论是将其放在cpp还是头文件中。 在SystemC设计中,通常只应将ports和constructor /析构函数定义为public以允许其他模块与其连接,除非您有充分的理由并希望打破systemc设计的模块性以明确访问其成员函数一个模块。