挑战408——组成原理(26)——指令流水线

好像。。。。有段时间没有更新了吧。。

指令流水线

前面介绍的总线结构数据通路,单周期通路,多周期通路,多周期通路都只能串行执行指令,在串行的方式下,CPU总是执行完一条指令后才取出下一条指令执行。这样一来就不能充分利用执行部件的并行性。
假设一条指令的执行过程可以分为多个阶段(或者称之为过程),假设分为两段:取指令和执行指令。那么在串行的方式下,各个指令按顺序执行:
在这里插入图片描述
但是在并行下,指令可以这样执行:
在这里插入图片描述
这样,并行的方式大大的缩短了指令周期。
计算机种指令的处理过程可以分为以下的5个阶段:

  1. 取址(FI)
  2. 指令译码(DI)
  3. 计算操作数地址(CO)
  4. 取操作数(FO)
  5. 执行指令(CI)
  6. 写操作数(WO)

指令要采用线性流水线方式那么必须将指令分割成若干个独立的子任务,并且每个子任务需要由独立的功能部件完成。
我们通常使用时空图的表示方法,直观的描述流水线的工作过程。在时空图种,横坐标表示时间,也就是输入到流水线的各个任务在流水线种所经过的时间。当流水线种各流水段的执行时间都相等的时候,横坐标就可以被分割成相等长度的时间段。而纵坐标表示空间,对应各个执行部件。下面用时空图来描述一下串行执行和并行执行两种方式:
在串行的方式下
在这里插入图片描述
当t = 8 ∆t 的时候,执行了两条指令。虚线与I1围成的空白位置是未被利用的。
在并行方式下
在这里插入图片描述
此时,我们可以像俄罗斯方块那样移动I2,填补空缺。同样的,分析上图,当t = t4 的时候,I1刚刚好执行完毕,t1 = t5 的时候I2执行完毕,t = 8 ∆t 的时候,此时执行了5条指令。
由此可见,流水线的方式,成倍的提高了计算机的速度。但是这里注意,线性流水线能提高执行效率(即某段时间内能执行更多指令),但不能减少每个任务的执行时间(即图中的纵坐标)。

指令流水线的性能指标

衡量流水线性能的主要指标有吞吐率,加速比,效率。

  1. 吞吐率 :表示单位时间内流水线所完成的任务数量或者是输出的结果数量。
    在这里插入图片描述
    其中,n是任务数,Tk是处理完成n各任务所用的时间。一条k段线性流水线能在k + n - 1个时钟周期中完成n个任务,用∆t 表示时钟周期,那么实际的吞吐率为:
    在这里插入图片描述
    当n趋于无穷的时候,Tp趋于1/∆t。
  2. 加速比:完成一项任务,不适用流水线所用的时间与使用流水线所用的时间的比值。即:
    在这里插入图片描述
    即T0表示顺序执行,Tk表示流水执行,当各段执行时间相等的时候,则有:
    S = (kn∆t)/(k+n-1)∆t 即
    在这里插入图片描述
    易知,当n趋于无穷的时候,S的最大值为k。
  3. 效率:流水线上的设备利用率,在时空图上表现为:
    在这里插入图片描述
    若各段执行时间相等,那么分子便是n个任务i实际占有的有效面积。当n趋于无穷的时候,E的最大值为1/

流水线中的主要影响因素

流水线中存在一些相关(或者说冲突)的情况?它使得下一条指令无法在设计的时钟周期内执行。这些相关会降低流水线的性能。
目前主要的冲突有:资源冲突(结构相关),数据冲突(重点),控制冲突。
具体分析,见下篇。。。

一、 设计目标 设计目的: 设计一个含有36条指令的MIPS单周期处理器,并能将指令准确的执行并烧写到试验箱上来验证 设计初衷 1、理解MIPS指令结构,理解MIPS指令集中常用指令的功能和编码,学会对这些指令进行归纳分类。 2、了解熟悉MIPS体系中的处理器结构 3、熟悉并掌握单周期处理器CPU的原理和设计 4、进一步加强Verilog语言进行电路设计的能力 二、实验设备 1、装有xilinx ISE的计算机一台 2、LS-CPU-EXB-002教学系统实验箱一台 三、实验任务 1.、学习 MIPS 指令集,深入理解常用指令的功能和编码,并进行归纳确定处理器各部件的控制码,比如使用何种 ALU 运算,是否写寄存器堆等。 2、单周期 CPU 是指一条指令的所有操作在一个时钟周期内执行完。设计中所有寄存器和存储器都是异步读同步写的,即读出数据不需要时钟控制,但写入数据需时钟控制。 故单周期 CPU 的运作即:在一个时钟周期内,根据 PC 值从指令 ROM 中读出相应的指令,将指令译码后从寄存器堆中读出需要的操作数,送往 ALU 模块,ALU 模块运算得到结果。 如果是 store 指令,则 ALU 运算结果为数据存储的地址,就向数据 RAM 发出写请求,在下一个时钟上升沿真正写入到数据存储器。 如果是 load 指令,则 ALU 运算结果为数据存储的地址,根据该值从数据存 RAM 中读出数据,送往寄存器堆根据目的寄存器发出写请求,在下一个时钟上升沿真正写入到寄存器堆中。 如果非 load/store 操作,若有写寄存器堆的操作,则直接将 ALU 运算结果送往寄存器堆根据目的寄存器发出写请求,在下一个时钟上升沿真正写入到寄存器堆中。 如果是分支跳转指令,则是需要将结果写入到 pc 寄存器中的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值