半导体存储装置及其控制方法和错误纠正系统

申请号 CN200880126996.3 申请日 2008-09-19 公开(公告)号 CN101946239A 公开(公告)日 2011-01-12
申请人 株式会社东芝; 发明人 山家阳;
摘要 一种允许减少功耗和 电路 规模而不损害错误纠正能 力 的 半导体 存储装置、控制其的方法和错误纠正系统。固态 驱动器 (SSD)的错误纠正码(ECC)电路使用第一错误纠正码(Hamming码)在读数据上执行第一错误纠正,并进一步使用第二错误纠正码(BCH码)在第一错误纠正的结果上执行第二错误纠正。此外,ECC电路使用第三错误纠正码(RS码)在第二错误纠正的结果上执行第三错误纠正。
权利要求

1.一种半导体存储装置,包含:
临时存储单元,其能够在其中存储多个数据,所述多个数据块按矩阵排列并且每一个数据块均由多个数据形成;
错误检测码产生单元,其产生错误检测码来针对每一个数据块检测错误;
第一错误纠正码产生单元,其产生第一错误纠正码来针对由数据块形成的每一个第一单元数据纠正错误;
第二错误纠正码产生单元,其产生第二错误纠正码来针对由按列方向排列的数据块形成的每一个第二单元数据纠正错误;
第三错误纠正码产生单元,其产生第三错误纠正码来针对由按行方向排列的数据块形成的每一个第三单元数据纠正错误;和
非易失半导体存储器,其能够在其中存储数据块、产生的错误检测码和产生的第一到第三错误纠正码。
2.如权利要求1所述的半导体存储装置,还包含:
第一错误纠正单元,其在每一个数据块上使用与其对应的第一错误纠正码执行第一错误纠正;
第一错误检测单元,其在经过第一错误纠正的块中使用与其对应的错误检测码检测错误;
第二错误纠正单元,其在经过第一错误纠正的块中被第一错误检测单元检测到的错误上使用与其对应的第二错误纠正码执行第二错误纠正;
第二错误检测单元,其在经过第二错误纠正的块中使用与其对应的错误检测码检测错误;和
第三错误纠正单元,其在经过第二错误纠正的块中被第二错误检测单元检测到的错误上使用与其对应的第三错误纠正码执行第三错误纠正。
3.如权利要求1所述的半导体存储装置,其中,错误纠正能平按如下降序提供:
第三错误纠正>第二错误纠正>第一错误纠正。
4.如权利要求2所述的半导体存储装置,其中,第二错误纠正单元和第三错误纠正单元交替地重复各自的错误纠正操作。
5.如权利要求1所述的半导体存储装置,其中,错误检测码产生单元产生错误检测码来检测第三错误纠正码中的错误。
6.如权利要求1所述的半导体存储装置,其中,第一单元数据包含对应于数据块的错误检测码。
7.如权利要求1所述的半导体存储装置,其中,第二单元数据包含分别对应于形成第二单元数据的数据块的错误检测码。
8.如权利要求1所述的半导体存储装置,其中,第二错误纠正码产生单元产生第二错误纠正码来纠正每一按列方向排列的多个第三错误纠正码中的错误。
9.如权利要求2所述的半导体存储装置,其中
第一错误检测单元产生第一错误信息来识别其中检测到错误的数据块,第二错误纠正单元基于第一错误信息执行第二错误纠正,
第二错误检测单元产生第二错误信息来识别其中检测到错误的数据块,并且第三错误纠正单元基于第二错误信息执行第三错误纠正。
10.如权利要求1所述的半导体存储装置,其中,非易失半导体存储器是NAND快闪存储器。
11.一种控制半导体存储装置的方法,包含:
在临时存储装置中存储多个数据块,所述多个数据块按矩阵排列并且每一个数据块均由多个数据形成;
产生错误检测码来针对每一个数据块检测错误;
产生第一错误纠正码来针对由数据块形成的每一个第一单元数据纠正错误;
产生第二错误纠正码来针对由按列方向排列的数据块形成的每一个第二单元数据纠正错误;
产生第三错误纠正码来针对由按行方向排列的数据块形成的每一个第三单元数据纠正错误;和
在非易失半导体存储器中存储数据块、产生的错误检测码和产生的第一到第三错误纠正码。
12.如权利要求11所述的控制半导体存储装置的方法,还包含:
在每一个数据块上使用与其对应的第一错误纠正码执行第一错误纠正;
在经过第一错误纠正的块中使用与其对应的错误检测码检测错误;
在经过第一错误纠正的块中被第一错误检测单元检测到的错误上使用与其对应的第二错误纠正码执行第二错误纠正;
在经过第二错误纠正的块中使用与其对应的错误检测码检测错误;和在经过第二错误纠正的块中被第二错误检测单元检测到的错误上使用与其对应的第三错误纠正码执行第三错误纠正。
13.一种错误纠正系统,包含:
主机装置;和
半导体存储装置,其根据主机装置的指令执行从/向非易失存储器的数据读/写,其中所述半导体存储装置包括
临时存储单元,其把从主机装置转移的数据划分为每一个均由多个数据形成的多个数据块,并在其中按矩阵存储所述数据块;
错误检测码产生单元,其产生错误检测码来针对每一个数据块检测错误;
第一错误纠正码产生单元,其产生第一错误纠正码来针对由数据块形成的每一个第一单元数据纠正错误;
第二错误纠正码产生单元,其产生第二错误纠正码来针对由按列方向排列的数据块形成的每一个第二单元数据纠正错误;
第三错误纠正码产生单元,其产生第三错误纠正码来针对由按行方向排列的数据块形成的每一个第三单元数据纠正错误;
非易失半导体存储器,其能够在其中存储数据块、产生的错误检测码和产生的第一到第三错误纠正码;
第一错误纠正单元,其在每一个数据块上使用与其对应的第一错误纠正码执行第一错误纠正;
第一错误检测单元,其在经过第一错误纠正的块中使用与其对应的错误检测码检测错误;
第二错误纠正单元,其在经过第一错误纠正的块中被第一错误检测单元检测到的错误上使用与其对应的第二错误纠正码执行第二错误纠正;
第二错误检测单元,其在经过第二错误纠正的块中使用与其对应的错误检测码检测错误;和
传送单元,其把经过第二错误纠正的数据和第二错误检测单元检测的结果传送到主机装置,并且
主机装置包括
第三错误纠正单元,其在从半导体存储装置接收到的、经过第二错误纠正的块中被第二错误检测单元检测到的错误上使用与其对应的第三错误纠正码执行第三错误纠正。

说明书全文

半导体存储装置及其控制方法和错误纠正系统

技术领域

[0001] 本发明涉及半导体存储装置(semiconductor storage device)、控制该半导体存储装置的方法、以及错误纠正系统,更具体地,本发明涉及包括纠正以非易失方式存储信息的半导体存储器(semiconductor memory)的错误的错误纠正电路的半导体存储装置及其控制方法和错误纠正系统。

背景技术

[0002] 近来,存在广为人知的半导体存储器装置,例如依靠保持的电荷量存储信息的快闪存储器。用于通过设置电荷量的多个阈值来存储两比特或更多比特信息的多值存储器技术也得到发展。
[0003] 在半导体存储器装置中,电荷随着时间的流逝放电,因此,如果电荷被放电得超过阈值,则当读取信息时可能发生错误。具体来说,多值类型的存储器装置在阈值之间一般具有较窄的间隔,这导致发生错误的可能性增大。
[0004] No.2007-87464号日本已公开专利申请公开了一种使用半导体存储器装置的存储装置,其包括正确地恢复不正确的信息的错误纠正机制。
[0005] 存在这样一种情况,其中在由多个比特组成的数据中包括很多由自从上次记录数据以来时间的流逝导致的错误,并且即使在这种情况下,一般要求具有高错误纠正能的纠正机制来纠正错误。具有高错误纠正能力的纠正机制要求大的电路规模、大的功耗和较长的处理时间。一般来说,提供具有高错误纠正能力的纠正机制来保证即使自从上次存储信息以来已过去了较长时间也把不正确的信息恢复为正确的信息。高性能错误纠正机制相同地可应用于存储装置而与自从上次存储信息以来流逝的时间的长度无关。
[0006] 因此,即使要在自从存储信息以来只经过了较短的一段时间以后读取信息时也使用高性能错误纠正机制。因此,即使要被读取的信息没有包含这么多错误,高性能错误纠正机制也被很浪费地使用了。这导致了存储装置的功耗浪费。
[0007] 此外,为了增加错误纠正能力,一般要求增加作为错误纠正的对象的信息。使用例如4千字节数据(其中多个512字节数据相互连接作为一个单元)产生错误纠正码,而非针对例如512字节数据产生错误纠正码。这种技术使错误纠正能力能被提高。但是,这种技术导致尽管希望读取512字节数据却读取了4千字节数据。这还迫使存储装置浪费地消耗电功率。
[0008] 本发明的目的是提供一种能够减少功耗和电路规模而不损害错误纠正能力的半导体存储装置及其控制方法和错误纠正系统。

发明内容

[0009] 为了解决所述问题并实现所述目的,根据本发明的一个方面的半导体存储装置包括:临时存储单元,其能够在其中存储按矩阵排列、每一个均由多个数据形成的多个数据;错误检测码产生单元,其产生错误检测码来针对每一个数据块检测错误;第一错误纠正码产生单元,其产生第一错误纠正码来针对由数据块形成的每一个第一单元数据纠正错误;第二错误纠正码产生单元,其产生第二错误纠正码来针对由按列方向排列的数据块形成的每一个第二单元数据纠正错误;第三错误纠正码产生单元,其产生第三错误纠正码来针对由按行方向排列的数据块形成的每一个第三单元数据纠正错误;和非易失半导体存储器,其能够在其中存储数据块、产生的错误检测码和产生的第一到第三错误纠正码。
[0010] 一种根据本发明的另一方面的控制半导体存储装置的方法,包括:主机装置;和根据主机装置的指令执行从/向非易失存储器的数据读/写的半导体存储装置,其中,所述半导体存储装置包括:临时存储单元,其把从主机装置转移的数据划分为每一个均由多个数据形成的多个数据块,并在其中按矩阵存储所述数据块;错误检测码产生单元,其产生错误检测码来针对每一个数据块检测错误;第一错误纠正码产生单元,其产生第一错误纠正码来针对由数据块形成的每一个第一单元数据纠正错误;第二错误纠正码产生单元,其产生第二错误纠正码来针对由按列方向排列的数据块形成的每一个第二单元数据纠正错误;第三错误纠正码产生单元,其产生第三错误纠正码来针对由按行方向排列的数据块形成的每一个第三单元数据纠正错误;非易失半导体存储器,其能够在其中存储数据块、产生的错误检测码和产生的第一到第三错误纠正码;第一错误纠正单元,其在每一个数据块上使用与其对应的第一错误纠正码执行第一错误纠正;第一错误检测单元,其在经过第一错误纠正的块中使用与其对应的错误检测码检测错误;第二错误纠正单元,其在经过第一错误纠正的块中由第一错误检测单元检测到的错误上使用与其对应的第二错误纠正码执行第二错误纠正;和第二错误检测单元,其在经过第二错误纠正的块中使用与其对应的错误检测码检测错误;和传送单元,其把经过第二错误纠正的数据和第二错误检测单元检测的结果传送到主机装置,并且,主机装置包括第三错误纠正单元,其在从半导体存储装置接收到的、经过第二错误纠正的块中由第二错误检测单元检测到的错误上使用与其对应的第三错误纠正码执行第三错误纠正。
附图说明
[0011] 图1是固态驱动器(SSD)的结构例子的框图
[0012] 图2是NAND存储器芯片中所包含的一个块的结构例子的电路图;
[0013] 图3是用于说明错误纠正码(ECC)电路中的错误纠正原理的概要的示意图;
[0014] 图4是ECC电路中的编码系统的主要部分的框图;
[0015] 图5是存储在DRAM中的数据的格式的例子的示意图;
[0016] 图6是转移到NAND存储器的数据的格式的示意图;
[0017] 图7是用于说明ECC电路的错误检测码产生操作和错误纠正码产生操作的示意图;
[0018] 图8是从图7继续的示意图;
[0019] 图9是从图8继续的示意图;
[0020] 图10是ECC电路中的解码系统的主要部分的框图;
[0021] 图11是用于说明第一错误纠正之后的错误检测的示意图;
[0022] 图12是第一错误信息的例子的示意图;
[0023] 图13是用于说明第二错误纠正之后的错误检测的示意图;
[0024] 图14是第二错误信息的例子的示意图;
[0025] 图15是在由第二ECC纠正单元执行过第一轮错误纠正以后块数据的示意图;
[0026] 图16是在由第三ECC纠正单元执行过第一轮错误纠正以后块数据的示意图;
[0027] 图17是在由第二ECC纠正单元执行过第二轮错误纠正以后块数据的示意图;
[0028] 图18是在由第三ECC纠正单元执行过第二轮错误纠正以后块数据的示意图;
[0029] 图19是从写开始经过的时间与所需的纠正能力之间的关系的示意图;
[0030] 图20是用于说明根据本发明的第二实施例的错误纠正的原理的示意图;
[0031] 图21是根据第二实施例的SSD和主机装置的结构的示意图;
[0032] 图22是根据第二实施例的ECC电路中的解码系统的主要部分的框图。

具体实施方式

[0033] 下面将参考附图详细说明本发明的示范性实施例。应该注意,本发明不局限于这些实施例。此外,下列实施例中的部件包括本领域技术人员可以想到的那些,或者包括大致相同的部件。
[0034] 当错误纠正编码/解码被施加于具有缺陷比特的存储器(例如快闪存储器)时,本发明的第一实施例通过执行三种类型的具有不同错误纠正能力的纠正编码,允许减小功耗和电路规模。
[0035] 图1是固态驱动器(SSD)100的结构例子的框图。SSD 100通过例如先进技术附件(ATA)接口(I/F)(ATA/IF)2的存储器连接接口连接到例如个人计算机或者中央处理单元(CPU)核的主机装置(主机)1,所以SSD 100起到主机装置1的外部存储器的作用。SSD100可以通过例如RS232C接口(RS232C I/F)的通信接口3与调试装置200执行数据传送/接收。SSD 100包括作为非易失存储器的NAND快闪存储器(此后称为“NAND存储器”)10、作为控制器的驱动控制电路4、作为易失存储器的动态随机访问存储器(DRAM)20、电源电路5和用于状态指示的发光二极管(LED)6。
[0036] 电源电路5从由设置在主机装置1侧中的电源电路提供的外部直流电源产生内部直流电源的多个不同电压,并把这些电压提供给SSD100中的电路。此外,电源电路5检测外部电源的上升沿或者下降沿,产生加电复位信号或者关机复位信号,并把信号提供给驱动控制电路4。
[0037] 在这种情况下,NAND存储器10包括执行四个并行操作的四个并行操作元件10a到10d,并且每一个并行操作元件均包括两个NAND存储器包(memory package)。每一个NAND存储器包由多个堆叠的NAND存储器芯片形成(例如每芯片2吉字节(GB))。在图1中,NAND存储器包由四个堆叠的NAND存储器芯片形成,因此,NAND存储器10具有64吉字节的容量。如果NAND存储器包由8个堆叠的NAND存储器芯片形成,则NAND存储器10具有128吉字节的容量。
[0038] DRAM 20起到主机装置1和NAND存储器10之间的数据转移高速缓存的作用,并且也起到用于工作区域的存储器的作用。
[0039] 驱动控制电路4控制主机装置1和NAND存储器10之间通过DRAM 20的数据转移,并且也控制SSD 100中的部件。驱动控制电路4具有以下功能:把状态指示信号提供给LED 6、从电源电路5接收加电/关机复位信号,并把复位信号和时钟信号提供给自己的电路和SSD 100中的部件。
[0040] NAND存储器芯片被配置成排列多个块,每一个块均为数据删除的单元。图2是NAND存储器芯片中所包含的一个块的结构例子的电路图。该块包括(m+1)个沿着X方向顺序排列的NAND串(其中m:零或更大的整数)。分别被包含在(m+1)个NAND串中的选择晶体管ST1在其漏极被连接到位线BL0到BLm,并分别在其栅极共同连接到选择栅极线SGD。选择晶体管ST2分别在其源极共同连接到源极线SL,并在其栅极共同连接到选择栅极线SGS。
[0041] 存储器单元晶体管MT由包括在半导体衬底上形成的叠栅结构的金属化物半导体场效应晶体管(MOSFET)形成。叠栅结构具有在半导体衬底上通过栅极绝缘薄膜形成的电荷存储层(浮栅电极)和在所述电荷存储层上通过栅极间绝缘薄膜形成的控制栅电极。存储器单元晶体管MT导致阈值电压根据存储在浮栅电极中的电子数量变化,并根据阈值电压的不同在其中存储数据。存储器单元晶体管MT可以被配置成存储一个比特,或者可以被配置成存储多个值(2比特或者更多数据)。
[0042] 在NAND串中,(n+1)个存储器单元晶体管MT被在选择晶体管ST1的源极和选择晶体管ST2的漏极之间排列,使得其电流路径被串联连接。更具体地,多个存储器单元晶体管MT被沿Y方向以使扩散区域(源极区域或者漏极区域)由相邻晶体管共享的方式串联。
[0043] 控制栅电极按从位置最靠近选择晶体管ST1的存储器单元晶体管MT开始的顺序依次连接到字线WL0到WLn。因此,连接到字线WL0的存储器单元晶体管MT的漏极被连接到选择晶体管ST1的源极,而连接到字线WLn的存储器单元晶体管MT的源极被连接到选择晶体管ST2的漏极。
[0044] 块的NAND串中的存储器单元晶体管MT的控制栅电极共同连接到字线WL0到WLn中的每一个。即,在块的同一行中的存储器单元晶体管MT的控制栅电极被连接到相同的字线WL。连接到相同字线WL的(m+1)个存储器单元晶体管MT被作为一个页面处理,并且数据的写和读被针对每一个页面执行。
[0045] 位线BL0到BLm中的每一个中的选择晶体管ST1的漏极共同连接到另一个块。即,多个块的同一列中的NAND串被连接到相同的位线BL。
[0046] 如图1中所示,在NAND存储器10中,四个并行操作元件(NAND包)10a到10d通过四个通道(ch0到ch3)并联连接到驱动控制电路4,所述每一个通道具有8比特。基于四个并行操作元件10a到10d被单独操作还是并行操作,并且基于这两者之一与是否使用NAND存储器10的双倍速模式的组合,提供了下列三种类型的访问方式:
[0047] (1)8比特正常模式
[0048] 操作一个通道以8比特为单元来读/写数据。数据转移的尺寸单元是页面尺寸(4千字节)。
[0049] (2)32比特正常模式
[0050] 并行操作四个通道以32比特为单元来读/写数据。数据转移的尺寸单元是页面尺寸×4(16千字节)。
[0051] (3)32比特双倍速模式
[0052] 并行操作四个通道,此外使用NAND存储器10的双倍速模式来读/写数据。数据转移的尺寸单元是页面尺寸×4×2(32千字节)。
[0053] 在其中四个通道被并行操作的32比特正常模式或者32比特双倍速模式中,并行操作的四个或八个块被确定为NAND存储器10的删除的单元,并且并行操作的四个或八个页面被确定为向NAND存储器10写的单元和从NAND存储器10读的单元。
[0054] 驱动控制电路4包括控制器41、错误纠正码(ECC)电路42和NAND I/F 43。
[0055] 控制器41通过ATA接口2与主机装置1执行数据传送/接收,并且也执行对DRAM20的访问控制。
[0056] NAND I/F 43与NAND存储器10的NAND包10a到10d中的每一个执行接口处理(或者执行向/从NAND存储器10的NAND包10a到10d中的每一个的输入/输出控制(ctrl I/O))。
[0057] ECC电路42为要被写到NAND存储器10的数据产生错误检测码和错误纠正码。ECC电路42也在从NAND存储器10读取的数据上执行错误检测和错误纠正。
[0058] 下面说明如上配置的SSD 100的操作的概述。当被请求写入的数据(写数据)从主机装置1提供到SSD 100时,控制器41把写数据暂时存储在DRAM 20中。控制器41通过每一个预定单元把存储的写数据提供给ECC电路42。ECC电路42为写数据产生错误纠正码和错误检测码。NAND I/F 43把添加了错误纠正码和错误检测码的写数据写到NAND存储器10。
[0059] 在SSD 100中,当从主机装置1输入数据读请求时,NAND I/F 43读取被请求读取的数据(读数据),并且也读取被添加到所述数据的错误纠正码和错误检测码,并把带有所述码的数据提供给ECC电路42。ECC电路42在读数据上执行错误检测和错误纠正。控制器41把经过错误纠正的数据存储在DRAM 20中,然后把数据转移到主机装置1。
[0060] 下面说明ECC电路42的基本操作过程。ECC电路42在要被写到NAND存储器10的数据上执行具有不同错误纠正能力的三种类型的错误编码,从而允许减少功耗和电路规模。使用第一错误纠正码(图6中的ECC 1)以数据块D为基础执行错误纠正。使用第二错误纠正码(图6中的ECC 2)执行逐列的错误纠正,列由多个数据块D形成。使用第三错误纠正码(图6中的RS)来执行逐行的错误纠正,行由多个数据块D形成。这三者的错误纠正能力的平按如下的升序提供:第一错误纠正码<第二错误纠正码<第三错误纠正码。
[0061] 图3是用于说明ECC电路42中的错误纠正的原理的概要的示意图。图3表示从NAND存储器10读取的数据,并且每一个均由多个数据形成的数据块D被按矩阵排列。阴影区域代表包含错误数据的错误数据块。首先,以数据块D为基础执行错误纠正(第一错误纠正)(A)。接着,在其中错误不能被纠正的数据块D上执行逐列的错误纠正(第一轮第二错误纠正)(B)。进一步,在其中错误不能被纠正的数据块D上执行逐行的错误纠正(第一轮第三错误纠正)(C)。在其中错误不能被纠正的数据块D上再次执行逐列的错误纠正(第二轮第二错误纠正)(D)。进一步,在其中错误不能被纠正的数据块D上执行逐行的错误纠正(第二轮第三错误纠正)(E)。利用这些操作,没有错误的数据被解码(F)。
[0062] 如上面所说明的那样,在第一实施例中,首先以数据块为基础执行错误纠正(第一错误纠正)。如果存在其中错误不能被纠正的任何数据块,则逐列的错误纠正(第二错误纠正)和逐行的错误纠正(第三错误纠正)被交替重复,直到错误被消除,并且没有错误的数据被解码为止。
[0063] 图4是ECC电路42中的编码系统的主要部分的框图。图5是当要从主机装置1转移的数据被存储在DRAM 20中时的格式的例子的示意图。图6是转移到NAND存储器10的数据的格式的示意图。
[0064] 如图4中所示,ECC电路42包括八个错误检测码产生器50-1到50-8(错误检测码产生单元)、八个第一ECC产生器51-1到51-8(第一错误纠正码产生单元)、第二ECC产生器52(第二错误纠正码产生单元)和八个第三ECC产生器53-1到53-8(第三错误纠正码产生单元)。
[0065] 错误检测码产生器50-1到50-8(或者它们可以被表示为错误检测码产生器50)中的每一个产生错误检测码以便在写数据的每一个数据块D中检测错误。数据块D的大小是例如512字节。
[0066] 可以使用循环冗余校验和(CRC)-32、CRC-16等作为错误检测码。第一实施例使用CRC-32,并且CRC-32(此后称为“CRC”)的大小被设置为4字节。任何公知的装置可以被用作错误检测码产生器50,因此,省略其详细说明。
[0067] 第一ECC产生器51-1到51-8(或者,它们可以被表示为第一错误检测码产生器51)中的每一个产生第一错误纠正码以便纠正由数据块D和对应的错误检测码形成的每一个第一单元数据中的错误。
[0068] 可以使用例如Hamming码和BCH码(Bose-Chaudhuri-Hocquenghem码)的错误纠正码作为第一错误纠正码以便实现按一个比特或者按多个比特的错误纠正。第一实施例使用Hamming码作为第一错误纠正码,并且Hamming码的大小被设置为4字节。任何公知的装置可被用作第一ECC产生器51,因此,省略其详细说明。
[0069] 第二ECC产生器52为每一个第二单元数据UDa产生第二错误纠正码,第二单元数据UDa由按列方向排列的多个第一单元数据形成。根据期望实现的错误纠正能力和要使用的错误纠正码来决定作为产生第二错误纠正码的单元的写数据的数量。
[0070] 使用与第一错误纠正码相比具有更高的错误纠正能力的错误纠正码作为第二错误纠正码,并且使用允许多个比特的错误纠正的错误纠正码。具体来说,可以使用BCH码和低密度奇偶校验(LDPC)码等等。第一实施例被配置成为由按列方向排列的八个第一单元数据形成的每一个第二单元数据UDa产生BCH码,并把BCH码的大小设置为24字节。任何公知的装置可被用作第二ECC产生器52,因此,省略其详细说明。
[0071] 第三ECC产生器53-1到53-8(或者,它们可以被表示为第三ECC产生器53)中的每一个为每一个第三单元数据UDb产生第三错误纠正码,第三单元数据UDb由按行方向排列的多个数据块D形成。根据期望实现的错误纠正能力和要使用的错误纠正码来决定作为产生第三错误纠正码的单元的数据块D的数量。
[0072] 使用与使用第二错误纠正码的错误纠正相比允许具有更高能力的错误纠正的错误纠正码作为第三错误纠正码,其执行多个比特的错误纠正。更具体地,可以使用Reed-Solomon(RS)码等作为第三错误纠正码。第一实施例被配置成为由1024个第一单元数据D形成的每一个第三单元数据UDb产生RS码,并把RS码的大小设置为512字节,和数据块D相同。第三ECC产生器53例如为每一个第三单元数据UDb产生四个RS码。因此,能够纠正组成第三单元数据UDb的1024个数据块D中的四个写数据中的错误。任何公知的装置可被用作第三ECC产生器53,因此,省略其详细说明。
[0073] 如图5中所示,当从主机装置1接收写数据D(1,1)到D(8,1024)时,控制器41在DRAM 20中按列方向顺序地存储八个数据块D(1,p)到D(8,p)作为第一ECC产生器51的处理的单元,并在DRAM 20中存储1024个第一单元数据D(q,1)到D(q,1024)作为第三ECC产生器53的处理的单元,并顺序地把所存储的数据逐列地转移到ECC电路42。其中p是1到1024的任意数字,并且q是1到8的任意数字。
[0074] 对应于按列方向排列的八个数据块D(1,p)到D(8,p),分别提供八个错误检测码产生器50-1到50-8。八个错误检测码产生器50-1到50-8为八个数据块D(1,p)到D(8,p)分别产生八个CRC。使用所述八个CRC来检测与其对应的八个数据块D(1,p)到D(8,p)中的错误。所述八个CRC被分别输出到第一ECC产生器51-1到51-8和第二ECC产生器52。注意,错误检测码产生器50-1到50-8分别为按列方向排列的八个RS(1,r)到RS(8,r)产生CRC,其中,r是1到4的任意数字。
[0075] 对应于按列方向排列的八个数据块D(1,p)到D(8,p),分别提供八个第一ECC产生器51-1到51-8。八个第一ECC产生器51-1到51-8为每一个第一单元数据产生Hamming码,或者分别从八个数据块D(1,p)到D(8,p)以及从八个CRC(1,p)到CRC(8,p)产生。八个Hamming码被分别用于对应的八个单元数据D(1,p)到D(8,p)的第一错误纠正。所述八个Hamming码被输出到第二ECC产生器52。第一ECC产生器51-1到51-8为八个RS(1,r)到RS(8,r)和按列方向排列的对应的八个CRC分别产生Hamming码,其中r是1到4的任意数字。
[0076] 第二ECC产生器52为由按列方向排列的八个第一单元数据形成的每一个第二单元数据UDa产生一个BCH码,或者为数据块D(1,p)到D(8,p)和对应的八个CRC(1,p)到CRC(8,p)产生一个BCH码。所述BCH码被用于第二单元数据UDa中的错误纠正(排除ECC1(1,p)到ECC 1(8,p))。在第一实施例中,由第二单元数据UDa和BCH码形成的数据的大小对应于一个页面(对NAND存储器10的最小存取单元)。
[0077] 第三ECC产生器53为由按行方向排列的1024个数据块D(q,1)到D(q,1024)形成的每一个第三单元数据UDb产生四个RS码。对应于存储在DRAM 20中的写数据行,提供了八个第三ECC产生器53-1到53-8。第三ECC产生器53包括其中存储第三单元数据UDb的缓冲器。具体来说,第三ECC产生器53-1为由数据D(1,1)到D(1,1024)形成的第三单元数据UDb1产生四个RS(1,1)到RS(1,4)。对于分别对应于第二到第八行的第三ECC产生器53-2到53-8也是如此。
[0078] 对于图6中所示的每一个页面,数据块D、CRC、Hamming码、BCH码和RS码被通过NAND I/F 43转移到NAND存储器10。NAND存储器10按页面的顺序在其中存储这些数据。例如,当一个存储器块由1028个页面形成时,图6中所示的数据被存储在NAND存储器10中的一个存储器块中(按8比特正常模式)。但是,在32比特模式(32比特正常模式或者
32比特双倍速模式)中,这些数据被并行写到每一个通道的存储器芯片。
[0079] 下面将参考图4到图9说明数据写操作以后ECC电路42的错误检测码产生操作和错误纠正码产生操作。
[0080] 首先,参考图5,针对每一个沿列方向的八个数据块D(1,p)到D(8,p),控制器41顺序地把作为要被写到NAND存储器10的对象的数据写到DRAM 20,在其中存储数据块D(1,1)到D(8,1024),并顺序地把所存储的八个数据块D(1,1)到D(8,1024)逐列分别输出到错误检测码产生器50-1到50-8、第一ECC产生器51-1到51-8、第二ECC产生器52、和第三ECC产生器53-1到53-8。
[0081] 然后,如图7中所示,错误检测码产生器50-1到50-8产生分别对应于接收到的八个数据块D(1,1)到D(8,1)的八个错误检测码CRC(1,1)到CRC(8,1)。第一ECC产生器51-1到51-8从八个写数据D(1,1)到D(8,1)和八个CRC(1,1)到CRC(8,1)分别产生Hamming码ECC 1(1,1)到ECC 1(8,1)。
[0082] 随后,如图8中所示,由八个数据块D(1,1)到D(8,1)和对应的八个错误检测码CRC(1,1)到CRC(8,1)形成的第二单元数据UDa 1被输出到第二ECC产生器52。第二ECC产生器52使用第二单元数据UDa 1产生BCH码ECC 2来纠正第二单元数据UDa 1中的错误。BCH码ECC 2被连接到第二单元数据UDa 1的末端以形成页面1(页面1)。页面1被存储在NAND存储器10中。
[0083] 图6中所示的用于页面2到页面1024的数据用与上面相同的产生操作产生。页面2到页面1024被存储在NAND存储器10中。
[0084] 如图9中所示,第三ECC产生器53-1到53-8顺序地把接收到的第一单元数据D(1,p)到D(8,p)逐列地分别存储在缓冲器中,并使用第三单元数据UDb1、UDb 2,...UDb 8来分别产生四个RS(q,1)到RS(q,4)。更具体地,第三ECC产生器53-1使用第三单元数据UDb1来产生四个RS(1,1)到RS(1,4)。由第三ECC产生器53-2到53-8执行的RS产生操作与第三ECC产生器53-1的操作相同。在第一实施例中,第三ECC产生器53-1到53-8相互并行地执行错误纠正码产生操作。第三ECC产生器53-1到53-8的并行操作允许减少处理时间。
[0085] 当使用RS码时,使用四个冗余码来一般地获取两个错误位置信息和两个错误纠正信息,因此,两个错误可以被纠正。但是,在第一实施例中,CRC被单独用来识别数据块D的错误位置。因此,在第一实施例中,使用四个冗余码可以纠正四个错误。具体来说,能够在1024个数据块D(1,1)到D(1,1024)中纠正四个错误。
[0086] 随后,错误检测码产生器50-1到50-8为每一个RS(1,1)到RS(8,4)分别产生CRC(1,1025)到CRC(8,1028),与数据块D类似。第一ECC产生器51-1到51-8分别为每一个RS(1,1)到RS(8,4)和每一个CRC(1,1025)到CRC(8,1028)产生Hamming码(1,1025)到(8,1028)。此外,第二ECC产生器52分别为RS(1,1)到RS(8,4)和对应的CRC(1,1025)到CRC(8,1028)产生BCH码ECC 2,并且BCH码ECC 2被分别连接到这些码的末端以形成页面1025到页面1028。页面1025到页面1028被转移到NAND存储器10,并存储于其中。利用这些操作,产生了如图6中所示的数据。
[0087] 图10是ECC电路42中的解码系统的主要部分的框图。图11到图19是用于说明ECC电路42中的数据读取的示意图。如图10中所示,ECC电路42包括八个错误检测单元60-1到60-8、八个第一ECC纠正单元61-1到61-8、第二ECC纠正单元62,以及八个第三ECC纠正单元63-1到63-8。在这个图中,省略了控制器41和NANDI/F 43以简化说明。
[0088] 在SSD 100中,当从主机装置1输入数据读取请求时,存储在NAND存储器10的一个存储器块中的块数据(图6中所示的数据)被通过NAND I/F 43(按8比特正常模式)读取,并且控制器41把读取的块数据存储在DRAM 20中。具体来说,DRAM 20在其中存储图6中所示的块数据。注意,在32比特模式(32比特正常模式或者32比特双倍速模式)中,块数据被并行地从通道的存储器芯片读取。
[0089] 八个第一ECC纠正单元61-1到61-8(或者,它们可以被表示为第一ECC纠正单元61)被对应于按列方向排列的八个数据块D(1,p)到D(8,p)和对应的CRC(1,p)到CRC(8,p)提供,或者,被对应于行数提供。
[0090] 第一ECC纠正单元61-1到61-8使用Hamming码ECC 1(1,p)到ECC 1(8,p)分别在按列方向排列的八个数据块D(1,p)到D(8,p)和CRC(1,p)到CRC(8,p)上执行第一错误纠正,并在存储在DRAM 20中的数据中更新对应于经过第一错误纠正的数据DC 1-1到DC1-8(图10)的数据。同样地,第一ECC纠正单元61-1到61-8分别在RS(1,1)到RS(8,4)和对应的CRC(1,1025)到CRC(8,1028)上执行第一错误纠正。任何公知的装置可以被用作第一ECC纠正单元61,因此省略其详细说明。
[0091] 八个错误检测单元60-1到60-8(或者,它们可以被表示为错误检测单元60)被对应于按列方向排列的八个数据块D(1,p)到D(8,p)和对应的CRC(1,p)到CRC(8,p)提供,或者被对应于行数提供。
[0092] 错误检测单元60-1到60-8分别使用为八个数据块D(1,p)到D(8,p)产生的八个CRC(1,p)到CRC(8,p)在第一单元数据D(1,p)到D(8,p)中检测错误。任何公知的装置可以被用作错误检测单元60,因此省略其详细说明。
[0093] 第二ECC纠正单元62使用为每一个页面产生的BCH码ECC 2在由八个第一单元数据D(1,p)到D(8,p)和对应的八个CRC(1,p)到CRC(8,p)形成的第二单元数据中执行第二错误纠正,并在存储在DRAM 20中的数据中更新对应于经过第二错误纠正的数据DC 2的数据。以和上面相同的方式在页面1025到1028上执行第二错误纠正。
[0094] 对应于按列方向排列的八个第一单元数据D(1,p)到D(8,p)提供八个第三ECC纠正单元63-1到63-8(或者,它们可以被表示为第三ECC纠正单元63)。第三ECC纠正单元63-1使用四个RS(1,1)到RS(1,4)在由按行方向排列的1024个读数据D(1,1)到D(1,1024)形成的第三单元数据UDb 1中执行第三错误纠正。同样地,第三ECC纠正单元63-2到63-8在第三单元数据UDb 2到UDb 8中执行第三错误纠正。任何公知的装置可以被用作第三ECC纠正单元63,因此省略其详细说明。
[0095] 在第一实施例中,所有的四个Reed-Solomon码RS(1,1)到RS(1,4)都被用于错误纠正。因此,第三ECC纠正单元63-1可以在1024个读数据D(1,1)到D(1,1024)中恢复四个读数据。分别对应于第二到第八行的第三ECC纠正单元63-2到63-8也是如此。由第三ECC纠正单元63-1到63-8纠正的经过第三错误纠正的数据DC 3被转移到DRAM 20,并且在存储在DRAM 20中的数据中,对应于经过第三错误纠正的数据DC 3的数据被更新。
[0096] 被第一ECC纠正单元61-1到61-8、第二ECC纠正单元62和第三ECC纠正单元63-1到63-8纠正的数据块D(1,1)到D(8,1024)的数据被控制器41转移到主机装置1。
[0097] 下面将参考图11到图19说明数据读取操作后ECC电路42的错误检测操作和错误纠正操作。
[0098] 在错误纠正操作之前,存储在NAND存储器10的一个存储器块中的块数据(图6中所示的数据)被转移到DRAM 20(按8比特正常模式)。即,DRAM 20在其中存储图6中所示的块数据。
[0099] 页面1到页面1028的数据被逐页面地(排除BCH码ECC 2)顺序地分别转移到第一ECC纠正单元61-1到61-8。第一ECC纠正单元61-1到61-8使用Hamming码ECC 1(1,1)到ECC 1(8,1028)在数据块D(1,1)到D(8,1024)和对应的CRC(1,1)到CRC(8,1024)上,以及逐页面地在RS(1,1)到RS(8,4)和对应的CRC(1,1025)到CRC(8,1028)上执行第一错误纠正,并且经过第一错误纠正的数据DCl-1到DCl-8被存储在DRAM 20中。
[0100] 随后,错误检测单元60执行错误检测操作。更具体地,经过第一错误纠正的第一单元数据D(1,1)到D(8,1024)和对应的CRC(1,1)到CRC(8,1024),以及经过第一错误纠正的RS(1,1)到RS(8,4)和对应的CRC(1,1025)到CRC(8,1028)被逐页面地从DRAM 20分别转移到错误检测单元60-1到60-8。
[0101] 错误检测单元60-1到60-8使用对应的CRC(1,1)到CRC(8,1028)分别在经过第一错误纠正的数据块D(1,1)到D(8,1024)和经过第一错误纠正的RS(1,1)到RS(8,4)中逐页面地检测错误。错误检测单元60-1到60-8逐页面地产生第一错误信息S1到S8,作为错误检测结果分别指示在哪个读数据块D和RS码RS中存在错误。第一错误信息S1到S8被转移到第二ECC纠正单元62。如果错误检测单元60-1到60-8分别检测到在数据块D中存在错误,则被纠正之前的数据块D而非经过第一错误纠正的数据DCl-1到DCl-8被转移到第二ECC纠正单元62。这是因为被错误检测单元60-1到60-8检测到其中存在错误的数据块D不可能被纠正,或者,数据块D包含超出了第一ECC纠正单元61-1到61-8的纠正能力的错误,并且由第一ECC纠正单元61-1到61-8执行的错误纠正导致了施加给数据块D的额外错误。结果,被纠正之前的数据包含比具有额外错误的数据更少的错误,因此,被纠正之前的数据被发送到第二ECC纠正单元62。对于RS(1,1)到RS(8,4)也是如此。
[0102] 图11是用于说明第一错误纠正之后的错误检测的示意图,并且图12是第一错误信息S1到S8的例子的示意图。在图11和图12中,如果作为第一错误纠正后错误检测的结果,存在不具有错误的第一单元数据,则用于该数据的第一错误信息被设置为S=0,而如果作为第一错误纠正后错误检测的结果存在具有错误的第一单元数据,则用于该数据的第一错误信息被设置为S=1。图11和图12的例子指示在第一单元数据1、4和5中存在错误。具有错误的第一单元数据是用于第二错误纠正的对象。
[0103] 在第一错误纠正后的第二单元数据UDa 1到UDa 1028和第一错误信息S1到S8被逐页面地转移到第二ECC纠正单元62。第二ECC纠正单元62通过使用包含在第二单元数据UDa中的BCH码ECC 2并参考第一错误信息S1到S8,在作为第二错误纠正的对象的第一单元数据上执行第二错误纠正。被第二ECC纠正单元62纠正的经过第二错误纠正的数据DC 2被转移到DRAM 20,并且存储在DRAM 20中的数据中对应于经过第二错误纠正的数据DC 2的数据被更新。
[0104] 随后,错误检测单元60-1到60-8执行错误检测操作。更具体地,经过第二错误纠正的数据块D(1,1)到D(8,1024)和对应的CRC(1,1)到CRC(8,1024),以及经过第二错误纠正的RS(1,1)到RS(8,4)和对应的CRC(1,1025)到CRC(8,1028)被逐页面地从DRAM 20分别转移到错误检测单元60-1到60-8。
[0105] 错误检测单元60-1到60-8使用对应的CRC(1,1)到CRC(8,1028)分别在经过第二错误纠正的数据块D(1,1)到D(8,1024)和经过第二错误纠正的RS(1,1)到RS(8,4)中检测错误。错误检测单元60-1到60-8逐页面地产生第二错误信息S1到S8,作为错误检测结果分别指示在哪个第一单元数据和RS码RS中存在错误。第二错误信息S1到S8被分别转移到第三ECC纠正单元63-1到63-8。和第一错误纠正的情况类似,如果作为错误检测单元60-1到60-8的检测结果有其中存在错误的数据块D,则被纠正之前的数据块D而非经过第二错误纠正的数据DC 2被分别转移到第三ECC纠正单元63-1到63-8。这是因为具有被错误检测单元60-1到60-8检测到的错误的数据块D不可能被纠正,或者,数据块D包括超出了第二ECC纠正单元62的纠正能力的错误,并且由第二ECC纠正单元62执行的错误纠正导致了施加给数据块D的额外错误。结果,被纠正之前的数据包含比具有额外错误的数据更少的错误,因此,被纠正之前的数据被发送到第三ECC纠正单元63-1到63-8。对于RS(1,1)到RS(8,4)也是如此。在第一实施例中,错误检测单元60-1到60-8并行地执行错误检测操作。错误检测单元60-1到60-8的并行操作允许减少处理时间。
[0106] 图13是用于说明在第二错误纠正后的错误检测的示意图,并且图14是第二错误纠正之后第二错误信息S1到S8的例子的示意图。在图13和图14中,如果作为第二错误纠正后错误检测的结果存在不具有错误的第一单元数据,则用于该数据的第二错误信息被设置为S=0,而如果作为第二错误纠正后错误检测的结果存在具有错误的块,则用于该块的第二错误信息被设置为S=1。图13和图14的例子指示在第一单元数据5中存在错误。具有错误的第一单元数据是用于第三错误纠正的对象。
[0107] 图15是在由第二ECC纠正单元62执行的第一轮错误纠正之后的块数据的例子的示意图。阴影线指示错误检测单元60-1到60-8在其中检测到错误的数据,因为错误不能被由第二ECC纠正单元62执行的第一轮错误纠正所纠正。
[0108] 如果作为由第二ECC纠正单元62执行的第一轮错误纠正的结果在所有的读数据中不存在错误,则在这个步骤结束错误纠正操作。即,以后说明的第三ECC纠正单元63将不执行错误纠正。例如,第三ECC纠正单元63通过停止来自电源电路5的电源,或者通过停止来自时钟电路(未示出)的时钟信号的供给来停止错误纠正操作。结果,当只有很少的错误时,数据读取时间可被减少。此外,第三ECC纠正单元63不执行错误纠正操作,并且这允许减少功耗。
[0109] 随后,由第三ECC纠正单元63执行第一轮错误纠正操作。更具体地,由按行方向排列的1024个数据块D(1,1)到D(1,1024)形成的第三单元数据UDb 1和与其对应产生的四个RS(1,1)到RS(1,4)被从DRAM 20发送到第三ECC纠正单元63-1。第三ECC纠正单元63-1使用RS(1,1)到RS(1,4)在数据块D(1,1)到D(1,1024)中执行错误纠正。对于对应于第二到第八行的第三ECC纠正单元63-2到63-8也是如此。
[0110] 在第一实施例中,第三ECC纠正单元63-1到63-8并行地执行错误纠正操作,并且其并行操作允许减少处理时间。被第三ECC纠正单元63-1到63-8纠正的经过第三错误纠正的数据DC 3被转移到DRAM 20。在存储在DRAM 20中的数据中,对应于经过第三错误纠正的数据DC 3的数据被更新。
[0111] 图16是在由第三ECC纠正单元63执行过第一轮第三错误纠正以后块数据的例子的示意图。读数据D(1,2)和D(1,6)中的错误被第三ECC纠正单元63-1纠正,如图16中所示,并且读数据D(8,1)和D(8,1022)中的错误被第三ECC纠正单元63-8纠正。
[0112] 如上面所说明的那样,在由第三ECC纠正单元63执行错误纠正之前,使用错误检测单元60来识别其中存在错误的读数据的位置。结果,第三ECC纠正单元63仅在其中检测到错误的读数据上执行错误纠正。这允许减少由第三ECC纠正单元63执行纠正的时间,并且也减少功耗。
[0113] 随后,由第二ECC纠正单元62在页面1到页面1028上执行第二轮的第二错误纠正。第二错误纠正操作和由第二ECC纠正单元62执行的第一轮的错误纠正相同。图17是在由第二ECC纠正单元62执行过第二轮第二错误纠正之后块数据的例子的示意图。读数据D(2,1)、D(3,2)和D(2,1022)中的错误被第二ECC纠正单元62纠正,如图17中所示。
[0114] 此后,错误检测单元60-1到60-8在所有的数据块D和RS码中检测错误。该错误检测操作和由错误检测单元60-1到60-8执行的第一轮错误检测操作相同。由第三ECC纠正单元63-1到63-8在第三单元数据UDb 1到UDb 8上分别执行第二轮的第三错误纠正。第三错误纠正操作和由第三ECC纠正单元63-1到63-8执行的第一轮的错误纠正相同。
[0115] 图18是在由第三ECC纠正单元63执行过第二轮第三错误纠正之后块数据的例子的示意图。数据块D(2,5)中的错误被第三ECC纠正单元63-2纠正。此外,数据块D(3,4)、D(3,7)和D(3,1023)中的错误被第三ECC纠正单元63-3纠正。利用这些操作,数据块D(1,1)到D(8,1024)中的所有错误都被纠正。
[0116] 此后,其中所有错误都被纠正的数据块D(1,1)到D(8,1024)被从DRAM 20输出到主机装置1。
[0117] 图19是自从写入数据到NAND存储器10所经过的时间和所需的纠正能力之间的关系的示意图。如图19中所示,如果经过的时间变得更长,则写到NAND存储器10的数据中的错误的数量增加。错误纠正能力因此与错误数量上的增加相关联地改变。此外,第一ECC纠正单元61到第三ECC纠正单元63的每一个错误纠正能力被判定,以便不使用过剩水平或者不足水平的错误纠正能力。更具体地,第一ECC纠正单元61到第三ECC纠正单元63的错误纠正能力被判定,以便当经过的时间较短时错误纠正只能由第一ECC纠正单元61执行,并且,在经过的时间已经经过预定的时间(当错误数量急剧增加时的时间)后,错误纠正可以被第一ECC纠正单元61、第二ECC纠正单元62和第三ECC纠正单元63执行。
[0118] 如上面所说明的那样,根据第一实施例,能够在读数据上首先使用第一错误纠正码(Hamming码)执行第一错误纠正,然后在第一错误纠正的结果上使用第二错误纠正码(BCH码)执行第二错误纠正,并且在第二错误纠正的结果上使用第三错误纠正码(RS码)进一步执行第三错误纠正。因此,即使第一错误纠正码到第三错误纠正码的错误纠正能力被降低,也可以保证期望的纠正能力,并且电路规模也可以被减小。
[0119] 使用具有低水平错误纠正能力的第一错误纠正码(Hamming码)、具有中等水平错误纠正能力的第二错误纠正码(BCH码)以及具有高水平错误纠正能力的第三错误纠正码(RS码),错误纠正被三重地执行,并且这能够极大地降低高水平错误纠正的解码的频率。结果,即使不提供硬件,使用软件也能够令人满意地执行错误纠正,这使电路规模得以减小。
[0120] 当确定在所有读数据中不存在错误时,作为由第一ECC纠正单元61执行的第一错误纠正的结果,第二ECC纠正单元62和第三ECC纠正单元63不执行错误纠正。因此,当只有很少的错误时,数据读取时间可被减少。更具体地,当只有很少的错误时数据读取时间上的减少与当存在很多错误时具有高纠正能力的性能相容。此外,通过停止第二ECC纠正单元62和第三ECC纠正单元63的操作,功耗可以被降低。
[0121] 此外,使用第二错误纠正码(BCH码)来按列方向在数据上执行错误纠正,而使用第三错误纠正码(RS码)来按行方向在数据上执行错误纠正。这些纠正允许NAND存储器10的存储器块中所有页面上的错误纠正。而且,第一实施例对于其中因要存储的数据的位置所致错误概率大大不同的半导体存储器特别有用,因为可以在具有高错误概率的区域上执行很多次错误纠正。
[0122] 使用错误检测单元60来实现识别其中存在错误的数据的位置,因此,第二ECC纠正单元62和第三ECC纠正单元63只须在其中检测到错误的读数据上执行错误纠正。这使得能够减少第二ECC纠正单元62和第三ECC纠正单元63的处理时间。
[0123] 此外,因为使用错误检测码(CRC)可以检测其中存在错误的数据的位置,第三ECC纠正单元63无需执行错误检测。这使得所有RS码(在第一实施例中的四个RS码)能够用于错误纠正。
[0124] 下面将参考图20到图22说明根据本发明的第二实施例的SSD。第二实施例被配置成使得SSD 100执行第一和第二错误纠正,而主机装置201而非SSD 100执行具有高水平错误纠正能力的第三错误纠正。这种配置允许减少SSD 100上的负载,因为几乎所有的错误都可以被第一和第二错误纠正纠正,而第三错误纠正与其他的错误纠正相比使用得远远不那么频繁,却要求长的处理时间。
[0125] 图20是用于说明根据第二实施例的错误纠正的原理的示意图。图21是根据第二实施例的SSD 100和主机装置201的配置的示意图。参考图20,第一错误纠正(A)和第二错误纠正(B)由SSD 100执行,而第三错误纠正(C)及此后的处理由主机装置201执行。
[0126] 如图21中所示,主机装置201包括:使用CRC在每一个数据块D中检测错误的错误检测单元101、使用BCH码(第二错误纠正码)执行第二错误纠正的第二ECC纠正单元102,以及使用RS码(第三错误纠正码)执行第三错误纠正的第三ECC纠正单元103。主机装置201的CPU执行软件以允许错误检测单元101、第二ECC纠正单元102和第三ECC纠正单元103的实施。
[0127] SSD 100把经过第二错误纠正的数据块D(1,1)到D(8,1024)和对应的CRC(1,1)到CRC(8,1024)、RS(1,1)到RS(8,4)以及对应的CRC(1,1025)到CRC(8,1028)、ECC 1(1,1)到ECC 1(8,1028)和第二错误信息传送到主机装置201。
[0128] 主机装置201使用第二错误信息在从SSD 100接收到的经过第二错误纠正的数据上执行第三错误纠正,并使用CRC检查纠正的结果。如果检测到错误,则第二错误纠正被再次执行,并且第二和第三错误纠正被交替地重复,直到错误被消除为止(执行图15到图19中的处理)。
[0129] 图22是根据第二实施例的ECC电路242中的解码系统的主要部分的框图。ECC电路242中的解码系统无需包含第三ECC纠正单元,因此,电路规模可被减小。
[0130] 根据第二实施例,因为第三错误纠正被主机装置201执行,所以无需由SSD 100执行第三错误纠正,这使得SSD 100上的负荷和电路规模得以减小。
[0131] 在第二实施例中,本发明被应用于具有NAND存储器的SSD,但是,本发明可以被应用于具有例如NOR型存储器的其他快闪电可擦除可编程只读存储器(EEPROM)的任何SSD。
[0132] 工业适用性
[0133] 根据本发明,能够提供能减少功耗和电路规模而不损害错误纠正能力的半导体存储装置、用于控制其的方法和错误纠正系统。
QQ群二维码
意见反馈