一种容错目录高速缓存控制器的制作方法

文档序号:13736656阅读:139来源:国知局
技术领域本发明涉及片上多核微处理器和结点控制芯片中容错目录高速缓存(Cache)控制器。

背景技术:
近年来,从巨型机到个人电脑,从消费类电子产品到工业控制,人类生产生活的方方面面都已经与超大规模集成电路(VeryLargeScaleIntegrated,VLSI)芯片密不可分。在数字集成电路中,通过保持或释放一定的电荷,表示逻辑“1”或者逻辑“0”。而应用于复杂电磁环境(如太空、核电站)的集成电路受到高能粒子轰击或噪声干扰,会发生瞬时充放电,有可能破坏微处理器的内部状态,进而影响芯片的可靠性。这种由高能粒子轰击和噪声干扰引发的错误称为“软错误”。与设计制造过程中引入的“硬错误”相比,软错误具有瞬态、可恢复、发生位置和时间随机等特点。随着集成电路制造工艺的不断进步,微处理器对高能粒子和噪声干扰的敏感性不断提高,这将使VLSI芯片面临越来越严重的软错误威胁,对集成电路的容错性和可靠性设计提出了更高的要求。而在多处理机系统和片上多核微处理器中,目录协议是应用最广泛的Cache一致性协议。为了提高读取目录的性能,弥补处理器内核和外部主存之间的巨大频率差异,目录Cache是片上多核微处理器以及多处理机系统中结点控制芯片的一个核心部件。而在VLSI芯片中,各种存储单元尤其是Cache占据了芯片面积的40%~70%,是芯片中对高能粒子最为敏感的部分。芯片发生的各种瞬态故障,绝大部分来自于存储单元。因此目前高可靠集成电路芯片大多都要针对Cache进行专门保护。而在基于目录的Cache一致性协议中,目录的正确性是关系到片上多核处理器或多处理机系统能否正常运转的关键。因此无论从性能的角度,还是可靠性的角度,容错目录Cache都是片上多核微处理器和结点控制芯片中至关重要的部件。如图1所示,传统的目录Cache(USPatent6353871,USPatent6374331)由输入缓存区、输出缓冲区、标记(Tag)阵列、目录数据阵列、失效缓冲器、写回缓冲器、Fill缓冲器构成。目录Cache的主要功能是,在多个处理器或片上多个处理器内核之间,数据副本的共享关系不断变化,使用目录Cache缓存最近经常使用的目录,以避免频繁从外部主存中访问目录而导致的系统开销急剧增加,性能下降。本发明中将外部的处理器或处理器内核称为处理部件。输入缓冲区是一个先入先出(First-In-First-Out,FIFO)队列,深度和宽度与目录Cache的硬件设计相关,同时保持一个读指针、FIFO计数器和一个写指针,通过写指针指示报文写入FIFO的位置,读指针标识报文从FIFO中读出的位置。输入缓存区与处理部件、Tag阵列相连,从处理部件接收读写目录的请求报文,存入输入缓冲区中,而后依序发往Tag阵列。当输入缓存区从处理部件接收请求报文时,将请求报文存入输入缓存区中,同时FIFO写指针从0开始,依次累加1,FIFO计数器也加1。此时FIFO队列非空,输入缓冲区中的FIFO读取逻辑开始工作,读取逻辑从读指针所标识的位置读出一个数据,同时读指针也从0开始,依次加1,而发生一次读操作,FIFO计数器减1。当FIFO计数器的值即将达到FIFO的深度,即FIFO所能保存报文的最大个数时,向处理部件发出满信号,通知处理部件停止发送访问请求,避免出现FIFO上溢现象,导致丢失报文;当FIFO计数器减到0时,标识FIFO队列当前为空,读取逻辑停止工作,避免出现FIFO下溢现象,发出错误报文。如图2(a)所示,请求报文通常包括下列位域:操作类型、读识别号(读ID)、访问地址、写目录。其中操作类型表示是读操作还是写操作;读识别号用于区别每个读操作,写操作时该域无效;访问地址表示访问目录的地址;写目录是指需要写入Cache的目录,对于读操作无效。输出缓冲区连接目录数据阵列与处理部件。输出缓存区的组成、结构与输入缓存区相同,输出缓存区接收并保存来自数据阵列、等待返回处理部件所读取的目录,而后将目录与相应的读ID组成读返回报文,发送至处理部件。如图2(b)所示,读返回报文通常包括下列位域:读ID、读目录。Cache的组相联方式、写策略和替换算法决定了Tag阵列的结构。综合考虑性能与硬件代价等因素,目录Cache的写策略采用写回方式,替换算法采用最近最少使用(LeastRecentlyUsed,LRU)或伪LRU算法,组相联方式采用S路组相联(S为正整数,一般为2的幂次)。为了便于描述,假设目录Cache采用S路组相联、写策略为写回方式、替换算法采用LRU算法。如图2所示,访问目录的访问地址划分为三部分:标记Tag、索引Index和偏移Offset。这里假设访问地址的总位数为x位(x为正整数),读ID为i位(i为正整数);Tag阵列和目录数据阵列的深度为y(y为正整数,一般为2的幂次);Cache行的长度为m位(m为正整数),目录为n位(n为正整数)。那么在地址位域中,Offset表示从Cache行中取出对应的目录,因为2Offset=Cache行长度/目录长度=m/n,所以偏移的位数为log2(m/n)位;Index取决于Tag阵列的深度,表示从2index=y个组(Set)中取出相应的Tag,因此Index的位数是log2y;Tag就由地址中剩余的位构成,其位数表示为p=x-log2(m/n)-log2y,用于标记不同的Cache行,保存在Tag阵列中。由于是S路组相联,因此Tag阵列由S个完全相同的存储器构成,该存储器阵列由随机访问存储器(RandomAccessMemory,RAM)实现,每个存储器深度为y、宽度为(p+3)位,用于保存Cache的p位Tag及其相应的3位状态位,存储阵列中的Tag与目录数据阵列中的Cache行一一对应。而状态位通常包括有效位(Valid,V)、使用位(Used,U)、修改位(Dirty,D,又称脏位),其中V位表示对应Tag是否为有效Tag;U位表示对应Tag是否为S路中最近最少使用的Tag;D位标识当前Tag是否被修改了且没有被写回主存。Tag阵列与输入缓冲区、目录数据阵列和失效缓冲器相连。Tag阵列从输入缓冲区接收请求报文,向目录数据阵列输出请求报文和路编号,Tag阵列与失效缓冲器双向发送请求报文。Tag阵列从输入缓冲区接收请求报文,从请求报文中解析出x位的访问地址,其中<log2(m/n)+log2y-1:log2(m/n)>位为Index,用于Tag阵列的寻址,定义整数a、b,a≥0,且b>a,本发明中<b:a>的意义为:地址位中从第a位至第b位共计(b-a+1)位二进制字符串。如图3所示,Tag阵列从S个存储器或Tag阵列中读出S个Tag数据,按照有效位V的标识从S个Tag数据中选择出其中V=1的Tag数据,同时与请求报文中的Tag位域进行匹配。如果存在匹配项,表明当前请求报文命中Tag阵列,那么目录数据阵列中存在该请求要读写的目录,Tag阵列将请求报文(包括操作类型、地址、读ID、写目录)和命中路编号发送到目录数据阵列;同时更新状态位:若请求报文的操作类型信号表明是写操作,更新被命中Tag项的U位和D位,若是读操作,仅更新U位。如果S路Tag阵列中不存在匹配项,即Tag失效时,写入新的Tag,这时存在两种情况:一种是S路的V位不全为1,那么就将请求报文的Tag域及其状态位写入其中一个V位为0的路;另一种是S路的V位全为1,这时需要将其中一路替换到主存中,根据LRU算法,查询S路的U位,得到最近最少使用的一路,而后将请求报文、替换路编号发送到目录数据阵列,最终将目录数据阵列中对应的目录Cache行写入主存,而后将Tag写入空出的那一路。如果不存在匹配项,表明当前请求报文失效,那么目录数据阵列中没有要访问的目录,那么Tag阵列将失效报文发送至失效缓冲器中保存。等待Fill缓冲器发送读目录到目录数据阵列后,Tag阵列会接收到失效缓冲器发送的请求报文。此时因读目录已经返回到数据阵列,那么Tag会命中,将请求报文、命中路编号发送到目录数据阵列。若当前的操作类型信号表明是写操作,需要更新被命中Tag项的U位和D位,若是读操作,仅需更新U位。目录数据阵列是保存目录内容的存储阵列,以Cache行为单位进行组织,即每一个存储单元就是一个Cache行。因为Cache行与Tag一一对应,目录数据阵列逻辑上由S个存储器构成,其中每个存储器的深度为y,宽度为m位,那么目录数据阵列的总容量就是m×y×S。目录数据阵列与Tag阵列、输出缓冲区、写回缓冲器和Fill缓冲器相连。目录数据阵列从Tag阵列接收请求报文、命中路/替换路编号。当请求报文中的操作类型信号为写操作时,则根据Tag阵列与数据阵列之间连接的地址信号与命中路编号的信号,在命中路编号所指定的存储器中,根据地址的Index域确定写入哪一行,同时根据地址中的Offset域,将n位写目录信号写入对应Cache行中m/n个位置中的一个,完成更新操作。目录数据阵列向输出缓冲区输出读返回报文(包括读ID、读目录)。当Tag阵列发送的操作类型信号为读操作时,根据Tag阵列与数据阵列之间的地址信号与命中路编号的信号,从数据阵列中命中路信号对应的存储器,根据地址信号的Index域读出对应的Cache行,而后根据访问目录地址的Offset域,即<log2(m/n)-1:0>位,从m位的Cache行中取出相应的n位读目录,连同接收到的读ID信号,一并发送到输出缓冲区。目录数据阵列向写回缓冲器输出请求报文,包括地址、操作类型、读ID、写目录。当Tag阵列失效时,目录数据阵列将从Tag阵列接收请求报文(包括地址、操作类型与读ID)转发到写回缓冲器。当Tag阵列的操作类型信号为替换操作时,根据从Tag阵列接收请求报文中的地址信号与替换路编号,目录数据阵列从数据阵列中命中路信号对应的存储器,根据地址信号的Index域读出的m位Cache行数据;由于目录数据阵列与写回缓冲器之间通过地址、操作类型、读ID、写目录信号连接,而后将从目录数据阵列读出m位的Cache行数据作为写目录,连同Tag阵列发送的地址、操作类型等信号发送到写回缓冲器。目录数据阵列从Fill缓冲器接收读返回报文,根据读返回报文中的地址,将m位的读目录写入目录数据阵列中地址信号寻址的Cache行。失效缓冲器与Tag阵列之间通过读请求报文信号相连。失效缓冲器从Tag阵列接收并保存失效请求报文,等待Fill缓冲器发送读目录到目录数据阵列后,再将该请求报文发送至Tag阵列。失效缓冲器包含一个随机访问存储器RAM,深度为d(d为正整数),保存所有的失效报文。该存储器维护一个指示存储器中空闲位置的寄存器,其宽度为d位,与存储器的深度相同,每一位指示对应存储器中对应深度的一行是否空闲,为“0”表示空闲,为“1”表示占用。当上一次写操作完成后,那么写指针根据该寄存器的下一个“0”位,指向存储器中的下一个空闲位置。当失效缓冲器接收到来自Tag阵列的失效请求报文后,按照RAM写指针指示的空闲位置,将报文写入失效存储器,同时更新指示空闲位置的寄存器,将对应的位写为“0”,表示非空闲。当Fill缓冲器发送读目录到目录数据阵列后,通过返回报文中的地址或读ID,与失效缓冲器中对应的位域进行比较,根据匹配位置产生读指针,失效缓冲器将请求报文读出、发往Tag阵列,同时更新指示空闲位置的寄存器,将该位改为“1”,表示该位置空闲。写回缓冲器是保存请求报文的缓冲器,与目录数据阵列、外部接口和Fill缓冲器相连。写回缓冲器包含一个随机访问存储器RAM构成的FIFO队列,保存请求报文。写回缓冲器从目录数据阵列接收请求报文,根据请求报文中的操作类型信号,处理两类访存请求:读请求和写请求。当目录数据阵列发送新的请求时,根据FIFO写指针指示的位置,将地址、操作类型、读ID、m位的写目录信号保存到FIFO队列,而后FIFO写指针加1,FIFO计数器也加1;由于读请求不带数据载荷,因此写目录位域无效。写回缓冲器向外部接口输出请求报文信号,包含1位的操作类型、x位的访存地址和i位的读ID等位域,其中操作类型是指读操作或写操作,数据信号是指待写入的m位Cache行数据。当FIFO队列中保存了请求,即请求报文FIFO计数器不为0时,表明FIFO中有请求未发出,那么根据读指针指示的位置,从队列中读出相应的请求,包括操作类型、地址、读ID与写目录等位域,FIFO读指针加1,FIFO计数器减1。根据操作类型位域判断当前请求为写操作还是读操作,若是写操作,则将地址和写目录同时发往外部接口,读ID域无效,如果是读操作,则仅将地址和读ID信号发送到主存,写目录域无效。写回缓冲器向Fill缓冲器输出x位的地址信号与i位的读ID信号。在写回缓冲器将请求报文信号发往外部接口同时,把请求报文中的地址与读ID域发送至Fill缓冲器。Fill缓冲器又称读缓冲器,与目录数据阵列、写回缓冲器和外部接口相连。Fill缓冲器包含一个随机访问存储器RAM构成的FIFO队列,和一个关联存储器(ContentAddressedMemory,CAM)。Fill缓冲器通过x位的地址信号与i位的读ID信号与写回缓冲器连接。当写回缓冲器发送地址信号与读ID信号到Fill缓冲器时,将它们存入关联存储器CAM中的同一行,根据读ID的内容匹配出对应的地址。Fill缓冲器与外部接口通过i位的读ID与m位的读目录连接,方向是外部接口发送到Fill缓冲器。Fill缓冲器包含一个随机访问存储器RAM构成的FIFO队列,保存外部接口发送的读目录。当外部接口发送读返回报文(包含读ID与读目录)到Fill缓冲器时,根据FIFO的写指针指示的位置,将读目录保存到FIFO队列中,同时FIFO的写指针累加1,FIFO计数器也加1,其中FIFO写指针和计数器都是从0开始计数,当FIFO计数器增加至FIFO的深度时,表示FIFO已被写满,发出满信号,通知外部接口停止继续返回目录,避免出现上溢。与此同时,根据读ID的内容从CAM中匹配对应的地址。Fill缓冲器与目录数据阵列的连接关系是:通过x位的地址信号、m位的读目录信号连接,当Fill缓冲器在CAM中匹配并读出地址信号时,根据FIFO读指针指示的位置,从队列中读出读目录信号,连同匹配出的地址信号,组成读返回报文,一起发送到目录数据阵列模块;同时FIFO读指针加1,读指针也是从0开始累加,与此同时FIFO计数器减1,当计数器减到0时,表明FIFO已空,停止读操作,避免出现下溢。传统的目录Cache仅仅实现了存储功能,达到了目标性能,但是缺乏容错设计,导致芯片可靠性不强,无法适应空间环境或复杂电磁环境。因此,设计容错目录Cache控制器是适应空间环境或复杂电磁环境的必然趋势。

技术实现要素:
本发明主要解决的技术问题是:针对传统目录Cache容错性不强、可靠性不高,无法满足空间环境或复杂电磁环境的要求,提出一种容错目录Cache控制器,采用从体系结构级到电路设计级的多层次容错技术,在不损失性能的前提下,显著提高目录Cache的容错性与可靠性。本发明的技术方案为:如图4所示,本发明容错目录Cache控制器由4个完全相同的目录缓存体(DirectoryCacheBank,DCB)模块、1个目录访问旁路(DirectoryAccessBypass,DAP)模块、1个目录访问交叉开关(DirectoryAccessCrossbar,DAX)模块、1个访存交叉开关(MemoryAccessCrossbar,MAX)模块与1个配置寄存器构成。4个目录缓存体分别记为第零目录缓存体DCB0、第一目录缓存体DCB1、第二目录缓存体DCB2和第三目录缓存体DCB3,4个目录缓存体的内部结构和连接关系完全相同。各个部件之间的连接关系为:目录访问交叉开关DAX与外部接口通过请求报文信号与读返回报文信号连接,与DCB0、DCB1、DCB2、DCB3、DAP通过请求报文信号与读返回报文信号连接,与配置寄存器通过4位的配置位相连;第i目录缓存体DCBi与目录访问交叉开关DAX通过请求报文与读返回报文连接,与访存交叉开关MAX通过请求报文与读返回报文信号连接,与配置寄存器通过4位的配置位相连,i为整数,0≤i≤3;目录访问旁路DAP与目录访问交叉开关DAX通过请求报文与读返回报文连接,与访存交叉开关MAX通过请求报文与读返回报文信号连接,与配置寄存器通过4位的配置位相连;访存交叉开关MAX与外部接口通过请求报文与读返回报文连接,与DCB0、DCB1、DCB2、DCB3、DAP通过请求报文信号与读返回报文信号连接,与配置寄存器通过4位的配置位相连;配置寄存器与目录访问交叉开关DAX、访存交叉开关MAX、DCB0、DCB1、DCB2、DCB3、DAP通过4位的配置位相连。目录访问交叉开关DAX和访存交叉开关MAX的组成与结构相同,仅是连接关系不同。DAX连接外部访问目录的请求源与目录缓存体模块和目录访问旁路DAP;而MAX连接目录缓存体模块与外部的访问主存的部件和目录访问旁路DAP。如图5所示,访存交叉开关MAX包含两部分:写交叉开关(WRXbar)和读交叉开关(RDXbar)。访存交叉开关MAX与外部接口通过请求报文与读返回报文连接,与DCB0、DCB1、DCB2、DCB3、DAP通过请求报文信号与读返回报文信号连接,与配置寄存器通过4位的配置位相连。如图5所示,写交叉开关由4个目录缓存体(DirectoryCacheBank,DCB)主模块、1个目录访问旁路(DirectoryAccessBypass,DAP)主模块和c个存控(MemoryController,MC)从模块构成。4个目录缓存体主模块的功能、结构、连接关系完全相同,分别记为DCB0主模块、DCB1主模块、DCB2主模块和DCB3主模块。c个存控(MemoryController,MC)从模块的功能、结构、连接关系完全相同,分别记为MC0从模块、MC1从模块、…、MCj从模块、…、MCc-1从模块,c、j均为整数,在实际设计中可以通过简单的结构复制来扩展到更多的存控从模块,0≤j≤c-1。如图5所示,DCBi主模块与第i目录缓存体DCBi、MC0从模块、MC1从模块、…、MCj从模块、…、MCc-1从模块相连。DCBi主模块从第i目录缓存体DCBi接收DCBi请求报文信号,根据请求报文中地址第[log2n-1:0]位将DCBi请求报文发送到相应的MC从模块。需要说明的是,本发明中所有请求报文格式是一样的,只是为了区分请求报文的来源不同,分别表示成DCBi请求报文、MCj请求报文等;所有读返回报文的格式也是一样的,为了区分读返回报文的来源不同,分别表示成DCBi读返回报文、MCj读返回报文等。如图6所示,DCBi主模块包括2个子模块:第i报文FIFO、第i仲裁请求生成逻辑。第i报文FIFO深度为H,H为正整数,用于缓冲从DCBi接收的DCBi请求报文中的报文,包括操作类型、读ID、访问地址和写目录位域,读指针和写指针标识读出和写入数据的位置,由判满和判空逻辑进行流控。第i报文FIFO非空时,第i仲裁请求逻辑发出请求信号到MCj从模块的第jRound-robin仲裁器,当接收到来自第jRound-robin仲裁器的授权信号时,将第i报文FIFO中读指针指示的报文,发往MCj从模块中的第j报文栈存逻辑。第jRound-robin仲裁器采用典型的轮转调度(Round-robin)仲裁策略,其特点是公平、不会出现死锁和“饿死”现象。DAP主模块的内部结构和功能与DCBi主模块完全相同。DAP主模块与目录访问旁路DAP、MC0从模块、MC1从模块、…、MCj从模块、…、MCc-1从模块相连。DAP主模块从目录访问旁路DAP接收请求报文,根据请求报文中的地址第[log2n-1:0]位将DAP请求报文发送到相应的MC从模块。MCj从模块与DCB0主模块、DCB1主模块、DCB2主模块、DCB3主模块、DAP主模块和外部存储控制器相连。MCj接收来自DCBi主模块的请求报文,接收来自DAP主模块的请求报文,将请求报文转换为与存储控制器匹配的请求报文,然后发送给外部访存控制器。配置寄存器是一个寄存器,与目录访问交叉开关DAX、访存交叉开关MAX、DCB0、DCB1、DCB2、DCB3、DAP通过4位的配置位相连。通过在配置寄存器中的最低位[0],将MAX的写交叉开关WRXbar可以配置为两种工作模式:当配置位为0时,是5×1工作模式,即5个请求源相互独立,并行工作,此时4个DCB等价于一个容量为4个DCB之和的DCB;当配置位为1时,是1×1工作模式,即仲裁器通过配置寄存器中第[3:1]位选通其中一个DCB,发送数据到从模块,而其他DCB不允许通过,此时对应的工作模式是4个DCB互为备份,发送和接收的都是相同数据;默认配置下,[3:1]位等于0,表示DCB0为主模块,其他DCB为从模块;如果DCB0无法正常工作,那么用户可以通过配置配置寄存器中第[3:1]位等于i,选通DCBi,将DCBi作为主模块。当[3:1]位等于4时,配置为DAP单独工作模式。MCj从模块包括第jRound-robin仲裁器和第j报文栈存逻辑。第jRound-robin仲裁器是一个采用标准的Round-robin仲裁算法实现的硬件逻辑模块,Round-robin仲裁算法是一种典型的公平仲裁策略,反复轮询5个请求源:DCB0请求、DCB1请求、DCB2请求、DCB3请求、DAP请求,当循环到某个请求源时,发现有请求信号到达,那么就向该请求源发送授权信号,而后继续轮询下一个请求源。第j报文栈存逻辑是由n+x+i+1位寄存器构成,接收来自报文FIFO的请求报文,将其寄存一栈后,发送到外部存储控制器。相反地,如图5所示,读交叉开关由4个DCB从模块、1个DAP从模块和c个MC主模块构成。4个DCB从模块的功能、结构、连接关系完全相同,分别记为DCB0从模块、DCB1从模块、DCB2从模块和DCB3从模块。c个MC主模块的功能、结构、连接关系完全相同,分别记为MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块。因此,读交叉开关的主模块包括c个:MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块,其主要功能是根据报文中的读ID,将存储控制器返回的读报文,路由到对应的从模块;从模块包括5个:DCB0从模块、DCB1从模块、DCB2从模块、DCB3从模块和DAP从模块。MCj主模块与DCB0从模块、DCB1从模块、DCB2从模块、DCB3从模块、DAP从模块和外部存储控制器相连。MCj主模块从外部存储控制器接收MCj读返回报文,根据报文中的读ID,将存储控制器返回的读返回报文,发送到对应的从模块。如图7所示,MCj主模块由第j报文FIFO、第j仲裁请求生成逻辑与第j读ID判别逻辑三个子模块组成。第j报文FIFO与DCB0从模块、DCB1从模块、DCB2从模块、DCB3从模块、DAP从模块中的报文栈存逻辑、以及外部存储控制器相连,其实现逻辑与写交叉开关中报文FIFO一样,报文FIFO缓冲来自存储控制器返回的读返回报文,读指针和写指针标识读出和写入数据的位置,由判满和判空逻辑进行流控,当判空逻辑结果为报文FIFO非空时,第j仲裁请求生成逻辑向第iRound-robin仲裁器发送请求信号请求进行仲裁,如果从第iRound-robin仲裁器接收到授权信号,第j报文FIFO的控制逻辑控制将第j报文FIFO中读指针指示的MCj读报文,发往对应DCBi主模块中的第i报文栈存逻辑。第j读ID判别逻辑根据存储控制器返回报文中的读ID,识别所述度报文中的数据当初是由哪个请求源申请的,而后将数据发往对应的从模块。当配置为5×1工作模式时,5个从模块都可以正常接收数据,由第j读ID判别逻辑来分发数据;当配置为1×1工作模式时,只向预先设定的某个从模块发送数据。DCBi从模块与第i目录缓存体DCBi、MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块相连。DCBi从模块从MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块接收读返回报文,然后发送给第i目录缓存体DCBi。如图7所示,DCBi从模块由第iRound-robin仲裁器与第i报文栈存逻辑组成,这两个子模块的逻辑实现与写交叉开关中的Round-robin仲裁器与报文栈存逻辑相同。DAP从模块与的内部结构和功能与DCBi从模块完全相同。DAP从模块与目录访问旁路DAP、MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块相连。DAP主模块从从MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块接收读返回报文,然后发送给目录访问旁路DAP。如图8所示,目录访问旁路DAP模块是一个有限状态机,与目录访问交叉开关DAX通过请求报文与读返回报文连接,与访存交叉开关MAX通过请求报文与读返回报文信号连接,与配置寄存器通过4位的配置位相连。DAP的有限状态机包括IDLE、READ0、READ1、WRITE0、WRITE15个状态,状态之间的转换过程为:●IDLE:DAP初始状态为IDLE,如果DAP检测到有来自目录访问交叉开关DAX的请求报文时,包括操作类型、读ID、地址与写目录位域,将请求报文转换为适合访存接口的请求报文,发送给访存交叉开关MAX,下一状态转换到READ0,然后通过访存交叉开关MAX向存储控制器发出读请求;否则继续在当前IDLE状态循环;●READ0:当请求报文到达时,DAP由IDLE状态转换到READ0状态。READ0状态时,如果存储控制器没有向访存交叉开关MAX返回数据,则DAP没有收到来自MAX的读返回报文,DAP在READ0状态循环,继续等待;直至从MAX接收到读返回报文,包括读ID、读目录位域,DAP根据请求报文中的操作类型域,判断当前是读操作还是写操作,若为读操作,下一状态到达READ1,若为写操作,转换到WRITE0;●READ1:当请求报文是读请求时,有限状态机DAP从READ0状态转换到READ1状态。READ1状态下,DAP根据请求报文中地址域的最低4位,从MAX返回读返回报文的读目录中选择相应的目录,连同读返回报文中的读ID信号,构成读返回报文,发送到DAX模块,转IDLE状态;●WRITE0:当请求报文是写请求时,有限状态机DAP从READ0状态转换到WRITE0状态。WRITE0状态时,DAP根据请求报文中地址域的最低4位,将写请求报文中的目录域覆盖掉MAX返回读返回报文中的读目录中的相应目录,重新构成1个Cache行数据,转WRITE1状态;●WRITE1:WRITE0状态重构数据后转换到WRITE1状态。WRITE1状态时,DAP将操作类型、读ID、访问地址位域,以及新组成的Cache行数据,构成请求报文,发送到MAX,通过存储控制器写入到外部主存中,返回到IDLE。由于DAP实现简单,逻辑较少,并且不包含存储器,因此不易受到电磁辐射的干扰。在DCB出现失效时,DAP能够维持系统正常运转,从而增加了系统的鲁棒性。DAP采用阻塞的方式处理请求报文,即严格按照请求到达的先后顺序,通过先来先服务FCFS的策略,不允许乱序,后面的请求要等待前面的请求完成后,才能被处理。DCB0、DCB1、DCB2、DCB3的结构与连接关系完全相同。DCBi与目录访问交叉开关DAX通过请求报文与读返回报文连接,与访存交叉开关MAX通过请求报文与读返回报文信号连接,与配置寄存器通过4位的配置位相连。DCBi由输入队列、输出队列、仲裁器、Tag阵列、数据阵列、失效缓冲器、写回缓冲器、Fill缓冲器与访存接口模块构成。其中失效缓冲器、写回缓冲器以及Fill缓冲器与背景技术中传统目录Cache结构中的相同。而输入队列与背景技术中传统目录Cache结构中的输入缓冲区相同,输出队列与背景技术中传统目录Cache结构中的输出缓冲区相同。仲裁器、访存接口模块、Tag阵列与数据阵列与背景技术中传统目录Cache结构中的不同。DCBi从配置寄存器接收配置位。4个DCB可通过在配置寄存器中的最低位[0],将4个DCB配置为两种工作模式。当配置位最低位[0]为0时,是5×1工作模式,即5个请求源相互独立,并行工作,此时4个DCB等价于一个容量为4个DCB之和的DCB;当配置位最低位[0]为1时,是1×1工作模式,即仲裁器通过配置寄存器中第[3:1]位选通其中一个DCB,发送数据到从模块,而其他DCB不允许通过,此时对应的工作模式是4个DCB互为备份,发送和接收的都是相同数据,4个DCB保存相同的数据,利用冗余硬件进行热备份,适应实际应用中不同的需求与容错级别;默认配置下,[3:1]位等于0,表示DCB0为主模块,其他DCB为从模块;如果DCB0无法正常工作,那么用户可以通过配置配置寄存器中第[3:1]位等于i,选通DCBi,将DCBi作为主模块。当[3:1]位等于4时,配置为DAP单独工作模式。如果4个DCB中的存储体都由于电磁辐射出现不可恢复的错误,导致4个DCB无法正常工作,就通过目录访问旁路模块DAP进行读写目录操作。由于DAP内部没有设计大容量存储器,虽然访问目录的性能有所下降,但不易被电磁辐射干扰,提高了可靠性。输入阵列的结构和背景技术中传统目录Cache结构中的输入缓冲区相同。输入阵列与目录访问交叉开关DAX和仲裁器相连,从DAX接收请求报文并存入输入阵列中,而后依序发往仲裁器。同时FIFO写指针从0开始,依次累加1,FIFO计数器也加1。此时FIFO队列非空,输入阵列中的FIFO读取逻辑开始工作,读取逻辑从读指针所标识的位置读出一个数据,同时读指针也从0开始,依次加1,而发生一次读操作,FIFO计数器减1。当FIFO计数器的值即将达到FIFO的深度,即FIFO所能保存报文的最大个数时,向DAX发出满信号,通知DAX停止发送访问请求,避免出现FIFO上溢现象,导致丢失报文;当FIFO计数器减到0时,标识FIFO队列当前为空,读取逻辑停止工作,避免出现FIFO下溢现象,发出错误报文。仲裁器与输入队列、Tag阵列、失效缓冲器、Fill缓冲器相连,接收来自输入队列、失效缓冲器、Fill缓冲器的请求报文,采用优先级的仲裁策略对来自输入队列、失效缓冲器、Fill缓冲器的请求报文进行仲裁,将仲裁出的请求报文发送到Tag阵列。仲裁器采用优先级的仲裁策略如下:来自Fill缓冲器请求报文的优先级最高,其次是来自失效缓冲器的请求报文,最后是来自输入队列的请求报文。失效缓冲器的结构和背景技术中传统目录Cache结构中的失效缓冲器相同。失效缓冲器与Tag阵列、仲裁器相连,从Tag阵列接收并保存失效请求报文,并将请求报文发送至仲裁器。Fill缓冲器的结构和背景技术中传统目录Cache结构中的Fill缓冲器相同。Fill缓冲器与数据阵列、写回缓冲器和访存接口模块相连。Fill缓冲器从写回缓冲器接收地址信号与读ID信号,并存入其关联存储器CAM中的同一行,它可以根据读ID的内容匹配出对应的地址。Fill缓冲器从访存接口模块接收读返回报文,根据Fill缓冲器中FIFO的写指针指示的位置,将读返回报文中的读目录保存到FIFO队列中,同时FIFO的写指针累加1,FIFO计数器也加1,其中FIFO写指针和计数器都是从0开始计数,当FIFO计数器增加至FIFO的深度时,表示FIFO已被写满,发出满信号,通知访存接口模块停止发送读返回报文,避免出现上溢。与此同时,根据读返回报文中读ID的内容从CAM中匹配对应的地址。当Fill缓冲器在CAM中匹配并读出地址信号时,根据FIFO读指针指示的位置,从FIFO队列中读出读目录信号,连同匹配出的地址信号,一起发送到数据阵列;同时FIFO读指针加1,读指针也是从0开始累加,与此同时FIFO计数器减1,当计数器减到0时,表明FIFO已空,停止读操作,避免出现下溢。写回缓冲器是保存请求报文的缓冲器,其结构和背景技术中传统目录Cache结构中的写回缓冲器相同。写回缓冲器与数据阵列、Fill缓冲器、访存接口模块相连。写回缓冲器从数据阵列接收请求报文,然后,根据FIFO写指针指示的位置,将请求报文保存到FIFO队列,而后FIFO写指针加1,FIFO计数器也加1;由于读请求不带数据载荷,因此写目录位域无效。当请求报文FIFO计数器不为0时,表明FIFO中有请求未发出,那么根据读指针指示的位置,从FIFO队列中读出相应的请求,包括操作类型、地址、读ID与写目录等位域,FIFO读指针加1,FIFO计数器减1。然后根据操作类型位域判断当前报文为写操作还是读操作,若是写操作,则将地址和写目录同时发往访存接口模块,读ID域无效;如果是读操作,则仅将地址和读ID信号发送到访存接口模块,写目录域无效,同时,把报文中的地址与读ID域发送至Fill缓冲器。访存接口模块与访存交叉开关MAX、Fill缓冲器、写回缓冲器相连,主要完成接口信号转换的工作,当接收到来自写回缓冲器的请求报文时,将请求报文转换成访存接口匹配的请求报文,发送到访存交叉开关MAX;当接收到访存交叉开关发出的读返回报文时,将读返回报文转换为与Fill缓冲器匹配的读返回报文,发送到Fill缓冲器。由于Tag阵列和数据阵列中包含大量的存储器,相对其他模块讲,这两个模块最易受到电磁辐射的干扰而导致功能失效,因此最要对它们进行容错保护。本发明采用四种容错技术对Tag阵列和数据阵列进行保护。一是多层次纠错编码(ErrorCorrectingCode,ECC)校验,综合性能、功耗和设计复杂度等因素,采用了纠一检二ECC码;二是Tag存储体和数据存储体采用了双体热备份技术,每一个存储器都有一份副本,同时写入相同数据,从主存储器读出时判错,如果在一段预设的时间内错误总数超过阈值,那么就启用副本存储器;三是错误擦除技术,当Tag和目录被读出时进行ECC校验,如果发现一位错,通过回写操作,将纠正后的数据覆盖掉存储器中原位置的错误数据;四是错误巡检技术,以一定的时间间隔,主动逐个读取所有Tag或数据存储器,并针对一位错误发起回写,将纠正后的正确Tag或数据写入存储器。通过这些容错技术,保证了Tag阵列和数据阵列的鲁棒性。下面结合Tag阵列和数据阵列的结构介绍这四种容错技术的具体实现方式。与背景技术一样,本发明容错目录Cache采用S路组相联、写回方式和LRU替换算法。如图10所示,Tag阵列由S路TagRAM组成,记为第零路TagRAM、第一路TagRAM、…、第s路TagRAM、…、第S-1路TagRAM,s为整数,0≤s≤S-1。每路TagRAM分别对应一组深度为DTag、宽度为LTag的存储器;类似地,数据阵列也有S路数据RAM组成,记为第零路数据RAM、第一路数据RAM、…、第s路数据RAM、…、第S-1路数据RAM,每路逻辑上由一组深度为DData、宽度为LData的存储器实现,DTag、LTag、DData、LData均为正整数,根据硬件设计需要设计数值大小。如图11所示,在具体物理实现时,因为宽度太大的存储器工艺上实现较为困难,所以通常可以将Tag阵列和数据阵列中的存储器拆分成K块较小的存储器实现,K为正整数,根据容错需要设计K值的大小。访问地址域的分配方式与传统目录Cache相同,共包含x位,从高位到低位依次是由p=x-log2(m/n)-log2y位的标记Tag、log2y位的索引Index、log2(m/n)位的偏移Offset构成。如图11(b)所示(图中p=26,所以图中所示TagRAM的宽度为36,图中TagRAM的深度为1024),Tag存储器的每个单元均有p+10位,其中<p-1:0>位保存的是Tag;<p+5:p>位是根据Tag产生的6位ECC校验码;p+6位是E(Error)位,当Tag被检测出ECC两位错时,该位被置1,当Tag被替换出时,该位清0;p+7位是U(Used)位,为1时表明当前路保存的是最近最少使用的Tag;p+8位是D(Dirty)位,当目录已修改但没被写入主存时,该位置1,当Tag替换出时,该位清0;p+9位是V(Valid)位,当Tag被写入时,该位置1,当Tag被替换出时,该位置0。如图11所示,第s路TagRAM由深度与宽度相同的两个RAM、第一ECC校验模块、第二ECC校验模块、第一多路选择器、第一ECC校验码生成模块构成。第s路TagRAM中的两个RAM分别记为第一TagRAM、第二TagRAM,第一TagRAM为主存储器,第二TagRAM为副本存储器,实现双体热备份技术。第一ECC校验码生成模块与仲裁器、第一TagRAM、第二TagRAM相连,从仲裁器接收请求报文,根据请求报文中的Tag值生成ECC校验码,然后将Tag值和ECC值同时发送给第一TagRAM和第二TagRAM。第一ECC校验码生成模块是基于典型ECC算法实现纠一检二、生成ECC校验码的逻辑模块。ECC是一种常见的纠错编码,Tag阵列和数据阵列中都采用的是典型ECC算法,综合性能与实现复杂度,实现了纠一检二算法。所谓纠一检二是指,如果在原始数据与校验码中有一位发生错误,那么该算法能够自动纠正这一位错;如果在原始数据与校验码中存在两位错,那么该算法可以100%检测出该错误。ECC校验码生成模块中的纠一检二算法生成ECC校验码的方法是:ECC校验码中的每一位都是由原始数据中的某些位进行“异或”逻辑操作生成。图12中Tag为26位,Tag阵列中的第一ECC校验码生成模块根据26位Tag数据产生6位ECC校验码。第一TagRAM、第二TagRAM的写入端口均与第一ECC校验码生成模块相连,第一TagRAM、第二TagRAM的读出端口分别连接到第一ECC校验模块和第二ECC校验模块。第一TagRAM、第二TagRAM同时从第一ECC校验码生成模块接收Tag值和ECC值,当请求报文是写操作时,同时在第一TagRAM、第二TagRAM中相同的区域写入请求报文中的Tag值和ECC,因此第一TagRAM、第二TagRAM保存的数据完全一致。当请求报文为读操作时,根据请求报文中地址域的索引Index,从第一TagRAM、第二TagRAM的相同地址处读出Tag值和ECC值,分别发送给第一ECC校验模块和第二ECC校验模块进行ECC校验。第一ECC校验模块和第二ECC校验模块同时从第一TagRAM、第二TagRAM接收Tag值和ECC值,并进行ECC校验。第一ECC校验模块和第二ECC校验模块完全相同,均是基于典型纠一检二ECC校验算法实现ECC校验的逻辑模块。第一ECC校验模块和第二ECC校验模块校验方法是:先由ECC校验码与原始数据中的某些位通过“异或”操作产生一组纠错码,而后将纠错码按照规则进行“与非”逻辑操作,再与原始数据按位进行“异或”,就产生纠正一位错后的正确数据,同时产生两位错的标识如果出现一位错,执行错误擦除过程,即将纠正错误的数据立即写回到存储器中的读出位置;如果出现两位错,则将该Tag的E位置1。然后第一ECC校验模块和第二ECC校验模块将校验后的Tag分别发送给第一多路选择器。第一多路选择器从第一ECC校验模块、第二ECC校验模块接收Tag,第一多路选择器有一个Tag选择端口,接入tag_sel信号,工作状态下,第一多路选择器的tag_sel信号为0,选择主存储器第一TagRAM中的Tag输出;如果第一TagRAM的ECC校验错总数在一段时限内超过阈值,那么tag_sel信号就变为1,选择副本存储器第二TagRAM中的Tag输出,其中时限和错误数阈值都可以由用户根据具体的芯片运行环境和要求预先设定。最终,第s路TagRAM通过第一多路选择器输出Tag,记为第sTag。第零路TagRAM、第一路TagRAM、…、第s路TagRAM、…、第S-1路TagRAM分别输出第零Tag、第一Tag、…、第sTag、…、第S-1Tag,分别根据Tag的第p+9位(图10中为第35位)即Valid域判断,如果为1,表明该路Tag是有效的,就将读出Tag的<p-1:0>与访问目录地址的Tag域进行比较;如果相等,表示命中该路,那么就将命中路的编号以及地址、操作类型、读ID、写目录等信号发送到数据阵列;同时根据标准LRU算法,更新该Tag的U位。如果S路TagRAM都没有匹配项,即第零路TagRAM、第一路TagRAM、…、第s路TagRAM、…、第S-1路TagRAM都没有命中,表明访问报文失效,此时分为两种情况,一种情况是,如果S路中还有空闲项,即存在至少一路的Valid位是0,那么,若当前请求是从输入队列发出的,则直接将该请求报文发送到失效缓冲器;若当前请求是从Fill缓冲器发出的,则将请求地址中的Tag位,以及产生的6位ECC校验码,存入S路TagRAM的空闲项,作为新的Tag,其中状态位V=1,D=0,U=0,E=0。另一种情况时,S路TagRAM都没有匹配项,并且S路TagRAM中没有空闲项,那么,若当前请求是输入队列发出的,则将该请求报文发送到失效缓冲器;若当前请求是Fill缓冲器发出的,则根据S路TagRAM的Used位,将U=1的Tag项替换出去,同时把该路的编号以及地址、操作类型、读ID、写目录等信号发送到数据阵列,而后将当前请求地址中的Tag位及其ECC校验码存入替换出的那一路,产生新的Tag项。如图10所示,数据阵列采用S路组相联策略,数据阵列也有S路数据RAM组成,记为第零路数据RAM、第一路数据RAM、…、第s路数据RAM、…、第S-1路数据RAM,每路逻辑上由一组深度为DData、宽度为LData的存储器实现,但在具体物理实现时,在具体物理实现时,因为宽度太大的存储器工艺上实现较为困难,所以通常可以将Tag阵列和数据阵列中的存储器拆分成K块较小的存储器实现,如图10中每个1024×624的存储器都由4个深度为1024、宽度为156位的存储器构成。数据阵列中每路存储器的实现与Tag阵列类似,也采用了双体热备份技术;如图11所示,第s路数据RAM由深度与宽度相同的两个RAM、第三ECC校验模块、第四ECC校验模块、第二多路选择器、第二ECC校验码生成模块构成。第s路数据RAM中的两个RAM分别记为第一数据RAM、第二数据RAM,第一数据RAM为主存储器,第二数据RAM为副本存储器,实现双体热备份技术。第二ECC校验码生成模块与Tag阵列、第一数据RAM、第二数据RAM相连,从Tag阵列接收操作类型、地址、路编号、读ID、写目录,根据写目录生成ECC校验码,然后将目录值和ECC值同时发送给第一数据RAM和第二数据RAM。第二ECC校验码生成模块与TagRAM中的第一ECC校验码生成模块完全相同。图12中目录为32位,第二ECC校验码生成模块根据32位目录数据生成7位ECC校验码。第一数据RAM、第二数据RAM的写入端口均与第二ECC校验码生成模块相连,第一数据RAM、第二数据RAM的读出端口分别连接到第三ECC校验模块和第四ECC校验模块。第一数据RAM、第二数据RAM同时从第二ECC校验码生成模块接收目录值和ECC值,当操作类型是写操作时,同时在第一数据RAM、第二数据RAM中相同的区域写入目录值和ECC,因此第一数据RAM、第二数据RAM保存的数据完全一致。当操作类型为读操作时,根据请求报文中地址域的索引Index,从第一数据RAM、第二数据RAM的相同地址处读出目录值,分别发送给第三ECC校验模块和第四ECC校验模块进行ECC校验。第三ECC校验模块和第四ECC校验模块同时对从第一数据RAM、第二数据RAM接收目录值和ECC值,并进行ECC校验。第三ECC校验模块和第四ECC校验模块与Tag阵列中的第一ECC校验模块完全相同。第三ECC校验模块和第四ECC校验模块将校验后的目录分别发送给第二多路选择器。第二多路选择器从第三ECC校验模块、第四ECC校验模块接收目录值,第二多路选择器有一个目录选择端口,接入data_sel信号,工作状态下,第二多路选择器的data_sel信号为0,选择主存储器第一数据RAM中的目录值输出;如果第一数据RAM的ECC校验错总数在一段时限内超过阈值,那么data_sel信号就变为1,选择副本存储器第二数据RAM中的目录值输出,其中时限和错误数阈值都可以由用户根据具体的芯片运行环境和要求预先设定。最终,第s路数据RAM通过第二多路选择器输出目录值,记为第s目录。图12中,数据阵列中数据RAM的每个存储单元,即Cache行的长度为512位,是由16个目录(每个目录32位)构成,那么每32位形成7位的ECC校验码,从低位到高位是一个32位的目录加对应的ECC校验码,依次排列,总共624位,构成数据RAM中的一个存储单元。数据阵列与Tag阵列、输出阵列、Fill缓冲器、写回缓冲器相连。数据阵列的第零路数据RAM、第一路数据RAM、…、第s路数据RAM、…、第S-1路数据RAM分别输出第零目录、第一目录、…、第s目录、…、第S-1目录。数据阵列从Tag阵列接收请求报文、命中路/替换路编号,根据请求报文中操作类型的不同分为下列4种情况处理:●如果是读操作,且Tag命中,则根据命中路编号与访问地址中的索引Index,从数据阵列中读出一个Cache行,而后根据访问地址的偏移Offset,从S个目录中选择出一个目录值,进行ECC校验,最终产生所需的目录,发送到输出队列;●如果是读操作,且Tag未命中,那么表明是替换操作,同样根据Tag阵列发送的替换路编号与地址中的索引,读出一个Cache行,对目录值进行ECC校验,而后将该Cache行发送到写回缓冲器,等待写回缓冲器写入外部主存;●如果是写操作,且Tag命中,首先依据地址中的偏移位域产生写掩码,即根据偏移指定的2*S个数据RAM中的1个,令写掩码的该位置为1,其余(2*S-1)个位置为0,而后结合索引域与命中路编号,将待写入的目录值更新到数据阵列中的目标位置;●如果是写操作,且Tag未命中,那么表明是从Fill缓冲器发出的写请求,根据访问地址中的索引域和空闲路的编号,将从Fill缓冲器接收的目录Cache行,加入ECC校验码,写入到数据阵列中的相应位置,完成目录的更新操作。与现有技术相比,采用本发明可达到以下技术效果:1.通过设计四个目录缓存体DCB、配置寄存器,及其全互连访存交叉开关MAX和目录访问交叉开关DAX,可以灵活配置为两种工作模式,既能性能优先,也能容错性优先。用户通过设置配置寄存器,实现两种工作模式的配置,一种是多个DCB并行操作,容量为多个DCB之和,且多个DCB可以并行访问,因此性能和容量都较高;一种是多个DCB互为备份,容错性较好,避免仅由于1个DCB错误而导致整个目录Cache失效。2.通过设计目录访问旁路模块DAP,防止在恶劣条件例如太空高辐照环境下目录Cache功能完全失效,从而增强了可靠性。由于目录访问旁路是在实现访问目录功能的基础上,逻辑尽可能简洁实用,且不包含存储器,因此它出现软错误的概率较低,从而避免目录Cache体全部失效而导致芯片无法工作。3.通过在目录Cache的重要模块——Tag阵列和数据阵列中的每一路TagRAM和每路数据RAM中设置主存储器、副本存储器,实现存储器双体热备份技术,避免仅由于一块存储器出现错误,就使得整个目录Cache无法工作。对于Tag阵列和数据阵列中的每一块存储器,都实现一个主存储器与一个副本存储器,二者写端口连接相同信号,读端口分别连接到一个多路选择器;当主存储器的错误数超过某个阈值后,就切换到副本存储器工作,从而加强了目录Cache的鲁棒性。4.通过在Tag阵列中加入了第一ECC校验码生成模块、第一ECC校验模块、第二ECC校验模块,在数据阵列中加入了第二ECC校验码生成模块、第三ECC校验模块、第四ECC校验模块,综合性能与实现复杂度等因素,采用了纠一检二的ECC编码,实现了ECC校验和错误擦除,提高了存储数据的容错性。在Tag或目录写入存储器时,加入ECC校验码,与原始数据一并保存;待Tag或目录被读出时,进行ECC校验,如果出现一位错,自动产生纠正后的数据,并且写回到存储器的原始位置,完成错误擦除;如果出现两位错,将错误状态位置1;采用ECC校验和错误擦除技术很好地消除了电路软错误中最常见的一位错。附图说明图1是背景技术中传统目录Cache的逻辑结构;图2(a)是本发明中请求报文以及访问目录地址的逻辑划分,图2(b)是读返回报文的逻辑划分;图3是背景技术中S路Tag阵列的比较结构;图4是本发明容错目录Cache控制器的逻辑结构;图5是本发明容错目录Cache控制器中访存交叉开关MAX的逻辑结构;图6是本发明容错目录Cache控制器的访存交叉开关MAX中写交叉开关WRXbar的逻辑结构;图7是本发明容错目录Cache控制器的访存交叉开关MAX中读交叉开关RDXbar的逻辑结构;图8是本发明容错目录Cache控制器中目录访问旁路DAP的逻辑结构;图9是本发明容错目录Cache控制器中目录缓存体DCB的逻辑结构;图10是本发明容错目录Cache控制器的目录缓存体DCB中Tag阵列与数据阵列的存储结构;图11是本发明容错目录Cache控制器的目录缓存体DCB的Tag阵列中一路存储器的逻辑结构;图12是本发明容错目录Cache控制器的目录缓存体DCB的数据阵列中一路存储器的逻辑结构。具体实施方式下面通过特定的具体实例说明本发明的实施方式。如图4所示,本发明容错目录Cache控制器由4个完全相同的DCB模块、1个目录访问旁路DAP模块、1个目录访问交叉开关DAX模块、1个访存交叉开关MAX模块与1个配置寄存器构成。4个目录缓存体分别记为第零目录缓存体DCB0、第一目录缓存体DCB1、第二目录缓存体DCB2和第三目录缓存体DCB3,4个目录缓存体的内部结构和连接关系完全相同。各个部件之间的连接关系为:目录访问交叉开关DAX与外部接口通过请求报文信号与读返回报文信号连接,与DCB0、DCB1、DCB2、DCB3、DAP通过请求报文信号与读返回报文信号连接,与配置寄存器通过4位的配置位相连;第i目录缓存体DCBi与目录访问交叉开关DAX通过请求报文与读返回报文连接,与访存交叉开关MAX通过请求报文与读返回报文信号连接,与配置寄存器通过4位的配置位相连,i为整数,0≤i≤3;目录访问旁路DAP与目录访问交叉开关DAX通过请求报文与读返回报文连接,与访存交叉开关MAX通过请求报文与读返回报文信号连接,与配置寄存器通过4位的配置位相连;访存交叉开关MAX与外部接口通过请求报文与读返回报文连接,与DCB0、DCB1、DCB2、DCB3、DAP通过请求报文信号与读返回报文信号连接,与配置寄存器通过4位的配置位相连;配置寄存器与目录访问交叉开关DAX、访存交叉开关MAX、DCB0、DCB1、DCB2、DCB3、DAP通过4位的配置位相连。目录访问交叉开关DAX和访存交叉开关MAX的组成与结构相同,仅是连接关系不同。DAX连接外部访问目录的请求源与目录缓存体模块和目录访问旁路DAP;而MAX连接目录缓存体模块与外部的访问主存的部件和目录访问旁路DAP。如图5所示,访存交叉开关MAX包含两部分:写交叉开关(WRXbar)和读交叉开关(RDXbar)。访存交叉开关MAX与外部接口通过请求报文与读返回报文连接,与DCB0、DCB1、DCB2、DCB3、DAP通过请求报文信号与读返回报文信号连接,与配置寄存器通过4位的配置位相连。如图5所示,写交叉开关由4个目录缓存体(DirectoryCacheBank,DCB)主模块、1个目录访问旁路(DirectoryAccessBypass,DAP)主模块和c个存控(MemoryController,MC)从模块构成。4个目录缓存体主模块的功能、结构、连接关系完全相同,分别记为DCB0主模块、DCB1主模块、DCB2主模块和DCB3主模块。c个MC从模块的功能、结构、连接关系完全相同,分别记为MC0从模块、MC1从模块、…、MCj从模块、…、MCc-1从模块。DCBi主模块与DCBi、MC0从模块、…、MCj从模块、…、MCc-1从模块相连。DCBi主模块从DCBi接收请求报文,根据请求报文中地址第[log2n-1:0]位将请求报文发送到相应的MC从模块。如图6所示,DCBi主模块包括2个子模块:第i报文FIFO、第i仲裁请求生成逻辑。第i报文FIFO深度为H,H为正整数,用于缓冲从DCBi接收的DCBi请求报文中的报文,包括操作类型、读ID、访问地址和写目录位域,读指针和写指针标识读出和写入数据的位置,由判满和判空逻辑进行流控。第i仲裁请求逻辑根据报文FIFO非空,发出请求信号到MCj从模块的第jRound-robin仲裁器,当接收到来自第jRound-robin仲裁器的授权信号时,将第i报文FIFO中读指针指示的报文,发往MCj从模块中的第j报文栈存逻辑。第jRound-robin仲裁器采用典型的轮转调度(Round-robin)仲裁策略,其特点是公平、不会出现死锁和“饿死”现象。DAP主模块的内部结构和功能与DCBi主模块完全相同。DAP主模块与目录访问旁路DAP、MC0从模块、…、MCj从模块、…、MCc-1从模块相连。DAP主模块从目录访问旁路DAP接收请求报文,根据请求报文中的地址第[log2n-1:0]位将DAP请求报文发送到相应的MC从模块。MCj从模块与DCB0主模块、DCB1主模块、DCB2主模块、DCB3主模块、DAP主模块和外部存储控制器相连。MCj接收来自DCBi主模块的请求报文,接收来自DAP主模块的请求报文,将请求报文转换为与存储控制器匹配的请求报文,然后发送给外部访存控制器。配置寄存器是一个四位的寄存器,与目录访问交叉开关DAX、访存交叉开关MAX、DCB0、DCB1、DCB2、DCB3、DAP通过4位的配置位相连。通过在配置寄存器中的最低位[0],将MAX的写交叉开关WRXbar可以配置为两种工作模式:当配置位最低位[0]为0时,是5×1工作模式,即5个请求源相互独立,并行工作,此时4个DCB等价于一个容量为4个DCB之和的DCB;当配置位最低位[0]为1时,是1×1工作模式,即仲裁器通过配置寄存器中第[3:1]位选通其中一个DCB,发送数据到从模块,而其他DCB不允许通过,此时对应的工作模式是4个DCB互为备份,发送和接收的都是相同数据;默认配置下,[3:1]位等于0,表示DCB0为主模块,其他DCB为从模块;如果DCB0无法正常工作,那么用户可以通过配置配置寄存器中第[3:1]位等于i,选通DCBi,将DCBi作为主模块。当[3:1]位等于4时,配置为DAP单独工作模式。MCj从模块包括第jRound-robin仲裁器和第j报文栈存逻辑。第jRound-robin仲裁器是一个采用标准的Round-robin仲裁算法实现的硬件逻辑模块,Round-robin仲裁算法是一种典型的公平仲裁策略,反复轮询5个请求源:DCB0请求、DCB1请求、DCB2请求、DCB3请求、DAP请求,当循环到某个请求源时,发现有请求信号到达,那么就向该请求源发送授权信号,而后继续轮询下一个请求源。第j报文栈存逻辑是由n+x+i+1位寄存器构成,接收来自报文FIFO的请求报文,将其寄存一栈后,发送到外部存储控制器。相反地,如图5所示,读交叉开关由4个DCB从模块、1个DAP从模块和c个MC主模块构成。4个DCB从模块的功能、结构、连接关系完全相同,分别记为DCB0从模块、DCB1从模块、DCB2从模块和DCB3从模块。c个MC主模块的功能、结构、连接关系完全相同,分别记为MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块。因此,读交叉开关的主模块包括c个:MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块,其主要功能是根据报文中的读ID,将存储控制器返回的读报文,路由到对应的从模块;从模块包括5个:DCB0从模块、DCB1从模块、DCB2从模块、DCB3从模块和DAP从模块。MCj主模块与DCB0从模块、DCB1从模块、DCB2从模块、DCB3从模块、DAP从模块和外部存储控制器相连。MCj主模块从外部存储控制器接收读返回报文,根据报文中的读ID,将存储控制器返回的读返回报文,发送到对应的从模块。如图7所示,MCj主模块由第j报文FIFO、第j仲裁请求生成逻辑与第j读ID判别逻辑三个子模块组成。第j报文FIFO与DCB0从模块、DCB1从模块、DCB2从模块、DCB3从模块、DAP从模块中的报文栈存逻辑、以及外部存储控制器相连,其实现逻辑与写交叉开关中报文FIFO一样,报文FIFO缓冲来自存储控制器返回的读返回报文,读指针和写指针标识读出和写入数据的位置,由判满和判空逻辑进行流控,当判空逻辑结果为报文FIFO非空时,第j仲裁请求生成逻辑向第iRound-robin仲裁器发送请求信号请求进行仲裁,如果从第iRound-robin仲裁器接收到授权信号,第j报文FIFO的控制逻辑控制将第j报文FIFO中读指针指示的MCj读报文,发往对应DCBi主模块中的第i报文栈存逻辑。第j读ID判别逻辑根据存储控制器返回报文中的读ID,识别所述度报文中的数据当初是由哪个请求源申请的,而后将数据发往对应的从模块。当配置为5×1工作模式时,5个从模块都可以正常接收数据,由第j读ID判别逻辑来分发数据;当配置为1×1工作模式时,只向预先设定的某个从模块发送数据。DCBi从模块与第i目录缓存体DCBi、MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块相连。DCBi从模块从MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块接收读返回报文,然后发送给第i目录缓存体DCBi。如图7所示,DCBi从模块由第iRound-robin仲裁器与第i报文栈存逻辑组成,这两个子模块的逻辑实现与写交叉开关中的Round-robin仲裁器与报文栈存逻辑相同。DAP从模块与的内部结构和功能与DCBi从模块完全相同。DAP从模块与目录访问旁路DAP、MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块相连。DAP主模块从从MC0主模块、MC1主模块、…、MCj主模块、…、MCc-1主模块接收读返回报文,然后发送给目录访问旁路DAP。如图8所示,目录访问旁路DAP模块是一个有限状态机,与目录访问交叉开关DAX通过请求报文与读返回报文连接,与访存交叉开关MAX通过请求报文与读返回报文信号连接,与配置寄存器通过4位的配置位相连。DAP的有限状态机包括IDLE、READ0、READ1、WRITE0、WRITE15个状态,状态之间的转换过程为:●IDLE:DAP初始状态为IDLE,如果DAP检测到有来自目录访问交叉开关DAX的请求报文时,包括操作类型、读ID、地址与写目录位域,将请求报文转换为适合访存接口的请求报文,发送给访存交叉开关MAX,下一状态转换到READ0,然后通过访存交叉开关MAX向存储控制器发出读请求;否则继续在当前IDLE状态循环;●READ0:当请求报文到达时,DAP由IDLE状态转换到READ0状态。READ0状态时,如果存储控制器没有向访存交叉开关MAX返回数据,则DAP没有收到来自MAX的读返回报文,DAP在READ0状态循环,继续等待;直至从MAX接收到读返回报文,包括读ID、读目录位域,DAP根据请求报文中的操作类型域,判断当前是读操作还是写操作,若为读操作,下一状态到达READ1,若为写操作,转换到WRITE0;●READ1:当请求报文是读请求时,有限状态机DAP从READ0状态转换到READ1状态。READ1状态下,DAP根据请求报文中地址域的最低4位,从MAX返回读返回报文的读目录中选择相应的目录,连同读返回报文中的读ID信号,构成读返回报文,发送到DAX模块,转IDLE状态;●WRITE0:当请求报文是写请求时,有限状态机DAP从READ0状态转换到WRITE0状态。WRITE0状态时,DAP根据请求报文中地址域的最低4位,将写请求报文中的目录域覆盖掉MAX返回读返回报文中的读目录中的相应目录,重新构成1个Cache行数据,转WRITE1状态;●WRITE1:WRITE0状态重构数据后转换到WRITE1状态。WRITE1状态时,DAP将操作类型、读ID、访问地址位域,以及新组成的Cache行数据,构成请求报文,发送到MAX,通过存储控制器写入到外部主存中,返回到IDLE。由于DAP实现简单,逻辑较少,并且不包含存储器,因此不易受到电磁辐射的干扰。在DCB出现失效时,DAP能够维持系统正常运转,从而增加了系统的鲁棒性。DAP采用阻塞的方式处理请求报文,即严格按照请求到达的先后顺序,通过先来先服务FCFS的策略,不允许乱序,后面的请求要等待前面的请求完成后,才能被处理。DCB0、DCB1、DCB2、DCB3的结构与连接关系完全相同。DCBi与目录访问交叉开关DAX通过请求报文与读返回报文连接,与访存交叉开关MAX通过请求报文与读返回报文信号连接,与配置寄存器通过4位的配置位相连。DCBi由输入队列、输出队列、仲裁器、Tag阵列、数据阵列、失效缓冲器、写回缓冲器、Fill缓冲器与访存接口模块构成。其中失效缓冲器、写回缓冲器以及Fill缓冲器与背景技术中传统目录Cache结构中的相同。而输入队列与背景技术中传统目录Cache结构中的输入缓冲区相同,输出队列与背景技术中传统目录Cache结构中的输出缓冲区相同。仲裁器、访存接口模块、Tag阵列与数据阵列与背景技术中传统目录Cache结构中的不同。DCBi从配置寄存器接收配置位。4个DCB可通过在配置寄存器中的最低位[0],将4个DCB配置为两种工作模式。当配置位最低位[0]为0时,是5×1工作模式,即5个请求源相互独立,并行工作,此时4个DCB等价于一个容量为4个DCB之和的DCB;当配置位最低位[0]为1时,是1×1工作模式,即仲裁器通过配置寄存器中第[3:1]位选通其中一个DCB,发送数据到从模块,而其他DCB不允许通过,此时对应的工作模式是4个DCB互为备份,发送和接收的都是相同数据,4个DCB保存相同的数据,利用冗余硬件进行热备份,适应实际应用中不同的需求与容错级别;默认配置下,[3:1]位等于0,表示DCB0为主模块,其他DCB为从模块;如果DCB0无法正常工作,那么用户可以通过配置配置寄存器中第[3:1]位等于i,选通DCBi,将DCBi作为主模块。当[3:1]位等于4时,配置为DAP单独工作模式。如果4个DCB中的存储体都由于电磁辐射出现不可恢复的错误,导致4个DCB无法正常工作,就通过目录访问旁路模块DAP进行读写目录操作。由于DAP内部没有设计大容量存储器,虽然访问目录的性能有所下降,但不易被电磁辐射干扰,提高了可靠性。输入阵列的结构和背景技术中传统目录Cache结构中的输入缓冲区相同。输入阵列与目录访问交叉开关DAX和仲裁器相连,从DAX接收请求报文并存入输入阵列中,而后依序发往仲裁器。同时FIFO写指针从0开始,依次累加1,FIFO计数器也加1。此时FIFO队列非空,输入阵列中的FIFO读取逻辑开始工作,读取逻辑从读指针所标识的位置读出一个数据,同时读指针也从0开始,依次加1,而发生一次读操作,FIFO计数器减1。当FIFO计数器的值即将达到FIFO的深度,即FIFO所能保存报文的最大个数时,向DAX发出满信号,通知DAX停止发送访问请求,避免出现FIFO上溢现象,导致丢失报文;当FIFO计数器减到0时,标识FIFO队列当前为空,读取逻辑停止工作,避免出现FIFO下溢现象,发出错误报文。仲裁器与输入队列、Tag阵列、失效缓冲器、Fill缓冲器相连,接收来自输入队列、失效缓冲器、Fill缓冲器的请求报文,采用优先级的仲裁策略对来自输入队列、失效缓冲器、Fill缓冲器的请求报文进行仲裁,将仲裁出的请求报文发送到Tag阵列。仲裁器采用优先级的仲裁策略如下:来自Fill缓冲器请求报文的优先级最高,其次是来自失效缓冲器的请求报文,最后是来自输入队列的请求报文。失效缓冲器的结构和背景技术中传统目录Cache结构中的失效缓冲器相同。失效缓冲器与Tag阵列、仲裁器相连,从Tag阵列接收并保存失效请求报文,并将请求报文发送至仲裁器。Fill缓冲器的结构和背景技术中传统目录Cache结构中的Fill缓冲器相同。Fill缓冲器与数据阵列、写回缓冲器和访存接口模块相连。Fill缓冲器从写回缓冲器接收地址信号与读ID信号,并存入其关联存储器CAM中的同一行,它可以根据读ID的内容匹配出对应的地址。Fill缓冲器从访存接口模块接收读返回报文,根据Fill缓冲器中FIFO的写指针指示的位置,将读返回报文中的读目录保存到FIFO队列中,同时FIFO的写指针累加1,FIFO计数器也加1,其中FIFO写指针和计数器都是从0开始计数,当FIFO计数器增加至FIFO的深度时,表示FIFO已被写满,发出满信号,通知访存接口模块停止发送读返回报文,避免出现上溢。与此同时,根据读返回报文中读ID的内容从CAM中匹配对应的地址。当Fill缓冲器在CAM中匹配并读出地址信号时,根据FIFO读指针指示的位置,从FIFO队列中读出读目录信号,连同匹配出的地址信号,一起发送到数据阵列;同时FIFO读指针加1,读指针也是从0开始累加,与此同时FIFO计数器减1,当计数器减到0时,表明FIFO已空,停止读操作,避免出现下溢。写回缓冲器是保存请求报文的缓冲器,其结构和背景技术中传统目录Cache结构中的写回缓冲器相同。写回缓冲器与数据阵列、Fill缓冲器、访存接口模块相连。写回缓冲器从数据阵列接收请求报文,然后,根据FIFO写指针指示的位置,将请求报文保存到FIFO队列,而后FIFO写指针加1,FIFO计数器也加1;由于读请求不带数据载荷,因此写目录位域无效。当请求报文FIFO计数器不为0时,表明FIFO中有请求未发出,那么根据读指针指示的位置,从FIFO队列中读出相应的请求,包括操作类型、地址、读ID与写目录等位域,FIFO读指针加1,FIFO计数器减1。然后根据操作类型位域判断当前报文为写操作还是读操作,若是写操作,则将地址和写目录同时发往访存接口模块,读ID域无效;如果是读操作,则仅将地址和读ID信号发送到访存接口模块,写目录域无效,同时,把报文中的地址与读ID域发送至Fill缓冲器。访存接口模块与访存交叉开关MAX、Fill缓冲器、写回缓冲器相连,主要完成接口信号转换的工作,当接收到来自写回缓冲器的请求报文时,将请求报文转换成访存接口匹配的请求报文,发送到访存交叉开关MAX;当接收到访存交叉开关发出的读返回报文时,将读返回报文转换为与Fill缓冲器匹配的读返回报文,发送到Fill缓冲器。由于Tag阵列和数据阵列中包含大量的存储器,相对其他模块讲,这两个模块最易受到电磁辐射的干扰而导致功能失效,因此最要对它们进行容错保护。本发明采用四种容错技术对Tag阵列和数据阵列进行保护。一是多层次纠错编码(ErrorCorrectingCode,ECC)校验,综合性能、功耗和设计复杂度等因素,采用了纠一检二ECC码;二是Tag存储体和数据存储体采用了双体热备份技术,每一个存储器都有一份副本,同时写入相同数据,从主存储器读出时判错,如果在一段预设的时间内错误总数超过阈值,那么就启用副本存储器;三是错误擦除技术,当Tag和目录被读出时进行ECC校验,如果发现一位错,通过回写操作,将纠正后的数据覆盖掉存储器中原位置的错误数据;四是错误巡检技术,以一定的时间间隔,主动逐个读取所有Tag或数据存储器,并针对一位错误发起回写,将纠正后的正确Tag或数据写入存储器。通过这些容错技术,保证了Tag阵列和数据阵列的鲁棒性。下面结合Tag阵列和数据阵列的结构介绍这四种容错技术的具体实现方式。本实施例容错目录Cache采用S路组相联、写回方式和LRU替换算法。如图10所示,本实施例Tag阵列由S路TagRAM组成。每路TagRAM分别对应一组深度为1024、宽度为36的存储器;类似地,数据阵列也有S路数据RAM组成,每路逻辑上由一组深度为1024、宽度为624的存储器实现。本实施例访问地址域共包含40位,从高位到低位依次是由26位的标记Tag、10位的索引Index、4位的偏移Offset构成,所以本实施例TagRAM的宽度为36,深度为1024。如图11(b)所示,Tag存储器的每个单元均有36位,其中<25:0>位保存的是Tag;<31:26>位是根据Tag产生的6位ECC校验码;32位是E(Error)位,当Tag被检测出ECC两位错时,该位被置1,当Tag被替换出时,该位清0;33位是U(Used)位,为1时表明当前路保存的是最近最少使用的Tag;34位是D(Dirty)位,当目录已修改但没被写入主存时,该位置1,当Tag替换出时,该位清0;35位是V(Valid)位,当Tag被写入时,该位置1,当Tag被替换出时,该位置0。如图11所示,第s路TagRAM由深度与宽度相同的两个RAM、第一ECC校验模块、第二ECC校验模块、第一多路选择器、第一ECC校验码生成模块构成。第s路TagRAM中的两个RAM分别记为第一TagRAM、第二TagRAM,第一TagRAM为主存储器,第二TagRAM为副本存储器,实现双体热备份技术。第一ECC校验码生成模块与仲裁器、第一TagRAM、第二TagRAM相连,从仲裁器接收请求报文,根据请求报文中的Tag值生成ECC校验码,然后将Tag值和ECC值同时发送给第一TagRAM和第二TagRAM。第一ECC校验码生成模块是基于典型ECC算法实现纠一检二、生成ECC校验码的逻辑模块。ECC是一种常见的纠错编码,Tag阵列和数据阵列中都采用的是典型ECC算法,综合性能与实现复杂度,实现了纠一检二算法。所谓纠一检二是指,如果在原始数据与校验码中有一位发生错误,那么该算法能够自动纠正这一位错;如果在原始数据与校验码中存在两位错,那么该算法可以100%检测出该错误。ECC校验码生成模块中的纠一检二算法生成ECC校验码的方法是:ECC校验码中的每一位都是由原始数据中的某些位进行“异或”逻辑操作生成。本色实施例中Tag为26位,Tag阵列中的第一ECC校验码生成模块根据26位Tag数据产生6位ECC校验码。第一TagRAM、第二TagRAM的写入端口均与第一ECC校验码生成模块相连,第一TagRAM、第二TagRAM的读出端口分别连接到第一ECC校验模块和第二ECC校验模块。第一TagRAM、第二TagRAM同时从第一ECC校验码生成模块接收Tag值和ECC值,当请求报文是写操作时,同时在第一TagRAM、第二TagRAM中相同的区域写入请求报文中的Tag值和ECC,因此第一TagRAM、第二TagRAM保存的数据完全一致。当请求报文为读操作时,根据请求报文中地址域的索引Index,从第一TagRAM、第二TagRAM的相同地址处读出Tag值和ECC值,分别发送给第一ECC校验模块和第二ECC校验模块进行ECC校验。第一ECC校验模块和第二ECC校验模块同时从第一TagRAM、第二TagRAM接收Tag值和ECC值,并进行ECC校验。第一ECC校验模块和第二ECC校验模块完全相同,均是基于典型纠一检二ECC校验算法实现ECC校验的逻辑模块。第一ECC校验模块和第二ECC校验模块校验方法是:先由ECC校验码与原始数据中的某些位通过“异或”操作产生一组纠错码,而后将纠错码按照规则进行“与非”逻辑操作,再与原始数据按位进行“异或”,就产生纠正一位错后的正确数据,同时产生两位错的标识如果出现一位错,执行错误擦除过程,即将纠正错误的数据立即写回到存储器中的读出位置;如果出现两位错,则将该Tag的E位置1。然后第一ECC校验模块和第二ECC校验模块将校验后的Tag分别发送给第一多路选择器。第一多路选择器从第一ECC校验模块、第二ECC校验模块接收Tag,第一多路选择器有一个Tag选择端口,接入tag_sel信号,工作状态下,第一多路选择器的tag_sel信号为0,选择主存储器第一TagRAM中的Tag输出;如果第一TagRAM的ECC校验错总数在一段时限内超过阈值,那么tag_sel信号就变为1,选择副本存储器第二TagRAM中的Tag输出,其中时限和错误数阈值都可以由用户根据具体的芯片运行环境和要求预先设定。最终,第s路TagRAM通过第一多路选择器输出Tag,记为第sTag。第零路TagRAM、第一路TagRAM、…、第s路TagRAM、…、第S-1路TagRAM分别输出第零Tag、第一Tag、…、第sTag、…、第S-1Tag,分别根据Tag的第p+9位(图10中为第35位)即Valid域判断,如果为1,表明该路Tag是有效的,就将读出Tag的<p-1:0>与访问目录地址的Tag域进行比较;如果相等,表示命中该路,那么就将命中路的编号以及地址、操作类型、读ID、写目录等信号发送到数据阵列;同时根据标准LRU算法,更新该Tag的U位。如果S路TagRAM都没有匹配项,即第零路TagRAM、第一路TagRAM、…、第s路TagRAM、…、第S-1路TagRAM都没有命中,表明访问报文失效,此时分为两种情况,一种情况是,如果S路中还有空闲项,即存在至少一路的Valid位是0,那么,若当前请求是从输入队列发出的,则直接将该请求报文发送到失效缓冲器;若当前请求是从Fill缓冲器发出的,则将请求地址中的Tag位,以及产生的6位ECC校验码,存入S路TagRAM的空闲项,作为新的Tag,其中状态位V=1,D=0,U=0,E=0。另一种情况时,S路TagRAM都没有匹配项,并且S路TagRAM中没有空闲项,那么,若当前请求是输入队列发出的,则将该请求报文发送到失效缓冲器;若当前请求是Fill缓冲器发出的,则根据S路TagRAM的Used位,将U=1的Tag项替换出去,同时把该路的编号以及地址、操作类型、读ID、写目录等信号发送到数据阵列,而后将当前请求地址中的Tag位及其ECC校验码存入替换出的那一路,产生新的Tag项。如图10所示,数据阵列采用S路组相联策略,数据阵列也有S路数据RAM组成,记为第零路数据RAM、第一路数据RAM、…、第s路数据RAM、…、第S-1路数据RAM,每路逻辑上由一组深度为1024、宽度为624的存储器实现,但在具体物理实现时,在具体物理实现时,因为宽度太大的存储器工艺上实现较为困难,所以通常可以将Tag阵列和数据阵列中的存储器拆分成K块较小的存储器实现,如图10中每个1024×624的存储器都由4个深度为1024、宽度为156位的存储器构成。数据阵列中每路存储器的实现与Tag阵列类似,也采用了双体热备份技术;如图11所示,第s路数据RAM由深度与宽度相同的两个RAM、第三ECC校验模块、第四ECC校验模块、第二多路选择器、第二ECC校验码生成模块构成。第s路数据RAM中的两个RAM分别记为第一数据RAM、第二数据RAM,第一数据RAM为主存储器,第二数据RAM为副本存储器,实现双体热备份技术。第二ECC校验码生成模块与Tag阵列、第一数据RAM、第二数据RAM相连,从Tag阵列接收操作类型、地址、路编号、读ID、写目录,根据写目录生成ECC校验码,然后将目录值和ECC值同时发送给第一数据RAM和第二数据RAM。第二ECC校验码生成模块与TagRAM中的第一ECC校验码生成模块完全相同。本实施例中目录为32位,第二ECC校验码生成模块根据32位目录数据生成7位ECC校验码。第一数据RAM、第二数据RAM的写入端口均与第二ECC校验码生成模块相连,第一数据RAM、第二数据RAM的读出端口分别连接到第三ECC校验模块和第四ECC校验模块。第一数据RAM、第二数据RAM同时从第二ECC校验码生成模块接收目录值和ECC值,当操作类型是写操作时,同时在第一数据RAM、第二数据RAM中相同的区域写入目录值和ECC,因此第一数据RAM、第二数据RAM保存的数据完全一致。当操作类型为读操作时,根据请求报文中地址域的索引Index,从第一数据RAM、第二数据RAM的相同地址处读出目录值,分别发送给第三ECC校验模块和第四ECC校验模块进行ECC校验。第三ECC校验模块和第四ECC校验模块同时对从第一数据RAM、第二数据RAM接收目录值和ECC值,并进行ECC校验。第三ECC校验模块和第四ECC校验模块与Tag阵列中的第一ECC校验模块完全相同。第三ECC校验模块和第四ECC校验模块将校验后的目录分别发送给第二多路选择器。第二多路选择器从第三ECC校验模块、第四ECC校验模块接收目录值,第二多路选择器有一个目录选择端口,接入data_sel信号,工作状态下,第二多路选择器的data_sel信号为0,选择主存储器第一数据RAM中的目录值输出;如果第一数据RAM的ECC校验错总数在一段时限内超过阈值,那么data_sel信号就变为1,选择副本存储器第二数据RAM中的目录值输出,其中时限和错误数阈值都可以由用户根据具体的芯片运行环境和要求预先设定。最终,第s路数据RAM通过第二多路选择器输出目录值,记为第s目录。如图12所示,本实施例中,数据阵列中数据RAM的每个存储单元,即Cache行的长度为512位,是由16个目录(32位)构成,那么每32位形成7位的ECC校验码,从低位到高位是一个32位的目录加对应的ECC校验码,依次排列,总共624位,构成数据RAM中的一个存储单元。数据阵列与Tag阵列、输出阵列、Fill缓冲器、写回缓冲器相连。数据阵列的第零路数据RAM、第一路数据RAM、…、第s路数据RAM、…、第S-1路数据RAM分别输出第零目录、第一目录、…、第s目录、…、第S-1目录。数据阵列从Tag阵列接收请求报文、命中路/替换路编号,根据请求报文中操作类型的不同分为下列4种情况处理:●如果是读操作,且Tag命中,则根据命中路编号与访问地址中的索引Index,从数据阵列中读出一个Cache行,而后根据访问地址的偏移Offset,从S个目录中选择出一个目录值,进行ECC校验,最终产生所需的目录,发送到输出队列;●如果是读操作,且Tag未命中,那么表明是替换操作,同样根据Tag阵列发送的替换路编号与地址中的索引,读出一个Cache行,对目录值进行ECC校验,而后将该Cache行发送到写回缓冲器,等待写回缓冲器写入外部主存;●如果是写操作,且Tag命中,首先依据地址中的偏移位域产生写掩码,即根据偏移指定的2*S个数据RAM中的1个,令写掩码的该位置为1,其余(2*S-1)个位置为0,而后结合索引域与命中路编号,将待写入的目录值更新到数据阵列中的目标位置;●如果是写操作,且Tag未命中,那么表明是从Fill缓冲器发出的写请求,根据访问地址中的索引域和空闲路的编号,将从Fill缓冲器接收的目录Cache行,加入ECC校验码,写入到数据阵列中的相应位置,完成目录的更新操作。以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1