Learn SystemC by examples - Hello World


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

输出字符串

在systemC环境中有两种方式输出字符串:

  1. c++: 在c++常规函数输出
  2. systemc: 在SystemC仿真内核调用的SystemC仿真函数输出

在开始学习之前,需要先了解以下基础内容:

SystemC头文件

要使用SystemC库,程序需要包含SystemC头文件,当前包含头文件有两种形式:

  1. #include <systemc.h>

    • systemc.h将命名空间sc_core和sc_dt中的所有名称添加到它的声明区域中,同时也添加了sc_unnamed以及C/C++中部分选定名称(例如cin、cout、iostream)
    • systemc.h主要是为了兼容早期的SystemC版本,在未来可能废弃
  2. #include <systemc>
    相比较systemc.h,systemc没有默认使用using引入命名空间

在实践中,通常可以先包含头文件#include <systemc>,再通过using引入相关命名空间:using namespace sc_core,开发者可按照实际需要再添加其他。

SystemC主入口

普通的c++程序主入口通常是main(),而使用SystemC库的程序主入口是int sc_main(int argc, char* argv[])
这是因为SystemC库中已定义了main()函数,SystemC库会调用sc_main()并传递命令行参数。

SytemC模型

一个SystemC模型使用classstruct定义,其继承sc_module
在后续的示例中会进一步讨论。

下面是经典的HelloWorld之SystemC版本:

// Learn with Examples, 2020, MIT license
#include <systemc> // 包含 systemC 头文件
using namespace sc_core; // 引入命名空间

void hello1() { // 常规c++函数
  std::cout << "Hello world using approach 1" << std::endl;
}

struct HelloWorld : sc_module { // 定义一个systemC模型
  SC_CTOR(HelloWorld) {// 构造函数,后文中进一步说明
    SC_METHOD(hello2); // 注册一个成员函数到systemC仿真内核
  }
  void hello2(void) { // a function for systemC simulation kernel, void inside () can be omitted
    std::cout << "Hello world using approach 2" << std::endl;
  }
};

int sc_main(int, char*[]) { // 主入口
  hello1(); // 方式 #1: 调用常规函数
  HelloWorld helloworld("helloworld"); // 方式 #2, 创建一个systemC模型实例
  sc_start(); // 启动systemC仿真内核,systemC仿真内核调用helloworld.hello2();
  return 0;
}

运行结果:

Hello world using approach 1  # hello1()输出
Hello world using approach 2  # hello2()输出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值