SystemC 初始化步骤

2024-01-18 00:58
文章标签 步骤 初始化 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 初始化步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/617686

相关文章

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

springboot整合mqtt的步骤示例详解

《springboot整合mqtt的步骤示例详解》MQTT(MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,适用于物联网设备之间的通信,本文介绍Sprin... 目录1、引入依赖包2、yml配置3、创建配置4、自定义注解6、使用示例使用场景:mqtt可用于消息发

Java实现TXT文件导入功能的详细步骤

《Java实现TXT文件导入功能的详细步骤》在实际开发中,很多应用场景需要将用户上传的TXT文件进行解析,并将文件中的数据导入到数据库或其他存储系统中,本文将演示如何用Java实现一个基本的TXT文件... 目录前言1. 项目需求分析2. 示例文件格式3. 实现步骤3.1. 准备数据库(假设使用 mysql

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

MySQL配置多主复制的实现步骤

《MySQL配置多主复制的实现步骤》多主复制是一种允许多个MySQL服务器同时接受写操作的复制方式,本文就来介绍一下MySQL配置多主复制的实现步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 环境准备2. 配置每台服务器2.1 修改每台服务器的配置文件3. 安装和配置插件4. 启动组复制4.