KR101588605B1 - 레이트 호환성 펑처링된 코드를 지원하는 메모리 컨트롤러 - Google Patents

레이트 호환성 펑처링된 코드를 지원하는 메모리 컨트롤러 Download PDF

Info

Publication number
KR101588605B1
KR101588605B1 KR1020107013543A KR20107013543A KR101588605B1 KR 101588605 B1 KR101588605 B1 KR 101588605B1 KR 1020107013543 A KR1020107013543 A KR 1020107013543A KR 20107013543 A KR20107013543 A KR 20107013543A KR 101588605 B1 KR101588605 B1 KR 101588605B1
Authority
KR
South Korea
Prior art keywords
data
code
punctured
puncturing
code rate
Prior art date
Application number
KR1020107013543A
Other languages
English (en)
Other versions
KR20100106402A (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 KR20100106402A publication Critical patent/KR20100106402A/ko
Application granted granted Critical
Publication of KR101588605B1 publication Critical patent/KR101588605B1/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
    • 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/23Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using convolutional codes, e.g. unit memory codes
    • H03M13/235Encoding of convolutional codes, e.g. methods or arrangements for parallel or block-wise encoding
    • 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/2933Coding, 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 a block and a convolutional code
    • 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
    • H03M13/6362Error control coding in combination with rate matching by puncturing
    • 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/6375Rate compatible punctured convolutional [RCPC] 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)

Abstract

레이트 호환성 콘볼루션 코드(RPCC)와 같은 레이트 호환성 코드에 따라 비휘발성 고체 상태 메모리 디바이스(100)에 데이터를 저장하는 장치 및 방법에 관한 것이다. 그러한 메모리 디바이스(100)의 일례는 플래시 메모리 디바이스(100)이다. 에러 정정 및 검출 등을 위해서 초기에는 데이터를 블록 인코딩(112)할 수 있다. 블록 코딩된 데이터를 또한 콘볼루션 인코딩(114)할 수 있다. 콘볼루션 코딩된 데이터를 펑처링(116)하여 메모리 디바이스(100)에 저장할 수 있다. 이러한 펑처링은 데이터 저장에 필요한 메모리량을 감소시킨다. 조건에 따라서, 준비되는 추가의 에러 정정량과 필요한 메모리량을 가변시키기 위해서, 펑처링을 하지 않는 것에서부터 비교적 많은 펑처링량까지 펑처링량을 가변시킬 수 있다. 메모리 디바이스(100)로부터 데이터를 판독할 때 펑처링된 데이터를 디코딩(120, 122)할 수 있다.

Description

레이트 호환성 펑처링된 코드를 지원하는 메모리 컨트롤러{MEMORY CONTROLLER SUPPORTING RATE COMPATIBLE PUNCTURED CODES}
본 발명의 실시예들은 일반적으로 집적 회로에 관한 것이다. 특히, 본 발명의 실시예들은 메모리 회로에 관한 것이다.
플래시 메모리는 소거가능하고 재프로그래밍가능한 비휘발성 메모리의 한 형태이다. 플래시 메모리에서는, 메모리 셀들이 소거를 위해 "블록"으로 배열된다. 블록은 소거된 후, 필요하다면 프로그래밍될 준비가 된다. NOR 플래시 메모리는 데이터 검색을 위해 개개의 바이트로의 액세스를 제공하는 그러나 밀도가 비교적 낮은 플래시 메모리의 한 종류이다.
NAND 플래시 메모리는 밀도가 비교적 높은 플래시 메모리의 한 종류이다. 그러한 높은 밀도는 부분적으로는 직렬로 접속된 셀들의 컬럼들을 형성함으로써 달성된다. 게다가, NAND 플래시 메모리의 경우, 데이터는 데이터 페이지와 같은 비교적 큰 바이트 그룹들로 프로그래밍되고 액세스된다. 예컨대, 페이지는 어레이의 로우나 로우의 일부에 대응할 수 있다.
예컨대, 데이터를 저장하는 메모리 셀들의 어레이는 통상적으로는 로우와 컬럼의 2차원 어레이로 배열된다. 이들 어레이는 사이즈가 크게 다를 수 있다. 어레이의 셀들이 셀 당 데이터의 2 이상의 레벨, 즉 다중 레벨 또는 둘 이상의 비트를 유지할 수 있을 때, 어레이는 효과적으로 데이터를 3차원으로 유지한다.
NAND 플래시 메모리를 위한 통상의 어레이에서, 플래시 셀들의 소스와 드레인은 직렬로(소스 대 드레인) 배열되고 컬럼이라고 한다. 셀들의 게이트들을 제어하는 "워드 라인들"이 로우들을 따라 존재한다. 데이터는 통상적으로는 로우가 한번에 액세스되고, 각 컬럼으로부터 일 비트가 액세스된다. 판독되는 로우의 워드 라인은 셀들의 저장된 상태(들)를 판독하기 위한 특정 전압으로 설정된다. 다중 레벨 셀들에 상이한 전압 레벨들을 이용할 수 있다. 다른 컬럼들의 셀들에 대한 다른 로우 라인들은, 로우의 셀들의 저장된 상태(들)를 컬럼들의 대응하는 셀들을 통해 판독할 수 있도록 셀들이 "온"이 되게 설정된다.
로우 당 바이트 수는 "페이지"의 바이트 수일 수 있으므로, 매우 넓은 범위로 변할 수 있다. 일부 제조업자들은 예컨대 두 페이지의 데이터가 하나의 워드 라인(로우)에 대응할 수 있도록, 일정한 양의 데이터로 페이지를 규정한다. 본 설명을 위해서, 데이터 "페이지"는 기입 사이클 또는 판독 사이클 동안 NAND 플래시 메모리 어레이에/로부터 기입/판독되는 데이터 양에 대응한다. 일례로, 워드 라인의 활성화로 2,112 바이트가 검색된다. 이 2,112 바이트 중, 2,048 바이트는 데이터 바이트이고, 64 바이트는 스페어 바이트로, 통상적으로는 에러 정정 코드(ECC), 마모 수준 정보, 또는 다른 오버헤드 데이터에 이용된다. 에러 정정 코드는 저장된 데이터의 강건성을 증가시킨다. 통상적으로, 순환 잉여 검사(CRC) 체크섬, 리드-솔로몬 에러 정정 등의 에러 정정 코드를 생성하는 데에 블록 코드의 한 형태가 이용된다. 이들 에러 정정 코드는, 데이터 바이트의 판독 시에 에러가 존재하는지를 검출하고, 통상적으로는 에러가 에러 정정 코드의 능력을 초과하지 않는다면 데이터 바이트의 에러를 정정할 수 있다.
플래시 메모리는 많은 용도를 갖는다. 예로는 플래시 메모리 하드 드라이브(하드 드라이브의 대체), USB 플래시 드라이브 또는 썸 드라이브, 모바일 폰, 디지털 카메라, 디지털 미디어 플레이어, 게임, 메모리 카드, 내비게이션 디바이스, 퍼스널 디지털 어시스턴트, 컴퓨터 등이 있다. 에러 정정 코드는, 한도 내에서, 데이터 바이트로 데이터의 많은 에러를 정정할 수 있다. 그러나, 그 한도를 넘으면, 통상적으로는 에러가 있는 데이터를 정정할 수 없다. 예컨대, 워드 라인이 고장나면, 로우 전체의 데이터를 판독함에 있어 문제가 될 수 있다. 이것은 에러 정정 코드가 정정하기에는 너무 많은 에러를 유발한다. 데이터의 위험 상태(criticality)에 따라, 데이터의 정정할 수 없는 에러의 영향은 불편한 정도에서 치명적인 정도까지 이를 수 있다.
본원에서의 도면 및 관련 설명은 본 발명의 특정 실시예들을 예시하기 위한 것이며 한정하고자 하는 것은 아니다.
도 1은 외부 블록 코드와 내부 레이트 호환성 코드로 데이터를 저장하는 메모리 디바이스를 포함하는 개략도이다.
도 2는 콘볼루션 코드를 생성하는 코더의 일례를 개략적으로 도시한다.
도 3은 콘볼루션 코드를 펑처링하는 데이터 흐름을 개략적으로 도시한다.
도 4는 NAND 플래시 메모리 디바이스에 데이터를 저장하기 위한 코드 레이트를 동적으로 선택하는 프로세스를 개략적으로 도시한 흐름도이다.
레이트 호환성 콘볼루션 코드(RCPC)와 같은 레이트 호환성 코드에 따라 비휘발성 고체 상태 메모리 디바이스에 데이터를 저장한다. 그러한 메모리 디바이스의 일례가 플래시 메모리 디바이스이다. 에러 정정 및 검출 등을 위해서 초기에는 데이터를 블록 인코딩할 수 있다. 블록 인코딩된 데이터를 또한 콘볼루션 인코딩한다. 콘볼루션 인코딩은 리던던시를 증가시키면서, 저장할 데이터량도 증가시킨다. 펑처링(때로는 "퍼포레이팅(perforate)"이라고도 함) 시에는, 콘볼루션 인코딩된 데이터의 일부를 펑처링 패턴에 따라 제거한다. 펑처링 패턴의 예에 대해서는 도 3을 참조하여 후술할 것이다. 이것은 코드 레이트 m/n(m은 정보 심볼수, n은 레이트 호환성 코드의 코드 심볼수)를 증가시킨다. 이러한 펑처링은 데이터 저장에 필요한 메모리량을 감소시킨다. 조건에 따라서, 준비되는 추가의 에러 정정량과 필요한 메모리량을 가변시키기 위해서, 펑처링을 하지 않는 것에서부터 비교적 많은 펑처링량까지 펑처링량을 가변시킬 수 있다. 메모리 디바이스로부터 데이터를 판독할 때 펑처링된 인코딩 데이터를 디코딩한다. 본원에서는 특정 실시예들을 설명하지만, 본원에 기재한 이점 및 특징을 모두 갖지 않는 실시예들을 포함한 다른 실시예들도 당업자에게는 명백할 것이다.
용어 "블록"을 사용하는 두가지 상황이 있다. NAND 플래시에 있어서, 블록은 메모리의 소거가능한 단위에 대응하는 페이지들의 집합이다. 에러 정정에 있어서는, 블록 코드는 에러 정정의 타입을 나타낸다. 상황에 따라 이들을 구별할 수 있다.
도 1은 조정가능한 코드 레이트 m/n를 갖는 레이트 호환성 코드, 즉 콘볼루션 코드를 이용하여 인코딩된 데이터를 생성하는 메모리 디바이스(100)를 포함하는 개략도이다. 레이트 호환성 코드의 일례는 콘볼루션 코드이다. 콘볼루션 코드는 콘볼루션 인코더에 입력된 데이터 스트림을 그 인코더의 임펄스 응답과 콘볼루션하는 순방향 에러 정정 기술이다. 콘볼루션 코드의 계산의 일례의 블록도를 도 2에 도시한다. 도시한 실시예는 내부 코드와 외부 코드에 의해 형성한 연결된 에러 정정 코드를 생성한다. 우선은 외부 에러 정정 코드를 생성한다. 그 외부 코드를 생성하고 또한 그 외부 코드를 인코딩한 후에 내부 에러 정정 코드를 인코딩한다. 외부 블록 코드는 에러 검출 기능 및 에러 정정 기능을 제공한다. 내부 레이트 호환성 코드는 추가의 에러 정정 기능을 제공한다. 블록으로 데이터를 처리하는 블록 코드와 대비하여, 내부 레이트 호환성 코드는 연속하여 데이터를 처리한다.
도시한 메모리 디바이스(100)는 메모리 디바이스(100)를 이용하는 디바이스를 나타내는 CPU(102)와 통신한다. CPU(102)는 마이크로프로세서, 마이크로컨트롤러, 시그널 프로세서 등에 대응할 수 있는 프로세서이다. 도시한 메모리 디바이스(100)는 기입 버퍼(104), 컨트롤러(106), 메모리 어레이(108), 판독 버퍼(110)를 포함한다.
컨트롤러(106)는 블록 코드 인코더(112), 레이트 호환성 인코더(124), 레이트 호환성 디코더(126), 블록 코드 디코더(122)를 포함한다. 도시한 실시예에서, 레이트 호환성 인코더(124)는 또한 펑처링가능한 코드 인코더(114)와 펑처링 회로(116)를 포함하고, 레이트 호환성 디코더(126)는 또한 삽입 회로(118)와 펑처링가능한 코드 디코더(120)를 포함한다. 컨트롤러(106)는 하드웨어, 펌웨어(소프트웨어), 또는 이들 하드웨어와 펌웨어의 조합으로 구현될 수 있다. 블록 코드 인코더(112)와 펑처링가능한 코드 인코더(114)는 각각 순방향 에러 정정(FEC)을 제공한다. 컨트롤러(106)는 메모리 어레이(108)에의 데이터 저장과 메모리 어레이(108)로부터의 데이터 검색을 다룬다. 편의상, 버퍼, 로우 디코더, 감지/증폭 회로 등의 잘 알려진 구성 요소는 도 1에 도시하지 않는다. 예컨대, 블록 코드 인코더(112)와 펑처링가능한 코드 인코더(114) 사이에는 인코딩할 데이터를 저장하기 위한 버퍼가 있을 수 있다. 펑처링가능한 코드 인코더(114)와 펑처링 회로(116) 사이에는 펑처링할 데이터를 저장하기 위한 버퍼가 있을 수 있다. 펑처링 회로(116)와 메모리 어레이(108)용 드라이버 사이에는 기입할 펑처링된 인코딩 데이터를 저장하기 위한 버퍼가 있을 수 있다.
일실시예에서, 메모리 어레이(108)는 NAND 플래시 메모리 어레이에 대응한다. NAND 플래시 메모리 어레이는 단일 레벨 또는 다중 레벨이거나, 다수의 어레이에 대응할 수도 있다. NAND 플래시 메모리의 상황에서 특정 실시예들을 설명하겠지만, 본원에 기재한 원리 및 이점은 다른 타입의 메모리에도 적용할 수 있다. 소정 범위의 비휘발성 고체 상태 메모리 타입을 메모리 어레이(108)에 이용할 수 있다. 예컨대, 메모리 어레이(108)는 다른 타입의 플래시(예컨대, NOR 타입), 전기적으로 소거가능하고 프로그램가능한 리드 온리 메모리(EEPROM), 자기저항 램덤 액세스 메모리(MRAM), 프로그램가능한 도전체 메모리, 강유전체 메모리 등에 대응할 수 있다.
기입 버퍼(104)는 메모리 어레이(108)에 저장할 예정인 데이터를 저장한다. 판독 버퍼(110)는 메모리 어레이(108)로부터 검색되어 CPU(102)에 의해 판독되는 데이터를 저장한다. NAND 플래시 메모리의 경우, 통상적으로는 데이터 "페이지"가 한꺼번에 메모리 어레이(108)에 기입되거나 메모리 어레이(108)로부터 판독된다. 이 데이터 페이지의 크기는 메모리 디바이스에 따라 달라질 수 있다. 통상적인 페이지 크기로는 512 바이트, 1024 바이트, 2048 바이트 등 있으며, 이것들로 한정되지 않는다. 해당 도면에서, 변수 N은 페이지의 데이터량(예컨대, 바이트수)을 나타낸다. 통상적으로는 CPU(102)의 상태에 따라 특정 페이지 크기가 크기 고정되지만, 메모리 어레이(108)에 저장되는 페이지 크기는 보다 상세히 후술하는 바와 같이 코드 레이트에 따라 달라질 것이다.
N개의 정규 데이터 바이트수가 블록 코드 인코더(112)에 의해 인코딩된다. 블록 코드의 예로는 해밍 코드, 리드-솔로몬 에러 정정 코드, BCH(Bose-Chaudhuri-Hocquenghem) 코드 등이 있으며, 이것들로 한정되지 않는다. 한도 내에서, 이들 블록 에러 정정 코드를 이용하여 많은 데이터 에러를 검출하여 정정할 수 있다. 블록 코드를 이용하여 인코딩된 데이터는 가변적인 y개의 블록 코드 바이트수로서 도 1에 표시된 추가의 바이트를 차지한다. 종래의 NAND 플래시 메모리 어레이에서, 블록 코드는 통상적으로 대응하는 페이지에 대한 예비(spare) 바이트 영역에 저장되는데, 이 영역은 블록 코드뿐만 아니라 다른 정보도 포함할 수 있다. 예시용으로, 이들 가능한 여분의 바이트는 변수 y로 포함된다. 따라서, 종래의 NAND 플래시 메모리 어레이에서는, 정규 데이터가 N 바이트이고 에러 정정 데이터가 y 바이트인 페이지에 대하여 N+y 바이트가 저장된다. 블록 코드의 경우, N+y 바이트 중 N 바이트는 동일한 데이터를 유지하고, 에러 정정을 위한 y 바이트의 블록 코드가 N 바이트의 정규 데이터에 부가된다. N 바이트의 정규 데이터는 블록 코드 코더(112)에 대한 최초 데이터로서 간주될 수 있고, N+y 바이트는 펑처링가능한 코드 코더(114)에 대한 최초 데이터로서 간주될 수 있다. 블록 코드는 나중에 인코딩된 데이터의 디코딩 시에 에러 검출 및/또는 정정을 가능하게 한다.
레이트 호환성 인코더(124)는 블록 인코딩된 데이터를 인코딩한다. 일 실시예에서, 레이트 호환성 인코더(124)는 펑처링가능한 코드 인코더(114)와 펑처링 회로(116)를 포함한다. 펑처링가능한 코드 인코더(114)는 내부 레이트 호환성 코드, 예컨대 콘볼루션 코드를 이용하여, 블록 코드 인코더(112)로부터의 N+y개의 데이터 바이트를 인코딩한다. 통상적으로, 펑처링 전의 코드에 대한 코드 레이트는 1/n, 에컨대 1/2, 1/3, 1/4 등이다. 이러한 인코딩은 팩터 z0 만큼 페이지에 대한 데이터량을 증가시켜, 펑처링가능한 코드 인코더(114)의 출력에서는 z0(N+y) 바이트가 생성된다. 1/n의 코드 레이트의 경우, z0는 n과 같다. 예컨대, 하프 레이트(1/2) 코드 레이트의 경우, z0는 2와 같다. 하프 레이트 코드로 콘볼루션 인코딩된 데이터를 생성하는 것에 대해서는 도 2를 참조하여 보다 상세히 후술할 것이다.
펑처링 회로(116)는 콘볼루션 인코딩된 데이터를 펑처링한다. 일 실시예에서, 펑처링 회로(116)의 기능은 펑처링가능한 코드 인코더(114)와 통합될 수 있다. 이것은 데이터량을 감소시켜, 코드 레이트(m/n)를 증가시킨다. 펑처링 후에, 페이지에 대한 비트수는 z1(N+y) 바이트이고, 여기서 z1은 펑처링 후 코드 레이트의 역이다. z1(N+y) 바이트가 메모리 어레이(108)에 저장된다. 데이터 크기의 증가로, 메모리 어드레스가 또한 메모리 디바이스에 내부적으로 매핑될 수 있어 저장되는 데이터 크기의 증가를 초래한다. 펑처링의 이점은 그것을 이용하여 코드 레이트(m/n), 및 그에 따라 사용되는 스토리지량 대 저장되는 리던던시량을 가변시킬 수 있다는 점이다.
도 3을 참조하여 후술하는 바와 같이, 펑처링된 코드 레이트의 예로는 2/3, 4/5가 있으며, 이것들로 한정되지 않는다. 다른 코드 레이트도 적용가능하고 당업자가 용이하게 결정할 수 있다. 코드 레이트(m/n)는 선택되는 특정 펑처링 패턴과 펑처링할 데이터를 인코딩하는 데에 사용하는 코드의 코드 레이트에 좌우된다. 데이터의 "펑처링" 시에는, 데이터의 일정 비트가 소거된다. 도 1에서는, 펑처링 패턴 또는 펑처링 패턴에 대한 표시가 제어 회로(128)에 의해 제공된다. 코드 레이트(m/n)는 펑처링 패턴에 따라 달라질 수 있고, 펑처링된 데이터의 저장에 사용되는 메모리 어레이(108)의 공간량도 달라질 수 있다. 따라서, 어드레스, 로우 및/또는 컬럼의 매핑과 특정 블록이 이용하는 코드 레이트의 표시가 메모리 어레이(108)의 참조 영역에 저장되어 제어 회로(128)에 의해 이용 및/또는 선택될 수 있다. 일 실시예에서, 제어 회로(128)는 또한 펑처링된 데이터의 펑처링 레벨을 나타내는 참조 정보를 메모리 어레이(108)에 저장한다. 예컨대, 펑처링 패턴이 저장될 수 있다. 일 실시예에서, 참조 정보는 그 자체가 펑처링되는 것이 아니므로 펑처링 패턴을 알지 못하더라도 디코딩될 수 있다. 일례로서, 참조 정보는 각각의 페이지의 말단에 저장된다. 그러나, 참조 정보는 또한 각각의 블록의 말단, 전체 어레이에 대한 하나의 블록 내 등에 저장될 수 있다. 제어 회로(128)의 가능한 기능의 또 다른 예에 대해서는 도 4를 참조하여 후술할 것이다.
레이트 호환성 디코더(126)는 펑처링된 데이터를 디코딩한다. 레이트 호환성 디코더(126)는 또한 적용할 수 있는 펑처리되지 않은 데이터를 디코딩할 수 있다. 일 실시예에서, 레이트 호환성 디코더(126)는 삽입 회로(118)와 펑처링가능한 코드 디코더(120)를 포함한다. 메모리 어레이(108)로부터 z1(N+y) 바이트의 펑처링된 데이터가 검색되면, 삽입 회로(118)가 펑처링 패턴을 이용하여 비터비(Viterbi) 디코더의 가능한 디코딩 시퀀스의 가능한 계산(브랜치 메트릭)에 영향을 주지 않는 더미 데이터를 삽입하여, 이전에 소거된 데이터를 대체한다(디펑처링). 다른 실시예로, 더미 데이터를 삽입하기 보다는, 특정 데이터가 펑처링된 것을 디코더에게 지시하는 소거 포인터를 이용한다. 일 실시예에서, 삽입 회로(118)의 "삽입" 기능은 펑처링가능한 코드 디코더(120)의 배선된 수리적 등가물로 대체된다. 에러의 총수가 레이트 호환성 코드의 에러 정정 능력 내에 있다면 펑처링된 데이터를 정확하게 디코딩하기에 충분한 리던던시가 있어야 한다.
펑처링가능한 코드 디코더(120)는 z0(N+y) 바이트로 재구성된 코드를 디코딩한다. 일 실시예에서, 펑처링가능한 코드 디코더(120)는 인코딩된 데이터를 콘볼루션적으로 디콘볼루션하는 비터비 디코더이다. 디콘볼루션된 데이터는 (예컨대, 추가의 에러 정정 및/또는 정정을 위해) 블록 코드 디코더(122)에 제공된다. 블록 코드 디코더(122)는 z(N+y) 바이트의 블록 인코딩된 데이터를 디코딩하여 N 바이트의 정정된 데이터를 생성한다(정정할 수 없는 에러가 없는 경우). N 바이트의 정정된 데이터는 CPU(102)가 액세스하는 판독 버퍼(110)에 배치된다.
비교적 낮은 코드 레이트에서, 블록 코드 코더(112)와 레이트 호환성 인코더(124)의 조합으로부터의 외부 블록 코드와 내부 콘볼루션 코드의 연결은 저장된 데이터의 무결성을 향상시키고 정정가능한 데이터 복구 가능성을 증가시켜야 한다. 비트 에러 레이트(BER)를 낮춤으로써 그 효과를 볼 수 있다. BER의 향상을 이용하여, 더 가치있는 데이터는 더 많은 리던던시로, 덜 가치있는 데이터는 덜 많은 리던던시로 인코딩하도록 이용가능한 메모리를 할당할 수 있다. 예컨대, 펌웨어, 오퍼레이팅 시스템 등의 프로그램 데이터나, 그 밖의 프로그램 데이터는 음악 파일 등의 애플리케이션 데이터보다 많은 리던던시로 인코딩될 수 있다. 다른 예로, 도 4를 참조하여 후술하는 바와 같이, 신뢰성이 덜한 것으로 식별된 메모리 어레이(108)의 영역의 데이터는 비교적 낮은 레이트의 내부 코드와 연결될 수 있다. 예컨대, 펑처링량을 줄이거나 펑처링을 전체적으로 불능으로 하여 리던던시와 내부 코드의 에러 정정 능력을 증가시킬 수 있다.
도 2는 레이트 호환성 인코더의 일례인 콘볼루션 인코딩 데이터에 대한 인코더(200)의 일례를 도시한다. 인코더(200)는 코드 레이트 m/n이 1/2인 콘볼루션 코드를 이용한다. 인코더는 시프트 레지스터(202)와, 제1 모듈로-2 가산기(204), 제2 모듈로-2 가산기(206)를 포함한다. 모듈로-2 가산기(204, 206)는 배타적 논리합(XOR) 로직을 구현한다. 입력 데이터 비트 X를 직렬로 시프트 레지스터(202)에 제공한다. 시프트 레지스터(202)와 모듈로-2 가산기(204, 206)는 생성 다항식 Y0, Y1을 모듈로-2 가산기(204, 206)마다 각각 하나씩 구현한다. 생성 다항식은 콘볼루션 인코더의 전달 함수를 특징짓는다. 넓은 범위의 생성 다항식을 이용할 수 있다. 아울러, 필요하다면 2보다 많은 생성 다항식을 계산할 수 있고, 그에 대응하여 코드 레이트가 예컨대, 1/3, 1/4 등으로 감소한다.
도 3은 데이터 스트림을 도시한다. 예컨대, 도 1을 참조하면, 데이터 스트림은 펑처링가능한 코드 인코더(114), 펑처링 회로(116), 메모리 어레이(108)에 대한 저장 및 검색, 삽입 회로(118), 펑처링가능한 코드 디코더(120)를 도는 경로에서 발생하는 것에 대응할 수 있다. 제1 예로 위에서, 데이터 스트림을 1/2의 코드 레이트를 이용하여 콘볼루션 인코딩하고 펑처링 없이 저장한다. 제2 예로 중간에서, 데이터 스트림을 1/2의 코드 레이트를 이용하여 콘볼루션 인코딩하고 펑처링하여 2/3의 코드 레이트를 얻는다. 제3 예로 밑에서, 데이터 스트림을 1/2의 코드 레이트를 이용하여 콘볼루션 인코딩하고 펑처링하여 4/5의 코드 레이트를 얻는다.
다시 제1 예의 위에서, 블록 코드 인코더(112)의 출력으로부터의 데이터 스트림 x0,x1,x2,x3,...을 콘볼루션 인코딩하여 2개의 출력 데이터 스트림 y0 0,y1 0,y2 0,y3 0,... 및 y0 1,y1 1,y2 1,y3 1,...을 생성한다. 이들 2개의 출력 데이터 스트림을 펑처링 없이 메모리 어레이(108)에 저장한다. 메모리 어레이(108)로부터 데이터가 검색되면, 펑처링가능한 코드 디코더(120)가 데이터 삽입 없이 y0 0,y1 0,y2 0,y3 0,... 및 y0 1,y1 1,y2 1,y3 1,...의 데이터 스트림을 디코딩할 수 있다.
제2 예의 중간에서, 데이터 스트림 x0,x1,x2,x3,...을 콘볼루션 인코딩하여 2개의 출력 데이터 스트림 y0 0,y1 0,y2 0,y3 0,... 및 y0 1,y1 1,y2 1,y3 1,...을 생성하고, y0 0,y1 0,y2 0,y3 0,... 및 y0 1,y2 1,...로 펑처링하여, 메모리 어레이(108)에 저장한다. 데이터 판독의 경우, 메모리 어레이(108)로부터 펑처링된 데이터 y0 0,y1 0,y2 0,y3 0,... 및 y0 1,y2 1,...를 검색하고, 디코딩을 방해하지 않는 더미 값을 삽입하여 소거된 데이터를 대체하거나 소거 포인터를 이용하고, 펑처링가능한 코드 디코더(120)가 그 삽입된 펑처링된 데이터 y0 0,y1 0,y2 0,y3 0,... 및 y0 1,-,y2 1,-,...를 디코딩하여 최초 데이터 스트림 x0,x1,x2,x3,...으로 다시 디코딩한다. 대쉬(-)는 소거된 데이터를 나타낸다.
제3 예의 밑에서, 데이터 스트림 x0,x1,x2,x3,...을 콘볼루션 인코딩하여 2개의 출력 데이터 스트림 y0 0,y1 0,y2 0,y3 0,... 및 y0 1,y1 1,y2 1,y3 1,...을 생성하고, y0 0,y1 0,y2 0,y3 0,... 및 y0 1,...로 펑처링하여, 메모리 어레이(108)에 저장한다. 데이터 판독의 경우, 메모리 어레이(108)로부터 펑처링된 데이터 y0 0,y1 0,y2 0,y3 0,... 및 y0 1,...를 검색하고, 디코딩을 방해하지 않는 더미 값을 삽입하여 소거된 데이터를 대체하거나 소거 포인터를 이용하고, 펑처링가능한 코드 디코더(120)가 그 삽입된 펑처링된 데이터 y0 0,y1 0,y2 0,y3 0,... 및 y0 1,-,-,-,...를 디코딩하여 최초 데이터 스트림 x0,x1,x2,x3,...으로 다시 디코딩한다.
도 3에 도시한 바와 같이, 레이트 호환성 코드는 코드 레이트를 조작하여 다양한 밀도로 데이터를 저장할 수 있게 한다. 따라서, 비교적 많은 리던던시가 필요할 경우에는 비교적 낮은 코드 레이트를 이용할 수 있다. 이것은 저장 용량과, 메모리 디바이스(100)(도 1)가 현장 배치된 후 가능한 저장 신뢰성을 절충한다. 따라서, 예컨대, 사용자는 더 신뢰성 있는 데이터 저장과 더 많은 데이터 저장 사이에서 선택할 수 있다. 다른 예로, 레이트 호환성 코드에 이용하는 콘볼루션 코드의 구속장(constraint length) k를 달리 할 수 있다. 구속장 k는 콘볼루션 인코더의 전달 함수의 길이를 나타낸다. 더 신뢰성 있는 데이터 저장과 디코딩 복잡도를 절충할 수 있다. 칩의 선택 부분을 예컨대 비교적 높은 코드 레이트나 비교적 낮은 코드 레이트(그리고 그 사이)로 미리 할당될 수 있다. 다른 예로, 펌웨어, 오퍼레이팅 시스템 등의 프로그램 데이터는 음악, 문서 등의 데이터와 같은 애플리케이션 데이터보다 더 가치있는 것으로 간주될 수 있다. 종종, 저장되는 데이터의 타입은 헤더를 판독함으로써 식별가능하다. 따라서, 더 가치있는 데이터는 보다 낮은 레이트 코드가 제공하는 보다 많은 리던던시로 저장될 수 있다. 페이지, 블록, 펑처링 패턴 등의 적용가능한 매핑은 불량 블록 테이블 데이터를 또한 저장하는 데이터 블록과 같이 영속 메모리의 참조 영역에 저장될 수 있다.
다른 예로, 코드 레이트 m/n이 1/4인 콘볼루션 코드를 생성한다. 1/4의 펑처링되지 않은 코드 레이트를 갖는 콘볼루션 코드를 이용하여 참조 정보를 저장한다. 그 밖의 데이터의 저장을 위해서, 콘볼루션 코드를 1/3, 1/2 등의 상이한 코드 레이트로 펑처링한다. 일 실시예에서, 도 4를 참조하여 후술하는 바와 같이 펑처링량은 선택가능하다. 아울러, 메모리 어레이(108)(도 1)는 다중 레벨 셀을 가질 수 있고, (펑처링된 또는 펑처링되지 않은) 컨볼루션 코딩된 데이터를 다중 레벨 셀들에 확산시킬 수 있다.
일 실시예에서, 메모리 디바이스(100)(도 1)를 현장 배치한 후에 코드 레이트를 또한 달리 할 수 있다. 그러나, 인코딩된 데이터의 블록 크기와 페이지 크기가 코드 레이트에 따라 달라지므로, 메모리 맵, 어드레스의 시작 또는 정지를 위한 표시자, 선택되는 펑처링 패턴의 표시 등을 또한 적절히 조정하고 검색을 위해 영속적으로 저장할 필요가 있다는 것을 주의해야 한다. 구속장 및/또는 생성 다항식이 달라지면, 이들을 또한 나중의 검색을 위해 저장할 수 있다. 블록은 코드 레이트에 따라 가변량의 물리적 메모리 공간을 소비할 것이므로, 그것이 소거되는 경우에 블록을 할당할 수 있다. 도 4는 코드 레이트의 동적 선택의 일례를 도시한다.
도 4는 NAND 플래시 메모리 디바이스에 데이터를 저장하기 위한 코드 레이트를 동적으로 선택하는 프로세스를 개략적으로 도시한 흐름도이다. 당업자라면 본 발명의 기술적 사상 및 범주 내에서 도시한 프로세스를 다양한 방식으로 변경할 수 있다는 것을 알 것이다. 예컨대, 다른 실시예로, 도시한 프로세스의 각종 부분을 결합하거나, 다른 순서로 재배열하거나, 제거하는 등을 할 수 있다. 일 실시예에서, NAND 플래시 메모리 디바이스의 각종 블록은 우선은 비교적 높은 코드 레이트(낮은 리던던시)로 시작하고, 마모가 발생하면, 더 많은 리던던시를 갖도록 코드 레이트를 낮출 수 있다.
NAND 플래시 메모리 디바이스에서는, 다수 페이지의 비교적 많은 블록으로 메모리를 소거하고, 통상적으로는 한꺼번에 데이터를 페이지에 기입하고 페이지로부터 판독한다. 프로세스는 블록을 소거하거나 소거된 블록의 일부를 프로그래밍하기 위한 커맨드를 수신하는 것(410)으로 시작한다.
프로세스는 특정 블록에 이용되는 코드 레이트에 한계 조건의 표시가 있는지를 판정한다(420). 블록 ECC에 의해 정정되는 비트수의 증가에 의해 한계 조건을 표시할 수 있다. 예컨대, 1 비트 내에서 추가의 에러를 정정할 수 없다는 것을 블록 ECC가 표시하면, 그 페이지 및/또는 블록는 열화된 것으로 간주되고 또한 덜 펑처링하여 리던던시를 증가시키도록 플래깅되는 것으로 간주될 수 있다. 이것은 블록의 퇴거를 연기시키고 메모리 디바이스(100)(도 1)의 서비스 수명을 증가시킬 수 있다. 코드 레이트를 동적으로 선택하는 것이 바람직한 다른 상황이 있다. 이전에 언급한 예들 외에도, 메모리 디바이스(100)의 메모리 어레이(108)에서 얼마나 많은 메모리를 이용할 수 있는지에 다라 코드 레이트를 선택할 수 있다. 도 4에 도시한 프로세스는 단지 일례일 뿐이다.
플래시 메모리 칩은 마모 메커니즘을 보인다. 예컨대, 메모리 디바이스(100)(도 1)는 제조 동안에는 처음에는 비교적 높은 코드 레이트, 예컨대 4/5로 동작하도록 구성될 수 있다. 메모리 디바이스(100)가 마모되면, 메모리 디바이스(100)가 신뢰성을 유지할 수 있도록 코드 레이트를 감소시킬 수 있다. 이러한 블록 ECC 디코딩을 판독 동작 동안에 행하고 있다는 것을 알아야 한다. 일 실시예에서, 블록을 판독하고 블록을 소거하기 전에 블록의 페이지에 대한 블록 ECC를 체크한다. 다른 실시예에서, 정규 판독 동작 동안에 진행 순서에 기초하여 블록의 페이지를 판독한다.
블록 ECC가 한계 조건을 나타내면, 코드 레이트를 감소시킨다(430). 이것은 다음의 데이터 세트에 대한 펑처링량을 줄임으로써 달성될 수 있다. 예컨대, 코드 레이트를 2/3 내지 1/2로 (펑처링 없이) 조정할 수 있다.
블록 ECC가 한계 조건을 나타내지 않으면, 프로세스는 이들 메모리 위치에 프로그래밍되는 다음의 데이터 세트에 대하여 이전 코드 레이트의 이용을 그대로 유지하는 단계(440)로 진행할 수 있다.
일 실시예는, 데이터를 수신하고, 수신된 데이터를 펑처링하도록 구성된 인코더와, 펑처링된 데이터를 저장하도록 구성된 하나 이상의 메모리 어레이와, 상기 펑처링된 데이터를 디코딩하도록 구성된 디코더를 포함하는 장치이다.
일 실시예는, 하나 이상의 메모리 어레이를 갖는 비휘발성 메모리 디바이스에 데이터를 저장하는 방법으로서, 상기 하나 이상의 메모리 어레이에 저장하기 위한 데이터를 수신하는 단계와, 상기 데이터를 인코딩하여 펑처링된 데이터를 생성하는 단계와, 상기 펑처링된 데이터를 상기 하나 이상의 메모리 어레이에 저장하는 단계를 포함하는 방법이다.
일 실시예는, 하나 이상의 메모리 어레이를 갖는 비휘발성 메모리 디바이스에 저장된 펑처링된 데이터를 검색하는 방법으로서, 상기 메모리 디바이스의 상기 하나 이상의 메모리 어레이로부터 상기 펑처링된 데이터를 검색하는 단계와, 상기 펑처링된 데이터와 연관된 펑처링 패턴에 따라 상기 펑처링된 데이터를 디코딩하는 단계를 포함하는 방법이다.
일 실시예는, 비휘발성 고체 상태 메모리 디바이스에서 메모리 공간의 블록에 대한 코드 레이트를 결정하는 방법으로서, 상기 메모리 디바이스의 데이터 블록의 적어도 일부분에 대하여 한계 조건이 존재하는지를 결정하는 단계와, 상기 한계 조건이 존재하면 상기 블록에 이용되는 코드 레이트를 감소시키는 단계를 포함하는 방법이다.
이상, 다양한 실시예를 설명하였다. 이들 특정 실시예를 참조하여 설명하였으나, 이들 설명은 예시적인 것이지 한정적인 것이 아니다. 당업자라면 첨부한 청구범위에 규정된 본 발명의 기술적 사상 및 범주 내에서 각종 변형 및 응용이 가능하다.

Claims (25)

  1. 데이터를 수신하고, 수신된 데이터를 펑처링하도록 구성된 인코더와,
    펑처링된 데이터를 저장하도록 구성된 하나 이상의 NAND 플래시 메모리 어레이와,
    상기 인코더가 이용하는 코드 레이트를 선택하도록 구성된 제어 회로 - 상기 코드 레이트는 상기 하나 이상의 NAND 플래시 메모리 어레이의 한계 조건(marginal condition)의 검출에 기초하여 선택되고, 상기 코드 레이트는 펑처링량을 선택함으로써 변함 - 와,
    상기 펑처링된 데이터를 디코딩하도록 구성된 디코더
    를 포함하는 장치.
  2. 제1항에 있어서,
    상기 인코더는 펑처링가능한 코드 인코더와 펑처링 회로를 더 포함하는 장치.
  3. 제2항에 있어서,
    상기 펑처링가능한 코드 인코더는 콘볼루션 인코더를 포함하는 장치.
  4. 제3항에 있어서,
    상기 데이터를 블록 인코딩하도록 구성된 블록 코드 인코더 - 상기 콘볼루션 인코더는 블록 인코딩된 데이터를 콘볼루션 인코딩하도록 구성됨 - 와,
    디코딩된 펑처링된 데이터를 더 디코딩하도록 구성된 블록 코드 디코더
    를 더 포함하는 장치.
  5. 제4항에 있어서,
    상기 펑처링가능한 코드 디코더는 비터비 디코더를 포함하는 장치.
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 제1항에 있어서,
    상기 하나 이상의 NAND 플래시 메모리 어레이의 적어도 하나의 블록에는 제1 코드 레이트가 할당되고, 적어도 제2 블록에는 제2 코드 레이트가 할당되는 장치.
  11. 제1항에 있어서,
    상기 하나 이상의 NAND 플래시 메모리 어레이는 메모리 셀들의 다중 레벨 내에서 상기 펑처링된 데이터를 저장하도록 구성된 다중 레벨 메모리 셀들을 포함하는 장치.
  12. 제1항에 있어서,
    상기 인코더는 상기 수신된 데이터로부터 1/4의 코드 레이트를 갖는 콘볼루션 코드를 생성하도록 구성되고, 상기 콘볼루션 코드를 펑처링하여 1/3 내지 1/2의 선택가능한 코드 레이트를 갖는 펑처링된 데이터를 생성하도록 더 구성되는 장치.
  13. 제1항에 있어서,
    상기 제어 회로는 상기 펑처링된 데이터의 펑처링 레벨을 나타내는 참조 정보를 펑처링되지 않은 형태로 상기 하나 이상의 메모리 어레이에 저장하도록 구성된 장치.
  14. 하나 이상의 NAND 플래시 메모리 어레이를 갖는 비휘발성 메모리 디바이스에 데이터를 저장하는 방법으로서,
    상기 하나 이상의 NAND 플래시 메모리 어레이에 저장할 예정인 데이터를 수신하는 단계와,
    코드 레이트를 선택하는 단계 - 상기 코드 레이트는 상기 하나 이상의 NAND 플래시 메모리 어레이의 한계 조건 검출에 기초하여 선택되고, 상기 코드 레이트는 펑처링량을 선택함으로써 변함 - 와,
    상기 코드 레이트를 사용하여 상기 데이터를 인코딩하여 펑처링된 데이터를 생성하는 단계와,
    상기 펑처링된 데이터를 상기 하나 이상의 NAND 플래시 메모리 어레이에 저장하는 단계
    를 포함하는 방법.
  15. 제14항에 있어서,
    수신된 데이터를 콘볼루션 인코딩하고 펑처링하여 펑처링된 데이터를 생성하는 단계를 더 포함하는 방법.
  16. 제15항에 있어서,
    상기 데이터를 콘볼루션 인코딩하기 전에 블록 코드로 상기 데이터를 인코딩하는 단계를 더 포함하는 방법.
  17. 제14항에 있어서,
    제1 펑처링 패턴으로 콘볼루션 코딩된 데이터의 적어도 일부분을 펑처링하여 제1 코드 레이트를 갖는 펑처링된 데이터를 생성하고, 제2 펑처링 패턴으로 콘볼루션 코딩된 데이터의 적어도 제2 부분을 펑처링하여 제2 코드 레이트를 갖는 펑처링된 데이터를 생성하는 단계를 더 포함하고,
    상기 제1 펑처링 패턴으로 펑처링된 데이터는 상기 하나 이상의 NAND 플래시 메모리 어레이의 제1 부분에 저장되고, 상기 제2 펑처링 패턴으로 펑처링된 데이터는 상기 하나 이상의 NAND 플래시 메모리 어레이의 제2 부분에 저장되는 방법.
  18. 제17항에 있어서,
    적어도 부분적으로는 수신된 데이터의 데이터 타입에 따라 상기 제1 코드 레이트와 상기 제2 코드 레이트 중에서 선택하는 단계를 더 포함하는 방법.
  19. 제14항에 있어서,
    인코딩하는 단계는,
    1/4의 코드 레이트를 갖는 콘볼루션 코드를 생성하는 단계와,
    상기 콘볼루션 코드를 펑처링하여 1/3 내지 1/2의 선택가능한 코드 레이트를 갖는 펑처링된 데이터를 생성하는 단계를 포함하는 방법.
  20. 제14항에 있어서,
    상기 펑처링된 데이터의 펑처링 레벨을 나타내는 참조 정보를 펑처링되지 않은 형태로 상기 하나 이상의 메모리 어레이에 저장하는 단계를 더 포함하는 방법.
  21. 하나 이상의 메모리 어레이를 갖는 비휘발성 메모리 디바이스에 저장된 펑처링된 데이터를 검색하는 방법으로서,
    상기 메모리 디바이스의 상기 하나 이상의 메모리 어레이로부터 상기 펑처링된 데이터를 검색하는 단계와,
    상기 펑처링된 데이터의 펑처링 레벨을 나타내는 참조 정보를 펑처링되지 않은 형태로 상기 하나 이상의 메모리 어레이로부터 검색하는 단계와,
    상기 참조 정보에 따라 펑처링 패턴을 선택하는 단계와,
    상기 펑처링된 데이터와 연관된 상기 펑처링 패턴에 따라 상기 펑처링된 데이터를 디코딩하는 단계
    를 포함하는 방법.
  22. 제21항에 있어서,
    상기 디코딩은 비터비 디코딩을 포함하는 방법.
  23. 삭제
  24. 비휘발성 고체 상태 메모리 디바이스에서 메모리 공간의 블록에 대한 코드 레이트를 결정하는 방법으로서,
    상기 비휘발성 고체 상태 메모리 디바이스 내의 블록의 적어도 일부분에 대하여 한계 조건이 존재하는지를 결정하는 단계 - 상기 블록은 메모리 셀들을 포함함 - 와,
    상기 한계 조건이 존재하면 상기 블록에 이용되는 코드 레이트를 감소시키는 단계
    를 포함하는 방법.
  25. 제24항에 있어서,
    감소시키는 단계는 펑처링량을 감소시키는 단계를 포함하고,
    펑처링된 데이터의 펑처링 레벨을 나타내는 참조 정보를 펑처링되지 않은 형태로 상기 비휘발성 고체 상태 메모리 디바이스에 저장하는 단계를 더 포함하는 방법.

KR1020107013543A 2007-11-21 2008-10-28 레이트 호환성 펑처링된 코드를 지원하는 메모리 컨트롤러 KR101588605B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/943,943 2007-11-21
US11/943,943 US8327245B2 (en) 2007-11-21 2007-11-21 Memory controller supporting rate-compatible punctured codes

Publications (2)

Publication Number Publication Date
KR20100106402A KR20100106402A (ko) 2010-10-01
KR101588605B1 true KR101588605B1 (ko) 2016-01-26

Family

ID=40643247

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107013543A KR101588605B1 (ko) 2007-11-21 2008-10-28 레이트 호환성 펑처링된 코드를 지원하는 메모리 컨트롤러

Country Status (7)

Country Link
US (3) US8327245B2 (ko)
EP (1) EP2229680B1 (ko)
JP (1) JP5687062B2 (ko)
KR (1) KR101588605B1 (ko)
CN (1) CN101868831B (ko)
TW (1) TWI479506B (ko)
WO (1) WO2009067321A1 (ko)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8499229B2 (en) 2007-11-21 2013-07-30 Micro Technology, Inc. Method and apparatus for reading data from flash memory
US20090310707A1 (en) * 2008-06-17 2009-12-17 Jung-Fu Cheng Transmitter and method for transmitting soft pilot symbols in a digital communication system
US8230158B2 (en) 2008-08-12 2012-07-24 Micron Technology, Inc. Memory devices and methods of storing data on a memory device
US8161354B2 (en) * 2008-10-16 2012-04-17 Genesys Logic, Inc. Flash memory controller having configuring unit for error correction code (ECC) capability and method thereof
US8077515B2 (en) 2009-08-25 2011-12-13 Micron Technology, Inc. Methods, devices, and systems for dealing with threshold voltage change in memory devices
US8429391B2 (en) 2010-04-16 2013-04-23 Micron Technology, Inc. Boot partitions in memory devices and systems
US8451664B2 (en) 2010-05-12 2013-05-28 Micron Technology, Inc. Determining and using soft data in memory devices and systems
US8386895B2 (en) 2010-05-19 2013-02-26 Micron Technology, Inc. Enhanced multilevel memory
US8615703B2 (en) 2010-06-04 2013-12-24 Micron Technology, Inc. Advanced bitwise operations and apparatus in a multi-level system with nonvolatile memory
US11336303B2 (en) 2010-06-04 2022-05-17 Micron Technology, Inc. Advanced bitwise operations and apparatus in a multi-level system with nonvolatile memory
TWI441181B (zh) 2010-09-09 2014-06-11 Silicon Motion Inc 用來進行資料整形之方法以及其記憶裝置及控制器
JP2012063871A (ja) * 2010-09-14 2012-03-29 Univ Of Tokyo 制御装置およびデータ記憶装置
CN102354527A (zh) * 2011-06-02 2012-02-15 钟浩 一种降低固态存储系统响应时间的方法
US9021337B1 (en) 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for adaptively selecting among different error correction coding schemes in a flash drive
US9021333B1 (en) 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for recovering data from failed portions of a flash drive
US8788910B1 (en) 2012-05-22 2014-07-22 Pmc-Sierra, Inc. Systems and methods for low latency, high reliability error correction in a flash drive
US8972824B1 (en) 2012-05-22 2015-03-03 Pmc-Sierra, Inc. Systems and methods for transparently varying error correction code strength in a flash drive
US9021336B1 (en) 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for redundantly storing error correction codes in a flash drive with secondary parity information spread out across each page of a group of pages
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
US9047214B1 (en) 2012-05-22 2015-06-02 Pmc-Sierra, Inc. System and method for tolerating a failed page in a flash device
US9176812B1 (en) 2012-05-22 2015-11-03 Pmc-Sierra, Inc. Systems and methods for storing data in page stripes of a flash drive
US8996957B1 (en) 2012-05-22 2015-03-31 Pmc-Sierra, Inc. Systems and methods for initializing regions of a flash drive having diverse error correction coding (ECC) schemes
US8793556B1 (en) 2012-05-22 2014-07-29 Pmc-Sierra, Inc. Systems and methods for reclaiming flash blocks of a flash drive
CN102929655A (zh) * 2012-09-26 2013-02-13 瑞斯康达科技发展股份有限公司 向闪存芯片中烧写数据文件的方法、预处理方法及装置
US9577673B2 (en) 2012-11-08 2017-02-21 Micron Technology, Inc. Error correction methods and apparatuses using first and second decoders
US9009565B1 (en) 2013-03-15 2015-04-14 Pmc-Sierra, Inc. Systems and methods for mapping for solid-state memory
US9053012B1 (en) 2013-03-15 2015-06-09 Pmc-Sierra, Inc. Systems and methods for storing data for solid-state 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
US9081701B1 (en) 2013-03-15 2015-07-14 Pmc-Sierra, Inc. Systems and methods for decoding data for solid-state memory
US9208018B1 (en) 2013-03-15 2015-12-08 Pmc-Sierra, Inc. Systems and methods for reclaiming memory for solid-state memory
US9235468B2 (en) * 2013-04-12 2016-01-12 Qualcomm Incorporated Systems and methods to improve the reliability and lifespan of flash memory
US9595352B2 (en) * 2014-03-17 2017-03-14 Seagate Technology Llc Manufacturer self-test for solid-state drives
US10795765B2 (en) * 2014-07-22 2020-10-06 Ngd Systems, Inc. SSD for long term data retention
US10528410B2 (en) * 2014-12-16 2020-01-07 Intel Corporation Apparatus, method and system to exchange error information in a unified protocol communication
US9727416B2 (en) * 2015-07-01 2017-08-08 Xilinx, Inc. Variable code rate solid-state drive
CN106484558A (zh) * 2016-09-20 2017-03-08 华中科技大学 一种基于可变码率的纠错码提高固态盘的可靠性方法
CN106846239B (zh) * 2017-01-12 2019-10-22 北京大学 实现图像卷积的编码型闪存系统及工作方法
US10644727B2 (en) 2018-01-11 2020-05-05 Western Digital Technologies, Inc. Code rate switching mechanism for flash memory

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004062113A1 (en) 2002-12-16 2004-07-22 Interdigital Technology Corporation Detection, avoidance and/or correction of problematic puncturing patterns in parity bit streams used when implementing turbo codes
WO2007084751A2 (en) 2006-01-20 2007-07-26 Marvell World Trade Ltd. Flash memory with coding and signal processing
US7451383B2 (en) 1999-07-06 2008-11-11 Samsung Electronics Co., Ltd Rate matching device and method for a data communication system

Family Cites Families (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4058851A (en) * 1976-10-18 1977-11-15 Sperry Rand Corporation Conditional bypass of error correction for dual memory access time selection
EP0709776B1 (en) 1994-10-31 2000-02-23 STMicroelectronics S.r.l. Method for detecting and correcting an error in a multilevel memory and memory device implementing the method
JPH09261081A (ja) * 1996-03-22 1997-10-03 Kenwood Corp デパンクチャード回路
US5956743A (en) * 1997-08-25 1999-09-21 Bit Microsystems, Inc. Transparent management at host interface of flash-memory overhead-bytes using flash-specific DMA having programmable processor-interrupt of high-level operations
US6279133B1 (en) * 1997-12-31 2001-08-21 Kawasaki Steel Corporation Method and apparatus for significantly improving the reliability of multilevel memory architecture
JP3180769B2 (ja) * 1998-07-17 2001-06-25 日本電気株式会社 受信電力算出方法及び移動局
JP2000068862A (ja) * 1998-08-19 2000-03-03 Fujitsu Ltd 誤り訂正符号化装置
JP3308915B2 (ja) 1998-11-11 2002-07-29 エヌイーシーマイクロシステム株式会社 不良救済用メモリセル及びそれを用いた記憶装置
US6871303B2 (en) * 1998-12-04 2005-03-22 Qualcomm Incorporated Random-access multi-directional CDMA2000 turbo code interleaver
US6487251B1 (en) * 1999-08-30 2002-11-26 Hughes Electronics Corporation System and method for performing combined multi-rate convolutional coding
US6628723B1 (en) * 1999-10-15 2003-09-30 Cisco Technology Coding rate reduction for turbo codes
US6731538B2 (en) 2000-03-10 2004-05-04 Kabushiki Kaisha Toshiba Semiconductor memory device including page latch circuit
JP2002076915A (ja) * 2000-08-31 2002-03-15 Sony Corp インターリーブ装置及びインターリーブ方法、並びに、復号装置及び復号方法
US6684366B1 (en) * 2000-09-29 2004-01-27 Arraycomm, Inc. Multi-rate codec with puncture control
US20030126545A1 (en) * 2001-10-05 2003-07-03 Tan Alfred Keng Tiong Non-linear code-division multiple access technology with improved detection algorithms and error correction coding
US6591394B2 (en) * 2000-12-22 2003-07-08 Matrix Semiconductor, Inc. Three-dimensional memory array and method for storing data bits and ECC bits therein
US7012883B2 (en) * 2001-11-21 2006-03-14 Qualcomm Incorporated Rate selection for an OFDM system
US6683817B2 (en) * 2002-02-21 2004-01-27 Qualcomm, Incorporated Direct memory swapping between NAND flash and SRAM with error correction coding
JP3969240B2 (ja) 2002-08-02 2007-09-05 ソニー株式会社 半導体記憶装置
US7260764B2 (en) * 2002-11-26 2007-08-21 Qualcomm Incorporated Multi-channel transmission and reception with block coding in a communication system
CN101483440B (zh) * 2002-12-16 2014-04-16 美商内数位科技公司 实施涡轮码时所用同位位流中问题穿刺型态的检测、避免及/或改正
US6839870B2 (en) * 2003-03-21 2005-01-04 Terayon Communications Systems, Inc. Error-correcting code interleaver
US7467264B2 (en) * 2003-06-27 2008-12-16 Hewlett-Packard Development Company, L.P. Methods and apparatuses for determining the state of a memory element
JP3984209B2 (ja) * 2003-07-31 2007-10-03 株式会社東芝 半導体記憶装置
US7389465B2 (en) * 2004-01-30 2008-06-17 Micron Technology, Inc. Error detection and correction scheme for a memory device
US7689892B2 (en) * 2004-09-08 2010-03-30 Nokia Corporation System and method for adaptive low-density parity-check (LDPC) coding
US7061804B2 (en) * 2004-11-18 2006-06-13 Qualcomm Incorporated Robust and high-speed memory access with adaptive interface timing
US7581159B2 (en) * 2004-11-23 2009-08-25 Texas Instruments Incorporated Simplified decoding using structured and punctured LDPC codes
CN101091214B (zh) * 2004-12-28 2010-06-09 国际商业机器公司 信息记录装置、其数据流控制器及其数据流的控制方法
US7359279B2 (en) * 2005-03-31 2008-04-15 Sandisk 3D Llc Integrated circuit memory array configuration including decoding compatibility with partial implementation of multiple memory layers
US20070011513A1 (en) * 2005-06-13 2007-01-11 Intel Corporation Selective activation of error mitigation based on bit level error count
US7644338B2 (en) * 2005-09-13 2010-01-05 Samsung Electronics Co., Ltd. Method of detecting and correcting a prescribed set of error events based on error detecting code
US7469368B2 (en) * 2005-11-29 2008-12-23 Broadcom Corporation Method and system for a non-volatile memory with multiple bits error correction and detection for improving production yield
US7844879B2 (en) * 2006-01-20 2010-11-30 Marvell World Trade Ltd. Method and system for error correction in flash memory
US7388781B2 (en) * 2006-03-06 2008-06-17 Sandisk Il Ltd. Multi-bit-per-cell flash memory device with non-bijective mapping
US7840875B2 (en) * 2006-05-15 2010-11-23 Sandisk Corporation Convolutional coding methods for nonvolatile memory
US20070300130A1 (en) * 2006-05-17 2007-12-27 Sandisk Corporation Method of Error Correction Coding for Multiple-Sector Pages in Flash Memory Devices
US7355892B2 (en) * 2006-06-30 2008-04-08 Sandisk Corporation Partial page fail bit detection in flash memory devices
US7627803B2 (en) * 2006-07-05 2009-12-01 Harris Corporation System and method for variable forward error correction (FEC) protection
US8046660B2 (en) * 2006-08-07 2011-10-25 Marvell World Trade Ltd. System and method for correcting errors in non-volatile memory using product codes
US7904780B2 (en) * 2006-11-03 2011-03-08 Sandisk Corporation Methods of modulating error correction coding
US8024644B2 (en) * 2006-11-14 2011-09-20 Via Telecom Co., Ltd. Communication signal decoding
KR100766042B1 (ko) * 2006-12-06 2007-10-12 삼성전자주식회사 연접 부호화를 이용한 멀티 레벨 셀 메모리 장치
KR100822030B1 (ko) 2006-12-26 2008-04-15 삼성전자주식회사 고 부호화율 부호를 이용한 멀티 레벨 셀 메모리 장치
KR100842680B1 (ko) * 2007-01-08 2008-07-01 삼성전자주식회사 플래시 메모리 장치의 오류 정정 컨트롤러 및 그것을포함하는 메모리 시스템
US8122323B2 (en) * 2007-03-08 2012-02-21 Intel Corporation Method, apparatus, and system for dynamic ECC code rate adjustment
TW200908569A (en) * 2007-05-21 2009-02-16 Ramot At Tel Aviv University Co Ltd Memory-efficient LDPC decoding
US8051358B2 (en) * 2007-07-06 2011-11-01 Micron Technology, Inc. Error recovery storage along a nand-flash string
US8065583B2 (en) * 2007-07-06 2011-11-22 Micron Technology, Inc. Data storage with an outer block code and a stream-based inner code
TWI362855B (en) * 2007-07-10 2012-04-21 Ind Tech Res Inst Multiplexing method and apparatus thereof for data switching
JP5354979B2 (ja) * 2007-07-12 2013-11-27 パナソニック株式会社 低密度パリティ検査畳み込み符号(ldpc−cc)符号化器及びldpc−cc復号器
US8650352B2 (en) * 2007-09-20 2014-02-11 Densbits Technologies Ltd. Systems and methods for determining logical values of coupled flash memory cells
US7860200B2 (en) * 2007-10-12 2010-12-28 Harris Corporation Communications system using adaptive filter that is selected based on output power

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7451383B2 (en) 1999-07-06 2008-11-11 Samsung Electronics Co., Ltd Rate matching device and method for a data communication system
WO2004062113A1 (en) 2002-12-16 2004-07-22 Interdigital Technology Corporation Detection, avoidance and/or correction of problematic puncturing patterns in parity bit streams used when implementing turbo codes
WO2007084751A2 (en) 2006-01-20 2007-07-26 Marvell World Trade Ltd. Flash memory with coding and signal processing

Also Published As

Publication number Publication date
US20150234704A1 (en) 2015-08-20
EP2229680A1 (en) 2010-09-22
TWI479506B (zh) 2015-04-01
US20090132889A1 (en) 2009-05-21
US8966352B2 (en) 2015-02-24
EP2229680A4 (en) 2011-12-21
TW200931442A (en) 2009-07-16
KR20100106402A (ko) 2010-10-01
JP5687062B2 (ja) 2015-03-18
US9442796B2 (en) 2016-09-13
US8327245B2 (en) 2012-12-04
WO2009067321A1 (en) 2009-05-28
JP2011504271A (ja) 2011-02-03
CN101868831B (zh) 2014-08-06
US20130080864A1 (en) 2013-03-28
CN101868831A (zh) 2010-10-20
EP2229680B1 (en) 2013-02-13

Similar Documents

Publication Publication Date Title
KR101588605B1 (ko) 레이트 호환성 펑처링된 코드를 지원하는 메모리 컨트롤러
US9063875B2 (en) Error recovery storage along a memory string
US8239725B2 (en) Data storage with an outer block code and a stream-based inner code
KR101576102B1 (ko) 플래시 메모리의 블록으로부터 데이터를 판독하는 방법 및 관련 메모리 장치
US8769374B2 (en) Multi-write endurance and error control coding of non-volatile memories
US8281217B2 (en) Memory devices and encoding and/or decoding methods
KR101534888B1 (ko) 내고장성 비휘발성 집적 회로 메모리
KR102108386B1 (ko) 저장 장치 및 그것의 데이터 엔코딩 및 디코딩 방법들
US9130597B2 (en) Non-volatile memory error correction
US20090241009A1 (en) Encoding and/or decoding memory devices and methods thereof
US20120290898A1 (en) Adaptive endurance coding of non-volatile memories
CN111869111B (zh) 生成和使用可逆的缩短博斯-查德胡里-霍昆格姆码字
US20190294497A1 (en) Method of implementing error correction code used by memory storage apparatus and memory storage apparatus using the same
JP2007179480A (ja) メモリコントローラおよびフラッシュメモリシステム

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: 20200107

Year of fee payment: 5