陈硕的Blog

吾尝终日而思矣,不如须臾之所学也。吾尝跂而望矣,不如登高之博见也。……君子生非异也,善假于物也。

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

新一篇: SystemC 初始化步骤 | 旧一篇: HEC虚拟机的一些改进建议

这几日接接触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著,孙海平等译,清华大学出版社。

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

发表于 @ 2004年07月03日 17:00:00|评论(loading...)|编辑

新一篇: SystemC 初始化步骤 | 旧一篇: HEC虚拟机的一些改进建议

评论

#写得很好,同时有问题请教? 发表于2005-07-21 19:39:00  IP: 61.186.252.*
陈硕:
你好!在google里面搜到你得blog真得好高兴!
看了你得文章,真得写得很好得!对于systemc我想你肯定是这个方面得专家,肯定也用它作个很多项目得,我是搞验证,今年开始得,我们这里新来了一个验证得博士,要我学习systemc,我想现在synopsys有systemverilog,而cadence有verilog2005,都在很大得程度上加大验证得能力?
想请问 你还有必要学习systmec么再加上网上也有很多人硕systemc都是末路英雄啦!
很想听听你得见解!
我叫彭帆,真得很高兴认识你得,以后能否用邮箱向你请教呢?
同时对于学习systemc,我向您肯定有很多建议得,我没有学习过
C++,现在想学习,那么要重点学习C++得那些内容呢?
此致
敬礼!
彭帆
#写得很好,同时有问题请教? 发表于2005-07-21 19:40:00  IP: 61.186.252.*
陈硕:
你好!在google里面搜到你得blog真得好高兴!
看了你得文章,真得写得很好得!对于systemc我想你肯定是这个方面得专家,肯定也用它作个很多项目得,我是搞验证,今年开始得,我们这里新来了一个验证得博士,要我学习systemc,我想现在synopsys有systemverilog,而cadence有verilog2005,都在很大得程度上加大验证得能力?
想请问 你还有必要学习systmec么再加上网上也有很多人硕systemc都是末路英雄啦!
很想听听你得见解!
我叫彭帆,真得很高兴认识你得,以后能否用邮箱向你请教呢?
同时对于学习systemc,我向您肯定有很多建议得,我没有学习过C++,现在想学习,那么要重点学习C++得那些内容呢?
我得邮箱:pengfan225@163.com
此致
敬礼!
彭帆
#安存 发表于2006-02-09 20:32:00  IP: 221.216.127.*
陈硕:
  你好!很高兴认识你!我叫施安存;
  我是一个systemc的初学者,我想用它开发FPGA,但是我不知道如何生成烧写文件,另外我应该选择怎样的硬件环境?
  先谢谢你;我的E-MAIL:SACTHY@263.NET
此致
敬礼
安存
#Solstice 发表于2006-02-09 21:55:00  IP: 218.89.10.*
找本书照着做吧。先用Verilog或VHDL试验通过了再说。
#miaomao 发表于2006-04-17 18:54:00  IP: 61.48.11.*
陈硕您好,我最近看到网上有评论说《SystemC基础教程》质量还不错,我很高兴,头一次看到有读者评论,我还想具体问问这位评论者的感想呢,可是后来才发现,百度上好些人都是转载你的文章,且未注明出处或转载字样,我问他们是问错了人。
我想问你,你说它翻译质量还可以,你是怎样得出这个结论的呢?是看过这本书的英文原版,还是直接看中文留下的印象?期盼您的回复
#Solstice 发表于2006-04-18 08:56:00  IP: 207.46.89.*
是直接看中文留下的映象。
#Solstice 发表于2006-05-29 08:42:00  IP: 61.149.152.*
我已经有两年没有用SystemC了,抱歉。
#rain 发表于2006-05-29 01:13:00  IP: 59.124.167.*
陳碩先生您好!!

我最近也在學習systemc,目前使用的環境是vc++6.0
我想將環境移到vc7.1不過環境設定一直有問題,看到您
是使用 vc7.1的環境,不知道陳碩先生是否有空寫一篇
教我們如何在vc7.1的環境設定systemc呢??

#funeryoung 发表于2007-11-01 16:02:46  IP: 218.104.71.*
请问,如果是在Linux环境下,如何使用SystemC提供的源文件进行处理呢?
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 陈硕