陈硕的Blog

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

原创 SystemC 初始化步骤收藏

新一篇: 正态分布的随机数发生器 in C#

环境:VC toolkit 2003 + SystemC 2.0.1

  为了找出SystemC定义了哪些全局变量/静态变量,我在crt\src\crt0dat.c

void _initterm(_PVFV * pfbegin, _PVFV * pfend)

函数中设下断点,at Line 598:

        if ( *pfbegin != NULL )
            (**pfbegin)();        // 此处中断

然后单步跟踪程序,就得到了SystemC的大致初始化顺序:(C++标准不保证各转译单元(translation unit)之间全局变量的初始化顺序,因此这里列出的可看作某种典型情况)

  据我观察,SystemC定义了15处全局/静态变量,其中7处形如:

    static int forty_two = initialize();

散见于communication\sc_communication_ids.cpp、datatypes\bit\sc_bit_ids.cpp、datatypes\fx\sc_fx_ids.cpp、datatypes\int\sc_int_ids.cpp、kernel\sc_kernel_ids.cpp、utils\sc_report.cpp、utils\sc_utils_ids.cpp。

  其余8个初始化点分别是:

1. kernel\sc_time.cpp, L355

    const sc_time SC_ZERO_TIME;

2. communication\sc_interface.cpp, L78

    sc_event sc_interface::m_never_notified;

    // 此处会转而调用 kernel\sc_simcontext.cpp,L835:
    // sc_get_curr_simcontext()
    // 从而初始化全局的 sc_simcontext 对象,大事件!

3. kernel\sc_module.cpp,L136

    const sc_bind_proxy SC_BIND_PROXY_NIL;

4. kernel\sc_cor_fiber.cpp,L49

    static sc_cor_fiber main_cor;

    // 此处与平台相关,如果是UNIX like平台,那么“Coroutine class implemented with 
    // QuickThreads.”;若是Win32平台,那么“Coroutine implementation with fibers.”
    // 不过程序中的注释似乎写错了 :)

5. utils\sc_report_handler.cpp,L205

    static HANDLER_GC_NAME gc;

6. kernel\sc_lambda.cpp,L59

    sc_lambda
    sc_lambda::dummy_lambda;

7. datatypes\bit\sc_logic.cpp,L154,初始化4个逻辑值常数

    const sc_logic sc_logic_0( Log_0 );
    const sc_logic sc_logic_1( Log_1 );
    const sc_logic sc_logic_Z( Log_Z );
    const sc_logic sc_logic_X( Log_X );

    const sc_logic SC_LOGIC_0( Log_0 );
    const sc_logic SC_LOGIC_1( Log_1 );
    const sc_logic SC_LOGIC_Z( Log_Z );
    const sc_logic SC_LOGIC_X( Log_X );

8. datatypes\fx\scfx_rep.cpp,L57

    static scfx_pow10 pow10_fx;

以后,我将继续分析这些初始化到底做了些什么工作,重头戏当然是 sc_simcontext 对象的初始化。

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

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

评论

#cycm 发表于2004-11-01 20:48:00  IP:
TrackBack来自《SystemC 初始化步骤》

Ping Back来自:blog.csdn.net
#doggyzone 发表于2004-09-15 16:25:00  IP: 202.109.79.*
不知你研究过没有,SystemC和multi-thread的冲突问题。我们发现如果在(Linux)SystemC程序里另开一个thread,在编译的时候加上-lp选项,生成的程序在运行的时候会crash掉。不知道为什么。
#Rokier 发表于2004-09-20 09:47:00  IP: 61.152.127.*
用multi-thread方式重新编译systemc库就行了,我用过在systemc里开线程,windows和linux下都行。
#Alfred Lee 发表于2004-09-26 13:27:00  IP: 218.63.149.*
请问,我欲使用SystemC进行开发,可苦于一直找不到SystemC的下载,可否指点一二,谢谢!
#Solstice 发表于2004-10-02 22:05:00  IP: 61.131.58.*
http://www.systemc.org/

Why don't you use Google ?
#ic.expert 发表于2005-12-27 23:59:00  IP: 218.249.160.*
我是学体结构的,也做过纯数字电路的组成。最近在看systemc.很牛沙的语言。比systemverilog有更抽象的设计方法~。但是有些地方不太完善:〉
#玉来客 发表于2006-01-18 08:57:00  IP: 222.62.167.*
中国芯片业不发达,CPU,GPU,芯片组等等都是外国产的,我们何不组成联盟,也开发自己的芯片.不要以为这是痴人说梦,只要敢想,必会实现.
#玉来客 发表于2006-01-18 09:11:00  IP: 222.62.167.*
SystemC风声很盛,相传已经标准化,我等当用之.
软件领域,微软,甲骨文,SUN等雄居之,可是无数炎黄子孙龙的传人开始反击,已经取得成绩,可是仍然任重道远.而,硬件领域,一直空白,虽有龙芯,未能抗衡.且NVIDIA ,ATI把持GPU业,NVIDIA ,ATI,SIS,VIA,INTEL把持芯片组,INTEL,AMD,SUN,HP,IBM又把持大型机,服务器,工作站,笔记本,台式机等领域CPU等核心技术,INTEL,AMD几乎是笔记本,台式机处理器的全部,我人不能染指,遗憾.所以,我们要联盟,开发出晶体管数目10亿左右的与安腾(不是奔腾)媲美的CPU,世间志士,可有勇气?
#longaway 发表于2006-01-18 09:46:00  IP: 221.218.2.*

自古以来,联盟坏菜的多数。
#star 发表于2006-04-26 16:56:00  IP: 211.144.104.*
新手问个问题,crt0dat.c里面设置断点,仿真的时候怎么设置,systemc的文件和crt0dat.c不在一个目录下面
我试了最简单的nand的例子,可以跑的,然后在crt0dat.c里面设置断点,根本不停的,两个不相关的,然后把crt0dat.c导入到nand的项目里,编译的时候出错,因为有很多相关的东西都没链接过来,不知道陈兄是如何调试的,能否说的详细一些。
#Solstice 发表于2006-04-26 17:11:00  IP: 207.46.89.*
你用什么编译器?
#star 发表于2006-04-27 15:52:00  IP: 211.144.104.*
用的VC6.0
#Solstice 发表于2006-04-27 16:01:00  IP: 207.46.89.*
无能无力,抱歉。
#star 发表于2006-05-16 11:01:00  IP: 211.144.104.*
再请教个问题,systemc里面有cthread,thread,method三种进程,对应有sc_method_process等三个类,一个系统里有很多子模块,每个子模块应该都有建立对应的线程的类的对象,这些线程是如何工作的?我在systemc的代码里面没有找到createthread的函数阿,难道没有创建线程吗?那子模块之间是怎么样并行运行的呢?
#Solstice 发表于2006-05-16 13:08:00  IP: 207.46.89.*
据我所知,SystemC实际上是单线程的,不过它用了纤程(fibre),又叫coroutine。
#star 发表于2006-05-17 13:19:00  IP: 211.144.104.*
纤程这个词第一次听说,网上搜了一下好像是C#里的东西啊,资料也满少,有点糊涂
加QQ讨论下吧:QQ185269582
#Solstice 发表于2006-05-17 20:12:00  IP: 210.31.76.*
fiber 不是什么新东西了(就是coroutine),Win32时代就有(ConvertThreadToFiber),而且Win32加入这个功能是为了能更好地移植Unix下的程序,说明Unix里更早就有这个东西。(可能Win16里也有,我不知道。)你可以看Jeffery Richter的《Programming Applications for Microsoft Windows 4th Edition》第12章,国内翻译为《Windows核心编程》。
ps. 我不用IM。
#SeaSun 发表于2006-07-31 00:37:00  IP: 59.33.30.*
工具多数情况下是“使用”而不是给人“研究”的。不知道明白我的意思了没有。
#cloud 发表于2006-09-21 17:14:00  IP: 210.77.28.*
不知道你有没有SystemC Compiler的源码可以提供,不胜感激。
我的QQ115418999,还有如果有SystemC语言的入门书电子版可以共享的话就更好了
#funeryoung 发表于2007-11-01 16:00:14  IP: 218.104.71.*
怎么没有下文了,还想知道接下来的初始化工作是如何做的呢……
发表评论  


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