高可靠系统芯片中Cache的容错结构及其容错方法
【技术领域】
[0001]本发明涉及高可靠系统芯片中Cache的容错设计,具体为高可靠系统芯片中Cache的容错结构及其容错方法。
【背景技术】
[0002]随着集成电路制造工艺的不断进步,系统芯片(SoC)变得越来越复杂,其功能也越来越强大。但是在在针对空间电离环境的应用中,这也导致粒子辐射、噪声干扰等因素所导致的非物理性瞬态故障(软错误)日益突出,逐渐成为了空间应用芯片失效的主要原因。在系统芯片中,Cache作为主控处理器访问指令和数据的高速缓存,占据了片上大部分的存储器资源,它在提供高性能的同时,也为整个系统的可靠性带来了很大隐患。由于Cache对瞬态故障非常敏感,因此对它进行容错保护至关重要。
[0003]目前,针对Cache存储部件的容错保护普遍采用基于ECC的信息冗余技术,它按照某种校验算法对原始数据进行编码,从而生成额外的辅助信息,并将这些信息也保存起来;当要读取原始数据时,通过这些辅助信息来判断所读取的数据是否发生了错误,如果有错误还要能够进行纠正。这种ECC保护技术需要花费很大的硬件资源,例如对于每个32位的数据,为了实现纠一检二的容错能力,按照BCH算法则至少需要7位的辅助信息,当实现纠二检四的容错能力时,则需要多达18位的辅助信息,由于辅助信息本身也保存在存储器中,也会发生错误,因此它占的资源越多,对可靠性的负面影响也就越大。另外,ECC机制需要同时进行检错和纠错处理,控制复杂度相对较高,带来的延迟和功耗开销都比较大。
[0004]另一种结构级的容错技术(参见文献《面向尚效能容错Cache设计的精确有效的AVF预测研究》,计算机科学与技术学报,2011,26(3) =504-519)则对传统的ECC保护技术进行了改进,它基于体系结构脆弱因子(Architectural Vulnerability Factor, AVF)的实时预测,通过与可靠性判断阈值进行比较,从而动态选择是否对Cache进行ECC保护。该技术能够在满足可靠性要求的前提下有效降低ECC保护带来的功耗和性能开销,但是要实现对AVF的快速、有效的预测,也并不是一件容易的事情。
[0005]还有一种最简单最保守的方法就是在对可靠性要求比较高时,直接关闭Cache,因此不管Cache存储器是否发生错误,处理器都不使用它的指令和数据,而是直接访问外部存储器。虽然这种做法可以完全避免因Cache错误而导致的芯片失效问题,但是它从根本上否定了 Cache存在的意义,使得处理器的执行性能大打折扣,这并不是一种有效的容错手段,通常都不会采用。
[0006]由此可见,在实现高可靠的系统芯片时,针对Cache的容错技术要么消耗了太多的硬件资源、要么设计难度太大、或者是严重影响了处理器的执行性能。如何能简单有效的进行Cache的容错,并在可靠性、辅助开销以及性能上都达到平衡,则成为了系统芯片设计者们所要解决的一个重要问题,经检索相关文献和专利,尚未发现有解决该问题的方法。
【发明内容】
[0007]针对现有技术中存在的问题,本发明提供一种可靠性高,功耗低,复杂度低,能确保处理器保持较高性能的高可靠系统芯片中Cache的容错结构及其容错方法。
[0008]本发明是通过以下技术方案来实现:
[0009]高可靠系统芯片中Cache的容错方法,当系统芯片中的主控处理器访问Cache存储器,请求所需的指令或数据时,Cache存储器中的信息将以交叉分组的形式进行奇偶校验解码,实现Cache存储器的容错;若发现校验错误,则直接将本次访问当作缺失处理,Cache进行更新操作,按照LRU策略向Cache存储器重新写入正确数据,并对写入数据进行交叉分组形式的奇偶校验编码,实现Cache存储器的容错;若未发现校验错误,认为Cache存储器中的信息正确,据此进行命中判断操作。
[0010]优选的,Cache存储器为采用N路组相联映射的方式,其中每路Cache存储器中的TAG存储器和DATA存储器都分别对应有自己的校验编码存储阵列PTAG和PDATA ;以交叉分组的形式分别对Cache存储器中TAG阵列和DATA阵列的奇偶校验编码。
[0011]进一步,当系统芯片中在进行Cache存储器访问时,分如下两个步骤来完成Cache的命中判断,
[0012]步骤一,对读出的每路Cache存储器中的TAG存储器和DATA存储器内的TAG值和DATA值进行奇偶校验,当任何一路的TAG值或者DATA值出现校验错误,则表示本次访问没有命中,并将所要请求的Cache数据做缺失处理;当所有路中的TAG值和DATA值都校验正确时,执行步骤二 ;
[0013]步骤二,进行TAG的比较;如果只有一路的TAG产生匹配,则本次访问属于正常情况下的Cache命中;如果出现多个TAG匹配或所有TAG都未发生匹配,则表示本次访问没有命中,并将所要请求的Cache数据做缺失处理。
[0014]高可靠系统芯片中Cache的容错结构,包括对Cache存储器中每一路中的TAG值和校验编码存储阵列PTAG进行校验的TAG校验逻辑模块,对DATA值和校验编码存储阵列PDATA进行校验的DATA校验逻辑模块,对TAG校验逻辑模块和DATA校验逻辑模块的输出值进行或逻辑处理的一级或门,对所有的一级或门输出结果进行或逻辑处理的二级或门,对每一路中的TAG值与当前的Cache访问地址ADDR进行比较的比较逻辑模块,对所有比较逻辑模块输出的比较信号进行确定TAG匹配个数操作的匹配数目检测逻辑模块,对二级或门输出结果与匹配数目检测逻辑模块输出结果进行逻辑与处理的与门;与门输出Cache访问命中或缺失信号hit。
[0015]优选的,当仅存在一个TAG匹配,则匹配数目检测逻辑模块生成缺失的omatch信号,若存在两个及两个以上TAG匹配或不存在TAG匹配,omatch信号无效。
[0016]与现有技术相比,本发明具有以下有益的技术效果:
[0017]本发明针对高可靠应用需求的系统芯片,实现了一种简单有效的Cache容错结构及其容错方法,所达到的效果如下:
[0018](1)采用只检错不纠错的容错策略,极大的降低了系统设计的复杂度及其逻辑延迟,避免已经处于处理器关键路径上的Cache在增加容错结构后对处理器的主频造成更大影响。
[0019](2)容错机制所需的辅助编码位宽明显减少,传统的ECC技术在实现32位数据的纠一检二和纠二检四功能时分别需要7位和18位的编码,但本发明采用奇偶校验检错算法则只需4位编码,这使得片上辅助存储资源分别减少了 43%和78%,同时,它也在很大程度上降低了系统功耗。
[0020](3)奇偶校验算法采用交叉分组的组织形式,使得连续的四位数据错误都能够被检测出来,从而大幅度提升了系统的容错能力。这一点对如今的深亚微米工艺设计尤为重要,因为随着工艺尺寸的不断缩小,单个粒子辐射所导致连续多位数据出错的概率随之增加,采用交叉分组的校验方式可靠性更高。
[0021](4)系统的整体执行性能并没有多大影响,由于Cache只是在偶发的校验错误或者出现多个TAG匹配的情况下才不可信,当成缺失来处理,其它绝大部分时间都能正常的高速缓存指令和数据,因此它不会带来明显的性能损失。
[0022](5)针对Cache校验出错或者发生多个TAG匹配的特殊情况,通过统一的Cache行刷新操作就可以消除这些不可信的指令或者数据所带来的负面影响,而且刷新操作实施起来也非常方便。
【附图说明】
[0023]图1为本发明实例中所述的系统芯片中Cache的容错方法的逻辑框图。
[0024]图2a为本发明实例中所述的Cache存储器的写入结构示意图;图2b为本发明实例中所述的Cache存储器的读出结构示意图。
[0025]图3为本发明实例中所述的交叉分组编码算法示意图。
[0026]图4为本发明实例中所述的Cache命中判断逻辑结构示意图。
【具体实施方式】
[0027]下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。
[0028]本发明通过一种简单的奇偶交叉编码校验算法来减少额外的辅助信息,从而降低硬件资源和功耗开销;采用对Cache只检错不纠错的容错策略、并配合交叉分组的编码思想可以保证整个系统的可靠性,同时也能在很大程度上降低设计的复杂度;由于Cache存储器仍然能对指令和数据进行高速缓存,只是在校验出错时才按照缺失来处理,因此系统的总体执行性能并没有明显的损失。在系统芯片设计中,实现了一种高可靠的Cache容错结构,同时又不引入明显的硬件资源、功耗开销、设计复杂度以及处理器的性能损失。
[0029]本发明采用对Cache只检错不纠错的容错策略。由于Cache只是作为整个系统芯片中指令和数据的中间缓存,即使检测出Cache存储器发生错误,也无需进行纠正,因为处理器可以向最终的外部存储器去请求所需的指令或数据,毕竟外部存储器才是真正的存储源头,它通过检错和纠错机制已经保证了所有存储内容的正确性。
[0030]同时,以交叉分组的形式分别实现Cache存储器中TAG阵列和DATA阵列的奇偶校验编码。所谓交叉分组,就是将原始的数据分成若干组,依次从每组中选择一位来进行编码,例如,针对32位的数据D [31:0],如果每八位进行一次奇偶校验,那么就将数据分成八组 D [31:28]、D [27:24]、D [23:20]、D [19:16]、D [15:12]D [11:8]、D [7:4]、D [3:0],每组中对应位置的数据组合在一起进行奇偶校验,本优选实例中以偶校验来表示,从而得到4位的校验元P [3:0]分别为,
[0031]P[3] = D[31] ~D[27] ~D[23] ~D[19] ~D[15] ~D[11] ~D[7] ~D[3]
[0032]P[2] = D[30] ~D[26] ~D[22] ~D[18] ~D[14] ~D[10] ~D[6] ~D[2]
[0033]P[l] = D[29] ~D[25] ~D[21] ~D[17] ~D[13] ~D[9] ~D[5] ~D[1]
[0034]P [0] = D [28] 'D [24] 'D [20] ~D [16] ~D [12] 'D [8] 'D [4] 'D [0]
[0035]按照这种编码规则,针对TAG阵列和DATA阵列所生成的校验元编码信息则分别存储在一个