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上的一个帖子,我修改了三项内容,分别为:

  1. 第271行,set (CMAKE_BUILD_TYPE Release) -> set (CMAKE_BUILD_TYPE Debug)

  2. 第276行,set (CMAKE_CXX_STANDARD 98) -> set (CMAKE_CXX_STANDARD 14)

  3. 第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做如下修改:

  1. CMakeLists的第80行改成include_directories(/usr/local/systemc/include),不然它还得去检查系统的环境变量。
  2. 自己指定安装路径,例如set(CMAKE_INSTALL_PREFIX "/usr/local/systemc-ams")
  3. 增加一行set(CMAKE_CXX_STANDARD 14)指定编译版本和SystemC保持一致

然后makesudo 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简介与安装的更多相关文章

  1. Node.js 教程 01 - 简介、安装及配置

    系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...

  2. Java Gradle入门指南之简介、安装与任务管理

        这是一篇Java Gradle入门级的随笔,主要介绍Gradle的安装与基本语法,这些内容是理解和创建build.gradle的基础,关于Gradle各种插件的使用将会在其他随笔中介绍.    ...

  3. 细细品味Storm_Storm简介及安装

    Storm是由专业数据分析公司BackType开发的一个分布式实时数据处理软件,可以简单.高效.可靠地处理大量的数据流.Twitter在2011年7月收购该公司,并于2011年9月底正式将Storm项 ...

  4. VMware vSphere 5.1 简介与安装

    虚拟化系列-VMware vSphere 5.1 简介与安装  标签: 虚拟化 esxi5.1 VMware vSphere 5.1 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...

  5. Nutch搜索引擎(第2期)_ Solr简介及安装

    1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化 ...

  6. Node.js的简介和安装

    一.Node.js的简介和安装 a)       什么是Node.js? Node.js是一个开发平台 让JavaScript运行在服务器端的开发平台 ---简单点说就是用JavaScript写服务器 ...

  7. Nutch之简介与安装

    初学Nutch之简介与安装 初学Nutch之简介与安装   1.Nutch简介 Nutch是一个由Java实 现的,开放源代码(open-source)的web搜索引擎.主要用于收集网页数据,然后对其 ...

  8. Nutch搜索引擎Solr简介及安装

    Nutch搜索引擎(第2期)_ Solr简介及安装   1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的 ...

  9. DNN简介以及安装

    开源框架DNN简介以及安装 donetnuke 是一款免费的开源cms框架,目前也有收费版,不过免费版也可以适应大家大部分的需求.我前些阵子是老板让我在20天内,做好一个官网并且发布,并且指定使用dn ...

  10. Grant简介以及安装

    Grant简介以及安装 1.   安装Grunt-cli需要使用npm,全局安装  命令:npm install –g grunt-cli(可能会涉及权限问题) 注意,安装grunt-cli并不等于安 ...

随机推荐

  1. off 表面三角网格翻转问题解决

    简介 参考链接 https://gamedev.stackexchange.com/questions/26974/repairing-back-facing-triangles-without-us ...

  2. yield 和 生成器

    简介 yield 就可以让一个函数成为生成器 参考链接 CSDN博客

  3. 模拟beego登陆

    模拟beego登陆 package main import ( "fmt" "time" "io/ioutil" "net/url ...

  4. 使用django-simple-history实现简单审计功能

    前言 本文依然是中台项目延伸的笔记 这个系列的文章太小众了,看的人都不多 我争取尽快把这系列完结了,然后进入新的项目 关于审计 之前我在 dotnet 的项目里已经自己实现了审计功能了,还是用切面思想 ...

  5. 【还在使用MyBatis-Plus?更强大的来了】MyBatis-Flex 完整使用指南

    MyBatis-Flex 完整使用指南 一.环境准备 1. Maven 依赖 <dependencies> <!-- MyBatis-Flex 核心依赖 --> <dep ...

  6. [原创]《C#高级GDI+实战:从零开发一个流程图》第08章:增加菱形、平行四边形、圆角矩形,文本居中显示

    一.前言 前面的课程我们已经完成了形状和连线的抽象,并独立出了画布控件,基础已经打好,下面就要添砖加瓦了.我们本节课程就来添加一些不同的形状,如:菱形.平行四边形.圆角矩形等.而且我们前面发现形状内的 ...

  7. 解锁硬件潜能:Java向量化计算,性能飙升W倍!

    机器相关的编译优化 与机器相关的编译优化常见的有指令选择(Instruction Selection).寄存器分配(Register Allocation).窥孔优化(Peephole Optimiz ...

  8. JavaSE-类和对象

    类和对象的概念 目录 类和对象的概念 类的定义 写一个类要包含以下部分(类的结构): 对象的创建 成员变量(属性) 成员方法(函数.方法) 对象的实例化 构造器 构造器的使用 构造器重载 构造器链(C ...

  9. Java程序基础——4.布尔运算

    目录 Java布尔运算:逻辑判断的核心机制 布尔运算的基本类型 比较运算符 逻辑运算符 运算优先级规则 关键特性:短路运算 与运算的短路特性 或运算的短路特性 三元运算符:简洁的条件判断 三元运算符的 ...

  10. 本地部署 DeepSeek-R1-671B 满血版大模型教程

    DeepSeek-R1大模型具备深度思考和推理能力,在数学.代码.自然语言推理等任务上都有着极大的提升.一方面由于官方或第三方的在线服务或多或少存在不稳定的问题,另一方面考虑到数据安全和隐私问题,本地 ...