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

SystemC语法入门 阅读详情

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

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

SystemC快速实战指南 主要内容 如何安装SystemC SystemC风格的hello worl 如何编译SystemC下的hello world 1. 如何安装SystemC SystemC是一组C++库,可以从下面这个网址进行下载。 https://accellera.org/downloads/standards/systemc SystemC下有几个组件: SystemC 2.3.3 (Includes TLM) SystemC AMS 2.3 SystemC CCI 1.0 SystemC Verificat 阅读详情

相关推荐

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

Simulink中通过MEX与MinGW实现C/C++结构体变量的高效导入

本文详细介绍了在Simulink中通过MEX工具链与MinGW编译器,高效导入C/C++结构体变量的完整流程。文章从需求背景出发,逐步讲解了MinGW环境配置、.h文件编写规范、核心导入命令Simulink.importExternalCTypes的使用,以及如何在MATLAB Function模块和总线创建器中调用自定义结构体,旨在实现模型与代码的无缝对齐,为后续仿真和代码生成奠定坚实基础。

weixin_29056781的博客 343

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

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

虫无涯的博客 4071

GEE进行Theil-Sen Median斜率估计和Mann-Kendall检验

Python实现Theil-Sen Median斜率估计和Mann-Kendall检验// 定义时间范围//NDVI图像集合// 定义每年的开始和结束日期// 加载NDVI数据集,按日期过滤,并计算最大值.max()}));// 计算Sen斜率并剪裁// 可视化Sen斜率Map.addLayer(senSlope.select('slope'), vis, "Sen斜率 ");// MK检验// 创建一个列表,包含年度NDVI图像的list。

qq_44894692的博客 965

如何配置 OpenClaw 使用免费搜索工具:摆脱付费 API 限制

本文介绍了如何配置OpenClaw使用免费搜索工具来替代付费API。主要内容包括:1)启用内置的web_fetch工具直接获取网页内容;2)创建自定义脚本聚合免费AI资讯源;3)配置其他免费网络工具。文章详细说明了配置步骤,推荐了多个优质免费AI资讯网站,并分析了该方案的优劣势。这种配置方式完全免费且灵活,特别适合预算有限的用户,能够在不依赖付费API的情况下获取所需信息。

dongdeaiziji的专栏 9814
上一篇: HEC虚拟机的一些改进建议
下一篇: SystemC 初始化步骤
陈硕
博客等级 码龄26年 1万+粉丝 144原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值