SystemC简介与安装

发布时间 2023-11-29 18:19:32作者: sasasatori

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下是非常费事的。

同时SystemC也是进一步优化组里的工作流的重要一环,如下图所示:

image

作为架构设计人员完成SystemC模型的开发之后,可以让算法人员直接运行算法进行性能评估,可以交给软件开发人员进行底层软件/驱动程序的开发,可以交给验证人员作为UVM验证时的golden bench,也可以交给硬件开发人员进行实现的参考。

可以说将所有的环节都打通了,非常具有吸引力。

此外支持混合系统建模仿真的SystemC AMS使得模拟电路部分建模和仿真也可以进行了。当我们需要进行数模混合建模仿真,一样可以基于SystemC来完成。

安装

官网上可以下载到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)

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。

image

参考资料

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