CN112130897A - 微处理器 - Google Patents
微处理器 Download PDFInfo
- Publication number
- CN112130897A CN112130897A CN202011011051.6A CN202011011051A CN112130897A CN 112130897 A CN112130897 A CN 112130897A CN 202011011051 A CN202011011051 A CN 202011011051A CN 112130897 A CN112130897 A CN 112130897A
- Authority
- CN
- China
- Prior art keywords
- instruction
- address
- fetch
- target
- ftq
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/22—Microcontrol or microprogram arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本发明提出一种微处理器,其中分支预测器以及指令快取以一取指目标队列解耦,且该取指目标队列提供取指失败解决方案。响应一目标取指地址的取指失败,该指令快取自该取指目标队列重新读出该目标取指地址,复原一取指地址。由此,分支预测器可大幅领先该指令快取运作。
Description
技术领域
本申请关于微处理器的指令提取。
背景技术
计算机架构中,一般会以数字电路实现分支预测器(branch predictor),预测分支指令(例如,“if-then-else”条件分支指令、“call”呼叫指令、“return”返还指令、以及“jump”无条件分支指令)的跳转。分支预测器有效加速微处理器的指令提取,显著提升流水线架构的微处理器(pipelined microprocessor)的效能。
然而,指令提取可能会失败,如何对此进行改良为本技术领域一项重要课题。
发明内容
本申请以解耦一分支预测器以及一指令快取的一取指目标队列处理取指失败事件。
根据本申请一种实施方式实现的一微处理器包括一指令快取、一分支预测器、以及耦接在该分支预测器以及该指令快取之间的一取指目标队列。该指令快取依据一取指地址进行取指。该取指目标队列储存经该分支预测器完成分支预测、且在预测的分支方向上的指令地址,待读出作为该指令快取的该取指地址。响应一目标取指地址的取指失败,该指令快取自该取指目标队列重新读出该目标取指地址,作为该取指地址。
一种实施方式中,响应该目标取指地址的取指失败,该取指目标队列的一读取指标修复指向一备份指标。在该取指目标队列中,该备份指标指向储存该目标取指地址的一目标储存格。微处理器可在该目标取指地址自该取指目标队列读出作为该指令快取的该取指地址时,记录该取指目标队列的该读取指标为该备份指标。该取指目标队列的该读取指标可常态逐周期朝下一个储存格递增。响应该分支预测器预测到一跳转事件,该取指目标队列的该读取指标可修正为对齐该取指目标队列的一写入指标,指向一空白储存格。
一种实施方式中,微处理器还包括一第一多工器、一第二多工器、以及一缓存器。该第一多工器接收该取指目标队列的一读取指标在一当下周期的一原值、并接收该原值加1,以根据该指令快取控制的一读取致能信号择一输出。该第二多工器接收该第一多工器的一输出信号、并接收一备份指标,以根据一备份指标选择信号择一输出。该备份指标选择信号响应该目标取指地址的取指失败。该缓存器缓存该第二多工器的一输出信号,使该输出信号于一接续周期输出,以更新该取指目标队列的该读取指标。在该取指目标队列中,该备份指标指向储存该目标取指地址的一目标储存格。微处理器可在该目标取指地址自该取指目标队列读出作为该指令快取的该取指地址时,记录该取指目标队列的该读取指标为该备份指标。
一种实施方式中,微处理器还包括一第一列缓存器,对应该取指目标队列的该储存格,为各储存格缓存一U级有效标志,在对应的储存格填入指令地址时立起,直至所填入的指令地址由该指令快取成功完成流水线U级运算才放下。U级有效标志立起的储存格不允许该分支预测器进行复写。相应该取指目标队列在一第一周期的状况,U级有效标志可在接续该第一周期的一第二周期调整,继而决定该取指目标队列各储存格在该第二周期允许复写与否。
一种实施方式中,该目标取指地址的取指失败源于该指令快取的一映射关系缓存器落空。
一种实施方式中,该目标取指地址的取指失败源于该指令快取未备妥指令。
一种实施方式中,该目标取指地址的取指失败源于该指令快取输出端所连结的一缓存器满载。该缓存器用于缓存待解码指令。
一种实施方式中,该分支预测器于每一周期并行对N个指令地址进行分支预测,且将上述N个指令地址中、完成分支预测、且在预测的分支方向上的指令地址不重叠前一周期地推入该取指目标队列。N为大于1的正整数。该微处理器可还包括串接的N个多工器以及一缓存器。该N个多工器分别由N个写入致能信号控制,在没有写入致能信号致能时,输出该取指目标队列的一写入指标于一当下周期的一原值,并在上述N个写入致能信号中的头m个写入致能信号致能时,输出该原值+m,m为大于0的整数。该缓存器缓存该串接的N个多工器的一输出信号,使该输出信号于一接续周期输出,以更新该取指目标队列的该写入指标。该N个写入致能信号由该分支预测器设定,是该当下周期推入该取指目标队列的指令地址数量。
下文特举实施例,并配合所附图示,详细说明本发明内容。
附图说明
图1根据本申请一种实施方式图解一微处理器100;
图2根据本申请一种实施方式详解该取指目标队列FTQ、以及该多工器116的设计;
图3根据本申请一种实施方式图解并行分支预测的多条地址如何推入该取指目标队列FTQ,也图解如何将该取指目标队列FTQ储存格内容弹出;
图4A、4B以及4C则根据本申请多种实施方式条列各储存格的地址AddrBP如何填写;
图5A根据本申请一种实施方式图解刷新发生后,同步信号Sync何时再被拉起;
图5B图解图5A周期T5若预测到地址60至地址200跳转(但此时该取指目标队列FTQ并不为空),同步信号Sync将如何变化;
图5C根据本申请一种实施方式图解刷新后,又预测出一跳转目标地址时,同步信号Sync何时拉起;
图6根据本申请一种实施方式图解生成写入指针Wrptr的逻辑电路;
图7为读取指标Rdptr的一种逻辑生成电路;
图8A讨论同步模式下发生的取指失败;
图8B讨论非同步模式下发生的取指失败;以及
图9A以及图9B图解C级有效标志、以及U级有效标志的设计。
其中,附图中符号的简单说明如下:
100~微处理器;102~指令;104~指令快取;106~解码器;108~执行单元;110~分支预测器;114~跳转目标地址;116~多工器;118~(指令快取用)自增地址;120、122~刷新地址;124~多工器;202~多工器;204~取指目标队列FTQ储存格弹出的地址(Addr);206、208~多工器;410、420、430~表格;702~缓存器;704、706~多工器;AddrBP~指令地址;AddrEqual~比较信号;AddrL1i~取指地址;Backup_Rdptr~备份指标;BTACQ~队列;FTQ~取指目标队列;miss~错失信号;PDQ~队列;R~缓存器;RdPtr~读取指针;SelBackup~备份指标选择信号;Sync~同步信号;T~取跳转标志;T0…T9~周期;TargPtr~指针;W~跨取指单位标志;WrAddr~地址;WrapTargPtr~指针;WrEn0…WrEn3~写入致能信号;WrPtr、WrPtr0…WrPtr3~写入指针,其中WrPtr0为起始写入指针。
具体实施方式
以下叙述列举本发明的多种实施例。以下叙述介绍本发明的基本概念,且并非意图限制本发明内容。实际发明范围应依照权利要求来界定。
图1根据本申请一种实施方式图解一微处理器100。
根据取指地址AddrL1i,指令102自指令快取(instruction cache,如本技术领域熟知的L1i)104取出,由解码器106解码,最终由执行单元108执行。取指单位可为16字节(16B),即一次取指操作取回16字节的指令。不同于传统技术将指令快取104的取指地址AddrL1i也同步供分支预测用,本申请的微处理器100设计使得分支预测器(branchpredictor)110进行分支预测的指令地址AddrBP得以高度领先该指令快取104的取指地址AddrL1i。
参阅图1,微处理器100提供一取指目标队列(fetch target queue)FTQ,耦接在该分支预测器110以及该指令快取104之间,储存经该分支预测器110完成分支预测的至少一指令地址(多工选择自分支预测器110的AddrBP),待弹出作为该指令快取104的取指地址AddrL1i,其中输入该分支预测器110进行分支预测的指令地址AddrBP领先于该取指地址AddrL1i。详言之,经该分支预测器110完成分支预测的至少一指令地址AddrBP中全部或部分先被推入(push)该取指目标队列FTQ,再适时被弹出(pop)作为该指令快取104的该取指地址AddrL1i。取指目标队列FTQ使得分支预测器110与指令快取104得以解耦(decoupled)。分支预测器110无需同步于该指令快取104对该指令快取104的取指地址AddrL1i进行分支预测,而是独立地对指令地址AddrBP进行分支预测操作;依照本申请设计,分支预测器110可大幅领先该指令快取104运作。
分支预测器110与指令快取104之间的解耦设计(取指目标队列FTQ)可大大增进微处理器分支预测和取指效率。由于分支预测器110早早就预测出分支跳转,无意义(不在预测分支方向上)指令地址AddrBP不会被推入取指目标队列FTQ从而可被排除。仅有意义(在预测分支方向上)指令地址会被推入该取指目标队列FTQ形成取指轨迹,指引该指令快取104上的指令提取。
此段落初步说明分支跳转的信号流。如图所示,指令地址AddrBP每周期自增送入分支预测器110进行分支预测。预测到跳转时,跳转目标地址114更新指令地址AddrBP,使得分支预测器110转而自跳转目标地址逐取指单位地进行分支预测。另外,如果此时该取指目标队列FTQ恰好为空,则更新为跳转目标地址114的指令地址AddrBP可不经该取指目标队列FTQ就往后传,立即作为该指令快取104的取指地址AddrL1i。多工器116为该跳转目标地址114更新的指令地址AddrBP的直接传递提供通路。此后,该指令快取104可提供逐周期自增于该跳转目标地址的(指令快取用)自增地址118,经该多工器116更新该取指地址AddrL1i。待该取指目标队列FTQ内容追上该指令快取104需求(例如,上述指令快取用自增地址118同样存在于该取指目标队列FTQ,即,指令快取用自增地址118与推入该取指目标队列FTQ的指令地址AddrBP之一相等),该指令快取104可切换回以该取指目标队列FTQ弹出的指令地址为该取指地址AddrL1i。
另一个讨论方向是微处理器100运算流水线上发生需要刷新(flush)取指地址AddrL1i的情形,例如分支预测器110可能不准确,载于该取指目标队列FTQ的取指轨迹可能是错的,微处理器100运算流水线较后端的解码器106或执行单元108可在辨识出当初的分支预测错误时发生刷新;又例如解码器106或执行单元108在运行中发生例外(exception)时也会发生刷新,当刷新被发起时,该解码器106或执行单元108会回传刷新地址120或122,经多工器116刷新(flush)该取指地址AddrL1i,并同时清空该取指目标队列FTQ。之后周期,指令快取104还从刷新地址120/122开始地址自增,逐周期提供指令快取用自增地址118至多工器116,使取指地址AddrL1i相应更新。另外,刷新地址120/122也耦接多工器124,输出作为指令地址AddrBP,使分支预测器110亦切换成自上述刷新地址120/122做分支预测,不再浪费在错误方向的分支预测上。
微处理器100运算流水线上发生刷新时,指令快取104切换由刷新地址120/122、以及自增于该刷新地址120/122的指令快取用自增地址118更新该取指地址AddrL1i。如此一来,尽管取指目标队列FTQ被清空,指令快取104也不会因为该取指目标队列FTQ没有可弹出内容而停滞。待上述指令快取用自增地址118同样存在于该取指目标队列FTQ(即,指令快取用自增地址118与后续推入该取指目标队列FTQ的指令地址AddrBP之一相等)后,该指令快取104即可切换回以该取指目标队列FTQ弹出的地址为该取指地址AddrL1i。
整理之,操作指令快取104的取指地址AddrL1i有两种来源:来自前级(来自该取指目标队列FTQ、或指令地址AddrBP直接传递)以及来自指令快取用自增地址118(包括在预测到分支跳转且同时该取指目标队列FTQ中没有可供弹出的指令地址时自增于该跳转目标地址的指令快取用自增地址118、以及发生刷新时自增于该刷新地址的指令快取用自增地址118);对应的工作模式后文称之为同步模式和异步模式。同步模式下,多工器116以该取指目标队列FTQ弹出地址、或直接以指令地址AddrBP为取指地址AddrL1i来源。异步模式下,多工器116以其他输入120、122或118为取指地址AddrL1i来源。基于前述同步模式与异步模式的切换,指令快取104几乎不因分支预测不及延宕,且该取指目标队列FTQ的效用也被极致发挥。
另外,指令快取104上可能未找到指令(cache miss)。相应地,指令快取104会先完成指令载入,再接收该取指目标队列FTQ重新弹出的错失地址,完成取指。
图1微处理器100还包括队列PDQ。以下讨论之。
分支预测器110中通常以存储器(如SRAM)记录多种分支预测用信息或表格。例如:分支目的地址快取(Branch Target Address Cache,简称BTAC)、以及分支经验表格(Branch History Table,简称BHT)。分支目的地址快取BTAC可载有取址单位所含的分支指令的分支类型(branch type)、分支目的地址(target address)…等。分支经验表格BHT用于预测分支方向(prediction of branch direction)的查找,判断取跳转taken、或不取跳转not taken。该些信息或表格可随着分支预测器110运作而更新。分支预测器110因大幅领先取指位址AddrL1i运作,累积的更新信息相当可观,即先推入该队列PDQ。这些更新信息会适时自队列PDQ弹出,送入微处理器100后端流水线,供BTAC、BHT更新时使用。
一种实施方式中,指令快取104以及分支预测器110都是在微处理器100的多级(例如,多达20级)流水线运算中的C、I、B、U四级操作。指令地址AddrBP必须完成分支预测(走到最末U级)、且未被领先地址的分支预测避开,方能推入该取指目标队列FTQ。如此一来,推入该取指目标队列FTQ必然有意义(在预测分支方向上)。
图2根据本申请一种实施方式详解该取指目标队列FTQ、以及该多工器116的设计。
该取指目标队列FTQ的各储存格(entry)可储存三种信息:取跳转标志(predicttaken flag)T;跨取指单位标志(wrap flag)W;以及指令地址AddrBP。一种实施方式中,一储存格有50位。该指令地址AddrBP占48位。该取跳转标志T可占一位,标志该指令地址AddrBP指示的取指单位中,是否预测到一取跳转(taken)的分支指令。该跨取指单位标志W可占一位,标志该取跳转的分支指令是否跨取指单位(即是否为“wrap”),即对应的取指单位中,是否有预测为取跳转(taken)的分支指令跨越两个取指单位(16B),即该取跳转(taken)的分支指令本身的一部分在第一个16B,另一部分在相邻的第二个16B。值得注意的是,当该指令位址AddrBP并不包含分支指令、或者包含分支指令但并不取跳转(taken)时,即使该分支指令跨取指单位也并不需要标志该跨取指单位标志W,因为如果不跳转则下一个取指单位(16B)不会被跳转避开,其顺序地一定会被取指,因此不必标识。
各笔信息(由T、W以及AddrBP组成)可根据指针WrPtr推入(push)该取指目标队列FTQ中的相应储存格。指针RdPtr则是用来读取储存格,将其中信息(T、W以及AddrBP)自该取指目标队列FTQ弹出(pop)。
图2实施例中图1的多工器116可由三个多工器202、206以及208结合实现。其中多工器202除了接收取指目标队列FTQ储存格弹出的地址(AddrBP)204,也接收不通过取指目标队列FTQ取得、确定会进行而待填入储存格的地址WrAddr。在取指目标队列FTQ为空时,多工器202将地址WrAddr直接送往多工器206,避开取指目标队列FTQ存取的延滞。多工器202为相对取指目标队列FTQ的旁路多工器(bypass mux),在取指目标队列FTQ为空、且取指目标队列FTQ的写入致能信号(WrEn)拉起时,提供旁路将欲推入取指目标队列FTQ的地址WrAddr导向取指目标队列FTQ的输出口。多工器206由一同步信号Sync控制,决定取指目标队列FTQ工作于前述同步模式或异步模式:同步信号Sync为真时,取指目标队列FTQ工作于同步模式,在同步模式下取前级(来自多工器202)提供的地址为指令快取104的取指地址AddrL1i,取指目标队列FTQ弹出的地址、或直接收到的地址WrAddr经由多工器206、208输出,作为指令快取104的取指地址AddrL1i;同步信号Sync为假时,取指目标队列FTQ工作于异步模式,在异步模式下指令快取104的取指地址AddrL1i可为预测出跳转时自增自跳转目标地址114的指令快取用自增地址118,或刷新发生时自增于刷新地址120/122的指令快取用自增地址118。多工器208用于处理刷新事件,由解码器106、或执行单元108控制,在解码器106、或执行单元108触发刷新事件时,改选择刷新地址120/122作为取指地址AddrL1i。
指令快取104上未找到指令(cache miss)时,指针RdPtr会重回错失地址所在的储存格。指令快取104完成指令载入后,指针RdPtr所指的错失地址自该取指目标队列FTQ重新弹出。指令快取104完成取指。
一种实施方式中,分支预测器110并行完成多条地址的分支预测。图3根据本申请一种实施方式图解并行分支预测的多条地址如何推入该取指目标队列FTQ,也图解如何将该取指目标队列FTQ储存格内容弹出。以下说明例并行进行三个指令地址的分支预测。特别是,每周期并行完成分支预测的三个指令地址预测到三个取指单位中存在取跳转(taken)的分支指令与否,并且解析出其中取跳转的分支指令是否为“跨取指单位”(即wrap,即该取跳转的分支指令本身跨越两个16B)。若取跳转且跨取指单位,则该取跳转的分支指令所在的取指单位的相邻取指单位的地址也可同周期推入该取指目标队列FTQ。因此,并行推入该取指目标队列FTQ的地址可能多达四个(3+1),自该取指目标队列FTQ所接收的指针WrPtr0指向的储存格起始储存。自增自该指针WrPtr0,指针WrPtr1、WrPtr2、以及WrPtr3,接续标示三个储存格。指针WrPtr0~WrPtr3实现四个储存格的并行储存。该取指目标队列FTQ的操作另外还使用到指针RdPtr、TargPtr以及WrapTargPtr。指针RdPtr指定弹出内容的储存格,如果当指针RdPtr指向的指令地址AddrBP预测到对应的取指单位包括一取跳转的分支(takenbranch)指令时,其接续储存格则以指针TargPtr标示,由指针TargPtr指向这个取跳转分支指令的跳转目的地址(target address)。若该取跳转的分支指令本身“跨取指单位”(wrap,即W标志被置位),则指针WrapTargPtr即指向存有相邻取指单位地址的相应储存格。指针TargPtr和WrapTargPtr是存在取跳转的分支指令或/及该取跳转的分支指令为wrap时可以直接从该取指目标队列FTQ中得到该取跳转的分支指令的跳转目的地址的信息,不需要额外的资源去存储。
图4A、4B以及4C则根据本申请多种实施方式条列各储存格的地址AddrBP如何填写。分支预测器110并行三个地址的分支预测,此外,分支预测器110是进行多级第一流水线运算(C/I/B/U级);指令快取104是进行多级第二流水线运算(例如也是C/I/B/U级)。以下讨论当前周期下完成分支预测的地址标为PC、PC+16、以及PC+32,例如如后面图5A、5B及5C所示,分支预测流水线包括C/I/B/U四级,并且前述每个取指单位对应取指16字节(16B)的指令,因此以下讨论当前周期完成分支预测U级流水线运算的地址标为PC、PC+16、以及PC+32。储存格的写入条件包括考量一旗标afterbr。由于这里讨论的是分支预测器110前后两个周期并行完成分支预测的三个指令地址AddrBP中有一个或两个重叠的情形,因此旗标afterbr为真时,代表分支预测完毕(完成U级流水线运算)的地址PC没出现在领先一周期的分支预测中。例如,地址PC为分支跳转后的头一笔地址,或是刷新后的头一笔地址。旗标afterbr为否(~afterbr)时,代表分支预测完毕(完成U级流水线运算)的地址PC已出现在领先一周期的分支预测中。
图4A令相邻周期的并行分支运算只有一个地址重叠。例如,第一周期将指令地址A、B、C送入分支预测的第一级流水线,即图5所示的C级流水线运算,第二周期将地址C、D、E送入C级流水线运算。分支预测用自增地址C、D、E中,有一个地址C与前一周期重叠。当前周期下完成分支预测最后一级流水线,即图5所示的U级流水线运算的地址PC、PC+16、以及PC+32,若地址PC确定未被跳转避开,则依照表410将推入该取指目标队列FTQ的指令地址AddrBP填入相关储存格。
地址PC未在前一周期推入该取指目标队列时(afterbr),则在本实例中指针WrPtr0…WrPtr3所指的四个储存格都可能会用到。指针WrPtr0所指储存格无额外条件即储存地址PC。在地址PC不跳转时,或是地址PC取跳转、但取跳转的分支指令本身跨取指单位(即wrap)时,指针WrPtr1所指储存格储存地址PC+16。在地址PC以及PC+16都不跳转时,或是地址PC不跳转、但PC+16取跳转且取跳转的分支指令本身跨取指单位(即wrap)时,指针WrPtr2所指储存格储存地址PC+32。在地址PC、PC+16都不跳转、但PC+32取跳转且取跳转的分支指令本身跨取指单位(即wrap)时,指针WrPtr3所指储存格储存地址PC+48。
地址PC已在前一周期推入该取指目标队列时(~afterbr),若PC+16未被跳转避开,推入该取指目标队列FTQ的指令地址AddrBP填写如下。指针WrPtr0所指储存格无额外条件即储存地址PC+16。在地址PC+16不跳转时,或是地址PC+16取跳转、但取跳转的分支指令本身跨取指单位(即wrap)时,指针WrPtr1所指储存格储存地址PC+32。在地址PC+16不跳转、但PC+32取跳转且取跳转的分支指令本身跨取指单位(即wrap)时,指针WrPtr2所指储存格储存地址PC+48。
图4B令相邻周期的并行分支运算有两个地址重叠。例如,第一周期将指令地址A、B、C送入分支预测的第一级流水线,即图5所示的C级流水线运算,第二周期将地址B、C、D送入C级流水线运算。分支预测用自增地址B、C、D中,有两个地址B、C与前一周期重叠。当前周期下完成分支预测最后一级流水线,即图5所示的U级流水线运算的地址PC、PC+16、以及PC+32中,若地址PC确定未被跳转避开,则依照表420将推入该取指目标队列FTQ的指令地址AddrBP填入相关储存格。相较表格410,差异在~afterbr相关栏位,因此与表格410相同的afterbr相关栏位以下不再赘述。
地址PC已在前一周期推入该取指目标队列时(~afterbr),若PC+16未被跳转避开,指令地址AddrBP填写如下。指针WrPtr0所指储存格无额外条件即储存地址PC+32。在地址PC+32取跳转、但取跳转的分支指令本身跨取指单位(即wrap)时,指针WrPtr1所指储存格储存地址PC+48。
图4C令相邻周期的并行分支运算完全不重叠。例如,第一周期将指令地址A、B、C送入分支预测的第一级流水线,即图5所示的C级级流水线运算,第二周期将地址D、E、F送入C级流水线运算。分支预测用自增地址D、E、F中,无一与前一周期重叠。当前周期下完成分支预测最后一级流水线,即图5所示的U级流水线运算的地址PC、PC+16、以及PC+32中,若地址PC确定未被跳转避开,此例无需考虑旗标afterbr。表格430显示,其指令地址AddrBP填写状况。
在其他实施方式中,分支预测器110并行处理的指令地址数量可为其他数目N。各周期填写的储存格数量可达N+1个。取指单位也不限定为16字节,可为其他数字M。
整理之,该取指目标队列FTQ的储存格的填写,包括考量该指令地址AddrBP是否有意义(未被跳转避开),并检查该指令地址AddrBP在前一周期是否已经填入该取指目标队列FTQ(例如,检查afterbr或者是否与前一周期重叠)。
以下段落讨论指令快取104所接收的取指地址AddrL1i来源,说明其如何随该取指目标队列FTQ工作于同步模式或异步模式,切换取指地址AddrL1i来源。以图3为例,该取指目标队列FTQ是根据指针WrPtr0(以下称之为起始写入指针)以及RdPtr(以下称之为读取指针)操作。在一实施例中是通过比较该起始写入指针WrPtr0以及该读取指针RdPtr,判断指令快取104工作于同步模式或异步模式,进而切换图2的同步信号Sync,设定指令快取104的取指地址AddrL1i来源。
一种实施方式中,该读取指针RdPtr每周期递增;该分支预测器110并行分支预测完毕的指令地址AddrBP根据该起始写入指针WrPtr0推入该取指目标队列FTQ,由并行写入指针(包括WrPtr0、WrPtr1…)标示,即是说,该起始写入指针WrPtr0每周期订正为指向当前周期推入该取指目标队列FTQ的指令地址所占第一个储存格。如前所述,当微处理器100的流水线发生刷新的情形时,该取指目标队列FTQ清空,相应刷新地址120/122的回传,该起始写入指针WrPtr0以及该读取指针RdPtr初始化指向该取指目标队列FTQ的一起始储存格。如前所述,当该分支预测器110预测出一跳转目标地址(即进行分支预测操作的指令地址AddrBP存在取跳转的分支指令),同时该取指目标队列FTQ中没有可供弹出的指令地址时,该读取指针RdPtr与该起始写入指针WrPtr0均订正为指向该取指目标队列FTQ中已存入指令地址的储存格后接续的空白储存格。响应以上刷新或跳转事件,该指令快取104的取指地址AddrL1i可以是刷新地址120/122、或跳转目标地址(绕过该取指目标队列FTQ、直接经AddrBP传来的114)、或后续逐周期自增于前述两者的指令快取用自增地址118。同步信号Sync为放下(de-asserted)。待该读取指针RdPtr与确实有储存内容的上述并行写入指针(包括WrPtr0、WrPtr1…)中任一相等后,该指令快取104切换回以该取指目标队列FTQ弹出的指令地址AddrBP为该取指地址AddrL1i,在一实施例中,该读取指针RdPtr是在第一周期与上述并行写入指针(包括WrPtr0、WrPtr1…)中任一相等,该指令快取104可在该第一周期的下一周期切换回以该取指目标队列FTQ弹出的指令地址AddrBP为该取指地址AddrL1i。同步信号Sync拉起(asserted)。
上述实施例是通过“指针比对”的方式来决定该指令快取104是否从前述异步模式切换回同步模式,即,是否从以指令快取用自增地址118切换回以该取指目标队列弹出的指令地址AddrBP为该取指地址AddrL1i。在其它实施例中,也可以通过直接比较指令快取用自增地址118是否与推入该取指目标队列FTQ的指令地址AddrBP之一相等来决定该指令快取104是否从前述异步模式切换回同步模式,即,是否从以指令快取用自增地址118切换回以该取指目标队列FTQ弹出的指令地址AddrBP为该取指地址AddrL1i。值得注意的是,第一种实施例中的指针比对方式──比较并行写入指标指针(包括WrPtr0、WrPtr1…)以及读取指针RdPtr──损耗的资源有限。相比于第二种实施例中直接比较48位的地址的方式,指针RdPtr、WrPtr0、WrPtr1…长度通常很短,例如,只有三位。微处理器100不用花太多资源就能进行指针比对,快速决定拉起、或放下同步信号Sync。
图5A根据本申请一种实施方式图解刷新发生后,同步信号Sync何时再被拉起。此说明例中,分支预测器110是并行对三个地址做分支预测,且相邻两个周期所输入处理的地址有一个重复(参考图4A),此外,该分支预测器110是进行多级第一流水线运算(C/I/B/U级);指令快取104是进行多级第二流水线运算(例如也是C/I/B/U级)。值得注意的是,为了图面简洁,分支预测各周期只标出起始地址,另外两个接续地址未标。取指目标队列FTQ操作的起始写入指针WrPtr0在左侧以空心箭头标示,至于读取指针RdPtr则在右侧以实心箭头标示。为了图面简洁,其他写入指针(WrPtr1…WrPtr3)并未标示。
周期T0,响应地址刷新事件,同步信号Sync为放下(de-asserted),取指目标队列FTQ进入异步模式:取指目标队列FTQ清空,起始写入指针WrPtr0以及读取RdPtr初始化至起始储存格。刷新地址10及其相邻的地址20、30输入分支预测器110,并行进行C级流水线运算。即分支预测器110切换为对刷新地址10进行分支预测。同时,刷新地址10也输入该指令快取104做C级流水线运算,即刷新地址10亦刷新该指令快取104的取指地址AddrL1i。
在异步模式下,周期T1,读取指针RdPtr移到下一个储存格。分支预测用自增地址30、40、50(图中只标出起始地址30)输入分支预测器110,并行进行C级流水线运算。指令快取用的自增地址20也输入该指令快取104做C级流水线运算。
周期T2,读取指针RdPtr移到下一个储存格。分支预测用自增地址50、60、70(图中只标出起始地址50)输入分支预测器110,并行进行C级流水线运算。指令快取用的自增地址30也输入该指令快取104做C级流水线运算。
周期T3,读取指针RdPtr移到下一个储存格。地址10、20、30(图中只标出起始地址10)的分支预测进行到U级流水线运算(即完成分支预测),且没有预测到跳转。根据图4A,当前周期完成分支预测的地址10、20、30填入该取指目标队列FTQ,指针WrPtr0、WrPtr1、以及WrPtr2订正为指向这三个储存格,其中起始写入指针WrPtr0指向当前周期(T3)推入该取指目标队列FTQ的指令地址所占第一个储存格,即起始写入指针WrPtr0指向地址10所占的储存格。此外在T3,分支预测用自增地址70、80、90(图中只标出起始地址70)输入分支预测器110,并行进行C级流水线运算。同时在T3,指令快取用的自增地址40也输入该指令快取104做C级流水线运算。
周期T4,读取指针RdPtr移到下一个储存格。地址30、40、50(图中只标出起始地址30)的分支预测进行到U级流水线运算(即完成分支预测),且没有跳转发生。根据图4A,当前周期完成分支预测的地址30、40、50中与前一周期不重叠的地址40、50填入该取指目标队列FTQ,指针WrPtr0以及WrPtr1订正为指向这两个储存格,其中起始写入指针WrPtr0订正为指向当前周期推入该取指目标队列FTQ的指令地址所占第一个储存格(这里即地址40所占的储存格)。此外在T4,分支预测用自增地址90、A0、B0(图中只标出起始地址90)输入分支预测器110,并行进行C级流水线运算。同时在T4,指令快取用的自增地址50也输入该指令快取104做C级流水线运算。值得注意的是,在当前周期T4,读取指针RdPtr与并行写入指针的一WrPtr1相等。比较信号AddrEqual拉起。所指储存格确实载有地址(50),符合同步信号Sync拉起的条件。
周期T5,同步信号Sync响应于比较信号AddrEqual拉起而拉起,读取指针RdPtr移到下一个储存格,地址50、60、70(图中只标出起始地址50)的分支预测进行到U级流水线运算(即完成分支预测),且没有跳转发生。根据图4A,当前周期完成分支预测的地址50、60、70中与前一周期不重叠的地址60、70填入该取指目标队列FTQ,指针WrPtr0以及WrPtr1订正为指向这两个储存格,其中起始写入指针WrPtr0订正为指向当前周期推入该取指目标队列FTQ的指令地址所占第一个储存格(这里即地址60所占的储存格)。此外在T5,分支预测用自增地址B0、C0、D0(图中只标出起始地址B0)输入分支预测器110,并行进行C级流水线运算。由于同步信号Sync拉起,该取指目标队列FTQ由异步模式切换回同步模式,即指令快取104切换回自该取指目标队列FTQ取得取指地址AddrL1i。根据读取指针RdPtr,该取指目标队列FTQ弹出地址60为取指地址AddrL1i,输入该指令快取104做C级流水线运算。因为已经切换回同步模式,指针WrPtr以及RdPtr的比较无需再做。
周期T6,读取指针RdPtr移到下一个储存格。地址70、80、90(图中只标出起始地址70)的分支预测进行到U级流水线运算(即完成分支预测),且没有跳转发生。根据图4A,当前周期完成分支预测的地址70、80、90中与前一周期不重叠的地址80、90填入,指针WrPtr0以及WrPtr1订正为指向这两个储存格,其中起始写入指针WrPtr0订正为指向当前周期推入该取指目标队列FTQ的指令地址所占第一个储存格(这里即地址80所占的储存格)。特别是,此时指针WrPtr0已经指向该取指目标队列FTQ最后一个储存格,则指针WrPtr1是指向该取指目标队列FTQ中被之前所取的无用地址占用的储存格(图5A所示的实施例是地址90覆盖无用地址所占的储存格中第一个储存格,其中读取指针RdPtr所指向储存格之前的储存格中的地址均是无用地址)。此外在T6,分支预测用自增地址D0、E0、F0(图中只标出起始地址D0)输入分支预测器110,并行进行C级流水线运算。由于T6同步信号Sync维持拉起,表明为同步模式,则根据读取指针RdPtr,该取指目标队列FTQ弹出地址70为取指地址AddrL1i,输入该指令快取104做C级流水线运算。
周期T7,读取指针RdPtr移到下一个储存格,地址90、A0、B0(图中只标出起始地址90)的分支预测进行到U级流水线运算(即完成分支预测),且没有跳转发生。根据图4A,当前周期完成分支预测的地址90、A0、B0中与前一周期不重叠的地址A0、B0填入,指针WrPtr0以及WrPtr1订正为指向这两个储存格,其中起始写入指针WrPtr0订正为指向当前周期推入该取指目标队列FTQ的指令地址所占第一个储存格(这里即地址A0所占的储存格)。分支预测用自增地址F0、G0、H0(图中只标出起始地址F0)输入分支预测器110,并行进行C级流水线运算。由于T7同步信号Sync维持拉起,表明为同步模式,则根据读取指针RdPtr,该取指目标队列FTQ弹出地址80为取指地址AddrL1i,输入该指令快取104做C级流水线运算。
图5A中,刷新事件使得该取指目标队列FTQ在周期T0…T4准备不及,来不及在指令快取104使用该取指地址AddrL1i前备妥相应地址。但是,这个状况完全不延误该指令快取104运作。刷新后的地址10、20、30、40、50还是由其他管道(120/122、118)逐周期供应至该指令快取104作为该取指地址AddrL1i。
图5B图解图5A周期T5若预测到地址60至地址200跳转(但此时该取指目标队列FTQ并不为空),同步信号Sync将如何变化。
相较于图5A,由于地址70将会被地址60处的跳转避开,图5B周期T5不会将地址70推入该取指目标队列FTQ。跳转目标地址200、210、220(图中只标出起始地址200)输入分支预测器110,并行进行C级流水线运算。
周期T6,由于在前一周期T5预测到跳转且同时该取指目标队列FTQ中没有可供弹出的指令地址(因为地址60及其之前的地址都在读取指针RdPtr之后,说明已经被弹出过),则同步信号Sync拉下,读取指针RdPtr与起始写入指针WrPtr0均订正为指向该取指目标队列FTQ中已存入指令地址AddrBP的储存格后接续的空白储存格(这里是指向60所占储存格后接续的空白储存格)。地址70、80、90的分支预测进行到U级流水线运算(即完成分支预测),但无意义,因已跳转避开,不会推入该取指目标队列FTQ。此外在T6,分支预测用自增地址220、230、240(图中只标出起始地址220)输入分支预测器110,并行进行C级流水线运算。同时在T6,由于同步信号Sync拉下进入异步模式,跳转目标地址200不经该取指目标队列FTQ直接输入该指令快取104做C级流水线运算。若是图2的电路实施方式,同步信号Sync在T6仍维持高位,使不经该取指目标队列FTQ通过多工器202传递的跳转目标地址200得以由多工器206输出。
周期T7,读取指针RdPtr移到下一个储存格。地址90、A0、B0的分支预测进行到U级流水线运算(即完成分支预测),但无意义,因已跳转避开,不会推入该取指目标队列FTQ。分支预测用自增地址240、250、260(图中只标出起始地址240)输入分支预测器110,并行进行C级流水线运算。由于处于异步模式,以指令快取用的自增地址210输入该指令快取104做C级流水线运算。
周期T8,读取指针RdPtr移到下一个储存格。地址200、210、220(图中只标出起始地址200)的分支预测进行到U级流水线运算(即完成分支预测),且没有跳转发生。根据图4A,地址200、210、220填入,指针WrPtr0、WrPtr1以及WrPtr2订正为指向这三个储存格,其中起始写入指针WrPtr0订正为指向当前周期推入该取指目标队列FTQ的指令地址所占第一个储存格(这里即地址200所占的储存格)。此外在T8,分支预测用自增地址260、270、280(图中只标出起始地址260)输入分支预测器110,并行进行C级流水线运算。同时在T8,由于处于异步模式,指令快取用的自增地址220也输入该指令快取104做C级流水线运算。值得注意的是,在当前周期T8,读取指针RdPtr与并行指针的一WrPtr2相等。比较信号AddrEqual拉起。所指储存格确实载有地址(220),符合同步信号Sync拉起的条件。
周期T9,同步信号Sync响应于比较信号AddrEqual拉起而拉起,读取指针RdPtr移到下一个储存格,地址220、230、240(图中只标出起始地址220)的分支预测进行到U级流水线运算(即完成分支预测),且没有跳转发生。根据图4A,当前周期完成分支预测的地址220、230、240中与前一周期不重叠的地址230、240填入,指针WrPtr0以及WrPtr1订正为指向这两个储存格,其中起始写入指针WrPtr0订正为指向当前周期推入该取指目标队列FTQ的指令地址所占第一个储存格(这里即地址230所占的储存格)。此外在T9,分支预测用自增地址280、290、300(图中只标出起始地址280)输入分支预测器110,并行进行C级流水线运算。由于同步信号Sync拉起,该取指目标队列FTQ由异步模式切换回同步模式,即指令快取104切换回自该取指目标队列FTQ取得取指地址AddrL1i。根据读取指针RdPtr,该取指目标队列FTQ弹出地址230为取指地址AddrL1i,输入该指令快取104做C级流水线运算。因为已经切换回同步模式,指针WrPtr以及RdPtr的比较无需再做。
图5B中,周期T5预测到的跳转事件使得该取指目标队列FTQ在周期T6…T8准备不及,来不及在指令快取104使用该取指地址AddrL1i前备妥相应地址。但是,这个状况完全不延误该指令快取104运作。跳转后的地址200、210、220还是由其他管道(绕过该取指目标队列FTQ直接经AddrBP传来的114、或指令快取104提供的118)逐周期供应至该指令快取104作为该取指地址AddrL1i。
图5C根据本申请一种实施方式图解刷新后,又预测出一跳转目标地址时,同步信号Sync何时拉起。
相较图5A,图5C在周期T3预测到地址10分支跳转到地址200。分支预测器110在T3预测完毕的地址包括10、20、30(图中只标出起始地址10)。响应地址10跳转到地址200的预测,地址20、30会被跳转避开而不会推入该取指目标队列FTQ而只有地址10填入。跳转目标地址200、210、220(图中只标出起始地址200)则是输入分支预测器110并行进行C级流水线运算。
周期T4,读取指针RdPtr与起始写入指针WrPtr0均订正为指向该取指目标队列FTQ中已存入指令地址AddrBP的储存格后接续的空白储存格(这里是指向10所占储存格后接续的空白储存格)。地址30、40、50的分支预测进行到U级流水线运算(即完成分支预测),但无意义,因已跳转避开,不会推入该取指目标队列FTQ。此外在T4,分支预测用自增地址220、230、240(图中只标出起始地址220)输入分支预测器110,并行进行C级流水线运算。同时在T4,由于处于异步模式,跳转目标地址200不经该取指目标队列FTQ直接输入该指令快取104做C级流水线运算。比较信号AddrEqual拉起。但是,起始写入指针WrPtr0所指储存格是空的,不当被视为并行写入指针,不符合切换至同步模式的条件。
周期T5,读取指针RdPtr移到下一个储存格。地址50、60、70的分支预测进行到U级流水线运算(即完成分支预测),但无意义,因已跳转避开,亦不会推入该取指目标队列FTQ。分支预测用自增地址240、250、260(图中只标出起始地址240)输入分支预测器110,并行进行C级流水线运算。由于处于异步模式,以指令快取用的自增地址210输入该指令快取104做C级流水线运算。
周期T6,读取指针RdPtr移到下一个储存格。地址200、210、220(图中只标出起始地址200)的分支预测进行到U级流水线运算(即完成分支预测),且没有跳转发生。根据图4A,地址200、210、220填入,指针WrPtr0、WrPtr1以及WrPtr2订正为指向这三个储存格,其中起始写入指针WrPtr0订正为指向当前周期推入该取指目标队列FTQ的指令地址所占第一个储存格(这里即地址200所占的储存格)。此外在T6,分支预测用自增地址260、270、280(图中只标出起始地址260)输入分支预测器110,并行进行C级流水线运算。同时在T6,由于处于异步模式,指令快取用的自增地址220也输入该指令快取104做C级流水线运算。值得注意的是,在当前周期T6,读取指针RdPtr与并行写入指针的一WrPtr2相等。比较信号AddrEqual拉起。所指储存格确实载有地址(220),符合同步信号Sync拉起的条件。
周期T7,同步信号Sync响应于比较信号AddrEqual拉起而拉起,读取指针RdPtr移到下一个储存格,地址220、230、240(图中只标出起始地址220)的分支预测进行到U级流水线运算(即完成分支预测),且没有跳转发生。根据图4A,当前周期完成分支预测的地址220、230、240中与前一周期不重叠的地址230、240填入,指针WrPtr0以及WrPtr1订正为指向这两个储存格,其中起始写入指针WrPtr0订正为指向当前周期推入该取指目标队列FTQ的指令地址所占第一个储存格(这里即地址230所占的储存格)。此外在T7,分支预测用自增地址280、290、300(图中只标出起始地址280)输入分支预测器110,并行进行C级流水线运算。由于同步信号Sync拉起,该取指目标队列FTQ由异步模式切换回同步模式,即指令快取104切换回自该取指目标队列FTQ取得取指地址AddrL1i。根据读取指针RdPtr,该取指目标队列FTQ弹出地址230为取指地址AddrL1i,输入该指令快取104做C级流水线运算。因为已经切换回同步模式,指针WrPtr以及RdPtr的比较无需再做。
图5C中,该取指目标队列FTQ到周期T7才为指令快取104备妥地址作为该取指地址AddrL1i。但是,这个状况完全不延误该指令快取104运作。刷新地址10、以及其跳转目标地址200、和其后地址210、220都还是由其他管道快速供应至该指令快取104作为该取指地址AddrL1i。指令快取104虽然还是耗费资源在无意义地址20、30、40的取指上,仍然算是高效能设计。
无论是刷新事件,或是预测出的分支跳转事件(即预测出跳转目标地址),解耦该指令快取104以及该分支预测器110的该取指目标队列FTQ都展现相当功效。
以下段落特别说明比较信号AddrEqual的应用。比较信号AddrEqual高位,代表取指目标队列FTQ的读取指针Rdptr等于写入指针WrPtr0…WrPtr3其中之一。比较信号AddrEqual判断条件为:
AddrEqual=
((WrPtr0==Rdptr)&WrEn0)|(Wrptr1==Rdptr)&WrEn1)|(Wrptr2==Rdptr)&WrEn2)|(Wrptr3==Rdptr)&WrEn3)WrEn0…WrEn3显示是否对应WrPtr0…WrPtr3致能写入取指目标队列FTQ储存格。响应比较信号AddrEqual拉高,同步信号Sync在下一周期切换为高位,指令快取104同步取指目标队列FTQ操作。
另一种实施方式是以地址比较得出比较信号AddrEqual。对应写入指针WrPtr0…WrPtr3写入取指目标队列FTQ的地址为wrdata0…wrdata3,对应读取指针Rdptr自取指目标队列FTQ读出的地址为rddata。比较信号AddrEqual判断条件为:
AddrEqual=
((wrdata0==rddata)&WrEn0)|(wrdata1==rddata)&WrEn1)|(wrdata2==rddata)&WrEn2)|(wrdata3==rddata)&WrEn3)
以下特别讨论取指目标队列FTQ的读取指针Rdptr、以及写入指针Wrptr(用于设定WrPtr0…WrPtr3)。写入指针Wrptr可根据每周期推入取指目标队列FTQ的地址个数更新。例如,第一周期若有两个地址推入取指目标队列FTQ,第二周期的写入指针Wrptr+2。推入取指目标队列FTQ的地址个数是由分支预测器110决定。所示实施方式中,每周期推入取指目标队列FTQ的地址个数可能为0~4个,由写入指针WrPtr0…WrPtr3对应的写入致能信号WrEn0…WrEn3控制。以图4A~4C实施例说明之,写入条件成立者,其写入指标WrPtr#(#为编号)相应的写入致能信号WrEn#拉高,写入指标WrPtr#指示的储存格填入地址AddrBP。
图6根据本申请一种实施方式图解生成写入指针Wrptr的逻辑电路,其中包括串接的四个多工器,分别由写入致能信号WrEn0…WrEn3控制。所示电路根据目前周期推入取指目标队列FTQ的地址个数(与写入致能信号WrEn0…WrEn3相关),决定下一周期的写入指针位置(维持Wrptr、或自增1为Wrptr+1、或自增2为Wrptr+2、或自增3为Wrptr+3、或自增4为Wrptr+4)。更新的写入指针暂存于缓存器R,于下一周期作为写入指针Wrptr。图6电路可设计在取指目标队列FTQ的控制电路中,例如,用于设定图2的写入指标WrPtr。写入致能信号WrEn0…WrEn3可由分支预测器110设定。
图6四个多工器也可扩展为其他数量,如N,N为大于1的正整数。分支预测器100于每一周期并行对N个指令地址进行分支预测,且将上述N个指令地址中、完成分支预测、且在预测的分支方向上的指令地址不重叠前一周期地推入该取指目标队列FTQ。串接的N个多工器分别由N个写入致能信号控制WrEn0…WrEn(N-1),在没有写入致能信号致能时,输出该取指目标队列FTQ的一写入指标Wrptr于一当下周期的一原值(同样标号Wrptr),并在上述N个写入致能信号中的头m个写入致能信号WrEn0…WrEn(m-1)致能时,输出该原值+m(即Wrptr+m),m为大于0的整数。缓存器R缓存该等串接的N个多工器的一输出信号,使该输出信号于一接续周期输出,以更新该取指目标队列FTQ的该写入指标Wrptr。该等N个写入致能信号WrEn0…WrEn(N-1)由该分支预测器110设定,是该当下周期推入该取指目标队列FTQ的指令地址数量。
以下讨论指令快取104取指失败的详细响应方式。
除了前述未找到指令(cache miss)的状况,指令快取104还有多种取指失败的因素。一种状况下,存取指令快取104时,须将虚拟地址转换为快取物理地址,此地址映射一般储存在一映射关系缓存器tlb(translation lookaside buffer),若映射关系缓存器tlb未备妥此映射关系(tlb miss),指令快取104可能会的取指失败。还有一种状况,指令快取104取出的指令102需缓存待解码,但解码器106的缓存器(如xib queue)满载(xib full),取出的指令102只能放弃,这也算是指令快取104取指失败。指令快取104通常是在流水线U级判断出取指失败。相应的,本申请利用取指目标队列FTQ提出取指地址AddrL1i备份技术。本申请相应指令快取104的取指失败,修正取指目标队列FTQ的读取指针Rdptr,使取指目标队列FTQ重新弹出错失地址,输入指令快取104再次进行流水线C级运算。由于备份的取指地址是由取指目标队列FTQ提供,无需另外规划空间进行取指地址AddrL1i备份,也可以避免复杂的信号传递以及逻辑电路(如,高达48位宽度的比较器、多工器)。
一种实施方式中,取指目标队列FTQ弹出取指地址AddrL1i给指令快取104作C级流水线运算时的读取指标Rdptr将被记录为备份指标。此备份指标将一路保留到指令快取104完成该取指地址AddrL1i的U级流水线运算。若指令快取104在U级流水线运算判断出该取指地址AddrL1i的取指失败,目标队列FTQ的读取指标Rdptr复原成先前记录的备份指标。取指目标队列FTQ根据复原的读取指标Rdptr重新弹出取指地址AddrL1i给指令快取104作C级流水线运算。
图7为读取指标Rdptr的一种逻辑生成电路。一缓存器702用于储存备份指标Backup_Rdptr。随着指令快取104以读取致能信号RdEn要求取指目标队列FTQ弹出取指地址AddrL1i,读取指标Rdptr需为下一周期更新;递增的读取指标Rdptr通过多工器704。多工器706还提供读取指标修复选项。指令快取104的U级U级流水线运算若判断出取指失败,指令快取104切换备份指标选择信号SelBackup,使缓存器702储存的备份指标Backup_Rdptr通过多工器706,存入缓存器R,作为下一周期的读取指标Rdptr。图7电路可设计在取指目标队列FTQ的控制电路中,例如,用于设定图2的读取指标RdPtr。读取致能信号RdEn可由指令快取104控制。
图8A讨论同步模式下发生的取指失败。相较图5A,周期T6,指令快取104在U级判断出取指地址40所指该取指单位取指失败,错失信号miss拉升。此时指令快取104早与取指目标队列FTQ为同步状态(Sync为高位)。取指目标队列FTQ的读取指标需在周期T7复原为取指地址40的一备份指标。该备份指标乃周期T3对应指令快取104的C级流水线所接收的取指地址40而记录下的读取指标Rdptr,是指向取指目标队列FTQ的第4个储存格。如图所示,周期T7确实将读取指标Rdptr修复指向取指目标队列FTQ的第4个储存格。周期T7,取指地址40根据读取指标Rdptr重新自取指目标队列FTQ读出,供应给指令快取104作C级流水线运算。指令快取104延续与取指目标队列FTQ的同步状态(Sync为高位)。
图8B讨论非同步模式下发生的取指失败。相较图5A,周期T3,指令快取104在U级判断出取指地址10所指该取指单位取指失败,错失信号miss拉升。此时指令快取104与取指目标队列FTQ为非同步状态(Sync为低位)。取指目标队列FTQ的读取指标需在周期T4复原为取指地址10的一备份指标。该备份指标乃周期T0对应指令快取104的C级流水线所接收的取指地址10而记录下的读取指标Rdptr,是指向取指目标队列FTQ的第一个储存格。如图所示,周期T4确实将读取指标Rdptr修复指向取指目标队列FTQ的第一个储存格。周期T4,指令快取104切换成与取指目标队列FTQ同步(Sync拉高),取指地址10根据读取指标Rdptr重新自取指目标队列FTQ读出,供应给指令快取104作C级流水线运算。周期T5显示指令快取104尚未准备妥当,读取指标Rdptr维持指向取指目标队列FTQ第一个储存格,取指目标队列FTQ还是提供取指地址10给指令快取104作C级流水线运算。另一状态下,流水线运算可能是在周期T5才将指令快取104切换成与取指目标队列FTQ同步(Sync拉高)。
如前述,取指目标队列FTQ内容有备份处理指令快取104失败的需求。因此,取指目标队列FTQ内容不能供应给指令快取104就消除,而是确认相关取指成功才消除。本申请为取指目标队列FTQ各储存格分别还维护两个有效标志:C级有效标志;以及U级有效标志。
随着取指地址填入一目标储存格,该目标储存格的C级有效标志、以及U级有效标志皆拉起。该目标储存格的取指地址若被指令快取104作C级流水线运算(无论是同步或非同步模式),该目标储存格的C级有效标志放下。该目标储存格的取指地址若经指令快取104成功完成U级流水线运算,该目标储存格的U级有效标志放下。
取指目标队列FTQ的所有储存格的C级有效标志若皆为放下,表示取指目标队列FTQ没有可以供应指令快取104作C级流水线运算的取指地址AddrL1i。此时,取指目标队列FTQ停止提供指令快取104取指地址AddrL1i,避免无效的地址被用作指令快取104取指地址AddrL1i。
取指目标队列FTQ的所有储存格的U级有效标志若皆为拉起,表示取指目标队列FTQ满载,没有空间缓存分支预测器110的输出。此时,分支预测器110禁止填写取指目标队列FTQ,避免覆盖处理取指失败的复原地址。
另外,若发生取指失败事件,指目标队列FTQ的所有储存格的C级有效标志要复原为较早样态,例如,修正同对应储存格的U级有效标志。
图9A以及图9B图解C级有效标志、以及U级有效标志的设计。相较图5A,图9A还有周期T8、T9,发生取指目标队列FTQ满载。图9B相应周期T0~T9图解取指目标队列FTQ两列缓存器的变化,一列缓存器为各储存格纪录C级有效标志,一列缓存器为各储存格纪录U级有效标志。C级/U级有效标志是反应取指目标队列FTQ前一周期的状况,用于当下周期的取指目标队列FTQ控制。
周期T3,存入取指目标队列FTQ第一~第三储存格的地址10、20、30当周期(T3)就被指令快取104的C级取指地址40超越(读取指标超越队列内容)。甚至,地址10在周期T3就经指令快取104的U级完成取指。相应的,周期T4,第一~第三个储存格的C级有效标志维持放下,而仅第二、第三储存格的U级有效标志拉起。根据U级有效标志,周期T4的写入指标指向空的第四储存格(如图9A T4图序),第五储存格也确定为空。周期T4,分支预测器110非重复预测出的地址40、50顺利填入取指目标队列FTQ的第四、第五储存格。
周期T4,存入取指目标队列FTQ第四、第五储存格的地址40、50当周期(T4)就被指令快取104的C级取指地址50追平(读取指标追平队列内容)。第二储存格的地址20在周期T4就经指令快取104的U级完成取指。相应的,周期T5,第四、第五储存格的C级有效标志维持放下,但其U级有效标志拉起。特别是,第二储存格的U级有效标志于周期T5放下。根据U级有效标志,周期T5的写入指标指向空的第六储存格(如图9A T5图序),第七储存格也确定为空。周期T5,分支预测器110非重复预测出的地址60、70顺利填入取指目标队列FTQ的第六、第七储存格。
周期T5,存入取指目标队列FTQ第六、第七储存格的地址60、70仅有地址60被指令快取104的C级取指地址60追平。第三储存格的地址30在周期T5经指令快取104的U级完成取指。相应的,周期T6,第六储存格的C级有效标志维持放下,第七储存格的C级有效标志拉起,第六、第七储存格的U级有效标志拉起,且第三储存格的U级有效标志放下。根据U级有效标志,周期T6的写入指标指向空的第八储存格(如图9A T6图序),第一储存格也确定为空。周期T6,分支预测器110非重复预测出的地址80、90顺利填入取指目标队列FTQ的第八、第一储存格。
周期T6,第七储存格的地址70送入指令快取104的C级,而存入取指目标队列FTQ第八、第一储存格的地址80、90都还在等待送入指令快取104的C级。第四储存格的地址40在周期T6经指令快取104的U级完成取指。相应的,周期T7,第七储存格的C级有效标志放下,第八、第一储存格的C级有效标志拉起,第八、第一储存格的U级有效标志拉起,且第四储存格的U级有效标志放下。根据U级有效标志,周期T7的写入指标指向空的第二储存格(如图9AT7图序),第三储存格也确定为空。周期T7,分支预测器110非重复预测出的地址A0、B0顺利填入取指目标队列FTQ的第二、第三储存格。
周期T7,第八储存格的地址80送入指令快取104的C级,而存入取指目标队列FTQ第二、第三储存格的地址A0、B0都还在等待送入指令快取104的C级。第五储存格的地址50在周期T7经指令快取104的U级完成取指。相应的,周期T8,第八储存格的C级有效标志放下,第二、第三储存格的C级有效标志拉起,第二、第三储存格的U级有效标志拉起,且第五储存格的U级有效标志放下。根据U级有效标志,周期T8的写入指标指向空的第四储存格(如图9AT8图序),第五储存格也确定为空。周期T8,分支预测器110非重复预测出的地址C0、D0顺利填入取指目标队列FTQ的第四、第五储存格。
周期T8,第一储存格的地址90送入指令快取104的C级,而存入取指目标队列FTQ第四、第五储存格的地址C0、D0都还在等待送入指令快取104的C级。第六储存格的地址60在周期T8经指令快取104的U级完成取指。相应的,周期T9,第一储存格的C级有效标志放下,第四、第五储存格的C级有效标志拉起,第四、第五储存格的U级有效标志拉起,且第六储存格的U级有效标志放下。根据U级有效标志,周期T9的写入指标指向空的第六储存格(如图9AT9图序),但第七储存格非闲置。周期T9,分支预测器110非重复预测出的地址D0、E0仅D0可填入取指目标队列FTQ。如此一来,有备用需求的地址不会提早被复写。
整理之,本申请令取指目标队列FTQ的读取指标Rdptr常态(没有预测到跳转、或发生取指失败)逐周期自增,并对应指令快取104的C级记录为备份指标Backup_Rdptr。指令快取104的U级运算失败时,读取指标Rdptr复原为备份指标Backup_Rdptr,重复动作的指令快取104是由取指目标队列FTQ提供取指地址AddrL1i。电路设计单纯且节约。前述C级有效标志、以及U级有效标志则妥善备份地址过早复写的问题。
以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本申请的权利要求书所界定的范围为准。
Claims (16)
1.一种微处理器,其特征在于,包括:
指令快取,依据取指地址进行取指;
分支预测器;以及
耦接在该分支预测器以及该指令快取之间的取指目标队列,储存经该分支预测器完成分支预测、且在预测的分支方向上的指令地址,待读出作为该指令快取的该取指地址,
其中,响应目标取指地址的取指失败,该指令快取自该取指目标队列重新读出该目标取指地址,作为该取指地址。
2.根据权利要求1所述的微处理器,其中,
响应该目标取指地址的取指失败,该取指目标队列的读取指标修复指向备份指标;
在该取指目标队列中,该备份指标指向储存该目标取指地址的目标储存格。
3.根据权利要求2所述的微处理器,其中,在该目标取指地址自该取指目标队列读出作为该指令快取的该取指地址时,记录该取指目标队列的该读取指标为该备份指标。
4.根据权利要求3所述的微处理器,其中,该取指目标队列的该读取指标常态是逐周期朝下一个储存格递增的。
5.根据权利要求4所述的微处理器,其中,响应该分支预测器预测到跳转事件,该取指目标队列的该读取指标修正为对齐该取指目标队列的写入指标,指向空白储存格。
6.根据权利要求1所述的微处理器,还包括:
第一多工器,接收该取指目标队列的读取指标在当下周期的原值、并接收该原值加1,以根据该指令快取控制的读取致能信号择一输出;
第二多工器,接收该第一多工器的输出信号、并接收备份指标,以根据备份指标选择信号择一输出,该备份指标选择信号响应该目标取指地址的取指失败;以及
缓存器,缓存该第二多工器的输出信号,使该输出信号于接续周期输出,以更新该取指目标队列的该读取指标,
其中,在该取指目标队列中,该备份指标指向储存该目标取指地址的目标储存格。
7.根据权利要求6所述的微处理器,在该目标取指地址自该取指目标队列读出作为该指令快取的该取指地址时,记录该取指目标队列的该读取指标为该备份指标。
8.根据权利要求1所述的微处理器,其中该取指目标队列还包括:
第一列缓存器,对应该取指目标队列的储存格,为各储存格缓存U级有效标志,在对应的储存格填入指令地址时立起,直至所填入的指令地址由该指令快取成功完成流水线U级运算才放下。
9.根据权利要求8所述的微处理器,其中,U级有效标志立起的储存格不允许该分支预测器进行复写。
10.根据权利要求9所述的微处理器,其中,响应该取指目标队列在第一周期的状况,U级有效标志是在接续该第一周期的第二周期调整,继而决定该取指目标队列各储存格在该第二周期允许复写与否。
11.根据权利要求9所述的微处理器,其中该取指目标队列还包括:
第二列缓存器,对应该取指目标队列的多个储存格,为各储存格缓存C级有效标志,在对应的储存格填入指令地址时立起,直至所填入的指令地址已由该指令快取进行流水线C级运算才放下。
12.根据权利要求1所述的微处理器,其中,该目标取指地址的取指失败源于该指令快取的映射关系缓存器落空。
13.根据权利要求1所述的微处理器,其中,该目标取指地址的取指失败源于该指令快取未备妥指令。
14.根据权利要求1所述的微处理器,其中,该目标取指地址的取指失败源于该指令快取输出端所连结的缓存器满载,该缓存器用于缓存待解码指令。
15.根据权利要求1所述的微处理器,其中,该分支预测器于每一周期并行对N个指令地址进行分支预测,且将上述N个指令地址中、完成分支预测、且在预测的分支方向上的指令地址不重叠前一周期地推入该取指目标队列;且N为大于1的正整数。
16.根据权利要求15所述的微处理器,还包括:
串接的N个多工器,分别由N个写入致能信号控制,在没有写入致能信号致能时,输出该取指目标队列的写入指标于当下周期的原值,并在上述N个写入致能信号中的头m个写入致能信号致能时,输出该原值+m,m为大于0的整数;以及
缓存器,缓存该串接的N个多工器的输出信号,使该输出信号于接续周期输出,以更新该取指目标队列的该写入指标,
其中,该N个写入致能信号由该分支预测器设定并且是该当下周期推入该取指目标队列的指令地址数量。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011011051.6A CN112130897A (zh) | 2020-09-23 | 2020-09-23 | 微处理器 |
US17/069,191 US11366667B2 (en) | 2020-04-14 | 2020-10-13 | Microprocessor with instruction fetching failure solution |
US17/069,217 US11403103B2 (en) | 2020-04-14 | 2020-10-13 | Microprocessor with multi-step ahead branch predictor and having a fetch-target queue between the branch predictor and instruction cache |
US17/069,204 US11249764B2 (en) | 2020-04-14 | 2020-10-13 | Flushing in a microprocessor with multi-step ahead branch predictor and a fetch target queue |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011011051.6A CN112130897A (zh) | 2020-09-23 | 2020-09-23 | 微处理器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112130897A true CN112130897A (zh) | 2020-12-25 |
Family
ID=73839283
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011011051.6A Pending CN112130897A (zh) | 2020-04-14 | 2020-09-23 | 微处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112130897A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115525344A (zh) * | 2022-10-31 | 2022-12-27 | 海光信息技术股份有限公司 | 一种译码方法、处理器、芯片及电子设备 |
-
2020
- 2020-09-23 CN CN202011011051.6A patent/CN112130897A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115525344A (zh) * | 2022-10-31 | 2022-12-27 | 海光信息技术股份有限公司 | 一种译码方法、处理器、芯片及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11249764B2 (en) | Flushing in a microprocessor with multi-step ahead branch predictor and a fetch target queue | |
US5142635A (en) | Method and circuitry for performing multiple stack operations in succession in a pipelined digital computer | |
US6898699B2 (en) | Return address stack including speculative return address buffer with back pointers | |
US5553254A (en) | Instruction cache access and prefetch process controlled by a predicted instruction-path mechanism | |
US5197132A (en) | Register mapping system having a log containing sequential listing of registers that were changed in preceding cycles for precise post-branch recovery | |
JP3871883B2 (ja) | 間接分岐ターゲットを計算するための方法 | |
JP3542021B2 (ja) | セット予測によりセット連想キャッシュの遅延を少なくする方法及び装置 | |
US5933860A (en) | Multiprobe instruction cache with instruction-based probe hint generation and training whereby the cache bank or way to be accessed next is predicted | |
US5423011A (en) | Apparatus for initializing branch prediction information | |
CN104731719B (zh) | 一种缓存系统和方法 | |
JP3760041B2 (ja) | 分岐予測する情報処理装置 | |
US7234045B2 (en) | Apparatus and method for handling BTAC branches that wrap across instruction cache lines | |
US6848044B2 (en) | Circuits and methods for recovering link stack data upon branch instruction mis-speculation | |
JP2006228241A (ja) | プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法 | |
US20060218351A1 (en) | Look ahead LRU array update scheme to minimize clobber in sequentially accessed memory | |
US7689816B2 (en) | Branch prediction with partially folded global history vector for reduced XOR operation time | |
CN111459550B (zh) | 具高度领先分支预测器的微处理器 | |
JP2001184211A (ja) | 処理システムにおいてスタックのポップおよびプッシュ動作を行なうための装置および方法 | |
JP2596712B2 (ja) | 近接した分岐命令を含む命令の実行を管理するシステム及び方法 | |
US5649178A (en) | Apparatus and method for storing and initializing branch prediction with selective information transfer | |
CN112130897A (zh) | 微处理器 | |
US9507600B2 (en) | Processor loop buffer | |
CN111459551B (zh) | 具高度领先分支预测器的微处理器 | |
TW202219744A (zh) | 微處理器和分支預測控制方法 | |
US11537402B1 (en) | Execution elision of intermediate instruction by processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Shanghai 201203 Applicant after: Shanghai Zhaoxin Semiconductor Co.,Ltd. Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Shanghai 201203 Applicant before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd. |
|
CB02 | Change of applicant information |