KR20240090083A - 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법 - Google Patents
메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법 Download PDFInfo
- Publication number
- KR20240090083A KR20240090083A KR1020220174036A KR20220174036A KR20240090083A KR 20240090083 A KR20240090083 A KR 20240090083A KR 1020220174036 A KR1020220174036 A KR 1020220174036A KR 20220174036 A KR20220174036 A KR 20220174036A KR 20240090083 A KR20240090083 A KR 20240090083A
- Authority
- KR
- South Korea
- Prior art keywords
- data
- error
- flip
- original data
- correction
- Prior art date
Links
- 230000015654 memory Effects 0.000 title claims abstract description 304
- 238000000034 method Methods 0.000 title claims abstract description 29
- 238000012937 correction Methods 0.000 claims abstract description 248
- 238000011017 operating method Methods 0.000 claims description 14
- 238000011010 flushing procedure Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 34
- 230000004044 response Effects 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 239000004065 semiconductor Substances 0.000 description 5
- 238000007726 management method Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000003252 repetitive effect Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000009977 dual effect Effects 0.000 description 3
- 239000003990 capacitor Substances 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 239000000919 ceramic Substances 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000006866 deterioration Effects 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000005286 illumination Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 230000003936 working memory Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1048—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0751—Error or fault detection not based on redundancy
- G06F11/0754—Error or fault detection not based on redundancy by exceeding limits
- G06F11/076—Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
- G06F11/1016—Error in accessing a memory location, i.e. addressing error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
- G06F11/102—Error in check bits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1044—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1068—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/44—Indication or identification of errors, e.g. for repair
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
본 발명에 따르면, 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법은 메모리 장치로부터 원본 데이터를 로딩하는 단계, 원본 데이터에 대한 제0 에러 정정 동작을 수행하는 단계, 제0 에러 정정 동작을 통해 원본 데이터의 에러가 정정되지 않는 경우, 정정 이력 테이블을 기반으로, 원본 데이터에 대한 제1 비트 플립 동작을 수행하여 제1 플립 데이터를 생성하는 단계, 및 제1 플립 데이터에 대한 제1 에러 정정 동작을 수행하는 단계를 포함하고, 정정 이력 테이블은 이전에 정정된 에러 비트들에 대한 메모리 장치에서의 위치들을 가리키는 정정 어드레스들을 포함한다.
Description
본 발명은 반도체 메모리에 관한 것으로, 좀 더 상세하게는, 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법에 관한 것이다.
반도체 메모리는 SRAM 장치, DRAM 장치 등과 같이 전원 공급이 차단되면 저장하고 있던 데이터가 소멸되는 휘발성 메모리 장치 및 플래시 메모리 장치, PRAM, MRAM, RRAM, FRAM 등과 같이 전원 공급이 차단되어도 저장하고 있던 데이터를 유지하는 불휘발성 메모리 장치로 구분된다.
DRAM 장치는 다양한 시스템에서, 시스템 메모리, 동작 메모리, 버퍼 메모리 등으로 널리 사용된다. DRAM 장치는 메모리 셀에 포함된 스토리지 커패시터에 전하를 충전 또는 방전함으로써, 데이터를 저장한다. 그러나 DRAM 장치가 구동함에 따라, 메모리 셀들에 저장된 데이터가 유실될 수 있으며, 이 경우, DRAM 장치의 신뢰성이 저하될 수 있다.
본 발명의 목적은 향상된 신뢰성을 갖는 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법을 제공하는데 있다.
본 발명의 일 실시 예에 따르면, 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법은 상기 메모리 장치로부터 원본 데이터를 로딩하는 단계; 상기 원본 데이터에 대한 제0 에러 정정 동작을 수행하는 단계; 상기 제0 에러 정정 동작을 통해 상기 원본 데이터의 에러가 정정되지 않는 경우, 정정 이력 테이블을 기반으로, 상기 원본 데이터에 대한 제1 비트 플립 동작을 수행하여 제1 플립 데이터를 생성하는 단계; 및 상기 제1 플립 데이터에 대한 제1 에러 정정 동작을 수행하는 단계를 포함하고, 상기 정정 이력 테이블은 이전에 정정된 에러 비트들에 대한 상기 메모리 장치에서의 위치들을 가리키는 정정 어드레스들을 포함한다.
본 발명의 일 실시 예에 따른 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법은 상기 메모리 장치로부터 제0 원본 데이터를 로딩하는 단계; 상기 제0 원본 데이터에 대한 제0 에러 정정 동작을 수행하는 단계; 상기 제0 원본 데이터에서 정정된 에러 비트에 대응하는 제0 어드레스를 기반으로 정정 이력 테이블을 갱신하는 단계; 상기 메모리 장치로부터, 상기 제0 원본 데이터의 행 어드레스와 동일한 행 어드레스를 갖는 제1 원본 데이터를 로딩하는 단계; 상기 제1 원본 데이터에 대한 제1 에러 정정 동작을 수행하는 단계; 상기 제1 원본 데이터의 에러가 정정되지 않는 경우, 상기 정정 이력 테이블을 기반으로 상기 제1 원본 데이터에서 상기 제0 어드레스에 대응하는 비트를 플립하여 제1 플립 데이터를 생성하는 단계; 및 상기 제1 플립 데이터에 대한 제2 에러 정정 동작을 수행하는 단계를 포함한다.
본 발명의 일 실시 예에 따르면, 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법은 상기 메모리 장치로부터 원본 데이터를 로딩하는 단계; 상기 원본 데이터에 대한 제0 에러 정정 동작을 수행하는 단계; 상기 제0 에러 정정 동작을 통해 원본 데이터의 에러가 정정되지 않는 경우, 상기 원본 데이터의 복수의 비트들 중 적어도 하나의 비트를 플립하여 제1 플립 데이터를 생성하는 단계; 및 상기 제1 플립 데이터에 대한 제1 에러 정정 동작을 수행하는 단계를 포함한다.
본 발명에 따르면, 메모리 장치로부터 읽은 원본 데이터의 에러가 정정되지 않는 경우, 메모리 컨트롤러는 정정 이력 테이블을 기반으로 원본 데이터에 대한 비트 플립 동작을 수행하여 플립 데이터를 생성하고, 생성된 플립 데이터에 대한 에러 정정 동작을 수행할 수 있다. 이 경우, 원본 데이터의 에러 비트들의 개수가 ECC(Error Correction Code) 엔진의 에러 정정 수준을 초과하더라도, 비트 플립 동작을 통해 일정 수준의 에러 비트들이 플립될 수 있다. 이 경우, 플립 데이터의 에러 비트들의 개수는 ECC 엔진의 에러 정정 수준 이하가 될 수 있고, 이에 따라, 데이터에 대한 정상적인 에러 정정이 가능해진다. 따라서, 향상된 신뢰성을 갖는 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법이 제공된다.
도 1은 본 발명의 실시 예에 따른 메모리 시스템을 보여주는 블록도이다.
도 2는 도 1의 메모리 장치를 보여주는 블록도이다.
도 3은 도 1의 메모리 컨트롤러의 동작을 보여주는 순서도이다.
도 4는 도 1의 메모리 컨트롤러의 동작을 설명하기 위한 도면이다.
도 5는 도 2의 메모리 장치의 메모리 셀 어레이의 메모리 셀들을 개략적으로 보여주는 도면이다.
도 6은 도 4의 정정 이력 테이블을 설명하기 위한 도면이다.
도 7a 내지 도 7c는 도 1의 메모리 컨트롤러의 동작을 설명하기 위한 도면들이다.
도 8은 도 4의 정정 이력 테이블을 보여주는 도면이다.
도 9는 도 8의 정정 이력 테이블을 사용한 비트 플립 동작을 설명하기 위한 도면이다.
도 10은 도 1의 메모리 컨트롤러의 동작을 보여주는 순서도이다.
도 11a 및 도 11b는 도 10의 순서도에 따른 메모리 컨트롤러의 동작을 설명하기 위한 도면들이다.
도 12는 도 1의 메모리 컨트롤러의 동작을 보여주는 순서도이다.
도 13은 본 발명의 실시 예에 따른 메모리 장치를 보여주는 블록도이다.
도 14는 본 발명의 실시 예에 따른 메모리 시스템을 보여주는 블록도이다.
도 15는 본 발명의 실시 예에 따른 메모리 시스템을 보여주는 블록도이다.
도 16은 본 발명의 실시 예에 따른 메모리 패키지의 일부 예를 보여주는 도면이다.
도 17은 본 발명의 실시 예에 따른 메모리 패키지의 일부 예를 보여주는 도면이다.
도 18은 본 발명의 일 실시예에 따른 스토리지(storage) 장치가 적용된 시스템(4000)을 도시한 도면이다.
도 19는 본 발명의 예시적인 실시예에 따른 호스트-스토리지 시스템을 나타내는 블록도이다.
도 20은 본 발명의 일 실시예에 따른 메모리 장치가 적용된 데이터 센터를 나타낸 도면이다.
도 2는 도 1의 메모리 장치를 보여주는 블록도이다.
도 3은 도 1의 메모리 컨트롤러의 동작을 보여주는 순서도이다.
도 4는 도 1의 메모리 컨트롤러의 동작을 설명하기 위한 도면이다.
도 5는 도 2의 메모리 장치의 메모리 셀 어레이의 메모리 셀들을 개략적으로 보여주는 도면이다.
도 6은 도 4의 정정 이력 테이블을 설명하기 위한 도면이다.
도 7a 내지 도 7c는 도 1의 메모리 컨트롤러의 동작을 설명하기 위한 도면들이다.
도 8은 도 4의 정정 이력 테이블을 보여주는 도면이다.
도 9는 도 8의 정정 이력 테이블을 사용한 비트 플립 동작을 설명하기 위한 도면이다.
도 10은 도 1의 메모리 컨트롤러의 동작을 보여주는 순서도이다.
도 11a 및 도 11b는 도 10의 순서도에 따른 메모리 컨트롤러의 동작을 설명하기 위한 도면들이다.
도 12는 도 1의 메모리 컨트롤러의 동작을 보여주는 순서도이다.
도 13은 본 발명의 실시 예에 따른 메모리 장치를 보여주는 블록도이다.
도 14는 본 발명의 실시 예에 따른 메모리 시스템을 보여주는 블록도이다.
도 15는 본 발명의 실시 예에 따른 메모리 시스템을 보여주는 블록도이다.
도 16은 본 발명의 실시 예에 따른 메모리 패키지의 일부 예를 보여주는 도면이다.
도 17은 본 발명의 실시 예에 따른 메모리 패키지의 일부 예를 보여주는 도면이다.
도 18은 본 발명의 일 실시예에 따른 스토리지(storage) 장치가 적용된 시스템(4000)을 도시한 도면이다.
도 19는 본 발명의 예시적인 실시예에 따른 호스트-스토리지 시스템을 나타내는 블록도이다.
도 20은 본 발명의 일 실시예에 따른 메모리 장치가 적용된 데이터 센터를 나타낸 도면이다.
이하에서, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
도 1은 본 발명의 실시 예에 따른 메모리 시스템을 보여주는 블록도이다. 도 1을 참조하면, 메모리 시스템(100)은 메모리 컨트롤러(110) 및 메모리 장치(120)를 포함할 수 있다. 일 실시 예에서, 메모리 시스템(100)은 개인용 컴퓨터(personal computer), 랩탑(laptop) 컴퓨터, 서버(server), 미디어 재생기, 디지털 카메라 등과 같은 사용자 장치들, 또는 내비게이션(navigation), 블랙 박스, 차량용 전장 장치 등과 같은 차량용 장비(automotive device)에 포함될 수 있다. 또는, 메모리 시스템(100)은 휴대용 통신 단말기(mobile phone), 스마트폰(smart phone), 태블릿 PC(tablet personal computer), 웨어러블 기기, 헬스케어 기기 또는 IOT(internet of things) 기기와 같은 모바일(mobile) 시스템일 수 있다. 또는 메모리 시스템(100)은 SSD 등과 같은 스토리지 시스템에 포함될 수 있다.
메모리 컨트롤러(110)는 메모리 장치(120)를 제어하도록 구성될 수 있다. 예를 들어, 메모리 장치(120)에 데이터를 저장하거나 또는 메모리 장치(120)에 저장된 데이터를 읽을 수 있다. 일 실시 예에서, 메모리 컨트롤러(110) 및 메모리 장치(120)는 미리 정해진 인터페이스를 기반으로 서로 통신할 수 있다. 일 실시 예에서, 메모리 컨트롤러(11) 및 메모리 장치(100)는 DDR 인터페이스 또는 LPDDR 인터페이스 등을 기반으로 서로 통신할 수 있으나, 본 발명의 범위가 이에 한정되는 것은 아니다.
메모리 장치(120)는 메모리 컨트롤러(110)의 제어에 따라 데이터를 저장하거나 또는 저장된 데이터를 메모리 컨트롤러(110)로 전송할 수 있다. 일 실시 예에서, 메모리 장치(120)는 DRAM(dynamic random access memory) 장치일 수 있으나, 본 발명의 범위가 이에 한정되는 것은 아니며, 메모리 장치(120)는 SRAM 등과 같은 휘발성 메모리 또는 플래시 메모리, PRAM 및/또는 RRAM 등의 불휘발성 메모리를 포함할 수 있다.
일 실시 예에서, 메모리 컨트롤러(110)는 에러 정정 코드(ECC; Error Correction Code) 엔진(111) 및 에러 관리자(112)를 포함할 수 있다. 예를 들어, 메모리 장치(120)에 저장된 데이터는 다양한 요인으로 인해 발생한 에러를 포함할 수 있다. ECC 엔진(111)은 메모리 장치(120)에 저장될 사용자 데이터에 대한 패리티 데이터를 생성하고, 생성된 패리티 데이터를 사용자 데이터와 함께 메모리 장치(120)에 저장할 수 있다. ECC 엔진(111)은 메모리 장치(120)에 저장된 사용자 데이터 및 패리티 데이터를 읽고, 패리티 데이터를 사용하여 사용자 데이터에 포함된 에러를 검출 및 정정할 수 있다.
일 실시 예에서, ECC 엔진(111)는 사용자 데이터에서, 일정 수준(에러 정정 수준이라 칭함.) 이하의 에러 비트(들)을 정정할 수 있다. 사용자 데이터에 포함된 에러 비트들이 에러 정정 수준을 초과하는 경우, ECC 엔진(111)은 사용자 데이터의 에러 비트들을 정정할 수 없다. ECC 엔진(111)에 의해 사용자 데이터의 에러 비트들이 정정되지 않은 경우, 메모리 시스템(100)은 중단되거나 또는 시스템 폴트로 진입한다. 이 경우, 메모리 시스템(100)의 정상적인 동작이 불가능할 수 있다.
본 발명의 실시 예들에 따르면, ECC 엔진(111)에 의해 사용자 데이터의 에러 비트들이 정정되지 않는 경우, 에러 관리자(112)는 사용자 데이터에 대한 비트 플립 동작을 수행하여 플립 데이터를 생성할 수 있다. 비트 플립 동작은 사용자 데이터에 포함된 복수의 비트들 중 적어도 하나의 비트를 플립(즉, 0에서 1로 또는 1에서 0으로)하는 동작을 가리킨다. 즉, 사용자 데이터의 특정 비트가 에러 비트인 경우, 특정 비트에 대한 비트 플립 동작이 수행될 경우, 특정 비트는 정상 비트로 변경될 수 있다. 이 경우, 사용자 데이터와 비교하여 플립 데이터의 에러 비트의 개수가 감소되며, 플립 데이터에 대한 에러 정정 동작은 성공할 수 있다.
이 때, 사용자 데이터의 특정 비트들(즉, 비트 플립 동작이 수행되는 비트들)은 정정 이력 테이블을 기반으로 선택될 수 있다. 예를 들어, 정정 이력 테이블은 이전의 에러 정정 동작에 의해 정정된 에러 비트들에 대한 정보(예를 들어, 어드레스 정보)를 포함할 수 있다. 즉, 이전에 에러가 발생되고 정정된 비트들에 대응하는 어드레스를 정정 이력 테이블로서 관리하고, 정정 이력 테이블을 기반으로 특정 비트들(즉, 비트 플립 동작이 수행될 비트들)이 선택됨으로써, 메모리 시스템(100)의 신뢰성이 향상될 수 있다. 본 발명의 실시 예들에 따른 에러 관리자(112)의 구성 및 동작은 이하의 도면들을 참조하여 더욱 상세하게 설명된다.
도 2는 도 1의 메모리 장치를 보여주는 블록도이다. 도 1 및 도 2를 참조하면, 메모리 장치(120)는 메모리 셀 어레이(121), 커맨드/어드레스(CA; Command and Address) 버퍼(122), 어드레스 디코더(123), 커맨드 디코더(124), 제어 로직 회로(125), 감지 증폭기 및 쓰기 드라이버(126), 및 입출력 회로(127)를 포함할 수 있다.
메모리 셀 어레이(121)는 복수의 메모리 셀들을 포함할 수 있다. 복수의 메모리 셀들 각각은 액세스 트랜지스터 및 스토리지 커패시터를 포함하는 DRAM 셀일 수 있다. 복수의 메모리 셀들은 복수의 워드라인들 및 복수의 비트라인들과 각각 연결될 수 있다. 일 실시 예에서, 복수의 워드라인들은 X-디코더(또는 행 디코더)(X-DEC)에 의해 구동될 수 있고, 복수의 비트라인들은 Y-디코더(또는 열 디코더)(Y-DEC)에 의해 구동될 수 있다.
CA 버퍼(122)는 메모리 컨트롤러(110)로부터 커맨드/어드레스 신호들(CA)을 수신하고, 수신된 신호들을 임시 저장 또는 버퍼링하도록 구성될 수 있다.
어드레스 디코더(123)는 CA 버퍼(122)로부터 어드레스(ADDR)를 수신하고, 수신된 어드레스(ADDR)를 디코딩할 수 있다. 어드레스 디코더(123)는 디코딩 결과를 기반으로, X-디코더(X-DEC) 및 Y-디코더(Y-DEC)를 제어할 수 있다.
커맨드 디코더(124)는 CA 버퍼(122)로부터 커맨드(CMD)를 수신하고, 수신된 커맨드(CMD)를 디코딩할 수 있다. 커맨드 디코더(124)는 디코딩 결과를 제어 로직 회로(125)로 전달할 수 있다.
제어 로직 회로(125)는 커맨드 디코더(124)의 디코딩 결과를 기반으로 메모리 장치(120)의 제반 동작을 제어할 수 있다. 예를 들어, 커맨드 디코더(124)의 디코딩 결과가 쓰기 커맨드에 대응하는 경우(즉, 메모리 컨트롤러(110)로부터 수신된 커맨드가 쓰기 커맨드인 경우), 제어 로직 회로(125)는 입출력 회로(127)를 통해 수신된 데이터(DT)가 메모리 셀 어레이(121)에 기입되도록, 감지 증폭기 및 쓰기 드라이버(126)의 동작을 제어(즉, 쓰기 드라이버를 활성화시킴)할 수 있다.
또는, 커맨드 디코더(124)의 디코딩 결과가 읽기 커맨드에 대응하는 경우(즉, 메모리 컨트롤러(110)로부터 수신된 커맨드가 읽기 커맨드인 경우), 제어 로직 회로(125)는 메모리 셀 어레이(121)에 저장된 데이터가 독출되도록, 감지 증폭기 및 쓰기 드라이버(126)의 동작을 제어(즉, 감지 증폭기를 활성화시킴)하고, 입출력 회로(127)를 통해 데이터(DT)를 메모리 컨트롤러(110)로 전달할 수 있다.
감지 증폭기 및 쓰기 드라이버(126)는 제어 로직 회로(125)의 제어에 따라, 복수의 비트라인들을 통해 메모리 셀 어레이(120)로부터 데이터를 독출하거나 또는 메모리 셀 어레이(121)에 데이터를 기입할 수 있다.
입출력 회로(127)는 메모리 컨트롤러(120)로부터 데이터 신호(DQ) 및 데이터 스트로브 신호(DQS)를 사용하여, 메모리 컨트롤러(110)로부터 데이터(DT)를 수신하거나 또는 메모리 컨트롤러(110)로 데이터(DT)를 전송할 수 있다.
도 3은 도 1의 메모리 컨트롤러의 동작을 보여주는 순서도이다. 도 1 및 도 3을 참조하면, S110 단계에서, 메모리 컨트롤러(110)는 메모리 장치(110)로부터 원본 데이터(DT_RAW)를 로딩할 수 있다. 예를 들어, 메모리 컨트롤러(110)는 원본 데이터(DT_RAW)에 대응하는 어드레스 및 읽기 커맨드를 메모리 장치(120)로 전송할 수 있다. 메모리 장치(120)는 읽기 커맨드에 응답하여, 수신된 어드레스에 대응하는 영역에 저장된 원본 데이터(DT_RAW)를 읽고, 읽은 원본 데이터(DT_RAW)를 메모리 컨트롤러(110)로 전송할 수 있다.
S120 단계에서, 메모리 컨트롤러(110)는 원본 데이터(DT_RAW)에 대한 에러 정정 동작을 수행할 수 있다. 예를 들어, 메모리 장치(120)로부터 읽은 원본 데이터(DT_RAW)는 사용자 데이터 및 패리티 데이터를 포함할 수 있다. 메모리 컨트롤러(110)의 ECC 엔진(111)은 원본 데이터(DT_RAW)에 포함된 패리티 데이터를 사용하여 사용자 데이터에 대한 에러 정정 동작을 수행할 수 있다.
S130 단계에서, 메모리 컨트롤러(110)는 원본 데이터(DT_RAW)가 에러 비트를 포함하는지 판별할 수 있다. 예를 들어, 메모리 컨트롤러(110)의 ECC 엔진(111)은 에러 정정 동작 중 생성된 에러 벡터 등과 같은 정보를 기반으로, 원본 데이터(DT_RAW)가 에러 비트를 포함하는지 판별할 수 있다.
원본 데이터(DT_RAW)가 에러 비트를 포함하지 않는 경우, 메모리 컨트롤러(110)는 별도의 동작없이 읽기 동작을 종료할 수 있다. 메모리 컨트롤러(110)는 원본 데이터(DT_RAW)를 사용하여 다양한 동작(예를 들어, 다른 외부 호스트로 원본 데이터(DT_RAW)를 전달)을 수행할 수 있다.
원본 데이터(DT_RAW)가 에러 비트를 포함하는 경우, S140 단계에서, 메모리 컨트롤러(110)는 원본 데이터(DT_RAW)의 에러 비트가 정정되었는지 판별할 수 있다. 예를 들어, 메모리 컨트롤러(110)의 ECC 엔진(111)은 에러 정정 동작 중 생성된 디코딩 상태 플래그 등과 같은 정보를 기반으로, 원본 데이터(DT_RAW)의 에러 비트가 정정되었는지 판별할 수 있다.
원본 데이터(DT_RAW)의 에러 비트가 정정된 경우, S150 단계에서, 메모리 컨트롤러(110)는 정정 이력 테이블(correction history table)을 갱신할 수 있다. 예를 들어, 메모리 컨트롤러(110)의 ECC 엔진(111)은 원본 데이터(DT_RAW)의 정정된 에에 대응하는 어드레스를 식별하거나 또는 출력할 수 있다. 메모리 컨트롤러(110)의 에러 관리자(112)는 원본 데이터(DT_RAW)의 정정된 에에 대응하는 어드레스를 정정 어드레스(ADDR_COR)로서 정정 이력 테이블에 기록하거나 또는 갱신할 수 있다. 즉, 정정 어드레스(ADDR_COR)는 메모리 장치(120)의 복수의 메모리 셀들 중 정정된 에러 비트에 대응하는 어드레스(또는 물리적 어드레스)일 수 있으며, 정정 이력 테이블은 복수의 정정 어드레스들을 포함할 수 있다.
이후에, 메모리 컨트롤러(110)는 읽기 동작을 종료할 수 있다. 메모리 컨트롤러(110)는 정정된 데이터를 사용하여 다양한 동작(예를 들어, 다른 외부 호스트로 정정된 데이터를 전달)을 수행할 수 있다.
S140 단계의 판별 결과에서, 원본 데이터(DT_RAW)의 에러 비트가 정정되지 않은 경우, S160 단계에서, 메모리 컨트롤러(110)는 정정 이력 테이블에서 가용한 정정 어드레스가 존재하는지 판별할 수 있다. 예를 들어, 메모리 컨트롤러(110)의 에러 관리자(112)는 정정 이력 테이블의 정정 어드레스들 중 원본 데이터(DT_RAW)의 행 어드레스와 대응하는 정정 어드레스들을 식별할 수 있다. 에러 관리자(112)는 식별된 정정 어드레스들 중 비트 플립 동작이 수행되지 않은 정정 어드레스들이 존재하는지 판별할 수 있다.
원본 데이터(DT_RAW)의 행 어드레스에 대응하는 정정 어드레스들 중 비트 플립 동작이 수행되지 않은 정정 어드레스들이 존재하는 것은 가용한 정정 어드레스가 존재함을 의미한다. 이 경우, S170 단계에서, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 다시 로딩할 수 있다. S170 단계의 동작은 S110 단계의 동작과 유사하므로, 이에 대한 상세한 설명은 생략된다.
S180 단계에서, 메모리 컨트롤러(110)는 정정 이력 테이블에서 가용한 정정 어드레스 중 적어도 하나를 타겟 플립 어드레스로서 선택하고, 선택된 타겟 플립 어드레스를 기반으로 원본 데이터(DT_RAW)에 대한 비트 플립 동작을 수행하여 플립 데이터(DT_F)를 생성할 수 있다.
예를 들어, 메모리 컨트롤러(110)의 에러 관리자(112)는 정정 이력 테이블의 정정 어드레스 중, 원본 데이터(DT_RAW)의 행 어드레스와 대응되고, 아직 비트-플립이 수행되지 않은 정정 어드레스들(즉 가용한 정정 어드레스) 중 적어도 하나를 타겟 플립 어드레스로서 선택할 수 있다. 에러 관리자(112)는 원본 데이터(DT_RAW)의 복수의 비트들 중 타겟 플립 어드레스에 대응하는 비트에 대한 비트 플립 동작을 수행하여 플립 데이터(DT_F)를 생성할 수 있다.
이후에, 메모리 컨트롤러(110)는 S120 단계를 수행할 수 있다. 이 때, 메모리 컨트롤러(110)가 원본 데이터(DT_RAW) 대신에 플립 데이터(DT_F)에 대한 에러 정정 동작을 수행한다는 점을 제외하면, 나머지 동작은 앞서 설명된 바와 유사하므로, 이에 대한 상세한 설명은 생략된다.
메모리 컨트롤러(110)는 플립 데이터(DT_F)의 에러 비트가 정정되거나, 또는 가용한 정정 어드레스가 없을 때까지 S120 단계 내지 S180 단계의 동작들을 반복 수행할 수 있다. 일 실시 예에서, 메모리 컨트롤러(110)는 가용한 정정 어드레스가 있더라도, S120 단계 내지 S180 단계의 동작들을 미리 정해진 횟수만큼 반복 수행할 수 있다. 예를 들어, 정정 이력 테이블(CHT)에서, 가용한 정정 어드레스가 10개인 경우, 메모리 컨트롤러(110)는 S120 단계 내지 S180 단계의 동작들을 최대 10회 반복 수행할 수 있다. 이 경우, 메모리 컨트롤러(110)의 성능이 저하될 수 있다. 따라서, 메모리 컨트롤러(110)의 하나의 원본 데이터에 대한 비트 플립 동작 및 에러 정정 동작의 반복 횟수를 제한함으로써, 메모리 컨트롤러(110)의 성능 저하가 방지될 수 있다.
S160 단계의 동작에서, 정정 이력 테이블에서 가용한 정정 어드레스가 없는 경우, S190 단계에서, 메모리 컨트롤러(110)는 에러 핸들링 동작(Error handling operation)을 수행할 수 있다. 예를 들어, 메모리 컨트롤러(110)는 메모리 시스템(100)에 대한 시스템 중단 또는 시스템 리셋을 수행할 수 있다. 이후에, 메모리 시스템(100)은 중단되고, 에러 관리를 위한 다양한 관리 동작을 수행할 수 있다.
일 실시 예에서, S180 단계의 동작에서, 타겟 플립 어드레스에 대응하는 비트가 정상 비트인 경우, 비트 플립 동작을 통해 타겟 플립 어드레스에 대응하는 비트는 에러 비트로 변경되고, 타겟 플립 어드레스에 대응하는 비트가 에러 비트인 경우, 비트 플립 동작을 통해, 타겟 플립 어드레스에 대응하는 비트는 정상 비트로 변경될 것이다. 원본 데이터(DT_RAW)가 N개의 에러 비트들을 포함하고, m개의 비트들에 대한 비트 플립 동작이 수행된 경우, 플립 데이터(DT_F)는 N-m개 내지 N+m개의 에러들을 가질 것이다. 즉, 정정 이력 테이블로부터 선택된 타겟 플립 어드레스는 이전에 정정된 에러 비트들에 대응하는 어드레스이므로, 현재 원본 데이터(DT_RAW)에서 에러 비트일 가능성이 높을 것이다. 즉, 정정 이력 테이블로부터 선택된 타겟 플립 어드레스를 기반으로 비트 플립 동작이 수행될 경우, 원본 데이터(DT_RAW)와 비교하여 플립 데이터(DT_F)의 에러 비트들의 개수가 감소할 확률이 높으며, 이 경우, 플립 데이터(DT_F)의 에러는 ECC 엔진(111)의 에러 정정 능력 범위 내에 포함될 수 있다. 따라서, 원본 데이터(DT_RAW)의 에러 비트들의 개수가 ECC 엔진(111)의 에러 정정 수준을 초과하더라도, 정정 어드레스에 기반된 비트 플립 동작을 통해, 정정된 데이터가 제공될 수 있다.
도 4는 도 1의 메모리 컨트롤러의 동작을 설명하기 위한 도면이다. 도 1 및 도 4를 참조하면, 메모리 컨트롤러(110)는 ECC 엔진(111) 및 에러 관리자(112)를 포함할 수 있다. 에러 관리자(112)는 MUX 회로, 비트 플립 회로(BF), 및 정정 이력 테이블(CHT)을 포함할 수 있다.
메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 읽을 수 있다. 원본 데이터(DT_RAW)는 에러 관리자(112)로 제공될 수 있다. 원본 데이터(DT_RAW)에 대한 최초 읽기 동작(또는 최초 에러 정정 동작시), MUX 회로는 원본 데이터(DT_RAW)를 ECC 엔진(111)으로 제공할 수 있다.
ECC 엔진(111)은 원본 데이터(DT_RAW)에 대한 에러 정정 동작을 수행할 수 있다. ECC 엔진(111)에 의해 원본 데이터(DT_RAW)의 에러 비트가 정정된 경우, ECC 엔진(111)은 정정된 데이터(DT_COR)를 출력할 수 있다. 일 실시 예에서, ECC 엔진(111)에 의해 원본 데이터(DT_RAW)의 에러 비트가 정정된 경우, ECC 엔진(111)은 정정된 에러 비트에 대응하는 정정 어드레스(ADDR_COR)를 출력할 수 있다. 정정 어드레스(ADDR_COR)는 에러 관리자(112)의 정정 이력 테이블(CHT)에 기록되고, 관리될 수 있다. 즉, 정정 이력 테이블(CHT)은 ECC 엔진(111)에 의해 이전에 정정된 에러 비트들에 대응하는 어드레스(즉, 정정 어드레스(ADDR_COR))에 대한 정보를 포함할 수 있다.
일 실시 예에서, 정정 이력 테이블(CHT)은 메모리 컨트롤러(110)에 포함된 별도의 저장 회로(예를 들어, 레지스터, SRAM 등)에 저장되고 관리될 수 있다.
ECC 엔진(111)에 의해 원본 데이터(DT_RAW)의 에러 비트가 정정되지 않은 경우, ECC 엔진(111)은 페일 상태를 가리키는 상태 플래그(SF)를 출력할 수 있다. 이 경우, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 다시 로딩할 수 있다. 원본 데이터(DT_RAW)는 에러 관리자(112)의 MUX 회로로 제공된다. MUX 회로는 페일 상태를 가리키는 상태 플래그(SF)에 응답하여, 원본 데이터(DT_RAW)를 비트 플립 회로(BF)로 제공한다.
비트 플립 회로(BF)는 정정 이력 테이블(CHT)로부터 타겟 플립 어드레스(ADDR_TB)를 수신하고, 원본 데이터(DT_RAW)에서 수신된 타겟 플립 어드레스(ADDR_TB)에 대응하는 비트에 대한 비트 플립 동작을 수행하여, 플립 데이터(DT_F)를 출력할 수 있다. 플립 데이터(DT_F)는 ECC 엔진(111)으로 제공될 수 있다.
ECC 엔진(111)은 플립 데이터(DT_F)에 대한 에러 정정 동작을 수행할 수 있다. 에러가 정정된 경우, ECC 엔진(111)은 정정된 데이터(DT_COR) 및 정정 어드레스(ADDR_COR)를 출력할 수 있다. 에러가 정정되지 않은 경우, ECC 엔진(111)은 페일 상태를 가리키는 상태 플래그(SF)를 출력할 수 있고, 에러 관리자(112)는 정정 이력 테이블(CHT)에서 가용한 정정 어드레스가 없을 때까지 상술된 동작을 반복 수행할 수 있다.
도 5는 도 2의 메모리 장치의 메모리 셀 어레이의 메모리 셀들을 개략적으로 보여주는 도면이다. 도 6은 도 4의 정정 이력 테이블을 설명하기 위한 도면이다. 일 실시 예에서, 도 5 및 도 6을 참조하여, 정정 이력 테이블(CHT)이 관리되는 동작이 설명된다.
도 2, 도 4, 도 5, 및 도 6을 참조하면, 메모리 셀 어레이(121)는 복수의 메모리 셀들을 포함할 수 있다. 복수의 메모리 셀들은 제0 내지 제15 행들(R00~R15) 및 제0 내지 제32 열들(C00~C31)에 따라 배열될 수 있다. 일 실시 예에서, 동일 행에 위치한 메모리 셀들은 동일한 워드라인과 연결될 수 있고, 동일한 열에 위치한 메모리 셀들은 동일한 비트라인과 연결될 수 있다. 그러나 본 발명의 범위가 이에 한정되는 것은 아니다. 예를 들어, 메모리 셀 어레이(121)는 복수의 메모리 셀들을 더 포함할 수 있다.
일 실시 예에서, 복수의 메모리 셀들 중 특정 메모리 셀의 물리적 특성 또는 물리적 결함으로 인해, 특정 메모리 셀들에서 에러가 빈번하게 발생할 수 있다. 예를 들어, 도 5에 도시된 바와 같이, 제1 행(R01)의 제2 열(C02), 제1 행(R01)의 제4 열(C04), 제1 행(R01)의 제16 열(C16), 제1 행(R01)의 제23 열(C23), 제5 행(R05)의 제3 열(C03), 제5 행(R05)의 제11 열(R05/C11), 및 제13 행(R13)의 제1 열(C01)에 위치한 메모리 셀들에서, 에러가 빈번하게 발생할 수 있다.
ECC 엔진(111)에 의해 상술된 메모리 셀들에서 발생한 에러가 정정된 경우, 상술된 메모리 셀들 각각의 어드레스 정보는 정정 어드레스(ADDR_COR)로서 정정 이력 테이블(CHT)에 기입될 것이다. 예를 들어, 도 6에 도시된 바와 같이, 정정 이력 테이블(CHT)은 에러가 정정된 비트들에 대응하는 메모리 셀들의 어드레스 정보(즉, 정정 어드레스(ADDR_COR))를 포함할 수 있다.
일 실시 예에서, 정정 이력 테이블(CHT)은 정정 어드레스(ADDR_COR)를 행 단위로 구분하여 관리할 수 있다. 행 단위는 메모리 장치(120)가 메모리 컨트롤러(110)의 제어에 따라, 액티브(활성화)되는 단위 또는 데이터 입출력 단위에 대응할 수 있다.
그러나 본 발명의 범위가 이에 한정되는 것은 아니며, 정정 이력 테이블(CHT)에 포함된 정정 어드레스(ADDR_COR)는 에러가 정정된 메모리 셀의 물리적 어드레스를 가리킬 수 있으며, 다양한 방식으로 관리될 수 있다.
상술된 바와 같이, 메모리 컨트롤러(110)는 ECC 엔진(111)의 에러 정정 동작에 의해 에러가 정정된 비트들 또는 메모리 셀들에 대응하는 어드레스를 정정 어드레스(ADDR_COR)로서 관리할 수 있다.
일 실시 예에서, 정정 어드레스(ADDR_COR)는 에러가 정정된 비트에 대응하는 메모리 셀들의 물리적 주소일 수 있으나, 본 발명의 범위가 이에 한정되는 것은 아니다. 예를 들어, 정정 어드레스(ADDR_COR)는 에러가 정정된 비트에 대응하는 논리적 어드레스일 수 있다.
도 7a 내지 도 7c는 도 1의 메모리 컨트롤러의 동작을 설명하기 위한 도면들이다. 도 1, 도 4, 도 5, 도 7a, 도 7b, 및 도 7c를 참조하면, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 읽고, 원본 데이터(DT_RAW)에 대한 에러 정정 동작을 수행할 수 있다.
이하에서 설명의 편의를 위해, 원본 데이터(DT_RAW)는 32 비트의 사용자 데이터이며, 도 5의 메모리 셀 어레이(121)의 제1 행(R01)에 위치한 메모리 셀들에 저장된 것으로 가정한다. 이 때, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)와 함께 수신된 패리티 데이터를 사용하여 에러 정정 동작을 수행할 수 있다. 또한, 원본 데이터(DT_RAW)의 제8 열(C08) 및 제16 열(C16)에 위치한 비트들 각각은 에러 비트인 것으로 가정한다. 즉, 원본 데이터(DT_RAW)는 2개의 에러 비트들(2b ERR)을 포함한다. ECC 엔진(111)은 1개의 에러 비트(1b ERR)를 정정할 있으며(즉, SEC; Single Error Correction), 그 이상의 에러 비트들은 정정할 수 없는 것으로 가정한다. 정정 이력 테이블(CHT)은 도 6을 참조하여 설명된 바와 같이, 관리되는 것으로 가정한다.
먼저, 도 7a에 도시된 바와 같이, 원본 데이터(DT_RAW)는 2개의 에러 비트들(2b ERR)을 포함하고 있기 때문에, ECC 엔진(111)에 의해 에러 비트들이 정정될 수 없다. 이 경우, ECC 엔진(111)은 에러 정정 동작의 페일(F)을 가리키는 상태 플래그(SF)를 출력할 수 있다.
에러 정정 동작의 페일(F)을 가리키는 상태 플래그(SF)에 응답하여, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 다시 로딩하고, 정정 이력 테이블(CHT)을 기반으로 원본 데이터(DT_RAW)의 특정 비트에 대한 비트 플립 동작을 수행할 수 있다. 예를 들어, 도 7a에 도시된 바와 같이, 정정 이력 테이블(CHT)은 원본 데이터(DT_RAW)의 행 어드레스(즉, 제1 행(R01)와 대응되는 정정 어드레스들(ADDR_COR)에 대한 정보를 포함할 수 있다. 이 때, 에러 관리자(112)의 비트 플립 회로(BF)는 정정 이력 테이블(CHT)을 기반으로, 타겟 플립 어드레스로서, 제1 행(R01)의 제2 열(C02)을 선택할 수 있다. 에러 관리자(112)는 원본 데이터(DT_RAW)에서, 타겟 플립 어드레스(즉, 제1 행(R01)의 제2 열(C02))에 대응하는 비트에 대한 비트 플립 동작을 수행하여 제1 플립 데이터(DT_F1)를 생성할 수 있다. 이 경우, 원본 데이터(DT_RAW)에서, 제1 행(R01)의 제2 열(C02)에 대응하는 비트는 정상 비트이므로, 플립된 비트는 에러인 비트일 것이다. 즉, 제1 플립 데이터(DT_F1)는 3개의 에러 비트들(3b ERR)을 포함하며, 제1 플립 데이터(DT_F1)는 ECC 엔진(111)에 의해 에러가 정정되지 않을 것이다. 이에 따라, ECC 엔진(111)은 에러 정정 동작의 페일(F)을 가리키는 상태 플래그(SF)를 출력할 것이다.
에러 정정 동작의 페일(F)을 가리키는 상태 플래그(SF)에 응답하여, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 다시 로딩하고, 정정 이력 테이블(CHT)을 기반으로 원본 데이터(DT_RAW)의 특정 비트에 대한 비트 플립 동작을 다시 수행할 수 있다. 이 때, 에러 관리자(112)는 정정 이력 테이블(CHT)의 정정 어드레스들(ADDR_COR) 중 가용한 정정 어드레스를 기반으로 비트 플립 동작을 수행할 수 있다. 예를 들어, 도 7b에 도시된 바와 같이, 정정 이력 테이블(CHT)에서, 제1 행(R01) 및 제2 열(C02)에 대응하는 비트에 대한 비트 플립 동작은 수행되었으므로, 이후에, 에러 관리자(112)는 제1 행(R01) 및 제4 열(C04)을 타겟 플립 어드레스로서 선택하고, 타겟 플립 어드레스에 대응하는 비트에 대한 비트 플립 동작을 수행하여, 제2 플립 데이터(DT_F2)를 생성할 수 있다. 이 경우, 제1 행(R01) 및 제4 열(C04)에 대응하는 비트는 원본 데이터(DT_RAW)에서 정상 비트이므로, 비트 플립 동작을 통해 에러 비트로 변경될 수 있다. 이 경우, 제2 플립 데이터(DT_F2)는 3개의 에러 비트들(3b ERR)을 포함할 것 있다. 따라서, ECC 엔진(111)에 의해 제2 플립 데이터(DT_F2)의 에러 비트들은 정정되지 않을 것이다. 이에 따라, ECC 엔진(111)은 에러 정정 동작의 페일(F)을 가리키는 상태 플래그(SF)를 출력할 것이다.
마찬가지로, 에러 정정 동작의 페일(F)을 가리키는 상태 플래그(SF)에 응답하여, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 다시 로딩하고, 정정 이력 테이블(CHT)을 기반으로 원본 데이터(DT_RAW)의 특정 비트에 대한 비트 플립 동작을 다시 수행할 수 있다. 예를 들어, 도 7c에 도시된 바와 같이, 에러 관리자(112)는 정정 이력 테이블(CHT)을 기반으로, 제1 행(R01) 및 제16 열(C16)을 타겟 플립 어드레스로 선택하고, 타겟 플립 어드레스에 대응하는 비트에 대한 비트 플립 동작을 수행하여, 제3 플립 데이터(DT_F3)를 생성할 수 있다. 이 경우, 원본 데이터(DT_RAW)에서, 제1 행(R01) 및 제16 열(C16)에 대응하는 비트는 에러 비트이므로, 비트 플립 동작을 통해 정상 비트로 변경될 것이다. 따라서, 제3 플립 데이터(DT_F3)는 1개의 에러 비트(1b ERR)를 포함할 수 있으며, ECC 엔진(111)에 의해 1개의 에러 비트(1b ERR)가 정정될 수 있고, ECC 엔진(111)은 정정된 데이터를 출력하고, 에러 정정 동작의 성공(S)을 가리키는 상태 플래그(SF)를 출력할 수 있다.
일 실시 예에서, 제3 플립 데이터(DT_F3)에서 제1 행(R01) 및 제8 열(C08)에 대응하는 에러 비트가 정정되었으므로, ECC 엔진(111)은 제1 행(R01) 및 제8 열(C08)에 대한 정보를 정정 어드레스(ADDR_COR)로서 출력하고, 에러 관리자는 제1 행(R01) 및 제8 열(C08)에 대한 정보를 정정 어드레스(ADDR_COR)로서, 정정 이력 테이블(CHT)에 추가(또는 갱신)할 수 있다.
본 발명의 실시 예에 따르면, 메모리 컨트롤러(110)는 ECC 엔진(111)에 의해 정정된 에러 비트에 대응하는 정정 어드레스(ADDR_COR)를 정정 이력 테이블(CHT)로서 관리할 수 있다. 메모리 장치(120)로부터 읽은 데이터에 대한 에러 정정 동작이 실패한 경우, 메모리 컨트롤러(110)는 정정 이력 테이블(CHT)을 기반으로, 메모리 장치(120)로부터 읽은 데이터에 대한 비트 플립 동작을 수행할 수 있고, 이에 따라, ECC 엔진(111)의 에러 정정 능력 범위를 초과하는 에러를 포함하는 데이터에 대한 에러 정정이 가능하다. 따라서, 메모리 시스템(100)의 신뢰성이 향상될 수 있다.
도 8은 도 4의 정정 이력 테이블을 보여주는 도면이다. 도 9는 도 8의 정정 이력 테이블을 사용한 비트 플립 동작을 설명하기 위한 도면이다. 도 4, 도 8, 및 도 9를 참조하면, 정정 이력 테이블(CHT-1)은 정정 어드레스(ADDR_COR)에 대한 정보를 포함할 수 있다. 정정 어드레스(ADDR_COR)의 구성은 도 5 및 도 6을 참조하여 설명된 바와 유사하므로, 이에 대한 상세한 설명은 생략된다.
일 실시 예에서, 도 7a 내지 도 7c를 참조하여 설명된 실시 예에서, 메모리 컨트롤러(110)는 원본 데이터(DT_RAW)의 행 어드레스에 대응하는 정정 어드레스들(ADDR_COR)을 기반으로 비트 플립 동작을 수행할 수 있다. 이 때, 정정 어드레스들(ADDR_COR) 각각에 대한 비트 플립 동작은 임의의 순서로 수행될 수 있다. 또는 정정 어드레스들(ADDR_COR) 각각에 대한 비트 플립 동작은 에러가 정정된 순서에 따라 수행될 수 있다.
또는, 정정 어드레스들(ADDR_COR) 각각에 대한 비트 플립 동작은 발생 빈도에 기반된 순서로 수행될 수 있다. 예를 들어, 도 8에 도시된 바와 같이, 정정 이력 테이블(CHT-1)은 정정 어드레스들(ADDR_COR) 각각에 대응하는 카운트를 포함할 수 있다. 카운트는 대응하는 정정 어드레스(ADDR_COR)의 에러 비트들이 정정된 횟수를 가리킬 수 있다.
좀 더 상세한 예로서, 도 8의 정정 이력 테이블(CHT-1)에서, 제1 행(R01)의 제2 열(C02)에 대응하는 비트에 대해서는, 1회 에러 발생하고, 에러가 정정되었으며, 제1 행(R01)의 제4 열(C04)에 대응하는 비트에 대해서는, 17회 에러 발생하고, 에러가 정정되었으며, 제1 행(R01)의 제16 열(C16)에 대응하는 비트에 대해서는, 36회 에러 발생하고, 에러가 정정되었으며, 제1 행(R01)의 제23 열(C23)에 대응하는 비트에 대해서는, 5회 에러 발생하고, 에러가 정정되었으며, 제5 행(R05)의 제3 열(C03)에 대응하는 비트에 대해서는, 14회 에러 발생하고, 에러가 정정되었으며, 제5 행(R05)의 제2 열(C11)에 대응하는 비트에 대해서는, 1회 에러 발생하고, 에러가 정정되었으며, 제13 행(R13)의 제1 열(C01)에 대응하는 비트에 대해서는, 45회 에러 발생하고, 에러가 정정되었음을 가리킬 수 있다. 즉, 카운트가 많을수록, 대응하는 비트에서 에러가 많이 발생했음을 가리킬 수 있다.
메모리 컨트롤러(110)는 가장 큰 카운트(즉, 에러가 가장 많이 발생한 비트)에 대응하는 정정 어드레스(ADDR_COR)를 타겟 플립 어드레스로 선택하고, 타겟 플립 어드레스를 기반으로 비트 플립 동작을 수행할 수 있다. 이 경우, 에러 발생 빈도가 높은 비트에 대한 비트 플립이 수행되기 때문에, 에러 비트가 정상 비트로 플립될 확률이 높아질 수 있다. 이에 따라, 반복 동작(즉, 비트 플립 동작 및 에러 정정 동작)의 횟수가 감소할 수 있다.
예를 들어, 도 9에 도시된 바와 같이, 원본 데이터(DT_RAW)는 2개의 에러 비트들(2b ERR)을 포함할 수 있다. 이 경우, ECC 엔진(111)에 의해 에러가 정정되지 않으며, 이에 따라, 메모리 컨트롤러(110)의 에러 관리자(112)는 정정 이력 테이블(CHT)을 기반으로 비트 플립 동작을 수행할 수 있다.
에러 관리자(112)는 정정 이력 테이블(CHT)의 정정 어드레스들(ADDR_COR) 중 원본 데이터(DT_RAW)의 행 어드레스와 대응되는 정정 어드레스들 중 적어도 하나를 타겟 플립 어드레스로서 선택할 수 있다. 이 때, 에러 관리자(112)는 정정 어드레스들(ADDR_COR)의 카운트를 기반으로 타겟 플립 어드레스를 선택할 수 있다. 도 9의 실시 예에서, 제1 행(R01)의 제16 열(C16)의 카운트가 36으로 가장 크기 때문에, 에러 관리자(112)는 제1 행(R01)의 제16 열(C16)을 타겟 플립 어드레스로 선택하고, 원본 데이터(DT_RAW)에서, 선택된 타겟 플립 어드레스(예를 들어, 제1 행(R01)의 제16 열(C16))에 대응하는 비트에 대한 비트 플립 동작을 수행하여, 제3 플립 데이터(DT_F3)를 생성할 수 있다. 이 경우, 제3 플립 데이터(DT_F3)는 1개의 에러 비트(1b ERR)를 포함하므로, ECC 엔진(111)에 의해 에러 비트가 정정될 수 있다.
제1 행(R01)의 제8 열(C08)에 대응하는 에러 비트가 정정되었으므로, 제1 행(R01)의 제8 열(C08)에 대한 어드레스는 정정 어드레스(ADDR_COR)로서 정정 이력 테이블(CHT)에 추가되고, 대응하는 카운트는 1로 설정될 수 있다. 일 실시 예에서, 정정 이력 테이블(CHT)가 제1 행(R01)의 제8 열(C08)에 대한 어드레스를 정정 어드레스(ADDR_COR)로서 이미 포함하고 있는 경우, 대응하는 카운트가 1만큼 증가할 수 있다.
상술된 바와 같이, 원본 데이터(DT_RAW)의 에러 비트가 ECC 엔진(111)에 의해 정정되지 않는 경우, 메모리 컨트롤러(110)는 정정 이력 테이블(CHT-1)을 기반으로 원본 데이터(DT_RAW)에 대한 비트 플립 동작을 수행하여 플립 데이터를 생성하고, 플립 데이터에 대한 에러 정정 동작을 수행할 수 있다. 이 때, 메모리 컨트롤러(110)는 정정 이력 테이블(CHT-1)에 포함된 카운트를 기반으로 에러 발생 빈도가 가장 높은 정정 어드레스(ADDR_COR)에 대응하는 비트들에 대해서, 우선적으로 비트 플립 동작을 수행할 수 있다. 이 경우, 원본 데이터(DT_RAW)에 포함된 에러 비트가 우선적으로 비트 플립될 수 있고, 이에 따라 원본 데이터(DT_RAW)의 에러(또는 플립 데이터의 에러)가 우선적으로 정정될 수 있기 때문에, 반복 동작(예를 들어, 비트 플립 동작 및 에러 정정 동작)의 횟수가 감소될 수 있다.
일 실시 예에서, 정정 이력 테이블(CHT-1)에 포함된 정정 어드레스들(ADDR_COR) 각각에 대한 카운트는 특정 윈도우 단위로 관리될 수 있다. 예를 들어, 정정 이력 테이블(CHT-1)에 포함된 정정 어드레스들(ADDR_COR) 각각에 대한 카운트는 현시점으로부터 소정의 시간 이전까지의 윈도우 구간 동안 에러가 정정된 횟수를 가리킬 수 있다.
일 실시 예에서, 메모리 컨트롤러(110)는 다양한 방식에 따라, 정정 이력 테이블(CHT)을 기반으로 원본 데이터(DT_RAW)에 대한 비트 플립 동작을 수행할 수 있다. 예를 들어, 앞서 설명된 바와 같이, 메모리 컨트롤러(110)는 정정 이력 테이블(CHT)을 기반으로 임의의 순서에 따라 원본 데이터(DT_RAW)에 대한 비트 플립 동작을 수행할 수 있다. 또는 메모리 컨트롤러(110)는 정정 이력 테이블(CHT-1)을 기반으로, 에러 발생 빈도의 순서에 따라, 원본 데이터(DT_RAW)에 대한 비트 플립 동작을 수행할 수 있다. 또는, 메모리 컨트롤러(110)는 정정 이력 테이블(CHT)을 기반으로 가장 최근에 에러가 정정된 순서에 따라, 원본 데이터(DT_RAW)에 대한 비트 플립 동작을 수행할 수 있다.
상술된 정정 이력 테이블(CHT)의 관리 방법 및 원본 데이터(DT_RAW)에 대한 비트 플립 동작의 순서는 본 발명의 기술적 사상으로부터 벗어남없이 다양하게 변형될 수 있으며, 본 발명의 범위가 기재된 실시 예들에 국한되지 않음이 이해될 것이다.
도 10은 도 1의 메모리 컨트롤러의 동작을 보여주는 순서도이다. 도 1 및 도 10을 참조하면, S210 단계에서, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 로딩할 수 있다. S220 단계에서, 메모리 컨트롤러(110)는 원본 데이터(DT_RAW)에 대한 에러 정정 동작을 수행할 수 있다. S230 단계에서, 메모리 컨트롤러(110)는 에러 비트가 있는지 판별할 수 있다. 에러가 없는 경우, 메모리 컨트롤러(110)는 읽기 동작을 종료할 수 있다. 에러가 있는 경우, S240 단계에서, 메모리 컨트롤러(110)는 에러가 정정되었는지 판별할 수 있다. 에러가 정정된 경우, S250 단계에서, 메모리 컨트롤러(110)는 정정 이력 테이블(CHT)을 갱신할 수 있다. 에러가 정정되지 않는 경우, S260 단계에서, 메모리 컨트롤러(110)는 가용한 정정 어드레스(ADDR_COR)이 존재하는지 판별할 수 있다. 가용한 정정 어드레스(ADDR_RAW)가 존재하는 경우, S270 단계에서, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 다시 로딩할 수 있다.
일 실시 예에서, S210 단계 내지 S270 단계의 동작들은 도 3을 참조하여 설명된 S110 단계 내지 S170 단계의 동작들과 유사하므로, 각 단계에 대한 상세한 설명은 생략된다.
S275 단계에서, 메모리 컨트롤러(110)는 에러 비트들을 기반으로 정정 어드레스(ADDR_COR)를 선택할 수 있다. 예를 들어, S220 단계의 에러 정정 동작을 통해, 원본 데이터(DT_RAW)에 포함된 에러 비트들의 개수가 판별될 수 있다. ECC 엔진(111)에 의해 정정 가능한 에러 비트들의 개수가 K개(K는 자연수)이고, 원본 데이터(DT_RAW)에 포함된 에러 비트들의 개수가 N개(N은 K보다 큰 자연수)인 것으로 가정한다. 이 경우, 원본 데이터(DT_RAW)에서, N-K개의 에러 비트들에 대한 비트 플립 동작이 수행된 경우, 플립 데이터(DT_F)는 K개의 에러 비트들을 포함할 것이다. 이 경우, 플립 데이터(DT_F)는 ECC 엔진(111)에 의해 에러 정정될 것이다. 즉, 원본 데이터(DT_RAW)에 포함된 에러 비트들의 개수 및 ECC 엔진(111)의 에러 정정 능력에 따라, 비트 플립 동작이 수행될 비트들의 개수가 결정될 수 있다. 메모리 컨트롤러(110)의 에러 관리자(111)는 정정 이력 테이블(CHT)에서, N-K개의 정정 어드레스들을 선택할 수 있다. N은 원본 데이터(DT_RAW)에 포함된 에러 비트들의 개수이고, K는 ECC 엔진(111)에 의해 정정 가능한 에러 비트들의 개수를 가리킨다.
이후에, S280 단계에서, 메모리 컨트롤러(1109)는 선택된 정정 어드레스들(ADDR_COR)을 기반으로 원본 데이터(DT_RAW)에 대한 비트 플립 동작을 수행하여 플립 데이터(DT_F)를 생성한다. 메모리 컨트롤러(110)는 S220 단계의 동작을 다시 수행한다. 이후의 반복 동작은 도 3을 참조하여 설명된 바와 유사하므로, 이에 대한 상세한 설명은 생략된다.
가용한 정정 어드레스(ADDR_COR)가 없는 경우, S290 단계에서, 메모리 컨트롤러(110)는 에러 관리 동작(error handling operation)을 수행하고, 이후에 메모리 시스템(100)은 중단될 수 있다.
도 11a 및 도 11b는 도 10의 순서도에 따른 메모리 컨트롤러의 동작을 설명하기 위한 도면들이다. 도 1, 도 4, 도 10, 도 11a, 및 도 11b를 참조하면, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 읽고, 원본 데이터(DT_RAW)에 대한 에러 정정 동작을 수행할 수 있다.
이 때, 원본 데이터(DT_RAW)는 3개의 에러 비트들(3b ERR)를 포함하고 있으며, 각 에러 비트는 제1 행(R01)의 제8 열(C08), 제1 행(R01)의 제16 열(C16), 및 제1 행(R01)의 제23 열(C23)에 대응하는 비트들인 것으로 가정한다. 또한, ECC 엔진(111)은 1개의 에러 비트를 정정 가능한 것으로 가정한다.
도 10을 참조하여 설명된 바와 같이, 메모리 컨트롤러(110)의 에러 관리자(112)는 원본 데이터(DT_RAW)의 에러 비트들의 개수(즉, 3개) 및 ECC 엔진(111)의 에러 정정 능력(즉, 1개)을 기반으로, 정정 어드레스들(ADDR_COR)을 선택할 수 있다. 예를 들어, 원본 데이터(DT_RAW)는 3개의 에러 비트들(3b ERR)을 포함하고, ECC 엔진(111)은 1개의 에러 비트를 정정할 수 있으므로, 에러 관리자(112)는 정정 이력 테이블(CHT)에서, 제1 행(R01)에 대응하는 정정 어드레스들(ADDR_COR) 중 2개(즉, 3-1)를 선택할 수 있다. 도 11a에서, 제1 행(R01)에 대응하는 정정 어드레스들(ADDR_COR)은 5개이므로, 2개의 정정 어드레스들 선택을 위해 가능한 조합은 5C2 = 6개일 수 있다.
메모리 컨트롤러(110)의 에러 관리자(112)는 선택된 정정 어드레스들의 조합을 기반으로, 원본 데이터(DT_RAW)에 대한 비트 플립 동작을 수행할 수 있다. 도 11a의 구성에서, 메모리 컨트롤러(110)의 에러 관리자(112)는 제1 행(R01)의 제2 열(C02) 및 제1 행(R01)의 제4 열(C04)이 비트 플립 동작을 위해 선택하고, 이에 대한 비트 플립 동작을 수행하여 제1 플립 데이터(DT_F1)를 생성할 수 있다. 이 경우, 원본 데이터(DT_RAW)에서, 제1 행(R01)의 제2 열(C02) 및 제1 행(R01)의 제4 열(C04)에 대응하는 비트들은 정상 비트들이므로, 비트 플립 동작을 통해 각 비트는 에러 비트로 변경된다. 따라서, 제1 플립 데이터(DT_F1)는 5개의 에러 비트들을 포함하며, ECC 엔진(111)에 의해 에러가 정정되지 않을 것이다.
이와 유사한 방식으로, 모든 정정 어드레스들의 조합에 대하여 또는, ECC 엔진(111)에 의한 에러 정정이 성공할 때 까지, 메모리 컨트롤러(110)는 원본 데이터(DT_RAW)에 대한 비트 플립 동작 및 플립 데이터에 대한 에러 정정 동작을 반복 수행할 수 있다. 예를 들어, 도 11b에 도시된 바와 같이, 메모리 컨트롤러(110)는 제1 행(R01)의 제16 열(C16) 및 제1 행(R01)의 제23 열(C23)이 비트 플립 동작을 위해 선택하고, 이에 대한 비트 플립 동작을 수행하여 제6 플립 데이터(DT_F6)를 생성할 수 있다. 이 경우, 원본 데이터(DT_RAW)에서, 제1 행(R01)의 제16 열(C16) 및 제1 행(R01)의 제23 열(C23)에 대응하는 비트들은 에러 비트들이므로, 비트 플립 동작을 통해, 정상 비트들로 변경된다. 따라서, 제6 플립 데이터(DT_F6)는 1개의 에러 비트를 포함하며, ECC 엔진(111)에 의해 에러가 정정될 수 있다.
정정된 에러 비트에 대한 어드레스 정보(R01/C08)는 정정 어드레스(ADDR_COR)로서 정정 이력 테이블(CHT)에 추가될 수 있다.
일 실시 예에서, 메모리 컨트롤러(110)의 에러 관리자(112)는 비트 플립 동작을 위해 선택되는 적어도 하나의 정정 어드레스는 다양한 방식을 기반으로 선택할 수 있다. 예를 들어, 에러 관리자(112)는 임의의 순서로, 정정 이력 테이블(CHT)로부터 적어도 하나의 타겟 플립 어드레스를 선택할 수 있다. 또는, 에러 관리자(112)는 갱신 순서에 따라, 정정 이력 테이블(CHT)로부터 적어도 하나의 타겟 정정 어드레스를 선택할 수 있다. 또는, 에러 관리자(112)는 에러 발생 빈도에 따라, 정정 이력 테이블(CHT)로부터 적어도 하나의 타겟 플립 어드레스를 선택할 수 있다. 그러나 본 발명의 범위가 이에 한정되는 것은 아니며, 본 발명의 기술적 사상으로부터 벗어남없이, 다양한 방식을 기반으로 타겟 플립 어드레스가 선택될 수 있다.
도 12는 도 1의 메모리 컨트롤러의 동작을 보여주는 순서도이다. 도 1 및 도 12를 참조하면, S310 단계에서, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 로딩할 수 있다. S310 단계의 동작은 도 3의 S110 단계의 동작과 유사하므로, 이에 대한 상세한 설명은 생략된다.
S315 단계에서, 메모리 컨트롤러(110)는 원본 데이터(DT_RAW)를 읽기 버퍼에 저장할 수 있다. 예를 들어, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 읽은 원본 데이터(DT_RAW)를 저장하도록 구성된 읽기 버퍼를 포함할 수 있다.
이후에, 메모리 컨트롤러(110)는 S320 단계, S330 단계, S340 단계, S350 단계, S360 단계, S380 단계, 및 S390 단계의 동작들을 수행할 수 있다. 이는 도 3의 S120 단계, S130 단계, S140 단계, S150 단계, S160 단계, S180 단계, 및 S190 단계의 동작들과 유사하므로, 이에 대한 상세한 설명은 생략된다.
일 실시 예에서, 도 12의 순서도에 따르면, 메모리 컨트롤러(110)는 메모리 장치(120)로부터 원본 데이터(DT_RAW)를 읽고, 읽은 원본 데이터(DT_RAW)를 읽기 버퍼에 저장할 수 있다. 이후에, 메모리 컨트롤러(110)는 원본 데이터(DT_RAW)에 대한 추가적인 로딩없이, 읽기 버퍼에 저장된 원본 데이터(DT_RAW)를 사용하여 비트 플립 동작을 수행할 수 있다. 이 경우, 원본 데이터(DT_RAW)에 대한 반복적인 로딩 동작이 생략되므로, 메모리 시스템(100)의 성능 저하가 방지될 수 있다.
도 13은 본 발명의 실시 예에 따른 메모리 장치를 보여주는 블록도이다. 도 13을 참조하면, 메모리 장치(220)는 메모리 셀 어레이(221), CA 버퍼(222), 어드레스 디코더(223), 커맨드 디코더(224), 제어 로직 회로(225), 감지 증폭기 및 쓰기 드라이버(226), 및 입출력 회로(227)를 포함할 수 있다. 메모리 장치(220)의 구성 요소들은 도 2를 참조하여 설명되었으므로, 이에 대한 상세한 설명은 생략된다.
일 실시 예에서, 메모리 장치(220)는 온-다이 ECC 회로(228)를 더 포함할 수 있다. 온-다이 ECC 회로(228)는 메모리 컨트롤러(예를 들어, 도 1의 110)로부터 수신된 데이터에 대한 패리티 데이터를 생성하거나 또는 메모리 셀 어레이(221)로부터 읽은 데이터 및 패리티 데이터를 기반으로 에러 정정 동작을 수행하도록 구성될 수 있다. 즉, 온-다이 ECC 회로(228)는 메모리 장치(220) 내부에서, 데이터에 대한 에러 정정 동작을 수행할 수 있다.
일 실시 예에서, 온-다이 ECC 회로(228)는 도 1 내지 도 12를 참조하여 설명된 ECC 엔진(111) 및 에러 관리자(112)를 포함할 수 있고, 도 1 내지 도 12를 참조하여 설명된 동작 방법을 기반으로 비트 플립 동작 및 에러 정정 동작을 수행할 수 있다. 일 실시 예에서, 온-다이 ECC 회로(228)의 동작은 메모리 장치(220) 내부에서 수행된다는 점을 제외하면, 앞서 설명된 ECC 엔진(111) 및 에러 관리자(112)의 동작과 유사하므로, 이에 대한 상세한 설명은 생략된다.
도 14는 본 발명의 실시 예에 따른 메모리 시스템을 보여주는 블록도이다. 도 14를 참조하면, 메모리 시스템(1000)은 메모리 컨트롤러(1110), 메모리 장치(1120), 및 ECC 회로(1130)를 포함할 수 있다. 메모리 컨트롤러(1110)는 메모리 장치(1120)에 데이터를 저장하거나 또는 메모리 장치(1120)에 저장된 데이터를 읽을 수 있다.
일 실시 예에서, 메모리 컨트롤러(1110) 및 메모리 장치(1120) 사이의 데이터 경로에, ECC 회로(1130)가 위치할 수 있다. ECC 회로(1130)는 메모리 컨트롤러(1110) 및 메모리 장치(1120) 사이에서 송수신되는 데이터의 에러를 정정하도록 구성될 수 있다. 일 실시 예에서, ECC 회로(1130)는 도 1 내지 도 12를 참조하여 설명된 ECC 엔진(111) 및 에러 관리자(112)를 포함할 수 있고, 도 1 내지 도 12를 참조하여 설명된 동작 방법을 기반으로 정정 이력 테이블을 관리하고, 데이터의 에러를 정정할 수 있다.
도 15는 본 발명의 실시 예에 따른 메모리 시스템을 보여주는 블록도이다. 도 15를 참조하면, 메모리 시스템(1200)은 메모리 컨트롤러(1210) 및 메모리 장치(1220)를 포함할 수 있다. 메모리 컨트롤러(1210)는 메모리 장치(1220)를 제어하도록 구성될 수 있다.
메모리 컨트롤러(1210)는 컨트롤러 ECC 회로(1211)를 포함할 수 있다. 컨트롤러 ECC 회로(1211)는 메모리 장치(1220)에 저장될 쓰기 데이터에 대한 제1 패리티를 생성하고, 메모리 장치(1220)로부터 수신된 읽기 데이터 및 제1 패리티를 기반으로 읽기 데이터의 에러를 정정할 수 있다.
메모리 장치(1220)는 메모리 ECC 회로(1221)를 포함할 수 있다. 메모리 ECC 회로(1221)는 메모리 컨트롤러(1210로부터 수신된 쓰기 데이터 및 제1 패리티에 대한 제2 패리티를 생성하고, 메모리 장치(1220)에 저장된 읽기 데이터 및 제1 패리티, 및 제2 패리티를 기반으로 읽기 데이터 및 제1 패리티의 에러를 정정할 수 있다.
일 실시 예에서, 컨트롤러 ECC 회로(1211) 및 메모리 ECC 회로(1221) 각각은 도 1 내지 도 12을 참조하여 설명된 ECC 엔진(111) 및 에러 관리자(112)를 포함할 수 있고, 도 1 내지 도 12를 참조하여 설명된 방법을 기반으로 동작할 수 있다.
도 16은 본 발명의 실시 예에 따른 메모리 패키지의 일부 예를 보여주는 도면이다. 도 16을 참조하면, 메모리 패키지(2000)는 복수의 메모리 다이들(2110~2140) 및 버퍼 다이(2200)를 포함할 수 있다. 복수의 메모리 다이들(2110~2140) 각각은 DRAM 장치일 수 있다. 복수의 메모리 다이들(2110~2140) 및 버퍼 다이(2200)는 적층 구조로 구현될 수 있으며, TSV(through silicon via)를 통해 서로 전기적으로 연결되고, 서로 통신할 수 있다.
일 실시 예에서, 메모리 패키지(2000)는 Package on Package(PoP), Ball grid arrays(BGAs), Chip scale packages(CSPs), Plastic Leaded Chip Carrier(PLCC), Plastic Dual In Line Package(PDIP), Die in Waffle Pack, Die in Wafer Form, Chip On Board(COB), Ceramic Dual In Line Package(CERDIP), Plastic Metric Quad Flat Pack(MQFP), Thin Quad Flatpack(TQFP), Small Outline(SOIC), Shrink Small Outline Package(SSOP), Thin Small Outline(TSOP), Thin Quad Flatpack(TQFP), System In Package(SIP), Multi Chip Package(MCP), Wafer-level Fabricated Package(WFP), Wafer-Level Processed Stack Package(WSP) 등과 같은 방식으로 패키지화되어 하나의 반도체 패키지로 제공될 수 있다
버퍼 다이(2200)는 외부 호스트 장치(또는 메모리 컨트롤러)와 통신할 수 있다. 버퍼 다이(2200)는 복수의 메모리 다이들(2110~2140)에 저장될 데이터를 임시 저장하거나 또는 복수의 메모리 다이들(2110~2140)로부터 읽어진 데이터를 임시 저장하도록 구성될 수 있다. 일 실시 예에서, 버퍼 다이(2200)는 ECC 회로(2210)를 포함할 수 있다. ECC 회로(2210)는 메모리 다이들(2110~2140)에 저장될 데이터에 대한 패리티를 생성하거나 또는 메모리 다이들(2110~2140)로부터 읽어진 데이터의 에러를 정정할 수 있다. 일 실시 예에서, ECC 회로(2210)는 도 1 내지 도 12을 참조하여 설명된 ECC 엔진(111) 및 에러 관리자(112)를 포함하거나 또는 도 1 내지 도 12를 참조하여 설명된 방법을 기반으로 동작할 수 있다.
도 17은 본 발명의 실시 예에 따른 메모리 패키지의 일부 예를 보여주는 도면이다. 도 17을 참조하면, 메모리 패키지(3000)는 복수의 메모리 다이들(3110~3140) 및 호스트 다이(3200)를 포함할 수 있다. 복수의 메모리 다이들(3110~3140)은 마이크로 범프(MCB)를 통해 서로 전기적으로 연결되고, 적층 구조를 가질 수 있고, 호스트 다이(3200) 상부에 직접 적층될 수 있다. 호스트 다이(3200)는 SoC, CPU, 또는 GPU일 수 있다. 일 실시 예에서, 복수의 메모리 다이들(3110~3140) 각각 또는 호스트 다이(3200)는 도 1 내지 도 12를 참조하여 설명된 ECC 엔진(111) 및 에러 관리자(112)를 포함하거나 또는 도 1 내지 도 12를 참조하여 설명된 동작 방법을 기반으로 동작할 수 있다.
도 18은 본 발명의 일 실시예에 따른 스토리지(storage) 장치가 적용된 시스템(4000)을 도시한 도면이다. 도 18의 시스템(4000)은 기본적으로 휴대용 통신 단말기(mobile phone), 스마트폰(smart phone), 태블릿 PC(tablet personal computer), 웨어러블 기기, 헬스케어 기기 또는 IOT(internet of things) 기기와 같은 모바일(mobile) 시스템일 수 있다. 하지만 도 18의 시스템(4000)은 반드시 모바일 시스템에 한정되는 것은 아니고, 개인용 컴퓨터(personal computer), 랩탑(laptop) 컴퓨터, 서버(server), 미디어 재생기(media player) 또는 내비게이션(navigation)과 같은 차량용 장비(automotive device) 등이 될 수도 있다.
도 18을 참조하면, 시스템(4000)은 메인 프로세서(main processor)(4100), 메모리(4200a, 4200b) 및 스토리지 장치(4300a, 4300b)를 포함할 수 있으며, 추가로 촬영 장치(image capturing device)(4410), 사용자 입력 장치(user input device)(4420), 센서(4430), 통신 장치(4440), 디스플레이(4450), 스피커(4460), 전력 공급 장치(power supplying device)(4470) 및 연결 인터페이스(connecting interface)(4480) 중 하나 이상을 포함할 수 있다.
메인 프로세서(4100)는 시스템(4000)의 전반적인 동작, 보다 구체적으로는 시스템(4000)을 이루는 다른 구성 요소들의 동작을 제어할 수 있다. 이와 같은 메인 프로세서(4100)는 범용 프로세서, 전용 프로세서 또는 애플리케이션 프로세서(application processor) 등으로 구현될 수 있다.
메인 프로세서(4100)는 하나 이상의 CPU 코어(4110)를 포함할 수 있으며, 메모리(4200a, 4200b) 및/또는 스토리지 장치(4300a, 4300b)를 제어하기 위한 컨트롤러(4120)를 더 포함할 수 있다. 실시예에 따라서는, 메인 프로세서(4100)는 AI(artificial intelligence) 데이터 연산 등 고속 데이터 연산을 위한 전용 회로인 가속기(accelerator)(4130)를 더 포함할 수 있다. 이와 같은 가속기(4130)는 GPU(Graphics Processing Unit), NPU(Neural Processing Unit) 및/또는 DPU(Data Processing Unit) 등을 포함할 수 있으며, 메인 프로세서(4100)의 다른 구성 요소와는 물리적으로 독립된 별개의 칩(chip)으로 구현될 수도 있다.
메모리(4200a, 4200b)는 시스템(4000)의 주기억 장치로 사용될 수 있으며, SRAM 및/또는 DRAM 등의 휘발성 메모리를 포함할 수 있으나, 플래시 메모리, PRAM 및/또는 RRAM 등의 비휘발성 메모리를 포함할 수도 있다. 메모리(4200a, 4200b)는 메인 프로세서(4100)와 동일한 패키지 내에 구현되는 것도 가능하다.
스토리지 장치(4300a, 4300b)는 전원 공급 여부와 관계 없이 데이터를 저장하는 비휘발성 저장 장치로서 기능할 수 있으며, 메모리(4200a, 4200b)에 비해 상대적으로 큰 저장 용량을 가질 수 있다. 스토리지 장치(4300a, 4300b)는 스토리지 컨트롤러(4310a, 4310b)와, 스토리지 컨트롤러(4310a, 4310b)의 제어 하에 데이터를 저장하는 비휘발성 메모리(non-volatile memory, NVM)(4320a, 4320b)를 포함할 수 있다. 비휘발성 메모리(4320a, 4320b)는 2D(2-dimensional) 구조 혹은 3D(3-dimensional) V-NAND(Vertical NAND) 구조의 플래시 메모리를 포함할 수 있으나, PRAM 및/또는 RRAM 등의 다른 종류의 비휘발성 메모리를 포함할 수도 있다.
스토리지 장치(4300a, 4300b)는 메인 프로세서(4100)와는 물리적으로 분리된 상태로 시스템(4000)에 포함될 수도 있고, 메인 프로세서(4100)와 동일한 패키지 내에 구현될 수도 있다. 또한, 스토리지 장치(4300a, 4300b)는 SSD(solid state device) 혹은 메모리 카드(memory card)와 같은 형태를 가짐으로써, 후술할 연결 인터페이스(4480)와 같은 인터페이스를 통해 시스템(4000)의 다른 구성 요소들과 탈부착 가능하도록 결합될 수도 있다. 이와 같은 스토리지 장치(4300a, 4300b)는 UFS(Universal Flash Storage), eMMC(embedded multi-media card) 혹은 NVMe(non-volatile memory express)와 같은 표준 규약이 적용되는 장치일 수 있으나, 반드시 이에 한정되는 건 아니다.
촬영 장치(4410)는 정지 영상 또는 동영상을 촬영할 수 있으며, 카메라(camera), 캠코더(camcorder) 및/또는 웹캠(webcam) 등일 수 있다.
사용자 입력 장치(4420)는 시스템(4000)의 사용자로부터 입력된 다양한 유형의 데이터를 수신할 수 있으며, 터치 패드(touch pad), 키패드(keyboard), 키보드(keyboard), 마우스(mouse) 및/또는 마이크(microphone) 등일 수 있다.
센서(4430)는 시스템(4000)의 외부로부터 획득될 수 있는 다양한 유형의 물리량을 감지하고, 감지된 물리량을 전기 신호로 변환할 수 있다. 이와 같은 센서(4430)는 온도 센서, 압력 센서, 조도 센서, 위치 센서, 가속도 센서, 바이오 센서(biosensor) 및/또는 자이로스코프(gyroscope) 센서 등일 수 있다.
통신 장치(4440)는 다양한 통신 규약에 따라 시스템(4000) 외부의 다른 장치들과의 사이에서 신호의 송신 및 수신을 수행할 수 있다. 이와 같은 통신 장치(4440)는 안테나, 트랜시버(transceiver) 및/또는 모뎀(MODEM) 등을 포함하여 구현될 수 있다.
디스플레이(4450) 및 스피커(4460)는 시스템(4000)의 사용자에게 각각 시각적 정보와 청각적 정보를 출력하는 출력 장치로 기능할 수 있다.
전력 공급 장치(4470)는 시스템(4000)에 내장된 배터리(도시 안함) 및/또는외부 전원으로부터 공급되는 전력을 적절히 변환하여 시스템(4000)의 각 구성 요소들에게 공급할 수 있다.
연결 인터페이스(4480)는 시스템(4000)과, 시스템(4000)에 연결되어 시스템(4000과 데이터를 주고받을 수 있는 외부 장치 사이의 연결을 제공할 수 있다. 연결 인터페이스(4480)는 ATA(Advanced Technology Attachment), SATA(Serial ATA), e-SATA(external SATA), SCSI(Small Computer Small Interface), SAS(Serial Attached SCSI), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe, IEEE 1394, USB(universal serial bus), SD(secure digital) 카드, MMC(multi-media card), eMMC, UFS, eUFS(embedded Universal Flash Storage), CF(compact flash) 카드 인터페이스 등과 같은 다양한 인터페이스 방식으로 구현될 수 있다.
일 실시 예에서, 메인 프로세서(4100)는 도 1 내지 도 12를 참조하여 설명된 메모리 컨트롤러(110)를 포함할 수 있다. 즉, 메인 프로세서(4100)는 도 1 내지 도 12를 참조하여 설명된 동작 방법을 기반으로 메모리들(4200a~4200b)에 저장된 데이터의 에러를 정정하도록 구성될 수 있다. 또는, 메모리들(4200a~4200b) 각각은 도 1 내지 도 12를 참조하여 설명된 ECC 엔진(111) 및 에러 관리자(112)를 포함할 수 있고, 도 1 내지 도 12를 참조하여 설명된 동작 방법을 기반으로 데이터의 에러를 정정할 수 있다.
도 19는 본 발명의 예시적인 실시예에 따른 호스트-스토리지 시스템을 나타내는 블록도이다.
호스트-스토리지 시스템(5000)은 호스트(5100) 및 스토리지 장치(5200)를 포함할 수 있다. 또한, 스토리지 장치(5200)는 스토리지 컨트롤러(5210) 및 비휘발성 메모리 (NVM)(5220)를 포함할 수 있다. 또한, 본 발명의 예시적인 실시예에 따라, 호스트(5100)는 호스트 컨트롤러(5110) 및 호스트 메모리(5120)를 포함할 수 있다. 호스트 메모리(5120)는 스토리지 장치(5200)로 전송될 데이터, 혹은 스토리지 장치(5200)로부터 전송된 데이터를 임시로 저장하기 위한 버퍼 메모리로서 기능할 수 있다.
스토리지 장치(5200)는 호스트(5100)로부터의 요청에 따라 데이터를 저장하기 위한 저장 매체들을 포함할 수 있다. 일 예로서, 스토리지 장치(5200)는 SSD(Solid State Drive), 임베디드(embedded) 메모리 및 착탈 가능한 외장(external) 메모리 중 적어도 하나를 포함할 수 있다. 스토리지 장치(5200)가 SSD인 경우, 스토리지 장치(5200)는 NVMe(non-volatile memory express) 표준을 따르는 장치일 수 있다. 스토리지 장치(5200)가 임베디드 메모리 혹은 외장(external) 메모리인 경우, 스토리지 장치(5200)는 UFS(universal flash storage) 혹은 eMMC(embedded multi-media card) 표준을 따르는 장치일 수 있다. 호스트(5100)와 스토리지 장치(5200)는 각각 채용된 표준 프로토콜에 따른 패킷을 생성하고 이를 전송할 수 있다.
스토리지 장치(5200)의 비휘발성 메모리(5220)가 플래시 메모리를 포함할 때, 상기 플래시 메모리는 2D NAND 메모리 어레이나 3D(또는 수직형, Vertical) NAND(VNAND) 메모리 어레이를 포함할 수 있다. 다른 예로서, 스토리지 장치(5200)는 다른 다양한 종류의 비휘발성 메모리들을 포함할 수도 있다. 예를 들어, 스토리지 장치(5200)는 MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torgue MRAM), Conductive bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase RAM), 저항 메모리(Resistive RAM) 및 다른 다양한 종류의 메모리가 적용될 수 있다.
일 실시예에 따라, 호스트 컨트롤러(5110)와 호스트 메모리(5120)는 별도의 반도체 칩으로 구현될 수 있다. 또는, 일부 실시 예들에서, 호스트 컨트롤러(5110)와 호스트 메모리(5120)는 동일한 반도체 칩에 집적될 수 있다. 일 예로서, 호스트 컨트롤러(5110)는 애플리케이션 프로세서(Application Processor)에 구비되는 다수의 모듈들 중 어느 하나일 수 있으며, 상기 애플리케이션 프로세서는 시스템 온 칩(System on Chip, SoC)으로 구현될 수 있다. 또한, 호스트 메모리(5120)는 상기 애플리케이션 프로세서 내에 구비되는 임베디드 메모리이거나, 또는 상기 애플리케이션 프로세서의 외부에 배치되는 비휘발성 메모리 또는 메모리 모듈일 수 있다.
호스트 컨트롤러(5110)는 호스트 메모리(5120)의 버퍼 영역의 데이터(예컨대, 기록 데이터)를 비휘발성 메모리(5220)에 저장하거나, 비휘발성 메모리(5220)의 데이터(예컨대, 독출 데이터)를 버퍼 영역에 저장하는 동작을 관리할 수 있다.
스토리지 컨트롤러(5210)는 호스트 인터페이스(5211), 메모리 인터페이스(5212) 및 CPU(central processing unit)(5213)를 포함할 수 있다. 또한, 스토리지 컨트롤러(5210)는 플래시 변환 레이어(Flash Translation Layer; FTL)(5214), 패킷 매니저(5215), 버퍼 메모리(5216), ECC(error correction code)(5217) 엔진 및 AES(advanced encryption standard) 엔진(5218)을 더 포함할 수 있다. 스토리지 컨트롤러(5210)는 플래시 변환 레이어(FTL)(5214)가 로딩되는 워킹 메모리(미도시)를 더 포함할 수 있으며, CPU(5213)가 플래시 변환 레이어를 실행하는 것에 의해 비휘발성 메모리(5220)에 대한 데이터 기록 및 독출 동작이 제어될 수 있다.
호스트 인터페이스(5211)는 호스트(100)와 패킷(packet)을 송수신할 수 있다. 호스트(100)로부터 호스트 인터페이스(5211)로 전송되는 패킷은 커맨드(command) 혹은 비휘발성 메모리(5220)에 기록될 데이터 등을 포함할 수 있으며, 호스트 인터페이스(5211)로부터 호스트(5100)로 전송되는 패킷은 커맨드에 대한 응답(response) 혹은 비휘발성 메모리(5220)로부터 독출된 데이터 등을 포함할 수 있다. 메모리 인터페이스(5212)는 비휘발성 메모리(5220)에 기록될 데이터를 비휘발성 메모리(5220)로 송신하거나, 비휘발성 메모리(5220)로부터 독출된 데이터를 수신할 수 있다. 이러한 메모리 인터페이스(5212)는 토글(Toggle) 혹은 온파이(Open NAND Flash Interface; ONFI)와 같은 표준 규약을 준수하도록 구현될 수 있다.
플래시 변환 계층(5214)은 어드레스 매핑(address mapping), 웨어-레벨링(wear-leveling), 가비지 콜렉션(garbage collection)과 같은 여러 기능을 수행할 수 있다. 어드레스 매핑 동작은 호스트(5100)로부터 수신한 논리 어드레스(logical address)를, 비휘발성 메모리(5220) 내에 데이터를 실제로 저장하는 데 사용되는 물리 어드레스(physical address)로 바꾸는 동작이다. 웨어-레벨링은 비휘발성 메모리(5220) 내의 블록(block)들이 균일하게 사용되도록 하여 특정 블록의 과도한 열화를 방지하기 위한 기술로, 예시적으로 물리 블록(physical block)들의 소거 카운트들을 밸런싱하는 펌웨어 기술을 통해 구현될 수 있다. 가비지 콜렉션은, 블록의 유효 데이터를 새 블록에 복사한 후 기존 블록을 소거(erase)하는 방식을 통해 비휘발성 메모리(5220) 내에서 사용 가능한 용량을 확보하기 위한 기술이다.
패킷 매니저(5215)는 호스트(5100)와 협의된 인터페이스의 프로토콜에 따른 패킷(Packet)을 생성하거나, 호스트(5100)로부터 수신된 패킷(Packet)으로부터 각종 정보를 파싱할 수 있다. 또한, 버퍼 메모리(5216)는 비휘발성 메모리(5220)에 기록될 데이터 혹은 비휘발성 메모리(5220)로부터 독출될 데이터를 임시로 저장할 수 있다. 버퍼 메모리(5216)는 스토리지 컨트롤러(5210) 내에 구비되는 구성일 수 있으나, 스토리지 컨트롤러(5210)의 외부에 배치되어도 무방하다.
ECC 엔진(5217)은 비휘발성 메모리(5220)로부터 독출되는 독출 데이터에 대한 오류 검출 및 정정 기능을 수행할 수 있다. 보다 구체적으로, ECC 엔진(5217)은 비휘발성 메모리(5220)에 기입될 기입 데이터에 대하여 패리티 비트(parity bit)들을 생성할 수 있으며, 이와 같이 생성된 패리티 비트들은 기입 데이터와 함께 비휘발성 메모리(5220) 내에 저장될 수 있다. 비휘발성 메모리(5220)로부터의 데이터 독출 시, ECC 엔진(5217)은 독출 데이터와 함께 비휘발성 메모리(5220)로부터 독출되는 패리티 비트들을 이용하여 독출 데이터의 에러를 정정하고, 에러가 정정된 독출 데이터를 출력할 수 있다.
AES 엔진(5218)은, 스토리지 컨트롤러(5210)로 입력되는 데이터에 대한 암호화(encryption) 동작과 복호화(decryption) 동작 중 적어도 하나를, 대칭 키 알고리즘(symmetric-key algorithm)를 이용하여 수행할 수 있다.
일 실시 예에서, 버퍼 메모리(5216)는 스토리지 컨트롤러(5210) 외부에 위치할 수 있으며, 도 1 내지 도 12를 참조하여 설명된 메모리 장치 또는 DRAM 장치일 수 있다. 스토리지 컨트롤러(5210)는 도 1 내지 도 12를 참조하여 설명된 ECC 엔진(111) 및 에러 관리자(112)를 포함할 수 있고, 도 1 내지 도 12를 참조하여 설명된 동작 방법을 기반으로 버퍼 메모리(5216)로부터 읽은 데이터의 에러를 정정하도록 구성될 수 있다.
일 실시 예에서, 스토리지 컨트롤러(5210)는 도 1 내지 도 12를 참조하여 설명된 방법을 기반으로, 버퍼 메모리에 대한 정정 이력 테이블(CHT)을 관리할 수 있다. 일 실시 예에서, 스토리지 장치(5200)가 파워-오프 되는 경우, 스토리지 컨트롤러(5210)에서 관리되는 정정 이력 테이블(CHT)은 불휘발성 메모리(5220)로 플러쉬될 수 있고, 스토리지 장치(5200)가 파워-온 되는 경우, 정정 이력 테이블(CHT)은 불휘발성 메모리(5220)로부터 스토리지 컨트롤러(5210)로 로딩될 수 있다.
도 20은 본 발명의 일 실시예에 따른 메모리 장치가 적용된 데이터 센터를 나타낸 도면이다.
도 20을 참조하면, 데이터 센터(6000)는 각종 데이터를 모아두고 서비스를 제공하는 시설로서, 데이터 스토리지 센터라고 지칭될 수도 있다. 데이터 센터(6000)는 검색 엔진 및 데이터 베이스 운용을 위한 시스템일 수 있으며, 은행 등의 기업 또는 정부기관에서 사용되는 컴퓨팅 시스템일 수 있다. 데이터 센터(6000)는 애플리케이션 서버들(6100 내지 3100n) 및 스토리지 서버들(6200 내지 3200m)을 포함할 수 있다. 애플리케이션 서버들(6100 내지 3100n)의 개수 및 스토리지 서버들(6200 내지 3200m)의 개수는 실시예에 따라 다양하게 선택될 수 있고, 애플리케이션 서버들(6100 내지 3100n)의 개수 및 스토리지 서버들(6200 내지 3200m)의 개수는 서로 다를 수 있다.
애플리케이션 서버(6100) 또는 스토리지 서버(6200)는 프로세서(6110, 6210) 및 메모리(6120, 6220) 중 적어도 하나를 포함할 수 있다. 스토리지 서버(6200)를 예시로 설명하면, 프로세서(6210)는 스토리지 서버(6200)의 전반적인 동작을 제어할 수 있고, 메모리(6220)에 액세스하여 메모리(6220)에 로딩된 명령어 및/또는 데이터를 실행할 수 있다. 메모리(6220)는 DDR SDRAM(Double Data Rate Synchronous DRAM), HBM(High Bandwidth Memory), HMC(Hybrid Memory Cube), DIMM(Dual In-line Memory Module), Optane DIMM 및/또는 NVMDIMM(Non-Volatile DIMM)일 수 있다. 실시예에 따라, 스토리지 서버(6200)에 포함되는 프로세서(6210)의 개수 및 메모리(6220)의 개수는 다양하게 선택될 수 있다. 일 실시예에서, 프로세서(6210)와 메모리(6220)는 프로세서-메모리 페어를 제공할 수 있다. 일 실시예에서, 프로세서(6210)와 메모리(6220)의 개수는 서로 다를 수도 있다. 프로세서(6210)는 단일 코어 프로세서 또는 다중 코어 프로세서를 포함할 수 있다. 스토리지 서버(6200)에 대한 상기 설명은, 애플리케이션 서버(6100)에도 유사하게 적용될 수 있다. 실시예에 따라, 애플리케이션 서버(6100)는 스토리지 장치(6150)를 포함하지 않을 수도 있다. 스토리지 서버(6200)는 적어도 하나 이상의 스토리지 장치(6250)를 포함할 수 있다. 스토리지 서버(6200)에 포함되는 스토리지 장치(6250)의 개수는 실시예에 따라 다양하게 선택될 수 있다.
애플리케이션 서버들(6100 내지 3100n) 및 스토리지 서버들(6200 내지 3200m)은 네트워크(6300)를 통해 서로 통신할 수 있다. 네트워크(6300)는 FC(Fibre Channel) 또는 이더넷(Ethernet) 등을 이용하여 구현될 수 있다. 이 때, FC는 상대적으로 고속의 데이터 전송에 사용되는 매체이며, 고성능/고가용성을 제공하는 광 스위치를 사용할 수 있다. 네트워크(6300)의 액세스 방식에 따라 스토리지 서버들(6200 내지 3200m)은 파일 스토리지, 블록 스토리지, 또는 오브젝트 스토리지로서 제공될 수 있다.
일 실시예에서, 네트워크(6300)는 SAN(Storage Area Network)와 같은 스토리지 전용 네트워크일 수 있다. 예를 들어, SAN은 FC 네트워크를 이용하고 FCP(FC Protocol)에 따라 구현된 FC-SAN일 수 있다. 다른 예를 들어, SAN은 TCP/IP 네트워크를 이용하고 iSCSI(SCSI over TCP/IP 또는 Internet SCSI) 프로토콜에 따라 구현된 IP-SAN일 수 있다. 다른 실시예에서, 네트워크(6300)는 TCP/IP 네트워크와 같은 일반 네트워크일 수 있다. 예를 들어, 네트워크(6300)는 FCoE(FC over Ethernet), NAS(Network Attached Storage), NVMe-oF(NVMe over Fabrics) 등의 프로토콜에 따라 구현될 수 있다.
이하에서는, 애플리케이션 서버(6100) 및 스토리지 서버(6200)를 중심으로 설명하기로 한다. 애플리케이션 서버(6100)에 대한 설명은 다른 애플리케이션 서버(6100n)에도 적용될 수 있고, 스토리지 서버(6200)에 대한 설명은 다른 스토리지 서버(6200m)에도 적용될 수 있다.
애플리케이션 서버(6100)는 사용자 또는 클라이언트가 저장 요청한 데이터를 네트워크(6300)를 통해 스토리지 서버들(6200 내지 3200m) 중 하나에 저장할 수 있다. 또한, 애플리케이션 서버(6100)는 사용자 또는 클라이언트가 독출 요청한 데이터를 스토리지 서버들(6200 내지 3200m) 중 하나로부터 네트워크(6300)를 통해 획득할 수 있다. 예를 들어, 애플리케이션 서버(6100)는 웹 서버 또는 DBMS(Database Management System) 등으로 구현될 수 있다.
애플리케이션 서버(6100)는 네트워크(6300)를 통해 다른 애플리케이션 서버(6100n)에 포함된 메모리(6120n) 또는 스토리지 장치(6150n)에 액세스할 수 있고, 또는 네트워크(6300)를 통해 스토리지 서버들(6200-6200m)에 포함된 메모리들(6220-6220m) 또는 스토리지 장치(6250-6250m)에 액세스할 수 있다. 이로써, 애플리케이션 서버(6100)는 애플리케이션 서버들(6100-6100n) 및/또는 스토리지 서버들(6200-6200m)에 저장된 데이터에 대해 다양한 동작들을 수행할 수 있다. 예를 들어, 애플리케이션 서버(6100)는 애플리케이션 서버들(6100-6100n) 및/또는 스토리지 서버들(6200-6200m) 사이에서 데이터를 이동 또는 카피(copy)하기 위한 명령어를 실행할 수 있다. 이 때 데이터는 스토리지 서버들(6200-6200m)의 스토리지 장치(6250-6250m)로부터 스토리지 서버들(6200-6200m)의 메모리들(6220-6220m)을 거쳐서, 또는 바로 애플리케이션 서버들(6100-6100n)의 메모리(6120-6120n)로 이동될 수 있다. 네트워크(6300)를 통해 이동하는 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
스토리지 서버(6200)를 예시로 설명하면, 인터페이스(6254)는 프로세서(6210)와 컨트롤러(6251)의 물리적 연결 및 NIC(Network InterConnect)(6240)와 컨트롤러(6251)의 물리적 연결을 제공할 수 있다. 예를 들어, 인터페이스(6254)는 스토리지 장치(6250)를 전용 케이블로 직접 접속하는 DAS(Direct Attached Storage) 방식으로 구현될 수 있다. 또한, 예를 들어, 인터페이스(6254)는 ATA(Advanced Technology Attachment), SATA(Serial ATA), e-SATA(external SATA), SCSI(Small Computer Small Interface), SAS(Serial Attached SCSI), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe(NVM express), IEEE 1394, USB(universal serial bus), SD(secure digital) 카드, MMC(multi-media card), eMMC(embedded multi-media card), UFS(Universal Flash Storage), eUFS(embedded Universal Flash Storage), 및/또는 CF(compact flash) 카드 인터페이스 등과 같은 다양한 인터페이스 방식으로 구현될 수 있다.
스토리지 서버(6200)는 스위치(6230) 및 NIC(6240)을 더 포함할 수 있다. 스위치(6230)는 프로세서(6210)의 제어에 따라 프로세서(6210)와 스토리지 장치(6250)를 선택적으로 연결시키거나, NIC(6240)와 스토리지 장치(6250)를 선택적으로 연결시킬 수 있다.
일 실시예에서 NIC(6240)는 네트워크 인터페이스 카드, 네트워크 어댑터 등을 포함할 수 있다. NIC(6240)는 유선 인터페이스, 무선 인터페이스, 블루투스 인터페이스, 광학 인터페이스 등에 의해 네트워크(6300)에 연결될 수 있다. NIC(6240)는 내부 메모리, DSP(Digital Signal Processor), 호스트 버스 인터페이스 등을 포함할 수 있으며, 호스트 버스 인터페이스를 통해 프로세서(6210) 및/또는 스위치(6230) 등과 연결될 수 있다. 호스트 버스 인터페이스는, 앞서 설명한 인터페이스(6254)의 예시들 중 하나로 구현될 수도 있다. 일 실시예에서, NIC(6240)는 프로세서(6210), 스위치(6230), 스토리지 장치(6250) 중 적어도 하나와 통합될 수도 있다.
스토리지 서버들(6200-6200m) 또는 애플리케이션 서버들(6100-6100n)에서 프로세서는 스토리지 장치(6150-6150n, 6250-6250m) 또는 메모리(6120-6120n, 6220-6220m)로 커맨드를 전송하여 데이터를 프로그램하거나 리드할 수 있다. 이 때 데이터는 ECC(Error Correction Code) 엔진을 통해 에러 정정된 데이터일 수 있다. 데이터는 데이터 버스 변환(Data Bus Inversion: DBI) 또는 데이터 마스킹(Data Masking: DM) 처리된 데이터로서, CRC(Cyclic Redundancy Code) 정보를 포함할 수 있다. 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
스토리지 장치(6150-6150n, 6250-6250m)는 프로세서로부터 수신된 리드 커맨드에 응답하여, 제어 신호 및 커맨드/어드레스 신호를 NAND 플래시 메모리 장치(6252-6252m)로 전송할 수 있다. 이에 따라 NAND 플래시 메모리 장치(6252-6252m)로부터 데이터를 독출하는 경우, RE(Read Enable) 신호는 데이터 출력 제어 신호로 입력되어, 데이터를 DQ 버스로 출력하는 역할을 할 수 있다. RE 신호를 이용하여 DQS(Data Strobe)가 생성될 수 있다. 커맨드와 어드레스 신호는 WE(Write Enable) 신호의 상승 엣지 또는 하강 엣지에 따라 페이지 버퍼에 래치될 수 있다.
컨트롤러(6251)는 스토리지 장치(6250)의 동작을 전반적으로 제어할 수 있다. 일 실시예에서, 컨트롤러(6251)는 SRAM(Static Random Access Memory)을 포함할 수 있다. 컨트롤러(6251)는 기입 커맨드에 응답하여 낸드 플래시(6252)에 데이터를 기입할 수 있고, 또는 독출 커맨드에 응답하여 낸드 플래시(6252)로부터 데이터를 독출할 수 있다. 예를 들어, 기입 커맨드 및/또는 독출 커맨드는 스토리지 서버(6200) 내의 프로세서(6210), 다른 스토리지 서버(6200m) 내의 프로세서(6210m) 또는 애플리케이션 서버(6100, 6100n) 내의 프로세서(6110, 6110n)로부터 제공될 수 있다. DRAM(6253)은 낸드 플래시(6252)에 기입될 데이터 또는 낸드 플래시(6252)로부터 독출된 데이터를 임시 저장(버퍼링)할 수 있다. 또한, DRAM(6253)은 메타 데이터를 저장할 수 있다. 여기서, 메타 데이터는 사용자 데이터 또는 낸드 플래시(6252)를 관리하기 위해 컨트롤러(6251)에서 생성된 데이터이다. 스토리지 장치(6250)는 보안 또는 프라이버시를 위해 SE(Secure Element)를 포함할 수 있다.
일 실시 예에서, 애플리케이션 서버들(6100~6100n) 및 스토리지 서버들(6200~6200m) 각각에 포함된 프로세서들(6110~6110n, 6210~6210m) 각각은 도 1 내지 도 12를 참조하여 설명된 메모리 컨트롤러를 포함할 수 있고, 도 1 내지 도 12를 참조하여 설명된 동작 방법을 기반으로 애플리케이션 서버들(6100~6100n) 및 스토리지 서버들(6200~6200m) 각각에 포함된 메모리들(6120~6120n, 6220~6220m)에 저장된 데이터의 에러를 정정하도록 구성될 수 있다. 일 실시 예에서, 도 1 내지 도 12를 참조하여 설명된 방법으로, 애플리케이션 서버들(6100~6100n) 및 스토리지 서버들(6200~6200m) 중 어느 하나에 포함된 프로세서(예를 들어, 6110)는 애플리케이션 서버들(6100~6100n) 및 스토리지 서버들(6200~6200m) 중 다른 하나에 포함된 메모리(예를 들어, 6220)에 저장된 데이터의 에러를 정정하고 관리할 수 있다.
상술된 내용은 본 발명을 실시하기 위한 구체적인 실시 예들이다. 본 발명은 상술된 실시 예들뿐만 아니라, 단순하게 설계 변경되거나 용이하게 변경할 수 있는 실시 예들 또한 포함할 것이다. 또한, 본 발명은 실시 예들을 이용하여 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다. 따라서, 본 발명의 범위는 상술된 실시 예들에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 할 것이다.
Claims (20)
- 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법에 있어서,
상기 메모리 장치로부터 원본 데이터를 로딩하는 단계;
상기 원본 데이터에 대한 제0 에러 정정 동작을 수행하는 단계;
상기 제0 에러 정정 동작을 통해 상기 원본 데이터의 에러가 정정되지 않는 경우, 정정 이력 테이블을 기반으로, 상기 원본 데이터에 대한 제1 비트 플립 동작을 수행하여 제1 플립 데이터를 생성하는 단계; 및
상기 제1 플립 데이터에 대한 제1 에러 정정 동작을 수행하는 단계를 포함하고,
상기 정정 이력 테이블은 이전에 정정된 에러 비트들에 대한 상기 메모리 장치에서의 위치들을 가리키는 정정 어드레스들을 포함하는 동작 방법.
- 제 1 항에 있어서,
상기 제1 플립 데이터를 생성하는 단계는:
상기 정정 이력 테이블로부터, 상기 원본 데이터의 행 어드레스에 대응하는 정정 어드레스들 중, 제1 타겟 어드레스를 선택하는 단계; 및
상기 원본 데이터에서, 상기 선택된 제1 타겟 어드레스와 대응하는 비트를 플립하여 상기 제1 플립 데이터를 생성하는 단계를 포함하는 동작 방법.
- 제 2 항에 있어서,
상기 정정 이력 테이블은 상기 정정 어드레스들 각각에 대한 카운트 정보를 포함하고,
상기 카운트 정보는 상기 정정 어드레스들 각각에 대응하는 비트들이 정정된 횟수를 가리키는 동작 방법.
- 제 3 항에 있어서,
상기 제1 타겟 어드레스는 상기 원본 데이터의 행 어드레스에 대응하는 정정 어드레스들 중 가장 큰 카운트 정보에 대응하는 정정 어드레스인 동작 방법.
- 제 2 항에 있어서,
상기 원본 데이터의 에러 비트들이 N개(단, N은 자연수)이고, 상기 메모리 컨트롤러에서 정정 가능한 에러 비트들의 개수가 K개(단, K는 자연수)인 경우, 상기 제1 타겟 어드레스는 상기 원본 데이터 중 N-K개의 비트들에 대응하는 동작 방법.
- 제 1 항에 있어서,
상기 제1 플립 데이터를 생성하는 단계는:
상기 메모리 장치로부터 상기 원본 데이터를 재로딩하는 단계;
상기 재로딩된 원본 데이터에 대한 제1 비트 플립 동작을 수행하여 상기 제1 플립 데이터를 생성하는 단계를 포함하는 동작 방법.
- 제 1 항에 있어서,
상기 메모리 장치로부터 로딩된 상기 원본 데이터는 상기 메모리 컨트롤러의 읽기 버퍼에 저장되고,
상기 제1 플립 데이터를 생성하는 단계는:
상기 정정 이력 테이블을 기반으로 상기 읽기 버퍼에 저장된 원본 데이터에 대한 상기 제1 비트 플립 동작을 수행하여 상기 제1 플립 데이터를 생성하는 단계를 포함하는 동작 방법.
- 제 1 항에 있어서,
상기 제1 에러 정정 동작을 통해 상기 제1 플립 데이터의 에러가 정정되지 않는 경우, 상기 정정 이력 테이블을 기반으로, 상기 원본 데이터에 대한 제2 비트 플립 동작을 수행하여 제2 플립 데이터를 생성하는 단계; 및
상기 제2 플립 데이터에 대한 제2 에러 정정 동작을 수행하는 단계를 더 포함하는 동작 방법.
- 제 8 항에 있어서,
상기 원본 데이터에서, 상기 제1 비트 플립 동작을 통해 플립되는 비트들은 상기 제2 비트 플립 동작을 통해 플립되는 비트들과 다른 동작 방법.
- 제 8 항에 있어서,
상기 제2 에러 정정 동작에 의해 상기 제2 플립 데이터의 에러가 정정되지 않는 경우, 에러 핸들링 동작을 수행하는 단계를 더 포함하는 동작 방법.
- 제 1 항에 있어서,
상기 제1 플립 데이터의 에러가 정정된 경우, 상기 제1 플립 데이터에서 정정된 에러 비트의 위치에 대한 정정 어드레스를 기반으로 상기 정정 이력 테이블을 갱신하는 단계를 더 포함하는 동작 방법.
- 제 1 항에 있어서,
상기 정정 이력 테이블을 외부 불휘발성 메모리로 플러쉬하는 단계를 더 포함하는 동작 방법.
- 제 1 항에 있어서,
상기 메모리 장치는 DRAM(dynamic random access memory) 장치인 동작 방법.
- 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법에 있어서,
상기 메모리 장치로부터 제0 원본 데이터를 로딩하는 단계;
상기 제0 원본 데이터에 대한 제0 에러 정정 동작을 수행하는 단계;
상기 제0 원본 데이터에서 정정된 에러 비트에 대응하는 제0 어드레스를 기반으로 정정 이력 테이블을 갱신하는 단계;
상기 메모리 장치로부터, 상기 제0 원본 데이터의 행 어드레스와 동일한 행 어드레스를 갖는 제1 원본 데이터를 로딩하는 단계;
상기 제1 원본 데이터에 대한 제1 에러 정정 동작을 수행하는 단계;
상기 제1 원본 데이터의 에러가 정정되지 않는 경우, 상기 정정 이력 테이블을 기반으로 상기 제1 원본 데이터에서 상기 제0 어드레스에 대응하는 비트를 플립하여 제1 플립 데이터를 생성하는 단계; 및
상기 제1 플립 데이터에 대한 제2 에러 정정 동작을 수행하는 단계를 포함하는 동작 방법.
- 제 14 항에 있어서,
상기 제1 플립 데이터를 생성하는 단계는:
상기 메모리 장치로부터 상기 제1 원본 데이터를 재로딩하는 단계;
상기 재로딩된 제1 원본 데이터에서, 상기 제0 어드레스에 대응하는 비트를 플립하여 상기 제1 플립 데이터를 생성하는 단계를 포함하는 동작 방법.
- 제 14 항에 있어서,
상기 제2 에러 정정 동작을 통해, 상기 제1 플립 데이터의 에러가 정정된 경우, 상기 제1 플립 데이터에서 정정된 에러 비트에 대응하는 제2 어드레스를 기반으로 상기 정정 이력 테이블을 갱신하는 단계를 더 포함하는 동작 방법.
- 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법에 있어서,
상기 메모리 장치로부터 원본 데이터를 로딩하는 단계;
상기 원본 데이터에 대한 제0 에러 정정 동작을 수행하는 단계;
상기 제0 에러 정정 동작을 통해 원본 데이터의 에러가 정정되지 않는 경우, 상기 원본 데이터의 복수의 비트들 중 적어도 하나의 비트를 플립하여 제1 플립 데이터를 생성하는 단계; 및
상기 제1 플립 데이터에 대한 제1 에러 정정 동작을 수행하는 단계를 포함하는 동작 방법.
- 제 17 항에 있어서,
상기 제1 에러 정정 동작을 통해 상기 제1 플립 데이터의 에러가 정정되지 않는 경우, 상기 원본 데이터의 복수의 비트들 중 적어도 하나의 다른 비트를 플립하여 제2 플립 데이터를 생성하는 단계; 및
상기 제2 플립 데이터에 대한 제2 에러 정정 동작을 수행하는 단계를 더 포함하는 동작 방법.
- 제 17 항에 있어서,
상기 원본 데이터의 복수의 비트들 중 상기 플립되는 적어도 하나의 비트는 정정 이력 테이블을 기반으로 선택되고,
상기 정정 이력 테이블은, 상기 메모리 장치에서, 상기 원본 데이터가 저장된 메모리 셀들 중 에러가 정정된 비트에 대한 정보를 포함하는 동작 방법.
- 제 19 항에 있어서,
상기 제1 플립 데이터의 에러가 정정된 경우, 상기 제1 플립 데이터의 정정된 에러 비트에 대한 정보를 기반으로 상기 정정 이력 테이블을 갱신하는 단계를 더 포함하는 동작 방법.
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020220174036A KR20240090083A (ko) | 2022-12-13 | 2022-12-13 | 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법 |
CN202311380464.5A CN118192881A (zh) | 2022-12-13 | 2023-10-23 | 被配置为控制存储器装置的存储器控制器的操作方法 |
US18/386,656 US20240193041A1 (en) | 2022-12-13 | 2023-11-03 | Operation method of memory controller configured to control memory device |
EP23215810.5A EP4386556A1 (en) | 2022-12-13 | 2023-12-12 | Operation method of memory controller configured to control memory device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020220174036A KR20240090083A (ko) | 2022-12-13 | 2022-12-13 | 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20240090083A true KR20240090083A (ko) | 2024-06-21 |
Family
ID=91380839
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020220174036A KR20240090083A (ko) | 2022-12-13 | 2022-12-13 | 메모리 장치를 제어하도록 구성된 메모리 컨트롤러의 동작 방법 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20240193041A1 (ko) |
KR (1) | KR20240090083A (ko) |
CN (1) | CN118192881A (ko) |
-
2022
- 2022-12-13 KR KR1020220174036A patent/KR20240090083A/ko unknown
-
2023
- 2023-10-23 CN CN202311380464.5A patent/CN118192881A/zh active Pending
- 2023-11-03 US US18/386,656 patent/US20240193041A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
CN118192881A (zh) | 2024-06-14 |
US20240193041A1 (en) | 2024-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102691851B1 (ko) | 불휘발성 메모리 장치, 이를 포함하는 데이터 저장 장치 및 그 동작 방법 | |
US11853219B2 (en) | Storage controller having data prefetching control function, operating method of storage controller, and operating method of storage device | |
CN110069357B (zh) | 集成电路存储器装置及其操作方法 | |
US20220197510A1 (en) | Storage device for executing processing code and operating method of the storage device | |
US20220179724A1 (en) | Method for operating storage device and host device, and storage device | |
US11782638B2 (en) | Storage device with improved read latency and operating method thereof | |
US11868270B2 (en) | Storage system and storage device, and operating method thereof | |
US11901321B2 (en) | Three-dimensional (3D) storage device using wafer-to-wafer bonding | |
US20210397558A1 (en) | Storage device and operating method thereof | |
US20240193041A1 (en) | Operation method of memory controller configured to control memory device | |
EP4386556A1 (en) | Operation method of memory controller configured to control memory device | |
US12014772B2 (en) | Storage controller and storage device including the same | |
US11899941B2 (en) | Storage device and operating method thereof | |
US12045472B2 (en) | Storage device supporting multi-tenant operation and methods of operating same | |
US12039173B2 (en) | Data storage device that detects and releases input queue bottlenecks | |
US12045468B2 (en) | Storage devices configured to obtain data of external devices for debugging | |
US20230092380A1 (en) | Operation method of memory controller configured to control memory device | |
US11157214B2 (en) | Controller, memory system and operating method thereof | |
US20230096408A1 (en) | Storage device and operating method thereof | |
US20230146540A1 (en) | Storage device and an operating method of a storage controller thereof | |
US20230112776A1 (en) | Operation method of memory module, operation method of memory controller, and operation method of memory system | |
US20230038363A1 (en) | Three-dimensional storage device using wafer-to-wafer bonding | |
US20240231687A9 (en) | Computational storage device, method for operating the computational storage device and method for operating host device | |
US20240111426A1 (en) | Data Storage Device That Detects and Releases Bottlenecks In Hardware | |
KR20230068939A (ko) | 스토리지 장치 및 그 구동 방법 |