KR20140051687A - 불휘발성 메모리 및 컨트롤러를 포함하는 메모리 시스템, 그리고 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법 - Google Patents

불휘발성 메모리 및 컨트롤러를 포함하는 메모리 시스템, 그리고 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법 Download PDF

Info

Publication number
KR20140051687A
KR20140051687A KR1020120118019A KR20120118019A KR20140051687A KR 20140051687 A KR20140051687 A KR 20140051687A KR 1020120118019 A KR1020120118019 A KR 1020120118019A KR 20120118019 A KR20120118019 A KR 20120118019A KR 20140051687 A KR20140051687 A KR 20140051687A
Authority
KR
South Korea
Prior art keywords
data
encoding
program
memory
candidate
Prior art date
Application number
KR1020120118019A
Other languages
English (en)
Other versions
KR102049281B1 (ko
Inventor
유영건
공준진
설창규
손홍락
유현석
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020120118019A priority Critical patent/KR102049281B1/ko
Priority to US14/053,893 priority patent/US9183138B2/en
Priority to TW102137226A priority patent/TWI613658B/zh
Priority to DE102013111549.7A priority patent/DE102013111549B4/de
Priority to JP2013220131A priority patent/JP6209051B2/ja
Priority to CN201310503112.4A priority patent/CN103778961B/zh
Publication of KR20140051687A publication Critical patent/KR20140051687A/ko
Application granted granted Critical
Publication of KR102049281B1 publication Critical patent/KR102049281B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/02Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements
    • G11C11/16Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements using elements in which the storage effect is based on magnetic spin effect
    • G11C11/165Auxiliary circuits
    • G11C11/1659Cell access
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/02Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements
    • G11C11/16Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements using elements in which the storage effect is based on magnetic spin effect
    • G11C11/165Auxiliary circuits
    • G11C11/1675Writing or programming circuits or methods
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0021Auxiliary circuits
    • G11C13/0069Writing or programming circuits or methods
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0021Auxiliary circuits
    • G11C13/0069Writing or programming circuits or methods
    • G11C2013/0076Write operation performed depending on read result

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Semiconductor Memories (AREA)
  • Read Only Memory (AREA)

Abstract

본 발명은 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법에 관한 것이다. 본 발명의 프로그램 방법은, 프로그램 데이터를 수신하는 단계, 메모리 셀들에 저장된 데이터를 읽는 단계, 프로그램 데이터 및 읽혀진 데이터에 기반하여 복수의 인코딩 스킴들 중 선택된 적어도 하나의 인코딩 스킴을 이용하여 프로그램 데이터를 인코딩하고 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계, 그리고 인코딩된 데이터 및 플래그 데이터를 메모리 셀들에 프로그램하는 단계로 구성된다.

Description

불휘발성 메모리 및 컨트롤러를 포함하는 메모리 시스템, 그리고 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법{MEMORY SYSTEM INCLUDING NONVOLATILE MEMORY AND CONTROLLER AND PROGRAMMING METHOD OF PROGRAMMING DATA INTO NONVOLATILE MEMORY}
본 발명은 반도체 메모리에 관한 것으로, 더 상세하게는 불휘발성 메모리 및 컨트롤러를 포함하는 메모리 시스템, 그리고 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법에 관한 것이다.
반도체 메모리 장치(semiconductor memory device)는 실리콘(Si, silicon), 게르마늄(Ge, Germanium), 비화 갈륨(GaAs, gallium arsenide), 인듐인(InP, indium phospide) 등과 같은 반도체를 이용하여 구현되는 기억장치이다. 반도체 메모리 장치는 크게 휘발성 메모리 장치(Volatile memory device)와 불휘발성 메모리 장치(Nonvolatile memory device)로 구분된다.
휘발성 메모리 장치는 전원 공급이 차단되면 저장하고 있던 데이터가 소멸되는 메모리 장치이다. 휘발성 메모리 장치에는 SRAM (Static RAM), DRAM (Dynamic RAM), SDRAM (Synchronous DRAM) 등이 있다. 불휘발성 메모리 장치는 전원 공급이 차단되어도 저장하고 있던 데이터를 유지하는 메모리 장치이다. 불휘발성 메모리 장치에는 ROM (Read Only Memory), PROM (Programmable ROM), EPROM (Electrically Programmable ROM), EEPROM (Electrically Erasable and Programmable ROM), 플래시 메모리 장치, PRAM (Phase-change RAM), MRAM (Magnetic RAM), RRAM (Resistive RAM), FRAM (Ferroelectric RAM) 등이 있다.
본 발명의 목적은 감소된 소비 전력을 갖는 불휘발성 메모리 및 컨트롤러를 포함하는 메모리 시스템, 그리고 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법을 제공하는 데에 있다.
메모리에 데이터를 프로그램하는 본 발명의 실시 예에 따른 프로그램 방법은, 프로그램 데이터를 수신하는 단계; 상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들에 저장된 데이터를 읽는 단계; 상기 프로그램 데이터 및 상기 읽혀진 데이터에 기반하여 복수의 인코딩 스킴들 중 선택된 적어도 하나의 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하고, 그리고 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계; 그리고 상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함한다.
실시 예로서, 상기 선택된 적어도 하나의 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하고, 그리고 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계는, 상기 복수의 인코딩 스킴들 각각의 인코딩 결과를 예측하는 단계; 그리고 상기 예측 결과에 따라 상기 복수의 인코딩 스킴들 중 적어도 하나의 인코딩 스킴을 선택하는 단계를 포함한다.
실시 예로서, 상기 복수의 인코딩 스킴들 각각의 인코딩 결과를 예측하는 단계는, 상기 읽혀진 데이터와 프로그램 데이터 사이의 동일한 비트들 및 변환 비트들을 각각 카운트하는 단계를 포함한다.
실시 예로서, 상기 복수의 인코딩 스킴들은 순환 시프트 인코딩 스킴과 반전 인코딩 스킴을 포함하고, 상기 예측 결과에 따라 적어도 하나의 인코딩 스킴을 선택하는 단계와 상기 프로그램 데이터를 인코딩하는 단계는, 상기 변환 비트들의 수와 동일 비트들의 수의 차이가 문턱값보다 작을 때 상기 순환 시프트 인코딩 스킴을 선택하여 프로그램 데이터를 시프트하고, 상기 차이가 상기 문턱값 이상일 때 상기 반전 인코딩 스킴을 선택하여 상기 프로그램 데이터를 반전하는 단계를 포함한다.
실시 예로서, 상기 인코딩된 데이터와 상기 읽혀진 데이터 사이의 거리가 문턱값보다 작을 때 상기 인코딩 정보를 포함하는 플래그 데이터를 생성하고, 상기 인코딩된 데이터와 상기 읽혀진 데이터 사이의 거리가 상기 문턱값 이상일 때, 상기 예측 결과에 따라 상기 복수의 인코딩 스킴들 중 다른 인코딩 스킴을 선택하고, 상기 선택된 다른 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하고, 그리고 상기 플래그 데이터를 생성하는 단계를 더 포함한다.
실시 예로서, 상기 프로그램 데이터 및 상기 읽혀진 데이터에 기반하여 복수의 인코딩 스킴들 중 선택된 적어도 하나의 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하고, 그리고 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계는, 상기 복수의 인코딩 스킴들을 순차적으로 선택하며, 선택된 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하여 후보 데이터를 생성하는 단계; 상기 프로그램 데이터 및 후보 데이터들을 상기 읽혀진 데이터와 각각 비교하는 단계; 상기 프로그램 데이터 및 후보 데이터 중 상기 읽혀진 데이터와 가장 적은 거리를 갖는 데이터를 상기 인코딩된 데이터로 선택하는 단계; 그리고 상기 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계를 포함한다.
실시 예로서, 상기 프로그램 데이터 및 상기 읽혀진 데이터에 기반하여 복수의 인코딩 스킴들 중 선택된 적어도 하나의 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하고, 그리고 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계는, 둘 이상의 인코딩 스킴을 선택하고, 상기 선택된 둘 이상의 인코딩 스킴을 조합하여 상기 프로그램 데이터를 인코딩하고, 그리고 상기 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계를 포함한다.
실시 예로서, 상기 인코딩 정보는 상기 프로그램 데이터 및 상기 적어도 하나의 인코딩 스킴에 의해 생성되는 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보를 포함한다.
실시 예로서, 상기 복수의 인코딩 스킴들은, 상기 프로그램 데이터를 순환 시프트하여 후보 데이터를 생성하는 순환 시프트 인코딩 스킴을 포함하고, 상기 플래그 데이터는 상기 인코딩된 데이터가 상기 프로그램 데이터로부터 순환 시프트된 비트 수에 대한 정보를 포함한다.
실시 예로서, 상기 복수의 인코딩 스킴들은, 상기 프로그램 데이터의 첫 번째 비트와 동일한 첫 번째 비트를 갖고, 상기 프로그램 데이터의 비트들이 천이하는 위치에 로직 하이의 값을 갖고, 상기 프로그램 데이터의 비트들이 천이하지 않는 위치에 로직 로우의 값을 갖는 후보 데이터를 생성하는 차분 인코딩 스킴을 포함하고, 상기 플래그 데이터는 상기 프로그램 데이터 및 상기 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보를 포함한다.
실시 예로서, 상기 복수의 인코딩 스킴들은, 미리 설정된 데이터와 상기 프로그램 데이터의 논리 연산을 수행하여 후보 데이터를 생성하는 바이너리 마스크 인코딩 스킴을 포함하고, 상기 플래그 데이터는 상기 프로그램 데이터 및 상기 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보를 포함한다.
실시 예로서, 상기 복수의 인코딩 스킴들은, 상기 프로그램 데이터를 반전하여 후보 데이터를 생성하는 비트 반전 인코딩 스킴을 포함하고, 상기 플래그 데이터는 상기 프로그램 데이터 및 상기 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보를 포함한다.
실시 예로서, 상기 프로그램 데이터는 복수의 서브 데이터로 분할되고, 상기 복수의 서브 데이터 각각에 대해 상기 적어도 하나의 인코딩 스킴이 선택된다.
메모리에 데이터를 프로그램하는 본 발명의 다른 실시 예에 따른 프로그램 방법은, 프로그램 데이터를 수신하는 단계; 상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들에 저장된 데이터를 읽는 단계; 상기 프로그램 데이터 및 읽혀진 데이터를 복수의 프로그램 데이터 그룹들 및 복수의 읽혀진 데이터 그룹들로 각각 분할하는 단계; 상기 복수의 프로그램 데이터 그룹 각각에 대해, 상기 복수의 읽혀진 데이터 그룹들 중 대응하는 그룹에 기반하여, 복수의 인코딩 스킴들 중 선택된 적어도 하나의 인코딩 스킴을 이용하여 인코딩을 수행하고, 인코딩 결과를 조합하여 인코딩된 데이터를 생성하는 단계; 각 프로그램 데이터 그룹의 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계; 그리고 상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함한다.
메모리에 데이터를 프로그램하는 본 발명의 또다른 실시 예에 따른 프로그램 방법은, 프로그램 데이터를 수신하는 단계; 상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들로부터 데이터를 읽는 단계; 상기 프로그램 데이터를 후보 데이터로 선택하는 단계; 상기 후보 데이터와 상기 읽혀진 데이터를 비교하는 단계; 상기 비교 결과에 따라, 상기 후보 데이터와 상기 읽혀진 데이터 사이의 거리가 기준값 미만이면 상기 후보 데이터를 인코딩된 데이터로 선택하고, 상기 후보 데이터와 상기 읽혀진 데이터 사이의 거리가 상기 기준값 이상이면 상기 후보 데이터를 순환 시프트하여 다른 후보 데이터를 생성하고 상기 비교하는 단계 및 상기 비교 결과에 따라 인코딩된 데이터를 선택하거나 다른 후보 데이터를 선택하는 단계를 다시 수행하는 단계; 상기 인코딩된 데이터가 상기 프로그램 데이터로부터 시프트된 비트 수에 대한 정보를 포함하는 플래그 데이터를 생성하는 단계; 그리고 상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함한다.
실시 예로서, 상기 인코딩된 데이터가 선택되지 않고 상기 다시 수행하는 단계가 미리 정해진 횟수만큼 수행되면, 상기 프로그램 데이터 및 상기 순환 시프트에 의해 생성된 후보 데이터들 중 상기 읽혀진 데이터와 가장 거리가 가까운 데이터가 상기 인코딩된 데이터로 선택된다.
본 발명의 실시 예에 따른 메모리 시스템은, 메모리; 그리고 상기 메모리를 제어하도록 구성되는 컨트롤러를 포함하고, 상기 컨트롤러는, 랜덤 액세스 메모리; 외부로부터 프로그램 데이터를 수신하여 상기 랜덤 액세스 메모리에 저장하도록 구성되는 호스트 인터페이스; 상기 메모리로부터 읽혀진 데이터를 수신하여 상기 랜덤 액세스 메모리에 저장하도록 구성되는 메모리 인터페이스; 상기 랜덤 액세스 메모리에 저장된 상기 읽혀진 데이터에 기반하여 상기 랜덤 액세스 메모리에 저장된 상기 프로그램 데이터를 인코딩하고, 인코딩된 데이터를 상기 랜덤 액세스 메모리에 저장하도록 구성되는 데이터 인코딩부; 그리고 상기 랜덤 액세스 메모리에 저장된 상기 인코딩된 데이터를 상기 메모리에 프로그램하도록 상기 메모리 인터페이스를 제어하는 프로세서를 포함하고, 상기 데이터 인코딩부는 상기 읽혀진 데이터 및 상기 프로그램 데이터의 비교 결과에 따라 상기 인코딩된 데이터를 생성하도록 더 구성된다.
실시 예로서, 상기 데이터 인코딩부는 복수의 인코딩 스킴들 중 적어도 하나의 인코딩 스킴을 선택하고, 상기 선택된 적어도 하나의 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하도록 더 구성된다.
실시 예로서, 상기 데이터 인코딩부는 상기 프로그램 데이터를 순환 시프트 인코딩하여 후보 데이터를 생성하고, 상기 프로그램 데이터 및 후보 데이터 중 상기 읽혀진 데이터와 가장 작은 거리를 갖는 데이터를 상기 인코딩된 데이터로 선택하도록 더 구성된다.
실시 예로서, 상기 메모리는 자기 램(Magnetic Random Access Memory) 또는 상 변화 램(Phase change Random Access Memory)을 포함한다.
본 발명의 다른 실시 예에 따른 프로그램 방법은, 프로그램 데이터를 수신하는 단계; 상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들로부터 데이터를 읽는 단계; 상기 프로그램 데이터의 첫 번째 비트와 동일한 첫 번째 비트를 갖고, 상기 프로그램 데이터의 비트들이 천이하는 위치에 로직 하이의 값을 갖고, 상기 프로그램 데이터의 비트들이 천이하지 않는 위치에 로직 로우의 값을 갖는 후보 데이터를 생성하는 단계; 상기 프로그램 데이터 및 후보 데이터 중 상기 읽혀진 데이터와 가장 적은 거리를 갖는 데이터를 인코딩된 데이터로 선택하는 단계; 상기 프로그램 데이터 및 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보 포함하는 플래그 데이터를 생성하는 단계; 그리고 상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함한다.
본 발명의 다른 실시 예에 따른 프로그램 방법은, 프로그램 데이터를 수신하는 단계; 상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들로부터 데이터를 읽는 단계; 미리 설정된 데이터와 상기 프로그램 데이터의 논리 연산을 수행하여 후보 데이터를 생성하는 단계; 상기 프로그램 데이터 및 후보 데이터 중 상기 읽혀진 데이터와 가장 적은 거리를 갖는 데이터를 인코딩된 데이터로 선택하는 단계; 상기 프로그램 데이터 및 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보 포함하는 플래그 데이터를 생성하는 단계; 그리고 상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함한다.
본 발명의 다른 실시 예에 따른 프로그램 방법은, 프로그램 데이터를 수신하는 단계; 상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들로부터 데이터를 읽는 단계; 상기 수신된 프로그램 데이터를 제 1 및 제 2 부분들로 분할하는 단계; 상기 수신된 프로그램 데이터의 제 1 부분을 반전하여 제 1 후보 데이터를 생성하는 단계; 상기 수신된 프로그램 데이터의 제 2 부분을 반전하여 제 2 후보 데이터를 생성하는 단계; 상기 프로그램 데이터와 제 1 및 제 2 후보 데이터 중 상기 읽혀진 데이터와 가장 적은 거리를 갖는 데이터를 인코딩된 데이터로 선택하는 단계; 상기 프로그램 데이터와 제 1 및 제 2 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보 포함하는 플래그 데이터를 생성하는 단계; 그리고 상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함한다.
본 발명의 실시 예들에 따르면, 프로그램 데이터는 불휘발성 메모리에 저장되어 있는 데이터와 거리가 낮은 데이터로 인코딩되어 프로그램된다. 프로그램시에 스위칭되는 비트 수가 감소되므로, 불휘발성 메모리의 소비 전력이 감소된다.
도 1은 본 발명의 제 1 실시 예에 따른 메모리 시스템을 보여주는 블록도이다.
도 2는 본 발명의 실시 예에 따른 불휘발성 메모리를 보여주는 블록도이다.
도 3a 내지 도 3c는 본 발명의 실시 예들에 따른 메모리 셀 어레이들을 보여주는 회로도이다.
도 4는 본 발명의 실시 예에 따른 컨트롤러를 보여주는 블록도이다.
도 5는 본 발명의 제 1 실시 예에 따른 프로그램 방법을 보여주는 순서도이다.
도 6a는 본 발명의 제 1 실시 예에 따라 인코딩을 수행하고 플래그 데이터를 생성하는 방법을 보여주는 순서도이다.
도 6b는 도 6a의 인코딩 방법의 응용 예를 보여주는 순서도이다.
도 7a는 도 6의 인코딩 방법이 적용된 예를 보여준다.
도 7b는 도 6의 인코딩 방법이 적용된 다른 예를 보여준다. 예시적으로, 최대 루프가 3인 예가 도 7b에 도시된다.
도 7c는 2비트 플래그 데이터를 사용하여 도 6의 인코딩 방법을 적용한 시뮬레이션 결과를 보여준다.
도 7d는 4비트 플래그 데이터를 사용하여 도 6의 인코딩 방법을 적용한 시뮬레이션 결과를 보여준다.
도 8은 본 발명의 제 2 실시 예에 따라 인코딩을 수행하고 플래그 데이터를 생성하는 방법을 보여주는 순서도이다.
도 9는 도 8의 인코딩 방법이 적용된 예를 보여준다.
도 10은 본 발명의 제 3 실시 예에 따라 인코딩을 수행하고 플래그 데이터를 생성하는 방법을 보여주는 순서도이다.
도 11은 도 10의 인코딩 방법이 적용된 예를 보여준다.
도 12는 본 발명의 제 4 실시 예에 따라 인코딩을 수행하고 플래그 데이터를 생성하는 방법을 보여주는 순서도이다.
도 13a는 도 12의 인코딩 방법이 적용된 제 1 예를 보여준다.
도 13b는 도 12의 인코딩 방법의 변형 예를 보여준다.
도 14는 본 발명의 제 2 실시 예에 따른 프로그램 방법을 보여주는 순서도이다.
도 15는 본 발명의 제 1 실시 예에 따라 인코딩 스킴을 선택하고, 인코딩을 수행하고, 플래그 데이터를 생성하는 방법을 보여주는 순서도이다.
도 16은 후보 데이터의 읽혀진 데이터로부터의 거리를 예측하고, 예측 결과에 따라 인코딩 스킴을 선택하는 일 예를 보여주는 순서도이다.
도 17은 본 발명의 제 2 실시 예에 따라 인코딩 스킴을 선택하고, 인코딩을 수행하고, 플래그 데이터를 생성하는 방법을 보여주는 순서도이다.
도 18은 도 17은 본 발명의 일 실시 예에 따라 인코딩 스킴을 선택하고, 인코딩을 수행하고, 플래그 데이터를 생성하는 방법을 보여주는 순서도이다.
도 19는 본 발명의 일 실시 예에 따른 프로그램 방법을 보여주는 순서도이다.
도 20은 데이터 인코딩 및 디코딩부가 프로그램 데이터를 분할하여 인코딩하는 예를 보여준다.
도 21은 본 발명의 제 2 실시 예에 따른 메모리 시스템을 보여주는 블록도이다.
도 22는 본 발명의 실시 예에 따른 컴퓨팅 시스템을 보여주는 블록도이다.
이하에서, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명의 기술적 사상을 용이하게 실시할 수 있을 정도로 상세히 설명하기 위하여, 본 발명의 실시 예를 첨부된 도면을 참조하여 설명하기로 한다.
도 1은 본 발명의 제 1 실시 예에 따른 메모리 시스템(1000)을 보여주는 블록도이다. 도 1을 참조하면, 메모리 시스템(1000)은 불휘발성 메모리(1100) 및 컨트롤러(1200)를 포함한다.
불휘발성 메모리(1100)는 컨트롤러(1200)의 제어에 따라 동작하도록 구성된다. 불휘발성 메모리(1100)는 컨트롤러(1200)로부터 전송되는 제어 신호(CTRL), 커맨드(CMD), 어드레스(ADDR) 및 데이터(DATA)에 응답하여, 프로그램, 읽기 및 소거를 수행할 수 있다. 불휘발성 메모리(1100)는 불휘발성 랜덤 액세스 메모리를 포함할 수 있다. 예를 들어, 불휘발성 메모리(1100)는 PRAM (Phase-change RAM), MRAM (Magnetic RAM), RRAM (Resistive RAM), FRAM (Ferroelectric RAM) 등을 포함할 수 있다. 불휘발성 메모리(1100)는 낸드 플래시 메모리를 포함할 수 있다.
컨트롤러(1200)는 불휘발성 메모리(1100)를 제어하도록 구성된다. 컨트롤러(1200)는 제어 신호(CTRL), 커맨드(CMD), 어드레스(ADDR) 및 데이터(DATA)를 불휘발성 메모리(1100)로 전송하거나 불휘발성 메모리(1100)와 교환할 수 있다. 컨트롤러(1200)는 외부 호스트(Host)의 제어에 따라 불휘발성 메모리(1100)를 제어할 수 있다.
컨트롤러(1200)는 데이터 인코딩 및 디코딩부(1200)를 포함한다. 데이터 인코딩 및 디코딩부(1200)는 호스트(Host)로부터 전송되는 데이터를 인코딩하도록 구성된다. 인코딩된 데이터는 불휘발성 메모리(1100)에 프로그램될 수 있다. 데이터 인코딩 및 디코딩부(1200)는 불휘발성 메모리(1100)로부터 읽어지는 데이터를 디코딩하도록 구성된다. 디코딩된 데이터는 호스트(Host)로 전송될 수 있다.
예시적으로, 불휘발성 메모리(1100)는 메모리 셀들에 연결된 도전선들을 통해 전류를 흘려, 메모리 셀들에 저장된 데이터(예를 들어, 논리 상태)를 변환하여 메모리 셀들에 데이터를 저장할 수 있다. 즉, 프로그램 시에, 저장된 데이터가 변하는 메모리 셀들의 수는 메모리 시스템(1000)의 소비 전력을 결정하는 중요한 요인일 수 있다.
데이터 인코딩 및 디코딩부(1260)는 프로그램 시의 소비 전력이 절감되도록 데이터를 인코딩할 수 있다. 예를 들어, 데이터 인코딩 및 디코딩부(1260)는 프로그램 시에 메모리 셀들에 저장될 데이터와 메모리 셀에 저장된 데이터의 차이가 최소화되도록 데이터를 인코딩할 수 있다. 데이터 인코딩 및 디코딩부(1260)의 동작은 이하의 도면들을 참조하여 더 상세하게 설명된다.
도 1에서, 데이터 인코딩 및 디코딩부(1260)는 컨트롤러(1200)의 구성 요소인 것으로 도시되어 있다. 그러나, 본 발명의 기술적 사상은 이 실시 예에 한정되지 않는다. 데이터 인코딩 및 디코딩부(1260)가 불휘발성 메모리(1100)에 포함되는 것 또한 본 발명의 기술적 사상의 범주에 속하며, 본 발명의 권리 범위에 속한다. 이하에서, 간결한 설명을 위하여, 데이터 인코딩 및 디코딩부(1260)가 컨트롤러(1200)에 속하는 실시 예가 설명되나, 본 발명의 기술적 사상은 이에 한정되지 않는다.
메모리 시스템(1000)은 PC 카드(PCMCIA, personal computer memory card international association), 컴팩트 플래시 카드(CF), 스마트 미디어 카드(SM, SMC), 메모리 스틱, 멀티미디어 카드(MMC, RS-MMC, MMCmicro), SD 카드(SD, miniSD, microSD, SDHC), 유니버설 플래시 기억장치(UFS) 등과 같은 메모리 카드를 형성할 수 있다.
메모리 시스템(1000)은 솔리드 스테이트 드라이브(SSD, Solid State Drive)를 형성할 수 있다. 메모리 시스템(1000)은 컴퓨터 시스템의 메인 메모리를 형성할 수 있다.
도 2는 본 발명의 실시 예에 따른 불휘발성 메모리(1100)를 보여주는 블록도이다. 도 1 및 도 2를 참조하면, 불휘발성 메모리(1100)는 메모리 셀 어레이(1100), 행 디코더(1120), 열 디코더(1130), 어드레스 디코더(1140), 데이터 입출력 회로(1150), 그리고 전압 생성기 및 제어 로직(1160)을 포함한다.
메모리 셀 어레이(1100)는 복수의 메모리 셀들을 포함한다. 복수의 메모리 셀들은 복수의 불휘발성 메모리 셀들일 수 있다. 복수의 메모리 셀들은 워드 라인들(WL)을 통해 행 디코더(1120)에 연결되고, 비트 라인들(BL)을 통해 열 디코더(1130)에 연결된다. 예시적으로, 메모리 셀 어레이(1110)의 복수의 메모리 셀들의 행들은 워드 라인들(WL)에 연결되고, 복수의 메모리 셀들의 열들은 비트 라인들(BL)에 연결될 수 있다.
행 디코더(1120)는 워드 라인들(WL)을 통해 메모리 셀 어레이(1110)에 연결된다. 행 디코더(1120)는 전압 생성기 및 제어 로직(1160)의 제어에 따라 동작할 수 있다. 행 디코더(1120)는 어드레스 디코더(1140)로부터 디코딩된 행 어드레스(DRA)를 수신하고, 디코딩된 행 어드레스(DRA)에 따라 워드 라인들(WL)을 각각 선택 또는 비선택할 수 있다. 행 디코더(1120)는 전압 생성기 및 제어 로직(1160)으로부터 제공되는 전압들을 선택된 적어도 하나의 워드 라인 및 비선택된 워드 라인들에 각각 공급할 수 있다.
열 디코더(1130)는 비트 라인들(BL)을 통해 메모리 셀 어레이(1110)에 연결된다. 열 디코더(1120)는 전압 생성기 및 제어 로직(1160)의 제어에 따라 동작할 수 있다. 열 디코더(1120)는 어드레스 디코더(1140)로부터 디코딩된 열 어드레스(DCA)를 수신하고, 디코딩된 열 어드레스(DCA)에 따라 비트 라인들(BL)을 각각 선택 또는 비선택할 수 있다. 열 디코더(1130)는 전압 생성기 및 제어 로직(1160)으로부터 제공되는 전압들을 비트 라인들에 각각 공급할 수 있다.
예시적으로, 열 디코더(1130)는 데이터 라인들(DL)을 통해 데이터를 수신하고, 수신된 데이터를 저장할 수 있다. 열 디코더(1130)는 저장된 데이터에 기반하여 비트 라인들(BL)을 각각 선택 또는 비선택할 수 있다. 열 디코더(1130)는 비트 라인들(BL)의 전압 또는 전류를 감지하고, 감지 결과를 저장할 수 있다. 감지 결과는 메모리 셀 어레이(1110)로부터 읽혀진 데이터일 수 있다. 읽혀진 데이터는 데이터 라인들(DL)을 통해 출력될 수 있다.
어드레스 디코더(1140)는 전압 생성기 및 제어 로직(1160)의 제어에 따라 동작한다. 어드레스 디코더(1140)는 컨트롤러(1200)로부터 어드레스(ADDR)를 수신하고, 수신된 어드레스를 저장할 수 있다. 어드레스 디코더(1140)는 저장된 어드레스 중 행 어드레스를 디코딩하고, 디코딩된 행 어드레스(DRA)를 행 디코더(1120)로 전송할 수 있다. 어드레스 디코더(1140)는 저장된 어드레스 중 열 어드레스를 디코딩하고, 디코딩된 열 어드레스(DCA)를 열 디코더(1130)로 전송할 수 있다.
데이터 입출력 회로(1150)는 전압 생성기 및 제어 로직(1160)의 제어에 따라 동작한다. 데이터 입출력 회로(1150)는 컨트롤러(1200)로부터 전송되는 데이터를 저장하고, 저장된 데이터를 데이터 라인들(DL)로 출력할 수 있다. 데이터 입출력 회로(1150)는 데이터 라인들(DL)을 통해 전송되는 데이터를 저장하고, 저장된 데이터를 컨트롤러(1200)로 출력할 수 있다.
전압 생성기 및 제어 로직(1160)는 컨트롤러(1200)로부터 제어 신호(CTRL) 및 커맨드(CMD)를 수신하도록 구성된다. 전압 생성기 및 제어 로직(1160)는 수신된 제어 신호(CTRL) 및 커맨드(CMD)에 응답하여, 불휘발성 메모리(1100)의 제반 동작을 제어하도록 구성된다. 예를 들어, 전압 생성기 및 제어 로직(1160)는 불휘발성 메모리(1100)의 구성 요소들에 전압들을 공급하고, 이들의 동작 타이밍들을 제어할 수 있다.
도 3a 내지 도 3c는 본 발명의 실시 예들에 따른 메모리 셀 어레이들을 보여주는 회로도이다. 도 3a를 참조하면, 메모리 셀 어레이(1110a)는 워드 라인들(WL1~WLn) 및 비트 라인들(BL1~BLm)에 연결된 메모리 셀들(MC)을 포함한다. 메모리 셀들(MC) 각각은 하나의 가변 저항 소자를 포함할 수 있다. 가변 저항 소자는 온도, 자기장의 배열, 전압 또는 전류 조건에 따라 변화하는 저항값을 가질 수 있다. 메모리 셀들(MC)은 워드 라인들(WL1~WLn) 및 비트 라인들(BL1~BLm)의 전압들에 따라 선택 또는 비선택될 수 있다.
도 3b를 참조하면, 메모리 셀 어레이(1110b)는 워드 라인들(WL1~WLn) 및 비트 라인들(BL1~BLn)에 연결된 메모리 셀들(MC)을 포함한다. 메모리 셀들(MC) 각각은 하나의 가변 저항 소자 및 하나의 다이오드를 포함할 수 있다. 가변 저항 소자는 온도, 자기장의 배열, 전압 또는 전류 조건에 따라 변화하는 저항값을 가질 수 있다. 다이오드들은 순방향 바이어스 시에 전류가 흐르고, 역방향 바이어스 시에 전류가 흐르지 않을 수 있다. 다이오드들은 워드 라인들(WL1~WLn) 및 비트 라인들(BL1~BLm)의 전압들에 따라 메모리 셀들(MC)을 선택하는 선택도를 향상시킬 수 있다.
예시적으로, 불휘발성 메모리(1100)의 프로그램, 읽기 및 소거 스킴에 따라, 다이오드의 위치 및 방향은 변경될 수 있다.
도 3c를 참조하면, 메모리 셀 어레이(1110c)는 워드 라인들(WL1~WLn), 소스 라인들(SL1~SLn) 및 비트 라인들(BL1~BLm)에 연결된 메모리 셀들(MC)을 포함한다. 메모리 셀들(MC) 각각은 하나의 가변 저항 소자 및 하나의 트랜지스터를 포함할 수 있다. 가변 저항 소자는 온도, 자기장의 배열, 전압 또는 전류 조건에 따라 변화하는 저항값을 가질 수 있다. 트랜지스터들은 워드 라인들(WL1~WLn)의 전압들에 따라 턴-온 또는 턴-오프 될 수 있다. 트랜지스터들은 메모리 셀들(MC)을 선택하는 선택도를 향상시킬 수 있다.
예시적으로, 불휘발성 메모리(1100)의 프로그램, 읽기 및 소거 스킴에 따라, 트랜지스터의 위치 및 연결 관계는 변경될 수 있다. 소스 라인들(SL1~SLn)은 행 디코더(1120) 또는 열 디코더(1130)에 연결될 수 있다.
도 4는 본 발명의 실시 예에 따른 컨트롤러(1200)를 보여주는 블록도이다. 도 1 및 도 4를 참조하면, 컨트롤러(1200)는 버스(1210), 프로세서(1220), 랜덤 액세스 메모리(1230), 호스트 인터페이스(1240), 데이터 인코딩 및 디코딩부(1250), 그리고 메모리 인터페이스(1260)를 포함한다.
버스(1210)는 컨트롤러(1200)의 구성 요소들 사이에 채널들을 제공하도록 구성된다.
프로세서(1220)는 컨트롤러(1200)의 구성 요소들을 제어하도록 구성된다.
랜덤 액세스 메모리(1230)는 프로세서(1220) 또는 컨트롤러(1200)의 동작 메모리로 사용될 수 있다. 랜덤 액세스 메모리(1230)는 DRAM, SRAM, FRAM, MRAM, PRAM, RRAM 등을 포함할 수 있다.
호스트 인터페이스(1240)는 프로세서(1220)의 제어에 따라 호스트와 통신하도록 구성된다. 호스트 인터페이스(1240)는 USB (Universal Serial Bus), MMC (multimedia card), PCI (peripheral component interconnection), PCI-E (PCI-express), ATA (Advanced Technology Attachment), Serial-ATA, Parallel-ATA, SCSI (small computer small interface), ESDI (enhanced small disk interface), IDE (Integrated Drive Electronics), 그리고 파이어와이어(Firewire) 중 적어도 하나의 통신 규격에 따라 호스트와 통신하도록 구성될 수 있다.
메모리 인터페이스(1250)는 불휘발성 메모리(1100)와 통신하도록 구성된다.
데이터 인코딩 및 디코딩부(1260)는 데이터의 인코딩 및 디코딩을 수행하도록 구성된다. 예를 들어, 데이터 인코딩 및 디코딩부(1260)는 호스트로부터 호스트 인터페이스(1240)를 통해 수신되어 랜덤 액세스 메모리(1230)에 저장된 데이터를 인코딩할 수 있다. 인코딩된 데이터는 랜덤 액세스 메모리(1230)에 저장된 후 메모리 인터페이스(1250)를 통해 불휘발성 메모리(1100)로 전송될 수 있다. 데이터 인코딩 및 디코딩부(1260)는 불휘발성 메모리(1100)로부터 메모리 인터페이스(1250)를 통해 수신되어 랜덤 액세스 메모리(1230)에 저장된 데이터를 디코딩할 수 있다. 디코딩된 데이터는 랜덤 액세스 메모리(1230)에 저장된 후 호스트 인터페이스(1240)를 통해 호스트로 전송될 수 있다.
데이터 인코딩 및 디코딩부(1260)는 불휘발성 메모리(1100)의 메모리 셀들의 데이터의 변화가 감소하도록 데이터를 인코딩할 수 있다. 데이터 인코딩 및 디코딩부(1260)는 인코딩에 대한 정보를 생성할 수 있다. 생성된 정보는 인코딩된 데이터와 함께 불휘발성 메모리(1100)로 전송될 수 있다. 불휘발성 메모리(1100)로부터 데이터와 함께 인코딩에 대한 정보가 수신될 수 있다. 데이터 인코딩 및 디코딩부(1260)는 수신된 정보에 기반하여, 수신된 데이터를 디코딩할 수 있다.
이하에서, 데이터 인코딩 및 디코딩부(1260)가 생성하는 인코딩에 대한 정보를 플래그 데이터(flag data)라 부르기로 한다.
예시적으로, 데이터 인코딩 및 디코딩부(1260)는 프로세서(1220)와 분리된 별도의 구성 요소인 것으로 도시되어 있다. 그러나, 데이터 인코딩 및 디코딩부(1260)는 프로세서(1220)의 구성 요소로 병합될 수 있다. 데이터 인코딩 및 디코딩부(1260)는 프로세서(1220)에서 구동되는 소프트웨어로 구현될 수 있다. 본 발명의 기술적 사상으로부터 멀어지지 않으며, 데이터 인코딩 및 디코딩부(1260)는 컨트롤러(1200)에서 다양한 형태로 구현될 수 있다.
도 5는 본 발명의 제 1 실시 예에 따른 프로그램 방법을 보여주는 순서도이다. 도 1, 도 4 및 도 5를 참조하면, S110 단계에서, 호스트로부터 프로그램 데이터가 수신된다. 컨트롤러(1200)는 호스트로부터 호스트 인터페이스(1240)를 통해 프로그램 데이터를 수신하고, 이를 랜덤 액세스 메모리(1230)에 저장할 수 있다.
S120 단계에서, 불휘발성 메모리(1100)로부터 수신된 프로그램 데이터에 대응하는 데이터가 읽혀진다. 예를 들어, 컨트롤러(1200)는 수신된 프로그램 데이터가 프로그램될 불휘발성 메모리(1100)의 저장 영역으로부터 데이터를 읽을 수 있다. 컨트롤러(1200)는 프로그램 데이터와 함께 수신되는 어드레스를 이용하여 읽기를 수행하도록 불휘발성 메모리(1100)를 제어할 수 있다. 읽혀진 데이터는 메모리 인터페이스(1250)를 통해 수신되어 랜덤 액세스 메모리(1230)에 저장될 수 있다.
S130 단계에서, 프로그램 데이터 및 읽혀진 데이터에 따라 프로그램 데이터가 인코딩되고, 인코딩 정보를 포함하는 플래그 데이터가 생성된다. 데이터 인코딩 및 디코딩부(1260)는 랜덤 액세스 메모리(1230)에 저장된 프로그램 데이터와 읽혀진 데이터를 비교할 수 있다. 비교 결과에 따라, 데이터 인코딩 및 디코딩부(1260)는 랜덤 액세스 메모리(1230)에 저장된 프로그램 데이터를 인코딩할 수 있다. 데이터 인코딩 및 디코딩부(1260)는 인코딩을 수행하여 적어도 하나의 후보 데이터를 생성하고, 생성된 후보 데이터 및 프로그램 데이터를 비교할 수 있다. 데이터 인코딩 및 디코딩부(1260)는 후보 데이터 및 프로그램 데이터 중 하나를 인코딩된 데이터로 선택할 수 있다.
인코딩된 데이터는 랜덤 액세스 메모리(1230)에 저장될 수 있다. 데이터 인코딩 및 디코딩부(1260)가 프로그램 데이터를 인코딩된 데이터로 선택하는 경우, 인코딩된 데이터가 랜덤 액세스 메모리(1230)에 저장되는 동작은 생략될 수 있다.
인코딩된 데이터가 선택되면, 데이터 인코딩 및 디코딩부(1260)는 인코딩 정보를 포함하는 플래그 데이터를 생성할 수 있다. 플래그 데이터는 후보 데이터 및 프로그램 데이터 중 어떤 데이터가 인코딩된 데이터로 선택되었는지에 대한 정보를 포함할 수 있다. 플래그 데이터는 랜덤 액세스 메모리(1230)에 저장될 수 있다.
S140 단계에서, 인코딩된 데이터 및 플래그 데이터가 불휘발성 메모리(1100)에 프로그램된다. 랜덤 액세스 메모리(1230)에 저장된 인코딩된 데이터 및 플래그 데이터는 메모리 인터페이스(1250)를 통해 불휘발성 메모리(1100)로 전송될 수 있다. 불휘발성 메모리(1100)는 컨트롤러(1200)의 제어에 따라, 수신된 데이터를 읽혀진 데이터가 저장된 저장 영역에 프로그램할 수 있다.
도 6a는 본 발명의 제 1 실시 예에 따라 인코딩을 수행하고 플래그 데이터를 생성하는 방법을 보여주는 순서도이다. 도 6a를 참조하면, S210 단계에서, 프로그램 데이터가 후보 데이터로 선택된다.
S220 단계에서, 읽혀진 데이터가 후보 데이터와 비교된다. 예를 들어, 읽혀진 데이터와 후보 데이터 사이의 거리가 비교될 수 있다. 거리는 읽혀진 데이터 및 읽혀진 데이터와 비교되는 데이터 사이에서 서로 다른 값을 갖는 비트들의 수일 수 있다.
S230 단계에서, 거리가 기준값 미만인지 판별된다. 예를 들어, 읽혀진 데이터와 후보 데이터 사이의 거리가 기준값 미만인지 판별된다. 거리가 기준값 미만이면, S240 단계에서, 비교된 후보 데이터가 인코딩된 데이터로 선택되고, S280 단계가 수행된다. 거리가 기준값 미만이 아니면, S250 단계가 수행된다.
S250 단계에서, 최대 루프에 도달했는지 판별된다. 최대 루프 수는 데이터 인코딩 및 디코딩부(1260)에 설정될 수 있다. 최대 루프 수는 컨트롤러(1200)에 미리 저장될 수 있다. 최대 루프 수는 컨트롤러(1200)의 모드 레지스터를 통해 설정될 수 있다.
최대 루프에 도달하지 않았으면, S260 단계에서, 이전 후보 데이터를 1비트 시프트하여 새로운 후보 데이터가 생성된다. 이후에, S220 단계가 다시 수행된다.
최대 루프에 도달했으면, S270 단계에서, 읽혀진 데이터와 가장 적은 거리를 갖는 데이터가 인코딩된 데이터로 선택된다.
S280 단계에서, 선택된 데이터를 가리키는 플래그 데이터가 생성된다. 예를 들어, 플래그 데이터는 후보 데이터 및 프로그램 데이터 중 인코딩된 데이터로 선택된 데이터에 대한 정보를 포함할 수 있다. 예를 들어, 플래그 데이터는 선택된 데이터가 프로그램 데이터로부터 시프트된 비트 수에 대한 정보를 포함할 수 있다.
도 6b는 도 6a의 인코딩 방법의 응용 예를 보여주는 순서도이다. 도 6b를 참조하면, S260 단계에서 읽혀진 데이터와 프로그램 데이터 사이의 거리가 계산된다.
S270 단계에서, 프로그램 데이터와 읽혀진 데이터 사이의 거리가 기준값과 비교된다. 프로그램 데이터와 읽혀진 데이터 사이의 거리가 기준값보다 크지 않으면, S280 단계에서 프로그램 데이터가 인코딩된 데이터로 선택된다. 프로그램 데이터와 읽혀진 데이터 사이의 거리가 기준값보다 크면, S290 단계에서, 도 6a를 참조하여 설명된 인코딩 방법이 수행된다.
즉, 도 6a의 인코딩 방법은 프로그램 데이터와 읽혀진 데이터 사이의 거리가 기준값보다 큰 경우에 수행될 수 있다.
도 7a는 도 6의 인코딩 방법이 적용된 예를 보여준다. 예시적으로, 최대 루프가 3인 예가 도 7a에 도시된다. 도 7a에서, 차이(difference)는 읽혀진 데이터와 프로그램 데이터 및 후보 데이터 사이의 차이를 가리킨다. 예를 들어, 특정 위치의 읽혀진 데이터의 비트와 프로그램 데이터 또는 후보 데이터의 비트가 동일한 비트인 경우, 해당 위치의 차이 비트는 '0'일 수 있다. 특정 위치의 읽혀진 데이터의 비트와 프로그램 데이터 또는 후보 데이터의 비트가 서로 다른 비트인 경우, 해당 위치의 차이 비트는 '1'일 수 있다.
도 1 및 도 7a를 참조하면, 프로그램 데이터가 1비트 시프트되어 제 1 후보 데이터가 생성된다. 예를 들어, 프로그램 데이터는 좌측으로 시프트될 수 있다. 프로그램 데이터가 2비트 시프트되어(또는 제 1 후보 데이터가 1비트 시프트되어) 제 2 후보 데이터가 생성된다. 프로그램 데이터가 3비트 시프트되어(또는 제 2 후보 데이터가 1비트 시프트되어) 제 3 후보 데이터가 생성된다.
프로그램 데이터와 읽혀진 데이터 사이의 거리는 6이다. 프로그램 데이터가 인코딩된 데이터로 선택되었음을 가리키는 플래그 데이터는 '00'일 수 있다. 제 1 후보 데이터와 읽혀진 데이터 사이의 거리는 6이다. 제 1 후보 데이터가 인코딩된 데이터로 선택되었음을 가리키는 플래그 데이터는 '01'일 수 있다. 제 2 후보 데이터와 읽혀진 데이터 사이의 거리는 4이다. 제 2 후보 데이터가 인코딩된 데이터로 선택되었음을 가리키는 플래그 데이터는 '10'일 수 있다. 제 3 후보 데이터와 읽혀진 데이터 사이의 거리는 4이다. 제 3 후보 데이터가 인코딩된 데이터로 선택되었음을 가리키는 플래그 데이터는 '11'일 수 있다.
읽혀진 데이터와 가장 적은 거리를 갖는 데이터, 즉 제 2 및 제 3 후보 데이터 중 하나가 인코딩된 데이터로 선택될 수 있다. 제 2 후보 데이터가 선택되면, 플래그 데이터는 '10'으로 생성될 수 있다. 제 3 후보 데이터가 선택되면, 플래그 데이터는 '11'로 생성될 수 있다.
제 2 또는 제 3 후보 데이터와 읽혀진 데이터 사이의 거리는 프로그램 데이터와 읽혀진 데이터 사이의 거리보다 적다. 프로그램 데이터가 불휘발성 메모리(1100)에 프로그램될 때 6 비트가 변경된다. 즉, 6 개의 메모리 셀들의 데이터가 변환될 수 있다. 반면, 제 2 또는 제 3 후보 데이터가 불휘발성 메모리(1100)에 프로그램될 때 4 비트가 변경된다. 즉, 4개의 메모리 셀들의 데이터가 변환될 수 있다.
데이터가 변환되는 메모리 셀들의 수가 감소하면, 프로그램 시의 소비 전력이 감소된다. 따라서, 본 발명의 실시 예에 따르면, 메모리 시스템(1000)의 소비 전력이 감소된다. 소비 전력이 감소되면, 메모리 시스템(1000)이 지원하는 전원 용량이 감소될 수 있다. 따라서, 메모리 시스템(1000)의 사이즈 및 복잡도가 감소될 수 있다.
도 7b는 도 6의 인코딩 방법이 적용된 다른 예를 보여준다. 예시적으로, 최대 루프가 3인 예가 도 7b에 도시된다. 도 7a와 비교하면, 읽혀진 데이터, 프로그램 데이터, 그리고 제 1 내지 제 3 후보 데이터는 바이트 단위로 비교되고, 시프트된다. 즉, 본 발명의 실시 예에 따른 인코딩 방법은 비트 단위 뿐 아니라 바이트 단위로도 수행될 수 있다.
도 7c는 2비트 플래그 데이터를 사용하여 도 6의 인코딩 방법을 적용한 시뮬레이션 결과를 보여준다. 도 7d는 4비트 플래그 데이터를 사용하여 도 6의 인코딩 방법을 적용한 시뮬레이션 결과를 보여준다. 예시적으로, 도 7c 및 도 7d는 랜덤 데이터 패턴에 기반한 시뮬레이션 결과를 보여준다.
도 1, 도 7c 및 도 7d를 참조하면, 순환 시프트 인코딩이 수행되는 프로그램 데이터의 길이(N)에 따라, 프로그램 데이터가 프로그램될 때와 인코딩된 데이터가 프로그램될 때에 변경되는 비트들의 수가 각각 도시된다.
도 7c 및 도 7d에 도시된 바와 같이, 프로그램 데이터가 불휘발성 메모리(1100)에 프로그램될 때보다 인코딩된 데이터가 프로그램될 때에, 변환되는 비트들의 수가 감소한다. 따라서, 본 발명의 실시 예에 따른 인코딩 방법(또는 프로그램 방법)이 적용되면, 메모리 시스템(1000)의 소비 전력이 감소한다.
도 8은 본 발명의 제 2 실시 예에 따라 인코딩을 수행하고 플래그 데이터를 생성하는 방법을 보여주는 순서도이다. 도 8에 도시된 인코딩 방법은 차분 인코딩일 수 있다. 도 8을 참조하면, S310 단계에서, 후보 데이터의 첫 번째 비트가 프로그램 데이터의 첫 번째 비트와 동일하게 생성된다. 예를 들어, 프로그램 데이터의 첫 번째 비트가 '0'이면, 후보 데이터의 첫 번째 비트는 '0'으로 생성된다. 프로그램 데이터의 첫 번째 비트가 '1'이면, 후보 데이터의 첫 번째 비트는 '1'로 생성된다.
S320 단계에서, 프로그램 데이터의 다음 비트가 선택된다.
S330 단계에서, 선택된 비트가 이전 비트와 동일한지 판별된다. 예를 들어, 프로그램 데이터의 선택된 비트가 프로그램 데이터의 이전 비트와 동일한 비트인지 판별된다. 프로그램 데이터의 선택된 비트가 '1'이고, 프로그램 데이터의 이전 비트가 '1'이면, 동일한 비트로 판별된다. 프로그램 데이터의 선택된 비트가 '0'이고, 프로그램 데이터의 이전 비트가 '0'이면, 동일한 비트로 판별된다. 프로그램 데이터의 선택된 비트가 '1'이고, 프로그램 데이터의 이전 비트가 '0'이면, 동일하지 않은 비트로 판별된다. 프로그램 데이터의 선택된 비트가 '0'이고, 프로그램 데이터의 이전 비트가 '1'이면, 동일하지 않은 비트로 판별된다.
선택된 비트가 동일한 비트로 판별되면, S341 단계에서, 후보 데이터의 비트가 로직 로우(예를 들어, '0')로 생성된다. 선택된 비트가 동일하지 않은 비트로 판별되면, S343 단계에서, 후보 데이터의 비트가 로직 하이(예를 들어, '1')로 선택된다. 예를 들어, 프로그램 데이터의 선택된 비트의 위치와 동일한 위치에 존재하는 후보 데이터의 비트가 생성될 수 있다.
예시적으로, 선택된 비트가 동일한 비트로 판별되면 후보 데이터의 비트가 로직 하이(예를 들어, '1')로 생성되고, 선택된 비트가 동일하지 않은 비트로 판별되면 후보 데이터의 비트가 로직 로우(예를 들어, '0')로 선택될 수 있다.
S350 단계에서, 선택된 비트가 마지막 비트인지 판별된다. 예를 들어, 프로그램 데이터의 선택된 비트가 프로그램 데이터의 마지막 비트인지 판별될 수 있다. 선택된 비트가 마지막 비트가 아니면, S320 단계가 다시 수행된다.
선택된 비트가 마지막 비트이면, S360 단계 내지 S380 단계에서, 인코딩된 데이터가 선택되고, 플래그 데이터가 생성된다. S360 단계 내지 S380 단계는 도 6의 S230 단계 내지 S250 단계와 동일한 방법으로 수행된다. 따라서, S360 단계 내지 S380 단계의 상세한 설명은 생략된다.
도 9는 도 8의 인코딩 방법이 적용된 예를 보여준다. 도 9를 참조하면, 프로그램 데이터의 첫 번째 비트가 '1'이므로, 후보 데이터의 첫 번째 비트는 '1'로 생성된다. 프로그램 데이터의 두 번째 비트는 '0'이며, 첫 번째 비트와 동일하지 않다. 따라서, 후보 데이터의 두 번째 비트는 '1'로 생성된다. 마찬가지로, 프로그램 데이터의 연속하는 두 개의 비트들이 비교되고, 비교 결과에 따라 후보 데이터가 생성된다.
프로그램 데이터가 인코딩된 데이터로 선택되었음을 가리키는 플래그 데이터는 '0'일 수 있다. 후보 데이터가 인코딩된 데이터로 선택되었음을 가리키는 플래그 데이터는 '1'일 수 있다.
프로그램 데이터와 읽혀진 데이터 사이의 거리는 6이다. 후보 데이터와 읽혀진 데이터 사이의 거리는 1이다. 따라서, 후보 데이터가 선택되고, 플래그 데이터가 '1'로 생성될 수 있다.
도 10은 본 발명의 제 3 실시 예에 따라 인코딩을 수행하고 플래그 데이터를 생성하는 방법을 보여주는 순서도이다. 도 10에 도시된 인코딩 방법은 바이너리 마스크 인코딩일 수 있다. 도 1 및 도 10을 참조하면, S410 단계에서, 미리 설정된 데이터가 준비된다. 미리 설정된 데이터는 컨트롤러(1200)에 미리 저장될 수 있다. 미리 설정된 데이터는 컨트롤러(1000)의 모드 레지스터를 통해 설정될 수 있다. 컨트롤러(1200)는 복수의 데이터를 미리 저장하고, 미리 저장된 복수의 데이터 중 하나를 미리 설정된 데이터로 선택할 수 있다. 미리 설정된 데이터의 길이는 프로그램 데이터의 길이와 동일할 수 있다.
S420 단계에서, 프로그램 데이터와 미리 설정된 데이터의 논리 연산을 수행하여 후보 데이터가 생성된다. 예를 들어, 프로그램 데이터의 미리 설정된 데이터의 배타적 논리곱이 수행되고, 배타적 논리곱의 수행 결과가 후보 데이터로 생성될 수 있다.
S430 단계 내지 S450 단계에서, 인코딩된 데이터가 선택되고, 플래그 데이터가 생성된다. S430 단계 내지 S450 단계는 도 6의 S230 단계 내지 S250 단계와 동일한 방법으로 수행된다. 따라서, S430 단계 내지 S450 단계의 상세한 설명은 생략된다.
도 11은 도 10의 인코딩 방법이 적용된 예를 보여준다. 도 11을 참조하면, 프로그램 데이터와 미리 설정된 데이터의 배타적 논리곱의 결과가 후보 데이터로 생성된다. 프로그램 데이터가 인코딩된 데이터로 선택되었음을 가리키는 플래그 데이터는 '0'일 수 있다. 후보 데이터가 인코딩된 데이터로 선택되었음을 가리키는 플래그 데이터는 '1'일 수 있다.
프로그램 데이터와 읽혀진 데이터 사이의 거리는 6이다. 후보 데이터와 읽혀진 데이터 사이의 거리는 4이다. 따라서, 후보 데이터가 인코딩된 데이터로 선택되고, 플래그 데이터가 '1'로 생성될 수 있다.
예시적으로, 미리 설정된 데이터는 복수의 데이터 셋 중 선택될 수 있다. 이때, 플래그 데이터는 복수의 데이터 셋 중 어느 데이터가 미리 설정된 데이터로 선택되었는지에 대한 정보를 더 포함할 수 있다.
도 12는 본 발명의 제 4 실시 예에 따라 인코딩을 수행하고 플래그 데이터를 생성하는 방법을 보여주는 순서도이다. 도 12에 도시된 인코딩 방법은 비트 반전 인코딩일 수 있다. 도 12를 참조하면, S510 단계에서, 프로그램 데이터를 반전하여 후보 데이터가 생성된다.
S520 단계 내지 S540 단계에서, 인코딩된 데이터가 선택되고, 플래그 데이터가 생성된다. S520 단계 내지 S540 단계는 도 6의 S230 단계 내지 S250 단계와 동일한 방법으로 수행된다. 따라서, S520 단계 내지 S540 단계의 상세한 설명은 생략된다.
도 13a는 도 12의 인코딩 방법이 적용된 제 1 예를 보여준다. 도 13a를 참조하면, 프로그램 데이터를 반전하여 후보 데이터가 생성된다. 프로그램 데이터가 인코딩된 데이터로 선택되었음을 가리키는 플래그 데이터는 '0'일 수 있다. 후보 데이터가 인코딩된 데이터로 선택되었음을 가리키는 플래그 데이터는 '1'일 수 있다.
프로그램 데이터와 읽혀진 데이터 사이의 거리는 6이다. 후보 데이터와 읽혀진 데이터 사이의 거리는 2이다. 따라서, 후보 데이터가 인코딩된 데이터로 선택되고, 플래그 데이터가 '1'로 생성될 수 있다.
도 13b는 도 12의 인코딩 방법의 변형 예를 보여준다. 예시적으로, 프로그램 데이터가 복수의 부분들로 분할되고, 분할된 부분들 각각이 선택적으로 반전되는 예가 도 13b에 도시된다. 예시적으로, 프로그램 데이터는 8비트이고, 프로그램 데이터는 두 개의 부분들로 분할될 수 있다.
프로그램 데이터의 첫 번째 부분이 반전되어 제 1 후보 데이터가 생성될 수 있다. 프로그램 데이터의 두 번째 부분이 반전되어 제 2 후보 데이터가 생성될 수 있다. 프로그램 데이터의 첫 번째 및 두 번째 부분이 반전되어 제 3 후보 데이터가 생성될 수 있다.
프로그램 데이터가 선택되었음을 가리키는 플래그 데이터는 '00'일 수 있다. 제 1 후보 데이터가 선택되었음을 가리키는 플래그 데이터는 '01'일 수 있다. 제 2 후보 데이터가 선택되었음을 가리키는 플래그 데이터는 '10'일 수 있다. 제 3 후보 데이터가 선택되었음을 가리키는 플래그 데이터는 '11'일 수 있다.
프로그램 데이터와 읽혀진 데이터 사이의 거리는 6이다. 제 1 후보 데이터와 읽혀진 데이터 사이의 거리는 6이다. 제 2 후보 데이터와 읽혀진 데이터 사이의 거리는 2이다. 제 3 후보 데이터와 읽혀진 데이터 사이의 거리는 2이다. 따라서, 제 2 및 제 3 후보 데이터 중 하나가 인코딩된 데이터로 선택되고, 플래그 데이터는 '10' 또는 '11'로 생성될 수 있다.
도 14는 본 발명의 제 2 실시 예에 따른 프로그램 방법을 보여주는 순서도이다. 도 1 및 도 14를 참조하면, S610 단계에서, 프로그램 데이터가 수신되고, S620 단계에서 프로그램 데이터에 대응하는 데이터가 읽혀진다. S610 단계 및 S620 단계는 도 5의 S110 단계 및 S120 단계와 동일한 방법으로 수행될 수 있다.
S630 단계에서, 복수의 인코딩 스킴들 중 하나의 인코딩 스킴이 선택되고, 선택된 인코딩 스킴을 이용하여 프로그램 데이터가 인코딩되고, 인코딩 정보를 포함하는 플래그 데이터가 생성된다.
S640 단계에서, 인코딩된 데이터 및 플래그 데이터가 불휘발성 메모리(1100)에 프로그램된다.
예시적으로, 복수의 인코딩 스킴들은 데이터 인코딩 및 디코딩부(1260)에 저장되고, 인코딩 스킴의 선택은 데이터 인코딩 및 디코딩부(1260)에 의해 수행될 수 있다.
도 15는 본 발명의 제 1 실시 예에 따라 인코딩 스킴을 선택하고, 인코딩을 수행하고, 플래그 데이터를 생성하는 방법을 보여주는 순서도이다. 도 15를 참조하면, S710 단계에서, 복수의 인코딩 스킴들의 후보 데이터와 읽혀진 데이터 사이의 거리가 예측된다. 거리의 예측은 거리에 영향을 미치는 요소들(이하에서, 거리 요소들이라 부르기로 함)을 계산함으로써 수행될 수 있다. 거리의 예측은 직접적으로 예상 거리를 계산하는 동작을 포함할 수 있다. 거리의 예측은 거리 요소들을 계산하는 동작을 포함할 수 있다. 거리의 예측은 본 발명의 기술적 사상을 표현하는 일 예이며, 본 발명의 기술적 사상은 직접적으로 거리를 예측하는 것으로 한정되지 않는다.
S720 단계에서, 예측 결과에 따라, 복수의 인코딩 스킴들 중 하나의 인코딩 스킴이 선택된다. 예를 들어, 읽혀진 데이터와 가장 적은 거리를 갖는 후보 데이터를 생성하는 것으로 예측되는 인코딩 스킴이 선택될 수 있다.
S730 단계에서, 선택된 인코딩 스킴을 이용하여 프로그램 데이터가 인코딩된다.
S740 단계에서, 선택 정보 및 인코딩 정보를 포함하는 플래그 데이터가 생성된다. 선택 정보는 복수의 인코딩 스킴들 중 어느 인코딩 스킴이 선택되었는지에 대한 정보를 포함할 수 있다.
도 16은 후보 데이터의 읽혀진 데이터로부터의 거리를 예측하고, 예측 결과에 따라 인코딩 스킴을 선택하는 일 예를 보여주는 순서도이다. 도 1 및 도 16을 참조하면, S711 단계에서, 읽혀진 데이터와 프로그램 데이터 사이의 변환 비트들 및 동일 비트들이 카운트된다. 변환 비트들은 읽혀진 데이터 및 프로그램 데이터의 동일한 위치의 비트들이 서로 다른 비트들을 가리킨다. 동일 비트들은 읽혀진 데이터 및 프로그램 데이터의 동일한 위치의 비트들이 동일한 비트들을 가리킨다. 이 단계는 후보 데이터의 읽혀진 데이터로부터의 거리를 예측하는 동작(도 15의 S710 단계)에 대응할 수 있다.
예시적으로, 읽혀진 데이터와 프로그램 데이터에 기반하여 계산된 변환 비트들 및 동일 비트들의 차이가 문턱값보다 작으면, 순환 시프트 인코딩 스킴에 따라 생성되는 후보 데이터와 읽혀진 데이터 사이의 거리가 비트 반전 인코딩 스킴에 따라 생성되는 후보 데이터와 읽혀진 데이터 사이의 거리보다 적은 것으로 예측될 수 있다. 변환 비트들 및 동일 비트들의 차이가 문턱값보다 작지 않으면, 순환 시프트 인코딩 스킴에 따라 생성되는 후보 데이터와 읽혀진 데이터 사이의 거리가 비트 반전 인코딩 스킴에 따라 생성되는 후보 데이터와 읽혀진 데이터 사이의 거리보다 큰 것으로 예측될 수 있다.
S721 단계에서, 변환 비트들의 수와 동일 비트들의 차이가 문턱값보다 작은지 판별된다. 차이가 문턱값보다 작으면, S723 단계에서 순환 시프트 인코딩 스킴이 선택될 수 있다. 차이가 문턱값보다 작지 않으면, S725 단계에서, 비트 반전 인코딩 스킴이 선택될 수 있다.
문턱값은 컨트롤러(1200)에 미리 저장된 값일 수 있다. 문턱값은 컨트롤러(1200)의 모드 레지스터를 통해 설정되는 값일 수 있다. 문턱값은 프로그램 데이터의 전체 길이의 절반으로 설정될 수 있다.
S721 단계 내지 S725 단계는 예측 결과에 따라 인코딩 스킴을 선택하는 동작(도 15의 S720 단계)에 대응할 수 있다.
예시적으로, 순환 시프트 인코딩 스킴과 비트 반전 인코딩 스킴을 포함하는 데이터 인코딩 및 디코딩부(1260)가 변환 비트들 및 동일 비트들의 수를 이용하여 인코딩 스킴을 선택하는 예가 설명되었다. 그러나, 후보 데이터의 읽혀진 데이터로부터의 거리를 예측하고, 예측 결과에 따라 인코딩 스킴을 선택하는 방법은 도 16을 참조하여 설명된 예에 한정되지 않는다.
데이터 인코딩 및 디코딩부(1260)는 순환 시프트 인코딩 스킴, 차분 인코딩 스킴, 바이너리 마스크 인코딩 스킴, 비트 반전 인코딩 스킴 등을 포함하는 다양한 인코딩 스킴들 중 적어도 두 개의 인코딩 스킴들을 포함할 수 있다. 데이터 인코딩 및 디코딩부(1260)는 변환 비트들 및 동일 비트들의 수, 프로그램 데이터의 비트들이 천이하는 횟수, 프로그램 데이터와 읽혀진 데이터의 상호 상관도, 바이너리 마스크 인코딩을 위한 미리 설정된 데이터와 프로그램 데이터의 상호 상관도, 프로그램 데이터의 '1' 또는 '0'의 수 등을 포함하는 다양한 거리 요소들의 계산 결과따라 인코딩 스킴을 선택할 수 있다.
도 17은 본 발명의 제 2 실시 예에 따라 인코딩 스킴을 선택하고, 인코딩을 수행하고, 플래그 데이터를 생성하는 방법을 보여주는 순서도이다. 도 17을 참조하면, S810 단계 및 S820 단계에서, 예측 결과에 따라 복수의 인코딩 스킴들 중 하나의 인코딩 스킴이 선택된다. S810 단계 및 S820 단계는 도 15의 S710 단계 및 S720 단계와 동일한 방법으로 수행될 수 있다.
S830 단계에서, 선택된 인코딩 스킴을 이용하여 프로그램 데이터가 인코딩된다.
S840 단계에서, 인코딩된 데이터와 읽혀진 데이터 사이의 거리가 문턱값보다 작은지 판별된다. 인코딩된 데이터와 읽혀진 데이터 사이의 거리가 문턱값보다 크면, S850 단계에서, 복수의 인코딩 스킴들 중 다음 인코딩 스킴이 선택된다. 예를 들어, 선택된 인코딩 스킴 다음으로 가까운 거리를 갖는 후보 데이터를 생성하는 것으로 예측된 인코딩 스킴이 선택될 수 있다. 이후에, S830 단계가 다시 수행된다.
인코딩된 데이터와 읽혀진 데이터 사이의 거리가 문턱값보다 작으면, S860 단계에서, 선택 정보 및 인코딩 정보를 포함하는 플래그 정보가 생성된다.
즉, 예측 결과에 따라 인코딩 스킴이 선택되어도, 선택된 인코딩 스킴의 인코딩 결과가 특정 조건(예를 들어, 문턱값)을 만족하지 않으면, 다른 인코딩 스킴이 선택될 수 있다.
예시적으로, 문턱값은 프로그램 데이터와 읽혀진 데이터 사이의 거리에 대한 비율로 설정될 수 있다. 문턱값은 프로그램 데이터의 전체 비트들의 수에 대한 비율로 설정될 수 있다.
도 18은 도 17은 본 발명의 일 실시 예에 따라 인코딩 스킴을 선택하고, 인코딩을 수행하고, 플래그 데이터를 생성하는 방법을 보여주는 순서도이다. 도 18을 참조하면, S910 단계에서, 복수의 인코딩 스킴들 중 첫 번째 인코딩 스킴이 선택된다.
S920 단계에서, 선택된 인코딩 스킴을 이용하여 프로그램 데이터를 인코딩하여, 후보 데이터가 생성된다.
S930 단계에서, 거리가 기준값 미만인지 판별된다. 예를 들어, 읽혀진 데이터와 후보 데이터 사이의 거리가 기준값 미만인지 판별된다. 거리가 기준값 미만이면, S940 단계에서, 비교된 후보 데이터가 인코딩된 데이터로 선택되고, S980 단계가 수행된다. 거리가 기준값 미만이 아니면, S950 단계가 수행된다.
S930 단계에서, 선택된 인코딩 스킴이 마지막 인코딩 스킴인지 판별된다. 선택된 인코딩 스킴이 마지막 인코딩 스킴이 아니면, S960 단계에서, 복수의 인코딩 스킴들 중 다음 인코딩 스킴이 선택되고, S920 단계가 다시 수행된다. 선택된 인코딩 스킴이 마지막 인코딩 스킴이면, S970 단계가 수행된다.
S970 단계에서, 읽혀진 데이터와 가장 적은 거리를 갖는 데이터가 인코딩된 데이터로 선택된다.
S980 단계에서, 선택 정보 및 인코딩 정보를 포함하는 플래그 데이터가 생성된다.
즉, 복수의 인코딩 스킴들을 이용하여 프로그램 데이터가 순차적으로 인코딩되고, 인코딩 결과들 중 가장 적은 거리를 갖는 데이터가 인코딩된 데이터로 선택될 수 있다.
도 19는 본 발명의 일 실시 예에 따른 프로그램 방법을 보여주는 순서도이다. 도 1 및 도 19를 참조하면, S1010 단계에서, 프로그램 데이터가 수신되고, S1020 단계에서 프로그램 데이터에 대응하는 데이터가 불휘발성 메모리(1100)로부터 읽혀진다. S1010 단계 및 S1020 단계는 도 5의 S110 단계 및 S120 단계와 동일한 방법으로 수행될 수 있다.
S1030 단계에서, 복수의 인코딩 스킴들 중 둘 또는 그 이상의 인코딩 스킴들이 선택되고, 선택된 인코딩 스킴들을 이용하여 프로그램 데이터가 인코딩되고, 그리고 인코딩 정보 및 선택 정보를 포함하는 플래그 데이터가 생성된다.
예시적으로, 비트 반전 인코딩 스킴 및 순환 시프트 인코딩 스킴이 선택될 수 있다. 이때, 프로그램 데이터는 우선 비트 반전 인코딩 스킴에 따라 1차 인코딩될 수 있다. 이후에, 1차 인코딩된 데이터는 순환 시프트 인코딩 스킴에 따라 2차 인코딩될 수 있다. 비트 반전 인코딩 스킴 및 순환 시프트 인코딩 스킴의 예를 들어 이 실시 예가 설명되다, 이 실시 예는 비트 반전 인코딩 스킴 및 순환 시프트 인코딩 스킴으로 한정되지 않는다.
S1040 단계에서, 인코딩된 데이터 및 플래그 데이터가 불휘발성 메모리(1100)에 프로그램된다.
예시적으로, 데이터 인코딩 및 디코딩부(1260)는 둘 또는 그 이상의 인코딩 스킴들 및 이들의 조합을 선택할 수 있다. 도 15 내지 도 17을 참조하여 설명된 바와 같이, 데이터 인코딩 및 디코딩부(1260)는 예측 결과(또는 거리 요소들의 계산 결과)에 따라 인코딩 스킴들을 선택할 수 있다. 도 18을 참조하여 설명된 바와 같이, 데이터 인코딩 및 디코딩부(1260)는 복수의 인코딩 스킴들을 순차적으로 선택 및 조합하여 인코딩을 수행하고, 인코딩 결과들에 따라 인코딩된 데이터를 선택할 수 있다.
예시적으로, 데이터 인코딩 및 디코딩부(1260)가 순환 시프트 인코딩 스킴 및 비트 반전 인코딩 스킴을 선택할 때, 프로그램 데이터, 비트 반전 인코딩된 데이터, 1비트 순환 시프트 인코딩된 데이터, 2비트 순환 시프트 인코딩된 데이터, 3비트 순환 시프트 인코딩된 데이터, 1비트 순환 시프트 및 비트 반전 인코딩된 데이터, 2비트 순환 시프트 및 비트 반전 인코딩된 데이터, 그리고 3비트 순환 시프트 및 비트 반전 인코딩된 데이터 중 하나를 인코딩된 데이터로 선택할 수 있다.
도 20은 데이터 인코딩 및 디코딩부(1260)가 프로그램 데이터를 분할하여 인코딩하는 예를 보여준다. 도 20을 참조하면, 데이터 인코딩 및 디코딩부(1260)는 프로그램 데이터를 복수의 부분들로 분할하여 인코딩할 수 있다.
예를 들어, 데이터 인코딩 및 디코딩부(1260)는 프로그램 데이터의 부분들 각각에 대해 동일한 인코딩 스킴을 적용할 수 있다. 프로그램 데이터의 부분들 각각에 대해, 순환 시프트 인코딩 스킴, 차분 인코딩 스킴, 바이너리 마스크 인코딩 스킴, 비트 반전 인코딩 스킴 중 하나의 인코딩 스킴이 적용될 수 있다. 플래그 데이터는 선택된 인코딩 스킴에 대한 정보를 포함할 수 있다.
예를 들어, 데이터 인코딩 및 디코딩부(1260)는 프로그램 데이터의 부분들 각각에 대해 독립적으로 인코딩 스킴을 적용할 수 있다. 프로그램 데이터의 제 1 부분은 1비트 순환 시프트 인코딩되고, 제 2 부분은 3비트 순환 시프트 인코딩되고, 제 3 부분은 원본 데이터로 유지되고, 제 4 부분은 비트 반전 인코딩될 수 있다. 플래그 데이터는 프로그램 데이터의 각 부분에 적용된 인코딩 스킴에 대한 정보를 포함할 수 있다.
프로그램 데이터가 분할되어 인코딩되면, 인코딩된 데이터와 읽혀진 데이터 사이의 거리가 더 감소될 수 있다.
도 21은 본 발명의 제 2 실시 예에 따른 메모리 시스템(2000)을 보여주는 블록도이다. 도 21을 참조하면, 메모리 시스템(2000)은 불휘발성 메모리(2100) 및 컨트롤러(2200)를 포함한다.
불휘발성 메모리(2100)는 복수의 불휘발성 메모리 칩들을 포함한다. 복수의 불휘발성 메모리 칩들은 복수의 그룹들로 분할된다. 복수의 불휘발성 메모리 칩들의 각 그룹은 하나의 공통 채널을 통해 컨트롤러(2200)와 통신하도록 구성된다. 예시적으로, 복수의 불휘발성 메모리 칩들은 제 1 내지 제 k 채널들(CH1~CHk)을 통해 컨트롤러(2200)와 통신하는 것으로 도시되어 있다.
컨트롤러(2200)는 데이터 인코딩 및 디코딩부(2260)를 포함한다. 데이터 인코딩 및 디코딩부(2260)는 도 5 내지 도 20을 참조하여 설명된 인코딩 및 플래그 데이터의 생성을 수행할 수 있다.
도 22는 본 발명의 실시 예에 따른 컴퓨팅 시스템(3000)을 보여주는 블록도이다. 도 22를 참조하면, 컴퓨팅 시스템(3000)은 버스(3100), 프로세서(3200), 메모리 시스템(3300), 모뎀(3400), 그리고 사용자 인터페이스(3500)를 포함한다.
버스(3100)는 컴퓨팅 시스템(3000)의 구성 요소들 사이에 채널을 제공한다.
프로세서(3200)는 컴퓨팅 시스템(3000)의 제반 동작을 제어하고, 논리 연산을 수행할 수 있다.
메모리 시스템(3300)은 본 발명의 실시 예에 따른 메모리 시스템(1000 또는 2000)을 포함할 수 있다. 메모리 시스템(3300)은 컴퓨팅 시스템(3000)의 동작 메모리 또는 스토리지로 제공될 수 있다. 동작 메모리는 프로세서(3200)가 컴퓨팅 시스템(3000)을 제어하기 위하여 사용하는 저장 공간일 수 있다. 스토리지는 컴퓨팅 시스템(3000)이 데이터의 장기적인 보존을 위하여 사용하는 저장 공간일 수 있다.
메모리 시스템(3300)이 동작 메모리로 제공될 때, 컴퓨팅 시스템(3000)은 별도의 스토리지를 더 포함할 수 있다. 메모리 시스템(3300)이 스토리지로 제공될 때, 컴퓨팅 시스템(3000)은 별도의 동작 메모리를 더 포함할 수 있다.
모뎀(3400)은 외부와 유선 또는 무선 통신을 수행할 수 있다.
사용자 인터페이스(3500)는 카메라, 키보드, 마우스, 마이크, 터치 패드, 터치 패널, 버튼, 센서 등과 같은 사용자 입력 인터페이스, 디스플레이, 스피커, 램프, 모터 등과 같은 사용자 출력 인터페이스를 포함할 수 있다.
컴퓨팅 시스템(3000)은 스마트폰, 스마트 패드 등과 같은 모바일 멀티미디어 장치, 또는 스마트 텔레비전, 스마트 모니터, 컴퓨터, 노트북 컴퓨터 등과 같은 멀티미디어 장치를 형성할 수 있다.
본 발명의 상세한 설명에서는 구체적인 실시 예에 관하여 설명하였으나, 본 발명의 범위와 기술적 사상에서 벗어나지 않는 한도 내에서 여러 가지 변형이 가능하다. 그러므로 본 발명의 범위는 상술한 실시 예에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 한다.
1000, 2000; 메모리 시스템
1100, 2100; 불휘발성 메모리 1200, 2200; 컨트롤러
1210; 버스 1220; 프로세서
1230; 랜덤 액세스 메모리 1240; 호스트 인터페이스
1250; 메모리 인터페이스
1260, 2260; 데이터 인코딩 및 디코딩부
3000; 컴퓨팅 시스템
3100; 버스 3200; 프로세서
3300; 메모리 시스템 3400; 모뎀
3500; 사용자 인터페이스

Claims (23)

  1. 메모리에 데이터를 프로그램하는 프로그램 방법에 있어서:
    프로그램 데이터를 수신하는 단계;
    상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들에 저장된 데이터를 읽는 단계;
    상기 프로그램 데이터 및 상기 읽혀진 데이터에 기반하여 복수의 인코딩 스킴들 중 선택된 적어도 하나의 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하고, 그리고 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계; 그리고
    상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함하는 프로그램 방법.
  2. 제 1 항에 있어서,
    상기 선택된 적어도 하나의 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하고, 그리고 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계는,
    상기 복수의 인코딩 스킴들 각각의 인코딩 결과를 예측하는 단계; 그리고
    상기 예측 결과에 따라 상기 복수의 인코딩 스킴들 중 적어도 하나의 인코딩 스킴을 선택하는 단계를 포함하는 프로그램 방법.
  3. 제 2 항에 있어서,
    상기 복수의 인코딩 스킴들 각각의 인코딩 결과를 예측하는 단계는,
    상기 읽혀진 데이터와 프로그램 데이터 사이의 동일한 비트들 및 변환 비트들을 각각 카운트하는 단계를 포함하는 프로그램 방법.
  4. 제 3 항에 있어서,
    상기 복수의 인코딩 스킴들은 순환 시프트 인코딩 스킴과 반전 인코딩 스킴을 포함하고,
    상기 예측 결과에 따라 적어도 하나의 인코딩 스킴을 선택하는 단계와 상기 프로그램 데이터를 인코딩하는 단계는,
    상기 변환 비트들의 수와 동일 비트들의 수의 차이가 문턱값보다 작을 때 상기 순환 시프트 인코딩 스킴을 선택하여 프로그램 데이터를 시프트하고, 상기 차이가 상기 문턱값 이상일 때 상기 반전 인코딩 스킴을 선택하여 상기 프로그램 데이터를 반전하는 단계를 포함하는 프로그램 방법.
  5. 제 2 항에 있어서,
    상기 인코딩된 데이터와 상기 읽혀진 데이터 사이의 거리가 문턱값보다 작을 때 상기 인코딩 정보를 포함하는 플래그 데이터를 생성하고, 상기 인코딩된 데이터와 상기 읽혀진 데이터 사이의 거리가 상기 문턱값 이상일 때, 상기 예측 결과에 따라 상기 복수의 인코딩 스킴들 중 다른 인코딩 스킴을 선택하고, 상기 선택된 다른 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하고, 그리고 상기 플래그 데이터를 생성하는 단계를 더 포함하는 프로그램 방법.
  6. 제 1 항에 있어서,
    상기 프로그램 데이터 및 상기 읽혀진 데이터에 기반하여 복수의 인코딩 스킴들 중 선택된 적어도 하나의 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하고, 그리고 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계는,
    상기 복수의 인코딩 스킴들을 순차적으로 선택하며, 선택된 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하여 후보 데이터를 생성하는 단계;
    상기 프로그램 데이터 및 후보 데이터들을 상기 읽혀진 데이터와 각각 비교하는 단계;
    상기 프로그램 데이터 및 후보 데이터 중 상기 읽혀진 데이터와 가장 적은 거리를 갖는 데이터를 상기 인코딩된 데이터로 선택하는 단계; 그리고
    상기 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계를 포함하는 프로그램 방법.
  7. 제 1 항에 있어서,
    상기 프로그램 데이터 및 상기 읽혀진 데이터에 기반하여 복수의 인코딩 스킴들 중 선택된 적어도 하나의 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하고, 그리고 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계는,
    둘 이상의 인코딩 스킴을 선택하고, 상기 선택된 둘 이상의 인코딩 스킴을 조합하여 상기 프로그램 데이터를 인코딩하고, 그리고 상기 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계를 포함하는 프로그램 방법.
  8. 제 1 항에 있어서,
    상기 인코딩 정보는 상기 프로그램 데이터 및 상기 적어도 하나의 인코딩 스킴에 의해 생성되는 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보를 포함하는 프로그램 방법.
  9. 제 1 항에 있어서,
    상기 복수의 인코딩 스킴들은,
    상기 프로그램 데이터를 순환 시프트하여 후보 데이터를 생성하는 순환 시프트 인코딩 스킴을 포함하고,
    상기 플래그 데이터는 상기 인코딩된 데이터가 상기 프로그램 데이터로부터 순환 시프트된 비트 수에 대한 정보를 포함하는 프로그램 방법.
  10. 제 1 항에 있어서,
    상기 복수의 인코딩 스킴들은,
    상기 프로그램 데이터의 첫 번째 비트와 동일한 첫 번째 비트를 갖고, 상기 프로그램 데이터의 비트들이 천이하는 위치에 로직 하이의 값을 갖고, 상기 프로그램 데이터의 비트들이 천이하지 않는 위치에 로직 로우의 값을 갖는 후보 데이터를 생성하는 차분 인코딩 스킴을 포함하고,
    상기 플래그 데이터는 상기 프로그램 데이터 및 상기 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보를 포함하는 프로그램 방법.
  11. 제 1 항에 있어서,
    상기 복수의 인코딩 스킴들은,
    미리 설정된 데이터와 상기 프로그램 데이터의 논리 연산을 수행하여 후보 데이터를 생성하는 바이너리 마스크 인코딩 스킴을 포함하고,
    상기 플래그 데이터는 상기 프로그램 데이터 및 상기 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보를 포함하는 프로그램 방법.
  12. 제 1 항에 있어서,
    상기 복수의 인코딩 스킴들은,
    상기 프로그램 데이터를 반전하여 후보 데이터를 생성하는 비트 반전 인코딩 스킴을 포함하고,
    상기 플래그 데이터는 상기 프로그램 데이터 및 상기 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보를 포함하는 프로그램 방법.
  13. 제 1 항에 있어서,
    상기 프로그램 데이터는 복수의 서브 데이터로 분할되고, 상기 복수의 서브 데이터 각각에 대해 상기 적어도 하나의 인코딩 스킴이 선택되는 프로그램 방법.
  14. 메모리에 데이터를 프로그램하는 프로그램 방법에 있어서:
    프로그램 데이터를 수신하는 단계;
    상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들에 저장된 데이터를 읽는 단계;
    상기 프로그램 데이터 및 읽혀진 데이터를 복수의 프로그램 데이터 그룹들 및 복수의 읽혀진 데이터 그룹들로 각각 분할하는 단계;
    상기 복수의 프로그램 데이터 그룹 각각에 대해, 상기 복수의 읽혀진 데이터 그룹들 중 대응하는 그룹에 기반하여, 복수의 인코딩 스킴들 중 선택된 적어도 하나의 인코딩 스킴을 이용하여 인코딩을 수행하고, 인코딩 결과를 조합하여 인코딩된 데이터를 생성하는 단계;
    각 프로그램 데이터 그룹의 인코딩 정보를 포함하는 플래그 데이터를 생성하는 단계; 그리고
    상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함하는 프로그램 방법.
  15. 메모리에 데이터를 프로그램하는 프로그램 방법에 있어서:
    프로그램 데이터를 수신하는 단계;
    상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들로부터 데이터를 읽는 단계;
    상기 프로그램 데이터를 후보 데이터로 선택하는 단계;
    상기 후보 데이터와 상기 읽혀진 데이터를 비교하는 단계;
    상기 비교 결과에 따라, 상기 후보 데이터와 상기 읽혀진 데이터 사이의 거리가 기준값 미만이면 상기 후보 데이터를 인코딩된 데이터로 선택하고, 상기 후보 데이터와 상기 읽혀진 데이터 사이의 거리가 상기 기준값 이상이면 상기 후보 데이터를 순환 시프트하여 다른 후보 데이터를 생성하고 상기 비교하는 단계 및 상기 비교 결과에 따라 인코딩된 데이터를 선택하거나 다른 후보 데이터를 선택하는 단계를 다시 수행하는 단계;
    상기 인코딩된 데이터가 상기 프로그램 데이터로부터 시프트된 비트 수에 대한 정보를 포함하는 플래그 데이터를 생성하는 단계; 그리고
    상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함하는 프로그램 방법.
  16. 제 15 항에 있어서,
    상기 인코딩된 데이터가 선택되지 않고 상기 다시 수행하는 단계가 미리 정해진 횟수만큼 수행되면, 상기 프로그램 데이터 및 상기 순환 시프트에 의해 생성된 후보 데이터들 중 상기 읽혀진 데이터와 가장 거리가 가까운 데이터가 상기 인코딩된 데이터로 선택되는 프로그램 방법.
  17. 메모리; 그리고
    상기 메모리를 제어하도록 구성되는 컨트롤러를 포함하고,
    상기 컨트롤러는,
    랜덤 액세스 메모리;
    외부로부터 프로그램 데이터를 수신하여 상기 랜덤 액세스 메모리에 저장하도록 구성되는 호스트 인터페이스;
    상기 메모리로부터 읽혀진 데이터를 수신하여 상기 랜덤 액세스 메모리에 저장하도록 구성되는 메모리 인터페이스;
    상기 랜덤 액세스 메모리에 저장된 상기 읽혀진 데이터에 기반하여 상기 랜덤 액세스 메모리에 저장된 상기 프로그램 데이터를 인코딩하고, 인코딩된 데이터를 상기 랜덤 액세스 메모리에 저장하도록 구성되는 데이터 인코딩부; 그리고
    상기 랜덤 액세스 메모리에 저장된 상기 인코딩된 데이터를 상기 메모리에 프로그램하도록 상기 메모리 인터페이스를 제어하는 프로세서를 포함하고,
    상기 데이터 인코딩부는 상기 읽혀진 데이터 및 상기 프로그램 데이터의 비교 결과에 따라 상기 인코딩된 데이터를 생성하도록 더 구성되는 메모리 시스템.
  18. 제 17 항에 있어서,
    상기 데이터 인코딩부는 복수의 인코딩 스킴들 중 적어도 하나의 인코딩 스킴을 선택하고, 상기 선택된 적어도 하나의 인코딩 스킴을 이용하여 상기 프로그램 데이터를 인코딩하도록 더 구성되는 메모리 시스템.
  19. 제 17 항에 있어서,
    상기 데이터 인코딩부는 상기 프로그램 데이터를 순환 시프트 인코딩하여 후보 데이터를 생성하고, 상기 프로그램 데이터 및 후보 데이터 중 상기 읽혀진 데이터와 가장 작은 거리를 갖는 데이터를 상기 인코딩된 데이터로 선택하도록 더 구성되는 메모리 시스템.
  20. 제 17 항에 있어서,
    상기 메모리는 자기 램(Magnetic Random Access Memory) 또는 상 변화 램(Phase change Random Access Memory)을 포함하는 메모리 시스템.
  21. 메모리에 데이터를 프로그램하는 프로그램 방법에 있어서:
    프로그램 데이터를 수신하는 단계;
    상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들로부터 데이터를 읽는 단계;
    상기 프로그램 데이터의 첫 번째 비트와 동일한 첫 번째 비트를 갖고, 상기 프로그램 데이터의 비트들이 천이하는 위치에 로직 하이의 값을 갖고, 상기 프로그램 데이터의 비트들이 천이하지 않는 위치에 로직 로우의 값을 갖는 후보 데이터를 생성하는 단계;
    상기 프로그램 데이터 및 후보 데이터 중 상기 읽혀진 데이터와 가장 적은 거리를 갖는 데이터를 인코딩된 데이터로 선택하는 단계;
    상기 프로그램 데이터 및 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보 포함하는 플래그 데이터를 생성하는 단계; 그리고
    상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함하는 프로그램 방법.
  22. 메모리에 데이터를 프로그램하는 프로그램 방법에 있어서:
    프로그램 데이터를 수신하는 단계;
    상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들로부터 데이터를 읽는 단계;
    미리 설정된 데이터와 상기 프로그램 데이터의 논리 연산을 수행하여 후보 데이터를 생성하는 단계;
    상기 프로그램 데이터 및 후보 데이터 중 상기 읽혀진 데이터와 가장 적은 거리를 갖는 데이터를 인코딩된 데이터로 선택하는 단계;
    상기 프로그램 데이터 및 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보 포함하는 플래그 데이터를 생성하는 단계; 그리고
    상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함하는 프로그램 방법.
  23. 메모리에 데이터를 프로그램하는 프로그램 방법에 있어서:
    프로그램 데이터를 수신하는 단계;
    상기 수신된 프로그램 데이터가 프로그램될 상기 메모리의 메모리 셀들로부터 데이터를 읽는 단계;
    상기 수신된 프로그램 데이터를 제 1 및 제 2 부분들로 분할하는 단계;
    상기 수신된 프로그램 데이터의 제 1 부분을 반전하여 제 1 후보 데이터를 생성하는 단계;
    상기 수신된 프로그램 데이터의 제 2 부분을 반전하여 제 2 후보 데이터를 생성하는 단계;
    상기 프로그램 데이터와 제 1 및 제 2 후보 데이터 중 상기 읽혀진 데이터와 가장 적은 거리를 갖는 데이터를 인코딩된 데이터로 선택하는 단계;
    상기 프로그램 데이터와 제 1 및 제 2 후보 데이터 중 상기 인코딩된 데이터로 선택된 데이터에 대한 정보 포함하는 플래그 데이터를 생성하는 단계; 그리고
    상기 인코딩된 데이터 및 상기 플래그 데이터를 상기 메모리의 상기 메모리 셀들에 프로그램하는 단계를 포함하는 프로그램 방법.
KR1020120118019A 2012-10-23 2012-10-23 불휘발성 메모리 및 컨트롤러를 포함하는 메모리 시스템, 그리고 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법 KR102049281B1 (ko)

Priority Applications (6)

Application Number Priority Date Filing Date Title
KR1020120118019A KR102049281B1 (ko) 2012-10-23 2012-10-23 불휘발성 메모리 및 컨트롤러를 포함하는 메모리 시스템, 그리고 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법
US14/053,893 US9183138B2 (en) 2012-10-23 2013-10-15 Encoding program data based on data stored in memory cells to be programmed
TW102137226A TWI613658B (zh) 2012-10-23 2013-10-16 將資料程式化於非揮發性記憶體裝置中的方法、對記憶體進行程式化的方法以及記憶體系統
DE102013111549.7A DE102013111549B4 (de) 2012-10-23 2013-10-21 Kodierung von Programmdaten basierend auf in zu programmierenden Speicherzellen gespeicherten Daten
JP2013220131A JP6209051B2 (ja) 2012-10-23 2013-10-23 不揮発性メモリ及びコントローラを含むメモリシステム、そして不揮発性メモリにデータをプログラムするプログラム方法
CN201310503112.4A CN103778961B (zh) 2012-10-23 2013-10-23 基于存储在待编程存储单元中的数据来编码编程数据

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120118019A KR102049281B1 (ko) 2012-10-23 2012-10-23 불휘발성 메모리 및 컨트롤러를 포함하는 메모리 시스템, 그리고 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법

Publications (2)

Publication Number Publication Date
KR20140051687A true KR20140051687A (ko) 2014-05-02
KR102049281B1 KR102049281B1 (ko) 2019-11-27

Family

ID=50437183

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120118019A KR102049281B1 (ko) 2012-10-23 2012-10-23 불휘발성 메모리 및 컨트롤러를 포함하는 메모리 시스템, 그리고 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법

Country Status (6)

Country Link
US (1) US9183138B2 (ko)
JP (1) JP6209051B2 (ko)
KR (1) KR102049281B1 (ko)
CN (1) CN103778961B (ko)
DE (1) DE102013111549B4 (ko)
TW (1) TWI613658B (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160014860A (ko) * 2014-07-29 2016-02-12 삼성전자주식회사 불휘발성 메모리, 데이터 저장 장치, 및 데이터 저장 장치의 동작 방법
US9727401B2 (en) 2015-03-04 2017-08-08 SK Hynix Inc. Method of operating semiconductor memory device and memory system including semiconductor memory device
US12013754B2 (en) 2018-12-11 2024-06-18 Samsung Electronics Co., Ltd. Nonvolatile memory device and memory system including nonvolatile memory device

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9304703B1 (en) * 2015-04-15 2016-04-05 Symbolic Io Corporation Method and apparatus for dense hyper IO digital retention
CN105531767B (zh) 2013-06-28 2018-01-26 英特尔公司 电阻式存储器的低功率写和读操作的装置
KR102287907B1 (ko) * 2015-06-22 2021-08-10 삼성디스플레이 주식회사 유기 발광 다이오드 표시 장치의 열화 보상기
KR102467072B1 (ko) * 2017-10-26 2022-11-11 삼성전자주식회사 반복 연산 과정을 이용하여 디코딩을 수행하는 디코더 및 이를 이용한 스토리지 장치
US10514980B2 (en) * 2018-03-22 2019-12-24 Winbond Electronics Corp. Encoding method and memory storage apparatus using the same
WO2020082348A1 (en) * 2018-10-26 2020-04-30 Yangtze Memory Technologies Co., Ltd. Data processing method for memory and related data processor
CN113160870A (zh) * 2021-03-25 2021-07-23 普冉半导体(上海)股份有限公司 非易失存储器编程方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100827702B1 (ko) * 2006-11-01 2008-05-07 삼성전자주식회사 가변저항 반도체 메모리 장치
US20090237979A1 (en) * 2008-03-21 2009-09-24 Kabushiki Kaisha Toshiba Semiconductor memory device and semiconductor memory system
CN101957797A (zh) * 2009-07-17 2011-01-26 群联电子股份有限公司 闪速存储器逻辑区块管理方法及其控制电路与储存***
CN102097125A (zh) * 2010-12-07 2011-06-15 清华大学 Pcm的写操作方法

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4134637B2 (ja) 2002-08-27 2008-08-20 株式会社日立製作所 半導体装置
US8412879B2 (en) 2002-10-28 2013-04-02 Sandisk Technologies Inc. Hybrid implementation for error correction codes within a non-volatile memory system
CN1492447A (zh) * 2003-09-22 2004-04-28 中兴通讯股份有限公司 一种快闪存储设备的驱动方法
JP2005108304A (ja) 2003-09-29 2005-04-21 Toshiba Corp 半導体記憶装置及びその制御方法
US7106621B2 (en) 2004-06-30 2006-09-12 Stmicroelectronics, Inc. Random access memory array with parity bit structure
JP2006065986A (ja) 2004-08-27 2006-03-09 Fujitsu Ltd 磁気抵抗メモリおよび磁気抵抗メモリ書き込み方法
JP4217208B2 (ja) 2004-12-20 2009-01-28 パナソニック株式会社 Fifoメモリ
US7817462B2 (en) 2005-03-29 2010-10-19 Nec Corporation Magnetic random access memory
JP2008059717A (ja) 2006-09-01 2008-03-13 Kobe Univ 半導体装置
KR20080081656A (ko) 2007-03-06 2008-09-10 한국전자통신연구원 상 변화 메모리에서의 쓰기 전력 감소를 위한 선택적데이터 쓰기 장치 및 방법
KR100819061B1 (ko) 2007-03-06 2008-04-03 한국전자통신연구원 쓰기 전력 계산 및 데이터 반전 기능을 통한 상 변화메모리에서의 데이터 쓰기 장치 및 방법
US7783846B2 (en) 2007-08-09 2010-08-24 International Business Machines Corporation Method, apparatus and computer program product providing energy reduction when storing data in a memory
US20110213995A1 (en) 2007-08-09 2011-09-01 International Business Machines Corporation Method, Apparatus And Computer Program Product Providing Instruction Monitoring For Reduction Of Energy Usage
KR20090016199A (ko) 2007-08-10 2009-02-13 주식회사 하이닉스반도체 상 변화 메모리 장치 및 그 동작방법
KR101281685B1 (ko) 2007-10-04 2013-07-03 삼성전자주식회사 상변화 메모리의 데이터 기록 방법, 데이터 판독 방법, 및그 장치
US9009603B2 (en) 2007-10-24 2015-04-14 Social Communications Company Web browser interface for spatial communication environments
US8432729B2 (en) 2010-04-13 2013-04-30 Mosaid Technologies Incorporated Phase-change memory with multiple polarity bits having enhanced endurance and error tolerance
KR101678407B1 (ko) 2010-05-10 2016-11-23 삼성전자주식회사 데이터 저장 장치 및 그것의 프로그램 방법
US8488363B2 (en) 2010-05-11 2013-07-16 Qualcomm Incorporated Write energy conservation in memory

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100827702B1 (ko) * 2006-11-01 2008-05-07 삼성전자주식회사 가변저항 반도체 메모리 장치
US20090237979A1 (en) * 2008-03-21 2009-09-24 Kabushiki Kaisha Toshiba Semiconductor memory device and semiconductor memory system
US7876626B2 (en) * 2008-03-21 2011-01-25 Kabushiki Kaisha Toshiba Semiconductor memory device and semiconductor memory system
CN101957797A (zh) * 2009-07-17 2011-01-26 群联电子股份有限公司 闪速存储器逻辑区块管理方法及其控制电路与储存***
CN102097125A (zh) * 2010-12-07 2011-06-15 清华大学 Pcm的写操作方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160014860A (ko) * 2014-07-29 2016-02-12 삼성전자주식회사 불휘발성 메모리, 데이터 저장 장치, 및 데이터 저장 장치의 동작 방법
US9727401B2 (en) 2015-03-04 2017-08-08 SK Hynix Inc. Method of operating semiconductor memory device and memory system including semiconductor memory device
US12013754B2 (en) 2018-12-11 2024-06-18 Samsung Electronics Co., Ltd. Nonvolatile memory device and memory system including nonvolatile memory device

Also Published As

Publication number Publication date
JP6209051B2 (ja) 2017-10-04
US9183138B2 (en) 2015-11-10
CN103778961A (zh) 2014-05-07
KR102049281B1 (ko) 2019-11-27
TWI613658B (zh) 2018-02-01
DE102013111549B4 (de) 2024-04-18
JP2014086127A (ja) 2014-05-12
CN103778961B (zh) 2019-06-04
DE102013111549A1 (de) 2014-04-24
TW201419286A (zh) 2014-05-16
US20140115237A1 (en) 2014-04-24

Similar Documents

Publication Publication Date Title
KR102049281B1 (ko) 불휘발성 메모리 및 컨트롤러를 포함하는 메모리 시스템, 그리고 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법
TWI756261B (zh) 儲存裝置及半導體記憶體裝置
JP5503448B2 (ja) 不揮発性メモリー装置、その駆動方法、それを含むメモリーシステム
US8705279B2 (en) Nonvolatile memory device and reading method thereof
KR102131324B1 (ko) 저항성 메모리 장치 및 저항성 메모리 장치의 동작방법
US8184480B2 (en) Multi-level nonvolatile memory device with reduced number of read voltages based on a cell address and method for operating the same
JP2011165301A (ja) フラッシュメモリ装置及びその読み出し方法
KR20140020056A (ko) 불휘발성 랜덤 액세스 메모리 및 낸드 플래시 메모리를 포함하는 메모리 시스템의 동작 방법
KR20160014473A (ko) 메모리 장치, 메모리 시스템 및 메모리 장치의 동작방법
KR20150143943A (ko) 불휘발성 메모리 및 메모리 컨트롤러를 포함하는 스토리지 장치, 그리고 불휘발성 메모리 및 메모리 컨트롤러 사이의 통신을 중개하는 리타이밍 회로의 동작 방법
KR20110006963A (ko) 비휘발성 메모리 장치, 그것을 포함한 메모리 시스템, 및 그것의 프로그램 방법
KR101984796B1 (ko) 반도체 메모리 장치, 그것을 포함하는 메모리 시스템 및 그것의 동작 방법
KR20170126595A (ko) 불휘발성 메모리 장치의 독출 방법
KR20110045223A (ko) 비휘발성 메모리 장치 및 그것의 바이어스 전압 인가 방법
TW201714182A (zh) 半導體記憶體裝置及其操作方法
KR20170011645A (ko) 반도체 메모리 장치를 포함하는 메모리 시스템 및 그것의 동작 방법
KR20170115724A (ko) 전자 장치
KR20190007928A (ko) 반도체 메모리 장치 및 이의 동작 방법
US20180040353A1 (en) Semiconductor memory device and method of operating the same
KR20160124575A (ko) 불휘발성 메모리 장치 및 그것의 프로그램 방법과 독출 방법
KR20190061854A (ko) 저항성 메모리 장치를 구비한 메모리 시스템 및 그의 동작 방법
KR20190074890A (ko) 메모리 컨트롤러 및 그 동작 방법
KR20140124596A (ko) 반도체 메모리 장치 및 그것의 데이터 프로그램 방법
KR20220113651A (ko) 디스터번스를 방지하는 반도체 메모리 장치
KR20170100875A (ko) 메모리 시스템 및 이의 동작 방법

Legal Events

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