进阶(A)阶段概述
参考大纲
由于时间关系, 我们来不及提供完整的A阶段学习讲义. 这里我们先列出一些大纲, 感兴趣的同学可以按照我们给出的方向自行探索.
我们把需要实现的内容按软件和硬件进行分类, 可分成三类: 单纯的系统软件支持, 单纯的微结构优化, 以及软硬件协同的ISA功能. 我们编排顺序的原则仍然是"先完成, 后完美", 具体地:
- 先实现软硬件的ISA功能, 因为这部分功能对软件和硬件都有影响, 实现这部分内容后, 硬件的功能上限基本上就确定了
- 然后实现更多系统软件的支持, 在硬件功能确定的情况下运行更复杂的软件
- 最后对微结构进行优化, 并用相对完整的系统软件和应用程序来评估优化的效果
不过需要说明的是, 即使上述大致方向不会有所调整, 随着将来讲义的细化, 必做题的细节及其之间的顺序可能会有所调整. 如果你希望参与A阶段的考核和流片, 届时请以最新版讲义的要求为准. 如果你对编排顺序有更好的建议, 也欢迎和我们交流.
乘除法器
乘除法器的设计
你可以先参考第五期的课件或者其他参考资料.
实现RV32M乘除法器
为NPC实现乘除法指令. 实现后, 重新评估microbench的性能.
将RV32E改为RV32I
将RV32E改为RV32I, 然后评估microbench的性能, 对比一下从RV32E到RV32I的改动如何影响性能.
使用更大的icache
接下来一段时间, 我们将集中精力完善NPC的功能以及系统软件的支持, 暂不考虑性能的评估. 目前你可以不考虑面积的限制, 尽可能增加icache的容量, 通过降低缺失率来提升IPC, 从而提升NPC整体的仿真效率. 我们将在完成Linux启动后, 再回过头来考虑性能评估和微结构优化, 并按照A阶段的流片面积约束来合理调整各种部件的大小.
系统调用和应用程序
在NPC上通过Nanos-lite运行Busybox
完成上述内容后, 尝试在NPC上通过Nanos-lite运行Busybox.
虚存管理
在NPC上运行支持虚存管理的Nanos-lite
在NPC上运行上述支持虚存管理的Nanos-lite.
完整特权级和xv6
移植运行xv6
尝试将MIT的xv6-riscv移植到NPC上. 原版的xv6-riscv运行在QEMU上, 并且依赖于QEMU中的一些设备. 特别地, 对于磁盘设备的依赖, 你可以将其修改成ramdisk, 毕竟对处理器设计来说, 持久化的磁盘不是必须的.
启动Linux和Debian
启动最小Linux
配置一个尽可能小的Linux, 使得Linux初始化完成时, 将一个hello程序作为init
进程. 尝试在NPC上启动这个最小Linux.
在Linux上运行Busybox
将BusyBox作为Linux的rootfs, 尝试在NPC上运行.
启动Debian
尝试在NPC上启动RV32 Debian.