Search Images Play YouTube Gmail Drive Calendar Translate More »
Sign in
Screen reader users: click this link for accessible mode. Accessible mode has the same essential features but works better with your reader.

Patents

  1. Advanced Patent Search
Publication numberCN101894013 A
Publication typeApplication
Application numberCN 201010233616
Publication date24 Nov 2010
Filing date16 Jul 2010
Priority date16 Jul 2010
Also published asCN101894013B
Publication number201010233616.5, CN 101894013 A, CN 101894013A, CN 201010233616, CN-A-101894013, CN101894013 A, CN101894013A, CN201010233616, CN201010233616.5
Inventors余磊, 刘志勇, 张 浩, 范东睿
Applicant中国科学院计算技术研究所
Export CitationBiBTeX, EndNote, RefMan
External Links: SIPO, Espacenet
处理器内指令级流水线控制方法及其系统
CN 101894013 A
Abstract
本发明涉及处理器内指令级流水线控制方法和系统,方法包括:步骤1,初始化发射序号寄存器和写回序号寄存器初始值相同;步骤2,发射指令时,以发射序号寄存器的值为基础值,按指令在本次发射中的顺序,生成指令的发射序号,并在指令中携带所述发射序号;步骤3,指令发射完成后,更新发射序号寄存器的值;步骤4,指令进入功能部件被执行时,指令的发射序号保持不变;步骤5,写回指令时,以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序号和写回序号相同的指令的结果写回寄存器;步骤6,指令写回完成后,更新写回序号寄存器的值。本发明能够减少对硬件资源的消耗。
Claims(10)
  1. 一种处理器内指令级流水线控制方法,其特征在于,包括:步骤1,初始化发射序号寄存器和写回序号寄存器为相同初始值;步骤2,在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中携带所述发射序号;步骤3,在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射的最后一个指令的发射序号加n,n为预设常量;步骤4,指令进入功能部件被执行时,指令的发射序号保持不变;步骤5,在一个时钟周期内写回指令时,以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序号和写回序号相同的指令的结果写回寄存器;步骤6,在一个时钟周期的指令写回完成后,更新写回序号寄存器的值为写回的最后一个指令的发射序号加n,n为所述预设常量。
  2. 2.如权利要求1所述的处理器内指令级流水线控制方法,其特征在于, 所述处理器为多发射处理器,所述步骤2中以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生 成指令的发射序号进一步为步骤21,第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一个以后 将被发射的指令的发射序号为前一个将被发射的指令的发射序号加1。
  3. 3.如权利要求1所述的处理器内指令级流水线控制方法,其特征在于, 预设η的值为1,所述步骤3中更新发射序号寄存器的值为发射的最后一个指令的发射序号加η进一步为,步骤31,将发射序号寄存器的值加本次发射的指令的个数,获得加和,将发射序号寄存 器的值更新为所述加和。
  4. 4.如权利要求1所述的处理器内指令级流水线控制方法,其特征在于, 一个时钟周期中被写回的指令的个数为一个;所述步骤5进一步为,步骤41,确定本次的写回序号为写回序号寄存器的值,将发射序号和确定的写回序号 相同的指令的结果写回寄存器。
  5. 5.如权利要求1所述的处理器内指令级流水线控制方法,其特征在于, 所述处理器每个时钟周期允许多条指令写回;预设η的值为1 ;所述步骤5中以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数, 依序生成写回序号进一步为,步骤51,在一个时钟周期内写回指令时,确定第一条写回序号为所述写回序号寄存器 的值,确定第一条以后的写回序号为前一条写回序号加1,直至确定的写回序号的个数为允 许写回寄存器的指令的个数; 所述步骤6进一步为,步骤52,在一个时钟周期的指令写回完成后,将写回序号寄存器的值加写回的指令的个数,获得加和,将写回序号寄存器的值更新为所述加和。
  6. 6. 一种处理器内指令级流水线控制系统,包括获取指令的指令模块,对指令译码的译 码模块,将译码后指令发射的发射模块,执行发射的指令的功能部件,以及将执行结果写回 的写回模块,其特征在于,发射模块包括发射序号寄存器,写回模块包括写回序号寄存器,发射序号寄存器和写回序号寄存器的初始值相同;发射模块,还用于在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存器的 值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中携带 所述发射序号;在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射的最 后一个指令的发射序号加η,η为预设常量;功能部件,还用于在指令进入并被执行时,保存指令的发射序号不变; 写回模块,还用于在一个时钟周期内写回指令时,以写回序号寄存器的值为基础值,依 据允许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序 号和写回序号相同的指令的结果写回寄存器;在一个时钟周期的指令写回完成后,更新写 回序号寄存器的值为写回的最后一个指令的发射序号加η,η为所述预设常量。
  7. 7.如权利要求6所述的处理器内指令级流水线控制系统,其特征在于, 所述处理器为多发射处理器,所述发射模块在以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序, 生成指令的发射序号时进一步用于确定第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一个以后将被 发射的指令的发射序号为前一个将被发射的指令的发射序号加1。
  8. 8.如权利要求6所述的处理器内指令级流水线控制系统,其特征在于, 预设η的值为1,所述发射模块在更新发射序号寄存器的值为发射的最后一个指令的发射序号加η时进一步用于将发射序号寄存器的值加本次发射的指令的个数,获得加和,将发射序号寄存器的值 更新为所述加和。
  9. 9.如权利要求6所述的处理器内指令级流水线控制系统,其特征在于, 一个时钟周期中被写回的指令的个数为一个;所述写回模块在进行结果写回时进一步用于确定本次的写回序号为写回序号寄存器的值,将发射序号和确定的写回序号相同的指 令的结果写回寄存器。
  10. 10.如权利要求6所述的处理器内指令级流水线控制系统,其特征在于, 所述处理器每个时钟周期允许多条指令写回;预设η的值为1 ;所述写回模块在以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个 数,依序生成写回序号时进一步用于在一个时钟周期内写回指令时,确定第一条写回序号为所述写回序号寄存器的值,确 定第一条以后的写回序号为前一条写回序号加1,直至确定的写回序号的个数为允许写回 寄存器的指令的个数;所述所述写回模块在更新写回序号寄存器的值时进一步用于在一个时钟周期的指令写回完成后,将写回序号寄存器的值加写回的指令的个数,获 得加和,将写回序号寄存器的值更新为所述加和。
Description

处理器内指令级流水线控制方法及其系统

技术领域

[0001] 本发明涉及到处理器的指令按序发射和按序写回机制,涉及到基于指令发射序号 的指令相关性的解决方法。

背景技术

[0002] 在现代处理器设计中,处理器的性能提升主要通过提高处理器的主频来实现。然 而,随着片上集成的晶体管的数量越来越多,功耗和散热问题变得更加严重。单纯提高主频 的方法已经很难适应现在处理器的发展。在这种情况下,需要一种简单而有效的处理器流 水线控制方法来提高指令的执行效率。也就是说,用较少的硬件资源实现指令的流水线控 制,从而实现较高的指令吞吐率。

[0003] 流水线技术是指把一条指令的执行分成若干个阶段,每个阶段完成指令的一部分 功能。这样在多条指令同时执行的时候,多条指令的不同阶段可以同时执行。在实际中,指 令和指令之间可能存在着数据依赖关系。比如,一条指令的源操作数是前面一条指令的目 的操作数,这样就产生了写后读相关。流水线的控制方法必须能够检测到这样的相关关系, 然后采用一定方法来保证指令发射和写回时程序的正确性。

[0004] 流水线控制方法涉及到指令相关关系。处理器的硬件逻辑需要检测指令间的相关 关系,并且采取某种办法来解除或避免这样的相关关系。指令相关包括数据相关、控制相关 和结构相关。数据相关一般是指写后读(RAW,ReadAfter Write)相关,写后写(WAW,Write After Write)和读后写(WAR,Write After Read)相关。如果是按序发射的处理器,只存 在RAW和WAW ;如果是乱序发射的处理器还存在WAR的问题。如果存在指令相关,则相关的 指令就不能被发射出去。现有技术中,解决数据相关有两类方法:软件方法和硬件方法。软 件方法是编译器通过语义分析,尽可能不产生有相关的指令序列。编译器可以把一个循环 体内部的指令,一次展开多次,并进行合适的调度,这样就可以消除指令间的数据相关和控 制相关。超长指令字(VLIW,Very Long Instruction Word)也是依靠编译器来提高指令级 并行性。在超长指令字处理器上,选择同时发射的多条指令和相关性分析都是由编译器完 成的。因此,这可以大大简化硬件逻辑。同时发射的指令条数越多,处理器的性能就越高。

[0005] 寄存器重命名也是解决相关的方法。由于编译器可以看到的寄存器的个数是由指 令集所确定的,有时会出现逻辑寄存器不够用的情况,这时就会产生寄存器相关。这时可以 增加物理寄存器堆的个数来解决相关问题。

[0006] 硬件支持的动态指令调度是超标量处理器挖掘指令级并行的重要手段。IBM 360/91的浮点部件设计实现了本领域公知的Tomasulo算法,这为现代超标量处理器的设 计打下了基础。该算法增加了 3种新的机制:保留站、公共数据总线(CDB)和寄存器标签。 它的工作机制如下:如果存在可用的保留站就把指令发射到保留站中,如果这时源操作数 寄存器的值有效,就可以把指令分派到相应的功能部件。功能部件的结果总线把结果广播 到公共数据总线,保留站中需要该数据的指令将数据从CDB上锁存到本地锁存器。保留站 里每个操作数域有一个标签,如果标签为0,则表示操作数域是真实数据;如果标签不是0,则表示在等待其他已经分派出去的指令结果。

[0007] 指令结果可以旁路到要发射的指令,以提前取得操作数的结果。因为多发射和乱 序发射的原因,有些指令可以同时在结果总线产生结果,这时只有其中一部分指令可以写 入寄存器堆。如果正要发射的指令恰巧需要这些不能马上写回的结果,就会造成发射级的 停顿。因此,使用旁路可以使指令尽早发射。

[0008] 现有技术中,每条指令的执行时间不完全相同,有的指令时间长,有的指令时间 短。如果流水线前面的一条指令是一个长延迟指令,而后面一条指令是短延迟指令,这时为 了保证每条指令的按序提交,每条指令都需要标出自己的整个流水线中的次序信息。如果 不保证这个次序信息,则在后面短延迟的指令产生结果后,就提交结果,这样就不是按序提 交了。

发明内容

[0009] 为解决上述问题,本发明提供了处理器内指令级流水线控制方法及其系统,能够 减少对硬件资源的消耗。

[0010] 本发明公开了一种处理器内指令级流水线控制方法,包括:

[0011] 步骤1,初始化发射序号寄存器和写回序号寄存器为相同初始值;

[0012] 步骤2,在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存器的值为 基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中携带所述 发射序号;

[0013] 步骤3,在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射的最 后一个指令的发射序号加η,η为预设常量;

[0014] 步骤4,指令进入功能部件被执行时,指令的发射序号保持不变;

[0015] 步骤5,在一个时钟周期内写回指令时,以写回序号寄存器的值为基础值,依据允 许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序号和 写回序号相同的指令的结果写回寄存器;

[0016] 步骤6,在一个时钟周期的指令写回完成后,更新写回序号寄存器的值为写回的最 后一个指令的发射序号加η,η为所述预设常量。

[0017] 所述处理器为多发射处理器,

[0018] 所述步骤2中以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺 序,生成指令的发射序号进一步为

[0019] 步骤21,第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一个 以后将被发射的指令的发射序号为前一个将被发射的指令的发射序号加1。

[0020] 预设η的值为1,

[0021] 所述步骤3中更新发射序号寄存器的值为发射的最后一个指令的发射序号加η进 一步为,

[0022] 步骤31,将发射序号寄存器的值加本次发射的指令的个数,获得加和,将发射序号 寄存器的值更新为所述加和。

[0023] 一个时钟周期中被写回的指令的个数为一个;

[0024] 所述步骤5进一步为,

6[0025] 步骤41,确定本次的写回序号为写回序号寄存器的值,将发射序号和确定的写回 序号相同的指令的结果写回寄存器。

[0026] 所述处理器每个时钟周期允许多条指令写回;预设η的值为1 ;

[0027] 所述步骤5中以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个 数,依序生成写回序号进一步为,

[0028] 步骤51,在一个时钟周期内写回指令时,确定第一条写回序号为所述写回序号寄 存器的值,确定第一条以后的写回序号为前一条写回序号加1,直至确定的写回序号的个数 为允许写回寄存器的指令的个数;

[0029] 所述步骤6进一步为,

[0030] 步骤52,在一个时钟周期的指令写回完成后,将写回序号寄存器的值加写回的指 令的个数,获得加和,将写回序号寄存器的值更新为所述加和。

[0031] 本发明还公开了一种处理器内指令级流水线控制系统,包括获取指令的指令模 块,对指令译码的译码模块,将译码后指令发射的发射模块,执行发射的指令的功能部件, 以及将执行结果写回的写回模块,

[0032] 发射模块包括发射序号寄存器,写回模块包括写回序号寄存器,

[0033] 发射序号寄存器和写回序号寄存器的初始值相同;

[0034] 发射模块,还用于在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存 器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中 携带所述发射序号;在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射 的最后一个指令的发射序号加η,η为预设常量;

[0035] 功能部件,还用于在指令进入并被执行时,保存指令的发射序号不变;

[0036] 写回模块,还用于在一个时钟周期内写回指令时,以写回序号寄存器的值为基础 值,依据允许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将 发射序号和写回序号相同的指令的结果写回寄存器;在一个时钟周期的指令写回完成后, 更新写回序号寄存器的值为写回的最后一个指令的发射序号加η,η为所述预设常量。

[0037] 所述处理器为多发射处理器,

[0038] 所述发射模块在以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺 序,生成指令的发射序号时进一步用于

[0039] 确定第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一个以后 将被发射的指令的发射序号为前一个将被发射的指令的发射序号加1。

[0040] 预设η的值为1,

[0041] 所述发射模块在更新发射序号寄存器的值为发射的最后一个指令的发射序号加η 时进一步用于

[0042] 将发射序号寄存器的值加本次发射的指令的个数,获得加和,将发射序号寄存器 的值更新为所述加和。

[0043] 一个时钟周期中被写回的指令的个数为一个;

[0044] 所述写回模块在进行结果写回时进一步用于

[0045] 确定本次的写回序号为写回序号寄存器的值,将发射序号和确定的写回序号相同 的指令的结果写回寄存器。[0046] 所述处理器每个时钟周期允许多条指令写回;预设η的值为1 ;

[0047] 所述写回模块在以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的 个数,依序生成写回序号时进一步用于

[0048] 在一个时钟周期内写回指令时,确定第一条写回序号为所述写回序号寄存器的 值,确定第一条以后的写回序号为前一条写回序号加1,直至确定的写回序号的个数为允许 写回寄存器的指令的个数;

[0049] 所述所述写回模块在更新写回序号寄存器的值时进一步用于

[0050] 在一个时钟周期的指令写回完成后,将写回序号寄存器的值加写回的指令的个 数,获得加和,将写回序号寄存器的值更新为所述加和。

[0051] 本发明的有益效果在于,为多发射的超标量的处理器提供了简洁的操作方法;现 有技术中多发射反射处理器使用保留站和再定序缓冲来保持指令发射和写回的次序关系, 保留站和再定序缓冲的实现复杂,消耗的硬件资源多,在片上的处理器数目越来越多的情 况下,现有技术中的该实现方式不适用;本发明中采用指令发射序号寄存器和写回序号寄 存器来保证次序关系;这种实现方法控制简单,硬件开销小,更适合片上大规模集成,可扩 展性好。

附图说明

[0052] 图1是实施例中处理器的流水线工作过程的示意图;

[0053] 图2是实施例中处理器内部指令发射级和结果写回级的示意图;

[0054] 图3是实施例中处理器内部的旁路逻辑示意图;

[0055] 图4是实施例的寄存器堆的逻辑示意图。

[0056] 图5是实施例中处理器按序写回方法的示意图。

[0057] 图6是本发明处理器内指令级流水线控制方法的流程图。

具体实施方式

[0058] 下面结合附图对本发明的方法做进一步的说明。

[0059] 本发明的处理器内指令级流水线控制方法如图6所示。

[0060] 步骤S100,初始化发射序号寄存器和写回序号寄存器为相同初始值。

[0061] 步骤S200,在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存器的值 为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中携带所 述发射序号。

[0062] 在现有技术的指令级流水线上,当一条指令的源操作数已经都准备好,并且功能 部件有空闲时,则可以发射当前指令。本发明中这条指令在发射时携带上依据发射序号寄 存器生成的发射序号,发射序号表明发射的顺序。

[0063] 以发射序号寄存器的值为基础值表明以当前的发射序号寄存器的值为本次发射 序号生成的基准。

[0064] 步骤S300,在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射 的最后一个指令的发射序号加η,η为预设常量。

[0065] 步骤S400,指令进入功能部件被执行时,指令的发射序号保持不变。[0066] 步骤S500,在一个时钟周期内写回指令时,以写回序号寄存器的值为基础值,依据 允许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序号 和写回序号相同的指令的结果写回寄存器。

[0067] 在现有技术的指令级流水线上,当指令在功能部件里执行完成后,从所有功能部 件的结果总线上选择需要写回的指令。本发明中,如果结果总线上指令的发射序号等于在 写回级依据写回序号寄存器的值生成的写回序号,则这条指令就是当前需要写回的指令。

[0068] 因为按写回序号由小到大顺序,将发射序号和写回序号相同的指令的结果写回寄 存器,所以在之前的执行结果没有生成的时候,即使按写回序号排在后面的执行结果已经 生成,也需要等待之前的执行结果生成写回后才能够写回在后的执行结果。

[0069] 步骤S600,在一个时钟周期的指令写回完成后,更新写回序号寄存器的值为写回 的最后一个指令的发射序号加η,η为所述预设常量。

[0070] 在一个具体实施方式中,处理器为多发射处理器。

[0071] 所述步骤S200中以发射序号寄存器的值为基础值,按所述指令在本次发射中的 顺序,生成指令的发射序号进一步如下所述。

[0072] 步骤S210,第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一 个以后将被发射的指令的发射序号为前一个将被发射的指令的发射序号加1。

[0073] 处理器为多发射处理器表明每次发射两条以上的指令.

[0074] 发射宽度为m,发射序号寄存器的值是X,则第一条将要发射的指令携带序号信 息X,第二条将要发射的指令需携带序号信息X+1,第三条将要发射的指令需携带序号信息 χ+2。由此类推,最后一条将要发射的指令需携带序号信息x+m-1。

[0075] 在一具体实施方式中,预设η的值为1。

[0076] 步骤S300中更新发射序号寄存器的值为发射的最后一个指令的发射序号加η进 一步为将发射序号寄存器的值加本次发射的指令的个数获得加和,将发射序号寄存器的值 更新为所述加和。

[0077] 在发射出一条指令后,发射序号寄存器需增加1。

[0078] 如果该处理器是多发射处理器,每次发射两条以上的指令,每个时钟周期发射的 指令数为m,则在指令发射后,发射序号寄存器的值增加m。

[0079] 在一具体实施方式中,一个时钟周期中被写回的指令的个数为一个。

[0080] 步骤S500进一步为确定本次的写回序号为写回序号寄存器的值,将发射序号和 确定的写回序号相同的指令的结果写回寄存器。

[0081] 在一具体实施方式中,处理器每个时钟周期允许多条指令写回,预设η的值为1。

[0082] 步骤S500中以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个 数,依序生成写回序号进一步为在一个时钟周期内写回指令时,确定第一条写回序号为所 述写回序号寄存器的值,确定第一条以后的写回序号为前一条写回序号加1,直至确定的写 回序号的个数为允许写回寄存器的指令的个数。

[0083] 该处理器每个时钟周期允许多条指令写回,设允许m条指令写回寄存器,则在结 果总线选择需要写回的指令时,按如下方法操作。

[0084] 当前写回寄存器的值为y,则第一条可以写回的指令序号是y,第二条可以写回的 指令序号是y+Ι,第三条是y+2,依此类推,最后一条可以写回的指令的序号是y+m-1。但此

9时并不能保证这m条指令都已经产生结果。已经有w条连续指令产生结果,并且他们的指 令序号分别是ι, y+1,y+2,... , y+w-1,这时可以在一个时钟周期内写回这w条指令。如果 指令序号为y的指令还没有产生结果,但是后续的w-1条指令已经产生结果,此时,后续的 w-1条指令必须等待指令序号为y的这条指令产生结果。

[0085] 所述步骤S600进一步为在一个时钟周期的指令写回完成后,将写回序号寄存器 的值加写回的指令的个数获得加和,将写回序号寄存器的值更新为所述加和。

[0086] 该处理器是多发射处理器,当同时有w(w> 1)条指令同时写回时,写回寄存器的 值增加W。

[0087] 本发明的一具体实施例如下所述。

[0088] 实施例中处理器的流水线工作过程如图1所示。处理器的内部流水线分为5部分, 分别是取指令 101 (IF, Instruction Fetch),指令译码 102 (ID, Instruction Decode),指令 发射 103 (IS,Issue),指令执行 104 (EX,Execution)和结果写回 105 (WB,Write Back)。在 现有技术中的流水线里每条指令都要经过5级,如果指令间不存在控制相关和数据相关, 在指令流水线开始稳定后,每个时钟周期得到一个结果。对于现代超标量处理器,由于处理 器的功能部件一般分为定点部件、浮点部件和访存部件,每个部件执行的执行周期也不一 样。具体实施例中,某个处理器有3个执行的部件,如图IEX的第一行、第二行、第三行,每 一行对应一个执行的部件,每个部件的执行周期分别是1个时钟周期,3个时钟周期和4个 时钟周期。

[0089] 如图1所示,如果一条指令已经发射出去了,对于定点指令在1个时钟周期后可以 得到结果;对于浮点指令在第3个时钟周期后得到结果;对于访存指令在第4个时钟周期 后得到结果。得到结果后会在下一个周期写回寄存器堆。

[0090] 这里取指令101是一个流水级,指令译码102是一个流水级,指令发射103是一个 流水级,指令执行104按照不同的功能部件,流水级的级数有所不同,结果写回105占一个 流水级。

[0091] 本发明在指令发射103流水级和结果写回105流水级使用指令序号的方法来使指 令按序写回。指令序号包括发射序号和写回序号。

[0092] 本实施例中使用一个按序双发射的处理器。

[0093] 指令发射103流水级和结果写回105流水级的流程图2所示。其中,译码模块202 在一个时钟周期内给发射模块203的发射队列送出两条指令。发射队列中如果有两个以上 的空项,译码模块202的指令就可以进入发射队列,如果没有,则发射模块203向译码模块 202送出发射队列满的信号。译码模块202收到队列满的信号,则在下一个时钟周期继续向 发射队列送出两条指令。

[0094] 处理器内部为通用寄存器和浮点寄存器设置一个寄存器状态表416。在这个寄存 器状态表内,每个通用寄存器和浮点寄存器都有一个有效位。这个有效位为1时,则表明在 该寄存器的值为可用;这个有效位为0时,则说明该寄存器的值不可用,图2中,当前正有一 条目的寄存器号为该寄存器的指令已经发射到功能部件204,但是并没有写回寄存器。

[0095] 本实施例中,当寄存器的值不在寄存器堆415的时候,为了加速指令的发射,使用 旁路(forward)技术从功能部件204的结果总线得到最新值,再送往发射队列。如果通过 旁路可以得到寄存器所需要的值,那么源操作数就准备好了。如果有某个操作数没有准备

10好,则该条指令不能发射。不能发射的指令就缓存在发射队列里,直到发射条件满足才可以 发射。

[0096] 发射模块203根据发射队头的两条指令的源寄存器号去查询寄存器状态表。如果 所有源寄存器号的值都准备好或者通过旁路可以得到最新的值,并且功能部件204这时可 以接受新的指令,则可以发射这两条指令。

[0097] 当功能部件204里含有当前没有写回的指令结果的时候,功能部件204就有可能 发生堵塞。这时,功能部件204就不能接收发射流水级送来的指令。

[0098] 本实施例中,发射级的发射总线有两条,也就是说,每个时钟周期最多可以发射两 条指令。而对于功能部件204,功能部件204 —共分为8组,每组都完成一类指令。这8组 功能部件204被划分成两大组,每个大组接受来自两条发射总线的指令。这里,每条指令的 分组工作由译码模块202完成。分组信息分别由译码模块202产生后送给了发射模块203, 发射模块203依靠分组信息将指令发送给相应的功能部件204大组。

[0099] 发射模块203在发射指令时,需要维护一个发射序号寄存器,这个寄存器存储了 指令在发射时的顺序信息。如果当前只能发射一条指令,则下一个时钟周期这个寄存器就 加1 ;如果当前能发射两条指令,则在下一个时钟周期这个寄存器加2。

[0100] 由于本实施例的该处理器结构是顺序多发射,只需要处理写后读(RAW,Read After Write)相关和写后写(WAW,Write After Write)相关。对于RAW相关的判断是:如 果不能够得到有效寄存器的值,这里包括在寄存器状态表里对应表项的valid位无效和结 果总线上对应的值无效。对于WAW相关的判断是:这里是指当寄存器状态表里对应表项的 valid位无效。对于这两种相关,采取不发射相关指令的方法。

[0101] 为了加速指令的执行,为每条结果总线都增加了旁路(forward)逻辑305,如图3。 在图3中,每条要发射的指令都需要使用旁路逻辑去查询每条结果总线上是否有相应寄存 器的值已经得到。如果9条结果总线上有1条结果总线上的值正好是需要的寄存器的值, 那么表明旁路成功。如果没有1条结果总线上能找匹配的寄存器的值,那么旁路失败。每 条指令一般有2-3个源寄存器,每个源寄存器都需要经过一个旁路逻辑去查询是否有需要 的值在结果总线上。在图3中,src 301代表源寄存器号,resbusl-9302代表9条结果总 线,fwd_valid 303表明旁路是否成功,fwd_value 304代表旁路得到的寄存器的值。

[0102] 寄存器堆(regfile) —共有64项,每项是一个64位的寄存器。前32个用于定点 寄存器,后32个用于浮点寄存器。由于有些指令的源寄存器号有3个,如同时发射两条含 有3个源寄存器号的指令,则寄存器堆最多需要6个读端口。每个时钟周期发射两条指令, 必然要求在写回流水级也能写回两条指令。这就要求寄存器堆写端口是2个。寄存器堆有 6个读端口和2个写端口。

[0103] 图4是寄存器堆415的示意图。其中在输入端有:clock 401为时钟信号,reset 402是复位信号,readl_addrl-3403是第1条要发射的指令的3个读地址信号,read2_ addrl-3404是第2条要发射的指令的3个读地址信号。wr_addrl 405和wr_addr2 406是 写回流水级的2个写地址信号。Wr_enl 407和Wr_en2 408是写回流水级的2个写使能信 号。在输出端,readldatal 409是第一条指令的第一个源操作数的值;readl_data2 410 是第一条指令的第二个源操作数的值;readl_data3 411是第一条指令的第三个源操作数 的值;read2_datal 412是第二条指令的第一个源操作数的值;read2_data2 413是第一条指令的第二个源操作数的值;read2_data3 414是第一条指令的第三个源操作数的值。

[0104] 图5描述了一个顺序双发射处理器的按序写回机制。指令在发射模块203准备发 射时,需要携带由发射序号寄存器(iSSue_id_reg)2031指明的发射序号。发射总线有2条, 分别是 issue_busl 502 和 issue_bus2 503。在发射总线 issue_busl 502 和 issue_bus2 503里分别含有指令的序号idl和id2。功能部件204有9条结果总线,每条结果总线上都 含有一个指令序号。写回模块205根据写回序号寄存器2051选择需要写回的2条结果总 线。

[0105] 实施例中,本发明的处理器内指令级流水线控制方法如下所述。

[0106] 步骤S701,对所用的控制寄存器初始化。

[0107] 在处理器发射级设置一个发射序号寄存器,这个寄存器用来记录当前将要发射的 指令的序号。在处理器写回级设置一个写回序号寄存器,这个寄存器用来选择当前要写回 的指令,其初始值与发射序号寄存器的值相同。这个两个寄存器的位宽设置为5位,即指令 序号从0到31。这两个寄存器的位宽大小需要使当前功能部件流水线里的所有指令都具有 唯一的指令编号。当指令序号为31时,如果再增加1,则变为0。

[0108] 步骤S702,指令发射时,指令需携带发射序号进入功能部件。

[0109] 当一条指令的源操作数已经都准备好,并且功能部件也有空闲,这时可以发射当 前指令。假设当前的指令发射序号是0,下面的步骤也遵循此假设。被发发射的指令需要携 带这个发射序号为0的信息,然后再进入功能部件。

[0110] 步骤S703,该处理器是双发射的,每次最多发射两条指令。第一条指令的发射序号 为0,第二条指令的发射序号为1。

[0111] 步骤S704,发射指令,并更新发射序号寄存器。

[0112] 如果当前时钟周期内只发射了一条指令,则发射序号寄存器增加1,其当前值就由 0变为1。

[0113] 如果当前时钟周期内发射了两条指令,则发射序号寄存器增加2,其当前值就由0 变为2。

[0114] 如果当前时钟周期只发射了一条指令,那么在功能部件流水级里的指令序号为1。 如果发射了两条指令,那么在功能部件流水级里的指令序号为2。

[0115] 步骤S704,当发射序号为0的指令执行完成的时候,功能部件需要根据写回寄存 器的值来确定哪条指令是将要写回的指令。此时,写回寄存器的值为0。因此,发射序号为 0的指令被选中为当前需要写回的指令。

[0116] 如果发射序号为0和1的指令都已经得到了执行结果,那么在一个时钟周期内这 两条指令都可以写回。如果发射序号为1的指令已经得到执行结果,但是此时发射序号为 0的指令还没有得到执行结果,那么发射序号为1的指令也不能写回。

[0117] 步骤S705,更新写回序号寄存器。

[0118] 当只有一条指令写回时,写回序号寄存器的值需增加1。如果同时有两条指令能够 写回,则写回序号寄存器的值增加2。

[0119] 本发明处理器内指令级流水线控制系统,包括获取指令的指令模块,对指令译码 的译码模块,将译码后指令发射的发射模块,执行发射的指令的功能部件,以及将执行结果 写回的写回模块,发射模块包括发射序号寄存器,写回模块包括写回序号寄存器,[0120] 发射序号寄存器和写回序号寄存器的初始值相同;

[0121] 发射模块,还用于在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存 器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中 携带所述发射序号;在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射 的最后一个指令的发射序号加η,η为预设常量;

[0122] 功能部件,还用于在指令进入并被执行时,保存指令的发射序号不变;

[0123] 写回模块,还用于在一个时钟周期内写回指令时,以写回序号寄存器的值为基础 值,依据允许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将 发射序号和写回序号相同的指令的结果写回寄存器;在一个时钟周期的指令写回完成后, 更新写回序号寄存器的值为写回的最后一个指令的发射序号加η,η为所述预设常量。

[0124] 在一具体实施方式中,所述处理器为多发射处理器,

[0125] 所述发射模块在以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺 序,生成指令的发射序号时进一步用于

[0126] 确定第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一个以后 将被发射的指令的发射序号为前一个将被发射的指令的发射序号加1。

[0127] 在一具体实施方式中,预设η的值为1,

[0128] 所述发射模块在更新发射序号寄存器的值为发射的最后一个指令的发射序号加η 时进一步用于

[0129] 将发射序号寄存器的值加本次发射的指令的个数,获得加和,将发射序号寄存器 的值更新为所述加和。

[0130] 在一具体实施方式中,一个时钟周期中被写回的指令的个数为一个; [0131 ] 所述写回模块在进行结果写回时进一步用于

[0132] 确定本次的写回序号为写回序号寄存器的值,将发射序号和确定的写回序号相同 的指令的结果写回寄存器。

[0133] 在一具体实施方式中,所述处理器每个时钟周期允许多条指令写回;预设η的值 为1 ;

[0134] 所述写回模块在以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的 个数,依序生成写回序号时进一步用于

[0135] 在一个时钟周期内写回指令时,确定第一条写回序号为所述写回序号寄存器的 值,确定第一条以后的写回序号为前一条写回序号加1,直至确定的写回序号的个数为允许 写回寄存器的指令的个数;

[0136] 所述所述写回模块在更新写回序号寄存器的值时进一步用于

[0137] 在一个时钟周期的指令写回完成后,将写回序号寄存器的值加写回的指令的个 数,获得加和,将写回序号寄存器的值更新为所述加和。

[0138] 本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还 可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由 权利要求书的范围来确定的。

Patent Citations
Cited PatentFiling datePublication dateApplicantTitle
CN1308274A *8 Feb 200115 Aug 2001斯罗扬有限公司在处理器中传送指令结果及处理器的编译方法
CN101211256A *29 Dec 20062 Jul 2008上海贝岭股份有限公司一种专用双流水线risc指令系统及其操作方法
JP2008299729A * Title not available
Referenced by
Citing PatentFiling datePublication dateApplicantTitle
CN102508635A *19 Oct 201120 Jun 2012中国科学院声学研究所一种处理器装置及其循环处理方法
CN102508635B19 Oct 20118 Oct 2014中国科学院声学研究所一种处理器装置及其循环处理方法
CN103207776A *11 Mar 201317 Jul 2013浙江大学一种gene乱序发射处理器内核
CN103207776B *11 Mar 201315 Jul 2015浙江大学一种gene乱序发射处理器内核
Classifications
International ClassificationG06F9/38
Legal Events
DateCodeEventDescription
24 Nov 2010C06Publication
5 Jan 2011C10Entry into substantive examination
31 Jul 2013C14Grant of patent or utility model