摘 要: 三级存储体系设计与实现实验是计算机系统结构存储体系理论课程的同步配套实验。通过该实验增强学生对理论知识的理解,提升学生的实践开发能力。该实验以学生前期实验完成的基于 MIPS 指令集的静态和动态流水线 CPU 成果为基础,在 FPGA NEXYS 4 开发板上使用 SD 卡、DDR 模块以及片内内存模块构造主存、缓存和辅存的三级存储体系,形成一个可以自启动、自运行的简易计算机系统,为后续其他课程实验贯通,实现完整的计算机系统奠定了基础。
关键词: 三级存储; 计算机系统结构; MIPS 指令集
0 引 言
计算机系统实验课程是计算机类专业课程的配套动手实践实验课程,它通过设置与计算机重点专业知识相适配的实验,达到帮助学生们更全面、更深入地理解计算机系统的基本组成和运作原理,培养学生们设计与开发个人计算机系统的能力。在之前“计算机系统结构”理论课程设置的基于 MIPS 指令集的静态和动态流水线 CPU 设计与实现的同步实验中,学生们很好地完成了流水线 CPU 的设计与实现[1]。然而,在实际的计算机系统中不仅是 CPU 和内存模块的交互,需要主存、缓存和辅存形成的三级存储系统来与 CPU 进行数据交互,以此达到计算机的高效运行。因此,本文在实验课程中提出了一种基于 Artix-7 FPGA 系统的三级存储体系的设计与实现方案,该方案采用自顶向下的层次模块化设计方法,使用 verilog 硬件逻辑语言进行描述。
计算机存储体系中,“三级存储”指的是高速缓冲存储器、主存储器、辅助存储器。高速缓冲存储器用来改善主存储器与中央处理器的速度匹配问题; 辅助存储器用于扩大存储空间。三级存储系统解决存储器速度、容量和价格三者的矛盾,并且提升了 CPU 访存速度,改善了系统的总体性能。在 FPGA 系统中,共有位于 FPGA 系统的片内内存,位于片外的 DDR 存储,以及属于外设的 SD 卡 3 种存储模块,分别在三级存储实验中可以模拟对应主存储器、高速缓冲存储器和辅助存储器[2]。 1 三级存储体系设计基于 FPGA 系统的三级存储体系实验的总体框架分为 SD 卡、DDR 和 FPGA 片内内存三级,如图 1 所示。系统一通电,会先执行 SD 中初始部分的引导代码,从而将存储在 SD 中的 CPU 二进制流迁移到 DDR 缓存中,在以此调入主存供 CPU 执行,同时会将位于 SD 中的系统或用户程序目标代码迁移到 DDR 中等待 CPU 调用执行。
一台市场上商业发售的计算机都在它的核心硬盘 ( 基本上都命名为 C 盘) 的初始地址空间固化有一段用于加载和迁移存储,在核心硬盘上的用于维护系统启动和运行的系统程序和用户程序的固定程序,常被称为 BootLoader 程序[3],这一加载的启动机制借助三级存储体系保证了计算机系统启动的快速和准确。
实验设计的基于 Artix-7 FPGA 的三级存储体系中也设计有适用于自主启动运行系统的 BootLoader 程序。其实现方法是将 BootLoader 程序用汇编语言和 C 语言联合开发,通过 gcc 交叉编译后将其加载到 irom 里,类比于一般计算机的核心硬盘。当 FPGA 板通上电后,会加载. bit 文件,然后执行 irom 里的 BootLoader 程序[4-10]。
1. 1 BootLoader 启动
如图 2 所示,被执行的 BootLoader 程序首先会将存储于 SD 卡中的用户程序指令加载到 iram 中( 即图1 中的 DDR 缓存组件中) ,然后搬迁进板内等待被执行; 在完成加载任务后修改 PC 寄存器中的指令地址信息,让其指向刚被加载到板内的用户程序所在的地址空间,然后 CPU 按照 PC 寄存器所指的指令地址空间执行该用户程序,完成一个简易计算机的启动和运行。
1. 2 程序执行的指令流和数据流
CPU 在执行用户程序时指令和数据的流向如图 3 所示。首先 CPU 通过读取 PC 寄存器中的待执行指令地址信息,然后结合指令地址映射模块,找到存在于 irom 或 iram 地址空间的指令内容,将其加载到板内,供 CPU 执行。同理,在 CPU 执行指令时会发生对于内存的读写需求,结合数据地址映射模块,找到存在于 dram 和 SD 卡地址空间的数据内容,将其读取到板内或者写入到这些地址空间。通过多级储存器之间相互协作,实现和保证了一台简易计算机处理效率和性能。
1. 3 统一编址
在整个执行过程中,代码段地址和存储器地址进行统一编址,所有的代码、数据和存储器都在逻辑地址空间中有一个 32 位的地址,C 语言编写的就是对这些地址的操作。
BootLoader 存储于 irom 地址空间,地址为 0x0000 0000,如图 4 所示。在执行完 BootLoader 程序后,需要将 PC 寄存器内容改为 0x00400000,指向存储加载而来的用户程序的 iram 地址空间中,于是在编译时需要在 0x00000000 附近加上一段跳转指令到 BootLoader 的 main 函数,以及返回时跳转回 0x00400000,具体代码实现如下:
2 实验验证
本次三级存储体系的设计与实现采用的 CPU 是 “计算机系统结构”课程中自主设计与实现的静态和动态流水线 CPU[12-13]。整个三级存储体系的设计和实现采用 Xilinx 公司提供的 vivado [14]集成开发工具和 verilog [15]开发语言完成,并在 Xilinx Nexys 4 Artix-7 [16]开发板上进行了下板测试。
首先将整个三级存储体系实现代码生成的. bit 文件写入到被格式化后的 SD 卡中,然后用 WinHex 在逻辑 80 扇区( 本次实验采用的 SD 卡对应的物理扇区是 8272) 写入用户指令( 右键,从剪贴板写入,写入方式为 16 进制) 。然后放置好 FPGA 板上的跳线。之后UART 口连接上电源,开始启动,实现三级存储体系成功运行。
3 结 语
本文提出了一种基于 Artix-7 FPGA 的三级存储体系设计与实现方法,该方法指导学生们完成三级存储体系的设计与实现实验。此外,通过该实验,增强了学生们对于计算机的三级存储体系的结构与工作机制的深入理解和认知,是贯通后续课程实验的关键环节,为学生自主设计、实现更加完善的个人计算机系统奠定了坚实的基础[17]。——论文作者:秦国锋, 秦家豪, 邹剑煌, 刘 鲲, 胡 岳
相关期刊推荐:《实验室研究与探索》(月刊)创刊于1982年,是教育部主管、上海交通大学主办的国内外公开发行的综合性技术刊物,全国高校实验室工作研究会会刊之一。本刊始终追踪实验室工作中的新技术、新经验、新理论,进行研究与探索,在推动高校的素质教育和创新工程、实验室建设与管理、实验教学改革、实验水平提高等方面发挥了积极作用。
转载请注明来自:http://www.lunwencheng.com/lunwen/dzi/19356.html