Learn SystemC - Constructor: SC_CTOR

本文介绍了SystemC库中用于声明和定义构造函数的SC_CTOR宏,强调了构造函数参数的限制以及如何使用显示构造函数处理多个参数。通过示例展示了如何在SystemC模块中使用SC_CTOR和显式构造函数实现功能。
摘要由CSDN通过智能技术生成

本文为英文版本翻译,原文地址:Constructor: SC_CTOR

构造函数

每个C++类都需要构造函数,对于普通的C++类,若没有明确提供构造函数,将会自动生成默认构造函数。

而每个systemC模型需要一个唯一的名称,该名称在实例化模型对象时作为参数传入,这就需要构造函数至少有一个参数。

SC_CTOR

SystemC提供了宏SC_CTOR,可用于声明及定义构造函数。
使用时需注意:

  1. 需要符合C++对于构造函数的规则
  2. 该宏声明的构造函数只有一个参数,作为实例对象的名称
  3. 不能添加用户自定义参数

该宏SC_CTOR定义如下:

#define SC_CTOR(user_module_name)      \
    typedef user_module_name SC_CURRENT_USER_MODULE;     \
    user_module_name( ::sc_core::sc_module_name )

如果需要添加额外的参数,需要使用显示定义构造函数(后文进一步介绍)

下面看下该节示例:

// Learn with Examples, 2020, MIT license
#include <systemc>
using namespace sc_core;

SC_MODULE(MODULE_A) {
  SC_CTOR(MODULE_A) { // 构造函数只有一个参数
    SC_METHOD(func_a); // 注册成员函数到仿真内核
  }
  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) { // 显示构造函数
    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;
}

运行结果:

module_a
module_b
module_c i = 1

小结

  1. 了解SC_CTOR
  2. 需要使用显示构造函数以传入多个参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值