提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Noxim 是由卡塔尼亚大学(意大利)基于SystemC开发的片上网络模拟器。是一种开放、可配置、可扩展、周期精确的 NoC 模拟器,可以进行传统有线 NoC 和新兴 WiNoC 架构的性能和功率数据的分析,也可以根据有关功耗(动态和泄漏)的细粒度统计数据进行性能的分析。
本文主要介绍下Noxim在ubuntu上的环境搭建与简单运行。
一、环境准备
- 下载源码
在github上download Noxim源码:Noxim
可以使用如下命令下载:
git clone https://github.com/davidepatti/noxim.git
- 系统:本文是基于Ubuntu22.04 进行安装的
- 在VSCode中打开下载的源码,可以看到项目中有个INSTALL.txt,可以按照里面的安装步骤进行环境配置。
二、安装步骤
1. C++ Compiler
由于SystemC是基于C++的一种开发语言,所以环境必须装有C++ 编译器。如果ubuntu中没有安装C++编译器,可以按照下面的命令进行安装:
sudo apt-get install build-essential
2. 安装YAML
- 安装工具
sudo apt-get install libyaml-cpp-dev libboost-dev
- 下载yaml的源码:yaml-cpp
- 下载的是一个zip包,需要执行以下命令
unzip yaml-cpp-master.zip
mv yaml-cpp-master yaml-cpp
cd yaml-cpp
mkdir lib
cd lib
cmake ..
make
sudo make install
3. 安装SystemC
- 官网下载SystemC源码:SystemC-2.3.1
(我这里下载的是2.3.1,目前最新的是2.3.3) - 下载的是一个tar包,解压缩后,同样可以看到一个INSTALL.txt文件,可以按照文档中描述的步骤进行安装,具体需要执行以下命令:
tar -xzf systemc-2.3.1.tgz
mkdir objdir
cd objdir
export CXX=g++
../configure
make
make install
cd ..
rm -rf objdir
执行完上面的make install
,可以看到中断会闪现一个如下界面,表示安装成功。
- 可以进入目录
objdir/example
中,执行下make
,然后执行make check
,经过几分钟,终端如果显示test pass,即可证明安装成功。
至此,所有配置都安装完毕。
三、Noxim编译与运行
- 进入Noxim项目的bin目录
- 修改Makefile文件中的SYSTEMC 和 YAML选项
SYSTEMC := (自己的安装路径)/systemc-2.3.1/
YAML := /opt/local/
- 设置环境变量
1. sudo vim /etc/profile
2. 在文件尾部增加:export LD_LIBRARY_PATH=(自己的安装路径)/systemc-2.3.1/lib-linux64
3. source /etc/profile
- 在bin目录下,执行命令:
make
- 此时,已经编译完毕。
- 执行以下命令,可以使用 config_examples/ 目录下的yaml文件进行测试:
./noxim -config ../config_examples/256_4h.yaml
执行完上述命令,终端会显示,表示安装成功。
四、可能会遇到问题
- error:
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link
原因:
/usr/lib/wsl/lib/ 目录下的文件都是只读的系统文件,不是软连接,而这里使用的软连接,所以会提示“不是一个软连接符号”
解决:
cd /usr/lib/wsl
sudo mkdir lib2
sudo ln -s lib/* lib2
sudo ldconfig
然后将文件/etc/ld.so.conf.d/ld.wsl.conf
中的 /usr/lib/wsl/lib
改为 /usr/lib/wsl/lib2
。
可以用命令sudo ldconfig
进行测试是否修改成功。
如果想永久修改,执行以下命令:
sudo vim /etc/wsl.conf
[automount]
ldconfig = false
- 在编译SystemC时,可以能会遇到以下问题:
/src/systemc.h:118:16: error: ‘std::gets’ has not been declared
原因:
std::gets已在C++11中删除, 如果使用C++11进行编译,那么就需要禁用这一行
解决:
将 /src/systemc.h:118
修改为
#if defined(__cplusplus) && (__cplusplus < 201103L)
using std::gets;
#endif
- 在Noxim中执行
make
时,可能会出现如下问题:
原因:
系统环境找不到libsystemc-2.3.1.so 这个文件,需要将库的路径加到环境变量中
解决:
1. sudo vim /etc/profile
2. 在文件尾部增加:export LD_LIBRARY_PATH=(自己的安装路径)/systemc-2.3.1/lib-linux64
3. source /etc/profile