SystemC 初始化步骤

2024-01-19 23: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/624143

相关文章

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子