KR20120110450A - 에러 정정 디코더 및 그것의 에러 정정 방법 - Google Patents

에러 정정 디코더 및 그것의 에러 정정 방법 Download PDF

Info

Publication number
KR20120110450A
KR20120110450A KR1020110028318A KR20110028318A KR20120110450A KR 20120110450 A KR20120110450 A KR 20120110450A KR 1020110028318 A KR1020110028318 A KR 1020110028318A KR 20110028318 A KR20110028318 A KR 20110028318A KR 20120110450 A KR20120110450 A KR 20120110450A
Authority
KR
South Korea
Prior art keywords
error
block
channel data
kes
channel
Prior art date
Application number
KR1020110028318A
Other languages
English (en)
Other versions
KR101747794B1 (ko
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 KR1020110028318A priority Critical patent/KR101747794B1/ko
Priority to US13/433,796 priority patent/US8719669B2/en
Publication of KR20120110450A publication Critical patent/KR20120110450A/ko
Application granted granted Critical
Publication of KR101747794B1 publication Critical patent/KR101747794B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • 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/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • 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

Abstract

본 발명에 따른 저장 매체로부터의 독출 데이터를 처리하는 에러 정정 디코더는, 복수의 채널들 각각으로 전달되는 채널 데이터들의 신드롬들을 계산하는 신드롬 계산 블록, 상기 신드롬들을 참조하여 상기 채널 데이터들 각각에 대한 에러 위치 다항식들을 구하는 에러 위치 다항식 계산 블록, 그리고 상기 에러 위치 다항식들 각각의 해를 구하는 치엔 서치 블록을 포함하되, 상기 에러 위치 다항식 계산 블록 또는 상기 치엔 서치 블록은 상기 복수의 채널들 각각에 독립적으로 구동되며, 상기 복수의 채널들 중 임의로 선택된 어느 하나의 채널의 채널 데이터를 처리하는 적어도 하나의 계산 유닛을 포함한다.

Description

에러 정정 디코더 및 그것의 에러 정정 방법{ERROR CORRECTION DECODER AND ERROR CORRECTION METHOD THEREOF}
본 발명은 반도체 메모리 장치에 관한 것으로, 좀 더 구체적으로는 불휘발성 메모리 장치를 포함하는 데이터 저장 장치에 관한 것이다.
반도체 메모리 장치(Semiconductor Memory Device)는 크게 휘발성 메모리 장치(Volatile Memory Device)와 불휘발성 메모리 장치(Non-volatile Memory Device)로 구분된다. 휘발성 메모리 장치는 읽고 쓰는 속도가 빠르지만 외부 전원 공급이 끊기면 저장된 내용이 사라져 버리는 단점이 있다. 반면에 불휘발성 메모리 장치는 외부 전원 공급이 중단되더라도 그 내용을 보존한다. 그러므로 불휘발성 메모리 장치는 전원이 공급되었는지의 여부에 관계없이 보존되어야 할 내용을 기억시키는 데 쓰인다. 특히, 불휘발성 메모리 중에서 플래시 메모리(Flash memory)는 기존의 EEPROM에 비해 집적도가 높아, 대용량 보조 기억 장치로의 응용에 매우 유리하다.
최근에는 기술의 진보와 플래시 메모리 장치의 가격 인하에 따라 플래시 메모리를 하드 디스크 드라이브(HDD)를 대체하기 위한 저장 매체로 사용되고 있다. 상술한 저장 장치를 솔리드 스테이트 드라이브(Solid State Drive) 또는 솔리드 스테이트 디스크(Solid State Disk)라고도 한다. 이하에서는 간단히 SSD라 칭하기로 한다. SSD는 고속으로 데이터를 입출력할 수 있으면서도 기계적 지연이나 실패율이 현저히 적다. 또한, SSD는 외부의 충격에도 데이터가 쉽게 손상되지 않으며, 발열·소음 및 전력소모가 적고, 소형화·경량화할 수 있는 장점이 있다. 따라서, 기계적으로 회전하는 플래터(Platter)를 사용하지 않는 SSD에 대한 수요는 저전력·대용량화의 모바일 트랜드에 따라 급격히 증가하고 있다.
본 발명의 목적은 에러 정정 연산의 속도를 높이고, 에러 정정 디코더의 사이즈를 줄일 수 있는 메모리 컨트롤러 및 그것을 포함하는 메모리 시스템을 제공하는 데 있다.
상기 목적을 달성하기 위한 본 발명에 따른 저장 매체로부터의 독출 데이터를 처리하는 에러 정정 디코더는, 복수의 채널들 각각으로 전달되는 채널 데이터들의 신드롬들을 계산하는 신드롬 계산 블록, 상기 신드롬들을 참조하여 상기 채널 데이터들 각각에 대한 에러 위치 다항식들을 구하는 에러 위치 다항식 계산 블록, 그리고 상기 에러 위치 다항식들 각각의 해를 구하는 치엔 서치 블록을 포함하되, 상기 에러 위치 다항식 계산 블록 또는 상기 치엔 서치 블록은 상기 복수의 채널들 각각에 독립적으로 구동되며, 상기 복수의 채널들 중 임의로 선택된 어느 하나의 채널의 채널 데이터를 처리하는 적어도 하나의 계산 유닛을 포함한다.
상기 목적을 달성하기 위한 본 발명의 불휘발성 메모리 장치로부터 읽혀진 데이터의 에러 정정 방법은, 상기 데이터를 복수의 채널들 각각으로 전달하는 단계, 상기 채널들 각각에 대응하는 채널 데이터들의 신드롬을 계산하는 단계, 상기 신드롬들을 참조하여 상기 채널 데이터들 각각에 대한 에러 위치 다항식들을 구하는 단계, 그리고 상기 에러 위치 다항식들 각각의 해를 구하는 단계를 포함하되, 상기 에러 위치 다항식을 구하는 단계 또는 상기 에러 위치 다항식들 각각의 해를 구하는 단계에서 제 2 채널 데이터에 대한 연산은 제 1 채널 데이터에 대한 연산 직후에 수행된다.
이상과 같은 본 발명에 따른 에러 정정 디코더 및 그것의 에러 정정 방법에 따르면, 복수의 채널로 전달되는 채널 데이터에 대한 에러 정정 디코딩에 소요되는 지능 소자들의 수를 줄일 수 있다. 그리고, 본 발명에 따른 에러 정정 디코더 및 그것의 에러 정정 방법에 따르면, 데이터를 요청한 외부로 읽기 데이터를 신속히 출력할 수 있다.
도 1은 본 발명의 실시 예에 따른 저장 장치를 보여주는 블록도이다.
도 2는 도 1의 스토리지 컨트롤러를 예시적으로 보여주는 블록도이다.
도 3은 도 2의 에러 정정 부호 블록의 제 1 실시 예를 보여주는 블록도이다.
도 4는 도 3의 상태 레지스터를 예시적으로 보여주는 블록도이다.
도 5는 본 발명의 특징을 간략히 설명하기 위한 블록도이다.
도 6은 도 5의 예시에서 본 발명의 이점을 설명하는 타이밍도이다.
도 7은 도 2의 에러 정정 부호 블록의 제 2 실시 예를 보여주는 블록도이다.
도 8은 본 발명의 제 2 실시 예의 특징을 간략히 설명하기 위한 블록도이다.
도 9는 도 8의 예시에서 본 발명의 이점을 설명하는 타이밍도이다.
도 10은 도 2의 에러 정정 부호 블록의 제 3 실시 예를 보여주는 블록도이다.
도 11은 도 10의 에러 정정 부호 블록(121c)의 연산 절차를 간략히 보여주는 블록도이다.
도 12a는 채널들 각각에 종속되는 KES 유닛들, 치엔 서치 유닛들을 포함하는 경우의 에러 정정 연산을 보여주는 타이밍도이다.
도 12b는 본 발명의 실시 예에 따른 채널들 각각에 독립된 KES 유닛, 치엔 서치 유닛들을 포함하는 에러 정정 연산을 보여주는 타이밍도이다.
도 13은 본 발명의 에러 정정 부호 블록의 제 4 실시 예를 보여주는 블록도이다.
도 14는 본 발명의 실시 예에 따른 SSD를 보여주는 블록도이다.
도 15는 본 발명에 따른 메모리 시스템을 보여주는 블록도이다.
도 16은 본 발명의 다른 실시 예에 따른 데이터 저장 장치를 예시적으로 보여주는 블록도이다.
도 17은 본 발명에 따른 컴퓨팅 시스템을 보여주는 블록도이다.
앞의 일반적인 설명 및 다음의 상세한 설명 모두 예시적이라는 것이 이해되어야 하며, 청구된 발명의 부가적인 설명이 제공되는 것으로 여겨져야 한다. 참조 부호들이 본 발명의 바람직한 실시 예들에 상세히 표시되어 있으며, 그것의 예들이 참조 도면들에 표시되어 있다. 가능한 어떤 경우에도, 동일한 참조 번호들이 동일한 또는 유사한 부분을 참조하기 위해서 설명 및 도면들에 사용된다.
이하에서는, 본 발명의 플래시 메모리 장치(Flash memory device) 또는 SSD가 본 발명의 특징 및 기능을 설명하기 위한 한 예로서 사용될 것이다. 하지만, 이 기술 분야에 정통한 사람은 여기에 기재된 내용에 따라 본 발명의 다른 이점들 및 성능을 쉽게 이해할 수 있을 것이다. 본 발명은 다른 실시 예들을 통해 또한, 구현되거나 적용될 수 있을 것이다. 게다가, 상세한 설명은 본 발명의 범위, 기술적 사상 그리고 다른 목적으로부터 상당히 벗어나지 않고 관점 및 응용에 따라 수정되거나 변경될 수 있다.
도 1은 본 발명의 실시 예에 따른 저장 장치를 보여주는 블록도이다. 도 1을 참조하면, 본 발명에 따른 저장 장치(100)는 저장 매체(110)와 스토리지 컨트롤러(120)를 포함한다.
저장 매체(110, Storage Medium)는 불휘발성 메모리 장치들(111~114, NVMs)을 포함할 수 있다. 예를 들면, 저장 매체(110)는 대용량의 저장 능력을 가지는 낸드 플래시 메모리(NAND-type Flash memory)로 구성될 수 있다. 또는, 저장 매체(110)는 PRAM, MRAM, ReRAM, FRAM 등의 차세대 불휘발성 메모리나 NOR 플래시 메모리로 구성될 수 있다.
저장 매체(110)는 스토리지 컨트롤러(120)와 복수의 채널을 통해서 데이터를 교환한다. 스토리지 컨트롤러(120)의 제어에 따라 저장 매체(110)에는 데이터가 기입될 수 있다. 또는, 스토리지 컨트롤러(120)의 제어에 따라 저장 매체(110)에 저장된 데이터가 스토리지 컨트롤러(120)로 출력될 수 있다. 본 발명에서는 저장 매체(110)로부터 읽혀진 데이터가 각각의 채널들로 전달되는 경우에 대해서 기술될 것이다. 그리고, 읽혀진 데이터에 대한 스토리지 컨트롤러(120)의 에러 정정 연산에 대해서 기술될 것이다.
저장 매체(110)에 포함되는 복수의 불휘발성 메모리 장치들(111~114)은 스토리지 컨트롤러(120)와 복수의 채널들(CH1, CH2,…, CHn)을 통해서 연결된다. 제 1 채널(CH1)에는 m 개(m은 자연수)의 메모리 장치들(111) 각각의 입출력 포트(예를 들면, 8비트 I/O 포트)가 연결된다. m 개(m은 자연수)의 메모리 장치들(111) 각각의 입출력 포트는 제 1 채널(CH1)에 공유될 것이다.
제 2 채널(CH2), 제 3 채널(CH3) 및 제 n 채널(CHn) 각각에도 동일한 방식으로 복수의 메모리 장치들(112, 113, 114)이 입출력 포트들을 공유한다. 각각의 채널에 연결된 메모리 장치들(111~114)은 채널 인터리빙(Channel Interleaving)이나 웨이 인터리빙(Way Interleaving) 방식으로 엑세스된다. 채널 인터리빙은 메모리 장치들(111)에 대한 DMA 동작이 완료되는 즉시, 메모리 장치들(112)에 대한 DMA 동작을 개시하는 동작을 의미한다. 즉, 인터리빙 동작을 통해서 하나의 메모리 장치가 제공받은 데이터를 메모리 셀에 프로그램하는 시간(tPROG)이나, 읽기 시간은 숨길 수 있음을 의미한다.
스토리지 컨트롤러(120)는 호스트(Host)와 저장 매체(110)를 인터페이싱한다. 스토리지 컨트롤러(120)는 호스트(Host)의 쓰기 명령에 응답하여 호스트(Host)로부터 제공되는 데이터를 저장 매체(110)에 기입한다. 또한, 스토리지 컨트롤러(120)는 호스트(Host)로부터의 읽기 명령에 응답하여 저장 매체(110)의 독출 동작을 제어한다.
스토리지 컨트롤러(120)는 저장 매체(110)로 기입되는 데이터를 에러 정정 인코딩(ECC Encoding)한다. 인코딩된 기입 데이터는 저장 매체(110)에 포함되는 각각의 메모리 장치들에 기입될 것이다. 읽기 동작시, 스토리지 컨트롤러(120)는 저장 매체(110)로부터 전달되는 읽기 데이터에 대한 에러 정정 디코딩(ECC Decoding)을 수행한다. 본 발명의 실시 예에 따른 스토리지 컨트롤러(120)는 채널들 각각에 대해서 독립적으로 수행되는 에러 검출 및 정정 연산을 통합하여 수행할 수 있는 에러 정정 부호 블록(121)을 포함한다.
에러 정정 부호 블록(121)은 신드롬(Syndrome) 계산 블록, 에러 위치 다항식 계산(Key Equation Solver: 이하, KES) 블록 및 치엔 서치(Chien Search) 블록을 포함한다. 신드롬 계산 블록은 읽기 데이터로부터 에러의 존재 유무를 검출하기 위한 신드롬(S)을 계산한다. KES 블록은 신드롬(S)을 참조하여 에러가 존재하는 위치를 구하기 위한 에러 위치 다항식을 구성한다. 그리고 치엔 서치 블록은 에러 위치 다항식의 해를 구하기 위한 연산을 수행한다.
본 발명의 에러 정정 부호 블록(121)은 KES 블록 또는 치엔 서치 블록을 채널들(CH1~CHn) 각각에 대해 독립적으로 구성할 수 있다. 채널들 각각으로부터 구해진 신드롬을 참조하여, KES 블록은 어느 하나의 채널로 전달되는 읽기 데이터의 에러 위치 다항식을 구할 수 있다. 또한, 치엔 서치 블록은 KES 블록으로부터 전달되는 적어도 어느 하나의 채널에 대한 에러 위치 다항식의 해를 구할 수 있다. 에러 정정 연산의 결과로 출력되는 데이터는 다시 각각의 채널 단위로 출력될 수 있다.
KES 블록 또는 치엔 서치 블록을 각각의 채널별로 구성하지 않고, 독립적으로 구성하면, KES 블록 또는 치엔 서치 블록을 구성하기 위한 소자의 수 또는 에러 정정 연산에서 발생하는 피크 전류를 줄일 수 있다.
도 2는 도 1의 스토리지 컨트롤러를 예시적으로 보여주는 블록도이다. 도 2를 참조하면, 스토리지 컨트롤러(120)는 에러 정정 부호 블록(121)과 버퍼 컨트롤러(122), 호스트 인터페이스(123) 및 중앙 처리 장치(124)를 포함한다.
에러 정정 부호 블록(121)은 중앙 처리 장치(124)의 제어에 따라 메모리 장치들(111~114, 도 1 참조)로부터 제공되는 데이터에 대한 에러 검출 및 정정 연산을 수행한다. 에러 정정 부호 블록(121)은 채널들 각각으로 전달되는 데이터에 대해서 신드롬(S)을 계산한다. 그리고, 에러 정정 부호 블록(121)은 계산된 신드롬(S)을 참조하여 채널들 각각으로 전달되는 데이터의 에러 위치 다항식과 그것의 해를 구한다. 이러한 연산을 위하여 에러 정정 부호 블록(121)은 신드롬 계산 블록, KES 블록, 및 치엔 서치 블록을 포함한다.
특히, KES 블록 또는 치엔 서치 블록은 채널들(CH1~CHn) 각각에 독립적으로 구성될 수 있다. 채널들 각각으로부터 구해진 신드롬을 참조하여, KES 블록은 어느 하나의 채널로 전달되는 읽기 데이터의 에러 위치 다항식(Error location polynomial)을 구할 수 있다. 또한, 치엔 서치 블록은 KES 블록으로부터 전달되는 적어도 어느 하나의 채널에 대한 에러 위치 다항식의 해를 구할 수 있다. 에러 정정 연산의 결과로 출력되는 데이터는 다시 각각의 채널 단위로 출력될 수 있다.
여기서, 에러 정정 부호 블록(121)은 저장 매체(110)와 스토리지 컨트롤러(120) 간의 인터페이싱을 제공하는 플래시 인터페이스(Flash interface, 미도시됨)에 포함될 수 있다.
버퍼 컨트롤러(122)는 버퍼 메모리(미도시됨)의 읽기 및 쓰기 동작들을 제어한다. 예를 들면, 버퍼 컨트롤러(122)는 쓰기 데이터(Write data)나 읽기 데이터(Read data)를 버퍼 메모리에 일시 저장한다. 대용량의 버퍼링을 제공하기 위해 버퍼 메모리는 동기식 디램(SDRAM)과 같은 휘발성 메모리로 구성될 수 있다. 에러 정정을 위해서는 읽혀진 데이터와 에러를 정정하기 위한 정정 벡터 간의 연산이 이루어져야 한다. 이러한 정정 연산을 위해서 버퍼 메모리가 지원될 수 있다.
호스트 인터페이스(123)는 호스트(Host)와 저장 장치(100)와의 물리적 연결을 제공한다. 즉, 호스트 인터페이스(123)는 호스트의 버스 포맷(Bus format)에 대응하여 저장 장치(100)와의 인터페이싱을 제공한다. 호스트(Host)의 버스 포맷으로 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI) 등으로 구성될 수 있다. 또한, 호스트 인터페이스(123)는 호스트(Host)가 저장 장치(100)를 하드 디스크 드라이브(HDD)로 인식하도록 지원하는 디스크 에뮬레이션(Disk Emulation) 기능을 지원할 수 있다.
중앙 처리 장치(124)는 호스트(Host)로부터 전달되는 명령어(CMD)를 디코딩한다. 중앙 처리 장치(124)는 명령어(CMD)에 대응하는 동작을 수행하도록 에러 정정 부호 블록(121), 버퍼 컨트롤러(122) 및 호스트 인터페이스(123) 등을 제어한다. 중앙 처리 장치(124)는 호스트 인터페이스(123) 내의 제어 레지스터들(미도시됨)의 값들을 이용하여 에러 정정 부호 블록(121), 버퍼 컨트롤러(122) 및 호스트 인터페이스(123) 등을 제어할 수 있다. 중앙 처리 장치(124)는 저장 장치(100)를 구동하기 위한 펌웨어(Firmware)에 따라서 각각의 구성들을 제어한다.
본 발명의 실시 예에 따른 에러 정정 부호 블록(121)에는 채널들 각각에 종속되지 않은 KES 블록이나 치엔 서치 블록이 포함될 수 있다. KES 블록이나 치엔 서치 블록을 구성하는 지능 소자(Intellectual Property: IP)들 각각이 채널들에 독립적으로 구동되도록 설정될 것이다. 따라서, 적은 수의 지능 소자들로 KES 블록 또는 치엔 서치 블록을 구성할 수 있다. 그리고, 지능 소자들의 성능을 높이기 위한 게이트 수(Gate count)의 큰 증가 없이도 상술한 독립적으로 구동 가능한 KES 블록이나 치엔 서치 블록을 구성할 수 있다. 따라서, 고속의 에러 정정 연산을 수행하면서 칩면적의 효율적 사용이 가능한 스토리지 컨트롤러(120)가 구성될 수 있다. 또한, 각 채널들에 대해서 병렬적으로 에러 정정 연산이 수행되는 경우에 비하여 피크 전류의 크기를 줄일 수 있어, 전력 소모와 안정성을 제공할 수 있다.
도 3은 도 2의 에러 정정 부호 블록의 제 1 실시 예를 보여주는 블록도이다. 도 3을 참조하면, 에러 정정 부호 블록(121a)은 신드롬 계산 블록(210), KES 블록(220), 치엔 서치 블록(230), ECC 컨트롤러(240) 그리고 선입선출 버퍼(250, 이하 FIFO)를 포함한다.
신드롬 계산 블록(210)은 복수의 신드롬 계산 유닛들(211~214, SCU_1~SCU_n)을 포함한다. 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 대응하는 채널로 전달되는 데이터(D_1~D_n)의 신드롬을 계산한다. 이하에서는 채널들(CH1~CHn)로 전달되는 데이터들(D_1~D_n) 각각을 채널 데이터라 칭하기로 한다.
신드롬 계산 유닛(SCU_1)은 제 1 채널(CH1)로 전달되는 채널 데이터(D_1)의 신드롬 계산을 담당한다. 신드롬 계산 유닛(SCU_2)은 제 2 채널(CH2)로 전달되는 채널 데이터(D_2)의 신드롬 계산을 담당한다. 신드롬 계산 유닛(SCU_3)은 제 3 채널(CH3)로 전달되는 채널 데이터(D_3)의 신드롬 계산을 담당한다. 이처럼, 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 대응하는 채널로 전달되는 채널 데이터의 신드롬 계산을 전담한다. 여기서, 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 하나의 지능 소자(Intellectual Property: IP)로 구성될 수 있다.
신드롬 계산 블록(210)에서 계산된 채널 데이터들(D_1~D_n) 각각에 대한 신드롬들(S1~Sn)은 선입선출 버퍼(250, 이하 FIFO)에 입력된다. FIFO(250)에 저장된 신드롬들(S1~Sn)은 입력된 순서대로 KES 블록(220)에 전달될 것이다.
KES 블록(220)은 각각의 신드롬 계산 유닛들(SCU_1~SCU_n)로부터 제공되는 신드롬들(S1~Sn)을 참조하여 에러 위치 다항식(Error Location Polynomial)을 구한다. KES 블록(220)은 유클리드 알고리즘(Euclidean Algorithm: EA), ME(Modified Euclidean) 또는 BM(Berlecamp-Massay) 알고리즘들을 이용하여 구현될 수 있다.
KES 블록(220)은 복수의 KES 유닛들(222~224, KESU_1~KESU_N)과 상태 레지스터(221)를 포함한다. 상태 레지스터(221)는 복수의 KES 유닛들(KESU_1~KESU_N) 각각의 구동 상태를 저장한다. 상태 레지스터(221)는 복수의 KES 유닛들(KESU_1~KESU_N)의 상태를 실시간으로 ECC 컨트롤러(240)에 제공한다. 예를 들면, 복수의 KES 유닛들(KESU_1~KESU_N) 중에서 에러 위치 다항식(Error Location Polynomial: ELP)을 계산중인 것은 상태 레지스터(221)에 RnB 비트를 비지 상태(또는, 논리 '0')로 설정된다. 그리고, 상태 레지스터(221)에는 복수의 KES 유닛들(KESU_1~KESU_N) 각각에서 계산중인 채널 데이터의 채널 정보(Channel Information)가 저장된다. 즉, 비지 상태의 KES 유닛이 계산하는 채널 데이터가 어느 채널에 대응하는지를 지시하는 것이 채널 정보이다. 반면, 복수의 KES 유닛들(KESU_1~KESU_N) 중에서 구동되지 않는 것들에 대응하는 상태 레지스터(221)의 RnB 비트는 레디 상태(또는, 논리 '1')로 설정된다. 그리고 이런 구동되지 않는 KES 유닛에 대응하는 채널 정보는 상태 레지스터(221)에 저장되지 않는다.
FIFO(250)에 저장된 신드롬들(S1~Sn) 중에 에러가 존재하는 것으로 검출된 데이터가 제공되면, ECC 컨트롤러(240)는 상태 레지스터(221)의 RnB 비트들을 참조하여 복수의 KES 유닛들(KESU_1~KESU_N) 중 어느 하나를 선택한다. 그리고 선택된 어느 하나의 KES 유닛(KESU_x)이 에러가 존재하는 데이터에 대한 에러 위치 다항식을 구하게 될 것이다. 이때, 에러 위치 다항식을 구하도록 선택된 어느 하나의 KES 유닛(KESU_x)에 대응하는 RnB 비트는 비지 상태로 전환될 것이다. 그리고 비지 상태로 전환된 RnB 비트와 함께, 에러 위치 다항식을 구하는 채널 데이터가 어느 채널에 대응하는지를 지시하는 채널 정보도 상태 레지스터(221)에 업데이트 될 것이다.
이러한 방식으로 KES 블록(220)은 채널 수 n보다 적은 수(N)의 KES 유닛들(KESU_1~KESU_N)을 포함할 수 있다. 그리고, 각각의 KES 유닛들(KESU_1~KESU_N)은 어느 하나의 채널에 고정되지 않고, 필요에 따라 다양한 채널 데이터에 대한 에러 위치 다항식을 구할 수 있다. 즉, KES 유닛들(KESU_1~KESU_N)은 각각 채널에 독립적으로 구동될 수 있다.
상술한 KES 블록(220)을 사용하면, 에러가 존재하지 않는 것으로 검출된 채널 데이터가 나머지 채널의 에러 정정 연산에 동기되기 위하여 대기하는 문제가 해결될 수 있다. 즉, 에러가 존재하는 채널에 대해서만, 에러 위치 다항식을 구하는 연산이 수행된다. 그리고 채널 데이터들 각각에는 서로 다른 비트의 에러가 포함될 수 있다. 에러 비트의 수에 따라 KES 연산에 소요되는 클록 사이클 수가 다르기 때문에 KES 연산을 채널에 독립적으로 구성하는 것이 구동 효율을 높일 수 있다.
치엔 서치 블록(230)은 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)n}의 근을 계산한다. 치엔 서치 블록(230)은 채널들 각각에 대응하는 복수의 치엔 서치 유닛들(231~234, ChienSU_1~ChienSU_n)을 포함한다. 치엔 서치 유닛들(ChienSU_1 ~ ChienSU_n)은 KES 블록(220)으로부터 제공되는 채널들 각각에 대응하는 에러 위치 다항식의 근을 구한다. 치엔 서치 유닛(ChienSU_1)은 제 1 채널(CH1)에 대응하는 채널 데이터(D_1)의 에러 위치 다항식의 근을 구하는 연산을 담당한다. 치엔 서치 유닛(ChienSU_2)은 제 2 채널(CH2)에 대응하는 채널 데이터(D_2)의 에러 위치 다항식의 근을 구한다. 치엔 서치 유닛(ChienSU_3)은 제 3 채널(CH3)에 대응하는 채널 데이터(D_3)의 에러 위치 다항식의 근을 구하는 계산을 수행한다. 치엔 서치 유닛들(ChienSU_1~ChienSU_n) 각각은 채널 데이터들(D_1~D_n) 대한 에러 위치 다항식의 근을 구하여 에러를 정정하기 위한 정정 벡터들(CV_1~CV_n)로 출력한다.
ECC 컨트롤러(240)는 저장 매체(110, 도 1 참조)로부터 각각의 채널들로 제공되는 채널 데이터들(D_1~D_n)에 대한 에러 검출 및 정정 연산을 수행하도록 신드롬 계산 블록(210), KES 블록(220), 치엔 서치 블록(230) 등을 제어한다. ECC 컨트롤러(240)는 특히, 상태 레지스터(221)에 업데이트되는 KES 유닛들(KESU_1~KESU_N)의 구동 상태를 참조하여, 채널 데이터(D_1~D_n)에 대한 KES 연산을 KES 유닛들(KESU_1~KESU_N)에 할당한다. 따라서, 각각의 채널들에 대응하는 신드롬들(S1~Sn)의 값이 영 벡터인 채널 데이터는 KES 연산에서 배제될 수 있다.
여기서, 신드롬 계산 유닛들(SCU_1~SCU_n), KES 유닛들(KESU_1~KESU_N) 및 치엔 서치 유닛들(ChienSU_1~ChienSU_n) 각각은 하나의 지능 소자(Intellectual Property: IP)로 구성될 수 있다. KES 유닛들(KESU_1~KESU_N)은 에러가 존재하는 채널 데이터에 대해서만 에러 위치 다항식을 구하면 된다. 따라서, 구동 효율이 높아 KES 유닛들(KESU_1~KESU_N) 각각에 대한 구동 사이클이 줄어들 수 있다. 일반적으로 구동 사이클이 줄기 위해서는 KES 유닛들(KESU_1~KESU_N)을 구하는 조합논리회로의 사이즈가 증가하게 된다. 그러나 본 발명의 기술을 적용하면, 구동 사이클을 반으로 줄이고도, KES 유닛들(KESU_1~KESU_N)의 사이즈는 1.1 내지 1.5배만 증가하는 것으로 나타났다.
도 4는 도 3의 상태 레지스터를 예시적으로 보여주는 블록도이다. 도 4를 참조하면, 상태 레지스터(221)는 복수의 KES 유닛들(KESU_1~KESU_N) 각각에 대응하는 RnB 비트들(RnB_1~RnB_N)과 채널 정보들(CH_Info_1~CH_Info_N)이 저장된다.
만일, KES 유닛(KESU_1)이 에러 위치 다항식을 구하는 연산을 수행중인 경우라면, RnB 비트(RnB_1)가 비지 상태로 설정된다. 그리고 KES 유닛(KESU_1)이 할당받은 채널 데이터의 채널 정보(CH_Info_1)가 갱신된다. 예를 들면, KES 유닛(KESU_1)이 제 2 채널(CH2)의 채널 데이터에 대한 에러 위치 다항식을 구하도록 설정되면, RnB 비트(RnB_1)은 비지 상태로 설정되고, 그에 대응하는 채널 정보(CH_Info_1)는 제 2 채널(CH2)로 저장될 것이다.
그러나 KES 유닛(KESU_1)이 에러 위치 다항식을 구하는 연산을 종료하고, 다음 계산을 위해 대기 중이면, RnB 비트(RnB_1)가 레디 상태로 설정된다. 그리고 그에 대응하는 채널 정보(CH_Info_1)는 리셋 된다. 이러한 상태 레지스터(221)의 설정은 RnB 비트들(RnB_1~RnB_N)과 그에 대응하는 채널 정보(CH_Info_1~CH_Info_N) 모두에 적용된다.
도 5는 본 발명의 특징을 간략히 설명하기 위한 블록도이다. 도 5를 참조하면, 2개 채널을 통해서 저장 매체(110)로부터 읽기 데이터가 제공되는 경우를 가정하기로 한다.
저장 매체(110)로부터 제 1 채널(CH1)을 통해서 제 1 채널 데이터(D_1)가, 제 2 채널(CH2)을 통해서 제 2 채널 데이터(D_2)가 에러 정정 부호 블록에 제공된다. 먼저, 신드롬 계산 유닛들(SCU_1, SCU_2)은 제 1 및 제 2 채널 데이터(D_1, D_2)에 대한 신드롬 계산 연산을 수행한다. 신드롬 계산 연산에 의하여 생성된 신드롬들(S1, S2)은 FIFO(250)에 일시 저장될 수 있다. FIFO(250)에 제 1 채널 데이터(D_1)에 대한 신드롬(S1)과 제 2 채널 데이터(D_2)에 대한 신드롬(S2)은 KES 블록(220)으로 전달될 것이다.
KES 블록(220)은 하나 또는 그 이상의 KES 유닛들을 포함할 것이다. 설명의 편의를 위하여 하나의 KES 유닛(KESU_1)이 KES 블록(220)에 포함되는 것으로 가정한다. KES 유닛(KESU_1)은 연산 상태에 따라 채널에 관계없이 신드롬들(S1, S2) 중 어느 하나에 대한 에러 위치 다항식을 구하게 될 것이다. 즉, KES 유닛(KESU_1)은 적은 사이클 동안에도 고속의 에러 위치 다항식 연산을 수행할 수 있다. KES 유닛(KESU_1)은 각각의 채널 데이터들에 대한 에러 위치 다항식{λ(x)1, λ(x)2}을 치엔 서치 블록들(231, 232)로 제공한다. 채널 데이터들 각각에는 서로 다른 비트의 에러가 포함될 수 있다. 에러 비트의 수에 따라 KES 연산에 소요되는 클록 사이클 수가 다르기 때문에 KES 연산을 채널에 독립적으로 구성하는 것이 구동 효율을 높일 수 있다.
치엔 서치 블록들(231, 232)은 각각 대응하는 채널 데이터(D_1, D_2)의 에러 위치 다항식들식{λ(x)1, λ(x)2}의 해를 구한다. 그리고 구해진 해에 대응하는 정정 백터들(CV_1, CV_2)을 출력하게 될 것이다.
상술한 에러 정정 절차에 따르면, 신드롬 계산 결과 에러가 존재하지 않는 채널 데이터에 대해서는 KES 연산이 생략될 수도 있다. 따라서, 본 발명의 에러 정정 부호 블록에 따르면, 불필요한 연산의 수를 감소시켜 피크 전류 및 소모 전력을 감소시킬 수 있다.
도 6은 도 5의 예시에서 본 발명의 이점을 설명하는 타이밍도이다. 도 6을 참조하면, T1 시점부터 제 1 채널(CH1)과 제 2 채널(CH2)을 통해서 채널 데이터가 에러 정정 부호 블록(121)으로 전달된다.
T1 시점부터 채널 데이터(#1)와 채널 데이터(#2)가 각각의 채널들을 경유하여 에러 정정 부호 블록(121)에 입력되면, 신드롬 계산 유닛들(SCU_1, SCU_2, 도 5 참조)은 실시간으로 신드롬 계산 연산을 수행한다. 데이터의 입력과 신드롬의 계산은 소정의 클록의 지연을 가질 수 있으나, 설명의 편의를 위해서 이러한 지연은 무시하기로 한다.
채널 데이터(#1)와 채널 데이터(#2)에 대한 각 채널들을 통한 입력 및 신드롬 계산 유닛들(SCU_1, SCU_2)의 신드롬 계산이 완료되면, 에러 위치 다항식을 구하기 위한 KES 연산이 KES 블록(220)에서 수행된다. KES 블록(220)에는 상대적으로 적은 수의 클록 사이클 동안에 에러 위치 다항식을 구하기 위한 KES 연산을 수행하는 하나 또는 그 이상의 지능 소자들을 포함할 수 있다. 여기서, 설명의 편의를 위하여 KES 블록(220)은 하나의 지능 소자로 구성되는 KES 유닛을 포함하는 것으로 가정하기로 한다. 하지만, KES 블록(220)에 포함되는 하나 또는 그 이상의 지능 소자는 고속 연산을 위해서 증가된 게이트 수를 갖는다.
따라서, 먼저 채널 데이터(#1)의 신드롬을 참조하여 에러 위치 다항식을 구하는 KES 연산이 T2 시점부터 진행된다. 그리고 채널 데이터(#1)에 대한 KES 연산은 t1 시점에서 종료된다. T2 시점 이전까지는 KES 블록(220)에 포함되는 KES 유닛의 상태는 레디 상태일 것이다. 그리고 채널 데이터(#1)에 대한 KES 연산 동안(T2~t1)에는 KES 유닛의 상태는 비지 상태일 것이다. t1 시점에 KES 유닛의 상태가 다시 레디 상태로 변경되면, 채널 데이터(#2)에 대한 KES 연산이 할당된다. 더불어, KES 연산에 의해서 생성된 채널 데이터(#1)에 대한 치엔 서치 유닛(231)의 치엔 서치 연산이 t1 시점에서 시작될 것이다.
채널 데이터(#1)에 대한 치엔 서치 연산이 종료되는 t2 시점에서, 채널 데이터(#1)의 에러는 정정될 수 있다. 그리고 에러가 정정된 채널 데이터(#1)는 t3 시점부터 외부로 출력될 수 있다. 이것은 본 발명의 채널에 독립적인 KES 블록을 사용하지 않은 경우에 비하여 데이터 출력 속도(Initial Latency)를 줄일 수 있음을 의미한다.
에러 정정 부호 블록(121)에 입력되는 데이터에 대한 에러 정정 연산의 소요시간은 각각의 단계들에서 소요되는 전체 레이턴시에 의존적이다. 즉, 에러 정정 연산 전체의 레이턴시는, 신드롬 계산 연산, KES 연산(KES Operation), 치엔 서치 연산(Chien Search Operation), 에러 정정(Correction)에 소요되는 시간에 대응한다. 에러 정정 부호 블록(121)의 성능은 전체 레이턴시의 단축과 관계가 깊다. 본 발명의 제 1 실시 예에서는, KES 블록(220)을 채널들 각각으로부터 독립적으로 구성하여 레디/비지(RnB) 신호를 사용하여 동작 효율을 극대화하였다.
결국, KES 블록의 성능 향상을 통해서 에러 정정에 소요되는 시간을 단축시킬 수 있음을 의미한다. 즉, 본 발명의 일 실시 예에 따르면, KES 연산에 소요되는 시간을 단축하여, 데이터의 출력 시간을 단축할 수 있다.
도 7은 도 2의 에러 정정 부호 블록의 제 2 실시 예를 보여주는 블록도이다. 도 7을 참조하면, 에러 정정 부호 블록(121b)은 신드롬 계산 블록(310), KES 블록(320), 치엔 서치 블록(330), ECC 컨트롤러(340) 그리고 FIFO(350)를 포함한다.
신드롬 계산 블록(310)은 복수의 신드롬 계산 유닛들(311~314, SCU_1~SCU_n)을 포함한다. 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 대응하는 채널로 전달되는 채널 데이터(D_1~D_n)의 신드롬을 계산한다. 신드롬 계산 유닛(SCU_1)은 제 1 채널(CH1)로 전달되는 채널 데이터(D_1)의 신드롬 계산을 담당한다. 신드롬 계산 유닛(SCU_2)은 제 2 채널(CH2)로 전달되는 채널 데이터(D_2)의 신드롬 계산을 담당한다. 신드롬 계산 유닛(SCU_3)은 제 3 채널(CH3)로 전달되는 채널 데이터(D_3)의 신드롬 계산을 담당한다. 이처럼, 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 대응하는 채널로 전달되는 채널 데이터의 신드롬 계산을 전담한다. 여기서, 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 하나의 지능 소자(Intellectual Property: IP)로 구성될 수 있다.
KES 블록(320)은 각각의 신드롬 계산 유닛들(SCU_1~SCU_n)로부터 제공되는 신드롬들(S)을 참조하여 에러 위치 다항식(Error Location Polynomial)을 구한다. KES 블록(320)은 유클리드 알고리즘(Euclidean Algorithm: EA), ME(Modified Euclidean) 또는 BM(Berlecamp-Massay) 알고리즘들을 이용하여 구현될 수 있다.
KES 블록(320)은 복수의 KES 유닛들(321~324, KESU_1~KESU_n)을 포함한다. KES 유닛들(KESU_1~KESU_n) 각각은 신드롬 계산 유닛들(SCU_1~SCU_n)로부터의 신드롬들(S1~Sn)을 참조하여 에러 위치 다항식을 구한다. 그리고 KES 유닛들(KESU_1~KESU_n) 각각은 생성된 에러 위치 다항식을 ECC 컨트롤러(340)의 제어에 따라 FIFO(350)에 전달한다. FIFO(350)에 저장된 채널 데이터들 각각의 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)n}은 입력된 순서대로 치엔 서치 블록(330)에 전달될 것이다.
치엔 서치 블록(330)은 에러 위치 다항식을 참조하여 에러 위치 다항식의 근을 계산한다. 치엔 서치 블록(330)은 복수의 치엔 서치 유닛들(332~234, ChienSU_1~ChienSU_M)과 상태 레지스터(331)를 포함한다. 상태 레지스터(321)는 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M) 각각의 구동 상태를 저장한다. 상태 레지스터(331)는 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)의 상태를 실시간으로 ECC 컨트롤러(340)에 제공한다. 예를 들면, 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M) 중에서 치엔 서치 연산을 수행중인 것에 대응하는 상태 레지스터(331)의 RnB 비트는 비지 상태(또는, 논리 '0')로 설정된다. 그리고, 상태 레지스터(331)에는 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M) 각각에서 계산중인 채널 데이터의 채널 정보(Channel Information)가 저장된다. 즉, 비지 상태의 치엔 서치 유닛이 계산하는 채널 데이터가 어느 채널에 대응하는지를 지시하는 것이 채널 정보이다. 반면, 치엔 서치 유닛들(ChienSU_1~ChienSU_M) 중에서 구동되지 않는 것들에 대응하는 상태 레지스터(331)의 RnB 비트는 레디 상태(또는, 논리 '1')로 설정된다. 그리고 이렇게 구동되지 않는 치엔 서치 유닛에 대응하는 채널 정보는 상태 레지스터(331)에 저장되지 않는다. 상태 레지스터(331)는 도 4에 도시된 KES 블록에 대응하는 상태 레지스터(221)와 동일 또는 유사하게 구성할 수 있다.
FIFO(350)로부터 제공되는 채널 데이터들 각각에 대응하는 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)n}의 해를 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)이 계산하게 될 것이다. ECC 컨트롤러(340)는 상태 레지스터(331)의 RnB 비트들과 채널 정보를 참조하여 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)에 에러 위치 다항식을 할당하게 될 것이다. 상태 레지스터(331)의 RnB 비트들은 대응하는 치엔 서치 유닛이 에러 위치 다항식을 할당받기 이전에는 레디 상태로 유지될 것이다. 그리고 상태 레지스터(331)의 RnB 비트들을 대응하는 치엔 서치 유닛이 에러 위치 다항식을 할당받으면, 비지 상태로 전환되고 대응하는 채널 정보가 업데이트될 것이다. 그리고 할당받은 에러 위치 다항식의 해가 구해지면, 그에 대응하는 상태 레지스터(331)의 RnB 비트는 레디 상태로 전환되고, 대응하는 채널 정보는 리셋될 것이다.
이러한 방식으로 치엔 서치 블록(330)은 채널 수 n보다 적은 수(M)의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)을 포함할 수 있다. 그리고, 각각의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)은 어느 하나의 채널에 고정되지 않고, 필요에 따라 다양한 채널 데이터에 대한 에러 위치 다항식을 구할 수 있다. 일반적으로 치엔 서치 연산에서는 에러의 위치에 따라서 소요되는 클록 사이클의 수의 차이가 발생한다. 이러한 클록 사이클의 차이를 고려하면, 치엔 서치 유닛들(ChienSU_1 ~ ChienSU_M) 각각을 어느 하나의 채널에 종속시키지 않는 것이 효율적이다.
ECC 컨트롤러(340)는 저장 매체(110, 도 1 참조)로부터 제공되는 채널 데이터에 대한 에러 검출 및 정정 연산을 수행하도록 신드롬 계산 블록(310), KES 블록(320), 치엔 서치 블록(330) 들을 제어한다. ECC 컨트롤러(340)는 특히, 상태 레지스터(331)에 업데이트되는 치엔 서치 유닛들(ChienSU_1~ChienSU_M)의 상태를 참조하여, 채널들 각각에 대응하는 에러 위치 다항식을 치엔 서치 유닛들(ChienSU_1~ChienSU_M)에 할당한다.
여기서, 신드롬 계산 유닛들(SCU_1~SCU_n), KES 유닛들(KESU_1~KESU_N) 및 치엔 서치 유닛들(ChienSU_1~ChienSU_n) 각각은 하나의 지능 소자(Intellectual Property: IP)로 구성될 수 있다. 일반적으로 구동 사이클을 줄이기 위해서는 치엔 서치 유닛들(ChienSU_1~ChienSU_n)을 구성하는 조합논리회로의 사이즈가 증가하게 된다. 그러나 본 발명의 기술을 적용하면, 구동 사이클을 반으로 줄이고도, 치엔 서치 유닛들(ChienSU_1~ChienSU_n)의 사이즈는 1.8 내지 1.9배만 증가하는 것으로 나타났다.
도 8은 본 발명의 다른 실시 예의 특징을 간략히 설명하기 위한 블록도이다. 도 8을 참조하면, 2개 채널을 통해서 저장 매체(110, 도 1 참조)로부터 읽기 데이터가 제공되는 경우를 가정하기로 한다.
저장 매체(110)로부터 제 1 채널을 통해서 제 1 채널 데이터(D_1)가, 제 2 채널(CH2)을 통해서 제 2 채널 데이터(D_2)가 에러 정정 부호 블록(121b)에 제공된다. 먼저, 신드롬 계산 유닛들(SCU_1, SCU_2)은 제 1 및 제 2 채널 데이터(D_1, D_2)에 대한 신드롬 계산 연산을 수행한다. 신드롬 계산 연산에 의하여 신드롬 계산 유닛(SCU_1)은 제 1 채널 데이터(D_1)에 대한 신드롬(S1)을 KES 유닛(321)으로 전달한다. 신드롬 계산 연산에 의하여 신드롬 계산 유닛(SCU_2)은 제 2 채널 데이터(D_2)에 대한 신드롬(S2)을 KES 유닛(322)으로 전달한다.
KES 유닛들(321, 322) 각각은 신드롬들(S1, S2) 각각에 대한 에러 위치 다항식을 구하기 위한 연산을 수행한다. KES 유닛들(321, 322)은 각각의 채널 데이터들에 대한 에러 위치 다항식들{λ(x)1, λ(x)2}을 생성하여 FIFO(350)로 전달한다. FIFO(350)에 일시 저장된 에러 위치 다항식들{λ(x)1, λ(x)2}은 순차적으로 치엔 서치 블록(330)으로 제공될 것이다.
치엔 서치 블록(330)은 하나 또는 그 이상의 치엔 서치 유닛들을 포함할 수 있다. 그리고 치엔 서치 유닛들은 각각의 연산 상태에 따라 에러 위치 다항식(λ1, λ2) 중 어느 하나에 대한 에러 위치 다항식을 구하게 될 것이다. 즉, 적은 사이클 수에서도 고속의 에러 위치 다항식의 근을 구할 수 있다. 치엔 서치 블록(330)은 각각의 채널 데이터들에 대한 에러 위치 다항식들{λ(x)1, λ(x)2}의 해를 구하여 채널들(CH1, CH2) 각각에 대응하는 정정 벡터(CV_1, CV_2)를 생성하여 출력할 것이다.
도 9는 도 8의 예시에서 본 발명의 이점을 설명하는 타이밍도이다. 도 9를 참조하면, T1 시점부터 제 1 채널(CH1)과 제 2 채널(CH2)을 통해서 채널 데이터가 에러 정정 부호 블록(121b)으로 전달된다.
T1 시점부터 채널 데이터(#1)와 채널 데이터(#2)가 각각의 채널들을 경유하여 에러 정정 부호 블록(121b)에 입력되면, 신드롬 계산 유닛들(SCU_1, SCU_2, 도 8 참조)은 실시간으로 신드롬 계산 연산을 수행한다. 데이터의 입력과 신드롬의 계산은 소정의 클록의 지연을 가질 수 있으나, 설명의 편의를 위해서 이러한 지연은 무시하기로 한다.
채널 데이터(#1)와 채널 데이터(#2)에 대한 각 채널들을 통한 입력 및 신드롬 계산 유닛들(SCU_1, SCU_2)의 신드롬 계산이 완료되면, 에러 위치 다항식을 구하기 위한 KES 연산이 KES 유닛들(321, 322)에 의해서 수행된다. 채널 데이터(#1)와 채널 데이터(#2) 각각에 대한 신드롬을 참조하여 에러 위치 다항식을 구하는 KES 연산이 T2 시점부터 진행된다. 채널 데이터(#1)와 채널 데이터(#2) 각각에 대한 KES 연산은 병렬적으로 수행될 수 있다. 그리고 채널 데이터(#1), 채널 데이터(#2)에 대한 KES 연산이 t1 시점에서 종료된다. KES 연산의 완료에 뒤따라, KES 연산에 의해서 생성된 채널 데이터(#1)의 에러 위치 다항식에 대한 치엔 서치 연산이 t1 시점에서 시작될 것이다.
여기서, 치엔 서치 블록(330)은 하나의 IP만으로 구성되는 것으로 가정하였다. 따라서, t1 시점에서 치엔 서치 연산은 채널 데이터(#1)에 대해서만 수행될 것이다. 그리고 채널 데이터(#1)에 대한 치엔 서치 연산이 완료되는 t2 시점에서 채널 데이터(#2)에 대한 치엔 서치 연산이 시작될 것이다. T2 시점 이전까지는 치엔 서치 블록(330)에 포함되는 치엔 서치 유닛의 상태는 레디 상태일 것이다. 그리고 채널 데이터(#1)에 대한 치엔 서치 연산 동안(T2~t1)에는 치엔 서치 유닛의 상태는 비지 상태일 것이다. t1 시점에 치엔 서치 유닛의 상태가 다시 레디 상태로 변경되자마자, 채널 데이터(#2)에 대한 치엔 서치 연산이 시작될 것이다. 더불어, 치엔 서치 연산에 의해서 생성된 정정 벡터(CV_1)에 의해서 t2 시점부터 채널 데이터(#1)의 에러는 정정될 수 있다. 그리고 에러가 정정된 채널 데이터(#1)는 t3 시점부터 출력될 수 있다.
치엔 서치 블록(330)에는 상대적으로 적은 수의 클록 사이클 동안에 에러 위치 다항식을 구하기 위한 치엔 서치 연산을 수행하는 하나 또는 그 이상의 지능 소자들을 포함할 수 있다. 여기서, 설명의 편의를 위하여 치엔 서치 블록(330)은 하나의 지능 소자로 구성되는 치엔 서치 유닛을 포함하는 것으로 가정하였다. 하지만, 치엔 서치 블록(330)에 포함되는 하나 또는 그 이상의 지능 소자는 고속 연산을 위해서 증가된 게이트 수를 갖는다.
에러가 정정된 채널 데이터(#1)는 t3 시점부터 외부로 출력될 수 있다. 이것은 본 발명의 채널에 독립적인 치엔 서치 블록을 사용하지 않은 경우에 비하여 데이터 출력 속도(Initial Latency)를 줄일 수 있음을 의미한다.
도 10은 도 2의 에러 정정 부호 블록의 제 3 실시 예를 보여주는 블록도이다. 도 10을 참조하면, 에러 정정 부호 블록(121c)은 신드롬 계산 블록(410), KES 블록(420), 치엔 서치 블록(430), ECC 컨트롤러(440), 그리고 FIFO들(450, 460)을 포함한다.
신드롬 계산 블록(410)은 복수의 신드롬 계산 유닛들(411~414, SCU_1~SCU_n)을 포함한다. 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 대응하는 채널로 전달되는 채널 데이터(D_1~D_n)의 신드롬을 계산한다. 신드롬 계산 유닛(SCU_1)은 제 1 채널(CH1)로 전달되는 채널 데이터(D_1)의 신드롬 계산을 담당한다. 신드롬 계산 유닛(SCU_2)은 제 2 채널(CH2)로 전달되는 채널 데이터(D_2)의 신드롬 계산을 담당한다. 신드롬 계산 유닛(SCU_3)은 제 3 채널(CH3)로 전달되는 채널 데이터(D_3)의 신드롬 계산을 담당한다. 이처럼, 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 대응하는 채널로 전달되는 데이터의 신드롬 계산을 전담한다. 여기서, 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 하나의 지능 소자(Intellectual Property: IP)로 구성될 수 있다.
신드롬 계산 블록(410)에서 계산된 채널 데이터들(D_1~D_n) 각각에 대한 신드롬들(S1~Sn)은 FIFO(450)에 입력된다. FIFO(450)에 저장된 신드롬들(S1~Sn)은 입력된 순서대로 KES 블록(420)에 전달될 것이다.
KES 블록(420)은 각각의 신드롬들(S1~Sn)을 참조하여 에러 위치 다항식(Error Location Polynomial)을 구한다. KES 블록(420)은 유클리드 알고리즘(Euclidean Algorithm: EA), ME(Modified Euclidean) 또는 BM(Berlecamp-Massay) 알고리즘들을 이용하여 구현될 수 있다.
KES 블록(420)은 복수의 KES 유닛들(422~424, KESU_1~KESU_N)과 상태 레지스터(421)를 포함한다. 상태 레지스터(421)는 복수의 KES 유닛들(KESU_1~KESU_N) 각각의 구동 상태(RnB 비트와 채널 정보)를 저장한다. 상태 레지스터(421)는 복수의 KES 유닛들(KESU_1~KESU_N)의 구동 상태를 실시간으로 ECC 컨트롤러(440)에 제공한다.
예를 들면, 복수의 KES 유닛들(KESU_1~KESU_N) 중에서 에러 위치 다항식을 계산중인 것은 상태 레지스터(421)의 RnB 비트는 비지 상태(또는, 논리 '0')로, 그에 대응하는 채널 정보가 입력된다. 반면, 복수의 KES 유닛들(KESU_1~KESU_N) 중에서 구동되지 않는 것들에 대응하는 상태 레지스터(421)의 RnB 비트는 레디 상태(또는, 논리 '1')로, 채널 정보는 리셋 상태로 설정된다.
신드롬 계산 유닛들(SCU_1~SCU_n)로부터의 신드롬들 중에 에러가 존재하는 것으로 검출된 채널 데이터가 제공되면, ECC 컨트롤러(440)는 상태 레지스터(421)의 RnB 비트들을 참조하여 복수의 KES 유닛들(KESU_1~KESU_N) 중 어느 하나를 선택한다. 그리고 선택된 어느 하나의 KES 유닛(KESU_x)이 에러가 존재하는 채널 데이터에 대한 에러 위치 다항식을 구하게 될 것이다. 일단, 에러 위치 다항식을 구하는 연산을 할당받은 어느 하나의 KES 유닛(KESU_x)에 대응하는 RnB 비트는 비지 상태로 전환될 것이다. 이러한 방식으로 KES 블록(420)은 채널 수 n보다 같거나 적은 수(N)의 KES 유닛들(KESU_1~KESU_N)을 포함할 수 있다. 그리고, 각각의 KES 유닛들(KESU_1~KESU_N)은 어느 하나의 채널에 고정되지 않고, 필요에 따라 다양한 채널 데이터에 대한 에러 위치 다항식을 구할 수 있다.
상술한 KES 블록(420)을 사용하면, 에러가 존재하지 않는 것으로 검출된 채널 데이터가 나머지 채널의 에러 정정 연산에 동기되기 위하여 대기하는 문제가 해결될 수 있다. 즉, 에러가 존재하는 채널에 대해서만, 에러 위치 다항식을 구하는 연산이 수행된다. 그리고 채널 데이터들 각각에는 서로 다른 비트의 에러가 포함될 수 있다. 에러 비트의 수에 따라 KES 연산에 소요되는 클록 사이클 수가 다르기 때문에 KES 연산을 채널에 독립적으로 구성하는 것이 구동 효율을 높일 수 있다.
KES 블록(420)에서 계산된 채널 데이터들(D_1~D_n) 각각에 대한 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)n}은 FIFO(460)에 입력된다. FIFO(460)에 저장된 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)n}은 입력된 순서대로 치엔 서치 블록(430)에 전달될 것이다.
치엔 서치 블록(430)은 에러 위치 다항식을 참조하여 에러 위치 다항식의 근을 계산한다. 치엔 서치 블록(430)은 복수의 치엔 서치 유닛들(432~434, ChienSU_1~ChienSU_M)과 상태 레지스터(431)를 포함한다. 상태 레지스터(431)는 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M) 각각의 구동 상태(RnB 비트, 채널 정보)를 저장한다. 상태 레지스터(431)는 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)의 구동 상태를 실시간으로 ECC 컨트롤러(440)에 제공한다.
채널 데이터들 각각에 대응하는 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)n}의 해를 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)이 계산하게 될 것이다. ECC 컨트롤러(440)는 상태 레지스터(431)의 RnB 비트들을 참조하여 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)에 에러 위치 다항식을 할당하게 될 것이다. 상태 레지스터(431)의 RnB 비트들은 대응하는 치엔 서치 유닛이 에러 위치 다항식을 할당받기 이전에는 레디 상태로 유지될 것이다. 치엔 서치 유닛이 에러 위치 다항식을 할당받으면, 그에 대응하는 RnB 비트는 비지 상태로 전환되고, 채널 정보가 설정될 것이다. 그리고 치엔 서치 유닛에 의하여 할당받은 에러 위치 다항식의 해가 구해지면, 그에 대응하는 상태 레지스터(431)의 RnB 비트는 레디 상태로 전환되고, 채널 정보는 리셋될 것이다.
이러한 방식으로 치엔 서치 블록(430)은 채널 수 n보다 적은 수(M)의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)을 포함할 수 있다. 그리고, 각각의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)은 어느 하나의 채널에 고정되지 않고, 필요에 따라 다양한 채널 데이터에 대한 에러 위치 다항식을 구할 수 있다. 에러 위치 다항식의 해를 구하는 치엔 서치 연산에서는 에러 위치에 따라 소요되는 클록 사이클의 수가 다르다. 따라서, 각각의 채널 데이터들의 에러 비트 수가 다른 경우에서는 치엔 서치 유닛들(ChienSU_1~ChienSU_M)이 특정 채널에 종속되지 않는 것이 보다 효율적이다.
ECC 컨트롤러(440)는 저장 매체(110, 도 1 참조)로부터 각각의 채널들로 제공되는 채널 데이터에 대한 에러 검출 및 정정 연산을 수행하도록 신드롬 계산 블록(410), KES 블록(420), 치엔 서치 블록(430) 들을 제어한다. ECC 컨트롤러(440)는 특히, 상태 레지스터들(421, 431)에 업데이트되는 레디/비지(RnB) 비트들을 참조하여 KES 블록(420)과 치엔 서치 블록(430)의 동작을 제어한다. 즉, 에러 위치 다항식과 에러 위치 다항식의 근을 구하는 동작에서 ECC 컨트롤러(440)는 KES 유닛들(KESU_1~KESU_N)과 치엔 서치 유닛들(ChienSU_1~ChienSU_M)의 상태를 참조하여 연산 처리를 할당한다.
여기서, 신드롬 계산 유닛들(SCU_1~SCU_n), KES 유닛들(KESU_1~KESU_N) 및 치엔 서치 유닛들(ChienSU_1~ChienSU_n) 각각은 하나의 지능 소자(Intellectual Property: IP)로 구성될 수 있다. 일반적으로 구동 사이클이 줄기 위해서는 치엔 서치 유닛들(ChienSU_1~ChienSU_n)을 구성하는 조합논리회로의 사이즈가 증가하게 된다. 그러나 본 발명의 기술을 적용하면, 구동 사이클을 반으로 줄이고도, KES 유닛들(KESU_1~KESU_N)의 사이즈는 1.1 내지 1.5배, 치엔 서치 유닛들(ChienSU_1~ChienSU_n)의 사이즈는 1.8 내지 1.9배만 증가하는 것으로 나타났다.
도 11은 도 10의 에러 정정 부호 블록(121c)의 연산 절차를 간략히 보여주는 블록도이다. 도 11을 참조하면, 4개 채널(CH1, CH2, CH3, CH4)을 통해서 메모리 장치들로부터 제공되는 채널 데이터들(D_1~D_4)이 스토리지 컨트롤러(120, 도 1 참조)에 전달되는 것을 가정한다. 그리고 KES 블록(420)에는 2개의 KES 유닛들(KESU_1, KESU2)이, 치엔 서치 블록(430)에는 3개의 치엔 서치 유닛들(ChienSU_1, ChienSU_2, ChienSU_3)이 포함되는 것으로 가정한다. 즉, 이하에서는 채널 수(n)는 4, KES 유닛의 수(N)는 2, 치엔 서치 유닛의 수(M)는 3인 경우를 예로 하여 본 발명의 이점이 설명될 것이다.
저장 매체(110)로부터 제공되는 채널 데이터(D_1~D_4)가 에러 정정 부호 블록(121c)에 입력된다. 채널 데이터(D_1~D_4)는 각각의 채널들을 통해서 전달될 것이다. 채널 데이터(D_1)는 제 1 채널(CH1)을 경유하여 에러 정정 부호 블록(121c)에 입력된다. 채널 데이터(D_2)는 제 2 채널(CH2)을 경유하여 에러 정정 부호 블록(121c)에 입력된다. 채널 데이터(D_3)는 제 3 채널(CH3)을 경유하여 에러 정정 부호 블록(121c)에 입력된다. 채널 데이터(D_4)는 제 4 채널(CH4)을 경유하여 에러 정정 부호 블록(121c)에 입력된다.
신드롬 계산 블록(410, 도 10 참조)은 각각의 채널들(CH1, CH2, CH3, CH4)에 하나씩 할당되는 신드롬 계산 유닛들(SCU_1, SCU_2, SCU_4, SCU_4)이 할당된다. 신드롬 계산 유닛(SCU_1)은 제 1 채널을 통해서 전달된 채널 데이터(D_1)의 신드롬을 계산한다. 신드롬 계산 유닛(SCU_2)은 제 2 채널을 통해서 전달된 채널 데이터(D_2)의 신드롬을 계산한다. 신드롬 계산 유닛(SCU_3)은 제 3 채널을 통해서 전달된 채널 데이터(D_3)의 신드롬을 계산한다. 신드롬 계산 유닛(SCU_4)은 제 4 채널을 통해서 전달된 채널 데이터(D_4)의 신드롬을 계산한다.
KES 블록(420, 도 10 참조)은 각각의 신드롬 계산 유닛들(SCU_1~SCU_4)로부터 제공되는 신드롬들(S)을 참조하여 에러 위치 다항식(Error Location Polynomial)을 구한다. 특히, KES 블록(420)은 채널 수보다 적은 2개의 KES 유닛들(KESU_1, KESU_2)을 포함할 수 있다. 신드롬 계산 유닛들(SCU_1~SCU_4)로부터 제공되는 신드롬들 중에서 에러가 존재하지 않음을 나타내는 것이 존재할 수 있다. 이 경우, 에러가 존재하지 않는 채널 데이터에 대한 에러 위치 다항식은 구할 필요가 없다. 따라서, 2개의 KES 유닛들(KESU_1, KESU_2)은 에러가 존재하는 것으로 식별된 채널 데이터에 대해서만 선택적으로 에러 위치 다항식을 구성하기 위한 연산을 수행할 수 있다.
적은 수의 에러를 포함하는 데이터에 대해서는 KES 연산이 신속히 종료될 것이다. 이러한 경우에는 KES 유닛들(KESU_1, KESU_2)에 대한 상태 레지스터 값을 참조하여, 신속히 다른 데이터에 대한 KES 연산을 할당할 것이다. 따라서, KES 유닛들(KESU_1, KESU_2) 중 어느 하나라도 유휴 상태(Idle)로 유지되는 것을 방지할 수 있다. KES 유닛들(KESU_1, KESU_2)에 의한 KES 연산에 따라 생성된 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)i, i는 4보다 작은 정수)은 치엔 서치 블록(430)으로 전달된다.
치엔 서치 블록(430, 도 10 참조)은 에러 위치 다항식을 참조하여 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)i}의 근을 계산한다. 치엔 서치 블록(430)은 3개의 치엔 서치 유닛들(ChienSU_1, ChienSU_2, ChienSU_3)을 포함할 수 있다. 상태 레지스터(431)의 값을 참조하여 3개의 치엔 서치 유닛들(ChienSU_1, ChienSU_2, ChienSU_3)에 에러 위치 다항식들이 할당될 것이다. 그리고 치엔 서치 유닛들(ChienSU_1, ChienSU_2, ChienSU_3)에 의하여 할당받은 에러 위치 다항식의 해가 구해지면, 채널 데이터들(D_1, D_2, D_3, D_4) 각각에 대한 정정 벡터(CV_1, CV_2, CV_3, CV_4)로 출력된다.
도 12a는 채널들 각각에 종속되는 KES 유닛들, 치엔 서치 유닛들을 포함하는 경우의 에러 정정 연산을 보여주는 타이밍도이다. 반면, 도 12b는 본 발명의 실시 예에 따른 채널들 각각에 독립된 KES 유닛, 치엔 서치 유닛들을 포함하는 에러 정정 연산을 보여주는 타이밍도이다.
도 12a를 참조하면, T1 시점부터 4개의 채널들(CH1~CH4)을 통하여 메모리 장치로부터 읽혀진 채널 데이터들(#1, #2, #3, #4)이 병렬적으로 에러 정정 부호 블록에 입력된다. 입력과 동시에 신드롬 계산 유닛들에 의해서 채널 데이터들(#1, #2, #3, #4) 각각에 대한 신드롬 계산이 실시될 것이다. 그리고 T2 시점에 채널 데이터들(#1, #2, #3, #4)의 입력과 신드롬 계산이 종료된다.
T2 시점에서, 4개의 채널들(CH1~CH4)을 통하여 메모리 장치로부터 읽혀진 채널 데이터들(#5, #6, #7, #8)이 병렬적으로 에러 정정 부호 블록에 입력될 것이다. 입력과 동시에 채널 데이터들(#5, #6, #7, #8)에 대한 신드롬 계산이 진행된다. 더불어, T2 시점에서, 채널 데이터들(#1, #2, #3, #4) 각각에 대한 신드롬을 참조한 KES 연산이 실시된다. 채널 데이터들(#1, #2, #3, #4) 각각에 대한 KES 연산이 완료되며, t4 시점에서 채널 데이터들(#1, #2, #3, #4) 각각에 대한 치엔 서치 연산이 동시에 시작될 수 있을 것이다.
그리고 T3 시점에서, 채널 데이터들(#5, #6, #7, #8)에 대한 KES 연산이 시작될 것이다. 채널 데이터들(#1, #2, #3, #4) 각각에 대한 치엔 서치 연산이 완료되는 t6 시점에서, 채널 데이터들(#1, #2, #3, #4) 각각에 대한 에러 정정이 실시된다. 그리고 t7 시점에 에러가 정정된 데이터가 호스트 측으로 전달될 수 있다.
상술한 타이밍도에서, t5 시점에서는 채널 데이터들(#1, #2, #3, #4)에 대한 치엔 서치 연산과, 채널 데이터들(#5, #6, #7, #8)에 대한 KES 연산, 채널 데이터들(#9, #10, #11, #12)에 대한 신드롬 계산이 동시에 일어남을 알 수 있다. 특히, 치엔 서치 연산에 소요되는 전력이 가장 크다. 결국, t5 시점에서 피크 전류가 발생할 수 있고 에러 정정 부호 블록이나, 저장 장치의 안정성이 위협받을 수 있다.
도 12b는 본 발명의 실시 예에 따른 에러 정정 동작을 보여주는 타이밍도이다. 도 12b를 참조하면, T1 시점부터 4개의 채널들(CH1~CH4)을 통하여 메모리 장치로부터 읽혀진 채널 데이터들(#1, #2, #3, #4)이 병렬적으로 에러 정정 부호 블록(121c)에 입력된다. 입력과 동시에 신드롬 계산 블록(410)에 의해서 채널 데이터들(#1, #2, #3, #4) 각각에 대한 신드롬 계산이 실시될 것이다. 그리고 T2 시점에 채널 데이터들(#1, #2, #3, #4)의 입력과 신드롬 계산이 종료된다.
T2 시점에서, 4개의 채널들(CH1~CH4)을 통하여 메모리 장치로부터 읽혀진 채널 데이터들(#5, #6, #7, #8)이 병렬적으로 에러 정정 부호 블록에 입력될 것이다. 입력과 동시에 채널 데이터들(#5, #6, #7, #8)에 대한 신드롬 계산이 진행된다.
T2 시점에서, 채널 데이터들(#1, #2, #3, #4) 각각에 대한 신드롬을 참조한 KES 연산이 시작된다. 특히, 본 발명에 따른 KES 블록(420)은 2개의 KES 유닛들(KESU_1, KESU_2)을 포함하고 있다. 따라서, T2 시점의 이전에 레디 상태에 존재하는 KES 유닛들(KESU_1, KESU_2)에 각각 채널 데이터(#1), 채널 데이터(#2)에 대한 KES 연산이 할당될 것이다. 채널 데이터(#1), 채널 데이터(#2)에 대한 KES 연산이 진행되는 동안에 KES 유닛들(KESU_1, KESU_2)의 상태는 비지 상태로 유지될 것이다.
t1 시점에서, 채널 데이터(#1)와 채널 데이터(#2)에 대한 KES 연산이 완료된다. 채널 데이터(#1), 채널 데이터(#2)에 대한 KES 연산이 완료되면, 채널 데이터(#3)와 채널 데이터(#4)에 대한 KES 연산이 시작된다. t1 시점에서, 채널 데이터(#3)와 채널 데이터(#4)에 대한 KES 연산이 시작됨과 동시에, 채널 데이터(#1)와 채널 데이터(#2)에 대한 치엔 서치 연산이 시작된다. 치엔 서치 유닛들(ChienSU_1, ChienSU_3, ChienSU_3) 중 2개가 선택되어 채널 데이터(#1)와 채널 데이터(#2)에 대한 치엔 서치 연산을 수행한다.
채널 데이터(#1)와 채널 데이터(#2)에 대한 치엔 서치 연산은 t2 시점에서 종료된다. 그러나, 채널 데이터(#1)와 채널 데이터(#2)에 대한 치엔 서치 연산이 진행중인 시점에서 채널 데이터(#3)와 채널 데이터(#4)에 대한 KES 연산이 종료된다. 따라서, 치엔 서치 유닛들(ChienSU_1, ChienSU_3, ChienSU_3) 중에서 레디 상태로 존재하는 하나가 선택되어 채널 데이터(#3)에 대한 치엔 서치 연산을 수행하게 될 것이다. 채널 데이터(#4)에 대한 치엔 서치 연산은 채널 데이터(#1)와 채널 데이터(#2)에 대한 치엔 서치 연산이 종료되는 t2 시점에 시작된다.
채널 데이터(#1)와 채널 데이터(#2)에 대한 치엔 서치 연산이 종료되는 t2 시점에서 채널 데이터(#1)와 채널 데이터(#2)에 대한 에러 정정이 실시된다. 그리고 채널 데이터(#1)와 채널 데이터(#2)에 대한 에러 정정이 종료되는 t3 시점부터 에러가 정정된 데이터가 호스트 측으로 출력될 수 있다.
도 12b에 도시된 본 발명의 에러 정정 연산에 따르면, 모든 채널들에서의 신드롬 계산, KES 연산, 치엔 서치 연산이 동시에 일어나는 경우는 발생하지 않는다. 즉, 에러 정정 부호 블록에서의 피크 전류의 레벨이 낮아질 수 있음을 의미한다. 그리고 에러가 정정된 데이터가 호스트 측으로 제공되는 이니셜 데이터 출력 시점이 빨라질 수 있음을 알 수 있다.
도 13은 도 2의 에러 정정 부호 블록의 제 4 실시 예를 보여주는 블록도이다. 도 13을 참조하면, 에러 정정 부호 블록(121d)은 신드롬 계산 블록(510), KES 블록(520), 치엔 서치 블록(530), ECC 컨트롤러(540), FIFO들(550, 560) 그리고 채널 우선순위 정보 블록(570)을 포함한다.
신드롬 계산 블록(510)은 복수의 신드롬 계산 유닛들(511~514, SCU_1~SCU_n)을 포함한다. 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 대응하는 채널로 전달되는 채널 데이터(D_1~D_n)의 신드롬을 계산한다. 신드롬 계산 유닛(SCU_1)은 제 1 채널(CH1)로 전달되는 채널 데이터(D_1)의 신드롬 계산을 담당한다. 신드롬 계산 유닛(SCU_2)은 제 2 채널(CH2)로 전달되는 채널 데이터(D_2)의 신드롬 계산을 담당한다. 신드롬 계산 유닛(SCU_3)은 제 3 채널(CH3)로 전달되는 채널 데이터(D_3)의 신드롬 계산을 담당한다. 이처럼, 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 대응하는 채널로 전달되는 데이터의 신드롬 계산을 전담한다. 여기서, 신드롬 계산 유닛들(SCU_1~SCU_n) 각각은 하나의 지능 소자(Intellectual Property: IP)로 구성될 수 있다.
신드롬 계산 블록(510)에서 계산된 채널 데이터들(D_1~D_n) 각각에 대한 신드롬들(S1~Sn)은 FIFO(550)에 입력된다. FIFO(550)에 저장된 신드롬들(S1~Sn)은 입력된 순서대로 KES 블록(520)에 전달될 것이다.
KES 블록(520)은 각각의 신드롬들(S1~Sn)을 참조하여 에러 위치 다항식(Error Location Polynomial)을 구한다. KES 블록(520)은 유클리드 알고리즘(Euclidean Algorithm: EA), ME(Modified Euclidean) 또는 BM(Berlecamp-Massay) 알고리즘들을 이용하여 구현될 수 있다.
KES 블록(520)은 복수의 KES 유닛들(522~524, KESU_1~KESU_N)과 상태 레지스터(521)를 포함한다. 상태 레지스터(521)는 복수의 KES 유닛들(KESU_1~KESU_N) 각각의 구동 상태(RnB 비트와 채널 정보)를 저장한다. 상태 레지스터(521)는 복수의 KES 유닛들(KESU_1~KESU_N)의 구동 상태를 실시간으로 ECC 컨트롤러(540)에 제공한다.
예를 들면, 복수의 KES 유닛들(KESU_1~KESU_N) 중에서 에러 위치 다항식을 계산중인 것은 상태 레지스터(521)의 RnB 비트는 비지 상태(또는, 논리 '0')로, 그에 대응하는 채널 정보가 입력된다. 반면, 복수의 KES 유닛들(KESU_1~KESU_N) 중에서 구동되지 않는 것들에 대응하는 상태 레지스터(521)의 RnB 비트는 레디 상태(또는, 논리 '1')로, 채널 정보는 리셋 상태로 설정된다.
신드롬 계산 유닛들(SCU_1~SCU_n)로부터의 신드롬들 중에 에러가 존재하는 것으로 검출된 채널 데이터가 제공되면, ECC 컨트롤러(540)는 상태 레지스터(521)의 RnB 비트들을 참조하여 복수의 KES 유닛들(KESU_1~KESU_N) 중 어느 하나를 선택한다. 그리고 선택된 어느 하나의 KES 유닛(KESU_x)이 에러가 존재하는 채널 데이터에 대한 에러 위치 다항식을 구하게 될 것이다. 일단, 에러 위치 다항식을 구하는 연산을 할당받은 어느 하나의 KES 유닛(KESU_x)에 대응하는 RnB 비트는 비지 상태로 전환될 것이다. 이러한 방식으로 KES 블록(520)은 채널 수 n보다 같거나 적은 수(N)의 KES 유닛들(KESU_1~KESU_N)을 포함할 수 있다. 그리고, 각각의 KES 유닛들(KESU_1~KESU_N)은 어느 하나의 채널에 고정되지 않고, 필요에 따라 다양한 채널 데이터에 대한 에러 위치 다항식을 구할 수 있다.
상술한 KES 블록(520)을 사용하면, 에러가 존재하지 않는 것으로 검출된 채널 데이터가 나머지 채널의 에러 정정 연산에 동기되기 위하여 대기하는 문제가 해결될 수 있다. 즉, 에러가 존재하는 채널에 대해서만, 에러 위치 다항식을 구하는 연산이 수행된다. 그리고 채널 데이터들 각각에는 서로 다른 비트의 에러가 포함될 수 있다. 에러 비트의 수에 따라 KES 연산에 소요되는 클록 사이클 수가 다르기 때문에 KES 연산을 채널에 독립적으로 구성하는 것이 구동 효율을 높일 수 있다.
KES 블록(520)에서 계산된 채널 데이터들(D_1~D_n) 각각에 대한 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)n}은 FIFO(560)에 입력된다. FIFO(560)에 저장된 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)n}은 입력된 순서대로 치엔 서치 블록(530)에 전달될 것이다.
치엔 서치 블록(530)은 에러 위치 다항식을 참조하여 에러 위치 다항식의 근을 계산한다. 치엔 서치 블록(530)은 복수의 치엔 서치 유닛들(532~534, ChienSU_1~ChienSU_M)과 상태 레지스터(531)를 포함한다. 상태 레지스터(531)는 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M) 각각의 구동 상태(RnB 비트, 채널 정보)를 저장한다. 상태 레지스터(531)는 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)의 구동 상태를 실시간으로 ECC 컨트롤러(540)에 제공한다.
채널 데이터들 각각에 대응하는 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)n}의 해를 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)이 계산하게 될 것이다. ECC 컨트롤러(540)는 상태 레지스터(531)의 RnB 비트들을 참조하여 복수의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)에 에러 위치 다항식을 할당하게 될 것이다. 상태 레지스터(531)의 RnB 비트들은 대응하는 치엔 서치 유닛이 에러 위치 다항식을 할당받기 이전에는 레디 상태로 유지될 것이다. 치엔 서치 유닛이 에러 위치 다항식을 할당받으면, 그에 대응하는 RnB 비트는 비지 상태로 전환되고, 채널 정보가 설정될 것이다. 그리고 치엔 서치 유닛에 의하여 할당받은 에러 위치 다항식의 해가 구해지면, 그에 대응하는 상태 레지스터(531)의 RnB 비트는 레디 상태로 전환되고, 채널 정보는 리셋될 것이다.
이러한 방식으로 치엔 서치 블록(530)은 채널 수 n보다 적은 수(M)의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)을 포함할 수 있다. 그리고, 각각의 치엔 서치 유닛들(ChienSU_1~ChienSU_M)은 어느 하나의 채널에 고정되지 않고, 필요에 따라 다양한 채널 데이터에 대한 에러 위치 다항식을 구할 수 있다. 에러 위치 다항식의 해를 구하는 치엔 서치 연산에서는 에러 위치에 따라 소요되는 클록 사이클의 수가 다르다. 따라서, 각각의 채널 데이터들의 에러 비트 수가 다른 경우에서는 치엔 서치 유닛들(ChienSU_1~ChienSU_M)이 특정 채널에 종속되지 않는 것이 보다 효율적이다.
ECC 컨트롤러(540)는 저장 매체(110, 도 1 참조)로부터 각각의 채널들로 제공되는 채널 데이터에 대한 에러 검출 및 정정 연산을 수행하도록 신드롬 계산 블록(510), KES 블록(520), 치엔 서치 블록(530) 등을 제어한다. ECC 컨트롤러(540)는 상태 레지스터들(521, 531)에 업데이트되는 레디/비지(RnB) 비트들을 참조하여 KES 블록(520)과 치엔 서치 블록(530)의 동작을 제어한다. 즉, 에러 위치 다항식과 에러 위치 다항식의 근을 구하는 동작에서 ECC 컨트롤러(540)는 KES 유닛들(KESU_1~KESU_N)과 치엔 서치 유닛들(ChienSU_1~ChienSU_M)의 상태를 참조하여 연산 처리를 할당한다.
특히, 본 발명의 ECC 컨트롤러(540)는 채널 우선 순위 정보 블록(570)을 참조하여 FIFO들(550, 560)의 출력 순서를 제어할 수 있다. 채널 우선 순위 정보 블록(570)에는 채널 데이터들의 우선 순위 정보가 저장된다. ECC 컨트롤러(540)는 채널의 우선 순위를 참조하여, 제 1 FIFO(550)에 입력되는 신드롬들(S1~Sn)의 출력 순서를 제어할 수 있다. ECC 컨트롤러(540)는 채널의 우선 순위를 참조하여, 제 2 FIFO(560)에 입력되는 에러 위치 다항식들{λ(x)1, λ(x)2,…, λ(x)n}의 출력 순서를 제어할 수 있다.
여기서, ECC 컨트롤러(540)가 FIFO들(550, 560) 모두를 제어하는 것으로 도시되었으나 본 발명은 이에 국한되지 않는다. 예를 들면, ECC 컨트롤러(540)가 채널 우선 순위 정보 블록(570)을 참조하여 제 1 FIFO(550) 만을 제어하도록 구성될 수 있다. 또는, ECC 컨트롤러(540)가 채널 우선 순위 정보 블록(570)을 참조하여 제 2 FIFO(560) 만을 제어하도록 구성될 수 있다.
채널 우선 순위 정보 블록(570)은 사용자에 의해서 채널의 우선 순위를 입력할 수 있는 저장 수단으로 제공될 수 있다. 예를 들면, 비휘발성 메모리 소자나 휘발성 메모리 소자들로 구성될 수 있을 것이다.
도 14는 본 발명의 실시 예에 따른 불휘발성 메모리 장치를 포함하는 SSD를 보여주는 블록도이다. 도 13을 참조하면, SSD 시스템(1000)은 호스트(1100)와 SSD(1200)를 포함한다. SSD(1200)는 SSD 컨트롤러(1210), 버퍼 메모리(1220), 그리고 불휘발성 메모리 장치(1230)를 포함한다.
SSD 컨트롤러(1210)는 호스트(1100)와 SSD(1200)와의 물리적 연결을 제공한다. 즉, SSD 컨트롤러(1210)는 호스트(1100)의 버스 포맷(Bus format)에 대응하여 SSD(1200)와의 인터페이싱을 제공한다. 특히, SSD 컨트롤러(1210)는 호스트(1100)로부터 제공되는 명령어를 디코딩한다. 디코딩된 결과에 따라, SSD 컨트롤러(1210)는 불휘발성 메모리 장치(1230)를 액세스한다. 호스트(1100)의 버스 포맷(Bus format)으로 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI) 등이 포함될 수 있다.
SSD 컨트롤러(1210)는 불휘발성 메모리 장치(1230)와 연결되는 채널들 각각에 독립적으로 구동되는 에러 정정 부호 블록을 포함할 수 있다. 즉, 에러 정정 부호 블록은 채널들 각각에 종속되지 않고, 연산 시점을 구동 상태에 따라 할당할 수 있는 KES 블록이나 치엔 서치 블록을 포함할 수 있다.
버퍼 메모리(1220)에는 호스트(1100)로부터 제공되는 쓰기 데이터 또는 불휘발성 메모리 장치(1230)로부터 읽혀진 데이터가 일시 저장된다. 호스트(1100)의 읽기 요청시에 불휘발성 메모리 장치(1230)에 존재하는 데이터가 캐시 되어 있는 경우에는, 버퍼 메모리(1220)는 캐시 된 데이터를 직접 호스트(1100)로 제공하는 캐시 기능을 지원한다. 일반적으로, 호스트(1100)의 버스 포맷(예를 들면, SATA 또는 SAS)에 의한 데이터 전송 속도는 SSD(1200)의 메모리 채널의 전송 속도보다 월등히 빠르다. 즉, 호스트(1100)의 인터페이스 속도가 월등히 높은 경우, 대용량의 버퍼 메모리(1220)를 제공함으로써 속도 차이로 발생하는 퍼포먼스 저하를 최소화할 수 있다.
버퍼 메모리(1220)는 대용량의 보조 기억 장치로 사용되는 SSD(1200)에서 충분한 버퍼링을 제공하기 위해 동기식 DRAM(Synchronous DRAM)으로 제공될 수 있다. 하지만, 버퍼 메모리(1220)가 여기의 개시에 국한되지 않음은 이 분야의 통상적인 지식을 습득한 자들에게 자명하다.
불휘발성 메모리 장치(1230)는 SSD(1200)의 저장 매체로서 제공된다. 예를 들면, 불휘발성 메모리 장치(1230)는 대용량의 저장 능력을 가지는 낸드 플래시 메모리(NAND-type Flash memory)로 제공될 수 있다. 불휘발성 메모리 장치(1230)는 복수의 메모리 장치로 구성될 수 있다. 이 경우, 각각의 메모리 장치들은 채널 단위로 SSD 컨트롤러(1210)와 연결된다. 저장 매체로서 불휘발성 메모리 장치(1230)가 낸드 플래시 메모리를 예로 들어 설명되었으나, 또 다른 불휘발성 메모리 장치들로 구성될 수 있다. 예를 들면, 저장 매체로서 PRAM, MRAM, ReRAM, FRAM, NOR 플래시 메모리 등이 사용될 수 있으며, 이종의 메모리 장치들이 혼용되는 메모리 시스템도 적용될 수 있다. 그리고 저장 매체로서 휘발성 메모리 장치(예를 들면, DRAM)이 포함될 수도 있다.
도 15는 본 발명에 따른 메모리 시스템(2000)을 간략히 보여주는 블록도이다. 도 15를 참조하면, 본 발명에 따른 메모리 시스템(2000)은 불휘발성 메모리 장치(2200)와 메모리 컨트롤러(2100)를 포함한다.
메모리 컨트롤러(2100)는 불휘발성 메모리 장치(2200)를 제어하도록 구성될 것이다. 불휘발성 메모리 장치(2200)와 메모리 컨트롤러(2100)의 결합에 의해 메모리 카드 또는 반도체 디스크 장치(Solid State Disk: SSD)로 제공될 수 있을 것이다. SRAM(2110)은 프로세싱 유닛(2120)의 동작 메모리로 사용된다. 호스트 인터페이스(2130)는 메모리 시스템(2000)과 접속되는 호스트의 데이터 교환 프로토콜을 구비한다. 에러 정정 블록(2140)은 불휘발성 메모리 장치(2200)로부터 독출된 데이터에 포함되는 에러를 검출 및 정정한다. 메모리 인터페이스(2150)는 본 발명의 불휘발성 메모리 장치(2200)와 인터페이싱 한다. 프로세싱 유닛(2120)은 메모리 컨트롤러(2100)의 데이터 교환을 위한 제반 제어 동작을 수행한다. 비록 도면에는 도시되지 않았지만, 본 발명에 따른 메모리 시스템(2000)은 호스트(Host)와의 인터페이싱을 위한 코드 데이터를 저장하는 ROM(미도시됨) 등이 더 제공될 수 있음은 이 분야의 통상적인 지식을 습득한 자들에게 자명하다.
에러 정정 블록(2140)은 불휘발성 메모리 장치(2200)와 연결되는 채널들 각각에 독립적으로 구동되는 에러 정정 부호 블록을 포함할 수 있다. 즉, 에러 정정 블록(2140)은 채널들 각각에 종속되지 않고, 연산 시점을 구동 상태에 따라 할당할 수 있는 KES 블록이나 치엔 서치 블록을 포함할 수 있다.
불휘발성 메모리 장치(2200)는 복수의 플래시 메모리 칩들로 구성되는 멀티-칩 패키지로 제공될 수도 있다. 이상의 본 발명의 메모리 시스템(2000)은 에러의 발생 확률이 낮은 높은 신뢰도의 저장 매체로 제공될 수 있다. 특히, 최근 활발히 연구되고 있는 반도체 디스크 장치(Solid State Disk: 이하 SSD)와 같은 메모리 시스템에서 본 발명의 플래시 메모리 장치가 구비될 수 있다. 이 경우, 메모리 컨트롤러(2100)는 USB, MMC, PCI-E, SAS, SATA, PATA, SCSI, ESDI, 그리고 IDE 등과 같은 다양한 인터페이스 프로토콜들 중 하나를 통해 외부(예를 들면, 호스트)와 통신하도록 구성될 것이다. 또한, 메모리 컨트롤러(2100)에는 랜덤 연산을 수행하기 위한 구성이 더 포함될 수 있다.
도 16은 본 발명의 다른 실시 예에 따른 데이터 저장 장치(3000)를 예시적으로 보여주는 블록도이다. 도 16을 참조하면, 본 발명에 따른 데이터 저장 장치(3000)는 플래시 메모리(3100)와 플래시 컨트롤러(3200)를 포함할 수 있다. 플래시 컨트롤러(3200)는 데이터 저장 장치(3000) 외부로부터 수신된 제어 신호들에 기초하여 플래시 메모리(3100)를 제어할 수 있다.
플래시 컨트롤러(3200)는 플래시 메모리(3100)와 연결되는 채널들 각각에 독립적으로 구동되는 에러 정정 부호 블록을 포함할 수 있다. 즉, 플래시 컨트롤러(3200)는 채널들 각각에 종속되지 않고, 연산 시점을 구동 상태에 따라 할당할 수 있는 KES 블록이나 치엔 서치 블록을 포함할 수 있다.
본 발명의 데이터 저장 장치(3000)는 메모리 카드 장치, SSD 장치, 멀티미디어 카드 장치, SD 장치, 메모리 스틱 장치, 하드 디스크 드라이브 장치, 하이브리드 드라이브 장치, 또는 범용 직렬 버스 플래시 장치를 구성할 수 있다. 예를 들면, 본 발명의 데이터 저장 장치(3000)는 디지털, 카메라, 개인 컴퓨터 등과 같은 사용자 장치를 사용하기 위한 산업 표준을 만족하는 카드를 구성할 수 있다.
도 17에는 본 발명에 따른 불휘발성 메모리 장치(4120)를 포함한 컴퓨팅 시스템(4000)이 개략적으로 도시되어 있다. 본 발명에 따른 컴퓨팅 시스템(4000)은 시스템 버스(4600)에 전기적으로 연결된 마이크로프로세서(4200), 램(4300), 사용자 인터페이스(4400), 베이스밴드 칩셋(Baseband chipset)과 같은 모뎀(4500) 및 메모리 시스템(4100)을 포함한다. 메모리 시스템(4100)은 도 14 또는 도 15에 도시된 것과 실질적으로 동일하게 구성될 것이다. 본 발명에 따른 컴퓨팅 시스템(4000)이 모바일 장치인 경우, 컴퓨팅 시스템(4000)의 동작 전압을 공급하기 위한 배터리(미도시됨)가 추가적으로 제공될 것이다. 비록 도면에는 도시되지 않았지만, 본 발명에 따른 컴퓨팅 시스템(4000)에는 응용 칩셋(Application chipset), 카메라 이미지 프로세서(Camera Image Processor: CIS), 모바일 디램, 등이 더 제공될 수 있음은 이 분야의 통상적인 지식을 습득한 자들에게 자명하다. 메모리 시스템(4100)은, 예를 들면, 데이터를 저장하는 데 불휘발성 메모리를 사용하는 SSD(Solid State Drive/Disk)를 구성할 수 있다. 또는, 메모리 시스템(4100)은, 퓨전 플래시 메모리(예를 들면, 원낸드 플래시 메모리)로 제공될 수 있다.
본 발명에 따른 불휘발성 메모리 장치 또는 메모리 컨트롤러는 다양한 형태들의 패키지를 이용하여 실장될 수 있다. 예를 들면, 본 발명에 따른 플래시 메모리 장치 그리고/또는 메모리 컨트롤러는 PoP(Package on Package), Ball grid arrays(BGAs), Chip scale packages(CSPs), Plastic Leaded Chip Carrier(PLCC), Plastic Dual In-Line Package(PDIP), Die in Waffle Pack, Die in Wafer Form, Chip On Board(COB), Ceramic Dual In-Line Package(CERDIP), Plastic Metric Quad Flat Pack(MQFP), Thin Quad Flatpack(TQFP), Small Outline(SOIC), Shrink Small Outline Package(SSOP), Thin Small Outline(TSOP), Thin Quad Flatpack(TQFP), System In Package(SIP), Multi Chip Package(MCP), Wafer-level Fabricated Package(WFP), Wafer-Level Processed Stack Package(WSP), 등과 같은 패키지들을 이용하여 실장될 수 있다.
이상에서와 같이 도면과 명세서에서 최적 실시 예가 개시되었다. 여기서 특정한 용어들이 사용되었으나, 이는 단지 본 발명을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 발명의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시 예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.
110 : 저장 매체
111, 112, 113, 114 : 불휘발성 메모리 장치
120 : 스토리지 컨트롤러
121 : 에러 정정 부호 블록
122 : 버퍼 컨트롤러
123 : 호스트 인터페이스
124 : 중앙 처리 장치
210, 310, 410, 510 : 신드롬 계산 블록
220, 320, 420, 520 : KES 블록
230, 330, 430, 530 : 치엔 서치 블록
240, 340, 440, 540 : ECC 컨트롤러
250, 350, 450, 460, 550, 560 : FIFO
570 : 채널 우선 순위 저장 블록
221, 331, 421, 431, 521, 531 : 상태 레지스터
1100 : 호스트
1200 : SSD
1210 : SSD 컨트롤러
1220 : 버퍼 메모리
1230 : 불휘발성 메모리
2100 : 메모리 컨트롤러
2110 : 에스램
2120 : CPU
2130 : RAM
2140 : ECC 유닛
2150 : 메모리 인터페이스
2200 : 불휘발성 메모리 장치
3100: 플래시 메모리
3200: 플래시 컨트롤러
4100 : 메모리 시스템
4110 : 메모리 컨트롤러
4120 : 플래시 메모리
4200 : CPU
4300 : 램
4400 : 유저 인터페이스
4500 : 모뎀
4600 : 시스템 버스

Claims (10)

  1. 저장 매체로부터의 독출 데이터를 처리하는 에러 정정 디코더에 있어서:
    복수의 채널들 각각으로 전달되는 채널 데이터들의 신드롬들을 계산하는 신드롬 계산 블록;
    상기 신드롬들을 참조하여 상기 채널 데이터들에 대한 에러 위치 다항식들을 구하는 에러 위치 다항식 계산 블록; 그리고
    상기 에러 위치 다항식들 각각의 해를 구하는 치엔 서치 블록을 포함하되,
    상기 에러 위치 다항식 계산 블록 또는 상기 치엔 서치 블록은, 상기 복수의 채널들 각각에 독립적으로 구동되며, 상기 복수의 채널들 중 임의로 선택된 어느 하나의 채널의 채널 데이터를 처리하는 적어도 하나의 계산 유닛을 포함하는 에러 정정 디코더.
  2. 제 1 항에 있어서,
    상기 에러 위치 다항식 계산 블록 또는 상기 치엔 서치 블록의 상태를 참조하여 상기 신드롬 계산 블록, 상기 에러 위치 다항식 계산 블록 및 상기 치엔 서치 블록의 연산 시점을 제어하는 에러 정정 컨트롤러를 더 포함하는 에러 정정 디코더.
  3. 제 2 항에 있어서,
    상기 에러 위치 다항식 계산 블록은,
    상기 신드롬들 각각으로부터 에러 위치 다항식을 구하며, 상기 복수의 채널들 각각에 독립적으로 구동되는 복수의 에러 위치 다항식 계산 유닛들; 그리고
    상기 복수의 에러 위치 다항식 계산 유닛들 각각의 레디/비지 상태들을 저장하는 상태 레지스터를 포함하는 에러 정정 디코더.
  4. 제 3 항에 있어서,
    상기 에러 정정 컨트롤러는 상기 레디/비지 상태들의 값을 참조하여 상기 복수의 채널 데이터들을 상기 에러 위치 다항식 계산 유닛들에 할당하는 에러 정정 디코더.
  5. 제 3 항에 있어서,
    상기 신드롬 계산 블록으로부터 제공되는 상기 신드롬들을 입력되는 순서대로 상기 에러 위치 다항식 계산 블록에 출력하는 제 1 선입선출 버퍼를 더 포함하는 에러 정정 디코더.
  6. 제 2 항에 있어서,
    상기 치엔 서치 블록은,
    상기 에러 위치 다항식들 중 어느 하나의 해를 구하며, 상기 복수의 채널들 각각에 독립적으로 구동되는 복수의 치엔 서치 유닛들; 그리고
    상기 복수의 치엔 서치 유닛들 각각의 레디/비지 상태들을 저장하는 상태 레지스터를 포함하는 에러 정정 디코더.
  7. 제 2 항에 있어서,
    상기 복수의 채널들 각각에 대한 우선 순위 정보를 저장하는 채널 우선 순위 저장 블록;
    상기 신드롬 계산 블록으로부터 제공되는 상기 신드롬들을 상기 우선 순위 정보에 따라 상기 에러 위치 다항식 계산 블록에 출력하는 제 1 선입선출 버퍼; 및
    상기 에러 위치 다항식 계산 블록으로부터 제공되는 상기 에러 위치 다항식들을 상기 우선 순위 정보에 따라 상기 치엔 서치 블록에 출력하는 제 2 선입선출 버퍼를 더 포함하는 에러 정정 디코더.
  8. 불휘발성 메모리 장치로부터 읽혀진 데이터의 에러 정정 방법에 있어서:
    상기 데이터를 복수의 채널들 각각으로 전달하는 단계;
    상기 채널들 각각에 대응하는 채널 데이터들의 신드롬을 계산하는 단계;
    상기 신드롬들을 참조하여 상기 채널 데이터들 각각에 대한 에러 위치 다항식들을 구하는 단계; 그리고
    상기 에러 위치 다항식들 각각의 해를 구하는 단계를 포함하되,
    상기 에러 위치 다항식을 구하는 단계 또는 상기 에러 위치 다항식들 각각의 해를 구하는 단계에서 제 1 채널 데이터에 대한 연산은 제 2 채널 데이터에 대한 연산 직후에 수행되는 에러 정정 방법.
  9. 제 8 항에 있어서,
    상기 에러 위치 다항식들을 구하는 단계에서, 상기 제 1 채널 데이터에 대한 연산이 완료되면, 상기 제 1 채널 데이터는 에러 위치 다항식의 해를 구하는 단계로 넘겨지는 에러 정정 방법.
  10. 제 8 항에 있어서,
    상기 신드롬들 중에서 에러가 존재하지 않는 신드롬에 대응하는 채널 데이터는 에러 위치 다항식을 구하는 단계 또는 에러 위치 다항식의 해를 구하는 단계를 생략하고 출력되는 에러 정정 방법.
KR1020110028318A 2011-03-29 2011-03-29 에러 정정 디코더 및 그것의 에러 정정 방법 KR101747794B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020110028318A KR101747794B1 (ko) 2011-03-29 2011-03-29 에러 정정 디코더 및 그것의 에러 정정 방법
US13/433,796 US8719669B2 (en) 2011-03-29 2012-03-29 Error correction decoder and error correction method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110028318A KR101747794B1 (ko) 2011-03-29 2011-03-29 에러 정정 디코더 및 그것의 에러 정정 방법

Publications (2)

Publication Number Publication Date
KR20120110450A true KR20120110450A (ko) 2012-10-10
KR101747794B1 KR101747794B1 (ko) 2017-06-16

Family

ID=46928962

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110028318A KR101747794B1 (ko) 2011-03-29 2011-03-29 에러 정정 디코더 및 그것의 에러 정정 방법

Country Status (2)

Country Link
US (1) US8719669B2 (ko)
KR (1) KR101747794B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10404283B2 (en) 2015-09-10 2019-09-03 Silicon Motion Inc. Method and associated decoding circuit for decoding an error correction code

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9384083B2 (en) * 2012-09-24 2016-07-05 Samsung Electronics Co., Ltd. Error location search circuit, and error check and correction circuit and memory device including the same
CN104239118B (zh) * 2014-08-05 2017-09-12 北京交通大学 虚拟连续存储方式的多天线信道测量数据采集方法和装置
KR101974301B1 (ko) * 2018-01-03 2019-04-30 포항공과대학교 산학협력단 플래시 메모리의 오류 정정을 위한 대칭형 연접 비씨에이치 복호화기와 이를 이용한 오류 정정 방법 및 시스템
KR20210014034A (ko) 2019-07-29 2021-02-08 에스케이하이닉스 주식회사 낮은 레이턴시를 갖는 에러정정코드 디코더

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100214485B1 (ko) 1996-06-08 1999-08-02 구본준 정보 처리 시스템의 부호/복호기
US5942005A (en) * 1997-04-08 1999-08-24 International Business Machines Corporation Method and means for computationally efficient error and erasure correction in linear cyclic codes
JP2003273750A (ja) 2002-03-15 2003-09-26 Fujitsu Ltd 符号誤り検出訂正装置
US7237183B2 (en) 2003-03-04 2007-06-26 Broadcom Corporation Parallel decoding of a BCH encoded signal
US20060059409A1 (en) 2004-09-10 2006-03-16 Hanho Lee Reed-solomon decoder systems for high speed communication and data storage applications
KR100733963B1 (ko) 2005-11-09 2007-06-29 한국전자통신연구원 높은 오류 정정 능력을 가지는 리드-솔로몬 복호화 장치 및그 방법
US7870468B1 (en) * 2006-05-26 2011-01-11 Redpine Signals, Inc. Reed-solomon decoder using a configurable arithmetic processor
KR100847560B1 (ko) * 2006-12-11 2008-07-21 삼성전자주식회사 다운로드되는 펌웨어의 오류 정정을 위한 회로 및 방법
KR101433620B1 (ko) * 2007-08-17 2014-08-25 삼성전자주식회사 처리량을 높이기 위하여 더블 버퍼링 구조와 파이프라이닝기법을 이용하는 디코더 및 그 디코딩 방법
KR101437396B1 (ko) * 2008-02-27 2014-09-05 삼성전자주식회사 레이턴시를 줄일 수 있는 에러 정정 블록을 포함하는메모리 시스템 및 그것의 에러 정정 방법
WO2011159805A2 (en) * 2010-06-15 2011-12-22 Fusion-Io, Inc. Apparatus, system, and method for providing error correction
KR101892251B1 (ko) * 2011-05-09 2018-08-29 삼성전자주식회사 메모리 컨트롤러 및 메모리 컨트롤러의 동작 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10404283B2 (en) 2015-09-10 2019-09-03 Silicon Motion Inc. Method and associated decoding circuit for decoding an error correction code
US10848184B2 (en) 2015-09-10 2020-11-24 Silicon Motion, Inc. Method for controlling storage device with aid of error correction and associated apparatus

Also Published As

Publication number Publication date
US20120254705A1 (en) 2012-10-04
KR101747794B1 (ko) 2017-06-16
US8719669B2 (en) 2014-05-06

Similar Documents

Publication Publication Date Title
TWI625620B (zh) 非揮發性記憶體裝置及其讀取方法
US9411680B2 (en) Composite semiconductor memory device with error correction
US8726140B2 (en) Dummy data padding and error code correcting memory controller, data processing method thereof, and memory system including the same
TWI587308B (zh) 於非依電性記憶體中之回復演算法
TWI814975B (zh) 用於利用自我調整寫緩衝區釋放的存儲介質編程方法與裝置、以及其系統單晶片
US9767053B2 (en) Memory controller and memory system including the same
KR102072829B1 (ko) 저장 장치 및 그것을 포함하는 데이터 저장 시스템의 글로벌 가비지 컬렉션 방법
JP5776107B2 (ja) メモリコントローラ及び方法におけるデータ完全性
KR102398213B1 (ko) 저장 장치, 그것을 포함하는 호스트 시스템, 및 그것의 맵 테이블 업데이트 방법
TWI447732B (zh) 提供錯誤修正的記憶體系統及其方法
JP5918359B2 (ja) メモリシステムコントローラを含む装置および関連する方法
TWI708139B (zh) 包括晶片上錯誤校正碼電路的記憶體元件和系統
TWI718694B (zh) 記憶體裝置以及操作記憶體裝置以用於讀取頁面串流的方法
US20150026509A1 (en) Storage device having a data stream converter
US20120144261A1 (en) Error checking and correcting circuit, memory system compising error checking and correcting circuit, and related methods of operation
US10048867B2 (en) Method to shorten hash chains in lempel-ziv compression of data with repetitive symbols
KR20120110450A (ko) 에러 정정 디코더 및 그것의 에러 정정 방법
US20120102262A1 (en) Memory control device, storage device, and memory control method
US20150205540A1 (en) Memory system including nonvolatile memory devices and operating method
JP2008090419A (ja) 集積回路装置
KR100688549B1 (ko) 비휘발성 메모리를 지원하는 온더플라이 bcc 코덱시스템 및 방법
TWI606333B (zh) 資料處理方法、記憶體儲存裝置及記憶體控制電路單元
US8762814B2 (en) Method for enhancing error correction capability, and associated memory device and controller thereof
US11101822B1 (en) Data writing method, memory control circuit unit and memory storage apparatus
KR20130114303A (ko) 메모리 컨트롤러의 동작 방법과 상기 메모리 컨트롤러를 포함하는 장치들

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant