本发明涉及存储器领域,尤其涉及一种flash冗余替换系统和方法。
背景技术:
1、闪存工艺非常复杂,一个或多个存储单元在制造过程中出现缺陷的概率是不可忽略的。为适应需求,任何大容量存储器都应包含比正常可寻址范围更多的存储单元,称为冗余单元,用于替换制造中发现的缺陷单元。但冗余单元本身也可能具有缺陷,所以通常对flash进行两次检测,在替换前和替换后均进行检测,这样极大地增加了测试成本。若只进行一次检测,由于flash寻址顺序按字线递增,只有扫描到最后一个字线时才能确定整个冗余位线的好坏,因此在扫描的大部分过程内,冗余单元的好坏程度都是未知的,直接用于替换难以保证准确性。
2、综上所述,现有的应用手段难以兼顾测试成本与准确性。
技术实现思路
1、本发明的目的是解决目前的flash在进行冗余替换时,测试成本高、准确性差、效率低的问题。
2、为实现上述目的,本发明公开了一种flash冗余替换系统,用于使用冗余区的位线替换主区的缺陷位线,包括:
3、多个sa,其中一个sa用于对冗余区的m+1个位线依次进行读取,冗余区的sa每次读取冗余区的一个位线;其他多个sa用于对主区的位线依次进行读取,主区的sa每次读取主区的多个位线;
4、第一指针rdn_addr,作为冗余区位线的索引指针,该第一指针rdn_addr随sa的读取而在冗余区的所有位线rdn0至rdnm中循环;
5、第二指针rdn_no,指向用于替换主区的缺陷位线的冗余区位线,所述第二指针rdn_no指向的冗余区位线从rdn0至rdnm单调增加。
6、优选的,所述flash冗余替换系统还包括:flag[m:0][1:0],用于记录冗余区的多个位线是否用于替换以及是否被检测为坏,其中[m:0]表示冗余区的位线rdn0至rdnm,[1:0]表示是否用于替换以及是否被检测为坏;lut[m:0][n:0],表示冗余区的m+1个位线分别记录的错误地址,其中n=n1+n2-1,[n:0]表示n+1位数据,其中n1位数据表示出现缺陷的读取次,多个sa将同一字线的主区位线读取完成所需的次数为2n1,n2位数据表示出现缺陷的主区位线的地址,2n2为主区的sa的数量。
7、优选的,所述flash冗余替换系统还包括:第二指针rdn_no的自增结构,该自增结构包括排除器和优先编码器,将所述第二指针rdn_no当前指向的冗余区的具体位线地址和flag[m:0][1:0]输入所述排除器,该排除器基于flag[m:0][1:0],判断哪些冗余位线已使用或被标记为坏并将其排除,然后通过所述优先编码器,输出rdn_no+1或者rdn_no+2的目标值,将该目标值赋值给原第二指针rdn_no。
8、本发明第二方面公开了一种flash冗余替换方法,采用上述的flash冗余替换系统对flash进行冗余替换时,首先确定要读取的字线,在同一个字线上,当读取出主区的某个位线有缺陷时,将第二指针rdn_no当前指向的冗余区的位线替换给该主区的缺陷位线,并使第二指针rdn_no指向冗余区的下一个位线;再读取当前字线上的下一组位线,并进行相应的替换行为,直至读取完当前字线,再读取下一个字线,直至将主区的所有字线全部读取结束。
9、优选的,当第二指针rdn_no指向冗余区的最后一个位线,并且又发生一次替换后,若仍读取出主区的缺陷位线,则结束替换流程,将flash判为废片。
10、优选的,当冗余区的sa检测到冗余区的位线有缺陷时,将该冗余区的位线标记为坏;并使第二指针rdn_no在单调增加时跳过该被标记为坏的位线。
11、优选的,当flash完成冗余替换后,在接受主机访问时,当主机要访问的地址main_addr与lut[n:0]记录的信息匹配时,即可获取lut[m:0]的具体信息,进而得到与该lut[m:0]对应的flag[m:0][1:0],从而得知该主机要访问的地址main_addr是否发生过替换以及是否被检测为坏。
12、优选的,当开始冗余替换后,根据多个sa每次读取的结果进行相应逻辑操作,在读取过程中,如果发现主区的缺陷位线数量大于冗余区的位线数量,则提前结束流程,否则直到主区的字线和位线均达到最大值时,流程结束。
13、优选的,多个sa每次读取的结果为x+y形式,x表示主区的检测结果,y表示冗余区的检测结果,检测结果为1或0,1表示有缺陷,0表示无缺陷,根据不同的读取结果x+y进行不同的逻辑操作,具体如下:
14、①读取结果为1+0:使第二指针rdn_no当前指向的冗余区的位线替换给该主区有缺陷的位线;并使用lut[rdn_no][n:0]记录错误位置,并将flag[rdn_no][1]置1,表示该rdn_no已用于替换;使rdn_no根据自增结构自增;
15、②读取结果为0+1,并具体包括以下几种情况:
16、flag[rdn_addr][1]=1且rdn_addr<rdn_no:将flag[rdn_addr][1]置0,将flag[rdn_addr][0]置1;并将lut[rdn_addr]赋值为lut[rdn_no],以及将flag[rdn_no][1]置1;使rdn_no根据自增结构自增;
17、flag[rdn_addr][1]=0且rdn_addr<rdn_no:无需再次操作;
18、flag[rdn_addr][1]=0且rdn_addr=rdn_no:将flag[rdn_no][0]置1;使rdn_no根据自增结构自增;
19、flag[rdn_addr][1]=0且rdn_addr>rdn_no:将flag[rdn_addr][0]置1;
20、③读取结果为1+1,并具体包括以下几种情况:
21、flag[rdn_addr][1]=1且rdn_addr<rdn_no且不是中的情况:使第二指针rdn_no当前指向的冗余区的位线替换给该主区有缺陷的位线;并使用lut[rdn_no][n:0]记录错误位置;使flag[rdn_no][1:0]=2’b10,表示此时的rdn_no用于替换以及未被检测为坏;并将lut[rdn_addr]中错误地址赋值给lut[rdn_no+1],使flag[rdn_no+1][1:0]=2’b10;使flag[rdn_addr][1:0]=2’b01,表示此时的rdn_addr未用于替换以及被检测为坏;最后使rdn_no根据自增结构自增;
22、flag[rdn_addr][1]=0且rdn_addr<rdn_no且不是中的情况:使第二指针rdn_no当前指向的冗余区的位线替换给该主区有缺陷的位线;并使用lut[rdn_no][n:0]记录错误位置,使flag[rdn_no][1:0]=2’b10;最后使rdn_no根据自增结构自增;
23、flag[rdn_addr][1]=0且rdn_addr=rdn_no且不是中的情况:使第二指针rdn_no当前指向的冗余区的位线替换给该主区有缺陷的位线;使用lut[rdn_no+1][n:0]记录错误位置,使flag[rdn_no+1][1:0]=2’b10;使flag[rdn_addr][1:0]=2’b01;最后使rdn_no根据自增结构自增;
24、flag[rdn_addr][1]=0且rdn_addr>rdn_no且不是中的情况:使第二指针rdn_no当前指向的冗余区的位线替换给该主区有缺陷的位线;并使用lut[rdn_no][n:0]记录错误位置,使flag[rdn_no][1:0]=2’b10;使flag[rdn_addr][1:0]=2’b01;最后使rdn_no根据自增结构自增;
25、主区100的当前地址有过替换且错误位置等于记录位置;使第二指针rdn_no当前指向的冗余区的位线替换给该主区有缺陷的位线;lut[mapped_idx]赋值给lut[rdn_no],其中,由于主区100的当前地址发生过替换,mapped_idx指的是主区100当前地址之前发生替换时对应的冗余区200的bit line;flag[mapped_idx]=2’b01;最后使rdn_no根据自增结构自增;
26、④其他:当出现除上述①至③以外的情况时,停止流程,判定该flash为废片。
27、与现有技术相比,本发明具有以下优点和有益效果:
28、本发明通过两种指针与主区同步进行检测,在主区进行一次检测的过程中,冗余区能够进行循环验证并实现错误替换的纠正,减少测试时间的同时,保证了冗余替换的准确性;
29、本方案中,只需要进行一次遍历,在遍历过程中,可能会使用未知好坏的冗余线,但最终会替换为已知为正确的冗余线。