模块(Module)
模块是SystemC设计中的基本设计单元。模块可以使得设计者将一个复杂的系统分割为一些更小但易于管理的部分。SystemC模块的功能和作用与HDL语言中的模块是类似的。
定义的模块也可以像HDL语言一样包含端口、信号、其他模块、处理过程和结构体,这些单元实现用以实现模块的功能。
通过端口可以将几个模块连接起来。模块被保存为 .h 文件。如果在一个模块中调用其他模块,只需像C++中引入库一样将要调用的模块作为一个库引入即可。
模块在SystemC中的关键字为:SC_MODULE。紧接着关键字后的是模块的名词如 SC_MODULE(fifo),这就定义了一个叫fifo的模块。
语法:
宏形式
SC_MODULE("module_name") {
// module body
}
C++形式 class module_name : sc_module {
// module body
}
Example:
// All systemc code should include systemc.h file
#include "systemc.h"
// SC_MODULE is macro, hello_world is module name
SC_MODULE (hello_world) {
// Body of module hello_world
};
Module Ports
传输模块内部进程的数据到外部,port的方向类型有:in,out,inout。port的数据类型可以是C++数据类型,SystemC数据类型,或自定义。
SystemC类库提前定义了模式,sc_in, sc_out, sc_inout。
语法:
sc_direction type variable;
说明:
port_direction: sc_in, sc_out, sc_inout其中一种;
type: 数据类型;
variable: 变量名
Example: #include "systemc.h"
SC_MODULE (first_counter) {
sc_in_clk clock; //Clock input of the design
sc_in<bool> reset; //active high, synchronous Reset input
sc_in<bool> enable; //Active high enable signal for counter
sc_out<sc_uint<4>> counter_out; //4bit vector output of the counter
// other
}
Module Signals
用于模块内进行通信,可以是任何合法的数据类型。
语法:
sc_signal type variable;
说明:
sc_signal: 关键字
type:数据类型
variable:变量名