CN1234066C - 基于操作队列复用的指令流水线系统和方法 - Google Patents
基于操作队列复用的指令流水线系统和方法 Download PDFInfo
- Publication number
- CN1234066C CN1234066C CN 01141495 CN01141495A CN1234066C CN 1234066 C CN1234066 C CN 1234066C CN 01141495 CN01141495 CN 01141495 CN 01141495 A CN01141495 A CN 01141495A CN 1234066 C CN1234066 C CN 1234066C
- Authority
- CN
- China
- Prior art keywords
- instruction
- register
- result
- operation queue
- queue
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Landscapes
- Advance Control (AREA)
Abstract
一种基于操作队列复用的指令流水线系统,包括:取指部件,用于取出指令;译码部件,对取出的指令进行译码,并按指令在程序中出现的先后次序把译码后的指令(称为操作)送到操作队列;操作队列,按次序根据操作的类型把操作发射到相应的保留站,并按次序结束运算结果已经写回的指令;保留站,对发射来的操作进行运算,把运算结果送回到结果总线并写回到操作队列;寄存器,在结束指令时,接收由操作队列依照指令进出操作队列的次序。本发明通过操作队列的复用实现指令的动态调度,减少控制逻辑,从而提高流水线效率,进而提高微处理器的性能。
Description
技术领域
本发明涉及微处理器体系结构,特别涉及一种微处理器的流水线系统。
技术背景
指令流水线技术是现代处理器的核心技术。处理器的基本工作流程是周而复始地取出和执行指令。流水线技术的基本思想是把取出和执行指令这一重复过程分解为若干子过程,每个过程可以与其它子过程同时进行。例如,可以把指令执行过程简单地划分为四个子过程(即四个阶段):取指,译码,执行和写回,顺序地完成这些阶段合在一起构成了一条指令流水线。流水线处理器允许不同部件同时执行不同指令的不同阶段的工作,使得处理器能够并行地执行,从而节省时间,提高速度。
为了提高处理器中指令执行的并行度,现代微处理器大都采用动态调度技术,即允许处理器改变指令的发送和执行的次序,以克服相关性,增加并行性。为了实现指令的动态调度,通常还需要寄存器重命名和操作队列等技术支持。
寄存器重命名技术的基本思想是允许处理器动态地分配寄存器,用于解决由于指令乱序执行而产生的寄存器冲突,操作队列一般多用于缓冲准备好用于乱序执行的指令。
在今天的计算机微处理器设计中,随着对机器性能要求的不断提高,对流水线效率的要求也越来越高,流水线的设计也越来越复杂。SGI/MIPS的MIPS系列微处理器是与本发明最为接近的。其代表产品是R4000和R10000。下面以它们的流水线为例,分析其优劣,进而阐明本发明的优点所在。
MIPS R4000采用的是静态流水方式,共分为8个阶段,分别是取指1(IF),取指2(IS),取寄存器(RF),执行(EX),取数1(DF),取数2(DS),标记检查(TC),写回(WB)(参见参考文献2)。由于静态流水的局限性,造成了该微处理器不能实现指令乱序执行,因而流水线效率比较低。同时由于数据通路不够,对指令顺序还提出了一些很苛刻的要求。
MIPS R10000的流水线分为大致6级(定点5级,访存6级,浮点7级),1~3级是取指阶段,在第1级,取出指令及其下面比邻的四条指令,在第2级,进行译码和寄存器重命名,并为转移指令计算地址。在第3级,将寄存器重命名后的指令送入相应操作队列,并做相关处理。在第3阶段的后半段,处理器从寄存器堆中读出操作数,并在第4阶段开始执行(其中定点执行需1级,访存指令需2级,浮点指令执行需3级),在执行完成后的下一级前半写回结果。在流水线技术方面,运用了指令预取,乱序执行,转移猜测,精确中断等先进技术,并保持了顺序一致性。该处理器每个时钟周期可以进行四条指令的取指和译码,利用转移栈实现了转移猜测,利用映射表实现寄存器重命名,进而实现乱序执行。
在MIPS R10000中是通过使用寄存器映射的方法实现动态调度的,具体做法是,在指令被送到操作队列之前,将逻辑寄存器号映射为空闲的物理寄存器号,然后将重命名好的指令放入操作队列,然后执行。执行结束后,先将结果写回到该物理寄存器对应的临时结果寄存器中,直到该指令可以写回时,再写回到该物理寄存器。这种方法,要求真正的物理寄存器要比逻辑寄存器多一倍左右。因此在R10000中,共有33个定点逻辑寄存器(包括特殊的HI和LO寄存器),64个定点物理寄存器,32个浮点逻辑,64个浮点物理寄存器。
为了实现寄存器重命名,R10000采用了如下结构:寄存器映射表(registermap tables),空闲表(free tables),活跃表(active tables),以及忙位表(busy-bittables)。其中,寄存器映射表将逻辑寄存器映射为物理寄存器,空闲表记录空闲中的物理寄存器,活跃表记录所有的活跃指令,以便于精确中断。忙位表记录每一个物理寄存器中当前的值是否有效。
同时,在R10000中共有3个操作队列,定点,浮点和访存分别各有一个。经过寄存器重命名的指令通过分类后分别打入各操作队列,在操作队列中可乱序执行,但写回仍然按序写回到寄存器中,不过对于程序员而言,好像指令序列仍然一直按顺序执行一般。当寄存器中的值可用后才可以再继续发射相关指令。
这种动态乱序执行性能上比静态流水有了很大提高,但是仍然有一些不足之处。比如,重命名的代价过大,控制过于复杂(要引入4个记录表,物理寄存器要远多于逻辑寄存器),没有保留栈,要把结果直接写回到寄存器中,使得相关指令发射要有一拍左右的延迟等等,见Kenneth C.Yeager,TheMips R10000 Superscalar Microprocessor,IEEE Micro,Vol.16,No.2,1996pp.28-39。
发明内容
本发明的目的是提供一种基于操作队列复用的指令流水线系统和方法,简化动态调度流水线中的控制复杂度,改善流水线的写回机制,进而减少所需的控制逻辑,从而使流水线的效率更高。
按照本发明的一方面,一种基于操作队列复用的指令流水线系统,包括:
取指部件,用于取出指令;
译码部件,对取出的指令进行译码,并按指令在程序中出现的先后次序把译码后的指令送到操作队列;
操作队列,按指令在程序中出现的先后次序根据操作的类型把操作发射到相应的保留站,并按次序结束运算结果已经写回的指令;
保留站,对发射来的操作进行运算,把运算结果送回到结果总线并写回到操作队列;
寄存器,在结束指令时,接收由操作队列依照指令进出操作队列的次序写回寄存器的运算结果。
按照本发明的另一方面,一种基于操作队列复用的指令流水线方法,包括步骤:
指令译码部件按指令在程序中出现的先后次序把译码后的指令送到操作队列;
操作队列根据操作的类型按指令在程序中出现的先后次序把操作发射到与各功能部件相应的保留站;
并按指令在程序中出现的先后次序结束运算结果已经写回的指令;
保留站中的操作经运算后,把结果送回到结果总线并写回到操作队列;
并由操作队列依照指令进出操作队列的次序在结束指令时送回到寄存器。
本发明通过操作队列的复用实现指令的动态调度,减少控制逻辑,从而提高流水线效率,进而提高微处理器的性能。
附图说明
图1是本发明的流水线整体结构;
图2是本发明中发射总线的形成过程;
图3、图4是本发明中动态流水线示例,其中图3中每个操作延迟为二拍,图4中每个操作延迟为一拍。
发明的实施方式
本发明的流水线结构是一种精简指令集计算机(Reduce Instruction SetComputer,简称RISC)的指令流水线结构。
本发明的流水线结构如图1所示。该结构由取指部件,译码部件,操作队列,定点及浮点寄存器堆,及多个功能部件组成。在该结构中,指令译码部件按指令在程序中出现的先后次序把译码后的指令(译码后的指令称为操作)送到操作队列,操作队列按次序根据操作的类型把操作发射到相应的保留站,并按次序结束运算结果已经写回的指令。保留站中的操作经运算后,把结果送回到结果总线并写回到操作队列。指令进出操作队列(即发射和结束)都是有序的,但在操作队列期间的执行过程中是无序的。
在上述结构中,运算结果不直接写回到结果寄存器而是先写回到操作队列是为了实现精确例外处理。因为操作队列中指令的执行是无序的,一条指令的执行结果必须等到它前面所有的指令都执行完后才能写回到寄存器。否则,在该指令的执行结果写回寄存器后它前面的一条指令发生了例外时,例外现场就不正确了。
如果一个操作发射时它所需的源操作数还没有准备好(该操作的源寄存器正成为其它未完成指令的目标寄存器),该操作的发射不需要等待,而是通过操作队列号建立操作间的数据依赖关系后把该操作发射到保留站,保留站自动侦听结果总线并接收所需要的值。具体过程如下:
(1).一个操作发射时要在相应的目标寄存器(如Ri)处记录该操作在操作队列中的位置(如第qid项),即该寄存器被重定向到最近一个写它的操作在操作队列的位置;并置该寄存器为无效,在该操作结束并把值写回到寄存器之前,该寄存器的值不可用。
(2).后面的操作发射时如果用到Ri寄存器,访问Ri寄存器时发现该寄存器正成为操作队列中第qid项的目标寄存器且结果未写回到寄存器,则读出Ri中记录的qid号并根据该号访问操作队列;如果第qid项的值已经写回到操作队列则直接从操作队列中读出该值作为Ri的值,否则把qid送到保留站并在保留站中记录该寄存器值未准备好。
(3).保留站侦听结果总线,当第qid项操作结束并把结果送到结果总线时直接接收结果总线的值作为Ri的值。
(4).当保留站中所有操作数都准备好后开始运算并把结果送到结果总线,结果总线连接到操作队列以及保留站。图2给出了操作队列发射一个操作到保留站时操作数的形成过程,图中没有包括浮点部分。
本发明的指令流水线分成取指、译码、发射、执行并写回、完成等阶段。其中执行阶段可能需要多拍。
●取指 根据当前PC的内容取指令到指令寄存器IR。下一条指令的PC值由多个因素决定,如IR中的指令是否为转移指令,例外,以及前面的转移预测失败等。在正常的情况下,下一条指令的PC值为当前指令的PC+4。
●译码 根据IR中的当前指令进行译码形成统一的内部格式并存入操作队列。如果操作队列已满,则等待,流水线暂停。
●发射 从操作队列中取出一个操作并发射到相应的保留站。在这一阶段需要判断运算所需的源寄存器值是否已经可用。如果可用,直接读源寄存器的值;如果未可用,需要告诉保留站最近一个写该寄存器的操作,目标寄存器被重定向为该操作在操作队列中的位置编号。
●执行并写回 执行部件从相应的保留站中取出所有源操作数都已经准备好的操作,根据操作的类型进行运算,并把结果值以及该操作在操作队列中的位置编号放在结果总线上。保留站和操作队列侦听结果总线的信息,并修改相应的内容和状态。值得注意的是,为了实现精确例外,运算结果并不直接写回寄存器,而是写到操作队列的相应项。
●完成 如果操作队列中的第一个操作已经完成,则结束该操作。如果操作队列中的第一个操作在操作过程中引起过例外,则进行例外处理。当一个操作从操作队列中被清除掉时,进行寄存器的最终写回,即把操作队列中的结果写回到该操作的目标寄存器去。
在上述过程中,当一个操作把结果写回到操作队列时,操作队列并不需要专门的域来存放结果,而是把结果写回到相应操作的立即数域(操作队列的每一项都有立即数域,用来保存指令中的立即数),因为在结果写回阶段,一个操作的立即数已经没用了。
需要指出的是,在传统的流水线中,执行和写回分成两个不同的流水级,在指令执行阶段算出的结果必须等到写回阶段才能送到结果总线上。这样的化如果一条指令用到它的前一条指令的结果,至少需要等一拍(当然可以用forward技术解决这个问题)。实际上对于简单的运算操作如定点加法,执行并写回在一拍内完成在延迟上是没问题的(执行并写回的延迟包括三个部分:从保留站中选择一个源操作数都准备好的操作的延迟+简单运算如加法的延迟+侦听逻辑的延迟或把结果写回操作队列的延迟)。在传统流水线中把执行和写回分成两个不同的流水级的主要是为了避免结果总线冲突。在传统流水线中,访存部件和定点运算部件公用一条结果总线,而访存部件需要在执行阶段计算地址并在写回阶段访问CACHE,因此把运算指令也增加一拍以避免结果总线冲突。否则前一条访存指令和后一条运算指令会同时形成结果,引起结果总线冲突。在我们的设计中,有多条结果总线(至少为两条),访存部件和运算部件可以通过不同的结果总线送回结果。因此对于普通运算,可以把执行和写回合并成一拍,对于访存运算,相当于执行并写回阶段阶段需要多拍(还有其它运算如浮点运算也有需要多拍的)。
为了实现上述CPU的动态流水线,本发明设置如下的寄存器:每个运算部件都需要设置一定数量(如1-4个)的保留站,一个操作队列,以及通用和浮点寄存器堆。
操作队列中的每一项包括如下内容。
●OP:操作类型,如加、减、移位、取数等。
●Src1:源寄存器号1。
●Src2:源寄存器号2。
●Dest:目标寄存器号。
●Imm/Res:指令中的立即数,同时在操作结束但未结束前用于临时保存结果,如果发生访存例外也可用于保存虚地址。
●State:操作队列状态,2位,“0”表示空,“1”表示相应的操作队列项中有操作但未送到保留站,“2”表示相应的操作已经送到保留站,“3”表示相应的操作已经执行完但未结束。
●其它:
保留站中的每一项包括如下内容。
●B:忙位,“0”表示相应的保留站项中无操作,“1”表示有操作。
●OP:操作类型。
●Qj:源1寄存器号,最高位为“1”表示数据已经准备好在Vj域中,其它位表示计算所需数据的操作在操作队列中的位置,用于侦听结果总线,等待计算结果。
●Vj:源1操作数的值,Qj的最高位为为“1”时有效。
●Qk:源2寄存器号。
●Vk:源2操作数的值。
●Qid:相应操作在操作队列中的位置,用于运算结束时把结果写回操作队列以及侦听总线的保留站接收运算结果,发生例外时用于给操作队列的例外原因等域赋值。
值得指出的是,以上只是典型保留站的基本内容。浮点运算部件和访存部件的保留站根据各自的需要(如浮点部件的操作数可能是32位的,访存部件有三个操作数)有不同的具体内容,不过其原理是一样的。
寄存器堆中的每一个寄存器包括如下内容:
●Value:寄存器的值。
●Valid:有效位,“1”表示寄存器的值有效,“0”表示该寄存器正成为某操作的结果寄存器没有写回。
●Qid:当Valid位为“1”时该域不用,当Valid位为“0”时记录最近一个把该寄存器作为结果寄存器的操作在操作队列中的位置。
根据上述指令流水线的设计思想,本发明的指令流水线主要数据通路包括:指令寄存器的指令译码后送到操作队列的译码总线;操作队列中的操作经寄存器重命名及读取操作数后被发射到相应的保留站的发射总线;运算结果由结果总线送到保留站以及操作队列的结果总线,以及操作队列中的操作被结束时把运算结果送到通用寄存器及浮点寄存器的结束总线。
译码总线是指令译码后到操作队列的数据通路,主要包括如下内容。
●Valid:有效位。
●OP:操作类型。
●Src1:源寄存器号1。
●Src2:源寄存器号2。
●Dest:目标寄存器号。
●Imm:指令中的立即数。
●其它:如相应指令的PC值,以及指示取指及译码过程中是否发生例外的例外位等。
发射总线指从操作队列经过访问寄存器发射操作到各个保留站的数据通路。指令的发射经过从操作队列到寄存器读取操作数,再把操作数送到功能部件的过程。如果被发射操作的源寄存器正在成为其它操作的目标,还有可能从操作队列读取已经写回但未结束的数据。因此,发射总线包括从操作队列到寄存器和从寄存器到功能部件两个层次。从操作队列到寄存器的数据通路用于发出操作命令以及读取已经写回操作队列但未结束的结果值;从寄存器到各个功能部件的发射总线在操作队列发射总线的基础上读取通用寄存器和浮点寄存器的操作数值后形成。从操作队列到寄存器的发射总线包括如下内容:
●Valid:有效位。
●Qid:操作队列号。
●OP:操作类型。
●Src1:源寄存器号1。
●Src2:源寄存器号2。
●Dest:目标寄存器号。
●Imm:被发射指令的立即数,移位指令的移位数,浮点指令的fmt。
●Res1:与Src1对应的操作数低32位。
●WB1:Res1的写回位。
●Res2:与Src2对应的操作数低32位。
●WB2:Res2的写回位。
从寄存器到保留站的发射总线包括如下内容:
●Valid:有效位,“1”有效。来自操作队列。
●OP:操作类型。来自操作队列。
●Qid:操作队列号。来自操作队列。
●Src1:目前没用。
●Src2:访存保留站用Src2的前两位确定所存的数是来自通用寄存器还是浮点寄存器。
●Imm:在定点和访存指令中表示立即数。来自操作队列。
●Qj:源1重命名寄存器号。来自通用寄存器。
●Vj:源1操作数的值。来自通用寄存器。
●Qk:源2重命名寄存器号。来自通用寄存器。
●Vk:源2操作数的值。来自通用寄存器。
●FQj:浮点操作的源1重命名寄存器号。来自浮点寄存器。
●FVj:浮点操作的源1操作数的值。来自浮点寄存器。
●FQk:浮点操作的源2重命名寄存器号。来自浮点寄存器。
●FVk:浮点操作的源2操作数的值。来自浮点寄存器。
上述信号的形成需要两个阶段。首先,操作队列送出OP,src1,src2,dest,Imm等信号,通用寄存器和浮点寄存器根据src1和src2读出相应寄存器的qid并送到操作队列。操作队列根据这些重命名寄存器号送出Res1,WB1,Res2,WB2等值。寄存器模块再根据这些值和寄存器的内容形成Qj,Vj,Qk,Vk,FQj,Vj,FQk,Vk。形成发射总线后,发射总线的内容被送到各个功能部件。不同的功能部件(定点,浮点,访存)根据自己的需要使用发射总线中的不同数据。
结果总线从运算部件到操作队列及保留站。虽然目前一共有五个功能部件会产生结果,但我们只设置两条结果总线,每个功能部件都可以把结果送到任何一条结果总线上。每条结果总线包含如下内容:
●Valid:有效位,“1”有效。
●Qidi:重命名结果寄存器号。
●Value:运算或访存结果。
●其它:如反映运算及访存过程中是否发生例外的例外位等。
在结束阶段,操作队列通过结束总线向通用寄存器及浮点寄存器写回结果。结束总线包括如下内容:
●Valid:有效位。
●OP:操作码。
●Dest:目标寄存器号。
●Qid:操作队列号。
●Value:写回到寄存器的结果。
由上可见,采用本发明所应用的方法,可以大大简化寄存器重命名需要付出的物理代价,降低控制的复杂度,从而达到提高整个流水线乃至机器性能的目的。
下面通过一个例子描述操作队列、保留站、以及寄存器的功能。图3给出了三条相关指令执行时操作队列、保留站、寄存器的变化。如果运算器流水线延迟为两拍,即数据在保留站中准备好开始运算后的下一拍结果才出现在结果总线上,则这三条指令需要8拍才能完成。图3(a)给出了初始状态,图3(b)-(i)给出了此后的8个时钟周期内状态的变化。
1.第一拍,操作队列向保留站发出ADC操作,该操作写R1寄存器。由于所有的源操作数都已经准备好,保留站中的Qj,Qk域为4(最高位为1表示数据已经准备好),Vj,Vk域可用,Qid域为0,表示运算结束后把结果写回到操作队列的第0项。修改操作队列中第0项的状态为操作已经发出但结果未写回。置R1寄存器的Valid域为0,Qid域为0,表示R1寄存器的值无效,最新值在操作队列的第0项。
2.第二拍,ADC操作被执行,并把结果打入运算器末端的运算结果寄存器。SUB操作被发射到保留站。与第一拍类似,修改相应状态。所不同的是SUB操作的源操作数依赖于ADC操作的结果,因此保留站的Qj域置为0,表示等待操作队列的第0项操作的结果。
3.第三拍,运算结果寄存器把ADC的结果及该操作的Qid送到结果总线上。操作队列的第0项接收ADC操作的结果并保存在Imm域,同时置ADC操作的状态为等待结束。保留站根据侦听总线的结果,接收ADC操作的结果同时置SUB操作的Qj为4(最高位为1表示数据已经准备号),Vj的结果可用。同时,ADD操作被发射到保留站中并修改相应的状态。
4.第四拍,ADC操作结束,把操作队列第0项中Imm域的值写回到由Dest域指定的寄存器(即R1),由于R1寄存器的Valid和Qid域指示R1的最新值是操作队列的第2项的结果,因此R1的Valid和Qid域不变。释放操作队列的第0项。SUB操作被执行,并把结果打入运算器末端的运算结果寄存器。
5.第五拍,运算结果寄存器把SUB的结果及该操作的Qid送到结果总线上。操作队列的第1项接收SUB操作的结果并保存在Imm域,同时置SUB操作的状态为等待结束。保留站根据侦听总线的结果,接收SUB操作的结果同时置ADD操作的Qj为4(最高位为1表示数据已经准备号),Vj的结果可用。
6.第六拍,SUB操作结束,把操作队列第1项中Imm域的值写回到由Dest域指定的寄存器(即R1),由于R1寄存器的Valid和Qid域指示R1的最新值是操作队列的第2项的结果,因此R1的Valid和Qid域不变。释放操作队列的第1项。ADD操作被执行,并把结果打入运算器末端的运算结果寄存器。
7.第七拍,运算结果寄存器把ADD的结果及该操作的Qid送到结果总线上。操作队列的第2项接收ADD操作的结果并保存在Imm域,同时置ADD操作的状态为等待结束。
8.第八拍,ADD操作结束,把操作队列第2项中Imm域的值写回到由Dest域指定的寄存器(即R1),由于R1寄存器的Valid和Qid域指示R1的最新值是操作队列的第2项的结果,因此置R1的Valid域为1,表示R1的值有效。释放操作队列的第2项。在上述过程中,由于运算部件的延迟为2个时钟周期,SUB和ADD操作都需要等待。
如果运算器流水线延迟为一拍,即数据在保留站中准备好开始运算后的同一拍结果就出现在结果总线上,则这三条指令只要5拍就能完成。图4给出了执行过程。
1.第一拍,操作队列向保留站发出ADC操作,该指令写R1寄存器。由于所有的源操作数都已经准备好,保留站中的Qj,Qk域为4,Vj,Vk域可用,Qid域为0,表示运算结束后把结果写回到操作队列的第0项。修改操作队列中第0项的状态为操作已经发出但结果未写回。置R1寄存器的Valid域为0,Qid域为0,表示R1寄存器的值无效,最新值在操作队列的第0项。
2.第二拍,ADC操作被执行,并把结果以及该操作的Qid送到结果总线上。操作队列的第0项接收ADC操作的结果并保存在Imm域,同时置ADC操作的状态为等待结束。操作队列向保留站发出SUB操作,与第一拍类似,修改相应状态。保留站接收操作队列发出的SUB操作时,同时侦听结果总线,接收源操作数的值,因此SUB操作的源操作数也都是可用的。
3.第三拍,ADC操作结束,把操作队列第0项中Imm域的值写回到由Dest域指定的寄存器(即R1),释放操作队列的第0项。SUB操作被执行,并把结果以及该操作的Qid送到结果总线上,操作队列的第1项接收SUB操作的结果并保存在Imm域,同时置SUB操作的状态为等待结束。ADD操作被发射到保留站中并修改相应的状态,保留站接收操作队列发出的ADD操作时,同时侦听结果总线,接收源操作数的值,因此ADD操作的源操作数也都是可用的。在这一拍中,ADC操作写R1寄存器与ADD操作读R1寄存器同时进行,Valid及Qid域的值由ADD操作确定。
4.第四拍,SUB操作结束,把操作队列第1项中Imm域的值写回到由Dest域指定的寄存器(即R1),由于R1寄存器的Valid和Qid域指示R1的最新值是操作队列的第2项的结果,因此R1的Valid和Qid域不变。释放操作队列的第1项。ADD操作被执行,并把结果以及该操作的Qid送到结果总线上,操作队列的第2项接收ADD操作的结果并保存在Imm域,同时置ADD操作的状态为等待结束。
5.第五拍,ADD操作结束,把操作队列第2项中Imm域的值写回到由Dest域指定的寄存器(即R1),由于R1寄存器的Valid和Qid域指示R1的最新值是操作队列的第2项的结果,因此置R1的Valid域为1,表示R1的值有效。释放操作队列的第2项。
在上述流水线中,SUB操作在发射到保留站时,ADC计算的R1的值并未写回到寄存器或操作队列,但已经送到结果总线上。因此在SUB被发射的同时,侦听结果总线并接收结果总线上的值。ADC操作发射时也有类似情况。这种情况相当于静态流水线中的forwarding技术。
Claims (10)
1.一种基于操作队列复用的指令流水线系统,包括:
取指部件,用于取出指令;
译码部件,对取出的指令进行译码,并按指令在程序中出现的先后次序把译码后的指令送到操作队列;
操作队列,按指令在程序中出现的先后次序根据操作的类型把操作发射到相应的保留站,并按次序结束运算结果已经写回的指令;
保留站,对发射来的操作进行运算,把运算结果送回到结果总线并写回到操作队列;
寄存器,在结束指令时,接收由操作队列依照指令进出操作队列的次序写回寄存器的运算结果。
2.按权利要求1所述的系统,其特征在于所述结果总线至少为两条。
3.按权利要求1所述的系统,其特征在于所述的寄存器为通用寄存器和浮点寄存器。
4.按权利要求1所述的系统,其特征在于每一保留站对应一功能计算部件。
5.按权利要求1所述的系统,其特征在于指令流水线的主要数据通路包括:
指令寄存器的指令译码后送到操作队列的译码总线;
操作队列中的操作经寄存器重命名及读取操作数后被发射到相应的保留站的发射总线;
运算结果由结果总线送到保留站以及操作队列的结果总线;以及
操作队列中的操作被结束时把运算结果送到通用寄存器及浮点寄存器的结束总线。
6.一种基于操作队列复用的指令流水线方法,包括步骤:
指令译码部件按指令在程序中出现的先后次序把译码后的指令送到操作队列;
操作队列根据操作的类型按指令在程序中出现的先后次序把操作发射到与各功能部件相应的保留站;
并按指令在程序中出现的先后次序结束运算结果已经写回的指令;
保留站中的操作经运算后,把结果送回到结果总线并写回到操作队列;
并由操作队列依照指令进出操作队列的次序在结束指令时送回到寄存器。
7.按权利要求6所述的方法,其特征在于:当运算部件把结果写回到操作队列时,不用专门的寄存器域来保存写回的结果,而是重用操作队列中的有关域。
8.按权利要求6所述的方法,其特征在于:重用每个操作的立即数域。
9.按权利要求6所述的方法,其特征在于:基于操作队列复用的指令流水线分成取指、译码、发射、执行并写回、完成等阶段。
10.按权利要求9所述的方法,其特征在于:执行阶段需要多拍,执行和写回对普通运算合并成为一拍。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 01141495 CN1234066C (zh) | 2001-09-27 | 2001-09-27 | 基于操作队列复用的指令流水线系统和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 01141495 CN1234066C (zh) | 2001-09-27 | 2001-09-27 | 基于操作队列复用的指令流水线系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1410885A CN1410885A (zh) | 2003-04-16 |
CN1234066C true CN1234066C (zh) | 2005-12-28 |
Family
ID=4676218
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 01141495 Expired - Lifetime CN1234066C (zh) | 2001-09-27 | 2001-09-27 | 基于操作队列复用的指令流水线系统和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1234066C (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100409181C (zh) * | 2006-05-25 | 2008-08-06 | 西北工业大学 | 浮点处理单元中面向精确异常的流水线调度方法 |
CN100476744C (zh) * | 2007-01-30 | 2009-04-08 | 中国科学院计算技术研究所 | 一种基于时间冗余的检验流水线瞬态故障的装置及方法 |
CN101710272B (zh) * | 2009-10-28 | 2012-09-05 | 龙芯中科技术有限公司 | 指令调度装置和方法 |
CN102566967B (zh) * | 2011-12-15 | 2015-08-19 | 中国科学院自动化研究所 | 一种采用多级流水线结构的高速浮点运算器 |
CN104657114B (zh) * | 2015-03-03 | 2019-09-06 | 上海兆芯集成电路有限公司 | 并行化的多分派系统和用于排序队列仲裁的方法 |
CN105260256B (zh) * | 2015-10-27 | 2018-03-23 | 首都师范大学 | 一种双模冗余流水线的故障检测及回退方法 |
CN106227507B (zh) * | 2016-07-11 | 2019-10-18 | 北京深鉴智能科技有限公司 | 计算系统及其控制器 |
CN106873946B (zh) * | 2017-01-24 | 2019-06-04 | 青岛专用集成电路设计工程技术研究中心 | 一种中断处理方法及流水线控制器 |
CN110825436B (zh) * | 2018-08-10 | 2022-04-29 | 昆仑芯(北京)科技有限公司 | 应用于人工智能芯片的计算方法和人工智能芯片 |
CN114461278B (zh) * | 2022-04-13 | 2022-06-21 | 海光信息技术股份有限公司 | 操作指令调度队列的方法、操作装置和电子装置 |
-
2001
- 2001-09-27 CN CN 01141495 patent/CN1234066C/zh not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
CN1410885A (zh) | 2003-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1129843C (zh) | 使用组合的数据处理器系统和指令系统 | |
CN1089460C (zh) | 多指令集的数据处理 | |
CN1199099C (zh) | 紧密耦合式多处理器的快速多线程执行 | |
CN1088214C (zh) | 用多指令集处理数据的器件和方法 | |
US7752426B2 (en) | Processes, circuits, devices, and systems for branch prediction and other processor improvements | |
CN1204490C (zh) | 高数据密度risc处理器 | |
JP4818918B2 (ja) | マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令 | |
CA2338008C (en) | Method and apparatus for identifying splittable packets in a multithreaded vliw processor | |
US5497499A (en) | Superscalar risc instruction scheduling | |
CN1746842A (zh) | 用于乱序执行条件指令的硬件装置及其执行方法 | |
US7328332B2 (en) | Branch prediction and other processor improvements using FIFO for bypassing certain processor pipeline stages | |
CN1184562C (zh) | 处理器的转移指令 | |
CN1234066C (zh) | 基于操作队列复用的指令流水线系统和方法 | |
US20130117543A1 (en) | Low overhead operation latency aware scheduler | |
US20070143580A1 (en) | Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors | |
JP2000105699A (ja) | 命令レベル並列性を増加させるためのリザベ―ションステ―ション | |
CN1195809A (zh) | Store(存数)指令结果的前送 | |
JP2006509282A (ja) | マルチスレッディング・リサイクルおよびディスパッチ機構 | |
CN1842771A (zh) | 动态配置虚拟处理器资源的机制 | |
US20120331268A1 (en) | Reconfigurable processor architecture | |
CA2341098C (en) | Method and apparatus for splitting packets in a multithreaded vliw processor | |
CN1222985A (zh) | 在多级流水线结构中处理条件跳转的方法 | |
CN1716189A (zh) | 设计用户可定制的处理器的方法以及装置 | |
CN113590197A (zh) | 一种支持可变长向量处理的可配置处理器及其实现方法 | |
CN1217261C (zh) | 用于处理器流水线分段法及再装配的方法以及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20051228 |