KR20210014034A - 낮은 레이턴시를 갖는 에러정정코드 디코더 - Google Patents

낮은 레이턴시를 갖는 에러정정코드 디코더 Download PDF

Info

Publication number
KR20210014034A
KR20210014034A KR1020190092049A KR20190092049A KR20210014034A KR 20210014034 A KR20210014034 A KR 20210014034A KR 1020190092049 A KR1020190092049 A KR 1020190092049A KR 20190092049 A KR20190092049 A KR 20190092049A KR 20210014034 A KR20210014034 A KR 20210014034A
Authority
KR
South Korea
Prior art keywords
error
kes
input
value
syndrome
Prior art date
Application number
KR1020190092049A
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 KR1020190092049A priority Critical patent/KR20210014034A/ko
Priority to TW109116720A priority patent/TW202105921A/zh
Priority to US16/883,845 priority patent/US11424765B2/en
Priority to CN202010585264.3A priority patent/CN112311403A/zh
Publication of KR20210014034A publication Critical patent/KR20210014034A/ko
Priority to US17/865,630 priority patent/US11824560B2/en

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/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
    • 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
    • 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
    • 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
    • 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/1525Determination and particular use of error location polynomials
    • 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/1585Determination of error values
    • 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/65Purpose and implementation aspects
    • H03M13/6502Reduction of hardware complexity or efficient processing
    • 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/65Purpose and implementation aspects
    • H03M13/6561Parallelized implementations
    • 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/1545Determination of error locations, e.g. Chien search or other methods or arrangements for the determination of the roots of the error locator polynomial
    • 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/157Polynomial evaluation, i.e. determination of a polynomial sum at a given value

Abstract

ECC 디코더는, 코드워드로부터 신드롬을 연산하여 출력하는 신드롬 연산 블록과, 그리고 제1 내지 제3 경로를 통해 전송되는 데이터를 비순차적으로 출력시키는 패스 컨트롤러를 포함한다. 제1 경로는, 신드롬 연산 결과 에러가 없는 경우 코드워드를 전송하는 경로이다. 제2 경로는, 싱글-에러 디코딩 로직을 포함하여, 신드롬 연산 결과 단일 에러인 경우 단일 에러를 정정하여 상기 패스 컨트롤러로 전송하는 경로이다. 그리고 제3 경로는, 멀티-에러 디코딩 로직을 포함하여, 신드롬 연산 결과 멀티 에러인 경우 멀티 에러를 정정하여 상기 패스 컨트롤러로 전송하는 경로이다.

Description

낮은 레이턴시를 갖는 에러정정코드 디코더{ECC decoder having low latency}
본 개시의 여러 실시예들은 메모리 시스템의 에러정정기술에 관한 것으로서, 특히 낮은 레이턴시를 갖는 에러정정코드(Error Errection Coder ; 이하 ECC) 디코더에 관한 것이다.
일반적으로 정보를 전송하는 경로를 채널(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 디코딩이라 한다.
본 출원이 해결하고자 하는 과제는, 낮은 레이턴시를 갖는 ECC 디코더를 제공하는 것이다.
본 개시의 일 예에 따른 ECC 디코더는, 코드워드로부터 신드롬을 연산하여 출력하는 신드롬 연산 블록과, 그리고 제1 내지 제3 경로를 통해 전송되는 데이터를 비순차적으로 출력시키는 패스 컨트롤러를 포함한다. 제1 경로는, 신드롬 연산 결과 에러가 없는 경우 코드워드를 전송하는 경로이다. 제2 경로는, 싱글-에러 디코딩 로직을 포함하여, 신드롬 연산 결과 단일 에러인 경우 단일 에러를 정정하여 상기 패스 컨트롤러로 전송하는 경로이다. 그리고 제3 경로는, 멀티-에러 디코딩 로직을 포함하여, 신드롬 연산 결과 멀티 에러인 경우 멀티 에러를 정정하여 상기 패스 컨트롤러로 전송하는 경로이다.
본 개시의 일 예에 따른 ECC 디코더는, 메모리 미디어로부터 액세스한 코드워드를 입력받아 신드롬을 연산하여 출력하는 신드롬 연산 블록과, 코드워드를 입력받아 저장시키고, 신드롬 연산 결과 에러가 없는 경우 입력된 코드워드를 출력시키는 패스트 패스 컨트롤러와, 복수개의 KES-스테이지들을 포함하되, 첫번째 KES-스테이지는 신드롬 연산 블록으로부터 입력되는 신드롬에 대한 에러 위치/값 다항식을 연산하여 출력하고, 두번째 내지 마지막 KES-스테이지들 각각은 이전의 KES-스테이지로부터의 에러 위치/값 다항식을 입력받아 추가 연산에 의해 얻어진 에러 위치/값 다항식을 출력시키되, 추가 연산된 에러 위치/값 다항식에서 에러 위치 및 에러 값이 특정되는 경우 다음 KES-스테이지로 에러 위치/값 다항식을 전송하지 않고 직접 출력시키는 KES 블록과, KES 블록으로부터 입력되는 에러 위치/값 다항식의 해를 구하여 에러를 정정하는 CSEE 블록과, CSEE 블록으로부터의 출력 데이터와 패스트 패스 컨트롤러에 저장된 코드워드에 대한 연산을 수행하여 에러 정정 여부를 확인한 후 출력시키는 정정불능 에러 검출기와, 그리고 패스트 패스 컨트롤러로부터 입력되는 데이터 및 정정불능 에러 검출기로부터 입력되는 데이터 중 먼저 입력되는 데이터를 최종 ECC 디코딩된 데이터로 출력시키는 멀티플렉서를 포함한다.
여러 실시예들에 따르면, 에러 개수에 따라 서로 다른 데이터 처리 경로를 제공하고, 처리 결과에 대해 ECC 디코더로 입력되는 순서와 무관하게 에러 위치/값 다항식에서의 에러 위치 및 에러 값이 특정되는 순서대로 데이터 처리가 이루어지도록 함으로써 ECC 디코딩 과정에서 소요되는 레이턴시를 감소시킬 수 있다는 이점이 제공된다.
도 1은 ECC 엔진을 포함하는 메모리 시스템의 일 예를 나타내 보인 블록도이다.
도 2는 본 개시에 따른 ECC 디코더의 일 예를 나타내 보인 블록도이다.
도 3은 도 2의 ECC 디코더의 비순차적 멀티-에러 디코딩 로직 구성의 일 예를 나타내 보인 블록도이다.
도 4는 도 3의 비순차적 멀티-에러 디코딩 로직의 KES-스테이지 구성의 일 예를 나타내 보인 도면이다.
도 5는 본 개시에 따른 ECC 디코더의 다른 예를 나타내 보인 블록도이다.
도 6은 도 5의 ECC 디코더의 동작 과정의 일 예로서 에러가 없는 데이터에 대한 처리 과정을 설명하기 위해 나타내 보인 블록도이다.
도 7은 도 5의 ECC 디코더의 동작 과정의 일 예로서 에러가 없는 데이터에 대한 처리 과정을 설명하기 위해 나타내 보인 타이밍도이다.
도 8은 도 5의 ECC 디코더의 동작 과정의 일 예로서 싱글 에러를 갖는 데이터에 대한 처리 과정을 설명하기 위해 나타내 보인 블록도이다.
도 9는 도 5의 ECC 디코더의 동작 과정의 일 예로서 싱글 에러를 갖는 데이터에 대한 처리 과정을 설명하기 위해 나타내 보인 타이밍도이다.
도 10은 도 5의 ECC 디코더의 동작 과정의 일 예로서 2개 이상의 멀티 에러를 갖는 데이터에 대한 처리 과정을 설명하기 위해 나타내 보인 블록도이다.
도 11은 도 5의 ECC 디코더의 동작 과정의 일 예로서 2개 이상의 멀티 에러를 갖는 데이터에 대한 처리 과정을 설명하기 위해 나타내 보인 타이밍도이다.
도 12는 도 5의 ECC 디코더의 동작 과정의 일 예로서 서로 다른 에러 개수를 갖는 데이터에 대한 처리 과정을 설명하기 위해 나타내 보인 블록도이다.
도 13은 도 5의 ECC 디코더의 동작 과정의 일 예로서 서로 다른 에러 개수를 갖는 데이터에 대한 처리 과정을 설명하기 위해 나타내 보인 타이밍도이다.
본 출원의 예의 기재에서 "제1" 및 "제2"와 같은 기재는 부재를 구분하기 위한 것이며, 부재 자체를 한정하거나 특정한 순서를 의미하는 것으로 사용된 것은 아니다. 또한, 어느 부재의 "상"에 위치하거나 "상부", "하부", 또는 "측면"에 위치한다는 기재는 상대적인 위치 관계를 의미하는 것이지 그 부재에 직접 접촉하거나 또는 사이 계면에 다른 부재가 더 도입되는 특정한 경우를 한정하는 것은 아니다. 또한, 어느 한 구성 요소가 다른 구성 요소에 "연결되어 있다"거나 "접속되어 있다"의 기재는, 다른 구성 요소에 전기적 또는 기계적으로 직접 연결되어 있거나 또는 접속되어 있을 수 있으며, 또는, 중간에 다른 별도의 구성 요소들이 개재되어 연결 관계 또는 접속 관계를 구성할 수도 있다.
도 1은 ECC 엔진(140)을 포함하는 메모리 시스템(100)의 일 예를 나타내 보인 블록도이다. 도 1을 참조하면, 메모리 시스템(100)은, 호스트(110)와, 메모리 미디어(120)와, 그리고 메모리 컨트롤러(130)를 포함하여 구성될 수 있다. 메모리 미디어(120)는, 호스트(110)의 요청에 따른 메모리 컨트롤러(130)의 제어 동작에 의해 액세스될 수 있다. 일 예에서 메모리 미디어(120)는, 디램(DRAM)과 같은 휘발성 메모리, 또는 플래시(flash) 메모리, 상변화 메모리(PCRAM), 저항 변화 메모리(ReRAM), 강유전체 메모리(FeRAM), 자기저항 메모리(MRAM)와 같은 비휘발성 메모리를 포함할 수도 있다. 호스트(110)는, 메모리 컨트롤러(130)로 커맨드를 전송할 수 있다. 커맨드에는 리드(read) 커맨드 및 라이트(write) 커맨드가 포함될 수 있다. 호스트는, 커맨드와 함께 어드레스(address)도 함께 전송할 수 있다.
메모리 컨트롤러(130)는, 호스트(110)로부터의 리드 커맨드에 응답하여 메모리 미디어(120) 내의 데이터에 대한 리드 동작을 제어한다. 또한 메모리 컨트롤러(130)는, 호스트(110)로부터의 라이트 커맨드에 응답하여 메모리 미디어(120)에 대한 라이트 동작을 제어한다. 메모리 컨트롤러(130)는, ECC 엔진(140)을 포함할 수 있다. ECC 엔진(140)은 ECC 인코더(141)와 ECC 디코더(142)를 포함할 수 있다. ECC 엔진(140)은 메모리 미디어(120)에 대한 라이트 동작 및 리드 동작 과정에서 데이터의 에러를 정정하는 기능을 수행한다.
구체적으로 ECC 인코더(141)는, 메모리 미디어(120)에 대한 라이트 동작 과정에서 호스트(110)로부터 전달되는 오리지널 데이터(또는 라이트 데이터)에 대해 ECC 인코딩을 수행한다. ECC 인코더(141)로부터 출력되는 ECC 인코딩된 데이터는 오리지널 데이터에 패리티 데이터가 추가되어 구성된다. 이하에서는 ECC 인코딩된 데이터를 코드워드(codeword)로 명명하기로 한다. ECC 인코더(141)로부터 출력되는 코드워드는 메모리 미디어(120)에 저장된다. ECC 디코더(142)는 메모리 미디어(120)로부터 액세스한 리드 데이터(즉 코드워드)에 대해 ECC 디코딩을 수행하여 에러를 정정한다. ECC 디코더(142)로부터 출력되는 ECC 디코딩된 데이터(ECC decoded data)는, 호스트(110)로 전송된다.
도 2는 본 개시에 따른 ECC 디코더(142)의 일 예를 나타내 보인 블록도이다. 도 2를 참조하면, ECC 디코더(142)는, 신드롬 연산 블록(syndrome calculation block)(210), 패스트 패스 컨트롤러(fast path controller)(220), 싱글-에러 디코딩 로직(single-error decoding logic)(240), 비순차적 멀티-에러 디코딩 로직(out-of-order multi-error decoding logic)(250), 정정불능 에러 검출기(UED; Uncorrectable Error Detector)(260), 및 패스 컨트롤러(pass controller)(270)를 포함할 수 있다. ECC 디코더(142)는, 데이터 또는 심볼이 전송되는 제1 내지 제5 경로(231-235)를 포함할 수 있다. 도 1을 참조하여 설명한 바와 같이, ECC 디코더(142)는 코드워드를 입력받고 ECC 디코딩된 데이터를 출력시킨다. ECC 디코더(142)로 입력되는 코드워드는 신드롬 연산 블록(210) 및 패스트 패스 컨트롤러(220)에 동시에 입력될 수 있다.
신드롬 연산 블록(210)은, 메모리 미디어(도 1의 120)로부터 액세스한 코드워드(codeword)를 입력받고 신드롬을 연산하여 출력한다. 일 예에서 신드롬 연산 블록(210)은, 복수개의 갈로아 필드(Galois Field) 곱셈기들(GF multipliers)과 복수개의 칼로아 필드 애더들(GF adders)로 구성되어 매트릭스 연산을 수행할 수 있다. 이 매트릭스 연산에 따라 신드롬 연산 블록(210)으로부터 출력되는 신드롬의 값에 따라 코드워드에 포함된 에러의 개수를 파악할 수 있다. 일 예에서 신드롬 연산 블록(210)으로부터 출력되는 신드롬의 값이 모두 "0"인 경우는 에러가 포함되지 않은 경우일 수 있다. 반면에 신드롬 연산 블록(210)으로부터 출력되는 신드롬의 값이 모두 "0"이 아닌 경우는, 에러를 포함하고 있는 경우일 수 있다. 에러를 포함하는 경우, 신드롬의 값은, 연산 대상인 매트릭스의 열들 중에서 해당되는 비트 위치에 대응하는 열 값과 동일한 값이 된다. 이에 따라 신드롬 연산 결과에 따라서 에러가 없는 경우와, 에러가 한 개 있는 경우와, 그리고 에러가 두 개 이상 있는 경우를 판별할 수 있다.
일 예에서 신드롬 연산 결과 에러가 없는 경우, 신드롬 연산 블록(210)은 노 에러 제어신호(CS_NO_ERROR)를 패스트 패스 컨트롤러(220)로 입력시킬 수 있다. 신드롬 연산 결과 에러가 한 개 있는 경우, 즉 싱글-에러인 경우, 신드롬 연산 블록(210)은 연산된 신드롬을 제2 경로(232)를 통해 싱글-에러 디코딩 로직(240)으로 입력시킬 수 있다. 신드롬 연산 결과 에러가 두 개 이상 있는 경우, 즉 멀티-에러인 경우, 신드롬 연산 블록(210)은 연산된 신드롬을 제3 경로(233)를 통해 비순차적 멀티-에러 디코딩 로직(250)으로 입력시킬 수 있다.
패스트 패스 컨트롤러(220)는, 메모리 미디어(도 1의 120)로부터 액세스한 코드워드(codeword)를 입력받는다. 입력된 코드워드는 패스트 패스 컨트롤러(220) 내부에 저장될 수 있다. 이를 위해 패스트 패스 컨트롤러(220)는, 내부에 버퍼 메모리가 배치될 수 있다. 일 예에서 신드롬 연산 블록(210)으로의 코드워드 입력과, 패스트 패스 컨트롤러(220)로의 코드워드 입력은 동시에 이루어질 수 있다. 다른 예에서, 신드롬 연산 블록(210)으로의 코드워드 입력과, 패스트 패스 컨트롤러(220)로의 코드워드 입력은 일정 클럭 간격으로 이루어질 수도 있다. 패스트 패스 컨트롤러(220)는, 신드롬 연산 블록(210)으로부터 노 에러 제어신호(CS_NO_ERROR)가 입력되는 경우, 노 에러 제어신호(CS_NO_ERROR)에 응답하여 내부에 저장된 코드워드를 출력시킬 수 있다. 패스트 패스 컨트롤러(220)로부터 출력되는 코드워드는 제1 경로(231)를 통해 패스 컨트롤러(270)로 전달된다. 제1 경로(231)는 패스트 패스 컨트롤러(220)와 패스 컨트롤러(270)를 직접(directly) 연결한다.
싱글-에러 디코딩 로직(240)은, 신드롬 연산 블록(210)에서의 신드롬 연산 결과 싱글 에러인 경우, 제2 경로(232)를 통해 신드롬 연산 블록(210)으로부터 전송되는 신드롬을 입력받는다. 제2 경로(232)는 신드롬 연산 블록(210)과 패스 디코더(270) 사이에 배치되며, 싱글-에러 디코딩 로직(240)은 제2 경로(232) 상에 배치된다. 싱글-에러 디코딩 로직(240)은, 입력되는 신드롬에 대한 ECC 디코딩을 수행하여 에러를 정정한다. 싱글-에러 디코딩 로직(240)으로부터 출력되는 ECC 디코딩된 데이터는 패스 컨트롤러(270)로 전송된다. 일 예에서 싱글-에러 디코딩 로직(240)은, 에러 위치/값 다항식을 연산하여 출력하는 KES(Key Equation Solver) 블록과, 에러 위치/값 다항식의 해를 구하는 CSEE(Chien-Search and Errata-Evaluator) 블록을 포함할 수 있다.
비순차적 멀티-에러 디코딩 로직(250)은, 신드롬 연산 블록(210)에서의 신드롬 연산 결과 멀티 에러인 경우, 제3 경로(233)를 통해 신드롬 연산 블록(210)으로부터 전송되는 신드롬을 입력받는다. 제3 경로(233)는, 신드롬 연산 블록(210)과 비순차적 멀티-에러 디코딩 로직(250)을 직접 연결시킨다. 비순차적 멀티-에러 디코딩 로직(250)은, 전송되는 신드롬을 이용한 ECC 디코딩을 수행하여 에러를 정정한다. 비순차적 멀티-에러 디코딩 로직(250)은, ECC 디코딩된 데이터를 제4 경로(234)를 통해 패스 컨트롤러(270)로 전송하거나, 또는 제5 경로(235)를 통해 정정불능 에러 검출기(UED)(260)로 전송한다. 제4 경로(234)는, 비순차적 멀티-에러 디코딩 로직(250)과 패스 컨트롤러(270)를 직접 연결한다. 제5 경로(235)는 비순차적 멀티-에러 디코딩 로직(250)과 패스 컨트롤러(270) 사이에 배치되며, 제5 경로(235) 상에 정정불능 에러 검출기(UED)(260)가 배치된다.
일 예에서 비순차적 멀티-에러 디코딩 로직(250)는, 멀티-에러 디코딩 결과에 따라 정정불능 에러 후보를 검출할 수 있다. ECC 디코딩 결과 정정불능 에러 후보가 아닌 경우, 비순차적 멀티-에러 디코딩 로직(250)로부터의 ECC 디코딩된 데이터는 제4 경로(234)를 통해 패스 컨트롤러(270)에 전송된다. 반면에 ECC 디코딩 결과 정정불능 에러 후보에 해당하는 경우, 비순차적 멀티-에러 디코딩 로직(250)으로부터의 ECC 디코딩된 데이터는 제5 경로(235)를 통해 정정불능 에러 검출기(270)에 입력된다.
정정불능 에러 검출기(UED)(270)는, 비순차적 멀티-에러 디코딩 로직(250)으로부터 입력되는 ECC 디코딩된 데이터와 코드워드에 대한 비트별(bit-by-bit) XOR 연산을 통해 에러 정정 여부 및 정정불능 에러를 판정한다. 이를 위해 정정불능 에러 검출기(UED)(270)는 XOR 연산기를 포함하여 구성될 수 있다. 일 예에서 XOR 연산 결과 모두 "0"의 값이 출력되면, 에러가 정정되었다는 것을 의미할 수 있다. 반면에 XOR 연산 결과 모두 다른 결과가 제공되는 경우 정정불능 에러인 것으로 판정될 수 있다. 정정불능 에러 검출기(270)를 통해 출력되는 ECC 디코딩된 데이터는, 제5 경로(235)를 통해 패스 컨트롤러(270)에 전송된다. 정정불능 에러인 것으로 판정되는 경우, ECC 디코딩된 데이터에 정정불능 에러를 나타내는 플래그(flag)가 포함될 수 있다.
패스 컨트롤러(270)는, 제1 경로(231), 제2 경로(232), 제4 경로(234), 및 제5 경로(235)를 통해 전송되는 ECC 디코딩된 데이터를 비순차적인 방식으로 출력시킨다. 제1 경로(231)를 통해서는 패스트 패스 컨트롤러(220)에 저장되어 있던 코드워드가 전송되지만, 본 예에서는 제1 경로(231)를 통해 패스 컨트롤러(270)로 전송되는 코드워드로 ECC 디코딩된 데이터로 명명하기로 한다. 패스 컨트롤러(270)의 ECC 디코딩된 데이터의 비순차적 방식의 출력은, 메모리 미디어로부터 전송되는 원래의 데이터 순서가 아닌 패스 컨트롤러(270)로 전송되는 ECC 디코딩된 데이터 순서대로 출력시키는 방식을 의미한다.
구체적으로 제1 코드워드 및 제2 코드워드가 메모리 미디어로부터 순차적으로 전송되는 경우를 예로 들기로 한다. 이 경우 제1 코드워드에 대한 제1 신드롬이 먼저 연산되고, 이어서 제2 코드워드에 대한 제2 신드롬이 연산된다. 따라서 일반적인 경우 제1 신드롬을 이용한 제1 ECC 디코딩 결과인 제1 ECC 디코딩된 데이터가 먼저 ECC 디코더로부터 출력되고, 이어서 제2 신드롬을 이용한 제2 ECC 디코딩 결과인 제2 ECC 디코딩된 데이터가 먼저 ECC 디코더로부터 출력된다. 반면에 본 예에 따른 ECC 디코더(142)의 경우, 제1 ECC 디코딩이 끝나기 전에 제2 ECC 디코딩이 먼저 끝나는 경우, 제2 ECC 디코딩된 데이터가 제1 ECC 디코딩된 데이터보다 먼저 패스 컨트롤러(270)로 입력된다. 그리고 패스 컨트롤러(270)의 비순차적 동작에 의해, 제2 ECC 디코딩된 데이터가 제1 ECC 디코딩된 데이터보다 먼저 ECC 디코더(142)로부터 출력될 수 있다.
도 3은 도 2의 ECC 디코더(142)의 비순차적 멀티-에러 디코딩 로직(250) 구성의 일 예를 나타내 보인 블록도이다. 도 3을 참조하면, 비순차적 멀티-에러 디코딩 로직(250)은, KES(Key Equation Solver) 블록(310) 및 CSEE(Chien-Search and Errata-Evaluator) 블록(320)을 포함하여 구성될 수 있다. KES 블록(310)은, 신드롬 연산 블록(도 2의 210)으로부터 신드롬을 입력받고, 에러 위치 및 에러값을 알려주는 다항식(polynomial)을 연산하여 출력한다. CSEE 블록(320)은, KES 블록(310)으로부터 출력되는 다항식을 입력받고, 매트릭스 연산을 수행하여 다항식의 해를 구한다. 이때 매트릭스의 로우 사이즈(row size) 및 컬럼 사이즈(column size)는 각각 다항식 사이즈 및 코드워드 사이즈와 동일하다. CSEE 블록(320)은, 매트릭스 연산 결과 최종 ECC 디코딩된 데이터를 출력한다. 다항식의 해가 구해지는 경우, CSEE 블록(320)으로부터 출력되는 ECC 디코딩된 데이터는 에러가 정정된 코드워드에 해당된다. 반면에 다항식의 해가 구해지지 않으면, CSEE 블록(320)으로부터 출력되는 ECC 디코딩된 데이터는 에러 코드(errata-code)에 해당된다.
KES 블록(310)은, 복수개, 예컨대 N개의 KES-스테이지들(311-1, 311-2, …, 311-N)과 KES-패스 컨트롤러(312)를 포함할 수 있다. N개의 KES-스테이지들(311-1, 311-2, …, 311-N)은, 이전의 KES-스테이지의 출력 데이터가 다음의 KES-스테이지에 입력되는 케스케이드(cascade) 방식으로 연결되도록 배치된다. N개의 KES-스테이지들(311-1, 311-2, …, 311-N) 중 첫번째 KES-스테이지(311-1)는 입력되는 신드롬을 이용하여 첫번째 에러 위치/값 다항식을 계산한다. 첫번째 KES-스테이지(311-1)에서의 연산에서 에러 위치 및 에러값이 특정되지 않은 경우, 첫번째 에러 위치/값 다항식은 두번째 KES-스테이지(311-2)로 입력된다. 두번째 KES-스테이지(311-1)는, 동일한 방식으로, 입력되는 첫번째 에러 위치/값 다항식을 이용하여 두번째 에러 위치/값 다항식을 계산하고, 에러 위치 및 에러값이 특정되지 않은 경우 세번째 KES-스테이지로 두번째 에러 위치/값 다항식을 입력시킨다. 이와 같은 에러 위치/값 다항식 계산은, 마지막 N번째 KES-스테이지(311-N)에 이르기까지 순차적으로 수행될 수 있다.
N개의 KES-스테이지들(311-1, 311-2, …, 311-N) 각각의 에러 위치/값 다항식 연산 과정에서 에러 위치 및 에러값이 특정된 에러 위치/값 다항식이 구해지는 경우, KES-스테이지들(311-1, 311-2, …, 311-N) 각각으로부터 출력되는 에러 위치/값 다항식은 다음의 KES-스테이지로 전송되지 않고 바로 KES-패스 컨트롤러(312)로 전송된다. 예컨대 첫번째 KES-스테이지(311-1)에서의 연산 결과인 첫번째 에러 위치/값 다항식에서 에러 위치 및 에러값이 특정되는 경우, 첫번째 에러 위치/값 다항식은 두번째 KES-스테이지(311-2)로 입력되지 않고 KES-패스 컨트롤러(312)로 입력된다. 다만 마지막, 즉 N번째 KES-스테이지(311-N)의 경우 에러 위치 및 에러값의 특정 여부와 무관하게 N번째 에러 위치/값 다항식을 KES-패스 컨트롤러(312)로 입력시킨다. 이와 같이, 에러 위치/값 다항식 연산 과정에서, 에러 위치 및 에러값의 특정 여부에 따라 N개의 KES-스테이지들(311-1, 311-2, …, 311-N) 중 어느 하나의 KES-스테이지로부터 KES-패스 컨트롤러(312)로 직접 에러 위치/값 다항식이 전송된다.
KES-패스 컨트롤러(312)는, N개의 KES-스테이지들(311-1, 311-2, …, 311-N) 각각으로부터 출력되는 에러 위치/값 다항식을 입력받고 비순차적인 방식으로 출력시킨다. KES-패스 컨트롤러(312)의 비순차적 방식의 동작은, 메모리 미디어로부터 입력되는 순서가 아닌 KES 블록(310) 내에서의 에러 위치/값 다항식의 입력 순서대로 출력시키는 방식을 의미한다. 이에 따라 KES-스테이지들(311-1, 311-2, …, 311-N) 각각의 연산 결과에 따라서, 나중에 입력되는 코드워드(또는 신드롬)에 대한 에러 위치/값 다항식이 이전에 입력된 코드워드(또는 신드롬)에 대한 에러 위치/값 다항식보다 먼저 KES-패스 컨트롤러(312)로부터 출력될 수 있다. 앞서 도 2를 참조하여 설명한 예, 즉 제1 코드워드 및 제2 코드워드가 호스트로부터 순차적으로 전송되는 경우를 예로 들기로 한다. 이 경우 제1 코드워드에 대한 제1 신드롬이 먼저 연산되고, 이어서 제2 코드워드에 대한 제2 신드롬이 연산된다. 따라서 KES 블록(310)으로 제1 신드롬이 먼저 입력되고 제2 신드롬이 나중에 입력된다. 제1 신드롬 및 제2 신드롬에 대한 KES 블록(310)에서의 연산 결과, 각각 N번째 KES-스테이지(311-N)로부터의 N번째 에러 위치/값 다항식 및 첫번째 KES-스테이지(311-1)로부터의 첫번째 에러 위치/값 다항식이 KES-패스 컨트롤러(312)로 입력되는 경우를 예로 들기로 한다. 이 경우 첫번째 에러 위치/값 다항식이 N번째 에러 위치/값 다항식보다 먼저 KES-패스 컨트롤러(312)로 입력된다. 따라서 KES-패스 컨트롤러(312)는, 비순차적 동작에 따라서 제2 코드워드에 대한 첫번째 에러 위치/값 다항식을 먼저 출력시키고, 이어서 제1 코드워드에 대한 N번째 에러 위치/값 다항식을 나중에 출력시킨다.
CSEE 블록(320)은, KES-패스 컨트롤러(312)로부터 입력되는 에러 위치/값 다항식의 해를 구함으로써 에러 위치와 에러값을 ??는다. 일 예에서 CSEE 블록(320)은 치엔 매트릭스(Chien Matrix), 포니 매트릭스, 및 갈로아 곱셈기/갈로아 인버터(Galois Multiplier/Galois Inverter)를 포함하여 구성될 수 있다. 치엔 매트릭스(Chien Matrix)는 에러 위치/값 다항식에 대해 치엔 매트릭스 연산을 수행하여 에러 위치를 구한다. 포니 매트릭스는 에러 위치/값 다항식에 대해 포니 매트릭스 연산을 수행하여 에러값을 구한다. 갈로아 곱셈기/갈로아 인버터는, 치엔 매트릭스 연산 및 포니 매트릭스 연산 결과에 대해 갈로아 곱셈 연산 및 갈로아 인버전 연산을 수행하여 최종 ECC 디코딩된 데이터를 발생시킨다. 최종 ECC 디코딩된 데이터는, 에러 정정 여부에 따라 에러가 정정된 코드워드이거나, 또는 에러가 정정되지 않은 코드워드일 수 있다.
CSEE 블록(320)으로부터 출력되는 ECC 디코딩된 데이터는, 정정불능 에러 후보 선정 여부에 따라서, 제4 경로(234)를 통해 패스 컨트롤러(270)에 입력되거나, 또는 제5 경로(235)를 통해 정정불능 에러 검출기(260)로 입력된다. 일 예에서 N개의 KES-스테이지들(311-1, 311-2, …, 311-N) 각각에서는 에러 위치/값 다항식의 연산 결과에 따라 정정불능 에러 후보에 해당하는지의 여부를 판정할 수 있다. KES-스테이지로부터 KES-패스 컨트롤러(312)를 통해 출력되는 에러 위치/값 다항식이 정정불능 에러 후보에 해당하는 경우, CSEE 블록(320)으로부터 출력되는 ECC 디코딩된 데이터는 정정불능 에러 검출기(260)로 입력된다. 반면에 KES-스테이지로부터 KES-패스 컨트롤러(312)를 통해 출력되는 에러 위치/값 다항식이 정정불능 에러 후보에 해당하지 않는 경우, CSEE 블록(320)으로부터 출력되는 ECC 디코딩된 데이터는 패스 컨트롤러(270)로 입력된다.
도 4는 도 3의 비순차적 멀티-에러 디코딩 로직(250)의 첫번째 KES-스테이지(311-1) 구성의 일 예를 나타내 보인 도면이다. 본 예에 따른 첫번째 KES-스테이지(311-1) 구성은, 신드롬을 입력받는 점을 제외하고는 도 3의 두번째 내지 N번째 KES-스테이지들(311-2, …, 311-N) 각각의 구성과 동일하다. 두번째 내지 N번째 KES-스테이지들(311-2, …, 311-N) 각각은 이전의 KES-스테이지로부터 에러 위치/값 다항식을 입력받는다. 도 4를 참조하면, 첫번째 KES-스테이지(311-1)는, 멀티플렉서(361-1)와, 제1 및 제2 KES-유닛들(362-11, 362-12)과, 그리고 조기-중지 컨트롤러(363-1)를 포함하여 구성될 수 있다. 멀티플렉서(361-1)는, 제1 입력단자 및 제2 입력단자를 통해 각각 신드롬 및 제2 KES-유닛(362-12)의 출력 데이터를 입력받는다. 멀티플렉서(361-1)는, 조기-중지 컨트롤러(363-1)로부터 제어신호를 입력받고, 제어신호에 따라 제1 입력단자 및 제2 입력단자 중 하나의 입력단자를 통해 입력되는 데이터를 출력한다.
제1 및 제2 KES-유닛들(362-11, 362-12) 각각은, 예컨대 BMA(Berlkamp Messey Algorithm)을 이용한 연산을 수행하여 에러 위치/값 다항식을 출력시킨다. 에러 위치/값 다항식을 구하기 위한 연산은, 복수개의 KES-유닛들 각각에 의해 순차적으로 수행될 수 있다. 제1 KES-스테이지(311-1)를 구성하는 KES-유닛들의 개수는 다양하게 설정될 수 있다. KES-유닛들의 개수가 많을수록 에러 위치/값 다항식 연산의 정확도는 증가하지만, 연산 시간은 길어질 수 있다. 첫번째 KES-유닛, 즉 제1 KES-유닛(362-11)은, 멀티플렉서로부터 입력되는 신드롬을 이용하여 에러 위치/값 다항식 연산을 수행하고, 그 결과를 다음의 제2 KES-유닛(362-12)에 입력시킨다. 마지막 KES-유닛, 즉 제2 KES-유닛(362-12)으로부터 출력되는 에러 위치/값 다항식은, 에러 위치/값 다항식의 반복 연산을 위해 멀티플렉서(361-1)의 제2 입력단자로 입력될 수 있다. 또한 제2 KES-유닛(362-12)으로부터 출력되는 에러 위치/값 다항식은, 조기-중지 컨트롤러(363-1)로 입력된다.
조기-중지 컨트롤러(363-1)는, 제2 KES-유닛(362-12)으로부터 입력되는 에러 위치/값 다항식을 KES-패스 컨트롤러(312)로 입력시키거나, 또는 다음의 KES-스테이지, 즉 제2 KES-스테이지(311-2)로 입력시킨다. 일 예에서 조기-중지 컨트롤러(363-1)는, 멀티플렉서(361-1)의 제어단자로 제어신호를 입력시킴으로써, 멀티플렉서(361-1)의 출력신호를 선택할 수 있다. 일 예에서 조기-중지 컨트롤러(363-1)는, 입력되는 에러 위치/값 다항식에서 에러 위치 및 에러값이 특정되었는지의 여부를 확인할 수 있다. 제2 KES-유닛(362-12)로부터 입력되는 에러 위치/값 다항식에서 에러 위치 및 에러값이 특정되는 경우, 조기-중지 컨트롤러(363-1)는, 에러 위치/값 다항식을 KES-패스 컨트롤러(도 3의 312)로 입력시킨다. 반면에 제2 KES-유닛(362-12)로부터 입력되는 에러 위치/값 다항식에서 에러 위치 및 에러값이 특정되지 않는 경우, 조기-중지 컨트롤러(363-1)는 에러 위치/값 다항식을 다음의 KES-스테이지인 두번째 KES-스테이지(311-2)로 입력시켜서 추가적인 에러 위치/값 다항식 연산이 이루어지도록 한다.
일 예에서 조기-중지 컨트롤러(363-1)는, 입력되는 에러 위치/값 다항식이 정정불능 에러 후보인지의 여부를 판정할 수 있다. 정정불능 에러 후보인지의 여부에 대한 판정은, 에러 위치/값 다항식에 포함되는 에러의 개수 등을 고려하여 이루어질 수 있다. 조기-중지 컨트롤러(363-1)는, 에러 위치/값 다항식이 정정불능 에러 후보에 해당하는지의 여부에 관한 플래그(flag)를 KES-패스 컨트롤러(312)로 출력시킬 수 있다. 일 예에서 에러 위치/값 다항식이 정정불능 에러 후보인 것으로 판정되면, 조기-중지 컨트롤러(363-1)는 에러 위치/값 다항식과 함께 정정불능 에러 후보 플래그값으로서 이진데이터 "1"을 KES-패스 컨트롤러(312)로 출력시킬 수 있다. 반면에 에러 위치/값 다항식이 정정불능 에러 후보가 아닌 것으로 판정되면, 조기-중지 컨트롤러(363-1)는 에러 위치/값 다항식과 함께 정정불능 에러 후보 플래그값으로서 이진데이터 "0"을 KES-패스 컨트롤러(312)로 출력시킬 수 있다.
도 5는 본 개시에 따른 ECC 디코더(442)의 다른 예를 나타내 보인 블록도이다. 도 5를 참조하면, ECC 디코더(442)는, 신드롬 연산 블록(410), KES 블록(510), CSEE 블록(520), UE 검출기(550), 패스트 패스 컨트롤러(610), 버퍼 메모리(620), 및 멀티플렉서(640)를 포함하여 구성될 수 있다. 본 예에 따른 ECC 디코더(442)는 패스트 디코딩 패스(fast decoding path)와 정상 디코딩 패스(normal decoding path)를 갖는다. 패스트 디코딩 패스는, 에러 개수가 1개 이하인 경우, ECC 디코딩에 의한 데이터가 전송되는 경로로 정의될 수 있다. 정상 디코딩 패스는, 에러 개수가 2개 이상인 경우 ECC 디코딩에 의한 데이터가 전송되는 경로로 정의될 수 있다.
신드롬 연산 블록(410)은, 메모리 미디어로부터 액세스한 코드워드(codeword)를 입력받고, 신드롬을 연산하여 출력시킨다. 신드롬 연산 블록(410)으로부터 출력되는 신드롬은 KES 블록(510)으로 전송된다. 일 예에서 신드롬 연산 블록(410)은 제1 제어신호(CS1)를 패스트 패스 컨트롤러(610)로 입력시킬 수 있다. 제1 제어신호(CS1)는, 신드롬 연산 결과 파악되는 에러 유무에 대응되는 이진스트림으로 구성될 수 있다. 일 예에서 신드롬 연산 결과, 에러가 존재하지 않는 경우, 신드롬 연산 블록(410)은 제1 제어신호(CS1)로서 "0"을 패스트 패스 컨트롤러(610)로 입력시킨다. 신드롬 연산 결과, 에러가 존재하는 경우, 신드롬 연산 블록(410)은 제1 제어신호(CS1)로서 "1"을 패스트 패스 컨트롤러(610)로 입력시킨다.
패스트 패스 컨트롤러(610)는, 메모리 미디어로부터 액세스한 코드워드(codeword) 및 신드롬 연산 블록(410)으로부터의 제1 제어신호(CS1)를 입력받는다. 또한 패스트 패스 컨트롤러(610)는, KES 블록(510)으로부터의 ECC 디코딩된 데이터를 입력받을 수 있다. 패스트 패스 컨트롤러(610)로 입력되는 코드워드는, 패스트 패스 컨트롤러(610) 내부의 저장영역 내에 임시로 저장될 수 있다. 패스트 패스 컨트롤러(610)는 입력되는 제1 제어신호(CS1)의 값에 따라 적절한 데이터 입/출력 동작을 수행한다. 예컨대 제1 제어신호(CS1)로서 값 "0"이 입력되는 경우, 즉 에러가 존재하지 않는 경우, 패스트 패스 컨트롤러(610)는, 저장되어 있는 코드워드를 멀티플렉서(640)의 입력단자로 입력시킨다. 제1 제어신호(CS1)로서 값 "1"이 입력되는 경우, 즉 에러가 존재하는 경우, 패스트 패스 컨트롤러(610)는, KES 블록(510)으로부터 ECC 디코딩된 데이터가 입력되면, 입력되는 ECC 디코딩된 데이터를 멀티플렉서(640)의 입력단자로 입력시킨다. 반면에 제1 제어신호(CS1)로서 값 "1"이 입력되었지만 KES 블록(510)으로부터 ECC 디코딩된 데이터가 입력되지 않은 경우, 패스트 패스 컨트롤러(610)는, 저장되어 있는 코드워드를 버퍼 메모리(620)로 전송한다.
KES 블록(510)은, 복수개, 예컨대 제1 내지 제6 KES-스테이지들(511-0, …, 511-5)과, 싱글 에러 디코더(512)와, 그리고 비순차적 KES-패스 컨트롤러(513)를 포함하여 구성될 수 있다. 제1 내지 제6 KES-스테이지들(511-0, …, 511-5) 각각은, 에러 위치/값 다항식 연산을 수행한다. 제1 내지 제6 KES-스테이지들(511-0, …, 511-5)은, 이전의 KES-스테이지의 출력 데이터가 다음의 KES-스테이지에 입력되는 케스케이드(cascade) 방식으로 연결되도록 배치된다. 신드롬 연산 블록(410)으로부터 신드롬을 입력받는 제1 KES-스테이지(511-0)의 출력 데이터는, 싱글 에러 디코더(512) 또는 제2 KES-스테이지(511-1)에 입력될 수 있다. 제2 내지 제5 KES-스테이지들(511-2, …, 511-4) 각각의 출력 데이터는, 다음 KES-스테이지 또는 비순차적 KES-패스 컨트롤러(513)에 입력될 수 있다. 마지막 제6 KES-스테이지(511-5)의 출력 데이터는 비순차적 KES-패스 컨트롤러(513)에 입력된다.
제1 내지 제6 KES-스테이지들(511-0, …, 511-5) 각각의 구성은, 도 4를 참조하여 설명한 제1 KES-스테이지(311-1)의 구성과 동일하다. 제1 KES-스테이지(511-0)는, 신드롬 연산 블록(410)으로부터 신드롬을 입력받고 첫번째 에러 위치/값 다항식을 연산하여 출력시킨다. 첫번째 에러 위치/값 다항식의 연산 결과, 에러 개수가 한 개인 싱글 에러인지, 에러 개수가 두 개 이상인 멀티 에러인지를 알 수 있다. 제1 KES-스테이지(511-0)는, 싱글 에러인 경우 연산된 에러 위치/값 다항식을 싱글 에러 디코더(512)로 입력시킨다. 반면에 멀티 에러인 경우, 제1 KES-스테이지(511-0)는, 연산된 에러 위치/값 다항식을 제2 KES-스테이지(511-1)로 입력시킨다. 일 예에서 제1 KES-스테이지(511-0)로부터 제2 KES-스테이지(511-1)로 입력되는 첫번째 에러 위치/값 다항식은, 첫번째 에러 위치 다항식(ELP; Error-Locator Polynomial) 및 첫번째 에러 값 다항식(EMP; Error-Magnitude Polynomial)으로 분리되어 전달될 수 있다. 에러 위치 다항식(ELP)은 에러 위치를 특정할 수 있는 다항식이고, 에러 값 다항식(EMP)은 에러 값을 특정할 수 있는 다항식이다.
제2 KES-스테이지(511-1)는, 제1 KES-스테이지(511-0)로부터 입력되는 첫번째 에러 위치 다항식(ELP) 및 첫번째 에러 값 다항식(EMP)에 대해 BMA를 이용한 연산을 수행하여 두번째 에러 위치 다항식(ELP) 및 두번째 에러 값 다항식(EMP)을 출력시킨다. 동일한 방식으로 제3 내지 제6 KES-스테이지들(511-2, …, 511-5) 각각은 앞선 KES-스테이지로부터 입력되는 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)에 대해 BMA를 이용한 연산을 수행하고, 연산 결과인 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)을 출력시킨다. 도 4를 참조하여 설명한 바와 같이, 제2 내지 제6 KES-스테이지들(511-1, …, 511-5) 각각은, 조기-중지 컨트롤러(도 4의 363-1)에 의해 에러 위치 및 에러 값이 특정되게 되면 다음 KES-스테이지로 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)을 전송하지 않고 비순차적 KES-패스 컨트롤러(513)로 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)을 전송한다.
비순차적 KES-패스 컨트롤러(513)는, 제2 내지 제6 KES-스테이지들(511-1, …, 511-5) 각각으로부터 출력되는 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)을 입력받고 비순차적인 방식으로 출력시킨다. 비순차적 KES-패스 컨트롤러(513)로부터 출력되는 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)은 CSEE 블록(520)으로 입력된다. 비순차적 KES-패스 컨트롤러(513)에 의한 데이터 전송은 비순차적인 방식으로 이루어진다. 즉 비순차적 KES-패스 컨트롤러(513)는, 메모리 미디어로부터 입력되는 순서가 아닌 KES 블록(510) 내에서의 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)의 입력 순서대로 출력시킨다. 이에 따라 제2 내지 제6 KES-스테이지들(511-1, …, 511-5) 각각의 연산 결과에 따라서, ECC 디코더(442)에 나중에 입력되는 코드워드(또는 신드롬)에 대한 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)이 이전에 입력된 코드워드(또는 신드롬)에 대한 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)보다 먼저 비순차적 KES-패스 컨트롤러(513)로부터 출력될 수 있다.
CSEE 블록(520)은, 비순차적 KES-패스 컨트롤러(513)로부터 입력되는 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)의 해를 구함으로써 에러 위치와 에러 값을 ??는다. CSEE 블록(520)은 ECC 디코딩된 데이터를 출력하고, 이 ECC 디코딩된 데이터는 정정불능 에러 검출기(550)로 입력된다. 일 예에서 CSEE 블록(520)은, CSEE 컨트롤러(521)와, 포니 매트릭스(Forney Matrix)(522)와, 치엔-오드 매트릭스(Chien-Odd Matrix)(524)와, 치엔-이븐 매트릭스(Chien-Even Matrix)(525)와, 그리고 갈로아 곱셈기/갈로아 인버터(Galois Multiplier/Galois Inverter)(526)를 포함하여 구성될 수 있다. CSEE 컨트롤러(521)는, 비순차적 KES-패스 컨트롤러(513)로부터 입력되는 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)을 포니 매트릭스(522), 치엔-오드 매트릭스(524), 및 치엔-이븐 매트릭스(525)에 각각 입력시킨다.
포니 매트릭스(522)는, 포니 알고리즘(Forney's Algorithm)을 이용하여 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP) 사이의 관계를 통해 에러 값을 ??는다. 치엔-오드 매트릭스(524) 및 치엔-이븐 매트릭스(525)는, 에러 위치 다항식(ELP)의 해를 구하는 연산을 수행한다. 본 예에서 포니 매트릭스(522)에서의 연산과, 치엔-오드 매트릭스(524) 및 치엔-이븐 매트릭스(525)에서의 연산은 병렬로 수행될 수 있다. 갈로아 곱셈기/갈로아 인버터(526)는, 포니 매트릭스(522)와, 치엔-오드 매트릭스(524) 및 치엔-이븐 매트릭스(525)에서의 연산 결과에 대해 갈로아 곱셈 연산 및 갈로아 인버전 연산을 수행하여 최종 ECC 디코딩된 데이터를 발생시킨다.
정정불능 에러 검출기(550)는, 버퍼 메모리(620)로부터 코드워드를 입력받고, 또한 CSEE 블록(520)으로부터 ECC 디코딩된 데이터를 입력받는다. 일 예에서 정정불능 에러 검출기(550)는, XOR 연산기(630)를 포함할 수 있다. XOR 연산기(630)는, 버퍼 메모리(620)로부터 입력되는 코드워드와, CSEE 블록(520)으로부터 입력되는 ECC 디코딩된 데이터에 대해 비트 단위로(bit-by-bit) XOR 연산을 수행하여 최종 ECC 디코딩 결과 데이터를 출력시킨다. 일 예에서 XOR 연산 결과 모두 "0"의 값이 출력되면, 에러가 정정되었다는 것을 의미할 수 있다. 반면에 XOR 연산 결과 모두 다른 결과가 제공되는 경우 정정불능 에러인 것으로 판정될 수 있다. 정정불능 에러인 것으로 판정되는 경우, ECC 디코딩된 데이터에 정정불능 에러를 나타내는 플래그(flag)가 포함될 수 있다.정정불능 에러 검출기(550)를 통해 출력되는 ECC 디코딩된 데이터는 멀티플렉서(640)의 입력단자에 입력된다.
멀티플렉서(640)는, 제1 입력단자 및 제2 입력단자와, 출력단자를 갖는다. 패스트 디코딩 패스(fast decoding path)를 통해 전송되는 ECC 디코딩된 데이터는 제1 입력단자로 입력된다. 이에 따라 멀티플렉서(640)의 제1 입력단자를 통해서 패스트 패스 컨트롤러(610)로부터 입력되는 ECC 디코딩된 데이터가 입력된다. 정상 디코딩 패스(normal decoding path)를 통해 전송되는 ECC 디코딩된 데이터는 제2 입력단자로 입력된다. 이에 따라 멀티플렉서(640)의 제2 입력단자를 통해서는 정정불능 에러 검출기(550)로부터 입력되는 ECC 디코딩된 데이터가 입력된다. 멀티플렉서(640)는 제1 입력단자 또는 제2 입력단자를 통해 각각 입력되는 ECC 디코딩된 데이터를 출력시킨다. 제1 입력단자 및 제2 입력단자를 통해 각각의 ECC 디코딩된 데이터가 동시에 입력되는 경우, 멀티플렉서(640)는 제2 입력단자로 입력되는 ECC 디코딩된 데이터를 우선적으로 출력시킬 수 있다.
도 6 및 도 7은 도 5의 ECC 디코더(442)의 동작 과정의 일 예로서 에러가 없는 데이터(<E>)에 대한 처리 과정을 설명하기 위해 나타내 보인 블록도 및 타이밍도이다. 도 6에서 도 5와 동일한 참조부호는 동일한 구성요소를 나타낸다. 도 6 및 도 7을 참조하면, 메모리 미디어로부터 액세스한 코드워드가 예컨대 176 바이트(Byte) 크기의 <E>인 경우를 예로 들기로 한다. 일 예에서 버스트 랭크(burst length)가 4인 경우 각각이 44바이트(Byte) 크기를 갖는 <E0>, <E1>, <E2>, <E3>의 순서대로 신드롬 연산 블록(410) 및 패스트 패스 컨트롤러(610)에 입력된다. 신드롬 연산 블록(410)은, 입력되는 코드워드인 <E>에 대해 신드롬(SE)을 연산하여 출력시킨다. 신드롬(SE) 연산 과정에서, 에러가 없는 경우 신드롬 연산 블록(410)은 제1 제어신호(CS1)로서 이진값 "0"을 패스트 패스 컨트롤러(610)로 입력시킨다. 제1 제어신호(CS1)로서 이진값 "0"을 입력받은 패스트 패스 컨트롤러(610)는, 입력된 코드워드 <E>를 출력하여 멀티플렉서(640)의 제1 입력단자로 입력시킨다. 그러면 멀티플렉서(640)는 제1 입력단자로 입력된 코드워드 <E>를 최종 ECC 디코딩된 데이터로 출력시킨다.
도 8 및 도 9는 도 5의 ECC 디코더(442)의 동작 과정의 일 예로서 싱글 에러를 갖는 데이터(<C>)에 대한 처리 과정을 설명하기 위해 나타내 보인 블록도 및 타이밍도이다. 도 8에서 도 5와 동일한 참조부호는 동일한 구성요소를 나타낸다. 도 8 및 도 9를 참조하면, 메모리 미디어로부터 액세스한 코드워드가 예컨대 176 바이트(Byte) 크기의 <C>인 경우를 예로 들기로 한다. 버스트 랭크(burst length)가 4인 경우 각각이 44바이트(Byte) 크기를 갖는 <C0>, <C1>, <C2>, <C3>의 순서대로 신드롬 연산 블록(410) 및 패스트 패스 컨트롤러(610)에 입력된다. 신드롬 연산 블록(410)은, 입력되는 코드워드인 <C>에 대해 신드롬(SC)을 연산하여 출력시킨다. 신드롬(SC) 연산 과정에서, 에러가 존재하는 경우 신드롬 연산 블록(410)은 제1 제어신호(CS1)로서 이진값 "1"을 패스트 패스 컨트롤러(610)로 입력시킨다. 제1 제어신호(CS1)로서 이진값 "1"을 입력받은 패스트 패스 컨트롤러(610)는, KES 블록(510)으로부터의 ECC 디코딩된 데이터 입력을 기다린다.
신드롬 연산 블록(410)으로부터 출력되는 신드롬(SC)은 KES 블록(510)의 제1 KES-스테이지(511-0)에 입력된다. 제1 KES-스테이지(511-0)는 입력된 신드롬에 대한 매트릭스 연산을 수행하여 에러 위치/값 다항식(PC)을 연산한다. 이 과정에서 에러 개수가 한 개, 즉 싱글 에러인 것이 확인되면, 제1 KES-스테이지(511-0)는 싱글 에러 디코더(512)로 에러 위치/값 다항식(PC)을 입력시킨다. 싱글 에러 디코더(512)는 입력된 에러 위치/값 다항식(PC)의 해를 구하여 에러를 정정한다. 에러가 정정된 ECC 디코딩된 데이터 <C>는 패스트 패스 컨트롤러(610)에 입력된다. 패스트 패스 컨트롤러(610)는, 제1 제어신호(CS1)로서 이진값 "1"이 입력되고, KES 블록(510)으로부터 ECC 디코딩된 데이터 <C>가 입력됨에 따라, ECC 디코딩된 데이터 <C>를 출력하여 멀티플렉서(640)의 제1 입력단자로 입력시킨다. 그러면 멀티플렉서(640)는 제1 입력단자로 입력된 코드워드 <C>를 최종 ECC 디코딩된 데이터로 출력시킨다.
도 10 및 도 11은 도 5의 ECC 디코더(442)의 동작 과정의 일 예로서 2개 이상의 멀티 에러를 갖는 데이터(<A>/<B>/<D>)에 대한 처리 과정을 설명하기 위해 나타내 보인 블록도 및 타이밍도이다. 도 10에서 도 5와 동일한 참조부호는 동일한 구성요소를 나타낸다. 도 10 및 도 11을 참조하면, 메모리 미디어로부터 액세스한 코드워드들이 예컨대 각각 176 바이트(Byte) 크기의 <A>, <B>, <D>인 경우를 예로 들기로 한다. 본 예에서는 코드워드 <A>의 경우 21개의 에러를 갖고, 코드워드 <B>의 경우 18개의 에러를 가지며, 그리고 코드워드 <D>의 경우 9개의 에러를 갖는 경우를 예로 들기로 한다.
버스트 랭크(burst length)가 4인 경우, 코드워드 <A>는 각각이 44바이트(Byte) 크기를 갖는 <A0>, <A1>, <A2>, <A3>의 순서대로 신드롬 연산 블록(410) 및 패스트 패스 컨트롤러(610)에 입력된다. 이어서 코드워드 <B>는 각각이 44바이트(Byte) 크기를 갖는 <B0>, <B1>, <B2>, <B3>의 순서대로 신드롬 연산 블록(410) 및 패스트 패스 컨트롤러(610)에 입력된다. 이어서 코드워드 <D>는 각각이 44바이트(Byte) 크기를 갖는 <D0>, <D1>, <D2>, <D3>의 순서대로 신드롬 연산 블록(410) 및 패스트 패스 컨트롤러(610)에 입력된다. 메모리 미디어로부터 ECC 디코더(442)로 입력되는 코드워드 순서는 <A>, <B>, <D>의 순서지만, 본 예에 따른 ECC 디코더(442)는 비순차적 방식이 적용되므로, ECC 디코딩된 데이터가 ECC 디코더(442)로부터 출력되는 순서는 다를 수 있다.
구체적으로 신드롬 연산 블록(410)은, 입력되는 코드워드인 <A>, <B>, <D>에 대해 신드롬들(SA, SB, SD)을 연산하여 순차적으로 출력시킨다. 신드롬들(SA, SB, SD) 연산 과정에서, 신드롬 연산 블록(410)은 제1 제어신호(CS1)로서 이진값 "1"을 패스트 패스 컨트롤러(610)로 입력시킨다. 신드롬 연산 블록(410)으로부터 출력되는 신드롬들(SA, SB, SD)은 KES 블록(510)의 제1 KES-스테이지(511-0)에 순차적으로 입력된다. 제1 KES-스테이지(511-0)는 순차적으로 입력되는 신드롬들(SA, SB, SC)에 대한 에러 위치/값 다항식들(PA, PB, PC)을 순차적으로 연산한다. 이 과정에서 에러 개수가 두 개 이상, 즉 멀티 에러인 것이 확인되면, 제1 KES-스테이지(511-0)는 제2 KES-스테이지(511-1)로 에러 위치/값 다항식들(PA, PB, PC)을 순차적으로 입력시킨다.
도 5를 참조하여 설명한 바와 같이, 에러 위치/값 다항식들(PA, PB, PC)은 각각 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)으로 구분되어 전송될 수 있다. 코드워드 <A>의 경우, 에러 개수가 가장 많은 21개이므로, 21 싸이클의 에러 위치/값 다항식(PA) 연산이 요구된다. 코드워드 <B>의 경우, 에러 개수가 18개이므로, 18 싸이클의 에러 위치/값 다항식(PB) 연산이 요구된다. 이에 따라 코드워드들 <A> 및 <B>에 대한 에러 위치/값 다항식들(PA, PB)은 제6 KES-스테이지(511-5)로부터 비순차적 KES-패스 컨트롤러(513)로 입력된다. 반면에 코드워드 <D>의 경우, 에러 개수가 9개이므로, 9 사이클의 에러 위치/값 다항식(PD) 연산이 요구된다. 이에 따라 코드워드 <D>에 대한 에러 위치/값 다항식(PD)은 제3 KES-스테이지(511-2)로부터 비순차적 KES-패스 컨트롤러(513)로 입력된다.
도 11에 나타낸 바와 같이, 제3 KES-스테이지(511-2)로부터 에러 위치/값 다항식(PD)이 비순차적 KES-패스 컨트롤러(513)로 입력되는 시점은, 에러 위치/값 다항식(PA)이 제6 KES-스테이지(511-5)로부터 출력되는 시점과, 에러 위치/값 다항식(PB)이 제6 KES-스테이지(511-5)로부터 출력되는 시점 사이의 시점이다. 따라서 비순차적 KES-패스 컨트롤러(513)로의 입력은, 에러 위치/값 다항식(PA), 에러 위치/값 다항식(PA), 및 에러 위치/값 다항식(PB)의 순서로 이루어진다. 즉 ECC 디코더(442)에 입력되는 순서는 코드워드 <A>, <B>, <D>의 순서지만, 코드워드 <A>에 대한 에러 위치/값 다항식(PA)이 가장 먼저 비순차적 KES-패스 컨트롤러(513)로 입력된다. 이어서 코드워드 <D> 및 코드워드 <B>에 대한 에러 위치/값 다항식들(PD PB)가 비순차적 KES-패스 컨트롤러(513)로 순차적으로 입력된다. 비순차적 KES-패스 컨트롤러(513)는, 제2 내지 제6 KES0스테이지들(511-1, …, 511-5) 각각으로부터 입력되는 에러 위치/값 다항식 순서대로, 즉 PA, PD, PB 순서대로 CSEE 블록(520)으로 입력시킨다.
이와 같이, KES 블록(510) 내에서 비순차적 KES-패스 컨트롤러(513)로 입력되는 에러 위치/값 다항식은 PD, PA, PB의 시간적 순서를 갖는다. 비순차적 KES-패스 컨트롤러(513)는 에러 위치/값 다항식의 입력 순서에 따라 출력시키므로, 코드워드 <A>에 대한 에러 위치/값 다항식(PA), 코드워드 <D>에 대한 에러 위치/값 다항식(PD), 및 코드워드 <B>에 대한 에러 위치/값 다항식(PB) 순서대로 CSEE 블록(520)에 전송한다. CSEE 블록(520)에서의 연산은, 에러 위치/값 다항식의 입력 순서에 따라 순차적으로 이루어지므로, CSEE 블록(520)으로부터 출력되는 ECC 디코딩된 데이터는 <A0:A3>, <D0:D3>, <B0:B3>의 순서를 갖는다.
CSEE 블록(520)으로부터 출력되는 ECC 디코딩된 데이터 <A0:A3>, <D0:D3>, <B0:B3>는 정정불능 에러 검출기(550)의 XOR 연산기(630)에 입력된다. 또한 패스트 패스 컨트롤러(610)를 통해 버퍼 메모리(620)에 저장되어 있던 코드워드 <A0:A3>, <D0:D3>, <B0:B3> 또한 정정불능 에러 검출기(550)의 XOR 연산기(630)에 입력된다. 도 5를 참조하여 설명한 바와 같이, XOR 연산기(630)에 의한 비트 단위의(bit-by-bit) XOR 연산을 통해, 최종적인 ECC 디코딩된 데이터로서 <A>, <D>, <B>가 순차적으로 멀티플렉서(640)를 통해 출력된다. 이와 같이, 본 예에 따른 ECC 디코더(442)는, 멀티 에러를 갖는 코드워드들에 대해 ECC 디코딩을 수행하는 과정에서, 비순차적인 KES 연산 처리가 이루어지도록 함으로써 전체적인 ECC 디코딩 과정에서의 레이턴시(latency)를 감소시킬 수 있다.
도 12 및 도 13은 도 5의 ECC 디코더(442)의 동작 과정의 일 예로서 서로 다른 에러 개수를 갖는 데이터에 대한 처리 과정을 설명하기 위해 나타내 보인 블록도 및 타이밍도이다. 도 12에서 도 5와 동일한 참조부호는 동일한 구성요소를 나타낸다. 도 12 및 도 13을 참조하면, 메모리 미디어로부터 액세스한 코드워드들이 예컨대 각각 176 바이트(Byte) 크기의 <A>/<B>/<C>/<D>/<E>/<F>/<G>인 경우를 예로 들기로 한다. 버스트 랭크(burst length)가 4인 경우, 코드워드 <A>는 각각이 44바이트(Byte) 크기를 갖는 <A0>, <A1>, <A2>, <A3>의 순서대로, 코드워드 <B>는 <B0>, <B1>, <B2>, <B3>의 순서대로, 코드워드 <C>는 <C0>, <C1>, <C2>, <C3>의 순서대로, 코드워드 <D>는 <D0>, <D1>, <D2>, <D3>의 순서대로, 코드워드 <E>는 <E0>, <E1>, <E2>, <E3>의 순서대로, 코드워드 <F>는 <F0>, <F1>, <F2>, <F3>의 순서대로, 그리고 코드워드 <G>는 <G0>, <G1>, <G2>, <G3>의 순서대로 신드롬 연산 블록(410) 및 패스트 패스 컨트롤러(610)에 순차적으로 입력된다. 메모리 미디어로부터 ECC 디코더(442)로 입력되는 코드워드 순서는 <A>, <B>, <C>, <D>, <E>, <F>, <G>의 순서지만, 본 예에 따른 ECC 디코더(442)는 비순차적 방식이 적용되므로, ECC 디코딩된 데이터의 출력 순서는 다를 수 있다.
구체적으로 신드롬 연산 블록(410)은, 입력되는 코드워드인 <A>, <B>, <C>, <D>, <E>, <F>, <G>에 대해 신드롬들(SA, SB, SC, SD, SE, SF, SG)을 연산하여 출력시킨다. 본 예에서는 코드워드 <A>, 코드워드 <B>, 코드워드 <D>, 및 코드워드 <F>의 경우 각각 21개, 18개, 9개, 및 2개의 에러를 갖고, 코드워드 <C>의 경우 1개의 에러를 가지며, 그리고 코드워드 <E> 및 코드워드 <G>의 경우 에러가 없는 경우를 예로 들기로 한다. 신드롬 연산은, 입력되는 코드워드들 순서대로 수행되므로, 신드롬들은 SA, SB, SC, SD, SE, SF, SG의 순서대로 신드롬 연산 블록(410)으로부터 출력된다. 이 과정에서 신드롬 연산 블록(410)은 제1 제어신호(CS1)로서 이진값 "1", "1", "1", "1", "0", "1", "0"을 순차적으로 패스트 패스 컨트롤러(610)에 입력시킨다. 도 5를 참조하여 설명한 바와 같이, 제1 제어신호(CS1)가 이진값 "0"을 갖는 경우는 에러가 없는 경우이며, 이진값 "1"을 갖는 경우는 에러가 있는 경우이다.
신드롬 연산 블록(410)으로부터 출력되는 신드롬들(SA, SB, SC, SD, SE, SF, SG)은 KES 블록(510)의 제1 KES-스테이지(511-0)로 입력된다. 비록 에러가 없는 코드워드들(<E>, <G>)에 대한 신드롬들(SE, SG)도 제1 KES-스테이지(511-0)로 입력되지만, 제1 KES-스테이지(511-0)는 이 신드롬들(SE, SG)에 대한 에러 위치/값 다항식 연산을 수행하지는 않는다. 제1 KES-스테이지(511-0)는, 신드롬들(SA, SB, SC, SD, SF)에 대한 에러 위치/값 다항식 연산을 수행한다. 단일 에러를 갖는 신드롬 "SC"에 대한 에러 위치/값 다항식(PC)은, 싱글 에러 디코더(512)로 입력된다. 반면에 멀티 에러를 갖는 신드롬들 "SA", "SB", "SD", "SF"에 대한 에러 위치/값 다항식들은 순서대로 제2 KES-스테이지(511-1)로 입력된다.
위와 같은 KES-블록(510)에서의 연산이 이루어지는 동안, 패스트 패스 컨트롤러(610)로 입력되어 저장되어 있는 에러가 없는 코드워드들(<E>, <G>)은, 이진값 "0"을 갖는 제1 제어신호(CS1)에 응답하여, 패스트 패스 컨트롤러(610)로부터 출력된다. 패스트 패스 컨트롤러(610)로부터 출력된 코드워드들(<E>, <G>)은 멀티플렉서(640)의 제1 입력단자로 입력된다. 또한 싱글 에러를 갖는 신드롬(SC)에 대한 에러 위치/값 다항식(PC)을 입력받은 싱글 에러 디코더(512)는 입력된 에러 위치/값 다항식(PC)의 해를 구하여 에러를 정정한다. 에러가 정정된 ECC 디코딩된 데이터 <C>는 패스트 패스 컨트롤러(610)에 입력된다. 패스트 패스 컨트롤러(610)는, KES 블록(510)으로부터 입력되는 ECC 디코딩된 데이터 <C>를 출력하여 멀티플렉서(640)의 제1 입력단자로 입력시킨다.
이와 같이 에러가 없거나 싱글 에러를 갖는 코드워드 <C>, <E>, <G>에 대한 ECC 디코딩된 데이터는 패스트 패스 컨트롤러(610)를 통해 멀티플렉서(640)의 제1 입력단자로 입력된다. 다만 ECC 디코딩된 데이터의 패스트 패스 컨트롤러(610)로의 입력은, <C>, <E>, <G>의 순서로 이루어진다. 구체적으로 에러가 없는 코드워드들 <E> 및 <G>의 경우, KES 블록(510)에서의 에러 위치/값 다항식 연산이 수행되지 않고, 패스트 패스 컨트롤러(610)를 통해 직접 멀티플렉서(610)로 입력된다. 그러나 도 13의 타이밍도에 나타낸 바와 같이, 제1 KES-스테이지(511-0)로부터 에러 위치/값 다항식 "PC"가 출력되는 시점이 신드롬들 "SE" 및 "SG"이 연산되는 시점보다 빠르다. 이는 에러가 없는 코드워드들 <E> 및 <G>가 패스트 패스 컨트롤러(610)로 입력되기 이전에 싱글 에러를 갖는 코드워드 <C>에 대한 ECC 디코딩된 데이터가 패스트 패스 컨트롤러(610)로 먼저 입력된다는 것을 의미한다. 이에 따라 패스트 패스 컨트롤러(610)를 통해 코드워드 <C>에 대한 ECC 디코딩된 데이터가 가장 먼저 출력되고, 이어서 코드워드 <E> 및 코드워드 <G>의 순서대로 패스트 패스 컨트롤러(610)로부터 출력된다.
한편, 멀티 에러를 갖는 신드롬들(SA, SB, SD, SF)에 대해, 제2 KES-스테이지(511-1)부터 제6 KES-스테이지(511-5)에 이르기까지 순차적으로 에러 위치/값 다항식 연산이 수행된다. 구체적으로 제1 KES-스테이지(511-0)에 의해 수행되는 신드롬들(SA, SB, SC, SD, SF)에 대한 에러 위치/값 다항식 연산 과정에서, 멀티 에러를 갖는 신드롬들(SA, SB, SD, SF)에 대한 에러 위치/값 다항식들(PA, PB, PD, PF)은 제2 KES-스테이지(511-1)로 입력된다. 도 5를 참조하여 설명한 바와 같이, 에러 위치/값 다항식들(PA, PB, PD, PF)은 각각 에러 위치 다항식(ELP) 및 에러 값 다항식(EMP)으로 구분되어 전송될 수 있다. 제2 KES-스테이지(511-1)는, 제1 KES-스테이지(511-0)로부터 입력되는 에러 위치/값 다항식들(PA, PB, PD, PF)에 대해 순차적으로 에러 위치 및 에러 값을 특정하기 위한 에러 위치/값 다항식 연산을 수행한다.
제2 KES-스테이지(511-1)에서 가장 먼저 연산이 이루어지는 코드워드 <A>의 경우 에러 개수가 21개이므로, 제2 KES-스테이지(511-1)에서 연산된 에러 위치/값 다항식(PA)이 제3 KES-스테이지(511-2)로 입력된다. 이어서 연산이 이루어지는 코드워드 <B>의 경우 에러 개수가 18개이므로, 마찬가지로 제2 KES-스테이지(511-1)에서 연산된 에러 위치/값 다항식(PB)이 제3 KES-스테이지(511-2)로 입력된다. 이어서 연산이 이루어지는 코드워드 <D>의 경우 에러 개수가 9개이므로, 마찬가지로 제2 KES-스테이지(511-1)에서 연산된 에러 위치/값 다항식(PD)이 제3 KES-스테이지(511-2)로 입력된다. 그러나 마지막으로 연산이 이루어지는 코드워드 <F>의 경우 에러 개수가 2개이므로, 제2 KES-스테이지(511-1)에서 연산에 의해 에러 위치 및 에러 값이 특정된 에러 위치/값 다항식(PF)이 구해지며, 이 에러 위치/값 다항식(PF)은 제3 KES-스테이지(511-2)로 입력되지 않고 비순차적 KES-패스 컨트롤러(513)로 직접 입력된다.
제3 KES-스테이지(511-2)는, 제2 KES-스테이지(511-1)로부터 입력되는 에러 위치/값 다항식들(PA, PB, PD)에 대해 순차적으로 에러 위치 및 에러 값을 특정하기 위한 에러 위치/값 다항식 연산을 수행한다. 가장 먼저 연산이 이루어지는 코드워드 <A>의 경우 에러 개수가 21개이므로, 제3 KES-스테이지(511-2)에서 연산된 에러 위치/값 다항식(PA)이 제4 KES-스테이지(511-3)로 입력된다. 이어서 연산이 이루어지는 코드워드 <B>의 경우 에러 개수가 18개이므로, 마찬가지로 제3 KES-스테이지(511-2)에서 연산된 에러 위치/값 다항식(PB)이 제4 KES-스테이지(511-3)로 입력된다. 그러나 마지막으로 연산이 이루어지는 코드워드 <D>의 경우 에러 개수가 9개이므로, 제3 KES-스테이지(511-2)에서 연산에 의해 에러 위치 및 에러 값이 특정된 에러 위치/값 다항식(PD)이 구해지며, 이 에러 위치/값 다항식(PD)은 제4 KES-스테이지(511-3)로 입력되지 않고 비순차적 KES-패스 컨트롤러(513)로 직접 입력된다.
제4 KES-스테이지(511-3)는, 제3 KES-스테이지(511-2)로부터 입력되는 에러 위치/값 다항식들(PA, PB)에 대해 순차적으로 에러 위치 및 에러 값을 특정하기 위한 에러 위치/값 다항식 연산을 수행한다. 코드워드들 <A> 및 <B>의 경우 에러 개수가 각각 21개, 18개이므로, 제4 KES-스테이지(511-3)에서 연산된 에러 위치/값 다항식들(PA, PB)은 제5 KES-스테이지(511-4)로 순차적으로 입력된다. 제5 KES-스테이지(511-4)에서의 연산에서도 에러 위치 및 에러 값이 특정되지 않으므로, 제5 KES-스테이지(511-5)에서 연산된 에러 위치/값 다항식들(PA, PB)은 제6 KES-스테이지(511-5)로 순차적으로 입력된다. 그리고 마지막 제6 KES-스테이지(511-5)로부터 출력되는 에러 위치/값 다항식들(PA, PB)은 비순차적 KES-패스 컨트롤러(513)로 입력된다.
이상과 같이, 멀티 에러를 갖는 코드워드들은 <A>, <B>, <D>, <F>의 순서대로 ECC 디코더(442)에 입력되었지만, 비순차적 KES-패스 컨트롤러(513)로의 에러 위치/값 다항식의 입력은, 21 싸이클의 연산이 요구되는 에러 위치/값 다항식(PA), 9 싸이클의 연산이 요구되는 에러 위치/값 다항식(PD), 18 싸이클의 연산이 요구되는 에러 위치/값 다항식(PB), 및 2 싸이클의 연산이 요구되는 에러 위치/값 다항식(PF) 순서로 이루어진다. 구체적으로 도 13에 나타낸 바와 같이, 2개의 에러를 갖는 에러 위치/값 다항식(PF)의 경우, 다른 에러 위치/값 다항식에 비해 앞선 KES-스테이지, 즉 제2 KES-스테이지(511-1)에서 비순차적 KES-패스 컨트롤러(513)로 출력된다. 그러나 신드롬 연산 블록(410)으로부터 신드롬(SF)이 출력되는 시점이 에러 위치/값 다항식들(PA, PD, PB)이 비순차적 KES-패스 컨트롤러(513)로 출력되는 시점보다 늦는다. 이에 따라 비순차적 KES-패스 컨트롤러(513)로의 입력은 에러 위치/값 다항식(PF)이 가장 늦은 시점에 수행된다.
또한 9개의 에러를 갖는 에러 위치/값 다항식(PD)의 경우, 제3 KES-스테이지(511-2)에서 비순차적 KES-패스 컨트롤러(513)로 출력된다. 이 시점은, 에러 위치/값 다항식(PA)이 제6 KES-스테이지(511-5)로부터 출력되는 시점과, 에러 위치/값 다항식(PB)이 제6 KES-스테이지(511-5)로부터 출력되는 시점 사이의 시점이다. 따라서 비순차적 KES-패스 컨트롤러(513)로의 입력은, 에러 위치/값 다항식(PA), 에러 위치/값 다항식(PA), 및 에러 위치/값 다항식(PB)의 순서로 이루어진다. 결과적으로 비순차적 KES-패스 컨트롤러(513)는, 제2 내지 제6 KES0스테이지들(511-1, …, 511-5) 각각으로부터 입력되는 에러 위치/값 다항식 순서대로, 즉 PA, PD, PB, PF 순서대로 CSEE 블록(520)으로 입력시킨다.
CSEE 블록(520)에서의 연산은, 에러 위치/값 다항식들(PA, PD, PB, PF)의 입력 순서에 따라 순차적으로 이루어지므로, CSEE 블록(520)으로부터 출력되는 ECC 디코딩된 데이터는 <A0:A3>, <D0:D3>, <B0:B3>, <F0:F3>의 순서를 갖는다. CSEE 블록(520)으로부터 출력되는 ECC 디코딩된 데이터 <A0:A3>, <D0:D3>, <B0:B3>, <F0:F3>는 정정불능 에러 검출기(550)의 XOR 연산기(630)에 입력된다. 또한 패스트 패스 컨트롤러(610)를 통해 버퍼 메모리(620)에 저장되어 있던 코드워드 <A0:A3>, <D0:D3>, <B0:B3>, <F0:F3> 또한 정정불능 에러 검출기(550)의 XOR 연산기(630)에 입력된다. 도 5를 참조하여 설명한 바와 같이, XOR 연산기(630)에 의한 비트 단위의(bit-by-bit) XOR 연산을 통해, 최종적인 ECC 디코딩된 데이터로서 <A>, <D>, <B>, <F>가 순차적으로 멀티플렉서(640)를 통해 출력된다.
도 13에 나타낸 바와 같이, 멀티플렉서(640)에 입력되는 ECC 디코딩된 데이터는 <C>, <E>, <A>, <D>/<G>, <B>, <F>의 시간적 순서를 갖는다. 도면에서 참조부호 "700"으로 나타낸 바와 같이, 패스트 패스 컨트롤러(61)를 통해 전송되는 ECC 디코딩된 데이터 <G>와, 정정불능 에러 검출기(550)를 통해 전송되는 ECC 디코딩된 데이터 <D>는 동일 타이밍에 멀티플렉서(640)의 제1 및 제2 입력단자로 각각 입력될 수 있다. 이 경우, 어느 한 쪽 경로의 입력 데이터에 대해 우선권을 부여할 수 있다. 일 예에서 패스트 패스 컨트롤러(61)를 통해 전송되는 ECC 디코딩된 데이터 <G>보다 정정불능 에러 검출기(550)를 통해 전송되는 ECC 디코딩된 데이터 <D>에 대해 우선권을 부여할 수 있으며, 이에 따라 멀티플렉서(640)로부터 ECC 디코딩된 데이터 <G>가 먼저 출력되고, 이어서 ECC 디코딩된 데이터 <D>가 멀티플렉서(640)로부터 출력될 수 있다.
이상에서는 도면 및 실시 예를 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허청구범위에 기재된 본 출원의 기술적 사상으로부터 벗어나지 않는 범위 내에서 본 출원에 개시된 실시예들을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.
100...메모리 시스템 110...호스트
120,..메모리 미디어 130...메모리 컨트롤러
140...ECC 엔진 141...ECC 인코더
142...ECC 디코더 210...신드롬 연산 블록
230...싱글-에러 디코딩 로직 240...비순차적인 멀티-에러 디코딩 로직
250...정정불능 에러 검출기 260...패스 컨트롤러
310...KES 블록
311-1, 311-2, …, 311-N...KES-스테이지
312...KES-패스 컨트롤러 320...CSEE 블록
361...멀티플렉서 362-1, 362-2...KES-유닛
363...조기-중지(Early-Stop) 컨트롤러

Claims (20)

  1. 코드워드로부터 신드롬을 연산하여 출력하는 신드롬 연산 블록; 및
    제1 경로, 제2 경로, 및 제3 경로를 통해 전송되는 데이터를 비순차적으로 출력시키는 패스 컨트롤러를 포함하되,
    상기 제1 경로는, 상기 신드롬 연산 결과 에러가 없는 경우 상기 코드워드를 상기 패스 컨트롤러로 전송하는 경로이고,
    상기 제2 경로는, 싱글-에러 디코딩 로직을 포함하여, 상기 신드롬 연산 결과 단일 에러인 경우 상기 단일 에러를 정정하여 상기 패스 컨트롤러로 전송하는 경로이며, 그리고
    상기 제3 경로는, 멀티-에러 디코딩 로직을 포함하여, 상기 신드롬 연산 결과 멀티 에러인 경우 상기 멀티 에러를 정정하여 상기 패스 컨트롤러로 전송하는 경로인 ECC 디코더.
  2. 제1항에 있어서,
    상기 코드워드를 입력받고 제어신호에 응답하여 상기 입력된 코드워드를 상기 제1 경로를 통해 상기 패스 컨트롤러로 전송시키는 패스트 패스 컨트롤러를 더 포함하는 ECC 디코더.
  3. 제2항에 있어서,
    상기 제어신호는, 상기 신드롬 연산 블록에서의 신드롬 연산 결과 에러가 없는 것으로 판정되는 경우 상기 신드롬 연산 블록으로부터 상기 패스트 패스 컨트롤러로 입력되는 ECC 디코더.
  4. 제1항에 있어서,
    상기 패스트 패스 컨트롤러는, 상기 제1 내지 제3 경로들 각각을 통해 전송되는 순서대로 데이터를 출력시키는 ECC 디코더.
  5. 제1항에 있어서,
    상기 멀티-에러 디코딩 로직은, 에러 위치 및 에러 값을 특정하는 에러 위치/값 다항식을 통한 에러 정정을 수행하되, 상기 에러 위치/값 다항식 연산 과정에서 정정불능 에러 후보 여부를 검출하는 ECC 디코더.
  6. 제5항에 있어서,
    상기 제3 경로는, 상기 멀티-에러 디코딩 로직 및 패스 컨트롤러 사이의 제4 경로 및 제5 경로를 포함하되,
    상기 제4 경로는, 상기 에러 위치/값 다항식 연산 과정에서 정정불능 에러 후보에 해당하지 않는 경우, 멀티-에러 디코딩 로직으로부터의 출력 데이터를 상기 패스 컨트롤러로 직접 전송하는 경로이고, 그리고
    상기 제5 경로는, 상기 에러 위치/값 다항식 연산 과정에서 정정불능 에러 후보에 해당하는 경우, 멀티-에러 디코딩 로직으로부터의 출력 데이터를 정정불능 에러 검출기를 통해 상기 패스 컨트롤러로 전송하는 경로인 ECC 디코더.
  7. 제6항에 있어서,
    상기 정정불능 에러 검출기는, 상기 멀티-에러 디코딩 로직으로부터의 출력 데이터와 상기 코드워드를 비트 단위의 XOR 연산을 수행하여 정정불능 에러 여부를 판정하는 ECC 디코더.
  8. 제1항에 있어서, 상기 멀티-에러 디코딩 로직은,
    상기 신드롬 연산 블록으로부터의 신드롬을 입력받고 에러 위치 및 에러 값을 특정하는 에러 위치/값 다항식을 연산하여 출력하는 KES 블록; 및
    상기 KES 블록으로부터 입력되는 에러 위치/값 다항식의 해를 구하여 에러를 정정하는 CSEE 블록을 포함하는 ECC 디코더.
  9. 제8항에 있어서, 상기 KES 블록은,
    케스케이드 방식으로 연결되며, 각각이 에러 위치/값 다항식을 연산하여 출력하는 복수개의 KES-스테이지들; 및
    상기 KES-스테이지들 각각으로부터 출력되는 에러 위치/값 다항식을 입력받고 입력된 순서대로 출력시키는 KES-패스 컨트롤러를 포함하되,
    상기 복수개의 KES-스테이지들 각각은, 에러 위치 및 에러 값이 특정된 에러 위치/값 다항식이 연산되는 경우 상기 연산된 에러 위치/값 다항식을 상기 KES-패스 컨트롤러로 직접 전송하는 ECC 디코더.
  10. 제9항에 있어서, 상기 복수개의 KES-스테이지들 각각은,
    케스케이드 방식으로 연결되며, 각각이 상기 에러 위치/값 다항식을 연산하여 출력하는 복수개의 KES-유닛들; 및
    상기 KES-유닛들 중 마지막 KES-유닛으로부터 출력되는 에러 위치/값 다항식을 입력받는 조기-중지 컨트롤러를 포함하되,
    상기 조기-중지 컨트롤러는,
    상기 에러 위치/값 다항식에서 에러 위치 및 에러 값이 특정되는 경우 상기 에러 위치/값 다항식을 상기 KES-패스 컨트롤러로 입력시키고, 그리고
    상기 에러 위치/값 다항식에서 에러 위치 및 에러 값이 특정되지 않은 경우 상기 에러 위치/값 다항식을 다음의 KES-스테이지로 입력시키는 ECC 디코더.
  11. 제10항에 있어서,
    상기 조기-중지 컨트롤러는, 상기 에러 위치/값 다항식이 정정불능 에러 후보인지의 여부를 판정하고, 정정불능 에러 후보에 해당하는지의 여부에 관한 플래그를 상기 KES-패스 컨트로러로 출력시키는 ECC 디코더.
  12. 메모리 미디어로부터 액세스한 코드워드를 입력받아 신드롬을 연산하여 출력하는 신드롬 연산 블록;
    상기 코드워드를 입력받아 저장시키고, 상기 신드롬 연산 결과 에러가 없는 경우 상기 입력된 코드워드를 출력시키는 패스트 패스 컨트롤러;
    복수개의 KES-스테이지들을 포함하되, 첫번째 KES-스테이지는 상기 신드롬 연산 블록으로부터 입력되는 신드롬에 대한 에러 위치/값 다항식을 연산하여 출력하고, 두번째 내지 마지막 KES-스테이지들 각각은 이전의 KES-스테이지로부터의 에러 위치/값 다항식을 입력받아 추가 연산에 의해 얻어진 에러 위치/값 다항식을 출력시키되, 상기 추가 연산된 에러 위치/값 다항식에서 에러 위치 및 에러 값이 특정되는 경우 다음 KES-스테이지로 에러 위치/값 다항식을 전송하지 않고 직접 출력시키는 KES 블록;
    상기 KES 블록으로부터 입력되는 에러 위치/값 다항식의 해를 구하여 에러를 정정하는 CSEE 블록;
    상기 CSEE 블록으로부터의 출력 데이터와 상기 패스트 패스 컨트롤러에 저장된 코드워드에 대한 연산을 수행하여 에러 정정 여부를 확인한 후 출력시키는 정정불능 에러 검출기; 및
    상기 패스트 패스 컨트롤러로부터 입력되는 데이터 및 상기 정정불능 에러 검출기로부터 입력되는 데이터 중 먼저 입력되는 데이터를 최종 ECC 디코딩된 데이터로 출력시키는 멀티플렉서를 포함하는 ECC 디코더.
  13. 제12항에 있어서,
    상기 패스트 패스 컨트롤러에 저장된 코드워드를 입력받아 저장한 후 상기 정정불능 에러 검출기에서의 연산을 위해 출력시키는 버퍼 메모리를 더 포함하는 ECC 디코더.
  14. 제12항에 있어서,
    상기 KES 블록은, 상기 첫번째 KES-스테이지로부터의 에러 위치/값 다항식 연산 결과 싱글 에러인 경우 에러를 정정하여 상기 패스트 패스 컨트롤러로 출력시키는 싱글 에러 디코더를 더 포함하는 ECC 디코더.
  15. 제14항에 있어서,
    상기 패스트 패스 컨트롤러는, 상기 싱글 에러 디코더로부터 입력되는 데이터를 상기 멀티플렉서로 입력시키는 ECC 디코더.
  16. 제12항에 있어서,
    상기 KES 블록은, 상기 두번째 내지 마지막 KES-스테이지들 각각으로부터의 에러 위치/값 다항식을 입력받고, 입력되는 순서대로 상기 CSEE 블록으로 출력시키는 비순차적 KES-패스 컨트롤러를 더 포함하는 ECC 디코더.
  17. 제12항에 있어서,
    상기 신드롬 연산 블록은, 상기 신드롬 연산 결과 에러가 없는 경우 제1 레벨의 제어신호를 상기 패스트 패스 컨트롤러로 입력시키고, 상기 신드롬 연살 결과 에러가 있는 경우 제2 레벨의 제어신호를 상기 패스트 패스 컨트롤러로 입력시키는 ECC 디코더.
  18. 제17항에 있어서,
    상기 패스트 패스 컨트롤러는, 상기 제1 레벨의 제어신호에 응답하여 상기 패스트 패스 컨트롤러에 저장된 코드워드를 상기 멀티플렉서에 입력시키고, 상기 제2 레벨의 제어신호에 응답하여 상기 KES 블록으로부터 입력되는 ECC 디코딩된 데이터를 상기 멀티플렉서에 입력시키는 ECC 디코더.
  19. 제12항에 있어서,
    상기 KES 블록의 첫번째 KES-스테이지는, 상기 에러 위치/값 다항식 연산 결과 싱글 에러인 경우 싱글 에러 디코더로 상기 에러 위치/값 다항식을 전송하고, 상기 에러 위치/값 다항식 연산 결과 멀티 에러인 경우 다음의 KES-스테이지로 상기 에러 위치/값 다항식을 전송하는 ECC 디코더.
  20. 제12항에 있어서,
    상기 KES 블록의 복수개의 KES-스테이지들 각각에서의 에러 위치/값 다항식 연산은, 에러 위치 다항식 및 에러 값 다항식으로 구분하여 수행되는 ECC 디코더.
KR1020190092049A 2019-07-29 2019-07-29 낮은 레이턴시를 갖는 에러정정코드 디코더 KR20210014034A (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020190092049A KR20210014034A (ko) 2019-07-29 2019-07-29 낮은 레이턴시를 갖는 에러정정코드 디코더
TW109116720A TW202105921A (zh) 2019-07-29 2020-05-20 具有低延遲的錯誤校正碼ecc解碼器
US16/883,845 US11424765B2 (en) 2019-07-29 2020-05-26 ECC decoders having low latency
CN202010585264.3A CN112311403A (zh) 2019-07-29 2020-06-24 具有低延时的错误校正码ecc解码器
US17/865,630 US11824560B2 (en) 2019-07-29 2022-07-15 ECC decoders having low latency

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190092049A KR20210014034A (ko) 2019-07-29 2019-07-29 낮은 레이턴시를 갖는 에러정정코드 디코더

Publications (1)

Publication Number Publication Date
KR20210014034A true KR20210014034A (ko) 2021-02-08

Family

ID=74258364

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190092049A KR20210014034A (ko) 2019-07-29 2019-07-29 낮은 레이턴시를 갖는 에러정정코드 디코더

Country Status (4)

Country Link
US (2) US11424765B2 (ko)
KR (1) KR20210014034A (ko)
CN (1) CN112311403A (ko)
TW (1) TW202105921A (ko)

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3685014A (en) * 1970-10-09 1972-08-15 Ibm Automatic double error detection and correction device
JP3154607B2 (ja) * 1993-12-28 2001-04-09 三菱電機株式会社 誤り訂正復号装置及び誤り訂正復号方法
JP2768297B2 (ja) * 1995-03-23 1998-06-25 日本電気株式会社 データ転送方法とその装置
JP3699863B2 (ja) * 1999-07-12 2005-09-28 株式会社日立コミュニケーションテクノロジー エラー訂正符号装置、エラー訂正符号復号装置および伝送装置
US7634709B2 (en) * 2001-10-05 2009-12-15 Unisys Corporation Familial correction with non-familial double bit error detection
US6990624B2 (en) * 2001-10-12 2006-01-24 Agere Systems Inc. High speed syndrome-based FEC encoder and decoder and system using same
US20060059409A1 (en) * 2004-09-10 2006-03-16 Hanho Lee Reed-solomon decoder systems for high speed communication and data storage applications
US7539927B2 (en) * 2005-04-14 2009-05-26 Industrial Technology Research Institute High speed hardware implementation of modified Reed-Solomon decoder
US7653862B2 (en) * 2005-06-15 2010-01-26 Hitachi Global Storage Technologies Netherlands B.V. Error detection and correction for encoded data
KR101437396B1 (ko) * 2008-02-27 2014-09-05 삼성전자주식회사 레이턴시를 줄일 수 있는 에러 정정 블록을 포함하는메모리 시스템 및 그것의 에러 정정 방법
JP4672743B2 (ja) * 2008-03-01 2011-04-20 株式会社東芝 誤り訂正装置および誤り訂正方法
GB2490461A (en) * 2010-01-28 2012-10-31 Ibm Method, device and computer program product for decoding a codeword
KR101747794B1 (ko) 2011-03-29 2017-06-16 삼성전자주식회사 에러 정정 디코더 및 그것의 에러 정정 방법
KR102149674B1 (ko) * 2014-10-13 2020-09-01 삼성전자주식회사 에러 정정 디코더 및 에러 정정 디코더의 동작 방법
US9800271B2 (en) * 2015-09-14 2017-10-24 Qualcomm Incorporated Error correction and decoding
US10180877B2 (en) * 2016-05-12 2019-01-15 Taiwan Semiconductor Manufacturing Co., Ltd. Selective error correction in a data storage device

Also Published As

Publication number Publication date
US11824560B2 (en) 2023-11-21
US20220352905A1 (en) 2022-11-03
TW202105921A (zh) 2021-02-01
CN112311403A (zh) 2021-02-02
US11424765B2 (en) 2022-08-23
US20210036720A1 (en) 2021-02-04

Similar Documents

Publication Publication Date Title
JP5043562B2 (ja) エラー訂正回路、その方法及び前記回路を備える半導体メモリ装置
KR101433620B1 (ko) 처리량을 높이기 위하여 더블 버퍼링 구조와 파이프라이닝기법을 이용하는 디코더 및 그 디코딩 방법
US11740960B2 (en) Detection and correction of data bit errors using error correction codes
US8468432B2 (en) Coder-decoder and method for encoding and decoding an error correction code
JP2008165808A (ja) 誤り訂正確率を減らすエラー訂正回路、その方法及び前記回路を備える半導体メモリ装置
WO2016013285A1 (ja) メモリコントローラおよびメモリコントローラの制御方法
US20090110109A1 (en) Apparatus and method for generating a transmit signal and apparatus and method for extracting an original message from a received signal
CN110768751B (zh) 译码的方法与电路、存储器控制器、储存装置、控制器
US10802912B2 (en) Semiconductor memory device and memory system having the same
US10824507B2 (en) Semiconductor memory device, controller, and memory system
RU2448359C1 (ru) Устройство хранения и передачи данных с исправлением ошибок в байте информации и обнаружением ошибок в байтах информации
KR101314232B1 (ko) 에러 정정 코드의 부호화 및 복호화 방법 그리고 코덱
US8374098B2 (en) Check data encoding using parallel lane encoders
KR20210014034A (ko) 낮은 레이턴시를 갖는 에러정정코드 디코더
RU2450331C1 (ru) Устройство хранения и передачи данных с исправлением одиночных ошибок в байте информации и обнаружением произвольных ошибок в байтах информации
US11200117B2 (en) Semiconductor memory device, controller, memory system, and operation method thereof
JPH08293802A (ja) インターリーブ式誤り訂正方法
CN109840158B (zh) 一种操作存储器的方法
JP2005057741A (ja) インラインワイヤ誤り訂正
KR20240052583A (ko) 에러 처리 회로, 메모리 및 메모리의 동작 방법
JPS63274221A (ja) 誤り訂正復号方式
JP2011029857A (ja) フラッシュファイルシステムの誤り検出訂正機能
JPH05189257A (ja) ディスクアレイ装置の誤り制御方式
JPH0828672B2 (ja) 倍長単一誤り訂正2重誤り検出リード・ソロモン符号の復号器
KR20050056071A (ko) 병렬 리드솔로몬 부호화 장치

Legal Events

Date Code Title Description
E902 Notification of reason for refusal