微处理器以及相关储存方法

文档序号:6607339阅读:876来源:国知局

专利名称::微处理器以及相关储存方法
技术领域
:本发明涉及微处理器领域,特别是涉及微处理器的储存至载入转送(store-to-loadforwarding)机制。
背景技术
:程序频繁的使用储存以及载入指令。一个储存指令将数据从微处理器的一个寄存器搬移至存储器,并且一个载入指令将数据从存储器搬移至微处理器的一个寄存器。微处理器经常地执行指令串流,在指令串流中一或多个储存指令是于一个载入指令之前,其中载入指令所载入的数据是与一或多个先前储存指令所储存的数据在相同的存储器位置上。在这些例子中,为了正确的执行程序,微处理器必需确保载入指令接收由最新的先前储存指令所产生的储存数据。一种正确执行程序的方法是将载入指令暂停(stall),直到储存指令将数据写入至存储器(即系统存储器或高速缓冲存储器)为止,并且接着载入指令从存储器中读取数据。然而,此并非一个非常高效能的方法。因此,现代的微处理器从储存指令所在的功能性单元(例如一个储存队列)传送储存数据至载入指令所在的功能性单元(例如一个载入单元)。此通常称为一个储存转送(storeforwarding)操作或储存转送或储存至载入转送。为了检测是否需要转送储存的数据至一个载入指令,微处理器将比对载入存储器地址与较旧的储存指令的储存存储器地址以检查两者是否相符合。为了绝对正确,微处理器需要比对载入的物理地址(physicaladdress)与储存的物理地址。然而,将载入虚拟地址(virtualaddress)转换(translate)成载入物理地址相当花费时间。因此,为了避免延迟地址的比对,一个现代的微处理器比对载入虚拟地址与较旧的储存虚拟地址,同时将载入虚拟地址转换成载入物理地址,并根据虚拟地址的比对储存转送数据。微处理器接着执行物理地址的比对以检验根据虚拟地址的比对来执行的储存转送是否正确,或判断此转送为不正确并重新执行(Mplay)此载入来更正错误。此外,因为一个完全的虚拟地址的比对是非常耗时的(而且造成电源以及晶片实际资源损耗),并且可能影响微处理器操作的最大时脉频率,现代的微处理器倾向只比较一部份的虚拟地址,而非比较全部的虚拟地址。此将造成储存冲突(collision)检测错误以及不正确转送的增加。然而,仍然需要更多的检测储存冲突的正确方法以实现储存转送的目的。此外,利用以虚拟地址比对为基础的架构执行储存转送所需的时间可能被虚拟至物理地址转换时间(即TLB查表时间)以及高速缓存标记与数据阵列查表时间所隐藏。然而,假设前述不再为真,则需要一个替代方案来检测储存冲突以实现储存转送的目的。最后,以虚拟地址比对为基础的储存冲突检测架构需要一个相对大量的地址比较器,其浪费相对大量的微处理器晶片(die)空间以及电源。因此,需要一个减少晶片物理资源以及电源损耗的有效方法以检测储存冲突来实现储存转送的目的。
发明内容本发明实施例提供一种微处理器。该微处理器包含一队列,包括多个项目,每一上述项目用以保留一储存指令的储存信息。上述储存信息指定用以计算一储存地址的多个操作数的来源。上述储存指令指定欲储存至上述储存地址所定义的一存储器位置的储存数据。微处理器也包含控制逻辑单元,耦接至上述队列,用以接收一载入指令。上述载入指令包括指定用以计算一载入地址的多个操作数(operand)的来源的载入信息。上述控制逻辑单元用以检测到上述载入信息符合保留在上述队列项目的其中一有效项目中的上述储存信息,并且相应地预测上述微处理器应转送由储存信息符合上述载入信息的上述储存指令所指定的上述储存数据至上述载入指令。本发明另一实施例提供一种储存方法,用以储存转送数据于一微处理器。方法包括以程序顺序接收指令的一串流。为所接收的该串流中的每一储存指令配置一队列的多个项目的其中一个,并填入一储存信息至该配置的项目。上述储存信息指定用以计算一储存地址的多个操作数的来源。上述储存指令指定欲储存至上述储存地址所定义的一存储器位置的储存数据。储存方法也包含接收该串流中的一载入指令。上述载入指令包括指定用以计算一载入地址的多个操作数的来源的载入信息。储存方法也包含检测到上述载入信息符合保留在上述队列项目的其中一有效项目中的上述储存信息,并且相应地预测上述微处理器应转送由储存信息符合上述载入信息的上述储存指令所指定的上述储存数据至上述载入指令。为使本发明的上述和其他目的、特征、和优点能更明显易懂,下文特举出较佳实施例,并结合附图详细说明如下。图1显示一依据本发明实施例的一微处理器的方块图。图2显示图1的微处理器的载入单元以及储存队列的流水线的详细方块图。图3显示一现有的微处理器的载入单元以及储存队列的流水线(pipeline)的详细方块图。图4显示一依据本发明实施例的图1的转送地址来源队列(FASQ)的一项目的方块图。图5显示一依据图1的RAT操作流程图。图6显示依据图1的微处理器的操作流程图。图7显示图1的微处理器的操作流程图,用以根据地址来源比对来将数据从一个储存指令转送至一个载入指令。图8显示依据图1的转送重新执行历史队列(FRHQ)的一个项目的方块图。图9显示依据图1的微处理器的操作流程图,用以配置并填入图8中所示的FRHQ的项目。图10显示图1的微处理器的操作流程图,用以使用FRHQ中的项目。图11显示依据图1的微处理器的操作流程图。附图符号说明100微处理器;106指令高速缓冲存储器;108指令解码器;6134寄存器别名表;136保留站;138执行单元;158相依信息;162结构寄存器;164结果;166、168状态讯号;172重排序缓冲器;176转送路径;182存储器子系统;183储存单元;184储存队列;185载入单元;186数据高速缓冲存储器;188相依性产生器;192转送地址来源队列;194转送重新执行历史队列(FRHQ);195载入指令地址操作数;196储存转送预测器;197载入指令;198符合储存的ROB索引;199符合储存的ROB索引;202储存ROB索引;204ROB索引比较器;206符合ROB索引项目指示符;226储存数据;228多工器;222地址产生器;224载入虚拟地址;246转译查询缓冲器;248载入物理地址;262高速缓存数据阵列;263高速缓存标记阵列;264高速缓存数据;265转送数据;266多工器;267储存物理地址;268物理地址比较器;269物理地址符合指示符;286控制逻辑单元;302储存虚拟地址;304虚拟地址比较器;306虚拟地址符合指示符;402项目;404有效位;406srcA字段;408srcB字段;412位移字段;414位移有效位;416索引字段;504、506、508、512、514、516、518、522执行步骤;602,604,606执行步骤;702、704、706、708、712、714、716、718、722、724、726、728、732、734、736、738执行步骤;802项目;804有效位;806指令指标;808ROB索引误差字段;902、904、906、908执行步骤;1002、1004、1006执行步骤;1102、1104、1106执行步骤。具体实施例方式下列描述的实施例提供两种基本的解决方法,每一种可解决一个或多个前述的现有技术的问题。第一种解决方法是比对用以定义可计算载入与储存地址的来源的信息,而非比较这些地址本身。这种方法的好处在于移除了储存转送判断的关键路径的虚拟地址计算且可能使用较少和/或较小的比较器,其可节省晶片物理资源(dierealestate)以及电源损^^ο第二种解决方法是维持(maintain)最近的载入指令的一个重新执行历史并且根据此重新执行历史预测一个数据应被转送至一个载入指令的储存指令。这个方法的好处在于(在至少一实施例中)藉由移除储存转送判断路径的虚拟地址计算时间以及藉由比对比虚拟地址比对架构更少的位数,可减少储存转送时间。此方法也可能使用较少和/或较小7的比较器,其可节省晶片物理资源以及电源损耗。最后,此解决方法能比虚拟地址比对架构更正确地检测储存冲突来实现储存转送的目的。这两种方法也可同时组合使用。以下描述这两种方法。一般而言,微处理器100(参见图1)预测地执行载入指令。也就是说,微处理器100假设高速缓存命中(hit)于载入指令且允许载入指令被发送,无需依赖于可能具有载入数据的较旧的储存指令;接着若载入指令连续的未命中(miss),微处理器100则重新执行此载入指令。当一个较旧的储存指令的储存地址无法用以与载入指令比对时,载入单元完成载入指令至重排序缓冲器(reorderbuffer,ROB)172(参见图1);然而,当较旧的储存指令准备被引退时,其将检查载入指令队列并且检测需要其地址但还没拿到其地址的一个新的载入指令;因此,ROB172重新执行此载入指令。也就是说,当载入单元即时检测到错误而未命中至ROB172的情形下,此载入指令间接而非直接的被重新执行。此载入指令可能因为载入的数据不在微处理器100中而未命中,在此情况下需要从存储器中得到载入数据。同时,载入指令可能因为载入数据是于机器上(储存队列),但并没有从较旧的储存转送而因此未命中。前述现象可能因为以下几种状况发生(1)于载入指令被送至载入单元流水线进行处理时,微处理器100不具有储存地址来和载入指令作比对,因此其无法比对地址以检测转送的需求;(2)微处理器100检测到地址冲突,但其尚未具有要转送的储存数据;(3)微处理器100转送错误的数据(错误检测到一个冲突或检测有效(valid)的冲突失败)。上述前两个原因的发生是因为载入指令是允许乱序发送的,亦即,载入指令是在储存指令被发送且产生地址以及数据之前发送。微处理器100乱序发送此载入指令是因为在载入指令到达载入单元之前,其载入地址不会被计算,因此,寄存器别名表(registeraliastable,RAT)134(参见图1)并不知道载入地址能够产生一个相依性。也就是说,RAT134是根据寄存器操作数而非根据存储器的操作数来产生相依性(dependency)。微处理器100试图利用修改RAT134以建立一个载入指令的增强式(enhanced)相依性来改善此问题,以使其相依于储存指令(或相依于一些前述储存指令所相依的指令),使得前述载入指令不会被发送,直到数据可以被适当的转送至此载入指令为止。然而,这样并无法克服上述的第三个原因。也就是说,即使RAT134可使载入指令暂缓被发送,使得存储器子系统至少具有一个正确的转送至前述载入指令的机会,但存储器子系统仍然必须正确的检测冲突以及转送正确的数据。微处理器100使用两种如前述的储存冲突检测/储存转送预测架构,类似于RAT134使用来发送调度的两种架构,此处只是为了储存转送的目的,而非调度载入指令的发送。以地址来源比对为基础的架构藉由比对载入地址计算的来源与储存地址计算的来源来预测储存转送的需求,而非比对地址本身,详细内容将描述于下。以重新执行历史为基础的架构保持(ke印)一个重新执行的载入指令的指令指标(instructionpointer,IP)806(参见图8)的历史,用于指示转送相关的原因以及可识别出应该被转送的储存数据的信息;当微处理器100再次看见载入指令的IP时,其将从符合的储存中转送,如以下所描述。载入指令发送调度发明并不涵盖关于存储器子系统因为地址比较(亦即虚拟对物理和/或非全部的虚拟地址被使用)的不准确而检测到一个接收到不正确的数据的已完成载入指令的情况;反之,其只涵盖储存地址/数据无效的状况。这是因为增强式相依性的8建立应该不会对地址不准确比对的状况有所帮助。然而,对于储存转送的目的,以包含一个重新执行历史为基础的实施例来涵盖这个状况是有助益的。如以下所述,无论何时一个载入指令必须因为任何转送相关原因而被重新执行时,转送重新执行历史队列(forwardingreplayhistoryqueue,FRHQ)194(于图1)将被启动。须注意的是,地址比对的不准确性可同时产生(1)错误的冲突检测(亦即虚拟索引/散列(hash)符合随的物理不符合)以及(2)漏掉的冲突(亦即虚拟索引/散列不符合随的物理符合)。请参见图1,显示一依据本发明实施例的一微处理器100的方块图。于一实施例中,微处理器100的巨集架构(macroarchitecture)为一x86巨集架构。若一微处理器可正确地执行设计为用于x86处理器的大部分应用程序,此微处理器即是x86结构处理器。若一个应用程序可得到预期的执行结果,则可称此应用程序是被正确地执行。特别来说,微处理器100可执行x86指令集的指令,并且包含x86使用者可见(user-visible)寄存器组。然而,此处所描述的储存转送机制也可应用于现有以及未来的任何其他架构的微处理器中。微处理器100包含一个指令高速缓冲存储器(cache)106,其可从一系统存储器(未图示)中高速缓存程序指令。微处理器100也包含一指令解码器(decoder)108,其可从指令高速缓冲存储器106中接收指令并且将接收到的指令解码。于一实施例中,指令解码器108包含一指令转译器(translator),其可将微处理器100的一个巨集指令集(macroinstructionset)中的巨集指令(例如x86指令集架构)转译为微处理器100的一个微指令集(microinstructionset)中的微指令。特别来说,指令解码器108将存储器存取指令,例如x86M0V、PUSH、POP、CALL以及RET等等指令,转译为包含一个或多个载入或储存微指令的一微指令序列,此处简称为一载入指令或一储存指令。于其他实施例中,载入指令以及储存指令为微处理器100的原生(native)指令集的一部份。微处理器100也包含一寄存器别名表(registeraliastable,以下简称RAT)134,其耦接至指令解码器108;多个个保留站(reservationstation)136,其是耦接至RAT134;一重排序缓冲器(reorderbuffer,以下简称R0B)172,其耦接至RAT134以及保留站136;执行单元138,其耦接至保留站136以及ROB172;以及结构寄存器(architecturalregister)162,其耦接至ROB172以及执行单元138。执行单元138包含一存储器子系统182,其包含一载入单元185可执行载入指令、一储存单元183可执行储存指令以及一储存队列(storequeue)184,其可保留(hold)等待被写入至存储器(例如耦接至存储器子系统182的数据高速缓冲存储器186)的已执行储存指令。此外,存储器子系统182与一汇流排介面单元(未图示)相联以从一系统存储器中读出数据或将数据写入至此系统存储器中。虽然存储器子系统182可接收载入指令以及储存指令来不依照程序顺序执行,存储器子系统182可正确地解析储存冲突。也就是说,存储器子系统182确保每一个载入指令,尤其是于一储存冲突的例子中,从正确的储存指令(或于多个储存指令提供一单一载入指令所指定的数据的例子中的储存指令)接收正确的数据。更具体来说,此处的实施例试图提高从储存队列184至载入单元185的储存数据的储存转送准确性。若有需要时,存储器子系统182在一状态讯号166上产生一重新执行指示至ROB172以要求ROB172来重新执行一载入指令,用以确保其可接收到正确数据。当有需要时,载入单元185也可内部地重新执行载入指令。执行单元138也包含其他可执行非9存储器存取指令的执行单元(未图示),例如整数(integer)执行单元、浮点数(floatingpoint)单元、多媒体(multimedia)单元等等。RAT134以程序顺序从指令解码器108接收已解码的指令,并且判断每一指令与微处理器100中的其他未引退指令的相依性。RAT134储存与微处理器100中的每一未引退指令相关的寄存器重新命名(renaming)信息。此寄存器重新命名信息包含指令的程序顺序。此外,RAT134包含一个复杂状态机(complexstatemachine),其可相应于寄存器重新命名信息以及其他输入,控制微处理器100的各种动作。RAT134包含一相依性产生器188,其可依据每一指令的程序顺序、其所指定的操作数来源以及寄存器重新命名信息来对每一指令产生相依信息158。相依信息158包含指令的每一输入操作数的一识别符(identifier),即输入操作数所相依的相依指令(若有的话)的一识别符。于一实施例中,此识别符为一索引进入至ROB172,可识别ROB172中的一项目(entry),此项目储存前述相依指令以及相关的状态信息。参见以下的说明。RAT134包含一个储存转送预测器(storeforwardingpredictor)196,于一载入指令与一较旧的储存指令冲突时进行预测,因此其必须具有从较旧的储存转送至储存转送预测器196的储存数据。特别来说,RAT134产生预测的较旧的储存指令的ROB索引,此处称为符合储存的ROB索引(ROBindexofmatchingstore,RI0MS)198。RAT134提供RIOMS198连同载入指令及相依信息158至保留站136。RAT134包含RAT134用来产生储存转送预测的多个队列。这些队列包含一转送地址来源队列(forwardingaddresssourcequeue,FASQ)192以及一转送重新执行历史队列(forwardingreplayhistoryqueue,FRHQ)194,其每一项目分别详细描述于以下的图4与图8。RAT134派送(dispatch)已解码的指令及其相关的相依信息158以及RIOMS198至保留站136。在派送一指令之前,RAT134为此指令于ROB172中配置一项目。因此,这些指令将以程序顺序配置至ROB172,其是设置为一环状队列。此使得ROB172能够确保这些指令以程序顺序被引退。RAT134也提供相依信息158至ROB172以储存在该指令的项目中。当ROB172重新执行一指令时,例如一载入指令,ROB172将于重新执行此指令期间提供储存于ROB项目中的相依信息158至保留站136。保留站136包含保留这些指令以及从RAT134中接收到的相依信息158与RIOMS198的队列。保留站136也包含可于指令准备好被执行时,将这些指令从队列发送至执行单元138的发送逻辑。执行单元138可通过结构寄存器162、通过ROB172中由结构寄存器162重新命名成的暂时寄存器(未图示),或者直接地通过转送路径176从执行单元138来接收执行的指令的结果164。执行单元138也提供其结果164至ROB172以写入至暂时寄存器。存储器子系统182可利用载入以及储存指令所指定的来源操作数,对载入指令解析(亦即计算)载入地址并且对储存指令解析储存地址。操作数的来源可为结构寄存器162、常数、和/或指令所指定的位移(displacements)。存储器子系统182也在计算出的载入地址上从数据高速缓冲存储器186中读出载入数据。存储器子系统182也在计算出的储存地址上将储存数据写入至数据高速缓冲存储器186中。如前述,于一些情况下,存储器子系统182必须要求一载入指令的一重新执行,其是通过提供至ROB172的状态讯号166来指示。状态讯号166指定必须被重新执行的指令(例如一载入指令)的ROB索引,使得ROB172可以依此指令的状态的一指示,包含是否需要重新执行,来更新其索引的项目。于一实施例中,状态讯号166也指定其数据应被转送至载入指令的储存指令的ROB索引。状态讯号166的这些ROB索引也被提供至储存转送预测器196,其致能储存转送预测器196来计算两个ROB索引之间的一个误差(delta),相关内容将详述于下。当其ROB项目标记为需要被重新执行的一指令为下一个要被引退的指令时,亦即,为最旧的未引退指令,R0B172将重新执行此指令。也就是说,ROB172从ROB172重新派送此指令以及其相关相依信息158至保留站136,以等待后续的重发送至执行单元138以及执行单元138的重新执行。于一实施例中,ROB172不仅重新执行此指令,也重新执行相依于此指令的结果的所有指令。当ROB172重新执行一载入指令时,ROB172也通过状态讯号168将此事件通知至RAT134。状态讯号168是指定被重新执行的载入指令的ROB索引。请参见图2,显示图1的微处理器100的载入单元185以及储存队列184的流水线的详细方块图。于图2的实施例中,每一流水线包含6个阶段,标记为A至F。于A阶段,载入单元185接收载入指令地址操作数195以及RIOMS199(即图1的RIOMS198)。于B阶段,载入单元185的一地址产生器222从载入指令地址操作数195中产生载入虚拟地址224。储存队列184的每一项目保留该项目所配置的储存指令的储存ROB索引202。多个个ROB索引比较器204比对载入指令的RIOMS199与储存ROB索引202,以产生一个符合ROB索引项目指示符(matchingROBindexentryindicator)206,其指示储存ROB索引202中的任一个是否符合RIOMS199,若是,则哪一个储存队列184的项目是符合的。于C阶段,载入单元185中的一转译查询缓冲器(TranslationLookasideBuffer,TLB)246查询载入虚拟地址224以及输出转译后的载入物理地址248。储存队列184的每一项目也保留其所配置的储存指令的储存数据226。储存队列184流水线的一多工器228从每一个储存队列184项目中接收储存数据226并选择将符合ROB索引项目指示符206所指示的储存数据226作为转送数据265以转送至载入单元185。于D阶段,载入物理地址248提供至数据高速缓冲存储器186的高速缓存标记阵列263以及高速缓存数据阵列262,以得到高速缓存数据264。载入单元185中的一多工器266接收高速缓存数据264以及从储存队列184中接收转送数据265,并选择其中的一输入作为图1的结果164。转送数据265若是符合ROB索引项目指示符206所指示的,则多工器226选择转送数据265,否则选择高速缓存数据264。储存队列184的每一项目也保留了其所配置的储存指令的储存物理地址267。多个个物理地址比较器268比对载入物理地址248与每一个储存物理地址267以产生一物理地址符合指示符269,用来指示是否有任何一个储存物理地址267符合载入物理地址248,且若是,则指示储存队列184的哪一个项目符口O于E阶段,储存队列184流水线中的控制逻辑单元286接收符合ROB索引项目指示符206以及物理地址符合指示符269并且据此为载入指令产生图1的状态讯号166。状态讯号166指出是否载入指令已成功地完成、是否已漏掉或必须被重新执行。于F阶段,结果164以及状态讯号166提供至ROB172以及微处理器100的其他单元。参见图3,显示一现有的微处理器的载入单元185以及储存队列184的流水线的详细方块图。图3的流水线185/184类似于图2的流水线185/184,但有以下的差别。于图3中,储存队列184流水线包含虚拟地址比较器304,而非图2的ROB索引比较器204。虚拟地址比较器304比对载入虚拟地址224与每一个储存队列184项目的储存虚拟地址302(或其一部份)以产生一个虚拟地址符合指示符306,而非图2的符合ROB索引项目指示符206。比较图2与图3可发现,图2的实施例是比较ROB索引来判断要转送至载入指令的储存数据226(若有的话),相较于图3的现有设计,其优点在于可避免依赖载入虚拟地址224的产生。参见图4,显示一依据本发明实施例的图1的转送地址来源队列(forwardingaddersssourcequeue,FASQ)192的一项目402的方块图。FASQ项目402保留与RAT134所接收到(encounter)的一储存指令相关的信息。请参见以下图5以及图6的说明,RAT134可配置、填入(populate)并使用FASQ项目402。FASQ项目402包含一个有效位404,其指示FASQ项目402是否为有效。相应于一重置(reset)动作,微处理器100初始化FASQ192的所有项目402为无效,亦即,清除每一个FASQ项目402的有效位404。FASQ项目402也包含一srcA字段406以及一srcB字段408,其分别定义存储器子系统182用来计算出储存指令的储存地址的第一操作数以及第二操作数的来源。srcA字段406以及srcB字段408指定保留有操作数或常数来作为操作数的结构寄存器162。FASQ项目402也包含一位移字段(displacementfield)412,其保留有存储器子系统182用来计算其储存地址的一储存指令所指定的一位移。FASQ项目402也包含一位移有效位414,其指示位移字段412的值是否为有效。FASQ项目402也包含一索引字段416,其保留有储存指令的ROB索引。请参见图5,显示一依据本发明的图1的RAT操作流程图。流程开始于步骤504。于步骤504,RAT134解码一指令并产生如图1所示的对应相依信息158。接着执行判断步骤506。于判断步骤506,RAT134判断已解码的指令是否为一储存指令。若是,执行步骤508;反之则执行步骤512。于步骤508,RAT134配置在FASQ192中的一项目402。也就是说,RAT134逻辑地将一项目402推入(push)至FASQ192的尾端,其逻辑地推出在FASQ192的顶端的项目402。RAT134接着以来自于储存指令中的适当信息填入配置的项目402的srcA字段406、srcB字段408以及位移字段412。若储存指令定义一位移时,RAT134设定位移有效位414;反之,RAT134将清除位移有效位414。RAT134也以储存指令的ROB索引填入索引字段416。最后,RAT134设定有效位404。于一实施例中,储存指令实际上为两个个别微指令一个储存地址(STA)微指令以及一个储存数据(STD)微指令。STA指令被发送至计算储存地址的存储器子系统182的一储存地址单元。STD指令被发送至存储器子系统182的一储存数据单元,其可从来源寄存器得到储存数据并将储存数据发布至一储存队列184项目,用于后续写入至存储器。于此实施例中,当RAT134看见STA指令时,配置项目402于FASQ192中并填入srcA字段406、srcB字段408以及位移字段412,并且当RAT134看见STD指令时,RAT134以STD微指令的ROB索引填入索引字段416并设定有效位404。流程接着返回步骤504执行。于判断步骤512,RAT134判断已解码的指令是否为一个载入指令。若是,执行判断步骤514;反之则执行判断步骤518。于判断步骤514,RAT134比对载入指令所指定的地址来源与FASQ192项目402所指定的储存指令地址来源来判断是否其符合项目402中的任何一个。也就是说RAT134比对载入指令的第一来源操作数字段与每一项目402的srcA字段406、比对载入指令的第二来源操作数字段与每一项目402的srcB字段408并且比对载入指令的位移字段与每一项目402的位移字段412。于一实施例中,RAT134也允许载入指令来指定相同的来源寄存器,但是是以交换的顺序。若符合FASQ192中的任何项目402的前述三个字段,以及若载入指令指定一个位移且位移有效位414被设定或载入指令并未指定一个位移且位移有效位414被清除,则流程执行步骤516;反之,流程返回步骤504。于步骤516,RAT134预测出载入指令应该为来自与符合的FASQ192项目402相关的较旧的储存指令中的转送数据,并且相应的输出图1中的RIOMS198。也就是说,RAT134输出于步骤514所决定的符合的FASQ项目402的ROB索引字段416的值。流程返回步骤504。此外,流程继续执行如下图7的步骤702来执行载入指令。于判断步骤518,RAT134判断已解码的指令是否为修改FASQ192的任何项目402WsrcA406或srcB408字段所指定的一个来源的一个指令。若是,执行步骤522;反之则返回步骤504。于步骤522,RAT134清除每一个于srcA406或srcB408字段中指定一个寄存器的FASQ项目402的有效位414,其中该字段是由判断步骤518所决定的指令所修改。RAT134清除有效位404是因为载入地址以及储存地址不太可能会重迭;因此不太可能可以转送与FASQ项目402所指定的储存指令相关的储存数据至载入指令。流程返回步骤504。参见图6,显示依据图1的微处理器100的操作流程图。流程开始于步骤602。于步骤602,ROB172引退一个指令。接着执行判断步骤604。于判断步骤604,ROB172扫描FASQ192来判断是否有任何项目402的索引字段412符合正被ROB172所引退的指令的索引。若是,执行步骤606;反之则返回步骤602。于步骤606,ROB172清除符合的FASQ项目402的有效位404。如此将可防止RAT134在一个已经被引退的储存指令上产生一个RIOMS198给一个后续载入指令。流程返回步骤602。参见图7,显示图1的微处理器100的操作流程图,用以根据地址来源比对来将数据从一个储存指令转送至一个载入指令。流程开始于步骤702。于步骤702,保留站136发出一个载入指令197以及其相关的RI0MS198至载入单元185。流程继续从步骤702至步骤704以及步骤712。于步骤704,载入单元185接收载入指令地址操作数195。流程继续至步骤706。于步骤706,载入单元地址产生器222计算载入虚拟地址224。流程继续至步骤708。于步骤708,TLB246接收载入虚拟地址224并产生图2的载入物理地址248。流程继续从步骤708至步骤724以及736。于步骤712,载入单元185传送RIOMS199至储存队列184。流程继续至步骤714。于步骤714,储存队列184的ROB索引比较器204比较RIOMS199与储存ROB索引13202以产生符合ROB索引项目指示符206。流程继续至判断步骤716。于判断步骤716,储存队列184检视于步骤714所产生的符合ROB索引项目指示符206来判断是否有储存ROB索引202中任何一个符合RI0MS199。若至少有一个符合,执行步骤718;反之,则执行步骤734。于步骤718,多工器228选择比符合ROB索引项目指示符206所指示的载入指令更旧的最新储存指令的储存数据226作为转送数据265以提供至多工器266。流程继续至步马聚722ο于步骤722,载入单元185利用于步骤718所转送的转送数据265来执行载入指令197。也就是说,多工器266选取了转送数据265。流程继续至步骤724。于步骤724,物理地址比较器268比对载入物理地址248与储存物理地址267来产生物理地址符合指示符269。流程继续至判断步骤726。于判断步骤726,控制逻辑单元286检视于步骤724所产生的物理地址符合指示符269来判断载入物理地址248是否符合于其储存数据226是于步骤718转送至载入指令197的储存指令的储存物理地址267,并判断是否此储存指令为满足储存物理地址267符合载入物理地址248的最新储存指令。若是,正确的转送数据265被转送至载入指令197并由载入指令197所使用,且流程接着执行步骤728;反之,不正确的数据被转送至载入指令197并由载入指令197所使用,且流程接着执行步骤732。于步骤728,载入单元185通过提供结果164至ROB172以及微处理器100的其他单元以及在状态讯号166上指示一成功的完成来执行载入指令197。最后,当载入指令197变成微处理器100中最旧的指令时,ROB172将引退载入指令197。流程结束于步骤728。于步骤732,控制逻辑单元286产生一个状态讯号166来指出载入指令197必须被重新执行,并且载入单元185内部地重新执行载入指令197,因为载入指令197使用了不正确的数据。此外,ROB172重新执行相依于载入指令的所有指令,由于这些指令可能已经从载入指令的先前结果接收到不正确的数据。流程结束于步骤732。于步骤734,载入单元185利用高速缓存数据264执行载入指令197,亦即,不利用转送的储存数据,因为于判断步骤716的ROB索引比较结果显示没有任何符合。流程继续至步骤736。于步骤736,物理地址比较器268比对载入物理地址248与储存物理地址267来产生物理地址符合指示符269。流程继续至判断步骤738。于判断步骤738,控制逻辑单元286检视于步骤724所产生的物理地址符合指示符269来判断载入物理地址248是否符合任何一个储存物理地址267。若是,表示发生一个漏掉的储存转送。也就是说,载入指令197使用来自数据高速缓冲存储器186的无效数据,而非应该被从储存队列184中的一个储存指令转送过来的储存数据226,并且流程执行至步骤732。然而,若没有发生一个漏掉的储存转送时,流程执行至步骤728。参见图8,显示依据图1的转送重新执行历史队列(FRHQ194)的一个项目802的方块图。FRHQ项目802保留与一个为了储存转送相关原因而重新执行的一个载入指令相关的信息。参见以下的图9以及图10以及前述图7的描述,RAT134可配置、填入并使用FRHQ项目802,其包含一个用来指出是否项目802为有效的有效位804。相应于一个重置动作,微处理器100将初始化FRHQ194的所有项目802为无效的,亦即,清除每一个FRHQ项目802的有效位804。此外,于一实施例中,每一个FRHQ项目802的有效位804是于每次在x86程序码段描述器(codesegmentdescriptor)中的程序码段极限值(codesegmentlimitvalue)被写入时被清除。FRHQ项目802也包含一个指令指标(IP)字段806,其储存载入指令所在的存储器地址。于一实施例中,IP806为在载入指令之后的下一个指令的存储器地址,而非载入指令本身的地址。FRHQ项目802也包含一个ROB索引误差字段808,其可储存载入指令的ROB索引以及来自于储存数据应该被转送至载入指令的储存指令的ROB索引之间的差值,如以下所讨论。参见图9,显示依据图1的微处理器100的操作流程图,用以配置并填入图8中所示的FRHQ194的项目802。流程开始于步骤902。于步骤902,存储器子系统182检测到一个载入指令因为储存转送相关的理由被重新执行。储存转送相关的理由的例子包括以下几种,但不限于此。第一点,当载入单元185处理载入指令时储存队列184中的一个较旧的储存指令的储存物理地址尚未有效。也就是说,RIOMS198符合一个较旧的储存,但是物理地址符合指示符269为无效的,因为储存队列184检测到符合的储存物理地址267尚未有效。在此状况下,当储存指令准备被引退时,其可判断储存指令的储存物理地址267符合载入物理地址248并且因此其储存数据226应该被转送至载入指令。因此,ROB172使载入指令以及任何相依于载入指令的指令被重新执行,并通知RAT134,因此RAT134可以更新FRHQ194。第二点,当载入单元处理载入指令时,一个较旧的储存指令的储存数据尚未有效。也就是说,RIOMS198符合一个较旧的储存,但符合的储存的数据尚未为有效。第三点,RIOMS198符合一个储存队列中的储存;然而,物理地址符合指示符269并没有指出载入以及由RIOMS198所识别的储存之间相符合,其表示错误的转送数据265被转送。第四点,RIOMS198符合一个储存队列中的储存并且载入物理地址248与储存物理地址267也相符合;然而,物理地址符合指示符269指出由RI0MS198所识别的储存并不是要被转送的正确储存(例如符合的储存旧于其他物理符合的储存),其表示错误的转送数据265被转送。第五点,RIOMS198并未符合储存队列184中的任何储存ROB索引202;然而,物理地址符合指示符269产生一个符合储存,其表示从数据高速缓冲存储器124中提取到的数据为错误数据。第六点,RIOMS198符合一个较旧的储存并且其物理地址也确认有符合;然而,相关存储器地址的存储器特性(trait)并不允许储存转送(例如不可高速缓存区间)。流程接着执行步骤904。于步骤904,存储器子系统182在状态讯号166上输出重新执行的载入指令的ROB索引以及其储存数据应该已被转送至载入指令的储存指令的ROB索引。ROB192利用状态讯号166来更新载入指令ROB192项目状态以指出其需要被重新执行于前述重新执行动作是由ROB172所执行的情况下,相对于由载入单元185所执行的一个内部的重新执行。流程接着执行步骤906。于步骤906,RAT134窥视(snoop)存储器子系统182于步骤904中所产生的状态讯号168并且相应的计算载入指令ROB索引以及储存指令ROB索引之间的差值或误差。当计算误差时,RAT134将ROB192的环状队列特性的环绕效应(wraparoundeffect)列入考虑。流程接着执行步骤908。于步骤908,相应于于步骤906所产生的状态讯号166,RAT134在FRHQ194中配置一个项目802。也就是说,RAT134逻辑地将一项目802推入(push)至FRHQ194的尾端,其逻辑地推出在FRHQ194的顶端的项目802。RAT134接着以载入指令的指令指标的值填入IP字段806。RAT134也以于步骤906所计算出的差值来填入ROB索引误差字段808。最后,RAT134设定有效位804。流程结束于步骤908。参见图10,显示图1的微处理器100的操作流程图,用以使用FRHQ194中的项目802。流程开始于步骤1002。于步骤1002,RAT134接收到一个载入指令并且为载入指令产生其标准的相依信息。此外,RAT134比对载入指令的指令指标的值与FRHQ194的每一个有效项目802中的IP字段806。流程继续至判断步骤1004。于判断步骤1004,RAT134判断于步骤1002所执行的比对是否与任何FRHQ项目802符合。若否,流程结束;反之,流程继续至步骤1006。须注意的是,于步骤1002/1004/1006中RAT134所接收到的载入指令的实例是与于步骤908中所储存的载入指令的指令指标的实例不同。因此,当一个载入指令因为一个储存转送相关理由而重新执行时,RAT134并不会以储存指令的真正ROB索引来填入FRHQ项目802。反之,有益的,当重新执行一个载入指令时,在第一种实例中(于图9的步骤908)RAT134以载入指令以及储存指令的ROB索引之间的差值来填入FRHQ项目802,使得在载入指令的第二种以及后续的实例中,RAT134可在来自目前载入指令实例的先前决定的ROB索引误差字段808预测从指令(其是被预测为一个储存指令)转送储存数据的一个需求,如以下步骤1006所示。发明人已经判定一个载入指令以及其储存数据应该被转送的储存指令之间的ROB索引误差有高度的可能性将会跟重新执行实例之后的实例相同。于步骤1006,RAT134预测应该从一个较旧的储存指令转送储存数据至载入指令,其中此较旧的储存指令的ROB索引可由与符合的FRHQ项目802相关的ROB索引误差字段808的值计算出,并且RAT134相应的计算载入指令ROB索引减去由步骤1004所决定的符合的FRHQ项目802的ROB索引误差字段808的值,所得的差值作为RIOMS198。有益的,RIOMS198致能存储器子系统182在无须等待载入虚拟地址224的产生的情况下储存转送并比对相对于虚拟地址位较少的位数量(例如-J位ROB索引)。流程继续从步骤1006至图7的步骤702以执行载入指令。依据本发明的其中一个实施例,FRHQ194的IP字段806储存的位数少于所有指令指标地址位;因此,若于步骤1004中发现一个符合,也无法保证载入指令是与步骤902中所检测到的重新执行的载入指令相同。须注意的是,此处并无法保证在计算的索引上有一个储存指令于ROB192中,或者即使有,其储存数据应被转送至载入指令。换句话说,RAT134正在产生一个预测。参见图11,显示依据图1的微处理器100的操作流程图。流程开始于步骤1102。于步骤1102,ROB172引退一个指令。流程继续至判断步骤1104。于判断步骤1104,ROB172扫描FRHQ194以判断是否其项目802的任何一个的IP字段806符合正由ROB172所引退的指令的IP。若是,执行步骤1106;反之则返回步骤1102执行。于步骤1106,R0B172清除符合FRHQ项目802的有效位804。如此可避免RAT134产生一个后续载入指令的RIOMS198在一个已经被引退的储存指令上。流程返回至步骤1102执行。16如前述的图1、图2以及图4-7的实施例所描述,其中,微处理器100使用一个地址来源比对为基础的架构来预测储存转送状态。此外,如前述的图1、图2以及图7-11的实施例所描述,其中,微处理器100使用一个重新执行历史为基础的架构来预测储存转送状态。须提醒的是,前述两种基本架构可单独使用或共同组合使用或者与其他转送储存架构一起使用。举例来说,每一种架构可以被其本身所使用。此外,这两种架构可被一起使用。在一个这种实施例中,当两者都产生一个符合时,可以考虑各种不同的实施例来选择两个预测器的RIOMS198的哪一个来使用。于一实施例中,地址来源比对为基础的预测器较佳。另一个实施例考虑一个选择器依据一或多个因子,例如,预测准确性历史或其他非历史为基础的因子(例如载入/储存特性、载入/储存队列深度等等),来选择其中一个预测器。再者,取代完整地替换虚拟地址比对为基础的架构,重新执行历史为基础的预测器可以与一个虚拟地址比对为基础的架构共同使用,可能增加其准确性。如此在微处理器时脉周期时间请求之处特别有好处。举例来说,若虚拟地址为基础的比对产生无符合或产生一个不同于重新执行历史为基础的比对的储存的符合时,重新执行历史为基础的预测器较佳。虽然前述的实施例中RAT为待处理的储存保留了地址来源/重新执行历史信息于FASQ/FRHQ中,并执行储存转送预测以及提供最新符合储存的ROB索引连同载入指令继续延流水线传送至载入单元,其他实施例中可考虑储存队列为待处理的储存维持地址来源/重新执行历史信息于FASQ/FRHQ中,并且载入单元提供地址来源信息/IP至伫留有FASQ/FRHQ的储存队列中。此实施例没有包含载入发送调度发明的处理器,这样的方法可能会较佳。如前述,地址来源比对为基础以及重新执行历史为基础的储存转送架构的优点为其可能移除储存转送判断的关键路径中的载入虚拟地址计算,并可能使用更少和/或更小的比较器,其可使得一些设计符合较小时间限制且可节省晶片实际资源以及电源损耗。此外,本发明的架构可以比虚拟地址比对为基础的架构能够更准确的检测储存转送目的的储存冲突。虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,本领域的技术人员在不脱离本发明的精神和范围的前提下可做若干更动与润饰,因此本发明的保护范围以本发明的权利要求为准。例如,软件可致能,例如,功能、制造、模型化、模拟、描述和/或测试本发明所述的装置以及方法。上述可藉由使用一般程序语言(例如c、c++)、硬件描述语言(HDL)包括VerilogHDL、VHDL等等来实现。此类软件可以以程序码的型态置放于任何已知的计算机可读媒体,例如一磁带、半导体、磁片、软盘、硬盘或光盘片(例如CD-R0M、DVD-ROM等等)、一网络、有线连线、无线或其他通讯媒体。其中,当程序码被机器,如计算机载入且执行时,此机器可成为用以实施本发明的装置。本发明所述的装置以及方法可包含于一半导体知识产权核心,例如一微处理器核心(嵌入于HDL),并转换成集成电路的硬件产品。此外,本发明实施例所述的装置以及方法可包含具有硬件以及软件的组合的物理实施例。因此本发明的保护范围是以本发明的权利要求为准。特别来说,本发明可被实作在一微处理器装置中,而使用于一一般用途处理器中。最后,本领域的技术人员,可基于本发明所揭示的概念以及特定实施例,在不脱离本发明的精神和范围的前提下可做若干的更动与润饰以达到本发明的相同目的。权利要求一种微处理器,包括一队列,包括多个项目,每一上述项目用以保留一储存指令的储存信息,其中上述储存信息指定用以计算一储存地址的多个操作数的来源,其中上述储存指令指定欲储存至上述储存地址所定义的一存储器位置的储存数据;以及一控制逻辑单元,耦接至上述队列,用以接收一载入指令,上述载入指令包括指定用以计算一载入地址的多个操作数的来源的载入信息,其中上述控制逻辑单元用以检测到上述载入信息符合保留在上述队列项目的其中一有效项目中的上述储存信息,并且相应地预测上述微处理器应转送由储存信息符合上述载入信息的上述储存指令所指定的上述储存数据至上述载入指令。2.如权利要求1所述的微处理器,其中上述控制逻辑单元用以预测上述微处理器于上述微处理器计算上述载入地址之前,转送上述储存数据至上述载入指令。3.如权利要求1所述的微处理器,其中上述队列用以维持多个上述储存指令的每一个,其中若上述控制逻辑单元检测到上述载入信息符合保留在上述队列的一个以上的有效项目中的上述储存信息,上述控制逻辑单元预测上述微处理器应转送由储存信息符合上述载入信息的最新上述储存指令所指定的上述储存数据至上述载入指令。4.如权利要求1所述的微处理器,其中每一上述队列的上述项目用以保留上述储存指令的一重排序缓冲器索引,其中上述控制逻辑单元用以藉由输出储存信息符合上述载入信息的上述储存指令的上述重排序缓冲器索引,预测到上述微处理器应转送由储存信息符合上述载入信息的上述储存指令所指定的上述储存数据至上述载入指令。5.如权利要求4所述的微处理器,还包括一载入单元,用以执行该载入指令;以及一储存队列,耦接至该载入单元,用以为多个储存指令的每一个保留等待被写入至存储器的储存数据,其中该储存队列用以判断上述控制逻辑单元所预测的该储存指令的该重排序缓冲器索引是否符合该储存队列的该储存指令的任一个的一有效重排序缓冲器索引,并且用以转送该储存指令中的最新一个的该储存数据至该载入单元,其中该最新一个的有效重排序缓冲器索引符合该预测的重排序缓冲器索引。6.如权利要求5所述的微处理器,其中上述储存队列用以判断上述控制逻辑单元所预测的该储存指令的该重排序缓冲器索引是否符合该储存队列的该储存指令的任一个的一有效重排序缓冲器索引,其大致地与该载入单元利用由该载入信息所指定的来源的该操作数计算该载入地址同时发生。7.如权利要求1所述的微处理器,其中上述储存信息以及上述载入信息包括该微处理器的一寄存器的至少一识别符,该识别符保留用以计算该储存地址的一来源操作数。8.如权利要求7所述的微处理器,其中上述储存信息以及上述载入信息还包括用以计算该储存地址的一位移。9.如权利要求1所述的微处理器,其中上述控制逻辑单元用以依程序顺序接收指令,其中对上述控制逻辑单元所接收的每一储存指令,上述控制逻辑单元为该储存指令配置该队列中的该项目的其中一个,并填入该配置的项目的该储存信息。10.如权利要求9所述的微处理器,其中上述控制逻辑单元用以在填入该储存信息之后将该配置的项目标记为有效。11.如权利要求10所述的微处理器,其中相应于接收一指令,上述控制逻辑单元用以将一个或多个该队列项目的每一个标记为无效,其中该指令修改一个或多个由一个或多个该队列项目所指定的操作数的来源。12.如权利要求1所述的微处理器,其中相应于上述队列中的上述多个储存指令的其中一个被引退,上述控制逻辑单元用以将上述被引退的储存指令的上述队列项目标记为无效。13.一种储存方法,用以储存转送数据于一微处理器,该方法包括下列步骤以程序顺序接收指令的一串流并且为所接收的该串流中的每一储存指令配置一队列的多个项目的其中一个,并填入一储存信息至该配置的项目,其中上述储存信息指定用以计算一储存地址的多个操作数的来源,其中上述储存指令指定欲储存至上述储存地址所定义的一存储器位置的储存数据;接收该串流中的一载入指令,上述载入指令包括指定用以计算一载入地址的多个操作数的来源的载入信息,并且检测到上述载入信息符合保留在上述队列项目的其中一有效项目中的上述储存信息;以及相应于上述检测步骤,预测上述微处理器转送由储存信息符合上述载入信息的上述储存指令所指定的上述储存数据至上述载入指令。14.如权利要求13所述的储存方法,还包括利用该载入信息所指定的来源的该操作数,计算该载入地址;其中该预测上述微处理器应转送上述储存数据至上述载入指令是执行于该计算上述载入地址之前。15.如权利要求13所述的储存方法,还包括维持上述储存指令的每一个;其中上述检测步骤包括检测到上述载入信息符合保留在上述队列的一个以上的有效项目中的上述储存信息;其中上述预测步骤包括预测上述微处理器应转送由储存信息符合上述载入信息的最新上述储存指令所指定的上述储存数据至上述载入指令。16.如权利要求13所述的储存方法,其中上述填入该储存信息至该配置的项目的步骤包括填入上述储存指令的一重排序缓冲器索引至该配置的项目,其中上述预测步骤包括输出储存信息符合上述载入信息的上述储存指令的上述重排序缓冲器索引。17.如权利要求16所述的储存方法,还包括为多个储存指令的每一个保留等待被写入至存储器的储存数据;判断上述预测到的储存指令的该重排序缓冲器索引是否符合该等待储存指令的任一个的一有效重排序缓冲器索引;以及转送该储存指令中的最新一个的该储存数据至该载入指令,其中该最新一个的有效重排序缓冲器索引符合该预测的重排序缓冲器索引。18.如权利要求17所述的储存方法,还包括利用由该载入信息所指定的来源的该操作数计算该载入地址,其是大致地与该判断上述预测的储存指令的该重排序缓冲器索引是否符合该储存队列的该储存指令的任一个的一有效重排序缓冲器索引同时发生。19.如权利要求13所述的储存方法,其中上述储存信息以及上述载入信息包括该微处理器的一寄存器的至少一识别符,该识别符保留用以计算该储存地址的一来源操作数。20.如权利要求19所述的储存方法,其中上述储存信息以及上述载入信息还包括用以计算该储存地址的一位移。21.如权利要求20所述的储存方法,还包括在填入该储存信息至该配置的项目之后,将该配置的项目标记为有效。22.如权利要求21所述的储存方法,还包括于该串流中接收一指令,该指令修改一个或多个由一个或多个该队列项目所指定的操作数的来源;以及相应于接收该串流中的该指令,将一个或多个该队列项目的每一个标记为无效。23.如权利要求13所述的储存方法,还包括引退上述队列的上述多个储存指令中的其中一个;以及相应于上述引退上述队列的上述多个储存指令中的其中一个,将上述被引退的储存指令的上述队列项目标记为无效。全文摘要本发明提供一种微处理器。微处理器包含一队列,包括用以保留储存指令的储存信息的多个项目。储存信息指定用以计算储存地址的多个操作数的来源。该储存指令指定欲储存至该储存地址所定义的存储器位置的储存数据。微处理器也包含控制逻辑单元,耦接该队列,用以接收载入指令。该载入指令包括指定用以计算载入地址的多个操作数的来源的载入信息。该控制逻辑单元用以检测到该载入信息符合保留在该队列项目的其中一有效项目中的该储存信息,并且相应地预测微处理器应转送由储存信息符合该载入信息的该储存指令所指定的该储存数据至该载入指令。文档编号G06F9/312GK101901132SQ201010247338公开日2010年12月1日申请日期2010年8月5日优先权日2009年8月12日发明者柯林·艾迪,罗德尼·E·虎克申请人:威盛电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1