缓冲指令及其较晚产生相关信息的装置及方法

文档序号:6421118阅读:93来源:国知局
专利名称:缓冲指令及其较晚产生相关信息的装置及方法
技术领域
本发明涉及微处理器的管线执行(pipelining)领域,特别是涉及一种关于管线化微处理器中的缓冲指令及其较晚产生相关信息的装置及方法。
背景技术
现代的微处理器均为管线化微处理器。也就是,在微处理器的不同区块或管线阶段内,可同时执行好几个指令。Hennessy与Patterson将管线执行定义为“多个指令可重叠执行的实作技术”。参见计算器结构量化方法(第二版),1996年由加州旧金山的Morgan Kaufmann出版公司印行,John L.Hennessy与David A.Patterson所著。接着,他们对管线执行做了以下精彩的解说管线与组装线类似。在汽车组装线中,有许多步骤,每个步骤对于汽车的建造都有某些贡献。每个步骤虽然是在不同的汽车上进行,但会与其它步骤并行地运作。在计算机管线中,每个步骤会完成指令的一部分。如同组装线,不同步骤会并行地完成不同指令的不同部分。这些步骤的每一个称为管线阶段或管线区段。这些阶段会将一个阶段连接至下个阶段,而形成管道,指令会从一端进入,经过这些阶段,并从另一端离开,就如同组装线中的汽车。
同步微处理器是根据时钟周期来运作。通常,每经过一时钟周期,指令就从微处理器管线的一个阶段传至另一阶段。在汽车组装线中,若某个阶段的工人因为没有汽车要组装而处于闲置状态,则此组装线的产能或效能便会降低。同样地,若微处理器阶段因未有指令要进行,而在一时钟周期处于闲置状态(通常称为管线泡沫(pipelme bubble)),则处理器的效能会降低。
在本说明书中,微处理器管线的各个阶段在逻辑上可区分成二个部分。上层部分会提取及译码指令,而送到执行指令的下层部分。上层部分通常包括指令提取器,以从内存提取程序指令。因为从系统内存提取指令所需的时间相当长,所以上层部分还包括指令高速缓存,以快取从内存中所提取的指令,减少后续的指令提取时间。上层管线阶段的主要工作为当执行阶段准备好执行指令时,将这些指令准备妥当。
要避免执行阶段产生泡沫,通常在上层管线阶段所采用的一种方法就是预先读取程序,将多个程序指令提取至一指令缓冲器。该指令缓冲器会将指令送到已准备好执行指令的执行阶段。指令缓冲器常被配置为先进先出内存,或队列。
指令缓冲技术在执行阶段所需的一或多个指令不存在于指令高速缓存时,是特别有益的。在此情况下,能减低多少遗失快取线所造成的影响,是依执行内存提取时,指令缓冲器所能提供至执行阶段的指令而定。
在程序中具有分支指令的情况下,缓冲技术也是有用的。现代的微处理器是利用分支预测逻辑,来预测是否会采用分支指令。若采用,则产生分支指令的目标地址,而指令是从此目标地址处提取,而不是从下个循序提取地址提取,并且会送到指令缓冲器。
在指令送至执行阶段前须先进行某些处理的情况下,指令缓冲也是有帮助的。例如,在某些处理器中,指令集允许指令的长度为可变数目字节。因此,处理器必须译码一串指令字节,并判断下个指令的类型,以决定其长度。每个指令的启始处是由先前指令的长度来决定。此程序通常称为指令格式化。由于指令格式化需要一些处理时间,所以将多个指令格式化,并将管线上层部分中的格式化指令予以缓冲是有帮助的,如此在需要时,格式化指令即可送至执行阶段处理。
除了提取指令外,上层管线阶段也会产生与所提取指令相关的信息,这些信息并非指令字节本身,且为执行阶段执行指令时会使用到的。一个例子是分支预测相关信息,执行阶段可能会需要它,以更新分支预测过程,或更正预测错误的分支指令。另一种例子是指令的长度,其必须在处理器执行可变长度指令的情况中决定出来。相关信息可能在指令字节已准备好送到指令缓冲器的时钟周期之后产生。然而,相关信息必须与其相关的指令同步地送到执行阶段。
对此问题的一种解决方式为增加另一个管线阶段,给予相关信息更多时间以进行缓冲及送至执行阶段。然而,此方式会有潜在地降低效能的缺点。尤其,当分支指令预测错误时,在预测错误的分支指令前的所有管线阶段必须清空其指令,并且指令的提取必须再回到预测错误的分支处。所需清空的阶段数愈多,则微处理器管线的执行阶段产生泡沫的可能性也愈大。因此理想上希望能使管线阶段尽可能地少。所以此问题需要较佳的解决方式。

发明内容
本发明解决前述问题的做法是,比缓冲装置接收指令字节晚一个时钟周期,才将相关的指令信息接收至该缓冲装置。此装置包括一项工具,可于指令被加载空的缓冲器时,使相关指令信息能有效地绕过缓冲器,而在产生此相关信息的相同时钟周期内,被送到执行阶段。因此,为了达成上述目的,本发明提供一种用以缓冲管线化微处理器中的缓冲指令及其较晚产生相关信息的装置,其中此缓冲装置直到取得指令后至少一时钟周期,才取得此相关信息。此装置包括第一队列,其具有第一多个项目,每个项目用以储存一指令。此装置还包括第二队列,具有对应于该第一多个项目的第二多个项目,每个项目用以储存与第一队列中一对应指令有关的信息。此装置还包括多个控制信号,耦接至第一队列,用以加载、移位及保持这些指令于第一队列中。此装置还包括多个缓存器,接收这些控制信号,并输出延迟一个时钟周期的这些控制信号,以加载、移位及保持相关信息于第二队列中。
另一方面,本发明提供一种指令缓冲器。此指令缓冲器包括多个多任务式缓存器(muxed-register),每个用以储存一指令。此指令缓冲器还包括多个暂存式多任务器(registered-mux),每个用以储存与这些多任务式缓存器的一对应缓存器中的指令有关的信息。此指令缓冲器还包括一控制逻辑,耦接至这些多任务式缓存器,用以产生一控制信号,以选择性地将指令加载这些多任务式缓存器中的一个。此指令缓冲器还包括一缓存器,用以在一第一时钟周期内,接收控制信号上的值,并在第一时钟周期后的一第二时钟周期内输出此值,以选择性地加载对应于这些多任务式缓存器中一个的这些暂存式多任务器的相关信息。
另一方面,本发明提供一种微处理器。此微处理器包括一指令格式化器,用以在第一时钟周期内,输出一分支指令。此微处理器还包括一控制逻辑,用以在第一时钟周期后的第二时钟周期内,产生与此分支指令的预测有关的信息。此微处理器还包括一指令缓冲器,耦接至指令格式化器,用以在第一时钟周期期间缓冲此分支指令,并在第二时钟周期内接收该信息。若指令缓冲器在第一时钟周期期间为空,则在第二时钟周期内,选择性地输出该信息。若指令缓冲器在第一时钟周期期间不为空,则在第二时钟周期期间,选择性地缓冲该信息。
另一方面,本发明提供一种用以缓冲具有管线的微处理器中的缓冲指令及其较晚产生相关信息的方法。此方法包括在第一时钟周期内将一指令加载指令队列,以及在第一时钟周期后的第二时钟周期内,产生与此指令有关的信息。此方法还包括判断此指令在第二时钟周期期间,是否从此队列移出,以及若此指令未从此队列移出,则在第二时钟周期内将此相关信息加载此队列,而若此指令已从此队列移出,则在第二时钟周期期间,绕过此队列而将此相关信息连同此指令送至管线。
另一方面,本发明提供一种指令缓冲器。此指令缓冲器包括第一多任务器,具有一输出端、一保持数据输入端、一加载数据输入端以在第一时钟周期内接收一指令,以及一控制输入端以接收第一控制信号。若此控制输入端的值为真,则第一多任务器选取加载数据输入端,否则会选取保持数据输入端。此指令缓冲器还包括第一缓存器,具有耦接至第一多任务器的输出端的一输入端,以及耦接至第一多任务器的保持数据输入端的一输出端。此指令缓冲器还包括第二缓存器,具有一输入端及一输出端。此指令缓冲器还包括第二多任务器,具有耦接至第二缓存器的输入端的一输出端、耦接至第二缓存器的输出端的一保持数据输入端、一加载数据输入端以在第一时钟周期后的第二时钟周期内接收与该指令有关的信息,以及一控制输入端以接收第二控制信号。若此控制输入端的值为真,则第二多任务器选取加载数据输入端,否则会选取保持数据输入端。此指令缓冲器还包括第三缓存器,具有一输入端以在第一时钟周期内接收第一控制信号,以及一输出端以在第二时钟周期内产生第二控制信号。因此,若第一控制信号在第一时钟周期期间为真,则在第二时钟周期内,会输出该指令及该相关信息。
另一方面,本发明提供一种内含于传输媒介中的计算机数据信号。此计算机数据信号包括计算机可读取程序代码,以在管线化微处理器中提供一种可缓冲指令及相关信息的装置。此缓冲装置是直到取得指令后至少一时钟周期,才取得此相关信息。此程序代码包括第一程序代码,以提供一第一队列,其具有第一多个项目,每个是用以储存一指令。此程序代码还包括第二程序代码,以提供一第二队列,其具有对应于该第一多个项目的第二多个项目,每个是用以储存与第一队列中一对应指令有关的信息。此程序代码还包括第三程序代码,以提供多个控制信号,耦接至第一队列,用以加载、移位及保持第一队列中的指令。此程序代码还包括第四程序代码,以提供多个缓存器,接收这些控制信号,并输出延迟一时钟周期的这些控制信号,以加载、移位及保持第二队列中的相关信息。
本发明的一项优点是,可使用指令缓冲器或队列,而避免增加另一个管线阶段,从而增进处理器的效能。
本发明的其它特征及优点,现在配合下列说明及附图详述如下。


图1是本发明的微处理器的方框图。
图2是本发明图1的格式化指令队列的较早队列的方框图。
图3是本发明图1的格式化指令队列的较晚队列的方框图。
图4、图5及图6是本发明图1的格式化指令队列的运作时序图。
其中,附图标记说明如下100微处理器102控制逻辑104指令高速缓存106分支目标地址高速缓存108预译码逻辑112指令字节缓冲器114指令字节缓冲器控制逻辑116指令格式化器118格式化指令队列控制逻辑132较早队列134有效位138指令转译器
142lload[20]信号146较晚队列151I-阶段152信号F_new_instr153F-阶段154转译指令队列(XIQ)155X-阶段156XIQ控制逻辑157R-阶段161控制输入162eload信号164eshift信号165指令字节与预译码信息167指令字节168lshift信号169预译码信息171微指令172、178、210、211、212、310、311、312多任务器175预测分支目标地址176执行阶段缓存器177更正地址179下个循序提取地址181现行提取地址182现行指令指针信号183、185、220、221、222、320、321、322缓存器186信号X_rel_info187格式化指令队列188F_valid信号189有效位缓存器191late0信号
193early0信号194分支预测相关信息195XIQ_full信号197格式化指令198信号F_instr_info199FIQ充满信号202时钟信号(clk)具体实施方式
现请参照图1,是本发明的微处理器100的方框图。微处理器100为包括多个管线阶段的管线化处理器。图中显示了一部分的阶段,也就是I-阶段151、F-阶段153、X-阶段155以及R-阶段157。I-阶段151包括从内存或指令高速缓存中提取指令字节的阶段。在一实施例中,I-阶段151包括多个阶段。F-阶段153包括将一串未格式化的指令字节格式化成格式化指令的阶段。X-阶段155包括将格式化的宏指令转译成微指令的阶段。R-阶段157包括从缓存器档案加载操作数的缓存器阶段。微处理器100的其它执行阶段未显示出来,如接在R-阶段157之后的地址产生阶段、数据阶段、执行阶段、储存阶段以及结果回写阶段。
微处理器100包括I-阶段151中的指令高速缓存104。指令高速缓存104会快取从耦接至微处理器100的系统内存中所提取的指令。指令高速缓存104接收一现行提取地址181,以选取一快取线的指令字节167来输出。在一实施例中,指令高速缓存104为一多重阶段的高速缓存,也就是,指令高速缓存104需要多个时钟周期,以输出现行提取地址181所对应的快取线。
微处理器100还包括I-阶段151中的多任务器178。多任务器178会提供现行提取地址181。多任务器178会接收下个循序提取地址179,其为现行提取地址181再加上指令高速缓存104所储存的快取线大小。多任务器178还会接收一更正地址177,其指定微处理器100所要分支的地址,以更正分支预测错误。多任务器178还会接收一预测分支目标地址175。
微处理器100还包括I-阶段151中的分支目标地址高速缓存(BTAC)106,其耦接至多任务器178。BTAC 106会响应现行提取地址181,而产生预测分支目标地址175。BTAC 106会快取执行过的分支指令的分支目标地址,以及分支指令本身的地址。在一实施例中,BTAC 106包括四路集合关联高速缓存(4-way set associative cache),而所选取集合的每一路皆包含多个项目,用以储存目标地址及预测分支指令的分支预测信息。除了预测目标地址175外,BTAC 106还会输出分支预测相关信息194。在一实施例中,BTAC信息194包括一偏移量,用以指定在现行提取地址181所选取的指令快取线内,预测分支指令的第一个字节的位置;一指示,以指出预测分支指令是否横跨半快取线(half-cache line)的边界;所选取的路中,每个项目的有效位;指出所选取的集合中,哪一路为最近最少使用(1east-recently-used)的指示;指出所选取的路的多个项目中,哪一个为最近最少使用的指示;以及分支指令是否会被采用或不采用的预测。
微处理器100还包括控制逻辑102。若现行提取地址181与BTAC 106中一先前执行的分支指令的有效快取地址相吻合,且若BTAC 106预测该分支指令将被采用,则控制逻辑102会控制多任务器178选取BTAC目标地址175。若发生分支预测错误,则控制逻辑102会控制多任务器178选取更正地址177。否则,控制逻辑102会控制多任务器178选取下个循序提取地址179。控制逻辑102还会接收BTAC信息194。
微处理器100还包括I-阶段151中的预译码逻辑108,其耦接至指令高速缓存104。预译码逻辑108会接收由指令高速缓存104所送出的指令字节167的快取线,以及BTAC信息194,据以产生预译码信息169。在一实施例中,预译码信息169包括与每个指令字节相关联的位,其预测此字节是否为BTAC 106预测会采用的分支指令的运算码(opcode)字节;用以预测下个指令长度之位,其依据所预测的指令长度;与每个指令字节相关联的位,其预测此字节是否为指令的前置码(prefix)字节;以及对分支指令结果的预测。
微处理器100还包括F-阶段153中的指令字节缓冲器112,其耦接至预译码逻辑108。指令字节缓冲器112会从预译码逻辑108接收预译码信息169,并从指令高速缓存104接收指令字节167。指令字节缓冲器112会经由信号196将预译码信息送到控制逻辑102。在一实施例中,指令字节缓冲器112能缓冲多达四条快取线的指令字节及相关预译码信息。
微处理器100还包括指令字节缓冲器控制逻辑114,其耦接至指令字节缓冲器112。指令字节缓冲器控制逻辑114用以控制指令字节及相关预译码信息流入及流出指令字节缓冲器112。指令字节缓冲器控制逻辑114还会接收BTAC信息194。
微处理器100还包括F-阶段153中的指令格式化器(instructionformatter)116,其耦接至指令字节缓冲器112。指令格式化器116会从指令字节缓冲器112接收指令字节与预译码信息165,并从中产生格式化指令197。也就是,指令格式化器116会查看指令字节缓冲器112中的一串指令字节,判断哪个字节包括下个指令以及下个指令的长度,并将下个指令输出为格式化指令(formatted_instr)197。在一实施例中,格式化指令(formatted_instr)197所提供的格式化指令包括实质上符合x86架构指令集的指令。在一实施例中,格式化指令也称为宏指令,其会转译成可由微处理器100管线的执行阶段所执行的微指令。格式化指令(formatted_instr)197是在F-阶段153中产生。每次指令格式化器116输出格式化指令(formatted_instr)197,指令格式化器116会产生真值的F_new_instr信号152,以表示在格式化指令(formatted_instr)197上出现有效的格式化指令。此外,指令格式化器116会经由信号F_instr_info 198,输出格式化指令(formatted_instr)197的相关信息至控制逻辑102。在一实施例中,信号F_instr_info 198包括一分支指令是否会被采用或不被采用的预测(若指令为分支指令);指令的前置码;指令地址是否命中微处理器的分支目标缓冲器中;指令是否为远直接分支指令(far direct branch instruction);指令是否为远间接分支指令;指令是否为呼叫分支指令;指令是否为返回分支指令;指令是否为远返回分支指令;指令是否为无条件分支指令;以及指令是否为条件分支指令。此外,指令格式化器116会经由现行指令指针(CIP)信号182,输出格式化指令的地址,此指针是先前指令的地址再加上先前指令的长度。
微处理器100还包括X-阶段155中的格式化指令队列(FIQ)187。格式化指令队列187会从指令格式化器116接收格式化指令(formatted_instr)197。格式化指令队列187还会经由early0信号193输出格式化指令。此外,格式化指令队列187会经由信号X_rel_info 186,从控制逻辑102接收与经由格式化指令(formatted_instr)197所接收的格式化指令有关的信息。信号X_rel_info 186产生于X-阶段155。格式化指令队列187还会经由late0信号191,输出与格式化指令(其经由early0信号193输出)有关的信息。格式化指令队列187及信号X_rel_info 186将在下面做更详细地说明。
微处理器100还包括格式化指令队列(FIQ)控制逻辑118。FIQ控制逻辑118会从指令格式化器116接收信号F_new_instr 152。当格式化指令队列187已满时,FIQ控制逻辑118会产生一真值的FIQ_full信号199,送至指令格式化器116。FIQ控制逻辑118还会产生eshift信号164,以控制格式化指令队列187内指令的移位。FIQ控制逻辑118还会产生多个eload信号162,以控制将来自格式化指令(formatted_instr)197的指令加载格式化指令队列187的空项目的动作。在一实施例中,FIQ控制逻辑118对于格式化指令队列187中的每个项目,会产生一个eload信号162。在一实施例中,格式化指令队列187包括12个项目,每个项目储存一格式化宏指令。不过,为了简明起见,图1至3显示包括三个项目的格式化指令队列187;因此,图1显示了三个eload信号162,以eload[20]信号162来表示。
FIQ控制逻辑118还会记录格式化指令队列187中每个项目的一相关有效位134。图1所示的实施例包括三个有效位134,以V2、V1及V0来表示。V0有效位134对应于格式化指令队列187中最低项目的有效位;V1有效位134对应于格式化指令队列187中的中间项目的有效位;V2有效位134对应于格式化指令队列187中最高项目的有效位。FIQ控制逻辑118还会输出一F_valid信号188,其在一实施例中即为V0有效位134。有效位134是表示格式化指令队列187中的对应项目是否包含一有效指令。FIQ控制逻辑118还会接收一XIQ_full信号195。
微处理器100还包括X-阶段155中的指令转译器138,其耦接至格式化指令队列187。指令转译器138会从格式化指令队列187接收early0信号193中的格式化指令,并将格式化宏指令转译成一或多个微指令171。在一实施例中,微处理器100包括精简指令集计算机(reduced instruction set computer,简称RISC)核心,以执行原生的(native)或精简的指令集的微指令。
微处理器100还包括X-阶段155中的转译指令队列(XIQ)154,其耦接至指令转译器138。转译指令队列(XIQ)154会将由指令转译器138所接收的转译微指令171予以缓冲。转译指令队列(XIQ)154还会经由late0信号191,缓冲从格式化指令队列187所接收的相关信息。经由late0信号191所接收的信息与微指令171有关,这是因为其与格式化宏指令(微指令是从中转译而得)有关。微处理器100的执行阶段会使用相关信息191,以执行相关的微指令171。
微处理器100还包括XIQ控制逻辑156,耦接至转译指令队列(XIQ)154。XIQ控制逻辑156接收F_valid信号188,并产生XIQ_full信号195。XIQ控制逻辑156还会产生X_load信号164,以控制将转译微指令171及相关信息191加载转译指令队列(XIQ)154的动作。
微处理器100还包括X-阶段155中的二输入端的多任务器172,其耦接至转译指令队列(XIQ)154。多任务器172是用来当作旁路(bypass)多任务器,以选择性地绕过转译指令队列(XIQ)154。多任务器172的一输入端会接收转译指令队列(XIQ)154的输出。多任务器172的另一输入端则接收转译指令队列(XIQ)154的输入,也就是微指令171及late0信号191。多任务器172会依据XIQ控制逻辑156所产生的控制输入161,而选取其中一输入端,输出至R-阶段157中的执行阶段缓存器176。若执行阶段缓存器176准备好接收指令,且转译指令队列(XIQ)154在指令转译器138输出微指令171时为空,则XIQ控制逻辑156会控制多任务器172,绕过XIQ 154。微处理器100还包括有效位缓存器189,可接收来自于XIQ控制逻辑156的X_valid信号148,以指出储存于执行阶段缓存器176中的微指令及相关信息是否有效。
格式化指令队列187包括一较早队列132,以储存经由格式化指令(formatted_instr)信号197所接收的格式化宏指令,并包括一对应的较晚队列146,以储存经由X_rel_info信号186所接收的相关信息。图1显示包括三个项目的较早队列132,以EE2、EE1及EE0来表示。EE0为较早队列132的底部项目,EE1为较早队列132的中间项目,而EE2为较早队列1 32的顶端项目。EE0的内容会送到输出信号early0 193。信号eshift 164及eload[20]信号162用以控制较早队列132的移位及加载动作。同样地,图1也显示包括三个项目的较晚队列146,以LE2、LE1及LE0来表示。LE0为较晚队列146的底部项目,LE1为较晚队列146的中间项目,而LE2为较晚队列146的顶端项目。LE0的内容会送到输出信号late0 191。
格式化指令队列187还包括缓存器185。在第一时钟周期结束时,缓存器185会从FIQ控制逻辑118接收eshift信号164,并在下个时钟周期,于lshift信号168中输出第一时钟周期期间所接收的eshift信号164的值。格式化指令队列187还包括三个缓存器183。在第一时钟周期结束时,缓存器183会从FIQ控制逻辑118接收eload[20]信号,并在下个时钟周期,于lload[20]信号142中输出第一时钟周期期间所接收的eload[20]信号162的值。也就是,缓存器185及183会分别输出延迟一个时钟周期的eshift信号164及eload[20]信号。
在一实施例中,X_rel_info 186包括格式化宏指令(对应的微指令从中转译而得)的长度;宏指令是否横跨半快取线边界的指示;宏指令的位移字段;宏指令的立即(immediate)字段;宏指令的指令指针;以及与分支预测及更正有关的各种信息(若宏指令被预测为分支指令)。
在一实施例中,分支预测及更正的相关信息包括用来预测分支指令是否被采用或不被采用的分支过程表信息;用来预测分支指令是否被采用或不被采用的分支指令的一部分线性指令指针;用来与预测采用/不采用的线性指令指针进行互斥或运算的分支样本;若分支预测不正确时,用以回复原状的第二分支样本;用以表示分支指令的相关特征的各种标记,这些特征如分支指令是否为条件分支指令、呼叫指令、返回堆栈的目标、相关分支、间接分支以及分支指令结果的预测是否由静态预测器来实施;与BTAC 106所做预测有关的各种信息,如现行提取地址181是否吻合BTAC 106中的快取地址、该吻合地址是否有效、分支指令是否预期被采用或不被采用、由现行提取地址181所选取的BTAC 106的集合中,最近最少被使用的路、若指令的执行需要更新BTAC 106,会以所选取集合的哪个路来取代,以及BTAC 106所输出的目标地址。在一实施例中,一部分的X_rel_info 186会在先前的时钟周期期间产生,并储存起来以与相关信息一起传送,后者在宏指令从较早队列132的项目EE0通过early0信号193送出后的时钟周期所产生。
现请参照图2,是本发明图1的格式化指令队列187的较早队列132的方框图。
较早队列132包括串接成队列的三个多任务式缓存器。三个多任务式缓存器包括图1中的项目EE2、EE1及EE0。
较早队列132中的顶端多任务式缓存器包括具二个输入端的多任务器212,以及缓存器222(以ER2来表示),用以接收多任务器212的输出。多任务器212包括一加载输入端,用以接收图1中的格式化指令(formatted instr)信号197。多任务器212还包括一保持输入端,用以接收缓存器ER2 222的输出。多任务器212会接收图1中的eload[2]信号162,当作控制输入信号。若eload[2]信号162为真,则多任务器212的加载输入端会选取formatted_instr信号197;否则,多任务器212的保持输入端会选取缓存器ER2 222的输出。碰到时钟信号(以clk 202来表示)的上升缘,缓存器ER2 222会加载多任务器212所输出的值。
较早队列132中的中间多任务式缓存器包括具三输入端的多任务器211,以及缓存器221(以ER1来表示),用以接收多任务器211的输出。多任务器211包括一加载输入端,用以接收格式化指令(formatted_instr)信号197。多任务器211还包括一保持输入端,用以接收缓存器ER1 221的输出。多任务器211还包括一移位输入端,用以接收缓存器ER2 222的输出。多任务器211会接收图1中的eload[1]信号162,当作控制输入信号。多任务器211还会接收图1中的eshift信号164,当作另一控制输入信号。若eload[1]信号162为真,则多任务器211的加载输入端会选取格式化指令(formatted_instr)信号197;否则,若eshift信号164为真,多任务器211的移位输入端会选取缓存器ER2 222的输出;至于其它情形,多任务器211的保持输入端会选取缓存器ER1 221的输出。碰到时钟信号(clk)202的上升缘,缓存器ER1 221会加载多任务器211所输出的值。
较早队列132中的底部多任务式缓存器包括具三输入端的多任务器210,以及缓存器220(以ER0来表示),用以接收多任务器210的输出。多任务器210包括一加载输入端,用以接收格式化指令(formatted_instr)信号197。多任务器210还包括一保持输入端,用以接收缓存器ER0 220的输出。多任务器210还包括一移位输入端,用以接收缓存器ER1 221的输出。多任务器210会接收图1中的eload
信号162,当作控制输入信号。多任务器210还会接收图1中的eshift信号164,当作另一控制输入信号。若eload
信号162为真,则多任务器210的加载输入端会选取格式化指令(formatted_instr)信号197;否则,若eshift信号164为真,多任务器210的移位输入端会选取缓存器ER1 221的输出;至于其它情形,多任务器210的保持输入端会选取缓存器ER0 220的输出。碰到时钟信号(clk)202的上升缘,缓存器ER0220会加载多任务器210所输出的值。缓存器ER0 220的输出是以early0信号193来传送。
现请参照图3,是本发明图1的格式化指令队列187的较晚队列146的方框图。
较晚队列146包括串接成队列的三个暂存式多任务器。三个暂存式多任务器包括图1中的项目LE2、LE1及LE0。
较晚队列146中的顶端暂存式多任务器包括具二输入端的多任务器312,以及缓存器322(以LR2来表示),用以接收多任务器312的输出。多任务器312包括一加载输入端,用以接收图1中的信号X_rel_info 186。多任务器312还包括一保持输入端,用以接收缓存器LR2 322的输出。多任务器312会接收图1中的lload[2]信号142,当作控制输入信号。若lload[2]信号142为真,则多任务器312的加载输入端会选取信号X_rel_info 186;否则,多任务器312的保持输入端会选取缓存器LR2 322的输出。在图2的时钟信号(clk)202的上升缘,缓存器LR2 322会加载多任务器312所输出的值。
较晚队列146中的中间暂存式多任务器包括具有三个输入端的多任务器311,以及缓存器321(以LRl来表示),用以接收多任务器311的输出。多任务器311包括一加载输入端,用以接收信号X_rel_info 186。多任务器311还包括一保持输入端,用以接收缓存器LR1 321的输出。多任务器311还包括一移位输入端,用以接收缓存器LR2 322的输出。多任务器311会接收图1中的lload[1]信号142,当作控制输入信号。若lload[1]信号142为真,则多任务器311的加载输入端会选取信号X_rel_info 186;否则,若lshift信号168为真,多任务器311的移位输入端会选取缓存器LR2 322的输出;至于其它情形,多任务器311的保持输入端会选取缓存器LR1 321的输出。在图2的时钟信号(clk)202的上升缘,缓存器LR1 321会加载多任务器311所输出的值。
较晚队列146中的底部暂存式多任务器包括具三输入端的多任务器310,以及缓存器320(以LR0来表示),用以接收多任务器310的输出。多任务器310包括一加载输入端,用以接收信号X_rel_info 186。多任务器310还包括一保持输入端,用以接收缓存器LR0 320的输出。多任务器310还包括一移位输入端,用以接收缓存器LR1 321的输出。多任务器311会接收图1中的lload
信号142,当作控制输入信号。若lload
信号142为真,则多任务器310的加载输入端会选取信号X_rel_info 186;否则,若lshift信号168为真,多任务器310的移位输入端会选取缓存器LR1 321的输出;至于其它情形,多任务器310的保持输入端会选取缓存器LR0 320的输出。在图2的时钟信号(clk)202的上升缘,缓存器LR0 320会加载多任务器310所输出的值。多任务器310的输出是以图1中的late0信号191来传送。
现请参照图4,是本发明图1的格式化指令队列187的运作时序图。图4显示五个时钟周期,每个时钟周期以图2及3中clk信号202的上升缘为启始。传统上,在图4中,真信号值表示为高逻辑准位。图4是表示一种情形,其中在指令格式化器116产生新的格式化宏指令时,图1的XIQ 154并未填满(也就是,能从指令格式化器116接收微指令),而且格式化指令队列187是空的。
在时钟周期1的期间,指令格式化器116会产生图1中真值的F_new_instr信号152,以表示一个有效的新格式化宏指令存在于图1的格式化指令(formatted_instr)197,如图所示。因为格式化指令队列187为空,所以图1的FIQ控制逻辑118会产生真值的eload
信号162,以将此有效的新格式化宏指令从格式化指令(formatted_instr)197加载EE0,其为格式化指令队列187中最低的空项目。
在时钟周期2的期间,会设定图1的V0 134(格式化指令队列187的项目EE0的有效位),以表示EE0包含一有效指令。在时钟周期2的上升缘,图1的其中一个缓存器183会加载eload
信号162,并输出真值的lload
信号142。因为eload
信号162为真,所以新指令会被加载ER0 220,并经由图1的early0信号193输出,以传送至图1的指令转译器138,如图所示。指令转译器138会转译新的宏指令,并将转译后的微指令171送到XIQ154。此外,控制逻辑102会在X_rel_info 186中产生与新指令有关的新信息,如图所示。因为lload
信号142为真,所以多任务器310会选取加载输入端,并经由late0 191,输出信号X_rel_info 186所提供的新相关信息,以传送至图1的转译指令队列(XIQ)154及多任务器172,如图所示。再者,由于指令转译器138在时钟周期2期间会转译新指令,所以FIQ控制逻辑118会产生图1中真值的eshift信号164,以使得指令在时钟周期3期间会从格式化指令队列187移出。
在时钟周期3的期间,因为新指令已从格式化指令队列187移出,所以V0 134为伪。在时钟周期3的上升缘,XIQ控制逻辑156会取决于转译指令队列(XIQ)154是否为空或非空,而分别将转译微指令171及late0 191所提供的相关指令信息加载执行阶段缓存器176或转译指令队列(XIQ)154。此外,图1的缓存器185会加载eshift信号164,并输出真值的lshift 168。
由图4可观察得知,虽然新的宏指令在时钟周期1的期间产生,而相关信息直到时钟周期2才会产生,但是格式化指令队列187有助于在相同的时钟周期,使相关信息及转译微指令能送到执行阶段。
现请参照图5,是本发明图1的格式化指令队列187的运作时序图。图5与图4类似,其差别只在于图5的情况中,当指令格式化器116产生新的格式化宏指令时,转译指令队列(XIQ)154为满的。
在时钟周期1的期间,XIQ_full 195为真。指令格式化器116会在格式化指令(formatted_instr)197中产生新指令,且使F_new_instr 152为真,如图4的情形。因为格式化指令队列187为空,所以FIQ控制逻辑118会产生真值的eload
信号162,以将有效的新格式化宏指令从格式化指令(formatted_instr)197加载EE0,如图4的情形。
在时钟周期2的期间,V0 134会被设定;缓存器183会输出真值的lload
信号142;新指令会被加载ER0缓存器220,并经由early0信号193输出,以传送至指令转译器138;信号X_rel_info 186中会产生与新指令有关的新信息;以及多任务器310会选取加载输入端,并经由late0信号191,输出信号X_rel_info 186所提供的新相关信息,以传送至转译指令队列(XIQ)154及多任务器172,如图4的情形。然而,由于在时钟周期2启始时转译指令队列(XIQ)154已满,所以FIQ控制逻辑118会产生伪值的eshift信号164,而与图4不同。之后,XIQ控制逻辑156会使XIQ_full信号195除能(deassert),以表示在时钟周期3的期间,指令转译器138将会准备好转译新的宏指令。
在时钟周期3的期间,由于在时钟信号(clk)202的上升缘,eshift信号164为伪,所以新指令会保持于ER0缓存器220中,并经由early0信号193送到指令转译器138进行转译。相对应的是,V0 134仍保持为真。指令转译器138会转译新的宏指令,并将转译微指令171送到转译指令队列(XIQ)154。因为在时钟信号(clk)202的上升缘,llaod
142为真,所以在时钟周期2的期间,信号X_rel_info 186所提供的相关信息会加载LR0缓存器320。因为在时钟周期3的剩余期间,lload
信号142及lshift信号168为伪,所以LR0缓存器320的内容(也就是,与指令有关的新信息)会经由late0信号191被送到转译指令队列(XIQ)154,如图所示。在时钟周期3启始之后,FIQ控制逻辑118会产生真值的eshift信号164,以使得在时钟周期4的期间,新指令将会从格式化指令队列187移出。
在时钟周期4的期间,因为新指令已从格式化指令队列187移出,所以V0有效位134为伪。在时钟周期4的上升缘,XIQ控制逻辑156会将转译微指令171及late0 191所提供的相关指令信息加载转译指令队列(XIQ)154。此外,图1的缓存器185会加载eshift信号164,并且输出真值的lshift 168。
由图5可观察得知,虽然新的宏指令在时钟周期1的期间产生,而相关信息直到时钟周期2才会产生,但是格式化指令队列187有助于在相同的时钟周期,使相关信息及转译微指令能送到XIQ 154。
现请参照图6,是本发明图1的格式化指令队列187的运作时序图。图6与图5类似,其差别只在于图6的情况中,当指令格式化器116产生新的格式化宏指令时,不但转译指令队列(XIQ)154为满,格式化指令队列187亦不是空的。
在时钟周期1的期间,XIQ_full 195为真。指令格式化器116会在格式化指令(formatted_instr)197中产生新指令,且使信号F_new_instr 152为真,如图4及5的情形。因为EE0包含一有效指令,所以V0 134为真;然而,因为EE1未包含一有效指令,所以图1的格式化指令队列187的项目EE1的有效位(V1 134)为伪,如图6所示。因此,FIQ控制逻辑118会产生真值的eload[1]信号162,以将有效的新格式化宏指令从格式化指令(formatted_instr)197加载EE1。信号early0 193会送出保持于EE0中的指令(图6中称为旧指令),而信号late0 191会送出与保持于LE0中的旧指令有关的信息(称为旧信息),如图6所示。
在时钟周期2的期间,V1 134会被设定,以表示EE1现在包含一有效指令。V0有效位134也维持设定状态。旧指令系保持于ER0缓存器220中,而旧信息则保持于LR0缓存器320中。缓存器183会输出真值的lload[1]信号142。新指令会被加载ER1缓存器221,如图6所示。与新指令有关的新信息在信号X_rel_info 186产生,而图3的多任务器311会选取加载输入端,其会被送至缓存器LR1 321。由于在时钟周期2启始时转译指令队列(XIQ)154已满,所以FIQ控制逻辑118会产生伪值的eshift信号164。之后,XIQ控制逻辑156会使信号XIQ_full 195除能,以表示在时钟周期3的期间,指令转译器138将会准备好转译新的宏指令。
在时钟周期3的期间,由于在时钟信号(clk)202的上升缘,eshift信号164为伪,所以新指令会保持于ER1缓存器221中。此外,旧指令保持于ER0 220中,并经由early0 193送到指令转译器138进行转译。V1及V0 134仍保持为真。指令转译器138会转译旧指令,并将其转译的微指令171送到XIQ 154。因为在时钟周期3的剩余期间,lload
信号142及lshift信号168为伪,所以LR0 320的内容(也就是,与旧指令有关的旧信息)会经由late0 191被送到XIQ 154,如图6所示。因为在时钟信号(clk)202的上升缘,llaod
信号142为真,所以在时钟周期2的期间,信号X_rel_info 186所提供的新相关信息会加载LR1缓存器321。在时钟周期3启始之后,FIQ控制逻辑118会产生真值的eshift信号164,以使得在时钟周期4的期间,新指令将会从EE1移到EE0。
在时钟周期4的期间,因为新指令已从EE1移到EE0,所以V1 134为伪。在时钟周期4的上升缘,XIQ控制逻辑156会将从旧指令所转译的微指令171及late0 191所提供的相关指令信息加载XIQ 154。此外,缓存器185会加载eshift信号164,并且输出真值的lshift 168。因为XIQ 154已准备好接收另一个微指令,所以eshift 164会保持为真。由于在时钟信号(clk)202的上升缘,eshift信号164为真,所以新指令会从ER1 221移到ER0 220,并经由early0 193送至指令转译器138进行转译。V0 134仍保持为真。指令转译器138会转译新指令,并将从新指令所转译的微指令171送到XIQ 154。因为在时钟周期4的期间,lshift 168为真,所以与保持于LR1 321中之新指令有关的信息,会在多任务器310的移位输入端被选取,并经由late0信号191传送,如图6所示。
在时钟周期5的期间,因为新指令已从格式化指令队列187移出,所以FIQ控制逻辑118会清除V0 134。在时钟周期5的上升缘,XIQ控制逻辑156会将从新指令所转译的微指令171及late0 191所提供的相关指令信息加载XIQ 154。
由图6可观察得知,虽然新的宏指令在时钟周期1的期间产生,而相关信息直到时钟周期2才会产生,但是格式化指令队列187有助于在相同时钟周期,使相关信息及转译微指令能送到XIQ 154。
虽然本发明及其目的、特征与优点已详细叙述,其它实施例也可包含在本发明的范围内。例如,虽然所说明的实施例,是将宏指令做缓冲,以送到指令转译器转译成微指令,但本发明的范围并不限于这样的实施例;确切地说,本发明可广泛地应用于任何需要缓冲指令,且指令相关信息在产生指令本身的时钟周期后一时钟周期内产生的情形。再者,虽然前述实施例是在可处理可变长度指令的微处理器中实施,但本发明不受限于此,也可使用于固定长度指令的处理器中。
本发明除了利用硬件来实施外,也可实施于计算机可使用(如可读取)媒介所内含的计算机可读取码(如计算机可读取程序代码、数据等)中。计算机码使本发明所揭示的功能或架构(或两者)成为可行。例如,这可藉由使用一般程序语言(如C、C++、JAVA及类似的程序语言);GDSII数据库;包括Verilog HDL、VHDL、Altera HDL(AHDL)等的硬件描述语言(HDL);或此技术领域中其它可用的程序化及/或电路记录工具来达到。计算机码可置于任何已知的计算机可使用(如可读取)媒介,包括半导体内存、磁盘、光盘(如CD-ROM、DVD-ROM及类似物),并可作为计算机数据信号,内含于计算机可使用(如可读取)传输媒介(如载波或任何其它媒介,包括数字、光学或运用模拟信号的媒介)中。就此而言,计算机码可在通讯网路(包括网际网络及内部网络)上传输。要了解到的是,本发明可实施于计算机码(如智能财产权(IP)核心(如微处理器核心)的一部分,或如系统层级的设计(如系统单芯片(SOC)))中,并且可转换成硬件,作为集成电路制造的一部分。本发明也可实际作为硬件及计算机码的组合。
以上所述,仅为本发明的较佳实施例,不能以此限定本发明所实施的范围。凡依照本发明权利要求在不脱离本发明的精神和范围内所作的均等变化与修饰,均应属于本发明专利权利要求书所要求保护的范围内。
权利要求
1.一种用以缓冲一管线化微处理器中的指令及相关信息的装置,其中该缓冲装置直到取得该指令后至少一个时钟周期,才取得该相关信息,该装置包括一第一队列,具有第一多个项目,每个项目用以储存一指令;一第二队列,具有对应于该第一多个项目的第二多个项目,每个项目用以储存与该第一队列中对应该指令有关的信息;多个控制信号,耦接至该第一队列,用以加载、移位及保持所述指令于该第一队列中;以及多个缓存器,接收所述控制信号,并输出延迟一个时钟周期的所述控制信号,以加载、移位及保持该相关信息于该第二队列中。
2.如权利要求1所述的装置,其中该装置耦接于该微处理器的指令高速缓存与该微处理器管线的指令执行阶段之间。
3.如权利要求2所述的装置,其中该第二队列组态为在该第二队列接收到该相关信息的相同时钟周期内,将该相关信息送到该执行阶段。
4.如权利要求3所述的装置,其中该第二队列的该第二多个项目中的一底部项目包括一缓存器,用以在该相同时钟周期后的时钟周期内,选择性地储存该第一队列的该第一多个项目中的对应底部项目所存的该指令对应的该相关信息;以及一多任务器,具有一输入端,用以在该相同时钟周期内接收该相关信息,并具有一输出端,耦接至该缓存器的一输入端及该执行阶段,依据一个或多个该延迟时钟周期的所述控制信号,在该相同时钟周期内,选择性地将该相关信息送到该执行阶段。
5.如权利要求1所述的装置,其中该相关信息包括储存于该第一队列中的对应该指令的一指令指针。
6.如权利要求1所述的装置,其中该相关信息包括储存于该第一队列中的一对应该指令的长度。
7.如权利要求1所述的装置,其中该相关信息包括与储存于该第一队列中的对应该指令相关的分支预测信息,其中该对应的该指令被预测为一分支指令。
8.如权利要求7所述的装置,其中该分支预测信息包括分支过程表信息。
9.如权利要求7所述的装置,其中该分支预测信息包括用来预测该分支指令的一线性指令指针。
10.如权利要求7所述的装置,其中该分支预测信息包括用来预测该分支指令的一分支样本。
11.如权利要求7所述的装置,其中该分支预测信息指定该分支指令的一分支指令类型。
12.如权利要求1所述的装置,其中该相关信息包括储存于该第一队列中的对应该指令的一位移字段。
13.如权利要求1所述的装置,其中该相关信息包括储存于该第一队列中的对应该指令的一立即字段。
14.一种指令缓冲器,其中包括多个多任务式缓存器,每个用以储存一指令;多个暂存式多任务器,每个用以储存与所述多任务式缓存器的对应缓存器中的该指令有关的信息;一控制逻辑,耦接至所述多任务式缓存器,用以产生一控制信号,以选择性地将该指令加载所述多任务式缓存器中的一个;以及一缓存器,用以在第一时钟周期内,接收该控制信号的值,并在该第一时钟周期后的第二时钟周期内输出该值,以选择性地加载对应于所述多任务式缓存器中的一个所述暂存式多任务器中的一个内在的该相关信息。
15.如权利要求14所述的指令缓冲器,其中所述多任务式缓存器中的一个在该第二时钟周期内,会将该指令输出至一指令转译器。
16.一种微处理器,包括一指令格式化器,用以在第一时钟周期内,输出一分支指令;一控制逻辑,用以在该第一时钟周期后的第二时钟周期内,产生与该分支指令的预测有关的信息;以及一指令缓冲器,耦接至该指令格式化器,用以在该第一时钟周期期间缓冲该分支指令,并在该第二时钟周期内接收该信息,若该指令缓冲器在该第一时钟周期期间为空,则在该第二时钟周期内选择性地输出该信息,而若该指令缓冲器在该第一时钟周期期间不为空,则在该第二时钟周期期间选择性地缓冲该信息。
17.如权利要求16所述的微处理器,还包括一执行阶段,耦接至该指令缓冲器,若该指令缓冲器在该第一时钟周期期间为空,则该执行阶段在该第二时钟周期内,从该指令缓冲器接收该信息,而若该指令缓冲器在该第一时钟周期期间不为空,则该执行阶段在该第二时钟周期后的一第三时钟周期内,从该指令缓冲器接收该信息。
18.如权利要求17所述的微处理器,更包括一指令转译器,耦接至该指令缓冲器,若该指令缓冲器在该第一时钟周期期间为空,则该指令转译器在该第二时钟周期内,从该指令缓冲器接收该分支指令,而若该指令缓冲器在该第一时钟周期期间不为空,则该指令转译器在该第三时钟周期内,从该指令缓冲器接收该分支指令。
19.如权利要求18所述的微处理器,其中该指令缓冲器若在该第一时钟周期期间为空,则该执行阶段在该第二时钟周期内,会从该指令转译器接收一转译微指令,而该指令缓冲器若在该第一时钟周期期间不为空,则该执行阶段在该第三时钟周期内,会从该指令转译器接收该转译微指令。
20.一种缓冲指令及其较晚产生相关信息的方法,用以缓冲具有一管线的微处理器中的指令及相关信息,其中包括在第一时钟周期内,将一指令加载一指令队列;在该第一时钟周期后的第二时钟周期内,产生与该指令有关的信息;判断该指令在该第二时钟周期期间,是否从该队列移出;以及若该指令未从该队列移出,则在该第二时钟周期内将该相关信息加载该队列,而若该指令已从该队列移出,则在该第二时钟周期期间,绕过该队列而将该相关信息连同该指令送至该管线。
21.如权利要求20所述的方法,还包括若该指令未从该队列移出,则判断该指令在该第二时钟周期期间是否在该队列内往下移位;以及若该指令在该第二时钟周期期间在该队列内往下移位,则在该第二时钟周期后的第三时钟周期内,将该相关信息在该队列内往下移位。
22.一种指令缓冲器,包括一第一多任务器,包括一输出端、一保持数据输入端、一加载数据输入端以在一第一时钟周期内接收一指令,以及一控制输入端以接收一第一控制信号,其中若该控制输入端的值为真,则该第一多任务器选取该加载数据输入端,否则会选取该保持数据输入端;一第一缓存器,包括耦接至该第一多任务器输出端的一输入端,以及耦接至该第一多任务器保持数据输入端的一输出端;一第二缓存器,具有一输入端及一输出端;一第二多任务器,包括耦接至该第二缓存器输入端的一输出端、耦接至该第二缓存器输出端的一保持数据输入端、一加载数据输入以在该第一时钟周期后的第二时钟周期内接收与该指令有关的信息,以及一控制输入端以接收一第二控制信号,其中若该控制输入端的值为真,则该第二多任务器选取该加载数据输入端,否则会选取该保持数据输入端;以及一第三缓存器,具有一输入端以在该第一时钟周期内接收该第一控制信号,以及一输出端以在该第二时钟周期内产生该第二控制信号,由此,若该第一控制信号在该第一时钟周期期间为真,则在该第二时钟周期内,会输出该指令及该相关信息。
23.如权利要求22所述的指令缓冲器,其中该第二多任务器还包括一移位数据输入端,以接收一第四缓存器的输出,该第四缓存器是用以储存位于该第二缓存器及该第二多任务器所包含的一项目之上的该指令缓冲器的一项目的数据,该第二多任务器还包括一第二控制输入端,以接收一第三控制信号,其中若该控制输入端的值为假且该第二控制输入端的值为真,则该第二多任务器选取该移位数据输入端,否则会选取该保持数据输入端。
24.一种内含于传输媒介中的计算机数据信号,包括;计算机可读取程序代码,以在一管线化微处理器中提供一种可缓冲指令及相关信息的装置,其中该缓冲装置是直到取得该指令后至少一时钟周期,才取得该相关信息,该程序代码包括第一程序代码,以提供一第一队列,其具有第一多个项目,每个用以储存一指令第二程序代码,以提供一第二队列,其具有对应于该第一多个项目的第二多个项目,每个用以储存与该第一队列中一对应该指令有关的信息;第三程序代码,以提供多个控制信号,耦接至该第一队列,用以加载、移位及保持该第一队列中的这些指令;以及第四程序代码,以提供多个缓存器,接收这些控制信号,并输出延迟一时钟周期的这些控制信号,以加载、移位及保持该第二队列中的该相关信息。
全文摘要
本发明提供一种指令缓冲装置及方法。该装置包括较早队列及较晚队列和多个缓存器。较早队列会接收在第一时钟周期期间所产生的指令。较晚队列则在第一时钟周期后的第二时钟周期期间,接收与指令有关的信息。较早队列会接收加载/移位控制信号,以进行较早队列的加载/移位。缓存器会接收较早队列的加载/移位信号,并将延迟后的这些信号送到较晚队列,用以控制较晚队列中相关信息的加载/移位。较晚队列组态为当该装置为空时,可在第二时钟周期期间提供相关信息,也就是在其相关指令从较早队列送出的相同时钟周期内提供。
文档编号G06F9/32GK1514357SQ20031012042
公开日2004年7月21日 申请日期2003年12月11日 优先权日2003年4月23日
发明者汤玛斯·C·麦当劳, 汤玛斯 C 麦当劳 申请人:智慧第一公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1