RISC-V体系结构编程与实践(第2版)
上QQ阅读APP看书,第一时间看更新

2.1 实验平台

2.1.1 QEMU

QEMU Virt实验平台(QEMU模拟器中内置的一块虚拟开发板)模拟的是一款通用的RISC-V开发板,包括内存布局、中断分配、CPU配置、时钟配置等信息,这些信息目前都在QEMU的源代码中实现,具体文件是qemu/hw/riscv/virt.c。QEMU Virt实验平台具有如下硬件特性。

最多支持8个RV32GC/RV64GC通用处理器内核。

支持CLINT。

支持平台级别的中断控制器。

支持NOR Flash存储器。

支持兼容NS16550的串口。

支持RTC。

支持8个VirtIO-MMIO传输设备。

支持1个PCIe主机桥接设备。

支持fw_cfg,用于从QEMU获取固件配置信息。

QEMU Virt开发板的地址空间布局如表2.1所示。

表2.1 QEMU Virt开发板的地址空间布局

QEMU Virt模拟的开发板的中断号分配如表2.2所示。

表2.2 QEMU Virt模拟的开发板的中断号分配

2.1.2 NEMU

NEMU(NJU Emulator)最早是由南京大学实现的一个用于教学的计算机指令集体系结构(Instruction Set Architecture,ISA)模拟器,香山处理器团队基于2019版的NEMU进行了增强和维护,以模拟香山处理器前期指令集和体系结构。本章把NEMU简称为香山模拟器。NEMU支持x86、RV32和RV64等指令集体系结构。

RV64版本NEMU具有如下硬件特性。

支持1个RV64GC通用处理器内核。

支持CLINT。

支持NOR Flash存储器。

支持兼容NS16550的串口。

支持Xilinx UartLite串口控制器。

支持RTC。

支持单步调试。

RV64版本的NEMU Virt开发板的地址空间布局如表2.3所示。

表2.3 NEMU Virt开发板的地址空间布局

表2.3中的信息都可以在NEMU的Configure菜单中配置。

使用NEMU之前需要自行编译。

$ sudo apt install libsdl2-dev libreadline-dev
$ git clone https://github.com/runninglinuxkernel/NEMU.git
$ cd NEMU
$ export NEMU_HOME=$(pwd)
$ make riscv64-benos_defconfig
$ make -j$(nproc)
$ sudo cp build/riscv64-nemu-interpreter /usr/local/bin