单总线结构的CPU
- 所有的功能部件都链接在总线上,并且通过总线进行数据交互
- 各部件间通过总线进行传输
- 设计简单,必须经过分时操作
读写过程
- PC程序寄存器,通过AR使用地址访问主存将指令读取处理放在DR寄存器中
- DR寄存器通过总线将数据发送给IR寄存器进行译码,和时序部件生成操作控制性信号,这些信号会链接这各个通用寄存器已经ALU等
- 比如读取R0和R1的数据,R0的寄存器就会收到时序控制信号,打开输出端将数据写入到地址总线,同时时序信号也打开X所存的输入端,这个时候就只有R0的数据经过总线被X接收,经过一个时钟周期所存在X中,此时ALU的B端一直是打开的所以也能收到R0的数据信息
- 此时控制信号打开R1的输出端,把数据输入进地址总线,此时ALUB端数据一直是打开的之前是R0数据,但是没有收到操作指令,等数据总线又来数据了把原来的R0擦掉,变成R1数据了,所以直接就能收到地址总线R1的数据,然后收到控制信号的加法指令进行加法,将A和B端数据加,输出,控制信号打开Z锁存的输入端,经过一个时钟周期保存Z数据,然后打开Z发送到总线,此时打开R0的输入端,在经过一个时钟周期把结果保存在R0的通用寄存器
多总线架构数据通路
- 一个公共总线Bus
- 同时给出了一个Bus1的这样一个总线
- 两条总线之间有个旁路器,用于数据交互
- 还有个Bus2是一个三总线架构
- 计算和取数据经过不同总线是可以并发执行的
译码经过操作控制器将信号送到上面所有的器件上去,但是是有时序的
专用通路,单周期MIPS
要求一个MIPS指令在一个周期内完成,之前单总线需要三个时钟周期完成,如果一个部件多次使用就要分时,就会多个周期,所以为了保证一个周期完成,当需要多个部件的时候就需要设置多个部件
以R型指令为例
- 后六位的funct字段决定加法还是减法还是其他运算
- 中间15位分别代表Rs,Rt,Rd, 表示三个寄存器的编号,紫色部分是我们的位移指令所需要的偏移量
- 会将两个Rs,Rt计算的结果保存在Rd中
- PC存放当前程序执行指令地址,以PC为地址访问主存,之前要将PC送入AR,这里不存在AR寄存器,如果需要就需要多拍。
- 取到指令以后RD指令寄存器中,进行解析,接续出它的Rs,Rt,Rd,将对应的rs,rt分别送到寄存器堆的R1寄存器的r1寄存器编号,r2寄存器编号 都是读寄存器编号,rd送到写寄存器W,所以三个数据分别送到了寄存器堆的三个输入端,可以同时读出R1和R2的值对应rs和rt的值,将对应的值输出到ALU的AB端进行响应的运算,寄存器堆可以同时输出两路,写入一路
- 两个操作数准备就绪之后,给出ALU操作符,运算完成后将结果经过多路选择器直接传入到寄存器堆的写入端WD
- 在时钟的配合下将结果写入响应的寄存器中
- 控制器可以给出所有的控制信号
- 从图中可以看出PC+1的操作可以同时进行,运算结果传递到PC的输入端,要等到第二个时钟周期写入到PC中,这样PC的指令就自动更新了,这个时钟周期跟上一个是并发的,所以不存在第二个时钟周期
- 也可以通过Sign Extend同时计算运算分支地址传送到PC的输入端,是用来分支指令跳转使用的,有的指令并不是并排顺序存放的