将陆续上传本人写的新书《自己动手写处理器》(尚未出版),今天是第十篇,我尽量每周四篇
从本章开始将一步一步地实现教学版OpenMIPS处理器。本章给出了教学版OpenMIPS的系统蓝图,首先介绍了系统的设计目标,其中详细说明了OpenMIPS处理器计划实现的5级流水线。3.2节给出了OpenMIPS处理器的接口示意图,及各个接口的作用。3.3节简单解释了各个源代码文件的作用。最后描述了OpenMIPS处理器的实现方法,读者将发现本书给出的实现方法与现有书籍的方法完全不同,更加易于理解、便于实践。
3.1 系统设计目标
3.1.1 设计目标
本书第二部分设计实现的教学版OpenMIPS处理器,是一款具有哈佛结构的32位标量处理器,兼容MIPS32 Release 1指令集架构(后文不再注明Release 1),这样的好处是可以使用现有的MIPS编译环境,如:GCC编译器等。OpenMIPS的设计目标如下。
- 五级整数流水线,分别是:取指、译码、执行、访存、回写
- 哈佛结构,分开的指令、数据接口
- 32个32位整数寄存器
- 大端模式
- 向量化异常处理,支持精确异常处理
- 支持6个外部中断
- 具有32bit数据、地址总线宽度
- 能实现单周期乘法
- 支持延迟转移
- 兼容MIPS32指令集架构,支持MIPS32指令集中的所有整数指令
- 大多数指令可以在一个时钟周期内完成
上述设计目标都很容易理解,除了延迟转移和精确异常,前者将在第8章“转移指令的实现”中介绍,后者将在第11章“异常相关指令的实现”中介绍。
3.1.2 五级整数流水线
本书讲的是计算机中的流水线,首先听一听维基百科中对计算机流水线的定义:流水线是指将计算机指令处理过程拆分为多个步骤,并通过多个硬件处理单元并行执行来加快指令执行速度。此处有两个关键词:(1)拆分;(2)并行。指令的处理从直观上分析至少可以拆分为三步:从存储器取出指令、解释指令、按照解释的结果执行,简单的说就是:取指、译码、执行。如果我们只有一个硬件处理单元,这个单元既要取指,又要译码,还要执行,假设上述三种操作都可以在时间T完成,那么一条指令的处理时间为3T,n条指令的处理时间就为3nT,但是如果我们设计有三个硬件单元,分别做这三项工作的一项,那么就可以在执行的同时对下一条指令译码,在对下一条指令译码的同时还可以再取一条指令,这就是经典的三级流水线,如图3-1所示。
从图3-1可知,在三级流水线上执行3条指令所需时间为5T,而如果没有使用流