KR20220080589A - Ecc 디코딩을 수행하는 ecc 엔진, 이의 동작 방법 및 ecc 엔진을 포함하는 스토리지 장치 - Google Patents
Ecc 디코딩을 수행하는 ecc 엔진, 이의 동작 방법 및 ecc 엔진을 포함하는 스토리지 장치 Download PDFInfo
- Publication number
- KR20220080589A KR20220080589A KR1020200169841A KR20200169841A KR20220080589A KR 20220080589 A KR20220080589 A KR 20220080589A KR 1020200169841 A KR1020200169841 A KR 1020200169841A KR 20200169841 A KR20200169841 A KR 20200169841A KR 20220080589 A KR20220080589 A KR 20220080589A
- Authority
- KR
- South Korea
- Prior art keywords
- data
- decoding
- ecc
- intermediate data
- engine
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 32
- 238000011017 operating method Methods 0.000 claims abstract description 5
- 230000015654 memory Effects 0.000 claims description 60
- 238000012937 correction Methods 0.000 description 19
- 238000010586 diagram Methods 0.000 description 16
- 208000011580 syndromic disease Diseases 0.000 description 13
- 238000013403 standard screening design Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 238000013500 data storage Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 1
- CXOXHMZGEKVPMT-UHFFFAOYSA-N clobazam Chemical compound O=C1CC(=O)N(C)C2=CC=C(Cl)C=C2N1C1=CC=CC=C1 CXOXHMZGEKVPMT-UHFFFAOYSA-N 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 229940044442 onfi Drugs 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000003936 working memory Effects 0.000 description 1
Images
Classifications
-
- 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/2948—Iterative decoding
-
- 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/65—Purpose and implementation aspects
- H03M13/6508—Flexibility, adaptability, parametrability and configurability of the implementation
- H03M13/6511—Support of multiple decoding rules, e.g. combined MAP and Viterbi decoding
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/38—Response verification devices
- G11C29/42—Response verification devices using error correcting codes [ECC] or parity check
-
- 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/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- 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/1044—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 with specific ECC/EDC distribution
-
- 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/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1469—Backup restoration techniques
-
- 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/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- 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/16—Error detection or correction of the data by redundancy in hardware
- G06F11/1666—Error detection or correction of the data by redundancy in hardware where the redundant component is memory or memory area
-
- 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/3707—Adaptive decoding and hybrid decoding, e.g. decoding methods or techniques providing more than one decoding algorithm for one code
-
- 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/3746—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with iterative decoding
-
- 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/09—Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
- H03M13/095—Error detection codes other than CRC and single parity bit codes
- H03M13/096—Checksums
-
- 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
- H03M13/1105—Decoding
- H03M13/1108—Hard decision decoding, e.g. bit flipping, modified or weighted bit flipping
-
- 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/1575—Direct decoding, e.g. by a direct determination of the error locator polynomial from syndromes and subsequent analysis or by matrix operations involving syndromes, e.g. for codes with a small minimum Hamming distance
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Probability & Statistics with Applications (AREA)
- Computer Security & Cryptography (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Detection And Correction Of Errors (AREA)
- Mathematical Physics (AREA)
- Error Detection And Correction (AREA)
- Algebra (AREA)
- Pure & Applied Mathematics (AREA)
Abstract
ECC 디코딩을 수행하는 ECC 엔진, 이의 동작 방법 및 ECC 엔진을 포함하는 스토리지 장치가 개시된다. 본 개시의 기술적 사상의 일측면에 따른 ECC(Error Control Coding) 엔진의 동작 방법은, 메모리 장치로부터 리드 데이터를 획득하는 단계와 상기 리드 데이터에 대해 제1 이터레이션(Iteration) 디코딩을 수행함으로써 생성된 복수의 디코디드 데이터들 중 적어도 하나를 중간 데이터로서 버퍼에 저장하는 단계와 상기 제1 이터레이션 디코딩이 실패한 경우, 상기 리드 데이터와 상기 중간 데이터를 기초로 전처리된 데이터를 생성하고, 상기 전처리된 데이터에 대해 제2 이터레이션 디코딩을 수행하는 단계와 상기 제1 이터레이션 디코딩이 성공한 경우, 상기 중간 데이터를 호스트로 출력하는 단계를 포함하는 것을 특징으로 한다.
Description
본 개시의 기술적 사상은 ECC 엔진에 관한 것으로서, 상세하게는 ECC 디코딩을 수행하는 ECC 엔진, 이의 동작 방법 및 ECC 엔진을 포함하는 스토리지 장치에 관한 것이다.
스토리지 장치에 데이터가 저장될 때, 에러 검출 및 정정을 위해 인코딩 된 데이터가 저장될 수 있다. 저장된 데이터를 독출할 때에는, 인코딩 된 데이터에 ECC(Error Correcting Code) 디코딩을 수행할 수 있다.
ECC 디코딩은 복수번의 단계에 거쳐 반복적으로 수행될 수 있으며, 하나의 단계에서 ECC 디코딩이 실패하는 경우 다음 단계에서 수행되는 ECC 디코딩의 신뢰성 및 정정 능력을 향상시킬 필요가 있다.
본 개시의 기술적 사상이 해결하려는 과제는, ECC 디코딩이 실패하는 경우, 해당 ECC 디코딩 과정에서 생성된 디코디드 데이터들을 이용하여 ECC 디코딩을 수행함으로써, 에러 정정 능력을 개선시키는 ECC 디코딩을 수행하는 ECC 엔진, 이의 동작 방법 및 ECC 엔진을 포함하는 스토리지 장치를 제공하는 데 있다.
상기와 같은 목적을 달성하기 위하여, 본 개시의 기술적 사상의 일측면에 따른 ECC(Error Control Coding) 엔진의 동작 방법은, 메모리 장치로부터 리드 데이터를 획득하는 단계와 상기 리드 데이터에 대해 제1 이터레이션(Iteration) 디코딩을 수행함으로써 생성된 복수의 디코디드 데이터들 중 적어도 하나를 중간 데이터로서 버퍼에 저장하는 단계와 상기 제1 이터레이션 디코딩이 실패한 경우, 상기 리드 데이터와 상기 중간 데이터를 기초로 전처리된 데이터를 생성하고, 상기 전처리된 데이터에 대해 제2 이터레이션 디코딩을 수행하는 단계와 상기 제1 이터레이션 디코딩이 성공한 경우, 상기 중간 데이터를 호스트로 출력하는 단계를 포함하는 것을 특징으로 한다.
상기와 같은 목적을 달성하기 위하여, 본 개시의 기술적 사상의 일측면에 따른 ECC(Error Control Coding) 엔진은, 메모리 장치로부터 획득한 리드 데이터에 대해 제1 이터레이션(Iteration) 디코딩을 수행하고, 상기 제1 이터레이션 디코딩의 수행 결과 생성된 복수의 디코디드 데이터들 중 적어도 하나를 중간 데이터로서 버퍼에 저장하는 ECC 디코더와 상기 제1 이터레이션 디코딩이 실패한 경우, 상기 리드 데이터 및 상기 중간 데이터 중 적어도 하나를 기초로 전처리된 데이터를 생성하는 전처리기를 포함하고, 상기 ECC 디코더는, 상기 제1 이터레이션 디코딩이 실패한 경우 상기 전처리된 데이터를 사용하여 제2 이터레이션 디코딩을 수행하는 것을 특징으로 한다.
상기와 같은 목적을 달성하기 위하여, 본 개시의 기술적 사상의 일측면에 따른 메모리 컨트롤러와 메모리 장치를 포함하는 스토리지 장치로서, 상기 메모리 컨트롤러는, 상기 메모리 장치로부터 획득한 리드 데이터에 대해 제1 디코딩을 수행하고, 상기 제1 디코딩이 실패한 경우, 상기 제1 디코딩의 결과로서 생성된 디코디드 데이터 및 상기 리드 데이터를 이용하여 전처리된 데이터를 생성하고, 상기 전처리된 데이터를 이용하여 제2 디코딩을 수행하는 ECC(Error Control Coding) 엔진을 포함하는 것을 특징으로 한다.
본 개시의 기술적 사상의 ECC 디코딩을 수행하는 ECC 엔진, 이의 동작 방법 및 ECC 엔진을 포함하는 스토리지 장치에 따르면, ECC 디코딩에 실패하는 경우, 반복적인 ECC 디코딩 과정에서 생성된 디코디드 데이터들 중 디코딩 성공에 가장 근접한 데이터를 이용하여 ECC 디코딩을 수행함으로써, 재수행되는 ECC 디코딩의 에러 정정 능력을 개선시킬 수 있는 효과가 있다.
도 1은 본 개시의 예시적인 실시예에 따른 스토리지 장치를 나타내는 블록도이다.
도 2는 본 개시의 예시적인 실시예에 따른 메모리 컨트롤러를 나타내는 블록도이다.
도 3은 본 개시의 예시적인 실시예에 따른 ECC 엔진을 나타내는 블록도이다.
도 4a 및 도 4b는 본 개시의 예시적인 실시예에 따른 ECC 디코더를 나타내는 블록도이다.
도 5는 본 개시의 예시적인 실시예에 따른 전처리기를 나타내는 블록도이다.
도 6은 본 개시의 예시적인 실시예에 따른 데이터들의 예시도이다.
도 7은 본 개시의 다른 예시적인 실시예에 따른 ECC 엔진을 나타내는 블록도이다.
도 8은 본 개시의 예시적인 실시예에 따른 메모리 컨트롤러의 동작 방법을 나타내는 플로우차트이다.
도 9는 본 개시의 예시적인 실시예에 따른 ECC 디코더의 동작 방법을 나타내는 플로우차트이다.
도 10은 본 개시의 예시적인 실시예에 따른 ECC 디코더의 동작 방법을 나타내는 플로우차트이다.
도 11은 본 개시의 예시적인 실시예에 따른 전처리기의 동작 방법을 나타내는 플로우차트이다.
도 12는 본 개시의 다른 예시적인 실시예에 따른 스토리지 장치를 나타내는 블록도이다.
도 2는 본 개시의 예시적인 실시예에 따른 메모리 컨트롤러를 나타내는 블록도이다.
도 3은 본 개시의 예시적인 실시예에 따른 ECC 엔진을 나타내는 블록도이다.
도 4a 및 도 4b는 본 개시의 예시적인 실시예에 따른 ECC 디코더를 나타내는 블록도이다.
도 5는 본 개시의 예시적인 실시예에 따른 전처리기를 나타내는 블록도이다.
도 6은 본 개시의 예시적인 실시예에 따른 데이터들의 예시도이다.
도 7은 본 개시의 다른 예시적인 실시예에 따른 ECC 엔진을 나타내는 블록도이다.
도 8은 본 개시의 예시적인 실시예에 따른 메모리 컨트롤러의 동작 방법을 나타내는 플로우차트이다.
도 9는 본 개시의 예시적인 실시예에 따른 ECC 디코더의 동작 방법을 나타내는 플로우차트이다.
도 10은 본 개시의 예시적인 실시예에 따른 ECC 디코더의 동작 방법을 나타내는 플로우차트이다.
도 11은 본 개시의 예시적인 실시예에 따른 전처리기의 동작 방법을 나타내는 플로우차트이다.
도 12는 본 개시의 다른 예시적인 실시예에 따른 스토리지 장치를 나타내는 블록도이다.
이하, 첨부한 도면을 참조하여 본 개시의 실시예에 대해 상세히 설명한다.
도 1은 본 개시의 예시적인 실시예에 따른 스토리지 장치를 나타내는 블록도이다.
도 1을 참조하면, 스토리지 장치(1000)는 메모리 컨트롤러(100) 및 메모리 장치(200)를 포함할 수 있다.
메모리 컨트롤러(100)는 호스트(Host)로부터의 기록/독출 요청에 응답하여 메모리 장치(200)에 저장된 데이터를 독출하거나, 또는 메모리 장치(200)에 데이터를 기록하도록 메모리 장치(200)를 제어할 수 있다. 구체적으로, 메모리 컨트롤러(100)는 메모리 장치(200)에 어드레스(ADDR), 커맨드(예를 들어, R_CMD) 및 제어 신호(CTRL)를 제공함으로써, 메모리 장치(200)에 대한 프로그램(program)(또는 기록), 독출(read) 및 소거(erase) 동작을 제어할 수 있다. 또한, 기록될 데이터와 독출된 데이터(예를 들어, R_DAT)가 메모리 컨트롤러(100)와 메모리 장치(200) 사이에서 송수신될 수 있다.
메모리 장치(200)는 다양한 종류의 메모리를 포함할 수 있으며, 한 예로서 DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory), LPDDR(Low Power Double Data Rate) SDRAM, GDDR(Graphics Double Data Rate) SDRAM, RDRAM(Rambus Dynamic Random Access Memory) 등과 같은 동적 랜덤 억세스 메모리(Dynamic Random Access Memory, DRAM)를 포함할 수 있다. 그러나, 본 발명의 실시예들은 이에 국한될 필요가 없으며, 한 예로서 메모리 장치(200)는 플래시(flash) 메모리, MRAM(Magnetic RAM), FeRAM(Ferroelectric RAM), PRAM(Phase change RAM) 및 ReRAM(Resistive RAM) 등의 불휘발성 메모리를 포함하여도 무방하다.
도시되지는 않았지만, 메모리 장치(200)는 메모리 셀 어레이, 기록/독출 회로 및 제어 로직을 포함할 수 있다. 메모리 장치(200)가 저항성 메모리 장치에 해당하는 경우, 메모리 셀 어레이는 저항성 메모리 셀들을 포함할 수 있다.
메모리 컨트롤러(100)는 호스트 인터페이스(예를 들어, 도 2의 120)을 포함할 수 있다. 호스트 인터페이스를 통해 스토리지 장치(1000)와 호스트가 통신할 수 있다.
메모리 컨트롤러(100)는 메모리 장치(200)로부터 독출된 리드 데이터(R_DAT)에 대한 에러 검출 및 정정 동작을 수행하는 ECC(Error Correction Code) 엔진(110)을 포함할 수 있으며, 에러 정정된 리드 데이터를 호스트로 제공할 수 있다.
본 개시의 실시예에 따르면, ECC 엔진(110)은 적어도 하나의 ECC 디코더(111)와 적어도 하나의 전처리기(112)를 포함할 수 있다. ECC 디코더(111)는 리드 데이터(R_DAT)에 대한 ECC 디코딩 동작을 수행하고, 디코딩 성공 또는 실패 여부를 판정하고, 디코딩 결과에 따라 디코딩 과정에서 생성된 적어도 하나의 중간 데이터를 활용할 수 있다. 전처리기(112)는 리드 데이터(R_DAT) 및 중간 데이터 중 적어도 하나를 이용하여 추후 수행될 ECC 디코딩시, 에러 정정 능력을 향상시키기 위한 전처리된 데이터를 생성할 수 있다. 전처리된 데이터를 다시 ECC 디코딩에 이용함으로써, ECC 엔진(110)의 정정 능력을 개선시킬 수 있다.
한편, 도 1에 도시된 구성요소들은 하나의 실시예에 불과한 것으로서, 본 개시의 실시예들의 기능을 구현하기 위한 구성요소들은 다양하게 변형이 가능할 수 있다. 예를 들어, 전처리기(112)는 ECC 엔진(110) 외부에 구비되는 구성으로 정의될 수도 있다.
도 2는 본 개시의 예시적인 실시예에 따른 메모리 컨트롤러를 나타내는 블록도이다.
도 1 및 도 2를 함께 참조하면, 메모리 컨트롤러(100)는 호스트 인터페이스(Host I/F)(120), CPU(Central Processing Unit)(130), 플래시 변환 레이어(Flash Translation Layer, FTL)(140), 버퍼 메모리(150), ECC 엔진(110), AES(Advanced Encryption Standards) 엔진(160) 및 메모리 인터페이스(Memory I/F)(170)를 포함할 수 있다.
메모리 컨트롤러(100)는 이외에도 패킷 매니저, 플래시 변환 레이어(140)가 로딩되는 워킹 메모리를 더 포함할 수 있으며, CPU(130)가 플래시 변환 레이어(140)를 실행하는 것에 의해 비휘발성 메모리(NVM)에 대한 데이터 기록 및 독출 동작이 제어될 수 있다.
호스트 인터페이스(120)는 호스트와 패킷(Packet)을 송수신할 수 있다. 호스트로부터 호스트 인터페이스(120)로 전송되는 패킷은 커맨드(Command) 혹은 비휘발성 메모리에 기록될 데이터 등을 포함할 수 있으며, 호스트 인터페이스(120)로부터 호스트로 전송되는 패킷은 커맨드에 대한 응답(Response) 혹은 비휘발성 메모리로부터 독출된 데이터 등을 포함할 수 있다. 본 개시의 실시예에 따르면, 호스트 인터페이스(120)는 ECC 엔진(110)에 의해 디코딩 된 디코디드(Decoded) 데이터를 호스트로 전송할 수 있다.
메모리 인터페이스(170)는 비휘발성 메모리에 기록될 데이터를 비휘발성 메모리로 송신하거나, 비휘발성 메모리로부터 독출된 데이터를 수신할 수 있다. 이러한 메모리 인터페이스(170)는 토글(Toggle) 혹은 온파이(ONFI)와 같은 표준 규약을 준수하도록 구현될 수 있다.
플래시 변환 계층(140)은 어드레스 매핑(address mapping), 웨어-레벨링(wear-leveling), 가비지 콜렉션(garbage collection)과 같은 여러 기능을 수행할 수 있다. 어드레스 매핑 동작은 호스트로부터 수신한 논리 어드레스(logical address)를, 비휘발성 메모리 내에 데이터를 실제로 저장하는 데 사용되는 물리 어드레스(physical address)로 바꾸는 동작이다. 웨어-레벨링은 비휘발성 메모리 내의 블록(block)들이 균일하게 사용되도록 하여 특정 블록의 과도한 열화를 방지하기 위한 기술로, 예시적으로 물리 블록(physical block)들의 소거 카운트들을 밸런싱하는 펌웨어 기술을 통해 구현될 수 있다. 가비지 콜렉션은, 블록의 유효 데이터를 새 블록에 복사한 후 기존 블록을 소거(erase)하는 방식을 통해 비휘발성 메모리 내에서 사용 가능한 용량을 확보하기 위한 기술이다.
버퍼 메모리(150)는 비휘발성 메모리에 기록될 데이터 혹은 비휘발성 메모리로부터 독출될 데이터를 임시로 저장할 수 있다. 버퍼 메모리(150)는 메모리 컨트롤러(100) 내에 구비되는 구성일 수 있으나, 메모리 컨트롤러(100)의 외부에 배치되어도 무방하다.
본 개시의 실시예에 따르면, 버퍼 메모리(150)는 ECC 엔진(110)에 의해 ECC 디코딩이 반복적으로 수행될 때, 그 결과로서 생성되는 디코디드 데이터들을 저장할 수 있다. 또한 ECC 엔진(110)에 의해 디코딩이 성공한 디코디드 데이터를 임시로 저장할 수 있다. 한편 도 2에서 버퍼 메모리(150)는 ECC 엔진(110) 외부에 도시되었으나, ECC 엔진(110) 내부에 구비되는 구성으로 정의될 수도 있다.
ECC 엔진(110)은 비휘발성 메모리로부터 독출되는 리드 데이터에 대한 오류 검출 및 정정 기능을 수행할 수 있다. 보다 구체적으로, ECC 엔진(110)은 비휘발성 메모리에 기입될 기입 데이터에 대하여 패리티 비트(parity bit)들을 생성할 수 있으며, 이와 같이 생성된 패리티 비트들은 기입 데이터와 함께 비휘발성 메모리 내에 저장될 수 있다. 비휘발성 메모리로부터의 데이터 독출 시, ECC 엔진(110)은 독출 데이터와 함께 비휘발성 메모리로부터 독출되는 패리티 비트들을 이용하여 독출 데이터의 에러를 정정하고, 에러가 정정된 독출 데이터를 출력할 수 있다.
본 개시의 실시예에 따른 ECC 엔진(110)은 적어도 하나의 ECC 디코더(111)와 적어도 하나의 전처리기(112)를 포함할 수 있다. 한편 도시되지는 않았으나, ECC 엔진(110)은 기입 데이터에 패리티 비트를 생성하는 ECC 인코더를 더 포함할 수 있다.
ECC 디코더(111)는 리드 데이터에 대해서 이터레이션(Iteration) 디코딩을 수행할 수 있다. 예를 들어 제1 이터레이션 디코딩은 적어도 하나의 디코딩을 포함할 수 있다. 그리고, 제1 이터레이션 디코딩에 포함된 적어도 하나의 디코딩에 대해서, 각 디코딩에 사용되는 파라미터 값은 변경될 수 있다. 본 명세서에서 이터레이션 디코딩에 포함된 각 디코딩이 수행되는 것은, 이터레이션이 수행된다고 지칭될 수 있다.
ECC 디코더(111)는 반복적으로(Iteratively) 디코딩 동작을 수행하면서 리드 데이터에 포함된 에러 비트를 정정할 수 있다.
ECC 디코더(111)는 리드 데이터에 대해 이터레이션 디코딩을 수행하며, 매 이터레이션 디코딩 결과로서 디코디드 데이터를 생성할 수 있다. ECC 디코더(111)는 매 이터레이션마다 생성된 디코디드 데이터를 기초로, 디코딩 성공 또는 실패 여부를 판단할 수 있다. 디코딩이 성공한 경우 또는 이터레이션 디코딩의 종료 조건이 만족된 경우 ECC 디코더(111)는 이터레이션 디코딩을 종료할 수 있다. 이터레이션 디코딩을 종료하기 위한 조건은 미리 설정될 수 있다. 예를 들어 이터레이션 횟수가 최대 이터레이션 횟수에 도달하는 경우 이터레이션 디코딩이 종료될 수 있다.
ECC 디코더(111)는 이터레이션 디코딩을 수행하며 생성된 복수의 디코디드 데이터들 중 적어도 하나를 중간 데이터로서 저장할 수 있다. 중간 데이터로서 저장되는 디코디드 데이터는 복수의 디코디드 데이터들 중 디코딩 성공에 가장 근접한 것일 수 있다. 한 예로서, 디코딩 성공에 근접한 데이터는 복수의 디코디드 데이터들 중 에러율이 낮은 데이터일 수 있다. 각 디코디드 데이터에 대해서 에러율을 계산하기 위해 다양한 기준이 사용될 수 있다. 예를 들어 디코디드 데이터의 신드롬 또는 체크섬이 이용될 수 있다.
신드롬이 이용되는 경우, ECC 디코더(111)는 디코디드 데이터와 패리티 체크 행렬을 곱하여 신드롬 벡터를 생성하고, 신드롬 벡터에 포함된 0 또는 1의 개수를 확인할 수 있다. 예를 들어, 신드롬 벡터에 0이 많이 포함된 것일수록 디코딩 성공에 근접한 것으로 판단될 수 있다.
ECC 디코더(111)는 한번의 이터레이션 디코딩 과정에서 생성된 제1 디코디드 데이터의 신드롬을 계산할 수 있다. 제1 디코디드 데이터는 버퍼 메모리(150) 또는 ECC 엔진(110) 내의 별도의 버퍼(미도시)에 저장될 수 있다. 그리고 ECC 디코더(111)는 다음 디코딩을 수행하고, 생성된 제2 디코디드 데이터의 신드롬을 계산하고, 제1 디코디드 데이터의 신드롬과 제2 디코디드 데이터의 신드롬을 비교할 수 있다.
전술한 예에 따라 ECC 디코더(111)는 제1 디코디드 데이터의 신드롬 벡터와 제2 디코디드 데이터의 신드롬 벡터 중 0을 더 많이 포함한 신드롬 벡터를 결정할 수 있다. ECC 디코더(111)는 결정한 결과를 기초로 다음 이터레이션을 수행할 수 있고 또는 저장된 중간 데이터를 제2 디코디드 데이터로 업데이트할 수 있다.
한편 ECC 엔진(110)이 복수의 ECC 디코더(111)들을 포함함에 따라, 각 ECC 디코더(111)가 순차적으로 ECC 디코딩을 수행할 수 있다. 예를 들어 제1 ECC 디코더의 디코딩이 실패하는 경우 제2 ECC 디코더가 디코딩을 수행할 수 있다. 제1 ECC 디코더 및 제2 ECC 디코더는 각각 이터레이션 종료 조건을 만족할 때까지 전술한 이터레이션 디코딩을 수행할 수 있다. ECC 디코더(111)가 이터레이션 디코딩을 수행하며 중간 데이터를 저장하고, 업데이트하는 동작은 도 4 및 도 9를 통해 자세히 설명한다.
전처리기(112)는 ECC 디코더(111)의 디코딩이 실패하는 경우에 후술하는 다양한 동작들을 수행할 수 있다. 전처리기(112)는 ECC 디코더(111)가 중간 데이터로서 저장한 디코디드 데이터를 이용하여 전처리를 수행할 수 있다. ECC 엔진(110)이 복수의 전처리기(112)들을 포함함에 따라, 각 전처리기(112)들은 복수의 ECC 디코더(111)들 사이에 연결될 수 있다.
전처리기(112)는 메모리 인터페이스(170)를 통해 제공받는 리드 데이터 및 중간 데이터 중 적어도 하나를 이용하여 데이터(이하 전처리된 데이터로 지칭함)를 생성할 수 있다. 전처리기(112)의 동작에 대해 도 5 및 도 10을 통해 자세히 설명한다.
AES 엔진(160)은, 메모리 컨트롤러(100)로 입력되는 데이터에 대한 암호화(encryption) 동작과 복호화(decryption) 동작 중 적어도 하나를, 대칭 키 알고리즘(symmetric-key algorithm)를 이용하여 수행할 수 있다.
도 3은 본 개시의 예시적인 실시예에 따른 ECC 엔진을 나타내는 블록도이고, 도 4a 및 도 4b는 본 개시의 예시적인 실시예에 따른 ECC 디코더를 나타내는 블록도이고, 도 5는 본 개시의 예시적인 실시예에 따른 전처리기를 나타내는 블록도이고, 도 6은 본 개시의 예시적인 실시예에 따른 데이터들의 예시도이다.
도 1 내지 도 3을 함께 참조하면, ECC 엔진(300)은 복수의 ECC 디코더들(310~330)과 복수의 전처리기들(340, 350)을 포함할 수 있다.
복수의 ECC 디코더들(310~330)과 복수의 전처리기들(340, 350)은 서로 번갈아 연결되는 구조로 구현될 수 있다.
ECC 엔진(300)은 메모리 인터페이스(170)를 통해, 메모리 장치(200)로부터 리드 데이터(R_DAT)를 수신할 수 있다. 복수의 ECC 디코더들(310~330) 각각은 이터레이션 디코딩을 수행할 수 있다.
ECC 엔진(300)은 제1 ECC 디코더 내지 제3 ECC 디코더(310~330), 제1 전처리기(340), 및 제2 전처리기(350)를 포함할 수 있다.
제1 ECC 디코더(310)는 제2 ECC 디코더(320)에 비해 낮은 비용, 작은 면적, 낮은 전력 소모, 짧은 정정 시간, 또는 낮은 정정 능력을 갖는 것일 수 있다. 제2 ECC 디코더(320)는 제3 ECC 디코더(330)에 비해 낮은 비용, 작은 면적, 낮은 전력 소모, 짧은 정정 시간, 또는 낮은 정정 능력을 갖는 것일 수 있다.
제1 ECC 디코더(310)가 디코딩을 성공하면, 제1 ECC 디코더(310)는 호스트 인터페이스를 통해 호스트로 디코디드 데이터를 전송할 수 있다. 제1 ECC 디코더(310)가 디코딩을 실패하면, 제2 ECC 디코더(320)가 디코딩을 수행할 수 있다. 제2 ECC 디코더(320)가 디코딩을 성공하면, 디코디드 데이터가 호스트로 출력되고, 디코딩을 실패하면 제3 ECC 디코더(330)가 디코딩을 수행할 수 있다.
도 4a를 참조하면, 제1 ECC 디코더(310)는 리드 데이터(R_DAT)를 기초로 디코딩 로직(311)을 이용하여 이터레이션 디코딩을 수행할 수 있다. 매 이터레이션마다 생성된 디코디드 데이터를 기초로 중간 데이터를 생성할 수 있다. 생성된 중간 데이터는 제1 ECC 디코더(310) 내의 버퍼(312)에 저장될 수 있다. 도 4에 도시된 바와 달리, 버퍼(312)는 제1 ECC 디코더(310) 외부에 구비될 수 있다.
버퍼(312)에 저장된 중간 데이터는 디코딩 로직(311)이 이터레이션을 수행할 때마다 업데이트될 수 있으며, 이터레이션이 종료되면 중간 데이터는 제1 ECC 디코더(310)로부터 생성된 디코디드 데이터들 중 에러율이 가장 낮은 디코디드 데이터일 수 있다.
제1 ECC 디코더(310)의 이터레이션 디코딩이 종료 조건을 만족하는 경우, 디코딩 성공 여부가 판정될 수 있다. 다른 예로서, 이터레이션 디코딩이 종료 조건을 만족하지 않더라도 디코딩 성공 여부가 판정될 수 있다.
디코딩이 성공하면 제1 ECC 디코더(310)는 저장된 제1 중간 데이터(int_DAT1)를 호스트로 출력할 수 있다. 디코딩이 실패하면 제1 ECC 디코더(310)는 저장된 제1 중간 데이터(int_DAT1)를 제1 전처리기(340)로 출력할 수 있다.
도 5를 참조하면, 제1 전처리기(340)는 제1 ECC 디코더(310)의 디코딩이 실패한 경우에 동작할 수 있다. 제1 전처리기(340)는 제1 ECC 디코더(310)로부터 제1 중간 데이터(int_DAT1)를 수신하고, 메모리 인터페이스(170)를 통해 리드 데이터(R_DAT)를 수신할 수 있다. 제1 전처리기(340)는 제1 중간 데이터(int_DAT1)와 리드 데이터(R_DAT)를 이용하여 제1 전처리된 데이터(pre_DAT1)를 생성하고, 이를 제2 ECC 디코더(320)에 제공할 수 있다.
제1 전처리기(340)는 비교기(341) 및 생성기(342)를 포함할 수 있다. 비교기(341)는 리드 데이터(R_DAT)와 제1 중간 데이터(int_DAT1)의 동일 위치의 비트가 같은지 비교할 수 있다. 생성기(342)는 비트의 동일 여부를 기초로, 각 비트의 신뢰성 정보를 포함한 제1 전처리된 데이터(pre_DAT1)를 생성할 수 있다.
도 6을 참조하면, 리드 데이터(R_DAT)는 010이고, 제1 중간 데이터(int_DAT1)는 110일 수 있다. 비교기(341)는 리드 데이터(R_DAT)의 비트와 제1 중간 데이터(int_DAT1)의 같은 자릿수의 비트의 동일 여부를 비교할 수 있다. 한편, 도 6에서는 리드 데이터(R_DAT)가 하드 디시전(Hard Decision, HD) 데이터인 것을 가정하였으나 이에 제한되지 않으며, 리드 데이터(R_DAT)는 각 비트의 신뢰성을 포함하는 소프트 디시전(Soft Decision, SD) 데이터일 수 있다.
제1 중간 데이터(int_DAT1)는 제1 ECC 디코더(310)에 의해 에러가 정정된 데이터를 의미하므로, 리드 데이터(R_DAT)의 비트와 제1 중간 데이터(int_DAT1)의 비트가 같다는 것은 해당 비트의 신뢰성이 높다는 것을 의미할 수 있다. 또한 리드 데이터(R_DAT)의 비트와 제1 중간 데이터(int_DAT1)의 비트가 다르다는 것은 해당 비트의 신뢰성이 낮다는 것을 의미할 수 있다.
리드 데이터(R_DAT)의 첫번째 비트가 0이고, 제1 중간 데이터(int_DAT1)의 첫번째 비트가 1이므로 제1 전처리기(340)는 해당 자릿수의 비트를 1로 결정할 수 있고, 상기 비트 1은 신뢰성이 낮을 수 있다(weak). 리드 데이터(R_DAT)의 두번째 비트가 1이고, 제1 중간 데이터(int_DAT1)의 두번째 비트 역시 1이므로 제1 전처리기(340)는 해당 자릿수의 비트를 1로 결정할 수 있고, 상기 비트 1은 신뢰성이 높을 수 있다(strong).
한편 리드 데이터(R_DAT)의 비트와 중간 데이터의 비트가 서로 다른 경우 중간 데이터의 비트를 추종할 수 있고, 리드 데이터(R_DAT)의 비트를 추종할 수도 있다. 또한 각 비트와 신뢰성을 나타내는 비트가 인접하지 않을 수도 있다.
또한, 전처리기는 소프트 디시전(SD) 형태의 전처리된 데이터를 생성할 수 있으나, 반드시 이에 제한되는 것은 아니다. 전처리기는 데이터를 구성하는 비트만을 포함한 하드 디시전(HD) 형태의 전처리된 데이터를 생성할 수도 있다.
도 4b를 참조하면, 제2 ECC 디코더(320)는 제1 전처리기(340)로부터 제1 전처리된 데이터(pre_DAT1)를 수신하고, 제1 전처리된 데이터(pre_DAT1)를 기초로 디코딩 로직(321)을 이용하여 이터레이션 디코딩을 수행할 수 있다.
한편 제2 ECC 디코더(320)의 디코딩 로직(321)은 제1 ECC 디코더(310)의 디코딩 로직(311)과 다를 수 있다. 예를 들어 제2 ECC 디코더(320)의 디코딩 로직(321)은 제1 ECC 디코더(310)의 디코딩 로직(311)에 비해 높은 정정 능력 및/또는 높은 정정 시간을 갖는 것일 수 있다.
제2 ECC 디코더(320)의 디코딩 로직(321)은 제1 전처리된 데이터(pre_DAT1)에 포함된 각 비트의 신뢰성 정보를 이용하여 이터레이션 디코딩을 수행할 수 있다. 제1 ECC 디코더(310)의 동작과 유사하게, 제2 ECC 디코더(320)는 매 이터레이션마다 생성된 디코디드 데이터들 중 가장 에러율이 낮은 디코디드 데이터를 버퍼(322)에 저장할 수 있다. 버퍼(322)에 저장된 데이터를 제2 중간 데이터(int_DAT2)로 지칭할 수 있다. 제2 중간 데이터(int_DAT2)의 비트 수는 리드 데이터(R_DAT)의 비트 수와 같을 수 있다.
이터레이션 종료 조건이 만족하면, 제2 ECC 디코더(320)는 디코딩 성공 여부를 판단할 수 있다. 디코딩이 성공하면 제2 ECC 디코더(320)는 제2 중간 데이터(int_DAT2)를 호스트로 출력하고, 디코딩이 실패하면 제2 ECC 디코더(320)는 제2 중간 데이터(int_DAT2)를 제2 전처리기(350)로 출력할 수 있다.
디코딩이 실패한 경우, 제2 전처리기(350)는 제1 전처리기(340)와 유사한 동작을 수행할 수 있다. 즉, 제2 중간 데이터(int_DAT2)와 리드 데이터(R_DAT)를 이용하여 제2 전처리된 데이터(pre_DAT2)를 생성하고, 이를 제3 ECC 디코더(330)에 제공할 수 있다. 제3 ECC 디코더(330)의 동작은 전술한 제2 ECC 디코더(320)의 동작과 유사할 수 있다.
도 7은 본 개시의 다른 예시적인 실시예에 따른 ECC 엔진을 나타내는 블록도이다.
도 7을 참조하면, 도 3과 달리 ECC 엔진(400)은 하나의 ECC 디코더(410)와 하나의 전처리기(430)를 구비하는 것으로 구현될 수도 있다. 이 경우 도 3의 제1 ECC 디코더 내지 제3 ECC 디코더(310~330)의 동작을 ECC 디코더(410)가 수행할 수 있고, 제1 전처리기 및 제2 전처리기(340, 350)의 동작을 전처리기(430)가 수행할 수 있다.
ECC 엔진(400)은 복수의 디코딩 모드들을 포함할 수 있다. ECC 엔진(400)은 디코딩 모드를 변경함으로써, 도 3의 각각의 ECC 디코더의 동작을 수행할 수 있다. 예를 들어, ECC 엔진(400)이 제1 디코딩 모드인 경우, ECC 엔진(400)은 제1 ECC 디코더(310)의 동작을 수행할 수 있다. 제1 디코딩 모드에서, ECC 엔진(400)은 제1 이터레이션 디코딩을 수행할 수 있다. 각 디코딩 모드에서 사용되는 디코딩 파라미터들은 서로 다를 수 있다. 예를 들어 제1 디코딩 모드는 제2 ECC 모드에 비해 낮은 비용, 작은 면적, 낮은 전력 소모, 짧은 정정 시간, 또는 낮은 정정 능력을 갖는 것일 수 있다.
ECC 디코더(410)는 메모리 장치로부터 리드 데이터(R_DAT)를 수신하고, 디코딩 로직을 이용하여 제1 이터레이션 디코딩을 수행할 수 있다. 제1 이터레이션 디코딩은 예를 들어 도 3의 제1 ECC 디코더(310)의 디코딩 동작과 유사할 수 있다.
제1 이터레이션 디코딩은 적어도 하나의 이터레이션들을 포함할 수 있다. 매 이터레이션마다 디코디드 데이터(dec_DAT)가 생성될 수 있고, 디코디드 데이터(dec_DAT)의 에러율이 계산될 수 있다.
ECC 디코더(410)는 디코딩을 반복하며 생성된 디코디드 데이터(dec_DAT)와 버퍼(420)에 저장된 중간 데이터(int_DAT)의 에러율을 비교하여, 에러율이 더 낮은 것을 버퍼(420)에 저장할 수 있다. 이로써 중간 데이터(int_DAT)는 이터레이션이 진행되면서, 가장 에러율이 낮은 디코디드 데이터로 업데이트될 수 있다.
ECC 디코더(410)는 제1 이터레이션 디코딩이 종료될 때, 버퍼(420)에 저장된 중간 데이터(int_DAT)를 기초로 디코딩 성공 여부를 판단할 수 있다. 디코딩 성공의 경우, ECC 디코더(410)는 버퍼(420)에 저장된 중간 데이터(int_DAT)를 호스트로 출력할 수 있다. 디코딩 실패의 경우, ECC 디코더(410)는 중간 데이터(int_DAT)를 전처리기(430)에 전달할 수 있다.
디코딩 실패의 경우, 전처리기(430)는 리드 데이터(R_DAT)와 중간 데이터(int_DAT)를 기초로 전처리된 데이터(pre_DAT)를 생성하고, 다시 ECC 디코더(410)에 제공할 수 있다.
ECC 디코더(410)는 전처리된 데이터(pre_DAT)를 기초로, 제1 이터레이션 디코딩에 이용된 디코딩 로직과 다른 디코딩 로직을 이용하여 제2 이터레이션 디코딩을 수행할 수 있다. 제2 이터레이션 디코딩을 수행하기 위해, ECC 디코더(410)는 제1 디코딩 모드에서 제2 디코딩 모드로 디코딩 모드를 변경할 수 있다.
제1 이터레이션 디코딩에 사용된 파라미터와 제2 이터레이션 디코딩에 사용된 파라미터는 서로 다를 수 있다. 제1 이터레이션 디코딩이 복수의 디코딩들을 포함하고, 제2 이터레이션 디코딩 또한 복수의 디코딩들을 포함하는 경우, 제1 이터레이션 디코딩 과정에서 수행되는 디코딩들의 파라미터와 제2 이터레이션 디코딩 과정에서 수행되는 디코딩들의 파라미터가 서로 다를 수 있다. 제2 이터레이션 디코딩은 예를 들어 도 3의 제2 ECC 디코더(320)의 디코딩 동작과 유사할 수 있다.
ECC 디코더(410)는 제n 이터레이션 디코딩(n은 1 이상의 자연수)까지 수행할 수 있으며, n은 호스트 또는 메모리 컨트롤러에 의해 결정될 수 있다.
도 8은 본 개시의 예시적인 실시예에 따른 메모리 컨트롤러의 동작 방법을 나타내는 플로우차트이다.
도 1 및 도 8을 함께 참조하면, 메모리 컨트롤러(100)는 메모리 장치(200)로부터 리드 데이터를 수신할 수 있다(S110).
메모리 컨트롤러(100)는 리드 데이터(R_DAT)에 대해 디코딩을 수행할 수 있다(S120). 디코딩은 이터레이션 디코딩 방식으로 수행될 수 있으며, 매 이터레이션마다 디코딩에 사용되는 파라미터들이 변경될 수 있다.
메모리 컨트롤러(100)는 디코딩 결과를 기초로 중간 데이터를 생성하고 저장할 수 있다(S130). 중간 데이터는 이터레이션 디코딩에 의해 생성된 복수의 디코디드 데이터들 중 가장 에러율이 낮은 디코디드 데이터일 수 있다. 다양한 방법으로 디코디드 데이터의 에러율이 계산될 수 있다.
메모리 컨트롤러(100)는 디코딩 실패 여부를 판단할 수 있다(S140).
디코딩이 실패한 경우, 메모리 컨트롤러(100)는 리드 데이터(R_DAT)와 중간 데이터를 전처리하여, 전처리된 데이터를 생성하고(S150), 전처리된 데이터에 대해 다시 디코딩을 수행할 수 있다(S120).
디코딩이 성공한 경우, 메모리 컨트롤러(100)는 저장된 중간 데이터를 호스트로 제공할 수 있다(S160).
도 9는 본 개시의 예시적인 실시예에 따른 ECC 디코더의 동작 방법을 나타내는 플로우차트이다.
이하에서는, 설명의 편의상 ECC 엔진(400)이 ECC 디코더(410)와 전처리기(430)를 포함하는 구성으로 설명하나 ECC 엔진(400)의 구조가 이에 제한되는 것은 아니다.
도 7 및 도 9를 함께 참조하면, ECC 디코더(410)는 디코딩 대상이 되는 데이터를 수신할 수 있다(S210). 이때 데이터는 메모리 장치로부터 획득한 리드 데이터(R_DAT) 또는 전처리기(430)로부터 획득한 전처리된 데이터(pre_DAT)일 수 있다.
ECC 디코더(410)는 이터레이션 디코딩을 수행할 수 있다(S220). 매 이터레이션마다 디코딩 결과로서 디코디드 데이터(dec_DAT)가 생성될 수 있다. ECC 디코더(410)는 생성된 디코디드 데이터(dec_DAT)를 평가하는 메트릭(Metric)을 계산할 수 있다. 예를 들어, 메트릭은 디코딩 성공 확률 또는 에러율일 수 있다.
ECC 디코더(410)는 디코디드 데이터(dec_DAT)를 기초로 디코디드 데이터(dec_DAT)를 중간 데이터(int_DAT)로써 버퍼(420)에 저장하거나, 이미 저장된 중간 데이터(int_DAT)를 상기 디코디드 데이터(dec_DAT)로 업데이트할 수 있다(S230). 이에 대해서는 도 10을 통해 자세히 설명한다.
ECC 디코더(410)는 이터레이션 종료 조건이 만족되는지 판단할 수 있다(S240). 예를 들어, 최대 이터레이션 횟수에 도달하거나 디코딩이 성공하는 경우 이터레이션 종료 조건이 만족되어 이터레이션 디코딩이 종료될 수 있다.
이터레이션 종료 조건이 만족되지 않으면, ECC 디코더(410)는 다시 이터레이션 디코딩을 수행할 수 있다. 이때 이전 이터레이션 디코딩에서 사용되는 파라미터들과 이후 이터레이션 디코딩에서 사용되는 파라미터들은 서로 다를 수 있다.
이터레이션 종료 조건이 만족되면, ECC 디코더(410)는 디코딩 실패 여부를 판단할 수 있다(S250). 디코딩 실패 여부를 판단하는 방법은 다양할 수 있다. 한편 디코딩이 성공하여 이터레이션이 종료된 것이라면 S240 단계에서 곧바로 S260 단계로 진행될 것이다.
한편 도 9에서는, 이터레이션 종료 조건의 만족 여부를 먼저 판단하고 디코딩 실패 여부를 판단하였으나, 판단 순서는 바뀔 수 있다. 즉 디코딩 실패 여부를 먼저 판단하고 이후 이터레이션 종료 조건의 만족 여부를 판단할 수도 있다.
디코딩이 실패한 경우, ECC 디코더(410)는 저장된 중간 데이터(int_DAT)를 전처리기(430)로 제공할 수 있다(S260).
디코딩이 성공한 경우, ECC 디코더(410)는 저장된 중간 데이터(int_DAT)를 호스트로 제공할 수 있다(S270). ECC 디코더(410)가 이터레이션 디코딩을 수행함에 따라, 디코딩 성공에 가장 근접한 것으로 평가되는 디코디드 데이터(dec_DAT)가 중간 데이터(int_DAT)로서 저장될 수 있다. 따라서 디코딩이 성공했다는 것은 중간 데이터(int_DAT)에 대해 디코딩이 성공한 것을 의미할 수 있다.
본 실시예에 따르면, ECC 디코더(410)는 이터레이션 디코딩을 수행하며 가장 디코딩 성공에 근접한 디코디드 데이터(dec_DAT)를 중간 데이터(int_DAT)로서 저장하고, 디코딩 실패시 이를 전처리기(430)로 전달할 수 있다. 이에 따라 리드 데이터(R_DAT)에 비해 에러 정정된 데이터를 다음 단계의 ECC 디코딩에 이용할 수 있으므로 ECC 엔진(400)의 정정 능력이 향상될 수 있다.
도 10은 본 개시의 예시적인 실시예에 따른 ECC 디코더의 동작 방법을 나타내는 플로우차트이다.
도 7 및 도 10을 함께 참조하면, ECC 디코더(410)는 중간 데이터(int_DAT)를 버퍼(420)에 저장하거나, 이미 버퍼(420)에 저장된 중간 데이터(int_DAT)를 업데이트할 수 있다. 버퍼(420)는 ECC 디코더(410) 내부에 구비될 수도 있다. 또한 ECC 디코더(410)는 이터레이션 디코딩을 수행할 수 있다.
ECC 디코더(410)는 i번째 디코딩을 수행하고, 그 결과로서 제i 디코디드 데이터(d_DAT_i)를 생성할 수 있다(S310). 디코딩의 대상이 되는 데이터는 리드 데이터(R_DAT) 또는 전처리된 데이터(pre_DAT)일 수 있다.
ECC 디코더(410)는 제i 디코디드 데이터(d_DAT_i)의 에러율을 계산할 수 있다(S320). ECC 디코더(410)는 제i 디코디드 데이터(d_DAT_i)의 디코딩 성공 여부를 판단할 수 있는 지표를 계산할 수 있으며, 에러율은 지표의 한 예로서 계산될 수 있다. 에러율의 예로서, 체크섬 또는 신드롬이 사용될 수 있다.
ECC 디코더(410)는 제i 디코디드 데이터(d_DAT_i)를 버퍼(420)에 저장할 수 있다(S330). 버퍼(420)에 저장된 데이터를 중간 데이터(int_DAT)로 지칭할 수 있다. S330 단계는 버퍼(420)에 중간 데이터(int_DAT)가 저장되어 있지 않은 경우에 수행될 수 있다. 버퍼(420)에 이미 중간 데이터(int_DAT)가 저장되어 있는 경우에는, 후술할 S360 내지 S370 단계와 유사한 동작이 수행될 수 있다. 예를 들어 기 저장된 중간 데이터(int_DAT)의 에러율과 제i 디코디드 데이터(d_DAT_i)의 에러율을 비교하고, 기 저장된 중간 데이터(int_DAT)의 에러율보다 제i 디코디드 데이터(d_DAT_i)의 에러율이 낮은 경우 중간 데이터(int_DAT)를 제i 디코디드 데이터(d_DAT_i)로 업데이트 할 수 있다.
ECC 디코더(410)는 제i 디코디드 데이터(d_DAT_i)와 함께 제i 디코디드 데이터(d_DAT_i)의 에러율도 버퍼(420)에 저장할 수 있다.
ECC 디코더(410)는 i+1번째 디코딩을 수행하고, 그 결과로서 제i+1 디코디드 데이터(d_DAT_i+1)를 생성할 수 있다(S340).
ECC 디코더(410)는 제i+1 디코디드 데이터(d_DAT_i+1)의 에러율을 계산할 수 있다(S350).
ECC 디코더(410)는 제i 디코디드 데이터(d_DAT_i)의 에러율과 제i+1 디코디드 데이터(d_DAT_i+1)의 에러율을 비교하고(S360), 제i 디코디드 데이터(d_DAT_i)의 에러율이 제i+1 디코디드 데이터(d_DAT_i+1)의 에러율을 초과(또는, 이상)하면 버퍼(420)에 중간 데이터(int_DAT)를 제i+1 디코디드 데이터(d_DAT_i+1)로 업데이트할 수 있다(S370).
제i 디코디드 데이터(d_DAT_i)의 에러율이 제i+1 디코디드 데이터(d_DAT_i+1)의 에러율을 초과하지 않으면(또는, 미만), ECC 디코더(410)는 버퍼(420)에 제i 디코디드 데이터(d_DAT_i)가 저장된 채로 다음 이터레이션을 수행할 수 있다(S380).
전술한 동작들을 통해, ECC 디코더(410)의 이터레이션이 종료되면 버퍼(420)에는 에러율이 가장 낮은 디코디드 데이터가 저장된 상태일 수 있다.
도 11은 본 개시의 예시적인 실시예에 따른 전처리기의 동작 방법을 나타내는 플로우차트이다.
도 3, 도 5 및 도 11을 함께 참조하면, 전처리기(340)는 앞단에 연결된 제1 ECC 디코더(310)의 디코딩이 실패한 경우, 상기 제1 ECC 디코더(310)로부터 중간 데이터(int_DAT1)를 획득하여 일련의 동작들을 수행할 수 있다. 따라서 후술하는 동작들은 제1 ECC 디코더(310)의 디코딩이 실패한 경우를 가정하여 설명될 것이다.
전처리기(340)는 메모리 장치로부터 리드 데이터(R_DAT)를 획득하고, 제1 ECC 디코더(310)로부터 중간 데이터(int_DAT1)를 획득할 수 있다(S410). 예를 들어 리드 데이터(R_DAT)는 010, 중간 데이터(int_DAT1)는 110일 수 있다.
전처리기(340)는 리드 데이터(R_DAT)의 각 비트와 중간 데이터(int_DAT1)의 각 비트를 비교할 수 있다(S420).
전처리기(340)는 각 비트의 일치 여부를 기초로, 각 비트의 신뢰도를 결정할 수 있다(S430). 예를 들어 리드 데이터(R_DAT)의 최상위 비트는 0이고, 중간 데이터(int_DAT1)의 최상위 비트는 1로서 서로 다른 경우, 리드 데이터(R_DAT)의 최상위 비트 및/또는 중간 데이터(int_DAT1)의 최상위 비트의 신뢰도는 낮을 수 있다(weak). 리드 데이터(R_DAT)의 최하위 비트는 1이고, 중간 데이터(int_DAT1)의 최하위 비트 역시 1로 서로 동일한 경우, 리드 데이터(R_DAT)의 최하위 비트 및/또는 중간 데이터(int_DAT1)의 최하위 비트의 신뢰도는 높을 수 있다(strong).
전처리기(340)는 각 비트의 신뢰도를 기초로 전처리된 데이터(pre_DAT1)를 생성하고, 전처리된 데이터(pre_DAT1)를 제2 ECC 디코더(320)로 제공할 수 있다(S440).
생성된 전처리된 데이터(pre_DAT1)는 각 비트와 이에 대응되는 신뢰도를 포함한 소프트 디시전(SD) 데이터의 형태일 수 있다. 한편, 전처리된 데이터(pre_DAT1)는 신뢰도를 포함하지 않고 데이터만을 포함하는 하드 디시전(HD) 데이터의 형태일 수 있다. 이 경우, 리드 데이터(R_DAT)의 비트와 중간 데이터(int_DAT1)의 비트가 서로 다를 때, 전처리된 데이터(pre_DAT1)의 비트는 리드 데이터(R_DAT)의 비트 및 중간 데이터(int_DAT1)의 비트 중 어느 하나를 따라 플립(Flip)될 수 있다. 전처리된 데이터(pre_DAT1)가 하드 디시전 데이터인 경우, 전처리기(320)는 하드 디시전 데이터와 함께 별도의 신뢰도 정보를 뒷단의 제2 ECC 디코더(320)로 제공할 수 있다.
한편 ECC 엔진(도 7의 400)이 도 7의 구성으로 구현되는 경우, 중간 데이터(int_DAT)를 전처리기(430)로 제공하는 ECC 디코더(410)와, 전처리된 데이터(pre_DAT)를 제공받는 ECC 디코더(410)가 동일한 것일 수 있다.
도 12는 본 개시의 다른 예시적인 실시예에 따른 데이터 저장 시스템을 나타내는 블록도이다.
전술한 ECC 디코딩 동작들은 데이터 저장 시스템(2000)에 적용될 수 있으며, 한 예로서 데이터 저장 시스템(2000)에 RAID(Redundant Array of Inexpensive Disk) 기술이 적용될 수 있다.
도 12를 참조하면, 데이터 저장 시스템(2000)은 RAID 컨트롤러(500) 및 복수의 SSD들(SSD_1~SSD_n)을 포함할 수 있다.
RAID 컨트롤러(500)는 호스트로부터의 요청에 응답하여, 제1 채널 내지 제n 채널들(Ch1~Chn)을 통해 복수의 SSD(SSD_1~SSD_n)들에 액세스할 수 있다. RAID 컨트롤러(500)는 각 SSD의 리드, 라이트 및 이레이즈 동작들을 제어하도록 구성될 수 있다.
도시되지는 않았으나, RAID 컨트롤러(500)는 호스트와 SSD(600) 사이에서 인터페이스를 제공하도록 구성될 수 있고, CPU, Buffer 등의 구성요소들을 더 포함할 수 있다.
SSD(600)는 전술한 실시예에 따른 스토리지 장치(예를 들어, 도 1의 1000)의 동작들을 수행하도록 구성될 수 있다. 예를 들어 메모리 장치(예를 들어, 도 1의 200)로부터 독출한 리드 데이터에 대해 ECC 디코딩 동작을 수행하고, 디코딩 실패의 경우 중간 데이터를 활용하는 전처리기의 동작으로서 에러 정정 동작의 신뢰성을 높일 수 있다.
또한 본 개시의 실시예에 따르면, RAID 컨트롤러(500)는 ECC 엔진(510)을 포함할 수 있다. ECC 엔진(510)의 구성은 도 1 내지 도 11을 통해 전술한 ECC 엔진 또는 ECC 엔진(610)의 구성과 유사할 수 있으며, 동작 역시 유사할 수 있다. 예를 들어, ECC 엔진(510)은 적어도 하나의 ECC 디코더와 적어도 하나의 전처리기를 포함할 수 있다.
RAID 컨트롤러(500)는 SSD(600)로부터 리드 데이터를 제공받거나, 중간 데이터 또는 전처리된 데이터를 제공받을 수 있다. 리드 데이터는 호스트의 독출 요청에 따라 NVM으로부터 독출된 데이터일 수 있다. 중간 데이터는 ECC 엔진(510)에서 디코딩을 수행하며 생성된 디코디드 데이터들 중, 에러율이 낮은 디코디드 데이터일 수 있다. 전처리된 데이터는, ECC 엔진(510)에서 리드 데이터와 중간 데이터를 기초로 생성된 것일 수 있다.
ECC 엔진(510)은 리드 데이터 또는 전처리된 데이터에 대한 디코딩을 수행할 수 있고, 리드 데이터와 중간 데이터를 이용하여 전처리된 데이터를 생성할 수 있다.
본 개시의 실시예에 따르면, ECC 디코딩은 SSD(600) 내의 ECC 엔진(610)에 의해 반복적으로 수행될 수 있고, 이때 동일한 ECC 디코더에 의해 반복적으로 수행되거나 같은 레벨의 서로 다른 ECC 디코더들에 의해 수행될 수 있다.
다른 예로서 ECC 디코딩은 서로 다른 레벨의 ECC 엔진에 의해 수행될 수 있다. 예를 들어 SSD(600) 내의 ECC 엔진(610) 및 RAID 컨트롤러(500) 내의 ECC 엔진(510)에 의해 ECC 디코딩이 수행될 수 있다.
또한 본 개시의 실시예에 따른 전처리기는, 뒷단과 앞단에 같은 레벨의 ECC 디코더가 연결될 수 있고, 서로 다른 레벨의 ECC 디코더가 연결될 수도 있다. 예를 들어, ECC 엔진(610)에 포함된 전처리기는 ECC 엔진(610)에 포함된 ECC 디코더로부터 중간 데이터를 획득하고, 전처리된 데이터를 생성하여 ECC 엔진(510)에 포함된 ECC 디코더에 제공할 수 있다.
이상에서와 같이 도면과 명세서에서 예시적인 실시예들이 개시되었다. 본 명세서에서 특정한 용어를 사용하여 실시예들을 설명되었으나, 이는 단지 본 개시의 기술적 사상을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 청구범위에 기재된 본 개시의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 개시의 진정한 기술적 보호범위는 첨부된 청구범위의 기술적 사상에 의해 정해져야 할 것이다.
Claims (10)
- ECC(Error Control Coding) 엔진의 동작 방법으로서,
메모리 장치로부터 리드 데이터를 획득하는 단계;
상기 리드 데이터에 대해 제1 이터레이션(Iteration) 디코딩을 수행함으로써 생성된 복수의 디코디드 데이터들 중 적어도 하나를 중간 데이터로서 버퍼에 저장하는 단계;
상기 제1 이터레이션 디코딩이 실패한 경우, 상기 리드 데이터와 상기 중간 데이터를 기초로 전처리된 데이터를 생성하고, 상기 전처리된 데이터에 대해 제2 이터레이션 디코딩을 수행하는 단계; 및
상기 제1 이터레이션 디코딩이 성공한 경우, 상기 중간 데이터를 호스트로 출력하는 단계를 포함하는 것을 특징으로 하는 ECC 엔진의 동작 방법. - 제1항에 있어서,
상기 중간 데이터로서 저장하는 단계는,
상기 복수의 디코디드 데이터들 중 에러율이 가장 낮은 디코디드 데이터를 상기 중간 데이터로서 저장하는 것을 특징으로 하는 ECC 엔진의 동작 방법. - 제2항에 있어서,
상기 중간 데이터로서 저장하는 단계는,
제1 디코딩 결과로서 제1 디코디드 데이터를 생성하고, 상기 제1 디코디드 데이터의 제1 에러율을 계산하는 단계;
상기 제1 디코디드 데이터를 상기 중간 데이터로서 저장하는 단계;
제2 디코딩 결과로서 제2 디코디드 데이터를 생성하고, 상기 제2 디코디드 데이터의 제2 에러율을 계산하는 단계; 및
상기 제1 에러율과 상기 제2 에러율을 비교하고, 비교 결과에 따라 상기 중간 데이터를 상기 제2 디코디드 데이터로 업데이트하는 단계를 포함하는 것을 특징으로 하는 ECC 엔진의 동작 방법. - 제1항에 있어서,
상기 전처리된 데이터에 대해 제2 이터레이션 디코딩을 수행하는 단계는,
상기 리드 데이터와 상기 중간 데이터의 일치 여부를 비교하는 단계;
비교 결과를 기초로 상기 중간 데이터의 신뢰성을 결정하는 단계; 및
상기 신뢰성을 기초로 상기 전처리된 데이터를 생성하는 단계를 포함하는 것을 특징으로 하는 ECC 엔진의 동작 방법. - 제4항에 있어서,
상기 리드 데이터와 상기 중간 데이터의 일치 여부를 비교하는 단계는,
상기 리드 데이터의 제1 비트값과 상기 중간 데이터의 제1 비트값의 일치 여부를 비교하는 것을 특징으로 하는 ECC 엔진의 동작 방법. - 제5항에 있어서,
상기 전처리된 데이터는 소프트 디시젼(Soft Decision) 데이터이고,
상기 중간 데이터의 신뢰성을 결정하는 단계는,
상기 리드 데이터의 제1 비트값과 상기 중간 데이터의 제1 비트값이 일치 하는 경우, 상기 중간 데이터의 제1 비트값의 신뢰성을 높은 레벨(Strong)로 결정하고,
불일치하는 경우, 상기 중간 데이터의 제1 비트값의 신뢰성을 낮은 레벨(weak)로 결정하는 것을 특징으로 하는 ECC 엔진의 동작 방법. - 메모리 컨트롤러와 메모리 장치를 포함하는 스토리지 장치로서,
상기 메모리 컨트롤러는,
상기 메모리 장치로부터 획득한 리드 데이터에 대해 제1 디코딩을 수행하고, 상기 제1 디코딩이 실패한 경우, 상기 제1 디코딩의 결과로서 생성된 디코디드 데이터 및 상기 리드 데이터를 이용하여 전처리된 데이터를 생성하고, 상기 전처리된 데이터를 이용하여 제2 디코딩을 수행하는 ECC(Error Control Coding) 엔진을 포함하는 것을 특징으로 하는 스토리지 장치. - 제7항에 있어서,
상기 ECC 엔진은,
상기 제1 디코딩을 수행하는 제1 ECC 디코더;
상기 제2 디코딩을 수행하는 제2 ECC 디코더; 및
상기 제1 ECC 디코더로부터 상기 디코디드 데이터를 수신하고, 상기 전처리된 데이터를 생성하고, 상기 전처리된 데이터를 상기 제2 ECC 디코더로 제공하는 전처리기를 포함하는 것을 특징으로 하는 스토리지 장치. - 제8항에 있어서,
상기 스토리지 장치는 제1 스토리지 장치 및 상기 제1 스토리지 장치와 연결된 RAID 컨트롤러를 포함하고,
상기 제1 ECC 디코더는 상기 제1 스토리지 장치에 포함되고,
상기 제2 ECC 디코더는 상기 RAID 컨트롤러에 포함되는 것을 특징으로 하는 스토리지 장치. - 제9항에 있어서,
상기 전처리기는 제1 스토리지 장치 또는 상기 RAID 컨트롤러에 포함되는 것을 특징으로 하는 스토리지 장치.
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200169841A KR20220080589A (ko) | 2020-12-07 | 2020-12-07 | Ecc 디코딩을 수행하는 ecc 엔진, 이의 동작 방법 및 ecc 엔진을 포함하는 스토리지 장치 |
US17/478,002 US11664826B2 (en) | 2020-12-07 | 2021-09-17 | Error correction code engine performing ECC decoding, operation method thereof, and storage device including ECC engine |
CN202111344231.0A CN114596910A (zh) | 2020-12-07 | 2021-11-12 | 执行ecc解码的纠错码引擎及其操作方法和包括其的存储设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200169841A KR20220080589A (ko) | 2020-12-07 | 2020-12-07 | Ecc 디코딩을 수행하는 ecc 엔진, 이의 동작 방법 및 ecc 엔진을 포함하는 스토리지 장치 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20220080589A true KR20220080589A (ko) | 2022-06-14 |
Family
ID=81813785
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200169841A KR20220080589A (ko) | 2020-12-07 | 2020-12-07 | Ecc 디코딩을 수행하는 ecc 엔진, 이의 동작 방법 및 ecc 엔진을 포함하는 스토리지 장치 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11664826B2 (ko) |
KR (1) | KR20220080589A (ko) |
CN (1) | CN114596910A (ko) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102532038B1 (ko) * | 2021-12-15 | 2023-05-12 | 삼성전자주식회사 | 에러 정정 코드(ecc) 디코딩 방법 및 이를 수행하는 메모리 시스템 |
US11990920B2 (en) * | 2021-12-30 | 2024-05-21 | Quantum Corporation | Artificial intelligence augmented iterative product decoding |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5974580A (en) * | 1997-07-23 | 1999-10-26 | Cirrus Logic, Inc. | Concurrent row/column syndrome generator for a product code |
US6668349B1 (en) * | 2000-04-14 | 2003-12-23 | Hitachi, Ltd. | Data recording/readback method and data recording/readback device for the same |
US6604220B1 (en) * | 2000-09-28 | 2003-08-05 | Western Digital Technologies, Inc. | Disk drive comprising a multiple-input sequence detector selectively biased by bits of a decoded ECC codedword |
JP2003203435A (ja) * | 2002-01-09 | 2003-07-18 | Fujitsu Ltd | データ再生装置 |
US20050177679A1 (en) * | 2004-02-06 | 2005-08-11 | Alva Mauricio H. | Semiconductor memory device |
US7260762B2 (en) * | 2004-07-26 | 2007-08-21 | Motorola, Inc. | Decoder performance for block product codes |
US8281212B1 (en) * | 2007-03-30 | 2012-10-02 | Link—A—Media Devices Corporation | Iterative ECC decoder with out of order completion |
WO2010039869A1 (en) * | 2008-09-30 | 2010-04-08 | Lsi Corporation | Methods and apparatus for soft data generation for memory devices using reference cells |
KR101529880B1 (ko) | 2008-10-31 | 2015-06-19 | 삼성전자주식회사 | 에러 추정 방법 및 정정 방법 |
US9086984B2 (en) * | 2011-01-04 | 2015-07-21 | Seagate Technology Llc | Detection and decoding in flash memories with selective binary and non-binary decoding |
US8843807B1 (en) * | 2011-04-15 | 2014-09-23 | Xilinx, Inc. | Circular pipeline processing system |
JP2013070289A (ja) | 2011-09-23 | 2013-04-18 | Nec Corp | 誤り訂正方法、誤り訂正装置、送信機、受信機及び誤り訂正プログラム |
JP2015032885A (ja) | 2013-07-31 | 2015-02-16 | 三菱電機株式会社 | 符号化装置及び復号装置 |
US9798613B2 (en) * | 2013-12-27 | 2017-10-24 | Toshiba Memory Corporation | Controller of nonvolatile semiconductor memory |
US9509342B2 (en) | 2014-06-02 | 2016-11-29 | Sandisk Technologies Llc | Error correcting code decoder |
US10536172B2 (en) | 2016-03-04 | 2020-01-14 | Western Digital Technologies, Inc. | ECC and raid-type decoding |
DE102017110389B4 (de) * | 2016-05-13 | 2020-02-13 | Hyperstone Gmbh | Verfahren und Decoder zur Softinput Decodierung von verallgemeinerten verketteten Codes |
JP2018045387A (ja) * | 2016-09-13 | 2018-03-22 | 東芝メモリ株式会社 | メモリシステム |
JP7066584B2 (ja) | 2018-09-18 | 2022-05-13 | キオクシア株式会社 | メモリシステム |
-
2020
- 2020-12-07 KR KR1020200169841A patent/KR20220080589A/ko active Search and Examination
-
2021
- 2021-09-17 US US17/478,002 patent/US11664826B2/en active Active
- 2021-11-12 CN CN202111344231.0A patent/CN114596910A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US11664826B2 (en) | 2023-05-30 |
US20220182073A1 (en) | 2022-06-09 |
CN114596910A (zh) | 2022-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8464134B2 (en) | Method and apparatus for error correction according to erase counts of a solid-state memory | |
US8830743B2 (en) | Method of operating memory controller, memory controller, memory device and memory system | |
US8175012B2 (en) | Decoding/encoding method for booting from a NAND flash and system thereof | |
US20170148511A1 (en) | Memory access module for performing memory access management | |
US8386868B2 (en) | Using programming-time information to support error correction | |
US20160350179A1 (en) | Decoding method, memory storage device and memory control circuit unit | |
CN106297883B (zh) | 解码方法、存储器存储装置及存储器控制电路单元 | |
US11664826B2 (en) | Error correction code engine performing ECC decoding, operation method thereof, and storage device including ECC engine | |
KR102628009B1 (ko) | 부분 페이지 압축을 위한 메모리 시스템 | |
US10447314B2 (en) | Decoding method, memory storage device and memory control circuit unit | |
US11740957B2 (en) | Prioritization of error control operations at a memory sub-system | |
CN109901784B (zh) | 数据存取方法、存储器控制电路单元以及存储器储存装置 | |
US11281533B2 (en) | Hybrid iterative error correcting and redundancy decoding operations for memory sub-systems | |
US11190217B2 (en) | Data writing method, memory controlling circuit unit and memory storage device | |
JP7177338B2 (ja) | メモリコントローラ装置、メモリコントローラ装置を有するメモリ装置及びメモリコントロール方法 | |
CN111326186B (zh) | 存储器控制方法、存储器存储装置及存储器控制电路单元 | |
CN107301873B (zh) | 译码方法、存储器储存装置及存储器控制电路单元 | |
CN107590018B (zh) | 译码方法、存储器控制电路单元及存储器存储装置 | |
TW202125259A (zh) | 資料讀取方法、儲存控制器與儲存裝置 | |
US11430538B1 (en) | Memory control method, memory storage device, and memory control circuit unit | |
CN116364163B (zh) | 一种基于nand闪存控制器的纠错方法及*** | |
US11675530B2 (en) | Memory controller, storage device and operating method of memory controller | |
CN111435604B (zh) | 解码方法、存储器控制电路单元以及存储器存储装置 | |
CN111863099B (zh) | 存储器控制方法、存储器存储装置及存储器控制电路单元 | |
TWI836877B (zh) | 讀取電壓校正方法、記憶體儲存裝置及記憶體控制電路單元 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination |