SystemC-用SC_MODULE定义模块
模块是一个设计的最基本的单位,是完成一个特定功能的基本单元。比如一个可以是一个模块,一个FIFO可以是一个模块,一个接口转换也可以是一个模块,整个设计就是顶层模块。
一个模块可以包含一些其它的Syst基本元素如端口、内部信号、内部数据、子模块、进程、构造函数和析构函数等。这些元素共同定义模块所表达的功能。
在Syst中,常使用关键字SC_MODULE来声明一个模块,如下例所示:
SC_MODULE(sram)
{……//Details of the design}
};
在关键字SC_MODULE后面的标志符是模块的名字,即“sram”。SC_MODULE是SystemC库中定义的一个宏,使用它定义一个模块实际上是定义了一个新的C++ 结构体:
#define SC_MODULE(module_name) \
struct module_name: publ sc_module
所以除了上面的定义模块的方法外,还可以直接用C++ struct的定义方法来定义模块。举例如下:
struct sram:public sc_module {……//Details of the design };
在C++中,struct是一个特殊的类,所以也可以利用class来定义一个模块。举例如下:
class sram:public sc_module {……//Details of the design };
这两种声明的区别是前者默认的成员都是公有(Public)的,而后者是的私有(Private)。在具体应用中,两者是等效的。在实际应用中,一般不直接用struct定义一个模块。
一个模块可以包含一些其它的Syst基本元素如端口、内部信号、内部数据、子模块、进程、构造函数和析构函数等。这些元素共同定义模块所表达的功能。
在Syst中,常使用关键字SC_MODULE来声明一个模块,如下例所示:
SC_MODULE(sram)
{……//Details of the design}
};
在关键字SC_MODULE后面的标志符是模块的名字,即“sram”。SC_MODULE是SystemC库中定义的一个宏,使用它定义一个模块实际上是定义了一个新的C++ 结构体:
#define SC_MODULE(module_name) \
struct module_name: publ sc_module
所以除了上面的定义模块的方法外,还可以直接用C++ struct的定义方法来定义模块。举例如下:
struct sram:public sc_module {……//Details of the design };
在C++中,struct是一个特殊的类,所以也可以利用class来定义一个模块。举例如下:
class sram:public sc_module {……//Details of the design };
这两种声明的区别是前者默认的成员都是公有(Public)的,而后者是的私有(Private)。在具体应用中,两者是等效的。在实际应用中,一般不直接用struct定义一个模块。