发明内容
(一)要解决的技术问题
现有存储器内建自修复技术修复后的存储器在工作过程中需要将访问地址与故障地址列表中的故障地址依次比较,以判断访问地址是否为故障地址。这种全搜索式的地址比较效率较低,故障数较多时需要消耗大量的时钟周期才能判断出访问地址是否为故障地址,使得修复后存储器性能恶化到不可接受的地步,无法真正修复故障数较多的存储器。为了解决上述问题,本发明提出了一种基于哈希表的存储器内建自修复系统及方法。
(二)技术方案
为达到上述目的,本发明提供了一种基于哈希表的存储器内建自修复系统,该系统包括内建自修复BIST模块和内建冗余分析BIRA模块,其中:BIST模块,用于对存储器进行测试,将检测到的故障地址暂存在BIST模块中,并向BIRA模块输出故障地址;BIRA模块,用于判断访问地址是否为故障地址,并为故障地址分配冗余资源,进行故障地址重映射,从而完成对存储器的修复。
上述方案中,所述BIST模块检测出的故障地址以哈希表形式暂存在BIST模块中。
上述方案中,所述BIRA模块包括哈希函数逻辑电路、故障地址哈希表、比较逻辑电路、冗余存储区及数据通道选择器,其中哈希函数逻辑的输出作为故障地址哈希表的地址信号,故障地址哈希表的输出和访问地址共同作为比较逻辑的输入,比较逻辑的输出作为冗余存储区的使能信号和数据通道选择器的控制信号,冗余存储区的数据端与数据通道选择器的一个通道相连。
上述方案中,所述哈希函数逻辑电路采用多哈希函数的设计,该多哈希函数中的基本哈希函数为:HA=H(A)=Ar^Ac,其中A表示主存储区的存储单元地址,Ar和Ac分别为A的行地址和列地址部分,HA为A的哈希地址,符号^表示按位异或运算。
上述方案中,所述比较逻辑电路的输出作为冗余存储区的使能信号和数据通道选择器的选择信号,当比较逻辑电路的输出为高电平时冗余存储区有效,选通冗余存储区与IO的数据通道;当比较逻辑电路的输出为低电平时冗余存储区无效,选通主存储区与IO的数据通道。
上述方案中,所述冗余存储区共享故障地址哈希表的哈希地址作为重映射地址,无需现有存储器内建自修复系统存储重映射地址的电路结构。
上述方案中,所述BIRA模块与存储器中的主存储区并行工作,BIRA模块能够在一个时钟周期内完成冗余分析,修复后存储器性能不受任何不利影响。
为达到上述目的,本发明还提供了一种基于哈希表的存储器内建自修复方法,该方法包含测试、修复流程及正常工作流程,其中:
测试/修复流程,包括:
步骤1:存储器上电后,首先启动BIST模块对存储器进行测试,将检测到的故障地址暂存在BIST模块中;
步骤2:选通第一个哈希函数;
步骤3:初始化故障地址哈希表,使初始存入数据的哈希地址与实际存储地址不等,以此表示哈希表为空;
步骤4:将故障地址依次存入哈希表,如果存入过程中无冲突发生,则测试/修复完成,存储器进入正常工作模式;如果存入过程中发生冲突,则选通下一个哈希函数并循环执行步骤3和4;
步骤5:如果所有哈希函数下均发生冲突,该存储器不可修复,存储器内建自修复电路给出不可修复信号;
正常工作流程,包括:
步骤10:经哈希函数逻辑计算出访问地址A的哈希地址HA,读取哈希表中地址HA处的数据FA;
步骤20:比较A和FA是否相等,比较结果作为冗余存储区的使能信号和数据通道选择信号;
步骤30:如果A≠FA,说明访问地址A无故障,则将冗余存储区置为无效状态,同时选通主存储区与IO间的数据通道;
步骤40:如果A=FA,说明访问地址A为故障地址,则将冗余存储区置为有效状态,HA作为故障地址A在冗余存储区的重映射地址,同时选通冗余存储区与IO间的数据通道,故障地址得以修复。
(三)有益效果
从上述的技术方案可以看出,本发明的有益效果在于:
1、利用本发明提供的存储器内建自修复系统及自修复方法,经修复的存储器工作过程中可以根据访问地址的哈希地址,直接定位比较对象在哈希表中的位置并进行地址比较,整个过程仅需一次哈希表访问与地址比较,该特性不受存储器故障数多少的影响,对修复后存储器性能没有任何不利影响。从根本上解决了传统存储器内建自修复方法全搜索地址比较效率低,无法真正修复多故障存储器的缺点。
2、本发明提出的基于哈希表的存储器内建自修复系统及自修复方法,存储器故障地址以哈希表形式存储,冗余分析过程中可根据访问地址的哈希地址,直接定位比较对象在哈希表中的位置,只做一次地址比较即可,从根本上避免了传统方法中耗时的全搜索地址比较,大大提高了冗余分析效率,保证了经修复后存储器性能不受任何不利影响。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
本发明的核心思想是:故障地址基于哈希表形式进行存储,存储器工作过程中根据访问地址的哈希地址,直接定位比较对象在哈希表中的位置并进行地址比较,如果比较结果不等,说明访问地址无故障,令冗余存储区无效,选通主存储区的数据通道;如果比较结果相等,说明访问地址为故障地址,则令冗余存储区有效,将访问地址重映射至冗余存储区,同时选通冗余存储区的数据通道,从而完成对该故障地址的修复。
图1所示为基于哈希表的存储器内建自修复系统的总体框图,该系统包括BIST模块和BIRA模块。BIST模块的主要功能是对存储器进行测试,将检测到的故障地址暂存在BIST模块中,并向BIRA模块输出故障地址。BIRA模块的功能是判断访问地址是否为故障地址,并为故障地址分配冗余资源,进行故障地址重映射,从而完成对存储器的修复。
BIST模块测试算法采用March2算法,算法描述如下:{↑(w0),↑(r0,w1,r1),↑(r1,w0,r0),↓(r0,w1,r1),↓(r1,w0,r0),↓(r0)}。其中,↑表示对存储器地址进行顺序操作,↓表示对其进行逆序操作。该算法可有效检测到固定故障、跳变故障和耦合故障等,是一种比较完备的March算法。存储器上电后首先启动BIST模块对主存储区进行自测试,并将测试结果暂存在BIST模块中。
虚线框标注的BIRA模块是本发明的核心部分,包括哈希函数逻辑电路、故障地址哈希表、比较逻辑电路、冗余存储区及数据通道选择器。BIRA模块内冗余资源的组织,故障地址的存储,哈希函数设计以及故障地址重映射机制是本发明的关键,下面分别进行详述。
冗余资源的组织:本发明冗余资源的组织采用细颗粒度的冗余字策略。设存储器地址线宽为w=r+c,其中r为行地址线宽,c为列地址线宽,存储器大小为N=2w。令m=max{r,c},则取冗余资源大小为Ns=2m。按照此原则设定冗余资源大小可使本发明具备传统冗余字策略存储器内建自修复技术不具备的对单个行/列故障的修复能力。
故障地址的哈希表存储:存储器内建自修复系统需要对BIST模块检测出的故障地址进行存储,以便冗余分析过程中访问地址与之进行比较,本发明故障地址的存储基于哈希表形式。哈希表存储的特征在于数据在表中的存储地址与数据内容之间存在特定的映射关系,称之为哈希函数,表示为h=H(k),其中k为数据内容,h称为k的哈希地址,即数据k在表中的存储地址。哈希表存储可以快速定位搜索对象在表中的地址,而不需要对存储列表做耗时的全搜索。以哈希表形式存储故障地址,冗余分析过程中可根据访问地址的哈希地址,直接定位比较对象在哈希表中的位置,只做一次地址比较即可,从根本上避免了传统方法中耗时的全搜索地址比较,大大提高了BIRA模块的工作效率,且该特性不受故障数多少的影响。
哈希函数设计及修复率推导:哈希函数是哈希表存储的关键,本发明哈希函数逻辑以下列哈希函数为基础:
HA=H(A)=Ar^Ac(1)
函数中A表示主存储区中的存储单元地址,Ar和Ac分别为A的行地址和列地址部分,HA为A的哈希地址。符号^为按位异或运算符,操作数Ar和Ac低位对齐,长度较短的操作数高位用“0”补齐。由前述内容可知HA的位宽为m=max(r,c},故取哈希表的大小为Nh=2m。基本哈希函数只需m个并行的异或门即可实现,结构简单,运算快速。图2所示为基本哈希函数逻辑的示意图,图中Ac为较短的操作数,高位补“0”后与Ar进行按位异或运算。
由上述内容可知哈希表存储的实质是将较大的主存储区地址空间映射到较小的哈希地址空间,必然存在某两个存储地址拥有相同的哈希地址,如果这两个存储地址都是故障地址,那么哈希表无法用一个哈希地址同时保存这两个故障地址,这样的情况称之为哈希冲突(下文简称冲突),在发生冲突的情况下存储器是不可修复的。反之无冲突的情况下存储器是可修复的。针对基本哈希函数,可对修复率的理论值做如下推导:
①对某个哈希地址ha有:
ha=Ar^Ac(2)
设S为Ar与Ac中位数较短的一个,L为Ar与Ac中位数较长的一个,则式(2)可表达为如下形式:
ha=S^L(3)
根据异或运算的性质式(3)可等价变换为:
L=S^ha(4)
因此S取任意值都可以由式(4)唯一确定一个L值,满足式(2),这样一组S与L即确定了一个哈希地址为ha的存储器地址。令n=min{r,c}可知S共有2n个可能的取值,即证明对于某个哈希地址ha共有2n个存储地址与之对应;
②对于大小为N有f个故障地址的存储器,故障地址的分布共有种可能;
③故障地址对应f个不同哈希地址的组合共有种,加之由第①步得出的结论,每个哈希地址共有2n个存储地址与之对应,故f个故障地址无冲突的可能共有种,或表达为的形式;
④故障地址的物理分布近似于均匀分布,故综上可得出基本哈希函数下f个故障地址无冲突的概率,即存储器的修复率为:
以上修复率R′在f值稍大的情况下往往较低,为了降低冲突概率保证本发明的修复率,本发明采用多哈希函数的设计,依据是某个故障分布在多个哈希函数下均发生冲突的概率要远低于单哈希函数下的冲突概率。修复过程中只需要选通其中一个无冲突的哈希函数作为最终的哈希函数就可以实现存储器的修复。
多哈希函数的设计以前述基本哈希函数为基础,将位数较长的操作数进行循环移位即可得到一个新的哈希函数,根据移动位数的不同就可以得到多个不同的哈希函数。图3所示为多哈希函数的示例,图(a)表示基本哈希函数,图(b)和图(c)分别表示循环左移1位和循环左移2位形成的新哈希函数。如图3所示,多哈希函数不需要对基本哈希函数电路结构做任何更改,只需适当地改变输入的连接关系。
当选用k个哈希函数时,由于不同哈希函数下发生冲突为相互独立事件,所以k个哈希函数均发生冲突的概率为(1-R′)k。由此可得选用k个哈希函数的存储器修复率为:
R=1-(1-R)k(6)
上述多个哈希函数的共同特征是:对于主存储区同一行的存储单元,它们的行地址相同,而列地址不同,经按位异或运算得出的哈希地址必然是不等的,即无冲突的;同理,同一列存储单元的哈希地址也是无冲突的,证明本发明具备了传统冗余字策略修复方法所没有的修复单个行/列故障的能力。
故障地址重映射:当某个访问地址经比较确定为故障地址后,需要将该故障地址重映射至冗余存储区。由前述内容可知Ns=Nh=2m,在此基础上令冗余存储区共享故障地址哈希表的哈希地址作为重映射地址,如图1中所示。这样的地址重映射机制一方面免去了传统方法中保存重映射地址所需的映射表,减小了电路面积;另一方面在地址比较的过程中同时获得了重映射地址,省去了传统方法读取映射表获取重映射地址的过程,明显提高了BIRA模块的运行速度。
自修复方法工作流程:存储器内建自修复系统有两种工作模式,即测试/修复模式和正常工作模式,下面分别详细介绍本发明存储器自修复方法的测试/修复流程和正常工作流程,并用一个实例加以说明。
自修复方法的测试/修复流程如下:
①存储器上电后,首先启动BIST模块对存储器进行测试,将检测到的故障地址暂存在BIST模块中;
②选通第一个哈希函数;
③初始化故障地址哈希表。使初始存入数据的哈希地址与实际存储地址不等,以此表示哈希表为空;
④将故障地址依次存入哈希表,如果存入过程中无冲突发生,则测试/修复完成,存储器进入正常工作模式;如果存入过程中发生冲突,则选通下一个哈希函数并循环执行③,④两步;
⑤如果所有哈希函数下均发生冲突,该存储器不可修复,存储器内建自修复电路给出不可修复信号。
自修复方法的正常工作流程如下:
①经哈希函数逻辑计算出访问地址A的哈希地址HA,读取哈希表中地址HA处的数据FA;
②比较A和FA是否相等,比较结果作为冗余存储区的使能信号和数据通道选择信号;
③如果A≠FA,说明访问地址A无故障,则将冗余存储区置为无效状态,同时选通主存储区与IO间的数据通道;
④如果A=FA,说明访问地址A为故障地址,则将冗余存储区置为有效状态,HA作为故障地址A在冗余存储区的重映射地址,同时选通冗余存储区与IO间的数据通道,故障地址得以修复。
自修复方法工作流程实例:图4(a)为一个8×4的存储器示意图,其地址表示为C1C0R2R1R0,其中R2R1R0表示行地址,C1C0表示列地址。该存储器存在故障地址f1=00001和f2=10011。
自修复方法的测试/修复流程实例如下:
①存储器上电后首先启动BIST模块进行测试,将检测到的故障地址f1和f2暂存在BIST模块中;
②选通哈希函数HA=H1(A)=R2R1R0^0C1C0;
③将哈希表初始化为空,如图4(b)所示;
④计算故障地址f1的哈希地址h1=001^000=001,经检查哈希表001地址为空,将f1存入哈希表地址001处,如图4(c)所示;
⑤计算故障地址f2的哈希地址h2=011^010=001,经检查哈希表001地址已经存入故障地址f1,说明在哈希函数HA=H1(A)下发生冲突;
⑥选通哈希函数HA=H2(A)=R1R0R2^0C1C0;
⑦将哈希表初始化为空,如图5(a)所示;
⑧计算故障地址f1的哈希地址h1=010^000=010,经检查哈希表010地址为空,将f1存入哈希表地址010处,如图5(b)所示;
⑨计算故障地址f2的哈希地址h2=110^010=100,经检查哈希表100地址为空,将f2存入哈希表地址100处,如图5(c)所示;
⑩故障地址存储完毕,无冲突发生,选通HA=H2(A)作为最终哈希函数,测试/修复模式完毕,存储器进入正常工作模式。
正常工作模式下,假设访问地址依次为10101,01110,00001。自修复方法的工作流程实例分别如下:
当A=10101时:
①计算A=10101的哈希地址地址h=011^010=001,读取哈希表地址001的数据FA,如图5(c)所示哈希表地址001为空,根据哈希表初始化的原则可知H2(FA)≠H2(A),那么必然有FA≠A;
②FA≠A说明地址A无故障,则将冗余存储区置为无效,选通主存储区数据通道,冗余分析过程完毕。
当A=01110时:
①计算A=01110的哈希地址地址h=101^001=100,读取哈希表地址100的数据FA,如图5(c)所示,FA=10011,显然FA≠A;
②FA≠A说明地址A无故障,则将冗余存储区置为无效,选通主存储区数据通道,冗余分析过程完毕。
当A=00001时:
①计算A=00001的哈希地址地址h=010^000=010,读取哈希表地址010的数据FA,如图5(c)所示,FA=00001,显然FA=A;
②FA=A说明地址A为故障地址,则将冗余存储区置为有效,将哈希地址h=010作为A在冗余存储区的重映射地址,同时选通冗余存储区的数据通道,故障地址A得到修复。
实验结果与分析:为了评估本发明的修复率和工作效率,进行了计算机模拟实验,由于故障地址的物理分布近似于均匀分布,实验中以均匀分布模型向存储器随机注入f个故障地址,在不同哈希函数个数的情况下进行模拟实验。
图6所示为根据实验数据绘制的修复率曲线,受测存储器大小N=8Mb(2048×512×8bit),冗余存储区的大小为Ns=16Kb(2048×8bit),注入故障地址数k为1至50,哈希函数个数k分别为1,2,4,8。每种情况下存储器样本数均为100000。实验结果显示,修复率的实验值与理论值吻合,哈希函数个数k较大的修复率相对于k较小的修复率有明显的提高,尤其是故障数越多对修复率的提高越显著,充分证明多哈希函数设计可以有效保证本发明的修复率。当k=8时,本发明获得了很高的修复率,在f≤25的情况下,保持着100.000%的修复率;在25<f≤50的情况下,本发明仍然可以获得99.821%以上的高修复率,此情况下基于全搜索地址比较的传统方法虽然理论上可以达到100%的修复率,但事实上全搜索地址比较的大量耗时已经使存储器性能恶化到了不可接受的地步,无法做到真正的修复。
运行速度方面,因为哈希表与冗余存储区远小于主存储区,且两者共用一套哈希地址,所以BIRA模块内部存储单元的访问速度快于主存储区。另外,哈希函数逻辑与地址比较逻辑共计只有3到4级门延迟,基本可以忽略不计,所以BIRA模块的总体延迟要小于主存储区,与主存储区并行工作不会对存储器性能产生任何不利影响。
图7所示为本发明与已有的两种存储器内建自修复方法在不同工作模式下的平均地址比较次数对比,实验存储器的大小为N=1Mb(1024×128×8bit),注入故障地址数分别为10,20,50。实验数据表明:无论在测试/修复模式还是正常工作模式,本发明的地址比较次数都远小于现有方法,尤其是在正常工作模式下,地址比较次数仅为1次,且该优越特性不受故障数多少的影响,保证了经修复的存储器性能不受任何不利影响,同时还带来了低功耗的有益效果。
因此,本发明提供的存储器内建自修复系统及自修复方法,存储器在加电后BIST模块对主存储区进行测试并将检测到的故障地址输出给BIRA模块,BIRA模块内部故障地址基于哈希表形式进行存储,在此基础上经修复的存储器工作过程中就可以根据访问地址的哈希地址,直接定位比较对象在哈希表中的位置并进行地址比较,如果比较结果不等,说明访问地址无故障,令冗余存储区无效,选通主存储区的数据通道;如果比较结果相等,说明访问地址为故障地址,则令冗余存储区有效,将访问地址重映射至冗余存储区,同时选通冗余存储区的数据通道,从而完成对该故障地址的修复。
本发明提供的存储器内建自修复系统及自修复方法,BIST模块负责完成对存储器进行测试并向BIRA模块输出故障地址的功能,BIST模块测试算法采用March2算法;故障地址以哈希表的形式进行存储,大幅提高了地址比较效率;哈希函数逻辑采用多哈希函数的设计,以降低哈希冲突概率,提高修复率;冗余存储区与故障地址哈希表共享哈希地址,故障地址的哈希地址即为重映射地址,免去了传统存储器内建自修复方法保存重映射地址的映射表,降低了电路面积。BIRA模块与主存储区并行工作,地址比较的结果作为冗余存储区的使能信号和数据通道选择信号。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。