KR102673873B1 - 데이터 복구 방법 및 이를 적용하는 메모리 시스템 및 레이드 스토리지 시스템 - Google Patents
데이터 복구 방법 및 이를 적용하는 메모리 시스템 및 레이드 스토리지 시스템 Download PDFInfo
- Publication number
- KR102673873B1 KR102673873B1 KR1020160082977A KR20160082977A KR102673873B1 KR 102673873 B1 KR102673873 B1 KR 102673873B1 KR 1020160082977 A KR1020160082977 A KR 1020160082977A KR 20160082977 A KR20160082977 A KR 20160082977A KR 102673873 B1 KR102673873 B1 KR 102673873B1
- Authority
- KR
- South Korea
- Prior art keywords
- codeword
- ecc decoding
- code
- target
- ecc
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 151
- 238000011084 recovery Methods 0.000 title claims abstract description 139
- 238000012545 processing Methods 0.000 claims abstract description 214
- 230000008569 process Effects 0.000 claims description 110
- 239000011159 matrix material Substances 0.000 claims description 92
- 238000010586 diagram Methods 0.000 description 30
- 101100481702 Arabidopsis thaliana TMK1 gene Proteins 0.000 description 14
- 238000012937 correction Methods 0.000 description 11
- 238000001514 detection method Methods 0.000 description 7
- 238000013507 mapping Methods 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 101100049574 Human herpesvirus 6A (strain Uganda-1102) U5 gene Proteins 0.000 description 4
- 101150064834 ssl1 gene Proteins 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 101150062870 ssl3 gene Proteins 0.000 description 3
- 101001114057 Homo sapiens P antigen family member 1 Proteins 0.000 description 2
- 102100023219 P antigen family member 1 Human genes 0.000 description 2
- 101000882406 Staphylococcus aureus Enterotoxin type C-1 Proteins 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000001808 coupling effect Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000005684 electric field Effects 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 101100481704 Arabidopsis thaliana TMK3 gene Proteins 0.000 description 1
- 101150013204 MPS2 gene Proteins 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 239000004020 conductor Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 239000012212 insulator Substances 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/27—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques
- H03M13/2703—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques the interleaver involving at least two directions
- H03M13/2707—Simple row-column interleaver, i.e. pure block interleaving
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
- H03M13/45—Soft decoding, i.e. using symbol reliability information
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/61—Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
- H03M13/615—Use of computational or mathematical techniques
- H03M13/616—Matrix operations, especially for generator matrices or check matrices, e.g. column or row permutations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/40—Specific encoding of data in memory or cache
- G06F2212/403—Error protection encoding, e.g. using parity or ECC codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1515—Reed-Solomon codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/152—Bose-Chaudhuri-Hocquenghem [BCH] codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/29—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2957—Turbo codes and decoding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Physics (AREA)
- Mathematical Optimization (AREA)
- Human Computer Interaction (AREA)
- Computational Mathematics (AREA)
- Algebra (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
데이터 복구 방법 및 이를 적용하는 메모리 시스템 및 레이드 스토리지 시스템에 관하여 개시한다. 데이터 복구 방법은 타깃 코드워드의 입력에 대한 ECC 디코딩 처리에 실패한 경우에 상기 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 메모리 장치로부터 읽어내는 단계, 상기 타깃 코드워드 및 상기 참조 코드워드들을 이용한 연산 처리에 기초하여 수정된 타깃 코드워드의 디코더 입력을 생성하는 단계 및, 상기 수정된 타깃 코드워드의 디코더 입력에 대한 ECC 디코딩 처리를 다시 수행하는 단계를 포함한다.
Description
본 발명의 기술적 사상은 데이터 처리 방법 및 장치에 관한 것으로서, 데이터 복구 방법 및 이를 적용하는 메모리 시스템 및 레이드 스토리지 시스템에 관한 것이다.
데이터 저장 장치 기술 분야에서 정보 전송 또는 저장에 신뢰성을 부여하기 위하여 매우 낮은 수준의 비트 오류율(bit error rate)이 요구된다. 오류 정정을 위하여 터보(turbo) 코드 또는 저밀도 패리티 체크(low density parity check, LDPC) 코드가 이용되고 있으나, 메모리의 집적도가 높은 데이터 저장 장치에서는 이들 부호를 단독으로 이용하여 시스템이 요구하는 매우 낮은 수준의 비트 오류율을 달성하기 어려운 실정이다. 이에 따라서, 효율적인 데이터 복구 기술이 필요하게 되었다.
본 발명의 기술적 사상이 해결하려는 과제는 코드 연관성이 있는 코드워드들을 이용하여 타깃 코드워드를 효율적으로 복구하기 위한 데이터 복구 방법을 제공하는데 있다.
본 발명의 기술적 사상이 해결하려는 다른 과제는 코드 연관성이 있는 코드워드들을 이용하여 타깃 코드워드를 효율적으로 복구하는 메모리 시스템을 제공하는데 있다.
본 발명의 기술적 사상이 해결하려는 또 다른 과제는 코드 연관성이 있는 코드워드들을 이용하여 타깃 코드워드를 효율적으로 복구하는 레이드 스토리지 시스템을 제공하는데 있다.
본 발명의 기술적 사상의 일면에 따른 데이터 복구 방법은 타깃 코드워드의 입력에 대한 ECC 디코딩 처리에 실패한 경우에 상기 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 메모리 장치로부터 읽어내는 단계, 상기 타깃 코드워드 및 상기 참조 코드워드들을 이용한 연산 처리에 기초하여 수정된 타깃 코드워드의 디코더 입력을 생성하는 단계 및, 상기 수정된 타깃 코드워드의 디코더 입력에 대한 ECC 디코딩 처리를 다시 수행하는 단계를 포함한다.
발명의 기술적 사상의 다른 면에 따른 메모리 시스템은 데이터를 저장하는 메모리 장치 및, 상기 메모리 장치로부터 읽어낸 데이터에 기초하여 타깃 코드워드를 복구하는 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 상기 타깃 코드워드의 입력에 대한 ECC 디코딩 처리에 실패한 경우에 상기 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 상기 메모리 장치로부터 읽어내고, 상기 타깃 코드워드 및 상기 참조 코드워드들을 이용한 연산 처리에 기초하여 수정된 타깃 코드워드의 디코더 입력을 생성하고, 상기 수정된 타깃 코드워드의 디코더 입력에 대한 ECC 디코딩 처리를 다시 실행하는 것을 특징으로 한다.
발명의 기술적 사상의 또 다른 면에 따른 레이드 스토리지 시스템은 복수의 스토리지 디바이스들 및, 상기 복수의 스토리지 디바이스들 중에서 동일한 스트라이프를 형성하는 2개 이상의 스토리지 디바이스들에서 읽어낸 코드워드들에 대한 ECC 디코딩 처리에 실패하는 경우에 ECC 디코딩 처리에 실패한 스토리지 디바이스들로부터 수신되는 소프트 입력 및 ECC 디코딩 처리에 성공한 스토리지 디바이스들로부터 수신되는 디코딩 결과를 이용하여 코드 연관성에 따른 연산 처리에 기초하여 상기 ECC 디코딩 처리에 실패한 코드워드의 소프트 입력을 수정하고, 상기 수정된 코드워드의 소프트 입력 ECC 디코딩 처리를 수행하는 레이드 컨트롤러를 포함한다.
본 발명에 따르면 데이터 복구 시간 및 신뢰성을 개선하고, 낮은 복잡도의 컨트롤러 설계를 가능하게 하는 효과가 발생된다.
본 발명에 따르면 RAID가 적용되는 시스템에서 스트라이프를 구성하는 2개 이상의 스토리지 또는 메모리 장치에서 ECC 디코딩 처리에 실패하는 경우에도 ECC 디코딩을 수행할 코드워드 입력을 논리적으로 수정함으로써 데이터를 성공적으로 복원할 수 있는 효과가 발생된다.
도 1은 본 발명의 기술적 사상에 따른 메모리 시스템 구성을 예시적으로 보여준다.
도 2는 본 발명에 따른 적용되는 다차원 코드의 코드 매트릭스 구조를 예시적으로 보여준다.
도 3a는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 일 예를 보여준다.
도 3b는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 다른 예를 보여준다.
도 3c는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 또 다른 예를 보여준다.
도 3d는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 또 다른 예를 보여준다.
도 3e는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 또 다른 예를 보여준다.
도 3f는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 또 다른 예를 보여준다.
도 4는 도 1에 도시된 메모리 장치의 구성을 예시적으로 보여준다.
도 5는 도 4에 도시된 메모리 셀 어레이의 일 예를 나타낸다.
도 6은 도 5에 도시된 메모리 셀 어레이에 포함된 메모리 블록의 일 예를 나타내는 회로도이다.
도 7은 도 5에 도시된 메모리 셀 어레이에 포함된 메모리 블록의 다른 예를 나타내는 회로도이다.
도 8은 도 6 또는 도 7에 도시된 메모리 블록에 포함된 메모리 셀의 일 예를 보여주는 단면도이다.
도 9는 도 1의 메모리 시스템에서의 하드 디시젼 리드 동작에 따른 하드 데이터를 생성하는 방법에 대한 예를 보여주는 도면이다.
도 10은 도 1의 메모리 시스템에서의 소프트 디시젼 리드 동작에 따른 소프트 데이터를 생성하는 방법에 대한 예를 보여주는 도면이다.
도 11은 도 1의 메모리 시스템에서의 추가적인 소프트 디시젼 리드 동작에 따른 소프트 데이터를 생성하는 방법에 대한 예를 보여주는 도면이다.
도 12는 도 1에 도시된 메모리 컨트롤러에 대한 구성의 일 예를 보여준다.
도 13은 도 1에 도시된 메모리 컨트롤러에 대한 구성의 다른 예를 보여준다.
도 14는 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 과정을 개략적으로 보여주는 도면이다.
도 15는 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 하나의 사례를 보여주는 도면이다.
도 16은 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 다른 사례를 보여주는 도면이다.
도 17은 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 18은 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 19는 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 20은 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 21은 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 22a 및 도 22b는 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 23은 본 발명의 기술적 사상에 따른 레이드 스토리지 시스템 구성을 예시적으로 보여준다.
도 24는 도 23에 도시된 레이드 컨트롤러에 대한 구성의 일 예를 보여준다.
도 25는 도 23에 도시된 레이드 컨트롤러에 대한 구성의 다른 예를 보여준다.
도 26은 도 23에 도시된 하나의 스토리지 디바이스에 대한 블록 구성을 예시적으로 보여준다.
도 27은 본 발명의 기술적 사상에 따른 데이터 복원 방법의 흐름도이다.
도 28은 도 27에 도시된 타깃 코드워드를 수정하는 단계에 대한 세부적인 흐름도를 보여준다.
도 29는 도 28에 도시된 수정된 타깃 코드워드를 생성하는 단계에 대한 세부적인 흐름도를 보여준다.
도 30은 도 29에 도시된 타깃 코드워드를 수정하는 단계에 대한 세부적인 흐름도를 보여준다.
도 31는 도 27의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
도 32는 도 31의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
도 33은 도 28의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
도 34는 도 27의 흐름도에 추가될 수 있는 단계들의 다른 예를 보여주는 흐름도이다.
도 35는 도 33 또는 도 34의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
도 2는 본 발명에 따른 적용되는 다차원 코드의 코드 매트릭스 구조를 예시적으로 보여준다.
도 3a는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 일 예를 보여준다.
도 3b는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 다른 예를 보여준다.
도 3c는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 또 다른 예를 보여준다.
도 3d는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 또 다른 예를 보여준다.
도 3e는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 또 다른 예를 보여준다.
도 3f는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 또 다른 예를 보여준다.
도 4는 도 1에 도시된 메모리 장치의 구성을 예시적으로 보여준다.
도 5는 도 4에 도시된 메모리 셀 어레이의 일 예를 나타낸다.
도 6은 도 5에 도시된 메모리 셀 어레이에 포함된 메모리 블록의 일 예를 나타내는 회로도이다.
도 7은 도 5에 도시된 메모리 셀 어레이에 포함된 메모리 블록의 다른 예를 나타내는 회로도이다.
도 8은 도 6 또는 도 7에 도시된 메모리 블록에 포함된 메모리 셀의 일 예를 보여주는 단면도이다.
도 9는 도 1의 메모리 시스템에서의 하드 디시젼 리드 동작에 따른 하드 데이터를 생성하는 방법에 대한 예를 보여주는 도면이다.
도 10은 도 1의 메모리 시스템에서의 소프트 디시젼 리드 동작에 따른 소프트 데이터를 생성하는 방법에 대한 예를 보여주는 도면이다.
도 11은 도 1의 메모리 시스템에서의 추가적인 소프트 디시젼 리드 동작에 따른 소프트 데이터를 생성하는 방법에 대한 예를 보여주는 도면이다.
도 12는 도 1에 도시된 메모리 컨트롤러에 대한 구성의 일 예를 보여준다.
도 13은 도 1에 도시된 메모리 컨트롤러에 대한 구성의 다른 예를 보여준다.
도 14는 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 과정을 개략적으로 보여주는 도면이다.
도 15는 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 하나의 사례를 보여주는 도면이다.
도 16은 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 다른 사례를 보여주는 도면이다.
도 17은 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 18은 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 19는 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 20은 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 21은 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 22a 및 도 22b는 도 1의 메모리 시스템에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 23은 본 발명의 기술적 사상에 따른 레이드 스토리지 시스템 구성을 예시적으로 보여준다.
도 24는 도 23에 도시된 레이드 컨트롤러에 대한 구성의 일 예를 보여준다.
도 25는 도 23에 도시된 레이드 컨트롤러에 대한 구성의 다른 예를 보여준다.
도 26은 도 23에 도시된 하나의 스토리지 디바이스에 대한 블록 구성을 예시적으로 보여준다.
도 27은 본 발명의 기술적 사상에 따른 데이터 복원 방법의 흐름도이다.
도 28은 도 27에 도시된 타깃 코드워드를 수정하는 단계에 대한 세부적인 흐름도를 보여준다.
도 29는 도 28에 도시된 수정된 타깃 코드워드를 생성하는 단계에 대한 세부적인 흐름도를 보여준다.
도 30은 도 29에 도시된 타깃 코드워드를 수정하는 단계에 대한 세부적인 흐름도를 보여준다.
도 31는 도 27의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
도 32는 도 31의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
도 33은 도 28의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
도 34는 도 27의 흐름도에 추가될 수 있는 단계들의 다른 예를 보여주는 흐름도이다.
도 35는 도 33 또는 도 34의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
이하, 첨부한 도면을 참조하여 본 발명의 실시 예에 대해 상세히 설명한다.
도 1은 본 발명의 기술적 사상에 따른 메모리 시스템(100)의 구성을 예시적으로 보여준다.
도 1을 참조하면, 메모리 시스템(100)은 메모리 장치(10) 및 메모리 컨트롤러(20)를 포함한다.
메모리 장치(10)는 비휘발성 메모리 디바이스로 구현할 수 있다. 예로서, 메모리 장치(10)는 플래시 메모리 디바이스, PRAM(Phase change RAM), FRAM(Ferroelectric RAM), MRAM(Magnetic RAM) 디바이스 등으로 구성될 수 있다. 메모리 장치(10)는 적어도 하나의 비휘발성 메모리 디바이스들과 적어도 하나의 휘발성 메모리 디바이스들이 혼합된 형태로 구성될 수 있고, 적어도 두 종류 이상의 비휘발성 메모리 디바이스들이 혼합된 형태로 구성될 수도 있다.
예로서, 메모리 장치(10)는 단일의 메모리 칩으로 구성할 수 있다. 다른 예로서, 메모리 장치(10)는 복수의 메모리 칩들로 구성할 수도 있다. 하나의 메모리 칩은 단일의 다이(Die) 또는 복수개의 다이들로 구성될 수 있다. 하나의 다이는 단일의 플레인(Plane) 또는 복수개의 플레인들로 구성될 수 있다. 하나의 플레인은 복수개의 메모리 블록(Block)들을 포함하고, 메모리 블록들 각각은 복수개의 페이지(Page)들을 포함하고, 페이지들 각각은 복수개의 섹터(Sector)들을 포함한다.
메모리 컨트롤러(20)는 메모리 장치(10)에 대한 제어 동작을 수행한다. 예로서, 메모리 컨트롤러(20)는 메모리 장치(10)를 제어하기 위한 어드레스(ADDR), 커맨드(CMD) 및 제어 신호(CTRL)를 생성할 수 있다. 그리고, 메모리 컨트롤러(20)는 메모리 장치(10)에 어드레스(ADDR), 커맨드(CMD) 및 제어 신호(CTRL)를 제공함으로써, 메모리 장치(10)에 대한 프로그램(program)(또는 쓰기), 독출(read) 및 소거(erase) 동작을 제어할 수 있다.
메모리 컨트롤러(20)는 메모리 장치(10)에 대한 하드 디시젼 리드(hard decision read) 동작 또는 소프트 디시젼 리드(soft decision read) 동작을 수행하는 제어 신호를 생성할 수도 있다.
예로서, 메모리 컨트롤러(20)는 메모리 장치(10)에 포함된 복수개의 메모리 칩들로 스트라이프(stripe)를 구성할 수 있다. 다른 예로서, 메모리 컨트롤러(20)는 메모리 장치(10)에 포함된 복수개의 다이들로 스트라이프(stripe)를 구성할 수 있다. 또 다른 예로서, 메모리 컨트롤러(20)는 메모리 장치(10)에 포함된 복수개의 플레인들로 스트라이프(stripe)를 구성할 수 있다. 또 다른 예로서, 메모리 컨트롤러(20)는 메모리 장치(10)에 포함된 복수개의 블록들, 복수개의 페이지들 또는 복수개의 섹터들 중의 어느 하나에 기초하여 스트라이프(stripe)를 구성할 수도 있다.
예로서, 메모리 장치(10)의 3차원 수직 구조의 낸드(vertical NAND, VNAND) 플래시 메모리 셀 구조에서 각기 다른 평면에 속하는 메모리 셀들로 구성되는 메모리 블록들, 페이지들 또는 섹터들 중의 어느 하나로 스트라이프를 구성할 수 있다. 다른 예로서, 메모리 장치(10)의 3차원 수직 구조의 낸드(vertical NAND, VNAND) 플래시 메모리 셀 구조에서 동일한 평면에 속하는 메모리 셀들로 구성되는 메모리 블록들, 페이지들 또는 섹터들 중의 어느 하나로 스프라이프를 구성할 수 있다.
메모리 컨트롤러(20)는 메모리 장치(10)로부터 스트라이프 단위로 읽어낸 데이터에 기초하여 다차원 코드(multi-dimensional code)를 생성할 수 있다. 예로서, 스트라이프(stripe)는 레이드(RAID; Redundant Array of Inexpensive Disk) 방식에 따른 스트라이프가 적용될 수 있다.
메모리 컨트롤러(20)는 리커버리 모듈(21) 및 ECC 디코더(22)를 포함한다.
ECC 디코더(22)는 메모리 장치(10)로부터 읽어낸 데이터에 대한 에러 검출 및 정정 처리를 수행한다. 예로서, LDPC(low density parity check) code, BCH code, turbo code, 컨볼루션 코드(convolution code) 등을 이용하여 에러 정정 처리를 수행할 수 있다.
리커버리 모듈(21)는 ECC 디코더(22)에서 타깃 코드워드에 대한 ECC 디코딩 처리에 실패한 경우에 ECC 디코딩 처리에 실패한 데이터에 대한 복원하기 위하여 수정된 타깃 코드워드를 생성하는 연산 처리를 수행한다. 여기에서, 타깃 코드워드는 호스트(도면에 미도시)로부터 리드(READ) 요청된 데이터를 구성하는 ECC 디코딩 처리 단위의 코드워드이다.
예로서, ECC 디코더(22)에서의 타깃 코드워드에 대한 ECC 디코딩 처리에 실패한 경우에 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들 및 ECC 디코딩 처리에 실패 타깃 코드워드를 이용한 연산 처리에 기초하여 수정된 타깃 코드워드를 생성할 수 있다. 예로서, 참조 코드워드들은 타깃 코드워드와 동일한 스트라이프를 형성하는 메모리 장치(10)의 저장 영역에서 읽어낸 코드워드들을 포함할 수 있다. ECC 디코더(22)는 메모리 장치(10)에서 읽어낸 참조 코드워드에 대하여 에러 검출 및 정정 처리를 위한 ECC 디코딩 처리를 수행한다.
예로서, 리커버리 모듈(21)은 ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과, ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력 및 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력을 이용하여 코드 연관성에 따른 연산 처리에 기초하여 타깃 코드워드에 대한 수정된 디코더 입력을 생성할 수 있다. 여기에서, 소프트 입력은 소프트 디시젼 리드 동작에 따라 메모리 장치(10)로부터 읽어낸 메모리 셀 단위의 사인(sign) 비트와 신뢰도 비트를 포함하는 코드 비트 정보들로 구성된다.
리커버리 모듈(21)은 ECC 디코더(22)에서의 참조 코드워들 중 적어도 하나의 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에 참조 코드워드의 디코딩 결과, 참조 코드워드의 소프트 입력 및 타깃 코드워드의 소프트 입력으로 구성되는 코드 매트릭스로부터 코드 제약 조건을 만족시키지 못하는 후보 코드워드를 검출하고, 후보 코드워드에 포함된 코드 비트들에 대한 신뢰도에 기초하여 타깃 코드워드의 디코더 입력을 수정하는 연산 처리를 수행한다.
ECC 디코더(22)는 타깃 코드워드에 대한 ECC 디코딩 처리에 실패한 경우에, 리커버리 모듈(21)로부터 입력되는 수정된 타깃 코드워드에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원할 수 있다.
도 2는 본 발명에 따른 적용되는 다차원 코드의 코드 매트릭스 구조를 예시적으로 보여준다.
다차원 코드는 코드 매트릭스를 다차원으로 구성할 수 있는 코드를 의미한다. 예로서, 다차원 코드는 프로덕트(product code)를 포함할 수 있다. 다차원 코드의 코드 매트릭스는 2개 방향의 코드워드들로 구성될 수 있다. 예로서, 다차원 코드의 코드 매트릭스는 스트라이프를 구성하는 메모리 장치(10)의 저장 영역들로부터 읽어낸 코드워드들로 구성될 수 있다.
도 2를 참조하면, 다차원 코드의 코드 매트릭스는 복수개의 수평 코드워드들과 복수개의 수직 코드워드들로 구성된다. 예로서, 복수개의 수평 코드워드들 중의 첫 번째 수평 코드워드를 'HCW1'으로 표시하였으며, 복수개의 수직 코드워드들 중의 첫 번째 수직 코드워드를 'VCW1'로 표시하였다. 수평 코드워드들 및 수직 코드워드들 각각은 복수개의 코드 비트(CB)들로 구성된다.
예로서, LDPC code, BCH code, turbo code, 컨볼루션 코드 등의 ECC(error-correcting code)가 수평 코드워드로 사용될 수 있으며, RAID-5에 적용되는 bit-wise XOR 코드가 수직 코드워드로 사용될 수 있다. 다른 예로서, RAID-6에 적용되는 리드-솔로몬(Reed-Solomon) 코드가 수직 코드워드로 사용될 수 있다.
도 3a 내지 도 3f는 도 1의 메모리 시스템에서의 스트라이프를 구성하는 다양한 사례들을 보여준다.
도 3a는 메모리 장치(10)에 포함된 다이(Die)들로 스트라이프를 구성하는 예를 보여준다. 메모리 장치(10)는 복수개의 다이들(10A-1 ~ 10A-N+1)을 포함할 수 있다. 예로서, N(N은 2 이상의 정수)개의 다이들(10A-1 ~ 10A-N)로 스트라이프를 구성하고, 하나의 다이(10A-N+1)를 스페어 다이(spare die)로 할당할 수 있다. 예로서, 스페어 다이(10A-N+1)는 스트라이프를 구성하는 복수개의 다이들(10A-1 ~ 10A-N+1)에서 ECC 디코딩 처리에 실패하여 복구된 데이터를 저장하는 용도로 사용될 수 있다. 다른 예로서, 스페어 다이(10A-N+1)를 사용하지 않고, ECC 디코딩 처리에 실패하여 복구된 데이터를 복수개의 다이들(10A-1 ~ 10A-N) 중의 어느 하나의 다이의 다른 물리적 주소에 저장할 수도 있다.
메모리 시스템(100A)의 메모리 컨트롤러(20A)는 스트라이프를 구성하는 복수개의 다이들(10A-1 ~ 10A-N)에 나뉘어 저장된 코드워드들(HCW1 ~ HCWN)를 읽어내어 도 2에 도시된 바와 같은 다차원 코드의 코드 매트릭스를 생성할 수 있다. 예로서, 다이들(10A-1 ~ 10A-N)로부터 읽어낸 코드워드들(HCW1 ~ HCWN)로 다차원 코드의 코드 매트릭스의 수평 코드워드들(HCW1 ~ HCWN)을 생성할 수 있다.
도 3b는 메모리 장치(10)에 포함된 플레인(Plane)들로 스트라이프를 구성하는 예를 보여준다. 메모리 장치(10)는 복수개의 플레인들(10B-1 ~ 10B-N+1)을 포함할 수 있다. 예로서, N(N은 2 이상의 정수)개의 플레인들(10B-1 ~ 10B-N)로 스트라이프를 구성하고, 하나의 플레인(10B-N+1)를 스페어 플레인(spare plane)으로 할당할 수 있다. 예로서, 스페어 플레인(10B-N+1)는 스트라이프를 구성하는 복수개의 플레인들(10B-1 ~ 10B-N+1)에서 ECC 디코딩 처리에 실패하여 복구된 데이터를 저장하는 용도로 사용될 수 있다. 다른 예로서, 스페어 플레인(10B-N+1)을 사용하지 않고, ECC 디코딩 처리에 실패하여 복구된 데이터를 복수개의 플레인들(10B-1 ~ 10B-N) 중의 어느 하나의 플레인의 다른 물리적 주소에 저장할 수도 있다.
메모리 시스템(100B)의 메모리 컨트롤러(20B)는 스트라이프를 구성하는 복수개의 플레인들(10B-1 ~ 10B-N)에 나뉘어 저장된 코드워드들(HCW1 ~ HCWN)를 읽어내어 도 2와 같은 다차원 코드의 코드 매트릭스를 생성할 수 있다. 예로서, 플레인들(10B-1 ~ 10B-N)로부터 읽어낸 코드워드들(HCW1 ~ HCWN)로 다차원 코드의 코드 매트릭스의 수평 코드워드들(HCW1 ~ HCWN)을 생성할 수 있다.
도 3c는 메모리 장치(10)에 포함된 메모리 블록(Block)들로 스트라이프를 구성하는 예를 보여준다. 메모리 장치(10)는 복수개의 메모리 블록들(10C-1 ~ 10C-N+1)을 포함할 수 있다. 예로서, N(N은 2 이상의 정수)개의 메모리 블록들(10C-1 ~ 10C-N)로 스트라이프를 구성하고, 적어도 하나의 메모리 블록(10C-N+1)를 스페어 블록(spare block)으로 할당할 수 있다. 예로서, 스페어 블록(10C-N+1)는 스트라이프를 구성하는 복수개의 메모리 블록들(10C-1 ~ 10C-N)에서 ECC 디코딩 처리에 실패하여 복구된 데이터를 저장하는 용도로 사용될 수 있다. 다른 예로서, 스페어 블록(10C-N+1)을 사용하지 않고, ECC 디코딩 처리에 실패하여 복구된 데이터를 복수개의 메모리 블록들(10C-1 ~ 10C-N) 중의 어느 하나의 메모리 블록의 다른 물리적 주소에 저장할 수도 있다.
메모리 시스템(100C)의 메모리 컨트롤러(20C)는 스트라이프를 구성하는 복수개의 메모리 블록들(10C-1 ~ 10C-N)에 나뉘어 저장된 코드워드들(HCW1 ~ HCWN)를 읽어내어 도 2와 같은 다차원 코드의 코드 매트릭스를 생성할 수 있다. 예로서, 메모리 블록들(10C-1 ~ 10C-N)로부터 읽어낸 코드워드들(HCW1 ~ HCWN)로 다차원 코드의 코드 매트릭스의 수평 코드워드들(HCW1 ~ HCWN)을 생성할 수 있다.
도 3d는 메모리 장치(10)에 포함된 페이지(page)들로 스트라이프를 구성하는 예를 보여준다. 메모리 장치(10)는 복수개의 페이지들(10D-1 ~ 10D-N+1)을 포함할 수 있다. 예로서, N(N은 2 이상의 정수)개의 페이지들 복수개의 페이지들(10D-1 ~ 10D-N)로 스트라이프를 구성하고, 적어도 하나의 페이지(10D-N+1)를 스페어 페이지(spare page)로 할당할 수 있다. 예로서, 스페어 페이지(10D-N+1)는 스트라이프를 구성하는 복수개의 페이지들(10D-1 ~ 10D-N)에서 ECC 디코딩 처리에 실패하여 복구된 데이터를 저장하는 용도로 사용될 수 있다. 다른 예로서, 스페어 페이지(10D-N+1)를 사용하지 않고, ECC 디코딩 처리에 실패하여 복구된 데이터를 메모리 장치(10)의 다른 물리적 주소에 저장할 수도 있다.
메모리 시스템(100D)의 메모리 컨트롤러(20D)는 스트라이프를 구성하는 복수개의 페이지들(10D-1 ~ 10D-N)에 나뉘어 저장된 코드워드들(HCW1 ~ HCWN)를 읽어내어 도 2와 같은 다차원 코드의 코드 매트릭스를 생성할 수 있다. 예로서, 페이지들(10D-1 ~ 10D-N)로부터 읽어낸 코드워드들(HCW1 ~ HCWN)로 다차원 코드의 코드 매트릭스의 수평 코드워드들(HCW1 ~ HCWN)을 생성할 수 있다.
도 3f는 메모리 장치(10)에 포함된 섹터(sector)들로 스트라이프를 구성하는 예를 보여준다. 메모리 장치(10)는 복수개의 섹터들(10E-1 ~ 10E-N+1)을 포함할 수 있다. 예로서, N(N은 2 이상의 정수)개의 섹터들 섹터들(10E-1 ~ 10E-N)로 스트라이프를 구성하고, 적어도 하나의 섹터(10E-N+1)를 스페어 섹터(spare sector)로 할당할 수 있다. 예로서, 스페어 섹터(10E-N+1)는 스트라이프를 구성하는 복수개의 섹터들(10E-1 ~ 10E-N)에서 ECC 디코딩 처리에 실패하여 복구된 데이터를 저장하는 용도로 사용될 수 있다. 다른 예로서, 스페어 섹터(10E-N+1)를 사용하지 않고, ECC 디코딩 처리에 실패하여 복구된 데이터를 메모리 장치(10)의 다른 물리적 주소에 저장할 수도 있다.
메모리 시스템(100E)의 메모리 컨트롤러(20E)는 스트라이프를 구성하는 복수개의 섹터들(10E-1 ~ 10E-N)에 나뉘어 저장된 코드워드들(HCW1 ~ HCWN)를 읽어내어 도 2와 같은 다차원 코드의 코드 매트릭스를 생성할 수 있다. 예로서, 섹터들(10E-1 ~ 10E-N)로부터 읽어낸 코드워드들(HCW1 ~ HCWN)로 다차원 코드의 코드 매트릭스의 수평 코드워드들(HCW1 ~ HCWN)을 생성할 수 있다.
도 3f는 메모리 장치(10)에 포함된 메모리 칩(chip)들로 스트라이프를 구성하는 예를 보여준다. 메모리 장치(10)는 복수개의 칩들(10F-1 ~ 10F-N+1)을 포함할 수 있다. 예로서, N(N은 2 이상의 정수)개의 칩들(10F-1 ~ 10F-N)로 스트라이프를 구성하고, 하나의 칩(10F-N+1)를 스페어 칩(spare chip)으로 할당할 수 있다. 예로서, 스페어 칩(10F-N+1)는 스트라이프를 구성하는 복수개의 칩들(10F-1 ~ 10F-N)에서 ECC 디코딩 처리에 실패하여 복구된 데이터를 저장하는 용도로 사용될 수 있다. 다른 예로서, 스페어 칩(10F-N+1)를 사용하지 않고, ECC 디코딩 처리에 실패하여 복구된 데이터를 복수개의 칩들(10F-1 ~ 10F-N) 중의 어느 하나의 칩의 다른 물리적 주소에 저장할 수도 있다.
메모리 시스템(100F)의 메모리 컨트롤러(20F)는 스트라이프를 구성하는 복수개의 칩들(10F-1 ~ 10F-N)에 나뉘어 저장된 코드워드들(HCW1 ~ HCWN)를 읽어내어 도 2와 같은 다차원 코드의 코드 매트릭스를 생성할 수 있다. 예로서, 칩들(10F-1 ~ 10F-N)로부터 읽어낸 코드워드들(HCW1 ~ HCWN)로 다차원 코드의 코드 매트릭스의 수평 코드워드들(HCW1 ~ HCWN)을 생성할 수 있다.
도 4는 도 1에 도시된 메모리 장치(10)의 구성을 예시적으로 보여준다. 예로서, 도 1의 메모리 장치(10)에 포함된 하나의 플레인(10B-1)에 대한 메모리 블록 구성이 될 수 있다.
도 4를 참조하면, 메모리 장치(10)는 메모리 셀 어레이(11), 제어 로직(control logic; 12), 전압 생성부(13), 로우 디코더(14) 및 페이지 버퍼(15)를 포함할 수 있다.
메모리 셀 어레이(11)는 복수의 워드 라인들과 복수의 비트 라인들이 교차하는 영역들에 배치되는 복수의 메모리 셀들을 포함할 수 있다. 일 실시예에서, 복수의 메모리 셀들은 플래시 메모리 셀들일 수 있다. 예로서, 메모리 셀 어레이(11)는 낸드(NAND) 플래시 메모리 셀 어레이 또는 노아(NOR) 플래시 메모리 셀 어레이일 수 있다. 이하에서는, 복수의 메모리 셀들이 낸드 플래시 메모리 셀들인 경우를 예로 하여 본 발명의 실시 예들을 상술하기로 한다.
메모리 셀 어레이(11)는 다수의 메모리 셀들이 직렬로 연결되는 스트링(string) 구조로 이루어진다. 예로서, 각각의 셀 스트링은 공통 소스 라인(Common Source Line; CSL)과 비트 라인(BL) 사이에 접지 선택 트랜지스터, 하나 이상의 더미 메모리 셀, 복수의 메인 메모리 셀들, 스트링 선택 트랜지스터가 직렬로 연결된다. 공통 소스 라인(CSL) 쪽에서 메인 메모리 셀들에 미치는 커플링(coupling) 영향을 줄이기 위하여 더미 메모리 셀은 접지 선택 트랜지스터와 복수의 메인 메모리 셀들 사이에 배치할 수 있다. 즉, 메인 메모리 셀의 에지(edge)에 더미 메모리 셀을 배치할 수 있다. 복수의 비트 라인들에 접속된 메인 메모리 셀들 및 더미 메모리 셀들은 각기 다른 워드라인들에 접속된다. 예로서, 더미 메모리 셀들이 접속되는 워드라인을 더미 워드라인이라 칭할 수 있다.
그리고, 셀 스트링 구조의 취약점인 백 패턴 종속성(back pattern dependency)를 최소화하기 위하여 셀 스트링에서 글로벌 소스 라인(Global source line; GSL)이 접속되는 접지 선택 트랜지스터에서 가장 가까운 메모리 셀부터 순차적으로 프로그램을 진행한다. 여기에서, 글로벌 소스 라인(GSL)은 접지 선택 라인(Ground Selection Line)이라 칭할 수도 있다.
예로서, 메모리 셀 어레이(11)는 2차원 플래너 낸드 플래시 메모리 셀 구조로 설계될 수 있다. 다른 예로서, 메모리 셀 어레이(11)는 3차원 수직 구조의 낸드(vertical NAND, VNAND) 플래시 메모리 셀 구조로 설계될 수 있다.
본 발명의 기술적 사상에 의한 일 실시 예에서, 3 차원 (3D) 구조의 메모리 셀 어레이(11)는 실리콘 기판 위에 배치되는 활성 영역과, 메모리 셀들의 동작과 관련된 회로로서 상기 기판상에 또는 상기 기판 내에 형성된 회로를 가지는 메모리 셀 어레이들의 적어도 하나의 물리적 레벨에 모놀리식으로 형성된다. 상기 용어 "모놀리식"은 상기 어레이를 구성하는 각 레벨의 층들이 상기 어레이 중 각 하부 레벨의 층들의 바로 위에 적층되어 있음을 의미한다.
본 발명의 기술적 사상에 의한 일 실시 예에서, 상기 3D 구조의 메모리 어레이는 적어도 하나의 메모리 셀이 다른 메모리 셀의 위에 위치하도록 수직 방향으로 배치된 버티칼 NAND 스트링들을 포함한다. 상기 적어도 하나의 메모리 셀은 전하 트랩층을 포함할 수 있다.
미국 특허공개공보 제7,679,133호, 동 제8,553,466호, 동 제8,654,587호, 동 제8,559,235호, 및 미국 특허출원공개공보 제2011/0233648호는 3D 메모리 어레이가 복수 레벨로 구성되고 워드 라인들 및/또는 비트 라인들이 레벨들간에 공유되어 있는 3D 메모리 어레이에 대한 적절한 구성들을 상술하는 것들로서, 본 명세서에 인용 형식으로 결합될 수 있다.
메모리 셀 어레이(11)에 소거 전압이 인가되면 복수의 메모리 셀들(MC)은 소거 상태가 되며, 메모리 셀 어레이(11)에 프로그램 전압이 인가되면 복수의 메모리 셀들(MC)은 프로그램 상태가 된다. 이때, 각 메모리 셀(MC)은 문턱 전압에 따라 구분되는 소거 상태 및 제1 내지 제n 프로그램 상태들(P1 내지 Pn) 중 하나를 가질 수 있다.
여기서, n은 2 이상의 자연수일 수 있다. 예를 들어, 메모리 셀(MC)이 2 비트 레벨 셀인 경우 n은 3일 수 있다. 다른 예에서, 메모리 셀(MC)이 3 비트 레벨 셀인 경우 n은 7일 수 있다. 또 다른 예에서, 메모리 셀(MC)이 4 비트 레벨 셀인 경우 n은 15일 수 있다. 이와 같이, 복수의 메모리 셀들(MC)은 멀티 레벨 셀들을 포함할 수 있다. 그러나, 본 발명의 기술적 사상은 이에 한정되지 않고, 복수의 메모리 셀들(MC)은 싱글 레벨 셀들을 포함할 수도 있다.
제어 로직(12)은 메모리 컨트롤러(20)로부터 수신한 커맨드(CMD), 어드레스(ADDR) 및 제어 신호(CTRL)를 기초로 하여, 메모리 셀 어레이(11)에 데이터를 기입하거나 메모리 셀 어레이(11)로부터 데이터를 독출하거나, 메모리 셀 어레이(11)를 소거하기 위한 각종 제어 신호를 출력할 수 있다. 이로써, 제어 로직(12)은 메모리 장치(10) 내의 각종 동작을 전반적으로 제어할 수 있다.
제어 로직(12)은 메모리 컨트롤러(20)로부터 수신한 커맨드(CMD), 어드레스(ADDR) 및 제어 신호(CTRL)를 기초로 하여 하드 디시젼 리드 동작 또는 소프트 디시젼 리드 동작을 수행하기 위한 제어 신호들을 생성시킬 수 있다.
제어 로직(12)에서 생성된 제어 신호들은 전압 생성부(13), 로우 디코더(14) 및 페이지 버퍼(15)에 제공될 수 있다. 예로서, 제어 로직(12)은 전압 생성부(13)에 전압 제어 신호(CTRL_vol)를 제공할 수 있고, 로우 디코더(14)에 로우 어드레스(X_ADDR)를 제공할 수 있으며, 페이지 버퍼(15)에 칼럼 어드레스(Y_ADDR)를 제공할 수 있다.
전압 생성부(13)는 전압 제어 신호(CTRL_vol)를 기초로 하여 메모리 셀 어레이(11)에 대한 프로그램, 독출 및 소거 동작을 수행하기 위한 다양한 종류의 전압들을 생성할 수 있다. 구체적으로, 전압 생성부(13)는 복수의 워드 라인들(WL)을 구동하기 위한 제1 구동 전압(VWL), 복수의 스트링 선택 라인들(SSL)을 구동하기 위한 제2 구동 전압(VSSL) 및 복수의 접지 선택 라인들(GSL)을 구동하기 위한 제3 구동 전압(VGSL)을 생성할 수 있다.
이때, 제1 구동 전압(VWL)은 프로그램 전압(또는 기입 전압), 독출 전압, 소거 전압, 패스 전압 또는 프로그램 검증 전압일 수 있다. 또한, 제2 구동 전압(VSSL)은 스트링 선택 전압, 즉, 온(on) 전압 또는 오프(off) 전압일 수 있다. 나아가, 제3 구동 전압(VGSL)은 접지 선택 전압, 즉, 온 전압 또는 오프 전압일 수 있다.
로우 디코더(14)는 복수의 워드 라인들(WL)을 통해 메모리 셀 어레이(11)에 연결되고, 제어 로직(12)으로부터 수신한 로우 어드레스(X_ADDR)에 응답하여 복수의 워드 라인들(WL) 중 일부 워드 라인을 활성화할 수 있다. 구체적으로, 독출 동작 시에 로우 디코더(14)는 선택된 워드 라인에 독출 전압을 인가하고, 비 선택된 워드 라인에 패스 전압을 인가할 수 있다.
한편, 프로그램 동작 시에 로우 디코더(14)는 선택된 워드 라인에 프로그램 전압을 인가하고, 비 선택된 워드 라인에 패스 전압을 인가할 수 있다.
그리고, 소거 동작 시에 로우 디코더(14)는 워드 라인들(WL)에 소거용 전압(예로서, 0V)을 인가하고, 스트링 선택 라인(SSL) 및 접지 선택 라인(GSL)을 각각 플로팅(Floating) 시킬 수 있다.
페이지 버퍼(15)는 복수의 비트 라인들(BL)을 통해 메모리 셀 어레이(11)에 연결될 수 있다. 구체적으로, 독출 동작 시에 페이지 버퍼(15)는 감지 증폭기(sense amplifier)로 동작하여 메모리 셀 어레이(11)에 저장된 데이터(DATA)를 출력할 수 있다. 한편, 프로그램 동작 시에 페이지 버퍼(15)는 기입 드라이버(write driver)로 동작하여 메모리 셀 어레이(11)에 저장하고자 하는 데이터(DATA)를 입력시킬 수 있다.
도 5는 도 4에 도시된 메모리 셀 어레이(11)의 일 예를 나타낸다.
도 5를 참조하면, 메모리 셀 어레이(11)는 플래시 메모리 셀 어레이일 수 있다. 이때, 메모리 셀 어레이(11)는 a(a는 2 이상의 정수)개의 메모리 블록들(BLK1 내지 BLKa)을 포함하고, 각 메모리 블록(BLK1 내지 BLKa)은 b(b는 2이상의 정수)개의 페이지들(PAGE1 내지 PAGEb)을 포함하며, 각 페이지들(PAGE1 내지 PAGEb)은 c(c는 2 이상의 정수)개의 섹터들(SEC1 내지 SECc)을 포함할 수 있다. 도 5에서는 도시의 편의를 위해, 메모리 블록 BLK1에 대하여만 페이지들(PAGE0 내지 PAGEb) 및 섹터들(SEC1 내지 SECc)을 도시하였으나, 다른 메모리 블록들(BLK2 내지 BLKa)도 메모리 블록 BLK1과 동일한 구조를 가질 수 있다.
도 6은 도 5에 도시된 메모리 셀 어레이에 포함된 메모리 블록(BLK1)의 일 예를 나타내는 회로도이다.
도 6을 참조하면, 제1메모리 블록(BLK1)은 수평 구조의 낸드 플래쉬 메모리일 수 있고, 도 5에 도시된 각 메모리 블록들(BLK1 내지 BLKa)은 도 6과 같이 구현될 수 있다. 제1 메모리 블록(BLK1)은 예를 들어, 8개의 메모리 셀들이 직렬로 연결되는 d(d는 2 이상의 정수)개의 셀 스트링(STR)들을 포함할 수 있다. 각 셀 스트링(STR)은 직렬로 연결된 메모리 셀들의 양 끝에 각각 연결되는 스트링 선택 트랜지스터(SST) 및 접지 선택 트랜지스터(GST)를 포함할 수 있다. 여기에서, 하나의 셀 스트링에 포함되는 8개의 메모리 셀들 중에서 접지 선택 트랜지스터(GST)에 인접된 하나 이상의 메모리 셀을 더미 메모리 셀로 설정할 수 있다.
도 6의 실시 예에서는 접지 선택 트랜지스터(GST)에 인접된 2개의 메모리 셀들을 더미 메모리 셀(DMC)로 설정하였다. 이에 따라서, 하나의 셀 스트링에 포함되는 8개의 메모리 셀들 중에서 6개의 메모리 셀들이 메인 메모리 셀(MMC)로 설정된다. 다른 예로서, 스트링 선택 트랜지스터(SST)와 메인 메모리 셀(MMC) 사이에 하나 이상의 더미 메모리 셀(DMC)을 추가할 수도 있다.
그리고, 더미 메모리 셀(DMC)에는 더미 워드 라인(DWL)이 연결되고, 메인 메모리 셀(MMC)에는 메인 워드 라인(MWL)이 연결된다. 이와 같이, 공통 소스 라인(CSL) 쪽에서 메인 메모리 셀들에 미치는 커플링(coupling) 영향을 줄이기 위하여 더미 메모리 셀은 접지 선택 트랜지스터(GST)와 복수의 메인 메모리 셀들(MMC1 ~ MMC6) 사이에 배치한다. 즉, 메인 메모리 셀의 에지(edge)에 하나 이상의 더미 메모리 셀을 배치한다.
여기서, 셀 스트링들(STR)의 개수, 더미 워드 라인들(DWL)의 개수, 메인 워드 라인들(MWL)의 개수, 비트 라인들(BL)의 개수는 실시예에 따라 다양하게 변경될 수 있다.
다른 예로서, 각 메모리 블록들에 더미 메모리 셀(DMC)들을 배치하지 않고, 메인 메모리 셀(MMC)들로만 메모리 블록을 구성할 수도 있다.
도 6과 같은 구조를 갖는 낸드 플래쉬 메모리 장치는 메모리 블록 단위로 소거가 수행되고, 각 워드 라인에 대응하는 페이지 단위로 프로그램을 수행할 수 있다. 일 예에서, 메모리 셀이 싱글 레벨 셀인 경우, 각 워드 라인에 하나의 페이지가 대응될 수 있다. 다른 예에서, 메모리 셀이 멀티 레벨 셀 또는 트리플 레벨 셀인 경우, 각 워드 라인에 복수의 페이지들이 대응될 수 있다.
도 7은 도 5에 도시된 메모리 셀 어레이에 포함된 메모리 블록의 다른 예(BLK1')를 나타내는 회로도이다.
제1메모리 블록(BLK1')은 수직 구조의 낸드 플래쉬 메모리일 수 있고, 도 5에 도시된 각 메모리 블록들(BLK1 내지 BLKa)은 도 7과 같이 구현될 수 있다. 제1 메모리 블록(BLK1')은 복수의 셀 스트링들(STR11 내지 STR33), 복수의 워드 라인들(DWL1, DW2, WL1 ~ WL6), 복수의 비트 라인들(BL1 내지 BL3), 접지 선택 라인(GSL), 복수의 스트링 선택 라인들(SSL1 내지 SSL3) 및 공통 소스 라인(CSL)을 포함할 수 있다. 여기서, 셀 스트링들의 개수, 워드 라인들의 개수, 비트 라인들의 개수, 접지 선택 라인의 개수 및 스트링 선택 라인들의 개수는 실시 예에 따라 다양하게 변경될 수 있다.
비트 라인(BL1 내지 BL3)과 공통 소스 라인(CSL) 사이에는 셀 스트링(STR11 내지 STR33)이 연결된다. 각 셀 스트링(예를 들면, STR11)은 직렬로 연결된 스트링 선택 트랜지스터(SST), 복수의 메모리 셀들(DMC 및 MMC) 및 접지 선택 트랜지스터(GST)를 포함할 수 있다.
도 7의 실시 예에서는 셀 스트링에서 접지 선택 트랜지스터(GST)에 인접된 2개의 메모리 셀들을 더미 메모리 셀(DMC)로 설정하였다. 이에 따라서, 하나의 셀 스트링에 포함되는 8개의 메모리 셀들 중에서 6개의 메모리 셀들이 메인 메모리 셀(MMC)로 설정된다. 다른 예로서, 스트링 선택 트랜지스터(SST)와 메인 메모리 셀(MMC) 사이에 하나 이상의 더미 메모리 셀(DMC)을 추가할 수도 있다.
스트링 선택 트랜지스터(SST)는 스트링 선택 라인(SSL1 내지 SSL3)에 연결된다. 복수의 메모리 셀(MC1 내지 MC8)은 각각 대응하는 워드 라인(WL1 내지 WL8)에 연결된다. 접지 선택 트랜지스터(GST)는 접지 선택 라인(GSL)에 연결되어 있다. 스트링 선택 트랜지스터(SST)는 대응하는 비트 라인(BL)에 연결되고, 접지 선택 트랜지스터(GST)는 공통 소스 라인(CSL)에 연결된다.
동일 높이의 워드 라인(예를 들면, WL1)은 공통으로 연결되어 있고, 스트링 선택 라인(SSL1 내지 SSL3)은 분리되어 있다. 워드 라인 WL1에 연결되어 있고 셀 스트링(STR11, STR12, STR13)에 속해 있는 메모리 셀들을 프로그램하는 경우에는, 워드 라인 WL1과 스트링 선택 라인 SSL1이 선택된다.
예로서, 제1메모리 블록(BLK1')에서 각기 다른 평면에 속하는 메모리 셀들로 구성되는 페이지들 또는 섹터들로 스트라이프를 구성할 수 있다. 다른 예로서, 제1메모리 블록(BLK1')에서 동일한 평면에 속하는 메모리 셀들로 구성되는 페이지들 또는 섹터들로 스트라이프를 구성할 수도 있다.
도 8은 도 6 또는 도 7에 도시된 메모리 블록에 포함된 메모리 셀의 일 예를 보여주는 단면도이다.
여기에서, 메모리 셀은 더미 메모리 셀(DMC) 또는 메인 메모리 셀(MMC)이 될 수 있다.
도 8을 참조하면, 메모리 셀은 채널 영역(1), 전하 저장층(2) 및 제어 게이트(CG, 3)를 포함할 수 있다. 일 예에서, 전하 저장층(2)은 도체인 플로팅 게이트로 구현될 수 있고, 이러한 구성을 가지는 메모리 셀을 플로팅 게이트 구조 셀이라고 지칭할 수 있다. 다른 예에서, 전하 저장층(2)은 부도체, 예를 들어, SiN로 구현될 수 있고, 이러한 구성을 가지는 메모리 셀을 전하 트랩형 플래시(charge trap flash, CTF) 셀이라고 지칭할 수 있다.
메모리 셀에 대한 프로그램 동작을 수행하기 위해서, 상대적으로 높은 프로그램 전압이 제어 게이트(3)에 인가되고, 채널 영역(1)에 상대적으로 낮은 전압(예를 들면, 0V)이 인가될 수 있다. 이러한 바이어스 조건에 따라, 제어 게이트(3)에서 채널 영역(1)의 방향으로 전계가 형성됨으로써, 전하들, 예를 들어, 전자들(electrons)이 화살표 P 방향으로 채널 영역(1)에서 전하 저장층(2)으로 이동될 수 있으며, 이에 따라, 메모리 셀이 프로그램될 수 있다.
그리고, 메모리 셀에 대한 소거 동작을 수행하기 위해서, 상대적으로 낮은 소거 전압(예를 들면, 0V)이 제어 게이트(3)에 인가되고, 채널 영역(1)에 상대적으로 높은 전압이 인가될 수 있다. 이러한 바이어스 조건에 따라, 채널 영역(1)에서 제어 게이트(3)의 방향으로 전계가 형성됨으로써, 전하들, 예를 들어, 전자들(electrons)이 화살표 E 방향으로 전하 저장층(2)에서 채널 영역(1)으로 이동될 수 있으며, 이에 따라, 메모리 셀이 소거될 수 있다.
도 9는 도 1의 메모리 시스템(100)에서의 하드 디시젼 리드(hard decision read) 동작에 따른 하드 데이터(hard data)를 생성하는 방법에 대한 예를 보여주는 도면이다.
도 9의 수평 축은 문턱 전압(Vth)를 나타내고 수직 축은 메모리 셀들의 개수(#Cell)를 나타낸다.
도 9와 같은 메모리 셀들의 문턱 전압(Vth) 산포에서 독출 전압 Vr1에 따른 하드 디시젼 리드 동작에 의하여 비트 1의 프로그램 상태와 비트 0의 프로그램 상태를 판정한다. 예로서, 독출 전압 Vr1 미만의 문턱 전압을 갖는 메모리 셀들은 비트 1로 판정하고, 독출 전압 Vr1 이상의 문턱 전압을 갖는 메모리 셀들은 비트 0로 판정할 수 있다.
하드 디시젼 리드 동작에 따라서 하나의 메모리 셀에서 판정된 비트 1 또는 비트 0는 사인(sign) 비트로서 메모리 컨트롤러(20)로 출력된다.
도 10은 도 1의 메모리 시스템(100)에서의 소프트 디시젼 리드(soft decision read) 동작에 따른 소프트 데이터를 생성하는 방법에 대한 예를 보여주는 도면이다.
도 10과 같은 메모리 셀들의 문턱 전압 산포에서 독출 전압 Vr1에 따른 하드 디시젼 리드 동작에 의하여 비트 1의 프로그램 상태와 비트 0의 프로그램 상태를 판정하는 사인(sign) 비트 정보를 획득한다. 그리고 나서, 독출 전압 Vr1_a 및 Vr1_b에 따른 소프트 디시젼 리드 동작에 의하여 신뢰도 비트 정보를 획득한다.
소프트 디시젼 리드 동작에서 사용되는 하나의 독출 전압 Vr1_a은 하드 디시젼 리드 동작에서 사용되는 독출 전압 Vr1을 기준으로 제1전압만큼 낮은 전압으로 결정하고, 소프트 디시젼 리드 동작에서 사용되는 다른 하나의 독출 전압 Vr1_b은 하드 디시젼 리드 동작에서 사용되는 독출 전압 Vr1을 기준으로 제2전압만큼 높은 전압으로 결정한다. 예로서, 제1전압과 제2전압은 동일하게 설정할 수 있다.
이에 따라서, 소프트 디시젼 리드 동작에 의하여 하나의 메모리 셀에 대하여서 사인(sign) 비트와 신뢰도 비트로 구성되는 2비트가 메모리 컨트롤러(20)로 출력된다.
예로서, Vr1_a 미만의 문턱 전압을 갖는 메모리 셀들에 대한 독출 데이터는 (1_r)로 표시하고, 문턱 전압이 Vr1_a과 Vr1 사이에 속하는 메모리 셀들에 대한 독출 데이터는 (1_u)로 표시하고, 문턱 전압이 Vr1과 Vr1_b 사이에 속하는 메모리 셀들에 대한 독출 데이터는 (0_u)로 표시하고, 문턱 전압이 Vr1_b 이상인 메모리 셀들에 대한 독출 데이터는 (0_r)로 표시하였다. 여기에서, 'u'는 낮은 신뢰도를 나타내고, 'r'은 높은 신뢰도를 나타낸다. 예로서, (1_r)는 사인 비트가 '1'이고 신뢰도 비트가 'r'로서, 높은 신뢰도의 비트 1이라는 것을 의미한다.
도 11은 도 1의 메모리 시스템(100)에서의 추가적인 소프트 디시젼 리드 동작에 따른 소프트 데이터를 생성하는 방법에 대한 예를 보여주는 도면이다.
도 11과 같은 메모리 셀들의 문턱 전압 산포에서 독출 전압 Vr1에 따른 하드 디시젼 리드 동작에 의하여 비트 1의 프로그램 상태와 비트 0의 프로그램 상태를 판정하는 사인(sign) 비트 정보를 획득한다. 그리고, 독출 전압 Vr1_a 및 Vr1_b에 따른 소프트 디시젼 동작을 수행한 후에 독출 전압 Vr1_c 및 Vr1_d에 따른 추가적인 소프트 디시젼 리드 동작을 수행한다.
추가적인 소프트 디시젼 리드 동작에서 사용되는 하나의 독출 전압 Vr1_c은 소프트 디시젼 리드 동작에서 사용되는 독출 전압 Vr1_a을 기준으로 제3전압만큼 낮은 전압으로 결정하고, 추가적인 소프트 디시젼 리드 동작에서 사용되는 다른 하나의 독출 전압 Vr1_d은 소프트 디시젼 리드 동작에서 사용되는 독출 전압 Vr1_b을 기준으로 제4전압만큼 높은 전압으로 결정한다. 예로서, 제3전압과 제4전압은 동일하게 설정할 수 있다.
추가적인 소프트 디시젼 리드 동작에 의하여 하나의 메모리 셀에 대하여 사인(sign) 비트와 2개 비트의 신뢰도 비트로 구성되는 총 3비트가 메모리 컨트롤러(20)로 출력된다.
예로서, Vr1_c 미만의 문턱 전압을 갖는 메모리 셀들에 대한 독출 데이터는 (1_r2)로 표시하고, 문턱 전압이 Vr1_c과 Vr1_a 사이에 속하는 메모리 셀들에 대한 독출 데이터는 (1_r1)로 표시하고, 문턱 전압이 Vr1_a과 Vr1 사이에 속하는 메모리 셀들에 대한 독출 데이터는 (1_u)로 표시하고, 문턱 전압이 Vr1과 Vr1_b 사이에 속하는 메모리 셀들에 대한 독출 데이터는 (0_u)로 표시하고, 문턱 전압이 Vr1_b과 Vr1_d 사이에 속하는 메모리 셀들에 대한 독출 데이터는 (0_r1)로 표시하고, 문턱 전압이 Vr1_d 이상인 메모리 셀들에 대한 독출 데이터는 (0_r2)로 표시하였다. 여기에서, 'u'는 낮은 신뢰도를 나타내고, 'r1'은 'u'보다는 신뢰도가 높으나 'r2'보다는 낮은 신뢰도를 나타내고, 'r2'는 'r1'보다 높은 신뢰도를 나타낸다. 예로서, (1_r1)는 사인 비트가 '1'이고 신뢰도 비트가 'r1'이라는 것을 의미한다.
도 12는 도 1의 메모리 시스템(100)에 포함된 메모리 컨트롤러 구성도의 일 예(20A)를 보여준다.
도 12에 도시된 바와 같이, 메모리 컨트롤러(20A)는 프로세서(210A), 리커버리 모듈(21A), ECC 디코더(22), RAM(Random Access Memory; 220A), 호스트 인터페이스(230), 메모리 인터페이스(240) 및 버스(250)를 구비한다.
메모리 컨트롤러(20A)의 구성요소들은 버스(250)를 통하여 전기적으로 연결될 수 있다.
프로세서(210A)는 RAM(220A)에 저장된 프로그램 코드 및 데이터들을 이용하여 메모리 시스템(100)의 동작을 전반적으로 제어한다. 예로서, 프로세서(210A)는 마이크로프로세서(micro-processor) 또는 중앙처리장치(Central Processing Unit; CPU)로 구현될 수 있다. 메모리 시스템(100)이 초기화될 때 프로세서(210A)는 메모리 시스템(100)에서 수행되는 동작들을 제어하는데 필요한 프로그램 코드 및 데이터들을 메모리 장치(10)로부터 읽어내어 RAM(220A)에 로딩시킬 수 있다. RAM(220A)에는 스트라이프 매핑 정보가 저장될 수 있다. 프로세서(210A)는 스트라이프 매핑 정보에 기초하여 메모리 장치(10)로부터 데이터를 읽어내어 도 2에 도시된 바와 같은 다차원 코드의 코드 매트릭스를 생성시킬 수 있다.
프로세서(210A)는 리드 동작 시에는 리드 커맨드 및 어드레스를 메모리 장치(10)에 제공하고, 프로그램 동작 시에는 프로그램 커맨드, 어드레스, 그리고 데이터를 제공하고, 소거 동작 시에는 소거 커맨드 및 어드레스를 제공한다. 그리고, 프로세서(210A)는 RAM(220A)에 저장된 시스템 데이터를 이용하여 도 25 내지 도 32에 도시된 흐름도에 따른 데이터 복구에 필요한 동작들을 수행할 수 있다.
호스트 인터페이스(230)는 메모리 시스템(100)과 접속되는 호스트(도면에 미도시)와의 데이터 송/수신 프로토콜을 구비하고, 메모리 시스템(100A)과 호스트를 상호 연결한다. 호스트 인터페이스(230)는 ATA(Advanced Technology Attachment) 인터페이스, SATA(Serial Advanced Technology Attachment) 인터페이스, PATA(Parallel Advanced Technology Attachment) 인터페이스, USB(Universal Serial Bus) 또는 SAS(Serial Attached Small Computer System) 인터페이스, SCSI(Small Computer System Interface), eMMC(embedded Multi Media Card) 인터페이스, UFS(Universal Flash Storage) 인터페이스로 구현할 수 있다. 그러나 이는 예시일 뿐 이에 제한되는 것은 아니다. 호스트 인터페이스(230)는 프로세서(210A)의 제어에 따라서 호스트로부터 커맨드, 어드레스 및 데이터를 수신하거나, 호스트로 데이터를 전송할 수 있다.
메모리 인터페이스(240)는 메모리 장치(10)와 전기적으로 연결되어 있다. 메모리 인터페이스(240)는 프로세서(210A)의 제어에 따라서 메모리 장치(10)로 커맨드, 어드레스 및 데이터를 전송하거나, 메모리 장치(10)로부터 데이터를 수신할 수 있다. 메모리 인터페이스(240)는 NAND 플래시 메모리 또는 NOR 플래시 메모리를 지원하도록 구성될 수 있다. 메모리 인터페이스(240)는 복수 개의 채널들을 통하여 소프트웨어 또는 하드웨어 인터리브 동작들이 수행되도록 구성될 수도 있다.
ECC 디코더(22)는 메모리 장치(10)로부터 읽어낸 데이터에 대한 에러 검출 및 정정 처리를 수행한다. 예로서, LDPC(low density parity check) code, BCH code, turbo code, 컨볼루션 코드(convolution code) 등을 이용하여 에러 정정 처리를 수행할 수 있다.
프로세서(210A)는 호스트(도면에 미도시)로부터 리드(READ) 요청된 타깃 코드워드를 소프트 디시젼 리드 동작에 따라서 메모리 장치(10)로부터 읽어내는 동작을 수행한다. 예로서, 타깃 코드워드의 사이즈는 ECC 디코딩 처리 단위로 결정될 수 있다. 예로서, 소프트 디시젼 리드 동작에 따라서 메모리 장치(10)로부터 읽어낸 타깃 코드워드의 소프트 입력은 도 10에서 설명한 바와 같이 사인(sign) 비트와 신뢰도 비트로 구성되는 2비트로 표현된다. 프로세서(210A)에 의하여 읽어낸 타깃 코드워드의 소프트 입력은 ECC 디코더(22)에 제공된다.
ECC 디코더(22)에서 타깃 코드워드의 소프트 입력에 대한 ECC 디코딩 처리에 실패한 경우에, ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력을 RAM(220A)에 저장한다.
그리고 나서, 프로세서(210A)는 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 메모리 장치(10)로부터 읽어내는 동작을 수행한다. 여기에서, 참조 코드워드들은 타깃 코드워드와 동일한 스트라이프를 형성하는 메모리 장치(10)의 저장 영역에서 읽어낸 코드워드들을 포함할 수 있다. 예로서, 타깃 코드워드와 참조 코드워드들로 도 2에 도시된 바와 같은 코드 매트릭스를 구성할 수 있다. 예로서, 타깃 코드워드와 참조 코드워드들은 코드 매트릭스의 수평 코드워드들(HCW1 ~ HCWN)이 될 수 있다.
예로서, 프로세서(210A)는 하드 디시젼 리드 동작에 의하여 참조 코드워드들의 하드 입력을 메모리 장치(10)로부터 읽어내어 ECC 디코더(22)에 제공한다. 그리고, ECC 디코더(22)에서 참조 코드워드들의 하드 입력에 대한 에러 검출 및 정정 처리를 수행한다. 프로세서(210A)는 ECC 디코딩 처리에 성공한 참조 코드워드의 하드 입력에 대한 디코딩 결과를 RAM(220A)에 저장한다. 그리고 나서, 프로세서(210A)는 ECC 디코딩 처리에 실패한 참조 코드워드에 대한 소프트 입력을 획득하기 위한 소프트 디시젼 리드 동작을 수행한다. 소프트 디시젼 리드 동작에 따라서 획득한 참조 코드워드들의 소프트 입력에 대한 에러 검출 및 정정 처리를 수행한다. 프로세서(210A)는 ECC 디코딩 처리에 성공한 참조 코드워드의 소프트 입력에 대한 디코딩 결과와 ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력을 각각 RAM(220A)에 저장한다.
리커버리 모듈(21A)은 ECC 디코더(22)에서 타깃 코드워드에 대한 ECC 디코딩 처리에 실패한 경우에 ECC 디코딩 처리에 실패한 데이터에 대한 복원하기 위하여 수정된 타깃 코드워드를 생성하는 연산 처리를 수행한다. 예로서, 리커버리 모듈(21A)은 하드웨어 논리 회로로 구현될 수 있다.
리커버리 모듈(21A)은 RAM(220A)에서 읽어낸 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력, ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과, ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력을 이용하여 코드 연관성에 따른 연산 처리에 기초하여 수정된 타깃 코드워드를 생성한다.
리커버리 모듈(21A)은 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력, ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과, ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력으로 구성되는 코드 매트릭스로부터 코드 제약 조건을 만족시키지 못하는 후보 코드워드를 검출하고, 검출된 후보 코드워드에 포함된 코드 비트들에 대한 신뢰도에 기초하여 타깃 코드워드를 수정하는 연산 처리를 수행한다.
예로서, 리커버리 모듈(21A)은 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력, ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과, ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력을 각각 도 2와 같은 코드 매트릭스의 제1방향의 코드워드들로 배열하고, 코드 매트릭스에서의 제2방향에 대한 패리티 체크에 따른 오류가 발생되는 제2방향의 코드워드를 후보 코드워드로 결정할 수 있다. 예로서, 코드 매트릭스에서 제1방향은 수평 코드워드를 구성하는 수평 방향을 나타내고, 제2방향은 수직 코드워드를 구성하는 수직 방향을 나타낼 수 있다.
예로서, 리커버리 모듈(21A)은 후보 코드워드 단위로 코드 비트들의 신뢰도를 비교하여 후보 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출하고, 타깃 코드워드에 포함된 에러 후보 코드 비트를 수정하는 연산 처리를 수행한다. 예로서, 타깃 코드워드에 포함된 에러 후보 코드 비트의 사인(sign) 비트를 반전시키는 방식으로 타깃 코드워드를 수정할 있다.
예로서, 리커버리 모듈(21A)은 ECC 디코딩 처리에 실패한 타깃 코드워드에 대한 수정된 타깃 코드워드의 소프트 입력을 생성하는 연산 처리와 같은 방식으로 ECC 디코딩 처리에 실패한 참조 코드워드들에 대한 수정된 참조 코드워드의 소프트 입력을 생성할 수도 있다.
이와 같이 리커버리 모듈(21A)에서 생성되는 수정된 타깃 코드워드의 소프트 입력은 ECC 디코더(22)에 제공된다. 이에 따라서, ECC 디코더(22)는 수정된 타깃 코드워드의 소프트 입력에 대한 ECC 디코딩 처리를 다시 수행하게 된다. 같은 방식으로, 리커버리 모듈(21A)에서 생성되는 수정된 참조 코드워드의 소프트 입력은 ECC 디코더(22)에 제공될 수 있다. 이에 따라서, ECC 디코더(22)는 수정된 참조 코드워드의 소프트 입력에 대한 ECC 디코딩 처리를 다시 수행하여, ECC 디코딩 처리에 실패한 참조 코드워드를 복원할 수 있게 된다.
만일, ECC 디코더(22)에서 다시 수행된 수정된 타깃 코드워드의 소프트 입력에 대한 ECC 디코딩 처리에 실패한 경우에는 도 11에 도시된 바와 같은 추가적인 소프트 디시젼 리드 동작을 수행한 후에 획득한 소프트 입력에 기초하여 위에서 설명한 바와 같은 과정을 통하여 ECC 디코딩 처리 및 데이터 복원 처리를 수행할 수 있다.
프로세서(210A)는 수정된 타깃 코드워드의 소프트 입력에 대한 디코딩 처리에 성공한 경우에, 수정된 타깃 코드워드의 입력에 대한 ECC 디코딩 결과를 메모리 장치(10)의 새로운 물리적 주소에 라이트하고, 라이트된 새로운 물리적 주소에 기초하여 스트라이프 매핑 정보를 갱신하는 동작을 수행할 수 있다.
또한, 프로세서(210A)는 수정된 참조 코드워드의 소프트 입력에 대한 ECC 디코딩 처리를 다시 수행하여 ECC 디코딩 처리에 성공한 경우에, 수정된 참조 코드워드의 입력에 대한 ECC 디코딩 결과를 메모리 장치(10)의 새로운 물리적 주소에 라이트하고, 라이트된 새로운 물리적 주소에 기초하여 스트라이프 매핑 정보를 갱신하는 동작을 수행할 수 있다.
도 13은 도 1의 메모리 시스템에 포함된 메모리 컨트롤러 구성도의 다른 예(20B)를 보여준다.
도 13에 도시된 바와 같이, 메모리 컨트롤러(20B)는 프로세서(210B), ECC 디코더(22), RAM(Random Access Memory; 220B), 호스트 인터페이스(230), 메모리 인터페이스(240) 및 버스(250)를 구비한다.
RAM(220B)에는 메모리 시스템(100)에서 수행되는 동작들을 제어하는데 필요한 프로그램 코드 및 데이터들이 저장된다. 예로서, 메모리 시스템(100)이 초기화될 때 프로세서(210B)는 메모리 시스템(100)에서 수행되는 동작들을 제어하는데 필요한 프로그램 코드 및 데이터들을 메모리 장치(10)로부터 읽어내어 RAM(220B)에 로딩시킬 수 있다. 그리고, RAM(220B)에는 소프트웨어로 구현되는 리커버리 모듈(21B)의 프로그램 코드가 저장될 수 있다.
프로세서(210B)는 RAM(220B)에 저장된 프로그램 코드 및 데이터들을 이용하여 메모리 시스템(100)의 동작을 전반적으로 제어한다. 예로서, 프로세서(210B)는 RAM(220B)에 저장된 리커버리 모듈(21B)의 프로그램 코드를 이용하여 도 12에서 설명한 바와 같은 데이터 복원 처리를 수행할 수 있다.
ECC 디코더(22), 호스트 인터페이스(230), 메모리 인터페이스(240) 및 버스(250)는 도 12에서 이미 설명하였으므로, 중복적인 설명은 피하기로 한다.
도 14는 도 1의 메모리 시스템(100)에서의 데이터 복구 처리를 수행하는 과정을 개략적으로 보여주는 도면이다.
예로서, 메모리 시스템(100)에서 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에, 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 복수의 다이들(10A-1 ~ 10A-N)로부터 읽어내는 동작을 수행한다(S1). 도 14를 참조하면 다이1(10A-1)로부터 읽어낸 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하고, 다이3(10A-3)으로부터 읽어낸 참조 코드워드에 대한 ECC 디코딩 처리에 실패한 사례를 보여준다. 예로서, 복수의 다이들(10A-1 ~ 10A-N)로 RAID가 적용된 스트라이프를 구성할 수 있다.
이와 같이 메모리 시스템(100)에서 2개 이상의 다이들에서 ECC 디코딩 처리에 실패하는 경우에, 리커버리 모듈(21)은 타깃 코드워드 및 참조 코드워드들을 이용한 코드 연관성에 따른 연산 처리에 기초하여 타깃 코드워드를 수정하는 연산 처리를 수행한다(S2).
ECC 디코더(22)는 리커버리 모듈(21)에서 수정된 타깃 코드워드를 입력하고, 수정된 타깃 코드워드에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원한다(S3).
그러면, 메모리 시스템(100)에서의 데이터 복구 처리를 수행하는 다양한 사례들에 대하여 도 15 내지 도 22를 참조하여 설명하기로 한다.
우선, 도 15 내지 도 22에서 다이1 ~ 다이6(10A-1 ~ 10A-6)으로 스트라이프가 구성된다고 가정하자. 그리고, 다이1(10A-1)에 타깃 코드워드가 저장되어 있고, 다이2 ~ 다이6(10A-2 ~ 10A-6)에는 타깃 코드워드와 스트라이프를 구성하는 참조 코드워드들이 저장되어 있다고 가정하자.
도 15는 도 1의 메모리 시스템(100)에서의 데이터 복구 처리를 수행하는 하나의 사례를 보여주는 도면이다.
도 15를 참조하면, 다이1(10A-1)의 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하고, 다이3(10A-3)의 참조 코드워드에 대한 ECC 디코딩 처리에 실패한 사례를 보여준다.
메모리 시스템(100)에서 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에, 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 복수의 다이들(10A-1 ~ 10A-N)로부터 읽어내는 동작을 수행한다(S11).
리커버리 모듈(21)은 ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력(HCW1), ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력(HCW3), ECC 디코딩 처리에 성공한 다이2, 4, 5, 6(10A-2, 10A-4, 10A-5, 10A-6)의 참조 코드워드들의 디코딩 결과를 이용하여 타깃 코드워드를 수정하는 연산 처리를 수행한다(S12).
예로서, ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력으로 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하고, ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제3수평 코드워드(HCW3)를 구성한다. 그리고, ECC 디코딩 처리에 성공한 다이2, 4, 5, 6(10A-2, 10A-4, 10A-5, 10A-6)의 참조 코드워드들의 디코딩 결과로 코드 매트릭스의 나머지 수평 코드워드들을 구성한다.
리커버리 모듈(21)은 이와 같이 구성된 코드 매트릭스에서 코드 제약 조건이 성립하지 않는 수직 코드워드들을 검출한다. 예로서, 수직 코드워드들에 대한 짝수 패리티가 성립되지 않는 수직 코드워드들을 검출한다. 이에 따라서, 코드 매트릭스에서 짝수 패리티가 성립되지 않는 제2수직 코드워드(VCW2), 제4수직 코드워드(VCW4) 및 제5수직 코드워드(VCW5)가 검출된다.
리커버리 모듈(21)은 코드 제약 조건이 성립하지 않는 수직 코드워드들에서 각각 수직 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출한다. 코드 제약 조건이 성립하지 않는 제2수직 코드워드(VCW2)의 코드 비트들은 [1_u 0 1_r 0 0 1]로 구성된다. 코드 비트들 중에서 디코딩 결과에 해당되는 코드 비트 '0'과 '1'은 신뢰도가 가장 높은 레벨에 해당된다. 이에 따라서, 제2수직 코드워드(VCW2) 중에서 소프트 입력에 해당되는 코드 비트들의 신뢰도를 비교하여 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출할 수 있다. 따라서, 제2수직 코드워드(VCW2)의 코드 비트들 중에서 첫 번째 코드 비트에 해당되는 '1_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다.
같은 방식으로, 코드 제약 조건이 성립하지 않는 제4수직 코드워드(VCW4) [0_u 0 0_r 1 1 1] 중에서 첫 번째 코드 비트에 해당되는 '0_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다. 그리고, 코드 제약 조건이 성립하지 않는 제5수직 코드워드(VCW5) [0_r 1 1_u 1 1 1] 중에서 세 번째 코드 비트에 해당되는 '1_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다.
리커버리 모듈(21)은 이와 같이 검출된 에러 후보 코드 비트가 타깃 코드워드의 소프트 입력에 포함되어 있는 경우에, 해당 에러 후보 코드 비트의 사인 비트를 반전시키는 연산처리를 수행한다. 즉, 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하는 코드 비트들 중에서 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)가 에러 후보 코드 비트에 해당된다. 이에 따라서, 제1수평 코드워드(HCW1)의 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)의 사인 비트를 반전시킨다. 즉, 2번째 코드 비트(CB2)인'1_u'를 '0_u'로 수정하고, 4번째 코드 비트(CB4)인 '0_u'를 '1_u'로 수정한다.
이에 따라서, 제1수평 코드워드(HCW1)는 [0_u 1_u 1_r 0_u 0_r 1_u]에서 [0_u 0_u 1_r 1_u 0_r 1_u]로 수정된다. 리커버리 모듈(21)에서 이와 같은 연산 처리에 따라서 수정된 제1수평 코드워드(HCW1_refine)를 ECC 디코더(22)로 출력한다(S13).
ECC 디코더(22)는 리커버리 모듈(21)에서 수정된 제1수평 코드워드(HCW1_refine)를 입력하고, 수정된 제1수평 코드워드(HCW1_refine)에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원한다(S14). 여기에서, 수정된 제1수평 코드워드(HCW1_refine)는 수정된 타깃 코드워드의 소프트 입력에 해당되므로, 다이1(10A-1)의 수정된 타깃 코드워드의 소프트 입력에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원할 수 있게 된다.
도 16은 도 1의 메모리 시스템(100)에서의 데이터 복구 처리를 수행하는 다른 사례를 보여주는 도면이다.
도 16을 참조하면, 다이1(10A-1)의 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하고, 다이3(10A-3) 및 다이5(10A-5)의 참조 코드워드에 대한 ECC 디코딩 처리에 실패한 사례를 보여준다.
메모리 시스템(100)에서 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에, 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 복수의 다이들(10A-1 ~ 10A-N)로부터 읽어내는 동작을 수행한다(S21).
리커버리 모듈(21)은 ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력(HCW1), ECC 디코딩 처리에 실패한 다이3(10A-3) 및 다이5(10A-5) 각각의 참조 코드워드의 소프트 입력(HCW3, HCW5), ECC 디코딩 처리에 성공한 다이2, 4, 6(10A-2, 10A-4, 10A-6)의 참조 코드워드들의 디코딩 결과를 이용하여 타깃 코드워드를 수정하는 연산 처리를 수행한다(S22).
예로서, ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력으로 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하고, ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제3수평 코드워드(HCW3)를 구성하고, ECC 디코딩 처리에 실패한 다이5(10A-5)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제5수평 코드워드(HCW5)를 구성할 수 있다.
리커버리 모듈(21)은 이와 같이 구성된 코드 매트릭스에서 코드 제약 조건이 성립하지 않는 수직 코드워드들을 검출한다. 예로서, 수직 코드워드들에 대한 짝수 패리티가 성립되지 않는 수직 코드워드들을 검출한다. 이에 따라서, 코드 매트릭스에서 짝수 패리티가 성립되지 않는 제2수직 코드워드(VCW2), 제4수직 코드워드(VCW4) 및 제5수직 코드워드(VCW5)가 검출된다.
리커버리 모듈(21)은 코드 제약 조건이 성립하지 않는 수직 코드워드들에서 각각 수직 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출한다. 코드 제약 조건이 성립하지 않는 제2수직 코드워드(VCW2)의 코드 비트들은 [1_u 0 1_r 0 0_r 1]로 구성된다. 코드 비트들 중에서 디코딩 결과에 해당되는 코드 비트 '0'과 '1'은 신뢰도가 가장 높은 레벨에 해당된다. 이에 따라서, 제2수직 코드워드(VCW2) 중에서 소프트 입력에 해당되는 코드 비트들의 신뢰도를 비교하여 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출할 수 있다. 따라서, 제2수직 코드워드(VCW2)의 코드 비트들 중에서 첫 번째 코드 비트에 해당되는 '1_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다.
같은 방식으로, 코드 제약 조건이 성립하지 않는 제4수직 코드워드(VCW4) [0_u 0 0_r 1 1_r 1] 중에서 첫 번째 코드 비트에 해당되는 '0_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다. 그리고, 코드 제약 조건이 성립하지 않는 제5수직 코드워드(VCW5) [0_r 1 1_u 1 1_u 1] 중에서 세 번째 코드 비트와 다섯 번째 코드 비트가 신뢰도로 가장 낮은 코드 비트에 해당된다. 이와 같이, 코드 제약 조건이 성립하지 않는 수직 코드워드에서 신뢰도가 가장 낮은 코드 비트가 복수 개 검출되는 경우에는 해당 수직 코드워드에서 에러 후보 코드 비트가 검출되지 않은 것으로 판정한다. 이에 따라서, 제5수직 코드워드(VCW5)에서는 에러 후보 코드 비트가 검출되지 않은 것으로 판정한다.
리커버리 모듈(21)은 이와 같이 검출된 에러 후보 코드 비트가 타깃 코드워드의 소프트 입력에 포함되어 있는 경우에, 해당 에러 후보 코드 비트의 사인 비트를 반전시키는 연산처리를 수행한다. 즉, 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하는 코드 비트들 중에서 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)가 에러 후보 코드 비트에 해당된다. 이에 따라서, 제1수평 코드워드(HCW1)의 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)의 사인 비트를 반전시킨다. 즉, 2번째 코드 비트(CB2)인'1_u'를 '0_u'로 수정하고, 4번째 코드 비트(CB4)인 '0_u'를 '1_u'로 수정한다.
이에 따라서, 제1수평 코드워드(HCW1)는 [0_u 1_u 1_r 0_u 0_r 1_u]에서 [0_u 0_u 1_r 1_u 0_r 1_u]로 수정된다. 리커버리 모듈(21)에서 이와 같은 연산 처리에 따라서 수정된 제1수평 코드워드(HCW1_refine)를 ECC 디코더(22)로 출력한다(S23).
ECC 디코더(22)는 리커버리 모듈(21)에서 수정된 제1수평 코드워드(HCW1_refine)를 입력하고, 수정된 제1수평 코드워드(HCW1_refine)에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원한다(S24). 여기에서, 수정된 제1수평 코드워드(HCW1_refine)는 수정된 타깃 코드워드의 소프트 입력에 해당되므로, 다이1(10A-1)의 수정된 타깃 코드워드의 소프트 입력에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원할 수 있게 된다.
도 17은 도 1의 메모리 시스템(100)에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 17을 참조하면, 다이1(10A-1)의 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하고, 다이3(10A-3), 다이5(10A-5) 및 다이6(10A-6)의 참조 코드워드에 대한 ECC 디코딩 처리에 실패한 사례를 보여준다.
메모리 시스템(100)에서 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에, 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 복수의 다이들(10A-1 ~ 10A-N)로부터 읽어내는 동작을 수행한다(S31).
리커버리 모듈(21)은 ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력(HCW1), ECC 디코딩 처리에 실패한 다이3(10A-3), 다이5(10A-5) 및 다이6(10A-6) 각각의 참조 코드워드의 소프트 입력(HCW3, HCW5, HCW6), ECC 디코딩 처리에 성공한 다이2, 4(10A-2, 10A-4)의 참조 코드워드들의 디코딩 결과를 이용하여 타깃 코드워드를 수정하는 연산 처리를 수행한다(S32).
예로서, ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력으로 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하고, ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제3수평 코드워드(HCW3)를 구성하고, ECC 디코딩 처리에 실패한 다이5(10A-5)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제5수평 코드워드(HCW5), ECC 디코딩 처리에 실패한 다이6(10A-6)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제6수평 코드워드(HCW6)를 구성할 수 있다.
리커버리 모듈(21)은 이와 같이 구성된 코드 매트릭스에서 코드 제약 조건이 성립하지 않는 수직 코드워드들을 검출한다. 예로서, 수직 코드워드들에 대한 짝수 패리티가 성립되지 않는 수직 코드워드들을 검출한다. 이에 따라서, 코드 매트릭스에서 짝수 패리티가 성립되지 않는 제2수직 코드워드(VCW2), 제4수직 코드워드(VCW4) 및 제5수직 코드워드(VCW5)가 검출된다.
리커버리 모듈(21)은 코드 제약 조건이 성립하지 않는 수직 코드워드들에서 각각 수직 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출한다. 코드 제약 조건이 성립하지 않는 제2수직 코드워드(VCW2)의 코드 비트들은 [1_u 0 1_r 0 0_r 1_r]로 구성된다. 코드 비트들 중에서 디코딩 결과에 해당되는 코드 비트 '0'과 '1'은 신뢰도가 가장 높은 레벨에 해당된다. 이에 따라서, 제2수직 코드워드(VCW2) 중에서 소프트 입력에 해당되는 코드 비트들의 신뢰도를 비교하여 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출할 수 있다. 따라서, 제2수직 코드워드(VCW2)의 코드 비트들 중에서 첫 번째 코드 비트에 해당되는 '1_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다.
같은 방식으로, 코드 제약 조건이 성립하지 않는 제4수직 코드워드(VCW4) [0_u 0 0_r 1 1_r 1_r] 중에서 첫 번째 코드 비트에 해당되는 '0_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다. 그리고, 코드 제약 조건이 성립하지 않는 제5수직 코드워드(VCW5) [0_r 1 1_u 1 1_u 1_r] 중에서 세 번째 코드 비트와 다섯 번째 코드 비트가 신뢰도로 가장 낮은 코드 비트에 해당된다. 이와 같이, 코드 제약 조건이 성립하지 않는 수직 코드워드에서 신뢰도가 가장 낮은 코드 비트가 복수 개 검출되는 경우에는 해당 수직 코드워드에서 에러 후보 코드 비트가 검출되지 않은 것으로 판정한다. 이에 따라서, 제5수직 코드워드(VCW5)에서는 에러 후보 코드 비트가 검출되지 않은 것으로 판정한다.
리커버리 모듈(21)은 이와 같이 검출된 에러 후보 코드 비트가 타깃 코드워드의 소프트 입력에 포함되어 있는 경우에, 해당 에러 후보 코드 비트의 사인 비트를 반전시키는 연산처리를 수행한다. 즉, 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하는 코드 비트들 중에서 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)가 에러 후보 코드 비트에 해당된다. 이에 따라서, 제1수평 코드워드(HCW1)의 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)의 사인 비트를 반전시킨다. 즉, 2번째 코드 비트(CB2)인'1_u'를 '0_u'로 수정하고, 4번째 코드 비트(CB4)인 '0_u'를 '1_u'로 수정한다.
이에 따라서, 제1수평 코드워드(HCW1)는 [0_u 1_u 1_r 0_u 0_r 1_u]에서 [0_u 0_u 1_r 1_u 0_r 1_u]로 수정된다. 리커버리 모듈(21)에서 이와 같은 연산 처리에 따라서 수정된 제1수평 코드워드(HCW1_refine)를 ECC 디코더(22)로 출력한다(S33).
ECC 디코더(22)는 리커버리 모듈(21)에서 수정된 제1수평 코드워드(HCW1_refine)를 입력하고, 수정된 제1수평 코드워드(HCW1_refine)에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원한다(S34). 여기에서, 수정된 제1수평 코드워드(HCW1_refine)는 수정된 타깃 코드워드의 소프트 입력에 해당되므로, 다이1(10A-1)의 수정된 타깃 코드워드의 소프트 입력에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원할 수 있게 된다.
도 18은 도 1의 메모리 시스템(100)에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 18을 참조하면, 다이1(10A-1)의 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하고, 다이2(10A-2), 다이3(10A-3), 다이4(10A-4), 다이5(10A-5) 및 다이6(10A-6)의 참조 코드워드에 대한 ECC 디코딩 처리에 실패한 사례를 보여준다. 즉, 스트라이프를 구성하는 모든 다이들에 대한 ECC 디코딩 처리에 실패한 사례를 보여준다.
메모리 시스템(100)에서 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에, 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 복수의 다이들(10A-1 ~ 10A-N)로부터 읽어내는 동작을 수행한다(S41).
리커버리 모듈(21)은 ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력(HCW1), ECC 디코딩 처리에 실패한 다이2(10A-2), 다이3(10A-3), 다이4(10A-4), 다이5(10A-5) 및 다이6(10A-6) 각각의 참조 코드워드의 소프트 입력(HCW2, HCW3, HCW4, HCW5, HCW6)을 이용하여 타깃 코드워드를 수정하는 연산 처리를 수행한다(S42).
예로서, ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력으로 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하고, ECC 디코딩 처리에 실패한 다이2(10A-2)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제2수평 코드워드(HCW2)를 구성하고, ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제3수평 코드워드(HCW3)를 구성하고, ECC 디코딩 처리에 실패한 다이4(10A-4)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제4수평 코드워드(HCW4)를 구성하고, ECC 디코딩 처리에 실패한 다이5(10A-5)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제5수평 코드워드(HCW5), ECC 디코딩 처리에 실패한 다이6(10A-6)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제6수평 코드워드(HCW6)를 구성할 수 있다.
리커버리 모듈(21)은 이와 같이 구성된 코드 매트릭스에서 코드 제약 조건이 성립하지 않는 수직 코드워드들을 검출한다. 예로서, 수직 코드워드들에 대한 짝수 패리티가 성립되지 않는 수직 코드워드들을 검출한다. 이에 따라서, 코드 매트릭스에서 짝수 패리티가 성립되지 않는 제2수직 코드워드(VCW2), 제4수직 코드워드(VCW4) 및 제5수직 코드워드(VCW5)가 검출된다.
리커버리 모듈(21)은 코드 제약 조건이 성립하지 않는 수직 코드워드들에서 각각 수직 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출한다. 코드 제약 조건이 성립하지 않는 제2수직 코드워드(VCW2)의 코드 비트들은 [1_u 0_r 1_r 0_r 0_r 1_r]로 구성된다. 제2수직 코드워드(VCW2)의 소프트 입력에 대한 코드 비트들의 신뢰도를 비교하여 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출할 수 있다. 따라서, 제2수직 코드워드(VCW2)의 코드 비트들 중에서 첫 번째 코드 비트에 해당되는 '1_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다.
같은 방식으로, 코드 제약 조건이 성립하지 않는 제4수직 코드워드(VCW4) [0_u 0_r 0_r 1_r 1_r 1_r] 중에서 첫 번째 코드 비트에 해당되는 '0_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다. 그리고, 코드 제약 조건이 성립하지 않는 제5수직 코드워드(VCW5) [0_r 1_r 1_u 1_r 1_u 1_r] 중에서 세 번째 코드 비트와 다섯 번째 코드 비트가 신뢰도로 가장 낮은 코드 비트에 해당된다. 이와 같이, 코드 제약 조건이 성립하지 않는 수직 코드워드에서 신뢰도가 가장 낮은 코드 비트가 복수 개 검출되는 경우에는 해당 수직 코드워드에서 에러 후보 코드 비트가 검출되지 않은 것으로 판정한다. 이에 따라서, 제5수직 코드워드(VCW5)에서는 에러 후보 코드 비트가 검출되지 않은 것으로 판정한다.
리커버리 모듈(21)은 이와 같이 검출된 에러 후보 코드 비트가 타깃 코드워드의 소프트 입력에 포함되어 있는 경우에, 해당 에러 후보 코드 비트의 사인 비트를 반전시키는 연산처리를 수행한다. 즉, 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하는 코드 비트들 중에서 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)가 에러 후보 코드 비트에 해당된다. 이에 따라서, 제1수평 코드워드(HCW1)의 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)의 사인 비트를 반전시킨다. 즉, 2번째 코드 비트(CB2)인'1_u'를 '0_u'로 수정하고, 4번째 코드 비트(CB4)인 '0_u'를 '1_u'로 수정한다.
이에 따라서, 제1수평 코드워드(HCW1)는 [0_u 1_u 1_r 0_u 0_r 1_u]에서 [0_u 0_u 1_r 1_u 0_r 1_u]로 수정된다. 리커버리 모듈(21)에서 이와 같은 연산 처리에 따라서 수정된 제1수평 코드워드(HCW1_refine)를 ECC 디코더(22)로 출력한다(S43).
ECC 디코더(22)는 리커버리 모듈(21)에서 수정된 제1수평 코드워드(HCW1_refine)를 입력하고, 수정된 제1수평 코드워드(HCW1_refine)에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원한다(S44). 여기에서, 수정된 제1수평 코드워드(HCW1_refine)는 수정된 타깃 코드워드의 소프트 입력에 해당되므로, 다이1(10A-1)의 수정된 타깃 코드워드의 소프트 입력에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원할 수 있게 된다.
도 19는 도 1의 메모리 시스템(100)에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 19를 참조하면, 다이1(10A-1)의 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하고, 다이3(10A-3)의 참조 코드워드에 대한 ECC 디코딩 처리에 실패한 사례를 보여준다.
메모리 시스템(100)에서 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에, 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 복수의 다이들(10A-1 ~ 10A-N)로부터 읽어내는 동작을 수행한다(S51).
리커버리 모듈(21)은 ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력(HCW1), ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력(HCW3), ECC 디코딩 처리에 성공한 다이2, 4, 5, 6(10A-2, 10A-4, 10A-5, 10A-6)의 참조 코드워드들의 디코딩 결과를 이용하여 타깃 코드워드를 수정하는 연산 처리를 수행한다(S52).
예로서, ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력으로 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하고, ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제3수평 코드워드(HCW3)를 구성한다. 그리고, ECC 디코딩 처리에 성공한 다이2, 4, 5, 6(10A-2, 10A-4, 10A-5, 10A-6)의 참조 코드워드들의 디코딩 결과로 코드 매트릭스의 나머지 수평 코드워드들을 구성한다.
리커버리 모듈(21)은 이와 같이 구성된 코드 매트릭스에서 코드 제약 조건이 성립하지 않는 수직 코드워드들을 검출한다. 예로서, 수직 코드워드들에 대한 짝수 패리티가 성립되지 않는 수직 코드워드들을 검출한다. 이에 따라서, 코드 매트릭스에서 짝수 패리티가 성립되지 않는 제2수직 코드워드(VCW2), 제4수직 코드워드(VCW4) 및 제5수직 코드워드(VCW5)가 검출된다.
리커버리 모듈(21)은 코드 제약 조건이 성립하지 않는 수직 코드워드들에서 각각 수직 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출한다. 코드 제약 조건이 성립하지 않는 제2수직 코드워드(VCW2)의 코드 비트들은 [1_u 0 1_r 0 0 1]로 구성된다. 코드 비트들 중에서 디코딩 결과에 해당되는 코드 비트 '0'과 '1'은 신뢰도가 가장 높은 레벨에 해당된다. 이에 따라서, 제2수직 코드워드(VCW2) 중에서 소프트 입력에 해당되는 코드 비트들의 신뢰도를 비교하여 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출할 수 있다. 이에 따라서, 제2수직 코드워드(VCW2)의 코드 비트들 중에서 첫 번째 코드 비트에 해당되는 '1_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다.
같은 방식으로, 코드 제약 조건이 성립하지 않는 제4수직 코드워드(VCW4) [0_u 0 0_r 1 1 1] 중에서 첫 번째 코드 비트에 해당되는 '0_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다. 그리고, 코드 제약 조건이 성립하지 않는 제5수직 코드워드(VCW5) [0_r 1 0_r 0 1 1] 중에서 첫 번째 코드 비트와 세 번째 코드 비트가 신뢰도로 가장 낮은 코드 비트에 해당된다. 이와 같이, 코드 제약 조건이 성립하지 않는 수직 코드워드에서 신뢰도가 가장 낮은 코드 비트가 복수 개 검출되는 경우에는 해당 수직 코드워드에서 에러 후보 코드 비트가 검출되지 않은 것으로 판정한다. 이에 따라서, 제5수직 코드워드(VCW5)에서는 에러 후보 코드 비트가 검출되지 않은 것으로 판정한다.
리커버리 모듈(21)은 이와 같이 검출된 에러 후보 코드 비트가 타깃 코드워드의 소프트 입력에 포함되어 있는 경우에, 해당 에러 후보 코드 비트의 사인 비트를 반전시키는 연산처리를 수행한다. 즉, 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하는 코드 비트들 중에서 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)가 에러 후보 코드 비트에 해당된다. 이에 따라서, 제1수평 코드워드(HCW1)의 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)의 사인 비트를 반전시킨다. 즉, 2번째 코드 비트(CB2)인'1_u'를 '0_u'로 수정하고, 4번째 코드 비트(CB4)인 '0_u'를 '1_u'로 수정한다.
이에 따라서, 제1수평 코드워드(HCW1)는 [0_r 1_u 1_u 0_u 0_r 1_u]에서 [0_r 0_u 1_u 1_u 0_r 1_u]로 수정된다. 리커버리 모듈(21)에서 이와 같은 연산 처리에 따라서 수정된 제1수평 코드워드(HCW1_refine)를 ECC 디코더(22)로 출력한다(S53).
ECC 디코더(22)는 리커버리 모듈(21)에서 수정된 제1수평 코드워드(HCW1_refine)를 입력하고, 수정된 제1수평 코드워드(HCW1_refine)에 대한 ECC 디코딩 처리를 다시 수행한다(S54).
만일, ECC 디코더(22)에서의 수정된 제1수평 코드워드(HCW1_refine)에 대한 데이터 복원에 실패한 경우에 추가적인 소프트 디시젼 리드 동작을 수행하고, 추가적인 소프트 디시젼 리드 동작에 따라서 획득한 코드워드를 이용하여 데이터 복원 처리를 수행한다(S55). 예로서, 수정된 타깃 코드워드의 소프트 입력에 대한 ECC 디코딩 처리에 실패한 경우에는 도 11에 도시된 바와 같은 추가적인 소프트 디시젼 리드 동작을 수행한 후에 획득한 소프트 입력에 기초하여 데이터 복원 처리를 수행할 수 있다. ECC 디코딩 처리에 실패한 수정된 타깃 코드워드의 소프트 입력의 신뢰도는 {r, u}로 분류된다. 이에 비하여, 추가적인 소프트 디시젼 리드 동작을 수행한 후에 획득한 소프트 입력의 신뢰도는 {r2, r1, u}로 보다 세분화될 수 있다.
도 20은 도 1의 메모리 시스템(100)에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 20은 도 19에 도시된 바와 같은 동작에 따른 소프트 입력의 데이터 복구 처리에 실패한 경우에 추가적인 소프트 디시젼 리드 동작에 의하여 획득한 데이터를 이용하여 데이터 복구 처리를 다시 수행하는 사례를 보여준다.
도 20을 참조하면, 추가적인 소프트 디시젼 리드 동작에 의하여 다이1(10A-1)에서 획득한 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하고, 다이3(10A-3)의 참조 코드워드에 대한 ECC 디코딩 처리에 실패한 사례를 보여준다.
메모리 시스템(100)에서 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에, 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 복수의 다이들(10A-1 ~ 10A-N)로부터 읽어내는 동작을 수행한다(S61).
리커버리 모듈(21)은 ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력(HCW1), ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력(HCW3), ECC 디코딩 처리에 성공한 다이2, 4, 5, 6(10A-2, 10A-4, 10A-5, 10A-6)의 참조 코드워드들의 디코딩 결과를 이용하여 타깃 코드워드를 수정하는 연산 처리를 수행한다(S62).
예로서, ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력으로 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하고, ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제3수평 코드워드(HCW3)를 구성한다. 그리고, ECC 디코딩 처리에 성공한 다이2, 4, 5, 6(10A-2, 10A-4, 10A-5, 10A-6)의 참조 코드워드들의 디코딩 결과로 코드 매트릭스의 나머지 수평 코드워드들을 구성한다.
리커버리 모듈(21)은 이와 같이 구성된 코드 매트릭스에서 코드 제약 조건이 성립하지 않는 수직 코드워드들을 검출한다. 예로서, 수직 코드워드들에 대한 짝수 패리티가 성립되지 않는 수직 코드워드들을 검출한다. 이에 따라서, 코드 매트릭스에서 짝수 패리티가 성립되지 않는 제2수직 코드워드(VCW2), 제4수직 코드워드(VCW4) 및 제5수직 코드워드(VCW5)가 검출된다.
리커버리 모듈(21)은 코드 제약 조건이 성립하지 않는 수직 코드워드들에서 각각 수직 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출한다. 코드 제약 조건이 성립하지 않는 제2수직 코드워드(VCW2)의 코드 비트들은 [1_u 0 1_r1 0 0 1]로 구성된다. 코드 비트들 중에서 디코딩 결과에 해당되는 코드 비트 '0'과 '1'은 신뢰도가 가장 높은 레벨에 해당된다. 이에 따라서, 제2수직 코드워드(VCW2) 중에서 소프트 입력에 해당되는 코드 비트들의 신뢰도를 비교하여 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출할 수 있다. 이에 따라서, 제2수직 코드워드(VCW2)의 코드 비트들 중에서 첫 번째 코드 비트에 해당되는 '1_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다.
같은 방식으로, 코드 제약 조건이 성립하지 않는 제4수직 코드워드(VCW4) [0_u 0 0_r1 1 1 1] 중에서 첫 번째 코드 비트에 해당되는 '0_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다. 그리고, 코드 제약 조건이 성립하지 않는 제5수직 코드워드(VCW5) [0_r1 1 0_r2 0 1 1] 중에서 첫 번째 코드 비트에 해당되는 '0_r1'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다.
리커버리 모듈(21)은 이와 같이 검출된 에러 후보 코드 비트가 타깃 코드워드의 소프트 입력에 포함되어 있는 경우에, 해당 에러 후보 코드 비트의 사인 비트를 반전시키는 연산처리를 수행한다. 즉, 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하는 코드 비트들 중에서 2번째 코드 비트(CB2), 4번째 코드 비트(CB4) 및 5번째 코드 비트(CB5)가 에러 후보 코드 비트에 해당된다. 이에 따라서, 제1수평 코드워드(HCW1)의 2번째 코드 비트(CB2), 4번째 코드 비트(CB4) 및 5번째 코드 비트(CB5) 각각의 사인 비트를 반전시킨다. 즉, 2번째 코드 비트(CB2)인'1_u'를 '0_u'로 수정하고, 4번째 코드 비트(CB4)인 '0_u'를 '1_u'로 수정하고, 5번째 코드 비트(CB5)인 '0_r1'를 '1_u'로 수정한다. 예로서, 신뢰도가 'r1' 또는 'r2' 인 코드 비트의 사인 비트를 반전시키는 경우에는 신뢰도를 'u'로 수정한다.
이에 따라서, 제1수평 코드워드(HCW1)는 [0_r1 1_u 1_u 0_u 0_r1 1_u]에서 [0_r1 0_u 1_u 1_u 1_u 1_u]로 수정된다. 리커버리 모듈(21)에서 이와 같은 연산 처리에 따라서 수정된 제1수평 코드워드(HCW1_refine)를 ECC 디코더(22)로 출력한다(S63).
ECC 디코더(22)는 리커버리 모듈(21)에서 수정된 제1수평 코드워드(HCW1_refine)를 입력하고, 수정된 제1수평 코드워드(HCW1_refine)에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원한다(S64). 이에 따라서, 추가적인 소프트 디시젼 리드 동작에 의하여 획득한 타깃 코드워드에 대한 복원 처리를 수행할 수 있게 된다.
도 21은 도 1의 메모리 시스템(100)에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 21은 코드 매트릭스에서 코드 제약 조건이 성립하지 않는 수직 코드워드들에 대한 사인 비트 수정 동작과 더불어 코드 제약 조건이 성립하는 수직 코드워드들에 대해서도 신뢰도 비트를 수정하는 동작을 수행하는 사례를 보여준다.
메모리 시스템(100)에서 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에, 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 복수의 다이들(10A-1 ~ 10A-N)로부터 읽어내는 동작을 수행한다(S71).
리커버리 모듈(21)은 ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력(HCW1), ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력(HCW3), ECC 디코딩 처리에 성공한 다이2, 4, 5, 6(10A-2, 10A-4, 10A-5, 10A-6)의 참조 코드워드들의 디코딩 결과를 이용하여 타깃 코드워드를 수정하는 연산 처리를 수행한다(S72).
예로서, ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력으로 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하고, ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제3수평 코드워드(HCW3)를 구성한다. 그리고, ECC 디코딩 처리에 성공한 다이2, 4, 5, 6(10A-2, 10A-4, 10A-5, 10A-6)의 참조 코드워드들의 디코딩 결과로 코드 매트릭스의 나머지 수평 코드워드들을 구성한다.
리커버리 모듈(21)은 이와 같이 구성된 코드 매트릭스에서 코드 제약 조건이 성립하지 않는 수직 코드워드들을 검출한다. 예로서, 수직 코드워드들에 대한 짝수 패리티가 성립되지 않는 수직 코드워드들을 검출한다. 이에 따라서, 코드 매트릭스에서 짝수 패리티가 성립되지 않는 제2수직 코드워드(VCW2) 및 제4수직 코드워드(VCW4)가 검출된다.
리커버리 모듈(21)은 코드 제약 조건이 성립하지 않는 수직 코드워드들에서 각각 수직 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출한다. 코드 제약 조건이 성립하지 않는 제2수직 코드워드(VCW2)의 코드 비트들은 [1_u 0 1_r1 0 0 1]로 구성된다. 코드 비트들 중에서 디코딩 결과에 해당되는 코드 비트 '0'과 '1'은 신뢰도가 가장 높은 레벨에 해당된다. 이에 따라서, 제2수직 코드워드(VCW2) 중에서 소프트 입력에 해당되는 코드 비트들의 신뢰도를 비교하여 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출할 수 있다. 이에 따라서, 제2수직 코드워드(VCW2)의 코드 비트들 중에서 첫 번째 코드 비트에 해당되는 '1_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다. 같은 방식으로, 코드 제약 조건이 성립하지 않는 제4수직 코드워드(VCW4) [0_u 0 0_r1 1 1 1] 중에서 첫 번째 코드 비트에 해당되는 '0_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다.
리커버리 모듈(21)은 이와 같이 검출된 에러 후보 코드 비트가 타깃 코드워드의 소프트 입력에 포함되어 있는 경우에, 해당 에러 후보 코드 비트의 사인 비트를 반전시키는 연산처리를 수행한다. 즉, 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하는 코드 비트들 중에서 2번째 코드 비트(CB2) 및 4번째 코드 비트(CB4)가 에러 후보 코드 비트에 해당된다. 이에 따라서, 제1수평 코드워드(HCW1)의 2번째 코드 비트(CB2) 및 4번째 코드 비트(CB4) 각각의 사인 비트를 반전시킨다. 즉, 2번째 코드 비트(CB2)인'1_u'를 '0_u'로 수정하고, 4번째 코드 비트(CB4)인 '0_u'를 '1_u'로 수정한다.
추가적으로, 리커버리 모듈(21)은 코드 제약 조건이 성립하는 수직 코드워드들에 대해서도 신뢰도 비트를 수정하는 동작을 수행한다. 예로서, 코드 제약 조건이 성립하는 수직 코드워드의 코드 비트들의 소프트 입력의 신뢰도가 [r1, r1]인 경우에 신뢰도를 r1에서 r2로 수정할 수 있다. 즉, 코드 제약 조건이 성립하는 제5수직 코드워드(VCW5) [0_r1 1 0_r1 1 1 1]에서 소프트 입력에 해당되는 1번째 코드 비트 '0_r1'과 3번째 코드 비트 '0_r1'의 신뢰도가 모두 r1이므로, 1번째 코드 비트 '0_r1'를 '0_r2'로 신뢰도를 높일 수 있다. 이에 따라서, 제1수평 코드워드(HCW1)의 5번째 코드 비트(CB5)는 '0_r1'에서 '0_r2'로 수정될 수 있다. 다른 예로서, 코드 제약 조건이 성립하는 수직 코드워드에서의 소프트 입력의 신뢰도를 변경할 수 있는 조건에 대한 테이블을 초기 설정하고, 이와 같은 테이블에 기초하여 소프트 입력의 신뢰도를 수정할 수도 있다.
따라서, 제1수평 코드워드(HCW1)는 [0_u 1_u 1_r1 0_u 0_r1 1_u]에서 [0_u 0_u 1_r1 1_u 0_r2 1_u]로 수정된다. 리커버리 모듈(21)에서 이와 같은 연산 처리에 따라서 수정된 제1수평 코드워드(HCW1_refine)를 ECC 디코더(22)로 출력한다(S73).
ECC 디코더(22)는 리커버리 모듈(21)에서 수정된 제1수평 코드워드(HCW1_refine)를 입력하고, 수정된 제1수평 코드워드(HCW1_refine)에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원한다(S74).
도 22a 및 도 22b는 도 1의 메모리 시스템(100)에서의 데이터 복구 처리를 수행하는 또 다른 사례를 보여주는 도면이다.
도 22a를 참조하면, 다이1(10A-1)의 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하고, 다이3(10A-3) 및 다이5(10A-5)의 참조 코드워드에 대한 ECC 디코딩 처리에 실패한 사례를 보여준다.
메모리 시스템(100)에서 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에, 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 복수의 다이들(10A-1 ~ 10A-N)로부터 읽어내는 동작을 수행한다(S81).
리커버리 모듈(21)은 ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력(HCW1), ECC 디코딩 처리에 실패한 다이3(10A-3) 및 다이5(10A-5) 각각의 참조 코드워드의 소프트 입력(HCW3, HCW5), ECC 디코딩 처리에 성공한 다이2, 4, 6(10A-2, 10A-4, 10A-6)의 참조 코드워드들의 디코딩 결과를 이용하여 타깃 코드워드를 수정하는 연산 처리를 수행한다(S82).
예로서, ECC 디코딩 처리에 실패한 다이1(10A-1)의 타깃 코드워드의 소프트 입력으로 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하고, ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제3수평 코드워드(HCW3)를 구성하고, ECC 디코딩 처리에 실패한 다이5(10A-5)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제5수평 코드워드(HCW5)를 구성할 수 있다.
리커버리 모듈(21)은 이와 같이 구성된 코드 매트릭스에서 코드 제약 조건이 성립하지 않는 수직 코드워드들을 검출한다. 예로서, 수직 코드워드들에 대한 짝수 패리티가 성립되지 않는 수직 코드워드들을 검출한다. 이에 따라서, 코드 매트릭스에서 짝수 패리티가 성립되지 않는 제2수직 코드워드(VCW2) 및 제4수직 코드워드(VCW4)가 검출된다.
리커버리 모듈(21)은 코드 제약 조건이 성립하지 않는 수직 코드워드들에서 각각 수직 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출한다. 코드 제약 조건이 성립하지 않는 제2수직 코드워드(VCW2)의 코드 비트들은 [1_u 0 1_r 0 0_r 1]로 구성된다. 코드 비트들 중에서 디코딩 결과에 해당되는 코드 비트 '0'과 '1'은 신뢰도가 가장 높은 레벨에 해당된다. 이에 따라서, 제2수직 코드워드(VCW2) 중에서 소프트 입력에 해당되는 코드 비트들의 신뢰도를 비교하여 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출할 수 있다. 따라서, 제2수직 코드워드(VCW2)의 코드 비트들 중에서 첫 번째 코드 비트에 해당되는 '1_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다. 같은 방식으로, 코드 제약 조건이 성립하지 않는 제4수직 코드워드(VCW4) [0_u 0 0_r 1 1_r 1] 중에서 첫 번째 코드 비트에 해당되는 '0_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다.
리커버리 모듈(21)은 이와 같이 검출된 에러 후보 코드 비트가 타깃 코드워드의 소프트 입력에 포함되어 있는 경우에, 해당 에러 후보 코드 비트의 사인 비트를 반전시키는 연산처리를 수행한다. 즉, 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하는 코드 비트들 중에서 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)가 에러 후보 코드 비트에 해당된다. 이에 따라서, 제1수평 코드워드(HCW1)의 2번째 코드 비트(CB2)와 4번째 코드 비트(CB4)의 사인 비트를 반전시킨다. 즉, 2번째 코드 비트(CB2)인'1_u'를 '0_u'로 수정하고, 4번째 코드 비트(CB4)인 '0_u'를 '1_u'로 수정한다.
이에 따라서, 제1수평 코드워드(HCW1)는 [0_u 1_u 1_r 0_u 0_r 1_u]에서 [0_u 0_u 1_r 1_u 0_r 1_u]로 수정된다. 리커버리 모듈(21)에서 이와 같은 연산 처리에 따라서 수정된 제1수평 코드워드(HCW1_refine)를 ECC 디코더(22)로 출력한다(S83).
ECC 디코더(22)는 리커버리 모듈(21)에서 수정된 제1수평 코드워드(HCW1_refine)를 입력하고, 수정된 제1수평 코드워드(HCW1_refine)에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원한다(S84). 여기에서, 수정된 제1수평 코드워드(HCW1_refine)는 수정된 타깃 코드워드의 소프트 입력에 해당되므로, 다이1(10A-1)의 수정된 타깃 코드워드의 소프트 입력에 대한 ECC 디코딩 처리를 다시 수행하여 타깃 코드워드를 복원할 수 있게 된다.
도 22b는 도 22a에서 복원된 다이1(10A-1)의 타깃 코드워드의 디코딩 결과를 이용하여 ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드에 대한 복원 처리를 수행하는 사례를 보여준다.
도 22b를 참조하면, 다이1(10A-1)은 수정된 타깃 코드워드에 대한 ECC 디코딩 처리에 성공하고, 다이3(10A-3) 및 다이5(10A-5)는 참조 코드워드에 대한 ECC 디코딩 처리에 실패한 상태를 보여준다.
리커버리 모듈(21)은 ECC 디코딩 처리에 성공한 다이1(10A-1)의 수정된 타깃 코드워드의 디코딩 결과(HCW1), ECC 디코딩 처리에 실패한 다이3(10A-3) 및 다이5(10A-5) 각각의 참조 코드워드의 소프트 입력(HCW3, HCW5), ECC 디코딩 처리에 성공한 다이2, 4, 6(10A-2, 10A-4, 10A-6)의 참조 코드워드들의 디코딩 결과를 이용하여 다이3(10A-3)의 참조 코드워드를 수정하는 연산 처리를 수행한다(S85).
예로서, ECC 디코딩 처리에 성공한 다이1(10A-1)의 수정된 타깃 코드워드의 디코딩 결과로 코드 매트릭스의 제1수평 코드워드(HCW1)를 구성하고, ECC 디코딩 처리에 실패한 다이3(10A-3)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제3수평 코드워드(HCW3)를 구성하고, ECC 디코딩 처리에 실패한 다이5(10A-5)의 참조 코드워드의 소프트 입력으로 코드 매트릭스의 제5수평 코드워드(HCW5)를 구성할 수 있다.
리커버리 모듈(21)은 이와 같이 구성된 코드 매트릭스에서 코드 제약 조건이 성립하지 않는 수직 코드워드들을 검출한다. 예로서, 수직 코드워드들에 대한 짝수 패리티가 성립되지 않는 수직 코드워드들을 검출한다. 이에 따라서, 코드 매트릭스에서 짝수 패리티가 성립되지 않는 제1수직 코드워드(VCW1) 및 제6수직 코드워드(VCW6)가 검출된다.
리커버리 모듈(21)은 코드 제약 조건이 성립하지 않는 수직 코드워드들에서 각각 수직 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출한다. 코드 제약 조건이 성립하지 않는 제1수직 코드워드(VCW1)의 코드 비트들은 [1 0 1_r 0 1_u 0]로 구성된다. 코드 비트들 중에서 디코딩 결과에 해당되는 코드 비트 '0'과 '1'은 신뢰도가 가장 높은 레벨에 해당된다. 이에 따라서, 제1수직 코드워드(VCW1) 중에서 소프트 입력에 해당되는 코드 비트들의 신뢰도를 비교하여 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출할 수 있다. 따라서, 제1수직 코드워드(VCW1)의 코드 비트들 중에서 다섯 번째 코드 비트에 해당되는 '1_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다. 같은 방식으로, 코드 제약 조건이 성립하지 않는 제6수직 코드워드(VCW6) [0 1 0_u 1 0_r 0] 중에서 세 번째 코드 비트에 해당되는 '0_u'이 신뢰도가 가장 낮은 에러 후보 코드 비트로 검출된다.
리커버리 모듈(21)은 이와 같이 검출된 에러 후보 코드 비트가 복원 처리하고자 하는 다이3(10A-3)의 참조 코드워드에 해당되는 제3수평 코드워드(HCW3)의 소프트 입력에 포함되어 있는 경우에, 해당 에러 후보 코드 비트의 사인 비트를 반전시키는 연산처리를 수행한다. 즉, 코드 매트릭스의 제3수평 코드워드(HCW3)를 구성하는 코드 비트들 중에서 6번째 코드 비트(CB6)가 에러 후보 코드 비트에 해당된다. 이에 따라서, 제3수평 코드워드(HCW3)의 6번째 코드 비트(CB6)의 사인 비트를 반전시킨다. 즉, 6번째 코드 비트(CB6)인'1_u'를 '0_u'로 수정한다.
이에 따라서, 제3수평 코드워드(HCW3)는 [1_r 1_r 1_u 0_r 0_r 1_u]에서 [1_r 1_r 1_u 0_r 0_r 0_u]로 수정된다. 리커버리 모듈(21)에서 이와 같은 연산 처리에 따라서 수정된 제3수평 코드워드(HCW3_refine)를 ECC 디코더(22)로 출력한다(S86).
ECC 디코더(22)는 리커버리 모듈(21)에서 수정된 제3수평 코드워드(HCW3_refine)를 입력하고, 수정된 제3수평 코드워드(HCW3_refine)에 대한 ECC 디코딩 처리를 다시 수행하여 다이3(10A-3)의 참조 코드워드를 복원한다(S87). 여기에서, 수정된 제3수평 코드워드(HCW3_refine)는 다이3(10A-3)의 수정된 참조 코드워드의 소프트 입력에 해당되므로, 다이3(10A-3)의 수정된 참조 코드워드의 소프트 입력에 대한 ECC 디코딩 처리를 다시 수행하여 참조 코드워드를 복원할 수 있게 된다.
도 23은 본 발명의 기술적 사상에 따른 레이드 스토리지 시스템(1000)의 구성을 예시적으로 보여준다.
도 23을 참조하면, 레이드 스토리지 시스템(1000)은 복수의 스토리지 디바이스들(1100)과 레이드 컨트롤러(1200)를 포함한다.
복수의 스토리지 디바이스들(1100)은 N(N은 2 이상의 정수)개의 스토리지 디바이스들(1100-1 ~ 1100-N)로 구성된다. 그리고, 스토리지 디바이스들(1100-1 ~ 1100-N) 각각은 솔리드 스테이트 드라이브(SSD) 또는 하드 디스크 드라이브(HDD)로 구현될 수 있다.
레이드 컨트롤러(1200)는 스트라이프 매핑 정보에 기초하여 복수의 스토리지 디바이스들(1100-1 ~1100-N)을 제어한다.
레이드 컨트롤러(1200)는 스토리지 디바이스들(1100-1 ~ 1100-N)로부터 스트라이프 단위로 수신되는 데이터에 기초하여 다차원 코드(multi-dimensional code)를 생성할 수 있다. 예로서, 스트라이프(stripe)는 레이드(RAID; Redundant Array of Inexpensive Disk) 방식에 따른 스트라이프가 적용될 수 있다.
레이드 컨트롤러(20)는 리커버리 모듈(1201) 및 ECC 디코더(1202)를 포함한다.
리커버리 모듈(1201)는 복수의 스토리지 디바이스들 중에서 동일한 스트라이프를 형성하는 2개 이상의 스토리지 디바이스들에서 읽어낸 코드워드들에 대한 ECC 디코딩 처리에 실패하는 경우에, ECC 디코딩 처리에 실패한 스토리지 디바이스들로부터 수신되는 소프트 입력 및 ECC 디코딩 처리에 성공한 스토리지 디바이스들로부터는 수신되는 디코딩 결과를 이용하여 코드 연관성에 따른 연산 처리에 기초하여 ECC 디코딩 처리에 실패한 코드워드의 소프트 입력을 수정하는 동작을 수행한다.
리커버리 모듈(1201)는 타깃 코드워드에 대한 ECC 디코딩 처리에 실패한 경우에 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들 및 ECC 디코딩 처리에 실패 타깃 코드워드를 이용한 코드 연관성에 따른 연산 처리에 기초하여 수정된 타깃 코드워드를 생성할 수 있다. 여기에서, 참조 코드워드들은 타깃 코드워드와 동일한 스트라이프를 형성하는 스토리지 디바이스들(1100-1 ~ 1100-N)로부터 읽어낸 코드워드들을 포함할 수 있다.
리커버리 모듈(1201)는 참조 코드워드의 디코딩 결과, 참조 코드워드의 소프트 입력 및 상기 타깃 코드워드의 소프트 입력으로 구성되는 코드 매트릭스로부터 코드 제약 조건을 만족시키지 못하는 후보 코드워드를 검출하고, 후보 코드워드에 포함된 코드 비트들에 대한 신뢰도에 기초하여 타깃 코드워드를 수정하는 연산 처리를 수행할 수 있다.
리커버리 모듈(1201)에서의 수정된 타깃 코드워드를 생성하는 세부적인 연산 방법은 도 1의 리커버리 모듈(21)과 실질적으로 동일하므로 중복적인 설명은 피하기로 한다.
ECC 디코더(1202)는 리커버리 모듈(1201)에서 수정된 타깃 코드워드 또는 수정된 참조 코드워드의 입력에 대하여 에러 검출 및 정정 처리를 수행한다. 예로서, LDPC(low density parity check) code, BCH code, turbo code, 컨볼루션 코드(convolution code) 등을 이용하여 에러 정정 처리를 수행할 수 있다.
도 24는 도 23에 도시된 레이드 컨트롤러(1200A) 구성의 일 예를 보여준다.
도 24에 도시된 바와 같이, 레이드 컨트롤러(1200A)는 프로세서(1210A), 리커버리 모듈(1201A), ECC 디코더(1202), RAM(Random Access Memory; 1220A), I/O 인터페이스(1230) 및 버스(1240)를 구비한다.
레이드 컨트롤러(1200A)의 구성요소들은 버스(1240)를 통하여 전기적으로 연결될 수 있다.
프로세서(210A)는 RAM(1220A)에 저장된 프로그램 코드 및 데이터들을 이용하여 레이드 스토리지 시스템(1000)의 동작을 전반적으로 제어한다. 예로서, 프로세서(1210A)는 마이크로프로세서(micro-processor) 또는 중앙처리장치(Central Processing Unit; CPU)로 구현될 수 있다. 레이드 스토리지 시스템(1000)이 초기화될 때 프로세서(1210A)는 레이드 스토리지 시스템(1000)에서 수행되는 동작들을 제어하는데 필요한 프로그램 코드 및 데이터들을 스토리지 디바이스들(1100-1 ~1100-N)로부터 읽어내어 RAM(1220A)에 로딩시킬 수 있다.
프로세서(210A)는 RAM(1220A)에 저장된 시스템 데이터를 이용하여 도 27 내지 도 35에 도시된 흐름도에 따른 데이터 복구에 필요한 동작들을 수행할 수 있다.
리커버리 모듈(1201A)은 타깃 코드워드에 대한 ECC 디코딩 처리에 실패한 경우에 ECC 디코딩 처리에 실패한 데이터에 대한 복원하기 위하여 수정된 타깃 코드워드를 생성하는 연산 처리를 수행한다. 예로서, 리커버리 모듈(1201A)은 하드웨어 논리 회로로 구현될 수 있다. ECC 디코더(1202)는 리커버리 모듈(1201A)에서 수정된 타깃 코드워드 또는 수정된 참조 코드워드의 입력에 대하여 에러 검출 및 정정 처리를 수행한다.
I/O 인터페이스(1230)는 입/출력 장치들과 접속하여 데이터를 송신 또는 수신하는 기능을 수행한다. 예로서, I/O 인터페이스(1230)를 통하여 접속되는 스토리지 디바이스들(1100-1 ~ 1100-N)로 데이터를 송신하거나 스토리지 디바이스들(1100-1 ~ 1100-N)로부터 데이터를 수신할 수 있다.
도 25는 도 23에 도시된 레이드 컨트롤러(1200B) 구성의 일 예를 보여준다.
도 25에 도시된 바와 같이, 레이드 컨트롤러(1200B)는 프로세서(1210B), ECC 디코더(1202), RAM(Random Access Memory; 1220B), I/O 인터페이스(1230) 및 버스(1240)를 구비한다.
RAM(1220B)에는 레이드 스토리지 시스템(1000)에서 수행되는 동작들을 제어하는데 필요한 프로그램 코드 및 데이터들이 저장된다. 예로서, 레이드 스토리지 시스템(1000)이 초기화될 때 프로세서(1210B)는 레이드 스토리지 시스템(1000)에서 수행되는 동작들을 제어하는데 필요한 프로그램 코드 및 데이터들을 스토리지 디바이스들(1100-1 ~1100-N)로부터 읽어내어 RAM(1220B)에 로딩시킬 수 있다. 그리고, RAM(1220B)에는 소프트웨어로 구현되는 리커버리 모듈(1201B)의 프로그램 코드가 저장될 수 있다.
프로세서(1210B)는 RAM(1220B)에 저장된 프로그램 코드 및 데이터들을 이용하여 레이드 스토리지 시스템(1000)의 동작을 전반적으로 제어한다. 예로서, 프로세서(1210B)는 RAM(1220B)에 저장된 리커버리 모듈(1201B)의 프로그램 코드를 이용하여 위에서 설명한 바와 같은 ECC 디코딩 처리에 실패한 데이터에 대한 복원 처리를 수행할 수 있다.
ECC 디코더(1202), I/O 인터페이스(1230) 및 버스(1240)는 도 22에서 이미 설명하였으므로, 중복적인 설명은 피하기로 한다.
도 26은 도 23의 레이드 스토리지 시스템(1000)에 포함된 하나의 스토리지 디바이스(1100-1)에 대한 구성을 예시적으로 보여준다.
도 26에 도시된 바와 같이, 스토리지 디바이스(1100-1)는 메모리 장치(1110) 및 SSD 컨트롤러(1120)를 포함한다.
메모리 장치(1110)는 복수의 비휘발성 메모리(NVM) 디바이스들로 구성된다. 예로서, 플래시 메모리 디바이스, PRAM(Phase change RAM), FRAM(Ferroelectric RAM), MRAM(Magnetic RAM) 디바이스 등으로 구성될 수 있다
SSD 컨트롤러(1120)는 메모리 장치(1110)에 대한 제어 동작을 수행할 수 있다. SSD 컨트롤러(1120)는 메모리 장치(1110)를 제어하기 위한 어드레스(ADDR), 커맨드(CMD) 및 제어 신호(CTRL)를 생성할 수 있다. 그리고, SSD 컨트롤러(1120)는 메모리 장치(1110)에 어드레스(ADDR), 커맨드(CMD) 및 제어 신호(CTRL)를 제공함으로써, 메모리 장치(1110)에 대한 프로그램(program)(또는 쓰기), 독출(read) 및 소거(erase) 동작을 제어할 수 있다.
SSD 컨트롤러(1120)는 레이드 컨트롤러(1200)의 요청에 따라서 메모리 장치(1110)로부터 읽어낸 데이터에 대한 ECC 디코딩 처리를 수행하고, ECC 디코딩 처리에 성공한 경우에는 ECC 디코딩 결과를 레이드 컨트롤러(1200)로 전송한다. 그리고, ECC 디코딩 처리에 실패한 경우에는 ECC 디코딩 처리에 실패한 데이터의 소프트 입력을 레이드 컨트롤러(1200)로 전송한다.
그러면, 도 1에 도시된 메모리 시스템(100) 또는 도 23에 도시된 레이드 스토리지 시스템(1000)을 포함하는 다양한 형태의 시스템에서의 데이터를 복원하는 방법에 대하여 도 27 내지 도 35의 흐름도를 참조하여 설명하기로 한다.
도 27은 본 발명의 기술적 사상에 따른 데이터 복원 방법의 흐름도이다.
시스템은 타깃 코드워드의 입력에 대한 ECC 디코딩 처리를 수행한다(S110). 예로서, 타깃 코드워드는 호스트에서 요청된 청크 데이터(chunk data)가 될 수 있다.
다음으로, 시스템은 ECC 디코딩 처리에 따른 타깃 코드워드 복원에 성공하였는지를 판단한다(S120). 즉, 타깃 코드워드의 입력에 대한 ECC 디코딩 처리에 성공하였는지를 판단한다.
시스템은 타깃 코드워드의 입력에 대한 ECC 디코딩 처리에 실패한 경우에 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들에 대한 독출 동작을 수행한다(S130). 예로서, 타깃 코드워드와 동일한 스트라이프를 형성하는 메모리 장치의 저장 영역으로부터 참조 코드워드들을 읽어낼 수 있다.
시스템은 타깃 코드워드 및 참조 코드워드들을 이용한 연산 처리에 기초하여 수정된 타깃 코드워드의 디코더 입력을 생성하는 동작을 수행한다(S140). 예로서, 도 1의 리커버리 모듈(21) 또는 도 21의 리커버리 모듈(1201)에서 타깃 코드워드를 수정하는 동작을 수행할 수 있다.
다음으로, 시스템은 수정된 타깃 코드워드의 디코더 입력에 대한 ECC 디코딩 처리를 다시 수행한다(S150).
도 28은 도 27에 도시된 타깃 코드워드를 수정하는 단계(S140)에 대한 세부적인 흐름도를 보여준다.
시스템은 오퍼레이션 S130을 마친 후에, 독출된 참조 코드워드들 각각에 대한 ECC 디코딩 처리를 수행한다(S141).
다음으로, 시스템은 ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과, ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력 및 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력을 이용하여 코드 연관성에 따른 연산 처리에 기초하여 타깃 코드워드에 대한 디코더의 입력을 수정하는 동작을 수행한다(S142).
예로서, 시스템은 참조 코드워드들 중 적어도 하나의 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에 오퍼레이션 S142를 수행하고, 참조 코드워드들 모두에 대한 ECC 디코딩 처리에 성공한 경우에는 참조 코드워드들의 디코딩 결과를 이용하여 타깃 코드워드를 복원하는 오퍼레이션을 수행할 수 있다.
도 29는 도 28에 도시된 수정된 타깃 코드워드의 디코더 입력을 생성하는 단계(S142)에 대한 세부적인 흐름도를 보여준다.
시스템은 오퍼레이션 S141을 마친 후에, ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과, ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력 및 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력으로 구성되는 코드 매트릭스로부터 코드 제약 조건을 만족시키지 못하는 후보 코드워드를 검출하는 동작을 수행한다(S142-1). 예로서, 코드 매트릭스는 도 2에 도시된 바와 같은 다차원 코드에 기초하여 구성될 수 있다. 그리고, 도 15 내지 도 22에서 설명한 바와 같은 방식으로 후보 코드워드를 검출할 수 있다.
시스템은 검출된 후보 코드워드에 포함된 코드 비트들에 대한 신뢰도에 기초하여 타깃 코드워드의 소프트 입력을 수정하는 동작을 수행한다(S142-2).
도 30은 도 29에 도시된 타깃 코드워드의 소프트 입력을 수정하는 단계(142-2)에 대한 세부적인 흐름도를 보여준다.
시스템은 오퍼레이션 S142-1을 마친 후에, 검출된 후보 코드워드 단위로 코드 비트들의 신뢰도를 비교하는 동작을 수행한다(S142-2A).
시스템은 비교 결과 후보 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출하는 동작을 수행한다(S142-2B). 예로서, 후보 코드워드의 소프트 입력에 포함된 신뢰도 비트를 이용하여 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출할 수 있다. 예로서, 신뢰로가 가장 낮은 코드 비트가 복수 개 존재하는 후보 코드워드에서는 에러 후보 코드 비트가 검출되지 않은 것으로 판정할 수 있다.
시스템은 타깃 코드워드의 소프트 입력에 포함된 에러 후보 코드 비트를 수정하는 동작을 수행한다(S142-2C). 예로서, 타깃 코드워드의 소프트 입력에 포함된 에러 후보 코드 비트의 사인(sign) 비트를 반전시키는 방식으로 수정된 타깃 코드워드를 생성시킬 수 있다.
도 31은 도 27의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
시스템은 오퍼레이션 S150을 마친 후에, 타깃 코드워드 복원에 성공하였는지를 판단한다(S160). 즉, 수정된 타깃 코드워드의 입력에 대한 ECC 디코딩 처리에 성공하였는지를 판단한다.
시스템은 수정된 타깃 코드워드의 입력에 대한 ECC 디코딩 처리에 실패한 경우에 추가적인 소프트 디시젼 리드 동작을 수행한다(S170). 예로서, 타깃 코드워드의 소프트 입력이 도 10과 같은 소프트 디시젼 리드 동작에 기초하여 획득되었다면, 도 11과 같은 추가적인 소프트 디시젼 리드 동작에 수행하여 신뢰도 비트에 의한 신뢰도 구분을 세분화시킬 수 있다.
시스템은 추가적인 소프트 디시젼 리드 동작을 수행하는 단계(S170)를 마치고 나서 오퍼레이션 S110 또는 오퍼레이션 S140을 수행한다.
도 32는 도 31의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
시스템은 오퍼레이션 160의 판단 결과 수정된 타깃 코드워드의 입력에 대한 ECC 디코딩 처리에 성공한 경우에, 복원에 성공한 수정된 타깃 코드워드의 입력에 대한 ECC 디코딩 결과를 새로운 물리적 주소에 라이트하는 동작을 수행한다(S180).
그리고 나서, 시스템은 라이트된 새로운 물리적 주소에 기초하여 스트라이프 매핑 정보를 갱신 처리하는 동작을 수행한다(S190).
도 33은 도 28의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
시스템은 오퍼레이션 S141을 마치고 나서, 코드 연관성에 따른 연산 처리에 기초하여 ECC 디코딩 처리에 실패한 참조 코드워드에 대한 수정된 참조 코드워드를 생성하는 동작을 수행한다(S143). 수정된 참조 코드워드를 생성하는 동작은 수정된 타깃 코드워드를 생성하는 동작과 같은 방식으로 수행할 수 있다.
시스템은 수정된 참조 코드워드의 입력에 대한 ECC 디코딩 처리를 다시 수행한다(S144). 이에 따라서, ECC 디코딩 처리에 실패한 참조 코드워드를 수정된 참조 코드워드의 입력을 이용하여 복원 처리할 수 있다.
도 34는 도 29의 흐름도에 추가될 수 있는 단계들의 다른 예를 보여주는 흐름도이다.
시스템은 오퍼레이션 S150을 마친 후에, ECC 디코딩 처리에 성공한 수정된 타깃 코드워드의 디코딩 결과, ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력 및 ECC 디코딩 처리에 성공한 타깃 코드워드의 디코딩 결과를 이용하여 코드 연관성에 따른 연산 처리에 기초하여 ECC 디코딩 처리에 실패한 참조 코드워드에 대한 수정된 디코더 입력을 생성하는 동작을 수행한다(S160). 예로서, 도 22b에서 설명한 바와 같은 방식으로 ECC 디코딩 처리에 실패한 참조 코드워드에 대한 수정된 디코더 입력을 생성할 수 있다.
다음으로, 시스템은 수정된 참조 코드워드의 디코더 입력에 대한 ECC 디코딩 처리를 다시 수행하는 동작을 수행한다(S170). 이에 따라서, ECC 디코딩 처리에 실패한 참조 코드워드에 대한 복원 처리를 수정된 참조 코드워드의 디코더 입력을 이용하여 다시 수행할 수 있게 된다.
도 35는 도 33 또는 도 34의 흐름도에 추가될 수 있는 단계들의 일 예를 보여주는 흐름도이다.
시스템은 오퍼레이션 S144 또는 S170을 마치고 나서, 복원에 성공한 수정된 참조 코드워드의 입력에 대한 ECC 디코딩 결과를 새로운 물리적 주소에 라이트하는 동작을 수행한다(S145).
그리고 나서, 시스템은 라이트된 새로운 물리적 주소에 기초하여 스트라이프 매핑 정보를 갱신 처리하는 동작을 수행한다(S146).
이상에서와 같이 도면과 명세서에서 최적 실시예가 개시되었다. 여기서 특정한 용어들이었으나, 이는 단지 본 발명을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 발명의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.
100, 100A, 100B, 100C, 100D, 100E, 100F: 메모리 시스템
10, 1110: 메모리 장치
20, 20A, 20B, 20C, 20D, 20E, 20F: 메모리 컨트롤러
21, 21A, 21B, 1201A, 1201B: 리커버리 모듈
22, 1202: ECC 디코더
210A, 210B, 1210A, 1210B: 프로세서
220A, 220B, 1220A, 1220B: RAM
230: 호스트 인터페이스 240: 메모리 인터페이스
250, 1240: 버스 1230: I/O 인터페이스
1000: 레이드 스토리지 시스템
1100: 복수의 스토리지 디바이스들
1200, 1200A, 1200B: 레이드 컨트롤러
1120: SSD 컨트롤러
11: 메모리 셀 어레이 12: 제어 로직
13: 전압 생성부 14: 로우 디코더
15: 페이지 버퍼
10, 1110: 메모리 장치
20, 20A, 20B, 20C, 20D, 20E, 20F: 메모리 컨트롤러
21, 21A, 21B, 1201A, 1201B: 리커버리 모듈
22, 1202: ECC 디코더
210A, 210B, 1210A, 1210B: 프로세서
220A, 220B, 1220A, 1220B: RAM
230: 호스트 인터페이스 240: 메모리 인터페이스
250, 1240: 버스 1230: I/O 인터페이스
1000: 레이드 스토리지 시스템
1100: 복수의 스토리지 디바이스들
1200, 1200A, 1200B: 레이드 컨트롤러
1120: SSD 컨트롤러
11: 메모리 셀 어레이 12: 제어 로직
13: 전압 생성부 14: 로우 디코더
15: 페이지 버퍼
Claims (20)
- 타깃 코드워드의 디코더 입력에 대한 ECC 디코딩 처리에 실패한 경우에 상기 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 메모리 장치로부터 읽어내는 단계;
상기 타깃 코드워드 및 상기 참조 코드워드들을 이용한 연산 처리에 기초하여 수정된 타깃 코드워드의 디코더 입력을 생성하는 단계; 및
상기 수정된 타깃 코드워드의 디코더 입력에 대한 ECC 디코딩 처리를 다시 수행하는 단계를 포함하고,
상기 참조 코드워드들은 상기 타깃 코드워드와 동일한 스트라이프를 형성하는 저장 영역에서 읽어낸 코드워드들을 포함하고,
상기 참조 코드워드들은 짝수 패리티가 성립되지 않는 적어도 하나의 수직 코드워드에 대응됨을 특징으로 하는 데이터 복구 방법. - 삭제
- 제1항에 있어서, 상기 수정된 타깃 코드워드의 디코더 입력을 생성하는 단계는
상기 참조 코드워드들을 각각 ECC 디코딩 처리하는 단계; 및
상기 ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과, 상기 ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력 및 상기 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력을 이용하여 코드 연관성에 따른 연산 처리에 기초하여 상기 타깃 코드워드에 대한 디코더 입력을 수정하는 단계를 더 포함함을 특징으로 하는 데이터 복구 방법. - 제3항에 있어서, 상기 참조 코드워들 중 적어도 하나의 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에 상기 타깃 코드워드를 수정하는 단계를 수행하고, 상기 참조 코드워드들 모두에 대한 ECC 디코딩 처리에 성공한 경우에는 참조 코드워드들의 디코딩 결과를 이용하여 상기 타깃 코드워드를 복원하는 단계를 더 포함함을 특징으로 하는 데이터 복구 방법.
- 제3항에 있어서, 상기 타깃 코드워드에 대한 디코더 입력을 수정하는 단계는
상기 ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과, 상기 ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력 및 상기 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력으로 구성되는 코드 매트릭스로부터 코드 제약 조건을 만족시키지 못하는 후보 코드워드를 검출하는 단계; 및
상기 후보 코드워드에 포함된 코드 비트들에 대한 신뢰도에 기초하여 상기 타깃 코드워드의 소프트 입력을 수정하는 단계를 더 포함함을 특징으로 하는 데이터 복구 방법. - 제5항에 있어서, 상기 후보 코드워드를 검출하는 단계는 상기 ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과, 상기 ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력 및 상기 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력을 각각 상기 코드 매트릭스의 제1방향의 코드워드들로 배열하고, 상기 코드 매트릭스에서의 제2방향에 대한 패리티 체크에 따른 오류가 발생되는 제2방향의 코드워드를 상기 후보 코드워드로 결정하는 것을 특징으로 하는 데이터 복구 방법.
- 제5항에 있어서, 상기 타깃 코드워드의 소프트 입력을 수정하는 단계는
상기 후보 코드워드 단위로 코드 비트들의 신뢰도를 비교하는 단계;
상기 비교 결과 후보 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출하는 단계; 및
상기 타깃 코드워드의 소프트 입력에 포함된 에러 후보 코드 비트를 수정하는 단계를 더 포함함을 특징으로 하는 데이터 복구 방법. - 제3항에 있어서, 상기 ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과, 상기 ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력 및 상기 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력을 이용하여 코드 연관성에 따른 연산 처리에 기초하여 상기 ECC 디코딩 처리에 실패한 참조 코드워드에 대한 수정된 참조 코드워드의 디코더 입력을 생성하는 단계; 및
상기 수정된 참조 코드워드의 디코더 입력에 대한 ECC 디코딩 처리를 다시 수행하는 단계를 더 포함함을 특징으로 하는 데이터 복구 방법. - 제1항에 있어서, 상기 수정된 타깃 코드워드의 입력에 대하여 다시 수행된 ECC 디코딩 처리에서 데이터 복구에 성공한 경우에 상기 ECC 디코딩 처리에 성공한 수정된 타깃 코드워드의 디코딩 결과, 상기 참조 코드워드들에 대한 ECC 디코딩 처리에 따라서 ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과 및 ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력을 이용한 코드 연관성에 따른 연산 처리에 기초하여 상기 ECC 디코딩 처리에 실패한 참조 코드워드에 대한 수정된 참조 코드워드의 디코더 입력을 생성하는 단계; 및
상기 수정된 참조 코드워드의 디코더 입력에 대한 ECC 디코딩 처리를 다시 수행하는 단계를 더 포함함을 특징으로 하는 데이터 복구 방법. - 제1항에 있어서, 상기 수정된 타깃 코드워드의 입력은 1차 소프트 입력으로 구성되고 상기 수정된 타깃 코드워드의 1차 소프트 입력에 대하여 다시 수행된 ECC 디코딩 처리에서 데이터 복구에 실패한 경우에, 상기 1차 소프트 입력보다 세분화된 신뢰도 레벨을 표시하는 신뢰도 비트를 생성시키는 소프트 디시젼 리드 동작에 기초하여 상기 타깃 코드워드의 2차 소프트 입력을 획득하는 단계; 및
상기 타깃 코드워드의 2차 소프트 입력에 기초하여 상기 타깃 코드워드에 대한 복구 처리를 위한 ECC 디코딩을 수행하는 단계를 더 포함함을 특징으로 하는 데이터 복구 방법. - 데이터를 저장하는 메모리 장치; 및
상기 메모리 장치로부터 읽어낸 데이터에 기초하여 타깃 코드워드를 복구하는 메모리 컨트롤러를 포함하고,
상기 메모리 컨트롤러는 상기 타깃 코드워드의 입력에 대한 ECC 디코딩 처리에 실패한 경우에 상기 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 상기 메모리 장치로부터 읽어내고, 상기 타깃 코드워드 및 상기 참조 코드워드들을 이용한 연산 처리에 기초하여 수정된 타깃 코드워드의 디코더 입력을 생성하고, 상기 수정된 타깃 코드워드의 디코더 입력에 대한 ECC 디코딩 처리를 다시 실행하고,
상기 참조 코드워드들은 상기 타깃 코드워드와 동일한 스트라이프를 형성하는 저장 영역에서 읽어낸 코드워드들을 포함하고,
상기 참조 코드워드들은 짝수 패리티가 성립되지 않는 적어도 하나의 수직 코드워드에 대응되는 것을 특징으로 하는 메모리 시스템. - 제11항에 있어서, 상기 메모리 컨트롤러는
상기 메모리 장치에서 읽어낸 코드워드 및 ECC 디코딩 결과를 저장하는 랜덤 액세스 메모리;
입력되는 코드워드를 ECC 디코딩 처리하는 ECC 디코더;
상기 ECC 디코더에서의 타깃 코드워드에 대한 ECC 디코딩 처리에 실패한 경우에 상기 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들을 상기 메모리 장치로부터 읽어내는 동작을 수행하는 프로세서; 및
상기 타깃 코드워드 및 상기 참조 코드워드들을 이용한 코드 연관성에 따른 연산 처리에 기초하여 수정된 타깃 코드워드의 디코더 입력을 생성하여 상기 ECC 디코더로 출력하는 리커버리 모듈을 포함함을 특징으로 하는 메모리 시스템. - 제12항에 있어서, 상기 ECC 디코더는 상기 참조 코드워드들에 대한 ECC 디코딩 처리를 수행하고, 상기 ECC 디코더에서의 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력, ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과 및 ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력은 상기 랜덤 액세스 메모리에 저장되고,
상기 리커버리 모듈은 상기 ECC 디코더에서의 상기 참조 코드워들 중 적어도 하나의 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에 상기 랜덤 액세스 메모리로부터 읽어낸 상기 참조 코드워드의 디코딩 결과, 상기 참조 코드워드의 소프트 입력 및 상기 타깃 코드워드의 소프트 입력으로 구성되는 코드 매트릭스로부터 코드 제약 조건을 만족시키지 못하는 후보 코드워드를 검출하고, 상기 후보 코드워드에 포함된 코드 비트들에 대한 신뢰도에 기초하여 상기 타깃 코드워드의 디코더 입력을 수정하는 연산 처리를 수행하는 것을 특징으로 하는 메모리 시스템. - 제13항에 있어서, 상기 리커버리 모듈은 상기 후보 코드워드 단위로 코드 비트들의 신뢰도를 비교하고, 상기 비교 결과 후보 코드워드 단위로 신뢰도가 가장 낮은 에러 후보 코드 비트를 검출하고, 상기 타깃 코드워드에 포함된 상기 에러 후보 코드 비트를 수정하는 것을 특징으로 하는 메모리 시스템.
- 제12항에 있어서, 상기 ECC 디코더에서의 상기 수정된 타깃 코드워드에 대한 ECC 디코딩 처리에 실패하는 경우에 상기 프로세서는 상기 수정된 타깃 코드워드를 구성하는 1차 소프트 입력보다 세분화된 신뢰도 레벨을 표시하는 신뢰도 비트를 생성시키는 소프트 디시젼 리드 동작에 기초하여 상기 타깃 코드워드의 2차 소프트 입력을 획득하고, 상기 타깃 코드워드의 2차 소프트 입력을 상기 ECC 디코더에 제공하는 것을 특징으로 하는 메모리 시스템.
- 삭제
- 제11항에 있어서, 상기 스트라이프는 상기 메모리 장치에 포함되는 메모리 칩(chip)들, 복수개의 다이(Die)들, 플레인들, 블록들, 워드라인들, 페이지들 및 섹터들 중의 어느 하나에 기초하여 구성되는 것을 특징으로 하는 메모리 시스템.
- 제17항에 있어서, 상기 메모리 장치는 2차원 메모리 어레이 또는 3차원 메모리 어레이를 포함하고, 상기 3차원 메모리 어레이의 동일한 평면에 배치되는 저장 영역들 또는 서로 다른 평면들에 배치되는 저장 영역들로 상기 스트라이프를 구성하는 것을 특징으로 하는 메모리 시스템.
- 복수의 스토리지 디바이스들; 및
상기 복수의 스토리지 디바이스들 중에서 동일한 스트라이프를 형성하는 2개 이상의 스토리지 디바이스들에서 읽어낸 코드워드들에 대한 ECC 디코딩 처리에 실패하는 경우에 ECC 디코딩 처리에 실패한 스토리지 디바이스들로부터 수신되는 소프트 입력 및 ECC 디코딩 처리에 성공한 스토리지 디바이스들로부터 수신되는 디코딩 결과를 이용하여 코드 연관성에 따른 연산 처리에 기초하여 상기 ECC 디코딩 처리에 실패한 코드워드의 소프트 입력을 수정하고, 상기 수정된 코드워드의 소프트 입력 ECC 디코딩 처리를 수행하는 레이드 컨트롤러를 포함하고,
상기 레이드 컨트롤러는
상기 스토리지 디바이스들 중의 어느 하나에서의 타깃 코드워드에 대한 ECC 디코딩 처리에 실패한 경우에 상기 타깃 코드워드와의 코드 연관성이 있는 참조 코드워드들에 대한 읽기 요청을 상기 복수의 스토리지 디바이스들로 전달하고, 상기 복수의 스토리지 디바이스들로부터 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력, ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과 및 상기 ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력을 수신하는 동작을 수행하는 프로세서를 포함하고,
상기 참조 코드워드들은 상기 타깃 코드워드와 동일한 스트라이프를 형성하는 저장 영역에서 읽어낸 코드워드들을 포함하고,
상기 참조 코드워드들은 짝수 패리티가 성립되지 않는 적어도 하나의 수직 코드워드에 대응됨을 특징으로 하는 레이드 스토리지 시스템. - 제19항에 있어서, 상기 레이드 컨트롤러는
상기 스토리지 디바이스들로부터 수신되는 소프트 입력 및 ECC 디코딩 결과를 저장하는 랜덤 액세스 메모리;
입력되는 코드워드를 ECC 디코딩 처리하는 ECC 디코더; 및
상기 수신된 ECC 디코딩 처리에 성공한 참조 코드워드의 디코딩 결과, 상기 ECC 디코딩 처리에 실패한 참조 코드워드의 소프트 입력 및 상기 ECC 디코딩 처리에 실패한 타깃 코드워드의 소프트 입력을 이용하여 코드 연관성에 따른 연산 처리에 기초하여 수정된 타깃 코드워드의 디코더 입력을 생성하여 상기 ECC 디코더로 출력하는 리커버리 모듈을 더 포함함을 특징으로 하는 레이드 스토리지 시스템.
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160082977A KR102673873B1 (ko) | 2016-06-30 | 2016-06-30 | 데이터 복구 방법 및 이를 적용하는 메모리 시스템 및 레이드 스토리지 시스템 |
US15/613,718 US10846174B2 (en) | 2016-06-30 | 2017-06-05 | Method of recovering data and memory system and raid storage system using the same |
CN201710544300.XA CN107643958B (zh) | 2016-06-30 | 2017-06-30 | 恢复数据的方法和使用该方法的存储器系统和raid存储系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160082977A KR102673873B1 (ko) | 2016-06-30 | 2016-06-30 | 데이터 복구 방법 및 이를 적용하는 메모리 시스템 및 레이드 스토리지 시스템 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180003320A KR20180003320A (ko) | 2018-01-09 |
KR102673873B1 true KR102673873B1 (ko) | 2024-06-10 |
Family
ID=60807461
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020160082977A KR102673873B1 (ko) | 2016-06-30 | 2016-06-30 | 데이터 복구 방법 및 이를 적용하는 메모리 시스템 및 레이드 스토리지 시스템 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10846174B2 (ko) |
KR (1) | KR102673873B1 (ko) |
CN (1) | CN107643958B (ko) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20190019728A (ko) * | 2017-08-18 | 2019-02-27 | 에스케이하이닉스 주식회사 | 에러 정정 회로, 그것의 동작 방법 및 그것을 포함하는 데이터 저장 장치 |
US10636495B2 (en) | 2018-06-12 | 2020-04-28 | Western Digital Technologies, Inc. | Adjustable read retry order based on decoding success trend |
US10747614B2 (en) * | 2018-07-23 | 2020-08-18 | Micron Technology, Inc. | Hybrid iterative error correcting and redundancy decoding operations for memory sub-systems |
US10824502B2 (en) * | 2018-08-08 | 2020-11-03 | Micron Technology, Inc. | Enhanced codeword for media persistence and diagnostics |
KR102654297B1 (ko) * | 2018-08-27 | 2024-04-04 | 에스케이하이닉스 주식회사 | 컨트롤러 및 컨트롤러의 동작방법 |
KR20200058027A (ko) | 2018-11-19 | 2020-05-27 | 삼성전자주식회사 | Ecc 회로를 포함하는 메모리 컨트롤러, 이를 포함하는 메모리 시스템 및 메모리 시스템의 에러 정정 방법 |
KR102696810B1 (ko) * | 2019-04-03 | 2024-08-21 | 에스케이하이닉스 주식회사 | 저장 장치 및 그 동작 방법 |
US11057060B1 (en) * | 2020-03-23 | 2021-07-06 | Sage Microelectronics Corporation | Method and apparatus for matrix flipping error correction |
US11474920B2 (en) | 2020-03-31 | 2022-10-18 | International Business Machines Corporation | Dynamic mapping of logical to physical memory for increased performance |
US11170869B1 (en) | 2020-06-04 | 2021-11-09 | Western Digital Technologies, Inc. | Dual data protection in storage devices |
JP2022044286A (ja) * | 2020-09-07 | 2022-03-17 | キオクシア株式会社 | メモリシステム |
KR20220140367A (ko) | 2021-04-09 | 2022-10-18 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 이의 동작 방법 |
US11762735B2 (en) | 2021-10-01 | 2023-09-19 | Western Digital Technologies, Inc. | Interleaved ECC coding for key-value data storage devices |
US11934264B2 (en) | 2021-11-22 | 2024-03-19 | Western Digital Technologies, Inc. | ECC parity biasing for Key-Value data storage devices |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8468430B2 (en) * | 2010-09-03 | 2013-06-18 | Snu R&Db Foundation | Product code decoding method and device |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5357471A (en) * | 1992-03-20 | 1994-10-18 | National Semiconductor Corporation | Fault locator architecture and method for memories |
JP3154607B2 (ja) | 1993-12-28 | 2001-04-09 | 三菱電機株式会社 | 誤り訂正復号装置及び誤り訂正復号方法 |
US6526531B1 (en) | 2000-03-22 | 2003-02-25 | Agere Systems Inc. | Threshold detection for early termination of iterative decoding |
US6865708B2 (en) | 2000-08-23 | 2005-03-08 | Wang Xiao-An | Hybrid early-termination methods and output selection procedure for iterative turbo decoders |
US7093179B2 (en) * | 2001-03-22 | 2006-08-15 | University Of Florida | Method and coding means for error-correction utilizing concatenated parity and turbo codes |
US8046660B2 (en) * | 2006-08-07 | 2011-10-25 | Marvell World Trade Ltd. | System and method for correcting errors in non-volatile memory using product codes |
US8112699B2 (en) * | 2008-02-14 | 2012-02-07 | Atmel Rousset S.A.S. | Error detecting/correcting scheme for memories |
KR101529880B1 (ko) * | 2008-10-31 | 2015-06-19 | 삼성전자주식회사 | 에러 추정 방법 및 정정 방법 |
US8458574B2 (en) * | 2009-04-06 | 2013-06-04 | Densbits Technologies Ltd. | Compact chien-search based decoding apparatus and method |
US8327249B2 (en) * | 2009-08-20 | 2012-12-04 | Broadcom Corporation | Soft error rate protection for memories |
KR101633048B1 (ko) * | 2010-02-25 | 2016-06-24 | 삼성전자주식회사 | 메모리 시스템 및 그것의 데이터 처리 방법 |
KR101774496B1 (ko) * | 2010-12-08 | 2017-09-05 | 삼성전자주식회사 | 비휘발성 메모리 장치, 이를 포함하는 장치들, 및 이의 동작 방법 |
US8869000B2 (en) | 2011-01-31 | 2014-10-21 | Marvell World Trade Ltd. | Methods and systems for efficient decoding of concatenated error correction codes |
US8788922B2 (en) * | 2011-02-28 | 2014-07-22 | Apple Inc | Error correction codes for incremental redundancy |
US8671326B1 (en) * | 2011-05-16 | 2014-03-11 | Sk Hynix Memory Solutions Inc. | Concatenated codes for recovering stored data |
CN104247273B (zh) * | 2012-03-28 | 2017-05-17 | 英特尔公司 | 用于重构码字的设备及计算机实现的方法 |
US9053047B2 (en) | 2012-08-27 | 2015-06-09 | Apple Inc. | Parameter estimation using partial ECC decoding |
US9191256B2 (en) * | 2012-12-03 | 2015-11-17 | Digital PowerRadio, LLC | Systems and methods for advanced iterative decoding and channel estimation of concatenated coding systems |
KR102123946B1 (ko) * | 2012-12-28 | 2020-06-17 | 삼성전자주식회사 | 멀티 레벨 셀 메모리 장치 및 그것의 동작방법 |
US9191246B2 (en) * | 2013-03-15 | 2015-11-17 | Jonathan Kanter | Combined turbo decoding and turbo equalization techniques |
KR20160046467A (ko) * | 2014-10-21 | 2016-04-29 | 에스케이하이닉스 주식회사 | 컨트롤러, 반도체 메모리 시스템, 데이터 저장 시스템 및 그것의 동작 방법 |
US9870284B2 (en) * | 2015-05-27 | 2018-01-16 | International Business Machines Corporation | First responder parities for storage array |
-
2016
- 2016-06-30 KR KR1020160082977A patent/KR102673873B1/ko active IP Right Grant
-
2017
- 2017-06-05 US US15/613,718 patent/US10846174B2/en active Active
- 2017-06-30 CN CN201710544300.XA patent/CN107643958B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8468430B2 (en) * | 2010-09-03 | 2013-06-18 | Snu R&Db Foundation | Product code decoding method and device |
Also Published As
Publication number | Publication date |
---|---|
US10846174B2 (en) | 2020-11-24 |
CN107643958B (zh) | 2022-11-08 |
KR20180003320A (ko) | 2018-01-09 |
CN107643958A (zh) | 2018-01-30 |
US20180004601A1 (en) | 2018-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102673873B1 (ko) | 데이터 복구 방법 및 이를 적용하는 메모리 시스템 및 레이드 스토리지 시스템 | |
CN110097913B (zh) | 存储器控制器及其操作方法 | |
KR102653401B1 (ko) | 메모리 시스템 및 그의 동작방법 | |
KR102609130B1 (ko) | 읽기 전압 서치 유닛을 포함하는 데이터 저장 장치 | |
CN108108121B (zh) | 存储器控制器和控制其操作的方法 | |
KR102293136B1 (ko) | 비휘발성 메모리 장치, 그것을 포함하는 저장 장치 및 그것의 동작 방법 | |
US9213598B2 (en) | Nonvolatile memory device and method of operating the same | |
KR102110767B1 (ko) | 메모리 컨트롤러 구동방법 및 메모리 컨트롤러 | |
KR102707003B1 (ko) | 메모리 시스템 및 메모리 시스템의 동작 방법 | |
KR101925383B1 (ko) | 불휘발성 메모리 장치 및 그것의 데이터 관리 방법 | |
KR102529666B1 (ko) | LDPC 코드(Low Density Parity Check Code) 부호를 위한 복호 방법 및 장치 | |
US11726867B2 (en) | Multi-page parity protection with power loss handling | |
KR20180131023A (ko) | 반도체 메모리 시스템 및 그것의 동작 방법 | |
KR102495539B1 (ko) | 메모리 시스템 및 메모리 시스템의 동작방법 | |
CN113053441A (zh) | 存储装置和存储装置的操作方法 | |
KR102329800B1 (ko) | 메모리 장치 및 메모리 장치의 에지 워드라인 관리 방법 | |
KR20190128794A (ko) | 메모리 시스템 및 메모리 시스템의 동작 방법 | |
KR102546304B1 (ko) | 데이터 중복 제거를 수행할 수 있는 플래시 메모리 장치의 동작 방법과 상기 플래시 메모리 장치를 포함하는 데이터 저장 시스템 | |
KR20200122407A (ko) | Nand 데이터 배치 스키마 | |
KR20200079811A (ko) | 오류 정정 장치, 이의 동작 방법 및 이를 이용하는 메모리 시스템 | |
EP4147133A1 (en) | Method for redundant array of independent disks striping against programming failures and apparatus thereof | |
KR102106959B1 (ko) | 멀티 레벨 셀 비휘발성 메모리 시스템 | |
KR20130130484A (ko) | 읽기 카운터 로직을 포함하는 플래시 메모리 시스템 | |
KR20200005229A (ko) | 메모리 시스템 및 메모리 시스템의 동작방법 | |
KR102248207B1 (ko) | 저장 장치 및 그것의 동작 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |