SystemC简介与安装
SystemC简介与安装
介绍
最近在搭建一个仿真器的工作,希望可以实现电路系统建模以后直接模拟macro上进行完整网络推理的电路表现,这样无论是设计过程时探索设计空间,进行方案评估,以及流片后的性能评估等都可以得到一个高度简化。
综合考虑各类开源,最后决定使用SystemC进行电路的行为建模。
SystemC不是一门新语言,而是C++开发的库,因此可以直接使用C++调用开发,不需要学习额外的语言。只要有一个支持C++的环境,安装SystemC之后就可以运行,也不需要额外的EDA工具。
SystemC是由Accellera组织拥有的开源库,它使用Apache 2.0开源协议;Apache2.0协议是一种对商业应用友好的许可,所以,不论用户用之开发的产品是否商用,都可以放心使用,不用担心侵权行为。
SystemC有很多优良特性,首先SystemC可以采用类似于Verilog一样的模块开发,使得SystemC搭建的系统模型可以较容易的转换为RTL设计。此外SystemC可以进行cycle by cycle的仿真,从而获得电路模型每个cycle下的表现,甚至可以导出VCD波形文件导入EDA软件中进行观察。
由于SystemC基于C++语言,在进行算法评估时可以直接使用各种强大的C++算法库快速开发复杂的算法,例如矩阵运算库,傅里叶变换库,科学计算库,深度学习库等等。类似的算法开发在Verilog或者SystemVerilog下是非常费事的(当然SystemVerilog通过DPI可以实现类似的事情)。
SystemC的最重要的优势是可以进行事务级建模(TLM),当我们不关心具体的模块实现,而关注模块之间的通信时,使用TLM可以大大加速开发速度,这也是我们在进行从顶向下架构设计时必经的一环。
总之SystemC是优化工作流的重要一环,如下图所示:

作为架构设计人员完成SystemC模型的开发之后,可以让算法人员直接运行算法进行性能评估,可以交给软件开发人员进行底层软件/驱动程序的开发,可以交给验证人员作为UVM验证时的reference model,也可以交给硬件开发人员进行实现的参考。
可以说将所有的环节都打通了,非常具有吸引力。
安装
在官网上可以下载到SystemC的源代码,进行编译安装。
最新的release是2022年12月更新的SystemC-2.3.4,但我在尝试编译安装时碰到的问题比较多,同时相关的debug资料比较少,最后选择降了一个版本,安装2018年的SystemC-2.3.3。
首先下载源码包并解压,然后进入解压文件夹后创建build文件夹。
mkdir build
cd build
我没有采用运行configure的方式,而是直接手动对CMakeLists进行了编辑。打开项目自己的CMakeLists,对照stackoverflow上的一个帖子,我修改了三项内容,分别为:
第271行,set (CMAKE_BUILD_TYPE Release) -> set (CMAKE_BUILD_TYPE Debug)
第276行,set (CMAKE_CXX_STANDARD 98) -> set (CMAKE_CXX_STANDARD 14)
第545行,set (_CMAKE_INSTALL_PREFIX "/usr/local/systemc")
做1,2修改的原因是我编写的代码使用的是c++ 14的标准(使用了c++ 14的语法feature),如果SystemC的编译采用c++ 98标准的话,include到我的项目中一同编译会出现报错。3主要是修改安装路径,原来的默认安装路径是在/opt/systemc下的。
然后在build文件夹下进行执行如下命令即可。
cmake ..
make
sudo make install
安装完毕后新建工程,编写main.cpp和CMakeLists。
main.cpp:
#include <systemc.h>
SC_MODULE (hello_world) {
SC_CTOR (hello_world)
{
SC_THREAD(say_hello);
}
void say_hello()
{
cout << "Hello World SystemC" << endl;
}
};
int sc_main(int argc, char* argv[])
{
hello_world hello("HELLO");
sc_start();
return (0);
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(test_systemc)
set(SystemCLanguage_DIR /usr/local/systemc/lib/cmake/SystemCLanguage)
find_package(SystemCLanguage CONFIG REQUIRED)
set (CMAKE_CXX_STANDARD ${SystemC_CXX_STANDARD})
add_executable(test_systemc main.cpp)
target_link_libraries(test_systemc SystemC::systemc)
编译运行,结果ok。

SystemC-AMS是SystemC针对模拟和混合信号的拓展。
安装SystemC-AMS时,从此处下载,然后解压。
必须要装好SystemC才能安装SystemC-AMS。
同样是解压压缩包后mkdir build然后cd build。
对外面的CMakeLists.txt做如下修改:
- CMakeLists的第80行改成include_directories(/usr/local/systemc/include),不然它还得去检查系统的环境变量。
- 自己指定安装路径,例如set(CMAKE_INSTALL_PREFIX "/usr/local/systemc-ams")
- 增加一行set(CMAKE_CXX_STANDARD 14)指定编译版本和SystemC保持一致
然后make,sudo make install即可。
在编写测试文件的CMakeLists.txt时,记得将SystemC-AMS的include文件夹添加到target_include_directories中即可。
参考资料
https://www.cnblogs.com/xuhaoee/p/12119724.html
https://blog.csdn.net/gsjthxy/article/details/105669841
https://stackoverflow.com/questions/46875731/setting-up-a-systemc-project-with-cmake-undefined-reference-to-sc-core
https://zhuanlan.zhihu.com/p/146747267
https://systemc.org/overview/systemc-ams/#Why SystemC AMS
SystemC简介与安装的更多相关文章
- Node.js 教程 01 - 简介、安装及配置
系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...
- Java Gradle入门指南之简介、安装与任务管理
这是一篇Java Gradle入门级的随笔,主要介绍Gradle的安装与基本语法,这些内容是理解和创建build.gradle的基础,关于Gradle各种插件的使用将会在其他随笔中介绍. ...
- 细细品味Storm_Storm简介及安装
Storm是由专业数据分析公司BackType开发的一个分布式实时数据处理软件,可以简单.高效.可靠地处理大量的数据流.Twitter在2011年7月收购该公司,并于2011年9月底正式将Storm项 ...
- VMware vSphere 5.1 简介与安装
虚拟化系列-VMware vSphere 5.1 简介与安装 标签: 虚拟化 esxi5.1 VMware vSphere 5.1 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...
- Nutch搜索引擎(第2期)_ Solr简介及安装
1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化 ...
- Node.js的简介和安装
一.Node.js的简介和安装 a) 什么是Node.js? Node.js是一个开发平台 让JavaScript运行在服务器端的开发平台 ---简单点说就是用JavaScript写服务器 ...
- Nutch之简介与安装
初学Nutch之简介与安装 初学Nutch之简介与安装 1.Nutch简介 Nutch是一个由Java实 现的,开放源代码(open-source)的web搜索引擎.主要用于收集网页数据,然后对其 ...
- Nutch搜索引擎Solr简介及安装
Nutch搜索引擎(第2期)_ Solr简介及安装 1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的 ...
- DNN简介以及安装
开源框架DNN简介以及安装 donetnuke 是一款免费的开源cms框架,目前也有收费版,不过免费版也可以适应大家大部分的需求.我前些阵子是老板让我在20天内,做好一个官网并且发布,并且指定使用dn ...
- Grant简介以及安装
Grant简介以及安装 1. 安装Grunt-cli需要使用npm,全局安装 命令:npm install –g grunt-cli(可能会涉及权限问题) 注意,安装grunt-cli并不等于安 ...
随机推荐
- U盘安装可能会遇见UEFI的问题,使用easyBCD安装即可。
参考链接 CSDN博客 Tips 关于 (hd0,0) 如果出现 File not find的问题那么使用,(hd0,1) 后面的数字变一下,主要根据是,windows 的磁盘管理中的C盘的系统盘的序 ...
- ETL没有自动化数据集成平台,你的BI报表只会让你错失先机
随着现代企业的数据量和复杂性的不断增加,传统的商业智能(BI)报表系统虽然能够提供详尽的业务指标和洞察,但它们依赖于用户的主动查询和查看.这种被动式的数据分析模式存在几个显著的缺陷: 滞后性:用户需要 ...
- 抖音商单信息通过ETL工具快速同步
一.抖音平台 抖音是一款热门的短视频社交平台,拥有海量用户和高度活跃的商业生态.在抖音上,商家可以开设商铺并发布商品,消费者可以在平台上购买商品并获得优惠.同时,抖音也是一个广告平台,商家可以通过购买 ...
- SciTech-Mathmatics-Proba. & Stats.: 判断充满世界的"Distribution":置信区间估计方法
SciTech-Mathmatics-Proba. & Stats.: 判断充满世界的"Distribution":置信区间估计方法 The world is full o ...
- ICEE-USB-USB Type-A(Large) 与 Type-B(Micro) 的接线图
USB Type-B(Micro): 大多数的排列方式是: (左到右)红白绿黑:定义: 红色- USB,标有-VCC.Power.5V.5VSB字样 绿色-USB数据线(正)- DP(Data Pos ...
- RabbitMQ的管控台的使用说明-九五小庞
1.RabbitMQ的管控台确实是一个好东西,但是如果是新手,比如刚接触RabbitMQ的时候,看到RabbitMQ的管控台也是一脸懵逼的说,慢慢接触多了,才了解一些使用. 1).RabbitMQ的管 ...
- MFC好书推荐
1. Programming Windows with MFC MFC最好的入门书籍,一个类一个类的拆开然后讲解给你,很容易上手 2. MFC Interals 分析的很深入,学过了第一本后,可以通过 ...
- pygame小游戏打飞机_2模块显示
加入游戏背景 通过 pygame.image.load 函数引入背景图片,赋值给变量 bgImg 调用 screen.bilt 函数绘制背景图 # 引用pygame import pygame # 使 ...
- 安卓APP导出
直接从项目中运行生成的 app-debug.apk 是用一个临时的调试密钥签名的,很多手机会因为安全策略而拒绝安装,或者在安装时给出更强的安全警告. 为什么需要签名? 给App签名主要有三个目的: 身 ...
- 3000 台 JuiceFS Windows 客户端性能评估
近期,我们在云端渲染场景中,对 100 至 3000 节点的 JuiceFS Windows 客户端进行了性能测试.测试内容为渲染前置任务,即在渲染任务之前执行所有存储相关操作. 与实际使用场景相比, ...