自己动手写CPU之第七阶段(5)——流水线暂停机制的设计与实现

本文详细介绍了OpenMIPS处理器中流水线暂停机制的设计与实现,包括设计思路、实现方法以及CTRL模块的功能,重点阐述了如何通过CTRL模块控制各阶段暂停,确保多周期指令执行完毕。
摘要由CSDN通过智能技术生成

将陆续上传本人写的新书《自己动手写CPU》,今天是第28篇,我尽量每周四篇

China-pub的预售地址如下(有目录、内容简介、前言):

http://product.china-pub.com/3804025

亚马逊的预售地址如下,欢迎大家围观呵!

http://www.amazon.cn/dp/b00mqkrlg8/ref=cm_sw_r_si_dp_5kq8tb1gyhja4


7.5 流水线暂停机制的设计与实现

7.5.1 流水线暂停机制设计

      因为OpenMIPS设计乘累加、乘累减、除法指令在流水线执行阶段占用多个时钟周期,因此需要暂停流水线,以等待这些多周期指令执行完毕,一种直观的实现方法是:要暂停流水线,只需保持取指令地址PC的值不变,同时保持流水线各个阶段的寄存器(也就是IF/ID、ID/EX、EX/MEM、MEM/WB模块的输出)不变。

      OpenMIPS采用的是一种改进的方法:假如位于流水线第n阶段的指令需要多个时钟周期,进而请求流水线暂停,那么需保持取指令地址PC的值不变,同时保持流水线第n阶段、第n阶段之前的各个阶段的寄存器不变,而第n阶段后面的指令继续运行。比如:流水线执行阶段的指令请求流水线暂停,那么保持PC不变,同时保持取指、译码、执行阶段的寄存器不变,但是可以允许访存、回写阶段的指令继续运行。

      为此,设计添加CTRL模块,其作用是接收各个阶段传递过来的流水线暂停请求信号,从而控制流水线各个阶段的运行。

      为了实现流水线暂停机制,对系统结构做如图7-10所示的修改。

      CTRL模块的输入来自ID、EX模块的请求暂停信号stallreq,对于OpenMIPS教学版而言,只有译码、执行阶段可能会有暂停请求,取指、访存阶段都没有暂停请求,因为指令读取、数据存储器的读写操作都可以在一个时钟周期完成。 

      CTRL模块对暂停请求信号进行判断,然后输出流水线暂停信号stall。从图7-10中可知,stall输出到PC、IF/ID、ID/EX、EX/MEM、MEM/WB等模块,从而控制PC的值,以及流水线各个阶段的寄存器。


7.5.2 流水线暂停机制实现

 

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
流水线CPU是一种高效的处理器设计,可以同时执行多个指令。它将指令执行的不同阶段分开,每个阶段在不同的时钟周期内完成,从而提高了处理器的吞吐量和效率。 下面是流水线CPU的主要组成部分和设计实现: 1. 指令存储器:用于存储指令序列,流水线CPU会从指令存储器中按顺序取出指令。 2. 指令译码器:用于将指令转换为操作码和操作数,并将其传递给下一阶段。 3. 执行单元:用于执行指令的操作,例如算术运算、逻辑运算、内存读等。 4. 访存单元:用于读取和入内存数据。 5. 寄存器堆:用于存储CPU内部的寄存器数据,包括通用寄存器、程序计数器、状态寄存器等。 6. 控制单元:用于控制流水线各个阶段的操作,包括指令的分发、处理器状态的管理等。 流水线CPU设计实现需要考虑以下几个方面: 1. 流水线阶段划分:需要划分出合适的阶段,使得每个阶段的操作可以在一个时钟周期内完成,并且每个阶段之间的数据传输和控制操作是同步的。 2. 流水线的冒险和解决:流水线CPU可能会出现数据冒险、控制冒险和结构冒险等问题,需要采取一些技术手段来解决这些问题,例如前向传递、流水线暂停、乱序执行等。 3. 流水线的优化:可以采用一些优化技术来提高流水线CPU的性能,例如分支预测、超标量执行、动态调度等。 4. 流水线的测试和调试:流水线CPU的测试和调试比较困难,需要采用一些专门的工具和技术来进行验证和调试,例如仿真器、调试器等。 总之,流水线CPU是一种高效的处理器设计,可以提高处理器的吞吐量和效率,但是需要考虑许多细节和技术问题才能实现
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值