编辑
2024-03-05
SystemC
00
请注意,本文编写于 375 天前,最后修改于 375 天前,其中某些信息可能已经过时。

目录

构造函数SC_CTOR
Constructor.cpp
结果

构造函数SC_CTOR

每个c++函数都必须有一个构造函数。对于普通的c++函数,如果没有显式提供,则会自动生成默认构造函数。

然而,每个systemC模块都必须有一个唯一的“名称”,它在实例化模块对象时提供。这要求构造函数至少有一个参数。

SystemC提供了一个宏(SC_CTOR),以方便声明或定义模块的构造函数。 SC_CTOR:

  1. 只能在C++语言规则允许声明构造函数的情况下使用,并且可以用作构造函数声明或构造函数定义的声明符。
  2. 只有一个参数,即正在构造的模块类的名称。
  3. 不能向构造函数添加用户定义的参数。如果应用程序需要传递额外的参数,则应该显式地提供构造函数。

Constructor.cpp

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; }

结果

shell
SystemC 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 许可协议。转载请注明出处!