KR20210104408A - 컨트롤러 및 컨트롤러의 동작방법 - Google Patents

컨트롤러 및 컨트롤러의 동작방법 Download PDF

Info

Publication number
KR20210104408A
KR20210104408A KR1020200019093A KR20200019093A KR20210104408A KR 20210104408 A KR20210104408 A KR 20210104408A KR 1020200019093 A KR1020200019093 A KR 1020200019093A KR 20200019093 A KR20200019093 A KR 20200019093A KR 20210104408 A KR20210104408 A KR 20210104408A
Authority
KR
South Korea
Prior art keywords
error correction
data
correction decoding
codeword
memory device
Prior art date
Application number
KR1020200019093A
Other languages
English (en)
Inventor
김민철
Original Assignee
에스케이하이닉스 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에스케이하이닉스 주식회사 filed Critical 에스케이하이닉스 주식회사
Priority to KR1020200019093A priority Critical patent/KR20210104408A/ko
Publication of KR20210104408A publication Critical patent/KR20210104408A/ko

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
    • 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
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Read Only Memory (AREA)

Abstract

메모리 장치를 제어하는 컨트롤러의 동작 방법은, 상기 메모리 장치로부터 리드된 데이터에 포함된 코드워드의 제1 에러 정정 디코딩 페일 여부에 따라 상기 코드워드를 시작점 S부터 수준 N씩 시프팅하는 단계; 상기 시프팅된 코드워드의 제2 에러 정정 디코딩을 수행하는 단계; 상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 로컬 반복횟수까지 매 반복마다 상기 시작점 S를 초기값에서부터 증분 I씩 증가시키면서 상기 시프팅하는 단계 및 제2 에러 정정 디코딩을 로컬 반복 수행하는 단계; 및 상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 글로벌 반복횟수까지 매 반복마다 상기 수준 N을 초기값부터 1단위씩 증가시키면서 상기 로컬 반복 수행하는 단계를 글로벌 반복 수행하는 단계를 포함한다.

Description

컨트롤러 및 컨트롤러의 동작방법 {CONTROLLER AND OPERATION METHOD THEREOF}
본 발명은 메모리 장치를 제어하는 컨트롤러에 관한 것이다.
최근 컴퓨터 환경에 대한 패러다임(paradigm)이 언제, 어디서나 컴퓨터 시스템을 사용할 수 있도록 하는 유비쿼터스 컴퓨팅(ubiquitous computing)으로 전환되고 있다. 이로 인해 휴대폰, 디지털 카메라, 노트북 컴퓨터 등과 같은 휴대용 전자 장치의 사용이 급증하고 있다. 이와 같은 휴대용 전자 장치는 일반적으로 메모리 장치를 이용하는 메모리 시스템, 다시 말해 데이터 저장 장치를 사용한다. 데이터 저장 장치는 휴대용 전자 장치의 주 기억 장치 또는 보조 기억 장치로 사용된다.
메모리 장치를 이용한 데이터 저장 장치는 기계적인 구동부가 없어서 안정성 및 내구성이 뛰어나며, 또한 정보의 액세스 속도가 매우 빠르고 전력 소모가 적다는 장점이 있다. 이러한 장점을 갖는 메모리 시스템의 일 예로 데이터 저장 장치는, USB(Universal Serial Bus) 메모리 장치, 다양한 인터페이스를 갖는 메모리 카드, 솔리드 스테이트 드라이브(SSD: Solid State Drive) 등을 포함한다.
본 발명은 메모리 장치의 손상된 데이터를 복구할 수 있는 컨트롤러 및 그의 동작 방법을 제공할 수 있다.
본 발명의 실시 예에 따르면, 메모리 장치를 제어하는 컨트롤러의 동작 방법은, 상기 메모리 장치로부터 리드된 데이터에 포함된 코드워드의 제1 에러 정정 디코딩 페일 여부에 따라 상기 코드워드를 시작점 S부터 수준 N씩 시프팅하는 단계; 상기 시프팅된 코드워드의 제2 에러 정정 디코딩을 수행하는 단계; 상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 로컬 반복횟수까지 매 반복마다 상기 시작점 S를 초기값에서부터 증분 I씩 증가시키면서 상기 시프팅하는 단계 및 제2 에러 정정 디코딩을 로컬 반복 수행하는 단계; 및 상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 글로벌 반복횟수까지 매 반복마다 상기 수준 N을 초기값부터 1단위씩 증가시키면서 상기 로컬 반복 수행하는 단계를 글로벌 반복 수행하는 단계를 포함한다.
본 발명의 실시 예에 따르면, 메모리 장치를 제어하는 컨트롤러는, 상기 메모리 장치로부터 리드된 데이터를 버퍼링하는 메모리; 상기 리드된 데이터에 포함된 코드워드의 에러 정정 디코딩을 수행하는 에러 정정 코드; 및 상기 코드워드의 제1 에러 정정 디코딩 페일 여부에 따라 상기 코드워드를 시작점 S부터 수준 N씩 시프팅하고, 상기 시프팅된 코드워드의 제2 에러 정정 디코딩을 수행하도록 에러 정정 코드를 제어하는 데이터 복구 제어부를 포함하고, 상기 데이터 복구 제어부는 상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 로컬 반복횟수까지 매 반복마다 상기 시작점 S를 초기값에서부터 증분 I씩 증가시키면서 상기 시프팅 및 상기 에러 정정 코드 제어를 로컬 반복 수행하고, 상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 글로벌 반복횟수까지 매 반복마다 상기 수준 N을 초기값부터 1단위씩 증가시키면서 상기 로컬 반복 수행하는 단계를 글로벌 반복 수행한다.
본 발명은 메모리 장치의 손상된 데이터를 복구할 수 있는 컨트롤러 및 그의 동작 방법을 제공할 수 있다.
도 1은 본 발명의 실시 예에 따른 컨트롤러를 포함하는 데이터 처리 시스템을 도시한 도면이다.
도 2a 및 도 2b는 메모리 장치의 동작 에러를 설명하기 위한 도면이다.
도 3a 및 도 3b는 메모리 장치에 프로그램된 데이터의 에러 발생을 설명하기 위한 도면이다.
도 4는 본 발명의 실시 예에 따른 컨트롤러의 동작을 나타내는 도면이다.
도 5는 본 발명의 실시 예에 따른 컨트롤러의 동작을 설명하기 위한 도면이다.
도 6은 본 발명의 실시 예에 따른 컨트롤러의 동작을 나타내는 흐름도이다.
도 7a 내지 도 7c는 본 발명의 실시 예에 따른 증분 I를 설명한다.
이하, 본 발명에 따른 바람직한 실시 예를 첨부한 도면을 참조하여 상세히 설명한다. 하기의 설명에서는 본 발명에 따른 동작을 이해하는데 필요한 부분만이 설명되며 그 이외 부분의 설명은 본 발명의 요지를 흩뜨리지 않도록 생략될 것이라는 것을 유의하여야 한다.
도 1은 본 발명의 실시 예에 따른 메모리 시스템을 포함하는 데이터 처리 시스템의 일 예를 개략적으로 도시한 도면이다.
도 1을 참조하면, 데이터 처리 시스템(100)은, 호스트(102) 및 메모리 시스템(110)을 포함한다.
호스트(102)는 전자 장치, 예컨대 휴대폰, MP3 플레이어, 랩탑 컴퓨터 등과 같은 휴대용 전자 장치들, 또는 데스크탑 컴퓨터, 게임기, TV, 프로젝터 등과 같은 전자 장치들을 포함할 수 있다.
호스트(102)는 적어도 하나의 운영 시스템(OS: operating system)을 포함할 수 있다. 운영 시스템은 호스트(102)의 기능 및 동작을 전반적으로 관리 및 제어하고, 데이터 처리 시스템(100) 또는 메모리 시스템(110)을 사용하는 사용자와 호스트(102) 간에 상호 동작을 제공한다. 운영 시스템은 사용자의 사용 목적 및 용도에 상응한 기능 및 동작을 지원하며, 호스트(102)의 이동성(mobility)에 따라 일반 운영 시스템과 모바일 운용 시스템으로 구분할 수 있다. 운영 시스템에서의 일반 운영 시스템 시스템은, 사용자의 사용 환경에 따라 개인용 운영 시스템과 기업용 운영 시스템으로 구분할 수 있다.
메모리 시스템(110)은 호스트(102)의 요청에 응하여 호스트(102)의 데이터를 저장하기 위해 동작할 수 있다. 예컨대, 메모리 시스템(110)은 솔리드 스테이트 드라이브(SSD: Solid State Drive), MMC, eMMC(embedded MMC), RS-MMC(Reduced Size MMC), micro-MMC 형태의 멀티 미디어 카드(MMC: Multi Media Card), SD, mini-SD, micro-SD 형태의 시큐어 디지털(SD: Secure Digital) 카드, USB(Universal Storage Bus) 저장 장치, UFS(Universal Flash Storage) 장치, CF(Compact Flash) 카드, 스마트 미디어(Smart Media) 카드, 메모리 스틱(Memory Stick) 등과 같은 다양한 종류의 저장 장치들 중 어느 하나로 구현될 수 있다.
메모리 시스템(110)은 다양한 종류의 저장 장치에 의해 구현될 수 있다. 예컨대, 상기 저장 장치는 DRAM(Dynamic Random Access Memory), SRAM(Static RAM) 등과 같은 휘발성 메모리 장치와, ROM(Read Only Memory), MROM(Mask ROM), PROM(Programmable ROM), EPROM(Erasable ROM), EEPROM(Electrically Erasable ROM), FRAM(Ferromagnetic ROM), PRAM(Phase change RAM), MRAM(Magnetic RAM), RRAM(Resistive RAM), 플래시 메모리 등과 같은 비휘발성 메모리 장치를 포함할 수 있다. 상기 플래시 메모리는 3차원 스택 구조를 가질 수 있다.
메모리 시스템(110)은 메모리 장치(150), 및 컨트롤러(130)를 포함할 수 있다. 메모리 장치(150)는 호스트(102)를 위한 데이터를 저장할 수 있으며, 컨트롤러(130)는 메모리 장치(150)로의 데이터 저장을 제어할 수 있다.
컨트롤러(130) 및 메모리 장치(150)는 하나의 반도체 장치로 집적될 수 있다. 일 예로, 컨트롤러(130) 및 메모리 장치(150)는 하나의 반도체 장치로 집적되어 SSD를 구성할 수 있다. 메모리 시스템(110)이 SSD로 사용되면, 메모리 시스템(110)에 연결된 호스트(102)의 동작 속도는 향상될 수 있다. 게다가, 컨트롤러(130) 및 메모리 장치(150)는, 하나의 반도체 장치로 집적되어 메모리 카드를 구성할 수도 있다. 예컨대, 컨트롤러(130) 및 메모리 장치(150)는 PC 카드(PCMCIA: Personal Computer Memory Card International Association), 컴팩트 플래시 카드(CF), 스마트 미디어 카드(SM, SMC), 메모리 스틱, 멀티미디어 카드(MMC, RS-MMC, MMCmicro), SD 카드(SD, miniSD, microSD, SDHC), 유니버설 플래시 기억 장치(UFS) 등과 같은 메모리 카드를 구성할 수 있다.
메모리 장치(150)는 비휘발성 메모리 장치일 수 있으며, 전원이 공급되지 않아도 저장된 데이터를 유지할 수 있다. 메모리 장치(150)는 프로그램 동작을 통해 호스트(102)로부터 제공된 데이터를 저장할 수 있고, 리드 동작을 통해 호스트(102)로 메모리 장치(150)에 저장된 데이터를 제공할 수 있다. 메모리 장치(150)는 복수의 메모리 블록들을 포함하며, 메모리 블록들 각각은 복수의 페이지들을 포함하며, 상기 페이지들 각각은 워드라인에 연결된 복수의 메모리 셀들을 포함할 수 있다. 일 실시예에서, 메모리 장치(150)는 플래시 메모리가 될 수 있다. 상기 플래시 메모리는 3차원 스택 구조를 가질 수 있다.
컨트롤러(130)는 호스트(102)로부터의 요청에 응하여 메모리 장치(150)를 제어할 수 있다. 예컨대, 컨트롤러(130)는 메모리 장치(150)로부터 리드된 데이터를 호스트(102)로 제공하고, 호스트(102)로부터 제공된 데이터를 메모리 장치(150)에 저장할 수 있다. 이러한 동작을 위해, 컨트롤러(130)는 메모리 장치(150)의 리드(read), 프로그램(program), 이레이즈(erase) 등의 동작을 제어할 수 있다.
컨트롤러(130)는 서로 내부 버스를 통해 동작 가능하도록 연결된 호스트 인터페이스(132), 프로세서(134), 에러 정정 코드(138), 데이터 복구 제어부(140), 메모리 인터페이스(142) 및 메모리(144)를 포함할 수 있다.
호스트 인터페이스(132)는 호스트(102)의 커맨드(command) 및 데이터를 처리하며, USB(Universal Serial Bus), MMC(Multi-Media Card), PCI-E(Peripheral Component Interconnect-Express), SAS(Serial-attached SCSI), SATA(Serial Advanced Technology Attachment), PATA(Parallel Advanced Technology Attachment), SCSI(Small Computer System Interface), ESDI(Enhanced Small Disk Interface), IDE(Integrated Drive Electronics), MIPI(Mobile Industry Processor Interface) 등과 같은 다양한 인터페이스 프로토콜들 중 적어도 하나를 통해 호스트(102)와 통신하도록 구성될 수 있다.
호스트 인터페이스(132)는 호스트(102)와 데이터를 주고받는 영역으로 호스트 인터페이스 계층(HIL: Host Interface Layer, 이하 'HIL'이라 칭하기로 함)이라 불리는 펌웨어(firmware)를 통해 구동될 수 있다.
메모리 인터페이스(142)는 컨트롤러(130)가 호스트(102)로부터의 요청에 응답하여 메모리 장치(150)를 제어하도록, 컨트롤러(130)와 메모리 장치(150) 간의 인터페이싱을 위한 메모리/스토리지(storage) 인터페이스로서의 역할을 할 수 있다. 메모리 장치(150)가 플래시 메모리, 특히 NAND 플래시 메모리인 경우, 메모리 인터페이스(142)는 메모리 장치(150)를 위한 제어 신호를 생성하고, 프로세서(134)의 제어 하에 메모리 장치(150)로 제공되는 데이터를 처리할 수 있다. 메모리 인터페이스(142)는 컨트롤러(130)와 메모리 장치(150) 사이의 커맨드 및 데이터를 처리하기 위한 인터페이스, 예컨대 NAND 플래시 인터페이스로서 동작할 수 있다.
메모리 인터페이스(142)는 플래시 인터페이스 계층(FIL: Flash Interface Layer, 이하 'FIL'이라 칭하기로 함)이라 불리는 펌웨어(firmware)를 통해 구동될 수 있다.
메모리(144)는 메모리 시스템(110) 및 컨트롤러(130)의 동작 메모리로서의 역할을 수행할 수 있으며, 메모리 시스템(110) 및 컨트롤러(130)의 구동을 위한 데이터를 저장할 수 있다. 컨트롤러(130)는 호스트(102)로부터의 요청에 응하여 메모리 장치(150)가 리드, 프로그램, 이레이즈 동작을 수행하도록 메모리 장치(150)를 제어할 수 있다. 컨트롤러(130)는 메모리 장치(150)로부터 독출되는 데이터를 호스트(102)로 제공할 수 있으며, 호스트(102)로부터 제공되는 데이터를 메모리 장치(150)에 저장할 수 있다. 메모리(144)는 컨트롤러(130)와 메모리 장치(150)가 이러한 동작을 수행하는 데 필요한 데이터를 저장할 수 있다.
메모리(144)는 휘발성 메모리로 구현될 수 있다. 예컨대, 메모리(144)는 정적 랜덤 액세스 메모리(SRAM: Static Random Access Memory), 또는 동적 랜덤 액세스 메모리(DRAM: Dynamic Random Access Memory) 등으로 구현될 수 있다. 메모리(144)는 컨트롤러(130) 내부 또는 외부에 배치될 수 있다. 도 1은 컨트롤러(130) 내부에 배치된 메모리(144)를 예시한다. 일 실시예에서, 메모리(144)는 메모리(144)와 컨트롤러(130) 사이의 데이터를 입출력하는 메모리 인터페이스를 갖는 외부 휘발성 메모리 장치로 구현될 수 있다.
프로세서(134)는 메모리 시스템(110)의 전체적인 동작을 제어할 수 있다. 프로세서(134)는 메모리 시스템(110)의 전반적인 동작을 제어하기 위해 펌웨어를 구동할 수 있다. 상기 펌웨어는 플래시 변환 계층(FTL: Flash Translation Layer)로 불릴 수 있다. 그리고, 프로세서(134)는 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현될 수 있다.
예컨대, 컨트롤러(130)는 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현된 프로세서(134)를 통해 호스트(102)가 요청한 동작을 수행할 수 있다. 즉, 컨트롤러(130)는 호스트(102)로부터 수신된 커맨드에 대응하는 커맨드 동작을 수행할 수 있다. 컨트롤러(130)는 호스트(102)로부터 수신된 커맨드에 대응하는 커맨드 동작으로서 포그라운드 동작(foreground operation)을 수행할 수 있다. 예컨대, 컨트롤러(130)는 라이트 커맨드에 대응하는 라이트 동작, 리드 커맨드에 대응하는 리드 동작, 이레이즈 커맨드에 대응하는 이레이즈 동작 및 셋 파라미터 커맨드 또는 셋 피쳐 커맨드에 대응하는 파라미터 셋 동작 등을 수행할 수 있다.
또한, 컨트롤러(130)는 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현된 프로세서(134)를 통해 메모리 장치(150)에 대한 백그라운드(background) 동작을 수행할 수도 있다. 예컨대, 메모리 장치(150)에 대한 백그라운드 동작은 가비지 컬렉션(GC: Garbage Collection) 동작, 웨어 레벨링(WL: Wear Leveling) 동작, 맵 플러시(map flush) 동작, 배드 블록 관리(bad block management) 동작 등을 포함할 수 있다.
ECC(138)는 메모리 장치(150)로부터 독출되는 데이터에 포함된 에러를 검출 및 정정할 수 있다.
ECC(138)는 LDPC(low density parity check) 코드(code), BCH(Bose, Chaudhri, Hocquenghem) 코드, 터보 코드(turbo code), 리드-솔로몬 코드(Reed-Solomon code), 컨벌루션 코드(convolution code), RSC(recursive systematic code), TCM(trellis-coded modulation), BCM(Block coded modulation) 등의 코디드 모듈레이션(coded modulation)을 사용하여 에러 정정을 수행할 수 있다. 그러나, ECC(138)는 특정한 구조로 한정되는 것은 아니다. ECC(138)는 오류 정정을 위한 회로, 모듈, 시스템, 또는 장치를 모두 포함할 수 있다.
메모리 장치(150)에 데이터가 프로그램되면 메모리 장치(150)의 메모리 셀들은 데이터에 해당하는 문턱 전압을 가질 수 있다. 메모리 장치(150)는 프로그램된 데이터를 리드할 때 상기 메모리 셀이 연결된 워드 라인에 리드 전압을 인가할 수 있다. 상기 리드 전압 및 각 메모리 셀들의 문턱 전압에 따라 각 메모리 셀을 통해 전류가 흐르거나 흐르지 않을 수 있다. 메모리 장치(150)는 각 메모리 셀을 통해 전류가 흐르는지 여부에 따라 메모리 셀에 저장된 데이터를 리드할 수 있다.
메모리 장치(150)의 물리적 특성에 따라 데이터가 프로그램된 메모리 셀들의 문턱 전압이 변할 수 있다. 메모리 셀들의 문턱 전압이 변하면, 메모리 장치(150)가 워드 라인에 리드 전압을 인가했을 때 잘못된 데이터를 리드할 수 있다.
ECC(138)는 메모리 장치(150)로부터 리드된 데이터의 일부 데이터 비트에 에러가 있는 경우 상기 에러를 정정할 수 있도록, 메모리 장치(150)에 데이터를 저장하기 전에 상기 데이터에 ECC 인코딩을 수행할 수 있다. ECC(138)는 메모리 장치(150)로부터 리드된 데이터에 ECC 디코딩을 수행함으로써 에러가 정정된 데이터를 획득할 수 있다.
ECC(138)의 에러 정정 능력에는 제한이 있다. ECC(138)는 메모리 장치(150)로부터 리드된 데이터에 포함된 에러 비트 수가 정해진 수를 넘으면 에러 비트를 정정할 수 없다.
데이터 복구 제어부(140)는 ECC(138)가 에러를 정정할 수 없는 데이터의 복구를 수행할 수 있다.
예를 들어, 메모리 장치(150)의 메모리 셀들의 문턱 전압 분포가 크게 변형되어서 메모리 장치(150)로부터 리드된 데이터에 포함된 에러 비트 수가 정해진 수를 넘으면 ECC(138)가 에러를 정정할 수 없다. 데이터 복구 제어부(140)는 ECC(138)가 에러를 정정할 수 없는 경우 리드 전압을 변경하여 리드 동작을 재시도하도록 메모리 장치(150)를 제어할 수 있다. ECC(138)는 변경된 리드 전압으로 리드된 데이터의 에러를 정정할 수 있다.
한편, 메모리 장치(150)가 리드 전압을 변경하여 리드 동작을 재시도하는 경우라도 ECC(138)가 에러를 정정할 수 없는 경우가 있다.
예를 들어, 프로그램할 데이터 비트들이 바이트 단위로 메모리 장치(150)로 입력될 때 몇 바이트의 데이터가 유실될 수 있다. 몇 바이트 데이터가 유실되면, 데이터가 유실된 이후에 수신되는 비트들은 원래 순서보다 유실된 바이트 수만큼 앞당겨진 순서대로 수신될 수 있다.
메모리 장치(150)로 수신된 데이터의 각 비트는 수신된 순서대로 정해진 메모리 셀에 프로그램될 수 있다. 앞당겨진 순서대로 수신된 데이터는 정해진 메모리 셀이 아닌 다른 메모리 셀에 프로그램될 수 있다. 따라서 데이터에 손상이 발생할 수 있다. 메모리 장치(150)가 데이터 유실로 인해 손상된 데이터를 리드하면, 상기 데이터가 프로그램된 메모리 셀의 문턱 전압과 관계없이 ECC(138)는 상기 데이터의 에러를 정정할 수 없다. 즉, 데이터 유실로 인해 손상된 데이터는 메모리 장치(150)가 어떤 리드 전압을 인가해서 리드 동작을 재시도하고 에러 정정 디코딩을 수행하더라도 복구될 수 없다.
본 발명의 실시 예에 따른 컨트롤러(130)는 리드된 데이터의 제1 에러 정정 디코딩 페일이 발생하면 상기 리드된 데이터의 적어도 일부 비트를 시프트한 후 제2 에러 정정 디코딩을 수행함으로써 데이터를 복구할 수 있다. 따라서, 컨트롤러(130)는 데이터 유실로 인해 손상된 데이터라도 성공적으로 복구할 수 있다.
본 발명의 실시 예는 도 2a 내지 도 7을 참조하여 자세히 설명된다.
도 2a 및 도 2b는 메모리 장치(150)의 동작 에러를 설명하기 위한 도면이다.
도 2a는 메모리 장치(150)의 구조 일부를 도시한다. 구체적으로, 도 2는 메모리 장치(150)에 포함될 수 있는 컬럼 카운터 클럭 생성 회로(202) 및 컬럼 어드레스 카운터(204)를 도시한다.
메모리 장치(150)는 로우 방향과 컬럼 방향으로 배열된 메모리 셀들을 포함하는 메모리 셀 어레이(미도시)를 포함할 수 있다. 메모리 장치(150)의 프로그램 동작 및 리드 동작은 페이지 단위로 수행될 수 있다. 페이지는 동일 워드라인에 포함된 메모리 셀들을 지칭한다. 페이지는 로우 어드레스에 의해 특정될 수 있다. 어떤 페이지에 포함된 메모리 셀들 각각은 컬럼 어드레스에 의해 특정될 수 있다.
메모리 장치(150)는 프로그램될 데이터를 컨트롤러(130)로부터 수신하면, 프로그램될 데이터를 페이지 버퍼에 버퍼링하고, 버퍼링된 데이터를 페이지에 프로그램할 수 있다.
메모리 장치(150)에 프로그램될 데이터는 컨트롤러(130)로부터 바이트 단위로 입력될 수 있다. 상기 입력되는 데이터와 컬럼 어드레스 카운터(204)는 컬럼 카운터 클럭 생성 회로(202)의 출력 클럭으로 동기화될 수 있다. 예를 들어, 매 출력 클럭마다 상기 프로그램될 데이터가 한 바이트씩 메모리 장치(150)로 입력될 수 있다. 컬럼 어드레스 카운터(204)는 매 클럭마다 컬럼 어드레스 카운트를 증가시키면서 상기 바이트 단위로 입력되는 데이터의 비트 각각을 페이지 버퍼의 대응하는 래치(latch)에 버퍼링할 수 있다. 한편, 본 발명은 프로그램될 데이터가 한 바이트씩 메모리 장치(150)로 입력되는 경우로 제한되지는 않으며, 컨트롤러(130)와 메모리 장치(150) 사이의 데이터 버스의 대역폭에 따라 매 출력 클럭마다 데이터가 입력되는 단위는 상이할 수 있다.
컬럼 카운터 클럭 생성 회로(202)의 입력 클럭은 컨트롤러(130)로부터 입력되는 클럭 신호일 수 있다. 컬럼 카운터 클럭 생성 회로(202)는 상기 입력 클럭에 기초하여 컬럼 어드레스 카운터(204)로 출력 클럭을 제공할 수 있다.
도 2b는 클럭 오류에 따른 데이터 유실 및 비트 당겨짐을 설명하기 위한 도면이다.
도 2b는 입력 클럭, 컬럼 카운터 클럭 생성 회로(202)의 내부 노드 및 출력 클럭의 파형을 도시한다. 메모리 시스템(110)의 고속 및 저전력 동작에 대한 수요에 따라 입력 클럭의 주파수는 높아지고 진폭이 낮아지면서 입력 클럭의 충분한 마진(margin)이 확보되지 않을 수 있다. 상기 입력 클럭에 기초하여 생성되는 출력 클럭의 정확도가 감소할 수 있다. 도 2b를 참조하면, 입력 클럭의 라이징 에지(rising edge)의 전위가 다소 낮아지면 컬럼 카운터 클럭 생성 회로(202)는 상기 라이징 에지를 검출하지 못하고 라이징 에지를 누락시킬 수 있다. 라이징 에지가 누락되면 출력 클럭이 유실되어 메모리 장치(150)로 데이터 비트가 수신되는데도 불구하고 컬럼 어드레스 카운터가 컬럼 어드레스를 카운트하지 못할 수 있다.
도 2b는 프로그램 동작을 위해 메모리 장치(150)로 입력되는 데이터(Input)를 바이트 단위로 나타내고, 리드 동작에 의해 메모리 장치(150)로부터 출력되는 데이터(Output)를 바이트 단위로 나타낸다. 입력 데이터는 제1 바이트부터 제8 바이트의 순서대로 메모리 장치(150)로 입력될 수 있다. 만약 출력 클럭이 정상적으로 출력되는 경우 메모리 장치(150)는 제1 내지 제8 바이트를 순서대로 수신하여 메모리 셀들에 프로그램할 수 있다.
도 2b의 예에서, 컬럼 어드레스 카운터(204)는 첫 번째 클럭 및 두 번째 클럭에 기초하여 상기 제1 및 제2 바이트를 수신할 수 있다. 컬럼 어드레스 카운터(204)는 제3 및 제4 바이트가 메모리 장치(150)로 입력될 때 클럭 신호가 없으므로 컬럼 어드레스를 카운트하지 않고 제3 및 제4 바이트를 무시할 수 있다. 컬럼 어드레스 카운터(204)는 제5 바이트가 메모리 장치(150)로 입력될 때 세 번째 클럭에 기초하여 상기 제5 바이트를 수신할 수 있다. 제5 내지 제8 바이트는 정상적인 순서가 아니라 2바이트씩 앞당겨진 순서대로 수신될 수 있으며, 컬럼 어드레스 카운터(204)에 의해 원래의 컬럼 어드레스보다 2바이트씩 앞당겨진 컬럼 어드레스를 가질 수 있다. 따라서, 제5 내지 제8 바이트는 잘못된 위치의 메모리 셀에 프로그램될 수 있다.
도 3a 및 도 3b는 메모리 장치(150)에 프로그램된 데이터의 에러 발생을 설명하기 위한 도면이다.
도 3a는 메모리 장치(150)로 입력되는 코드워드(Codeword) 및 리드 동작 시 메모리 셀의 문턱 전압 변화로 인해 에러가 발생한 데이터(Vt changed data)를 비트 단위로 예시한다. 코드워드는 에러 정정 인코딩이 수행된 데이터를 지칭한다.
메모리 셀들의 문턱 전압 분포가 변화하면 메모리 장치(150)가 상기 메모리 셀들에 리드 전압을 인가했을 때 여러 비트에 에러가 발생할 수 있다. ECC(138)는 여러 메모리 셀의 문턱 전압이 변경된 경우라도 상기 에러 비트 수가 임계값을 넘지 않으면 에러를 성공적으로 정정할 수 있다. 예를 들어, ECC(138)는 2KB의 코드워드에서 200비트 이상의 에러 비트가 발생하여도 에러를 정정할 수 있다.
만약 메모리 셀들의 문턱 전압이 변화하여 에러 정정 불가능한 정도로 많은 에러가 발생했다면 메모리 장치(150)가 리드 전압을 변경하여 리드 동작을 재시도할 수 있다. ECC(138)가 상기 변경된 리드 전압으로 리드된 데이터를 기초로 에러 정정 디코딩을 수행하면 에러 정정에 성공할 수 있다.
도 3b는 메모리 장치(150)로 입력되는 코드워드(Codeword) 및 상기 코드워드가 1비트씩 당겨진 데이터(Advanced data)를 예시한다. 데이터가 첫 번째 비트부터 1비트씩 당겨지면 모든 데이터 비트가 어긋날 수 있다. 도 3b를 참조하면, 16비트인 원래 데이터와 비교했을 때 당겨진 데이터는 7비트의 에러가 발생할 수 있다.
데이터가 프로그램될 때 한 비트 또는 한 바이트의 데이터만이 유실된 경우라도 ECC(138)가 에러를 정정할 수 없을 정도로 여러 비트의 에러가 발생할 수 있다. 메모리 장치(150)가 리드 전압을 변경하여 리드 동작을 재시도하더라도 ECC(138)는 시프트된 데이터의 에러를 정정할 수 없다.
도 2a 내지 도 3b는 입력 데이터 비트가 유실되어 데이터 비트들의 순서가 당겨진 채로 프로그램된 경우에 에러 정정 디코딩이 불가능할 정도로 에러가 많이 발생하는 현상을 설명한다. 마찬가지로, 입력 데이터에 무의미한 비트(garbage bit)가 추가되어 데이터 비트들의 순서가 밀린 채로 프로그램된 경우도 ECC(138)가 에러를 정정할 수 없을 정도로 많은 에러가 발생할 수 있다.
본 발명의 실시 예에 따르면, 데이터 복구 제어부(140)는 리드된 데이터의 에러 정정 디코딩이 실패한 경우 상기 데이터를 시프트하고 ECC(138)가 시프트된 데이터의 에러 정정 디코딩을 수행하도록 제어할 수 있다. 예를 들어, 도 3b에서 1비트씩 당겨진 데이터를 데이터 복구 제어부(140)가 오른쪽으로 1비트씩 시프트하고 ECC(138)가 시프트된 데이터의 에러 정정을 수행한다면 상기 시프트된 데이터가 복구될 수 있다.
도 4는 본 발명의 실시 예에 따른 컨트롤러(130)의 동작을 나타내는 도면이다.
단계 S402에서, 컨트롤러(130)는 메모리 장치(150)의 리드 동작을 제어할 수 있다. 단계 S402의 리드 동작은 메모리 장치(150)가 워드라인에 디폴트 리드 전압을 인가하여 리드하는 동작 및 리드 전압을 변경하여 리드 동작을 재시도하는 동작 중 적어도 하나를 포함할 수 있다. 메모리 장치(150)는 리드 동작을 재시도하기 위해 내부에 저장된 리드 리트라이 테이블을 참조하여 리드 전압을 변경할 수도 있으며, 메모리 셀들의 문턱 전압 분포에 기초하여 리드 전압을 변경할 수도 있다.
단계 S404에서, ECC(138)는 메모리 장치(150)로부터 리드된 데이터의 에러 정정 디코딩을 수행할 수 있다. 상기 리드된 데이터는 메모리(144)에 버퍼링될 수 있다. 상기 리드된 데이터는 하나 이상의 코드워드들을 포함할 수 있다. 예를 들어, 메모리 장치(150)는 페이지 단위로 데이터를 리드할 수 있으며, 8KB 크기의 한 페이지가 2KB의 코드워드 네 개를 포함할 수 있다. ECC(138)는 상기 코드워드들에 대해 순차적으로 에러 정정 디코딩을 수행할 수 있다.
ECC(138)가 상기 리드된 데이터에 포함된 모든 코드워드의 에러 정정 디코딩에 성공한 경우(단계 S404에서, "YES"), 단계 S406에서 프로세서(134)는 호스트 인터페이스(132)를 통해 에러 정정된 데이터를 출력할 수 있다.
ECC(138)가 상기 리드된 데이터에 포함된 어떤 코드워드의 에러 정정 디코딩에 실패한 경우(단계 S404에서, "NO"), 단계 S408에서 데이터 복구 제어부(140)는 상기 코드워드의 데이터 비트를 시프트하고, ECC(138)가 상기 시프트된 코드워드의 에러 정정 디코딩을 수행하도록 제어할 수 있다.
단계 S408의 동작은 도 5 내지 도 7을 참조하여 자세히 설명된다.
도 5는 본 발명의 실시 예에 따른 컨트롤러(130)의 동작을 설명하기 위한 도면이다.
도 5는 메모리 장치(150)에 프로그램할 코드워드를 바이트 단위로 예시한다. 상기 코드워드는 순서대로 제1 바이트부터 제16 바이트까지의 데이터를 포함할 수 있다. 구현에 따라, 상기 코드워드는 에러 정정 인코딩 및 랜더마이즈(randomize)가 완료된 데이터일 수 있다.
코드워드가 메모리 장치(150)로 입력될 때 컬럼 카운터 클럭 생성 회로의 오류로 제9 및 제10 바이트가 유실되고, 제11 내지 제16바이트의 순서가 두 바이트씩 당겨져서 수신될 수 있다. 도 5는 제11 내지 제16 바이트가 두 바이트씩 당겨진 채로 프로그램된 데이터(Programmed data)를 예시한다. 즉, 제11 내지 제16 바이트는 제9 내지 제14 바이트의 데이터가 프로그램되었어야 하는 메모리 셀들에 프로그램될 수 있다. 제15 및 제16 바이트의 데이터가 프로그램되었어야 하는 메모리 셀들에는 유효한 데이터가 프로그램되지 않을 수 있다.
도 5는 메모리 장치(150)가 상기 프로그램된 데이터에 대한 리드 동작을 수행할 때 리드되는 데이터를 예시한다. 리드된 데이터(Read data)의 각 바이트 아래에 도시된 'O'는 코드워드와 비교해서 올바른 순서를 갖는 바이트를 나타내며 'X'는 잘못된 순서를 갖는 바이트를 나타낸다. 상기 리드된 데이터의 제9 내지 제16 바이트는 코드워드의 제9 내지 제16 바이트와 비교해서 잘못된 데이터를 나타낼 수 있다. 따라서, 데이터가 프로그램된 메모리 셀들의 문턱 전압이 변경되지 않더라도 상기 리드된 데이터에는 ECC(138)가 에러를 정정할 수 없을 정도로 많은 에러가 발생할 수 있다.
데이터 복구 제어부(140)는 단계 S404의 에러 정정 디코딩에 실패한 데이터를 시프트하여 에러 정정 디코딩을 수행함으로써 상기 데이터를 복구할 수 있다. 데이터 복구 제어부(140)는 단계 S148에서 시프트 방향, 시프트 수준 및 시프트 시작점을 변경하면서 에러 정정 디코딩에 성공할 때까지 비트 시프트 및 에러 정정 디코딩을 반복 수행할 수 있다.
시프트 방향은 메모리 장치(150)로부터 리드되어 메모리(144)에 버퍼링된 데이터를 어느 방향으로 시프트할지를 나타낸다. 도 5의 예에서, 리드된 데이터의 일부 비트가 코드워드에 비해 당겨진 경우 리드된 데이터의 일부를 오른쪽으로 시프트하고 에러 정정 디코딩을 수행하면 에러가 정정될 수 있다. 반면에, 리드된 데이터의 일부 비트가 코드워드에 비해 밀린 경우 리드된 데이터의 일부를 왼쪽으로 시프트하고 에러 정정 디코딩을 수행하면 에러가 정정될 수 있다. '오른쪽', '왼쪽'은 메모리(144)에서 상기 리드된 데이터가 버퍼링되는 메모리 셀들이 배열된 물리적 방향을 한정하는 것은 아니며, 리드된 데이터의 도 5와 같은 논리적 배열에 따른 방향을 나타낸다.
시프트 수준은 상기 버퍼링된 데이터를 몇 바이트씩 시프트할지를 나타낸다.
시프트 시작점은 상기 버퍼링된 데이터를 몇 번째 바이트부터 시프트할지를 나타낸다. 만약 시프트 시작점이 실제로 데이터가 밀리거나 당겨지기 시작한 경계점보다 앞서는 경우, 밀리거나 당겨지지 않은 비트까지 시프트될 수 있다. 반면에, 시프트 시작점이 상기 경계점보다 뒤에 있는 경우 밀리거나 당겨진 모든 비트들이 시프트되지는 않을 수 있다. 따라서 시프트 시작점이 경계점으로부터 정해진 범위 내에 있는 경우 ECC(138)가 에러 정정에 성공할 수 있다.
한편, 본 발명의 실시 예에 따르면 시프트 수준 및 시프트 시작점이 바이트 단위로 결정될 수 있지만 본 발명은 이에 제한되지 않는다. 도 2a를 참조하여 설명된 바와 같이 메모리 장치(150)로부터 데이터가 입력되는 단위는 바이트 단위로 제한되지 않는다. 시프트 수준 및 시프트 시작점의 단위는 데이터가 입력되는 단위와 일치할 수 있다.
도 5는 데이터 복구 제어부(140)가 데이터를 오른쪽으로 2바이트씩 시프트할 때 제1 바이트를 시작점으로 하는 경우, 제4 바이트를 시작점으로 하는 경우 및 제7 바이트를 시작점으로 하는 경우를 예시한다.
데이터 복구 제어부(140)가 리드된 데이터를 제1 바이트부터 2바이트씩 오른쪽으로 시프트하는 경우, 시프트된 데이터의 제11 및 제16 바이트는 코드워드의 제11 및 제16바이트와 일치할 수 있다. 그러나, 시프트된 데이터의 제3 내지 제10 바이트는 코드워드의 제3 내지 제10 바이트와 달라질 수 있다. 도 5의 예에서 데이터의 전체 바이트 수 16개 중 순서가 어긋난 바이트의 수가 8개에 해당할 수 있다. ECC(138)는 상기 시프트된 데이터의 에러 정정에 실패할 수 있다.
데이터 복구 제어부(140)가 리드된 데이터를 제4 바이트부터 2바이트씩 오른쪽으로 시프트하는 경우, 시프트된 데이터의 제11 및 제16 바이트는 코드워드의 바이트 순서와 일치할 수 있다. 그러나, 시프트된 데이터의 제6 내지 제10 바이트는 코드워드의 제6 내지 제10 바이트와 달라질 수 있다. 도 5의 예에서 데이터의 전체 바이트 수 16개 중 순서가 어긋난 바이트의 수가 5개에 해당할 수 있다. 따라서, ECC(138)는 상기 시프트된 데이터의 에러 정정에 실패할 수 있다.
데이터 복구 제어부(140)가 리드된 데이터를 제7 바이트부터 2바이트씩 오른쪽으로 시프트하는 경우, 시프트된 데이터의 제11 및 제16 바이트는 코드워드의 바이트 순서와 일치할 수 있다. 시프트된 데이터의 제9 내지 제10 바이트는 코드워드의 제9 내지 제10 바이트와 달라질 수 있다. 도 5의 예에서 데이터의 전체 바이트 수 16개 중 순서가 어긋난 바이트의 수가 2개에 해당할 수 있다. 시프트된 데이터의 일부 바이트의 순서가 여전히 코드워드의 바이트 순서와는 다르지만, 순서가 어긋난 바이트가 충분히 적다면 ECC(138)는 시프트된 데이터의 에러 정정에 성공할 수 있다.
도 6은 본 발명의 실시 예에 따른 컨트롤러(130)의 동작을 나타내는 흐름도이다. 구체적으로, 도 6은 도 4의 단계 S408의 동작에 포함되는 세부 동작들을 나타낸다.
단계 S602에서, 데이터 복구 제어부(140)는 시프트 수준 N과 시프트 시작점 S를 초기화할 수 있다.
단계 S604에서, 데이터 복구 제어부(140)는 에러 정정 디코딩에 실패한 코드워드의 S번째 바이트부터 N바이트씩 왼쪽으로 시프트할 수 있다.
단계 S606에서, ECC(138)는 상기 시프트된 코드워드의 에러 정정 디코딩을 수행할 수 있다. 구현에 따라 메모리 장치(150)에 에러 정정 인코딩 및 랜더마이즈가 수행된 코드워드를 프로그램한 경우, 컨트롤러(130)는 상기 시프트된 데이터의 디랜더마이즈(de-randomize)를 더 수행할 수 있다.
상기 에러 정정 디코딩이 성공한 경우(단계 S606에서, "YES"), 순서가 밀린 채로 프로그램된 코드워드가 성공적으로 복구될 수 있다.
단계 S608에서, 프로세서(134)는 상기 복구된 코드워드에 기초하여 리드된 데이터를 복구할 수 있다. 실시 예에 따라, 상기 리드된 데이터는 복수의 코드워드들을 포함할 수 있다. 만약 상기 리드된 데이터에 에러 정정 디코딩이 수행되지 않은 코드워드가 있다면 데이터 복구 제어부(140)는 해당 코드워드도 에러 정정 디코딩이 성공한 코드워드와 동일하게 N바이트씩 시프트하고, ECC(138)가 에러 정정 디코딩을 수행하도록 제어할 수 있다. 만약 리드 동작이 호스트(102)로부터의 리드 요청에 의해 수행되었다면, 프로세서(134)는 복구된 데이터를 호스트(102)로 제공할 수 있다.
단계 S634에서, 프로세서(134)는 상기 복구된 데이터를 프로그램하도록 메모리 장치(150)를 제어할 수 있다.
상기 에러 정정 디코딩에 실패한 경우(단계 S606에서, "NO"), 단계 S610에서 데이터 복구 제어부(140)는 시작점 S에서 증분 I만큼 증가한 값을 새로운 시작점 S로 결정할 수 있다.
도 5에서 설명된 바에 따르면, 데이터 복구 제어부(140)가 비트 시프팅을 수행하는 시작점 S와 실제로 순서가 밀리기 시작한 경계점이 일치하지 않더라도, 시작점 S와 경계점이 근접하는 경우 ECC(138)는 에러 정정 디코딩에 성공할 수 있다. 따라서 증분 I는 반드시 1로 결정될 필요는 없으며, 1 이상의 값으로 결정될 수 있다.
증분 I는 설계에 따라 사전에 결정될 수 있다. 증분 I를 작은 값으로 선택할수록 비트 시프트 및 에러 정정 디코딩이 더욱 많은 시작점 S에 대해 수행될 수 있다. 따라서, 시작점 S와 상기 경계점이 근접할 수 있으므로 ECC(138)가 에러 정정 디코딩에 성공할 확률이 높아진다. 그러나, 증분 I를 작은 값으로 선택할수록 ECC(138)가 에러 정정 디코딩에 성공하기까지 비트 시프트 및 에러 정정 디코딩을 더 많이 수행해야 하므로 리드 동작 성능이 떨어질 수 있다. 따라서, 증분 I는 에러 정정 디코딩의 성공 확률 및 리드 동작 성능을 고려하여 선택될 수 있다. 증분 I를 선택하는 일 예가 도 7a 내지 도 7c를 참조하여 후술된다.
단계 S612에서, 데이터 복구 제어부(140)는 시작점 S가 코드워드 길이 이하인지 판단할 수 있다.
시작점 S가 코드워드 길이 이하인 경우(단계 S612에서, "YES"), 데이터 복구 제어부(140)는 단계 S604를 수행할 수 있다.
시작점 S가 코드워드 길이를 초과하는 경우(단계 S612에서, "NO"), 단계 S614에서 데이터 복구 제어부(140)는 시프트 수준 N이 최댓값인지 판단할 수 있다. 상기 최댓값은 설계에 따라 사전에 결정될 수 있다. 예를 들어, 데이터 복구 제어부(140)는 시프트 수준 N의 최댓값을 ECC(138)가 에러 정정 가능한 최대 에러 바이트 수인 E로 결정할 수 있다. 만약 코드워드가 E바이트를 초과하여 밀린다면 유실되는 데이터가 E바이트 이상이므로 데이터 복구 제어부(140)가 비트 시프팅을 수행하더라도 에러 정정 디코딩에 실패할 것이기 때문이다.
시프트 수준 N이 최댓값에 도달하지 않은 경우(단계 S614에서, "NO"), 단계 S616에서 데이터 복구 제어부(140)는 시프트 수준을 1만큼 증가시키고, 시작점 S를 1로 초기화할 수 있다. 데이터 복구 제어부(140)는 단계 S604를 수행할 수 있다.
시프트 수준 N이 최댓값에 도달한 경우(단계 S614에서, "YES"), 데이터 복구 제어부(140)는 단계 S618을 수행할 수 있다.
단계 S618에서, 데이터 복구 제어부(140)는 시프트 수준 N과 시프트 시작점 S를 초기화할 수 있다.
단계 S620에서, 데이터 복구 제어부(140)는 에러 정정 디코딩에 실패한 코드워드의 S번째 바이트부터 N바이트씩 오른쪽으로 시프트할 수 있다.
단계 S622에서, ECC(138)는 상기 시프트된 코드워드의 에러 정정 디코딩을 수행할 수 있다. 구현에 따라, 메모리 장치(150)에 에러 정정 인코딩 및 랜더마이즈가 수행된 코드워드를 프로그램한 경우 컨트롤러(130)는 상기 시프트된 데이터의 디랜더마이즈를 더 수행할 수 있다.
상기 에러 정정 디코딩이 성공한 경우(단계 S622에서, "YES"), 비트가 당겨진 채로 프로그램된 코드워드가 성공적으로 복구될 수 있다. 프로세서(134)는 단계 S608 및 단계 S634를 수행할 수 있다.
상기 에러 정정 디코딩에 실패한 경우(단계 S622에서, "NO"), 단계 S624에서 데이터 복구 제어부(140)는 시작점 S에서 증분 I만큼 증가한 값을 새로운 시작점 S로 결정할 수 있다.
단계 S626에서, 데이터 복구 제어부(140)는 시작점 S가 코드워드 길이 이하인지 판단할 수 있다.
시작점 S가 코드워드 길이 이하인 경우(단계 S626에서, "YES"), 데이터 복구 제어부(140)는 단계 S620를 수행할 수 있다.
시작점 S가 코드워드 길이를 초과하는 경우(단계 S626에서, "NO"), 단계 S628에서 데이터 복구 제어부(140)는 시프트 수준 N이 최댓값인지 판단할 수 있다. 상기 최댓값은 설계에 따라 사전에 결정될 수 있다. 예를 들어, 데이터 복구 제어부(140)는 시프트 수준 N의 최댓값을 ECC(138)가 에러 정정 가능한 최대 에러 바이트 수인 E로 결정할 수 있다. 만약 코드워드가 E바이트를 초과하여 당겨진다면 유실되는 데이터가 E바이트 이상이므로 데이터 복구 제어부(140)가 비트 시프팅을 수행하더라도 에러 정정 디코딩에 실패할 것이기 때문이다.
시프트 수준 N이 최댓값에 도달하지 않은 경우(단계 S628에서, "NO"), 단계 S630에서 데이터 복구 제어부(140)는 시프트 수준을 1만큼 증가시키고, 시작점 S를 1로 초기화할 수 있다. 데이터 복구 제어부(140)는 단계 S620을 수행할 수 있다.
시프트 수준 N이 최댓값에 도달한 경우(단계 S628에서, "YES"), 데이터 복구 제어부(140)는 단계 S632에서 데이터 복구에 실패한 것으로 판단하고, 호스트(102)로 리드 페일 신호를 제공할 수 있다.
도 7a 내지 도 7c는 본 발명의 실시 예에 따른 증분 I를 설명한다.
도 7a는 코드워드 중 일부 데이터 비트가 당겨진 채로 프로그램된 데이터(Programmed data)를 개략적으로 나타낸다. 도 7a 내지 도 7c에서 패턴이 도시되지 않은 부분은 정상적인 순서로 프로그램된 비트들을 나타내고, 도트 패턴이 도시된 부분은 순서가 당겨진 채로 프로그램된 비트들을 나타내고, 실선 패턴이 도시된 부분은 프로그램되지 않은 비트들을 나타낸다. a는 비트가 당겨지기 시작한 경계점을 나타낸다.
도 6을 참조하여 설명된 바와 같이 데이터 복구 제어부(140)는 시프트 시작점 S를 증분 I씩 증가시키면서 코드워드를 시프트하고, ECC(138)가 에러 정정 디코딩을 수행하도록 할 수 있다. 도 7a의 a1 및 a2는 경계점 a와 인접한 두 개의 시프트 시작점들을 나타낸다. 두 개의 인접한 시프트 시작점 a1 및 a2는 서로 증분 I만큼 떨어져있을 수 있다. 도 7a 내지 도 7c의 예에서, 메모리 장치(150)의 데이터 입력 단위가 바이트 단위인 경우를 가정하며, 경계점 a, 두 개의 시프트 시작점 a1, a2 및 증분 I는 바이트 단위로 설명된다.
도 7b는 시프트 시작점 a1부터 시프트 수준 N만큼 시프트된 코드워드를 예시한다.
도 7a에 도시된 프로그램된 데이터의 a1번째 바이트부터 a번째 바이트까지의 데이터는 정상적으로 프로그램되었으나, N바이트씩 시프트되어 순서가 어긋날 수 있다. 반면에, 상기 프로그램된 데이터의 a번째 바이트부터의 데이터는 N바이트씩 시프트되면 정상적인 순서로 복구될 수 있다. 도 7b에서, a1+N번째 바이트부터 a+N번째 바이트까지의 비트 순서가 어긋날 수 있으며, X1은 비트 순서가 어긋난 데이터의 길이를 나타낸다.
도 7c는 시프트 시작점 a2부터 시프트 수준 N만큼 시프트된 코드워드를 예시한다.
도 7a에 도시된 프로그램된 데이터의 a2번째 바이트부터의 데이터는 N바이트씩 시프트되면 정상적인 순서로 복구될 수 있다. 반면에, 상기 프로그램된 데이터의 a번째 바이트부터 a2번째 바이트까지의 데이터는 비트 순서가 어긋났으나 N바이트씩 시프트되지 않으므로 여전히 어긋난 순서를 가질 수 있다. 도 7c에서, a번째 바이트부터 a2+N번째 바이트까지의 비트 순서가 어긋날 수 있으며, X2는 비트 순서가 어긋난 데이터의 길이를 나타낸다.
X1과 X2 중 적어도 어느 하나는 최대 에러 바이트 수 E이내인 경우에 ECC(138)는 성공적으로 에러를 정정할 수 있다. 따라서, ECC(138)가 성공적으로 에러를 정정하도록 하려면 X1, X2 및 E는 아래 수학식 1의 관계를 가져야 한다.
[수학식 1]
Figure pat00001
X1 및 X2를 아래 수학식 2와 같이 정리하여 증분 I와 시프트 수준 N으로 나타낼 수 있다.
[수학식 2]
Figure pat00002
도 6을 참조하여 설명된 바와 같이 시프트 수준 N의 최댓값은 E로 결정될 수 있다. 시프트 수준 N이 최댓값을 갖는 경우에도 본 발명의 실시 예에 따른 컨트롤러(130)가 에러를 성공적으로 정정할 수 있도록 하는 증분 I의 값은 아래 수학식 3과 같이 결정될 수 있다.
[수학식 3]
Figure pat00003
따라서, 본 발명의 실시 예에 따른 데이터 복구 제어부(140)는 ECC(138)가 에러 정정 디코딩에 성공할 때까지 시프팅 시작점 S를 최대 에러 바이트 수 E씩 증가시키면서 코드워드의 시프팅을 반복 수행할 수 있다. 데이터 복구 제어부(140)는 순서가 밀리거나 당겨진 채로 프로그램된 데이터를 에러 정정 디코딩의 적은 반복으로도 성공적으로 복구할 수 있다.
본 발명의 실시 예에 따르면, 컨트롤러(130)는 상기 메모리 장치로부터 리드된 데이터의 제1 에러 정정 디코딩 페일 여부에 따라 상기 리드된 데이터를 시프팅 시작점 S 부터 시프팅 수준 N씩 시프팅하고, 상기 시프팅된 데이터의 제2 에러 정정 디코딩을 수행할 수 있다. 컨트롤러(130)는 상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 로컬 반복횟수까지 매 반복마다 상기 시프팅 시작점 S를 초기값에서부터 증분 I씩 증가시키면서 상기 시프팅하는 단계 및 제2 에러 정정 디코딩을 로컬 반복 수행하며, 상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 글로벌 반복횟수까지 매 반복마다 상기 시프팅 수준 N을 초기값부터 1씩 증가시키면서 상기 로컬 반복 수행하는 단계를 글로벌 반복 수행할 수 있다. 컨트롤러(130)는 상기 글로벌 반복 수행하는 단계를 수행할 때 상기 시프팅을 왼쪽으로 수행하고, 에러 정정 디코딩에 실패한 경우 상기 시프팅을 오른쪽으로 수행하면서 글로벌 반복 수행하는 단계를 수행할 수 있다. 따라서, 컨트롤러(130)는 메모리 셀들의 문턱 전압 분포에 따른 리드 동작 및 에러 정정 디코딩에 의해서 에러를 정정할 수 없는 데이터를 복구할 수 있다. 본 발명의 실시 예에 따르면, 메모리 시스템(110)에 저장된 데이터의 신뢰성이 향상될 수 있다.
한편, 본 발명의 상세한 설명에서는 구체적인 실시 예에 관해 설명하였으나, 본 발명의 범위에서 벗어나지 않는 한도 내에서 여러 가지 변형이 가능함은 물론이다. 그러므로, 본 발명의 범위는 설명된 실시 예에 국한되어 정해져서는 안되며 후술하는 특허청구의 범위뿐만 아니라 이 특허청구의 범위와 균등한 것들에 의해 정해져야 한다.
110: 메모리 시스템
130: 컨트롤러
150: 메모리 장치

Claims (16)

  1. 메모리 장치를 제어하는 컨트롤러의 동작 방법에 있어서,
    상기 메모리 장치로부터 리드된 데이터에 포함된 코드워드의 제1 에러 정정 디코딩 페일 여부에 따라 상기 코드워드를 시작점 S부터 수준 N씩 시프팅하는 단계;
    상기 시프팅된 코드워드의 제2 에러 정정 디코딩을 수행하는 단계;
    상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 로컬 반복횟수까지 매 반복마다 상기 시작점 S를 초기값에서부터 증분 I씩 증가시키면서 상기 시프팅하는 단계 및 제2 에러 정정 디코딩을 로컬 반복 수행하는 단계; 및
    상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 글로벌 반복횟수까지 매 반복마다 상기 수준 N을 초기값부터 1단위씩 증가시키면서 상기 로컬 반복 수행하는 단계를 글로벌 반복 수행하는 단계
    를 포함하는 동작 방법.
  2. 제1항에 있어서,
    상기 제2 에러 정정 디코딩이 성공하면 상기 제2 에러 정정 디코딩에 의해 복구된 데이터를 프로그램하도록 상기 메모리 장치를 제어하는 단계
    를 더 포함하는 동작 방법.
  3. 제2항에 있어서,
    상기 리드된 데이터는 복수의 코드워드를 포함하고,
    상기 제2 에러 정정 디코딩이 성공하고 아직 에러 정정 디코딩이 수행되지 않은 잔여 코드워드가 있으면 상기 코드워드의 비트를 상기 제2 에러 정정 디코딩이 성공했을 때의 수준 N씩 시프트하는 단계;
    상기 시프트된 잔여 코드워드의 에러 정정 디코딩을 수행하는 단계
    를 더 포함하는 동작 방법.
  4. 제1항에 있어서,
    상기 시프팅하는 단계에서 상기 코드워드를 시작점 S부터 수준 N씩 오른쪽으로 시프팅함으로써 상기 글로벌 반복 수행하는 단계를 수행하는 제1 단계; 및
    상기 제1 단계의 에러 정정 디코딩 성공 여부에 따라 상기 시프팅하는 단계에서 상기 코드워드를 시작점 S부터 수준 N까지 왼쪽으로 시프팅함으로써 상기 글로벌 반복 수행하는 단계를 수행하는 제2 단계
    를 더 포함하는 동작 방법.
  5. 제4항에 있어서,
    상기 수준 N, 시작점 S 및 증분 I의 단위는 상기 컨트롤러로부터 상기 메모리 장치로 데이터가 입력되는 단위와 동일한
    동작 방법.
  6. 제5항에 있어서,
    상기 데이터가 입력되는 단위는 바이트 단위인
    동작 방법.
  7. 제5항에 있어서,
    상기 증분 I는 상기 제2 에러 정정 디코딩을 수행하는 단계에서 정정 가능한 최대 에러 바이트 수인
    동작 방법.
  8. 제5항에 있어서,
    상기 최대 로컬 반복 횟수는
    상기 코드워드의 길이에 기초하여 결정되는
    동작 방법.
  9. 메모리 장치를 제어하는 컨트롤러에 있어서,
    상기 메모리 장치로부터 리드된 데이터를 버퍼링하는 메모리;
    상기 리드된 데이터에 포함된 코드워드의 에러 정정 디코딩을 수행하는 에러 정정 코드; 및
    상기 코드워드의 제1 에러 정정 디코딩 페일 여부에 따라 상기 코드워드를 시작점 S부터 수준 N씩 시프팅하고, 상기 시프팅된 코드워드의 제2 에러 정정 디코딩을 수행하도록 에러 정정 코드를 제어하는 데이터 복구 제어부를 포함하고,
    상기 데이터 복구 제어부는
    상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 로컬 반복횟수까지 매 반복마다 상기 시작점 S를 초기값에서부터 증분 I씩 증가시키면서 상기 시프팅 및 상기 에러 정정 코드 제어를 로컬 반복 수행하고, 상기 제2 에러 정정 디코딩이 성공할 때까지 혹은 최대 글로벌 반복횟수까지 매 반복마다 상기 수준 N을 초기값부터 1단위씩 증가시키면서 상기 로컬 반복 수행하는 단계를 글로벌 반복 수행하는
    컨트롤러.
  10. 제9항에 있어서,
    상기 데이터 복구 제어부는
    상기 제2 에러 정정 디코딩이 성공하면 상기 제2 에러 정정 디코딩에 의해 복구된 데이터를 프로그램하도록 상기 메모리 장치를 제어하는
    컨트롤러.
  11. 제10항에 있어서,
    상기 리드된 데이터는 복수의 코드워드를 포함하고,
    상기 데이터 복구 제어부는
    상기 제2 에러 정정 디코딩이 성공하고 아직 에러 정정 디코딩이 수행되지 않은 잔여 코드워드가 있으면 상기 코드워드의 비트를 상기 제2 에러 정정 디코딩이 성공했을 때의 수준 N씩 시프트하고, 상기 시프트된 잔여 코드워드의 에러 정정 디코딩을 수행하는
    컨트롤러.
  12. 제9항에 있어서,
    상기 데이터 복구 제어부는
    상기 시프팅하는 단계에서 상기 코드워드를 시작점 S부터 수준 N씩 오른쪽으로 시프팅함으로써 상기 글로벌 반복 수행하는 제1 동작을 수행하고, 상기 제1 동작의 에러 정정 디코딩 성공 여부에 따라 상기 시프팅하는 단계에서 상기 코드워드를 시작점 S부터 수준 N까지 왼쪽으로 시프팅함으로써 상기 글로벌 반복 수행하는 제2 동작을 수행하는
    컨트롤러.
  13. 제12항에 있어서,
    상기 수준 N, 시작점 S 및 증분 I의 단위는 상기 컨트롤러로부터 상기 메모리 장치로 데이터가 입력되는 단위와 동일한
    컨트롤러.
  14. 제13항에 있어서,
    상기 데이터가 입력되는 단위는 바이트 단위인
    컨트롤러.
  15. 제13항에 있어서,
    상기 증분 I는 상기 제2 에러 정정 디코딩을 수행하는 단계에서 정정 가능한 최대 에러 바이트 수인
    컨트롤러.
  16. 제13항에 있어서,
    상기 최대 로컬 반복 횟수는
    상기 코드워드의 길이에 기초하여 결정되는
    컨트롤러.

KR1020200019093A 2020-02-17 2020-02-17 컨트롤러 및 컨트롤러의 동작방법 KR20210104408A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020200019093A KR20210104408A (ko) 2020-02-17 2020-02-17 컨트롤러 및 컨트롤러의 동작방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200019093A KR20210104408A (ko) 2020-02-17 2020-02-17 컨트롤러 및 컨트롤러의 동작방법

Publications (1)

Publication Number Publication Date
KR20210104408A true KR20210104408A (ko) 2021-08-25

Family

ID=77495261

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200019093A KR20210104408A (ko) 2020-02-17 2020-02-17 컨트롤러 및 컨트롤러의 동작방법

Country Status (1)

Country Link
KR (1) KR20210104408A (ko)

Similar Documents

Publication Publication Date Title
CN108062258B (zh) 用于错误恢复的循环交错的xor阵列
US10700706B2 (en) Memory system with decoders and method of operating such memory system and decoders
CN106169312B (zh) 用于快闪存储的广义乘积码
US10102146B2 (en) Memory system and operating method for improving rebuild efficiency
US9875035B2 (en) Memory system having a read and copy-back operation and method for the same
CN108073467B (zh) 具有硬信道信息的位翻转ldpc解码算法
US10693496B2 (en) Memory system with LDPC decoder and method of operating such memory system and LDPC decoder
CN110347530B (zh) 数据存储装置及其操作方法
US11204846B2 (en) Memory system and method for operating the same
US11070234B2 (en) Memory system with hybrid decoding scheme with information exchange and method of operating such memory system
KR102617411B1 (ko) 메모리 시스템 및 메모리 시스템의 동작방법
CN110489271B (zh) 存储器系统及其操作方法
KR20220008058A (ko) 컨트롤러 및 컨트롤러의 동작방법
CN113314179A (zh) 用于执行读取操作的存储器系统及其操作方法
US10289328B2 (en) Memory controller and method for handling host request based on data character
KR20190031692A (ko) 데이터 처리 시스템 및 데이터 처리 시스템의 동작방법
CN110045914B (zh) 存储器系统及其操作方法
CN106158046B (zh) 用于turbo乘积码的误校正避免
US11271589B2 (en) Memory system with error-reduction scheme for decoding and method of operating such memory system
KR20210152738A (ko) 스트라이프 형태로 데이터를 액세스하는 메모리 시스템 및 메모리 시스템의 동작방법
KR102289883B1 (ko) 컨트롤러 및 컨트롤러의 동작방법
CN110764948A (zh) 数据存储装置、该数据存储装置的操作方法以及存储系统
CN110444245B (zh) 具有混合迭代解码能力的存储器系统及其操作方法
KR20210104408A (ko) 컨트롤러 및 컨트롤러의 동작방법
CN112216328A (zh) 具有低复杂度解码的存储器系统及其操作方法

Legal Events

Date Code Title Description
A201 Request for examination