CN103513958B - 高性能指令缓存系统和方法 - Google Patents
高性能指令缓存系统和方法 Download PDFInfo
- Publication number
- CN103513958B CN103513958B CN201210228129.9A CN201210228129A CN103513958B CN 103513958 B CN103513958 B CN 103513958B CN 201210228129 A CN201210228129 A CN 201210228129A CN 103513958 B CN103513958 B CN 103513958B
- Authority
- CN
- China
- Prior art keywords
- instruction
- address
- block
- branch
- track
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种高性能指令缓存系统和方法,应用于处理器领域时能在处理器核执行指令前,将所述指令填充到所述处理器核能直接访问的高速存储器中,几乎使所述处理器核每次都能在所述高速存储器中获取到需要的指令,达到极高的缓存命中率。
Description
技术领域
本发明涉及计算机,通讯及集成电路领域。
背景技术
通常缓存的作用是将更低级存储器中的部分内容复制在其中,使这些内容能被更高级存储器或处理器核快速存取,以保证流水线的持续运行。
现行缓存的寻址都基于以下方式,用地址中的索引段寻址读出标签存储器中的标签与地址中的标签段进行匹配;用地址中索引段与块内位移段共同寻址读出缓存中的内容。如果从标签存储器中读出的标签与地址中的标签段相同,那么从缓存中读出的内容有效,称为缓存命中。否则,如果从标签存储器中读出的标签与地址中的标签段不相同,称为缓存缺失,从缓存中读出的内容无效。对于多路组相联的缓存,同时对各个路组并行进行上述操作,以检测哪个路组缓存命中。命中路组对应的读出内容为有效内容。若所有路组都为缺失,则所有读出内容都无效。缓存缺失之后,缓存控制逻辑将低级存储媒介中的内容填充到缓存中。
缓存缺失可分为三类状况:强制缺失、冲突缺失和容量缺失。在现有缓存结构中,除了预取成功的小部分内容外,强制缺失是不可避免的。但是,现有的预取操作会带来不小的代价。此外,虽然多路组相联缓存可以降低冲突缺失,但受制于功耗及速度限制(如因为多路组相联缓存结构要求将所有路组由同一索引寻址的内容及标签同时读出并比较),路组数难以超过一定数目。
现代的缓存系统通常由多路组相连的多层次缓存构成。新的缓存结构,如:牺牲缓存、跟踪缓存以及预取等都是基于上述基本缓存结构并改善上述结构。然而,随着日渐扩大的处理器/存储器速度鸿沟,现行体系结构,特别是多种缓存缺失,已成为是制约现代处理器性能提升的最严重瓶颈。
本发明提出的方法与系统装置能直接解决上述或其他的一个或多个困难。
发明内容
本发明提出一种用于辅助处理器核运行的方法,所述处理器核连接一个包含可执行指令的第一存储器、一个比第一存储器速度更快的第二存储器和一个比第二存储器速度更快的第三存储器。所述方法包括:对正被从第二存储器填充到第三存储器的指令进行审查,从而提取出至少包括分支信息的指令信息;根据提取出的指令信息建立复数条轨道;根据复数条指令轨道中的一条或多条轨道将至少一条或多条指令可能被处理器核执行的指令从第一存储器填充到第二存储器;根据复数条指令轨道中的一条或多条轨道将至少一条或多条指令在被处理器核执行前从第二存储器填充到第三存储器,使得处理器核能从第三存储器获取所述至少一条或多条指令。
对于本领域专业人士,还可以在本发明的说明、权利要求和附图的启发下,理解、领会本发明所包含其他方面内容。
有益效果
本发明所述系统和方法可以为数字系统使用的缓存结构提供基本的解决方案。与传统缓存系统仅在缓存缺失后才填充的机制不同,本发明所述的系统和方法在处理器执行一条指令之前就对指令缓存进行填充,可以避免或充分地隐藏强制缺失。本发明所述系统和方法在本质上提供了一个全相联的缓存结构,避免了或充分隐藏了冲突缺失和容量缺失。此外,本发明所述的系统和方法避免了在读取缓存的时延关键路径上的标签匹配,所以能运行在较高的时钟频率;由于本发明所述的系统和方法需要的匹配操作次数较少,并且缺失率较低,因此功耗也比传统缓存系统显著降低。对于本领域专业人士而言,本发明的其他优点和应用是显见的。
附图说明
图1是本发明所述的指令预取的处理器环境。
图2A是本发明所述主动表的实施例。
图2B是本发明所述主动表的另一个实施例。
图3A是本发明所述指令存储器的实施例。
图3B是本发明所述指令行、指令块及相应存储单元之间关系的实施例。
图4A是本发明所述扫描器的一个实施例。
图4B是本发明所述扫描器的另一个实施例。
图4C是本发明所述扫描器对产生的地址进行筛选的一个实施例。
图4D是本发明所述扫描器中目标地址判断的实施例。
图4E是本发明所述判断逻辑的一个改进实施例。
图5A是本发明所述轨迹点格式的实施例。
图5B是根据本发明技术方案使用轨道表建立新轨道的方法的一个实施例。
图5C是本发明所述轨道表的一个实施例。
图5D是确定基地址寄存器值更新指令位置的实施例。
图5E是本发明所述通过寄存器额外的读端口获得基地址寄存器值的实施例。
图5F是本发明所述采用时分复用的方式获得基地址寄存器值的实施例。
图5G是本发明所述通过旁路路径获得基地址寄存器值的实施例。
图5H是本发明所述通过专供数据预取使用的额外寄存器堆获得基地址寄存器值的实施例。
图5I是本发明所述包含微型主动表的轨道表实施例。
图6A是本发明所述循迹器读指针移动的实施例。
图6B是本发明所述确定计算间接分支目标地址的时间点的一个实施例。
图7A是本发明所述相关表的一个实施例。
图7B是本发明所述相关表的一个实施例。
图8A是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的一个实施例。
图8B是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的一个改进实施例。
图8C是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的又一个改进实施例。
图9A是本发明所述同时为处理器核提供下一指令及分支目标指令的一个实施例。
图9B是本发明所述同时为处理器核提供下一指令及分支目标指令的另一个实施例。
图10是本发明所述包含用于存储特定程序的存储单元的指令存储器的实施例。
图11A是本发明所述用于选择指令块的匹配器的实施例。
图11B是本发明所述用于选择指令块的匹配器的另一个实施例。
图12A是根据本发明所述技术方案进行指令预取的实施例。
图12B是根据本发明技术方案对指令块操作的一个实施例。
具体实施方式
以下结合附图和具体实施例对本发明提出的高性能缓存系统和方法作进一步详细说明。根据下面说明和权利要求书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
需说明的是,为了清楚地说明本发明的内容,本发明特举多个实施例以进一步阐释本发明的不同实现方式,其中,该多个实施例是列举式并非穷举式。此外,为了说明的简洁,前实施例中已提及的内容往往在后实施例中予以省略,因此,后实施例中未提及的内容可相应参考前实施例。
虽然该发明可以以多种形式的修改和替换来扩展,说明书中也列出了一些具体的实施图例并进行详细阐述。应当理解的是,发明者的出发点不是将该发明限于所阐述的特定实施例,正相反,发明者的出发点在于保护所有基于由本权利声明定义的精神或范围内进行的改进、等效转换和修改。同样的元器件号码可能被用于所有附图以代表相同的或类似的部分。
此外,在本说明书中以包含处理器核的缓存系统为例进行说明,但本发明技术方案也可以被应用于包含任何合适的处理器(Processor)的缓存系统。例如,所述处理器可以是通用处理器(General Processor)中央处理器(CPU)、微控制器(MCU)、数字信号处理器(DSP)、图象处理器(GPU)、片上系统(SOC)、专用集成电路(ASIC)等。
图1是本发明所述的指令预取的处理器环境100。如图1所示,处理器环境100包含一个填充器102、一个主动表(Active list)104、一个扫描器108、一个轨道表(Tracktable)110、一个循迹器(Tracker)114、一个指令存储器(Instruction Memory)106、一个指令读缓冲(Instruction Read Buffer)112和一个处理器核116(CPU Core)。应当理解的是,这里列出各种部件的目的是为了便于描述,还可以包含其他部件,而某些部件可以被省略。这里的各种部件可以分布在多个系统中,可以是物理上存在的或是虚拟的,可以是硬件实现(如:集成电路)、软件实现或由硬件和软件组合实现。
指令存储器106和指令读缓冲112可以包含任何合适的存储设备,如:寄存器(register)或寄存器堆(register file)、静态存储器(SRAM)、动态存储器(DRAM)、闪存存储器(flash memory)、硬盘、固态磁盘(Solid State Disk)以及任何一种合适的存储器件或未来的新形态存储器。指令存储器106可以作为系统的一个缓存工作,或当有其他缓存存在时作为一级缓存工作;且可以被分割成复数个被称为存储块(Memory Block)的存储片段的用于存储处理器核116要访问的数据,如在指令块(Instruction Block)中的指令。
当处理器核116执行一条指令时,处理器核116首先需要从更低层次的存储器中读入指令。在这里,存储器的层次指的是存储器与处理器核116之间的接近程度。越接近处理器核116的层次越高。此外,一个高层次的存储器通常比低层次的存储器速度快但容量小。
填充器102根据主动表104提供的地址从更低层次的存储器获取指令或指令块并填充到指令存储器106中,以备处理器核116读取。在这里,术语“填充(Fill)”表示将指令从较低层次的存储器移动到较高层次的存储器中,术语“存储器访问”(Memory Access)表示处理器核116从存储器(指令存储器106或指令缓冲)中读取指令。
本发明所述的指令地址(Instruction Address)指的是指令在主存储器中的存储地址,即可以根据该地址在主存储器中找到这条指令;而数据地址(Data Address)指的是数据在主存储器中的存储地址,即可以根据该地址在主存储器中找到这个数据。在此为简单明了起见,均假设虚拟地址等于物理地址,对于需要进行地址映射的情况,本发明所述方法也可适用。主动表104中的表项与指令存储器106中的存储行(Memory Line)一一对应。主动表104中的每个表项存储了一个指令行地址(Instruction Line Address)与一个行号(Line Number,LN)的匹配对,指明了该指令行地址对应的指令行存储在指令存储器106中的哪个存储行中。本发明所述的行号指的就是存储行在指令存储器106中的位置。可以通过将扫描器108审查、计算得到的分支目标指令地址与主动表104中存储的指令行地址匹配确定该分支目标指令是否已经存储在指令存储器106中。如果分支目标信息所在的指令行尚未被填充到指令存储器106中,那么在将该指令行填充到指令存储器106中的同时,在主动表104中建立相应的指令行地址与行号码的匹配对。本发明所述的匹配(Match),指的是对两个值进行比较,当两者相同或相等时为‘匹配成功(Match)’,否则为‘匹配不成功(NotMatch)’。
在本发明中,分支指令(Branch Instrutrion)或分支点(Branch Point)指的是任何适当的能导致处理器核116改变执行流(Execution Flow)(如:非按顺序执行一条指令)的指令形式。分支指令或分支源(Branch Source)指一条进行分支操作的指令,分支源地址(Branch Souce Address)可以是分支指令本身的指令地址;分支目标(Branch Target)指的是分支指令造成的分支转移所转向的目标指令,分支目标地址(Branch TargetAddress)可以指当分支指令的分支转移成功发生时转移进入的地址,也就是分支目标指令的指令地址;当前指令可以指当前正在被处理器核执行或获取的指令;当前指令块可以指含有当前正被处理器执行的指令的指令块。
扫描器108可以对从指令存储器106填充到指令读缓冲112的每一条指令进行审查,并提取出某些信息,如:指令类型、指令源地址和分支指令的分支增量(BranchOffset),并基于这些信息计算出分支目标地址。例如,指令类型可以包括条件分支指令、无条件分支指令和其他指令等。指令类别还可以包括条件分支指令的子类别,如相等时分支转移、大于时分支转移等。在某些情况下,可以认为无条件分支指令是条件分支指令的一种特例,即条件总是成立。此外,还可以包括其他信息。扫描器108也将上述信息及地址送到其他模块,如主动表104和轨道表110。
指令读缓冲112中存储了至少一个包含当前指令在内的一段连续指令的指令块(Instruction Block)。每一个指令块有一个块号BNX(Block Number)。指令块与指令存储器116的指令行可以含有相同数目或不同数目条指令。如果指令块含有与存储器指令行同样数目的指令,即一个指令块等于一个指令行,则块号与行号相同。如果一个存储器指令行含有复数个指令块,则块号BNX是在行号LN比最低位(Lsb)再低一位的位置处(lesssignificant)加上至少一个地址位;此地址位指出该指令块在一个指令行中的位置,也即同一行中的块地址。例如一个行号LN为‘111’的指令行含有两个指令块,其中占据低位地址的指令块的块号BNX为‘1110’;占据高位地址的指令块的块号BNX为‘1111’。若指令读缓冲112中存储了多个指令块,则指令读缓冲112中除了存储了当前指令块之外,还可存储当前指令块按顺序地址的下一指令块。
轨道表110含有复数个轨迹点(Track Point)。一个轨迹点是轨道表中的一个表项,可含有至少一条指令的信息,比如指令类别信息、分支目标地址等。在本发明中轨迹点本身的轨迹表地址与该轨迹点所代表指令的指令地址相关(Correspond);而分支指令轨迹点中含有分支目标的轨迹表地址,且该轨迹表地址与分支目标指令地址相关。与指令缓冲中112一系列连续指令所构成的一个指令块相对应的复数个连续的轨迹点称为一条轨道。该指令块与相应的轨道由同一个块号指示。轨道表含有至少一条轨道。一条轨道中的总的轨迹点数可以等于轨道表110中一行中的表项总数。轨道表110也可以有其它的组织形式。
可以用第一地址(BNX)和第二地址(BNY)来表示轨迹点(指令)在轨道表中的位置信息;其中第一地址表示该轨迹点对应指令的块号(指向轨道表中一条轨道及指令缓冲器中相应的一个指令块),第二地址表示该轨迹点(及对应指令)在该轨道(存储块)中的相对位置(偏移量,Adress Offset)。一套第一地址及第二地址对应轨道表中的一个轨迹点,即可以根据一套第一地址及第二地址从轨道表中找到对应的轨迹点。如果该轨迹点的类型代表一条分支指令,可以根据内容中含的第一地址(目标块号)确定分支目标的轨道,并根据第二地址(偏移量)确定目标轨道中的一个特定的轨迹点(表项)。这样,轨道表就成为一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表。
相应地,扫描器108将提取出存储到指令读缓冲112中指令的指令信息,并将这些信息存储到轨道表110由这些指令对应的第一地址指出的轨道中由第二地址指出的表项。如果该指令是分支指令时则计算其中分支指令的分支目标指令地址送到主动表104匹配以得到分支目标指令所在存储行的行号(LN)。如果分支目标地址未与存在主动表104中的任何地址匹配,则该分支目标地址被送到填充器102从低层存储器读出指令行。同时主动表中的存储行替换逻辑分配一个存储行号(LN)给该指令行;该指令地址高位被存进主动表104中该行号指示的表项,填充器102取得的指令行被填充到该行号指示的存储行,并将该行号产生的第一地址及从指令地址抽取的第二地址写进轨道表。
轨道表110中的轨道和指令读缓冲112中的存储块一一对应,且都由同一指针指向。处理器核116将要执行的任何指令,都可以在执行前被填充到指令读缓冲112中。为了在一条轨道中建立与下一条轨道的联系,在每条轨道代表最后一条指令的轨迹点后再设一个结束轨迹点,其中存放顺序执行下一条轨道(指令块)的第一地址。如果指令读缓冲112中可以存储多个指令块,在当前指令块被执行时,把顺序执行下一个指令块也取到指令读缓冲中以备处理器核106读取执行。下一指令块的指令地址可以用当前指令块的指令地址加上一个指令块的地址长度来求得。该地址如前述被送到主动表104匹配,获得的指令块被填进指令缓冲112由指令缓冲112替换逻辑所指示的指令块;且该指令块及相应的轨道由匹配获得的BNX标示。同时该BNX被存进当前轨道的结束轨迹点。新存进指令读缓冲112的下一指令块中的指令也被扫描108扫描,提取信息填充由该BNX指出的轨道如前所述。
循迹器114的读指针指向轨道表110中当前指令所在轨道中位于当前指令之后的第一个分支指令轨迹点;或在该轨道上当前指令后没有分支轨迹点的情况下指向该轨道的结束轨迹点。循迹器114的读指针由第一地址指针和第二地址指针组成,其中第一地址指针的值为当前指令所在指令块的块号,第二指针指向该轨道上当前指令后的第一个分支指令轨迹点或结束轨迹点。由该读指针指示的轨迹点内容中的分支目标第一地址被用于对指令存储器106寻址,读出包含该分支目标指令在内的指令块,送到扫描器108进行审查。扫描器108对从指令存储器106送来的指令块进行审查,提取出相应指令信息、计算分支指令的分支目标地址并暂存。指令缓冲替换逻辑指定一个指令块及相应的轨道以备分支目标指令块填充。
若循迹器114指向的分支指令没有发生分支转移,则循迹器114的读指针指向该分支指令后的第一个分支指令轨迹点,或在该分支指令后的轨迹点中没有分支指令轨迹点的情况下指向该轨道的结束轨迹点。处理器核读取分支指令后的顺序指令执行。
若循迹器114指向的分支指令成功发生分支转移,则将上述从指令存储器106读出的分支目标指令块存储到指令读缓冲112中缓冲替换逻辑指定的指令块中,并在轨道表110的相应轨道中填入扫描器108已产生的新轨道信息。此时上述分支目标第一地址和第二地址成为新的循迹器地址指针,指向轨道表中的分支目标对应的轨迹点。该新循迹器地址指针也指向新填充的分支指令块,使其成为新的当前指令块。处理器核从新的当前指令块中用指令地址(PC)选出需要的指令。此后循迹器114移动读指针指向新的当前指令块对应轨道中该分支目标指令之后的第一个分支指令轨迹点,或在该分支目标指令后的轨迹点中没有分支指令轨迹点的情况下指向该轨道的结束轨迹点。
若循迹器114指向的是轨道中的结束轨迹点,循迹器114的读指针更新为该最后轨迹点中的位置内容值,即指向下一轨道的第一个轨迹点,从而指向新的当前指令块。之后循迹器114移动读指针指向新的当前指令块对应轨道中的第一个分支指令轨迹点,或在该轨道没有分支指令轨迹点的情况下指向该轨道的结束轨迹点。依次重复上述过程,即可在处理器核116执行指令前将该指令填充到指令读缓冲112中,使得处理器核116在对该指令进行取指时不需要等待,从而提高处理器性能。
图2A是本发明所述主动表的实施例。在本实施例中主动表的主体部分由数据地址寻址器202构成。
数据地址寻址器202中包含多个表项(entry)204。每个表项204包含一个存储器、标志位V位220、标志位A位222、标志位U位224和一个比较器。所有比较结果被送入编码器206产生匹配表项号,即块号。控制线214用于输入读写状态控制信号。所有V位220初始值均为零。所有A位222的值由外部激活(Active)信号通过A位信号输入线228写入。
写地址指针(Write Pointer)210指向的表项地址由循环自增装置(Wrap AroundIncrement)218产生,循环自增装置218的输出最大值为最大表项号,输出为此值时再自增一次则输出为零,循环自增继续。如果写地址指针210当前指向表项的V位和A位的值均为零,则表示该表项可以被新数据写入,待写入完成后,循环自增装置218的输出值增加一,写地址指针210指向下一个表项;如果这两个值中至少有一个为一,则表示该表项当前不能被新数据写入,此时写入循环自增装置218的输出值增加一,写地址指针210指向下一个表项,继续进行判断。
写入时,通过写入数据总线208输入的写入数据先与所有表项所存储的数据进行比较,如有匹配,则从匹配表项号输出线216输出匹配表项号,且不进行写入操作;如没有匹配,则写入数据被写入由写地址指针210指向的表项,同时该表项中V位值被置为‘0’,该表项的表项号通过匹配表项号输出线216输出,写地址指针210指向下一个表项;读出时,读地址线212指向的表项的内容通过读出数据总线230被读出,表项号通过匹配表项号输出线216输出,同时该表项中V位也被置为‘1’。
标志位U位224表示使用情况。当写地址指针210指向一个表项204时,该表项U位224被置零。当一个表项204被读取时,其U位224被置一。循环自增装置218产生的写地址指针210指向一个新的表项时,U位会先被读取,若此时U位为零,则该表项可被替换,写地址指针210停在该表项以备写入数据,若U位为一,则将写地址指针210指向下一个表项。一种置换方法是另增一窗口指针226负责将U位置零,所述窗口指针226所指表项比写地址指针210提前N个表项。通过写地址指针210的值模加N即可得到窗口指针226的值。这N个表项即成为一个窗口,该窗口指向写地址指针210与窗口指针226间的表项。在写地址指针210移动N个表项时间内所经过的未被读取之表项可被置换。改变N值即改变窗口大小,从而改变替换率。另外一个置换方法是U位为复数位。写地址指针210或窗口指针226将表项置零,每次读取给表项U位加一。每次写之前将U位读出与预设值做比较,若小于所述预设值,则该表项可被置换;若大于或等于所述预设值,则将写地址指针210移向下一个表项。
图2B是本发明所述主动表的另一个实施例250。根据本发明技术方案,可以将指令行地址与主动表中存储的行地址进行匹配,从而得到与该行地址匹配成功的行的行号。在本实施例中,该匹配被分为两部分进行,即主动表104由两部分组成。主动表104的第一部分258用于匹配指令行地址252中的高位254,第二部分260用于匹配指令行地址252中的低位256。这两部分都由内容寻址存储器构成。
主动表第一部分258的表项数目与主动表第二部分260的存储块数目相等,两者一一对应。主动表第二部分260的每个存储块包含若干个表项,每个表项对应一个指令行。行地址的高位部分存储在主动表第一部分258中,行地址的低位部分存储在主动表第二部分260中。当该完整行地址与输入行地址相同时,才匹配成功。此外,将主动表第一部分258匹配输出的表项号与第二部分260匹配输出的表项号拼接,就可以得到与指令行地址对应行号。
在本实施例中,假设主动表第一部分258包含4个表项,那么主动表第二部分260中包含4个存储块,每个存储块与主动表第一部分258中的一个表项对应。对于主动表第一部分258包含其他数目的表项的情况也与此类似。此外,根据本发明技术方案,主动表第二部分260中的存储块与指令读缓冲106中的存储块一一对应,且对应存储块中的表项也一一对应。
当扫描器108计算得到分支目标地址或下一指令块地址时,相应的行地址252被送到主动表104进行匹配。首先将行地址高位254与主动表第一部分258中存储的行地址高位进行匹配。若在主动表第一部分258中匹配不成功,则表示该行地址对应的指令行尚未存储在指令存储器106中,因此根据图2A所述替换算法分配一个表项,并在主动表第二部分260中该表项对应的存储块中也根据图2A所述替换算法分配一个表项。将输入的行地址高位254存储到主动表第一部分258的所述表项中,并将输入的行地址低位256存储到主动表第二部分260的所述表项中,输出行号262送往轨道表110。同时,该行地址被送到填充器102进行指令行预取。等到取到该指令行后,将该指令行存储到指令存储器106中与主动表第二部分260所述表项对应的存储行中,完成指令填充。
若在主动表第一部分258中匹配成功,则将该行地址的低位送到主动表第二部分260中与该匹配成功的第一部分表项对应的存储块中进行匹配。若主动表第二部分260中匹配不成功,则表示该行地址对应的指令行尚未存储在指令存储器106中,因此根据图2A所述替换算法分配一个表项,并将输入的行地址低位256存储到主动表第二部分260的所述表项中,输出行号262送往轨道表110。同时,该行地址被送到填充器102进行指令行预取。等到取到该指令行后,将该指令行存储到指令存储器106中与主动表第二部分260所述表项对应的存储行中,完成指令填充。若在主动表第二部分260中也匹配成功,则表示该行地址对应的指令行已经存储在指令存储器106中,因此直接输出行号262送往轨道表110。
根据本发明技术方案,当循迹器114读指针指向一个分支轨迹点时,该分支轨迹点的分支目标指令块号(第一地址)被读出。与该块号对应的行号264被送到指令存储器106。行号264中与主动表第二部分260对应的行号部分266被用于从指令存储器106的各个存储块中寻址以选出对应的指令行,行号264中与主动表第一部分258对应的行号部分268被用于从各个存储块输出的指令行中选出对应的指令行270。指令行270就是与输入行号264对应的指令行。
在具体实现中,也可以先由行号264中与主动表第一部分258对应的行号部分268将指令存储器106中对应的存储块激活,再由行号264中与主动表第二部分260对应的行号部分266从该存储块中选出指令行270,这样就不需要同时访问指令存储器106中的所有存储块,从而降低功耗。
为便于描述,此后实施例的主动表中均以图2A实施例中的主动表为例进行说明。需要说明的是,将这些实施例中的主动表替换成图2B实施例中的主动表,也可以实现同样的功能。
回到图1,当从扫描器108送来的地址在主动表104中匹配不成功时,该地址被送到填充器102等待从更低层次存储器取得该地址对应的指令行,同时在主动表104中分配一个表项存储该指令行对应的行地址,从而形成一个块号/地址对。本发明所述的指令行的行地址指的是该指令行起始指令的地址。本发明所述的指令存储器在逻辑上被分为复数个存储块,每个存储块对应主动表中的一个表项,存储了该表项中行地址对应的指令行。当该行地址对应的指令行被取来后,填充器102将其送到指令存储器106写入以该行地址对应的块号索引的存储块中。
图3A是本发明所述指令存储器的实施例300。在本实施例中指令存储器由指令存储单元302和输出寄存器304构成。当填充器102对指令存储单元302进行写操作时,从主动表104来的行号被送到写地址端口310用来索引被写入的存储行,指令行通过写端口306写入该存储行。循迹器114读指针指向的分支轨迹点中存储的分支目标轨迹点的第一地址(即块号)被送到指令存储单元302的读地址端口作为读地址,将对应存储行中的指令行中的一个指令块从读端口(Read port)308读出,该指令块即分支目标轨迹点对应指令所在的指令块。该指令块被存储在输出寄存器304中以供处理器核116访问。此时,指令存储单元302可以被指令循迹器114送来的其他块号进行索引。此时,指令存储单元302可以根据新的地址(可以是随机地址)进行寻址以找到对应的指令块,而输出寄存器304则可以根据顺序地址寻址,依次输出存储在其中的指令块中的指令。对于处理器核116送来的寻址地址而言,除了发生分支转移的情况下,下一指令的地址均是当前指令地址的顺序后一地址,因此采用图3A实施例的结构(一个单端口存储器配合一个能容纳一个指令块的输出寄存器)可以同时输出分支目标指令和顺序执行的下一指令,从而实现双端口存储器的功能。
根据本发明技术方案,由于一个指令行至少包含一个指令块,因此指令存储单元302中的存储行的容量也可以比输出寄存器304的容量大,而指令读缓冲112中的存储块的容量与输出寄存器304的容量一致。
图3B是本发明所述指令行、指令块及相应存储单元之间关系的实施例350。在图3B中,假设指令地址352的长度为32位,即最高位为第31位,最低位为第0位,且每一个指令地址对应一个字节(Byte)。因此,指令地址352的最低两位354(即第1、0位)对应一个指令字(Instruction Word)中的4个字节。在假设本实施例中,一个指令块包含了4条指令,因此偏移量356表示对应指令在指令块中的位置。这样,指令地址的高位358(即第31到第4位)表示了指令块的起始地址,即指令块地址。
为了便于说明,本实施例中一个指令行对应2个连续的指令块。这样,除去指令块地址358最低位362得到的指令块地址高位(即第31到第5位)就是指令行地址360,指令块地址358中的最低位362则可以表示该指令块位于对应指令行中的位置。
根据本发明技术方案,可以建立指令块地址与块号(BNX)、指令行地址与行号(LNX)的映射关系。在本实施例中,假设主动表中可以容纳64个行号,那么对应的行号364共有6位,即图中行号364显示的第10到第5位。需要注意的是,行号364的值并不一定等于指令地址352中第10到第5位的值。又因为64个指令行对应128个指令块,因此对应的块号368共有7位(即图中块号368显示的第10到第4位,其中第10到第5位的值与行号364的值相同)。在此,由于一个指令行中的两个指令块是连续的,因此一个行号对应的两个块号(即第一地址)也相应连续。这样,块号366的最低位368的值就是对应指令块地址358中的最低位362。同样地,本发明所述的第二地址370就是指令在指令块中的块内偏移量356,两者的值相同。
这样,由于每次从指令存储器106输出的指令块可以填满指令读缓冲112的一个存储块,因此当指令读缓冲112中包含某个指令块时,并不需要同时包含该指令块对应的整个指令行。即指令读缓冲112中可以包含对应于同一个指令行的两个指令块,也可以只包含其中的一个指令块,因此在存储空间方面具有更好的灵活性。此外,还可以将主动表104的容量减小至原来的1/2。对于一个指令行包含更多指令块的情况,也可以据此类推。
回到图1,扫描器108可以对从指令存储器106送来的每一条指令进行审查,并提取出某些信息,如:指令类型、指令地址、分支指令的分支目标信息。举例而言,指令类型可以包括条件分支指令、无条件分支指令和其他指令等。具体地,可以认为无条件分支指令是条件分支指令的一种特例,即条件总是成立。因此,指令类型可以分为分支指令和其他指令等。分支源地址可以指分支指令本身的地址,分支目标地址可以指当分支指令的分支转移成功发生时将转移进入的地址。此外,还可以包括其他信息。
在本实施例中,从指令存储器106输出的所有指令都被扫描器108审查,提取出指令类型并输出到轨道表110,同时计算出分支指令的分支目标地址。所述目标地址可以由包含该分支指令的指令块起始地址加上该分支指令的偏移量,并再加上分支转移到目标指令的距离得到。该目标地址的高位部分(如:图3A中指令块地址358)被用于与主动表104中的内容匹配以获得该分支目标指令对应轨迹点的行号,并通过拼接指令块地址的最低位(如:图3A中指令块地址最低位362)形成第一地址或块号,低位部分(如:图3A中块内偏移量354)就是该分支目标指令对应轨迹点的第二地址,即该分支目标指令在其行中的偏移量。
对于结束轨迹点,则只需要将指令块地址加上指令块长度,就可以得到下一指令块的指令块地址,之后可以将该下一指令块地址视为目标地址按同样方法进行匹配。
如果该目标地址的高位部分在主动表104中匹配成功,那么主动表104输出该高位地址对应的块号到轨道表110;如果该目标地址的高位部分在主动表104中匹配不成功,那么主动表104就把这个值通过总线144送到填充器102以实现填充操作,同时分配一个块号给该高位地址,并输出到轨道表110。
在本发明中,扫描器108解析从指令存储器106输出的指令块,若判断所述指令块中包含分支指令,则计算该分支指令的目标地址,产生地址。具体的,所述扫描器108通过如下过程解析所述指令块:所述扫描器108获取指令块中的OP(指令类型信息,标示指令为分支指令还是非分支指令),得出是否包含分支指令的信息。若判断得到(或者说经过上述解析得出)所述指令块中包含分支指令,则计算该分支指令的目标地址。
此外,所述扫描器108还可以获取从指令存储器106输出的指令块的地址,在所述指令块的地址上增加一偏移量,产生地址。在此,所述偏移量为一固定值,优选的,其为相邻两个指令块的地址偏差量。由此,所述扫描器108所产生的地址将为与所述指令块相邻地址的指令块,特别的,为所述指令块下一地址的指令块。
这样,所述扫描器108产生的地址包括:所述扫描器108解析从指令存储器106输出的指令块,若判断所述指令块中包含分支指令,则计算该分支指令的目标地址,产生一地址(其中用语“一”指代一个、一些或者一部分);及所述扫描器108获取所述指令块的地址,在所述指令块的地址上增加一偏移量,产生另一地址。
接下去,将提供实现上述多种方式产生地址的扫描器的具体实现方式。如图4A所示,所述扫描器具体通过如下方式产生地址:所述扫描器通过译码器判断当前指令为分支指令还是非分支指令,若判断得到所述指令为分支指令,则通过一加法器将当前指令地址加上分支转移距离,得到分支指令的目标地址;所述扫描器通过一加法器将当前指令所在的块地址加上块偏移量(即相邻两个信息块的地址偏差量),得到当前指令块的相邻指令块的地址。
图4B是本发明所述扫描器的一个实施例400。在本实施例中,扫描器108对接收到的指令块404进行审查,提取出其中各条指令的指令类型并计算分支目标地址。为了便于说明,在此以一个指令块包含两条指令为例,即指令块404中包含指令406(对应较低的指令地址)和指令408(对应较高的指令地址)。一个指令块包含更多指令的情况也类似。扫描器108的主体部分402包含译码器410、412和加法器414、416。其中译码器410和加法器414对应指令406,译码器412和加法器416对应指令408。译码器对输入的指令进行译码,输出指令类型(如:指令类型432、434)和分支转移距离(Branch Offset)(如:分支转移距离420、422),其中指令类型被直接送往轨道表110写入相应位置,而分支指令对应的分支转移距离则被送到加法器进行加法操作。假设指令406和408都是分支指令,则以加法器414为例,其输入包括分支转移距离420、当前指令块地址418和常数‘0’。根据本发明技术方案,分支指令的分支目标地址等于该指令所在指令块的块地址、该指令在指令块中的偏移量和分支转移距离三者之和。而分支指令406是指令块中的第一条指令,其在指令块中的偏移量为‘0’,因此加法器414对这三个输入相加得到的输出结果就是对应分支指令406的分支目标地址424。同理,分支指令408是指令块中的第二条指令,且如图3B实施例所述,两条相邻指令间的地址相隔‘4’,因此加法器416的输入包括分支转移距离422、当前指令块地址418和常数‘4’,其输出就是对应分支指令408的分支目标地址426。分支目标地址424和426被送到选择器428经选择后依次送往主动表104进行匹配,从而得到对应的块号并通过总线430送往轨道表110依次写入相应位置。
在本实施例中用到的指令块地址418是从主动表104中读出并被直接送往扫描器108中加法器的。也可以在扫描器108中增加用于存储当前指令块地址的寄存器,这样就主动表104就不需要实时地送出指令块地址。
根据本发明技术方案,可以由扫描器108对从指令存储器106输出的指令扫描,得到指令的类型和分支指令的分支目标地址。可以做一个简单判断,以确定分支目标是否位于分支指令(分支源)本身所处的指令块或相邻的指令块(这些指令块的块号已知),从而减少主动表104的匹配次数。
根据本发明技术方案,当得到一指令块地址(获取指令块时,便可很容易的得到该指令块的地址,关于此点,本说明书不再赘述)时,该指令块中每条指令的地址、该指令块的长度(即首条指令与末条指令之间地址偏差量)都是易于得到的。那么确认指令地址(在此,也就是产生的地址,或者更进一步的,指分支目标地址和下一指令块地址)是否指向被比对指令块(在此,也就是当前指令块和下一指令块)时,即可通过指令中的偏移量是否落入指令块中的长度来确定;也可通过指令中的地址是否为被比对指令块中的指令的地址来确定。当然,在本申请的其他实施例中还可通过其他方式予以确定,本申请不再赘述。
接下去,将提供实现上述多种方式产生地址的扫描器的具体实现方式。如图4C所示,所述扫描器通过如下方式进行筛选:所述扫描器通过一加法器将当前指令的块内偏移量(即当前指令地址相对于当前指令所在的块的地址的偏移量)加上分支指令的分支转移距离,得出一总偏移量,根据该总偏移量判断得到的分支指令目标地址是否指向当前指令块或者当前指令块的下一指令块,从而对产生的地址予以筛选。
此外,还可以与除当前指令块和下一指令块以外更多的指令块进行对比,从而对产生的地址进一步筛选。其方法是根据分支偏移量(Branch Offset)与分支源的第二地址(BNY)相加得到的和来选取寄存在容易读取的寄存器中的已知指令块块号。原理如下:将分支转移距离与第二地址之和中与第二地址等长的低位部分舍弃(truncate),剩余的高位部分就是分支目标所在指令块与当前指令块(分支源所在指令块)之间以块的数目为单位的距离。如高位为0,则分支目标在当前指令块;如高位为+1,则分支目标在当前指令块顺序后一指令块;如高位为-1,则分支目标在当前指令块顺序前一指令块;如此类推。在此当前指令块表示扫描正在扫描的指令块;顺序后一指令块表示一个指令块其指令地址比当前指令块的地址大一个指令块地址长度的地址;顺序前一指令块表示一个指令块其地址比当前指令块的地址小一个指令块地址长度的地址。
图4D是本发明所述扫描器中目标地址判断的实施例440。在图4D中,为了便于描述,扫描器108中只显示了与本实施例说明相关的内容,省略了其他部分或部件。在本实施例中,与图4B相同,假设扫描器108一次对输入的指令块404中的两条指令进行审查,因此一次最多可能计算得到两个分支目标地址,这两个分支目标地址被分别送到两个相同的判断逻辑442和444中进行判断。本实施例中扫描器108的模块402与图4B实施例中的模块402相同,输出的指令类型被直接送往轨道表110写入相应位置,在图4D中没有显示。在此,仅对分支目标地址是否位于含当前指令块的连续三个指令块中的判断举例进行说明,对分支目标地址是否位于包含当前指令块在内的连续更多个指令块中的判断的方法也类似。
在图4D中,寄存器448存储了当前指令块对应的块号,寄存器446存储了当前指令块之前的一个指令块对应的块号,寄存器450存储了当前指令块之后的一个指令块对应的块号,块号本身不一定是连续的但相应指令块的地址是连续的。这样,只要扫描器108计算得到的分支目标地址位于这三个连续指令块的起止地址之间,就可以不需要访问主动表104,直接从寄存器446,448,与450得到对应的块号,而不在该起止地址之间的分支目标地址则需要被送到主动表104进行匹配操作。
以判断逻辑442为例,计算模块452的输入包括分支目标地址424和当前指令块的块地址418,输出为选择信号458。计算模块452可以由一个减法器实现。分支目标地址减去当前指令块块地址后得到的差值就是分支目标地址与当前指令块第一条指令之间间隔的地址差值。将该差值与第二地址等长的低位部分舍弃,以剩余的高位作为选择信号458控制选择器460来选择寄存在寄存器中的指令块块号。其连接方式是高位为-1选择寄存器446中的块号;高位为0选择寄存器448中的块号;高位为+1选择寄存器450中的块号;高位非以上的值则将分支目标地址经选择器446送往主动表104查找相应块号,同时选择器460选择主动表输出。选择器460输出的块号462被填充到轨道表中由分支源地址指定的轨迹点(表项)。
在本实施例中,假设主动表104每次只能对一个分支目标地址进行匹配,因此,如果扫描器108一次审查发现两条分支指令,且这两条分支指令的分支目标指令都不在上述连续三个指令块中,则需要通过选择器428选择,依次将分支目标地址送到主动表104匹配。而主动表104将匹配得到或分配的块号430依次送到这两个判断逻辑中的选择器460供选择。
需要注意的是,本实施例仅是根据本发明技术方案给出的分支目标地址归类的一种具体实现方式,判断逻辑442、444也可以由其他方式实现。例如,可以将分支目标地址计算功能也在计算模块中实现,如图4E所示。
图4E是本发明所述判断逻辑的一个改进实施例470。在本实施例中,主动表104、寄存器446、448、450与图4D实施例相同,也假设包含两个相同的归类逻辑472和474。以归类逻辑472为例,计算模块472的输入包括当前指令块的块地址418、分支指令在该指令块内的偏移量478和该分支指令分支转移到目标指令的距离420。
与之前实施例所述相同,在计算模块476中,将当前指令块块地址418、当前分支指令在指令块中的地址偏移量(BNY)478和该分支指令分支转移到目标指令的距离(BranchOffset)420三者相加就可以得到分支目标地址424。将当前分支指令在指令块中的地址偏移量478和该分支指令分支转移到目标指令的距离420两者相加就可以得到图4D实施例中所述的地址差值。地址差值依前舍弃低位后作为选择信号458用于选择适当的指令块块号作为块号462输出。其余操作与上例同。
在图4D实施例中,寄存器446、448和450是移位寄存器。当指令循迹器第一地址指针指向一个新的当前指令块时,寄存器的内容必须从一个寄存器搬到另一个寄存器。可以用一个有多个表项的循环缓冲(circular buffer)实现本实施例中的存储器480,并增加一个当前指令块指针478、一个起点指针和一个终点指针。当前指令块指针478指向的表项含有当前指令块。当前指令块的位置改变时,各表项存储的内容不移动,而是指针478在移动。起点指针及终点指针指示地址连续的单数个或复数个指令块的起点与终点。
现假定循环缓冲480中的表项446,指针地址为‘-1’,存储了前一指令块块号;表项448,指针地址为‘0’,存储了当前指令块块号;表项450,指针地址为‘+1’,存储了下一指令块块号。现当前指令块指针478数值为0,指向表项448;起点指针数值为‘-1’,指向表项446;终点指针数值为‘+1’,指向表项450。在这个时刻,表项448含的指令块号代表的指令块被扫描。如果判断逻辑472判断器所检测的分支指令的目标在当前指令块(选择信号458为‘0’),控制选择器选择表项448的内容作为块号462输出。在下一时刻,假设此时表项450含的指令块号代表的指令块被扫描,则当前指令块指针478数值为‘+1’,指向表项450;如果判断逻辑472判断器所检测的分支指令的目标在当前指令块(选择信号458应该为‘0’),这时选择器460会仍如前选择表项448的内容作为块号462输出;但这是错的,因为现在当前块是由表项450代表,与前一时刻相比有了一个表项的偏差。将当前指令块指针478的值加到原来的选择器460的控制信号上就可以补偿这个偏差。即现在控制信号458是当前分支指令在指令块中的地址偏移量‘0’和该分支指令分支转移到目标指令的距离420两者相加所得的地址差值舍弃低位后,再在高位上加上当前指令块指针478数值作为选择信号458。选择信号458的值经上述补偿后为‘0+1’,即等于‘1’,该值选择表项450中的指令块块号作为块号462输出。此后当前指令块的下一个指令块的块号被填进表项446,终点指针指向新的终点表项446。由于起点指针原指向的表项的内容被替换成下一指令块的块号,因此起点指针下移一个表项指向起点表项448。在其他的例子中,若起点指针原指向的表项的内容没有被替换,则可以保持起点指针不变。
假如当前指令块指针的移动距离或移动方向与上例不同,只要没有出起点指针及终点指针指示的范围(起点指针值<当前指令块指针478值<终点指针值),都可以依上例从循环缓冲480中获得需要的指令块块号作为块号462输出。如果超出了范围,则超范围检测逻辑(为明了起见图上未显现)会控制将指令块地址424送往主动表104查找相应的指令块块号;选择器460也会被控制将主动表104的输出作为块号462送往轨道表存储。
根据本发明所述技术方案,可以将目标指令块暂存在指令存储器106的输出寄存器304中,当分支转移成功发生、该目标指令块成为当前指令块时才将其填充到指令读缓冲112中;同样地,可以将扫描器108提取出的指令信息及主动表104输出的块号信息暂存在寄存器中,当分支转移成功发生时才将这些信息填充到轨道表110中。
当新轨道被建立时,可以将新建轨道放置在轨道表中的一个可被替换的行中。如果所述新轨道包含一个分支轨迹点(对应一条分支源指令),那么在所述行中的一个表项内建立一个分支轨迹点。可以根据分支源地址确定所述分支点在轨道表110中的行及表项的位置。举例而言,可以根据分支源地址的高位地址确定行,并根据分支源地址的偏移量确定该行中的一个表项。
此外,行中的每个表项或轨迹点可以包含一种内容格式,所述格式包括类型区域、第一地址(XADDR)区域和第二地址(YADDR)区域。此外还可以包含其他区域。类型区域可以表示轨迹点对应的指令的类型。如之前所述,指令类型可以包括条件分支指令、无条件分支指令和其他指令。XADDR区域也被称为第一维地址或简称为第一地址。YADDR区域也被称为第二维地址或简称为第二地址。
此外,新轨迹点的内容可以对应分支目标指令。换句话说,分支轨迹点的内容存储了分支目标地址信息。举例而言,轨道表110中的对应与一条分支目标指令的特定的行的相应块号被作为第一地址存储到所述分支轨迹点的内容中。此外,所述分支目标的在其所在的指令块中的偏移量被作为第二地址存储到所述分支轨迹点的内容中。所述偏移量可以根据分支源指令地址和分支转移位移(距离)计算得到。
轨道表中所有轨道的结束轨迹点都被标记为一个特殊的轨迹点,其内容包含了一个必定分支转移的类别信息,以及按顺序执行指令时的下一指令所在的下一轨道的位置信息。由于该下一指令对应于下一轨道的第一个轨迹点,因此该特殊轨迹点的内容可以只包含类型区域和第一地址(XADDR)信息,或除了包含类型区域和第一地址(XADDR)信息,还包含一个常数(如:‘0’)。
图5A是本发明所述轨迹点格式的实施例500。在本实施例中,对于非结束轨迹点,其轨迹点格式可以包括指令类型502、第一地址504和第二地址506,其中一条轨道的至少两个轨迹点的指令类型能被同时读出。因此,在实际存储时,可以将轨道中所有非结束轨迹点的指令类型存储在一起,而将这些非结束轨迹点的第一地址和第二地址存储在一起。对于结束轨迹点,其轨迹点格式可以包括指令类型502、第一地址504和值为‘0’的常数508。同样地,结束轨迹点的指令类型502也可以和非结束轨迹点的指令类型存储在一起,而第一地址504和常数508则可以存储在该轨道所有非结束轨迹点的第一地址、第二地址之后。此外,由于结束轨迹点的第二地址就是常数508的值‘0’,因此可以不存储该常数,当循迹器114指向结束轨迹点时直接产生第二地址‘0’。
图5B是根据本发明技术方案使用轨道表建立新轨道的方法的一个实施例。在本实施例中,BNX代表指令块所在存储块的块号。由于指令读缓冲112是指令存储器106的一个子集,而轨道表110中的轨道与指令读缓冲112中的存储块一一对应,轨道表110中各个块号代表的指令块也是指令存储器106的子集,因此内容寻址存储器(CAM)536包含了每条轨道对应的块号信息。通过将块号在内容寻址存储器536中进行匹配就可以确定该块号对应的轨道号,从而在轨道表110中找到对应的轨道。
如图5B所示,一个已建立的轨道522(用块号BNX0表示)可以包含三条分支指令或分支点524、526和528。当审查分支点524时,主动表中匹配得到或分配的目标块号是BNX7,那么一条对应BNX7的新轨道530在下一个可用行被建立起来用于存储分支点524的目标指令,且轨道表110中的该块号(即块号BNX7)被记录在分支点524中作为第一地址。类似地,当审查分支点526时,主动表中匹配得到或分配的目标块号是BNX9,那么在轨道表110中另一条对应BNX9的新轨道532在下一个可用行被建立起来,且该块号(即块号BNX9)被记录在分支点526中;当审查分支点528时,主动表中匹配得到或分配的目标块号是BNX1,那么在轨道表110中又一条对应BNX1的新轨道534在下一个可用行被建立起来,且该块号(即块号BNX1)被记录在分支点528中。这样,单条轨道中对应全部分支点的新轨道可以被建立起来。
根据本发明技术方案,每条分支指令的轨迹点中存储的第二地址就是该分支指令的分支目标指令在该分支目标指令所在指令块中的偏移量。
图5C是本发明所述轨道表的一个实施例。在图5C中,省略了与本实施例说明内容无关的部分或部件。假设扫描器108可以一次对一个指令块中的全部指令进行审查以提取出指令类型554,但主动表104无法一次对所有分支指令的分支目标地址进行匹配,即无法将所有匹配得到或分配的目标块号552一起送到轨道表110内存储目标块号的存储器548中。为了减少对轨道表110中存储器的写次数,可以不将这些信息直接写入轨道表110内存储指令类型的存储器550和存储目标块号的存储器548中,而是先存储到临时寄存器542中。临时寄存器542的容量与轨道表110中一行(即一条轨道,包含存储器550与548的一行)的容量相同,等到临时寄存器542中内容写满后再一起写入轨道表110内的存储器550和548中。
在图5C中,从扫描器108来的指令块中所有指令的指令类型554被同时写入临时寄存器542中,目标块号552被依次写入临时寄存器542中。当该指令块全部指令的相关信息都被写入临时寄存器542后,再被一起写入存储器550和548中。根据本发明技术方案,若当前产生的是间接寻址分支指令的分支目标地址对应的块号,则该块号不需要被存储到轨道表110中,而是可以被直接旁路作为选择器544的输出。除此以外,如果循迹器114读指针的第一地址指针指向的块号所对应的轨道已经被存储在存储器550和548中,那么选择器546和选择器544分别选择存储器550和548输出的指令类型和目标块号送到循迹器114;否则选择器546和选择器544分别选择临时寄存器542输出的指令类型和目标块号送到循迹器114。这样,在一条轨道中的全部轨迹点的内容尚未写满时就可以根据需要读出其中的内容。
需要注意的是,在图5C中,存储器550和存储器548可以是完全独立的两个存储器,也可以是属于同一个物理存储器中的逻辑意义上的两个不同存储器。类似地,在具体实现中,临时寄存器542也可以与上述两个存储器一起位于在同一物理存储器中。此外,将临时寄存器542放置在轨道表110之内,仅仅是为了便于说明。在逻辑布局或物理实现上,临时寄存器542也可以被放置在轨道表110之外。这是本领域专业人士,在本发明的说明、权利要求和附图的启发下,能够理解、领会的。
上述各个实施例采用直接寻址的方式计算分支目标地址并实现指令预取。然而,也可以使用间接寻址的方式。当采用间接寻址方式时,需要首先确定寄存器值(如:基地址寄存器值),从而计算分支目标地址。由于寄存器的值是因指令执行的结果而改变的,因此对于一条间接寻址分支指令来说,在最后更新其基地址寄存器值的指令已计算得到新值、但尚未将该值写入基地址寄存器时可以根据需要通过旁路(bypass)路径取得该新值进行目标地址的计算及后续操作。图5D是确定基地址寄存器值更新指令位置的实施例560。
在图5D中,轨道562包含了由扫描器108和主动表104送来的信息所构成的一系列轨迹点。在本实施例中,一条轨道由16个轨迹点组成。一个轨迹点对应一条指令。假设第6号轨迹点566和第14号轨迹点574各对应一条直接寻址分支指令,第10号轨迹点570对应一条以BP1寄存器为基地址寄存器的间接寻址分支指令。在扫描器108对该指令块指令审查时,可以找到该指令块中所有更新BP1寄存器值的指令,即第3号轨迹点564、第8号轨迹点568和第12号轨迹点572对应的指令。因此可以确定在间接寻址分支指令570之前最后更新基地址寄存器BP1的指令对应轨迹点568,该轨迹点568与间接寻址分支指令570相隔两个轨迹点,即相隔两条指令。这样,可以将该相隔指令的条数(即数值‘-2’)记录在间接寻址分支轨迹点570的内容中。
根据本发明所述技术方案,当轨迹点566对应的分支指令未发生分支转移时,循迹器114的第二地址读指针指向轨迹点570。此时读出轨迹点570的内容,其中包含了相隔指令的条数‘2’。这样,当处理器当前执行的指令在该轨道中的位置值(即程序计数器PC的低位地址偏移量)比循迹器114的第二地址读指针的值小于等于‘2’时,该基地址寄存器的值被更新,此时可以从处理器核116中取得基地址寄存器BP1的值,进行分支目标地址计算及后续操作。
根据本发明技术方案,可以通过多种途径获得该基地址寄存器值,如:通过处理器核116中寄存器额外的读端口获得、采用时分复用读口的方式从处理器核116中寄存器获得、通过处理器核116中的旁路路径获得、或通过一个专供数据预取使用的额外寄存器堆获得。
现有处理器体系结构中一般由运算单元计算产生基地址寄存器值。在通常结构中,寄存器堆中存储了包含基地址寄存器在内的各个寄存器的值。寄存器堆输出的寄存器值或其他来源的数值构成处理器核中运算单元的一个输入值,而寄存器堆输出的寄存器值或其他来源的数值构成运算单元的一个输入值。运算单元对两个输入值进行运算并将结果写回寄存器堆。为了便于说明,本实施例以运算单元有两个输入和一个输出为例,对于更多或更少输入及更多输出的情况也类似。在这里,寄存器堆输出的两个寄存器值可以是同一个寄存器的值,也可以是不同寄存器的值。而运算结果可以写回与这两个寄存器值来源相同的寄存器,也可以写回不同的寄存器。
图5E是本发明所述通过寄存器额外的读端口获得基地址寄存器值的实施例。在本实施例中,运算单元575对输入值577和579进行运算并将结果581写回寄存器堆587的过程与通常处理器体系结构相同。不同的是,寄存器堆587比通常体系结构中的寄存器堆多一个读端口589,这样,当到达计算数据寻址地址的时间点时就可以通过该额外的读端口将对应的基地址寄存器值经读端口589读出,以计算数据寻址地址。
图5F是本发明所述采用时分复用的方式获得基地址寄存器值的实施例。在本实施例中,运算单元575对输入值577和579进行运算并将结果581写回寄存器堆的过程与通常处理器体系结构相同。不同的是,寄存器堆的输出577、579还被送到选择器591经选择后作为基地址寄存器值593输出。这样,当基地址寄存器值更新完成后,若运算单元575对应之后指令的操作数输入中至少有一个非来源于寄存器堆,则由输入值对应的寄存器读端口输出该基地址寄存器值,或若至少有一个输入就是该基地址寄存器的值,则寄存器值583或585就是该基地址寄存器的值。可以经选择器591选择该基地址寄存器值作为输出593,以计算数据寻址地址。
图5G是本发明所述通过旁路路径获得基地址寄存器值的实施例。在本实施例中,运算单元575对输入值577和579进行运算并将结果581写回寄存器堆的过程与通常处理器体系结构相同。不同的是,运算结果581不但被写回寄存器堆,还被通过旁路路径595送出。这样,当运算单元575当前正在进行更新基地址寄存器值的运算时,其运算结果就是更新后的基地址寄存器值,因此通过旁路路径595送出的值就是所需的基地址寄存器值,从而用于计算数据寻址地址。此旁路方法需要知道运算结果581出现的正确时间点。这个时间点可以由图5D实施例中的指令间隔数确定。以图5D所述情况为例,指令间隔数为‘-2’,那么当处理器核116执行到该数据访问指令之前2条指令时,运算单元575输出的运算结果就是所需的基地址寄存器值。
图5H是本发明所述通过专供数据预取使用的额外寄存器堆获得基地址寄存器值的实施例。在本实施例中,运算单元575对输入值577和579进行运算并将结果581写回寄存器堆的过程与通常处理器体系结构相同。不同的是,本实施例中增加了一个额外的寄存器堆597。寄存器堆597中包含了原有寄存器堆中全部基地址寄存器的值,是原有寄存器堆的影子(shadow)寄存器堆。所有对原有寄存器堆中基地址寄存器的写入值都会被同时写入寄存器堆597的对应寄存器中。这样,凡是对原有寄存器堆中基地址寄存器的更新操作都会反映到寄存器堆597中。因此,当到达计算数据寻址地址的时间点时,可以从寄存器堆597中读出该基地址寄存器值599,以计算数据寻址地址。在物理实现上,寄存器堆597可以位于处理器核内或处理器核外的任何合适的位置。
为改善访问主动表104的瓶颈并降低功耗,可将最近被使用过的指令块地址与对应的指令块号成对存储在被称为微型主动表(Mini Active List)的小型快速存储中。微型主动表含有的所述匹配对是主动表104中的指令行地址与行号匹配对的子集。当扫描器108计算出需要匹配的分支目标地址时,可以先到微型主动表中进行匹配,若匹配不成功再到主动表104中进行匹配,从而减少主动表104的访问次数。微型主动表由内容匹配寻址器与数据存储器对组成。指令块地址存在内容匹配寻址器中,与其相应的指令块号存在同一行的数据存储器中。输入的指令块地址与微型主动表内容匹配寻址器存储的复数个指令块地址匹配,如果结果是‘匹配不成功’则微型主动表将输入的指令块地址送至主动表104匹配;如果结果是‘匹配成功’则从相应的数据存储器中读出并输出指令块号。微型主动表也可与主动表并行工作,同时提供多个地址匹配服务。
微型主动表可以是一个独立的单元,也可以与轨道表110或指令缓冲112的匹配器合并因为两者有相似的结构与存储数据。此时的微型主动表的指令块地址存储部分以及指令块号存储部分都是内容匹配寻址器结构,且互为对方的数据存储器。此时含有微型主动表的匹配器是一个双向寻址器,即输入指令地址块地址可输出相应的指令块号;输入指令地址块号地址可输出相应的指令地址块地址。这样,含有微型主动表的匹配器可以提供以下功能:从扫描器提供的指令地址块地址查找指令块号做为轨道表内容,以及从循迹器提供的指令块号匹配相应的轨道、指令块、从当前指令块查找相应的指令块地址,该指令块地址的下一个指令块地址做为下一顺序执行指令块的块地址以及从上述块地址查找相应的轨道/指令块。
图5E是本发明所述包含微型主动表的轨道表实施例。
根据本发明所述技术方案,轨道表110与指令缓冲112都需要存储指令块号。轨道表110中还可以包含每条轨道对应的指令块的块地址,因此,轨道表110中的每个块号及其对应地址就构成了一个指令块地址与块号的匹配对,这样,在轨道表110中就构成了一个微型主动表。在图5E中,省略了与本实施例说明内容无关的部分或部件。轨道表110的主体部分,即存储指令类型和分支目标块号及块内偏移量的存储器584与之前实施例所述相同,存储器584中可以包含或不包含临时寄存器。不同的是还增加了一个内容寻址存储器588用于存储每条轨道对应的块地址,而内容寻址存储器586中存储了这些块地址对应的块号。这样,内容寻址存储器586和内容寻址存储器588的相应行就形成了指令块地址与块号的匹配对。
当扫描器108计算出需要匹配的分支目标地址时,先将该目标地址通过总线590送到内容寻址存储器588进行匹配。若匹配成功,则以匹配成功的项为索引在内容寻址存储器586中的相应行内容(即该目标地址对应的块号)通过总线592输出到选择器598,经选择器598选择后写入轨道表主体部分存储器584中;若匹配不成功,则将该目标地址送到主动表104进行匹配,由主动表104将匹配得到或分配的块号通过总线596送到选择器598,此时选择器598选择从主动表104来的块号写入轨道表主体部分存储器584中。
当执行分支指令时该分支指令成功发生分支转移时,指令循迹器114将分支轨迹点中包含的分支目标块号通过总线594送到内容寻址存储器586中进行匹配。若匹配成功,则分支目标指令块对应的轨道已经建立,即分支目标指令块已经被存储在指令读缓冲112中,不需要进行填充操作;若匹配不成功,则分支目标指令块对应的轨道尚未建立,即分支目标指令块尚未存储在指令读缓冲112中,则需要将该分支目标块号通过总线594送到指令存储器106进行寻址,从指令存储器106中输出该目标指令块,再按之前实施例所述方法进行后续操作。
图6A是本发明所述循迹器读指针移动的实施例600。在本实施例中,循迹器读指针越过轨道表中的非分支指令,移动到轨道表中下一分支点并等待处理器核116分支判断结果。为便于说明,图6A中省略了与本实施例说明内容无关的部分或部件。在本实施例中,假设存储器550中存储的指令类型及存储器548中存储的指令信息均按指令地址从小到大从左到右排列,即当按顺序执行这些指令时,各个指令信息及相应指令类型的访问顺序为从左向右。另假设550中指令类型为‘0’代表548中相应的指令为非分支指令,指令类型为‘1’代表相应的指令为分支指令。任一时刻可以读出存储器548中由第一地址614(块号,BNX)指出的一条轨道中中由第二地址616(块内地址偏移量,BNY)指出的代表指令的表项。任一时刻可以读出存储器550中由第一地址614指出的一条轨道中代表指令类型的复数个表项甚至所有表项。其中如果轨道表中轨道数与第一地址所代表的总轨道数相等,则将第一地址译码寻址就可指向相应轨道。如果不等,则可以用内容寻址(Content Adress)的方法将轨道的轨道号存放在匹配器536中的存储器中,第一地址与匹配器536中的所有轨道号做并行比较,轨道号与第一地址匹配的轨道即为要选择的轨道。匹配器536、存储器550和548共同构成轨道表110。
在存储器550和548中每一行中指令地址最大的一条指令的表项的右方再增设一个结束表项以存放顺序执行下一条指令的地址。结束表项的指令类型总是被设定为‘1’。结束表项中指令信息的第一地址是下一条指令的指令块号,第二地址(BNY)恒定为零,指向该指令轨道的第一项。结束表项被定义为等同于一个无条件分支指令。当循迹器指向一个结束表项时总会产生一个内部控制信号使选择器608选择存储器548的输出630;也会产生一个内部控制信号使寄存器610更新。该内部信号可以由存储器550或存储器548中结束表项中含有的特殊位触发;也可以由第二地址616指向结束表项来触发。
在图6A中,循迹器114中主要包括了移位器602、前导零计数器604、加法器606、选择器608和寄存器610。其中移位器602将从存储器550读出的代表复数条指令的复数个指令类型618向左移位,其移动位数由寄存器610输出的第二地址指针616决定。移位器602输出的移位后指令类型624的最左边一位是步进位(STEP Bit)。该步进位的信号与从处理器核来的BRANCH信号共同决定寄存器610的更新。选择器608由控制信号TAKEN控制,其输出632为下一地址(Next Address),其中含有第一地址部分及第二地址部分。当TAKEN为‘1’(分支成功)时,选择器608选择存储器548的输出630(含有分支目标的第一地址及第二地址)做为输出632。当TAKEN为‘0’(分支不成功)时,选择器608选择现第一地址614作为输出632第一地址部分,加法器输出628做为输出632第二地址部分。指令类型624被送到前导零计数器604以计算下一个‘1’指令类型(代表相应指令为分支指令)前有多少个‘0’指令类型(代表相应指令为非分支指令),其中不管步进位是‘0’或‘1’都被计算为一位‘0’。得出的前导‘0’的数目626(步进数STEP Number)则被送到加法器606与寄存器610输出的第二地址616相加以得出下一分支源地址(Next Branch Address)628。请注意此下一分支源地址就是当前指令下一条分支指令的第二地址,而在此之前的非分支指令则会被循迹器114跳(Skip)过。
当第二地址指向代表一条指令的表项时,受第二地址控制的移位器也将存储器548输出的复数条指令类型统一向左移位。此时代表存储器550所读出指令的指令类型被移位到指令类型624中的最左面的步进位。移位指令类型624被送入前导零计数器计算下一条分支指令之前指令的条数。此时前导零计数器604的输出626即是循迹器应该前进的步长。此步长与第二地址616由加法器606相加后即得出下一分支指令地址628。
当移位后指令类型624中的步进位信号为‘0’时,这表示第二地址616所指向的存储器550中的表项为非分支指令,此时该步进位信号控制寄存器610更新,而选择器608在为‘0’的TAKEN信号622控制下选择下一分支源地址628成为第二地址616,第一地址614保持不变。此时新的第一第二地址指向同一轨道中的下一条分支指令,此分支指令前的非分支指令均被越过。新的第二地址控制移位器616将指令类型618移位,使代表此分支指令的指令类型位落到624的步进位上供下一步操作。
当移位后指令类型624中的步进位信号为‘1’时,这表示第二地址所指向的存储器550中的表项代表分支指令。此时该步进位信号不影响寄存器610更新,寄存器610由处理器核来的BRANCH信号634控制更新。此时加法器输出628是当前分支指令同一轨道上的下一条分支指令的地址,同时存储器输出630是当前分支指令的目标地址。
当BRANCH信号为‘1’时,选择器608的输出632更新寄存器610。如果此时处理器核来的TAKEN信号622为‘0’时,代表处理器核决定在这个分支点选择顺序执行,此时选择器608选择下一分支源地址628。此时寄存器610输出的第一地址614不变,下一分支源地址628成为新的第二地址616。此时新的第一第二地址指向同一轨道中的下一条分支指令。新的第二地址控制移位器616将指令类型618移位,使代表此分支指令的指令类型位落到624的步进位上供下一步操作。
如果此时处理器核来的TAKEN信号622为‘1’时,代表处理器核决定在这个分支点选择程序跳转到分支目标,此时选择器选择从存储器548中读出的分支目标地址630成为由寄存器610输出的第一地址614及未来第二地址626。此时BRANCH信号634控制寄存器610锁存上述第一第二地址成为新的第一第二地址。该新的第一第二地址指向可能不在同一轨道上的分支目标地址。新的第二地址控制移位器616将指令类型618移位,使代表此分支指令的指令类型位落到624的步进位上供下一步操作。
当第二地址指向轨迹表结束表项(下一行表项)时,如前所述内部控制信号控制选择器608选择存储器548的输出530,并更新寄存器610。此时新的第一地址614为存储器548的结束表项中记载的下一轨道的第一地址,第二地址为零。此时第二地址控制控制移位器616将指令类型618移零位,开始下一步操作。如此周而复始,循迹器114与轨道表110配合,会跳过轨道表中的非分支指令而总是指向分支指令。
图6B是本发明所述确定计算间接分支目标地址的时间点的一个实施例650。在本实施例中,轨道表110输出循迹器114的第二地址读指针616指向的间接分支轨迹点中存储的指令间隔数666送到加法器654。加法器654的另一个输入就是循迹器114的第二地址读指针616的值,即该间接分支指令所在的位置。加法器654对指令间隔数666和间接分支指令所在的位置相加就可以得到最后更新该基地址寄存器的指令的位置668。该位置668被送到比较器656。比较器656的另一个输入是处理器核116输出的指令地址670,其比较结果被送的到寄存器660以控制其值的更新。
此外,指令读缓冲112输出数据循迹器114的第二地址读指针616指向的指令中的地址偏移量674和基地址寄存器号672。该基地址寄存器号被送到处理器核116获取对应的寄存器值676,并将获取到寄存器值676送到加法器662;而该地址偏移量674被直接送到加法器662。这样,加法器662可以计算产生间接分支目标地址。
当位置668的值与处理器核116输出的指令地址670相等时,表示对应基地址寄存器的值正在(或已经)被更新,此时加法器662计算结果就是该间接分支指令对应的间接分支目标地址并被存储到寄存器660中,该间接分支目标地址即可被送往主动表104进行匹配操作。
此外,由于事先计算了基地址寄存器值更新的时间点,并由指令读缓冲112事先提供了基地址寄存器号和地址偏移量,该时间提前量有可能比较大,即在处理器核116实际执行到对应间接分支指令之前,有可能已经对多条即将执行的间接分支指令都计算了上述时间点并提供了上述基地址寄存器号和地址偏移量。因此可以增加一个缓冲658,用于暂存上述时间点、基地址寄存器号和地址偏移量等信息,依次在到达各条间接分支指令对应基地址寄存器值更新的时间点上计算间接分支目标地址。
根据本发明所述技术方案,当主动表104表项已满且需要建立新的行地址/行号匹配对时,需要对主动表104进行替换,即从主动表104中移除一个已有的行地址/行号匹配对,代以新的行地址/行号匹配对;从指令存储器106中移除相应的指令块,代以新的指令块。轨道表110中每个分支轨迹点的内容包含了其分支目标轨迹点的块号(即第一地址)和块内偏移量(即第二地址)。如果尚在轨道表110中存储的分支目标轨迹点的块号对应的主动表104中匹配对及相应的指令缓存块被替换,则会产生块号未变、但块号所代表的存储内容已改变的情况,导致该轨迹点将指向错误的指令块。可以增加一个相关表(correlationtable),记录主动表104中每个匹配对是否在轨道表中作为轨迹点中分支目标的相关信息。
图7A是本发明所述相关表的一个实施例700。为便于说明,图7A中的相关表在逻辑上被归入主动表104。此外,图7A中还省略了与本实施例说明内容无关的部分或部件。
在本实施例中,主动表104除了包含数据地址寻址器202外,还包含一个相关表702。相关表702的表项数与数据地址寻址器202中的表项数相同,两者形成一一对应的关系。相关表702中每一个表项表示了与其相应的数据地址寻址器202匹配对中的行号在轨道表110中被引用(即作为目标块号出现)的次数。根据具体实现的不同,该次数可以是在轨道表110中以所述块号为目标块号的轨迹点的个数,也可以是包含这种轨迹点的轨道的条数。相关表702中每一个表项的初始值都为‘0’。
根据本发明所述技术方案,主动表104(或微型主动表)一旦匹配得到或分配得到一个块号,则可以将此块号作为索引708从相关表702中读出对应表项的值送到运算单元704,并输出表示该块号是有效块号的控制信号710到运算单元704,使得运算单元704对该值进行加‘1’操作,并将结果送回相关表702中的对应行,从而将该表项的值(即对应块号被引用的次数)增‘1’。根据本发明技术方案,控制信号710可以是如图2A实施例中的有效位220,也可以是其他存储在主动表104中的合适的信号。每当一条轨道被替换出轨道表110时,退出单元706对该轨道进行扫描,提取出所有目标块号,并以这些块号为索引712从相关表702中读出对应表项的值送到运算单元704,并输出控制信号714到运算单元704,使得运算单元704对该值进行减‘1’操作,并将结果送回相关表702中的对应行,从而将该表项的值(即对应块号被引用的次数)减少‘1’。如此,相关表702中值为‘0’的表项表示数据地址寻址器202中对应的匹配对未被轨道表110引用,所以这些匹配对可以被新的行地址/行号匹配对替换而不致产生错误。主动表(或指令存储器)替换逻辑只替换相关表中为‘0’的相应表项。
图7B是本发明所述相关表的一个实施例750。为便于说明,图7B中的相关表在逻辑上也被归入主动表104。此外,图7B中还省略了与本实施例说明内容无关的部分或部件。
在本实施例中,主动表104除了包含数据地址寻址器202外,还包含一个相关表752。相关表752的每个表项只包含一个标志位,对应数据地址寻址器202中的一个匹配对。该标志位为‘1’表示对应匹配对中的块号被轨道表110引用;该标志位为‘0’表示对应匹配对中的行(块)号没有被轨道表110引用。
此外,增加了一个扫描器754,其读指针758依次扫描轨道表110中每条轨道中的每个轨迹点。一旦读指针758指向了一个含有目标块号的轨迹点(如分支轨迹点或结束轨迹点),则将该目标块号读出并作为地址760对相关表752中的对应标志位进行置位操作(即将该标志位的值置为‘1’)。另有一循环指针756以比扫描器754读指针758更慢的移动速度依次移过相关表752中的每个标志位,并对移过的标志位进行清零操作(即将该标志位的值清为‘0’)。这样,只要读指针758的移动速度远大于循环指针756的移动速度,就可以将被轨道表110引用的块号对应的标志位全部置为‘1’,而没有被轨道表110引用的块号对应的标志位则被全部置为‘0’。标志位值为‘0’的匹配对可以被替换以容纳新的行地址/行号匹配对。
根据本发明所述技术方案,指令读缓冲112中存储了处理器核116将要执行的指令,使得处理器核116能以最少等待时间获取指令。图8A是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的一个实施例800。
在本实施例中指令读缓冲112由寄存器组802构成,该寄存器组的容量与一个指令块大小相同,含有处理器正在执行的当前指令块。为便于说明,假设一个指令块只有两条指令,即寄存器组802只包含了能存放两条指令的寄存器。包含更多指令的情况与此类似。
在本实施例中,包含处理器核116将要执行的指令在内的当前指令块都会被存储到寄存器组802中。也就是说,一旦处理器核即将执行的指令不在当前指令块中,则根据循迹器114的第一地址指针614将该指令所在的指令块从指令存储器106中读出并存储到寄存器组802中,同时将扫描器108提取的指令信息以及主动表104输出的块号信息存储到轨道表110中以建立对应这个指令块的轨道。由于轨道表110中的轨道与指令读缓冲112中的指令块一一对应,因此本实施例的轨道表110中只有一条轨道,而循迹器114按之前实施例所述方式更新读指针。
当处理器核116正在执行的当前指令不是指令块的最后一条指令且处理器核116对顺序下一条指令取指时,该下一条指令已经存储在寄存器组802中。因此选择器804和806选择来源于寄存器组802的输入,而选择器808根据程序计数器的低位810(即该下一条指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。这样,处理器核116就能以最少等待时间获取指令。
当处理器核116正在执行的当前指令是指令块的最后一条指令且处理器核116对顺序下一条指令取指时,由于该指令位于下一指令块,因此尚未存储在寄存器组802中。根据本发明技术方案及之前实施例所述,该下一指令块正在被预取,或已经被预取并存储在指令存储器106中。若该指令块已存储在指令存储器106中,则可以由循迹器114的第一地址指针614(即该指令块的块号)索引到该指令块,该指令块被读出,并由选择器804和806选择输出到选择器808。选择器808再根据程序计数器的低位810(即该下一条指令在指令块中的偏移量,也就是第一条指令)从送来的指令块中选出处理器核116所需指令。若该指令块正在预取中,则等待该指令块被取到并写入指令存储器106后,再按上述方法将处理器核116所需指令选出。此外,也可以在指令存储器106处设置旁路径,使得一旦该指令块被预取进来就能选出所需指令。
当处理器核116执行分支指令发生分支转移、需对分支目标指令取指时,若该分支目标指令就在当前指令块中,则选择器804和806选择来源于寄存器组802的输入,而选择器808根据程序计数器的低位810(即该分支目标指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。
若该分支目标指令不在当前指令块中,则根据本发明技术方案及之前实施例所述,包含该分支目标指令的指令块已经被预取并存储在指令存储器106中,或正在预取中。那么,若该指令块已存储在指令存储器106中,则可以由循迹器114的第一地址指针614(即该指令块的块号)索引、读出该指令块,并由选择器804和806选择输出到选择器808。选择器808再根据程序计数器的低位810(即该分支目标指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。若该指令块正在预取中,则等待该指令块被取到并写入指令存储器106后,再按上述方法将处理器核116所需指令选出。此外,也可以在指令存储器106处设置旁路径,使得一旦该指令块被预取进行就能选出所需指令。
图8B是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的一个改进实施例830。在本实施例中,主动表104、指令存储器106、扫描器108和循迹器114与图8A实施例相同,不同之处在于指令读缓冲112中包含一个存储器832,而非一个寄存器组。存储器832能够容纳至少两个指令块。相应地,轨道表110中也容纳了相应数目的轨道,这些轨道与存储器832中的指令块一一对应。
在本实施例中,一旦处理器核116执行到一个新的指令块,循迹器114就将该指令块对应轨道中结束轨迹点的内容(即顺序执行时的下一指令块的块号)读出,并通过第一地址指针614送到轨道表110和指令存储器106。该块号在轨道表110中与每条轨道对应的块号匹配,若匹配成功,则说明该下一指令块已经存储在存储器832中;若匹配不成功,则说明该下一指令块尚未存储在存储器832中,需要将其写入存储器832。
根据本发明技术方案及之前实施例所述,该下一指令块已经被预取并存储在指令存储器106中,或正在预取中。那么,若该下一指令块已存储在指令存储器106中,则可以由循迹器114的第一地址指针614(即该下一指令块的块号)索引、读出该指令块,并存储到指令读缓冲112的存储器832中。若该下一指令块正在预取中,则等待该指令块被取到并写入指令存储器106后,再按上述方法将其存储到存储器832中。若存储器832已满,则可以使用替换算法(如最近最少访问替换算法LRU或最少频繁访问替换算法LFU等)以该下一指令块覆盖一个已有指令块。同样地,在将该下一指令块写入存储器832的同时在轨道表110的相应位置建立对应轨道。
这样,当前指令块和下一指令块都被存储在指令读缓冲112中。无论处理器核116执行的当前指令的下一条指令是在同一指令块(即当前指令块),还是在下一指令块,都可以由循迹器114的第一地址指针614的值(即该下一条指令所在指令块对应的块号)经轨道表110中对应每条轨道的块号匹配后,根据匹配结果834在指令读缓冲112的存储器832中找到对应的指令块。之后,选择器804和806选择来源于存储器832的指令块,选择器808根据程序计数器的低位810(即该下一条指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。
当处理器核116执行分支指令发生分支转移、需对分支目标指令取指时,循迹器114将第一地址读指针614的值(即该分支指令的分支目标块号)送到轨道表110中与每条轨道的块号匹配。若匹配成功,则说明该分支目标指令所在的指令块已经存储在存储器832中,可以在存储器832中由匹配结果834索引,读出该指令块。之后,选择器804和806选择来源于存储器832的该指令块,选择器808根据程序计数器的低位(即该分支目标指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。
若匹配不成功,则说明该分支目标指令所在的指令块尚未存储在存储器832中。根据本发明技术方案及之前实施例所述,该分支目标指令所在的目标指令块已经被预取并存储在指令存储器106中,或正在预取中。那么,若该目标指令块已存储在指令存储器106中,则可以由循迹器114的第一地址指针614(即该目标指令块的块号)索引、读出该指令块。选择器804和806选择存储器832输出的该指令块到选择器808。选择器808再根据程序计数器的低位810(即该分支目标指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。若该指令块正在预取中,则等待该指令块被取到并写入指令存储器106后,再按上述方法将处理器核116所需指令选出。此外,也可以在指令存储器106处设置旁路径,使得一旦该指令块被预取进来就能选出所需指令。
图8C是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的又一个改进实施例860。在本实施例中,主动表104、指令存储器106、扫描器108和循迹器114与图8B实施例相同,不同之处在于指令读缓冲112除了包含存储器832,还包含一个输出寄存器组862。输出寄存器组862的容量与一个指令块大小相同,包含了处理器正在执行的当前指令块。为便于说明,假设一个指令块只有两条指令,即寄存器组862只包含了能存放两条指令的寄存器。包含更多指令的情况与此类似。这样,当处理器核116从输出寄存器组862获取当前指令的同时,存储器832的端口可以被用于提供分支目标指令或不在当前指令块内的下一条指令。如此,单端口(port)的存储器结合寄存器可同时提供两条相互独立的指令。
具体来说,与之前实施例所述情况类似,输出寄存器组862可以直接提供当前指令块;存储器832可以根据循迹器114第一地址指针614在轨道表中的匹配结果834提供下一指令块或分支目标指令块;指令存储器106可以根据循迹器114第一地址指针614提供分支目标指令块。选择器864和866根据处理器核116所需指令所在的指令块在上述三个存储单元中的匹配结果进行选择。若该指令块在输出寄存器组862中(即该指令块就是当前指令块),则选择器864和866选择输出寄存器组862输出的指令块送到选择器808;否则,若该指令块在存储器832中(即该指令块是下一指令块,或是已存储在存储器832中的分支目标指令块),则选择器864和866选择存储器832输出的指令块送到选择器808;否则,选择器864和866选择指令存储器106输出的指令块,或预取完成后指令存储器106输出(或旁路输出)的指令块送到选择器808。选择器808按之前实施例所述方法根据程序计数器的低位810从送来的指令块中选出处理器核116所需指令。
根据本发明所述技术方案,对上述实施例进行改进,可以在处理器核116取得分支指令的下一次取指时,同时向处理器核116输出该分支指令顺序执行的下一指令以及分支目标指令。图9A是本发明所述同时为处理器核提供下一指令及分支目标指令的一个实施例900。处理器核在同时取到分支指令之后顺序执行的下一指令和分支目标指令后,可以用两条流水线前若干流水线段(如:取指段、译码段)并行对这两条指令进行取指、译码等操作,等到分支转移是否发生确定后,再选择其中一条流水线的中间结果继续运行,完成之后的流水线段操作,从而提高处理器核的吞吐率,实现分支转移的零等待。
在本实施例中,主动表104、指令存储器106、扫描器108和循迹器114与图8C实施例相同,不同之处在于指令读缓冲112除了包含存储器832、输出寄存器组862外,还包含两套选择结构。选择器904、906和908用于选择输出下一指令902,选择器910、912和914用于选择输出分支目标指令916。
在本实施例中,输出寄存器组862可以提供当前指令块与相邻的下一指令块;存储器832可以根据循迹器114第一地址指针614在轨道表中的匹配结果834提供下一指令块或分支目标指令块;指令存储器106可以根据循迹器114的第一地址指针614提供分支目标指令块。选择器908受程序计数器810控制,从当前指令块内选出下一指令902;选择器910受从轨道表读出的分支轨迹点内容中的第二地址(即分支目标地址630中的第二地址)控制,从目标指令块中选出目标指令916。
若处理器核116当前执行的不是分支指令,且下一指令在当前指令块内,那么选择器904和906选择输出寄存器组862输出的指令块送到选择器908,再由选择器908按之前实施例所述方法根据程序计数器的低位810从送来的指令块中选出处理器核116所需的下一指令902。
若处理器核116当前执行的不是分支指令,且下一指令在下一指令块内(当前指令是指令块最后一条指令),那么由循迹器114的第一地址指针614的值(即该下一条指令所在的下一指令块对应的块号)经轨道表110中对应每条轨道的块号匹配后,根据匹配结果834在指令读缓冲112的存储器832中找到对应的下一指令块。选择器904和906选择存储器832输出的指令块送到选择器908,再由选择器908按之前实施例所述方法根据程序计数器的低位810从送来的指令块中选出处理器核116所需的下一指令902。
若处理器核116当前执行的是分支指令,则在按上述方法输出下一指令902的同时,由选择器910和912对来源于指令存储器106和存储器832的指令块进行选择,以选出分支目标指令块。此时,若下一指令在当前指令块内,则选择器910和912优先选择来源于存储器832的分支目标指令块(不对指令存储器106进行读操作以节省功耗),仅当分支目标指令块不在832中时,才选择来源于指令存储器106的分支目标指令块;若下一指令在下一指令块内(当前指令是指令块最后一条指令)则选择器910和912选择来源于指令存储器106的分支目标指令块。选择器908如前实施例所述方法根据分支目标地址的低位(即分支目标指令在分支目标指令块中的偏移量)从送来的指令块中选出处理器核116所需的分支目标指令916。
图9B是本发明所述同时为处理器核提供下一指令及分支目标指令的另一个实施例950。在本实施例中,主动表104、指令存储器106、扫描器108、循迹器114、输出寄存器组862和选择器904、906、908、910、912、914都与图9A实施例相同,不同之处在于用一个双输出端口存储器952代替了图9A的单输出端口存储器832。存储器952的两个输出端口954和956可以根据不同的寻址958和834,分别输出下一指令块和分支目标指令块。
因此,输出寄存器组862可以直接提供当前指令块;存储器952可以同时提供下一指令块以及分支目标指令块;指令存储器106可以提供分支目标指令块。
若下一指令所在的指令块就在输出寄存器组862中(即该指令块就是当前指令块),则选择器904和906选择输出寄存器组862输出的指令块送到选择器908;否则,选择器904和906选择存储器952输出端口954输出的下一指令块送到选择器908。选择器908按之前实施例所述方法根据程序计数器的低位810从送来的指令块中选出该下一指令902送到处理器核116。
若分支目标指令所在的指令块在存储器952中,则选择器910和912选择存储器952输出端口956输出的分支目标指令块送到选择器914;否则,选择器910和912选择指令存储器106输出的分支目标指令块,或预取完成后指令存储器106输出(或旁路输出)的分支目标指令块送到选择器914。选择器914按之前实施例所述方法根据分支目标地址的低位从送来的指令块中选出该分支目标指令916送到处理器核116。
采用双输出端口存储器952同时提供下一指令块和分支目标指令块,能降低指令存储器106的访问次数,从而降低功耗。
根据本发明技术方案,可以将经常被执行到的特定程序固定存储在指令存储器106中的指定位置,并在主动表104中的特定位置建立对应的指令行地址/行号匹配对,以减少指令行替换次数。也可以在指令存储器106中增加至少一个额外的存储单元,用于存储这种特定程序,且所述存储单元存储特定的程序。也就是说,所述存储单元对应的指令的起始地址是特定的,不需要在主动表104中匹配,可以减小主动表104的容量。图10是本发明所述包含用于存储特定程序的存储单元的指令存储器的实施例1000。为便于说明,图10中未显示指令存储器106中的寄存器304,且以一个额外的存储单元1002进行说明。对应包含更多额外存储单元的情况,也与此类似。
在图10中,指令存储器106中除了包含指令存储单元302以外(本实施例中未显示),还包含一个存储单元1002,用于存储特定的程序,如:异常处理程序(ExceptionHandling Program)等。主动表104中的匹配对与指令存储单元302中的指令行一一对应,而存储单元1002中的指令行是特定的,且对应特定的行号,因此不需要在主动表104中建立相应的匹配对。这些特定的行号与匹配对中的行号互不冲突。此外,存储单元1002中的每个存储行都有一个相应的有效位1004,用于表示对应的特定指令行是否已经存储在该存储行中。根据本发明技术方案,当处理器核116启动后,有效位1004均被设置为无效,填充器102利用取指的空闲时间,获取这些特定的指令行,写入存储器1002并将相应的有效位设置为有效
在本实施例中,扫描器除按之前实施例所述操作外,还优先将分支目标地址或下一指令块的地址与存储单元1002中指令行对应的地址进行匹配并检查对应的有效位,一旦匹配成功且该指令行有效,则表示所需指令行已经存储在存储单元1002中,不需要再到主动表104中进行匹配,即可直接输出上述特定行号。此外,当需要将指令块从指令存储器106填充到指令读缓冲112中时,若该指令块是这些特定行号对应的指令行所包含的指令块,则选择器1008受控制信号1006控制选择来源于存储单元1002的指令块送往指令读缓冲112;否则选择器1008受控制信号1006控制选择来源于指令存储单元302的指令块送往指令读缓冲112。
图11A是本发明所述用于选择指令块的匹配器的实施例1100。为了便于说明,假设本实施例中指令行、指令块、行号、块号之间的关系与图3B实施例相同。这样,指令块号(第一地址,BNX)比存储器块号多一位。指令块号的高位就是该指令块在存储器中的存储器块号。再假设指令块号的低位等同于32位指令地址的第4位,用以分辨同一存储器块中的两个不同指令块。这样,第二地址(BNY)就是32位指令地址的第3位至第2位,用于在指令块中对指令寻址,而第1位和第0位表示一条指令中的不同字节。
在本实施例中,如图3B实施例所述,假设指令存储器106中的一个指令行对应指令读缓冲112中的两个指令块且以指令地址中的第4位区分同一指令行中的不同指令块。根据本发明技术方案,指令读缓冲112中的每个指令块均有一个对应的匹配器。为了便于说明,在图11A中只显示了两个匹配器:匹配器1102和匹配器1122。以匹配器1102为例,匹配器1102中的寄存器1104存储了一个指令块号(BNX),与指令读缓冲112中的一个指令块及轨道表中的一条轨道相对应。匹配器1102中的比较器1110用于将寄存器1104中的块号与循迹器114输出的第一地址614进行比较,并输出比较结果(‘匹配成功’或‘匹配不成功’)。寄存器1108的写使能受处理器核116输出的BRANCH信号634控制,当BRANCH信号634有效时,更新寄存器1108的值。寄存器1108的值和比较器1104的输出被送到或门1107进行逻辑或操作。匹配器1102中的比较器1106用于比较处理器核116输出的指令地址值中的第4位1119与存储在寄存器1104中的指令块号的第4位,其比较结果与或门1107的输出值一起送到与门1114中进行逻辑与操作。若该比较结果为‘匹配’且或门1107输出的值为‘有效’,则与门1114输出‘有效’,表示指令读缓冲112中对应的指令块是处理器核116所需的指令块,否则,与门1114输出‘无效’,表示指令读缓冲112中对应的指令块不是处理器核116所需的指令块。这样,就可以指出处理器核116所需的指令块。此外,比较器1110的输出也被送到轨道表110用以指出当前轨道,该当前轨道被用于指令循迹器114读指针移动的相关操作。
匹配器1222中的寄存器1124、比较器1126、寄存器1128、比较器1130、或门1127、与门1134分别与匹配器1102中的寄存器1104、比较器1106、寄存器1108、比较器1110、或门1107、与门1114对应,执行类似的操作。
以下通过一个具体的例子对匹配器进行说明。为便于说明,在本实施例中,假设目标指令块已经被预取到指令存储器106中,且该目标指令块及其相邻的下一指令块均尚未被写入指令读缓冲112中。对于其他的情况,也可以参照之前实施例的说明进行类似操作,在此不再说明。本实施例中循迹器114的读指针停止在处理器核116正在执行的当前指令之后的第二个分支轨迹点处(结束轨迹点也被视为分支轨迹点)。此外,为清晰起见,在图11A中省略了扫描器108和主动表104。
假设当前分支指令的分支转移成功发生,则可以用从轨道表110中读出的分支轨迹点内容630中的第一地址(即块号)在指令存储器106中寻址,通过总线1117读出分支目标指令块。处理器核116接收并选择来源于总线1117的目标指令块中的指令作为下一步将被执行的指令。
按之前实施例所述技术方案,此时轨道表110和指令读缓冲112中的替换逻辑已经指出可以被替换的轨道(如:轨道1116)和指令块(如:指令块1118)。与轨道1116及指令块1118对应的匹配器是匹配器1102。
因此,经扫描器108审查、提取得到的指令类型及经主动表104匹配或分配产生的块号等指令信息被存储到轨道表110的轨道1116中,同时轨迹点内容630中的第一地址被存储到匹配器1102中的寄存器1104中,且总线1117上的目标指令块被存储到指令读缓冲112的指令块1118中。
之后,轨道表110和指令读缓冲112中的替换逻辑指向下一个可被替换的轨道(如:轨道1120)和指令块(如:指令块1138)。与轨道1120及指令块1138对应的匹配器是匹配器1122。
与此同时,可以计算出指令块1118相邻的下一个指令块的地址,从而在主动表104中匹配得到该下一指令块对应的块号,该块号(即第一地址)被存储在轨道1116的结束轨迹点中,并被送到指令存储器106寻址,通过总线1117从指令存储器106中读出指令块1118相邻的下一指令块。类似地,该下一指令块经扫描器108审查、提取得到的指令类型及经主动表104匹配或分配产生的块号等指令信息被存储到轨道表110的轨道1120中,同时轨迹点内容630中的第一地址(即该下一指令块对应的块号)被存储到匹配器1122中的寄存器1124中,且总线1117上的指令块(即该下一指令块)被存储到指令读缓冲112的指令块1138中。
由于上述分支指令的分支转移成功发生,选择器608受TAKEN信号622控制选择来自总线630的该分支指令的分支目标轨迹点位置信息作为输出,而寄存器610的值受BRANCH信号634控制更新为该分支目标轨迹点的第一地址和第二地址。各个匹配器中的相应寄存器(如匹配器1102中的寄存器1108、匹配器1122中的寄存器1128)的值也都受BRANCH信号634控制得以更新,将之前比较器(如匹配器1102中的比较器1110、匹配器1122中的比较器1130)的输出写入这些寄存器中。
当寄存器610的值更新完毕后,新的第一地址读指针614的值(即当前轨道的块号)被送到各个匹配器中与存储在寄存器(如寄存器1104、1124等)中的块号进行匹配,其中匹配器1102中的比较器1110输出匹配成功的比较结果,其他匹配器中的比较器均输出匹配不成功的比较结果,因此,比较器1110的输出选中轨道1116,使得轨道1116成为当前轨道。而新的第二地址读指针616则从轨道1116上与寄存器610中存储的第二地址相对应的轨迹点开始移动,直到停留在下一个分支轨迹点并通过总线630读出该分支轨迹点的内容。
此时,匹配器1102中的或门1107的两个输入中,来自比较器1110的输入为‘1’,来自寄存器1108的输入为‘0’,因此或门1107的输出为‘1’。而其他匹配器中的相应或门(如:匹配器1122中的或门1127等)的两个输入均为‘0’,其输出均为‘0’。由于处理器核116所需执行的指令在轨道1116对应的指令块内,如图3B实施例所述,处理器核116送出的指令地址的第4位1119与存储在寄存器1104中的块号最低位相同,因此比较器1106输出‘匹配成功’的结果(即输出‘1’),使得与门1114的两个输入均为‘1’,其输出也为‘1’,从而选中指令块1118作为当前指令块通过总线1115送往处理器核116。其他匹配器中的相应与门(如:匹配器1122中的与门1127等)的来自或门的输入均为‘0’,其输出也均为‘0’,因此不会选中其他指令块。
接下来假设当前轨道中没有分支轨迹点或有分支轨迹点但分支转移均不发生,则循迹器114的读指针继续移动直到结束轨迹点,通过总线630读出存储在该结束轨迹点中的下一轨道块号信息。
由于结束轨迹点被视为分支转移一定发生的分支轨迹点,因此TAKEN信号622选择来自总线630的下一轨道信息作为选择器608的输出,BRANCH信号634控制寄存器610的值更新为下一轨道的第一个轨迹点的第一地址和第二地址。与此同时,BRANCH信号634还控制各个匹配器中的相应寄存器(如:寄存器1108、1128等)值的更新,将比较器(如:比较器1110、1130等)原来的输出存储到这些寄存器中,从而保存了比较器的上一次比较结果。
当寄存器610的值更新完毕后,新的第一地址读指针614的值(即下一轨道的块号)被送到各个匹配器中与存储在寄存器(如寄存器1104、1124等)中的块号进行匹配,其中匹配器1122中的比较器1130输出匹配成功的比较结果,其他匹配器中的比较器均输出匹配不成功的比较结果,因此,比较器1130的输出选中轨道1120,使得轨道1120成为供循迹器114读指针移动的轨道。而新的第二地址读指针616则从轨道1120上与寄存器610中存储的第二地址相对应的轨迹点开始移动,直到停留在下一个分支轨迹点并通过总线630读出该分支轨迹点的内容。
此时,匹配器1102中的或门1107的两个输入中,来自比较器1110的输入为‘0’,来自寄存器1108的输入为‘1’,因此或门1107的输出为‘1’;匹配器1122中的或门1127的两个输入中,来自比较器1130的输入为‘1’,来自寄存器1128的输入为‘0’,因此或门1127的输出也为‘1’。这样,匹配器1102对应的指令块1118和匹配器1122对应的指令块1138均为可能被选中的指令块。而其他匹配器中的相应或门的两个输入均为‘0’,其输出均为‘0’。由于指令块1118和指令块1138是指令地址相邻的两个指令块,如图3B实施例所述,这两个指令块的块地址(及块号)最低位的值相反,因此,根据处理器核116所需执行的指令的指令地址的第4位1119可以使比较器1106和比较器1126中的一个输出‘匹配成功’的结果(即输出‘1’),从而使得与门1114和与门1134中的一个输出‘1’,从指令块1118或指令块1138中选出一个指令块通过总线1115送往处理器核116,该指令块包含了处理器核所需执行的指令。这样,循迹器114读指针的移动与处理器核116的取指可以不必同步发生,即循迹器114读指针指向的轨道与处理器核116取指时读出的指令块可以不相互对应。
在后续的运行过程中,当寄存器610的值再次被更新且指向另外一条轨道(该轨道非轨道1116或轨道1120之一)时,BRANCH信号634控制匹配器中相应寄存器(如:寄存器1108、1128等)值的更新,将比较器(如:比较器1110、1130等)原来的输出存储到这些寄存器中,并在寄存器610的值更新完毕后,将新的第一地址读指针614的值(即上述新轨道的块号)被送到各个匹配器中与存储在寄存器(如寄存器1104、1124等)中的块号进行匹配。这样,比较器1110的输出结果为‘匹配不成功’,且寄存器1108存储的值为‘0’,使得或门1107和与门1114的输出均为‘0’,即指令块1118不再是可能被选中的指令块。比较器1130的输出结果为‘匹配不成功’,但寄存器1128存储的值为‘1’,使得或门1127的输出为‘1’,即指令块1138依然是可能被选中的指令块。如之前所述,各个匹配器对第一地址读指针614的值(块号)匹配后,可以找到与该块号对应的一条轨道和一个可能被选中的指令块。同样地,可以根据处理器核116送出的指令地址第4位1119从这两个可能被选中的指令块中选出包含处理器核所需执行的指令在内的一个指令块。
图11B是本发明所述用于选择指令块的匹配器的另一个实施例。在本实施例中,指令读缓冲是双端口存储器,除第一端口1115外,还增加了第二端口1192。以匹配器1152为例,其中的寄存器1104、比较器1106、寄存器1108、或门1107和与门1114与图11A实施例中的相同。不同的是,匹配器1152中的比较器1110被称为第一比较器,此外还增加了一个第二比较器1150。其中,第二比较器1150用于对匹配器1152中存储的块号和通过总线630输入的目标块号进行比较,并以其输出作为字线对指令读缓冲112的第二端口进行寻址,从而通过总线1190读出目标指令段。此外,第二比较器1150的输出还指向了轨道表110中的目标轨道。
以下通过一个具体的例子对匹配器进行说明。为便于说明,在本实施例中,假设目标指令块已经被预取到指令存储器106中。对于其他的情况,也可以参照之前实施例的说明进行类似操作,在此不再说明。本实施例中循迹器114的读指针停止在处理器核116正在执行的当前指令之后的第二个分支轨迹点处(结束轨迹点也被视为分支轨迹点)。此外,为清晰起见,在图11B中省略了扫描器108和主动表104。
假设当前循迹器114的读指针指向一个分支轨迹点,则可以用从轨道表110中读出的分支轨迹点内容630中的第一地址(即块号)在各个匹配器的相应第二比较器(如:第二比较器1150、1160、1180等)中进行匹配。若匹配不成功,则按之前实施例所述方法,将该块号送到指令存储器106寻址,通过总线1194读出分支目标指令块,并由选择器1190选择后作为输出经总线1117送往处理器核116。若匹配成功,则可以根据这些第二比较器的匹配结果,从指令读缓冲112中通过总线1192从第二端口读出一个指令块(即分支目标指令块),并由选择器1190选择后作为输出经总线1117送往处理器核116。此外,与图11A实施例所述相同,当前指令块经总线1115被送往处理器核116。
若该分支轨迹点的分支转移没有发生,则处理器核116执行来源于总线1115的该分支指令顺序执行的后一条指令。循迹器114的读指针继续移动直到下一个分支轨迹点,读出该分支轨迹点的内容630中的第一地址(即块号)在各个匹配器的相应比较器中进行匹配,并按之前所述方法进行后续操作。
若该分支轨迹点的分支转移成功发生,则处理器核116执行来源于总线1117的该分支指令的分支目标指令。与图11A所述实施例相同,选择器608受TAKEN信号622控制选择来自总线630的该分支指令的分支目标轨迹点位置信息作为输出,而寄存器610的值受BRANCH信号634控制更新为该分支目标轨迹点的第一地址和第二地址。各个匹配器中的相应寄存器的值也都受BRANCH信号634控制得以更新,将之前第一比较器的输出写入这些寄存器中。当寄存器610的值更新完毕后,新的第一地址读指针614的值被送到各个匹配器中的第一比较器与存储在寄存器中的块号进行匹配。根据匹配结果,可以按图11A实施例所述方法确定两个可能被选中的指令块,并根据处理器核116送出的指令地址第4位1119从这两个可能被选中的指令块中选出包含处理器核所需执行的指令在内的一个指令块作为新的当前指令块通过总线1115送往处理器核116。之后的操作与之前实施例所述相同,在此不再说明。
图12A是根据本发明所述技术方案进行指令预取的实施例1200。在本实施例中,填充器102、扫描器108、主动表104、微型主动表1202、指令存储器106、指令读缓冲112和处理器核116与之前实施例相同。不同的是,循迹器114中增加了寄存器1206、选择器1226和选择器1228。
寄存器1206保存了当前指令之后的第一个分支轨迹点的分支目标轨迹点位置信息,使得循迹器114的读指针可以继续移动以指向第二个分支轨迹点。
选择器1228由表示循迹器114第二地址读指针616是否指向结束轨迹点的END信号1222控制,当第二地址读指针616指向结束轨迹点时,选择器1228选择来源于轨道表110的结束轨迹点内容(即下一轨道的块号)作为输出,否则,选择器1228选择来源于加法器606的加法结果作为输出。这样当第二地址读指针616移动到轨道的结束轨迹点时,下一轨道的块号可以在不影响寄存器1206中存储的第一个分支点的分支目标轨迹点位置信息的情况下被旁路写入寄存器610中,使得循迹器114的读指针能移动到下一轨道,进而指向第二个分支点。
选择器1226则受循迹器114读指针指向的分支指令类型控制。当该分支指令为间接分支指令时,选择器1226选择第一地址读指针614的值作为输出1224,否则选择器1226选择存储在寄存器1206中的第一个分支点的分支目标轨迹点信息630作为输出1224。这样,当该分支指令是间接分支指令时,所述分支目标轨迹点信息630被强制置为该间接分支指令的轨迹点位置信息,从而使指令读缓冲112能输出该间接分支指令的基地址寄存器号和地址偏移量。这里的地址偏移量可以是间接分支指令用于计算分支目标地址的偏移量。
此外,为了便于显示,在本实施例中省略了图6B中用于判断基地址寄存器值更新时间点的模块。
在本实施例中,指令存储器106的每个存储块含有2个地址连续的指令块;其中每个指令块包含8条指令(8 instructions),每条指令含4个字节(Byte)。指令读缓冲112包含了复数个独立的指令块;它们的指令地址可以是连续的,或不连续的;每一块都与轨道表110中的一条轨道相对应。轨道表110由匹配器536、指令类型存储器550和轨迹点存储单元548构成。其中,轨迹点存储单元548存储的轨迹点包含了分支指令相关的信息,如:分支目标第一地址和分支目标第二地址。
在本实施例中,处理器核116同时获取顺序执行下一指令1115和分支目标指令1117,且匹配器536的结构与图11B中的匹配器相同。处理器核116可以根据分支指令执行结果从顺序执行下一指令1115和分支目标指令1117中选择正确的指令作为后续执行的指令。
在本实施例中,指令读缓冲112是具有双输出端口的存储器。指令读缓冲112根据循迹器114的第一地址读指针614寻址找到一个指令块(即当前指令块),并根据处理器核116输出的指令地址的低位1218从该指令块中选择至少一条指令,作为第一输出端口1115的输出送往处理器核116;指令读缓冲112还根据来源于选择器1226的轨迹点信息1224寻址找到对应指令块通过第二输出端口1117送往处理器核116。当该分支指令是间接分支指令时,所述轨迹点信息1224就是该间接分支指令本身的轨迹点信息,因此指令读缓冲112的第二输出端口1117可以输出该间接分支指令的基地址寄存器号和地址偏移量;否则,所述轨迹点信息1224就是分支目标轨迹点信息630,因此指令读缓冲112的第二输出端口1117输出的就是分支目标指令块。
下面将以图12B为例进行具体说明。图12B是根据本发明技术方案对指令块操作的一个实施例1250。在图12B中显示了存储在轨道表110中的两条轨道、存储在指令读缓冲112中的对应的两个指令块以及存储在指令类型存储器548中的对应指令类型。
轨道1260对应的轨道号为‘0’(即BNX0),其第2个轨迹点是一条直接分支指令,结束轨迹点1264中存储的顺序执行下一指令块对应的轨道号为‘3’(即BNX3)。相应地,在指令类型行1252中,第2条指令的对应指令类型为‘10’,表示这是一条分支指令(在本实施例中该分支指令的分支目标指令对应第7号轨道的第2个轨迹点),其他位置的指令类型为‘00’,表示这些都不是分支指令(为简明起见,,在本实施例中没有显示指令类型中的‘00’)。
轨道1262对应的轨道号为‘3’(即BNX3),其第2个轨迹点是一条间接分支指令,结束轨迹点1264中存储了顺序执行下一指令块对应的轨道号。轨道1262对应的指令块1270中的第2条指令可以提供对应的间接分支指令用到的基地址寄存器号和偏移量。相应地,在指令类型行1254中,第2条指令的对应指令类型为‘11’,表示这是一条间接分支指令,其他位置的指令类型为‘00’,表示这些都不是分支指令。
这样,在轨道表110、指令类型存储器550和指令读缓冲112中都存储了相应的信息,且指令块1268顺序执行的下一指令块就是指令块1270。下面将在图12A实施例中根据图12B中的例子对相关操作进行说明。本实施例中当前指令之后的第一个分支轨迹点的分支目标信息被存储在寄存器1206中,而循迹器114的读指针指向第二个分支轨迹点处,并等待第一个分支轨迹点的执行结果。
循迹器114从轨迹点‘00’(即第0号轨道的第0号轨迹点,此时第一地址读指针614值为‘0’,第二地址读指针616的值为‘0’)开始运行,循迹器114移动第二地址读指针616指向并停止在轨迹点‘02’(即第0号轨道的第2号轨迹点,此时第一地址读指针614值为‘0’,第二地址读指针616的值为‘2’)。根据循迹器114读指针的寻址,从轨道表中读出分支目标指令轨迹点位置‘75’(即第7号轨道的第5个轨迹点)并存储在寄存器1206中,同时以该轨迹点位置‘75’对指令读缓冲112进行寻址,从而将第7号轨道对应的指令块从指令读缓冲112的第二输出端口1117中读出。
然后,循迹器114继续移动直至位于位置‘08’(即第0号轨道的结束轨迹点,此时第一地址读指针614值为‘0’,第二地址读指针614值为‘8’)的结束轨迹点,根据读出的轨道号‘3’直接将循迹器114的读指针指向轨迹点‘30’(即第3号轨道的第0号轨迹点,此时第一地址读指针614值为‘3’,第二地址读指针616的值为‘0’)。之后循迹器114进一步移动读指针停止在轨迹点‘32’(即第3号轨道的第2号轨迹点,此时第一地址读指针614值为‘3’,第二地址读指针616的值为‘2’)。
如果轨迹点‘02’对应的分支转移成功发生,那么处理器核116选择来源于第二输出端口1117的分支目标指令作为下一执行的指令。寄存器1206中存储的内容被更新到寄存器610中。此时,第一地址读指针614值为‘7’,第二地址读指针616的值为‘5’,循迹器114开始在第7号轨道上移动并从第5个轨迹点开始寻找下一个分支轨迹点(为简明起见,在图12B中未显示第7号轨道)。
如果轨迹点‘02’对应的分支转移不成功,循迹器114的第一读指针614和第二读指针616继续停留并指向分支轨迹点‘32’。此时,由于指令类型‘11’表示该指令是一条间接分支指令,选择器1226选择第一地址读指针614的值作为输出1224送到匹配器536匹配后,从轨道表110中可以读出指令间隔数‘-1’。此外还可以从指令读缓冲112的第二输出端口1117中读出基地址寄存器号和间接分支偏移量。其中,基地址寄存器号被送到处理器核116以获取基地址寄存器值,间接分支偏移量被送到加法器1236。当程序计数器到达轨迹点‘31’(该轨迹点位置值由循迹器读指针616的值‘32’与指令间隔数‘-1’相加得到)对应的指令时,将处理器核116送出的基地址寄存器值1234作为加法器1236的另一个输入,计算产生间接分支的分支目标地址1238。
该分支目标地址1238被送到主动表104进行匹配。需要说明的是,选择器1242仅在此时选择分支目标地址1238作为输出送往主动表(或微型主动表)进行匹配(通过对指令类型存储器550中读出的类型值进行译码,即可判断出该时间点),其他时间均选择来自扫描器108的分支目标地址作为输出送往主动表(或微型主动表)。若在主动表104中匹配不成功(即对应指令块尚未存储在指令存储器106中),则由主动表104分配一个新的块号(BNX),并将该分支目标地址1238送到填充器102,从外部存储器获取该指令块并根据上述分配的块号填充指令存储器106。若在主动表104中匹配成功,则从主动表104中读出该地址对应的块号。
若该分支指令的分支转移没有发生,则循迹器114的读指针沿第3号轨道继续寻找下一个分支点。
若该分支指令的分支转移成功发生,前述块号不被填入轨道表110,而直接被旁路写入寄存器610中以更新循迹器114的读指针。该块号也被送到匹配器536中进行匹配,若在匹配器536中匹配成功,则该块号对应的轨道已在轨道表110,指令块已在指令读缓冲112中。若在匹配器536中匹配不成功,则表示轨道表110中尚未建立该块号对应的轨道,需要将该块号对应的指令从指令存储器106填充到指令读缓冲112中,并在轨道表110中建立该分支目标指令块对应的轨道。由循迹器114第一地址读指针614指出的该轨道中的由第二地址读指针616指出的指令轨迹点被从轨道表110中读出。循迹器114的读指针由此点出发移向下一个分支点。
后续操作与之前实施例所述相同,在此不再说明。
需要注意的是,图12A及图12B的相关说明只是为了阐述本发明技术方案的一个具体实施例。除此以外,根据本发明的技术方案和构思,可以对该具体实施例作出相应的改动。例如。可以将结束轨迹点视为分支转移必定发生的分支轨迹点,且当结束轨迹点是当前指令之后的第二个分支轨迹点时,循迹器114的读指针可以停留并指向该结束轨迹点,直至第一个分支轨迹点执行完毕为止。根据本发明技术方案和构思,还可以有其他任何合适的改动。对于本领域普通技术人员来说,所有这些替换、调整和改进都应属于本发明所附权利要求的保护范围。
Claims (36)
1.一种用于辅助处理器核运行的方法,所述处理器核连接一个包含可执行指令的第一存储器、一个比第一存储器速度更快的第二存储器和一个比第二存储器速度更快的第三存储器;所述方法包括:
对正被从第二存储器填充到第三存储器的指令进行审查,从而提取出至少包括分支信息的指令信息;
根据提取出的指令信息建立复数条轨道;
将最后更新间接分支指令中基地址寄存器值的指令与该间接分支指令之间的距离记录在轨道中该间接分支指令对应的表项中,以确定该基地址寄存器更新完毕的时间点;
根据复数条轨道中的一条或多条轨道将至少一条或多条可能被处理器核执行的指令从第一存储器填充到第二存储器;
根据复数条轨道中的一条或多条轨道将至少一条或多条指令在被处理器核执行前从第二存储器填充到第三存储器,使得处理器核能从第三存储器获取所述至少一条或多条指令。
2.根据权利要求1所述方法,其特征在于将所述轨道与第三存储器中的指令块一一对应。
3.根据权利要求1所述方法,其特征在于第二存储器和第三存储器均可以有输出寄存器,使得在保持输出值不变的情况下能进行新的存储器寻址。
4.根据权利要求1所述方法,其特征在于可以由扫描器对目标指令的地址进行判断,从而确定该目标指令是否属于第三存储器中的某个指令块。
5.根据权利要求1所述方法,其特征在于:
建立一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
轨道表表项的格式包括指令类型、第一地址和第二地址,结束轨迹点对应的表项格式包括指令类型、第一地址,结束轨迹点对应的第二地址为常数。
6.根据权利要求1所述方法,其特征在于:
建立一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
可以在轨道表外增加一个临时寄存器行用于存放正被建立的轨道的信息,使得整条轨道可以在建立完成后被一起写入轨道表。
7.根据权利要求1所述方法,其特征在于同一条轨道中的所有指令类型可以被一次读出。
8.根据权利要求7所述方法,其特征在于循迹器根据读出轨道中的指令类型,将读指针移动到当前指令后的第一条分支指令对应的轨迹点。
9.根据权利要求1所述方法,其特征在于可以有一个对应轨道表中轨道块号与指令读缓冲中指令块地址的微型主动表。
10.根据权利要求1所述方法,其特征在于:
建立一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
用主动表存储了指令行地址与行号的匹配对;所述主动表中的表项与指令存储器中的存储行一一对应;
可以用计数器记录主动表中块号被轨道表引用的次数,使得当前被轨道表引用的块号不会被替换出主动表。
11.根据权利要求1所述方法,其特征在于:
建立一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
用主动表存储了指令行地址与行号的匹配对;所述主动表中的表项与指令存储器中的存储行一一对应;
可以用一个读指针对轨道表进行扫描,一旦发现有对主动表块号的引用就将主动表对应块号的标志位置位;同时用一个循环指针依次将主动表中各个块号的标志位复位,从而用已置位的标志位表示当前被轨道表引用的块号,使之不会被替换出主动表;所述循环指针的移动速度比所述读指针的移动速度慢。
12.根据权利要求1所述方法,其特征在于可以由第三存储器提供当前指令块。
13.根据权利要求1所述方法,其特征在于可以由第三存储器提供下一指令块。
14.根据权利要求1所述方法,其特征在于可以由第三存储器或第二存储器提供目标指令块。
15.根据权利要求1所述方法,其特征在于可以由第三存储器提供当前指令块,且同时由第二存储器提供目标指令块。
16.根据权利要求1所述方法,其特征在于可以通过匹配,在第三存储器中同时找到当前指令块和下一指令块。
17.根据权利要求1所述方法,其特征在于可以通过匹配,在第三存储器中同时找到当前指令块、下一指令块和目标指令块。
18.根据权利要求16所述方法,其特征在于可以根据指令地址的部分位,从当前指令块和下一指令块中找到所需指令。
19.一种用于辅助处理器核运行的系统,所述处理器核连接一个包含可执行指令的第一存储器、一个比第一存储器速度更快的第二存储器和一个比第二存储器速度更快的第三存储器;所述系统包括:
对正被从第二存储器填充到第三存储器的指令进行审查,从而提取出至少包括分支信息的指令信息;
根据提取出的指令信息建立复数条轨道;
将最后更新间接分支指令中基地址寄存器值的指令与该间接分支指令之间的距离记录在轨道中该间接分支指令对应的表项中,以确定该基地址寄存器更新完毕的时间点;
根据复数条轨道中的一条或多条轨道将至少一条或多条可能被处理器核执行的指令从第一存储器填充到第二存储器;
根据复数条轨道中的一条或多条轨道将至少一条或多条指令在被处理器核执行前从第二存储器填充到第三存储器,使得处理器核能从第三存储器获取所述至少一条或多条指令。
20.根据权利要求19所述系统,其特征在于将所述轨道与第三存储器中的指令块一一对应。
21.根据权利要求19所述系统,其特征在于第二存储器和第三存储器均可以有输出寄存器,使得在保持输出值不变的情况下能进行新的存储器寻址。
22.根据权利要求19所述系统,其特征在于可以由扫描器对目标指令的地址进行判断,从而确定该目标指令是否属于第三存储器中的某个指令块。
23.根据权利要求19所述系统,其特征在于:
建立一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
轨道表表项的格式包括指令类型、第一地址和第二地址,结束轨迹点对应的表项格式包括指令类型、第一地址,结束轨迹点对应的第二地址为常数。
24.根据权利要求19所述系统,其特征在于:
建立一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
可以在轨道表外增加一个临时寄存器行用于存放正被建立的轨道的信息,使得整条轨道可以在建立完成后被一起写入轨道表。
25.根据权利要求19所述系统,其特征在于同一条轨道中的所有指令类型可以被一次读出。
26.根据权利要求25所述系统,其特征在于循迹器根据读出轨道中的指令类型,将读指针移动到当前指令后的第一条分支指令对应的轨迹点。
27.根据权利要求19所述系统,其特征在于可以有一个对应轨道表中轨道块号与指令读缓冲中指令块地址的微型主动表。
28.根据权利要求19所述系统,其特征在于:
建立一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
用主动表存储了指令行地址与行号的匹配对;所述主动表中的表项与指令存储器中的存储行一一对应;
可以用计数器记录主动表中块号被轨道表引用的次数,使得当前被轨道表引用的块号不会被替换出主动表。
29.根据权利要求19所述系统,其特征在于:
建立一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
用主动表存储了指令行地址与行号的匹配对;所述主动表中的表项与指令存储器中的存储行一一对应;
可以用一个读指针对轨道表进行扫描,一旦发现有对主动表块号的引用就将主动表对应块号的标志位置位;同时用一个循环指针依次将主动表中各个块号的标志位复位,从而用已置位的标志位表示当前被轨道表引用的块号,使之不会被替换出主动表;所述循环指针的移动速度比所述读指针的移动速度慢。
30.根据权利要求19所述系统,其特征在于可以由第三存储器提供当前指令块。
31.根据权利要求19所述系统,其特征在于可以由第三存储器提供下一指令块。
32.根据权利要求19所述系统,其特征在于可以由第三存储器或第二存储器提供目标指令块。
33.根据权利要求19所述系统,其特征在于可以由第三存储器提供当前指令块,且同时由第二存储器提供目标指令块。
34.根据权利要求19所述系统,其特征在于可以通过匹配,在第三存储器中同时找到当前指令块和下一指令块。
35.根据权利要求19所述系统,其特征在于可以通过匹配,在第三存储器中同时找到当前指令块、下一指令块和目标指令块。
36.根据权利要求34所述系统,其特征在于可以根据指令地址的部分位,从当前指令块和下一指令块中找到所需指令。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210228129.9A CN103513958B (zh) | 2012-06-27 | 2012-06-27 | 高性能指令缓存系统和方法 |
PCT/CN2013/077889 WO2014000624A1 (en) | 2012-06-27 | 2013-06-25 | High-performance instruction cache system and method |
US14/410,615 US9753855B2 (en) | 2012-06-27 | 2013-06-25 | High-performance instruction cache system and method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210228129.9A CN103513958B (zh) | 2012-06-27 | 2012-06-27 | 高性能指令缓存系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103513958A CN103513958A (zh) | 2014-01-15 |
CN103513958B true CN103513958B (zh) | 2017-01-25 |
Family
ID=49782238
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210228129.9A Active CN103513958B (zh) | 2012-06-27 | 2012-06-27 | 高性能指令缓存系统和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9753855B2 (zh) |
CN (1) | CN103513958B (zh) |
WO (1) | WO2014000624A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104978282B (zh) * | 2014-04-04 | 2019-10-01 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
CN104156181B (zh) * | 2014-08-18 | 2017-02-15 | 上海众恒信息产业股份有限公司 | 虚拟资源交叉访问与安全隔离方法 |
JP6457836B2 (ja) * | 2015-02-26 | 2019-01-23 | ルネサスエレクトロニクス株式会社 | プロセッサおよび命令コード生成装置 |
US10303477B2 (en) | 2015-06-26 | 2019-05-28 | Intel Corporation | Persistent commit processors, methods, systems, and instructions |
CN107665125B (zh) * | 2016-07-29 | 2021-03-09 | 北京小米移动软件有限公司 | 执行操作指令的方法及装置 |
US10725699B2 (en) * | 2017-12-08 | 2020-07-28 | Sandisk Technologies Llc | Microcontroller instruction memory architecture for non-volatile memory |
CN112506823B (zh) * | 2020-12-11 | 2023-09-29 | 盛立安元科技(杭州)股份有限公司 | 一种fpga数据读写方法、装置、设备及可读存储介质 |
CN113656330B (zh) * | 2021-10-20 | 2022-02-15 | 北京微核芯科技有限公司 | 确定访问地址的方法和装置 |
US11960893B2 (en) | 2021-12-29 | 2024-04-16 | International Business Machines Corporation | Multi-table instruction prefetch unit for microprocessor |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5243705A (en) * | 1989-12-11 | 1993-09-07 | Mitsubishi Denki K.K. | System for rapid return of exceptional processing during sequence operation instruction execution |
US5717946A (en) * | 1993-10-18 | 1998-02-10 | Mitsubishi Denki Kabushiki Kaisha | Data processor |
CN1169045C (zh) * | 1997-10-23 | 2004-09-29 | 英特尔公司 | 基于跟踪的指令高速缓冲存储 |
CN102110058A (zh) * | 2009-12-25 | 2011-06-29 | 上海芯豪微电子有限公司 | 一种低缺失率、低缺失惩罚的缓存方法和装置 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5860104A (en) * | 1995-08-31 | 1999-01-12 | Advanced Micro Devices, Inc. | Data cache which speculatively updates a predicted data cache storage location with store data and subsequently corrects mispredicted updates |
US6279106B1 (en) * | 1998-09-21 | 2001-08-21 | Advanced Micro Devices, Inc. | Method for reducing branch target storage by calculating direct branch targets on the fly |
US6311260B1 (en) * | 1999-02-25 | 2001-10-30 | Nec Research Institute, Inc. | Method for perfetching structured data |
US6449701B1 (en) * | 2000-09-20 | 2002-09-10 | Broadcom Corporation | Out of order associative queue in two clock domains |
JP3683248B2 (ja) | 2002-10-22 | 2005-08-17 | 富士通株式会社 | 情報処理装置及び情報処理方法 |
CN1293485C (zh) | 2003-07-23 | 2007-01-03 | 凌阳科技股份有限公司 | 以资料区块混淆处理来保护资料的处理器装置及方法 |
US7055004B2 (en) * | 2003-09-04 | 2006-05-30 | International Business Machines Corporation | Pseudo-LRU for a locking cache |
EP1868081A4 (en) | 2005-04-08 | 2008-08-13 | Matsushita Electric Ind Co Ltd | PROCESSOR |
US7836284B2 (en) * | 2005-06-09 | 2010-11-16 | Qualcomm Incorporated | Microprocessor with automatic selection of processing parallelism mode based on width data of instructions |
US20080162819A1 (en) * | 2006-02-03 | 2008-07-03 | Luick David A | Design structure for self prefetching l2 cache mechanism for data lines |
EP2115593B1 (en) * | 2007-01-26 | 2018-10-24 | Intel Corporation | Hierarchical immutable content-addressable memory processor |
JP4294059B2 (ja) * | 2007-03-22 | 2009-07-08 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置および情報処理方法 |
US7711929B2 (en) * | 2007-08-30 | 2010-05-04 | International Business Machines Corporation | Method and system for tracking instruction dependency in an out-of-order processor |
US9411591B2 (en) * | 2012-03-16 | 2016-08-09 | International Business Machines Corporation | Run-time instrumentation sampling in transactional-execution mode |
US9213641B2 (en) * | 2012-06-14 | 2015-12-15 | International Business Machines Corporation | Cache line history tracking using an instruction address register file |
-
2012
- 2012-06-27 CN CN201210228129.9A patent/CN103513958B/zh active Active
-
2013
- 2013-06-25 US US14/410,615 patent/US9753855B2/en active Active
- 2013-06-25 WO PCT/CN2013/077889 patent/WO2014000624A1/en active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5243705A (en) * | 1989-12-11 | 1993-09-07 | Mitsubishi Denki K.K. | System for rapid return of exceptional processing during sequence operation instruction execution |
US5717946A (en) * | 1993-10-18 | 1998-02-10 | Mitsubishi Denki Kabushiki Kaisha | Data processor |
CN1169045C (zh) * | 1997-10-23 | 2004-09-29 | 英特尔公司 | 基于跟踪的指令高速缓冲存储 |
CN102110058A (zh) * | 2009-12-25 | 2011-06-29 | 上海芯豪微电子有限公司 | 一种低缺失率、低缺失惩罚的缓存方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103513958A (zh) | 2014-01-15 |
US20150149723A1 (en) | 2015-05-28 |
WO2014000624A1 (en) | 2014-01-03 |
US9753855B2 (en) | 2017-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103513958B (zh) | 高性能指令缓存系统和方法 | |
CN103513957B (zh) | 高性能缓存方法 | |
CN102841865B (zh) | 高性能缓存系统和方法 | |
CN104050092B (zh) | 一种数据缓存系统及方法 | |
CN104424129B (zh) | 基于指令读缓冲的缓存系统和方法 | |
CN102110058B (zh) | 一种低缺失率、低缺失惩罚的缓存方法和装置 | |
CN105701033B (zh) | 取决于模式而可动态配置的高速缓存存储器 | |
CN104978282B (zh) | 一种缓存系统和方法 | |
US5093778A (en) | Integrated single structure branch prediction cache | |
US20170109049A1 (en) | Hierarchical immutable content-addressable memory processor | |
CN104424158A (zh) | 基于通用单元的高性能处理器系统和方法 | |
Zhang et al. | Two fast and high-associativity cache schemes | |
CN103984526B (zh) | 一种指令处理系统及方法 | |
CN103176914B (zh) | 一种低缺失率、低缺失惩罚的缓存方法和装置 | |
EP1202180A1 (en) | Scalar data cache for a vector processor | |
CN107533461A (zh) | 具有用于对存储器寻址的不同寄存器的计算机处理器 | |
CN104731718A (zh) | 一种缓存系统和方法 | |
US6745291B1 (en) | High speed LRU line replacement system for cache memories | |
CN106201914A (zh) | 一种基于指令和数据推送的处理器系统和方法 | |
US20160217079A1 (en) | High-Performance Instruction Cache System and Method | |
CN103514107B (zh) | 高性能数据缓存系统和方法 | |
CN104424132A (zh) | 高性能指令缓存系统和方法 | |
JPH07121437A (ja) | コンピュータシステム | |
US6574698B1 (en) | Method and system for accessing a cache memory within a data processing system | |
JPS6194159A (ja) | メモリ装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder |
Address after: 201203 501, No. 14, Lane 328, Yuqing Road, Pudong New Area, Shanghai Patentee after: SHANGHAI XINHAO MICROELECTRONICS Co.,Ltd. Address before: 200092, B, block 1398, Siping Road, Shanghai, Yangpu District 1202 Patentee before: SHANGHAI XINHAO MICROELECTRONICS Co.,Ltd. |
|
CP02 | Change in the address of a patent holder |