指令流水线
做实验做到了比较困难的一个阶段,或者说刚开始继续实验就被难到了,verilog描述的电路中有很多不清楚的变量,没法立刻定义变量的作用和整体的一个功能,虽然电路图画出来了,但是还是模棱两可,整体去看Mycpu的verilog代码的时候发现,虽然是只看了单周期CPU的一个基本的功能,但是实际上代码中为了后面实验的复用直接把流水线的内容添加进去,对这几个阶段并没有熟悉到了然于胸,所以才会出现这种电路图画出来但是功能不能立刻清楚的一个过程。
发现问题之后选择解决问题的资料,发现计算机体系结构这块直接在内部加了一个多周期的部分,整体的内容量太大很难立刻有个整体的观念去学习,于是选择了胡老师的这本计算机体系结构,继续回来进行一遍复习,看着当时做的笔记,现在还是脑子里面什么东西都没有,才发现当时这一块的基础很不扎实,这一遍复学,主要是以实验三为需求,清楚流水线的基本过程和电路,进而完成实验。
这一块内容主要是CPU中运算器的部分。
1、单周期处理器
CPU的数据通路包括以下组成要素:
- 程序计数器:PC,指示当前指令的地址,注意进场把PC就和指令本身混淆了
- 指令存储器:按照指令地址存储指令码,接收PC,读出指令
- 译码部件:用于分析指令,判定指令类别
- 通用寄存器堆:寄存器文件,用于承载寄存器的值,绝大多数指令都需要读取及修改寄存器
- 运算器:用于执行所指示的运算操作
- 数据存储器:按照地址存储数据,主要用于访存指令
1)CPU的数据通路
上述的这些组成元素连接起来就形成了CPU的数据通路。
CPU 数据通路的五个阶段:取指,译码,执行,访存,写回
过程:
通过PC所指向的地址从指令存储器中取出指令,然后通过译码部件解析出相关的控制信号,并读取通用寄存器堆。运算器会对通用寄存器堆读出的操作数进行计算,得到计算结果写回通用寄存器或者是将计算所得的转移指令的跳转目标传递给NEXTPC。
如果该指令是Load指令访问了数据存储器之后,需要将数据写回到通用寄存器。在向通用寄存器堆写入时,会进行二选一判断,看是写入数据的计算结果还是访存(访问数据存储器)结果。
而新的PC可能是PC+4也可能是运算器计算出的跳转目标的地址。
这个简单的一个数据通路基本上就描述出了一个CPU的数据通路
2)译码部件
因为指令是有指令码的,也就是说根据PC,从指令寄存器会取出一段指令,比如说ADDU指令:
最上面的32位指令显示出来的就是ADDU指令,也就是在32位寄存器中所存储的指令,所有的指令在指令RAM中都是这样的存储形式。
对于MIPS指令来说一般可以分为三类:
R型,I型,J型
在处理这些类型不同的指令的时候,处理起来太麻烦了,如果能统一一个类型,比如说统一成其中某种类型就会比较方便,所以最后统一成
这样的机构,不属于任何一种类型,也就是说指令码在译码之后都会转换成这种类型的结构。
但这并不是指令译码的唯一的意义所在,如果只是为了统一一下使用那么大可不必这样,指令译码更大意义在于:
首先上面显示的指令码是由两部分组成的:地址码和操作码。
在计算机执行指令时,会根据PC从指令RAM中取出一条指令送往指令寄存器中。指令操作码会被送到指令译码器中去译码,地址码则会送给地址形成部件(之前介绍出来的CPU是没有MMU和TLB的直接进行地址映射完成后的)。地址形成部件会根据指令特征将地址码形成有效地址,送往主存的地址寄存器,对于注意指令则是将形成的地址送往程序计数器中,实现程序的转移。操作控制器则根据指令译码对于指令码的译码,产生实现指令功能所需要的全部动作的控制信号,然后将这些控制信号送往各个部件,控制各部件的行为。
这就说明了译码的功能和步骤,那么译码之后的机构该如何解释:
- op 功能域,区别于其他指令的主要部分
- src1 源操作数1
- src2 源操作数2
- dest 目的寄存器地址
- imm 立即数域
然后根据指令译码的结构放到数据通路当中,添加控制信号:
那么这就完成了一个带时序逻辑控制的数据通路,而通过op域这样生成控制信号就比如说独热码。而译码的这个过程其实就是编码的逆过程,编码就是给一些二进制数赋予代表的行为,而译码的过程就是将这些二进制数翻译成行为。
描述一下这个CPU的过程:
- 复位信号将复位的PC装载到PC触发器中,之后的第一个时钟周期内,使用PC取指,译码,执行,读数据存储器,生成结果
- 第二个时钟周期上升沿到来时,根据时序逻辑的特性,就会将新的PC锁存,将上一个时钟周期的结果写入寄存器堆,执行可能的数据存储器写操作。
- 第二时钟周期内,执行第二条指令,根据上面两条依次类推。
看到这里,其实胡老师的书才复习了两页,但是如果真的不是前两天将计算机体系结构中单周期CPU的过程看了一遍这里真的不好理解,这里能总结出的学习方法就是胡老师这本书虽然通俗易懂,清晰明了,但是如果没有一个基本的体系想看懂和看明白这本书并不容易,这里只是精炼了很多东西,更多的东西如果不去挖一挖还是比较难解决的。