SystemC——一套将C++扩展为硬件描述语言的Class Library (初学SystemC有感)

原创 2004年07月03日 17:00:00

这几日接接触SystemC,有些感触:

1. SystemC 是一套C++ Class Library,将C++扩展成了一门硬件描述语言(HDL)。我感觉,学习SystemC至少要懂两样东西:C++、一门硬件描述语言。我熟悉C++,并且熟悉Verilog,因此学SystemC能举一反三、触类旁通。

2. SystemC 使用了C++的很多特性:多重继承、虚拟继承、模板、RTTI (at least for dynamic_cast)、异常处理、操作符重载。似乎没有使用STL。

3. SystemC 是一套Application Framework,个人感觉,甚至和MFC颇有相似之处:

  • 一些somewhat古怪的宏:SC_METHODSC_THREADSC_CTOR 等等
  • 一个全局的manager sc_simcontext (类似MFC中的CWinAPP),用sc_get_curr_simcontext()能得到该全局对象的地址(类似MFC中的AfxGetApp() )
  • main() 藏身于SystemC中,你要做的是写一个sc_main()函数作为程序的入口,SystemC会调用你的sc_main()
  • 使用表驱动技术,就像MFC中的Message传递。SystemC用上面那些宏将class(SystemC称为module)的member function(SystemC称为process)注册到全局的表中。然后SystemC这套Application Framework会根据发生的事件来调用你的代码。

4. 从实现技术上看,SystemC有自己的garbage collector、自己的 memory pool、自己的容器(替代STL)。

个人体会:SystemC 在WinXP + VS.NET 2003下的使用步骤

1. SystemC 以源码方式发布,先使用VC7.1编译得到一个库文件:systemc.lib

2. 我们写的 SystemC 程序实际上是C++程序,写好一个SystemC程序(或者叫设计),用C++编译器编译为object文件,再与systemc.lib链接得到可执行文件。

3. 执行此exe文件,进行仿真。从输出(文件或stdout)得知仿真结果。

附:一个最简单的SystemC module

#include "systemc.h"

// 半加器

struct half_adder : sc_module
{
    sc_in a, b;
    sc_out sum, carry;

    void prc_half_adder()
    {
        sum = a ^ b;
        carry = a & b;
    }

    SC_CTOR(half_adder)
    {
        SC_METHOD(prc_half_adder);
        sensitive << a << b;       // a, b 在敏感列表中
    }
};

等效的Verilog设计:

module half_adder(a, b, sum, carry);

    input  a, b;
    output sum, carry;

    reg    sum, carry;
    
    always @(a or b)               // a, b 在敏感列表中
   
begin
      sum = a ^ b;
      carry = a & b;
    end

    
    /* 以上五行可替换为:
    assign sum = a ^ b;
    assign carry = a & b;

    */

endmodule

我用的参考书:《SystemC 基础教程》 J.Bhasker著,孙海平等译,清华大学出版社。

平心而论,这本书翻译得还不错,基本可以放心阅读。

window下systemc的环境搭建

Visual Studio 2012配置SystemC开发环境 这里我们使用的软件平台是Visual Studio 2012(其他平台的应该也是可以的) 下面将一步一步的图文详解 基于Visual...
  • cyh183269855
  • cyh183269855
  • 2016年06月12日 20:42
  • 1040

linux下SystemC安装以及VS2010下SystemC的使用

1、linux下SystemC安装 最近在学习SystemC,这是一门系统级建模语言。其在C++的基础上扩展,使C++具有并发特性(硬件工作都是并发的),简单的说SystemC就是C++的一个类库。...
  • lkiller_hust
  • lkiller_hust
  • 2016年05月08日 11:26
  • 836

学习SystemC应具备的C++基本语法

1. class class是对类型的变量、方法的定义原型 对象是类的实例化; 类由两部分组成。类声明:以数据成员的方式描述数据部分,以成员函数(方法)的方式描述接口;类方法定义:描述类成员函数的具体...
  • ohgaga
  • ohgaga
  • 2015年11月14日 20:22
  • 565

SystemC分析(1)-基本数据类型的实现

SytemC 自定义数据类型的分析,主要分析了自定义数据类型位宽的实现和操作赋值的实现。...
  • taataa
  • taataa
  • 2015年11月07日 21:40
  • 493

SystemC分析(2)Method运行机制分析

怎样用没有时序概念的C++实现对时序单元的模拟? 本文大概分析了method方法的定义和调用过程,使得在使用systemC时能对自己的代码有个清楚的认识。...
  • taataa
  • taataa
  • 2015年11月08日 13:23
  • 622

数字集成电路设计-11-SystemC

引言对于稍大一点的project,我们再经过算法验证(C语言/C++语言)之后,直接进行RTL设计,往往比较困难,这时,我们就需要一种介于算法验证和RTL设计之间的形式来实现,而SystemC就是其中...
  • rill_zhen
  • rill_zhen
  • 2014年04月16日 20:35
  • 3832

GEM5与SystemC混合仿真的实现

1 简介目前SystemC越来越受到芯片设计公司重视,在架构探索,架构验证阶段,其有着快速迭代、软硬件设计依赖小的优点。特别是在SoC架构设计中,多家设计公司都在使用SystemC进行建模仿真。SoC...
  • jinjie1984
  • jinjie1984
  • 2015年08月06日 12:47
  • 851

systemc-2-3.0的安装、配置和测试。(linux环境)附加window下的连接

SystemC Linux開發環境配置 SystemC的開發工具有很多種,不過原則上SystemC只是在C++裏增加一個Class,因此基本上任何一個符合ANSI標準的C++編譯工具都可以對sy...
  • ab751513040
  • ab751513040
  • 2013年06月07日 14:24
  • 2485

SystemC遇到的C++小问题

“右尖括“”问题       在 C++ 语言中,必须用空格来分隔两个连续的右尖括号 (>),否则这些右尖括号将解析为按位右移运算符 (>>)。 比如:sc_signalsc_int > st...
  • xiangshimoni
  • xiangshimoni
  • 2013年07月22日 11:51
  • 1554

SystemC在ubuntu上的安装

最近在弄SocLib时,要用到SystemC,所以就查阅了一下SystemC的安装,这里做个备注,以免后面忘了。。。 我的环境是ubuntu 14.04LTS 把下载下来的SystemC源程序压缩...
  • haifeng_gu
  • haifeng_gu
  • 2015年12月06日 15:03
  • 411
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SystemC——一套将C++扩展为硬件描述语言的Class Library (初学SystemC有感)
举报原因:
原因补充:

(最多只允许输入30个字)