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