首页> 中国专利> 提交高速缓存行的方法和指令高速缓存

提交高速缓存行的方法和指令高速缓存

摘要

提供一种提交高速缓存行的方法和指令高速缓存,用于从处理器的响应缓冲器阵列向icache阵列提交高速缓存行的方法包括:在连续的时钟周期期间,向icache阵列和响应缓冲器阵列提供循序地址;在第一时钟周期期间,检测命中响应缓冲器阵列的第一地址;在第一时钟周期之后的第二时钟周期期间,进行第一零时钟提交以从响应缓冲器阵列向icache阵列写入第一高速缓存行;以及在第二时钟周期期间,使作为循序地址其中之一的第二地址旁路。在随后的周期中第二地址可能命中响应缓冲器阵列的假设下,使第二地址旁路。如果第二地址未命中响应缓冲器阵列,则以轻微的罚时重新执行被旁路的地址,其中零时钟提交节省的时间超过该罚时。

著录项

  • 公开/公告号CN107885530A

    专利类型发明专利

  • 公开/公告日2018-04-06

    原文格式PDF

  • 申请/专利权人 上海兆芯集成电路有限公司;

    申请/专利号CN201711115588.5

  • 发明设计人 布兰特·比恩;

    申请日2017-11-13

  • 分类号

  • 代理机构北京林达刘知识产权代理事务所(普通合伙);

  • 代理人刘新宇

  • 地址 201203 上海市浦东新区张江高科技园区金科路2537号301室

  • 入库时间 2023-06-19 04:58:04

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-06-30

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F 9/38 专利号:ZL2017111155885 变更事项:专利权人 变更前:上海兆芯集成电路有限公司 变更后:上海兆芯集成电路股份有限公司 变更事项:地址 变更前:201203 上海市浦东新区张江高科技园区金科路2537号301室 变更后:201203 上海市浦东新区张江高科技园区金科路2537号301室

    专利权人的姓名或者名称、地址的变更

  • 2020-06-23

    授权

    授权

  • 2018-05-01

    实质审查的生效 IPC(主分类):G06F9/38 申请日:20171113

    实质审查的生效

  • 2018-04-06

    公开

    公开

说明书

技术领域

本发明一般涉及处理器性能,更具体地涉及进行零时钟提交(zero clockretire)的指令高速缓存(icache),其中在零时钟提交期间,将存储在响应缓冲器中的高速缓存行在不插入时间延迟的情况下写入icache阵列中。

背景技术

为了提高性能和效率,处理器通常包括一个以上级别的高速缓冲存储器,其中该高速缓冲存储器在本地存储从外部存储器中取得的信息以供处理电路更快速地访问。本文使用的术语“处理器”指代任意类型的处理单元,包括微处理器、中央处理单元(CPU)、一个或多个处理核和微控制器等。本文所使用的术语“处理器”还包括任意类型的处理器配置,诸如集成在芯片或集成电路(IC)上的处理单元等,这些处理单元包括内置于芯片系统(SOC)等的处理单元。在处理器从外部系统存储器请求的信息位于内部高速缓存中且引起高速缓存命中的情况下,将以减小的等待时间(latency)取得该信息,否则发生高速缓存未命中,并且从与内部高速缓冲存储器相比具有更长的等待时间的更高的高速缓存级和/或系统存储器中取得该信息。随着处理继续且随着内部处理器高速缓存被填充,高速缓存命中的百分比增加,从而提高了总体的处理器性能。

处理器可以包括不同类型的高速缓存,包括指令高速缓存(icache)、数据高速缓存(dcache)、(用于存储数据和指令的)统一高速缓存、转译后备缓冲器(TLB)等。icache用于存储从系统存储器中取得的包括通过处理器来执行的指令的高速缓存行。icache是更小且更快速的用以实现期望速度和性能的第1级(level-1)(L1)高速缓存。icache可以使用自定义静态随机存取存储器(SRAM)阵列来实现。由于高速缓存阵列的物理尺寸在实现额外端口时基本上会增加,因此通常仅使用一个读取/写入(R/W)端口来实现icache以降低icache的物理尺寸。物理上较小的高速缓存阵列还降低功耗且促进满足定时参数的能力。

在诸如icache等的高速缓存阵列为单端口的高速缓存系统中,在给定周期中只发生一次读取或写入。在诸如icache等的高速缓存读取为关键性能的系统中,并不期望中断读取流来进行写入。icache通常包括相对少量的行填充缓冲器,这里称为响应缓冲器。当在icache中发生未命中时,分配响应缓冲器并且从系统存储器或诸如第2级(L2)统一高速缓存等的更高的高速缓存级中取得高速缓存行,并且将取得的高速缓存行存储在分配的响应缓冲器中。响应缓冲器中的有效信息必须最终“提交(retire)”,其中在“提交”中,将这些信息移动至icache数据阵列以供将来访问。在常规的单端口icache配置中,各响应缓冲器必须中断icache内的循序地址读取操作以将信息写入icache阵列中。各提交中断将定时延迟插入到icache的提取流中,使得性能随时间的经过而显著降低。

发明内容

根据一个实施例的用于从处理器的响应缓冲器阵列向指令高速缓存阵列提交高速缓存行的方法,其包括:在连续的时钟周期期间,向所述指令高速缓存阵列和所述响应缓冲器阵列提供多个循序地址;在第一时钟周期期间,检测命中所述响应缓冲器阵列的第一地址;在所述第一时钟周期之后的第二时钟周期期间,进行第一零时钟提交以从所述响应缓冲器阵列向所述指令高速缓存阵列写入第一高速缓存行;以及在所述第二时钟周期期间,使作为所述多个循序地址其中之一的第二地址旁路而不提供至所述指令高速缓存阵列。在随后的周期中第二地址可能命中响应缓冲器阵列的假设下,所述第二地址被旁路。

所述方法可以包括:将所述指令高速缓存阵列切换到写入周期;选择所述响应缓冲器阵列的响应缓冲器;在取消选择所述第二地址的地址索引的情况下,将来自所选择的响应缓冲器的地址索引提供至所述指令高速缓存阵列的索引输入;将来自所选择的响应缓冲器的路值提供至所述指令高速缓存阵列的路输入;以及将来自所选择的响应缓冲器的标签地址和所述第一高速缓存行提供至所述指令高速缓存阵列的相应输入。要提交的所选择的响应缓冲器可以是用于存储第一地址的响应缓冲器,但也可以是准备提交的任一其它响应缓冲器。该方法可以包括:控制用于在所选择的响应缓冲器的地址索引和循序地址的地址索引之间进行选择的选择逻辑。

该方法可以包括:在所述第二时钟周期之后的后续时钟周期期间,检测命中所述响应缓冲器阵列的所述第二地址;以及在所述后续时钟周期期间,从所述响应缓冲器阵列的所选择的响应缓冲器开始读取周期。在这种情况下,由于第二地址随后命中响应缓冲器阵列并且因此被正确处理,因而在零时钟提交期间使第二地址旁路是无关紧要的。该方法可以包括:在所述第二时钟周期之后的第三时钟周期期间,检测命中所述响应缓冲器阵列的所述第二地址;在所述第三时钟周期之后的第四时钟周期期间,检测命中所述响应缓冲器阵列的第三地址;以及在所述第四时钟周期之后的第五时钟周期期间,进行第二零时钟提交以从所述响应缓冲器阵列向所述指令高速缓存阵列写入第二高速缓存行。实际上,只要循序地址继续命中响应缓冲器阵列,操作就可以以这种方式无限地进行。

该方法可以包括:在所述第二时钟周期之后的第三时钟周期期间,检测未命中所述响应缓冲器阵列的所述第二地址;在备份所述第二地址的情况下临时暂停多个循序地址的提供;以及在重新开始多个循序地址的提供的情况下,再次向所述指令高速缓存阵列和所述响应缓冲器阵列提供所述第二地址。在这种情况下,由于第二地址没有命中响应缓冲器阵列并且由此还没有被正确处理,因此使第二地址旁路以进行零时钟提交是重要的。但是即便如此,第二地址也只是以轻微的罚时被重新执行,使得第二地址最终以正确的方式得以处理。此外,随着时间的经过,进行零时钟提交的益处显著超过重新执行被旁路的地址所引起的偶然罚时的不利。

根据一个实施例的用于处理器的指令高速缓存包括:地址生成器,用于提供多个循序地址;响应缓冲器系统,用于接收所述多个循序地址;指令高速缓存阵列;选择逻辑,其耦接至所述响应缓冲器系统和所述指令高速缓存阵列;以及控制单元,用于响应于用于表示所述响应缓冲器系统内的命中的命中指示来进行零时钟提交。所述响应缓冲器系统包括:多个响应缓冲器;以及搜索单元,用于在所述多个响应缓冲器中搜索所述多个循序地址至少之一,并且提供用于表示是否找到匹配的命中指示。所述控制单元进行以下操作:通过(在零时钟提交期间)切换到写入周期来控制所述指令高速缓存阵列;以及控制所述选择逻辑,以使得:提供来自所选择的响应缓冲器的地址和高速缓存行从而将所述高速缓存行写入所述指令高速缓存阵列中基于所述地址的位置处,同时使所述多个循序地址其中之一旁路。

来自所选择的响应缓冲器的所述地址可以包括:提供至所述指令高速缓存阵列的标签输入的标签;以及提供至所述选择逻辑的索引,其中所述标签和所述索引用于从所述指令高速缓存阵列内的存储所述高速缓存行的多个集中进行选择。所选择的响应缓冲器还可以存储提供至所述指令高速缓存阵列的路输入的路值,其中所述路值用于从所选择集的多个路中进行选择。

控制单元可以选择用于存储引起用于表示匹配的命中指示的匹配地址的响应缓冲器,或者可以选择准备提交的任何其它响应缓冲器。在进行零时钟提交之后,当搜索单元随后提供用于表示匹配响应缓冲器存储了与被旁路的循序地址匹配的地址的命中指示时,控制单元可以从匹配响应缓冲器开始读取周期。在这种情况下,由于被旁路的地址最终命中响应缓冲器,因此零时钟提交是无关紧要的。控制单元可以在地址继续命中响应缓冲器系统的同时进行零时钟提交以进一步降低延迟。

当搜索单元检测到被旁路的地址随后未命中响应缓冲器时,控制单元可以控制地址生成器以备份和重新执行被旁路的地址。考虑到通过多个零时钟提交实现了延迟的更大降低,这使得轻微罚时是可接受的。

本发明还提供一种用于处理器的指令高速缓存,其包括:地址总线,用于提供提取地址;加法器,用于使所述提取地址递增以提供循序地址;指令高速缓存阵列,其被配置为进行读取周期或写入周期;第一选择逻辑,用于在写入索引和所述提取地址的索引部分之间进行选择,并将所选择的索引提供至所述指令高速缓存阵列的索引输入;转译缓冲器,用于接收所述提取地址的标签部分,并将转译后的标签值提供至所述指令高速缓存阵列的标签输入;多个响应缓冲器,其各自能够存储标签、索引、高速缓存行和路值;响应缓冲器搜索单元,用于接收所述转译后的标签值和所述提取地址的所述索引部分以形成搜索地址,并且被配置为使用所述搜索地址来搜索所述多个响应缓冲器并提供用于表示所述搜索地址是否命中所述多个响应缓冲器的命中指示;第二选择逻辑,用于选择所述多个响应缓冲器其中之一作为所选择的响应缓冲器,将所选择的响应缓冲器的标签提供至所述指令高速缓存阵列的标签输入,将所选择的响应缓冲器的索引提供至所述第一选择逻辑的写入索引,将所选择的响应缓冲器的高速缓存行提供至所述指令高速缓存阵列的数据输入,并且将所选择的响应缓冲器的路值提供至所述指令高速缓存阵列的路输入;以及控制单元,其被配置为响应于用于表示所述搜索地址命中所述多个响应缓冲器其中之一的所述命中指示,通过切换所述指令高速缓存阵列以进行写入周期、控制所述第二选择逻辑以选择响应缓冲器并且控制所述第一选择逻辑以选择所述写入索引,来进行零时钟提交。

附图说明

参考以下描述和附图,将更好地理解本发明的益处、特征和优点,其中:

图1是包括根据本发明的一个实施例所实现的指令高速缓存的处理器的简化块图;

图2是根据本发明的一个实施例所实现的图1的icache的更详细的块图;

图3是图2的RB阵列的示例性响应缓冲器的示出各个响应缓冲器的内容的示意图;

图4是示出根据本发明实施例的零时钟提交的处理的流水线时序图;以及

图5是示出图1的icache的操作的流程图,其包括进行从RB阵列向图2的icache阵列的高速缓存行的零时钟提交。

具体实施方式

发明人已经认识到与单端口icache相关联的性能问题。因此,发明人开发了一种零时钟提交系统和方法,其将高速缓存行提交到icache阵列常规地插入到提取流中以降低定时延迟。icache可以采用流水线结构来实现。大部分时间,在连续的时钟周期期间从位于icache流水线顶部的提取地址增加了预定量的icache中读取循序高速缓存行。分支或探测(snoop)等有时可能使提取地址流中断。在分支的情况下,在假定分支位置尚未被加载到icache阵列中的情况下,icache请求分支地址处的高速缓存行并且暂时停止流水线。预取单元将接下来的若干循序高速缓存行预取(或提示请求)到响应缓冲器中,并且当返回第一高速缓存行时,icache开始响应缓冲器阵列外的处理。

在icache流水线的底部读取来自响应缓冲器的高速缓存信息期间,循序地址会在icache流水线的顶部提供。循序地址是在各连续时钟周期中通过递增各地址来生成的。由于阵列顶部的提取地址将可能命中响应缓冲器阵列,因此可以旁路该地址以进行从响应缓冲器向icache阵列的写入高速缓存行的写入循环。该提取地址旁路icache阵列,但仍被提供以用于响应缓冲器阵列中的比较。如果旁路后的提取地址后续命中响应缓冲器,则旁路是无关紧要的,避免了写入周期延迟并且可以无延迟地继续循序读取处理。然而,如果旁路后的地址没有命中响应缓冲器,则地址被反馈且重新执行,这导致重新执行罚时(timepenalty)。经过多个处理周期,重新执行罚时明显小于累积的写入周期延迟,这使得icache的效率和性能的提高。

图1是包括根据本发明的一个实施例所实现的指令高速缓存(icache)104的处理器100的简化块图。处理器100的标准指令集架构(ISA)可以是x86宏架构,在该架构中,可以正确地执行被设计成在x86处理器上执行的大多数应用程序。如果获得了预期的结果,则应用程序被正确执行。特别地,处理器100执行x86指令集的指令,并且包括x86用户可见寄存器组。然而,本发明不限于x86架构,其中处理器100可以遵循本领域普通技术人员已知的任何替代的ISA。处理器100包括分支单元102、icache 104、预取单元106、解码器108、寄存器别名表(RAT)110、保留站112、执行单元114、数据高速缓存(dcache)116、第2级(L2)高速缓存118、物理寄存器文件(PRF)120和重排序缓冲器(ROB)122。

在所示出的配置中,icache 104和dcache 116都是第1级(L1)高速缓存。icache104是用于存储从系统存储器中取得的程序指令或代码的L1指令(L1I)高速缓存,并且dcache 116是用于处理从系统存储器中取得的或发送到系统存储器的数据的L1数据(L1D)高速缓存。由于第2级L2高速缓存118包含去往和来自L1高速缓存104和116的数据和代码信息这两者,因此L2高速缓存118可以是“统一”高速缓存。L2高速缓存118与诸如总线接口和/或附加级别的高速缓存等的外部装置进行通信,以最终访问来自外部系统存储器的数据和指令(或代码)。预取单元106检测从icache 104向L2高速缓存116提交的高速缓存行请求,并且响应于此使地址递增来生成(或使icache 104生成)一个或多个附加的循序高速缓存行请求,从而使用循序高速缓存行来填充icache 104。

执行单元114可以包括一个或多个整数(INT)单元130、一个或多个浮点或中间数单元132、一个或多个加载和存储流水线(加载/存储管道)134和任何其它类型的执行单元(未示出)。加载/存储管道134可以被配置为单独的加载和存储流水线和/或加载和存储组合管道,并且还可以包括存储器排序缓冲器(MOB)(未示出)等。保留站112可以包括用于向各个执行单元114分派指令的调度器的任意组合。例如,可以包括单独的整数调度器、中间数调度器和加载/存储调度器,以将指令分别分派给INT单元130、中间数单元132和加载/存储管道134。

分支单元102经由解码器108和执行单元114来监视处理操作,以预测分支结果并且向icache 104提供一个或多个分支地址,这些分支地址以简化形式被示出为分支地址BR_ADDR。icache 104跳至分支地址所指示的分支位置,并且开始经由L2高速缓存118从外部系统存储器取得循序高速缓存行。icache 104顺次向前移动内联代码,直到指令或其它事件中断提取流为止,诸如新的分支地址等。在分支的事件中,分支单元102与icache 104进行通信,以重定向至所提供的分支地址BR_ADDR。icache 104向解码器108提供一般被示出为DATA(数据)的高速缓存行信息,其中解码器108将该高速缓存行解析为宏指令和操作数、然后解析为适合于执行单元114执行的相应的微指令和操作数。在一个实施例中,指令转译是用于将处理器100的宏指令集(诸如x86指令集架构等)的宏指令(或宏操作)转译为处理器100的微指令集架构的微指令(或微操作)的处理。

微指令被提供至RAT 110,其中RAT 110基于程序排序、所指定的操作数源和重命名信息来生成针对各指令的依赖性信息。RAT 110将解码后的微操作及其关联的依赖性信息分派到保留站112,其中保留站112包括用于保持从RAT 110所接收到的指令和依赖性信息的至少一个队列。当准备要执行所接收到的指令时,保留站112将所接收的这些指令分派到执行单元114中的相应的执行单元。当解析了指令的所有依赖性时,该指令被认定为准备好执行。与指令的分派协作地,RAT 110针对该指令分配ROB 122中的条目。因此,指令按程序排序被分配到ROB 122中,其中这些指令可以被配置为循环队列以确保指令按程序排序提交。RAT 110还向ROB 122提供依赖性信息以将该依赖性信息存储在指令的条目内。RAT110还针对各指令分配或映射PRF 120内的一个或多个物理寄存器以用于存储操作数和结果。

可以将执行单元114的结果反馈到ROB 122以更新PRF 120内的相应寄存器。在一个实施例中,RAT 110将架构寄存器映射到PRF 120中的物理寄存器,并更新ROB 122中的与指令相对应的指针等(未示出)。ROB 122中的指针可以在执行期间或执行之后更新,并且这些指针用于在操作期间更新PRF 120内的寄存器的内容。ROB 122最终按程序排序来提交指令,以确保根据正执行的操作过程或应用的指令进行合适的操作。

处理器100可以是超标量的,并且能够在单个时钟周期中向执行单元114发出多个指令。处理器100还可以被配置为进行非循序执行。也就是说,保留站112可以不按照包括指令的程序所指定的顺序来发出指令。超标量非循序执行处理器通常试图维持相对大的未完成指令池,使得这些处理器可以利用更大量的指令并行性。在确定知道指令是否实际完成之前,处理器100还可以执行指令时进行指令的推测执行或者至少进行指令所规定的一些动作。指令可能由于诸如误预测(即,错误地预测)分支指令、例外(中断、页错误、除零条件、一般保护错误等)等的各种原因而未完成。尽管处理器100可以推测性地进行指令所规定的一些动作,但是处理器100并不利用指令的结果来更新系统的架构状态,直到确定知道该指令将完成为止。这可以例如在ROB 122提交了该指令时确定出。

图2是根据本发明的一个实施例所实现的icache 104的更详细的块图。所示的块图由于省略了对于本发明的完整且全面的理解不必要的许多细节而被简化。将分支地址BR_ADDR连同若干反馈地址一起提供给多路复用器(MUX)202的各个输入,其中MUX 202向另一MUX 204的一个输入提供所选择的地址。第一反馈地址是备份地址BACKUP_ADDR,第二反馈地址是循序地址SEQ_ADDR,以及第三反馈地址是保持地址HOLD_ADDR。响应缓冲器(RB)索引(RB_IDX)经由寄存器206而被提供至MUX 204的另一输入,并且预取地址PRE_ADDR经由另一寄存器208而被提供至MUX 204的另一输入。所示的各寄存器可以根据被传送的数据来调整大小,通过处理器或核心时钟信号(未示出)来进行控制,并且可以被提供以用于流水线定时的目的。被示出为MISC_ADDRS的一个或多个混合地址提供给MUX 204的一个或多个输入。这些混合地址可以是探测或无效地址等,并且不作进一步描述。

MUX 202的输出被提供至用于提供所寄存的地址ADDR_I2的一寄存器210,其中该地址ADDR_I2被作为保持地址HOLD_ADDR进行反馈并且进一步被提供至加法器212的输入。将加法器212的输出作为循序地址SEQ_ADDR进行反馈。在一个实施例中,如本文进一步描述的,加法器212被配置为使地址提前16字节(B),以在连续时钟周期中使寻址顺次提前16B。第一选择信号MS0被提供至MUX 202的选择输入,并且另一选择信号MS1被提供至MUX 204的选择输入,其中选择信号MS0和MS1通过控制单元214提供。图中示出的各选择信号可以包括取决于相应MUX的输入数量的一个或多个位,其中该MUX基于选择信号向其输出提供选择输入。

MUX 204在地址总线205上提供选择地址ADDR_C,以(基于从提供至MUX 202或204的地址中选择的一个地址)从系统存储器中提取相应的高速缓存行,其中ADDR_C另外被称为“提取”地址。在一个实施例中,处理器100使用存储器映射配置,而ADDR_C是不意图用于直接访问系统存储器的“虚拟”(也称为“线性”)地址(VA)。替代地,首先将该虚拟地址转换为物理地址(PA),然后该物理地址可以用于从系统存储器中访问高速缓存行。通过用于从系统存储器中取得页表的表查找引擎等(未示出)来促进转译,其中所取得的页表信息用于将所接收到的虚拟地址变换成相应的物理地址。一旦完成转译,则将虚拟地址及其相应的物理地址一起存储在转译后备缓冲器(TLB)222中。TLB 222是在存储转译的情况下避免耗时的表查找过程的高速缓冲存储器。在根据诸如最近最少使用(LRU)策略等的替换策略来驱逐转译之前,该转译将保留在TLB 222中。

在所示出的配置中,icache 104以流水线化配置来实现,其中在该配置中,附加到虚拟地址ADDR_C的末尾的后缀符号“_C”是表示icache 104的“C”阶段的定时符号。如本文的进一步描述,C阶段表示仲裁周期,之后是“I”地址访问阶段,之后是“B”阵列访问阶段,之后是“U”决策周期阶段。这些流水线阶段通常被以核心时钟计时的寄存器所分隔。如图所示,ADDR_C被提供至用于提供下一个I阶段地址ADDR_I的寄存器216,ADDR_I被提供至用于提供下一个B阶段地址ADDR_B的寄存器218,ADDR_B被提供至用于提供下一个U阶段地址ADDR_U的寄存器220。ADDR_I和ADDR_I2均在I阶段期间提供。ADDR_U作为备份地址BACKUP_ADDR被反馈。尽管未具体示出或描述,但是在相应的地址总线上提供各地址。

虚拟地址ADDR_C的上部是被示出为TAG_C的地址的“标签”部分,将该TAG_C提供至TLB 222的输入。如果在TLB 222中没有找到该虚拟地址标签及其相应的物理地址标签则发生TLB“未命中”,并且TLB 222向控制单元214设置信号TLB命中/未命中(TLB_H/M)以指示未命中。否则,如果找到转译则设置TLB_H/M以指示“命中”,并且TLB 222输出相应的物理地址标签作为I阶段期间的TAG_I。TLB_H/M可以是具有用于指示命中或未命中的两个状态的单个二进制信号,或者可以被实现为单独的命中或未命中信号。TAG_I被提供通过寄存器224以提供物理地址标签作为B阶段期间的TAG_B。TAG_B被提供至icache阵列228的标签阵列226的标签输入“TAG”,其中icache阵列228还包括相应的数据阵列227。另一方面,虚拟地址ADDR_C的下部是被示出为IDX_C的“索引”部分,其中将IDX_C提供至用于从控制单元214接收选择信号ZC0的MUX 230的一个输入。MUX 230具有用于向标签阵列226的索引输入提供所选择的索引值IDX的输出。被示出为IDX+_C的索引的扩展版将提供至用于从控制单元214接收选择信号ZC1的另一MUX 232的一个输入。MUX 232具有用于将所选择的索引值IDX+提供至数据阵列227的索引输入的输出。

所示实施例中的icache阵列228被配置为具有用于存储多个高速缓存行的多“路”的集相关高速缓存。索引值选择多个集中的一个集,其中各集包括特定数量的路。标签阵列226在索引所选择的集的各路中搜索物理地址标签TAG_B。如果在标签阵列226中没有找到TAG_B,则标签阵列226向控制单元214设置信号TAG_H/M以指示未命中。以与以上针对TLB_H/M所述的相同的方式,TAG_H/M包括指示标签阵列226中的命中或未命中的一个或多个信号。当标签阵列226中发生未命中时,标签阵列226确定此时的替换WAY值并且还从路选择(WS)输入/输出(I/O)中输出WAY值,其中该WAY值用于在从L2高速缓存118和/或系统存储器取得信息时,标识要放置该未命中的高速缓存行的所标识集的特定路。如果在标签阵列226中找到(例如命中)TAG_B,则标签阵列226从标签阵列226的WS I/O向数据阵列227的路选择(WS)输入来设置WAY值,其中该WAY值用于标识找到匹配的物理地址标签的所选择集的特定路。数据阵列227在阶段B期间,将来自所标识的高速缓存行的数据提供至输出MUX 234的一个输入DATA_B上。控制单元214将选择信号DATA_SEL提供至MUX 234的选择输入,以将所选择的数据提供至解码器108。

icache阵列228可以被配置为在单个核心时钟周期中在DATA_B上读出整个高速缓存行。然而,在所示的配置中,可将各高速缓存行细分为数据子块,而数据阵列227在连续时钟周期中在DATA_B上读出这些数据子块。扩展索引IDX+包括一个或多个附加的最低有效位(LSB)以在所选择的高速缓存行内寻址各子块。加法器212在连续时钟周期中使地址的扩展部分递增,并且数据阵列227在各时钟周期中输出所选择的高速缓存行的一个数据子块。

icache 104包括响应缓冲器阵列(RB阵列)236和RB搜索单元238。尽管RB阵列236和RB搜索单元238被示出为分离的实体,但是RB阵列236和RB搜索单元238是用于处理从外部存储器(例如,L2高速缓存118或系统存储器)中所取得的高速缓存行的较大型响应缓冲器系统239的一部分。提供RB阵列236,以临时存储从L2高速缓存118所取得的高速缓存行从而最终存储在icache阵列228中。如下面进一步描述的,将RB阵列236中所存储的各高速缓存行“提交”到数据阵列227以释放响应缓冲器从而接收新的高速缓存行。第一RB被示出为RB0,其中可以理解,包括编号为0到N-1的“N”个响应缓冲器。N可以是取决于特定配置的任意适当数量。在一个实施例中,RB阵列236包括用于临时存储多达8个高速缓存行的8个响应缓冲器。图3是示例性响应缓冲器300,其示出RB阵列236的各个响应缓冲器的内容的示意图。如本文的进一步描述,响应缓冲器300包括:标签字段302,用于存储物理地址标签RB_TAG;索引字段304,用于存储相应的物理地址索引RB_IDX;数据字段306,用于存储被示出为RB_DATA的整个高速缓存行;以及路字段308,用于存储路(way)值RB_WAY。

返回参考图2,在阶段B期间,将TAG_B和ADDR_B的索引部分IDX+_B提供至RB搜索单元238,其中RB搜索单元238在RB阵列236中搜索相应的高速缓存行。特别地,将TAG_B与RB_TAG进行比较,并且将IDX+_B的主索引部分(例如,IDX_B)与用于保持有效信息的各响应缓冲器的RB_IDX进行比较。RB搜索单元238向控制单元214设置信号RB_H/M以指示是否找到匹配。以与以上针对TLB_H/M所述的相同的方式,RB_H/M包括指示RB阵列236中的命中或未命中的一个或多个信号。然而,当发现匹配时,控制单元214向MUX 240设置选择信号RBS0以选择匹配响应缓冲器的数据字段306从而访问内部存储的相应高速缓存行,并且将来自匹配响应缓冲器的RB_DATA作为RB_DATA_B输出至MUX 234的另一输入。以与针对数据阵列227描述的类似方式,加法器212在连续周期中使得扩展索引IDX+_B递增以访问提供至解码器108的各个数据子块。

从数据阵列227输出的数据(被示出为DATA_B)和从RB阵列236输出的数据(被示出为RB_DATA_B),可以在下一时钟周期或表示U阶段的转变之前的B阶段期间相对较晚地提供。设置在MUX 234的输出处的寄存器235将所选择的数据寄存作为提供至解码器108的DATA_U。

MUX 242从控制单元214接收选择信号RBS1以用于提供所选择的响应缓冲器的RB_TAG、RB_DATA和RB_WAY。另一MUX 244从控制单元214接收选择信号RBS2以用于提供所选择的响应缓冲器的RB_IDX。在写入周期期间,将来自MUX 242的RB_TAG和RB_DATA分别提供至标签阵列226和数据阵列227的写输入“W”,并且将RB_WAY提供至标签阵列226和数据阵列227的WS输入。控制单元214向标签阵列226和数据阵列227分别设置读取/写入(R/W)信号以用于控制读取周期和写入周期。在正常的循序地址处理期间,控制单元214设置R/W以指示读取周期,其间,在连续时钟周期中,将来自数据阵列227的数据作为DATA_B或将来自RB阵列236的数据作为RB_DATA_B。如本文的进一步描述,控制单元设置R/W以指示写入周期,其间,用于将高速缓存行从RB阵列236中的响应缓冲器提交到数据阵列227中由相应索引和路值所表示的位置。在各写入周期期间,将相应的地址标签存储到标签阵列226中的相应位置中。如本文的进一步描述,在常规提交写入周期期间,将RB_IDX提供至寄存器206。如本文的进一步描述,RB_IDX还提供至MUX 230和232这两者的其它输入,其中控制单元214在零时钟提交(ZCR)写入周期期间从所选择的响应缓冲器中选择RB_IDX。

在预取周期期间,预取单元106设置预取地址PRE_ADDR并使其通过寄存器208和MUX 204以在icache阵列228中搜索所指示的高速缓存行。如本文进一步的描述,预取单元106还通过使TLB 222旁路来将相应的预取地址标签TAG_PRE直接设置到标签阵列226的TAG输入。如本文的进一步描述,从ADDR_U到RB阵列236的虚线246表示:当在icache阵列228和RB阵列236中都存在未命中时,在U操作阶段中确定该未命中并且将可用的响应缓冲器分配并填充物理地址和WAY值。从ADDR_U到控制单元214的虚线248表示:阶段U是决策周期,在阶段U期间主要通过控制单元214进行决策。控制单元214设置提供至RB阵列236和RB搜索单元238的分配信号ALLOC以分配响应缓冲器。ADDR_U的标签部分(例如,TAG_U)是虚拟地址,并且对于填充到新分配的响应缓冲器的标签字段302中而言是无效的。替代地,TAG_B和IDX_B(IDX+_B的索引部分)通过RB搜索单元238来寄存,并且用于在阶段U期间填充新分配的响应缓冲器的索引字段304。如前所述,当标签阵列226中发生未命中时,由标签阵列226来提供WAY值,其中将该WAY值填充到新分配的响应缓冲器的路字段308中。

在更具体的配置中,物理地址(PA)包括总共46位PA[45:0],并且虚拟地址(VA)包括总共48位VA[47:0](或更多)。在一个实施例中,这里假定4千字节(KB)的页大小,使得地址的标签部分包括上部的最高有效位(MSB)向下直到位12(例如,PA[45:12]或VA[47:12])。TLB 222存储虚拟地址TAG_C的标签部分和物理地址PA[45:12]的标签部分之间的转译。虚拟地址和物理地址的剩余最低有效位(LSB)是相同的,或者PA[11:0]=VA[11:0]。在该具体配置中,数据阵列227是用于存储高达512个64B高速缓存行的32KB 8路集相关高速缓存。标签阵列226和数据阵列227各自划分成使用包括较低[11:6]地址位的6位索引(IDX)所选择的64个不同的集合。索引扩展(IDX+)包括该6个索引位和附加的2个LSB地址位或者[11:4],以在高速缓存行的16B数据块中的各数据块经由输出MUX 234提供至解码器108时访问这些数据块。然而,应当理解,本发明不限于任何特定的地址长度、页大小、icache阵列大小、高速缓存类型、高速缓存行大小或路数。

在操作中,分支单元102与icache 104进行通信以重定向至所提供的分支地址BR_ADDR。分支地址可以是推测的或非推测的。非推测分支例如可以是通过执行单元114处理并确定的直接指令。推测分支地址通过一个或多个预测过程来确定,这些预测过程相对准确但不总是正确。在推测地址不正确的情况下,icache 104最终被重定向到正确的位置。一旦采取分支,icache104进行工作,以在(控制单元214设置R/W以指示读取周期的)连续读取周期期间取得循序高速缓存行并向解码器108提供这些循序高速缓存行。分支地址可以是作为提取地址ADDR_C而提供的虚拟地址。如果地址未命中TLB222,则相应的物理地址标签尚未存储在TLB 222内。在一个实施例中,在U阶段之前实际上不考虑TLB_H/M信号,在这种情况下,控制单元214进入等待状态直到取得物理地址标签并且将地址转译映射存储到TLB222中为止。控制单元214设置MS0以选择BACKUP_ADDR,然后选择HOLD_ADDR,使得在等待状态期间将该地址保持为HOLD_ADDR。

另一方面,TLB 222将请求转发至可以存储地址转译的L2TLB(未示出),在这种情况下,将虚拟和物理标签地址信息提供给TLB 222。如果L2TLB也未命中,则进行表查找操作以从系统存储器中取得页表信息,该页表信息用于将虚拟地址标签转换为相应的物理地址标签。L2TLB中的命中可能引起一些延迟,而表查找操作引起明显更大的延迟。在任一情况下(L2TLB中的命中或表查找),控制单元214进入等待状态,直到取得物理地址为止。提供TLB分层结构以最小化或以其它方式降低随后周期中的表查找延迟。

一旦取得地址转译并将地址转译存储到TLB 222中,则重新启动流水线以使得TAG_C在TLB 222中命中,其中TLB 222提供TAG_I、之后提供TAG_B,将TAG_B提供至标签阵列226和RB搜索单元238。将IDX_C提供至icache阵列228并且将IDX_B(扩展版本IDX+_B的一部分)提供至RB搜索单元238。尽管未示出,但是标签阵列226和数据阵列227包括内部阶段寄存器或类似组件等,使得阶段C中设置在icache阵列228顶部的IDX_C在连续周期中被内部阶段化并且在阶段B期间与TAG_B同时被icache阵列228所考虑。如前所述,在icache阵列228中命中的情况下,在连续的时钟周期中在DATA_B上读出所标识的高速缓存行的连续子块。如前所述,如果地址在icache阵列228中未命中、但在RB阵列236中命中,则在连续的时钟周期中在RB_DATA_B上读出所标识的响应缓冲器中所存储的高速缓存行的连续子块。

当地址在icache阵列228和RB阵列236中都未命中时,控制单元214设置ALLOC以分配RB阵列236的可用响应缓冲器,其中RB搜索单元238填充新分配的响应缓冲器的标签字段302和索引字段304,并且将来自标签阵列226的路值填充路字段308。控制单元214停止如前所述的使用BACKUP_ADDR和HOLD_ADDR的流水线寻址,并且进一步使用所请求的地址向L2高速缓存118设置被示出为L2CL_REQ的高速缓存行请求。该地址被保持为HOLD_ADDR,而icache 104处于等待所请求的高速缓存行的等待状态。

如本文进一步描述的,可以在连续的时钟周期中进行多个高速缓存行请求,并且可以以与提交的顺序不同的方式返回多个高速缓存行请求。在接收到所请求的高速缓存行的情况下,该高速缓存行包括可以用于标识相应响应缓冲器的相应索引信息。控制单元214将各高速缓存行放置在针对该高速缓存行所分配的响应缓冲器的数据字段306中。当接收到所请求的第一高速缓存行时,控制单元214重新启动流水线以开始读出RB阵列236。尽管虚拟地址标签已经被找到或以其它方式存储在TLB 222内,但是仍然在TLB 222中重新执行虚拟地址以确保其仍然有效。该地址应当在标签阵列226中依然未命中,但是由于所分配的响应缓冲器包含所请求的高速缓存行,因此该地址现在在RB阵列236中命中。控制单元214经由MUX 240和234开始将高速缓存行作为RB_DATA_B从所分配的响应缓冲器向解码器108读出。

每当针对新的高速缓存行分配RB阵列236的响应缓冲器并且将请求发送至L2高速缓存118时,预取单元106触发预取操作。在预取操作期间,预取单元106从所分配的响应缓冲器中取得物理地址标签RB_TAG和索引RB_IDX,使索引递增一个循序高速缓存行(例如,64B),并将循序地址作为PRE_ADDR提交至icache 104。通常,预取不跨越页边界,使得仅递增索引以提供循序物理地址。由于预取是处于同一页面内,因此搜索TLB 222可以被旁路。预取单元106将物理标签作为TAG_PRE应用于标签阵列226,同时将相应的递增索引提供至标签阵列226和数据阵列227这两者。在icache阵列228内未命中的情况下,预取单元106引发控制单元214利用该循序地址向L2高速缓存118提交新请求。此外,标签阵列226利用TAG_H/M信号提供相应的WAY值。作为响应,控制单元214设置ALLOC以分配另一响应缓冲器,其中所分配的响应缓冲器如先前所述加载有相应的RB_TAG、递增的索引RB_IDX和WAY值,并且控制单元214向L2高速缓存118提交另一请求。再次,在分配另一响应缓冲器时,预取单元106开始另一预取操作以向下一循序地址引发另一高速缓存行请求。

总而言之,每当分配响应缓冲器并请求相应的高速缓存行时,预取单元106开始另一预取操作以请求下一循序高速缓存行,使得icache 104分配另一响应缓冲器。操作可以以此方式重复,直到请求预定数量的高速缓存行、直到RB阵列236为满、或者直到取得后续分支地址为止。以这种方式,将多个循序高速缓存行请求提交至L2高速缓存118以存储到RB阵列236中。尽管高速缓存行可能没有按所请求的顺序而被接收,但一旦取得所请求的第一高速缓存行,控制单元214则重新启动流水线并且将数据读出至解码器108。

应当理解,RB阵列236是有限资源,使得一旦高速缓存行存储到响应缓冲器中,则触发提交请求以通过在写入周期期间将高速缓存行写入到icache阵列228中来“提交”高速缓存行。在将来再次请求相同的高速缓存行的可能性高的假设下(基于大多数应用的循环操作),即使RB阵列236中所存储的各高速缓存行已被读出至解码器108,也将这些高速缓存行提交到icache阵列228。如示例性响应缓冲器300所示,各响应缓冲器包括用于将高速缓存行存储到数据阵列227的足够信息。在常规配置中,为了在在线循序icache操作期间从RB阵列236(或数据阵列227)读出数据时将高速缓存行写入数据阵列227,流水线将延迟至少一个时钟周期以留出写入周期。流水线中的地址由HOLD_ADDR保持至少一个时钟周期,同时控制单元214将icache阵列228切换到写入模式以将高速缓存行写入到通过索引和WAY值所标识的正确的集和路。一旦存储,则重新启动流水线以恢复连续的读取周期操作。

在常规配置中,ADDR_C的索引部分IDX_C与用于保持正提交的高速缓存行的响应缓冲器的索引部分RB_IDX不匹配。没有设置MUX 230和232,使得icache阵列228的连续读取周期必须中断至少一个写入周期以将提交的高速缓存行存储到icache阵列228中。在这种情况下,地址必须诸如通过HOLD_ADDR等来保持,同时控制单元214设置RBS2以选择并输出正提交的高速缓存行的索引值RB_IDX。在这种情况下,RB_IDX提供至寄存器206。在下一个时钟周期中,RB_IDX作为ADDR_C的索引部分被提供至标签阵列226和数据阵列227的索引IDX输入以选择各阵列内的相应集。此外,控制单元214设置RBS1,以选择用于保持正提交的高速缓存行的响应缓冲器并输出正提交的高速缓存行的RB_TAG、RB_DATA和RB_WAY,并且控制单元214切换R/W以指示写入周期。在写入周期期间,将RB_TAG提供至标签阵列226的W输入,将RB_DATA提供至数据阵列227的W输入,并且将RB_WAY提供至数据阵列227的WS输入和标签阵列226的路端口。在写入周期期间,将RB_TAG写入到标签阵列226的所选择的集和路中,并且将RB_DATA写入到数据阵列227的所选择的集和路中。然后。响应缓冲器可用于保持另一取得的高速缓存行。一旦写入,则控制单元214切换R/W以指示读取周期,并且重新开始流水线以继续循序在线操作。

应当理解,常规的提交过程将延迟或定时气泡插入到icache 104的流水线处理中。将地址流保持至少一个周期以允许icache阵列228能够用于写入周期,从而存储正提交的高速缓存行。尽管提交周期可以在单个时钟周期中进行,但是应当理解,提交周期必须规律且频繁地发生以释放响应缓冲器,由此从L2高速缓存118中取得附加的高速缓存行来供处理器100处理。因此,提交响应缓冲器的时间延迟规律且频繁地使icache 104的循序读取周期中断。这种提交随时间的经过显著降低处理器100的效率和性能。然而,icache 104被配置为进行零时钟提交写入周期,来自RB阵列236的高速缓存行可以在在零时钟提交写入周期以不插入时间延迟的情况下被提交到icache阵列228中。

图4是示出根据本发明实施例的零时钟提交的过程的流水线时序图404。图表402示出通过icache 104按顺序处理的3个不同高速缓存行CL0、CL1和CL2的4个数据子块。尽管各高速缓存行被划分为4个子块,但是应当理解,各高速缓存行可以依赖于特定配置而被划分为任何数量的子块。第一高速缓存行CL0包括子块A、B、C和D,第二高速缓存行CL1包括子块E、F、G和H,并且第三高速缓存行CL2包括子块I、J、K和L。在预取过程期间,第一高速缓存行CL0存储在第一响应缓冲器RB0中,第二高速缓存行CL1存储在第二响应缓冲器RB1中,以及第三高速缓存行CL2存储在第三响应缓冲器RB2中。时序图404示出针对各时钟周期的icache阶段C、I、B和U,其中这些时钟周期从时钟周期零(0)开始、同时通过icache 104的各阶段的顺序处理而循序地进行。在时序图404中,位于给定阶段中的子块的符号表示该阶段中正被处理的子块的相应地址。例如,涉及时钟周期0期间处于阶段C的子块A的符号“A”是指指向该时钟周期期间处于阶段C的子块A的地址。

如该时序图所示,在第一时钟周期0期间,第一高速缓存行CL0的子块A的地址进入第一阶段C。在下一时钟周期1中,子块A的地址前进到阶段I,而高速缓存行CL0的子块B的地址进入阶段C。在下一时钟周期2中,子块A的地址前进至阶段B,子块B的地址进入阶段I,并且子块C的地址进入第一阶段C。在下一时钟周期3中,子块A的地址前进到最后阶段U,子块B的地址进入阶段B,子块C的地址前进到阶段I,并且同一高速缓存行CL0的最后一个子块D的地址进入第一阶段C。在后续时钟周期4-14期间针对第二高速缓存行CL1的子块E-H和第三高速缓存行CL2的子块I-L以这种方式重复Icache流水线操作。如图所示,例如,在连续的时钟周期11-14期间,第三高速缓存行CL2的子块L的地址循序地前进通过流水线阶段C、I、B和U。

参考图2和图4,控制单元214先前向L2高速缓存118提交针对高速缓存行CL0、CL1和CL2的请求,使得这些高速缓存行最终加载到RB阵列236的响应缓冲器RB0、RB1和RB2中。例如,当接收到icache阵列228和RB阵列236这两者皆未命中的指向高速缓存行CL0的分支时,将导致控制单元214针对CL0分配RB0并且将针对CL0的请求提交至L2高速缓存118。作为响应,预取单元106使地址递增并提交地址CL1以查询icache阵列228。在假定未命中的情况下,控制单元214针对CL1分配RB1并且将针对CL1的请求提交至L2高速缓存118。重复该过程,以使得针对CL2分配RB2并且针对CL2提交请求。应当理解,该过程可以针对不定数量的高速缓存行进行重复。

一旦高速缓存行CL0加载到响应缓冲器RB0中,控制单元214将重新启动流水线并且在第一阶段C中将第一子块A的地址设置为ADDR_C,如时序图404中的时钟0所示。在连续的时钟周期中,加法器212使地址递增了子块量,使得在连续的时钟周期1、2和3中ADDR_C分别前进到第一高速缓存行CL0的子块B、C和D的地址。在假定此时已经接收到高速缓存行CL1和CL2点情况下,如时序图404所示,在连续的时钟周期4-11中,将ADDR_C假设为高速缓存行CL1的子块E-H的地址,然后假设为高速缓存行CL2的子块I-J的地址。在连续的时钟周期期间,各子块地址从阶段C连续地前进到阶段I、B和U。

在时钟周期2中,高速缓存行CL0的子块A的地址在RB阵列236中命中,并且控制单元214控制MUX 240和234以读出子块A,该子块A在(与流水线阶段U相对应的)下一时钟周期中提供至解码器108。在时钟周期3中,高速缓存行CL0的子块B的地址在RB阵列236中命中,并且控制单元214控制MUX 240和234以读出(在下一时钟周期中提供至解码器108的)子块B。在时钟周期3中,由于子块A的地址在先前时钟周期(阶段B)中在RB阵列236中命中、然后前进到阶段U,因此控制单元214在时钟周期3期间进行零时钟提交ZCR0以将高速缓存行CL0写入到数据阵列227中。该决定的做出部分地基于以下事实:同一高速缓存行CL0的子块D的地址可能处于阶段C,因此很可能在两个时钟周期后的阶段B中在RB阵列236中命中。如时序图所示,该情况是由于子块D的地址在时钟周期3中处于阶段C。

在时钟周期3中,控制单元214通过以下方式对icache阵列228进行零时钟提交ZCR0:设置RBS1和RBS2以控制MUX 242和244,从而选择用于存储高速缓存行CL0的响应缓冲器RB0,并输出高速缓存行CL0的相应数据RB_IDX、RB_TAG、RB_DATA和RB_WAY。此外,控制单元214设置ZC0和ZC1以控制MUX 230和232,从而选择经由MUX 244从响应缓冲器RB0所提供的高速缓存行CL0的RB_IDX。将来自高速缓存行CL0的RB_TAG和RB_DATA分别提供至标签阵列226和数据阵列227的W输入,并且将RB_WAY提供至icache阵列226和227这两者的路输入。此外,控制单元214切换到icache阵列228的R/W以指示用于将高速缓存行CL0从RB阵列236写入到icache阵列228的写入周期。以这种方式,在时钟周期3期间,在将高速缓存行CL0的子块B读出到解码器108时,整个高速缓存行CL0同时被写入到icache 228的所选择的集和路中。

应当理解,当控制单元214控制ZC0和ZC1以从RB阵列236中选择RB_IDX而并非从ADDR_C中选择IDX_C和IDX+_C时,在时钟周期C中有效地使处于阶段C的当前提取地址旁路。如假设那样并且如时序图404所示,如果IDX+_C是高速缓存行CL0的子块D的地址,则由于该地址随后命中RB阵列236,因此这种旁路是无关紧要的。该条件是在时钟周期5中当控制单元214检测到子块D的地址在RB阵列236中命中使得来自RB搜索单元238的RB_H/M指示命中时得以确认的。此时,子块D的地址的旁路是无关紧要的(由此被认为“OK”),并且操作可以在没有补偿动作的情况下进行。

随着顺序处理继续,在子块E的地址命中阶段U时,控制单元214在时钟周期7中进行另一零时钟提交ZCR1。在这种情况下,控制单元214设置RBS1和RBS2以选择用于保持高速缓存行CL1的响应缓冲器RB1,设置ZC0和ZC1以选择RB_IDX用于零时钟提交周期,并且设置R/W以指示时钟周期7中的写入周期。因此,在时钟周期7中,在阶段B将子块F提供至MUX 234的同时,将子块E寄存并提供至解码器108,并且将高速缓存行CL1写入到icache阵列227。然而,在阶段C中使子块H的地址旁路。零时钟提交ZCR1随后在时钟周期9中当子块H的地址命中RB阵列236时得以确认,在这种情况下,时钟周期7期间H的旁路被认为“OK”并且操作可以继续。控制单元214在时钟周期11中进行另一零时钟提交ZCR2以将高速缓存行CL2提交到icache阵列228,在这种情况下,如在子块L的地址在RB阵列236中命中时的后续时钟周期13中所确定的那样,时钟周期11中被旁路作为ADDR_C所提供的子块L的地址被认为“OK”。

只要在随后的循序读取周期中从L2高速缓存118中取得高速缓存行,操作就可以以这种方式无限地继续。用于避免循序高速缓存行的提交延迟的累积结果随时间的经过提高了效率和性能。此外,响应缓冲器更提早一个时钟周期被释放以接收另一个高速缓存行。如时序图404所示,在各零时钟提交之后,在ADDR_C地址的旁路被认为无关紧要(或与之相反)时,由于已经从响应缓冲器读出最后的子块,因此该响应缓冲器将变得可用于接收另一高速缓存行。例如,在时钟周期5中,当读出子块D以使得子块D的地址的旁路被认为OK时,释放响应缓冲器RB0以接收另一高速缓存行。

还应注意,ADDR_C地址可以改变为另一地址,使得在有效性周期期间,地址不是同一高速缓存行的最后的子块但仍然命中RB阵列236。例如,在时钟周期5中,地址不是子块D的地址而作为代替是RB阵列236中所存储的不同高速缓存行的另一子块的地址,这是可以的。这对于零时钟提交周期是无关紧要的,这是因为只要地址在有效性周期期间命中RB阵列236,ADDR_C的旁路就仍被认为是无关紧要的。

在一些有效性周期中,有效性测试失败,其中进入阶段B的地址未命中RB阵列236。在这种情况下,由于RB阵列236中所存储的高速缓存行均应被提交到icache阵列228,因此高速缓存行的提交仍然被视为有效。尽管如此,如果有效性测试失败,则在C阶段中被旁路的提取地址未被评估并且可能不命中。在这种情况下,控制单元214通过选择BACKUP_ADDR来在阶段U期间备份(back up)地址,以重新执行被旁路的地址。此外,读取处理实质上被停止,且不向解码器108读出数据,直到重新执行被旁路的地址为止。被旁路的地址在阶段C中重新呈现,并且允许在TLB 222和icache阵列227中进行比较。例如在探测或分支等的情况下,有效性测试可能失败。重新执行被旁路的地址的结果是若干时钟周期的成本,例如在所示实施例中最多4个时钟周期等。然而,应当理解,有效性测试失败基本上不经常发生,使得零时钟提交的益处实质上超过了地址重新执行的成本。

总之,在高速缓存行的各第一数据子块已经从RB阵列236的响应缓冲器中读出之后进行零时钟提交。如此,使ADDR_C的提取地址旁路,这有利于在零时钟提交周期期间将RB_IDX提供至icache阵列228。在大多数时间,被旁路的地址指向同一高速缓存行的最后的数据子块,或者指向位于RB阵列236中的其它数据,使得在几个周期后命中RB阵列236。即使不是同一高速缓存行,只要在阶段B中命中RB阵列236,则该地址实际上没有被旁路并且被正确地进行了处理。然而,如果如在零时钟提交之前的阶段B期间所确定的那样,被旁路的地址未命中RB阵列236,则如在阶段U中所决定的简单地重新执行该地址。重新执行仅在地址流被诸如探测或分支所中断的情况下发生。基本上,通过MUX 230和232来分割流水线寻址,以允许不同的地址而非零时钟提交周期期间与RB阵列236进行比较的地址来访问icache阵列228。然而,如果被旁路的提取地址没有以命中RB阵列236而结束,则将该提取地址反馈到icache流水线的顶部并重新执行。未命中的提取地址重新执行可能会产生多时钟惩罚。然而,应当理解,与使用零时钟提交所避免的大量定时延迟相比,偶然未命中的提取地址重新执行惩罚明显更小。以这种方式,随着时间的经过,提高了效率并且实质上提高了处理器100的性能。

图5是说明icache 104的操作的流程图,其包括进行从RB阵列236向icache阵列228的高速缓存行的零时钟提交。在块502中,在地址总线205上生成通常为下一提取地址的下一地址ADDR_C。该地址可以作为分支地址来提供,或者通过预取单元106进行预取操作来提供,但是也可以是如前所述的备份、保持或循序地址。在下一块504中,将地址的标签部分提供至TLB222,其中TLB 222提供诸如TAG_B等的转译地址标签。尽管在图5中未示出,但是如果在TLB 222中发生未命中,则将该地址保持多个周期、直到(虚拟和物理地址之间的)转译被存储在TLB 222中为止,并且重新开始流水线以生成命中。

在下一块506中,提供转译的标签和索引以搜索icache阵列228。如前所述,icache阵列228最初被配置成进行R/W指示读取的读取周期。设置ZC0和ZC1以将IDX_C和IDX+_C分别选择至标签阵列226和数据阵列227的索引输入,使得同时考虑TAG_B和IDX_C来搜索icache阵列228。通常,可以将MUX 202、204、230和232、寄存器206、208、210、216、218和220以及加法器212统称为用于生成提取地址ADDR_C的地址生成器。然而,为了本公开的目的,还将TLB 222视为地址生成器的一部分以用于最终向icache228提供物理(例如,转译)地址。在下一询问块508中,评估TAG_H/M信号以判断所提供的地址是否在icache阵列228中命中。如果命中,则操作转到下一块510,其中在块510中,如前所述,从icache阵列228中进行读取周期,以将数据子块作为提供至MUX 234的DATA_B读出。然后,操作循环回到块502,其中在块502中,以类似的方式处理下一个循序地址。只要所请求的高速缓存行存储在icache阵列228中,操作就可以进行到块510并且循环回到块502以针对循序地址。

在所提供的地址未命中icache阵列228的情况下,操作进行到块512,其中在块512中,提供转译标签和索引以搜索RB阵列236。尽管流程图呈现循序搜索icache阵列228和RB阵列236,但是应当理解,在icache流水线的阶段B期间实质上同时进行该搜索。然而,还应当理解,所提供的地址通常在任意给定时间仅命中阵列228和236中的一个而非两者。如先前参考图2所描述的,TAG_B和IDX+_B提供至RB搜索单元238以搜索用于保持有效信息的RB阵列236的各响应缓冲器。

在下一询问块514中,如果所提供的地址命中RB阵列236,则操作进行到块516,其中在块516中,从RB阵列236读出所请求的高速缓存行。如图2所示,控制单元214设置RBS0以选择匹配的响应缓冲器并将数据子块作为RB_DATA_B读出至MUX 234。在下一询问块518中,如果这不是匹配的响应缓冲器的第一次命中,则操作返回到块502以用于处理下一循序地址。此时,如图4所示,如在时钟周期4、5和6期间读出子块B、C和D所示那样,已经读出高速缓存行。还应当理解,在流水线配置中,下一循序地址已经生成并且正在通过icache流水线传播,其中流程图示出了概念性过程操作。

替代地,如果如块518所判断的,命中是匹配的响应缓冲器的第一次命运,则操作进行到块520以进行零时钟提交操作。ZCR标志被设置,并且控制单元214设置适当的控制信号以进行零时钟提交。如前所述,控制单元214设置R/W以指示icache 228的写入周期。控制单元214设置RBS2以使得将来自所选择的响应缓冲器的索引值RB_IDX提供至MUX 230和232,并且控制单元214设置ZC0和ZC1以使得MUX 230和232选择RB_IDX并提供至icache阵列228的标签阵列226和数据阵列227的IDX输入。控制单元214还设置RBS1,使得将所选择的响应缓冲器的RB_TAG、RB_DATA和RB_WAY值提供至icache阵列228以用于写入周期。如图2所示,将RB_TAG提供至标签阵列226的写入W输入,将RB_DATA提供至数据阵列227的写入W输入,并且将RB_WAY提供至阵列226和227这两者的WS输入。以这种方式,将所选择的响应缓冲器的标签和高速缓存行值写入到icache阵列228的适当集的适当路中以提交响应缓冲器。然后,操作循环回到块502以继续循序地址操作。

应当注意,只要所提供的地址命中RB阵列236,操作就可以在连续周期中进行到块518或者块520、然后循环回块502。以这种方式,可以连续进行多个零时钟提交操作,从而减少响应缓冲器提交延迟。然而,还应当理解,当控制MUX 230和232以选择RB_IDX而非ADDR_C的IDX_C时,有效地使提取地址旁路,这有利于零时钟提交。只要(如在块514所判断的)被旁路的地址命中RB阵列236,则使提取地址旁路在连续周期中是无关紧要的。

返回到块514,如果所提供的地址未命中RB阵列236,则操作替代地进行到块522,其中在块522中询问先前是否已设定ZCR标志。如果是,则被旁路的地址没有命中RB阵列236,因此应当被重新执行。操作进行到块524、然后进行到块526,其中在块524中清除ZCR标志,以及在块526中备份要在icache流水线中重新执行的被旁路的地址。如图2所示,被旁路的地址作为ADDR_U被提供,然后被MUX 202和204选择以在下一时钟周期反馈到ADDR_C。然后,操作返回到块502,其中在块502中,被旁路的地址作为提供至TLB 222和icache阵列228的下一提取地址被反馈。以这种方式,被旁路的地址未命中但是替代地以小的罚时被重新执行。因为为了重新执行被旁路的地址而忽略了通过icache流水线的连续地址处理,因此该罚时最多4个时钟周期。

返回到块522,如果未设置ZCR标志,则简单而言地址未命中icache阵列228和RB阵列236,在这种情况下,操作进行到块528以从外部存储器请求高速缓存行。如前所述,向响应缓冲器分配并加载标签、索引和路值,控制单元214从包括L2高速缓存118的外部存储器中请求高速缓存行,并且预取单元106可以开始预取操作。此外,备份并保持当前地址,直到取得到所请求的高速缓存行为止。操作返回到块502,其中暂停操作、直到取得所请求的高速缓存行为止,然后重新开始循序地址操作。

已经给出了前述描述以使本领域普通技术人员能够在特定应用的上下文及其要求中所提供的那样实现和使用本发明。虽然已经参考本发明的某些优选版本相当详细地描述了本发明,但是其它版本和变形是可能的并被预期。对优选实施例的各种修改对于本领域技术人员将是显而易见的,并且本文设定的一般原理可以应用于其它实施例。例如,本文所描述的电路可以以包括逻辑装置或电路等的任何合适的方式来实现。本领域技术人员应当理解,可以容易地使用所公开的概念和具体实施例作为设计或修改用于在不脱离本发明的精神和范围的情况下实现本发明的相同目的的其它结构的基础。因此,本发明并不意图被限制于本文所示出以及所描述的特定实施例,而是符合与本文公开的原理和新颖特征一致的最宽范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号