RISC-V学习笔记(四):RISC-V的流水线

前提

其实在第一篇文章里面我们就有讲了一点点流水线的相关知识,而这篇文章是在我写完了RISC-V的功能实现后补上的一篇文章,因为这里面涉及到不少关于RISC-V设计的重点知识。

RISC-V实践部分我们使用的是三级流水,包含了取指、译码和执行三个步骤。

tinyriscv的流水线结构图:

1.流水线

流水线是一种能够实现多条指令重叠执行的技术,和工业流水线相似,能极大的提高处理器的工作效率。

作者对使用流水线的解释:

 在RISC-V上采用流水线方式执行指令通常是5步,也就是我们常说的5级流水:

1.从存储器中取出指令

2.读寄存器并译码指令

3.执行操作或计算地址

4.访问数据存储器中的操作数 (如有必要)

5.将结果写入寄存器人(如有必要)

单周期、非流水线的指令执行(上方图像)和流水线指令执行(下方图像)的对比图:

注释:采用流水线指令执行的指令平均执行时间是单周期、非流水线的指令执行的1/4,执行速度直接提升了4倍(速度提升并非一定是4倍,这里是为了突出流水线对指令执行速度的重要性)。

 1.时钟周期

所有的流水线阶段都需要一个时钟周期,流水线的时钟周期必须满足最慢指令执行的时间。

时钟周期也叫 时钟周期数,滴答数,为计算机一个时钟周期的时间,有时候我们也会提及它的倒数-时钟频率

2.流水线冒险

流水线冒险:在流水线中有可能出现在下一个时钟周期中下一条指令无法执行的情况,其中又有3种冒险。

1.结构冒险:因缺乏硬件支持导致指令在预期时钟周期内无法执行完毕。

2.数据冒险:因不能提供指令执行所需要的数据导致指令在预期时钟周期中无法执行完毕。

3.控制冒险(分支冒险):因取到的指令不是所需要的或者指令流向不是流水线预期的导致正确指令在预期时钟周期中无法执行完毕。

3. 流水线数据通路和控制

数据线通路

用来操作或保存处理器中数据的单元。在RISC-V中包括指令寄存器、数据寄存器、寄存器堆炖好ALU和加法器

数据通路分5部分:

扩展: 

在IF和ID中间的流水线寄存器被命名为IF/ID 

 4.流水线停顿

流水线停顿也称气泡,为解决流水线冒险而实施的一种阻塞。其实就是发送空指令(一种不执行任何操作、不改变任何状态的指令,也就是NOP指令)。

项目作者的解释:

ctrl.v(控制模块,用来发出跳转、暂停流水线信号
序号信号名输入/输出位宽(bits)说明
1rst输入1复位信号
2jump_flag_i输入1跳转标志,来源于ex.v的jump_flag_o
3jump_addr_i输入32跳转地址,来源于ex.v的jump_addr_o
4hold_flag_ex_i输入1来自执行模块的暂停标志,来源于ex.v的hold_flag_ex_o
5hold_flag_rib_i输入1来自总线模块的暂停标志,来源于rib.v的hold_flag_o
6jtag_halt_flag_i输入1来自jtag模块的暂停标志,来源于jtag_top.v的halt_req_o
7hold_flag_clint_i输入1来自中断模块的暂停标志,来源于hold_flag_o
8hold_flag_o输出3暂停标志,输出到pc_reg.v的hold_flag_i
9jump_flag_o输出1跳转标志,输出到pc_reg.v的jump_flag_i
10jump_addr_o输出32

跳转地址,输出到pc_reg.v的jump_addr_i

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RISC-V五级流水线是一种用于处理指令的设计架构。它将指令处理过程分为五个阶段,以提高处理器的效率和性能。这五个阶段分别是取指阶段(IF_stage)、译码阶段(ID_stage)、执行阶段(EX_stage)、访存阶段(MEM_stage)和写回阶段(WB_stage)。每个阶段负责不同的任务,并且这些阶段是连续且并行工作的,即在处理完一条指令的某个阶段后,立即开始处理下一条指令的同一阶段。 具体来说,五级流水线的设计步骤可以按照以下方式进行: 1. 首先,需要对整个流水线进行模块化划分。这意味着将整个处理器分为多个模块,每个模块负责处理指令处理过程的一个阶段。常见的模块包括指令存储器、译码器、执行单元、数据存储器和寄存器文件等。 2. 其次,需要在每两个模块之间添加流水线寄存器。这样可以确保指令在不同阶段之间流动时能够被正确地传递和处理。流水线寄存器用于存储每个阶段的中间结果,并在时钟上升沿时将结果传递给下一个阶段。 3. 接下来,需要对每个阶段进行详细的设计和实现。例如,在取指阶段(IF_stage),处理器从指令存储器中读取指令,并将其传递给下一个阶段。在译码阶段(ID_stage),处理器解码指令并确定需要执行的操作。在执行阶段(EX_stage),处理器执行指令的操作。在访存阶段(MEM_stage),处理器访问内存并处理相关数据。最后,在写回阶段(WB_stage),处理器将结果写回寄存器文件。 需要注意的是,五级流水线的设计需要考虑数据冒险和控制冒险等问题,以确保指令之间的依赖和顺序正确处理。为了解决这些问题,可以采用一些技术,如数据前移、静态预测等。 总结来说,RISC-V五级流水线的设计包括模块化划分、添加流水线寄存器以及详细设计和实现每个阶段的功能。这样可以提高处理器的效率和性能,实现指令的快速处理和执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值