KR20120100912A - 비휘발성 저장 소자 내에서 위험한 상태의 데이터를 식별하는 방법 - Google Patents

비휘발성 저장 소자 내에서 위험한 상태의 데이터를 식별하는 방법 Download PDF

Info

Publication number
KR20120100912A
KR20120100912A KR1020127009324A KR20127009324A KR20120100912A KR 20120100912 A KR20120100912 A KR 20120100912A KR 1020127009324 A KR1020127009324 A KR 1020127009324A KR 20127009324 A KR20127009324 A KR 20127009324A KR 20120100912 A KR20120100912 A KR 20120100912A
Authority
KR
South Korea
Prior art keywords
storage elements
nonvolatile storage
data
test
memory
Prior art date
Application number
KR1020127009324A
Other languages
English (en)
Inventor
젠 페이
랜랜 구
니마 모크헬시
아이단 알로드
에란 샤론
이츠해크 아프리아트
Original Assignee
샌디스크 테크놀로지스, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 샌디스크 테크놀로지스, 인코포레이티드 filed Critical 샌디스크 테크놀로지스, 인코포레이티드
Publication of KR20120100912A publication Critical patent/KR20120100912A/ko

Links

Images

Classifications

    • 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/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • 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/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/3418Disturbance prevention or evaluation; Refreshing of disturbed memory data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1072Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in multilevel memories
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Read Only Memory (AREA)
  • For Increasing The Reliability Of Semiconductor Memories (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

비휘발성 저장 시스템은 성능 데이터(performance data)에 기초하여 어떤 블록들(또는 다른 저장 단위들)이 불량하게 될 것인 지를 예측한다. 불량하게 될 것으로 예측되는 블록들 내의 데이터는 다른 블록들에 다시 프로그램될 수 있으며, 불량할 것으로 예측되는 블록들은 추가의 이용(further use)으로부터 제거될 수 있다.

Description

비휘발성 저장 소자 내에서 위험한 상태의 데이터를 식별하는 방법{IDENTIFYING AT-RISK DATA IN NON-VOLATILE STORAGE}
관련 출원
본 출원은, 2009년 9월 11일 출원된 미국 가 특허 출원 61/241,750호의 우선권을 주장한다.
본 발명은 비휘발성 저장 소자(non-volatile storage)에 관한 것이다.
반도체 메모리 디바이스들은 다양한 전자 디바이스들에서 보다 대중적으로 이용되어 왔다. 예를 들어, 비휘발성 반도체 메모리는 셀룰러 전화들, 디지털 카메라들, 개인 휴대 단말기들, 이동 계산 디바이스들, 비 이동 계산 디바이스들 및 기타 디바이스들에서 이용된다. 전기적으로 소거가능하고 프로그램가능한 판독 전용 메모리(EEPROM) 및 플래시 메모리가 가장 대중적인 비휘발성 반도체 메모리들이다.
EEPROM 및 플래시 메모리는 모두 플로팅 게이트를 이용하는바, 이러한 플로팅 게이트는 반도체 기판 내의 채널 영역 위에 위치되며 채널 영역으로부터 절연된다. 플로팅 게이트는 소스 영역과 드레인 영역 사이에 위치된다. 제어 게이트가 플로팅 게이트 위에 제공되며, 플로팅 게이트로부터 절연된다. 트랜지스터의 임계 전압은 플로팅 게이트 상에 유지되는 전하의 양에 의해 제어된다. 즉, 소스와 드레인 간의 도통을 가능하게 하기 위해 트랜지스터가 턴온되기 전에 제어 게이트에 인가되어야만 하는 최소량의 전압은 플로팅 게이트 상의 전하의 레벨에 의해 제어된다.
전형적으로, EEPROM 또는 플래시 메모리 디바이스를 프로그램할 때, 프로그램 전압이 제어 게이트에 인가되고, 비트라인은 접지된다. 채널로부터 전자들은 플로팅 게이트로 주입된다. 전자들이 플로팅 게이트에 누적되면, 그 플로팅 게이트는 음으로 대전되고, 메모리 셀의 임계 전압이 올라가게 됨으로써, 메모리 셀은 프로그램 상태로 된다. 이러한 프로그래밍에 대한 보다 많은 정보는, 그 명칭이 "Source Side Self Boosting Technique for Non-Volatile Memory"인 미국 특허 6,859,397호; 및 그 명칭이 "Detecting Over Programmed Memory"인 미국 특허 6,917,542호에서 찾아볼 수 있으며, 이들 모두는 그 전체가 본원의 참조로서 인용된다.
일부 EEPROM 및 플래시 메모리 디바이스들은 2 범위의 전하들을 저장하는 데에 이용되는 플로팅 게이트를 가지며, 이에 따라 메모리 셀은 2개의 상태들, 즉 데이터 "1" 및 데이터 "0"에 해당하는 소거 상태 및 프로그램 상태 사이에서 프로그램/소거될 수 있다. 이러한 디바이스는 이진 디바이스로서, 또는 단일 레벨 메모리 셀들을 갖는 것으로서 지칭된다.
다중-상태(또는 다중-레벨) 플래시 메모리 셀은 다수의 별개의 허용된(allowed) 임계 전압 범위들을 식별함으로써 구현된다. 각각의 별개의 임계 전압 범위는 데이터 비트들의 세트에 대한 소정의 값에 해당한다.
다른 집적 회로들과 마찬가지로, 비휘발성 메모리는 제조 결함들에 영향을 받는다. 일부 제조 결함들은 집적 회로가 적절하게 기능하지 못할 정도로 심각하다. 이러한 결합들은 전형적으로 제조 페이즈 동안 테스팅에 의해 발견된다.
다른 결합들은 중요하지 않거나, 또는 집적 회로가 일정 시간 기간 동안 이용될 때 까지 드러나지 않는다. 일부 메모리 제조업자들은 제조 프로세스의 일부로서 불량 유닛들(bad units)을 식별하고자 시도한다. 예를 들어, 플래시 메모리를 위한 일부 테스팅 방법들은, 동작 기간 이후 실패를 야기할 수 있는 결함들을 갖는 메모리의 블록들의 실패를 가속화(accelerate)하기 위한 노력으로 메모리의 각 블록에 스트레스(온도, 전압, 사이클링)를 인가하는 것을 포함한다. 일부 경우들에 있어서, 메모리는 스트레스 이후 또는 스트레스 동안 프로그램되고, 프로그램된 데이터는 리드백(read back)되며, 그리고 최초 데이터는 프로그램 및 리드백된 데이터와 비교된다. 차이가 어떠한 소정의 임계치 보다 크다면, 블록은 불량으로서 마크되며, 절대 이용되지 않는다. 총 디바이스 용량이 제조 사양 내에 있도록, 불량 블록들을 수용하기 위한 스페어 블록들(spare blocks)의 세트가 존재한다. 제 2 시나리오는, 프로그래밍 또는 소거 동작이 실패할 때 불량 블록을 식별하는 것을 포함한다. 실패하는 블록은 불량으로서 마크되며, 절대로 다시 이용되지 않을 수 있다.
상기 설명한 테스팅 솔루션들 중 어느 것도, 프로그래밍 프로세스가 성공적이지만, (심지어 액세스조차 되지 않으면서 또는 판독을 위해서만 액세스되면서) 메모리 디바이스가 이후 악화되어, 점차로 자신의 콘텐츠를 잃거나, 그 콘텐츠를 판독하는 능력을 잃게 되는 상황을 검출할 수 없다.
도 1은 NAND 스트링의 평면도이다.
도 2는 도 1의 NAND 스트링의 등가 회로도이다.
도 3은 비휘발성 메모리 시스템의 블록도이다.
도 4는 메모리 어레이의 일 실시예를 도시하는 블록도이다.
도 5는 감지 블록의 일 실시예를 도시하는 블록도이다.
도 6은 제어기의 일 실시예의 블록도이다.
도 7은 메모리 셀들의 임계 전압 분포들을 도시한다.
도 8a-f는 프로그래밍 프로세스 동안 메모리 셀들의 임계 전압 분포들을 도시한다.
도 9a 및 9b는 소거 프로세스 동안 메모리 셀들의 임계 전압 분포들을 도시한다.
도 10은 비휘발성 메모리를 동작시키기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 11은 비휘발성 메모리 내에 데이터를 프로그램시키기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 12는 비휘발성 메모리 소자들을 프로그램시키기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 13은 워드라인들의 세트를 프로그램하는 순서의 일 예를 설명하는 챠트이다.
도 14는 비휘발성 메모리 소자들을 프로그램할 때에 수행되는 프로세스의 일 실시예를 설명하는 흐름도이다.
도 15는 판독 비교 레벨들 및 검증 비교 레벨들을 갖는 메모리 셀들의 임계 전압 분포들을 도시한다.
도 16은 판독 프로세스를 설명하는 타이밍도이다.
도 17은 비휘발성 메모리 소자들을 소거하기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 18은 블록들이 실패할 경향(prone)이 있는 지를 체크하기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 19은 블록들이 실패할 경향이 있는 지를 체크할 때 테스트를 수행하기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 20은 블록들이 실패할 경향이 있는 지를 체크할 때 테스트를 수행하기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 21은 블록들이 실패할 경향이 있는 지를 체크할 때 테스트를 수행하기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 22는 블록들이 실패할 경향이 있는 지를 체크할 때 테스트를 수행하기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 23은 블록들이 실패할 경향이 있는 지를 체크할 때 테스트를 수행하기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 24는 블록들이 실패할 경향이 있는 지를 체크할 때 테스트를 수행하기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 25는 블록들이 실패할 경향이 있는 지를 체크할 때 테스트를 수행하기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
도 26은 블록들이 실패할 경향이 있는 지를 체크할 때 테스트를 수행하기 위한 프로세스의 일 실시예를 설명하는 흐름도이다.
본원에서는, 비휘발성 저장 시스템 내의 위험한 상태의 데이터(at-risk data)를 식별하고, 그 데이터를 더 안전한 위치에 다시 프로그램하기 위한 기술이 개시된다. 일 실시예에서, 시스템은 성능 데이터(performance data)에 기초하여 어떤 블록들(또는 다른 저장 단위들)이 불량하게 될 것인 지를 예측할 수 있다. 불량하게 될 것으로 예측되는 블록들 내의 데이터는 다른 블록들에 프로그램될 수 있으며, 불량할 것으로 예측되는 블록들은 추가의 이용(further use)으로부터 제거될 수 있다.
본원에서 설명되는 기술을 구현할 수 있는 비휘발성 저장 시스템의 하나의 예는 NAND 플래시 메모리이지만, 비휘발성 저장 소자에 대한 다른 타입들도 이용될 수 있다. NAND 플래시 메모리는 2개의 선택 게이트들 사이에 샌드위치되는 다수의 트랜지스터들을 직렬로 배열하는 것을 포함한다. 직렬의 트랜지스터들 및 선택 게이트들은 NAND 스트링이라 지칭된다. 도 1은 하나의 NAND 스트링을 도시하는 평면도이다. 도 2는 그 등가 회로이다. 도 1 및 2에 도시된 NAND 스트링은 제 1의 (드레인측) 선택 게이트(120)와 제 2의 (소스측) 선택 게이트(122) 사이에 직렬로 샌드위치되는 4개의 트랜지스터들(100, 102, 104 및 106)을 포함한다. 선택 게이트(120)는 NAND 스트링을 비트라인 컨택(126)을 통해 비트라인에 연결한다. 선택 게이트(122)는 NAND 스트링을 소스 라인(128)에 연결한다. 선택 게이트(120)는 선택 라인(SGD)에 적절한 전압을 인가함으로써 제어된다. 선택 게이트(122)는 선택 라인(SGS)에 적절한 전압을 인가하여 제어된다. 트랜지스터들(100, 102, 104 및 106) 각각은 제어 게이트와 플로팅 게이트를 갖는다. 예를 들어, 트랜지스터(100)는 제어 게이트(100CG)와 플로팅 게이트(100FG)를 갖는다. 트랜지스터(102)는 제어 게이트(102CG)와 플로팅 게이트(102FG)를 갖는다. 트랜지스터(104)는 제어 게이트(104CG)와 플로팅 게이트(104FG)를 포함한다. 트랜지스터(106)는 제어 게이트(106CG)와 플로팅 게이트(106FG)를 포함한다. 제어 게이트(100CG)는 워드라인(WL3)에 연결되고, 제어 게이트(102CG)는 워드라인(WL2)에 연결되고, 제어 게이트(104CG)는 워드라인(WL1)에 연결되며, 그리고 제어 게이트(106CG)는 워드라인(WL0)에 연결된다.
도 1 및 2가 NAND 스트링 내에 4개의 메모리 셀을 도시하였지만, 이러한 4개의 메모리 셀들을 이용한 것은 단지 예로서 제공된 것임을 이해해야 한다. NAND 스트링은 4개 보다 적거나 많은 메모리 셀들을 가질 수 있다. 예를 들어, 일부 NAND 스트링들은 8개, 16개, 32개, 64개, 128개 등의 메모리 셀을 포함한다. 여기에서의 설명은 NAND 스트링 내의 임의의 특정수의 메모리 셀들로 한정되지 않는다. 일 실시예는 66개의 메모리 셀들을 갖는 NAND 스트링들을 이용하는데, 여기서 64개의 메모리 셀들은 데이터를 저장하는 데에 이용되고, 2개의 메모리 셀들은 데이터를 저장하지 않기 때문에, 더미 메모리 셀들로서 지칭된다.
NAND 구조를 이용하는 플래시 메모리 시스템에 대한 전형적인 아키텍쳐는 복수개의 NAND 스트링들을 포함할 것이다. 각 NAND 스트링은 선택 라인(SGS)에 의해 제어되는 자신의 소스 선택 게이트에 의해 공통 소스 라인에 연결되고, 선택 라인(SGD)에 의해 제어되는 자신의 드레인 선택 게이트에 의해 자신의 관련 비트라인에 연결된다. 각각의 비트라인 및 비트라인 컨택을 통해 그 비트라인에 연결되는 각각의 NAND 스트링(들)은 메모리 셀들의 어레이의 칼럼들을 포함한다. 비트라인들은 다수의 NAND 스트링들에 의해 공유된다. 전형적으로, 비트라인은 워드라인들에 수직인 방향으로 NAND 스트링들의 상부로 뻗어있으며, 하나 이상의 감지 증폭기들에 연결된다. NAND 타입 플래시 메모리들 및 이들의 동작에 대한 적절한 예들은 그 전체가 참조로서 본원에 통합되는 다음의 미국 특허들/특허 출원들: 미국 특허 제5,570,315호; 미국 특허 제5,774,397호; 미국 특허 제6,046,935호; 미국 특허 제6,456,528호; 및 미국 특허 공개 US2003/0002348에서 제공된다.
NAND 플래시 메모리 이외에, 플래시 메모리가 아닌 비휘발성 저장 소자 뿐 아니라, 다른 타입들의 플래시 메모리(예를 들어, NOR)를 포함하는 다른 타입들의 비휘발성 저장 디바이스들도 이용될 수 있다. 예를 들어, 비휘발성 메모리 디바이스들은 또한 전하를 저장하기 위해 유전층을 이용하는 메모리 셀들로부터 제조된다. 이전에 설명된 전도성 플로팅 게이트 소자들 대신, 유전층이 이용된다. 유전체 저장 소자를 이용하는 이러한 메모리 디바이스들은, "NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell," IEEE Electron Device Letters, vol. 21. no. 11, 2000년 11월, 543-545 페이지에서 Eitan 등에 의해 설명된다. ONO 유전층은 소스 확산부와 드레인 확산부 사이의 채널에 걸쳐서 연장된다. 하나의 데이터 비트에 대한 전하가 드레인에 인접하는 유전층 내에 국부화(localize)되고, 다른 데이터 비트에 대한 전하가 소스에 인접하는 유전층 내에 국부화된다. 미국 특허 5,768,192호 및 6,011,725호는 2개의 실리콘 이산화물층들 사이에 샌드위치되는 트래핑 유전체를 갖는 비휘발성 메모리 셀을 개시한다. 다중 상태 데이터의 저장은 유전체 내의 공간적으로 분리된 전하 저장 영역들의 이진 상태들을 개별적으로 판독함으로써 구현된다. MONOS 또는 TANO 타입들의 구조들 또는 나노결정들에 기반하는 비휘발성 저장 소자도 이용될 수 있다. 다른 타입들의 비휘발성 저장 소자도 이용될 수 있다.
도 3은 메모리 셀들(예를 들어, NAND 멀티 상태 플래시 메모리)의 페이지, 워드라인 또는 다른 단위들을 병렬로 판독하고 프로그램하기 위한 판독/기록 회로들을 구비하는 메모리 디바이스(210)를 도시한다. 메모리 디바이스(210)는 하나 이상의 메모리 다이 또는 칩들(212)을 포함한다. 메모리 다이/칩(212)은 메모리 셀들의 (2차원 또는 3차원의) 하나 이상의 어레이들(200), 제어 회로(220) 및 판독/기록 회로들(230a 및 230b)을 포함한다. 일 실시예에서, 다양한 주변 회로들에 의한 메모리 어레이(200)로의 액세스는, 그 어레이의 양측 상에서, 대칭적인 방식으로 구현되며, 이에 따라 각 측 상의 액세스 라인들 및 회로의 밀도들은 반으로 감소하게 된다. 판독/기록 회로들(230a 및 230b)은 다수의 감지 블록들(300)을 포함하는 바, 이러한 감지 블록들(300)은 메모리 셀들의 페이지가 병렬로 판독 또는 프로그램될 수 있게 한다. 메모리 어레이(200)는 로우 디코더들(240a 및 240b)을 통해 워드라인들에 의해 어드레스가능하고, 칼럼 디코더들(242a 및 242b)에 의해 비트라인들에 의해 어드레스가능하다. 워드라인들 및 비트라인들은 제어 라인들의 예들이다. 전형적인 실시예에서, 제어기(244)는 하나 이상의 메모리 다이/칩들(212)과 동일한 메모리 디바이스(210)(예를 들어, 제거가능한 저장 카드 또는 패키지) 내에 포함된다. 커맨드들 및 데이터는, 라인들(232)을 통해 호스트와 제어기(244) 사이에, 그리고 라인들(234)을 통해 제어기와 하나 이상의 메모리 다이(212) 사이에 전송된다.
일 실시예에서, 메모리 칩(212)은 단지 하나의 메모리 어레이(200)를 포함한다. 다른 실시예들에서, 메모리 칩(212)은 다수의 메모리 어레이들(200)을 포함한다. 다수의 메모리 어레이들을 이용하는 일부 구현들에서, 각 메모리 어레이는, 그 자체의 주변 회로(예를 들어, 디코더들, 구동기들 등)의 세트를 가지면서, 평면으로서 작용한다. 일 예에서는, 각 어레이 주위에 관련된 주변 회로를 가지면서 동일한 메모리 칩(212) 상에서 나란히 2개의 평면들(2개의 어레이들)이 있으며, 이에 따라 메모리 동작들은 양 어레이들 상에서 동시에 수행될 수 있다. 즉, 각 메모리 어레이는 양측 상에서 로우 디코더들을 갖고, 상부 및 바닥에서 칼럼 디코더들을 갖고, 상부 및 바닥에서 판독/기록 회로들을 가질 것이다.
제어 회로(220)는 메모리 어레이(200) 상에서 메모리 동작들을 수행하기 위해 판독/기록 회로들(230a 및 230b)과 협동한다. 제어 회로(220)는 상태 머신(222), 온칩 어드레스 디코더(224) 및 전력 제어 모듈(226)을 포함한다. 상태 머신(222)은 메모리 동작들의 칩 레벨 제어를 제공한다. 온칩 어드레스 디코더(224)는 디코더들(240a, 240b, 242a 및 242b)에 의해 이용되는 하드웨어 어드레스와 호스트 또는 메모리 제어기에 의해 이용되는 것 간의 어드레스 인터페이스를 제공한다. 전력 제어 모듈(226)은 메모리 동작들 동안 워드라인들 및 비트라인들에 공급되는 전력 및 전압들을 제어한다. 일 실시예에서, 전력 제어 모듈(226)은 공급 전압 보다 큰 전압들을 생성할 수 있는 하나 이상의 전하 펌프들을 포함한다. 제어 회로(220)는, 칼럼 디코더들(242a 및 242b) 뿐 아니라 로우 디코더들(240a 및 240b)에 어드레스 라인들(ADDR)을 제공한다. 칼럼 디코더들(242a 및 242b)은 데이터 I/O으로 나타낸 신호 라인들을 통해 제어기(244)에 데이터를 제공한다.
일 실시예에서, 제어 회로(220), 전력 제어 회로(226), 디코더 회로(224), 상태 머신 회로(222), 디코더 회로(242a), 디코더 회로(242b), 디코더 회로(240a), 디코더 회로(240b), 판독/기록 회로들(230a), 판독/기록 회로들(230b), 및/또는 제어기(244) 중 하나 또는 임의의 결합은 하나 이상의 관리 회로들로서 지칭될 수 있다. 이러한 하나 이상의 관리 회로들은 본원에서 설명되는 프로세스들을 수행한다.
도 4는 메모리 셀 어레이(200)의 예시적인 구조를 도시한다. 일 실시예에서, 메모리 셀들의 어레이는 메모리 셀들의 많은 수의 블록들로 분할된다. 플래시 메모리 시스템들에 대해 일반적인 것으로서, 블록은 소거의 단위이다. 즉, 각 블록은 함께 소거되는 최소수의 메모리 셀들을 포함한다. 또한, 다른 소거 단위들도 이용될 수 있다.
블록은 비트라인들(예를 들어, 비트라인들 BL0 - BL69,623) 및 워드라인들(WL0, WL1, WL2, WL3)을 통해 액세스되는 NAND 스트링들의 세트를 포함한다. 도 4는 NAND 스트링을 형성하기 위해 직렬 연결된 4개의 메모리 셀들을 도시한다. 비록 각 NAND 스트링 내에 4개의 셀들이 포함되는 것으로 나타나있지만, 4개 보다 많거나 적은 메모리 셀들이 이용될 수 있다(예를 들어, 16, 32, 64, 128 또는 다른 수의 메모리 셀들이 NAND 스트링 상에 있을 수 있다). NAND 스트링의 하나의 단자는 (선택 게이트 드레인 라인(SGD)에 연결된) 드레인 선택 게이트를 통해 해당하는 비트라인에 연결되고, 다른 단자는 (선택 게이트 소스 라인(SGS)에 연결된) 소스 선택 게이트를 통해 소스 라인에 연결된다.
전형적으로, 각 블록은 다수의 페이지들로 분할된다. 일 실시예에서, 페이지는 프로그래밍의 단위이다. 또한, 프로그래밍의 다른 단위들도 이용될 수 있다. 전형적으로, 데이터의 하나 이상의 페이지들은 메모리 셀들의 하나의 로우에 저장된다. 예를 들어, 데이터의 하나 이상의 페이지들은 공통 워드라인에 연결된 메모리 셀들에 저장될 수 있다. 페이지는 하나 이상의 섹터들을 저장할 수 있다. 섹터는 사용자 데이터 및 오버헤드 데이터(시스템 데이터라고도 불림)를 포함한다. 전형적으로, 오버헤드 데이터는 헤더 정보, 및 섹터의 사용자 데이터로부터 계산되는 에러 정정 코드(ECC) 리던던시를 포함한다. 제어기(244)(또는 다른 컴포넌트)는, 데이터가 어레이 내에 프로그램되고 있을 때에는 ECC를 계산하고, 데이터가 어레이로부터 판독되고 있을 때에는, ECC 바이트들을 이용하여, 사용자 데이터 내에서 판독되는 에러들을 검출 및/또는 정정한다. 대안적으로, ECC들 및/또는 다른 오버헤드 데이터는, 이들이 속하는 사용자 데이터와 다른 페이지들, 또는 심지어는 다른 블록들 내에 저장된다. 전형적으로, 사용자 데이터의 섹터는 자기 디스크 드라이브들 내의 섹터의 크기에 해당하는 512 바이트들이다. 또한, 다른 크기의 블록들, 페이지들 및 섹터들도 이용될 수 있다. 부가적으로, 블록은 69,624 개 보다 많거나 적은 비트라인들을 가질 수 있다.
도 5는 코어 부분(감지 모듈(480)로서 지칭됨)과 공통 부분(490)으로 분할되는 개별적인 감지 블록(300)의 블록도이다. 일 실시예에서, 각 비트라인에 대해 개별적인 감지 모듈(480)이 있고, 다수의 감지 모듈들(480)의 세트에 대해 하나의 공통 부분(490)이 있다. 일 예에서, 하나의 감지 블록은 하나의 공통 부분(490) 및 8개의 감지 모듈들(480)을 포함한다. 그룹 내의 감지 모듈들 각각은 데이터 버스(472)를 통해 관련된 공통 부분과 통신한다. 일 예는, 그 전체가 본원의 참조로서 인용되는 미국 공개 특허 2006/0140007 에서 찾아볼 수 있다.
감지 모듈(480)은 감지 회로(470)를 포함하는 바, 이 감지 회로(470)는 연결된 비트라인 내의 도통 전류가 소정의 임계 레벨 보다 큰지 아니면 작은 지를 결정한다. 일부 실시예들에서, 감지 회로(470)는 일반적으로 감지 증폭기라 지칭되는 회로를 포함한다. 감지 모듈(480)은 또한 연결된 비트라인 상에 전압 조건을 설정하는 데에 이용되는 비트라인 래치(482)를 포함한다. 예를 들어, 메모리 셀들을 프로그래밍으로부터 로크 아웃(lock out)시키기 위해, 비트라인 래치(482)에 래치되는 소정의 상태에 의해, 연결된 비트라인은 프로그램 금지를 나타내는 상태(예를 들어, Vdd)로 풀링된다.
공통 부분(490)은 프로세서(492), 데이터 래치들의 세트(494), 및 데이터 버스(420)와 데이터 래치들의 세트(494) 사이에 결합되는 I/O 인터페이스(496)를 포함한다. 프로세서(492)는 계산들을 수행한다. 예를 들어, 프로세서의 기능들중 하나는 감지된 메모리 셀에 저장된 데이터를 결정하고, 결정된 데이터를 데이터 래치들의 세트에 저장하는 것이다. 데이터 래치들의 세트(494)는 판독 동작 동안 프로세서(492)에 의해 결정되는 데이터 비트들을 저장하는 데에 이용된다. 이는 또한, 프로그램 동작 동안 데이터 버스(420)로부터 들어오는(imported) 데이터 비트들을 저장하는 데에 이용된다. 이러한 들어오는 데이터 비트들은 메모리 내에 프로그램되는 것으로 의도되는 기록 데이터를 나타낸다. I/O 인터페이스(496)는 데이터 래치들(494)과 데이터 버스(420) 간의 인터페이스를 제공한다.
판독 또는 감지 동안, 시스템의 동작은 상태 머신(222)에 의해 제어되는 바, 이러한 상태 머신은 (전력 제어 모듈(226)을 이용하여) 어드레스되는 셀(들)로의 서로 다른 제어 게이트 전압들의 공급을 제어한다. 메모리에 의해 지원되는 다양한 메모리 상태들에 해당하는 미리 정의되는 다양한 제어 게이트 전압들을 통해 스텝(step)형으로 진행할 때에, 감지 모듈(480)은 이러한 전압들중 하나의 전압으로 이동(trip)되며, 감지 모듈(480)로부터 버스(472)를 통해 프로세서(492)에 출력이 제공될 것이다. 이때, 프로세서(492)는 입력 라인들(493)을 통해 상태 머신으로부터 인가되는 제어 게이트 전압에 대한 정보 및 감지 모듈의 트리핑 이벤트(들)를 고려하여, 결과적인 메모리 상태를 결정한다. 그런 다음, 그 메모리 상태에 대한 이진 엔코딩을 계산하고, 결과적인 데이터 비트들을 데이터 래치들(494)에 저장한다. 코어 부분의 다른 실시예에서, 비트라인 래치(482)는 이중의 임무를 한다. 즉, 감지 모듈(480)의 출력을 래치하는 래치로서, 그리고 상기 설명한 바와 같은 비트라인 래치로서의 임무를 한다.
어떠한 구현들은 다수의 프로세서들(492)을 포함할 것임이 예상된다. 일 실시예에서, 각 프로세서(492)는 출력 라인(도 5에는 미도시)을 포함할 것이며, 이에 따라 출력 라인들 각각은 서로 와이어드 오아(wired-OR)된다. 일부 실시예들에서, 출력 라인들은 와이어드-OR 라인에 연결되기 전에 반전(invert)된다. 이러한 구성은 프로그래밍 검증 프로세스 동안, 프로그래밍 프로세스가 완료된 때를 빠르게 결정할 수 있게 하는데, 이는 와이어드-OR 라인을 수신하는 상태 머신이 프로그램되고 있는 모든 비트들이 원하는 레벨에 도달되는 때를 결정할 수 있기 때문이다. 예를 들어, 각 비트가 자신의 원하는 레벨에 도달하면, 그 비트에 대한 논리 0이 와이어드-OR 라인에 전송될 것이다(또는 데이터 1이 반전된다). 모든 비트들이 데이터 0을 출력하면(또는 데이터 1이 반전되면), 상태 머신은 프로그래밍 프로세스를 종료해야 함을 알게 된다. 각 프로세서가 8개의 감지 모듈들과 통신하는 실시예들에서, 상태 머신은 (일부 실시예들에서) 와이어드-OR 라인을 8번 판독할 필요가 있거나, 또는 관련된 비트라인들의 결과를 누적하기 위해 프로세서(492)에 논리가 부가됨으로써, 상태 머신은 와이어드-OR 라인을 단지 한번만 판독하면 된다. 다른 실시예에서, 프로세서(492)는 '1'의 개수를 카운트하며, 이들이 미리 정해진 어떠한 작은 임계치 보다 작은 경우, 프로그래밍 동작은 성공적인 것으로 공표된다. 이러한 임계치는 종종 '무시 비트 개수(ignore bit number)'라 불린다.
데이터 래치 스택(494)은 감지 모듈에 해당하는 데이터 래치들의 스택을 포함한다. 일 실시예에서는, 감지 모듈(480) 마다 3개(또는 4개 또는 다른 수)의 데이터 래치들이 있다. 일 실시예에서, 래치들은 각각 1 비트이다.
프로그램 또는 검증 동안, 프로그램될 데이터는 데이터 버스(420)로부터 데이터 래치들의 세트(424)에 저장된다. 검증 프로세스 동안, 프로세서(492)는 검증된 메모리 상태를 원하는 메모리 상태에 대해 모니터한다. 2개가 일치하면, 프로세서(492)는 비트라인이 프로그램 금지를 나타내는 상태로 풀링될 수 있도록 비트라인 래치(482)를 설정한다. 이는 그 비트라인에 결합된 메모리 셀이, 자신의 제어 게이트 상에서 프로그래밍 펄스들을 받는다고 할지라도, 더 이상 프로그램되는 것을 막는다. 다른 실시예들에서, 프로세서는 먼저 비트라인 래치(482)를 로드시키고, 검증 프로세스 동안 감지 회로는 이것을 금지 값으로 설정한다.
일부 구현들에서(하지만, 반드시 요구되는 것은 아니다), 데이터 래치들은 시프트 레지스터로서 구현되며, 이에 따라 그 내에 저장된 병렬 데이터는 데이터 버스(420)에 대해 직렬로 변환되며, 그 반대의 경우 역시 마찬가지이다. 바람직한 일 실시예에서, 메모리 셀들의 판독/기록 블록에 해당하는 모든 데이터 래치들은 함께 링크되어 블록 시프트 레지스터를 형성하며, 이에 따라 데이터의 블록은 직렬 전송에 의해 입력 또는 출력될 수 있다. 특히, 기록/판독 모듈들의 뱅크(bank)는, 자신의 데이터 래치들의 세트 각각이 (이들이 전체 판독/기록 블록에 대한 시프트 레지스터의 일부인 것 처럼) 데이터 버스로/로부터 데이터를 직렬로 시프트시키도록 적합하게 된다.
감지 동작들 및 감지 증폭기들에 대한 부가적인 정보는, (1) 2004년 3월 25일 공개되었으며 그 명칭이 "Non-Volatile Memory And Method With Reduced Source Line Bias Errors"인 미국 공개 특허 2004/0057287; (2) 2004년 6월 10일 공개되었으며 그 명칭이 "Non-Volatile Memory And Method with Improved Sensing"인 미국 공개 특허 2004/0109357; (3) 미국 공개 특허 2005/0169082; (4) 2005년 4월 5일 발명자 Jian Chen에 의해 출원되었으며 그 명칭이 "Compensating for Coupling During Read Operations of Non-Volatile Memory"인 미국 공개 특허 2006/0221692; 및 (5) 2005년 12월 28일 발명자들 Siu Lung Chan 및 Raul-Adrian Cernea에 의해 출원되었으며 그 명칭이 "Reference Sense Amplifier For Non-Volatile Memory"인 미국 공개 특허 2006/0158947 에서 찾아볼 수 있다.
도 6은 제어기(244)의 일 실시예의 블록도이다. 다른 아키텍쳐들도 이용될 수 있다. 도 6은 호스트 인터페이스(502)를 나타내는 바, 이는 호스트(예를 들어, 디지털 카메라, 셀룰러 전화, PDA, 컴퓨터 등)로부터 데이터 및 커맨드들을 수신한다. 호스트 인터페이스(502)는 또한 호스트에 데이터 및 상태를 제공할 수 있다. 일 실시예에서, 호스트 인터페이스(502)는, 호스트로부터 정보를 수신하고 호스트에 정보를 제공하기 위한 다양한 회로들을 포함한다. 호스트 인터페이스(502)는 프로세서, 및 이 프로세서를 프로그램하기 위한 소프트웨어를 포함한다. 호스트 인터페이스(502)는 버퍼 캐시(504)에 연결된다. 호스트 인터페이스(502)에 의해 호스트로부터 수신되는 데이터는 호스트 인터페이스(502)로부터 버퍼 캐시(504)에 전달되어, 버퍼 캐시(504)에 저장된다. 버퍼 캐시(504)는 메모리 인터페이스(506)에 연결된다. 버퍼 캐시(504)로부터, 데이터는 메모리 인터페이스(506)에 제공되며, 이러한 메모리 인터페이스(506)는 (도 3의) 메모리 칩(212)에 데이터 및 커맨드들을 전달하고, (도 3의) 메모리 칩(212)으로부터 데이터 및 상태를 수신하기 위한 인터페이스를 제공한다. 이후, 메모리 인터페이스(506)에서 (도 3의) 메모리 칩(212)으로부터 수신되는 데이터는 호스트 인터페이스(502)를 통해 호스트에 전송하기 위해 버퍼 캐시(504)에 저장된다. 메모리 인터페이스(506)는 하나 이상의 회로들을 포함한다. 일부 실시예들에서, 메모리 인터페이스는 프로세서, 및 이 프로세서를 프로그램하기 위한 소프트웨어를 포함할 수 있다.
제어기(244)는, 종래에 알려져있는 임의의 프로세서가 될 수 있는 CPU(508)를 포함한다. CPU(508)는 호스트 인터페이스(502), 버퍼 캐시(504), 메모리 인터페이스(506), ECC 가속기(ECC accelerator)(510), RAM(512) 및 코드 저장부(code store)(514)와 통신한다. ECC 가속기(510)는, 메모리에 저장될 데이터에 대한 에러 정정 리던던시를 계산하고, 메모리로부터 판독되는 데이터 내의 에러들을 정정하기 위해 메모리로부터 판독되는 리던던시를 이용함에 있어서 CPU(508)를 지원하기 위한 하나 이상의 회로들을 포함한다. 일부 실시예들에서, ECC 가속기(510)가 에러 정정 리던던시를 계산할 때, 데이터가 버퍼 캐시(504)에 저장된다. ECC 가속기(510)는 버퍼 캐시(504)로부터 데이터를 판독하고, 버퍼 캐시(504) 내에 에러 정정 리던던시를 저장할 수 있다. 일 실시예에서, ECC 가속기(510)는 프로세서 및 상기 계산을 실시하기 위한 소프트웨어를 포함할 수 있다. ECC 가속기(510)의 일부 구현들은 모든 에러 정정 관련 계산들을 수행하는 한편, 다른 실시예들에서, ECC 가속기(510)는 에러 정정 절차들과 관련된 계산을 함에 있어서 CPU(508)를 지원할 것이다. 미가공(raw) 데이터가 호스트 인터페이스로부터 판독되고, 에러 정정 리던던시가 이러한 데이터에 부가되고, 리던던시를 갖는 데이터가 궁극적으로 메모리 칩에 저장될 수 있도록 하기 위해 버퍼 캐시(504)에 저장될 수 있다.
RAM(512)은 CPU(508)에 대한 메모리의 역할을 한다. 코드 저장부(514)는 CPU(508)를 동작시키기 위한 펌웨어를 포함한다. 제어기(244)는 또한 (도 3의) 제어기(244)의 컴포넌트들 및 메모리 칩(212)에 안정된 전압을 제공하기 위한 전압 조정기(516)를 포함한다. 클럭 생성기(518) 또한 (도 3의) 제어기(244)의 컴포넌트들 및 (도 3의) 메모리 칩(212)에 안정된 클럭을 제공한다.
일 실시예에서, (도 3의) 메모리 어레이(들)(200)의 메모리 셀들은 데이터를 이진 데이터로서 저장한다. 즉, 1비트의 데이터가 각 메모리 셀에 저장될 수 있으며, 각 메모리 셀은, 이 메모리 셀이 판독될 때, 그 임계 전압이 2개의 임계 전압 분포들중 하나에 해당하도록 충전된다. 예를 들어, 도 7은 2개의 임계 전압 분포들: 소거된 메모리 셀들과 관련된 제 1 임계 전압 분포(Er) 및 프로그램된 메모리 셀들과 관련된 제 2 임계 전압 분포(P)를 나타낸다. 일 실시예에서, 임계 전압 분포(Er) 내의 메모리 셀들은 데이터 "1"을 저장하고, 임계 전압 분포(P) 내의 메모리 셀들은 데이터 "0"을 저장한다. 메모리 어레이가 소거될 때, (불량 칼럼들에 속하는 셀들을 제외한) 모든 메모리 셀들은 분포(Er) 내에 있게 될 것이다. 데이터가 메모리 어레이 내에 저장될 때, 메모리 셀들중 일부는 분포(P)로 프로그램될 것이다. 일부 실시예들에서, 분포(Er)는 0 볼트 미만이고, 분포(P)는 0 볼트 보다 높다.
다른 실시예들에서, (도 3의) 메모리 어레이(들)(200)의 메모리 셀들은 각 메모리 셀 내에 다수의 비트들을 저장할 것이다. 예를 들어, 메모리 셀들은 메모리 셀 마다 2 비트들, 메모리 셀 마다 3 비트들, 메모리 셀 마다 4 비트들 등을 저장할 수 있다. 본원에서 설명되는 기술에 대해서는, 메모리 셀 마다의 비트들 또는 이러한 비트들 내의 데이터 엔코딩에 대한 어떠한 특정 수도 요구되지 않는다. 단지 예시의 목적을 위해, 하기의 논의는 메모리 셀 마다 4개의 비트들을 이용하는 일 실시예를 설명할 것이다. 하지만, 다른 실시예들은 메모리 셀 마다 다른 수의 비트들을 이용할 것이다.
메모리 셀 마다 4개의 비트들을 이용하는 시스템은, 16개의 가능한 데이터 상태들에 해당하는 16개의 임계 전압 분포들을 이용할 것이다. 본 문서의 목적을 위해, 데이터 상태들 및 임계 전압 분포들은 교환가능하게 이용될 것이다. 16개의 데이터 상태들을 갖는 시스템에 대해, 데이터 상태들은 0-9 및 A-F 로서 라벨이 붙을 것이다. 상태 0은 소거된 메모리 셀들에 대한 임계 전압 분포에 해당한다. 따라서, 집단(population)의 모든 메모리 셀들이 소거될 때, 이러한 모든 메모리 셀들은 상태 0 에 있다. 메모리 셀들이 소거된 후, 이들은 상태 0 으로부터 나머지 15개의 상태들중 임의의 상태로 프로그램될 수 있다. 하기의 표는 16개의 상태들로의 데이터의 엔코딩의 일 예를 제공한다. 일 실시예에서, 각 데이터 비트는 개별적인 페이지와 관련되며, 이에 따라 각 메모리 셀은 4개의 페이지들 내에 데이터를 저장한다.
Figure pct00001
데이터를 엔코딩하기 위한 다른 많은 적절한 방식들이 있다. 예를 들어, 그 전체가 본원의 참조로서 통합되는 미국 특허 6,222,762호 및 미국 특허 공개 2004/0255090호는 다중-상태 플래시 메모리 셀들에 대한 다양한 데이터 엔코딩 방식들을 설명한다. 일 실시예에서는, 그레이 코드 할당을 이용하여, 데이터 값들이 임계 전압 범위들에 할당되는 바, 이에 따라 플로팅 게이트의 임계 전압이 오류로 인해 자신의 이웃하는 물리 상태로 시프트되더라도, 단지 하나의 비트만이 영향을 받을 것이다. 일부 실시예들에서, 데이터 엔코딩 방식은 다른 워드라인들, 다른 비트라인들, 비트라인들의 다른 그룹들 및 다른 블록들에 대해 변경될 수 있다. 데이터 엔코딩 방식은 시간에 따라 달라질 수 있거나, 또는 랜덤한 워드라인들에 대한 데이터 비트들이 인버트되거나, 또는 그렇지 않으면 랜덤화되어, 데이터 패턴 감도 및 메모리 셀들 상에서의 균일한 마모(wear)를 줄일 수 있다.
본원에서 설명되는 기술과 함께 이용될 수 있는 종래 기술에 일반적으로 알려져있는 많은 다른 프로그래밍 프로세스들이 있다. 즉, 본원에서 설명되는 기술은 임의의 하나의 특정 프로그래밍 프로세스로 한정되지 않으며, 아직 개발되지 않은 것들을 포함하는 많은 다른 프로그래밍 프로세스들이 본원에서 설명되는 기술과 함께 이용될 수 있다. 일 실시예서는, 3-패스 프로그래밍 프로세스를 이용하여, (선택된 워드라인으로서 지칭되는) 공통 워드라인에 연결된 메모리 셀들을 프로그램한다. 모든 메모리 셀들은 소거 상태에서 시작된다. 프로그래밍 프로세스의 제 1 패스에서, 메모리 셀들은 소거 상태에서 3개의 중간 상태들로 프로그램된다. 이는 도 8a에 그래픽적으로 나타나있다. 알 수 있는 바와 같이, 상태 0의 메모리 셀들은 상태들 I1, I2 및 I3 으로 프로그램된다. 많은 양의 메모리 셀들이 상태 0으로부터 프로그램되기 때문에, 상태 0의 높이는 대시 라인으로부터 실선으로 감소된다. 상태 0은 또한 동일한 워드라인 상에서의 프로그래밍으로 인해 넓어진다.
궁극적으로 상태 0, 1, 2 또는 3으로 프로그램될 메모리 셀들은, 프로그래밍의 제 1 패스 동안, 상태 0으로 유지될 것이다. 상태들 4, 5, 6 또는 7로 프로그램될 메모리 셀들은 프로그래밍 프로세스의 제 1 패스에서 상태 I1로 프로그램될 것이다. 상태들 8, 9, A 및 B로 프로그램될 메모리 셀들은 프로그래밍의 제 1 패스 동안 상태 I2로 프로그램될 것이다. 상태들 C, D, E 및 F로 프로그램될 메모리 셀들은 프로그래밍의 제 1 패스 동안 상태 I3으로 프로그램될 것이다.
일 실시예에서, 프로그래밍의 3개의 패스들 각각은 중단없이 연속적으로 수행될 수 있다. 다른 실시예에서는, 프로그래밍 프로세스의 패스들 사이에서, 하나 이상의 다른 워드라인들 상의 메모리 셀들이 프로그래밍을 수신할 수 있다. 이러한 방식은 이웃하는 메모리 셀들 간의 결합을 감소시킬 수 있다. 이웃하는 워드라인들 상의 메모리 셀들이 프로그래밍을 수신할 때, 이웃하는 메모리 셀들은 프로그래밍의 제 1 패스에서 프로그램되는 메모리 셀들에 결합될 것이다. 이러한 결합은 선택된 워드라인 상의 메모리 셀들의 외관상 임계 전압을 올림으로써, 상태들(0, I1, I2 및 I3) 각각이 넓어지게 한다. 도 8b는 이와 같이 넓어진 것을 나타내는 바, 대시 라인들은 최초 상태들이고, 결과적으로 넓어진 상태들은 실선들의 상태들이다. 이와 같이 넓어지는 것은 추가의 패스들에서 교정될 것이다.
프로그래밍 프로세스의 제 2 패스는 도 8b의 넓어진 상태들에 기초하여 수행될 것이다. 도 8c는 프로그래밍 프로세스의 제 2 패스를 그래픽적으로 도시하는 바, 시작 분포들을 대시 라인들로 나타내고, 새로운 분포를 실선들로 나타낸다. 상태 0 으로부터, 상태 1에 대해 의도된 메모리 셀들은 상태 1로 프로그램될 것이고, 상태 2에 대해 의도된 메모리 셀들은 상태 2로 프로그램될 것이며, 상태 3에 대해 의도된 메모리 셀들은 상태 3으로 프로그램될 것이다. 상태 0에 있었고 상태 0 에 남아있도록 의도되는 메모리 셀들은 상태 0으로 유지될 것이다. 일부 실시예들에서, 상태 0은 동일한 워드라인 상에서의 프로그래밍으로 인해 넓어질 것이다. 상태 0의 메모리 셀들의 개수가 감소되었기 때문에, 상태 0에 대한 임계 전압 분포의 높이가 감소될 것이다. 중간 상태 I1에 대해, 상태 4에 대해 의도된 메모리 셀들은 상태 4로 프로그램될 것이고, 상태 5에 대해 의도된 메모리 셀들은 상태 5로 프로그램될 것이고, 상태 6에 대해 의도된 메모리 셀들은 상태 6로 프로그램될 것이며, 그리고 상태 7에 대해 의도된 메모리 셀들은 상태 7로 프로그램될 것이다. 메모리 셀들이 하나의 임계 전압 분포에서 3개/4개의 임계 전압 분포로 프로그램되고 있기 때문에, 임계 전압 분포들의 높이들이 감소하게 된다. 중간 상태 I2에 대해, 상태 8에 대해 의도된 메모리 셀들은 상태 8로 프로그램될 것이고, 상태 9에 대해 의도된 메모리 셀들은 상태 9로 프로그램될 것이고, 상태 A에 대해 의도된 메모리 셀들은 상태 A로 프로그램될 것이며, 그리고 상태 B에 대해 의도된 메모리 셀들은 상태 B로 프로그램될 것이다. 중간 상태 I3에 대해, 상태 C에 대해 의도된 메모리 셀들은 상태 C로 프로그램될 것이고, 상태 D에 대해 의도된 메모리 셀들은 상태 D로 프로그램될 것이고, 상태 E에 대해 의도된 메모리 셀들은 상태 E로 프로그램될 것이며, 그리고 상태 F에 대해 의도된 메모리 셀들은 상태 F로 프로그램될 것이다.
선택된 워드라인에 대해 프로그래밍 프로세스의 제 2 패스가 수행된 후, 근처의 다른 워드라인들 상의 메모리 셀들이 프로그래밍의 제 1, 2 및 3 패스들을 수신할 수 있게 됨으로써, 선택된 워드라인 상의 프로그램되고 있는 현재의 메모리 셀들에 대한 결합을 야기한다. 이러한 결합은 메모리 셀들 중 일부 또는 그 이상의 메모리 셀들의 외관상 임계 전압이 올라가게 하며, 이에 따라 도 8d에 도시된 바와 같이, 임계 전압 분포들이 넓어지게 하는 바, 최초 분포들은 대시 라인들이고, 결과적으로 넓어진 분포들은 실선들이다.
결합으로 인해 임계 전압 분포들이 넓어진 것을 처리하기 위해, 제 3 프로그래밍 프로세스를 이용하여 임계 전압 분포들을 좁힌다. 이러한 프로그래밍 패스는 도 8e에 도시되어 있는 바, 도 8e는 상태들 1-F 각각이 좁아지고 있음을 나타낸다. 도 8e로부터 알 수 있는 바와 같이, 최초의 임계 전압 분포는 점선들로 나타내었으며, 좁은 임계 전압 분포는 실선으로 나타내었다. 또한, 동일한 WL의 프로그래밍 역시 소거 상태를 넓힌다. 상태 0은 좁아지지 않았음을 주목한다. 임계 전압 분포들이 좁아질 때, 임계 전압 분포들을 좁히기 위해, 데이터 상태의 메모리 셀들에 대한 임계 전압이 올라간다. 제 3 프로그래밍 패스 이후 다른 이웃하는 메모리 셀들의 부가적인 프로그래밍을 수신할 수 있기 때문에, 도 8f에 도시된 바와 같이, 이웃하는 메모리 셀들로부터의 결합으로 인해 도 8e의 임계 전압 분포들 각각이 넓어질 수 있다. 도 8f의 점선들은 결합으로 인해 넓어지기 이전의 임계 전압 분포들을 나타내며, 그리고 실선들은 결합으로 인해 임계 전압 분포들이 넓어진 이후의 임계 전압 분포들을 나타낸다.
도 9a는 메모리 셀 마다 4 비트 데이터를 저장하는 메모리 셀들의 16개의 데이터 상태들을 나타낸다. 일 실시예에서, 제어기는 다양한 메모리 셀들에 대한 데이터를 스크램블(scramble)하며, 이에 따라 16개의 상태들 간의 데이터의 분포는 도 9a에 도시된 바와 같이 균일하게 분포된다. 즉, 상기 테이블에서의 데이터 엔코딩은 일부 메모리 셀들에 대해 이용될 것이며, 균일한 분포를 달성하기 위해, 나머지 메모리 셀들은 다른 데이터 엔코딩을 이용할 것이다. 다른 실시예들에서, 데이터 엔코딩은 다른 메모리 셀들에 대해 변경되지 않을 것이다. 다른 실시예들에서는, 균일하지 않은 분포를 저장하기 위해 데이터 엔코딩이 스크램블될 것이다.
도 9a 및 9b는 메모리 셀들을 소거하기 위한 프로세스를 예시하는 데에 이용될 수 있다. 도 9a는 소거 프로세스가 수행되기 이전의 메모리 셀들의 임계 전압 분포들을 나타내며, 도 9b는 소거된 이후의 메모리 셀들의 임계 전압들을 나타낸다. 소거 프로세스는 프로그램되는 메모리 셀들의 임계 전압을 (도 9a에 도시된) 상태들 1-F로 변경시키며, 이에 따라 소거되는 메모리 셀들의 임계 전압은 모두 임계 전압 분포 0으로서 도 9b에 나타낸 소거 임계 전압 분포 내에 있게 된다. 도 9b의 소거 임계 전압 분포는 상태 0에 해당한다. 도 9b의 소거 임계 전압 분포로부터, 메모리 셀들은 도 8a-8f의 프로세스에 따라 프로그램될 수 있다.
일 실시예에서, 메모리 셀들은, 충분한 시간 기간 동안 p-웰을 소거 전압(예를 들어, 20V)로 올리고, 소스 및 비트라인들이 플로팅되는 동안, 선택된 블록의 워드라인들을 접지시킴으로써, 소거된다. 소거될 것으로 선택되지 않은 블록들 내에서, 워드라인들은 플로팅된다. 용량성 결합으로 인해, 비선택 워드라인들, 비트라인들, 선택 게이트 라인들, 및 공통 소스 라인 역시 소거 전압의 상당 부분까지 올라가게 되며, 이에 의해 소거될 것으로 선택되지 않은 블록들 상에서의 소거를 방해한다. 소거될 것으로 선택되는 블록들에서, 선택된 메모리 셀들의 터널 산화물층들에 강한 전계가 걸리고, 전형적으로 파울러-노드하임 터널링 메커니즘에 의해 플로팅 게이트들의 전자들이 기판측으로 방출됨에 따라, 선택된 메모리 셀들이 소거된다. 전자들이 플로팅 게이트로부터 p-웰 영역으로 이동함에 따라, 선택된 셀의 임계 전압이 낮아지게 된다. 소거는 전체 메모리 어레이 상에서 수행되거나, 개별적인 블록들 상에서 수행되거나, 또는 메모리 셀들의 셀들의 다른 유닛 상에서 수행될 수 있다. 소거 프로세스의 하나의 구현은, p-웰에 몇 개의 소거 펄스들을 인가하고, 소거 펄들 사이에서, NAND 스트링들이 적절하게 소거되었는 지를 검증하는 것을 포함한다.
도 10은 도 3의 시스템(또는 다른 시스템들)과 같은 비휘발성 메모리를 동작시키기 위한 프로세스의 일 실시예를 도시하는 흐름도이다. 단계(600)에서, 데이터 프로그램 요청이 호스트로부터 (도 3의) 제어기(244)에서 수신된다. 프로그램될 데이터가 또한 수신된다. 요청에 응답하여, 단계(602)에서, 제어기(244)는 데이터를 저장하기 위해 플래시 메모리 셀들의 어느 블록이 이용될 것인 지를 결정할 것이다. 단계(604)에서, 본원에서 설명되는 프로그래밍 프로세스들중 임의의 프로세스(또는 다른 프로그래밍 프로세스들)를 이용하여, 결정된 블록에 데이터가 프로그램될 것이다. 단계(606)에서, 프로그램된 데이터는 제어기(244)의 지시로 한번 또는 다수회 판독될 것이다. 단계들(604 및 606) 사이에는 예측 불가능한 양의 시간이 지나갈 수 있기 때문에, 이러한 단계들 사이에는 대시 라인들이 있으며, 그리고 단계(606)는 단계(604)에 응답하여 수행되지 않는다. 그렇다기 보다는, 단계(606)는 데이터 판독 요청 또는 다른 이벤트에 응답하여 수행된다.
도 11은 블록 내의 메모리 셀들을 프로그램하기 위한 프로그래밍 프로세스를 설명하는 흐름도이다. 도 11의 프로세스는 도 10의 단계(604)의 일 실시예이다. 도 11의 단계(632)에서, 메모리 셀들은 프로그래밍 이전에 (블록들 또는 다른 단위들로) 소거된다. 예를 들어, 임계 전압들은 도 9a의 임계 전압 분포들로부터 도 9b의 단일의 소거 임계 전압 분포로 변경된다. 도 11의 단계(634)에서, 소거된 메모리 셀들의 임계 전압 분포를 좁히기 위해, 소프트 프로그래밍이 수행된다. 소거 프로세스의 결과로서, 일부 메모리 셀들은 필요한 것 보다 더 깊은 소거 상태에 있을 수 있다. 소프트 프로그래밍 프로세스는, 더 깊은 소거된 메모리 셀들의 임계 전압을 소거 상태에 대해 여전히 유효한 범위 내의 더 높은 임계 전압으로 이동시키기 위해 프로그래밍 펄스들을 인가할 수 있다. 전체 블록이 하나의 동작으로 소거되기 때문에, 셀들을 이들이 존재하는 것 보다 더 깊게 소거되는 것을 선택적으로 금지시키는 것이 불가능하며, 추가의 소거 펄스들의 전송되었는 지를 체크한 다음, 블록 내에서 얼마나 많은 셀들이 여전히 소거되지 않았는 지를 체크하는 것 만이 가능하다. 이는 소거 상태의 넓은 분포를 야기하며, 이러한 분포를 좁히기 위해서는 소프트 프로그래밍이 요구된다. 단계(636)에서, 블록의 메모리 셀들은 본원에서 설명되는 바와 같이 프로그램된다. 단계(632-636)는, 상기 설명한 다양한 회로들을 이용하여, 상태 머신, 제어기, 또는 상태 머신과 제어기의 결합에 의해 지시되는 대로 수행될 수 있다. 예를 들어, (도 3의) 제어기(244)는 데이터를 프로그램하기 위해 커맨드들 및 데이터를 상태 머신에 발행(issue)할 수 있다. 응답하여, 상태 머신은 프로그래밍 동작들을 수행하기 위해 상기 설명한 회로들을 동작시킬 수 있다. 단계(638)에서, 제어기(244)는 막 성공적으로 기록된 하나 이상의 블록들이 실패할 경향이 있는 지를 결정한다. 실패할 경향이 있다면, 제어기(244)는 실패할 경향이 있는 블록들을 관리할 것이다. 예를 들어, 하나 이상의 새로운 블록들에 데이터가 다시 프로그램되고, 실패할 경향이 있는 블록들은 불량으로서 마크됨으로써, 더 이상 이용되지 않게 될 것이다. 일 실시예에서, 제어기에 의해 지시(또는, 야기)되는 바와 같이, 프로그래밍은 메모리 칩(212)에서 이루어진다.
도 12는 공통 워드라인에 연결된 메모리 셀들 상에서 프로그래밍을 수행하기 위한 프로세스의 일 실시예를 설명하는 흐름도이다. 도 12의 프로세스는 도 8a-8f의 프로그래밍 프로세스의 각 패스 동안 한번 또는 다수회 수행될 수 있다. 다른 실시예에서는, 각 패스 이후, PLC(도 12 참조)가 체크되고, 미리 정해진 어떠한 제한치를 넘으면, 블록은 불량으로 마크된다. 이러한 실시예는 높은 PLC에 도달하는 것을 가능하게 하기 때문에 덜 효율적이지만, 플래시 회로(212)가 변경되지 않은 채로 남고, 제어기(244) 내의 펌웨어 만이 수정되기 때문에, 구현하기가 더 간단하다.
전형적으로, 프로그램 동작 동안 제어 게이트에 인가되는 프로그램 전압은 일련의 프로그램 펄스들로서 인가된다. 프로그래밍 펄스들 사이에는, 검증을 가능하게 하기 위해 검증 펄스들의 세트가 인가된다. 많은 구현들에서, 프로그램 펄스들의 크기는 각각의 연속적인 펄스에 대해 소정의 스텝 사이즈 만큼 증가된다. 도 12의 단계(710)에서, 프로그래밍 전압(Vpgm)은 시작 크기(예를 들어, ~12V-16V 또는 다른 적절한 레벨)로 초기화되고, 상태 머신(222)에 의해 유지되는 프로그램 루프 카운터(PLC)는 1로 초기화된다. 단계(712)에서, 프로그램 신호(Vgpm)의 프로그램 펄스가 선택된 워드라인(프로그래밍을 위해 선택된 워드라인)에 인가된다. 비선택 워드라인들은 하나 이상의 부스팅 전압들(예를 들어, ~9V, 또는 특정의 구현에 대해 적절한 다른 크기들)을 인가받아, 당업계에 알려져있는 부스팅 기법들을 수행한다. 메모리 셀이 프로그램되어야 한다면, 해당하는 비트라인은 접지된다. 한편, 메모리 셀이 자신의 현재 임계 전압으로 유지되어야 한다면, 해당하는 비트라인은 프로그래밍을 금지하기 위해 Vdd(예를 들어, ~3.5-5V)에 연결된다. 부스팅 기법들에 대한 보다 많은 정보는 미국 특허 6,859,397호 및 미국 특허 출원 공개 2008/0123425호에서 찾아볼 수 있으며, 이들은 본원의 참조로서 본원에 통합된다. 단계(712)에서, 선택된 워드라인에 연결된 모든 메모리 셀들에 프로그램 펄스가 동시에 인가되며, 이에 따라 선택된 워드라인에 연결된 모든 메모리 셀들은 함께 프로그램된다. 즉, 이들은 동시에 (또는 겹치는 시간 동안) 프로그램된다. 이러한 방식으로, 선택된 워드라인에 연결된 모든 메모리 셀들은, 이들이 프로그래밍으로부터 로크아웃되지 않는한, 동시에 자신들의 임계 전압을 변경할 것이다.
단계(714)에서, 목표 레벨들의 적절한 세트를 이용하여, 선택된 메모리 셀들의 데이터 상태들이 검증된다. 단계(714)는 한번 이상의 검증 동작들을 수행하는 것을 포함한다. 만일 선택된 메모리 셀의 임계 전압이 적절한 목표 레벨에 도달한 것으로 검출되면, 그 메모리 셀은 추가의 프로그래밍으로부터 로크아웃되는데, 이는 예를 들어 이후의 프로그래밍 펄스들 동안, 그 비트라인 전압을 Vdd로 올림으로써 이루어진다. 단계(716)에서, 모든 메모리 셀들이 자신들의 목표 임계 전압들에 도달했는 지를 체크한다. 모든 메모리 셀들이 자신들의 목표 임계 전압들에 도달한 경우, 선택된 모든 메모리 셀들이 자신들의 목표 상태들로 프로그램되었으며 이들의 목표 상태들에 대해 검증될 때, 프로그래밍 프로세스가 성공적으로 완료된다. 단계(718)에서, "PASS"의 상태가 보고된다. 만일, 단계(716)에서, 모든 메모리 셀들이 자신들의 목표 임계 전압들에 도달한 것이 아니라면, 단계(720)에서, 자신들이 목표 임계 전압 레벨에 도달하지 않은 메모리 셀들의 개수가 소정의 개수 미만인 지를 체크한다. 이러한 소정의 개수는 판독 프로세스 동안 에러 정정을 이용하여 정정될 수 있는 메모리 셀들의 개수와 같거나 작을 수 있다. 만일 자신들의 목표 임계 전압 레벨에 도달하지 않은 메모리 셀들의 개수가 소정의 개수 미만이면(단계 720), 프로그래밍 프로세스가 완료되고, 단계(718)에서, "PASS"의 상태가 보고된다. 만일 자신들의 목표 임계 전압 레벨에 도달하지 않은 메모리 셀들의 개수가 소정의 개수 보다 크거나 같다면(단계 720), 프로그래밍 프로세스가 성공적으로 완료되지 않았으며, 프로세스는 단계(722)에서 계속된다.
단계(722)에서, 프로그램 루프 카운트(PLC)가 프로그램 제한값(program limit value, LIMIT)에 대해 체크된다. 프로그램 제한값(LIMIT)의 일 예는 40 이지만, 다른 값들도 이용될 수 있다. 만일 프로그램 루프 카운트(PLC)가 프로그램 제한값(LIMIT) 미만이 아니라면(단계 722), 프로그램 프로세스가 실패하게 되고, 단계(724)에서 FAIL의 상태가 보고된다. 단계(722)에서, 프로그램 루프 카운트(PLC)가 프로그램 제한값(LIMIT) 미만인 것으로 결정되면, 프로세스는 단계(726)에서 계속되며, 이 단계에서는, 프로그램 루프 카운트(PLC)가 프로그램 1 만큼 증분되고, 프로그램 전압(Vpgm)은 다음 크기로 스텝업된다. 예를 들어, 다음 펄스는 이전 펄스 보다 스텝 사이즈(예를 들어, 0.25V의 스텝 사이즈) 만큼 더 큰 크기를 가질 것이다. 단계(726) 이후, 프로세스는 단계(712)로 루프백하여, 다른 프로그램 펄스가 선택된 워드라인에 인가되며, 상기 설명한 바와 같이 프로세스가 계속된다. 일부 제품들에 있어서, 프로그래밍은 다수의 스테이지들로 달성된다. 각 스테이지는 전형적으로 한번, 그리고 때로는, 하위(lower) 상태들을 프로그램하기 전에 하이(high) 상태들을 프로그램하는 경우들에서는 2번 프로그램 전압을 스테어 케이싱(stair casing)하는 것으로 이루어진다. 프로그래밍의 각 스테이지는 그 스테이지와 관련된 하나 또는 두개의 PLC들을 가질 수 있다. 대안적으로, 3개의 스테이지들중 단지 하나의 루프 카운트들 만을 계속해서 알고 있는 것 만으로도 충분할 수 있다. 또한, 예를 들어 단지 3번째 스테이지의 하이 상태들의 루프 카운트를 계속해서 알고 있도록 선택할 수 있다. 대안적으로, 3번째 스테이지 루프 카운트는 하이 상태들을 프로그램하는 데에 요구되는 펄스들의 개수와 로우 상태들을 프로그램하는 데에 요구되는 펄스들의 개수의 합으로서 정의될 수 있다.
도 12의 프로세스는 동일한 워드라인에 연결된 다수의 메모리 셀들을 프로그램하는 데에 이용된다. 일 실시예에서, 페이지는 동시에 프로그램되는 메모리 셀들의 단위이다. 일 예에서, 각 워드라인은 하나의 페이지를 포함한다. 다른 실시예에서, 각 워드라인은, 각 비트 마다 하나의 페이지씩, 4개의 페이지들을 포함할 것이다. 도 12의 프로세스는 하나의 워드라인에 연결된 모든 메모리 셀들, 또는 특정 페이지 내의 메모리 셀들 만을 프로그램하는 데에 이용될 수 있다. 도 8a-8f의 3-패스 프로그래밍 프로세스를 되돌아보면, 도 12의 프로세스는 각 패스에 대해 한번 수행될 수 있다. 다른 실시예에서, 도 12의 프로세스는 각 패스에 대해 한번 이상 수행될 수 있다. 예를 들어, 제 1 패스(도 8a)는 도 12의 프로세스를 한번 이용하여, 상태들(I1, I2 및 I3)로 동시에 프로그램할 수 있다. 대안적으로, 도 12의 프로세스는, 각 상태에 대해 한번씩, 제 1 패스 동안 3번 이용될 수 있다. 다른 실시예에서, 도 12의 프로세스는 먼저 상태(I3)를 프로그램하는 데에 이용될 수 있으며, 이후 도 12의 프로세스를 이용하여 상태들(I1 및 2)을 (함께 또는 개별적으로) 프로그램할 수 있다.
제 2 패스는 15개의 모든 상태들을 동시에 프로그램하기 위해 도 12의 프로세스를 이용하는 것을 포함할 수 있다. 대안적으로, 도 12의 프로세스는 첫 번째로 상태들(1, 2, 3, 4)을 동시에 프로그램하는 데에 이용될 수 있고, 도 12의 프로세스는 두 번째로 상태들(5, 6, 7, 8)을 동시에 프로그램하는 데에 이용될 수 있고, 도 12의 프로세스는 세 번째로 상태들(8, 9, A, B)을 동시에 프로그램하는 데에 이용될 수 있으며, 그리고 도 12의 프로세스는 네 번째로 상태들(C, D, E, F)을 동시에 프로그램하는 데에 이용될 수 있다. 일부 실시예들에서는, 상위(higher) 상태들이 하위 상태들 이전에 프로그램될 수 있다(C, D, E, F가 먼저 프로그램되거나, 또는 상태들 1-7 이전에, 8, 9, A, B, C, D, E, F가 프로그램될 수 있다). 다른 실시예에서, 각 상태는 도 12의 프로세스를 이용하여 개별적으로 프로그램될 것이다
프로그래밍 프로세스의 제 3 패스는 또한 도 12의 방법을 이용할 수 있다. 일 실시예에서, 도 12의 방법은 각 상태에 대해 개별적으로 수행될 것이다. 다른 실시예에서, 모든 상태들은 도 12의 프로세스를 이용하여 동시에 프로그램될 것이다. 다른 실시예에서는, 도 12의 프로세스를 이용하여 상위 상태들이 먼저 프로그램된 다음, 하위 상태들이 프로그램된다(C, D, E, F가 먼저 프로그램되거나, 또는 상태들 1-7 이전에, 8, 9, A, B, C, D, E, F가 프로그램될 수 있다). 다른 변형들이 또한 이용될 수 있다.
상기 설명한 바와 같이, 프로그래밍 프로세스를 위한 패스들 사이에서, 이웃하는 워드라인들 상의 메모리 셀들이 또한 프로그램될 수 있다. 도 13은 워드라인들을 프로그램하기 위한 순서의 일 예를 설명하는 챠트이다. 알 수 있는 바와 같이, 프로그래밍 프로세스의 제 1 패스를 수신함으로써 워드라인 0(소스 라인에 가장 가까운 워드라인)이 먼저 프로그램되고, 이후 워드라인 1이 프로그래밍 프로세스의 제 1 패스를 수신하고, 이후 워드라인 0이 프로그래밍 프로세스의 제 2 패스를 수신하고, 이후 워드라인 2가 프로그래밍 프로세스의 제 1 패스를 수신한다.
일 실시예에서, 데이터는 먼저 이진 데이터로서 저장된다. 예를 들어, (도 3의) 제어기(244)는 먼저 프로그램하기 위한 데이터를 (도 6의) 버퍼 캐시(504)에 저장할 것이다. 버퍼 캐시(504)로부터, 데이터는 (도 3의) 메모리 어레이(200) 내에 이진 데이터로서 저장될 것이다. 충분한 데이터가 이진 데이터로서 메모리 어레이 내에 저장되어, 메모리 셀 마다 4 비트들의 완전한 블록을 채울 수 있을 때(예를 들어, 이진 데이터의 4개의 블록들이 있다), 데이터는 메모리 셀 마다 4 비트들로서 메모리 셀 내의 블록에 재기록된다(포개어진다(folding)). 이러한 프로세스는 도 14에 의해 설명된다. 단계(740)에서, (도 3의) 제어기(244)에서 호스트로부터 데이터가 수신된다. 이러한 데이터는 (도 6의) 버퍼 캐시(504)에 저장된다. 이후, 단계(742)에서, 버퍼 캐시로부터의 데이터는 메모리 어레이 내에 이진 데이터로서 프로그램된다. 단계(744)에서, 메모리 셀 마다 4 비트들(또는 셀 마다 다른 양의 비트들)을 저장하는 메모리 셀들의 블록에 대한 충분한 데이터가 없는 것으로 결정되면, 도 14의 프로세스는 완료된다(단계 745). 데이터 마다 4 비트들을 저장하는 메모리 셀들의 블록에 대한 충분한 데이터가 있다면, 단계(746)에서, 새로운 블록에 대한 데이터가 메모리 어레이로부터 판독되어, (도 6의) 버퍼 캐시(504)에 저장될 것이다. 단계(748)에서, 데이터의 각 페이지에 대해, (도 3의) 제어기(244)는 에러 정정 코드들을 계산하고, 에러 정정 코드(들)를 데이터에 부가하고, (ECC를 갖는) 모든 데이터를 다시 메모리 어레이 내에 그리고 버퍼 캐시(504) 내에 이진 데이터의 4개의 페이지들로서 일시적으로 저장할 것이다. 단계(750)에서, 이진 데이터의 4개의 페이지들은 버퍼 캐시(504)로부터 (도 3의) 메모리 어레이(200) 내로 메모리 셀 마다 4 비트들의 하나의 블록으로서 프로그램된다. 도 14의 프로세스는 다른 해결책들(예를 들어, 셀 마다 2 비트, 셀 마다 3 비트 등)과 함께 이용될 수 있다. 대안적으로, 도 14에서, 스크램블링 및 ECC 리던던트 비트들이 단계(742) 또는 단계(750)에서 이미 계산되었다고 가정하면서, 단계(748)에서 이진 데이터를 기록하는 것은 건너 뛸 수 있으며, 단계(750)에서, 각 셀 내에 4 비트들을 보유하고 있는 메모리 셀에 데이터가 직접 기록될 수 있다.
상기 설명한 바와 같이, 프로그래밍 프로세스 동안, 시스템은 임계 전압이 목표 임계 전압에 도달했는 지를 검증할 것이다. 프로그래밍 이후, 시스템은 또한, 메모리 셀에 의해 저장된 데이터를 판독하기 위해, 임계 전압을 판독할 수 있다. 일반적으로, 판독 및 검증 동작들 동안, 선택된 워드라인은 각 판독 또는 검증 동작에 대해 특정되는 전압 레벨에 연결되어, 관련된 메모리 셀에 대한 임계 전압이 이러한 전압 레벨에 도달했는 지를 결정한다. 워드라인의 제어 게이트에 전압을 인가한 후, 메모리 셀의 도통 전류를 측정하여, 그 워드라인에 인가된 전압에 응답하여 그 메모리 셀이 턴온되었는 지를 결정한다. 도통 전류가 특정 값 보다 큰 것으로 측정되면, 그 메모리 셀은 턴온되었고, 워드라인에 인가된 전압은 그 메모리 셀의 임계 전압 보다 큰 것으로 여겨진다. 도통 전류가 특정 값 보다 큰 것으로 측정되지 않으면, 그 메모리 셀은 턴온되지 않았고, 워드라인에 인가된 전압은 그 메모리 셀의 임계 전압 보다 크지 않은 것으로 여겨진다.
판독 또는 검증 동작 동안 메모리 셀의 도통 전류를 측정하는 많은 방법들이 있다. 일 예에서, 메모리 셀의 도통 전류는 그 메모리 셀이 감지 증폭기 내의 캐패시터를 방전 또는 충전시키는 속도(rate)에 의해 측정된다. 다른 예에서, 선택된 메모리 셀의 도통 전류는 그 메모리 셀을 포함하는 NAND 스트링이 비트라인 상의 전압을 방전시키는 것을 가능하게 한다(또는 가능하게 하는 데에 실패한다). 어느 정도의 시간 기간 이후 비트라인 상의 전하를 측정하여, 그 비트라인이 방전되었는 지의 여부를 결정한다.
상기 설명한 바와 같이, 판독 및 검증 동작들 동안, 선택된 워드라인의 제어 게이트에는 특정의 판독 및 검증 동작에 해당하는 전압이 인가된다. 즉, 메모리 셀들이 프로그램될 수 있는 모든 데이터 상태는 적어도 하나의 판독 비교 값 및 검증 비교 값을 가질 것이다. 검증 프로세스는 검증 비교 값을 이용하여, 적절한 메모리 셀들이 그 특정 데이터 상태에 도달했는 지를 결정한다. 판독 비교 값들은, 메모리 셀들이 특정 데이터 상태들에 있는 지의 여부를 결정하는 데에 이용된다. 도 15는 판독 비교 값들 및 검증 비교 값들을 갖는 도 9a의 임계 전압 분포의 일부를 나타낸다. 예를 들어, 상태 0과 상태 1 사이에는, 판독 비교 값 Vr1이 있다. 데이터 상태들 1과 2 사이에는, 판독 비교 값 Vr2가 있다. 데이터 상태들 2와 3 사이에는, 판독 비교 값 Vr3이 있다. 메모리 셀이 4개의 비트들을 보유하는 경우, 각 데이터 상태들 사이에 판독 비교 값(Vr1, Vr2, Vr3, Vr4...Vr15)이 있다. 예를 들어, 워드라인이 Vr1 을 인가받을 때 메모리 셀들이 전류를 도통시키는 지를 테스트함으로써, 시스템은 그 메모리 셀들이 데이터 상태 0에 있는 지의 여부를 결정할 수 있다. Vr1 및 Vr2가 워드라인에 인가되는 것에 응답하여 메모리 셀들이 전류를 도통시키는 지를 테스트함으로써, 시스템은 그 메모리 셀들이 상태 1에 있는 지의 여부를 결정할 수 있다. 각 임계 전압 분포의 바텀 에지(bottom edge)에는, 검증 비교 값이 있다. 예를 들어, 데이터 상태 1의 바텀 에지에는 Vv1이 있고, 상태 2의 바텀 에지에는 검증 비교 값 Vv2가 있으며, 그리고 데이터 상태 3의 바텀 에지에는 검증 비교 값 Vv3이 있으며, 이하 계속된다. 예를 들어, 메모리 셀의 임계 전압이 Vv2와 같거나 또는 더 크면, 이 메모리 셀은 상태 2로 성공적으로 프로그램된 것이다.
도 16은 판독 프로세스 동안 비선택 워드라인들, 선택된 워드라인 및 소스 라인의 동작을 나타내는 타이밍도이다. 이러한 특정의 판독 프로세스에서, 비선택 워드라인들은 오버드라이브 신호(overdrive signal)로 올라가며, 이에 의해 비선택 메모리 셀들이 도통될 것이다. 선택된 워드라인은 처음에 비선택 워드라인들의 자신들의 목표 전압에 도달하는 것을 돕기 위해 램프업(ramp up)될 것이다. 이후, T1에서 시작하여, 선택된 워드라인은 판독 비교 값들(Vr1...Vr15) 각각을 통해 순환(cycle)할 것이다. 소스 라인은 판독들 사이에서 펄싱(pulsing)되며, 이에 따라 시스템은 대안적으로 안정화한 다음, 감지하고, 안정화하고, 감지하고, 안정화하고, 감지하는 등등 계속된다. 다른 실시예에서, 선택된 워드라인은 판독 비교 값들 각각에 대해 펄스들을 인가받으며, 비선택 워드라인들은 각 펄스 이전에 올라가고, 각 펄스 이후에 소산(dissipate)된다. 또한, 종래에 알려진 다른 판독 프로세스들도 이용될 수 있다. 본원에서 설명되는 기술은 어떠한 하나의 특정 타입의 판독 프로세스로 제한되지 않는다.
도 17은 소거 프로세스의 일 실시예를 설명하는 흐름도이다. 일반적으로, 소거 프로세스는 메모리 어레이의 p-웰에 소거 펄스들을 인가하는 것을 포함한다. 일 실시예에서, 메모리 셀들은 p-웰의 표면 상에서 구현되고, p-웰은 n-웰 내에 있고, n-웰은 p 기판 내에 있다. 펄스들 사이에서, 시스템은 블록이 적절하게 소거되었는 지를 검증할 것이다. 프로그래밍 프로세스와 마찬가지로, 시스템은 펄스들의 개수의 카운트를 유지할 것이다(소거 루프). 소거 루프들의 개수는 소거 카운트(EC)에 의해 유지된다. 도 17의 단계(770)에서, 소거 카운터(EC)는 1로 초기화된다. 단계(772)에서, 비트라인들 및 소스 라인들은 플로팅된다. 단계(774)에서, 선택된 블록에 대한 워드라인들은 접지되고, 비선택 블록들에 대한 워드라인들은 플로팅된다. 단계(776)에서, 전압 펄스가 p-웰에 인가된다. 일 실시예에서, 전압 펄스는 20V 이다. 단계(778)에서, 시스템은 블록이 적절하게 소거되었는 지를 검증한다. 일 실시예에서, 소거 검증 전압이 모든 워드라인들에 인가되고, 블록에 대한 최소 개수의 NAND 스트링들(모든 NAND 스트링들, 또는 소정의 제한치보다 큰 개수)이 소거 검증 전압에 응답하여 도통하는 지를 결정한다. 일 실시예에서, 소거 임계 전압 분포가 완전히 0V 아래에 있을 때, 워드라인들에 인가되는 소거 검증 전압은 0V 이다. 모든 NAND 스트링들(또는 소정의 최소 개수의 NAND 스트링들)이 모두 검증 프로세스를 통과하면(단계 780), 소거 프로세스는 성공적으로 완료된다(단계 782). 만일 워드라인들에 인가되는 소거 검증 전압에 응답하여 최소 개수의 NAND 스트링들이 도통된다면, 단계(784)에서, 시스템은 소거 카운트(EC)가 소거 제한값(LIMIT) 미만인지를 결정한다. 만일 소거 카운트(EC)가 소거 제한값(LIMIT) 미만이면, 단계(786)에서, 시스템은 전압 펄스의 크기를 스텝 사이즈 만큼 스텝시키고, 소거 카운트(EC)를 1 만큼 증분시킬 것이다. 단계(786) 이후, 프로세스는 단계(776)로 루프백되어, 다른 전압 펄스를 인가한다. 일 실시예에서, 전압 펄스는 스텝시키지 않을 것이며, 각 반복(iteration)은 동일한 크기의 전압 펄스를 인가하는 것을 포함할 것이다. 다른 실시예들에서, 전압 펄스의 폭은 각 반복에 대해 변경될 수 있다. 소거 카운트(EC)가 소거 제한값(LIMIT) 미만이 아니면(단계 784), 소거 프로세스는 실패하게 된다(단계 788). 소거 제한값(LIMIT)의 일 예는 10 이다. 주목할 사항으로서, 일부 실시예들에서는, 프로그래밍과 유사하게, 반드시 모든 메모리 셀들이 검증을 통과할 필요는 없는데, 왜냐하면 ECC가 이들을 이후에 정정할 수 있는 경우, 시스템이 무시할 수 있는 어떠한 작은 개수의 메모리 셀들이 있다. 이러한 메모리 셀들은 스턱 셀들(stuck cells)이라 불린다.
상기 설명한 바와 같이, 데이터가 블록에 성공적으로 프로그램되고, 이후 워드라인, 메모리 셀들, 또는 메모리의 다른 부분들에서의 악화(deterioration)로 인해 이러한 데이터를 읽는 것이 더 이상 가능하지 않게 되는 많은 시간들(times)이 있다. 프로그래밍 및 프로그래밍 동작이 성공적이었다는 상태를 수신한 후, 막 프로그램된 블록이 미래에 실패할 경향이 있는 지를 예측하기 위한 기술이 제안된다. 따라서, 비휘발성 저장 소자들의 세트가 아직 실패하지 않았다고 할지라도, 이러한 비휘발성 저장 소자들의 세트가 실패할 경향이 있다는 예측이 이루어진다. 만일 블록이 미래에 실패할 경향이 있다면, 그 블록에 저장된 데이터는 다른 블록에 다시 프로그램될 수 있는데, 왜냐하면 그 데이터는 (도 3의) 제어기(244) 상의 (도 5의) 버퍼 캐시(504) 또는 (도 3의) 메모리 칩(212) 상의 이진 버퍼에서 여전히 이용가능하기 때문이다. 일 실시예에서, 제어기(244)는 정상과 다른 행동을 찾기 위한 일련의 테스트들을 수행한다. 블록이 성공적으로 프로그램 또는 소거되는 때 조차도, 이러한 차이가 식별되고, 실패 예측을 위한 표시로서 이용될 수 있다.
실시예들의 일 세트에 있어서, (도 3의) 제어기(244)(또는 다른 컴포넌트)는 테스팅의 2개의 페이지들을 수행할 것이다. 테스팅의 제 1 페이즈 동안, 제어기는 신속하게 완료될 수 있는 테스트를 수행할 것이다. 블록이 테스트에 실패하면, 그 블록은 의심되는 블록(suspected block)으로 고려될 것이다. 테스트를 통과한 블록들은 의심되는 블록으로서 마크되지 않을 것이며, 더 이상의 어떠한 테스팅도 받지 않을 것이다. 의심되는 블록들은 테스팅의 제 2 세트를 받게 되는데, 이러한 테스팅의 제 2 세트는 더 엄격하고 시간이 더 걸린다. 제 2 테스트에 실패한 블록들은 실패할 경향이 있는 불량 블록들로서 고려될 것이다. 이러한 불량 블록들로부터의 데이터는 어떠한 다른 곳에 다시 프로그램될 것이며, 이 블록은 불량으로 마크되어, 미래에 이용되지 않을 것이다. 제 2의 일련의 테스트들을 통과한 블록들은 정상인 것으로 고려될 것이다. 이러한 이중 페이즈 기법은, 악화되는 블록들이 여전히 이용가능할 때 이러한 악화되는 블록들의 오검출을 최소화하면서, 모든 블록들 상에서 디바이스의 수명 동안 실시간에 있어서 과도한 시간 소모적인 테스트를 피함으로써 성능(프로그래밍 쓰루풋)을 유지하는 것을 돕는다.
도 18은 실패할 경향이 있는 블록들을 식별 및 관리하기 위한 테스트들의 2개의 페이지들을 수행하는 하이 레벨 프로세스를 설명하는 흐름도이다. 제어기에 의해 수행되는 도 18의 프로세스는 도 11의 단계(638)의 하나의 예시적인 구현이다. 도 18의 프로세스는, 메모리 셀들의 프로그래밍(및/또는 소거)을 성공적으로 완료한 이후 수행된다. 단계(802)에서, (도 3의) 제어기(244)는 테스팅의 제 1 페이즈를 수행한다. 제어기(244)가 테스팅을 행하거나, 또는 이러한 테스팅을 행하도록 (도 3의) 메모리 칩(212)에게 지시하는 것이 가능하다. 단계(804)에서, 블록이 테스트를 통과 또는 실패했는 지가 결정된다. 블록이 테스트를 통과했다면, 그 블록은 불량 블록으로서 마크되지 않으며(단계 806), 도 18의 프로세스는 완료된다. 블록이 단계(802)의 테스트에 실패했다면, (일 실시예에서) 블록은 의심받는 블록으로서 마크되며, 단계(808)에서, 그 블록 상에서 테스팅의 제 2 페이즈가 수행된다. 따라서, 일 실시예에서, 제 2 테스트는 제 1 테스트에 실패한 메모리 셀들에 대해서만 수행된다. 테스팅의 제 2 페이즈는 제어기에 의해 수행되거나, 또는 제어기의 지시하에서 메모리 칩(212)에 의해 수행될 수 있다. 단계(810)에서, 블록이 테스팅이 제 2 세트를 통과 또는 실패했는 지를 결정한다. 블록이 테스팅의 제 2 페이즈를 통과했으면, 그 블록은 양호한 것으로서 고려되며, 단계(806)에서, 불량 블록으로서 마크되지 않는다. 블록이 테스팅의 제 2 페이즈에 실패하면(단계 808), 단계(810) 이후, 블록은 단계(812)에서 불량으로서 마크된다. 상기 설명한 바와 같이, 테스팅의 제 1 페이즈(단계 802)는 신속하게 수행될 수 있는 한편, 테스팅의 제 2 페이즈는 시간이 더 많이 걸리는 보다 철저한(in-depth) 테스트이다. 블록들의 작은 서브세트 만이 테스팅의 제 2 페이즈를 받게 함으로써, 이러한 테스팅에 대한 어떠한 성능 불이익이 감소된다.
일 실시예에서, 제어기(244)는 블록 식별들의 테이블, 및 블록이 불량한 지의 여부를 나타내는 플래그들(flags)을 유지할 것이다. 이러한 테이블은 제어기에 대한 관리 데이터를 저장하는 데에 전용되는 메모리 어레이의 일부 내에 저장될 수 있다. 대안적으로, 이러한 테이블은 제어기 내에 저장될 수 있다. 이러한 데이터는 또한 다른 비휘발성 저장소에 저장될 수 있다. 데이터는 비휘발성 저장소에 저장되며, 이에 따라 파워가 다운되더라도, 이러한 데이터를 잃어버리지 않게 된다.
단계(812)에서 블록을 불량으로서 마크한 후, 제어기(244)는 그 데이터를 새로운 블록에 다시 프로그램할 것이다. 이러한 데이터는 버퍼 캐시(504) 내에 있거나, 또는 메모리 어레이(200) 내에 이진 데이터로서 저장될 가능성이 있다(도 14의 단계(742) 또는 단계(748) 참조). 이러한 위치들중 임의의 위치로부터, 제어기는 메모리 칩(212)에게 데이터를 불량으로서 마크되지 않은 새로운 블록에 프로그램할 것을 지시할 수 있다. 프로그래밍은, 예를 들어 도 10, 12, 14 및 17에서 상기 설명한 프로세스들중 임의의 프로세스를 이용하여 이루어질 수 있다.
단계(816)에서, 제어기(244)는 불량 블록들의 개수를 카운트할 수 있다. 단계(818)에서, 단계들(802 및 808)에서 테스팅에 이용하는 데에 이용되는 임계치들이 단계(816)에서 카운트된 불량 블록들의 개수에 기초하여 조정될 수 있다. 예를 들어, 불량 블록들의 개수가 너무 많으면, 제어기(244)는 블록이 테스트에 실패한 것으로 결정하기 위한 임계치를 올릴 수 있다. 즉, 이용가능한 블록들의 개수가 점점 작아짐에 따라, 제어기는 블록이 사용자 데이터를 저장하기 위해 로테이션(rotation)으로부터 빠지기 전에 실패할 가능성이 있다는 높은 확신을 갖기를 원한다. 일부 실시예들에서, 단계들(816 및 818)은 항상 수행된다. 다른 실시예들에서는, 도 18의 프로세스가 수행될 때와 반대로, 단계들(816 및 818)은 주기적으로만 수행된다. 대안적으로, 단계들(816 및 818)은 도 18의 프로세스와 개별적으로 수행된다. 일부 실시에들에서, 단계들(816 및 818)은 구현되지 않는다.
도 12와 관련하여 상기 설명한 바와 같이, 프로그래밍 프로세스는 루프(다수의 반복들)를 반복하는 것을 포함한다. 각 루프에서, 프로그램 루프 카운트(PLC)가 증분된다. 일 실시예에서, 프로그래밍 루프들의 개수는, 블록이 악화되고 있거나, 그렇지 않으면 실패할 경향이 있다는 표시로서 이용된다. 따라서, 일 실시예에서, 테스팅의 제 1 페이즈는, 프로그래밍이 완료하기 위하여 너무 많은 루프들을 수행했는 지를 결정하기 위해, 프로그램 루프 카운트(PLC)를 검사한다. 다른 실시예들에서, 이러한 테스트는 또한 테스팅의 제 2 페이즈를 위해 이용될 수 있다. 도 19는 테스팅의 제 1 페이즈로서 프로그램 루프 카운트(PLC)를 이용하는 프로세스의 일 실시예를 설명하는 흐름도이다. 즉, 도 19의 흐름도는 도 18의 단계(802)의 일 구현이다. 일 실시예에서, 도 19의 프로세스는 제어기(244)에 의한 커맨드에 의해 또는 이러한 커맨드에 따라 수행된다.
도 19의 단계(840)에서, 제어기(244)는 각 워드라인(또는 블록의 다른 부분)에 대해 하나 이상의 프로그램 루프 카운트들(PLC)을 획득한다. 프로그래밍이 완료된 후, 메모리 칩(212)은 각 워드라인에 대한 프로그램 루프 카운트(PLC)를 래치, 레지스터, 또는 그 워드라인과 관련된 메모리 위치에 저장할 것이다. 제어기는 메모리 칩(212)에 커맨드를 발행함으로써 프로그램 루프 카운트(PLC)를 요청할 수 있다. 일 실시예에서, 메모리 칩(212)은 3 패스 프로그래밍 기법의 각 패스에 대해 프로그램 루프 카운트를 저장할 것이며, 3개의 모든 프로그램 루프 카운트들이 제어기(244)에 전송될 것이다. 다른 실시예에서는, 3개의 프로그램 루프 카운트들의 평균 만이 각 워드라인에 대해 전송될 것이다. 다른 실시예에서, 메모리 칩은 가장 늦은(latest) 프로그램 루프 카운트(예를 들어, 3 패스 프로그래밍 프로세스의 세번째 패스) 만을 저장할 것이다. 따라서, 가장 늦은 프로그램 루프 카운트 만이 제어기(244)에게 전송될 것이다. 다른 실시예에서, 메모리 칩(212)은 모든 프로그래밍 패스들의 카운트의 합을 포함하는 프로그램 루프 카운트를 저장할 것이다. 일부 실시예들에서, 도 12의 프로세스는 각 패스에 대해 다수회 수행될 수 있다. 이러한 경우들에 있어서, 메모리 칩은 또한 마지막 패스에 대한 도 12의 프로세스의 마지막 성능에 대한 프로그램 루프 카운트를 전송할 수 있다. 대안적으로, 메모리 칩(212)은 모든 패스들에 대한 도 12의 프로세스의 모든 성능에 대한 프로그램 루프 카운트들, 모든 프로그램 루프 카운트들의 평균, 또는 어떠한 다른 서브세트를 전송할 것이다.
주목할 사항으로서, 플래시 메모리 시스템들의 일부 실시예들에서, 플래시는 워드라인의 메타데이터(metadata)의 일부로서 플래시 그 자체 내에 워드라인 마다 PLC를 유지하지 않는다. 각 패스 이후, 이러한 개수는 플래시로부터 제어기(244)에 의해 판독될 수 있다. 하지만, 일단 새로운 프로그래밍 패스가 개시되면, (도 12에서와 같이), PLC는 0으로 설정되고, PLC의 임의의 이전 값(들)은 잃어버리게 된다.
일부 구현들에서, 시스템은, 하위 상태들을 프로그램하기 전에, 하이 상태들을 프로그램한다. 예를 들어, 도 12의 프로세스는 가장 높은 8개의 상태들을 프로그램하기 위해 제 3 패스에서 이용될 것이며, 이후 도 12의 프로세스는 상태들 1-7을 프로그램하기 위해 제 3 패스에서 이용될 것이다. 일부 실시예들에서, 제 3 패스에 대한 양 프로그램 루프 카운트들은 단계(840)에서 각 워드라인에 대해 전송될 것이다. 다른 실시예들에서는, 하이 상태들에 대한 제 3 패스로부터의 프로그램 루프 카운트들 만이 전송되거나, 또는 로우 상태들에 대한 제 3 패스로부터의 프로그램 루프 카운트들 만이 전송될 것이다.
2개의 평면들이 동시에 프로그램되는 일부 실시예들에서, 이러한 2개의 평면 내의 해당하는 워드라인들에 대한 양 프로그램 루프 카운트들은 (도 3의) 칩(212)으로부터 (도 3의) 제어기(244)에 전송될 수 있다. 2개의 평면들이 동시에 프로그램되는 다른 실시예들에서, 2개의 평면들 내의 해당하는 워드라인들에 대한 2개의프로그램 루프 카운트들 중 더 큰 것이 전송된다. 어떤 프로그램 루프 카운트들이 전송될 지에 대한 다른 변형들도 이용될 수 있다.
도 19의 단계(842)에서, 제어기(244)는 수신된 프로그램 루프 카운트(PLC)에 대한 평균을 계산할 것이다. 예를 들어, 일 실시예에서, 제어기(244)는 각 워드라인에 대해 하나의 프로그램 루프 카운트(PLC)를 수신할 것이다. 이러한 PLC들을 더하고 평균하여, 전체 블록에 대한 평균 프로그램 루프 카운트를 생성한다. 단계(844)에서, 각 워드라인에 대한 각 PLC는 평균과 비교된다. 단계(846)에서, 제어기(244)는 단계(844)에서 비교되는 PLC들 중에서 어느 하나가 평균 보다 어떠한 상수 K1 만큼 더 큰지를(예를 들어, PLC>avg+K1 ? 인지를) 결정할 것이다. K1의 일 예는 6 이다. 모든 PLC들이 (avg+K1) 보다 작거나 또는 같다면, 블록은 테스팅의 제 1 페이즈를 통과한다(단계 848). 어떠한 PLC가 평균 PLC 보다 큰 K1 루프들 보다 많다면, 블록은 실패한다(단계 850). 이러한 실패한 블록은 의심받는 것으로서 주목될 것이며, 블록이 실패하도록 야기한 워드라인이 주목될 것이며, (도 6의) RAM(512)에 저장될 것이다. 다른 실시예에서, 제 1 테스트가 실패했는 지를 결정하기 위해, PLC는, 평균이 아닌, 상수와 비교된다.
도 19의 프로세스에 대한 하나의 대안은 프로그램 루프 카운트에 대해 도 19에서 이용되는 PLC와 유사한 방식으로 소거 카운트(EC)를 비교하는 것이다. 즉, 도 17과 관련하여 상기 설명한 바와 같이, 시스템은 소거 프로세스의 다수의 반복들을 수행할 수 있다. 다수의 반복들(소거 카운트 EC)은 저장되고, 평균 EC와 비교될 수 있다. 어떠한 소정의 개수 보다 큰 EC를 갖는 블록은 의심스러운 것으로서 마크될 것이다. 대안적으로, 모든 블록들에 대해 EC의 평균 보다 큰 EC를 갖는 블록이 의심스러운 것으로서 마크될 것이다. EC를 갖는 도 19의 프로세스를 이용할 때, 단계(840)는 각 블록에 대해 EC를 획득하는 것을 포함하고, 단계(842)는 평균 EC를 계산하는 것을 포함하며, 그리고 단계(844)는 현재 블록에 대한 하나의 EC를 평균 EC와 비교하는 것을 포함한다. 이후, 단계들(846 및 850)은 또한 PC 대신 EC와, 그리고 K1에 대한 다른 값의 이용을 포함한다. 단계(850)에서, WL이 아니라, 더 큰 평균 EC를 갖는 블록을 주목한다.
다른 대안에서, PLC가 어떠한 소정 개수 또는 평균 보다 크거나, 또는 EC가 어떠한 소정 개수 또는 평균 보다, 제 2 상수(제 2 상수는 제 1 상수(K1) 보다 더 크다) 이상 만큼 더 크다면, 테스팅의 제 2 페이즈를 수행할 필요없이, 블록은 불량으로 고려될 수 있다.
테스팅의 제 2 페이즈를 수행하는 일 예는, 프로그램 직후 데이터를 리드백하고, 리드백된 데이터를 버퍼 캐시(504) 내에서 여전히 이용가능한 원하는 정확한 비트들과 비교하는 것을 포함한다. 도 20은 이러한 프로세스를 설명하는 흐름도이다. 단계(870)에서, (도 3의) 제어기(244)는 (도 3의) 메모리 칩(212)으로부터 데이터를 판독할 것을 요청할 것이다. 제어기는 메모리 칩(212)으로부터 전체 블록, 전체 워드라인, 또는 워드라인의 단지 일부를 판독할 수 있다. 일 실시예에서, 제어기(244)는 도 19의 테스트에 실패한 워드라인(PLC≤avg+K1 을 갖는 워드라인) 만을 판독할 것이다. 다른 실시예에서, 제어기(244)는 도 19의 테스트에 실패한 워드라인 상의 메모리 셀들의 일부 만을 판독할 것이다. 일 예에서, 판독되는 이러한 메모리 셀의 일부는 워드라인 구동기로부터 가장 멀리 떨어져있는 워드라인에 연결되는 메모리 셀들의 25%일 것이다. 다른 실시예에서, 제어기(244)는 워드라인의 양쪽 단부들에서 메모리 셀들을 판독할 것이며, 이에 따라 메모리 셀들의 처음과 마지막의 25%가 판독된다. 다른 서브세트들도 판독될 수 있다. 단계(872)에서, 단계(870)에서 판독된 데이터는 (도 6의) 버퍼 캐시(504) 내의 데이터와 비교된다. 단계(874)에서, 제어기(244)는 메모리로부터 판독된 데이터 내의 에러들의 개수를 결정한다. 에러들의 개수가 상수 K2 보다 많다면, 블록은 테스트에 실패하게 되며, 불량으로서 마크된다. 메모리로부터 판독된 메모리 내의 에러들의 개수가 K2 보다 작거나 같다면, 블록은 테스트를 통과하게 된다. K2의 일 예는 72 비트들이다.
도 21은 테스팅의 제 2 페이즈(도 18의 단계(808))를 수행하기 위한 다른 실시예를 설명하는 흐름도이다. 도 21의 프로세스에서, 시스템은 메모리 셀들의 집단에 대해 임계 전압 분포를 결정한 다음, 이를 기대되는 임계 전압 분포와 비교한다. 만일 이러한 임계 전압 분포가 기대되는 임계 전압 분포와 상당량 만큼 다르다면, (도 3의) 제어기(244)는 블록이 실패할 경향이 있다고 추정할 것이다. 상기 설명한 바와 같이, 일부 실시예들에서, 제어기(244)는, 각 상태 내의 셀들의 균일한 수에 가깝게 될 균일한 임계 전압 분포(예를 들어, 도 9a)를 갖기 위해 데이터를 스크램블할 것이다. 이러한 실시예에서, 시스템은 일부 또는 모든 상태들의 셀들의 개수를 결정하고, 만일 카운트되고 있는 상태들중 임의의 상태의 메모리 셀들의 개수가 기대되는 안전한 구역 범위를 넘는 다면, 해당하는 블록은 의심스러운 것으로서 플래그된다. 만일 상태들중 어느 하나 또는 서브세트의 셀들의 카운트가 기대되는 안전한 구역으로부터 소정량 보다 많이 벗어난다면, 시스템은 그 블록이 실패할 경향이 있는 것으로 추정할 것이다. 도 21의 단계(902)에서, 제어기(244)는 워드라인(또는 워드라인의 일부, 또는 메모리 셀들의 다른 단위)에 대해 임계 전압들의 분포들을 얻을 것이다. 일 실시예에서, 메모리 칩(212)은, 제어기(212)에 의한 커맨드에 응답하여, 임계 전압 분포를 자동으로 얻기 위한 빌트인 논리(built in logic)를 가질 수 있다. 단계(902)의 임계 전압 분포는, 선택된 워드라인의 제어 게이트에 증가하는 전압의 세트를 인가하면서, 판독 동작들을 수행함으로써 얻어진다. 예를 들어, 제 1 판독 동작은 0V의 워드라인 전압에서 이루어질 수 있다. 이후의 반복들은 .05V 또는 다른 스텝 사이즈들 만큼 스텝될 수 있다. 각 판독 동작에 대해, 시스템은 얼마나 많은 메모리 셀들이 판독 동작 동안 도통되고, 이전 판독 동작 동안 도통되지 않았는 지를 결정할 것이다. 결과적인 데이터는 도 9a와 같은 어떠한 것으로 보여야 한다. 일 실시예에서는, 워드라인 구동기들로부터 가장 멀리 있는 메모리 셀들에 대해서만 결정될 것이다.
도 21의 단계(904)에서, (도 3의) 제어기(244)는 임계 전압 분포 내에서 M개의 최대점들(maximum points)을 찾을 것이며, 여기서 M은 데이터 상태들의 총 개수이다. 일 실시예에서, 소거 임계 전압 분포는 0V 미만이며, 이에 따라 제어기(244)는 0V 이상의 M-1개의 최대점들 만을 찾을 것이다. 단계(906)에서, 제어기(244)는 단계(905)에서 발견된 최대점들 사이에 있는 M-1개의 최대점들을 찾을 것이다. 상태 0이 음인 경우, M-1은 M-2로 대체된다. 단계(908)에서, 제어기(244)는 2개의 순차적인 최소점들(minimum points) 사이의 메모리 셀들의 개수를 계산할 것이다. 따라서, 단계(908)의 끝에서, 제어기(244)는 얼마나 많은 메모리 셀들이 각 데이터 상태에 있는 지를 대략적으로 알게 된다(왜냐하면 분포들 사이에서 오버랩들이 일어날 수 있기 때문이다). 만일 제어기(244)가 균일한 분포들을 달성하기 위해 데이터를 스크램블하는 것을 선택하면, 각 데이터 상태의 메모리 셀들의 개수는 메모리 셀들의 총 개수를 상태들의 개수로 나눈 것과 실질적으로 같아야 한다. 일 실시예에서, 사용자 데이터의 하나의 블록은, 사용자 데이터에 대해 64개의 이용가능한 워드라인들(플러스 2개의 더미 워드라인들) 및 65,536개의 비틀인들에 의해 정의되는 영역 내의 약 5백만 개의 메모리 셀들로 이루어진다. 블록은 또한 에러 정정 및 기타 메모리 관리 목적들을 위해 이용되는 여분의 비트들을 보유하기 위해 수천개의 부가적인 비트라인들 및 NAND 스트링들을 포함한다. 단계(910)에서, 제어기(244)는 합계들중 임의의 것(각 데이터 상태의 메모리 셀들의 개수)이 상수 K3 보다 큰 지를 결정한다. 65,536개의 비트라인들 및 16개의 상태들을 갖는 상기 설명한 실시예에서, 시스템은 임의의 하나의 데이터 상태가 (65,536)×(1/16)+2Q 보다 많은 메모리 셀들을 갖는 지를 확인하기 위해 체크할 것이며, 여기서 Q는 (구현에 의존하여) 196과 216 사이이다. 특정의 구현에 대해 적절할 때, K3에 대한 다른 값들도 이용될 수 있다. 데이터 상태들 중 어느 것도 K3 보다 큰 셀들의 합계를 갖지 않는 다면, 블록은 테스트를 통과하게 된다(단계 912). 데이터 상태들중 임의의 하나가 K3 보다 큰 다수의 셀들을 갖는 다면, 블록은 테스트에 실패하게 된다(단계 914). 다른 대안에서, 도 21의 프로세스는 제 2 페이즈 테스팅이 아닌 제 1 페이즈 테스팅으로서 이용될 수 있다.
전체 임계 전압 분포를 얻고, 모든 데이터 상태를 테스트하는 것은 긴 시간이 걸릴 수 있다. 테스팅의 제 2 페이즈를 수행하기 위한 더 빠른 방법은, 단지 1개의 데이터 상태 또는 2개의 데이터 상태(또는 다른 서브세트) 만을 검사하는 것이다. 바깥쪽 데이터 상태(예를 들어, 도 9의 예에 대해서는, 상태 0 또는 상태 F)의 메모리 셀들의 개수 만을 판독하고자 시도한다면, 단지 하나의 판독 동작 만이 일어나면 된다. 예를 들어, 제어기(244)가 소거 상태에 속하는 메모리 셀들의 개수 만을 찾고 있다면, 선택된 워드라인에 Vr1을 인가하는 단일 판독 동작이 수행될 수 있다. 제어기(244)가 상태 F를 검사하고 있다면, 선택된 워드라인에 Vr15를 인가하는 단일 판독 동작이 수행될 수 있다. 도 22는 이러한 실시예를 설명하는 흐름도이며, 테스팅의 제 1 또는 제 2 페이즈를 수행하기 위한 대안이다. 단계(840)에서, (도 3의) 제어기(244)는 (도 3의) 메모리 칩(212)에게, 선택된 워드라인에 Vr1 또는 Vr15를 인가하는 판독 동작을 수행하여 바깥쪽 상태들(예를 들어, 상태 0 또는 상태 F; 바깥쪽 상태들은 가장 낮은 그리고 가장 높은 임계 전압 분포들이다) 중 하나로부터 데이터를 판독할 것을 지시할 것이다. 이러한 특정 데이터 상태의 메모리 셀들의 개수는 메모리 칩(212)으로부터 제어기(244)에 전송될 것이다. 단계(842)에서, 제어기(244)는 이러한 바깥쪽 상태의 메모리 셀들의 개수가 상수 K3 보다 큰지를 결정할 것이다. 이러한 바깥쪽 상태의 메모리 셀들의 개수가 상수 K3 보다 크지 않다면, 블록은 테스트를 통과하게 된다(단계 844). 테스트되는 상태의 메모리 셀들의 개수가 K3 보다 크다면, 블록은 테스트에 실패하게 된다(단계 846). 제어기는, WL에 Vr1을 인가할 때 소거 상태의 메모리 셀들의 개수를 얻기 위해 비 도통 셀들(판독으로부터 '1'을 리턴시킴)의 개수를 카운트하면서, 가장 높은 상태의 셀들의 개수를 계산하기 위해 도통 셀들(판독으로부터 '0'을 리턴시킴)의 개수를 카운트할 수 있다.
일 실시예에서, 어떤 블록들이 실패할 경향이 있는 지를 예측하기 위한 시스템은 단지 2개의 상태들의 데이터를 저장(이진 저장)하는 하나 이상의 메모리 어레이들과 함께 이용될 수 있다. 이 경우, 단계(840)가 얼마나 많은 비트들이 소거 상태에 있는 지를 판독하는 것을 포함하거나, 또는 단계(840)가 얼마나 많은 셀들이 가장 높은 프로그램 상태 또는 가장 높은 프로그램 상태들의 임의의 서브세트에 있는 지를 판독하는 것을 포함할 수 있다. 예를 들어, 소거 상태가 0V 미만의 임계 전압들을 포함하고, 프로그램 상태가 양의 임계 전압들(또는 P 볼트 보다 큰 임계 전압들; 여기서 P는 0 보다 큰 양의 수이다)을 포함한다면, 단계(840)는 선택된 워드라인(들)에 0V를 인가하는 것을 포함할 수 있다. 높은 프로그램 상태들에 대한 연속적인 서브세트의 예는, 총 16개의 상태들이 있다고 가정하면서, Vr13에서 판독하고, 3개의 가장 높은 프로그램 상태들에 있는 셀들의 개수를 체크하는 것이다. 이 경우, 메모리 셀들이 스크램블러를 이용하여 균일하게 프로그램된 경우, 이러한 메모리 셀들의 개수에 대한 기대값은 3×K1과 같다.
테스팅의 제 1 또는 제 2 페이지를 수행하는 다른 실시예인 도 23의 프로세스는 가장 낮은 상태 및 가장 높은 상태 모두를 테스트하는 것을 포함한다. 단계(970)에서, 제어기(244)는 메모리 칩(212)에게 가장 낮은 상태(예를 들어, 상태 0)의 메모리 셀들의 개수를 판독할 것을 지시한다. 단계(972)에서, 제어기(244)는 메모리 칩(212)에게 가장 높은 상태(예를 들어, 도 9에 대해서는 상태 F)의 메모리 셀들의 개수를 판독할 것을 지시한다. 단계(974)에서, 제어기(244)는 가장 낮은 상태 또는 가장 높은 상태 중 어느 하나의 메모리 셀들의 개수가 K3 보다 큰 지를 결정한다. 가장 낮은 상태 또는 가장 높은 상태 중 어느 하나의 메모리 셀들의 개수가 K3 보다 크지 않다면, 블록은 테스트를 통과하게 된다(단계 976). 가장 낮은 상태 또는 가장 높은 상태 중 어느 하나의 메모리 셀들의 개수가 K3 보다 크다면, 블록은 테스트에 실패하게 된다(단계 978). 메모리 어레이들이 단지 2개의 상태들의 데이터 만을 저장하는 실시예에서, 단계들(970 및 972)의 기능들은 하나의 단계로서 수행될 수 있는데, 왜냐하면 이러한 양 단계들은 선택된 워드라인(들)에 0V를 인가함으로써 달성될 수 있기 때문이다. 다른 실시예는, 각각의 바깥쪽 상태에 대해, (도 21에서 설명된 방법에 따라) 그에 속하는 메모리 셀들의 개수가 어떠한 임계 값 K4 미만인지를 체크하는 것을 포함한다. 메모리 셀들의 개수가 어떠한 임계 값 K4 미만인 것으로 발견되는 경우, 그 블록은 테스트에 실패한 것으로 결정된다. 본 발명에 대한 다른 실시예는, 각각의 바깥쪽 상태에 대해, (도 21에서 설명된 방법에 따라) 그에 속하는 메모리 셀들의 개수가 안전한 구역 내에 있는지, 예를 들어 어떠한 임계 값 K4 보다 크고 어떠한 임계 값 K5 미만인 지를 체크하는 것을 포함한다. 셀들의 개수가 안전한 구역 내에 있으면, 블록이 테스트를 통과한 것으로 선언(declare)되고, 그렇지 않으면, 블록이 테스트에 실패한 것으로 결정된다. 주목할 사항으로서, 가장 낮은 상태 및 가장 높은 상태는 도 22와 관련하여 설명된 바깥쪽 상태들이다. 도 22의 프로세스와 도 23의 프로세스 간의 차이는, 도 22의 프로세스는 바깥쪽 상태들중 하나 만을 체크하는 반면, 도 23의 프로세스는 바깥쪽 상태들 모두를 체크하는 것이다.
도 24는 실패할 경향이 있는 블록들을 체크하고, 이러한 블록들을 관리하기 위한 다른 실시예이다(도 11의 단계 638). 도 24의 프로세스와 도 18의 프로세스 간의 하나의 차이는, 도 24의 프로세스는 한번에 블록의 일부 상에서 동작하는 반면, 도 21의 프로세스는 테스팅의 각 페이즈에서 전체 블록 상에서 동작하게 될 것이라는 것이다. 단계(1000)에서, 테스팅의 제 1 페이즈가 블록의 일부 상에서 수행된다. 예를 들어, 테스팅의 제 1 페이즈는 단지 하나의 워드라인 상에서만 수행될 것이다. 하나의 워드라인 대신, 블록의 다른 부분들이 이용될 수 있다. 단계(1008)에서, 블록의 테스트된 부분이 테스트를 통과했는지, 아니면 테스트에 실패했는 지를 결정한다. 블록의 일부가 테스트를 통과했으면, 단계(1002)에서, 여전히 테스트될 필요가 있는 임의의 추가의 부분들이 있는 지를 결정한다. 임의의 추가의 부분들이 없다면, 도 24의 프로세스가 완료되고(단계 1006), 블록은 성공적으로 프로그램되었으며, 블록은 불량으로서 마크될 필요가 없다. 테스트될 블록의 추가의 부분들이 있다면, 단계(1004)에서 블록의 다음 부분이 선택되고, 프로세스는 단계(1000)로 루프백되어, 블록의 새로운 부분 상에서 테스팅의 제 1 페이즈가 수행된다.
블록의 일부가 테스팅의 제 1 페이즈에 실패하면(단계 1008), 단계(1010)에서 이러한 블록의 일부 상에서 테스팅의 제 2 페이즈가 수행된다. 단계(1010)에서, 도 20-23의 프로세스들은 테스팅의 제 2 페이즈로서 이용될 수 있다. 블록의 일부가 테스팅의 제 2 페이즈를 통과하면(단계 1012), 프로세스는 단계(1002)로 루프하여, 그 블록의 추가적인 부분들을 고려한다. 만일 블록의 일부가 테스트에 실패하면(단계 1012), 단계(1014)에서 그 블록은 불량으로서 마크된다. 블록의 어떠한 추가적인 부분들도 테스트될 필요가 없다. 다른 실시예들에서는, 블록의 다른 부분들을 테스트하여, 그 블록이 얼마나 불량한 지를 결정할 수 있으며, 이에 따라 다수의 워드라인들 및 불량한 다수의 부분들을 갖는 특정 블록들 만이 불량으로서 마크될 것이다. 단계(1016)에서, 이러한 블록에 저장된 데이터는 새로운 블록에 다시 프로그램된다. 단계(1018)에서, 제어기(244)는 불량한 블록들의 개수를 카운트할 것이다. 단계(1020)에서, 제어기(244)는 불량한 블록들의 개수의 카운트에 기초하여, 테스팅의 제 1 및/또는 제 2 페이즈에 대해 이용되는 임계치들을 (선택적으로) 조정한다. 조정되는 임계치의 예들은 상기 설명한 K1, K2 및 K3을 포함한다. 다른 실시예는, 빈(free) 블록들의 개수를 카운트하여, 새로운 불량 블록을 취하여 고려하는 단계를, 도 24의 단계(102) 이후(또는 도 18의 단계(818 이후)에 부가하는 것을 포함한다. 빈 블록들의 개수가 어떠한 임계치 보다 작으면, 비휘발성 메모리(예를 들어, 메모리 어레이(들)(200))는 가득 찬 것으로 고려되고, 일부 데이터가 먼저 그 메모리로부터 소거될 때 까지 새로운 데이터로 프로그램될 수 없다. 이것은, 저장 디바이스에 새로운 디바이스를 프로그램하기 이전에만 빈 블록들의 개수를 체크하는 종래 기술과 다르다.
도 24의 하나의 예시적인 구현에서, 고려되는 블록의 일부는 공통 워드라인에 연결된 메모리 셀들을 포함한다. 제어기는 각 워드라인 상에서 테스팅의 제 1 페이즈를 수행할 것이다. 워드라인이 테스팅의 제 1 페이즈에 실패하면, 도 24에서 설명되는 바와 같이, 그 워드라인은 테스팅의 제 2 페이즈를 받는다.
도 25는, 블록의 일부가 워드라인일 때, 이러한 블록의 일부 상에서 테스팅의 제 1 페이즈를 수행(도 24의 단계 1000)하는 일 실시예를 설명하는 흐름도이다. 동작하고 있는 현재의 워드라인이 동작될 블록 내의 첫 번째 워드라인이라면(단계 1102), 단계(1104)에서, (상기 설명한 바와 같이) 제어기(244)는 각 워드라인에 대해 하나 이상의 프로그램 루프 카운트들(PLC)을 얻을 것이다. 단계(1106)에서, 제어기(244)는 단계(104)에서 얻어진 프로그램 루프 카운트들(PLC)에 대한 평균을 계산할 것이다. 단계(1108)에서, 제어기(244)는 현재 워드라인에 대한 프로그램 루프 카운트(PLC)를 평균과 비교할 것이다. 단계(1110)에서, 현재 워드라인에 대한 프로그램 루프 카운트(PLC)가 평균 보다 K1 만큼 더 크다면(예를 들어, PLC > avg + K1), 블록은 테스팅의 제 1 페이즈에 실패하게 된다(단계 1014). 현재 워드라인에 대한 프로그램 루프 카운트(PLC)가 avg + K1 보다 크지 않으면(단계 1110), 블록은 통과하게 된다.
도 26은 실패할 경향이 있는 블록들을 체크하고 관리하기 위한 프로세스(도 11의 단계 638)의 다른 실시예를 설명하는 흐름도이다. 단계(1110)에서, 제어기(244)는 블록 내의 각 워드라인(또는 블록의 다른 부분)에 대해 하나 이상의 프로그램 루프 카운트들(PLC)을 얻는다. 프로그램 루프 카운트들(PLC)을 얻기 위한 상기 설명한 다양한 실시예들 중 임의의 실시예가 이용될 수 있다. 단계(1102)에서, 단계(1100)에서 얻어진 프로그램 루프 카운트들(PLC)의 평균이 계산된다. 단계(1104)에서, 제 1 워드라인이 선택된다. 단계(1106)에서, 제어기(244)는 선택된 현재 워드라인이 워드라인들의 최대 개수 보다 큰 지를 결정한다. 선택된 현재 워드라인이 워드라인들의 최대 개수 보다 크다면, 블록은 성공적으로 프로그램된 것이다(단계 1110). 따라서, 어떠한 블록들도 불량으로서 마크되지 않는다.
선택된 현재 워드라인이 워드라인들의 최대 개수 보다 크지 않다면(단계 1106), 단계(1108)에서, 현재 워드라인에 대한 프로그램 루프 카운트(PLC)가 단계(1100)에서 얻어진 모든 프로그램 루프 카운트들의 평균과 비교된다. 현재 워드라인에 대한 프로그램 루프 카운트(PLC)가 평균 보다 N1(예를 들어, 10) 이상 더 크다면, 단계(1112)에서, 그 블록은 불량으로서 마크된다. 단계(1114)에서, 상기 블록에 대해 프로그램될 것으로 선택된 데이터는 새로운 블록에 다시 프로그램된다. 단계(1116)에서, 제어기(244)는 불량한 블록들의 개수를 카운트할 것이다. 단계(1118)에서, 필요한 경우, 제어기(244)는 불량한 블록들의 카운트된 개수에 기초하여 임계치들을 조정한다. 임계치들의 예들은 N1, N2, N3 및 (하기 설명되는) 단계(1132)에서 이용되는 임의의 임계치를 포함한다. 단계들(1116 및 1118)은 선택적이다.
단계(1110)에서, 현재 워드라인에 대한 PLC가 평균 PLC(단계 1102 참조) + N1 보다 크지 않다면, 단계(1130)에서, 현재 워드라인에 대한 PLC가 평균 PLC(단계 1102 참조) + N2 보다 큰 지를 결정한다. N2의 일 예는 6 이다. 현재 워드라인에 대한 PLC가 N2 + 평균 보다 크다면, 블록은 의심스러운 것으로서 마크되고, 단계(1132)에서, 제어기(244)는 현재 워드라인에 대한 데이터를 판독한 다음, 이를 데이터 캐시(504) 내의 데이터와 비교할 것이다. 단계(1132)에서의 결과가 실패하면(단계 1134), 단계(1102)에서 블록은 불량으로서 마크되고, 프로세스는 단계(1104)로 계속된다. 일 예에서, 단계(1132)의 비교는, 판독된 데이터와 버퍼 캐시(504) 내의 데이터 간의 에러 비트들의 개수가 72개 또는 그 이상인 경우, 실패하게 된다. 또한, 에러 비트들의 개수에 대한 다른 임계치들도 이용될 수 있다. (에러들의 개수가 72개 미만이기 때문에) 단계(1132)의 비교가 통과하면, 다음 워드라인이 선택되고(단계 1136), 프로세스는 단계(1106)로 루프백된다. 일부 실시예들에서는, 워드라인에 대한 모든 비트들을 테스트하는 것이 아니라, 제어기(244)는 워드라인 구동기로부터 가장 멀리 있는 워드라인에 연결된 메모리 셀들의 일부(예를 들어, 25%)에 대한 데이터 만을 테스트할 것이다.
단계(1130)에서, 현재 워드라인에 대한 PLC가 N2 + 평균 보다 크지 않다고 제어기(244)가 판단하면, 단계(1150)에서, 제어기(244)는 가장 낮은 상태의 데이터를 판독하여, 가장 낮은 상태(예를 들어, 상태 0)의 메모리 셀들의 개수를 결정할 것이다. 단계(1152)에서, 제어기(244)는 가장 높은 상태의 데이터를 판독하여, 가장 높은 상태(예를 들어, 16개의 상태들의 경우에 있어서, 상태 'F')의 메모리 셀들의 개수를 결정할 것이다. 단계(1154)에서, 가장 낮은 상태 또는 가장 높은 상태 중 어느 하나의 메모리 셀들의 개수가 K3 보다 큰지를 결정한다. 가장 낮은 상태 또는 가장 높은 상태 중 어느 하나의 메모리 셀들의 개수가 K3 보다 크다면, 프로세스는 단계(1132)로 계속된다. 가장 낮은 상태 또는 가장 높은 상태 중 어느 하나의 메모리 셀들의 개수가 K3 보다 크지 않다면, 프로세스는 단계(1136)로 계속된다. 일부 실시예들에서, 단계들(1150-54)은 워드라인 구동기로부터 가장 멀리 있는 워드라인에 연결된 메모리 셀들의 일부(예를 들어, 25%)에 대한 데이터에 대해서만 동작할 것이다.
도 26의 프로세스는 테스팅의 제 1 페이즈에 대해 2개의 임계치들을 포함하며, 블록이 임계치들 중 하나에 실패하면(단계 1110), 테스팅의 제 2 페이즈를 수행하지 않으면서, 그 블록은 불량으로 마크된다. 도 26에서의 차이점은, 테스팅의 3개의 페이즈들이 있다는 것이다. 테스팅의 제 1 페이즈는 PLC를 비교하는 것을 포함하고, 테스팅의 제 2 페이즈는 가장 낮은 및 가장 높은 상태들의 메모리 셀들의 개수를 판독하는 것을 포함하며, 그리고 테스팅의 제 3 페이즈는 프로그래밍 이후 판독된 데이터와 버퍼 캐시 내의 데이터를 비교하는 것을 포함한다. 대안적으로, 도 26의 프로세스는 2 페이즈 테스팅으로서 여겨질 수 있는 바, 테스팅의 제 1 페이즈는 PLC를 비교하고(단계 1108), 가장 낮은 및 가장 높은 상태들의 메모리 셀들의 개수가 임계치 이상 만큼 벗어나는 지를 결정하는 것(단계들 1150-1154)을 포함하며, 그리고 제 2 페이즈는 단계(1132)에서 데이터를 비교하는 것을 포함한다.
상기 설명한 바와 같이, 제어기(244)는 성능 데이터에 기초하여 실패할 경향이 있는 블록들을 식별한다. 상기 설명한 성능 데이터 이외의 다른 성능 데이터도 이용될 수 있다. 예를 들어, 프로그래밍 전류, 판독 전류, ECC 반복들의 개수, 느린 프로그래밍 메모리 셀들의 개수, 과 프로그램되는(over programmed) 메모리 셀들의 개수 뿐 아니라, 다른 파라미터들도 테스팅의 제 1 페이즈 또는 테스팅의 제 2 페이즈에 대해 이용될 수 있다.
상기 설명되는 기술의 일 실시예는, 제 1 데이터를 비휘발성 저장 소자들의 제 1 세트에 프로그래밍하고; (프로그래밍을 성공적으로 완료한 후), 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하고; (비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있다면), 비휘발성 저장 소자들의 제 1 세트와 다른 비휘발성 저장 소자들의 제 2 세트에 제 1 데이터를 다시 프로그래밍하는 것을 포함한다.
일 실시예는 비휘발성 저장 소자들의 제 1 세트에 저장된 데이터를 변경(예를 들어, 프로그래밍, 소거 또는 기타)하고; (데이터를 변경한 후), 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해, 비휘발성 저장 소자들의 제 1 세트 상에서 제 1 테스트를 수행하고; (제 1 조건(condition)으로 인해, 비휘발성 저장 소자들의 제 1 세트가 제 1 테스트에 실패하는 경우), 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해, 비휘발성 저장 소자들의 제 1 세트 상에서 제 2 테스트를 수행하고; (비휘발성 저장 소자들의 제 1 세트가 제 2 테스트에 실패하는 경우), 비휘발성 저장 소자들의 제 1 세트를 불량으로서 마크하는 것을 포함한다.
일 실시예는 메모리 시스템의 특정 워드라인에 연결된 비휘발성 저장 소자들에 저장된 데이터를 변경하는 것을 포함한다. 이와 같이 데이터를 변경하는 것은, 메모리 동작의 다수의 반복들을 수행하고, 그리고 이러한 특정 워드라인에 연결된 비휘발성 저장 소자들에 대해, 메모리 동작의 반복들이 얼마나 많이 수행되었는 지를 나타내는 특정 메모리 동작 루프 카운터를 유지하는 것을 포함한다. 이러한 프로세스는, 특정 메모리 루프 카운터를 메모리 시스템에 대한 다른 메모리 루프 카운터들에 기초하는 데이터와 비교하고, 그리고 이러한 비교에 기초하여, 특정 워드라인에 연결된 비휘발성 저장 소자들이 실패할 경향이 있는 지를 결정하는 것을 포함한다.
일 실시예는 메모리 시스템의 특정 워드라인에 연결된 비휘발성 저장 소자들에 제 1 데이터를 프로그래밍하는 것을 포함한다. 메모리 시스템은 제어기 및 메모리 회로를 포함한다. 메모리 회로는 메모리 어레이 및 지원 회로를 포함한다. 메모리 어레이는 비휘발성 저장 소자들의 블록들을 포함한다. 각 블록은 다수의 워드라인들을 포함한다. 특정 워드라인은 특정 블록 내에 있다. 상기 프로그래밍하는 것은 프로그래밍 동작의 다수의 반복들을 수행하고, 프로그래밍 동작의 반복들이 얼마나 많이 수행되었는 지를 나타내는 프로그램 루프 카운터를 유지하는 것을 포함한다. 이러한 방법은, 제어기가, 임계 전압들의 특정 간격 내에 자신들의 임계 전압을 갖는, 특정 워드라인에 연결된 비휘발성 저장 소자들의 개수를 결정하는 것을 포함한다. 이 프로세스는 또한, 특정 간격 내에 자신들의 임계 전압을 갖는, 특정 워드라인에 연결된 비휘발성 저장 소자들의 결정된 개수에 기초하여, 상기 특정 블록이 불량한 지를 결정하고 ? 여기서, 상기 특정 블록이 불량한 지를 결정하는 것은 제어기에 의해 수행됨 ?, 그리고 상기 특정 블록이 불량한 것으로 결정되는 경우, 메모리 시스템의 다른 블록의 다른 워드라인에 연결된 비휘발성 저장 소자들에 제 1 데이터를 프로그램하는 것을 포함한다.
일 실시예는 다수의 비휘발성 저장 소자들을 포함하는 메모리 회로, 및 이 메모리 회로와 통신하는 제어기를 포함한다. 제어기는 비휘발성 저장 소자들의 제 1 세트로 하여금 저장 조건들(storage conditions)을 변경하게 한다. 저장 상태들을 변경한 후, 제어기는, 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해, 이러한 비휘발성 저장 소자들의 제 1 세트 상에서 제 1 세트를 수행한다. 만일 비휘발성 저장 소자들의 제 1 세트가 제 1 조건으로 인해 제 1 테스트에 실패한다면, 제어기는 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해, 비휘발성 저장 소자들의 제 1 세트 상에서 제 2 테스트를 수행한다. 비휘발성 저장 소자들의 제 1 세트가 제 2 테스트에 실패하면, 제어기는 이러한 비휘발성 저장 소자들의 제 1 세트를 불량으로서 마크한다.
일 실시예는 다수의 비휘발성 저장 소자들을 포함하는 메모리 회로, 및 이 메모리 회로와 통신하는 제어기를 포함한다. 제어기는 비휘발성 저장 소자들의 제 1 세트에 제 1 데이터가 프로그램되게 한다. 프로그래밍을 성공적으로 완료한 후, 제어기는 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정한다. 만일 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있다면, 제어기는 이러한 비휘발성 저장 소자들의 제 1 세트와 다른 비휘발성 저장 소자들의 제 2 세트에 제 1 데이터를 다시 프로그램한다.
상기 본 발명의 상세한 설명은 예시와 설명의 목적을 위해 제공되었다. 이러한 설명은 본 발명을 속속들이 규명한 것으로서, 또는 본 발명을 개시된 정확한 형태로 한정하는 것으로서 의도되지 않는다. 상기 교시에 비추어 많은 수정들 및 변형들이 가능하다. 설명된 실시예들은 본 발명의 사상과 실제적인 응용예를 최상으로 설명함으로써, 당업자가 다양한 실시예들에서 그리고 고려되는 특정의 용도에 적합한 다양한 변형들에 대해 본 발명을 최상으로 이용할 수 있도록 선택된 것이다. 본 발명의 범위는 첨부된 청구범위에 의해서만 규정된다.

Claims (22)

  1. 위험한 상태(at-risk)의 비휘발성 저장 소자들을 검출하는 방법으로서,
    제 1 데이터를 비휘발성 저장 소자들의 제 1 세트에 프로그래밍하는 단계;
    상기 프로그래밍을 성공적으로 완료한 후, 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향(prone)이 있는 지를 결정하는 단계; 및
    상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있다면, 상기 비휘발성 저장 소자들의 제 1 세트와 다른 비휘발성 저장 소자들의 제 2 세트에 상기 제 1 데이터를 다시 프로그래밍하는 단계를 포함하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  2. 제 1 항에 있어서,
    상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하는 단계는,
    상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해, 상기 비휘발성 저장 소자들의 제 1 세트 상에서 제 1 테스트를 수행하는 단계;
    상기 비휘발성 저장 소자들의 제 1 세트가 상기 제 1 테스트에 실패하는 경우, 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해, 상기 비휘발성 저장 소자들의 제 1 세트 상에서 제 2 테스트를 수행하는 단계; 및
    상기 비휘발성 저장 소자들의 제 1 세트가 상기 제 2 테스트에 실패하는 경우, 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 것으로 결론을 내리는 단계를 더 포함하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  3. 제 2 항에 있어서,
    상기 비휘발성 저장 소자들의 제 1 세트는 메모리 시스템의 특정 워드라인에 연결되고, 상기 메모리 시스템은 제어기 및 메모리 회로를 포함하고, 상기 메모리 회로는 메모리 어레이 및 지원 회로를 포함하고, 상기 메모리 어레이는 비휘발성 저장 소자들의 블록들을 포함하고, 각 블록은 다수의 워드라인들을 포함하고, 상기 특정 워드라인은 특정 블록 내에 있고;
    상기 프로그래밍하는 단계는 프로그래밍 동작의 다수의 반복들을 수행하고, 상기 비휘발성 저장 소자들의 제 1 세트에 대해 프로그래밍 동작의 얼마나 많은 반복들이 수행되었는 지를 나타내는 특정의 프로그램 루프 카운터를 상기 메모리 회로 내에 유지하는 것을 포함하며; 그리고
    상기 제 1 테스트를 수행하는 단계는, 제어기가,
    상기 메모리 회로로부터 상기 특정 프로그램 카운터를 검색(retrieve)하는 단계;
    상기 특정 블록의 다른 워드라인들에 연결된 비휘발성 저장 소자들에 대해 상기 메모리 회로로부터 다른 프로그램 루프 카운터들을 검색하는 단계;
    상기 검색된 특정 프로그램 루프 카운터 및 다른 프로그램 루프 카운터들의 평균을 계산하는 단계; 및
    상기 특정 프로그램 루프 카운터가 평균의 범위 내에 있는 지를 결정하는 단계; 및
    상기 특정 프로그램 카운터가 상기 평균의 범위 내에 있지 않다면, 상기 비휘발성 저장 소자들의 제 1 세트는 상기 제 1 테스트에 실패한 것으로 결론을 내리는 단계를 포함하는 방법을 수행하는 것을 포함하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  4. 제 2 항에 있어서,
    상기 프로그래밍을 수행하는 단계는, 프로그래밍 동작의 다수의 반복들을 수행하고, 상기 비휘발성 저장 소자들의 제 1 세트에 대한 특정 프로그램 루프 카운터를 유지하는 것을 포함하고;
    상기 제 1 테스트를 수행하는 단계는 상기 특정 메모리 루프 카운터를 다른 메모리 루프 카운터들에 기초하는 데이터와 비교하는 것을 포함하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  5. 제 2 항, 제 3 항 또는 제 4 항에 있어서,
    상기 비휘발성 저장 소자들의 제 1 세트는 메모리 시스템의 특정 워드라인에 연결되고, 상기 메모리 시스템은 제어기 및 메모리 회로를 포함하고, 상기 메모리 회로는 메모리 어레이 및 지원 회로를 포함하고, 상기 메모리 어레이는 특정 워드라인을 포함하는 다수의 워드라인들을 포함하고;
    상기 제 2 테스트를 수행하는 단계는, 상기 제어기가,
    임계 전압들의 간격 내에서 자신들의 임계 전압을 갖는 상기 비휘발성 저장 소자들의 제 1 세트의 개수를 결정하고, 상기 간격 내에서 자신들의 임계 전압을 갖는 상기 비휘발성 저장 소자들의 제 1 세트의 개수가 범위 밖에 있는 경우, 상기 비휘발성 저장 소자들의 제 1 세트가 상기 제 2 테스트에 실패했음을 결정하는 것을 포함하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  6. 제 5 항에 있어서,
    상기 간격은 제 1 전압을 넘는 임계 전압값들을 포함하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  7. 제 5 항에 있어서,
    상기 간격은 제 1 전압 미만의 임계 전압값들을 포함하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  8. 제 5 항에 있어서,
    상기 간격은 제 1 전압과 제 2 전압 사이의 임계 전압값들을 포함하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  9. 제 2 항, 제 3 항 또는 제 4 항에 있어서,
    상기 제 2 테스트를 수행하는 단계는,
    상기 비휘발성 저장 소자들의 제 1 세트를 포함하는 비휘발성 저장 소자들의 집단(population)의 임계 전압 분포를 결정하는 단계;
    다수의 최소점들(minima points)을 식별하는 단계;
    상기 다수의 최소점들 중 2개의 최소점들 사이에 있는 상기 분포의 비휘발성 저장 소자들의 개수를 계산하는 단계를 포함하며,
    상기 2개의 최소점들 사이에 있는 상기 분포의 비휘발성 저장 소자들의 개수가 비교 값 보다 많으면, 상기 비휘발성 저장 소자들의 제 1 세트 상기 제 2 테스트에 실패하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  10. 제 10 항에 있어서,
    상기 비휘발성 저장 소자들의 집단은 상기 비휘발성 저장 소자들의 제 1 세트인,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  11. 제 2 항, 제 3 항 또는 제 4 항에 있어서,
    상기 제 2 테스트를 수행하는 단계는,
    상기 비휘발성 저장 소자들의 제 1 세트에 저장된 상기 제 1 데이터를 판독하는 단계;
    상기 판독된 제 1 데이터와 최초 데이터를 비교하는 단계; 및
    상기 판독된 제 1 데이터와 상기 최초 데이터 간의 차이의 양이 기준 개수 미만인지를 결정하는 단계를 포함하며, 상기 판독된 제 1 데이터와 상기 최초 데이터 간의 차이의 양이 기준 개수 미만이 아니면, 상기 비휘발성 저장 소자들의 제 1 세트가 상기 제 2 테스트에 실패하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  12. 제 1 항 내지 제 11 항 중의 어느 한 항에 있어서,
    상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 경우, 상기 비휘발성 저장 소자들이 제 1 세트를 불량(bad)으로서 마크하는 단계;
    불량으로서 마크된 비휘발성 저장 소자들의 단위들(units)의 개수를 결정하는 단계 ? 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하는 단계는 상기 비휘발성 저장 소자들의 제 1 세트에 대해 테스트를 수행하는 것을 포함함 ? ;
    상기 불량으로서 마크된 비휘발성 저장 소자들의 단위들의 개수에 기초하여 상기 테스트를 조정하는 단계를 더 포함하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  13. 제 1 항에 있어서,
    상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하는 단계는,
    상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해, 상기 비휘발성 저장 소자들의 제 1 세트 상에서 제 1 테스트를 수행하는 단계;
    상기 비휘발성 저장 소자들의 제 1 세트가 제 1 조건(condition)으로 인해 상기 제 1 테스트에 실패하는 경우, 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해, 상기 비휘발성 저장 소자들의 제 1 세트 상에서 제 2 테스트를 수행하는 단계;
    상기 비휘발성 저장 소자들의 제 1 세트가 상기 제 2 테스트에 실패하는 경우, 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 것으로 결론을 내리는 단계; 및
    상기 비휘발성 저장 소자들의 제 1 세트가 제 2 조건으로 인해 상기 제 1 테스트에 실패하는 경우, 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 것으로 결론을 내리는 단계를 포함하는,
    위험한 상태의 비휘발성 저장 소자들을 검출하는 방법.
  14. 비휘발성 저장 장치로서,
    다수의 비휘발성 저장 소자들을 포함하는 메모리 회로; 및
    상기 메모리 회로와 통신하는 제어기를 포함하며,
    상기 제어기는 상기 비휘발성 저장 소자들의 제 1 세트에게 저장 조건들을 변경하게 하고; 저장 조건들을 변경한 후, 상기 제어기는 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해, 상기 비휘발성 저장 소자들의 제 1 세트 상에서 제 1 테스트를 수행하고; 만일 상기 비휘발성 저장 소자들의 제 1 세트가 제 1 조건으로 인해 상기 제 1 테스트에 실패하면, 상기 제어기는 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해, 상기 비휘발성 저장 소자들의 제 1 세트 상에서 제 2 테스트를 수행하고; 만일 상기 비휘발성 저장 소자들의 제 1 세트가 상기 제 2 테스트에 실패하면, 상기 제어기는 상기 비휘발성 저장 소자들의 제 1 세트를 불량으로서 마크하는,
    비휘발성 저장 장치.
  15. 제 14 항에 있어서,
    상기 비휘발성 저장 소자들의 제 1 세트가 상기 제 1 조건과 다른 제 2 조건으로 인해 상기 제 1 테스트에 실패하면, 상기 제어기는 상기 비휘발성 저장 소자들의 제 1 세트를 불량으로서 마크하는,
    비휘발성 저장 장치.
  16. 제 14 항, 제 15 항 또는 제 16 항에 있어서,
    상기 저장 조건들을 변경하는 것은, 상기 메모리 회로가, 메모리 동작의 다수의 반복들을 수행하고, 상기 비휘발성 저장 소자들의 제 1 세트에 대한 상기 메모리 동작의 다수의 반복들의 개수를 나타내는, 상기 비휘발성 저장 소자들의 제 1 세트에 대한 특정 루프 카운터를 유지하는 것을 포함하고;
    상기 제 1 테스트를 수행하는 것은, 상기 제어기가, 상기 특정 루프 카운터를 상기 제 1 세트 이외의 비휘발성 저장 소자들에 대한 루프 카운터들에 기초하는 데이터와 비교하는 것을 포함하며; 그리고
    상기 제 1 조건은, 상기 특정 루프 카운터와 상기 제 1 세트 이외의 비휘발성 저장 소자들에 대한 루프 카운터들에 기초하는 데이터 사이의 제 1 편차(variance)가 어떠한 값 보다 큰 것인,
    비휘발성 저장 장치.
  17. 제 14 항, 제 15 항 또는 제 16 항에 있어서,
    상기 제어기는 불량으로서 마크된 비휘발성 저장 소자들의 단위들의 개수를 결정하고, 상기 불량으로서 마크된 비휘발성 저장 소자들의 단위들의 개수에 기초하여 상기 제 1 테스트를 조정하는,
    비휘발성 저장 장치.
  18. 비휘발성 저장 장치로서,
    다수의 비휘발성 저장 소자들을 포함하는 메모리 회로; 및
    상기 메모리 회로와 통신하는 제어기를 포함하며,
    상기 제어기는 비휘발성 저장 소자들의 제 1 세트에 제 1 데이터를 프로그래밍하고; 상기 프로그래밍을 성공적으로 완료한 후, 상기 제어기는 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하고; 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있다면, 상기 제어기는 상기 비휘발성 저장 소자들의 제 1 세트와 다른 비휘발성 저장 소자들의 제 2 세트에 상기 제 1 데이터를 다시 프로그래밍하는,
    비휘발성 저장 장치.
  19. 제 18 항에 있어서,
    상기 제어기는, 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해 상기 비휘발성 저장 소자들의 제 1 세트 상에서 제 1 테스트를 수행함으로써, 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하고; 상기 비휘발성 저장 소자들의 제 1 세트가 상기 제 1 테스트에 실패하면, 상기 제어기는 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위해, 상기 비휘발성 저장 소자들의 제 1 세트 상에서 제 2 테스트를 수행하고; 상기 비휘발성 저장 소자들의 제 1 세트가 상기 제 2 테스트에 실패하면, 상기 제어기는 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 것으로 결론을 내리는,
    비휘발성 저장 장치.
  20. 제 18 항 또는 제 19 항에 있어서,
    상기 제어기는 상기 메모리 회로에 의해 프로그램 동작의 다수의 반복들이 수행되게 함으로써 상기 제 1 데이터를 프로그래밍하고;
    상기 메모리 회로는, 상기 비휘발성 저장 소자들의 제 1 세트에 대한 상기 프로그래밍 동작의 반복들의 개수를 나타내는, 상기 비휘발성 저장 소자들의 제 1 세트에 대한 특정 루프카운터를 유지하며; 그리고
    상기 제어기는, 상기 비휘발성 저장 소자들의 제 1 세트에 대한 상기 프로그램 루프 카운터를 다른 비휘발성 저장 소자들에 대한 다른 프로그램 루프 카운터들에 기초하는 데이터와 비교함으로써, 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하는,
    비휘발성 저장 장치.
  21. 제 18 항, 제 19 항 또는 제 20 항에 있어서,
    상기 메모리 회로는 다수의 워드라인들을 포함하고;
    상기 비휘발성 저장 소자들의 제 1 세트는 상기 다수의 워드라인들 중에서 특정 워드라인에 연결되고;
    상기 제어기는, 임계 전압들의 간격 내에서 자신들의 임계 전압을 갖는 상기 비휘발성 저장 소자들의 제 1 세트의 개수를 결정함으로써, 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하고; 상기 간격 내에서 자신들의 임계 전압을 갖는 상기 비휘발성 저장 소자들의 제 1 세트의 개수가 기대되는 범위 바깥쪽에 있는 경우, 상기 비휘발성 저장 소자들의 제 1 세트는 실패할 경향이 있는,
    비휘발성 저장 장치.
  22. 비휘발성 저장 장치로서,
    비휘발성 저장 소자들의 제 1 세트에 제 1 데이터를 프로그래밍하기 위한 수단;
    상기 프로그래밍을 성공적으로 완료한 후, 상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있는 지를 결정하기 위한 수단; 및
    상기 비휘발성 저장 소자들의 제 1 세트가 실패할 경향이 있다면, 상기 비휘발성 저장 소자들의 제 1 세트와 다른 비휘발성 저장 소자들의 제 2 세트에 상기 제 1 데이터를 다시 프로그래밍하기 위한 수단;
    을 포함하는 비휘발성 저장 장치.
KR1020127009324A 2009-09-11 2010-09-07 비휘발성 저장 소자 내에서 위험한 상태의 데이터를 식별하는 방법 KR20120100912A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US24175009P 2009-09-11 2009-09-11
US61/241,750 2009-09-11
US12/694,118 US8400854B2 (en) 2009-09-11 2010-01-26 Identifying at-risk data in non-volatile storage
US12/694,118 2010-01-26

Publications (1)

Publication Number Publication Date
KR20120100912A true KR20120100912A (ko) 2012-09-12

Family

ID=43730419

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127009324A KR20120100912A (ko) 2009-09-11 2010-09-07 비휘발성 저장 소자 내에서 위험한 상태의 데이터를 식별하는 방법

Country Status (7)

Country Link
US (1) US8400854B2 (ko)
EP (1) EP2476120B1 (ko)
JP (1) JP5650226B2 (ko)
KR (1) KR20120100912A (ko)
CN (1) CN102782764B (ko)
TW (1) TW201118871A (ko)
WO (1) WO2011031660A2 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9164833B2 (en) 2013-08-13 2015-10-20 Sk Hynix Data storage device, operating method thereof and data processing system including the same
US9263155B2 (en) 2013-09-10 2016-02-16 SK Hynix Inc. Data storing system and operating method thereof
KR20170092176A (ko) * 2016-02-02 2017-08-11 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
KR20210000308A (ko) * 2018-05-21 2021-01-04 웨스턴 디지털 테크놀로지스, 인코포레이티드 셀 프로빙에 의한 고장 예측

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4877396B2 (ja) * 2010-01-20 2012-02-15 日本電気株式会社 メモリ障害処理システム、および、メモリ障害処理方法
US8514630B2 (en) 2010-07-09 2013-08-20 Sandisk Technologies Inc. Detection of word-line leakage in memory arrays: current based approach
US8432732B2 (en) 2010-07-09 2013-04-30 Sandisk Technologies Inc. Detection of word-line leakage in memory arrays
US8305807B2 (en) 2010-07-09 2012-11-06 Sandisk Technologies Inc. Detection of broken word-lines in memory arrays
KR101214285B1 (ko) * 2010-12-30 2012-12-20 에스케이하이닉스 주식회사 메모리 시스템 및 이의 동작 방법
US8379454B2 (en) 2011-05-05 2013-02-19 Sandisk Technologies Inc. Detection of broken word-lines in memory arrays
US8726104B2 (en) 2011-07-28 2014-05-13 Sandisk Technologies Inc. Non-volatile memory and method with accelerated post-write read using combined verification of multiple pages
US8775901B2 (en) 2011-07-28 2014-07-08 SanDisk Technologies, Inc. Data recovery for defective word lines during programming of non-volatile memory arrays
US8750042B2 (en) 2011-07-28 2014-06-10 Sandisk Technologies Inc. Combined simultaneous sensing of multiple wordlines in a post-write read (PWR) and detection of NAND failures
US20130205066A1 (en) * 2012-02-03 2013-08-08 Sandisk Technologies Inc. Enhanced write abort management in flash memory
JP2013229080A (ja) * 2012-04-26 2013-11-07 Toshiba Corp 半導体記憶装置および半導体記憶装置のテスト方法
KR20130134186A (ko) * 2012-05-30 2013-12-10 삼성전자주식회사 메모리 장치의 리라이트 방법
KR20140005697A (ko) * 2012-07-06 2014-01-15 에스케이하이닉스 주식회사 반도체 메모리 장치 및 그의 동작 방법
US9810723B2 (en) 2012-09-27 2017-11-07 Sandisk Technologies Llc Charge pump based over-sampling ADC for current detection
US9164526B2 (en) 2012-09-27 2015-10-20 Sandisk Technologies Inc. Sigma delta over-sampling charge pump analog-to-digital converter
US9104568B2 (en) 2013-03-15 2015-08-11 International Business Machines Corporation Detection of memory cells that are stuck in a physical state
US9280417B2 (en) * 2013-05-21 2016-03-08 Microsoft Technology Licensing, Llc Message storage in memory blocks using codewords
CN107341071A (zh) * 2013-08-23 2017-11-10 慧荣科技股份有限公司 存取快闪存储器中储存单元的方法以及使用该方法的装置
KR102048017B1 (ko) 2013-09-04 2019-12-02 삼성전자주식회사 비휘발성 메모리 장치의 테스트 및 운영 방법
US9478292B2 (en) * 2013-10-27 2016-10-25 Sandisk Technologies Llc Read operation for a non-volatile memory
US9129701B2 (en) 2013-12-19 2015-09-08 Sandisk Technologies Inc. Asymmetric state detection for non-volatile storage
US9437321B2 (en) * 2014-10-28 2016-09-06 Sandisk Technologies Llc Error detection method
KR20160060917A (ko) * 2014-11-21 2016-05-31 에스케이하이닉스 주식회사 비휘발성 메모리 소자 및 이의 프로그래밍 방법
KR102292217B1 (ko) * 2015-02-06 2021-08-24 삼성전자주식회사 내부적으로 데이터 읽기 검증을 수행할 수 있는 메모리 장치, 이의 작동 방법, 및 이를 포함하는 메모리 시스템
US9570160B1 (en) 2015-10-29 2017-02-14 Sandisk Technologies Llc Non-volatile storage system with defect detetction and early programming termination
US9569143B1 (en) * 2015-12-11 2017-02-14 Sandisk Technologies Llc In block data folding for 3D non-volatile storage
KR102513505B1 (ko) * 2016-01-29 2023-03-24 에스케이하이닉스 주식회사 비휘발성 메모리 장치, 그것을 포함하는 데이터 저장 장치의 동작 방법
US9698676B1 (en) 2016-03-11 2017-07-04 Sandisk Technologies Llc Charge pump based over-sampling with uniform step size for current detection
US11112990B1 (en) 2016-04-27 2021-09-07 Pure Storage, Inc. Managing storage device evacuation
US11809727B1 (en) * 2016-04-27 2023-11-07 Pure Storage, Inc. Predicting failures in a storage system that includes a plurality of storage devices
US9711227B1 (en) 2016-04-28 2017-07-18 Sandisk Technologies Llc Non-volatile memory with in field failure prediction using leakage detection
KR102267046B1 (ko) 2017-03-29 2021-06-22 삼성전자주식회사 스토리지 장치 및 배드 블록 지정 방법
US10134474B1 (en) * 2017-10-20 2018-11-20 Sandisk Technologies Llc Independent state completion for each plane during flash memory programming
US10223216B1 (en) * 2017-10-30 2019-03-05 Western Digital Technologies, Inc. Non-volatile storage system that reclaims bad blocks
KR102447152B1 (ko) 2017-12-26 2022-09-26 삼성전자주식회사 비휘발성 메모리 장치, 비휘발성 메모리 장치의 동작 방법 및 저장 장치
KR102429458B1 (ko) * 2018-04-03 2022-08-05 에스케이하이닉스 주식회사 메모리 장치, 이를 포함하는 메모리 시스템 및 메모리 장치의 동작 방법
US10636493B2 (en) 2018-06-27 2020-04-28 Western Digital Technologies, Inc. Relaxed erase parameters for block erasures in non-volatile storage media
CN110751974A (zh) * 2018-07-23 2020-02-04 爱思开海力士有限公司 存储器系统和用于优化读取阈值的方法
KR102461099B1 (ko) * 2018-08-07 2022-11-01 에스케이하이닉스 주식회사 메모리 장치 및 이를 포함하는 저장 장치 및 그 동작 방법
US10872670B2 (en) 2018-12-17 2020-12-22 Micron Technology, Inc. Methods for determining data states of memory cells
US11567670B2 (en) * 2019-10-25 2023-01-31 Samsung Electronics Co., Ltd. Firmware-based SSD block failure prediction and avoidance scheme
US11056211B1 (en) * 2020-01-08 2021-07-06 Western Digital Technologies, Inc. Apparatus and method for handling temperature dependent failures in a memory device
US11579968B2 (en) 2020-08-26 2023-02-14 Micron Technology, Inc. Efficient management of failed memory blocks in memory sub-systems
US11500753B2 (en) 2020-09-02 2022-11-15 Samsung Electronics Co., Ltd. Multi-non-volatile memory solid state drive block-level failure prediction with unified device log
CN113436671B (zh) * 2021-06-30 2023-09-08 芯天下技术股份有限公司 Spi nor flash测试平台、测试方法、测试装置和电子设备

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4393475A (en) * 1981-01-27 1983-07-12 Texas Instruments Incorporated Non-volatile semiconductor memory and the testing method for the same
US6222762B1 (en) 1992-01-14 2001-04-24 Sandisk Corporation Multi-state memory
JP2716906B2 (ja) * 1992-03-27 1998-02-18 株式会社東芝 不揮発性半導体記憶装置
US5555204A (en) 1993-06-29 1996-09-10 Kabushiki Kaisha Toshiba Non-volatile semiconductor memory device
KR0169267B1 (ko) 1993-09-21 1999-02-01 사토 후미오 불휘발성 반도체 기억장치
JPH087597A (ja) * 1994-06-24 1996-01-12 Toshiba Corp 不揮発性半導体記憶装置
US5475693A (en) 1994-12-27 1995-12-12 Intel Corporation Error management processes for flash EEPROM memory arrays
JP3176019B2 (ja) * 1995-04-05 2001-06-11 株式会社東芝 不揮発性半導体記憶部を含む記憶システム
US5903495A (en) 1996-03-18 1999-05-11 Kabushiki Kaisha Toshiba Semiconductor device and memory system
US5768192A (en) 1996-07-23 1998-06-16 Saifun Semiconductors, Ltd. Non-volatile semiconductor memory cell utilizing asymmetrical charge trapping
US6768165B1 (en) 1997-08-01 2004-07-27 Saifun Semiconductors Ltd. Two bit non-volatile electrically erasable and programmable semiconductor memory cell utilizing asymmetrical charge trapping
US6522580B2 (en) 2001-06-27 2003-02-18 Sandisk Corporation Operating techniques for reducing effects of coupling between storage elements of a non-volatile memory operated in multiple data states
US6456528B1 (en) 2001-09-17 2002-09-24 Sandisk Corporation Selective operation of a multi-state non-volatile memory system in a binary mode
US7046568B2 (en) 2002-09-24 2006-05-16 Sandisk Corporation Memory sensing circuit and method for low voltage operation
US7196931B2 (en) 2002-09-24 2007-03-27 Sandisk Corporation Non-volatile memory and method with reduced source line bias errors
US7327619B2 (en) 2002-09-24 2008-02-05 Sandisk Corporation Reference sense amplifier for non-volatile memory
US6859397B2 (en) 2003-03-05 2005-02-22 Sandisk Corporation Source side self boosting technique for non-volatile memory
US7237074B2 (en) 2003-06-13 2007-06-26 Sandisk Corporation Tracking cells for a memory system
US6917542B2 (en) 2003-07-29 2005-07-12 Sandisk Corporation Detecting over programmed memory
US7559004B1 (en) 2003-10-01 2009-07-07 Sandisk Corporation Dynamic redundant area configuration in a non-volatile memory system
US7009895B2 (en) 2004-03-31 2006-03-07 International Business Machines Corporation Method for skip over redundancy decode with very low overhead
CN101031971A (zh) 2004-08-02 2007-09-05 皇家飞利浦电子股份有限公司 数据存储和重放设备
JP4261462B2 (ja) * 2004-11-05 2009-04-30 株式会社東芝 不揮発性メモリシステム
US20060140007A1 (en) 2004-12-29 2006-06-29 Raul-Adrian Cernea Non-volatile memory and method with shared processing for an aggregate of read/write circuits
US7142471B2 (en) 2005-03-31 2006-11-28 Sandisk 3D Llc Method and apparatus for incorporating block redundancy in a memory array
US7196928B2 (en) 2005-04-05 2007-03-27 Sandisk Corporation Compensating for coupling during read operations of non-volatile memory
US7339834B2 (en) 2005-06-03 2008-03-04 Sandisk Corporation Starting program voltage shift with cycling of non-volatile memory
JP2007004892A (ja) * 2005-06-23 2007-01-11 Toshiba Corp 半導体集積回路装置
US7230854B2 (en) 2005-08-01 2007-06-12 Sandisk Corporation Method for programming non-volatile memory with self-adjusting maximum program loop
US7023737B1 (en) 2005-08-01 2006-04-04 Sandisk Corporation System for programming non-volatile memory with self-adjusting maximum program loop
US7366022B2 (en) 2005-10-27 2008-04-29 Sandisk Corporation Apparatus for programming of multi-state non-volatile memory using smart verify
US7301817B2 (en) 2005-10-27 2007-11-27 Sandisk Corporation Method for programming of multi-state non-volatile memory using smart verify
US7512847B2 (en) 2006-02-10 2009-03-31 Sandisk Il Ltd. Method for estimating and reporting the life expectancy of flash-disk memory
US7486561B2 (en) * 2006-06-22 2009-02-03 Sandisk Corporation Method for non-real time reprogramming of non-volatile memory to achieve tighter distribution of threshold voltages
US7552511B2 (en) * 2006-07-28 2009-06-30 Creative Research & Development, Inc. Adjustable hinge
US7561482B2 (en) 2006-09-07 2009-07-14 Sandisk Corporation Defective block isolation in a non-volatile memory system
US7356442B1 (en) 2006-10-05 2008-04-08 International Business Machines Corporation End of life prediction of flash memory
US7440323B2 (en) 2006-11-02 2008-10-21 Sandisk Corporation Reducing program disturb in non-volatile memory using multiple boosting modes
CN101589437B (zh) * 2006-11-27 2012-08-29 桑迪士克股份有限公司 用于验证编程的分段位扫描
US7870457B2 (en) 2006-12-29 2011-01-11 Sandisk Corporation Page by page ECC variation in a memory device
US7564711B2 (en) 2007-02-20 2009-07-21 Sandisk Corporation Multiple pass write sequence for non-volatile storage
JP5073402B2 (ja) * 2007-07-31 2012-11-14 パナソニック株式会社 メモリーコントローラ、及びこれを用いた不揮発性記憶装置並びに不揮発性記憶システム
KR20090014823A (ko) 2007-08-07 2009-02-11 삼성전자주식회사 배드 블록을 리맵핑하는 플래시 메모리 장치 및 그것의배드 블록의 리맵핑 방법
US7551477B2 (en) 2007-09-26 2009-06-23 Sandisk Corporation Multiple bit line voltages based on distance
US8026544B2 (en) 2009-03-30 2011-09-27 Sandisk Technologies Inc. Fabricating and operating a memory array having a multi-level cell region and a single-level cell region

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9164833B2 (en) 2013-08-13 2015-10-20 Sk Hynix Data storage device, operating method thereof and data processing system including the same
US9263155B2 (en) 2013-09-10 2016-02-16 SK Hynix Inc. Data storing system and operating method thereof
KR20170092176A (ko) * 2016-02-02 2017-08-11 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
KR20210000308A (ko) * 2018-05-21 2021-01-04 웨스턴 디지털 테크놀로지스, 인코포레이티드 셀 프로빙에 의한 고장 예측

Also Published As

Publication number Publication date
JP2013504836A (ja) 2013-02-07
WO2011031660A3 (en) 2011-05-12
US8400854B2 (en) 2013-03-19
CN102782764A (zh) 2012-11-14
WO2011031660A2 (en) 2011-03-17
EP2476120A2 (en) 2012-07-18
EP2476120B1 (en) 2017-06-28
WO2011031660A4 (en) 2011-07-07
TW201118871A (en) 2011-06-01
JP5650226B2 (ja) 2015-01-07
CN102782764B (zh) 2015-10-21
US20110063918A1 (en) 2011-03-17

Similar Documents

Publication Publication Date Title
JP5650226B2 (ja) 不揮発性記憶装置における危険状態データの識別
KR101699917B1 (ko) 패스트 비트 감지 및 확인 생략을 구비한 비휘발성 저장소의 프로그래밍
EP2718934B1 (en) Intelligent shifting of read pass voltages for non-volatile storage
KR101502104B1 (ko) 프로그래밍 동안에 간섭의 영향을 감소시키는 방법
KR101566460B1 (ko) 비휘발성 메모리 어레이 중 마지막 워드 라인의 데이터 보존 개선
EP2286411B1 (en) Erase-verification process for non-volatile storage
US8406063B2 (en) Programming non-volatile storage with synchonized coupling
KR101661295B1 (ko) 선택적 메모리 셀 프로그래밍 및 소거
KR101736414B1 (ko) 다른 메모리 셀들로부터의 영향을 감소시키는 것을 포함하는 비휘발성 저장 소자의 프로그래밍
KR101904581B1 (ko) 고장난 워드 라인 스크린 및 데이터 복원을 갖는 비휘발성 저장장치
KR20120039562A (ko) 비휘발성 저장 소자에 대한 프로그래밍 완료의 검출
WO2014120943A1 (en) Adaptive initial program voltage for non-volatile memory
KR101100358B1 (ko) 프로그래밍의 검증을 위한 세그먼트화된 비트스캔
WO2014011627A1 (en) Programming method to tighten threshold voltage width with avoiding program disturb

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid