计算机毕业论文-CPU中指令流水线技术研究(5)

2018-12-20 23:07

第三章 指令流水线设计

21

由此我们可以看到,时钟限制最终决定了流水线的深度,除了这一限制外,如果考虑价格,即流水线的费用开销,最佳设计通常也不会采用最大的流水线深度。在流水线系统的硬件设计中,必须考虑价格和性能的权衡。一般来说,流水线的价格相对于流水线的深度成线性增长。

流水线深度一直是影响处理器效率的重要因素,流水线深度的增加可以让处理器时钟频率进一步提高,但随着流水线深度的增长带来的处理器的单周期执行效率降低、发热量上升,同时容易产生分支预测等问题反面影响也会加剧,因此流水线长度的尺度把握一直是处理器设计中的一个重要核心问题。在设计流水线,要综合各方面的因素,根据最佳性价比的要求来选择流水线的最佳段数。

3.3 流水线处理器设计

流水线处理器设计中的主要问题就是缩小实际情况与理想假设之间的差异。所有关于流水线处理器的设计技术,都可以看作是为解决这三个挑战而进行的努力。

3.3.1 保持流水段均衡

要流水化的运算就是每个指令周期所要进行的工作。一个典型的指令周期可以根据功能划分成以下5个基本分量:

1. 取指(IF,Instruction fetch) 2. 译码(ID,Instruction decode) 3. 取操作数(OF,Operand(ds) fetch) 4. 执行(EX,Instruction execution) 5. 存储(OS,Operand store)

典型的指令周期从指令的取指开始,然后进行译码,以决定这条指令完成什么操作。一条指令通常带有一个或者多个操作数,这些操作数存放在寄存器或者存储器中,这取决于所使用的寻址方式。一旦所需要的错作数已准备好,就可以

22

CPU中指令流水线技术研究

执行这条指令所规定的操作。将执行所产生的结果存储起来之后,指令周期就算结束了。

分割指令周期的一种很自然的方法就是按照5个基本运算分量来划分,即将每一个运算分量对应到一个流水段,从而得到一个5级指令流水线,我们称这条流水线为基本指令流水线,简称GNR流水线。在GNR流水线中,逻辑指令周期将映射到5个物理机器周期中。机器周期与指令周期之比为5,这个值反应了流水化的程度以及流水段的粒度。

量化流水段的目的是将指令周期分割到均衡的流水段中,以尽量减少内部碎片的数目。量化流水段可以从自然的功能划分开始。例如5个基本运算分量。多个延迟较小的分量可以合并到一个新的分量,以获得更均衡化的流水线。另外一种均衡流水线的方法则相反,不是将具有较短延迟的分量合并起来,而是将一个延迟比较长的运算分量分割成多个延迟较短的分量。该方法以延迟较短的分量为参考,将长延迟的运算分量分割成更小的分量,使得各个分量的延迟与参考分量的延迟差不多。这将导致机器周期的粒度更细,流水化的程度更高。

在具体进行指令流水线设计的时候,这两种方法可以结合起来使用。不管在什么情况下,量化流水段的目标都是尽量减小内部碎片的开销。

3.3.2 统一指令类型

第二条流水线理想假设则要求流水线要尽量反复进行同样的运算。对于大多数指令流水线, 重复完成相同运算的理想假设并不成立。指令流水线重复处理的指令具有不同的指令类型。虽然指令周期不断重复,但每次可能处理的是不同类型的指令。不同的指令类型有不同的资源需求,并且各个运算分量的顺序也可能不一样。指令流水线要求能满足不同的需求,必须提供所有指令类型所需要的所有运算分量的超集。单独一种指令类型可能不需要流水线中的所有流水段。对于单独一种指令类型,不需要的流水段成为某种形式的失效或者开销,即外部碎片。统一指令类型的目的,就是尽量减少所有指令类型的外部碎片。

要完成一次运算,计算机必须完成一下三个基本任务: 1. 算术操作 2. 数据移动

第三章 指令流水线设计

23

3. 指令定序

算术操作包括对指定的操作数执行算术合逻辑运算,这是整个运算中最突出的部分,所以经常和整个运算等同起来。一个处理器能够支持大量的算术操作类型。数据移动负责将操作数和结果在存储地址之间进行移动。通常存储器地址是分层次的并有专门的指令来进行数据移动。指令定序负责指令顺序的确定。通常一个程序中的运算包含很多条指令,通过执行一个指令序列来完成所需要的运算。这个指令序列,或者叫程序流,可以由指令自身来确定。

如何将这三个基本任务分派给ISA中的各种指令,是指令集实际中的关键问题。受RISC体系结果的影响,现在的大多数指令集体系结构都有一些共同的特征。这些体系结果包括Hewlett-Packard的Precision体系结构,IBM的Power体系结构,IBM/Motorola的PowerPC体系结构,还有Digital的Alpha体系结构。这些现代ISA倾向于采用定长指令、正交的指令格式、load/store型体系结构和简单的寻址模式。这些体系结构中的大多数都能与指令流水线很好的协调起来。

在一个典型的现代RISC体系结构中,指令集采用一种专门的指令类型来完成三个基本任务中的一个,也就是说,每一种指令类型只完成三个基本任务中的一个。根据三个基本任务,可以将指令分成三种类型:

1. ALU指令 完成算术和逻辑运算

2. Load/store指令 完成数据在寄存器及存储器间的移动 3. 分支指令 控制执行指令的顺序

ALU指令所执行的算术逻辑操作严格地针对寄存器操作数进行,只有load和store指令能访问数据存储器。Load/store指令和分支指令都采用比较简单的寻址模式,通常只支持带偏移量的寄存器间接寻址模式。对于分支指令,还支持PC相对寻址。在下面列出关于前两种指令类型的详细规范,其中假设使用了指令cache(I-cache)和数据cache(D-cache)。

比较表3.1与表3.1中的两种主要指令类型规范,我们可以看到,两种指令类型的初始化分量比较类似,然而后面的分量有些差异。这些语意上的差异将导致不同的资源需求。

24

CPU中指令流水线技术研究

基本运算分量 IF ID OF EX OS ALU指令类型 -取指令(访问I-cache) -解码指令 -访问寄存器文件 -执行ALU操作 -回写寄存器文件 表3.1 ALU指令类型规范

基本运算分量 IF ID OF Load指令 -取指令(访问I-cache) -解码指令 store指令 -取指令(访问I-cache) -解码指令 -访问寄存器文件(基地址) -访问FP寄存器文件 -生成有效地址 (基地址+偏移量) -访问(读)内存 (访问D-cache) (寄存器操作数及基地址) EX OS - -回写寄存器文件 - -生成有效地址 (基地址+偏移量) -访问(写)内存 (访问D-cache) 表3.2 Load/store指令类型规范

统一不同指令类型主要是将不同资源需求有效的整合到一条指令流水线中去,使得这条流水线适合于所有的指令类型。整合的目标是,尽量减少流水线所需要的资源总数,同时尽量提高流水线中所有资源的利用率。通常,资源的整合过程包含以下三个步骤。

1. 分析每种指令类型的运算分量序列,确定相应的资源需求。

2. 找出指令类型之间的共性,合并相同的运算分量,已使用相同的流水段。

第三章 指令流水线设计

25

3. 如果在不违背指令语意的情况下存在一定的灵活性,可以改变或者重新排列分量的顺序,以便进一步的整合。

可以将这一过程应用到表3.1和表3.2中。ALU,load,store指令类型的规范总结如图3.3所示。现在我们由上至下实施统一的过程,检查3个分量的序列合要求提供支持的硬件资源。这个过程产生了指令流水线各段的定义。

ALU LOAD STORE 取指令 取指令 取指令 更新PC 更新PC 更新PC IF 解码 解码 解码 ID 读寄存器 读寄存器 读寄存器 RD ALU.Op 生成地址 生成地址 ALU 读内存 写内存 MEM 写寄存器 写寄存器 WB 图3.3 ALU,load,store指令类型的规范总结

所有3种指令类型都有相同的IF和ID分量,因此,这两个运算分量可以很容易的合并起来,并用来定义流水线的前两个段,即IF和ID段,从而完成取指和译码工作。

所有3种指令类型的OF分量都要读寄存器文件。ALU指令访问两个寄存器并且获得寄存器操作数;load指令访问一个寄存器并获得地址;store指令访问一个寄存器并且获得操作数,访问另外一个寄存器以获得基地址。在3中情况下都要访问一个或者两个寄存器,这些相似的分量可以合并到流水线的第三段,成RD段并从寄存器文件读取最多两个寄存器操作数。因此寄存器文件在每个时钟周期内必须支持两个独立的并行操作数。

ALU指令要求有一个ALU功能单元来完成必要的算术逻辑运算。虽然load,store指令不需要执行这样的操作,但是他们需要生成有效的地址来访存。可以看出,地址生成可以由ALU功能单元来完成。因此,这些分量可以合并到流


计算机毕业论文-CPU中指令流水线技术研究(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:弹簧操作机构

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: