香山处理器仿真环境搭建

香山处理器产生的前因后果就不介绍了,有兴趣的读者可以查看香山的官方文档,其中已经有详细的介绍。另外本文也不是从零开始搭建香山的开发环境,官方文档‘前端开发环境’已经体贴的给我们做好了一键实现环境搭建的repo。

先描述下我的工作环境:

vmware:32G物理内存,50G disk,4核CPU

OS:ubuntu 18.04

环境不同的仅做参考。第一次写博,有错误和不成熟的地方还请各位大牛批评指正,小弟拜谢了。

先按照官方文档中下载xs-env

>> git clone https://github.com/OpenXiangShan/xs-env
>> cd xs-env
>> sudo -s ./setup-tools.sh # use apt to install dependencies, you may modify it to use different pkg manager

setup-tools.sh中完成了编译香山核所需的工具安装,其中会下载并编译verilator,一个开源仿真工具,也是香山核官方支持的开源仿真工具,当前香山核也支持vcs仿真,但貌似支持力度不是特别好;此脚本的另一个主要功能就是下载mill,mill是scala的构建工具,类似于sbt,貌似很多人都从sbt迁移到了mill,在github下载速度实现让人无法忍受,经过无数次失败后终于下载下来,为了让小伙伴们不在经历这个过程,已将mill-0.9.8放到了gitee上,下载后放到~/.cache/mill/download/0.9.8即可使用,注意/usr/bin/mill其实是个脚本,用于检查~/.cache/mill/download/0.9.8文件是否存在,不存在时会从https://github.com/lihaoyi/mill/releases/download/0.9.8/0.9.8-assembly下载mill可执行文件,然后调用~/.cache/mill/download/0.9.8运行chisel代码构建。

完成上面的工具下载安装后,开始下载香山核编译运行所需的代码仓

>> source setup.sh

在这步,会下载XiangShan,NEMU,nexus-am和nutshell。NEMU是一个款类似spike的risc-v指令模拟器,nexus-am是香山所使用的应用开发框架,nutshell是另一款开源risc-v核,可能是前期做对比或开发使用。香山使用了difftest测试框架,会比较每条指令在程序运行的过程中的正确与否,NEMU就是difftest的golden model。

下载完上面的代码后,setup.sh中会自动编译NEMU和nexus-am中的coremark,这里还需要说下NEMU有两种工作模式:作为单独可执行程序的工作模式和golden model模式。两种模式的编译目标不同,单独可执行程序编译时指定riscv64-xs_defconfig,生成的文件是buidl/riscv64-nemu-interpreter;golden model模式编译时指定riscv64-xs-ref_defconfig,生成文件是riscv64-nemu-interpreter-so。

编译NEMU时又报错了

xs-env/NEMU/include/checkpoint/path_manager.h:24:10: fatal error: filesystem: No such file or directory
 #include <filesystem>

 NEMU中用到了C++17的特性,需要将gcc/g++升级到8.x版本以上(想升级到9.x也不行啊,ubuntu 18.04中没有gcc9.x的版本),通过使用apt安装gcc-8并配置update-alternatives:

>> sudo apt install gcc-8
>> sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8
>> sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 700 --slave /user/bin/g++ g++ /usr/bin/g++-7
>> sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path            Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-8   800       auto mode
* 1            /usr/bin/gcc-7   700       manual mode
  2            /usr/bin/gcc-8   800       manual mode

Press <enter> to keep the current choice[*], or type selection number: 0
update-alternatives: using /usr/bin/gcc-8 to provide /usr/bin/gcc (gcc) in auto mode

 在编译过程中还出现了一次cmake版本太低的错误,编译需要cmake 3.14以上,但ubuntu apt中最高只能到3.10,cmake官网下载速度实在让人泪目,还好在gitee上找到了3.19版本的镜像仓:

cmake-release: cmake release repo

下载后解压缩,然后将其中的bin目录加到PATH中即可。

OK,现在代码都已经准备好了,开始编译香山核。

>> cd xs-env/XiangShan
>> make init
>> make emu CONFIG=MinimalConfig EMU_TRACE=1 -j4

make init会下载香山代码仓所用到的子模块,make emu的参数请参考官方文档说明,-j4这里选择4是因为我的vmware中只有4个虚拟CPU核。

编译过程中出现错误。。。

Connection:[logTimestamp] type:[func] source location:[SimTop] sink location:[BusPerfMonitor_1]
Connection:[XSPERF_CLEAN] type:[func] source location:[SimTop] sink location:[BusPerfMonitor_1]
Connection:[XSPERF_DUMP] type:[func] source location:[SimTop] sink location:[BusPerfMonitor_1]
Connection:[DISPLAY_LOG_ENABLE] type:[func] source location:[SimTop] sink location:[BusPerfMonitor_1]
1 targets failed
XiangShan.test.runMain subprocess failed
Makefile:102: recipe for target 'build/SimTop.v' failed

没啥提示就直接failed,郁闷了一阵,根据文档中所讲,到troubleshoot中查找了下,应该是内存不够导致的,香山核编译时在MinimalConfig配置下需要至少32G内存,标准配置最少需要64G内存,通过如下方法修改:

1. 修改XiangShan/build.sc中的参数

override def forkArgs = Seq("-Xmx64G", "-Xss256m")

改成

override def forkArgs = Seq("-Xmx24G", "-Xss256m")

 我的虚拟机有32G内存,为了保险这里设置为24G内存,请大家根据自己的PC配置自行确定此参数。

2. 物理内存不能满足需求而又不想在加钱买内存,使用swap来补充,这里我在vmware中新增了一块100G的虚拟硬盘,专门作为swap,即便是标准配置的香山核也可以编译了:)。关闭虚拟机新增scsi接口硬盘后再启动,然后在终端中操作

>> sudo mkswap -f /dev/sdb
>> sudo swapon /dev/sdb

新增的硬盘在我的vmware中显示的/dev/sdb。

重新执行make emu CONFIG=MinimalConfig EMU_TRACE=1 -j4,经过漫长的等待终于编译完成了,迫不及待的跑个仿真:

>> ./build/emu -i ready-to-run/coremark-2-iteration.bin

运行成功!

Emu compiled at Dec  4 2022, 19:33:27
Using simulated 32768B flash
[warning]no valid flash bin path, use preset flash instead
The image is ready-to-run/coremark-2-iteration.bin
Using simulated 8192MB RAM
--diff is not given, try to use $(NEMU_HOME)/build/riscv64-nemu-interpreter-so by default
NemuProxy using /home/fenghang/xs-env/NEMU/build/riscv64-nemu-interpreter-so
The first instruction of core 0 has commited. Difftest enabled. 
[NEMU] Can not find flash image: (null)
[NEMU] Use built-in image instead
[src/device/io/mmio.c:39,add_mmio_map] Add mmio map 'flash' at [0x0000000010000000, 0x00000000100fffff]
Running CoreMark for 2 iterations
2K performance run parameters for coremark.
CoreMark Size    : 666
Total time (ms)  : 5210
Iterations       : 2
Compiler version : GCC10.2.0
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x72be
Finised in 5210 ms.
==================================================
CoreMark Iterations/Sec 383
Core 0: HIT GOOD TRAP at pc = 0x800026ba
total guest instructions = 626,872
instrCnt = 626,872, cycleCnt = 587,010, IPC = 1.067907
[PERF ][time=              587011] TOP.SimTop.l_soc.core_with_l2.core.frontend.icache.missUnit.prefEntries_0: PrefetchEntryReq2,                    0
[PERF ][time=              587011] TOP.SimTop.l_soc.core_with_l2.core.frontend.icache.missUnit.prefEntries_1: PrefetchEntryReq2,                    0
[PERF ][time=              587011] TOP.SimTop.l_soc.core_with_l2.core.exuBlocks.scheduler.fpBusyTable: busy_count,                    0
[PERF ][time=              587011] TOP.SimTop.l_soc.core_with_l2.core.exuBlocks_1.scheduler.fpBusyTable: busy_count,                    0
[PERF ][time=              587011] TOP.SimTop.l_soc.core_with_l2.core.exuBlocks.scheduler.intBusyTable: busy_count,              3289028

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 香山开源高性能risc-v处理器设计与实现 pdf 是一份介绍risc-v处理器的设计和实现的文档。risc-v是一种基于精简指令集的处理器架构,因其简洁、开放、可定制的特点,受到了广泛关注。 该文档详细介绍了如何在FPGA(现场可编程门阵列)上实现risc-v处理器。作者分享了开发处理器的具体步骤、设计方案、软件支持等方面的知识。并且,该处理器的性能也在文档中详细评估。 该处理器在性能、功耗等方面有着不俗表现。其主频可以达到400MHz以上,实现了乘-累加指令,并且具有64位寄存器和32个寄存器,支持RV64I标准指令集,内存延迟很低,具有较好的实时性能。 总之,香山开源高性能risc-v处理器设计与实现 pdf是一份非常值得阅读的文档,其中对risc-v处理器的设计和实现有着详细的介绍,可以帮助人们了解risc-v处理器的优势和不足,为相关领域的开发提供指导。 ### 回答2: 《香山开源高性能risc-v处理器设计与实现》是一本介绍如何设计和实现RISC-V处理器的书籍,也是一本介绍RISC-V处理器架构的入门读物。该书深入浅出地介绍了RISC-V架构和处理器设计的基本知识,并通过实例详细地述说了如何基于该架构,设计和实现一个高性能的RISC-V处理器。 该书的作者陈海波教授是一位专业的计算机架构工程师,他在书中将自己多年来的实践经验与理论知识完美结合,将复杂的概念以通俗易懂的方式呈现给读者。全书以RISC-V指令集架构、CPU内部运行机制、核心子系统设计等方面为主线,详细地介绍了处理器的设计流程和实现细节。最后以在FPGA上的逻辑仿真和运行测试为实例,让读者真正了解该处理器的可靠性和高性能。 通过学习《香山开源高性能risc-v处理器设计与实现》这本书,读者可以深入学习RISC-V处理器架构以及处理器设计方面的知识。不仅可以对计算机组成原理和计算机系统结构有更深入的理解,还可以掌握实际的设计和开发技巧。对于从事处理器设计、嵌入式系统设计等领域的专业人员,是一本不可多得的参考书籍。 ### 回答3: 《香山开源高性能risc-v处理器设计与实现》是一本介绍RISC-V处理器架构的书籍,该处理器架构是一个基于精简指令集(RISC)的开源处理器架构。本书主要介绍了香山开源处理器的设计与实现,是一本深入学习RISC-V架构的重要参考书。 该书共分为八章,首先介绍了处理器的基本概念和RISC-V处理器架构的特点。接着深入分析了RISC-V处理器的指令集和管道,讲解了指令集概述、流水线架构、指令编码等内容。紧接着,本书介绍了一款基于RISC-V架构的香山开源处理器,详细介绍了处理器的数据通路、控制单元、存储结构等模块的实现原理。 在完成处理器架构描述之后,本书详细介绍了基于Vivado实现的处理器的设计和仿真调试的方法。通过实际例子的讲解,读者可以深入了解如何通过Vivado进行处理器设计和仿真调试。 该书最后介绍了一些关于RISC-V处理器架构的扩展和应用的内容,如在处理器架构扩展方面的内容,以及如何在RISC-V处理器架构上实现操作系统和应用程序的开发。 总之,《香山开源高性能risc-v处理器设计与实现》是一本详细介绍RISC-V处理器架构和实现方法的书籍,对于学习处理器架构和实现的读者是一本不可多得的参考书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值