微处理器及其方法

文档序号:189984 发布日期:2021-11-02 浏览:26次 >En<

阅读说明:本技术 微处理器及其方法 (Microprocessor and method thereof ) 是由 汤玛斯·C·麦当劳 约翰·唐肯 于 2021-08-09 设计创作,主要内容包括:本申请提供了一种微处理器及其方法。在一个实施例中,一种微处理器,包括:指令高速缓存器,其被配置为接收包括第一字节部分和第二字节部分的取指;边高速缓存标签阵列,其被配置为基于所述边高速缓存标签阵列的命中来用信号通知除了所述第一字节部分之外的所述第二字节部分的进一步处理;以及边高速缓存数据阵列,其被配置为存储所述第二字节部分的指令数据。(The present application provides a microprocessor and a method thereof. In one embodiment, a microprocessor includes: an instruction cache configured to receive a fetch comprising a first byte portion and a second byte portion; an edge cache tag array configured to signal further processing of the second byte portion in addition to the first byte portion based on a hit of the edge cache tag array; and an edge cache data array configured to store the second byte portion of instruction data.)

微处理器及其方法

技术领域

本发明大体上涉及微处理器,尤其涉及微处理器中的取指带宽。

背景技术

微处理器包括进行指令的实际执行的一个或多个执行单元。超标量处理器包括在每个时钟周期向各个执行单元发出多个指令以提高处理器的吞吐量或处理器的每个时钟周期的平均指令的能力。微处理器流水线顶部的取指和解码功能应当以足够的速率向执行单元提供指令流,以利用附加的执行单元并实际提高吞吐量。

由于指令集的指令不是固定长度的,相反,各个指令的长度可能不同,因此x86架构使得这个任务更加困难。因此,x86微处理器需要包括大量的逻辑来处理到来的指令字节流,以确定各指令开始和结束的位置。如今的微处理器通常每周期拾取十六(16)字节的数据,因为拾取大于十六的长度在例如确定指令边界和前缀信息的指令格式化中施加相当大的时序限制,特别是随着时钟速度上升的情况下。此外,拾取超过16字节/周期的需求传统上不是常见的要求。然而,许多类型的数字装置中的多媒体的日益流行已经导致伴随的、看似每年的多媒体指令的增加,并且因此一些芯片制造商使用不同的方法来处理超过16字节的拾取(例如,32字节拾取)。遗憾的是,解决方案通常导致需要在遇到自修改代码或某些别名情况时基于错误的大规模恢复机制,或性能低于预期的大型且极其复杂的高速缓存。因此,需要在不牺牲性能的情况下处理超过16字节的拾取。

发明内容

在一个实施例中,一种微处理器,包括:指令高速缓存器,其被配置为接收包括第一字节部分和第二字节部分的取指;边高速缓存标签阵列,其被配置为基于所述边高速缓存标签阵列的命中来用信号通知除了所述第一字节部分之外的所述第二字节部分的进一步处理;以及边高速缓存数据阵列,其被配置为存储所述第二字节部分的指令数据。

通过检查以下附图和详细描述,本发明的其它系统、方法、特征和优点对于本领域技术人员将是或变得显而易见。旨在将所有这样的附加系统、方法、特征和优点包括在本说明书内、在本发明的范围内,并由所附权利要求书保护。

附图说明

参考以下附图可以更好地理解本发明的各个方面。附图中的组件不一定按比例绘制,而是着重于清楚地示出本发明的原理。此外,在附图中,在所有的各图中相同的附图标记指代对应的部分。

图1A是示出在微处理器流水线中使用的示例边高速缓存阵列系统的实施例的框图。

图1B是示出图1A所示的微处理器流水线的示例前端的示意图。

图2是示出在边高速缓存阵列系统中使用的示例扩展逻辑的实施例的示意图。

图3是示出示例边高速缓存阵列方法的实施例的流程图。

具体实施方式

公开了边高速缓存阵列系统和方法的某些实施例,其实现微处理器对总长度大于十六(16)字节的指令组(诸如在多媒体代码中发现的指令组等)的高效处理。在一个实施例中,实现边高速缓存,其仅存储三十二(32)字节拾取的第二字节部分(例如,第二半)的指令信息或数据(例如,指令边界、前缀信息等),同时允许常规逻辑处理32字节拾取的第一部分(例如,第一半)。边高速缓存的标签和数据阵列位于不同的流水线级,在流水线级,早先读取了边高速缓存标签阵列。边高速缓存标签阵列中的命中得到指令高速缓存器(I高速缓存器)的顺序拾取地址中的32字节的增量,并将该数据分级到XIB队列。随后,对边高速缓存标签阵列命的中还使得利用计算出的第一字节部分将指令信息写入XIB队列。通过使用边高速缓存器,可以处理32字节的拾取,而不会出现用于处理32字节拾取的其它方法中发现的错误或大的高速缓存大小。通常,边高速缓存阵列系统的某些实施例在存在通常导致超过16字节的4指令组的长指令(例如,AVX类型的指令,其可以是6至11字节长)的情况下提供更好的吞吐量。

另外,虽然已经建立了处理32字节拾取的其它机制,但是这些方法存在缺点。例如,一种方法进行每次拾取16字节的慢扫描,然后在同一高速缓存器中累积根据这些扫描确定的指令和指令边界。然而,这种方法易受自修改代码或别名的情况的攻击,这些情况会使开始和结束标记出错,从而需要缓慢且潜在的容易出错的恢复处理。在一些方法中,创建了micro-op(微操作)高速缓存器以实现更高的吞吐量。例如,micro-op高速缓存其用作具有较高带宽(例如,最多4个micro-op/周期,或6个micro-op/周期)的独立的(例如,I高速缓存的)前端替换方案。然而,高速缓存器是非常大和复杂的,并且合并这样的解决方案实际上需要重新设计许多微处理器的大部分流水线。相反,边高速缓存阵列系统的某些实施例通过加宽I高速缓存拾取并使用边高速缓存阵列来存储用于32字节拾取的第二部分的开始/结束/前缀信息、同时允许常规(例如L级和M级)逻辑处理第一部分,来解决大于16字节的拾取的需求,从而使用节省空间的技术提供了简单方法,同时实现更高的吞吐量(例如,即使对于平均长度为八(8)字节长的指令,也能够针对关键环路发布四个x86指令/周期)。

已经总结了本发明的边高速缓存阵列系统的某些特征,现在将详细参考如附图中所示的边高速缓存阵列系统的描述。虽然将结合这些附图描述边高速缓存阵列系统,但是不旨在将其限制为本文所公开的一个或多个实施例。即,虽然本发明容许修改和替代形式,但是其具体实施例在附图中以示例的方式示出并且本文将详细描述为足以使本领域技术人员理解。然而,应当理解,附图及其详细描述不旨在将本发明限制为所公开的特定形式。相反,本发明将覆盖落在由所附权利要求限定的本发明的精神和范围内的所有修改、等同物和替代物。如贯穿本申请所使用的,词语“可以”是以许可的意义(即,意味着具有潜在性)而不是强制的意义(即,意味着必须)来使用的。类似地,词语“包括”意味着包括但不限于。

各种单元、模块、电路、逻辑或其它组件可以被描述为“被配置为”进行一个或多个任务。在这样的背景下,“被配置为”是结构的广泛叙述,该结构通常意味着“具有电路或其它物理结构”,该电路或其它物理结构在操作期间进行或能够进行一个或多个任务。电路可以是专用电路,或者是在编码指令的控制下操作的更通用的处理电路。即,在描述本发明的各种实现的某些方面或特征时,本文可以使用如“单元”、“模块”、“电路”、“逻辑”和“组件”的术语。本领域技术人员将理解,利用电路来实现相应的特征,无论该电路是专用电路还是在微编码指令控制下操作的更通用的电路。

此外,单元/模块/电路/逻辑/组件可以被配置为即使在该单元/模块/电路/逻辑/组件当前不在操作中时也进行任务。叙述被配置为进行一个或多个任务的单元/模块/电路/逻辑/组件明确地旨在针对该单元/模块/电路/逻辑/组件不进行功能性限定。对此,本领域技术人员将了解,电路元件的具体结构或互连将通常由设计自动化工具的编译器(诸如寄存器传送语言(RTL)编译器等)来确定。RTL编译器对非常类似于汇编语言代码的脚本进行操作,以将脚本编译成用于最终电路的布局或制造的形式。

即,使用更高级软件工具来设计集成电路(诸如本发明的集成电路等),以对电路的期望功能操作进行建模。如众所周知的,“电子设计自动化”(或EDA)是用于设计电子系统(诸如集成电路等)的软件工具的类别。EDA工具还用于将设计功能编程到现场可编程门阵列(FPGA)中。如Verilog和甚高速集成电路硬件描述语言(VHDL)的硬件描述语言(HDL)被用于创建电路的高级表示,从该高级表示可以得到低级表示和最终的实际布线。实际上,由于现代半导体芯片可以具有数十亿个组件,因此EDA工具被认为对于它们的设计是必要的。实际上,电路设计者使用如C/C++的编程语言来指定操作功能。EDA软件工具将该指定功能转换成RTL。然后,硬件描述语言(例如Verilog)将RTL转换成离散的门网表。该网表定义由例如铸造厂生产的实际电路。实际上,这些工具因其在促进电子和数字系统的设计工艺中的作用和用途而众所周知和理解,因此本文不需要描述。

图1A示出微处理器10的示例性流水线的实施例。应当了解,为了简洁以及易于解释和说明,本文省略了微处理器10的某些已知组件。如已知的,流水线架构提供在执行中重叠的多个指令,其中各个级称为管道级。流水线中所示的框可以各自根据一个或多个级来实施,这些级在框的左侧示出并且在所描绘的实施例中由从上至下按顺序前进并且被重定向(如箭头所示)的大写字母C、I、B、U、L、M、F、G、W、X、E、S、W、Y和Z表示。本领域的普通技术人员应了解,图1A中所描绘的级的数量和/或布置仅说明一个示例性实施例,并且在一些实施例中,可以实现级的不同数量和/或布置,因此预期在本发明的范围内。本领域的普通技术人员还应了解,框提供对流水线的功能性的一般描述,并且为了简洁,本文省略了本领域的普通技术人员已知的相关联逻辑或电路。例如,本领域的普通技术人员应了解,如已知的,流水线的各级可以由时钟流水线寄存器或锁存器分开。

在一个实施例中,微处理器10包括I高速缓存标签阵列12、I高速缓存数据阵列14、边高速缓存标签阵列16和边高速缓存数据阵列18。微处理器10还包括长度/前缀(L/PF)扫描逻辑20、扩展逻辑22、指令多路复用器(M)队列24和XIB多路复用器(M)队列26。在一个实施例中,I高速缓存标签阵列12、I高速缓存数据阵列14、边高速缓存标签阵列16、边高速缓存数据阵列18、L/PF扫描逻辑20、扩展逻辑22、指令M队列24和XIB M队列26包括边高速缓存阵列系统,但是在一些实施例中,更少或更多的逻辑组件可以构成边高速缓存阵列系统。微处理器10还包括指令格式化器28、格式化指令队列(FIQ)/循环队列30、转译逻辑32、寄存器别名表/预留站(RAT/RS)34、执行单元36和退出逻辑38。

在一个实施例中,在C级处实现I高速缓存标签阵列12和边高速缓存标签阵列16。参考图1B,所示的是在针对图1A的微处理器10所示的流水线的前端40处使用的示例源。前端40包括拾取单元42(例如,包括多路复用器和时钟寄存器)、边高速缓存标签阵列16、转译后备缓存器(TLB)44、I高速缓存数据阵列14、I高速缓存标签阵列12、分支目标访问高速缓存(BTAC)46(即流水线的部分,但在图1A中未示出),快速预测器48(即流水线的部分,但同样在图1A中未示出),以及多路复用器(MUX)50。拾取单元42接收多个高速缓存指令地址源,包括顺序指令地址、(例如,来自S级的)校正指令地址、(例如,来自G级的)解码时间指令地址以及来自BTAC 46和快速预测器48的地址。拾取单元42的输出是作为输入提供给边高速缓存标签阵列16、TLB 44、I高速缓存数据阵列14、I高速缓存标签阵列12、BTAC 46和快速预测器48以用于访问I高速缓存数据阵列14的下一指令的高速缓存地址。

另外,快速预测器48包括提供单周期预测(例如,采取一个周期来产生目标地址,在一个实施例中在I级提供的预测)的单周期分支预测器。在一个实施例中,快速预测器48包括存储先前执行的分支指令的分支目标地址的表(这里也称为阵列或目标阵列),该表使得能够在随后遇到所存储的分支指令时进行分支预测。在一个实施例中,表包括128个条目,但是在一些实施例中可以使用其它大小(例如,64个条目、32个条目等)的表。表被组织为n路(例如,n是大于1的整数)的集关联高速缓存器。一般而言,n路的集关联高速缓存器在这里也称为多集关联高速缓存器。在一个实施例中,各条目存储八(8)个3位计数器和当前局部分支模式,该计数器是由3位局部分支模式而选择的。快速预测器48还包括条件分支预测器,该条件分支预测器与该表并行地被访问并且为条件分支提供采取/不采取的方向。快速预测器48还包括返回堆栈,该返回堆栈可以提供目标而不是表。在一个实施例中,返回堆栈包括四(4)个条目,并且为返回指令提供目标。注意,以上列出的规范仅用于说明,并且一些实施例可以在不同的规范下进行,因此预期在本发明的范围内。快速预测器48被配置为立即(在单个周期内)递送预测分支目标,而没有采用分支惩罚。在一些实施例中,快速预测器48可以根据其预测机制和/或表配置的其它规范来操作,或者在一些实施例中,可以省略快速预测器48。大多数分支被快速预测器48正确地预测。在一些实施例中,在快速预测器48基于同一所获取的分支指令而提供与BTAC 46的分支预测不同(例如,在方向和/或目标上不同)的分支预测的情况下,BTAC 46利用BTAC 46所提供的分支预测信息(例如,方向、目标地址、分支预测类型)来在BTAC 46的一组级内(例如,在U级)重写快速预测器48的分支预测并更新快速预测器表。

I级和/或B级对应于访问流水线的各种表,在一些实施例中包括(例如,基于标签)从表中多路复用出方向或路、以及对指令的读出。

BTAC 46保持与其用于预测后续执行期间的目标地址、方向和类型的先前执行分支指令有关的信息。BTAC 46包括比快速预测器48的表大得多的一个或多个表。在一个实施例中,BTAC 46包括4k个条目、m路的集关联表(这里也称为阵列或目标阵列),其中m是大于1的整数。类似于n路集关联表,m路集关联表在本文中也可称为多集关联表。BTAC 46的各条目包括有效位、分支目标地址预测、方向预测和分支类型。分支类型指定分支指令是呼叫/返回、是间接分支、是条件相对分支、还是无条件相对分支。在一个实施例中,BTAC 46包括条件相对分支预测器(或者简称为条件分支预测器)或者与之协作,其中,条件分支预测器具有多条目(例如,12k)的基于标签几何(TAGE)的条件分支预测器、多个表、多位(例如,3位)、采取/不采取(T/NT)计数器以及多位全局分支历史。也就是说,如已知的,TAGE条件分支预测器包括具有几何上增加分支历史长度的标签表。作为另一示例,间接预测包括多条目(例如,1.5k)TAGE预测器,并且将表条目用于静态间接分支。在一个实施例中,使用了两个TAGE条件分支预测器,一个用于预测器阵列中的边A,以及一个用于预测器阵列中的边B。TAGE条件分支预测器可以是BTAC 46的一部分或与BTAC 46结合使用。

TLB 44在存储器管理单元(未示出)的管理下提供如已知的虚拟到物理页面地址转换。即,TLB 44存储最近使用的虚拟地址的物理地址。TLB 44从分段单元(其将来自程序的逻辑地址转换为线性地址)接收线性地址,并且将该线性地址的一部分与TLB 44的条目进行比较以找到匹配。如果存在匹配,则根据TLB条目计算物理地址。如果不存在匹配,则拾取来自存储器的页表条目并将其放置到TLB 44中。

I高速缓存数据阵列14包括已经从L2、L3或主存储器拾取或预拾取的指令的一级高速缓存。I高速缓存数据阵列14包括多个定时寄存器。

I高速缓存标签阵列12包括与I高速缓存数据阵列14中的指令相对应的标签的阵列,并且包括多个定时寄存器,并且用于确定与所拾取的高速缓存指令(例如,高速缓存地址的标签或部分)相关联的信息与I高速缓存数据阵列14和BTAC 46之间的匹配。

与边高速缓存阵列系统更相关的是,在一些实施例中(例如,在C级)并行地实现I高速缓存标签阵列12和边高速缓存标签阵列16、连同包括将地址发送到I高速缓存数据阵列14、TLB 44、快速预测器48和BTAC 46的其它处理。注意,边高速缓存标签阵列16与边高速缓存数据阵列18分离,后者在不同级(例如,U级)中实现。I高速缓存数据阵列14被配置为提供32字节的数据,但是对于大多数处理,以16字节/周期处理拾取。将边高速缓存标签阵列16处的命中用信号通知给多路复用器50以选择32字节(而不是16字节),并且顺序地址增加32字节而不是16字节。将边高速缓存标签阵列16处的未命中用信号通知给多路复用器50以使地址增加16字节。换句话说,多路复用器50被配置为基于边高速缓存标签阵列16中是否存在命中来选择32字节或16字节,其中顺序地址相应地增加到拾取单元42。

再次参考图1A,在继续额外地描述边高速缓存阵列系统之前,简要描述用于处理第一16字节的逻辑(之后是流水线的剩余部分)。对于来自32字节拾取的第一16字节数据,L/PF扫描逻辑20、XIB M队列26和指令格式化器28提供与流水线的L级(长度)、M级(多路复用)和F级(格式)相关联的XIB和解码功能。L/PF扫描逻辑20确定并标记流内各个指令的开始和结束字节(L级),并由此将该字节流分割成x86指令流,在提供至指令格式化器28的F级处的解码功能之前,该x86指令流在XIB M队列26(M级)处被分级。注意,关于XIB功能和L、M和F级的附加信息可以在美国专利No.8,612,727中找到,该专利在与当前公开内容一致的程度上通过引用整体并入本文。

FIQ/循环队列30接收格式化指令并且对它们进行缓存,直到它们可以被转译成微指令为止。FIQ/循环队列30还提供初步解码和快速循环功能(例如,在BTAC循环分支上,循环队列被激活并且循环指令被重复发送)。

W级提供可选的额外定时时钟。

在X级,指令转译器32(在X级或转译级中)将FIQ/循环队列30中所存储的格式化指令转译为微指令。

指令以程序顺序被提供至寄存器别名表/保留站(RAT/RS)表34。RAT/RS34的RAT功能维持和生成针对各指令的依赖性信息。RAT/RS 34的RAT功能将指令的源和目的地重命名到内部寄存器上,并且将指令分派到RAT/RS 34的保留站,该保留站(可能不按照程序顺序)向功能单元或执行单元(EU)36发出指令。包括整数单元的执行单元36在E(执行)级执行分支指令。执行单元、分支单元和整数单元是本文中可互换使用的术语。在一个实施例中,执行单元36(例如,两个执行单元)在单个时钟周期中执行两个分支。执行单元36还指示BTAC46是否已正确地预测分支指令。

将执行的结果提供给退出逻辑38。在一个实施例中,退出逻辑38包括重排序缓存器(未示出),该重排序缓存器包括与已经执行的指令有关的信息。众所周知,重排序缓存器在指令发出之后保持指令的原始程序顺序,并允许在退出级期间对结果进行序列化。在一个实施例中,可以将重排序缓存器的一些信息存储在沿着流水线的其它地方,诸如在指令格式化器28处等。存储在重排序缓存器中的信息可以包括分支信息,诸如分支的类型、分支模式、目标、预测中使用的表以及高速缓存替换策略信息(例如,最近最少使用或LRU)等。退出逻辑28还可以包括分支表更新,该分支表更新包括S、W、Y和Z级,并且被配置为用与完全解码和执行的分支指令有关的信息(例如,分支的最终结果)来(例如,在S级)对前端的各种表(例如,BTAC)进行更新。在S、W、Y和Z级处,更新可能涉及表读取、目标地址写入以及计数器递增或递减,这可能涉及一些延迟。在一个实施例中,分支表更新提供针对给定条件分支指令和对该条件分支指令进行高速缓存的边(例如,A、B或C)的错误预测的指示。

再次参考边高速缓存阵列系统的相关功能,在一个实施例中,边高速缓存数据阵列18包括2路64条目表或阵列,各个条目包括2KB的指令数据。边高速缓存数据阵列18存储指令边界(例如,开始、结束)、累积前缀、分支信息(例如,BTAC分支在拾取中的位置)和断点标记。通过将第二半16字节的标记以大致为其原本大小的一半的方式(例如,如果以XIB M队列26的格式存储)进行存储,来以压缩的形式对存储在边高速缓存数据阵列18中的指令数据进行存储。响应于边高速缓存标签阵列16中的命中,与32字节拾取的后半部分相关联的指令信息或数据(例如,指令边界、前缀信息等)被分级到边高速缓存数据阵列18,由扩展逻辑22处理,并被写入到XIB M队列26。32字节拾取的第一16字节的数据由L/PF扫描逻辑20处理,然后将其写入XIB M队列26,并且来自I高速缓存数据阵列14的原始数据(例如,其未存储在边高速缓存数据阵列18中)被分级到指令数据M队列24。注意,I高速缓存数据(例如,对于第一16字节)的处理沿着非边高速缓存分支(在图1A中的左侧)以标准方式进行。L/PF扫描逻辑20确定指令长度并累加前缀,其可以总计为基于x86的指令中的10至15种不同类型。例如,基于对指令的扫描,识别前缀(例如,以十六进制的66、67、2E、3E等处),并且前缀可以包括OS、AS、REX存在及其变型等,如美国专利No.8,612,727中所述,其通过引用而整体并入本文。L/PF扫描逻辑20与XIB M队列26联合地对这些前缀中的一个或多个进行累加,并将它们附接至操作码字节或与之相关联。因此,扫描使得能够确定指令长度(例如,从操作码字节开始)和影响该指令的所有前缀。L/PF扫描逻辑20使用标准或普通的L级逻辑(如通过引用并入的上述参考专利中所解释的)来处理32字节拾取的第一半或第一部分(即第一16字节)。即,L/PF扫描逻辑20扫描来自I高速缓存数据阵列14的信息,产生适当的标记,并且将信息写入XIB M队列26的另一条目。换句话说,L/PF扫描逻辑20和扩展逻辑22将相应的条目写入XIB M队列26。

根据某些条件(例如,边高速缓存未命中、表示32字节拾取的第二半部分的奇数16字节地址、以及不是分支的目标),基于先前的扫描写入边高速缓存条目。一般而言,由于前缀信息以及分支信息(例如,是否存在分支,采取还是不采取)可以对各指令的大小进行显著的添加(例如,每字节15位),因此可能的位的总数可以是20位×16字节。尽管一些实施例可以将所有这些位存储在边高速缓存数据阵列18中,但在一些实施例中,仅存储了部分信息。边高速缓存数据阵列18存储压缩的该指令信息的逐指令版本,并且还限制利用边高速缓存数据阵列18的指令的量(例如,5个或更少的指令,在一些实施例中是可编程的)。换句话说,边高速缓存阵列系统的一个目的是处理长度长的指令(其中典型的16字节拾取带宽不足以处理这些类型的指令的组)。为了在需要的情况下(例如,对于从指令高速缓存数据阵列14提取的8至10字节长的指令)保留边高速缓存条目,边高速缓存数据阵列18被配置为在各个条目中存储具有足够位容量的有限数量的指令,以经由位表示来表示每个指令字节的各种标记(开始、结束、前缀)。压缩格式使得能够存储仅5个具有15位的组,而不是16个具有15位的组,如下面结合图2进一步描述的。即,在一个实施例中,边高速缓存数据阵列18仅需要存储5个可能的开始位、5个可能的结束位、5个可能的断点标记和5个可能的前缀标记。仅存在75位,而不是具有所有前缀的240位。因此,边高速缓存阵列系统的某些实施例旨在处理预定数量的指令或可编程数量的指令,并且为了说明起见,将五个指令的数量用作在边高速缓存数据阵列18中进行处理的最大限制,同时理解,在一些实施例中可以使用其它限制。通常,边高速缓存数据阵列18存储针对指令的开始和结束、断点、分支信息和前缀信息的标记(例如,位表示)。注意,具有与I高速缓存数据相对的标记存储的边高速缓存数据阵列18小于具有前缀信息和嵌入其中的各种标记的指令高速缓存器。

然后由扩展逻辑22将来自边高速缓存数据阵列18的压缩指令信息扩展成适合于由XIB M队列26使用的格式。例如,在写入XIB M队列26之前,扩展逻辑22知道对各个指令字节的开始和/或结束位和其它指令信息进行附接。实际上,扩展逻辑22的输出包括长度扫描的结果(用开始或结束字节标记每个字节)、指示在其上是否存在BTAC分支的标记、是否存在断点、以及与指令字节相关联的一个或多个前缀的标识。例如,如果第一指令在(十六进制速记的)字节2处开始,则附接前缀数据,然后再进行到下一指令以确定是否需要附接某些位等等。结果是根据针对32字节拾取的第二半或第二部分的该扩展信息的一个条目的、到XIB M队列26的输出。

指令M队列24与XIB M队列26一起跟踪,并且在一个实施例中,指令M队列24包括XIB M队列26的一部分。指令M队列24从指令高速缓存数据阵列14接收原始的未修改的数据。指令M队列24包含用于分级到指令格式化器28的解码器的指令字节。对于16字节拾取场景,存在到指令M队列24的单个写条目。对于32字节拾取场景,存在写入到指令M队列24的两个条目。

在XIB M队列26中,各个字节具有与其相关联的扩展标记,该扩展标记包括针对每个条目16字节的19位,并且对应于开始、结束,是否是分支、数据断点和前缀类型(例如,OS、AS、2E、3E、段覆盖前缀等)。例如,15位对应于前缀,并且4位用于开始、结束、分支和断点。在一些实施例中,XIB M队列26还包括大约6至12个条目。读取XIB M队列26以对M级进行馈送,在M级中指令实际上被多路复用并且整个级被消耗以用于F级处的格式化。

用于边高速缓存阵列系统的某些实施例的控制逻辑提供对边高速缓存阵列系统的更新的某些检查。例如,当存在边高速缓存标签阵列未命中时,实现对新边高速缓存条目的写入,拾取涉及奇数16B地址(例如,表示32字节拾取的第二半部分)并且不是分支的目标(例如,排除分支的目标,因为在这种情况下,由于没有扫描整个拾取(仅在分支目标之后的一部分),所有开始/结束/前缀标记都将不可用)。例如,当分支到16字节拾取的中间的点时,将不会发生对指令边界的全扫描,因此,开始、结束和前缀数据的整个集将不可用于对边高速缓存数据阵列18进行写入。因此,如果边高速缓存条目涉及分支的目标,则将其从边高速缓存条目中排除。另外,边高速缓存阵列系统的某些实施例可以(例如,通过使用特征控制寄存器、扫描、熔断器等)将边高速缓存数据阵列18的使用限制为每16字节的预定或可编程数量的指令的代码区域。例如,在每16字节具有多于5个指令的情况下,为了避免超过每时钟带宽的字节拾取(例如,每时钟周期16字节的拾取),边高速缓存数据阵列条目可以被限制为一些预定或可配置的数量(例如,3至5)的指令。此外,边高速缓存数据阵列条目,或者在一些实施例中,整个边高速缓存数据阵列18在以下情况下无效:I高速缓存数据阵列逐出(cast out)(例如,在从I高速缓存数据阵列14中逐出数据的情况下,需要存在在边高速缓存数据阵列18中无效的相应条目,以避免不适当的别名)、探听(snoop)无效(例如,经由从I高速缓存数据阵列14发送的信号)、TLB无效或OS/AS前缀默认改变(例如,其影响指令长度)。注意,由于边高速缓存阵列系统与指令高速缓存器并行工作,因此U级知道何时存在高速缓存命中以及是否存在逐出或无效事件。

现在参考图2,示出了诸如由扩展逻辑22进行的边高速缓存条目扩展的示意图。特别地,示出了边高速缓存数据阵列18、与具有开始信息和前缀信息的五个指令相对应的前缀总线51的图示、用于指令的解复用器52、XIB M队列26和解码或(OR)逻辑54。注意,使用五个指令作为用于实现边高速缓存阵列系统的实施例的条件用于图示,并且在一些实施例中可以施加其它限制。存储在边高速缓存数据阵列18中的数据采用在图2中的边高速缓存数据阵列18下方的左侧代表性地示出的格式,并且包括针对字节15至0的结束位标记(end[15:0])、针对字节15至0的分支标记(branch[15:0])以及针对字节15至0的断点标记(bpoint[15:0])。这些标记是由XIB M队列26使用的形式,因此也被直接存储到所示的XIBM队列条目56。扩展逻辑22解码并进行逻辑或运算以将五个指令中的各指令的编码开始点扩展为XIB M队列格式,如解码或逻辑54和Ins1start[3:0]、Ins2start[3:0]、...Ins5start[3:0]所示。例如,5个指令的开始位例如被从4位版本解码为16位版本。这些16位版本一起被进行或(OR)操作以创建XIB M队列条目中的Start[15:0]格式。注意,在边高速缓存数据阵列18中保持这种格式的各指令的开始位不节省空间,但是使得能够将前缀总线扩展成适合于XIB M队列26的格式。

注意图2的中心,来自边高速缓存数据阵列18的是五个指令,各个指令包括4位的start[3:0]和15位的prefix[14:0],并且所示的是使用解复用器52引导前缀总线51以创建适于在XIB M队列26中使用的格式(例如,附接到各个指令的前缀,包括Ins1Prefix[14:0]、Ins2Prefix[14:0]、...Ins5Prefix[14:0])。对于指令1,start1字段的值介于0至15之间。基于该值,ins1前缀(PF1)被引导到正在写入的XIB M队列条目56的16个区段之一。例如,如果Start1[3:0]==1100,则PF1[14:0]被引导到正在写入的XIB M队列条目56的第12字节区段。针对五个指令中的各指令都进行相同的操作。来自各个指令的数据一起被进行或(OR)操作以创建M队列条目写入数据。也就是说,各解复用器(demux)52将输入馈送到XIB M队列26(例如,XIB M队列26的16个区段输入为,Ins1demux馈送还由Ins2、Ins3等的demux进行馈送,其一起被进行或(OR)操作(例如,在RTL中))。

注意,仅示出了XIB M队列26的单个条目。在实际实现中,该队列中可能存在六(6)个或更多条目。各个字节针对开始、结束、分支和断点需要各存储1位,加上针对前缀的15位。在一个实施例中,各个条目是16×19或304位宽,其还可以包括与该描述无关的一些其它数据。

鉴于上述描述,本领域的普通技术人员应当理解,图3中表示为方法58且在一个实施例中由微处理器实现的边高速缓存阵列方法包括:在指令高速缓存器处接收包括第一字节部分和第二字节部分的取指(60);基于边高速缓存标签阵列的命中,由边高速缓存标签阵列用信号通知除了第一字节部分之外的第二字节部分的进一步处理(62);以及在边高速缓存数据阵列处存储第二字节部分的指令数据(64)。

流程图中的任何处理描述或框应被理解为表示代码的模块、段、逻辑或部分(其包括用于在过程中实现特定逻辑功能或步骤的一个或多个可执行指令),并且替代实现包括在实施例的范围内,其中如本发明领域技术人员将理解的,功能可以不按所示或讨论的顺序地执行(包括基本上并发执行或以不同顺序执行),这取决于所涉及的功能。

虽然已经在附图和前面的描述中详细示出和描述了本发明,但是这样的示出和描述应被认为是说明性的或示例性的而不是限制性的;本发明不限于所公开的实施例。本领域技术人员通过研究附图、公开内容和所附权利要求书,在实践要求保护的发明时可以理解并实现所公开的实施例的其它变化。

注意,可以使用所公开的实施例的不同组合,因此参考实施例或一个实施例并不意味着排除来自该实施例的特征与来自其它实施例的特征一起使用。在权利要求书中,词语“包括”不排除其它要素或步骤。

16页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:血液分析仪及其数据处理方法、计算机存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!