跳转至

实验6 大实验-流水线 RISC-V 处理器

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

实验目的

(1)深入理解流水线结构计算机指令的执行方式,掌握流水处理器的基本设计方法。

(2)深入理解计算机的各部件组成及内部工作原理。

(3)加深对于RISCV32I指令集的理解。

(4)掌握计算机外部输入输出的设计。

(3)提高硬件设计和调试的能力。

实验环境

(1)硬件环境:PC计算机,Windows10或Linux操作系统;ThinPAD-Cloud实验平台或者云实验平台。

(2)软件环境:FPGA开发工具软件Vivado;监控程序运行环境。

实验内容

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

(1)能够支持监控程序基本版本用到的RISCV32I指令集。

(2)每一个小组还需要实现指定给本小组的额外三条指令。

(3)具有内存(SRAM)访问功能,能够满足监控程序数据与代码的存储需求。

(4)利用串口(即板上CPLD实现的UART)实现计算机的输入输出模块,能够支持监控程序与PC的相互通信。

(5)作为提高要求,实现中断处理机制,对串口产生的中断信号,运行中断处理程序接收数据。

(6)作为提高要求,支持虚拟内存管理,分离用户程序和监控程序内核的地址空间。

实验原理

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

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

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

主要实验步骤

(1)分析监控程序对于CPU功能的要求,划分每条指令的执行步骤,设计指令流程图。如果希望支持中断或者虚拟内存,也需要加入相应的流程处理和模块。

(2)增加SRAM和串口共享总线机制的处理逻辑。

(3)根据指令流程图,划分处理器的各功能部件和流水线阶段设计,给出处理器的概要结构图,并标识出各主要信号及数据流向、阶段寄存器需要保存的各类信息。

(4)细化各功能部件,设计出包含每个部件的外部控制信号以及数据信号的详细结构图,并根据指令流程图在该结构图上执行每条指令,检查指令执行是否正确。尤其要重点检查指令流水执行的过程中存在的3类冲突,确认冲突避免机制设计的正确性。

(5)确认结构图中的每个功能部件的具体功能和外部连接信号,注意时序之间的配合。使用硬件描述语言设计实现每个功能部件并且使用软件进行仿真。仿真过程中尽量将各种情况的输入都加入,保证每个部件能够按照预定功能运行。

(6)连接各个功能部件组成整体的CPU,并对其进行软件仿真。

(7)连接各个外设和CPU形成计算机系统,并对其进行软件仿真。

(8)整体软件仿真通过后,分配对应管脚,将设计好的CPU配置到FPGA中,进行实际硬件调试。

①先进行单步调试,检查每条指令的运行是否正确。这时需要将时钟源配置成时钟按钮。

②使用实验平台将数据存入内存,让CPU读写内存,以此来测试访存指令是否正确。

运行一段简单的串口数据发送代码,检验串口是否工作正常。

(9)设计一些测试程序,测试CPU运行是否正常。

(10)将监控程序下载到内存中运行(注意三个不同版本的监控程序),调试监控程序在设计的处理器上正确运行。

(11)执行监控程序中自带的几个测例,验证CPU正确性。

思考题

(1)流水线CPU设计与多周期CPU设计的异同?插入等待周期(气泡)和数据旁路在处理数据冲突的性能上有什么差异。

(2)如何使用Flash作为外存,如果要求CPU在启动时,能够将存放在Flash上固定位置的监控程序读入内存,CPU应当做什么样的改动?

(3)如何将DVI作为系统的输出设备,从而在屏幕上显示文字?


最后更新: 2021年10月24日