计算机组成原理——指令流水线数据通路和控制逻辑

指令流水线——数据通路和控制逻辑

单周期处理器模型: link.

在这里插入图片描述
上图是我们介绍过的单周期处理器模型,想一想有什么缺点??指令是one-by-one执行的,吞吐率并不是很高,能不能设计一个具有更高吞吐率的模型呢??这就是我们要介绍的指令流水线。

我们先来分析对比一下单周期与流水线的性能,假设有N条指令,指令分为5个阶段,每个阶段耗时2ns,那么单周期执行时间为10Nns,流水线执行时间(N-1+5)*2=(N+4)*2ns,可见,流水线的执行速度是单周期的5倍!!!

下面我们详细分析流水线咯

先来看执行时间最长的 Load指令

在这里插入图片描述
在这里插入图片描述
观察可见,每个周期都有一条指令进入流水线,每个周期都有一条指令完成,每条指令的有效周期CPI=1

再来看 R-Type指令

在这里插入图片描述
在这里插入图片描述
问题来了,在Cycle7,Load指令和R-Type指令共同向Register写数据,产生冲突,我们把一个功能部件在同一周期同时被多条指令使用的现象称为 结构冒险 ,规定每个功能部件每条指令只使用一次且每个功能部件必须在相同的阶段被使用就可以解决此问题。(如下图所示)

在这里插入图片描述

Store 指令

在这里插入图片描述

Beq 指令
在这里插入图片描述

A Pipelined Datapath

在这里插入图片描述

  • Ifetch阶段

在这里插入图片描述
在这里插入图片描述
PC+4(beq 时用得到) 和PC指令一同送入 IF/ID 流水段寄存器

  • Reg/Dec 阶段

在这里插入图片描述
将PC+4 ,imm,R[rs] ,R[rt] ,rt ,rd 送入 ID/ IE 流水段寄存器

  • Exec阶段

在这里插入图片描述
在这里插入图片描述
将 PC+4 ,zero ,ALU运算结果 , rt ,筛选出的目的寄存器地址送入Ex/Mem 流水段寄存器

  • Mem 阶段

在这里插入图片描述
将ALU运算结果,Do内容 ,目的寄存器地址送到Mem/Wr 流水段寄存器

只有 lw sw 指令会在Mem阶段进行访存操作 ,若是Load指令,会将ALU运算结果送入RA(Read Address),并从Do(Data Out)读取数据; 若是Store指令,会将ALU运算结果送入WA(Write Address),同时将 R[rt] 写入Di ;

在Mem阶段 如果是beq指令,还可能会进行跳转,跳转地址已经保存在Ex/Mem流水段寄存器。

  • Wr阶段

在这里插入图片描述
Wr阶段的MUX会选择写入寄存器的源数,是来自ALU还是来自DM,Mem/Wr 流水段寄存器中保存着目的寄存器的地址,在控制信号的作用下,写入正确的位置。

至此,我们已经介绍完毕流水线的数据通路了,下面介绍流水线的“指挥官”——控制信号

在这里插入图片描述
在这里插入图片描述
控制逻辑分为两个部分——主控生成ALUop和其他控制信号,局控根据ALUop和func字段生成ALUctrl

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
想一想可能产生什么问题??

(1)竞争问题

如果写入控制信号先于目的寄存器地址或Data的到达,那么会写入错误的地址或错的数据!!!怎么办呢???

在这里插入图片描述
那么可以让WrEn“等一等”

在这里插入图片描述

(2)Branch引起的“延迟现象”

在这里插入图片描述
beq指令在Cycle4取出,目标地址在Cycle7计算得出送入PC的输入端,Cycle8才能取出目标地址处的指令执行,在取目标指令之前,已经有三条指令被取出,取错了三条!!!!!这种现象称为 控制冒险/分支冒险/转移冒险

(3)Load引起的延迟

在这里插入图片描述

尽管Load指令在Cycle1就被取出,数据在Cycle5才能写入寄存器,如果要使用寄存器的内容,只用从Cycle6开始才能使用,所以如果Load后面紧跟的三条指令要使用目标寄存器的数据的话是不会得到正确值的!!!这种现象被称为 数据冒险/数据相关

猜你喜欢

转载自blog.csdn.net/tian__si/article/details/106108503
今日推荐