Learn SystemC by examples - SystemC Module

本文详细介绍了SystemC模型的概念,包括如何通过SC_MODULE宏、结构体和类定义模型,以及模型的构造、实例化和交互方式。通过示例展示了如何在C++中创建和使用SystemC模块进行系统仿真。
摘要由CSDN通过智能技术生成

本文为英文版本翻译,原文地址:Learn SystemC - SystemC Module

什么是systemC模型

  1. 最小的功能容器,包含状态、行为、层级连接结构
  2. 是一个c++类,继承systemC基础类:sc_module
  3. 是SystemC的原理结构构建块
  4. 用于表示真实系统中一个组件

如何定义一个systemC模型

定义一个systemC模型有如下几种方式:

  1. SC_MODULE(module_name) {}
    使用systemC提供的宏SC_MODULE定义一个模型。
#define SC_MODULE(user_module_name)   \
    struct user_module_name : ::sc_core::sc_module

可以看到,使用宏定义和第二种方式相同。
2. struct module_name: public sc_module {}
使用继承sc_module的结构体定义模型
3. class module_name : public sc_module { public: }
使用继承sc_module的类定义模型

class和struct区别:
class默认成员private;struct默认成员public

如何使用systemC模型:

  1. sc_module模型只能在阐述阶段构造,在仿真阶段实例化模型将出现错误
  2. 模型需要至少一个构造函数,构造函数只能有一个sc_module_name类型的参数,及其它类型参数。
  3. 创建模型实例时需要传入字符串参数作为实例名称
  4. 模型间交互需要使用接口方法,即模型和外部交互需要通过它的ports,其它交互方法主要用于调试

下面是模型具体定义及使用示例:

// Learn with Examples, 2020, MIT license
#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, 使用结构体声明
  SC_CTOR(MODULE_B) {
    std::cout << name() << " constructor" << std::endl;
  }
};
class MODULE_C : public sc_module { // 方式3, 使用类声明
public: // 构造函数需要public
  SC_CTOR(MODULE_C) {
    std::cout << name() << " constructor" << std::endl;
  }
};

int sc_main(int, char*[]) { // systemC主入口
  MODULE_A module_a("module_a"); // 实例化module_a, 实践中经常模型名称(字符串“module_a")和对象名称一致
  MODULE_B module_b("modb"); // 实例化module_b, 模型名称(modb)和对象名称(module_b)不一致
  MODULE_C module_c("module_c"); // 实例化module_c
  sc_start(); // 可以不调用sc_start(),因为模型实例化过程是阐述阶段完成,该阶段发生在st_start前
  return 0;
}

运行结果:

module_a constructor
modb constructor
module_c constructor
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值