一种基于非阻塞指令cache的指令读取方法与流程

文档序号:17988361发布日期:2019-06-22 00:35阅读:457来源:国知局
一种基于非阻塞指令cache的指令读取方法与流程

本发明涉及计算机硬件技术领域,尤其涉及一种基于非阻塞指令cache的指令读取方法。



背景技术:

随着集成电路制造工艺的飞速发展,近年来处理器的频率以每年超过40%的速度在提高,而存储器的速度每年仅提高1%左右,因此处理器与存储器之间的速度差距越来越大,访问存储器速度成为制约处理器性能的瓶颈。cache作为处理器与主存之间的高速缓冲区,填补了处理器与主存之间的速度差距。

目前的主流cache设计主要选择的是组相联形式,包括单端口索引标志sram,单端口数据sram以及控制逻辑。根据处理器发出的指令总线上的地址信息,读出索引标志sram的索引值(tag)与当前地址比对,如果一致,表明cache命中,然后从数据sram读取指令数据返回到指令总线;如果不相等,表明cache缺失,则要从主存读取出一行cacheline数据,依据lru(leastrecentlyused,最近最少使用)算法,将cacheline数据回填到数据sram的某一路,并且更新索引标志sram,然后进行下一级指令流水。

目前方案,需要等到一个cacheline中的所有数据返回并且回填到数据sram中,才进行下一级指令流水,而当前操作往往只需要访问cacheline中的某一部分数据,从而阻塞了处理器的下一级指令流水,降低了处理器性能。

索引标志存储在sram中,读sram的数据输出会延时一个时钟再输出,这样会造成比对结果的值会延后一个时钟输出,如果比对结果是命中,再从数据sram读取相应指令数据返回到处理器的指令总线上,从索引sram读取索引值与从数据sram读取指令数据这两个操作是串行进行的,处理器取指令至少要等一个时钟周期,降低了处理器的性能。



技术实现要素:

本发明旨在至少解决现有技术中存在的技术问题之一,提供一种基于非阻塞指令cache的指令读取方法,以解决现有技术中的问题。

作为本发明的一个方面,提供一种基于非阻塞指令cache的指令读取方法,其中,所述非阻塞指令cache中设置有索引标志寄存器组,所述索引标志寄存器组用于存储索引标志,所述基于非阻塞指令cache的指令读取方法包括:

判断指令总线上是否有取指请求;

当所述指令总线上有取指请求时,读取所述索引标志寄存器组中的索引标志;

将所述索引标志与所述取指请求中的地址信息进行比对;

若所述索引标志与所述取指请求中的地址信息一致,表示cache命中,则从数据sram中读取指令数据返回到指令总线;

若所述索引标志与所述取指请求中的地址信息不一致,表示cache不命中,则根据关键字优先方式以及取指操作与cacheline的对应情况处理后续的取指请求。

优选地,所述根据关键字优先方式以及取指操作与cacheline的对应情况处理后续的取指请求包括:

向主存发起包含关键字在内的cacheline访问请求;

判断是否有关键字返回;

若有关键字返回,则将关键字寄存到cacheline寄存器缓冲区,且同时将所述关键字回填到数据sram中;

根据取指操作与cacheline的对应情况处理后续的取指请求。

优选地,若没有关键字返回,则返回继续判断是否有关键字返回。

优选地,所述根据取指操作与cacheline的对应情况包括:所述取指操作对应于cache中的同一个cacheline、所述取指操作命中cache中的其他cacheline以及所述取指操作对应于其他cacheline并且cache不命中。

优选地,所述根据取指操作与cacheline的对应情况处理后续的取指请求包括:

判断所述取指操作是否命中cache中的其他cacheline;

若所述取指操作命中cache中的其他cacheline,则读取数据sram中的关键字,且返回的cacheline数据回填到数据sram操作挂起;

若所述取指操作对应于其他cacheline并且cache不命中,则读取数据sram中的关键字操作挂起,返回的cacheline数据回填到数据sram中;

若所述取指操作对应于cache中的同一个cacheline,则判定取指操作对应于同一个cacheline,且从cacheline寄存器缓冲区获取数据,返回的cacheline数据回填到数据sram中。

优选地,所述根据取指操作与cacheline的对应情况处理后续的取指请求还包括在读取数据sram中的关键字操作挂起,返回的cacheline数据回填到数据sram中的步骤后进行的:

判断cacheline数据是否全部从主存中读出;

若cacheline数据全部从主存中读出,则判断cacheline数据是否有未回填到数据sram中的;

若cacheline数据有未回填到数据sram中的,则将cacheline数据回填到数据sram中。

优选地,若cacheline数据没有未回填到数据sram中的,则返回向主存发起包含关键字在内的cacheline访问请求的步骤。

优选地,若cacheline数据未全部从主存中读出,则返回执行读取数据sram中的关键字操作挂起,返回的cacheline数据回填到数据sram中的步骤。

优选地,所述根据取指操作与cacheline的对应情况处理后续的取指请求还包括:在所述读取数据sram中的关键字,且返回的cacheline数据回填到数据sram操作挂起的步骤完成以及所述从cacheline寄存器缓冲区获取数据,返回的cacheline数据回填到数据sram中的步骤完成后,返回执行判断所述取指操作在其他cacheline中是否命中的步骤。

优选地,所述非阻塞指令cache中还设置有lru算法模块、cache控制逻辑模块、数据sram和cacheline寄存器缓冲区,所述lru算法模块分别与所述索引标志寄存器组以及所述cache控制逻辑模块通信连接,所述索引标志寄存器组与所述cache控制逻辑模块通信连接,所述数据sram与所述cache控制逻辑模块通信连接,所述cacheline寄存器缓冲区与所述数据sram通信连接。

本发明提供的基于非阻塞指令cache的指令读取方法,采用关键字优先,以及增加cacheline寄存器缓冲区,解决了在一次cache不命中下必须等cacheline全部数据返回并回填到数据sram,才进行下一级指令流水的问题,实现非阻塞指令cache的功能,显著提升了处理器的性能。

附图说明

附图是用来提供对本发明的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明,但并不构成对本发明的限制。在附图中:

图1为本发明提供的基于非阻塞指令cache的指令读取方法的流程图。

图2为本发明提供的基于非阻塞指令cache的指令读取方法的具体实施方式流程图。

图3为本发明提供的非阻塞指令cache的结构框图。

具体实施方式

以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。

作为本发明的一个方面,提供一种基于非阻塞指令cache的指令读取方法,其中,所述非阻塞指令cache中设置有索引标志寄存器组,所述索引标志寄存器组用于存储索引标志,如图1所示,所述基于非阻塞指令cache的指令读取方法包括:

s110、判断指令总线上是否有取指请求;

s120、当所述指令总线上有取指请求时,读取所述索引标志寄存器组中的索引标志;

s130、将所述索引标志与所述取指请求中的地址信息进行比对;

s140、若所述索引标志与所述取指请求中的地址信息一致,表示cache命中,则从数据sram中读取指令数据返回到指令总线;

s150、若所述索引标志与所述取指请求中的地址信息不一致,表示cache不命中,则根据关键字优先方式以及取指操作与cacheline的对应情况处理后续的取指请求。

本发明提供的基于非阻塞指令cache的指令读取方法,采用关键字优先,以及增加cacheline寄存器缓冲区,解决了在一次cache不命中下必须等cacheline全部数据返回并回填到数据sram,才进行下一级指令流水的问题,实现非阻塞指令cache的功能,显著提升了处理器的性能。

下面结合图2所示,对本发明如何根据关键字优先方式以及取指操作与cacheline的对应情况处理后续的取指请求进行详细说明。

需要说明的是,如图3所示,所述非阻塞指令cache中还设置有lru算法模块、cache控制逻辑模块、数据sram和cacheline寄存器缓冲区,所述lru算法模块分别与所述索引标志寄存器组以及所述cache控制逻辑模块通信连接,所述索引标志寄存器组与所述cache控制逻辑模块通信连接,所述数据sram与所述cache控制逻辑模块通信连接,所述cacheline寄存器缓冲区与所述数据sram通信连接。非阻塞指令cache,容量128个word(512字节),采用4组4路组相联,每个cacheline8个字(32字节),采用单端口sram作为数据存储器,索引标志存储在寄存器组中,cacheline寄存器缓冲区。

lru算法模块:采用最近最少使用算法,每组每路cacheline都有自己的lru计数值,当cache缺失的话,替换计数值为0的那路cacheline,同时该路计数值变为最大值,其他各路计数值减1。当cache命中计数值最大的一路,则所有计数值保持不变,如果命中非最大值的一路,比该路计数值大的其它各路减1,同时该路计数值变为最大值。

索引标志寄存器组:保存每组每路cacheline,以及cacheline寄存器缓冲区的地址信息(tag)以及有效标志位。

数据sram:单端口的sram,是主存数据的映射。

cacheline寄存器缓冲区:在发生cache缺失的情况下,从主存读取的cacheline数据缓冲到此。

cache控制逻辑:根据比对结果,产生读写数据sram,以及与主存接口的控制。

具体地,所述根据关键字优先方式以及取指操作与cacheline的对应情况处理后续的取指请求包括:

向主存发起包含关键字在内的cacheline访问请求;

判断是否有关键字返回;

若有关键字返回,则将关键字寄存到cacheline寄存器缓冲区,且同时将所述关键字回填到数据sram中;

根据取指操作与cacheline的对应情况处理后续的取指请求。

进一步具体地,若没有关键字返回,则返回继续判断是否有关键字返回。

应当理解的是,在指令总线上有取指请求时,根据当前指令总线上的地址线的bit6~bit5的值,查找索引标志寄存器组,将tag与取指地址的bit31~bit7对比,如果命中,则从数据sram读取指令数据返回到指令总线上,同时lru算法模块更新计数值。如果缺失,cache控制逻辑模块向主存发起访存请求,首先请求所需要的字(即关键字),当关键字从主存读取到,同时将关键字返回到指令总线后,处理器即可以进入下一级指令流水。

需要说明的是,所述根据取指操作与cacheline的对应情况包括:所述取指操作对应于cache中的同一个cacheline、所述取指操作命中cache中的其他cacheline以及所述取指操作对应于其他cacheline并且cache不命中。

具体地,所述根据取指操作与cacheline的对应情况处理后续的取指请求包括:

判断所述取指操作是否命中cache中的其他cacheline;

若所述取指操作命中cache中的其他cacheline,则读取数据sram中的关键字,且返回的cacheline数据回填到数据sram操作挂起;

若所述取指操作对应于其他cacheline并且cache不命中,则读取数据sram中的关键字操作挂起,返回的cacheline数据回填到数据sram中;

若所述取指操作对应于cache中的同一个cacheline,则判定取指操作对应于同一个cacheline,且从cacheline寄存器缓冲区获取数据,返回的cacheline数据回填到数据sram中。

应当理解的是,在关键字返回之后,会出现三种情况,第一情况:后续的取指操作在其他cacheline中命中,则可以正常返回取指结果,不受当前正在返回的cacheline影响;第二种情况:后续的取指操作对应于其他cacheline并且不命中,则阻塞后续取指操作,并需要等待上一个不命中取指操作对应的cacheline全部返回并且回填到数据sram才能继续;第三种情况:后续的取指操作对应于同一个cacheline,则从cacheline寄存器缓冲区获取数据。

具体地,所述根据取指操作与cacheline的对应情况处理后续的取指请求还包括在读取数据sram中的关键字操作挂起,返回的cacheline数据回填到数据sram中的步骤后进行的:

判断cacheline数据是否全部从主存中读出;

若cacheline数据全部从主存中读出,则判断cacheline数据是否有未回填到数据sram中的;

若cacheline数据有未回填到数据sram中的,则将cacheline数据回填到数据sram中。

进一步具体地,若cacheline数据没有未回填到数据sram中的,则返回向主存发起包含关键字在内的cacheline访问请求的步骤。

若cacheline数据未全部从主存中读出,则返回执行读取数据sram中的关键字操作挂起,返回的cacheline数据回填到数据sram中的步骤。

进一步具体地,所述根据取指操作与cacheline的对应情况处理后续的取指请求还包括:在所述读取数据sram中的关键字,且返回的cacheline数据回填到数据sram操作挂起的步骤完成以及所述从cacheline寄存器缓冲区获取数据,返回的cacheline数据回填到数据sram中的步骤完成后,返回执行判断所述取指操作在其他cacheline中是否命中的步骤。

需要说明的是,在cacheline数据返回到cacheline寄存器缓冲区的过程中,如果出现上述第二和第三种情况,根据lru算法将数据回填到数据sram中,如果出现第一种情况(处理器后续取指操作在其他cacheline中命中),即要对数据sram进行读操作,因为数据sram是单端口的,读sram与写sram无法同时操作,则优先保证读sram,未回填到数据sram的那条指令数据记录下来,等到下一次cache缺失的时候,先将未回填到数据sram的cacheline寄存器缓冲区的数据写回到数据sram,然后在向主存发起新的wrapburst访存请求,这样做可以节省回填的时间,提升处理器性能。

索引标志在下一次cache缺失的时候,待上一个不命中取指操作对应的cacheline数据全部回填到数据sram才更新。

因此,本发明提供的基于非阻塞指令cache的指令读取方法,通过采用关键字优先技术,以很小的实现代价降低了cache的缺失代价,提高处理器的性能;在cacheline数据返回到cacheline寄存器缓冲区的过程中,将数据回填到数据sram中,而不是等到下一次缺失的时候将cacheline寄存器缓冲区数据回填到数据sram,以较少的逻辑开销提高处理器的性能;采用寄存器组存储索引(tag)值,比传统的用sram存储索引(tag)值,比对结果提前一个时钟输出,可以提升性能。

可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1