[go: up one dir, main page]

KR102511903B1 - 고정된 에러정정능력의 에러정정코드 엔진을 이용하여 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템 - Google Patents

고정된 에러정정능력의 에러정정코드 엔진을 이용하여 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템 Download PDF

Info

Publication number
KR102511903B1
KR102511903B1 KR1020180023020A KR20180023020A KR102511903B1 KR 102511903 B1 KR102511903 B1 KR 102511903B1 KR 1020180023020 A KR1020180023020 A KR 1020180023020A KR 20180023020 A KR20180023020 A KR 20180023020A KR 102511903 B1 KR102511903 B1 KR 102511903B1
Authority
KR
South Korea
Prior art keywords
error correction
ecc
row
product
column
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
KR1020180023020A
Other languages
English (en)
Other versions
KR20190102533A (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 KR1020180023020A priority Critical patent/KR102511903B1/ko
Priority to TW107142019A priority patent/TWI787401B/zh
Priority to US16/203,362 priority patent/US10847246B2/en
Priority to CN201811477683.4A priority patent/CN110196783B/zh
Publication of KR20190102533A publication Critical patent/KR20190102533A/ko
Application granted granted Critical
Publication of KR102511903B1 publication Critical patent/KR102511903B1/ko
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • G06F11/1032Simple parity
    • 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/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/02Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements
    • G11C11/16Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements using elements in which the storage effect is based on magnetic spin effect
    • G11C11/165Auxiliary circuits
    • G11C11/1653Address circuits or decoders
    • G11C11/1655Bit-line or column circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/02Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements
    • G11C11/16Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements using elements in which the storage effect is based on magnetic spin effect
    • G11C11/165Auxiliary circuits
    • G11C11/1653Address circuits or decoders
    • G11C11/1657Word-line or row circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/21Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
    • G11C11/34Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
    • G11C11/40Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
    • G11C11/401Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
    • G11C11/4063Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
    • G11C11/407Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
    • G11C11/409Read-write [R-W] circuits 
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/29Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2906Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
    • H03M13/2909Product codes
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0409Online test
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1006Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Probability & Statistics with Applications (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

메모리 시스템은, 메모리 미디어 및 메모리 컨트롤러를 포함한다. 메모리 미디어는, 복수개의 로우들 및 컬럼들의 교차점들 각각에 데이터심볼 또는 패리티심볼이 배치되어 구성된다. 메모리 컨트롤러는, 메모리 미디어에 대한 액세스 과정에서 고정된 에러정정레벨에 따른 에러정정동작을 수행하도록 설계된 에러정정코드(ECC) 엔진을 갖는다. 메모리 컨트롤러는, 제1 에러정정모드에서 상기 에러정정코드(ECC) 엔진을 이용하여 상기 고정된 에러정정레벨에 따른 에러정정동작을 수행한다. 그리고 메모리 컨트롤러는, 제2 에러정정모드에서 상기 에러정정코드(ECC) 엔진을 이용하여 상기 고정된 에러정정레벨보다 높은 에러정정레벨의 에러정정동작을 수행한다.

Description

고정된 에러정정능력의 에러정정코드 엔진을 이용하여 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템{Memory system capable of performing reconfigurable error correction using ECC engine with fixed ECC capability}
본 개시의 여러 실시예들은, 일반적으로 메모리 시스템에 관한 것으로서, 특히 고정된 에러정정능력의 에러정정코드 엔진을 이용하여 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템에 관한 것이다.
근래의 반도체 메모리 시스템들은, 종종 에러 검사 및 에러 정정용 비트들을 이용하여, 프로세서들 또는 다른 구성요소들을 위한 신뢰성 있는 저장 수단들을 제공한다. 메모리 시스템에서 에러 검사 및 에러 정정은 에러정정코드(Error Correction Code; 이하 ECC) 엔진에 의해 수행될 수 있다. ECC 엔진은, 주로 산업용 또는 금융용 계산과 같이 어떤 환경 하에서든 데이터 손상(corruption)이 용인될 수 없는 대부분의 메모리 시스템들에서 이용되지만, 최근 그 적용 범위가 점점 늘어나고 있는 추세이다.
일반적으로 ECC 엔진을 채용하고 있는 메모리 시스템을 설계하는데 있어서, ECC 엔진의 재구성 정책(reconfigurable scheme)이 고려된다. 즉 메모리 시스템 설계시, ECC 엔진에 의해 수행되는 에러정정동작의 범위를 미리 설정하고, 설정된 범위가 반영되도록 메모리 시스템을 설계한다. 예컨대 ECC 엔진이 복수의 에러정정레벨들의 에러정정동작을 수행할 수 있도록 ECC 엔진의 재구성 정책이 만들어질 수 있다. 이 경우 각각의 에러정정레벨에서 ECC 엔진의 에러 정정 능력(ECC capability)이 다르게 설정된다. 일 예에서 가장 낮은 에러정정레벨에서 ECC 엔진이 에러 정정할 수 있는 에러 개수는 가장 적게 설정된다. 상대적으로 높은 에러정정레벨에서는 ECC 엔진이 에러 정정할 수 있는 에러 개수가 증가된다. 복수의 에러정정레벨들의 에러정정동작을 수행할 수 있는 ECC 엔진을 채용할 경우, 그 ECC 엔진은, 검출된 에러 개수에 따라 적절한 레벨의 에러정정동작이 수행되도록 한다.
ECC 엔진의 에러 정정 능력이 높을수록, 그 ECC 엔진이 채용된 메모리 시스템의 안정성은 향상된다. 반면에 ECC 엔진의 에러 정정 능력이 높을수록, ECC 엔진을 구현하는 회로가 복잡해진다. 이는 메모리 시스템이 차지하는 면적에도 부정정인 영향을 끼친다. 그럼에도 불구하고, 메모리 시스템이 요구하는 신뢰성을 만족시키기 위해서는, 메모리 시스템의 설계시 발생 확률이 높지 않은 최악의 경우도 고려하여 ECC 엔진의 재구성 정책이 구성되도록 할 필요가 있다. 그 이유는, ECC 엔진의 재구성 정책이 메모리 시스템의 설계시에 반영된 이후에는, ECC 엔진의 재구성 정책을 인위적으로 변경시킬 수 없기 때문이다. 따라서 ECC 엔진을 구현하는데 필요한 로직회로의 면적 및 복잡도가 비효율적으로 증가될 수 있다. 더욱이, 메모리 시스템을 운영하는 과정에서 ECC 엔진의 재구성 정책을 변경할 수 없으므로, 예기치 못한 에러발생 상황에도 유연하게 대처할 수 없게 된다.
본 출원이 해결하고자 하는 과제는, 고정된 에러정정 능력의 ECC 엔진을 채용하더라도, 기존의 아키텍쳐(architecture)를 이용하여 보다 엄격한 에러정정레벨의 에러정정동작들도 다양하게 수행되도록 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템을 제공하는 것이다.
본 개시의 일 예에 따른 메모리 시스템은, 메모리 미디어 및 메모리 컨트롤러를 포함한다. 메모리 미디어는, 복수개의 로우들 및 컬럼들의 교차점들 각각에 데이터심볼 또는 패리티심볼이 배치되어 구성된다. 메모리 컨트롤러는, 메모리 미디어에 대한 액세스 과정에서 고정된 에러정정레벨에 따른 에러정정동작을 수행하도록 설계된 에러정정코드(ECC) 엔진을 갖는다. 메모리 컨트롤러는, 제1 에러정정모드에서 상기 에러정정코드(ECC) 엔진을 이용하여 상기 고정된 에러정정레벨에 따른 에러정정동작을 수행한다. 그리고 메모리 컨트롤러는, 제2 에러정정모드에서 상기 에러정정코드(ECC) 엔진을 이용하여 상기 고정된 에러정정레벨보다 높은 에러정정레벨의 에러정정동작을 수행한다.
본 개시의 일 예에 따른 메모리 시스템은, 메모리 미디어 및 메모리 컨트롤러를 포함한다. 메모리 미디어는, 복수개의 로우들 및 컬럼들의 교차점들 각각에 데이터심볼 또는 패리티심볼이 배치되어 구성된다. 메모리 컨트롤러는, 메모리 미디어에 대한 액세스 과정에서 고정된 에러정정레벨에 따른 제1 에러정정모드에서의 에러정정동작을 수행하도록 설계된 에러정정코드(ECC) 엔진을 갖는다. 메모리 컨트롤러는, 제1 에러정정모드에서 에러가 정정되지 않는 경우 제2 에러정정모드로 전환하여, 데이터심볼들 및 패리티심볼들로 구성되는 M개(M은 자연수)의 로우 프로턱트 코드워드와 패리티심볼들로 구성되는 i개(i는 자연수)의 로우 프로덕트 코드워드들, 및 데이터심볼들 및 패리티심볼들로 구성되는 N개(N은 자연수)의 컬럼 프로덕트 코드워드와 패리티심볼들로 구성되는 j개(j는 자연수)의 컬럼 프로덕트 코드워드들로 구성되는 프로덕트 코드워드를 생성하고, 생성된 상기 프로덕트 코드워드를 대상으로 에러정정코드(ECC) 엔진을 이용한 에러정정동작을 수행하도록 구성된다.
본 개시의 일 예에 따른 메모리 시스템은, 메모리 미디어 및 메모리 컨트롤러를 포함한다. 메모리 미디어는, 복수개의 로우들 및 컬럼들의 교차점들 각각에 데이터심볼 또는 패리티심볼이 배치되어 구성된다. 메모리 컨트롤러는, 메모리 미디어에 대한 액세스 과정에서 고정된 에러정정레벨에 따른 제1 에러정정모드에서의 에러정정동작을 수행하도록 설계된 에러정정코드(ECC) 엔진을 갖는다. 메모리 컨트롤러는, 에러정정코드(ECC) 엔진을 이용하여 로우를 공유하는 데이터심볼들 및 패리티심볼들 단위로 로우 방향의 에러정정동작을 수행하고, 그리고 에러정정코드(ECC) 엔진을 이용하여 컬럼을 공유하는 데이터심볼들 및 패리티심볼들 단위로 컬럼 방향의 에러정정동작을 수행하도록 구성된다.
여러 실시예들에 따르면, 고정된 에러정정 능력의 ECC 엔진을 채용함으로써 ECC 엔진의 구현을 위한 로직회로의 면적 및 복잡성을 감소시킬 수 있다는 이점이 제공된다. 프로덕트 코드(product code)를 이용하여 보다 엄격한 에러정정레벨의 에러정정동작이 수행되도록 함으로써, ECC 엔진이 고정된 에러정정 능력을 갖더라도 재구성할 수 있는 에러정정동작이 수행되도록 할 수 있다는 이점도 또한 제공된다.
도 1은 본 개시의 일 예에 따른 메모리 시스템을 나타내 보인 도면이다.
도 2는 도 1의 메모리 시스템의 메모리 미디어를 구성하는 메모리 어레이의 일 예 및 로우 프로덕트 코드와 컬럼 프로덕트 코드의 예를 나타내 보인 도면이다.
도 3은 도 1의 메모리 시스템의 에러정정모드 전환 과정을 설명하기 위해 나타내 보인 플로 챠트이다.
도 4는 도 1의 메모리 시스템에서 제1 에러정정모드로 수행되는 에러정정동작을 설명하기 위해 복수개의 코드워드들의 일 예를 나타내 보인 도면이다.
도 5는 도 3의 메모리 시스템에서 제2 에러정정모드로 수행되는 에러정정동작을 나타내 보인 플로챠트이다.
도 6은 도 1의 메모리 시스템에서 제2 에러정정모드에서의 에러정정동작을 위해 생성된 프로덕트 코드의 일 예를 나타내 보인 도면이다.
도 7은 도 5의 제2 에러정정모드에서의 에러정정동작 중 단계 442에서 로우 프로덕트 코드워드들을 생성하는 단계를 보다 상세하게 나타내 보인 플로 챠트이다.
도 8은 도 7의 단계 442-2 내지 단계 442-5를 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 9는 도 7의 로우 프로덕트 코드워드들을 생성하는 단계들이 수행된 후에 메모리 컨트롤러 내의 제1 버퍼에 저장된 로우 프로덕트 코드워드들의 일 예를 나타내 보인 도면이다.
도 10은 도 5의 제2 에러정정모드에서의 에러정정동작 중 단계 443에서 컬럼 프로덕트 코드워드들을 생성하는 단계를 보다 상세하게 나타내 보인 플로 챠트이다.
도 11은 도 10의 단계 443-2 내지 단계 443-4를 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 12는 도 10의 컬럼 프로덕트 코드워드들을 생성하는 단계들이 수행된 후에 메모리 컨트롤러 내의 제1 버퍼에 저장된 로우 프로덕트 코드워드들 및 컬럼 프로덕트 코드워드들의 일 예를 나타내 보인 도면이다.
도 13은 도 5의 제2 에러정정모드에서의 에러정정동작 중 단계 444에서 프로덕트 코드워드를 메모리 미디어에 쓰는 단계를 보다 상세하게 나타내 보인 플로 챠트이다.
도 14는 도 13의 단계 444-2 내지 단계 444-3을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 15는 도 13의 프로덕트 코드워드를 메모리 미디어에 쓰는 단계가 수행된 후에 메모리 미디어에 저장된 로우 프로덕트 코드워드들 및 컬럼 프로덕트 코드워드들의 일 예를 나타내 보인 도면이다.
도 16은 도 1의 메모리 시스템에서 프로덕트 코드워드를 구성하는 데이터에 대한 읽기 명령에 응답하여 제2 에러정정모드에서의 읽기 동작을 나타내 보인 플로챠트이다.
도 17은 도 16의 프로덕트 코드워드에 대한 읽기 동작에서 로우 방향의 ECC 디코딩을 수행하는 단계를 보다 상세하게 나타내 보인 플로 챠트이다.
도 18은 도 17의 단계 452-2 내지 단계 452-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 19는 도 17의 단계 452-2 내지 단계 452-6이 수행된 후에 메모리 컨트롤러 내의 제2 버퍼에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면이다.
도 20은 단계 452-7을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 21은 도 17의 단계 452-7이 수행된 후에 메모리 컨트롤러 내의 제2 버퍼에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면이다.
도 22는 도 16의 프로덕트 코드워드에 대한 읽기 동작에서 컬럼 방향의 ECC 디코딩을 수행하는 단계 453을 보다 상세하게 나타내 보인 플로 챠트이다.
도 23 및 도 24는 도 22의 단계 453-2 내지 단계 453-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 25 내지 도 30은, 각각 도 17의 단계 452-2 내지 단계 452-6 각각이 수행된 후에 메모리 컨트롤러 내의 제2 버퍼에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면들이다.
도 31은 도 16의 프로덕트 코드워드에 대한 읽기 동작에서 컬럼 방향의 ECC 디코딩을 수행하는 단계 454를 보다 상세하게 나타내 보인 플로 챠트이다.
도 32는 도 31의 단계 454-1 내지 단계 454-3을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 33 내지 도 35는 본 개시의 일 예에 따른 메모리 시스템에서 고정된 ECC 엔진을 이용하여 에러정정능력 이상으로 발생된 에러들을 정정하는 과정을 설명하기 위해 나타내 보인 도면들이다.
도 36은 도 1의 메모리 시스템에서 프로덕트 코드워드를 구성하는 데이터 저장영역에 대한 쓰기 명령에 응답하여 제2 에러정정모드에서의 쓰기 동작을 나타내 보인 플로챠트이다.
도 37은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 단계 462의 첫번째 로우 방향의 ECC 디코딩을 수행하는 단계를 보다 상세하게 나타내 보인 플로 챠트이다.
도 38은 도 37의 단계 462-2 내지 단계 462-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 39는 도 37의 단계 462-2 내지 단계 462-6이 수행된 후에 메모리 컨트롤러 내의 제2 버퍼에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면이다.
도 40은 도 37의 단계 462-7을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 41은 도 37의 단계 462-7이 수행된 후에 메모리 컨트롤러 내의 제2 버퍼에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면이다.
도 42는 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 컬럼 방향의 ECC 디코딩을 수행하는 단계 463을 보다 상세하게 나타내 보인 플로 챠트이다.
도 43 및 도 44는 도 42의 단계 463-2 내지 단계 463-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면들이다.
도 45는, 도 37의 단계 462-2 내지 단계 462-6이 수행된 후에 메모리 컨트롤러 내의 제2 버퍼에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면이다.
도 46은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 쓰기 데이터 병합을 수행하는 단계 464를 보다 상세하게 나타내 보인 플로 챠트이다.
도 47은 도 46의 단계 464-2 내지 단계 464-4를 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 48은 도 46의 단계 464-5가 수행되기 전의 데이터 관리부에 임시 저장된 데이터의 일 예를 나타내 보인 도면이다.
도 49는 도 46의 단계 464-5가 수행된 후에 데이터 관리부에 저장되는 데이터의 일 예를 나타내 보인 도면이다.
도 50은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 로우 방향의 ECC 인코딩을 수행하는 단계 466을 보다 상세하게 나타내 보인 플로 챠트이다.
도 51은 도 50의 단계 466-1 내지 단계 466-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 52는 도 36의 단계 프로덕트 코드워드에 대한 쓰기 동작에서 로우 방향의 ECC 인코딩을 수행하는 단계 466을 수행한 후의 제1 버퍼에 저장된 데이터의 일 예를 나타내 보인 도면이다.
도 53은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 컬럼 방향의 ECC 인코딩을 수행하는 단계 467을 보다 상세하게 나타내 보인 플로 챠트이다.
도 54는 도 53의 단계 467-2 내지 단계 467-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 55는 도 36의 단계 프로덕트 코드워드에 대한 쓰기 동작에서 컬럼 방향의 ECC 인코딩을 수행하는 단계 467을 수행한 후의 제1 버퍼에 저장된 데이터의 일 예를 나타내 보인 도면이다.
도 56은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 메모리 미디어로의 쓰기를 수행하는 단계 468을 보다 상세하게 나타내 보인 플로 챠트이다.
도 57은 도 56의 단계 468-2 내지 단계 468-5를 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다.
도 58은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 메모리 미디어로의 쓰기를 수행하는 단계 468을 수행한 후의 메모리 미디어에 저장된 데이터의 일 예를 나타내 보인 도면이다.
도 59는 도 1의 메모리 시스템에서 제2 에러정정모드로 수행되는 에러정정동작의 다른 예를 나타내 보인 플로챠트이다.
도 60 내지 도 62는 도 59의 에러정정동작의 일 예를 설명하기 위해 나타내 보인 도면들이다.
도 63은 도 1의 메모리 시스템에서 제2 에러정정모드로 수행되는 에러정정동작의 또 다른 예를 나타내 보인 플로챠트이다.
도 64 및 도 65는 도 63의 에러정정동작의 일 예를 설명하기 위해 나타내 보인 도면들이다.
본 출원의 예의 기재에서 "제1" 및 "제2"와 같은 기재는 부재를 구분하기 위한 것이며, 부재 자체를 한정하거나 특정한 순서를 의미하는 것으로 사용된 것은 아니다. 또한, 어느 부재의 "상"에 위치하거나 "상부", "하부", 또는 "측면"에 위치한다는 기재는 상대적인 위치 관계를 의미하는 것이지 그 부재에 직접 접촉하거나 또는 사이 계면에 다른 부재가 더 도입되는 특정한 경우를 한정하는 것은 아니다. 또한, 어느 한 구성 요소가 다른 구성 요소에 "연결되어 있다"거나 "접속되어 있다"의 기재는, 다른 구성 요소에 전기적 또는 기계적으로 직접 연결되어 있거나 또는 접속되어 있을 수 있으며, 또는, 중간에 다른 별도의 구성 요소들이 개재되어 연결 관계 또는 접속 관계를 구성할 수도 있다.
도 1은 본 개시의 일 예에 따른 메모리 시스템을 나타내 보인 도면이다. 그리고 도 2는 도 1의 메모리 시스템의 메모리 미디어를 구성하는 메모리 어레이의 일 예 및 프로덕트 코드(product code)의 예를 나타내 보인 도면이다. 도 1을 참조하면, 본 예에 따른 메모리 시스템(100)은, 메모리 미디어(200) 및 메모리 컨트롤러(300)를 포함하여 구성될 수 있다. 일 예에서 메모리 미디어(200)는 PCRAM(Phase Change Random Access Memory), MRAM(Magnetic Random Access Memory), ReRAM(Resistive Random Access Memory), 플래시 메모리 중 적어도 어느 하나를 포함할 수 있다. 메모리 미디어(200)는, 셀 어레이(210)를 포함할 수 있다.
도 2에 나타낸 바와 같이, 셀 어레이(210)는 복수개의 로우들(221) 및 복수개의 컬럼들(222)의 교차점에 단위셀이 배치되는 구조로 구성될 수 있다. 복수개의 로우들(211) 각각은 로우 어드레스(0, 1, …, M-1, M, …, M+i)를 갖는다. 복수개의 컬럼들(221) 각각은 컬럼 어드레스(0, 1, …, N-1, N, …, N+j)를 갖는다. M, N, i, j는 모두 자연수이다. 로우 어드레스(0, 1, …, M-1) 및 컬럼 어드레스(0, 1, …, N-1)을 갖는 단위셀들은 데이터영역(211) 내에 배치된다. 데이터영역(211) 내의 단위셀들 각각에는 데이터 비트값이 저장될 수 있다. 로우 어드레스(0, 1, …, M-1) 및 컬럼 어드레스(N, …, N+j)를 갖는 단위셀들은 로우 방향의 패리티영역(212) 내에 배치된다. 로우 방향의 패리티영역(212) 내의 단위셀들 각각에는 로우 방향의 패리티 비트값이 저장될 수 있다. 로우 어드레스(M, …, M+i) 및 컬럼 어드레스(0, 1, …, N+j)를 갖는 단위셀들은 컬럼 방향의 패리티영역(213) 내에 배치된다. 컬럼 방향의 패리티영역(213) 내의 단위셀들 각각에는 컬럼 방향의 패리티 비트값이 저장될 수 있다.
에러정정동작은, 심볼(symbol)을 대상으로 수행되는데, 심볼의 크기는 사용하는 알고리즘에 따라 다를 수 있다. 바이너리(binary) 단위의 코드, 예컨대 BCH(Bose-Chaudhuri-Hocquenghem) 코드를 이용한 ECC 알고리즘을 채용하는 경우, 에러정정동작의 대상인 데이터심볼들 및 패리티심볼들 각각은 하나의 바이너리 데이터 비트 및 바이너리 패리티 비트로 구성된다. 반면에 RS(Reed-Solomon) 코드를 이용한 ECC 알고리즘을 채용하는 경우, 에러정정동작의 대상인 데이터심볼들 및 패리티심볼들 각각은 복수개의 데이터 비트들 및 패리티 비트들로 구성된다.
본 예에서는 RS 코드를 이용한 ECC 알고리즘을 채용하는 경우를 예로 들어 설명하기로 한다. 이에 따라 하나의 데이터심볼 및 하나의 패리티심볼은, 각각 예컨대 4비트 또는 8비트와 같은 복수의 데이터 비트들 및 패리티 비트들로 구성된다. 따라서 에러정정동작의 대상이 되는 데이터심볼 및 패리티심볼이 갖는 로우 어드레스 및 컬럼 어드레스는, 데이터심볼 및 패리티심볼 각각을 구성하는 데이터 비트들 및 패리티 비트들의 로우 어드레스 및 컬럼 어드레스와 일치하지 않을 수 있다. 이하의 모든 실시예에서는, 메모리 미디어(200)의 셀 어레이(210) 내에 데이터 비트들 및 패리티 비트들 대신 데이터심볼들 및 패리티심볼들이 저장되어 있는 구성을 가정하기로 한다. 바이너리 단위의 코드를 이용한 ECC 알고리즘을 채용하더라도, 본 예에 따른 메모리 시스템이 동일하게 적용될 수 있다. 이 경우, 에러정정동작의 대상이 되는 데이터심볼 및 패리티심볼이 갖는 로우 어드레스 및 컬럼 어드레스는, 데이터심볼 및 패리티심볼 각각을 구성하는 데이터 비트 및 패리티 비트의 로우 어드레스 및 컬럼 어드레스와 일치한다.
일 예에서 메모리 미디어(200)의 셀 어레이(210) 내의 데이터에 대한 액세스(access)는 로우 어드레스를 공유하는 데이터 영역, 즉 페이지(page) 단위로 이루어질 수 있다. 따라서 데이터 액세스 과정에서 수행되는 에러정정동작 또한 로우 어드레스를 공유하는 데이터심볼들 및 패리티심볼들에 대해 수행된다. 에러가 발생된 데이터심볼들 개수가 에러정정능력을 넘는 경우, 에러정정동작을 수행하더라도 데이터심볼들의 에러는 정정되지 않는다. 본 예에 따른 메모리 시스템(100)의 경우, 에러가 발생된 데이터심볼들 개수가 에러정정능력을 넘더라도, 데이터심볼들의 에러가 정정될 수 있도록, 메모리 미디어(200)의 셀 어레이(210) 내에 컬럼 방향의 패리티 비트값이 저장될 수 있는 컬럼 방향의 패리티영역(213)이 할당된다.
본 개시의 일 예에 따른 메모리 시스템(100)에서의 에러정정동작은 제1 에러정정모드 및 제2 에러정정모드 중 어느 하나의 모드로 수행될 수 있다. 제1 에러정정모드에서의 에러정정동작은, 로우 어드레스를 공유하는 데이터심볼들 및 패리티심볼들 단위로 수행된다. 제2 에러정정모드에서의 에러정정동작은, 로우 어드레스를 공유하는 데이터심볼들 및 패리티심볼들 단위 외에 컬럼 어드레스를 공유하는 데이터심볼들 및 패리티심볼들 단위로도 수행된다. 제2 에러정정모드에서의 에러정정동작을 수행하기 위해서는, 먼저 로우 프로덕트 코드와 컬럼 프로덕트 코드로 구성되는 프로덕트 코드(product code)가 생성된다. 로우 프로덕트 코드는, 로우 어드레스를 공유하는 모든 데이터심볼(DS)들 및 모든 패리티심볼(PS)들로 구성된다. 반면에 컬럼 프로덕트 코드는, 컬럼 어드레스를 공유하는 일부 데이터심볼(DS)들 및 모든 패리티심볼(PS)들로 구성된다. 로우 프로덕트 코드를 구성하는 패리티심볼(PS)들은 패리티 비트값을 갖는다. 반면에 컬럼 프로덕트 코드를 구성하는 패리티심볼(PS)들은, 도면에서 점선으로 나타낸 바와 같이, 제2 에러정정모드에서의 에러정정동작에 의해 프로덕트 코드워드가 생성되기 전까지 패리티 비트값을 갖지 않는다.
다시 도 1을 참조하면, 메모리 컨트롤러(300)는 미디어측 물리층(media-side physical layer)(301)을 통해 메모리 미디어(200)와 접속될 수 있다. 메모리 컨트롤러(300)는 호스트측 물리층(host-side physical layer)(302)을 통해 호스트와도 접속될 수 있다. 메모리 컨트롤러(300)는 메모리 미디어(200)에 대한 액세스(access)를 제어한다. 일 예에서 메모리 컨트롤러(300)는, 호스트로부터의 쓰기(write) 명령에 응답하여 메모리 미디어(200)에 쓰기 데이터가 저장되도록 하는 쓰기 동작을 제어할 수 있다. 또한 메모리 컨트롤러(300)는, 호스트로부터의 읽기(read) 명령에 응답하여 메모리 미디어(200)로부터 읽기 데이터를 읽어 호스트로 전송되도록 하는 읽기 동작을 제어할 수 있다. 메모리 컨트롤러(300)는, 쓰기 동작 과정 및 읽기 동작 과정에서 발생될 수 있는 에러를 검출하고, 에러가 발생된 경우 에러가 정정되도록 하는 에러정정동작을 수행할 수 있다.
메모리 컨트롤러(300)는, 에러정정동작을 수행하는 ECC 엔진(310)을 포함한다. ECC 엔진(310)은 ECC 인코더(311) 및 ECC 디코더(312)를 포함할 수 있다. ECC 인코더(311)는, 메모리 컨트롤러(300)의 쓰기 제어 과정에서 쓰기 데이터에 대한 ECC 인코딩을 수행한다. 일 예에서, ECC 인코더(311)는 호스트로부터의 쓰기 데이터를 데이터심볼들의 형태로 입력받는다. ECC 인코더(311)는 입력된 데이터심볼들에 대한 ECC 인코딩을 수행하여 코드워드(codeword)를 출력한다. 코드워드는 데이터 심볼들 및 패리티 심볼들을 포함한다. ECC 인코더(311)로부터 출력되는 코드워드는 메모리 미디어(200)에 저장될 수 있다. ECC 디코더(312)는, 메모리 컨트롤러(300)의 읽기 제어 과정에서 ECC 디코딩을 수행한다. 일 예에서, ECC 디코더(312)는, 메모리 미디어(200)로부터의 읽기 데이터를 코드워드 형태로 입력받는다. ECC 디코더(312)는 입력된 코드워드에 대한 ECC 디코딩을 수행하여 에러가 정정된 데이터심볼들을 출력한다. ECC 디코더(312)로부터 출력되는 데이터심볼들은 호스트로 전송될 수 있다. ECC 디코더(312)에 의한 ECC 디코딩 과정에서의 에러 정정은 코드워드의 패리티심볼들을 이용하여 수행될 수 있다.
통상적으로, 에러정정능력 향상을 위해, ECC 엔진은, 재구성할 수 있는 에러정정동작(reconfigurable ECC scheme)을 수행할 수 있도록 설계될 수 있다. 재구성할 수 있는 에러정정동작(reconfigurable ECC scheme)은, 복수의 에러정정레벨들로 에러정정동작이 수행될 수 있는 것으로 정의할 수 있다. 즉, 재구성할 수 있는 에러정정동작을 수행할 수 있도록 설계된 경우, ECC 엔진은 에러 발생 정도에 따라 다른 에러정정레벨의 에러정정동작을 수행할 수 있다. 따라서 에러정정능력을 증대되지만, ECC 엔진을 구성하는 로직회로들이 차지하는 면적이 커지고, 로직회로의 복잡성도 증대된다. 본 개시에 따른 메모리 시스템(100)에서 ECC 엔진(310)을 구성하는 ECC 인코더(311) 및 ECC 디코더(312)는, 메모리 시스템(100)의 설계시에 재구성할 수 없는 에러정정동작(non-reconfigurable ECC scheme)을 수행할 수 있도록 구성된다. 재구성할 수 없는 에러정정동작(non-reconfigurable ECC scheme)은 고정된 단일의 에러정정레벨의 에러정정동작만을 수행할 수 있는 것으로 이해될 수 있다. 따라서 본 개시의 일 예에 따른 메모리 시스템(100)의 경우, ECC 엔진(310)을 구성하는 로직회로들이 간단한 구성을 가지며, 로직회로들이 차지하는 면적도 작다.
본 개시의 일 예에 따른 메모리 시스템(100)에서, ECC 엔진(310)이 재구성할 수 없는 에러정정동작(non-reconfigurable ECC scheme)을 수행할 수 있도록 구성됨에 따라, 메모리 컨트롤러(300)의 쓰기 동작의 제어 과정에서, ECC 인코더(311)에 의해 데이터심볼들에 부가되는 패리티심볼들의 개수는 고정되어 있다. 또한 ECC 디코더(312)에 의한 ECC 디코딩 과정에서의 에러 정정이 가능한 데이터심볼 개수도 고정되어 있다. 그럼에도 불구하고, 본 예에 따른 메모리 시스템(100)에서 메모리 컨트롤러(300)는, 이와 같은 ECC 엔진(310)을 이용하여 보다 엄격한 에러정정레벨의 에러정정동작을 수행할 수 있도록 구성된다. 메모리 컨트롤러(300)는, ECC 엔진(310)을 이용하여 정해진 에러정정레벨에 따른 에러정정동작을 수행하는 제1 에러정정모드의 제어동작을 수행할 수 있다. 또한 메모리 컨트롤러(300)는, 보다 엄격한 에러정정레벨이 요구되는 상황에서, 고정된 에러정정레벨을 갖는 ECC 엔진(310)을 이용하여 보다 높은 에러정정레벨의 에러정정동작을 수행하는 제2 에러정정모드의 제어동작도 수행할 수 있다.
메모리 컨트롤러(300)는, 데이터 관리부(data manager)(320)를 포함할 수 있다. 데이터 관리부(320)는 버퍼 메모리를 포함할 수 있다. 데이터 관리부(320)는, 호스트로부터의 쓰기 데이터를 임시로 저장하고, 또한 메모리 미디어(200)로부터의 읽기 데이터를 임시로 저장하는 버퍼메모리를 포함할 수 있다. 호스트로부터의 쓰기 데이터는 호스트측 물리층(302)을 통해 데이터 관리부(320)로 전송된다. 메모리 미디어(200)로부터의 읽기 데이터는 데이터 관리부(320) 및 호스트층 물리층(302)을 통해 호스트로 전송된다. 데이터 관리부(320)는, 제2 에러정정모드에서 쓰기 명령에 응답하여 프로덕트 코드워드에 쓰기 데이터심볼을 병합하는 기능을 수행할 수 있도록 구성된다.
메모리 컨트롤러(300)는, 제1 버퍼(331)와, 제2 버퍼(332)와, 제1 내지 제3 멀티플렉서(341-343)와, 그리고 제1 내지 제3 디멀티플렉서들(344-346)을 포함할 수 있다. 제1 버퍼(331)는, 제2 에러정정모드에서의 ECC 인코딩 과정에서 데이터를 임시로 저장하는 메모리로 기능한다. 제1 버퍼(331)는, 제2 에러정정모드에서의 ECC 인코딩 과정에서, 입력되는 제어신호에 따라서, 제1 디멀티플렉서(344)를 통해 전송되는 ECC 인코딩된 데이터를 입력받아 저장하거나, 또는 제1 버퍼(331) 내에 저장된 데이터를 출력하여 제3 멀티플렉서(343)로 입력시킨다. 제2 버퍼(332)는, 제2 에러정정모드에서의 ECC 디코딩 과정에서 데이터를 임시로 저장하는 메모리로 기능한다. 제2 버퍼(332)는, 제2 에러정정모드에서의 ECC 디코딩 과정에서, 입력되는 제어신호에 따라서, 제2 버퍼(332) 내에 저장된 데이터를 출력하여 제1 멀티플렉서(341)로 입력시키거나, 또는 제3 디멀티플렉서(346)를 통해 전송되는 ECC 디코딩된 데이터를 입력받아 저장한다. 제2 에러정정모드에서의 에러정정동작에 사용되기 위해, 제1 버퍼(331) 및 제2 버퍼(332)는 로우 방향으로의 데이터 접근(access) 및 컬럼 방향으로의 데이터 접근이 모두 가능하도록 구성될 수 있다.
제1 멀티플렉서(341)는, 입력되는 제어신호에 응답하여, 미디어측 물리층(301)을 통해 메모리 미디어(200)로부터 전송되는 데이터 및 제2 버퍼(332)에 저장된 데이터 중 어느 하나의 데이터를 선택적으로 출력한다. 제1 멀티플렉서(341)로부터 출력된 데이터는 ECC 디코더(312)로 입력된다. 제2 멀티플렉서(342)는, 입력되는 제어신호에 응답하여, 제2 디멀티플렉서(345)로부터 전송되는 데이터 및 데이터 관리부(320)로부터 전송되는 데이터 중 어느 하나의 데이터를 선택적으로 출력한다. 제3 멀티플렉서(343)는, 입력되는 제어신호에 응답하여, 제2 멀티플렉서(342)로부터 출력되는 데이터 및 제1 버퍼(331)로부터 전송되는 데이터 중 어느 하나의 데이터를 선택적으로 출력한다. 제3 멀티플렉서(343)로부터 출력되는 데이터는 ECC 인코더(311)로 입력된다.
제1 디멀티플렉서(344)는, 입력되는 제어신호에 응답하여, ECC 인코더(311)로부터 입력되는 데이터를 제1 버퍼(331) 또는 메모리 미디어(200)로 선택적으로 전송한다. 제2 디멀티플렉서(345)는, 입력되는 제어신호에 응답하여, 제3 디멀티플렉서(346)로부터 입력되는 데이터를 데이터 관리부(320) 또는 제2 멀티플렉서(342)로 선택적으로 전송한다. 제3 디멀티플렉서(346)는, 입력되는 제어신호에 응답하여, ECC 디코더(312)로부터 입력되는 데이터를 제2 디멀티플렉서(345) 또는 제2 버퍼(332)로 선택적으로 전송한다.
메모리 컨트롤러(300)는, 명령제어부(command controller)(350)와, 스케줄러(scheduler)(360)와, 그리고 PC 제어부(PC controller)(370)와, 마이크로컨트롤러(MCU)(380)와, 그리고 에러 로그(error log)(390)를 포함할 수 있다. 명령 제어부(350)는, 호스트측 물리층(302)을 통해 호스트로부터 전송되는 명령들을 입력받는다. 예컨대 명령 제어부(350)는 호스트측 물리층(302)을 통해 호스트로부터 읽기 명령(read command) 및 쓰기 명령(write command)을 입력받을 수 있다. 일 예에서 명령 제어부(350)는 입력되는 명령들을 순서대로 저장하는 명령 큐(command queue)를 포함할 수 있다. 명령 제어부(350)로 입력된 명령들은, 데이터 관리부(320) 및 스케줄러(360)로 전송될 수 있다. 명령 제어부(350)는 전송된 명령들의 처리 결과를 알려주는 신호를 데이터 관리부(320) 및 스케줄러(360)로부터 전송받을 수 있으며, 그 신호를 호스트측 물리층(302)을 통해 호스트로 전송시킬 수 있다. 에러정정동작과 관련하여, 제1 에러정정모드에서 제2 에러정정모드로 전환되면, 명령 제어부(350)는 제2 에러정정모드에서의 에러정정동작과 관련된 명령들을 스케줄러(360)로 전송시킨다.
스케줄러(360)는 명령 제어부(350)로부터 입력되는 명령들에 따라 메모리 컨트롤러(300)가 명령들을 처리하는 순서를 결정한다. 이를 위해 스케줄러(360)는 프로그램된 스케줄링 규칙을 가질 수 있다. 스케줄러(360)에 의해 처리 순서가 결정된 명령들은 미디어측 물리층(301)을 통해 메모리 미디어(200)로 전송되고, 또한 PC 제어부(370)로 전송될 수 있다. 스케줄러(360)는 전송된 명령들의 처리 결과를 알려주는 신호를 PC 제어부(370)로부터 전송받을 수 있다. 메모리 컨트롤러(300)가 제2 에러정정모드에서의 에러정정동작을 수행하는 동안, 스케줄러(360)는 제2 에러정정모드에서의 에러정정동작에 관련된 명령들 외의 다른 명령들의 처리를 지연시킬 수 있다.
PC 제어부(370)는, 스케줄러(360)로부터의 명령들에 응답하여 복수개의 제어신호들을 출력시킨다. 제1 에러정정모드에서의 ECC 인코딩이 수행되는 동안, PC 제어부(370)는 데이터 관리부(320)로부터의 쓰기 데이터가 ECC 인코더(311)로 입력되도록 하는 제어신호들을 각각 제2 멀티플렉서(342) 및 제3 멀티플렉서(343)에 입력시킨다. ECC 인코더(311)에 의해 ECC 인코딩이 수행된 후에는, ECC 인코더(311)로부터 출력되는 데이터가 미디어측 물리층(301)에 전송되도록 하는 제어신호를 제1 디멀티플렉서(344)에 입력시킨다. 이와 같은 PC 제어부(370)로부터의 제어신호들에 의해, 제1 에러정정모드에서의 ECC 인코딩이 수행되는 동안, 데이터 관리부(320)로부터의 쓰기 데이터는 변경 없이 ECC 인코더(311)로 입력된다. 그리고 ECC 인코더(311)에 의해 ECC 인코딩된 데이터는 변경 없이 미디어측 물리층(301)으로 전달된다.
제1 에러정정모드에서의 ECC 디코딩이 수행되는 동안, PC 제어부(370)는 미디어측 물리층(301)으로부터의 읽기 데이터가 ECC 디코더(312)로 입력되도록 하는 제어신호들을 제1 멀티플렉서(341)에 입력시킨다. ECC 디코더(312)에 의해 ECC 디코딩이 수행된 후에는, ECC 디코더(312)로부터 출력되는 데이터가 데이터 관리부(320)로 전송되도록 하는 제어신호를 각각 제2 디멀티플렉서(345) 및 제3 디멀티플렉서(346)에 입력시킨다. 이와 같은 PC 제어부(370)로부터의 제어신호들에 의해, 제1 에러정정모드에서의 ECC 디코딩이 수행되는 동안, 미디어측 물리층(301)으로부터의 읽기 데이터는 변경 없이 ECC 디코더(312)로 입력된다. 그리고 ECC 디코더(312)에 의해 ECC 디코딩된 데이터는 변경 없이 데이터 관리부(320)로 전달된다.
제2 에러정정모드에서의 ECC 인코딩 및 ECC 디코딩이 수행되는 동안, PC 제어부(370)는, 입력되는 2개의 데이터 중 하나의 데이터를 선택적으로 출력하도록 하는 제어신호를 제1 멀티플렉서(341), 제2 멀티플렉서(342), 및 제3 멀티플렉서(343)에 각각 입력시킨다. 또한 PC 제어부(370)는, 입력되는 1개의 데이터가 2개의 출력 라인들 중 하나의 출력 라인으로 선택적으로 출력되도록 하는 제어신호를 제1 디멀티플렉서(344), 제2 디멀티플렉서(345), 및 제3 디멀티플렉서(346)에 각각 입력시킨다. 또한 PC 제어부(370)는, 데이터 입력 동작을 위한 제어신호 및 데이터 출력 동작을 위한 제어신호를 제1 버퍼(331) 및 제2 버퍼(332)에 각각 입력시킨다. 경우에 따라서 PC 제어부(370)는, ECC 인코더(311) 및 ECC 디코더(312)에 각각 ECC 인코딩 및 ECC 디코딩 동작을 수행하지 않고 입력 데이터를 그대로 출력시키도록 동작시키는 인코딩 디스에이블 제어신호 및 디코딩 디스에이블 제어신호를 입력할 수 있다.
마이크로컨트롤러(380)는, 메모리 컨트롤러(300)에 의한 에러정정동작이 제1 에러정정모드로 및 제2 에러정정모드로 중 어느 모드로 수행되도록 할지를 결정한다. 이를 위해 마이크로컨트롤러(380)는 에러정정모드의 결정에 관한 알고리즘과, 제2 에러정정모드의 제어동작에 관한 알고리즘을 갖는 펌웨어(firmware)를 포함할 수 있다. 펌웨어는 마이크로컨트롤러(380) 내의 메모리에 저장되어 동작될 수 있다. 제1 에러정정모드로의 에러정정동작이 수행되는 경우, 마이크로컨트롤러(380)는 제1 에러정정모드로의 에러정정동작에 관련된 명령들을 명령 제어부(350)로 전송할 수 있다. 반면에 제2 에러정정모드로의 에러정정동작이 수행되는 경우, 마이크로컨트롤러(380)는 제2 에러정정모드로의 에러정정동작에 관련된 명령들을 명령 제어부(350)로 전송할 수 있다.
에러 로그(390)는 ECC 디코더(312)로부터 에러 관련 정보를 전달받아 저장한다. 일 예에서 에러 관련 정보에는, ECC 디코딩 결과 얻어지는 메모리 미디어(200)의 페이지별 에러 개수, 에러 위치, 수정 가능 여부 등이 포함될 수 있다. 마이크로컨트롤러(380)는, 에러정정모드 결정을 위해 에러 로그(390)에 액세스 요청을 할 수 있다. 이 액세스 요청에 의해, 에러 로그(390)는 마이크로컨트롤러(380)로 에러 로그(390)에 저장된 에러 관련 정보를 전송한다. 마이크로컨트롤러(380)는, 에러 로그(390)로부터 전송된 에러 관련 정보를 근거로 에러정정모드를 결정한다.
도 3은 도 1의 메모리 시스템(100)의 에러정정모드 전환 과정을 설명하기 위해 나타내 보인 플로 챠트이다. 도 3을 도 1과 함께 참조하면, 메모리 컨트롤러(300)의 마이크로컨트롤러(380)가 제2 에러정정모드로의 전환 명령을 발생시키기 전까지, 메모리 미디어(200)에 대한 읽기 및 쓰기 동작에서 제1 에러정정모드에서의 에러정정동작이 수행된다(단계 410). 이 경우 호스트로부터 전송되는 쓰기 데이터는 데이터심볼들 형태로 ECC 인코더(311)에 입력된다. ECC 인코더(311)는 ECC 인코딩을 수행하여 입력된 데이터심볼들에 패리티심볼들이 부가된 코드워드를 출력시킨다. ECC 인코더(311)로부터 출력된 코드워드는 메모리 미디어(200)에 쓰여진다. 메모리 미디어(200)로부터 전송되는 읽기 데이터는 코드워드 형태로 ECC 디코더(312)에 입력된다. ECC 디코더(312)는 ECC 디코딩을 수행하여 에러를 검출한다. 에러가 검출된 경우, ECC 디코더(312)는 에러를 정정한다. ECC 디코더(312)에 의해 에러가 정정된 데이터는 데이터심볼들 형태로 호스트로 전송된다. 이 과정에서 ECC 디코더(312)는 ECC 디코딩 결과에 따라 에러정정 관련 정보를 에러 로그(390)에 전송한다.
마이크로컨트롤러(380)가 에러 로그(390)에 접근한다(단계 420). 일 예에서 마이크로컨트롤러(380)는, 주기적으로 에러 로그(390)에 접근할 수 있도록 구성될 수 있다. 마이크로컨트롤러(380)는 에러 로그(390)에 저장된 에러정정 관련 정보들을 분석하여 에러정정모드의 전환이 필요한지의 여부를 판단한다. 이 판단은 에러정정 관련 정보들 중 어느 하나의 정보 또는 복수개의 정보들을 근거로 이루어질 수 있다. 본 예에서는 데이터심볼들의 에러 개수에 관한 정보를 근거로 에러정정모드의 전환 여부를 판단한다. 구체적으로 마이크로컨트롤러(380)는, L번째 로우 어드레스의 데이터심볼들의 에러 개수가 설정값 이상인지의 여부를 판단한다(단계 430). 설정값은, ECC 엔진(310)의 에러정정능력(ECC capability)보다 같거나, 또는 에러정정능력보다는 작지만 에러정정능력에 근접한 값으로 설정될 수 있다. 일 예에서 ECC 엔진(310)이 갖는 에러정정레벨에서 에러를 정정할 수 있는 데이터심볼들 수가 5개인 경우, 설정값은 5 또는 5보다 작지만 5에 근접한 값, 예컨대 4로 설정될 수 있다.
단계 430의 판단에서 L번째 로우 어드레스의 데이터심볼들의 에러 개수가 설정값보다 작은 경우, 즉 데이터 읽기 및 쓰기 과정에서 페일(fail)이 발생할 가능성이 낮은 경우에는 단계 410의 제1 에러정정모드에서의 에러정정동작이 유지된다. 단계 430의 판단에서 L번째 로우 어드레스의 데이터심볼들의 에러 개수가 설정값 이상인 경우, 즉 데이터 읽기 및 쓰기 과정에서 페일(fail)이 발생할 가능성이 높거나, 에러를 정정할 수 있는 개수보다 많은 수의 데이터심볼들에 에러가 발생한 경우에는 상대적으로 높은 에러정정레벨의 제2 에러정정모드로 에러정정동작이 수행되도록 한다(단계 440).
단계 440에 의해 제2 에러정정모드로 전환되면, 마이크로컨트롤러(380)는 제2 에러정정모드에서의 에러정정동작과 관련된 명령들을 명령 제어부(350)로 전송한다. 명령 제어부(350)는 읽기 동작 및 쓰기 동작 과정에서 수행되는 에러정정동작이 제2 에러정정모드로 수행될 수 있도록 관련된 명령들을 스케줄러(360)에 전송한다. 스케줄러(360)는 제2 에러정정모드에서의 에러정정동작이 우선적으로 수행되도록 명령들의 처리 순서를 정해서 PC 제어부(370)로 전송한다. PC 제어부(370)는 전송되는 명령들에 대해 필요한 제어신호들을 발생시켜 ECC 엔진(310)에 의한 에러정정동작이 제2 에러정정모드에서 수행되도록 한다.
도 4는 도 1의 메모리 시스템에서 제1 에러정정모드로 수행되는 에러정정동작을 설명하기 위해 복수개의 코드워드들의 일 예를 나타내 보인 도면이다. 본 예에서는 메모리 미디어(200) 내에 각각 로우 어드레스를 공유하는 4개의 코드워드들(CW1-CW4)이 저장되는 경우를 예로 들기로 한다. 그러나 이는 단지 하나의 예시일 뿐이며, 메모리 미디어(200) 내의 저장 용량이 허용하는 한 코드워드들의 개수에 제한은 없다. 도 4를 참조하면, 첫번째 코드워드(CW1)는 첫번째 로우를 구성하는 데이터심볼들(DS00, DS01, DS02, DS03)과 패리티심볼들(PS04, PS05)로 구성된다. 이 데이터심볼들(DS00-DS03)과 패리티심볼들(PS04, PS05)은 첫번째 로우 어드레스 "0"을 공유하며, 첫번째 페이지(page)를 구성할 수 있다. 두번째 코드워드(CW2)는 두번째 로우를 구성하는 데이터심볼들(DS10, DS11, DS12, DS13)과 패리티심볼들(PS14, PS15)로 구성된다. 이 데이터심볼들(DS10-DS13)과 패리티심볼들(PS14, PS15)은 두번째 로우 어드레스 "1"을 공유하며, 두번째 페이지를 구성할 수 있다. 세번째 코드워드(CW3)는 세번째 로우를 구성하는 데이터심볼들(DS20, DS21, DS22, DS23)과 패리티심볼들(PS24, PS25)로 구성된다. 이 데이터심볼들(DS20-DS23)과 패리티심볼들(PS24, PS25)은 세번째 로우 어드레스 "2"을 공유하며, 세번째 페이지를 구성할 수 있다. 네번째 코드워드(CW4)는 네번째 로우를 구성하는 데이터심볼들(DS30, DS31, DS32, DS33)과 패리티심볼들(PS34, PS35)로 구성된다. 이 데이터심볼들(DS30-DS33)과 패리티심볼들(PS34, PS35)은 두번째 로우 어드레스 "3"을 공유하며, 네번째 페이지를 구성할 수 있다.
코드워드를 구성하지는 않지만, 다섯번째 로우에는 패리티심볼들(PS40, PS41, PS42, PS43, PS44, PS45)이 배치된다. 또한 여섯번째 로우에는 패리티심볼들(PS50, PS51, PS52, PS53, PS54, PS55)이 배치된다. 다섯번째 로우 및 여섯번째 로우는 제2 에러정정모드에서의 에러정정동작에 사용되며, 제1 에러정정모드에서의 에러정정동작에서는 사용되지 않는다. 본 예에서는 코드워드들 각각이 4개의 데이터심볼들 및 2개의 패리티심볼들로 구성되지만, 이는 단지 하나의 예시일 뿐이며, 코드워드들 각각을 구성하는 데이터심볼들 및 패리티심볼들의 개수는 다양하게 설정될 수 있다.
코드워드들(CW1-CW4) 각각은, 쓰기 동작 과정에서 수행되는 제1 에러정정모드에서의 ECC 인코딩에 의해 생성된다. 또한 코드워드들(CW1-CW4) 각각은, 읽기 동작 과정에서 수행되는 제1 에러정정모드에서의 ECC 디코딩에 의해 에러가 정정될 수 있다. 쓰기 동작 과정에서 수행되는 제1 에러정정모드에서의 ECC 인코딩은, 호스트로부터 전송되는 쓰기 데이터심볼들에 대해 수행된다. 이 쓰기 데이터심볼들은 하나의 로우 어드레스를 공유한다. ECC 인코딩에 의해 쓰기 데이터심볼들에 패리티심볼들이 더해진 코드워드가 생성된다. ECC 인코딩에 의해 생성된 코드워드는 메모리 미디어(200)에 저장된다. 쓰기 동작 과정에서 수행되는 ECC 디코딩은, 로우 어드레스를 공유하는 코드워드에 대해 수행된다. ECC 디코딩 과정에서 패리티심볼들을 이용하여 데이터심볼들의 에러를 정정할 수 있다. 에러가 정정된 데이터심볼들은 호스트로 전송될 수 있다.
도면에 나타낸 바와 같이, 첫번째 코드워드(CW1)와, 두번째 코드워드(CW2)와, 네번째 코드워드(CW4)가 에러가 발생된 데이터심볼을 포함하는 경우에서의 제1 에러정정모드에서의 에러정정동작을 예로 들기로 한다. 구체적으로 첫번째 코드워드(CW1)의 데이터심볼들(DS00-DS03)과 두번째 코드워드(CW2)의 데이터심볼들(DS10-DS13)은 각각 1개의 데이터심볼(DS01, DS11)에서 에러가 발생되고, 네번째 코드워드(CW4)의 데이터심볼들(DS30-DS33)은 3개의 데이터심볼들(DS30, DS31, DS32)에서 에러가 발생되는 경우를 예로 들기로 한다. 그리고 ECC 엔진(310)의 에러정정능력은 3개이고, 도 3의 단계 430에서의 설정값은 2인 경우를 예로 들기로 한다. 로우 어드레스 "0"을 갖는 데이터심볼들(DS00-DS03)에 대한 읽기 명령이 발생되는 경우, 메모리 미디어(200)에 저장되어 있는 첫번째 코드워드(CW1)를 구성하는 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)이 메모리 컨트롤러(300)의 미디어측 물리층(301) 및 제1 멀티플렉서(341)를 거쳐 ECC 디코더(312)에 입력된다. ECC 디코더(312)는 입력되는 첫번째 코드워드(CW1)에 대한 ECC 디코딩을 수행한다. ECC 디코딩 과정에서, 패리티심볼들(PS04, PS05)을 이용하여 데이터심볼들(DS00-DS03) 중 두번째 데이터심볼(DS01)의 에러를 검출한다. 에러가 검출된 데이터심볼의 개수는 에러정정이 가능한 1개이므로, ECC 디코더(312)는 에러를 정정한 후에 출력시킨다. ECC 디코더(312)로부터 출력된 데이터심볼들(DS00-DS03)은, 제3 멀티플렉서(346), 제2 멀티플렉서(345), 데이터 관리부(320), 및 호스트측 물리층(302)을 거쳐 호스트로 전송된다. 로우 어드레스 "1"을 갖는 데이터심볼들(DS10-DS13)에 대한 읽기 명령이 발생되는 경우에도 로우 어드레스 "0"을 갖는 데이터심볼들(DS00-DS03)에 대한 읽기 명령이 발생되는 경우와 동일하게 제1 에러정정모드에서의 에러정정동작이 적용되며, 이 에러정정동작에 의해 데이터심볼(DS11)의 에러가 정정될 수 있다.
반면에 로우 어드레스 "3"을 갖는 데이터심볼들(DS30-DS33)에 대한 읽기 명령이 발생되는 경우, 네번째 코드워드(CW4)를 구성하는 데이터심볼들(DS30-DS33) 및 패리티심볼들(PS34, PS35)은, 메모리 미디어(200)로부터 메모리 컨트롤러(300)의 미디어측 물리층(301) 및 제1 멀티플렉서(341)를 거쳐 ECC 디코더(312)에 입력된다. ECC 디코더(312)는 입력되는 네번째 코드워드(CW4)에 대한 ECC 디코딩을 수행한다. ECC 디코딩 과정에서, 패리티심볼들(PS34, PS35)을 이용하여 데이터심볼들(DS30, DS31, DS32)의 에러를 검출한다. 그러나 데이터심볼들의 에러 개수가 에러정정이 가능한 2개를 초과하므로, 데이터심볼들(DS30, DS31, DS32)의 에러는 정정될 수 없다.
위에서 설명한 첫번째 데이터심볼들(DS00-DS03), 두번째 데이터심볼들(DS10-DS13), 및 네번째 데이터심볼들(DS30-DS33)에 대한 읽기 동작 과정에서 ECC 디코더(312)는 에러 로그(390)로 에러정정 관련 정보를 전송한다. 첫번째 데이터심볼들(DS00-DS03) 및 두번째 데이터심볼들(DS10-DS13)에 대한 ECC 디코딩 과정에서 ECC 디코더(312)로부터 전송되는 에러정정 관련 정보에는 첫번째 데이터심볼들(DS00-DS03) 및 두번째 데이터심볼들(DS10-DS13)에서 각각 에러가 발생된 데이터심볼의 개수와, 에러가 발생된 데이터심볼의 위치가 포함될 수 있다. 도 3의 단계 420을 참조하여 설명한 바와 같이, 마이크로컨트롤러(380)는, 이와 같은 에러 로그(390)의 에러정정 관련 정보에 접근한다. 첫번째 데이터심볼들(DS00-DS03) 및 두번째 데이터심볼들(DS10-DS13)의 경우, 데이터심볼들의 에러 개수인 "1"이 설정값인 "2"보다 작으므로, 마이크로컨트롤러(380)는 에러정정모드를 변경하지 않고 제1 에러정정모드를 유지한다.
네번째 데이터심볼들(DS30-DS33)에 대한 ECC 디코딩 과정에서 ECC 디코더(312)로부터 전송되는 에러정정 관련 정보에는 네번째 데이터심볼들(DS30-DS33)에서 에러가 발생된 데이터심볼들의 개수와, 에러가 발생된 데이터심볼들 각각의 위치가 포함될 수 있다. 도 3의 단계 420을 참조하여 설명한 바와 같이, 마이크로컨트롤러(380)는, 이와 같은 에러 로그(390)의 에러정정 관련 정보에 접근한다. 네번째 데이터심볼들(DS30-DS33)의 경우, 데이터심볼들의 에러 개수인 "3"이 설정값인 "2" 이상이므로, 마이크로컨트롤러(380)는, 네번째 데이터심볼들(DS30-DS33)을 처리하는 과정에서 적용되는 에러정정모드를 제1 에러정정모드에서 제2 에러정정모드로 전환한다. 제2 에러정정모드로 전환되면, 마이크로컨트롤러(380)는 제2 에러정정모드의 에러정정동작을 수행하는데 필요한 명령들을 명령 제어부(350)로 전송한다.
도 5는 도 1의 메모리 시스템에서 제2 에러정정모드로 수행되는 에러정정동작을 나타내 보인 플로챠트이다. 도 5를 참조하면, 마이크로컨트롤러(380)에 의해 L번째 페이지, 즉 L번째 로우의 데이터에 대한 에러정정모드가 제1 에러정정모드에서 제2 에러정정모드로 전환되면, L번째 로우의 데이터를 포함하는 프로덕트 코드(product code)를 생성한다(단계 441). 프로덕트 코드는, 로우 프로덕트 코드들(row product codes)과 컬럼 프로덕트 코드들(column product codes)로 구분하여 표현될 수 있다. 본 예에서 "로우" 및 "로우 방향"은 "로우 어드레스를 공유"하는 의미로 정의할 수 있으며, "컬럼" 및 "컬럼 방향"은 "컬럼 어드레스를 공유"하는 의미로 정의할 수 있다. 이에 따라 프로덕트 코드를 구성하는 데이터심볼들 및 패리티심볼들은, 각각 로우 프로덕트 코드에 포함되는 동시에 컬럼 프로덕트 코드에도 포함될 수 있다.
복수개, 예컨대 (M+i)개의 로우 프로덕트 코드들 각각은, 제1 내지 M번째 로우 어드레스들중 어느 하나를 공유하는 데이터심볼들 및 패리티심볼들을 포함하거나 (M+1)번째 내지 (M+i)번째의 로우 어드레스들중 어느 하나를 공유하는 패리티심볼들 만을 포함하도록 구성될 수 있다. 제1 내지 M번째 로우 어드레스들 내에는 L번째 로우 어드레스가 포함된다. (M+1)번째 내지 (M+i)번째의 로우 어드레스들중 어느 하나를 공유하는 패리티심볼들은, 컬럼 방향의 ECC 인코딩에 의해 데이터 비트값들이 결정된다. 따라서 컬럼 방향의 ECC 인코딩이 수행되기 전까지, i개의 로우 어드레스들 각각을 공유하는 패리티심볼들은, 어떤 데이터 비트값들도 갖지 않는다. 복수개, 예컨대 제1 내지 (N+j)번째의 컬럼 프로덕트 코드들의 각각은, 제1 내지 N번째의 컬럼 어드레스들중 어느 하나를 공유하는 데이터심볼들 및 패리티심볼들을 포함하거나, (N+1)번째 내지 (M+j)번째의 컬럼 어드레스들중 어느 하나를 공유하는 패리티심볼들로 구성될 수 있다. 따라서 프로덕트 코드 내의 데이터심볼들의 각각은 로우 프로덕트 코드들중 어느 하나에도 포함될 뿐더라, 컬럼 프로덕트 코드들중 어느 하나에도 포함된다. 일 예에서 로우 어드레스 "M-1" 및 컬럼 어드레스 "N-1"로 지정되는 데이터심볼은, 로우 어드레스 "M-1"을 갖는 로우 프로덕트 코드에 포함되는 동시에, 컬럼 어드레스 "N-1"을 갖는 컬럼 프로덕트 코드에도 포함된다.
프로덕트 코드를 생성한 후, 프로덕트 코드를 구성하는 로우 프로덕트 코드들 중 데이터심볼을 포함하는 제1 내지 M번째의 로우 프로덕트 코드들 각각에 대한 로우 방향의 ECC 인코딩을 수행하여 로우 프로덕트 코드워드들을 생성한다(단계 442). (M+1)번째 내지 (M+i)번째의 로우 프로덕트 코드들 각각을 구성하는 패리티심볼들은 어떤 데이터 비트값들도 갖지 않는 상태이므로, 단계 442에서 (M+1)번째 내지 (M+i)번째의 로우 프로덕트 코드들에 대해서는 ECC 인코딩이 수행되지 않는다. 다음에 프로덕트 코드를 구성하는 컬럼 프로덕트 코드들에 대한 컬럼 방향의 ECC 인코딩을 수행하여 컬럼 프로덕트 코드워드들을 생성한다(단계 443). 단계 443에서의 컬럼 방향의 ECC 인코딩에 의해, (M+1)번째 내지 (M+i)번째의 로우 프로덕트 코드들 각각을 구성하는 패리티심볼들의 데이터 비트값들이 결정된다. 다음에 단계 442의 로우 방향의 ECC 인코딩 및 단계 443의 컬럼 방향의 ECC 인코딩에 의해 만들어진 프로덕트 코드워드를 메모리 미디어(도 1의 200)에 쓴다(단계 444).
도 6은 도 1의 메모리 시스템에서 제2 에러정정모드에서의 에러정정동작을 위해 생성된 프로덕트 코드의 일 예를 나타내 보인 도면이다. 본 예에서 프로덕트 코드(PC)는 여섯개의 로우 프로덕트 코드(PCR)와 여섯개의 컬럼 프로덕트 코드(PCC)로 구성되는 경우를 예로 들기로 한다. 다만 도면에서 패리티 비트값을 갖지 않는 다섯번째 및 여섯번째 로우 프로덕트 코드들은 생략되었다. 도 6을 참조하면, 메모리 미디어(200) 내에 저장된 데이터심볼들 중, 로우 어드레스 "1"을 갖는 4개의 데이터심볼들(DS10-DS13)이 모두 에러가 발생된 경우, 에러가 발생된 데이터심볼들의 개수가 ECC 엔진(310)이 갖는 에러정정능력(예컨대 3)을 초과하므로, 제1 에러정정모드에서 에러정정동작을 수행하더라도 에러를 정정할 수 없다. 특히 로우 어드레스 "1"을 갖는 데이터심볼들(DS10-DS13)에 대해 제1 에러정정모드에서의 에러정정동작을 수행하는 과정에서, 도 3의 단계 430의 판단 결과 로우 어드레스 "1"을 갖는 데이터심볼들(DS10-DS13)의 에러 개수인 "4"가 설정값인 "2" 이상이므로, 로우 어드레스 "1"을 갖는 데이터심볼들(DS10-DS13)에 대해 에러정정모드는 제1 에러정정모드에서 제2 에러정정모드로 전환된다. 제2 에러정정모드로 전환되면, 도 5의 단계 441에 따라 프로덕트 코드(PC)를 생성한다. 생성된 프로덕트 코드(PC)에 대해 제2 에러정정모드에서의 에러정정동작을 수행함으로써, 에러가 발생된 4개의 데이터심볼들(DS10-DS13) 모두에 대해 에러가 정정되도록 할 수 있는데 이에 대해서는 아래에서 상세하게 설명하기로 한다.
구체적으로, 프로덕트 코드(PC)는, 복수개, 예컨대 4개의 로우 프로덕트 코드들(PCR1-PCR4)과, 그리고 패리티심볼들로만 구성되는 2개의 로우 프로덕트 코드들(미도시)을 포함한다. 또한 프로덕트 코드(PC)는, 복수개, 예컨대 6개의 컬럼 프로덕트 코드들(PCC1-PCC6)을 포함한다. 4개의 로우 프로덕트 코드(PCR1-PCR4)들 내에는 설정값 이상의 에러 개수를 갖는 데이터심볼들(DS10-DS13)을 포함하는 두번째 로우프로덕트 코드(PCR2)가 포함된다. 로우 프로덕트 코드들(PCR1-PCR4)은 상호 인접된 로우 어드레스를 갖는다. 첫번째 내지 네번째 로우 프로덕트 코드들(PCR1-PCR4) 각각은 데이터심볼 및 패리티심볼을 모두 포함한다. 첫번째 로우 프로덕트 코드(PCR1)는, 로우 어드레스 "0"을 공유하는 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)로 구성된다. 두번째 로우 프로덕트 코드(PCR2)는, 로우 어드레스 "1"을 공유하는 데이터심볼들(DS10-DS13) 및 패리티심볼들(PS14, PS15)로 구성된다. 세번째 로우 프로덕트 코드(PCR3)는, 로우 어드레스 "2"을 공유하는 데이터심볼들(DS20-DS23) 및 패리티심볼들(PS24, PS25)로 구성된다. 네번째 로우 프로덕트 코드(PCR4)는, 로우 어드레스 "3"을 공유하는 데이터심볼들(DS30-DS33) 및 패리티심볼들(PS34, PS35)로 구성된다.
첫번째 컬럼 프로덕트 코드(PCC1)는, 컬럼 어드레스 "0"을 공유하는 데이터심볼들(DS00-DS30)과, 도면에 나타내지는 않았지만, 패리티 비트값을 갖지 않는 패리티심볼들로 구성된다. 두번째 컬럼 프로덕트 코드(PCC2)는, 컬럼 어드레스 "1"을 공유하는 데이터심볼들(DS01-DS31)과, 도면에 나타내지는 않았지만, 패리티 비트값을 갖지 않는 패리티심볼들로 구성된다. 세번째 컬럼 프로덕트 코드(PCC3)는, 컬럼 어드레스 "2"을 공유하는 데이터심볼들(DS02-DS32)과, 도면에 나타내지는 않았지만, 패리티 비트값을 갖지 않는 패리티심볼들로 구성된다. 네번째 컬럼 프로덕트 코드(PCC4)는, 컬럼 어드레스 "3"을 공유하는 데이터심볼들(DS03-DS33)과, 도면에 나타내지는 않았지만, 패리티 비트값을 갖지 않는 패리티심볼들로 구성된다. 다섯번째 컬럼 프로덕트 코드(PCC5)는, 컬럼 어드레스 "4"를 공유하는 패리티심볼들(PS04-PS34)과, 도면에 나타내지는 않았지만, 패리티 비트값을 갖지 않는 패리티심볼들로 구성된다. 여섯번째 컬럼 프로덕트 코드(PCC6)는, 컬럼 어드레스 "5"를 공유하는 패리티심볼들(PS05-PS35)과, 도면에 나타내지는 않았지만, 패리티 비트값을 갖지 않는 패리티심볼들로 구성된다.
도 7은 도 5의 제2 에러정정모드에서의 에러정정동작 중 단계 442에서 로우 프로덕트 코드워드들을 생성하는 단계를 보다 상세하게 나타내 보인 플로 챠트이다. 도 8은 도 7의 단계 442-2 내지 단계 442-5를 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 그리고 도 9는 도 7의 로우 프로덕트 코드워드들을 생성하는 단계들이 수행된 후에 메모리 컨트롤러(330) 내의 제1 버퍼(331)에 저장된 로우 프로덕트 코드워드들의 일 예를 나타내 보인 도면이다. 도 8에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 도 7 내지 도 9를 참조하면, 에러정정모드가 제1 에러정정모드에서 제2 에러정정모드로 전환됨에 따라 프로덕트 코드(도 6의 PC)가 생성되면, 카운터값을 "0"으로 리셋시킨다(단계 442-1). 일 예에서 카운터는 메모리 컨트롤러(300)의 PC 제어부(370) 내에 구비될 수 있다. 다른 예에서 카운터는 메모리 컨트롤러(300)의 스케줄러(360) 내에 구비될 수도 있다. 프로덕트 코드(도 6의 PC)에 포함되는 로우 프로덕트 코드들 중 (카운터값+1)번째, 즉 첫번째 로우 프로덕트 코드(도 6의 PCR1)를 메모리 미디어(200)로부터 읽는다(단계 442-2). 도 8에 나타낸 바와 같이, 메모리 미디어(200)로부터 읽은 첫번째 로우 프로덕트 코드(도 6의 PCR1)는, 미디어측 물리층(301) 및 제1 멀티플렉서(341)를 거쳐 ECC 디코더(312)에 입력된다. ECC 디코더(312)는, 입력된 첫번째 로우 프로덕트 코드(도 6의 PCR1)에 대한 로우 방향의 ECC 디코딩을 수행한다(단계 442-3). 로우 방향의 ECC 디코딩된 첫번째 로우의 데이터심볼들(DS00-DS03)은 제3 디멀티플렉서(346), 제2 디멀티플렉서(345), 제2 멀티플렉서(342), 및 제3 멀티플렉서(343)를 거쳐 ECC 인코더(311)에 입력된다.
ECC 인코더(311)는, 입력된 첫번째 로우의 데이터심볼들(DS00-DS03)에 대한 로우 방향의 ECC 인코딩을 수행하여 (카운터값+1)번째, 즉 첫번째 로우 프로덕트 코드워드(PCWR1)를 생성한다(단계 442-4). 단계 442-4의 ECC 인코딩에 의해, 생성된 첫번째 로우 프로덕트 코드워드(PCWR1)는 제1 디멀티플렉서(344)를 거쳐 제1 버퍼(331)에 저장된다(단계 442-5). 본 과정까지 수행된 후에는, 도 9에 나타낸 바와 같이, 제1 버퍼(331) 내에 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)로 구성되는 첫번째 로우 프로덕트 코드워드(PCWR1)가 저장된다. 다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 442-6). 이에 따라 카운터값은 "0"에서 "1"로 변경된다. 다음에 카운터값이 "M"과 같은지의 여부를 판단한다(단계 442-7). "M"은 프로덕트 코드(도 6의 PC)의 로우 프로덕트 코드들 중 데이터심볼을 포함하는 로우 프로덕트 코드들의 개수로 정의된다. 따라서 "M"은 "4"로 설정된다. 단계 442-7의 판단에서, 카운터값이 프로덕트 코드(도 6의 PC)의 로우 프로덕트 코드들 중 데이터심볼을 포함하는 로우 프로덕트 코드들의 개수(M)인 "4"와 같지 않으므로, 단계 442-2부터의 과정을 다시 수행한다. 카운터값이 "1"로 증가되었으므로, 두번째 로우 프로덕트 코드(PCR2)에 대해 단계 442-2 내지 단계 442-7을 수행한다. 마찬가지로 세번째 로우 프로덕트 코드(PCR3), 및 네번째 로우 프로덕트 코드(PCR4) 각각에 대해서도 단계 442-2 내지 단계 442-7가 수행된다.
프로덕트 코드(도 6의 PC)를 구성하는 모든 로우 프로덕트 코드들 중 데이터심볼을 포함하는 로우 프로덕트 코드들(PCR1-PCR4) 모두에 대해 단계 442-2 내지 단계 442-5를 반복하여 수행한 후에는, 도 9에 나타낸 바와 같이, 제1 버퍼(331) 내에는 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)을 갖는 첫번째 로우 프로덕트 코드워드(PCWR1)와, 데이터심볼들(DS10-DS13) 및 패리티심볼들(PS14, PS15)을 갖는 두번째 로우 프로덕트 코드워드(PCWR2)와, 데이터심볼들(DS20-DS23) 및 패리티심볼들(PS24, PS25)을 갖는 세번째 로우 프로덕트 코드워드(PCWR3)와, 그리고 데이터심볼들(DS30-DS33) 및 패리티심볼들(PS34, PS35)을 갖는 네번째 로우 프로덕트 코드워드(PCWR4)가 저장된다.
도 10은 도 5의 제2 에러정정모드에서의 에러정정동작 중 단계 443에서 컬럼 프로덕트 코드워드들을 생성하는 단계를 보다 상세하게 나타내 보인 플로 챠트이다. 도 11은 도 10의 단계 443-2 내지 단계 443-4를 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 그리고 도 12는 도 10의 컬럼 프로덕트 코드워드들을 생성하는 단계들이 수행된 후에 메모리 컨트롤러(330) 내의 제1 버퍼(331)에 저장된 로우 프로덕트 코드워드들 및 컬럼 프로덕트 코드워드들의 일 예를 나타내 보인 도면이다. 도 11에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 도 9 내지 도 12를 참조하면, 도 5의 단계 442가 모두 수행되면, 카운터값을 "0"으로 리셋시킨다(단계 443-1). 제1 버퍼(331)에 저장된 (카운터값+1)번째, 즉 첫번째 컬럼의 데이터심볼들(DS00-DS30)을 읽는다(단계 443-2). 도 11에 나타낸 바와 같이, 제1 버퍼(331)로부터 읽은 첫번째 컬럼 프로덕트 코드(PCC1), 즉 첫번째 컬럼의 데이터심볼들(DS00-DS30)은 제3 멀티플렉서(343)를 통해 ECC 인코더(311)에 입력된다. ECC 인코더(311)는, 입력된 첫번째 컬럼의 데이터심볼들(DS00-DS30)에 대한 컬럼 방향의 ECC 인코딩을 수행하고, ECC 인코딩된 데이터를 첫번째 컬럼 프로덕트 코드워드(PCWC1)로서 출력한다(단계 443-3). ECC 인코더(311)로부터 출력되는 첫번째 컬럼 프로덕트 코드워드(PCWC1)는 제1 디멀티플렉서(344)를 거쳐 제1 버퍼(331)에 저장된다(단계 443-4).
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 443-5). 이에 따라 카운터값은 "0"에서 "1"로 변경된다. 다음에 카운터값이 "N+j"과 같은지의 여부를 판단한다(단계 443-6). "N+j"은 프로덕트 코드(도 6의 PC)를 구성하는 모든 컬럼 프로덕트 코드들의 개수로 정의된다. 따라서 "N+j"은 "6"으로 설정된다. 단계 443-6의 판단에서, 카운터값이 프로덕트 코드(PC)를 구성하는 모든 컬럼 프로덕트 코드들의 개수(N+j)인 "6"과 같지 않으므로, 단계 443-2부터의 과정을 다시 수행한다. 카운터값이 "1"로 증가되었으므로, 두번째 컬럼 프로덕트 코드(PCC2)에 대해 단계 443-2 내지 단계 443-5를 수행한다. 마찬가지로 세번째 컬럼 프로덕트 코드(PCC3), 네번째 컬럼 프로덕트 코드(PCC4), 다섯번째 컬럼 프로덕트 코드(PCC5), 및 여섯번째 컬럼 프로덕트 코드(PCC6) 각각에 대해서도 단계 443-2 내지 단계 443-5가 반복적으로 수행된다.
프로덕트 코드를 구성하는 모든 컬럼 프로덕트 코드들(도 6의 PCC1-PCC6)에 대해 단계 442-2 내지 단계 442-5를 반복하여 수행한 후에는, 도 12에 나타낸 바와 같이, 제1 버퍼(331) 내에는 첫번째 내지 여섯번째 로우 프로덕트 코드워드들(PCWR1-PCWR6) 및 첫번째 내지 여섯번째 컬럼 프로덕트 코드워드들(PCWC1-PCWC6)이 저장된다. 첫번째 내지 네번째 로우 프로덕트 코드들(PCWR1-PCWR4)은, 도 7의 단계 442-4에 따른 첫번째 내지 네번째 로우 프로덕트 코드(도 6의 PCR1-PCR4)에 대한 로우 방향의 ECC 인코딩에 의해 생성된다. 그리고 다섯번째 및 여섯번째 로우 프로덕트 코드워드들(PCWR5, PCWR6)과, 첫번째 내지 여섯번째 컬럼 프로덕트 코드워드들(PCWC1-PCWC6)은, 도 10의 단계 443-3에 따른 첫번째 내지 여섯번째 컬럼 프로덕트 코드(도 6의 PCC1-PCC6)에 대한 컬럼 방향의 ECC 인코딩에 의해 생성된다.
다섯번째 로우 프로덕트 코드워드(PCWR5)는, 로우 어드레스 "4"를 공유하는 패리티심볼들(PS40-PS45)로 구성된다. 여섯번째 로우 프로덕트 코드워드(PCWR6)는, 로우 어드레스 "5"를 공유하는 패리티심볼들(PS50-PS55)로 구성된다. 첫번째 컬럼 프로덕트 코드워드(PCWC1)는 컬럼 어드레스 "0"을 공유하는 데이터심볼들(DS00-DS30) 및 패리티심볼들(PS40, PS50)로 구성된다. 두번째 컬럼 프로덕트 코드워드(PCWC2)는 컬럼 어드레스 "1"을 공유하는 데이터심볼들(DS01-DS31) 및 패리티심볼들(PS41, PS51)로 구성된다. 세번째 컬럼 프로덕트 코드워드(PCWC3)는 컬럼 어드레스 "2"를 공유하는 데이터심볼들(DS02-DS32) 및 패리티심볼들(PS42, PS52)로 구성된다. 네번째 컬럼 프로덕트 코드워드(PCWC4)는 컬럼 어드레스 "3"을 공유하는 데이터심볼들(DS03-DS30) 및 패리티심볼들(PS43, PS53)로 구성된다. 다섯번째 컬럼 프로덕트 코드워드(PCWC5)는 컬럼 어드레스 "4"를 공유하는 패리티심볼들(PS04-PS54)로 구성된다. 여섯번째 컬럼 프로덕트 코드워드(PCWC6)는 컬럼 어드레스 "5"를 공유하는 패리티심볼들(PS05-PS55)로 구성된다.
도 13은 도 5의 제2 에러정정모드에서의 에러정정동작 중 단계 444에서 프로덕트 코드워드를 메모리 미디어에 쓰는 단계를 보다 상세하게 나타내 보인 플로 챠트이다. 도 14는 도 13의 단계 444-2 내지 단계 444-3을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 그리고 도 15는 도 13의 프로덕트 코드워드를 메모리 미디어에 쓰는 단계가 수행된 후에 메모리 미디어에 저장된 로우 프로덕트 코드워드들 및 컬럼 프로덕트 코드워드들의 일 예를 나타내 보인 도면이다. 도 14에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 도 13 내지 도 15를 참조하면, 카운터값을 "0"으로 리셋시킨다(단계 444-1). 제1 버퍼(331)에 저장된 (카운터값+1)번째, 즉 첫번째 로우 프로덕트 코드워드(PCWR1)를 읽는다(단계 444-2). 제1 버퍼(331)로부터 읽은 첫번째 로우 프로덕트 코드워드(PCWR1), 즉 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)을 메모리 미디어(200)의 (카운터값+1)번째, 즉 첫번째 로우 어드레스에 쓴다(단계 444-3). 구체적으로 도 14에 나타낸 바와 같이, 제1 버퍼(331)로부터 출력되는 첫번째 로우 프로덕트 코드워드(PCWR1), 즉 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)은 제3 멀티플렉서(343)를 통해 ECC 인코더(311)에 입력된다. PC 제어부(370)는, ECC 인코딩 동작을 디스에이블시키고, 입력되는 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)을 통과시키는 제어신호를 ECC 인코더(311)에 인가한다. ECC 인코더(311)로부터 통과된 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)은 제1 디멀티플렉서(344) 및 미디어측 물리층(301)을 거쳐 메모리 미디어(200)에 쓰여진다.
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 444-4). 이에 따라 카운터값은 "0"에서 "1"로 변경된다. 다음에 카운터값이 "M+i"와 같은지의 여부를 판단한다(단계 444-5). "M+i"은 모든 로우 프로덕트 코드워드들의 개수로 정의된다. 따라서 "M+i"는 "6"으로 설정된다. 단계 444-5의 판단에서, 카운터값이 모든 로우 프로덕트 코드워드들의 개수(M+i)인 "6"과 같지 않으므로, 단계 444-2부터의 과정을 다시 수행한다. 즉 두번째 로우 프로덕트 코드워드(PCWR2)에 대해 단계 444-2 내지 단계 444-5를 반복적으로 수행한다. 마찬가지로 세번째 로우 프로덕트 코드워드(PCWR3), 네번째 로우 프로덕트 코드워드(PCWR4), 다섯번째 로우 프로덕트 코드워드(PCWR5), 및 여섯번째 로우 프로덕트 코드워드(PCWR6) 각각에 대해서도 단계 444-2 내지 단계 444-5가 반복적으로 수행된다. 프로덕트 코드워드를 구성하는 모든 로우 프로덕트 코드워드들(PCWR1-PCWR6) 각각에 대해 단계 442-2 내지 단계 444-5를 반복하여 수행한 후에는, 도 15에 나타낸 바와 같이, 메모리 미디어(200) 내에는 제1 버퍼(331)에 저장된 형태와 동일하게 로우 프로덕트 코드워드들(PCWR1-PCWR6) 및 컬럼 프로덕트 코드워드들(PCWC1-PCWC6)으로 구성되는 프로덕트 코드워드(PCW)가 저장된다.
도 16은 도 1의 메모리 시스템에서 프로덕트 코드워드를 구성하는 데이터에 대한 읽기 명령에 응답하여 제2 에러정정모드에서의 읽기 동작을 나타내 보인 플로챠트이다. 도 16을 참조하면, 예컨대 프로턱트 코드워드를 구성하는 데이터에 대한 호스트로부터의 읽기 명령이 발생되면, 메모리 시스템(100)은 읽기 명령을 입력받는다(단계 451). 이어서 메모리 시스템(100)은, 프로덕트 코드워드에 대한 로우 방향의 ECC 디코딩을 수행한다(단계 452). 로우 방향의 ECC 디코딩은, 프로덕트 코드워드를 구성하는 로우 프로덕트 코드워드 단위로 수행된다. 다음에 프로덕트 코드워드에 대한 컬럼 방향의 ECC 디코딩을 수행한다(단계 453). 컬럼 방향의 ECC 디코딩은, 프로덕트 코드워드를 구성하는 컬럼 프로덕트 코드워드 단위로 수행된다. 다음에 읽기 데이터심볼들이 갖는 로우 어드레스의 로우 프로덕트 코드워드에 대한 로우 방향의 ECC 디코딩을 수행한다(단계 454). 다음에 단계 454에서의 로우 방향의 ECC 디코딩된 데이터심볼들을 호스트로 전송한다(단계 455).
도 17은 도 16의 프로덕트 코드워드에 대한 읽기 동작에서 로우 방향의 ECC 디코딩을 수행하는 단계를 보다 상세하게 나타내 보인 플로 챠트이다. 도 18은 도 17의 단계 452-2 내지 단계 452-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 도 19는 도 17의 단계 452-2 내지 단계 452-6이 수행된 후에 메모리 컨트롤러(330) 내의 제2 버퍼(332)에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면이다. 도 20은 도 17의 단계 452-7을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 그리고 도 21은 도 17의 단계 452-7이 수행된 후에 메모리 컨트롤러(330) 내의 제2 버퍼(332)에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면이다. 도 18 및 도 20에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 본 예에서 로우 어드레스 "1"을 갖는 두번째 페이지에 대한 읽기 명령이 발생한 경우를 예로 들기로 한다.
먼저 도 17 내지 도 19를 참조하면, 카운터값을 "0"으로 리셋시킨다(단계 452-1). 프로덕트 코드에 포함되는 로우 프로덕트 코드워드들 중 (카운터값+1)번째 로우 프로덕트 코드워드를 메모리 미디어(200)로부터 읽는다(단계 452-2). 도 18에 나타낸 바와 같이, 메모리 미디어(200)로부터 읽은 첫번째 로우 프로덕트 코드워드(PCWR1)는, 미디어측 물리층(301) 및 제1 멀티플렉서(341)를 거쳐 ECC 디코더(312)에 입력된다. ECC 디코더(312)는, 입력된 첫번째 로우 프로덕트 코드워드(PCWR1)에 대한 로우 방향의 ECC 디코딩을 수행한다(단계 452-3). 단계 452-3의 로우 방향의 ECC 디코딩에 의해, ECC 디코더(312)로부터 로우 어드레스 "0"을 갖는 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)이 출력된다. 패리티심볼들(PS04, PS05)은, 후속의 컬럼 방향의 ECC 디코딩 과정에서의 에러정정동작을 위해 제거되지 않는다. ECC 디코더(312)로부터 출력된 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)은, 제3 디멀티플렉서(346)를 거쳐 제2 버퍼(332)에 저장된다(단계 452-4).
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 452-5). 이에 따라 카운터값은 "0"에서 "1"로 변경된다. 다음에 카운터값이 "M"과 같은지의 여부를 판단한다(단계 452-6). "M"은 로우 프로덕트 코드워드들 중 데이터심볼을 포함하는 로우 프로덕트 코드워들들)의 개수로 정의된다. 이는 프로덕트 코드(도 6의 PC)를 구성하는 로우 프로덕트 코드들 중 데이터심볼을 포함하는 로우 프로덕트 코드들의 개수와 동일하다. 따라서 "M"은 "4"로 설정된다. 단계 452-6의 판단에서, 카운터값이 데이터심볼을 포함하는 로우 프로덕트 코드워들들)의 개수(M)인 "4"와 같지 않으므로, 단계 452-2부터의 과정을 다시 수행한다. 카운터값이 "1"로 증가되었으므로, 두번째 로우 프로덕트 코드워드(PCWR2)에 대해 단계 452-2 내지 단계 452-6을 수행한다. 마찬가지로, 세번째 로우 프로덕트 코드워드(PCWR3) 및 네번째 로우 프로덕트 코드워드(PCWR4) 각각에 대해서도 단계 452-2 내지 단계 452-6을 수행한다.
프로덕트 코드워드를 구성하는 로우 프로덕트 코드워드들 중 데이터심볼을 포함하는 로우 프로덕트 코드워드들(PCWR1-PCWR4) 모두에 대해 단계 452-2 내지 단계 452-6을 반복하여 수행한 후에는, 도 19에 나타낸 바와 같이, 제2 버퍼(332) 내에는 로우 어드레스 "0"을 갖는 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)과, 로우 어드레스 "1"을 갖는 데이터심볼들(DS10-DS13) 및 패리티심볼들(PS14, PS15)과, 로우 어드레스 "2"를 갖는 데이터심볼들(DS20-DS23) 및 패리티심볼들(PS24, PS25)과, 그리고 로우 어드레스 "3"을 갖는 데이터심볼들(DS30-DS33) 및 패리티심볼들(PS34, PS35)이 저장된다. 한편 두번째 로우 프로덕트 코드워드(도 15의 PCWR2)에 대해 도 17의 단계 452-3에 따른 로우 방향의 ECC 디코딩이 수행되더라도, ECC 디코딩된 두번째 로우의 데이터심볼들(DS10-DS13)의 에러 개수 "4"가 에러정정능력인 "3"을 초과하므로, 여전히 에러가 정정되지 않은 상태가 유지된다.
도 17의 단계 452-6의 판단에서, 카운터값이 데이터심볼을 포함하는 로우 프로덕트 코드워들들)의 개수(M)인 "4"와 같은 경우는, 데이터심볼을 포함하는 로우 프로덕트 코드워드들이 모두 ECC 디코딩되었다는 것을 의미한다. 이 경우, 데이터심볼을 포함하지 않는 로우 프로덕트 코드워드들, 즉 패리티심볼들로만 구성되는 로우 프로덕트 코드워드들을 메모리 미디어(200)로부터 읽어 제2 버퍼(332)에 저장한다(단계 452-7). 구체적으로 도 20에 나타낸 바와 같이, 먼저 패리티심볼들(PS40-PS45)로만 구성된 다섯번째 로우 프로덕트 코드워드(PCWR5)를 미디어측 물리층(301) 및 제1 멀티플렉서(341)를 통해 메모리 미디어(200)로부터 읽어서 ECC 디코더(312)에 입력시킨다. ECC 디코더(312)는 입력된 다섯번째 로우 프로덕트 코드워드(PCWR5)에 대해 ECC 디코딩을 수행하지 않고 제3 디멀티플렉서(346)으로 입력시킨다. 이를 위해, PC 제어부(370)는 ECC 디코더(312)의 ECC 디코딩 디스에이블 제어신호를 ECC 디코더(312)에 입력시킨다. 제3 디멀티플렉서(346)로 입력된 다섯번째 로우 프로덕트 코드워드(PCWR5)는 제2 버퍼(332)에 저장된다. 패리티심볼들(PS50-PS55)로만 구성된 여섯번째 로우 프로덕트 코드워드(PCWR6)에 대해서도 동일한 과정이 수행된다. 도 17의 단계 452-7이 수행된 후에는, 도 21에 나타낸 바와 같이, 제2 버퍼(332) 내에 로우 어드레스 "4"를 갖는 패리티심볼들(PS40-PS45) 및 로우 어드레스 "5"를 갖는 패리티심볼들(PS50-PS55)이 추가로 저장된다.
도 22는 도 16의 프로덕트 코드워드에 대한 읽기 동작에서 컬럼 방향의 ECC 디코딩을 수행하는 단계 453을 보다 상세하게 나타내 보인 플로 챠트이다. 도 23 및 도 24는 도 22의 단계 453-2 내지 단계 453-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 도 25 내지 도 30은, 각각 도 17의 단계 452-2 내지 단계 452-6 각각이 수행된 후에 메모리 컨트롤러(300) 내의 제2 버퍼(332)에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면이다. 도 23 및 도 24에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 도 22 내지 도 30을 참조하면, 도 16의 단계 452가 모두 수행되면, 카운터값을 "0"으로 리셋시킨다(단계 453-1). 제2 버퍼(332)에 저장된 (카운터값+1)번째, 즉 첫번째 컬럼의 데이터심볼들(DS00-DS30) 및 패리티심볼들(PS40, PS50)을 읽는다(단계 453-2).
도 23에 나타낸 바와 같이, 제2 버퍼(332)로부터 읽은 데이터심볼들(DS00-DS30) 및 패리티심볼들(PS40, PS50)은 제1 멀티플렉서(341)를 통해 ECC 디코더(312)에 입력된다. ECC 디코더(312)는, 입력된 데이터심볼들(DS00-DS30) 및 패리티심볼들(PS40, PS50)에 대한 컬럼 방향의 ECC 디코딩을 수행하여 컬럼 방향의 ECC 디코딩된 데이터심볼들 및 패리티심볼들을 출력한다(단계 453-3). ECC 디코더(312)로부터 출력된 컬럼 방향의 ECC 디코딩된 데이터심볼들 및 패리티심볼들을 제3 디멀티플렉서(346)을 통해 제2 버퍼(332)에 저장한다(단계 453-4). 도 25에 나타낸 바와 같이, 제2 버퍼(332) 내에는 컬럼 방향의 ECC 디코딩된 데이터심볼들(DS00-DS30) 및 패리티심볼들(PS40, PS50)이 저장된다. 컬럼 방향의 ECC 디코딩 대상인 데이터심볼들(DS00-DS30) 중 에러가 발생된 데이터심볼(DS10)의 개수는 1개이며, 이는 에러정정능력 보다 작은 값이다. 따라서 도 22의 단계 453-3에 따른 컬럼 방향의 ECC 디코딩 과정에서, 패리티심볼들(PS40, PS50)을 이용하여 데이터심볼(DS10)의 에러를 정정할 수 있으며, 제2 버퍼(332)에는 데이터심볼(DS10)이 에러가 정정된 상태로 저장된다.
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 453-5). 이에 따라 카운터값은 "0"에서 "1"로 변경된다. 다음에 카운터값이 "N+j"와 같은지의 여부를 판단한다(단계 453-6). "N+j"는 프로덕트 코드워드를 구성하는 모든 컬럼 프로덕트 코드워드들의 개수로 정의된다. 이는 프로덕트 코드(도 6의 PC)를 구성하는 모든 컬럼 프로덕트 코드들의 개수와 동일하다. 따라서 "N+j"는 "6"으로 설정된다. 단계 453-6의 판단에서, 카운터값이 모든 컬럼 프로덕트 코드워드들의 개수(N+j)인 "6"과 같지 않으므로, 단계 453-2부터의 과정을 다시 수행한다. 이 경우 카운터값이 증가되어 "1"의 값을 가지므로, 제2 버퍼(332)로부터 (카운터값+1)번째 컬럼, 즉 두번째 컬럼의 데이터심볼들(DS01-DS31) 및 패리티심볼들(PS41, PS51)을 읽는다(단계 453-2). 도 23에 나타낸 바와 같이, 제2 버퍼(332)로부터 읽은 두번째 컬럼의 데이터심볼들(DS01-DS31) 및 패리티심볼들(PS41, PS51)은 제1 멀티플렉서(341)를 통해 ECC 디코더(312)에 입력된다. ECC 디코더(312)는, 입력된 데이터심볼들(DS01-DS31) 및 패리티심볼들(PS41, PS51)에 대한 컬럼 방향으로의 ECC 디코딩을 수행하여 컬럼 방향의 ECC 디코딩된 데이터심볼들 및 패리티심볼들을 출력한다(단계 453-3). ECC 디코더(312)로부터 출력된 컬럼 방향의 ECC 디코딩된 데이터심볼들 및 패리티심볼들은 제3 디멀티플렉서(346)을 통해 제2 버퍼(332)에 저장된다(단계 453-4). 도 26에 나타낸 바와 같이, 제2 버퍼(332) 내에는 컬럼 방향의 ECC 디코딩된 데이터심볼들(DS01-DS31) 및 패리티심볼들(PS41, PS51)이 저장된다. 컬럼 방향의 ECC 디코딩 대상인 데이터심볼들(DS01-DS31) 중 에러가 발생된 데이터심볼(DS11)의 개수는 1개이며, 이는 에러정정능력 보다 작은 값이다. 따라서 도 22의 단계 453-3에 따른 컬럼 방향의 ECC 디코딩 과정에서, 패리티심볼들(PS41, PS51)을 이용하여 데이터심볼(DS11)의 에러를 정정할 수 있으며, 도 26에 나타낸 바와 같이, 제2 버퍼(332)에는 데이터심볼(DS11)이 에러가 정정된 상태로 저장된다.
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 453-5). 이에 따라 카운터값은 "1"에서 "2"로 변경된다. 다음에 카운터값이 "N+j"와 같은지의 여부를 판단한다(단계 453-6). 단계 453-6의 판단에서, 카운터값이 모든 컬럼 프로덕트 코드워드들의 개수(N+j)인 "6"과 같지 않으므로, 단계 453-2부터의 과정을 다시 수행한다. 이 경우 카운터값이 증가되어 "2"의 값을 가지므로, 제2 버퍼(332)로부터 (카운터값+1)번째 컬럼, 즉 세번째 컬럼의 데이터심볼들(DS02-DS32) 및 패리티심볼들(PS42, PS52)을 읽는다(단계 453-2). 도 23에 나타낸 바와 같이, 제2 버퍼(332)로부터 읽은 세번째 컬럼의 데이터심볼들(DS02-DS32) 및 패리티심볼들(PS42, PS52)은 제1 멀티플렉서(341)를 통해 ECC 디코더(312)에 입력된다. ECC 디코더(312)는, 입력된 데이터심볼들(DS02-DS32) 및 패리티심볼들(PS42, PS52)에 대한 컬럼 방향의 ECC 디코딩을 수행하여 컬럼 방향의 ECC 디코딩된 데이터심볼들 및 패리티심볼들을 출력한다(단계 453-3). ECC 디코더(312)로부터 출력된 컬럼 방향의 ECC 디코딩된 데이터심볼들 및 패리티심볼들은 제3 디멀티플렉서(346)을 통해 제2 버퍼(332)에 저장된다(단계 453-4). 도 27에 나타낸 바와 같이, 제2 버퍼(332) 내에는 컬럼 방향으로의 ECC 디코딩된 데이터심볼들(DS02-DS32) 및 패리티심볼들(PS42, PS52)이 저장된다. 컬럼 방향의 ECC 디코딩 대상인 데이터심볼들(DS02-DS32) 중 에러가 발생된 데이터심볼(DS12)의 개수는 1개이며, 이는 에러정정능력 보다 작은 값이다. 따라서 도 22의 단계 453-3에 따른 컬럼 방향의 ECC 디코딩 과정에서, 패리티심볼들(PS42, PS52)을 이용하여 데이터심볼(DS12)의 에러를 정정할 수 있으며, 제2 버퍼(332)에는 데이터심볼(DS12)이 에러가 정정된 상태로 저장된다.
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 453-5). 이에 따라 카운터값은 "2"에서 "3"으로 변경된다. 다음에 카운터값이 "N+j"와 같은지의 여부를 판단한다(단계 453-6). 단계 453-6의 판단에서, 카운터값이 모든 컬럼 프로덕트 코드워드들의 개수(N)인 "6"과 같지 않으므로, 단계 453-2부터의 과정을 다시 수행한다. 이 경우 카운터값이 증가되어 "3"의 값을 가지므로, 제2 버퍼(332)로부터 (카운터값+1)번째 컬럼, 즉 네번째 컬럼의 데이터심볼들(DS03-DS33) 및 패리티심볼들(PS43, PS53)을 읽는다(단계 453-2). 도 23에 나타낸 바와 같이, 제2 버퍼(332)로부터 읽은 네번째 컬럼의 데이터심볼들(DS03-DS33) 및 패리티심볼들(PS43, PS53)은 제1 멀티플렉서(341)를 통해 ECC 디코더(312)에 입력된다. ECC 디코더(312)는, 입력된 데이터심볼들(DS03-DS33) 및 패리티심볼들(PS43, PS53)에 대한 컬럼 방향의 ECC 디코딩을 수행하여 컬럼 방향의 ECC 디코딩된 데이터심볼들 및 패리티심볼들을 출력한다(단계 453-3). ECC 디코더(312)로부터 출력된 컬럼 방향의 ECC 디코딩된 데이터심볼들 및 패리티심볼들은 제3 디멀티플렉서(346)을 통해 제2 버퍼(332)에 저장된다(단계 453-4). 도 28에 나타낸 바와 같이, 제2 버퍼(332) 내에는 컬럼 방향의 ECC 디코딩된 데이터심볼들(DS03-DS33) 및 패리티심볼들(PS43, PS53)이 저장된다. 컬럼 방향의 ECC 디코딩 대상인 데이터심볼들(DS03-DS33) 중 에러가 발생된 데이터심볼(DS13)의 개수는 1개이며, 이는 에러정정능력 보다 작은 값이다. 따라서 도 22의 단계 453-3에 따른 컬럼 방향의 ECC 디코딩 과정에서, 패리티심볼들(PS43, PS53)을 이용하여 데이터심볼(DS13)의 에러를 정정할 수 있으며, 제2 버퍼(332)에는 데이터심볼(DS13)이 에러가 정정된 상태로 저장된다.
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 453-5). 이에 따라 카운터값은 "3"에서 "4"로 변경된다. 다음에 카운터값이 모든 컬럼 프로덕트 코드워드들의 개수(N+j)와 같은지의 여부를 판단한다(단계 453-6). 단계 453-6의 판단에서, 카운터값이 모든 컬럼 프로덕트 코드워드들의 개수(N+j)인 "6"과 같지 않으므로, 단계 453-2부터의 과정을 다시 수행한다. 이 경우 카운터값이 증가되어 "4"의 값을 가지므로, 제2 버퍼(332)로부터 (카운터값+1)번째 컬럼, 즉 다섯번째 컬럼의 패리티심볼들(PS04-PS54)을 읽는다(단계 453-2). 도 24에 나타낸 바와 같이, 제2 버퍼(332)로부터 읽은 다섯번째 컬럼의 패리티심볼들(PS04-PS54)은 제1 멀티플렉서(341)를 통해 ECC 디코더(312)에 입력된다. ECC 디코더(312)는, 입력된 패리티심볼들(PS04-PS54)에 대한 컬럼 방향의 ECC 디코딩을 수행하여 컬럼 방향의 ECC 디코딩된 패리티심볼들을 출력한다(단계 453-3). ECC 디코더(312)로부터 출력된 컬럼 방향의 ECC 디코딩된 패리티심볼들은 제3 디멀티플렉서(346)을 통해 제2 버퍼(332)에 저장된다(단계 453-4). 도 29에 나타낸 바와 같이, 제2 버퍼(332) 내에는 컬럼 방향의 ECC 디코딩된 패리티심볼들(PS04-PS54)이 저장된다. 카운터값이 “4”로 변경되기 전에 패리티심볼들(PS04-PS34) 중 일부에 에러가 발생되더라도, 에러가 발생된 패리티심볼의 개수가 에러정정능력보다 작으면, 본 ECC 디코딩 과정에서 패리티심볼들(PS44, PS54)을 이용한 에러 정정이 이루어질 수 있다.
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 453-5). 이에 따라 카운터값은 "4"에서 "5"로 변경된다. 다음에 카운터값이 모든 컬럼 프로덕트 코드워드들의 개수(N+j)와 같은지의 여부를 판단한다(단계 453-6). 단계 453-6의 판단에서, 카운터값이 모든 컬럼 프로덕트 코드워드들의 개수(N+j)인 "6"과 같지 않으므로, 단계 453-2부터의 과정을 다시 행한다. 이 경우 카운터값이 증가되어 "5"의 값을 가지므로, 제2 버퍼(332)로부터 (카운터값+1)번째 컬럼, 즉 여섯번째 컬럼의 패리티심볼들(PS05-PS55)을 읽는다(단계 453-2). 도 24에 나타낸 바와 같이, 제2 버퍼(332)로부터 읽은 여섯번째 컬럼의 패리티심볼들(PS05-PS55)은 제1 멀티플렉서(341)를 통해 ECC 디코더(312)에 입력된다. ECC 디코더(312)는, 입력된 패리티심볼들(PS05-PS55)에 대한 컬럼 방향의 ECC 디코딩을 수행하여 컬럼 방향의 ECC 디코딩된 패리티심볼들을 출력한다(단계 453-3). ECC 디코더(312)로부터 출력된 컬럼 방향의 ECC 디코딩된 패리티심볼들은 제3 디멀티플렉서(346)을 통해 제2 버퍼(332)에 저장된다(단계 453-4). 도 30에 나타낸 바와 같이, 제2 버퍼(332) 내에는 컬럼 방향의 ECC 디코딩된 패리티심볼들(PS05-PS55)이 저장된다. 카운터값이 “5”로 변경되기 전에 패리티심볼들(PS05-PS35) 중 일부에 에러가 발생되더라도, 에러가 발생된 패리티심볼의 개수가 에러정정능력보다 작으면, 본 ECC 디코딩 과정에서 패리티심볼들(PS45, PS55)을 이용한 에러 정정이 이루어질 수 있다. 다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 453-5). 이에 따라 카운터값은 "5"에서 "6"으로 변경된다. 다음에 카운터값이 모든 컬럼 프로덕트 코드워드들의 개수(N+j)와 같은지의 여부를 판단한다(단계 453-6). 단계 453-6의 판단에서, 카운터값이 모든 컬럼 프로덕트 코드워드들의 개수(N+j)인 "6"과 같으므로, 도 16의 단계 454가 진행된다.
도 31은 도 16의 프로덕트 코드워드에 대한 읽기 동작에서 컬럼 방향의 ECC 디코딩을 수행하는 단계 454를 보다 상세하게 나타내 보인 플로 챠트이다. 그리고 도 32는 도 31의 단계 454-1 내지 단계 454-3을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 도 32에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 도 31 및 도 32를 참조하면, 읽기 데이터가 포함된 로우 어드레스, 즉 로우 어드레스 "1"을 갖는 데이터심볼들(DS10-DS13) 및 패리티심볼들(PS14, PS15)을 제2 버퍼(332)로부터 읽는다(단계 454-1). 도 32에 나타낸 바와 같이, 제2 버퍼(332)로부터 읽은 데이터심볼들(DS10-DS13) 및 패리티심볼들(PS14, PS15)은 제1 멀티플렉서(341)를 통해 ECC 디코더(312)에 입력된다. ECC 디코더(312)는, 입력된 데이터심볼들(DS10-DS13) 및 패리티심볼들(PS14, PS15)에 대한 로우 방향의 ECC 디코딩을 수행한다(단계 454-2). 이전의 에러정정 과정에서, 패리티심볼들(PS14, PS15) 중 적어도 어느 하나에 에러가 발생한 경우이더라도, 도 22의 단계 453-3에 따른 컬럼 방향의 ECC 디코딩 과정을 통해 에러가 정정된 상태가 되며, 따라서 본 단계 454-2에 따라 로우 방향의 ECC 디코딩되어 ECC 디코더(312)로부터 출력되는 데이터심볼들(DS10-DS13)은 모든 에러가 정정된 상태가 된다. ECC 디코더(312)로부터 출력되는 데이터심볼들(DS10-DS13)은, 호스트로 전송된다(단계 454-3). 구체적으로 ECC 디코더(312)로부터 출력되는 데이터심볼들(DS10-DS13)은, 제3 디멀티플렉서(346) 및 제2 디멀티플렉서(345)를 거쳐 데이터 관리부(320)로 전송된다. 데이터심볼들(DS10-DS13)은, 데이터 관리부(320)로부터 호스트측 물리층(302)을 거쳐 호스트로 전송된다.
도 33 내지 도 35는 본 개시의 일 예에 따른 메모리 시스템에서 고정된 ECC 엔진을 이용하여 에러정정능력 이상으로 발생된 에러들을 정정하는 과정을 설명하기 위해 나타내 보인 도면들이다. 본 예에서는 도 33에 나타낸 바와 같이, 로우 어드레스 "0"을 갖는 데이터심볼들(DS00-DS03) 중 데이터심볼(DS00)에 에러가 발생되고, 로우 어드레스 "1"을 갖는 데이터심볼들(DS10-DS13)은 모두 에러가 발생되고, 로우 어드레스 "2"를 갖는 데이터심볼들(DS20-DS23) 중 데이터심볼(DS23)에 에러가 발생되며, 그리고 로우 어드레스 "3"을 갖는 데이터심볼들(DS30-DS33) 중 데이터심볼(DS30)가 에러가 발생된 경우를 예로 들기로 한다. ECC 인코더(311) 및 ECC 디코더(312)가 갖는 고정된 에러정정레벨, 예컨대 에러정정능력이 "2"로 고정된 경우, 기존의 에러정정동작을 통해서는 로우 어드레스 "1"을 갖는 데이터심볼들(DS10-DS13)에 대해서 에러를 정정할 수 없다. 그러나 본 예에 따른 제2 에러정정모드에서의 에러정정동작을 통해서는 에러정정능력보다 많은 심볼 에러들을 갖는 경우에도 모든 에러가 정정될 수 있다.
구체적으로 먼저 도 34에 나타낸 바와 같이, 로우 어드레스 "0"을 갖는 데이터의 경우, 첫번째 로우 어드레스에 대한 로우 방향의 ECC 디코딩을 통해 데이터심볼(DS00)에 대한 에러를 정정할 수 있다. 반면에 로우 어드레스 "1"을 갖는 데이터의 경우, 두번째 로우 어드레스에 대한 로우 방향의 ECC 디코딩을 수행하더라도, 에러정정능력보다 많은 수의 심볼 에러수를 갖는 데이터심볼들(DS10-DS13)에 대한 에러가 정정되지 않는다. 로우 어드레스 "2"를 갖는 데이터의 경우, 세번째 로우 어드레스에 대한 로우 방향의 ECC 디코딩을 통해 데이터심볼(DS23)에 대한 에러를 정정할 수 있다. 마찬가지로 로우 어드레스 "3"를 갖는 데이터의 경우, 네번째 로우 어드레스에 대한 로우 방향의 ECC 디코딩을 통해 데이터심볼(DS30)에 대한 에러를 정정할 수 있다.
다음에 도 35에 나타낸 바와 같이, 로우 방향의 ECC 디코딩을 통해 로우 어드레스 "1"을 갖는 데이터심볼들(DS10-DS13)을 제외한 나머지 모든 데이터심볼들의 에러는 모두 정정된 상태가 된다. 이 상태에서 컬럼 어드레스 "0"을 갖는 데이터심볼들(DS00-DS30)에 대한 컬럼 방향의 ECC 디코딩을 수행하면, 데이터심볼(DS10)의 에러를 정정할 수 있다. 이어서 컬럼 어드레스 "1"을 갖는 데이터심볼들(DS01-DS31)에 대한 컬럼 방향의 ECC 디코딩을 수행하면, 데이터심볼(DS11)의 에러를 정정할 수 있다. 이어서 컬럼 어드레스 "2"를 갖는 데이터심볼들(DS02-DS32)에 대한 컬럼 방향의 ECC 디코딩을 수행하면, 데이터심볼(DS12)의 에러를 정정할 수 있다. 이어서 컬럼 어드레스 "3"을 갖는 데이터심볼들(DS03-DS33)에 대한 컬럼 방향의 ECC 디코딩을 수행하면, 데이터심볼(DS13)의 에러를 정정할 수 있다. 비록 도면에 나타내지는 않았지만, 컬럼 어드레스 "4"를 갖는 패리티심볼들(PS04-PS34) 및 컬럼 어드레스 "5"를 갖는 패리티심볼들(PS05-PS35)에 대해서도, 에러가 발생되는 경우 각각 컬럼 방향의 ECC 디코딩을 통해 에러가 정정되도록 할 수 있다.
도 36은 도 1의 메모리 시스템에서 프로덕트 코드워드를 구성하는 데이터 저장영역에 대한 쓰기 명령에 응답하여 제2 에러정정모드에서의 쓰기 동작을 나타내 보인 플로챠트이다. 도 36을 참조하면, 메모리 미디어(200) 내로 프로덕트 코드워드를 구성하는 데이터를 저장하기 위한 쓰기 명령이 발생하면, 메모리 컨트롤러(300)는 쓰기 명령을 입력받는다(단계 461). 메모리 컨드롤러(300)는 쓰기 명령에 응답하여 제2 에러정정모드에서의 ECC 디코딩 과정과, 데이터 병합 과정과, 그리고 제2 에러정정모드에서의 ECC 인코딩 과정을 수행한 후에 메모리 미디어에 쓰는 동작을 수행한다. ECC 디코딩 과정을 위해, 메모리 컨드롤러(300)는 먼저 메모리 미디어(200)에 저장되어 있는 프로덕트 코드워드를 구성하는 로우 프로덕트 코드워드들 중 데이터심볼을 포함하는 로우 프로덕트 코드워드들에 대한 첫번째 로우 방향의 ECC 디코딩을 수행한다(단계 462). 다음에 메모리 컨드롤러(300)는 메모리 미디어(200)에 저장되어 있는 프로덕트 코드워드를 구성하는 컬럼 프로덕트 코드워드들에 대한 컬럼 방향의 ECC 디코딩을 수행한다(단계 463). 다음에 메모리 컨드롤러(300)는 로우 프로덕트 코드워드들 중 데이터심볼을 포함하는 로우 프로덕트 코드워드들에 대한 두번째 로우 방향의 ECC 디코딩을 수행한다(단계 464). 단계 462 내지 단계 464의 ECC 디코딩을 수행한 후에는 데이터 병합을 수행한다(단계 465). 데이터 병합은 쓰기 데이터로 구성되는 특정 로우 어드레스의 쓰기 데이터심볼들로 단계 462 내지 단계 464의 ECC 디코딩에 의해 생성된 데이터심볼들 중 동일한 로우 어드레스의 데이터심볼들을 대체함으로써 수행될 수 있다. 다음에 메모리 컨드롤러(300)는 데이터 병합이 이루어진 데이터심볼들에 대해 로우 방향의 ECC 인코딩을 수행한다(단계 466). 다음에 메모리 컨드롤러(300)는 로우 방향의 ECC 인코딩된 데이터심볼들 및 패리티심볼들에 대해 컬럼 방향의 ECC 인코딩을 수행한다(단계 467). 그리고 컬럼 방향의 ECC 인코딩된 데이터심볼들 및 패리티심볼들을 메모리 미디어(200)에 쓴다(단계 468).
도 37은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 단계 462의 첫번째 로우 방향의 ECC 디코딩을 수행하는 단계를 보다 상세하게 나타내 보인 플로 챠트이다. 도 38은 도 37의 단계 462-2 내지 단계 462-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 도 39는 도 37의 단계 462-2 내지 단계 462-6이 수행된 후에 메모리 컨트롤러(330) 내의 제2 버퍼(332)에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면이다. 도 40은 도 37의 단계 462-7을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 그리고 도 41은 도 37의 단계 462-7이 수행된 후에 메모리 컨트롤러(330) 내의 제2 버퍼(332)에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면이다. 도 38 및 도 40에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 본 예에서 프로덕트 코드워드에 포함되는 로우 어드레스 "1"을 갖는 데이터심볼들에 대한 쓰기 명령이 발생하는 경우를 예로 들기로 한다.
먼저 도 37 내지 도 39를 참조하면, 카운터값을 "0"으로 리셋시킨다(단계 462-1). 메모리 미디어(200) 내의 프로덕트 코드워드에 포함되는 로우 프로덕트 코드워드들 중 (카운터값+1)번째 로우 프로덕트 코드워드를 메모리 미디어(200)로부터 읽는다(단계 462-2). 도 38에 나타낸 바와 같이, 호스트로부터의 쓰기 데이터는 호스트측 물리층(302)을 통해 데이터 관리부(320)에 임시로 저장된다. 메모리 미디어(200)로부터 읽은 첫번째 로우 프로덕트 코드워드(PCWR1)는, 미디어측 물리층(301) 및 제1 멀티플렉서(341)를 거쳐 ECC 디코더(312)에 입력된다. ECC 디코더(312)는, 입력된 첫번째 로우 프로덕트 코드워드(PCWR1)에 대한 로우 방향으로의 ECC 디코딩을 수행한다(단계 462-3). 단계 462-3의 로우 방향으로의 ECC 디코딩이 수행되면, ECC 디코더(312)로부터 로우 어드레스 "0"을 갖는 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)이 출력된다. ECC 디코더(312)로부터 출력된 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)은, 제3 디멀티플렉서(346)를 거쳐 제2 버퍼(332)에 저장된다(단계 462-4).
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 462-5). 이에 따라 카운터값은 "0"에서 "1"로 변경된다. 다음에 카운터값이 "M"과 같은지의 여부를 판단한다(단계 462-6). "M"은 로우 프로덕트 코드워드들 중 데이터심볼을 포함하는 로우 프로덕트 코드워드들의 개수로 정의된다. 본 예에서 로우 프로덕트 코드워드들(PCWR1-PCWR6) 중에서 데이터심볼(DS)을 포함하는 로우 방향의 프로덕트 코드워들의 개수(M)는 "4"이다. 단계 462-6의 판단에서, 카운터값이 데이터심볼을 포함하는 로우 프로덕트 코드워드들의 개수(M)인 "4"와 같지 않으므로, 단계 462-2부터의 과정을 다시 수행한다. 카운터값이 "1"이므로, 두번째 로우 프로덕트 코드워드(PCWR2)에 대해 단계 462-2 내지 단계 462-6을 수행한다. 마찬가지로, 세번째 로우 프로덕트 코드워드(PCWR3) 및 네번째 로우 프로덕트 코드워드(PCWR4) 각각에 대해서도 단계 462-2 내지 단계 462-6을 수행한다.
프로덕트 코드워드를 구성하는 로우 프로덕트 코드워드들 중 데이터심볼을 포함하는 로우 프로덕트 코드워드들 모두에 대해 단계 462-2 내지 단계 462-6을 반복하여 수행한 후에는, 도 39에 나타낸 바와 같이, 제2 버퍼(332) 내에는 로우 어드레스 "0"을 갖는 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)과, 로우 어드레스 "1"을 갖는 데이터심볼들(DS10-DS13) 및 패리티심볼들(PS14, PS15)과, 로우 어드레스 "2"를 갖는 데이터심볼들(DS20-DS23) 및 패리티심볼들(PS24, PS25)과, 그리고 로우 어드레스 "3"을 갖는 데이터심볼들(DS30-DS33) 및 패리티심볼들(PS34, PS35)이 저장된다.
도 37의 단계 462-6의 판단에서, 카운터값이 데이터심볼을 포함하는 로우 프로덕트 코드워드들의 개수(M)인 "4"와 같은 경우는, 데이터심볼을 포함하는 로우 프로덕트 코드워드들이 모두 처리되었다는 것을 의미한다. 이 경우, 데이터심볼을 포함하지 않는 로우 프로덕트 코드워드들, 즉 패리티심볼들로만 구성되는 로우 프로덕트 코드워드들을 메모리 미디어로부터 읽어 제2 버퍼(332)에 저장한다(단계 462-7). 구체적으로 도 40에 나타낸 바와 같이, 먼저 패리티심볼들(PS40-PS45)로만 구성된 다섯번째 로우 프로덕트 코드워드(PCWR5)를 미디어측 물리층(301) 및 제1 멀티플렉서(341)를 통해 메모리 미디어(200)로부터 읽어서 ECC 디코더(312)에 입력시킨다. ECC 디코더(312)는 입력된 다섯번째 로우 프로덕트 코드워드(PCWR5)에 대해 ECC 디코딩을 수행하지 않고 제3 디멀티플렉서(346)으로 입력시킨다. 이를 위해, PC 제어부(370)는 ECC 디코더(312)의 ECC 디코딩 디스에이블 제어신호를 ECC 디코더(312)에 입력시킨다. 제3 디멀티플렉서(346)로 입력된 다섯번째 로우 프로덕트 코드워드(PCWR5)는 제2 버퍼(332)에 저장된다. 패리티심볼들(PS50-PS55)로만 구성된 여섯번째 로우 프로덕트 코드워드(PCWR6)에 대해서도 동일한 과정이 수행된다. 도 37의 단계 462-7이 수행된 후에는, 도 41에 나타낸 바와 같이, 제2 버퍼(332) 내에 로우 어드레스 "4"를 갖는 패리티심볼들(PS40-PS45) 및 로우 어드레스 "5"를 갖는 패리티심볼들(PS50-PS55)이 추가로 저장된다.
도 42는 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 컬럼 방향의 ECC 디코딩을 수행하는 단계 463을 보다 상세하게 나타내 보인 플로 챠트이다. 도 43 및 도 44는 도 42의 단계 463-2 내지 단계 463-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 도 45는, 도 37의 단계 462-2 내지 단계 462-6이 수행된 후에 메모리 컨트롤러(330) 내의 제2 버퍼(332)에 저장된 데이터심볼들 및 패리티심볼들의 일 예를 나타내 보인 도면이다. 도 43 및 도 44에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 도 42 내지 도 45를 참조하면, 도 36의 단계 462가 모두 수행되면, 카운터값을 "0"으로 리셋시킨다(단계 463-1). 제2 버퍼(332)에 저장된 (카운터값+1)번째, 즉 첫번째 컬럼 방향의 데이터심볼들(DS00-DS30) 및 패리티심볼들(PS40, PS50)을 읽는다(단계 463-2).
도 43에 나타낸 바와 같이, 제2 버퍼(332)로부터 읽은 첫번째 컬럼 방향의 데이터심볼들(DS00-DS30) 및 패리티심볼들(PS40, PS50)은 제1 멀티플렉서(341)를 통해 ECC 디코더(312)에 입력된다. ECC 디코더(312)는, 입력된 데이터심볼들(DS00-DS30) 및 패리티심볼들(PS40, PS50)에 대한 컬럼 방향으로의 ECC 디코딩을 수행하여 컬럼 방향의 ECC 디코딩된 데이터심볼들(DS00-DS30) 및 패리티심볼들(PS40, PS50)을 출력한다(단계 463-3). ECC 디코더(312)로부터 출력된 컬럼 방향의 ECC 디코딩된 데이터심볼들(DS00-DS30) 및 패리티심볼들(PS40, PS50)은 제3 디멀티플렉서(346)을 통해 제2 버퍼(332)에 저장된다(단계 463-4). 다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 463-5). 이에 따라 카운터값은 "0"에서 "1"로 변경된다. 다음에 카운터값이 "N+j"와 같은지의 여부를 판단한다(단계 463-6). "N+j"는 메모리 미디어(200)에 저장된 프로덕트 코드워드가 갖는 컬럼 프로덕트 코드워드들의 개수로 정의된다. 이는 메모리 미디어(200)에 저장된 프로덕트 코드워드가 갖는 컬럼 개수와 동일하다. 따라서 "N"은 6의 값으로 설정된다. 단계 463-6의 판단에서, 카운터값 "1"이 컬럼 프로덕트 코드워드들의 개수(N+j)인 "6"과 같지 않으므로, 단계 463-2부터의 과정을 다시 수행한다. 이 경우 카운터값이 증가되어 "1"의 값을 가지므로, (카운터값+1)번째 컬럼, 즉 두번째 컬럼의 데이터심볼들(DS01-DS31) 및 패리티심볼들(PS41, PS51)에 대해 단계 463-2 내지 단계 463-6을 수행한다. 이와 같은 과정은 카운터값이 컬럼 프로덕트 코드워드들의 개수(N+j)인 "6"과 같을 때까지, 즉 여섯번째 컬럼 방향의 패리티심볼들(PS05-PS55)에 대한 처리가 이루어질 때까지 반복적으로 수행된다.
다섯번째 컬럼 방향의 데이터는 패리티심볼들(PS04-PS54)로만 구성되며, 여섯번째 컬럼 방향의 데이터 또한 패리티심볼들(PS05-PS55)로만 구성된다. 이에 따라 단계 463-2 내지 단계 463-6을 수행하는 과정에서, 도 44에 나타낸 바와 같이, 제2 버퍼(332)로부터 제1 멀티플렉서(341)를 거쳐 ECC 디코더(312)에는 컬럼 방향의 패리티심볼들만 입력된다. ECC 디코더(312)는 컬럼 방향의 ECC 디코딩된 패리티심볼들을 출력한다. 이 패리티심볼들은 제3 디멀티플렉서(346)를 거쳐 제2 버퍼(332)에 저장된다. 도 45에 나타낸 바와 같이, 제2 버퍼(332) 내에는 컬럼 방향으로 ECC 디코딩된 첫번째 컬럼의 데이터심볼들(DS00-DS30) 및 패리티심볼들(PS40, PS50) 내지 네번째 컬럼의 데이터심볼들(DS03-DS33) 및 패리티심볼들(PS43, PS53)과, 다섯번째 컬럼의 패리티심볼들(PS04-PS54) 및 여섯번째 컬럼의 패리티심볼들(PS05-PS55)이 저장된다. 여섯번째 컬럼의 패리티심볼들(PS05-PS55)에 대한 단계 463-2 내지 단계 463-5가 수행되면, 카운터값은 컬럼 프로덕트 코드워드들의 개수(N+j)인 "6"과 같으므로, 다음 단계 464로 넘어간다.
도 46은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 쓰기 데이터 병합을 수행하는 단계 465를 보다 상세하게 나타내 보인 플로 챠트이다. 도 47은 도 46의 단계 465-2 내지 단계 465-4를 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 도 48은 도 46의 단계 465-5가 수행되기 전의 데이터 관리부에 임시 저장된 데이터의 일 예를 나타내 보인 도면이다. 그리고 도 49는 도 46의 단계 465-5가 수행된 후에 데이터 관리부에 저장되는 데이터의 일 예를 나타내 보인 도면이다. 도 47에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 도 46 내지 도 49를 참조하면, 카운터값을 "0"으로 리셋시킨다(단계 465-1). 다음에 제2 버퍼(332)에 저장된 데이터심볼들 중 (카운터값+1)번째 로우, 즉 첫번째 로우의 데이터심볼들(DS00-DS03)을 데이터 관리부로 전송한다(단계 465-2). 구체적으로, 도 47에 나타낸 바와 같이, 제2 버퍼(332)로부터 첫번째 로우의 데이터심볼들(DS00-DS03)을 제1 멀티플렉서(341), ECC 디코더(312), 제3 디멀티플렉서(346), 및 제2 디멀티플렉서(345)를 통해 데이터 관리부(320)로 전송한다. 이 과정에서 ECC 디코더(312)는 PC 제어부(370)로부터의 제어신호에 따라 입력된 첫번째 로우의 데이터심볼들(DS00-DS03)에 대한 ECC 디코딩을 수행하지 않고, 입력된 데이터 그대로 출력시킨다.
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 465-3). 이에 따라 카운터값은 "0"에서 "1"로 변경된다. 다음에 카운터값이 "M"과 같은지의 여부를 판단한다(단계 465-4). "M"은 제2 버퍼(332)에 저장된 로우들 중 데이터심볼을 포함하는 로우 개수로 정의된다. 이는 로우 프로덕트 코드들 중 데이터심볼을 포함하는 로우 프로덕트 코드들의 개수와, 로우 프로덕트 코드워드들 중 데이터심볼을 포함하는 로우 프로덕트 코드워드들의 개수와 동일하다. 따라서 "M"은 4의 값으로 설정된다. 단계 465-4의 판단에서, 카운터값 "1"이 데이터심볼을 포함하는 로우 개수(M)인 "4"와 같지 않으므로, 단계 465-2부터의 과정을 다시 수행한다. 이 경우 카운터값이 증가되어 "1"의 값을 가지므로, (카운터값+1)번째 로우, 즉 두번째 로우의 데이터심볼들(DS10-DS13)에 대해 단계 465-2 내지 단계 465-4를 수행한다. 이와 같은 과정은 카운터값이 데이터심볼을 포함하는 로우 개수(M)인 "4"와 같을 때까지, 즉 네번째 로우 방향의 패리티심볼들(PS30-PS33)에 대한 처리가 이루어질 때까지 반복적으로 수행된다.
도 46의 단계 465-4의 판단에서, 카운터값이 데이터심볼을 포함하는 로우 개수(M)인 "4"와 같으면, 쓰기 데이터심볼들을 데이터 관리부(320)로 전송된 데이터심볼들에 병합한다(단계 465-5). 구체적으로 도 48에 나타낸 바와 같이, 데이터 관리부(320) 내에는 제2 버퍼(332)로부터 전송된 데이터심볼들(DS00-DS03, DS10-DS13, DS20-DS23, DS30-DS33) 및 호스트로부터 전송된 쓰기 데이터심볼들(DS10'-DS13')이 임시로 저장된다. 데이터 관리부(320)는 명령제어부(350)로부터의 신호에 응답하여, 쓰기 데이터심볼들(DS10'-DS13')을 전송된 데이터심볼들에 병합시킨다. 데이터심볼의 병합은, 기존의 두번째 로우의 데이터심볼들(DS10-DS13)이 쓰기 데이터심볼들(DS10'-DS13')로 대체됨으로써 수행될 수 있다. 이에 따라 도 49에 나타낸 바와 같이, 데이터 관리부(320) 내에는 병합이 이루어진 데이터심볼들(DS00-DS03, DS10'-DS13', DS20-DS23, DS30-DS33)이 생성된다.
도 50은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 로우 방향의 ECC 인코딩을 수행하는 단계 466을 보다 상세하게 나타내 보인 플로 챠트이다. 도 51은 도 50의 단계 466-2 내지 단계 466-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 그리고 도 52는 도 36의 단계 프로덕트 코드워드에 대한 쓰기 동작에서 로우 방향의 ECC 인코딩을 수행하는 단계 466을 수행한 후의 제1 버퍼에 저장된 데이터의 일 예를 나타내 보인 도면이다. 도 51에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 도 50 내지 도 52를 참조하면, 도 36의 단계 465가 수행된 후에, 카운터값을 "0"으로 리셋시킨다(단계 466-1). 메모리 컨트롤러(300)는 병합된 데이터심볼들 중 (카운터값+1)번째 로우, 즉 첫번째 로우의 데이터심볼들(DS00-DS03)을 데이터 관리부(320)로부터 읽는다(단계 466-2). 메모리 컨트롤러(300)는 읽은 첫번째 로우의 데이터심볼들(DS00-DS03)에 대한 로우 방향의 ECC 인코딩을 수행하여 첫번째 로우 프로덕트 코드워드(PCWR1)를 생성한다(단계 466-3). 구체적으로 도 51에 나타낸 바와 같이, 데이터 관리부(200)에 저장된 데이터심볼들 중 첫번째 로우의 데이터심볼들(DS00-DS03)이 제2 멀티플렉서(342) 및 제3 멀티플렉서(343)를 거쳐 ECC 인코더(311)로 입력된다. ECC 인코더(311)는 입력된 데이터심볼들에 대한 ECC 인코딩을 수행하여 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PD05)을 갖는 첫번째 로우의 프로덕트 코드워드(PCWR1)를 생성하여 출력한다. ECC 인코더(311)로부터 출력되는 첫번째 로우의 프로덕트 코드워드(PCWR1)는 제1 디멀티플렉서(344)를 거쳐 제1 버퍼(331)에 저장된다(단계 466-4).
단계 466-4를 수행한 후에는 카운터값을 "1"의 값만큼 증가시킨다(단계 466-5). 이에 따라 카운터값은 "0"에서 "1"로 변경된다. 다음에 카운터값이 "M"과 같은지의 여부를 판단한다(단계 466-6). "M"은 프로덕트 코드워드를 구성하는 로우들 중 데이터심볼을 포함하는 로우들의 개수로 정의된다. 이는 로우 프로덕트 코드들 중 데이터심볼을 포함하는 로우 프로덕트 코드들의 개수와, 로우 프로덕트 코드워드들 중 데이터심볼을 포함하는 로우 프로덕트 코드워드들의 개수와 동일하다. 따라서 "M"은 "4"로 설정된다. 단계 466-6의 판단에서, 카운터값인 "1"이 데이터심볼을 포함하는 로우들의 개수(M)인 "4"와 같지 않으므로, 단계 466-2부터의 과정부터 다시 수행한다. 즉 두번째 로우의 데이터심볼들(DS10'-DS13), 세번째 로우의 데이터심볼들(DS20-DS23), 및 네번째 로우의 데이터심볼들(DS30-DS33) 각각에 대해 단계 466-2 내지 단계 466-6을 수행한다. 이와 같은 과정이 모두 수행되면, 도 52에 나타낸 바와 같이, 제1 버퍼(331) 내에는 데이터심볼들(DS00-DS03) 및 패리티심볼들(PS04, PS05)을 갖는 첫번째 로우의 프로덕트 코드워드(PCWR1)와, 데이터심볼들(DS10'-DS13') 및 패리티심볼들(PS14', PS15')을 갖는 두번째 로우의 프로덕트 코드워드(PCWR2)와, 데이터심볼들(DS20-DS23) 및 패리티심볼들(PS24, PS25)을 갖는 세번째 로우의 프로덕트 코드워드(PCWR3)와, 그리고 데이터심볼들(DS30-DS33) 및 패리티심볼들(PS34, PS35)을 갖는 네번째 로우의 프로덕트 코드워드(PCWR4)가 저장된다.
도 53은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 컬럼 방향의 ECC 인코딩을 수행하는 단계 467을 보다 상세하게 나타내 보인 플로 챠트이다. 도 54는 도 53의 단계 467-2 내지 단계 467-6을 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 그리고 도 55는 도 36의 단계 프로덕트 코드워드에 대한 쓰기 동작에서 컬럼 방향의 ECC 인코딩을 수행하는 단계 467을 수행한 후의 제1 버퍼에 저장된 데이터의 일 예를 나타내 보인 도면이다. 도 54에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 도 53 내지 도 55를 참조하면, 도 50의 단계 466-6의 판단에서, 카운터값이 데이터심볼을 포함하는 로우들의 개수(M)인 "4"와 같으면, 컬럼 방향의 ECC 인코딩 과정을 수행한다. 이를 위해 먼저 카운터값을 "0"으로 리셋시킨다(단계 467-1). 제1 버퍼(331)에 저장된 (카운터값+1)번째 컬럼, 즉 첫번째 컬럼의 데이터심볼들(DS00, DS10', DS20, DS30)을 읽는다(단계 467-2). 다음에 읽은 첫번째 컬럼의 데이터심볼들(DS00, DS10', DS20, DS30)에 대한 컬럼 방향의 ECC 인코딩을 수행하여 첫번째 컬럼의 프로덕트 코드워드(PCWC1)를 생성한다(단계 467-3). 그리고 생성된 첫번째 컬럼의 프로덕트 코드워드(PCWC1)를 제1 버퍼(331)에 저장한다(단계 467-4). 구체적으로 도 54에 나타낸 바와 같이, 제1 버퍼(331)로부터 읽은 첫번째 컬럼의 데이터심볼들(DS00, DS10', DS20, DS30)은 제3 멀티플렉서(343)를 통해 ECC 인코더(311)에 입력된다. ECC 인코더(311)는, 입력된 첫번째 컬럼의 데이터심볼들(DS00, DS10', DS20, DS30)에 대한 컬럼 방향으로의 ECC 인코딩을 수행한다. ECC 인코더(311)는 데이터심볼들(DS00, DS10', DS20, DS30) 및 패리티심볼들(PS40', PS50')을 갖는 첫번째 컬럼의 프로덕트 코드워드(PCWC1)를 출력한다. ECC 인코더(311)로부터 출력되는 첫번째 컬럼의 프로덕트 코드워드(PCWC1)는 제1 디멀티플렉서(344)를 거쳐 제1 버퍼(331)에 저장된다.
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 467-5). 이에 따라 카운터값은 "0"에서 "1"로 변경된다. 다음에 카운터값이 "N+j"와 같은지의 여부를 판단한다(단계 467-6). "N+j"는 제1 버퍼(331)에 저장된 데이터의 컬럼 개수로 정의된다. 이는 프로덕트 코드를 구성하는 모든 컬럼 프로덕트 코드들의 개수 및 프로덕트 코드워드를 구성하는 모든 컬럼 프로덕트 코드워드들의 개수와 동일하다. 따라서 "N+j"는 6으로 설정된다. 단계 467-6의 판단에서, 카운터값이 제1 버퍼(341)에 저장된 데이터의 컬럼 개수(N)인 "6"과 같지 않으므로, 단계 467-2부터의 과정을 다시 수행한다. 즉 두번째 컬럼의 데이터심볼들(DS01, DS11', DS21, DS31), 세번째 컬럼의 데이터심볼들(DS02, DS12', DS22, DS32), 네번째 컬럼의 데이터심볼들(DS03, DS13', DS23, DS33), 다섯번째 컬럼의 패리티심볼들(PS04, PS14', PS24, PS34), 및 여섯번째 컬럼의 패리티심볼들(PS05, PS15', PS25, PS35) 각각에 대해 단계 467-2 내지 단계 467-6을 반복적으로 수행한다.
이와 같은 과정이 모두 수행되면, 도 55에 나타낸 바와 같이, 제1 버퍼(331) 내에는 데이터심볼들(DS00, DS10', DS20, DS30) 및 패리티심볼들(PS40', PS50')을 갖는 첫번째 컬럼의 프로덕트 코드워드(PCWC1)와, 데이터심볼들(DS01, DS11', DS21, DS31) 및 패리티심볼들(PS41', PS51')을 갖는 두번째 컬럼의 프로덕트 코드워드(PCWC2)와, 데이터심볼들(DS02, DS12', DS22, DS32) 및 패리티심볼들(PS42', PS52')을 갖는 세번째 컬럼의 프로덕트 코드워드(PCWC3)와, 데이터심볼들(DS03, DS13', DS23, DS33) 및 패리티심볼들(PS43', PS53')을 갖는 네번째 컬럼의 프로덕트 코드워드(PCWC4)와, 패리티심볼들(PS04, PS14', PS24, PS34, PS44', PS54')을 갖는 다섯번째 컬럼의 프로덕트 코드워드(PCWC5)와, 그리고 패리티심볼들(PS05, PS15', PS25, PS35, PS45', PS55')을 갖는 여섯번째 컬럼의 프로덕트 코드워드(PCWC6)가 저장된다.
도 56은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 메모리 미디어로의 쓰기를 수행하는 단계 468을 보다 상세하게 나타내 보인 플로 챠트이다. 도 57은 도 56의 단계 468-2 내지 단계 468-5를 수행하는 과정에서 도 1의 메모리 시스템의 메모리 컨트롤러 내에서의 데이터 이동을 나타내 보인 도면이다. 그리고 도 58은 도 36의 프로덕트 코드워드에 대한 쓰기 동작에서 메모리 미디어로의 쓰기를 수행하는 단계 468을 수행한 후의 메모리 미디어에 저장된 데이터의 일 예를 나타내 보인 도면이다. 도 57에서 데이터 이동 경로는 굵은색 화살표로 표시하였다. 도 56 내지 도 58을 참조하면, 도 53의 단계 467-6의 판단에서, 카운터값이 제1 버퍼(331)에 저장된 데이터의 컬럼 개수(N+j)인 "6"과 같으면, 메모리 미디어로의 데이터 쓰기 과정을 수행한다. 이를 위해 도 36의 단계 467이 모두 수행되면, 카운터값을 "0"으로 리셋시킨다(단계 468-1). 제1 버퍼(331)에 저장된 (카운터값+1)번째 로우, 즉 첫번째 로우의 프로덕트 코드워드(PCWR1)를 읽는다(단계 468-2). 다음에 읽은 첫번째 로우의 프로덕트 코드워드(PCWR1)를 메모리 미디어(200)의 첫번째 로우에 쓴다(단계 468-3). 보다 구체적으로 도 57에 나타낸 바와 같이, 제1 버퍼(331)로부터 읽은 첫번째 로우의 프로덕트 코드(PCWR1)는 제3 멀티플렉서(343)를 거쳐 ECC 인코더(311)에 입력된다. PC 제어부(370)는, ECC 인코더(311)에 ECC 인코딩 동작을 디스에이블시키고, 입력되는 첫번째 로우의 프로덕트 코드(PWCR1)를 통과시키는 제어신호를 인가한다. ECC 인코더(311)로부터 통과된 첫번째 로우의 프로덕트 코드(PWCR1)는 제1 디멀티플렉서(344) 및 미디어측 물리층(301)을 거쳐 메모리 미디어(200)의 첫번째 로우의 저장영역에 쓰여진다.
다음에 카운터값을 "1"의 값만큼 증가시킨다(단계 468-4). 이에 따라 카운터값은 "0"에서 "1"로 변경된다. 다음에 카운터값이 "M+i"와 같은지의 여부를 판단한다(단계 468-5). "M"은 데이터심볼을 포함하는 로우 개수로 정의되고, "i"는 데이터심볼을 포함하지 않는, 즉 패리티심볼만 포함하는 로우 개수로 정의된다. 따라서 "M+i"는 프로덕트 코드워드를 구성하는 모든 로우 개수로 정의된다. 이에 따라 "M"은 "4"로 설정되고, "i"는 "2"로 설정되며, "M+i"는 "6"으로 설정된다. 단계 468-5의 판단에서, 카운터값이 프로덕트 코드워드를 구성하는 모든 로우 개수(M+i)인 "6"과 같지 않으므로, 단계 468-2부터의 과정을 다시 수행한다. 즉 두번째 로우의 프로덕트 코드워드(PCWR2)에 대해 단계 468-2 내지 단계 468-5를 수행한다. 마찬가지로, 세번째 로우의 프로덕트 코드워드(PCWR3), 네번째 로우의 프로덕트 코드워드(PCWR4), 다섯번째 로우의 프로덕트 코드워드(PCWR5), 및 여섯번째 로우의 프로덕트 코드워드(PCWR6) 각각에 대해서도 단계 468-2 내지 단계 468-5가 수행된다. 프로덕트 코드워드를 도 56의 단계 468-5의 판단에서, 카운터값이 프로덕트 코드워드를 구성하는 모든 로우 개수(M+i)인 "6"과 같은 경우, 즉 프로덕트 코드워드(PCW)를 구성하는 모든 로우 프로덕트 코드워드들(PCWR1-PCWR6)에 대해 단계 468-2 내지 단계 468-5를 반복하여 수행한 후에는, 도 58에 나타낸 바와 같이, 메모리 미디어(200) 내에는 제1 버퍼(331)에 저장된 형태와 동일하게 프로덕트 코드워드(PCW)가 저장된다.
도 59는 도 1의 메모리 시스템에서 제2 에러정정모드로 수행되는 에러정정동작의 다른 예를 나타내 보인 플로챠트이다. 그리고 도 60 내지 도 62는 도 59의 에러정정동작의 일 예를 설명하기 위해 나타내 보인 도면들이다. 본 예에서 ECC 인코더(311) 및 ECC 디코더(312)의 에러정정능력은 "1"인 경우, 즉 최대 1개의 데이터심볼에 대해서 에러정정이 가능한 경우를 예로 들기로한다. 도 59 내지 도 62를 참조하면, 도 1 내지 도 58을 참조하여 설명한 바와 같이 제2 에러정정모드로의 에러정정동작을 수행한다(단계 510). 제2 에러정정모드로의 에러정정동작을 통해 에러가 정정되었는지의 여부를 판단한다(단계 520). 단계 520의 판단에서 에러가 정정되지 않은 경우, 로우 방향의 에러정정동작과 컬럼 방향의 에러정정동작의 순서를 변경하여 제2 에러정정모드에서의 에러정정동작을 수행한다(단계 530). 도 60에 나타낸 바와 같이, 첫번째 로우의 프로덕트 코드워드(PCWR1)를 구성하는 데이터심볼들 중 첫번째 컬럼의 데이터심볼(DS00) 및 두번째 컬럼의 데이터심볼(DS01)에 에러가 발생되고, 두번째 로우의 프로덕트 코드워드(PCWR2)를 구성하는 데이터심볼들 중 두번째 컬럼의 데이터심볼(DS11) 및 세번째 컬럼의 데이터심볼(DS12)에 에러가 발생되는 경우를 예로 들기로 한다. 이 경우, 첫번째 로우의 프로덕트 코드워드(PCWR1)에 대한 로우 방향으로의 ECC 디코딩을 수행하더라도, 데이터심볼들(DS00, DS01)에 대한 에러는 정정되지 않는다. 마찬가지로 두번째 로우의 프로덕트 코드워드(PCWR2)에 대한 로우 방향으로의 ECC 디코딩을 수행하더라도, 데이터심볼들(DS11, DS12)에 대한 에러는 정정되지 않는다. 이어서 첫번째 컬럼의 프로덕트 코드워드(PCWC1)에 대한 컬럼 방향의 ECC 디코딩에 의해, 데이터심볼(DS00)에 대한 에러는 정정된다. 마찬가지로 세번째 컬럼의 프로덕트 코드워드(PCWC3)에 대한 컬럼 방향의 ECC 디코딩에 의해, 데이터심볼(DS12)에 대한 에러는 정정된다. 그러나 두번째 컬럼의 프로덕트 코드워드(PCWC2)에 대한 컬럼 방향의 ECC 디코딩을 수행하더라도, 데이터심볼들(DS01, DS11)에 대한 에러는 여전히 정정되지 않는다.
따라서 이 경우 도 61에 나타낸 바와 같이, 컬럼 방향으로의 ECC 디코딩을 먼저 수행하고, 다음에 로우 방향으로의 ECC 디코딩을 수행한다. 즉 첫번째 컬럼의 프로덕트 코드워드(PCWC1)에 대한 컬럼 방향으로의 ECC 디코딩을 수행한다. 이 과정을 통해 데이터심볼(DS00)의 에러는 정정된다. 다음에 두번째 컬럼의 프로덕트 코드워드(PCWC2)에 대한 컬럼 방향으로의 ECC 디코딩을 수행한다. 이 과정을 통해 데이터심볼들(DS01, DS11)의 에러는 정정되지 않는다. 다음에 세번째 컬럼의 프로덕트 코드워드(PCWC3)에 대한 컬럼 방향으로의 ECC 디코딩을 수행한다. 이 과정을 통해 데이터심볼(DS12)의 에러는 정정된다. 네번째 컬럼의 프로덕트 코드워드(PCWC4)에 대해서도 컬럼 방향의 ECC 디코딩이 수행된다.
다음에 도 62에 나타낸 바와 같이, 로우 방향으로의 ECC 디코딩을 수행한다. 즉 첫번째 로우의 프로덕트 코드워드(PCWR1)에 대한 로우 방향으로의 ECC 디코딩을 수행한다. 이 과정을 통해 데이터심볼(DS01)의 에러는 정정될 수 있다. 다음에 두번째 로우의 프로덕트 코드워드(PCWR2)에 대한 로우 방향으로의 ECC 디코딩을 수행한다. 이 과정을 통해 데이터심볼(DS11)의 에러도 정정될 수 있다. 나머지 로우의 프로덕트 코드워드들(PCWR3, PCWR4, PCWR5, PCWR6) 각각에 대해서도 로우 방향의 ECC 디코딩이 수행된다. 이와 같이 컬럼 방향으로의 ECC 디코딩을 먼저 수행하고, 로우 방향으로의 ECC 디코딩을 수행함으로써 에러가 발생된 모든 데이터심볼들의 에러를 정정할 수 있다. 다음에 다시 제2 에러정정모드로의 에러정정동작을 통해 에러가 정정되었는지의 여부를 판단한다(단계 540). 단계 540의 판단에서 여전히 에러가 정정되지 않은 경우 에러정정 불가로 판정하고 종료한다(단계 550).
도 63은 도 1의 메모리 시스템에서 제2 에러정정모드로 수행되는 에러정정동작의 또 다른 예를 나타내 보인 플로챠트이다. 그리고 도 64 및 도 65는 도 63의 에러정정동작의 일 예를 설명하기 위해 나타내 보인 도면들이다. 본 예에서도 ECC 인코더(311) 및 ECC 디코더(312)의 에러정정능력은 "1"인 경우, 즉 최대 1개의 데이터심볼에 대해서 에러정정이 가능한 경우를 예로 들기로한다. 도 63 내지 65를 참조하면, 도 1 내지 도 58을 참조하여 설명한 바와 같이 제2 에러정정모드로의 에러정정동작을 수행한다(단계 610). 제2 에러정정모드로의 에러정정동작을 통해 에러가 정정되었는지의 여부를 판단한다(단계 620). 단계 620의 판단에서 에러가 정정되지 않은 경우, 일부 로우의 데이터심볼들에 대해 로우 방향으로 저장 위치를 변경시킨 후에 제2 에러정정모드로의 에러정정동작을 수행한다(단계 630). 구체적으로 도 64에 나타낸 바와 같이, 첫번째 로우의 프로덕트 코드워드(PCWR1)를 구성하는 데이터심볼들 중 첫번째 컬럼의 데이터심볼(DS00) 및 두번째 컬럼의 데이터심볼(DS01)에 에러가 발생되고, 두번째 로우의 프로덕트 코드워드(PCWR2)를 구성하는 데이터심볼들 중 첫번째 컬럼의 데이터심볼(DS10) 및 두번째 컬럼의 데이터심볼(DS11)에 에러가 발생되는 경우를 예로 들기로 한다. 이 경우, 첫번째 로우의 프로덕트 코드워드(PCWR1)에 대한 로우 방향으로의 ECC 디코딩을 수행하더라도, 데이터심볼들(DS00, DS01)에 대한 에러는 정정되지 않는다. 마찬가지로 두번째 로우의 프로덕트 코드워드(PCWR2)에 대한 로우 방향으로의 ECC 디코딩을 수행하더라도, 데이터심볼들(DS10, DS11)에 대한 에러는 정정되지 않는다. 이어서 첫번째 컬럼의 프로덕트 코드워드(PCWC1)에 대한 컬럼 방향의 ECC 디코딩을 수행하더라도, 데이터심볼들(DS00, DS10)에 대한 에러는 정정되지 않는다. 마찬가지로 두번째 컬럼의 프로덕트 코드워드(PCWC2에 대한 컬럼 방향의 ECC 디코딩을 수행하더라도, 데이터심볼들(DS01, DS11)에 대한 에러는 정정되지 않는다.
따라서 이 경우 도 65에 나타낸 바와 같이, 두번째 로우부터 네번째 로우까지 데이터심볼의 저장 위치를 로우 방향으로 변경시킨다. 일 예에서 두번째 로우의 데이터심볼들의 경우, 첫번째 컬럼의 데이터심볼(DS10)이 두번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 두번째 컬럼의 데이터심볼(DS11)은 세번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 세번째 컬럼의 데이터심볼(DS12)은 네번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 그리고 데이터심볼을 포함하는 마지막 컬럼인 네번째 컬럼의 데이터심볼(DS13)은 첫번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 이와 같은 위치 변경에 따라 에러가 발생된 데이터심볼(DS10)은 첫번째 컬럼에서 두번째 컬럼으로 위치가 변경되며, 데이터심볼(DS11)은 두번째 컬럼에서 세번째 컬럼으로 위치가 변경된다.
세번째 로우의 데이터심볼들의 경우, 첫번째 컬럼의 데이터심볼(DS20)이 세번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 두번째 컬럼의 데이터심볼(DS21)은 네번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 세번째 컬럼의 데이터심볼(DS22)은 첫번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 그리고 네번째 컬럼의 데이터심볼(DS23)은 두번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 마찬가지로 네번째 로우의 데이터심볼들의 경우, 첫번째 컬럼의 데이터심볼(DS30)이 네번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 두번째 컬럼의 데이터심볼(DS31)은 첫번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 세번째 컬럼의 데이터심볼(DS32)은 두번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 그리고 네번째 컬럼의 데이터심볼(DS33)은 세번째 컬럼에 위치하도록 저장 위치를 변경시킨다. 데이터심볼들의 저장 위치를 변경시킨 후에는, 각 데이터심볼의 변경된 컬럼 어드레스가 적절하게 맵핑될 수 있도록 어드레스 맵핑 과정을 수행할 수 있다.
데이터심볼들의 위치를 변경한 후에, 에러정정동작의 방향을 변경할 필요가 있는지의 여부를 판단한다(단계 640). 단계 640의 판단에서, 에러정정동작의 방향을 변경할 필요가 없는 경우, 로우 방향 및 컬럼 방향의 순서 변경 없이 도 1 내지 도 58을 참조하여 설명한 바와 같이, 제2 에러정정모드에서의 에러정정동작, 즉 로우 방향으로의 ECC 디코딩을 먼저 수행하고, 다음에 컬럼 방향으로의 ECC 디코딩을 수행한다. 단계 640의 판단에서, 에러정정동작의 방향을 변경할 필요가 있는 경우, 도 61 및 도 62를 참조하여 설명한 바와 같이, 순서가 변경된 제2 에러정정모드에서의 에러정정동작, 즉 컬럼 방향으로의 ECC 디코딩을 먼저 수행하고, 다음에 로우 방향으로의 ECC 디코딩을 수행함으로써, 데이터심볼의 모든 에러가 정정되도록 할 수 있다.
상술한 바와 같이 본 출원의 실시 형태들을 도면들을 예시하며 설명하지만, 이는 본 출원에서 제시하고자 하는 바를 설명하기 위한 것이며, 세밀하게 제시된 형상으로 본 출원에서 제시하고자 하는 바를 한정하고자 한 것은 아니다.
100...메모리 시스템 200...메모리 미디어
300...메모리 컨트롤러 301...미디어측 물리층
302...호스트측 물리층 310...ECC 엔진
311...ECC 인코더 312...ECC 디코더
320...데이터 관리부 331...제1 버퍼
332...제2 버퍼 341-343...제1 내지 제3 멀티플렉서
344-346...제1 내지 제3 디멀티플렉서
350...명령제어부 360...스케줄러
370...PC(Product Code) 제어부 380...마이크로컨트롤러(MCU)
390...에러 로그 PC...프로덕트 코드
PCR...로우 프로덕트 코드 PCC...컬럼 프로덕트 코드
PCW...프로덕트 코드워드 PCWR...로우 프로덕트 코드워드
PCWC...컬럼 프로덕트 코드워드 DS...데이터심볼
PS...패리티심볼

Claims (26)

  1. 복수개의 로우들 및 컬럼들의 교차점들 각각에 데이터심볼 또는 패리티심볼이 배치되어 구성되는 메모리 미디어; 및
    상기 메모리 미디어에 대한 액세스 과정에서 고정된 에러정정레벨에 따른 에러정정동작을 수행하도록 설계된 에러정정코드(ECC) 엔진을 갖는 메모리 컨트롤러를 포함하되,
    상기 메모리 컨트롤러는,
    제1 에러정정모드에서 상기 에러정정코드(ECC) 엔진을 이용하여 상기 고정된 에러정정레벨에 따른 에러정정동작을 수행하고, 그리고
    일정 조건에서 상기 제1 에러정정모드에서 제2 에러정정모드로 전환하고, 상기 제2 에러정정모드에서 상기 에러정정코드(ECC) 엔진을 이용하여 상기 고정된 에러정정레벨보다 높은 에러정정레벨의 에러정정동작을 수행하도록 구성되며,
    상기 메모리 컨트롤러는, 상기 제2 에러정정모드에서의 에러정정동작을 수행하여, 데이터심볼들 및 패리티심볼들로 구성되는 M개(M은 자연수)의 로우 프로턱트 코드워드와 패리티심볼들로 구성되는 i개(i는 자연수)의 로우 프로덕트 코드워드들, 및 데이터심볼들 및 패리티심볼들로 구성되는 N개(N은 자연수)의 컬럼 프로덕트 코드워드와 패리티심볼들로 구성되는 j개(j는 자연수)의 컬럼 프로덕트 코드워드들로 구성되는 프로덕트 코드워드를 상기 메모리 미디어에 저장하되,
    상기 M개의 로우 프로덕트 코드워드들 중 L번(L은 M보다 같거나 작은 자연수)째 로우 프로덕트 코드워드의 데이터심볼들에 대한 읽기 명령이 발생되면,
    상기 M개의 로우 프로덕트 코드워드들 각각에 대한 로우 방향의 에러정정코드(ECC) 디코딩을 수행하고,
    상기 (N+j)개의 컬럼 프로덕트 코드워드들 각각에 대한 컬럼 방향의 에러정정코드(ECC) 디코딩을 수행하며, 그리고
    상기 컬럼 방향의 에러정정코드(ECC) 디코딩된 결과에서 상기 L번째 로우 프로덕트 코드워드에 대한 로우 방향의 에러정정코드(ECC) 디코딩을 수행하여 호스트로 전송하는 메모리 시스템.
  2. ◈청구항 2은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 메모리 미디어의 로우들 중 적어도 M개의 로우들 각각은 데이터심볼들 및 패리티심볼들로 구성되고, i개의 로우들 각각은 패리티심볼들로만 구성되며, 그리고
    상기 메모리 미디어의 컬럼들 중 적어도 N개의 컬럼들 각각은 데이터심볼들 및 패리티심볼들로 구성되고, j개의 컬럼들 각각은 패리티심볼들로만 구성되는 메모리 시스템.
  3. ◈청구항 3은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서, 상기 메모리 컨트롤러는,
    상기 메모리 미디어에 대한 액세스 과정에서 발생되는 에러 개수가 설정값보다 작은 경우 상기 제1 에러정정모드의 에러정정동작을 수행하고, 그리고
    상기 메모리 미디어에 대한 액세스 과정에서 발생되는 에러 개수가 설정값 이상인 경우 상기 제2 에러정정모드의 에러정정동작을 수행하는 메모리 시스템.
  4. ◈청구항 4은(는) 설정등록료 납부시 포기되었습니다.◈
    제3항에 있어서,
    상기 설정값은 상기 고정된 에러정정레벨에 의해 고정된 에러정정능력보다 같거나 작은값으로 설정되는 메모리 시스템.
  5. ◈청구항 5은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서, 상기 에러정정코드(ECC) 엔진은,
    상기 메모리 미디어에 대한 쓰기 과정에서, 쓰기 데이터심볼들에 대한 에러정정코드(ECC) 인코딩을 수행하여 상기 쓰기 데이터심볼들 및 패리티심볼들을 포함하는 코드워드를 출력하는 에러정정코드(ECC) 인코더; 및
    상기 메모리 미디어에 대한 읽기 과정에서, 상기 코드워드에 대한 에러정정코드(ECC) 디코딩을 수행하여 에러가 정정된 읽기 데이터심볼들을 출력하는 에러정정코드(ECC) 디코더를 포함하는 메모리 시스템.
  6. ◈청구항 6은(는) 설정등록료 납부시 포기되었습니다.◈
    제5항에 있어서,
    상기 에러정정코드(ECC) 인코딩에 의해 생성되는 상기 패리티심볼들의 개수와, 상기 에러정정코드(ECC) 디코딩에 의해 에러가 정정될 수 있는 데이터심볼의 개수는 상기 고정된 에러정정레벨에 의해 고정값으로 정해져 있는 메모리 시스템.
  7. ◈청구항 7은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서, 상기 메모리 컨트롤러는,
    어느 하나의 로우를 구성하는 데이터심볼들 및 패리티심볼들에 대해 상기 제1 에러정정모드에서의 에러정정동작을 수행하고, 그리고
    상기 복수개의 로우들 각각을 공유하는 데이터심볼들 및 패리티심볼들과, 복수개의 컬럼들 각각을 공유하는 데이터심볼들 또는 패리티심볼들로 구성되는 프로덕트 코드에 대해 상기 제2 에러정정모드에서의 에러정정동작을 수행하는 메모리 시스템.
  8. ◈청구항 8은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 메모리 컨트롤러는, 상기 제1 에러정정모드에서 상기 제2 에러정정모드로 전환되면, (M+i)개의 로우 프로덕트 코드들 및 (N+j)개의 컬럼 프로덕트 코드들로 구성되는 프로덕트 코드를 생성하되,
    M개의 로우 프로덕트 코드들 각각은 로우를 공유하는 데이터심볼들 및 패리티심볼들로 구성되고,
    i개의 로우 프로덕트 코드들 각각은 패리티 비트값을 갖지 않은 패리티심볼들로 구성되고,
    N개의 컬럼 프로덕트 코드들 각각은 컬럼을 공유하는 데이터심볼들 및 패리티 비트값을 갖지 않는 패리티심볼들로 구성되며, 그리고
    j개의 컬럼 프로덕트 코드들 각각은 컬럼을 공유하는 패리티심볼들로 구성되는 메모리 시스템.
  9. ◈청구항 9은(는) 설정등록료 납부시 포기되었습니다.◈
    제8항에 있어서, 상기 메모리 컨트롤러는,
    상기 M개의 로우 프로덕트 코드들 각각에 대한 로우 방향의 에러정정코드(ECC) 디코딩, 및 에러정정코드(ECC) 디코딩된 데이터심볼들에 대한 로우 방향의 에러정정코드(ECC) 인코딩을 수행하여, M개의 로우 프로덕트 코드워드들을 생성하는 메모리 시스템.
  10. ◈청구항 10은(는) 설정등록료 납부시 포기되었습니다.◈
    제9항에 있어서, 상기 메모리 컨트롤러는,
    제1 버퍼에 저장된 N개의 컬럼들 각각의 데이터심볼들 및 j개의 컬럼들 각각의 패리티심볼에 대해 컬럼 방향의 에러정정코드(ECC) 인코딩을 수행하여, (N+j)개의 컬럼 프로덕트 코드워드들 및 i개의 로우 프로덕트 코드워드들을 생성하는 메모리 시스템.
  11. ◈청구항 11은(는) 설정등록료 납부시 포기되었습니다.◈
    제10항에 있어서, 상기 메모리 컨트롤러는,
    상기 (M+i)개의 로우 프로덕트 코드워드들 및 상기 (N+j)개의 컬럼 프로덕트 코드워드들로 구성되는 프로덕트 코드워드를 상기 메모리 미디어에 저장하는 메모리 시스템.
  12. ◈청구항 12은(는) 설정등록료 납부시 포기되었습니다.◈
    제11항에 있어서, 상기 메모리 컨트롤러는,
    상기 제2 에러정정모드에서, 상기 (M+i)개의 로우 프로덕트 코드워드들에 대한 로우 방향의 에러정정동작들 및 상기 (N+j)개의 컬럼 프로덕트 코드워드들에 대한 컬럼 방향의 에러정정동작들을 순차적으로 수행하는 메모리 시스템.
  13. ◈청구항 13은(는) 설정등록료 납부시 포기되었습니다.◈
    제11항에 있어서, 상기 메모리 컨트롤러는,
    상기 제2 에러정정모드에서, 상기 (N+j)개의 컬럼 프로덕트 코드워드들에 대한 컬럼 방향의 에러정정동작들 및 상기 (M+i)개의 로우 프로덕트 코드워드들에 대한 로우 방향의 에러정정동작들을 순차적으로 수행하는 메모리 시스템.
  14. ◈청구항 14은(는) 설정등록료 납부시 포기되었습니다.◈
    제11항에 있어서, 상기 메모리 컨트롤러는,
    상기 제2 에러정정모드에서, 상기 M개의 로우 프로덕트 코드워드들 중 적어도 하나 이상의 로우 프로덕트 코드워드의 데이터심볼을 로우 방향으로 쉬프트시킨 후에 상기 제2 에러정정모드에서의 에러정정동작을 수행하는 메모리 시스템.
  15. 삭제
  16. ◈청구항 16은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 M개의 로우 프로덕트 코드워드들 중 L번째(L은 M보다 같거나 작은 자연수) 로우 프로덕트 코드워드의 로우 어드레스를 갖는 저장영역으로의 쓰기 명령이 발생되면,
    상기 M개의 로우 프로덕트 코드워드들 각각에 대한 첫번째 로우 방향의 에러정정코드(ECC) 디코딩을 수행하고,
    상기 (N+j)개의 컬럼 프로덕트 코드워드들 각각에 대한 컬럼 방향의 에러정정코드(ECC) 디코딩을 수행하고,
    상기 M개의 로우 프로덕트 코드워드들 각각에 대한 두번째 로우 방향의 에러정정코드(ECC) 디코딩을 수행하고,
    상기 두번째 로우 방향의 에러정정코드(ECC) 디코딩된 데이터심볼들 중 L번째 로우의 데이터심볼들에 쓰기 데이터심볼들을 병합시키고,
    병합이 이루어진 데이터심볼들에 대해 로우를 공유하는 데이터심볼들 단위로 로우 방향의 에러정정코드(ECC) 인코딩을 수행하고,
    상기 로우 방향의 에러정정코드(ECC) 인코딩된 데이터심볼들 및 패리티심볼들에 대해 컬럼을 공유하는 데이터심볼들 및 패리티심볼들 단위로 컬럼 방향의 에러정정코드(ECC) 인코딩을 수행하며, 그리고
    상기 컬럼 방향의 에러정정코드(ECC) 인코딩된 데이터심볼들 및 패리티심볼들을 상기 메모리 미디어에 전송하는 메모리 시스템.
  17. ◈청구항 17은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서, 상기 메모리 컨트롤러는,
    상기 메모리 미디어에 대한 액세스 과정에서 데이터를 임시로 저장하는 데이터 관리부;
    상기 메모리 미디어에 대한 쓰기 과정에서, 쓰기 데이터심볼들에 대한 에러정정코드(ECC) 인코딩을 수행하여 상기 쓰기 데이터심볼들 및 패리티심볼들을 포함하는 코드워드를 출력하는 에러정정코드(ECC) 인코더;
    상기 메모리 미디어에 대한 읽기 과정에서, 상기 코드워드에 대한 에러정정코드(ECC) 디코딩을 수행하여 에러가 정정된 읽기 데이터심볼들을 출력하는 에러정정코드(ECC) 디코더;
    상기 에러정정코드(ECC)에 의한 에러정정코드(ECC) 디코딩에 의한 에러 관련 정보를 입력받아 저장하는 에러 로그;
    상기 에러 로그에 저장된 에러 관련 정보를 분석하여 상기 제1 에러정정모드에서 상기 제2 에러정정모드로의 전환 여부를 결정하는 마이크로컨트롤러;
    상기 마이크로컨트롤러에 의한 제2 에러정정모드로의 전환에 따라 상기 제2 에러정정모드에서의 에러정정동작에 필요한 제어신호들을 발생시키는 프로덕트 코드 제어부;
    상기 제2 에러정정모드에서 상기 에러정정코드(ECC) 인코더로부터 출력되는 데이터를 저장하는 제1 버퍼; 및
    상기 제2 에러정정모드에서 상기 에러정정코드(ECC) 디코더로부터 출력되는 데이터를 저장하는 제2 버퍼를 포함하는 메모리 시스템.
  18. ◈청구항 18은(는) 설정등록료 납부시 포기되었습니다.◈
    제17항에 있어서,
    상기 제1 버퍼 및 제2 버퍼는 로우 방향으로의 데이터 액세스 및 컬럼 방향으로의 데이터 액세스가 모두 가능하도록 구성되는 메모리 시스템.
  19. ◈청구항 19은(는) 설정등록료 납부시 포기되었습니다.◈
    제17항에 있어서,
    상기 프로덕트 코드 제어부로부터의 제어신호에 응답하여, 상기 메모리 미디어로부터의 데이터 또는 상기 제2 버퍼로부터의 데이터를 상기 에러정정코드(ECC) 디코더로 입력시키는 제1 멀티플렉서;
    상기 프로덕트 코드 제어부로부터의 제어신호에 응답하여, 상기 에러정정코드(ECC) 인코더로부터의 데이터를 상기 제1 버퍼 또는 상기 메모리 미디어로 전송하는 제1 디멀티플렉서;
    상기 프로덕트 코드 제어부로부터의 제어신호에 응답하여, 상기 에러정정코드(ECC) 디코더로부터 출력되는 데이터를 입력받아 제1 출력라인을 통해 상기 제2 버퍼에 전송하거나 제2 출력라인으로 출력시키는 제2 디멀티플렉서;
    상기 프로덕트 코드 제어부로부터의 제어신호에 응답하여, 상기 제2 디멀티플렉서의 상기 제2 출력라인으로부터 출력되는 데이터를 입력받아 제1 출력라인을 통해 상기 데이터 관리부로 전송하거나 제2 출력라인으로 출력시키는 제3 디멀티플렉서;
    상기 프로덕트 코드 제어부로부터의 제어신호에 응답하여, 상기 제3 디멀티플렉서의 상기 제2 출력라인으로부터 출력되는 데이터 또는 상기 데이터 관리부로부터 출력되는 데이터를 출력하는 제2 멀티플렉서; 및
    상기 프로덕트 코드 제어부로부터의 제어신호에 응답하여, 상기 제2 멀티플렉서로부터 출력되는 데이터 또는 상기 제1 버퍼로부터 출력되는 데이터를 상기 에러정정코드(ECC) 인코더에 입력시키는 제3 멀티플렉서를 더 포함하는 메모리 시스템.
  20. ◈청구항 20은(는) 설정등록료 납부시 포기되었습니다.◈
    제18항에 있어서,
    상기 에러정정코드(ECC) 인코더는, 상기 프로덕트 코드 제어부로부터의 인코딩 디스에이블 제어신호에 응답하여, 입력되는 데이터에 대한 에러정정코드(ECC) 인코딩을 수행하지 않고 출력시키도록 구성되고, 그리고
    상기 에러정정코드(ECC) 디코더는, 상기 프로덕트 코드 제어부로부터의 디코딩 디스에이블 제어신호에 응답하여, 입력되는 데이터에 대한 에러정정코드(ECC) 디코딩을 수행하지 않고 출력시키도록 구성되는 메모리 시스템.
  21. 복수개의 로우들 및 컬럼들의 교차점들 각각에 데이터심볼 또는 패리티심볼이 배치되어 구성되는 메모리 미디어; 및
    상기 메모리 미디어에 대한 액세스 과정에서 고정된 에러정정레벨에 따른 제1 에러정정모드에서의 에러정정동작을 수행하도록 설계된 에러정정코드(ECC) 엔진을 갖는 메모리 컨트롤러를 포함하되,
    상기 메모리 컨트롤러는,
    상기 제1 에러정정모드에서 에러가 정정되지 않는 경우 제2 에러정정모드로 전환하여, 데이터심볼들 및 패리티심볼들로 구성되는 M개(M은 자연수)의 로우 프로턱트 코드워드와 패리티심볼들로 구성되는 i개(i는 자연수)의 로우 프로덕트 코드워드들, 및 데이터심볼들 및 패리티심볼들로 구성되는 N개(N은 자연수)의 컬럼 프로덕트 코드워드와 패리티심볼들로 구성되는 j개(j는 자연수)의 컬럼 프로덕트 코드워드들로 구성되는 프로덕트 코드워드를 생성하고, 생성된 상기 프로덕트 코드워드를 대상으로 에러정정코드(ECC) 엔진을 이용한 에러정정동작을 수행하도록 구성되며,
    상기 메모리 컨트롤러는,
    상기 M개의 로우 프로덕트 코드워드들 중 L번째(L은 M보다 같거나 작은 자연수) 로우 프로덕트 코드워드의 로우 어드레스를 갖는 저장영역으로의 쓰기 명령이 발생되면,
    상기 M개의 로우 프로덕트 코드워드들 각각에 대한 첫번째 로우 방향의 에러정정코드(ECC) 디코딩을 수행하고,
    상기 (N+j)개의 컬럼 프로덕트 코드워드들 각각에 대한 컬럼 방향의 에러정정코드(ECC) 디코딩을 수행하고,
    상기 M개의 로우 프로덕트 코드워드들 각각에 대한 두번째 로우 방향의 에러정정코드(ECC) 디코딩을 수행하고,
    상기 두번째 로우 방향의 에러정정코드(ECC) 디코딩된 데이터심볼들 중 L번째 로우의 데이터심볼들에 쓰기 데이터심볼들을 병합시키고,
    병합이 이루어진 데이터심볼들에 대해 로우를 공유하는 데이터심볼들 단위로 로우 방향의 에러정정코드(ECC) 인코딩을 수행하고,
    상기 로우 방향의 에러정정코드(ECC) 인코딩된 데이터심볼들 및 패리티심볼들에 대해 컬럼을 공유하는 데이터심볼들 및 패리티심볼들 단위로 컬럼 방향의 에러정정코드(ECC) 인코딩을 수행하며, 그리고
    상기 컬럼 방향의 에러정정코드(ECC) 인코딩된 데이터심볼들 및 패리티심볼들을 상기 메모리 미디어에 전송하는 메모리 시스템.
  22. ◈청구항 22은(는) 설정등록료 납부시 포기되었습니다.◈
    제21항에 있어서, 상기 메모리 컨트롤러는,
    (M+i)개의 로우 프로덕트 코드들 및 (N+j)개의 컬럼 프로덕트 코드들로 구성되는 프로덕트 코드를 생성하고,
    상기 로우 프로덕트 코드들 중 데이터심볼을 포함하는 로우 프로덕트 코드들에 대한 로우 방향의 에러정정코드(ECC) 인코딩을 수행하여 상기 로우 프로덕트 코드워드들을 생성하고,
    상기 컬럼 프로덕트 코드들에 대한 컬럼 방향의 에러정정코드(ECC) 인코딩을 수행하여 상기 컬럼 프로덕트 코드워드들을 생성하며, 그리고
    상기 로우 프로덕트 코드워드들 및 컬럼 프로덕트 코드워드들로 이루어진 프로덕트 코드워드를 상기 메모리 미디어에 쓰도록 구성되는 메모리 시스템.
  23. ◈청구항 23은(는) 설정등록료 납부시 포기되었습니다.◈
    제21항에 있어서, 상기 메모리 컨트롤러는,
    상기 M개의 로우 프로덕트 코드워드들 중 L번(L은 M보다 같거나 작은 자연수)째 로우 프로덕트 코드워드의 데이터심볼들에 대한 읽기 명령이 발생되면,
    상기 M개의 로우 프로덕트 코드워드들 각각에 대한 제1 로우 방향의 에러정정코드(ECC) 디코딩을 수행하고,
    상기 (N+j)개의 컬럼 프로덕트 코드워드들 각각에 대한 컬럼 방향의 에러정정코드(ECC) 디코딩을 수행하며, 그리고
    상기 컬럼 방향의 에러정정코드(ECC) 디코딩된 결과에서 상기 L번째 로우 프로덕트 코드워드에 대한 제2 로우 방향의 에러정정코드(ECC) 디코딩을 수행하여 호스트로 전송하는 메모리 시스템.
  24. 삭제
  25. 삭제
  26. 삭제
KR1020180023020A 2018-02-26 2018-02-26 고정된 에러정정능력의 에러정정코드 엔진을 이용하여 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템 Active KR102511903B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020180023020A KR102511903B1 (ko) 2018-02-26 2018-02-26 고정된 에러정정능력의 에러정정코드 엔진을 이용하여 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템
TW107142019A TWI787401B (zh) 2018-02-26 2018-11-26 使用具有固定的錯誤校正能力的錯誤校正碼引擎來執行可重組態的錯誤校正操作之記憶體系統
US16/203,362 US10847246B2 (en) 2018-02-26 2018-11-28 Memory systems performing reconfigurable error correction operation using ECC engine with fixed error correction capability
CN201811477683.4A CN110196783B (zh) 2018-02-26 2018-12-05 使用ecc引擎执行可重配置的错误校正操作的存储系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180023020A KR102511903B1 (ko) 2018-02-26 2018-02-26 고정된 에러정정능력의 에러정정코드 엔진을 이용하여 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템

Publications (2)

Publication Number Publication Date
KR20190102533A KR20190102533A (ko) 2019-09-04
KR102511903B1 true KR102511903B1 (ko) 2023-03-21

Family

ID=67751419

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180023020A Active KR102511903B1 (ko) 2018-02-26 2018-02-26 고정된 에러정정능력의 에러정정코드 엔진을 이용하여 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템

Country Status (4)

Country Link
US (1) US10847246B2 (ko)
KR (1) KR102511903B1 (ko)
CN (1) CN110196783B (ko)
TW (1) TWI787401B (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210010718A (ko) * 2019-07-17 2021-01-28 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템에서의 에러정정방법
US10963336B2 (en) 2019-08-29 2021-03-30 Micron Technology, Inc. Semiconductor device with user defined operations and associated methods and systems
US11200118B2 (en) 2019-08-29 2021-12-14 Micron Technology, Inc. Semiconductor device with modified command and associated methods and systems
US11042436B2 (en) 2019-08-29 2021-06-22 Micron Technology, Inc. Semiconductor device with modified access and associated methods and systems
KR102784280B1 (ko) * 2019-10-31 2025-03-21 삼성전자주식회사 메모리 컨트롤러, 메모리 시스템 및 메모리 모듈
DE102020134945A1 (de) 2020-02-27 2021-09-02 Taiwan Semiconductor Manufacturing Co., Ltd. Dynamische fehlerüberwachung und -reparatur
CN113495674B (zh) 2020-04-01 2023-10-10 长鑫存储技术有限公司 读写方法及存储器装置
CN113495671B (zh) 2020-04-01 2023-10-17 长鑫存储技术有限公司 读写方法及存储器装置
EP3985494B1 (en) 2020-04-01 2024-01-17 Changxin Memory Technologies, Inc. Read-write method and memory device
CN113495675B (zh) 2020-04-01 2023-08-11 长鑫存储技术有限公司 读写方法及存储器装置
EP3936996A4 (en) 2020-04-01 2022-07-06 Changxin Memory Technologies, Inc. READ-WRITE METHOD AND STORAGE DEVICE
EP3964941B1 (en) 2020-04-01 2024-02-28 Changxin Memory Technologies, Inc. Read-write method and memory device
EP3964940A4 (en) 2020-04-01 2022-08-17 Changxin Memory Technologies, Inc. READ/WRITE METHOD AND STORAGE DEVICE
CN113495672B (zh) 2020-04-01 2023-08-11 长鑫存储技术有限公司 读写方法及存储器装置
US11675731B2 (en) * 2020-08-20 2023-06-13 Global Unichip Corporation Data protection system and method thereof for 3D semiconductor device
US11972822B2 (en) 2021-09-24 2024-04-30 Sandisk Technologies Llc Programmable ECC for MRAM mixed-read scheme

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150169397A1 (en) * 2013-12-16 2015-06-18 International Business Machines Corporation Extension of product codes with applications to tape and parallel channels
US20150309875A1 (en) * 2014-04-25 2015-10-29 International Business Machines Corporation Error-correction encoding and decoding

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4653051A (en) * 1983-09-14 1987-03-24 Matsushita Electric Industrial Co., Ltd. Apparatus for detecting and correcting errors on product codes
US6048090A (en) * 1997-04-23 2000-04-11 Cirrus Logic, Inc. Error correction and concurrent verification of a product code
JP2000349652A (ja) * 1999-06-07 2000-12-15 Hitachi Ltd 誤り訂正手段を備えた記憶装置
EP1223578A3 (en) * 2000-12-12 2008-07-16 Kabushiki Kaisha Toshiba Data processing method using error-correcting code and an apparatus using the same method
JP2005242797A (ja) * 2004-02-27 2005-09-08 Oki Electric Ind Co Ltd エラー訂正回路
US20070283223A1 (en) * 2006-06-01 2007-12-06 International Business Machines Corporation Systems, methods, and computer program products for providing a two-bit symbol bus error correcting code with all checkbits transferred last
US8046660B2 (en) * 2006-08-07 2011-10-25 Marvell World Trade Ltd. System and method for correcting errors in non-volatile memory using product codes
KR20080076613A (ko) * 2007-02-16 2008-08-20 삼성전자주식회사 연접코드를 이용한 인코더/디코더 및 그의 인코딩/디코딩방법
US8230305B2 (en) * 2009-04-02 2012-07-24 Micron Technology, Inc. Extended single-bit error correction and multiple-bit error detection
US8996958B2 (en) * 2010-01-28 2015-03-31 International Business Machines Corporation Method, device and computer program product for decoding a codeword
US8806295B2 (en) * 2012-05-24 2014-08-12 International Business Machines Corporation Mis-correction and no-correction rates for error control
KR101550762B1 (ko) * 2013-11-29 2015-09-08 한국과학기술원 연접 오류 정정 장치
US10146482B2 (en) * 2014-08-01 2018-12-04 Toshiba Memory Corporation Global error recovery system
US9606868B2 (en) * 2015-05-04 2017-03-28 International Business Machines Corporation Encoding and writing of data on multitrack tape
KR20170001777A (ko) 2015-06-25 2017-01-05 에스케이하이닉스 주식회사 컨트롤러, 반도체 메모리 시스템 및 그것의 동작 방법
US10193576B2 (en) * 2015-10-30 2019-01-29 Toshiba Memory Corporation Memory system and memory device
US9946596B2 (en) * 2016-01-29 2018-04-17 Toshiba Memory Corporation Global error recovery system
US10439649B2 (en) * 2016-02-03 2019-10-08 SK Hynix Inc. Data dependency mitigation in decoder architecture for generalized product codes for flash storage
US10201026B1 (en) * 2016-06-30 2019-02-05 Acacia Communications, Inc. Forward error correction systems and methods
US10348334B2 (en) * 2016-10-25 2019-07-09 International Business Machines Corporation Reducing a decoding error floor by post-processing codewords encoded by binary symmetry-invariant product codes
US10291258B2 (en) * 2017-05-25 2019-05-14 Advanced Micro Devices, Inc. Error correcting code for correcting single symbol errors and detecting double bit errors

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150169397A1 (en) * 2013-12-16 2015-06-18 International Business Machines Corporation Extension of product codes with applications to tape and parallel channels
US20150309875A1 (en) * 2014-04-25 2015-10-29 International Business Machines Corporation Error-correction encoding and decoding

Also Published As

Publication number Publication date
CN110196783A (zh) 2019-09-03
US20190385693A1 (en) 2019-12-19
TW201937368A (zh) 2019-09-16
US10847246B2 (en) 2020-11-24
KR20190102533A (ko) 2019-09-04
TWI787401B (zh) 2022-12-21
CN110196783B (zh) 2023-05-30

Similar Documents

Publication Publication Date Title
KR102511903B1 (ko) 고정된 에러정정능력의 에러정정코드 엔진을 이용하여 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템
US10762007B2 (en) Storage device and interface chip thereof
US10884848B2 (en) Memory device, memory system including the same and operation method of the memory system
US20130179748A1 (en) Systems and methods for error checking and correcting for memory module
EP3629482B1 (en) Decoding data using a polar code list decoder and a neural network
CN110597654A (zh) 用于超快的具有奇偶校验的纠错码的系统和方法
US11030040B2 (en) Memory device detecting an error in write data during a write operation, memory system including the same, and operating method of memory system
US9627092B2 (en) Semiconductor device performing error correction operation
US20140169091A1 (en) Memory controller, storage device, and memory control method
TWI869503B (zh) 記憶體元件以及資料讀取方法
WO2015016877A1 (en) Memory unit
US9037948B2 (en) Error correction for memory systems
US11188417B2 (en) Memory system, memory module, and operation method of memory system
JP7157516B2 (ja) 階層デコーダを使用したエラー訂正
US8683308B2 (en) Semiconductor device, information processing apparatus, and method of detecting error
US11392457B2 (en) Error correction method of a memory system
US8103934B2 (en) High speed memory error detection and correction using interleaved (8,4) LBCs
JP2020150515A (ja) 誤り訂正回路及びメモリシステム
GB2531783A (en) Method and device for removing error patterns in binary data
EP4571517A2 (en) Memory device that changes type of codeword stored in memory area and method for operating the same
US11336296B2 (en) Controller and memory system having the controller
US10365966B1 (en) Methods and systems for wordline based encoding and decoding in NAND flash
US20240022263A1 (en) Memory, memory module, memory system, and operation method of memory system
KR101734623B1 (ko) 메모리 제어 장치 및 방법
KR20250075409A (ko) 메모리 영역에 저장되는 코드워드의 타입을 변경하는 메모리 장치 및 그 방법

Legal Events

Date Code Title Description
PA0109 Patent application

Patent event code: PA01091R01D

Comment text: Patent Application

Patent event date: 20180226

PG1501 Laying open of application
A201 Request for examination
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20210208

Comment text: Request for Examination of Application

Patent event code: PA02011R01I

Patent event date: 20180226

Comment text: Patent Application

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20221117

Patent event code: PE09021S01D

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20230215

GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20230315

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20230316

End annual number: 3

Start annual number: 1

PG1601 Publication of registration