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

申请号 KR1020107013543 申请日 2008-10-28 公开(公告)号 KR101588605B1 公开(公告)日 2016-01-26
申请人 마이크론 테크놀로지, 인크.; 发明人 래드케,윌리암,에이치.;
摘要 레이트호환성콘볼루션코드(RPCC)와같은레이트호환성코드에따라비휘발성고체상태메모리디바이스(100)에데이터를저장하는장치및 방법에관한것이다. 그러한메모리디바이스(100)의일례는플래시메모리디바이스(100)이다. 에러정정및 검출등을위해서초기에는데이터를블록인코딩(112)할수 있다. 블록코딩된데이터를또한콘볼루션인코딩(114)할수 있다. 콘볼루션코딩된데이터를펑처링(116)하여메모리디바이스(100)에저장할수 있다. 이러한펑처링은데이터저장에필요한메모리량을감소시킨다. 조건에따라서, 준비되는추가의에러정정량과필요한메모리량을가변시키기위해서, 펑처링을하지않는것에서부터비교적많은펑처링량까지펑처링량을가변시킬수 있다. 메모리디바이스(100)로부터데이터를판독할때 펑처링된데이터를디코딩(120, 122)할수 있다.
权利要求
  • 데이터를 수신하고, 수신된 데이터를 펑처링하도록 구성된 인코더와,
    펑처링된 데이터를 저장하도록 구성된 하나 이상의 NAND 플래시 메모리 어레이와,
    상기 인코더가 이용하는 코드 레이트를 선택하도록 구성된 제어 회로 - 상기 코드 레이트는 상기 하나 이상의 NAND 플래시 메모리 어레이의 한계 조건(marginal condition)의 검출에 기초하여 선택되고, 상기 코드 레이트는 펑처링량을 선택함으로써 변함 - 와,
    상기 펑처링된 데이터를 디코딩하도록 구성된 디코더
    를 포함하는 장치.
  • 제1항에 있어서,
    상기 인코더는 펑처링가능한 코드 인코더와 펑처링 회로를 더 포함하는 장치.
  • 제2항에 있어서,
    상기 펑처링가능한 코드 인코더는 콘볼루션 인코더를 포함하는 장치.
  • 제3항에 있어서,
    상기 데이터를 블록 인코딩하도록 구성된 블록 코드 인코더 - 상기 콘볼루션 인코더는 블록 인코딩된 데이터를 콘볼루션 인코딩하도록 구성됨 - 와,
    디코딩된 펑처링된 데이터를 더 디코딩하도록 구성된 블록 코드 디코더
    를 더 포함하는 장치.
  • 제4항에 있어서,
    상기 펑처링가능한 코드 디코더는 비터비 디코더를 포함하는 장치.
  • 삭제
  • 삭제
  • 삭제
  • 삭제
  • 제1항에 있어서,
    상기 하나 이상의 NAND 플래시 메모리 어레이의 적어도 하나의 블록에는 제1 코드 레이트가 할당되고, 적어도 제2 블록에는 제2 코드 레이트가 할당되는 장치.
  • 제1항에 있어서,
    상기 하나 이상의 NAND 플래시 메모리 어레이는 메모리 셀들의 다중 레벨 내에서 상기 펑처링된 데이터를 저장하도록 구성된 다중 레벨 메모리 셀들을 포함하는 장치.
  • 제1항에 있어서,
    상기 인코더는 상기 수신된 데이터로부터 1/4의 코드 레이트를 갖는 콘볼루션 코드를 생성하도록 구성되고, 상기 콘볼루션 코드를 펑처링하여 1/3 내지 1/2의 선택가능한 코드 레이트를 갖는 펑처링된 데이터를 생성하도록 더 구성되는 장치.
  • 제1항에 있어서,
    상기 제어 회로는 상기 펑처링된 데이터의 펑처링 레벨을 나타내는 참조 정보를 펑처링되지 않은 형태로 상기 하나 이상의 메모리 어레이에 저장하도록 구성된 장치.
  • 하나 이상의 NAND 플래시 메모리 어레이를 갖는 비휘발성 메모리 디바이스에 데이터를 저장하는 방법으로서,
    상기 하나 이상의 NAND 플래시 메모리 어레이에 저장할 예정인 데이터를 수신하는 단계와,
    코드 레이트를 선택하는 단계 - 상기 코드 레이트는 상기 하나 이상의 NAND 플래시 메모리 어레이의 한계 조건 검출에 기초하여 선택되고, 상기 코드 레이트는 펑처링량을 선택함으로써 변함 - 와,
    상기 코드 레이트를 사용하여 상기 데이터를 인코딩하여 펑처링된 데이터를 생성하는 단계와,
    상기 펑처링된 데이터를 상기 하나 이상의 NAND 플래시 메모리 어레이에 저장하는 단계
    를 포함하는 방법.
  • 제14항에 있어서,
    수신된 데이터를 콘볼루션 인코딩하고 펑처링하여 펑처링된 데이터를 생성하는 단계를 더 포함하는 방법.
  • 제15항에 있어서,
    상기 데이터를 콘볼루션 인코딩하기 전에 블록 코드로 상기 데이터를 인코딩하는 단계를 더 포함하는 방법.
  • 제14항에 있어서,
    제1 펑처링 패턴으로 콘볼루션 코딩된 데이터의 적어도 일부분을 펑처링하여 제1 코드 레이트를 갖는 펑처링된 데이터를 생성하고, 제2 펑처링 패턴으로 콘볼루션 코딩된 데이터의 적어도 제2 부분을 펑처링하여 제2 코드 레이트를 갖는 펑처링된 데이터를 생성하는 단계를 더 포함하고,
    상기 제1 펑처링 패턴으로 펑처링된 데이터는 상기 하나 이상의 NAND 플래시 메모리 어레이의 제1 부분에 저장되고, 상기 제2 펑처링 패턴으로 펑처링된 데이터는 상기 하나 이상의 NAND 플래시 메모리 어레이의 제2 부분에 저장되는 방법.
  • 제17항에 있어서,
    적어도 부분적으로는 수신된 데이터의 데이터 타입에 따라 상기 제1 코드 레이트와 상기 제2 코드 레이트 중에서 선택하는 단계를 더 포함하는 방법.
  • 제14항에 있어서,
    인코딩하는 단계는,
    1/4의 코드 레이트를 갖는 콘볼루션 코드를 생성하는 단계와,
    상기 콘볼루션 코드를 펑처링하여 1/3 내지 1/2의 선택가능한 코드 레이트를 갖는 펑처링된 데이터를 생성하는 단계를 포함하는 방법.
  • 제14항에 있어서,
    상기 펑처링된 데이터의 펑처링 레벨을 나타내는 참조 정보를 펑처링되지 않은 형태로 상기 하나 이상의 메모리 어레이에 저장하는 단계를 더 포함하는 방법.
  • 하나 이상의 메모리 어레이를 갖는 비휘발성 메모리 디바이스에 저장된 펑처링된 데이터를 검색하는 방법으로서,
    상기 메모리 디바이스의 상기 하나 이상의 메모리 어레이로부터 상기 펑처링된 데이터를 검색하는 단계와,
    상기 펑처링된 데이터의 펑처링 레벨을 나타내는 참조 정보를 펑처링되지 않은 형태로 상기 하나 이상의 메모리 어레이로부터 검색하는 단계와,
    상기 참조 정보에 따라 펑처링 패턴을 선택하는 단계와,
    상기 펑처링된 데이터와 연관된 상기 펑처링 패턴에 따라 상기 펑처링된 데이터를 디코딩하는 단계
    를 포함하는 방법.
  • 제21항에 있어서,
    상기 디코딩은 비터비 디코딩을 포함하는 방법.
  • 삭제
  • 비휘발성 고체 상태 메모리 디바이스에서 메모리 공간의 블록에 대한 코드 레이트를 결정하는 방법으로서,
    상기 비휘발성 고체 상태 메모리 디바이스 내의 블록의 적어도 일부분에 대하여 한계 조건이 존재하는지를 결정하는 단계 - 상기 블록은 메모리 셀들을 포함함 - 와,
    상기 한계 조건이 존재하면 상기 블록에 이용되는 코드 레이트를 감소시키는 단계
    를 포함하는 방법.
  • 제24항에 있어서,
    감소시키는 단계는 펑처링량을 감소시키는 단계를 포함하고,
    펑처링된 데이터의 펑처링 레벨을 나타내는 참조 정보를 펑처링되지 않은 형태로 상기 비휘발성 고체 상태 메모리 디바이스에 저장하는 단계를 더 포함하는 방법.

  • 说明书全文

    레이트 호환성 펑처링된 코드를 지원하는 메모리 컨트롤러{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 등이다. 이러한 인코딩은 팩터 z 0 만큼 페이지에 대한 데이터량을 증가시켜, 펑처링가능한 코드 인코더(114)의 출력에서는 z 0 (N+y) 바이트가 생성된다. 1/n의 코드 레이트의 경우, z 0 는 n과 같다. 예컨대, 하프 레이트(1/2) 코드 레이트의 경우, z 0 는 2와 같다. 하프 레이트 코드로 콘볼루션 인코딩된 데이터를 생성하는 것에 대해서는 도 2를 참조하여 보다 상세히 후술할 것이다.

    펑처링 회로(116)는 콘볼루션 인코딩된 데이터를 펑처링한다. 일 실시예에서, 펑처링 회로(116)의 기능은 펑처링가능한 코드 인코더(114)와 통합될 수 있다. 이것은 데이터량을 감소시켜, 코드 레이트(m/n)를 증가시킨다. 펑처링 후에, 페이지에 대한 비트수는 z 1 (N+y) 바이트이고, 여기서 z 1 은 펑처링 후 코드 레이트의 역이다. z 1 (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)로부터 z 1 (N+y) 바이트의 펑처링된 데이터가 검색되면, 삽입 회로(118)가 펑처링 패턴을 이용하여 비터비(Viterbi) 디코더의 가능한 디코딩 시퀀스의 가능한 계산(브랜치 메트릭)에 영향을 주지 않는 더미 데이터를 삽입하여, 이전에 소거된 데이터를 대체한다(디펑처링). 다른 실시예로, 더미 데이터를 삽입하기 보다는, 특정 데이터가 펑처링된 것을 디코더에게 지시하는 소거 포인터를 이용한다. 일 실시예에서, 삽입 회로(118)의 "삽입" 기능은 펑처링가능한 코드 디코더(120)의 배선된 수리적 등가물로 대체된다. 에러의 총수가 레이트 호환성 코드의 에러 정정 능력 내에 있다면 펑처링된 데이터를 정확하게 디코딩하기에 충분한 리던던시가 있어야 한다.

    펑처링가능한 코드 디코더(120)는 z 0 (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)는 생성 다항식 Y 0 , Y 1 을 모듈로-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)의 출력으로부터의 데이터 스트림 x 0 ,x 1 ,x 2 ,x 3 ,...을 콘볼루션 인코딩하여 2개의 출력 데이터 스트림 y 0 0 ,y 1 0 ,y 2 0 ,y 3 0 ,... 및 y 0 1 ,y 1 1 ,y 2 1 ,y 3 1 ,...을 생성한다. 이들 2개의 출력 데이터 스트림을 펑처링 없이 메모리 어레이(108)에 저장한다. 메모리 어레이(108)로부터 데이터가 검색되면, 펑처링가능한 코드 디코더(120)가 데이터 삽입 없이 y 0 0 ,y 1 0 ,y 2 0 ,y 3 0 ,... 및 y 0 1 ,y 1 1 ,y 2 1 ,y 3 1 ,...의 데이터 스트림을 디코딩할 수 있다.

    제2 예의 중간에서, 데이터 스트림 x 0 ,x 1 ,x 2 ,x 3 ,...을 콘볼루션 인코딩하여 2개의 출력 데이터 스트림 y 0 0 ,y 1 0 ,y 2 0 ,y 3 0 ,... 및 y 0 1 ,y 1 1 ,y 2 1 ,y 3 1 ,...을 생성하고, y 0 0 ,y 1 0 ,y 2 0 ,y 3 0 ,... 및 y 0 1 ,y 2 1 ,...로 펑처링하여, 메모리 어레이(108)에 저장한다. 데이터 판독의 경우, 메모리 어레이(108)로부터 펑처링된 데이터 y 0 0 ,y 1 0 ,y 2 0 ,y 3 0 ,... 및 y 0 1 ,y 2 1 ,...를 검색하고, 디코딩을 방해하지 않는 더미 값을 삽입하여 소거된 데이터를 대체하거나 소거 포인터를 이용하고, 펑처링가능한 코드 디코더(120)가 그 삽입된 펑처링된 데이터 y 0 0 ,y 1 0 ,y 2 0 ,y 3 0 ,... 및 y 0 1 ,-,y 2 1 ,-,...를 디코딩하여 최초 데이터 스트림 x 0 ,x 1 ,x 2 ,x 3 ,...으로 다시 디코딩한다. 대쉬(-)는 소거된 데이터를 나타낸다.

    제3 예의 밑에서, 데이터 스트림 x 0 ,x 1 ,x 2 ,x 3 ,...을 콘볼루션 인코딩하여 2개의 출력 데이터 스트림 y 0 0 ,y 1 0 ,y 2 0 ,y 3 0 ,... 및 y 0 1 ,y 1 1 ,y 2 1 ,y 3 1 ,...을 생성하고, y 0 0 ,y 1 0 ,y 2 0 ,y 3 0 ,... 및 y 0 1 ,...로 펑처링하여, 메모리 어레이(108)에 저장한다. 데이터 판독의 경우, 메모리 어레이(108)로부터 펑처링된 데이터 y 0 0 ,y 1 0 ,y 2 0 ,y 3 0 ,... 및 y 0 1 ,...를 검색하고, 디코딩을 방해하지 않는 더미 값을 삽입하여 소거된 데이터를 대체하거나 소거 포인터를 이용하고, 펑처링가능한 코드 디코더(120)가 그 삽입된 펑처링된 데이터 y 0 0 ,y 1 0 ,y 2 0 ,y 3 0 ,... 및 y 0 1 ,-,-,-,...를 디코딩하여 최초 데이터 스트림 x 0 ,x 1 ,x 2 ,x 3 ,...으로 다시 디코딩한다.

    도 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)로 진행할 수 있다.

    일 실시예는, 데이터를 수신하고, 수신된 데이터를 펑처링하도록 구성된 인코더와, 펑처링된 데이터를 저장하도록 구성된 하나 이상의 메모리 어레이와, 상기 펑처링된 데이터를 디코딩하도록 구성된 디코더를 포함하는 장치이다.

    일 실시예는, 하나 이상의 메모리 어레이를 갖는 비휘발성 메모리 디바이스에 데이터를 저장하는 방법으로서, 상기 하나 이상의 메모리 어레이에 저장하기 위한 데이터를 수신하는 단계와, 상기 데이터를 인코딩하여 펑처링된 데이터를 생성하는 단계와, 상기 펑처링된 데이터를 상기 하나 이상의 메모리 어레이에 저장하는 단계를 포함하는 방법이다.

    일 실시예는, 하나 이상의 메모리 어레이를 갖는 비휘발성 메모리 디바이스에 저장된 펑처링된 데이터를 검색하는 방법으로서, 상기 메모리 디바이스의 상기 하나 이상의 메모리 어레이로부터 상기 펑처링된 데이터를 검색하는 단계와, 상기 펑처링된 데이터와 연관된 펑처링 패턴에 따라 상기 펑처링된 데이터를 디코딩하는 단계를 포함하는 방법이다.

    일 실시예는, 비휘발성 고체 상태 메모리 디바이스에서 메모리 공간의 블록에 대한 코드 레이트를 결정하는 방법으로서, 상기 메모리 디바이스의 데이터 블록의 적어도 일부분에 대하여 한계 조건이 존재하는지를 결정하는 단계와, 상기 한계 조건이 존재하면 상기 블록에 이용되는 코드 레이트를 감소시키는 단계를 포함하는 방법이다.

    이상, 다양한 실시예를 설명하였다. 이들 특정 실시예를 참조하여 설명하였으나, 이들 설명은 예시적인 것이지 한정적인 것이 아니다. 당업자라면 첨부한 청구범위에 규정된 본 발명의 기술적 사상 및 범주 내에서 각종 변형 및 응용이 가능하다.

    QQ群二维码
    意见反馈