内容简介
本书以开源32位软核处理器OR1200为研究对象,像引导读者如做解剖学实验那般,对其进行剖析,力图使读者对教科书上介绍的处理器有一个实践上的认识,打破处理器令人高深莫测的印象,同时使读者了解处理器设计的细节。OR1200包括CPU、MMU、Cache、总线接口、电源管理、中断控制和计时器单元等多个模块,对于不同的模块,根据其难易程度,采用指令驱动分析法、情景分析法及直接分析源代码等不同的分析方法,便于读者理解。
通过阅读本书,读者可以掌握一款成熟的软核处理器OR1200的设计思路、实现方法,同时更加深刻、具体地理解计算机组成原理、计算机体系结构等课程介绍的知识。
目录
目 录
第1章OpenRISC介绍 1
1.1 开源软核处理器 1
1.2 OpenRISC 1000架构 4
1.3 OR1200——OpenRISC 1000架构的一个实现 4
1.3.1 寻址模式 5
1.3.2 位和字节次序 6
1.3.3 寄存器集 6
1.3.4 指令集 7
1.3.5 异常模型 8
1.4 OR1200代码组织 8
1.5 本书的分析方法 11
第2章 实验环境的搭建 13
2.1 GNU开发工具链的安装 13
2.2 GNU开发工具链的使用 18
2.2.1 一个简单的汇编程序 18
2.2.2 编译及ELF文件介绍 19
2.2.3 链接 21
2.2.4 Makefile文件 23
2.2.5 使用OR1KSim模拟器运行程序 24
2.3 创建OR1200运行的系统 25
2.3.1 系统的创建 26
2.3.2 运行仿真 29
2.3.3 修改Makefile 30
2.3.4 观察流水线 32
2.3.5 流水线介绍 33
2.4 本书的一些说明及定义 34
2.4.1 一些说明 34
2.4.2 一些定义 35
第3章 QMEM剖析 37
3.1 QMEM的作用 37
3.2 Wishbone总线快速了解 40
3.3 QMEM的Wishbone总线接口 43
3.3.1 QMEM与CPU、IMMU的连接 44
3.3.2 QMEM与ICache的连接 45
3.3.3 QMEM与CPU、DMMU的连接 46
3.3.4 QMEM与DCache的连接 47
3.4 QMEM的内部RAM 49
3.5 复位后取第一条指令的过程分析 51
3.5.1 复位信号有效阶段 51
3.5.2 复位信号无效后的第一个时钟周期上升沿 56
3.5.3 复位信号无效后的第一个时钟周期的组合逻辑阶段 57
3.6 第二条及后续指令的读取过程分析 58
3.6.1 复位信号无效后的第二个时钟周期的上升沿 58
3.6.2 复位信号无效后的第二个时钟周期的组合逻辑阶段 59
第4章 数据处理类指令剖析 61
4.1 数据处理类指令说明 61
4.2 分析用例 65
4.3 流水线的简单模型 67
4.4 l.add指令分析 69
4.4.1 l.add取指阶段的组合逻辑输出 70
4.4.2 l.add取指阶段的时序逻辑输出 73
4.4.3 l.add译码阶段的组合逻辑输出 75
4.4.4 l.add译码阶段的时序逻辑输出 80
4.4.5 l.add执行阶段的组合逻辑输出 91
4.4.6 l.add执行阶段的时序逻辑输出 97
4.4.7 第一条指令分析小结 98
4.5 l.sfeqi指令分析 99
4.5.1 l.sfeqi取指阶段的组合逻辑输出 99
4.5.2 l.sfeqi取指阶段的时序逻辑输出 100
4.5.3 l.sfeqi译码阶段的组合逻辑输出 100
4.5.4 l.sfeqi译码阶段的时序逻辑输出 101
4.5.5 l.sfeqi执行阶段的组合逻辑输出 102
4.5.6 l.sfeqi执行阶段的时序逻辑输出 105
4.5.7 第二条指令分析小结 106
4.6 ALU分析 106
4.7 流水线数据相关的解决方法 112
4.8 定制属于自己的指令 117
4.9 不完整流水线数据通路图 121
第5章 特殊寄存器访问类指令剖析 123
5.1 OR1200中的特殊寄存器 123
5.2 第0组特殊寄存器 125
5.3 特殊寄存器访问类指令说明 127
5.4 分析用例 128
5.5 l.mfspr指令分析 130
5.5.1 l.mfspr取指阶段的组合逻辑输出 131
5.5.2 l.mfspr取指阶段的时序逻辑输出 132
5.5.3 l.mfspr译码阶段的组合逻辑输出 132
5.5.4 l.mfspr译码阶段的时序逻辑输出 133
5.5.5 l.mfspr执行阶段第1个时钟周期的组合逻辑输出 135
5.5.6 l.mfspr执行阶段第1个时钟周期的时序逻辑输出 138
5.5.7 l.mfspr执行阶段第2个时钟周期的组合逻辑输出 141
5.5.8 l.mfspr执行阶段第2个时钟周期的时序逻辑输出 144
5.5.9 l.mfspr指令分析小结 144
5.6 l.mtspr指令分析 145
5.6.1 l.mtspr执行阶段的组合逻辑输出 147
5.6.2 l.mtspr执行阶段的时序逻
摘要与插图
人看见我就是看见了父
我就是道路、真理、生命
若不借着我
没有人能到父那里去
——《约翰福音》
现在看来,用上述语句形容1971年诞生的世界上第一款商用微处理器Intel
4004,似乎也是恰当的。从“人类历革新性的产品之一”(戈登?摩尔语)的4004诞生至今,已过了四十多年,期间,处理器的应用范围不断扩展,渗透到各行各业,浸入人们的日常生活,极大地影响了第五次信息革命的进程。对其自身而言既有“变”也有“不变”,“变”的是处理器的性能,“不变”的是其高高在上的形象,处理器设计制造作为国家信息产业的基石之一,一直都是高科技行业,轻易无法涉足。幸运的是,随着可编程硬件技术的持续发展,如今可以通过编写代码实现处理器,出现了软核处理器,它的出现使得寻常人士也能有机会了解处理器内部实现原理,甚至参与处理器的设计、研发。
软核处理器有很多,比如:NiosII、OR1200、LEON3和OpenSparc等,本书选择OR1200作为分析对象,深度剖析其内部实现,理解其设计思路、工作过程。选择OR1200的原因有两个:一方面OR1200是开源的;另一方面,笔者在学习处理器的过程中有一个体会,那就是“一通百通、融会贯通、取长补短、创新提高”。我们的目的是了解处理器的实现原理,不必过多纠结于选择哪个、不选哪个,处理器设计中很多问题都是相通的,深入学习一款处理器,明白其架构,在这个过程中可以找到学习处理器的途径,找到适合自己的学习方法,有了方法,再学其他的处理器时就会顺利很多,所以称为“一通百通”。
分析第一个处理器内部实现时,是抱着学习的态度,学第二个、第三个就应该在头脑中形成一种比较的意识,比较这几种处理器实现相同功能的部分为何会有不同的设计方法,哪一种性能更好,这就称为“融会贯通”。通过前面的两步,我们已经如牛顿那般站在巨人的肩膀上了,学习了各种处理器的设计原理,明白了各自优劣,在自己设计处理器的时候就可以“取长补短”。此外,通过独立思考,或者由于不同设计思路的碰撞,可能会产生新的、更好的设计灵感,是谓“创新提高”。
写作目的
寻找一个确定性的世界
我们信科学
我们信逻辑
我们信因果
我们是理工男
科学的、逻辑的、因果的,表达的是确定性。恐惧源于未知,人类科技活动的目的就是为了探索未知,消除未知带来的不确定性,努力使得一切都可预测,都是确定性的。当然,现实生活中各种因素使我们个体所接触的物质世界显得如此的不确定。从大的方面讲,对于个人命运、社会变革这些宏大的命题,我们都显得渺小和茫然;从小的方面讲,即使坐在对面的是自己的意中人,因为不知她(他)的心思,从而产生一种对确定性丧失的焦虑和痛苦。这时我们迫切地需要一种满足,一种对确定性存在的满足,进而是一种理想的满足。笔者觉得这也是剖析处理器的魅力,处理器的世界就是一个确定性的世界,从加电的那一刻开始,读指令、执行、再读指令、再执行,一切都是设计好的,精准、无误、确定。即使出现意外,也可以得到一个确定的意外原因。
对好奇心的满足
人类进步的推动力量有两个:懒惰、好奇。这不是玩笑,而是很严肃的话题,关于第一点,大家想想洗衣机、电视、麦当劳就很容易理解了。第二点更好理解,看看婴儿打量这个世界的眼神就知道好奇心是人类与生俱来的。为什么太阳东升西落?为什么苹果会掉下来?为什么烧开的水会把壶盖顶起来?……每一个为什么的提出及解答,都使得人类前进了一步。在IT行业,人们会问,为什么可以通过计算机一边听音乐、一边