CN104657285A - 一种数据缓存系统和方法 - Google Patents

一种数据缓存系统和方法 Download PDF

Info

Publication number
CN104657285A
CN104657285A CN201310576787.1A CN201310576787A CN104657285A CN 104657285 A CN104657285 A CN 104657285A CN 201310576787 A CN201310576787 A CN 201310576787A CN 104657285 A CN104657285 A CN 104657285A
Authority
CN
China
Prior art keywords
data
address
group
block
storage
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.)
Granted
Application number
CN201310576787.1A
Other languages
English (en)
Other versions
CN104657285B (zh
Inventor
林正浩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Xinhao Bravechips Micro Electronics Co Ltd
Original Assignee
Shanghai Xinhao Bravechips Micro Electronics Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Xinhao Bravechips Micro Electronics Co Ltd filed Critical Shanghai Xinhao Bravechips Micro Electronics Co Ltd
Priority to CN201310576787.1A priority Critical patent/CN104657285B/zh
Priority to PCT/CN2014/090972 priority patent/WO2015070771A1/zh
Publication of CN104657285A publication Critical patent/CN104657285A/zh
Application granted granted Critical
Publication of CN104657285B publication Critical patent/CN104657285B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6026Prefetching based on access pattern detection, e.g. stride based prefetch

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明提供了一种数据缓存系统和方法,应用于处理器领域时能在处理器核执行数据读取指令前,将所述指令需要的数据填充到数据存储器中,并预测、预取下一次执行该指令时可能的数据地址,以及将对应的数据按一定规律存放,尽可能减少标签比较的次数。

Description

一种数据缓存系统和方法
技术领域
本发明涉及计算机,通讯及集成电路领域。 
背景技术
通常而言,缓存的作用是将内存中的一部分内容复制在其中,使这些内容能在短时间内由处理器核快速存取,以保证流水线的持续运行。 
现行缓存的寻址都基于以下方式,首先用地址中的索引段寻址读出标签存储器中的标签。同时用地址中索引段与块内位移段共同寻址读出缓存中的内容。此外,将标签存储器中读出的标签与地址中的标签段进行匹配。如果从标签存储器中读出的标签与地址中的标签段相同,那么从缓存中读出的内容有效,称为缓存命中。否则,如果从标签存储器中读出的标签与地址中的标签段不相同,成为缓存缺失,从缓存中读出的内容无效。对于多路组相联的缓存,同时对各个路组并行进行上述操作,以检测哪个路组缓存命中。命中路组对应的读出内容为有效内容。若所有路组都为缺失,则所有读出内容都无效。缓存缺失之后,缓存控制逻辑将低级存储媒介中的内容填充到缓存中。 
在现有缓存结构中,各种各样的缓存预取技术被用来减少缓存缺失的发生。对于指令缓存而言,预取技术能带来一定的性能提升。但是对于数据缓存,由于数据地址的不确定性,很难有效地对数据地址进行预测。因此,随着日渐扩大的处理器/存储器速度鸿沟,数据缓存缺失仍是制约现代处理器性能提升的最严重瓶颈。 
此外,在现代处理器中最常用的组相联缓存结构中,通常路组数越多,缓存的性能越好,但需要同时读出、比较的标签也越多,导致功耗越高。如何能在增加路组的同时,减少标签比较的次数,是数据缓存改进中的难点之一。 
本发明提出的方法与系统装置能直接解决上述或其他的一个或多个困难。 
发明内容
本发明提出了一种数据缓存方法,其特征在于对缓存中的数据存储器进行配置,其中一部分存储块实现传统的组相联结构,另一部分存储块实现按组分配的结构;所述按组分配的缓存由多个组构成,每个组中存储对应同一个起始数据块地址的若干数据块,且组内各个相邻的存储块对应的数据地址之差为相同值。 
可选的,每个组中的数据块对应的数据地址具有相同部分;所述相同部分由数据地址中的标签构成,或由数据地址中的标签的一部分和索引号的一部分构成;地址相邻或相近的数据块存储在同一个组中。 
可选的,当一个组中的各个相邻的存储块对应的数据地址之差等于数据块长度时,该组中的所有存储块中的数据块地址连续;当一个组中的各个相邻的存储块对应的数据地址之差等于数据块长度的整数倍时,该组中的所有存储块中的数据块地址的间隔相等;可以根据当前数据在该组中对应的位置以及数据步长,直接确定下一数据是否也位于该组中,以及当该下一数据位于该组中时的所在位置。 
可选的,提供一个顺序表;所述顺序表的行与数据存储器中的组一一对应;且所述顺序表的每一行中包含了一个压缩比例;所述压缩比例表示了相应组中各个相邻存储块对应的数据块地址的间隔值。 
可选的,所述顺序表的每一行中包含了与相应组中数据块相邻的数据块所在的组的位置;可以根据当前数据在该组中对应的位置以及数据步长,直接确定下一数据所在的组及组中的位置。 
可选的,所述顺序表的每一行中包含了与相应组中第一个数据块相邻的连续若干个数据块所在的组的位置。 
可选的,所述顺序表的每一行中包含了与相应组中最后一个数据块相邻的连续若干个数据块所在的组的位置。 
可选的,将数据地址转换为缓存地址;所述缓存地址由组号、组内块号和块内偏移量构成;其中块内偏移量与数据地址中的块内偏移量相同;所述缓存地址可以直接用于对数据缓存中的数据存储器寻址。 
可选的,将循环代码中数据访问指令对应的数据存储在按组分配的结构中, 其他数据访问指令对应的数据存储在组相联的结构中。 
可选的,对第一次执行到的数据访问指令,当其数据地址产生后被转换为缓存地址。 
可选的,对第二次执行到的数据访问指令,当其数据地址产生后被转换为缓存地址,且计算得到数据步长;所述数据步长就是两次数据地址之差;根据本次缓存地址和数据步长计算出下次执行该数据访问指令时可能的下次缓存地址,供下次执行该数据访问指令是对数据存储器寻址;且当所述下次缓存地址对应的数据存储器中的数据无效时,将下次缓存地址转换为相应的数据地址,并将对应的数据填充到数据存储器中。 
可选的,对第三次及以后执行到的数据访问指令,根据本次缓存地址和数据步长计算出下次缓存地址,供下次执行该数据访问指令是对数据存储器寻址;且当所述下次缓存地址对应的数据存储器中的数据无效时,将下次缓存地址转换为相应的数据地址,并将对应的数据填充到数据存储器中。 
本发明还提出一种数据缓存系统,其特征在于,所述数据缓存系统中的数据存储器可以根据配置,将其中一部分存储块作为传统的组相联结构运行,另一部分存储块作为按组分配的结构运行;所述按组分配的结构包含多个组,每个组包含若干个存储块及一个数据块地址存储单元,且该组中所有存储块都对应该数据块地址存储单元中的数据块地址;每个组内各个相邻的存储块对应的数据地址之差为相同值。 
可选的,所述数据缓存系统还包含带掩码的比较器,所述比较器用于将数据地址中的一部分块地址与所述数据块地址存储单元中的数据块地址的相应位进行匹配,以确定该数据地址对应的数据是否存储在该组中。 
可选的,当一个组中的各个相邻的存储块对应的数据地址之差等于数据块长度时,该组中的所有存储块中的数据块地址连续;且当所述数据地址对应的数据存储在该组中时,由所述被掩码的位对该组中的存储块寻址,即可找到所述数据地址对应的数据。 
可选的,所述数据缓存系统还包括移位器;当一个组中的各个相邻的存储块对应的数据地址之差等于数据块长度的整数倍时,该组中的所有存储块中的数据块地址的间隔相等;且当所述数据地址对应的数据存储在该组中时,由所 述移位器对所述被掩码的位移位后得到的值对该组中的存储块寻址,即可找到所述数据地址对应的数据。 
可选的,所述数据缓存系统还包括顺序表存储器;所述顺序表存储器中的行与数据存储器中的组一一对应;且所述顺序表存储器的每一行中包含了一个用于存储压缩比例的存储单元;所述存储单元中存储的值表示了相应组中各个相邻存储块对应的数据块地址的间隔值。 
可选的,所述顺序表存储器的每一行中包含了指向相应组中数据块相邻的数据块所在的组的位置的指针;可以根据当前数据在该组中对应的位置以及数据步长,直接确定下一数据所在的组及组中的位置。 
可选的,所述指针指向相应组中第一个数据块相邻的连续若干个数据块所在的组的位置。 
可选的,所述指针指向相应组中最后一个数据块相邻的连续若干个数据块所在的组的位置。 
可选的,由所述比较器对数据地址和数据块地址存储单元中的数据块地址匹配,并由移位器根据压缩比例存储单元中的值对数据地址中的索引号进行相应移位,可以将数据地址转换为缓存地址;所述缓存地址由组号、组内块号和块内偏移量构成;其中块内偏移量与数据地址中的块内偏移量相同;所述缓存地址可以直接用于对数据缓存中的数据存储器寻址。 
可选的,根据缓存地址对应的数据块地址存储单元中的数据块地址值,并由移位器根据压缩比例存储单元中的值对缓存地址中的组内块号进行相应移位,可以将缓存地址转换为数据地址。 
对于本领域专业人士,还可以在本发明的说明、权利要求和附图的启发下,理解、领会本发明所包含其他方面内容。 
有益效果
本发明所述系统和方法可以为数字系统使用的数据缓存结构提供基本的解决方案。与传统数据缓存系统仅在缓存缺失后才填充的机制不同,本发明所述的系统和方法在处理器访问一个数据之前就对数据缓存进行填充,可以避免或充分地隐藏强制缺失。这就是说,本发明所述缓存系统集成了预取过程。 
本发明所述的系统和方法还将数据缓存中的数据存储器分为组相联部分和按组分配部分。其中,按组分配部分中的每个组包含数据地址相邻或相近的数据块。这样,对于数据地址相邻或相近的数据访问指令(如循环代码中的数据访问指令)对应的数据被存储在所述按组分配的部分中,其他数据被存储在组相联部分中。同时,采用本发明技术方案在向数据缓存填充数据的同时,将传统的包含标签、索引号和块内偏移量的数据地址转换为组号、组内块号和块内偏移量,实现了地址空间的转换,使得数据缓存系统能直接根据该新的地址寻址方式,不必进行标签匹配,直接可以从数据存储器中找到相应数据,特别在对数据地址相邻或相近的数据进行访问时,可以对缓存地址和数据步长进行简单计算即可得到下一数据的数据地址,不必进行标签匹配和地址转换,大大降低功耗。 
此外,本发明所述的系统和方法还可以在处理器核即将执行到数据读取指令之前,提前从数据存储器中读出该数据并送往处理器核供使用,使得处理器核在需要读取该数据时能直接取用,掩盖了访问数据存储器的时间。 
对于本领域专业人士而言,本发明的其他优点和应用是显见的。 
附图说明
图1是本发明所述的缓存系统的一个实施例; 
图2是本发明所述轨迹点格式的一个示意图; 
图3A是本发明所述的缓存系统的另一个实施例; 
图3B是本发明所述轨迹点格式的另一个示意图; 
图3C是本发明所述的缓存系统的另一个实施例; 
图4A是本发明所述改进的组相联缓存的一个实施例; 
图4B是本发明所述改进的组相联缓存的另一个实施例; 
图5是本发明所述分组的数据缓存的一个实施例; 
图6是本发明所述数据访问引擎的一个实施例; 
图7A是本发明所述顺序表和数据缓存的一个实施例; 
图7B是本发明所述顺序表和数据缓存的另一个实施例; 
图7C是本发明所述顺序表和数据缓存的另一个实施例; 
图7D是本发明所述组边界不对齐的数据存储方式的一个实施例; 
图8A是本发明所述数据访问引擎的一个实施例; 
图8B是本发明所述各种地址形式的示意图; 
图8C是本发明所述顺序表操作的一个实施例; 
图8D是本发明所述控制器的一个实施例。 
具体实施方式
以下结合附图和具体实施例对本发明提出的数据缓存系统和方法作进一步详细说明。根据下面说明和权利要求书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。 
需说明的是,为了清楚地说明本发明的内容,本发明特举多个实施例以进一步阐释本发明的不同实现方式,其中,该多个实施例是列举式并非穷举式。此外,为了说明的简洁,前实施例中已提及的内容往往在后实施例中予以省略,因此,后实施例中未提及的内容可相应参考前实施例。 
虽然该发明可以以多种形式的修改和替换来扩展,说明书中也列出了一些具体的实施图例并进行详细阐述。应当理解的是,发明者的出发点不是将该发明限于所阐述的特定实施例,正相反,发明者的出发点在于保护所有基于由本权利声明定义的精神或范围内进行的改进、等效转换和修改。同样的元器件号码可能被用于所有附图以代表相同的或类似的部分。 
请参考图1,其为本发明所述的缓存系统的一个实施例。如图1所示,所述数据缓存系统包含处理器101、主动表109、标签存储器127、扫描器111、轨道表107、循迹器119、指令存储器103和数据存储器113。应当理解的是,这里列出各种部件的目的是为了便于描述,还可以包含其他部件,而某些部件可以被省略。这里的各种部件可以分布在多个系统中,可以是物理上存在的或是虚拟的,可以是硬件实现(如:集成电路)、软件实现或由硬件和软件组合实现。 
在本发明中,处理器可以是包含指令缓存和数据缓存、能执行指令并对数据进行处理的处理单元,包括但不限于:通用处理器(General Processor)、中央处理器(CPU)、微控制器(MCU)、数字信号处理器(DSP)、图象处理器(GPU)、 片上系统(SOC)、专用集成电路(ASIC)等。 
在本发明中,存储器的层次指的是存储器与处理器101之间的接近程度。越接近处理器101的层次越高。此外,一个高层次的存储器(如指令存储器103和数据存储器113)通常比低层次的存储器速度快但容量小。“最接近处理器的存储器”指的是在存储层次中离处理器最近、通常也是速度最快的存储器,如本实施例中的指令存储器103和数据存储器113。此外,本发明中的各个层次的存储器具有包含关系,即层次较低的存储器含有层次较高的存储器中的全部存储内容。 
在本发明中,分支指令指的是任何适当的能导致处理器101改变执行流(如:非按顺序执行一条指令)的指令形式。分支源指一条进行分支操作的指令(即:分支指令),分支源地址可以是分支指令本身的指令地址;分支目标指的是分支指令造成的分支转移所转向的目标指令,分支目标地址可以指当分支指令的分支转移成功发生时转移进入的地址,也就是分支目标指令的指令地址;数据读取指令指的是任何适当的能导致处理器101从存储器读数据的指令形式;所述数据读取指令的指令格式中通常包含基地址寄存器号和地址偏移量;数据读取指令所需的数据指的是处理器101执行数据读取指令时读的数据;数据读取指令的数据地址指的是处理器101执行数据读取指令进行读/写数据所用到的地址;当处理器核101执行一条数据读取指令时,可以用基地址加偏移量的方式计算数据地址;基地址寄存器更新指令指的是对数据读取指令可能用到的基地址寄存器中的任何一个的值进行更改的指令。当前指令可以指当前正在被处理器核执行或获取的指令;当前指令块可以指含有当前正被处理器执行的指令的指令块。 
在本发明中,术语“填充”指的是在处理器执行到一条指令之前,提前从外部存储器取得相应指令或所需数据并存储到指令缓存或数据缓存。 
在本发明中,轨道表107中的行与指令存储器103中的存储块一一对应。轨道表107含有复数个轨迹点。在此,一个轨迹点是轨道表107中的一个表项,可含有至少一条指令的信息,比如该指令的类型等。当一个轨迹点含有的信息表示该轨迹点至少对应一条分支指令时,该轨迹点为一个分支点,所述信息可以是分支目标地址等。轨迹点的循迹地址就是该轨迹点本身的轨道表地址,且 所述循迹地址由一个行地址和一个列地址构成。轨迹点的循迹地址与该轨迹点所代表的指令的指令地址相对应,且对于分支点而言,每个分支点中含有该分支点所代表的分支指令的分支目标指令在轨道表107中的循迹地址,且该循迹地址与该分支目标指令的指令地址相对应。 
在本实施例中,指令存储器103除了存储可能被处理器101执行的指令外,还存储有对应每条指令的指令类型信息,如该指令是否为数据读取指令的信息;所述指令类型信息还可以进一步表示对应指令是哪种类型的数据读取指令,从而包含了如何计算数据地址的信息,如基地址寄存器号及地址偏移量在该指令码中的位置信息等。 
为便于表示,可以用BNX表示分支点循迹地址中的行地址,即BNX对应指令所在存储块的位置(存储块的行号),而循迹地址中的列地址就对应分支指令在其所在存储块中的位置(偏移量)。相应地,每组BNX及列地址对应轨道表107中的一个分支点,即可以根据一组BNX及列地址从轨道表107中找到对应的分支点。 
进一步地,轨道表107的分支点中还存储了以循迹地址形式表示的该分支指令的分支目标指令在指令存储器103中的位置信息。根据该循迹地址,可以在轨道表107中找到该分支目标指令对应的轨迹点的位置。即对于轨道表107的分支点而言,其轨道表地址就是其分支源地址对应的循迹地址,其轨道表内容中包含了其分支目标地址对应的循迹地址。 
在本实施例中,主动表109中的表项与指令存储器103中的存储块一一对应,即可以与轨道表107中的行一一对应。主动表109中的每个表项指明了该主动表行对应的指令缓存存储块存储在指令存储器103中的位置,并形成了BNX与指令缓存存储块的对应关系。主动表109中的每个表项存储了一个指令缓存存储块的块地址。这样,当用一个指令地址在主动表109中进行匹配时,可以得到匹配成功项中存储的BNX,或得到匹配不成功的结果。 
数据存储器113中的每个存储块用一个存储块号DBNX表示。标签存储器127中的表项与数据存储器113中的存储块一一对应,每个表项存储了数据存储器113中对应存储块的块地址,并形成了数据块地址与数据缓存存储块号的对应关系。这样,当用一个数据地址在标签存储器127中进行匹配时,可以得到 匹配成功项中存储的存储块号,或得到匹配不成功的结果。 
扫描器111对从外部存储器送往指令存储器103的指令进行审查,一旦发现某条指令是分支指令,即计算该分支指令的分支目标地址。对于直接分支指令,可以通过对该指令所在指令块的块地址、该指令在指令块中的偏移量和分支增量(Branch Offset)三者相加得到分支目标地址。对于间接分支指令,可以通过对相应基地址寄存器值和分支增量相加得到分支目标地址。所述指令块地址可以是从主动表109中读出并被直接送往扫描器111中加法器的。也可以在扫描器111中增加用于存储当前指令块地址的寄存器,这样就主动表109就不需要实时地送出指令块地址。 
此外,当扫描器111发现某条指令是数据读取指令时,还可以计算该数据读取指令对应的数据地址。例如,将该数据读取指令用到的基地址寄存器值加上数据地址偏移量得到数据地址。在本发明中,将数据读取指令分为两类:数据地址确定的数据读取指令和数据地址不确定的数据读取指令。例如,对于通过对数据读取指令本身指令地址与数据地址偏移量(立即数)求和得到数据地址的数据读取指令,无论何时计算得到的数据地址都是正确的,因此可以归为数据地址确定的数据读取指令。又如,对于通过对基地址寄存器值与数据地址偏移量(立即数)求和得到数据地址的数据读取指令,如果在计算数据地址时,所述基地址寄存器值已更新完毕,则也可以归为数据地址确定的数据读取指令,否则归为数据地址不确定的数据读取指令。根据本发明技术方案,可以对这两种数据读取指令给予不同的指令类型以存储在轨道表107的相应轨迹点中。 
可以将扫描器111计算得到的分支目标指令地址与主动表109中存储的存储块行地址匹配。若匹配成功,表示该分支目标指令已经存储在指令存储器103中,则主动表109输出该BNX送往轨道表107填入所述分支指令的相应表项。若匹配不成功,则表示该分支目标指令尚未存储在指令存储器103中,此时,将该分支目标指令地址送往外部存储器,同时在主动表109中分配一个表项存储对应块地址,并输出该BNX送往轨道表107填入所述分支指令的相应表项,并将外部存储器送来的对应指令块填充到指令存储器103中与该BNX对应的存储块中,同时在轨道表107中相应行中建立对应的轨道。对于该指令块中的分支指令,其分支目标指令地址经主动表109匹配输出一个BNX,而该分支目标 指令在其指令块中的位置(即该分支目标指令地址的块内偏移量部分)就是对应的轨迹点列号,从而得到了对应该分支目标指令的循迹地址,并将该循迹地址作为分支点内容存储到所述分支指令对应的分支轨迹点中。此外,在扫描器111对指令块审查的过程中,可以发现数据读取指令,并将相应指令类型信息存储在轨道表109的对应轨迹点(即数据点)中,且计算该数据读取指令的数据地址并将该数据地址送往外部存储器获取包含对应数据在内的数据块。同时,在标签存储器127中分配一个可用表项,将所述数据块填充到数据存储器113对应存储块中,并输出该DBNX及所述数据在数据块中的偏移地址(即DBNY)作为轨迹点内容存储在所述数据点中。如此,就可以在将指令块填充到指令存储器103中的同时,建立对应整个指令块的一条轨道。为了便于描述,在本说明书中,能直接对数据存储器进行寻址的地址被称为缓存地址,即缓存地址(DBN)由DBNX和DBNY组成。 
在本发明中,循迹器119的读指针121可以从轨道表107中的当前指令对应的轨迹点开始不断移动直到指向第一个分支点。此时读指针121的值即为分支源指令的循迹地址,其中包含了BNX和对应的分支点列号。根据该循迹地址可以从轨道表107读出该分支源指令的分支目标指令循迹地址。这样,循迹器119的读指针121从轨道表107中处理器101当前执行的指令对应的轨迹点开始,提前移动到该轨迹点之后的第一个分支点,并可以根据该目标指令循迹地址从指令存储器103中找到该目标指令。在此移动过程中,当读指针121经过数据点时,读出其中存储的缓存地址DBN送往数据存储器113读出对应数据并推送给处理器核101。这样,在所述当前指令和其后第一个分支点之间的所有数据读取指令对应的数据被依次推送往处理器核供读取。 
请参考图2,其为本发明所述轨迹点格式的一个示意图。其中,对于分支点,其格式包含指令类型151、分支目标指令对应的BNX153和BNY155。对于数据点,其格式包含指令类型161、相应数据在数据存储器113中的DBNX163和DBNY165。 
回到图1,循迹器119的读指针121根据轨道表107中存储的分支点的位置,移动并指向处理器核101正在执行的指令之后的第一个分支点,并从该分支点中读出轨迹点内容,即分支目标轨迹点的位置信息BNX和BNY。若这个分支 点对应的是间接分支指令,则还需要从主动表109中读出对应的分支目标指令块地址。 
处理器核101输出指令偏移地址(即指令地址中的偏移地址部分),从指令存储器103中由循迹器119读指针121指向的存储块中选出所需指令。当处理器核执行到该分支指令时,若分支转移没有发生(TAKEN信号123为‘0’),则继续输出新的指令偏移地址,读取并执行该分支指令之后的下一指令,同时循迹器119读指针121继续移动并指向下一个分支点,重复上述操作。若分支转移发生(TAKEN信号123为‘1’),且该分支指令是直接分支指令,则处理器核101可以直接执行已经准备好的所述分支目标指令。同时循迹器119读指针121的值被更新为所述BNX和BNY,即读指针121指向该分支目标指令对应的轨迹点,从该轨迹点开始移动并指向第一个分支点,若分支转移发生(TAKEN信号123为‘1’),且该分支指令是间接分支指令,则处理器核101输出实际目标指令地址中的块地址部分与之前从主动表109中读出的指令块地址进行匹配,如果匹配成功,则该目标指令是正确的,可供处理器核101直接读取执行;否则,将该实际目标指令地址送往外部存储器获取包含对应目标指令在内的指令块,并将该目标指令送往处理器核101执行。同时,在主动表109中分配一个可用表项,将所述指令块填充到指令存储器103的对应存储块中,并输出该BNX及所述目标指令在指令块中的偏移地址(即BNY)作为轨迹点内容存储在所述分支点中。同时,循迹器119读指针121的值被更新为所述BNX和BNY,即读指针121指向该分支目标指令对应的轨迹点,从该轨迹点开始移动并指向第一个分支点,重复上述操作。这样,即可在处理器核执行分支指令之前将下一指令和分支目标指令均准备好供处理器核101选用,从而避免了因缓存缺失造成的性能损失。 
类似地,当循迹器119读指针121经过一个数据点时,根据该数据点中存储的DBN从数据存储器113中读出对应的数据。若这条数据读取指令是数据地址不确定的数据读取指令,则还需要从标签存储器127中读出对应的数据块地址。当处理器核101执行到该数据读取指令时,若这条数据读取指令是数据地址确定的数据读取指令,则处理器核101可以直接使用该数据。否则,处理器核101输出实际数据地址中的块地址与之前从标签存储器127中读出的数据块 地址进行匹配,如果匹配成功,则该数据是正确的,可供处理器核101直接使用;否则,暂停处理器核101中的流水线、将该实际数据地址送往外部存储器获取包含对应数据在内的数据块,并将该数据送往处理器核101后恢复流水线。同时,在标签存储器127中分配一个可用表项,将所述数据块填充到数据存储器113对应存储块中,并输出该DBNX及所述数据在数据块中的偏移地址(即DBNY)作为轨迹点内容存储在所述数据点中。 
这样,在处理器核101第一次执行数据读取指令前,该指令对应的可能数据已经准备好。若该数据是正确的,则完全避免了数据存储器113缺失造成的性能损失,并能部分或完全掩盖读取数据存储器113所需时间。即使该数据是错误的,处理器核101也能在不增加等待时间的情况下重新获取到正确的数据。 
请参考图3A,其为本发明所述的缓存系统的另一个实施例。本实施例与图1实施例类似,差别在于增加了一个数据地址预测模块301,且轨道表中的数据点格式中增加了一个步长位。 
请参考图3B,其为本发明所述轨迹点格式的另一个示意图。其中,分支点的格式依然包含指令类型151、分支目标指令对应的BNX153和BNY155。而数据点的格式则包含指令类型161、相应数据在数据存储器113中的DBNX163、DBNY165和数据步长331。所述数据步长331指的是该数据点对应的数据读取指令前后两次执行时对应的数据地址的差值,即当前数据地址减去上一次数据地址得到的值。根据所述数据步长,可以猜测性地计算下一次数据地址的可能值,即用当前数据地址加上所述数据步长得到下一次数据地址的可能值。 
回到图3A,在本实施例中,建立轨道及预取指令、数据的过程与图1实施例类似。不同之处在于,本实施例中的轨道表是经过压缩的轨道表。由于一个指令块中只有部分指令是分支指令或数据读取指令,因此,可以对轨道表107进行压缩,从而降低轨道表107对存储空间的需求。例如,压缩轨道表可以具有与原始轨道表相同的行,但列数少于原始轨道表,并由一个映射表存储压缩轨道表中的行与原始轨道表中的行之间的对应关系。其中,压缩轨道表中的每个表项均是一个分支点或数据点,且按对应的分支指令及数据读取指令在指令块中的先后顺序依次对应。而映射表中的表项与压缩轨道表中的分支点及数据点一一对应,且存储了对应分支点及数据点在指令块中的块内偏移量。这样, 可以将一条分支指令或数据读取指令在其所在指令块中的块内偏移量经映射表转换为列地址后,根据该列地址找到压缩轨道表中由所述分支指令的BNX指向的行中找到对应的分支点,或根据该列地址找到压缩轨道表中由所述数据读取指令的BNX指向的行中找到对应的数据点;对于压缩轨道表中任何一个分支点或数据点,也可以在映射表的相应表项中找到该分支点或数据点对应的分支指令或数据读取指令的块内偏移量,并与所述分支点或数据点本身的BNX一同指向所述分支点或数据点在指令存储器103中对应的分支指令或数据读取指令。 
在采用本实施例所述的轨道表压缩技术后,压缩轨道表中的每个表项都是一个分支点或数据点。因此,当循迹器119读指针121指向的分支点的分支转移没有发生时,读指针121经增量器134增一后指向下一个轨迹点。若该轨迹点是分支点,则按前述方法读出分支目标指令并等待处理器核101送出的TAKEN信号。若该轨迹点是数据点,则按前述方法读出对应的数据并准备好供处理器核101使用。具体地,可以将所述数据存储到一个先入先出缓冲(FIFO)中,使得处理器核101能够按正确的顺序依次获取各条数据读取指令对应的数据。之后继续移动读指针121,重复上述操作,直至指向一个分支点,并按前述方法读出分支目标指令并等待处理器核101送出的TAKEN信号。 
此外,在本实施例中,当轨道表中的一个数据点被第二次被循迹器119读指针121指向时,读出的DBNX被送到标签存储器127以读出对应的数据块地址。所述数据块地址与读指针121读出的DBNY构成上次执行该数据点时的数据地址,并送到预测模块301暂存。这样,当处理器核101执行到该数据点时将本次数据地址送到预测模块301减去所述上次数据地址,得到数据步长。预测模块301输出所述数据步长存储回对应数据点中,并将该数据步长与所述本次数据地址相加得到预测的下次数据地址。之后,预测模块301将所述下次数据地址送往标签存储器127匹配。若匹配成功,则表示下次执行该数据点时的可能数据已经存储在数据存储器113中,匹配得到的DBNX和该下次数据地址中的偏移地址部分(即DBNY)被存储回对应数据点中,从而完成数据点的更新。若匹配不成功,则表示下次执行该数据点时的可能数据尚未存储在数据存储器113中,将该下次数据地址送往外部存储器获取包含对应数据在内的数据块。同时,在标签存储器127中分配一个可用表项,将所述数据块填充到数据 存储器113对应存储块中,并输出该DBNX及所述数据在数据块中的偏移地址(即DBNY)作为轨迹点内容存储在所述数据点中,从而完成数据点的更新。如此,当循迹器119读指针121再次指向该数据点时,可以根据其中的DBN从数据存储器113中提前读出对应数据供处理器核101读取。之后的操作过程与之前实施例所述相同。 
这样,只要数据读取指令没有被替换出指令存储器103,从处理器核101第三次执行该数据读取指令开始,可能数据均已经准备好。若该数据是正确的,则完全避免了数据缓存缺失造成的性能损失,并能部分或完全掩盖读取数据缓存所需时间。即使该数据是错误的,处理器核101也能在不增加等待时间的情况下重新获取到正确的数据。 
需要说明的是,在本实施例中,由于循迹器119读指针121在移动到当前处理器核101正在执行的指令之后第一个分支点的过程中,可能经过多个数据点,并根据这些数据点中的DBN从数据存储器113中预先读出数据,因此采用了一个FIFO按顺序暂存各条数据读取指令对应的数据供处理器核101依次使用,即该FIFO用于存储处理器核101将要用到的数据。然而,也可以采用一个FIFO存储从这些数据点中读出的DBN,且只根据最早读出的DBN从数据存储器113中读出对应数据,并在处理器核101获取该数据后,再从FIFO中读出当时最早的DBN从数据存储器113中读出对应数据,以备处理器核101使用,即该FIFO用于存储处理器核101将要用到的数据对应的地址。此时,本发明所述缓存系统的其他操作过程与之前实施例所述相同,在此不再赘述。 
请参考图3C,其为本发明所述的缓存系统的另一个实施例。本实施例与图3A实施例类似,差别在于增加了一个顺序表361。所述顺序表361的表项与标签存储器127的表项一一对应,其中存储了标签存储器127对表项中数据块地址的前一个数据块的位置信息PREV及后一个数据块的位置信息NEXT。例如,当按地址顺序向数据存储器113填入两个地址连续的数据块时,所述前一个数据块在顺序表361的对应表项中的NEXT中存储了所述下一个数据块的DBNX。而所述后一个数据块在顺序表361的对应表项中的PREV中存储了所述前一个数据块的DBNX。这样,根据顺序表361中记录的信息,可以直接找到预测得到的下次数据地址对应的DBNX,以减少在标签存储器127中的匹配次数。 
具体地,假设一个数据块的长度为N,则下一数据块的块地址是当前数据块的块地址加N,而前一数据块的块地址是当前数据块的块地址减N。由于下次数据地址等于本次数据地址和数据步长之和,因此将数据步长与本次数据地址中偏移地址之和的绝对值除以N,就可以得到下次数据地址与本次数据地址间隔的数据块的数目。同时,根据数据步长的符号,即可确定下次数据地址是指向本次数据地址之前的数据块还是指向本次数据地址之后的数据块。 
具体地,当数据步长与本次数据地址中偏移地址之和小于N且大于等于‘0’时,所述下次数据地址与本次数据地址位于同一个数据块中,即下次数据地址的DBNX与本次数据地址的DBNX相同。 
当数据步长与本次数据地址中偏移地址之和小于‘0’时,所述下次数据地址位于本次数据地址之前的数据块中;当数据步长与本次数据地址中偏移地址之和大于等于N时,所述下次数据地址位于本次数据地址之后的数据块中。对于这两种情况,下次数据地址与本次数据地址之间数据块的间隔数等于将数据步长与本次数据地址中偏移地址之和的绝对值除以N得到的商。这样,只要顺序表361中记录了足够的信息,就可以从本次数据地址对应的表项开始,沿PREV(或NEXT)所给出的DBNX,逐一经过向前(或向后)的各个相邻数据块,找到下次数据地址对应的DBNX。 
特别地,在很多类型的循环代码中,数据步长的绝对值很小,下次数据地址往往指向本次数据地址的前一个(或后一个)数据块。在这种情况下,所述本次数据地址对应的顺序表361表项(即顺序表361中由循迹器119读指针121从数据点中读出的DBNX指向的表项)中的PREV(或NEXT)中存储的DBNX就是所述下次数据地址对应的DBNX。这样,可以直接从顺序表361中读出所述DBNX存储回轨道表107中,从而避免了下次数据地址在标签存储器127中的匹配。 
此外,可以用经过改进的数据缓存结构以获得更好的性能提升。在本说明书中将对以组相联(way-set associative)为基础的缓存的改进进行说明。对于直接映射(direct mapping)的缓存,可以将其视为组相联缓存的一个路组(way-set),以同样方式实现,在此不再具体说明。而对于全相联(fully associative)缓存,每一个存储块之间的地址是可以完全没有联系的,因此可以直接用图3C实施例 中的顺序表构成存储块与存储块之间的联系,使得能根据本次数据地址以及数据步长直接找到下次数据地址对应的存储块位置(即DBN)。 
在传统的组相联缓存结构中数据地址分为三个部分:标签(TAG)、索引号(index)和块内偏移量(offset),而每个路组中存储块的索引号是连续的,即在任何一个路组中每个索引号都存在且只存在一次。此时,可以采用本发明所述方法,给予每个路组中所有存储块相同的标签。又由于该路组中所有存储块的索引号连续,因此存储了连续地址的数据块。这样,就自然形成了对应连续地址的存储块之间的位置联系,即在一个路组的范围内,数据地址连续的数据块对应的物理位置(或索引号)也连续,从而可以直接找到预测得到的下次数据地址对应的DBNX,以减少在标签存储器127中的匹配次数或按序逐个查找顺序表花费的时延。 
然而,在某些程序(如对数组的循环访问)中,所用到的数据地址并不是连续的,而是以等差数列形式出现,因此每个路组中很多索引号对应的数据可能是始终不会被访问的。而一旦频繁被访问的数据集中在几个索引号时,就会因路组不够而发生替换,降低缓存系统的性能。根据本发明技术方案,可以通过对每个路组设置一个压缩比例,使得该路组中的索引号不再按一递增,而是按一个常量等差递增,从而使得整个路组中绝大多数的数据都是会被访问的数据,在依然具备数据连续性的情况下,尽可能地提高了该路组的利用率。 
请参考图4A,其为本发明所述改进的组相联缓存的一个实施例。在本实施例中缓存的每一个路组都对应一个特征表项,其中存放了一个压缩比例和若干指针。在此,定义压缩比例的值等于该路组中两个连续的存储块对应的数据块地址之差除以数据块长度得到的值。所述若干个指针则指向了该路组中第一个数据块(即数据地址最小的数据块)连续地址的后若干个数据块分别所在的路组。对于本发明所述所有存储块对应同一标签的路组,由于两个连续的存储块对应的数据块地址之差等于数据块长度,因此压缩比例为‘1’。而所述指针都指向该路组本身,即该路组中第一个数据块的连续地址的后若干个数据块都在本路组中。在此,数据地址对应的DBNX由路组号和路组内存储块号构成。以某一个路组包含4个存储块为例,假设该路组的路组号为‘3’,这4个存储块的组内块号分别为‘0’到‘3’,则它们对应的DBNX分别为‘30’到‘33’。 如图4A中路组401所示,所有存储块均对应标签‘2001’,即这4个存储块对应的数据块地址分别是‘20010’、‘20011’、‘20012’、‘20013’。这样,各个数据地址的索引号部分等于该路组中对应存储块的组内块号值。如:数据块地址‘20010’的索引号为‘0’,对应的存储块的组内号也为‘0’;数据块地址‘20011’的索引号为‘1’,对应的存储块的组内块号也为‘1’等等。此时如果每次访问的数据步长小于或等于一个数据块的长度,则可以根据本次数据地址对应的存储块位置(即DBNX)及所述数据步长直接计算得到下次数据地址对应存储块就是该存储块或其相邻的下一个存储块。下次数据地址对应的DBNX等于本次数据地址对应的DBNX加上DBNX增量,而DBNX增量就是数据步长与数据块长度相除得到的商。例如,若本次数据地址对应的DBNX为‘32’(对应的数据块地址为‘20012’),而数据步长等于一个数据块的长度,则DBNX增量等于‘1’,而下次数据地址对应的DBNX等于‘32’加上‘1’,即得到‘33’(对应的数据块地址为‘20013’),从而指向正确的存储块。由此,不需要计算下次数据地址及进行地址匹配,即可得到下次数据地址对应的DBNX值。 
但是,如果每次访问的数据步长等于两个数据块的长度,则按这种方式存储会导致该路组中一半数据块不会被访问到,浪费了存储空间。对于这种情况,可以将压缩比例设为‘2’,即该路组中相邻两个存储块对应的数据地址之差除以数据块长度等于‘2’。请参考图4B,其为本发明所述改进的组相联缓存的另一个实施例。如图4B中路组403所示,所有存储块均对应标签‘2001’,但对应的数据块地址分别是‘20010’、‘20012’、‘20014’、‘20016’。这样,各个数据地址的索引号部分等于该路组中对应存储块的组内块号值乘以压缩比例。如:数据块地址‘20010’的索引号为‘0’,对应的存储块的组内块号为‘0’;数据块地址‘20012’的索引号为‘2’,对应的存储块的组内块号为‘1’等等,使得索引号按压缩比例压缩。在这种情况下,DBNX增量等于数据步长与数据块长度相除,再除以压缩比例得到的商。例如,假设本次数据地址对应的DBNX为‘31’(对应的数据块地址为‘20012’),而数据步长等于两个数据块的长度,则DBNX增量等于‘2’除以‘1’再除以‘1’(即等于‘1’),而下次数据地址对应的DBNX等于‘31’加上‘1’,即得到‘32’(对应的数据块地址为‘20014’),从而指向正确的存储块,并避免了数据地址的计算和匹配。 
在本实施例中,每个路组对应的所述特征表项中除了存储了压缩比例419外,还存储了若干指针,所述指针的数目等于压缩比例值乘以‘2’。以路组403为例,其对应的特征表项中除了存储了压缩比例‘2’以外,还存储了四个指针。其中三个指针分别指向与路组403中第一个数据块(数据块地址为‘20010’)地址相邻的3个数据块(即数据块地址为‘2000E’、‘2000F’和‘20011’的数据块)所在的路组,另一个指针则指向与路组403地址相邻的后一个路组(起始数据块地址为‘20018’)。这样,当数据步长较小时,只需将本次数据地址对应的DBN与数据步长相加并根据压缩比例移位,即可在当前路组或所述指针指向的路组中找到下次数据地址对应的存储块。 
为了便于描述,以下以数据步长是数据块长度整数倍的情况进行说明,此时,每次数据地址对应的DBNY不变。当数据步长不是数据块长度整数倍时,多余的部分需要和DBNY相加,其结果的和部分成为新的DBNY,而进位部分被加到DBNX上。假设本次数据地址对应的DBNX为‘31’,则当数据步长为3个数据块长度(即DBNX增量为‘3’,下次数据地址为‘20015’)时,先根据压缩比例和存储块的组内块号对数据地址的索引号进行复原。对于该DBNX,存储块的组内块号为‘1’,乘以压缩比例后得到‘2’(即数据块的索引号)。再将这个‘2’与DBNX增量‘3’相加,得到下次数据地址索引号‘5’。之后,对该下次数据地址索引号‘5’按压缩比例进行压缩,即‘5’除以‘2’得到商为‘2’,余数为‘1’。因此,所述下次数据地址对应的数据就位于余数对应的指针417指向的路组中以所述商为组内块号的存储块中,即下次数据地址‘20015’对应的数据在路组405内组内块号为‘2’的存储块421中。 
同理,当数据步长(或DBNX增量)为负数时,可以用同样的方法在指针411或413指向的路组中找到对应的存储块;当数据步长(或DBNX增量)为正的偶数且恰好超出路组403的范围时,则可以在指针415指向的路组中找到对应的存储块。当下次数据地址超出所述四个指针指向的路组的范围时,可以依次通过相应路组的特征表项中存储的指针信息,找到所述下次数据地址对应的路组及存储块。此外,对于更大的压缩比例,也可以按相同方法实现,在此不再赘述。 
根据本发明技术方案,还可以对组相联缓存中的路组进行改进,使得每一 个路组可以被配置为多个组(group),而每个组能提供与路组相同的功能,从而方便地增加路组数,能够存储多组不同标签对应的连续数据块。 
例如,可以将每个路组中的数据存储器被分为相应的若干组,每组对应连续索引号的相同数目行,且对应同一个标签。即每个组中存储了对应同一个标签的连续地址的若干个数据块。 
请参考图5,其为本发明所述分组的数据缓存的一个实施例。以一个路组为例,存储器501被分为两个组,每组含一行内容寻址存储器(CAM),即存储一个标签(如标签503和标签505)。相应地,数据存储器511也被分为两个组,每个组含四个存储块,且这四个存储块中的数据块地址连续,并对应同一个标签。具体地,组513中包含存储块521、523、525和527,这四个存储块中的数据块地址连续,且均对应标签503;组515中包含存储块531、533、535和537,这四个存储块中的数据块地址连续,且均对应标签505。在本实施例中,每组标签及相应组存储块还对应一个寄存比较器和一个译码器。如标签503对应寄存比较器517和译码器529,标签505对应寄存比较器519和译码器539。所述寄存比较器中包含一个寄存器和一个比较器。其中,所述寄存器存储了该组存储内数据块起始地址中的索引号的高位部分。 
根据数据地址寻址时,数据地址中的索引号高位部分通过总线543送到所有寄存比较器中与存储的索引号高位部分值进行比较,并根据比较结果,只对匹配成功项对应的内容寻址存储行的比较线进行充电、与经总线541送来的标签匹配,并由匹配成功的内容寻址存储行向译码器输出使能信号。所述译码器则在寄存比较器输出的使能信号控制下,对总线545上的数据地址中索引号的低位部分进行译码,并根据译码结果从相应组数据块中选出一个输出。这样,通过寄存比较器和译码器的匹配、译码及寻址,即可从数据存储器511中读出索引号与数据寻址地址中索引号相同的数据块。若所有比较器均匹配不成功,或所有参与匹配的内容寻址存储器均匹配不成功时,则说明所述数据地址对应的数据尚未存储在缓存的该路组中。按同样方法并行对所有路组进行如上操作,即可在缓存中找到所需数据,或得到缓存缺失的结果。这样,每个组就能提供相当于一个路组的功能。 
在本实施例中,只需要对寄存比较器中的寄存器存入相应的索引号高位值, 即可对缓存进行重新分组以得到不同数目个组,每个组均能提供相当于一个路组的功能。例如,可以在两个相邻的寄存比较器中存入连续的索引号高位值,使得这两个寄存比较器对应的索引号也连续。这样,所述相邻的两个组就被合并为一个更大的组以容纳连续地址的数据块。 
此外,在本发明中,还可以将各个组配置成不同大小,形成混合结构的缓存。例如可以将缓存中的一个路组配置成四个组、并将另一个路组配置成一个组,以这两个路组构成连续位置存储的缓存部分;将其他路组配置成传统形式的组相联结构,构成随机位置存储的缓存部分。在这种情况下,所述第一个路组中最多包含四组连续的数据块,而第二个路组中只包含一组连续的数据块。其余路组则如现有的组相联缓存那样,各自可包含的最多标签数等于对应的存储块的数量(及路组本身的行数),相邻的存储块可以对应不同的标签。采用如此配置的缓存,可以根据程序的特点,将数据地址连续(即标签相同)的数据存储在连续位置存储的缓存部分中。对于数据地址不连续的数据,则被存储在随机位置存储的缓存部分中。这样,所述混合结构的缓存可以根据程序特点进行配置,既具备了缓存中数据存放的灵活性和便于替换的特点,又能在进行连续地址的数据访问时省去大量的标签比较操作。 
需要说明的是,采用上述混合结构的缓存在实际运行时,有时会发现当前或即将访问的数据应该属于连续位置存储的缓存部分,但其所在的数据块已经存储在随机位置存储的缓存部分中。此时,应将该数据所在的数据块填充到连续位置存储的缓存部分中,并将随机位置存储的缓存部分中的相应存储块置为无效。又有时会发现即将访问的数据应该属于随机位置存储的缓存部分,但其所在的数据块已经存储在连续位置存储的缓存部分中。此时,则不改变数据在缓存中存储的位置,而直接通过标签比较的方法,从所述连续位置存储的缓存部分中读出该数据。 
在本发明中,数据访问引擎被用来实现以下功能。即,在处理器核计算得到数据地址之前,所述数据访问引擎将相应的数据填充到数据缓存中并将该数据准备好供处理器核使用。在本说明书中,以数据读取为例进行说明,对于数据存储,也可以用类似方法实现,在此不再重复说明。 
以下通过几个具体的例子对数据访问引擎进行详细说明。请参考图6,其为 本发明所述数据访问引擎的一个实施例。为了便于描述,图6中只显示了部分模块或部件。在图6中,数据存储器113和处理器核101与之前实施例所述相同。轨道表107中的数据点格式包含指令类型621、DBNX、DBNY627和数据步长629。其中DBNX由组号(GN)623和组内块号625构成,DBNY627就是数据地址中的块内偏移量(offset)。数据引擎601包含顺序表603、移位器605、607和609、加法器611、减法器613和选择器615、616、617。 
在本实施例中,从轨道表中读出的数据点内容中的组内块号625被送到移位器605根据压缩比例左移后再送往加法器611。由于对组内块号625左移n位就相当于组内块号625乘以2n,因此经移位器605移位后,组内块号625就被恢复为相应的数据地址中的索引号的值。此外,数据点内容中的DBNY627被直接送到加法器611,与移位器605输出的索引号一同构成加法器611的一个输入,而数据点内容中的数据步长629是加法器611的另一个输入,两者相加得到的和就是下次数据地址中的索引号和块内偏移量。所述块内偏移量直接作为下次数据地址对应的DBNY,而所述索引号则根据压缩比例经移位器607右移后成为下次数据地址对应的组内块号。在此,移位器607右移的位数与移位器605左移的位数相同,对所述数据地址中的索引号右移n位就相当于索引号除以2n,因此经移位器607移位后,所述数据地址中的索引号再次被压缩为对应的组内块号送回轨道表存储,而其中的最低n位被向右移出部分631不作为组内块号的一部分。 
在此过程中,被移位器607右移出的索引号部分被送到选择器616作为控制信号,而加法器611的溢出信号(进位或借位)被送到选择器615作为控制信号。选择器的各个输入均来源于顺序表603中由本次数据地址中的组号623指向的组号GN。 
请参考图7A,其为本发明所述顺序表和数据缓存的一个实施例。顺序表603的行数与数据存储器701中的组数相同,且两者一一对应。在本实施例中,数据存储器701分为两个路组(即路组0和路组1),每个路组又可以被分为两个组。因此,数据存储器701中共有四个组,组号如图7A所示分别标注在对应的组上,即路组0包含组00和组01,路组1包含组10和组11。此外,为了便于说明,假设每组包含四个存储块,每个存储块包含四个数据(或数据字)。 
相应地,在顺序表603中也有四行,从上向下分别对应组00、01、10和11。每行中包含了特征表项、标签表项715和索引号表项717。其中特征表项又包含压缩比例703和五个指针(即指针705、707、709、711和713)。所述五个指针如图4B实施例特征表项中的指针,指向与该组中第一个数据块地址相邻的各个数据块所在的组。在本实施例中,各个组内的数据块的索引号没有被压缩,因此,除了一个指针指向该组的连续地址前一组,及另一个指针指向该组的连续地址后一组之外,其它三个指针均指向本组。如图7A顺序表603中第一行(对应组‘00’)所示,指针705、707和709均指向该组本身(即组‘00’),指针711指向该组的连续地址后一组(即组‘10’),指针711指向该组的连续地址前一组(即组‘11’)。其他各行中的指针也如图所示,其中内容为空的指针表示其指向的组没有在图中显示,或尚未确定,与本实施例描述的情况无关。 
在本实施例中,这四个组的压缩比例都是‘0’,即数据地址的索引号与组内块号对应,且每个组对应一个完整的标签。此时,在根据数据地址查找对应的组时,直接屏蔽(mask)两位索引号(如图7A中索引号717中的下划线所示),单对数据地址中标签进行匹配,即可找到该数据地址对应的组;而被屏蔽的那两位就是该数据地址在该组中对应的组内块号。 
随着数据地址的递增,如图7A中所示依次访问连续的四个数据A、B、C和D。即,数据A和B是组‘11’的最后一个存储块的最后两个数据,而数据C和D是组‘00’的第一个存储块的开头两个数据,即这四个数据的数据地址之差就是数据步长‘1’。如之前实施例所述,在根据轨道表619中数据点内容从数据存储器701中获取数据A的过程中,该数据点中的DBNX、DBNY和数据步长均被读出,且DBNX的值为‘1111’(即组‘11’中的第4个存储块),其中组号为‘11’,组内块号为‘11’;DBNY的值为‘10’(即存储块中的第3个数据);数据步长的值为‘1’(即下一次访问的数据B是数据A的后一个数据)。 
根据本发明技术方案,该DBNX中的组内块号(‘11’)则被送到移位器605。该DBNX中的组号被送到顺序表603读出对应行(即顺序表603中的第四行)中的内容。其中,压缩比例(‘0’)被送到移位器605和607作为移位位数(即不移位)。移位器605的输出‘11’与DBNY(‘10’)一同构成‘1110’和数据步长‘1’相加得到‘1111’,其中组内块号‘11’经移位器607输出后依然为‘11’, 即得到下次数据地址对应的组内块号(‘11’)和DBNY(‘11’)。 
同时,顺序表603中的第四行的各个指针值分别对应端口‘1’、‘2’、‘3’、‘4’和‘-1’输出分别送往选择器616和615,而端口‘0’输出该行本身对应的组号‘11’(该组号即对应行号,因此可以不用在该行中占用可写存储器,而是以硬连线编码只读方式以节省存储空间)至选择器615。由于加法器611没有溢出(即相加时没有进位),因此选择端口‘0’输出的组号‘11’作为下次数据地址对应的组号。至此,下次数据地址对应的DBNX(即组号‘11’和组内块号‘11’)、DBNY(‘11’)均产生完毕,且指向数据存储器701中数据B。该DBN经总线649被写回轨道表619内该数据点中,供下次读取数据B使用。 
又如,在按本发明技术方案获取数据B的过程中,该数据点中的组号‘11’、组内块号‘11’、DBNY‘11’和数据步长‘1’再次被读出。其中组内块号‘11’经移位器605输出后与DBNY一同构成‘1111’和数据步长‘1’相加得到‘0000’(即下次数据地址对应的组内块号‘00’和DBNY‘00’),并溢出得到进位‘1’。同样地,顺序表603中的第四行的各个指针值及该行本身对应的组号分别被送到选择器616和615。此时,由于加法器611有进位‘1’,因此选择端口‘4’输出的组号‘00’作为下次数据地址对应的组号。至此,下次数据地址对应的DBNX(即组号‘00’和组内块号‘00’)、DBNY(‘00’)均产生完毕,且指向数据存储器701中数据C。该DBN经总线649被写回轨道表619内该数据点中,供下次读取数据C使用。按上述方法依次操作,即可在压缩比例为‘0’的情况下,根据数据步长计算出下次数据地址对应的DBN。 
根据本发明技术方案,当数据步长大于等于数据块长度两倍时,可以对数据地址中的索引号进行压缩。表1中显示了一些常用的压缩比例及相应的移位位数、屏蔽(或掩码)等情况。在表1中,第一列显示了数据步长的范围;第二列显示了对顺序表中存储的标签及索引号匹配时屏蔽位的情况,其中T表示标签,I表示组内块号,下划线部分则表示被屏蔽的位;第三列显示了相应的移位位数;第四列显示了相应的压缩率。 
具体地,在第一行中,数据步长小于数据块长度两倍,因此不压缩,此时只屏蔽索引号,且移位位数为‘0’,压缩率为‘1’(即不压缩)。在第二行中,数据步长大于等于数据块长度两倍且小于数据块长度四倍,因此可以压缩,此 时屏蔽标签的最低位及屏蔽索引号的高位,且移位位数为‘1’,压缩率为‘2’。在第三行中,数据步长大于等于数据块长度四倍且小于数据块长度八倍,因此可以压缩,此时屏蔽标签的最低两位,且移位位数为‘2’,压缩率为‘4’。在第四行中,数据步长大于等于数据块长度八倍且小于数据块长度十六倍,因此可以压缩,此时屏蔽标签的最低第二、第三这两位,且移位位数为‘3’,压缩率为‘8’。对于其他情况,也可以此类推。 
表1 
数据步长 屏蔽位 移位位数 压缩率
<2X TTTTTXX 0 1
2X<4X TTTTXX I 1 2
4X<8X TTTXX I I 2 4
8X<16X TTXXT I I 3 8
请参考图7B,其为本发明所述顺序表和数据缓存的另一个实施例。图7B的缓存中各个组及顺序表的结构与图7A中的相同。然而,在本实施例中压缩比例为‘01’,且数据步长是数据块长度的整数倍(数据步长为二进制补码形式的‘11000’,即十进制的‘-8’)。例如,组‘00’和组‘01’的每个存储块对应的数据地址索引号的最低位都是‘0’,而组‘10’和组‘11’的每个存储块对应的数据地址索引号的最低位都是‘1’。此时,在根据数据地址查找对应的组时,屏蔽位(mask bit)根据压缩比例(‘1’)被左移一位,屏蔽了数据地址中索引号的高位及标签的最低一位(如图7B中标签715和索引号717中的下划线所示)。即,对数据地址中标签除最低一位以外的部分及索引号的最低位进行匹配,以找到该数据地址对应的组;而被屏蔽的那两位就是该数据地址在该组中对应的组内块号。在本实施例中,顺序表603中组‘00’对应的行内的标签值为‘1000’,组‘01’对应的行内的标签值为‘1010’,其中被屏蔽的那一位均为‘0’,表示这两组中存储的数据块的组边界都是对齐的。进一步地,组‘00’和组‘01’的标签除最低一位以外的部分连续且索引号最低位相同,即组‘00’中存储的数据块的标签及索引号分别是‘100000’、‘100010’、‘100100’和‘100110’;组‘01’中存储的数据块的标签及索引号分别是‘101000’、‘101010’、‘101100’ 和‘101110’。 
同样地,以图7B中所示依次访问数据步长相同的四个数据E、F、G和H为例,其中数据E和F分别是组‘01’的第二和第一个存储块中的第二个数据,而数据G和H分别是组‘00’的第四和第三个存储块中的第二个数据,即这四个数据的数据地址之差就是数据步长‘11000’。如之前实施例所述,在根据轨道表619中数据点内容从数据存储器701中获取数据E的过程中,该数据点中的DBNX、DBNY和数据步长均被读出,且DBNX的值为‘0101’,其中组号为‘01’,组内块号为‘01’;DBNY的值为‘01’(即存储块中的第2个数据);数据步长的值‘11000’。 
根据本发明技术方案,该DBNX中的组内块号(‘01’)被送到移位器605。该DBNX中的组号‘01’被送到顺序表603读出对应行(即顺序表603中的第二行)中的内容。其中,索引号717中没有被屏蔽的那一位被用于移位器605左移时在最右侧的补位;压缩比例(‘01’)则被送到移位器605和607作为移位位数(即移一位)。这样,移位器605对输入的‘01’左移一位并补上所述补位‘0’,得到‘010’与DBNY(‘01’)一同构成‘01001’和数据步长‘11000’相加得到‘00001’,其中,组内块号‘000’经移位器607右移一位后输出‘00’,即得到下次数据地址对应的组内块号(‘00’)和DBNY(‘01’)。 
此时,由于加法器611没有溢出(即相减时没有借位),因此选择端口‘0’输出的组号‘01’作为下次数据地址对应的组号。至此,下次数据地址对应的DBNX(即组号‘01’和组内块号‘00’)、DBNY(‘01’)均产生完毕,且指向数据存储器701中数据F。该DBN经总线649被写回轨道表619内该数据点中,供下次读取数据F使用。 
又如,在按本发明技术方案获取数据F的过程中,该数据点中的组号‘01’、组内块号‘00’、DBNY‘01’和数据步长‘11100’再次被读出。其中组内块号‘00’经移位器605左移一位输出并补位‘0’后与DBNY一同构成‘00001’和数据步长‘11000’相加得到‘11001’(即下次数据地址对应的组内块号是‘110’经右移一位得到的‘11’和DBNY‘00’),并发生借位溢出。因此选择端口‘-1’输出的组号‘00’作为下次数据地址对应的组号。至此,下次数据地址对应的DBNX(即组号‘00’和组内块号‘11’)、DBNY(‘01’)均产生完毕,且指向 数据存储器701中数据G。该DBN经总线649被写回轨道表619内该数据点中,供下次读取数据G使用。按上述方法依次操作,即可在压缩比例不为‘0’,但数据步长是数据块长度整数倍的情况下,根据数据步长计算出下次数据地址对应的DBN。 
请参考图7C,其为本发明所述顺序表和数据缓存的另一个实施例。图7C的缓存中各个组及顺序表的结构与图7B中的相同。然而,在本实施例中,且数据步长不是数据块长度的整数倍(数据步长为‘1001’,即十进制的‘9’)。在本实施例中,组‘00’和组‘01’的标签除最低一位以外的部分连续且索引号最低位相同,组‘01’和组‘11’的标签除最低一位以外的部分相同且索引号最低位连续。即,组‘00’中存储的数据块的标签及索引号分别是‘100000’、‘100010’、‘100100’和‘100110’;组‘01’中存储的数据块的标签及索引号分别是‘101000’、‘101010’、‘101100’和‘101110’;组‘11’中存储的数据块的标签及索引号分别是‘101001’、‘101011’、‘101101’和‘101111’。 
以图7C中所示依次访问数据步长相同的四个数据J、K、L和M为例,其中数据J是组‘00’第三个数据块中的第二个数据,数据K是组‘00’的第四个数据块中的第三个数据,数据L是组‘10’中第一个数据块中的第四个数据,数据M是组‘11’中的第二个存储块中的第一个数据,即这四个数据的数据地址之差就是数据步长‘1001’。如之前实施例所述,在根据轨道表619中数据点内容从数据存储器701中获取数据J的过程中,该数据点中的DBNX、DBNY和数据步长均被读出,且DBNX的值为‘0010’,其中组号为‘00’,组内块号为‘10’;DBNY的值为‘01’;数据步长的值为‘1001’。 
根据本发明技术方案,该DBNX中的组内块号(‘10’)被送到移位器605。该DBNX中的组号‘00’被送到顺序表603读出对应行(即顺序表603中的第一行)中的内容。其中,索引号717中没有被屏蔽的那一位被用于移位器605左移时在最右侧的补位;压缩比例(‘01’)则被送到移位器605和607作为移位位数(即移一位)。这样,移位器605对输入的‘10’左移一位并补上所述补位‘0’,得到‘100’与DBNY(‘01’)一同构成‘10001’和数据步长‘1001’相加得到‘11010’,其中,组内块号‘110’经移位器607右移一位后输出‘11’,即得到下次数据地址对应的组内块号(‘11’)和DBNY(‘10’)。 
此时,由于加法器611没有溢出(即相加时没有进位),因此选择端口‘0’输出的组号‘00’作为下次数据地址对应的组号。至此,下次数据地址对应的DBNX(即组号‘00’和组内块号‘11’)、DBNY(‘10’)均产生完毕,且指向数据存储器701中数据K。该DBN经总线649被写回轨道表619内该数据点中,供下次读取数据K使用。 
又如,在按本发明技术方案获取数据K的过程中,该数据点中的组号‘00’、组内块号‘11’、DBNY‘10’和数据步长‘1001’再次被读出。其中组内块号‘11’经移位器605左移一位输出并补位‘0’后与DBNY一同构成‘11010’和数据步长‘1001’相加得到‘00011’(即下次数据地址对应的组内块号是‘000’经右移一位得到的‘00’和DBNY‘11’),并发生进位溢出。因此选择端口‘4’输出的组号‘01’作为下次数据地址对应的组号。至此,下次数据地址对应的DBNX(即组号‘01’和组内块号‘00’)、DBNY(‘11’)均产生完毕,且指向数据存储器701中数据L。该DBN经总线649被写回轨道表619内该数据点中,供下次读取数据L使用。 
再如,在按本发明技术方案获取数据L的过程中,该数据点中的组号‘01’、组内块号‘00’、DBNY‘11’和数据步长‘1001’再次被读出。其中组内块号‘00’经移位器605左移一位输出并补位‘0’后与DBNY一同构成‘00011’和数据步长‘1001’相加得到‘01100’(即下次数据地址对应的组内块号是‘011’经右移一位得到的‘01’和DBNY‘00’)。在此,虽然没有发生进位溢出,但是由于移位器607的右侧被移出部分631的值为‘1’,与索引号中的补位‘0’不一致,因此根据该移出部分631对选择器616进行选择。即,选择端口‘1’输出的组号‘11’并经选择器615选择后作为下次数据地址对应的组号。至此,下次数据地址对应的DBNX(即组号‘11’和组内块号‘01’)、DBNY(‘00’)均产生完毕,且指向数据存储器701中数据M。该DBN经总线649被写回轨道表619内该数据点中,供下次读取数据M使用。按上述方法依次操作,即可在压缩比例不为‘0’,且数据步长不是数据块长度整数倍的情况下,根据数据步长计算出下次数据地址对应的DBN。 
进一步地,在本发明中,每个组第一个数据块对应的索引号可以不是‘0’,以实现一种组边界不对齐的数据存储方式,灵活地存储数据,从而更好地节省 存储空间。请参考图7D,其为本发明所述组边界不对齐的数据存储方式的一个实施例。图7D的缓存中各个组及顺序表的结构与图7A中的相同。然而,在本实施例中压缩比例为‘10’,且数据步长不是数据块长度的整数倍(数据步长为‘10001’,即十进制的‘17’)。例如,组‘00’和组‘01’的每个存储块对应的数据地址索引号的最低位都是‘00’,而组‘10’和组‘11’的每个存储块对应的数据地址索引号的最低位都是‘01’。此时,在根据数据地址查找对应的组时,屏蔽位(mask bit)根据压缩比例(‘10’)被左移两位,屏蔽了数据地址中标签的最低两位,而不屏蔽数据地址中索引号(如图7D中标签715中的下划线所示)。即,对数据地址中标签除最低两位以外的部分及索引号进行匹配,以找到该数据地址对应的组;而被屏蔽的那两位就是该数据地址在该组中对应的组内块号。在本实施例中,顺序表603中组‘00’对应的行内的标签值为‘1000’,组‘01’对应的行内的标签值为‘1100’,其中被屏蔽的那两位均为‘00’,表示这两组中存储的数据块的组边界都是对齐的;而组‘11’对应的行内的标签值为‘1101’,其中被屏蔽的那两位均为‘01’,表示该组中存储的数据块的组边界不对齐,且组边界偏移量就是‘01’。进一步地,组‘00’和组‘01’的标签除最低两位以外的部分连续且索引号相同,组‘01’和组‘11’的标签除最低两位以外的部分相同且索引号连续。即,组‘00’中存储的数据块的标签及索引号分别是‘0100000’、‘0100100’、‘0101000’和‘0101100’;组‘01’中存储的数据块的标签及索引号分别是‘0110000’、‘0110100’、‘0111000’和‘0111100’;对于组‘11’,则由于组边界不对齐,且偏移量为‘01’,因此其中存储的数据块的标签及索引号分别是‘0110101’、‘0111001’、‘0111101’和‘1110001’。 
此外,由于组‘11’的组边界不对齐,因此在根据经总线641送来的数据地址中标签除最低两位以外的部分及索引号匹配到该组时,该数据地址中标签的最低两位还需要和经总线643送来的存储在顺序表603中组‘11’对应的行中存储的标签的最低两位经减法器613相减,以确定该数据地址对应的组内块号。例如,若数据地址是‘011011011’(即标签为‘01110’,索引号为‘01’,块内偏移量为‘11’),则根据标签除最低两位以外的部分(‘011’)和索引号‘01’可以匹配到组‘11’。标签最低两位(‘10’)则与顺序表603中组‘11’对应的 行中存储的标签的最低两位(‘01’)经减法器613相减,得到‘01’(第二个数据块),即该数据地址对应组‘11’第二个数据块的最后一个数据。 
以图7D中所示依次访问数据步长相同的四个数据P、Q、R和S为例,其中数据P是组‘00’第三个数据块中的第二个数据,数据Q是组‘00’的第四个数据块中的第三个数据,数据R是组‘10’中第一个数据块中的第四个数据,数据S是组‘11’中的第一个存储块中的第一个数据,即这四个数据的数据地址之差就是数据步长‘10001’。如之前实施例所述,在根据轨道表619中数据点内容从数据存储器701中获取数据P的过程中,该数据点中的DBNX、DBNY和数据步长均被读出,且DBNX的值为‘0010’,其中组号为‘00’,组内块号为‘10’;DBNY的值为‘01’;数据步长的值为‘10001’。 
根据本发明技术方案,该DBNX中的组内块号(‘10’)被送到移位器605。该DBNX中的组号‘00’被送到顺序表603读出对应行(即顺序表603中的第一行)中的内容。其中,索引号717中没有被屏蔽的那两位被用于移位器605左移时在最右侧的补位;压缩比例(‘10’)则被送到移位器605和607作为移位位数(即移两位)。这样,移位器605对输入的‘10’左移两位并补上所述补位‘00’,得到‘1000’与DBNY(‘01’)一同构成‘100001’和数据步长‘10001’相加得到‘110010’,其中,组内块号‘1100’经移位器607右移两位后输出‘11’,即得到下次数据地址对应的组内块号(‘11’)和DBNY(‘10’)。 
此时,由于加法器611没有溢出(即相加时没有进位),因此选择端口‘0’输出的组号‘00’作为下次数据地址对应的组号。至此,下次数据地址对应的DBNX(即组号‘00’和组内块号‘11’)、DBNY(‘10’)均产生完毕,且指向数据存储器701中数据Q。该DBN经总线649被写回轨道表619内该数据点中,供下次读取数据Q使用。 
又如,在按本发明技术方案获取数据Q的过程中,该数据点中的组号‘00’、组内块号‘11’、DBNY‘10’和数据步长‘10001’再次被读出。其中组内块号‘11’经移位器605左移两位输出并补位‘00’后与DBNY一同构成‘110010’和数据步长‘10001’相加得到‘000011’(即下次数据地址对应的组内块号是‘0000’经右移两位得到的‘00’和DBNY‘11’),并发生进位溢出。因此选择端口‘4’输出的组号‘01’作为下次数据地址对应的组号。至此,下次数据 地址对应的DBNX(即组号‘01’和组内块号‘00’)、DBNY(‘11’)均产生完毕,且指向数据存储器701中数据R。该DBN经总线649被写回轨道表619内该数据点中,供下次读取数据R使用。 
再如,在按本发明技术方案获取数据R的过程中,该数据点中的组号‘01’、组内块号‘00’、DBNY‘11’和数据步长‘10001’再次被读出。其中组内块号‘00’经移位器605左移一位输出并补位‘00’后与DBNY一同构成‘000011’和数据步长‘10001’相加得到‘010100’,移位器607对加法器611输出的索引号‘0101’右移两位得到‘01’。在此,虽然没有发生进位溢出,但是由于移位器607对加法器611输出的索引号‘0101’右移时右侧移出部分631为‘01’,与索引号中的补位‘00’不一致,因此该移出部分631对选择器616进行选择。即,选择端口‘1’输出的组号‘11’并经选择器615选择后作为下次数据地址对应的组号。再从顺序表603中组‘11’对应的行中读出组边界偏移量‘01’,并用移位器607移位得到的‘01’减去该组边界偏移量‘01’,得到真正的组内块号‘00’。 
至此,下次数据地址对应的DBNX(即组号‘11’和组内块号‘00’)、DBNY(‘00’)均产生完毕,且指向数据存储器701中数据S。该DBN经总线649被写回轨道表619内该数据点中,供下次读取数据S使用。按上述方法依次操作,即可在压缩比例不为‘0’、数据步长不是数据块长度整数倍,以及组边界不对齐的情况下,根据数据步长计算出下次数据地址对应的DBN。 
根据本发明技术方案和构思,并结合图7A、7B、7C和7D实施例,即可采用类似方法,对其他各种不同的分组、压缩或数据步长情况做类似操作,在此不再赘述。 
在本发明中,以如下方法提前将处理器核可能要装载的数据提前填充到缓存中,并提前取出供应处理器核使用。本实施例提前读取处理器核正在或将要执行的指令或指令的抽象提前处理数据读取或数据存储指令(以下以数据读取指令为例)。在第一次处理指令循环中的一条数据读取指令时,依据处理器核产生的数据地址确定并记录该指令的起始数据地址。在第二次处理指令循环中的同一条数据读取指令时,根据处理器核产生的第二次数据地址,与记录中同一数据读取指令的起始数据地址相减以获得该数据读取指令的相邻两次执行时的 数据地址之差,作为数据步长记录。并以数据步长与第二次数据地址相加得到下一次数据地址并记录。并且以下一次数据地址查询高层次存储器中有无该数据。如该数据不在高层次存储器,则以下一次数据地址从低层次存储器取得相应数据填入高层次存储器。 
今后,每一次遇到同一条数据读取指令时,即从记录中提取与该指令相应的下一次数据地址提供给处理器核使用。同时根据需要将所述下一次数据地址与处理器核提供的准确数据地址进行比较。如无错误,并以上述下一次数据地址与数据步长相加,获得新的下一次数据地址并记录。并以新的下一次数据地址查询高层次存储器中有无该数据,如该数据不在高层次存储器,则以新的下一次数据地址从低层次存储器取得相应数据填入高层次存储器。如比较发现错误,则将发生错误时的正确地址作为起始数据地址,按上述方式重新执行。 
请参考图8A,其为本发明所述数据访问引擎的一个实施例。图8显示了图6实施例的基础上更完整的一个实施例。其中,处理器核101和数据存储器(或一级数据存储器)113与之前实施例所述相同,数据存储器113中的数据是低层存储器115中数据的子集。先入先出缓冲(FIFO)849作为数据存储器113与处理器核101之间的数据缓冲器。标签841与数据存储器113共同构成传统的路组缓存。数据访问引擎801中的顺序表603、移位器605、607和609、加法器611、减法器613和选择器617与图6中数据访问引擎601中的相应功能块相同。为了便于说明,本实施例中的选择器618则包含了图6实施例中的选择器615和616。此外,顺序表603和选择器618增加了对应更多相邻组的组号的存储和选择,顺序表603中还增加了组有效位及索引位有效位。控制器803控制数据访问引擎的操作。选择器811、813、815在控制器803的控制下,选择来源于轨道表619或减法器613、805的组内索引号,块内偏移量,及步长以供加法器611,移位器605、607计算下一个DBN。减法器613根据数据地址641在顺序表603匹配所得643计算索引号及块内偏移量。减法器805求出同一存储访问指令相邻两次访问的存储器地址之间的差,即数据步长(stride)。换算器(converter)807将步长换算成压缩移位信号存入顺序表603,该压缩移位信号829被作为移位位数用于控制移位器。当前缓存地址总线821将来源于轨道表619的表项内容送往各功能块。中间结果总线823将来源于减法器613组内块号 及块内偏移量送往加法器611,和移位器605、607计算下一个DBN。总线825将减法器805计算得到的数据步长送往选择器815。控制器803产生的控制信号827控制选择器811、813、815、817、617,以及819。从顺序表603中输出的移位信号829控制移位器605、607及609。下一数据地址总线881将下一数据地址送往顺序表603产生相应数据地址从低层存储器115向数据存储器113预先填充数据,也将下一DBN送往轨道表619存储。 
传统的缓存是一种基于匹配的间接寻址,以组相连缓存为例,数据地址中间的索引位从缓存的标签中读出复数个标签后各自与数据地址中的高位进行匹配。如果某个路组的标签匹配,则称为命中。该路组的内容就是数据地址所指向的。一级数据存储器113由复数个相同的存储器构成,每个存储器构成一个路组,每个路组行数相同,即采用多路组形式构成。每个存储器的每一存储行称为一级数据块,每个一级数据块有一个索引号(INDEX)802,它由一级数据块所在一级数据存储器113中的行号所决定。块内偏移627则指向块内的一个数据项。请参考图8B,其为本发明所述各种地址形式的示意图。根据一级数据存储器113中每个路组的一级数据块数及块内的数据数可将数据地址804划分为高位的标签801,中间的索引位802与低位的块内偏移627, 
本实施例中的缓存开始也以匹配间接寻址,建立了数据地址与缓存地址的关系后,即以缓存地址直接寻址。以缓存地址直接寻址节省了标签匹配的操作,节省了功耗,也提高了存储器访问速度。 
根据本发明技术方案,对于按组分配的缓存,其组存储地址808分为高位的存储器组地址(GN)623,中间的组内块号(index)625与低位的块内偏移量(offset)627。而组相联的缓存,其缓存地址806分为高位路组号814,中间的路组内索引号802与低位的块内偏移量627。这两种缓存地址与数据地址中的块内偏移量是完全一样的,但是索引号或组内块号的位数不一定一样。因为按组分配的缓存地址的分组可以比路组分得更小,因此组存储地址的组内块号的位数可能比组相联缓存地址的索引号的位数要少,而相应标签的位数会更多。选择器843选择由标签841产生的组相联缓存地址或由数据访问引擎产生的组存储地址供轨道表619存储,这两种地址的形式是一样的,其实质是数据存储器113的地址。 
在本发明中,根据顺序表603的内容可以将数据地址与缓存地址相互转换。当一个数据地址要转换为缓存地址时,以该数据地址高位从总线641送入顺序表603与其中的标签和索引号匹配,匹配上的表项对应的组号可以从总线835读出,标签和索引号也从总线643读出,将总线641上的数据地址与643上的标签、索引号经减法器613相减,即得出标签低位与索引号及块内偏移。该标签低位与索引号经移位器609移位后,即得到相应缓存地址的组内块号,将上述组号、组内块号与块内偏移量组合在总线837上即得到与该数据地址相应的缓存地址。 
当一个缓存地址要转换为相应的数据地址时,即以缓存地址中的组号623寻址顺序表603,从中读出标签和索引号经总线643送出。将该标签和索引号与缓存地址中的组内块号625、块内偏移量,627相加,其和就是数据地址。 
根据本发明技术方案,数据访问引擎可以提供数据地址访问低层存储器115,也可以提供缓存地址访问数据存储器113。数据访问引擎中还保存有数据地址和缓存地址的对应关系,可以从一种地址换算成另一种地址。 
在本实施例中,循迹器845根据轨道表619数据点输出的内容决定下一个轨道表读取地址851。该轨道表读取地址851经延迟器847延迟后作为轨道表写地址853。 
请见图8C,其为本发明所述顺序表操作的一个实施例。其中顺序表603由寄存器,比较器及掩码寄存器(mask register)构成。各寄存器也可以由存储器来实现。其中,有移位区域891,相邻组区域892,组有效信号893与块有效信号894,标签与索引号895,掩码896以及比较器897。其中,标签与索引号及比较器可以由内容寻址存储器(CAM)实现。标签、索引号、比较器以及掩码可以由三态的CAM(tri-state CAM)来实现。掩码作用于标签的低位及索引号,可以选择性地使标签的低位或索引号中的某些位不参与比较(即这些标签或索引号的位不影响比较结果),实现数据压缩存放的功能。掩码由移位区域控制,当移位为‘0’时,掩码掩盖最低位(即索引号);当移位为‘1’时,掩码往左移一位,掩盖标签的最低一位及索引号的高位,留出索引号的最低一位参与比较。比较器897比较总线641上的数据地址与标签、索引号895经掩码896掩盖后的值,比较结果经总线888送出,供控制器803做决策依据。相邻组区 域892存放与本组相邻的组号及有效位,供按数据步长步进越过本组边界时依循。组有效信号893在本组第一次有数据写入时设置表示本组中至少有一数据块有效,也表示本组对应于由标签、索引号段中所含的地址指向的数据。块有效信号894每一位代表本组中一个数据块的有效性,可以由总线641上输入的标签中的低位及索引号由移位区域891控制下移位后的结果进行解码(如2位二进制地址解码为4位,其中只有一位有效(one-hot),每位代表一个数据块)来选择块有效信号894中的数据块有效信号,若该数据块有效信号为有效,则相应数据已在数据存储器113中该组的对应数据块中。如无效,则需将相应数据填充入该数据块中。 
顺序表603可以由两种方式访问。一种方式是经由图8A中总线641所送入的数据地址与顺序表603中的标签匹配,另一种方式是经由图8A中的组号831或组号833直接寻址。被数据地址匹配上的或被组号寻址到的顺序表603中表项中的各个数据区域都可被读出或写入。例如,可以经由数据地址匹配读出相应的组号835,也可经由组号829寻址读出相应的标签643。顺序表603中被匹配或寻址选中的表项的其他区域,如相邻组号,块有效信号及组有效信号都可以被读或写。在被写入前,表项中所有区域被重置为全‘0’。 
数据访问引擎遇到一条新的数据读取指令时,分几个阶段处理。第一个阶段是第一次处理一条数据读取指令,这个阶段判断数据读取指令是否在一个循环中,如不在循环中,则在组相联缓存区域的各路组中按数据读取指令的数据地址中的索引号分配一级数据存储器113中一个路组中的指令块,将数据写入,并在该路组该索引号对应的标签841中写入该数据地址中标签部分。如在循环中,则在按组分配的缓存区域中分配一个组供这条数据读取指令可能读取的数据使用。在两种情况下,都将数据地址映射为缓存地址存放在该数据读取指令的相关信息区域,同时按数据地址访问存储器提供相应数据给处理器核101。 
在本实施例中,可以根据数据读取指令是否位于一条反向的分支指令及其分支目标指令之间,来判断该数据读取指令是否位于循环中。例如,循迹器可以提供一个指针指向处理器核正在执行的当前指令之后的第一条反向的分支指令,即该分支指令的分支目标地址比该分支指令本身的地址小。这样,位于当前指令和所述分支目标指令中地址较大者之后到该分支指令之间的所有数据读 取指令都位于该分支指令形成的循环中。当然,所述循迹器指针也可以指向当前指令之后的更多个反向的分支指令,并根据经过的每条反向的分支指令的分支目标地址,确定各个循环中分别包含了哪些数据读取指令。 
第二个阶段是第二次处理同一条数据读取指令。这个阶段除按数据地址访问存储器提供相应数据给处理器核101外,还根据第二次的数据地址与第一次数据地址(第一次处理该数据读取指令时存放)的差算出数据步长,并以第二次的数据地址与数据步长相加,求出第三次处理该数据读取指令时存储器访问的可能数据地址,并以该可能数据地址从低层存储器115读数据。另外换算出与该可能数据地址对应的缓存地址,据此将来自低层存储器115的数据填充入数据存储器113。同时将该缓存地址连同步长存放在该数据读取指令的相关信息区域。 
第三个阶段是第三次或第三次以后处理同一条数据读取指令。这个阶段则直接以上一次存放的缓存地址从数据存储器113提供数据给处理器核101。数据访问引擎也有机制将处理器核101产生的数据地址与上一次存放的缓存地址进行比较,如不一致,则按处理器核101产生的数据地址重新取数据,并对缓存地址进行修正。另外再以缓存地址与数据步长相加得到下一次装载的可能缓存地址,并按此地址填充存储器113。然后将新的缓存地址存放在该数据读取指令的相关信息区域,以备下次使用。在此以后,对该数据读取指令的处理方式与第三次时相同。 
对数据读取指令处理的不同阶段由控制器803控制。轨道表619中建立轨道时数据读取指令的缓存地址与数据步长的初始值都为0。控制器803读取数据读取指令的缓存地址与数据步长以及该数据读取指令的轨道表地址。请参看图8D,其为本发明所述控制器的一个实施例。控制器803中有复数组匹配计数器,其单元结构为以一个存储器861、一个比较器862与一个计数器863为一组,其中存储器861与比较器862的位宽等于轨道表地址,计数器863的位宽为两位。分配器864负责将一组空闲的匹配计数器分配给一条第一次处理的数据读取指令。初始值检测器865用于检测指令形式,及全‘0’的缓存地址与数据步长。另有总线821将指令类型,缓存地址与数据步长导入到初始值检测器865,总线851将轨道表地址连接到各匹配计数器组的存储器的输入与比较器的一个端口。 总线866则将存储器(如861)中存储的值与总线851上的轨道表地址(当前数据读取指令的地址)匹配的组中计数器的计数值传输到控制逻辑867以按该指令所处的阶段控制数据访问引擎的操作。 
分配器864中有一个循环计数器,其输出经一个译码器872转换成指针指向各匹配计数器。被指针指向的寄存器组计数器值被读出经总线869送回分配器864,如比较器870发现其值不为‘0’(正被一条数据读取指令使用),则使分配器864中循环计数器计数增‘1’,使得指针移向下一个匹配计数器组。当匹配计数器组返回的计数器值为‘0’时,循环计数器停止计数,使指针停留在该组,下一个尚未处理的数据读取指令的轨道表地址将被存入该匹配计数器组中的存储器。以下假设指针停留在寄存器861所在的组。 
当初始值检测器865检测到非数据读取指令时,控制器803工作在模式0状态下。对该指令不作反应。当检测到一条缓存地址与数据步长都为‘0’的数据读取指令时,即判断该指令为尚未处理过,进入第一阶段模式操作。首先,初始值检测器865产生一个写使能信号868,将总线851上的数据读取指令轨道表地址存入分配器864的指针指向的匹配计数单元中的存储器861。此时,存储器861的值与总线851上的值相同,比较器862的输出为‘1’,即该组为当前指令组。当前指令组相应的计数器862的计数增‘1’得到‘1’,且该计数值被放上总线866传输到控制逻辑867使其按第一阶段模式设置数据访问引擎中的各个选择器及功能块。 
当第二次遇到这条数据读取指令时,初始值检测器865检测为数据读取指令,其控制各组中的比较器与总线851上的轨道表地址比较。寄存器861的值与其匹配,比较器862控制计数器863增‘1’,使其计数值为‘2’。匹配上的组称为当前指令组,当前指令组中计数器的值被放上总线866传输到控制逻辑867使其按第二阶段模式设置数据访问引擎中的各个选择器及功能块。 
当第三次遇到这条数据读取指令时,初始值检测器865检测为数据读取指令,其控制各组中的比较器与总线851上的轨道表地址比较。寄存器861的值与其匹配,该组为当前指令组,比较器862控制计数器863增‘1’,使其计数值为‘3’。该值被放上总线866传输到控制逻辑867使其按第三阶段模式设置数据访问引擎中的各个选择器及功能块。 
当第四次遇到这条数据读取指令时,初始值检测器865检测为数据读取指令,其控制各组中的比较器与总线851上的轨道表地址比较。寄存器861的值与其匹配,该组为当前指令组,比较器862控制计数器863增‘1’,使其计数值溢出为‘0’。该值被放上总线866传输到控制逻辑867使其按第三阶段模式设置数据引擎中的各个选择器。控制逻辑867对计数值‘0’或‘3’都按默认态第三阶段状态操作。该计数器计数到‘0’后其计数值即不再增加,使得比较器862不再参与比较。计数值为‘0’也使得该单元可被分配器864选择供别的数据读取指令使用。 
下一次遇到这条数据读取指令时,但初始值检测器865同时检测到从总线821上送来的相应缓存器地址与数据步长皆不为‘0’,且各组中的比较器与总线851上的轨道表地址比较,结果无一相同。据此判断这是一条已进入第三阶段的数据读取指令,指导控制逻辑867按默认模式,即第三阶段模式控制数据引擎的运行。 
从标签841及顺序表603返回的反馈信号888、889及减法器805产生的差825都被送回控制器803中的控制逻辑867,控制逻辑867根据这些反馈信号与从总线866传来的当前指令所处阶段信息控制数据访问引擎的运行。在某些情况下控制逻辑867也可将信息反馈至匹配计数器组改变当前指令所处阶段以处理异常情况。比如,一条数据读取指令已经进入第三阶段后如预测的数据地址与从处理器核经总线641送来的数据地址不相符,则控制逻辑867会送反馈信号至当前指令对应的匹配计数组,使其计数值为‘1’。此后该指令就以第一阶段状态开始执行,经历第二,第三阶段重新建立步长及下一缓存地址存入轨道表619。 
以下以一条数据读取指令在本实施例中数据访问引擎的实际运行进一步说明数据访问引擎的操作。循迹器845控制轨道表读地址851移向下一条数据读取指令,该数据读取指令对应表项中的类型621,DBN(623、625、627),数据步长629被放上当前数据地址总线821。控制器803读取类型621识别为数据类型,DBN与数据步长为全‘0’,判断该指令为尚未处理,但仍控制选择器617将总线821上全‘0’的DBN经总线861送往数据存储器113获取数据放入缓冲849供存储器核备用(另外也可不以全‘0’的DBN为地址取数据以节省功 耗)。与此同时,控制器803进入第一阶段模式,控制选择器817将总线821上的组号623送入顺序表603,从中选择0号表项(或第一个表项)中存储的标签(如该标签为无效,则输出全‘0’)经总线643送往移位加法器812与总线821上的组内块号移位后相加。处理器核101产生的数据地址641与移位加法器812的输出在减法器613中相减,其差(difference)被放上总线825。控制器803从总线825获取该差进行分析判断,如此差不为‘0’,控制器据此判断执行821上的DBN所指向的数据不是处理器核101所需的数据,即通知处理器核无视在缓冲849中的相应数据,等待正确数据(另外也可以不做此判断以节省功耗)。 
控制器803并控制总线641上的数据地址与顺序表603中及标签841中的标签进行匹配。如果在标签841中匹配命中,则按传统缓存的方式操作。如所有标签都不匹配,则将总线641上的数据地址经选择器819送往低层存储器115,从低层存储器115读取相应数据块。此时,循迹器845已向前看到下一个分支点并判断出该分支是反向分支(即此处程序为一个循环),计算出其范围包含正被处理的数据读取指令,则分配一个可被替换的数据组(data group),并指定该组中0号数据块(或第一个数据块)以填充从低层存储器读取的相应数据块。总线641上的标签与索引号部分被存入顺序表603中相应表项中的标签、索引号区域。该组的组有效位及相应数据块(0号数据块)的有效位被置为有效。该表项中的移位项此时为全‘0’,相邻组号部分尚未有值。 
该表项的地址(即组号GN)从顺序表603中经总线835输出放上总线837,同时,总线641上的数据地址由减法器613减去从顺序表603中经总线643送出的刚存入的标签,将差值放上中间结果总线823。因为总线641和总线643上的地址高位是相同的,其差此时就是标签低位、索引与块内偏移量。此低位经移位器609(此时移位量为‘0’)也放上总线837与其上的组号组成一个完整的、正确的缓存地址,此时控制器803控制选择器617将总线837上的缓存地址放上总线855送往数据存储113指出正确的数据块供从低层存储器115读取的相应数据块填充。控制器803也控制此数据从数据存储器113中读出,或控制该数据直接从低层存储器115的输出旁路到数据缓冲849以备存储器101使用。之后控制器803通知处理器核101正确数据可供使用。 
控制器803也控制选择器811、813与815选择总线823上的组内块号与块 内偏移与来自轨道表的全‘0’步长在加法器611中如图6中实施例相加,将结果放上总线881。此时,由相加结果产生的控制线631控制选择器618选择顺序表603输出的当前组号也放上总线881。组号,组内块号与块内偏移在总线881上共同拼接成一个缓存器地址DBN。此时,控制器803控制选择器843选择总线881,延迟器847将轨道表读地址851延迟后放上轨道表写地址853,使得该DBN被写入前次读出的同一个表项,此时控制器803控制步长不更新(或强制写‘0’),仍然为‘0’。操作完成后,轨道表该表项中即存有该数据读取指令已经完成的读取的缓存地址,(以下称为DBN1以便于说明),步长为‘0’。至此,数据访问引擎完成对该数据读取指令的第一阶段操作。 
如前所述,此例中的程序正在执行一个循环。当再次执行到前述的同一条数据读取指令时,类型621,DBN1与数据步长‘0’被读出放到总线821上,轨道表地址也在总线851上。控制器803读进轨道表读地址851与控制器803中匹配计数组中存放的地址匹配,获得对该指令执行第二阶段操作的提示,由控制逻辑867经控制总线827控制数据访问引擎做相应操作。控制器803控制总线821上DBN1的组号(GN)623从顺序表603中选择相应表项中存储的标签、组内块号经总线643送往选择器810与来自总线821上的DBN1中的组内块号,块内偏移由移位加法器812相加(其移位量从顺序表603中输出的总线829控制)。为支持顺序表603中标签、索引号895存储的非对准的标签与索引,需要在移位加法器812中对总线821上的组内块号及块内偏移量(低位)进行移位后再和总线643上的标签索引号(高位)相加。其和即为DBN1相应的数据地址,被送入减法器805的一个输入端。总线641上新来的数据地址被送到减法器805的另一个输入端与上述DBN1相应的数据地址相减,得到的差作为数据步长(stride)放上总线825。换算器807将该步长换算为相应的移位信号(shift)写入顺序表603中DBN1相应的表项中的移位信号区域。其移位量829从顺序表603被送往各移位器605,607,609及812控制移位操作。 
控制器803控制选择器819选择总线641上的数据地址从低层存储器115中读取相应数据。同时641上数据地址与643上的相应DBN1表项中的标签、组内块号经减法器613相减所得的低位也被放上总线823。控制器803控制选择器811、813将总线823上的低位(即DBN2的标签低位,索引与块内偏移量) 送往加法器611等与‘0’相加,并按顺序表603中DBN1表项中移位域中的移位量移位。其和即为DBN2的组内块号与块内偏移量被放上总线881,被移位器607右移移出的结果631控制选择器618从顺序表603中DBN1的表项中选取相邻组号。如该组号无效,则按图7例及第一阶段的例子分配新的组填充DBN2数据块,并设置其与DBN2相应的有效位和标签索引号等,其中移位域按DBN1的移位域设置。其过程中DBN1中原无效的组号的相邻组号会被填入新分配组的组号并置为有效,再次读出。DBN1的组号也会被填入DBN2对应的相邻组号中。如有效,则直接将该组号读出。该组号也被放上总线881和总线881上的组内块号、块内偏移量一同经总线816送往选择器617选择后作为DBN2的缓存地址放上总线855送往数据存储113以填充来自低层存储器115的数据,及从该地址读出正确的数据送往缓冲器849以备处理器核101使用。之后控制器803通知处理器核101已有正确数据可供使用。 
控制器803控制选择器811、813将总线823上的低位(即DBN2的标签低位,索引与块内偏移量)送往加法器611等与总线825上的数据步长相加,并按顺序表603中DBN2表项中移位域中的移位量移位。其和即为新的组内块号与块内偏移量被放上总线881,被移位器607右移移出的结果631控制选择器618选择顺序表603中的一个相邻组号。如该相邻组号无效,则说明该数据块不在一级数据存储器113中,此时按上例分配新的数据组。该组号与相加得到的组内块号与块内偏移量共同构成一个下一次执行该数据读取指令时的缓存地址,以下称DBN3。控制器803控制将DBN3与总线825上的数据步长经总线881,选择器843写回轨道表619中同一条数据读取指令(此前存放DBN1)的对应表项。 
控制器按DBN3相应的数据地址从低层存储器115取数据填充DBN3指向的一级数据存储器113中数据块以备下个循环同一指令读取。具体地,DBN3中的组号,组内块号及块内偏移量经总线816送到选择器617选择后指向一级数据存储器113中数据。同时,在顺序表603中根据DBN3中的组号读出对应的标签索引号(高位)由总线643输出,DBN3中的组内块号和块内偏移量则由总线818送往选择器810被选择后由移位加法器812中对所述组内块号及块内偏移量进行移位后再和总线643上的标签索引号相加以得到正确的数据地址。该数据地 址经选择器819选择后送到低层存储器115中取数据填充DBN3指向的一级数据存储器113中数据块。 
在下一个循环中,当DBN3被放上总线821时,控制器803根据轨道表地址匹配判定相应的数据读取指令已进入第三阶段。控制器803控制选择器617选取总线821上的DBN3通过总线855从一级数据存储器113读取相应数据,放入缓冲器849被处理器核101使用。控制器803也控制DBN3的相应数据地址与经641送来由处理器核101产生的数据地址比较,将DBN3与数据步长相加以获得DBN4,并根据DBN4查询顺序表603,如必要时从低层存储器115获取相应数据存入一级数据存储器113,一如前例,以待下个循环。之后的循环都如此执行。 
此外,在某些循环中数据读取指令的数据步长为负数,即从某个数据地址开始读取数据地址较大的数据,之后逐次读取数据地址较前一次小的数据。这种情况下,控制器在第一阶段无法判断步长是正是负,将DBN1相应的数据安排在某一组中的0号数据块上。在第二阶段有了DBN2与DBN1相减得出数据步长,发现数据步长是负数,此时可以将DBN2安排在另外一个数据组的最高数据块,将DBN2的相应数据地址的高位(来自总线641)写入该组的标签索引位,并将该组的组号写入DBN1所在组中的相邻组号中的前一组内,将DBN1的组号写入该组的相邻组号中的下一组位内。如此安排符合本实施例的寻址规则,不管以数据地址或缓存地址寻址,都可以正确找到需要的数据。 
另一种方法则可以不分配一个新的组,而直接将DBN2存入DBN1所在的组以更节省缓存空间。其方法是将该组的组内块号倒置,以一组内有四个数据块为例。此时,即将原DBN1所存放的0号块映射为3号块,原3号块映射为0号块,原1号块映射为2号块,原2号块映射为1号块。其实现方式是在组内块号所经的路线上加反向器,反向器输出的组内块号是反向器输入的组内块号按位求反。为此在顺序表603的特征项下增设一个倒置(R)位。当R位为‘0’时,反向器不起作用,输出与输入同。当R位为‘1’时,反向器作用,其输出是输入的按位求反。如此,原来按减序存入组内的数据被以增序存入组内。如DBN1(按索引应该是0号)现在实际被存入0号块,但存入轨道表的缓存地址标为3号块;DBN2(按索引应该是-1号)现在实际被存入1号块,但存入轨道表的缓存地址标为2号块;DBN3(按索引应该是-2号)现在实际被存入2号块, 但存入轨道表的缓存地址标为1号块;DBN4(按索引应该是-3号)现在实际被存入3号块,但存入轨道表的缓存地址标为0号块。但这样还有一个问题,该组的标签索引位是以DBN1被放置在0号块而设定的。所以在第二阶段,求出步长为负数,填充DBN2数据块时就将该组的R位设为‘1’,并将该组在第一阶段写入的标签、索引号域经总线643读出,减去一个常数后重新写回该标签、索引号域。该常数可以经查表或计算获得。设一个数据组有n个数据块,而待调整的顺序表603表项中的移位域为s(与标签、索引号同时读出并被送到总线829上),则该常数等于(n-1)*(s+1)。例如,上例中4个数据块,移位值为‘0’,则该常数等于‘3’。则DBN1的标签、索引号值(此时对应于映射后地址上处于3号块的DBN1)减去3,恰恰就是DBN4(此时对应于映射后地址上处于0号块的DBN4)的标签索引号值。又如,移位值为‘1’,此时常数为‘6’。其他由此类推,不再赘述。 
数据地址和轨道表中存有的DBN都使用映射前的正确地址,只有将缓存地址送往一级数据存储器113时才需要映射后的地址,所以可以将上述反向器放置在图8A中选择器617之后且仅对组内块号进行反向。在本实施例的第三阶段,从轨道表619送出的DBN经选择器617送往一级数据存储器113中取数据时还需以组号623至顺序表603中读取R位以控制该反向器。如在轨道表619中的数据表项中增设R位,则可免去此时对603的查询。但通常此时为了与从总线641送来的数据地址作比较,也必须以组号623查询顺序表603从总线643获得与该DBN相应的标签索引号域。 
根据本发明技术方案和构思,还可以有其他任何合适的改动。对于本领域普通技术人员来说,所有这些替换、调整和改进都应属于本发明所附权利要求的保护范围。 

Claims (22)

1.一种数据缓存方法,其特征在于对缓存中的数据存储器进行配置,其中一部分存储块实现传统的组相联结构,另一部分存储块实现按组分配的结构;和
所述按组分配的缓存由多个组构成,每个组中存储对应同一个起始数据块地址的若干数据块,且组内各个相邻的存储块对应的数据地址之差为相同值。
2.根据权利要求1所述方法,其特征在于,每个组中的数据块对应的数据地址具有相同部分;
所述相同部分由数据地址中的标签构成,或由数据地址中的标签的一部分和索引号的一部分构成;和
地址相邻或相近的数据块存储在同一个组中。
3.根据权利要求2所述方法,其特征在于,当一个组中的各个相邻的存储块对应的数据地址之差等于数据块长度时,该组中的所有存储块中的数据块地址连续;和
当一个组中的各个相邻的存储块对应的数据地址之差等于数据块长度的整数倍时,该组中的所有存储块中的数据块地址的间隔相等;和
可以根据当前数据在该组中对应的位置以及数据步长,直接确定下一数据是否也位于该组中,以及当该下一数据位于该组中时的所在位置。
4.根据权利要求3所述方法,其特征在于,提供一个顺序表;所述顺序表的行与数据存储器中的组一一对应;且
所述顺序表的每一行中包含了一个压缩比例;所述压缩比例表示了相应组中各个相邻存储块对应的数据块地址的间隔值。
5.根据权利要求4所述方法,其特征在于,所述顺序表的每一行中包含了与相应组中数据块相邻的数据块所在的组的位置;和
可以根据当前数据在该组中对应的位置以及数据步长,直接确定下一数据所在的组及组中的位置。
6.根据权利要求5所述方法,其特征在于,所述顺序表的每一行中包含了与相应组中第一个数据块相邻的连续若干个数据块所在的组的位置。
7.根据权利要求5所述方法,其特征在于,所述顺序表的每一行中包含了与相应组中最后一个数据块相邻的连续若干个数据块所在的组的位置。
8.根据权利要求5所述方法,其特征在于,将数据地址转换为缓存地址;
所述缓存地址由组号、组内块号和块内偏移量构成;其中块内偏移量与数据地址中的块内偏移量相同;和
所述缓存地址可以直接用于对数据缓存中的数据存储器寻址。
9.根据权利要求8所述方法,其特征在于,将循环代码中数据访问指令对应的数据存储在按组分配的结构中,其他数据访问指令对应的数据存储在组相联的结构中。
10.根据权利要求9所述方法,其特征在于,对第一次执行到的数据访问指令,当其数据地址产生后被转换为缓存地址。
11.根据权利要求10所述方法,其特征在于,对第二次执行到的数据访问指令,当其数据地址产生后被转换为缓存地址,且计算得到数据步长;所述数据步长就是两次数据地址之差;和
根据本次缓存地址和数据步长计算出下次执行该数据访问指令时可能的下次缓存地址,供下次执行该数据访问指令是对数据存储器寻址;且
当所述下次缓存地址对应的数据存储器中的数据无效时,将下次缓存地址转换为相应的数据地址,并将对应的数据填充到数据存储器中。
12.根据权利要求11所述方法,其特征在于,对第三次及以后执行到的数据访问指令,根据本次缓存地址和数据步长计算出下次缓存地址,供下次执行该数据访问指令是对数据存储器寻址;且
当所述下次缓存地址对应的数据存储器中的数据无效时,将下次缓存地址转换为相应的数据地址,并将对应的数据填充到数据存储器中。
13.一种数据缓存系统,其特征在于,所述数据缓存系统中的数据存储器可以根据配置,将其中一部分存储块作为传统的组相联结构运行,另一部分存储块作为按组分配的结构运行;和
所述按组分配的结构包含多个组,每个组包含若干个存储块及一个数据块地址存储单元,且该组中所有存储块都对应该数据块地址存储单元中的数据块地址;和
每个组内各个相邻的存储块对应的数据地址之差为相同值。
14.根据权利要求13所述系统,其特征在于,还包含带掩码的比较器,所述比较器用于将数据地址中的一部分块地址与所述数据块地址存储单元中的数据块地址的相应位进行匹配,以确定该数据地址对应的数据是否存储在该组中。
15.根据权利要求14所述系统,其特征在于,当一个组中的各个相邻的存储块对应的数据地址之差等于数据块长度时,该组中的所有存储块中的数据块地址连续;且
当所述数据地址对应的数据存储在该组中时,由所述被掩码的位对该组中的存储块寻址,即可找到所述数据地址对应的数据。
16.根据权利要求14所述系统,其特征在于,还包括移位器;当一个组中的各个相邻的存储块对应的数据地址之差等于数据块长度的整数倍时,该组中的所有存储块中的数据块地址的间隔相等;且
当所述数据地址对应的数据存储在该组中时,由所述移位器对所述被掩码的位移位后得到的值对该组中的存储块寻址,即可找到所述数据地址对应的数据。
17.根据权利要求14所述系统,其特征在于,还包括顺序表存储器;所述顺序表存储器中的行与数据存储器中的组一一对应;且
所述顺序表存储器的每一行中包含了一个用于存储压缩比例的存储单元;所述存储单元中存储的值表示了相应组中各个相邻存储块对应的数据块地址的间隔值。
18.根据权利要求14所述系统,其特征在于,所述顺序表存储器的每一行中包含了指向相应组中数据块相邻的数据块所在的组的位置的指针;和
可以根据当前数据在该组中对应的位置以及数据步长,直接确定下一数据所在的组及组中的位置。
19.根据权利要求18所述系统,其特征在于,所述指针指向相应组中第一个数据块相邻的连续若干个数据块所在的组的位置。
20.根据权利要求18所述系统,其特征在于,所述指针指向相应组中最后一个数据块相邻的连续若干个数据块所在的组的位置。
21.根据权利要求18所述系统,其特征在于,由所述比较器对数据地址和数据块地址存储单元中的数据块地址匹配,并由移位器根据压缩比例存储单元中的值对数据地址中的索引号进行相应移位,可以将数据地址转换为缓存地址;
所述缓存地址由组号、组内块号和块内偏移量构成;其中块内偏移量与数据地址中的块内偏移量相同;和
所述缓存地址可以直接用于对数据缓存中的数据存储器寻址。
22.根据权利要求18所述系统,其特征在于,根据缓存地址对应的数据块地址存储单元中的数据块地址值,并由移位器根据压缩比例存储单元中的值对缓存地址中的组内块号进行相应移位,可以将缓存地址转换为数据地址。
CN201310576787.1A 2013-11-16 2013-11-16 一种数据缓存系统和方法 Active CN104657285B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201310576787.1A CN104657285B (zh) 2013-11-16 2013-11-16 一种数据缓存系统和方法
PCT/CN2014/090972 WO2015070771A1 (zh) 2013-11-16 2014-11-13 一种数据缓存系统和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310576787.1A CN104657285B (zh) 2013-11-16 2013-11-16 一种数据缓存系统和方法

Publications (2)

Publication Number Publication Date
CN104657285A true CN104657285A (zh) 2015-05-27
CN104657285B CN104657285B (zh) 2020-05-05

Family

ID=53056780

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310576787.1A Active CN104657285B (zh) 2013-11-16 2013-11-16 一种数据缓存系统和方法

Country Status (2)

Country Link
CN (1) CN104657285B (zh)
WO (1) WO2015070771A1 (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106933749A (zh) * 2015-12-31 2017-07-07 北京国睿中数科技股份有限公司 应用于缓存验证系统的地址随机方法和装置
CN112380148A (zh) * 2020-11-30 2021-02-19 海光信息技术股份有限公司 数据传输方法和数据传输装置
CN112948173A (zh) * 2021-02-02 2021-06-11 湖南国科微电子股份有限公司 一种数据恢复方法、装置、设备及介质
CN113656330A (zh) * 2021-10-20 2021-11-16 北京微核芯科技有限公司 确定访问地址的方法和装置
CN113741976A (zh) * 2021-08-25 2021-12-03 武汉大学 缓存颠簸消除方法、装置、设备及存储介质

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106293624A (zh) * 2015-05-23 2017-01-04 上海芯豪微电子有限公司 一种数据地址产生系统和方法
CN117478626B (zh) * 2023-12-27 2024-04-05 天津光电聚能通信股份有限公司 基于组相连缓存的快速匹配查找系统、方法、设备及介质
CN117971318B (zh) * 2024-03-28 2024-07-02 北京微核芯科技有限公司 取数指令猜测不相关错误的预测方法和装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101178690A (zh) * 2007-12-03 2008-05-14 浙江大学 低功耗高性能高速暂存器的设计方法
CN101438237A (zh) * 2006-05-10 2009-05-20 高通股份有限公司 基于区块的分支目标地址高速缓冲存储器
CN101533371A (zh) * 2008-03-12 2009-09-16 Arm有限公司 使用微标签的高速缓存存取
CN101727406A (zh) * 2008-10-20 2010-06-09 株式会社东芝 组相联方式的高速缓存装置、高速缓存方法及处理器系统
CN102110058A (zh) * 2009-12-25 2011-06-29 上海芯豪微电子有限公司 一种低缺失率、低缺失惩罚的缓存方法和装置
CN102662868A (zh) * 2012-05-02 2012-09-12 中国科学院计算技术研究所 用于处理器的动态组相联高速缓存装置及其访问方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6157980A (en) * 1998-03-23 2000-12-05 International Business Machines Corporation Cache directory addressing scheme for variable cache sizes
CN101876945B (zh) * 2009-11-24 2012-07-11 西安奇维测控科技有限公司 针对逻辑地址不同数据自动配置虚拟块的方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101438237A (zh) * 2006-05-10 2009-05-20 高通股份有限公司 基于区块的分支目标地址高速缓冲存储器
CN101178690A (zh) * 2007-12-03 2008-05-14 浙江大学 低功耗高性能高速暂存器的设计方法
CN101533371A (zh) * 2008-03-12 2009-09-16 Arm有限公司 使用微标签的高速缓存存取
CN101727406A (zh) * 2008-10-20 2010-06-09 株式会社东芝 组相联方式的高速缓存装置、高速缓存方法及处理器系统
CN102110058A (zh) * 2009-12-25 2011-06-29 上海芯豪微电子有限公司 一种低缺失率、低缺失惩罚的缓存方法和装置
CN102662868A (zh) * 2012-05-02 2012-09-12 中国科学院计算技术研究所 用于处理器的动态组相联高速缓存装置及其访问方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106933749A (zh) * 2015-12-31 2017-07-07 北京国睿中数科技股份有限公司 应用于缓存验证系统的地址随机方法和装置
CN112380148A (zh) * 2020-11-30 2021-02-19 海光信息技术股份有限公司 数据传输方法和数据传输装置
CN112948173A (zh) * 2021-02-02 2021-06-11 湖南国科微电子股份有限公司 一种数据恢复方法、装置、设备及介质
CN113741976A (zh) * 2021-08-25 2021-12-03 武汉大学 缓存颠簸消除方法、装置、设备及存储介质
CN113741976B (zh) * 2021-08-25 2024-06-11 武汉大学 缓存颠簸消除方法、装置、设备及存储介质
CN113656330A (zh) * 2021-10-20 2021-11-16 北京微核芯科技有限公司 确定访问地址的方法和装置

Also Published As

Publication number Publication date
WO2015070771A1 (zh) 2015-05-21
CN104657285B (zh) 2020-05-05

Similar Documents

Publication Publication Date Title
CN104657285A (zh) 一种数据缓存系统和方法
CN102841865B (zh) 高性能缓存系统和方法
CN102306093B (zh) 实现现代处理器间接转移预测的装置及方法
CN103513957A (zh) 高性能缓存系统和方法
CN104978282B (zh) 一种缓存系统和方法
CN104679480A (zh) 一种指令集转换系统和方法
CN104731719A (zh) 一种缓存系统和方法
CN104679481A (zh) 一种指令集转换系统和方法
CN104050092A (zh) 一种数据缓存系统及方法
CN109643233A (zh) 具有带读取和读取/前进操作数编码的流引擎的数据处理设备
CN102855121B (zh) 分支处理方法与系统
CN102306094B (zh) 实现现代处理器间接转移预测的装置及方法
CN103620547A (zh) 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射
CN106406814A (zh) 处理器和将架构指令转译成微指令的方法
CN103513958A (zh) 高性能指令缓存系统和方法
CN103984637A (zh) 一种指令处理系统及方法
CN104536958A (zh) 一种复合索引方法,及装置
CN102385524B (zh) 一种基于混编指令集的编译链指令替换方法
CN102662640B (zh) 双重分支目标缓冲器和分支目标处理系统及处理方法
US20190065205A1 (en) Variable length instruction processor system and method
CN103176914A (zh) 一种低缺失率、低缺失惩罚的缓存方法和装置
CN101211256A (zh) 一种专用双流水线risc指令系统及其操作方法
CN100504762C (zh) 数据处理装置
CN101201736B (zh) 数学运算处理装置
CN104424132A (zh) 高性能指令缓存系统和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP02 Change in the address of a patent holder
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.