KR101677533B1 - 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치 - Google Patents

플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치 Download PDF

Info

Publication number
KR101677533B1
KR101677533B1 KR1020140109941A KR20140109941A KR101677533B1 KR 101677533 B1 KR101677533 B1 KR 101677533B1 KR 1020140109941 A KR1020140109941 A KR 1020140109941A KR 20140109941 A KR20140109941 A KR 20140109941A KR 101677533 B1 KR101677533 B1 KR 101677533B1
Authority
KR
South Korea
Prior art keywords
raid
vertical ecc
ecc
unit
buffer
Prior art date
Application number
KR1020140109941A
Other languages
English (en)
Other versions
KR20150022723A (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
Priority claimed from TW102148610A external-priority patent/TWI530958B/zh
Application filed by 실리콘 모션 인코포레이티드 filed Critical 실리콘 모션 인코포레이티드
Publication of KR20150022723A publication Critical patent/KR20150022723A/ko
Application granted granted Critical
Publication of KR101677533B1 publication Critical patent/KR101677533B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • 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/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/109Sector level checksum or ECC, i.e. sector or stripe level checksum or ECC in addition to the RAID parity calculation

Landscapes

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

Abstract

적어도 다음의 단계들을 포함하는, 프로세싱 유닛에 의해 수행되는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법의 일 실시예가 개시된다. RAID(Redundant Array of Independent Disk) 그룹 내 모든 메시지가 프로그래밍된 후에, RAID 그룹 내 수직 ECC(Error Correction Code)가 발생되었는지 결정된다. 프로세싱 유닛은 RAID 그룹 내 수직 ECC가 발생되었을 때 DRAM(Dynamic Random Access Memory)으로부터 수직 ECC를 획득하여 수직 ECC를 버퍼에 저장하라고 DMA(Direct Memory Access) 컨트롤러에 지시하고, 그로써 수직 ECC가 저장 유닛에 프로그래밍되는 것을 가능하게 한다.

Description

플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치{METHODS FOR ACCESSING A STORAGE UNIT OF A FLASH MEMORY AND APPARATUSES USING THE SAME}
관련 출원에 대한 상호 참조
본 출원은 2013년 8월 23일자로 출원된 미국 가출원 제61/869,561호의 이익을 주장하며, 그 전문은 참조에 의해 본 명세서에 편입되는 것이다. 본 출원은 2013년 12월 27일자로 출원된 대만 특허 출원 제102148610호의 우선권을 주장하며, 그 전문은 참조에 의해 본 명세서에 편입되는 것이다.
기술 분야
본 발명은 플래시 메모리에 관한 것으로, 구체적으로는 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치에 관한 것이다.
플래시 메모리의 메모리 셀은 수많은 액세스 후에는 오작동할 수 있다. 플래시 메모리 제조 시 입자 또는 마스크 결함은 저장 유닛의 전체 칼럼 또는 더 나쁘게는 액세스될 플래시 메모리의 전체 저장 유닛의 고장을 야기할 수 있다. 따라서, 필요로 되는 것은 전술한 문제가 나타날 때 내부에 저장된 데이터를 보호하도록 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치이다.
적어도 다음의 단계들을 포함하는, 프로세싱 유닛에 의해 수행되는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법의 일 실시예가 개시된다. RAID(Redundant Array of Independent Disk) 그룹 내 모든 메시지가 프로그래밍된 후에, RAID 그룹 내 수직 ECC(Error Correction Code)가 발생되었는지 결정된다. 프로세싱 유닛은 RAID 그룹 내 수직 ECC가 발생되었을 때 DRAM(Dynamic Random Access Memory)으로부터 수직 ECC를 획득하여 수직 ECC를 버퍼에 저장하라고 DMA(Direct Memory Access) 컨트롤러에 지시하고, 그로써 수직 ECC가 저장 유닛에 프로그래밍되는 것을 가능하게 한다.
적어도 다음의 단계들을 포함하는, 프로세싱 유닛에 의해 수행되는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법의 또 다른 실시예가 개시된다. RAID 그룹 내 모든 메시지가 프로그래밍된 후에, RAID 그룹 내 수직 ECC가 발생되었는지 결정된다. 프로세싱 유닛은 RAID 그룹 내 수직 ECC가 발생되지 않았을 때 수직 ECC를 버퍼에 출력하라고 RAID-인코딩 유닛에 지시하고, 그로써 수직 ECC가 저장 유닛에 프로그래밍되는 것을 가능하게 한다. 프로세싱 유닛은 더욱 RAID 그룹 내 수직 ECC가 발생되지 않았을 때 RAID-인코딩 유닛으로부터 수직 ECC를 획득하여 수직 ECC를 DRAM에 저장하라고 DMA 컨트롤러에 지시한다.
플래시 메모리의 저장 유닛에 액세스하기 위한 장치의 일 실시예가 개시되는데, 적어도 DMA 컨트롤러, 버퍼 및 프로세싱 유닛을 포함한다. DMA 컨트롤러에 결합된 프로세싱 유닛은 RAID 그룹 내 모든 메시지가 프로그래밍된 후에 RAID 그룹 내 수직 ECC가 발생되었는지 결정한다. 프로세싱 유닛은 더욱 RAID 그룹 내 수직 ECC가 발생되었을 때 DRAM으로부터 수직 ECC를 획득하여 수직 ECC를 버퍼에 저장하라고 DMA 컨트롤러에 지시하고, 그로써 수직 ECC가 저장 유닛에 프로그래밍되는 것을 가능하게 한다.
상세한 설명은 이하의 실시예에서 첨부 도면을 참조하여 제공된다.
본 발명은 첨부 도면을 참조하여 다음의 상세한 설명 및 실시예를 읽음으로써 충분히 이해될 수 있다.
도 1은 본 발명의 일 실시예에 따른 플래시 메모리의 저장 유닛을 묘사한 도식적 선도;
도 2는 본 발명의 일 실시예에 따른 플래시 메모리의 시스템 아키텍처;
도 3은 본 발명의 일 실시예에 따른 플래시 스토리지의 저장 유닛으로의 인터페이스를 묘사한 도식적 선도;
도 4는 본 발명의 일 실시예에 따른 데이터 스토리지의 논리적 뷰를 도시한 도식적 선도;
도 5a는 본 발명의 일 실시예에 따라 각각의 섹터 내 적용된 데이터 스토리지의 논리적 뷰를 도시한 도식적 선도;
도 5b는 본 발명의 일 실시예에 따른 2-차원 ECC의 논리적 뷰를 도시한 도식적 선도;
도 6은 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 시스템 블록 선도;
도 7a 및 도 7b는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도;
도 8은 본 발명의 일 실시예에 따라, 저장-유닛 액세스 인터페이스에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도;
도 9는 본 발명의 일 실시예에 따라 데이터를 읽기 위한 시스템 블록 선도;
도 10은, 본 발명의 일 실시예에 따라, 섹터-디코딩 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도;
도 11은, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도;
도 12는 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 시스템 블록 선도;
도 13은 본 발명의 일 실시예에 따른 저장 유닛의 TLC 블록을 도시한 도식적 선도;
도 14는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도;
도 15는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도;
도 16a는 본 발명의 일 실시예에 따라 SLC 셀의 라지 파퓰레이션(large population)의 임계 전압의 분포를 예시한 도식적 선도;
도 16b는 본 발명의 일 실시예에 따라 MLC 셀의 라지 파퓰레이션의 임계 전압의 분포를 예시한 도식적 선도;
도 16c는 본 발명의 일 실시예에 따라 TLC 셀의 라지 파퓰레이션의 임계 전압의 분포를 예시한 도식적 선도;
도 17a 내지 도 17c는 본 발명의 일 실시예에 따라 3 라운드의 프로그래밍을 거친 워드라인 상의 TLC의 임계 전압 분포의 변화량을 예시한 도식적 선도;
도 18a는 본 발명의 일 실시예에 따라 RAID 그룹 내 RS(48, 45)의 수직 ECC와 데이터 배치의 도식적 선도;
도 18b는 본 발명의 일 실시예에 따라 RAID 그룹 내 RS(96, 93)의 수직 ECC와 데이터 배치의 도식적 선도;
도 19a는 메시지, 수평 ECC, 및/또는 수직 ECC를 포함하는 데이터 페이지를 저장 유닛의 워드라인 내에 프로그래밍하는 일례의 예시도;
도 19b는 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 타이밍 선도;
도 20a 내지 도 20d는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 순서도;
도 21은 본 발명의 일 실시예에 따른 저장 유닛의 워드라인에 대한 프로그래밍 시퀀스를 묘사한 도식적 선도.
이하의 설명은 본 발명을 수행하는 최상으로 고려되는 모드에 대한 것이다. 이 설명은 본 발명의 일반적 원리를 예시하려는 목적이며, 한정적 의미로 받아들여서는 안 된다. 본 발명의 범위는 첨부 청구범위를 참조하여 최상으로 결정된다.
본 발명은 특정 실시예에 관하여 그리고 소정 도면을 참조하여 설명될 것이지만, 본 발명은 그에 국한되는 것이 아니며 청구범위에 의해 한정될 뿐이다. 용어 "포함하고 있다", "포함하고 있는", "포함한다" 및/또는 "포함하는"은, 본 명세서에서 사용될 때, 서술된 특징, 정수, 단계, 연산, 구성요소 및/또는 컴포넌트의 존재를 명시하지만, 하나 이상의 다른 특징, 정수, 단계, 연산, 구성요소, 컴포넌트 및/또는 그 그룹의 존재 또는 부가를 막지는 않음을 더욱 이해할 것이다.
청구항 구성요소를 수식하도록 청구범위에서 "제1", "제2", 및 "제3" 등과 같은 서수 용어의 사용은 그 자체로 방법의 행위가 수행되는 시간적 순서 또는 다른 구성요소 대비 하나의 청구항 구성요소의 어느 우선순위, 선행 또는 순서를 내포하지는 않으며, 단지 청구항 구성요소들을 구별하기 위해 소정 명칭을 갖는 하나의 청구항 구성요소를 (서수 용어의 사용이 아니었다면) 동일한 명칭을 갖는 다른 구성요소와 구별하는 라벨로서 사용될 뿐이다.
본 발명의 실시예들은 저장 유닛 내에 저장될 데이터를 인코딩하고 저장 유닛으로부터의 그 인코딩된 데이터를 디코딩하도록 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치를 도입한다. 도 1은 본 발명의 일 실시예에 따른 플래시 메모리의 저장 유닛을 묘사한 도식적 선도이다. 저장 유닛(10)은 M x N 메모리 셀로 이루어진 어레이를 포함하고, 각각의 메모리 셀은 적어도 하나의 정보 비트를 저장할 수 있다. 플래시 메모리는 NOR 또는 NAND 플래시 메모리 등일 수 있다. 소망 정보에 적합하게 액세스하기 위해서, 액세스에 적합한 행(row) 라인을 선택하도록 행-디코딩 유닛(120)이 사용된다. 유사하게, 출력을 위해 행 내 적합한 수의 바이트를 선택하도록 열(column)-디코딩 유닛(130)이 채용된다. 어드레스 유닛(140)은 메모리 셀 어레이(110)의 N개의 행 중 어느 것이 읽기 또는 쓰기를 위해 선택되어야 하는지 정의하는 행 정보를 행-디코딩 유닛(120)에 인가한다. 유사하게, 열-디코딩 유닛(130)은 메모리 셀 어레이(110)의 M개의 열 중 어느 것 또는 어느 것들이 선택되어야 하는지 정의하는 어드레스 정보를 수신한다. 행는 당업자에 의해 워드라인이라고 호환 지칭될 수 있고, 열은 비트라인이라고 호환 지칭될 수 있다. 메모리 셀 어레이(110)로부터 읽힌 또는 그에 인가될 데이터는 데이터 버퍼(150)에 저장된다. 메모리 셀은 SLC(Single-Level Cell), MLC(Multi-Level Cell) 또는 TLC(Triple-Level Cell)일 수 있다.
SLC에 있어서, 하나의 상태는 부동 게이트에서는 영 전하를 갖고 소거된 후 쓰이지 않은 셀 상태(보통 "1" 상태로 표현)이고, 다른 하나의 상태는 부동 게이트에서는 소정량의 음 전하를 갖는다(보통 "0" 상태로 표현). 게이트에서 음 전하를 갖는 것은 셀의 트랜지스터의 임계 전압(즉, 트랜지스터가 도전하게 야기하기 위해 트랜지스터의 제어 게이트에 인가되어야 하는 전압)이 증가하게 야기한다. 셀의 임계 전압을 체크함으로써 그 저장된 비트를 읽는 것이 실현가능하다. 임계 전압이 더 높은 상태에 있으면 그때 비트 값은 "0"이고, 임계 전압이 더 낮은 상태에 있으면 그때 비트 값은 "1"이다. 도 16a는 본 발명의 일 실시예에 따라 SLC 셀의 라지 파퓰레이션의 임계 전압의 분포를 예시한 도식적 선도이다. (예컨대, 실리콘 구조에서의 결함 또는 불순물 농도에서의 작은 편차에 기인하여) 플래시 메모리 내 메모리 셀은 그들 특성 및 거동이 정확히 똑같지는 않기 때문에, 메모리 셀의 전부에 동일 프로그래밍 연산을 적용하는 것이 메모리 셀의 전부가 정확히 동일한 임계 전압을 갖게 야기하지는 않는다. 그보다는, 임계 전압은 도 16a에 도시된 바와 같이 분포된다. "1" 값을 저장하는 SLC는 전형적으로 음의 임계 전압을 갖는데, 소수의 셀이 좌측 피크의 중심 전압보다 더 낮거나 더 높은 임계 전압을 가지면서 셀의 대다수가 좌측 피크의 중심 전압 값에 가까운 임계 전압을 갖는 그러한 것이다. 유사하게, "0" 값을 저장하는 SLC는 전형적으로 양의 임계 전압을 갖는데, 소수의 셀이 우측 피크의 중심 전압보다 더 낮거나 더 높은 임계 전압을 가지면서 셀의 대다수가 우측 피크의 중심 전압에 가까운 임계 전압을 갖는 그러한 것이다.
MLC가 문자 그대로는 2개보다 많은 레벨, 즉, 셀당 하나보다 많은 비트를 갖기는 하지만, 현재 가장 흔한 MLC는 셀당 2개의 비트를 갖는 것들이고, 그러한 예들이 아래에 주어진다. 2개의 정보 비트를 저장하는 단일 MLC는 4개의 다른 상태 중 하나의 상태에 있고, 이 경우 하나의 비트는 LSB(Least Significant Bit)로서 지정되고 다른 하나는 MSB(Most Significant Bit)로서 지정된다. 메모리 셀의 "상태"는 그 임계 전압으로 표현되므로, MLC는 그 임계 전압에 대해 4개의 다른 유효 범위를 지원한다. 도 16b는 본 발명의 일 실시예에 따라 MLC 셀의 라지 파퓰레이션의 임계 전압의 분포를 예시한 도식적 선도이다. 예상대로, 그것은 4개의 피크를 갖고, 각각의 피크는 하나의 상태에 대응한다. 유사하게, 3개의 정보 비트를 저장하는 단일 TLC는 8개의 다른 상태 중 하나의 상태에 있고, 이 경우 3개의 비트는 각자 LSB, CSB(Center Significant Bit) 및 MSB로서 지정된다. 단일 TLC는 그 임계 전압에 대해 8개의 다른 유효 범위를 지원한다. 도 16c는 본 발명의 일 실시예에 따라 TLC 셀의 라지 파퓰레이션의 임계 전압의 분포를 예시한 도식적 선도이다. 예상대로, 그것은 8개의 피크를 갖고, 각각의 피크는 하나의 상태에 대응한다. 그렇지만, 본 발명은 메모리 셀당 3개보다 많은 비트를 지원하는 플래시 메모리 디바이스에 동등하게 적용가능함을 이해해야 한다.
도 2는 본 발명의 일 실시예에 따른 플래시 메모리의 시스템 아키텍처이다. 플래시 메모리의 시스템 아키텍처(20)에는 저장 유닛(10)의 지정된 어드레스 내에 데이터를 쓰고 그것의 지정된 어드레스로부터 데이터를 읽도록 구성되어 있는 컨트롤러(200)가 들어있다. 구체적으로, 제어 유닛(210)은 저장-유닛 액세스 인터페이스(230)를 통해 저장 유닛(10)의 지정된 어드레스에 데이터를 쓰고 동일 인터페이스(230)를 통해 그것의 지정된 어드레스로부터 데이터를 읽는다. 시스템 아키텍처(20)는, 데이터 라인, 클록 신호 및 제어 라인을 포함하여, 컨트롤러(200)와 저장 유닛(10) 간 커맨드 및 데이터 전송을 조정하기 위한 수개의 전기 신호를 사용한다. 데이터 라인은 커맨드, 어드레스 및 쓰이고 읽힐 데이터를 전송하도록 채용된다. 제어 라인은 CE(Chip Enable), ALE(Address Latch Enable), CLE(Command Latch Enable), WE(Write Enable) 등과 같은 제어 신호를 발행하도록 이용된다. 저장-유닛 액세스 인터페이스(230)는 ONFI(open NAND flash interface), DDR 토글 또는 그 밖의 것들과 같이 SDR(Single Data Rate) 프로토콜 또는 DDR(Double Data Rate) 프로토콜을 사용하여 저장 유닛(10)과 통신할 수 있다. 제어 유닛(210)은 USB(Universal Serial Bus), ATA(Advanced Technology Attachment), SATA(Serial ATA), PCI-E(Peripheral Component Interconnect Express) 또는 그 밖의 것들과 같이 표준 프로토콜을 사용하여 프로세싱-유닛 액세스 인터페이스(250)를 통해 다른 전자 디바이스와 통신할 수 있다.
플래시 스토리지에는 다수의 저장 유닛(10)이 들어있을 수 있고, 각각의 저장 유닛은 단일 다이로 실시되어 저장-유닛 액세스 인터페이스(230)와 통신하도록 독립 또는 공유 인터페이스를 가질 수 있다. 저장 유닛 내외로 대용량 데이터의 액세스 연산, 예컨대 그에 데이터를 프로그래밍, 그로부터 데이터를 읽기 등은 효율을 개선하도록 파이프라인식일 수 있다. 도 3은 본 발명의 일 실시예에 따른 플래시 스토리지의 저장 유닛으로의 인터페이스를 묘사한 도식적 선도이다. 플래시 스토리지(300)는 j+1개의 채널을 제공하고 각각의 채널은 i+1개의 저장 유닛과 연관된다. 즉, i+1개의 저장 유닛은 제어 유닛과 통신하기 위해 동일 채널을 공유할 수 있다. 예컨대, 플래시 스토리지(300)에 의해 8개의 채널(j=7)이 제공되고 각각의 채널은 8개의 저장 유닛(i=7)과 연관된다고 가정하라: 플래시 스토리지(300)는 총 64개의 저장 유닛(10[0..j][0..i])을 갖는다. 컨트롤러의 제어 유닛은 지정된 저장 유닛 내에 데이터를 프로그래밍하고 그리고/또는 지정된 저장 유닛으로부터 데이터를 읽도록 플래시 스토리지(300)에 의해 제공되는 전기 신호(310[0..j][0..1]) 중 하나의 세트를 사용할 수 있다. 각각의 저장 유닛은 독립적 CE 제어 신호를 소유하고 동일 채널에서의 저장 유닛은 데이터 라인, 클록 신호 및 다른 제어 신호 라인을 공유할 수 있다. 즉, 연관 저장-유닛 액세스 인터페이스(또는 소위 채널)를 통해 지정된 저장 유닛으로의 데이터 액세스를 수행하려고 시도할 때 대응하는 CE 제어 신호를 활성화시키도록 제어 유닛이 필요하다. 플래시 스토리지(300)에는 어떠한 수의 채널이라도 제공될 수 있고, 각각의 채널은 어떠한 수의 저장 유닛과도 연관될 수 있음이 명백하고, 본 발명은 그에 국한되어서는 안 된다.
메시지의 정확도를 보증하도록, 그 저장된 메시지에 2-차원 ECC(Error Correction Code)가 첨부될 수 있다. 도 4는 본 발명의 일 실시예에 따른 데이터 스토리지의 논리적 뷰를 도시한 도식적 선도이다. (j+1)x(i+1) 저장 유닛은 ECC(소위 수직 ECC)를 저장하기 위한 l개의 저장 유닛을 포함할 수 있다. 각각의 수직 ECC는 다른 (j+1)x(i+1)-l개의 저장 유닛의 대응하는 어드레스에 저장된 값에 따라 발생된다. 일례에 있어서, i=7, j=7l=1을 가정하라: 마지막 저장 유닛(10[7][7])은 SPC(64, 63) 코드를 저장할 수 있고, 이 경우 SPC는 단일 패리티 체크의 약자이다. 또 다른 일례에 있어서, i=7, j=7l=2를 가정하라: 마지막 2개의 저장 유닛(10[7][6], 10[7][7])은 RS(64, 62) 코드를 저장할 수 있고, 이 경우 RS는 리드-솔로몬 코드를 나타낸다. 다른 일례에 있어서, i=7, j=7l=3를 가정하라: 마지막 3개의 저장 유닛(10[7][5], 10[7][6], 10[7][7])은 RS(64, 61) 코드를 저장할 수 있다. 위 예들은 총망라한 것은 아니며, 다른 유형의 ECC가 수직 ECC로서 다뤄질 수 있음을 이해해야 한다. 수직 ECC는 저장-유닛 레벨에서의 보호를 제공한다, 즉, 저장 유닛 중 하나가 오작동할 때, 다른 표준 저장 유닛에 저장된 값을 수반하는 수직 ECC는 그 표준 저장 유닛에서 총수의 에러가 바로잡힐 수 있으면 고장난 저장 유닛에 저장된 모든 값을 바로잡도록 사용될 수 있다. 프로세싱-유닛 액세스 인터페이스(250)를 통해 수신되는 메시지에 부가하여, 다른 저장 유닛은 수평 ECC를 저장한다. 각각의 저장 유닛 내 워드라인마다 k+1(예컨대, k=31)개의 섹터의 값을 저장할 수 있다. 단일 워드라인에 저장되는 전술한 섹터는 일괄하여 페이지라고 지칭될 수 있다. 예컨대, 지정된 워드라인에 대하여, 저장 유닛(10[0][0])은 섹터(410[0][0][0] 내지 410[0][0][k])의 값을 저장할 수 있고, 저장 유닛(10[0][i])은 섹터(410[0][i][0] 내지 410[0][i][k])의 값을 저장할 수 있고, 저장 유닛(10[j][i])은 섹터(410[j][i][0] 내지 410[j][i][k])의 값을 저장할 수 있다. 예시적 섹터(410[0][0][0] 내지 410[0][0][k], 410[0][i][0] 내지 410[0][i][k], 410[j][i][0] 내지 410[j][i][k] 등)의 각각은 CE 섹터라고 지칭될 수 있다. 도 5a는 본 발명의 일 실시예에 따라 각각의 섹터 내 적용된 데이터 스토리지의 논리적 뷰를 도시한 도식적 선도이다. 섹터(410[0..j][0..i][0..k]) 중 어느 하나에는 메시지(510) 및 수평 ECC(530)가 들어있을 수 있다. 메시지(510)의 길이는 1K 바이트와 같이 고정된다. 수평 ECC(530)는 메시지(510)에 저장된 값을 고려하여 발생되고, SPC 코드, RS 코드, 또는 메시지(510) 내 나타난 용인가능한 에러를 정정하도록 이용되는 유사하지만 다른 코드일 수 있다. 수평 ECC(530)는 섹터 레벨에서의 보호를 제공한다, 즉, 용인가능한 수의 에러가 메시지(510) 내에 일어날 때, 동일 메시지(510)에 저장된 다른 올바른 값을 수반하는 수평 ECC(530)는 그 에러를 바로잡도록 사용될 수 있다. 도 5b는 본 발명의 일 실시예에 따른 2-차원 ECC의 논리적 뷰를 도시한 도식적 선도이다. 각각의 섹터에는 적어도 메시지 및 수평 ECC가 들어있다, 예컨대, 섹터(410[0][0][0])에는 적어도 메시지(510[0][0][0]) 및 메시지(510[0][0][0])에 나타난 에러를 바로잡도록 채용되는 수평 ECC(530[0][0][0])가 들어있다. l=1, 즉, 단 하나의 저장 유닛만이 수직 ECC를 저장하도록 이용된다고 가정하라: 섹터(510[j][i][0])는 메시지(510[0][0][0] 내지 510[j-1][i][0])에 나타난 에러 비트를 바로잡도록 채용되는 수직 ECC를 저장하는 한편 섹터(530[j][i][0])는 수평 ECC(530[0][0][0] 내지 530[j-1][i][0])에 나타난 에러 비트를 바로잡도록 채용되는 수직 ECC를 저장한다. 대응하는 수평 ECC로 전형적 에러 정정 알고리즘이 사용되더라도 복구하기에 너무 많은 에러가 섹터에 들어있는 경우, 또는 하드웨어 고장이 일어난 경우에 있어서는, 이러한 섹터의 메시지를 복구하도록, 관련 섹터 내 다른 메시지 및 수직 ECC와 수반되어 전형적 에러 정정 알고리즘이 사용된다. 전술한 섹터 및 섹터 내 나타난 값을 정정하도록 채용되는 수직 ECC는 일괄하여 RAID(Redundant Array of Independent Disk) 그룹이라고 지칭될 수 있다.
도 6은 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 시스템 블록 선도이다. 프로세싱 유닛(610)은, 본 명세서에서 나열되는 기능을 수행하도록 마이크로코드 또는 소프트웨어 명령어를 사용하여 프로그래밍되는 범용 하드웨어(예컨대, 단일 프로세서, 병렬 계산을 할 수 있는 그래픽 프로세싱 유닛 또는 다중 프로세서, 또는 그 밖의 것들)로, 또는 전용 하드웨어로 등 수많은 방법으로 구현될 수 있다. 쓰기가 소망되어 프로세싱-유닛 액세스 인터페이스(250)를 통해 또 다른 전자 디바이스로부터 수신된 메시지는 DMA(Direct Memory Access) 컨트롤러(623)에 의해 DRAM(Dynamic Random Access Memory)(620)에 저장된다. 저장 유닛(10[0][0] 내지 10[j][i]) 중 어느 하나에는 다수의 SLC가 들어있을 수 있다. 멀티플렉서(640)는 디폴트로서 DRAM(620)과 버퍼(640)를 결합시킬 수 있다. 32K 바이트와 같이 명시된 길이의 메시지가 DRAM(620)에 저장되었음을 검출한 후에, 프로세싱 유닛(610)은 DRAM(620) 내 메시지를 멀티플렉서(630)를 통해 버퍼(650) 내에, 그리고 RAID-인코딩 유닛(630)의 버퍼(도시하지 않음) 내에 동시에 저장하라고 DMA 컨트롤러(621)에 지시한다. RAID-인코딩 유닛(630)은, 현재 저장된 결과 및 새롭게 수신된 메시지에 따라, SPC(64,63), RS(64,62) 또는 RS(64,61) 코드, 또는 유사하지만 다른 코드와 같이 수직 ECC를 발생시키도록 어떠한 전형적 ECC 인코딩 알고리즘이라도 채용할 수 있다. 프로세싱 유닛(610)은 적어도 2개의 카운터를 포함할 수 있는데, 하나는 메시지 출력의 총수를 계산하기 위한 메시지 카운터이고, 다른 하나는 수직 ECC 출력의 총수를 계산하기 위한 ECC 카운터이다. 프로세싱 유닛(610)은, 메시지 카운터가 미리 정의된 임계값에 도달하였을 때, RAID-인코딩 유닛(630)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어하고, 인코딩된 수직 ECC를 하나 이상의 배취(batch)로 버퍼(650)에 출력하라고 RAID-인코딩 유닛(630)에 지시한다. 프로세싱 유닛(610)은 ECC 카운터가 미리 정의된 임계값에 도달하였을 때 후속 메시지 저장을 계속하도록 또다시 DRAM(620)을 버퍼(650)에 다시 결합시키도록 멀티플렉서(640)를 제어한다. 예컨대, RS(64, 61)가 채용된다고 가정하라: 프로세싱 유닛(610)은 메시지 카운터가 61까지 카운트하였을 때 RAID-인코딩 유닛(630)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어하고 메시지 카운터를 영으로 재설정한다. 그 후, 프로세싱 유닛(610)은 ECC 카운터가 3까지 카운트하였을 때 DRAM(620)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어하고 ECC 카운터를 영으로 재설정한다. 아비터(660)는, DRAM(620) 또는 RAID-인코딩 유닛(630)에 저장된 데이터가 버퍼(650)에 출력되었을 때마다, 버퍼(650)로부터 수직 ECC 또는 섹터의 값을 읽고 그리고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 연관된 하나와 같은 연관된 저장-유닛 액세스 인터페이스를 통해 저장 유닛(10[0][0] 내지 10[j][i]) 중 하나와 같은 지정된 저장 유닛 내에 그 값을 쓰라고 프로세싱 유닛(610)에 의해 지시받는다. 아비터(660)는 지정된 저장 유닛과 관련된 CE 제어 신호를 활성화시키고, 연관된 저장-유닛 액세스 인터페이스의 데이터 라인을 거쳐 그 지정된 저장 유닛에 그 값 및 어드레스를 송신할 수 있다. 버퍼(650)로부터 읽힌 값(메시지 또는 수직 ECC일 수 있음)에 따라 수평 ECC를 발생시킬 수 있는 수평 ECC 회로를 저장-유닛 액세스 인터페이스마다 더 포함한다. 구체적으로, 예컨대, 저장-유닛 액세스 인터페이스는, 1K 바이트와 같이, 명시된 길이의 메시지(510)가 버퍼(650)로부터 읽힌 후에 그에 따라 수평 ECC(530)를 발생시킨다. 그 후 저장-유닛 액세스 인터페이스는 메시지(510) 및 발생된 수평 ECC(530)를 지정된 저장 유닛의 지정된 어드레스에 프로그래밍한다.
도 7a 및 도 7b는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도이다. RAID 그룹을 형성하기 위해, 프로세싱 유닛(610)은 데이터를 프로그래밍하도록 메시지 카운터를 영으로 그리고 ECC 카운터를 영으로 설정하고(단계(S711)), DRAM(620)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어하기 시작한다(단계(S713)). 다음으로, 단계(S721 내지 S731)를 포함하는 루프는 RAID 그룹 내 모든 메시지가 저장 유닛(10[0][0] 내지 10[j][i])과 같은 지정된 저장 유닛 내에 완전히 프로그래밍될 때까지 반복적으로 수행된다. 구체적으로, 32K 바이트와 같이 명시된 길이의 새로운 메시지가 DRAM(620)에 저장되었음을 검출한 후에(단계(S721)), 프로세싱 유닛(610)은 DRAM(620)의 메시지를 멀티플렉서(640)를 통해 버퍼(650)에 그리고 RAID-인코딩 유닛(630)의 버퍼(도시하지 않음)에 동시에 저장하라고 DMA 컨트롤러(621)에 지시한다(단계(S723)). 그 다음에, 프로세싱 유닛(610)은, 버퍼(650)의 값을 읽고 그리고 그 읽힌 값을, 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 연관된 하나와 같이 연관된 저장-유닛 액세스 인터페이스를 통해, 저장 유닛(10[0][0] 내지 10[j][i]) 중 하나와 같이 지정된 저장 유닛에 프로그래밍하라고 아비터(660)에 지시한다(단계(S725)). 메시지 카운터를 1만큼 증분시킨 후에(단계(S727)), 프로세싱 유닛(610)은 메시지 카운터 값이 (j+1)x(i+1)-l-1과 같 미리 정의된 임계값을 초과하였는지 결정한다(단계(S731)). 그러하면, 프로세스는 RAID 그룹 내 하나 이상의 수직 ECC를 프로그래밍하도록 계속하여 다음 단계(S733 내지 S751)를 수행하고; 그러하지 않으면, 프로세스는 RAID 그룹 내 미완료된 메시지를 프로그래밍하도록 단계(S721)로 되돌아간다.
RAID 그룹 내 수직 ECC의 상세한 프로그래밍은 다음과 같이 예시된다. 프로세싱 유닛(610)은 RAID-인코딩 유닛(630)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어한다(단계(S733)). 다음으로, 단계(S741 내지 S751)를 포함하는 루프는 RAID 그룹 내 모든 수직 ECC가 저장 유닛(10[j][i-1+1] 내지 10[j][i])과 같은 지정된 저장 유닛 내에 완전히 프로그래밍될 때까지 반복적으로 수행된다. 구체적으로, 프로세싱 유닛(610)은 32K 바이트와 같이 명시된 길이의 수직 ECC를 멀티플렉서(640)를 통해 버퍼(650)에 출력하라고 RAID-인코딩 유닛(630)에 지시한다(단계(S741)). 그 다음에, 프로세싱 유닛(610)은, 버퍼(650)의 값을 읽고 그리고 그 읽힌 값을, 연관된 저장-유닛 액세스 인터페이스(230[j])와 같이 연관된 저장-유닛 액세스 인터페이스를 통해, 저장 유닛(10[j][i-l+1] 내지 10[j][i]) 중 하나와 같이 지정된 저장 유닛에 프로그래밍하라고 아비터(660)에 지시한다(단계(S743)). ECC 카운터를 1만큼 증분시킨 후에(단계(S745)), 프로세싱 유닛(610)은 ECC 카운터 값이 l-1과 같 미리 정의된 임계값을 초과하였는지 결정한다(단계(S751)). 그러하면, 프로세스는 다음의 RAID 그룹에 대한 프로그래밍을 계속하도록 단계(S711)로 다시 복귀하고; 그러하지 않으면, 프로세스는 RAID 그룹 내 미완료된 수직 ECC를 프로그래밍하도록 단계(S741)로 되돌아간다.
도 8은, 본 발명의 일 실시예에 따라, 저장-유닛 액세스 인터페이스에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도이다. 그 방법은 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나에 적용될 수 있다. 저장-유닛 액세스 인터페이스가 32K-바이트 메시지와 같이 명시된 길이의 데이터를 지정된 저장 유닛에 프로그래밍하기 위한 명령어를 아비터(660)로부터 수신한 후에(단계(S811)), 단계(S821 내지 S831)를 포함하는 루프는 모든 데이터가 완전히 프로그래밍될 때까지 반복적으로 수행된다. 구체적으로, 데이터 프로그래밍의 각각의 실행에 대해, 저장-유닛 액세스 인터페이스는 1K 바이트와 같이 미리 설정된 길이의 데이터를 아비터(660)로부터 획득하고(단계(S821)), 획득된 데이터에 따라 수평 ECC를 발생시키고(단계(S823)), 그리고 획득된 데이터 및 발생된 수평 ECC를 지정된 저장 유닛의 다음 섹터의 어드레스 내에 프로그래밍한다(단계(S825)). 단계(S825)에서 그것이 프로그래밍의 제1 실행이면 그때는 읽힌 데이터 및 발생된 수평 ECC는 지정된 워드라인의 제1 섹터의 어드레스 내에 프로그래밍됨을 이해해야 한다. 다음으로, 저장-유닛 액세스 인터페이스는 모든 데이터가 완전히 프로그래밍되었는지 결정한다(단계(S831)). 그러하면, 프로세스는 종료되고; 그러하지 않으면, 그것은 프로그래밍의 다음 실행을 수행하도록 단계(S821)로 다시 복귀한다. 도 19a는 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 타이밍 선도이다. 저장-유닛 액세스 인터페이스(230[0] 내지 230[3])는 각자 채널(CH0 내지 CH3)로서 표시되고, 각각의 저장-유닛 액세스 인터페이스와 연관된 저장 유닛은 각자 CE0 내지 CE3로서 표시된다. 도 19a는 메시지, 수평 ECC 및/또는 수직 ECC를 포함하는 데이터 페이지(PG0)를 저장 유닛(10[0][0] 내지 10[3][3])의 제1 워드라인(WL0) 내에 프로그래밍하는 일례를 도시하고 있다. 아비터(660)는 데이터 페이지(PG0)의 관련 부분을 각자 채널(CH0 내지 CH3)을 통해 제1 접속된 저장 유닛(CE0)의 버퍼(도시하지 않음)에 송신하고, 그 후, 물리적 데이터 프로그래밍을 시작하도록, 그 접속된 저장 유닛(CE0)에 데이터 쓰기 커맨드를 발행한다. 저장 유닛(CE0)은 데이터 쓰기 커맨드를 수신한 후에 버퍼에 저장된 데이터 페이지(PG0)를 워드라인(WL0) 상의 SLC 내에 프로그래밍하는 시간 기간 동안 사용 중 상태에 들어간다. 저장 유닛(CE0)이 물리적 데이터 프로그래밍을 수행할 때, 채널(CH0 내지 CH3)이 이용가능하고 아비터(660)는 데이터 페이지(PG0)의 관련 부분을 제2 접속된 저장 유닛(CE1)의 버퍼(도시하지 않음)에 송신하도록 채널(CH0 내지 CH3)을 채용할 수 있다. 당업자는 RAID 그룹에 대해 전술한 데이터 배치가 채널(CH0 내지 CH3) 상에서 스페어 시간 감축의 결과를 초래하고 저장 유닛으로의 송신에 있어서 더 양호한 데이터 스루풋을 내놓음을 관찰할 수 있다.
도 9는 본 발명의 일 실시예에 따라 데이터를 읽기 위한 시스템 블록 선도이다. 프로세싱 유닛(910)은, 이후 나열되는 기능을 수행하도록 마이크로코드 또는 소프트웨어 명령어를 사용하여 프로그래밍되는 범용 하드웨어(예컨대, 단일 프로세서, 병렬 계산을 할 수 있는 그래픽 프로세싱 유닛 또는 다중 프로세서, 또는 그 밖의 것들)로, 또는 전용 하드웨어로 등 수많은 방법으로 구현될 수 있다. 저장 유닛(10[0][0] 내지 10[j][i]) 중 어느 하나는 다수의 SLC를 포함할 수 있다. 지정된 저장 유닛으로부터 섹터의 값을 읽은 후에, 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나와 같은 저장-유닛 액세스 인터페이스는 그 읽힌 값을 섹터-디코딩 유닛(960)에 송신한다. 섹터-디코딩 유닛(960)은 그 읽힌 메시지가 어떠한 에러라도 갖는지 그 읽힌 수평 ECC를 사용함으로써 검사하고, 그리고 그러하면, 수평 ECC로 전형적 에러 정정 알고리즘을 사용함으로써 에러 비트(들)를 정정하려 시도한다. 그 읽힌 메시지가 에러를 갖고 있지 않거나 정정이 성공적일 때, 섹터-디코딩 유닛(960)은 수평 ECC를 떨어뜨려 원래 또는 정정된 메시지를 버퍼(950)에 저장하고, 그로써 전자 디바이스가 프로세싱-유닛 액세스 인터페이스(250)를 거쳐 그 디코딩된 메시지를 읽는 것을 가능하게 한다. 그 읽힌 수평 ECC로 에러 정정 알고리즘이 사용되더라도 정정이 바로잡힐 수 없을 때, 섹터-디코딩 유닛(960)은 적어도 복구가능하지 않은 섹터의 어드레스에 관한 정보가 들어있는 메시지를 프로세싱 유닛(910)에 보낸다. 그 다음에, 프로세싱 유닛(910)은 수직 정정 프로시저를 활성화시킨다. 수직 정정 프로시저에 있어서, 프로세싱 유닛(910)은 어느 RAID 그룹에 복구가능하지 않은 섹터가 들어있는지에 관한 정보를 획득하고, 그 RAID 그룹 내 대응하는 수직 ECC를 저장하고 있는 것을 포함하는 다른 섹터에 대한 어드레스를 찾는다. 예컨대, 도 5b를 참조하라. 수평 ECC(530[0][0][0])로 전형적 에러 정정 알고리즘이 사용되더라도 복구가능하지 않은 에러를 섹터(410[0][0][0])의 메시지(510[0][0][0])가 갖고 있다고 가정하라: 메시지(510[0][0][0]) 내 나타난 에러 비트(들)를 바로잡도록 동일 RAID 그룹 내 다른 섹터, 섹터(410[0][1][0] 내지 410[j][i][0])가 에러 정정 알고리즘에 의해 채용될 수 있다. 다음으로, 프로세싱 유닛(910)은 수직 정정 프로시저가 활성화되었음을 섹터-디코딩 유닛(960)에 알려주고, 복구가능하지 않은 섹터에 대응하는 다른 섹터를 결정하고, 그 결정된 섹터의 값을 순차적으로 읽으라고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j])에 지시한다. 수직 정정 프로시저가 활성화된 경우에 있어서, 섹터-디코딩 유닛(960)은 저장-유닛 액세스 인터페이스(230[0] 내지 230[j])를 통해 그 결정된 섹터의 값을 획득하고, 그리고, 메시지를 성공적으로 디코딩한 후에, 그 디코딩된 결과를 RAID-디코딩 유닛(930)에 송신한다. RAID-디코딩 유닛(930)은 이전에 복구가능하지 않은 에러를, 디코딩된 메시지 및 수직 ECC(들)를 포함하는, 다른 섹터의 디코딩된 결과에 따라 복구하여 그 결과를 버퍼(950)에 저장하고, 그로써 전자 디바이스가 프로세싱-유닛 액세스 인터페이스(250)를 통해 그 정정된 메시지를 읽는 것을 가능하게 한다. 실제로는 도 9의 프로세싱 유닛(910)과 도 6의 프로세싱 유닛(610)이 동일할 수 있으며, 본 발명은 그에 국한되어서는 안 됨을 주목해야 한다.
도 10은, 본 발명의 일 실시예에 따라, 섹터-디코딩 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도이다. 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 어느 하나를 통해 섹터의 값을 획득한 후에(단계(S1010)), 섹터-디코딩 유닛(960)은 그 읽힌 메시지가 올바른지 그 읽힌 수평 ECC를 사용함으로써 검사한다(단계(S1020)). 올바르면(단계(S1020)의 "예" 경로), 그때 섹터-디코딩 유닛(960)은 원래 메시지를 버퍼(950) 내에 저장하고(단계(S1070)); 그러하지 않으면(단계(S1020)의 "아니오" 경로), 그 읽힌 수평 ECC로 전형적 에러 정정 알고리즘을 사용함으로써 그 읽힌 메시지에 나타난 에러 비트(들)를 바로잡으려 시도한다(단계(S1030)). 그때, 섹터-디코딩 유닛(960)은 정정이 성공적인지 결정한다(단계(S1040)). 성공적이면(단계(S1040)의 "예" 경로), 섹터-디코딩 유닛(960)은 정정된 메시지를 버퍼(950) 내에 저장하고(단계(S1070)); 그러하지 않으면(단계(S1040)의 "아니오" 경로), 그것은 이 섹터에 나타난 에러가 그 읽힌 수평 ECC로 에러 정정 알고리즘에 의해 바로잡힐 수 없음을 프로세싱 유닛(910)에 알려주는 메시지를 보낸다(단계(S1050)).
도 11은, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도이다. 섹터의 메시지 내 나타난 에러가 그 섹터의 대응하는 수평 ECC로 에러 정정 알고리즘에 의해 바로잡힐 수 없음을 나타내는 통지를 수신한 후에(단계(S1110)), 프로세싱 유닛(910)은 동일 RAID 그룹 내 다른 섹터의 어드레스를 결정한다(단계(S1120)). 예컨대, 도 5b를 참조하라. 수평 ECC(530[0][0][0])로 전형적 에러 정정 알고리즘이 사용되더라도 복구가능하지 않은 에러를 섹터(410[0][0][0])의 메시지(510[0][0][0])가 갖고 있다고 가정하라: 메시지(510[0][0][0]) 내 나타난 에러 비트(들)를 바로잡도록 동일 RAID 그룹 내 다른 섹터, 섹터(410[0][1][0] 내지 410[j][i][0])가 에러 정정 알고리즘에 의해 채용될 수 있다. 프로세싱 유닛(910)은 수직 정정 프로시저가 활성화되었음을 섹터-디코딩 유닛(960) 및 RAID-디코딩 유닛(930)에 알려준다(단계(S1130)). 정보를 수신한 후에, 섹터-디코딩 유닛(960)은 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나를 통해 수신된 값을 읽고 디코딩하고, 그리고 디코딩된 결과의 출력을 버퍼(950)보다는 RAID-디코딩 유닛(930)으로 바꿀 것이다. 다음으로, 프로세싱 유닛(910)은 결정된 섹터를 읽으라고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j])에 지시하기 위한 루프를 반복적으로 수행한다. 루프에서, 프로세싱 유닛(910)은 다음 섹터의 값을 읽으라고 연관된 저장-유닛 액세스 인터페이스에 지시한다(단계(S1140)). 지시받은 저장-유닛 액세스 인터페이스는 읽혀-나온 값을 섹터-디코딩 유닛(960)에 송신한다. 섹터-디코딩 유닛(960)은 그로부터의 메시지를 디코딩하고 그 디코딩된 메시지를 RAID-디코딩 유닛(930)에 송신하고, 그 후, RAID-디코딩 유닛(930)은 현재 저장된 결과 및 새롭게 수신된 메시지에 따라 새로운 메시지를 발생시키는데, 이 경우 현재 저장된 결과는 이전에 수신된 메시지의 집합으로부터 유도된다. 지시받은 저장-유닛 액세스 인터페이스로부터 데이터 읽기가 완료되었음을 나타내는 통지를 수신한 후에(단계(S1150)), 프로세싱 유닛(910)은 동일 RAID 그룹 내 모든 다른 섹터의 값이 완전히 읽혔는지 결정한다(단계(S1160)). 그러하면(단계(S1160)의 "예" 경로), 그때는 루프가 종료되고; 그러하지 않으면(단계(S1160)의 "아니오" 경로), 프로세싱 유닛(910)은 다음 섹터의 값을 읽으라고 연관된 저장-유닛 액세스 인터페이스에 지시한다(단계(S1140)). 루프가 종료된 후에, 프로세싱 유닛(910)은 수직 정정 프로시저가 종료되었음을 섹터-디코딩 유닛(960) 및 RAID-디코딩 유닛(930)에 알려준다(단계(S1170)). 정보를 수신한 후에, 섹터-디코딩 유닛(960)은 그 디코딩된 결과의 출력을 RAID-디코딩 유닛(930)보다는 다시 버퍼로 바꿀 것이다. 다른 한편, 정보를 수신한 후에, RAID-디코딩 유닛(930)은 복구 결과대로 버퍼(950)에 최신 메시지를 저장한다.
도 12는 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 시스템 블록 선도이다. 프로세싱 유닛(1210)은, 이후 나열되는 기능을 수행하도록 마이크로코드 또는 소프트웨어 명령어를 사용하여 프로그래밍되는 범용 하드웨어(예컨대, 단일 프로세서, 병렬 계산을 할 수 있는 그래픽 프로세싱 유닛 또는 다중 프로세서, 또는 그 밖의 것들)로, 또는 전용 하드웨어로 등 수많은 방법으로 구현될 수 있다. 저장 유닛(10[0][0] 내지 10[j][i]) 중 어느 하나는 다수의 메모리 셀을 포함할 수 있고, 그 각각은 TLC로 실시된다. 프로세싱 유닛(1210)은 데이터를 하나의 워드라인씩 프로그래밍할 수 있고, 이 경우 각각의 워드라인은 수개 페이지의 값을 저장할 수 있다. 워드라인당 3개의 페이지가 포함되어 있는 것과 같이 이하의 절에서는 특정 특징을 갖는 실시예가 설명될 것이기는 하지만, 이들은 단지 예시적 특징이며 본 발명은 워드라인당 더 많거나 더 적은 페이지를 갖는 시스템에 동등하게 적용가능함을 주목해야 한다. 단일 페이지는 8K, 16K, 32K 또는 64K 바이트의 메시지를 저장할 수 있다. 워드라인의 각각의 TLC는 저장된 전하를 누설하거나 인근 워드라인(들)의 프로그래밍으로부터 초래되는 부가적 전하를 흡수하고 그리하여 그 임계 전압을 바꾸므로, 필요로 되는 것은 저장된 값을 예상대로 유지하도록 각각의 TLC를 여러 라운드 프로그래밍하기 위한 연산이다. 다음과 같이 설명될 프로그래밍 방법은 F&F(Foggy and Fine) 방식이라고 지칭될 수 있다. 도 17a 내지 도 17c는 본 발명의 일 실시예에 따라 3 라운드의 프로그래밍을 거친 워드라인 상의 TLC의 임계 전압 분포의 변화량을 예시한 도식적 선도이다. 제1 라운드의 프로그래밍 후에, 임계 전압 분포는 도 17a에서 실선으로 도시되어 있다. 처음에 거칠게 프로그래밍한 후에, 임계 전압 분포는 예상대로 8개의 구별 상태를 반영하지 않음을 도 17a로부터 관찰할 수 있다. 인근 워드라인의 후속 프로그래밍은 워드라인 상의 TLC의 이전에 저장된 전하에 영향을 미쳐, 도 17a의 파선으로 도시된 바와 같이, 임계 전압 분포를 더 나쁘게 만든다. 그 후, 저장된 전하를 수정하여 이상적 임계 전압을 달성하도록 동일 워드라인 상의 TLC에 제2 라운드의 프로그래밍이 수행된다. 그러한 후에, 임계 전압 분포는 도 17b의 실선으로 도시되어 있는데, 8개의 구별 상태를 반영한다. 그렇지만, 인근 워드라인의 후속 프로그래밍 후에, 임계 전압 분포의 인접 상태는 도 17b의 파선으로 도시된 바와 같이 오버랩에 의해 영향을 받을 수 있다. 그 후, 이상적 분포를 달성하기 위해, 임계 전압 분포의 어느 2개의 상태 간 더 넓은 간격을 산출하도록 동일 워드라인 상의 TLC에 제3 라운드의 프로그래밍이 수행된다. 3 라운드의 프로그래밍 후 결과적 임계 전압 분포는 도 17c를 참조할 수 있다. 도 12를 다시 참조하라. 전술한 한계를 극복하기 위해, 버퍼(1250)는 3개 페이지의 값을 저장하도록 구성되는 한편 DRAM(1240)은 프로세싱-유닛 액세스 인터페이스(250)를 통해 전자 디바이스로부터 수신된 9개 페이지의 값을 일시적으로 저장하도록 구성된다. 프로세싱 유닛(1210)은 프로세싱-유닛 액세스 인터페이스(250)로부터의 값을 DRAM(1240)의 지정된 어드레스 내에 저장하라고 DMA 컨트롤러(1220)에 지시할 수 있고, 이 경우 가장 최근 수신된 페이지의 값은 가장 일찍 수신된 값을 덮어쓸 수 있다. 덮어쓰인 페이지의 값은 다음과 같이 설명될 3 라운드의 프로그래밍 후에 지정된 메모리 셀에 정상 저장되었음을 이해해야 한다. DRAM(1240)은 적어도 컴포넌트(230[0..j], 250, 1210, 1230, 1250)를 포함하는 SOC(System On Chip) 내에 집적되거나 또는 독립적 칩으로 구현될 수 있다. 프로세싱 유닛(1210)은, DRAM(1240)으로부터 3개 페이지의 값을 읽고 그 읽힌 값을 버퍼(1250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고, 그리고 지정된 저장 유닛의 지정된 워드라인의 지정된 TLC 내에 버퍼(1250)의 값을 프로그래밍하라고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나와 같이 연관된 저장-유닛 액세스 인터페이스에 지시할 수 있다. 도 13은 본 발명의 일 실시예에 따른 저장 유닛의 TLC 블록을 도시한 도식적 선도이다. TLC 블록(1300)은 PG0 내지 PG191의 라벨이 붙은 총 192개의 페이지의 값을 저장할 수 있다. 각각의 워드라인은 3개 페이지의 값을 저장할 수 있고 워드라인은 WL0 내지 WL63의 라벨이 붙여져 있다. 도 16c를 참조하라. 각각의 워드라인 상의 TLC의 모든 LSB는 일괄하여 1개 페이지의 값을 형성하는 한편 각각의 워드라인 상의 TLC의 모든 CSB 및 MSB는 각자 다른 2개의 페이지의 값을 일괄하여 형성한다. 저장 유닛의 프로그래밍된 값을 안정시키기 위해, 프로세싱 유닛(1210)은 DRAM(1240)에 저장되어 있는 가장 최근 수신된 3개 페이지의 값을 TLC 블록(1300) 내에 프로그래밍할 뿐만 아니라, 또한 저장 유닛 내에 프로그래밍된 DRAM(1240)으로부터의 이전 6개 페이지의 값을 2개의 배취로 읽고 그 읽힌 페이지를 지정된 저장-유닛 액세스 인터페이스를 통해 또다시 지정된 워드라인 상의 TLC 내에 프로그래밍도 한다. 예컨대, 워드라인(WL2) 상의 TLC 내에 페이지 값(PG6 내지 PG8)을 프로그래밍한 후에, 프로세싱 유닛(1210)은, DRAM(1240)으로부터 페이지 값(PG0 내지 PG2)을 읽고 그 읽힌 데이터를 버퍼(250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고 그리고 버퍼(250)의 값을 워드라인(WL0) 상의 TLC 내에 프로그래밍하라고 지정된 저장-유닛 액세스 인터페이스에 지시하고, 그 후, DRAM(1240)으로부터 페이지 값(PG3 내지 PG5)을 읽고 그 읽힌 데이터를 버퍼(250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고 그리고 버퍼(250)의 값을 워드라인(WL1) 상의 TLC 내에 프로그래밍하라고 지정된 저장-유닛 액세스 인터페이스에 지시한다. 도 21은 본 발명의 일 실시예에 따른 저장 유닛의 워드라인에 대한 프로그래밍 시퀀스를 묘사한 도식적 선도이다. 프로그래밍 시퀀스는 룩업 테이블(2100)에 레코딩될 수 있고, 그래서, 프로세싱 유닛(1210)은 그에 따라 각각의 배취에서 어느 워드라인 및 페이지가 프로그래밍될지 결정한다. 룩업 테이블(2100)에는 워드라인(WL0 내지 WL63)의 각각에 대해 제1, 제2 및 제3 라운드의 프로그래밍에 대한 순차 번호를 각자 레코딩하는 3개의 필드가 들어있다. TLC에 저장된 값이 명시된 라운드의 프로그래밍 때까지 안정적이지 않기 때문에, 프로세싱 유닛(1210)은 프로세싱-유닛 액세스 인터페이스(250)를 통해 전자 디바이스로부터 데이터 읽기 커맨드를 수신한 후에 요청된 값이 안정적으로 TLC 내에 프로그래밍되었는지 우선 결정한다. 그러하면, 프로세싱 유닛(1210)은 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나와 같이 연관된 저장-유닛 액세스 인터페이스를 통해 지정된 저장 유닛의 지정된 어드레스로부터 값을 읽고, 그 읽힌 값으로 전자 디바이스에 회답하고; 그러하지 않으면, 그것은 DRAM(1240)으로부터 지정된 저장 유닛의 지정된 어드레스 내에 프로그래밍될 값을 읽고 전자 디바이스에 회답한다. DRAM(1240) 또는 레지스터(도시하지 않음)는 DRAM(1240)에 일시적으로 저장되는 값이 어느 저장 유닛의 어느 어드레스 내에 프로그래밍될 것이라는 사실에 관한 정보를 저장할 수 있고, 프로세싱 유닛(1210)은 저장된 정보를 고려하여 요청된 값이 TLC 내에 안정적으로 프로그래밍되었는지 결정할 수 있음을 주목해야 한다. 구체적으로, 요청된 값의 어드레스가 DRAM(1240) 또는 레지스터(도시하지 않음)에 저장된 정보에 따라 DRAM(1240)의 값에 대해 프로그래밍될 어드레스 내에 들어가면, 그때 프로세싱 유닛(1210)은 요청된 값이 TLC 내에 안정적으로 프로그래밍되지 않았다고 결정한다.
도 14는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 방법을 예시한 순서도이다. 프로세싱-유닛 액세스 인터페이스(250)를 통해 전자 디바이스로부터 데이터 쓰기 커맨드 및 데이터 쓰기 어드레스를 수신한 후에(단계(S1410)), 프로세싱 유닛(1210)은 프로세싱-유닛 액세스 인터페이스(250)로부터 획득되는 프로그래밍될 값을 DRAM(1240) 내에 저장하라고 DMA 컨트롤러(1220)에 지시한다(단계(S1420)). 명시된 수의 페이지 값, 예컨대, n번째 페이지 내지 (n+2)번째 페이지의 값이 완전히 수신되었는지 결정된다(단계(S1430)). 그러하면, 프로세싱 유닛(1210)은 물리적 데이터 프로그래밍을 수행하고(단계(S1440 내지 S1470)); 그러하지 않으면, 그것은 프로세싱-유닛 액세스 인터페이스(250)로부터 남아있는 페이지 값을 계속 수신한다(단계(S1410 내지 S1420)). 물리적 데이터 프로그래밍에 있어서, 프로세싱 유닛(1210)은 DRAM(1240)의 가장 최근 3개 페이지의 값을 버퍼(1250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고(단계(S1440)), 그리고 지정된 저장 유닛의 지정된 워드라인의 TLC 내에 버퍼(1250)의 값을 프로그래밍하라고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나와 같이 연관된 저장-유닛 액세스 인터페이스에 지시한다(단계(S1450)). 인근 워드라인에 대한 데이터 프로그래밍에 의해 영향을 받는 것으로부터 저장 유닛의 프로그래밍된 값을 안정시키기 위해, 프로세싱 유닛(1210)은 최근에 프로그래밍된 DRAM(1240)의 이전 6개 페이지의 값을 또다시 2개의 배취로 버퍼(1250) 내에 저장하라고 DMA 컨트롤러(1230)에 더 지시하고, 각각의 배취 동안, 또다시 지정된 워드라인 상의 TLC 내에 버퍼(1250)의 값을 프로그래밍하라고 저장-유닛 액세스 인터페이스(230[0] 내지 230[j]) 중 하나와 같이 연관된 저장-유닛 액세스 인터페이스에 지시한다. 구체적으로, 프로세싱 유닛(1210)은, (n-3)번째 내지 (n-1)번째 페이지와 같이, DRAM(1240)으로부터 획득되는, 단계(S1450)에서 프로그래밍되는 것 이전 마지막 3번째 내지 마지막 페이지의 값을 버퍼(1250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고, 또다시 지정된 저장 유닛의 지정된 워드라인 상의 TLC 내에 버퍼(1250)의 값을 프로그래밍하라고 연관된 저장-유닛 액세스 인터페이스에 지시한다(단계(S1460)). 그 다음에, 프로세싱 유닛(1210)은 (n-6)번째 내지 (n-4)번째 페이지와 같이, DRAM(1240)으로부터 획득되는, 단계(S1450)에서 프로그래밍되는 것 이전 마지막 6번째 내지 마지막 4번째 페이지의 값을 버퍼(1250) 내에 저장하라고 DMA 컨트롤러(1230)에 지시하고, 또다시 지정된 저장 유닛의 지정된 워드라인 상의 TLC 내에 버퍼(1250)의 값을 프로그래밍하라고 연관된 저장-유닛 액세스 인터페이스에 지시한다(단계(S1470)).
도 15는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 읽기 위한 방법을 예시한 순서도이다. 프로세싱-유닛 액세스 인터페이스(250)를 통해 전자 디바이스로부터 데이터 읽기 커맨드 및 데이터 읽기 어드레스를 수신한 후에(단계(S1510)), 프로세싱 유닛(1210)은 요청된 값이 TLC 내에 안정적으로 프로그래밍되지 않았는지 결정한다(단계(S1520)). 그러하면, 프로세싱 유닛(1210)은 DRAM(1240)으로부터 그 요청된 값을 읽으라고 DMA 컨트롤러(1220)에 지시하고 프로세싱-유닛 액세스 인터페이스(250)를 통해 그 읽힌 값으로 그 요청하는 전자 디바이스에 회답하고(단계(S1530)); 그러하지 않으면, 그것은 연관된 저장-유닛 액세스 인터페이스를 통해 지정된 저장 유닛의 데이터 읽기 어드레스로부터 값을 읽고(단계(S1540)), 그리고 프로세싱-유닛 액세스 인터페이스(250)를 통해 그 읽힌 값으로 그 요청하는 전자 디바이스에 회답한다(단계(S1550)).
TLC를 갖는 플래시 메모리는 저장된 데이터(메시지 및 수평 ECC를 포함)를 보안하여 2-차원 ECC 보호를 형성하도록 수직 ECC를 더 저장할 수 있다. 본 발명의 일 실시예는 데이터 프로그래밍의 효율을 개선하도록 메시지 및 ECC에 대한 배치를 도입한다. i=3, j=3이고 각각의 워드라인은 수직 ECC, 또는 수평 ECC를 갖는 3개 페이지의 메시지를 저장한다고 가정하라: 도 18a는 본 발명의 일 실시예에 따라 RAID 그룹 내 RS(48, 45)의 수직 ECC와의 데이터 배치의 도식적 선도이다. RAID 그룹은 16개의 저장 유닛(10[0][0] 내지 10[3][3])의 제1 워드라인(WL0) 상에 48개의 페이지를 포함하고 있도록 형성되고, 이 경우 음영으로 도시된 바와 같은 저장 유닛(10[3][3])의 제1 워드라인(WL0)은 3개 페이지의 수직 ECC를 저장한다. 도 18b는 본 발명의 일 실시예에 따라 RAID 그룹 내 RS(96, 93)의 수직 ECC와의 데이터 배치의 도식적 선도이다. RAID 그룹은 16개의 저장 유닛(10[0][0] 내지 10[3][3])의 제1 및 제2 워드라인(WL0, WL1) 상에 96개의 페이지를 포함하고 있도록 형성되고, 이 경우 음영으로 도시된 바와 같은 저장 유닛(10[3][3])의 제2 워드라인(WL1)은 3개 페이지의 수직 ECC를 저장한다. 수평 ECC를 갖는 페이지 값, 및 RAID 그룹 내 연관된 수직 ECC가 서로 다른 물리적 저장 유닛에 흩어져 있기 때문에 저장 유닛(10[0][0] 내지 10[3][3]) 중 하나와 같이 플래시 메모리의 어느 저장 유닛 전체가 고장날 때 그 저장된 값이 복구가능할 수 있다. 그에 더하여, 전술한 배치가 또한 데이터 프로그래밍의 효율을 개선할 수 있다. 도 6을 참조하라. 프로세싱 유닛(610)은 페이지 값을 미리 정의된 시퀀스로 각각의 저장 유닛의 제1 워드라인 내에 프로그래밍하라고 아비터(660)에 지시할 수 있다. 도 19b는 본 발명의 일 실시예에 따라 데이터를 프로그래밍하기 위한 타이밍 선도이다. 저장-유닛 액세스 인터페이스(230[0] 내지 230[3])는 각자 채널(CH0 내지 CH3)로서 표시되고, 각각의 저장-유닛 액세스 인터페이스와 연관된 저장 유닛은 각자 CE0 내지 CE3로서 표시된다. 도 19b는 메시지, 수평 ECC, 및/또는 수직 ECC를 포함하는 3개의 데이터 페이지(PG0, PG1, PG2)를 저장 유닛(10[0][0] 내지 10[3][3])의 제1 워드라인(WL0) 내에 프로그래밍하는 일례를 도시하고 있다. 아비터(660)는 데이터 페이지(PG0, PG1, PG2)의 관련 부분을 각자 채널(CH0 내지 CH3)을 통해 제1 접속된 저장 유닛(CE0)의 버퍼(도시하지 않음)에 송신하고, 그 후, 물리적 데이터 프로그래밍을 시작하도록, 그 접속된 저장 유닛(CE0)에 데이터 쓰기 커맨드를 발행한다. 저장 유닛(CE0)은 데이터 쓰기 커맨드를 수신한 후에 버퍼에 저장된 데이터 페이지(PG0, PG1, PG2)를 워드라인(WL0) 상의 TLC 내에 프로그래밍하는 시간 기간 동안 사용 중 상태에 들어간다. 저장 유닛(CE0)이 물리적 데이터 프로그래밍을 수행할 때, 채널(CH0 내지 CH3)이 이용가능하고 아비터(660)는 데이터 페이지(PG0, PG1, PG2)의 관련 부분을 제2 접속된 저장 유닛(CE1)의 버퍼(도시하지 않음)에 송신하도록 채널(CH0 내지 CH3)을 채용할 수 있다. 당업자는 RAID 그룹에 대해 전술한 데이터 배치가 채널(CH0 내지 CH3) 상에서 스페어 시간 감축의 결과를 초래하고 저장 유닛으로의 송신에 있어서 더 양호한 데이터 스루풋을 내놓음을 관찰할 수 있다.
도 6의 저장 유닛(10[0][0] 내지 10[j][i])은 다수의 TLC를 포함하고 있도록 고안될 수 있다. 도 20a 및 도 20b는, 본 발명의 일 실시예에 따라, 프로세싱 유닛에 의해 수행되는, 데이터를 프로그래밍하기 위한 순서도이다. RAID 그룹에 대한 데이터 프로그래밍 동안, 프로세싱 유닛(610)은 메시지 카운터를 영으로 그리고 ECC 카운터를 영으로 설정하고(단계(S2011)), DRAM(620)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어한다(단계(S2013)). 후속하여, 단계(S2021 내지 S2087)를 포함하는 루프는 RAID 그룹 내 모든 메시지가 지정된 저장 유닛, 예컨대, 도 18a에 도시된 바와 같은 저장 유닛(10[0][0] 내지 10[j][i])의 워드라인(WL0), 또는 도 18b에 도시된 바와 같은 저장 유닛(10[0][0] 내지 10[j][i])의 워드라인(WL0, WL1) 내에 완전히 프로그래밍될 때까지 반복적으로 수행된다.
단계(S2021 내지 S2031)는 모든 저장 유닛의 지정된 워드라인 내에 데이터를 프로그래밍하기 위한 준비 단계이다. 프로세싱 유닛(610)은 현재 데이터 프로그래밍에 어느 저장-유닛 액세스 인터페이스가 사용되는지 레코딩하도록 변수(q)를 그리고 현재 데이터 프로그래밍에 대해 사용된 저장-유닛 액세스 인터페이스와 연관된 어느 저장 유닛이 프로그래밍되어야 하는지 레코딩하도록 변수(p)를 채용한다. 저장 유닛의 프로그래밍되는 값을 안정시키기 위해, 도 14에 도시된 바와 같이 워드라인 상에 값을 프로그래밍하기 위해 설명된 방법은 각각의 워드라인이 적어도 3회 반복적으로 프로그래밍될 수 있음을 보장하도록 채택될 수 있고, 각각의 라운드의 프로그래밍은 인근 워드라인의 것과 인터레이싱된다. 제1 저장 유닛의 제1 워드라인에 대한 데이터 프로그래밍의 시작에서, 프로세싱 유닛(610)은 p=0 그리고 q=0으로 설정한다(단계(S2021)). 그 후 프로세싱 유닛(610)은 어느 워드라인 또는 페이지가 프로그래밍되어야 하는지 결정한다, 예컨대, 워드라인(WL0) 또는 페이지(PG0 내지 PG2)(단계(S2023)). 메시지 카운터는 영으로 유지되거나 MAXixMAXjxn로 설정되고, ECC 카운터는 영으로 설정되며, 이 경우 상수(MAXj)는 저장-유닛 액세스 인터페이스의 총수를 나타내고, 상수(MAXi)는 하나의 저장-유닛 액세스 인터페이스와 연관된 저장 유닛의 총수를 나타내고, 변수(n)는 이 RAID 그룹에 대하여 완료된 워드(들)의 총수를 나타낸다(단계(S2025)). 도 18b에 도시된 바와 같이 수직 RS(96, 93) ECC를 갖는 RAID 그룹에 대한 데이터 배치를 일례로 취하면, 메시지 카운터는, 데이터 프로그래밍이 제1 워드라인(WL0)과 관련되면 영으로 유지되고, 그리고 데이터 프로그래밍이 제2 워드라인(WL1)과 관련되면 4x4x1=16으로 설정된다.
메시지 및 수평 ECC를 지정된 저장 유닛(10[q][p]) 내에 프로그래밍하도록 단계(S2031 내지 S2035)가 수행된다. 프로세싱 유닛(610)은 DRAM(620)의 3개 페이지의 메시지를 멀티플렉서(640)를 통해 버퍼(650) 내에, 그리고 RAID-인코딩 유닛(630)의 버퍼(도시하지 않음) 내에 동시에 저장하라고 DMA 컨트롤러(621)에 지시한다(단계(S2031)). 다음으로, 프로세싱 유닛(610)은, 버퍼(650)의 값을 읽고 저장-유닛 액세스 인터페이스(230[q])에 명령하여 그 읽힌 값을 저장 유닛(10[q][p]) 내에 프로그래밍하라고 아비터(660)에 지시한다(단계(S2033)). 그 후에, 프로세싱 유닛(610)은 메시지 카운터를 3만큼 증분시킨다(단계(S2035)). 각각의 저장 유닛에 대한 프로그래밍 타이밍은 도 19의 설명에서 참조될 수 있다.
어느 저장-유닛 액세스 인터페이스 및 저장 유닛이 다음 데이터 프로그래밍에 사용되어야 하는지 결정하도록 단계(S2041, S2081, S2087)가 수행된다. 메시지 카운터 값이 임계값보다 더 낮다고 결정한 후에(단계(S2041)의 "아니오" 경로), 프로세싱 유닛(610)은 변수(q)를 1만큼 증분시킨다(단계(S2081)). 도 18b에 도시된 바와 같이 수직 RS(96, 93) ECC를 갖는 RAID 그룹에 대한 데이터 배치를 일례로 취하면, 메시지 카운터 값이 임계값(예컨대, 93)보다 더 낮다는 것은 RAID 그룹 내 메시지가 완전히 프로그래밍되지는 않았음을 나타낸다. 그 후, 변수(q)가 상수(MAXj)와 같거나 초과하는지 결정된다(단계(S2083)). 그러하지 않으면, 프로세스는 단계(S2031)로 진행하고; 다른 경우에는, 프로세싱 유닛(610)은 변수(p)를 1만큼 증분시키고 변수(q)를 영으로 설정하고(단계(S2085)) 변수(p)가 상수(MAXi)와 같거나 초과하는지 결정한다(단계(S2087)). 변수(p)가 상수(MAXi)와 같거나 초과할 때(단계(S2087)의 "예" 경로), 그것은 모든 저장 유닛의 지정된 워드라인이 완전히 프로그래밍됨을 나타내고 프로세스는 단계(S2021)로 진행하여 다음 워드라인에 대한 데이터 프로그래밍을 계속한다. 그러하지 않으면(단계(S2087)의 "아니오" 경로), 프로세스는 단계(S2031)로 진행한다.
수직 ECC가 안정적으로 되기 위해 적어도 3회 프로그래밍될 것을 요건으로 하기 때문에, 본 발명의 일 실시예는, 처음에 발생된 수직 ECC를 DRAM(620) 내에 저장하고 그리고, 수직 ECC를 또다시 계산하기보다는, 후속의 리프로그래밍을 위해 DRAM(620)으로부터 그 발생된 수직 ECC를 획득하기 위한 프로시저를 도입한다. 도 18b에 도시된 바와 같이 수직 RS(96, 93) ECC를 갖는 RAID 그룹에 대한 데이터 배치를 일례로 취하면, 수직 ECC를 리프로그래밍하기 위한 또 다른 구현에 있어서, RAID-인코딩 유닛(630)은 저장 유닛(10[3][3])의 워드라인(WL1)을 제외하고 16개 저장 유닛의 워드라인(WL0, WL1)의 값을 리로딩하고, 그에 따라 저장 유닛(10[3][3])의 워드라인(WL1)에서 리프로그래밍될 수직 ECC를 재발생시키지만, 그것은 그렇게 하기 위해 과잉 시간을 소비한다. 수직 ECC를 지정된 저장 유닛(10[q][p])에 프로그래밍하도록 단계(S2051 내지 S2079)가 수행된다. 메시지 카운터 값이 임계값보다 더 높거나 같다고 결정한 후에(단계(S2041)의 "예" 경로), 프로세싱 유닛(610)은 변수(p)를 1만큼 증분시킨다(단계(S2051)). 다음으로, 프로세싱 유닛(610)은 RAID 그룹 내 수직 ECC가 발생되었는지 결정한다(단계(S2053)). 그러하면, 프로세싱 유닛(610)은, DRAM(620)에 일시적으로 저장된 이전에 계산된 결과를 획득하여 그 획득된 결과를 저장 유닛(10[q][p]) 내에 프로그래밍하라고 저장-유닛 액세스 인터페이스(230[q])에 지시하고(단계(S2061 내지 S2068)); 그러하지 않으면, 그것은, RAID-인코딩 유닛(630)에 의한 인코딩 결과를 획득하여 그 획득된 결과를 저장 유닛(10[q][p]) 내에 프로그래밍하라고 저장-유닛 액세스 인터페이스(230[q])에 지시한다(단계(S2071 내지 S2079)).
단계(S2071 내지 S2079)를 포함하는 루프는 RAID-인코딩 유닛(630)에 의해 발생된 수직 ECC가 지정된 저장 유닛 내에 완전히 프로그래밍될 때까지 반복적으로 수행된다. 구체적으로, 프로세싱 유닛(610)은 RAID-인코딩 유닛(630)을 버퍼(650)에 결합시키도록 멀티플렉서(640)를 제어하고(단계(S2071)), 멀티플렉서(640)를 거쳐 버퍼(650)에 3개 페이지의 수직 ECC를 출력하라고 RAID-인코딩 유닛(630)에 지시하고, RAID-인코딩 유닛(630)의 버퍼(도시하지 않음)의 계산된 결과를 DRAM(620) 내에 저장하라고 DMA 컨트롤러(621)에 지시한다(단계(S2073)). 다음으로, 프로세싱 유닛(610)은, 버퍼(650)의 값을 읽고 그 값을 저장 유닛(10[q][p])의 지정된 워드라인 내에 프로그래밍하도록 저장-유닛 액세스 인터페이스(230[q])에 명령하라고 아비터(660)에 지시한다(단계(S2075)). ECC 카운터를 3만큼 증분시킨 후에(단계(S2076)), 프로세싱 유닛(610)은 ECC 카운터 값이 임계값 예컨대 상수(l)보다 더 높거나 같은지 결정한다(단계(S2077)). 그러하면, 프로세스는 단계(S2069)로 진행하고; 그러하지 않으면, 변수(p)가 1만큼 증분된 후에(단계(S2079)), 프로세스는 미완료된 수직 ECC에 대한 프로그래밍을 계속하도록 단계(S2073)로 되돌아간다.
단계(S2061 내지 S2068)를 포함하는 루프는 DRAM(620)에 일시적으로 저장된 모든 수직 ECC가 지정된 저장 유닛 내에 완전히 프로그래밍될 때까지 반복적으로 수행된다. 구체적으로, 프로세싱 유닛(610)은 DRAM(620)에 일시적으로 저장된 3개 페이지의 수직 ECC를 멀티플렉서(640)를 거쳐 버퍼(650) 내에 저장하라고 DMA 컨트롤러(621)에 지시한다(단계(S2061)). 다음으로, 프로세싱 유닛(610)은, 버퍼(650)의 값을 읽고 그 값을 저장 유닛(10[q][p])의 지정된 워드라인 내에 프로그래밍하도록 저장-유닛 액세스 인터페이스(230[q])에 명령하라고 아비터(660)에 지시한다(단계(S2063)). ECC 카운터를 3만큼 증분시킨 후에(단계(S2065)), 프로세싱 유닛(610)은 ECC 카운터 값이 임계값 예컨대 상수(l)보다 더 높거나 같은지 결정한다(단계(S2067)). 그러하면, 프로세스는 단계(S2069)로 진행하고; 그러하지 않으면, 변수(p)가 1만큼 증분된 후에(단계(S2068)), 프로세스는 미완료된 수직 ECC에 대한 프로그래밍을 계속하도록 단계(S2061)로 되돌아간다. 마지막으로, 프로세싱 유닛(610)은 전자 디바이스에 의해 요청된 전체 데이터 프로그래밍이 완료되는지 결정한다(단계(S2069)). 그러하면, 프로세스는 종료되고; 그러하지 않으면, 멀티플렉서(640)는 DRAM(620)을 버퍼(650)에 결합시키도록 제어되고(단계(S2080)), 프로세스는 다음 RAID 그룹에 대한 데이터 프로그래밍을 계속하도록 단계(S2021)로 되돌아간다. 단계(S2033, S2063, S2075)의 상세는 도 8의 설명을 참조할 수 있다.
실시예는 도 1 내지 도 3, 도 6, 도 9 및 도 12에서 특정 구성요소를 갖는 것으로 설명되었지만, 본 발명의 취지로부터 벗어남이 없이 더 나은 성능을 달성하도록 부가적 구성요소가 포함될 수 있음을 주목해야 한다. 도 7a 내지 도 7b, 도 8, 도 10 내지 도 11, 도 14 내지 도 15 및 도 20a 내지 도 20d에 설명된 프로세스 흐름은 특정 순서로 일어나는 것으로 보이는 소정 수의 연산을 포함하지만, 이들 프로세스는 (예컨대, 병렬 프로세서 또는 멀티-스레딩 환경(multi-threading environment)을 사용하여) 병렬로 또는 직렬로 실행될 수 있는 더 많거나 더 적은 연산을 포함할 수 있음이 명백한 것이다.
본 발명이 예에 의해 그리고 바람직한 실시예의 관점에서 설명되었지만, 본 발명은 그 개시된 실시예로 한정되는 것은 아님을 이해해야 한다. 반대로, (당업자에게 명백하게 될 바와 같이) 다양한 수정 및 유사한 배열을 망라하려는 의도이다. 따라서, 첨부 청구범위의 범위는 모든 그러한 수정 및 유사한 배열을 아우르도록 가장 넓은 해석에 따라야 한다.

Claims (15)

  1. 프로세싱 유닛에 의해 수행되는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법으로서,
    RAID(Redundant Array of Independent Disk) 그룹 내 모든 메시지가 프로그래밍된 후에, 상기 RAID 그룹 내 수직 ECC(Error Correction Code)가 발생되었는지 결정하는 단계; 및
    상기 RAID 그룹 내 상기 수직 ECC가 발생되었을 때 DRAM(Dynamic Random Access Memory)으로부터 상기 수직 ECC를 획득하여 상기 수직 ECC를 버퍼에 저장하라고 DMA(Direct Memory Access) 컨트롤러에 지시하고, 그로써 상기 수직 ECC가 상기 저장 유닛에 프로그래밍되는 것을 가능하게 하는 단계를 포함하되,
    상기 저장 유닛은 복수의 TLC(Triple-Level Cell)를 포함하고, 상기 수직 ECC는 상기 수직 ECC에 대한 프로그래밍의 제1 실행 동안 발생되는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  2. 삭제
  3. 제1항에 있어서,
    상기 RAID 그룹 내 상기 수직 ECC가 발생되지 않았을 때 상기 수직 ECC를 상기 버퍼에 출력하라고 RAID-인코딩 유닛에 지시하고, 그로써 상기 수직 ECC가 상기 저장 유닛에 프로그래밍되는 것을 가능하게 하는 단계를 더 포함하는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  4. 제3항에 있어서,
    상기 수직 ECC가 상기 RAID-인코딩 유닛으로부터 상기 버퍼에 출력되기 전에, 상기 RAID-인코딩 유닛을 상기 버퍼에 결합시키도록 멀티플렉서를 제어하는 단계; 및
    상기 수직 ECC가 상기 RAID-인코딩 유닛으로부터 상기 버퍼에 출력된 후에, 상기 DRAM을 상기 버퍼에 결합시키도록 상기 멀티플렉서를 제어하는 단계를 더 포함하는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  5. 제3항에 있어서,
    상기 RAID 그룹 내 상기 수직 ECC가 발생되지 않았을 때 상기 RAID-인코딩 유닛으로부터 상기 수직 ECC를 획득하여 상기 수직 ECC를 상기 DRAM에 저장하라고 상기 DMA 컨트롤러에 지시하는 단계를 더 포함하는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  6. 제1항에 있어서, 상기 수직 ECC는 상기 RAID 그룹 내 상기 메시지에 따라 RAID-인코딩 유닛에 의해 발생되는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  7. 프로세싱 유닛에 의해 수행되는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법으로서,
    RAID(Redundant Array of Independent Disk) 그룹 내 모든 메시지가 프로그래밍된 후에, 상기 RAID 그룹 내 수직 ECC(Error Correction Code)가 발생되었는지 결정하는 단계;
    상기 RAID 그룹 내 상기 수직 ECC가 발생되지 않았을 때 상기 수직 ECC를 버퍼에 출력하라고 RAID-인코딩 유닛에 지시하고, 그로써 상기 수직 ECC가 상기 저장 유닛에 프로그래밍되는 것을 가능하게 하는 단계; 및
    상기 RAID 그룹 내 상기 수직 ECC가 발생되지 않았을 때 상기 RAID-인코딩 유닛으로부터 상기 수직 ECC를 획득하여 상기 수직 ECC를 DRAM(Dynamic Random Access Memory)에 저장하라고 DMA(Direct Memory Access) 컨트롤러에 지시하는 단계를 포함하는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  8. 제7항에 있어서,
    상기 수직 ECC가 상기 RAID-인코딩 유닛으로부터 상기 버퍼에 출력되기 전에, 상기 RAID-인코딩 유닛을 상기 버퍼에 결합시키도록 멀티플렉서를 제어하는 단계; 및
    상기 수직 ECC가 상기 RAID-인코딩 유닛으로부터 상기 버퍼에 출력된 후에, 상기 DRAM을 상기 버퍼에 결합시키도록 상기 멀티플렉서를 제어하는 단계를 더 포함하는, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  9. 제7항에 있어서, 상기 저장 유닛은 복수의 TLC(Triple-Level Cell)를 포함하되, 각각의 TLC는 3개의 정보 비트를 저장하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 방법.
  10. 플래시 메모리의 저장 유닛에 액세스하기 위한 장치로서,
    DMA(Direct Memory Access) 컨트롤러;
    버퍼; 및
    상기 DMA 컨트롤러에 결합된 프로세싱 유닛으로서, RAID(Redundant Array of Independent Disk) 그룹 내 모든 메시지가 프로그래밍된 후에, 상기 RAID 그룹 내 수직 ECC(Error Correction Code)가 발생되었는지 결정하고, 그리고, 상기 RAID 그룹 내 상기 수직 ECC가 발생되었을 때 DRAM(Dynamic Random Access Memory)으로부터 상기 수직 ECC를 획득하여 상기 수직 ECC를 상기 버퍼에 저장하라고 상기 DMA 컨트롤러에 지시하고, 그로써 상기 수직 ECC가 상기 저장 유닛에 프로그래밍되는 것을 가능하게 하는, 상기 프로세싱 유닛을 포함하되,
    상기 저장 유닛은 복수의 TLC(Triple-Level Cell)를 포함하고, 상기 수직 ECC는 상기 수직 ECC에 대한 프로그래밍의 제1 실행 동안 발생되는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  11. 삭제
  12. 제10항에 있어서,
    RAID-인코딩 유닛을 더 포함하되,
    상기 프로세싱 유닛은 상기 RAID 그룹 내 상기 수직 ECC가 발생되지 않았을 때 상기 수직 ECC를 상기 버퍼에 출력하라고 상기 RAID-인코딩 유닛에 지시하고, 그로써 상기 수직 ECC가 상기 저장 유닛에 프로그래밍되는 것을 가능하게 하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  13. 제12항에 있어서,
    멀티플렉서를 더 포함하되,
    상기 프로세싱 유닛은, 상기 수직 ECC가 상기 RAID-인코딩 유닛으로부터 상기 버퍼에 출력되기 전에, 상기 RAID-인코딩 유닛을 상기 버퍼에 결합시키도록 상기 멀티플렉서를 제어하고, 그리고 상기 수직 ECC가 상기 RAID-인코딩 유닛으로부터 상기 버퍼에 출력된 후에, 상기 DRAM을 상기 버퍼에 결합시키도록 상기 멀티플렉서를 제어하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  14. 제10항에 있어서, 상기 프로세싱 유닛은, 상기 RAID 그룹 내 상기 수직 ECC가 발생되지 않았을 때 RAID-인코딩 유닛으로부터 상기 수직 ECC를 획득하여 상기 수직 ECC를 상기 DRAM에 저장하라고 상기 DMA 컨트롤러에 지시하는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
  15. 제10항에 있어서, 상기 수직 ECC는 상기 RAID 그룹 내 상기 메시지에 따라 RAID-인코딩 유닛에 의해 발생되는 것인, 플래시 메모리의 저장 유닛에 액세스하기 위한 장치.
KR1020140109941A 2013-08-23 2014-08-22 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치 KR101677533B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201361869561P 2013-08-23 2013-08-23
US61/869,561 2013-08-23
TW102148610 2013-12-27
TW102148610A TWI530958B (zh) 2013-08-23 2013-12-27 存取快閃記憶體中儲存單元的方法以及使用該方法的裝置

Publications (2)

Publication Number Publication Date
KR20150022723A KR20150022723A (ko) 2015-03-04
KR101677533B1 true KR101677533B1 (ko) 2016-11-18

Family

ID=52481520

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140109941A KR101677533B1 (ko) 2013-08-23 2014-08-22 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치

Country Status (3)

Country Link
US (1) US9411686B2 (ko)
KR (1) KR101677533B1 (ko)
CN (2) CN104425019B (ko)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9965345B2 (en) * 2014-09-24 2018-05-08 Macronix International Co., Ltd. Health management of non-volatile memory
CN106297881B (zh) * 2015-05-27 2020-09-11 旺宏电子股份有限公司 非挥发性存储器的健康管理
TWI575530B (zh) * 2015-08-06 2017-03-21 慧榮科技股份有限公司 存取快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置
TWI575531B (zh) 2015-08-10 2017-03-21 慧榮科技股份有限公司 存取快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置
US9569306B1 (en) * 2015-12-18 2017-02-14 International Business Machines Corporation Recovery of multi-page failures in non-volatile memory system
CN107391296B (zh) 2016-04-27 2020-11-06 慧荣科技股份有限公司 存取闪存模块的方法及相关的闪存控制器与记忆装置
TWI614759B (zh) * 2016-04-27 2018-02-11 慧榮科技股份有限公司 存取快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置
US9910772B2 (en) 2016-04-27 2018-03-06 Silicon Motion Inc. Flash memory apparatus and storage management method for flash memory
US10019314B2 (en) 2016-04-27 2018-07-10 Silicon Motion Inc. Flash memory apparatus and storage management method for flash memory
CN111679787B (zh) 2016-04-27 2023-07-18 慧荣科技股份有限公司 闪存装置、闪存控制器及闪存存储管理方法
US10289487B2 (en) 2016-04-27 2019-05-14 Silicon Motion Inc. Method for accessing flash memory module and associated flash memory controller and memory device
US10110255B2 (en) 2016-04-27 2018-10-23 Silicon Motion Inc. Method for accessing flash memory module and associated flash memory controller and memory device
TWI618070B (zh) * 2016-04-27 2018-03-11 慧榮科技股份有限公司 快閃記憶體裝置及快閃記憶體儲存管理方法
CN107391026B (zh) 2016-04-27 2020-06-02 慧荣科技股份有限公司 闪存装置及闪存存储管理方法
US10025662B2 (en) 2016-04-27 2018-07-17 Silicon Motion Inc. Flash memory apparatus and storage management method for flash memory
CN107797756B (zh) * 2016-09-05 2021-01-12 上海宝存信息科技有限公司 固态硬盘系统的优先写入方法以及使用该方法的装置
WO2018198363A1 (ja) * 2017-04-28 2018-11-01 富士通株式会社 基地局装置、端末装置、無線通信システム、および通信方法
CN109213625B (zh) * 2017-06-30 2022-02-11 慧荣科技股份有限公司 降低快闪储存介面中传收数据错误方法及装置
US20190317889A1 (en) * 2018-04-15 2019-10-17 Synology Inc. Apparatuses and methods and computer program products for a redundant array of independent disk (raid) reconstruction
EP4050608B1 (en) 2021-01-14 2023-06-28 Changxin Memory Technologies, Inc. Comparator with xor and xnor logic circuits
WO2022151724A1 (zh) * 2021-01-14 2022-07-21 长鑫存储技术有限公司 纠错系统
CN114765056A (zh) 2021-01-14 2022-07-19 长鑫存储技术有限公司 存储系统
JP7343709B2 (ja) 2021-01-14 2023-09-12 チャンシン メモリー テクノロジーズ インコーポレイテッド 誤り訂正システム
US11599417B2 (en) 2021-01-14 2023-03-07 Changxin Memory Technologies, Inc. Error correction system

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000215073A (ja) 1999-01-26 2000-08-04 Nec Corp 電子ディスク装置およびその垂直パリティ格納方法

Family Cites Families (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3264465B2 (ja) * 1993-06-30 2002-03-11 株式会社日立製作所 記憶システム
DE69618509T2 (de) * 1995-07-14 2002-08-29 Sony Corp Übertragung, Aufzeichnung und Wiedergabe von Daten
JP3430193B2 (ja) 1997-01-20 2003-07-28 株式会社日立製作所 ディジタル信号再生装置及びディジタル信号再生方法
US5991911A (en) 1997-11-14 1999-11-23 Cirrus Logic, Inc. Concurrent generation of ECC error syndromes and CRC validation syndromes in a DVD storage device
US8266367B2 (en) 2003-12-02 2012-09-11 Super Talent Electronics, Inc. Multi-level striping and truncation channel-equalization for flash-memory system
US6622222B2 (en) 2001-04-26 2003-09-16 International Business Machines Corporation Sequencing data on a shared data bus via a memory buffer to prevent data overlap during multiple memory read operations
JP4049297B2 (ja) * 2001-06-11 2008-02-20 株式会社ルネサステクノロジ 半導体記憶装置
KR100856399B1 (ko) 2002-01-23 2008-09-04 삼성전자주식회사 디코딩 방법 및 그 장치
DE10216999A1 (de) 2002-04-16 2003-11-06 Thomson Brandt Gmbh ECC-Block-Enkodierer und -Dekodierer mit reduziertem RAM-Speicherbedarf
US7136986B2 (en) 2002-11-29 2006-11-14 Ramos Technology Co., Ltd. Apparatus and method for controlling flash memories
KR20030000017A (ko) 2002-11-29 2003-01-03 (주) 라모스테크놀러지 플래시 메모리 제어 장치 및 플래시 메모리 제어 방법
US7020757B2 (en) * 2003-03-27 2006-03-28 Hewlett-Packard Development Company, L.P. Providing an arrangement of memory devices to enable high-speed data access
CN100508066C (zh) * 2003-12-30 2009-07-01 瑞昱半导体股份有限公司 对存储装置进行读取相位校正的方法与装置
KR100606812B1 (ko) 2004-03-08 2006-08-01 엘지전자 주식회사 비디오 디코딩 시스템
US7212436B2 (en) 2005-02-28 2007-05-01 Micron Technology, Inc. Multiple level programming in a non-volatile memory device
US7451380B2 (en) * 2005-03-03 2008-11-11 International Business Machines Corporation Method for implementing enhanced vertical ECC storage in a dynamic random access memory
US20060256615A1 (en) 2005-05-10 2006-11-16 Larson Thane M Horizontal and vertical error correction coding (ECC) system and method
US7617368B2 (en) 2006-06-14 2009-11-10 Nvidia Corporation Memory interface with independent arbitration of precharge, activate, and read/write
US8046629B1 (en) 2006-07-24 2011-10-25 Marvell World Trade Ltd. File server for redundant array of independent disks (RAID) system
US7904783B2 (en) 2006-09-28 2011-03-08 Sandisk Corporation Soft-input soft-output decoder for nonvolatile memory
US9495241B2 (en) * 2006-12-06 2016-11-15 Longitude Enterprise Flash S.A.R.L. Systems and methods for adaptive data storage
US9116823B2 (en) 2006-12-06 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for adaptive error-correction coding
JP2008287404A (ja) * 2007-05-16 2008-11-27 Hitachi Ltd 読み出しによる非アクセスメモリセルのデータ破壊を検出及び回復する装置、及びその方法
JP5045242B2 (ja) 2007-05-30 2012-10-10 富士通セミコンダクター株式会社 半導体メモリ、半導体メモリの動作方法およびシステム
US8041990B2 (en) 2007-06-28 2011-10-18 International Business Machines Corporation System and method for error correction and detection in a memory system
JP2009087485A (ja) * 2007-10-01 2009-04-23 Elpida Memory Inc 半導体装置
TW200921384A (en) 2007-11-15 2009-05-16 Genesys Logic Inc NOR interface flash memory device and access method thereof
KR100933859B1 (ko) * 2007-11-29 2009-12-24 주식회사 하이닉스반도체 플래시 메모리 소자 및 그것의 프로그램 방법
JP2009187139A (ja) 2008-02-04 2009-08-20 Hitachi Ltd ストレージシステム
US8195978B2 (en) * 2008-05-16 2012-06-05 Fusion-IO. Inc. Apparatus, system, and method for detecting and replacing failed data storage
CN101286947B (zh) 2008-05-30 2010-12-01 杭州华三通信技术有限公司 数据输出控制方法和装置
US20100082854A1 (en) 2008-09-27 2010-04-01 Lars Rossen Real-Time/Batch Interface Arbiter
CN101783164A (zh) * 2009-01-16 2010-07-21 慧帝科技(深圳)有限公司 用来存取一快闪存储器之方法以及相关之记忆装置
CN101930799B (zh) * 2009-06-23 2013-05-29 北京兆易创新科技股份有限公司 具有检错/纠错电路的非挥发存储器及其读写数据的方法
US8839255B2 (en) 2009-07-23 2014-09-16 Empire Technology Development Llc Scheduling of threads by batch scheduling
US8176284B2 (en) * 2009-08-11 2012-05-08 Texas Memory Systems, Inc. FLASH-based memory system with variable length page stripes including data protection information
US9092340B2 (en) 2009-12-18 2015-07-28 Sandisk Technologies Inc. Method and system for achieving die parallelism through block interleaving
US8208337B2 (en) 2009-12-21 2012-06-26 Macronix International Co., Ltd. Operation method and leakage controller for a memory and a memory applying the same
US9201604B2 (en) * 2010-04-20 2015-12-01 Taejin Info Tech Co., Ltd. Raid controller for a semiconductor storage device
US8503233B2 (en) * 2010-07-07 2013-08-06 Skymedi Corporation Method of twice programming a non-volatile flash memory with a sequence
US9063836B2 (en) * 2010-07-26 2015-06-23 Intel Corporation Methods and apparatus to protect segments of memory
US8644104B2 (en) 2011-01-14 2014-02-04 Rambus Inc. Memory system components that support error detection and correction
KR20120110672A (ko) 2011-03-30 2012-10-10 주식회사 히타치엘지 데이터 스토리지 코리아 낸드 플래시 메모리의 관리 데이터 기록 장치 및 방법
TWI459389B (zh) 2011-06-09 2014-11-01 Winbond Electronics Corp 半導體記憶體裝置、記憶體裝置讀取程式以及方法
KR101785007B1 (ko) * 2011-06-14 2017-11-07 삼성전자주식회사 멀티-비트 메모리 장치를 포함한 데이터 저장 시스템 및 그것의 온-칩 버퍼 프로그램 방법
KR20130010343A (ko) 2011-07-18 2013-01-28 삼성전자주식회사 플래시 메모리 장치
US8856616B1 (en) 2011-07-29 2014-10-07 Proton Digital Systems, Inc. Two dimensional encoding for non-volatile memory blocks
JP5524279B2 (ja) 2011-09-13 2014-06-18 株式会社東芝 情報処理装置および情報処理方法
JP2013089082A (ja) 2011-10-19 2013-05-13 Toshiba Corp メモリコントローラ、半導体記憶システムおよびメモリ制御方法
TWI430092B (zh) 2011-10-27 2014-03-11 Silicon Motion Inc 三階儲存單元的快閃記憶體裝置及其控制方法
US9053809B2 (en) 2011-11-09 2015-06-09 Apple Inc. Data protection from write failures in nonvolatile memory
JP5768022B2 (ja) 2012-03-19 2015-08-26 株式会社東芝 メモリコントローラ、記憶装置、誤り訂正装置および誤り訂正方法
JP5597224B2 (ja) 2012-05-11 2014-10-01 株式会社東芝 情報記憶装置およびメモリ異常処理方法
US8996960B1 (en) 2012-06-26 2015-03-31 Inphi Corporation Vertical error correction code for DRAM memory
KR102147359B1 (ko) 2012-06-29 2020-08-24 삼성전자 주식회사 비휘발성 메모리 장치의 관리 방법 및 비휘발성 메모리 장치
WO2014011011A1 (ko) * 2012-07-13 2014-01-16 삼성전자(주) 솔리드 스테이트 드라이브 콘트롤러, 솔리드 스테이트 드라이브, 솔리드 스테이트 드라이브의 데이터 처리 방법, 다채널 솔리드 스테이트 드라이브, 레이드 콘트롤러, 시퀀스 정보를 솔리드 스테이트 드라이브에 제공하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체
US8464095B1 (en) * 2012-11-15 2013-06-11 DSSD, Inc. Method and system for multi-dimensional raid reconstruction and defect avoidance
US9141299B2 (en) 2013-03-14 2015-09-22 Intel Corporation Method for reducing power consumption in solid-state storage device
US9093158B2 (en) 2013-12-06 2015-07-28 Sandisk Technologies Inc. Write scheme for charge trapping memory

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000215073A (ja) 1999-01-26 2000-08-04 Nec Corp 電子ディスク装置およびその垂直パリティ格納方法

Also Published As

Publication number Publication date
CN108447516A (zh) 2018-08-24
KR20150022723A (ko) 2015-03-04
US20150058700A1 (en) 2015-02-26
CN108447516B (zh) 2020-04-24
CN104425019B (zh) 2018-07-06
US9411686B2 (en) 2016-08-09
CN104425019A (zh) 2015-03-18

Similar Documents

Publication Publication Date Title
KR101677533B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치
KR101606389B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치
KR101606392B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치
KR101677534B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치
KR101606192B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치
KR101641905B1 (ko) 플래시 메모리의 저장 유닛에 액세스하기 위한 방법 및 그 방법을 사용하는 장치

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
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190918

Year of fee payment: 4