KR101606718B1 - 플래시 메모리 기반 데이터 저장을 위한 적응적 ecc 기술들 - Google Patents

플래시 메모리 기반 데이터 저장을 위한 적응적 ecc 기술들 Download PDF

Info

Publication number
KR101606718B1
KR101606718B1 KR1020137013372A KR20137013372A KR101606718B1 KR 101606718 B1 KR101606718 B1 KR 101606718B1 KR 1020137013372 A KR1020137013372 A KR 1020137013372A KR 20137013372 A KR20137013372 A KR 20137013372A KR 101606718 B1 KR101606718 B1 KR 101606718B1
Authority
KR
South Korea
Prior art keywords
error correction
flash memory
encoding
code
data storage
Prior art date
Application number
KR1020137013372A
Other languages
English (en)
Other versions
KR20130096753A (ko
Inventor
얀 리
하오 종
라도슬라브 다닐락
얼 티 코헨
Original Assignee
엘에스아이 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 엘에스아이 코포레이션 filed Critical 엘에스아이 코포레이션
Publication of KR20130096753A publication Critical patent/KR20130096753A/ko
Application granted granted Critical
Publication of KR101606718B1 publication Critical patent/KR101606718B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding 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 sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • G06F11/1016Error in accessing a memory location, i.e. addressing error
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5628Programming or writing circuits; Data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/29Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2906Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computer Hardware Design (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Read Only Memory (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

플래시 메모리와 함께 이용하기 위한 적응적 ECC 기술들은 플래시 메모리 수명, 신뢰성, 성능, 및/또는 저장 용량에 있어서 개선을 가능하게 한다. 상기 기술들은 다양한 코드 레이트들 및/또는 다양한 코드 길이들(상이한 에러 정정 능력들을 제공함)을 갖는 ECC 방식들의 세트, 및 (전용 하드웨어 로직 블록을 통한 것과 같은) 에러 통계 수집/추적(error statistic collecting/tracking)을 포함한다. 상기 기술들은 ECC 방식들 중의 하나 이상에 따라 인코딩/디코딩하는 것과, (전용 에러 통계 수집/추적 하드웨어 로직 블록으로부터 입력들을 수신하는 하드웨어 로직 적응적 코덱(codec)을 통한 것과 같이) 에러 통계 수집/추적으로부터의 정보에 적어도 부분적으로 기반으로 하여 ECC 방식들 중의 하나 이상 중에서 인코딩/디코딩을 동적으로 스위칭하는 것을 더 포함한다. 상기 기술들은 시간에 걸쳐 (예를 들어, MLC 페이지 또는 SLC 페이지로서) 다양한 동작 모드들에서 플래시 메모리의 부분(예를 들어, 페이지(page) 또는 블록(block))을 선택적으로 동작시키는 것을 포함한다.

Description

플래시 메모리 기반 데이터 저장을 위한 적응적 ECC 기술들{ADAPTIVE ECC TECHNIQUES FOR FLASH MEMORY BASED DATA STORAGE}
관련 출원들에 대한 상호 참조
본 출원의 우선권 이익 주장은 (만약 있다면, 적절한) 첨부한 출원 데이터 시트, 요청서, 또는 송달서에서 행해진다. 본 출원의 유형에 의해 허용되는 한도까지, 본 출원은 발명이 행해졌을 때에 현재의 출원과 함께 모두 공동으로 소유되는 다음의 출원들을 참조로써 모든 목적들을 위하여 병합한다:
2010년 10월 27일자로 출원되고, 발명자 이름이 Yan Li이고, 명칭이 Adaptive ECC Techniques for Flash Memory Based Data Storage인 미국 특허 가출원(관리 번호 SF-10-03 및 출원번호 61/407,178).
기술분야: 플래시 메모리 저장 기술에 있어서의 발전들은 성능, 효율 및 이용의 유용성에 있어서 개선을 제공하기 위하여 필요하다.
관련 기술: 공개적으로 또는 잘 알려진 것으로서 명시적으로 확인되지 않으면, 문맥, 정의들, 또는 비교 목적들을 포함하는 기술들 및 개념들에 대한 본 명세서에서의 언급은, 이러한 기술들 및 개념들이 이전에 공개적으로 알려져 있거나 종래 기술의 일부인 것이라는 인정으로서 해석되지 않아야 한다. 특허들, 특허 출원들, 및 공개 공보들을 포함하는, (만약 있다면) 본 명세서에서 인용된 모든 참조문헌들은 모든 목적들을 위하여, 구체적으로 병합되는지 여부에 관계없이, 참조로써 그 전체가 본 명세서에 병합된다.
발명은 프로세스(process), 제조 물품, 장치, 시스템, 자료의 합성물, 및 컴퓨터 판독가능 저장 매체(예를 들어, 디스크와 같은 광 및/또는 자기 대용량 저장 디바이스 내의 매체, 또는 플래시 저장장치와 같은 비-휘발성 저장장치를 갖는 집적 회로)와 같은 컴퓨터 판독가능 매체, 또는 프로그램 명령어들이 광 또는 전자 통신 링크들을 통해 송신되는 컴퓨터 네트워크를 포함하는, 다양한 방법들로 구현될 수 있다. 이 명세서에서, 이 구현들, 또는 발명이 취할 수 있는 임의의 다른 형태는 기술들이라고 지칭될 수 있다. 상세한 설명은 상기 확인된 분야에서의 성능, 효율, 및 이용의 유용성에 있어서 개선을 가능하게 하는 발명의 하나 이상의 실시예들의 해설을 제공한다. 상세한 설명은 상세한 설명의 나머지에 대한 더욱 신속한 이해를 용이하게 하기 위하여 도입부를 포함한다. 도입부는 본 명세서에서 설명된 개념들에 따라 시스템들, 방법들, 제조 물품들, 및 컴퓨터 판독가능 매체의 하나 이상에 대한 예시적인 실시예들을 포함한다. 결론에서 더욱 상세하게 논의된 바와 같이, 발행된 청구항들의 범위 내에서의 모든 가능한 수정들 및 변형들을 망라한다.
도 1은 플래시 메모리 기반 데이터 저장을 위한 적응적 ECC 기술들을 이용한 시스템의 실시예의 선택된 세부사항들을 예시한다.
도 2a는 플래시 메모리 기반 데이터 저장을 위한 적응적 ECC 기술들을 이용한 SSD 제어기를 포함하는 SSD의 실시예의 선택된 세부사항들을 예시한다.
도 2b는 도 2a의 SSD를 포함하는 시스템의 실시예의 선택된 세부사항들을 예시한다.
도 2c는 도 2a의 SSD를 포함하는 시스템의 또 다른 실시예의 선택된 세부사항들을 예시한다.
도면에서의 참조 기호들의 목록
Figure 112013046088431-pct00001
발명의 하나 이상의 실시예들의 상세한 설명은 발명의 선택된 세부사항들을 예시하는 첨부한 도면들과 함께 이하에서 제공된다. 발명은 실시예들과 관련하여 설명된다. 본 명세서에서의 실시예들은 단지 예시적인 것으로 이해되며, 발명은 본 명세서에서의 실시예들 중 임의의 것 또는 모든 것으로 또는 임의의 것 또는 모든 것에 의해 명시적으로 제한되지 않으며, 발명은 다수의 대안들, 변경들, 그리고 균등물들을 망라한다. 설명에 있어서 단조로움을 회피하기 위하여, (제 1(first), 최종(last), 어떤(certain), 다양한(various), 또한(further), 다른(other), 특정(particular), 선택(select), 일부(some), 및 주목할 만한(notable) 등을 포함하지만 이것으로 제한되지 않는) 다양한 워드 라벨들(word labels)이 실시예들의 별개의 세트들에 적용될 수 이다; 본 명세서에서 이용된 바와 같이, 이러한 라벨들은 명시적으로 품질, 또는 임의의 형태의 기호(preference) 또는 편견(prejudice)을 전달하기 위한 것으로 의도되지 않으며, 단지 별개의 세트들 사이를 편리하게 구별하기 위한 것이다. 개시된 프로세스(process)들 중 일부 동작들의 순서는 발명의 범위 내에서 변경가능하다. 다수의 실시예들이 프로세스, 방법, 및/또는 프로그램 명령어 특징들에 있어서의 변형들을 설명하도록 작용할 때마다, 미리 결정된 또는 동적으로 결정된 기준에 따라, 복수의 다수의 실시예들에 각각 대응하는 복수의 동작 모드들 중 하나의 정적 및/또는 동적 선택을 수행하는 다른 실시예들이 고려된다. 다수의 특정한 세부사항들은 발명의 완전한 이해를 제공하기 위하여 다음 설명에서 기술된다. 세부사항들은 예시를 목적으로 제공되며 발명은 일부 또는 전체의 세부사항들 없이도 청구항들에 따라서 실시될 수 있다. 명료함을 위하여, 발명과 관련된 기술 분야들에서 알려진 기술 자료는 발명이 불필요하게 모호해지지 않도록 하기 위해 상세하게 설명되지 않았다.
도입부
본 도입부는 단지 상세한 설명의 보다 빠른 이해를 용이하게 하기 위하여 포함된다; 임의의 도입부의 단락들은 근본적으로 전체 요지의 요약된 견해이며 완전하거나 제한적인 설명인 것으로 의도되지 않기 때문에, 발명은 (만약에 있다면, 명백한 예들을 포함하는) 도입부에서 제시된 개념들로 제한되지 않는다. 예를 들어, 다음의 도입부는 공간과 구조화에 의해 특정 실시예들만으로 제한된 개요 정보를 제공한다. 궁극적으로 청구항들이 유도될 실시예들을 포함하는, 명세서의 나머지 전반에 걸쳐 논의되는 다수의 다른 실시예들이 있다.
두문자어들
본 명세서의 어딘가에서의 다양한 축약된 약어들, 또는 두문자어들은 특정 구성요소들을 나타낸다. 두문자어들의 적어도 일부의 설명은 다음과 같다.
Figure 112013046088431-pct00002
NAND 플래시 메모리는 정보를 저장하기 위하여 플로팅 게이트 트랜지스터(floating gate transistor)들의 어레이(array)를 이용한다. SLC 기술에서, 각각의 비트 셀(예를 들어, 플로팅 게이트 트랜지스터)은 1 비트의 정보를 저장하는 것이 가능하게 된다. MLC 기술에서는, 각각의 비트 셀이 다수 비트들의 정보를 저장하는 것이 가능하게 된다. 제조 기술(예를 들어, CMOS 기술)이 크기를 축소함에 따라, 각각의 플로팅 게이트는 더 적은 전자들을 저장한다. 또한, 저장 용량 및 밀도가 증가함에 따라, 각각의 비트 셀은 더 많은 비트들을 저장한다. 그러므로, 비트 셀들에 저장된 값들은 더 작은 전압 범위들에 의해 표현된다. 감지(sensing)에 있어서의 불확실성들 및/또는 시간에 걸친 저장된 전자들의 양에 있어서의 변화들은 데이터가 부정확하게 저장 또는 판독될 확률을 증가시킨다. 하나 이상의 ECC 기술들의 이용은, 그렇지 않을 경우에 오류가 생기는 데이터의 정확한 검색을 가능하게 한다.
일부 SSD들은 비-휘발성(non-volatile) 저장(예를 들어, 정보가 전력의 인가 없이 유지된다)을 제공하기 위하여 플래시 메모리(flash memory)를 이용한다. 일부 SSD들은 HDD들, CD 드라이브(drive)들, 및 DVD 드바이브들과 같은 자기 및/또는 광 비-휘발성 저장에 의해 이용되는 폼-팩터(form-factor)들, 전기적 인터페이스들, 및/또는 프로토콜들과 호환성이 있다. 다양한 실시예들에서, SSD들은 제로 또는 더 많은 RS 코드들, 제로 또는 더 많은 BCH 코드들, 제로 또는 더 많은 비터비(Viterbi) 또는 다른 트렐리스(trellis) 코드들, 및 제로 또는 더 많은 LDPC 코드들의 다양한 조합들을 이용한다.
원시(raw) BER의 예는, ECC의 이익 없이, 플래시 메모리로부터 판독된 데이터의 BER이다. (기록 에러들, 유지 에러들, 및 판독-방해 에러들과 같은) 몇몇 인자(factor)들은 원시 BER에 기여하고, 원시 BER은 시간에 걸쳐 변경가능하다. 데이터를 플래시 메모리에 저장하는 것은 2개의 부분의 프로세스이고: 먼저, 플래시 메모리의 블록이 소거(erase)되고, 그 다음으로, 블록이 기록된다. 2개의 부분의 프로세스는 PE 사이클(cycle)의 예이다. 다양한 이용 시나리오들 및/또는 실시예들에서, 플래시 메모리의 에러들의 전부 또는 하나 이상의 부분들은 플래시 메모리 내의 특정한 블록이 얼마나 많은 PE 사이클들을 거쳤는지에 대한 함수들이다. 일부의 이용 시나리오들 및/또는 실시예들에서는, 특정한 블록이 PE 사이클(예를 들어, 소거 및 그 다음으로 기록) 됨에 따라, 특정한 블록의 원시 BER이 증가한다.
일부 방법들에서는, 플래시 메모리의 수명 전반에 걸쳐 고정된 ECC가 이용된다. 예를 들어, 플래시 메모리가 동작되는 최초로부터 플래시 메모리가 동작되는 최후까지 계속 단일 ECC 방식이 이용된다. 단일 ECC 방식은 플래시 메모리의 수명 전반에 걸쳐 최악의 가능한 원시 BER을 정정하기 위한 충분한 에러 정정 능력을 가지도록 설계된다(예를 들어, 플래시 메모리의 후기-수명(late-lifetime) 동안에 정정하는 것이 가능하게 된다). 이러한 에러 정정 능력은 플래시 메모리의 초기(early)-수명 및 중기(mid)-수명 동안에 상대적으로 낮은, 원시 BER로부터 발생하는 에러들을 정정하기에 훨씬 더 충분하고, 이에 따라, (에러들을 정정하기 위해 필요한 것보다 더 많은 저장 용량이 ECC에 충당되므로) 유효 저장 용량을 감소시킨다.
다양한 실시예들 및/또는 이용 시나리오들에서, 플래시 메모리와 함께 이용하기 위한 적응적 ECC 기술들은 플래시 메모리 수명, 신뢰성, 성능, 및/또는 저장 용량에 있어서 개선을 가능하게 한다. 상기 기술들은 다양한 코드 유형들, 코드 레이트들, 및/또는 다양한 코드 길이들(상이한 에러 정정 능력들을 제공함)을 갖는 ECC 방식들의 세트, 및 (전용 하드웨어 로직 블록을 통한 것과 같은)에러 통계 수집/추적(error statistic collecting/tracking)을 포함한다. 상기 기술들은 ECC 방식들 중 하나 이상의 방식에 따라 인코딩/디코딩하는 것과, (전용 에러 통계 수집/추적 하드웨어 로직 블록으로부터 입력들을 수신하는 하드웨어 로직 적응적 코덱(codec)을 통한 것과 같이) 에러 통계 수집/추적으로부터의 정보에 적어도 부분적으로 기반으로 하는 ECC 방식들 중 각각의 하나 이상 중에서 플래시 메모리의 전부 또는 임의의 부분들의 인코딩/디코딩을 동적으로 스위칭하는 것을 더 포함한다. 상기 기술들은 시간에 걸쳐 (예를 들어, MLC 페이지 또는 SLC 페이지로서) 다양한 동작 모드들에서 플래시 메모리의 부분(예를 들어, 페이지(page) 또는 블록(block))을 선택적으로 동작시키는 것을 더 포함한다. 예를 들어, 플래시 메모리 수명의 초기 부분 동안에는 더 짧은 길이의 코드가 이용되고, 수명의 더 이후의 부분 동안에는 더 긴 길이의 코드가 이용된다. 또 다른 예를 들면, 플래시 메모리의 페이지의 동작 기간 동안에는, 페이지가 MLC 페이지로서 동작되고, 그 다음으로, 추후의 동작 기간 동안에는, 페이지가 SLC 페이지로서 동작된다. 수명 또는 동작 기간은 예를 들어, 전력이 인가되는 시간, 프로그램/소거 사이클들의 수, 판독 사이클들의 수, 측정된 및/또는 추정된 BER, 프로그램 시간, 소거 시간, 판독 시간, 온도, 및/또는 플래시 메모리의 저장 셀의 임계 전압에 따라 측정가능하다.
예시적인 실시예들
상세한 설명에 대한 도입을 종결하면서, 후속하는 것은 본 명세서에서 설명된 개념들에 따른 다양한 실시예 유형들의 부가적인 설명을 제공하는, "EC들"(Example Combinations : 예시적인 조합들)로서 명시적으로 열거된 적어도 일부를 포함하는 예시적인 실시예들의 집합이고; 이 예들은 상호 배타적, 완전한 또는 제한적인 것으로 의도되지 않으며; 발명은 이러한 예시적인 실시예들에 제한되지 않고 오히려, 발행된 청구항들의 범위 내에서 모든 가능한 수정들 및 변형들을 망라한다.
EC1) 플래시 메모리의 부분에 대한 액세스들의 원시(raw) 비트 에러 레이트(BER : Bit Error Rate)를 동적으로 결정하는 것이 가능하게 된 에러 통계 수집 및 추적 하드웨어 로직 블록; 및
복수의 에러 정정 코드들 중 선택된 에러 정정 코드에 따라 인코딩하는 것이 가능하게 되고, 상기 원시 BER에 적어도 부분적으로 기반으로 하여 상기 선택된 에러 정정 코드를 동적으로 결정하는 것이 더 가능하게 된 적응적 인코더 하드웨어 블록을 포함하는, 시스템.
EC2) EC1에 있어서, 상기 에러 정정 코드들 중 하나에 따라 인코딩하는 것은, 상기 부분에 저장할, 상기 에러 정정 코드들 중 또 다른 하나에 따라 인코딩하는 것보다 작은 에러 정정 비트들의 수를 초래하는, 시스템.
EC3) EC1에 있어서, 상기 에러 정정 코드들 중 하나에 따라 인코딩하는 것은, 상기 부분에 저장할, 상기 에러 정정 코드들 중 또 다른 하나에 따라 인코딩하는 것보다 더 많은, 에러 정정 비트들의 수를 초래하는, 시스템.
EC4) EC1에 있어서, 상대적으로 더 많은 데이터 정보 및 상대적으로 더 적은 에러 정정 정보는, 상기 선택된 에러 정정 코드가 상기 에러 정정 코드들 중 제 2 에러 정정 코드와 비교되는 상기 에러 정정 코드들의 제 1 에러 정정 코드일 때, 상기 적응적 인코더에 의해 출력되는, 시스템.
EC5) EC4에 있어서, 상기 선택된 에러 정정 코드가 상기 제 1 에러 정정 코드일 때의 데이터 정보의 양은, 상기 선택된 에러 정정 코드가 상기 제 2 에러 정정 코드일 때의 데이터 정보의 양보다 큰, 시스템.
EC6) EC4에 있어서, 상기 선택된 에러 정정 코드가 상기 제 2 에러 정정 코드일 때의 데이터 정보의 양은 2의 제곱(power)인, 시스템.
EC7) EC4에 있어서, 상기 선택된 에러 정정 코드가 상기 제 2 에러 정정 코드일 때의 데이터 정보의 양은 2의 제곱이고, 상기 선택된 에러 정정 코드가 제 1 에러 정정 코드일 때의 데이터 정보의 양은 상기 선택된 에러 정정 코드가 상기 제 2 에러 정정 코드일 때의 데이터 정보의 양보다 큰, 시스템.
EC8) EC1에 있어서, 상기 에러 정정 코드들 중 임의의 것에 따라 디코딩하는 것이 가능하게 된 적응적 디코더를 더 포함하는, 시스템.
EC9) EC1에 있어서, 상기 에러 정정 코드들은 리드-솔로몬(RS : Reed-Solomon) 코드들만을 포함하는, 시스템.
EC10) EC1에 있어서, 상기 에러 정정 코드들은 BCH(Bose Chaudhuri Hocquenghem) 코드들만을 포함하는, 시스템.
EC11) EC1에 있어서, 상기 에러 정정 코드들은 저밀도 패리티 검사(LDPC : Low-Density-Parity-Check) 코드들만을 포함하는, 시스템.
EC12) EC1에 있어서, 상기 에러 정정 코드들은 적어도 2개의 유형들의 에러 정정 코드들을 포함하고, 상기 유형들의 에러 정정 코드들은 리드-솔로몬(RS) 유형 코드들, BCH 유형 코드들, 및 LDPC(Low-Density Parity-Check) 유형 코드들을 포함하는, 시스템.
EC13) EC1에 있어서, 적어도 2개의 상기 에러 정정 코드들은 상이한 코드 레이트들인, 시스템.
EC14) EC1에 있어서, 적어도 2개의 상기 에러 정정 코드들은 상이한 코드 길이들인, 시스템.
EC15) EC1에 있어서, 상기 부분은 상기 플래시 메모리의 하나 이상의 블록들이고, 상기 블록들의 각각은 개별적으로 소거가능한, 시스템.
EC16) EC1에 있어서, 상기 부분은 상기 플래시 메모리의 하나 이상의 페이지들이고, 상기 페이지들의 각각은 개별적으로 기록가능한, 시스템.
EC17) EC1에 있어서, 상기 에러 통계 수집 및 추적 하드웨어 로직 블록은 상기 플래시 메모리의 각각의 부분들에 대한 액세스들의 각각의 원시 BER들을 결정하는 것이 더 가능하게 되는, 시스템.
EC18) EC1에 있어서, 상기 플래시 메모리는 하나 이상의 플래시 메모리 다이를 포함하는, 시스템.
EC19) EC1에 있어서, 상기 원시 BER은 추정된 원시 BER인, 시스템.
EC20) EC19에 있어서, 상기 추정된 원시 BER은 상기 부분에 대해 얼마나 많은 프로그램/소거 사이크들이 수행되는지를 카운트함으로써 적어도 부분적으로 결정되는, 시스템.
EC21) EC19에 있어서, 상기 추정된 원시 BER은 상기 부분에 대해 얼마나 많은 판독 사이클들이 수행되는지를 카운트함으로써 적어도 부분적으로 결정되는, 시스템.
EC22) EC19에 있어서, 상기 추정된 원시 BER은 상기 부분의 적어도 하나의 셀과 연관된 임계 전압을 결정함으로써 적어도 부분적으로 결정되는, 시스템.
EC23) EC19에 있어서, 상기 추정된 원시 BER은 하나 이상의 미리 결정된 임계값드을 적어도 부분적으로 기반으로 하여 결정되는, 시스템.
EC24) EC19에 있어서, 상기 추정된 원시 BER은 하나 이상의 통계 모델들을 적어도 부분적으로 기반으로 하여 결정되는, 시스템.
EC25) EC1에 있어서, 상기 원시 BER은 측정된 원시 BER인, 시스템.
EC26) EC25에 있어서, 상기 측정된 원시 BER은 주기적으로 결정되는, 시스템.
EC27) EC25에 있어서, 상기 측정된 원시 BER은 미리 결정된 패턴을 상기 부분에 기록하고 상기 부분을 추후에 판독함으로써 적어도 부분적으로 결정되는, 시스템.
EC28) EC25에 있어서, 상기 측정된 원시 BER은 상기 부분의 적어도 일부 판독들과 연관된 BER을 관찰함으로써 적어도 부분적으로 결정되는, 시스템.
EC29) EC25에 있어서, 상기 측정된 원시 BER은 상기 플래시 메모리로부터의 원시 판독 데이터를 에러-정정된 버전의 상기 원시 판독 데이터를 비교함으로써 적어도 부분적으로 결정되는, 시스템.
EC30) EC1에 있어서, 상기 에러 통계 수집 및 추적 하드웨어 로직 블록은 개별 하드웨어 로직 블록인, 시스템.
EC31) EC1에 있어서, 상기 에러 통계 수집 및 추적 하드웨어 로직 블록은 전용 하드웨어 로직 블록인, 시스템.
EC32) EC1에 있어서, 상기 에러 통계 수집 및 추적 하드웨어 로직 블록은 분산된 하드웨어 로직 블록인, 시스템.
EC33) EC1에 있어서, 상기 에러 통계 수집 및 추적 하드웨어 로직 블록은 상기 에러 정정 코드들 중 임의의 것에 따라 디코딩하는 것이 가능하게 된 적응적 디코더 하드웨어 로직 블록에서 적어도 부분적으로 구현되는, 시스템.
EC34) EC1에 있어서, 상기 에러 통계 수집 및 추적 하드웨어 로직 블록은 상기 원시 BER을 적어도 부분적으로 결정하기 위하여, 상기 플래시 메모리로부터의 원시 판독 데이터를, 에러-정정된 버전의 상기 원시 판독 데이터를 비교하는 것이 가능하게 된 적응적 디코더 하드웨어 로직 블록에서 적어도 부분적으로 구현되는, 시스템.
EC35) EC1에 있어서, 상기 에러 통계 수집 및 추적 하드웨어 로직 블록은 상기 플래시 메모리와 호환인 플래시 메모리 인터페이스 하드웨어 로직 블록에서 적어도 부분적으로 구현되고, 상기 부분에 대해 얼마나 많은 프로그램/소거 사이클들이 수행되는지를 카운트하는 것이 가능하게 되고, 상기 적응적 인코더는 상기 카운트를 적어도 부분적으로 기반으로 하여 상기 선택된 에러 정정 코드를 동적으로 결정하는 것이 더 가능하게 되는, 시스템.
EC36) EC1에 있어서, 상기 에러 통계 수집 및 추적 하드웨어 로직 블록은 상기 플래시 메모리와 호환인 플래시 메모리 인터페이스 하드웨어 로직 블록에서 적어도 부분적으로 구현되고, 상기 부분에 대해 얼마나 많은 판독 사이클들이 수행되는지를 카운트하는 것이 가능하게 되고, 상기 적응적 인코더는 상기 카운트에 적어도 부분적으로 기반으로 하여 상기 선택된 에러 정정 코드를 동적으로 결정하는 것이 더 가능하게 되는, 시스템.
EC37) EC1에 있어서, 상기 에러 통계 수집 및 추적 하드웨어 로직 블록은 플래시 메모리와 호환인 플래시 메모리 인터페이스 하드웨어 로직 블록에서 적어도 부분적으로 구현되고, 상기 부분의 적어도 하나의 셀과 연관된 임계 전압을 결정하는 것이 가능하게 되고, 상기 적응적 인코더는 상기 임계 전압을 적어도 부분적으로 기반으로 하여 상기 선택된 에러 정정 코드를 동적으로 결정하는 것이 더 가능하게 되는, 시스템.
EC38) EC1에 있어서, 상기 부분은 복수의 서브-부분들을 포함하고, 상기 적응적 인코더는 에러 정정 정보가 상기 서브-부분들의 하나 이상에 저장가능하고 데이터 정보는 상기 서브-부분들의 하나에만 저장가능하도록 인코딩하는 것이 더 가능하게 되는, 시스템.
EC39) EC1에 있어서, 상기 하드웨어 블록들은 고체-상태 디스크(SSD : Solid-State Disk) 제어기 내에 포함되는, 시스템.
EC40) EC1에 있어서, 상기 하드웨어 블록들은 고체-상태 디스크(SSD) 내에 포함되는, 시스템.
EC41) EC1에 있어서, 상기 하드웨어 블록들은 비-휘발성 저장 부품 제어기 내에 포함되는, 시스템.
EC42) EC1에 있어서, 상기 하드웨어 블록들은 비-휘발성 저장 부품 내에 포함되는, 시스템.
EC43) EC42에 있어서, 상기 비-휘발성 저장 부품은 범용 직렬 버스(USB) 저장 부품, 컴팩트 플래시(CF : Compact Flash) 저장 부품, 멀티매체카드(MMC : MultiMediaCard) 저장 부품, 보안 디지털(SD : Secure Digital) 저장 부품, 메모리 스틱 저장 부품, 및 xD 저장 부품 중 하나 이상을 포함하는, 시스템.
EC44) 플래시 메모리의 부분에 대한 액세스들의 원시 비트 에러 레이트(BER : Bit Error Rate)를 결정하는 것이 가능하게 된 에러 통계 수집 및 추적 하드웨어 로직 블록; 및
적응적 인코더 및 적응적 디코더를 포함하는 적응적 코덱으로서, 상기 적응적 인코더는 복수의 에러 정정 코드들 중 제 1 선택된 에러 정정 코드에 따라 인코딩하는 것이 가능하게 되고, 상기 적응적 디코더는 상기 에러 정정 코드들 중 제 2 선택된 에러 정정 코드에 따라 디코딩하는 것이 가능하게 되고, 상기 적응적 코덱은 상기 에러 통계 수집 및 추적 하드웨어 로직 블록으로부터 수신된 정보를 적어도 부분적으로 기반으로 하여 상기 에러 정정 코드들 중 제 1 선택된 에러 정정 코드를 결정하는 것이 가능하게 된 제어 하드웨어 로직 블록을 더 포함하는, 시스템.
EC45) EC44에 있어서, 상기 적응적 코덱은 상기 에러 정정 코드들의 각각을 설명하는 것이 가능하게 된 코드 라이브러리를 더 포함하는, 시스템.
EC46) EC44에 있어서, 상기 적응적 인코더는 상기 에러 정정 코드들 중 임의의 것에 따라 인코딩하는 것이 가능하게 된 범용 인코더인, 시스템.
EC47) EC44에 있어서, 상기 적응적 디코더는 상기 에러 정정 코드들 중 임의의 것에 따라 디코딩하는 것이 가능하게 된 범용 디코더인, 시스템.
EC48) 플래시 메모리의 복수의 부분들의 각각과 연관된 각각의 코드 레이트를 결정하는 것이 가능하게 된 코드 레이트 선택 블록;
상기 각각의 결정된 코드 레이트들에 따라 동작가능한 인코더;
상기 각각의 결정된 코드 레이트들에 따라 동작가능한 디코더를 포함하고,
상기 플래시 메모리의 상기 부분들의 특정한 하나는 상기 각각의 결정된 코드 레이트들 중 특정한 하나에 따라 상기 인코더에 의해 인코딩된 데이터로 기록되고, 상기 특정한 부분으로부터 추후에 판독되고, 상기 디코더에 의해 디코딩되는, 시스템.
EC49) EC48에 있어서, 상기 코드 레이트 선택 블록은 하드웨어 로직 회로로 이루어지는, 시스템.
EC50) EC48에 있어서, 상기 코드 레이트 선택 블록은 상기 부분들 중 하나 이상마다의 하나 이상의 파라미터들, 또는 상기 파라미터들의 하나 이상에 대한 하나 이상의 이력들을 적어도 부분적으로 기반으로 하여 상기 각각의 코드 레이트를 결정하는 것이 가능하게 되고, 상기 파라미터들은,
정정된 에러들의 수,
검출된 에러들의 수,
프로그램/소거 사이클들의 수,
판독 사이클들의 수,
프로그램 시간,
소거 시간,
판독 시간,
온도, 및
임계 전압을 포함하는, 시스템.
시스템 및 동작
도 1은 플래시 메모리 기반 데이터 저장을 위한 적응적 ECC 기술들을 이용한 시스템(100)의 실시예의 선택된 세부사항들을 예시한다. 기록-저장-데이터(write-storage-data) 경로(110)는 다양한 하드웨어 블록들: (예를 들어, 하나 이상의 플래시 메모리 다이(die)를 포함하는) 플래시 유닛(140)에 차례로 결합되는 제어/인터페이스(130)에 결합되는 범용 인코더(universal encoder)(120)를 포함한다. 판독-저장-데이터(read-storage-data) 경로(150)는 다양한 하드웨어 블록들: 범용 디코더(universal decoder)(160)에 결합된 플래시 유닛 및 제어/인터페이스를 포함한다. 코드 라이브러리(code library)(170) 하드웨어 블록은 범용 인코더 및 범용 디코더 하드웨어 블록들에 결합된다. 에러 통계 수집/추적(180) 하드웨어 블록은 범용 인코더, 코드 라이브러리, 범용 디코더, 및 제어/인터페이스 하드웨어 블록들에 결합된다.
동작 시에, 저장 데이터로서 기록하기 위한 "호스트로부터의 사용자 데이터"는 범용 인코더에 의해 수신되고, 에러 정정 코드에 따라 인코딩된다. 에러 정정 코드는 코드 라이브러리로부터의 정보에 의해 기술되고, 에러 통계 수집/추적 블록에 의해 제공되는 바와 같은 정보를 적어도 부분적으로 기반으로 하여 선택된다. 다음으로, 범용 인코더는 데이터 정보 및 에러 정정 정보를, 정보를 플래시 유닛에 기록하는 제어/인터페이스에 제공한다.
저장 데이터를 판독하는 것은 플래시 유닛의 하나 이상의 부분들(예를 들어, 페이지들 또는 블록들)로부터 원시 정보를 판독하는 제어/인터페이스에 의해 시작되고, 원시 정보를 범용 디코더에 제공한다. 다음으로, 범용 디코더는 원시 정보에 포함된 에러 정정 정보를 이용하는 에러 정정 코드에 따라 (에러 정정들을 포함하는) 원시 정보를 데이터 정보로 디코딩한다. 에러 정정 코드는 코드 라이브러리로부터의 정보에 의해 기술되고, 에러 통계 수집/추적 블록에 의해 제공되는 바와 같은 정보 및/또는 원시 정보의 하나 이상의 부분들을 적어도 부분적으로 기반으로 하여 선택된다. 다음으로, 데이터 정보는 호스트에 전달된다. 처리의 하나 이상의 대안적인 순서들이 다양한 대안적인 실시예들에서 수행된다. 예를 들어, 일부 실시예들에서, 저장 데이터를 판독하는 것은 코드 라이브러리를 판독하고, 그 다음으로, 원시 정보를 판독하는 제어/인터페이스에 의해 시작된다.
인코딩(및 디코딩)을 위해 이용되는 에러 정정 코드는 에러 정정 코드들의 세트로부터 선택된다. 다양한 실시예들에서, 상기 세트는 RS 코드들만, BCH 코드들만, 트렐리스 코드들만, 또는 LDPC 코드들만 포함한다. 다양한 실시예들에서, 상기 세트는 RS, BCH, 트렐리스, 및/또는 LDPC 코드 유형들의 다양한 조합들과 같이, 하나를 초과하는 유형의 코드를 포함하고, 코드 유형들의 각각은 각 유형의 하나 이상의 특정한 코드들을 포함한다. 다양한 실시예들에서, 상기 세트는 변동되는 레이트(rate)들 및/또는 길이들의 코드들을 포함한다. 또 다른 실시예들에서, (BCH 코드 유형과 같은) 하나의 코드 유형의 코드들은 더 높은 레이트의 코드들을 위해 이용되고, (LDPC 코드 유형과 같은) 또 다른 코드 유형의 코드들은 더 낮은 레이트의 코드들을 위해 이용된다.
에러 통계 수집/추적 하드웨어 블록은 독립적인 기능적 하드웨어 블록으로서 또는 대안적으로 하나 이상의 하드웨어 블록들 내에 분포된 기능적 블록으로서 구현된다. 예를 들어, 에러 통계 수집/추적 하드웨어 블록은 범용 디코더 하드웨어 블록에서 부분적으로 구현되고, 플래시 유닛으로부터 판독된 원시 정보를, 원시 정보를 디코딩함으로써 생성되는 에러-정정된 데이터 정보와 비교함으로써, 측정된 원시 BER을 계산하는 것이 가능하게 된다. 또 다른 예를 들면, 에러 통계 수집/추적 하드웨어 블록은 제어/인터페이스 하드웨어 블록에서 부분적으로 구현되고, PE 사이클들 및/또는 판독 사이크들의 수를 (예를 들어, 플래시 저장장치의 페이지 또는 블록과 같은 저장 단위마다) 카운트(count)함으로써, 그리고 추정된 원시 BER을 차례로 제공하는 미리 결정된 통계 모델에 대한 파라미터로서 상기 수를 이용함으로써 추정된 원시 BER을 계산하는 것이 가능하게 된다. 또 다른 예를 들면, 에러 통계 수집/추적 하드웨어 블록은 제어/인터페이스 하드웨어 블록에서 부분적으로 구현되고, (플래시 저장장치의 페이지 또는 블록과 같은) 플래시 저장장치의 일부로부터 판독된 하나 이상의 셀(cell)들에 대한 임계 전압(또는 그 대용물(proxy))을 획득함으로써, 그리고 추정된 원시 BER을 차례로 제공하는 미리 결정된 통계 모델에 대한 파라미터로서 상기 전압을 이용함으로써 추정된 원시 BER을 계산하는 것이 가능하게 된다. 또 다른 예를 들면, 에러 통계 수집/추적 하드웨어 블록은 (예컨대, 범용 인코더를 우회하는 것을 통해) 플래시 저장장치에 기록되어야 할 하나 이상의 미리 결정된 패턴들을 제공하는 것이 가능하게 되고, 측정된 원시 BER을 결정하기 위하여, (예컨대, 범용 디코더를 우회하는 것을 통해) 플래시 저장장치로부터 복귀되는 원시 비트 에러들의 수를 확인(verify)하는 것이 가능하게 된다. 미리 결정된 패턴들은 전부-제로(all-zero) 패턴, 전부 1(all-one) 패턴, 또는 하나 이상의 PRBS 패턴들을 포함한다. 또 다른 예로서, 에러 통계 수집/추적 하드웨어 블록은 예를 들어, 미리 결정된 패턴들의 하나 이상의 패턴을 제공하고 확인하는 것을 통해, 플래시 저장장치의 하나 이상의 부분들의 현재의 원시 (측정된) BER을 (100 PE 사이클들마다 한번과 같이) 주기적으로 결정하는 것이 가능하게 된다. 또 다른 예들로서, 상기한 예들 중 임의의 하나 이상의 예는 다양한 조합들로 구현된다.
다양한 실시예들에서, 상기한 에러 통계 수집/추적 하드웨어 블록에 의해 수행되는 하나 이상의 기능들은 하나 이상의 소프트웨어 기술들에 의해 전체적으로 또는 부분적으로 구현된다. 예를 들어, 프로그램가능 하드웨어 타이머는 프로세서(processor)에 인터럽트(interrupt)를 제공한다. 응답 시에, 프로세서는 범용 디코더 하드웨어 블록의 일부가 하나 이상의 측정된 원시 BER 값들을 프로세서에 제공하도록 지시하는 소프트웨어 인터럽트 핸들러 루틴(software interrupt handler routine)을 실행한다. 프로세서는 상기 값들을 이동 평균(moving average)으로서 누산(accumulate)한다. 이동 평균은 예컨대, 에러 정정 코드를 선택하는 것이 가능하게 된 소프트웨어 기능에 대한 입력을 통해, 또는 대안적으로, 에러 정정 코드를 선택하는 것이 가능하게 된 하드웨어 유닛에 대한 입력으로서, 선택된 에러 정정 코드를 결정하기 위하여 적어도 부분적으로 이용된다. 또 다른 예를 들면, 프로세서는 저장 단위마다 PE 및/또는 판독 사이클들을 카운트하기 위하여 하나 이상의 소프트웨어 루틴들을 실행한다. 카운팅(counting)은 프로세서에 의해 어드레싱 가능한 메모리로부터의 이전의 카운터 값을 판독하고, 카운터 값을 증분(increment)시키고, 그 다음으로, 증분된 카운터 값을 다시 메모리에 저장하는 루틴들을 통한 것이다. 하드웨어 및 소프트웨어의 다양한 조합들에서 수행되는 다양한 에러 통계 수집 및 추적 기능들을 갖는 다른 실시예들이 고려된다.
일부 실시예들에서, 에러 통계 수집/추적 블록은 시간에 걸쳐 정보의 이력(history)을 유지하고 그 이력을 고려하여 이력-인지(history-aware) 원시 BER을 계산하는 것이 가능하게 된다. 예를 들어, 에러 통계 수집/추적 블록은 (블록마다 또는 페이지마다 대 액세스마다 또는 동작 시간마다와 같이) 측정된(또는 추정된) 원시 BER의 이력을 유지하고 이 이력으로부터 이력-인지 측정된(또는 추정된) 원시 BER을 결정하는 것이 가능하게 된다.
인코딩을 위하여 선택된 에러 정정 코드는 다양한 기준들, 이용 시나리오들, 및 실시예들에 따라 동적으로 결정된다. 예를 들어, 측정된(또는 추정된) 원시 BER은 인코딩을 위하여 어느 에러 정정 코드가 선택되는지에 대해 동적으로 영향을 준다. 또 다른 예를 들면, 이력-인지 측정된(또는 추정된) 원시 BER은 인코딩을 위하여 어느 에러 정정 코드가 선택되는지에 대해 영향을 준다. 플래시 저장장치의 특정한 부분의 디코딩을 위해 선택된 에러 정정 코드는 특정한 부분을 마지막으로 기록할 때에 이용되는 인코딩과 일치하도록 동적으로 결정된다.
다양한 실시예들은 원시 BER(측정 또는 추정됨)의 명시적인 계산 없이 인코딩을 위한 에러 정정 코드의 선택을 수행하지만, 오히려, 하나 이상의 파라미터들 또는 하나 이상의 파라미터들의 이력에 기반으로 하여 에러 정정 코드를 직접 동적으로 선택한다. 파라미터들은 정정 및/또는 검출된 에러들의 수, PE 사이클들의 수, 판독 사이클들의 수, 프로그램 시간, 소거 시간, 판독 시간, 온도, 및 임계 전압을 포함한다. 다양한 실시예들에서, 파라미터들(및/또는 그 이력들)은 (플래시 저장장치의 페이지마다 또는 블록마다와 같이) 플래시 저장 부분마다에 대한 것이다.
일부 실시예들에서, (플래시 유닛에 포함되는 것과 같은) 플래시 메모리는 (페이지들 또는 블록들과 같은) 부분들로 구성되고, 부분들의 각각은 (2K 또는 4K 바이트(byte)의 정보와 같은) 미리 결정된 양의 정보를 저장하는 것이 가능하게 된다. 정보는 데이터 정보 및 에러 정정 정보를 포함한다. 일부 실시예들에서, 각각의 모든 부분은 동일한 특정 수의 바이트들을 에러 정정 정보로서 저장하는 것이 가능하게 되고, 다른 실시예들에서는, 일부 부분들이 상이한 수의 바이트들의 에러 정정 정보를 저장하는 것이 가능하게 된다. (코드 라이브러리에 의해 기술된 바와 같은) 다양한 에러 정정 코드들은 상이한 수의 바이트들(또는 비트들)의 에러 정정 정보를 생성한다.
예를 들어, (플래시 메모리의 수명에서 상대적으로 초기에 이용되는 것과 같은) 제 1 에러 정정 코드를 통한 인코딩은 (수명에서 더 이후에 이용되는 것과 같은) 제 2 에러 정정 코드에 비해 상대적으로 더 적은 바이트들의 에러 정정 정보(예를 들어, 에러 정정을 위한 중복 정보)를 생성한다. 일부 실시예들에서, 플래시 메모리(및/또는 그 이용)는 각각의 부분 내에 제 2 에러 정정 코드를 통한 인코딩을 위해 충분한 에러 정정 정보를 저장하는 것이 가능하게 되어, 제 1 에러 정정 코드가 이용될 때, 에러 정정 정보 저장이 이용되지 않게 둔다. 다른 실시예들에서, 플래시 메모리(및/또는 그 이용)는 각각의 부분 내에 제 1 에러 정정 코드를 통한 인코딩을 위해 충분한 에러 정정 정보를 저장하는 것이 가능하게 되고, 제 2 에러 정정 코드를 통한 인코딩을 위해 충분한 에러 정정 정보를 (각각의 부분 내에) 저장할 수 없다. 다른 실시예들의 일부는 부분마다의 에러 정정 정보 저장과 함께, 제 2 에러 정정 코드를 통해 인코딩되는 에러 정정 정보를 저장하기에 충분한 (추가적인 에러 정정 정보를 저장하기 위한 전용의 플래시 메모리의 영역과 같은) 추가적인 플래시 메모리 저장장치를 포함한다.
일부 실시예들에서, 플래시 메모리는 (그 페이지들 또는 블록들 또는 집합체(multiple)들과 같은) 부분들로서 동작되고, 각각의 부분은 데이터 서브-부분 및 각각의 대응하는 에러 정정 서브-부분으로서 구성된다. 플래시 메모리(및/또는 그 이용)는 복수의 에러 정정 코드들 중 동적으로 선택된 특정한 하나에 따라 저장 데이터의 특정한 분량(quantum)을 인코딩하는 것이 가능하게 되고, 저장 데이터의 특정한 분량에 대응하는 에러 정정 정보를 생성한다. 저장 데이터는 에러 정정 정보와 함께, 데이터 서브-부분들 중 특정한 하나 및 에러 정정 서브-부분들의 대응하는 특정한 하나의 조합으로 저장된다. 상기 부분들은 모두 동일한 크기이고, 대안적으로 상이한 크기들이다.
예를 들어, 플래시 메모리는 (및/또는 그 이용은), 완전히 에러 정정 서브-부분에서, 상대적으로 더 작은 에러 정정 코드를 통한 인코딩을 위해 충분히 큰 에러 정정 정보를 저장하는 것이 가능하게 되어, 대응하는 데이터 서브-부분의 전부가 (에러 정정 정보가 생성되는) 저장 데이터를 저장하기 위해 이용가능하게 된다. 그러나, 에러 정정 서브-부분은 상대적으로 더 큰 에러 정정 코드를 통해 인코딩되는 에러 정정 정보를 저장하기에 충분히 크지 않다. 실제로, 데이터 저장 서브-부분의 양은 에러 정정 서브-부분에서 맞지 않는 에러 정정 정보의 나머지를 저장하기 위해 "대여(borrow)"된 것이고, 이에 따라, 데이터 저장 서브-부분에서 저장 데이터를 저장하기 위해 이용가능한 공간을 (대여된 양만큼) 감소시킨다. 따라서, 상대적으로 더 적은 데이터 저장 서브-부분이 이용가능하므로, 저장 데이터의 분량은 상대적으로 더 작은 에러 정정 코드를 이용할 때의 저장 데이터의 분량에 비해, 상대적으로 더 큰 에러 정정 코드를 이용할 때에 적다. 그러므로, 상대적으로 더 큰 에러 정정 코드를 이용할 때, 상대적으로 더 적은 전체 이용가능 공간이 플래시 메모리(및/또는 그 이용)에 의해 제공된다.
또 다른 예를 들면, 플래시 메모리(및/또는 그 이용)는 완전히 에러 정정 서브-부분에서, 상대적으로 더 큰 에러 정정 코드를 통한 인코딩을 위해 충분히 큰 에러 정정 정보를 저장하는 것이 가능하게 되고, 대응하는 데이터 서브-부분의 전부가 (에러 정정 정보가 생성되는) 저장 데이터를 저장하기 위해 이용가능하게 된다. 에러 정정 서브-부분은 상대적으로 더 작은 에러 정정 코드를 통해 인코딩되는 에러 정정 정보를 저장하기에 충분한 것보다 더 크다. 상대적으로 더 작은 에러 정정 코드를 통해 인코딩된 에러 정정 정보를 처리한 후에 에러 정정 서브-부분에서 남는 모든 공간에 이르는 그리고 이 모든 공간을 포함하는 에러 정정 서브-부분의 양은 추가적인 저장 데이터를 저장하기 위하여 "대여"된 것이다. 따라서, 상대적으로 더 많은 데이터 저장 서브-부분이 이용가능하므로, 저장 데이터의 분량은 상대적으로 더 큰 에러 정정 코드를 이용할 때의 저장 데이터의 분량에 비해, 상대적으로 더 작은 에러 정정 코드를 이용할 때에 더 많다. 그러므로, 상대적으로 더 작은 에러 정정 코드를 이용할 때, 상대적으로 더 많은 전체 이용가능 공간이 플래시 메모리(및/또는 그 이용)에 의해 제공된다.
다양한 실시예들 및/또는 이용 시나리오들에서, 플래시 메모리의 부분들은 (예를 들어, 에러 정정 서브-부분을 "오버플로우(overflow)" 하는 에러 정정 코드에 따라 인코딩할 때에 필요한 바와 같이) 데이터 서브-부분들로부터의 상기한 대여에 따라 동작되는 반면, 플래시 메모리의 다른 부분들은 (예를 들어, 데이터 서브-부분에서 공간을 이용가능하게 두는 에러 정정 코드에 따라 인코딩할 때에 가능한 바와 같이) 에러 정정 서브-부분들로부터의 상기한 대여에 따라 동작된다. 다양한 실시예들 및/또는 이용 시나리오들에서, 플래시 메모리의 일부 부분들은 (예를 들어, 인코딩을 위해 이용되는 에러 정정 코드에 따라 필요한 바와 같이) 데이터 또는 에러 정정 서브-부분들로부터의 대여에 의해 동작된다. 상기 부분들은 동일한 크기이거나 다양한 크기들이고, 상기 부분들은 동일한 할당(allocation)의 데이터(또는 에러 정정) 서브-부분들 또는 변동하는 할당들(예를 들어, 모든 데이터 서브-부분들이 특정한 크기이거나, 모든 데이터 서브-부분들이 복수의 크기들 중 임의의 것이다)로 구성된다.
다양한 실시예들에서, 플래시 메모리의 부분의 동작 모드는 데이터 정보를 인코딩하기 위한 에러 정정 코드를 동적으로 선택하기 위해 이용되는 상기한 파라미터들 및/또는 원시 BER 중 하나 이상의 것을 기반으로 하여 변경된다. 예를 들어, 원시 BER이 임계값을 초과할 때, 이전에 MLC 페이지로서 동작되는 플래시 메모리의 (페이지와 같은) 부분은 그 후에 (예컨대, 그 페이지를 "더 하위 만의(lower only)" 페이지로서 동작시킴으로써) SLC 페이지로서 동작된다. 또 다른 예를 들면, 플래시 메모리의 부분의 수명의 초기 부분 동안에, 상기 부분은 MLC 부분으로서 동작되고, 수명의 더 이후의 부분 동안에는 상기 부분이 SLC 부분으로서 동작된다. 상기 부분이 (MLC 부분에 비해) SLC 부분으로서 동작될 때, 데이터를 저장하기 위해 이용가능한 공간은 감소되지만, 상기 부분이 수명의 더 이후의 부분 동안에 이용불가능한 것으로 표기되는 경우에는, 이용가능한 공간이 더 많다.
다양한 실시예들에서, 인코딩을 위한 에러 정정 코드의 동적인 선택은 플래시 부분 동작 모드의 동적인 선택과 함께 이용된다. 예를 들어, 플래시 메모리의 페이지의 초기 동작 기간 동안에는, 페이지가 MLC 페이지로서 동작되고 제 1 짧은 코드 길이의 ECC로 인코딩된다. 추후의 동작 기간 동안에는, 페이지가 여전히 MLC 페이지로서 동작되지만, 제 1 긴 코드 길이의 ECC에 따라 인코딩된다. 더욱 추후의 동작 기간 동안에는, 페이지가 SLC 페이지로서 동작되고 제 2 짧은 코드 길이의 ECC로 인코딩된다. 더욱 추후의 동작 기간 동안에는, 페이지가 여전히 SLC 페이지로서 동작되지만, 제 2 긴 코드 길이의 ECC에 따라 인코딩된다. (페이지가 제 1 제 1 짧은 코드 길이의 ECC로 인코딩되고, 그 다음으로, 제 1 긴 코드 길이의 ECC로 인코딩되고, 그 다음으로, 제 2 짧은 코드 길이의 ECC를 갖는 SLC 페이지로서 동작되고, 그 다음으로, 제 2 긴 코드 길이의 ECC를 갖는 SLC 페이지로서 동작되므로) 데이터를 저장하기 위해 이용가능한 공간은 동작 기간들에 걸쳐 감소되지만, 페이지가 이용불가능한 것으로 표기되는 경우에는, 이용가능한 공간이 더 많다.
대안적으로, 플래시 메모리의 페이지의 원시 BER이 제 1 임계값보다 작은 동안에는, 페이지가 MLC 페이지로서 동작되고 제 1 짧은 코드 길이의 ECC로 인코딩된다. 원시 BER이 제 1 임계값을 초과할 경우/초과할 때(그러나, 제 2 임계값보다 작은 상태로 유지함), 페이지는 (여전히 MLC 페이지로서 동작되면서) 제 1 더 긴 코드 길이의 ECC로 인코딩된다. 원시 BER이 제 2 임계값을 초과할 경우/초과할 때(그러나, 제 3 임계값보다 작은 상태로 유지함), 페이지는 훨씬 더 긴 코드 길이의 ECC로 인코딩된다. 원시 BER이 제 3 임계값을 초과할 경우/초과할 때(그러나, 제 4 임계값보다 작은 상태로 유지함), 페이지는 SLC 페이지로서 동작되고, 제 2 짧은 코드 길이의 ECC로 인코딩된다. 원시 BER이 제 4 임계값을 초과할 경우/초과할 때, 페이지는 계속 SLC 페이지로서 동작되고, 제 2 더 긴 코드 길이의 ECC로 인코딩된다.
일부 실시예들에서, 페이지는 (MLC 페이지와 같은) 제 1 동작 모드에서 동작되고, 페이지에 대한 데이터를 인코딩하기 위해 이용되는 에러 정정 코드는 (예컨대, 상기한 파라미터들 중 임의의 것에 따라) 동적으로 선택된다. 동적으로 선택된 에러 정정 코드에 따라 이용되는 에러 정정 코드 정보가 임계값을 초과하는 경우, 페이지는 (SLC 페이지와 같은) 제 2 동작 모드에서 동작된다.
다양한 실시예들 및/또는 이용 시나리오들에서, 특정한 상황들 하에서는, 페이지가 에러 정정 코드 선택에 관계없이 SLC 페이지로서 동작된다. 특정한 상황들의 예들은 빈번하게 액세스가능한 데이터, 빈번하게 기록되는 데이터, 및/또는 더 높은 스루풋(throughput)으로부터 이익이 되는 데이터에 대해 페이지가 이용되는 것을 포함한다.
다양한 실시예들 및/또는 이용 시나리오들에서, 플래시 메모리의 부분들(예를 들어, 그 페이지들, 블록들, 또는 집합체들)은 수명에 있어서 더 이후의 더 긴 에러 정정 코드들에 비해, 플래시 메모리의 수명에 있어서 더 초기의 더 짧은 에러 정정 코드들로 동작된다. 따라서, 플래시 메모리의 증가된 유효량은 사용자 데이터를 위해 이용가능하고, 그러므로, 플래시 메모리의 지속성(longevity)은 효과적인 과다 제공에 의해 증가된다. 예를 들어, 플래시 메모리 디바이스는 8936(744 + 213) 바이트와 같이, 2의 제곱보다 약간 더 큰 페이지 크기를 가진다. 플래시 메모리 디바이스 수명에 있어서의 초기에 2의 제곱보다 크고, 수명에 있어서의 그 이후에 2의 제곱보다 작게 사용자 데이터에 대해 예약된 페이지의 비율(proportion)을 변동시키는 것은 수명 전반에 걸쳐 동일한 비율을 이용하는 것에 비해 수명을 연장시킨다.
SSD 제어기 구현
도 2a는 플래시 메모리 기반 데이터 저장을 위한 적응적 ECC 기술들을 이용한 SSD 제어기를 포함하는 SSD의 실시예의 선택된 세부사항들을 예시한다. SSD 제어기(200)는 하나 이상의 외부 인터페이스들(210)을 통해 호스트(예시되지 않음)에 통신가능하게 결합된다. 다양한 실시예들에 따르면, 외부 인터페이스들(210)은 SATA 인터페이스; SAS 인터페이스: PCIe 인터페이스; 파이버 채널 인터페이스(Fibre Channel interface); (10 기가비트(Gigabit) 이더넷(Ethernet)과 같은) 이더넷 인터페이스; 선행 인터페이스들 중 비-표준 버전(non-standard version)의 임의의 것; 커스텀 인터페이스(custom interface); 또는 저장장치 및/또는 통신들 및/또는 컴퓨팅 디바이스들을 상호접속하기 위해 이용되는 임의 다른 유형의 인터페이스 중 하나 이상의 인터페이스이다. 예를 들어, 일부 실시예들에서, SSD 제어기(200)는 SATA 인터페이스 및 PCIe 인터페이스를 포함한다.
SSD 제어기(200)는 하나 이상의 디바이스 인터페이스들(290)을 통해, 플래시 디바이스들(292)과 같은 하나 이상의 저장 디바이스들을 포함하는 비-휘발성 메모리(299)에 통신가능하게 더 결합된다. 다양한 실시예들에 따르면, 디바이스 인터페이스들(290)은 비동기식(asynchronous) 인터페이스; 동기식(synchronous) 인터페이스; DDR 동기식 인터페이스; ONFI 2.2 호환 인터페이스와 같은 ONFI 호환 인터페이스; 토글-모드(toggle-mode) 호환 플래시 인터페이스; 선행 인터페이스들 중 비-표준 버전의 임의의 것; 커스텀 인터페이스; 또는 저장 디바이스들에 접속하기 위해 이용되는 임의의 다른 유형의 인터페이스 중 하나 이상의 인터페이스이다.
일부 실시예들에서, 플래시 디바이스들(292)은 하나 이상의 개별적인 플래시 다이(flash die)(294)를 가진다. 플래시 디바이스들(292) 중 특정한 하나의 유형에 따르면, 특정한 플래시 디바이스(292) 내의 복수의 플래시 다이(294)는 임의적으로 및/또는 선택적으로 병렬로 액세스 가능하다. 플래시 디바이스들(292)은 SSD 제어기(200)에 통신가능하게 결합되는 것이 가능하게 된 저장 디바이스의 하나의 유형을 단지 나타낸다. 다양한 실시예들에서는, SLC NAND 플래시 메모리, MLC NAND 플래시 메모리, NOR 플래시 메모리, 판독전용 메모리, 정적 랜덤 액세스 메모리, 동적 랜덤 액세스 메모리, 강자성 메모리, 상변화(phase-change) 메모리, 레이스트랙(racetrack) 메모리, 또는 임의의 다른 유형의 메모리 디바이스 또는 저장 매체와 같이, 임의의 유형의 저장 디바이스가 이용가능하다.
다양한 실시예들에 따르면, 디바이스 인터페이스들(290)은 버스마다 하나 이상의 플래시 디바이스들(292)을 갖는 하나 이상의 버스들; 버스마다 하나 이상의 플래시 디바이스들(292)을 갖는 하나 이상의 그룹들의 버스들로서, 그룹 내의 버스들은 병렬로 일반적으로 액세스되는, 상기 하나 이상의 그룹들의 버스들; 또는 디바이스 인터페이스들(290) 상으로의 플래시 디바이스들(292)의 임의의 다른 구성으로서 구성된다.
도 2a에서 계속하면, SSD 제어기(200)는 호스트 인터페이스(211), 데이터 처리부(221), 버퍼(231), 맵(241), 재활용기(recycler)(251), ECC(261), 디바이스 인터페이스 로직(291), 및 CPU(271)와 같은 하나 이상의 모듈들을 가진다. 도 2a에 예시된 특정 모듈들 및 상호접속부들은 하나의 실시예를 단지 나타내는 것이고, 예시되지 않은 추가적인 모듈들뿐만 아니라, 모듈들의 일부 또는 전부의 다수의 배치들 및 상호접속부들이 고안된다. 제 1 예에서, 일부 실시예들에서는, 듀얼 포팅(dual-porting)을 제공하기 위하여 2개 또는 그보다 많은 호스트 인터페이스들(211)이 있다. 제 2 예에서, 일부 실시예들에서는, 데이터 처리부(221) 및/또는 ECC(261)가 버퍼(231)와 조합된다. 제 3 예에서, 일부 실시예들에서는, 호스트 인터페이스들(211)이 버퍼(231)에 직접 결합되고, 데이터 처리부(221)는 버퍼(231)에 저장된 데이터에 대해 임의적으로 및/또는 선택적으로 동작한다. 제 4 예에서, 일부 실시예들에서는, 디바이스 인터페이스 로직(291)이 버퍼(231)에 직접 결합되고, ECC(261)는 버퍼(231)에 저장된 데이터에 대해 임의적으로 및/또는 선택적으로 동작한다.
호스트 인터페이스(211)는 외부 인터페이스(210)를 통해 명령들 및/또는 데이터를 송신 및 수신하고, 일부 실시예들에서는, 태그 추적(213)을 통해 개별적인 명령들의 진행을 추적한다. 예를 들어, 명령들은 (LBA와 같은) 어드레스 및 판독할 (LBA 분량, 예를 들어, 섹터들의 수와 같은) 데이터의 양을 특정하는 판독 명령을 포함하고; 그 응답으로, SSD는 판독 상태 및/또는 판독 데이터를 제공한다. 또 다른 예를 들면, 명령들은 (LBA와 같은) 어드레스 및 기록할 (LBA 분량, 예를 들어 섹터들의 수와 같은) 데이터의 양을 특정하는 기록 명령을 포함하고; 그 응답으로, SSD는 기록 상태를 제공하고 및/또는 기록 데이터를 요청하고, 임의적으로, 기록 상태를 추후에 제공한다. 또 다른 예를 들면, 명령들은 더 이상 할당될 필요가 없는 (LBA와 같은) 어드레스를 지정하는 할당해제(de-allocation) 명령을 포함하고; 그 응답으로, SSD는 맵을 이에 따라 수정하고, 임의적으로, 할당해제 상태를 제공한다. 또 다른 예를 들면, 명령들은 수퍼 커패시터 테스트 명령(super capacitor test command) 또는 데이터 경화 성공 질의(data hardening success query)를 포함하고; 그 응답으로, SSD는 적절한 상태를 제공한다. 일부 실시예들에서, 호스트 인터페이스(211)는 SAT 프로토콜과 호환이고, NCQ 명령들을 이용하여, 0으로부터 31까지의 수로서 표현되는 고유의 태그를 각각 갖는 32개에 이르는 계류 중인 명령들을 가지는 것이 가능하게 된다. 일부 실시예들에서, 태그 추적(213)은 외부 인터페이스(210)를 통해 수신된 명령에 대한 외부 태그를, SSD 제어기(200)에 의한 처리 동안에 명령을 추적하기 위해 이용되는 내부 태그와 연관시키는 것이 가능하게 된다.
다양한 실시예들에 따르면, 데이터 처리부(221)가 임의적으로 및/또는 선택적으로 버퍼(231) 및 외부 인터페이스들(210) 사이에서 송신된 일부 또는 전부의 데이터를 처리하고; 데이터 처리부(221)가 임의적으로 및/또는 선택적으로 버퍼(231)에 저장된 데이터를 처리하는 것 중 하나 이상이 발생한다. 일부 실시예들에서, 데이터 처리부(221)는 포맷팅(formatting); 재포맷팅(reformatting); 트랜스코딩(transcoding); 및 임의의 다른 데이터 처리 및/또는 조작 작업 중 하나 이상의 것을 수행하기 위하여 하나 이상의 엔진(engine)(223)을 이용한다.
버퍼(231)는, 디바이스 인터페이스들(290)로부터/디바이스 인터페이스들(290)로, 외부 인터페이스들(210)로/외부인터페이스들(210)로부터 송신된 데이터를 저장한다. 일부 실시예들에서, 버퍼(231)는 플래시 디바이스들(292)을 관리하기 위하여 SSD 제어기(200)에 의해 이용되는, 일부 또는 모든 맵 테이블(map table)들과 같은 시스템 데이터를 추가적으로 저장한다. 다양한 실시예들에서, 버퍼(231)는 데이터의 일시적인 저장을 위해 이용되는 메모리(237); 버퍼(231)로 및/또는 버퍼(231)로부터의 데이터의 이동을 제어하기 위해 이용되는 DMA(233); 및 다른 데이터 이동 및/또는 조작 기능들 중 하나 이상의 것을 가진다.
다양한 실시예들에 따르면, ECC(261)가 임의적으로 및/또는 선택적으로 버퍼(231) 및 디바이스 인터페이스들(290) 사이에서 송신된 일부 또는 모든 데이터를 처리하고; 및 ECC(261)가 임의적으로 및/또는 선택적으로 버퍼(231)에 저장된 데이터를 처리하는 것 중 하나 이상이 발생한다.
디바이스 인터페이스 로직(291)은 디바이스 인터페이스들(290)을 통해 플래시 디바이스들(292)을 제어한다. 디바이스 인터페이스 로직(291)은 플래시 디바이스들(292)의 프로토콜에 따라 플래시 디바이스들(292)로/플래시 디바이스들(292)로부터 데이터를 송신하는 것이 가능하게 된다. 디바이스 인터페이스 로직(291)은 디바이스 인터페이스들(290)을 통한 플래시 디바이스들(292)의 선택적인 시퀀스 제어를 위한 스케줄링부(293)를 포함한다. 예를 들어, 일부 실시예들에서, 스케줄링부(293)는 플래시 디바이스들(292)에 대한 동작들을 큐잉(queuing)하고, 개별적인 플래시 디바이스들(292)(또는 플래시 다이(294)가 이용가능함에 따라 플래시 디바이스들(또는 플래시 다이(294))의 개별적인 각각에 대해 동작들을 선택적으로 송신하는 것이 가능하게 된다.
맵(241)은 외부 데이터 어드레스들을 비-휘발성 메모리(299) 내의 위치들로 맵핑하기 위한 테이블(243)을 이용하여, 외부 인터페이스들(210) 상에서 이용되는 데이터 어드레싱 및 디바이스 인터페이스들(290) 상에서 이용되는 데이터 어드레싱 사이에서 변환하다. 예를 들어, 일부 실시예들에서, 맵(241)은 테이블(243)에 의해 제공되는 맵핑을 통해, 외부 인터페이스들(210) 상에서 이용되는 LBA들을, 하나 이상의 플래시 다이(294)를 타겟으로 하는 블록 및/또는 페이지 어드레스들로 변환한다. 드라이브 제조 또는 할당해제 이후에 전혀 기록되지 않은 LBA들에 대하여, 맵은 LBA들이 판독되는 경우에 반환하기 위한 디폴트 값(default value)을 지시한다. 예를 들어, 할당해제 명령을 처리할 때, 맵은 할당해제된 LBA들에 대응하는 엔트리(entry)들이 디폴트 값들 중 하나를 지시하도록 수정된다. 다양한 실시예들에서는, 복수의 디폴트 값들이 있고, 그 각각은 대응하는 포인터(pointer)를 가진다. 복수의 디폴트 값들은 (제 1 범위에서와 같은) 일부 할당해제된 LBA들을 하나의 디폴트 값으로서 판독하는 것을 가능하게 하는 한편, (제 2 범위에서와 같은) 다른 할당해제된 LBA들을 또 다른 디폴트 값으로서 판독한다. 다양한 실시예들에서, 디폴트 값들은 플래시 메모리, 하드웨어, 펌웨어(firmware), 명령/원시적 주장들/파라미터들, 프로그램가능 레지스터들, 또는 그 다양한 조합들에 의해 정의된다.
일부 실시예들에서, 재활용기(recycler)(251)는 불필요 데이터(garbage) 수집을 수행한다. 예를 들어, 일부 실시예들에서, 플래시 디바이스들(292)은 블록들이 재기록가능(re-writeable)하게 되기 전에 소거되어야 하는 블록들을 포함한다. 재활용기(251)는 예컨대, 맵(241)에 의해 유지되는 맵을 스캐닝(scanning)함으로써, 플래시 디바이스들(292)의 어느 부분들이 (예를 들어, 할당해제 대신에 할당된) 능동적인 사용 상태인지를 결정하고, 플래시 디바이스들(292)의 이용되지 않은(예를 들어, 할당해제된) 부분들이 그들을 소거함으로써 기록을 위해 이용가능하게 하는 것이 가능하게 된다. 또 다른 실시예들에서, 재활용기(251)는 플래시 디바이스들(292)의 더 큰 인접한 부분들이 기록을 위해 이용가능하게 하기 위하여, 플래시 디바이스들(292) 내에 저장된 데이터를 이동하는 것이 가능하게 된다.
CPU(271)는 SSD 제어기(200)의 다양한 부분들을 제어한다. CPU(271)는 CPU 코어(281)를 포함한다. 다양한 실시예들에 따르면, CPU 코어(281)는 하나 이상의 싱글-코어 또는 멀티-코어 프로세서들이다. 일부 실시예들에서, CPU 코어(281) 내의 개별적인 프로세서들의 코어들은 멀티-스레드(multi-thread) 된다. CPU 코어(281)는 명령어 및/또는 데이터 캐시(data cache)들 및/또는 메모리들을 포함한다. 예를 들어, 명령어 메모리는 SSD 제어기(200)를 제어하기 위하여 CPU 코어(281)가 소프트웨어(때때로 펌웨어라고 칭함)를 실행하는 것을 가능하게 하기 위한 명령어들을 포함한다. 일부 실시예들에서, CPU 코어(281)에 의해 실행되는 펌웨어의 일부 또는 전부는 플래시 디바이스들(292) 상에 저장된다.
다양한 실시예들에서, CPU(271)는 명령들이 진행 중에 있는 동안에 외부 인터페이스들(210)을 통해 수신되는 명령들을 추적 및 제어하기 위한 명령 관리부(273); 버퍼(231)의 할당 및 이용을 제어하기 위한 버퍼 관리부(275); 맵(241)을 제어하기 위한 변환 관리부(277); 데이터 어드레싱의 일관성(consistency)을 제어하고 예컨대, 외부 데이터 액세스들 및 재활용 데이터 액세스들 사이에서 충돌(conflict)들을 회피하기 위한 일관성 관리부(279); 디바이스 인터페이스 로직(291)을 제어하기 위한 디바이스 관리부(282); 및 임의적인 다른 관리 유닛들을 더 포함한다. 다양한 실시예들에 따르면, CPU(271)에 의해 수행되는 관리 기능들 중 어느 것도 하드웨어, (외부 인터페이스들(210)을 통해 접속된 CPU 코어(281) 또는 호스트 상에서 실행되는 소프트웨어와 같은) 소프트웨어, 또는 그 임의의 조합에 의해 제어 및/또는 관리되지 않거나, CPU(271)에 의해 수행되는 관리 기능들 중 임의의 것 또는 전부는 하드웨어, (외부 인터페이스들(210)을 통해 접속된 CPU 코어(281) 또는 호스트 상에서 실행되는 소프트웨어와 같은) 소프트웨어, 또는 그 임의의 조합에 의해 제어 및/또는 관리된다.
일부 실시예들에서, CPU(271)는 성능 통계들의 수집 및/또는 보고; SMART 구현; 전력 시퀀싱(power sequencing)의 제어, 전력 소비의 제어 및/또는 감시 및/또는 조절; 전력 고장들에 대한 응답; 클록 레이트들의 제어 및/또는 감시 및/또는 조절; 및 다른 관리 작업들 중 하나 이상의 것과 같은 다른 관리 작업들을 수행하는 것이 가능하게 된다.
다양한 실시예들은 SSD 제어기(200)와 유사하고, 예컨대, 호스트 인터페이스(211) 및/또는 외부 인터페이스(210)의 적응을 통해 다양한 컴퓨팅 호스트들과의 동작과 호환성이 있는 컴퓨팅-호스트 플래시 메모리 제어기를 포함한다. 다양한 컴퓨팅 호스트들은 컴퓨터, 워크스테이션(workstation) 컴퓨터, 서버 컴퓨터, 저장 서버, PC, 랩톱 컴퓨터, 노트북 컴퓨터, 넷북 컴퓨터, PDA, 매체 플레이어, 매체 레코더, 디지털 카메라, 셀룰러 핸드셋, 무선 전화 핸드셋, 및 전자 게임 중 하나 또는 임의의 조합을 포함한다.
다양한 실시예들에서, SSD 제어기(또는 컴퓨팅-호스트 플래시 메모리 제어기)의 전부 또는 임의의 부분들은 단일 IC, 멀티-다이 IC의 단일 다이, 멀티-다이 IC의 복수의 다이들, 또는 복수의 IC들 상에서 구현된다. 예를 들어, 버퍼(231)는 SSD 제어기(200)의 다른 구성요소들과 동일한 다이 상에서 구현된다. 또 다른 예를 들면, 버퍼(231)는 SSD 제어기(200)의 다른 구성요소들과는 상이한 다이 상에서 구현된다.
다양한 실시예들에서, SSD 제어기(200)의 구성요소들은 전체적으로 또는 부분적으로 도 1의 다양한 하드웨어 블록들(또는 하드웨어 블록들에 의해 수행되는 기능들)을 구현한다. 예를 들어, ECC(261)는 도 1의 에러 통계 수집/추적, 범용 인코더, 범용 디코더, 및/또는 코드 라이브러리 하드웨어 블록들에 의해 수행되는 하나 이상의 기능들을 구현한다. 또 다른 예를 들면, 디바이스 인터페이스 로직(291)은 도 1의 제어/인터페이스 하드웨어 블록에 의해 수행되는 하나 이상의 기능들을 구현하고, 비-휘발성 메모리(299)는 도 1의 플래시 유닛을 구현한다.
도 2b는 도 2a의 SSD를 포함하는 시스템의 또 다른 실시예의 선택된 세부사항들을 예시한다. SSD(201)는 디바이스 인터페이스들(290)을 통해 비-휘발성 메모리(299)에 결합된 SSD 제어기(200)를 포함한다. SSD는 외부 인터페이스들(210)을 통해 호스트(202)에 결합된다. 일부 실시예들에서, SSD(201)(또는 그 변형들)는 호스트(202)로서 동작하는 개시자(initiator)에 결합되는 SAS 드라이브 또는 SATA 드라이브에 대응한다.
도 2c는 도 2a의 SSD를 포함하는 시스템의 또 다른 실시예의 선택된 세부사항들을 예시한다. 도 2b에서와 같이, SSD(201)는 디바이스 인터페이스들(290)을 통해 비-휘발성 메모리(299)에 결합된 SSD 제어기(200)를 포함한다. SSD는 외부 인터페이스들(210)을 통해 차례로 중간 제어기(203)에 결합되고 그 다음으로, 중간 인터페이스들(204)를 통해 호스트(202)에 결합된다. 다양한 실시예들에서, SSD 제어기(200)는 RAID 제어기와 같은 다른 제어기들의 하나 이상의 중간 레벨들을 통해 호스트에 결합된다. 일부 실시예들에서, SSD(201)(또는 그 변형들)는 SAS 드라이브 또는 SATA 드라이브에 대응하고, 중간 제어기(203)는 개시자에 차례로 결합되는 확장기(expander)에 대응하거나, 대안적으로, 중간 제어기(203)는 확장기를 통해 개시자에 간접적으로 결합되는 브리지(bridge)에 대응한다.
다양한 실시예들에서, SSD 제어기 및/또는 컴퓨팅 호스트 플래시 메모리 제어기는 하나 이상의 비-휘발성 메모리들과 함께, USB 저장 부품, CF 저장 부품, MMC 저장 부품, SD 저장 부품, 메모리 스틱(Memory Stick) 저장 부품, 및 xD-픽처(picture) 카드 저장 부품과 같은 비-휘발성 저장 부품으로서 구현된다.
다양한 실시예들에서, SSD 제어기(또는 컴퓨팅-호스트 플래시 메모리 제어기)의 전부 또는 임의의 부분들, 또는 그 기능들은 제어기가 결합되어야 하는 호스트(예를 들어, 도 2c의 호스트(202))에서 구현된다. 다양한 실시예들에서, SSD 제어기(또는 컴퓨팅-호스트 플래시 메모리 제어기)의 전부 또는 임의의 부분들, 또는 그 기능들은 하드웨어(예를 들어, 로직 회로), 소프트웨어(예를 들어, 드라이버 프로그램), 또는 그 임의의 조합을 통해 구현된다. 예를 들어, (예컨대, 도 2a의 ECC(261)와 유사한) ECC 유닛의 기능성 또는 ECC 유닛과 연관된 기능성은 호스트 상의 소프트웨어를 통해 부분적으로 그리고 SSD 제어기 내의 하드웨어를 통해 부분적으로 구현된다. 또 다른 예를 들면, (예컨대, 도 2a의 재활용기(251)와 유사한) 재활용기 유닛의 기능성 또는 재활용기 유닛과 연관된 기능성은 호스트 상의 소프트웨어를 통해 부분적으로 그리고 컴퓨팅-호스트 플래시 메모리 제어기 내의 하드웨어를 통해 부분적으로 구현된다.
예시적인 구현 기술들
일부 실시예들에서, 플래시 메모리 기반 데이터 저장을 위한 적응적 ECC 기술들을 구현하는 시스템, 예를 들어, 도 1의 하드웨어 블록들, 컴퓨팅-호스트 플래시 메모리 제어기, 및/또는 (도 2a의 SSD 제어기(200)와 같은) SSD 제어기에 의해 수행되는 동작들의 전부 또는 일부들, 그리고 프로세서, 마이크로프로세서, 시스템-온-칩(system-on-a-chip), 주문형 집적회로(application-specific-integrated-circuit), 하드웨어 가속기, 또는 상기한 동작들의 전부 또는 일부들을 제공하는 다른 회로의 부분들의 다양한 조합들은, 컴퓨터 시스템에 의한 처리와 호환인 사양에 의해 특정된다. 상기 사양은 하드웨어 서술(description) 언어들, 회로 서술들, 넷리스트(netlist) 서술들, 마스크 서술들, 또는 레이아웃 서술들과 같은 다양한 서술들에 따른다. 예시적인 서술들은 Verilog, VHDL, SPICE를 포함하고, PSpice, IBIS, LEF, DEF, GDS-II, OASIS, 또는 다른 서술들과 같은 SPICE 변형들을 포함한다. 다양한 실시예들에서, 처리는 하나 이상의 집적 회로들 상의 포함을 위해 적당한 로직 및/또는 회로를 특정하거나 생성하거나, 확인하기 위해 해석(interpretation), 컴필레이션, 시뮬레이션 및 합성의 임의의 조합을 포함한다. 다양한 실시예들에 따르면, 각각의 집적 회로는 다양한 기술들에 따라 설계가능하고 및/또는 제조가능하다. 기술들은 (필드 또는 마스크 프로그램가능 게이트 어레이 집적 회로와 같은) 프로그램가능 기술, (전체적으로 또는 부분적으로 셀-기반 집적 회로와 같은) 반-커스텀(semi-custom) 기술, (실질적으로 특화된 집적 회로와 같은) 풀-커스텀(full-custom) 기술, 그 임의의 조합, 또는 집적 회로들의 설계 및/또는 제조와 호환인 임의의 다른 기술을 포함한다.
일부 실시예들에서, 그 내부에 저장된 명령어들의 세트를 갖는 컴퓨터 판독가능 매체에 의해 서술되는 동작들의 전부 또는 부분들의 다양한 조합들은 하나 이상의 프로그램 명령어들의 실행 및/또는 해독에 의해, 하나 이상의 소스(source) 및/또는 스크립트 언어 명령문(statement)들의 해독 및/또는 컴파일(compile)에 의해, 또는 프로그래밍 및/또는 스크립팅 언어 명령문들에서 표현된 정보를 컴파일, 변환, 및/또는 해독하여 생성되는 2진 명령어들의 실행에 의해 수행된다. 명령문들은 (C, C++, Fortran, Pascal, Ada, Java, VBscript, 및 Shell과 같은) 임의의 표준 프로그래밍 또는 스크립팅 언어와 호환이다. 프로그램 명령어들, 언어 명령문들, 또는 2진 명령어들 중 하나 이상은 임의적으로 하나 이상의 컴퓨터 판독가능 저장 매체 구성요소들 상에 저장된다. 다양한 실시예들에서, 프로그램 명령어들의 일부, 전부, 또는 다양한 부분들은 하나 이상의 기능들, 루틴들, 서브-루틴들, 인-라인(in-line) 루틴들, 절차들, 매크로(macro)들, 또는 그 부분들로서 실현된다.
결론
어떤 선택들은 텍스트 및 도면들을 준비하는 데 있어 단지 편의를 위해 상세한 설명에서 이루어졌고 반대로 지시되지 않는 한, 선택들은 그 자체로 설명된 실시예들의 구조 또는 동작에 관한 부가적인 정보를 전달하기 위한 것으로 이해되지 않아야 한다. 선택들의 예들은: 도면 번호에 대하여 사용되는 지정들의 특정 구성 또는 할당 및 실시예들의 특징들 및 구성요소들을 식별하고 참조하기 위해 사용되는 구성요소 식별자들(예를 들어, 도면번호들 또는 수치적 지정자들)의 특정 조직 또는 할당을 포함한다.
용어들 "포함하는" 또는 "포함한다"는 제한적이지 않은 범위의 논리 세트들을 설명하는 관념들로서 이해되고자 구체적으로 의도되고 특히 용어 "내에"에 의해 명시적으로 후속되지 않는 한 물리적 제한을 뜻하는 것으로 여겨지지 않는다.
상기한 실시예들이 설명 및 이해의 명확함을 위하여 다소 상세히 설명되었지만, 본 발명은 제공되는 세부사항들에 제한되지 않는다. 본 발명의 많은 실시예들이 존재한다. 개시된 실시예들은 예시적이고 제한적이지 않다.
구성, 배치 및 이용에서의 다양한 변형들은 가능하면 설명과 일치하고 발생된 특허의 청구항들의 범위 내에 있음이 이해될 것이다. 예를 들어, 상호접속 및 기능-유닛 비트-폭들, 클록 스피드들 및 이용되는 기술의 유형은 각 컴포넌트 블록에서 다양한 실시예들에 따라 변할 수 있다. 상호접속 및 논리에 주어진 이름들은 단순히 예시적이고 설명된 개념들을 제한하는 것으로 이해되지 않아야 한다. 흐름도 및 플로우 다이어그램 프로세스, 동작 및 기능 구성요소들의 순서 및 배열은 다양한 실시예들에 따라 변할 수 있다. 또한, 명백히 반대로 언급되지 않는 한, 특정된 값 범위들, 사용된 최대 및 최소 값들, 또는 다른 특정 상세들(예를 들어, 플래시 메모리 기술 유형들; 및 레지스터들 및 버퍼들에서 엔트리들 또는 단계들의 수)은 단순히 설명된 실시예들의 그것들이고, 구현 기술에서 향상들 및 변경들을 트래킹하도록 예측되고, 제한들로서 이해되지 않아야 한다.
당업계에 알려진 기능성 균등 기술들은 다양한 부품들, 서브-시스템들, 동작들, 기능들, 루틴들, 서브-루틴들, 인-라인 루틴들, 절차들, 매크로들 또는 이들의 부분들을 구현하기 위해 설명된 기술들 대신에 이용가능하다. 또한 실시예들의 많은 기능적 양상들이 더 빠른 처리(하드웨어에서의 이전의 기능들의 소프트웨어로의 구현을 용이하게 함) 및 더 높은 집적도(소프트웨어에서의 이전의 기능들의 하드웨어로의 구현을 용이하게 함)의 실시예 의존 설계 제약들 및 기술 트렌드들의 함수로서 하드웨어(즉, 일반적으로 전용 회로) 또는 소프트웨어(즉, 프로그램된 컨트롤러 또는 프로세서의 임의의 방식을 통해)에서 선택적으로 구현가능함이 또한 이해될 것이다. 다양한 실시예들에서 특정 변형들은 파티셔닝(partitioning)에서 차이들; 상이한 폼 팩터들 및 구성들; 상이한 동작 시스템들 및 다른 시스템 소프트웨어의 사용; 상이한 인터페이스 표준들, 네트워크 프로토콜들 또는 통신 링크들의 사용; 및 특정 애플리케이션의 고유 엔지니어링 및 비지니스 제약들에 따라 본 명세서에서 설명된 개념들을 구현할 때 예상되는 다른 변형들을 포함하지만 이에 제한되지 않는다.
실시예들은 설명된 실시예들의 많은 양상들의 최소 구현을 위해 요구되는 것을 훨씬 넘어선 상세 및 환경적 맥락으로 설명되었다. 당업자는 일부 실시예들이 남아있는 구성요소들 사이에서 기본 협조를 변경함이 없이 개시된 컴포넌트들 또는 특징을 생략함을 인식할 것이다. 따라서, 개시된 세부사항들의 대부분이 설명된 실시예들의 다양한 양상들을 구현하기 위해 요구되지 않음이 이해된다. 종래의 기술로부터 남아있는 구성요소들이 구분가능한 정도에서, 생략되는 컴포넌트들 및 특징들은 본 명세서에 설명된 개념들에 제한되지 않는다.
설계시 모든 이러한 변형들은 설명된 실시예들에 의해 전달되는 교시에 비해 사소한 변경들이다. 또한, 본 명세서에 설명된 실시예들은 다른 컴퓨팅 및 네트워크 응용들에 넓은 적용성을 가지고 설명된 실시예들의 특정 응용 또는 산업에 제한되지 않는 것을 이해해야 한다. 따라서, 본 발명은 이슈된 특허의 청구항들의 범위 내에 내포되는 모든 가능한 수정들 및 변경들을 포함하는 것으로 해석되어야 한다.

Claims (19)

  1. 플래시 메모리 기반 데이터 저장을 위한 시스템으로서,
    플래시 메모리의 부분에 대한 액세스들의 원시(raw) 비트 에러 레이트(BER : Bit Error Rate)를 동적으로 결정하는 것이 가능하게 된, 에러 통계 수집 및 추적을 위한 수단; 및
    복수의 에러 정정 코드들 중 동적으로 선택된 에러 정정 코드에 따라 인코딩하는 것이 가능하게 되고, 상기 원시 BER에 적어도 부분적으로 기초하여 상기 동적으로 선택된 에러 정정 코드를 동적으로 결정하는 것이 추가로 가능하게 된, 적응적 인코딩을 위한 수단
    을 포함하고,
    상기 에러 정정 코드들 중 제 1 에러 정정 코드에 따른 인코딩은, 상기 부분에 저장할, 상기 에러 정정 코드들 중 제 2 에러 정정 코드에 따라 인코딩할 때보다 적은 에러 정정 비트들의 수를 초래하고, 그리고 상기 적응적 인코딩을 위한 수단은 상기 부분의 수명 중 제 1 부분 동안에는 상기 제 1 에러 정정 코드를 선택하고 상기 수명 중 제 2 부분 동안에는 상기 제 2 에러 정정 코드를 선택하는 것이 추가로 가능하게 되고, 상기 제 2 부분은 상기 제 1 부분 이후에 있는,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 제 1 에러 정정 코드에 따라 인코딩할 때, 사용자 데이터로서 이용되는 상기 부분의 비트들의 수는, 상기 제 2 에러 정정 코드에 의해 이용되는 에러 정정 비트들의 수에서 상기 제 1 에러 정정 코드에 의해 이용되는 에러 정정 비트들의 수를 마이너스(minus)한 차이에 이를 때까지 증가되는,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  4. 제 1 항에 있어서,
    상기 제 2 에러 정정 코드에 따라 인코딩할 때, 사용자 데이터로서 이용되는 상기 부분의 비트들의 수는, 상기 제 2 에러 정정 코드에 의해 이용되는 에러 정정 비트들의 수에서 상기 제 1 에러 정정 코드에 의해 이용되는 에러 정정 비트들의 수를 마이너스한 차이에 이를 때까지 감소되는,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  5. 삭제
  6. 제 1 항에 있어서,
    상기 에러 통계 수집 및 추적을 위한 수단, 상기 적응적 인코딩을 위한 수단 중 하나 또는 그 초과는 하드웨어 로직 회로 또는 하나 또는 그 초과의 소프트웨어 루틴들 중 적어도 하나를 통해 적어도 부분적으로 구현되는,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  7. 플래시 메모리 기반 데이터 저장을 위한 시스템으로서,
    플래시 메모리의 부분에 대한 액세스들의 원시(raw) 비트 에러 레이트(BER : Bit Error Rate)를 동적으로 결정하는 것이 가능하게 된, 에러 통계 수집 및 추적을 위한 수단; 및
    적응적 인코딩을 위한 수단 및 적응적 디코딩을 위한 수단을 포함하는 적응적 인코딩/디코딩을 위한 수단
    을 포함하며,
    상기 적응적 인코딩을 위한 수단은, 복수의 에러 정정 코드들 중 제 1 선택된 에러 정정 코드에 따라 인코딩하는 것이 가능하게 되고,
    상기 적응적 디코딩을 위한 수단은, 상기 에러 정정 코드들 중 제 2 선택된 에러 정정 코드에 따라 디코딩하는 것이 가능하게 되고, 그리고
    상기 적응적 인코딩/디코딩을 위한 수단은, 상기 에러 통계 수집 및 추적을 위한 수단으로부터 수신된 정보에 적어도 부분적으로 기초하여, 상기 제 1 선택된 에러 정정 코드를 결정하는 것이 가능하게 된, 제어하기 위한 수단을 더 포함하고,
    상기 제 1 선택된 에러 정정 코드에 따라 인코딩하는 것은, 상기 부분에 저장할, 상기 제 2 선택된 에러 정정 코드에 따라 인코딩할 때보다 적은 에러 정정 비트들의 수를 초래하며, 그리고 상기 적응적 인코딩을 위한 수단은, 상기 부분의 수명 중 제 1 부분 동안에는 상기 제 1 선택된 에러 정정 코드를 선택하고 상기 수명 중 제 2 부분 동안에 상기 제 2 선택된 에러 정정 코드를 선택하는 것이 추가로 가능하게 되고, 상기 제 2 부분은 상기 제 1 부분 이후에 있는,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  8. 제 7 항에 있어서,
    상기 적응적 인코딩을 위한 수단은, 상기 에러 정정 코드들 중 임의의 것에 따라 인코딩하는 것이 가능하게 된 범용 인코딩을 위한 수단인,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  9. 제 7 항에 있어서,
    상기 적응적 디코딩을 위한 수단은, 상기 에러 정정 코드들 중 임의의 것에 따라 디코딩하는 것이 가능하게 된 범용 디코딩을 위한 수단인,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  10. 삭제
  11. 제 7 항에 있어서,
    상기 제 1 선택된 에러 정정 코드에 따라 인코딩할 때, 사용자 데이터로서 이용되는 상기 부분의 비트들의 수는, 상기 제 2 선택된 에러 정정 코드에 따라 인코딩할 때에 이용되는 에러 정정 비트들의 수에서, 상기 제 1 선택된 에러 정정 코드에 따라 인코딩할 때에 이용되는 에러 정정 비트들의 수를 마이너스(minus)한 차이에 이를 때가지 증가되는,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  12. 제 7 항에 있어서,
    상기 제 2 선택된 에러 정정 코드에 따라 인코딩할 때, 사용자 데이터로서 이용되는 상기 부분의 비트들의 수는, 상기 제 2 선택된 에러 정정 코드에 따라 인코딩할 때에 이용되는 에러 정정 비트들의 수에서, 상기 제 1 선택된 에러 정정 코드에 따라 인코딩할 때에 이용되는 에러 정정 비트들의 수를 마이너스한 차이에 이를 때까지 감소되는,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  13. 삭제
  14. 제 7 항에 있어서,
    상기 에러 통계 수집 및 추적을 위한 수단 및 상기 적응적 인코딩/디코딩을 위한 수단 중 하나 또는 그 초과는 하드웨어 로직 회로 또는 하나 또는 그 초과의 소프트웨어 루틴들 중 적어도 하나를 통해 적어도 부분적으로 구현되는,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  15. 플래시 메모리 기반 데이터 저장을 위한 시스템으로서,
    플래시 메모리의 복수의 부분들의 각각과 연관된 각각의 코드 레이트를 동적으로 결정하는 것이 가능하게 된, 동적 코드 레이트 선택을 위한 수단;
    각각의 결정된 코드 레이트들에 따라 동작가능한 인코딩을 위한 수단;
    상기 각각의 결정된 코드 레이트들에 따라 동작가능한 디코딩을 위한 수단
    을 포함하고, 상기 부분들 중 특정한 부분은, 상기 각각의 결정된 코드 레이트들 중 특정한 코드 레이트에 따라 상기 인코딩을 위한 수단에 의해 인코딩되는 데이터로 기록되며, 그 후에 상기 특정한 부분으로부터 판독되며, 상기 디코딩을 위한 수단에 의해 디코딩되고, 그리고, 상기 동적으로 결정하는 것은, 상대적으로 더 낮은 코드 레이트가 제 1 부분의 수명에 있어서 상대적으로 초기에(early) 상기 부분들 중 제 1 부분과 연관되는 결정 및, 상대적으로 더 높은 코드 레이트가 상기 수명에 있어서 상대적으로 후기에(late) 상기 제 1 부분과 연관되는 결정을 포함하는,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  16. 제 15 항에 있어서,
    상기 동적 코드 레이트 선택을 위한 수단은, 상기 부분들 중 하나 또는 그 초과의 것에 대한(per) 하나 또는 그 초과의 파라미터들, 또는 상기 파라미터들 중 하나 또는 그 초과의 것에 대한 하나 또는 그 초과의 이력들에 적어도 부분적으로 기초하여 각각의 코드 레이트를 동적으로 결정하는 것이 가능하게 되고, 상기 파라미터들은,
    정정된 에러들의 수,
    검출된 에러들의 수,
    프로그램/소거 사이클들의 수,
    판독 사이클들의 수,
    프로그램 시간,
    소거 시간,
    판독 시간,
    온도, 및
    임계 전압
    을 포함하는,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  17. 삭제
  18. 제 15 항에 있어서,
    상대적으로 더 낮은 코드 레이트에 따라 인코딩할 때, 사용자 데이터로서 이용되는 상기 제 1 부분의 비트들의 수는 상대적으로 더 높은 코드 레이트에 따라 인코딩할 때보다 더 큰,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
  19. 제 15 항에 있어서,
    상기 동적 코드 레이트 선택을 위한 수단, 상기 인코딩을 위한 수단, 및 상기 디코딩을 위한 수단 중 하나 또는 그 초과는 하드웨어 로직 회로 또는 하나 또는 그 초과의 소프트웨어 루틴들 중 적어도 하나를 통해 적어도 부분적으로 구현되는,
    플래시 메모리 기반 데이터 저장을 위한 시스템.
KR1020137013372A 2010-10-27 2011-10-26 플래시 메모리 기반 데이터 저장을 위한 적응적 ecc 기술들 KR101606718B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US40717810P 2010-10-27 2010-10-27
US61/407,178 2010-10-27
PCT/US2011/057914 WO2012058328A1 (en) 2010-10-27 2011-10-26 Adaptive ecc techniques for flash memory based data storage

Publications (2)

Publication Number Publication Date
KR20130096753A KR20130096753A (ko) 2013-08-30
KR101606718B1 true KR101606718B1 (ko) 2016-03-28

Family

ID=45994376

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137013372A KR101606718B1 (ko) 2010-10-27 2011-10-26 플래시 메모리 기반 데이터 저장을 위한 적응적 ecc 기술들

Country Status (7)

Country Link
US (2) US20140136927A1 (ko)
EP (1) EP2633409A4 (ko)
JP (1) JP2013542533A (ko)
KR (1) KR101606718B1 (ko)
CN (1) CN103329103B (ko)
TW (1) TWI512452B (ko)
WO (1) WO2012058328A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102076624B1 (ko) 2018-12-06 2020-02-12 한국외국어대학교 연구산학협력단 플래시 메모리 기반의 저장 시스템 및 이의 에러 보정 방법
US11418217B2 (en) 2020-05-29 2022-08-16 SK Hynix Inc. Error correction circuit and error correction encoding method

Families Citing this family (192)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8762620B2 (en) 2007-12-27 2014-06-24 Sandisk Enterprise Ip Llc Multiprocessor storage controller
US8241425B2 (en) * 2009-01-23 2012-08-14 Axcelis Technologies, Inc. Non-condensing thermos chuck
WO2011080768A1 (en) * 2009-12-29 2011-07-07 Ferdinando Bedeschi Memory devices comprising partitions with particular ecc attributes
KR101541040B1 (ko) 2010-03-12 2015-08-03 엘에스아이 코포레이션 플래시 메모리들을 위한 ldpc 소거 디코딩
JP5980798B2 (ja) 2010-12-01 2016-08-31 シーゲイト テクノロジー エルエルシーSeagate Technology LLC 独立したシリコン素子の動的な上位レベルの冗長モード管理
JP5720210B2 (ja) * 2010-12-02 2015-05-20 富士通株式会社 アクセス制御装置、誤り訂正制御方法およびストレージ装置
US8719663B2 (en) 2010-12-12 2014-05-06 Lsi Corporation Cross-decoding for non-volatile storage
EP2666091A2 (en) 2011-01-18 2013-11-27 LSI Corporation Higher-level redundancy information computation
US9130596B2 (en) * 2011-06-29 2015-09-08 Seagate Technology Llc Multiuse data channel
US9189329B1 (en) * 2011-10-13 2015-11-17 Marvell International Ltd. Generating error correcting code (ECC) data using an ECC corresponding to an identified ECC protection level
US8793543B2 (en) 2011-11-07 2014-07-29 Sandisk Enterprise Ip Llc Adaptive read comparison signal generation for memory systems
US9048876B2 (en) 2011-11-18 2015-06-02 Sandisk Enterprise Ip Llc Systems, methods and devices for multi-tiered error correction
US8954822B2 (en) 2011-11-18 2015-02-10 Sandisk Enterprise Ip Llc Data encoder and decoder using memory-specific parity-check matrix
US9183085B1 (en) 2012-05-22 2015-11-10 Pmc-Sierra, Inc. Systems and methods for adaptively selecting from among a plurality of error correction coding schemes in a flash drive for robustness and low latency
US9176812B1 (en) 2012-05-22 2015-11-03 Pmc-Sierra, Inc. Systems and methods for storing data in page stripes of a flash drive
US8856431B2 (en) 2012-08-02 2014-10-07 Lsi Corporation Mixed granularity higher-level redundancy for non-volatile memory
JP2014035673A (ja) * 2012-08-09 2014-02-24 Renesas Electronics Corp 半導体記憶装置及び方法
US9699263B1 (en) 2012-08-17 2017-07-04 Sandisk Technologies Llc. Automatic read and write acceleration of data accessed by virtual machines
US8972826B2 (en) * 2012-10-24 2015-03-03 Western Digital Technologies, Inc. Adaptive error correction codes for data storage systems
WO2014070200A1 (en) * 2012-11-02 2014-05-08 Hewlett-Packard Development Company, L.P. Selective error correcting code and memory access granularity switching
US9021339B2 (en) 2012-11-29 2015-04-28 Western Digital Technologies, Inc. Data reliability schemes for data storage systems
US9059736B2 (en) 2012-12-03 2015-06-16 Western Digital Technologies, Inc. Methods, solid state drive controllers and data storage devices having a runtime variable raid protection scheme
US9257203B2 (en) 2012-12-06 2016-02-09 Micron Technology, Inc. Setting a default read signal based on error correction
US9214963B1 (en) 2012-12-21 2015-12-15 Western Digital Technologies, Inc. Method and system for monitoring data channel to enable use of dynamically adjustable LDPC coding parameters in a data storage system
US9501398B2 (en) 2012-12-26 2016-11-22 Sandisk Technologies Llc Persistent storage device with NVRAM for staging writes
US9239751B1 (en) 2012-12-27 2016-01-19 Sandisk Enterprise Ip Llc Compressing data from multiple reads for error control management in memory systems
US9612948B2 (en) 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US9454420B1 (en) 2012-12-31 2016-09-27 Sandisk Technologies Llc Method and system of reading threshold voltage equalization
US9870830B1 (en) 2013-03-14 2018-01-16 Sandisk Technologies Llc Optimal multilevel sensing for reading data from a storage medium
US9136877B1 (en) 2013-03-15 2015-09-15 Sandisk Enterprise Ip Llc Syndrome layered decoding for LDPC codes
US9208018B1 (en) * 2013-03-15 2015-12-08 Pmc-Sierra, Inc. Systems and methods for reclaiming memory for solid-state memory
US9236886B1 (en) 2013-03-15 2016-01-12 Sandisk Enterprise Ip Llc Universal and reconfigurable QC-LDPC encoder
US9092350B1 (en) 2013-03-15 2015-07-28 Sandisk Enterprise Ip Llc Detection and handling of unbalanced errors in interleaved codewords
US9244763B1 (en) 2013-03-15 2016-01-26 Sandisk Enterprise Ip Llc System and method for updating a reading threshold voltage based on symbol transition information
US9367246B2 (en) 2013-03-15 2016-06-14 Sandisk Technologies Inc. Performance optimization of data transfer for soft information generation
KR102102171B1 (ko) * 2013-04-05 2020-05-29 삼성전자 주식회사 멀티 레벨 셀 메모리 시스템
CN103269230B (zh) * 2013-05-28 2017-02-22 中国科学院自动化研究所 一种自适应调整纠错码的容错系统及方法
US9159437B2 (en) 2013-06-11 2015-10-13 Sandisk Enterprise IP LLC. Device and method for resolving an LM flag issue
US9152488B2 (en) * 2013-06-25 2015-10-06 Sandisk Technologies Inc. Storage module and low-complexity methods for assessing the health of a flash memory device
US20160139807A1 (en) * 2013-07-09 2016-05-19 Hewlett-Packard Development Company, L.P. Write flow control for memory modules that include or interface with non-compliant memory technologies
US9524235B1 (en) 2013-07-25 2016-12-20 Sandisk Technologies Llc Local hash value generation in non-volatile data storage systems
US9384126B1 (en) 2013-07-25 2016-07-05 Sandisk Technologies Inc. Methods and systems to avoid false negative results in bloom filters implemented in non-volatile data storage systems
US20150058697A1 (en) * 2013-08-22 2015-02-26 Kabushiki Kaisha Toshiba Storage device, controller and memory controlling method
US9361221B1 (en) 2013-08-26 2016-06-07 Sandisk Technologies Inc. Write amplification reduction through reliable writes during garbage collection
US9639463B1 (en) 2013-08-26 2017-05-02 Sandisk Technologies Llc Heuristic aware garbage collection scheme in storage systems
US10102060B2 (en) * 2013-08-30 2018-10-16 Hitachi, Ltd. Storage apparatus and data control method of storing data with an error correction code
US9442670B2 (en) 2013-09-03 2016-09-13 Sandisk Technologies Llc Method and system for rebalancing data stored in flash memory devices
US9519577B2 (en) 2013-09-03 2016-12-13 Sandisk Technologies Llc Method and system for migrating data between flash memory devices
US9158349B2 (en) 2013-10-04 2015-10-13 Sandisk Enterprise Ip Llc System and method for heat dissipation
US9298608B2 (en) 2013-10-18 2016-03-29 Sandisk Enterprise Ip Llc Biasing for wear leveling in storage systems
US9442662B2 (en) 2013-10-18 2016-09-13 Sandisk Technologies Llc Device and method for managing die groups
US9436831B2 (en) 2013-10-30 2016-09-06 Sandisk Technologies Llc Secure erase in a memory device
US9263156B2 (en) 2013-11-07 2016-02-16 Sandisk Enterprise Ip Llc System and method for adjusting trip points within a storage device
US9244785B2 (en) 2013-11-13 2016-01-26 Sandisk Enterprise Ip Llc Simulated power failure and data hardening
US9703816B2 (en) 2013-11-19 2017-07-11 Sandisk Technologies Llc Method and system for forward reference logging in a persistent datastore
US9520197B2 (en) 2013-11-22 2016-12-13 Sandisk Technologies Llc Adaptive erase of a storage device
US9520162B2 (en) 2013-11-27 2016-12-13 Sandisk Technologies Llc DIMM device controller supervisor
US9582058B2 (en) 2013-11-29 2017-02-28 Sandisk Technologies Llc Power inrush management of storage devices
US9235245B2 (en) 2013-12-04 2016-01-12 Sandisk Enterprise Ip Llc Startup performance and power isolation
US9645924B2 (en) * 2013-12-16 2017-05-09 International Business Machines Corporation Garbage collection scaling
US9280419B2 (en) 2013-12-16 2016-03-08 International Business Machines Corporation Dynamic adjustment of data protection schemes in flash storage systems based on temperature, power off duration and flash age
US9129665B2 (en) 2013-12-17 2015-09-08 Sandisk Enterprise Ip Llc Dynamic brownout adjustment in a storage device
US9417960B2 (en) * 2013-12-20 2016-08-16 Seagate Technology Llc Preventing programming errors from occurring when programming flash memory cells
US8874835B1 (en) 2014-01-16 2014-10-28 Pure Storage, Inc. Data placement based on data properties in a tiered storage device system
JP2015138498A (ja) * 2014-01-24 2015-07-30 三菱電機株式会社 フラッシュメモリの誤り訂正符号化装置および方法
US9549457B2 (en) 2014-02-12 2017-01-17 Sandisk Technologies Llc System and method for redirecting airflow across an electronic assembly
US9703636B2 (en) 2014-03-01 2017-07-11 Sandisk Technologies Llc Firmware reversion trigger and control
US9454448B2 (en) 2014-03-19 2016-09-27 Sandisk Technologies Llc Fault testing in storage devices
US9390814B2 (en) 2014-03-19 2016-07-12 Sandisk Technologies Llc Fault detection and prediction for data storage elements
US9448876B2 (en) 2014-03-19 2016-09-20 Sandisk Technologies Llc Fault detection and prediction in storage devices
US9626400B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Compaction of information in tiered data structure
US9390021B2 (en) 2014-03-31 2016-07-12 Sandisk Technologies Llc Efficient cache utilization in a tiered data structure
US9626399B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Conditional updates for reducing frequency of data modification operations
US9697267B2 (en) 2014-04-03 2017-07-04 Sandisk Technologies Llc Methods and systems for performing efficient snapshots in tiered data structures
US9419655B2 (en) * 2014-04-04 2016-08-16 Seagate Technology Llc Error correction code (ECC) selection using probability density functions of error correction capability in storage controllers with multiple error correction codes
TWI545581B (zh) * 2014-04-15 2016-08-11 群聯電子股份有限公司 資料寫入方法、記憶體儲存裝置及記憶體控制電路單元
CN105005450B (zh) * 2014-04-25 2018-11-02 群联电子股份有限公司 数据写入方法、存储器存储装置及存储器控制电路单元
US9257186B2 (en) 2014-05-08 2016-02-09 Sandisk Technologies Inc. Memory access techniques for a memory having a three-dimensional memory configuration
US9244764B2 (en) * 2014-05-08 2016-01-26 Sandisk Technologies Inc. Error correcting code techniques for a memory having a three-dimensional memory configuration
US10146448B2 (en) 2014-05-30 2018-12-04 Sandisk Technologies Llc Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device
US9645749B2 (en) 2014-05-30 2017-05-09 Sandisk Technologies Llc Method and system for recharacterizing the storage density of a memory device or a portion thereof
US9703491B2 (en) 2014-05-30 2017-07-11 Sandisk Technologies Llc Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device
US9093160B1 (en) 2014-05-30 2015-07-28 Sandisk Technologies Inc. Methods and systems for staggered memory operations
US10656840B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Real-time I/O pattern recognition to enhance performance and endurance of a storage device
US10114557B2 (en) 2014-05-30 2018-10-30 Sandisk Technologies Llc Identification of hot regions to enhance performance and endurance of a non-volatile storage device
US9070481B1 (en) 2014-05-30 2015-06-30 Sandisk Technologies Inc. Internal current measurement for age measurements
US10656842B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device
US8891303B1 (en) 2014-05-30 2014-11-18 Sandisk Technologies Inc. Method and system for dynamic word line based configuration of a three-dimensional memory device
US10162748B2 (en) 2014-05-30 2018-12-25 Sandisk Technologies Llc Prioritizing garbage collection and block allocation based on I/O history for logical address regions
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US10116336B2 (en) 2014-06-13 2018-10-30 Sandisk Technologies Llc Error correcting code adjustment for a data storage device
US9652381B2 (en) 2014-06-19 2017-05-16 Sandisk Technologies Llc Sub-block garbage collection
US9766972B2 (en) 2014-08-07 2017-09-19 Pure Storage, Inc. Masking defective bits in a storage array
US10983859B2 (en) 2014-08-07 2021-04-20 Pure Storage, Inc. Adjustable error correction based on memory health in a storage unit
US9558069B2 (en) 2014-08-07 2017-01-31 Pure Storage, Inc. Failure mapping in a storage array
US9082512B1 (en) 2014-08-07 2015-07-14 Pure Storage, Inc. Die-level monitoring in a storage cluster
GB2529670A (en) * 2014-08-28 2016-03-02 Ibm Storage system
TWI550615B (zh) * 2014-08-28 2016-09-21 群聯電子股份有限公司 資料存取方法、記憶體儲存裝置及記憶體控制電路單元
GB2529669B8 (en) 2014-08-28 2017-03-15 Ibm Storage system
US9158681B1 (en) 2014-09-02 2015-10-13 Sandisk Technologies Inc. Process and apparatus to reduce declared capacity of a storage device by conditionally trimming
US9524112B2 (en) 2014-09-02 2016-12-20 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by trimming
US9582220B2 (en) * 2014-09-02 2017-02-28 Sandisk Technologies Llc Notification of trigger condition to reduce declared capacity of a storage device in a multi-storage-device storage system
US9582193B2 (en) 2014-09-02 2017-02-28 Sandisk Technologies Llc Triggering a process to reduce declared capacity of a storage device in a multi-storage-device storage system
US9582203B2 (en) * 2014-09-02 2017-02-28 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by reducing a range of logical addresses
US9582212B2 (en) 2014-09-02 2017-02-28 Sandisk Technologies Llc Notification of trigger condition to reduce declared capacity of a storage device
US9519427B2 (en) 2014-09-02 2016-12-13 Sandisk Technologies Llc Triggering, at a host system, a process to reduce declared capacity of a storage device
US9582202B2 (en) 2014-09-02 2017-02-28 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by moving data
US9652153B2 (en) 2014-09-02 2017-05-16 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by reducing a count of logical addresses
US9563362B2 (en) 2014-09-02 2017-02-07 Sandisk Technologies Llc Host system and process to reduce declared capacity of a storage device by trimming
US9552166B2 (en) 2014-09-02 2017-01-24 Sandisk Technologies Llc. Process and apparatus to reduce declared capacity of a storage device by deleting data
US9665311B2 (en) 2014-09-02 2017-05-30 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by making specific logical addresses unavailable
US9563370B2 (en) 2014-09-02 2017-02-07 Sandisk Technologies Llc Triggering a process to reduce declared capacity of a storage device
US9524105B2 (en) 2014-09-02 2016-12-20 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by altering an encoding format
US9443601B2 (en) 2014-09-08 2016-09-13 Sandisk Technologies Llc Holdup capacitor energy harvesting
US9690655B2 (en) 2014-09-30 2017-06-27 EMC IP Holding Company LLC Method and system for improving flash storage utilization by predicting bad m-pages
US10365859B2 (en) * 2014-10-21 2019-07-30 International Business Machines Corporation Storage array management employing a merged background management process
CN105528178B (zh) * 2014-10-21 2018-09-21 华为技术有限公司 数据存储方法及固态硬盘
JP6486647B2 (ja) * 2014-10-28 2019-03-20 株式会社メガチップス エラー訂正装置
TWI520140B (zh) * 2014-11-03 2016-02-01 慧榮科技股份有限公司 資料儲存裝置以及快閃記憶體控制方法
US10067823B2 (en) * 2014-12-04 2018-09-04 Western Digital Technologies, Inc. Systems and methods for adaptive error corrective code mechanisms
US10691531B2 (en) * 2014-12-04 2020-06-23 Western Digital Technologies, Inc. Systems and methods for multi-zone data tiering for endurance extension in solid state drives
CN106415502B (zh) * 2014-12-12 2019-07-12 华为技术有限公司 数据存储的方法和装置
US9658800B2 (en) * 2014-12-22 2017-05-23 Sandisk Technologies Llc End of life prediction based on memory wear
US10339048B2 (en) 2014-12-23 2019-07-02 International Business Machines Corporation Endurance enhancement scheme using memory re-evaluation
US9990279B2 (en) 2014-12-23 2018-06-05 International Business Machines Corporation Page-level health equalization
US9595979B2 (en) * 2015-01-20 2017-03-14 International Business Machines Corporation Multiple erasure codes for distributed storage
TWI555028B (zh) * 2015-02-12 2016-10-21 慧榮科技股份有限公司 資料儲存裝置以及錯誤校正方法
JP6294251B2 (ja) * 2015-02-26 2018-03-14 ファナック株式会社 誤り訂正機能による寿命予測を有する制御装置
US9768808B2 (en) 2015-04-08 2017-09-19 Sandisk Technologies Llc Method for modifying device-specific variable error correction settings
US9792053B2 (en) 2015-04-30 2017-10-17 Toshiba Memory Corporation Controller for nonvolatile semiconductor memory
US9606737B2 (en) 2015-05-20 2017-03-28 Sandisk Technologies Llc Variable bit encoding per NAND flash cell to extend life of flash-based storage devices and preserve over-provisioning
US9639282B2 (en) 2015-05-20 2017-05-02 Sandisk Technologies Llc Variable bit encoding per NAND flash cell to improve device endurance and extend life of flash-based storage devices
US10439650B2 (en) * 2015-05-27 2019-10-08 Quantum Corporation Cloud-based solid state device (SSD) with dynamically variable error correcting code (ECC) system
KR102324769B1 (ko) * 2015-06-29 2021-11-10 삼성전자주식회사 반도체 메모리 장치의 에러 정정 회로, 반도체 메모리 장치 및 이를 포함하는 메모리 시스템
US9727416B2 (en) * 2015-07-01 2017-08-08 Xilinx, Inc. Variable code rate solid-state drive
JP6657634B2 (ja) 2015-07-24 2020-03-04 ソニー株式会社 符号化装置、メモリシステム、通信システムおよび符号化方法
US10133625B2 (en) 2015-08-11 2018-11-20 Western Digital Technologies, Inc. Storing parity data separate from protected data
FR3040523B1 (fr) 2015-08-28 2018-07-13 Continental Automotive France Procede de detection d'une erreur non corrigible dans une memoire non volatile d'un microcontroleur
US20170126249A1 (en) * 2015-10-30 2017-05-04 Intel Corporation Temperature dependent multiple mode error correction
US9946473B2 (en) 2015-12-03 2018-04-17 Sandisk Technologies Llc Efficiently managing unmapped blocks to extend life of solid state drive
US9830084B2 (en) 2015-12-03 2017-11-28 Sandisk Technologies Llc Writing logical groups of data to physical locations in memory using headers
US10013179B2 (en) 2015-12-03 2018-07-03 Sandisk Technologies Llc Reading logical groups of data from physical locations in memory using headers
US9946483B2 (en) 2015-12-03 2018-04-17 Sandisk Technologies Llc Efficiently managing unmapped blocks to extend life of solid state drive with low over-provisioning
CN106970852A (zh) * 2016-01-14 2017-07-21 钰创科技股份有限公司 闪存错误控制电路及其方法
JP6605359B2 (ja) * 2016-03-02 2019-11-13 ルネサスエレクトロニクス株式会社 半導体装置及びメモリアクセス制御方法
US9761325B1 (en) * 2016-03-14 2017-09-12 Toshiba Memory Corporation Memory system
US10055159B2 (en) * 2016-06-20 2018-08-21 Samsung Electronics Co., Ltd. Morphic storage device
US9672905B1 (en) 2016-07-22 2017-06-06 Pure Storage, Inc. Optimize data protection layouts based on distributed flash wear leveling
US10650621B1 (en) 2016-09-13 2020-05-12 Iocurrents, Inc. Interfacing with a vehicular controller area network
JP6725375B2 (ja) 2016-09-14 2020-07-15 キオクシア株式会社 メモリシステムおよび方法
CN108255633B (zh) * 2016-12-28 2021-07-30 旺宏电子股份有限公司 存储控制方法、存储装置
US9747158B1 (en) 2017-01-13 2017-08-29 Pure Storage, Inc. Intelligent refresh of 3D NAND
KR20180086816A (ko) 2017-01-23 2018-08-01 에스케이하이닉스 주식회사 사전-검사된 에러율에 따른 적응형 에러정정을 수행하는 메모리장치 및 전자장치와, 메모리장치의 동작방법
US10908988B2 (en) 2017-04-03 2021-02-02 Hitachi, Ltd. Storage apparatus
US10346232B2 (en) 2017-08-16 2019-07-09 Western Digital Technologies, Inc. Non-volatile storage with failure prediction
CN107656831A (zh) * 2017-08-21 2018-02-02 深圳市致存微电子企业(有限合伙) 闪存纠错方法以及纠错装置
US20190196726A1 (en) * 2017-12-26 2019-06-27 Nanya Technology Corporation Dynamic random access memory and method of operating the same
US10949113B2 (en) * 2018-01-10 2021-03-16 SK Hynix Inc. Retention aware block mapping in flash-based solid state drives
JP6482690B1 (ja) * 2018-01-11 2019-03-13 ウィンボンド エレクトロニクス コーポレーション 半導体記憶装置
US10644727B2 (en) 2018-01-11 2020-05-05 Western Digital Technologies, Inc. Code rate switching mechanism for flash memory
CN108287794A (zh) * 2018-01-26 2018-07-17 国科美国研究实验室 Nand闪存的动态管理方法
CN108363639B (zh) * 2018-02-07 2022-04-05 置富科技(深圳)股份有限公司 一种参数可配置的动态bch纠错方法及装置
US10656847B2 (en) * 2018-05-10 2020-05-19 International Business Machines Corporation Mitigating asymmetric transient errors in non-volatile memory by proactive data relocation
US10747613B2 (en) * 2018-09-07 2020-08-18 Toshiba Memory Corporation Pooled frontline ECC decoders in memory systems
KR20200034420A (ko) * 2018-09-21 2020-03-31 삼성전자주식회사 복수의 에러 정정 기능을 갖는 메모리 장치 및 메모리 시스템과 그 동작 방법
US11163886B2 (en) 2018-09-28 2021-11-02 Dell Products L.P. Information handling system firmware bit error detection and correction
US10783024B2 (en) 2018-10-12 2020-09-22 International Business Machines Corporation Reducing block calibration overhead using read error triage
TWI673613B (zh) * 2018-10-17 2019-10-01 財團法人工業技術研究院 伺服器及其資源調控方法
TWI668699B (zh) * 2018-10-25 2019-08-11 群聯電子股份有限公司 資料儲存方法、記憶體控制電路單元以及記憶體儲存裝置
CN109872764B (zh) * 2019-01-18 2021-01-08 南京大学 一种多级存储单元闪存的ecc多码率编解码系统及方法
US11137910B2 (en) * 2019-03-04 2021-10-05 Advantest Corporation Fast address to sector number/offset translation to support odd sector size testing
KR102601152B1 (ko) * 2019-05-10 2023-11-13 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
CN110310692A (zh) * 2019-06-28 2019-10-08 上海华虹集成电路有限责任公司 一种增强使用寿命的非易失性存储器擦除控制方法
US11088711B2 (en) 2019-07-08 2021-08-10 Winbond Electronics Corp. Memory apparatus and data accessing method thereof
KR20210025249A (ko) * 2019-08-27 2021-03-09 삼성전자주식회사 메모리 시스템 및 그 동작 방법
US11200118B2 (en) 2019-08-29 2021-12-14 Micron Technology, Inc. Semiconductor device with modified command and associated methods and systems
US11042436B2 (en) 2019-08-29 2021-06-22 Micron Technology, Inc. Semiconductor device with modified access and associated methods and systems
US10963336B2 (en) 2019-08-29 2021-03-30 Micron Technology, Inc. Semiconductor device with user defined operations and associated methods and systems
TWI723515B (zh) * 2019-08-29 2021-04-01 華邦電子股份有限公司 記憶體裝置及其資料存取方法
KR20210085284A (ko) 2019-12-30 2021-07-08 삼성전자주식회사 Pim 메모리 디바이스, pim 메모리 디바이스를 포함하는 컴퓨팅 시스템 및 pim 메모리 디바이스의 동작 방법
JP2021141369A (ja) * 2020-03-02 2021-09-16 キオクシア株式会社 メモリシステム
CN113051100B (zh) * 2020-06-01 2024-05-17 长江存储科技有限责任公司 一种闪存存储器及其错误比特计数检测系统
CN111863080A (zh) * 2020-07-08 2020-10-30 上海威固信息技术股份有限公司 一种基于层间差异的3d闪存读性能优化方法
CN113094296B (zh) * 2021-04-29 2023-10-10 深圳忆联信息系统有限公司 Ssd读加速的实现方法、装置、计算机设备及存储介质
WO2023047149A1 (en) * 2021-09-23 2023-03-30 Micron Technology, Inc. Improved ecc configuration in memories
US11704027B2 (en) * 2021-11-12 2023-07-18 Western Digital Technologies, Inc. Optimizing recovery of recurrent blocks using bloom filter
US11853607B2 (en) 2021-12-22 2023-12-26 Western Digital Technologies, Inc. Optimizing flash memory utilization for NVMe KV pair storage
US11817883B2 (en) 2021-12-27 2023-11-14 Western Digital Technologies, Inc. Variable length ECC code according to value length in NVMe key value pair devices
US11733876B2 (en) 2022-01-05 2023-08-22 Western Digital Technologies, Inc. Content aware decoding in KV devices
CN114637712B (zh) * 2022-03-18 2023-03-10 无锡众星微系统技术有限公司 一种EDFB模式下SAS2SATA Bridge的错误处理方法和装置
US20230393932A1 (en) * 2022-06-02 2023-12-07 Micron Technology, Inc. Managing data integrity using a change in a number of data errors and an amount of time in which the change occurred
TWI836610B (zh) * 2022-09-19 2024-03-21 慧榮科技股份有限公司 存取快閃記憶體模組的方法與相關的快閃記憶體控制器及記憶裝置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003131954A (ja) 2001-08-16 2003-05-09 Hewlett Packard Co <Hp> 動的可変長誤り訂正符号
JP2005216301A (ja) 2004-01-29 2005-08-11 Hewlett-Packard Development Co Lp 誤り訂正符号を有する固体記憶装置を構成するシステムおよび方法

Family Cites Families (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1235189A (en) * 1985-01-14 1988-04-12 Haruhiko Akiyama Error correction encoding system
US5644312A (en) * 1994-11-30 1997-07-01 Analog Devices, Inc. Rom encoder circuit for flash ADC'S with transistor sizing to prevent sparkle errors
US5699365A (en) * 1996-03-27 1997-12-16 Motorola, Inc. Apparatus and method for adaptive forward error correction in data communications
US6043946A (en) * 1996-05-15 2000-03-28 Seagate Technology, Inc. Read error recovery utilizing ECC and read channel quality indicators
US6931009B1 (en) * 1997-07-15 2005-08-16 Viasat, Inc. Frame format and frame assembling/disassembling method for the frame format
US6477669B1 (en) * 1997-07-15 2002-11-05 Comsat Corporation Method and apparatus for adaptive control of forward error correction codes
US6182264B1 (en) * 1998-05-22 2001-01-30 Vlsi Technology, Inc. Smart dynamic selection of error correction methods for DECT based data services
US6957379B1 (en) * 1999-01-04 2005-10-18 Maxtor Corporation Method and apparatus for selecting storage capacity of data storage media
JP3699863B2 (ja) * 1999-07-12 2005-09-28 株式会社日立コミュニケーションテクノロジー エラー訂正符号装置、エラー訂正符号復号装置および伝送装置
CA2324574A1 (en) * 2000-10-26 2002-04-26 Bin Li An optimal bit allocation algorithm for reed-solomon coded data for adsl
US7290184B2 (en) * 2001-08-23 2007-10-30 Seagate Technology Llc Emulation system for evaluating digital data channel configurations
US8412879B2 (en) * 2002-10-28 2013-04-02 Sandisk Technologies Inc. Hybrid implementation for error correction codes within a non-volatile memory system
EP1665616A2 (en) * 2003-09-15 2006-06-07 Intel Corporation Multiple antenna systems and methods using high-throughput space-frequency block codes
JP2008508632A (ja) * 2004-08-02 2008-03-21 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ データ記憶及び再生装置
KR100732628B1 (ko) * 2005-07-28 2007-06-27 삼성전자주식회사 멀티-비트 데이터 및 싱글-비트 데이터를 저장하는 플래시메모리 장치
US7526715B2 (en) * 2005-10-17 2009-04-28 Ramot At Tel Aviv University Ltd. Probabilistic error correction in multi-bit-per-cell flash memory
US8055979B2 (en) * 2006-01-20 2011-11-08 Marvell World Trade Ltd. Flash memory with coding and signal processing
US7809994B2 (en) * 2006-05-17 2010-10-05 Sandisk Corporation Error correction coding for multiple-sector pages in flash memory devices
JP2007316779A (ja) * 2006-05-23 2007-12-06 Sharp Corp 不揮発性メモリシステム
US7739576B2 (en) * 2006-08-31 2010-06-15 Micron Technology, Inc. Variable strength ECC
US8171380B2 (en) * 2006-10-10 2012-05-01 Marvell World Trade Ltd. Adaptive systems and methods for storing and retrieving data to and from memory cells
US9116823B2 (en) * 2006-12-06 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for adaptive error-correction coding
CN100458718C (zh) * 2006-12-29 2009-02-04 福昭科技(深圳)有限公司 一种闪存存储装置及其数据读取和写入方法
US7984360B2 (en) * 2006-12-31 2011-07-19 Ramot At Tel Aviv University Ltd. Avoiding errors in a flash memory by using substitution transformations
CN101256521B (zh) * 2007-03-01 2010-12-01 创惟科技股份有限公司 提高闪存资料存取可靠性的方法
US8122323B2 (en) * 2007-03-08 2012-02-21 Intel Corporation Method, apparatus, and system for dynamic ECC code rate adjustment
EP2188898A4 (en) * 2007-09-14 2011-11-02 Agency Science Tech & Res METHOD FOR ENCODING BIT SEQUENCE AND ENCODING CIRCUIT
JP4538034B2 (ja) * 2007-09-26 2010-09-08 株式会社東芝 半導体記憶装置、及びその制御方法
US8429492B2 (en) * 2007-11-30 2013-04-23 Marvell World Trade Ltd. Error correcting code predication system and method
US8335977B2 (en) * 2007-12-05 2012-12-18 Densbits Technologies Ltd. Flash memory apparatus and methods using a plurality of decoding stages including optional use of concatenated BCH codes and/or designation of “first below” cells
WO2009078006A2 (en) * 2007-12-18 2009-06-25 Densbits Technologies Ltd. Apparatus for coding at a plurality of rates in multi-level flash memory systems, and methods useful in conjunction therewith
KR101398212B1 (ko) * 2008-03-18 2014-05-26 삼성전자주식회사 메모리 장치 및 인코딩/디코딩 방법
JP2010092574A (ja) * 2008-10-12 2010-04-22 Kyoto Software Research Inc フラッシュファイルシステムの誤り訂正機能
US8442398B2 (en) * 2008-10-21 2013-05-14 Broadcom Corporation Performance monitoring in passive optical networks
US8407400B2 (en) * 2008-11-12 2013-03-26 Micron Technology, Inc. Dynamic SLC/MLC blocks allocations for non-volatile memory
KR101059673B1 (ko) * 2008-12-26 2011-08-25 서울대학교산학협력단 신뢰도 또는 저장 용량을 동적으로 조절하는 저장 장치 및 그 방법
US8370702B2 (en) * 2009-06-10 2013-02-05 Micron Technology, Inc. Error correcting codes for increased storage capacity in multilevel memory devices
US8495467B1 (en) * 2009-06-30 2013-07-23 Micron Technology, Inc. Switchable on-die memory error correcting engine
CN102098130A (zh) * 2009-12-15 2011-06-15 意法半导体研发(深圳)有限公司 具有高速度和高可靠性的高效动态传输
WO2011080768A1 (en) * 2009-12-29 2011-07-07 Ferdinando Bedeschi Memory devices comprising partitions with particular ecc attributes
US8327226B2 (en) * 2010-02-03 2012-12-04 Seagate Technology Llc Adjustable error correction code length in an electrical storage device
US8533550B2 (en) * 2010-06-29 2013-09-10 Intel Corporation Method and system to improve the performance and/or reliability of a solid-state drive
US8656256B2 (en) * 2010-07-07 2014-02-18 Stec, Inc. Apparatus and method for multi-mode operation of a flash memory device
US8832507B2 (en) * 2010-08-23 2014-09-09 Apple Inc. Systems and methods for generating dynamic super blocks
US8560922B2 (en) * 2011-03-04 2013-10-15 International Business Machines Corporation Bad block management for flash memory
KR101991911B1 (ko) * 2012-05-22 2019-06-24 삼성전자주식회사 비트 상태 맵핑 동작을 수행하는 코드 변조 인코더와 코드 변조 디코더를 포함하는 메모리 컨트롤러, 그것을 포함하는 데이터 저장 장치 및 플래시 메모리 시스템
US8898549B2 (en) * 2013-02-12 2014-11-25 Seagate Technology Llc Statistical adaptive error correction for a flash memory
US9026867B1 (en) * 2013-03-15 2015-05-05 Pmc-Sierra, Inc. Systems and methods for adapting to changing characteristics of multi-level cells in solid-state memory

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003131954A (ja) 2001-08-16 2003-05-09 Hewlett Packard Co <Hp> 動的可変長誤り訂正符号
JP2005216301A (ja) 2004-01-29 2005-08-11 Hewlett-Packard Development Co Lp 誤り訂正符号を有する固体記憶装置を構成するシステムおよび方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102076624B1 (ko) 2018-12-06 2020-02-12 한국외국어대학교 연구산학협력단 플래시 메모리 기반의 저장 시스템 및 이의 에러 보정 방법
US11418217B2 (en) 2020-05-29 2022-08-16 SK Hynix Inc. Error correction circuit and error correction encoding method

Also Published As

Publication number Publication date
US20160188405A1 (en) 2016-06-30
KR20130096753A (ko) 2013-08-30
TW201234170A (en) 2012-08-16
TWI512452B (zh) 2015-12-11
US20140136927A1 (en) 2014-05-15
JP2013542533A (ja) 2013-11-21
EP2633409A4 (en) 2014-07-23
EP2633409A1 (en) 2013-09-04
CN103329103B (zh) 2017-04-05
WO2012058328A1 (en) 2012-05-03
CN103329103A (zh) 2013-09-25

Similar Documents

Publication Publication Date Title
KR101606718B1 (ko) 플래시 메모리 기반 데이터 저장을 위한 적응적 ecc 기술들
US11449252B2 (en) Method of writing and reading data in an NVM using Lpage identification headers
US10230406B2 (en) LDPC Erasure Decoding for Flash Memories
US9329948B2 (en) Measuring cell damage for wear leveling in a non-volatile memory
US9461904B2 (en) Selective enablement of operating modes or features via host transfer rate detection
US10241908B2 (en) Techniques for dynamically determining allocations and providing variable over-provisioning for non-volatile storage
KR101564569B1 (ko) 상위-레벨 리던던시 정보 계산
KR101636785B1 (ko) 독립 실리콘 소자들을 갖는 동적 상위 레벨 리던던시 모드 관리
KR20140094468A (ko) 비휘발성 메모리에 대한 기록들의 관리 및 그 기록들의 영역 선택
US9396104B1 (en) Accessing compressed data of varying-sized quanta in non-volatile memory

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
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: 20190213

Year of fee payment: 4