前言
本书是计算机系统类相关课程的实验指导用书。计算机系统类课程涉及多门计 算机软硬件专业课程,而计算机系统作为一个整体,其软硬件贯通的重点在于实验 设计。本书以构建一套完整的实验体系来代替“数字逻辑”“计算机组成”“汇编语 言””操作系统”“计算机体系结构”等相关课程中抽象的知识点,从系统认知、设计、优化的角度层层深入,帮助读者由浅入深地认识计算机系统的全貌。本书的内容打破传统计算机系统类课程间的壁垒,弥补了计算机系统课程理论学习和真实系统之间的鸿沟,手把手引导读者从零开始设计 64位 RISC-V架构 CPU和 RV64操作系统内核,通过亲自动手实验,理解和掌握计算机系统的工作原理。
编写初衷
本书编写的初衷是面向计算机系统类相关课程的学习者,为解决计算机系统课程理论体系庞杂、基础概念抽象、课程交叉多、实验与理论脱节等教学中遇到的问题,给出一套完整的基于统一实验平台的计算机系统贯通实验体系指导。本书也是国家级一流本科专业——浙江大学信息安全专业和浙江大学图灵班(计算机科学与技术专业、人工智能专业)的核心主干课程“计算机系统 I、II、III”的实验配套教材。
所有实验均基于开源的 64位 RISC-V架构,为培养处理器设计和操作系统设计专业人才、解决网络基础设施建设“卡脖子”技术奠定坚实基础。同时,本书旨在探索学科研究和课程教学新范式,推动信息学科发展,坚实系统基础,致力于为国产系统的设计贡献力量。本书适用于想了解和探究真实计算机系统运行基本原理和本质规律的读者,可作为高等院校计算机大类相关专业,以及信息安全、网络空间安全、人工智能、芯片设计等相关交叉专业的教学实验指导书,也可以作为计算机系统相关方向工程技术人员的岗前培训实验指导书。
内容安排
本书使用统一的软硬件平台开展实验,包含三部分,分别对应于浙江大学“计算机系统 I、II、III”系列课程,每部分都有一个主题,逐步递进,逐渐为读者呈现计算机系统的细节,每部分完成都有一个最小系统的输出,最终能够搭建一个自主设计的处理器并在其上运行操作系统。三部分也可单独使用,适用于不同的使用群体,读者可以根据需要选择其中独立的实验内容。全书精心设计了 24个软硬件设
计算机系统贯通课程实践教材(RISC-V架构)
计实验,正文共 24章,内容由浅入深,讲解细致,手把手引导读者从零开始设计 CPU和操作系统,每章的结尾附有相应的思考题,以供延伸学习。
第 1部分:计算机系统 I——单周期 CPU设计,包括“计算机系统 I”课程配
套的 8个实验( SysI-Lab1~SysI-Lab8),分别是实验准备、多路选择器、七段数码
管、全加减法器、时序电路设计、卷积核实现、 RISC-V汇编和单周期 CPU设计。
本部分包含数字逻辑设计实验、汇编语言及单周期指令的设计。通过指令扩展,可
以实现一个简单的单周期 CPU设计。
第 2部分:计算机系统 II——简易内核 +流水线 CPU设计,包括“计算机系
统 II”课程配套的 8个实验( SysII-Lab1~SysII-Lab8),分别是流水线 CPU设计、
流水线冒险的解决、卷积加速器、 RV64内核引导、 RV64时钟中断处理、异常流
水线、 RV64内核线程调度和软硬件协同的尝试。通过完成本部分的实验,读者可
以初步设计一个小型系统,在自己设计的流水线处理器上加载简易系统。
第 3部分:计算机系统 III——定制化内核 + CPU综合设计,包括“计算机系
统 III”课程配套的 8个实验( SysIII-Lab1~SysIII-Lab8),分别是动态分支预测、设
计高速缓存 Cache、RV64虚拟内存管理、 RV64用户模式、 RV64缺页异常处理、
fork机制、内存管理单元,以及完成自己的计算机系统。通过本部分的实验,读者
可以在自己设计的带 Cache的处理器上加载自己编写的更为复杂的操作系统或真
实操作系统,还可以通过拓展实验部分,对自己设计的系统进行功能拓展与性能
优化。
教材特色
(1)全国首例。本书是“新工科”建设背景下国内第一本原创的基于 64位 RISC-V处理器架构的计算机系统软硬件贯通设计实验指导书,首次基于开源的 RISC-V架构贯通了计算机系统类的多门软硬件课程,包括数字逻辑、计算机组成原理、操作系统、汇编语言和计算机体系结构,从系统认知、设计、优化的角度层层深入,帮助读者由浅入深地认识计算机系统的全貌。
(2)信息安全 /人工智能专业的首次尝试。本书设计的实验内容是全国首个针对信息安全 /人工智能专业进行贯通教学改革的尝试。计算机系统安全及人工智能的未来发展是国家的战略需求,深入理解计算机系统及设计原理,才能更全面分析系统是否安全,也能更好地理解上层软件、大语言模型等的运行机理,因此计算机系统的软硬件设计能力是信息安全专业的核心能力之一,也是智能系统 /芯片设计的重要基础。
(3)统一的实验平台。本书中的所有软硬件实验均基于开源的 RISC-V架构,使用统一的软件和硬件平台,不需要多次切换实验环境就可以完成全书的 24个实验,避免了读者在学习过程中需要使用不同的实验环境带来的困扰。同时,本书在附录中给出了学习者在实验中可能会遇到的问题及解答,方便读者进行查阅。
前言19
(4)科教融合的工具链。本书配套的实验提供了 Verilator、Spike、riscv-pk、 QEMU、riscv-toolchain等广泛应用于科研工作中的软硬件工具链,缩短了本科教学与一线科研实践之间的距离,同时将科研成果反哺于教学,如科研工作中的 co-simulation差分测试工具可应用于课程实验中的处理器正确性验证,大大提高了处理器验证、调试的效率。
(5)灵活多样的学习路径。本书共分为三部分,共 24个实验。读者既可以按照章节顺序完整完成一整套软硬件贯通实验,也可以根据需要选择不同的部分进行学习,每部分的内容都是相对独立的,且有对应的输出,可以实现不同的最小系统。更加灵活的是,每部分中的实验也是相对独立的,不同实验模块的组合可以实现不同的设计。更多的学习路径详见图 8。
特别感谢
本书的撰写伴随着教学过程的开展不断补充、完善和迭代更新,历经三年编写至目前的版本。在本书的编写过程中,感谢浙江大学计算机学院对该系列课程教学改革的大力支持,感谢校内外前辈及同行们的鼓励,以及所提出的宝贵建议。尤其要感谢中国科学院计算技术研究所包云岗老师、南京大学袁春风老师、浙江大学陈文智老师为本书作序。特别感谢北京大学陈向群老师、清华大学陈渝老师、国防科技大学沈立老师、上海交通大学夏虞斌老师、清华大学向勇老师、上海交通大学李卷儒老师、武汉大学龚奕利老师、南京大学蒋炎岩老师、中国科学院计算技术研究所余子濠工程师为本书倾情推荐。感谢清华大学出版社对本书进行审阅。感谢参与本系列课程的助教对教材中实验环境的搭建、文字排版、图表美化等做出的贡献,他们是李鸿屹、陈卓、张行健、苑子琦、潘子曰、孙志博、洪斯谕、徐金焱、周杨叶、王晶晶、叶泽凯、汤尧、陈佳彤、林浩然、陈杰伟、赵小迪、王鹤翔、耿华、杨儒宁、秦嘉俊、赵恒、李英琦、张幸智等。其中,本书的公开实验仓库由周杨叶、王鹤翔、张幸智、李英琦进行创建、校对及验证,对他们的辛勤付出表示感谢。感谢浙江大学 2021—2024年修读该系列课程并使用该实验指导的同学们对本书提出的宝贵建议,他们也贡献了附录 C中的常见问题。
作者
2025年 6月于杭州
理”课程介绍计算机的硬件组成,是第一门从 CPU角度来了解计算机系统的课程。在指令集层面,“计算机体系结构”课程是以指令集为核心,更加深入理解 CPU的工作原理,以及软硬件的交互界面。以系统软件的视角,“计算机操作系统”课程则建立在硬件之上,介绍如何通过操作系统这个复杂的系统软件来管理计算机的软硬件资源,在这个层次上,指令集是透明的。因此,从不同的角度出发,上述计算机系统的相关课程都是从某一个抽象的层次上来认识计算机系统。
如果读者已经学习过上述系统课程,是否能够回答以下问题?
.计算机系统是什么样的?
.系统软硬件是如何配合协同工作的?
.不同的层次之间是如何互相影响的?
.运行一个程序,需要什么硬件设备和哪些系统软件的支持?
.从计算机系统设计的角度出发,怎样的系统设计是简洁的、高效的、安全的?
为解答这些问题,助力读者更加深入地理解计算机系统软硬件的设计细节,本书的编写初衷是将真实系统的全貌呈现给对计算机系统感兴趣的读者。希望读者通过动手完成本书的实验,亲手找到上述问题的答案,而不只是理论上了解这些抽象的原理。
于是,本书的作者设计了计算机系统贯通的课程以及配套的实验。从系统认知的层面上,通过设计自己的最小系统来理解计算机系统真实的样子,而这个读者自己设计的系统会随着一个个实验的开展,呈现动态变化的样子。读者将亲身经历系统从简单到复杂的过程,亲自在系统里添加细节以完善系统的功能,或者优化系统的性能,进一步切实体验软硬件协同工作的精妙之处。
在这个过程中,也许一个很小的错误会让读者发现,原来软件运行时呈现出问题的背后可能是由一条指令或者硬件环境引发的,也会明白原来操作系统的启动和运行需要那么多的特权指令来支持。在真实系统的设计中,读者会感受到精简指令集的魅力,会领悟到为什么 RISC-V指令集架构适合做流水,以及流水线什么时候速度会变慢,这些理论不再是课本上生硬的结论,而是读者在设计自己的系统时得到的真实体会。
图 1 SysI整体架构图
在 SysI的基础上,添加了流水线所需的部件、简易 OS启动需要的支持、进程管理等,如图 2所示,为 SysII整体架构图和涉及的知识模块。这时的指令集可以支持流水线,有了软硬件的中断处理,也可以与软件有简易的交互,但是还不能支持复杂操作系统的运行。
计算机系统贯通课程实验总述23
图 2 SysII整体架构图
在 SysI、SysII的基础上,添加了 TLB、MMU、BPU等,以及 Cache、内存管理、文件管理等存储层次,如图 3所示,为 SysIII整体架构图和涉及的知识模块。至此,较为完整的计算机系统已初具雏形,基本的软件、硬件都具备了,在自己设计的处理器上可以运行自己编写的系统软件、操作系统内核等。
图 3 SysIII整体架构图
图 4 SysI实验设计整体架构图
如图 5所示,为 SysII实验设计整体架构图及主要模块,SysII开始在硬件之上涉及系统软件部分。因此, CPU设计在单周期的基础上加上了流水线及冒险的处理、总线、中断与异常处理等,系统软件主要包括内核启动和进程管理等。
图 5 SysII实验设计整体架构图
计算机系统贯通课程实验总述25
如图 6所示,为 SysIII实验设计整体架构图及主要模块。在 SysII的基础上,软硬件部分都更加接近真实的系统,加上了整个存储层次,主要包括 Cache设计、内存管理、虚拟内存管理、MMU等,体现了更完整的软硬件综合设计。
图 6 SysIII实验设计整体架构图
4. 使用的实验工具链
本书使用的主要实验工具如图 7所示,包括软件层面编译内核和硬件层面仿真验证以及上板执行的若干工具,在后续实验中会详细介绍各个工具的使用。其中,使用到的开源工具如下。
. Verilator:Verilog/SystemVerilog模拟执行、验证开源软件。
. Spike:针对 RISC-V设计的指令集模拟器,用于 RISC-V指令集的完整性测试和 RISC-V规范一致性检查。
. riscv-toolchain:RISC-V工具链,包括编译器、汇编器等。
. gtkwave:仿真波形查看软件。
. mobaxterm(可选):终端工具。
为了更加方便地在实验过程中对处理器设计进行自动化测试及安全性验证,本书也采用了如下自主研发的系列工具。
. co-simulation(riscv-isa-cosim):基于 Spike设计实现的处理器差分测试和正确性验证工具。
. starship(可选):可用于处理器核 RTL仿真、 FPGA生成、处理器前端设计的工具。
. riscv-spike-sdk(可选):配合 starship工具,可用于生成 starship硬件可执行的 RV64操作系统和文件系统。
图 7 SysIII实验设计整体架构图
5.实验安排
按照上述分层次和模块化设计,本书的组织将 SysI、SysII、SysIII作为三部分,每部分都有独立的输出,全书设计了 24个独立实验,共 24章。同时,教材的附录部分提供了可方便读者查询的一些信息,包括硬件描述语言常见语句及电路图、配置 IP核以及实验中可能会遇到的常见问题。
如图 8所示,每部分包括 8个实验,其中有 7个基础实验和 1个综合性实验,同时也提供了多条可灵活使用的学习路径。例如,通过第 1~5章、第 8章和第 9章就可以完成不带 Cache的基础流水线 CPU设计;通过第 12、13、15章和第 19~22章可以完成小型操作系统设计;对于有数字逻辑设计和计算机组成原理基础的读者,可以通过其中一些章节的学习掌握高阶 CPU设计技术,如第 10章增加了流水线冒险的解决方法,第 17章增加了动态分支预测的实现,第 18章可以增加带 Cache的流水线 CPU设计等。除此之外,软硬件协同的设计实验贯穿了三个不同的部分,每部分的最后一个实验均为软硬件综合实验,另有一些实验的设计也增加了本书的挑战性与趣味性,如第 6章的卷积核实现和第 11章的卷积加速器,第 23章要实现处理器上支持 RISC-V的分页模式和虚拟地址转换等。当然,本书使用的方式不限于图中给出的几种,读者既可以按照本书的章节安排,也可以使用
计算机系统贯通课程实验总述27
其中的部分内容进行灵活组合,更多的可组合配置方式期待读者打开下面的篇章自己探索。
图 8本书的实验内容概览
6.实验仓库
本书提供的开源仓库地址可扫描二维码查看。
开源仓库地址
1.2背景知识
......................................................................................... 4
1.2.1
FPGA的发展历程................................................................. 4
1.2.2
Verilog基础知识 ................................................................... 6
1.3实验环境配置
.................................................................................12
1.3.1
Linux环境配置 ....................................................................12
1.3.2
SPICE仿真反相器 ...............................................................13
1.3.3
Logisim电路仿真 .................................................................15
1.4
Verilator仿真测试 ..........................................................................16
1.5
Vivado操作流程.............................................................................18
1.5.1 FPGA上的 Verilog实践.......................................................28
1.
5.2以二选一多路选择器为例 ......................................................35 思考及练习 ............................................................................................36
第 2章 SysI-Lab2多路选择器 ..................................................................38
2.1实验工具
........................................................................................38
2.
2多路选择器设计 ..............................................................................38
2.2.1基本概念
..............................................................................38
2.
2.2电路级别的实现....................................................................39
2.
2.3四路选择器的实现 ................................................................39
2.3实验步骤
........................................................................................41 思考及练习 ............................................................................................41
第 3章 SysI-Lab3七段数码管 ..................................................................42
3.1实验工具
........................................................................................42
3.2背景知识
........................................................................................42
3.
2.1复合多路选择器....................................................................42
3.2.2译码器
.................................................................................43
计算机系统贯通课程实践教材(RISC-V架构)
3.2.3时钟分频器 ..........................................................................43
3.2.4 NEXYS A7-100T七段管 ......................................................43
3.3实验步骤 ........................................................................................45 思考及练习 ............................................................................................46
第 4章 SysI-Lab4全加减法器 ..................................................................47
4.1实验工具 ........................................................................................47
4.2加法器设计.....................................................................................47
4.2.1加法器实验原理....................................................................47
4.2.2加法器实验步骤....................................................................50
4.3加减法器设计 .................................................................................51
4.3.1加减法器实验原理 ................................................................51
4.3.2 64b加减法器实验步骤 ..........................................................52 思考及练习 ............................................................................................52
第 5章 SysI-Lab5时序电路设计 ...............................................................53
5.1实验工具 ........................................................................................53
5.2时序电路设计基础...........................................................................53
5.2.1有限状态机 ..........................................................................53
5.2.2计数器 .................................................................................55
5.2.3分频器 .................................................................................55
5.3计时器设计.....................................................................................56
5.3.1 4位二进制计数器 .................................................................56
5.3.2 2位 BCD码计数器 ..............................................................57
5.3.3计时器实验步骤....................................................................57
5.4乘法器设计.....................................................................................58
5.4.1乘法器实验原理....................................................................58
5.4.2 Booth算法 ..........................................................................60
5.4.3乘法器实验步骤....................................................................61 思考及练习 ............................................................................................62
第 6章 SysI-Lab6卷积核实现 ..................................................................63
6.1实验工具 ........................................................................................63
6.2背景知识 .......................................................................................63
6.2.1移位寄存器 ..........................................................................63
6.2.2 SystemVerilog语法...............................................................64
6.2.3 Ready-Valid握手 .................................................................66
6.3实验原理 ........................................................................................67
7.5.1理解跳转表 ..........................................................................86
7.5.2回顾冒泡排序算法 ................................................................87
7.5.3理解简单 RISC-V程序 .........................................................87
7.5.4理解递归汇编程序 ................................................................88
7.5.5理解 switch语句产生的跳转表 ..............................................89
7.6实验步骤 ........................................................................................90
7.6.1冒泡排序的汇编实现 .............................................................90
7.6.2斐波那契数列的汇编实现 ......................................................90
7.6.3通过调试破解密钥 ................................................................91
7.6.4 RISC-V Binary Bomb...........................................................92 思考及练习 ............................................................................................93
第 8章 SysI-Lab8单周期 CPU设计........................................................94
8.1实验工具 ........................................................................................94
8.2背景知识 ........................................................................................94
8.2.1 RISC-V指令格式 .................................................................94
8.2.2数据通路..............................................................................95
8.2.3控制单元..............................................................................97
8.3 RISC-V基础指令 ......................................................................... 101
8.4实验原理 ...................................................................................... 114
8.4.1 Memory设计 ..................................................................... 114
8.4.2数据通路设计 ..................................................................... 116
数据冒险............................................................................
9.3.2实现暂停机制 ..................................................................... 128
9.4 DRAM和 BRAM的区别.............................................................. 128
9.5 BRAM的使用.............................................................................. 129
9.6实验目标 ...................................................................................... 130
9.7实验步骤 ...................................................................................... 131 思考及练习 .......................................................................................... 132
第 10章 SysII-Lab2流水线冒险的解决.................................................... 133
10.1实验工具 .................................................................................... 133
10.2实验原理 .................................................................................... 133
10.2.1流水线的旁路机制 ........................................................... 133
10.2.2 Axi-lite总线协议 ............................................................ 134
10.3实验步骤 .................................................................................... 136 思考及练习 .......................................................................................... 136
第 11章 SysII-Lab3卷积加速器.............................................................. 137
11.1实验工具 .................................................................................... 137
11.2实验原理 .................................................................................... 137
11.2.1外设编程接口.................................................................. 137
11.2.2 MMIO机制及定义 .......................................................... 138
11.2.3卷积加速器的 I/O映射及操作 ......................................... 139
实验工具 ....................................................................................
13.2背景知识 .................................................................................... 150
13.2.1 RISC-V中的中断和异常.................................................. 150
13.2.2上下文处理 ..................................................................... 152
13.2.3异常处理程序和时钟中断 ................................................. 152
13.3实验步骤 .................................................................................... 152
13.3.1准备工程 ........................................................................ 152
13.3.2开启异常处理.................................................................. 154
13.3.3实现上下文切换 .............................................................. 155
13.3.4实现异常处理函数 ........................................................... 156
13.3.5实现时钟中断相关函数 .................................................... 156
13.3.6实验样例 ........................................................................ 157 思考及练习 .......................................................................................... 157
第 14章 SysII-Lab6异常流水线.............................................................. 158
14.1实验工具 .................................................................................... 158
14.2实验原理 .................................................................................... 158
14.2.1 RISC-V特权级 ............................................................... 158
14.2.2控制和状态寄存器 ........................................................... 158
14.2.3异常和中断 ..................................................................... 159
14.3异常流水线设计 .......................................................................... 162
14.3.1实现 CSR指令................................................................ 162
15.3.4实验样例 ........................................................................ 174 思考及练习 .......................................................................................... 176
第 16章 SysII-Lab8软硬件协同的尝试.................................................... 177
16.1实验工具 .................................................................................... 177
16.2实验原理 .................................................................................... 177
16.2.1整体架构设计.................................................................. 177
16.2.2硬件外围设计.................................................................. 178
16.3编译内核 .................................................................................... 178
16.4外围准备 .................................................................................... 179
16.4.1 Bootloader代码 .............................................................. 179
16.4.2生成下板代码.................................................................. 180
16.4.3建立工程文件.................................................................. 180
16.4.4观察下板现象.................................................................. 181
16.4.5 Vivado仿真运行 ............................................................. 182
16.5实验步骤 .................................................................................... 182 思考及练习 .......................................................................................... 182
第 3部分计算机系统 III——定制化内核 + CPU综合设计 .............183
第 17章 SysIII-Lab1动态分支预测 ......................................................... 185
17.1实验工具 .................................................................................... 185
18.2.4 Cache与 Memory的数据传输.......................................... 196
18.3 Cache控制逻辑 .......................................................................... 198
18.3.1初始化 IDLE状态........................................................... 199
18.3.2读事务执行 READ状态 .................................................. 199
18.3.3写事务执行 WRITE状态 ................................................ 200
18.4 Cache的完整结构 ....................................................................... 201
18.5实验步骤 .................................................................................... 203
18.5.1实验目标 ........................................................................ 203
18.5.2仿真测试 ........................................................................ 204
18.5.3上板验证 ........................................................................ 205 思考及练习 .......................................................................................... 205
第 19章 SysIII-Lab3 RV64虚拟内存管理 ............................................... 206
19.1实验工具 .................................................................................... 206
19.2虚拟内存布局.............................................................................. 206
19.3 SATP寄存器.............................................................................. 207
19.4虚实地址转换.............................................................................. 208
19.4.1虚拟地址和物理地址........................................................ 208
19.4.2 RISC-V Sv39模式页表项 ................................................ 208
19.4.3 RISC-V地址转换............................................................ 209
19.5实验步骤 .................................................................................... 209
20.4.3中断处理 ........................................................................ 221
20.4.4添加系统调用.................................................................. 223
20.4.5修改内核启动.................................................................. 223
20.4.6编译及测试 ..................................................................... 223 思考及练习 .......................................................................................... 224
第 21章 SysIII-Lab5 RV64缺页异常处理 ............................................... 225
21.1实验工具 .................................................................................... 225
21.2背景知识 .................................................................................... 225
21.2.1虚拟内存管理.................................................................. 225
21.2.2缺页异常 ........................................................................ 226
21.3实验步骤 .................................................................................... 227
21.3.1准备工程 ........................................................................ 227
21.3.2实现虚拟内存管理 ........................................................... 228
21.3.3任务初始化 ..................................................................... 230
21.3.4实现缺页异常处理 ........................................................... 230
21.3.5编译及测试 ..................................................................... 231 思考及练习 .......................................................................................... 232
第 22章 SysIII-Lab6 fork机制............................................................... 233
22.1实验工具 .................................................................................... 233
22.2 fork基础知识 ............................................................................. 233
23.2.1 RISC-V Sv39分页模式.................................................... 241
23.2.2 Axi-lite总线模型 ............................................................ 243
23.2.3 MMU模块 ..................................................................... 243
23.3实验步骤 .................................................................................... 244
23.3.1实验目标 ........................................................................ 244
23.3.2仿真测试 ........................................................................ 244
23.3.3上板验证 ........................................................................ 244 思考及练习 .......................................................................................... 244
第 24章 SysIII-Lab8完成自己的计算机系统 ............................................ 245
24.1实验工具 .................................................................................... 245
24.2实验目标 .................................................................................... 245
24.3实验原理 .................................................................................... 246
24.3.1用户态实现及中断完善 .................................................... 246
24.3.2地址转换后备缓冲器........................................................ 246
24.3.3 MMIO与外设................................................................. 247
24.4设计范例 .................................................................................... 247
24.4.1范例一:指令集扩展........................................................ 247
24.4.2范例二:运行较为完善的 Kernel ...................................... 252 思考及练习 .......................................................................................... 259
