嵌入式处理器片内指令和数据推送装置 【技术领域】
本发明涉及一种指令和数据推送装置,特别涉及嵌入式处理器片内指令和数据推送装置。
背景技术
文献1“专利号为5778423的美国专利”公开了一种指令预取的装置,该装置通过预测分支目标来预取新的指令,这样可以提高性能。但是这种方法会增加上层存储系统对下层存储系统的请求次数,增加了数据的流量,而且也会受到分支误预测的影响。该专利中还提到可以利用标准长度的指令中没被使用的位来标示出可能要跳转到的地址,这种方法需要对部分指令的格式进行修改,不但需要硬件的支持也需要软件的支持。
文献2“专利号为7246205 B2的美国专利”公开了一种推送Cache的装置,该装置可以通过监控系统的性能参数也可以通过监控设备信用值来决定时候使用推送Cache操作。参照图5。该装置基于哈佛结构的片内Cache层次结构,包括指令单元、Load/Store单元、一级指令Cache、一级数据Cache、缺失队列、缺失队列/写回队列、二级混合Cache,既没有预取装置也没有推送装置,在常见的处理器中被广泛使用,例如AMD Opteron、ARM的Cortex-48等。但是在这种结构中,由于一级Cache的命中率较低,整个处理器的性能与有预取或推送的装置的处理器相比性能较低。
参照图6。文献3“Improving Direct-Mapped Cache Performance by the Addition of a SmallFully-Associative Cache and Prefetch Buffers,17th Annual International Symposium on ComputerArchitecture,PP364-373,1990,ISBN:0-8186-2047-1”公开了一种预取装置,该装置可以使高层次存储系统(一级Cache)从低层次存储系统中预取指令和数据,提高一级Cache的命中率,使处理器的性能得到提升。但是,该装置导致高层存储系统过多的进行对低层次存储系统的访问操作。在哈佛结构的存储系统中,这个问题将导致过多的一级指令和数据Cache同时访问二级混合Cache的冲突,降低数据预取的时效性,并增加了总线上数据传输的流量。预取时效性的降低,导致处理器性能的损失,这种损失严重的时候可能会抵消预取带来的性能提升。图6给出了该文献中提出的用于存放预取数据的stream buffer和Cache连接的结构,该结构可以消除Cache污染问题。但是本文中的push buffer被访问时是所有行都一起并行被查询,而不像stream buffer只有最上面一行被查询。另外文献3中地址的计算由Stream Buffer中的加法器来完成。
【发明内容】
为了克服现有技术总线上数据流量大的不足,本发明提供一种嵌入式处理器片内指令和数据推送装置,利用一级Cache与二级Cache之间总线的空闲时间向一级Cache顺序推送指令和数据。可以像预取一样提高一级Cache的命中率、提高系统性能,克服预取带来的影响,有效的减少一级数据和指令Cache同时访问二级Cache的可能性,提高数据预取的时效性,并可以有效的减少总线上数据的流量。
本发明解决其技术问题所采用的技术方案:一种嵌入式处理器片内指令和数据推送装置,包括指令单元、Load/Store单元、一级指令Cache、一级数据Cache、指令缺失队列、数据缺失队列、数据写回队列以及二级混合Cache,其特征在于:还包括推送地址保存和产生单元、推送时机控制单元、指令推送Buffer和数据推送Buffer,所述推送地址保存和产生单元包括指令推送地址寄存器、数据正向推送地址寄存器和数据反向推送地址寄存器,指令单元取指令时将地址同时发送到指令推送Buffer和一级指令Cache,指令推送Buffer和一级指令Cache都缺失时,地址被发送到二级混合Cache,二级混合Cache将所需的指令传递给一级指令Cache并用缺失地址更新指令推送地址寄存器;Load/Store单元存/取数据时将地址同时发送到数据推送Buffer和一级数据Cache,数据推送Buffer和一级数据Cache都缺失时,地址被发送到二级混合Cache,二级混合Cache将所读到的数据优先传递给一级数据Cache并用缺失地址同时更新数据正向推送地址寄存器和数据反向推送地址寄存器,总线空闲时,二级混合Cache根据推送地址保存和产生单元中的地址向指令推送Buffer和数据推送Buffer分别推送指令和数据。
本发明的有益效果是:由于在二级混合Cache端增加了推送地址保存和产生单元,推送时机控制单元,使指令和数据调度的主动权由高层次存储系统转移到了低层次存储系统,由于低层次存储系统能够更好对访问进行有效调度,解决了一级Cache的访问冲突问题,并且也不需要一级Cache发送大量的访问请求,减少了总线上数据的流量。指令推送Buffer和数据推送Buffer的增加可以消除推送带来的Cache污染问题。
下面结合附图和实施例对本发明作详细说明。
【附图说明】
图1是本发明嵌入式处理器片内指令和数据推送装置的结构框图。
图2是图1中推送地址保存和产生单元详图。
图3是图1中推送时机控制单元详图。
图4是图1中推送Buffer的结构详图。
图5是现有技术基于哈佛结构的片内Cache层次结构图。
图6是文献3中Stream Buffer与cache连接结构图。
【具体实施方式】
参照图1~4,本发明采用了指令和数据的推送装置,包括指令单元、Load/Store单元、一级指令Cache、一级数据Cache、缺失队列、缺失队列/写回队列、二级混合Cache、推送地址保存和产生单元、推送时机控制单元、指令推送Buffer和数据推送Buffer,所述推送地址保存和产生单元包括指令推送地址寄存器、数据正向推送地址寄存器和数据反向推送地址寄存器。推送地址保存和产生单元用于保存和计算下一个需要推送的指令或数据地地址。
增加了这些装置后整个信号的流向如下:
指令单元需要读取指令的时候,同时将地址发送到指令推送Buffer和一级指令Cache。这两个装置分别检查是否命中,并根据后面介绍的替换算法进行数据替换。如果它们都没有命中,那么发生一级指令Cache缺失,地址被发送到二级混合Cache,二级混合Cache将同时进行以下过程(数据缺失优先处理):1、根据地址读二级混合Cache,并将所读到的指令传递给一级指令Cache;2、用缺失地址更新指令推送地址寄存器。以后每个时钟周期都根据指令推送地址寄存器的地址,在推送时机控制单元的控制下推送指令,直到指令推送Buffer满为止。
Load/Store单元需要读写数据的时候,同时将地址发送到数据推送Buffer和一级数据Cache中。这两个装置分别检查是否命中,并根据后面介绍的替换算法进行数据替换。如果它们都没有命中,那么发生一级数据Cache缺失,地址被发送到二级混合Cache,二级混合Cache将同时进行以下过程:1根据地址读二级混合Cache,并将所读到的数据优先传递给一级数据Cache;2用缺失地址同时更新数据正向推送地址寄存器和数据反向推送地址寄存器。以后每个时钟周期都首先根据数据正向推送地址寄存器中的地址,在推送时机控制单元的控制下推送数据,直到正向数据推送Buffer满;然后根据数据反向推送地址寄存器中的地址,在推送时机控制单元的控制下推送数据,直到反向数据推送Buffer满。
指令推送地址寄存器:结构如图2(a),该寄存器保存下一个将要推送的指令行的地址,如果一级指令Cache没有发生缺失的话,每推送一行指令,地址加1,如果一级指令Cache发生缺失的话,该寄存器的值为缺失指令的行地址加1。
数据正向推送地址寄存器:结构如图2(b),该寄存器保存下一个将要按照地址增加方式推送的行地址,如果一级数据Cache没有发生缺失的话,每推送一行数据,该地址加1,如果一级数据Cache发生缺失的话,该寄存器的值为缺失数据的行地址加1。
数据反向推送地址寄存器:结构如图2(c),该寄存器保存下一个将要按照地址减少方式推送的行地址,如果一级数据Cache没有发生缺失的话,每推送一行数据,该地址减1,如果一级数据Cache发生缺失的话,该寄存器的值为缺失数据的行地址减1。
推送时机控制单元的作用是决定指令和数据推送的时机。因为指令和数据的推送必须不能影响正常的指令和数据的请求,所以该单元必须保证推送发生在总线空闲的时候,并且此时一级指令Cache没有对二级混合Cache的读取请求,一级数据Cache没有对二级混合Cache的读写请求。具体推送的时机如下:
(a)当发现按照地址增加数据推送Buffer没有满并且一级指令Cache和一级数据Cache的缺失队列为空,一级数据Cache的写回队列也为空的情况下,按照数据正向推送地址寄存器中的地址进行推送。
(b)然后如果发现按照地址减少数据推送Buffer没有满并且一级指令Cache和一级数据Cache的缺失队列为空,一级数据Cache的写回队列也为空的情况下,按照数据反向推送地址寄存器中的地址进行推送。
(c)最后如果发现指令推送Buffer没满并且一级指令Cache和一级数据Cache的缺失队列为空,一级数据Cache的写回队列也为空的情况下,按照指令推送地址寄存器中的地址进行推送。
通过这样的具有优先级的判断就能保证数据的推送是在一级指令Cache和一级数据Cache与二级混合Cache之间总线空闲时进行,并且推送的优先级如下最先按照地址增加推送数据、其次是按照地址减少推送数据,最后是推送指令。
为了避免由推送带来的Cache污染问题,在一级指令Cache端增加了指令推送Buffer,在一级数据Cache端增加了数据推送Buffer。数据推送Buffer又在逻辑上分成了两个部分,一部分存放按照地址增加方式推送来的数据,另一部分存放按照地址减少方式推送来的数据。推送Buffer的结构如图3,每一行包括三个部分:
标签:存储该行数据的行地址。
有效位:表明这行数据是否有效。
数据:存储一个Cache行的数据。
增加了指令推送Buffer和数据推送Buffer后,处理器核访问一级Cache需要并行的访问一级Cache和相应的推送Buffer。如果他们有一个命中则算命中,都没命中才算缺失。另外处理器访问推送Buffer的时候是用数据的行地址与所有推送Buffer行中的标签同时进行比较,以确定所需数据或指令是否在推送Buffer中。推送Buffer与相应的Cache替换策略如下:
●如果所取的指令(数据)在指令(数据)推送Buffer中命中,在cache中没命中的话:指令(数据)推送Buffer中的命中Block替换进cache,并清除推送Buffer中的该Block块;
●如果所取的指令(数据)在推送Buffer中命中,在cache中也命中的话:置在推送Buffer中命中的Block无效;
●如果所取的指令(数据)在推送Buffer中缺失,在cache中也缺失的话:推送Buffer中的所有行被清除,从缺失地址后(前后两侧)开始推送,这个地方应该跳过缺失的Block,因为这个块是一级cache向二级cache正常的请求块;
●如果所取的指令(数据)在推送Buffer中缺失,在cache中命中的话:推送Buffer中数据无变化。
嵌入式处理器片内指令和数据推送装置的工作流程如下:
(a)检测一级Cache与二级混合Cache之间总线是否空闲;检测一级指令Cache的缺失队列是否为空;检测一级数据Cache的写回队列是否为空。如果以上三个条件都满足,转到步骤(b),否则重新执行步骤(a)。
(b)检测正向数据推送Buffer是否满。如果没满,转到步骤(c),否则转到步骤(d)。
(c)根据正向数据推送地址寄存器中的地址,从二级混合Cache中取数据,并将取到的数据推送到距向数据推送Buffer中。然后转到步骤(a)。
(d)检测反向数据推送Buffer是否满。如果没满,转到步骤(e),否则转到步骤(f)。
(e)根据反向数据推送地址寄存器中的地址,从二级混合Cache中取数据,并将取到的数据推送到反向数据推送Buffer中。然后转到步骤(a)。
(f)检测指令推送Buffer是否满。如果没满,转到步骤(g),否则转到步骤(a)。
根据指令推送地址寄存器中的地址,从二级混合Cache中取数据,并将取到的数据推送到指令推送Buffer中。然后转到步骤(a)。
由于使用推送的装置,可以增加一级指令Cache和一级数据Cache的命中率,这就可以减少一级指令Cache和一级数据Cache对二级混合Cache的访问请求,增加了总线空闲的时间,也就是说有更多的时间可以用于数据和指令的推送。