本发明涉及处理器高速缓存设计技术领域,具体涉及一种高速缓存系统及单周期多数据的入栈、出栈操作方法。
背景技术:
在处理器运行过程中,经常会遇到函数调用、中断等,在程序跳转后的通用流程是先对当前寄存器中的数据进行堆栈保存,然后执行函数或者中断程序,当程序执行完成后再将数据出栈恢复。
传统数据堆栈出栈功能的实现是在处理器内存空间上开辟一块栈空间,然后通过处理器的装载(load)和保存(store)指令一个一个完成数据的写入或读出操作。对于一个有多个通用寄存器的处理器,则堆栈出栈操作在理想情况下大约也需要与寄存器数量相等的多个时钟周期,导致数据入栈和出栈操作周期较长;而且,load、store操作的数据最终是保存在高速缓存内,很有可能遇到高速缓存不命中,或高速缓存替换等情况,从而引入更多的等待周期;此外,load、store操作一次只能处理一个数据,而高速缓存结构中的一个数据行通常包含多个数据,因此通过load、store操作完成数据保存无法充分利用高速缓存一行多个数据的位宽优势,入栈、出栈效率低。
技术实现要素:
为了克服现有高速缓存在处理数据的入栈和出栈操作时,处理周期较长且处理效率低的技术问题,本发明提供一种高速缓存系统及单周期多数据的入栈、出栈操作方法。
本发明所述的一种高速缓存系统,包括:
存储单元,存储单元包括数据缓存空间和临时堆栈空间,存储单元用于存储待写数据和tag;
监控单元,监控单元与存储单元连接,以监测存储单元写端口的数据和命中信号;
命中判定单元,命中判定单元与存储单元连接,用于判断当前的读操作是否命中了存储单元,并在发生命中时将待读数据由存储单元中读出;
其中,存储单元包括若干个并行设置的n位存储模块,每一n位存储模块均设置有若干状态位,以通过改写若干状态位对数据缓存空间或临时堆栈空间进行复用;
监控单元用于获取待写数据信息和若干状态位信息,并在发生命中时,根据待写数据信息和若干状态位,将待写数据和对应地址的tag写入对应数据缓存空间或临时堆栈空间。
优选地,n位存储模块还包括数据存储器和标签存储器,数据存储器用于存储待写数据,标签存储器用于存储tag。
优选地,状态位的数量为三个,包括:
数据行有效状态位,数据行有效状态位用于表示该行数据是否有效;
数据行被更新状态位,数据行被更新状态位用于表示该行数据是否已被更新;
堆栈状态位,堆栈状态位用于表示该数据行能否被用作堆栈。
优选地,临时堆栈空间应用的入栈函数为push,出栈函数为pop;入栈函数和出栈函数能够在一个时钟周期内实现若干数据的堆栈或出栈操作。
优选地,监控单元包括2路选择器,2路选择器根据待写数据信息判断待写数据类型,生成并发送判断类型结果。
优选地,高速缓存系统还包括:写入缓冲单元,写入缓冲单元设置在监控单元与存储单元之间,用于对待写数据进行暂存,并根据判断类型结果,将待写数据输出至数据缓存空间或临时堆栈空间。
优选地,高速缓存系统还包括:
地址转换单元,地址转换单元用于建立主存与缓存之间的目录表,以实现数据的主存地址到缓存地址的转换;
数据替换单元,数据替换单元与存储单元连接,用于在存储单元已满时,进行数据行替换,并修改地址转换单元。
本发明还提供一种单周期多数据的入栈操作方法,包括如下步骤:
监控单元在监测到写命中时启动,获取待写数据信息,其中,待写数据信息包括堆栈地址;
监控单元根据堆栈地址,查找各n位存储模块的状态位,将待写数据存储至临时堆栈空间对应的n位存储模块内;
临时堆栈空间更新对应的n位存储模块的若干状态位,以表示当前存储数据和tag有效。
优选地,将待写数据储至临时堆栈空间对应的n位存储模块内的步骤包括:
监控单元根据堆栈地址,查找并根据各n位存储模块的数据行有效状态位,判断各n位存储模块对应的状态;
若n位存储模块对应的数据行有效状态位表示为无效,则将待写数据存储至此n位存储模块;若有效,则继续查找并根据各n位存储模块的数据行被更新状态位,判断各n位存储模块是否被更新;
若n位存储模块对应的数据行被更新状态位表示为数据未被更新,则将待写数据存储至此n位存储模块;若已被更新,则根据lru(最近最少使用)算法选择一n位存储模块回写至主存,再将待写数据存储至此n位存储模块。
同时,本发明还提供一种单周期多数据的出栈操作方法,其特征在于,包括如下步骤:
命中判定单元在判断到临时堆栈空间被读操作命中时启动,获取待读数据信息,其中,待读数据信息包括出栈地址;
命中判定单元根据出栈地址,查找各n位存储模块的tag,将待读数据由临时堆栈空间对应的n位存储模块内读出;
临时堆栈空间更新对应的n位存储模块的若干状态位,以表示当前存储数据和tag无效。
优选地,将待读数据由临时堆栈空间对应的n位存储模块内读出的步骤包括:
命中判定单元根据出栈地址,查找并根据各n位存储模块内存储的tag,判断各n位存储模块是否与出栈地址匹配;
若不匹配,则通知操作系统出栈地址不存在;若匹配,则查找并根据各n位存储模块的堆栈状态位,判断各n位存储模块是否被用作堆栈;
若n位存储模块的堆栈状态位表示该n位存储模块被用作堆栈,则将待读数据由此n位存储模块内读出,若未被被用作堆栈,则通知操作系统出栈地址不存在。
综上所述,本发明提供的高速缓存系统,其存储单元包括若干n位存储模块,每一n位存储模块内均设置有若干状态位,可以通过改变若干状态位对应的信息,将存储单元复用为数据缓存空间或临时堆栈空间,即每一n位存储模块均可以用于对普通数据的缓存,还可以用于对堆栈数据的存储;不需要在存储单元内额外设计单独的堆栈空间,也可以实现对堆栈数据的存储,节省大量硬件存储空间,同时,提高系统的适用性。
临时堆栈空间并不会映射到计算机的主存系统中,因此在堆栈数据入栈或出栈操作时,不会引起高速缓存不命中的情况,即不会出现较多的等待周期;并且,高速缓存系统大部分情况只做单纯的数据写入或数据读出,只会在各n位存储模块全被占满的情况下,有可能引起高速缓存回写操作,从而提高数据的入栈、出栈的效率。
附图说明
图1是本发明中高速缓存系统结构框图;
图2是本发明中单周期多数据的入栈操作方法流程图;
图3是本发明中单周期多数据的出栈操作方法流程图;
图4是本发明的高速缓存系统一个实施例的结构示意图。
其中,1为存储单元,10为数据缓存空间,11为临时堆栈空间,2为监控单元,3为命中判定单元。
具体实施方式
下面结合附图说明根据本发明的具体实施方式。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。
通常,高速缓存中的数据用于作为内存数据在处理器芯片上的一个备份,为了提高高速缓存的命中率,一般采用多路组相连的结构,即将高速缓存的存储空间分成多个块(即不同路);每一路可以存放完全不同地址的数据,而每一路的索引地址是相同的。
在处理器运行过程中,经常会遇到函数调用、中断等,在程序跳转后的通用流程是先对当前寄存器中的数据进行堆栈保存,然后执行函数或者中断程序,当程序执行完成后再将数据出栈恢复;传统数据堆栈出栈功能的实现是在处理器内存空间上开辟一块栈空间,然后通过处理器的load和store指令一个一个完成数据的写入或读出操作。对于一个有32个通用寄存器的处理器,则堆栈出栈操作在理想情况下大约也需要30多个周期;而且,load、store操作的数据最终是保存在高速缓存上,很有可能遇到高速缓存不命中,或高速缓存替换等情况引入更多的等待周期。此外,load、store操作一次只能处理一个数据,而高速缓存结构中的一个数据行通常包含多个数据,因此通过load、store操作完成数据保存无法充分利用高速缓存一行多个数据的位宽优势。
为了提高堆栈出栈的性能,本发明提供一种高速缓存系统,其存储单元包括数据缓存空间和临时堆栈空间,二者通过n位存储模块的若干状态位区分;可以通过改变若干状态位内的信息,对数据缓存空间10或临时堆栈空间进行复用,即可用于对普通数据的缓存,也可用于对堆栈数据的存储,并且通过配套push和pop函数,可实现一个时钟周期对多个数据的入栈或出栈操作,避免高速缓存不命中引起的时间开销外,还提高了堆栈效率。
具体地,本发明所述的一种高速缓存系统,如图1所示,包括:
存储单元1,存储单元1包括数据缓存空间10和临时堆栈空间11,存储单元1用于存储待写数据和tag;
监控单元2,监控单元2与存储单元1连接,以监测存储单元1写端口的数据和命中信号;
命中判定单元3,命中判定单元3与存储单元1连接,用于判断当前的读操作是否命中了存储单元1,并在发生命中时将待读数据由存储单元1中读出;
其中,存储单元1包括若干个并行设置的n位存储模块,每一n位存储模块均设置有若干状态位,以通过改写若干状态位对数据缓存空间10或临时堆栈空间11进行复用;
监控单元2用于获取待写数据信息和若干状态位信息,并在发生命中时,根据待写数据信息和若干状态位,将待写数据和对应地址的tag写入对应数据缓存空间10或临时堆栈空间11。
本实施例中,临时堆栈空间11用于存储堆栈数据,其内存储的堆栈数据并不会映射到计算机的主存系统中,因此在堆栈数据入栈或出栈操作时,不会引起高速缓存不命中的情况,即不会出现较多的等待周期。
采用上述技术方案,存储单元1包括若干n位存储模块,每一n位存储模块内均设置有若干状态位,可以通过改变若干状态位对应的信息,将存储单元1复用为数据缓存空间10或临时堆栈空间11,即每一n位存储模块均可以用于对普通数据的缓存,还可以用于对堆栈数据的存储;不需要在存储单元1内额外设计单独的堆栈空间,也可以实现对堆栈数据的存储,节省大量硬件存储空间,同时,提高系统的适用性;并且,高速缓存系统大部分情况只做单纯的数据写入或数据读出,只会在各n位存储模块全被占满的情况下,有可能引起高速缓存回写操作,从而提高数据的入栈、出栈的效率。
进一步地,n位存储模块还包括数据存储器和标签存储器,数据存储器用于存储待写数据,标签存储器用于存储tag。
进一步地,状态位的数量为三个,包括:
数据行有效状态位,数据行有效状态位用于表示该行数据是否有效;
数据行被更新状态位,数据行被更新状态位用于表示该行数据是否已被更新;
堆栈状态位,堆栈状态位用于表示该数据行能否被用作堆栈。
本实施例中,数据行有效状态位用于表示该行数据是否有效;具体地,当数据行有效状态位为1时,说明该行数据有效;为0时,说明该行数据无效,可以用于存储。
数据行被更新状态位用于表示该行数据是否已被更新;具体地,当数据行被更新状态位为1时,说明该行数据已被更新,并且还没有回写至主存中;为0时,说明该行存储的数据和主存中是一致的。
堆栈状态位用于表示该数据行能否被用作堆栈;具体地,当堆栈状态位为1时,说明该行存储空间被用作堆栈,不能被替换;为0时,说明该行没有被堆栈占用,高速缓存可以正常读写;只有配套的入栈指令和出栈指令才能将改变堆栈状态位中的信息。
进一步地,临时堆栈空间11应用的入栈函数为push,出栈函数为pop;入栈函数和出栈函数能够在一个时钟周期内实现若干数据的堆栈或出栈操作。
本实施例中,入栈操作时,push函数使得堆栈指针递增;出栈操作时pop函数使得堆栈指针递减;堆栈指针每次递增、递减的幅度由n位存储模块的大小决定;push函数和pop函数可以通过标识来指示需要入栈或出栈的数据来自哪些寄存器,并且这些寄存器的总位宽须小于等于n位存储模块的大小。
采用上述技术方案,push和pop函数,可以在一个时钟周期内,完成对多个数据的入栈、出栈操作,充分利用高速缓存中一个n位存储模块多个数据的位宽优势,提高堆栈效率。
进一步地,监控单元2包括2路选择器,2路选择器根据待写数据信息判断待写数据类型,生成并发送判断类型结果。
进一步地,高速缓存系统还包括:写入缓冲单元,写入缓冲单元设置在监控单元2与存储单元1之间,用于对待写数据进行暂存,并根据判断类型结果,将待写数据输出至数据缓存空间10或临时堆栈空间11。
进一步地,高速缓存系统还包括:
地址转换单元,地址转换单元用于建立主存与缓存之间的目录表,以实现数据的主存地址到缓存地址的转换;
数据替换单元,数据替换单元与存储单元1连接,用于在存储单元1已满时,进行数据行替换,并修改地址转换单元。
本发明还提供一种单周期多数据的入栈操作方法,如图2所示,包括如下步骤:
s11、监控单元2在监测到写命中时启动,获取待写数据信息,其中,待写数据信息包括堆栈地址;
本实施例中,采用push函数将多个数据压入临时堆栈空间11。
s12、监控单元2根据堆栈地址,查找各n位存储模块的状态位,将待写数据存储至临时堆栈空间11对应的n位存储模块内;
进一步地,将待写数据储至临时堆栈空间11对应的n位存储模块内的步骤包括:
s121、监控单元2根据堆栈地址,查找并根据各n位存储模块的数据行有效状态位,判断各n位存储模块对应的状态;
s122、若n位存储模块对应的数据行有效状态位表示为无效,则将待写数据存储至此n位存储模块;若有效,则继续查找并根据各n位存储模块的数据行被更新状态位,判断各n位存储模块是否被更新;
s123、若n位存储模块对应的数据行被更新状态位表示为数据未被更新,则将待写数据存储至此n位存储模块;若已被更新,则根据lru算法选择一n位存储模块回写至主存,再将待写数据存储至此n位存储模块。
s13、临时堆栈空间11更新对应的n位存储模块的若干状态位,以表示当前存储数据和tag有效。
本实施例中,堆栈数据保存在相应n位存储模块后,这些n位存储模块对应的数据行有效状态位置1,堆栈状态位置1;一旦n位存储模块被用作堆栈,则n位存储模块存储的数据将被锁定,只有出栈操作能将其清零,其他操作均不能将其替换,能够有效堆栈数据在高速缓存系统中的安全。
同时,本发明还提供一种单周期多数据的出栈操作方法,如图3所示,其特征在于,包括如下步骤:
s21、命中判定单元3在判断到临时堆栈空间11被读操作命中时启动,获取待读数据信息,其中,待读数据信息包括出栈地址;
本实施例中,采用pop函数将多个数据由临时堆栈空间11内读出。
s22、命中判定单元3根据出栈地址,查找各n位存储模块的tag,将待读数据由临时堆栈空间11对应的n位存储模块内读出;
进一步地,将待读数据由临时堆栈空间11对应的n位存储模块内读出的步骤包括:
s221、命中判定单元3根据出栈地址,查找并根据各n位存储模块内存储的tag,判断各n位存储模块是否与出栈地址匹配;
s222、若不匹配,则通知操作系统出栈地址不存在;若匹配,则查找并根据各n位存储模块的堆栈状态位,判断各n位存储模块是否被用作堆栈;
s223、若n位存储模块的堆栈状态位表示该n位存储模块被用作堆栈,则将待读数据由此n位存储模块内读出,若未被被用作堆栈,则通知操作系统出栈地址不存在。
s23、临时堆栈空间11更新对应的n位存储模块的若干状态位,以表示当前存储数据和tag无效。
本实施例中,待读数据由n位存储模块内读出后,此n位存储模块的堆栈标志位置0,释放此n位存储模块。
当然,本发明提供的高速缓存系统也可用于对普通数据的存储,其具体操作如下:
如图4所示,为一个4路组相连,n位存储模块的数据位宽为8个字,整体大小为16kbyte的高速缓存系统,其中,v为数据行有效状态位,m为数据行被更新状态位,st为堆栈状态位。
高速缓存系统根据访存地址的index(索引)域访问出4路tag数据,tag中所存的是相应的页地址,将4路tag所存的页地址和访存地址实际的页地址值,进行比较并查看对应数据行有效状态位v是否为有效,如果有一路匹配相等,并且数据行有效状态位v表示有效,则命中;如果4路均不相等,或数据行有效状态位表示无效,则不命中。
具体地,对于数据的读操作,在命中的情况下,直接将命中一路对应的数据读出即可;在不命中时,需要向主存发起填充数据操作,先将主存中相应行数据写入对应的n位存储模块,再读出数据。
对于数据的写操作,由于高速缓存系统采用回写方式,如果命中则直接更新n位存储模块内的数据,并且将相应的数据行被更新状态位m置1,此时数据不会回写至主存;如果不命中,则根据高速缓存系统的替换算法选出一路n位存储模块进行数据替换,如果该行的数据行被更新状态位m为0,则先根据要写的数据地址从主存将n位存储模块数据填充进高速缓存系统,再进行替换,且相应的数据行被更新状态位m置1;如果该n位存储模块的数据行被更新状态位m为1,则先将该行数据回写至主存,然后再从主存将n位存储模块数据填充进高速缓存系统,随后进行数据写操作,且将数据被更新状态位m置1。
需要说明的是,本发明并不限于上述4路组相连,每路数据位宽为8个字的架构,还可以扩展到其他参数配置上。
综上所述,本发明提供的高速缓存系统,其存储单元1包括数据缓存空间10,用于对普通数据的缓存;还包括临时堆栈空间11,用于对堆栈数据的存储;数据缓存空间10和临时堆栈空间11,通过n位存储模块的若干状态位区分,若干状态位内的信息不同,代表n位存储模块对应不同的状态,即可以通过改变若干状态位内的信息,对数据缓存空间10或临时堆栈空间11进行复用,提高系统的适用性。
临时堆栈空间11并不会映射到计算机的主存系统中,因此在堆栈数据入栈或出栈操作时,不会引起高速缓存不命中的情况,即不会出现较多的等待周期;并且,高速缓存系统大部分情况只做单纯的数据写入或数据读出,只会在各n位存储模块全被占满的情况下,有可能引起高速缓存回写操作,从而提高数据的入栈、出栈的效率。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
1.一种高速缓存系统,其特征在于,包括:
存储单元,所述存储单元包括数据缓存空间和临时堆栈空间,所述存储单元用于存储待写数据和tag;
监控单元,所述监控单元与所述存储单元连接,以监测所述存储单元写端口的数据和命中信号;
命中判定单元,所述命中判定单元与所述存储单元连接,用于判断当前的读操作是否命中了所述存储单元,并在发生命中时将待读数据由所述存储单元中读出;
其中,所述存储单元包括若干个并行设置的n位存储模块,每一所述n位存储模块均设置有若干状态位,以通过改写若干所述状态位对所述数据缓存空间或临时堆栈空间进行复用;
所述监控单元用于获取待写数据信息和若干状态位信息,并在发生命中时,根据所述待写数据信息和若干所述状态位,将所述待写数据和对应地址的tag写入对应所述数据缓存空间或临时堆栈空间。
2.根据权利要求1所述的高速缓存系统,其特征在于,所述n位存储模块还包括数据存储器和标签存储器,所述数据存储器用于存储所述待写数据,所述标签存储器用于存储所述tag。
3.根据权利要求1所述的高速缓存系统,其特征在于,所述状态位的数量为三个,包括:
数据行有效状态位,所述数据行有效状态位用于表示该行数据是否有效;
数据行被更新状态位,所述数据行被更新状态位用于表示该行数据是否已被更新;
堆栈状态位,所述堆栈状态位用于表示该数据行能否被用作堆栈。
4.根据权利要求1所述的高速缓存系统,其特征在于,所述临时堆栈空间应用的入栈函数为push,出栈函数为pop;所述入栈函数和出栈函数能够在一个时钟周期内实现若干数据的堆栈或出栈操作。
5.根据权利要求1所述的高速缓存系统,其特征在于,所述监控单元包括2路选择器,所述2路选择器根据所述待写数据信息判断待写数据类型,生成并发送判断类型结果。
6.根据权利要求5所述的高速缓存系统,其特征在于,高速缓存系统还包括:写入缓冲单元,所述写入缓冲单元设置在所述监控单元与存储单元之间,用于对所述待写数据进行暂存,并根据所述判断类型结果,将所述待写数据输出至所述数据缓存空间或临时堆栈空间。
7.根据权利要求1所述的高速缓存系统,其特征在于,高速缓存系统还包括:
地址转换单元,所述地址转换单元用于建立主存与缓存之间的目录表,以实现数据的主存地址到缓存地址的转换;
数据替换单元,所述数据替换单元与所述存储单元连接,用于在所述存储单元已满时,进行数据行替换,并修改所述地址转换单元。
8.一种单周期多数据的入栈操作方法,其特征在于,包括如下步骤:
监控单元在监测到写命中时启动,获取待写数据信息,其中,所述待写数据信息包括堆栈地址;
所述监控单元根据所述堆栈地址,查找各n位存储模块的状态位,将待写数据存储至所述临时堆栈空间对应的所述n位存储模块内;
临时堆栈空间更新对应的所述n位存储模块的若干状态位,以表示当前存储数据和tag有效。
9.根据权利要求8所述的单周期多数据的入栈操作方法,其特征在于,将待写数据储至所述临时堆栈空间对应的所述n位存储模块内的步骤包括:
所述监控单元根据所述堆栈地址,查找并根据各所述n位存储模块的数据行有效状态位,判断各所述n位存储模块对应的状态;
若所述n位存储模块对应的数据行有效状态位表示为无效,则将所述待写数据存储至此所述n位存储模块;若有效,则继续查找并根据各所述n位存储模块的数据行被更新状态位,判断各所述n位存储模块是否被更新;
若所述n位存储模块对应的数据行被更新状态位表示为数据未被更新,则将所述待写数据存储至此所述n位存储模块;若已被更新,则根据lru算法选择一所述n位存储模块回写至主存,再将所述待写数据存储至此所述n位存储模块。
10.一种单周期多数据的出栈操作方法,其特征在于,包括如下步骤:
命中判定单元在判断到临时堆栈空间被读操作命中时启动,获取待读数据信息,其中,所述待读数据信息包括出栈地址;
所述命中判定单元根据所述出栈地址,查找各n位存储模块的tag,将待读数据由所述临时堆栈空间对应的所述n位存储模块内读出;
所述临时堆栈空间更新对应的所述n位存储模块的若干状态位,以表示当前存储数据和tag无效。
11.根据权利要求10所述的单周期多数据的出栈操作方法,其特征在于,将待读数据由所述临时堆栈空间对应的所述n位存储模块内读出的步骤包括:
所述命中判定单元根据所述出栈地址,查找并根据各所述n位存储模块内存储的tag,判断各所述n位存储模块是否与所述出栈地址匹配;
若不匹配,则通知操作系统所述出栈地址不存在;若匹配,则查找并根据各所述n位存储模块的堆栈状态位,判断各所述n位存储模块是否被用作堆栈;
若所述n位存储模块的堆栈状态位表示该所述n位存储模块被用作堆栈,则将所述待读数据由此所述n位存储模块内读出,若未被被用作堆栈,则通知操作系统所述出栈地址不存在。
技术总结