保持分离队列功能单元之间的状态一致性的方法及装置的制作方法

文档序号:6379508阅读:161来源:国知局
专利名称:保持分离队列功能单元之间的状态一致性的方法及装置的制作方法
技术领域
本发明涉及管线化微处理器的领域,特别涉及具有多个功能单元的管线化微处理器,即保持分离队列功能单元之间的状态一致性的方法及装置。
背景技术
现代的微处理器通常具有多个功能单元,如分别用以执行整数、浮点及多媒体指令的整数单元(integer unit,简称IU)、浮点单元(floating-point unit,简称FPU)及向量算术单元,如MMX单元(MXU)。每一功能单元为一具有多重阶段的管线,当一个指令或运算经过管线时,每个阶段都会执行此指令或运算的一部份。
因为浮点及多媒体指令通常涉及较长的算术计算,所以FPU及MXU通常会比IU需要更多的时钟来执行指令。这在某些情况下,会造成IU管线的运作停顿,例如FPU或MXU尚未准备好接收另一个指令或运算的时候。此外,由于数据高速缓存会在FPU或MXU未准备好接收其所要送出的数据而产生停顿,所以FPU及MXU需要更多时钟来执行的这个事实,会造成数据高速缓存的运作缺乏效率。为了解决这些问题,可加入一个指令及数据队列至FPU或MXU,以接收指令及其相关的数据,以使IU及数据高速缓存能持续运作。
微处理器纳入微处理器的用户可见(user-visible)状态的概念。例如,在x86结构的微处理器中,用户可见状态包括用户可见缓存器档案,其包括一般用途缓存器(如EAX缓存器)、功能单元的相关缓存器(如浮点缓存器)以及如标志缓存器的其它缓存器。
一个指令必须已到达处理器结构所定义的完成时刻,才可更新用户可见状态,例如修改缓存器档案。这是因为某些事件或条件会发生,而将指令无效化。也即,某些事件或条件会发生,以致于处理器应该停止执行指令,特别是不应该更新处理器的用户可见状态。例如,指令会依据分支指令预测,被假想地提取,以进入执行流中。若处理器后来判断此分支预测为错误,即被假想地提取,以进入执行流中。若处理器后来判断此分支预测为错误,即使指令已在功能单元管线的各个阶段完成部份执行,也必须将此分支后所假想执行的指令无效化,且不允许其更新处理器的用户可见状态。另外一种无效化事件的例子为异常(exception),如分页错误异常、一般保护异常或无效运算码异常。此外,指令可能在初进入管线时就无效。这种情况最常见的原因,是由于未命中指令高速缓存而造成管线阶段未填入有效指令,而产生运作停顿或泡沫(bubble)。
当一功能单元如FPU准备要完成指令的执行时,FPU需依据所执行的特定指令,来更新处理器的用户可见状态。为了更新用户可见状态,FPU必须知道此指令仍是有效的,也即,准许此指令更新处理器的用户可见状态。为了确定此指令仍是有效的,常用的处理器会在执行指令有效化功能的功能单元的末端,设置一队列。
例如,在图1的微处理器100中,整数管线104为执行指令有效化功能的功能单元。也即,会将无效化条件(如分支预测错误或异常)告知整数管线104,其会依据所告知的条件,来记录指令或运算是否有效。图1的常用微处理器100会在整数管线104的末端,设置队列106。因此,指令102必须在置入FPU队列106之前,经过整数管线104。通过将队列106置于整数管线104的末端,一旦指令或运算到达整数管线104的末端,就能确保不会发生使指令或运算无效化的事件或条件。因此,一旦指令到达管线104的末端,且进入FPU队列106,即可确保指令为有效。
然而,将队列置于执行有效化功能的功能单元末端会有缺点。要求指令在进入队列之前,需进行至有效化功能单元管线的末端,会使指令在进入队列前,必须先通过有效化功能单元管线的底部阶段,这些阶段原本可能不需要经过,却因此而造成额外的延迟。也即,功能单元原本可能在离有效化功能单元管线末端还很远的一个阶段,即可接收指令并开始执行。例如,在有效化功能单元管线的中间阶段,数据高速缓存可能已提供其它功能单元如FPU所需的数据。因此,指令通过其余的有效功能单元管线阶段所需的时钟周期,就会造成不必要的延迟。
额外延迟会造成问题的一个例子是,MXU提供整数乘法功能给整数单元的情形。因为MXU具有用以执行MXU乘法指令的整数乘法器,整数单元中的整数乘法器便可以拿掉,以降低微处理器电路晶粒的尺寸,而整数乘法指令就能另以MXU整数乘法器来执行。然而,由于在程序指令序列中,整数乘法指令是相当常用的,所以在进行整数乘法时,将MXU队列置于整数单元管线末端所带来的额外延迟,可能会令人无法接受。
然而,若在结构上,将MXU队列置于某个其后指令可能会被无效化的阶段,则一旦指令进入MXU队列,MXU就无法确定指令仍是有效的。也即,因为MXU队列位于整数管线的末端之前,所以当指令位于MXU队列中,或当MXU已从队列接收到指令而正执行时,可能会发生无效化条件。而当指令经过IU及MXU管线时,就不再是密集连锁地进行。因此,由于整数单元可能会在MXU队列的任何延迟期间使指令无效化,所以MXU不知道其是否可更新用户可见状态。
因此,需要一种机制,其可在功能单元队列未对准的情况下,维持功能单元之间的指令状态一致性。

发明内容
本发明提供一种装置,用以追踪一功能单元指令队列中的指令或运算的年龄(age),不管指令或运算在队列中的位置是什么。也即,此功能单元会随时记录指令所处的对应IU管线阶段。此外,对于队列中的每个指令,功能单元会记录一有效位。若IU通知功能单元有一指令已被无效化,则功能单元会相应地更新有效位。若指令在功能单元中完成,并且其年龄显示其已通过IU管线的末端且仍然有效,则功能单元可更新机器的用户可见状态。另外,若在功能单元中,指令尚未完成,并且其年龄显示其已通过IU管线的末端且仍然有效,则功能单元知道其必须完成指令。
因此,为了达到上述目的,本发明的一项特征是,提供一种微处理器中的指令队列装置。此指令队列装置包括多个第一储存组件,每个储存组件储存一个由第一功能单元所执行的指令,该指令也储存于第二功能单元的多个管线阶段的其中一个。此指令队列装置还包括多个第二储存组件,耦接至第一多个储存组件,其每个储存组件储存第一多个储存组件的对应的一个中所存的指令的一年龄,此年龄用以指出指令储存于第二功能单元的多个管线阶段的哪一个之中。此指令队列装置还包括多个第三储存组件,耦接至第一多个储存组件,其每个储存组件储存第一多个储存组件的该对应的一个中所存的指令的一有效位。此有效位用以指出指令是否有效。
如上所述的指令队列装置,其中该第一功能单元使用该年龄及该有效位,以判断是否要以该指令的结果更新该微处理器的一用户可见状态。
如上所述的指令队列装置,其中该指令队列装置从该第二功能单元的这些管线阶段中的一预定阶段接收该指令,其中在该指令被存入该预定阶段之后,使该指令无效化的一条件可能会发生。
如上所述的指令队列装置,其中在该第二功能单元的这些管线阶段中的一指令丢弃阶段之前,该指令队列装置从该第二功能单元的这些管线阶段中的一阶段接收该指令。
如上所述的指令队列装置,还包括一控制逻辑,耦接至这些第二及第三储存组件,用以更新该年龄及该有效位。
如上所述的指令队列装置,还包括一输入端,耦接至该控制逻辑,用以从该第二功能单元接收一信号,该信号指出该第二功能单元是否停顿或正使该指令沿这些管线阶段移动,其中该控制逻辑会响应该信号,而更新该年龄及该有效位。
如上所述的指令队列装置,还包括多个输入端,耦接至该控制逻辑,每个输入端用以从该第二功能单元接收一信号,该信号指出也存于该第二功能单元的这些管线阶段的该一个中的该指令是否有效,其中该控制逻辑会依据该信号,更新该有效位。
如上所述的指令队列装置,其中该控制逻辑会依据该指令队列装置是否正将该指令从这些第一储存组件中的一个移至这些第一储存组件中的另一个,而更新该年龄及该有效位。
如上所述的指令队列装置,其中若该指令正被加载该指令队列装置,则该控制逻辑将该年龄更新为一初始年龄值。
如上所述的指令队列装置,还包括一输入端,耦接至该控制逻辑,用以从该第二功能单元接收一信号,该信号指出当该指令被存入该第二功能单元的这些管线阶段中一预定管线阶段时,一无效化条件是否已发生,其中当该指令被存入该预定管线阶段时,若该无效化条件发生,则该控制逻辑将该有效位更新为一无效值。
如上所述的指令队列装置,其中该微处理器依据该年龄及该有效位,判断是否要以该指令的结果更新该微处理器的一用户可见状态。
另一方面,本发明的一项特征是提出一种微处理器中的装置,用以维持二个指令管线间的指令状态一致性,此二个指令管线由于一指令队列将其分离而异步地运作。此指令队列具有N个项目,用以储存N个指令。此装置具有对应于该N个指令队列项目的N个逻辑组件。每个逻辑组件包括一年龄缓存器,以储存该N个指令其中一个的年龄,此年龄从一年龄信号所接收,并指出该指令还储存于该二个管线的第一个管线中的哪一阶段。每个逻辑组件还包括一有效缓存器,以储存该N个指令其中一个的一有效位。每个逻辑组件还包括一多任务器,其依据该年龄信号选取多个有效位信号中的一个,提供至该有效缓存器。这些有效位信号指出第一管线的对应多个阶段中所储存的指令是否有效。
如上所述微处理器中的装置,其中该N个逻辑组件耦接在一起形成一队列,以对应于该指令队列的该N个项目。
如上所述微处理器中的装置,每一该N个逻辑组件还包括一更新逻辑,耦接至该年龄缓存器,用以依据该第一管线是否产生停顿,而更新该年龄。
如上所述微处理器中的装置,其中该多任务器也接收选择性地从该有效缓存器的一输出所耦接的一有效输入。
如上所述微处理器中的装置,每一该N个逻辑组件还包括一无效化逻辑,耦接至该有效缓存器,用以响应于一异常信号,而将该指令无效化,该异常信号表示当该指令储存于该第一管线的一预定阶段中时,发生一将该指令无效化的异常。
另一方面,本发明的一项特征是提出一种微处理器。此微处理器包括第一指令管线,其包括多个阶段,用以储存指令。此微处理器还包括第二指令管线,耦接至第一指令管线,以从第一指令管线接收这些指令的第一部份,并加以执行。此微处理器还包括一指令队列,用以储存该第一部份指令的一第二部份,直到第二指令管线准备好执行该第二部份。此微处理器还包括一控制逻辑,耦接至该指令队列,用以储存该第二部份的每个指令的一目前状态及一有效位。此目前状态指出,该第二部份的指令系储存于这些第一指令管线阶段中的哪个阶段。
如上所述的微处理器,其中该指令队列及该第二指令管线的运作,与该第一指令管线的运作为异步。
如上所述的微处理器,还包括一多任务器,耦接至该指令队列及该第二指令管线,用以选择性地绕过该第二指令管线中的该指令队列。
如上所述的微处理器,还包括一数据高速缓存,耦接至该第一指令管线,用以提供这些指令所指定的数据;以及一数据队列,耦接至该数据高速缓存,用以储存该第二部份指令所指定的数据。
如上所述的微处理器,其中该目前状态也指出该指令是否已从这些第一指令管线阶段丢弃。
另一方面,本发明的一项特征是提出一种维持微处理器中功能单元间的指令状态一致性的方法,此微处理器的阶段由于一队列的存在而未对准。此方法包括将一指令储存于第一功能单元的一管线阶段中,将该指令的第一有效位储存于此管线阶段中,以及将该指令储存于第二功能单元的一队列,直到第二功能单元准备好执行该指令。此方法还包括将该指令的第二有效位储存于该队列中,以及将该指令的年龄储存于该队列中。此年龄指出该指令储存于第一功能单元的哪个管线阶段。此方法还包括接收一信号,其显示第一功能单元管线是否产生停顿,以及依据第一有效位及该信号的接收,更新此年龄及第二有效位。
如上所述的方法,还包括接收一信号,其表示是否已产生一个使该指令无效的条件;以及若该信号表示已产生使该指令无效的该条件,则将一值存于该第二有效位,以显示该指令为无效。
如上所述的方法,还包括依据该第二有效位及该年龄,判断是否要更新该微处理器的一用户可见状态。
如上所述的方法,其中该年龄也指出该指令是否已从该第一功能单元丢弃。
另一方面,本发明的一项特征是提出微处理器中另一种指令队列装置。此指令队列装置包括第一多个储存组件,每个组件储存一指令,由第一功能单元执行。该指令也储存于第二功能单元的多个管线阶段其中之一。此指令队列装置还包括第二多个储存组件,耦接至该第一多个储存组件,每一该第二多个储存组件储存第一多个储存组件中一对应组件所存的指令的年龄。此年龄指定第二功能单元的这些管线阶段其中之一。所指定的第二功能单元管线阶段则储存该指令的目前状态。
如上所述的另一种指令队列装置,其中该目前状态指出该指令是否有效。
本发明的一项优点是,可避免常用做法中,将指令队列置于执行指令有效化功能的功能单元的管线末端所造成的延迟。取而代之的是,本发明允许将队列置于较早的管线阶段,同时确保指令能正确地执行。
本发明的其它特征及优点,在配合下列说明及附图后,将更能突显出来。


图1显示一公知技术的微处理器,其在整数管线末端具有一功能单元队列。
图2是本发明的微处理器的方块图。
图3是本发明控制图2的MXU指令队列的逻辑的方块图。
图4是本发明图3的逻辑产生下个状态值的真值表。
图5是本发明图2的微处理器的运作图例。
图中100,200微处理器102,276指令104,202整数管线106FPU队列204数据高速缓存206MXU管线208MXU数据高速缓存212MXU指令队列214多任务器221,261R-阶段222,263A-阶段223,264D-阶段224,265G-阶段
225,266E-阶段226,267S-阶段227,268W-阶段262R2-阶段269M-阶段274数据总线300,322逻辑302多任务器1304多任务器2306多任务器3308有效缓存器312年龄缓存器314与门316多任务器4318比较器332MmxValNxt_G334MmxValNxt_E336MmxValNxt_S338Except_W信号342Val(X+1)344Val(X)352PS(X+1)354PS(X)362NS(X+1)364NS(X)372HldX374重置信号376LdX_P378Gate_A信号382信号age_update
384年龄输出部份386Val输出392输出信号NS394输出信号PS396输出信号Val具体实施方式
现请参照图2,其为本发明的微处理器200的方块图。微处理器200包括一整数管线202、一数据高速缓存204、一MXU管线206、一MXU数据队列208以及一MXU指令队列212。
整数管线202包括连在一起的多个阶段,包括R-阶段221、A-阶段222、D-阶段223、G-阶段224、E-阶段225、S-阶段226以及W-阶段227。R-阶段221包括用以储存数据的缓存器档案,这些数据如指令操作数、地址产生操作数、处理器的控制与状态信息、标志、堆栈指针、区段缓存器以及指令指针或程序计数。A-阶段222包括用以产生内存地址的地址产生器。D-阶段223及G-阶段224为数据阶段,用以从内存及数据高速缓存204加载数据。数据由数据高速缓存204送到G-阶段224。E-阶段225包括执行单元,如执行整数算术或逻辑运算的算术逻辑单元。S-阶段226包括用以将指令结果储存至内存及数据高速缓存204的逻辑。W-阶段227包括用以将指令结果写回R-阶段221的逻辑。也即,W-阶段227用以更新微处理器200的用户可见状态。W-阶段227也会丢弃指令,且为整数管线202的最后阶段。此外,W-阶段227会提供操作数转送功能,用以将结果转送至整数管线202中的G-阶段224、E-阶段225及S-阶段226。
R-阶段221会从图上未显示的其它整数管线202的阶段(如指令提取与译码阶段)接收指令276。指令276会沿着整数管线202的各个阶段而下,直到抵达整数管线202的最后阶段,即W-阶段227。在将指令译码时,也会依据所译码指令的类型,将其送至其它适当的功能单元。特别是,MMX指令会被送到MXU管线206。在一实施例中,浮点指令会被送到浮点功能单元。
MXU管线206包括连在一起的多个阶段,类似于且大部分对应于整数管线202。MXU管线206包括R-阶段261、R2-阶段262、A-阶段263、D-阶段264、G-阶段265、E-阶段266、S-阶段267、W-阶段268以及M-阶段269。在一实施例中,具有对应于整数管线202阶段的名称的MXU管线206阶段会执行相似的功能。特别是,E-阶段266包括执行单元,如算术逻辑单元,用以执行多媒体指令。
R2-阶段262为额外的缓存器阶段,其提供一个时钟周期的延迟给数据高速缓存204,以将数据送到MXU管线206。由于有R2-阶段262,所以MXU管线206相对于整数管线202,会向下多移一个阶段。因此,MXU管线206的D-阶段264会对应于整数管线202的G-阶段224。M-阶段269会执行结果回写功能,以更新微处理器200的用户可见状态,与整数管线202的W-阶段227相似。此外,M-阶段269会提供操作数转送功能,以将结果转送至MXU管线206的G-阶段265、E-阶段266或S-阶段267。当指令到达M-阶段269时,M-阶段269依据指令是否有效及指令已到达整数管线202的哪个阶段,或指令是否已从整数管线202丢弃,来判断是否要更新微处理器200的用户可见状态或转送操作数。该有效性及所到达的阶段由MXU指令来记录,如下文配合其余附图所做的详细说明。
整数管线202的R-阶段221至D-阶段223的相同停顿条件,也适用于MXU管线206的R-阶段261至A-阶段263。因此,已到达MXU管线206的D-阶段264的指令也同步到达整数管线202的G-阶段224。然而,对于指令在MXU指令队列212及MXU管线206的D-阶段264至M-阶段269内的停顿或移动,则由另一组条件控制,与整数管线202阶段的G-阶段224至W-阶段227的控制条件不同。也即,MXU指令队列212及MXU管线206阶段的D-阶段264至M-阶段269,与整数管线202的G-阶段224至W-阶段227的运作为异步。
MXU管线206的R-阶段261也会从整数管线202的指令提取及译码阶段中,选择性地接收指令276。因此,若指令276为MMX指令,当其被提取及译码时,会经过整数管线202,且会沿着MXU管线206的各个阶段而下,直到抵达MXU管线206的最后阶段(M-阶段269)及整数管线202的最后阶段。取决于某些条件是否存在(如配合图3部分的说明),指令276也会在通往MXU管线206末端的路径上,通过MXU指令队列212。
MXU数据队列208由一数据总线274耦接至数据高速缓存204。MXU数据队列208包括多个储存组件(称为队列项目),用以储存从数据总线274上的数据高速缓存204所接收的数据。在图2的实施例中,MXU数据队列208包括五个队列项目。MXU数据队列208会将数据从其底部项目送到MXU管线206的G-阶段265。
结构上,MXU指令队列212位于MXU管线206的D-阶段264中。MXU指令队列212包括多个储存组件(称为队列项目),用以储存从D-阶段264所接收的指令。在图2的实施例中,MXU指令队列212包括五个队列项目,标示为QD0 240、QD1 241、QD2 242、QD3 243以及QD4 244。QD0 240为MXU指令队列212的底部项目,而QD4 244为MXU指令队列212的顶端项目。也即,当MXU指令队列212已满时,QD0 240位于MXU指令队列212的头端且保有最旧的指令,而QD4 244则位于MXU指令队列212的尾端且保有最新的指令。当指令进入MXU指令队列212时,其会进入最接近MXU指令队列212的底部或头部的第一个空项目。例如,若指令正占据QD0240及QD1 241,且QD2 242为下个空项目,则进来的指令将会储存于QD2242中。若MXU指令队列212完全为空,则指令将会储存于QD0 240中。
MXU管线206的D-阶段264还包括一个具有两个输入端的多任务器214。多任务器214的第一输入端直接从D-阶段264接收指令。多任务器214的第二输入端则从QD0 240,也即MXU指令队列212的底部项目接收指令。多任务器214的输出端会从二个输入端选取指令,以送至MXU管线206的G-阶段265。当一指令到达D-阶段264,若此指令有效且MXU指令队列212为空,并且MXU管线206正在移动(也即未停顿),则多任务器214会选择第一输入端,以将指令直接送到G-阶段265,由此绕过MXU指令队列212。然而,若MXU指令队列212不为空或MXU管线206有停顿,则多任务器214会选择第二输入端,以将QD0 240中的指令送到G-阶段265,直到MXU指令队列212变成无指令的时候。
现请参照图3,其为本发明控制图2的MXU指令队列212的逻辑300的方块图。控制逻辑300包括四个多任务器(标示为多任务器1 302、多任务器2 304、多任务器3 306及多任务器4 316)、一年龄缓存器312、一有效缓存器308及其它相关逻辑。对于MXU指令队列212的项目所储存的每个指令,控制逻辑300会记录其年龄及有效状态位。此年龄及有效位分别储存于年龄缓存器312及有效缓存器308中。在图3的实施例中,年龄缓存器312包括二个位,而有效缓存器308包括一个位。
在图3中,指令的年龄标示为“PS”,即目前状态(present state)。指令的年龄指出其目前在整数管线202中所处的阶段。也即,年龄值与指令在整数管线202的阶段位置的对应关系如下00=整数管线202的E-阶段22501=整数管线202的S-阶段22610=整数管线202的W-阶段22711=超越整数管线202的W-阶段227因此,一旦指令到达11的年龄,若其有效位仍处于设定状态,则MXU知道指令将完成,且MXU可更新用户可见的处理器状态。在图3中,“NS”表示整数管线202的下一个阶段。
每个MXU指令队列212的项目都配有如图3的控制逻辑300。也即,对于图2的五项目队列而言,会搭配五组图3的控制逻辑300。在队列的配置中,五组控制逻辑300耦接在一起,以使得在MXU指令队列212中,一项目的相关控制逻辑300的输出会变成下个项目的控制逻辑300的输入。图3中,“X”系表示MXU指令队列212中一已知项目,“X+1”则表示在项目X之后,MXU指令队列212中下个最高或最新的项目。因此,PS(0)为队列中最旧或最低项目(即图2的QD0 240)的年龄。
控制逻辑300包括一个2∶1多任务器302,标示为多任务器1 302。多任务器1 302包括三对输入。第一对输入为Val(X)344及Val(X+1)342。第二对输入为PS(X)354及PS(X+1)352。第三对输入为NS(X)364及NS(X+1)362。
信号Val(X)344为多任务器4 316的输出,其表示MXU指令队列212的项目X所储存的指令目前是否有效。信号Val(X+1)342为MXU指令队列212的项目X+1的多任务器4 316的输出,其表示项目X+1所储存的指令目前是否有效。
信号PS(X)354表示MXU指令队列212的项目X所储存指令的目前年龄,其储存于该指令的年龄缓存器312中。也即,PS(X)354表示整数管线202的哪一个阶段保有也储存在MXU指令队列212的项目X中的指令。信号PS(X+1)352表示MXU指令队列212的项目X+1所储存指令的目前年龄,其储存于该指令的年龄缓存器312中。
控制逻辑300还包括逻辑322,其依据PS(X)354及信号LdX_P 376产生信号NS(X)364,如图4的真值表所示。若指令最初被加载于MXU指令队列212的项目X中,则LdX_P为真或致能(active)。对于保有MXU指令队列212的项目X所存指令的整数管线202阶段,信号NS(X)364指出其后的下个整数管线202阶段。而对于保有MXU指令队列212的项目X+1所存指令的整数管线202阶段,信号NS(X+1)362则显示其后的下个整数管线202阶段。如图4的真值表所显示,若指令最初被加载MXU指令队列212中,则NS(X)364为00,其对应于整数管线202的E-阶段225。否则,NS(X)364由PS(X)354及HldX_P 372中决定,如图4的真值表所示。
请再参照图3,多任务器1 302会依据一选择输入HldX_P 372,从三对输入的每一对中,选取其中一个输入。HldX_P 372表示MXU指令队列212中的项目是否向下移位。当一指令要在MXU指令队列212中向下移位时,如由于某个指令要从MXU指令队列212移除,HldX_P 372会变为除能(inactive)。除能的HldX_P 372会使多任务器1 302从MXU指令队列212的下个较高项目中,选取Val(X+1)342、PS(X+1)352及NS(X+1)362。致能的HldX_P 372则会使多任务器1 302维持来自于MXU指令队列212的目前项目中Val(X)344、PS(X)354及NS(X)364的值。多任务器1 302会于输出信号NS 392中提供所选取的下个阶段值、于输出信号PS 394中提供所选取的目前状态值,并于输出信号Val 396中提供所选取的有效位值。
控制逻辑300还包括一个耦接至多任务器1 302的3∶1多任务器,标示为多任务器2 304。多任务器2 304用以将项目X中的指令的年龄更新至其适当值。多任务器2 304会接收三个指令状态值,也即三组包含一有效位及二个年龄位的值,并且选取其中一个状态值来输出。第一指令状态值包括多任务器1 302的PS输出394及Val输出396。也即,第一指令状态包括由多任务器1 302从PS(X)354与PS(X+1)352中所选取的年龄,以及由多任务器1 302从Val(X)344与Val(X+1)342中所选取的有效位。第二指令状态值包括多任务器1 302的NS输出392及Val输出396。也即,第二指令状态包括由多任务器1 302从NS(X)364与NS(X+1)362中所选取的年龄,以及由多任务器1 302从Val(X)344与Val(X+1)342的中所选取的有效位。第三指令状态值包括000的值,也即有效位为0、年龄为00,其指定了整数管线202的E-阶段225。
多任务器2 304会依据一个两位的选择输入age_update 382,选取三个指令状态值其中之一。逻辑322会根据下面所示的等式(1)和(2),依信号PS 394、重置信号374、信号LdX_P 376及Gate A信号378,来产生信号age_update 382。在等式(1)和(2)中,PS
及PS[1]位为多任务器1 302的输出信号PS 394的二个位。
age_update[1]=LdX_P|重置……(1)age_update
=Gate_A|PS
|PS[1]……(2)真值的LdX_P 376表示MXU指令队列212的项目X所加载的是来自于D-阶段264的指令,而非已经位于MXU指令队列212中的指令。真值的重置信号374表示MXU指令队列212正在重置。真值的Gate_A 378表示整数管线202未产生停顿。在图3的实施例中,Gate_A 378仅表示在整数管线202的S-阶段226的上的阶段未产生停顿。也即,在图3的实施例中,S-阶段226及W-阶段227不会停顿,以致于一旦指令到达S-阶段226,就可确保在下个时钟周期,指令将会变老,也即指令将继续进行至整数管线202的W-阶段227。同样地,一旦指令到达W-阶段227,就可确保其会丢弃。虽然控制信号可从Gate_A 378取得,但MXU管线206的停顿或移动由其自己的控制信号而非Gate_A 378来控制。
若重置发生,或指令从MXU管线206的D-阶段264被加载MXU指令队列212的项目X,则上述等式(1)和(2)指定多任务器2 304要选取第三指令状态输入。若指令正移动至下个整数管线202阶段(也即,若整数管线202未停顿,如真值的Gate_A 378所显示的,或若指令至少已到达整数管线202的S-阶段226,如01、10或11这些值的PS 394所显示),则多任务器2304将选取第二指令状态输入(包括NS 392及Val 396)。否则,指令会在整数管线202中停顿,也即不会沿整数管线202继续向下移动;因此,多任务器2 304将会选取第一指令状态(包括PS 394及Val 396)。
多任务器2 304的输出的年龄输出部份384用来作为年龄缓存器312的输入。年龄缓存器312的输出,即信号PS(X)354,则用来当作逻辑322的输入。信号PS(X)354也被送到MXU指令队列212的下个较低项目,而变成项目X-1的PS(X+1)352。同样地,信号NS(X)364会被送到MXU指令队列212的下个较低项目,而变成项目X-1的NS(X+1)362。同样地,信号Val(X)344会被送到MXU指令队列212的下个较低项目,而变成项目X-1的Val(X+1)342。此外,MXU指令队列212的最低项目(即项目QD0240)的信号Val(0)344及PS(0)354会被送到图2的G-阶段265,并且往下通过MXU管线206的其余阶段。当指令到达MXU管线206的M-阶段269时,M-阶段269会检查相关的状态值,以判断指令是否有效,以及指令位于整数管线202的哪个阶段中,由此判断是否要更新微处理器200的用户可见状态。
控制逻辑300还包括一个耦接至多任务器2 304的4∶1多任务器,标示为多任务器3 306。多任务器3 306用以将项目X中的指令的有效位更新至其适当值。多任务器3 306接收四个有效位输入。第一有效位输入为Val输出386,其为多任务器2 304的输出的有效位部份。其它的三个有效位输入为来自于整数管线202的G-阶段224、E-阶段225及S-阶段226的有效位,分别标示为MmxValNxt_G 336、MmxValNxt_E 334及MmxValNxt_S 332。多任务器3 306的输出用来当作有效位缓存器308的输入。
多任务器3 306会依据一选择输入,即多任务器2 304的输出的年龄输出部份384,来选取四个有效位输入中的一个。因此,若指令的年龄384为00,则多任务器3 306会从整数管线202的G阶段224选取有效位336。这是因为指令会从MXU管线206的D阶段264加载至MXU指令队列212,其等效于将指令从整数管线202的G阶段224加载,也即,由于R2-阶段262的存在,MXU管线206相对于整数管线202会向下移位一个阶段,所以MXU管线206的D阶段264会与整数管线202的G阶段224相邻;因此,整数管线202的G阶段224的指令的有效位,即为要加载有效位缓存器308的更正有效位。
若指令的年龄384为01,则多任务器3 306会从整数管线202的E阶段225选取有效位334。若指令的年龄384为10,则多任务器3 306会从整数管线202的S阶段226选取有效位332。最后,若指令的年龄384为11,则多任务器3 306会从多任务器2 304的输出选取有效位Val 386。也即,会保持目前的有效位值。因此,一旦指令通过整数管线202的W-阶段227(也即,被W-阶段227丢弃),有效位值会被保留着,因为在这个将指令无效化的时刻之后,不会有条件或事件发生。
控制逻辑300还包括一个耦接至多任务器3 306的2∶1多任务器,标示为多任务器4 316。若当指令位于整数管线202的W-阶段227时,产生一无效化条件或事件,则多任务器4 316会用来更新有效位。多任务器4 316会接收二个有效位输入。第一输入来自于有效位缓存器308的输出。第二输入为与门314的输出。与门314为具有二个输入的与门。与门314的第一输入为有效位缓存器308的输出。与门314的第二输入为Except_W信号338的反相信号,其标示为图3的“!Except_W 338”。真值的Except_W信号338表示当指令位于整数管线202的W-阶段227时,发生一异常而将指令无效化。因此,若指令先前为无效,或是当指令位于整数管线202的W-阶段227时,发生一无效化的异常,则与门314会产生伪值的输出。
多任务器4 316会依据一选择输入,其为比较器318的输出,来选择其中一个有效位输入。比较器318会从年龄缓存器312的输出,接收指令的年龄,并将此年龄与二进制值10做比较,后者指定整数管线202的W-阶段227,如前所述。若年龄为10,则比较器318会输出真值,而使多任务器4 316选取与门314的输出。否则,比较器318会输出伪值,而使多任务器4 316选取有效位缓存器308的输出。多任务器4 316的输出为Val(X)信号344,其显示MXU指令队列212的项目X中指令目前的有效位值。
以刚才所述的方式,多任务器3 306及多任务器4 316可确实保有指令的最新有效位值。这可由从整数管线202取得有效位332、334及336来达到,因为若在指令向下经过整数管线202时,发生任何无效化的条件或事件,则微处理器200会更新整数管线202中的指令的有效位;或者若指令在整数管线202的W-阶段227时发生异常,则由将指令无效化来达到;或一旦指令已通过整数管线202的W-阶段227,则由保留有效位值来达到。
现请参照图5,其为本发明的图2微处理器200的运作图例。图5显示在第一时钟周期(称为时钟1)期间,MXU指令队列212的初始状态。图5更进一步显示当指令基于前述的初始条件及其它事件,而向下经过图2的整数管线202及MXU指令队列212时,在下个时钟周期(称为时钟2)期间,MXU指令队列212的运作情形。
在时钟1期间,图5显示了MXU指令队列212的项目3(即QD3 243)中标示为“instr A”的指令。在时钟1期间,instr A位于整数管线202的W-阶段227。因此,储存于项目3的图3年龄缓存器312中的instr A的年龄为10。也即,图3的PS(3)信号354具有10的值,如图5所示。因此,图3的逻辑322会产生11的NS(3)值,如图5所示。另外,在时钟1期间,instrA是有效的。因此,有效缓存器308所储存的值为真,且Val(3)信号344也为真,如图5所示。
在时钟2期间,由于instr A未被加载MXU指令队列212,也即instr A已存在于MXU指令队列212中,所以Ld2 P信号376的值为伪,如图所示。另外,在时钟2期间,因为instr A正向下经过整数管线202,也即整数管线202未产生停顿,所以Gate_A信号378的值为真,如图所示。另外,在时钟2期间,Hld2_P信号372的值为伪(如图所示),表示由于MXU指令队列212的底部项目已移出,所以储存于MXU指令队列212项目3中的指令将会向下移位至项目2。另外,在时钟2期间,Except_W信号338的值为真(如图所示),表示发生一个使instr A无效的事件。
已知有这些初始条件及事件,则在时钟2期间,与MXU指令队列212的项目2及3相关的图3控制逻辑300将运作如下。因为PS(3)354具有10的值,所以比较器318将会产生真值的输出,而使项目3的多任务器4 316选择与门314的输出(其值为0,此因instr A位于W-阶段227时,发生一无效化的异常)。因此,在时钟2期间,将会产生伪值的Val(3)信号344,以表示instrA为无效。
因为Hld2_P 372为伪(表示MXU指令队列212正向下移位),所以MXU指令队列212项目2的多任务器1 302将选取“X+1”的值,也即选取PS(3)354、NS(3)364及Val(3)344的值,其分别为10、11及0。由于instr A会向下经过整数管线202,此由真值的Gate_A 378来表示,所以项目2的多任务器2 304将选取多任务器1 302的NS输出392。因此,在时钟2结束时,项目2的年龄缓存器312中所储存的instr A的新年龄将为11,此是显示instr A已通过整数管线202的W-阶段227。因为项目2的多任务器2 304的年龄输出部份384为11,如前所述,所以项目2的多任务器3 306将选取多任务器2 304的Val输出386。由于Val(3)342为0(如前述),所以输入至项目2的多任务器3 306的Val 386的值为0,并且,项目2的多任务器1 302及多任务器2 304会选取Val(3)342,作为输入至多任务器3 306的Val 386。因此,在时钟2结束时,有效缓存器308所储存的新有效位将为0(表示instr A现在是无效的),以通知MXU管线206,不可更新微处理器200对应于instr A的用户可见的程序状态。
虽然本发明及其目的、特征与优点已详细叙述,其它实施例也可包含在本发明的范围内。例如,虽然本发明已叙述作为MXU一部份的指令与数据队列,但本发明仍可适用于各种其它类型的功能单元,如串流SIMD延伸(SSE)单元。另外,虽然本发明已配合x86处理器的用户可见状态加以说明,但本发明仍适用于各种处理器。此外,虽然本发明所叙述的处理器,以整数管线为一般执行指令或运算有效化功能的功能单元,但本发明仍适用于以其它及/或额外功能单元执行有效化功能的处理器。最后,虽然本发明已述及维持整数管线与MMX管线的间的状态一致性,以获知MMX管线是否及何时可更新处理器的用户可见状态的目的,但本发明一般而言仍可应用于任何与分离队列功能单元有关的状态一致性问题。也即,对于不同功能单元间由于存在一异步队列,而使其状态偏掉的问题,本发明可用来维持其状态一致。
总之,以上所述仅为本发明的较佳实施例而已,不能以其限定本发明所实施的范围。凡依本发明权利要求所作的均等变化与修饰,都应仍属于本发明专利涵盖的范围内。
权利要求
1.一种微处理器中的指令队列装置,包括多个第一储存组件,每个第一储存组件储存一个由一第一功能单元所执行的指令,该指令也储存于一第二功能单元的多个管线阶段的其中一个;多个第二储存组件,耦接至这些第一储存组件,每个第二储存组件储存这些第一储存组件的对应的一个中所存的该指令的一年龄,该年龄用以指出该指令系储存于该第二功能单元的多个管线阶段的哪一个之中;以及多个第三储存组件,耦接至这些第一储存组件,每个第三储存组件储存这些第一储存组件的该对应的一个中所存的该指令的一有效位,该有效位用以指出该指令是否有效。
2.如权利要求1所述的指令队列装置,其中该第一功能单元使用该年龄及该有效位,以判断是否要以该指令的结果更新该微处理器的一用户可见状态。
3.如权利要求1所述的指令队列装置,其中该指令队列装置从该第二功能单元的这些管线阶段中的一预定阶段接收该指令,其中在该指令被存入该预定阶段之后,使该指令无效化的一条件可能会发生。
4.如权利要求1所述的指令队列装置,其中在该第二功能单元的这些管线阶段中的一指令丢弃阶段之前,该指令队列装置从该第二功能单元的这些管线阶段中的一阶段接收该指令。
5.如权利要求1所述的指令队列装置,还包括一控制逻辑,耦接至这些第二及第三储存组件,用以更新该年龄及该有效位。
6.如权利要求5所述的指令队列装置,还包括一输入端,耦接至该控制逻辑,用以从该第二功能单元接收一信号,该信号指出该第二功能单元是否停顿或正使该指令沿这些管线阶段移动,其中该控制逻辑会响应该信号,而更新该年龄及该有效位。
7.如权利要求5所述的指令队列装置,还包括多个输入端,耦接至该控制逻辑,每个输入端用以从该第二功能单元接收一信号,该信号指出也存于该第二功能单元的这些管线阶段的该一个中的该指令是否有效,其中该控制逻辑会依据该信号,更新该有效位。
8.如权利要求5所述的指令队列装置,其中该控制逻辑会依据该指令队列装置是否正将该指令从这些第一储存组件中的一个移至这些第一储存组件中的另一个,而更新该年龄及该有效位。
9.如权利要求5所述的指令队列装置,其中若该指令正被加载该指令队列装置,则该控制逻辑将该年龄更新为一初始年龄值。
10.如权利要求5所述的指令队列装置,还包括一输入端,耦接至该控制逻辑,用以从该第二功能单元接收一信号,该信号指出当该指令被存入该第二功能单元的这些管线阶段中一预定管线阶段时,一无效化条件是否已发生,其中当该指令被存入该预定管线阶段时,若该无效化条件发生,则该控制逻辑将该有效位更新为一无效值。
11.如权利要求1所述的指令队列装置,其中该微处理器依据该年龄及该有效位,判断是否要以该指令的结果更新该微处理器的一用户可见状态。
12.一种在一微处理器中用以维持二个指令管线间的指令状态一致性的装置,该二个指令管线由于一指令队列将其分离而异步地运作,该指令队列具有N个项目,用以储存N个指令,该装置具有对应于该N个指令队列项目的N个逻辑组件,每个逻辑组件包括一年龄缓存器,用以储存该N个指令其中一个的一年龄,该年龄从一年龄信号接收,并指出该指令还储存于该二个管线的一第一管线中的哪一阶段;一有效缓存器,用以储存该N个指令其中一个的一有效位以及一多任务器,依据该年龄信号选取多个有效位信号中的一个,以提供至该有效缓存器,这些有效位信号指出该第一管线的对应多个阶段中所储存的指令是否有效。
13.如权利要求12所述的装置,其中该N个逻辑组件耦接在一起形成一队列,以对应于该指令队列的该N个项目。
14.如权利要求12所述的装置,每一该N个逻辑组件还包括一更新逻辑,耦接至该年龄缓存器,用以依据该第一管线是否产生停顿,而更新该年龄。
15.如权利要求12所述的装置,其中该多任务器也接收选择性地从该有效缓存器的一输出所耦接的一有效输入。
16.如权利要求12所述的装置,每一该N个逻辑组件还包括一无效化逻辑,耦接至该有效缓存器,用以响应于一异常信号,而将该指令无效化,该异常信号表示当该指令储存于该第一管线的一预定阶段中时,发生一将该指令无效化的异常。
17.一种微处理器,包括一第一指令管线,包括多个阶段,用以储存指令;一第二指令管线,耦接至该第一指令管线,用以从该第一指令管线接收这些指令的一第一部份,并加以执行;一指令队列,用以储存该第一部份指令的一第二部份,直到该第二指令管线准备好执行该第二部份;以及一控制逻辑,耦接至该指令队列,用以储存该第二部份的每个指令的一目前状态及一有效位,该目前状态指出,该第二部份的该指令储存于这些第一指令管线阶段中的哪个阶段。
18.如权利要求17所述的微处理器,其中该指令队列及该第二指令管线的运作,与该第一指令管线的运作为异步。
19.如权利要求17所述的微处理器,还包括一多任务器,耦接至该指令队列及该第二指令管线,用以选择性地绕过该第二指令管线中的该指令队列。
20.如权利要求17所述的微处理器,还包括一数据高速缓存,耦接至该第一指令管线,用以提供这些指令所指定的数据;以及一数据队列,耦接至该数据高速缓存,用以储存该第二部份指令所指定的数据。
21.如权利要求17所述的微处理器,其中该目前状态也指出该指令是否已从这些第一指令管线阶段丢弃。
22.一种维持一微处理器中功能单元间的指令状态一致性的方法,该微处理器的阶段由于一队列的存在而未对准,该方法包括将一指令储存于一第一功能单元的一管线阶段中;将该指令的一第一有效位储存于该管线阶段中;将该指令储存于一第二功能单元的一队列,直到该第二功能单元准备好执行该指令;将该指令的一第二有效位储存于该队列中;将该指令的一年龄储存于该队列中,其中该年龄指出该指令储存于该第一功能单元的哪个管线阶段;接收一信号,其显示该第一功能单元管线是否产生停顿;以及依据该第一有效位及该信号的接收,更新该年龄及第二有效位。
23.如权利要求22所述的方法,还包括接收一信号,其表示是否已产生一个使该指令无效的条件;以及若该信号表示已产生使该指令无效的该条件,则将一值存于该第二有效位,以显示该指令为无效。
24.如权利要求22所述的方法,还包括依据该第二有效位及该年龄,判断是否要更新该微处理器的一用户可见状态。
25.如权利要求22所述的方法,其中该年龄也指出该指令是否已从该第一功能单元丢弃。
26.一种用于一微处理器中的指令队列装置,包括多个第一储存组件,每个第一组件储存一指令,由一第一功能单元执行,该指令也储存于一第二功能单元的多个管线阶段其中之一;以及多个第二储存组件,耦接至这些第一储存组件,每一这些第二储存组件用以储存这些第一储存组件其中一对应者所存的该指令的一年龄,该年龄指出该第二功能单元的这些管线阶段其中之一,其中所指定的该第二功能单元管线阶段储存该指令的一目前状态。
27.如权利要求26所述的指令队列装置,其中该目前状态指出该指令是否有效。
全文摘要
本发明提供用于具有二个未对准的功能单元管线的微处理器的装置及方法,即保持分离队列功能单元之间的状态一致性的方法及装置,可将第二管线的指令队列置于第一管线的中间阶段,而非置于丢弃指令的阶段之后。对于队列中的每个指令,此装置可维持其状态与其在第一管线的相对状态间的一致性。此状态包括指令的年龄及一有效位。此年龄指出指令位于第一管线的哪个阶段。此装置包括逻辑,以依据第一管线是否停顿、来自第一管线的有效位以及队列是否向下移位,来更新年龄及有效位。微处理器则依据指令年龄及有效位,以来自第二功能单元的指令执行结果,选择性地更新其用户可见状态。
文档编号G06F9/38GK1558324SQ200410001569
公开日2004年12月29日 申请日期2004年1月13日 优先权日2004年1月13日
发明者艾尔玛·汤姆, 艾尔玛 汤姆 申请人:智慧第一公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1