KR20180026493A - 가변 코드 레이트 고체-상태 드라이브 - Google Patents

가변 코드 레이트 고체-상태 드라이브 Download PDF

Info

Publication number
KR20180026493A
KR20180026493A KR1020187003147A KR20187003147A KR20180026493A KR 20180026493 A KR20180026493 A KR 20180026493A KR 1020187003147 A KR1020187003147 A KR 1020187003147A KR 20187003147 A KR20187003147 A KR 20187003147A KR 20180026493 A KR20180026493 A KR 20180026493A
Authority
KR
South Korea
Prior art keywords
solid
code rate
reliability
state storage
managing
Prior art date
Application number
KR1020187003147A
Other languages
English (en)
Other versions
KR102542438B1 (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 KR20180026493A publication Critical patent/KR20180026493A/ko
Application granted granted Critical
Publication of KR102542438B1 publication Critical patent/KR102542438B1/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/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
    • 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
    • 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/1072Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in multilevel memories
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • 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
    • H03M13/11Error 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 using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • 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
    • H03M13/11Error 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 using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1111Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
    • 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/35Unequal or adaptive error protection, e.g. by providing a different level of protection according to significance of source information or by adapting the coding according to the change of transmission channel characteristics
    • H03M13/353Adaptation to the channel
    • 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/63Joint error correction and other techniques
    • H03M13/635Error control coding in combination with rate matching
    • 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/63Joint error correction and other techniques
    • H03M13/635Error control coding in combination with rate matching
    • H03M13/6362Error control coding in combination with rate matching by puncturing
    • H03M13/6368Error control coding in combination with rate matching by puncturing using rate compatible puncturing or complementary puncturing
    • H03M13/6393Rate compatible low-density parity check [LDPC] codes

Landscapes

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

Abstract

장치(100)뿐만 아니라 이를 위한 방법(200) 및 시스템(400)은 일반적으로 정보를 저장하는 것에 관한 것이다. 이러한 장치에서, 메모리 제어기(110)는 코드 레이트(112)를 제공하기 위한 것이다. 인코더(120)는 인코딩된 데이터(121)를 제공하기 위해 코드 레이트(112) 및 입력 데이터(111)를 수신하기 위한 것이다. 고체-상태 저장소(130)는, 저장된 데이터(133)로서, 인코딩된 데이터(121)를 수신 및 저장하기 위한 것이다. 디코더(140)는, 저장된 데이터(133)에 액세스하고, 그리고 액세스되는 저장된 데이터(133)의 디코딩된 데이터(141)를 제공하기 위해 코드 레이트(112)를 수신하기 위한 것이다. 디코딩된 데이터(141)는 소프트 판정들로서 제공된다. 메모리 제어기(110)는, 디코딩된 데이터(141)의 확률들에 대한 응답으로 코드 레이트(112)를 조정하기 위해, 디코딩된 데이터(141)를 수신하기 위한 것이다.

Description

가변 코드 레이트 고체-상태 드라이브
이하의 설명은 정보 저장소에 관한 것이다. 더욱 구체적으로, 이하의 설명은 가변 코드 레이트 고체-상태 드라이브(variable code rate solid-state drive)에 관한 것이다.
고체-상태 플래시 메모리는 대용량 메모리 저장 시스템들에 계속해서 빠르게 삽입되고 있다. 불행히도, 고체-상태 플래시 메모리는 통상적으로, 예컨대, 마모(wear)를 나타내기 전에, 이를테면, NAND 또는 NOR 플래시 메모리 셀들에 대한 유한의 수의 프로그램-삭제 사이클들을 갖는다. 이러한 마모는 고체-상태 드라이브의 신뢰도를 감소시킬 수 있다. 그러한 이유로, 이러한 마모에 적응가능한 고체-상태 드라이브를 제공하는 것이 바람직하고 유용하다.
일반적으로, 방법은 고체-상태 저장소의 신뢰도를 관리하는 것에 관한 것이다. 이러한 방법으로, 고체-상태 저장소에 저장된 인코딩된 데이터가 판독된다. 액세스되는 인코딩된 데이터는, 디코딩된 데이터의 확률들을 나타내는 소프트 판정(soft decision)들로서 디코딩된 데이터를 제공하기 위해 디코딩된다. 디코딩된 데이터의 확률들이 평가된다. 인코더 및 디코더의 코드 레이트는 평가에 대한 응답으로 조정된다.
선택적으로, 코드 레이트는 선형 에러 정정 코드를 위한 것이다.
선택적으로, 고체-상태 저장소는, 인코딩된 데이터의 저장을 위해 멀티-레벨 셀들, 바이너리 셀들, 트리플-레벨 셀들, 및 싱글-레벨 셀들로 구성되는 그룹으로부터 선택된 메모리 셀들을 포함한다.
선택적으로, 인코더는 LDPC(Low-Density Parity-Check) 인코더이고, 디코더는 LDPC 디코더이다.
선택적으로, 방법은 인코딩된 데이터를 제공하기 위해 인코더를 통해 입력 데이터를 인코딩하는 단계 및 인코딩된 데이터를 고체-상태 저장소에 기록하는 단계를 더 포함한다.
선택적으로, 액세스하는 단계는 고체-상태 저장소로부터 인코딩된 데이터의 사전정의된 양을 판독하는 단계를 포함한다.
선택적으로, 사전정의된 양은 고체-상태 저장소의 섹터, 블록, 서브어레이 및 어레이로 구성된 그룹으로부터 선택된다.
선택적으로, 코드 레이트는 제1 코드 레이트이고, 방법은: 디코딩된 데이터에 대한 소프트 비트들을 결정하는 단계, 디코딩된 데이터에 대한 소프트 비트들의 크기들을 조합하여 그에 대한 메트릭을 제공하는 단계 및 메트릭에 대한 응답으로 사용하기 위해 제1 코드 레이트보다 더 낮은 제2 코드 레이트를 결정하는 단계를 더 포함한다.
선택적으로, 방법은 메트릭에 대한 응답으로 고체-상태 저장소의 사전정의된 양의 사용을 차단하는(blocking) 단계를 더 포함한다.
선택적으로, 차단하는 단계는 사전정의된 양의 사용을 방지하기 위해 어드레스 맵핑하는(address mapping) 단계를 포함하고, 사전정의된 양은 고체-상태 저장소의 섹터의 적어도 하나의 블록을 포함한다.
일반적으로, 장치는 고체-상태 저장소의 신뢰도를 관리하는 것에 관한 것이다. 이러한 장치에서, 코드 레이트를 제공하기 위한 메모리 제어기가 존재한다. 인코더는 인코딩된 데이터를 제공하기 위해 코드 레이트 및 입력 데이터를 수신하기 위한 것이다. 고체-상태 저장소는 인코딩된 데이터를 수신 및 저장하기 위한 것이다. 디코더는 고체-상태 저장소에 저장되는 인코딩된 데이터에 액세스하고, 그리고 액세스되는 인코딩된 데이터의 디코딩된 데이터를 제공하기 위해 코드 레이트를 수신하기 위한 것이다. 디코딩된 데이터는, 디코딩된 데이터의 확률들을 나타내는 소프트 판정들로서 제공된다. 메모리 제어기는, 디코딩된 데이터의 확률들에 대한 응답으로 코드 레이트를 조정하기 위해, 디코딩된 데이터를 수신하기 위한 것이다.
선택적으로, 코드 레이트는 선형 에러 정정 코드를 위한 것이다.
선택적으로, 고체-상태 저장소는, 인코딩된 데이터의 저장을 위해 멀티-레벨 셀들, 바이너리 셀들, 트리플-레벨 셀들, 및 싱글-레벨 셀들로 구성되는 그룹으로부터 선택된 메모리 셀들을 포함한다.
선택적으로, 인코더는 LDPC(Low-Density Parity-Check) 인코더이고, 디코더는 LDPC 디코더이다.
선택적으로, 디코더는 소프트-인 소프트-아웃 디코더이다.
선택적으로, 고체-상태 저장소는 인코딩된 데이터의 사전정의된 양을 판독하도록 구성된다.
선택적으로, 사전정의된 양은 고체-상태 저장소의 섹터, 블록, 서브어레이 및 어레이로 구성된 그룹으로부터 선택된다.
선택적으로, 디코더는 디코딩된 데이터에 대한 확률들을 나타내는 소프트 비트들을 제공하도록 구성되고, 메모리 제어기는 코드 레이트를 선택하기 위한 메트릭을 제공하기 위해, 디코딩된 데이터에 대한 소프트 비트들의 크기들을 조합하도록 구성된다.
선택적으로, 메모리 제어기는 메트릭을 임계치와 비교하고 그리고 메트릭이 임계치 미만인 것에 대한 응답으로 코드 레이트의 조정을 결정하도록 더 구성된다.
선택적으로, 메모리 제어기는 추가로, 포인터로서 메트릭을 사용하여 코드 레이트들의 저장소 내의 코드 레이트를 포인팅하고, 그리고 코드 레이트들의 저장소로부터, 포인팅된 코드 레이트를 출력하도록 구성된다.
후술하는 상세한 설명 및 청구범위들을 고려하여 다른 특징들이 인식될 것이다.
첨부 도면들은 예시적인 장치(들) 및/또는 방법(들)을 나타낸다. 그러나, 첨부 도면들은 청구항들의 범위를 제한하도록 취해서는 안되며, 단지 설명과 이해를 위한 것이다.
도 1은 정보를 저장하기 위한 예시적인 SSD(solid-state drive)를 도시하는 블록도이다.
도 2는 정보를 저장하기 위한 예시적인 프로세스 흐름을 도시하는 흐름도이다.
도 3은 예시적인 컬럼형 FPGA(Field Programmable Gate Array) 아키텍쳐를 도시하는 간략화된 블록도이다.
도 4는 예시적인 컴퓨터 시스템을 도시하는 블록도이다.
이하의 설명에서, 본원에 설명된 특정 예들의 더욱 완전한 설명을 제공하기 위해 많은 특정 세부사항들이 설명된다. 그러나, 하나 또는 그 초과의 다른 예들 및/또는 이러한 예들의 변동들이 이하에 주어진 모든 특정 세부사항들 없이도 실행될 수 있음이 당업자에게 명백해야 한다. 다른 예들에서, 잘 알려진 특징들은 본원의 예들의 설명을 모호하게 하지 않기 위해 상세하게 설명되지 않았다. 예시의 용이함을 위해, 동일한 번호 라벨들이 동일한 아이템들을 지칭하기 위해 상이한 다이어그램들에서 사용되지만, 대안적인 예들에서 이 아이템들은 상이할 수 있다.
몇몇 도면들에 예시적으로 묘사된 예들을 설명하기 전에, 일반적인 소개가 추가 이해를 위해 제공된다.
SSD(solid-state drive)들은 대용량 저장소로 더욱 일반적으로 사용되고 있다. 불행히도, SSD들의 메모리 셀들은, 이러한 메모리 셀들이 열화하기 시작하기 전에 제한된 수의 기록-판독 사이클들을 갖는다. 이러한 열화는 이러한 SSD들의 신뢰도를 감소시킬 수 있다.
신뢰도를 증가시킬 뿐만 아니라 SSD들의 유효 수명을 증가시키기 위해, 소프트 디코딩이 추가로 상세하게 아래에 설명된 바와 같이 사용될 수 있다. 소프트 디코딩은 디코딩 프로세스를 지칭하며, 여기서 디코딩된 정보는, 데이터 입력이, 통상적으로 바이너리 코딩된 데이터에 대해 “0” 또는 “1”의 확률을 나타내는데 사용되는, 0과 1 사이의 값인 특정 값이라는 확률 또는 추정치(estimate)를 나타낸다. 이러한 확률 또는 추정치는 이러한 디코딩된 정보의 신뢰도를 표시할 수 있다. 대조적으로, 하드-결정 디코더는, 통상적으로 바이너리 코딩된 데이터에 대해 “0” 또는 “1”인 고정 세트의 가능한 값들을 갖는 데이터 입력에 대해 동작한다.
소프트 디코딩된 정보는 이러한 정보의 신뢰도를 표시할 수 있다. 추가로 상세하게 아래에 설명되는 바와 같이, 메모리 제어기는 이러한 소프트 디코딩된 정보를 프로세싱하여 확률론적 인코딩 및 디코딩에 대해 코드 레이트를 설정하기 위한 그에 대한 메트릭들을 생성하도록 구성될 수 있다. 이러한 코드 레이트 설정은, 고체-상태 저장소의 메모리 셀들의 점진적 마모에 대해 조정되도록 가변적으로 적응될 수 있다.
위의 일반적인 이해를 염두에 두고, 정보를 저장하기 위한 다양한 구성들이 이하에 일반적으로 설명된다.
도 1은 정보를 저장하기 위한 예시적인 SSD(solid-state drive)(100)를 도시하는 블록도이다. SSD(100)는, 메모리 제어기(110), 인코더(120), 고체-상태 저장소(130), 및 디코더(140)를 포함한다. 제한이 아닌 명료함을 위해, SSD(100)에 관한 많은 공지된 세부사항들은 불필요하게 상세하게 설명되지 않는다.
메모리 제어기(110)는 코드 레이트(112)를 인코더(120) 및 디코더(140)에 제공하기 위해 커플링될 수 있다. 인코더(120)는, 메모리 제어기(110)를 통해 기록 채널(101)로 입력될 수 있는 입력 데이터(111)를 수신하기 위해 커플링될 뿐만 아니라, 이러한 기록 채널(101)을 통해 이러한 입력 데이터(112)에 대한 인코딩된 데이터(121)를 제공하기 위해 코드 레이트(112)를 수신하도록 커플링될 수 있다. 인코딩된 데이터(121)는, 에러 정정 코드에 대한 코드 레이트(112)로 인코더(120)를 통해 인코딩될 수 있다. 인코딩된 데이터(121)는 고체-상태 저장소(130)에 기록될 수 있다.
이러한 에러 정정 코드는 선형 에러 정정 코드일 수 있다. 사용될 수 있는 선형 에러 정정 코드의 일 예는, LDPC(Low-Density Parity-Check) 코드이다. 이러한 방침들에 따라, 인코더(120)는 LDPC 인코더(120)일 수 있고, 디코더(140)는 LDPC 디코더(140)일 수 있다.
고체-상태 저장소(130)는 인코딩된 데이터(121)를 수신하고 저장하기 위해 커플링될 수 있다. 디코더(140)는 판독 채널(102)을 통해, 저장된 인코딩된 데이터(“저장된 데이터”)(133)에 액세스하기 위해 커플링될 수 있다. 디코더(140)는 코드 레이트(112)를 수신하여, 판독되는 저장된 데이터(133), 즉 판독 데이터(131)의 디코딩된 데이터(141)를 판독 채널(102)을 통해 제공하기 위해 커플링될 수 있다.
저장된 데이터(133)는 고체-상태 저장소(130)의 메모리 셀들(132)에 저장될 수 있다. 이러한 방침들에 따라, 고체-상태 저장소(130)는 하나 또는 그 초과의 타입들의 메모리 셀들(132)을 포함할 수 있다. 메모리 셀들(132)은, 인코딩된 데이터(121)의 저장을 위해 MLC(multi-level cell)들, 바이너리 셀들, TLC(triple-level cell)들, SLC(single-level cell)들로 구성된 그룹으로부터 선택될 수 있다. 이러한 메모리 셀들(132)은, 예컨대, 플래시 메모리 셀들, 이를테면, NAND 또는 NOR 플래시 메모리 셀들일 수 있다. 아래에 추가로 상세하게 설명되는 바와 같이, 메모리 셀들(132)은 기록-판독 또는 프로그램-삭제 사이클들로 인한 마모를 나타낼 수 있는데, 이는 메모리 셀들(132)에 저장된 데이터의 신뢰도를 감소시킬 수 있다.
플래시 메모리-기반 SSD들(100)은 대용량 저장소로 더욱 대중화되고 있지만; 플래시 메모리-기반 SSD들(100)은 메모리 마모를 가질 수 있다. 이러한 방침들에 따라, NAND 또는 NOR 플래시 메모리 디바이스가 지원할 수 있는 제한된 수의 프로그램-삭제 사이클들이 존재할 수 있다. 메모리 밀도를 증가시키기 위해, MLC들이 사용될 수 있으며, 여기서 각각의 이러한 메모리 셀(132)은 다수의 데이터 비트들을 저장한다. 이러한 MLC-기반 플래시 메모리-기반 SSD들(100)은 PAM(pulse-amplitude modulated) 인코딩된 데이터를 저장할 수 있다.
플래시 판독 채널(102)은 AWGN(Additive White Gaussian Noise) 채널로서 모델링될 수 있고, 데이터 무결성을 증가시키기 위해, FEC(forward error correction)가, 메모리 제어기(110)의 일부일 수 있는 FEC 시스템(105)에 의해 사용될 수 있다. 아래에 추가로 상세하게 설명되는 바와 같이, FEC 시스템(105)은 본원에 설명된 목적들을 위해 통계 엔진(106)을 통해 보강될 수 있다. 구현시에, 메모리 제어기(110)는 복수의 코드 레이트들, 이를테면, 코드 레이트들(142 내지 144)을 저장하기 위한 메모리(107)를 선택적으로 포함할 수 있다. 추가적으로, 아래에 추가로 상세하게 설명되는 바와 같이, 메모리(107)는 메트릭들(108) 및 임계치들(109)을 저장할 수 있다.
SSD(100)에서, 데이터는 멀티-레이트 LDPC 코딩 또는 다른 확률 코딩을 사용하여 온-더-플라이(on-the-fly)로 인코딩 및 디코딩될 수 있다. 이러한 멀티-레이트 코드 레이트는 가변 코드 레이트이며, 이는 일반적으로 높은 코드 레이트로서 시작할 수 있고 그리고 고체-상태 저장소(130)의 메모리 셀들(132)의 마모에 대한 응답으로 또는 그 마모에 적응된 낮은 코드 레이트로 점진적으로 스텝핑 다운될 수 있다. 그러나, 일부 경우들에서, 예컨대, 고체-상태 저장소(130)의 메모리 셀들(132)로부터의 데이터의 통신이 개선된다면, 멀티-레이트 코드 레이트는 점진적으로 증가될 수 있다. 일반적으로, SSD(100)는 시간 경과에 따라 성능이 저하될 것으로 가정될 것이다. 이러한 마모는, 이러한 메모리 셀들(132)의 많은 수의 기록-판독 사이클들에 기인할 수 있으며, 이는 이러한 메모리 셀들(132)의 신뢰도의 저하를 초래하거나 또는, 더욱 구체적으로 이러한 메모리 셀들(132)로부터 판독된 정보의 신뢰도의 저하를 초래한다. 아래에 추가로 상세하게 설명되는 바와 같이, 이러한 신뢰도에 대한 응답으로 코드 레이트(112)가 설정될 수 있다.
코딩 레이트 변경은, 고체-상태 저장소(130)의 플래시 메모리의 유효 수명을 연장시키기 위해, 코드 레이트에 대한 온라인 또는 “온-더-플라이” 수정들로서 수행될 수 있다. 이는, SSD-기반 저장 시스템들에 대한 투자를 보존하는데 유용할 수 있다. 그러나, 복수의 점진적으로 더 낮아지는 코드 레이트들을 제공함으로써, 이러한 SSD(100)의 점진적인 마모에 대응하여 쓰루풋이 점진적으로 감소될 수 있다. 공지된 바와 같이, 낮은-레이트 코드들은 쓰루풋을 희생시키면서 더 큰 에러 정정을 제공하기 위해 더 큰 리던던시를 갖는다. 본원에 설명된 바와 같이, LDPC 코딩에 대한 코드 레이트의 온라인 수정은, 이러한 유효 수명에 걸쳐 쓰루풋을 점진적으로 제한하면서 신뢰도를 증가시킴으로써 SSD(100)의 유효 수명을 증가시킬 수 있다.
디코더(140)는 소프트 판정들로서 제공될 수 있는 디코딩된 데이터(141)를 출력한다. 통상적으로 바이너리 코딩된 데이터에 대해 로직 0 또는 로직 1인 데이터 상태의 신뢰도의 확률들 또는 추정치들은 소프트 판정들로 일반적으로 의미된다. 이러한 방침들에 따라, 소프트 판정들 및 확률들은 이하에서 상호교환가능하게 사용될 수 있다. 메모리 제어기(110)는 디코딩된 데이터(141)의 확률들에 대한 응답으로 코드 레이트(112)를 조정하기 위해, 디코딩된 데이터(141)를 수신하도록 커플링될 수 있다.
FEC 시스템 또는 서브시스템(105)은, 통계 엔진(106)을 제공하기 위해 펌웨어 및/또는 하드웨어로 보강될 수 있다. 통계 엔진(106)은, 디코딩된 데이터(141)로부터 정보를 수집하고 그리고 고체-상태 저장소(130)의 “건전성(health)”을 나타내는 통계들을 결정하도록 구성될 수 있다. 소프트 디코딩의 LDPC 디코딩 또는 임의의 다른 변동에서, 디코딩된 데이터는 로직 1 또는 로직 0인 메모리 비트의 확률을 설명하는 통계 정보를 포함한다. 일반적으로, 큰 포지티브 값들은 “강한(strong)” 로직 1을 표시하는 반면, 큰 네거티브 값들은 “강한” 로직 0을 표시한다. 비트의 신뢰도(즉, 메모리 셀의 신뢰도를 나타냄)가 메모리 마모로 인해 한계가 되기 때문에, 그에 대한 비트-레벨 확률은 그 크기가 감소될 수 있다.
예컨대, 인코딩된 저장된 데이터(133)의 사전정의된 양의 데이터는, 이를테면, 고체-상태 저장소(130)로부터의 버스트 판독을 제한 없이 포함하는 판독에 의해 액세스될 수 있다. 이러한 사전정의된 양의 데이터는 고체-상태 저장소(130)의 저장된 데이터(133)의 섹터 또는 블록에 대한 것일 수 있다. 사전정의된 양의 데이터의 다른 예들은 고체-상태 저장소(130)의 서브어레이 또는 어레이일 수 있다.
데이터의 블록 또는 섹터에 대한 비트 레벨 확률들은 개별적으로 이러한 블록 또는 섹터에 대한 신뢰도 메트릭을 제공하기 위해 조합될 수 있다. 이러한 방침들에 따라, 디코딩된 데이터(141)에 대한 소프트 비트들로서 제공된 소프트 판정들은 디코더(140)에 의해 메모리 제어기(110)의 FEC 시스템(105)에 제공될 수 있다. FEC 시스템(105)의 통계 엔진(106)은, 메트릭(108)으로서 비트 레벨 로그-가능성 값들의 절대 값들의 평균을 획득하게 하기 위해, 블록 또는 섹터에 대한 소프트 판정들의 이러한 확률들을 조합할 수 있는데, 즉, 디코딩된 데이터(141)의 소프트 비트들의 값들을 조합할 수 있다. 이러한 또는 다른 타입들의 디코딩된 데이터(141)의 그룹핑들에 대한 이러한 평균 메트릭(108)뿐만 아니라 다른 평균 메트릭들(108)은, 메모리 제어기(110)의 메모리(107)에 저장될 수 있거나, 또는 메모리 제어기(110)에 의한 액세스를 위해 다른 곳에 저장될 수 있다.
이 예에서, 평균 메트릭들(108)은 블록-레벨 및/또는 섹터-레벨 신뢰도 데이터로서 대응 블록들 및/또는 섹터들을 위한 것이다. 이러한 방침들에 따라, 데이터의 섹터 보다 상당히 더 작은 데이터의 블록이 결함이 있는 것으로 결정될 수 있다. 전체 섹터에 대한 쓰루풋을 감소시키는 것이 아니라, 이러한 블록은 이러한 블록의 사용을 방지하도록 어드레스 맵핑될 수 있다. 더욱이, 하나 또는 그 초과의 불량 블록들을 갖는 섹터는 이러한 섹터의 사용을 방지하도록 어드레스 맵핑될 수 있다. 메모리 제어기(110)는 하나 또는 그 초과의 블록들 및/또는 하나 또는 그 초과의 섹터들이 사용되는 것을 차단하기 위한 성능을 가질 수 있고, 충분히 낮은 평균 메트릭(108)에 기반하는 통계 엔진(106)으로부터의 제어 신호가 사용되어 이러한 차단을 활성화시킬 수 있다.
이러한 신뢰도 정보는, 메모리 제어기(110)의 메모리(107)에 저장될 수 있는, 선택적인 임계 값들(“임계치들”)(109) 중의 임계 값에 대한 벡터 또는 포인터일 수 있다. 메모리(107)는, LUT(lookup table) 또는 코드 레이트들, 이를테면 코드 레이트들(142 내지 144)의 다른 저장소(145)를 제한없이 포함하는 하나 또는 그 초과의 타입들의 메모리를 포함할 수 있다. 이러한 임계치들(109)은 오프라인으로 생성될 수 있고, 이에 따라 이러한 임계치(109)들은 통계 엔진(106)에 의한 액세스를 위해 메모리 제어기(110)의 메모리(107)에 저장하기 위해 미리결정될 수 있다. 이러한 방침들에 따라, 임계치들(109)은 사용된 코딩을 고려하여 신뢰도 레벨들과 관련하여 제조자에 의해 결정될 수 있고, 이에 따라 이러한 임계치들(109)은 SSD 제조자들 사이에서 변할 수 있다. 일반적으로, 구현시에, 임계치들(109)은, 이를테면, LUT(145)에서 LDPC 코드 레이트들과 연관될 수 있고, 여기서 블록-레벨 신뢰도의 더 낮은 값들은 더 낮은 쓰루풋에 대한 낮은-레이트 LDPC 코드들과 상관되고, 블록-레벨 신뢰도의 더 높은 값들은 더 높은 쓰루풋에 대한 높은-레이트 LDPC 코드들과 상관된다.
이 예에서, 메모리 제어기(110)의 통계 엔진(106)은, 이를테면, 비교기 블록(147)을 사용하여 하나 또는 그 초과의 임계치들(109)과 비교하기 위한 평균 메트릭(108)으로서 디코딩된 데이터(141)의 소프트 비트들의 크기들의 평균을 제공하기 위해 그 디코딩된 데이터(141)의 소프트 비트들을 조합하도록 구성된다. 비교기 블록(147)은 하드웨어 또는 소프트웨어, 또는 이들의 조합으로 구현될 수 있다.
비교기 블록(147)은 멀티-레벨 비교들을 위해 구성될 수 있다. 예컨대, 평균 메트릭(108)이 가장 큰 임계치(109) 보다 크거나 동일하다면, 이러한 가장 큰 임계치(109)는, 코드 레이트(112)로서 높은 코드 레이트(142)를 출력하기 위한, LUT(145)의 이러한 높은 코드 레이트(142)에 대한 포인터(146)일 수 있다. 마찬가지로, 예컨대, 평균 메트릭(108)이 가장 큰 임계치(109) 미만이고 중간 임계치(109) 보다 크거나 동일하다면, 이러한 중간 임계치(109)는, 코드 레이트(112)로서 중간 코드 레이트(142)를 출력하기 위한, LUT(145)의 이러한 중간 코드 레이트(143)에 대한 포인터(146)일 수 있다. 예컨대, 평균 메트릭(108)이 중간 임계치(109) 미만이고 낮은 임계치(109) 보다 크거나 동일하다면, 이러한 낮은 임계치(109)는, 코드 레이트(112)로서 낮은 코드 레이트(142)를 출력하기 위한, LUT(145)의 이러한 낮은 코드 레이트(144)에 대한 포인터(146)일 수 있다. 마지막으로, 예컨대, 평균 메트릭(108)이 낮은 임계치(109) 미만이라면, 포인터(146)는 SSD(100)가 더 이상 계속되는 사용을 위해 충분히 신뢰적이지 않다는 표시를 사용자에게 제공할 수 있고 그리고/또는 이전에 설명된 바와 같이 이러한 불량한 신뢰도와 연관된 블록 및/또는 섹터에 입각하여(around) 어드레스 맵핑하기 위한 표시를 메모리 제어기(110)에 제공할 수 있다.
높은-중간-낮은 제어 선택이 제한이 아닌 예로서 명료함을 위해 설명되었다고 하더라도, 일반적으로 2개 또는 그 초과의 코드 레이트들이 적어도 하나의 임계치로 사용될 수 있다. 이에 따라, 평균 메트릭(108) 또는 다른 적합한 메트릭은 이러한 메트릭을 임계치와 비교함으로써 코드 레이트들 중에서 코드 레이트(112)를 선택하는 데 사용될 수 있다. 이러한 비교의 결과로서, 이러한 메트릭이 이러한 임계치 미만인 것에 대한 응답으로 코드 레이트를 있는 그대로 남겨둘지 또는 코드 레이트에 대한 조정을 수행할지 여부에 관한 결정이 행해질 수 있다. 게다가, 다른 구현에서, 메트릭들, 이를테면, 평균 메트릭들(108)은, 예컨대, 코드 레이트(112)를 선택하기 위한 포인터로서 현재 디코딩된 데이터(141)에 대한 현재 메트릭을 직접 사용하기 위해, 이를테면, LUT(145) 내의 코드 레이트들의 저장과 같이 코드 레이트들과 관련하여 저장될 수 있다. 이러한 구성에서, 임계치들(109)은, 그에 대한 점선 박스로 표시된 바와 같이, 제거될 수 있다.
이에 따라, 코드 레이트는 SSD(100)의 증가된 수명뿐만 아니라 증가된 신뢰도로 고체-상태 저장소(130)의 일 세트의 블록들 및/또는 일 세트의 섹터들에 걸쳐 변조될 수 있다. SSD(100)가 시간이 경과함에 따라 열화되기 때문에, 코드 레이트는 저하되어 데이터의 낮은 쓰루풋을 야기할 수 있는데, 즉 SSD(100)의 데이터 쓰루풋은 더 높은-리던던시 코드들을 점진적으로 증가시키면서 점진적으로 감소될 수 있다.
도 2는 정보를 저장하기 위한 예시적인 프로세스 흐름(200)을 도시하는 흐름도이다. 프로세스 흐름(200)은 도 1 및 도 2를 동시에 참조하여 추가로 설명된다.
201에서, 입력 데이터(111)는 인코딩된 데이터(121)를 제공하기 위해 인코더(120)로 인코딩될 수 있다. 202에서, 이러한 인코딩된 데이터(121)는 저장된 데이터(133)로서 고체-상태 저장소(130)에 기록될 수 있다.
203에서, 고체-상태 저장소(130)는 인코딩된 저장된 데이터(133)를 판독하도록 액세스될 수 있다. 사전에 설명된 바와 같이, 203에서의 이러한 액세스 동작은, 211에서 고체-상태 저장소(130)로부터 인코딩된 데이터의 사전정의된 양을 판독하는 것을 포함할 수 있다. 이러한 사전정의된 양의 데이터는 고체-상태 저장소(130)의 섹터, 블록, 서브어레이 및 어레이로 구성된 그룹으로부터 선택될 수 있다.
204에서, 203에서 액세스된 인코딩된 판독된 데이터(131)는 디코딩된 데이터(141)를 소프트 판정들로서 제공하기 위해 디코더(140)에 의해 디코딩될 수 있다. 구현시에, 이러한 소프트 판정들은, 비트가 바이너리 코딩된 데이터에 대해 “0” 또는 “1”을 나타내는 확률을 표시한다. 205에서, 디코딩된 데이터(141)의 확률들은, 사전에 설명된 바와 같이, 통계 엔진(106)에 의해 액세스될 수 있다. 205에서의 이러한 평가 동작은, 212에서, 디코딩된 데이터에 대한 소프트 비트들을 결정하는 것, 및 213에서 이러한 디코딩된 데이터(141)에 대해 결정된 이러한 소프트 비트들의 크기들을 조합하여 그에 대한 메트릭, 이를테면, 예컨대, 평균 메트릭(108)을 제공하는 것을 포함할 수 있다.
이에 따라, 디코더(140)는 하드 디코더와는 대조적으로 SISO(soft-in soft-out) 디코더일 수 있다. 즉, 판독된 데이터(131)는 이러한 판독된 데이터의 신뢰도를 표시하기 위해 로직 1 또는 로직 0의 단지 고정된 바이너리 값들 이외의 값들을 취할 수 있다. 유사하게, 디코딩된 데이터(141)는, 예컨대, 이러한 디코딩된 데이터의 신뢰도를 표시하기 위해 이전 코드에서 로직 1 또는 로직 0의 바이너리 값들과 같은 단지 고정된 세트의 값들 이외의 값들을 취할 수 있다. 따라서, 소프트-결정 디코더(140)로서, 디코더(140)는 하드-결정 디코더와 대조되어야 한다.
게다가, 이러한 소프트 판정들은 로직 0들 및 로직 1들의 신뢰도에 대해 각각 통상적으로 네거티브 값 내지 포지티브 값의 범위에 걸쳐 있다. 따라서, 크기들을 사용함으로써, 이전에 설명된 바와 같이, 이러한 신뢰도 정보의 강도가 결정될 수 있다. 예컨대, -127 내지 +127의 범위는 소프트 비트들로서 소프트 판정들을 나타내기 위해 사용될 수 있으며, 여기서 -127 값을 갖는 소프트 비트들은 로직 0에 대한 가장 높은 신뢰도를 표시하고, +127 값을 갖는 소프트 비트들은 로직 1에 대한 가장 높은 신뢰도를 표시한다.
206에서, 현재의 코드 레이트를 더 낮은 코드 레이트로 교체하는 것을 제한없이 포함하여, 인코더(120) 및 디코더(140)의 코드 레이트는 이전에 설명된 것과 같은 디코딩된 데이터(141)의 확률들에 대한 응답으로 조정 또는 설정될 수 있다. 206에서의 이러한 조정 또는 설정 동작은, 214에서, 디코딩된 데이터(141)의 이러한 확률들에 대해 결정된 메트릭에 대한 응답으로 사용할 다른 코드 레이트를 결정하는 것(다른 코드 레이트를 선택하는 것을 포함하지만, 이에 제한되지 않음)을 포함할 수 있다.
메모리 제어기(110)는 FPGA(field programmable gate array)의 프로그래머블 리소스들을 적어도 부분적으로 사용하여 구현될 수 있다. 본원에서 설명된 예들 중 하나 또는 그 초과는 FPGA에서 구현될 수 있기 때문에, 이러한 IC의 상세한 설명이 제공된다. 그러나, 다른 타입들의 IC들이 본원에 설명된 기술로부터 이득을 얻을 수 있음을 이해해야 한다.
PLD(programmable logic device)들은 특정 로직 함수들을 수행하도록 프로그래밍될 수 있는 잘-알려진 타입의 집적 회로이다. 한 가지 타입의 PLD인 FPGA(field programmable gate array)는 통상적으로 프로그래머블 타일들의 어레이를 포함한다. 이러한 프로그래머블 타일들은, 예컨대, IOB(input/output block)들, CLB(configurable logic block)들, BRAM(dedicated random access memory block)들, 멀티플라이어들, DSP(digital signal processing block)들, 프로세서들, 클록 관리자(clock manager)들, DLL(delay lock loop)들 등을 포함할 수 있다. 본원에 사용되는 바와 같이, “포함하다(include)” 및 “포함하는(including)”은 제한하지 않고 포함하는 것을 의미한다.
각각의 프로그래머블 타일은 통상적으로 프로그래머블 인터커넥트 및 프로그래머블 로직 둘 다를 포함한다. 프로그래머블 인터커넥트는 통상적으로 PIP(programmable interconnect point)들에 의해 인터커넥팅된 다양한 길이들의 다수의 인터커넥트 라인들을 포함한다. 프로그래머블 로직은, 예컨대, 함수 발생기들, 레지스터들, 산술 로직 등을 포함할 수 있는 프로그래머블 엘리먼트들을 사용하여 사용자 디자인의 로직을 구현한다.
프로그래머블 인터커넥트 및 프로그래머블 로직은 통상적으로, 프로그래머블 엘리먼트들이 구성되는 방법을 정의하는 구성 데이터의 스트림을 내부 구성 메모리 셀들에 로딩함으로써 프로그래밍된다. 구성 데이터는 메모리로부터(예컨대, 외부 PROM으로부터) 판독되거나 또는 외부 디바이스에 의해 FPGA에 기록될 수 있다. 그후, 개별적인 메모리 셀들의 집합적 상태들은 FPGA의 기능을 결정한다.
다른 타입의 PLD는 콤플렉스 프로그래머블 로직 디바이스, 또는 CPLD이다. CPLD는, 인터커넥트 스위치 매트릭스에 의해 I/O(input/output) 리소스들에 함께 연결된 2개 또는 그 초과의 “기능 블록들”을 포함한다. CPLD의 각각의 기능 블록은 PLA(Programmable Logic Array)들 및 PAL(Programmable Array Logic) 디바이스들에 사용되는 것들과 유사한 2-레벨 AND/OR 구조를 포함한다. CPLD들에서, 구성 데이터는 통상적으로 비-휘발성 메모리에 온-칩으로 저장된다. 일부 CPLD들에서, 구성 데이터는 비-휘발성 메모리에 온-칩으로 저장되고, 그후 휘발성 메모리에 초기 구성(프로그래밍) 시퀀스의 일부로서 다운로딩된다.
모든 이러한 PLD(programmable logic device)들의 경우, 디바이스의 기능성은 디바이스의 제어를 위해 그 디바이스에 제공되는 데이터 비트들에 의해 제어된다. 데이터 비트들이 휘발성 메모리(예컨대, FPGA들 및 몇몇 CPLD들에서와 같은, 정적 메모리 셀들)에, 비-휘발성 메모리(예컨대, 몇몇 CPLD들에서와 같은, FLASH 메모리)에, 또는 임의의 다른 타입의 메모리 셀에 저장될 수 있다.
다른 PLD들은 디바이스 상의 다양한 엘리먼트들을 프로그래밍가능하게 인터커넥팅하는 프로세싱 층, 이를테면, 금속 층을 적용함으로써 프로그래밍된다. 이러한 PLD들은 마스크 프로그래머블 디바이스들로서 알려져 있다. PLD들은 또한, 다른 방식들로, 예컨대, 퓨즈(fuse) 또는 안티퓨즈(antifuse) 기술을 사용하여 구현될 수 있다. “PLD” 및 “프로그래머블 로직 디바이스”라는 용어들은, 이러한 예시적인 디바이스들뿐만 아니라, 오직 부분적으로 프로그래밍가능한 포괄적인 디바이스들을 포함한다(그러나, 이에 제한되지 않는다). 예컨대, 한가지 타입의 PLD는 하드-코딩된 트랜지스터 로직과, 하드-코딩된 트랜지스터 로직을 프로그래밍가능하게 인터커넥팅하는 프로그래머블 스위치 패브릭의 조합을 포함한다.
위에 언급된 바와 같이, 진보된 FPGA들은 어레이 내에 몇몇 상이한 타입들의 프로그래머블 로직 블록들을 포함할 수 있다. 예컨대, 도 3은, MGT(multi-gigabit transceiver)들(301), CLB(configurable logic block)들(302), BRAM(random access memory block)들(303), IOB(input/output block)들(304), CONFIG/CLOCKS(configuration and clocking logic)(305), DSP(digital signal processing block)들(306), 특수화된 I/O(input/output) 블록들(307)(예컨대, 구성 포트들 및 클록 포트들), 및 다른 프로그래머블 로직(308), 이를테면, 디지털 클록 관리자들, 아날로그-디지털 컨버터들, 시스템 모니터링 로직 등을 포함하는 다수의 상이한 프로그래머블 타일들을 포함하는 FPGA 아키텍쳐(300)를 도시한다. 일부 FPGA들은 또한 전용 “PROC(processor block)들”(310)을 포함한다.
일부 FPGA들에서, 각각의 프로그래머블 타일은, 각각의 인접 타일의 대응 인터커넥트 엘리먼트에 그리고 그로부터 표준화된 커넥션들을 갖는 프로그래머블 “INT(interconnect element)”(311)를 포함한다. 따라서, 함께 취해진 프로그래머블 인터커넥트 엘리먼트들은 예시된 FPGA에 대한 프로그래머블 인터커넥트 구조를 구현한다. 프로그래머블 인터커넥트 엘리먼트(311)는 또한 도 3의 상단에 포함된 예들에 의해 도시된 바와 같이, 동일한 타일 내 프로그래머블 로직 엘리먼트로의 그리고 그로부터의 커넥션들을 포함한다.
예컨대, CLB(302)는 사용자 로직 + 단일 프로그래머블 “INT(interconnect element)”(311)를 구현하도록 프로그래밍될 수 있는 “CLE(configurable logic element)”(312)를 포함할 수 있다. BRAM(303)은 하나 또는 그 초과의 프로그래머블 인터커넥트 엘리먼트들에 더해 “BRL(BRAM logic element)”(313)을 포함할 수 있다. 통상적으로, 타일에 포함된 인터커넥트 엘리먼트들의 수는 타일의 높이에 의존한다. 도시된 실시예에서, BRAM 타일은 5개의 CLB들과 동일한 높이를 갖지만, 다른 수들(예컨대, 4개)이 또한 사용될 수 있다. DSP 타일(306)은 적절한 수의 프로그래머블 인터커넥트 엘리먼트들에 더해 “DSPL(DSP logic element)”(314)을 포함할 수 있다. IOB(304)는, 예컨대, 프로그래머블 인터커넥트 엘리먼트(311)의 하나의 인스턴스에 더해 “IOL(input/output logic element)”(315)의 2개의 인스턴스들을 포함할 수 있다. 당업자들에게 명백할 바와 같이, 예컨대, I/O 로직 엘리먼트(315)에 연결된 실제 I/O 패드들은 통상적으로 입/출력 로직 엘리먼트(315)의 영역으로 한정되지 않는다.
도시된 실시예에서, (도 3에 도시된) 다이의 중심 가까이의 수평 영역은 구성, 클록, 및 다른 제어 로직에 사용된다. 이러한 수평 영역 또는 컬럼(column)으로부터 연장되는 수직 컬럼들(309)은 FPGA의 폭에 걸쳐 클럭들 및 구성 신호들을 분배하는데 사용된다.
도 3에 예시된 아키텍쳐를 활용하는 일부 FPGA들은 그 FPGA의 대부분을 형성하는 규칙적인 컬럼형 구조를 방해하는 추가적인 로직 블록들을 포함한다. 추가적인 로직 블록들은 프로그래머블 블록들 및/또는 전용 로직일 수 있다. 예컨대, 프로세서 블록(310)은 몇몇 컬럼들의 CLB들 및 BRAM들에 걸쳐있다.
도 3이 오직 예시적인 FPGA 아키텍쳐만을 예시하도록 의도되었음에 유의한다. 예컨대, 로우(row)의 논리 블록들의 수들, 로우들의 상대 폭, 로우들의 수 및 순서, 로우들에 포함된 로직 블록들의 타입들, 로직 블록들의 상대적 크기들, 및 도 3의 상단에 포함된 인터커넥트/로직 구현들은 순전히 예시적인 것이다. 예컨대, 실제 FPGA에서, CLB들의 1개 초과의 인접 로우는 통상적으로, CLB들이 나타나는 어디에든 포함되어, 사용자 로직의 효율적인 구현을 용이하게 하지만, 인접한 CLB 로우들의 수는 FPGA의 전체 크기에 따라 다르다.
그러나, 도 1의 SSD(100)의 다른 구현에서, 통계 엔진(106)은 메모리 제어기(110)의 펌웨어로 구현될 수 있고, 인코더(120) 및 디코더(140)는 하드웨어로 구현될 수 있으며, SSD(100)는 컴퓨터 시스템 내부에 또는 외부에 커플링될 수 있다.
이러한 방침들을 따라, 도 4는 예시적인 컴퓨터 시스템(400)을 도시하는 블록도이다. 컴퓨터 시스템(400)은, 하나 또는 그 초과의 디스플레이 디바이스들(401), 이를테면, CRT(Cathode Ray Tube) 디스플레이들, 플라즈마 디스플레이들, LCD(Liquid Crystal Display)들, 프로젝터들에 그리고 하나 또는 그 초과의 입력 디바이스들(406), 이를테면, 키보드 및 커서 포인팅 디바이스에 커플링된 프로그래밍된 컴퓨터(410)를 포함할 수 있다. 컴퓨터 시스템의 다른 공지된 구성들이 사용될 수 있다. 컴퓨터 시스템(400) 그 자체 또는 하나 또는 그 초과의 다른 컴퓨터 시스템들(400)과 네트워킹된 컴퓨터 시스템(400)은 정보 처리 시스템을 제공할 수 있다.
프로그래밍된 컴퓨터(410)는, 다른 알려진 플랫폼들 중에서, Mac OS, Java Virtual Machine, Real-Time OS Linux, Solaris, iOS, Android Linux-based OS, Unix, 또는 Windows 오퍼레이팅 시스템일 수 있는 알려진 오퍼레이팅 시스템으로 프로그래밍될 수 있다. 프로그래밍된 컴퓨터(410)는, CPU(central processing unit)(404), 메모리(405), 및 I/O(input/output) 인터페이스(402)를 포함한다. 프로그래밍된 컴퓨터(410)는, CPU(404)에 커플링된 GPU(graphics processing unit)(407) 및 I/O 인터페이스(402)에 커플링된 하나 또는 그 초과의 주변 카드들(409)을 선택적으로 포함할 수 있다. 이러한 방침들에 따라, 프로그램 컴퓨터(410)는 선택적인 GPU(407)에 커플링된 그래픽 메모리(408)를 포함할 수 있다.
CPU(404)는, 예컨대, 이를테면, IBM, Intel, ARM, 및 Advanced Micro Devices로부터 입수가능한 당업계에 알려진 일 타입의 마이크로프로세서일 수 있다. CPU(404)는 하나 또는 그 초과의 프로세싱 코어들을 포함할 수 있다. 지원 회로들(미도시)은, 캐시, 전력 서플라이들, 클록 회로들, 데이터 레지스터들 등을 포함할 수 있다.
메모리(405)는 CPU(404)에 직접 커플링될 수 있거나 또는 I/O 인터페이스(402)를 통해 커플링될 수 있다. 오퍼레이팅 시스템의 적어도 일부는 메모리(405) 내에 배치될 수 있다. 메모리(405)는: 플래시 메모리, 랜덤 액세스 메모리, 판독 전용 메모리, 자기-저항 판독/기록 메모리, 광학 판독/기록 메모리, 캐시 메모리, 자기 판독/기록 메모리 등뿐만 아니라 이하에 후술되는 것과 같은 비-일시적 신호-베어링 매체 중 하나 또는 그 초과를 포함할 수 있다. 이러한 방침들에 따라, 메모리(405)는, 이를테면, SATA(Serial ATA) 버스 또는 다른 버스를 통해 I/O 인터페이스(402)에 커플링되는 SSD(100)를 포함할 수 있다. SSD(100)는 명료함을 위해 메모리(405)와는 별도로 도시된다. 게다가, 하나 또는 그 초과의 SSD들(100)은, 이를테면, 예컨대, RAID 또는 다른 다중 드라이브 저장소에 대해 일반적으로 표시된 바와 같이 사용될 수 있다.
I/O 인터페이스(402)는, 다른 알려진 회로들 중에서, 칩 셋 칩들, 그래픽 프로세서들, 및/또는 도터 카드(daughter card)들을 포함할 수 있다. 이 예에서, I/O 인터페이스(402)는 PCH(Platform Controller Hub)일 수 있다. I/O 인터페이스(402)는 데이터, 이를테면, 데이터 파일들 등을 수신 및 송신하도록 적응된 종래의 키보드, 네트워크, 마우스, 디스플레이 프린터, 및 인터페이스 회로에 커플링될 수 있다.
프로그래밍된 컴퓨터(410)는 하나 또는 그 초과의 주변 카드들(409)을 선택적으로 포함할 수 있다. 도터 또는 주변 카드의 일 예는, 다른 공지된 회로들 중에서, NIC(network interface card), 디스플레이 인터페이스 카드, 모뎀 카드, 및 USB(Universal Serial Bus) 인터페이스 카드를 포함할 수 있다. 선택적으로, 이러한 주변기기들 중 하나 또는 그 초과는, CPU(404) 및 I/O 인터페이스(402)를 호스팅하는 마더보드에 통합될 수 있다. 이러한 방침들에 따라, GPU(407)는 CPU(404)에 통합될 수 있고 그리고/또는 별도의 주변 카드일 수 있다.
프로그래밍된 컴퓨터(410)는, 예컨대, 회사의 인트라넷 및/또는 인터넷과 같은 종래의 네트워크 인프라스트럭쳐를 통해 다수의 클라이언트 컴퓨터들, 서버 컴퓨터들, 또는 이들의 임의의 조합에 커플링되어 분산된 사용을 허용할 수 있다. 더욱이, SSD(100)는, 프로그래밍된 컴퓨터(410)에 직접 내부에 또는 외부에 커플링될 필요없이, 네트워크 드라이브와 같은 이러한 네트워크에 직접 커플링될 수 있다. 그러나, 제한이 아닌 명료함을 위해, SSD(100)는 프로그래밍된 컴퓨터(410)에 하우징된다고 가정해야 한다.
메모리(405)는 프로그램 제품(420)을 제공하기 위해 본원의 하나 또는 그 초과의 실시예들에 따라 프로세스들을 구현하기 위한 하나 또는 그 초과의 프로그램들 또는 데이터의 전부 또는 일부들을 저장할 수 있다. 이전에 설명된 바와 같이, 프로그램 제품(420)은 통계 엔진(106)뿐만 아니라 프로세스 흐름(200)을 구현하기 위한 SSD(100)의 메모리 제어기(110)의 펌웨어로 구현될 수 있다. 부가적으로, 당업자들은, 본원의 하나 또는 그 초과의 실시예들이 하드웨어, 소프트웨어, 또는 하드웨어와 소프트웨어의 조합으로 구현될 수 있음을 인식할 것이다. 이러한 구현들은, 다양한 프로그램들, 전용 하드웨어 및/또는 프로그래머블 하드웨어를 독립적으로 실행하는 다수의 프로세서들 또는 프로세서 코어들을 포함할 수 있다.
프로그램 제품(420)의 하나 또는 그 초과의 프로그램(들)뿐만 아니라 이들의 도큐먼트들은 본원의 실시예들의 기능들을 정의할 수 있고, 그리고 다양한 비-일시적 신호-베어링 매체, 이를테면, 코드를 갖는 컴퓨터-판독가능 매체 상에 포함될 수 있는데, 여기서 코드는: (i) 비-기록가능 저장 매체(예컨대, CD-ROM 드라이브 또는 DVD 드라이브에 의해 판독가능한 CD-ROM 또는 DVD-ROM과 같은, 컴퓨터 내의 판독-전용 메모리 디바이스들)에 영구적으로 저장된 정보; 또는 (ii) 기록가능한 저장 매체(예컨대, 디스켓 드라이브 또는 플래시 드라이브 또는 하드-디스크 드라이브 또는 판독/기록가능한 CD 또는 판독/기록가능한 DVD 내의 플로피 디스크들)에 저장된 변경가능한 정보를 포함하지만, 이에 제한되지 않는다. 위의 실시예들은 구체적으로 인터넷 및 다른 네트워크들로부터 다운로드된 정보를 포함한다. 이러한 비-일시적 신호-베어링 매체는, 본원의 기능들을 지시하는 컴퓨터-판독가능 명령들을 보유할 때, 그들의 구현들을 나타낸다.
전술한 사항은 예시적인 장치(들) 및/또는 방법(들)을 설명하였지만, 본원에 설명된 하나 또는 그 초과의 양상들에 따른 다른 그리고 추가적인 예들이 후술하는 청구항들 및 이의 등가물들에 의해 결정되는 본원의 범위를 벗어나지 않고 고안될 수 있다. 단계들을 열거하는 청구항들은 단계들의 임의의 순서를 함축하지 않는다. 상표들은 그들 각각의 소유자들의 재산이다.

Claims (15)

  1. 고체-상태 저장소(solid-state storage)의 신뢰도를 관리하기 위한 방법으로서,
    상기 고체-상태 저장소에 저장된 인코딩된 데이터를 판독하는 단계;
    디코딩된 데이터를 상기 디코딩된 데이터의 확률들을 나타내는 소프트 판정(soft decision)들로서 제공하기 위해, 액세스되는 상기 인코딩된 데이터를 디코딩하는 단계;
    상기 디코딩된 데이터의 확률들을 평가하는 단계; 및
    상기 평가에 대한 응답으로 인코더 및 디코더의 코드 레이트를 조정하는 단계를 포함하는,
    고체-상태 저장소의 신뢰도를 관리하기 위한 방법.
  2. 제1 항에 있어서,
    상기 코드 레이트는 선형 에러 정정 코드(linear error correcting code)를 위한 것인,
    고체-상태 저장소의 신뢰도를 관리하기 위한 방법.
  3. 제2 항에 있어서,
    상기 고체-상태 저장소는, 상기 인코딩된 데이터의 저장을 위해 멀티-레벨 셀들, 바이너리 셀들, 트리플-레벨 셀들, 및 싱글-레벨 셀들로 구성되는 그룹으로부터 선택된 메모리 셀들을 포함하고;
    상기 인코더는 LDPC(Low-Density Parity-Check) 인코더이고; 그리고
    상기 디코더는 LDPC 디코더인,
    고체-상태 저장소의 신뢰도를 관리하기 위한 방법.
  4. 제1 항에 있어서,
    상기 인코딩된 데이터를 제공하기 위해 상기 인코더를 통해 입력 데이터를 인코딩하는 단계; 및
    상기 고체-상태 저장소에 상기 인코딩된 데이터를 기록하는 단계를 더 포함하는,
    고체-상태 저장소의 신뢰도를 관리하기 위한 방법.
  5. 제4 항에 있어서,
    액세스하는 단계는 상기 고체-상태 저장소로부터 상기 인코딩된 데이터의 사전정의된 양을 판독하는 단계를 포함하고,
    상기 사전정의된 양은 상기 고체-상태 저장소의 섹터, 블록, 서브어레이, 및 어레이로 구성되는 그룹으로부터 선택되는,
    고체-상태 저장소의 신뢰도를 관리하기 위한 방법.
  6. 제1 항에 있어서,
    상기 코드 레이트는 제1 코드 레이트이고,
    상기 방법은:
    상기 디코딩된 데이터에 대한 소프트 비트들을 결정하는 단계;
    상기 디코딩된 데이터에 대한 상기 소프트 비트들의 크기들을 조합하여 그에 대한 메트릭을 제공하는 단계;
    상기 메트릭에 대한 응답으로 사용하기 위해 상기 제1 코드 레이트보다 더 낮은 제2 코드 레이트를 결정하는 단계; 및
    상기 메트릭에 대한 응답으로 상기 고체-상태 저장소의 사전정의된 양의 사용을 차단하는 단계를 더 포함하는,
    고체-상태 저장소의 신뢰도를 관리하기 위한 방법.
  7. 제 6 항에 있어서,
    상기 차단하는 단계는 상기 사전정의된 양의 사용을 방지하기 위해 어드레스 맵핑하는 단계(address mapping)를 포함하고; 그리고
    상기 사전정의된 양은 상기 고체-상태 저장소의 섹터의 적어도 하나의 블록을 포함하는,
    고체-상태 저장소의 신뢰도를 관리하기 위한 방법.
  8. 고체-상태 저장소의 신뢰도를 관리하기 위한 장치로서,
    코드 레이트를 제공하기 위한 메모리 제어기;
    인코딩된 데이터를 제공하기 위해 상기 코드 레이트 및 입력 데이터를 수신하기 위한 인코더;
    상기 인코딩된 데이터를 수신하고 저장하기 위한 상기 고체-상태 저장소;
    상기 고체-상태 저장소에 저장된 상기 인코딩된 데이터에 액세스하고, 그리고 액세스되는 상기 인코딩된 데이터의 디코딩된 데이터를 제공하기 위해 상기 코드 레이트를 수신하기 위한 디코더를 포함하고,
    상기 디코딩된 데이터는, 상기 디코딩된 데이터의 확률들을 나타내는 소프트 판정들로서 제공되고; 그리고
    상기 메모리 제어기는, 상기 디코딩된 데이터의 확률들에 대한 응답으로 상기 코드 레이트를 조정하기 위해 상기 디코딩된 데이터를 수신하기 위한 것인,
    고체-상태 저장소의 신뢰도를 관리하기 위한 장치.
  9. 제8 항에 있어서,
    상기 코드 레이트는 선형 에러 정정 코드를 위한 것인,
    고체-상태 저장소의 신뢰도를 관리하기 위한 장치.
  10. 제8 항에 있어서,
    상기 고체-상태 저장소는, 상기 인코딩된 데이터의 저장을 위해 멀티-레벨 셀들, 바이너리 셀들, 트리플-레벨 셀들, 및 싱글-레벨 셀들로 구성되는 그룹으로부터 선택된 메모리 셀들을 포함하고;
    상기 인코더는 LDPC(Low-Density Parity-Check) 인코더이고; 그리고
    상기 디코더는 LDPC 디코더인,
    고체-상태 저장소의 신뢰도를 관리하기 위한 장치.
  11. 제8 항에 있어서,
    상기 디코더는 소프트-인 소프트-아웃(soft-in soft-out) 디코더인,
    고체-상태 저장소의 신뢰도를 관리하기 위한 장치.
  12. 제8 항에 있어서,
    상기 고체-상태 저장소는 상기 인코딩된 데이터의 사전정의된 양을 판독하도록 구성되고,
    상기 사전정의된 양은 상기 고체-상태 저장소의 섹터, 블록, 서브어레이, 및 어레이로 구성되는 그룹으로부터 선택되는,
    고체-상태 저장소의 신뢰도를 관리하기 위한 장치.
  13. 제8 항에 있어서,
    상기 디코더는 상기 디코딩된 데이터에 대한 확률들을 나타내는 소프트 비트들을 제공하도록 구성되고; 그리고
    상기 메모리 제어기는 상기 코드 레이트를 선택하기 위한 메트릭을 제공하기 위해, 상기 디코딩된 데이터에 대한 상기 소프트 비트들의 크기들을 조합하도록 구성되는,
    고체-상태 저장소의 신뢰도를 관리하기 위한 장치.
  14. 제13 항에 있어서,
    상기 메모리 제어기는 추가로:
    상기 메트릭을 임계치와 비교하고; 그리고
    상기 메트릭이 상기 임계치 미만인 것에 대한 응답으로 상기 코드 레이트의 조정을 결정하도록 구성되는,
    고체-상태 저장소의 신뢰도를 관리하기 위한 장치.
  15. 제13 항에 있어서,
    상기 메모리 제어기는 추가로:
    포인터로서 상기 메트릭을 사용하여 코드 레이트들의 저장소 내의 코드 레이트를 포인팅하고;
    상기 코드 레이트들의 저장소로부터, 포인팅된 상기 코드 레이트를 출력하도록 구성되는,
    고체-상태 저장소의 신뢰도를 관리하기 위한 장치.
KR1020187003147A 2015-07-01 2016-03-03 가변 코드 레이트 고체-상태 드라이브 KR102542438B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/789,017 2015-07-01
US14/789,017 US9727416B2 (en) 2015-07-01 2015-07-01 Variable code rate solid-state drive
PCT/US2016/020749 WO2017003527A1 (en) 2015-07-01 2016-03-03 Variable code rate solid-state drive

Publications (2)

Publication Number Publication Date
KR20180026493A true KR20180026493A (ko) 2018-03-12
KR102542438B1 KR102542438B1 (ko) 2023-06-09

Family

ID=55532278

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187003147A KR102542438B1 (ko) 2015-07-01 2016-03-03 가변 코드 레이트 고체-상태 드라이브

Country Status (6)

Country Link
US (1) US9727416B2 (ko)
EP (1) EP3314769B1 (ko)
JP (1) JP6637585B2 (ko)
KR (1) KR102542438B1 (ko)
CN (1) CN107852177B (ko)
WO (1) WO2017003527A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10410738B2 (en) * 2016-03-15 2019-09-10 Toshiba Memory Corporation Memory system and control method
KR20180027803A (ko) * 2016-09-07 2018-03-15 에스케이하이닉스 주식회사 메모리 컨트롤러, 반도체 메모리 시스템 및 그것의 동작 방법
US10644727B2 (en) * 2018-01-11 2020-05-05 Western Digital Technologies, Inc. Code rate switching mechanism for flash memory
US11133831B2 (en) 2019-10-29 2021-09-28 Seagate Technology Llc Code rate adaptation
US11132244B2 (en) 2019-11-14 2021-09-28 Seagate Technology Llc Block health checking

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090084852A (ko) * 2006-10-10 2009-08-05 마벨 월드 트레이드 리미티드 메모리 셀들에 데이터를 저장하고 메모리 셀들로부터 데이터를 검색하기 위한 적응적 시스템과 방법
KR20100104623A (ko) * 2009-03-18 2010-09-29 삼성전자주식회사 데이터 처리 시스템 및 그것의 부호율 제어 스킴
KR20100139010A (ko) * 2008-03-11 2010-12-31 에이저 시스템즈 인크 멀티-레벨 셀 플래쉬 메모리 디바이스 내에 데이터를 저장하는 방법 및 멀티-레벨 셀 플래쉬 메모리 디바이스
KR20110097439A (ko) * 2010-02-25 2011-08-31 삼성전자주식회사 사전 확률 정보를 사용하는 메모리 시스템 및 그것의 데이터 처리 방법
US20130124945A1 (en) * 2011-11-16 2013-05-16 Stec, Inc. Dynamic ldpc code rate solution
KR20130096753A (ko) * 2010-10-27 2013-08-30 엘에스아이 코포레이션 플래시 메모리 기반 데이터 저장을 위한 적응적 ecc 기술들

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8122323B2 (en) * 2007-03-08 2012-02-21 Intel Corporation Method, apparatus, and system for dynamic ECC code rate adjustment
US8327245B2 (en) * 2007-11-21 2012-12-04 Micron Technology, Inc. Memory controller supporting rate-compatible punctured codes
US8615700B2 (en) * 2009-08-18 2013-12-24 Viasat, Inc. Forward error correction with parallel error detection for flash memories
US9582431B2 (en) * 2010-03-22 2017-02-28 Seagate Technology Llc Storage address space to NVM address, span, and length mapping/converting
US20110307758A1 (en) * 2010-06-15 2011-12-15 Fusion-Io, Inc. Apparatus, system, and method for providing error correction
WO2012042444A1 (en) * 2010-09-29 2012-04-05 International Business Machines Corporation Decoding in solid state memory devices
EP2447842A1 (en) * 2010-10-28 2012-05-02 Thomson Licensing Method and system for error correction in a memory array
CN102279819A (zh) * 2011-07-28 2011-12-14 张岭 提高固态数据存储系统对于大块数据的存储效率的方法
US9203434B1 (en) * 2012-03-09 2015-12-01 Western Digital Technologies, Inc. Systems and methods for improved encoding of data in data storage devices
CN102915767B (zh) * 2012-09-04 2013-12-25 邹粤林 利用数据可压缩性提高固态硬盘响应速度的方法、装置及系统
US8996961B2 (en) * 2012-12-11 2015-03-31 Seagate Technology Llc Error correction code rate management for nonvolatile memory
US9128858B1 (en) * 2013-01-29 2015-09-08 Pmc-Sierra Us, Inc. Apparatus and method for adjusting a correctable raw bit error rate limit in a memory system using strong log-likelihood (LLR) values
TWI619353B (zh) * 2013-07-03 2018-03-21 Lsi公司 在低密度奇偶性校驗(ldpc)解碼器中之對數相似比(llr)抑制
US9201728B2 (en) * 2013-09-12 2015-12-01 Seagate Technology Llc Memory device with variable code rate
US9323457B2 (en) * 2013-12-09 2016-04-26 Xilinx, Inc. Memory arrangement for implementation of high-throughput key-value stores
US9007854B1 (en) * 2013-12-09 2015-04-14 Western Digital Technologies, Inc. Method and system for optimized soft decoding in a data storage device

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090084852A (ko) * 2006-10-10 2009-08-05 마벨 월드 트레이드 리미티드 메모리 셀들에 데이터를 저장하고 메모리 셀들로부터 데이터를 검색하기 위한 적응적 시스템과 방법
KR20100139010A (ko) * 2008-03-11 2010-12-31 에이저 시스템즈 인크 멀티-레벨 셀 플래쉬 메모리 디바이스 내에 데이터를 저장하는 방법 및 멀티-레벨 셀 플래쉬 메모리 디바이스
KR20100104623A (ko) * 2009-03-18 2010-09-29 삼성전자주식회사 데이터 처리 시스템 및 그것의 부호율 제어 스킴
KR20110097439A (ko) * 2010-02-25 2011-08-31 삼성전자주식회사 사전 확률 정보를 사용하는 메모리 시스템 및 그것의 데이터 처리 방법
KR20130096753A (ko) * 2010-10-27 2013-08-30 엘에스아이 코포레이션 플래시 메모리 기반 데이터 저장을 위한 적응적 ecc 기술들
US20130124945A1 (en) * 2011-11-16 2013-05-16 Stec, Inc. Dynamic ldpc code rate solution

Also Published As

Publication number Publication date
CN107852177B (zh) 2021-01-01
WO2017003527A1 (en) 2017-01-05
JP2018530027A (ja) 2018-10-11
CN107852177A (zh) 2018-03-27
EP3314769B1 (en) 2021-09-22
US9727416B2 (en) 2017-08-08
EP3314769A1 (en) 2018-05-02
US20170004031A1 (en) 2017-01-05
JP6637585B2 (ja) 2020-01-29
KR102542438B1 (ko) 2023-06-09

Similar Documents

Publication Publication Date Title
US11074125B2 (en) Data storage system and method for decoding data based on extrapolated flipped-bit data
US10153782B2 (en) Error correction code (ECC) selection using probability density functions of error correction capability in storage controllers with multiple error correction codes
KR102542438B1 (ko) 가변 코드 레이트 고체-상태 드라이브
US8898549B2 (en) Statistical adaptive error correction for a flash memory
US9367389B2 (en) Recovery strategy that reduces errors misidentified as reliable
US10157096B2 (en) Hot-read data aggregation and code selection
US9455004B2 (en) Multiple retry reads in a read channel of a memory
US10417087B2 (en) System and method for adaptive multiple read of NAND flash
US20170212693A1 (en) Framework for balancing robustness and latency during collection of statistics from soft reads
US9529666B2 (en) Decoding method, memory storage device and memory controlling circuit unit
US9214963B1 (en) Method and system for monitoring data channel to enable use of dynamically adjustable LDPC coding parameters in a data storage system
US9213599B2 (en) Method of erase state handling in flash channel tracking
TW201642266A (zh) 解碼方法、記憶體儲存裝置及記憶體控制電路單元
US9304851B2 (en) Decoding with log likelihood ratios stored in a controller
US10153052B2 (en) Flash command that reports a count of cell program failures
US20150333776A1 (en) Decoding based on randomized hard decisions
US20140281128A1 (en) Decoding data stored in solid-state memory
US10263644B1 (en) Hybrid architecture for LDPC channel coding in data center
US20160110126A1 (en) All-flash-array primary storage and caching appliances implementing triple-level cell (tlc)-nand semiconductor microchps
US9405480B2 (en) Interleaving codewords over multiple flash planes
US20110093765A1 (en) Flash memory device and related programming method

Legal Events

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