是否有一些实际示例可以说明数据路径和控制中的流水线?

Are there some practical examples that illustrate pipelining in datapath and control?

数据路径中的流水线只是 divvying/cutting(理论上)资源。但是流水线控制意味着流水线阶段的每个资源都获得单独的控制信号?

例如,在大多数 RISC 架构中,我们有 5 个流水线阶段,而 Mem 流水线阶段有单独的加载或存储控制信号?

有控制流水线的一些实际例子吗?

在经典的 5 级管道中,管道的每一级都有来自前一级的输入(当然第一级除外),管道的每一级都有进入下一阶段的输出(当然,最后一个除外)。按理说,这些输入和输出由数据和控制信号组成。

EX阶段需要知道要执行什么ALU操作(控制:ALUOp)和ALU输入操作数(数据)。

MEM阶段需要知道是读内存(control:MemRead)还是写内存(control:MemWrite)(加上size&type用于扩展,通常会被忽略)和读到哪里(data:Address)以及要写入的内容(数据:写入数据)。

WB阶段需要知道是否要写一个寄存器(control:RegWrite)和写什么寄存器(data:Write Register)和写什么值到寄存器(data:Write Data)

在单级处理器中,所有这些控制信号都是在 ID 级通过查找(使用操作码)生成的。当处理器是流水线时,这些信号要么从一个阶段转发到另一个阶段,要么,每个阶段都必须使用操作码重复查找(然后操作码需要从一个阶段转发到另一个阶段,以便每个阶段重复查找,尽管操作码无论如何都可能被转发,也许是为了例外)。 (我认为与转发控制信号相比,在每个阶段重复查找会产生成本(时间和硬件),尤其是对于应该在前半个周期执行的 WB。)

因为WB阶段需要知道是否写入一个寄存器,这个信息(控制:RegWrite)必须从MEM阶段传递给它,MEM阶段从EX阶段获取,EX阶段从ID阶段获取,它是通过查找操作码生成的。 EX & MEM 不使用 RegWrite 控制信号,但必须接受它作为输入,以便将其作为输出传递到下一个阶段。

MEM需要的控制信号也类似:MemRead和MemWrite,在ID中生成,从EX传递给MEM(EX中没有使用),MEM不需要再传递这些,因为WB也不不要使用那些信号。

如果你看Computer Organization and Design RISC-V edition的第4章,在该章的末尾(第1版的图4.44),它显示了控制从一个阶段输出的信号通过阶段流水线寄存器进入下一个中间阶段。例如,指令 [30, 14-12] 被送入 ID/EX,然后在 EX 阶段由 ALU Control 读取。这是流水线控制信号的示例。