SC_CTOR
每个c++函数都必须有一个构造函数。对于普通的c++函数,如果没有显式提供,则会自动生成默认构造函数。
然而,每个systemC模块都必须有一个唯一的“名称”,它在实例化模块对象时提供。这要求构造函数至少有一个参数。
SystemC提供了一个宏(SC_CTOR
),以方便声明或定义模块的构造函数。
SC_CTOR
:
c++
#include <systemc>
using namespace sc_core;
SC_MODULE(MODULE_A) {
SC_CTOR(MODULE_A) { // 构造函数仅采用模块名称
SC_METHOD(func_a); // 将成员函数注册到 systemC 仿真内核。
}
void func_a() { // 无输入、无输出的成员函数
std::cout << name() << std::endl;
}
};
SC_MODULE(MODULE_B) {
SC_CTOR(MODULE_B) { // 构造 函数
SC_METHOD(func_b); // 注册成员函数
}
void func_b(); // 声明函数
};
void MODULE_B::func_b() { // 在类定义之外定义函数
std::cout << this->name() << std::endl;
}
SC_MODULE(MODULE_C) { // 构造函数接受更多参数
const int i;
SC_CTOR(MODULE_C); // SC_HAS_PROCESS是推荐的。
MODULE_C(sc_module_name name, int i) : sc_module(name), i(i) { // Explit 构造函数
SC_METHOD(func_c);
}
void func_c() {
std::cout << name() << ", i = " << i << std::endl;
}
};
int sc_main(int, char*[]) {
MODULE_A module_a("module_a");
MODULE_B module_b("module_b");
MODULE_C module_c("module_c",1);
sc_start();
return 0;
}
shellSystemC 2.3.3-Accellera --- Oct 4 2020 22:59:38 Copyright (c) 1996-2018 by all Contributors, ALL RIGHTS RESERVED module_a module_b module_c, i = 1
本文作者:古月流新
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!