KR20210074425A - 에러를 정정하는 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법 - Google Patents

에러를 정정하는 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법 Download PDF

Info

Publication number
KR20210074425A
KR20210074425A KR1020190164302A KR20190164302A KR20210074425A KR 20210074425 A KR20210074425 A KR 20210074425A KR 1020190164302 A KR1020190164302 A KR 1020190164302A KR 20190164302 A KR20190164302 A KR 20190164302A KR 20210074425 A KR20210074425 A KR 20210074425A
Authority
KR
South Korea
Prior art keywords
level
data
decoder
level decoder
syndrome
Prior art date
Application number
KR1020190164302A
Other languages
English (en)
Inventor
곽희열
장재훈
손홍락
신동민
유근영
이강석
한현승
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020190164302A priority Critical patent/KR20210074425A/ko
Priority to US16/917,101 priority patent/US11184030B2/en
Priority to EP20212916.9A priority patent/EP3835960A3/en
Priority to CN202011457064.6A priority patent/CN112951313A/zh
Publication of KR20210074425A publication Critical patent/KR20210074425A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1111Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
    • H03M13/1117Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms using approximations for check node processing, e.g. an outgoing message is depending on the signs and the minimum over the magnitudes of all incoming messages according to the min-sum rule
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic 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/1575Direct 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding 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/1012Adding 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3037Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5642Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1128Judging correct decoding and iterative stopping criteria other than syndrome check and upper limit for decoding iterations
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1148Structural properties of the code parity-check or generator matrix
    • H03M13/116Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
    • H03M13/1168Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices wherein the sub-matrices have column and row weights greater than one, e.g. multi-diagonal sub-matrices
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/159Remainder calculation, e.g. for encoding and syndrome calculation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3707Adaptive decoding and hybrid decoding, e.g. decoding methods or techniques providing more than one decoding algorithm for one code
    • H03M13/3715Adaptation to the number of estimated errors or to the channel state
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • Mathematical Physics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Computing Systems (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

본 발명의 실시 예에 따른 하이 레벨 디코더 및 로우 레벨 디코더를 포함하는 스토리지 컨트롤러의 동작 방법은 불휘발성 메모리 장치로부터 리드한 초기 데이터를 디코딩 한 제1 데이터 및 제1 데이터의 에러 수준을 나타내는 제1 신드롬 가중치를 생성하는 단계, 제1 신드롬 가중치가 특정 값이면 제1 데이터를 호스트로 출력하는 단계, 제1 신드롬 가중치가 기준 값을 초과하면 제1 에러 정정 능력을 갖는 하이 레벨 디코더를 선택하여 제1 데이터를 디코딩 하는 단계, 및 제1 신드롬 가중치가 기준 값 이하이면 제1 에러 정정 능력보다 낮은 제2 에러 정정 능력을 갖는 로우 레벨 디코더를 선택하여 제1 데이터를 디코딩 하는 단계를 포함한다.

Description

에러를 정정하는 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법{STROAGE CONTROLLER FOR CORRECTING ERROR, STORAGE DEVICE HAVING THE SAME, AND OPERATING METHOD THEREOF}
본 발명은 반도체 메모리에 관한 것으로, 좀 더 상세하게는 에러를 정정하는 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법에 관한 것이다.
반도체 메모리는 데이터를 저장하는 쓰기 동작, 그리고 저장된 데이터를 읽는 읽기 동작을 지원한다. 반도체 메모리에 데이터를 쓰는 동안, 반도체 메모리에 데이터가 저장되어 있는 동안, 또는 반도체 메모리로부터 데이터를 읽는 동안, 에러가 발생할 수 있다. 이러한 에러는 별도의 에러 정정 수단을 통해서 정정될 수 있다.
반도체 메모리가 제조된 직후의 초반 시나리오에서, 낮은 수준의 에러가 발생할 수 있다. 낮은 수준의 에러를 빠른 속도로 처리하는 에러 처리 장치가 요구될 수 있다. 반도체 메모리를 반복적으로 사용한 이후의 후반 시나리오에서, 높은 수준의 에러가 발생할 수 있다. 높은 수준의 에러를 처리하기 위해서 에러 정정 능력이 높은 에러 처리 장치가 요구될 수 있다. 다만, 복수의 반도체 메모리들 각각에 대해서 두 가지 시나리오를 대비한 다수의 에러 처리 장치를 배치하면, 칩 면적이 증가하거나 특정 시나리오에서 처리율이 감소하는 문제가 있다.
본 발명은 상술된 기술적 문제점을 해결하기 위한 것으로, 본 발명의 실시 예에 따르면, 데이터의 에러 수준에 따라 선택된 에러 정정 장치가 에러를 정정하는 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법이 제공된다.
또한, 낮은 에러 정정 능력을 갖는 에러 정정 장치들을 조합하여 높은 에러 정정 능력을 갖는 에러 정정 장치처럼 에러를 정정하는 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법이 제공된다.
본 발명의 실시 예에 따른 하이 레벨 디코더 및 로우 레벨 디코더를 포함하는 스토리지 컨트롤러의 동작 방법은 불휘발성 메모리 장치로부터 리드한 초기 데이터를 디코딩 한 제1 데이터 및 상기 제1 데이터의 에러 수준을 나타내는 제1 신드롬 가중치를 생성하는 단계, 상기 제1 신드롬 가중치가 특정 값이면 상기 제1 데이터를 호스트로 출력하는 단계, 상기 제1 신드롬 가중치가 기준 값을 초과하면 제1 에러 정정 능력을 갖는 하이 레벨 디코더를 선택하여 상기 제1 데이터를 디코딩 하는 단계, 및 상기 제1 신드롬 가중치가 상기 기준 값 이하이면 상기 제1 에러 정정 능력보다 낮은 제2 에러 정정 능력을 갖는 로우 레벨 디코더를 선택하여 상기 제1 데이터를 디코딩 하는 단계를 포함한다.
본 발명의 실시 예에 따른 스토리지 컨트롤러는 초기 데이터를 저장하도록 구성된 불휘발성 메모리 장치와 연결된 디코더, 제1 에러 정정 능력을 갖는 하이 레벨 디코더, 및 상기 제1 에러 정정 능력보다 낮은 제2 에러 정정 능력을 갖는 로우 레벨 디코더를 포함하는 ECC(Error Correction Code) 코어 유닛, 및 상기 디코더로부터 제1 신드롬 가중치를 수신하고, 상기 제1 신드롬 가중치가 기준 값을 초과하면 상기 하이 레벨 디코더로 제1 데이터의 디코딩을 요청하는 요청 신호를 출력하고, 상기 제1 신드롬 가중치가 상기 기준 값 이하이면 상기 로우 레벨 디코더로 상기 요청 신호를 출력하도록 구성된 ECC 스케줄러를 포함하되, 상기 디코더는 상기 불휘발성 메모리 장치로부터 상기 초기 데이터를 리드하고, 상기 리드된 초기 데이터를 디코딩 한 상기 제1 데이터 및 상기 제1 데이터의 에러 수준을 나타내는 제1 신드롬 가중치를 생성하며, 상기 제1 신드롬 가중치가 특정 값이면 호스트로 상기 제1 데이터를 출력하고, 상기 제1 신드롬 가중치가 상기 특정 값이 아니면 상기 요청 신호를 수신한 상기 하이 레벨 디코더 또는 상기 로우 레벨 디코더로 상기 제1 데이터를 출력하도록 구성된다.
본 발명의 실시 예에 따른 스토리지 장치는 제1 에러 정정 능력을 갖고, 불휘발성 메모리 장치로부터 리드한 초기 데이터를 디코딩 한 제1 데이터 및 상기 제1 데이터의 에러 수준을 나타내는 제1 신드롬 가중치를 출력하도록 구성된 제1 레벨 디코더, 상기 제1 에러 정정 능력보다 높은 제2 에러 정정 능력을 갖는 제2 레벨 디코더, 상기 제2 에러 정정 능력보다 높은 제3 에러 정정 능력을 갖는 제3 레벨 디코더, 및 상기 제1 신드롬 가중치를 수신하고, 상기 제1 신드롬 가중치가 기준 값을 초과하면 상기 제3 레벨 디코더로 상기 제1 데이터의 디코딩을 요청하는 요청 신호를 출력하고, 상기 제1 신드롬 가중치가 상기 기준 값 이하이면 상기 제2 레벨 디코더로 상기 요청 신호를 출력하도록 구성된 ECC 스케줄러를 포함하되, 상기 제1 레벨 디코더는 상기 제1 신드롬 가중치가 특정 값이면 호스트로 상기 제1 데이터를 출력하고, 상기 제1 신드롬 가중치가 상기 특정 값이 아니면 상기 요청 신호를 수신한 제2 레벨 디코더 또는 제3 레벨 디코더로 상기 제1 데이터를 출력하도록 구성된다.
본 발명의 실시 예에 따르면, 복수의 반도체 메모리들이 서로 다른 에러 정정 능력을 갖는 복수의 에러 처리 장치들을 공유하여 적은 수의 에러 처리 장치들로 다양한 시나리오를 대비함으로써, 전체 칩 면적이 감소된 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법이 제공될 수 있다.
또한, 낮은 에러 정정 능력을 갖는 에러 정정 장치들을 조합하여 높은 에러 정정 능력을 갖는 에러 정정 장치처럼 활용함으로써 전체 칩 면접이 더 감소되고, 에러 처리 장치가 처리한 데이터를 기반으로 다음 에러 처리 연산을 수행함으로써 처리율이 향상된 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법이 제공될 수 있다.
도 1은 본 발명의 실시 예에 따른 스토리지 시스템을 보여주는 블록도이다.
도 2는 도 1의 스토리지 컨트롤러를 보여주는 블록도이다.
도 3은 도 1의 스토리지 장치를 보여주는 블록도이다.
도 4는 도 1의 스토리지 컨트롤러의 동작 방법을 예시적으로 보여주는 순서도이다.
도 5a는 도 4의 동작 방법이 수행되는 스토리지 장치를 예시적으로 구체화한 블록도이다.
도 5b는 도 4의 동작 방법이 수행되는 스토리지 장치를 예시적으로 구체화한 블록도이다.
도 6은 도 1의 스토리지 컨트롤러의 동작 방법을 예시적으로 보여주는 순서도이다.
도 7은 도 6의 동작 방법이 수행되는 스토리지 장치를 예시적으로 구체화한 블록도이다.
도 8a는 스토리지 장치에서의 데이터 흐름을 예시적으로 보여주는 블록도이다.
도 8b는 도 6의 동작 방법에 따른 스토리지 장치에서의 데이터 흐름을 예시적으로 보여주는 블록도이다.
도 9는 도 1의 스토리지 컨트롤러의 동작 방법을 예시적으로 보여주는 순서도이다.
도 10은 도 9의 동작 방법이 수행되는 스토리지 장치를 예시적으로 구체화한 블록도이다.
도 11은 도 1의 스토리지 컨트롤러의 동작 방법을 예시적으로 보여주는 순서도이다.
도 12는 도 11의 동작 방법이 수행되는 스토리지 장치를 예시적으로 구체화한 블록도이다.
도 13a는 도 12의 제1 레벨 디코더가 수행하는 패리티 체크 연산을 예시적으로 보여주는 도면이다.
도 13b는 도 13a의 패리티 체크 행렬을 예시적으로 보여주는 도면이다.
도 14는 도 12의 제1 레벨 코어 디코더를 예시적으로 보여주는 블록도이다.
도 15는 도 12의 제1 레벨 서브 디코더를 예시적으로 보여주는 블록도이다.
도 16은 도 12의 결합된 제1 레벨 디코더들을 예시적으로 보여주는 블록도이다.
도 17은 도 16의 결합된 디코더 메모리들이 처리하는 에지 값을 보여주는 도면이다.
도 18은 본 발명의 실시 예에 따른 ECC 코어 유닛이 출력하는 신드롬 가중치를 예시적으로 보여주는 그래프이다.
도 19는 본 발명의 실시 예에 따른 스토리지 장치를 예시적으로 보여주는 블록도이다.
이하에서, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다. 이하에서 사용되는 "부/유닛(unit)," "모듈(module)" 등과 같은 용어들은 본문에서 설명되는 다양한 기능들을 수행하도록 구성된 하드웨어, 소프트웨어, 또는 그것들의 조합의 형태로 구현될 수 있다.
도 1은 본 발명의 실시 예에 따른 스토리지 시스템을 보여주는 블록도이다. 도 1을 참조하면, 스토리지 시스템(100)은 호스트(110) 및 스토리지 장치(1000)를 포함할 수 있다. 예시적인 실시 예에서, 스토리지 시스템(100)은 개인용 컴퓨터, 노트북, 랩탑, 서버, 워크스테이션, 태블릿 PC, 스마트 폰, 디지털 카메라, 블랙박스 등과 같이 다양한 정보를 처리하도록 구성된 컴퓨팅 시스템일 수 있다.
호스트(110)는 스토리지 시스템(100)의 제반 동작을 제어할 수 있다. 예를 들어, 호스트(110)는 스토리지 장치(1000)에 데이터를 저장하거나 또는 스토리지 장치(1000)에 저장된 데이터를 읽을 수 있다. 스토리지 장치(1000)는 호스트(110)의 제어에 따라 데이터를 저장하거나, 저장된 데이터를 호스트(110)로 전송할 수 있다. 스토리지 장치(1000)는 스토리지 컨트롤러(1100) 및 불휘발성 메모리 장치(1200)를 포함할 수 있다.
스토리지 컨트롤러(1100)는 불휘발성 메모리 장치(1200)에 데이터를 저장하거나 또는 불휘발성 메모리 장치(1200)에 저장된 데이터를 읽을 수 있다. 불휘발성 메모리 장치(1200)는 스토리지 컨트롤러(1100)의 제어에 따라 동작할 수 있다.
예시적인 실시 예에서, 불휘발성 메모리 장치(1200)는 데이터를 각각 저장하는 복수의 낸드 플래시 메모리들(제1 NAND 내지 제N NAND)을 포함할 수 있다. 즉, 스토리지 장치(1000)는 복수의 낸드 채널들을 갖는 저장 장치일 수 있다. 다만, 본 발명의 범위가 이에 한정되는 것은 아니며, 불휘발성 메모리 장치(1200)는 PRAM, MRAM, RRAM, FRAM 등과 같이 전원 공급이 차단되어도 저장하고 있던 데이터를 유지하는 저장 장치들 중 하나일 수 있다.
스토리지 컨트롤러(1100)는 ECC 스케줄러(1110) 및 ECC 코어 유닛(1120)을 포함할 수 있다. ECC 스케줄러(1110)는 불휘발성 메모리 장치(1200)로부터 리드된 데이터의 에러 수준에 따라 리드된 데이터의 에러를 정정할 에러 처리 장치를 선택할 수 있다. 예를 들어, 에러 처리 장치는 불휘발성 메모리 장치(1200)로부터 리드된 데이터의 에러를 정정하는 디코더일 수 있다. 에러 수준은 리드된 데이터에서 에러 검출 규칙을 만족하지 않는 에러 비트의 수가 많은 정도를 의미할 수 있다.
ECC 코어 유닛(1120)은 서로 다른 에러 정정 능력을 갖는 복수의 에러 처리 장치들을 포함할 수 있다. 에러 정정 능력은 리드된 데이터에서 에러 처리 장치가 정정할 수 있는 에러 비트의 수를 의미할 수 있다.
예시적인 실시 예에서, ECC 코어 유닛(1120)에 포함된 에러 처리 장치는 일정 수준의 에러 정정 능력을 가질 수 있다. 예를 들어, 불휘발성 메모리 장치(1200)로부터 리드된 데이터의 에러가 에러 처리 장치의 에러 정정 능력을 초과하는 경우, 불휘발성 메모리 장치(1200)로부터 리드된 데이터의 에러는 정정되지 않을 수 있다.
예시적인 실시 예에서, ECC 코어 유닛(1120)은 하이 레벨 디코더 및 로우 레벨 디코더를 포함할 수 있다. 예를 들어, 하이 레벨 디코더는 에러 정정 능력이 높으나, 에러 정정 속도가 느리고 하드웨어의 크기가 큰 에러 처리 장치일 수 있다. 로우 레벨 디코더는 에러 정정 속도가 빠르고 하드웨어의 크기가 작지만, 에러 정정 능력이 낮은 에러 처리 장치일 수 있다.
예시적인 실시 예에서, 반도체 메모리가 제조된 직후의 초반 시나리오에서 주로 발생하는 에러는 에러 수준이 낮은 에러일 수 있다. 반도체 메모리를 반복적으로 사용한 이후의 후반 시나리오에서 주로 발생하는 에러는 에러 수준이 높은 에러일 수 있다.
종래에는 불휘발성 메모리 장치에 포함된 낸드 플래시 메모리들 각각에 할당된 로우 레벨 디코더 및 하이 레벨 디코더를 배치하였다. 이에 따라, 스토리지 장치의 칩 면적이 증가하는 문제가 있었다.
본 발명의 실시 예에 따르면, 스토리지 장치(1000)는 ECC 코어 유닛(1120)에 포함된 에러 처리 장치들 각각이 불휘발성 메모리 장치(1200)에 포함된 복수의 낸드 플래시 메모리들(제1 NAND 내지 제N NAND) 모두에 접근이 가능한 풀-쉐어드(full-shared) 구조로 설계될 수 있다. 낸드 플래시 메모리들(제1 NAND 내지 제N NAND)이 에러 처리 장치를 공유함으로써, 일부 에러 처리 장치들을 생략할 수 있다. 따라서, 스토리지 장치(1000)의 칩 면적이 감소될 수 있다.
도 2는 도 1의 스토리지 컨트롤러를 보여주는 블록도이다. 도 1 및 도 2를 참조하면, 스토리지 컨트롤러(1100)는 ECC 스케줄러(1110), ECC 코어 유닛(1120), 프로세서(1130), SRAM(1140), ROM(1150), 불휘발성 메모리 인터페이스 회로(1160), 및 호스트 인터페이스 회로(1170)를 포함할 수 있다.
ECC 스케줄러(1110)는 ECC 코어 유닛(1120)에 포함된 에러 처리 장치들 중 에러를 정정할 에러 처리 장치를 선택할 수 있다. ECC 코어 유닛(1120)은 복수의 에러 처리 장치들을 포함할 수 있다. ECC 코어 유닛(1120)에 포함된 에러 처리 장치들의 구성과 ECC 스케줄러(1110)가 에러 처리 장치를 선택하는 방법은 이하의 도면들을 참조하여 더욱 상세하게 설명된다.
프로세서(1130)는 스토리지 컨트롤러(1100)의 제반 동작을 제어할 수 있다. SRAM(1140)은 스토리지 컨트롤러(1100)의 버퍼 메모리, 캐시 메모리, 또는 동작 메모리로 사용될 수 있다. ROM(1150)은 스토리지 컨트롤러(1100)가 동작하는데 필요한 다양한 정보를 펌웨어 형태로 저장할 수 있다.
예시적인 실시 예에서, ECC 스케줄러(1110) 및 ECC 코어 유닛(1120)은 소프트웨어 형태, 하드웨어 형태, 또는 그것들의 조합의 형태로 제공될 수 있다. 예를 들어, ROM(1150)은 ECC 스케줄러(1110)의 동작 방법을 저장할 수 있다. SRAM(1140)은 ECC 코어 유닛(1120)에 포함된 에러 처리 장치가 출력하는 데이터를 저장할 수 있다. 프로세서(1130)는 ECC 스케줄러(1110) 및 ECC 코어 유닛(1120)을 제어하는 명령을 출력할 수 있다.
스토리지 컨트롤러(1100)는 불휘발성 메모리 인터페이스 회로(1160)를 통해서 불휘발성 메모리 장치(1200)와 통신할 수 있다. 예시적인 실시 예에서, 불휘발성 메모리 인터페이스 회로(1160)는 낸드 인터페이스를 기반으로 구현될 수 있다.
스토리지 컨트롤러(1100)는 호스트 인터페이스 회로(1170)를 통해서 호스트(110)와 통신할 수 있다. 예시적인 실시 예에서, 호스트 인터페이스 회로(1170)는 SATA(Serial ATA), PCIe(Peripheral Component Interconnect Express), SAS(Serial Attached SCSI), NVMe(Nonvolatile Memory express), UFS(Universal Flash Storage) 등과 같은 다양한 인터페이스들 중 적어도 하나를 기반으로 구현될 수 있다.
도 3은 도 1의 스토리지 장치를 보여주는 블록도이다. 도 1 및 도 3을 참조하면, ECC 스케줄러(1110), ECC 코어 유닛(1120), SRAM(1140), 및 불휘발성 메모리 장치(1200)가 예시적으로 도시된다.
ECC 스케줄러(1110)는 ECC 코어 유닛(1120) 내에서 디코더를 선택하고, 선택된 디코더로 디코딩을 요청하는 요청 신호(RQ)를 출력할 수 있다. ECC 스케줄러(1110)는 디코딩을 수행한 ECC 코어 유닛(1120)으로부터 디코디드 데이터(DATAd)의 에러 수준을 나타내는 신드롬 가중치(SW)를 수신할 수 있다.
예시적인 실시 예에서, ECC 스케줄러(1110)는 초기 데이터(DATAi)의 디코딩을 요청하는 요청 신호(RQ)를 출력할 수 있다. 초기 데이터(DATAi)는 불휘발성 메모리 장치(1200)에 저장된 디코딩이 수행되지 않은 데이터일 수 있다. 초기 데이터(DATAi)의 디코딩을 수행할 디코더는 신드롬 가중치(SW)와 무관하게 제1 레벨 ECC 코어 유닛(1121)에 포함된 제1 레벨 디코더로 선택될 수 있다.
예시적인 실시 예에서, ECC 스케줄러(1110)는 수신된 신드롬 가중치(SW)를 기반으로 디코디드 데이터(DATAd)의 에러 수준에 대응하는 에러 정정 능력을 갖는 디코더를 선택할 수 있다. 예를 들어, ECC 스케줄러(1110)는 제2 레벨의 에러 수준을 나타나낸 신드롬 가중치(SW)를 수신할 수 있다. ECC 스케줄러(1110)는 제2 레벨 ECC 코어 유닛(1122)에 포함된 제2 레벨 디코더를 선택하고, 선택된 제2 레벨 디코더로 디코디드 데이터(DATAd)의 추가 디코딩을 요청하는 요청 신호(RQ)를 출력할 수 있다.
ECC 코어 유닛(1120)은 ECC 스케줄러(1110)로부터 요청 신호(RQ)를 수신할 수 있다. ECC 코어 유닛(1120)은 수신된 요청 신호(RQ)를 기반으로 SRAM(1140)에서 버퍼 데이터(DATAb)를 리드할 수 있다. ECC 코어 유닛(1120)은 리드된 버퍼 데이터(DATAb)를 디코딩 한 디코디드 데이터(DATAd)를 SRAM(1140)으로 출력할 수 있다. ECC 코어 유닛(1120)은 디코디드 데이터(DATAd)의 에러 수준을 나타내는 신드롬 가중치(SW)를 ECC 스케줄러(1110)로 출력할 수 있다.
예시적인 실시 예에서, ECC 코어 유닛(1120)은 제1 내지 제3 레벨 ECC 코어 유닛들(1121~1123)을 포함할 수 있다. 제1 레벨 ECC 코어 유닛(1121)은 N개의 제1 레벨 디코더들을 포함할 수 있다. 제2 레벨 ECC 코어 유닛(1122)은 M개의 제2 레벨 디코더들을 포함할 수 있다. 제3 레벨 ECC 코어 유닛(1123)은 K개의 제3 레벨 디코더들을 포함할 수 있다. 이 때, N은 M보다 크고, M은 K보다 클 수 있다.
제1 레벨 디코더는 제2 레벨 디코더보다 크기가 작고 연산 속도가 빠르지만 에러 정정 능력이 낮을 수 있다. 제2 레벨 디코더는 제3 레벨 디코더보다 크기가 작고 연산 속도가 빠르지만 에러 정정 능력이 낮을 수 있다.
예시적인 실시 예에서, ECC 코어 유닛(1120)은 도 3에 도시된 것과 달리, 불휘발성 메모리(1200)로부터 초기 데이터(DATAi)를 직접 수신할 수 있다. ECC 코어 유닛(1120)은 초기 데이터(DATAi)를 디코딩 한 디코디드 데이터(DATAd)를 SRAM(1140)으로 출력할 수 있다.
불휘발성 메모리 장치(1200)는 초기 데이터(DATAi)를 저장할 수 있다. 초기 데이터(DATAi)는 음악, 이미지, 및 영상 등과 같은 사용자 데이터의 일부를 포함할 수 있다. 불휘발성 메모리 장치(1200)는 호스트(110)의 제어에 따라 초기 데이터(DATAi)를 SRAM(1140)으로 출력할 수 있다.
SRAM(1140)은 불휘발성 메모리 장치(1200)로부터 초기 데이터(DATAi)를 수신할 수 있다. SRAM(1140)은 수신된 초기 데이터(DATAi)를 버퍼 데이터(DATAb)로서 저장할 수 있다. SRAM(1140)은 버퍼 데이터(DATAb)를 ECC 코어 유닛(1120)으로 출력할 수 있다. SRAM(1140)은 ECC 코어 유닛(1120)으로부터 디코디드 데이터(DATAd)를 수신할 수 있다. SRAM(1140)은 수신된 디코디드 데이터(DATAd)를 버퍼 데이터(DATAb)로서 저장할 수 있다. 즉, SRAM(1140)은 버퍼 메모리로서 동작할 수 있다.
도 4는 도 1의 스토리지 컨트롤러의 동작 방법을 예시적으로 보여주는 순서도이다. 도 1 및 도 4를 참조하면, 본 발명의 실시 예에 따른 스토리지 컨트롤러의 동작 방법이 예시적으로 도시된다.
S110 단계에서, 스토리지 컨트롤러(1100)는 불휘발성 메모리 장치(1200)에 저장된 초기 데이터(DATAi)를 리드할 수 있다. 초기 데이터(DATAi)는 음악, 이미지, 및 영상 등과 같은 사용자 데이터의 일부가 에러를 검출하기 위한 에러 검출 규칙을 갖는 패리티 검사 비트를 기반으로 인코딩 된 데이터일 수 있다.
예시적인 실시 예에서, 스토리지 컨트롤러(1100)는 리드된 초기 데이터(DATAi)를 기반으로 초기 데이터(DATAi)의 에러 수준을 나타내는 초기 신드롬 가중치(SWi)를 생성할 수 있다. 스토리지 컨트롤러(1100)는 생성된 초기 신드롬 가중치(SWi)를 기반으로 에러 수준에 따른 디코더를 선택하는 기준이 되는 기준 값(REF)을 결정할 수 있다. 또는, 기준 값(REF)은 사용자가 디코딩 수행 전 입력한 값일 수 있다.
S111 단계에서, 스토리지 컨트롤러(1100)는 불휘발성 메모리 장치(1200)로부터 리드한 초기 데이터(DATAi)를 디코딩 할 수 있다. 스토리지 컨트롤러(1100)는 제1 데이터(DATA1) 및 제1 신드롬 가중치(SW1)를 생성할 수 있다. 제1 데이터(DATA1)는 초기 데이터(DATAi)를 디코딩 한 데이터일 수 있다. 제1 신드롬 가중치(SW1)는 제1 데이터(DATA1)의 에러 수준을 나타낼 수 있다.
S112 단계에서, 제1 신드롬 가중치(SW1)가 특정 값인지 여부를 판단함으로써 제1 데이터(DATA1)의 에러 존재 여부를 판단할 수 있다. 예를 들어, S111 단계 이후 제1 신드롬 가중치(SW1)의 값이 '0'인지 여부를 판단하는 단계가 수행될 수 있다. 제1 신드롬 가중치(SW1)의 값이 '0'이면 제1 데이터(DATA1)에 에러가 없을 수 있다. 이 때, 스토리지 컨트롤러(1100)는 제1 데이터(DATA1)를 호스트(110)로 출력하고 동작을 마칠 수 있다. 제1 신드롬 가중치(SW1)의 값이 '0'이 아니면 스토리지 컨트롤러(1100)는 S120 단계를 수행할 수 있다.
S120 단계에서, 스토리지 컨트롤러(1100)는 초기 데이터(DATAi)를 제1 데이터(DATA1)로 업데이트할 수 있다. 예를 들어, 스토리지 컨트롤러(1100)는 S110 단계에서 리드한 초기 데이터(DATAi)를 저장할 수 있다. 스토리지 컨트롤러(1100)는 저장된 초기 데이터(DATAi)를 제1 데이터(DATA1)로 오버라이트 할 수 있다.
S130 단계에서, 스토리지 컨트롤러(1100)는 제1 신드롬 가중치(SW1)와 기준 값(REF)을 비교할 수 있다. 제1 신드롬 가중치(SW1)가 기준 값(REF)을 초과하면 S131 단계를 수행할 수 있다. 제1 신드롬 가중치(SW1)가 기준 값(REF) 이하이면 S132 단계를 수행할 수 있다.
S131 단계에서, 스토리지 컨트롤러(1100)는 하이 레벨 디코더를 선택할 수 있다. 스토리지 컨트롤러(1100)는 선택된 하이 레벨 디코더에게 제1 데이터(DATA1)의 디코딩을 요청하는 요청 신호(RQ)를 출력할 수 있다. 이 때, 하이 레벨 디코더는 에러 정정 능력이 높은 에러 처리 장치일 수 있다.
S132 단계에서, 스토리지 컨트롤러(1100)는 로우 레벨 디코더를 선택할 수 있다. 스토리지 컨트롤러(1100)는 선택된 로우 레벨 디코더에게 제1 데이터(DATA1)의 디코딩을 요청하는 요청 신호(RQ)를 출력할 수 있다. 이 때, 로우 레벨 디코더는 에러 정정 능력이 낮은 에러 처리 장치일 수 있다.
S140 단계에서, 스토리지 컨트롤러(1100)에 포함된 디코더는 요청 신호(RQ)에 응답하여 스토리지 컨트롤러(1100)에 저장된 제1 데이터(DATA1)를 리드할 수 있다. 이 때, 디코더는 S131 단계에서 요청 신호(RQ)를 수신한 하이 레벨 디코더 또는 S132 단계에서 요청 신호(RQ)를 수신한 로우 레벨 디코더일 수 있다.
S141 단계에서, 스토리지 컨트롤러(1100)는 요청 신호(RQ)를 수신한 디코더를 통해서 제1 데이터(DATA1)를 디코딩할 수 있다. 스토리지 컨트롤러(1100)는 제2 데이터(DATA2) 및 제2 신드롬 가중치(SW2)를 생성할 수 있다. 제2 데이터(DATA2)는 제1 데이터(DATA1)를 디코딩 한 데이터일 수 있다. 제2 신드롬 가중치(SW2)는 제2 데이터(DATA2)의 에러 수준을 나타낼 수 있다.
도 5a는 도 4의 동작 방법이 수행되는 스토리지 장치를 예시적으로 구체화한 블록도이다. 도 5a를 참조하면, 제1 신드롬 가중치(SW1)가 기준 값을 초과하는 경우 하이 레벨 디코더를 선택하여 제1 데이터(DATA1)를 디코딩 하는 스토리지 장치가 예시적으로 도시된다.
불휘발성 메모리 장치(1200)는 호스트로부터 수신된 읽기 명령에 응답하여 저장된 초기 데이터(DATAi)를 SRAM(1140)으로 출력할 수 있다. 예시적인 실시 예에서, 불휘발성 메모리 장치(1200)는 초기 데이터(DATAi)를 제1 레벨 디코더(1121a)로 직접 출력할 수 있다.
예시적인 실시 예에서, 스토리지 장치는 초기 데이터(DATAi)를 리드하고 초기 데이터(DATAi)의 에러 수준을 나타내는 초기 신드롬 가중치(SWi)를 생성하는 에러 추정 회로(error estimate circuit; 미도시)를 더 포함할 수 있다. 에러 추정 회로는 초기 신드롬 가중치(SWi)를 기반으로 기준 값(REF)을 결정하고, 설정된 기준 값(REF)을 ECC 스케줄러(1110)로 출력할 수 있다.
SRAM(1140)은 불휘발성 메모리 장치(1200)로부터 초기 데이터(DATAi)를 수신할 수 있다. SRAM(1140)은 수신된 초기 데이터(DATAi)를 저장할 수 있다. SRAM(1140)은 초기 데이터(DATAi)를 제1 레벨 디코더(1121a)로 출력할 수 있다. 즉, SRAM(1140)은 스토리지 컨트롤러의 디코딩에 사용되는 임시 데이터를 저장하는 버퍼 메모리일 수 있다.
제1 레벨 디코더(1121a)는 SRAM(1140)으로부터 초기 데이터(DATAi)를 리드할 수 있다. 제1 레벨 디코더(1121a)는 리드된 초기 데이터(DATAi)를 기반으로 제1 데이터(DATA1) 및 제1 신드롬 가중치(SW1)를 생성할 수 있다. 제1 레벨 디코더(1121a)는 제1 데이터(DATA1)를 SRAM(1140)으로 출력할 수 있다. 제1 레벨 디코더(1121a)는 제1 신드롬 가중치(SW1)를 ECC 스케줄러(1110)로 출력할 수 있다. 제1 레벨 디코더(1121a)는 제1 신드롬 가중치(SW1)의 값이 특정 값이면 제1 데이터(DATA1)를 호스트로 출력하고 동작을 종료할 수 있다. 제1 레벨 디코더(1121a)는 도 3의 제1 레벨 ECC 코어 유닛(1121)에 포함된 제1 레벨 디코더들 중 하나일 수 있다.
ECC 스케줄러(1110)는 제1 레벨 디코더(1121a)로부터 제1 신드롬 가중치(SW1)를 수신할 수 있다. ECC 스케줄러(1110)는 수신된 제1 신드롬 가중치(SW1)와 기준 값(REF)을 비교할 수 있다. ECC 스케줄러(1110)는 제1 신드롬 가중치(SW1)가 기준 값(REF)을 초과하면 하이 레벨 디코더를 선택할 수 있다. ECC 스케줄러(1110)는 선택된 하이 레벨 디코더로 제1 데이터(DATA1)의 디코딩을 요청하는 요청 신호(RQ)를 출력할 수 있다.
제3 레벨 디코더(1123a)는 ECC 스케줄러(1110)로부터 요청 신호(RQ)를 수신할 수 있다. 제3 레벨 디코더(1123a)는 수신된 요청 신호(RQ)를 기반으로 SRAM(1140)으로부터 제1 데이터(DATA1)를 리드할 수 있다. 제3 레벨 디코더(1123a)는 리드된 제1 데이터(DATA1)를 기반으로 제2 데이터(DATA2) 및 제2 신드롬 가중치(SW2)를 생성할 수 있다.
도 5b는 도 4의 동작 방법이 수행되는 스토리지 장치를 예시적으로 구체화한 블록도이다. 도 5b를 참조하면, 제1 신드롬 가중치(SW1)가 기준 값 이하인 경우 로우 레벨 디코더를 선택하여 제1 데이터(DATA1)를 디코딩 하는 스토리지 장치가 예시적으로 도시된다. 불휘발성 메모리 장치(1200), SRAM(1140), 및 제1 레벨 디코더(1121a)의 특징은 도 5a에서 설명된 것과 유사하므로, 이에 대한 상세한 설명은 생략된다.
ECC 스케줄러(1110)는 제1 레벨 디코더(1121a)로부터 제1 신드롬 가중치(SW1)를 수신할 수 있다. ECC 스케줄러(1110)는 수신된 제1 신드롬 가중치(SW1)와 기준 값(REF)을 비교할 수 있다. ECC 스케줄러(1110)는 제1 신드롬 가중치(SW1)가 기준 값(REF) 이하이면 로우 레벨 디코더를 선택할 수 있다. ECC 스케줄러(1110)는 선택된 로우 레벨 디코더로 제1 데이터(DATA1)의 디코딩을 요청하는 요청 신호(RQ)를 출력할 수 있다.
예를 들어, 로우 레벨 디코더는 제2 레벨 디코더(1122a)일 수 있다. 제2 레벨 디코더(1122a)는 도 5a의 제3 레벨 디코더(1123a)보다 에러 정정 능력이 낮은 에러 처리 장치일 수 있다. 제2 레벨 디코더(1122a)는 도 3의 제2 레벨 ECC 코어 유닛(1122)에 포함된 제2 레벨 디코더들 중 하나일 수 있다.
제2 레벨 디코더(1122a)는 ECC 스케줄러(1110)로부터 요청 신호(RQ)를 수신할 수 있다. 제2 레벨 디코더(1122a)는 수신된 요청 신호(RQ)를 기반으로 SRAM(1140)으로부터 제1 데이터(DATA1)를 리드할 수 있다. 제2 레벨 디코더(1122a)는 리드된 제1 데이터(DATA1)를 기반으로 제2 데이터(DATA2) 및 제2 신드롬 가중치(SW2)를 생성할 수 있다. 즉, 제2 레벨 디코더(1122a)는 에러 수준이 기준 값 이하인 제1 데이터(DATA1)의 에러를 정정하는 에러 처리 장치일 수 있다.
도 6은 도 1의 스토리지 컨트롤러의 동작 방법을 예시적으로 보여주는 순서도이다. 도 1 및 도 6을 참조하면, 본 발명의 실시 예에 따른 스토리지 컨트롤러의 동작 방법이 예시적으로 도시된다. 도 6의 순서도에서 S210, S211, S220, S240, 및 S241 단계는 도 4의 S110, S111, S120, S140, 및 S141 단계와 유사하므로 이에 대한 상세한 설명은 생략된다.
S230 단계에서, 스토리지 컨트롤러(1100)는 제1 신드롬 가중치(SW1)와 기준 값(REF)을 비교할 수 있다. 스토리지 컨트롤러(1100)는 제1 신드롬 가중치(SW1)가 기준 값을 초과하면 하이 레벨 디코더로 제1 데이터(DATA1)의 디코딩을 요청하는 요청 신호(RQ)를 출력할 수 있다. 스토리지 컨트롤러(1100)는 제1 신드롬 가중치(SW1)가 기준 값 이하이면 로우 레벨 디코더로 제1 데이터(DATA1)의 디코딩을 요청하는 요청 신호(RQ)를 출력할 수 있다. 즉, S230 단계에서 스토리지 컨트롤러(1100)는 도 4의 S130, S131, 및 S132 단계의 동작과 유사한 동작을 수행할 수 있다.
S250 단계에서, 스토리지 컨트롤러(1100)는 제2 신드롬 가중치(SW2)의 값이 특정 값인지 여부를 판단함으로써 제2 데이터(DATA2)의 에러 존재 여부를 판단할 수 있다. 예를 들어, 스토리지 컨트롤러(1100)는 제2 신드롬 가중치(SW2)의 값이 '0'인지 여부를 판단할 수 있다. 제2 신드롬 가중치(SW2)의 값이 '0'이면 제2 데이터(DATA2)에 에러가 없을 수 있다. 제2 신드롬 가중치(SW2)의 값이 '0'이면 스토리지 컨트롤러(1100)는 제2 데이터(DATA2)를 호스트(110)로 출력하고 동작을 마칠 수 있다. 제2 신드롬 가중치(SW2)의 값이 '0'이 아니면 스토리지 컨트롤러(1100)는 S251 단계를 수행할 수 있다.
S251 단계에서, 스토리지 컨트롤러(1100)는 제2 신드롬 가중치(SW2)와 제1 신드롬 가중치(SW1)를 비교할 수 있다. 제2 신드롬 가중치(SW2)가 제1 신드롬 가중치(SW1)보다 작으면 S252 단계를 수행할 수 있다. 제2 신드롬 가중치(SW2)가 제1 신드롬 가중치(SW1)보다 크거나 같으면 S253 단계를 수행할 수 있다.
S252 단계에서, 스토리지 컨트롤러(1100)는 제1 데이터(DATA1)를 제2 데이터(DATA2)로 업데이트 할 수 있다. 즉, 스토리지 컨트롤러(1100)는 제1 데이터(DATA1)보다 에러 수준이 낮은 제2 데이터(DATA2)를 저장할 수 있다.
S253 단계에서, 스토리지 컨트롤러(1100)는 제1 신드롬 가중치(SW1)를 제2 신드롬 가중치(SW2)로 업데이트 할 수 있다. S253 단계는 S251 단계의 판단 결과와 무관하게 수행되는 단계일 수 있다. S253 단계 이후 디코더를 선택하고 디코딩을 요청하는 단계(S230)가 더 수행될 수 있다. 즉, 스토리지 컨트롤러(1100)의 동작 방법은 S241 단계에서 수행된 디코딩 결과를 기반으로 추가 디코딩을 수행할 디코더를 선택하는 단계를 포함할 수 있다.
도 7은 도 6의 동작 방법이 수행되는 스토리지 장치를 예시적으로 구체화한 블록도이다. 도 7을 참조하면, 제1 데이터(DATA1) 및 제1 데이터(DATA1)를 디코딩한 제2 데이터(DATA2) 중 에러 수준이 낮은 데이터를 저장하는 스토리지 장치가 예시적으로 도시된다. 불휘발성 메모리 장치(1200) 및 제1 레벨 디코더(1121a)의 특징은 도 5a에서 설명된 것과 유사하므로, 이에 대한 상세한 설명은 생략된다.
제2 레벨 디코더(1122a)는 ECC 스케줄러(1110)로부터 요청 신호(RQ)를 수신할 수 있다. 제2 레벨 디코더(1122a)는 요청 신호(RQ)를 기반으로 SRAM(1140)에 저장된 제1 데이터(DATA1)를 리드할 수 있다. 제2 레벨 디코더(1122a)는 제1 데이터(DATA1)의 에러 수준을 나타내는 제1 신드롬 가중치(SW1)를 계산할 수 있다. 제2 레벨 디코더(1122a)는 제1 데이터(DATA1)를 디코딩 한 제2 데이터(DATA2) 및 제2 데이터(DATA2)의 에러 수준을 나타내는 제2 신드롬 가중치(SW2)를 생성할 수 있다.
제2 레벨 디코더(1122a)는 제1 신드롬 가중치(SW1)와 제2 신드롬 가중치(SW2)를 비교할 수 있다. 제2 레벨 디코더(1122a)는 제2 신드롬 가중치(SW2)가 제1 신드롬 가중치(SW1)보다 작으면 SRAM(1140)으로 제2 데이터(DATA2)를 출력할 수 있다. 이 때, SRAM(1140)에 저장된 제1 데이터(DATA1)는 제2 데이터(DATA2)로 업데이트 될 수 있다.
제2 레벨 디코더(1122a)는 제2 신드롬 가중치(SW2)를 ECC 스케줄러(1110)로 출력할 수 있다. ECC 스케줄러(1110)는 수신된 제2 신드롬 가중치(SW2)를 기반으로 추가 디코딩을 수행할 디코더를 선택할 수 있다. ECC 스케줄러(1110)는 선택된 디코더로 추가 디코딩을 수행할 추가 요청 신호를 출력할 수 있다.
도 8a는 스토리지 장치에서의 데이터 흐름을 예시적으로 보여주는 블록도이다. 도 8a를 참조하면, 스토리지 장치에서의 데이터 흐름이 예시적으로 도시된다. 제1 낸드 플래시 메모리(1210)는 도 1의 불휘발성 메모리 장치(1200)에 포함된 복수의 낸드 플래시 메모리들(제1 NAND 내지 제N NAND) 중 하나일 수 있다. 제1 낸드 플래시 메모리(1210)는 초기 데이터(DATAi)를 저장할 수 있다. 호스트로부터 요청된 읽기 명령에 따라 제1 낸드 플래시 메모리(1210)는 초기 데이터(DATAi)를 출력할 수 있다.
ECC 코어 유닛(1120)은 제1 낸드 플래시 메모리(1210)와 연결될 수 있다. ECC 코어 유닛(1120)은 제1 내지 제3 레벨 디코더들(1121a, 1122a, 1123a)을 포함할 수 있다. 제3 레벨 디코더(1123a)는 제2 레벨 디코더(1122a)보다 에러 정정 능력이 높을 수 있다. 제2 레벨 디코더(1122a)는 제1 레벨 디코더(1121a)보다 에러 정정 능력이 높을 수 있다. ECC 코어 유닛(1120)은 제1 낸드 플래시 메모리(1210)로부터 수신된 초기 데이터(DATAi)를 디코딩 할 수 있다.
기존의 스토리지 장치에서는 불휘발성 메모리 장치에 포함된 낸드 플래시 메모리들 각각에 대해서 서로 다른 에러 정정 능력을 갖는 복수의 디코더(1121a~1123a)를 할당할 수 있다. 이 때, 제1 레벨 디코더(1121a)는 제1 낸드 플래시 메모리(1210)가 아닌 다른 낸드 플래시 메모리(예를 들어, 제2 낸드 플래시 메모리)와 연결되지 않는 디코더일 수 있다. 즉, 기존의 스토리지 장치는 불필요한 디코더들을 다수 포함하고 칩 전체의 면적이 증가하는 문제가 있었다.
도 8b는 도 6의 동작 방법에 따른 스토리지 장치에서의 데이터 흐름을 예시적으로 보여주는 블록도이다. 도 8b를 참조하면, 도 6의 동작 방법에 따른 스토리지 장치에서의 데이터 흐름이 예시적으로 도시된다.
제1 낸드 플래시 메모리(1210)는 초기 데이터(DATAi)를 출력할 수 있다. ECC 코어 유닛(1120)은 제1 레벨 디코더(1121a) 및 제3 레벨 디코더(1123a)를 포함할 수 있다. 제1 레벨 디코더(1121a)는 초기 데이터(DATAi)를 수신할 수 있다. 제1 레벨 디코더(1121a)는 수신된 초기 데이터(DATAi)를 디코딩 한 제1 데이터(DATA1)를 출력할 수 있다. 제3 레벨 디코더(1123a)는 제1 데이터(DATA1)를 수신할 수 있다. 제3 레벨 디코더(1123a)는 수신된 제1 데이터(DATA1)를 디코딩 할 수 있다.
이 때, ECC 코어 유닛(1120)에 포함된 디코더들 각각은 복수의 낸드 플래시 메모리들과 연결될 수 있다. 예를 들어, 제3 레벨 디코더(1123a)는 제1 낸드 플래시 메모리(1210)와 다른 제2 낸드 플래시 메모리로부터 출력된 데이터를 디코딩 할 수 있다.
상술된 바와 같이, 본 발명의 실시 예에 따르면, 낸드 플래시 메모리들은 디코더를 공유할 수 있다. 또한, 디코더는 다른 디코더가 디코딩 한 데이터를 수신하고 더 디코딩 할 수 있다. 이에 따라, 불필요한 디코더들을 생략하여 칩 면적이 감소되고, 다른 디코더가 디코딩 한 데이터를 활용함으로써 처리율이 향상된 스토리지 장치가 제공될 수 있다.
도 9는 도 1의 스토리지 컨트롤러의 동작 방법을 예시적으로 보여주는 순서도이다. 도 1 및 도 9를 참조하면, 본 발명의 실시 예에 따른 스토리지 컨트롤러의 동작 방법이 예시적으로 도시된다. 도 9의 순서도에서 S310 단계는 도 6의 S210 및 S211 단계를 합한 것과 유사하고, S340, S341, S350, S351, S352, 및 S353 단계는 도 6의 S240, S241, S250, S251, S252, 및 S253 단계와 유사하므로 이에 대한 상세한 설명은 생략된다.
S330 단계에서, 스토리지 컨트롤러(1100)는 제1 신드롬 가중치(SW1)를 기반으로 제1 데이터(DATA1)를 디코딩 할 디코더를 선택할 수 있다. 예시적인 실시 예에서, 스토리지 컨트롤러(1100)는 에러 정정 능력이 상이한 적어도 3개의 디코더들을 포함할 수 있다.
예를 들어, 스토리지 컨트롤러(1100)는 제1 레벨 디코더, 제2 레벨 디코더, 및 제3 레벨 디코더를 포함할 수 있다. 스토리지 컨트롤러(1100)는 제1 신드롬 가중치(SW1)가 제1 기준 값 이하이면 제1 레벨 디코더를 선택할 수 있다. 스토리지 컨트롤러(1100)는 제1 신드롬 가중치(SW1)가 제1 기준 값을 초과하고 제2 기준 값 이하이면 제2 레벨 디코더를 선택할 수 있다. 스토리지 컨트롤러(1100)는 제1 신드롬 가중치(SW1)가 제2 기준 값을 초과하면 제3 레벨 디코더를 선택할 수 있다.
S331 단계에서, 스토리지 컨트롤러(1100)는 S330 단계에서 선택된 디코더가 이용 가능한지 확인할 수 있다. 스토리지 컨트롤러(1100)는 선택된 디코더가 이용 가능하면 S333 단계를 수행할 수 있다. 스토리지 컨트롤러(1100)는 선택된 디코더가 이용 불가능하면 S332 단계를 수행할 수 있다.
S332 단계에서, 스토리지 컨트롤러(1100)는 S330 단계에서 선택된 디코더보다 에러 정정 능력이 높은 하이 레벨 디코더를 선택할 수 있다. 예시적인 실시 예에서, 에러 정정 능력이 높은 하이 레벨 디코더는 에러 정정 능력이 낮은 다른 디코더가 정정 가능한 에러를 정정할 수 있다.
예를 들어, 제1 데이터(DATA1)가 제2 레벨에 대응하는 에러를 갖는 경우, 제2 레벨 디코더는 제1 데이터(DATA1)의 에러를 정정할 수 있다. 제2 레벨 디코더보다 에러 정정 능력이 높은 제3 레벨 디코더는 제1 데이터(DATA1)의 에러를 정정할 수 있다. 이 때, 제3 레벨 디코더는 제2 레벨 디코더보다 처리 시간이 길 수 있다. 제3 레벨 디코더의 처리 시간은 이용 불가능한 제2 레벨 디코더의 이용 가능을 대기하는 시간보다 짧을 수 있다.
S333 단계에서, 선택된 디코더로 제1 데이터의 디코딩을 요청하는 요청 신호(RQ)를 출력할 수 있다. 이 때, 선택된 디코더는 S330 단계에서 선택된 디코더 또는 S332 단계에서 선택된 하이 레벨 디코더일 수 있다.
도 10은 도 9의 동작 방법이 수행되는 스토리지 장치를 예시적으로 구체화한 블록도이다. 도 10을 참조하면, 선택된 디코더가 이용 불가능한 경우 선택된 디코더보다 에러 정정 능력이 높은 다른 디코더를 선택하여 디코딩 하는 스토리지 장치가 예시적으로 도시된다. 불휘발성 메모리 장치(1200), SRAM(1140), 및 제1 레벨 디코더(1121a)의 특징은 도 7에서 설명된 것과 유사하므로, 이에 대한 상세한 설명은 생략된다.
ECC 스케줄러(1110)는 제1 레벨 디코더(1121a)로부터 제1 신드롬 가중치(SW1)를 수신할 수 있다. ECC 스케줄러(1110)는 수신된 제1 신드롬 가중치(SW1)를 기반으로 제2 레벨 디코더(1122a)를 선택할 수 있다. ECC 스케줄러(1110)는 제2 레벨 디코더(1122a)의 이용 가능 여부를 나타내는 이용 가능 정보(AV)를 포함할 수 있다. 예를 들어, ECC 스케줄러(1110)가 제2 레벨 디코더(1122a)로 다른 요청 신호를 출력하고 다른 신드롬 가중치를 수신하지 않으면, ECC 스케줄러(1110)는 제2 레벨 디코더(1122a)가 이용 불가능하다고 판단할 수 있다.
ECC 스케줄러(1110)는 이용 가능 정보(AV)를 기반으로 제2 레벨 디코더(1122a)가 이용 불가능하다고 판단할 수 있다. ECC 스케줄러(1110)는 제2 레벨 디코더(1122a)보다 에러 정정 능력이 높은 제3 레벨 디코더(1123a)를 선택할 수 있다. ECC 스케줄러(1110)는 제3 레벨 디코더(1123a)로 제1 데이터(DATA1)의 디코딩을 요청하는 요청 신호(RQ)를 출력할 수 있다.
제3 레벨 디코더(1123a)는 요청 신호(RQ)를 수신할 수 있다. 제3 레벨 디코더(1123a)는 제1 데이터(DATA1)를 디코딩 할 수 있다. 제3 레벨 디코더(1123a)는 제2 데이터(DATA2) 및 제2 신드롬 가중치(SW2)를 생성 및 출력할 수 있다. 이 때, 제3 레벨 디코더(1123a)는 도 7의 제2 레벨 디코더(1122a)보다 제1 데이터(DATA1)를 디코딩 하는 속도가 느릴 수 있다. 제3 레벨 디코더(1123a)가 제1 데이터(DATA1)를 디코딩 하는데 소요되는 시간은 이용 불가능한 제2 레벨 디코더(1122a)의 이용 가능을 대기하는 시간보다 짧을 수 있다.
도 11은 도 1의 스토리지 컨트롤러의 동작 방법을 예시적으로 보여주는 순서도이다. 도 1 및 도 11을 참조하면, 본 발명의 실시 예에 따른 스토리지 컨트롤러의 동작 방법이 예시적으로 도시된다. 도 11의 순서도에서 S410 단계는 도 6의 S210 및 S211 단계를 합한 것과 유사하고, S440, S441, S450, S451, S452, 및 S453 단계는 도 6의 S240, S241, S250, S251, S252 및 S253 단계와 유사하므로 이에 대한 상세한 설명은 생략된다.
S430 단계에서, 스토리지 컨트롤러(1100)는 제1 신드롬 가중치(SW1)를 기반으로 제1 데이터(DATA1)를 디코딩 할 디코더를 선택할 수 있다. S431 단계에서, 스토리지 컨트롤러(1100)는 S430 단계에서 선택된 디코더가 이용 가능한지 확인할 수 있다. 스토리지 컨트롤러(1100)는 선택된 디코더가 이용 가능하면 선택된 디코더로 요청 신호(RQ)를 출력하는 단계(S432)를 수행할 수 있다. 스토리지 컨트롤러(1100)는 선택된 디코더가 이용 불가능하면 S433 단계를 수행할 수 있다.
S433 단계에서, 스토리지 컨트롤러(1100)는 S430 단계에서 선택된 디코더보다 에러 정정 능력이 낮은 로우 레벨 디코더들을 선택할 수 있다. 예시적인 실시 예에서, 스토리지 컨트롤러(1100)는 하이 레벨 디코더 및 결합하여 하이 레벨 디코더처럼 동작하는 로우 레벨 디코더들을 포함할 수 있다.
S434 단계에서, 스토리지 컨트롤러(1100)는 선택된 로우 레벨 디코더들로 제1 데이터(DATA1)의 디코딩을 요청하는 요청 신호(RQ) 및 선택된 로우 레벨 디코더들을 결합하는 결합 신호(CB)를 출력할 수 있다.
S435 단계에서, 결합 신호(CB)를 수신한 로우 레벨 디코더들은 결합할 수 있다. 결합된 로우 레벨 디코더들은 서로 네트워크가 활성화됨으로써 하나의 하이 레벨 디코더처럼 동작할 수 있다.
예시적인 실시 예에서, 로우 레벨 디코더들을 선택하고 결합하는데 소요되는 시간은 이용 불가능한 선택된 디코더의 이용 가능을 대기하는 시간보다 짧을 수 있다.
S440 단계에서, 스토리지 컨트롤러(1100)에 포함된 디코더는 요청 신호(RQ)에 응답하여 스토리지 컨트롤러(1100)에 저장된 제1 데이터(DATA1)를 리드할 수 있다. 이 때, 디코더는 S430 단계에서 선택된 디코더 또는 S433 단계에서 선택되고 S435 단계에서 결합된 로우 레벨 디코더들일 수 있다.
도 12는 도 11의 동작 방법이 수행되는 스토리지 장치를 예시적으로 구체화한 블록도이다. 도 12를 참조하면, 선택된 디코더가 이용 불가능한 경우 선택된 디코더보다 에러 정정 능력이 낮은 다른 디코더들을 선택 및 결합하여 디코딩 하는 스토리지 장치가 예시적으로 도시된다. 불휘발성 메모리 장치(1200), SRAM(1140), 및 제1 레벨 디코더(1121a)의 특징은 도 7에서 설명된 것과 유사하므로, 이에 대한 상세한 설명은 생략된다.
ECC 스케줄러(1110)는 제1 레벨 디코더(1121a)로부터 제1 신드롬 가중치(SW1)를 수신할 수 있다. ECC 스케줄러(1110)는 수신된 제1 신드롬 가중치(SW1)를 기반으로 제2 레벨 디코더(1122a)를 선택할 수 있다. ECC 스케줄러(1110)는 제2 레벨 디코더(1122a)의 이용 가능 여부를 나타내는 이용 가능 정보(AV)를 포함할 수 있다.
ECC 스케줄러(1110)는 이용 가능 정보(AV)를 기반으로 제2 레벨 디코더(1122a)가 이용 불가능하다고 판단할 수 있다. ECC 스케줄러(1110)는 제2 레벨 디코더(1122a)보다 에러 정정 능력이 낮은 제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d)를 선택할 수 있다. ECC 스케줄러(1110)는 선택된 제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d)로 요청 신호(RQ) 및 결합 신호(CB)를 출력할 수 있다. 결합 신호(CB)는 제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d)의 결합을 요청하는 신호일 수 있다.
이 때, 제1 데이터(DATA1)의 에러는 제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d) 각각의 에러 정정 능력을 초과하는 에러일 수 있다. 제1 데이터(DATA1)의 에러는 제2 레벨 디코더(1122a)에 의해서 정정 가능할 수 있다.
제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d)는 수신된 결합 신호(CB)를 기반으로 결합할 수 있다. 결합된 제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d)는 SRAM(1140)으로부터 제1 데이터(DATA1)를 리드하고, 리드된 제1 데이터(DATA1)를 기반으로 제2 데이터(DATA2) 및 제2 신드롬 가중치(SW2)를 생성할 수 있다.
이 때, ECC 스케줄러(1110)가 이용 가능 정보(AV)를 기반으로 제2 레벨 디코더(1122a)의 이용 가능 여부를 판단하는 시간과 제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d)가 결합 신호(CB)를 기반으로 결합하는데 소요되는 시간의 합은 이용 불가능한 제2 레벨 디코더(1122a)의 이용 가능을 대기하는 시간보다 짧을 수 있다.
도 13a는 도 12의 제1 레벨 디코더가 수행하는 패리티 체크 연산을 예시적으로 보여주는 도면이다. 도 12 및 도 13a를 참조하면, 도 12의 제1 레벨 디코더(1121a)가 초기 데이터(DATAi)의 에러를 체크하는 방법이 예시적으로 도시된다.
예시적인 실시 예에서, 제1 레벨 디코더(1121a)는 복수의 가변 노드들(V1~V6) 및 복수의 체크 노드들(C1~C3)을 포함할 수 있다. 도 13a에서 제1 레벨 디코더(1121a)에 6개의 가변 노드들(V1~V6) 및 3개의 체크 노드들(C1~C3)이 포함되는 것으로 도시되나, 본 발명의 범위는 이에 제한되지 않으며, 제1 레벨 디코더(1121a)에 포함된 가변 노드들의 수 및 체크 노드들의 수는 증가 또는 감소할 수 있다.
예시적인 실시 예에서, 제1 레벨 디코더(1121a)가 리드한 초기 데이터(DATAi)는 가변 노드들(V1~V6)에 저장될 수 있다. 가변 노드들(V1~V6)은 패리티 검사 행렬(H)의 정보를 기반으로 체크 노드들(C1~C3)과 연결될 수 있다. 체크 노드들(C1~C3)은 가변 노드들(V1~V6)에 저장된 비트들이 에러 검출 규칙을 만족하는지 체크할 수 있다. 에러 검출 규칙을 만족하지 않는 가변 노드에 저장된 비트는 플립(flip)될 수 있다. 비트가 플립되는 것은 가변 노드에 저장된 비트가 에러 검출 규칙을 만족하도록 '1'에서 '0'으로 뒤집히거나 '0'에서 '1'로 뒤집히는 것을 의미할 수 있다.
예를 들어, 가변 노드들(V1~V6)에 저장된 비트 정보는 '101011'일 수 있다. 체크 노드들(C1~C3) 각각은 연결된 가변 노드들의 비트 합이 짝수가 되도록 하는 에러 검출 규칙을 만족하는지 체크할 수 있다.
제1 체크 노드(C1)는 제1 내지 제4 가변 노드들(V1~V4)과 연결될 수 있다. 제1 체크 노드(C1)와 연결된 가변 노드들의 비트 합은 짝수일 수 있다. 제2 체크 노드(C2)는 제3, 제4, 및 제6 가변 노드들(V3, V4, V6)과 연결될 수 있다. 제2 체크 노드(C2)와 연결된 가변 노드들의 비트 합은 짝수일 수 있다. 제3 체크 노드(C3)는 제1, 제4, 및 제5 가변 노드들(V1, V4, V5)과 연결될 수 있다. 제3 체크 노드(C3)와 연결된 가변 노드들의 비트 합은 짝수일 수 있다.
이러한 경우, 제1 레벨 디코더(1121a)는 초기 데이터(DATAi)와 동일한 비트 정보를 갖는 제1 데이터를 출력할 수 있다. 제1 레벨 디코더(1121a)에서 출력되는 제1 신드롬 가중치(SW1)의 값은 '0'일 수 있다.
예시적인 실시 예에서, 가변 노드와 체크 노드를 연결하는 구성은 에지(edge)로 표현될 수 있다. 가변 노드와 체크 노드를 연결하는 에지(edge)를 통해서 에지 값(edge value)이 이동할 수 있다. '1'비트의 메시지를 전송하는 에지의 경우, 에지 값은 에지 부호 값(edge sign value)을 포함할 수 있다. '2'비트 이상의 메시지를 전송하는 에지의 경우, 에지 값은 에지 부호 값 및 에지 크기 값(edge magnitude value)을 포함할 수 있다.
도 13b는 도 13a의 패리티 체크 행렬을 예시적으로 보여주는 도면이다. 도 13b를 참조하면, 도 13a의 패리티 검사 행렬(H)이 수치의 형태로 도시된다. 도 13a 및 도 13b를 참조하면, 패리티 검사 행렬(H)에 포함된 요소들(elements) 각각은 가변 노드와 체크 노드 사이의 연결이 존재하면 '1'의 값을 갖고, 연결이 존재하지 않으면 '0'의 값을 가질 수 있다.
예를 들어, 패리티 검사 행렬(H)의 제2 행 및 제3 열의 요소는 '1'의 값을 가질 수 있다. 이 때, 제2 체크 노드(C2)와 제3 가변 노드(V3)는 연결될 수 있다. 패리티 검사 행렬(H)의 제3 행 및 제6 열의 요소는 '0'의 값을 가질 수 있다. 이 때, 제3 체크 노드(C3)와 제6 가변 노드(V6)가 연결되지 않을 수 있다.
예시적인 실시 예에서, 제1 레벨 디코더(1121a)는 패리티 검사 행렬(H)과 가변 노드들(V1~V6)의 비트 정보를 포함하는 열 벡터(column vector)의 곱을 기반으로 비트의 에러를 체크할 수 있다. 예를 들어, 도 13b에 도시된 비트 정보를 포함하는 패리티 검사 행렬(H)과 '101011'의 비트 정보를 포함하는 열 벡터를 곱하면 '222'의 정보를 포함하는 열 벡터가 체크 노드들(C1~C3)에서 계산될 수 있다. 계산된 열 벡터에 포함된 모든 요소들은 짝수이므로, '101011'의 비트 정보는 에러가 없는 것으로 체크될 수 있다.
도 14는 도 12의 제1 레벨 코어 디코더를 예시적으로 보여주는 블록도이다. 도 12 및 도 14를 참조하면, 제1 레벨 서브 디코더(1121d)와 결합하지 않고 임의의 버퍼 데이터를 디코딩 하여 디코디드 데이터를 출력하는 제1 레벨 코어 디코더(1121c)가 예시적으로 도시된다.
제1 레벨 코어 디코더(1121c)는 ECC 스케줄러(1110) 및 SRAM(1140)과 연결될 수 있다. 제1 레벨 코어 디코더(1121c)는 LLR 생성기(1121c-1), 가변 노드 버퍼(1121c-2), C2V 계산기(1121c-3), 디코더 메모리(1121c-4), V2C 계산기(1121c-5), 체크 노드 버퍼(1121c-6), 신드롬 가중치 생성기(1121c-7), 신드롬 가중치 비교기(1121c-8), 및 CRC 검사기(1121c-9)를 포함할 수 있다.
LLR 생성기(1121c-1)는 SRAM(1140)으로부터 버퍼 데이터를 수신할 수 있다. LLR 생성기(1121c-1)는 수신된 버퍼 데이터를 기반으로 로그 우도비(LLR; log likelihood ratio)를 계산할 수 있다. 로그 우도비는 특정 비트의 값이 '0'일 확률을 특정 비트의 값이 '1'일 확률로 나눈 값에 로그를 취한 값일 수 있다.
가변 노드 버퍼(1121c-2)는 LLR 생성기(1121c-1)로부터 계산된 로그 우도비를 수신할 수 있다. 가변 노드 버퍼(1121c-2)는 복수의 가변 노드들(V1~VN)을 포함할 수 있다. 복수의 가변 노드들(V1~VN)은 버퍼 데이터의 비트 정보를 저장할 수 있다.
C2V 계산기(1121c-3)는 가변 노드 버퍼(1121c-2), 디코더 메모리(1121c-4), 및 체크 노드 버퍼(1121c-6)와 연결될 수 있다. C2V 계산기(1121c-3)는 가변 노드 버퍼(1121c-2)에서 체크 노드 버퍼(1121c-6)로 전달되는 에지 값을 입력 값으로 할 수 있다. C2V 계산기(1121c-3)는 체크 노드 버퍼(1121c-6)에서 가변 노드 버퍼(1121c-2)로 전달되는 에지 값을 출력 값으로 할 수 있다.
예시적인 실시 예에서, C2V 계산기(1121c-3)는 XOR 게이트를 포함할 수 있다. C2V 계산기(1121c-3)는 가변 노드 버퍼(1121c-2)에서 체크 노드 버퍼(1121c-6)로 전달되는 에지 값들을 기반으로 XOR 연산을 할 수 있다. C2V 계산기(1121c-3)는 XOR 연산 결과를 기반으로 체크 노드 버퍼(1121c-6)에서 가변 노드 버퍼(1121c-2)로 전달되는 에지 값을 결정할 수 있다. 결정된 에지 값은 디코더 메모리(1121c-4)에 저장될 수 있다.
예시적인 실시 예에서, C2V 계산기(1121c-3)는 최소 계산기(min calculator)를 포함할 수 있다. 최소 계산기는 '2'비트 이상의 에지 값에 포함된 에지 크기 값을 계산하는 장치일 수 있다. 예를 들어, 제1 레벨 코어 디코더(1121c)가 제1 레벨 서브 디코더(1121d)와 결합하여 '2'비트의 에지 값을 처리하는 경우, 제1 레벨 코어 디코더(1121c)는 최소 계산기를 통해서 에지 크기 값을 계산할 수 있다.
예시적인 실시 예에서, C2V 계산기(1121c-3)는 결정된 에지 값을 기반으로 가변 노드 버퍼(1121c-2)의 비트 정보를 수정할 수 있다. C2V 계산기(1121c-3)는 가변 노드 버퍼(1121c-2)에 저장된 버퍼 데이터의 일부를 수정하는 과정을 반복함으로써 버퍼 데이터를 디코딩 할 수 있다. 버퍼 데이터를 디코딩 한 데이터는 디코디드 데이터일 수 있다. 버퍼 데이터의 일부를 수정하는 과정이 반복된 후, 가변 노드 버퍼(1121c-2)에 저장된 데이터는 디코디드 데이터일 수 있다.
디코더 메모리(1121c-4)는 C2V 계산기(1121c-3) 및 V2C 계산기(1121c-5)와 연결될 수 있다. 디코더 메모리(1121c-4)는 C2V 계산기(1121c-3) 및 V2C 계산기(1121c-5)와 '1'비트의 에지 정보를 주고 받을 수 있다. 디코더 메모리(1121c-4)는 '1'비트의 에지 정보를 저장할 수 있다. 예를 들어, 디코더 메모리(1121c-4)는 '1'비트의 메시지를 주고받을 수 있다. 디코더 메모리(1121c-4)는 에지 부호 값을 저장할 수 있다.
V2C 계산기(1121c-5)는 가변 노드 버퍼(1121c-2), 디코더 메모리(1121c-4), 및 체크 노드 버퍼(1121c-6)와 연결될 수 있다. V2C 계산기(1121c-5)는 체크 노드 버퍼(1121c-6)에서 가변 노드 버퍼(1121c-2)로 전달되는 에지 값을 입력 값으로 할 수 있다. V2C 계산기(1121c-5)는 가변 노드 버퍼(1121c-2)에서 체크 노드 버퍼(1121c-6)으로 전달되는 에지 값을 출력 값으로 할 수 있다.
예시적인 실시 예에서, V2C 계산기(1121c-5)는 가산기 및 양자화기를 포함할 수 있다. V2C 계산기(1121c-5)에 포함된 가산기는 체크 노드 버퍼(1121c-6) 및 가변 노드 버퍼(1121c-2) 사이에서 전송되는 메시지를 처리하는 장치일 수 있다. V2C 계산기(1121c-5)에 포함된 양자화기는 가산기의 처리 결과를 기반으로 가변 노드 버퍼(1121c-2)에서 체크 노드 버퍼(1121c-6)으로 전달되는 에지 값을 결정하는 장치일 수 있다.
예시적인 실시 예에서, V2C 계산기(1121c-5)에 포함된 양자화기는 제1 레벨 코어 디코더(1121c)와 제1 레벨 서브 디코더(1121d)의 결합 후 에러 정정 연산을 고려하여 제작된 고정밀도 양자화기일 수 있다. 예를 들어, V2C 계산기(1121c-5)에 포함된 양자화기는 '2'비트의 에지 값을 처리할 수 있다.
체크 노드 버퍼(1121c-6)는 C2V 계산기(1121c-3) 및 V2C 계산기(1121c-5)를 통해서 가변 노드 버퍼(1121c-2)와 에지 값을 주고받을 수 있다. 체크 노드 버퍼(1121c-6)는 주고받은 에지 값을 기반으로 가변 노드 버퍼(1121c-2)에 저장된 데이터의 에러 수준을 체크할 수 있다. 체크 노드 버퍼(1121c-6)는 에러 수준을 체크한 정보를 신드롬 가중치 생성기(1121c-7)로 출력할 수 있다.
예시적인 실시 예에서, 체크 노드 버퍼(1121c-6)는 가변 노드 버퍼(1121c-2)에 저장된 버퍼 데이터의 에러 수준을 체크한 정보를 신드롬 가중치 생성기(1121c-7)로 출력할 수 있다.
예시적인 실시 예에서, 체크 노드 버퍼(1121c-6)는 가변 노드 버퍼(1121c-2)에 저장된 디코디드 데이터의 에러 수준을 체크한 정보를 신드롬 가중치 생성기(1121c-7)로 출력할 수 있다.
신드롬 가중치 생성기(1121c-7)는 체크 노드 버퍼(1121c-6)로부터 에러 수준을 체크한 정보를 수신할 수 있다. 신드롬 가중치 생성기(1121c-7)는 수신된 정보를 기반으로 신드롬 가중치를 생성할 수 있다. 신드롬 가중치 생성기(1121c-7)는 생성된 신드롬 가중치를 신드롬 가중치 비교기(1121c-8) 및 ECC 스케줄러(1110)로 출력할 수 있다.
예시적인 실시 예에서, 신드롬 가중치 생성기(1121c-7)는 버퍼 데이터의 에러 수준을 체크한 정보를 수신할 수 있다. 신드롬 가중치 생성기(1121c-7)는 버퍼 데이터의 에러 수준을 나타내는 신드롬 가중치를 생성할 수 있다. 신드롬 가중치 생성기(1121c-7)는 버퍼 데이터의 신드롬 가중치를 신드롬 가중치 비교기(1121c-8) 및 ECC 스케줄러(1110)로 출력할 수 있다.
예시적인 실시 예에서, 신드롬 가중치 생성기(1121c-7)는 디코디드 데이터의 에러 수준을 체크한 정보를 수신할 수 있다. 신드롬 가중치 생성기(1121c-7)는 디코디드 데이터의 에러 수준을 나타내는 신드롬 가중치를 생성할 수 있다. 신드롬 가중치 생성기(1121c-7)는 디코디드 데이터의 신드롬 가중치를 신드롬 가중치 비교기(1121c-8) 및 ECC 스케줄러(1110)로 출력할 수 있다.
신드롬 가중치 비교기(1121c-8)는 신드롬 가중치 생성기(1121c-7)로부터 신드롬 가중치를 수신할 수 있다. 신드롬 가중치 비교기(1121c-8)는 신드롬 가중치를 저장할 수 있다. 신드롬 가중치 비교기(1121c-8)는 신드롬 가중치에 따라 가변 노드 버퍼(1121c-2)에 저장된 데이터의 출력을 제어할 수 있다.
예시적인 실시 예에서, 신드롬 가중치 비교기(1121c-8)는 버퍼 데이터의 신드롬 가중치가 '0'인지 판단할 수 있다. 만약, 버퍼 데이터의 신드롬 가중치가 '0'인 경우, 신드롬 가중치 비교기(1121c-8)는 가변 노드 버퍼(1121c-2)에 저장된 버퍼 데이터가 호스트로 출력되도록 제어할 수 있다.
예시적인 실시 예에서, 신드롬 가중치 비교기(1121c-8)는 버퍼 데이터의 신드롬 가중치를 수신 및 저장할 수 있다. 신드롬 가중치 비교기(1121c-8)는 디코디드 데이터의 신드롬 가중치를 수신할 수 있다. 신드롬 가중치 비교기(1121c-8)는 저장된 버퍼 데이터의 신드롬 가중치 및 수신된 디코디드 데이터의 신드롬 가중치를 비교할 수 있다.
디코디드 데이터의 신드롬 가중치가 버퍼 데이터의 신드롬 가중치보다 작은 경우, 신드롬 가중치 비교기(1121c-8)는 가변 노드 버퍼(1121c-2)에 저장된 디코디드 데이터가 SRAM(1140)으로 출력되도록 제어할 수 있다. 이에 따라, SRAM(1140)은 버퍼 데이터 및 디코디드 데이터 중 에러 수준이 낮은 데이터를 저장할 수 있다.
CRC 검사기(1121c-9)는 가변 노드 버퍼(1121c-2)에서 SRAM(1140)으로 출력되는 디코디드 데이터에 대해서 순환 덧붙임 검사(Cyclic redundancy check)를 수행할 수 있다. CRC 검사기(1121c-9)는 순환 덧붙임 검사가 수행된 디코디드 데이터를 SRAM(1140)으로 출력할 수 있다.
도 15는 도 12의 제1 레벨 서브 디코더를 예시적으로 보여주는 블록도이다. 도 12 및 도 15를 참조하면, 제1 레벨 코어 디코더(1121c)와 결합하지 않고 임의의 버퍼 데이터를 디코딩 하여 디코디드 데이터를 출력하는 제1 레벨 서브 디코더(1121d)가 예시적으로 도시된다.
LLR 생성기(1121d-1), 가변 노드 버퍼(1121d-2), 디코더 메모리(1121c-4), 체크 노드 버퍼(1121c-6), 신드롬 가중치 생성기(1121c-7), 신드롬 가중치 비교기(1121c-8), 및 CRC 검사기(1121c-9)의 특징은 도 14의 LLR 생성기(1121c-1), 가변 노드 버퍼(1121c-2), 디코더 메모리(1121c-4), 체크 노드 버퍼(1121c-6), 신드롬 가중치 생성기(1121c-7), 신드롬 가중치 비교기(1121c-8), 및 CRC 검사기(1121c-9)와 유사하므로, 이에 대한 상세한 설명은 생략된다.
C2V 계산기(1121d-3)는 가변 노드 버퍼(1121d-2)에서 체크 노드 버퍼(1121d-6)로 전달되는 에지 값들을 기반으로 XOR 연산을 할 수 있다. C2V 계산기(1121d-3)는 XOR 연산 결과를 기반으로 체크 노드 버퍼(1121c-6)에서 가변 노드 버퍼(1121d-2)로 전달되는 에지 값을 결정할 수 있다.
예시적인 실시 예에서, C2V 계산기(1121d-3)는 최소 계산기를 생략할 수 있다. 제1 레벨 서브 디코더(1121d)는 '1'비트의 에러를 정정하는 디코더일 수 있다. 제1 레벨 서브 디코더(1121d)는 제1 레벨 코어 디코더(1121c)와 결합된 후, 제1 레벨 코어 디코더(1121c)에 포함된 최소 계산기를 공유할 수 있다. 따라서, 제1 레벨 서브 디코더(1121d)는 에지 크기 값을 계산하는 최소 계산기를 생략할 수 있다.
V2C 계산기(1121d-5)는 체크 노드 버퍼(1121d-6)에서 가변 노드 버퍼(1121d-2)로 전달되는 에지 값을 입력 값으로 할 수 있다. V2C 계산기(1121d-5)는 가변 노드 버퍼(1121d-2)에서 체크 노드 버퍼(1121d-6)로 전달되는 에지 값을 출력 값으로 할 수 있다.
예시적인 실시 예에서, V2C 계산기(1121d-5)는 '1'비트의 정밀도를 갖는 서브 양자화기를 포함할 수 있다. 제1 레벨 서브 디코더(1121d)는 제1 레벨 코어 디코더(1121c)와 결합된 후, 제1 레벨 코어 디코더(1121c)에 포함된 '2'비트의 정밀도를 갖는 양자화기를 공유할 수 있다. 따라서, 제1 레벨 서브 디코더(1121d)는 정정 능력을 초과하는 '2'비트의 정정 능력을 갖는 양자화기를 생략할 수 있다.
도 16은 도 12의 결합된 제1 레벨 디코더들을 예시적으로 보여주는 블록도이다. 도 12 및 도 16을 참조하면, ECC 스케줄러(1110)에서 출력된 조합 신호(CB)를 기반으로 결합된 제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d)가 예시적으로 도시된다. 제1 레벨 코어 디코더(1121c)의 하부 구성들(1121c-1~1121c-9) 및 제1 레벨 서브 디코더(1121d)의 하부 구성들(1121d-1~1121d-9)의 특징은 도 14 및 도 15에서 설명된 것과 유사하므로, 이에 대한 상세한 설명은 생략된다.
네트워크 활성화 회로(1124)는 제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d)와 연결될 수 있다. 네트워크 활성화 회로(1124)는 ECC 스케줄러(1110)로부터 결합 신호(CB)를 수신할 수 있다. 네트워크 활성화 회로(1124)는 수신된 결합 신호(CB)에 응답하여 제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d) 사이의 네트워크를 활성화할 수 있다. 네트워크가 활성화 된 제1 레벨 디코더들(1121c, 1121d)는 제2 레벨 디코더처럼 동작할 수 있다.
예시적인 실시 예에서, 네트워크 활성화 회로(1124)는 제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d)의 메모리 공유를 활성화시킬 수 있다. 예를 들어, 제1 레벨 코어 디코더(1121c)의 디코더 메모리(1121c-4)는 에지 부호 값을 저장하는 메모리로 활용될 수 있다. 제1 레벨 서브 디코더(1121d)의 디코더 메모리(1121d-4)는 에지 크기 값을 저장하는 메모리로 활용될 수 있다. 결합된 제1 레벨 디코더들(1121c, 1121d)은 메모리를 공유함으로써 '2'비트의 에지 정보를 저장할 수 있다.
예시적인 실시 예에서, 네트워크 활성화 회로(1124)는 제1 레벨 코어 디코더(1121c) 및 제1 레벨 서브 디코더(1121d)의 논리 공유를 활성화시킬 수 있다. 논리 공유가 활성화된 제1 레벨 디코더들(1121c, 1121d)은 계산기를 공유할 수 있다.
예를 들어, 제1 레벨 코어 디코더(1121c)의 V2C 계산기(1121c-5)에 포함된 가산기와 제1 레벨 서브 디코더(1121d)의 V2C 계산기(1121d-5)에 포함된 가산기는 논리적으로 공유될 수 있다. 디코더 메모리들(1121c-4, 1121d-4)은 공유될 수 있다. 좀 더 상세하게는, V2C 계산기들(1121c-5, 1121d-5) 각각의 가산기는 '1'비트의 메시지들을 처리할 수 있다. 논리적으로 공유된 V2C 계산기들(1121c-5, 1121d-5) 각각의 가산기는 하나의 가산기처럼 동작하여 '2'비트의 메시지들을 처리할 수 있다. 처리된 '2'비트의 메시지는 디코더 메모리들(1121c-4, 1121d-4)에 분산하여 저장될 수 있다.
도 16을 참조하면, 논리 공유가 활성화된 제1 레벨 디코더들(1121c, 1121d)은 V2C 계산기들(1121c-5, 1121d-5)을 공유하는 것으로 도시되나, 본 발명의 범위는 이에 제한되지 않는다. 예를 들어, 논리 공유가 활성화된 제1 레벨 디코더들(1121c, 1121d)은 C2V 계산기들(1121c-3, 1121d-3)을 공유할 수 있다. 또는, 논리 공유가 활성화된 제1 레벨 디코더들(1121c, 1121d)은 양자화기를 공유하거나, 에러 정정에 대응하는 연산을 수행하는 다른 로직들(미도시)을 더 공유할 수 있다.
도 17은 도 16의 결합된 디코더 메모리들이 처리하는 에지 값을 보여주는 도면이다. 도 17을 참조하면, '2'비트의 에지 값이 예시적으로 도시된다. '2'비트의 에지 값은 서로 다른 '4'종류의 값들 중 하나로 표현될 수 있다. '2'비트의 에지 값은 에지 부호 값 및 에지 크기 값을 포함할 수 있다.
예를 들어, '1'의 에지 부호 값은 에지 값의 부호가 양의 부호임을 나타낼 수 있다. '0'의 에지 부호 값은 에지 값의 부호가 음의 부호임을 나타낼 수 있다. '1'의 에지 크기 값은 에지 값의 크기가 큰 것을 나타낼 수 있다. '0'의 에지 크기 값은 에지 값의 크기가 작은 것을 나타낼 수 있다.
예시적인 실시 예에서, 숫자 '1'에 대응하는 '2'비트의 에지 값은 '10'으로 표현될 수 있다. 이 때, 에지 부호 값은 '1'일 수 있다. 에지 부호 값은 숫자 '1'의 부호가 양의 부호임을 나타낼 수 있다. 에지 크기 값은 '0'일 수 있다. 에지 크기 값은 숫자 '1'의 크기가 다른 숫자(예를 들어, 숫자 '2')보다 작은 것을 나타낼 수 있다.
도 18은 본 발명의 실시 예에 따른 ECC 코어 유닛이 출력하는 신드롬 가중치를 예시적으로 보여주는 그래프이다. 도 18을 참조하면, 반복 구간 단위로 디코딩을 수행하는 ECC 코어 유닛이 ECC 스케줄러로 출력하는 신드롬 가중치(SW)가 예시적으로 도시된다.
제1 시나리오(S1)는 반복적으로 디코딩을 수행함에 따라 신드롬 가중치(SW)가 감소하는 경우를 예시적으로 나타낸 시나리오이다. 제1 시나리오(S1)는 실선(solid line)으로 도시된다.
제1 시나리오(S1)는 제1 내지 제3 반복 구간(I1~I3)과 임계 반복 구간(Ic)을 포함할 수 있다. 반복 구간들 각각에서 가변 노드 버퍼 및 체크 노드 버퍼 사이의 메시지 교환에 따른 연산이 반복적으로 수행될 수 있다. ECC 코어 유닛은 반복적으로 수행되는 연산을 기반으로 디코딩을 수행할 수 있다. 임계 반복 구간(Ic)은 디코딩의 성공 여부와 무관하게 최종적으로 연산을 수행하는 구간을 의미할 수 있다. 제1 시나리오(S1)는 '4'종류의 반복 구간들을 포함하는 것으로 도시되나, 본 발명의 범위는 이에 제한되지 않으며, 제1 시나리오(S1)에 포함되는 반복 구간들의 수는 증가 또는 감소할 수 있다.
제2 시나리오(S2)는 반복적으로 디코딩을 수행함에 따라 신드롬 가중치(SW)가 증가하는 경우를 예시적으로 나타낸 시나리오이다. 제2 시나리오(S2)는 점선(dotted line)으로 도시된다.
제2 시나리오(S2)의 제1 내지 제3 반복 구간(I1~I3)에서 신드롬 가중치(SW)는 점진적으로 증가할 수 있다. 제2 시나리오(S2)의 제1 내지 제3 반복 구간(I1~I3)에서 ECC 스케줄러는 점진적으로 높은 정정 능력을 갖는 디코더를 선택할 수 있다. 제2 시나리오(S2)의 임계 반복 구간(Ic)에서 신드롬 가중치(SW)는 최대가 될 수 있다. 임계 반복 구간(Ic)의 디코디드 데이터는 제1 반복 구간(I1)의 디코디드 데이터보다 에러 수준이 높을 수 있다. 버퍼 메모리인 SRAM에 저장된 데이터는 임계 반복 구간(Ic)의 디코디드 데이터로 업데이트되지 않을 수 있다.
제3 시나리오(S3)는 반복적으로 디코딩을 수행함에 따라 신드롬 가중치(SW)가 증가 또는 감소하는 경우를 예시적으로 나타낸 시나리오이다. 제3 시나리오(S3)는 일점 쇄선(dash-single dotted line)으로 도시된다.
제3 시나리오(S3)의 제1 반복 구간(I1)에서 신드롬 가중치(SW)는 제1 값(X1)에서 제2 값(X2)으로 증가할 수 있다. 버퍼 메모리에 저장된 제1 값(X1)의 신드롬 가중치(SW)에 대응하는 데이터는 제2 값(X2)의 신드롬 가중치에 대응하는 디코디드 데이터로 업데이트되지 않을 수 있다.
제3 시나리오(S3)의 제3 반복 구간(I3)에서 신드롬 가중치(SW)는 제3 값(X3)을 가질 수 있다. 제3 값(X3)의 신드롬 가중치는 제3 시나리오(S3)의 전체 반복 구간들(I1, I2, I3, Ic)내에서 최소 값일 수 있다. 버퍼 메모리에 저장된 데이터는 제3 값(X3)의 신드롬 가중치에 대응하는 디코디드 데이터로 업데이트될 수 있다.
도 19는 본 발명의 실시 예에 따른 스토리지 장치를 예시적으로 보여주는 블록도이다. 도 19를 참조하면, 본 발명의 실시 예에 따른 스토리지 장치(2000)가 예시적으로 도시된다. 스토리지 장치(2000)는 불휘발성 메모리 장치(2200), ECC 스케줄러(2110), ECC 코어 유닛(2120), 및 추가 ECC 코어 유닛(2180)을 포함할 수 있다. 불휘발성 메모리 장치(2200), ECC 스케줄러(2110), 및 ECC 코어 유닛(2120)은 도 3의 불휘발성 메모리 장치(1200), ECC 스케줄러(1110), 및 ECC 코어 유닛(1120)과 유사하므로, 이에 대한 상세한 설명은 생략된다.
추가 ECC 코어 유닛(2180)은 복수의 제1 레벨 디코더들을 포함할 수 있다. 복수의 제1 레벨 디코더들은 각각 불휘발성 메모리 장치(2200)에 포함된 복수의 낸드 플래시 메모리들과 연결될 수 있다. 복수의 제1 레벨 디코더들 각각은 연결된 낸드 플래시 메모리에 저장된 데이터를 디코딩하고, 디코딩된 데이터의 신드롬 가중치를 ECC 스케줄러(2110)로 출력할 수 있다.
예시적인 실시 예에서, 불휘발성 메모리 장치(2200)에 저장된 초기 데이터의 신드롬 가중치를 계산하기 위해서 디코딩이 요구될 수 있다. 초기 데이터를 디코딩 할 디코더는 신드롬 가중치와 무관하게 선택될 수 있다. 불휘발성 메모리 장치(2200)와 연결된 추가 ECC 코어 유닛(2180)에서 초기 데이터를 디코딩 함으로써, ECC 스케줄러(2110)가 초기 데이터를 디코딩 할 디코더를 선택하는 부담이 감소될 수 있다. 이에 따라, 스토리지 장치(2000)에서 데이터를 리드하는 속도가 향상될 수 있다.
상술된 내용은 본 발명을 실시하기 위한 구체적인 실시 예들이다. 본 발명은 상술된 실시 예들뿐만 아니라, 단순하게 설계 변경되거나 용이하게 변경할 수 있는 실시 예들 또한 포함할 것이다. 또한, 본 발명은 실시 예들을 이용하여 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다. 따라서, 본 발명의 범위는 상술된 실시 예들에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 할 것이다.

Claims (20)

  1. 하이 레벨 디코더 및 로우 레벨 디코더를 포함하는 스토리지 컨트롤러의 동작 방법에 있어서:
    불휘발성 메모리 장치로부터 리드한 초기 데이터를 디코딩 한 제1 데이터 및 상기 제1 데이터의 에러 수준을 나타내는 제1 신드롬 가중치를 생성하는 단계;
    상기 제1 신드롬 가중치가 특정 값이면 상기 제1 데이터를 호스트로 출력하는 단계;
    상기 제1 신드롬 가중치가 기준 값을 초과하면 제1 에러 정정 능력을 갖는 하이 레벨 디코더를 선택하여 상기 제1 데이터를 디코딩 하는 단계; 및
    상기 제1 신드롬 가중치가 상기 기준 값 이하이면 상기 제1 에러 정정 능력보다 낮은 제2 에러 정정 능력을 갖는 로우 레벨 디코더를 선택하여 상기 제1 데이터를 디코딩 하는 단계를 포함하는 스토리지 컨트롤러의 동작 방법.
  2. 제 1 항에 있어서,
    상기 선택된 하이 레벨 디코더 또는 상기 선택된 로우 레벨 디코더에서 상기 제1 데이터를 디코딩 한 제2 데이터 및 상기 제2 데이터의 에러 수준을 나타내는 제2 신드롬 가중치를 생성하는 단계를 더 포함하는 스토리지 컨트롤러의 동작 방법.
  3. 제 2 항에 있어서,
    상기 제2 신드롬 가중치가 상기 특정 값이면 상기 제2 데이터를 상기 호스트로 출력하는 단계를 더 포함하는 스토리지 컨트롤러의 동작 방법.
  4. 제 2 항에 있어서,
    상기 초기 데이터를 디코딩 한 상기 제1 데이터를 저장하는 단계; 및
    상기 제2 신드롬 가중치가 상기 제1 신드롬 가중치보다 작으면 상기 제1 데이터를 상기 제2 데이터로 업데이트하는 단계를 더 포함하는 스토리지 컨트롤러의 동작 방법.
  5. 제 2 항에 있어서,
    상기 제2 신드롬 가중치가 상기 기준 값을 초과하면 상기 하이 레벨 디코더를 선택하여 상기 제2 데이터를 디코딩 하는 단계; 및
    상기 제2 신드롬 가중치가 상기 기준 값 이하이면 상기 로우 레벨 디코더를 선택하여 상기 제2 데이터를 디코딩 하는 단계를 더 포함하는 스토리지 컨트롤러의 동작 방법.
  6. 제 1 항에 있어서,
    상기 제1 신드롬 가중치가 상기 기준 값 이하이면 상기 로우 레벨 디코더를 선택하여 상기 제1 데이터를 디코딩 하는 단계는:
    상기 로우 레벨 디코더가 이용가능한지 체크하는 단계; 및
    상기 로우 레벨 디코더가 이용 불가능하면, 상기 로우 레벨 디코더 대신 상기 하이 레벨 디코더를 선택하여 상기 제1 데이터를 디코딩 하는 단계를 포함하는 스토리지 컨트롤러의 동작 방법.
  7. 제 1 항에 있어서,
    상기 제1 신드롬 가중치가 상기 기준 값을 초과하면 상기 하이 레벨 디코더를 선택하여 상기 제1 데이터를 디코딩 하는 단계는:
    상기 하이 레벨 디코더가 이용가능한지 체크하는 단계;
    상기 하이 레벨 디코더가 이용 불가능하면, 상기 하이 레벨 디코더 대신 상기 로우 레벨 디코더 및 상기 로우 레벨 디코더와 다른 로우 레벨 디코더를 선택하고, 선택된 로우 레벨 디코더들을 결합하여 상기 제1 데이터를 디코딩 하는 단계를 포함하는 스토리지 컨트롤러의 동작 방법.
  8. 제 7 항에 있어서,
    상기 선택된 로우 레벨 디코더들에 각각 포함된 계산기를 공유하는 스토리지 컨트롤러의 동작 방법.
  9. 제 7 항에 있어서,
    상기 선택된 로우 레벨 디코더들에 각각 포함된 디코더 메모리를 공유하는 스토리지 컨트롤러의 동작 방법.
  10. 초기 데이터를 저장하도록 구성된 불휘발성 메모리 장치와 연결된 디코더, 제1 에러 정정 능력을 갖는 하이 레벨 디코더, 및 상기 제1 에러 정정 능력보다 낮은 제2 에러 정정 능력을 갖는 로우 레벨 디코더를 포함하는 ECC(Error Correction Code) 코어 유닛; 및
    상기 디코더로부터 제1 신드롬 가중치를 수신하고, 상기 제1 신드롬 가중치가 기준 값을 초과하면 상기 하이 레벨 디코더로 제1 데이터의 디코딩을 요청하는 요청 신호를 출력하고, 상기 제1 신드롬 가중치가 상기 기준 값 이하이면 상기 로우 레벨 디코더로 상기 요청 신호를 출력하도록 구성된 ECC 스케줄러를 포함하되,
    상기 디코더는 상기 불휘발성 메모리 장치로부터 상기 초기 데이터를 리드하고, 상기 리드된 초기 데이터를 디코딩 한 상기 제1 데이터 및 상기 제1 데이터의 에러 수준을 나타내는 제1 신드롬 가중치를 생성하며, 상기 제1 신드롬 가중치가 특정 값이면 호스트로 상기 제1 데이터를 출력하고, 상기 제1 신드롬 가중치가 상기 특정 값이 아니면 상기 요청 신호를 수신한 상기 하이 레벨 디코더 또는 상기 로우 레벨 디코더로 상기 제1 데이터를 출력하도록 구성되는 스토리지 컨트롤러.
  11. 제 10 항에 있어서,
    상기 ECC 코어 유닛은 상기 ECC 스케줄러로부터 상기 요청 신호를 수신하고, 상기 수신된 요청 신호를 기반으로 상기 제1 데이터를 디코딩 한 제2 데이터 및 상기 제2 데이터의 에러 수준을 나타내는 제2 신드롬 가중치를 출력하도록 구성된 스토리지 컨트롤러.
  12. 제 11 항에 있어서,
    상기 디코더로부터 상기 제1 데이터를 수신하고, 상기 수신된 제1 데이터를 저장하도록 구성된 버퍼 메모리를 더 포함하되,
    상기 ECC 코어 유닛은 상기 제2 신드롬 가중치가 상기 제1 신드롬 가중치보다 낮으면 상기 버퍼 메모리에 저장된 상기 제1 데이터를 상기 제2 데이터로 업데이트하도록 더 구성된 스토리지 컨트롤러.
  13. 제 10 항에 있어서,
    상기 ECC 스케줄러는 상기 제1 신드롬 가중치가 상기 기준 값 이하이면 상기 로우 레벨 디코더가 이용가능한지 체크하고, 상기 로우 레벨 디코더가 이용 불가능하면 상기 로우 레벨 디코더 대신 상기 하이 레벨 디코더로 상기 요청 신호를 출력하도록 더 구성된 스토리지 컨트롤러.
  14. 제 10 항에 있어서,
    상기 ECC 코어 유닛은 상기 제2 에러 정정 능력을 갖는 다른 로우 레벨 디코더를 더 포함하며,
    상기 ECC 스케줄러는 상기 제1 신드롬 가중치가 상기 기준 값을 초과하면 상기 하이 레벨 디코더가 이용가능한지 체크하고, 상기 하이 레벨 디코더가 이용 불가능하면 상기 하이 레벨 디코더 대신 상기 로우 레벨 디코더 및 상기 다른 로우 레벨 디코더로 상기 요청 신호를 출력하도록 더 구성된 스토리지 컨트롤러.
  15. 제 14 항에 있어서,
    상기 로우 레벨 디코더 및 상기 다른 로우 레벨 디코더에 각각 포함된 계산기를 공유하는 스토리지 컨트롤러.
  16. 제 14 항에 있어서,
    상기 로우 레벨 디코더 및 상기 다른 로우 레벨 디코더에 각각 포함된 디코더 메모리를 공유하는 스토리지 컨트롤러.
  17. 제1 에러 정정 능력을 갖고, 불휘발성 메모리 장치로부터 리드한 초기 데이터를 디코딩 한 제1 데이터 및 상기 제1 데이터의 에러 수준을 나타내는 제1 신드롬 가중치를 출력하도록 구성된 제1 레벨 디코더;
    상기 제1 에러 정정 능력보다 높은 제2 에러 정정 능력을 갖는 제2 레벨 디코더;
    상기 제2 에러 정정 능력보다 높은 제3 에러 정정 능력을 갖는 제3 레벨 디코더; 및
    상기 제1 신드롬 가중치를 수신하고, 상기 제1 신드롬 가중치가 기준 값을 초과하면 상기 제3 레벨 디코더로 상기 제1 데이터의 디코딩을 요청하는 요청 신호를 출력하고, 상기 제1 신드롬 가중치가 상기 기준 값 이하이면 상기 제2 레벨 디코더로 상기 요청 신호를 출력하도록 구성된 ECC 스케줄러를 포함하되,
    상기 제1 레벨 디코더는 상기 제1 신드롬 가중치가 특정 값이면 호스트로 상기 제1 데이터를 출력하고, 상기 제1 신드롬 가중치가 상기 특정 값이 아니면 상기 요청 신호를 수신한 제2 레벨 디코더 또는 제3 레벨 디코더로 상기 제1 데이터를 출력하도록 구성된 스토리지 장치.
  18. 제 17 항에 있어서,
    상기 불휘발성 메모리 장치는 상기 초기 데이터를 저장하는 제1 불휘발성 메모리 및 상기 초기 데이터와 다른 초기 데이터를 저장하는 제2 불휘발성 메모리를 포함하고,
    상기 제1 레벨 디코더는 상기 제2 불휘발성 메모리로부터 리드한 상기 다른 초기 데이터를 디코딩 한 다른 제1 데이터 및 상기 다른 제1 데이터의 에러 수준을 나타내는 다른 제1 신드롬 가중치를 출력하도록 더 구성되고,
    상기 ECC 스케줄러는 상기 다른 제1 신드롬 가중치를 수신하고, 상기 다른 제1 신드롬 가중치가 상기 기준 값을 초과하면 상기 제3 레벨 디코더로 상기 다른 제1 데이터의 디코딩을 요청하는 다른 요청 신호를 출력하고, 상기 다른 제1 신드롬 가중치가 상기 기준 값 이하이면 상기 제2 레벨 디코더로 상기 다른 요청 신호를 출력하도록 더 구성된 스토리지 장치.
  19. 제 17 항에 있어서,
    상기 불휘발성 메모리 장치는 복수의 불휘발성 메모리들을 포함하고, 상기 복수의 불휘발성 메모리들은 각각 복수의 초기 데이터를 저장하며, 상기 복수의 초기 데이터들은 각각 복수의 제1 레벨 디코더에 의해서 디코딩 되는 스토리지 장치.
  20. 제 17 항에 있어서,
    상기 제1 레벨 디코더를 N개 포함하고, 상기 제2 레벨 디코더를 M개 포함하며, 상기 제3 레벨 디코더를 K개 포함하되,
    K는 자연수이고, M은 K보다 큰 자연수이며, N은 M보다 큰 자연수인 스토리지 장치.
KR1020190164302A 2019-12-11 2019-12-11 에러를 정정하는 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법 KR20210074425A (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020190164302A KR20210074425A (ko) 2019-12-11 2019-12-11 에러를 정정하는 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법
US16/917,101 US11184030B2 (en) 2019-12-11 2020-06-30 Storage controller for correcting error, storage device including the same, and operating method thereof
EP20212916.9A EP3835960A3 (en) 2019-12-11 2020-12-09 Storage controller for correcting error, storage device including the same, and operating method thereof
CN202011457064.6A CN112951313A (zh) 2019-12-11 2020-12-11 用于纠错的存储控制器、包括其的存储设备及其操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190164302A KR20210074425A (ko) 2019-12-11 2019-12-11 에러를 정정하는 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법

Publications (1)

Publication Number Publication Date
KR20210074425A true KR20210074425A (ko) 2021-06-22

Family

ID=76317388

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190164302A KR20210074425A (ko) 2019-12-11 2019-12-11 에러를 정정하는 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법

Country Status (2)

Country Link
US (1) US11184030B2 (ko)
KR (1) KR20210074425A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022260409A1 (ko) 2021-06-08 2022-12-15 주식회사 엘지에너지솔루션 배터리 모듈, 그리고 이를 포함하는 배터리 팩 및 자동차

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021179672A (ja) * 2020-05-11 2021-11-18 ソニーセミコンダクタソリューションズ株式会社 メモリモジュール
KR20220103227A (ko) 2021-01-14 2022-07-22 삼성전자주식회사 비휘발성 메모리 장치, 그것을 제어하는 제어기, 그것을 갖는 저장 장치, 및 그것의 리드 방법
US11556420B2 (en) * 2021-04-06 2023-01-17 Macronix International Co., Ltd. Managing error correction coding in memory systems
US20230396271A1 (en) * 2022-06-01 2023-12-07 Micron Technology, Inc. Early stopping of bit-flip low density parity check decoding based on syndrome weight
US11949429B2 (en) * 2022-07-19 2024-04-02 Macronix International Co., Ltd. Memory device, error correction device and error correction method thereof
US11881871B1 (en) * 2022-09-14 2024-01-23 SK Hynix Inc. On-the-fly scaling factor change for irregular LDPC codes

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8266367B2 (en) 2003-12-02 2012-09-11 Super Talent Electronics, Inc. Multi-level striping and truncation channel-equalization for flash-memory system
US8291295B2 (en) 2005-09-26 2012-10-16 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US9043669B1 (en) 2012-05-18 2015-05-26 Bitmicro Networks, Inc. Distributed ECC engine for storage media
US8954817B2 (en) 2012-07-31 2015-02-10 Kabushiki Kaisha Toshiba Storage apparatus and controller
US9164832B2 (en) 2013-02-27 2015-10-20 Seagate Technology Llc ECC management for variable resistance memory cells
US9152495B2 (en) 2013-07-03 2015-10-06 SanDisk Technologies, Inc. Managing non-volatile media using multiple error correcting codes
US20160062698A1 (en) 2014-08-26 2016-03-03 Marvell World Trade Ltd. Storage device controller architecture
US10498362B2 (en) 2016-12-19 2019-12-03 Kabushiki Kaisha Toshiba Low power error correcting code (ECC) system
US10671323B2 (en) 2017-08-29 2020-06-02 SK Hynix Inc. Memory system with shared buffer architecture for multiple decoders and method of operating such memory system
US10700706B2 (en) 2017-09-22 2020-06-30 SK Hynix Inc. Memory system with decoders and method of operating such memory system and decoders
US10817373B2 (en) * 2017-11-21 2020-10-27 SK Hynix Inc. Soft chip-kill recovery using concatenated codes
US10892777B2 (en) * 2019-02-06 2021-01-12 Seagate Technology Llc Fast error recovery with error correction code (ECC) syndrome weight assist
JP2020154728A (ja) * 2019-03-20 2020-09-24 キオクシア株式会社 メモリシステム及びその制御方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022260409A1 (ko) 2021-06-08 2022-12-15 주식회사 엘지에너지솔루션 배터리 모듈, 그리고 이를 포함하는 배터리 팩 및 자동차

Also Published As

Publication number Publication date
US20210184699A1 (en) 2021-06-17
US11184030B2 (en) 2021-11-23

Similar Documents

Publication Publication Date Title
KR20210074425A (ko) 에러를 정정하는 스토리지 컨트롤러, 이를 포함하는 스토리지 장치, 및 이의 동작 방법
KR101306645B1 (ko) 시행착오에 의한 에러 보정 디코딩
US9385754B2 (en) Controller, information processing system, method of controlling controller, and program
US9513992B2 (en) Method and apparatus to perform concurrent read and write memory operations
US20200012561A1 (en) System and method for adaptive multiple read of nand flash
TWI703436B (zh) 資料儲存裝置及其操作方法
US20150169406A1 (en) Decoding techniques for a data storage device
US20120233521A1 (en) Apparatus, system, and method for decoding linear block codes in a memory controller
US20200287571A1 (en) Method of operating decoder for reducing computational complexity and method of operating data storage device including the decoder
KR20180086816A (ko) 사전-검사된 에러율에 따른 적응형 에러정정을 수행하는 메모리장치 및 전자장치와, 메모리장치의 동작방법
JP2019054448A (ja) メモリシステム
EP3835960A2 (en) Storage controller for correcting error, storage device including the same, and operating method thereof
US11418219B2 (en) Learning device
CN110572164B (zh) Ldpc译码方法、装置、计算机设备及存储介质
US9304851B2 (en) Decoding with log likelihood ratios stored in a controller
CN110535476B (zh) Ldpc软译码器软信息存储优化方法、装置、计算机设备及存储介质
KR20220045343A (ko) 데이터 처리 시스템 내 데이터 전송에서 발생한 에러를 정정하는 장치 및 방법
US11385833B2 (en) Method and system for facilitating a light-weight garbage collection with a reduced utilization of resources
US11348658B2 (en) Memory controller and storage device including the same
US11515898B2 (en) Error correction decoder, error correction circuit having the same, and method of operating the same
TWI804359B (zh) 低密度奇偶校檢碼的解碼方法及裝置
US20220209794A1 (en) Techniques to improve latency of retry flow in memory controllers
US11914895B2 (en) Method for updating stored information and apparatus
US20210279133A1 (en) Memory system
CN117472643A (zh) 低密度奇偶校检码的译码方法、存储介质和装置

Legal Events

Date Code Title Description
A201 Request for examination