SystemC 初始化步骤

SystemC语法入门 阅读详情

环境: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 对象的初始化。

SystemC time 首先要区分SystemC 仿真时间 和 机器执行时间,机器执行时间 是我们CPU物理机跑程序所花费的物理时间,这个时间就是我们真是感受到的时间,1s,1min … ;而SystemC 仿真时间是SystemC程序执行过程中kernel调度的时间,SystemC仿真时间跟物理执行时间没有任何粒度上的对应关系,比如一个程序,在SystemC 仿真时间 从0ns到 100 ns过程中花费了CPU物理时间为10s;并不能推算出从100ns到200ns过程中也需要花费10s的物理时间。 对于1G Hz的silico 阅读详情

相关推荐

SystemC简介 --- SystemC是什么?SystemC能干什么?

SystemC是一种基于C++的开源库,主要用于系统级建模,特别适用于复杂芯片的软硬件协同设计与验证。它通过提供并行处理、事件驱动等机制,支持从架构探索到RTL设计的全流程。相比传统硬件描述语言,SystemC建模效率更高,仿真速度更快,并能实现软硬件并行开发,显著缩短芯片开发周期。其核心功能包括系统内核调度、进程管理、模块化设计和通信机制,兼容标准C++环境,无需昂贵EDA工具。作为Accellera组织维护的开源项目,SystemC采用商业友好的Apache 2.0协议,在芯片前端流程中可作为跨部门协作

元直的博客 1万+

SystemC简明教程

SystemC 是一种基于 C++ 的硬件描述语言 (HDL),用于建模和模拟数字系统。它由 Open SystemC Initiative (OSCI) 开发和维护。基于 C++ 语言:SystemC 是建立在 C++ 语言之上的,利用 C++ 的面向对象特性和丰富的标准库来描述硬件系统。这使得 SystemC 具有良好的可扩展性和可移植性。多层次建模:SystemC 支持从系统级到寄存器传输级 (RTL) 的多层次硬件建模,可以在不同抽象层次之间进行转换。

飞鹤的程序员人生 5864

华为云Stack应急预案实战:从IaaS到PaaS的故障场景与恢复指南

本文详细解析华为云Stack应急预案在IaaS到PaaS层的故障场景与恢复实践,涵盖计算节点故障、存储链路中断等典型问题。通过标准化操作流程和实战案例,帮助企业在突发故障时快速恢复业务,确保高可用性。华为云Stack的应急预案体系经过金融、政务等严苛场景验证,恢复时间指标(RTO)控制在30分钟以内。

weixin_33724059的博客 373

【SystemC初认识】SystemC是什么?有哪些主要组件?如何简单使用?

SystemC 是一种基于 C++ 的硬件描述语言(HDL),常用于硬件系统的建模、仿真以及验证;允许开发者在一个系统级别(即硬件和软件的结合)上描述和模拟复杂的系统;SystemC 既适用于硬件设计,也适用于嵌入式软件开发;SystemC 的核心在于其基于 C++ 的编程模型,它扩展了 C++ 的特性,使其能够进行硬件系统建模;SystemC 提供了一些类和库,以便开发者描述硬件组件、模块之间的交互以及时间上的顺序。

虫无涯的博客 4071

CCF CSP历年题解(python)

菜鸡一枚,没参加过算法竞赛,单纯为了抵研究生考试复试才刷题,通过写博客记录下来,希望能和大家互相交流,代码质量不高,大家见谅。 因为考研等原因,题目不定期更新… 第一题 201312-1出现最多次数的数 ...

weixin_44690402的博客 5004

Stata实战:5步搞定PSM倾向得分匹配(附完整代码与常见报错解决)

本文详细介绍了使用Stata进行PSM(倾向得分匹配)的5步实战流程,包括数据预处理、模型构建、匹配算法选择、匹配质量诊断和结果解释。提供完整代码示例和常见报错解决方案,帮助研究者高效完成实证分析,提升匹配成功率。

weixin_29214559的博客 590
上一篇: SystemC——一套将C++扩展为硬件描述语言的Class Library (初学SystemC有感)
下一篇: 正态分布的随机数发生器 in C#
陈硕
博客等级 码龄26年 1万+粉丝 144原创
评论 18
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值