KR20210010718A - 메모리 시스템 및 메모리 시스템에서의 에러정정방법 - Google Patents
메모리 시스템 및 메모리 시스템에서의 에러정정방법 Download PDFInfo
- Publication number
- KR20210010718A KR20210010718A KR1020190086680A KR20190086680A KR20210010718A KR 20210010718 A KR20210010718 A KR 20210010718A KR 1020190086680 A KR1020190086680 A KR 1020190086680A KR 20190086680 A KR20190086680 A KR 20190086680A KR 20210010718 A KR20210010718 A KR 20210010718A
- Authority
- KR
- South Korea
- Prior art keywords
- operation mode
- loop
- read data
- control signal
- memory
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- 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
-
- 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/1048—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- 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
-
- 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/3723—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using means or methods for the initialisation of the decoder
-
- 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/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1515—Reed-Solomon codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/154—Error and erasure correction, e.g. by using the error and erasure locator or Forney polynomial
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Probability & Statistics with Applications (AREA)
- Human Computer Interaction (AREA)
- Mathematical Physics (AREA)
- Algebra (AREA)
- Pure & Applied Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
메모리 시스템은, 메모리 미디어와, 제1 동작모드에서 메모리 미디어로부터 읽은 리드 데이터를 저장하는 루프 버퍼와, 제2 동작모드에서 페이크-커맨드를 발생시키는 페이크-커맨드 발생기와, 그리고 페이크-커맨드 발생에 응답하여 루프 버퍼에 저장된 리드 데이터에 대한 에러정정코드 디코딩을 수행하는 에러정정코드 디코더를 포함한다.
Description
본 개시의 여러 실시예들은 메모리 시스템에 관한 것으로서, 특히 메모리 시스템 및 메모리 시스템에서의 에러정정방법에 관한 것이다.
일반적으로 정보를 전송하는 경로를 채널(channel)이라 부를 수 있다. 정보가 유선통신을 이용하여 전송되는 경우, 정보가 전송되는 전송선(transmission line)이 채널을 구성한다. 정보가 무선통신을 이용하여 전송되는 경우, 채널은 정보를 포함하는 전자기파가 통과하는 대기(air)일 수 있다. 메모리 미디어(memory media)가 데이터를 저장하고, 저장된 데이터를 메모리 미디어로부터 읽어내는 과정도 채널을 통해 이루어진다.
채널을 경유하여 데이터가 전송되는 과정에서, 데이터에는 에러(error)가 포함될 수 있다. 이에 따라 데이터의 에러를 검출하고, 검출된 에러를 제거하여 최초의 데이터를 복원하기 위한 장치 및 방법에 관한 연구는 꾸준히 진행되고 있다. 메모리 미디어에 데이터를 라이트(write)하는 과정에서, 라이트 데이터(write data)에 에러 제어 코드 또는 에러 정정 코드(ECC; error control codes 또는 error control coding or error correction codes)를 부가하여 전송 데이터를 생성하는 과정을 ECC 인코딩이라 한다. 그리고 메모리 미디어에 저장된 데이터에 대한 리드(read) 동작을 수행하여 리드 데이터(read data)로부터 부가된 데이터와 최초의 데이터를 분리하여 최초의 데이터를 복원하는 과정을 ECC 디코딩이라 한다.
본 출원이 해결하고자 하는 과제는, 에러 정정 능력을 향상시킬 수 있는 메모리 시스템을 제공하는 것이다.
본 출원이 해결하고자 하는 과제는, 위와 같은 메모리 시스템에서의 에러정정방법을 제공하는 것이다.
본 개시의 일 예에 따른 메모리 시스템은, 메모리 미디어와, 제1 동작모드에서 메모리 미디어로부터 읽은 리드 데이터를 저장하는 루프 버퍼와, 제2 동작모드에서 페이크-커맨드를 발생시키는 페이크-커맨드 발생기와, 그리고 페이크-커맨드 발생에 응답하여 루프 버퍼에 저장된 리드 데이터에 대한 에러정정코드 디코딩을 수행하는 에러정정코드 디코더를 포함한다.
본 개시의 일 예에 따른 메모리 시스템은, 메모리 미디어와, 제1 동작모드 및 제2 동작모드에서 각각 예비 페이크-커맨드 제어신호 및 페이크-커맨드를 발생시키는 커맨드 컨트롤 유닛과, 제1 동작모드에서 상기 예비 페이크-커맨드 제어신호에 응답하여 메모리 미디어로부터 읽은 리드 데이터를 저장하고, 제2 동작모드에서 페이크-커맨드에 응답하여 저장된 리드 데이터를 출력하는 루프-버퍼와, 제1 동작모드에서 예비 페이크-커맨드 제어신호에 응답하여 리셋 동작을 수행하고, 제2 동작모드에서 페이크-커맨드에 응답하여 카운팅값을 출력하는 루프-카운터와, 그리고 제1 동작모드에서 메모리 미디어로부터 읽은 리드 데이터에 대한 제1 ECC 디코딩을 수행하고, 제2 동작모드에서 루프-버퍼로부터 입력되는 리드 데이터에 대한 제2 ECC 디코딩을 수행하는 ECC 디코더를 포함한다.
본 개시의 일 예에 따른 메모리 시스템의 에러정정방법은, 제1 동작모드에서 메모리 미디어로부터 액세스한 리드 데이터에 대한 제1 ECC 디코딩을 수행하고, 메모리 미디어로부터 액세스한 리드 데이터를 루프-버퍼에 저장시키는 단계와, 그리고 제2 동작모드에서 루프-버퍼에 저장된 리드 데이터에 대한 제2 ECC 디코딩을 수행하는 단계를 포함한다.
여러 실시예들에 따르면, 일반적인 RS 알고리즘을 이용한 ECC 디코딩에 의해 에러가 정정되지 않은 경우, 제1 동작모드에서 메모리 미디어로부터 액세스한 리드 데이터를 루프-버퍼에 저장하고, 제2 동작모드에서 루프-버퍼에 저장된 리드 데이터에 대해 이레이저-루프 방식의 ECC 디코딩을 수행하도록 함으로써 에러 정정 능력을 향상시킬 수 있는 이점이 제공된다.
도 1은 본 개시에 따른 메모리 시스템의 일 예를 나타내 보인 블록도이다.
도 2는 본 개시에 따른 메모리 시스템의 정상 리드 동작 또는 리트라이(retry) 동작의 일 예를 나타내 보인 블록도이다.
도 3은 본 개시에 따른 메모리 시스템의 제1 동작모드에서의 동작의 일 예를 나타내 보인 블록도이다.
도 4는 본 개시에 따른 메모리 시스템의 제2 동작모드에서의 동작의 일 예를 나타내 보인 블록도이다.
도 5는 본 개시에 따른 메모리 시스템의 다른 예를 나타내 보인 블록도이다.
도 6은 도 5의 메모리 시스템의 메모리 미디어 구성의 일 예를 나타내 보인 도면이다.
도 7은 도 5의 메모리 시스템의 루프-버퍼 구성의 일 예를 나타내 보인 도면이다.
도 8은 도 5의 메모리 시스템의 루프-카운터 구성의 일 예를 나타내 보인 도면이다.
도 9는 본 개시에 따른 메모리 시스템의 정상 리드 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 10은 본 개시에 따른 메모리 시스템의 정상 리드 동작의 일 예를 설명하기 위해 나타내 보인 블록도이다.
도 11은 본 개시에 따른 메모리 시스템의 리트라이 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 12는 본 개시에 따른 메모리 시스템의 리트라이 동작의 일 예를 설명하기 위해 나타내 보인 블록도이다.
도 13은 본 개시에 따른 메모리 시스템의 제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 14는 본 개시에 따른 메모리 시스템의 제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도이다.
도 15는 본 개시에 따른 메모리 시스템의 제2 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 16 내지 도 18은 본 개시에 따른 메모리 시스템의 제2 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도들이다.
도 19 내지 도 21은 본 개시에 따른 메모리 시스템의 제2 동작모드에서의 이레이저-루프 방식의 ECC 디코딩 과정의 일 예를 설명하기 위해 나타내 보인 도면들이다.
도 22는 본 개시에 따른 메모리 시스템의 제1 동작모드/리트라이 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 23 및 도 24는 본 개시에 따른 메모리 시스템의 제1 동작모드/리트라이 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도들이다.
도 25는 본 개시에 따른 메모리 시스템의 제1 동작모드/리트라이 동작모드에서의 동작의 다른 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 26은 본 개시에 따른 메모리 시스템의 제1 동작모드/리트라이 동작모드에서의 동작의 다른 예를 설명하기 위해 나타내 보인 블록도이다.
도 27은 본 개시에 따른 메모리 시스템의 제1 동작모드/리트라이 동작모드에서 루프-버퍼 내에 리드 데이터가 저장되는 과정을 설명하기 위해 나타내 보인 도면이다.
도 28은 본 개시에 따른 메모리 시스템의 정상 리드 동작모드/제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 29는 본 개시에 따른 메모리 시스템의 정상 리드 동작모드/제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도이다.
도 2는 본 개시에 따른 메모리 시스템의 정상 리드 동작 또는 리트라이(retry) 동작의 일 예를 나타내 보인 블록도이다.
도 3은 본 개시에 따른 메모리 시스템의 제1 동작모드에서의 동작의 일 예를 나타내 보인 블록도이다.
도 4는 본 개시에 따른 메모리 시스템의 제2 동작모드에서의 동작의 일 예를 나타내 보인 블록도이다.
도 5는 본 개시에 따른 메모리 시스템의 다른 예를 나타내 보인 블록도이다.
도 6은 도 5의 메모리 시스템의 메모리 미디어 구성의 일 예를 나타내 보인 도면이다.
도 7은 도 5의 메모리 시스템의 루프-버퍼 구성의 일 예를 나타내 보인 도면이다.
도 8은 도 5의 메모리 시스템의 루프-카운터 구성의 일 예를 나타내 보인 도면이다.
도 9는 본 개시에 따른 메모리 시스템의 정상 리드 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 10은 본 개시에 따른 메모리 시스템의 정상 리드 동작의 일 예를 설명하기 위해 나타내 보인 블록도이다.
도 11은 본 개시에 따른 메모리 시스템의 리트라이 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 12는 본 개시에 따른 메모리 시스템의 리트라이 동작의 일 예를 설명하기 위해 나타내 보인 블록도이다.
도 13은 본 개시에 따른 메모리 시스템의 제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 14는 본 개시에 따른 메모리 시스템의 제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도이다.
도 15는 본 개시에 따른 메모리 시스템의 제2 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 16 내지 도 18은 본 개시에 따른 메모리 시스템의 제2 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도들이다.
도 19 내지 도 21은 본 개시에 따른 메모리 시스템의 제2 동작모드에서의 이레이저-루프 방식의 ECC 디코딩 과정의 일 예를 설명하기 위해 나타내 보인 도면들이다.
도 22는 본 개시에 따른 메모리 시스템의 제1 동작모드/리트라이 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 23 및 도 24는 본 개시에 따른 메모리 시스템의 제1 동작모드/리트라이 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도들이다.
도 25는 본 개시에 따른 메모리 시스템의 제1 동작모드/리트라이 동작모드에서의 동작의 다른 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 26은 본 개시에 따른 메모리 시스템의 제1 동작모드/리트라이 동작모드에서의 동작의 다른 예를 설명하기 위해 나타내 보인 블록도이다.
도 27은 본 개시에 따른 메모리 시스템의 제1 동작모드/리트라이 동작모드에서 루프-버퍼 내에 리드 데이터가 저장되는 과정을 설명하기 위해 나타내 보인 도면이다.
도 28은 본 개시에 따른 메모리 시스템의 정상 리드 동작모드/제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다.
도 29는 본 개시에 따른 메모리 시스템의 정상 리드 동작모드/제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도이다.
본 출원의 예의 기재에서 "제1" 및 "제2"와 같은 기재는 부재를 구분하기 위한 것이며, 부재 자체를 한정하거나 특정한 순서를 의미하는 것으로 사용된 것은 아니다. 또한, 어느 부재의 "상"에 위치하거나 "상부", "하부", 또는 "측면"에 위치한다는 기재는 상대적인 위치 관계를 의미하는 것이지 그 부재에 직접 접촉하거나 또는 사이 계면에 다른 부재가 더 도입되는 특정한 경우를 한정하는 것은 아니다. 또한, 어느 한 구성 요소가 다른 구성 요소에 "연결되어 있다"거나 "접속되어 있다"의 기재는, 다른 구성 요소에 전기적 또는 기계적으로 직접 연결되어 있거나 또는 접속되어 있을 수 있으며, 또는, 중간에 다른 별도의 구성 요소들이 개재되어 연결 관계 또는 접속 관계를 구성할 수도 있다.
도 1은 본 개시에 따른 메모리 시스템(100)의 일 예를 나타내 보인 블록도이다. 도 1을 참조하면, 메모리 시스템(100)은, 메모리 미디어(memory media)(110)와, 정정불능-에러(UE; Uncorrectable-Error) 핸들러(121)와, 페이크-커맨드 발생기(fake-command generator)(122)와, 루프-버퍼(loop-buffer)(140)와, 그리고 ECC 디코더(160)를 포함하여 구성될 수 있다. 메모리 미디어(110)는, 메모리 칩(memory chip)이거나, 또는 메모리 모듈(memory module)일 수 있다. 메모리 미디어(110)가 메모리 칩인 경우, 메모리 칩은 복수개의 메모리영역들을 포함할 수 있다. 이 경우 메모리 미디어(110)에 대한 리드 액세스(read access)시 복수개의 메모리영역들에 대한 리드 액세스가 동시에 이루어질 수 있다. 메모리 미디어(110)가 메모리 모듈인 경우, 메모리 모듈은 복수개의 메모리 칩들을 포함할 수 있다. 이 경우 메모리 미디어(110)에 대한 리드 액세스시 복수개의 메모리 칩들에 대한 리드 액세스가 동시에 이루어질 수 있다. 일 예에서 메모리 미디어(110)는, 플래시(flash) 메모리, 상변화 메모리(PCRAM), 저항변화 메모리(ReRAM), 강유전체 메모리(FeRAM), 자기저항 메모리(MRAM)와 같은 비휘발성 메모리로 구성될 수 있다. 다른 예에서 메모리 미디어(110)는, 디램(DRAM)과 같은 휘발성 메모리를 포함할 수도 있다.
정정불능-에러 핸들러(121)는, ECC 디코더(160)로부터 ECC 디코딩된 데이터를 입력받고, 제1 동작모드 및 제2 동작모드를 결정한다. 그리고 결정된 동작모드에서의 동작을 위한 제어신호들을 발생시킨다. 일 예에서 제1 동작모드는, 정상 리드 동작 및/또는 리트라이(retry) 동작을 통해 메모리 미디어(110)로부터 액세스한 리드 데이터에 대한 에러가 정정되지 않은 경우에 결정될 수 있다. 제2 동작모드는, 제1 동작모드에서 메모리 미디어(110)로부터 액세스한 리드 데이터에 대한 에러가 정정되지 않은 경우에 결정될 수 있다. 정정불능-에러 핸들러(121)는, 제1 동작모드에서 예비 페이크-커맨드 제어신호(pre CMD_F)를 발생시킨다. 예비 페이크-커맨드 제어신호(pre CMD_F)가 발생되면, 메모리 미디어(110)로부터 액세스된 리드 데이터(DATA_R)가 루프-버퍼(140) 및 ECC 디코더(160)로 입력된다. 정정불능-에러 핸들러(121)는, 제2 동작모드에서 페이크-커맨드 제어신호(CS_CMD_F)를 발생시킨다. 페이크-커맨드 제어신호(CS_CMD_F)는 페이크-커맨드 발생기(122)로 입력된다.
페이크-커맨드 발생기(122)는, 정정불능-에러 핸들러(121)로부터 입력되는 페이크-커맨드 제어신호(CS_CMD_F)에 응답하여, 페이크-커맨드(CMD_F)를 발생시킨다. 페이크-커맨드(CMD_F)는 루프-버퍼(140) 및 ECC 디코더(160)에 입력된다. 일 예에서 정정불능-에러 핸들러(121)로부터 페이크-커맨드 제어신호(CS_CMD_F)가 입력되지 않는 동안, 페이크-커맨드 발생기(122)는 어떤 커맨드도 발생시키지 않는다. 페이크-커맨드 발생기(122)로부터 페이크-커맨드(CMD_F)가 발생되면, 메모리 시스템(100)에서 메모리 미디어(110)에 대한 액세스가 중지된다. 즉 페이크-커맨드(CMD_F)가 발생되면, 메모리 미디어(110)에 대한 리드 동작 및 라이트 동작은 수행되지 않는다.
루프-버퍼(140)는, 제1 동작모드에서 데이터 저장 기능을 수행하고, 제2 동작모드에서는 데이터 출력 기능을 수행한다. 구체적으로 루프-버퍼(140)는, 제1 동작모드에서 정정불능-에러 핸들러(121)로부터 발생되는 예비 페이크-커맨드 제어신호(pre CMD_F)를 입력받는다. 그리고 입력되는 예비 페이크-커맨드 제어신호(pre CMD_F)에 응답하여, 메모리 미디어(110)로부터 입력되는 리드 데이터(DATA_R)를 저장한다. 루프-버퍼(140)는, 제2 동작모드에서 페이크-커맨드 발생기(122)로부터 발생되는 페이크-커맨드(CMD_F)를 입력받는다. 그리고 입력되는 페이크-커맨드(CMD_F)에 응답하여, 루프-버퍼(140) 내에 저장되어 있는 리드 데이터(DATA_R)를 ECC 디코더(160)로 입력시킨다.
ECC 디코더(160)는, 입력되는 리드 데이터(DATA_R)에 대한 ECC 디코딩을 수행하여, 리드 데이터(DATA_R)에 대한 에러를 검출하고, 에러가 검출되는 경우 에러를 정정한다. 일 예에서 ECC 디코더(160)에 의해 수행되는 ECC 디코딩은, 심볼(symbol) 단위로 에러정정을 수행하는 RS(Reed-Solomon) 코딩방법을 이용하여 수행될 수 있다. ECC 디코더(160)에 의해 수행되는 ECC 디코딩은, 제1 동작모드 및 제2 동작모드에서 서로 다른 방식으로 수행된다. 제1 동작모드에서, ECC 디코더(160)는, 메모리 미디어(110)로부터 리드 데이터(DATA_R)를 입력받는다. 이 경우 ECC 디코더(160)에 의해 수행되는 ECC 디코딩은, 일반적인 RS 알고리즘 방식을 이용하여 수행할 수 있다. 본 예에서 "일반적인 RS 알고리즘 방식의 ECC 디코딩"은, 심볼들을 소거시키지 않은 상태에서 리드 데이터(DATA_R)에 포함되어 있는 패리티 심볼들(parity symbols)만을 이용하여 에러 위치 검출 및 에러 정정을 수행하는 ECC 디코딩 방식으로 정의될 수 있다. 이 경우 에러가 정정될 수 있는 심볼들의 개수, 즉 에러정정능력(error correction capability)은, 패리티 심볼들의 개수에 의해 정해질 수 있다. 제2 동작모드에서, ECC 디코더(160)는, 루프-버퍼(140) 내에 저장되어 있던 리드 데이터(DATA_R)를 입력받는다. 이 경우 ECC 디코더(160)는, 리드 데이터(DATA_R)에 대한 ECC 디코딩을 RS 이레이저-루프 방법을 사용하여 수행한다. 본 예에서 "RS 이레이저-루프 방법의 ECC 디코딩"은, 심볼들을 순차적으로 소거시키면서 에러 위치 검출 및 에러 정정을 수행하는 ECC 디코딩 방식으로 정의될 수 있다.
도 2는 본 개시에 따른 메모리 시스템(100)의 정상 리드 동작 또는 리트라이 동작의 일 예를 나타내 보인 블록도이다. 도 2에서 도 1과 동일한 참조부호는 동일한 구성요소를 나타낸다. 도 2를 참조하면, 정상 리드 동작 또는 리트라이 동작에서, 메모리 시스템(100)은 메모리 미디어(110)로부터 리드 데이터(DATA_R)를 액세스한다. 일 예에서 정상 리드 동작은, 호스트(host)로부터 메모리 미디어(110)에 대한 리드 커맨드(CMD_R)가 발생되는 경우 수행될 수 있다. 일 예에서 리트라이 동작은, 정상 리드 동작에서 메모리 미디어(110)로부터 읽은 리드 데이터에 대한 ECC 디코딩 결과, 리드 데이터(DATA_R)의 에러가 정정되지 않은 경우 수행될 수 있다. 이 경우 리트라이 동작을 유도하는 리트라이 제어신호(CS_RETRY)는 정정불능-에러 핸들러(121)로부터 발생될 수 있다. 일 예에서 리트라이 동작 과정에서는, 리드 데이터(DATA_R)에 대한 에러 정정을 위해, 리드 전압을 변동시키면서 리드 동작을 반복적으로 수행하는 전압 구분(VDM; Voltage DeMarcation) 방법을 적용할 수 있다.
정상 리드 동작 또는 리트라이 동작에 의해 메모리 미디어(110)로부터 읽은 리드 데이터(DATA_R)는 ECC 디코더(160)에 입력된다. 정상 리드 동작 또는 리트라이 동작에서 루프-버퍼(140)는 데이터를 입력받거나 출력하지 않는다. ECC 디코더(160)는, 입력되는 리드 데이터(DATA_R)에 대한 ECC 디코딩을 수행하고, 그 결과를 정정불능-에러 핸들러(121)에 입력시킨다. 정상 리드 동작 또는 리트라이 동작에서, ECC 디코딩은, 일반적인 RS 알고리즘 방식을 이용하여 수행할 수 있다.
ECC 디코더(160)에 의해 ECC 디코딩된 리드 데이터(DATA_R_D)는 정정불능-에러 핸들러(121)로 입력된다. 정정불능-에러 핸들러(121)는, 입력되는 ECC 디코딩된 리드 데이터(DATA_R_D)에 대한 에러 정정 유무를 판정한다. ECC 디코딩된 리드 데이터(DATA_R_D)의 에러가 모두 정정되었으면, 정정불능-에러 핸들러(121)는 ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트로 전송하고, 메모리 미디어(110)에 대한 리드 동작을 종료한다. 반면에 ECC 디코딩된 리드 데이터(DATA_R_D)의 에러가 정정되지 않았으면, 정정불능-에러 핸들러(121)는 제1 동작모드를 결정하고, 그에 따른 제어동작을 수행한다.
도 3은 본 개시에 따른 메모리 시스템(100)의 제1 동작모드에서의 동작의 일 예를 나타내 보인 블록도이다. 도 3에서 도 1과 동일한 참조부호는 동일한 구성요소를 나타낸다. 도 3을 참조하면, 제1 동작모드가 결정되면, 정정불능-에러 핸들러(121)는 예비 페이크-커맨드 제어신호(pre CMD_F)를 출력한다. 예비 페이크-커맨드 제어신호(pre CMD_F)는, 메모리 미디어(110) 및 루프-버퍼(140)로 전송된다. 메모리 미디어(110)는, 예비 페이크-커맨드 제어신호(pre CMD_F)에 응답하여 리드 데이터(DATA_R)를 루프-버퍼(140) 및 ECC 디코더(160)에 입력시킨다. 메모리 미디어(110)로부터 루프-버퍼(140)로의 리드 데이터(DATA_R) 전송과, 메모리 미디어(110)로부터 ECC 디코더(160)로의 리드 데이터(DATA_R) 전송은, 동시에 수행되거나, 또는 순차적으로 수행될 수 있다.
예비 페이크-커맨드 제어신호(pre CMD_F) 및 리드 데이터(DATA_R)를 입력받은 루프-버퍼(140)는, 리드 데이터(DATA_R)를 저장할 뿐, 출력하지는 않는다. 따라서 제1 동작모드에서, ECC 디코더(160)는 메모리 미디어(110)로부터 액세스한 리드 데이터(DATA_R)를 입력받는다. ECC 디코더(160)는, 메모리 미디어(110)로부터 액세스한 리드 데이터(DATA_R)에 대한 ECC 디코딩을 수행하고, 그 결과를 정정불능-에러 핸들러(121)에 입력시킨다. 정상 리드 동작 또는 리트라이 동작에서와 마찬가지로 제1 동작모드에서, ECC 디코딩은, 일반적인 RS 알고리즘 방식을 이용하여 수행할 수 있다.
제1 동작모드에서, ECC 디코더(160)에 의해 ECC 디코딩된 리드 데이터(DATA_R_D)는 정정불능-에러 핸들러(121)로 입력된다. 정정불능-에러 핸들러(121)는, 입력되는 ECC 디코딩된 리드 데이터(DATA_R_D)에 대한 에러 정정 유무를 판정한다. ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 모두 정정된 데이터인 경우, 정정불능-에러 핸들러(121)는 ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트로 전송한다. 그리고 메모리 미디어(110)에 대한 리드 동작을 종료한다. 반면에 ECC 디코딩된 리드 데이터(DATA_R_D)가 에러 정정이 이루어지지 않은 상태인 경우, 정정불능-에러 핸들러(121)는 제2 동작모드를 결정한다.
도 4는 본 개시에 따른 메모리 시스템(100)의 제2 동작모드에서의 동작의 일 예를 나타내 보인 블록도이다. 도 4에서 도 1과 동일한 참조부호는 동일한 구성요소를 나타낸다. 도 4를 참조하면, 제2 동작모드가 결정되면, 정정불능-에러 핸들러(121)는, 페이크-커맨드 제어신호(CS_CMD_F)를 발생시킨다. 페이크-커맨드 제어신호(CS_CMD_F)는 페이크-커맨드 발생기(122)로 입력된다. 페이크-커맨드 발생기(122)는, 페이크-커맨드 제어신호(CS_CMD_F)에 응답하여, 페이크-커맨드(CMD_F)를 출력한다. 페이크-커맨드(CMD_F)는, 루프-버퍼(140) 및 ECC 디코더(160)에 입력된다. 페이크-커맨드(CMD_F)를 입력받은 루프-버퍼(140)는, 이전의 제1 동작모드에서 루프-버퍼(140) 내에 저장시킨 리드 데이터(DATA_R)를 ECC 디코더(160)로 전송한다. 페이크-커맨드(CMD_F)가 발생되는 제2 동작모드에서 메모리 미디어(110)에 대한 액세스 동작은 차단되며, 이에 따라 제2 동작모드에서 메모리 미디어(110)에 대한 리드 동작 및 라이트 동작은 이루어지지 않는다.
ECC 디코더(160)는, 루프-버퍼(140)로부터 입력되는 리드 데이터(DATA_R)에 대한 ECC 디코딩을 수행하고, 그 결과를 정정불능-에러 핸들러(121)에 입력시킨다. 제2 동작모드에서, ECC 디코딩은, 이레이저-루프 방법을 이용하여 수행될 수 있다. 이레이저-루프 방법을 이용한 ECC 디코딩은, 리드 데이터(DATA_R)로부터 구성되는 심볼들 중 일부 심볼들을 순차적으로 소거시킨 상태에서 RS 코드 방식으로 디코딩을 수행함으로써 수행될 수 있다. 이레이저-루프 방법을 이용한 ECC 디코딩은, 에러 정정이 이루어지거나, 심볼 소거가 모든 심볼들에 대해 적용될 때까지 반복적으로 수행된다.
ECC 디코더(160)로부터 출력되는 이레이저-루프 방식의 ECC 디코딩된 리드 데이터(DATA_R_ERD)는 정정불능-에러 핸들러(121)로 입력된다. 정정불능-에러 핸들러(121)는, 입력되는 이레이저-루프 방식의 ECC 디코딩된 리드 데이터(DATA_R_ERD)에 대한 에러 정정 유무를 판정한다. 이레이저-루프 방식의 ECC 디코딩된 리드 데이터(DATA_R_ERD)가 에러가 모두 정정된 데이터인 경우, 정정불능-에러 핸들러(121)는 이레이저-루프 방식의 ECC 디코딩된 리드 데이터(DATA_R_ERD)를 호스트로 전송한다. 반면에 이레이저-루프 방식의 ECC 디코딩된 리드 데이터(DATA_R_ERD)가 에러 정정이 이루어지지 않은 상태인 경우, 정정불능-에러 핸들러(121)는 최종 불량(fail)을 결정한다.
도 5는 본 개시에 따른 메모리 시스템(200)의 다른 예를 나타내 보인 블록도이다. 도 6은 도 5의 메모리 미디어(210)의 일 예를 나타내 보인 도면이다. 그리고 도 7 및 도 8은 각각 도 5의 루프-버퍼 및 루프-카운터 구성의 일 예를 나타내 보인 도면들이다. 먼저 도 5를 참조하면, 메모리 시스템(200)은, 메모리 미디어(210), 커맨드 컨트롤 유닛(CCU; Command Control Unit)(220), 메모리 인터페이스 로직(230), 루프-버퍼(loop-buffer)(240), 루프-카운터(loop-counter)(250), ECC 디코더(260), 및 멀티플렉서(multiplexer)(270)을 포함할 수 있다. 메모리 미디어(210)는, 도 6에 나타낸 바와 같이, 복수개, 예컨대 11개의 메모리 칩들(210_0, 210_1, 210_2, …, 201_10)을 포함할 수 있다. 메모리 칩들(210_0, 210_1, 210_2, …, 201_10) 각각은, 예컨대 128비트(bits)의 데이터 액세스 단위를 갖는다. 즉 제1 메모리 칩(210_0)으로부터 128비트의 제1 데이터(DATA_0)가 액세스될 수 있다. 제2 메모리 칩(210_1)으로부터도 128비트의 제2 데이터(DATA_1)가 액세스될 수 있다. 제3 메모리 칩(210_2)으로부터도 128비트의 제3 데이터(DATA_2)가 액세스될 수 있다. 마찬가지로 제11 메모리 칩(210_10)으로부터도 128비트의 제11 데이터(DATA_10)가 액세스될 수 있다. 메모리 칩들(210_0, 210_1, 210_2, …, 201_10) 각각으로부터 액세스되는 제1 내지 제11 데이터(DATA_0-DATA_10)는 리드 데이터(DATA_R)를 구성한다. 즉 메모리 미디어(210)에 대한 리드 동작에 의해 메모리 미디어(210)로부터 액세스되는 리드 데이터(DATA_R)는, 메모리 칩들(210_0, 210_1, 210_2, …, 201_10) 각각에 분산되어 저장되어 있는 128비트의 제1 내지 제11 데이터(DATA_0-DATA_10)로 구성된다. 따라서 한번의 리드 동작에 의해 메모리 미디어(210)로부터 액세스되는 리드 데이터(DATA_R)는 176B의 용량을 갖는다.
커맨드 컨트롤 유닛(220)은, 호스트(290)로부터의 리드 커맨드(CMD_R)를 미디어 스케줄링 로직(280)로 전송하거나, 또는 리드 데이터(DATA_R)에 대한 ECC 디코딩 과정을 제어하는 제어신호들 및 페이크-커맨드를 발생시킨다. 일 예에서 커맨드 컨트롤 유닛(220)은, 정정불능-에러 핸들러(221) 및 페이크-커맨드 발생기(222)를 포함하여 구성될 수 있다. 정정불능-에러 핸들러(221)는, 정상 리드 동작에서의 ECC 디코딩된 리드 데이터(DATA_R_D)의 에러가 정정된 경우, ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트(290)로 전송한다. 반면에 정상 리드 동작에서의 ECC 디코딩된 리드 데이터(DATA_R_D)의 에러가 정정되지 않은 경우, 리트라이 제어신호(CS_RETRY)를 발생시키거나, 또는 예비 페이크-커맨드 제어신호(pre CMD_F)를 발생시킨다.
리트라이 제어신호(CS_RETRY)가 발생되면, 리트라이 동작이 수행되고, 예비 페이크-커맨드 제어신호(pre CMD_F)가 발생되면 제1 동작모드의 동작이 수행된다. 일 예에서 예비 페이크-커맨드 제어신호(pre CMD_F)는 첫번째 리트라이 제어신호(CS_RETRY)와 함께 발생될 수 있다. 다른 예에서 예비 페이크-커맨드 제어신호(pre CMD_F)는 리트라이 제어신호(CS_RETRY)에 따른 리트라이 동작들 중 마지막 리트라이 동작을 위한 리트라이 제어신호(CS_RETRY)와 함께 발생될 수도 있다. 또 다른 예에서, 예비 페이크-커맨드 제어신호(pre CMD_F)는 리트라이 제어신호(CS_RETRY)가 발생될 때마다, 리트라이 제어신호(CS_RETRY)와 함께 발생될 수도 있다. 또 다른 예에서, 예비 페이크-커맨드 제어신호(pre CMD_F)는 정상 리드 동작에서의 리드 커맨드(CMD_R)의 전송과 함께 발생될 수도 있다. 리트라이 제어신호(CS_RETRY) 또는 예비 페이크-커맨드 제어신호(pre CMD_F)는 미디어 스케줄링 로직(280)을 통해 메모리 인터페이스 로직(230)으로 전송된다.
정정불능-에러 핸들러(221)는, 제1 동작모드에서 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)에 대한 ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정된 상태인 경우, ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트(290)로 전송한다. 반면에 제1 동작모드에서의 ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정되지 않은 상태인 경우, 제2 동작모드에서의 동작을 위한 페이크-커맨드 제어신호(CS_CMD_F)를 발생시킨다. 페이크-커맨드 제어신호(CS_CMD_F)는 페이크-커맨드 발생기(222)로 입력된다. 페이크-커맨드 발생기(222)는, 페이크-커맨드 제어신호(CS_CMD_F)에 응답하여 페이크-커맨드(CMD_F)를 출력시킨다. 페이크-커맨드(CMD_F)는 미디어 스케줄링 로직(280)을 경유하여 메모리 인터페이스 로직(230)으로 전송된다.
메모리 인터페이스 로직(230)은, 메모리 미디어(210)에 대한 액세스 과정에서의 타이밍을 제어하고, 여러 제어신호들을 발생시킬 수 있다. 정상 리드 동작에서, 메모리 인터페이스 로직(230)은, 호스트(290)로부터 커맨드 컨트롤 유닛(220) 및 미디어 스케줄링 로직(280)을 경유하여 전송되는 리드 커맨드(CMD_R)에 응답하여, 메모리 미디어(210) 내의 리드 데이터(DATA_R)를 액세스한다. 리트라이 동작에서, 메모리 인터페이스 로직(230)은, 커맨드 컨트롤 유닛(220) 및 미디어 스케줄링 로직(280)을 경유하여 전송되는 리트라이 제어신호(CS_RETRY)에 응답하여, 메모리 미디어(210) 내의 리드 데이터(DATA_R)를 액세스한다. 리트라이 동작에서, 메모리 인터페이스 로직(230)은, 리드 전압을 변동시키면서 리드 동작을 수행하는 전압 구분(VDM) 방법을 적용할 수 있다. 제1 동작모드에서, 메모리 인터페이스 로직(230)은, 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)로부터 미디어 스케줄링 로직(280)을 경유하여 전송되는 예비 페이크-커맨드 제어신호(pre CMD_F)에 응답하여, 메모리 미디어(210)내의 리드 데이터(DATA_R)를 액세스한다. 제2 동작모드에서, 메모리 인터페이스 로직(230)은, 커맨드 컨트롤 유닛(220)의 페이크-커맨드 발생기(222)로부터 미디어 스케줄링 로직(280)을 경유하여 전송되는 페이크-커맨드(CMD_F)에 응답하여, 메모리 미디어(210)에 대한 모든 액세스를 차단한다.
정상 리드 동작, 리트라이 동작, 및 제1 동작모드에서, 메모리 인터페이스 로직(230)은, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 멀티플렉서(270)의 제1 입력단자로 입력시킨다. 제1 동작모드에서, 메모리 인터페이스 로직(230)은, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 멀티플렉서(270)의 제1 입력단자 외에 루프-버퍼(240)에도 입력시킨다. 일 예에서 메모리 인터페이스 로직(230)은, 제1 동작모드에서 멀티플렉서(270) 및 루프-버퍼(240)로의 리드 데이터(DATA_R) 전송을 동시에 수행할 수 있다. 다른 예에서 메모리 인터페이스 로직(230)은, 제1 동작모드에서 먼저 멀티플렉서(270)로 리드 데이터(DATA_R)를 전송한 후, 루프-버퍼(240)로 리드 데이터(DATA_R)를 전송할 수도 있다.
제1 동작모드에서, 메모리 인터페이스 로직(230)은, 제1 내지 제3 제어신호들(CS1, CS2, CS3)를 루프-버퍼(240), 루프-카운터(250), 및 ECC 디코더(260)에 입력시킨다. 제2 동작모드에서 메모리 인터페이스 로직(230)은, 페이크-커맨드(CMD_F)와 제1 내지 제3 제어신호들(CS1, CS2, CS3)을 루프-버퍼(240), 루프-카운터(250), 및 ECC 디코더(260)에 입력시킨다. 제2 동작모드에서, 메모리 인터페이스 로직(230)은, 페이크-커맨드(CMD_F)를 멀티플렉서(270)의 제어단자로도 입력시킨다. 제2 동작모드에서, 메모리 인터페이스 로직(230)은, 메모리 미디어(210)를 액세스하지 않으며, 이에 따라 리드 데이터(DATA_R)도 출력시키지 않는다.
일 예에서, 제1 제어신호(CS1)는, 제2 동작모드 여부를 나타내는 1비트의 이진값으로 구성될 수 있다. 일 예에서 제1 제어신호(CS1)가 이진값 "1"을 갖는 경우, 제2 동작모드, 즉 페이크-커맨드(CMD_F)가 발생된 상태를 나타낼 수 있다. 반면에 제1 제어신호(CS1)가 이진값 "0"을 갖는 경우, 제2 동작모드가 아닌 상태를 나타낼 수 있다. 제3 제어신호(CS3)는, 제1 동작모드 여부를 나타내는 1비트의 이진값으로 구성될 수 있다. 일 예에서 제3 제어신호(CS3)가 이진값 "1"을 갖는 경우, 제1 동작모드인 상태를 나타낼 수 있다. 반면에 제3 제어신호(CS3)가 이진값 "0"을 갖는 경우, 제1 동작모드가 아닌 상태를 나타낼 수 있다.
제2 제어신호(CS2)는, 인덱스(index)를 나타내는 이진값으로 구성될 수 있다. 인덱스는, 제1 동작모드에서 루프-버퍼(240) 내에 리드 데이터(DATA_R)가 저장되는 영역을 지정하고, 루프-카운터(250) 내에서 리셋되는 대상을 지정한다. 또한 인덱스는, 제2 동작모드에서 루프-버퍼(240) 내에서 출력될 리드 데이터(DATA_R)가 저장되는 영역을 지정하고, 루프-카운터(250) 내에서 출력될 카운팅값(COUNT_VALUE)을 갖는 대상을 지정한다. 제2 제어신호(CS2)를 구성하는 비트수는, 루프-버퍼(240) 내에서 리드 데이터(DATA_R)를 저장할 수 있는 저장공간의 개수에 따라 결정될 수 있다. 일 예에서 루프-버퍼(240) 내에서 리드 데이터(DATA_R)를 저장할 수 있는 저장공간들이 4개인 경우, 제2 제어신호(CS2)는 2비트의 이진값들로 구성될 수 있다.
루프-버퍼(240)는, 도 7에 나타낸 바와 같이, 복수개, 예컨대 제1 내지 제4 버퍼영역들(BR_0, BR_1, BR_2, BR_3)(241-244) 및 루프-버퍼 컨트롤러(255)를 포함하여 구성될 수 있다. 제1 내지 제4 버퍼영역들(241-244)은 고유의 인덱스(index)에 의해 상호 구분될 수 있다. 일 예에서 제1 내지 제4 버퍼영역들(241-244)은 각각 "00", "01", "10", "11"의 인덱스를 가질 수 있다. 제1 내지 제4 버퍼영역들(241-244) 각각은, 메모리 미디어(210)로부터 액세스되는 리드 데이터(DATA_R)를 저장할 수 있는 저장공간으로 기능한다. 도 6을 참조하여 설명한 바와 같이, 메모리 미디어(210)로부터 액세스되는 리드 데이터(DATA_R)가, 메모리 칩들(210_0, 210_1, 210_2, …, 201_10) 각각에 분산되어 저장되어 있는 각각이 128비트의 제1 내지 제11 데이터(DATA_0-DATA_10)로 구성되는 경우, 제1 내지 제4 버퍼영역들(241-244) 각각은, 제1 내지 제11 데이터(DATA_0-DATA_10)로 구성되는 176B의 리드 데이터(DATA_R)를 저장할 수 있다. 따라서 제1 내지 제4 버퍼영역들(241-244) 각각은, 리드 데이터(DATA_R)가 갖는 용량, 예컨대 176B보다 같거나 큰 저장 공간을 갖는다.
루프-버퍼(240)를 구성하는 루프-버퍼 컨트롤러(255)는, 루프-버퍼(240)로 입력되는 페이크-커맨드(CMD_F)와 제1 내지 제3 제어신호들(CS1, CS2, CS3)에 응답하여, 입력되는 리드 데이터(DATA_R)를 지정된 인덱스를 갖는 버퍼영역에 저장하거나, 또는 지정된 인덱스를 갖는 버퍼영역에 저장된 리드 데이터(DATA_R)를 액세스하여 출력시키는 동작을 제어한다. 이와 같은 루프-버퍼 컨트롤러(255)의 제어동작에 의해, 루프-버퍼(240)는 제1 동작모드 및 제2 동작모드에서만 동작되며, 정상 리드 동작 및 리트라이 동작 과정에서는 동작되지 않는다.
루프-버퍼 컨트롤러(255)는, 제1 동작모드 여부를 제3 제어신호(CS3)를 통해 파악할 수 있다. 예컨대 메모리 인터페이스 로직(230)으로부터 제3 제어신호(CS3)로서 제1 동작모드를 나타내는 이진값, 예컨대 "1"이 입력되면, 루프-버퍼 컨트롤러(255)는 리드 데이터(DATA_R)의 저장 동작을 수행한다. 이때 리드 데이터(DATA_R)가 저장되는 버퍼영역은 제2 제어신호(CS2)가 갖는 이진값에 의해 정해질 수 있다. 예컨대 제3 제어신호(CS3) 및 제2 제어신호(CS2)로서 각각 "1" 및 "10"의 이진값이 전송되면, 루프-버퍼 컨트롤러(255)는, 제1 동작모드 상태로 인식하고, 메모리 미디어(210)로부터 메모리 인터페이스 로직(230)을 통해 입력되는 리드 데이터(DATA_R)를 루프-버퍼(240) 내의 제1 내지 제4 버퍼영역들(241-244) 중 인덱스 "10"를 갖는 제3 버퍼영역(243) 내에 저장시킨다.
루프-버퍼 컨트롤러(255)는, 제2 동작모드 여부를 페이크-커맨드(CMD_F) 및 제1 제어신호(CS1)를 통해 파악할 수 있다. 예컨대 메모리 인터페이스 로직(230)으로부터 제1 제어신호(CS1)로서 제2 동작모드를 나타내는 이진값, 예컨대 "1"이 입력되고, 페이크-커맨드(CMD_F)가 입력되면, 루프-버퍼 컨트롤러(255)는 리드 데이터(DATA_R)의 출력 동작을 수행한다. 이때 출력되는 리드 데이터(DATA_R)가 저장되는 버퍼영역은 제2 제어신호(CS2)가 갖는 이진값에 의해 정해질 수 있다. 예컨대 페이크-커맨드(CMD_F)와 함께 제1 제어신호(CS1) 및 제2 제어신호(CS2)로서 각각 "1" 및 "10"의 이진값이 전송되면, 루프-버퍼 컨트롤러(255)는, 제2 동작모드 상태로 인식하고, 루프-버퍼(240) 내의 제1 내지 제4 버퍼영역들(241-244) 중 인덱스 "10"를 갖는 제3 버퍼영역(243) 내에 저장되어 있는 리드 데이터(DATA_R)를 출력시킨다.
루프-카운터(250)는, 도 8에 나타낸 바와 같이, 복수개, 예컨대 제1 내지 제4 카운터들(COUNT_0, COUNT_1, COUNT_2, COUNT_3)(251-254) 및 루프-카운터 컨트롤러(255)를 포함하여 구성될 수 있다. 제1 내지 제4 카운터들(251-254)은 고유의 인덱스(index)에 의해 상호 구분될 수 있다. 일 예에서 제1 내지 제4 카운터들(251-254)은 각각 "00", "01", "10", "11"의 인덱스를 가질 수 있다. 제1 내지 제4 카운터들(251-254) 각각이 갖는 인덱스는, 루프-버퍼(240)의 제1 내지 제4 버퍼영역들(241-244) 각각이 갖는 인덱스에 대응된다. 이에 따라 루프-카운터(250) 내의 카운터들(251-254)의 개수는 루프-버퍼(240) 내의 버퍼영역들(241-244)의 개수와 일치한다. 구체적으로 제1 카운터(251)는 루프-버퍼(240)의 제1 버퍼영역(241)에 대한 카운팅 동작을 수행한다. 제2 카운터(252)는 루프-버퍼(240)의 제2 버퍼영역(242)에 대한 카운팅 동작을 수행한다. 제3 카운터(253)는 루프-버퍼(240)의 제3 버퍼영역(243)에 대한 카운팅 동작을 수행한다. 그리고 제4 카운터(254)는 루프-버퍼(240)의 제4 버퍼영역(244)에 대한 카운팅 동작을 수행한다.
루프-카운터(250)를 구성하는 루프-카운터 컨트롤러(245)는, 루프-카운터(250)로 입력되는 페이크-커맨드(CMD_F)와 제1 내지 제3 제어신호들(CS1, CS2, CS3)에 응답하여, 제1 내지 제4 카운터들(251-254) 중 제2 제어신호(CS2)의 인덱스에 의해 지정된 카운터에 대한 리셋동작 또는 카운팅값(COUNT_VALUE) 출력/카운팅 동작이 수행되도록 한다. 루프-카운터 컨트롤러(255)에 의해 루프-카운터(250)는 제1 동작모드 및 제2 동작모드에서 동작이 수행되고, 정상 리드 동작 및 리트라이 동작 과정에서는 동작되지 않는다.
루프-카운터 컨트롤러(255)는, 제1 동작모드 여부를 제3 제어신호(CS3)를 통해 파악할 수 있다. 예컨대 메모리 인터페이스 로직(230)으로부터 제3 제어신호(CS3)로서 제1 동작모드를 나타내는 이진값, 예컨대 "1"이 입력되면, 루프-카운터 컨트롤러(255)는 제1 내지 제4 카운터들(251-254) 중 인덱스에 의해 지정된 카운터에 대한 리셋 동작을 수행한다. 리셋 동작이 수행된 카운터의 카운팅값(COUNT_VALUE)은 초기화된다. 예컨대 제3 제어신호(CS3) 및 제2 제어신호(CS2)로서 각각 "1" 및 "10"의 이진값이 전송되면, 루프-카운터 컨트롤러(255)는, 제1 동작모드 상태로 인식하고, 루프-카운터(250) 내의 제1 내지 제4 카운터들(251-254) 중 인덱스 "10"를 갖는 제3 카운터(253)를 리셋시킨다.
루프-카운터 컨트롤러(255)는, 제2 동작모드 여부를 페이크-커맨드(CMD_F) 및 제1 제어신호(CS1)를 통해 파악할 수 있다. 예컨대 메모리 인터페이스 로직(230)으로부터 제1 제어신호(CS1)로서 제2 동작모드를 나타내는 이진값, 예컨대 "1"이 입력되고, 페이크-커맨드(CMD_F)가 입력되면, 루프-카운터 컨트롤러(255)는 제1 내지 제4 카운터들(251-254) 중 인덱스에 의해 지정된 카운터에 대한 카운팅값 출력/카운팅 동작을 수행한다. 예컨대 페이크-커맨드(CMD_F)와 함께 제1 제어신호(CS1) 및 제2 제어신호(CS2)로서 각각 "1" 및 "10"의 이진값이 전송되면, 루프-카운터 컨트롤러(255)는, 제2 동작모드 상태로 인식하고, 인덱스 "10"를 갖는 제3 카운터(253)의 카운팅값(COUNT_VALUE)을 출력시키고, 제3 카운터(253)의 카운팅값(COUNT_VALUE)을 "1" 증가시키는 카운팅 동작을 수행한다. 본 예에서는 카운터의 카운팅값이 루프-카운터 컨트롤러(245)를 통해 출력되는 것을 예로 들었지만, 이는 하나의 예시로서, 카운터의 카운팅값이 카운터로부터 직접 출력되고, 단지 카운터에 대한 카운팅 동작만 루프-카운터 컨트롤러(245)에 의해 수행될 수도 있다.
제1 내지 제4 카운터들(251-254) 각각의 카운팅값(COUNT_VALUE)은, 제2 동작모드에서 이레이저-루프 방식의 ECC 디코딩을 수행하는 과정에서 이레이즈될 심볼들을 나타낼 수 있다. 도 6을 참조하여 설명한 바와 같이, 메모리 미디어(210)로부터 액세스되는 리드 데이터(DATA_R)은 제1 내지 제11 메모리칩들(210_0, 210_1, 210_2, …, 210_10) 각각으로부터 액세스되는 제1 내지 제11 데이터(DATA_0, DATA_1, DATA_2, …, DATA_10)로 구성된다. 리드 데이터(DATA_R)에 대한 이레이저-루프 방식의 ECC 디코딩은, 에러 정정이 이루어지기 전까지는 적어도 리드 데이터(DATA_R)를 구성하는 제1 내지 제11 데이터(DATA_0, DATA_1, DATA_2, …, DATA_10)의 개수와 동일한 횟수만큼 수행될 수 있다. 이에 따라 이레이즈되는 심볼들을 변경하면서 순차적으로 첫번째 루프의 ECC 디코딩부터 열한번째 루프의 ECC 디코딩까지 모두 11번의 ECC 디코딩이 수행된다.
구체적으로 첫번째 루프의 ECC 디코딩은, 첫번째 메모리 칩(210_0)으로부터 액세스한 제1 데이터(DATA_0)로 구성되는 제1 심볼들을 소거한 상태에서 수행된다. 이 경우, 루프-카운터(250)로부터 출력되는 카운팅값(COUNT_VALUE)은, 소거될 제1 심볼들을 지정하는 이진값으로 구성된다. 다음에 두번째 루프의 ECC 디코딩은, 두번째 메모리 칩(210_1)으로부터 액세스한 제2 데이터(DATA_1)로 구성되는 제2 심볼들을 소거한 상태에서 수행된다. 이 경우, 루프-카운터(250)로부터 출력되는 카운팅값(COUNT_VALUE)은, 소거될 제2 심볼들을 지정하는 이진값으로 구성된다. 마찬가지로 세번째 루프의 ECC 디코딩은, 세번째 메모리 칩(210_2)으로부터 액세스한 제3 데이터(DATA_2)로 구성되는 제3 심볼들을 소거한 상태에서 수행된다. 이 경우, 루프-카운터(250)로부터 출력되는 카운팅값(COUNT_VALUE)은, 소거될 제3 심볼들을 지정하는 이진값으로 구성된다. 이와 같은 방식으로 네번째 내지 열한번째 루프의 ECC 디코딩이 수행될 때마다, 루프-카운터(250)로부터 소거될 심볼들을 지정하는 이진값으로 구성되는 카운팅값(COUNT_VALUE)이 출력된다.
제1 내지 제4 카운터(251-254) 각각이 갖는 카운팅값(COUNT_VALUE)을 구성하는 이진값의 비트수는 이레이저-루프 방식의 ECC 디코딩이 수행되는 횟수에 따라 결정된다. 본 예에서와 같이, 첫번째 루프의 ECC 디코딩부터 열한번째 ECC 디코딩까지 ECC 디코딩 횟수가 11번인 경우, 모든 소거될 심볼들을 지정하기 위해, 카운팅값(COUNT_VALUE)은, 4비트의 이진값으로 구성된다. 이 경우 "0000"의 카운팅값(COUNT_VALUE)은, 첫번째 메모리 칩(210_0)으로부터 액세스한 제1 데이터(DATA_0)로 구성되는 제1 심볼들을 지정할 수 있다. "0001"의 카운팅값(COUNT_VALUE)은, 두번째 메모리 칩(210_1)으로부터 액세스한 제2 데이터(DATA_1)로 구성되는 제2 심볼들을 지정할 수 있다. 이와 같은 식으로 "1010"의 카운팅값(COUNT_VALUE)은, 열한번째 메모리 칩(210_10)으로부터 액세스한 제11데이터(DATA_10)로 구성되는 제11 심볼들을 지정할 수 있다.
ECC 디코더(260)는, 도면에 나타내지는 않았지만 일반적으로 알려진 바와 같이, 신드롬 연산기, 에러 위치 다항식 연산기, 에러 위치 연산기, 및 에러 정정기를 포함하여 구성될 수 있다. ECC 디코더(260)는 입력되는 리드 데이터(DATA_R)에 대한 ECC 디코딩을 수행하여, 리드 데이터(DATA_R)에 포함되어 있는 에러가 정정되도록 한다. ECC 디코더(260)는, 멀티플렉서(270)로부터 리드 데이터(DATA_R)를 입력받는다. ECC 디코더(260)는, ECC 디코딩된 리드 데이터(DATA_R_D)를 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)로 입력시킨다. ECC 디코더(260)는, 메모리 인터페이스 로직(230)으로부터 페이크-커맨드(CMD_F) 및 제1 내지 제3 제어신호들(CS1, CS2, CS3)을 입력받을 수 있다. ECC 디코더(260)는, 루프-카운터(250)로부터 카운팅값(COUNT_VALUE)을 입력받을 수 있다.
정상 리드 동작, 리트라이 동작, 및 제1 동작모드에서, ECC 디코더(260)는, 멀티플렉서(270)로부터 입력되는 리드 데이터(DATA_R)에 대한 ECC 디코딩을 수행한다. 이 경우 ECC 디코딩은, 일반적인 RS 알고리즘 방식을 이용하여 수행된다. 도 8을 참조하여 설명한 바와 같이, 루프-카운터(250)로부터의 카운팅값(COUNT_VALUE)은 정상 리드 동작, 리트라이 동작, 및 제1 동작모드에서 발생되지 않는다. 따라서 정상 리드 동작, 리트라이 동작, 및 제1 동작모드에서, ECC 디코더(260)는, 이레이저-루프 방식이 아닌 일반적인 RS 알고리즘 방식을 이용한 ECC 디코딩만을 수행한다. 제2 동작모드에서, ECC 디코더(260)는, 멀티플렉서(270)로부터 입력되는 리드 데이터(DATA_R)에 대한 이레이저-루프 방식의 ECC 디코딩을 수행한다. 제2 동작모드에서, ECC 디코더(260)는, 루프-카운터(250)로부터 입력되는 카운팅값(COUNT_VALUE)에 의해 지정되는 심볼들을 소거한 상태에서 ECC 디코딩을 수행한다. 이레이저-루프 방식의 ECC 디코딩이 수행되는 제2 동작모드는, 이레이저-루프 방식의 ECC 디코딩 과정에서 에러가 정정되거나, 또는 모든 루프의 ECC 디코딩이 수행된 후 에러 정정 불능으로 최종 판정될 때까지 유지될 수 있다.
멀티플렉서(270)는, 제1 입력단자(도면에서 "0"으로 표시) 및 제2 입력단자(도면에서 "1"로 표시)를 갖는다. 멀티플렉서(270)는 제1 입력단자("0")를 통해 메모리 미디어(210)로부터 액세스된 리드 데이터(DATA_R)를 입력받는다. 멀티플렉서(270)는 제2 입력단자("1")를 통해 루프-버퍼(240)에 저장되어 있는 리드 데이터(DATA_R)를 입력받는다. 멀티플렉서(270)는 제어단자를 통해 입력되는 페이크-커맨드(CMD_F)의 유무에 따라 제1 입력단자("0")로 입력되는 리드 데이터(DATA_R)와 제2 입력단자("1")로 입력되는 리드 데이터(DATA_R)를 선택적으로 출력하여 ECC 디코더(260)로 입력시킨다. 구체적으로 멀티플렉서(270)의 제어단자로 페이크-커맨드(CMD_F)가 입력되지 않는 경우, 멀티플렉서(270)는 제1 입력단자("0")로 입력되는 리드 데이터(DATA_R)를 출력시킨다. 페이크-커맨드(CMD_F)는 제2 동작모드에서 발생되므로, 정상 리드 동작, 리트라이 동작, 및 제1 동작모드에서는 멀티플렉서(270)를 통해 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)가 출력된다. 반면에 멀티플렉서(270)의 제어단자로 페이크-커맨드(CMD_F)가 입력되는 경우, 멀티플렉서(270)는 제2 입력단자("1")로 입력되는 리드 데이터(DATA_R)를 출력시킨다. 페이크-커맨드(CMD_F)는 제2 동작모드에서 발생되므로, 제2 동작모드에서는 멀티플렉서(270)를 통해 루프-버퍼(240)에 저장되어 있는 리드 데이터(DATA_R)가 출력된다.
일 예에서 메모리 시스템(200)은 미디어 스케줄링 로직(280)을 더 포함할 수 있다. 미디어 스케줄링 로직(280)은, 커맨드 컨트롤 유닛(220)으로부터의 커맨드들 및 제어신호들을 입력받고, 메모리 미디어(210)의 상태에 따라 적절한 타이밍에 메모리 인터페이스 로직(230)에 전달되도록 한다. 구체적으로 미디어 스케줄링 로직(280)은, 커맨드 컨트롤 유닛(220)을 통해 호스트(290)로부터 전송되는 리드 커맨드 및 라이트 커맨드를 메모리 인터페이스 로직(230)에 전송할 수 있다. 미디어 스케줄링 로직(280)은, 커맨드 컨트롤 유닛(220)의 페이크-커맨드 발생기(222)로부터 전송되는 페이크-커맨드(CMD_F)를 메모리 인터페이스 로직(230)에 전송할 수 있다. 미디어 스케줄링 로직(280)은, 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)로부터 전송되는 리트라이 제어신호(CS_RETRY) 및 예비 페이크-커맨드 제어신호(pre CMD_F)를 메모리 인터페이스 로직(230)에 전송할 수 있다.
도 9 및 도 10은 각각 본 개시에 따른 메모리 시스템(200)의 정상 리드 동작을 설명하기 위해 나타내 보인 플로챠트 및 블록도이다. 도 10에서 도 5와 동일한 참조부호는 동일한 구성요소를 나타낸다. 도 9 및 도 10을 참조하면, 단계 311에서, 호스트(290)로부터 리드 커맨드(CMD_R)이 발생되면, 메모리 시스템(200)은 정상 리드 동작모드에서의 동작을 수행한다. 구체적으로 호스트(290)로부터 리드 커맨드(CMD_R)를 전송받은 커맨드 컨트롤 유닛(220)은 미디어 스케줄링 로직(280)을 통해 메모리 인터페이스 로직(230)으로 리드 커맨드(CMD_R)를 전송한다. 이 과정에서, 미디어 스케줄링 로직(280)은, 호스트(290)로부터 전송받은 리드 커맨드(CMD_R)를 메모리 인터페이스 로직(230)에서 처리할 수 있는 형태로 변경시킬 수 있다. 비록 도면에 나타내지는 않았지만, 호스트(290)는 리드 커맨드(CMD_R)와 함께 어드레스(address)를 함께 전송할 수도 있다.
단계 312에서, 메모리 인터페이스 로직(230)은, 전송받은 리드 커맨드(CMD_R)에 응답하여 메모리 미디어(210)를 액세스한다. 이 과정은, 도 6을 참조하여 설명한 바와 같이, 메모리 미디어(210)를 구성하는 복수개, 예컨대 11개의 메모리 칩들(210_0-210_10)을 액세스하여 수행될 수 있다. 구체적으로 메모리 인터페이스 로직(230)은, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 멀티플렉서(270)를 통해 ECC 디코더(260)로 전송한다. 메모리 인터페이스 로직(230)은, 리드 데이터(DATA_R)를 멀티플렉서(270)의 제1 입력단자("0")로 입력시키면서 제1 제어신호(CS1)로서 이진값 "0" 및 제3 제어신호(CS3)로서 이진값 "0"을 루프-버퍼(240), 루프-카운터(250), 및 ECC 디코더(260)에 입력시킨다. 제1 제어신호(CS1) 및 제3 제어신호(CS3)가 모두 "0"의 이진값을 가지므로, 루프-버퍼(240) 및 루프-카운터(250)은 동작하지 않는다. 멀티플렉서(270)의 제어단자로 페이크-커맨드가 입력되지 않음에 따라, 멀티플렉서(270)는 제1 입력단자("0")로 입력된 리드 데이터(DATA_R)를 출력하여 ECC 디코더(260)로 입력시킨다.
단계 313에서, ECC 디코더(260)는, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)에 대해 ECC 디코딩을 수행한다. 이 과정에서 ECC 디코딩은 일반적인 RS 알고리즘 방식을 이용하여 수행된다. ECC 디코더(260)는, ECC 디코딩을 수행하여 ECC 디코딩된 리드 데이터(DATA_R_D)를 출력시킨다. ECC 디코딩된 리드 데이터(DATA_R_D)는 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)로 입력된다. ECC 디코더(260)는, ECC 디코딩된 리드 데이터(DATA_R_D) 외에 제1 제어신호(CS1) 및 제3 제어신호(CS3)도 함께 정정불능-에러 핸들러(221)로 전송할 수 있다.
단계 314에서, ECC 디코딩된 리드 데이터(DATA_R_D)를 입력받은 정정불능-에러 핸들러(221)는 에러가 정정되었는지의 여부를 판단한다. 단계 314의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정된 상태인 것으로 판단되면, 단계 315에서 정정불능-에러 핸들러(221)는 ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트(290)로 전송하고 리드 데이터(DATA_R)에 대한 리드 동작을 종료한다. 반면에 단계 314의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정되지 않은 상태인 것으로 판단되면, 리트라이 동작모드에 따른 동작을 수행한다.
도 11은 본 개시에 따른 메모리 시스템(200)의 리트라이 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다. 그리고 도 12는 본 개시에 따른 메모리 시스템(200)의 리트라이 동작의 일 예를 설명하기 위해 나타내 보인 블록도이다. 도 12에서 도 5와 동일한 참조부호는 동일한 구성요소를 나타낸다. 본 예에서 리트라이 동작모드는, 정상 리드 동작에서 리드 데이터에 대한 에러가 정정되지 않은 경우, 설정된 횟수만큼 ECC 디코딩이 반복적으로 수행되도록 함으로서 리드 데이터에 대한 에러가 정정되도록 하는 과정으로 정의될 수 있다. 도 11 및 도 12를 참조하면, 단계 321에서, 정정불능-에러 핸들러(221)는 리트라이 제어신호(CS_RETRY)를 출력한다. 리트라이 제어신호(CS_RETRY)는, 미디어 스케줄링 로직(280)을 통해 메모리 인터페이스 로직(230)으로 입력된다. 단계 322에서, 메모리 인터페이스 로직(230)은, 입력되는 리트라이 제어신호(CS_RETRY)에 응답하여 메모리 미디어(210)를 액세스한다. 이 과정은, 리드 커맨드(CMD_R)에 응답하여 메모리 미디어(210)를 액세스하는 과정과 동일하게 이루어진다.
메모리 인터페이스 로직(230)은, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 멀티플렉서(270)를 통해 ECC 디코더(260)로 전송한다. 구체적으로 메모리 인터페이스 로직(230)은, 리드 데이터(DATA_R)를 멀티플렉서(270)의 제1 입력단자("0")로 입력시키면서 제1 제어신호(CS1)로서 이진값 "0" 및 제3 제어신호(CS3)로서 이진값 "0"을 루프-버퍼(240), 루프-카운터(250), 및 ECC 디코더(260)에 입력시킨다. 정상 리드 동작 과정과 마찬가지로, 제1 제어신호(CS1) 및 제3 제어신호(CS3)가 모두 "0"의 이진값을 가지므로, 루프-버퍼(240) 및 루프-카운터(250)은 동작하지 않는다. 멀티플렉서(270)의 제어단자로 페이크-커맨드가 입력되지 않음에 따라, 멀티플렉서(270)는 제1 입력단자("0")로 입력된 리드 데이터(DATA_R), 즉 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 출력하여 ECC 디코더(260)로 입력시킨다.
단계 323에서, ECC 디코더(260)는, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)에 대해 ECC 디코딩을 수행한다. 정상 리드 동작 과정과 마찬가지로, ECC 디코딩은 일반적인 RS 알고리즘 방식을 이용하여 수행된다. ECC 디코더(260)는, ECC 디코딩을 수행하여 ECC 디코딩된 리드 데이터(DATA_R_D)를 출력시킨다. ECC 디코딩된 리드 데이터(DATA_R_D)는 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)로 입력된다. ECC 디코더(260)는, ECC 디코딩된 리드 데이터(DATA_R_D) 외에 제1 제어신호(CS1) 및 제3 제어신호(CS3)도 함께 정정불능-에러 핸들러(221)로 전송할 수 있다.
단계 324에서, ECC 디코딩된 리드 데이터(DATA_R_D)를 입력받은 정정불능-에러 핸들러(221)는 에러가 정정되었는지의 여부를 판단한다. 단계 324의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정된 상태인 것으로 판단되면, 단계 325에서 정정불능-에러 핸들러(221)는 ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트(290)로 전송하고 리드 데이터(DATA_R)에 대한 리드 동작을 종료한다. 반면에 단계 324의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정되지 않은 상태인 것으로 판단되면, 단계 326에서 리트라이 횟수에 도달했는지의 여부를 판단한다. 일 예에서 리트라이 횟수는, 미리 설정되어 있으며, 에러정정능력에 따라 다양하게 설정될 수 있다. 예컨대 에러정정능력이 상대적으로 큰 경우, 즉 에러가 정정될 수 있는 심볼들의 개수가 상대적으로 많은 경우, 리트라이 횟수는 상대적으로 적게 설정될 수 있다. 반면에 에러정정능력이 상대적으로 작은 경우, 즉 에러가 정정될 수 있는 심볼들의 개수가 상대적으로 적은 경우, 리트라이 횟수는 상대적으로 많게 설정될 수 있다.
단계 326의 판단에서, 현재 리트라이 횟수가 설정된 횟수에 도달하는 경우 제1 동작모드를 진행한다. 단계 326의 판단에서, 현재 리트라이 횟수가 설정된 횟수에 도달하지 않은 경우, 단계 327에서 리드 전압을 조정한다. 일 예에서 리드 전압의 조정은, 에러 정정 가능성을 높이기 위해, 리트라이 횟수가 증가할수록 리드 전압도 증가되도록 수행할 수 있다. 리드 전압을 조정한 후에, 단계 321로 피드백되어 정정불능-에러 핸들러(221)는 리트라이 제어신호(CS_RETRY)를 발생시킨다. 이후의 과정은 위의 설명과 동일하다. 리트라이 동작 모드에 따른 동작은, 리트라이 동작 과정에서 리드 데이터(DATA_R)에 대한 에러가 정정되거나, 에러가 정정되지 않은 상태에서 리트라이 횟수가 설정된 횟수에 도달하여 제1 동작모드를 진행할 때까지 반복적으로 수행된다.
도 13은 본 개시에 따른 메모리 시스템(200)의 제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다. 그리고 도 14는 본 개시에 따른 메모리 시스템(200)의 제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도이다. 도 14에서 도 5와 동일한 참조부호는 동일한 구성요소를 나타낸다. 본 예에서 제1 동작모드는, 리트라이 동작에 의해서도 리드 데이터에 대한 에러가 정정되지 않은 경우, 제2 동작모드를 수행하기 위한 준비 과정으로 정의될 수 있다. 도 13 및 도 14를 참조하면, 단계 331에서, 정정불능-에러 핸들러(221)는 예비 페이크-커맨드 제어신호(pre CMD_F)를 출력한다. 예비 페이크-커맨드 제어신호(pre CMD_F)는, 미디어 스케줄링 로직(280)을 통해 메모리 인터페이스 로직(230)으로 입력된다. 단계 332에서, 메모리 인터페이스 로직(230)은, 입력되는 예비 페이크-커맨드 제어신호(pre CMD_F)에 응답하여 메모리 미디어(210)를 액세스한다. 이 과정은, 리드 커맨드(CMD_R) 및 리트라이 제어신호(CS_RETRY)에 응답하여 메모리 미디어(210)를 액세스하는 과정과 동일하게 이루어진다.
메모리 인터페이스 로직(230)은, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 멀티플렉서(270)를 통해 ECC 디코더(260)로 전송한다. 또한 메모리 인터페이스 로직(230)은, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 루프-버퍼(240)로 전송한다. 구체적으로 메모리 인터페이스 로직(230)은, 리드 데이터(DATA_R)를 멀티플렉서(270)의 제1 입력단자("0")로 입력시킨다. 멀티플렉서(270)의 제어단자로 페이크-커맨드가 입력되지 않음에 따라, 멀티플렉서(270)는 제1 입력단자("0")로 입력된 리드 데이터(DATA_R), 즉 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 출력하여 ECC 디코더(260)로 입력시킨다.
메모리 인터페이스 로직(230)은, 제1 제어신호(CS1)로서 이진값 "0", 제2 제어신호(CS2)로서 이진값 "00", 및 제3 제어신호(CS3)로서 이진값 "0"을 루프-버퍼(240), 루프-카운터(250), 및 ECC 디코더(260)에 입력시킨다. 정상 리드 동작 과정 및 리트라이 동작 과정과 마찬가지로, 제1 제어신호(CS1)가 "0"의 이진값을 가지므로, 단계 333에서 ECC 디코더(260)은 리드 데이터(DATA_R)에 대해 일반적인 RS 알고리즘 방식을 이용한 ECC 디코딩을 수행한다. 반면에 제3 제어신호(CS3)가 "1"의 이진값을 가지므로, 단계 334에서 각각 리드 데이터(DATA_R) 저장 동작 및 리셋 동작을 수행한다. 본 예에서 단계 333 및 단계 334는 서로 구분하였지만, 일 예에서 단계 333 및 단계 334는 동시에 수행될 수 있다.
단계 333을 보다 구체적으로 설명하면, ECC 디코더(260)는, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)에 대해 ECC 디코딩을 수행한다. 정상 리드 동작 과정 및 리트라이 동작 과정과 마찬가지로, ECC 디코딩은 일반적인 RS 알고리즘 방식을 이용하여 수행된다. ECC 디코더(260)는, ECC 디코딩을 수행하여 ECC 디코딩된 리드 데이터(DATA_R_D)를 출력시킨다. ECC 디코딩된 리드 데이터(DATA_R_D)는 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)로 입력된다. ECC 디코더(260)는, ECC 디코딩된 리드 데이터(DATA_R_D) 외에 제1 제어신호(CS1) 및 제3 제어신호(CS3)도 함께 정정불능-에러 핸들러(221)로 전송할 수 있다.
단계 334를 보다 구체적으로 설명하면, 제2 제어신호(CS2)로서 "00"의 이진값 및 제3 제어신호(CS3)로서 "1"의 이진값을 입력받은 루프-버퍼(240)는, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 저장한다. 도 7을 참조하여 설명한 바와 같이, 리드 데이터(DATA_R)는, 루프-버퍼(240) 내의 루프-버퍼 컨트롤러(255)의 제어동작을 통해 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "00"에 의해 지정되는 제1 버퍼영역(241)에 저장된다. 또한 도 8을 참조하여 설명한 바와 같이, 제2 제어신호(CS2)로서 "00"의 이진값 및 제3 제어신호(CS3)로서 "1"의 이진값을 입력받은 루프-카운터(250)는, 루프-카운터 컨트롤러(255)의 제어동작을 통해 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "00"에 의해 지정되는 제1 카운터(251)를 리셋시킨다.
단계 335에서, ECC 디코딩된 리드 데이터(DATA_R_D)를 입력받은 정정불능-에러 핸들러(221)는 에러가 정정되었는지의 여부를 판단한다. 단계 335의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정된 상태인 것으로 판단되면, 단계 336에서 정정불능-에러 핸들러(221)는 ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트(290)로 전송하고 리드 데이터(DATA_R)에 대한 리드 동작을 종료한다. 반면에 단계 335의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정되지 않은 상태인 것으로 판단되면, 제2 동작모드를 진행한다.
도 15는 본 개시에 따른 메모리 시스템(200)의 제2 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다. 도 16 내지 도 18은 본 개시에 따른 메모리 시스템(200)의 제2 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도들이다. 그리고 도 19 내지 도 21은 본 개시에 따른 메모리 시스템(200)의 제2 동작모드에서의 이레이저-루프 방식의 ECC 디코딩 과정을 설명하기 위해 나타내 보인 도면들이다. 도 16 내지 도 18에서 도 5와 동일한 참조부호는 동일한 구성요소를 나타낸다. 본 예에서 제2 동작모드는, 리트라이 동작에 의해서도 리드 데이터에 대한 에러가 정정되지 않은 경우, 이레이저-루프 방식의 ECC 디코딩을 수행하는 과정으로 정의될 수 있다. 먼저 도 13 및 도 15를 참조하면, 단계 341에서, 정정불능-에러 핸들러(221)는 페이크-커맨드 발생기(222)로 페이크-커맨드 제어신호(CS_CMD_F)를 전송한다. 단계 342에서, 페이크-커맨드 발생기(222)는, 전송되는 페이크-커맨드 제어신호(CS_CMD_F)에 응답하여 페이크-커맨드(CMD_F)를 출력한다. 페이크-커맨드(CMD_F)는, 미디어 스케줄링 로직(280)을 통해 메모리 인터페이스 로직(230)으로 입력된다.
단계 343에서, ECC 디코더(260)는, 버퍼-루프(240)로부터 액세스한 리드 데이터(DATA_R)에 대해 이레이저-루프 방식의 ECC 디코딩을 수행한다. 이때 소거되는 심볼들의 선정은, 루프-카운터(250)로부터 입력되는 카운팅값(COUNT_VALUE)에 의해 이루어진다. 보다 구체적으로 설명하면, 메모리 인터페이스 로직(230)은, 입력되는 페이크-커맨드(CMD_F)에 응답하여 메모리 미디어(210)에 대한 액세스를 차단하며, 이에 따라 멀티플렉서(270)의 제1 입력단자("0")로 메모리 미디어(210)로부터 액세스한 리드 데이터는 입력되지 않는다. 메모리 미디어(210)에 대한 액세스 차단은, 제2 동작모드가 종료될 때까지 유지된다.
메모리 인터페이스 로직(230)은, 입력되는 페이크-커맨드(CMD_F)에 응답하여, 제1 제어신호(CS1)로서 "1"의 이진값, 제2 제어신호(CS2)로서 "00"의 이진값, 및 제3 제어신호(CS3)로서 "0"의 이진값을 발생시킨다. 메모리 인터페이스 로직(230)은, 페이크-커맨드(CMD_F)를 루프-버퍼(240), 루프-카운터(250), ECC 디코더(260), 및 멀티플렉서(270)의 제어단자에 입력시킨다. 메모리 인터페이스 로직(230)은, 제1 제어신호(CS1)로서 "1"의 이진값, 제2 제어신호(CS2)로서 "00"의 이진값, 및 제3 제어신호(CS3)로서 "0"의 이진값을 루프-버퍼(240), 루프-카운터(250), 및 ECC 디코더(260)에 입력시킨다.
루프-버퍼(240)는, 도 7을 참조하여 설명한 바와 같이, 페이크-커맨드(CMD_F) 및 제1 제어신호(CS)인 "1"의 이진값에 응답하여, 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "00"에 의해 지정되는 제1 버퍼영역(241)에 저장되어 있는 리드 데이터(DATA_R)를 출력시킨다. 루프-카운터(250)는, 도 8을 참조하여 설명한 바와 같이, 카운팅값(COUNT_VALUE)으로 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "00"에 의해 지정되는 제1 카운터(251)의 카운팅값인 "0000"을 출력시킨다.
제1 제어신호(CS1)가 "1"의 이진값을 가지므로, 단계 343에서 ECC 디코더(260)은 리드 데이터(DATA_R)에 대해 이레이즈-루프 방식의 ECC 디코딩을 수행한다. 본 예에서 제3 제어신호(CS3)는 "0"의 이진값을 가지므로, 루프-버퍼(240) 내에서의 저장 동작 및 루프-카운터(250) 내에서의 리셋 동작은 수행되지 않는다. 단계 343을 보다 구체적으로 설명하면, ECC 디코더(260)는, 루프-버퍼(240) 내에 저장되어 있던 리드 데이터(DATA_R)에 대해 이레이저-루프 방식을 이용한 ECC 디코딩을 수행한다. 이레이저-루프 방식의 ECC 디코딩은, 복수회, 예컨대 11번의 루프(loop)를 갖는 반복 동작(iterated operation)으로 수행된다. 일 예에서 루프의 횟수는, 메모리 미디어(210)를 구성하는 메모리칩들의 개수와 동일할 수 있다.
도 19에 나타낸 바와 같이, 루프-버퍼(240)의 제1 버퍼영역(241)에 저장되어 있는 리드 데이터(DATA_R)는 제1 내지 제11 데이터(DATA_0, DATA_1, DATA_2, …, DATA_10)로 구성된다. 제1 내지 제11 데이터(DATA_0, DATA_1, DATA_2, …, DATA_10) 각각은, 메모리 미디어(210)를 구성하는 제1 내지 제11 메모리칩들 각각으로부터 액세스된 데이터이다. 제1 데이터(DATA_0)는 제1 심볼(SB_0)을 구성한다. 제2 데이터(DATA_1)는 제2 심볼(SB_1)을 구성한다. 제3 데이터(DATA_2)는 제3 심볼(SB_2)을 구성한다. 이와 같은 방식으로 제11 데이터(DATA_10)는 제11 심볼(SB_10)을 구성한다. 제1 내지 제11 심볼들(SB_0, SB_1, SB_2, …, SB_10) 각각은 복수개의 단위심볼들로 구성될 수 있다. 일 예에서 단위심볼이 8비트의 데이터로 구성되는 경우, 제1 내지 제11 심볼들(SB_0, SB_1, SB_2, …, SB_10) 각각은, 16개의 단위심볼들을 포함할 수 있다. 이레이저-루프 방식의 ECC 디코딩 과정에서 첫번째 루프는, 제1 메모리칩으로부터 액세스되어 루프-버퍼(240)에 저장되어 있던 제1 데이터(DATA_0)로 구성되는 제1 심볼(SB_0)을 소거시킨 상태에서 수행될 수 있다.
다시 도 16을 참조하면, RS 디코딩 ECC 디코더(260)는, 이레이저-루프 방식의 ECC 디코딩 중 첫번째 루프를 수행하여 ECC 디코딩된 리드 데이터(DATA_R_D)를 출력시킨다. ECC 디코딩된 리드 데이터(DATA_R_D)는 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)로 입력된다. ECC 디코더(260)는, ECC 디코딩된 리드 데이터(DATA_R_D) 외에 페이크-커맨드(CMD_F), 제1 제어신호(CS1), 제2 제어신호(CS2), 제3 제어신호(CS3) 및 카운팅값(COUNT_VALUE)도 함께 정정불능-에러 핸들러(221)로 전송하여, 정정불능-에러 핸들러(221)가 ECC 디코딩 조건을 파악할 수 있도록 할 수 있다.
단계 344에서, ECC 디코딩된 리드 데이터(DATA_R_D)를 입력받은 정정불능-에러 핸들러(221)는 에러가 정정되었는지의 여부를 판단한다. 단계 344의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정된 상태인 것으로 판단되면, 단계 345에서 정정불능-에러 핸들러(221)는 ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트(290)로 전송하고 리드 데이터(DATA_R)에 대한 리드 동작을 종료한다. 반면에 단계 344의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정되지 않은 상태인 것으로 판단되면, 단계 346에서 카운팅값(COUNT_VALUE)이 설정값과 일치하는지의 여부를 판단한다.
단계 346에서 카운팅값(COUNT_VALUE)이 설정값과 일치하지 않는 경우, 즉 이레이즈-루프 방식의 ECC 디코딩이 모든 루프들을 진행하지 않은 경우, 단계 347에서 루프-카운터(250)를 카운팅해서 카운팅값(COUNT_VALUE)을 증가시킨다. 본 예에서 카운팅값(COUNT_VALUE)은 4비트의 이진스트림으로 구성되므로, 단계 347에서의 카운팅값(COUNT_VALUE) 증가는 이진값 "1"을 가산함으로써 수행될 수 있다. 이에 따라 도 8을 참조하여 설명한 바와 같이, 제2 제어신호(CS2)인 "00"의 인덱스를 갖는 제1 카운터(251)의 카운팅값(COUNT_VALUE)은 "0000"에서 "0001"로 증가된다. 카운팅값(COUNT_VALUE)이 증가되면, 단계 341로 피드백하여, 단계 341 내지 단계 343을 다시 수행한다. 단계 341 및 단계 342는 위에서 설명한 바와 동일하며, 단계 343은 이레이저-루프 방식의 ECC 디코딩 중 두번째 루프라는 점에서 첫번째 루프와 다르다.
도 17에 나타낸 바와 같이, 루프-카운터(250)로부터 ECC 디코더(260)로 카운팅값(COUNT_VALUE) "0001"이 입력된다. 이에 따라 ECC 디코더(260)는 이레이저-루프 방식의 ECC 디코딩 중 두번째 루프에 따른 동작을 수행한다. 도 20에 나타낸 바와 같이, 이레이저-루프 방식의 ECC 디코딩 과정에서 두번째 루프는, 제2 메모리칩으로부터 액세스되어 루프-버퍼(240)에 저장되어 있던 제2 데이터(DATA_1)로 구성되는 제1 심볼(SB_1)을 소거시킨 상태에서 수행될 수 있다.
이와 같은 이레이저-루프 방식의 ECC 디코딩 과정은, 단계 344에서 에러가 정정된 것으로 판정되기 전까지 세번째 루프에서부터 마지막 열한번째 루프에 따른 디코딩까지 순차적으로 수행된다. 열번째 루프에서 루프-카운터(250)의 카운팅값(COUNT_VALUE)은 "1010"으로 증가된다. 도 18에 나타낸 바와 같이, 열한번째 루프에서는 루프-카운터(250)로부터 카운팅값(COUNT_VALUE) "0001"이 ECC 디코더(260)로 입력된다. 이에 따라 ECC 디코더(260)는 이레이저-루프 방식의 ECC 디코딩 중 열한번째 루프에 따른 동작을 수행한다. 도 21에 나타낸 바와 같이, 이레이저-루프 방식의 ECC 디코딩 과정에서 열한번째 루프는, 제2 메모리칩으로부터 액세스되어 루프-버퍼(240)에 저장되어 있던 제11 데이터(DATA_10)로 구성되는 제11 심볼(SB_10)을 소거시킨 상태에서 수행될 수 있다. 단계 346에서 루프-카운터(250)의 카운팅값(COUNT_VALUE)이 설정값, 예컨대 "1011"과 일치하면, 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)는 리드 데이터(DATA_R)에 대한 최종 페일(fail)을 판정하고, 리드 데이터(DATA_R)에 대한 액세스 동작을 종료한다.
도 22는 본 개시에 따른 메모리 시스템(200)의 제1 동작모드/리트라이 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다. 그리고 도 23 및 도 24는 본 개시에 따른 메모리 시스템(200)의 제1 동작모드/리트라이 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도들이다. 도 23 및 도 24에서 도 5와 동일한 참조부호는 동일한 구성요소를 나타낸다. 본 예에서는, 정상 리드 동작 후에 리드 데이터에 대한 에러가 정정되지 않은 경우, 첫번째 리트라이 동작과 제1 동작모드에서의 동작이 같이 이루어진다는 점에서 앞선 실시예와 차이가 있다.
먼저 도 22 및 도 23을 참조하면, 도 9 및 도 10을 참조하여 설명한 바와 같이, 도 9의 단계 311 내지 단계 314의 정상 리드 동작을 수행한다. 도 9의 단계 314에서 에러가 정정되지 않은 경우, 단계 421에서 정정불능-에러 핸들러(221)는 리트라이 제어신호(CS_RETRY) 및 예비 페이크-커맨드 제어신호(pre CMD_F)를 출력한다. 리트라이 제어신호(CS_RETRY) 및 예비 페이크-커맨드 제어신호(pre CMD_F)는, 미디어 스케줄링 로직(280)을 통해 메모리 인터페이스 로직(230)으로 입력된다. 단계 422에서, 메모리 인터페이스 로직(230)은, 입력되는 리트라이 제어신호(CS_RETRY) 및 예비 페이크-커맨드 제어신호(pre CMD_F)에 응답하여 메모리 미디어(210)를 액세스한다. 이 과정은, 리드 커맨드(CMD_R)에 응답하여 메모리 미디어(210)를 액세스하는 과정과 동일하게 이루어진다.
메모리 인터페이스 로직(230)은, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 멀티플렉서(270)를 통해 ECC 디코더(260)로 전송한다. 구체적으로 메모리 인터페이스 로직(230)은, 리드 데이터(DATA_R)를 멀티플렉서(270)의 제1 입력단자("0")로 입력시키고, 또한 제1 제어신호(CS1)로서 이진값 "0", 제2 제어신호(CS2)로서 이진값 "00", 및 제3 제어신호(CS3)로서 이진값 "1"을 루프-버퍼(240), 루프-카운터(250), 및 ECC 디코더(260)에 입력시킨다. 멀티플렉서(270)의 제어단자로 페이크-커맨드가 입력되지 않음에 따라, 멀티플렉서(270)는 제1 입력단자("0")로 입력된 리드 데이터(DATA_R), 즉 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 출력하여 ECC 디코더(260)로 입력시킨다. 정상 리드 동작 과정과 마찬가지로, 제1 제어신호(CS1)가 "0"의 이진값을 가지므로, 단계 423에서 ECC 디코더(260)은 리드 데이터(DATA_R)에 대해 일반적인 RS 알고리즘 방식을 이용한 ECC 디코딩을 수행한다.
단계 424에서 현재의 리트라이 동작이 첫번째 리트라이 동작인지의 여부를 판단한다. 단계 424의 판단에서 현재 리트라이 동작이 첫번째 리트라이 동작인 경우, 단계 425에서 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 루프-버퍼(240)에 저장하고, 루프-카운터(250)를 리셋시키는 동작을 수행한다. 본 예에서 단계 433 및 단계 425는 서로 구분하였지만, 일 예에서 현재 리트라이 동작이 첫번째 리트라이 동작인 경우, 단계 433와 단계들 424, 425는 동시에 수행될 수 있다. 즉, ECC 디코더(260)에 의해 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)에 대한 ECC 디코딩이 수행되는 동작과, 루프-버퍼(240)에 의해 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)가 저장되도록 하는 동작과, 그리고 루프-카운터(250)에 의해 리셋이 수행되는 동작은 동시에 수행될 수 있다.
단계 423을 보다 구체적으로 설명하면, ECC 디코더(260)는, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)에 대해 ECC 디코딩을 수행한다. 정상 리드 동작 과정과 마찬가지로, ECC 디코딩은 일반적인 RS 알고리즘 방식을 이용하여 수행된다. ECC 디코더(260)는, ECC 디코딩을 수행하여 ECC 디코딩된 리드 데이터(DATA_R_D)를 출력시킨다. ECC 디코딩된 리드 데이터(DATA_R_D)는 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)로 입력된다. ECC 디코더(260)는, ECC 디코딩된 리드 데이터(DATA_R_D) 외에 제1 제어신호(CS1), 제2 제어신호(CS2), 및 제3 제어신호(CS3)도 함께 정정불능-에러 핸들러(221)로 전송할 수 있다.
단계 425를 보다 구체적으로 설명하면, 제2 제어신호(CS2)로서 "00"의 이진값 및 제3 제어신호(CS3)로서 "1"의 이진값을 입력받은 루프-버퍼(240)는, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 저장한다. 도 7을 참조하여 설명한 바와 같이, 리드 데이터(DATA_R)는, 루프-버퍼(240) 내의 루프-버퍼 컨트롤러(255)의 제어동작을 통해 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "00"에 의해 지정되는 제1 버퍼영역(241)에 저장된다. 또한 도 8을 참조하여 설명한 바와 같이, 제2 제어신호(CS2)로서 "00"의 이진값 및 제3 제어신호(CS3)로서 "1"의 이진값을 입력받은 루프-카운터(250)는, 루프-카운터 컨트롤러(255)의 제어동작을 통해 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "00"에 의해 지정되는 제1 카운터(251)를 리셋시킨다.
단계 426에서, ECC 디코딩된 리드 데이터(DATA_R_D)를 입력받은 정정불능-에러 핸들러(221)는 에러가 정정되었는지의 여부를 판단한다. 단계 426의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정된 상태인 것으로 판단되면, 단계 427에서 정정불능-에러 핸들러(221)는 ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트(290)로 전송하고 리드 데이터(DATA_R)에 대한 리드 동작을 종료한다. 반면에 단계 426의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정되지 않은 상태인 것으로 판단되면, 단계 428에서 리트라이 횟수가 설정된 횟수에 도달했는지의 여부를 판단한다. 첫번째 리트라이 동작을 수행했으므로, 단계 428에서 리트라이 횟수에 도달하지 않은 것으로 판단하여, 단계 429의 리드 전압 조정을 수행한다. 일 예에서 리드 전압의 조정은, 에러 정정 가능성을 높이기 위해, 리드 전압을 증가시킴으로써 수행될 수 있다. 리드 전압을 조정한 후에, 단계 430에서 리트라인 제어신호(CS_RETRY)를 발생시킨다. 그리고 단계 422의 과정을 다시 수행한다.
이후의 과정은 에러가 정정되거나, 리트라이 횟수가 설정된 횟수에 도달될 때까지 단계 422 내지 단계 430의 과정을 반복적으로 수행된다. 다만 첫번째 리트라이 과정은 이미 수행된 상태이므로 단계 425의 과정은 생략된다. 구체적으로 도 25에 나타낸 바와 같이, 단계 422에서, 메모리 인터페이스 로직(230)은, 입력되는 리트라이 제어신호(CS_RETRY)에 응답하여 메모리 미디어(210)를 액세스한다. 메모리 인터페이스 로직(230)은, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 멀티플렉서(270)를 통해 ECC 디코더(260)로 전송한다. 구체적으로 메모리 인터페이스 로직(230)은, 리드 데이터(DATA_R)를 멀티플렉서(270)의 제1 입력단자("0")로 입력시키고, 또한 제1 제어신호(CS1)로서 이진값 "0" 및 제3 제어신호(CS3)로서 이진값 "0"을 루프-버퍼(240), 루프-카운터(250), 및 ECC 디코더(260)에 입력시킨다. 멀티플렉서(270)의 제어단자로 페이크-커맨드가 입력되지 않음에 따라, 멀티플렉서(270)는 제1 입력단자("0")로 입력된 리드 데이터(DATA_R), 즉 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 출력하여 ECC 디코더(260)로 입력시킨다. 정상 리드 동작 과정과 마찬가지로, 제1 제어신호(CS1)가 "0"의 이진값을 가지므로, 단계 423에서 ECC 디코더(260)은 리드 데이터(DATA_R)에 대해 일반적인 RS 알고리즘 방식을 이용한 ECC 디코딩을 수행한다.
단계 424에서 첫번째 리트라이가 아닌 두번째 리트라이 과정이므로, 단계 426에서 정정불능-에러 핸들러(221)는 에러가 정정되었는지의 여부를 판단한다. 단계 426의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정된 상태인 것으로 판단되면, 단계 427에서 정정불능-에러 핸들러(221)는 ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트(290)로 전송하고 리드 데이터(DATA_R)에 대한 리드 동작을 종료한다. 반면에 단계 426의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정되지 않은 상태인 것으로 판단되면, 단계 428에서 리트라이 횟수가 설정된 횟수에 도달했는지의 여부를 판단한다. 단계 428의 판단에서 리트라이 횟수가 설정된 횟수에 도달한 경우, 제2 동작모드에 진입한다. 제2 동작모드에 따른 동작은, 도 15 내지 도 21을 참조하여 설명한 동작과 동일하다. 반면에 단계 428에서 리트라이 횟수가 설정된 횟수에 도달하지 않은 경우 단계 429의 리드 전압 조정을 수행한다. 그리고 단계 430에서 리트라인 제어신호(CS_RETRY)를 발생시킨다.
리트라이 과정이 반복될 때마다 단계 429에서의 리드 전압 조정에 의해 리드 전압은 점점 증가할 수 있으며, 이로 인해 메모리 미디어(210)에 저장되어 있는 리드 데이터(DATA_R)에 에러가 추가적으로 발생될 가능성이 있다. 그러나 본 예에서는 첫번째 리트라인 동작과 함께, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 루프-버퍼(240) 내에 저장시켜 놓았으므로, 리트라이 동작이 설정된 횟수만큼 수행되어 메모리 미디어(210) 내의 리드 데이터(DATA_R)에 에러가 더 발생되더라도, 리트라이 동작이 수행되기 전의 에러 상태를 갖는 리드 데이터(DATA_R)에 대해 제2 동작모드에서의 ECC 디코딩을 수행할 수 있다.
도 25는 본 개시에 따른 메모리 시스템(200)의 제1 동작모드/리트라이 동작모드에서의 동작의 다른 예를 설명하기 위해 나타내 보인 플로챠트이다. 도 26은 본 개시에 따른 메모리 시스템(200)의 제1 동작모드/리트라이 동작모드에서의 동작의 다른 예를 설명하기 위해 나타내 보인 블록도이다. 그리고 도 27은 본 개시에 따른 메모리 시스템(200)의 제1 동작모드/리트라이 동작모드에서 루프-버퍼 내에 리드 데이터가 저장되는 과정을 설명하기 위해 나타내 보인 도면이다. 도 26에서 도 5와 동일한 참조부호는 동일한 구성요소를 나타낸다. 도 27에서 도 7과 동일한 참조부호는 동일한 구성요소를 나타낸다. 리트라이 동작이 수행될 때마다 사용되는 서로 다른 크기의 리드 전압에 의해, 메모리 미디어(210)로부터 액세스되는 리드 데이터(DATA_R)의 에러 상태가 서로 다를 수 있다. 본 예에서는 리트라이 동작이 수행될 때마다 제1 동작모드에서의 동작이 함께 수행된다. 이에 따라 루프-버퍼(240) 내에는 서로 다른 에러 상태를 갖는 리드 데이터(DATA_R)가 저장될 수 있다. 제2 동작모드에서의 ECC 디코딩을 루프-버퍼(240)에 저장된 서로 다른 에러 상태를 갖는 리드 데이터(DATA_R)에 대해 수행함으로써, 에러를 정정할 확률을 높일 수 있다.
도 25 및 도 26을 참조하면, 도 9 및 도 10을 참조하여 설명한 바와 같이, 도 9의 단계 311 내지 단계 314의 정상 리드 동작을 수행한다. 도 9의 단계 314에서 에러가 정정되지 않은 경우, 단계 521에서 제2 제어신호(CS2)의 초기값을 설정한다. 일 예에서 제2 제어신호(CS2)가 2비트의 이진스트림으로 구성되는 경우, 초기값은 "00"으로 설정될 수 있다. 단계 522에서, 정정불능-에러 핸들러(221)는 리트라이 제어신호(CS_RETRY) 및 예비 페이크-커맨드 제어신호(pre CMD_F)를 출력한다. 리트라이 제어신호(CS_RETRY) 및 예비 페이크-커맨드 제어신호(pre CMD_F)는, 미디어 스케줄링 로직(280)을 통해 메모리 인터페이스 로직(230)으로 입력된다. 단계 523에서, 메모리 인터페이스 로직(230)은, 입력되는 리트라이 제어신호(CS_RETRY) 및 예비 페이크-커맨드 제어신호(pre CMD_F)에 응답하여 메모리 미디어(210)를 액세스한다. 이 과정은, 리드 커맨드(CMD_R)에 응답하여 메모리 미디어(210)를 액세스하는 과정과 동일하게 이루어진다.
메모리 인터페이스 로직(230)은, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 멀티플렉서(270)를 통해 ECC 디코더(260)로 전송한다. 구체적으로 메모리 인터페이스 로직(230)은, 리드 데이터(DATA_R)를 멀티플렉서(270)의 제1 입력단자("0")로 입력시키고, 또한 제1 제어신호(CS1)로서 이진값 "0", 제2 제어신호(CS2)로서 이진값 "00", 및 제3 제어신호(CS3)로서 이진값 "1"을 루프-버퍼(240), 루프-카운터(250), 및 ECC 디코더(260)에 입력시킨다. 멀티플렉서(270)의 제어단자로 페이크-커맨드가 입력되지 않음에 따라, 멀티플렉서(270)는 제1 입력단자("0")로 입력된 리드 데이터(DATA_R), 즉 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 출력하여 ECC 디코더(260)로 입력시킨다. 정상 리드 동작 과정과 마찬가지로, 제1 제어신호(CS1)가 "0"의 이진값을 가지므로, 단계 524에서 ECC 디코더(260)은 리드 데이터(DATA_R)에 대해 일반적인 RS 알고리즘 방식을 이용한 ECC 디코딩을 수행한다.
단계 525에서 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 루프-버퍼(240)에 저장하고, 루프-카운터(250)를 리셋시키는 동작을 수행한다. 본 예에서 단계 524 및 단계 525는 서로 구분하였지만, 단계 524 및 단계 525는 동시에 수행될 수 있다. 단계 524를 보다 구체적으로 설명하면, ECC 디코더(260)는, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)에 대해 ECC 디코딩을 수행한다. 정상 리드 동작 과정과 마찬가지로, ECC 디코딩은 일반적인 RS 알고리즘 방식을 이용하여 수행된다. ECC 디코더(260)는, ECC 디코딩을 수행하여 ECC 디코딩된 리드 데이터(DATA_R_D)를 출력시킨다. ECC 디코딩된 리드 데이터(DATA_R_D)는 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)로 입력된다. ECC 디코더(260)는, ECC 디코딩된 리드 데이터(DATA_R_D) 외에 제1 제어신호(CS1), 제2 제어신호(CS2), 제2 제어신호(CS2), 및 제3 제어신호(CS3)도 함께 정정불능-에러 핸들러(221)로 전송할 수 있다.
단계 525를 보다 구체적으로 설명하면, 제2 제어신호(CS2)로서 "00"의 이진값 및 제3 제어신호(CS3)로서 "1"의 이진값을 입력받은 루프-버퍼(240)는, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 저장한다. 도 27에 나타낸 바와 같이, 첫번째 리트라이 동작에 의해 액세스된 리드 데이터(DATA_R_1R)는, 루프-버퍼(240) 내의 루프-버퍼 컨트롤러(255)의 제어동작을 통해 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "00"에 의해 지정되는 제1 버퍼영역(241)에 저장된다. 루프-카운터(250)는, 도 8을 참조하여 설명한 바와 같이, 제2 제어신호(CS2)로서 "00"의 이진값 및 제3 제어신호(CS3)로서 "1"의 이진값을 입력받고, 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "00"에 의해 지정되는 제1 카운터(251)를 리셋시킨다.
단계 526에서, ECC 디코딩된 리드 데이터(DATA_R_D)를 입력받은 정정불능-에러 핸들러(221)는 에러가 정정되었는지의 여부를 판단한다. 단계 526의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정된 상태인 것으로 판단되면, 단계 527에서 정정불능-에러 핸들러(221)는 ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트(290)로 전송하고 리드 데이터(DATA_R)에 대한 리드 동작을 종료한다. 반면에 단계 526의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정되지 않은 상태인 것으로 판단되면, 단계 528에서 리트라이 횟수가 설정된 횟수에 도달했는지의 여부를 판단한다. 단계 528에서 리트라이 횟수가 설정된 횟수에 도달한 경우, 제2 동작모드로 진입한다. 제2 동작모드에 따른 동작은, 도 15 내지 도 21을 참조하여 설명한 동작과 동일하다. 반면에 단계 528에서 리트라이 횟수가 설정된 횟수에 도달하지 않은 경우 단계 529의 리드 전압 조정을 수행한다. 그리고 단계 530에서 제2 제어신호(CS2)에 이진값 "1"을 가산한다. 이에 따라 제2 제어신호(CS2)는 기존의 "00"에서 "01"로 변경된다. 제2 제어신호(CS2)를 변경한 후에, 다시 단계 522로 피드백하여 리트라인 제어신호(CS_RETRY) 및 예비 페이크-커맨드 제어신호(pre CMD_F)를 발생시킨다.
단계 523 내지 단계 526을 다시 수행하고, 단계 526의 판단에서 에러가 정정되지 않은 경우, 도 27에 나타낸 바와 같이, 두번째 리트라이 동작 및 두번째 제1 동작모드에 의해 액세스된 리드 데이터(DATA_R_2R)는, 루프-버퍼(240) 내의 루프-버퍼 컨트롤러(255)의 제어동작을 통해 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "01"에 의해 지정되는 제2 버퍼영역(242)에 저장된다. 루프-카운터(250)는, 도 8을 참조하여 설명한 바와 같이, 제2 제어신호(CS2)로서 "01"의 이진값 및 제3 제어신호(CS3)로서 "1"의 이진값을 입력받고, 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "01"에 의해 지정되는 제2 카운터(252)를 리셋시킨다.
단계 528에서 리트라이 횟수가 설정된 횟수에 도달하지 않아서, 세번째 제1 동작모드/리트라이 동작모드를 수행하게 되면, 제2 제어신호(CS2)는 "01"에서 "10"으로 변경된다. 세번째 제1 동작모드/리트라이 동작모드에 의해 액세스된 리드 데이터(DATA_R_3R)는, 루프-버퍼(240) 내의 루프-버퍼 컨트롤러(255)의 제어동작을 통해 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "10"에 의해 지정되는 제3 버퍼영역(243)에 저장된다. 루프-카운터(250)는, 도 8을 참조하여 설명한 바와 같이, 제2 제어신호(CS2)로서 "10"의 이진값 및 제3 제어신호(CS3)로서 "1"의 이진값을 입력받고, 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "10"에 의해 지정되는 제3 카운터(253)를 리셋시킨다.
단계 528에서 리트라이 횟수가 설정된 횟수에 도달하지 않아서, 네번째 제1 동작모드/리트라이 동작모드를 수행하게 되면, 제2 제어신호(CS2)는 "10"에서 "11"로 변경된다. 네번째 제1 동작모드/리트라이 동작모드에 의해 액세스된 리드 데이터(DATA_R_4R)는, 루프-버퍼(240) 내의 루프-버퍼 컨트롤러(255)의 제어동작을 통해 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "11"에 의해 지정되는 제4 버퍼영역(244)에 저장된다. 루프-카운터(250)는, 도 8을 참조하여 설명한 바와 같이, 제2 제어신호(CS2)로서 "11"의 이진값 및 제3 제어신호(CS3)로서 "1"의 이진값을 입력받고, 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "11"에 의해 지정되는 제4 카운터(254)를 리셋시킨다.
도 28은 본 개시에 따른 메모리 시스템(200)의 정상 리드 동작모드/제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 플로챠트이다. 도 29는 본 개시에 따른 메모리 시스템(200)의 정상 리드 동작모드/제1 동작모드에서의 동작의 일 예를 설명하기 위해 나타내 보인 블록도이다. 도 29에서 도 5와 동일한 참조부호는 동일한 구성요소를 나타낸다. 본 예에서는 리트라이 동작을 생략하고, 정상 리드 동작시 제1 동작모드 동작을 함께 수행한다. 이에 따라 정상 리드 동작모드/제1 동작모드를 수행한 후에, 에러가 정정되지 않은 경우 제2 동작모드를 수행한다. 도 28 및 도 29를 참조하면, 단계 611에서 호스트(290)로부터 리드 커맨드(CMD_R)가 발생되면, 커맨드 컨트롤 유닛(220)은 리드 커맨드(CMD_R)를 미디어 스케줄링 로직(280)을 통해 메모리 인터페이스 로직(230)으로 전송한다. 단계 612에서 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)는 예비 페이크-커맨드 제어신호(pre CMD_F)를 출력한다. 예비 페이크-커맨드 제어신호(pre CMD_F) 또한, 미디어 스케줄링 로직(280)을 통해 메모리 인터페이스 로직(230)으로 입력된다. 단계 613에서, 메모리 인터페이스 로직(230)은, 입력되는 리드 커맨드(CMD_R) 및 예비 페이크-커맨드 제어신호(pre CMD_F)에 응답하여 메모리 미디어(210)를 액세스한다.
메모리 인터페이스 로직(230)은, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 멀티플렉서(270)를 통해 ECC 디코더(260)로 전송한다. 구체적으로 메모리 인터페이스 로직(230)은, 리드 데이터(DATA_R)를 멀티플렉서(270)의 제1 입력단자("0")로 입력시키고, 또한 제1 제어신호(CS1)로서 이진값 "0", 제2 제어신호(CS2)로서 이진값 "00", 및 제3 제어신호(CS3)로서 이진값 "1"을 루프-버퍼(240), 루프-카운터(250), 및 ECC 디코더(260)에 입력시킨다. 멀티플렉서(270)의 제어단자로 페이크-커맨드가 입력되지 않음에 따라, 멀티플렉서(270)는 제1 입력단자("0")로 입력된 리드 데이터(DATA_R), 즉 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 출력하여 ECC 디코더(260)로 입력시킨다. 제1 제어신호(CS1)가 "0"의 이진값을 가지므로, 단계 524에서 ECC 디코더(260)은 리드 데이터(DATA_R)에 대해 일반적인 RS 알고리즘 방식을 이용한 ECC 디코딩을 수행한다.
단계 615에서 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 루프-버퍼(240)에 저장하고, 루프-카운터(250)를 리셋시키는 동작을 수행한다. 본 예에서 단계 614 및 단계 615는 서로 구분하였지만, 단계 614 및 단계 615는 동시에 수행될 수 있다. 단계 614를 보다 구체적으로 설명하면, ECC 디코더(260)는, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)에 대해 ECC 디코딩을 수행한다. 정상 리드 동작 과정과 마찬가지로, ECC 디코딩은 일반적인 RS 알고리즘 방식을 이용하여 수행된다. ECC 디코더(260)는, ECC 디코딩을 수행하여 ECC 디코딩된 리드 데이터(DATA_R_D)를 출력시킨다. ECC 디코딩된 리드 데이터(DATA_R_D)는 커맨드 컨트롤 유닛(220)의 정정불능-에러 핸들러(221)로 입력된다. ECC 디코더(260)는, ECC 디코딩된 리드 데이터(DATA_R_D) 외에 제1 제어신호(CS1), 제2 제어신호(CS2), 제2 제어신호(CS2), 및 제3 제어신호(CS3)도 함께 정정불능-에러 핸들러(221)로 전송할 수 있다.
단계 625를 보다 구체적으로 설명하면, 제2 제어신호(CS2)로서 "00"의 이진값 및 제3 제어신호(CS3)로서 "1"의 이진값을 입력받은 루프-버퍼(240)는, 메모리 미디어(210)로부터 액세스한 리드 데이터(DATA_R)를 저장한다. 정상 리드 동작에 의해 액세스된 리드 데이터(DATA_R)는, 루프-버퍼(240) 내의 루프-버퍼 컨트롤러(255)의 제어동작을 통해 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "00"에 의해 지정되는 제1 버퍼영역(241)에 저장된다. 루프-카운터(250)는, 도 8을 참조하여 설명한 바와 같이, 제2 제어신호(CS2)로서 "00"의 이진값 및 제3 제어신호(CS3)로서 "1"의 이진값을 입력받고, 제2 제어신호(CS2)에 의해 지정되는 인덱스값, 즉 인덱스 "00"에 의해 지정되는 제1 카운터(251)를 리셋시킨다.
단계 616에서, ECC 디코딩된 리드 데이터(DATA_R_D)를 입력받은 정정불능-에러 핸들러(221)는 에러가 정정되었는지의 여부를 판단한다. 단계 616의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정된 상태인 것으로 판단되면, 단계 617에서 정정불능-에러 핸들러(221)는 ECC 디코딩된 리드 데이터(DATA_R_D)를 호스트(290)로 전송하고 리드 데이터(DATA_R)에 대한 리드 동작을 종료한다. 반면에 단계 616의 판단에서, ECC 디코딩된 리드 데이터(DATA_R_D)가 에러가 정정되지 않은 상태인 것으로 판단되면, 제2 동작모드로 진입한다. 제2 동작모드에 따른 동작은, 도 15 내지 도 21을 참조하여 설명한 동작과 동일하다.
이상에서는 도면 및 실시 예를 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허청구범위에 기재된 본 출원의 기술적 사상으로부터 벗어나지 않는 범위 내에서 본 출원에 개시된 실시예들을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.
100, 200...메모리 시스템
110, 210...메모리 미디어
121, 221...정정불능-에러(UE) 핸들러
122...페이크-커맨드 발생기 140, 240...루프-버퍼
160, 260...ECC 디코더 220...커맨드 컨트롤 유닛
230...메모리 인터페이스 로직 250...루프-카운터
270...멀티플렉서 280...미디어 스케줄링 로직
290...호스트
121, 221...정정불능-에러(UE) 핸들러
122...페이크-커맨드 발생기 140, 240...루프-버퍼
160, 260...ECC 디코더 220...커맨드 컨트롤 유닛
230...메모리 인터페이스 로직 250...루프-카운터
270...멀티플렉서 280...미디어 스케줄링 로직
290...호스트
Claims (29)
- 메모리 미디어;
제1 동작모드에서 상기 메모리 미디어로부터 읽은 리드 데이터를 저장하는 루프-버퍼;
제2 동작모드에서 페이크-커맨드를 발생시키는 페이크-커맨드 발생기; 및
상기 페이크-커맨드 발생에 응답하여 상기 루프-버퍼에 저장된 리드 데이터에 대한 ECC 디코딩을 수행하는 ECC 디코더를 포함하는 메모리 시스템. - 제1항에 있어서,
상기 메모리 미디어는 복수개의 메모리 칩들을 포함하고,
상기 리드 데이터는 상기 복수개의 메모리 칩들 각각에 분산되어 저장되는 복수개의 데이터들로 구성되는 메모리 시스템. - 제1항에 있어서,
상기 ECC 디코더로부터의 에러정보를 입력받고 상기 제1 동작모드 및 제2 동작모드를 결정하는 에러정정 불능 핸들러를 더 포함하는 메모리 시스템. - 제3항에 있어서,
상기 에러정정 불능 핸들러는, 상기 에러정보에 의해 상기 메모리 미디어로부터 읽은 리드 데이터에 대한 에러가 정정되지 않은 경우 상기 제1 동작모드를 결정하는 메모리 시스템. - 제3항에 있어서,
상기 에러정정 불능 핸들러는, 상기 에러정보에 의해 상기 제1 동작모드에서 상기 메모리 미디어로부터 읽은 리드 데이터에 대한 에러가 정정되지 않은 경우 상기 제2 동작모드를 결정하는 메모리 시스템. - 제1항에 있어서,
상기 ECC 디코더는, 상기 제1 동작모드에서 상기 메모리 미디어로부터 읽은 리드 데이터를 입력받고, 상기 리드 데이터에 대해 일반적인 RS 알고리즘을 이용한 ECC 디코딩을 수행하는 메모리 시스템. - 제1항에 있어서,
상기 ECC 디코더는, 상기 제2 동작모드에서 상기 루프-버퍼에 저장된 리드 데이터에 대해 이레이저-루프 방식의 ECC 디코딩을 수행하는 메모리 시스템. - 제1항에 있어서,
상기 페이크-커맨드 발생시 상기 메모리 미디어에 대한 액세스를 차단되는 메모리 시스템. - 메모리 미디어;
제1 동작모드 및 제2 동작모드에서 각각 예비 페이크-커맨드 제어신호 및 페이크-커맨드를 발생시키는 커맨드 컨트롤 유닛;
상기 제1 동작모드에서 상기 예비 페이크-커맨드 제어신호에 응답하여 상기 메모리 미디어로부터 읽은 리드 데이터를 저장하고, 상기 제2 동작모드에서 상기 페이크-커맨드에 응답하여 저장된 리드 데이터를 출력하는 루프-버퍼;
상기 제1 동작모드에서 상기 예비 페이크-커맨드 제어신호에 응답하여 리셋 동작을 수행하고, 상기 제2 동작모드에서 상기 페이크-커맨드에 응답하여 카운팅값을 출력하는 루프-카운터; 및
상기 제1 동작모드에서 상기 메모리 미디어로부터 읽은 리드 데이터에 대한 제1 ECC 디코딩을 수행하고, 상기 제2 동작모드에서 상기 루프-버퍼로부터 입력되는 리드 데이터에 대한 제2 ECC 디코딩을 수행하는 ECC 디코더를 포함하는 메모리 시스템. - 제9항에 있어서,
상기 메모리 미디어는 복수개의 메모리 칩들을 포함하고,
상기 리드 데이터는 상기 복수개의 메모리 칩들 각각에 분산되어 저장되는 복수개의 데이터들로 구성되는 메모리 시스템. - 제9항에 있어서,
상기 커맨드 컨트롤 유닛은,
상기 제1 동작모드에서 예비 페이크-커맨드 제어신호를 발생시키고, 상기 제2 동작모드에서 페이크-커맨드 제어신호를 발생시키는 정정불능-에러 핸들러; 및
상기 제2 동작모드에서 상기 페이크-커맨드 제어신호에 응답하여 상기 페이크-커맨드를 발생시키는 페이크-커맨드 발생기를 포함하는 메모리 시스템. - 제11항에 있어서,
상기 정정불능-에러 핸들러는,
이전의 ECC 디코딩에서 상기 메모리 미디어로부터 읽은 리드 데이터에 대한 에러가 정정되지 않은 경우, 상기 예비 페이크-커맨드 제어신호를 발생시키고,
상기 제1 동작모드에서의 ECC 디코딩에서 상기 메모리 미디어로부터 읽은 리드 데이터에 대한 에러가 정정되지 않은 경우, 상기 페이크-커맨드 제어신호를 발생시키는 메모리 시스템. - 제9항에 있어서,
상기 예비 페이크-커맨드 제어신호에 응답하여 상기 메모리 미디어를 액세스하고, 상기 페이크-커맨드에 응답하여 상기 메모리 미디어에 대한 액세스를 차단하는 메모리 인터페이스 로직을 더 포함하는 메모리 시스템. - 제13항에 있어서,
상기 메모리 인터페이스 로직은,
상기 제1 동작모드 및 제2 동작모드에서 제1 내지 제3 제어신호를 상기 루프-버퍼, 루프-카운터, 및 ECC 디코더에 입력시키되,
상기 제1 제어신호는 상기 제2 동작모드 여부를 나타내고,
상기 제2 제어신호는 인덱스를 나타내며, 그리고
상기 제3 제어신호는 상기 제1 동작모드 여부를 나타내는 메모리 시스템. - 제14항에 있어서,
상기 루프-버퍼는, 상기 인덱스에 의해 상호 구분되는 복수개의 버퍼영역들을 포함하되,
상기 제1 동작모드를 알리는 상기 제3 제어신호에 응답하여, 상기 복수개의 버퍼영역들 중 상기 제2 제어신호의 인덱스에 의해 지정되는 버퍼영역에 리드 데이터를 저장하고,
상기 제2 동작모드를 알리는 상기 제1 제어신호에 응답하여, 상기 복수개의 버퍼영역들 중 상기 제2 제어신호의 인덱스에 의해 지정되는 버퍼영역에 저장된 리드 데이터를 출력하는 메모리 시스템. - 제15항에 있어서,
상기 루프-카운터는, 상기 인덱스에 의해 상호 구분되는 복수개의 카운터들을 포함하되,
상기 제1 동작모드를 알리는 상기 제3 제어신호에 응답하여, 상기 복수개의 카운터들 중 상기 제2 제어신호의 인덱스에 의해 지정되는 카운터를 리셋시키고,
상기 제2 동작모드를 알리는 상기 제1 제어신호에 응답하여, 상기 복수개의 카운터들 중 상기 제2 제어신호의 인덱스에 의해 지정되는 카운터의 카운팅값을 출력시키면서 카운팅동작을 수행하는 메모리 시스템. - 제9항에 있어서,
상기 ECC 디코더는,
상기 제1 동작모드에서 일반적인 RS 알고리즘을 이용하여 상기 제1 ECC 디코딩을 수행하고,
상기 제2 동작모드에서 상기 루프-카운터로부터 출력되는 카운팅값에 의해 지정되는 심볼들을 소거시키는 이레이저-루프 방식을 이용하여 상기 제2 ECC 디코딩을 수행하는 메모리 시스템. - 제9항에 있어서,
제1 입력단자로 상기 메모리 미디어로부터 액세스한 리드 데이터를 입력받고, 제2 입력단자로 상기 루프-버퍼에 저장된 리드 데이터를 입력받으며, 제어단자로의 상기 페이크-커맨드의 입력 여부에 따라서, 상기 메모리 미디어로부터 액세스한 리드 데이터 및 상기 루프-버퍼에 저장된 리드 데이터 중 하나를 선택적으로 출력하여 상기 ECC 디코더에 입력시키는 멀티플렉서를 더 포함하는 메모리 시스템. - 제1 동작모드에서 상기 메모리 미디어로부터 액세스한 리드 데이터에 대한 제1 ECC 디코딩을 수행하고, 상기 메모리 미디어로부터 액세스한 리드 데이터를 루프-버퍼에 저장시키는 단계; 및
제2 동작모드에서 상기 루프-버퍼에 저장된 리드 데이터에 대한 제2 ECC 디코딩을 수행하는 단계를 포함하는 메모리 시스템의 에러정정방법. - 제19항에 있어서,
상기 제2 동작모드에서 상기 메모리 미디어에 대한 액세스를 차단하는 단계를 더 포함하는 메모리 시스템의 에러정정방법. - 제19항에 있어서,
상기 제1 ECC 디코딩은 일반적인 RS 알고리즘을 이용하여 수행하고, 상기 제2 ECC 디코딩은 이레이저-루프 방식을 이용하여 수행하는 메모리 시스템의 에러정정방법. - 제19항에 있어서,
상기 제1 동작모드에서 루프-카운터를 리셋시키는 단계; 및
상기 제2 동작모드에서 상기 루프-카운터의 카운팅값에 의해 지정된 심볼들을 소거시킨 상태에서 상기 제2 ECC 디코딩을 수행하는 단계를 더 포함하는 메모리 시스템의 에러정정방법. - 제19항에 있어서,
상기 제1 동작모드에서의 상기 제1 ECC 동작에 의해 에러가정정되지 않은 경우 상기 제2 동작모드를 진행하는 메모리 시스템의 에러정정방법. - 제19항에 있어서,
호스트로부터의 리드 커맨드에 응답하여 상기 메모리 미디어로부터 리드 데이터를 액세스하는 단계;
상기 메모리 미디어로부터 액세스한 리드 데이터에 대해 ECC 디코딩을 수행하는 단계; 및
상기 ECC 디코딩 결과 에러가 정정되지 않은 경우 상기 제1 동작모드를 진행하는 단계를 더 포함하는 메모리 시스템의 에러정정방법. - 제19항에 있어서,
상기 호스트로부터의 리드 커맨드에 응답하여 상기 메모리 미디어로부터 리드 데이터를 액세스하는 단계;
상기 메모리 미디어로부터 액세스한 리드 데이터에 대해 ECC 디코딩을 수행하는 단계; 및
상기 ECC 디코딩 결과 에러가 정정되지 않은 경우 리트라이 동작을 진행하는 단계를 더 포함하는 메모리 시스템의 에러정정방법. - 제25항에 있어서,
상기 리트라이 동작을 진행하는 단계는, 상기 메모리 미디어에 대한 리드 전압을 조정하면서 반복적으로 ECC 디코딩을 진행하여 수행하는 메모리 시스템의 에러정정방법. - 제26항에 있어서,
상기 리트라이 동작 과정에서 마지막 리트라이 동작시 상기 제1 동작모드를 진행하는 메모리 시스템의 에러정정방법. - 제26항에 있어서,
상기 리트라이 동작 과정에서 첫번째 리트라이 동작시 상기 제1 동작모드를 진행하는 메모리 시스템의 에러정정방법. - 제26항에 있어서,
상기 리트라이 동작 과정에서 복수의 리트라이들 각각의 동작시마다 상기 제1 동작모드를 진행하는 메모리 시스템의 에러정정방법.
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190086680A KR20210010718A (ko) | 2019-07-17 | 2019-07-17 | 메모리 시스템 및 메모리 시스템에서의 에러정정방법 |
TW109116717A TWI859235B (zh) | 2019-07-17 | 2020-05-20 | 記憶體系統和用於校正記憶體系統中的錯誤的方法 |
US16/883,783 US11048586B2 (en) | 2019-07-17 | 2020-05-26 | Memory systems and methods of correcting errors in the memory systems |
CN202010585519.6A CN112242175B (zh) | 2019-07-17 | 2020-06-24 | 存储系统和用于校正存储系统中的错误的方法 |
US17/332,448 US11392457B2 (en) | 2019-07-17 | 2021-05-27 | Error correction method of a memory system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190086680A KR20210010718A (ko) | 2019-07-17 | 2019-07-17 | 메모리 시스템 및 메모리 시스템에서의 에러정정방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20210010718A true KR20210010718A (ko) | 2021-01-28 |
Family
ID=74170649
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190086680A KR20210010718A (ko) | 2019-07-17 | 2019-07-17 | 메모리 시스템 및 메모리 시스템에서의 에러정정방법 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11048586B2 (ko) |
KR (1) | KR20210010718A (ko) |
CN (1) | CN112242175B (ko) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220107866A1 (en) * | 2021-12-14 | 2022-04-07 | Intel Corporation | Fast memory ecc error correction |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6968021B1 (en) * | 2001-09-24 | 2005-11-22 | Rockwell Collins | Synchronization method and apparatus for modems based on jointly iterative turbo demodulation and decoding |
US7865809B1 (en) * | 2004-03-11 | 2011-01-04 | Super Talent Electronics, Inc. | Data error detection and correction in non-volatile memory devices |
KR101149110B1 (ko) | 2006-02-22 | 2012-05-25 | 삼성전자주식회사 | 디지털 통신 시스템의 rs 복호기 |
WO2009102304A1 (en) * | 2008-02-14 | 2009-08-20 | Hewlett-Packard Development Company, L.P. | Method and system for detection and correction of phased-burst errors, erasures, symbol errors, and bit errors in a received symbol string |
JP2009266349A (ja) * | 2008-04-28 | 2009-11-12 | Toshiba Corp | 不揮発性半導体記憶装置 |
KR101201582B1 (ko) * | 2010-09-06 | 2012-11-14 | 에스케이하이닉스 주식회사 | 반도체 메모리 장치 및 이의 동작 방법 |
KR20130042780A (ko) * | 2011-10-19 | 2013-04-29 | 삼성전자주식회사 | 불휘발성 메모리 장치 및 그것의 동작 방법 |
CN103593252B (zh) * | 2012-08-14 | 2017-06-13 | 旺宏电子股份有限公司 | 具有动态错误侦测及更正的存储器 |
KR102143517B1 (ko) * | 2013-02-26 | 2020-08-12 | 삼성전자 주식회사 | 에러 정정회로를 포함하는 반도체 메모리 장치 및 반도체 메모리 장치의 동작방법 |
US10061645B2 (en) * | 2015-06-30 | 2018-08-28 | Qualcomm Incorporated | Memory array and link error correction in a low power memory sub-system |
US9846614B1 (en) * | 2016-06-03 | 2017-12-19 | International Business Machines Corporation | ECC scrubbing in a multi-slice microprocessor |
US10409672B2 (en) * | 2016-11-16 | 2019-09-10 | SK Hynix Inc. | Media quality aware ECC decoding method selection to reduce data access latency |
KR102410021B1 (ko) * | 2017-11-20 | 2022-06-21 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러 및 메모리 모듈을 갖는 메모리 시스템 및 그 메모리 시스템에서의 데이터 처리 방법 |
KR20190086175A (ko) * | 2018-01-12 | 2019-07-22 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
KR102511903B1 (ko) * | 2018-02-26 | 2023-03-21 | 에스케이하이닉스 주식회사 | 고정된 에러정정능력의 에러정정코드 엔진을 이용하여 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템 |
-
2019
- 2019-07-17 KR KR1020190086680A patent/KR20210010718A/ko unknown
-
2020
- 2020-05-26 US US16/883,783 patent/US11048586B2/en active Active
- 2020-06-24 CN CN202010585519.6A patent/CN112242175B/zh active Active
-
2021
- 2021-05-27 US US17/332,448 patent/US11392457B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
CN112242175A (zh) | 2021-01-19 |
CN112242175B (zh) | 2024-01-05 |
US20210019227A1 (en) | 2021-01-21 |
TW202105400A (zh) | 2021-02-01 |
US20210286674A1 (en) | 2021-09-16 |
US11392457B2 (en) | 2022-07-19 |
US11048586B2 (en) | 2021-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10854285B2 (en) | Memory access module for performing a plurality of sensing operations to generate digital values of a storage cell in order to perform decoding of the storage cell | |
US9195539B2 (en) | Method for reading data from block of flash memory and associated memory device | |
US20120011416A1 (en) | Ecc controller for use in flash memory device and memory system including the same | |
US11010065B2 (en) | Read retry method for solid state storage device | |
US20160070507A1 (en) | Memory system and method of controlling memory device | |
US20080215952A1 (en) | Hybrid flash memory device, memory system, and method controlling errors | |
KR20190129653A (ko) | 메모리 장치, 이를 포함하는 메모리 시스템 및 메모리 시스템의 동작 방법 | |
CN111837108A (zh) | 基于不成功错误校正操作将经恢复数据提供到存储器子系统处的新存储器单元 | |
US10186302B2 (en) | Semiconductor systems performing double-write operations and methods of operating the same | |
KR20180086816A (ko) | 사전-검사된 에러율에 따른 적응형 에러정정을 수행하는 메모리장치 및 전자장치와, 메모리장치의 동작방법 | |
CN109471808B (zh) | 具有数据可靠性机制的存储系统及其操作方法 | |
US8775902B2 (en) | Memory controller and storage device | |
KR101574208B1 (ko) | 불휘발성 메모리 장치, 그것을 포함하는 메모리 시스템, 그리고 그것의 동작 방법 | |
KR20210010718A (ko) | 메모리 시스템 및 메모리 시스템에서의 에러정정방법 | |
EP3499376B1 (en) | Memory system varying operation of memory controller according to internal status of memory device | |
US11949428B2 (en) | Iterative error correction in memory systems | |
KR20200018156A (ko) | 메모리장치에 대한 에러정정코드 기능을 갖는 메모리 시스템 및 그 운영방법 | |
KR20150069291A (ko) | 데이터 복호화 장치 및 데이터 복호화 방법 | |
US11108412B2 (en) | Memory systems and methods of correcting errors in the memory systems | |
US10922025B2 (en) | Nonvolatile memory bad row management | |
CN110797069B (zh) | 电压调整方法、存储器控制电路单元以及存储器存储装置 | |
CN111508546B (zh) | 解码方法、存储器控制电路单元与存储器存储装置 | |
CN111435604B (zh) | 解码方法、存储器控制电路单元以及存储器存储装置 | |
CN117409844A (zh) | 数据恢复方法、存储器存储装置及存储器控制器 |