具体实施方式
处理器概要
翻页至图1,该图显示处理器10的一项实施例的方块图。其它实施例是可能的及经过考量的。在图1的实施例中,处理器10包含路线预测器12、指令闪存(I-闪存)14、对准单元16、分支预测/提取PC产生单元18、多个译码单元24A-24D、预测器失误译码单元26、微码(microcode)单元28、对映单元30、隐退队列(retire queue)32、架构改名文件(architectural renames file)34、未来文件20、排程器36、整数寄存器文件38A、浮点暂存器文件38B、整数执行核心40A、浮点执行核心40B、加载/储存单元42、数据闪存(D-闪存)44、外部接口单元46及PC筒仓(silo)48。路线预测器12连接至预测器失误译码单元26、分支预测/提取PC产生单元18、PC筒仓48及对准单元16。I-闪存14连接至对准单元16及分支预测/提取PC产生单元18,该分支预测/提取PC产生单元18更连接至PC筒仓48。对准单元16更连接至预测器失误译码单元26及译码单元24A-24D。译码单元24A-24D更连接至对映单元30,并且译码单元24D连接至微码单元28。对映单元30连接至隐退队列32(该隐退队列连接至架构改名文件34)、未来文件20、排程器36及PC筒仓48。架构改名文件34连接至未来文件20。排程器36连接至寄存器文件38A-38B,该寄存器文件更连接至个别的执行核心40A-40B。执行核心40A-40B更连接至加载/储存单元42及排程器36。执行核心40A更连接至D-闪存44。加载/储存单元42连接至排程器36、D-闪存44及外部接口单元46。D-闪存44连接至寄存器文件38。外部接口单元46连接至外部接口单元52及I-闪存14。于此由图式标号伴随着字母所参照的组件将通过单独的图式标号来集合参照。例如,译码单元24A-24D将集合参照为译码单元24。
在图1的实施例中,处理器10使用可变位组长度、复杂指令集计算(complex instruction set computing,CSIC)指令集架构。例如,处理器10可使用该x86指令集架构(也意指为IA-32)。其它实施例可使用其它指令集架构,包含固定长度指令集架构及精简指令集计算(reduced instruction set computing,RISC)指令集架构。显示于图1的某些特征在此类架构下可以省略。此外,若有需要,任何上述的实施例可使用64位架构。
分支预测/提取PC产生单元18经由配置以提供提取地址(提取PC)给I-闪存14、路线预测器12及PC筒仓48。分支预测/提取PC产生单元18可包含用于辅助提取地址的产生的适当的分支预测机制。响应于该提取地址,路线预测器12提供对应于多个指令的对准数据给对准单元16,并且接续由该提供的指令数据所确认的指令可以提供用于提取指令的下一个提取地址。该下一个提取地址可以提供给分支预测/提取PC产生单元18或者依所需可以直接提供给I-闪存14。分支预测/提取PC产生单元18可接收来PC筒仓48的捕捉地址(若捕捉受到侦测)并且该捕捉地址可包括由分支预测/提取PC产生单元18所产生的提取PC。此外,该提取PC可使用该分支预测数据以及由路线预测器12的数据来产生。通常,路线预测器12储存对应于由处理器10预先臆测所提取的指令的数据。在一项实施例中,路线预测器12包含2K进入,每个进入找寻(locating)一个或一个以上之于此意指为指令的路线的指令群组。该指令的路线可以通过透过放置于排程器36内的处理器10的指令处理管线来同时处理。
I-闪存14为用于储存指令字节的高速高速缓存。依据一项实施例I-闪存可包括,例如,128千字节(Kbyte),使用46元组闪存路线的四向集合联合组织。然而,任何I-闪存构造将是合适的(包含直接对映构造)。
对准单元16接收来自路线预测器12的指令对准数据及对应于来自I-闪存14的提取地址的指令字节。对准单元16依据该提供的指令运算数据选择指令字节进入每个译码单元24A-24D。更明确地说,路线预测器12提供对应于每个译码单元24A-24D的指令指针。该指令指针找寻用于传送至该对应的译码单元24A-24D的该提取指令字节内的指令。在一项实施例中,某些指令可以传送至超过一个译码单元24A-24D。因此,虽然其它实施例可包含较多或较少译码单元24以提供较多或较少的指令于路线内,在该实施例的显示中,来自路线预测器12的指令的路线可包含约四个指令。
译码单元24A-24D译码所提供的指令,并且每个译码单元24A-24D对应于该指令产生确认一个或一个以上的指令运算(或ROPs)的数据。在一项实施例中,每个译码单元24A-24D对个指令可产生约二个指令运算。如同这里所使用的,指令运算(或ROP)为执行核心40A-40B内的执行单元经由配置以执行为单一实体的运算。简单的指令可符合单一指令运算,而较多复杂指令可符合多重指令运算。某些较多复杂指令可以于微码单元28内实现作为微码程序(在本实施例中是透过译码单元24D从只读存储器提取)。再者,其它实施例对于每个指令可使用单一指令运算(例如在此类实施例中,指令及指令运算可以同步)。
PC筒仓48储存该提取地址及用于每个指令提取的指令数据,并且当排除时负责重新指向指令提取(诸如由处理器10所使用的指令集架构所定义的指令捕捉)。PC筒仓48可包含用于储存提取地址的环状(circular)缓冲器及对应于多重指令路线的指令数据,而该指令在处理器10内可能尚待解决。响应于指令路线的隐退,PC筒仓48可舍弃该相对应的进入。响应于排除,PC筒仓48可提供捕捉地址给分支预测/提取PC产生单元18。隐退及排除数据可以由排程器36所提供。在一项实施例中,对映单元30指派一系列数目(R#)给每个指令以确认在处理器10内指令待解决的顺序。排程器36可回复R#s给PC筒仓48以确认指令运算经验排除或隐退指令运算。
当在路线预测器12上侦测失误时,对准单元16从I-闪存14至预测器失误译码单元26递送对相对应的指令字节。预测器失误译码单元26译码该指令,强制任何限制于指令的路线上,如同处理器10所设计(例如指令运算的最大数目、指令的最大数目、终止分支指令等等)。当终止路线时,预测器失误译码单元26提供该数据给路线预测器12以供储存。需注意的是预测器失误译码单元26可以经由配置以发送当经过译码的指令。此外,预测器失误译码单元26可译码指令数据的路线并且提供该数据给路线预测器12以供储存。接着,该失误提取地址可以于路线预测器12内重新尝试并且碰撞(hit)可以受到侦测。
除了当路线预测器12的失误而译码指令外,若由路线预测器12所提供的该指令数据为无效的,预测器失误译码单元26可以经由配置以译码指令。在一项实施例中,处理器10并未尝试保持与I-闪存14内的指令耦合的数据于路线预测器12上(例如当指令在I-闪存14内受到置换或无效时,可以不需主动地使该相对应的指令数据成为无效)。当侦测到无效指令数据时,译码单元24A-24D可确认所提供的指令数据,并且可发送信号给预测器失误译码单元26。依据一项特定的实施例,该下列的指令运算由处理器10所支持:整数(包含计算、逻辑、调换/循环及分支运算)、浮点(包含多媒体运算)及加载/储存。
该译码的指令运算及来源与目标寄存器数目将提供给对映单元30。对映单元30经由配置通过指派实体寄存器数目(PR#s)给每个指令运算的每个目标寄存器操作数及来源寄存器操作数以执行寄存器改名。该实体寄存器数目确认在寄存器文件38A-38B内的寄存器。对映单元30通过提供更新指派给该指令运算的来源操作数的每个实体寄存器数目的指令运算的R#s以额外地提供用于每个指令运算的附属的指示。基于该对应的逻辑寄存器数目,对应单元30以指派给每个目标寄存器(以及该对应的指令运算的R#)的实体寄存器数目来更新未来文件。此外,对映单元30储存该目标寄存器的逻辑寄存器数目、指定的实体寄存器数目及在隐退队列内的该先前指定的实体寄存器数目。当指令隐退时(由排程器36所指示的对映单元30),隐退队列32更新架构改名文件34并且释放任何将不再使用的寄存器。因此,在架构寄存器文件34内的该实体寄存器数目确认该实体寄存器储存处理器10的该托付架构状态,同时未来文件20显示处理器10的臆测状态。换言之,架构改名文件34储存对应于每个逻辑寄存器的实体寄存器数目,而显示用于每个逻辑寄存器的托付寄存器状态。未来文件20储存对应于每个逻辑寄存器的实体寄存器数目,而显示用于每个逻辑寄存器的该臆测的寄存器状态。
依据由对映单元30所指定的R#s,该指令运算路线、来源实体寄存器数目及目标实体寄存器数目储存至排程器36内。再者,对于特定指令运算的属性可以视为在储存于该排程器内的其它指令运算上的属性。在一项实施例中,指令运算仍存在于排程器36内直到隐退。
排程器36储存每个指令运算直到该属性显示指令运算已经符合为止。响应于用于执行的排程特定指令运算,排程器36可判断在那一个时钟周期特定的指令运算将更新寄存器文件38A-38B。在执行核心40A-40B内的不同的执行单元可使用不同数目的管线行程(并且因此为不同的延迟)。再者,某些指令可能在管线内比其它指令经历更多的延迟。因此,倒数计时将产生用以量测该特定指令运算的延迟(时钟周期的数目)。排程器36等候该特定数目的时钟周期(直到该更新将早于或与该附属指令运算读取该寄存器文件时同时发生),并且接着视该特定指令运算可以排程时指示指令运算。需要注意的是一旦本身附属已经符合时(意即在该排程队列内相对于本身顺序的脱序),排程器36可排程指令。整数及加载/储存指令运算依据由寄存器文件38A的来源实体寄存器数目读取来源操作数并且传送至执行核心40A以供执行。执行核心40A执行该指令运算并且更新指派给在寄存器文件38A内的该目标的实体寄存器。此外,执行核心40A视该指令运算(如果有)至排程器36而回报该指令运算的R#及排除数据。寄存器38B及执行核心40B对于浮点指令运算可以类似的方式运算(并且可提供用于浮点储存的储存数据给加载/储存单元42)。需注意的是若操作数所依赖的运算为同时完成的,用于附属运算的操作数可以直接绕过而至该附属运算。
在一项实施例中,执行核心40A例如可包含二个整数单元、分支单元及二个地址产生单元(具有相对应的转换后备缓冲器(translationlookaside buffers),或TLBs)。执行核心40B可包含浮点/多媒体乘法器、浮点/多媒体加法器及用于传送数据加载/储存单元42的储存数据单元。执行单元的其它配置是可能的,包含复合浮点/整数执行核心。
加载/储存单元42提供接口给D-闪存44以执行内存运算及排程对于失误D-闪存44的内存运算的填入运算。加载内存运算可以通过执行核心40A执行地址产生及传送数据给寄存器文件38A-38B(由D-闪存44或在加载/储存单元42内的储存队列)来完成。当通过执行核心40A的地址产生时,储存地址可以引入D-闪存44(直接透过在执行核心40A及D-闪存44之间的连接)。该储存地址为分配储存队列登入。依据设计选择,该储存资科可以同时地提供,或可以接续地提供。当该储存指令的隐退时,该数据储存于D-闪存44内(虽然在D-闪存44的隐退与更新之间可能有某些延迟)。此外,加载/储存单元42可包含失误D-闪存44用于后续闪存填入(通过外部接口单元46)及重新尝试该失误加载/储存运算的用于储存加载/储存地址的加载/储存缓冲器。加载/储存单元42经由配置以处理加载/储存内存附属。
D-闪存44为通过处理器10所存取用于储存数据的高速高速缓存。而D-闪存44可包括任何适当的构造(包含直接对映及集合联合构造),D-闪存44可包括128千字节,具有64字节路线之二向集合联合闪存。外部接口单元46经由配置透过外部接口52以与其它组件沟通。再者,外部接口单元46亦可执行由处理器10所产生的非闪存的读取及写入。
接着翻页至图2,该图为例示性管线图,说明一组可以由处理器10所显示的一项实施例所使用的例示性管线行程。其它实施例可使用不同的管线,管线包含比图2所显示的管线更多或更少的管线行程。该图2所显示的行程由垂直线所界定。每个行程为在处理器10中的用于时钟储存组件(例如寄存器、闩锁、开关(flip)及类似组件)的时钟信号的其中一个时钟周期。
如图2的说明,该例示性管线包含CAM0行程、CAM1行、路线预测(LP)行程、指令闪存(IC)行程、对准(AL)行程、译码(DEC)行程、对映1(M1)行程、对映2(M2)行程、写入排程(WR SC)行程、读取排程(RD SC)行程、寄存器文件读取(RF RD)行程、执行(EX)行程、寄存器文件写入(RF WR)行程及隐退(RET)行程。某些指令在该执行状态内使用多重时钟周期。例如,内存运算、浮点运算及整数乘法运算以分解形式说明于图2中。内存运算包含地址产生(AGU)行程、转换(TLB)行程、数据闪存1(DC1)行程及数据闪存2(DC2)行程。同样地,浮点运算包含约四个浮点执行(FEX1-FEX4)行程,以及整数乘法包含约四个(IM1-IM4)行程。
在该CAM0及CAM1行程期间,路线预测器12对分支预测/提取PC产生单元18所提供的提取地址与预测器内所储存的路线的地址做比较。此外,该提取地址在该CAM0及CAM1行程期间经转换由虚拟地址(例如在x86架构内的路线地址)成为实体地址。响应于在该CAM0及CAM1行程期间所侦测到的碰撞,该对应的路数据在该路线预测器行程期间由该路线预测器所读取。而且,I闪存14在该路线预测器行程期间初始化读取(使用该实体地址)。该读取在该指令闪存行程期间完成。
需要注意的是,当图2所说明的管线使用二个时钟周期以侦测提取地址而在路线预测器12内的碰撞时,其它实施例可使用单一时钟周期(及行程)以执行此运算。再者,在一项实施例中,路线预测器12提供对于碰撞的用于I-闪存14及下一个进入路线预测器12的下一个提取地址,并且因此该CAM0及CAM1行程可以略过来自路线预测器12的先前碰撞的提取。
由I-闪存14所提供的指令字节在该对准行程期间通过对准单元16的对准以译码单元24A-24D以响应来自路线预测器12所对应的路线数据。需要注意的是某些指令可能需对准超过一个译码单元24A-24D。译码单元24A-24D译码该提供的指令,在该译码行程期间确认对应于该指令的ROPs以及操作数数据。对映单元30在该对映1行程期间产生自于该提供数据的ROPs,并且执行寄存器改名(更新未来文件20)。在该对映2行程期间,该ROPs及指定的改名记录于隐退队列32内。再者,每个ROP所附属的ROPs将会判定。每徊ROP可以为附属早先记录于未来文件内的ROPs的寄存器,并且亦可显示其它附属形式(例如在先前序列指令的附属)。
该产生的ROPs在该写入排程行程期间写入排程器36内。直到此行程,由数据的特定路线所找寻的该ROPs以一个单位流入(flowthrough)该管线。需注意的是由于该ROPs可以由该微码ROM于多重时钟下读取,包括微码程序的ROPs对于先前所提的陈述可以是一个例外。然而,接续写入至排程器36,该ROPs在不同时间内可以单独流入该剩余的行程。通常,特定的ROP留在此行程直到由排程器36选择以供执行(例如在该特定ROP所附属的ROPs已经选择用于执行后,如上文所述)。因此,特定的ROP在该写入排程器写入行程及该读取排程器行程之间可以经历一个或一个以上的时钟周期延迟。在该读取排程器行程期间,参与在排程器36内的选择逻辑的该特定的ROP,经选择以供执行,以及由排程器36读取。该特定的ROP接着在该寄存器文件读取行程中由其中一个寄存器文件38A-38B(视ROP形式而定)执行读取寄存器文件运算。
该特定的ROP及操作数提供给该对应的执行核心40A或40B,并且该指令运算在该执行期间是在操作数上执行。如上文所述,某些ROPs具有数个执行的管线行程。例如,内存指令运算(例如加载及储存)透过地址产生行程(其中由该内存指令运算所存取的内存位置的数据地址将产生)、转换行程(其中由该地址产生行程提供的该虚拟数据地址将转换)及一对数据闪存行程(其中D-闪存44将存取)来执行。浮点运算可使用约四个时钟周期来执行,并且整数乘法器可类似地使用约约四个时钟周期来执行。
当完成该执行程行或多个行程时,该特定的ROP在该寄存器文件写入行程期间更新本身指定的实体寄存器。最后,在每个之前的ROP隐退后(在该隐退行程中),该特定的ROP将隐退。再者,对于特定ROP,在该寄存器文件写入行程及该隐退行程之间的一个或一个以上的时钟周期可能经过。再者,如同此项技艺中所习知的,特定的ROP可以在任何行程中因为管线延迟(stall)条件而延迟。
排程器
今翻页至图3,该图显示对映单元30、未来文件20、排程器36、整数执行核心40A及加载/储存单元42的说明的一项实施例的方块图。特定的例示性内连接以及该单元而非排程器36的一项实施例的特定内部细节说明于图3中。其它实施例是可能的并且经过考量的。在图3的实施例中,对映单元30连接至译码单元24A-24D、未来文件20及排程器36。排程器36更连接至外部接口单元46、整数执行核心40A及加载/储存单元42。在图3的实施例中,对映单元30包含目标改名电路60、内部路线附属检测电路62、顺序附属电路64、一组顺序附属寄存器66A-66N及多任务器(mux)68。目标改名电路60、内部路线附属检测电路62及顺序附属电路64连接至来自译码单元24A-24N的接收指令运算。目标改名电路60连接至多任务器68及排程器36。内部路线附属检测电路62连接至多任务器68,该多任务器更连接至未来文件20。未来文件20连接至对应于由对映单元30所接收的指令运算的接收来源操作数确认器。顺序附属电路64连接至顺序附属寄存器66A-66N及排程器36。加载/储存单元42包含经由连接以接收来自整数执行核心40A的实体地址的储存队列70。整数执行核心40A包含连接至转换后备缓冲器(TLB)40AB的地址产生单元40AA。
通常,对映单元30接收来自译码单元24A-24D的指令运算。对映单元30对于每个指令运算执行寄存器改名并且判定在排程器26内等待(或同时发送至排程器36)的位在旧的指令运算上的每个指令运算的附属性。对映单元30提供指令运算及寄存器改名给排程器36以供储存(及后来用于执行的发送)。因此,对映单元30提供用于每个指令运算的附属性的指示(如图3所显示的该来源操作数附属及该顺序附属)。尤其,对映单元30通过R#确认该旧的指令运算(该数目确认在排程器内部的指令运算)。指定给该操作数的实体寄存器的PR#提供给排程器36以供具有该指令运算的发送,但是并未用在判定该附属。排程器36储存该指令操作数及对应的附属,并且排程该指令运算以响应该符合的对应的附属。该排程指令运算将发送至经由配置以执行该指令运算的具有执行资源的执行核心40A-40B。
某些指令运算当发送时可能未完全执行。例如,在所显示的一项实施例中,内存运算可能未完全执行。若指令运算未完全执行,该指令运算将通过包含在该指令运算的执行内的单元所“隐退”。重试指令运算包含发送该指令运算将隐退的信号给排程器36。排程器36保留发送的指令运算,并且若该发送指令运算是隐退的,则排程器36重新发送该指令运算。尤其在一项实施例中,排程器36维持用于每个指令运算的执行状态。响应于先前发送指令运算的重试,排程器36重置该指令运算的执行状态成为“未执行”状态。接着,该指令运算可以重新发送。此外,程器36保留每个发送指令运算的附属。任何直接或非直接附属于该隐退的指令运算的指令运算也将回传至该未执行的状态。需要注意的是一群组的指令运算,其中该第一群组指令运算附属于特定指令运算并且其中每个于该群组内的其它指令运算附属于其中一个其它指令运算及透过其它指令运算于此是意指为“附属链接”的非直接附属于该特定的指令运算。重该执行状态而成为非执行的以响应该指令运算的重试或该指令运算是直接或非直接附属的另一个指令运算于此亦意指为“取消”该指令运算。
通过允许重试(以及重新发送以响应该重试)指令运算,排程器36可积极地排程指令运算以供执行并且可于较晚的时间通过重新发送该不正确地排程指令运算从不正确的排程来回复。用于不正确排程的代价实质上可以低于排除该不正确地排程指令运算及所有后来的指令运算以及在该不正确地排程指令运算上开始重新提取。
对映单元30使用目标改名电路60、内部路线附属检测电路62、未来文件20及顺序附属电路64以判定用于每个指令运算的附属。目标改名电路60接收用于每个指令运算的指示,该指示为是否该指令运算具有寄存器目标操作数以及若该指令运算确实具有寄存器目标操作数时是否具有目标寄存器数目。若该指令运算具有寄存器目标操作数,目标改名电路60指定空的实体寄存器数目给该指令运算。该指定的PR#s具有该指令运算提供给排程器36。此外,目标改名电路60提供每指令操作数的R#s及PR#s给工器68。
对于每个来源操作数寄存器数目,未来文件20提供最近具有相对应的架构寄存器作为目标操作数的指令运算的PR#及R#。尤其,未来文件20可包括用于每个架构寄存器的进入的对照表(以及在实施例中使用微码,每个微码临时暂存)。该来源操作数寄存器数目用于选择由该指令运算的来源操作数所详载的寄存器的进入。每个进入储存该最旧的指令运算的R#(在指令运算的目前的路线之前)以更新指定给该最旧的指令运算的目标的实体寄存器的寄存器及PR#。此外,未来文件20在每个进入包含有效位(V)。该有效位表示是否记录于该寄存器的R#是有效的(意即是否该对应的指令运算在排程器36内依然有效)。该有效位设定为对应于该R#至排程器36的指令运的发送,并且当该指令运算隐退时重置。当该进入经选择为该来源操作数附属时,该有效位将提供给排程器36。若该有效位清除时,排程器36并未记录用于该来源操作数的附属,并且若该有效位设置时,排程器36确实记录附属。
内部线路附属检测电路62接收每个指令运算的来源及目标寄存器数目并且由对映单元30所接收的指令运算的内部路线内执行附属检测。内部线路附属检测电路62比较该路线内的每个旧的指令运算的目标寄存器数目与该路线内的特定指令操作的来源寄存器数目。若发现其中一个来源操作数匹配时,内部线路附属检测电路62忽略来自对应于该来源操作数的未来文件20的R#及PR#与由目标改名电路60所提供的该对应的R#及PR#。若未发现匹配时,来自未来文件20的R#及PR#对于该来源操作数提供该正确的寄存器改名及附属R#。内部线路附属检测电路62产生多任务选择路线给多任务器68以选择该适当的R#及PR#给每个指令运算的每个指令操作数。需要注意的是多任务器68对于选择该来源操作数附属可表示任何适当的选择电路。例如,多任务器68对于在该路线内的每个可能的指令运算的每个可能的来源操作数可表示个别的多任务。
外部路线附属检测电路更可以比较在该路线内用于每个指令运算的目标寄存器数目以判定在该路线内的最旧的指令运算以更新在该路线内的一个或一个以上的指令运算的目标操作数的每个架构寄存器。未来文件20在对应于该路线的目标操作数的进入中,接着可以通过目标改名电路60所指定的R#s与PR#s来更新。该更新路径为了图式简简便并未显示于图3中
顺序附属电路64追踪可以依据某些指令运算的顺序附属。例如,在使用该x86指令集架构的一项实施例中,顺序附属定义为:(i)部分加载,该加载造成用于每个后续内存运算的顺序附属;以及(ii)浮动控制字符更新,该更新造成用于每个后续浮点指令运算的顺序附属。通常,任何对后续指令运算的产生连续阻碍(serialization barrier)的指令运算导致从该连续指令运算至后续影响的指令运算的顺序附属。“连续阻碍”是脱序或臆测执行在该程序顺序附近处受到禁止的一种阻碍。某些指令集架构具有该指令的唯一功能在于提供该连续阻碍的指令。
该上文提及的顺序附属可以使用顺序附属寄存器66A-66N来追踪。响应于产生顺序附属的指令运算的顺序附属电路64储存该指令运算的R#于其中一个顺序附属寄存器66A-66N。其中一个顺序附属寄存器66A-66N可以提供给由处理器10所侦测的每个顺序附属。此外,有效位可以包含内并且可以经过设置以响应于当该对应的指令运算的重新进入时记录R#及重置(类似于在末来文件20中的有效位)。响应于经定义而透过特定的顺序附属以顺序附属的指令运算,顺序附属电路64提供该对应的R#成为其中一个该顺序附属给该指令运算。
除了上述特定情况外,顺序附属电路64可使用对照表以追踪先前在较旧的内存运算及后续发现以附属该较旧的储存记忆运算(由该加载所存取的该内存操作数)之前所排程的加载内存运算的发生。当该附属在执行期间受到侦测时,该对照表可包括由该加载内存操作数的提取地址所标示以及使用该较旧的储存内存运算的提取地址所训练的第一表格。第二表格由该储存内存运算的提取地址所标示,并且在以该储存内存运算的R#的储存内存运算的发送时来更新。若该加载内存运算在对表中为碰撞时,该对应的R#将以顺序附属提供给该加载内存运算。
如上文所提及,排程器36排程及发送指令运算给适合的执行核心以响应侦测该指令运算的每个附属是满足的。尤其,内存运算是发送给在执行核心40A内的地址产生单元40AA。地址产生单元40AA接收来自整数寄存器文件38A所读取的寄存器操作数并且产生对应于该内存运算的内存运算的地址。该地址为虚拟地址,该地址透过由处理器10所使用的指令集架构所详载的地址转移技术转换成用于存取内存(及D-闪存44)的实体地址。TLB40AB是用于先前转换结果的闪存,允许碰撞的虚拟地址的快速转换成对应的实体地址并且透过该转换机制允许指定给该对应的内存位置的各种属性的快速判定。AGU40AA及TLB40AB的组合提供实体地址给加载/储存单元42(及以平行方式提供给D-闪存44及排程器36)。
加载/储存单元42判定是否该内存运算成功地完成执行或是隐退。若侦测到重试状况,加载/储存单元42维持该重试信号给排程器36并且透过该重试形式信号提供用于重试的理由。在一项实施例中,内存运算可以因下列的理由而重试:
(i)该内存运算为失误D-闪存44的加载内存运算;
(ii)该内存运算在该满的加载/储存单元42内需要缓冲器(意即通过外部接口单元46从主要内存用于储存待存取失误地址的失误缓冲器);
(ii)该内存在D-闪存44内经历一组与另一个内存运算同时存取D-闪存的冲突;(iv)该内存运算是储存内存运算并且需要自我修正码(SMC)检测。
(v)该内存运算是在储存队列70内碰撞一个或一个以上储存内存运算的加载内存运算(意即该一个或一个以上储存内存运算供给至少一个由该加载内存运算所存取的内存操作数的字节)并且储存队列70无法传递相对应的数据;(vi)该记忆体操作是非臆测地执行。
理由(i)编码为个别的重试形式,对于该形式在排程及重新发送加载地址运算前,排程器36等待由外部介单元46所提供的匹配填覆地址。外部接口单元46提供该填覆地址以显示正由该填覆地址至D-闪存44来提供以供储存(并且因此该对应的加载内存运算在D-闪存44内可能碰撞)。排程器36记录该加载内存运算(由执行核心40A所提供)的实体地址以供与该填覆地址比较。理由(ii)、(iii)及(v)可以编为单一重试形式,对于该形式排程器36通过重新排程该对应的内存运算而无任何特定的等待需求来响应。理由(iv)编码为重试形式并且在该SMC检测已经完成之后,排程器36可排程该对应的储存内存运算以供重新发送。理由(vi)编码为重试形式并且在该对应的内存运算变成非臆测时,排程器36排程用于重新发送的该内存运算。依据一项实施例,若该内存运算存取横跨页边界的内存操作数,内存运算将执行非臆测的(意即至少内存操作数的其中一个字节储存在由该第一地址转换所转换的第一页及至少内存运算的其中一个其它字节储存在由不同于第一地址转换的该第二地址转换所转换的第二页),该转换显示该内存运算的内存形式非臆测的,或该内存运算在该TLB内失误。用于非臆测地执行的该第一及最后理由为设计选择以简化该硬件,并且该中间的理由是由处理器10所使用的指令集架构所批准。
需注意的是,虽然上文描述意指非臆测地重新发送特定内存运算,其它指令运算可以非臆测地重新发送。例如,经过排除的任何指令运算(例如由该架构所详载的捕捉或错误或用于由处理器10所实现的该特定的微架构所定义的微架构排除)可以非臆测地重新发送。在此方式中,关于该排除的数据在该非臆测执行期间可以捕捉。因此,使用以储存及追踪排除数据的硬件数量可以最小化。
储存队列70视加载内存运算而提供额外的数据,该内存运算通过该碰撞及储存R#信号在该储存队列内碰撞储存内存运算。该碰撞及储存R#经由提供而不管是否该加载内存运算的重试发生。该碰撞信号显示在该储存队列内的碰撞受到侦测,并且该储存R#为通过该加载所碰撞的储存的R#。若由该加载所碰撞的储存接着重新执行时(并且接收不同的地址),此数据可以用于造成该加载内存运算的重试。该储存R#的使用将于下文做更详细的描述。需要注意的是,当该储存R#在此例子中使用时,任何确认该储存的识别器皆可使用。例如,可以提供确认由该加载所碰撞的在储存队列70内的储存队列进入的储存队列数目。此类实施例是经过深思考量的。
如上文所必须注意的,储存队列70在储存队列70的加载内存运算碰撞储存内存运算的所有的例子中可能不能传送数据。例如,各种加载内存操作数的字节可以由在储存队列70内的不同的储存所提供。然而,储存队列70可限定个别储存的数目,来自该储存的特定的加载内存操作数的字节可以传送。例如,若储存队列70能够由约两个储存内存运算传送数据,对于该特定的加载记忆体的不同的字节的在三个或更多储存内存运算的碰撞避免该特定的加载内存操作数的所有的字节的传送。此外,储存队列70的某些实施例在接收该储存数据前可接收该储存内存操作数地址。若该储存数据无法获得,即使碰撞可能侦测到,储存队列70不能传送该储存数据。
需要注意的是于此意指为比其它指令运算“较旧”或“较新”的指令运算。若在程序顺序中该第一指令运算早于该第二指令运算,则第一指令运算“较旧”于第二指令运算。另一方面,若在程序顺序中该第一指令运算接续该第二指令运算,则第一指令运算“较新”于第二指令运算。如同在此所使用的,该术语“发送”意指传送指令运算给执行单元以供执行。该术语“重新发送”意指先前发送(并且发现为不正确执行,不论是直接透过重试或非直接透过由排程器36所记录的附属以供指令运算)的指令运算的发送。再者,该术语“记忆运算”于此是用于意指具有内存运算的指令运算。加载内存运算具有来源操作数作为来源操作数(以及寄存器目标操作数)并且详载来自该内存来源操作数的数据的转移而至该寄存器目标操作数。储存内存运算具有寄存器来源操作数及内存目标操作数,并且详载来自该寄存器来源操作数的数据的转移而至该内存目标操作数。需要注意的是,虽然图3说明地址产生单元40AA及相对应的TLB40AB,各种实施例可包含何数目的地址产生单元及TLBs。加载/储存单元42可提供个别的重试信号,重试形式信号、碰撞信号及储存R#s给对应于每个AGU的内存运算。
翻页至图4,该图显示排程器36的一项实施例的方块图。其它实施例是可能的并且经过考量的。如图4所示,排程器36包含指令运算(ROP)缓冲器80,发送选取电路82、隐退限制选取电路84、ROP控制电路86、附属缓冲器88、实体地址缓冲器90、储存电路缓冲器92、隐退电路94及附属译码电路96。ROP缓冲器经由连接以接收指令运算(包含如同实时或位移数据的数据等等)及来自对映单元30的指定PR#s并且经由连接以提供发送指令运算及PR#s给寄存器文件38A-38B及执行核心40A-40B。ROP缓冲器80更经由连接至发送选取电路82,该电路连接至ROP控制电路86。隐退限制选取电路84连接至隐退电路94及ROP控制电路86,该电路连接至隐退电路94、附属缓冲器88、实体地址缓冲器90及储存R#缓冲器92。ROP控制电路86更经由连接以接收来自加载/储存单元42的重试及重试形式信号。附属译码电路96经由连接以接收来自对映单元30的来源附属R#s及顺序附属R#s并且连接至附属缓冲器88。实体地址缓冲器90经由连接以接收来自外部接口单元46的填覆地址及来自执行核心40A的一个或一个以上的地址。储存R#缓冲器92经由连接以接收来自加载/储存单元42的一个或一个以上的碰撞信号及一个或一个以上的储存R#s。
附属译码电路96接收该R#s识别指令运算,在该指令运算上,写入至排程器36的每个指令运算是附属的并且译码该R#s进入用于该对应的指令运算的附属指示。如上文所提,若R#显示为有效的(例如来自未来文件20),则基于该R#的附属并未显示。如同相对于提供的译码电路96,对映单元30对于每个指令运算可直接产生附属指示(例如通过提供诸如图5所显示的附属向量给每个指令运算)。通常,附属指示指定给第一指令运算及第二指令运算,并且确认在该第二指指令运算上的第一指令运算的附属(或该指令运算的欠缺)。例如,每个附属指示可包括一个位表示当设置时的位在该第二指令运算上的第一指令运算的附属及表示当清除时的位在该第二指令运算上的第一指令运算的附属的欠缺。该位的设置及清除意义在一项实施例中可以保留,并且该附属指示的其它编码是可能的。
附属译码电路96提供该附属指示给附属缓冲器88以供储存。附属缓冲器88包括多重附属进入,每个该进入指定给在ROP缓冲器80内的两个进入。该附属进入储存该附属指示,该指示确认储存于两个在ROP缓冲器80内的其中一个的第一指令运算的附属或欠缺附属,而该缓冲器位在储存于该两个进入的另一个进入的第二指令运算上。若该附属指示显示附属,则该第一指令运算并未准许排程直到该第二指令运算满足该附属。
ROP控制电路86在监测于附属缓冲器88内的附属指示及该附属的符合,并且确认准许排程的指令运算。ROP控制电路86确认该准许指令运算给发送选取电路82,该电路扫描该准许指令运算以选择用于发送给该执行核心40A-40B的指令运算。选择指令运算由ROP缓冲器80所读取以响应发送选取电路82,并且提供给寄存器文件38A-38B及执行核心40A-40B以供执行。通常,发送选取电路82经由配置以选择在每个执行核心40A-40B内的每个执行单元的指令运算(若该形式的指令运算准许用于排程)。该选择的指令运算为准许用于排程的形式的最旧的指令运算。在一项实施例中,发送选取电路82每周期二次扫描该准许指令运算以允许给定形式的二个指令运算的选择。该第二扫描选取用于发送给特定形式的第二执行单元的第二指令运算(意即二个地址产生单元及二个ALUs在一项实施例中提供给执行核心40A)。在该第二扫描中,在该第一扫描期间所选择的指令运算将遮蔽(maskedoff)(意即显现不合格)以便该对应形式的第二最旧的指令运算可以选择。
在一项特定的实现中,发送选取电路82可包括用于每个指令形式的独立选取电路。每个选取电路以平行于其它取电路的运算可扫描用于该对应形式的指令运算。每个指令形式可使用来自其它指令形式的不同的执行资源(例如执行单元),允许该选取电路的独立运算。
发送选取电路82回报(给ROP控制电路86)那一个指令运算已经选择以供发送。该选择指令运算意指作为排程,并且一旦指令运算由ROP缓冲器80读取时,该指令运算将发送(或重新发送)。ROP控制电路86对每个指令运算维持执行状态。该执行状态可广泛地定义以含“不执行”状态、“执行”状态及“已实行(done)”状态。每个这些状态依据设计选择可包括多重状态,如同图8所显示的于例示性状态机的说明。指令运算一旦储存至排程器36内将视为不执行,直到该指令运算发送。该指令运算的执行状态改变为执行以响应于该发送,并且当完成执行时接着改变成已实行状态。若该指令运算为隐退(例如透过来自加载/储存单元42的该重试信号)或者若该指令运算所附属(直接地或非直接地)的另一个指令运算为不实行时,该指令运算的执行状态在任何时刻可以改变成该不执行状态(或可以为不实行(undone))。若该特定指令运算具有不执行的执行状态并且若该特定指令运算的每个附属已经符合时,ROP控制电路86通常可以确认特定指令运算为准许用于排程。
由于指令运算的执行状态改变为不执行以响应对于该指令运算的重试,该指令运算可变成准许排程及重新发送以响应该重试。然而,某些重试形式可能详载该指令运算未重新排程直到后续事件的发生(例如在加载内存运算的例子中所提供的填覆地址失误或该指令运算变成不臆测)。在此类例子中,ROP控制电路86可改变该退隐ROP的执行状态成为不执行但是对于排程可以不发送该指令运算为准许的信号直到该后续事件发生时。
由于该附属指令并未由附属缓冲器88删除以响应于发送该对应的指令运算,当该附属变成符合时在附属链接内的指令运算可以臆测地发送。若该特定的指令运算为不实行时,在特定指运算上的其它指令运算的附属将重新分类为不符合,并且因此那些其它指令运算亦变成不实行。在此方式中,臆测地发送附属链接为不实行及重新发送以响应在该链接内的该第一指令运算的重试。
除了在加载内存运算的执行期间重试回报外,加载内存运算亦可因为接续该加载内存运算的较旧的储存内存运算发送而重试。实体地址缓冲器90提供用于检测这些重试流程。通常,加载内存运算并未显示(透过在附属缓冲器88内的该附属指示)为附属于较旧的储存内存运算。相反地,加载内存运算经由排程而不管较旧的储存内存运算(在实施例中使用上文所述的该顺序附属机制的排除)。然而,若该较旧的储存内存运算更新由该加载内存运算所存取的内存操作数的至少其中一个字节,加载内存运算可以附属于较旧的储存内存运算是可能的。为了侦测这些流程,实体地址缓冲器90储存由该加载(由执行核心40A所接收)所存取的实体地址。实体地址缓冲器90包含相同于ROP缓冲器80的进入的数目,每个进入能够储存用于加载内存运算的实体地址数据并且指定给在ROP缓冲器80内的对应的进入。对应于执行加载内存运算的进入使用该加载内存运算的实体地址来更新。
在储存内存运算的执行期间,通过该储存内存运算所新的实体地址由执行核心40A所提供。实体地址缓冲器90比较该储存地址与对应于较新的加载内存运算的在实体地址缓冲器90内的实体地址。换句话说,该址比较为较新于该执行储存内存运算的对应于指令运算的在实体地址缓冲器90内的该进入做遮蔽。若在加载地址上的储存地址的碰撞受到侦测,该对应加载内存运算为不实行(实体地址缓冲器90发送信号给ROP控制电路86指示该对应加载内存运算已经碰撞,并且ROP控制电路86改变该对应加载内存运算的执行状态成为不执行)。该对应的加载内存运算于后来重新发送。在该重新发送后的执行期间,该加载内存运算将碰撞在储存队列70中的该较旧的储存内存运算(并且该储存数据将传送或该加载内存运算隐退)或者该较旧的储存内存运算将必须更新该闪存及/或主要内存。在两者的例子中,该加载内存运算在重新发送后接收该正确的内存操作数并且成功地完成执行。需要注意的是在实施例中,若加载内存运算因为较旧的储存碰撞在实体地址缓冲器90内的对应的实体地址而为不实行时,该加载内存运算可以训练至在顺序附属电路64内的对照表中。
虽然实体地址缓冲器90在该加载内存运算附属的旧的储存内存运算之前提供来自加载内存运算的不正确排程的用于回复的机制,可能造成该加载内存运算变成不实行的该另一个问题可能存在。即使附属在该储存内存运算之后的该加载内存运算受到排程并且该储存数据由在加载/储存单元42内的该储存队列所传送,该储存内存运算本身可能变成不实行。该储存内存运算(使用于形成该储存内存运算的内存操作数的地址)的地址操作数在该重新发送期间(意即接收不正确的地址操作数可能是该重新发送的原因)可以是不同的,并且因此该储存地址在该重新发送执行期间可能不会碰撞实体地址缓冲器90并且造成该加载内存运算变成不实行。排程器36具备有储存R#缓冲器92以处理此种可能性。
响应于侦测加载内存运算的碰撞于储存队列70内的储存,加载/储存单元42提供碰撞信号给排程器36及由该加载内存运算所碰撞的储存内存运的储存R#。类似于实体地址缓冲器90,储存R#缓冲器92包含与ROP缓冲器80相同的进入数目。每个该进入指定给在ROP缓冲器80内的对应的进入。若该碰撞信号维持用于执行加载内存运算,储存R#缓冲器92储存由加载/储存单元42所提供的该储存R#。
加载/储存单元42亦提供执行储存的R#以储存R#缓冲器92。该储存R#与储存于储存R#缓冲器92的该R#做比较。若侦测到符合时,储存R#缓冲器92发信号给ROP控制电路86告知该对应的加载内存运算为未实行。ROP控制电路86改变该对应的加载内存运算的执行状态成为不执行以响应该信号。接着,该加载内存运算重新排程及重新发送。需要注意的是若有需要,该储存R#在该储存内存运算的执行期间可以由执行核心40A所提供。
除了侦测该储存以加载如上文所描述的附属,实体地址缓冲器90可以用于其它目的。例如,实体地址缓冲器90可以用于判定何时失误D-闪存44的加载内存运算是欲重新发送。该加载内存运算是接续将由外部接口单元46所提供的该对应的数据来重新发送。因此,外部接口单元46提供填覆地址确认将提供给D-闪存44的填覆数据。实体地址缓冲器90比较该填覆地址与储存在该缓冲器内的地址并且发送任何符合信号给ROP控制电路86。在响应中,ROP控制电路86记录用于加载内存运算的数据已经受到提供并且该加载内存运算可以重新排程(假设该加载内存运算的其它附属是符合的)。
外部接口单元46更可提供对应于在外部接口所接收的探测(probes)的探测地址。通常,若处理器10具有该闪存时钟的复制时,探测是用于维持在计算机系统内的闪存一致性以及记载由另一个组件所取得的闪存时钟及提供该闪存时钟的适当的闪存状态。若该探测地址碰撞在实体住址缓冲器90内的加载实体地址时,该对应的加载可能需要重新排程以维持一致性及由处理器10所使用的指令集架构所详载的该内存顺序原则。例如,该x86指令集架构详载清楚的内存顺序。因此,若先前内存运算存在于排程器36内并且具有不执行,由探测所碰撞的臆测的加载可能需要重新排程。
如同上文所描述,ROP缓冲器80储存该指令运算并且发送该指令运算给寄存器文件38A-38B及响应于该发送选取电路82的执行核心40A-40B。ROP缓冲器80包括多个进入,每一个进入能够储存一个指令运算。指定给特定的指令运算的进入由该指令运算的R#所确认。因此,每个在ROP缓冲器80内的进入具有:(i)对应的第一指定集附属进入于附属缓冲器88内,该缓冲器储存指令运算的附属指示于排程器36内的其它指令运算上的该进入内;(ii)对应的第二指定集附属进入,该进入储存其它指令运算的附属指示于该进入的指令运算上的排程器36内;(iii)对应的实体地址缓冲器进入;以及(iv)对应的储存R#缓冲器进入。总括来说,对应于给定的R#的排程器36的各种缓冲器内的进入于此是意指为“排程器进入”。
隐退限制选取电路84及隐退电路94联合隐退来自排程器36的指令运算。ROP控制电路86指示隐退限制选取电那一个指令运算具有已实行的执行状态。隐退限制选取电路84扫描来自排程器36的头部的指示(意即在排程器36内的最旧的指令)给具有未实行的执行状态的第一指令运算或者已经扫描及皆处于已实行状态的指令运算的预定的最大数目。隐退限制选取电路84因此判定可以隐退的该最新的指令运算。隐退限制选取电路84与可以隐退的最新的指令运算沟通,并且隐退电路94判定有多少指令运算实际上是隐退的。隐退电路94播送待隐退的最后的指令运算的R#,并且与将隐退的指令运算的ROP控制电路86通沟。对于每个隐退指令运算,ROP控制电路86使在ROP缓冲器80、实体地址缓冲器90及储存R#缓冲器92内部的该对应的进入成为无效。此外,对于每个隐退指令运算,ROP控制电路86清除在该隐退指令运算上的指令运算的指示附属的附属缓冲器88内的每个附属进入。
如同于此所使用的,该术语“缓冲器”意指内存经由配置以储存数据的项目。该缓冲器可包含一个或一个以上的进入,每个该进入为包含充分储存以储存其中一个用于该缓冲器所设计的数据项的在该内存内的储存位置。
需要注意的是,虽然实体地址缓冲器90及储存R#缓冲器92经由描述为具有相同于ROP缓冲器80的进入的数目,其它实施例可使用具有较少进入的缓冲器。每个在该缓冲器90或92的进入例如可包含确认在ROP缓冲器80内储存该对应的加载内存运算的该进入的标记(tag)。更需要注意的是,如同先前所提及的,该储存队列数目可以代替该储存R#来使用以侦测那一个加载内存运算经侦测为碰撞的储存内存运算的重新发送。
今翻页至图5,该图显示附属向量100的一项实施例的方块图。附属向量100包含多个附属指示102A-102N。每个附属指示102A-102N显示对应于在排程器36内的其中一个其它指令运算上的附属向量100的指令运算的附属(缺乏该附属)。该指令运算因此可以附属于任意数目的其它指令运算上。再者,由于附属为依据该指令运算而非附属的形式来记录,该附属可以以任何理由来产生(例如为了处理器10的简化设计)。如同上文所提及的,附属向量100可以通过对映单元30所提供的译码附属R#s及在附属向量100内设置对应的附属指示以显示附属以及设置该剩余附属指示以显示无附属而来产生。另外,对映单元30可提供图5所显示的形式的附属向量给排程器36以供储存。
翻页至图6,该图显示附属缓冲器88的一项实施例的方块图。其实施例是可能的并且经过考量的。在图6的实施例中,附属缓冲器88包含含有附属进入104A-104L的多个附属进入。确认储存在排程器36的特定进入的特定指令运算的附属的该附属进入(意即在ROP缓冲器80内及在实体地址缓冲器90与储存R#缓冲器92内的对应的进入)经由安排为附属进入之列及栏。每个附属进入之列储存详载在特定的排程器进入内的特定的运算的附属的附属指示。例如,确认在排程器进入0的指令运算的附属的附属进入是记录于附属进入104A-104G内(以及未显示的在该列内的中间媒介进入(intermediate entries))。显示于附属附属进入104A-104G的该例示性附属指示说明在排程器进入N-2(附属进入104F)的指令运算上的排程器进入0内的该指令运算的附属。再者,附属进入的每个栏详载在特定指令运算上的每个其它指令运算的附属。例如,在排程器进入0内的指令运算上的每个其它指令的附属是记录于附属进入104H-104L内。所显示的该例示性附属指示说明在排程器进入0内(附属进入104I)的指令运算上的排程器进入2内的该指令运算的附属。
附属缓冲器88经由连接以接收一组输入信号(从Block(0)至Block(N-1))。每个Block信号对应于于其中一个排程器进入。当信号植入时,该Block信号显示储存在该对应的排程器进内的指令运算具有未符合于该指令运算上的附属。当信号不植入时,该Block信号显示在指令运上的该附属已经符合。通常,该信号在写入该对应的指令运算至排程器时将植入并且在该对应的指令运算执行期间不植入。若该指令运算是隐退或是其它变成不实行时,该Block信号将不植入直到该对应的指令运算为重新执行。该Block信号依据该对应的指令运算的执行状态而通过ROP控制电路86来植入及不植入。每个Block信号传递给记录在对应的指令运算上的其它指令运算的附属的附属进入。例如,Block(0)递送给附属进入104H-104L。当该禁止信号为植入时,该对应的附属经由考量为符合。例如,当Block(0)为植入时,在该排程器进入0的指令运算上的排程进入2内的指令运算的附属是符合的。
附属缓冲器88更提供多个输出信号(Not_Blocked(0)至Not_Blocked(N-1))。每个Not_Blocked信号对应于其中一个排程器进入。当植入该Not_Blocked信号表示储存于该对应的排程器进入的指令运算的附属已经符合。当不植入时,该Not_Blocked信号表示储存于该对应的排程器进入的指令运算的附属已经不符合。通常,该Not_Blocked信号是不植入的直到对应于该对应指令运算的附属的最后Block号为不植入,并且接着该Not_Blocked信号为植入的。该Not_Blocked信号是植入的对于指令运算是准许排程的,至少是对于该指令运算的附属(意即其它条件,诸如详载在后续事件上等待的重试形式,可以禁止排程)。每个Not_Blocked信号是递送给记录该对指令运算的附属的附属进入。例如,Not_Blocked是递送给附属进入104A-104G。每个该Not_Blocked信号可为预充电以植入并且接着由一个或一个以上的附属进入反植入的wire-OR路线,对于该路线该对应的Block信号是植入的并且该附属指示表示附属。
通过记录依据在该排程器内的指令运算的位置的附属(例如通过R#)而相对于依据资源或附属理由,附属缓冲器88可以较容易在高频率下实现及运算。在附属缓冲器内的布线可以极为正规的(意即无该附属缓冲器的面积在布线上是阻塞的并且该布线甚少重叠)。该正规性容易实现并且对于高频率运算具有贡献(例如允许密集的附属缓冲器88的实现)。
需要注意的是如同图6所显示的来自上左至下右的在对角上的附属进入将表示在本身上面的指令运算的附属。这些附属进入可能不实行(如同该表示那些进入的虚框的说明)。于此所使用的,该术语“植入”意指提供逻辑真值的信号或位。若其传送表示特定条件的值时,信号或位石以可以植入。当其传送逻辑零值,或者反过来,当其传送逻辑壹值时,信号或位可以定义成为植入,并且当该相反逻辑值传送时,该号或位可以定义为非植入。
今翻页至图7,该图显示用于说明的更详细的部分附属缓冲器88及ROP控制电路86的一项实施例方块图。其它实施例是可能的且经过考量的。依据图7的实施例,ROP控制电路86包括多个独立电路,每个该电路对应在排程器36内的进入。例如,在该排程器内的entry(i)表示于图7中。ROP控制circuit(i)86A说明用于追踪储存在entry(i)内的指令运算的执行状态。因此,该图显示储存在entry(i)内的指令运算的储存附属的数个附属进入104M-104N。尤其,该图显示表示储存在entry(i)的指令运算的附属于储存在entry(j)的指令运算上(附属进入104M)及储存在entry(j+1)的指令运算上(附属进入104N)。该Block(i)及Not_Blocked(i)信号以及该Block(j)及Block(j+1)信号皆显示于图中。ROP控制circuit(i)86A经由连接以提供该Block(i)信号并且经由连接以接收该NOT_Block(i)信号。此外,ROP控制circuit(i)86A经由连接以接收来自实体地址缓冲器90的retry_PA(i)信号及fill_hit(i)信号、来自外部接口单元46的填覆/探测信号、来自储存R#缓冲器92的retry_stq(i)信号、来自加载/储存单元42的重试信号及重试形式信号、来自执st行q核心40A-40B的almost_done信号及来自发送选取电路82的pick(i)信号。再者,ROP控制circuit(i)86A经由连接以提供request(i)信号给发送选取电路82。
当写入该指令运算至entry(i)时,ROP控制circuit(i)86A开始监测储存在entry(i)的指令运算的附属。直到该指令运算已经满足在该指令运算上的其它指令运算的附属,ROP控制circuit(i)86A植入该Block(i)信号(该信号递送给记录在该指令运算上的其它指令运算的附属的该附属进入)。当该指令运算的执行状态是在不执行状态时,并且当该执行状态是在执行状态但是并未足够接近以完成执行以具有符合的附属时,该指令运算未具有符合的附属。因此,ROP控制circuit(i)86A监测该Not_Blocked(i)信号以判定何时该指令运算的附属已经符合。
储存在其它指令运算上的指令运算的附属指示的每个附属进入104经由连接以植入该Not_Blocked(i)信号以表示该指令信号是禁止的。例如,该附属进入104M连接至AND栅极106A及晶体管108A并且附属进入104N连接至AND栅极106B及晶体管108B。若该附属指示储存及该附属进入显示附属以及该对应的Block信号是植入的,该AND栅极驱动不植入该Not_Blocked(i)信号的该对应的晶体管。另一方面,若该附属指示显示无附属或该Block信号为不植入,该AND栅极不驱动该对应的晶体管并且该晶体管不植入该Not_Blocked(i)信号。因此,在该entry(i)上的指令运算并未附属的该指令运算并未阻碍该指令运算的发送。在该entry(i)上的指令运算是附属的该指令运算阻碍该指令运算的发送,直到该附属是符合的(由该对应的Block信号的不植入所表示)。
响应于该Not_Blocked(i)信号为植入的,ROP控制circuit(i)86A植入该request(i)信号给发送选取电路82。发送选取电路82扫描该request(i)信号以及来自对应于其它进入的其它控制电路的类似信号。一旦发送选取电路82排程在entry(i)内的该指令运算以供发送,发送选取电路82植入该选取(i)信号。响应于该pick(i)信号,ROP控制circuit(i)改变该植入状态成为执行。如同上文必须注意,在本实施例中,排程器36记录该执行运算的隐藏(latency)及计算来自该指令运算的发送的时钟周期以判定附属符合的时刻点。其它实施例例如可接收来自执行单元的完成信号,或者使用任何其它额外的机制用于判定何时附属将符合。因此,在本实施例中,某些指令运算具有可变的隐藏或具有比欲计算较长的隐藏。对于此类指令运,执行核心40A-40B可提供almost done信号。当该执核心判定可变的隐藏指令运算已经达到预定的来自完成的时钟周期的数目时,该almost_done信号将植入。该almost_done信号可以由ROP控制circuit(i)86A使用以开始计算周期,在该指令运算已经完成执行的时刻点达到该预定的数目。
若该指令运算为内存运算,ROP控制circuit(i)86A在重试情况提供给储存在entry(i)内的指令运算的时钟周期期间取样来自加载/储存单元42的该重试信号。响应于植入重试信号,ROP控制circuit(i)86改变该执行状态成为不执行并且重新植入该Block(i)信号。在此方式中,该指令运算回传至预发状态并且在具有指令运算的附属链接内的后续的指令运算亦回传至预发送状态(透过该对应的NOT_Blocked信号的不植入)。此外,若该重试信号为植入时,ROP控制circuit(i)86A取样该重试形式信号。若该试形式在该指令运算为重新发送前需要后续事件的发生,ROP控制circuit(i)86A记录该待搜寻事件并且禁止请求重新发送(通过不植入该request(i)信号)直到该后续事件发生。
除了在执行期间的隐退外,加载内存运算可以因为执行储存内存运算的实体地址碰撞该加载内存运算的实体地址(储存在实体地址缓冲器90内)或该执行储存内存算的RR#碰撞记录用于该加载内存运算的储存R#而隐退。实体地址缓冲器90植入retry_PA(i)信号以将先前情况通联给ROP控制circuit(i)86A(并且可包含用于每个其它进入的类似的信号)。储存R#缓冲器92植入retry_stq(i)信号以通联该后来的情况(并且可包含用于每个其它进入的类似的信号)。响应于每个信号的植入,ROP控制circuit(i)86A改变该执行状态成不执行并且重新植入该Block(i)信号。假设该Not_Blocked(i)信号为植入,ROP控制circuit(i)86A可植入该request(i)信号以请求该指令运算的重新排程及重新发送。
除了该重试、retry_PA(i)及retry_stq(i)信号外,若该Not_Blocked(i)信号为不植入时,该指令PA运算的执行状态可以回传而不执行。当指令运算在该链接之一开始为不实行时,此机制用于取消附属链接的该已实行状态以造成在该附属链接内的指令运算的重新发送。因此,若该Not_Blocked(i)信号为不植入时,ROP控制circuit(i)86A改变该执行状态成为不执行并且重新植入该Blick(i)信号(该信号后续可能造成其它Not_Blocked信号不植入,更进而取消该附属链接)。
实体地址缓冲器90提供额外的信号给ROP控制circuit(i)86A以指示是否由外部接口单元46所提供的地址碰撞在实体地址缓冲器90内的加载的实体地址,如同在图7所显示的fill_hit(i)。实体地址缓冲器90植入该fill_hit(i)信号以指示由外部接口单元46所提供的地址碰撞在实体地址缓冲器90内指定给entry(i)的实体地址。外部接口单元46亦提供填覆/探测信号以指示所提供的地址的形式。若该填覆/探测信号指示填覆,则该fill_hit(i)的植入是指示包含该加载内存运算的实体地址的用于该闪存路线的填覆数据正在受到提供。若该加载内存运算因为在先前发送期间侦测闪存失误而由排程所禁止,该载入内存运算可以臆测用于排程并且ROP控制circuit(i)86A可植入该request(i)信号以响应该填覆地址碰撞。上文所提及的实施例亦提供来自外部接口单元46的地址以完成探测。若该fill_hit(i)信号为植入并且来自外部接口单元46的该填覆/探测信号表示探测时,则可能需要正确的动作的探测碰撞将受到侦测。在一项实施例中,用于探测的fill_hit(i)的植入可造成ROP控制circuit(i)86A改变执行状态成为不执行。其它实施例可尝试更多详尽的机制以确保内存顺序而不会过度重新发送指令运算。例如,ROP控制circuit(i)86A可通过该探测住址记录碰撞。若较旧的加载内存运算于后续由该排程器所隐退,则ROP控制circuit(i)86A可改变该执行状态为不执行。其它的选择亦是可能的。
翻页至图8,该图显示可以由ROP控制circuit(i)86A的一项实施例所使用的例示性的状态机。其它控制电路可使用类似的状态机。其它实施例是可能的并且经过考量的。在图8的实施例中该状态机包含无效状态110、禁止状态112、请求状态114、执行可变(ExecV)状态118、Exec6状态120、Exec5状态122、Exec4状态124、Exec3状态126、Exec2状态128、Execl状态130及已执行状态132。
当该对应的进入未储存于指令运算时,该状态机在该无效状态110下开始。响应于写入至该对应进入的指令运算,该状态机转移至禁止状112或请求状态114。若该指令运算具有一个或一个以上的未符合的附属,禁止状态112将受到选择。易言之,若该Not_Blocked(i)信号为不植入时,禁止状态112将受到选择,并且若该Not_Blocked(i)信号为植入时,禁止状态114将受到选择。在其它实施例中,指令运算可以写入至具有预定的等待事件的排程器内,该事件阻碍来自待排程的指令运算即使所有附属是符合的(在指令运算已经回传至该不执行状态后,以一种类似可禁止重新排程的事件)。此类指令运算可造成对该禁止状态112的转移即使该Not_Blocked(i)信号为植入的。
该状态机仍留在禁止状态112内直到该指令运算变成不禁止。虽然在本实施例中来自无效状态110至禁止状态112或请求状态114的转移可以基于该Not_Blocked(i)信号,来自禁止状态112至请求状态114的转移考量重试情况的影响,在该指令运算是臆测用于排程之前,该情况详载后续事件的发生。在图8的区块134中包含用于用在上文描述的实施例的图8内的箭号上的禁止转移项目的判断式。尤其,若该Not_Blocked(i)信号是不植入的,指令运算是禁止的,或者先前发送将造成判定该指令运算为非臆测地执行(blocked_non_spec)并且仍然为臆测的,或者先前发送造成闪存失误(blocked_until_fill)并且填覆数据仍然未提供。依所需的其它实施例可包含禁止重新排程的额外的事件。一旦该指令运算不禁止时,该状态机由禁止状态112转移至请求状态114。
当该状态机是在请求状态114内时,ROP控制circuit(i)86A植入该request(i)信号。若该指令运算再度变成禁止而在请求状态114时,该状态机转移至禁止状态112。该状态机从请求状态转移至其中一个状态118-128(基于该指令运算的隐藏)以响应该pick(i)信号的植入。在一项实施例中该状态转移以响应该pick(i)信号可对应于图2的管线的读取排程器行程。
本实施例支持二至六个时钟周期的隐藏,以及大于六个时钟周期的可变隐藏。该状态机仍保留在ExecV状态118内直到该almost_done信号由执行核心40A-40B所植入,并且接着转移至该Exec6状态120。若该指令运算并未不实行,如图8所显示,每个exec6状态120从exec2状态128转移至下一个在该隐藏链接内的较低的状态。从Execl状态130,若该指令运算并未不实行时,该状态机转移至该已实行状态132。最后,若该指令运算在隐退之前并未不实行,该状态机从已实行状态132转移至无效状态110。
在图式中为了明确起见,该pick(i)信号显示为将选取节点116,从该节点中其中一项状态118-128将进入。选取节点116仅用于减少在图式中的混乱状态,并且并非意在表示分离的状态。
在本实施例中,该指令运算的隐藏为了图8的状态机的目的在该指令运算已经符合在该指令运算的附属之前为时钟周期的数目。此种隐藏在该指令运算回传执行状况数据之前可以终止(意即是否该指令运算经历了排除)。然而该状态机具有在指令运算受到排程与该指令运算由寄存器文件38A-38B读取操作数之间的管线延迟以表示附属在该附属实际上为透过该寄存器文件的更新的实体附合之前是符合的。因此,若在本实施例中该指令运算已经达到该Exec2状态128时,该Block(i)信号是不植入,并且若该状态机是在Execl状态130、已实行状态132或无效状态134(见区块134)内,该Block(i)信号保留不植入。该Block(i)信号对于其它状态是植入的。
在任何已经排程(pick(i)植入)后的位置,该指令运算可变成不实行并且回传成不执行状态。此种操作通过每个状态118-132显示基于“取消”判断式(区块134)转移成中央点位置(central_point)136而说明于图8中,从该位置转移至禁止状态112或请求状态114是基于说明于区块134内的禁止判断式而执行。中央点位置136仅用于减少在图式中的混乱,而非表示分离的状态。对于每个显示转移至中央点位置136的状态,若该取消判断式为真且该禁止判断式为真,则至禁止状态112的转移将执行,并且若该取消判断式为真且该禁止判断式为假,则至请求状态114的转移将执行。
在本实施例中,若该指令运算是直接隐退或者若该Not_Blocked(i)信号变成不执入,则指令运算变成“不实行”(意即回传不执行的执行状态)。当在entry(i)内的表示指令运算的retry_this_op值是隐退的,在区块134内的该取消判断式说明该重试条件。当若该retry_PA(i)信号或retry_stq(i)信号是植入的而判断式可能为真时,或者若该指令运算在执行期间是隐退时(例如来自加载/储存单元42的该重试信号),区块138更显示说明该retry_this_op值。当该执行运算是在Excel状态130时,该retry_this_op判断th式is更说明该重试信号的取样。在本实施例中,当该对应的指令运算是在Excel状态130时,重试状况将由加载/储存单元42回报。依据设计选择,其它实施例在指令运算的执行期间可回报在不同位置的情况。再者,依据设计选择,重试指令运算而非内存运算的实施例在该指令运算的执行内的其它位置可取样该重试信号。
如上文所提及的,指令运算的执行状态可广义地包含不执行、执行及已实行状态。对于图8的实施例,该不执行状态可包括禁止状态112或请求状态114。该执行状态可包括执行状态118-130。该已实行状态可包括已实行状态132。需要注意的是执行状态118-130的数目是特定实行的并且可以依据设计选择而改变。再者,在附属是符合的指令运算的执行内的位置可以依据设计选择而改变。该改变部分可以基于管线行程的数目,在该行程之间该附属指令运算是排程的并且位在该附属符合的特定行程,诸如操作数或顺序附属,是需要符合的。在本实施例中,该特定行程为该寄存器文件读取行程。
今翻页至图9,该图显示可通过ROP控制circuit(i)86A所使用的寄存器140以储存图8的状态机的状态及所需要的附加状态。其它实施例是可能的并且经过考量的。在图9的实施例中,寄存器140可储存状态142、blocked_non_spec指示144、blocked_until_fill指示146及其它数据148。
状态142储存在图8中所说明的状态机的电流状态。该状态可以在以何适当的方式在状态142内做编码。寄存器142依据在图8所说明的状态转移在每个时钟周期内更新。
若该重试形式显示该指令运算是将要非臆测地执行,则Blocked_non_spec指示144可以设定以指示禁止以响应在指令运算的执行期间接收来自加载/诸存单元42的重试信号。Blocked_non_spec指示144可以用于在图8的区块134所显示的禁止判别式内。尤其,当该Blocked_non_spec指示144显示禁止时,该指令运算是由请求排程所禁止直到该指令运算变成非臆测的。响应于变成非臆测的指令运算,该Blocked_non_spec指示可以设定以显示不禁止并且该指令运算可以排程。在一项特定的实施例中,若在排程器36内的每个较旧的指令运算具有已实行的执行状态,则该指令运算变成非臆测的。
若该重试形式显示该指令运算失算D-闪存44,Block_until_fill指示146可以设定以指示禁止以响应在指令运算的执行期间接收来自加载/诸存单元42的重试信号。该Block_until_fill指示146可以用于在图8的区块134所显示的禁止判别式内。尤其,当该Block_until_fill指示146显示禁止时,该指令运算是由请求排程所禁止直到该对应的填覆数据受到提供。响应于当受到提供而显示的填覆数据,该Block_until_fill指示可以设定以显示不禁止并且该指令运算可以排程。
其它数据可依所需在其它数据范畴148内可以记录。例如,特定的实施例可以禁止重试储存运算直到SMC检测可以实行。其它数据范畴148可以记录该需求以等待该SMC检测并且可记录该SMC检测的完成。任何其它数据皆可记录。再者,无其它数据在内记录的实施例是经过考量的。
今翻页至图10,该图显示依据排程器36的一项实施例的说明取消附属链接的例子的时序图。时钟周期通过垂直虚线界定范围,对于每个时钟周期在界定该时钟周期的垂直虚线之间的上端具有识别器。对于每个指令运算的状态(如同ROP控制电路86所记录)亦显示于图10中(接续于该文字“状态”及在括号中的该对应的指令运算的R#),具有“已实行”表示已实行状态132及“blkd”表示禁止状态112。图10包含说明二个附属链接的区块150。该第一附属链接开始于指令运算I0,指定10的R#,并且更包含指定运算I1、I2及I3。指令运算I1附属于I0并且具有具有15的R#。指令运算I2附属于I1并且具有23的R#。指令运算I3附属于I2并且具有34的R#。指令运算I4是在第二附属链接内由I0所起始,并且因此附属于I0。指令运算I4具有45的R#。I1及I4直接附属于I0,而I2及I3是非直接附属于I0。对于每个指令运算的Block及Not Blocked信号说明于图10中(具有指令运算的R#提供于括号中)。某些造成其它事件的事件是通过箭头从该事件至该结果事件来说明。例如,Not_Blocked(10)的不植入造成State(10)以变成禁止,由箭头从该Not_Blocked(10)的不植入至该State(10)的禁止状态来说明。
在时钟周期clk0期间,每个指令运算是在该已实行状态内。因此,该对应的Block信号是不植入的并且该Not_Blocked信号是植入的。在该时钟周期clk1期间,该Not_Blocked(10)信号是不植入的(因为在该一个或一个以上的指令运算上的I0附属变成不实行)。回戚于Not_Blocked(10)的不植入,用于I0(State(10))的状态机回传至禁止状态,并且因此该Block(10)信号在时钟周期clk2内是重新植入。响应于该Block(10)的植入及I0及I4的附属于I0,该Not_Blocked(15)及Not_Blocked(45)信号不植入(时钟周期clk2)。该Not_Blocked(15)及Not_Blocked(45)信号的不植入依序导致I1及I4的取消(State(15)及State(45)在时钟周期clk3内变成该禁止状态)。接着,I2及I3因为它们分别直接附属于I1及I2并且因此通过它们非直接附属于I0而取消。通过时钟周期clk5的结束,在说明的例子中的该附属链接已经不实行并且对应于每个指令运算(I0至I4)的执行状态是在不执行状态。接着,该指令运算可接收它们附属的符合并且可依据在该附属链接重新发出内的指令运算的依序重新发出以及符合在该附属链接内的其它指令运算的附属。
需要注意的是,虽然该Block及Not_Blocked信号是显示于图10(及第11、12及15图下方),如同在特定的时钟周期期间的植入或不植入,该Block信号在该时钟周期的第一部分期间可以是不致发的以允许该Not_Blocked信号的预充电,并且接着该Block信号在该时钟周期的第二部分期间可以脉冲(并且Not_Blocked信号可以放电或仍然预充电,依据记录的附属)。再者,第10、11、12及15图的时序图说明基于所说明的Block信号的转移的Not_Blocked信号的转移。因此,在所说明的例子中,该说明的附属链接的附属是该最后附属而符合于在该附属链接内的每个指令运算。若其它附属仍然不符合时,该Not_Blocked信号将保留不植入直到该其它附属的符合。同样地,该时序图说明指令运算将实时地排程以响应对于在时序图内的简化的请求。然而,若该相同形式的其它较新的指令运算是请求排程时,该排程可以通过一个或一个以上的时钟周期来延迟。
今翻页至图11,该图为说明在附属链接内的例示性指令运算的发送及重新发送的时序图,该重新发送因为在该附属链接内的第一指令运算的重试而发生。时钟周期通过垂直虚线所界定,具有用于在该垂直虚线界定该时钟周期之间的上端的每个时钟周期的识别器。区块152说明该例示性附属链接,该链接为来自图10的例子的从I0至I2的相同的指令运算及附属。该图说明用于每个指令运算的该Block及Not_Blocked信号以及每个指令运算的状态(由ROP控制电路86所记录),类似于图10的例子。说明于图11的该状态包含该禁止及已实行状态,由类似于图10的图11的“blkd”及“done”来表示。再者,请求状态114、Exec2状态128及Execl状态130分别说明为“rqst”、“ex2”及“exl”。又类似于图10,造成其它事件的某些事件通过从该造成事件至该结果事件的箭头来说明。在此例子中,指令运算I0及I11两者皆是隐藏2。
时钟周期clk0在时钟状态内说明每个指令运算I0-I2,在变成准许发送前等待附属符合。每个该Not_Blocked信号是不植入的,并且每个block信号是植入的。在时钟周期clk1期间,Not_Blocked(10)植入。响应于Not_Blocked(10)的植入,状态(10)在时钟周期clk2期改变成该请求状态。I0经选择用于发送并且因此在时钟周期clk4内state(10)转移至该Exec2状态。
响应于state(10)的Exec2状态,Block(10)在时钟周期clk4期间是不植入的(接着依序造成Not_Block(15)是植入的)。State(15)在时钟周期clk4内转移至该请求状态以响应Not_blocked(15)的植入,并且转移至在时钟周期clk5内的Exec2状态以响应受到的选取。
在state(10)的execl状态期间(时钟周期clk4),ROP控制电路86侦测I0的重试(透过该重试(R#10)信号说明于图10内)。该重试造成I0的取消,并且因此State(10)在时钟周期clk5内转移成不执行。尤其,由于该Not_Blocked(10)信号在时钟周期clk4期间是执入的,State(10)转移至该请求状态。响应于State(10)回传至不执行状态,该Block(10)信号是重新植入(并且因此该Not_Blocked(15)是不植入的。Not_Blocked(10)的不植入造成State(15)的回传至不执行状态(时钟周期clk6))。
在此例子中的I0的重试是允许I0的实时重新发送的重试形式。因此,状态(10)是在时钟周期clk5的请求状态内。I0是用于执行的选取,并且因此State(10)在时钟周期clk6、clk7及clk8内分别转移至该Exec2、Execl及已实行状态。在I0的执行期间,重试并未发生。然而,需要注意的是该重试在特定的指令运算成功地完成之前可以多次发生。一旦State(10)在I0(时钟周期clk6)的重新执行期间达到该exec2状态,该Block(10)信号是不植入的并且该Not_Blocked(15)信号是植入的。响应于该Not_Blocked(15)信号的植入,State(15)转移至该请求状态(时钟周期clk7)并且接着转移至exec2状态以响应用于发送的选择(时钟周期clk8)。State(15)在时钟周期clk9及clkl0内分别转移至该execl及已实行状态。
响应于达到该Exec2状态(时钟周期clk8)的State(15),该Block(15)信号是不植入的。该Not_Block(23)信号在时钟周期clk8期间植入以响应Block(15)的不植入,并且因此State(23)转移至在时钟周期clk9内的请求状态。I2的发送在后来的时钟周期(未显示)期间可能发生。
今翻页至图12,该图为说明指令运算的重试的时序图,该指令运算具有需续事在该指令运算执行的排程前发生的重试理由。尤其,图12说明欲非臆测执行的指令运算的重试。时钟周期由垂直虚线所界定,具有用于在该垂直虚线界定该时钟周期之间的上端的每个时钟周期的识别器。区块152说明该例示性附属链接,该链接为来自图11的从I0至I2的相同的指令运算及附属。该图说明用于每个指令运算的该Block及Not_Blocked信号以及每个指令运算的状态(由ROP控制电路86所记录),类似于图11的例子。说明于图12的该状态是以类似于图11的方式来表示。又类似于图11,造成其它事件的某些事件通过从该事件至该结果事件的箭头来说明。在此例子中,指令运算I0是隐藏2。
时钟周期从clk0至clk6是类似于图11的从clk0至clk6的该对应的时钟周期,具有在时钟周期clk4内的I0的重试指示为重试的排除,因为I0是欲非臆测地执行。因此,I0是非臆测地发送并且本身的非臆测特性在发送后而发现。排程器36通过取消I0来解决此种情况(以及本身的附属指令运算I1及I2)并且在允许重新发送之前等待I0变成非臆测的。尤其,响应于该重试形式成为“等待非臆测的”,ROP控制电路86可设定对应于I0的该Blocked_non_spec指示。因此,即使该Not_Block(10)信号是植入的,ROP控制电路86是由I0的请求排程来禁止直到I0变成非臆测的。时钟周期的某些数目可以经过,并且接着ROP控制电路86可判定I0是非臆测的(例如,在图12中的时钟周期clkn,由在图12的该non-spec(R#10)信号的植入来说明)。如上文所提及,依据一项实施例,当每个在排程器36内的先前的指令运算(在程序顺序中)是在该已实行状态内,指令运算可以是非臆测的。
响应于I0变成非臆测的,State(10)转移至该请求状态(时钟周期clkn+1)。接着,I0经选择用于发送(在时钟周期clkn+2内的state(10)的Exec2状态)及执行。当它们的附属I0是符合时,附属指令运算I1及I2后续可以执行。
令翻页至图13,该图显示可以由实体地址缓冲器90的一项实施例所使用的例示性实体地址缓冲进入160。此外,该图显示例示性组合逻辑电路172。电路172可用以产生该fill_hit(i)及retry_PA(i)信号。其它实施例是可能的并且经过考量的。尤其,任何适当的P组A合逻辑电路皆可以使用,包含任何显示于图13的该逻辑的Boolean等式。再者,依据设计选择,储存于进入160的数据可以改变形式及内容。在图13的实施例中,进入160包含有效位162、第一加载PA栏区164、第一字节屏蔽栏区166、第二加载PA栏区168及第二字节屏蔽栏区170。
通常,若进入160指定给在指令缓冲器进入内的指令运算是加载内存运算,进入160是由加载内存运算(该“加载内存操作数”)存取的内存操作数的实体地址数据所更新,并且该合法的位162是设置的。在本实施例中,该数据是由包含该加载内存操作数(第一加载PA栏区164)的第一字节的四方字符(quadword)的实体地址所表示并且字节屏蔽指示那一个在该四方字符内的字节是部分该加载内存操作数(第一字节屏蔽栏区166)。该字节屏蔽包括用于在该四方位内的每个字节的位。若该位是设置时,该对应的字节为部分该加载内存操作数。若该位是清除时对应的字节并非部分该加载的内存操作数。
加载内存操作数在内存内可以意地对准。因此,该加载内存操作数的一个或一个以上的字节可以在其中一个四方字符内并且该加载内存操作数一个或一个以上的字节可以在下一个连续的四方字符内。因此,进入160提供第二加载PA栏区168及第二字节屏蔽栏区170。第二加载PA栏区168储存该下一个连续的四方字符的实体地址至第一加载PA栏区168。在本实施例中,该实体地址的页内部分储存在第二加载PA栏区168内。由于交错页边界的加载内存运算在本实施例中是非臆测的,所以必须仅储存该下一个续连续字符的该页内部分(由于若页是交错的,该加载内存运算将非臆测地重新发送并且因此无较旧的储存将会接续该加载内存运算的重新发送而发送)。其它实施例可储存该下一个连续的四方字符或任何所需的适当部分的全部。再者,虽然本实施例储存在四方字符分布特性(granulrity)上的地址,其它实施例可使用任何适当的分布特性(例如八方字符(octword)、双字符等等)。第二字节屏蔽栏区170,类似第一字节屏蔽栏区166,表示那一个在下一个连续的四方字符内的字节为部分该加载内存操作数。
执行核心40A在储存内存运算的执行期间提供该储存实体地址及对应的字节屏蔽。电路172比较对应的部分储存实体地址与储存在第一加载PA栏区164及第二加载PA栏区168的值。因此,对应的储存字节屏蔽将会提供。在电路172内接收接收储存及加载字节屏蔽的该AND栅极表示判断是否在该加载字节屏蔽内的至少一个位及在该储存字节屏蔽内的少一个对应的位的逻辑是设置的,表示该加载内存操作数的至少一个字节是由该储存内存所更新。例如,用于每个位的AND栅极、该栅极为OR的输出可以使用。若进入160是有效的,该实体地址部分符合及在该对应的四方字符内的至少一个字节是部分该加载内存操作数并且是由储内存运算所更新,接着该retry_PA(i)信号可以产生。需要注意的是若该储存内存运算在程序顺序中并未早于该加载内存运算(未显示于图3中),该retry_PA(i)信号亦可以屏蔽。
需要注意的是储存内存操作数在内存中亦可以任意地对准。因此,该储存内存操作数的一个或一个以上的字节可以在一个四方字符内并且该储存内存操作数之一或一个以上的字节可以在下一个连续的四方字符内。因此,该储存PA+1(类似于该加载PA+1)可以与该储存加载Pas进行比较以侦测储存PA碰撞该加载PA。该下列的公式可表示该Retry_PA(i)信号(其中若至少其中一个在A(n:0)内的位是设置的并且在B(P)An:0内的对应的位是设置的,则该MATCH(A(n:0),B(n:0))函式回传二位1):
Retry_PA(i)=V & Load_PA(39:12)==Store_PA(39:12)&((Load_PA(11:3)=Store_PA(11:3)& MATCH(Store-Byte_Mask(7:0),Load_Byte_Mask(7:0)))‖
Load_PA(11:3)+1==Store_PA(11:3)&MATCH(Store_Byte_Mask(6:0),Load_Byte_Mask(14:8)))‖
Load_PA(11:3)=Store_PA(11:3)+1 &MATCH(Store_Byte_Mask(14:8),Load_Byte_Mask(6:0)))‖
Load_PA(11:3)+1=Store_PA(11:3)+1 &MATCH(Store_Byte_Mask(14:8),Load_Byte_Mask(14:8))))
更需要注意的是对于内存运算在下一个连续的四方字符内具有一个有效字节,由于该内存运算在该第一四方字符内具有至少一个有效字节(字节7,由屏蔽位7所表示),该最后四项(比较Load_PA(11:3)+1及Store_PA(11:3)+1)为多余的并且在本实施例中可以消去。因,此在该第四项内的符合只有在该第一项内的符合亦遇到时才会遇到(比较Load_PA(11:3)及Store_PA(11:3))。
此外,进入160与由外部接口单元46所提供的填覆/探测地址做比较。在该说明的实施例中,在该填覆内提供的闪存路线的地址提供给实体地址缓冲器90以供比较。第一加载PA栏区164及第二加载PA栏区168的对应的部分可以与该填覆地址比较。若侦测至符合时,该fill_hit(i)信号可以植入。在其它实施例中,该闪存路线可以提供给D-闪存44作为多个封包。所提供的确认该闪存路线及封包的地址部分可此实施例中可以做比较。
仍然更需要注意的是若对应于该store_PA的储存内存运算是较新于对应该进入160的加载内存运算,该Retry_PA(i)信号可以屏蔽。
今翻页至图14,该图显示可以由储存R#缓PA冲器92的一项实施例所使用的例示性储存R#缓冲器进入180。此外,该图显示例示性组合逻辑电路190。电路190可以用于产生该retry_stq(i)信号。其它实施例是可能的并且经过考量。尤其,任何适合的组合逻辑电路可以使用,包含任何第14所显示的逻辑的Boolean等式。再者,储存在进入180的数据依据设计选择可以在形式及内容上做变化。在图14的实施例中,进入180包含有效位182与186以及储存R#栏区184与188。
通常,若进入180所指定的位在指令缓冲器进入的指令运算为加载内存运算,进入180将以通过该加载内存运算所碰撞的该储存在储存队列70内的储存R#来更新。本实施例提供由约二个储存内存运算至加载内存运算的传递,并且因此二个储存R#栏区184及188经由提供以记录每个传递储存的R#。若侦测到对应的传送储存,个别的有效位182及186将设置。其它实施例可仅由其中一个储存传送,并且进入180可仅记录一个储存储存R#。其它实施例仍然可以由超过二个储存来传送,并且进入180可以记录储存R#s的对应的数目。
当储存内存运算执行时,加载/储存单元42提供该储存内存运算的R#给储存R#缓冲器92。该R#与储存在进入180内的R#s做比较,并且若侦测到符合时(并且该应的有效位为设置),电路190植入该retry_stq(i)信号,如上文所提及,在另一个选择中,储存队列数目可以储存在缓冲器92内并且储存队列数目可以提供以供比较。
翻页至图15,该图为说明加载内存运算透过在实体地址缓冲器90内的碰撞的重试的时序图。加载内存运算透过在储存R#缓冲器92内的碰撞的重试可以是相似。时钟周期由垂直虚线所界定,具有用于在该垂直虚线界定该时钟周期之间的上端的每个时钟周期的识别器。区块192说明该例示性附属链接,该链接为来自图11的例子的从I0至I2的相同的指令运算及附属(除了I0现为加载内存运算)。该图说明用于每个指令运算的该Block及Not_Blocked信号以及每个指令运算的状态(由ROP控制电路86所记录),类似于图11的例子。说明于图12的该状态以类似于图11的方式表示。此外,该Exec4及Exec3状态分别以“ex4”及“ex3”来说明。又类似于图11,造成其它事件的某些事件通过从该造成事件至该结果事件的箭头来说明。在此例子中,加载内存运算I0是隐藏4。
在时钟周期clk0上,每个指令运算I0-I2已经发送及执行,并且因此是在该已实行状态。对应的Block信号为不植入的并且Not_Blocked信号为植入的。然而,在实体地址缓冲器90上的碰撞是侦测为R#10(retry_PA(10)在时钟周期clk0期间是植入的)。在响应上,State(10)在时钟周期clk1内转移至该请求状态。此外,该Block(10)信号是植入的,并且I1及I2在时钟周期clk2至clk3期间接着是取消。
该加载内存运算I0经选择用于执行并且在时钟周期clk2至clk6内通过该执行状态至该已实行状态。响应于在时钟周期clk4内的I0达到该Exec2状态,该Block(10)信号为不植入(并且因此该Not_Blocked(15)信号变成植入)。如图15所显示,指令运算I1及I2因此重新排程及重新发送。
图15说明加载指令运算可以在该加载指令运算附属于储存内存运算之前发送及执行。接着,该储存内存运算可以发送并且该附属受到侦测。当附属的侦测时,该附属由来自排程器36的重新发送该加载内存运算(以及本身的附属链接)而响应。具有该retry_stq(10)信号植入的类似的时序图说明在先前不正确执行及后续重新发送的储存内存运算上的加载内存运算的错误附属的侦测。再者,排程器36处理由重新发送该加载内存运算及本身的附属链接的情况。正确的运算可以提供具有最少效能退化,并且因此积极的臆测执行可以执行并且较高的效能可以达到。
计算机系统
今翻页至图16,该图为显示包含透过总线桥接器(bus bridge)202连接至各种系统组件的处理器10的计算机系统200的一项实施例的方块图。其它实施例是可能的并且经过考量。在该显示的系统中,主存储器204透过内存总线206连接至总线桥接器202,并且图形控制器208透过AGP总线210连接至总线桥接器202。最后,多个PCI组件212A-212B透过PCI总线214连接至总线桥接器202。第二总线桥接器216更可以透过EISA/ISA总线220提供搭配的电气接口给一个或一个以上的EISA或ISA组件218。处理器10透过CPU总线224连接至总线桥接器202及连接至选择L2闪存228。同时,CPU总线224及该接口至L2闪存228可包括外部接口52。
总线桥接器202在处理器10、主存储器204、图形控制器208及连接至PCI总线214的组件之间提供接口。当运算由其中一个连接至总线桥接器202的组件所接收时,总线桥接器202辨识该运算的目标(意即特定的组件,或者在PCI总线214的例子中,该目标在PCI总线214上)。总线桥接器202递送该运算至该目标组件。总线桥接器202通常传送来自由该来源组件或总线所使用的协议运算至由该目标组件或总线所使用的协议。
除了提供接口给用于PCI总线214的ISA/EISA总线,第二总线桥接器216更可依所需加入额外的功能。输入/输出控制器(未显示),不论来自外部或与第二总线桥接器216整合,亦可包含在计算机系统200内以提供算支持给需要的键盘及鼠标222以及各种序列及并行端口。外部闪存单元(未显示)在其它实施例中更可以连接至在处理器10及总线桥接器202之间的CPU总线224。此外,该外部闪存可以连接至总线桥接器202并且用于外部闪存的闪存控制逻辑可以整合至总线桥接器202。L2闪存228更显示于处理器10的背面配置上。需要注意的是L2闪存228可以从处理器10分离,整合至具有处理器10的卡匣(例如槽1或槽A)内,或甚至整合至具有处理器10的半导体基板上。
主存储器204为应用程序储存在内的内存并且处理器主要由该内存来执行。适当的主存储器204包括DRAM(动态随机存取内存)。例如,复数组SDRAM(同步DRAM)或Rambus DRAM(RDRAM)可能是适合的。
PCI组件212A-212B显示各种外围组件,例如诸如网络适配卡、影像加速卡、声卡、硬或软盘或插槽控制器、SCSI(小计算机系统接口(Small Computer System Interface))转接器及电话卡(telephonycards)。同样地,ISA组件218显示各种外围组件的形式,诸如调制解调器、声卡及各种诸如GPIB或字段总线接口(field bus interface)卡的数据撷取卡。
图形控制器208经由提供以控制在显示器226上的文字及图形的显示。图形控制器208可包括一般在此项技艺中习知的典型的图像加速卡以显示可以有效至/由主存储器204转移的三维数据构造。图形控制器208因此可以为AGP总线210的主导者,其中该控制器可以请求及接收而存取在总线桥接器202内的目标接口藉以获得而存取主存储器204。开放的图形总线搭配来自主存储器204的数据的快速检索。对于某些运算,图形控制器208更可以经由配置以在AGP总线210上产生PCI协议处理。总线桥接器202的AGP接口可因此包含支持AGP协议处理以及PCI协议目标与起始处理两者的功能。显示器226为影像或文字可以表示在其上的任何电子式显示器。适当的显示器226包含阴极射线管(cathode ray tube,“CRT”)、液晶显示器(liquid crystaldisplay,“LCD”)等等。
需要注意的是,虽然该AGP、PCI及ISA或EISA总线已经使用作为在上述说明中的例子,任何总线架构皆可以依需求而取代。更需要注意的是计算机系统200可以是包含额外的处理器的多任务处理的计算机系统(例如处理器10a显示为计算机系统200的选择性的组件)。处理器10a可以类似于处理器10。尤其,处理器10a可以是处理器10的相等的复制。处理器10a可以透过独立总线(如同在图16所显示)连接至总线桥接器202或者可与处理器10分享CPU总线224。再者,处理器10a可以连接至类似于L2闪存228的选择性的L2闪存228a。
今翻页至图17,该图显示计算机系统300的另一项实施例。其它的实施例是可能的并且经过考量。在图17的实施例中,计算机系统300包含数个处理节点312A、312B、312C及312D。每个处理节点透过包含在每个个别的处理节点312A-312D内的内存控制器316A-316D连接至个别的内存314A-314D。此外,处理节点312A-312D包含用于在处理节点312A-312D之间通信的接口逻辑。例如,处理节点312A包含用于与处理节点312B通信的接口逻辑318A、用于与处理节点312C通信的接口逻辑318B及用于与另一个处理节点(未显示)通信的第三接口逻辑318C。同样地,处理节点312B包含接口逻辑318D、318E及318F;处理节点312C包含接口逻辑318G、318H及318I;并且处理节点312D包含接口逻辑318J、318K及318L。处理节点312D透过接口逻辑318L经连接以与多个输入/输出组件通信(例如以雏菊花环(daisy chain)状配置的组件320A-320B)。其它处理节点可与其它I/O组件以类似的方式通信。
处理器节点312A-312D实现用于内部处理节点通信的封包型(packet-based)连接。在本实施例中,该连接以数组单一方向的路线来实现(例如路线324A是用于从处理节点312A至处理节点312B传输封包并且例如路线324B是用于从处理节点312B至处理节点312A传输封包)。其它数组路线324C-324H是用于在其它其它处理节点之间传输封包,如同在图17中的说明。通常每组路线324可包含一个或一个以上的数据路线、对应于该数据路线的一个或一个以上的时钟路线及表示待传送的封装形式的一个或一个以上的控制路线。该连接可以以闪存耦合(coherent)方式操作而用于在处理节点之间通信或以非耦合方式运算而用于在处理节点及I/O组件之间通信(或为总线桥接器至习知结构的I/O总线,诸如PCI总线或ISA总线)。再者,该连接可以使用雏菊花环构造依所显示在I/O组件之间以非耦合方式运算。需要注意的是从其中一个处理节点至另一个处理节点的待传输的封包可能通过一个或一个以上的中间媒介的节点。例如,由处理节点312A至处理节点312D所传输的封包可能通过处理节点312B或处理节点312C,如同图17所显示。任何适当的处理递送算法皆可以使用。计算机系统300的其它实施例可包含比图17中的实施例更多或更少的处理节点。
通常,该封包可以以一个或一个以上的位时间在节点之间的路线324上传输。位时间可以是在对应的时钟路线上的时钟信号的上升或下降缘。该封包可包含用于初始化处理的命令封包、用于维持闪存一致性的探测封包及来自响应探测及命令的响应封包。
除了内存控制器及接口逻辑之外,处理器节点312A-312D可包含一个或一个以上的处理器。广义地说,处理器节点包括至少一个处理器并且可以选择性地包含用于与内存及其它所需逻辑通信的内存控制器。尤其,处理节点312A-312D可包括处理器10。外部接口单元46可包含在节点内的该接口逻辑318以及该内存控制器316。
内存314A-314D可包括任何适当的内存组件。例如,内存341A-314D可包括一个或一个以上的RAMBUS DRAMs(RDRAMs)、同步的DRAMs(SDRAMs)、静态的RAM等等。计算机系统300的地址空间是分开于内存314A-314D里。每个处理节点312A-312D可包含用于判定那一个地址是对映于那一个内存314A-314D的内存对映,并且因此对映于那一个处理节点312A-312D对于特定的地址内存请求应该来递送。在一项实施例中,对于在计算机系统300内的地址的一致的位置为连接至对应于该地址的内存储存字节的内存控制器316A-316D。换句话说,该内存控制器316A-316D负责确认在闪存耦合形式的每个内存存取该对应的内存控器314A-314D的发生。内存控制器316A-316D可包括用于与内存314A-314D接口接合的控制电路。此外,内存控制器316A-316D可包含用于排列内存请求的请求队列。
通常,接口逻辑318A-318L可包括用于由该连接接收封包及当连接时用于缓冲待传输的封包的各种缓冲器。计算机系统300可使用任何适当的流程控制机制以供传输封包。例如,在一项实施例中,每个接口逻辑318储存接口逻辑所连接的该连接的另一端的接收器内的缓冲器的每个形式的数目的计量。该接口逻辑并未传输封包除非该接收接口逻辑具有空的缓冲器以储存该封包。当接收缓冲器通过向前递送封包而清除时,该接收接口逻辑传送讯息给发送接口逻辑以显示该缓冲器已经清除。此类机制可以视为“配给型(coupon-based)”系统。
I/O组件320A-320B可以是任何适当的I/O组件。例如,I/O组件320A-320B可包含网络适配卡、影像加速卡、声卡、硬式或软式磁盘驱动器或磁盘驱动器控制器、SCSI(小型计算机系统接口)转接器及电话卡、调制解调器、声卡及诸如GPIB或字段总线适配卡的各种数据撷取卡。
一旦完全了解上文的揭露后,对于熟习此项技艺的人士而言各种变化及修正将变得显而易见。本发明的权利要求应当视为意在含括所有此类的变化及修正。