从零开始写riscv处理器(四)流水线结构

1. 举例

流水线是一种能使多条指令重叠执行的实现技术。引用书中的例子:
假设要洗一堆衣服,包括以下步骤:

  1. 将一批脏衣服放入洗衣机。
  2. 洗衣机洗完后,将湿衣服取出并放人烘干机。
  3. 烘干机完成后,将干衣服取出,放在桌上并叠起来。
  4. 叠好后,请你的室友帮忙把衣服收好。
    你的室友把衣服收好后,再开始洗下一批脏衣服。
    而如果采用流水线的方式:当第一批衣服从洗衣机中取出并放入烘干机后,就可以把第二批脏衣服放入洗衣机。当第一批衣服烘干完成后,就可以把它们放在桌上叠起来,同时把洗衣机中洗好的衣服放入烘干机,再将下一批脏衣服放入洗衣机 接着让你的室友把第一批衣服从桌上收好,你开始叠第二批衣服.烘干机开始烘干第三批衣服,同时可以把第四批衣服放入洗衣机。此时,所有的洗衣步骤 (称为流水线阶段) 在同时工作。只要每个阶段使用不同的资源,我们就可以用流水线的方法完成任务。

从上图可见,流水线方式的速度大约为非流水线方式的 2.3 倍,因为当任务数量与流水线的步骤数量相比不是很大时,流水线的启动和结束会影响它的性能。如果每个步骤需要的时间相同,并且要完成的工作足够多,那么由流水线产生的加速比等于流水线中步骤的数目,在这个例子中是 4 倍。
流水线技术通过提高指令吞吐率来提高性能,而不是减少单个指令的执行时间。 流水线并不会缩短执行一次任务的时间,流水线更快的原因是所有任务都在并行地执行。所以单位时间能够完成更多工作,流水线提高了洗衣系统的吞吐率 (throughput)。吞吐率的提高减少了完成整个任务的时间。

回到RISC-V处理器,指令执行通常包含五个步骤:

  1. 从存储器中取出指令。
  2. 读寄存器并译码指令。
  3. 执行操作或计算地址。
  4. 访问数据存储器中的操作数(如有必要)。
  5. 将结果写入寄存器(如有必要)。

同样地,RISCV架构也可以采用流水线结构进行设计:

2. 流水线结构

将数据通路划分成五个部分,将每个部分用对应的指令执行阶段来命名:

  1. IF:取指令
  2. ID:指令译码和读寄存器堆
  3. EX:执行或计算地址
  4. MEM:数据存储器访问
  5. WB:写回
    下图是划分了流水线结构的硬件架构图:

3. 流水线控制

后阶段要使用的控制信号需要通过流水线寄存器往后传递,使用过的控制信号则不需要再往后传递。在EX阶段要设置的信号是 ALUOp 、 ALUSrc和pc_rs1_sel;在MEM阶段要设置的控制线是 MemRead 、 MemWrite和MemOp;在WB阶段要设置的是 MemtoReg 和 RegWrite。
由于控制线从 EX 阶段开始,我们可以在指令译码阶段为之后的阶段创建控制信号。传递这些控制信号最简单的方式就是扩展流水线寄存器以包含这些控制信息。随着指令沿着流水线向下流动,这些控制信号被用于适当的流水线阶段。

图为最后三个阶段的七条控制线。在 EX 阶段使用了7条控制线中的2条,剩下的5条被传递到扩展的EX/MEM流水线寄存器中以保持控制线;在MEM 阶段中使用了3条控制线,最后两条传递到 MEM/WB 寄存器用于 WB 阶段。

下图是加入流水线控制的硬件架构图:

4. 指令执行过程

下面以load指令的执行来展示指令执行的过程,因为load指令的执行设计数据存储器,覆盖了整个硬件结构。

4.1 取指

使用 PC 中的地址从存储器中读取指令,然后将指令放入IF/ID 流水线寄存器中。PC 中的地址自增 4, 然后写回 PC, 以为下一时钟周期做准备。这个PC 值也保存在 IF/ID 流水线寄存器中,以备后续的指令使用(例如 beq)。计算机并不知道当前正在提取的是哪一种指令,因此它必须为任何一种指令做好准备,并且将所有可能有用的信息沿流水线传递出去

4.2 指令译码和读寄存器堆

这个阶段将一个符号扩展的立即数字段,以及两个读取出的寄存器数值与 PC 地址一起存储在 ID/EX 流水线寄存器中。在这里再次向右传递在之后的时钟周期里指令可能用到的所有信息。

4.3 执行或地址计算

laod指令从 ID/EX 流水线寄存器中读取一个寄存器的值和一个符号扩展的立即数,并且使用 ALU 部件将它们相加,它们的和被存储在 EX/ MEM 流水线寄存器中。

4.4 存储器访问

load指令使用来自 EX/MEM 流水线寄存器中的地址读取数据存储器,并将数据存入 MEM/WB 流水线寄存器中。

4.5 写回

从 MEM/WB 流水线寄存器中读取数据,并将它写入图中间的寄存器堆中。

因此,如果要将相关信息从之前的流水线阶段传递到后续的流水线阶段,就必须将它们放置在流水线寄存器中。否则,当下一条指令进入流水线时,该信息就会丢失。

来自广东

评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇