Loading

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是优化工作流的重要一环,如下图所示:

image

作为架构设计人员完成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。

image

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

posted @ 2023-11-29 18:17  sasasatori  阅读(877)  评论(0编辑  收藏  举报