跳转至

大实验:五级流水线 RISC-V 处理器

实验目的

  1. 深入理解流水线结构计算机指令的执行方式,掌握流水处理器的基本设计方法。
  2. 深入理解计算机的各部件组成及内部工作原理。
  3. 加深对于 RV32I 指令集的理解。
  4. 掌握计算机外部输入输出的设计。
  5. 提高硬件设计和调试的能力。

实验环境

  1. 硬件环境:PC 计算机,Windows 10 或 Linux 操作系统;ThinPAD-Cloud 实验平台或者云实验平台。
  2. 软件环境:FPGA 开发工具软件 Vivado;监控程序运行环境。

实验内容

本实验是综合性实验,要求同学们在 ThinPAD-Cloud 实验平台上实现一个完整的计算机系统,最终目标是能够支持运行 32 位监控程序,并运行实验 1 中编写的汇编语言程序。具体需要达到:

  1. 能够支持监控程序基本版本用到的 RV32I 指令集。
  2. 每一个小组还需要实现指定给本小组的额外三条指令。布置的指令均来自 RISC-V B 扩展,文档可以在这里查阅到。注意:一定是 0.92 版本,更新或者更旧的版本的部分指令编码不一样,我们统一以 0.92 版本为准。
  3. 具有内存(SRAM)访问功能,能够满足监控程序数据与代码的存储需求。
  4. 利用串口实现计算机的输入输出模块,能够支持监控程序与 PC 的相互通信。
  5. 作为提高要求,实现中断处理机制,对串口产生的中断信号,运行中断处理程序接收数据。
  6. 作为提高要求,支持虚拟内存管理,分离用户程序和监控程序内核的地址空间。

实验原理

本实验为大型综合性系统实验,是对计算机组成原理课程各知识点的综合应用和学习效果的检验。实验目标是运行监控程序,因此需要在已有流水线 CPU 基础上,增加总线访问机制,以便支持串口通信。对于学有余力的同学,可以尝试支持中断机制,虚拟内存机制,并运行提高版本的监控程序。

完成本实验需要对流水线处理器的结构有充分的理解。具体实验原理请参考计算机组成原理教材和本实验指导书关于 ThinPAD-Cloud 实验平台的详细介绍。

实验重点在于流水线 CPU 的设计,实验前请注意对流水线技术进行重点掌握,并详细分析 CPU 中可能存在的结构冲突、数据冲突和控制冲突,设计好相关冲突避免机制。

实验步骤

  1. 分析监控程序对于 CPU 功能的要求,划分每条指令的执行步骤,设计指令流程图。如果希望支持中断或者虚拟内存,也需要加入相应的流程处理和模块。
  2. 实现 Wishbone 总线,用于访问 SRAM 和串口。
  3. 根据指令流程图,划分处理器的各功能部件和流水线阶段设计,给出处理器的概要结构图,并标识出各主要信号及数据流向、阶段寄存器需要保存的各类信息。
  4. 细化各功能部件,设计出包含每个部件的外部控制信号以及数据信号的详细结构图,并根据指令流程图在该结构图上执行每条指令,检查指令执行是否正确。尤其要重点检查指令流水执行的过程中存在的 3 类冲突,确认冲突避免机制设计的正确性。
  5. 确认结构图中的每个功能部件的具体功能和外部连接信号,注意时序之间的配合。使用硬件描述语言设计实现每个功能部件并且使用软件进行仿真。仿真过程中尽量将各种情况的输入都加入,保证每个部件能够按照预定功能运行。
  6. 连接各个功能部件组成整体的 CPU,并对其进行软件仿真。
  7. 连接各个外设和 CPU 形成计算机系统,并对其进行软件仿真。
  8. 整体软件仿真通过后,分配对应管脚,将设计好的 CPU 配置到 FPGA 中,进行实际硬件调试。
    1. 先进行单步调试,检查每条指令的运行是否正确。这时需要将时钟源配置成时钟按钮。
    2. 使用实验平台将数据存入内存,让 CPU 读写内存,以此来测试访存指令是否正确。 运行一段简单的串口数据发送代码,检验串口是否工作正常。
  9. 设计一些测试程序,测试 CPU 运行是否正常。
  10. 将监控程序下载到内存中运行(注意三个不同版本的监控程序),调试监控程序在设计的处理器上正确运行。
  11. 执行监控程序中自带的几个测例,验证 CPU 正确性。

思考题

扩展功能思考题

第 4 题及以后的思考题仅在你实现了括号中的相应扩展功能时才需要完成。其中许多题目的答案与你的设计强相关,因此没有标准答案,也不会记入实验成绩中。我们希望这些思考题能够帮助大家在完成实验的同时巩固理论知识。

  1. 流水线 CPU 设计与多周期 CPU 设计的异同?插入等待周期(气泡)和数据旁路在处理数据冲突的性能上有什么差异。
  2. 如何使用 Flash 作为外存,如果要求 CPU 在启动时,能够将存放在 Flash 上固定位置的监控程序读入内存,CPU 应当做什么样的改动?
  3. 如何将 DVI 作为系统的输出设备,从而在屏幕上显示文字?
  4. (分支预测)对于性能测试中的 3CCT 测例,计算一下你设计的分支预测在理论上的准确率和性能提升效果,和实际测试结果对比一下是否相符。
  5. (缓存)对于性能测试中的 4MDCT 测例,计算一下你设计的缓存在理论上的命中率和性能提升效果,和实际测试结果对比一下是否相符。
  6. (虚拟内存)考虑支持虚拟内存的监控程序。如果要初始化完成后用 G 命令运行起始物理地址 0x80100000 处的用户程序,可以输入哪些地址?分别描述一下输入这些地址时的地址翻译流程。
  7. (异常与中断)假设第 a 个周期在 ID 阶段发生了 Illegal Instruction 异常,你的 CPU 会在周期 b 从中断处理函数的入口开始取指令执行,在你的设计中,b - a 的值为?

实验报告要求

  1. 给出 CPU 的结构图。简述每个功能模块的功能。

  2. 简述数据前传部分的实现逻辑。并给出数据冲突的例子(假设 IF 段和 MEM 段功能可以在 1 周期内完成),以及对应关键信号的波形图。

  3. 对于每个实现的扩展功能,简要介绍功能是如何实现的。给出功能实现原理波形图,以及上板实验的截图 / 性能数据对比。

  4. 回答思考题 1-3 小问,选择性回答其他的思考题。

  5. 给出你们小组的分工表,准确描述大实验的分工情况。


最后更新: 2023年11月22日
作者:Jiajie Chen (73.33%), cuibst (17.33%), Shaofeng Ding (9.33%)