forked from OpenXiangShan/NEMU
-
Notifications
You must be signed in to change notification settings - Fork 2
difftest支持elf文件加载
Zhicheng edited this page Oct 12, 2023
·
11 revisions
参考 https://github.com/OpenXiangShan/xs-env/tree/master
用NanhuV3替换Xiangshan
cd xs-env
rm -rf XiangShan
git clone https://github.com/Siudya/Nanhu-V3.git
mv Nanhu-V3 XiangShan
注:先根据xs-env配置,保证能正常编译emu后,再进行后继步骤。
cd xs-env
. env.sh
rm -rf NEMU
git clone https://github.com/yaozhicheng/NEMU.git
cd NEMU
make riscv64-xs-ref_defconfig # 目前只有这个配置能用
make menuconfig # 进入 Memory Configuration ---> 开启 Use sparse memory model
make # 编译生成 build/riscv64-nemu-interpreter-so
如果出现 softfloat.a 连接错误,进入 resource/softfloat/repo/build/Linux-x86_64-GCC/ 编辑 Makefile,在COMPILE_C中添加 -fPIC:
cd resource/softfloat/repo/build/Linux-x86_64-GCC/
vim Makefile
...
COMPILE_C = \
gcc -c -Werror-implicit-function-declaration -fPIC -DSOFTFLOAT_FAST_INT64 \
$(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@
MAKELIB = ar crs $@
...
然后make clean && make重新编译 softfloat.a
cd xs-env
cd XiangShan
rm -rf difftest
git clone -b SpMem https://github.com/yaozhicheng/difftest.git # 采用 SpMem分支
make emu EMU_THREADS=8 CONFIG_USE_SPARSEMM=1 -j20 # CONFIG_USE_SPARSEMM=1 开启 elf支持
./build/emu -b 0 -e 0 -i ./ready-to-run/amtest-riscv64-xs.elf --diff ../NEMU/build/riscv64-nemu-interpreter-so
注:请提前确定对应的elf文件存在
下载修改后的 spike 并进行编译
cd xs-env
git clone https://github.com/yaozhicheng/riscv-isa-sim.git
cd riscv-isa-sim/difftest
make CONFIG_USE_SPARSEMM=1 # 使用参数 CONFIG_USE_SPARSEMM=1 开启 sparse ram
ls build/riscv64-spike-so # 查看编译结果
在difftest侧,需要启用 CONFIG_USE_SPARSEMM=1 和 REF=spike,开启sparse ram 和spike接口
cd xs-env
cd XiangShan
rm build/emu* -rf
make emu EMU_THREADS=8 REF=spike CONFIG_USE_SPARSEMM=1 -j20
编译完成执行测试(请提前确定对应的elf文件存在)
./build/emu -b 0 -e 0 -i ./ready-to-run/amtest-riscv64-xs.elf --diff ../riscv-isa-sim/difftest/build/riscv64-spike-so
如果需要使用最新版本spike,请使用以下仓库
git clone -b nanhu-v3 https://github.com/Siudya/riscv-isa-sim.git # 采用nanhu-v3分支的spike
git clone -b nanhu-v3 https://github.com/Siudya/difftest.git # 采用nanhu-v3分支的difftest
对于该版本difftest,编译时需要指定DIFF_PROXY, DIFF_PROXY=SpikeProxy (默认) 或者 DIFF_PROXY=NemuProxy
cat /NEMU/include/common.h
cat /config/config.h
...
#ifndef CONFIG_USE_SPARSEMM
#define CONFIG_USE_SPARSEMM 1
#endif
...
注: spike和nemu在现实上不一致,所以diff时会出现不一致的地方。例如csr寄存器的默认值等。