图书简介:
目 录
第1章 绪论 1
1.1 计算机系统概述 1
1.1.1 计算机系统的层次结构 1
1.1.2 计算机硬件系统的组成 2
1.1.3 计算机软件系统的组成 4
1.2 计算机系统的评价指标 4
1.3 处理器概述 6
1.3.1 指令集体系结构和微体系结构 6
1.3.2 CISC和RISC 6
1.3.3 指令集体系结构中的“五朵
金花” 7
1.3.4 MIPS指令集体系结构的发展 8
1.4 本书的主要内容 10
1.4.1 目标处理器MiniMIPS32 10
1.4.2 原型系统MiniMIPS32_SYS 10
第2章 MiniMIPS32处理器的指令集
体系结构 12
2.1 操作数的数据类型 12
2.2 寄存器概述 12
2.3 MiniMIPS32存储空间的编址方式 15
2.4 指令系统 16
2.4.1 MiniMIPS32的指令格式 16
2.4.2 MiniMIPS32指令集和具体
操作 16
2.5 MiniMIPS32指令的寻址方式 36
2.6 MiniMIPS32的操作模式 38
2.7 协处理器CP0 38
2.8 异常处理 38
第3章 MiniMIPS32程序的机器级表示 40
3.1 从C程序到可执行目标程序 40
3.2 基于MiniMIPS32的汇编程序
设计 42
3.2.1 汇编程序结构 42
3.2.2 汇编程序伪指令 42
3.2.3 汇编程序宏指令 46
3.2.4 MIPS指令集仿真器QtSpim 48
3.3 C语言程序的机器级表示 53
3.3.1 选择结构 53
3.3.2 循环结构 57
3.3.3 函数调用 58
3.3.4 数组 66
第4章 现场可编程逻辑门阵列FPGA
及其设计流程 69
4.1 FPGA概述 69
4.1.1 Xilinx FPGA的基本结构 70
4.1.2 Digilent Nexys4 DDR FPGA
开发平台 73
4.2 FPGA的设计流程 74
4.3 Xilinx Vivado集成设计环境 75
4.3.1 Vivado集成设计环境介绍 75
4.3.2 基于Vivado的FPGA设计
流程 77
第5章 MiniMIPS32处理器的基本流水线
设计与实现 91
5.1 流水线的基本概念 91
5.1.1 什么是流水线 91
5.1.2 指令流水线 91
5.1.3 指令流水线的评价指标 93
5.1.4 指令流水线的特点 94
5.2 MiniMIPS32处理器的整体结构和
设计方法 94
5.2.1 MiniMIPS32处理器的整体
结构 94
5.2.2 MiniMIPS32处理器的设计
方法 96
5.3 MiniMIPS32处理器的基本
流水线设计 97
5.3.1 非转移类R-型指令的流水线
数据通路的设计 97
5.3.2 非转移类I-型指令的流水线
数据通路的设计 120
5.3.3 控制单元的设计 134
5.4 基于Verilog HDL的实现与测试 142
5.4.1 MiniMIPS32处理器的基本
流水线的Verilog实现 142
5.4.2 MiniMIPS32_SYS原型系统的
Verilog实现 169
5.4.3 功能测试 171
第6章 MiniMIPS32处理器的流水线
相关问题和暂停机制 175
6.1 流水线的数据相关和消除方法 175
6.1.1 数据相关的概念 175
6.1.2 数据相关的消除办法 177
6.1.3 支持定向前推的MiniMIPS32
处理器的设计 179
6.1.4 基于Verilog HDL的实现与
测试 181
6.2 流水线的控制相关和消除办法 189
6.2.1 控制相关的概念 189
6.2.2 控制相关的消除办法 189
6.2.3 转移指令流水线数据通路的
设计 191
6.2.4 转移指令流水线控制单元的
设计 193
6.2.5 基于Verilog HDL的实现与
测试 196
6.3 流水线的暂停机制 205
6.3.1 引起流水线暂停的原因 206
6.3.2 多周期除法指令的设计 207
6.3.3 支持暂停机制的流水线的
设计 208
6.3.4 基于Verilog HDL的实现与
测试 211
第7章 MiniMIPS32处理器异常处理的
设计与实现 225
7.1 CP0协处理器 225
7.1.1 概述 225
7.1.2 协处理器CP0中的寄存器 226
7.1.3 协处理器CP0指令及数据
相关 229
7.2 异常的基本概念 230
7.2.1 异常和中断 230
7.2.2 异常处理的流程 231
7.3 MiniMIPS32处理器的异常处理 232
7.3.1 精确异常 232
7.3.2 支持的异常类型 233
7.3.3 MiniMIPS32处理器的异常
处理流程 234
7.3.4 支持异常处理的MiniMIPS32
处理器流水线的设计 236
7.4 基于Verilog HDL的实现与测试 240
7.4.1 支持异常处理的MiniMIPS32
处理器流水线的Verilog HDL
实现 240
7.4.2 功能测试 260
第8章 综合测试 264
8.1 改进的MiniMIPS32_SYS原型
系统 264
8.1.1 原型系统的架构 264
8.1.2 原型系统的实现 265
8.2 测试方法概述 272
8.3 功能点测试 273
8.4 C程测试 279
附录A MiniMIPS32处理器交叉编译
环境的搭建 281
A.1 虚拟机Virtual Box的安装 281
A.2 Ubuntu Linux操作系统的安装 284
A.3 MiniMIPS32交叉编译环境的安装
与配置 290
附录B 指令存储器和数据存储器的设计 293
B.1 指令存储器的设计 293
B.2 数据存储器的设计 299
参考文献 304
展开
序 言
计算机类专业学生的能力的重要特征之一就是系统能力。系统能力的核心是在掌握计算系统基本原理的基础上,深入掌握计算系统内部各软/硬件部分的协同,以及计算系统各层次的逻辑关联,了解计算系统呈现的外部特性与人机交互模式,开发、构建以计算技术为核心的高效应用系统。系统能力包括系统知识和工程实践。系统能力的培养具有突出的工程教育特征,是解决复杂工程问题的直接体现,应用和创新能力也会由此而得到强化与提升。
系统能力的培养和系统观教育对计算机类所有专业及培养方向均适用。只有具备了系统能力,计算机类专业的学生才能站在系统的高度解决应用问题,才能成为我国急需的计算机领域创新型核心人才。
目前,国内高校计算机类专业对系统能力培养的研究改革和重视程度不够,因而培养的学生在系统能力方面存在不少问题,不能满足社会、学科技术的发展和要求,特别是在通过实践教学提升计算机类专业学生系统能力方面存在很大不足。我们需要构造“一个体系、一个平台、系列化实验”的贯穿式实践教学体系,达成对多门计算机类专业核心基础课程的贯穿。那么,让学生自己动手“设计一台功能完备,可支持简单操作系统微内核和常见应用运行的计算机系统”正是一个很好的复杂性工程问题,计算机类专业学生在这一过程中将完整地体验计算机系统设计的全过程,实现从软件的角度理解硬件,从硬件的角度理解软件,最终达成对系统能力的训练。
这本由天津大学计算机学院教师魏继增、郭炜撰写的《计算机系统设计(上册)——基于FPGA的RISC处理器设计与实现》正是面向系统能力培养进行的一次有益尝试。本书强调实践性,以MIPS32指令集架构为切入点,基于主流FPGA开发平台及EDA工具,详细讲解了一个具有标准5级流水线且功能完备的处理器的设计与实现过程。基于本书,学生可实现对程序设计、数字逻辑、计算机组成原理、计算机系统结构等多门课程知识点的融会贯通,并通过亲自动手实践,以更加直观、形象的方式深刻领会诸如流水线、数据相关、控制相关、前推转发、中断异常等处理器设计过程中的重要概念。该教材在组织上采用循序渐进、启发式方法,分阶段完善处理器的功能,大大降低了设计难度,不但可以激发学生从事计算机系统设计工作的兴趣,而且有助于帮助他们建立信心。本书除了关注处理器本身的设计之外,还讲解了高级语言中常见的语法结构在计算机系统中的实现细节,有助于学生站在系统层面理解软/硬件,真正明白计算机系统是如何运转的。此外,本书还给出了单独的章节来讲解测试流程和方法。
在新工科建设的历史机遇下,计算机类专业的教学改革,特别是系统能力的培养将关乎我国整个信息产业的人才培养质量、自主创新能力、核心竞争力。希望更多的学校、教师参与到系统能力培养的改革中来,也愿本书在教学实践中不断完善,为培养具备系统能力的计算机创新人才做出较大贡献。
前 言
本教材的写作背景和意义
经过“复旦共识、天大行动、北京指南”,具有中国特色工程教育的新工科(Emerging Engineering Education)建设全面启动。面向新工科,计算机类专业的教学改革也势在必行。在过去的20年间,计算机类专业在移动互联网、云计算、人工智能等领域已为我国培养了大量人才。但这些人才主要集中在计算机应用领域,而在计算机系统设计方面,包括处理器、操作系统和编译系统等,却是人才紧缺,导致我国在各类型计算机设计中所使用的核心器件、高端芯片、基础软件长期依赖进口,受制于人,严重影响了“自主可控”国家信息产业战略的实施,严重危害国家安全,也是我国计算机领域自主创新不足的重要原因。国外先进的处理器、平台和操作系统就好比武器,而我们的学生喜欢拿别人给的先进武器去“打仗”(做应用层开发),一旦有一天我们和外国人“打”起来,人家拿走了我们的武器,我们就真的一筹莫展了。造成这一问题的根本原因是,目前的计算机教育缺乏对学生进行“系统能力”的培养。所谓“系统能力”,是指能够理解计算机系统的整体性、关联性、层次性、动态性和开放性,掌握计算机软/硬件协同工作及相互作用机制,并综合运用多种知识与技术完成全系统开发的能力。只有具备了“系统能力”,计算机类专业的学生才能站在系统高度解决应用问题,才能成为我国急需的创新型核心人才。
让学生自己动手“设计一台功能完备,可支持简单操作系统和常见应用运行的计算机系统”将十分有助于“系统能力”的培养,同时还可激发学生从事计算机系统开发的兴趣和激情。但目前,我国计算机教学中存在知识衔接脱节、缺乏工程性和综合性教学方法、缺乏具有工程规模的系统性实验等问题,无法保证学生解决这样一个极具难度和挑战性的工程问题,自然也就谈不上“系统能力”的培养。因此,我们需要建设一系列全新的课程、教材对其进行尝试和探索。
作者以践行“系统能力”培养为目标,基于Digilent公司的FPGA开发平台,利用软/硬件协同设计与验证方法学,围绕“设计一台功能完备,可支持操作系统微内核和常见应用运行的计算机系统”这个复杂工程问题,编写了这套计算机系统设计系列教材。这套教材由上、下两册组成,上册专注于主流RISC处理器的设计与实现,下册使用所设计的处理器结合总线和常见外设构建一个完整的计算机系统,并完成开源操作系统的移植和常见应用的开发。
本教材的适用范围和课程
不同于国内很多高校已开设的“计算机系统基础”或“计算机系统导论”等课程,这些课程一般开设在本科低年级,旨在开始计算机各专业课学习之前对计算机系统形成初步认识。而本系列教材更加专注于计算机系统的设计过程,通过真正的动手实践使学生做到对数字逻辑、计算机组成原理、汇编程序设计、操作系统、计算机系统结构等课程所学知识的有序衔接和综合运用,形成对计算机系统更直观、更形象、更全面的认识。因此本教材适用于计算机类专业(也包括微电子、集成电路与集成系统专业)本科高年级(大三、大四)或研究生阶段。在使用本教材之前,学生应至少修完数字逻辑、计算机组成原理、计算机系统结构、操作系统等基础课程,此外,如果具备硬件描述语言和FPGA开发知识,则将更加事半功倍。
使用本教材开设的课程名称可以是“计算机系统设计”、“计算机系统综合实验”或类似名称;也可将本教材选为“计算机组成原理”、“计算机系统结构”等课程的实验教材,或短学期综合实践类教材。
此外,书中并非所有章节都是必需的,在教学过程中,可根据学生的实际情况有所取舍。例如,如果学生在之前的计算机组成原理或相关课程中已经学习了MIPS汇编语言、高级语言的机器级表示等内容,则可以跳过第2、3章,只关注处理器的硬件设计与实现;如果学生之前已经使用过Xilinx FPGA和Vivado进行过开发,则可以跳过第4章;如果只需要了解基本流水线的设计细节,则可以跳过第5、6章。
本书的写作思路和特色
本书为《计算机系统设计》系列教材的上册。虽然处理器及指令集体系结构的种类繁多、千差万别,但其设计原理和实现方法是相同的。因此,本书以设计基于MIPS 32位指令集的处理器MiniMIPS32为主线,讲授主流RISC流水线处理器的设计与实现的方法、步骤与技巧。本书将讲解处理器微架构设计、数据通路的设计与实现、流水线设计与优化、软件环境与测试环境的搭建及基于Digilent FPGA开发板的板级设计等内容。书中将处理器及原型系统设计过程中每个环节所涉及的硬件和软件的基本概念关联起来,力争给读者建立一个功能完备、层次分明的处理器架构,也为下册教材开展SoC的软/硬件设计奠定重要基础。本书的特色表现在以下几个方面:
? 更精简的处理器结构:虽然有很多开源项目也提供基于MIPS指令集的处理器,但毕竟是商业级代码,对大多数无处理器设计经验的老师和刚接触处理器结构的学生而言,实践难度较大。本书所设计的MiniMIPS32处理器采用更精简的指令集(共56条指令),但功能完备,可支持操作系统内核等中、大规模程序的运行。
? 与前序课程的教学内容结合紧密:本书构建的MiniMIPS32处理器采用经典5级流水线,支持定向前推、相关性处理、延迟转移、暂停等常见流水线技术及异常处理机制,与多数主流的计算机组成原理、计算机系统结构教材书中的理论内容保持一致。
? “增量式”教学:本书借鉴软件工程中的“增量模型”开发方法,学生无须全部从零开始,选取MiniMIPS32处理器中的26条指令为例,采用循序渐进的方式,逐步添加处理器的功能,并为学生提供了详尽的软/硬件源码。学生通过参考已有代码,根据具体设计需求和目标即可完成剩余指令的设计,在降低设计难度的同时,可激发学生从事计算机系统设计的兴趣,帮助他们建立信心,也使学生更关注系统设计过程中的关键环节。
本书的内容安排
本书共由8章组成,分为3个部分:
(1)基础理论部分
第1章:绪论,重点介绍计算机系统的基本概念,涉及计算机系统的层次结构、计算机系统的组成、评价方法及指令集体系结构。
第3章:MiniMIPS32处理器的指令集体系结构,着重介绍MiniMIPS32指令集体系结构的构成要素。
第3章:MiniMIPS32程序的机器级表示,讲解基于MiniMIPS32的汇编程序设计和常见的C语言语法结构在机器级的表示,做到从软件的层面了解MiniMIPS32处理器的硬件结构。
第4章:现场可编程逻辑门阵列FPGA及其设计流程,重点介绍基于Xilinx Vivado的FPGA设计流程,为后续处理器及系统设计奠定工具使用的基础。
(2)处理器设计部分
第5章:MiniMIPS32处理器的基本流水线设计与实现,重点讲述基于5级理想流水线的处理器设计方案,并给出基于Verilog HDL的实现。
第6章:MiniMIPS32处理器的流水线相关问题和暂停机制,针对流水线中常见的相关性问题,给出MiniMIPS32处理器的解决方案,在无法消除相关时,则设计暂停机制,并给出基于Verilog HDL的实现。
第7章:MiniMIPS32处理器异常处理的设计与实现,重点讲解支持MiniMIPS32处理器精确异常处理的设计方案,并给出基于Verilog HDL的实现。
(3)测试部分
第8章:综合测试,基于Digilent Nexys4 DDR FPGA开发平台搭建基于MiniMIPS32处理器的原型系统MiniMIPS32_SYS,并完成功能点测试和C程序测试。
致谢
本书由天津大学计算机学院魏继增和郭炜执笔完成。在此衷心感谢在本书编写过程给予我大力支持和中肯建议的各位专家、同事和学生,正是他们的鼓励和帮助才能使我顺利完成本书的编写。在编写过程中,来自清华大学的刘卫东教授、南京大学的袁春风教授、美国北卡来罗纳州立大学的周辉阳教授等各位专家都花费了大量时间和精力对本书进行了审阅,并从章节结构、内容及实践细节等方面提出了许多宝贵的修改意见。国防科技大学的王志英教授对本书的撰写做了前瞻性的指导。天津大学2017级硕士研究生肖健、徐文富完成了书中MiniMIPS32处理器代码的编写、仿真及FPGA硬件的开发,并进行了大量的功能测试。2018级硕士研究生薛臻对全书文字进行了校对,修订了书中许多文字错误和纰漏。还要特别感谢电子工业出版社王羽佳编辑、华信教育研究所的肖博爱副所长、杨文慧编辑对本书的出版给予的热情帮助。此外,在编写过程中,作者还参阅了很多国内外作者的相关著作,特别是本书参考目录中列出的著作,在此一并表示感谢。
本书是作者以计算机教指委“系统能力”培养试点校项目、Digilent-教育部产学合作协同育人项目和第一届“龙芯杯”全国大学生计算机系统能力培养大赛为依托编写完成的,在此感谢计算机教指委、Digilent公司及龙芯中科公司对本书作者的信任和支持。
结束语
新工科的启动呼唤适应产业需求、满足国家重大需求的全新的课程和教材。在新工科的历史机遇下,本书旨在培养计算机类专业及相关专业学生的“系统能力”,为国家培养未来可适应“自主可控”信息化发展战略的创新型计算机核心人才。本书广泛参考了国内相关的经典教材和著作,在内容的组织和描述上力争做到概念准确、语言通俗易懂、实践过程循序渐进,并尽量详尽地描述处理器的设计过程和注意事项。虽然作者已经尽力,但由于计算系统设计过程十分复杂,存在很多琐碎的工程细节,加之作者水平有限,书中难免存在遗漏和不足之处,敬请广大读者给予批评指正,以便在后续版本中予以改进。
清华大学 刘卫东教授:
在新工科建设大背景下,对计算机类专业的学生进行系统能力培养,是当前计算机专业教育改革的重点,也是国内计算机产业的迫切需求,更是国家自主可控信息化战略实施的重要举措,难度大,挑战性强。系统能力培养的一个重要环节是实践,通过让学生自行设计一个具备一定功能的CPU系统是培养系统能力的一条有效途径。本书以MIPS32指令集结构为切入点,从最简单的流水线结构开始,由易向难、循序渐进地构建一个具备较完备功能和较高复杂性的CPU系统,使学生在计算机系统相关教学中学习到的理论知识得以充分实践,不但可以引发学生设计复杂计算机系统的兴趣,而且可帮助学生建立充分的自信。本书最大的特点是具有很强的实操性,将有助于推进计算机系统能力教育改革,符合新工科类教材建设的特点,十分值得推荐。
南京大学 袁春风教授:
本书以MIPS32架构的整数指令流水线实现为目标,很好地将“计算机组成与系统结构”理论知识与EDA设计、交叉编译和指令集仿真器等结合,详细介绍了如何基于Verilog 硬件描述语言,在Xilinx Vivado集成开发环境中,对实现目标进行描述、仿真和功能验证,并最终部署到Digilent公司的Nexys4 DDR FPGA开发板上进行实现和验证的整个过程。除了MIPS32架构整数指令的基本5级流水线外,本书还给出了数据相关检测和转发、控制冒险检测和延迟转移、load-use冒险和除法指令等引起的暂停、CP0及异常/中断、基本I/O模块等部分功能的实现细节。本书最大的特点是内容具体、可操作性强。如果想让学生动手设计实现一台MIPS架构计算机,本书是很好的选择。
美国北卡来罗纳州立大学 周辉阳教授:
《计算机系统设计(上册)——基于FPGA的RISC微处理器设计与实现》一书详尽地描述了MiniMIPS32处理器的设计和在FPGA上的实现。本书最突出的特点是内容翔实、举例丰富。它包含了从软件程序到汇编指令再到硬件实现的每一个步骤。在硬件设计方面,除了流水线处理器的设计,本书也包括一般教材中没有涉及的协处理器设计和整体处理器的板级综合测试验证。书中的基于FPGA的Verilog设计实验有效地指导学生一步步动手实现自己的处理器,从而有助于实现对计算机软件和硬件知识的融会贯通。
展开