systemC模块:
sc_module
。如何定义systemC模块:
SC_MODULE(module_name){}
:它使用systemC
定义的宏"SC_MODULE
",它是#2的设备。Struct module_name: public sc_module{}
:继承sc_module
的Struct
。module_name: public sc_module {public:}
:继承sc_module
的类。
注意,与struct
的“public
”相比,class
的默认访问控制模式为“private
”,与struct
的“public
”不同。如何使用systemC模块:
sc_module
的对象只能在细化过程中构造。在模拟过程中实例化模块是错误的。sc_module
派生的类都应该至少有一个构造函数。每个构造函数应该有且只有一个sc_module_name
类的参数,但可以有sc_module_name
以外的其他类的参数。c++#include <systemc>
using namespace sc_core;
SC_MODULE(MODULE_A) { // 方法#1,使用systemC提供的SC_MODULE宏
SC_CTOR(MODULE_A) { // 默认构造函数
std::cout << name() << " constructor" << std::endl; // Name()返回对象名称,该名称在实例化期间提供
}
};
struct MODULE_B : public sc_module { // 方法#2,使用c语法,可读性更强
SC_CTOR(MODULE_B) {
std::cout << name() << " constructor" << std::endl;
}
};
class MODULE_C : public sc_module { // 方法#3,使用class代替struct
public: // 必须显式声明构造函数为public
SC_CTOR(MODULE_C) {
std::cout << name() << " constructor" << std::endl;
}
};
int sc_main(int, char*[]) { // 系统入口点
MODULE_A module_a("module_a"); // 声明并实例化module_a,通常的做法是分配模块名==对象名
MODULE_B module_b("modb"); // 声明并实例化module_b,模块名!=对象名
MODULE_C module_c("module_c"); // 声明并实例化module_c
sc_start(); // 在本例中可以跳过这一点,因为模块实例化发生在精化阶段,在sc_start之前
return 0;
}
c++ SystemC 2.3.3-Accellera --- Oct 4 2020 22:59:38
Copyright (c) 1996-2018 by all Contributors,
ALL RIGHTS RESERVED
module_a constructor
modb constructor
module_c constructor
本文作者:古月流新
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!