Post

4.6 pipelined_datapath

4.6 pipelined_datapath

Part I: Datapath


1. 流水线寄存器

![[Pasted image 20241218165212.png|600]]

  • 寄存器的位宽:必须足够大以存储通过它们的所有数据。例如,IF/ID寄存器的位宽必须为96位,因为它需要同时存储从存储器中提取出的32位指令以及自增的64位PC地址。目前,其他三个流水线寄存器的位宽分别为256位、193位和128位;

  • 在发生例外时,PC中的内容必须被保存,而流水线寄存器中的内容则可以被丢弃;

2. E.g. 流水线寄存器的使用(ld)
![[Pasted image 20241218165748.png500]]
![[Pasted image 20241218165815.png500]]
![[Pasted image 20241218165834.png500]]

左写右读

3. 新增数据通路

问题:在ld指令流水的WB阶段,我们将要改写哪个寄存器?

  • IF/ID流水线寄存器中的指令提供了写入寄存器编号。但是,这条“指令”是ld指令的下一条指令,所以 此时IF/ID中的寄存器编号并不属于ld指令要写入的那个寄存器!
  • 所以,==我们需要添加一条数据通路,以保存ld指令的写入目的寄存器的编号==:这条通路 从IF/ID出来,沿途经过后面的各个流水线寄存器 ,一直将写入目的寄存器的编号保存,直到进入WB阶段,此时该编号被存储在MEM/WB寄存器中,于是连接到Rigisters寄存器堆的 Write register端口 (即目的寄存器编号的输入端口,下面的Write data是所要写入的数据内容的输入端口)

    ![[Pasted image 20241218171401.png500]]
4. 流水线的图形化表示

1)多时钟周期图

![[Pasted image 20241218171955.png500]]

2)单时钟周期图(是多时钟周期图的一个垂直切片)

![[Pasted image 20241218172158.png500]]

Part II: Control


1. 复制了单周期的所有控制信号
2. 根据流水线阶段 将控制线划分为五组

IF,ID:无

EX:ALUOp和ALUSrc

MEM:Branch、MemRead和MemWrite

WB:MemtoReg(决定是将ALU结果还是将存储器值发送到寄存器堆中)和RegWrite(写入所选值)

3. 传递控制信号

传递这些控制信号最简单的方式就是 扩展流水线寄存器 以包含这些控制信息
![[Pasted image 20241218172956.png|350]]

WB、M、EX分别是按组分好后的控制信号(ID、IF无需控制信号,不用传递)

This post is licensed under CC BY 4.0 by the author.