指令缓存方法及装置与流程

文档序号:26139062发布日期:2021-08-03 14:22阅读:92来源:国知局
指令缓存方法及装置与流程

本发明涉及芯片电路设计领域,特别是涉及一种指令缓存方法及装置。



背景技术:

由于内存读取速度的限制,内存速度与cpu速度的不匹配成为限制系统性能的瓶颈。而基于cpu访问程序的时间和空间局限性原理,可以采用小容量的指令缓存(instructioncache,icache)来弥补cpu和速度之间的差异,从而提高系统的整体性能。缓存(cache)是所有现代计算机发挥高性能的重要基础之一。它一般由sram组成,速率很快,可以与cpu进行高速的数据交换。通常情况下,cpu优先在缓存中寻找所需数据,当缓存中没有cpu所需的数据时,cpu再访问。cpu在缓存中找到目标数据被称为cache命中,反之则称为未命中。

缓存与之间数据传输的最小单位是cacheline。当缓存中不存在cpu所需数据且需要从中将该数据导入到缓存中时,一般不会只导入单个数据,而是以cacheline为单位将该数据附近的数据一同导入缓存。

如果以一个cacheline为一行,那么有多少行,就认为缓存中有多少个组。cacheline中存储的是cpu实际需要使用的数据,每个cacheline同时都唯一对应一组标签数据,该标签数据用于寻址。

将缓存平均分为n份,每一份称为一路(way)。例如,将缓存分为两份后,每一组中存在两个cacheline,分属不同的way。

传统的icache设计方式是一个way对应一块sram,多个way对应多块sram,在cpu进行取指令操作时,同时读取多个way对应的sram和tag_sram,判断是否命中,如果命中则可以确定当前所需读取的指令处于哪块way_sram,则可以直接进行指令读取,返回给cpu。

传统的icache虽然可以提高系统的执行效率,但是因为每次取指令操作均需要同时读取多个sram,使得cpu的功耗加大。



技术实现要素:

基于此,有必要针对传统的icache设计需要同时读取多块sram,导致cpu功耗加大的问题,提供一种新的指令缓存方法及装置。

一种指令缓存方法,其特征在于,包括:响应访问请求信号,发出第一读取请求;根据所述第一读取请求获取标签数据和有效指示数据,所述标签数据和所述有效指示数据存储于寄存器组中;根据所述标签数据、所述有效指示数据以及访问地址信号判断是否存在目标指令数据;若存在所述目标指令数据,则将所述目标指令数据返回给所述cpu。

上述指令缓存方法,在cpu读取指令数据时,从寄存器组中获取标签数据和有效指示数据,将有效的标签数据与访问地址信号中的标签数据部分进行匹配,如果匹配成功,则说明缓存中存储有目标指令数据,进而直接从缓存中读取目标指令数据即可。这种方法替换了缓存中原本用于存储标签数据的tag_sram,解决了cpu同时读取多块sram时的高功耗问题。同时,由于cpu与寄存器组的之间的读取速度高于cpu与sram之间的读取速度,所以上述指令缓存方法还可以提高cpu指令读取的效率。

在其中一个实施例中,所述响应访问请求信号,发出第一读取请求,包括:判断所述访问请求信号是否属于指令访问;当所述访问请求信号属于指令访问,发出所述第一读取请求。

在其中一个实施例中,根据所述第一读取请求获取标签数据和有效指示数据,包括:响应于所述第一读取请求,对所述访问地址信号进行解析,以获取组索引部分;根据所述组索引部分获取所述第一读取地址;根据所述第一读取地址获取所述标签数据和所述有效指示数据。

在其中一个实施例中,所述标签数据和所述有效指示数据的地址相同。

在其中一个实施例中,所述根据所述标签数据、所述有效指示数据以及所述访问地址信号判断是否存在目标指令数据,包括:判断所述有效指示数据是否处于有效状态;如果所述有效指示数据处于无效状态,则直接判断不存在所述目标指令数据;如果所述有效指示数据处于有效状态,则将所述标签数据与所述访问地址信号的标签部分进行匹配;如果所述标签数据与所述访问地址信号的标签部分匹配成功,则判断存在目标指令数据,并产生命中信号。

在其中一个实施例中,所述将所述目标指令数据返回给所述cpu,包括:根据所述命中信号以及所述访问地址信号,产生第二读取请求和第二读取地址;根据所述第二读取地址获取所述目标指令数据,将所述目标指令数据返回给所述cpu。

在其中一个实施例中,所述第二读取地址的高位由所述命中信号决定,所述第二读取地址的低位由所述访问地址信号的低位决定。

在其中一个实施例中,若不存在所述目标指令数据,则进行访问请求。

在其中一个实施例中,所述进行访问请求,包括:根据所述访问地址信号到进行寻址,以获取所述目标指令数据。

一种指令缓存装置,包括:寄存器组,用于存储标签数据和有效指示数据;寄存器组控制模块,与所述寄存器组连接,用于响应来自cpu的访问请求信号,以向所述寄存器组发送第一读取请求,并根据所述第一读取请求从所述寄存器组中读取目标标签数据和目标有效指示数据;所述寄存器组控制模块还用于,根据所述目标标签数据、所述目标有效指示数据以及访问地址信号判断是否存在目标指令数据,若存在所述目标指令数据,则产生命中信号;静态随机存取存储器控制模块,与所述寄存器组控制模块连接,用于响应所述命中信号,并结合所述访问地址信号,发出第二读取请求和第二读取地址;静态随机存取存储器,与所述静态随机存取存储器控制模块连接,用于存储指令数据,并根据所述第二读取请求和所述第二读取地址获取所述目标指令数据,将所述目标指令数据返回给所述cpu。

上述指令缓存装置,采用寄存器组存储标签数据和有效指示数据,在cpu进行指令数据读取时,具有更快的读取速度,提高了效率,并且,由于采用寄存器组替代了sram,cpu无需同时访问多个sram,降低了cpu读取数据时的功耗。

附图说明

图1为一实施例中一种指令缓存方法的流程示意图。

图2为一实施例中获取标签数据和有效指示数据的方法流程图。

图3为一实施例中判断是否存在目标指令数据的方法流程图。

图4为一实施例中一种指令缓存装置的结构及信号流图。

附图标号说明:1、访问内存请求信号;2、访问内存地址信号;3、第一读取请求;4、目标标签数据和目标有效指示数据;5、命中信号;6、第二读取请求和第二读取地址;7、目标指令数据;11、寄存器组;12、寄存器组控制模块;13、静态随机存取存储器控制模块;14、静态随机存取存储器。

具体实施方式

为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的较佳的实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容的理解更加透彻全面。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。

在描述位置关系时,除非另有规定,否则当一元件例如层、膜或基板被指为在另一膜层“上”时,其能直接在其他膜层上或亦可存在中间膜层。进一步说,当层被指为在另一层“下”时,其可直接在下方,亦可存在一或多个中间层。亦可以理解的是,当层被指为在两层“之间”时,其可为两层之间的唯一层,或亦可存在一或多个中间层。

在使用本文中描述的“包括”、“具有”、和“包含”的情况下,除非使用了明确的限定用语,例如“仅”、“由……组成”等,否则还可以添加另一部件。除非相反地提及,否则单数形式的术语可以包括复数形式,并不能理解为其数量为一个。

如图1所示,本申请的一个实施例提供了一种指令缓存方法,包括:

s1:响应访问请求信号,发出第一读取请求;

s2:根据所述第一读取请求获取标签数据和有效指示数据,所述标签数据和所述有效指示数据存储于寄存器组中;

s3:根据所述标签数据、所述有效指示数据以及访问地址信号判断是否存在目标指令数据;

s4:若存在所述目标指令数据,则将所述目标指令数据返回给所述cpu。

在步骤s1中,具体的,cpu在进行指令数据读取之前,先向缓存发送访问请求信号。缓存接收到该访问请求信号后,会对该信号进行一系列的判断,例如,识别访问请求信号的类型,判断其是否属于指令访问;以及判断该访问请求信号是否需要经过缓存。只有当访问请求信号满足访问缓存的条件时,才会被允许在缓存中进行寻址操作。

在步骤s2中,第一读取请求中还可以包含目标指令数据的地址信息,根据该地址信息可以从寄存器组中获知目标指令数据所在的组,进而获取该组的cacheline所对应的标签数据和有效指示数据。作为示例,用于存储标签数据和有效指示数据的寄存器组可以是设置于cpu外部的寄存器组,例如,该寄存器组可以设置于缓存中。采用寄存器组代替传统方案中sram,以存储标签数据和有效指示数据,可以在cpu需要在缓存中进行寻址操作时,更快地完成寻址,提高效率。同时,由于将缓存中用于存储标签数据的sram替换为寄存器,减少了cpu数据读取时访问的sram数量,降低了功耗。

在步骤s3中,可以根据所述标签数据、所述有效指示数据以及访问地址信号判断是否存在目标指令数据。首先,获取标签数据和有效指示数据后,可通过有效指示数据判断标签数据是否有效。其次,当获取多个标签数据时,则需要将获取的多个标签数据挨个与访问地址信号中的标签数据部分进行比对。在标签数据有效的前提下,如果多个标签数据中存在与访问地址信号中的标签数据部分完全一致的标签数据,则可以判断缓存中存在目标指令数据。

缓存可能具有多种形式的划分,例如,如果缓存被划分n个set(组)、m个way(路),每个组中将存在m个cacheline,每个cacheline对应存在一个标签数据和一个有效指示数据,最终将获得m个标签数据和m个有效指示数据。

在步骤s4中,若判断缓存中存在目标指令数据,则从缓存中读取目标指令数据,返回给cpu。作为示例,为了避免出现cpu同时读取多个ram的情况,将所有指令数据存储于一块ram,以降低cpu读取指令数据时的功耗。

上述指令缓存方法,在cpu读取指令数据时,优先从缓存中的寄存器组获取标签数据和有效指示数据,将有效的标签数据与访问地址信号中的标签数据部分进行匹配,如果匹配成功,则说明缓存中存储有目标指令数据,直接从缓存中读取目标指令数据即可。这种方法采用寄存器替换了缓存中原本用于存储标签数据的tag_sram,在一定程度上缓解了cpu同时读取多块sram时的高功耗问题。同时,由于cpu与寄存器组的之间的读取速度高于cpu与sram之间的读取速度,所以上述指令缓存方法还可以提高cpu指令读取的效率。

在一个实施例中,如图2所示,根据所述第一读取请求获取标签数据和有效指示数据,包括:

s21:响应于所述第一读取请求,对所述访问地址信号进行解析,以获取组索引部分;

s22:根据所述组索引部分获取第一读取地址;

s23:根据所述第一读取地址获取所述标签数据和所述有效指示数据。

访问地址信号包括三部分,标签数据部分(tag)、组索引部分(set-index)以及偏移量部分(offset)。其中,组索引部分用于确定目标指令数据所在的组。在本步骤中,首先对访问地址信号进行解析,以获取组索引部分,确定组地址。此处的组地址即为第一读取地址。根据第一读取地址从寄存器组中获取标签数据及有效指示数据。获取的标签数据及有效指示数据的个数与缓存的way的数目相一致。

在一个实施例中,所述标签数据和所述有效指示数据的地址相同。作为示例,有效指示数据占用一个bit,例如0表示无效,1表示有效。标签数据占用的bit数目为整个地址位宽减去组索引位宽和偏移量位宽后的剩余部分。因此,通常将有效指示数据置于标签数据的第一位之前,并设置两者地址相同,即,每个标签数据都有一个有效指示数据与之对应,以标识该标签数据是否有效。

在一个实施例中,所述根据所述标签数据、所述有效指示数据以及所述访问地址信号判断是否存在目标指令数据,包括:

s31:判断所述有效指示数据是否处于有效状态;

s32:如果所述有效指示数据处于无效状态,则直接判断不存在所述目标指令数据;

s33:如果所述有效指示数据处于有效状态,则将所述标签数据与所述访问地址信号的标签部分进行匹配;

s34:如果所述标签数据与所述访问地址信号的标签部分匹配成功,则判断存在目标指令数据,并产生命中信号。

当有效指示数据处于无效状态,则无需进行匹配动作。可直接认为缓存中不存在目标指令数据。这样设计可以提高效率,避免在标签数据无效的情况下进行匹配。当从寄存器组中获取到的标签数据均被判定为有效时,将其与访问地址信号的标签部分进行匹配,如果存在相同的标签数据,则说明cache命中,即缓存中存在目标指令数据。因此,步骤s33至步骤s34不仅判断缓存中是否存在目标指令数据,还可以确定目标指令数据所在的基本单元的位置。最后通过访问地址信号中的偏移量部分(offset)可以确定目标指令数据在基本单元的位置,从而实现对目标指令数据的精准定位。标签数据、组索引以及偏移量三者组合,可以唯一确定一个数据的地址。

在判断缓存中存在目标指令数据之后,寄存器组控制模块会发出命中信号。命中信号中包括命中标志和命中way信号,用于为后续的目标指令数据读取提供地址信息。

在一个实施例中,将目标指令数据返回给所述cpu的步骤包括:根据所述命中信号以及所述访问地址信号,产生第二读取请求和第二读取地址;根据所述第二读取地址获取所述目标指令数据,将所述目标指令数据返回给所述cpu。

具体的,第二读取地址的高位地址由命中信号中的命中way信号决定,第二读取地址的低位地址由访问地址信号中的组索引部分和偏移量部分决定。在cpu的数据读取过程分为地址周期和数据周期。当cpu在地址周期阶段判断cache命中后(即缓存中存在目标指令数据),可在数据周期阶段根据第二读取地址获得目标指令数据。

如果在地址周期阶段标签数据未匹配成功,则在无法产生命中信号,因此也就不会触发后续的第二读取请求。则cpu直接进行访问请求,即,根据访问地址信号到中进行寻址,以获取目标指令数据。

本申请的另一方面公开了一种指令缓存装置,如图4所示,包括:寄存器组11,用于存储标签数据和有效指示数据;寄存器组控制模块12,与所述寄存器组11连接,用于响应来自cpu的访问内存请求信号1,以向所述寄存器组11发送第一读取请求3,并根据所述第一读取请求3从所述寄存器组11中读取目标标签数据和目标有效指示数据4;所述寄存器组控制模块12还用于,根据所述目标标签数据、所述目标有效指示数据以及访问内存地址信号2判断是否存在目标指令数据7,若存在所述目标指令数据7,则产生命中信号5;静态随机存取存储器控制模块13,与所述寄存器组控制模块12连接,用于响应所述命中信号5,并结合所述访问内存地址信号2,发出第二读取请求和第二读取地址6;静态随机存取存储器14,与所述静态随机存取存储器控制模块13连接,用于存储指令数据,并根据第二读取请求和第二读取地址6获取所述目标指令数据7,将所述目标指令数据7返回给cpu。

传统的缓存装置中,通常是将标签数据和指令数据存储到静态随机存取存储器(sram)中。其中,一种方案是将缓存分为多路,每一路存储到一块ram中,最终需要用到多块ram。cpu在读取数据时,需要同时读取多个ram,能耗较大。

本实施例通过两个方面对传统技术方案进行了改进。第一,将标签数据和有效指示数据存储于寄存器组11,而不是sram中。与sram相比,寄存器具有更高的速度,可以提高cpu读取数据的效率。第二,将所有指令数据存储到一块ram中,避免cpu同时读取多个ram的情况,降低了cpu读取数据的功耗。

具体的,请继续参考图4,寄存器组控制模块12响应来自cpu的访问请求信号1,向寄存器组11发送第一读取请求3。作为示例,寄存器组控制模块12还可以接收到来自cpu的访问内存地址信号2,并通过对访问内存地址信号2的解析,得到第一读取地址。第一读取地址跟随第一读取请求3共同发送到寄存器组11。寄存器组控制模块12根据第一读取地址,从寄存器组11中获得目标标签数据和目标有效指示数据4。

寄存器组控制模块12在接收到目标标签数据和目标有效指示数据4后,先根据目标有效指示数据判断目标标签数据中是否存在无效数据,将其剔除。然后将剩下的有效的目标标签数据与访问内存地址信号2中的标签数据部分做比对,如果存在与访问内存地址信号2中的标签数据部分相同的目标标签数据,则说明cache命中,即静态随机存取存储器14中存在目标指令数据7。寄存器组控制模块12由此产生命中信号5。

静态随机存取存储器控制模块13在接收到命中信号5后,向静态随机存取存储器14发送第二读取请求和第二读取地址6。其中,命中信号5保护命中标志和命中way信号。第二读取地址的高位由命中way信号确定,第二读取地址的低位由访问内存地址信号2的组索引部分和偏移量部分确定。

静态随机存取存储器14中存储有指令数据。在cache命中的情况下,可以确定静态随机存取存储器14中存储有目标指令数据7。静态随机存取存储器14将会接收到第二读取请求和第二读取地址6,然后根据第二读取地址进行寻址以得到目标指令数据7,最后将目标指令数据7返回至cpu。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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