KR20190050778A - 데이터 로드 연산의 완료 이전에 사전 판독 연산을 착수하기 위한 방법 및 장치 - Google Patents

데이터 로드 연산의 완료 이전에 사전 판독 연산을 착수하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR20190050778A
KR20190050778A KR1020197006013A KR20197006013A KR20190050778A KR 20190050778 A KR20190050778 A KR 20190050778A KR 1020197006013 A KR1020197006013 A KR 1020197006013A KR 20197006013 A KR20197006013 A KR 20197006013A KR 20190050778 A KR20190050778 A KR 20190050778A
Authority
KR
South Korea
Prior art keywords
data
page
cells
programming
storage device
Prior art date
Application number
KR1020197006013A
Other languages
English (en)
Other versions
KR102562051B1 (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 인텔 코포레이션
Publication of KR20190050778A publication Critical patent/KR20190050778A/ko
Application granted granted Critical
Publication of KR102562051B1 publication Critical patent/KR102562051B1/ko

Links

Images

Classifications

    • 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/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5628Programming or writing circuits; Data input circuits
    • 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
    • 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/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • 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/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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/0662Virtualisation aspects
    • G06F3/0665Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
    • 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5642Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/04Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS
    • G11C16/0408Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS comprising cells containing floating gate transistors
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/04Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS
    • G11C16/0483Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS comprising cells having several storage transistors connected in series
    • 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/08Address circuits; Decoders; Word-line control circuits
    • 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/26Sensing or reading circuits; Data output circuits
    • 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/32Timing circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2211/00Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C2211/56Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
    • G11C2211/562Multilevel memory programming aspects
    • G11C2211/5623Concurrent multilevel programming and reading
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2211/00Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C2211/56Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
    • G11C2211/564Miscellaneous aspects
    • G11C2211/5648Multilevel memory programming, reading or erasing operations wherein the order or sequence of the operations is relevant

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Read Only Memory (AREA)

Abstract

일 실시예에서, 장치는 NAND 플래시 메모리 어레이를 포함하는 저장 디바이스를 포함하고, 저장 디바이스는, 제1 프로그래밍 패스 동안, 데이터의 제1 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하고; 제2 프로그래밍 패스 동안 프로그램될 데이터의 제2 페이지의 로딩의 완료 이전에 데이터의 제1 페이지의 판독을 착수하고; 제2 프로그래밍 패스 동안, 데이터의 제1 페이지 및 데이터의 제2 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램한다.

Description

데이터 로드 연산의 완료 이전에 사전 판독 연산을 착수하기 위한 방법 및 장치
<관련 출원(들)에 대한 상호 참조>
본 출원은 "METHOD AND APPARATUS FOR INITIATING PRE-READ OPERATION BEFORE COMPLETION OF DATA LOAD OPERATION"라는 명칭으로 2016년 9월 30일 출원된 미국 정규 특허 출원 제15/281,439호에 대한 우선권의 혜택을 주장하고, 이는 그 전부가 참조로 본 명세서에 원용된다.
<분야>
본 개시 내용은 일반적으로 컴퓨터 개발의 분야에 관한 것으로, 보다 구체적으로는, NAND 플래시 메모리에 관한 것이다.
컴퓨터 시스템은 하나 이상의 저장 디바이스에 연결되는 하나 이상의 CPU(central processing units)을 포함할 수 있다. CPU는 CPU에 연결되는 저장 디바이스들을 이용하는 운영 체제 및 다른 소프트웨어 애플리케이션들을 실행하는 프로세서를 포함할 수 있다. 소프트웨어 애플리케이션들은 저장 디바이스들에 데이터를 기입할 수 있다. 데이터는 저장 디바이스들에 의해 저장 디바이스들의 복수의 메모리 셀들(예를 들어, NAND 플래시 메모리 셀들)에 저장될 수 있다.
도 1은 특정 실시예들에 따른 컴퓨터 시스템의 컴포넌트들의 블록도를 도시한다.
도 2는 특정 실시예들에 따른 NAND 플래시 메모리 어레이의 일부분의 예시적인 도면을 도시한다.
도 3은 특정 실시예들에 따른 NAND 플래시 메모리 셀들에 대한 예시적인 인코딩 스킴들을 도시한다.
도 4는 특정 실시예들에 따른 TLC NAND 플래시 메모리 셀들의 예시적인 2개의 패스 프로그래밍 시퀀스를 도시한다.
도 5는 특정 실시예들에 따른 사전 판독 연산 및 데이터 로드 연산의 예시적인 시퀀스를 도시한다.
도 6은 특정 실시예들에 따른 예시적인 메모리 모듈을 도시한다.
도 7은 특정 실시예들에 따른 데이터 로드 연산의 완료 이전에 사전 판독 연산을 착수하기 위한 예시적인 흐름을 도시한다.
다양한 도면들에서 비슷한 참조 번호들 및 지정들은 비슷한 엘리먼트들을 표시한다.
비록 도면들이 특정 컴퓨터 시스템들을 도시하더라도, 다양한 실시예들의 개념들은 임의의 적합한 집적 회로들 및 다른 로직 디바이스들에 적용 가능하다. 본 개시 내용의 교시들이 사용될 수 있는 디바이스들의 예들은 데스크톱 컴퓨터 시스템들, 서버 컴퓨터 시스템들, 스토리지 시스템들, 핸드헬드 디바이스들, 태블릿들, 다른 얇은 노트북들, SOC(systems on a chip) 디바이스들, 및 내장된 애플리케이션들을 포함한다. 핸드헬드 디바이스들의 일부 예들은 셀룰러 폰들, 디지털 카메라들, 미디어 플레이어들, PDA들(personal digital assistants), 및 핸드헬드 PC들을 포함한다. 내장된 애플리케이션들은 마이크로컨트롤러, DSP(digital signal processor), 시스템 온 칩, NetPC(network computers), 셋-톱 박스들, 네트워크 허브들, WAN(wide area network) 스위치들, 또는 이하 교시되는 기능들 및 연산들을 수행할 수 있는 임의의 다른 시스템을 포함할 수 있다. 본 개시 내용의 다양한 실시예들은, 개인용 컴퓨팅 디바이스, 서버, 메인프레임, 클라우드 컴퓨팅 서비스 제공자 인프라스트럭처, 데이터센터, 통신 서비스 제공자 인프라스트럭처(예를 들어, Evolved Packet Core의 하나 이상의 부분들), 또는 컴퓨팅 디바이스들의 그룹을 포함하는 다른 환경과 같은, 임의의 적합한 컴퓨팅 환경에서 사용될 수 있다.
도 1은 특정 실시예들에 따른 컴퓨터 시스템(100)의 컴포넌트들의 블록도를 도시한다. 시스템(100)은 외부 I/O(input/output) 제어기(104)에 연결되는 CPU(central processing unit)(102), 복수의 저장 디바이스들(106A, 106B, 및 106C)(저장 디바이스들(106B 및 106C)은 저장 디바이스(106A)와 유사한 방식들로 수행할 수 있고/있거나 저장 디바이스(106A)의 임의의 적합한 특성을 가질 수 있음), 및 시스템 메모리 디바이스(107)를 포함한다. 연산 동안, 저장 디바이스(106A) 또는 시스템 메모리 디바이스(107)와 CPU(102) 사이에 데이터가 전송될 수 있다. 다양한 실시예들에서, 저장 디바이스(106A) 또는 시스템 메모리 디바이스(107)를 수반하는 특정 데이터 연산들(예를 들어, 소거, 프로그램, 및 판독 연산들)은 프로세서(108)에 의해 실행되는 운영 체제 또는 다른 소프트웨어 애플리케이션에 의해 관리될 수 있다.
다양한 실시예들에서, 저장 디바이스(106A)는 NAND 플래시 메모리를 포함한다(본 명세서에서 NAND 플래시 메모리를 포함하는 저장 디바이스는 NAND 플래시 저장 디바이스라고 지칭된다). 일부 실시예들에서, 저장 디바이스(106A)는 솔리드 스테이트 드라이브; 메모리 카드; USB(Universal Serial Bus) 플래시 드라이브; 또는 스마트폰, 카메라, 미디어 플레이어, 또는 다른 컴퓨팅 디바이스와 같은 디바이스 내에 통합되는 메모리일 수 있다. 일반적으로, NAND 플래시 메모리가 있는 저장 디바이스들은 메모리의 각각의 셀에 의해 저장되는 비트들의 수에 의해 분류된다. 예를 들어, SLC(single-level cell) 메모리는 각각이 1 비트의 데이터를 저장하는 셀들을 갖고, MLC(multi-level cell) 메모리는 각각이 2 비트의 데이터를 저장하는 셀들을 갖고, TLC(tri-level cell) 메모리는 각각이 3 비트의 데이터를 저장하는 셀들을 갖고, QLC(quad-level cell) 메모리는 각각이 4 비트의 데이터를 저장하는 셀들을 갖지만, 일부 메모리들은 동일한 어레이 상에서 또는 동일한 디바이스의 상이한 어레이들 상에서 다수의 인코딩 스킴들(예를 들어, MLC 및 TLC)을 이용할 수 있다.
메모리 셀들의 그룹에 대한 프로그래밍 시퀀스는 셀들의 그룹 내로의 모든 의도된 페이지들의 프로그래밍을 포함할 수 있다. 프로그래밍 시퀀스는 하나 이상의 프로그래밍 패스를 포함할 수 있다. (하나 이상의 프로그래밍 루프를 포함할 수 있는) 프로그래밍 패스는 셀들의 그룹에서의 하나 이상의 페이지를 인코딩할 수 있다(각각의 페이지는 셀에 저장되는 비트에 대응함). 프로그래밍 패스는 프로그램될 셀들에 하나 이상의 유효 프로그램 전압을 인가하는 것, 및 그에 후속하여 어느 셀들이 프로그래밍을 마무리했는지 결정하기 위해 이러한 셀들에 하나 이상의 검증 전압을 인가하는 것을 포함할 수 있다.
제1 프로그래밍 패스 동안 프로그램되는 페이지(들)의 데이터가 로드될 때, 이들은 셀들의 그룹 내에 프로그램되는 값들을 제어하는 (래치들의 하나 이상의 세트와 같은) 메모리 엘리먼트들에 저장될 수 있다. 그러나, 제2 프로그래밍 패스 이전에, 페이지 데이터가 손실될 수 있다(예를 들어, 메모리 엘리먼트들은 셀들의 다른 그룹에 기입될 하나 이상의 다른 페이지에 의해 덮어쓰기될 수 있음). 각각의 셀의 타겟 레벨은 셀 내로 프로그램될 비트들의 조합에 기초하기 때문에, 제1 프로그래밍 패스 동안 프로그램되는 페이지(들)의 데이터는 제2 프로그래밍 패스 동안 프로그램될 페이지(들)의 데이터와 조합하여 액세스되어야 한다.
다양한 실시예들에서, 제2 프로그래밍 패스가 셀들의 특정 그룹 상에서 수행되기 이전에, 제1 프로그래밍 패스에서 프로그램되는 페이지(들)가 "사전 판독(pre-read)" 연산에서 셀들로부터 판독된다. 일부 시스템들에서, 셀들의 그룹에 이미 저장되어 있는 하위 페이지(들)의 사전 판독은 이러한 셀들을 목적지로 하는 상위 페이지(들)의 데이터 모두가 호스트로부터 로드된 이후에 수행된다. 그러나, 이러한 시스템들은 프로그래밍 시퀀스에 불필요한 레이턴시를 도입한다. 본 명세서에서의 다양한 실시예들은 데이터 로드 연산의 완료 이전에 사전 판독 연산을 착수(및/또는 완료)하기 위한 시스템들 및 방법들을 제공하여, 사전 판독 연산의 적어도 일부분이 데이터 로드 연산과 병렬로 수행되고, 따라서 신호 저하를 도입하지 않고 프로그램 시간을 감소시키는 것과 같은 다양한 기술적 이점들을 제공한다.
저장 디바이스(106A)는 임의의 수의 메모리들(116)을 포함할 수 있고, 각각의 메모리(116)는 임의의 수의 메모리 모듈들(122A-D)을 포함할 수 있다. 도시되는 실시예에서, 메모리 디바이스(116)는 메모리 모듈들(122A-D)을 포함한다(본 명세서에서 메모리 모듈(122A)에 대해 참조가 이루어질 수 있는 한편, 메모리 모듈들 중 임의의 것이 메모리 모듈(122A)의 임의의 적합한 특성들을 가질 수 있음).
CPU(102)는, 마이크로프로세서, 내장된 프로세서, DSP(digital signal processor), 네트워크 프로세서, 핸드헬드 프로세서, 애플리케이션 프로세서, 코-프로세서, SOC(system on a chip), 또는 코드(예를 들어, 소프트웨어 명령어들)를 실행하는 다른 디바이스와 같은, 프로세서(108)를 포함한다. 프로세서(108)는, 도시되는 실시예에서, 비대칭 처리 엘리먼트들 또는 대칭 처리 엘리먼트들을 포함할 수 있는, 2개의 처리 엘리먼트들(도시되는 실시예에서의 코어들(114A 및 114B))을 포함한다. 그러나, 프로세서는 대칭 또는 비대칭일 수 있는 임의의 수의 처리 엘리먼트들을 포함할 수 있다.
일 실시예에서, 처리 엘리먼트는 소프트웨어 스레드를 지원하는 하드웨어 또는 로직을 지칭한다. 하드웨어 처리 엘리먼트들의 예들은, 실행 상태 또는 아키텍처 상태(architectural state)와 같은, 프로세서에 대한 상태를 보유할 수 있는, 스레드 유닛, 스레드 슬롯, 스레드, 프로세스 유닛, 컨텍스트, 컨텍스트 유닛, 논리 프로세서(logical processor), 하드웨어 스레드, 코어, 및/또는 임의의 다른 엘리먼트를 포함한다. 다시 말해서, 처리 엘리먼트는, 일 실시예에서, 소프트웨어 스레드, 운영 체제, 애플리케이션, 또는 다른 코드와 같은, 코드와 독립적으로 연관될 수 있는 임의의 하드웨어를 지칭한다. 물리 프로세서(또는 프로세서 소켓)는 통상적으로, 코어들 또는 하드웨어 스레드들과 같은, 임의의 수의 다른 처리 엘리먼트들을 잠재적으로 포함하는, 집적 회로를 지칭한다.
코어(114)는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로 상에 위치되는 로직을 지칭할 수 있고, 각각 독립적으로 유지되는 아키텍처 상태는 적어도 일부 전용 실행 리소스들과 연관된다. 하드웨어 스레드는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로 상에 위치되는 임의의 로직을 지칭할 수 있고, 독립적으로 유지되는 아키텍처 상태들은 실행 리소스들에 대한 액세스를 공유한다. 알 수 있는 바와 같이, 특정 리소스들은 공유되고 다른 리소스들은 아키텍처 상태에 전용될 때, 하드웨어 스레드와 코어의 명명법 사이의 경계가 중첩된다. 그럼에도 종종, 코어 및 하드웨어 스레드는 운영 체제에 의해 개별 논리 프로세서들로서 보여지고, 이 경우에 운영 체제는 각각의 논리 프로세서 상의 연산들을 개별적으로 스케줄링할 수 있다.
다양한 실시예들에서, 처리 엘리먼트들은 처리 엘리먼트들의 연산들을 용이하게 하는 하나 이상의 ALU(arithmetic logic units), FPU(floating point units), 캐시, 명령어 파이프라인, 인터럽트 핸들링 하드웨어, 레지스터, 또는 다른 하드웨어를 또한 포함할 수 있다.
I/O 제어기(110)는, CPU(102)와 같은, 전자 시스템으로 데이터를 전송하고/하거나 전자 시스템으로부터 데이터를 수신할 수 있는 임의의 적합한 디바이스들을 지칭할 수 있는, CPU(102)와 I/O 디바이스들 사이에서 데이터를 통신하기 위한 로직을 포함하는 통합 I/O 제어기이다. 예를 들어, I/O 디바이스는 그래픽 가속기 또는 오디오 제어기와 같은 A/V(audio/video) 디바이스 제어기; 플래시 메모리 디바이스, 자기 저장 디스크, 또는 광 저장 디스크 제어기와 같은, 데이터 저장 디바이스 제어기; 무선 송수신기; 네트워크 프로세서; 네트워크 인터페이스 제어기; 모니터, 프린터, 마우스, 키보드, 또는 스캐너와 같은 다른 입력 디바이스들에 대한 제어기; 또는 다른 적합한 디바이스를 포함할 수 있다. 특정 실시예에서, I/O 디바이스는 I/O 제어기(110)를 통해 CPU(102)에 연결되는 저장 디바이스(106A)를 포함할 수 있다.
I/O 디바이스는, PCI(peripheral component interconnect), PCIe(PCI Express), USB(Universal Serial Bus), SAS(Serial Attached SCSI), SATA(Serial ATA), FC(Fibre Channel), IEEE 802.3, IEEE 802.11, 또는 다른 현재 또는 장래 시그널링 프로토콜과 같은, 임의의 적합한 시그널링 프로토콜을 사용하여 CPU(102)의 I/O 제어기(110)와 통신할 수 있다. 특정 실시예들에서, I/O 제어기(110) 및 기반을 이루는 I/O 디바이스는 (예를 들어, www.nvmexpress.org/specifications/에서 이용 가능한 사양들 중 하나 이상에 의해 설명되는 바와 같은) NVMe(Non-Volatile Memory Express) 또는 (예를 들어, http://www.intel.com/content/www/us/en/io/serial-ata/serial-ata-ahci-spec-rev1-3-1.html에서 이용 가능한 Serial ATA AHCI: Specification, Rev. 1.3.1과 같은 하나 이상의 AHCI 사양들에 의해 설명되는 바와 같은) AHCI(Advanced Host Controller Interface)와 같은 논리 디바이스 인터페이스 사양에 따라 데이터 및 커맨드들을 통신할 수 있다. 다양한 실시예들에서, I/O 제어기에 연결되는 I/O 디바이스들은 오프-칩(off-chip) 위치될 수 있거나(즉, CPU(102)와 동일한 칩 상에 있지 않음) 또는 CPU(102)와 동일한 칩 상에 통합될 수 있다.
CPU 메모리 제어기(112)는 하나 이상의 시스템 메모리 디바이스(107)로의 그리고 그로부터의 데이터의 흐름을 제어하는 로직을 포함하는 통합 메모리 제어기이다. CPU 메모리 제어기(112)는 시스템 메모리 디바이스(107)로부터 판독하거나, 시스템 메모리 디바이스(107)에 기입하거나, 또는 시스템 메모리 디바이스(107)로부터 다른 연산들을 요청하도록 동작 가능한 로직을 포함할 수 있다. 다양한 실시예들에서, CPU 메모리 제어기(112)는 코어들(114) 및/또는 I/O 제어기(110)로부터 기입 요청들을 수신할 수 있고, 이러한 요청들에 명시되는 데이터를 시스템 메모리 디바이스(107)에, 거기에 저장하기 위해, 제공할 수 있다. CPU 메모리 제어기(112)는 또한 시스템 메모리 디바이스(107)로부터 데이터를 판독하고 판독 데이터를 I/O 제어기(110) 또는 코어(114)에 제공할 수 있다. 연산 동안, CPU 메모리 제어기(112)는 메모리로부터 데이터를 판독하거나 메모리에 데이터를 기입하기 위해 (또는 다른 연산들을 수행하기 위해) 시스템 메모리 디바이스(107)의 하나 이상의 어드레스를 포함하는 커맨드들을 발행할 수 있다. 일부 실시예들에서는, CPU 메모리 제어기(112)가 CPU(102)와 동일한 칩 상에 구현될 수 있고, 반면 다른 실시예들에서는, CPU 메모리 제어기(112)가 CPU(102)의 것과 상이한 칩 상에 구현될 수 있다. I/O 제어기(110)는 하나 이상의 저장 디바이스(106)에 대해 유사한 연산들을 수행할 수 있다.
CPU(102)는 또한 외부 I/O 제어기(104)를 통해 하나 이상의 다른 I/O 디바이스에 연결될 수 있다. 특정 실시예에서, 외부 I/O 제어기(104)는 저장 디바이스(106A)를 CPU(102)에 연결할 수 있다. 외부 I/O 제어기(104)는 하나 이상의 CPU(102)와 I/O 디바이스들 사이의 데이터의 흐름을 관리하는 로직을 포함할 수 있다. 특정 실시예들에서, 외부 I/O 제어기(104)는 CPU(102)와 함께 마더보드 상에 위치된다. 외부 I/O 제어기(104)는 포인트-투-포인트 또는 다른 인터페이스들을 사용하여 CPU(102)의 컴포넌트들과 정보를 교환할 수 있다.
시스템 메모리 디바이스(107)는, 컴퓨터 시스템(100)의 기능성을 제공하도록 프로세서(108)에 의해 사용되는 데이터와 같은, 임의의 적합한 데이터를 저장할 수 있다. 예를 들어, 실행되는 프로그램들과 연관된 데이터 또는 코어들(114)에 의해 액세스되는 파일들이 시스템 메모리 디바이스(107)에 저장될 수 있다. 따라서, 시스템 메모리 디바이스(107)는 코어들(114)에 의해 실행되거나 또는 달리 사용되는 데이터 및/또는 명령어들의 시퀀스들을 저장하는 시스템 메모리를 포함할 수 있다. 다양한 실시예들에서, 시스템 메모리 디바이스(107)는 시스템 메모리 디바이스(107)로의 전력이 제거된 이후에도 저장된 채로 남아 있는 지속적 데이터(persistent data)(예를 들어, 사용자의 파일들 또는 명령어 시퀀스들)를 저장할 수 있다. 시스템 메모리 디바이스(107)는 특정 CPU(102)에 전용되거나 또는 컴퓨터 시스템(100)의 다른 디바이스들(예를 들어, 하나 이상의 다른 프로세서 또는 다른 디바이스)과 공유될 수 있다.
다양한 실시예들에서, 시스템 메모리 디바이스(107)는 임의 수의 메모리 모듈들, 메모리 디바이스 제어기, 및 다른 지원 로직(도시되지 않음)을 포함하는 메모리를 포함할 수 있다. 메모리 모듈은 비-휘발성 메모리 및/또는 휘발성 메모리를 포함할 수 있다. 비-휘발성 메모리는 매체에 의해 저장되는 데이터의 상태를 유지하는데 전력을 요구하지 않는 저장 매체이다. 비-휘발성 메모리의 비제한적인 예들은, (평면형 또는 3D NAND 플래시 메모리 또는 NOR 플래시 메모리와 같은) 솔리드 스테이트 메모리, 3D 크로스포인트 메모리, 칼코겐화물 상 변화 재료(예를 들어, 칼코겐화물 유리)를 사용하는 메모리 디바이스들, 바이트 어드레싱 가능 비-휘발성 메모리 디바이스들, 강유전체 메모리, SONOS(silicon-oxide-nitride-oxide-silicon) 메모리, 폴리머 메모리(예를 들어, 강유전체 폴리머 메모리), Fe-TRAM(ferroelectric transistor random access memory) 오보닉 메모리, 나노와이어 메모리, EEPROM(electrically erasable programmable read-only memory), 다른 다양한 유형들의 비-휘발성 RAM들(random access memories), 및 자기 저장 메모리 중 임의의 것 또는 이들의 조합을 포함할 수 있다. 일부 실시예들에서, 3D 크로스포인트 메모리는, 메모리 셀들이 워드 라인들과 비트 라인들의 교차점에 위치하고 개별적으로 어드레싱 가능하며 비트 저장이 벌크 저항에서의 변화에 기초하는, 트랜지스터-리스 적층 가능 크로스 포인트 아키텍처(transistor-less stackable cross point architecture)를 포함할 수 있다. 휘발성 메모리는 매체에 의해 저장되는 데이터의 상태를 유지하는데 전력을 요구하는 저장 매체이다. 휘발성 메모리의 예들은, DRAM(dynamic random access memory) 또는 SRAM(static random access memory)과 같은, 다양한 타입들의 RAM(random access memory)을 포함할 수 있다. 메모리 모듈에서 사용될 수 있는 하나의 특정 타입의 DRAM은 SDRAM(synchronous dynamic random access memory)이다. 일부 실시예들에서, 휘발성 메모리인 메모리(107)의 임의의 부분은 이에 제한되는 것은 아니지만 DDR(Double Data Rate) 표준들, 예를 들어, DDR3, 4 및 5, 또는 LPDDR4(Low Power DDR4)는 물론 신생 표준들을 포함하는 JEDEC 표준들을 준수할 수 있다.
저장 디바이스(106A)는, 컴퓨터 시스템(100)의 기능성을 제공하도록 프로세서(108)에 의해 사용되는 데이터와 같은, 임의의 적합한 데이터를 저장할 수 있다. 예를 들어, 실행되는 프로그램들과 연관된 데이터 또는 코어들(114A 및 114B)에 의해 액세스되는 파일들이 저장 디바이스(106A)에 저장될 수 있다. 따라서, 일부 실시예들에서, 저장 디바이스(106A)는 코어들(114A 및 114B)에 의해 실행되거나 또는 달리 실행되는 데이터 및/또는 명령어들의 시퀀스들을 저장하는 시스템 메모리로서 기능할 수 있다. 다양한 실시예들에서, 저장 디바이스(106A)는 저장 디바이스(106A)로의 전력이 제거된 이후에도 저장된 채로 남아 있는 지속적 데이터(예를 들어, 사용자의 파일들 또는 소프트웨어 애플리케이션 코드)를 저장할 수 있다. 저장 디바이스(106A)는 CPU(102)에 전용되거나 또는 컴퓨터 시스템(100)의 다른 디바이스들(예를 들어, 다른 CPU 또는 다른 디바이스)과 공유될 수 있다.
도시되는 실시예에서, 저장 디바이스(106A)는 저장 디바이스 제어기(118), 및 데이터를 저장하도록 동작 가능한 4개의 메모리 모듈들(122A-D)을 포함하는 하나의 메모리(116)를 포함하지만, 저장 디바이스는 임의의 적합한 수의 메모리 모듈들을 포함할 수 있다. 메모리 모듈(122A)은 하나 이상의 비트를 저장하도록 각각 동작 가능한 복수의 메모리 셀들을 포함한다. 메모리 모듈(122A)의 셀들은, 행들(예를 들어, 워드라인들) 및 열들(예를 들어, 비트라인들)로, 3차원 구조들로, 또는 다른 방식으로와 같이, 임의의 적합한 방식으로 배열될 수 있다. 다양한 실시예들에서, 셀들은 뱅크들, 블록들, 서브블록들, 워드라인들, 페이지들, 프레임들, 바이트들, 또는 다른 적합한 그룹들로 논리적으로 그룹화될 수 있다. 다양한 실시예들에서, 메모리 모듈(122A)은 하나 이상의 NAND 플래시 메모리 어레이를 포함한다. NAND 플래시 메모리 어레이들은 도 2와 관련하여 보다 상세히 설명된다.
메모리 모듈(122A)은 위에 열거된 휘발성 또는 비-휘발성 메모리들 중 임의의 것 또는 다른 적합한 메모리를 포함할 수 있다. 특정 실시예들에서, 메모리 모듈(122A)은, 평면형 또는 3D NAND 플래시 메모리와 같은, 비-휘발성 메모리를 포함한다. 특정 실시예들에서, 비-휘발성 메모리가 있는 메모리 모듈(122A)은, JESD218, JESD219, JESD220-1, JESD220C, JESD223C, JESD223-1, 또는 다른 적합한 표준(본 명세서에 인용되는 JEDEC 표준들은 www.jedec.org에서 이용 가능함)과 같은, JEDEC(Joint Electron Device Engineering Council)에 의해 공포된 비-휘발성 메모리에 대한 하나 이상의 표준을 준수할 수 있다. 특정 실시예들에서, 저장 디바이스는, DDR(Double Data Rate) SDRAM에 대한 JESD79F, DDR2 SDRAM에 대한 JESD79-2F, DDR3 SDRAM에 대한 JESD79-3F, 또는 DDR4 SDRAM에 대한 JESD79-4A(이러한 표준들은 www.jedec.org에서 이용 가능함)와 같은, SDRAM 메모리에 대한 JEDEC에 의해 공포된 표준의 하나 이상의 부분들을 준수하는 NAND 플래시 메모리를 포함한다. 이러한 표준들(및 유사한 표준들)은 DDR 기반 표준들이라고 지칭될 수 있고, 이러한 표준들을 구현하는 저장 디바이스들의 통신 인터페이스들은 DDR 기반 인터페이스들이라고 지칭될 수 있다. 예를 들어, NAND 플래시 메모리를 포함하는 저장 디바이스(106A)는 DDR 기반 표준을 준수하는 포맷을 갖는 커맨드를 수신할 수 있고, 이러한 커맨드를 저장 디바이스(106A)의 NAND 플래시 메모리와 호환 가능한 하나 이상의 커맨드로 변환할 수 있다. 이와 유사하게, 저장 디바이스(106A)는 NAND 플래시 메모리 상에서 수행되는 연산들로부터의 결과들을, 이러한 결과들을 CPU(102)에 송신하기 이전에, DDR 기반 표준을 준수하는 포맷으로 포맷할 수 있다.
특정 실시예에서, 메모리 디바이스(116)는 반도체 패키지이다. 다양한 실시예들에서, 반도체 패키지는 하나 이상의 반도체 다이(칩들이라고 또한 지칭됨)을 포함하는 케이싱을 포함할 수 있다. 패키지는 외부 회로들에 접속하는데 사용되는 콘택트 핀들 또는 리드들을 또한 포함할 수 있다. 특정 실시예에서, 각각의 메모리 모듈(122A)은 자신의 다이 상에 구현된다. 따라서, 일부 실시예들에서, 메모리(116)는 메모리 모듈(122A)을 각각 포함하는 복수의 다이들을 포함하는 패키지일 수 있다. 그러나, 패키지는 메모리 디바이스(116)가 취할 수 있는 형태의 하나의 예에 불과하고, 그 이유는 메모리 디바이스가 임의의 적합한 물리적 배열에서 하나 이상의 메모리 모듈들 및 관련 로직의 임의의 적합한 배열일 수 있기 때문이다. 예를 들어, 비록 단일의 물리적 패키지가 단일의 메모리(116)를 포함할 수 있더라도, 다수의 메모리들(116)이 단일의 패키지 상에 존재할 수 있거나 또는 메모리(116)가 다수의 패키지들에 걸쳐 분산될 수 있다. 다른 예로서, 메모리(116)는, 회로 보드, 다이, 디스크 드라이브, 다른 매체, 또는 이들의 임의의 조합(또는 하나 이상의 패키지와의 조합)과 같은, 하나 이상의 상이한 물리 매체에서 구현될 수 있다. 유사하게, 다이는 단지 메모리 모듈(122A)의 일 예이고, 그 이유는 메모리 모듈(122A)이 메모리 셀들 및 메모리 셀들과 연관된 로직의 임의의 적합한 배열일 수 있다. 예를 들어, 비록 단일의 다이가 단일의 메모리 모듈(122A)을 포함할 수 있더라도, 다수의 메모리 모듈들이 단일의 다이 상에 존재할 수 있거나 또는 메모리 유닛이 다수의 다이들에 걸쳐 분산될 수 있다. 다른 예로서, 메모리 모듈(122A)은, 회로 보드, 패키지, 디스크 드라이브, 다른 매체, 또는 이들의 임의의 조합(또는 하나 이상의 다이와의 조합)과 같은, 하나 이상의 상이한 물리 매체에서 구현될 수 있다.
저장 디바이스(106A)는 임의의 적합한 타입의 메모리를 포함할 수 있고 다양한 실시예들에서 특정 속도, 기술, 또는 폼 팩터의 메모리에 제한되지 않는다. 예를 들어, 저장 디바이스(106A)는 (솔리드 스테이트 드라이브와 같은) 디스크 드라이브, 플래시 드라이브, 컴퓨팅 디바이스와 통합되는 메모리(예를 들어, 컴퓨팅 디바이스의 회로 보드 상에 통합되는 메모리), 메모리 소켓에 삽입될 수 있는 메모리 모듈(예를 들어, 듀얼 인-라인 메모리 모듈), 또는 다른 타입의 저장 디바이스일 수 있다. 더욱이, 컴퓨터 시스템(100)은 다수의 상이한 타입들의 저장 디바이스들을 포함할 수 있다. 저장 디바이스(106A)는 DDR 기반 프로토콜, PCI, PCIe, USB, SAS, SATA, FC, SMBus(System Management Bus), 또는 다른 적합한 프로토콜과 같은 임의의 적합한 통신 프로토콜을 사용하여 CPU 메모리 제어기(112) 또는 I/O 제어기(110)와 통신하는 임의의 적합한 인터페이스를 포함할 수 있다. 저장 디바이스(106A)는 NVMe, AHCI, 또는 다른 적합한 사양과 같은 임의의 적합한 논리 디바이스 인터페이스 사양에 따라 CPU 메모리 제어기(112) 또는 I/O 제어기(110)와 통신하는 통신 인터페이스를 또한 포함할 수 있다. 특정 실시예들에서, 저장 디바이스(106A)는 각각이 CPU 메모리 제어기(112) 및/또는 I/O 제어기(110)와 별개의 프로토콜을 사용하여 통신하는 다수의 통신 인터페이스들을 포함할 수 있다.
저장 디바이스 제어기(118)는 (예를 들어, CPU 메모리 제어기(112) 또는 I/O 제어기(110)를 통해) CPU(102)로부터 요청들을 수신하고, 이러한 요청들로 하여금 메모리(116)(또는 그 상의 메모리 유닛(들))에 대해 수행되게 하고, 이러한 요청들과 연관된 데이터를 CPU(102)에 (예를 들어, CPU 메모리 제어기(112) 또는 I/O 제어기(110)를 통해) 제공하는 로직을 포함할 수 있다. 제어기(118)는 메모리 연산 동안 마주치게 되는 에러들을 검출 및/또는 정정하도록 또한 동작 가능할 수 있다. 실시예에서, 제어기(118)는 또한, 웨어 레벨링(wear leveling)을 수행하기 위해 그리고/또는 셀들이 신뢰성있게 기입될 수 있는 추정 횟수에 가까울 때를 검출하기 위해, 특정 셀들(또는 논리 셀 그룹들)이 기입된 횟수를 추적한다. 웨어 레벨링을 수행함에 있어서, 저장 디바이스 제어기(118)는 특정 블록들이 다른 블록들보다 더 많이 기입되지 않도록 기입 연산들을 메모리(116)의 메모리 블록들 사이에 균등하게 분산시킬 수 있다. 다양한 실시예들에서, 제어기(118)는 또한 온도 또는 전압과 같은 저장 디바이스(106A)의 다양한 특성들을 모니터링하고 연관된 통계들을 CPU(102)에 보고할 수 있다. 저장 디바이스 제어기(118)는 메모리(116)와 동일한 보드 또는 디바이스 상에 또는 상이한 보드, 또는 디바이스 상에 구현될 수 있다. 예를 들어, 일부 환경들에서, 저장 디바이스 제어기(118)는 컴퓨터 시스템(100)의 다수의 상이한 메모리들(116)(각각이 동일한 타입의 메모리일 수 있거나 상이한 타입들일 수 있음)에 대한 메모리 연산들을 관리하는 중앙 집중형 저장 제어기일 수 있다(그리고 따라서 본 명세서에 설명되는 저장 디바이스 제어기 기능성을 자신이 연결되는 메모리들 중 임의의 것에 제공할 수 있음).
다양한 실시예들에서, 저장 디바이스(106A)는 어드레스 변환 엔진(120)을 또한 포함한다. 도시되는 실시예에서, 어드레스 변환 엔진(120)이 저장 디바이스 제어기(118)의 일부로서 도시되어 있지만, 다양한 실시예들에서, 어드레스 변환 엔진(120)은 저장 디바이스 제어기(118)와 별개이고 저장 디바이스 제어기(118)에 통신 가능하게 연결될 수 있다. 다양한 실시예들에서, 어드레스 변환 엔진(120)은 저장 디바이스 제어기(118)와 동일한 칩 또는 패키지 상에 또는 상이한 칩 또는 패키지 상에 통합될 수 있다.
다양한 실시예들에서, 어드레스 변환 엔진(120)은 논리 어드레스 공간(예를 들어, 저장 디바이스(106A)에 연결되는 컴퓨팅 호스트에 가시적인 어드레스 공간)과 저장 디바이스(106A)의 메모리(116)의 물리 어드레스 공간(컴퓨팅 호스트에 노출될 수 있거나 또는 그렇지 않을 수 있음) 사이의 맵핑을 저장하고 업데이트하는 로직을 포함할 수 있다. 이러한 논리 어드레스 공간은 저장 디바이스(106A)의 물리 어드레스 공간을 통해 어드레싱 가능한 메모리 대응하는 물리 그룹들 상에 물리적으로 저장되는 데이터의 복수의 논리 그룹들을 노출시킬 수 있다. 물리 어드레스 공간의 물리 어드레스는, 물리 메모리 위치가 위치되는 메모리(116)의 식별자, 물리 메모리 위치가 위치되는 메모리 모듈(122A)의 식별자(예를 들어, 논리 유닛 번호), 물리 메모리 위치의 하나 이상의 페이지, 물리 메모리 위치의 하나 이상의 서브블록, 물리 메모리 위치의 하나 이상의 워드라인, 물리 메모리 위치의 하나 이상의 비트라인, 또는 그의 다른 적합한 식별자들 또는 인코딩들과 같은, 저장 디바이스(106A)의 물리 메모리 위치(예를 들어, 메모리(116)의 메모리 내의 위치)를 식별하는 임의의 적합한 정보를 포함할 수 있다.
어드레스 변환 엔진(120) 또는 저장 디바이스(106A)의 다른 부분은 논리 대 물리 매핑 구조들 및 다른 정보를 저장하기 위한 임의의 적합한 메모리 타입, 및 (예를 들어, 저장 디바이스 제어기(118)로부터의 요청에 응답하여) 논리 대 물리 매핑 구조들 및 다른 정보에 저장된 값들을 변경하고 논리 대 물리 매핑 구조들 및 다른 정보로부터 값들을 판독(예를 들어, 메모리 연산들에서의 사용을 위해 저장 디바이스 제어기(118)에 이러한 값들을 제공하기 위함)하기 위한 임의의 적합한 로직을 포함할 수 있다.
논리 대 물리 매핑 구조들 및 다른 정보에 대한 저장 매체는 어드레스 변환 엔진(120) 및/또는 저장 디바이스 제어기(118) 내에 포함될 수 있거나 또는 어드레스 변환 엔진 및/또는 저장 디바이스 제어기에 통신 가능하게 연결될 수 있다. 다양한 실시예들에서, 논리 대 물리 매핑 구조들 및 다른 정보에 대한 저장 매체는 저장 디바이스 제어기(118) 및/또는 어드레스 변환 엔진(120)과 동일한 패키지 또는 칩 상에 통합될 수 있거나 또는 별도의 패키지 또는 칩 상에 구현될 수 있다.
다양한 실시예들에서, 어드레스 변환 엔진(120) 및/또는 저장 디바이스 제어기(118)는 논리 대 물리 매핑 구조들 및 다른 정보의 어드레스 맵핑들의 관리를 통해 웨어 레벨링을 제공할 수 있다. 특정 실시예들에서, 어드레스 변환 엔진(120) 및/또는 저장 디바이스 제어기(118)는 또한 불량 셀들(또는 셀들의 논리 그룹화)에 대한 물리 어드레스들로 하여금 논리 어드레스 공간에 매핑되지 않게 하여 불량 메모리 셀들(또는 셀들의 논리 그룹화)의 사용을 방지할 수 있다.
다양한 실시예들에서, 저장 디바이스(106A)는 데이터가 메모리(116)에 기입되거나 이로부터 판독될 때 수행되는 프로그래밍 시퀀스를 제어하도록 동작 가능한 프로그램 제어 로직(124)을 또한 포함한다. 다양한 실시예들에서, 프로그램 제어 로직(124)은 데이터의 하나 이상의 페이지의 프로그래밍 및/또는 판독 동안 메모리 셀들에 인가되는 다양한 전압들(또는 어느 전압들이 제공되어야 하는지를 표시하는 정보)을 제공하고, 에러 정정을 수행하고, 다른 적합한 기능들을 수행할 수 있다.
다양한 실시예들에서, 프로그램 제어 로직(124)은 저장 디바이스 제어기(118)와 동일한 칩 상에 또는 상이한 칩 상에 통합될 수 있다. 도시되는 실시예에서, 프로그램 제어 로직(124)이 저장 디바이스 제어기(118)의 일부로서 도시되지만, 다양한 실시예들에서, 프로그램 제어 로직(124)의 전부 또는 일부분은 저장 디바이스 제어기(118)와 별개이고 저장 디바이스 제어기(118)에 통신 가능하게 연결될 수 있다. 예를 들어, 프로그램 제어 로직(124)의 전부 또는 일부분은 메모리(116) 및/또는 메모리 모듈들(122A)과 동일한 패키지 또는 칩 상에 위치될 수 있다.
일부 실시예들에서, 시스템(100)의 엘리먼트들의 전부 또는 일부는 동일한 회로 보드(예를 들어, 마더보드) 상에 존재한다(또는 이에 연결된다). 다양한 실시예들에서, 엘리먼트들 사이의 임의의 적합한 파티셔닝이 존재할 수 있다. 예를 들어, CPU(102)에 도시되는 엘리먼트들이 단일의 다이(즉, 온-칩) 또는 패키지 상에 위치될 수 있거나 또는 CPU(102)의 엘리먼트들 중 임의의 것이 오프-칩 또는 오프-패키지 위치될 수 있다. 이와 유사하게, 저장 디바이스(106A)에 도시되는 엘리먼트들은 단일의 칩 또는 다수의 칩들 상에 위치될 수 있다. 다양한 실시예들에서, 저장 디바이스(106A) 및 컴퓨팅 호스트(예를 들어, CPU(102))는 동일한 회로 보드 상에 또는 동일한 디바이스 상에 위치될 수 있고, 다른 실시예들에서, 저장 디바이스(106A) 및 컴퓨팅 호스트는 상이한 회로 보드들 또는 디바이스들 상에 위치될 수 있다.
시스템(100)의 컴포넌트들은 임의의 적합한 방식으로 서로 연결될 수 있다. 예를 들어, 버스는 컴포넌트들 중 임의의 것을 서로 연결시킬 수 있다. 버스는, 멀티-드롭 버스, 메시 인터커넥트, 링 인터커넥트, 포인트-투-포인트 인터커넥트, 직렬 인터커넥트, 병렬 버스, 코히어런트(예를 들어, 캐시 코히어런트) 버스, 계층화된 프로토콜 아키텍처, 차동 버스, 및 GTL(Gunning transceiver logic) 버스와 같은, 임의의 알려진 인터커넥트를 포함할 수 있다. 다양한 실시예들에서, 통합 I/O 서브시스템은, 코어들(114), 하나 이상의 CPU 메모리 제어기(112), I/O 제어기(110), 통합 I/O 디바이스들, DMA(direct memory access) 로직(도시되지 않음) 등과 같은, 시스템(100)의 다양한 컴포넌트들 사이의 포인트-투-포인트 멀티플렉싱 로직을 포함한다. 다양한 실시예들에서, 컴퓨터 시스템(100)의 컴포넌트들은, 라우터들, 스위치들, 또는 다른 컴퓨팅 디바이스들과 같은, 임의의 수의 개재 네트워크 노드들을 포함하는 하나 이상의 네트워크를 통해 서로 연결될 수 있다. 예를 들어, 컴퓨팅 호스트(예를 들어, CPU(102)) 및 저장 디바이스(106A)는 네트워크를 통해 통신 가능하게 연결될 수 있다.
비록 도시되지 않더라도, 시스템(100)은 전력을 수용하는 배터리 및/또는 전원 배출구 커넥터 및 연관된 시스템, CPU(102)에 의해 제공되는 데이터를 출력하는 디스플레이, 또는 CPU(102)로 하여금 네트워크를 통해 통신하게 하는 네트워크 인터페이스를 사용할 수 있다. 다양한 실시예들에서, 배터리, 전원 배출구 커넥터, 디스플레이, 및/또는 네트워크 인터페이스는 CPU(102)에 통신 가능하게 연결될 수 있다. 갱신 가능 에너지(예를 들어, 태양열 전력 또는 운동 기반 전력)와 같은 전력의 다른 소스들이 사용될 수 있다.
도 2는 특정 실시예들에 따른 NAND 플래시 메모리 어레이(200)의 일부분의 예시적인 도면을 도시한다. 다양한 실시예들에서, 메모리 모듈(122A)은 하나 이상의 NAND 플래시 메모리 어레이를 포함할 수 있다. NAND 플래시 메모리 어레이(200)는 직렬 스트링들(204)과 같은 열들로 배열되는 복수의 비-휘발성 메모리 셀들(202)을 포함할 수 있다. 다양한 실시예들에서, 메모리 셀(202)은 메모리 셀(202)에 의해 저장되는 하나 이상의 비트 값을 표시하는 전하를 저장하는 플로팅 게이트가 있는 트랜지스터를 포함할 수 있다. 직렬 스트링들(204)에서, 셀들(202)의 드레인들은 (상단 셀을 제외하고) 각각 다른 셀(202)의 소스에 연결된다.
어레이(200)는 워드라인들(206)을 또한 포함한다. 워드라인(206)은 다수의 직렬 스트링들(204)에 걸쳐 걸쳐질 수 있고(예를 들어, 워드라인이 각각의 직렬 스트링(204)의 하나의 메모리 셀에 연결될 수 있음), 어레이(200)의 행의 각각의 메모리 셀(202)의 제어 게이트들에 접속되고, 해당 행에서 메모리 셀들(202)의 제어 게이트들을 바이어스하는데 사용된다. 비트라인들(208)은 각각 드레인 선택 게이트(214)에 의해 직렬 스트링(204)에 연결되고, 특정 비트라인(208) 상의 전압 또는 전류를 감지하는 것에 의해 각각의 셀의 상태를 검출하는 감지 회로(220)에 연결된다.
메모리 셀들의 각각의 직렬 스트링(204)은 소스 선택 게이트(212)에 의해 소스 라인(210)에 그리고 드레인 선택 게이트(214)에 의해 개별 비트라인(208)에 연결된다. 소스 선택 게이트들(212)은 소스 선택 게이트 제어 라인(216)에 의해 제어되고 드레인 선택 게이트들(214)은 드레인 선택 게이트 제어 라인(218)에 의해 제어된다.
다양한 실시예들에서, 각각의 메모리 셀(202)은 SLC, MLC, TLC, QLC, 또는 다른 인코딩 스킴에 따라 프로그램될 수 있다. 각각의 셀의 임계 전압(Vt)은 셀에 저장되는 데이터를 표시한다. 도 3은 특정 실시예들에 따른 NAND 플래시 메모리 셀들(202) 내의 비트들의 예시적 인코딩들을 도시한다. 도시되는 실시예에서, 각각의 타원형 영역은 셀 내에 인코딩되는 값에 대응하는 임계 전압들의 범위를 표현한다. 예를 들어, SLC 인코딩 스킴에서, 하위 임계 전압들은 비트 값 1에 대응하고, 상위 임계 전압들은 비트 값 0에 대응한다. 다른 예로서, MLC 인코딩 스킴에서, 임계 전압들의 최저 범위는 "11"에 대응하고, 임계 전압들의 다음 최고 범위는 "01"에 대응하고, 임계 전압들의 다음 최고 범위는 "00"에 대응하고, 임계 전압들의 최고 범위는 "10" 에 대응한다. 유사하게, TLC 인코딩 스킴(또는 도시되지 않은 다른 인코딩 스킴들)에 대해, 임계 전압들의 다양한 범위들은 각각의 셀 내에 인코딩되는 비트들의 다양한 값들에 대응한다.
프로그램 레벨은 도시되는 영역들 중 하나를 참조할 수 있다. 다시 말해서, 프로그램 레벨은 인코딩 스킴에서 사용되는 비트 인코딩들 중 하나에 대응할 수 있다. 일반적으로, 셀이 최저 전압 영역에 의해 표현되는 값을 저장할 것이면, 이러한 셀은 프로그램될 필요가 없다(그 이유는 자신의 소거된 상태에서 이미 최저 전압 영역에서의 임계 전압을 갖기 때문임). 따라서, 본 명세서에서 사용되는 바와 같이, 다음 최저 영역(예를 들어, MLC 스킴의 "01" 또는 TLC 스킴의 "011")은 제1 프로그램 레벨이라고 지칭될 것이고, 다음 영역(예를 들어, MLC 스킴의 "00" 또는 TLC 스킴의 "001")은 제2 프로그램 레벨이라고 지칭될 것이고, 등등이다. 이러한 용어들에서, MLC 스킴은 3개의 프로그램 레벨들을 갖고, TLC 스킴은 7개의 프로그램 레벨들을 갖고, QLC 스킴은 15개의 프로그램 레벨들을 갖는다. 데이터(예를 들어, 하나 이상의 페이지)가 메모리(116)에 기입될 때, 복수의 셀들은 제1 프로그램 레벨로 프로그램될 수 있고, 복수의 셀들은 제2 프로그램 레벨로 프로그램될 수 있고, 등등이다.
도 3에 도시되는 다양한 R 전압 값들(예를 들어, R1, R2, R3, ...)은 셀들의 값들이 판독될 때 워드라인에 인가될 수 있는 판독 전압들을 표현한다. 특정 판독 전압이 인가될 때, 감지 회로(220)는 셀의 비트라인을 통해 감지 회로(220)에 의해 감지되는 전압 또는 전류에 기초하여 셀의 임계 값이 판독 전압보다 큰지 또는 작은지 결정할 수 있다. 도 3에 도시되지는 않더라도, QLC 인코딩 스킴은 각각의 셀 내의 4개의 비트들의 값들을 해결하는데 15개의 판독 전압들이 사용될 수 있는 유사한 방식을 이용할 수 있고, 여기서 R1<R2<R3<...<R15이다.
도시되는 다양한 프로그램 검증 전압들(MLC 인코딩 스킴에서의 PV1-PV3 및 TLC 인코딩 스킴에서의 PV1-PV7)은 셀의 임계 전압이 자신의 원하는 레벨에 도달했는지 결정하도록 셀의 프로그래밍 동안 셀에 인가될 수 있는 프로그램 검증 전압들을 표현한다.
특정 실시예들에서, 셀들은 한 번에 하나 이상의 페이지로 프로그램될 수 있고, 여기서 페이지는 동일한 워드라인에 연결되는 셀들의 그룹에 저장된다. 일 예로서, 셀들의 그룹은 특정 워드라인 및 특정 서브블록에 의해 식별될 수 있다. 다른 예로서, 셀들의 그룹은 워드라인의 모든 셀들을 표현할 수 있다. 셀들의 그룹은 데이터의 하나의 페이지(셀들이 SLC 스킴에 따라 인코딩되는 경우) 또는 데이터의 다수의 페이지들(셀들이 MLC, TLC, QLC, 또는 다른 멀티-레벨 인코딩 스킴에 따라 인코딩되는 경우)을 저장할 수 있다.
다양한 실시예들에서, 다수의 비트들을 저장하도록 인코딩되는 셀은 다수의 상이한 페이지들의 일부를 형성할 수 있고, 이러한 셀의 각각의 비트는 별개의 페이지에 대응한다. 예를 들어, 2 비트로(즉, MLC 인코딩 스킴을 이용하여) 인코딩되는 셀에 대해, 하나의 비트는 UP(Upper Page)에 대응할 수 있고 다른 비트는 LP(Lower Page)에 대응할 수 있다. 다른 예로서, 3 비트로(즉, TLC 인코딩 스킴을 사용하여) 인코딩되는 셀에 대해, 하나의 비트는 LP에 대응할 수 있고, 하나의 비트는 UP에 대응할 수 있고, 다른 비트는 XP(Extra Page)에 대응할 수 있다. 또 다른 예로서, 4 비트로(즉, QLC 인코딩 스킴을 사용하여) 인코딩되는 셀에 대해, 하나의 비트는 LP에 대응할 수 있고, 다른 비트는 UP에 대응할 수 있고, 다른 비트는 XP에 대응할 수 있고, 최종 비트는 TP(Top Page)에 대응할 수 있다. 각각의 페이지(예를 들어, LP, UP, XP, 또는 TP)는 워드라인의 복수의 상이한 셀들에 의해 저장되는 대응하는 비트들의 집성을 포함할 수 있다. 예를 들어, 도 3에 도시되는 인코딩을 참조하면, TLC 스킴을 사용하여 인코딩되는 복수의 셀들의 최우측 비트들 모두는 LP를 형성할 수 있고, 복수의 셀들의 중간 비트들 모두는 UP를 형성할 수 있고, 복수의 셀들의 최좌측 비트들 모두는 XP를 형성할 수 있다.
셀들의 그룹에 대한 프로그래밍 시퀀스는 셀들의 그룹 내로의 모든 의도된 페이지들의 프로그래밍을 포함할 수 있다. 프로그래밍 시퀀스는 하나 이상의 프로그래밍 패스를 포함할 수 있다. (하나 이상의 프로그래밍 루프를 포함할 수 있는) 프로그래밍 패스는 하나 이상의 페이지를 인코딩할 수 있다. 프로그래밍 패스는 프로그램될 셀들에 하나 이상의 유효 프로그램 전압을 인가하는 것, 및 그에 후속하여 어느 셀들이 프로그래밍을 마무리했는지 결정하기 위해 이러한 셀들에 하나 이상의 검증 전압을 인가하는 것을 포함할 수 있다. 일부 실시예들에서, 프로그래밍 패스의 하나 이상의 루프들은 하나 이상의 검증 전압의 인가 없이 하나 이상의 유효 프로그램 전압의 인가를 포함할 수 있다. 셀에 유효 프로그램 전압을 인가하는 것은 셀의 임계 전압을 변경하기 위해 셀의 제어 게이트와 채널 사이의 전압 차이를 변경하는 것을 포함할 수 있다. 따라서, 유효 프로그램 전압의 인가를 달성하기 위해 셀의 워드라인(타겟 셀의 제어 게이트에 연결됨) 및/또는 채널의 전압이 설정될 수 있다. "프로그램 전압(program voltage)"은 워드라인에 인가되는 전압을 지칭하는데 흔히 사용되기 때문에, "유효 프로그램 전압(effective program voltage)"이라는 용어는 본 명세서에서 (채널이 0V로 유지되는 사례들에서 프로그램 전압과 동의어일) 셀의 제어 게이트와 채널 사이의 전압 차이를 지칭하는데 사용될 것이다.
특정 실시예들에서, 데이터의 논리 페이지(즉, CPU(102)와 같은 컴퓨팅 호스트에 의해 참조되는 데이터의 페이지)는 다수의 비트들로 인코딩되는 셀들에 저장되는 LP, UP, XP, TP, 또는 다른 메모리 페이지에 대응할 수 있다. 따라서, 데이터의 2개의 논리 페이지들은 MLC 스킴을 사용하여 인코딩되는 셀 그룹에 저장되는 LP 및 UP에 대응할 수 있고, 데이터의 3개의 논리 페이지들은 TLC 스킴을 사용하여 인코딩되는 셀 그룹에 저장되는 LP, UP, 및 XP에 대응할 수 있고, 데이터의 4개의 논리 페이지들은 QLC 스킴을 사용하여 인코딩되는 셀 그룹에 저장되는 LP, UP, XP, 및 TP에 대응할 수 있고, 등등이다. 따라서, 컴퓨팅 호스트가 저장 디바이스(106A)에 기입할 때, 다수의 페이지들이 단일의 패스에서 프로그램될 것이면, 다수의 논리 페이지들이 컴퓨팅 호스트로부터 로드되고 해당 패스에서 프로그램될 수 있다. 예를 들어, TLC 스킴을 사용하여 인코딩되는 메모리에서, LP 및 UP가 단일의 패스에서 프로그램될 때, 데이터의 2개의 논리 페이지들이 집성될 수 있다(하나의 논리 페이지가 LP에 저장되고 하나의 논리 페이지가 UP에 저장됨).
위에 언급된 바와 같이, 프로그래밍 패스는 하나 이상의 페이지를 프로그램할 수 있다. 예를 들어, 워드라인의 셀들이 MLC 스킴을 사용하여 인코딩될 때, 양쪽 페이지들(LP 및 UP)은 셀들의 전압 레벨들을 (예를 들어, 도 3에서 MLC 스킴에 대해 도시되는 4개의 전압 범위들 중 하나 내에서) 원하는 프로그램 레벨로 설정하는 것에 의해 단일의 프로그래밍 패스 동안 프로그램될 수 있다. 대안적으로, LP는 제1 패스에서 프로그램될 수 있고 UP는 제2 패스에서 프로그램될 수 있다. 예를 들어, 제1 패스 동안, (셀들의 제1 비트들이 집합적으로 LP를 형성하는) 셀들의 제1 비트들은 각각의 비트의 원하는 값에 기초하여 바이너리 상태로 프로그램될 수 있다. 예를 들어, 도 3에 도시되는 MLC 스킴을 참조하면, 셀들의 최우측 비트들이 LP를 형성하고, 특정 최우측 비트가 '0' 값으로 프로그램될 것이면, 셀의 Vt는 제1 프로그래밍 패스에서의 PV2보다 약간 더 큰 값(또는 저 전압 소거 상태에 있는 셀들과 구별되도록 PV2에 대한 방식의 적어도 일부분)으로 프로그램될 수 있다. 특정 최우측 비트가 '1' 값으로서 저장될 것이면, 그것은 저 전압 레벨로 남겨질 수 있다. 제2 패스 동안, (셀들의 제2 비트들이 집합적으로 UP를 형성하는) 동일한 셀들의 제2 비트들이 프로그램되고, 그 결과 셀들의 Vt가 그들의 원하는 Vt로 변경되고(예를 들어, 도 3에서 MLC 스킴에 대해 도시되는 4개의 전압 범위들 중 하나 내에서), 따라서 UP 및 LP에 대한 값들을 저장한다. 다른 예로서, 워드라인의 셀들이 TLC 스킴 또는 QLC 스킴을 사용하여 인코딩될 때, 모든 페이지들은 셀들의 전압 레벨들을 원하는 프로그램 레벨로 설정하는 것에 의해 단일의 프로그래밍 패스 동안 프로그램될 수 있거나, 또는 페이지들 중 하나 이상이 제1 프로그래밍 패스 동안 프로그램될 수 있고 나머지 페이지들은 제2 패스 동안 프로그램될 수 있다(또는 나머지 페이지들은 다수의 추가 패스들을 사용하여 프로그램될 수 있음). 예를 들어, TLC 스킴에서, 제1 패스는 LP를 인코딩할 수 있고 제2 패스는 UP 및 XP를 인코딩할 수 있거나 또는 제1 패스는 LP 및 UP를 인코딩할 수 있고 제2 패스는 XP를 인코딩할 수 있다. 다른 예로서, QLC 스킴에서, 제1 패스는 LP를 인코딩할 수 있고 제2 패스는 UP, XP, 및 TP를 인코딩할 수 있거나; 제1 패스는 LP 및 UP를 인코딩할 수 있고 제2 패스는 XP 및 TP를 인코딩할 수 있거나; 또는 제1 패스는 LP, UP, 및 XP를 인코딩할 수 있고 제2 패스는 TP를 인코딩할 수 있다.
본 명세서에서 사용되는 바와 같이, "하위 페이지(들)(lower page(s))"는 제1 프로그래밍 패스에서 프로그램되는 하나 이상의 페이지를 지칭할 수 있고 "상위 페이지(들)(upper page(s))" 는 하나 이상의 후속 프로그래밍 패스에서 프로그램되는 하나 이상의 페이지를 지칭할 수 있다. 이러한 지정들은 이전에 설명된 LP(Lower Page) 및 UP(Upper Page)와 구별될 수 있다(일반적으로 Lower Page는 다수의 프로그래밍 패스들이 사용될 때 본 명세서에서 사용되는 바와 같은 하위 페이지일 것이고 한편 Upper Page는 제1 프로그래밍 패스에서 또는 후속 프로그래밍 패스에서 프로그램되는지에 의존하여 하위 페이지 또는 상위 페이지일 수 있다). 따라서, MLC 스킴에서, 하위 페이지(예를 들어, LP)는 제1 프로그래밍 패스에서 프로그램될 수 있고 상위 페이지(예를 들어, UP)는 제2 프로그래밍 패스에서 프로그램될 수 있다. 다른 예로서, TLC 스킴에서, 하위 페이지(예를 들어, LP)는 제1 프로그래밍 패스에서 프로그램될 수 있고 상위 페이지들(예를 들어, UP 및 XP)은 제2 프로그래밍 패스에서 프로그램될 수 있거나 또는 하위 페이지들(예를 들어, LP 및 UP)은 제1 프로그래밍 패스에서 프로그램될 수 있고 상위 페이지(예를 들어, XP)는 제2 프로그래밍 패스에서 프로그램될 수 있다. 다른 예로서, QLC 스킴에서, 하위 페이지(예를 들어, LP)는 제1 프로그래밍 패스에서 프로그램될 수 있고 상위 페이지들(예를 들어, UP, XP, 및 TP)은 제2 프로그래밍 패스에서 프로그램될 수 있다. 다른 예로서, 상이한 QLC 스킴에서, 하위 페이지들(예를 들어, LP 및 UP)은 제1 프로그래밍 패스에서 프로그램될 수 있고 상위 페이지들(예를 들어, XP 및 TP)은 제2 프로그래밍 패스에서 프로그램될 수 있다. 또 다른 예에서, 상이한 QLC 스킴에서, 하위 페이지들(예를 들어, LP, UP, 및 XP)은 제1 프로그래밍 패스에서 프로그램될 수 있고 상위 페이지(예를 들어, TP)는 제2 프로그래밍 패스에서 프로그램될 수 있다. 프로그래밍 패스들에 프로그램되는 페이지들의 임의의 다른 적합한 순열들이 상위 페이지들을 프로그램하는데 사용되는 다수의 패스들을 포함하는 본 개시 내용에서 고려된다.
특정 실시예들에서, 제1 워드라인(또는 그 일부분)의 셀들을 프로그램하는데 다수의 프로그래밍 패스들이 사용되면, 초기 프로그래밍 패스가 제1 워드라인 상에서 수행된 이후에 그리고 추가 프로그래밍 패스가 제1 워드 라인 상에서 수행되기 이전에 하나 이상의 인접한 워드라인들(또는 그 일부분들) 상에서 하나 이상의 프로그래밍 패스가 수행될 수 있다. 이러한 실시예들은 이웃하는 워드라인들의 프로그래밍에 의해 셀들에 야기되는 간섭의 효과들을 완화시킬 수 있다. 다른 실시예들에서, 다음 워드라인이 프로그램되기 이전에 워드라인의 셀들 상에서 다수의 패스들이 수행될 수 있다.
도 4는 특정 실시예들에 따른 TLC NAND 플래시 메모리 셀들의 예시적인 2개의 패스 프로그래밍 시퀀스를 도시한다. 도 4에서의 타원형 영역들의 수는 인코딩의 레벨을 표현할 수 있다. 예를 들어, 프로그래밍 패스 1 동안, 워드라인 n의 셀들이 2개의 레벨들로 인코딩되는 바와 같이 LP가 프로그램되고 프로그래밍 패스 3 동안 셀들을 8개의 레벨들(즉, TLC 인코딩 스킴에서 3 비트를 표현하는 데 사용되는 레벨들의 수)로 인코딩하는 것에 의해 UP 및 XP가 프로그램된다. 따라서, 패스 1에서, 워드라인 n의 특정 셀들의 임계 전압들은 패스 3에 있는 동안 그들의 타겟 값들에 대한 방식의 상승된 부분일 수 있고, 셀들의 임계 전압들은 나머지 양만큼 그들의 타겟 값들로 상승된다(또는 그들이 이미 그들의 타겟 값에 도달했다면 금지됨). 패스들 2, 4, 및 5 동안, 워드라인 n의 셀들의 임계 전압들은 의도적으로 변경(즉, 프로그래밍)되지 않고, 이러한 패스들 동안 워드라인 n의 셀들의 이러한 임계 전압들(존재한다면)로의 비교적 작은 변화들은 상이한 워드라인의 셀들의 프로그래밍으로부터의 간섭으로 인한 것이다.
도 4에 도시되는 실시예에서, 모든 셀들은 TLC 스킴에 따라 프로그램된다. 패스 1에서, 워드라인 n은 소거 상태(예를 들어, 저 임계 전압)로부터 2개의 레벨들로 프로그램된다. 패스 2에서, 인접한 워드라인 n+1은 2개의 레벨들로 프로그램된다. 패스 3에서, 워드라인 n은 다음으로 8개의 레벨들로 프로그램된다. 패스 4에서, 워드라인 n+2는 2개의 레벨들로 프로그램된다. 패스 5에서, 워드라인 n+1은 8개의 레벨들로 프로그램된다. 패스 5 동안 워드라인 n의 셀들 상의 워드라인 n+1의 프로그래밍의 효과는 완화되는데 그 이유는 워드라인 n+1의 셀들의 임계 전압들이 단일의 패스에서 그들이 8개의 레벨들로 프로그램되면 변경될 만큼 변경되지 않기 때문이다. 따라서, 워드라인 n의 셀들에 의해 저장되는 인코딩들은 그들의 프로그램되는 값들을 유지할 수 있다. 프로그래밍 시퀀스는 워드라인 n+3(도시되지 않음)이 제6 패스에서 2개의 레벨들로 프로그램되고, 워드라인 n+2가 제7 패스에서 8개의 레벨들로 프로그램되고, 등등으로 계속될 수 있다. 따라서, 이러한 실시예에서, 각각의 워드라인의 셀들은 타겟 프로그램 레벨들로 프로그램되기 이전에 2개의 프로그래밍 패스들을 통과한다.
다양한 실시예들에서, 제2 프로그래밍 패스가 특정 워드라인 상에서 수행되기 이전에, 제1 프로그래밍 패스에서 프로그램된 하위 페이지(들)가 "사전 판독(pre-read)" 연산에서 판독된다. 각각의 셀의 타겟 프로그램 레벨은 셀 내로 프로그램될 비트들의 조합에 기초하기 때문에, 셀들의 타겟 프로그램 레벨들을 결정하기 위해, 하위 페이지(들)의 데이터는 제2 프로그래밍 패스 동안 상위 페이지(들)의 데이터와 조합하여 액세스된다. 다양한 실시예들에서, 하위 페이지(들)의 데이터가 제1 프로그래밍 패스 이전에 로드될 때, 이것은 워드라인의 셀들 내로 프로그램되는 값들을 제어하는 (래치들의 하나 이상의 세트와 같은) 메모리 엘리먼트들에 저장될 수 있다. 그러나, 제2 프로그래밍 패스 이전에, 값들이 손실될 수 있다(예를 들어, 메모리 엘리먼트들은 제1 프로그래밍 패스와 제2 프로그래밍 패스 사이에서 하나 이상의 다른 워드라인 또는 그들의 일부분들에 기입될 하나 이상의 다른 페이지에 의해 오버라이트될 수 있음). 따라서, 셀들의 그룹 상에서 제2 프로그래밍 패스를 수행하기 이전에, 하위 페이지(들)는 셀들의 그룹으로부터 사전 판독되고 메모리 엘리먼트들에 저장된다. 추가 메모리 엘리먼트들은 상위 페이지(들)를 저장할 수 있고 하위 페이지(들) 및 상위 페이지들(들)의 값들은 셀들을 그들의 적절한 프로그램 레벨들로 이동시키도록 제2 프로그래밍 패스 동안 서로 함께 사용된다.
상위 페이지(들)는 하나 이상의 데이터 로드 커맨드를 포함할 수 있는 데이터 로드 연산을 통해 수신될 수 있다. 데이터 로드 커맨드와 함께, 저장 디바이스 제어기(118)는 데이터가 프로그램될 어드레스 및 프로그램될 데이터(예를 들어, 페이지)를 수신할 수 있다. 다양한 실시예들에서, 데이터 로드 커맨드는 호스트(예를 들어, CPU(102))로부터 (예를 들어, 메모리 모듈(122A)의) 메모리 엘리먼트들로 데이터의 페이지의 로딩이 프로그래밍 패스 동안 사용될 것을 지시한다.
다양한 시스템들에서, 셀들의 그룹에 이미 저장되어 있는 하위 페이지(들)의 사전 판독은 그러한 셀들을 목적지로 하는 상위 페이지(들)의 데이터 모두가 로드된 이후에 수행된다. 그러나, 이러한 시스템들은 프로그래밍 시퀀스에 불필요한 레이턴시를 도입한다. 본 명세서에서의 다양한 실시예들은 프로그램 시간을 감소시키기 위해 데이터 로드 연산의 완료 이전에 사전 판독 연산을 착수하기 위한 방법들 및 시스템들을 제공한다.
도 5는 특정 실시예들에 따른 TLC NAND 플래시 메모리 셀들의 제2 프로그래밍 패스에 대한 사전 판독 연산 및 데이터 로드 연산의 예시적인 시퀀스를 도시한다. 도시되는 실시예에서, 커맨드 라인(502), 판독/비지(read/busy) 라인(504), 및 내부 연산들 506 및 508이 도시된다. 이러한 실시예에서는, LP가 제1 패스 동안 프로그램되었다고 가정된다.
커맨드 라인(502)은 저장 디바이스 제어기(118)가 호스트로부터 커맨드 신호들 및 데이터 신호들을 수신할 수 있는 하나 이상의 통신 채널을 포함할 수 있다. 도시되는 실시예에서는, 2개의 데이터 로드 커맨드들이 도시되고, 제1 데이터 로드 커맨드는 연산들 510 내지 514를 포함하고 제2 데이터 로드 커맨드는 연산들 515 내지 519를 포함한다. 특정 실시예에서, 연산은 저장 디바이스(106A)의 하나 이상의 클록 사이클을 점유한다. 연산 510에서, 데이터 로드 커맨드의 시작을 표시하는 신호들(예를 들어, 80h 명령어와 같은 데이터 입력 커맨드)이 수신된다. 연산 511에서, 상위 페이지의 어드레스가 수신된다. 예를 들어, 도시되는 실시예에서, XP의 어드레스가 511에서 수신된다. 연산들 512 및 513 동안, 상위 페이지(예를 들어, XP)를 포함하는 데이터가 수신된다. XP의 데이터의 임의의 적합한 수의 세트들이 연산들 512 및 513 사이에서 커맨드 라인(502)을 통해 전송될 수 있다. 514에서, 데이터 로드 커맨드의 종료를 표시하는 신호들(예를 들어, 10h 명령어와 같은 프로그램 커맨드)이 수신된다. 연산 514는 어드레스에 대응하는 메모리 모듈(122A)의 메모리 엘리먼트들 내로의 상위 페이지(예를 들어, XP) 데이터의 로딩을 트리거할 수 있다.
다양한 실시예들에서, 메모리 모듈(122A)은 데이터 로드 커맨드를 통해 호스트로부터 로드되는 데이터를 수신하기 위해 저장 디바이스 제어기(118)와 인터페이스하는 메모리 엘리먼트들(예를 들어, 래치들)의 세트(이하, "로드 메모리 엘리먼트 세트(load memory element set)"라고 지칭됨)를 포함할 수 있다. 다양한 실시예들에서, 이러한 메모리 엘리먼트들은, SDC 래치들과 같은, 래치들의 세트를 포함할 수 있다. 메모리 모듈(122A)은 데이터 로드 커맨드를 통해 호스트로부터 로드되는 데이터를 수신하기 위해 저장 디바이스 제어기(118)와 인터페이스하지 않고 사전 판독 연산 동안 판독된 데이터를 저장할 수 있거나 또는 로드 메모리 엘리먼트 세트에 저장된 데이터의 사본을 수신 및 저장할 수 있는 메모리 엘리먼트들(예를 들어, 래치들)의 하나 이상의 세트를 또한 포함할 수 있다. 다양한 실시예들에서, 이러한 메모리 엘리먼트들은, PDC 래치들과 같은, 래치들의 하나 이상의 세트를 포함할 수 있다. 따라서, 데이터의 2개 이상의 페이지들이 프로그래밍 패스 이전에 로드될 것일 때, 제1 페이지는 로드 메모리 엘리먼트 세트에서 로드되고 다음으로 메모리 모듈(122A)의 메모리 엘리먼트들의 다른 세트에 복사되어 로드 메모리 엘리먼트 세트에 로드될 데이터의 추가 페이지를 위한 자리를 마련할 수 있다. 따라서, 도시되는 실시예에서, 제1 데이터 로드 커맨드가 완료된 이후에, 제2 데이터 로드 커맨드 동안 수신되는 데이터가 로드 메모리 엘리먼트 세트 내로 로드될 수 있도록 XP 데이터가 로드 메모리 엘리먼트로부터 다른 메모리 엘리먼트 세트 내로 복사되는 연산 506이 발생된다. 다양한 실시예들에서, XP 데이터가 로드 메모리 엘리먼트 세트로부터 복사되고 있는 동안, 로드 메모리 엘리먼트 세트는 새로운 데이터를 수락할 수 없다. 따라서, 판독/비지 라인(504)은 복사 연산 506의 시작에서 로우가 되어 새로운 데이터가 수락될 수 없다는 것을 호스트에 시그널링한다.
복사 연산의 완료 시에, 판독/비지 라인(504)은 다시 자신의 이전 상태로 천이하고, 추가 데이터 로드 커맨드가 수신될 수 있고 추가 상위 페이지(예를 들어, UP)가 로드 메모리 엘리먼트 세트 내로 로드될 수 있다(일부 실시예들에서는, XP 데이터의 복사가 완료되기 이전에 UP 데이터의 로딩과 연관된 데이터 로드 커맨드가 시작될 수 있고 그 이유는 판독/비지 라인이 호스트에 연결되더라도 데이터 로드 커맨드의 종료시에 로드 메모리 엘리먼트 세트로의 실제 로드가 발생할 수 있기 때문이고, 호스트는 이러한 라인이 추가 데이터 로드 커맨드를 전송할 때까지 대기할 수 있음). 연산 515에서는, 데이터 로드 커맨드의 시작을 표시하는 신호들(예를 들어, 80h 명령어)이 수신된다. 연산 516에서는, 상이한 상위 페이지의 어드레스가 수신된다. 예를 들어, 도시되는 실시예에서는, 516에서 UP의 어드레스가 수신된다. 연산들 517 및 518 동안, UP를 포함하는 데이터가 수신된다. UP의 데이터를 포함하는 데이터의 임의의 적합한 수의 세트들이 연산들 517 및 518 사이에서 커맨드 라인(502)을 통해 전송될 수 있다. 519에서는, 데이터 로드 커맨드의 종료를 표시하는 신호들(예를 들어, 10h 명령어)이 수신된다. 연산 519는 UP의 어드레스에 대응하는 메모리 모듈(122A)의 로드 메모리 엘리먼트 세트 내로의 UP 데이터의 로딩을 트리거할 수 있다.
다양한 실시예들에서, 하위 페이지(들)의 사전 판독은 데이터 로드 연산의 완료 이전에(즉, 데이터 로드 연산의 최종 데이터 로드 커맨드의 종료 이전에) 착수된다. 특정 실시예들에서, 하위 페이지(들)의 사전 판독은 하나 이상의 데이터 로드 커맨드의 적어도 일부분과 병렬로 수행된다(예를 들어, 도시되는 실시예에서는 LP 데이터의 사전 판독이 제2 데이터 로드 커맨드와 동시에 발생하고 있고 다른 실시예들에서는 데이터 판독의 적어도 일부가 제1 데이터 로드 커맨드와 병렬로 발생할 수 있음). 일부 실시예들에서, 하위 페이지(들) 데이터의 사전 판독은 데이터 로드 연산의 완료 이전에(즉, 최종 데이터 로드 커맨드가 마무리되기 이전에) 완료될 수 있다. 도시되는 실시예에서, LP 데이터의 사전 판독은 로드 메모리 엘리먼트 세트로부터 XP 데이터가 복사된 이후에 시작되지만, 하위 페이지(들) 데이터의 사전 판독은 일단 판독될 LP 데이터의 위치가 확인되면 임의의 적합한 시간에 트리거될 수 있다. 일 실시예에서, 하위 페이지(들) 데이터의 위치는 데이터 로드 커맨드의 상위 페이지(예를 들어, 도시되는 실시예에서의 XP 또는 UP)의 어드레스에 기초하여 확인된다. 예를 들어, 상위 페이지의 어드레스는 사전 판독 연산에서 판독될 하위 페이지(들)를 저장하는 메모리 셀들의 동일한 그룹인 상위 페이지가 프로그램될 메모리 셀들의 그룹을 식별할 수 있다.
사전 판독 연산은 임의의 적합한 시간에 트리거될 수 있다. 다양한 예들로서, 상위 페이지(예를 들어, UP, XP, 또는 TP)의 어드레스가 수신될 때, 상위 페이지(예를 들어, UP, XP, 또는 TP)의 데이터 모두가 수신될 때, 데이터 로드 커맨드의 종료를 나타내는 명령어(예를 들어, 10h 명령어)가 수신될 때, 로드 메모리 엘리먼트 세트로부터의 상위 페이지(예를 들어, UP, XP, 또는 TP)의 복사가 완료될 때, 상이한 상위 페이지의 어드레스가 수신된 이후 상위 페이지의 데이터 입력 커맨드(예를 들어, 80h)가 (예를 들어, 515에서) 수신될 때, 또는 임의의 다른 적합한 시간에 사전 판독 연산이 트리거될 수 있다.
일단 데이터 로드 연산 및 사전 판독 연산이 완료되면, 제2 프로그래밍 패스는 메모리 모듈(122A)의 메모리 엘리먼트 세트들에 저장되는 페이지 데이터에 기초하여 수행될 수 있다.
위 예는 2개의 상위 페이지들이 제2 패스 동안 프로그램되는 TLC 인코딩 스킴을 도시하지만, 본 개시 내용의 다양한 실시예들은, 데이터 로드 연산이 하나의, 2개의, 3개의, 또는 더 많은 상위 페이지들을 로드하는 것을 포함하더라도 그리고 사전 판독 연산이 하나의, 2개의, 3개의, 또는 다른 수의 하위 페이지를 판독하는 것을 포함하더라도, 데이터 로드 연산의 완료 이전에 사전 판독이 착수(및/또는 완료)될 수 있는 임의의 다른 적합한 프로그래밍 시퀀스들을 포함할 수 있다.
(위에 묘사되는 바와 같이) 일 예로서, LP의 사전 판독은 TLC 인코딩 스킴에서 UP 및 XP의 제2 패스 프로그래밍 이전에 데이터 로드 연산 동안 임의의 적합한 시간에 착수될 수 있다. 다른 예로서, LP 및 UP의 사전 판독은 TLC 인코딩 스킴에서 XP의 제2 패스 프로그래밍 이전에 데이터 로드 연산 동안 임의의 적합한 시간에 착수될 수 있다. 다른 예로서, LP 및 UP의 사전 판독은 QLC 인코딩 스킴에서 XP 및 TP의 제2 패스 프로그래밍 이전에 데이터 로드 연산 동안 임의의 적합한 시간에 착수될 수 있다. 다른 예로서, LP, UP, 및 XP의 사전 판독은 QLC 인코딩 스킴에서 TP의 제2 패스 프로그래밍 이전에 데이터 로드 연산 동안 임의의 적합한 시간에 착수될 수 있다.
도 6은 특정 실시예들에 따른 예시적인 메모리 모듈(122A)을 도시한다. 메모리 모듈(122A)은 다양한 실시예들에서 NAND 플래시 메모리 어레이를 포함할 수 있는 메모리 어레이(602)를 포함한다. 메모리 모듈(122A)은 저장 디바이스 제어기(118)의 프로그램 제어 로직(124)과 인터페이스할 수 있고 메모리 어레이(602) 상의 다양한 연산들의 성능을 용이하게 할 수 있는 프로그램 로직(604)을 또한 포함한다.
메모리 모듈(122A)은 로드 메모리 엘리먼트 세트(608) 및 메모리 엘리먼트 세트들(610A 및 610B)을 포함하는 적어도 하나의 페이지 버퍼(606)를 또한 포함한다. 위에 설명된 바와 같이, 로드 메모리 엘리먼트 세트(608)는 호스트로부터 추가 데이터를 로드할 자리를 마련하기 위해 호스트로부터 로드되는 데이터를 저장하고 이러한 데이터를 다른 메모리 엘리먼트 세트들(610A 또는 610B) 중 하나에 복사하도록 동작 가능할 수 있다. 610A 또는 610B 중 어느 하나는 사전 판독 연산 동안 하위 페이지 판독을 저장하도록 동작 가능할 수 있다. 도 6에 도시되는 메모리 엘리먼트 세트들은, 래치들, 플립 플롭들, 또는 다른 메모리 엘리먼트들과 같은, 임의의 적합한 타입의 메모리 엘리먼트들을 사용하여 구현될 수 있다. 다른 실시예들에서, 메모리 모듈(122A)은 추가 메모리 엘리먼트 세트들을 가질 수 있다(예를 들어, QLC 스킴의 제2 프로그래밍 패스 동안 상이한 페이지들을 보유하는데 4개의 메모리 세트들이 사용될 것임).
도 7은 특정 실시예들에 따른 데이터 로드 연산의 완료 이전에 사전 판독 연산을 착수하기 위한 예시적인 흐름(700)을 도시한다. 흐름(700)은, 저장 디바이스 제어기(118), 메모리(116), 및/또는 메모리 모듈(122A)과 같은, 임의의 적합한 로직에 의해 수행될 수 있는 예시적인 연산들을 도시한다.
702에서는, 하나 이상의 하위 페이지가 로드된다. 일 예로서, LP가 로드된다. 다른 예로서, LP 및 UP가 로드된다. 또 다른 예로서, LP, UP, 및 XP가 로드된다. 로드하는 것은 호스트로부터 데이터를 수신하는 것 및 하위 페이지(들)가 저장될 셀들의 타겟 프로그램 레벨들을 제어하는데 사용될 수 있는 하나 이상의 메모리 엘리먼트 세트들에 데이터를 배치하는 것을 포함할 수 있다. 704에서는, 하위 페이지(들)이 제1 프로그래밍 패스에서 프로그램된다.
706에서는, 데이터 로드 연산과 연관하여 어드레스가 수신된다. 예를 들어, 어드레스는 데이터 로드 연산의 데이터 로드 커맨드에서 수신될 수 있다(데이터 로드 연산은 데이터 로드 연산 동안 로드되는 각각의 상위 페이지에 대한 데이터 로드 커맨드를 포함할 수 있음). 어드레스는 데이터 로드 커맨드에 의해 명시되는 데이터를 저장하는 메모리 셀들의 그룹을 명시할 수 있다. 다양한 실시예들에서, 어드레스는 저장 디바이스 제어기(118)에 의해 물리 어드레스로 변환되는 가상 어드레스일 수 있다. 특정 실시예에서, 다수의 가상 어드레스들은 동일한 물리 어드레스에 대응할 수 있다(예를 들어, 셀들의 동일한 그룹에 저장될 UP 및 XP에 대한 가상 어드레스들은 동일한 물리 어드레스로 변환될 수 있음). 상위 페이지(들)가 저장될 물리 어드레스는 메모리 셀들의 그룹에 저장되는 하위 페이지(들)를 액세스하기 위해 사전 판독 연산이 수행될 메모리 셀들의 그룹을 표시한다.
708에서는, 수신된 어드레스와 연관된 메모리 셀들에 저장되는 하위 페이지(들)가 사전 판독 연산에서 판독된다. 710에서는, 상위 페이지(들)가 데이터 로드 연산 동안 로드된다. 이러한 연산들은 일부 실시예들에서 사전 판독 연산의 적어도 일부분이 상위 페이지(들)의 로딩의 적어도 일부분과 동시에 수행될 수 있는 바와 같이 병렬로 도시된다. 다양한 실시예들에서, 사전 판독 연산은 모든 상위 페이지(들)가 로딩을 마무리하기 이전에 완료된다. XP; UP 및 XP; TP; XP 및 TP; UP, XP, 및 TP; 또는 상위 페이지들의 다른 적합한 조합과 같은, 임의의 적합한 상위 페이지들이 이러한 단계에서 로드될 수 있다. 712에서는, 상위 페이지(들)이 제2 프로그래밍 패스에서 프로그램된다.
도 7에 설명되는 흐름은 특정 실시예들에서 발생할 수 있는 연산들을 표현하는 것에 불과하다. 다른 실시예들에서, 시스템(100)의 컴포넌트들에 의해 추가 연산들이 수행될 수 있다. 본 개시 내용의 다양한 실시예들은 본 명세서에 설명되는 기능들을 달성하기 위한 임의의 적합한 시그널링 메커니즘들을 고려한다. 도 7에 도시되는 연산들 중 일부는 적절한 경우 반복, 조합, 수정 또는 삭제될 수 있다. 추가로, 특정 실시예들의 범위를 벗어나지 않고 연산들이 임의의 적합한 순서로 수행될 수 있다.
다양한 실시예들이 특정 인코딩 스킴들(예를 들어, MLC, TLC, QLC)에 관하여 설명되었더라도, 이러한 실시예들의 교시들은, 장래에 실현 가능하게 되는 인코딩 스킴들을 포함하는, 임의의 적합한 인코딩 레벨들을 사용하여 메모리들에 동등하게 적용 가능할 수 있다.
설계는 제조에 대한 생성으로부터 시뮬레이션까지 다양한 단계들을 거쳐갈 수 있다. 설계를 표현하는 데이터는 다수의 방식들로 설계를 표현할 수 있다. 먼저, 시뮬레이션들에 유용한 것으로서, 하드웨어는 HDL(hardware description language) 또는 다른 기능적 설명 언어를 사용하여 표현될 수 있다. 추가로, 로직 및/또는 트랜지스터 게이트들이 있는 회로 레벨 모델이 설계 프로세스의 일부 단계들에서 생산될 수 있다. 더욱이, 대부분의 설계들은, 일부 단계에서, 하드웨어 모델에서의 다양한 디바이스들의 물리적 배치를 표현하는 데이터의 레벨에 도달한다. 종래의 반도체 제조 기술들이 사용되는 경우, 하드웨어 모델을 표현하는 데이터는 집적 회로를 생산하는데 사용되는 마스크들에 대한 상이한 마스크 레이어들 상의 다양한 특징들의 존재 또는 부재를 명시하는 데이터일 수 있다. 일부 구현들에서, 이러한 데이터는 GDS II(Graphic Data System II), OASIS(Open Artwork System Interchange Standard) 또는 유사한 포맷과 같은 데이터베이스 파일 포맷으로 저장될 수 있다.
일부 구현들에서, 소프트웨어 기반 하드웨어 모델들, 및 HDL 및 다른 기능적 설명 언어 객체들은, 다른 예들 중에서도, RTL(register transfer language) 파일들을 포함할 수 있다. 이러한 객체들은 설계 도구가 HDL 객체(또는 모델)를 수락하고, 설명된 하드웨어의 속성들에 대한 HDL 객체를 파싱(parse)하고, 그 객체로부터 물리 회로 및/또는 온-칩 레이아웃을 결정할 수 있도록 머신-파싱 가능한 것일 수 있다. 설계 도구의 출력은 물리 디바이스를 제조하는데 사용될 수 있다. 예를 들어, 설계 도구는, HDL 객체로 모델링되는 시스템을 실현하기 위해 구현되는 다른 속성들 중에서, 버스 폭들, (크기들 및 타입들을 포함하는) 레지스터들, 메모리 블록들, 물리 링크 경로들, 패브릭 토폴로지들과 같은, 다양한 하드웨어 및/또는 펌웨어 엘리먼트들의 구성들을 HDL 객체로부터 결정할 수 있다. 설계 도구들은 SoC(system on chip) 및 다른 하드웨어 디바이스의 토폴로지 및 패브릭 구성들을 결정하기 위한 도구들을 포함할 수 있다. 일부 경우들에서, HDL 객체는 설명된 하드웨어를 제조하기 위해 제조 장비에 의해 사용될 수 있는 모델들 및 설계 파일들을 개발하기 위한 기반으로서 사용될 수 있다. 실제로, HDL 객체 자체는 설명된 하드웨어를 야기하기 위한 제조 시스템 소프트웨어에 대한 입력으로서 제공될 수 있다.
설계의 임의의 표현에서, 이러한 데이터는 임의의 형태의 머신 판독 가능 매체에 저장될 수 있다. 메모리 또는 디스크와 같은 자기 또는 광학 스토리지는, 이러한 정보를 송신하기 위해 변조되거나 또는 다른 방식으로 생성되는 광학 또는 전기적 파동을 통해 송신되는 정보를 저장하는 머신 판독 가능 매체일 수 있다. 코드 또는 설계를 표시하거나 반송하는 전기 반송파가 송신될 때, 전기 신호의 복사, 버퍼링, 또는 재-송신이 수행되는 한, 새로운 사본이 만들어진다. 따라서, 통신 제공자 또는 네트워크 제공자는, 본 개시 내용의 실시예들의 기술들을 구현하는, 반송파 내에 인코딩되는 정보와 같은, 항목(article)을 유형의 머신 판독 가능 매체 상에 적어도 일시적으로 저장할 수 있다.
본 명세서에 사용되는 바와 같은 모듈은 하드웨어, 소프트웨어, 및/또는 펌웨어의 임의의 조합을 지칭한다. 예로서, 모듈은, 마이크로컨트롤러에 의해 실행되도록 적응되는 코드를 저장하는 비-일시적 매체와 연관된, 마이크로-컨트롤러와 같은, 하드웨어를 포함한다. 따라서, 모듈에 대한 참조는, 일 실시예에서, 비-일시적 매체 상에 유지될 코드를 인식 및/또는 실행하도록 구체적으로 구성되는, 하드웨어를 지칭한다. 더욱이, 다른 실시예에서, 모듈의 사용은, 미리 결정된 연산들을 수행하기 위해 마이크로컨트롤러에 의해 실행되도록 구체적으로 적응되는, 코드를 포함하는 비-일시적 매체를 지칭한다. 그리고, 추론될 수 있는 바와 같이, 또 다른 실시예에서, (이러한 예에서의) 모듈이라는 용어는 마이크로컨트롤러와 비-일시적 매체의 조합을 지칭할 수 있다. 별개로서 도시되는 모듈 경계들은 종종 통상적으로 변하고 잠재적으로 중첩된다. 예를 들어, 제1 및 제2 모듈은, 일부 독립적인 하드웨어, 소프트웨어, 또는 펌웨어를 잠재적으로 보유하면서, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합을 공유할 수 있다. 일 실시예에서, 로직이라는 용어의 사용은, 트랜지스터들, 레지스터들과 같은 하드웨어, 또는 프로그램 가능 로직 디바이스들과 같은 다른 하드웨어를 포함한다.
로직은 CPU(102), 외부 I/O 제어기(104), 프로세서(108), 코어들(114A 및 114B), I/O 제어기(110), CPU 메모리 제어기(112), 저장 디바이스(106A), 시스템 메모리 디바이스(107), 메모리(116), 메모리 모듈들(122A-D), 저장 디바이스 제어기(118), 어드레스 변환 엔진(120), 프로그램 제어 로직(124), 감지 회로(220), 프로그램 로직(604), 또는 본 명세서에 설명되는 다른 엔티티 또는 컴포넌트와 같은 다양한 컴포넌트들의 기능성 중 임의의 것을 구현하는데 사용될 수 있다. "로직(logic)"은 하나 이상의 기능을 수행하기 위해 하드웨어, 펌웨어, 소프트웨어, 및/또는 각각의 조합들을 지칭할 수 있다. 다양한 실시예들에서, 로직은 소프트웨어 명령어들을 실행하도록 동작 가능한 마이크로프로세서 또는 다른 처리 엘리먼트, ASIC(application specific integrated circuit)과 같은 개별 로직(discrete logic), FPGA(field programmable gate array)와 같은 프로그램되는 로직 디바이스, 명령어들을 포함하는 스토리지 디바이스, (예를 들어, 인쇄 회로 보드 상에서 발견되는 것과 같은) 로직 디바이스들의 조합들, 또는 다른 적합한 하드웨어 및/또는 소프트웨어를 포함할 수 있다. 로직은 하나 이상의 게이트 또는 다른 회로 컴포넌트들을 포함할 수 있다. 일부 실시예들에서, 로직은 또한 전적으로 소프트웨어로서 구현될 수 있다. 소프트웨어는 비-일시적 컴퓨터 판독 가능 저장 매체에 기록되는 소프트웨어 패키지, 코드, 명령어들, 명령어 세트 및/또는 데이터로서 구현될 수 있다. 펌웨어는 저장 디바이스들에서 하드-코딩되는 (예를 들어, 비-휘발성인) 코드, 명령어들 또는 명령어 세트들 및/또는 데이터로서 구현될 수 있다.
'~하도록(to)' 또는 '~하도록 구성되는(configured to)'이라는 구문의 사용은, 일 실시예에서, 장치, 하드웨어, 로직 또는 엘리먼트가 지정된 또는 결정된 태스크를 수행하도록 배열, 조립, 제조, 판매의 제공, 임포팅 및/또는 설계하는 것을 지칭한다. 이러한 예에서, 동작 중이지 않은 장치 또는 그 엘리먼트는, 상기 지정된 태스크를 수행하도록 설계, 연결, 및/또는 인터커넥트된다면 여전히 지정된 태스크를 수행하도록 '구성되는' 것이다. 전적으로 예시적인 예로서, 로직 게이트는 동작 동안 0 또는 1을 제공할 수 있다. 그러나, 클록에 인에이블 신호를 제공하도록 '구성되는' 로직 게이트가 1 또는 0을 제공할 수 있는 모든 잠재적인 로직 게이트를 포함하는 것은 아니다. 그 대신에, 로직 게이트는, 동작 동안 1 또는 0 출력이 클록을 인에이블시키는 일부 방식으로 연결되는 것이다. '~하도록 구성되는'이라는 용어의 사용은 동작을 요구하는 것이 아니라, 대신에 장치, 하드웨어, 및/또는 엘리먼트의 잠재적 상태에 중점을 두는 것이며, 잠재적 상태에서 장치, 하드웨어, 및/또는 엘리먼트는 그 장치, 하드웨어, 및/또는 엘리먼트가 동작할 때 특정 태스크를 수행하도록 설계된다는 점에 다시 한 번 주목한다.
더욱이, '할 수 있는/하는(capable of/to)', 및/또는 '하도록 동작 가능한(operable to)'이라는 문구들의 사용은, 일 실시예에서, 장치, 로직, 하드웨어, 및/또는 엘리먼트의 사용을 명시된 방식으로 가능하게 하는 방식으로 설계되는 일부 장치, 로직, 하드웨어, 및/또는 엘리먼트를 지칭한다. '~하는(to)', '~할 수 있는(capable to)', 또는 '~하도록 동작 가능한(operable to)'의 사용은, 일 실시예에서, 장치, 로직, 하드웨어, 및/또는 엘리먼트의 잠재적인 상태를 지칭하며, 장치, 로직, 하드웨어, 및/또는 엘리먼트는 동작 중이지는 않지만 명시된 방식으로 장치의 사용을 가능하게 하는 방식으로 설계된다는 점을 위와 같이 주목한다.
본 명세서에서 사용되는 바와 같이, 값은 숫자, 상태, 논리 상태, 또는 바이너리 논리 상태의 임의의 알려진 표현을 포함한다. 종종, 로직 레벨들(logic levels), 로직 값들(logic values), 또는 로직 값(logical values)의 사용은, 단순히 바이너리 로직 상태들을 표현하는, 1들 및 0들이라고 또한 지칭된다. 예를 들어, 1은 하이 로직 레벨을 지칭하고 0은 로우 로직 레벨을 지칭한다. 일 실시예에서, 트랜지스터 또는 플래시 셀과 같은 저장 셀은 단일의 논리 값 또는 다수의 논리 값들을 보유할 수 있다. 그러나, 컴퓨터 시스템들에서의 값들의 다른 표현들이 사용되어 왔다. 예를 들어, 10진수 10은 1010의 바이너리 값 및 16진법 문자 A로서 또한 표현될 수 있다. 따라서, 값은 컴퓨터 시스템에 보유될 수 있는 정보의 임의의 표현을 포함한다.
더욱이, 상태들은 값들 또는 값들의 부분들에 의해 표현될 수 있다. 예로서, 논리 1과 같은 제1 값은 디폴트 또는 초기 상태를 표현할 수 있고, 한편 논리 제로와 같은 제2 값은 디폴트가 아닌 상태를 표현할 수 있다. 또한, 재설정 및 설정이라는 용어는, 일 실시예에서, 각각, 디폴트 및 업데이트된 값 또는 상태를 지칭한다. 예를 들어, 디폴트 값은 하이 논리 값, 즉 재설정을 잠재적으로 포함하고, 한편 업데이트된 값은 로우 논리 값, 즉 설정을 잠재적으로 포함한다. 임의 수의 상태들을 표현하는데 값들의 임의의 조합이 사용될 수 있다는 점을 주목한다.
위에 제시된 방법들, 하드웨어, 소프트웨어, 펌웨어 또는 코드의 실시예들은 처리 엘리먼트에 의해 실행 가능한 머신-액세스 가능, 머신 판독 가능, 컴퓨터 액세스 가능, 또는 컴퓨터 판독 가능 매체 상에 저장되는 명령어들 또는 코드를 통해 구현될 수 있다. 비-일시적 머신 액세스 가능/판독 가능 매체는 컴퓨터 또는 전자 시스템과 같은 머신에 의해 판독 가능한 형태로 정보를 제공하는(즉, 저장 및/또는 송신하는) 임의의 메커니즘을 포함한다. 예를 들어, 비-일시적 머신 액세스 가능 매체는, SRAM(static RAM) 또는 DRAM(dynamic RAM)과 같은, RAM(random-access memory); ROM; 자기 또는 광학 저장 매체; 플래시 저장 디바이스들; 전기 저장 디바이스들; 광학 저장 디바이스들; 음향 저장 디바이스들; 일시적 (전파된) 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들)로부터 수신되는 정보를 보유하기 위한 다른 형태의 저장 디바이스들; 등을 포함하며, 이들은 그로부터 정보를 수신할 수 있는 비-일시적 매체들로부터 구별되어야 한다.
본 개시 내용의 실시예들을 수행하도록 로직을 프로그램하는 데 사용되는 명령어들은, DRAM, 캐시, 플래시 메모리, 또는 다른 스토리지와 같은, 시스템에서의 메모리 내에 저장될 수 있다. 더욱이, 이러한 명령어들은 네트워크를 통해 또는 다른 컴퓨터 판독 가능 매체에 의해 분배될 수 있다. 따라서, 머신 판독 가능 매체는 머신(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장하거나 송신하기 위한 임의의 메커니즘, 이에 제한되는 것은 아니지만, 플로피 디스켓들, 광학 디스크들, CD-ROM들(Compact Disc, Read-Only Memory), 및 광자기 디스크들, ROM들(Read-Only memory), RAM(Random Access Memory), EPROM(Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광학 카드들, 플래시 메모리, 또는 전기, 광학, 음향, 또는 다른 형태들의 전파 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들, 등)을 통해 인터넷을 통하여 정보를 전송하는데 사용되는 유형의, 머신 판독 가능 스토리지를 포함할 수 있다. 따라서, 컴퓨터 판독 가능 매체는, 머신(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 전자 명령어들 또는 정보를 저장하거나 송신하기에 적합한 임의 타입의 유형의 머신 판독 가능 매체를 포함한다.
적어도 하나의 실시예에서, 장치는 NAND 플래시 메모리 어레이를 포함하는 저장 디바이스를 포함하고, 저장 디바이스는, 제1 프로그래밍 패스 동안, 데이터의 제1 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하고; 제2 프로그래밍 패스 동안 복수의 셀들로 프로그램될 데이터의 제2 페이지의 로딩을 완료하기 이전에 데이터의 제1 페이지의 판독을 착수하고; 제2 프로그래밍 패스 동안, 데이터의 제1 페이지 및 데이터의 제2 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램한다.
실시예에서, 저장 디바이스는 추가로 데이터의 제2 페이지의 로딩의 완료 이전에 데이터의 제1 페이지의 판독을 완료한다. 실시예에서, 저장 디바이스는 추가로 데이터의 제3 페이지를 로드하고, 제2 프로그래밍 패스 동안, 데이터의 제3 페이지를 또한 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그래밍한다. 실시예에서, 저장 디바이스는 추가로, 제1 프로그래밍 패스 동안, 데이터의 제3 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하고; 제2 프로그래밍 패스 동안 프로그램될 데이터의 제2 페이지의 로딩의 완료 이전에 데이터의 제1 페이지의 판독을 착수하는 것은 데이터의 제3 페이지의 판독을 또한 착수한다. 실시예에서, 저장 디바이스는 데이터의 제2 페이지의 어드레스를 수신하는 것에 응답하여 데이터의 제1 페이지의 판독을 착수한다. 실시예에서, 저장 디바이스는 제2 프로그래밍 패스 동안 프로그램될 데이터의 제3 페이지의 어드레스를 수신하는 것에 응답하여 데이터의 제1 페이지의 판독을 착수한다. 실시예에서, 저장 디바이스는 데이터의 제2 페이지 모두가 수신되었다는 결정에 응답하여 데이터의 제1 페이지의 판독을 착수한다. 실시예에서, 저장 디바이스는 데이터의 제2 페이지가 메모리 래치들의 제1 세트로부터 메모리 래치들의 제2 세트로 복사되었다는 표시에 응답하여 데이터의 제1 페이지의 판독을 착수한다. 실시예에서, 저장 디바이스는 데이터의 제3 페이지와 연관된 프로그램 명령어를 수신하는 것에 응답하여 데이터의 제1 페이지의 판독을 착수한다. 실시예에서, 저장 디바이스는 데이터의 제2 페이지가 호스트로부터 로드되고 있는 동안 데이터의 제1 페이지를 판독한다. 실시예에서, 저장 디바이스는 추가로 데이터의 제2 페이지를 메모리 모듈의 제1 래치 세트에 로드하고, 제2 프로그래밍 패스 이전에 데이터의 제2 페이지를 메모리 모듈의 제1 래치 세트로부터 제2 래치 세트로 복사한다. 실시예에서, 저장 디바이스는 추가로 제2 프로그래밍 패스 이전에 제1 래치 세트 내로 데이터의 제3 페이지를 로드하고, 제2 프로그래밍 패스는 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들로 하여금 데이터의 제3 페이지를 추가로 저장하게 한다.
적어도 하나의 실시예에서, 방법은, 제1 프로그래밍 패스 동안, 데이터의 제1 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하는 단계; 제2 프로그래밍 패스 동안 복수의 셀들로 프로그램될 데이터의 제2 페이지의 로딩을 완료하기 이전에 데이터의 제1 페이지의 판독을 착수하는 단계; 및, 제2 프로그래밍 패스 동안, 데이터의 제1 페이지 및 데이터의 제2 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하는 단계를 포함한다.
실시예에서, 이러한 방법은 데이터의 제2 페이지의 로딩의 완료 이전에 데이터의 제1 페이지의 판독을 완료하는 단계를 추가로 포함한다. 실시예에서, 이러한 방법은 데이터의 제3 페이지를 로드하는 단계, 및, 제2 프로그래밍 패스 동안, 데이터의 제3 페이지를 또한 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하는 단계를 추가로 포함한다. 실시예에서, 이러한 방법은, 제1 프로그래밍 패스 동안, 데이터의 추가 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하는 단계를 추가로 포함하고; 제2 프로그래밍 패스 동안 프로그램될 데이터의 제2 페이지의 로딩을 완료하기 이전에 데이터의 제1 페이지의 판독을 착수하는 단계는 데이터의 추가 페이지의 판독을 또한 착수한다. 실시예에서, 이러한 방법은 데이터의 제2 페이지의 어드레스를 수신하는 것에 응답하여 데이터의 제1 페이지의 판독을 착수하는 단계를 추가로 포함한다. 실시예에서, 이러한 방법은 제2 프로그래밍 패스 동안 프로그램될 데이터의 제3 페이지의 어드레스를 수신하는 것에 응답하여 데이터의 제1 페이지의 판독을 착수하는 단계를 추가로 포함한다. 실시예에서, 이러한 방법은 데이터의 제2 페이지 모두가 수신되었다는 결정에 응답하여 데이터의 제1 페이지의 판독을 착수하는 단계를 추가로 포함한다. 실시예에서, 이러한 방법은 데이터의 제2 페이지가 메모리 래치들의 제1 세트로부터 메모리 래치들의 제2 세트로 복사되었다는 표시에 응답하여 데이터의 제1 페이지의 판독을 착수하는 단계를 추가로 포함한다. 실시예에서, 이러한 방법은 데이터의 제3 페이지와 연관된 프로그램 명령어를 수신하는 것에 응답하여 데이터의 제1 페이지의 판독을 착수하는 단계를 추가로 포함한다. 실시예에서, 이러한 방법은 데이터의 제2 페이지가 호스트로부터 로드되고 있는 동안 데이터의 제1 페이지를 판독하는 단계를 추가로 포함한다. 실시예에서, 이러한 방법은 데이터의 제2 페이지를 메모리 모듈의 제1 래치 세트에 로드하는 단계 및 제2 프로그래밍 패스 이전에 데이터의 제2 페이지를 메모리 모듈의 제1 래치 세트로부터 제2 래치 세트로 복사하는 단계를 추가로 포함한다. 실시예에서, 이러한 방법은 제2 프로그래밍 패스 이전에 제1 래치 세트 내로 데이터의 추가 페이지를 로드하는 단계를 추가로 포함하고, 제2 프로그래밍 패스는 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들로 하여금 데이터의 추가 페이지를 추가로 저장하게 한다. 실시예에서, 시스템은 이러한 방법들 중 임의의 것을 수행하는 수단을 포함한다. 실시예에서, 이러한 수단은 실행될 때 머신으로 하여금 이러한 방법들 중 임의의 것의 하나 이상의 단계를 수행하게 하는 머신 판독 가능 코드를 포함한다. 실시예에서, 이러한 시스템은 프로세서에 통신 가능하게 연결되는 배터리, 프로세서에 통신 가능하게 연결되는 디스플레이, 또는 프로세서에 통신 가능하게 연결되는 네트워크 인터페이스를 추가로 포함한다.
적어도 하나의 실시예에서, 시스템은 데이터 로드 커맨드들을 저장 디바이스에 전송하는 프로세서; 적어도 하나의 NAND 플래시 메모리 어레이를 포함하는 NAND 플래시 메모리; 저장 디바이스 제어기를 포함하는 저장 디바이스를 포함하고, 이러한 저장 디바이스 제어기는, 제1 프로그래밍 패스 동안, 데이터의 제1 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램되게 하고; 제2 프로그래밍 패스 동안 복수의 셀들로 프로그램될 데이터의 제2 페이지의 로딩을 완료하기 이전에 데이터의 제1 페이지의 판독을 착수하고; 제2 프로그래밍 패스 동안, 데이터의 제1 페이지 및 데이터의 제2 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드 라인의 복수의 셀들을 프로그램되게 한다.
실시예에서, 데이터의 제1 페이지의 판독은 데이터의 제2 페이지의 로딩의 완료 이전에 완료된다. 실시예에서, 저장 디바이스 제어기는 추가로 데이터의 제3 페이지를 로드하고, 제2 프로그래밍 패스 동안, 데이터의 제3 페이지를 또한 저장하도록 NAND 플래시 메모리 디바이스의 제1 워드라인의 복수의 셀들을 프로그램하게 된다. 실시예에서, 이러한 시스템은 프로세서에 통신 가능하게 연결되는 배터리, 프로세서에 통신 가능하게 연결되는 디스플레이, 또는 프로세서에 통신 가능하게 연결되는 네트워크 인터페이스 중 하나 이상을 추가로 포함한다.
적어도 하나의 실시예에서, 시스템은, 제1 프로그래밍 패스 동안, 데이터의 제1 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하기 위한 수단; 제2 프로그래밍 패스 동안 복수의 셀들로 프로그램될 데이터의 제2 페이지의 로딩의 완료 이전에 데이터의 제1 페이지의 판독을 착수하기 위한 수단; 제2 프로그래밍 패스 동안, 데이터의 제1 페이지 및 데이터의 제2 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하기 위한 수단을 포함한다.
실시예에서, 데이터의 제1 페이지의 판독은 데이터의 제2 페이지의 로딩의 완료 이전에 완료된다. 실시예에서, 시스템은 데이터의 제3 페이지를 로드하는 수단 및, 제2 프로그래밍 패스 동안, 데이터의 제3 페이지를 또한 저장하도록 NAND 플래시 메모리 디바이스의 제1 워드라인의 복수의 셀들을 프로그램하는 수단을 추가로 포함한다. 실시예에서, 시스템은 제1 프로그래밍 패스 동안, 데이터의 제3 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하는 수단을 추가로 포함하고; 제2 프로그래밍 패스 동안 프로그램될 데이터의 제2 페이지의 로딩을 완료하기 이전에 데이터의 제1 페이지의 판독을 착수하는 것은 또한 데이터의 제3 페이지의 판독을 착수한다. 실시예에서, 데이터의 제1 페이지의 판독은 데이터의 제2 페이지의 어드레스를 수신하는 것에 응답하여 착수된다.
본 명세서 전반적으로 "일 실시예(one embodiment)" 또는 "실시예(an embodiment)"를 참조하는 것은, 해당 실시예와 관련하여 설명되는 특정 특징, 구조 또는 특성이 본 개시 내용의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서, 본 명세서 전반적으로 다양한 곳들에서 "일 실시예에서(in one embodiment)" 또는 "실시예에서(in an embodiment)"라는 표현들의 출현들은 반드시 모두가 동일한 실시예를 참조하는 것은 아니다. 더욱이, 특정 특징들, 구조들, 또는 특성들은 하나 이상의 실시예에서 임의의 적합한 방식으로 조합될 수 있다.
전술한 명세서에서, 상세한 설명은 구체적인 예시적인 실시예들에 관하여 주어졌다. 그러나, 첨부된 청구항들에서 설명되는 바와 같은 본 개시 내용의 더 넓은 사상 및 범위로부터 벗어나지 않고서 실시예들에 대해 다양한 수정들 및 변경들이 이루어질 수 있다는 것이 명백할 것이다. 본 명세서 및 도면들은, 따라서, 제한적인 의미가 아니라 예시적인 의미로 고려되어야 한다. 더욱이, 실시예 및 다른 예시적인 언어의 전술한 사용은 반드시 동일한 실시예 또는 동일한 예를 참조하는 것은 아니지만, 상이하고 구별되는 실시예들 뿐만 아니라, 잠재적으로 동일한 실시예를 참조할 수 있다.

Claims (25)

  1. 장치로서,
    NAND 플래시 메모리 어레이를 포함하는 저장 디바이스를 포함하고, 상기 저장 디바이스는,
    제1 프로그래밍 패스 동안, 데이터의 제1 페이지를 저장하도록 상기 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하고;
    상기 제1 프로그래밍 패스의 완료 이후에 그리고 제2 프로그래밍 패스 동안 상기 복수의 셀들에 프로그램될 데이터의 제2 페이지의 로딩의 완료 이전에 상기 제1 워드라인의 상기 복수의 셀들로부터 데이터의 상기 제1 페이지의 판독을 착수하고;
    상기 제2 프로그래밍 패스 동안, 데이터의 상기 제1 페이지 및 데이터의 상기 제2 페이지를 저장하도록 상기 NAND 플래시 메모리 어레이의 상기 제1 워드라인의 상기 복수의 셀들을 프로그램하는 장치.
  2. 제1항에 있어서,
    상기 저장 디바이스는 추가로 데이터의 상기 제2 페이지의 로딩의 완료 이전에 데이터의 상기 제1 페이지의 판독을 완료하는 장치.
  3. 제1항에 있어서,
    상기 저장 디바이스는 추가로 데이터의 제3 페이지를 로드하고, 상기 제2 프로그래밍 패스 동안, 데이터의 상기 제3 페이지를 또한 저장하도록 상기 NAND 플래시 메모리 어레이의 상기 제1 워드라인의 상기 복수의 셀들을 프로그램하는 장치.
  4. 제1항에 있어서,
    상기 저장 디바이스는,
    상기 제1 프로그래밍 패스 동안, 데이터의 제3 페이지를 저장하도록 상기 NAND 플래시 메모리 어레이의 상기 제1 워드라인의 상기 복수의 셀들을 프로그램하고;
    상기 제2 프로그래밍 패스 동안 프로그램될 데이터의 제2 페이지의 로딩의 완료 이전에 데이터의 상기 제1 페이지의 판독을 착수하는 것은 데이터의 상기 제3 페이지의 판독을 또한 착수하는 장치.
  5. 제1항에 있어서,
    상기 저장 디바이스는 데이터의 상기 제2 페이지의 어드레스를 수신하는 것에 응답하여 데이터의 상기 제1 페이지의 판독을 착수하는 장치.
  6. 제1항에 있어서,
    상기 저장 디바이스는 상기 제2 프로그래밍 패스 동안 프로그램될 데이터의 제3 페이지의 어드레스를 수신하는 것에 응답하여 데이터의 상기 제1 페이지의 판독을 착수하는 장치.
  7. 제1항에 있어서,
    상기 저장 디바이스는 데이터의 상기 제2 페이지 모두가 수신되었다는 결정에 응답하여 데이터의 상기 제1 페이지의 판독을 착수하는 장치.
  8. 제1항에 있어서,
    상기 저장 디바이스는 데이터의 상기 제2 페이지가 메모리 래치들의 제1 세트로부터 메모리 래치들의 제2 세트로 복사되었다는 표시에 응답하여 데이터의 상기 제1 페이지의 판독을 착수하는 장치.
  9. 제1항에 있어서,
    상기 저장 디바이스는 데이터의 제3 페이지와 연관된 프로그램 명령어를 수신하는 것에 응답하여 데이터의 상기 제1 페이지의 판독을 착수하는 장치.
  10. 제1항에 있어서,
    상기 저장 디바이스는 데이터의 상기 제2 페이지가 호스트로부터 로드되고 있는 동안 데이터의 상기 제1 페이지를 판독하는 장치.
  11. 제1항에 있어서,
    상기 저장 디바이스는 추가로 데이터의 상기 제2 페이지를 메모리 모듈의 제1 래치 세트 내로 로드하고, 상기 제2 프로그래밍 패스 이전에 데이터의 상기 제2 페이지를 상기 제1 래치 세트로부터 상기 메모리 모듈의 제2 래치 세트로 복사하는 장치.
  12. 제11항에 있어서,
    상기 저장 디바이스는 추가로 상기 제2 프로그래밍 패스 이전에 데이터의 제3 페이지를 상기 제1 래치 세트 내로 로드하고, 상기 제2 프로그래밍 패스는 상기 NAND 플래시 메모리 어레이의 상기 제1 워드라인의 상기 복수의 셀들로 하여금 데이터의 상기 제3 페이지를 추가로 저장하게 하는 장치.
  13. 방법으로서,
    제1 프로그래밍 패스 동안, 데이터의 제1 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하는 단계;
    상기 제1 프로그래밍 패스의 완료 이후에 그리고 제2 프로그래밍 패스 동안 상기 복수의 셀들에 프로그램될 데이터의 제2 페이지의 로딩의 완료 이전에 상기 제1 워드라인의 상기 복수의 셀들로부터 데이터의 상기 제1 페이지의 판독을 착수하는 단계; 및
    상기 제2 프로그래밍 패스 동안, 데이터의 상기 제1 페이지 및 데이터의 상기 제2 페이지를 저장하도록 상기 NAND 플래시 메모리 어레이의 상기 제1 워드라인의 상기 복수의 셀들을 프로그램하는 단계를 포함하는 방법.
  14. 제13항에 있어서,
    데이터의 상기 제2 페이지의 로딩의 완료 이전에 데이터의 상기 제1 페이지의 판독을 완료하는 단계를 추가로 포함하는 방법.
  15. 제13항에 있어서,
    데이터의 제3 페이지를 로드하는 단계, 및, 상기 제2 프로그래밍 패스 동안, 데이터의 상기 제3 페이지를 또한 저장하도록 상기 NAND 플래시 메모리 디바이스의 상기 제1 워드라인의 상기 복수의 셀들을 프로그램하는 단계를 추가로 포함하는 방법.
  16. 제13항에 있어서,
    상기 제1 프로그래밍 패스 동안, 데이터의 제3 페이지를 저장하도록 상기 NAND 플래시 메모리 어레이의 상기 제1 워드라인의 상기 복수의 셀들을 프로그램하는 단계를 추가로 포함하고;
    상기 제2 프로그래밍 패스 동안 프로그램될 데이터의 제2 페이지의 로딩의 완료 이전에 데이터의 상기 제1 페이지의 판독을 착수하는 것은 데이터의 상기 제3 페이지의 판독을 또한 착수하는 방법.
  17. 시스템으로서,
    데이터 로드 커맨드들을 저장 디바이스에 전송하는 프로세서; 및
    저장 디바이스를 포함하고, 상기 저장 디바이스는,
    적어도 하나의 NAND 플래시 메모리 어레이를 포함하는 NAND 플래시 메모리; 및
    저장 디바이스 제어기를 포함하고, 상기 저장 디바이스 제어기는,
    제1 프로그래밍 패스 동안, 데이터의 제1 페이지를 저장하도록 상기 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램되게 하고;
    상기 제1 프로그래밍 패스의 완료 이후에 그리고 제2 프로그래밍 패스 동안 상기 복수의 셀들에 프로그램될 데이터의 제2 페이지의 로딩의 완료 이전에 상기 제1 워드라인의 상기 복수의 셀들로부터 데이터의 상기 제1 페이지의 판독을 착수하고;
    상기 제2 프로그래밍 패스 동안, 데이터의 상기 제1 페이지 및 데이터의 상기 제2 페이지를 저장하도록 상기 NAND 플래시 메모리 어레이의 상기 제1 워드라인의 상기 복수의 셀들을 프로그램되게 하는 시스템.
  18. 제17항에 있어서,
    데이터의 상기 제1 페이지의 판독은 데이터의 상기 제2 페이지의 로딩의 완료 이전에 완료되는 시스템.
  19. 제17항에 있어서,
    상기 저장 디바이스 제어기는 추가로 데이터의 제3 페이지를 로드하고, 상기 제2 프로그래밍 패스 동안, 데이터의 상기 제3 페이지를 또한 저장하도록 상기 NAND 플래시 메모리 디바이스의 상기 제1 워드라인의 상기 복수의 셀들을 프로그램되게 하는 시스템.
  20. 제17항에 있어서,
    상기 프로세서에 통신 가능하게 연결되는 배터리, 상기 프로세서에 통신 가능하게 연결되는 디스플레이, 또는 상기 프로세서에 통신 가능하게 연결되는 네트워크 인터페이스 중 하나 이상을 추가로 포함하는 시스템.
  21. 시스템으로서,
    제1 프로그래밍 패스 동안, 데이터의 제1 페이지를 저장하도록 NAND 플래시 메모리 어레이의 제1 워드라인의 복수의 셀들을 프로그램하기 위한 수단;
    상기 제1 프로그래밍 패스의 완료 이후에 그리고 제2 프로그래밍 패스 동안 상기 복수의 셀들에 프로그램될 데이터의 제2 페이지의 로딩의 완료 이전에 상기 제1 워드라인의 상기 복수의 셀들로부터 데이터의 상기 제1 페이지의 판독을 착수하기 위한 수단; 및
    상기 제2 프로그래밍 패스 동안, 데이터의 상기 제1 페이지 및 데이터의 상기 제2 페이지를 저장하도록 상기 NAND 플래시 메모리 어레이의 상기 제1 워드라인의 상기 복수의 셀들을 프로그램하기 위한 수단을 포함하는 시스템.
  22. 제21항에 있어서,
    데이터의 상기 제1 페이지의 판독은 데이터의 상기 제2 페이지의 로딩의 완료 이전에 완료되는 시스템.
  23. 제21항에 있어서,
    데이터의 제3 페이지를 로드하는 수단 및, 상기 제2 프로그래밍 패스 동안, 데이터의 상기 제3 페이지를 또한 저장하도록 상기 NAND 플래시 메모리 디바이스의 상기 제1 워드라인의 상기 복수의 셀들을 프로그램하는 수단을 추가로 포함하는 시스템.
  24. 제21항에 있어서,
    상기 제1 프로그래밍 패스 동안, 데이터의 제3 페이지를 저장하도록 상기 NAND 플래시 메모리 어레이의 상기 제1 워드라인의 상기 복수의 셀들을 프로그램하는 수단을 추가로 포함하고,
    상기 제1 프로그래밍 패스의 완료 이후에 그리고 상기 제2 프로그래밍 패스 동안 프로그램될 데이터의 제2 페이지의 로딩의 완료 이전에 상기 제1 워드라인의 상기 복수의 셀들로부터 데이터의 상기 제1 페이지의 판독을 착수하는 것은 또한 데이터의 상기 제3 페이지의 판독을 착수하는 시스템.
  25. 제21항에 있어서,
    데이터의 상기 제1 페이지의 판독은 데이터의 상기 제2 페이지의 어드레스를 수신하는 것에 응답하여 착수되는 시스템.
KR1020197006013A 2016-09-30 2017-09-21 데이터 로드 연산의 완료 이전에 사전 판독 연산을 착수하기 위한 방법 및 장치 KR102562051B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/281,439 US9823880B1 (en) 2016-09-30 2016-09-30 Method and apparatus for initiating pre-read operation before completion of data load operation
US15/281,439 2016-09-30
PCT/US2017/052614 WO2018063901A1 (en) 2016-09-30 2017-09-21 Method and apparatus for initiating pre-read operation before completion of data load operation

Publications (2)

Publication Number Publication Date
KR20190050778A true KR20190050778A (ko) 2019-05-13
KR102562051B1 KR102562051B1 (ko) 2023-08-02

Family

ID=60303202

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197006013A KR102562051B1 (ko) 2016-09-30 2017-09-21 데이터 로드 연산의 완료 이전에 사전 판독 연산을 착수하기 위한 방법 및 장치

Country Status (5)

Country Link
US (1) US9823880B1 (ko)
EP (1) EP3520111A4 (ko)
KR (1) KR102562051B1 (ko)
CN (1) CN109643574B (ko)
WO (1) WO2018063901A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022510720A (ja) * 2018-12-10 2022-01-27 長江存儲科技有限責任公司 フラッシュメモリのマルチパスプログラミングのための先読み技法
US10714197B1 (en) * 2019-04-18 2020-07-14 Macronix International Co., Ltd. Memory device and program verification method thereof
EP3909049A4 (en) * 2019-05-17 2022-08-24 Yangtze Memory Technologies Co., Ltd. DATA BUFFERING OPERATION OF A THREE-DIMENSIONAL STORAGE DEVICE WITH STATIC RAM ACCESS MEMORY
CN110648713B (zh) * 2019-09-20 2021-09-10 长江存储科技有限责任公司 一种闪存存储器及其编程方法、编程系统和存储器系统
US11101004B1 (en) * 2020-06-22 2021-08-24 Macronix International Co., Ltd. Memory device and reading method

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080310226A1 (en) * 2006-05-18 2008-12-18 Samsung Electronics Co., Ltd. Multi-Bit Flash Memory Devices Having a Single Latch Structure and Related Programming Methods, Systems and Memory Cards
KR20100107294A (ko) * 2009-03-25 2010-10-05 삼성전자주식회사 불휘발성 메모리 장치를 포함하는 메모리 시스템 및 불휘발성 메모리 장치의 프로그램 방법
KR101348171B1 (ko) * 2007-07-30 2014-01-07 삼성전자주식회사 단일 래치 구조를 갖는 멀티-비트 플래시 메모리 장치,그것의 프로그램 방법, 그리고 그것을 포함하는 메모리카드
US20150378815A1 (en) * 2014-06-25 2015-12-31 Akira Goda Nand pre-read error recovery

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100259972B1 (ko) * 1997-01-21 2000-06-15 윤종용 메모리 셀당 2개 이상의 저장 상태들을 갖는 불휘발성 반도체 메모리 장치
US7173863B2 (en) * 2004-03-08 2007-02-06 Sandisk Corporation Flash controller cache architecture
CA2802219A1 (en) * 2010-07-21 2012-01-26 Mosaid Technologies Incorporated Multipage program scheme for flash memory
CN103544118B (zh) * 2012-07-17 2016-09-14 群联电子股份有限公司 存储器储存装置、其存储器控制器与数据写入方法
US9236136B2 (en) * 2012-12-14 2016-01-12 Intel Corporation Lower page read for multi-level cell memory
US8861269B2 (en) * 2013-03-05 2014-10-14 Sandisk Technologies Inc. Internal data load for non-volatile storage
US8929146B1 (en) * 2013-07-26 2015-01-06 Avalanche Technology, Inc. Controller management of memory array of storage device using magnetic random access memory (MRAM)
US9324419B2 (en) * 2014-07-15 2016-04-26 Sandisk Technologies Inc. Multiple pass programming for memory with different program pulse widths
US9275741B1 (en) * 2014-09-10 2016-03-01 Western Digital Technologies, Inc. Temperature compensation management in solid-state memory
TWI578320B (zh) * 2014-11-25 2017-04-11 旺宏電子股份有限公司 記憶體的操作方法及應用其之記憶體裝置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080310226A1 (en) * 2006-05-18 2008-12-18 Samsung Electronics Co., Ltd. Multi-Bit Flash Memory Devices Having a Single Latch Structure and Related Programming Methods, Systems and Memory Cards
KR101348171B1 (ko) * 2007-07-30 2014-01-07 삼성전자주식회사 단일 래치 구조를 갖는 멀티-비트 플래시 메모리 장치,그것의 프로그램 방법, 그리고 그것을 포함하는 메모리카드
KR20100107294A (ko) * 2009-03-25 2010-10-05 삼성전자주식회사 불휘발성 메모리 장치를 포함하는 메모리 시스템 및 불휘발성 메모리 장치의 프로그램 방법
US20130088923A1 (en) * 2009-03-25 2013-04-11 Samsung Electronics Co., Ltd. Nonvolatile memory device, system, and programming method
US20150378815A1 (en) * 2014-06-25 2015-12-31 Akira Goda Nand pre-read error recovery

Also Published As

Publication number Publication date
CN109643574B (zh) 2023-08-15
US9823880B1 (en) 2017-11-21
EP3520111A4 (en) 2020-06-17
CN109643574A (zh) 2019-04-16
WO2018063901A1 (en) 2018-04-05
KR102562051B1 (ko) 2023-08-02
EP3520111A1 (en) 2019-08-07

Similar Documents

Publication Publication Date Title
US10289313B2 (en) Method and apparatus for improving sequential reading in NAND flash
US10268407B1 (en) Method and apparatus for specifying read voltage offsets for a read command
US10714186B2 (en) Method and apparatus for dynamically determining start program voltages for a memory device
US10186325B2 (en) Method and apparatus for shielded read to reduce parasitic capacitive coupling
US8812784B2 (en) Command executing method, memory controller and memory storage apparatus
KR102562051B1 (ko) 데이터 로드 연산의 완료 이전에 사전 판독 연산을 착수하기 위한 방법 및 장치
US9703494B1 (en) Method and apparatus for protecting lower page data during programming in NAND flash
US11693582B2 (en) Automatic read calibration operations
US10725933B2 (en) Method and apparatus for redirecting memory access commands sent to unusable memory partitions
US9852065B1 (en) Method and apparatus for reducing data program completion overhead in NAND flash
EP3926451A1 (en) Communication of data relocation information by storage device to host to improve system performance
EP4202704A1 (en) Interleaving of heterogeneous memory targets
TWI545588B (zh) 控制方法、連接器與記憶體儲存裝置
TWI514141B (zh) 記憶體位址管理方法、記憶體控制器與記憶體儲存裝置
US10049752B1 (en) Method and apparatus for process corner compensation for memory state sensing
WO2017218170A1 (en) Method and apparatus for programming wordlines of nand flash memory using alternating encoding schemes
US20230064007A1 (en) Encoding additional states in a three-dimensional crosspoint memory architecture
EP3926840A1 (en) Transmit crosstalk cancellation system
US11315644B2 (en) String current reduction during multistrobe sensing to reduce read disturb
US10229057B2 (en) Method and apparatus for avoiding bus contention after initialization failure
US20230154539A1 (en) Method and apparatus for improving write uniformity in a memory device
US20230178148A1 (en) Read algorithms for three-dimensional crosspoint memory architectures

Legal Events

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