MIPS流水线技术

华中科技大学 - 计算机硬件系统设计

单周期指令运行动态

graph LR A[Instruction Fetch] --> B[Instruction Decode] B --> C[Execution] C --> D[MEM] D --> E[Write Back]

单周期时空图

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20200429190140726.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dXSWFuZE1D,size_16,color_FFFFFF,t_70)

设耗时最长的操作时间为T,则时钟周期 = 5T
执行n条指令需要5nT时间

多周期指令运行动态

指令 时钟周期
lw 5个
graph LR A[IF] --> B[ID] B --> C[Ex] C --> D[MEM] D --> E[WB]
beq 3个
graph LR A[IF] --> B[ID] B --> C[Ex]
add 4个
graph LR A[IF] --> B[ID] B --> C[Ex] C --> D[WB]
j 3个
graph LR A[IF] --> B[ID] B --> C[Ex]

多周期时空图

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20200429190312264.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dXSWFuZE1D,size_16,color_FFFFFF,t_70)
不同的指令按照状态图来运行,有多少个状态就分配多少个时钟周期,避免了单周期中某些快的指令需要等待的缺点

流水线架构

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20200429224344528.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dXSWFuZE1D,size_16,color_FFFFFF,t_70)
将一条指令分成5段,每段各自功能部件执行的时间不同,例如取指时访问主存相对较慢,取5段当中最长的时间作为每段需要的时间。各段完全并发,每一段都可以分开处理不同的指令。

IF ID EX MEM WB
IF ID EX MEM WB
IF ID EX MEM WB
图中蓝色长条形是流水接口部件。其本质是一系列同步的寄存器,锁存前段加工完成的数据。通过流水接口传递与指令相关的数据、控制、反馈信息。后段对数据的加工处理依赖于前段接口传递过来的信息

流水线数据和信号传递

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20200429224950101.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dXSWFuZE1D,size_16,color_FFFFFF,t_70)
IF / ID:

  • 设置PC值寄存器的目的:在执行分支指令是需要用到PC的值,如果不在取指时一并取出,则取指后PC的自动改变,到执行时再取出的PC值是错误的

单周期控制器根据IR的内容生成所有的控制信号,在后续阶段使用,需要向后传递

流水线时空图

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20200429221806304.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dXSWFuZE1D,size_16,color_FFFFFF,t_70)

流水线冒险 pipeline hazard

资源冒险 resource hazard

也称结构冒险 structural hazard

两条或多条已进入流水线的指令需要使用相同资源。此时这些指令必须串行执行,而不是并行执行。

  • 争用主存:IF取指,ID取操作数
  • 争用ALU:计算PC、分支地址、运算操作

解决方法:增加主存访存端口,或采用哈佛结构,增加ALU

分支冒险 branch hazard

也称控制冒险 control hazard
![在这里插入图片描述]( https://img-blog.csdnimg.cn/2020042923184319.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dXSWFuZE1D,size_16,color_FFFFFF,t_70)
由转移指令引起,当分支指令进入Ex阶段时,如果需要跳转,则控制IF段进行分支跳转,提前取出的指令作废,流水线清空,流水线发生中断

数据冒险 data hazard

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20200429232156846.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dXSWFuZE1D,size_16,color_FFFFFF,t_70)指令操作数依赖于前一条指令的执行结果,流水线停顿直到数据写回

有3种类型的数据冒险:

  • 写后读 Read After Write:在写操作完成前读
  • 读后写 Write After Read:在读操作完成前写
  • 写后写 Write After Write:两条指令要改写同一个位置
add $s1,$s2,$s3
add $s4,$s1,$s5
IF ID Ex WB(写R1
IF ID(读R1取操作数) EX WB
posted @ 2020-04-29 23:49  LanceHansen  阅读(522)  评论(0)    收藏  举报