KR101482889B1 - 비휘발성 메모리를 갖춘 멀티레벨 시스템에서의 진보된 비트별 동작 및 장치 - Google Patents
비휘발성 메모리를 갖춘 멀티레벨 시스템에서의 진보된 비트별 동작 및 장치 Download PDFInfo
- Publication number
- KR101482889B1 KR101482889B1 KR1020137000291A KR20137000291A KR101482889B1 KR 101482889 B1 KR101482889 B1 KR 101482889B1 KR 1020137000291 A KR1020137000291 A KR 1020137000291A KR 20137000291 A KR20137000291 A KR 20137000291A KR 101482889 B1 KR101482889 B1 KR 101482889B1
- Authority
- KR
- South Korea
- Prior art keywords
- stream
- tcm
- symbols
- code
- data
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding 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/1012—Adding 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1515—Reed-Solomon codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/152—Bose-Chaudhuri-Hocquenghem [BCH] codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/25—Error detection or forward error correction by signal space coding, i.e. adding redundancy in the signal constellation, e.g. Trellis Coded Modulation [TCM]
- H03M13/256—Error detection or forward error correction by signal space coding, i.e. adding redundancy in the signal constellation, e.g. Trellis Coded Modulation [TCM] with trellis coding, e.g. with convolutional codes and TCM
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/35—Unequal 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/353—Adaptation to the channel
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/35—Unequal 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/356—Unequal error protection [UEP]
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/63—Joint error correction and other techniques
- H03M13/635—Error control coding in combination with rate matching
- H03M13/6362—Error control coding in combination with rate matching by puncturing
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Probability & Statistics with Applications (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Algebra (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Error Detection And Correction (AREA)
- Detection And Prevention Of Errors In Transmission (AREA)
- Read Only Memory (AREA)
Abstract
코드워드를 이용하여 디지털 데이터를 저장하기 위한 비휘발성 메모리로 디지털 시스템, 컴포넌트 및 방법이 구성된다. 데이터는 메모리의 메모리 셀당 복수의 비트를 이용하여 메모리에 저장된다. 메모리에 관련된 기입 동작 및 판독 동작을 위해, 입력 파라미터들에 기초하여 코드워드 대 코드워드 기초로 코드 효율이 변경될 수 있다. 코드 효율은 메모리에 의해 저장되는 비트 밀도를 포함하는 입력 파라미터들 중 임의의 파라미터를 변경하는 것에 기초하여 변경될 수 있다. 분수 비트 밀도(fractional bit density)의 저장 및 판독이 설명된다.
Description
본 출원은 대체로 멀티레벨 정보 시스템에 관한 것으로, 더 구체적으로는, 멀티레벨 시스템에서 비트별 동작에 관한 장치 및 방법에 관한 것이다.
2009년 3월 13일 출원되고 2009년 9월 24일 미국 특허 출원 공개 번호 2009/0241006 A1으로서 공개된 발명의 명칭이 BITWISE OPERATIONS IN A MULTI-LEVEL SYSTEM인 미국 특허 출원번호 제12/403,546호(이하, '546 출원)는 본 출원과 공동 소유되며 본 명세서에서 참조용으로 그 전체를 인용한다. '546 출원이 그 당시의 최신 기술에 비해 광범위한 이점을 제공한 것으로 출원인은 여기기 때문에, 출원인은 본 출원도 역시 추가의 이점을 제공한다고 여기고 있다.
관련 기술의 상기 예들 및 그와 관련된 한계는 예시를 의도한 것이지 전적으로 그러하다는 의미는 아니다. 관련 기술의 다른 한계는 명세서의 판독과 도면의 연구시에 당업자에게 명백해 질 것이다.
이하의 실시예들 및 그 양태들은, 범위를 제한하고자 함이 아니라 예시와 설명을 의미하는 시스템, 툴, 및 방법과 연계하여 설명되고 예시된다. 다양한 실시예들에서, 전술된 문제들 중 하나 이상이 줄어들거나 제거되는 한편, 다른 실시예들은 다른 개선사항에 관한 것이다.
일반적으로, 디지털 시스템은 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된다. 본 개시의 한 양태에서, 디지털 시스템의 일부를 형성하는 장치 및 연관된 방법은, 디지털 시스템을 통해 제공되는 입력 데이터를 포함하는 입력 데이터 스트림을 리드 솔로몬 인코더(Reed Solomon encoder)를 이용하여 수신해 일련의 리드 솔로몬 심볼로 구성된 리드 솔로몬 인코딩된 스트림을 생성하도록 구성된다. 리드 솔로몬 인코딩된 스트림은, 재블록화된(re-blocked) 출력 데이터 스트림의 전부는 아닌 적어도 하나의 부분이 콘볼루션 코드에 기초한 코드 효율에 예속되도록(subject to) 구성되게끔 상기 재블록화된 출력 데이터 스트림을 생성하기 위한 팩킹 구조(packing arrangement)를 이용하여 수신된다. 재블록화된 출력 데이터 스트림은, 팩킹 구조에 제공된 하나 이상의 입력 파라미터들의 하나 이상의 값들의 변경에 기초하여 입력 스트림 내의 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 콘볼루션 코드의 코드 효율의 변경을 지원하도록 팩킹 구조에 의해 수정된다. 재블록화된 출력 데이터 스트림은, TCM 코드를 적용하여 TCM 인코딩된 출력 데이터 스트림을 생성하는 맵핑 구조를 이용하여 수신된다. TCM 인코딩된 출력 데이터 스트림의 부분은, 입력 파라미터의 값에 기초한 코드 효율의 변경을 지원하는 콘볼루션 코드의 코드 효율에 따라, 맵핑 구조의 일부를 형성하는 콘볼루션 인코더를 이용하여 콘볼루션 인코딩되어, 저장된 데이터로서 내부에 저장하기 위한 비휘발성 메모리로 향하는 맵핑된 출력 데이터 스트림을 생성한다. 한 특징에서, TCM 인코딩된 출력 데이터의 부분은, 팩킹 구조와 맵핑 구조 사이의 협력을 통해 TCM 인코딩된 출력 스트림을 형성하는 복수의 TCM 심볼들 중 각 심볼의 최하위 비트(least significant bit)로서 콘볼루션 인코딩된다. 또 다른 특징에서, 각 TCM 심볼은 복수의 비트로 구성되고, TCM 인코딩된 출력 데이터의 부분은 팩킹 구조와 맵핑 구조 사이의 협력을 통해 TCM 인코딩된 출력 스트림을 형성하는 복수의 TCM 심볼들 중 각 심볼의 모든 비트들보다는 적은 적어도 최하위 비트로서 콘볼루션 인코딩된다. 역시 또 다른 특징에서, 저장된 데이터의 판독에 기초하여, 디맵핑 구조(demapping arrangement)를 이용하여 비휘발성 메모리로부터 메모리 출력 스트림이 수신되고, 코드 효율에 따라 콘볼루션 디코딩되어, 맵핑 구조에 제공된 입력 파라미터들의 값들 중의 대응하는 값들에 기초하여 디맵핑된 출력 스트림으로서 TCM 인코딩된 출력 데이터 스트림을 재생한다. 언팩킹 구조(unpacking arrangement)를 이용하여 디맵핑된 출력 스트림이 수신되어, 이로부터, 코드 효율에 기초한 리드 솔로몬 인코딩된 스트림을 재생하되, 팩킹 구조에 제공된 하나 이상의 입력 파라미터들의 값들 중 대응하는 값들에 기초하여 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 콘볼루션 코드의 코드 효율의 변경에 응답하는 방식으로 재생한다. 리드 솔로몬 인코딩된 스트림이, 리드 솔로몬 디코더를 이용하여, 언팩킹 구조로부터 수신되어, 이로부터, 판독 데이터로서 디지털 시스템이 이용할 입력 데이터를 포함하는 판독 데이터 스트림을 디코딩한다.
본 개시의 또 다른 양태에서, 디지털 시스템의 일부를 형성하는 장치 및 연관된 방법은, 블록 코드 인코더(block code encoder)를 이용하여, 디지털 시스템을 통해 제공되는 입력 데이터를 포함하는 입력 데이터 스트림을 수신하여 일련의 블록 코드 심볼로 구성된 블록 코드 인코딩된 스트림을 생성하도록 구성된다. 블록 코드 인코딩된 스트림은, 재블록화된 출력 데이터 스트림의 전부는 아닌 적어도 하나의 부분이 콘볼루션 코드에 기초한 코드 효율에 예속되도록 구성되게끔 상기 재블록화된 출력 데이터 스트림을 생성하기 위한 팩킹 구조를 이용하여 수신된다. 재블록화된 출력 데이터 스트림은, 팩킹 구조에 제공된 하나 이상의 입력 파라미터들의 하나 이상의 값들의 변경에 기초하여 입력 스트림 내의 미리 결정된 개수의 블록 코드 심볼들과 연관된 콘볼루션 코드의 코드 효율의 변경을 지원하도록 팩킹 구조에 의해 수정된다. 재블록화된 출력 데이터 스트림은 TCM 코드를 적용하여 TCM 인코딩된 출력 데이터 스트림을 생성하는 맵핑 구조를 이용하여 수신된다. TCM 인코딩된 출력 데이터 스트림의 부분은, 입력 파라미터들의 값들의 변경에 기초한 코드 효율의 변경을 지원하는 콘볼루션 코드의 코드 효율에 따라, 맵핑 구조의 일부를 형성하는 콘볼루션 인코더를 이용하여 콘볼루션 인코딩되어, 저장된 데이터로서 내부에 저장하기 위한 비휘발성 메모리로 향하는 맵핑된 출력 데이터 스트림을 생성한다.
본 개시의 또 다른 양태에서, 디지털 시스템의 일부를 형성하는 장치 및 연관된 방법은, 리드 솔로몬 인코딩된 스트림을 팩킹 구조를 이용해 수신하여, 재블록화된 출력 데이터 스트림의 적어도 하나의 부분이 콘볼루션 코드에 기초한 코드 효율에 예속되도록 구성되게끔 상기 재블록화된 출력 데이터 스트림을 생성하도록 구성된다. 팩킹 구조 및 연관된 방법은, 비휘발성 메모리에 입력 데이터를 저장하기 위한 준비적인 중간 단계로서 팩킹 구조에 제공된 하나 이상의 입력 파라미터들의 주어진 값들에 기초하여 입력 스트림 내의 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 콘볼루션 코드의 코드 효율 변경에 맞게 조정된다.
본 개시의 역시 또 다른 양태에서, 디지털 시스템의 일부를 형성하는 장치 및 연관된 방법은, 디지털 데이터를 저장하기 위한 복수의 메모리 셀을 포함하는 비휘발성 메모리를 이용하도록 구성된다. 장치의 일부를 형성하는 팩킹 구조 및 연관된 방법은, 메모리 셀에 저장하기 위한 블록 크기에 기초하는 출력 데이터 스트림을 생성하기 위해 시스템에 의해 제공되는 입력 데이터 스트림을 수신하도록 구성되고, 메모리 셀에 저장하기 위한 제1 블록 크기를 생성하기 위해 하나 이상의 입력 파라미터들에 기초하여 제1 모드에서 선택적으로 동작가능하며, 동작 동안에 블록 크기를 선택적으로 변경하기 위한 입력 파라미터들의 변경에 응답하여 제1 블록 크기와는 상이한 제2 블록 크기를 생성하기 위해 적어도 제2 모드에서 동작가능하다.
본 개시의 역시 또 다른 양태에서, 디지털 시스템의 일부를 형성하는 장치 및 연관된 방법은, 메모리 셀들 중 적어도 일부가 하나보다 많은 비트를 저장할 수 있도록 디지털 데이터를 저장하기 위한 복수의 메모리 셀을 포함하는 비휘발성 메모리를 이용하도록 구성된다. 장치의 일부를 형성하는 인코더 구조 및 연관된 방법은, 시스템에 의해 제공되는 입력 데이터 스트림을 수신하여, 메모리 셀에 저장하기 위한 셀당 선택된 개수의 비트 코딩에 기초하는 출력 데이터 스트림을 생성하도록 구성되고, 셀당 선택된 개수의 비트로서 메모리 셀에 저장하기 위한 제1 비트 밀도를 생성하기 위해 하나 이상의 입력 파라미터에 기초하여 제1 모드에서 선택적으로 동작가능하며, 동작 동안에 셀당 비트수 코딩을 선택적으로 변경하기 위한 입력 파라미터의 변경에 응답하여 제1 비트 밀도와는 상이한 제2 비트 밀도를 생성하기 위해 적어도 제2 모드에서 동작가능하다.
본 개시의 역시 또 다른 양태에서, 디지털 시스템의 일부를 형성하는 장치 및 연관된 방법은, 메모리 셀들 중 적어도 일부가 하나보다 많은 비트를 저장할 수 있도록 디지털 데이터를 저장하기 위한 복수의 메모리 셀을 포함하는 비휘발성 메모리를 이용하도록 구성된다. 장치의 일부를 형성하는 인코더 구조 및 연관된 방법은, 일련의 입력 심볼로서 시스템에 의해 제공되는 입력 데이터 스트림을 수신하여, 메모리 셀에 저장하기 위한 셀당 선택된 개수의 비트 코딩에 기초하는 출력 데이터 스트림을 생성하도록 구성되며, 적어도 비휘발성 메모리의 메모리 셀에 저장될 셀당 선택된 개수의 비트 코딩을 변경하기 위한 하나 이상의 입력 파라미터에 기초하여 재구성가능하다.
본 개시의 계속되는 양태에서, 디지털 시스템의 일부를 형성하는 장치 및 연관된 방법은, 메모리 셀들 중 적어도 일부가 하나보다 많은 비트를 저장할 수 있도록 디지털 데이터를 저장하기 위한 복수의 메모리 셀을 포함하는 비휘발성 메모리를 이용하도록 구성된다. 장치의 일부를 형성하는 디코더 구조 및 연관된 방법은, 일련의 메모리 셀에 저장된 셀당 복수의 상이한 비트 밀도 코딩 중 선택된 하나에 기초하여 사용자 데이터 스트림을 재생하기 위하여, 비휘발성 메모리에 저장된 데이터 구조의 판독에 응답하여 제공되는 판독 데이터 스트림을 수신하여 일련의 판독 심볼 ―이 일련의 판독 심볼은 원래 상기 데이터 구조의 일부로서 기입 동작 동안에 인코딩된 상기 사용자 데이터 스트림을 포함하고, 상기 일련의 메모리 셀들에 저장됨―을 제공하도록 구성된다. 디코더 구조 및 연관된 방법은, 사용자 데이터 스트림의 재생의 일부로서 일련의 메모리 셀에 저장된 비트 밀도들과 정합하도록 비트 밀도들 중 적어도 선택된 하나를 변경하기 위해 하나 이상의 입력 파라미터들에 기초하여 재구성가능하다.
본 개시의 또 다른 양태에서, 디지털 시스템의 일부를 형성하는 장치 및 연관된 방법은, 메모리 셀들 중 적어도 일부가 하나보다 많은 비트를 저장할 수 있도록 디지털 데이터를 저장하기 위한 복수의 메모리 셀을 포함하는 비휘발성 메모리를 이용하도록 구성된다. 상기 장치의 일부를 형성하는 디맵핑 구조 및 연관된 방법은, 비휘발성 메모리로부터의 저장된 데이터의 판독에 기초하여 메모리 출력 스트림 ―이 메모리 출력 스트림은 TCM 인코딩된 출력 데이터 스트림의 형태이며, 상기 TCM 인코딩된 출력 데이터 스트림의 전부는 아닌 한 부분은 인코딩 동작 동안에 한 세트의 파라미터들의 주어진 값들에 의해 설정되는 코드 효율에 예속됨― 을 수신하고, 상기 인코딩 동작 동안에 제공된 입력 파라미터들의 주어진 값들 중 대응하는 값들에 기초하여 디맵핑된 출력 스트림 ―이 디맵핑된 출력 스트림은 리드 솔로몬 인코딩된 스트림을 포함함―으로서 상기 TCM 인코딩된 출력 데이터 스트림을 재생하기 위해 상기 코드 효율에 기초하여 상기 TCM 인코딩된 출력 데이터 스트림을 콘볼루션 디코딩하도록 구성된다. 언팩킹 구조 및 연관된 방법은, 디맵퍼 출력 스트림을 수신하고, 이로부터 코드 효율에 기초하여 리드 솔로몬 인코딩된 스트림을 재생하도록 구성되며, 인코딩 동작 동안에 제공된 하나 이상의 입력 파라미터들의 주어진 값들 중 대응하는 값들에 기초하여 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 콘볼루션 코드의 코드 효율의 변경에 응답한다. 리드 솔로몬 디코더 및 연관된 방법은, 언팩킹 구조로부터 리드 솔로몬 인코딩된 스트림을 수신하여, 이로부터, 판독 데이터로서 디지털 시스템이 이용할 입력 데이터를 포함하는 판독 데이터 스트림을 디코딩하도록 구성된다.
본 개시의 또 다른 양태에서, 디지털 시스템의 일부를 형성하는 장치 및 연관된 방법은, 호스트 장치에 응답하여 디지털 데이터를 저장하기 위한 복수의 메모리 셀들을 포함하는 비휘발성 메모리를 이용하도록 구성된다. 이 장치의 일부를 형성하는 인코더/디코더 구조, 및 연관된 방법은, 호스트 장치를 비휘발성 메모리와 인터페이싱시켜 이들 사이에서 일련의 코드워드 ―각 코드워드는 호스트 장치로부터 비휘발성 메모리로의 인코딩된 데이터 흐름과 비휘발성 메모리로부터 호스트 장치로의 디코딩된 데이터 흐름 각각은, 적어도, 콘볼루션 코드에 기초하는 코드 효율에 예속되도록 하는 코드워드 크기를 가짐― 로 판독 데이터 및 기입 데이터를 전송하도록 구성되고, 상기 인코더/디코더 구조는 코드워드 대 코드워드 기초로(on a codeword to codeword basis) 입력 파라미터의 변경에 응답하여 코드 효율이 변경되도록 하나 이상의 입력 파라미터를 수신하도록 구성된다. 한 특징에서, 각각의 코드워드는 코드워드 길이를 형성하는 복수의 심볼들로 구성되고, 각 심볼은 메모리 셀들 중 하나에 저장되는 값을 나타내고, 인코더/디코더 구조는, 연관된 방법과 연계하여, 주어진 일련의 코드워드들 중 제1 코드워드에서 제1 코드 효율을 생성하기 위해 제1 모드에서 동작하고 상기 주어진 일련의 코드워드들 중 제2 코드워드에서 제2 코드 효율을 생성하기 위해 제2 모드에서 동작하도록 구성된다.
본 개시의 역시 또 다른 양태에서, 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서, 데이터 구조는 비휘발성 메모리에 저장된다. 이 데이터 구조는, 비휘발성 메모리에 저장되는 일련의 TCM 심볼을 포함하고, 각 TCM 심볼은 콘볼루션 코드에 예속된 각 TCM 심볼의 적어도 최하위 비트를 갖는 적어도 2개의 비트를 나타내고, 각 심볼의 적어도 하나의 다른 비트는 콘볼루션 인코딩되지 않으며, TCM 심볼들은, 데이터 구조 내의 적어도 하나의 코드워드에 대한 콘볼루션 코드의 코드 효율이 상기 데이터 구조 내의 인접 코드워드의 코드 효율과는 상이하도록 일련의 코드워드를 형성하는 일련의 리드 솔로몬 심볼을 형성한다.
본 개시의 역시 또 다른 양태에서, 비휘발성 메모리의 데이터 구조에 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서 사용하기 위한 방법이 설명된다. 이 방법은, 비휘발성 메모리에 일련의 TCM 심볼을 기입하는 단계를 포함하고, 각 TCM 심볼은 콘볼루션 코드에 예속된 각 TCM 심볼의 적어도 최하위 비트를 갖는 적어도 2개의 비트를 나타내고, 각 심볼의 적어도 하나의 다른 비트는 콘볼루션 인코딩되지 않으며, TCM 심볼들은, 데이터 구조 내의 적어도 하나의 코드워드에 대한 콘볼루션 코드의 코드 효율이 상기 데이터 구조 내의 인접 코드워드의 코드 효율과는 상이하도록 일련의 코드워드를 형성하는 일련의 리드 솔로몬 심볼을 형성한다.
본 개시의 계속되는 양태에서, 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서, 데이터 구조는 비휘발성 메모리에 저장된다. 이 데이터 구조는, 비휘발성 메모리의 일부를 형성하는 일련의 메모리 셀들로 된 상기 비휘발성 메모리에 저장되는 일련의 TCM 심볼을 포함하고, 각 TCM 심볼은 적어도 하나의 비트를 포함하며 비휘발성 메모리에 이전에 기입된 데이터 전송 ―이 데이터 전송의 표현으로서 상기 일련의 메모리 셀들에 의해 적어도 평균적으로 셀당 분수 개수의 비트들(a fractional number of bits per cell)이 저장됨― 을 형성한다.
본 개시의 추가 양태에서, 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서 사용하기 위한 방법이 설명된다. 이 방법은, 비휘발성 메모리의 일부를 형성하는 일련의 메모리 셀들로 된 상기 비휘발성 메모리로의 데이터 전송으로서 일련의 TCM 심볼 ― 각 TCM 심볼은 적어도 하나의 비트를 포함함― 을 기입하되, 상기 데이터 전송의 표현으로서 상기 일련의 메모리 셀들에 의해 적어도 평균적으로 셀당 분수 개수의 비트들이 저장되도록 기입하는 단계를 포함한다. 한 특징에서, 이 데이터 전송은 사용자 데이터를 포함하고, 이 방법은 사용자 데이터를 복구하기 위해 셀당 분수 개수의 비트에 기초하여 비휘발성 메모리로부터 일련의 TCM 심볼들을 판독하는 단계를 더 포함한다.
본 개시의 또 다른 양태에서, 한 장치는 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템의 일부를 형성한다. 이 장치는, 데이터 전송 동작에서 일련의 TCM 심볼로서 비휘발성 메모리의 일부를 형성하는 일련의 메모리 셀들로 된 비휘발성 메모리에 데이터 구조를 기입하되―각 TCM 심볼은 적어도 하나의 비트를 포함하고, 데이터 구조는 사용자 데이터를 포함함―, 상기 일련의 메모리 셀들에 의해 적어도 평균적으로 셀당 분수 개수의 비트들이 저장되도록 기입하기 위한 기입 구조를 포함한다. 한 특징에서, 판독 구조는, 사용자 데이터를 복구하기 위해 셀당 분수 개수의 비트에 기초하여 비휘발성 메모리로부터 일련의 TCM 심볼들을 판독하도록 구성된다.
전술된 예시적 양태 및 실시예에 추가하여, 추가의 양태 및 실시예들이 도면들을 참조하여 이하의 설명의 연구를 통해 명백해질 것이다.
예시적 실시예들이 참조 도면들에서 예시된다. 여기서 개시된 실시예 및 도면들은 제한이 아니라 예시하기 위한 것이다.
도 1은 본 개시에 따라 생성된, 메모리에서 셀당 멀티-비트 저장을 제공하는 시스템의 블록도로서, 데이터가 저장될 수 있는 방식에 관하여 소정 상세사항을 나타낸다.
도 2는 도 1의 시스템의 메모리에 저장될 수 있는 데이터 구조의 한 실시예의 개략도로서, 데이터 구조의 상세사항을 도시한다.
도 3은 도 1의 시스템의 일부로서 사용될 수 있는 콘볼루션 인코더의 한 실시예를 나타내는 블록도이다.
도 4는 도 1의 시스템의 인코딩 섹션에 관한 상세사항을 나타내는 블록도이다.
도 5는 도 4의 인코딩 섹션에 의해 동작될 수 있는 인코딩 방법의 한 실시예를 나타내는 흐름도이다.
도 6은 도 1의 시스템의 디코딩 섹션에 관한 상세사항을 나타내는 블록도이다.
도 7은 도 6의 디코딩 섹션에 의해 동작될 수 있는 디코딩 방법의 한 실시예를 나타내는 흐름도이다.
도 8은 도 1의 시스템의 일부를 형성할 수 있고 도 4의 인코딩 섹션 뿐만 아니라 도 6의 디코딩 섹션에 의해 이용될 수 있는 파라미터 레지스터 섹션의 한 실시예를 나타내는 블록도로서, 여기서는 복수의 레지스터 뱅크를 갖는 뱅크화된 구성의 상세사항을 나타내기 위해 도시된 것이다.
도 9는 도 8의 뱅크화된 파라미터 섹션 실시예에 관한 동작을 위한 방법의 한 실시예를 나타내는 흐름도이다.
도 10은 도 1의 메모리 섹션에 저장될 수 있는 데이터 구조의 또 다른 실시예의 개략도로서, 여기서는 분수 비트 밀도(fractional bit density)에 관한 추가 상세사항을 나타내기 위해 도시되어 있다.
도 1은 본 개시에 따라 생성된, 메모리에서 셀당 멀티-비트 저장을 제공하는 시스템의 블록도로서, 데이터가 저장될 수 있는 방식에 관하여 소정 상세사항을 나타낸다.
도 2는 도 1의 시스템의 메모리에 저장될 수 있는 데이터 구조의 한 실시예의 개략도로서, 데이터 구조의 상세사항을 도시한다.
도 3은 도 1의 시스템의 일부로서 사용될 수 있는 콘볼루션 인코더의 한 실시예를 나타내는 블록도이다.
도 4는 도 1의 시스템의 인코딩 섹션에 관한 상세사항을 나타내는 블록도이다.
도 5는 도 4의 인코딩 섹션에 의해 동작될 수 있는 인코딩 방법의 한 실시예를 나타내는 흐름도이다.
도 6은 도 1의 시스템의 디코딩 섹션에 관한 상세사항을 나타내는 블록도이다.
도 7은 도 6의 디코딩 섹션에 의해 동작될 수 있는 디코딩 방법의 한 실시예를 나타내는 흐름도이다.
도 8은 도 1의 시스템의 일부를 형성할 수 있고 도 4의 인코딩 섹션 뿐만 아니라 도 6의 디코딩 섹션에 의해 이용될 수 있는 파라미터 레지스터 섹션의 한 실시예를 나타내는 블록도로서, 여기서는 복수의 레지스터 뱅크를 갖는 뱅크화된 구성의 상세사항을 나타내기 위해 도시된 것이다.
도 9는 도 8의 뱅크화된 파라미터 섹션 실시예에 관한 동작을 위한 방법의 한 실시예를 나타내는 흐름도이다.
도 10은 도 1의 메모리 섹션에 저장될 수 있는 데이터 구조의 또 다른 실시예의 개략도로서, 여기서는 분수 비트 밀도(fractional bit density)에 관한 추가 상세사항을 나타내기 위해 도시되어 있다.
이하의 설명은, 당업자가 본 발명을 제작하고 이용할 수 있게 하도록 제시되며, 특허 출원 및 그 요구조건의 맥락에서 제공된다. 설명된 실시예들에 대한 다양한 수정이 당업자에게는 용이하게 명백할 것이며, 여기서 교시된 일반적 원리는 다른 실시예들에도 적용될 수 있다. 따라서, 본 발명은, 도시된 실시예로 제한되도록 의도된 것은 아니고, 첨부된 청구항의 범위 내에 정의된 수정과 등가물을 포함하는 여기서 설명된 원리 및 특징과 일치하는 가장 넓은 범위에 따라야 한다. 도면은 축척비율대로 그려진 것은 아니고, 관심 특징을 최상으로 예시할 것으로 여겨지는 방식으로 된 본질적으로 개략적인 것임에 주목한다. 도면에 제공된 다양한 그림들에 관하여 독자의 이해를 향상시키기 위한 목적으로 설명적 용어가 이용될 수 있으며, 이것은 어떠한 식으로든 제한하고자 함은 아니다.
본 개시는, 비휘발성 메모리에 기초한 데이터 저장 및 검색 시스템의 성능에 관하여 출원인에 의해 주목할만한 향상으로 여겨지는 것들을 제공한다. 본 개시는, 2개의 별개 그룹의 비트들이 예를 들어 일련의 트렐리스 코딩된 변조(TCM; Trellis Coded Modulation) 심볼들 각각의 상이한 부분을 형성하는 식으로 2개의 별개 그룹의 비트들이 코딩되고 있는 예를 들어 상기 인용된 '546 출원에서 설명되는 멀티-비트 코딩 시스템과 관련있다. 각 TCM 심볼의 LSB라고도 불릴 수 있는 한 그룹의 비트들은 적어도 최하위 비트를 포함하고, TCM 심볼의 비트들 모두는 아닌, 연속 상위의 추가 비트들을 포함할 수 있다. MSB라고도 불릴 수 있는 또 다른 그룹의 비트들은 LSB 이외의 TCM 심볼의 나머지 비트들 모두를 포함하고, 최상위 비트를 포함할 수 있으며, TCM 심볼의 비트들 모두는 아닌 연속 하위의 추가 비트들을 포함할 수 있다. 한 실시예에서, 셀당 3비트 코딩에 대하여 2개의 MSB가 있다. 또 다른 실시예에서, 셀당 4비트 코딩에 대하여 3개의 MSB가 있다. 현재 다루고 있는 이 전체 개시물을 이용하여 당업자에 의해 다른 실시예들이 용이하게 구성될 수 있다.
본 개시에 따른 성능 혜택은, 비휘발성 메모리의 소정량에 대한 증가된 저장 능력 뿐만 아니라 여기서 밝혀진 교시가 적용된 데이터 저장 시스템의 신뢰성 및 수명에 관한 향상도 포함한다. 예로서, NAND 플래시를 이용하는 종래의 시스템은 메모리 소자에서 자연적으로 발생하는 에러를 정정하는 메커니즘의 포함을 요구한다. 본 개시는, 비휘발성 메모리를 이용하는 종래 시스템에 비한 성능 이득의 기저를 이루는 강력한 에러 검출 및 정정 메커니즘을 제공한다. 이러한 메모리 소자에서의 에러율은, 환경 및 사용 통계에 의해서 뿐만 아니라, 소자 기술의 함수로서 특정 메모리 소자에 대해 예측가능한 통계량으로서 정량화될 수 있다. 이들 에러율과 메모리 소자의 수명 기간에 걸친 에러율이 변하는 방식에 대한 파악은, 각 메모리 소자에 대한 최적의 성능을 제공하는 에러 검출 및 정정 시스템을 구성하는데 이용될 수 있다. 또한, 출원인은, 많은 특정 메모리 소자 각각과 최적으로 동작하고 각 메모리 소자의 수명에 걸쳐 그 메모리 소자와 동작하도록 파라미터화될 수 있는 일반화된 에러 정정 시스템을 설계할 수 있다는 것을 인식하고 있다.
본 개시는, 비휘발성 메모리 소자에 대한 적용과 관련하여 데이터를 저장하고 검색하는데에 대수적 에러 정정 및 트렐리스 코딩된 변조(TCM)의 조합을 포함하는 인코딩 및 디코딩 방법을 이용한다. 한 실시예에서, 설명된 인코딩 및 디코딩 기술들은, 호스트 컴퓨터, 인코딩 및 디코딩 채널, 및 정보 저장 매체로의 접속을 갖는 데이터 저장 시스템에 의해 이용된다. 데이터를 비휘발성으로 보유할 수 있는 임의의 적절한 기술에 따를 수 있는 하나 이상의 비휘발성 메모리 소자 형태의 저장 매체가 제공된다. 여기서 설명되는 진보된 기술로부터 혜택을 받을 수 있는 오늘날의 데이터 저장 시스템은 저장 매체로서 NAND 플래시를 이용할 수 있지만, 이 진보된 기술은, 현재 이용가능하거나 아직 개발 예정인 기타 임의의 적절한 형태의 비휘발성 메모리에 기초하는 소자에 관해서도 동등하게 적용가능하다. 이러한 다른 형태의 비휘발성 부재는, NAND 플래시로 볼 수 있는 것과 유사한 혜택을 실현할 수 있다.
여기서 이용가능한 비휘발성 메모리 소자는, 각 셀이 정보 단위(a unit of information)를 저장할 수 있는 셀 기반의 소자이다. 이 단위는 단일 비트 또는 복수 비트를 저장할 수 있다. 비휘발성 메모리 셀에서 한 비트의 저장은, 데이터 저장 시스템이 셀의 2개의 가능한 상태들간을 신뢰성있게 구분(resolve)할 것을 요구한다. 더 많은 비트의 저장은 추가의 상태와, 이들간의 구분 능력을 요구한다. 셀 내의 데이터량이 감지된 전압의 관점에서 구분된다면, 예를 들어, 셀당 2비트의 저장은 4개의 별개의 전압들을 구분할 것을 요구한다; 3비트의 저장은 8개의 별개의 전압들을 구분할 것을 요구하는 등등의 방식이다. 종래의 시스템은, 저장된 비트수에 관한 매우 높은 신뢰성 및 구분 능력을 갖는 메모리를 이용할 때에만 플래시 메모리에 2개보다 많은 비트를 저장한다고 말할 수 있다. 즉, 종래 기술은 정정의 필요성이 거의 없도록 에러의 가능성을 제거하려는 접근법을 취했다. 그러나, 출원인은, 예를 들어, NAND 플래시 소자와 같은 비휘발성 소자는 불완전한 소자라는 것을 인식하고 있다. 이와 같이, 이러한 소자를 이용할 때 셀당 복수의 전압을 한결같이 구분하는 것은, 본 개시에 수반되는 혜택이 중요해질 정도로 어려운 것이다. 셀당 이러한 복수의 전압을 구분하는 능력은, 구분되고 있는 전압의 수와 레벨에 비례하여 줄어든다는 점을 이해하여야 한다. 본 개시는 메모리 소자에서 셀당 복수의 비트의 저장을 가능하게 하는 것으로, 종래 기술에서는 셀당 동일한 개수의 비트를 신뢰성있게 저장하고 검색하는 것이 불가능할 것이다. 대수적 인코딩 및 TCM 인코딩의 조합의 적용은, 셀당 복수 비트의 저장을 위해서는 소정 셀에서 상위 비트보다는 하위 비트에 에러 가능성이 더 많다는 출원인의 인식과 부합한다. 본 개시는, 셀당 4비트를 저장하는 시스템의 예시적 설명을 제공한다. 그러나, 이 설명은 제한하고자 함은 아니다. 예를 들어, 파라미터를 변동시킴으로써, 셀당 3비트 정도의 적은 비트, 또는 셀당 4비트보다 큰 비트를 저장하는데에도 동일한 교시가 적용될 수 있다.
이제 유사한 참조 번호가 유사한 컴포넌트를 가리킬 수 있는 도면들로 돌아가서, 시스템 컴포넌트들이 데이터의 셀당 멀티-비트 저장과 검색을 제공하고 있는, 개괄적으로 참조 번호 10으로 표시된 시스템의 블록도인 도 1을 즉시 참조한다. 시스템(10)에서, 호스트 컴퓨터(12)는 비휘발성 메모리(14)를 구성하는 저장 셀을 이용하여 데이터를 저장하고 검색한다. 판독 및 기입은, 호스트로부터 비휘발성 메모리로, 및 메모리로부터 호스트로 데이터를 신뢰성있게 전달하는 인코딩 섹션(20) 및 디코딩 섹션(22)에 의해 각각 가능하다. 호스트에 의한 메모리로의 데이터의 저장은, 호스트가 데이터를 판독할 때 발생하는 비트 에러들이, 호스트로 반환되기 전에 디코딩 프로세스에 의해 식별되고 데이터로부터 제거될 수 있는 방식으로 실행된다.
여전히 도 1을 참조하면, 비휘발성 메모리(14)는 하나 이상의 개개 메모리 소자들로 구성될 수 있으며, 메모리 소자들 각각은, 인코더라고도 상호교환가능하게 불릴 수 있는 인코딩 섹션(20), 또는 디코더라고도 상호교환가능하게 불릴 수 있는 디코딩 섹션(22)에 의해 액세스될 수 있다. 비휘발성 메모리에 대한 소자 기술은, 셀당 하나보다 많은 비트를 저장할 수 있는 임의의 비휘발성 매체일 수 있다. NAND 플래시가 대표적이지만, 전술된 바와 같이, 임의의 비휘발성 기술이 마찬가지로 적용될 수 있을 것이다.
호스트(12)는, 데이터 저장 및 검색 시스템에 판독 및 기입 명령을 내리는 임의의 적절한 장치일 수 있다. 이것은 통상 프로세서이며, 컴퓨터 시스템의 일부일 수 있지만, 임베디드 시스템의 일부일 수도 있다. 인코더(20)는 호스트(12)로부터 메모리(14)로의 데이터 전송의 프로세스 동안에 동작한다. 인코더의 기능은, 호스트가 메모리(14)로부터 데이터가 판독될 것을 요청할 때 에러가 검출되고 정정될 수 있는 방식으로, 호스트에 의해 제출된 데이터에 관하여 변환을 수행하는 것이다. 디코더(22)는 메모리(14)로부터 호스트(12)로의 데이터 전송의 프로세스 동안에 동작한다. 디코더의 기능은, 메모리에 의해 데이터가 저장된 형태로 된 메모리로부터 검색된 데이터에 변환을 수행하여, 그 데이터를 호스트에 의해 인코더에 원래 제출된 형태로 변환하는 것이다. 메모리(14)에 저장된 데이터의 형태는, 메모리(14) 불완전성으로 인해 발생하는 데이터에서의 비트 에러를 디코더(22)가 검출하고 정정할 수 있게 하는 인코딩을 포함한다.
본 개시에 따라 생성되는 실시예들은, 인코더, 디코더, 및 비휘발성 메모리의 구현에 적용될 수 있을 뿐만 아니라, 호스트가 메모리로의 저장을 위한 데이터의 전송을 야기하고 메모리에 저장된 데이터의 호스트로의 전송을 야기하는 명령들을 전송함으로써 동작을 지시하는 시스템 환경에도 적용될 수 있다.
이제, 개괄적으로 참조 번호(100)로 표시되고 본 개시에 따라 비휘발성 메모리(14)(도 1)에 저장될 수 있는 데이터 구조의 한 실시예를 개략적으로 나타내는 도 2를 참조한다. 특히, 도 2는, 셀당 4비트 밀도 및 후술될 특정 펑쳐 패턴(puncture pattern)에 대해, TCM 심볼 스트림 상에 할당되는 RS1 - RS13으로 지정된 복수의 리드 솔로몬(RS) 심볼을 나타낸다. 리드 솔로몬 코드는 블록 코드의 한 형태라는 점을 이해하여야 한다. 이 점에서, 예를 들어, 비트별 BCH 코드와 같은, 임의의 적절한 형태의 블록 코드가 이용될 수도 있다. 현재 다루고 있는 이 전체의 개시에 의해, 당업자는, 비트별 BCH 코드와 같은 블록 코드에 기초하여 기타의 시스템, 기술, 및 데이터 구조를 용이하게 구현할 수도 있다. TCM 심볼들 중 소정 심볼들은 개별적으로, 예를 들어, TCM1, TCM2, TCM3, 및 TCM15로 지정된다. 각 TCM 심볼에 대한 비트의 유의성(significance)은 b0 내지 b3로서 지정되어 있으며, b0는 최하위 비트이다. 리드 솔로몬 심볼 RS1, RS7 및 RS12(부분적으로만 도시)는, 데이터 전송의 초기 부분(102)에서, 연관된 TCM 심볼로부터 취한 최하위 비트 b0만으로 구성된다. RS2 내지 RS6, RS8 내지 RS11, 및 RS13(부분적으로만 도시)은, MSB 비트 b1 내지 b3으로 구성된다. 데이터 구조는 초기 부분(102) 및 종료 부분(104)을 갖는 것으로 도시되어 있다. TCM 심볼들 TCM1-TCM32는 RS1-RS13의 도시된 부분을 포함하는 구조의 초기 부분(102)을 형성한다. 데이터 구조의 종료 부분은, 더 설명되는 바와 같이, RS(N)과 TCM 심볼 TCM(N')로 끝나는 한 그룹의 RS 심볼들로 구성된다. 도 2의 데이터 구조는 비휘발성 메모리에 저장된 특정의 예시적인 구조에 대응한다는 점을 이해하여야 한다. LSB들의 개수가 1보다 클 수도 있지만, 앞서 설명된 바와 같이, 도 2는, 각 4비트 TCM 심볼로부터 취해진 3개의 MSB(b1 내지 b3)가 한 개의 LSB(b0)와 쌍을 이루고 있는 실시예를 나타낸다. 보다시피, LSB 위치의 "X" 심볼뿐만 아니라 LSB 위치의 비 "X" 심볼은, 데이터 구조를 메모리에 실제로 저장하기 이전에 콘볼루션 인코딩에 의해 생성된 코드 비트들을 나타낸다. 이 점에서, "X" 비트 위치에 운반되는 데이터는 여분 코드 비트(extra code bit)라고 말할 수 있다. 본 개시와 첨부된 청구항이 TCM 심볼을 저장하는 메모리를 참조하고 있지만, 실제로 저장되는 것은 TCM 심볼을 나타내는 메모리 타겟이나 타겟 레벨로서 간주될 수 있는 레벨이라는 점을 이해하여야 한다는 점에 유의한다.
계속 도 2를 참조하면, N개의 RS 심볼 [RS1, RS2, ..., RS(N-1), RS(N)]의 스트림은 4비트 TCM 심볼의 스트림 상으로 팩킹된다. 용어 "팩킹"이란, 하나의 심볼 포맷을 또 다른 심볼 포맷으로 비트들을 재그룹화하는 프로세스를 말한다. 이 경우, 예를 들어, 심볼당 10비트를 포함하는 RS 심볼 스트림의 4비트 TCM 심볼 스트림 상으로의 "팩킹"은, 제1 TCM 심볼의 LSB에 대한 제1 RS 심볼로부터 1개 비트와, 제1 TCM 심볼의 MSB들에 대한 제2 RS 심볼로부터 3개 비트를 추출하는 프로세스이다. 제2 TCM 심볼은, 제2 TCM 심볼의 LSB에 대한 제1 RS 심볼로부터의 추가 비트와, 제2 TCM 심볼의 MSB들에 대한 제2 RS 심볼로부터 3개의 추가 비트로부터 구성된다. 제1 RS 심볼의 10 비트 모두를 수신하기 위하여, 15개의 TCM 심볼들이 생성된다. 현재의 실시예에서, 이들 15개 TCM 심볼들과 연관된 LSB들 중 5개는 콘볼루션 여분 코드 비트들에 대한 X 플레이스홀더(placeholder)가 되는 반면, LSB들 중 10개는 제1 RS 심볼을 구성하는 실제의 데이터 비트들이다. RS6는 RS1의 끝을 침범하고 있는 점에 유의한다. 일단 현재의 RS MSB 심볼이 전체의 LSB RS 심볼의 끝을 침범하면, 그 다음 RS 심볼은 LSB RS 심볼로서 전용된다. 도 2에서는 처음 30개 TCM 심볼이 생성되기 때문에, RS 심볼들은 RS2-RS5, RS1, RS6, RS8-RS11, 및 RS7의 순서로 완료되고, RS7 및 RS11은 TCM 30의 생성과 동시에 완료된다. 처음 30개 TCM 심볼들의 생성은 전체 팩킹 패턴을 나타내기 때문에, 추가의 TCM 심볼들은, 모든 RS 심볼들이 TCM 심볼로 변환될 때까지 요구되는 바에 따라 후속 RS 심볼들로부터 비트들을 취하여, 비슷한 방식으로 구성된다. 팩킹 프로세스는 소스 심볼(즉, RS 심볼)이 존재하는 한 계속된다. RS 심볼 스트림으로부터의 모든 비트들이 소진되었기 때문에 마지막 4비트 TCM 심볼이 완료되기 위해 추가의 비트를 요구한다면, 추가의 충전(filler) 비트들이 삽입되어 마지막 4비트 심볼을 채울 것이다. 도면은 N개 심볼들이 4비트 스트림 상에 배치되는 방식을 도시하고 있다. 각 4비트 심볼은, 도시된 바와 같이, 수직 배열된 4비트 슬라이스로 표현된다. 인코딩 목적을 위한 TCM 심볼 스트림 상으로의 각 RS 심볼의 비트들의 배치 순서는, 디코더가 협력적 디코딩 기능 동안에 심볼의 원래 비트 순서를 정확히 재건할 수 있는 한, 임의의 편리한 순서일 수 있다. TCM 출력 스트림은 시퀀스 [TCM1, TCM2, ..., TCM(N'-1), TCM(N')]이다. 길이 N의 RS 심볼들의 입력 스트림은 N' 심볼들의 TCM 스트림을 생성하는 점에 유의한다. N과 N'간의 관계는, 비제한적 예로서, 비트 밀도, RS 데이터 길이, RS 패리티 길이, 사용할 콘볼루션 다항식 및 사용할 펑쳐 다항식, N의 특정 값을 포함할 수 있는 주어진 파라미터 세트가, N을 알면 N'를 결정할 수 있게 하는 N'의 특정값을 생성하도록 하는 관계이다. 따라서, RS 대 TCM 변환은 출력 비트들의 개수 대 입력 비트들의 개수에 관하여 정확하다.
입력 스트림 내의 제1 RS 심볼은 MSB들이나 LSB들에 합리적으로 할당될 수 있다는 것을 이해하여야 한다. LSB들 또는 MSB들 사이의 선택은, 협력적 디코딩 기능이 시퀀스를 정확히 재건할 수 있는 한 임의적이다. 현재의 실시예에서, 스트림 내의 제1 RS 심볼은, 인코딩 동작 동안에 LSB 심볼들이 MSB 심볼들보다 천천히 소모(consume)된다는 사실에 기초하여 구조의 LSB측에 항상 할당되고 있다. 초기 RS 심볼에 후속하여, RS 심볼 사용의 시퀀스는 특정 실시예에 의해 결정된다. 도면에 도시된 구성에서, 제1 RS 심볼(RS1)은 LSB 심볼로서 선택되고, 제2 RS 심볼(RS2)은 그러면 MSB 심볼이다. 후속하는 RS 심볼들은 사용률에 기초하여 MSB 또는 LSB에 할당된다. 도 2에서, 5개의 RS 심볼들(RS2-RS6)은 제1 RS 심볼(RS1)의 배치에 후속하는 MSB들에 LSB로서 할당된다. RS6의 MSB 사용으로의 할당 후에, RS7은 제2 LSB 심볼로서 할당된다. 도면에서 제1 LSB 심볼과 제2 LSB 심볼 사이의 경계는 TCM 심볼들 TCM15와 TCM16 사이의 경계이다. 할당 시퀀스는, RS 데이터 길이(여기서, RS 데이터 길이는 전체 입력 데이터 스트림을 구성하는 RS 심볼들의 수이다)와 같은 심볼들의 수가 사용되었을 때까지 이런 방식으로 진행된다. 보다시피, 본 개시에 따라 생성되는 시스템은 인입 RS 데이터 스트림을 모니터링하고 인입 RS 심볼들을 LSB들과 MSB들 사이에 적절하게 할당하도록 구성된다.
도 2에서, MSB를 충전하는데 이용되는 각 RS 심볼은 10개 정사각형으로 구성되고, 각 정사각형은 비트를 나타낸다(각 RS 심볼의 내부의 점선을 이용하여 분리됨)는 점에 유의해야 한다. 이들 비트들은 이 심볼의 정해진 구성에서 RS 심볼 길이의 10 비트에 대응한다. 그러나, LSB 위치에서, (10 대신에) 15 비트 정사각형이 도시되어 있다. 이러한 확장은, 이제 설명될 방식으로 LSB 비트 스트림을 콘볼루션 인코딩함으로써 생성되어 LSB RS 심볼들에 더해진 추가 또는 여분 코드 비트들의 결과이다. 도 2에서, "X"를 포함하는 비트 박스들은 여분 코드 비트들을 나타낸다. 현재의 실시예에서, 각 LSB RS 심볼은 5개의 여분 코드 비트들을 포함한다. 여분 코드 비트들의 특정한 값들은, 비-플레이스홀더 비트들(즉, 각 LSB RS 심볼을 구성하는 원래의 비트들)의 값에 기초한다. 도 2의 데이터 구조는, 나중에 여분 코드 비트들로 대체되는 플레이스홀더로서의 X 표시자를 삽입함으로써 LSB들의 콘볼루션 인코딩 이전에 처음 생성된다. 각 RS LSB 심볼의 어느 비트들이 플레이스홀더이고 얼마나 많은 플레이스홀더가 삽입될지는, 구성을 정의하는 시스템 파라미터들의 함수이다; 이 점에서 가장 중요한 파라미터는 펑쳐 다항식으로서, 이것은, 후술되는 바와 같이, 생략될 소정 비트들과 콘볼루션 인코딩 후에 어떤 추가 또는 여분 코드 비트들이 포함되는지를 지정한다. 그러나, 당분간은, 도 2의 데이터 구조는, LSB 스트림에서, LSB 스트림 내에 공급되는 연관된 RS 심볼들에 의해 포함된 비트들의 개수보다 많은 비트들을 수용할 것이 요구된다는 점을 이해하는 것으로 족하다.
RS 코드워드 길이로서 지정된 임의의 길이를 갖는 RS 심볼들의 인입 스트림의 끝에서, 제출된 RS 코드워드 내의 RS 심볼들의 정확한 갯수만을 이용할 때 TCM 인코딩 및 디코딩 관점으로부터 시퀀스의 폐쇄를 달성하기 위해서는 추가 비트들을 삽입하는 것이 필요할 수 있다. 이 폐쇄에 대해서는 2가지 양태가 있으며, 아래에 바로 설명될 것이다.
제1 양태에서, 데이터 구조를 완료하는 것은, 최종 RS 심볼 [RS(N)]은 마지막 TCM 심볼의 비트 b3만을 채운다는 사실을 보상하기 위해 TCM 심볼 스트림의 끝에서 TCM 심볼 TCM(N')에 2개의 비트 b1 및 b2의 추가를 요구한다. 또 다른 상황은, LSB 위치의 마지막 RS 심볼이 마지막 MSB RS 심볼 [RS(N)]의 마지막 비트들에 의해 구분되는 경계에 미치지 못하는 경우일 수 있다. 이 경우, 종료 TCM 심볼(들)에 LSB 비트들을 제공하기 위하여 마지막 LSB RS 심볼의 끝을 넘어선 LSB 위치에서 추가 비트들이 채워질 수 있다.
본 실시예에 따른 제2 양태에서, LSB 스트림은 한 세트의 연속된 제로로 끝나고, 그 개수는 콘볼루션 인코더의 제약 길이 K와 같거나 K보다 1 작은 것을 초과한다. 도 2의 실시예에서는, 마지막 LSB 심볼 내의 최종 플레이스홀더와 섞인 5개의 최종 제로들 때문에, 제약 길이는 6으로서 주어질 수 있다. 인코딩 동안에 이들 연속된 제로들이 제공되면, 이들은 디코딩 기능 동안에 연관된 에러가 나타나는 것을 피하도록 디코딩될 때 알려진 모호하지 않은 종료 시퀀스를 제시한다. 이 목적을 위해, 도 2는 TCM(N')에서 끝나는 LSB들의 마지막 5개 데이터 비트들이 제로라는 것을 도시하고 있다. 이 점에서, 본 실시예에서는 마지막 K-1 비트들이 제로라는 요건 때문에, 제약 길이 K=6이 가정된다. 5개의 제로 비트들은 이들이 연속된 데이터 비트라는 점에서 연속이라는 점에 유의해야 한다. 그러나, 이들 연속된 데이터들 또는 코드 비트들은 각각이 X를 이용하여 지정되어 있는 여분 코드 비트들에 의해 이격될 수 있는데, 이것은, 여분 코드 비트들은 프리-인코드 데이터 비트들(pre-encode data bits)에 응답하여 콘볼루션 인코딩 프로세스에 의해 설정된 추가 비트들이기 때문이다.
도 3은, 개괄적으로 참조 번호 300으로 표시된 콘볼루션 인코더의 한 실시예를 나타내는 블록도이다. 펑쳐링(puncturing)의 적용을 통해, 인코더의 출력의 코드 레이트가 증가될 수 있다. 일반적으로, 펑쳐링을 이용하지 않는 콘볼루션 인코더는 매 입력 비트에 대해 2개의 출력 비트를 생성한다; 이 경우, 코드 레이트는 1/2인데, 이것은, 코드 레이트의 한 정의는 각 출력 (인코딩된) 비트에 대한 입력 비트들(미 인코딩된 비트들)의 개수이기 때문이다. 입력 비트들의 개수에 관한 인코더에 의해 생성되는 출력 비트들의 개수를 줄여 코드 레이트를 증가시키는 것이 바람직하다. 이 목적을 위해, 펑쳐링이 적용된다: 이것이 의미하는 것은 출력 비트들 중 일부는 인코더의 출력 비트 스트림으로부터 제거되어 출력 비트에 대한 입력 비트의 비율이 증가된다는 것이다. 이것은 인코더의 효율을 증가시키고, 이것이 비트 정정 성능의 과도한 손실없이 달성될 수 있다면, 효율 이득은 바람직한 트레이드-오프가 될 수 있다.
도 3의 인코더(300)는, 프로그래머블 싱글 비트 콘볼루션 인코더의 한 실시예이다. 이 인코더는, 일련의 시간 증가 t에 따라 제공되는 싱글 비트 입력의 직렬 진행으로서 (파형으로 표시된) 직렬 입력 데이터 스트림(302)을 수신한다. 이 인코더는, 시프트 레지스터 소자수 + 1에 이르는 제약 길이를 갖는 임의의 콘볼루션 코드에 대해 프로그램될 수 있다. 주어진 제약 길이에 대해, 인코더는 임의의 콘볼루션 다항식 계수와 펑쳐 다항식 계수를 수용할 수 있다.
(점선 내에 도시된) 시프트 레지스터(304)는, 시간 증가 t에 따라 잘 알려진 방식으로 앞서 저장된 데이터 비트들을 시프팅하면서 현재 시간 증가의 끝에서 현재의 데이터 비트 입력으로 업데이트된다. 시프트 레지스터가 업데이트된 후에, 시퀀스 내의 다음 데이터 입력이 시프트 레지스터로의 입력에 제공된다. 시프트 레지스터는 K-1 싱글 비트폭 저장 소자로 구성되며, 여기서 K는 콘볼루션 인코더의 제약 길이이다. 현재의 입력 상태는 Dt(0)로 지정된 반면 시프트 레지스터 소자들은 순차적 수신 순서를 나타내기 위해 Dt(1), ... Dt(K-2), Dt(K-1)로서 지정된다. 현재의 입력 데이터 비트와 함께 K-1 레지스터 비트들은 인코더로부터 다음 출력을 생성하는데 이용된다.
Cb(K-1) 내지 Cb(0)로 지정된 저장된 비트들은, 도시된 바와 같이, 2개의 콘볼루션 다항식 중 제1 다항식을 나타낸다. 현재의 입력 데이터 비트, Dt(0), 및 시프트 레지스터(304)는, 도시된 바와 같이, 결합되어 각 입력 비트에 대한 2개의 출력 값들 중 하나를 생성한다. 도 3은, 계수 Cb(K-1) 내지 Cb(0)를 나타내는 임의의 비트 조합이 제1 콘볼루션 다항식으로서 프로그램될 수 있도록 하는 방식으로, 콘볼루션 다항식의 이용을 일반화한다는 점을 이해하여야 한다. 제1 콘볼루션 다항식의 각 비트는 대응하는 AND 게이트(320)에, AND 게이트들 중 소정의 하나에 제공된 값 1이 그 AND 게이트로 하여금 현재 비트, Dt(0), 또는 각각의 지연된 비트인 Dt(1) 내지 Dt(K-1)일 수 있는 연관된 입력 데이터 비트를 배타적 OR(XOR)(322)에 전달하게 하는 식으로 제공된다. XOR(322)의 출력(324)은 2개의 출력 값들 중 제1 값에 대응한다. 역으로, AND 게이트들 중 상기 소정 게이트가 콘볼루션 다항식의 일부로서 제로 비트를 수신하면, 대응하는 입력 데이터 비트(현재 또는 지연된 것)는 XOR(322)에 의한 출력 비트의 결정에 기여하지 않을 것이다. 한 실시예에서, Cb(K-1) 내지 Cb(0)는 레지스터에 저장될 수 있다. 이들 레지스터 값들은, 콘볼루션 인코더를 작동시키기 이전에 전체 구성의 일부로서 기입될 수 있다. XOR(322)는 논리 AND 함수(320)로부터의 출력들을 결합한다. 다시 한번, 논리 XOR 함수(322)에 의해 생성된 값은, 콘볼루션 인코더에 의해 각 Dt(0)에 대해 생성된 2개의 인코딩된 비트들 중 하나이다. 이 결과 비트가 출력 데이터 스트림(Eoutb)에 삽입될지의 여부는, 그 비트가 이제 설명될 펑쳐링 기능에 의해 인에이블되어 있는지 또는 금지되어 있는지에 의존한다.
마찬가지로, Ca(K-1) 내지 Ca(0)로 라벨링된 저장된 비트들은, 도시된 바와 같이, 제2 콘볼루션 다항식을 나타낸다. 제1 콘볼루션 다항식의 경우와 같이, 계수 Cb(K-1) 내지 Cb(0)를 나타내는 임의의 비트 조합이 제2 콘볼루션 다항식으로서 프로그램될 수 있다. 제2 콘볼루션 다항식의 각 비트는, AND 게이트들 중 소정의 하나에 제공된 값 1이 그 AND 게이트로 하여금 현재 비트, Dt(0), 또는 각각의 지연된 비트인 Dt(1) 내지 Dt(K-1)일 수 있는 연관된 입력 데이터 비트를 XOR(332)에 전달하게 하는 식으로, 대응하는 AND 게이트(330)에 제공된다. XOR(332)의 출력(334)은 2개의 출력 값들 중 제2 값에 대응한다. 역으로, AND 게이트(330) 중 상기 소정 게이트가 콘볼루션 다항식의 일부로서 제로 비트를 수신하면, 대응하는 입력 데이터 비트(현재 또는 지연된 것)는 XOR(332)에 의한 출력 비트의 결정에 기여하지 않을 것이다. 한 실시예에서, Ca(K-1) 내지 Ca(0)는 레지스터에 저장될 수 있다. 이들 레지스터 값들은, 콘볼루션 인코더를 작동시키기 이전에 전체 구성의 일부로서 기입될 수 있다. 현재의 입력 데이터 비트 Dt(0) 및 시프트 레지스터(304) 내용은, 도시된 바와 같이, 이들 값들과 결합되어 각 입력 비트 Dt(0)에 대해 AND 게이트(330) 및 XOR(332)를 이용하여 제2 출력값을 생성한다. XOR(332)는 논리 AND 함수(330)로부터의 출력들을 결합한다. 다시 한번, 논리 XOR 함수(332)에 의해 생성된 값은, 콘볼루션 인코더에 의해 각 Dt(0)에 대해 생성된 2개의 인코딩된 비트들 중 제2 비트이다. 이 결과 비트가 출력 데이터 스트림(Eouta)에 삽입될지의 여부는, 이제 설명될 펑쳐링 기능에 의존한다.
본 실시예에서, 펑쳐링 기능은 (점선의 직사각형 내에 도시된) 제1 펑쳐링 시프트 레지스터(340)와 (점선의 직사각형 내에 도시된) 제2 펑쳐링 시프트 레지스터(342)를 이용하여 (점선 내에 도시된) 펑쳐 패턴 카운터 섹션(338)에 의해 수행된다. 제1 펑쳐링 시프트 레지스터(340)는 Pa(x)로 지정된 제1 펑쳐 다항식의 계수들을 포함한다. "x"의 함수로서의 Pa(x)의 표시는, Pa(x)를 포함하는 값들이 데이터 스트림에 관해 정렬되어 있다는 사실을 나타낸다. 각 계수값은 싱글 비트로 구성되고, Pa(x)를 형성하는 비트수는 제약 길이 K와 같다. 제약 길이와 펑쳐 패턴 길이의 동등성은 도 3에 대해 예시적인 것으로 인식된다; 실시예들은 더 길거나 짧은 길이의 펑쳐 패턴을 선택할 수 있다. 길이에 관계없이, 펑쳐 패턴의 순환적 적용이 설명된다. 도면에 도시된 프로그램가능한 실시예에서, 시프트 레지스터(340)에 이용되는 비트수는 K의 값과 같고, 따라서 콘볼루션 인코더의 구성에 의해 결정된다. 시프트 레지스터(340)는 직렬 입력 데이터 스트림(302)의 각 시간 증가 t에 대해 업데이트된다. 제1 직렬 데이터 입력이 수신되기 이전에, 시프트 레지스터(340)는, 최좌측 시프트 레지스터 위치(344)가 Pa(x)의 최상위 비트로 적재되고, 최우측 시프트 레지스터 위치(346)가 Pa(x)의 최하위 비트로 적재되는 방식으로, Pa(x)의 값에 의해 초기화된다. 입력 데이터 스트림이 개시된 후에, 펑쳐 시프트 레지스터(340)는 각 시간 증가 이후에 증가된다; 시프트 레지스터의 내용들의 비트별 좌측에서 우측으로의 이동이 있고, 동시에, 최하위 시프트 레지스터 비트의 내용들은 시프트 레지스터의 최상위 비트로 이동된다(이것이 최하위 시프트 레지스터 비트의 엔드 어라운드(end-around) 시프트이다). 이런 방식으로, Pa(x)의 값은 제1 출력 스위치 기능(350)의 제어하에 한 번에 1 비트씩 이용된다. Pa(x)의 값은, 데이터가 콘볼루션 인코더에 의해 수신되는 한 순환을 계속한다. 시프트 레지스터(340)의 최상위 비트는 항상, 출력 스위치(350)에 제공될 때 펑쳐링을 위한 제어로서 이용된다. 최상위 시프트 레지스터 비트가 논리 "1"이면, XOR 함수(332)의 출력이 출력 스트림 Eouta에 삽입된다. 반면 최상위 시프트 레지스터 비트(344)가 논리 "0"이면, XOR 출력(332)은 출력 스트림 Eouta에 들어가는 것이 금지(펑쳐링)된다.
제2 펑쳐링 시프트 레지스터(342)를 이용하여 제1 펑쳐링 시프트 레지스터(340)에 관한 동작을 반영하는 방식으로 펑쳐링 기능이 추가로 수행된다. 따라서, 이들 동작들의 설명은 간결성의 목적을 위해 그 전체로서 반복되지 않을 수 있다. 제2 펑쳐링 시프트 레지스터(342)는 Pb(x)로 지정된 제2 펑쳐 다항식의 계수들을 포함한다. Pa(x)의 경우에서와 같이, "x"의 함수로서의 Pb(x)의 표시는, Pb(x)를 포함하는 값들이 데이터 스트림에 관해 정렬되어 있다는 사실을 나타낸다. 각 계수값은 싱글 비트로 구성되고, Pb(x)를 형성하는 비트수는 제약 길이 K와 같다. 또한, 제1 직렬 데이터 입력이 수신되기 이전에, 시프트 레지스터(342)는, 최좌측 시프트 레지스터 위치(360)가 Pb(x)의 최상위 비트로 적재되고, 최우측 시프트 레지스터 위치(362)가 Pb(x)의 최하위 비트로 적재되는 방식으로, Pb(x)의 값에 의해 초기화된다. 입력 데이터 스트림이 개시된 후에, 펑쳐 시프트 레지스터(342)는 각 시간 증가 후에 증가된다. 시프팅은, 제1 펑쳐링 시프트 레지스터(340)에 관하여 설명된 것과 본질적으로 동일한 방식으로, 제2 출력 스위치 기능(364)의 제어하에 한 번에 한 비트씩 Pb(x)의 값이 이용되는 방식으로 발생한다. 시프트 레지스터(342)의 최상위 비트는 항상, 제2 출력 스위치(364)에 제공될 때 펑쳐링을 위한 제어로서 이용된다. 최상위 시프트 레지스터 비트가 논리 "1"이면, XOR 함수(322)의 출력이 출력 스트림 Eoutb에 삽입된다. 반면 최상위 시프트 레지스터 비트(344)가 논리 "0"이면, XOR 출력(332)은 출력 스트림 Eoutb에 들어가는 것이 금지(펑쳐링)된다. 제1 및 제2 출력 스위치(350 및 364)는, 현재 다루고 있는 이 전체 개시에 의해 당업자에 의해, 예를 들어, 소프트웨어, 하드웨어, 또는 그 임의의 적절한 조합과 같은 임의의 적절한 방식으로 구현될 수 있는 스위칭 기능의 개략적 표현이라는 점을 이해하여야 한다.
도 3과 관련하여 설명된 펑쳐링 프로세스는 각 시간 증가시에 생성되는 출력의 개수에서의 변동성을 야기할 수 있다는 점에 유의해야 한다. 예를 들어, 레지스터의 최상위 비트 위치들(344 및 360)이 양쪽 모두 논리 "1"이면, 현재의 시간 증가에 대해 2개 비트가 더해질 것이다. 그러나, 만일 이들 비트들 중 하나가 논리 "1"이고 하나는 논리 "0"이면, 현재의 시간 증가에 대해 한 비트만이 더해질 것이다; 양쪽 모두의 비트들이 논리 "0"이면, 현재의 시간 증가에 대해 어떠한 출력 비트들도 더해지지 않을 것이다. 펑쳐링 작용은, 인코더에 대한 가능한 가장 큰 확장이, Pa(x) 및 Pb(x)의 모든 비트들이 "1"인 언펑쳐링의 경우에 대해 2:1이 되도록, 입력 스트림에 관한 출력 스트림의 크기를 제약한다. 출력 스트림 크기는, Pa(x) 및 Pb(x)에서의 "0" 값들의 개수가 증가함에 따라 감소된다. 일반적으로, 콘볼루션 인코더의 구현은, 디코딩 동안에 원하는 에러 정정 동작이 발생하기 위하여 입력 스트림에 관한 출력 스트림의 소정 확장을 이용한다. 하나의 유용한 확장 비율은 3:2이고, 이것이, 각 RS LSB 심볼이 10 대신 15 비트를 포함하는 도 2에 나타낸 경우이다. 도 2에서 LSB 심볼들 내의 추가된 "X"들은 TCM 심볼에서의 이러한 확장을 나타낸다.
도 4는, 도 1의 인코더 섹션(20)의 한 실시예를 나타내는 블록도이다. 컴포넌트 블록들 사이의 데이터 흐름을 지원하는 라인들은 도면의 제약 내에서 수치적 표시자와 함께 각 라인에 의해 수송되는 비트수에 비례하여 변하는 라인 두께를 가진다는 점에 유의한다. 인코더 섹션(20)은 도 2의 저장된 데이터 구조를 구현한다는 점을 이해하여야 한다. 이 점에서, 도 4는, 비제한적 예로서 비휘발성 메모리(14)에서 셀당 4비트 저장을 구현함으로써 도 2와 일치한다. 도 2의 데이터 구조를 생성할 목적으로, 보다시피, 인코더(20)는 RS 심볼의 입력 스트림으로부터 프리-인코드 TCM 심볼들을 생성한다. 일반적으로, 셀당 4비트 구성에서, 각 프리-인코드 TCM 심볼은 4 비트로 구성된다. 이들 비트들은, 차례로, 하나의 LSB와 3개의 MSB로 구성된다. 일부 경우에, LSB는, 나중의 콘볼루션 인코딩에 대한 준비로서 삽입되는 플레이스홀더 X일 수 있으며, 이 플레이스홀더는 나중에 여분 코드 비트에 의해 채워진다. 콘볼루션 인코딩 프로세스는, 플레이스홀더와 프리-인코드 데이터 비트들 양쪽 모두를, 각각 여분 코드 비트들과 코드 비트들로 대체한다는 점에 유의한다. 언급한 바와 같이, 프리-인코드 TCM 심볼들은 나중에, MSB에 대한 맵핑 기능과 LSB에 대한 콘볼루션 인코딩에 의해 인코딩된다. 각 프리-인코드 TCM 심볼에서, 3개의 MSB 비트들은 3비트 필드를 그 인코딩된 형태로 변환하는 맵핑 기능에 의해 인코딩된다. LSB 비트는 콘볼루션 인코더 입력 스트림에 추가되고 콘볼루션 인코더의 출력으로부터의 다음 비트로 대체된다. LSB 비트 생성 기능 동안에, 구성에 대해 선택된 펑쳐 패턴에 따라 플레이스홀더 필드 X가 삽입된다. 이들 플레이스홀더 필드들은 나중에, 프리-인코드 LSB들에 적용되는 콘볼루션 인코딩 프로세스 동안에 콘볼루션 인코더로부터의 비트들로 대체된다.
인코더 섹션과 디코더 섹션 사이의 협력의 필요성에 비추어, 소정의 디코더 구현은, 소정 디코더가 일부 인코딩 구성(예를 들어, 셀당 비트수)은 지원하고 다른 것들은 지원할 수 없도록 일부 제어 파라미터들의 범위에 관해 제약을 부과할 수 있다는 점을 이해하여야 한다. 일부 실시예에서, 특정 디코더는 특정 구성을 목표로 하고 다른 구성을 무시하도록 설계될 수 있다. 예를 들어, 디코더는 셀당 3비트 및 셀당 4비트 밀도 설정을 지원할 수 있지만, 셀당 5 이상의 비트 밀도 설정을 지원하지 않을 수 있다. 이런 방식으로 디코더 설계마다 상이한 기능은, 모두 본 개시의 범위 내에 드는 것으로 간주되는 실시예들을 나타내는데, 이것은 그럼에도 불구하고 각 실시예는 에러 정정에 대한 공통의 접근법을 포함하기 때문이다.
도 1을 참조하고, 도 4의 상세한 설명을 계속하기 이전에, 한 시스템 서브-블록으로부터 다른 서브-블록으로 이동하는 정보는 개괄적으로 심볼의 스트림으로서 조직화된다는 점에 유의한다. 호스트(12)로부터 NV 메모리(14)로의 진행에서, 및 NV 메모리(14)로부터 호스트(12)로의 역방향에서, 데이터는, 인코더 기능 동안에 사용자 데이터 형태로부터 리드 솔로몬 심볼을 거쳐 NV 메모리 셀 타겟에서 끝나는 중간 심볼들까지, 및 디코더 기능 동안에 NV 메모리 셀 타겟으로부터 다시 사용자 데이터 형태로까지의 다양한 표현을 거친다. 인코더 및 디코더 기능 양쪽 모두에서, 각 단계의 데이터는 그 발생으로부터 소비까지 심볼들의 정렬된 스트림으로서 전달되며, 각 스트림은 특정 개수의 심볼들을 포함한다.
다시 한번 도 4의 인코더(20)에 주목한다. 리드 솔로몬(RS) 인코더(402)는, 호스트(12)에 의해 인코더에 제공되는 사용자 데이터(404)를 수신한다(도 1 참조). 통상, 사용자 데이터(404)는 서로 정렬된 관계를 갖는 8비트 단위(바이트)의 특정 양일 수 있다. 사용자 데이터는, 여기서 내비친 교시의 범위 내에 쉽게 머물면서 다른 비트양에 따라 조직될 수도 있다. 따라서, 사용자 데이터는, 임의의 다른 적절한 단위의 이용이 당업자에 의한 구현에 실질적 영향을 주지 않을 것이라는 점을 인식하면서, 이하에서는 바이트로 구성되는 것으로 논의될 수 있다. 임의의 인코딩 동작에 대한 사용자 데이터 단위의 양은, 인코더에 의해 이용되는 파라미터로서, RS 인코더(402)의 동작에 적용된다. 한 실시예에서, 사용자 데이터 단위의 양(사용자 데이터 길이)은, 파라미터 레지스터 섹션(410)으로 도시된 바와 같은 레지스터 내에 프로그램된다. RS 심볼 단위가 바이트 형태의 사용자 데이터와는 상이한 바이트수를 가진다면, 사용자 데이터 바이트들은 이들에 관해 RS 인코더가 동작할 수 있기 전에 한 세트의 RS 심볼들로 변환된다. 본 개시에서 제공되는 RS 단위의 예시적 형태(심볼)는 10비트이지만, 다른 RS 단위 크기가 가능하며 여전히 여기서의 교시의 범위 내에 있다. 사용자 데이터로부터 RS 심볼로의 변환은, 이 예에서는, 10비트 심볼로의 바이트들의 간단한 변환이다; 사실상, 변환후 결과는 매 5개의 사용자 데이터 바이트(5x8 비트)에 대해 4개의 RS 심볼(4x10 비트)을 내놓는다. 임의의 소정 개수의 사용자 데이터 바이트들은 정수 개수의 RS 심볼들로 변환가능해야 하므로, 일부 "돈 케어(don't care)" 비트들이 RS 결과의 최종 심볼 내에 삽입될 수 있다. 사용자 데이터로부터 RS로의 변환으로부터 생기는 RS 심볼의 개수("RS 데이터 길이"라 함)는 마이크로프로세서 또는 CPU(412)에 의해 파라미터 레지스터 섹션(410) 내에 프로그램된 추가의 파라미터이다. 도시된 바와 같이, 런타임 RS 데이터 길이(414)는 인코더에 대한 런타임 입력이다. 특히, RS 데이터 길이(414)는 RS 카운터(420)에 제공된다. 통상, 런타임 RS 데이터 길이(414)의 값은 파라미터 레지스터 섹션(410)에 저장된 RS 데이터 길이의 값으로부터 얻어진다. 런타임 RS 데이터 길이와 파라미터 레지스터 섹션(410)에 저장된 RS 데이터 길이 사이의 관련성(connection)은 직접적 또는 간접적(수정형)일 수 있으며, 어느 것이든, 후술되는 바와 같이 특정 실시예에서 가장 적절한 것이 될 것이다.
RS 인코더(402) 및 콘볼루션 인코더(300) 양쪽 모두는 그들이 수행하는 인코딩 기능의 필요한 부분으로서 그들이 인코딩하는 데이터의 크기를 확장한다는 점에 유의해야 한다. 이러한 확장은 초래되었을 수도 있는 에러를 제거하기 위해 후속해서 디코딩 프로세스에 의해 사용될 리던던트 정보(redundant information)의 추가에 의해 유발된다. RS 인코더(402)에 의한 인코딩은 RS 패리티 심볼을 추가하는 반면, 콘볼루션 인코더(300)에 의한 인코딩은 인코딩된 비트 스트림에 추가 비트를 더한다. 본 개시에서 사용될 때 코드 효율은 저장되고 검색되는 사용자 데이터량에 대한 이러한 리던던시(redundancy)의 측정이다. 코드 효율은, 일반적으로 더 작은 양의 리던던시에 대해서는 더 좋고 더 많은 양의 리던던시에 대해서는 더 나쁜 상대적인 값으로서 해석될 수 있다. 코드 효율의 한 실증적 측정은, 사용자 데이터 단위의 인코딩시에 도 4의 인코더에 의해 생성된 총 비트수에 대한 그 사용자 데이터 단위의 총 비트수의 비율로서 취해질 수 있다. 간단한 예로서, 4096 입력 비트를 600 비트만큼 확장하는 인코딩 기능에 의해 인코딩되는 512 바이트(4096 비트)의 사용자 데이터 단위를 고려해 보자. 600 비트는 4096 정보 비트에 추가되는 리던던시이다. 그러면 코드 효율은 4096/(4096+600), 즉 87.2%이다. 코드 효율을 측정하기 위해 당업자에 의해 다양한 실증적 측정이 이용된다. 본 개시에서 앞서 논의된 이들 중 하나는 코드 레이트(code rate)이다.
적어도 일부 실시예에서 코드 효율은 변동할 수 있다는 점을 추가로 이해하여야 한다. 상대적으로 더 낮은 코드 효율에 비한 더 나은 코드 효율의 효과는, 각각 더 낮은 에러 정정 능력과 더 높은 에러 정정 능력 사이의 차이이다. 코딩 구성(Coding configurations)은 후속하여 설명되는 바와 같이 한 세트의 프로그램가능한 파라미터에 의해 정의되고, 이들 프로그램가능한 파라미터의 값들은 상이한 코드 효율을 내도록 조정될 수 있다. 파라미터 레지스터(410)의 값들은 더 높거나 더 낮은 코드 효율에 대한 모든 결정요인이므로, 코드 효율은 필요하다면 코드워드 대 코드워드 기반으로 조정될 수 있는 구성 속성이다.
RS 데이터 길이는, 길이가 사용자 데이터 길이 단위인 한 세트의 사용자 데이터 심볼들(대개는 바이트들)로부터 구성된 RS 심볼들의 개수이다. 도 4에서, 사용자 데이터 심볼들 각각은 8비트 폭인 것으로 간주될 수 있고, 각각의 RS 심볼은 10비트 폭인 것으로 간주될 수 있다. 따라서, 각각 10비트폭의 RS 데이터 길이 RS 심볼들로의 사용자 데이터 길이 8비트 심볼들의 변환은 사용자 데이터 길이를 8/10으로 곱한 것이다. 이 곱셈을 행한 후에 분수 RS 단위(즉, 10 비트 미만)가 남는다면, 분수 부분은, 마지막 심볼 길이를 10비트로 가져다 놓는데 필요한 비트수만큼을 추가함으로써 10비트로 라운드 아웃(round out)된다. 따라서, RS 데이터 길이는, 일부 실시예에서, 사용자 데이터 길이로부터 직접 유도될 수 있다. 다른 실시예들에서, RS 데이터 길이는 독립된 레지스터 값으로서 구현될 수도 있다. 어느 형태의 실시예라도 적절할 수 있다.
RS 인코더(20)는 사용자 데이터(404)로부터 생기는 RS 심볼들을 이용하고, 패리티 심볼이라 불리는 추가의 심볼 세트를 계산한다. 패리티 심볼들은, 사용자 데이터 변환으로부터 얻어진 RS 심볼들에 추가되는 길이 "RS 패리티 길이"인 추가의 정렬된 세트의 RS 심볼들이다. RS 패리티 길이의 값은 통상 파라미터 레지스터 섹션(410)으로부터 이용가능하다. 사용자 데이터 심볼 및 패리티 심볼의 결과적 조합은 RS 코드워드라 지칭된다. RS 코드워드의 길이는 파라미터 레지스터 섹션(410)에서 이용할 수 있는 시스템 파라미터이지만, 역시 파라미터 레지스터 섹션(410)에서 이용할 수 있는 값들 RS 데이터 길이와 RS 패리티 길이의 단순한 합으로서 이용가능할 수도 있다. 용어 "RS 코드워드"는, 리드 솔로몬 인코딩 및 디코딩의 맥락에서 사용될 때 특정 의미를 가진다; 이것은 또한, 관련 분야의 실무자에 의해 잘 이해될 것이므로, 간결성의 목적을 위해 리드 솔로몬 코딩의 이론에 관한 상세 사항은 반복되지 않을 것이다[예를 들어, Wicker, Stephen B., Error Control Systems for Digital Communication and Storage, 1995, Prentice-Hall pp. 238-239를 참조]. 코드워드 길이는 인코딩 동작을 완료하기 위해 인코더에 의해 사용된다. RS 패리티 길이는 RS 인코더에 의해 추가된 리던던시의 양에 비례하고, 목표된 심볼 정정 능력인 "T"라 불리는 파라미터로부터 결정된다는 점에 유의한다. 일반적으로, 주어진 심볼 정정 능력을 갖는 주어진 RS 코드워드에 대해, 시스템은 그 RS 코드워드 내의 소정 개수의 RS 심볼들까지를 정정할 수 있다. T 값을 증가시키면, 코드워드에서 추가의 RS 심볼들을 정정하는 능력으로 이어진다. RS 코드워드는 RS 인코더(402)로부터의 출력이다. RS 데이터 길이, RS 패리티 길이, 및 RS 코드워드 길이의 파라미터들은, 후속하여 RS 인코더 결과를 수신하는 컴포넌트들에 의해 이용된다.
도 4와 연계하여 도 2를 참조하면, 멀티플렉서(424)는 RS 인코더(402)로부터 나오는 RS 심볼들을 2개의 경로 중 하나: MSB 경로(426) 또는 LSB 경로(428)로 보낸다. RS 인코딩 프로세스를 완료하면, 인코더(20)는 TCM 및 콘볼루션 인코딩을 위해 데이터 스트림을 포맷하도록 구성된다. 상이한 인코딩 실시예들에 대해, TCM 요건에 관한 RS 심볼 입력 스트림의 배열은, 도 2의 데이터 구조(100)에서 볼 수 있는 바와 같이, 상이한 비율들에서 LSB 섹션과 MSB 섹션으로의 RS 심볼 할당으로 이어진다. 즉, LSB 경로에 할당되는 수에 비해 훨씬 많은 수의 RS 심볼들이 MSB 경로에 할당된다. 도 2의 실시예에서, RS 심볼들은 셀당 4비트인 경우 10비트 RS 심볼들에 대한 TCM 인코딩에 할당된다. 2개의 카운터들, MSB 카운터(430) 및 LSB 카운터(432)는, 각 인입하는 RS 심볼에 대해 MSB 경로(426)와 LSB 경로(428) 중에서 목적지를 결정한다. 일반적으로, MSB 카운터와 LSB 카운터의 상태는, 또 다른 RS 심볼이 요구되는지를 결정하며, 만일 요구된다면 심볼이 향할 목적지(MSB측 또는 LSB측)가 결정된다. MSB 및 LSB 카운터 양쪽 모두의 상태가 또 다른 RS 심볼이 요구된다고 표시하면, 먼저 LSB측에 대해 RS 심볼이 취해지고, MSB측에 대한 RS 심볼은 두 번째로 취해진다. 더욱 구체적으로는, 특정 RS 심볼이 MSB 인코딩의 일부가 되는지 또는 LSB 인코딩의 일부가 되는지는, (i) 예를 들어, RS 심볼폭을 포함하는 한 세트의 인코딩 파라미터, (ii) TCM 콘볼루션 인코딩의 양태, (iii) 펑쳐 다항식, 및 (iv) 후술될 비트 밀도로부터 유도될 수 있는 MSB/LSB 시퀀스 패턴에 의해 결정된다. 시퀀스 패턴에 기초하여, 각 RS 심볼값이 MSB 버퍼(440) 또는 LSB 버퍼(442) 중 어느 하나에 공급하기 위해 이용가능해질 때 MSB 및 LSB 카운터들이 이용된다.
MSB 카운터(430)는 MSB 버퍼(440) 내의 비트수를 추적한다. MSB 카운터는, RS 인코더(402)로부터 첫 번째 RS 심볼이 취해지기 전에 제로로 초기화된다. 본 실시예에서, MSB 카운터는, MSB 버퍼로 넣어지는 첫 번째 RS 심볼 및 각 추가 RS 심볼에 대해 10씩 증가된다. MSB 카운터는, MSB 경로(426)를 따라 버퍼 밖으로 이송되는 각각의 3비트 필드에 대해 3씩 감소된다. MSB 버퍼가 3보다 작은 카운트에 있을 때, 또는 다음 사용 사이클에서 카운터가 제로로 감소할 것이라는 것을 로직이 검출할 때, MSB 경로로의 할당을 위해 입력 스트림으로부터 다음 RS 심볼이 취해지고 카운터값은 10만큼 증가된다.
LSB 카운터(432)는 LSB 버퍼(442) 내의 비트수를 추적한다. LSB 카운터는 RS 인코더(402)로부터 첫 번째 RS 심볼이 취해지기 전에 제로로 초기화되고, LSB 버퍼 내에 넣어진 각 추가 RS 심볼에 대해 10씩 증가된다. LSB 카운터는, LSB 경로(428)를 따라 버퍼 밖으로 이송되는 각 비트에 대해 1씩 감소된다. LSB 카운터가 제로로 감소할 때, 또는 다음 사용 사이클에서 카운터가 제로로 감소할 것이라는 것을 로직이 검출할 때, LSB 경로로의 할당을 위해 입력 스트림으로부터 다음 RS 심볼이 취해지고 카운터값은 10만큼 증가된다. MSB 카운터(430) 및 LSB 카운터(432) 양쪽 모두가 또 다른 RS 심볼을 동시에 요구하는 상태에 들어가는 상황에서, 우선적으로 LSB 버퍼에 다음 RS 심볼이 넣어지고 후속 RS 심볼이 MSB 버퍼에 할당된다.
MSB 버퍼(440)는 멀티플렉서(424)로부터 이 섹션으로 향하는 RS 심볼들을 수신한다. 심볼들은 MSB 인코딩 경로(426)에서의 후속 사용을 위해 이 버퍼에 기입된다. 셀당 4비트 구성의 예시적 실시예에서, 도시된 바와 같이, MSB 버퍼(440) 내의 비트들은 한 번에 3비트씩 소비된다, 즉, 각 사용 사이클에서, 다음 TCM 심볼의 3 MSB로서 사용되는 3비트를 MSB 버퍼로부터 취하면서 LSB 버퍼로부터 하나의 LSB 비트를 취하는 추가의 프리-인코드 TCM 심볼이 생성된다. 그러나, 플레이스홀더가 삽입되려 하는 경우에, LSB 버퍼로부터는 비트가 취해지지 않는다. 다시 한번, 본 실시예는, 제어 파라미터들을 변경함으로써 다른 구성들이 동일한 인코더에 적용될 수 있기 때문에, 예시적인 것이다. 예로서, MSB 버퍼 소비가 TCM 심볼당 3비트 대신에 2비트 레이트인 TCM 심볼당 3비트 실시예가 프로그램될 수 있다.
MSB 버퍼로부터의 출력(446)은 매 TCM 심볼에 대해 3비트 값이다. 3 비트의 MSB 그룹들은 이 도면에 대해 예시적인 것이다. 일부 실시예들은 이 값 뿐만 아니라 다른 값들도 이용할 수 있다. 예를 들어, 셀당 3비트 비트 밀도 설정은, TCM 심볼당 한개의 LSB 비트와 2개의 MSB 비트가 존재하는 3비트 TCM 심볼을 가질 수 있다. MSB폭과 LSB폭이 상이한 다른 TCM 심볼 포맷도 인정된다. MSB 버퍼 출력(446)은, 이제 설명될 인코딩 로직에 들어가는 데이터 경로의 일부이다. MSB 비트들은 이제 설명될 MSB 맵핑 기능(450)에 대한 입력이다.
LSB 버퍼(442)는 멀티플렉서(424)로부터 RS 심볼들을 수신하고 이 RS 심볼들은 LSB 인코딩 경로(428)에서의 후속 사용을 위해 LSB 버퍼에 기입된다. 도시된 셀당 4비트 실시예에서, LSB 버퍼 내의 비트들은, 적용될 콘볼루션 인코딩의 결과로서 TCM 심볼당 1비트보다 작은 레이트로 소비된다. MSB 경로(426)와 LSB 경로(428)를 이용하여 TCM 심볼들이 생성되고 있을 때 콘볼루션 인코딩은 적용되지 않았기 때문에, 이 단계에서의 TCM 심볼들은 프리-인코드 심볼이라 불릴 수 있다. 일부 프리-인코드 TCM 심볼들의 생성은 LSB 버퍼로부터 비트의 추출을 요구하고, 프리-인코드 TCM 심볼들 중 일부는, 이 시점에서 사용자 데이터에 기초하는 비트가 아닌 플레이스홀더 비트가 삽입되고 있기 때문에 어떠한 추가의 LSB 버퍼 비트를 요구하지 않는다. 독자는, 이들 플레이스홀더 비트들은 도 2의 LSB RS 심볼들에서 심볼 X로 표현될 수 있고, 이들 플레이스홀더 비트들은 나중에, 데이터 구조(100)의 일부로서 콘볼루션 인코딩에 의해 생성되는 여분 코드 비트들로 대체된다는 것을 상기할 것이다. 이하에서 상세히 설명되는 바와 같이, 펑쳐 다항식 패턴은, TCM 심볼 시퀀스에서 LSB 버퍼 비트 또는 플레이스홀더 비트 사이의 선택을 제어한다.
앞서 논의된 바와 같이, LSB 심볼 비트는 사이클 당 하나 또는 제로 비트씩 LSB 버퍼로부터 취해지고 LSB 경로(428)에 어써팅된다(asserted). 본 개시의 목적을 위해, 용어 "블록"은 414에 저장된 값 'TCM 심볼들의 개수'에 대응한다. 제로들의 제약 길이는 블록의 최종 LSB들이라는 블록의 끝 보장으로서, 한계값 비교기(454) 및 한계값 로직(456)은 블록의 최종 K개 비트 동안에 이들 비트값들을 제로로 강제하며(force), 여기서 K는, 도 2에 관하여 전술된 바와 같이, 적용될 콘볼루션 코드의 제약 길이이다. 특히, TCM 심볼들, TCM(N'), TCM(N'-2), TCM(N'-3), TCM(N'-4) 및 TCM(N'-6)에 대한 LSB 비트들은 도 2에서 제로로 강제된다.
MSB 맵핑 기능(450)은 MSB 경로(426) 상에서 MSB들을 수신하여, MSB 비트 패턴을 수신된 대로의 인코딩되지 않은 표현으로부터, 되판독시(on read-back) 에러가 발생할 경우에 발생할 수도 있는 비트 실패의 개수를 줄이려는 의도의 표현으로 변환할 수 있다. 한 실시예에서, 맵핑은 그레이 코드(Gray code) 표현으로부터 2진 표현으로의 변환이다. 인입 데이터를 그레이 코드로서 취급하는 것은 선택사항이라는 점에 유의한다. 또한, 임의의 적절한 가역성 맵핑 기능이 이용될 수 있으며, 그레이 코딩의 이용은 비제한적 예로서 설명되는 것이라는 점을 이해하여야 한다. 맵핑 기능(450)은 그룹들로 된(본 실시예에서는 3의 그룹들) MSB들을 수신하여 각 그룹에 대해 동일한 비트수로 구성된 출력(462)을 생성한다. 출력(462)은 앞서 설명된 콘볼루션 인코더(300)에 의해 생성된 대응하는 LSB와 결합되어, 디지털-대-아날로그 변환기(DAC)(472)에 포워딩된다. LSB는 사용자 데이터에 응답하는 비트, 또는 전술된 도 2의 RS LSB에 도시된 X 위치의 코드 비트일 수 있다.
도 4와 연계하여 도 3을 참조하면, 콘볼루션 인코더(300)는 한계값 로직(456)을 거쳐 LSB 버퍼(442)로부터 현재의 LSB 비트를 수신할 수 있다. 콘볼루션 인코더는 LSB들이 수신될 때, 한 번에 한 비트씩 LSB들에 작용한다. 인코딩은 콘볼루션 인코더(300)에 대한 입력인 다양한 파라미터들에 예속되어 있다. 이들 파라미터들은, 제약 길이 그 자체가 파라미터일 수 있는 콘볼루션 다항식과 펑쳐 다항식을 포함한다. 현재의 실시예처럼 싱글 LSB의 시스템에는, 통상 2개의 콘볼루션 다항식(도 2의 Ca(0)-Ca(K-1) 및 Cb(0)-Cb(K-1) 참조)과 (예를 들어, 도 2에서 Pa(x) 및 Pb(x)로서 저장된) 2개의 펑쳐 다항식이 존재한다. 이들 다항식들 각각의 값은 주어진 실시예에 따라 다를 수 있다. 하나보다 많은 LSB를 포함하는 시스템에서는, 파라미터로서 필요한만큼의 추가적인 콘볼루션 및 펑쳐 다항식이 존재한다. 일부 실시예에서, 이들 파라미터들은, 마이크로프로세서에 의해 실행되는 펌웨어(480)에 의해 지시받는 시스템 마이크로프로세서(412)에 의해 콘볼루션 인코더와 연관된 레지스터들 내에 프로그램될 수 있다.
도 4를 참조하면, 레벨-대-DAC 변환기(472)의 입력(482)은, 각 TCM 심볼에 대해 MSB 그룹 및 연관된 LSB를 수신한다. 인코딩된 LSB 및 MSB 스트림들은, 각각 콘볼루션 인코더(300) 및 MSB 맵퍼(450)로부터 이용가능하다. 이들 2개의 결과적 데이터 스트림들은 병합되고, 그 결과 변환기(472)의 입력(482)에서 TCM 심볼의 스트림이 완성된다. 이 도면에서의 데이터 경로폭은, MSB에 대한 3비트와 LSB에 대한 1비트가 도시되어 있다는 사실에 관하여 예시적인 것이다; MSB 및 LSB 양쪽 모두에 대해 다른 구성도 가능하다. 각 TCM 심볼에서 3개보다 많거나 작은 MSB들이 포함될 수 있으며, TCM 심볼당 1개보다 많은 LSB 비트가 포함될 수도 있다. 레벨 대 DAC의 출력(484)은 도 1의 NV 메모리(14)로 향한다. 레벨 대 DAC(472)는, 각 NV 메모리 셀 내에 기입될 데이터 비트들의 아날로그 값에 관한 요건과 관련된 파라미터들에 따라 각 TCM 심볼에 최종 조정을 수행할 수 있다. 예를 들어, 조정은 TCM 심볼에 대한 오프셋 값의 적용을 포함할 수 있으며, 및/또는 이 조정은 셀 타겟 범위에 관해 TCM 심볼 값을 압축 또는 확장하는 스케일링 변환일 수도 있다. 레벨 대 DAC(472)는, 시스템 펌웨어(480)와 협력하여 마이크로프로세서(412)에 의해 프로그램되는 파라미터 레지스터(410) 내의 파라미터들에 의해 제어될 수 있다.
이제 RS 카운터(420)에 관한 추가의 상세사항에 주목한다. 이 카운터는, RS 인코더(402)로부터 제공되는 RS 심볼(414)의 런타임 개수로 초기화될 수 있다. RS 심볼들의 런타임 개수로서 저장되는 값은 전체 코드워드 또는 그 이상에 이를 수 있으며, 코드워드는 RS 코드워드이거나 어떤 정수의 RS 코드워드들이다. 인터리빙이 이용되면, 그 개수는 파라미터 레지스터 섹션(410)에 저장된 인터리빙 인자에 의해 암시되는 정수개의 코드워드일 수 있다. RS 심볼 카운터(420)는 멀티플렉서(424)에 의해 수신된 각 RS 심볼에 대해 1씩 감소된다. RS 블록의 끝 ―여기서 용어 "RS 블록"은 본 논의의 목적상 RS 심볼들의 런타임 개수의 값에 대응함―은, RS 카운터가 0으로 감소되어 현재의 전송의 끝을 시그널링할 때 표시된다. 특히, LSB 한계값(490)은 상수이며, RS 카운터(420)의 값과 비교된다. RS 카운터는 초기에 LSB 한계값(490)보다 큰 값으로서 시작한다. RS 카운터는 전송되는 각 RS 심볼과 함께 감소되기 때문에, RS 카운터에 의해 저장된 값은 결국, RS/LSB 한계값 비교기(454)에 의해 결정되는, LSB 한계값 카운트와 같아지는 포인트까지 감소한다. RS 카운트가 LSB 한계값보다 작아지는 포인트에서 제로들이 삽입/채워진다. 전술된 바와 같이, 제로들은, 메모리 내의 데이터 구조의 끝을 가리키기 위한 목적으로 데이터 구조(100)(도 2)의 일부를 형성하는 프리-인코드 TCM 심볼 스트림의 LSB들로서 채워진다.
전술된 바와 같이, 런타임 RS 길이 입력(414)은 파라미터 레지스터(410)로부터 제공될 수 있다. 런타임 RS 길이 입력의 값은, 사용자 데이터 입력 시퀀스를 순회하기 이전에 RS 심볼 카운터(420)를 초기화하는데 이용될 수 있다. 이 값은, 사용자 데이터 스트림을 RS 인코딩함으로써 RS 인코더(402)가 생성할 RS 심볼들의 개수를 의미한다.
펑쳐 패턴 카운터(486)는, 사용자 데이터 스트림이 인코더(20)에 들어가기 이전에 런타임 펑쳐 패턴 입력(488)으로부터의 값으로 초기화되며, 도 3의 펑쳐 패턴 카운터 섹션(338)을 구현한다. 패턴 입력(488)은 파라미터 레지스터 섹션(410)으로부터 얻어진 제1 및 제2 펑쳐 다항식을 저장할 수 있다. 펑쳐 패턴 카운터(486)는 프리-인코드 TCM 심볼을 형성하는 LSB 스트림의 생성시에 플레이스홀더 비트 생성(도 2의 RS LSB 심볼들의 X 위치)을 제어한다. 펑쳐 패턴은, 도 2에서는, 콘볼루션 인코더(300)의 제약 길이와 동일한 길이를 갖는 비트 패턴이지만, 다른 실시예들은 제약 길이보다 크거나 작은 펑쳐 비트 패턴 길이를 이용할 수도 있다. 펑쳐 패턴 카운터(486)는 사용자 데이터 심볼의 스트림을 처리하기 이전에 펑쳐 패턴 값들로 미리 설정된다. 도 3의 펑쳐 패턴 카운터 섹션(338)에 관하여 전술한 바와 같이, 펑쳐 패턴 카운터(486)는 생성되는 각 TCM 심볼에 대해 1 비트 위치씩 펑쳐 패턴의 값을 로테이트(rotate)하여, 동일한 펑쳐 패턴 카운터 비트 위치(즉, 도 3에서 Pa(x) 및 Pb(x)에 대한 최좌측 비트들)가 항상 현재의 인코딩에 적용되게 한다. 콘볼루션 인코더는, 펑쳐링의 부재시에, 각 입력 비트에 대해 2개의 출력 비트를 생성하기 때문에, 펑쳐 패턴의 추가는 이 비율을 2:1보다 작은 값으로 감소시킨다. 펑쳐 패턴 카운터는, 각 프리-인코드 TCM 심볼의 LSB가 확장 비트(플레이스홀더 X)인지 또는 입력 LSB 스트림으로부터의 비트인지를 제어한다. 펑쳐 패턴 카운터는, 펑쳐 패턴 카운터와 LSB 버퍼가 LSB 버퍼의 출력에서 LSB 경로에 플레이스홀더를 생성할 목적으로 협력하도록, 콘볼루션 인코더(300) 뿐만 아니라 LSB 버퍼(486)에도 출력을 제공한다.
RS/LSB 한계값 비교기(454)는 TCM 인코딩의 RS 블록의 끝에서 역할하게 되는데, 여기서, 도 2의 예를 통해 알 수 있고 전술된 바와 같이, 프리-인코드된 TCM 심볼 스트림의 최종 K-1개 LSB 비트들을 제로에 어써팅하는 것이 필요하다(K는 콘볼루션 인코더의 제약 길이임). LSB 한계값 카운트는 LSB 한계값(490)으로서 얻어지고, 시간 증가 기초에 의한 시간 증가시에 RS 심볼 카운터(420)의 카운트와 비교되어 프리-인코드 LSB 스트림을 제로로 강제할 때에 대한 표시를 제공한다. 이것은 콘볼루션 인코더(300)가 알려진 마무리(closing) 시퀀스를 인코딩된 TCM 심볼 시퀀스로 인코딩하는 것을 허용하여, 그 결과, 디코딩시에, RS 블록의 끝 폐쇄 비트 디코딩 에러가 회피된다. LSB 한계값(490)은, 예를 들어, 파라미터 레지스터 섹션(410)의 콘볼루션 제약 길이로부터 생성될 수 있으며, RS/LSB 한계값 비교기(454)를 이용하여 사용자 데이터의 스트림을 처리하기 이전에 초기값으로서 적용될 수 있다.
TCM 카운터(492)는 사용자 데이터 심볼 스트림을 인코딩하기 이전에 초기화된다. 이 값은, 파라미터 레지스터 섹션(410)에 의해 반영된 구성 파라미터 세트에 따라 전체 사용자 데이터 스트림의 인코딩으로부터 발생하는 TCM 심볼들의 개수에 대응한다. TCM 심볼 카운트 그 자체는 구성 파라미터들 중 하나이다. TCM 카운터는 TCM 블록 카운트 입력(494)으로부터 초기화될 수 있다. TCM 카운터 값은 TCM 인코딩의 시퀀싱을 제어하며, TCM 심볼들의 각 시퀀스의 종료에 대한 TCM 블록의 끝 기준을 제공한다. 파라미터 값으로서, TCM 심볼 카운트는 다른 구성 파라미터들로부터 계산될 수 있으며, 구성 파라미터 세트에 따라 특정 길이의 사용자 데이터 스트림으로부터 생성된 TCM 심볼들의 정확한 개수를 나타낸다. TCM 카운터는, 예를 들어, 시퀀스의 끝 기준을 CPU(412)에 제공한다. TCM 카운터는 특정 전송에서 전달될 심볼들의 정확한 개수의 측정치를 제공한다. 이 카운터는 그 숫자로 초기화되고 제로까지 카운트 다운되거나, 이 카운터는 초기에 클리어되고 예상 값까지 카운트 업할 수도 있다. 어떤 방식이든, TCM 카운터는 시퀀스의 끝 신호를 시스템에 제공한다.
TCM 블록 카운트 입력(494)은 파라미터 레지스터 섹션(410)에 제공된 TCM 코드워드 길이의 값으로부터 구동되어, 사용자 데이터 심볼 스트림을 인코딩하기 이전에 TCM 카운터(492)가 초기화되는 TCM 블록 카운트 값을 공급한다.
한계값 로직(456)은, 전술된 바와 같이, RS/LSB 한계값 비교기(454)에 의해 제어되며, LSB 버퍼로부터의 프리-인코드 LSB들이 수정되지 않고 콘볼루션 인코더에 전달되는 것을 허용하거나, 전체 RS 심볼 전송을 종료하기 위해 시퀀스의 끝 표시를 제공할 목적으로 상기에서 설명된 제로 채워넣기 프로시져(zero stuffing procedure)에서 콘볼루션 인코더 입력 LSB들을 제로로 선택적으로 강제한다. 여기서의 목적을 위해, 리드 솔로몬 인코더(402)의 출력에 후속하는, MSB 버퍼(440) 및 한계값 로직(456)과 그 연관된 컴포넌트들을 포함하여 이들까지에 이르는 컴포넌트들은, 팩킹 구조(496)라 불릴 수 있다는 점에 유의한다. 맵퍼(450), 콘볼루션 인코더(300), 및 연관된 컴포넌트들을 포함하는 컴포넌트들은 맵핑 구조(498)라 불릴 수 있다. 팩킹 구조는, 재블록화된 출력 데이터 스트림의 전부는 아닌 적어도 하나의 부분이 콘볼루션 코드에 기초한 코드 효율에 예속되도록 구성되게끔 재블록화된 출력 데이터 스트림을 생성한다고 말할 수 있다. 또한, 팩킹 구조는, 팩킹 구조에 제공된 하나 이상의 입력 파라미터의 하나 이상의 값의 변경에 기초하여 입력 스트림 내의 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 콘볼루션 코드의 코드 효율의 변경을 지원하도록 재블록화된 출력 데이터 스트림을 수정하도록 구성된다.
도 1 및 도 4를 참조하면, 마이크로프로세서/CPU(412)는, 예를 들어, 호스트(12)(도 1)로부터의 지시하에 프로세서가 인코더(20), 디코더(22)(도 1), 및 NV 메모리(14)(도 1)를 작동시키는데 전용되는 임베디드 제어의 형태와 같은, 임의의 적절한 형태로 제공될 수 있으며, 펌웨어(480)에 대한 실행 플랫폼으로서 역할한다. 펌웨어(480)는 임베디드 제어기를 이용하는 한 실시예의 소프트웨어 컴포넌트이다. 펌웨어는 호스트(12)(도 1)로부터의 지시하에 인코더(20)(도 1), 디코더(22)(도 1), 및 NV 메모리(도 1)의 제어를 구현한다.
도 4를 참조하면, 파라미터 레지스터 섹션(410)은 펌웨어(480)의 제어하에 마이크로프로세서(412)에 의해 액세스가능한 한 그룹의 레지스터를 구성할 수 있다. 이들 레지스터에 저장된 값들은, 인코딩 구성을 정의하고 CPU(20) 및 펌웨어(480)를 통해, 또는 인코더의 일부 컴포넌트들에 직접 액세스할 수 있는 레지스터들을 통해 인코더의 작용을 제어하는 역할을 한다. 레지스터 파라미터들의 일부가 상기 논의의 맥락에서 설명되었다는 점에 유의한다. 그러나, 역시 추가의 명확성을 제공하기 위한 목적으로, 바로 아래에서 파라미터 레지스터 섹션(410)을 추가적으로 상세히 설명할 것이다.
도 4의 파라미터 레지스터 섹션(410)에 도시된 파라미터 값들이 다음과 같이 추가로 설명된다:
사용자 데이터 길이: 사용자 데이터 블록의 (바이트 단위) 길이 또는 사용자 데이터의 단위 길이. 비제한적 예로서, 적절한 사용자 데이터 길이는 512 바이트, 1024 바이트, 또는 인코더/디코더의 특정 실시예에 의해 지원되는 기타 임의의 적절한 길이를 포함한다.
RS 정정 능력: "T"라고도 불리며, RS 에러 정정 코드가 싱글 코드워드에서 정정할 수 있는 RS 심볼의 최대 개수를 정의한다. 이 값을 2로 곱한 것은, 각 RS 코드워드 내의 패리티 심볼들의 개수를 정의한다.
RS 데이터 길이: 바이트로부터 RS 심볼로 변환된 후의 사용자 데이터 블록의 길이. 이와 같이, 사용자 데이터 길이와 RS 데이터 길이 사이에는 직접적인 관계가 있다. 그러나, 사용자 데이터 스트림이 정수개의 RS 심볼들로 맵핑되지 않으면 변환된 RS 심볼 스트림에는 비트들이 추가되어야 하기 때문에, RS 데이터 길이는 통상 파라미터 레지스터 섹션에 독립된 값으로서 유지된다.
RS 패리티 길이: 싱글 RS 코드워드를 구성하기 위해 RS 데이터 길이에 첨부되는 RS 패리티 심볼들의 개수. RS 패리티 길이의 값은 RS 정정 능력(T)의 값에 의해 직접 암시된다. 실시예들은 독립된 레지스터에 이 값을 유지하거나, 그 값은 RS 정정 능력(T)으로부터 유도될 수 있다.
RS 인터리빙 인자: RS 코딩 응용에서 일반적인 관습은 인터리빙에 의해 RS 블록당 하나보다 많은 RS 코드워드를 인코딩 및 디코딩하는 것이다. 이러한 인터리빙은, 예를 들어, 상기 인용된 '546 출원의 도 12 및 도 13에 도시되어 있다. 만일 인터리빙이 이런 구성으로 존재한다면, 이 파라미터의 값은 단순한 정수이다. 인터리빙은 특정 실시예에 의해 제약될 수 있기 때문에, 인터리브의 수에 관해서는 비교적 작은 제약이 존재할 수 있다. 특정 실시예에 대해 인터리빙이 정의된다면, RS 데이터 길이, RS 패리티 길이, 및 RS 코드워드 길이의 값들은 결합된 인터리브의 각각의 길이들에 적용될 수 있거나, 이들 값들은 싱글 인터리브의 각 길이를 반영할 수도 있다. 인터리브의 취급에 관한 이러한 변형은 실시예에 의존적이다.
콘볼루션 제약 길이: 콘볼루션 인코더가 (도 3의 실시예 300에서와 같이) 프로그램가능하다면, 콘볼루션 제약 길이(K)의 값은 프로그램가능하며 파라미터 레지스터 섹션에 저장될 수 있다. 반면, 고정된 제약 길이를 위해 콘볼루션 인코더가 구성된다면, K의 값을 등록할 필요는 없을 수 있다.
제1 콘볼루션 다항식: 콘볼루션 인코더에 의해 사용되는 2개의 콘볼루션 다항식들 중 제1 다항식. 콘볼루션 다항식이 콘볼루션 인코더에 의해 어떻게 사용되는지에 대한 예시와 설명을 위해 도 3을 참조.
제2 콘볼루션 다항식: 콘볼루션 인코더에 의해 사용되는 2개의 콘볼루션 다항식들 중 제2 다항식. 콘볼루션 다항식이 콘볼루션 인코더에 의해 어떻게 사용되는지에 대한 예시와 설명을 위해 도 3을 참조.
제1 펑쳐 다항식: 콘볼루션 인코더에 의해 사용되는 2개의 펑쳐 다항식들 중 제1 다항식. 펑쳐 다항식이 콘볼루션 인코더에 의해 어떻게 사용되는지에 대한 예시와 관련된 설명을 위해 도 3을 참조.
제2 펑쳐 다항식: 콘볼루션 인코더에 의해 사용되는 2개의 펑쳐 다항식들 중 제2 다항식. 펑쳐 다항식이 콘볼루션 인코더에 의해 어떻게 사용되는지에 대한 예시와 관련된 설명을 위해 도 3을 참조.
비트 밀도 설정: 현재 동작하는 구성에서의 비트 밀도 설정을 나타낸다. 일반적으로, 이 값은 메모리 셀당 저장된 데이터 비트수를 나타내는 단순한 정수이다. 그러나, 분수값의 셀당 비트 설정(예를 들어, 3.8)을 이용하는 경우, 이 값은 단순한 정수 이외의 값일 수 있다. 이러한 경우, 비트 밀도 설정은 로직에 의해 해석되는 인코딩된 값에 기초하여 제공된다. 예를 들어, 셀당 3.5 비트라는 평균 비트 밀도 설정은, 메모리 셀들의 절반은 셀당 3비트로 프로그램하고, 메모리 셀들의 나머지 절반은 셀당 4비트로 프로그램함으로써 달성될 수 있다. 도 2에 도시된 바와 같은 TCM 인코딩의 이용은 통상 비트 밀도 설정에 대해 셀당 적어도 3비트를 이용한다. 분수 비트 코딩이 이하의 적절한 시점에서 더욱 상세히 설명될 것이다.
TCM에서의 MSB폭: 각 TCM 심볼에서 MSB 비트들의 개수. 비트 밀도 설정의 값은, 각 저장 셀에 제공된 TCM 값이 비트 밀도 설정으로부터 올림처리된(round up) 차순위의 가장 높은 정수값인 분수 비트 밀도 설정을 제외하고는, 전체 TCM 심볼의 폭을 제공한다. 그 다음, MSB 비트들의 개수는 심볼의 MSB 부분에 할당된 TCM 심볼의 비율이다. TCM의 MSB 폭은 TCM 심볼 폭과 LSB의 개수 사이의 차이이다. 예를 들어, TCM 심볼당 4비트에서, 심볼의 LSB 부분에 대해 싱글 비트인 경우, TCM 폭의 일부로서의 MSB 폭은 4 - 1 = 3이다.
TCM에서의 LSB폭: 각 TCM 심볼에서 LSB 비트들의 개수. 비트 밀도 설정의 값은, 각 저장 셀에 제공된 TCM 값이 비트 밀도 설정으로부터 올림처리된(round up) 차순위의 가장 높은 정수값인 분수 비트 밀도 설정을 제외하고는, TCM 심볼 자체의 폭을 제공한다. 그 다음, LSB 비트들의 개수는 심볼의 LSB 부분에 할당된 TCM 심볼의 비율이다. TCM의 LSB 폭은 TCM 심볼 폭과 MSB의 개수 사이의 차이이다. 예를 들어, TCM 심볼당 4비트에서, 심볼의 LSB 부분에 대해 3비트인 경우, TCM 값의 LSB 폭은 4 - 3 = 1이다.
TCM 코드워드 길이: 전술된 파라미터들의 특정 조합에 의해 정의된 구성에 따라 바이트들의 인코딩된 사용자 데이터 길이를 구성하는 TCM 심볼들의 총 개수. TCM 코드워드 길이의 값은 RS와 콘볼루션 코드 파라미터들의 함수이기 때문에, 이것은 파라미터 레지스터 섹션의 일부로서 독립된 레지스터에 저장될 수 있다.
코드 효율은 파라미터 레지스터 섹션(410)에 의해 주어진 파라미터들의 결합된 값들에 의해 설정된다는 점을 이해하여야 한다. 따라서, 파라미터 레지스터 섹션에서 하나 이상의 파라미터 값들을 수정함으로써, 파라미터 값의 변경에 응답하여 코드 효율이 변할 것이다. 출원인은 코드워드-대-코드워드 기반으로 신속하게 코드 효율을 수정하는 융통성을 제공하는 비휘발성 메모리에서 사용하기 위한 임의의 시스템을 알지 못한다. 이러한 융통성은, 예를 들어, 데이터 처리량, 메모리 저장 능력, 및 시간 경과에 따른 메모리 열화의 수용에 관한 시스템의 동작을 향상시킨다. 일반적으로 말하면, 더 높은 비트 밀도는 리던던시를 추가함으로써 달성될 수 있다. 후자는 더 높은 RS 용량 설정과 더 낮은 펑쳐링에서 더 높아지는 경향이 있다. 더 높은 밀도는 일반적으로 더 높은 리던던시와 상관된다. 메모리 열화의 수용은 일반적으로, 열화에 의해 영향받는 메모리가 나타내는 더 높은 에러 경향을 더 강력한 인코딩 및 디코딩 설정이 상쇄할 수 있도록 하는 더 높은 리던던시 및 밀도에 관한 더 낮은 엠퍼시스(emphasis)에 의해 달성될 수 있다.
이하의 표 1은 TCM 코드워드 길이를 설정하는 파라미터 값들을 이용한 시뮬레이션 예를 제공한다. 파라미터들은, 비트 밀도, 사용자 바이트의 개수, RS 인터리브의 개수, T(RS 정정 능력), RS 데이터 심볼의 개수, RS 패리티 심볼의 개수, 콘볼루션 다항식, 및 펑쳐 다항식, MSB들의 개수와 TCM 코드워드 길이를 포함한다. 제약 길이는 콘볼루션 다항식의 계수들의 개수와 동일하다는 점에 유의한다. 이들 예에서, 콘볼루션 다항식에는 6개의 계수(비트)가 있어서, 콘볼루션 인코더/디코더의 제약 길이는 6이다.
이들 시뮬레이션 예들은, 표 1에 명시된 파라미터들을 갖는 인코더 및 디코더 구성의 모델을 이용하여 실행되었다. 여기서 제공된 상세정보에 비추어, 당업자라면 임의의 영향을 미치는 파라미터에 대한 그 의존성의 관점에서 TCM 코드워드 길이를 용이하게 결정할 수 있다고 생각된다.
도 5는, 도 4의 인코더(20) 상에서 동작할 수 있는 참조 번호(500)로 개괄적으로 표시되고 다른 실시예들에도 동등하게 적용될 수 있는 방법의 일 실시예를 도시한다. 예를 들어, 방법(500)은 셀당 4비트 이외의 비트 밀도를 이용하는 실시예들에 적용가능하다.
방법(500)은 단계(502)에서 시작하여 셋업(504)으로 진행한다. 단계(504)에서, 다양한 파라미터들이 도 4의 파라미터 레지스터 섹션(410) 뿐만 아니라 기타 임의의 원하는 레지스터 위치들에 로딩될 수 있다. 예를 들어, 사용자 데이터 길이, RS 정정 능력과 같은 일부 파라미터들은 사용자 명시될 수 있는 반면, 예를 들어 RS 패리티 길이와 같은 다른 파라미터들은 사용자 명시된 파라미터에 기초하여 결정될 수 있다는 것을 이해하여야 한다. 방법(500)에 의해 처리되는 데이터 흐름은 통상 8비트 바이트의 사용자 데이터 단위를 갖는 사용자 데이터로 시작한다. 방법(500)의 결과는, 보다시피, TCM-인코딩된 값들의 형태로서, 이들 값들 각각은 저장 매체의 하나의 셀에 대한 목표값을 나타낸다. 출력값들은 셀당 3비트 이상에 기초한 인코더의 구성의 함수이다.
팩킹 단계(506)에서, 길이가 '사용자 데이터 길이'인 사용자 데이터(도 4의 파라미터 레지스터 섹션(410)을 참조)는 RS 심볼들로 구성된 'RS 데이터 길이'(도 4의 파라미터 레지스터 섹션(410)을 참조)로 변환된다. '사용자 데이터 길이' 사용자 데이터 심볼이 정수개의 'RS 데이터 길이' RS 심볼들로 맵핑되지 않으면, 알려진 값(즉, 모두 제로 또는 모두 1)의 비트들이 마지막 RS 심볼의 언맵핑된(unmapped) 부분에 삽입된다. 따라서, RS 심볼들의 스트림이 생성된다.
단계(508)는 RS 패리티 값을 초기에 결정함으로써 RS 심볼들의 스트림의 처리를 개시한다. 단계(506)로부터 얻어진 길이 'RS 데이터 길이'의 RS 심볼들은 'RS 패리티 길이'를(도 4의 파라미터 레지스터 섹션(410)을 참조) 계산함으로써 인코딩된다. RS 패리티 계산은 당업자에 의해 잘 이해되고 있다. 구성이 RS 인터리빙 인자(도 4의 파라미터 레지스터 섹션(410)을 참조)를 통해 하나보다 많은 인터리브를 명시하고 있다면, 그 구성에서 주어진 인터리브들의 개수에 대해 RS 패리티 심볼들이 계산된다. 단계(508)로부터 생기는 출력은, 길이 'RS 데이터 길이' + 'RS 패리티 길이'를 갖는 한 세트의 RS 심볼들이다.
단계(510)는 단계(508)로부터 생긴 RS 심볼들을 MSB 서브셋과 LSB 서브셋으로 분리한다. 그 다음 LSB 서브셋이 후속해서 단계(511a)에 의해 처리되는 반면 MSB 서브셋은 후속해서 단계(511b)에 의해 처리된다. 셀당 4비트의 비트 밀도의 예시적 경우에서, MSB 및 LSB 심볼들은 도 2와 일치하는 방식으로 서로 비례하여 생성된다.
단계(511a)는, 단계(512)에서 콘볼루션 인코딩에 의해 LSB 비트 스트림에 대해 만들어질 추가분을 제공하는 플레이스홀더 위치를 계산함으로써 LSB 심볼들을 확장시킨다. 플레이스홀더 위치는 도 3에 관하여 설명된 바와 같이 결정될 수 있다. 플레이스홀더 생성 동작은 LSB RS 심볼들로부터 취해진 LSB 데이터에 추가하여 엠프티 비트 위치들(empty bit positions)을 생성한다.
단계(511b)는 LSB RS 심볼들을 한 세트의 3비트 MSB 필드로 팩킹하고, 각 MSB 필드는 하나의 TCM 심볼에 대응한다. 이 시점에서, 3비트 필드는 아직 인코딩되지 않았다. 단계(511c)에 의한 팩킹의 결과, 생성되는 3비트 필드들의 총 개수는 플레이스홀더들이 추가된 LSB 비트들의 총 개수와 같다.
단계(508)로부터 생기는 RS 심볼들은, 도 2의 LSB들에서 볼 수 있는 X 플레이스홀더들을 삽입하는 프리-인코드 TCM 포맷으로 단계(510)에 의해 팩킹된다. 이 단계는, RS 심볼 세트를, 'TCM 코드워드 길이'(도 4의 파라미터 레지스터 섹션(410)을 참조) 개수의 프리-인코드된 TCM 심볼들로 변환한다. 이 정황에서 '프리-인코드'란, TCM 심볼들의 포맷을 말하며, 각 TCM 심볼은, 도 4의 MSB 맵핑 섹션(450)과 콘볼루션 인코딩 섹션(300)에 의해 아직 포맷팅되지 않은 MSB 부분과 LSB 부분을 가진다. 이와 같이, LSB들은, X 플레이스홀더들과 섞인 일련의 언-콘볼루션-인코딩된 데이터 비트들의 형태이다.
단계들(512 및 514)은 단계(510)에 응답하여 협력적으로 동작한다. 단계(512)에서, 'TCM 코드워드 길이'의 콘볼루션 인코딩된 LSB들을 생성하기 위하여 'TCM 코드워드 길이'(도 4의 파라미터 레지스터 섹션(410)을 참조)의 LSB들에 콘볼루션 인코딩이 수행된다(도 3 및 도 4의 항목 300을 참조). 즉, 도 2의 LSB들의 X 표시자들은 코드 비트들로 대체된다. '비트 밀도 설정', 'TCM에서 MSB 폭', 및 'TCM에서 LSB 폭'(도 4의 파라미터 레지스터 섹션(410)을 참조)을 통한 구성이 TCM 심볼당 하나보다 많은 LSB를 명시한다면, 타이밍 증가당 하나보다 많은 LSB를 인코딩하는 적절한 인코더 구조가 명시될 수 있다. 예를 들어, 도 2의 비트 b0 및 b1 양쪽 모두 콘볼루션 인코딩에 예속될 수 있다. 단계(512)는, 스트림 내의 LSB 심볼들의 개수로서 개수 'TCM 코드워드 길이'(도 4의 파라미터 레지스터 섹션(410)을 참조)를 갖는 LSB 심볼들의 스트림을 생성한다. LSB 심볼들은 폭이 'TCM에서의 LSB 폭'(도 4의 파라미터 레지스터 섹션(410)을 참조)이다. 하나의 LSB의 경우(즉, b0가 도 2에 도시된 바와 같이 유일한 LSB임), LSB 심볼들 각각은 1 비트로 구성된다는 점을 이해하여야 한다.
단계(514)에서, MSB 맵핑은, 각 MSB의 값을 TCM 인코딩을 목표로 하는 변환된 값으로 변환함으로써 수행된다. 도 2에 따라, 전술된 바와 같이, 3비트 MSB들은 예시적인 것이고, 본 개시의 범위 내에서 기타 임의의 적절한 그룹화가 이용될 수도 있다. 현재 다루고 있는 본 전체 개시에 의해 당업자라면 이해하는 바와 같이, 맵핑은, 본 예에서, 하나의 3비트 값으로부터, TCM 인코딩에 대한 기준을 따르는 또 다른 3비트 값으로 하는 것이다. 여기서, 인입 3비트 값은, 선택사항적 단계로서, 그레이 코드값으로서 취급되어, 2진값으로 맵핑된다(도 4의 맵퍼(450)를 참조). 본 개시의 범위 내에 드는 실시예들에서, 맵핑 기능은 로직 게이트들을 통해 또는 룩업 테이블을 이용하여 구현될 수 있다. 이 맵핑 기능을 위해 다른 변형들도 구현될 수 있다. 단계(514)는 길이가 'TCM 코드워드 길이'(도 4의 파라미터 레지스터 섹션(410)을 참조)인 MSB 심볼들의 스트림을 생성한다. 각 MSB 심볼들은 그 폭이, 'TCM에서의 MSB 폭'(도 4의 파라미터 레지스터 섹션(410)을 참조)에 대응하는 폭이다.
단계(516)에서, 단계(512)로부터 콘볼루션 인코딩된 LSB들과, 단계(514)로부터의 맵핑된 MSB들은 병합되어, 값 'TCM 코드워드 길이'(도 4의 파라미터 레지스터 섹션(410)을 참조)에 대응하는 길이를 갖는 인코딩된 TCM 심볼들의 단일 스트림으로 된다. 인코딩된 TCM 심볼들은 그 폭이, 값 '비트 밀도 설정'(도 4의 파라미터 레지스터 섹션(410)을 참조)에 대응하는 폭이다. 이 단계로부터의 출력 심볼들은, 메모리 내의 개개의 셀 위치에 적용되는 목표 레벨들이다. 도 4를 참조하여 전술된 바와 같이, 인코딩된 심볼들에 추가적인 레벨의 스케일링이 적용될 수 있다. 그러나, 이 스케일링은 선택사항이며, 적용될 수 있거나 적용되지 않을 수도 있다.
단계(518)는 목표 레벨을 메모리 셀들의 개개의 메모리 셀에 기입되는 아날로그 값으로 변환하고, 이 방법은 후속하는 데이터 동작에 예속되는 재시작을 위해 520에서 끝난다.
도 6은 본 개시에 따라 생성되는 도 1의 디코더(22)의 한 실시예의 블록도이다. 일반적으로, 디코더(22)는 도 4의 인코더(20)의 변환을 역전시켜, 결과로서 원래의 사용자 데이터가 얻어질 뿐만 아니라, 역 프로세스(디코딩) 동안 마주치는 에러들이 검출되고 제거된다. 본 전체 개시에 비추어 당업자에 의해 다른 실시예들이 생성될 수 있다고 여겨진다.
디코더는, 도 6에 도시된 바와 같이, 입력(602) 상에서 TCM 심볼들을 수신한다. TCM 심볼들은, 메모리 판독의 결과로서 감지된 전압의 아날로그 대 디지털 변환에 의해 생성된 값이다. 입력(602)은 ADC 값을 수신하는데, 이것은 이들 값들이 메모리 셀의 판독에 응답하여 각 ADC 값을 생성하는 아날로그 대 디지털 변환기(미도시)에 의해 생성되기 때문이다. 아날로그 대 디지털 변환 기능은 종종 도 1에 도시된 바와 같이 NV 메모리(14)에 위치하지만, 일부 실시예들은 아날로그 대 디지털 변환 기능을 디코더(22)에 위치시킬 수 있다. 도 6이 메모리 자체를 도시하고 있지 않지만, 디코더에 관한 메모리의 배열은, NV 메모리(14)로부터의 디코더(22)에 관한 입력 접속이 존재하는 도 1에 도시된 것과 동일하다. 이 접속은, 메모리의 전체 크기가 액세스가능하도록 멀티플렉싱하기 위한 준비를 포함하는 것으로 이해될 수 있다. ADC 값들은, 사실상, 도 2의 데이터 구조에 따라 저장되는 TCM 심볼들이라는 점을 이해하여야 한다. 따라서, 일련의 ADC 값들은, 도 2의 데이터 구조로부터 판독되고 디코딩에 예속되는 TCM 심볼들의 스트림을 나타낸다. 디코딩 후, 사용자 데이터 심볼들의 스트림은 도면의 우측 상의 출력(604)에 나타난다.
메모리(14)에 데이터를 저장하기 위한 특정 방식으로 구성된 인코더의 실시예는, 결과적으로, 그 데이터의 되판독시에, 각각이 특정 개수의 비트를 갖는 특정 개수의 TCM 심볼들을 디코더에 제공한다. 되판독을 위한 제어 파라미터들은, 따라서, 도 2 및 도 4에 관해 논의된 것과 동일하다. 도 6의 실시예는 예시적인 것이고, 셀 밀도당 4비트와 TCM 심볼당 한개의 LSB 비트를 갖는 구성을 도시하고 있지만, 본 교시의 범위 내에서 다른 비트 밀도 설정(예를 들어, 셀당 3비트, 또는 셀당 5비트)과 TCM 심볼당 하나보다 많은 LSB 비트로 동작하도록 다른 디코더 실시예를 구성할 수도 있다. 게다가, 본 개시에 따른 실시예들은 TCM 심볼들의 입력 스트림의 길이에 대해 많은 가능성들을 수용할 수 있다. 이러한 융통성은, 적어도 부분적으로, 예를 들어, 파라미터 레지스터 섹션(410)에 의해 제공되는 파라미터들과 같은 파라미터들에 응답하여 디코더의 특정 실시예를 구성함으로써 제공된다. 이 점에서, 파라미터 값들은, 이하의 적절한 시점에서 더 논의되는 바와 같이, 인코딩이나 디코딩의 목적을 위해 적어도 코드워드 단위로 빈번하게, 인입하는 심볼 스트림에 응답하여 즉석에서(on-the-fly) 변할 수 있다는 점을 이해하여야 한다.
주어진 디코더 실시예는, 디코더가 일부 데이터 구성을 지원할 수 있고 다른 구성은 지원할 수 없도록 일부 제어 파라미터들의 범위에 관해 제약을 부과할 수도 있다. 따라서, 특정 디코더 실시예는 특정 데이터 구성을 목표로 설계될 수 있으며 다른 구성을 무시할 수도 있다. 예를 들어, 디코더 실시예는 셀당 3비트 및 셀당 4비트 밀도 설정을 지원할 수 있지만, 셀당 5 이상의 비트 밀도 설정을 지원하지 않을 수 있다. 그러나, 이런 방식으로 디코더 실시예별로 상이한 기능은, 본 교시의 범위 내에 드는 에러 정정에 대한 공통된 접근법을 나타내며, 결과적으로 유사한 혜택을 나타낸다.
도 6을 참조하면, 비터비 디코더/검출기(610)는, 메모리로부터 판독된 셀 값들의 아날로그 대 디지털 변환으로부터 생기는 TCM 심볼들의 인입 스트림으로부터의 LSB 경로(612) 상의 LSB들을 수신한다. 이러한 비터비 검출기는 통신 분야의 당업자에게는 친숙할 것이므로 간결성의 목적을 위해 여기서는 그 설명을 반복하지 않을 것이다. 아날로그 대 디지털 변환으로부터 수신된 TCM 심볼들 각각은, 각 심볼의 최하위 부분에 추가 비트들이 첨부될 수 있다는 점을 제외하고는, 원래의 인코딩된 스트림(도 2 참조)과 동일한 구조를 가진다. 이들 추가적인 비트들은 고해상도 아날로그 대 디지털 변환으로부터 발생하며, 각 LSB에 관한 추가의 정밀도의 비트들을 제공한다. 즉, TCM 심볼들은 이들이 기입된 해상도보다 높은 비트 해상도로 되판독될 수 있다. 이들 추가 비트들은 "소프트 비트"라 불리며, 소프트 비트들이 없이 가능한 것보다 높은 해상도로 각 LSB의 값을 감지하기 위해 비터비 검출기에 의해 이용된다. 소프트 비트를 이용하는 비터비 검출기의 일부 실시예들은, 3개나 4개의 추가 비트를 이용할 수도 있지만, 더 많거나 더 적은 비트들이 이용될 수도 있다. 그러나, 여기서 개시된 많은 혜택을 달성하기 위하여 소프트 비트들의 이용은 요구되지 않지만, 이러한 소프트 비트를 이용하여 에러 정정 성능이 훨씬 더 향상된다는 점을 이해하여야 한다. 비터비 검출기 하드웨어의 실시예는 하나의 특정한 디코딩 구성에 대해 설계될 수 있거나, 펌웨어(480)를 통해 마이크로프로세서(412)에 의해 프로그램되는 파라미터 레지스터 섹션(410) 내의 다양한 레지스터들을 통해 비터비 검출기가 파라미터화될 수 있는 경우에는 하나 보다 많은 디코딩 구성을 지원할 수도 있다. 구성에 관해 고정되어 있든지 또는 프로그램가능하든지에 관계없이, 비터비 검출기 실시예는 제1 및 제2 콘볼루션 다항식과 제1 및 제2 펑쳐 다항식을 포함하며, 이들 모두는 파라미터 레지스터 섹션(410)에서 이용가능하다. 콘볼루션 다항식은 비터비 검출기에서 구현되는 디코딩 격자를 결정하며, 펑쳐 다항식은 펑쳐 다항식의 이용이 없는 경우에 콘볼루션 인코더(본 예에서는, 도 3 및 도 4의 콘볼루션 인코더(300))에 의해 발생되었을 비-펑쳐 비트 스트림에 관한 LSB 스트림 내의 비트 서브셋을 식별한다. 비터비 검출기는, 그 출력으로서, 인코더에 제공된 원래의 LSB 스트림의 내용을 반영하는 디코딩된 비트 스트림을 생성한다. 실용적 견지에서, 일부 비트 에러들은 TCM LSB 스트림에서 발생하며, 에러 정정 디코더로서의 비터비 검출기의 거동과 일치하여, 이들 비트들 중 일부는 비터비 검출기에 의해 정정될 것이다. 그러나, 다른 비트 에러들은 통과될 수 있고, 이들 통과된 에러들을 검출하고 정정하는 것은 디코더 내의 후속 기능들의 과제가 될 것이다.
디맵퍼(620)는 MSB 경로(623) 상의 아날로그 대 디지털 변환으로부터 수신된 MSB 스트림을 프리-인코드 MSB 형태로 변환한다. 예를 들어, 인코더에 의해 그레이 대 2진 코딩이 적용되었다면, 디맵퍼는 그레이 코드 형태로 되변환한다. 디맵퍼는 또한, 인코더의 레벨 대 DAC 기능(472)(도 4 참조)의 역을 제공한다. 비터비 디코더(610)로부터의 콘볼루션 디코딩된 LSB들은, 이제 설명될 리코더(recoder)(622) 및 LSB 버퍼(624)로 향한다는 점에 유의해야 한다. 레벨 대 DAC(472)는 셀 목표 값으로의 인코딩된 TCM 심볼들의 스케일링 옵션을 제공할 수 있기 때문에, 적절하게 에러가 없는 TCM 디코드를 얻기 위해 원래의 셀 목표값을 가능한 한 근접하게 반영하는 되판독 값을 이용하면 디코딩 프로세스 정확성이 향상될 수 있다. ADC 값들로부터의 및 리코더(622)로부터의 MSB들의 조합은 이러한 향상된 정확성을 허용하는 디맵퍼에 입력 값들을 제공한다. 디맵퍼의 출력(625)은 MSB들로서 디맵핑된다. 디코딩된 TCM 심볼들에 대한 LSB들은 비터비 디코더 출력(626)으로부터 취해진다.
리코더(622)는, 비터비 디코더(610)에 의해 제공된 결과에 기초하여 원래의 인코딩된 비트 스트림이 되도록 의도한 것을 재구축한다. 일부의 간헐적인 에러들은 비터비 검출기 출력에 존재할 수 있기 때문에, 630에서 리코드된 스트림은 원래의 인코딩된 비트 스트림의 근사치일 수 있다. 도 4의 레벨 대 DAC(472)에 의해 처음 수행된 순방향(forward) 변환에 대한 적절히 정확한 역 변환을 발견하기 위하여 콘볼루션 인코딩된 LSB들의 원래 LSB 인코딩을 실제적으로 근접하게 얻는 것이 바람직하다. 약간 달리 말하면, 비터비 디코더(610)는, 비터비 디코더의 출력(626) 상의 디코딩된 LSB들이 인코더측의 원래의 에러없는 LSB들을 더욱 정확히 반영하도록, ADC 값들로부터 취해진 인입 LSB들에 에러 정정을 가한다. 리코더(622)는 본질적으로, MSB들을 더욱 정확히 재생성하는데 있어서 디맵퍼(620)에 의해 사용되는 코드 비트들을 포함하는 LSB들을 재생성하는 또 다른 콘볼루션 인코더(300)(도 3 및 도 4 참조)이다. 따라서, 코드 비트들을 포함한 원래의 콘볼루션 인코딩된 LSB들은, 적어도 컴포넌트들의 정확도 한계 내에서, 리코더(622)에 의해 디맵퍼(620)에 제공된다. 디맵퍼는 인입 MSB들과 리코더(622)로부터의 콘볼루션 인코딩된 LSB들에 기초하여 출력(625) 상에 MSB들을 생성한다. 디맵퍼(620), 비터비 디코더(610), 및 리코더(622)를 제외한 MSB 및 LSB 데이터 경로의 컴포넌트들은 디맵핑 구조(641)라 부를 수 있다.
MSB 버퍼(640)는 디맵퍼(620)의 출력으로부터 디맵핑된 MSB들을 수신한다. 이 후자 버퍼는 디코딩된 MSB 스트림 내의 MSB 비트들을 스테이지하고(stage), MSB들이 MSB 카운터(644)에 응답하여 요청받을 때 이들을 MSB FIFO(642)에 포워딩한다. MSB 버퍼(640)는, MSB 카운터(644)가 MSB 버퍼에 대한 누적의 10비트를 카운팅함으로써 MSB RS 심볼을 요청할 때마다 RS 심볼 크기의 비트 그룹들을 MSB FIFO(642)에 출력한다. RS 심볼 크기의 그룹들은, 원래 도 4의 인코딩 기능 동안에 생성된 RS 심볼들에 직접 대응한다. 도 6에 나타낸 셀당 4비트 구성은 (도 2와 일치되는 바와 같이) 3비트 폭의 MSB 버퍼를 이용하지만, 이것은 예시적인 것이고, MSB 폭에 대한 파라미터 설정에 따라 이 버퍼에 대해(및 관련된 나머지 데이터 경로에 대해) 다른 폭이 설정될 수도 있다. 마찬가지로, RS 심볼 폭은 (도 2에서 보다시피) 10비트이지만, RS 심볼로부터 TCM 심볼로의 변환시에 및 디코딩된 TCM 심볼로부터 다시 RS 심볼로의 변환시에, 다른 RS 심볼폭을 갖는 실시예(및 기타의 팩킹 구조)가 이용될 수도 있다.
LSB 버퍼(624)는 비터비 검출기(610)로부터 디코딩된 LSB 스트림을 수신한다. 이 버퍼는 LSB 비트들을 스테이지(stage)하고, LSB 카운터(648)가 추가 LSB 비트들을 요청할 때마다 비트들을 멀티플렉서(646)에 출력한다. LSB 카운터(648)는 멀티플렉서(646)의 동작을 제어한다. LSB 카운터가 LSB 버퍼 내로의 누적의 10비트를 카운트할 때마다, 멀티플렉서는 LSB 버퍼로부터 멀티플렉서(646)를 통해 RS 디코더(650)에 LSB RS 심볼을 전송한다. 다른 모든 시간에서, MSB RS 심볼들은 MSB FIFO 내에 누적된다. LSB RS 심볼이 멀티플렉서(646)를 통해 RS 디코더(650)에 전송된 직후에, MSB FIFO의 내용은 멀티플렉서(646)를 통해 RS 디코더(650)로 전송된다. 복수의 MSB RS 심볼들은 이 전송을 포함할 것이기 때문에, MSB RS 심볼들은, 모든 이용가능한 심볼들이 멀티플렉서(646)를 통해 RS 디코더(650)로 전송될 때까지 클록 인터벌당 하나의 심볼씩 MSB 버퍼 바깥으로 전송될 수 있다. 도 6의 실시예에서는 LSB 버퍼는 한개 비트 폭이지만, LSB 폭에 대한 파라미터 설정에 따라 이 버퍼에 대해(및 관련된 나머지 데이터 경로에 대해) 한개 비트보다 큰 폭의 실시예들이 설정될 수도 있다.
MSB 카운터(644)의 제어하에, MSB FIFO(First In First Out)(642)는 MSB 버퍼(640)로부터 RS 심볼들을 수신한다. MSB FIFO에서 재조립되는 이들 심볼들은, 사용자 데이터 입력 스트림으로부터 및 RS 인코더(402)(도 4)의 작용에 의해 원래 도 4의 인코더(20)에서 생성된 RS MSB 심볼들과 동일하다. MSB FIFO는, 디코더의 TCM 부분에 의해 반환된 모든 RS 심볼들이 그들이 인코딩 프로세스 동안에 TCM 인코더에 발송된 시퀀스와 동일한 시퀀스로 재조립되는 것을 보장한다. MSB 데이터 경로는, 일부 실시예들에서는, 더 빠른 데이터 레이트(TCM 심볼당 3 MSB 비트 대 펑쳐링에서 LSB 비트당 1비트 미만)에서 동작하기 때문에, MSB FIFO는 RS 심볼 관리 기능을 제공한다. 도 2의 데이터 구조 실시예에서는, LSB 심볼 경계와 MSB 심볼 경계가 TCM 심볼 경계와 일치하는 포인트들이 시퀀스 내에 있다. 인코딩 모드에서, TCM 인코더에 LSB RS 심볼을 전송할지 MSB RS 심볼을 전송할지에 대한 임의의 결정이 이루어질 수 있다: MSB RS 심볼이 먼저 전송되거나 LSB 심볼이 먼저 전송될 수도 있다. 어느 것이든 유효할 수 있으나, 디코딩 모드에서는, 재구축 시퀀스는 인코딩 모드에 의해 생성된 시퀀스와 정확히 동일해야 한다. MSB FIFO는 비교적 빠르게 이동하는 MSB 심볼들의 일시적 저장을 허용하여 MSB RS 심볼들이 적절한 순서로 선택될 수 있다. 이 점에서, MSB RS 심볼들은 LSB RS 심볼들보다 빠른 레이트로 완료되어, 그 결과, 부정확한 재구축 시퀀스를 초래하기 때문에, MSB RS 심볼들은 완료시에 단순히 RS 디코더에 전송될 수 없다는 점을 이해하여야 한다. 예를 들어, 도 2에 관하여 전술된 바와 같이, RS2-RS5는 RS1이 완료되기 전에 완료된다. 따라서, MSB FIFO는 RS1이 완료될 때까지 RS2-RS5를 유지할 것이다. RS1은, 디코더(650)로의 RS2-RS5의 전송 이전에 RS 디코더(650)에 전송된다. MSB FIFO는, MSB 버퍼에 의해 RS 심볼 길이의 비트들이 획득될 때마다 MSB 버퍼로부터 추가의 RS MSB 심볼을 수신하고, 멀티플렉서(646)가 MSB FIFO로부터 RS 디코더(650)로의 경로를 인에이블 ―이것은 RS 디코더(650)에서 RS 심볼들의 정확한 시퀀스를 유지하도록 MSB 및 LSB 카운터들의 제어하에 발생함― 할 때마다 RS MSB 심볼을 멀티플렉서(646)에 전송한다.
MSB/LSB 심볼 멀티플렉서(646)는, 비터비 디코더(610) 및 디맵퍼(620)에 의해 생성된 포스트-디코드 TCM 심볼들의 MSB 및 LSB 부분들을 각각 나타내는 MSB FIFO(642) 및 LSB 버퍼(624)로부터의 재구축된 RS 심볼들을 병합한다. 재구축된 RS 심볼들은 전술된 바와 같이 MSB FIFO(642) 및 LSB 버퍼(624)에 의해 생성된다. MSB 카운터(644) 및 LSB 카운터(648)의 제어하에, MSB FIFO 출력 및 LSB 버퍼 출력으로부터 10비트 양이 선택되어, 원래 도 4의 인코더(20)의 RS 인코딩 기능에 의해 생성된 시퀀스와 꼭같이 정합하도록 의도된 RS 심볼들의 시퀀스 내로 병합된다.
MSB 카운터(644)는, 전체 MSB RS 심볼이 MSB FIFO(642)로부터 이용가능할 때까지 카운트업하는 업 카운터이다. 전체 MSB RS 심볼이 이용가능하면, MSB 카운터는 멀티플렉서(646)에 시그널링하고, 10비트 심볼이 멀티플렉서를 통해 RS 디코더(650)에 전송된다. 각 시간 증가 t에 대해, 3개의 MSB 비트들이 멀티플렉서(646)에 이용가능하다. 따라서 MSB 카운터는 시간 증가당 값 3만큼 증가한다. 각 RS MSB 심볼은, 이 실시예에서, 10개 비트로 구성되기 때문에, MSB 카운터는 MSB FIFO(642) 내의 전체 RS 심볼의 누적을 초기에 허용하는데 4 시간 증가를 요구할 것이다. 이 시점에서, 카운트는 12이다. 카운터는 전체 MSB RS 심볼의 가용성을 멀티플렉서(646)에 시그널링하고, 현재 카운트가 2가 되도록 그 카운트를 10만큼 감소시킨다. 4 시간 증가는 총 12개 MSB 비트들을 누적하기 때문에, 다음 MSB RS 심볼에 대한 할당에 대해 2개 비트가 남게 된다. 따라서, 3 시간 증가는 추가의 9비트를 제공하여, 11 비트가 이용가능하며, 이들 비트들 중 1개가 다음 MSB RS 심볼에 대해 남게 된다. 이 시점에서, 카운트는 11이다. 카운터는 전체 MSB RS 심볼의 가용성을 멀티플렉서(646)에 시그널링하고, 현재 카운트가 1이 되도록 그 카운트를 10만큼 감소시킨다. 1 비트가 남겨진 상태에서, 다음 3 시간 증가는 9비트를 제공하여 전체 MSB RS 심볼을 제공하고, 한개 비트가 남겨진다. 이 시점에서, 카운트는 10이다. 카운터는 전체 MSB RS 심볼의 가용성을 멀티플렉서(646)에 시그널링하고, 현재 카운트가 0이 되도록 그 카운트를 10만큼 감소시킨다. 따라서, 이 프로세스는, MSB 카운터가 전체 MSB RS 심볼의 가용성을 멀티플렉서(646)에게 시그널링할 때마다 MSB 카운터가 그 카운트를 10씩 감소시키면서 반복된다. 메모리 셀당 2개 MSB가 있는 실시예에서, MSB 카운터는 시간 증가당 2씩 증가할 것이다. 마찬가지로, 메모리 셀당 4개 MSB가 있는 실시예에서, MSB 카운터는 시간 증가당 4씩 증가할 것이다.
LSB 카운터(648)는, LSB 카운터가 매 시간 증가당 값 1씩 증가한다는 것을 제외하고는, MSB 카운터의 카운트와 유사한 방식으로 카운트 업한다. 따라서, LSB 카운터는, 매 10 시간 증가에 응답하여 전체 LSB RS 심볼의 가용성을 나타낸다. 그 다음 LSB 카운터는 제로로 재설정되고, 다시 값 10을 카운트한다. 전체 LSB RS 심볼이 이용가능하면, LSB 카운터는 멀티플렉서(646)에 시그널링하고, 10비트 심볼이 멀티플렉서를 통해 RS 디코더(650)에 전송된다. LSB 카운터 및 MSB 카운터가 동시에 RS 심볼의 가용성을 나타내면, 멀티플렉서(646)는 LSB RS 심볼에 우선권을 주고, RS 심볼의 원래 스트림을 재구축하기 위하여 그 심볼을 먼저 취한다. 메모리 셀당 2개 LSB가 있는 실시예에서, LSB 카운터는 시간 증가당 2씩 증가할 것이다. 유사하게, 메모리 셀당 3개 LSB가 있는 실시예에서, LSB 카운터는 시간 증가당 값 3씩 증가할 것이다.
TCM 카운터(652)는, 이제 막 수행되려 하는 전송을 구성하는 TCM 심볼의 정확한 개수를 나타내는 TCM 심볼(654)의 수와 동일한 'TCM 코드워드 길이'의 값으로 초기화된다. TCM 심볼의 개수는 또한, 디코드가 ADC 값들의 스트림의 수신을 개시하기 이전에 파라미터 레지스터 섹션(410)으로부터 직접 얻어질 수 있다. TCM 카운터의 카운트는 디코딩되는 매 TCM 심볼에 대해 1씩 감소된다. 카운트가 제로가 되면, 시퀀스의 끝에 도달하도록 현재 블록에 대한 디코딩 프로세스의 끝의 표시가 CPU(412)에 표시된다. 실시예에 따라, 이 이벤트는, 파라미터 레지스터 섹션(410)이 재로딩될 것을 요구하거나 요구하지 않을 수 있는 또 다른 인코딩 시퀀스를 셋업하기 위해 CPU(412)에 의한 동작을 인에이블할 수 있다. TCM 카운터의 현재 카운트값 뿐만 아니라 제로로의 천이 양쪽 모두는 TCM 카운터에 의한 제어 표시로서 이용된다는 점에 유의한다. 예를 들어, 제로보다 큰 값은 'TCM 코드워드 길이'로 표기되는 총 길이에 관한 시퀀스의 진행을 나타내고, 제로로의 천이는 시퀀스의 완료를 나타낸다.
펑쳐 패턴 카운터(660)는, 파라미터 레지스터 섹션(410)에 저장된 제1 펑쳐 다항식 및 제2 펑쳐 다항식으로부터 유도되거나 직접 얻어진 값(661)으로 초기화된다. 펑쳐 패턴 카운터 값은, 디코딩 목적을 위해, 수신된 LSB 스트림 내의 각 비트를 어떻게 취급할 것인지를 비터비 디코더에 식별하는 데 이용된다. 즉, 주어진 비트가 데이터 비트인지 또는 코드 비트인지를 식별하는 데 이용된다. 펑쳐 패턴 카운터 카운트는 또한, 디맵퍼(620)에 의해 이용되는 리코드된 LSB 스트림을 재구축하기 위해 리코드(622)에 의해 이용된다.
RS 카운터(662)는, 디코더(22)가 ADC 값들의 스트림의 수신을 시작하기 전에 RS 코드워드 내의 심볼들의 개수로 초기화될 수 있다. 심볼들의 개수는 RS 심볼 개수 레지스터(664)에서 초기화될 수 있고, 그 값은 파라미터 레지스터 섹션(410)에 저장된 값들로부터 유도되거나 이로부터 직접 얻어질 수 있다. RS 심볼 개수 레지스터(664)에 로딩될 값을 결정하는 파라미터 레지스터 섹션(410) 내의 값들은, 'RS 데이터 길이' 및 'RS 패리티 길이'를, 대개는 이들 2개 값들의 합으로서 포함한다. 이들 값들은 RS 심볼 단위이다. 디코더(22)가 RS 심볼들의 스트림을 생성함에 따라, RS 카운터는, RS 심볼들이 MSB FIFO(642) 및 LSB 버퍼(624)의 출력에서 생성될 때 RS 심볼들을 카운트 오프(count off)한다. RS 카운터는 본 실시예에서는 제로로 감소됨으로써 마지막 RS 심볼이 카운트된 후에 시퀀스의 끝을 나타내는 신호를 생성한다. 이러한 상태는 현재 전송의 끝을 나타내는 RS 디코더에 대한 종료 제어로서 이용될 수 있다. 다른 실시예들에서, MSB 카운터, LSB 카운터, 및 RS 심볼 카운터는 카운트업하도록 구성되거나 업-카운트 및 다운-카운트의 일부 적절한 조합으로 구성될 수 있다.
RS/LSB 한계값 비교기인 RS/LSB 한계값 비교기(454)는, 디코딩 상황에서, 최종 LSB RS 심볼들을 구성하는 마지막 비트들이 제로라는 것을 확정하기 위해 전송 시퀀스의 끝 부근에서 이용된다. 비교기는 LSB 한계값보다 큰 값으로부터 LSB 한계값과 동일하거나 작은 값으로의 RS 카운터의 천이를 검출한다. 이 천이는, 차례로, LSB 한계값(490)에 관하여 이하에서 더 설명되는 바와 같이, 멀티플렉서(646)로 하여금 LSB 버퍼(624)로부터 비트들을 더 이상 취하지 않는데 협력하게 하고 모든 나머지 LSB RS 심볼들을 제로값의 비트들로 완료하게끔 한다. LSB 및 MSB 데이터 경로들 내의 컴포넌트들과 LSB 버퍼(624) 및 MSB 버퍼(640)로부터 멀티플렉서(646)를 포함한 여기까지의 지원 컴포넌트들은 언팩킹 구조(668)라 불릴 수 있다.
RS 디코더(650)는, 멀티플렉서(646) 및 선행 로직들에 의해 코드워드가 조립되면 RS 코드워드를 수신한다. RS 디코딩 동작은, 일단 RS 디코더가 전체 RS 코드워드를 소유하면 진행할 수 있다. RS 디코더의 기능은, RS 코드워드들이 수신되면 RS 코드워드들을 디코딩하고 수신된 RS 심볼에 존재할 수 있는 임의의 에러를 검출하고 정정하는 것이다. RS 디코더의 동작은 현재 다루고 있는 본 개시에 의해 당업자라면 이해할 것이다. 당분간, RS 디코더는 각 RS 코드워드 내의 소정 개수의 심볼을 정정할 수 있다는 점에 유의하는 것으로 족하다. 본 개시에서 앞서 논의된 바와 같이, RS 코드워드는 데이터 부분 및 패리티 부분으로 구성된다. RS 디코더는 데이터 부분으로부터 에러를 검출하고 제거하기 위해 RS 코드워드의 패리티 부분을 이용한다. RS 디코더는, 도 4의 인코더(20)에 제출된 원래의 사용자 데이터에 대응하는 데이터 부분을 반환할 필요만 있다. RS 디코더는 파라미터 레지스터 섹션(410)에서 식별되는 RS 데이터 길이의 값과 동등한 길이를 갖는 RS 심볼들의 스트림을 생성한다. RS 디코더에 의해 검출된 임의의 에러는 이들이 출력에 어써팅되기 전에 출력 심볼에 가해진다.
인입 ADC 값들이 인터리빙과 함께 저장되면, 복수의 RS 코드워드들이 인터리빙된 방식으로 RS 디코더에 제공될 수 있다. 싱글 코드워드 구성 또는 인터리빙된 코드워드 구성에서, 파라미터 레지스터 섹션(410)의 RS 인터리빙 인자의 값은 특정한 인터리브 구성을 정의한다. RS 디코더(650)는, 그것이 수신한 RS 심볼 스트림을 비-인터리빙된 또는 인터리빙된 것으로서 디코딩함으로써 적절하게 응답한다.
RS 인터리빙 인자값이 1보다 크다는 것에 의해 입증되는 바와 같이 인터리빙된 구성이 선택되면, 파라미터 레지스터 섹션(410)의 'RS 데이터 길이' 및 'RS 패리티 길이'의 값들은 인터리빙된 길이에 대응한다. 예를 들어, RS 인터리빙 인자가 4이면, 'RS 데이터 길이'는 4개의 인터리빙된 데이터 부분의 길이에 대응하고, 'RS 패리티 길이'의 값은 4개 패리티 부분의 길이이다. 상기 인용된 '546 출원의 도 12, 13, 15 및 16은 4개 인터리브를 갖는 데이터 구조를 나타내고 있다는 점에 유의한다.
LSB 한계값(490)은 디코딩 시퀀스의 끝에서 제로로 강제되는 LSB 위치의 비트수를 명시한다. 카운트값으로서의 LSB 한계값(490)은 RS 심볼 단위로 명명되며, RS 카운터가 제로로 감소할 때 RS 카운터 값과 비교된다. LSB 한계값은 일반적으로 작은 정수이며 최종 RS LSB 심볼(들) 제로 채우기가 시작하는 포인트에서 시퀀스 내에 남아있는 RS 심볼들의 개수에 대응한다. 이 예가 RS(N-1) 심볼이 발생하는 도 2에 도시되어 있다. RS(N-1)의 발생은, [RS(N-7)에서] 최종 LSB 심볼 비트들이 제로인 포인트에 대응한다.
LSB 한계값은, RS 디코더(650)에 공급되는 각 RS 심볼에 대해 RS 카운터가 감소될 때 RS 카운터(662)의 값과 비교된다. RS 카운터가, RS/LSB 비교기(454)에 의해 판정되는 바와 같이, LSB 한계값과 동일하거나 작은 값으로 감소된 후에, RS 디코더에 전송된 LSB RS 심볼들 내에는 제로가 삽입된다. 즉, LSB 한계값과 RS 카운터 사이의 동등성 비교가 발생하는 포인트는, 제로 채우기를 개시함으로써 LSB 심볼들이 구성되는 방식의 모드의 변경을 나타낸다. RS 카운트가 LSB 한계값보다 큰 동안, RS LSB 심볼들 내의 비트들은 비터비 디코더(610)에 의해 생성된 비트들로부터 채워진다. RS 카운터가, RS/LSB 비교기(454)에 의해 판정되는 바와 같이 한계값 카운트와 같거나 작게 된 후에, 추가의 LSB RS 심볼들의 데이터 비트들은 제로로 채워진다. 이것은 최종 LSB RS 심볼이 채워질 때까지 계속된다.
RS 대 사용자 데이터 팩킹(670)은 디코딩 장치를 구성하는 최종 섹션이다. 길이 'RS 데이터 길이'(파라미터 레지스터 섹션(410)을 참조)의 RS 심볼 세트는 RS 포맷으로부터 사용자 데이터 포맷으로 변환된다. 도 7의 실시예에서, 이 변환은, 표시된 바와 같이, 10비트 심볼로부터 8비트 심볼로의 변환이다. 물론, RS 포맷이 10비트와 상이하거나 사용자 데이터 포맷이 8비트와 상이하다면, 변환은, 현재 구성에서 이들 폭의 정의에 기초한 RS 심볼 포맷으로부터 사용자 데이터 심볼 포맷으로의 변환일 것이다.
마이크로프로세서(412)에 의해 실행되는 펌웨어(480)는 디코더(22)의 동작을 지시한다. 특히, 마이크로프로세서는 파라미터 레지스터 섹션(410)과 인터페이싱한다. 마이크로프로세서는 디코더에 공급되는 ADC 값들의 현재 스트림에 적용될 많은 가능한 디코딩 구성들 중 하나를 정하기 위해 레지스터들에 값을 기입할 수 있다. 마이크로프로세서가 펌웨어(480)를 실행하는 동안에, 디코더의 프로그래밍을 한 구성에서 다른 구성으로 변경하기 위하여 디코더가 ADC 값들의 스트림을 능동적으로 디코딩하고 있지 않은 임의의 시간에 값을 수정하도록 지시될 수 있다. 이런 방식으로, 파라미터 레지스터 섹션(410)에 도시된 모든 파라미터들의 많은 조합이 디코더(22)의 특정 실시예에 적용될 수 있다. 한 예로서, 디코더 구성은, 인입 ADC 값들에 대한 비트 밀도의 변화를 반영하기 위해 변경될 수 있다.
디코딩 데이터 동작이 수행되든지 또는 인코딩 데이터 동작이 수행되든지에 관계없이, 저장된 다양한 값들에 관하여 파라미터 레지스터 섹션(410)은 변경되지 않는다는 점에 유의한다. 그러나, 펌웨어(480)의 관점에서는, 다양한 파라미터들은 다소 상이하게 보여질 수 있다. 따라서, 디코딩 동작의 프레임워크 내에서, 적어도 부분적으로, 파라미터들이 이하에서 바로 논의될 것이지만, 추가의 설명 목적을 위해 추가의 상세정보가 제공될 수도 있다.
사용자 데이터 길이: 디코딩 후에 출력에 적용되어야 하는 사용자 데이터의 길이. 이 값의 단위는 통상 바이트이므로, 사용자 데이터 길이는 사용자 데이터의 단위 내의 바이트수를 의미한다.
RS 정정 능력(T): 하나의 RS 코드워드에서 RS 디코더가 성공적으로 검출하고 정정할 수 있는 심볼 에러들의 개수. 인터리빙이 적용되면, 이 값은 싱글 인터리브에 적용되고, 인터리빙에 의해 정정될 수 있는 심볼들의 총 개수는 이 수를 RS 인터리빙 인자로 곱한 값이다.
RS 데이터 길이: 이것은 사용자 데이터 단위가 변환되는 RS 심볼들의 개수이다. RS 심볼의 비트수가 사용자 데이터 심볼의 비트수와 상이하면, 이 수는 '사용자 데이터 길이'와는 상이하다. 도 6의 정황에서, 사용자 데이터 심볼 단위는 바이트이고 RS 심볼은 10비트를 포함하므로, 'RS 데이터 길이'는 이 경우에는 '사용자 데이터 길이'보다 인자 8/10 만큼 작을 것이다.
RS 데이터 길이: RS 인터리빙 인자가 1보다 크다면 모든 인터리브들의 결합된 길이.
RS 패리티 길이: 현재의 구성에 따른 RS 코드워드의 패리티 부분에 대해 요구되는 RS 심볼들의 개수. 이 값은 RS 정정 능력으로부터 유도될 수 있지만, 일부 실시예에서는 독립된 레지스터 값으로서 구현될 수도 있다.
RS 인터리빙 인자: 파라미터 레지스터 섹션(410)에 저장된 'RS 데이터 길이'와 'RS 패리티 길이' 값들의 합을 구성하는 RS 심볼들의 길이를 형성하는 인터리빙된 RS 코드워드들의 개수. 인터리브들의 개수는 대개는 비교적 작은 정수이다.
콘볼루션 제약 길이: 콘볼루션 인코더에서 데이터를 수락하는 시프트 레지스터(도 3의 시프트 레지스터(304) 참조)의 비트수 + 1. 콘볼루션 인코더로부터의 각 출력 비트는, 인코더로의 현재의 입력 비트 + 가장 최근의 시프트 레지스터의 이전 비트들(prior bits)의 어떤 조합이다.
제1 콘볼루션 다항식: 2개의 콘볼루션 다항식들 중 하나. 이 다항식의 계수들의 개수는 콘볼루션 제약 길이와 동일하다. 디코딩의 경우, 제1 콘볼루션 다항식은 제1 콘볼루션 다항식의 적용에 관해 발생하는 입력 스트림 내의 비트들에 대해 비터비 검출기(610)에 의해 적용되는 해석을 설정한다. 일부 실시예에서, 이 다항식은 특정 콘볼루션 다항식에 대응하는 분기 결정 구성을 선택하는 비터비 디코더의 특징을 구현하기 위해 적용될 수 있다. 비터비 검출기를 포함하는 특징들의 구현은 실무 분야의 당업자에게 널리 이해되고 있다. 예를 들어, 본 명세서에서 참조용으로 인용하는 Wicker, Stephen B Error Control Systems for Digital Communications and Storage, 1995, Prentice-Hall, Chapter 12 (pp. 290 - 332)을 참조한다.
제2 콘볼루션 다항식: 2개의 콘볼루션 다항식 중 제2 다항식으로서, 그 계수들은 현재 입력 비트와 시프트 레지스터를 이용하여 2개의 콘볼루션 인코더 출력 비트들 중 제2의 것을 계산하는데 이용된다. 디코딩의 경우, 제2 콘볼루션 다항식은, 제2 콘볼루션 다항식의 적용에 관해 발생하는 입력 스트림 내의 비트들에 대한 비터비 검출기에 의해 적용되는 해석을 설정한다. 일부 실시예에서, 이 다항식은 특정 콘볼루션 다항식에 대응하는 분기 결정 구성을 선택하는 비터비 디코더(610)의 특징을 구현하기 위해 적용될 수 있다. 비터비 검출기를 포함하는 특징들의 구현은 관련 분야의 당업자에게 널리 이해되고 있다. 다시 한번, 예를 들어, Wicker, Stephen B Error Control Systems for Digital Communications and Storage, 1995, Prentice-Hall, Chapter 12 (pp. 290 - 332)을 참조한다.
제1 펑쳐 다항식: 펑쳐링에 관하여 비터비 검출기(610)에 대한 각 입력의 해석을, 제1 콘볼루션 다항식과 협력하여 설정하는 2개의 다항식 중 하나. 하나보다 많은 가능한 제1 펑쳐 다항식으로부터 선택하는 한 실시예로서, 비터비 검출기는, 적절한 디코드 시퀀스를 재구축하기 위하여 적절한 디코딩 단계들이 펑쳐링된 입력 스트림에 적용되는 방식으로 복수의 가능한 펑쳐 다항식 중 하나로부터의 선택에 관하여 비터비 디코더 동작을 구성하는 능력을 갖도록 구현될 수 있다. 실무 분야의 당업자라면 비터비 검출의 맥락에서 펑쳐링의 적용을 잘 이해할 것이다. 다시 한번, 예를 들어, Wicker, Stephen B, Error Control Systems for Digital Communications and Storage, 1995 Prentice-Hall, Chapter 12 (pp. 290 - 332)를 참조한다. 프로그래머블 콘볼루션 인코더에 관하여 전술된 내용이 어떻게 적용되는지의 예시에 대해 도 3을 참조한다.
제2 펑쳐 다항식: 이것은 펑쳐링을 결정하는 2개의 다항식 중 제2의 다항식이다. 제2 콘볼루션 다항식과 함께, 이 값은 비터비 검출기(610)에 대한 각 입력의 해석을 설정한다. 하나보다 많은 가능한 제2 펑쳐 다항식으로부터 선택하는 한 실시예로서, 비터비 검출기는, 적절한 디코드 시퀀스를 재구축하기 위하여 적절한 디코딩 단계들이 펑쳐링된 입력 스트림에 적용되는 방식으로 복수의 가능한 펑쳐 다항식 중 하나로부터의 선택에 관하여 비터비 디코더 동작을 구성하는 능력을 갖도록 구현될 수 있다. 실무 분야의 당업자라면 비터비 검출의 맥락에서 펑쳐링의 적용을 잘 이해할 것이다. 다시 한번, 예를 들어, Wicker, Stephen B, Error Control Systems for Digital Communications and Storage, 1995 Prentice-Hall, Chapter 12 (pp. 290 - 332)를 참조한다. 프로그래머블 콘볼루션 인코더에 관하여 전술된 내용이 어떻게 적용되는지의 예시에 대해 도 3을 참조한다.
비트 밀도 설정: NV 메모리의 셀당 저장되는 비트수. 파라미터 레지스터 섹션의 많은 다른 파라미터들이, 적어도 부분적으로, 비트 밀도 설정의 값에 의해 결정된다. 여기서 밝힌 교시의 이용에 부수적인 이점들은, 메모리 셀에 의해 저장되는 상이한 레벨들의 분리(resolving) 정확성에 관하여 적어도 어떤 실제적 한계값까지 비트 밀도를 증가시키는 것에 비례하여 증가된다는 점에 유의한다. 비트 밀도 설정은, 인코더 및 디코더의 MSB, LSB, 및 결합된 TCM 심볼 데이터 경로들의 폭에 대한 주된 결정자이다. 도 6의 디코더 및 도 4의 인코더는, 비트 밀도 설정이 4비트라는 사실에 관한 예시적 실시예이다. 다른 인코더 및 디코더 구현은 셀당 3비트를 이용할 수도 있으며, 이 경우, TCM 심볼폭은 4비트 대신에 3비트가 된다. 4보다 큰 비트 밀도 설정도 역시 적용될 수 있다. 5와 동등한 비트 밀도 설정이 선택되면, 각 TCM 심볼의 MSB 부분은 3 또는 4 비트로 형성될 수 있고, LSB 선택은 2비트 또는 1비트로 각각 형성될 수 있다. 그러면, LSB 부분에서 1개보다 많은 비트는 2비트 폭의 인코딩을 취급할 수 있는 콘볼루션 인코더와 비터비 디코더를 요구할 것이다. 콘볼루션 다항식 및 펑쳐링 다항식의 적용은 싱글 비트 콘볼루션 인코더와 유사하다(도 3의 콘볼루션 인코더(300)를 참조).
TCM에서의 MSB 폭: 비트 밀도 설정에 예속된 값(상기의 논의 re 비트 밀도 설정을 참조). 도 6의 디코더(22)는 비트 밀도 설정 4를 이용하며, 각 TCM 심볼의 MSB 부분의 폭은 3비트이고 각 TCM 심볼의 LSB 부분의 폭은 1 비트이다. 앞서 설명된 바와 같이, 다른 조합이 이용될 수도 있다.
TCM에서의 LSB 비트폭: 비트 밀도 설정에 예속된 또 다른 값. 도 4의 디코더(22)는 비트 밀도 설정 4를 이용하며, 각 TCM 심볼의 MSB 부분의 폭은 3비트이고, 각 TCM 심볼의 LSB 부분의 폭은 1 비트이다. 예를 들어 상기 비트 밀도 설정에 관하여 설명된 바와 같이, 다른 조합들도 역시 적절할 수 있다. 다른 실시예 및 구성은, TCM 심볼의 LSB 부분에서 이용되는 하나보다 많은 LSB를 포함할 수 있다. 이렇게 하는 이들 구성에서, 마이크로프로세서(412)에 의해 프로그램된 값으로서의 LSB 비트폭 값은 각 LSB 부분이 1보다 큰 구성을 명시한다. 특정 실시예에서는 최대 개수의 LSB가 가능하다. 일부 실시예들은 값 1만을 수락할 수 있지만, 다른 실시예는 2이상의 값을 수락할 수 있다. 사용자 명시된 정보(예를 들어, 도 5의 단계(504) 참조)는: 사용자 데이터 길이, RS 능력(T), RS 인터리빙 인자, 비트 밀도 설정, 및 콘볼루션 및 펑쳐 파라미터를 포함할 수 있다는 점을 이해하여야 한다. 이들 항목들은 모두, 시퀀스 크기, 및 동반되는 에러 제어 오버헤드를 결정하기 위해 협력할 수 있는 변수들이다. 다른 또는 부차적인 파라미터들은 이들 기본적인 파라미터들로부터 유도될 수 있다. 부차적인 파라미터들은 RS 데이터 길이, RS 패리티 길이, TCM 길이, 및 제약 길이를 포함할 수 있다. 사용자 선택이란 엔드 유저 자체를 말하는 것이 아니고, 예를 들어, 특정 시스템의 제작시에 이루어지는 어떤 외부 판정에 기초하여 설정되는 이용 모드에 관련된 고려에 의해 결정될 수 있는 구성 변수들을 말한다. 다양한 파라미터들이 이 전체 개시에 비추어 임의의 적절한 방식으로 조직되고 상호 연관될 수 있다는 것을 이해하여야 한다.
TCM 코드워드 길이: NV 메모리로 전송되는 및/또는 NV 메모리로부터 검색되는 데이터 전송 단위의 총 길이. 주어진 저장장치 구성에서, 이 값은 일정하며 저장(즉, 기입) 동작과 판독 동작 사이에서 변하지 않는다. 이것은, '사용자 데이터 길이', 'RS 정정 능력', 'RS 데이터 길이', 'RS 패리티 길이', 'RS 인터리빙 인자', '콘볼루션 제약 길이', '콘볼루션 다항식', '펑쳐 다항식', 및 '비트 밀도 설정'을 포함한 대부분의 다른 파라미터들과 관련되어 있다. 이것은 대개 마이크로프로세서(412)에 의해 독립된 값으로서 저장되며, TCM 코드워드에서 정확히 그 개수의 TCM 값들을 전송하는 것에 관하여 인코더 기능을 제어할 것이다.
여기서 밝힌 디코딩 장치 및 연관된 방법은 각각, 코드워드별 기초로 코드 효율을 변경하는 능력에 관하여, 적어도 그 일부가 앞서 설명된 혜택들 모두를 제공하도록 협력한다는 점을 이해하여야 한다.
도 7은, 도 6의 인코더(22) 상에서 동작할 수 있는 참조 번호(700)로 개괄적으로 표시되고 다른 실시예들에도 동등하게 적용될 수 있는 방법의 일 실시예를 도시한다. 예를 들어, 방법(700)은 셀당 4비트 이외의 비트 밀도를 이용하는 실시예들에 적용가능하다.
방법(700)은 시작 단계(702)에서 시작하여 셋업(704)으로 진행한다. 단계(704)에서, 다양한 파라미터들이 도 4의 파라미터 레지스터 섹션(410) 뿐만 아니라 기타 임의의 원하는 레지스터 섹션에 로딩될 수 있다. 예를 들어, RS 정정 능력 및 콘볼루션 다항식과 같은 일부 파라미터들은 사용자 명시될 수 있는 반면, 예를 들어, TCM RS 패리티 길이 및 TCM 코드워드 길이와 같은 다른 파라미터들은 사용자 명시된 파라미터에 기초하여 결정될 수 있다는 것을 이해하여야 한다. 방법(700)에 의해 처리되는 데이터 흐름은, 도 1의 메모리(14)로부터 판독된 ADC 값들로 시작한다.
단계(706)에서, ADC 값들은 NV 메모리(도 1의 항목 14를 참조)로의 인터페이스로부터 수신된다. (도 6의 파라미터 레지스터 섹션(410)에 명시된) 'TCM 코드워드 길이' ADC 값들 전체가 수신되고, 여기서 각 ADC 값은 하나의 TCM 심볼에 대응한다. ADC 값들은, ADC 값들이 첨부된 '소프트 비트들'을 갖는 디코더에 의해 수신된 심볼을 반영한다는 점에서 도 5의 인코딩 방법(500)에 의해 생성된 인코딩된 TCM 심볼들과는 상이할 수 있다는 점을 이해하여야 한다. 이러한 구성은, 초기에 값들이 메모리에 기입되었을 때의 해상도보다 높은 해상도에서의 ADC 값들의 판독을 반영할 수 있다. 소프트 디코딩이 지원되면, 소프트 비트들의 개수는 변할 수 있지만, 일부 실시예들은 1 비트 내지 4 비트 중에서 임의의 것을 이용할 수 있다. 디코딩에서 소프트 비트들이 이용되면, 본 개시의 범위 내에서 수많은 실시예들이 이용될 수 있다. 예로서 제공되는 실시예인 도 6에서, 총 7비트가 수신되도록 수신된 ADC 값들에서 소프트 비트들은 모두 3비트가 될 수 있다. 소프트 비트들은, 소프트 비트들이 ADC 스트림 내의 최하위 LSB의 유의성(significance)보다 낮은 산술적 유의성을 차지하는, "서브-LSB"로서 명시된다. 비터비 디코더(300)는, 소프트 비트들을 이용하는 경우, 이러한 소프트 비트들을 인식하고, 디코딩 프로세스에서 이들을 이용한다. 소프트 비트들은 이용되는 경우 비트 스트림에서 LSB 에러의 검출과 정정을 향상시킨다. 소프트 비터비 디코더들은 관련 실무 분야에서 널리 이해되고 있으므로, 간결성의 목적을 위해 이에 관한 상세사항은 여기서 반복되지 않을 것이다. 이 점에서 독자는, 예를 들어, 추가 상세사항을 참조하기 위해 인용되는, Wicker, Stephen B., Error Control Systems for Digital Communications and Storage, 1995 Prentice-Hall, pp. 301-305를 참조한다.
단계(706)의 결과는 심볼들의 2개 스트림이다: 각각이 파라미터 레지스터 섹션(410)에 명시된 현재 구성에 의해 정의된 폭을 갖는 'TCM 코드워드 길이' MSB들의 스트림과, 각각이 현재 구성에 의해 유사하게 정의된 폭을 갖는 'TCM 코드워드 길이' LSB들의 스트림. 현재 구성에 의해 소프트 비트들이 이용되면, 이들은 이전 단락에서 설명된 바와 같이 LSB 필드에 대한 '서브-LSB' 확장으로서 나타난다.
단계(708)에서, LSB 스트림은, 한 실시예에서, 도 6의 디코더 실시예(22)에 도시된 바와 같이, 비터비 콘볼루션 디코더(610)에 의해 해석되고 디코딩된다. 본 실시예에서, 콘볼루션 디코더는, 모두 파라미터 레지스터 섹션에서 이용할 수 있는 '콘볼루션 제약 길이' 값, 제1 및 제2 콘볼루션 다항식, 및 제1 및 제2 펑쳐 다항식에 의해 정의되는 상이한 콘볼루션 코드 구성을 디코딩할 수 있기 위하여 프로그래밍에 의해 재구성가능할 수 있다. 디코딩의 결과, 'TCM 코드워드 길이' 포스트-디코드 LSB들의 스트림이 된다. 데이터 비트들은, 디코딩된 비트 스트림에 존재하기 때문에, 도 5의 RS 대 프리-TCM 팩킹 단계(510)에 의해 이전에 수신된 원래의 LSB 비트 스트림을 형성할 것으로 예상되는 비트들로서 비터비 디코더가 선택하는 비트들이다. 디코딩에 의해 작업된 스트림은 인코딩(도 5)을 거친 다음 메모리(14)(도 1)에 저장되었기 때문에, 비터비 디코딩 단계(708)에 제출된 LSB 비트들은, ADC 값들로부터 분리된 후에, 스트림이 비터비 디코딩(708)에 의해 해석될 때 에러를 획득했을 수도 있다. 그러나, 디코더의 거동은, 비터비 디코더 출력이 비터비 디코더 입력에 존재하는 에러수보다 낮은 비율의 에러를 나타내도록, 이들 에러들의 소정 부분을 검출하고 제거하도록 의도된다. 많은 경우에서, 비터비 디코더 출력은 에러가 없을 것이며, 그러면 이 프로세스의 나머지 부분 동안에 어떠한 추가적인 에러 정정도 필요하지 않다. 그러나, 어쨌든, 나머지 처리 단계들은, 708에서 비터비 디코드에 후속해서 여전히 남아 있는 에러를 제거하는데 이용가능하다.
단계(708) 후에, 'TCM 코드워드 길이' 포스트-디코드 LSB 심볼들이, '포스트-인코드'(즉, 인코딩된) LSB 비트 스트림을 재구축하려고 비터비 디코딩된 LSB들을 이용한 리코드(recode) 단계(710)에 입력된다. 즉, 리코더 단계(710)는, 원래 도 5의 인코딩 프로세스(500) 동안에 삽입된 코드 비트들을 재생성하기 위해 비터비 인코딩 단계로서 효과적으로 동작한다. 리코드 단계는, 리코드 스트림은 '프리-디코드' 스트림에 비해 더 에러가 없다는 이유로, 비터비 디코드 단계(708)에 들어가는 '프리-디코드' LSB 스트림 대신에 이용하기 위한 리코드 스트림을 생성하기 위해 수행된다. 언급한 바와 같이, 리코딩 단계는 동일한 파라미터들(파라미터 레지스터 섹션(410)의 콘볼루션 제약 길이, 제1 및 제2 콘볼루션 다항식, 및 제1 및 제2 펑쳐 다항식)이 콘볼루션 인코딩 시퀀스에 적용되는 콘볼루션 인코딩 단계와 유사하다. 리코드 단계(710)로부터의 출력은, 'TCM 코드워드 길이' LSB들의 원래의 '포스트-인코드' LSB 시퀀스에 대한 디코더의 최상의 추정치이다.
단계(712)는, 도 6의 디맵퍼(620)에 의해 실행될 때, 단계(710)에 의해 생성된 리코드 스트림에 비추어 단계(706)에 의해 생성된 MSB들에 관해 동작한다. MSB들은, 디코딩 프로세스의 이 시점에서, 파라미터 레지스터 섹션(410)에서 명시된 'TCM 코드워드 길이'의 MSB 부분을 형성한다. 인코딩된 형태로부터 언-인코딩된(un-encoded) 형태로의 MSB 값들의 디맵핑 변환이 수행되고, 이것은 도 5의 단계(514)의 역 변환이다. 단계(712)는, 로직 게이트 또는 룩업 테이블의 면에서 단계(514)의 경우에서와 같이 구현될 수 있다. 순방향 및 역방향 사례 양쪽 모두에서, 각각 맵퍼(450)(도 4) 및 디맵퍼(620)(도 6) 뿐만 아니라 맵핑 단계(514)(도 5) 및 디맵핑 단계(712)(도 7)에 관하여, 입력과 출력 사이에는 1 대 1 관계가 존재한다는 점을 이해하여야 한다. 모든 입력은 맵퍼 및 디맵퍼 양쪽 모두에 대해 유일한 하나의 올바른 출력값을 가진다. 즉, 맵퍼와 디맵퍼 사이의 관계는 서로 정확히 역이다. 현재의 실시예에서, 맵핑은 본 개시에 비추어 당업자에 의해 용이하게 구현될 수 있는 2진 대 그레이 코드 변환이다. 다시 한번, 이 변환은, 인코더측에 역 그레이 코드 대 2진 변환이 적용된 경우에만 수행된다. 리코드된 LSB 스트림의 이용은, 디맵핑 출력을 인코딩 동안에 단계(514)에 의해 생성된 원래의 인코딩된 MSB 스트림의 원래 MSB들에 더욱 근접하게 정합하게 함으로써, 개선된 결과를 달성한다. 단계(712)로부터의 출력은 한 세트의 'TCM 코드워드 길이' MSB 심볼이다.
단계(714)에서, 디코드 LSB 스트림은 단계(708)로부터 수신되고 MSB 스트림은 단계(712)로부터 수신되어, 'TCM 코드워드 길이' 포스트-디코드 TCM 심볼들의 단일 스트림으로 병합된다. 이 시점에서, 스트림은, RS 심볼들의 배열 위에 TCM 심볼들의 스트림이 중첩하는 도 2에 의한 예시적 경우에 나타난 것과 동일한 포맷으로 복구된다. 또한, 멀티플렉서(646), 및 도 6의 MSB 버퍼(640), MSB FIFO(642), LSB 버퍼(624), MSB 카운터(644), 및 LSB 카운터(648)를 포함한 관련된 동작은 2개 스트림의 병합을 수용한다. 단계(714)의 결과는, 파라미터 레지스터 섹션(410)에 따른 폭이 '비트 밀도 설정'인 심볼들의 시퀀스로서 출력되는 TCM 심볼들의 스트림이다.
여기서, 'TCM 코드워드 길이' 포스트-디코드 TCM 심볼들은 RS 표현으로 변환된다. 이 프로세스는 도 2에 도시된 예시적 경우와 동일하다. MSB들 및 LSB들은 그들 각각의 RS 심볼 표현으로 변환되고, MSB 및 LSB 양쪽 모두로부터의 대응하는 비트들은, 정확한 배열의 RS 심볼들 및 이들 내의 비트들이, 적어도 시스템 능력 내에서, 인코드 시퀀스(도 6 참조)에 의해 생성된 원래의 언-인코딩된 시퀀스로서 얻어질 수 있도록 하는 비트 위치들에서, 대응하는 RS 심볼들 내로 대체되어 들어간다.
단계(716)에서, 단계(714)로부터의 병합된 MSB/LSB 스트림은 프리-디코드 RS 심볼들의 재구축된 스트림 내로 팩킹된다. 이 단계는, MSB 경로 및 LSB 경로로부터 RS 디코더(650) 내로 선택적으로 공급되는 도 6의 멀티플렉서(646)의 동작을 통해 구현된다는 점에 유의한다. 단계(716)로부터 생기는 재구축된 스트림은 (RS 심볼 포맷의) 사용자 데이터와 RS 패리티 심볼 양쪽 모두를 포함한다. 출력 스트림의 길이는, 파라미터 레지스터 섹션(410)에 따른 'RS 데이터 길이'와 'RS 패리티 길이'의 합이다. 이 RS 심볼 스트림과 원래의 프리-TCM-인코드 RS 심볼 스트림 사이의 차이는, 여태까지의 기입 및 되판독 프로세스에 응답하여 잔여 에러들을 포함하는 현재 스트림의 가능성에 있다. RS 디코딩을 포함한 후속 단계들은 현재의 출력 심볼들로부터 오류 심볼들을 검출하고 제거하는 역할을 한다.
RS 디코딩은 단계(718 및 720)를 포함한다. 초기에, 단계(718)는 신드롬(syndrome)이라 불리는 한 세트의 값을 계산하기 위하여 단계(716)에 의해 생성된 RS 심볼 스트림을 수신한다. 신드롬 계산은, 길이가 'RS 심볼 길이' + 'RS 패리티 길이'인 RS 심볼 세트로 시작하여 이들을 이용하여 신드롬을 계산한다. RS 디코딩 단계로서 신드롬 계산은, RS 디코딩에 친숙한 당업자에 의해 잘 이해되고 있다. 따라서, 간결성의 목적을 위해 일부 상세사항은 제공되지 않을 것이다. 현재의 목적상, 신드롬의 개수는 RS 코드워드의 소정 크기에 관한 패리티 심볼의 개수와 항상 동일하므로, 파라미터 'RS 패리티 길이'는 신드롬의 관리에 적용된다는 점에 주목하는 것으로 족하다. 인터리빙이 선택되면, 패리티 심볼들(및 신드롬)의 개수는, 'RS 패리티 길이'를 파라미터 레지스터 섹션(410)에 따른 'RS 인터리빙 인자'로 나눈 값에 대응한다.
단계(718)에서 결정된 RS 신드롬은 단계(720)에 적용되어 RS 심볼들의 각 'RS 데이터 길이' 단위에 존재할 수 있는 임의의 오류 심볼들을 검출하고 정정한다. 'RS 패리티 길이' 신드롬들은, 이들 신드롬들 중 임의의 것이 비제로 값을 가진다면 에러의 위치와 값을 계산하는 알고리즘 절차에 의해 사용된다. 모든 신드롬들이 제로값이면, 대수적 정정 절차는 건너뛰는데, 이것은 모든 신드롬들 내의 제로 값은 모든 RS 심볼 입력에서 올바름(에러 없음)의 표시이기 때문이다.
모두 제로(all zero) 기준이 만족되지 않으면, 'RS 데이터 길이'의 각 스트림이 단계(720)의 출력으로서 나오기 전에 정정 프로세스가 적용된다. 모두 제로 기준이 만족되면, 정정 절차는 바이패스되고, 'RS 데이터 길이' 심볼들의 연관된 스트림이 단계(720)의 출력으로서 나온다.
단계(722)는 단계(722)로부터 RS 심볼들의 'RS 데이터 길이' 단위를 수신하고, RS 심볼 데이터를 사용자 데이터 심볼들의 출력 스트림 내로 팩킹함으로써 정정된 RS 심볼들을 사용자 데이터 포맷으로 변환한다. 단계(722)는 도 5의 단계(506)의 역임에 유의한다. 여기서, 'RS 데이터 길이' 심볼들은 '사용자 데이터 길이' 사용자 데이터 심볼로 변환되고, 여기서 이들 파라미터들은 파라미터 레지스터 섹션(410)에 따라 명시된다. 도 5의 단계(506)의 순방향 변환이 최종 RS 심볼로의 추가 비트들의 삽입을 요구했다면, 이 단계는, 심볼이 사용자 데이터 포맷으로 변환될 때의 최종 RS 심볼과 동일한 비트수를 제거한다. RS 심볼폭 및 사용자 데이터 심볼폭 양쪽 모두가 변할 수 있는 상이한 구성들이 적용될 수 있다. 도 6의 디코더(22)는, RS 심볼 크기가 10비트(RS 디코더(650)를 떠나는 것으로 표시된 바와 같음)이고 사용자 데이터 심볼 크기가 8비트(RS 대 사용자 데이터 팩커(670)를 떠나는 사용자 데이터에 대해 표시된 바와 같음)인 디코더(22)의 실시예의 구성을 도시한다. 주어진 실시예 또는 다른 실시예들의 다른 구성들은, RS 심볼 및 사용자 데이터 심볼 양쪽 모두에 대해 상이한 크기를 이용할 수도 있다.
앞서 언급한 바와 같이, 파라미터들은 일부 실시예들에서는 인코딩 및 디코딩 양쪽 모두에 대해 즉석에서 변경가능할 수 있다. 이 목적을 위해, 파라미터 레지스터 섹션의 한 실시예가 도 8에 도시되어 있으며, 개괄적으로 참조번호(410')로 표시되어 있다. 파라미터 레지스터 섹션의 이 실시예는 레지스터 세트 0-3으로서 도시된 복수의 레지스터 뱅크를 포함한다. 이 레지스터 세트는 버스(800)에 접속되고, 버스(800)는, 차례로, CPU(412)에 접속된다. 각 레지스터 세트는 멀티플렉서(810)와 인터페이싱한다. 각각 참조 번호(812 및 814)로 표시된 모드 선택 라인(0 및 1)은, 멀티플렉서(810)를 이용하여 레지스터 세트들 중 임의의 하나를 선택하는 것을 제공한다. 각 레지스터 세트는 CPU(412)에 의해 독립적으로 프로그램가능하다. 각 레지스터 세트 또는 뱅크는, 모드 선택 라인(812 및 814)에 기초하여 즉석으로 뱅크들 중 개개 뱅크를 선택하기 위한 목적으로 CPU(412)에 의해 선택가능하다. 따라서, 구성 변경은, 활성 뱅크를 디스에이블(disable)하고 또 다른 뱅크를 인에이블(enable)함으로써 최소한의 레이턴시로(즉석으로) 달성될 수 있다. 필요한 파라미터 레지스터들이 사용될 레지스터 뱅크에 로딩되는 한, 레지스터 뱅크들간의 전환은 모드 선택 라인들에 의해 명시된 값을 변경함으로써 달성될 수 있다. 특정 실시예에 대해 임의의 적절한 개수의 레지스터 뱅크가 이용될 수 있으며, 4개의 레지스터 뱅크를 이용하는 도 8의 실시예는 예로서 제공되는 것이며, 제한하고자 하는 의도는 아니라는 점을 이해하여야 한다.
버스(800)를 경유하여, CPU(412)는 선택된 동작 모드의 변경에 응답하여 임의의 필요한 레지스터를 관리할 수 있다. CPU는, 예를 들어, 무엇보다도 사용자 데이터 길이 및 콘볼루션 다항식과 같은 파라미터의 변경에 응답하여, 및 호스트 장치에 응답하여 모드를 변경할 수 있다. 파라미터에서의 변경은 코드워드별 기초하에 신속하게 이런 방식으로 반영될 수 있다는 점을 이해하여야 한다. 한 실시예에서, 레지스터는 뱅크 선택 신호를 생성하는데 이용될 수 있으며, 이들 레지스터들은 뱅크에서의 변경이 필요하다고 판정되는 임의의 시간에 마이크로프로세서에 의해 기입될 수 있다. 모드 변경은, 메모리 셀들 중 한 서브셋은 파라미터들의 한 세트에 따라 기입 및 판독되도록 의도되고 메모리 셀들의 상이한 서브셋은 파라미터들의 또 다른 세트에 따라 기입 및 판독되도록 의도되도록, 예를 들어, 메모리 셀들의 배열에 기초하여 발생할 수 있다. 메모리 셀 서브셋들은, 이 점에서, 컴퓨터 저장 장치를 포맷팅함으로써 생성되는 파티션(partition)으로서 취급될 수 있다.
인코더 및 디코더 기능에 관하여, 뱅크화된 아키텍쳐를 이용하는 실시예들에서 즉석 구성 변화를 달성하는데 있어서의 시간적 고려사항은, 뱅크 선택 0 및 뱅크 선택 1 상태 변경과 데이터 시퀀스 사이의 관계에 존재한다. 한 실시예에서, 뱅크 선택 변경은 어떠한 데이터 시퀀싱 동작도 없는 기간 동안에만 허용될 것이다. 즉, 시스템은 유휴상태이거나 유휴화될 수 있다. 이것은, 영향받는(affected) 기능(들)의 내부 상태 활동과 외부 신호 활동 양쪽 모두에 적용된다. 이들 양쪽 모두가 유휴상태에 있는 한, 한 레지스터 구성으로부터 또 다른 레지스터 구성으로의 신속한 변경은 선행하는 데이터 시퀀싱에 영향을 주지 않고 달성될 수 있으며, 현재의 레지스터 변경은 선택된 구성을 다음 데이터 시퀀스에 적용할 수 있다. 변경의 잠재적 다양성은, 적어도, 사용자 데이터 길이, RS 용량, (또한 RS 패리티 길이를 암시하는) T, RS 인터리빙 인자, 콘볼루션 다항식, 펑쳐 다항식, 비트 밀도 설정, 및 선행 파라미터들의 조합에 의해 결정되지만 파라미터 레지스터 섹션 내에 명시적으로 프로그램될 수 있는 TCM 코드워드 길이의 변화를 아우르도록 충분히 광범위할 수 있다. 임의 개수의 하나 이상의 파라미터들이 동시에 변경될 수 있어서, 최근 기술에 비해 광범위한 이점을 제공하는 정도의 융통성을 허용할 수 있다는 것을 이해하여야 한다. 전술된 바와 같이, 코드 효율은 파라미터 값들을 변경함으로써, 그리고 이로써 레지스터 세트들간의 전환 결과에 의해 직접적인 방식으로 영향받는다.
이제, 참조번호(900)로 개괄적으로 표시된 도 8의 뱅크화된 파라미터 레지스터 배열을 포함하는 시스템의 동작을 위한 방법의 한 실시예를 나타내는 흐름도인 도 9를 참조한다. 도 9에서, 레지스터 뱅크 내의 파라미터들은 인코더 및 디코더 양쪽 모두에 의해 공유된다. 그러나, 다른 실시예들에서, 디코더 및 인코더는, 각각의 전용 레지스터 뱅크에 의해 별도로 지원될 수 있다. 프로세스는 시작 단계(902)에서 시작한다. 지원하고자 하는 임의의 특정 구성에 대해, 904에서, CPU(412)(도 4 및 도 6) 및 펌웨어(480)는, 원하는 레지스터 구성이 레지스터 뱅크들 중 하나 내에 이미 프로그램되었는지를 확립한다. 새로운 구성이 사용될 것이라고 결정되면, 동작은, 새로운 구성에 대해 레지스터 뱅크가 선택되는 단계(906)로 진행한다. 이 선택은, 먼저, 소정 구성으로 이전에 프로그램되지 않은 레지스터 뱅크를 선택할 수 있는 임의의 적절한 방식으로 이루어질 수 있고, 이러한 미점유 레지스터 뱅크가 이용가능하지 않다면, 어느 레지스터 뱅크가 새로운 구성으로 덮어쓰기될 수 있는지에 관한 판정이 이루어진다. 레지스터 뱅크가 선택된 후에, 908에서, 선택된 레지스터 뱅크가 활성 뱅크인지가 확인된다. "활성" 뱅크는, 인코더 및 디코더를 제어하기 위해 현재 선택된 뱅크이다. 하나의 "활성" 레지스터 뱅크만이 있을 수 있다는 점을 이해하여야 한다. 정의에 의해, 활성이 아닌 모든 레지스터 뱅크는 비활성이다. 비활성 레지스터 뱅크들로부터만 레지스터 뱅크의 선택이 이루어지는 것을 예상해 볼 수도 있다. 그러나 선택이 활성 레지스터 뱅크가 되도록 선택이 이루어진다면, 프로세스는 906으로 복귀하여 또 다른 선택을 한다. 반면, 906에 의해 선택된 레지스터 뱅크가 활성이 아니면, 동작은 910으로 진행한다. 910에서, CPU는 선택된 뱅크 내에 다양한 파라미터 레지스터를 프로그램 또는 기입하고, 여기서 각 뱅크는 앞서 설명된 파라미터 레지스터 섹션(410)에 대한 값들 각각의 세트를 저장한다. 일단 선택된 레지스터 뱅크에 구성이 기입되고 나면, 그것은 인코더 또는 디코더에 의해 사용할 준비가 된다. 다음 인코더 또는 디코더 시퀀스 동안에 새로이 프로그램된 구성이 사용될 것이라고 CPU가 결정하면, CPU는 912에서 인코더 또는 디코더가 현재 이전의 시퀀스에 참여하고 있는지를 판정한다. 대답이 예이면, CPU는 914에서 현재 활동이 완료될 것을 기다려야 한다. 잠시 단계(904)로 되돌아가서, 기존의 구성이 선택되는 경우, 동작은 단계(912)로 진행한다.
인코더 및 디코더 양쪽 모두가 비활성인 것으로 판정되면, 단계(916)는 단계(914)로부터 진입되거나, 단계(912)에 의한 '아니오' 결정으로부터 진입된다. 단계(916)는 먼저 인코더 및 디코더가 새로운 데이터 시퀀스에 참여하는 것을 금지할 수 있다. 이 방법은, 새로운 또는 다음 레지스터 뱅크 구성이 활성화될 때까지 어떠한 새로운 시퀀스도 개시되지 않는 것을 보장한다.
도 8과 연계하여 도 9를 참조하면, 다음 구성의 활성화는, 도 8의 라인들(812 및 814)을 이용함으로써 CPU가 뱅크 선택의 값을 변경할 때 918에서 달성된다. 인코더 또는 디코더에서의 시퀀스 개시를 금지하도록 단계(916)가 적용된다면, 단계(920)는 새로운 시퀀스에 대해 인코더 및 디코더를 인에이블한다. 인코더 및 디코더 양쪽 모두가 인에이블되자마자, 프로세스는 920에서 완료된다. 다른 구성 설정에 의해 지정된 셀로부터 판독하거나 셀에 기입하라는 호스트로부터의 요청에 응답하여 CPU에 의해 트리거되는 후속하는 구성 변경은 단계(902)에서 재진입을 야기할 것이다.
일단 단계(904) 내지 단계(914)가 달성되고 나면, 단계(916) 내지 단계(920)는, CPU가 뱅크 선택(812 및 814)(도 8)을 업데이트하라는 명령을 실행할 필요가 있는 시간에서만 구성 변경을 달성한다는 점을 이해하여야 한다. 즉, 구성 변경은 일반적으로 매우 신속하게 이루어져 후속하는 실제 데이터 시퀀싱에 영향이 없거나 거의 영향이 없다.
다시 도 1을 참조하면, 상기에 비추어, 비휘발성 메모리(14)는 코드워드라 불리는 단위로 데이터를 저장 및 검색한다는 것을 이해하여야 한다. 각 코드워드는 인코더(20)에 의해 실행된 인코딩 프로세스의 결과이다. 코드워드가 비휘발성 메모리(14)로부터 검색될 때, 디코더(22)에 의해 실행되는 디코딩 프로세스는 사용자 데이터를 호스트 컴퓨터(12)에 반환한다. 코드워드는, 코드워드마다 다를 수 있는 특정 길이 및 특정 비트 밀도 설정의 멀티레벨 심볼들의 모음이다. 비트 밀도 설정은 각 메모리 셀에 저장되는 비트수를 결정한다. 메모리 셀당 정수개의 비트를 저장하는 실시예에서, 한개 셀의 내용은 코드워드로부터의 한개 TCM 심볼을 구성한다. 코드워드의 길이는 코드워드를 형성하는 TCM 심볼들의 수이다. 예로서, 3개의 코드워드가 도 1에 개략적으로 도시되어 있고, 여기서, 수평 길이는 각 코드워드에서 메모리 셀들의 개수를 나타내며, 수직 폭은 비트 밀도에 대응하는 각 메모리 셀에서의 비트수를 나타낸다. 제1 코드워드(960), 제2 코드워드(962), 및 제3 코드워드(964)가 도시되어 있다. 코드워드(962)는 코드워드(960)보다 비교적 적은 수의 심볼들을 포함하는 것을 볼 수 있지만, 심볼당 비교적 더 많은 비트를 포함한다. 코드워드(964)는 코드워드(960) 또는 코드워드(962)보다 비교적 더 적은 심볼들을 포함하지만, 코드워드(960) 또는 코드워드(962)보다 심볼당 비교적 더 많은 비트를 포함한다는 것을 알 수 있다. 따라서, 다양한 TCM 심볼폭과 다양한 길이를 갖는 코드워드들이 비휘발성 메모리에 동시에 저장된다는 것이 명백하다. 이 점에서, 메모리(14)는, 다이의 상이한 영역은 상이한 코드 효율로, 예를 들어, 상이한 비트 밀도에서 데이터를 저장할 수 있는 단일의 집적 회로 다이를 나타낼 수 있다. 또 다른 실시예에서, 메모리(14)는 복수의 집적 메모리 회로 다이들 간에 분할될 수 있다.
여전히 도 1을 참조하면, 메모리(14)에 기입되는 전체 데이터 구조는 개략적으로 도시되어 있고 참조 번호(970)로 표시되어 있다. 이 데이터 구조는 주어진 사용자 데이터를 포함하는 싱글 기입 동작에 응답하여 생성되었고 판독 동작에서 용이하게 판독되어 주어진 사용자 데이터를 재생성한다는 것을 이해해야 한다. 데이터 구조(970)는, 본 예에서는, 참조 번호(972, 974, 976, 978 및 980)로 표시된 5개의 코드워드로 구성된다. 코드워드(971, 974, 976, 및 978) 각각은 상이한 길이로 될 수 있다. 본 예에서, 코드워드(972, 976, 및 978)는 동일한 제2 길이로 되어 있고, 동일한 개수의 TCM 심볼들로 구성되는 반면, 코드워드(974)는 상이한 제2 길이로 되어 있다. 종료 코드워드(980)는 역시 제3 길이의 데이터 구조(970)의 다른 코드워드들보다 짧다. 이 점에서, 여기서의 교시에 비추어, 전술된 바와 같이 최종 또는 종료 코드워드는 종료 또는 제로-채우기 시퀀스를 통해 끝날 수 있기 때문에, 예를 들어, 어떤 요구되는 코드워드 길이까지의 마지막 코드워드 내의 빈 공간을 채움으로써 전송 내의 매 코드워드가 동일한 길이가 될 필요는 없다는 것을 이해하여야 한다. 또한, 데이터 구조(970)로 설명된 바와 같이, 데이터 구조 내의 연속된 코드워드들은, 메모리 내의 메모리 셀들의 인접 세트들에 존재하더라도, 상이한 비트 밀도를 포함하는 상이한 코드 효율로 데이터를 저장할 수 있다. 예를 들어, 코드워드(972)는 메모리 셀당 4비트의 비트 밀도로 데이터를 저장할 수 있고, 코드워드(974)는 메모리 셀당 2비트의 비트 밀도로 데이터를 저장할 수 있고, 코드워드(976)는 메모리 셀당 3비트의 비트 밀도로 데이터를 저장할 수 있고, 코드워드(978)는 메모리 셀당 3비트의 비트 밀도로 데이터를 저장할 수 있고, 코드워드(980)는 메모리 셀당 1 비트의 비트 밀도로 데이터를 저장할 수 있다. 본질적으로 코드워드별로 코드 효율을 변경하는데 있어서 제공되는 융통성에 관하여 어떠한 제한도 도입되지 않는다.
이제 분수 비트 코딩에 관한 추가의 상세사항에 주목한다. 일반적으로, 분수 비트 코딩은, 한 그룹의 B 입력 비트를 취하고 이들 비트 조합들을, 각각이 L개의 가능한 레벨 값들을 갖는 다수의 셀(C)에 대한 상이한 레벨 값들로 맵핑함으로써 용이하게 구현될 수 있다. 맵핑에 대한 요건은 다음과 같이 주어진다:
예를 들어, 7개의 입력 비트를, 각각이 12개의 가능한 레벨들 중 하나로 설정되는 2개의 셀에 맵핑하는 것은, 셀당 7 ÷ 2 = 3.5 비트를 산출할 것이다.
이러한 교시는 여기서 제공된 프레임워크 내에서 효율적으로 구현될 수 있다. 맵핑 기능은 분수 비트 밀도의 적용과 연계하여 도 4의 맵퍼(450)에 의해 적용될 수 없다는 점에 유의한다. 원하는 개수의 레벨 L이 짝수이면, LSB는 수정없이, 예를 들어, 셀당 3 또는 4비트의 경우에, 펑쳐링 및 플레이스홀더를 변경하지 않고, 처리될 수 있어서, 분수 코딩이 단지 MSB로 처리될 수 있다. 셀당 3.5 비트 예에서, 5개의 MSB 비트들은 12 ÷ 2 =6개의 가능한 레벨들의 2개 셀들 내로 맵핑된다. 인입 MSB 값들을 그레이 코드로서 취급하는 전술된 선택사항적 단계는 분수 인코딩과 연계하여 적용되어서는 안 된다는 점을 이해하여야 한다.
언맵핑된 TCM 심볼들이 생성되는 팩킹 동안에, 팩킹 구조는 TCM 심볼당 2 MSB 비트(셀당 3비트 모드)와 3 MSB 비트(셀당 4비트 모드) 사이에서 변할 것이다. 이렇게 함으로써, C 셀에 걸쳐 정확한 비율로, 원하는 분수 비트 밀도가 평균적으로 얻어질 것이다. 다시 한번, 이 예에서, 코딩 블록 C는 2 셀이므로, 팩커는 TCM 심볼당 3 MSB 비트와 TCM 심볼당 2 MSB 비트 사이에서 교대한다. 2개 셀의 경우, 3 + 2 MSB 비트 + 2 LSB 비트 = 7 사용자 비트가 있어서, 셀당 3.5 비트를 산출한다.
MSB 맵핑의 관점에서, B 언맵핑된 TCM 심볼 MSB들의 그룹들이 집합적으로 취해지고, L ÷ 2 레벨들의 C 세트들로의 그룹으로서 맵핑된다. 본 예에서, 3 + 2 MSB 비트들이, 각각이 6개의 가능한 레벨값의 2 셀들 내에 맵핑된다. 5개의 MSB 비트들에 대해, 25 = 32개의 입력 값들이, 2진 값들로부터 C 셀 값들로의 맵핑에 기초하여 2개의 메모리 셀들의 62 = 36개의 가능한 코딩들로 표현될 수 있다. 이 실시예의 경우, 가장 가까운 유효한 2진 입력값으로 맵핑될 수 있는 셀 레벨 값들의 4개의 미사용 조합이 있을 것이다. 셀 레벨 값들의 4개의 미사용 조합은 62=36개의 가용 레벨들과 실제로 사용되는 25=32개의 레벨들 사이의 차이이다. 상기에 비추어, 당업자라면 광범위한 분수 비트 구조를 용이하게 구현할 수 있을 것이다.
도 10을 참조하면, 도 1의 비휘발성 메모리(14)에 저장될 수 있는 데이터 구조의 또 다른 실시예가 개략적으로 나타나 있으며, 참조 번호(100')로 표시되어 있다. 데이터 구조(100')는 초기 부분(102') 및 종료 부분(104')을 포함한다. 데이터 구조(100')는 직전의 논의를 예시한다는 것을 이해하여야 한다. 예를 들어, MSB들은, 하나의 TCM 심볼로부터 다음 TCM 심볼까지, 3개의 MSB들과 2개의 MSB들 사이에서 교대한다. 또한, 데이터 구조(100')와 도 2의 데이터 구조(100)의 비교는, 데이터 구조(100')는 셀당 3.5 비트의 분수 비트 밀도를 구현한다는 점을 제외하고는, 데이터 구조(100)와 대체로 동일하다는 것을 드러낸다. 따라서, 본 개시에 의해 밝혀진 교시에 비추어, 당업자라면 분수 비트 인코딩을 이용하는 광범위한 시스템 및 방법을 용이하게 구현할 수 있을 것이다.
본 발명의 전술한 설명은 예시와 설명을 위해서 제공되었다. 본 발명을 빠짐없이 드러내고자 하거나 개시된 정확한 형태나 형태들로 제한하기 위함은 아니며, 당업자가 그의 소정의 수정, 치환, 추가, 및 부-조합(sub-combination)을 인식하는 다른 수정 및 변형이 상기 교시에 비추어 가능할 것이다.
Claims (44)
- 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서의 장치로서,
상기 디지털 시스템을 통해 제공되는 입력 데이터를 포함하는 입력 데이터 스트림을 수신하여 일련의 리드 솔로몬(Reed Solomon) 심볼들로 구성된 리드 솔로몬 인코딩된 스트림을 생성하기 위한 리드 솔로몬 인코더;
상기 리드 솔로몬 인코딩된 스트림을 수신하여, 재블록화된(re-blocked) 출력 데이터 스트림의 전부는 아닌 적어도 하나의 부분이 콘볼루션 코드(convolutional code)에 기초한 코드 효율에 예속되게(subject to) 구성되도록 상기 재블록화된 출력 데이터 스트림을 생성하는 팩킹 구조(packing arrangement) ― 상기 팩킹 구조는, 상기 팩킹 구조에 제공된 하나 이상의 입력 파라미터들의 하나 이상의 값들의 변경에 기초하여 상기 입력 데이터 스트림 내의 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 콘볼루션 코드의 코드 효율의 변경을 지원하도록 상기 재블록화된 출력 데이터 스트림을 수정하도록 구성됨 ―; 및
상기 재블록화된 출력 데이터 스트림을 수신하고 TCM 코드를 적용하여 TCM 인코딩된 출력 데이터 스트림을 생성하기 위한 맵핑 구조(mapping arrangement) ―상기 맵핑 구조는, 상기 입력 파라미터들의 값들에 기초하여 상기 코드 효율의 변경을 지원하도록 상기 콘볼루션 코드의 코드 효율에 따라 상기 TCM 인코딩된 출력 데이터 스트림의 부분을 콘볼루션 인코딩하여 저장된 데이터로서 내부에 저장하기 위한 상기 비휘발성 메모리로 향하는 맵핑된 출력 데이터 스트림을 생성하기 위한 콘볼루션 인코더를 포함함―
를 포함하는 장치. - 제1항에 있어서,
상기 팩킹 구조는 적어도 부분적으로 상기 코드 효율에 기초하여 상기 재블록화된 출력 데이터 스트림의 상기 부분 내에 하나 이상의 플레이스홀더(placeholder) 비트들을 삽입하도록 구성되고, 상기 콘볼루션 인코더는 상기 맵핑된 출력 데이터 스트림에서 여분 코드 비트(extra code bit)들로 상기 플레이스홀더 비트들을 채우는 장치. - 제2항에 있어서,
상기 팩킹 구조 및 상기 맵핑 구조는, 상기 TCM 인코딩된 출력 데이터 스트림을 형성하는 복수의 TCM 심볼들의 각 심볼의 최하위 비트로서 상기 TCM 인코딩된 출력 데이터 스트림의 상기 부분을 콘볼루션 인코딩하도록 협력하는 장치. - 제2항에 있어서,
각각의 TCM 심볼은 복수의 비트로 구성되고, 상기 팩킹 구조 및 상기 맵핑 구조는, 상기 TCM 인코딩된 출력 데이터 스트림을 형성하는 복수의 TCM 심볼들의 각 심볼의 비트들 전부보다는 적은 적어도 최하위 비트로서 상기 TCM 인코딩된 출력 데이터 스트림의 상기 부분을 콘볼루션 인코딩하도록 협력하되, 상기 최하위 비트와 상기 부분의 일부를 형성하는 임의의 추가 비트들이 상기 최하위 비트로부터 오름차순의 유의성(significance)으로 되도록 인코딩하는 장치. - 제2항에 있어서,
상기 장치는 상기 플레이스홀더 비트들을 생성하기 위한 상기 입력 파라미터들 중 적어도 하나에 기초하는 펑쳐 패턴(puncture pattern)을 모니터링하기 위한 펑쳐 패턴 카운터를 포함하는 장치. - 제2항에 있어서,
상기 리드 솔로몬 인코딩된 스트림은, 상기 리드 솔로몬 인코딩된 스트림의 하나 이상의 블록들이 코드워드 길이를 갖는 코드워드를 형성하도록 하는 리드 솔로몬 블록 크기에 예속되고, 상기 팩킹 구조는 상기 코드 효율에 기초하여 펑쳐 패턴에 따라 맞춤화된 개수의 플레이스홀더 비트들을 상기 재블록화된 출력 데이터 스트림에 제공하도록 구성되며, 상기 팩킹 구조는 상기 코드 효율의 변경을 위해 상기 팩킹 구조의 동작 동안에 적어도 현재 코드워드로부터 다음 코드워드로 상기 펑쳐 패턴을 변경하기 위해 상기 하나 이상의 입력 파라미터들에 기초하여 재구성가능한 장치. - 제2항에 있어서,
상기 TCM 인코딩된 출력 데이터 스트림은 복수의 TCM 심볼을 포함하고, 상기 복수의 TCM 심볼의 최하위 비트들은 상기 일련의 리드 솔로몬 심볼들로부터 취해진 제1 서브셋의 리드 솔로몬 심볼들과, 상기 제1 서브셋의 리드 솔로몬 심볼들 외에 모두를 포함하는 상기 일련의 리드 솔로몬 심볼들로부터 취해진 제2 서브셋의 리드 솔로몬 심볼들을 형성하는 장치. - 제7항에 있어서,
상기 제1 서브셋의 리드 솔로몬 심볼들 각각은, 적어도 부분적으로 상기 코드 효율에 기초하여 상기 제2 서브셋의 하나 이상의 리드 솔로몬 심볼들의 개수만큼 상기 일련의 리드 솔로몬 심볼들 내에서 서로 분리되되, 상기 일련의 리드 솔로몬 심볼들 내에서 상기 제1 서브셋의 리드 솔로몬 심볼들을 분리시키는 상기 제2 서브셋의 리드 솔로몬 심볼들의 개수가 상기 코드 효율의 변경에 응답하여 변할 수 있도록 분리되는 장치. - 제2항에 있어서,
각 TCM 심볼은 복수의 비트들로 구성되고, 상기 팩킹 구조 및 상기 맵핑 구조는, 상기 TCM 인코딩된 출력 데이터 스트림을 형성하는 비트들 전부 보다는 적은 복수의 TCM 심볼들의 각 심볼의 적어도 최하위 비트로서 상기 TCM 인코딩된 출력 데이터 스트림의 상기 부분을 콘볼루션 인코딩하기 위해 협력하도록 구성되고, 상기 맵핑 구조는 콘볼루션 인코딩되는 상기 최하위 비트들 이외의 상기 복수의 TCM 심볼들의 각 심볼의 나머지 비트들의 서브셋에 그레이 코드 대 2진 코드 변환(Gray code to binary code conversion)을 적용하기 위한 맵퍼 섹션(mapper section)을 포함하는 장치. - 제1항에 있어서,
상기 리드 솔로몬 인코딩된 스트림은 상기 리드 솔로몬 인코딩된 스트림의 하나 이상의 블록들이 코드워드 길이를 갖는 코드워드를 형성하도록 하는 블록 크기에 예속되고, 상기 맵핑 구조는 상기 콘볼루션 인코딩의 생성의 일부로서 적어도 2개의 콘볼루션 다항식의 세트를 이용하는 콘볼루션 인코더를 포함하고, 상기 맵핑 구조는 또한, 상기 콘볼루션 다항식들이 (i) 상기 세트를 형성하는 콘볼루션 다항식들의 총 개수 및 (ii) 상기 세트 내의 상기 콘볼루션 다항식들 중 적어도 하나 중에서 적어도 하나를 변경하기 위해 상기 입력 파라미터들에 응답하여 변하도록 구성되는 장치. - 제1항에 있어서,
상기 비휘발성 메모리는 적어도 하나의 메모리 다이에 의해 포함된 복수의 메모리 셀로 구성되고, 상기 리드 솔로몬 인코딩된 스트림은, 상기 리드 솔로몬 인코딩된 스트림의 하나 이상의 블록들이 코드워드 길이를 갖는 코드워드를 형성하도록 하는 블록 크기에 예속되고, 상기 팩킹 구조는 상기 리드 솔로몬 인코딩된 스트림을 상기 메모리 셀들의 적어도 일부에 대한 지정된 비트 밀도에 예속시키도록 상기 맵핑 구조와 협력하도록 구성되며, 상기 팩킹 구조는 상기 팩킹 구조의 동작 동안에 적어도 현재의 코드워드로부터 다음 코드워드로 상기 지정된 비트 밀도를 변경하기 위해 하나 이상의 입력 파라미터들에 기초하여 재구성가능한 장치. - 제11항에 있어서,
상기 팩킹 구조는 싱글 메모리 다이에 데이터의 적어도 하나의 코드워드를 제1 비트 밀도로 저장하고, 상기 싱글 메모리 다이에 데이터의 적어도 제2 코드워드를 상기 제1 비트 밀도와는 상이한 제2 비트 밀도로 저장하기 위해 상기 맵핑 구조와 협력하도록 구성되는 장치. - 제12항에 있어서,
상기 제1 비트 밀도는 셀당 1 비트 내지 3 비트가 되도록 선택되고, 상기 제2 비트 밀도는 셀당 4 비트로서 선택되는 장치. - 제11항에 있어서,
상기 지정된 비트 밀도는 상기 비휘발성 메모리의 요구되는 수명, 및 상기 비휘발성 메모리에 액세스하는 판독 동작과 연관된 출력 에러 레이트 중 적어도 하나에 기초하여 결정되는 장치. - 제1항에 있어서,
상기 비휘발성 메모리로부터의 저장된 데이터의 판독에 기초한 메모리 출력 스트림을 수신하고, 상기 코드 효율에 따라 상기 메모리 출력 스트림을 콘볼루션 디코딩하여 상기 맵핑 구조에 제공된 입력 파라미터들의 값들 중의 대응하는 값들에 기초하여 디맵핑된 출력 스트림으로서 상기 TCM 인코딩된 출력 데이터 스트림을 재생하기 위한 디맵핑 구조(demapping arrangement);
디맵핑된 출력 스트림을 수신하고, 이로부터 상기 코드 효율에 기초하여 상기 리드 솔로몬 인코딩된 스트림을 재생하기 위한 언팩킹 구조(unpacking arrangement) ― 상기 언팩킹 구조는, 상기 팩킹 구조에 제공된 상기 하나 이상의 입력 파라미터들의 값들 중 대응하는 값들에 기초하여 상기 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 콘볼루션 코드의 코드 효율의 변경에 응답함 ―; 및
상기 언팩킹 구조로부터 상기 리드 솔로몬 인코딩된 스트림을 수신하여, 이로부터, 판독 데이터로서 상기 디지털 시스템이 이용하기 위한 상기 입력 데이터를 포함하는 판독 데이터 스트림을 디코딩하기 위한 리드 솔로몬 디코더(Reed Solomon decoder)
를 더 포함하는 장치. - 제15항에 있어서,
상기 판독 데이터는, 원래 상기 입력 데이터 스트림 내에 상기 입력 데이터로서 포함된 사용자 데이터에 대응하는 장치. - 제1항에 있어서,
상기 팩킹 구조 및 상기 맵핑 구조는, 상기 비휘발성 메모리에의 저장시에 셀당 분수 개수의 비트들이 연속된 메모리 셀들의 선택된 그룹에 저장되도록, 상기 맵핑된 출력 데이터 스트림을 생성하기 위해 협력하도록 구성되는 장치. - 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서의 방법으로서,
상기 디지털 시스템을 통해 제공되는 입력 데이터를 포함하는 입력 데이터 스트림을 수신하여 일련의 리드 솔로몬 심볼들로 구성된 리드 솔로몬 인코딩된 스트림을 생성하는 단계;
재블록화된 출력 데이터 스트림의 적어도 하나의 부분이 콘볼루션 코드에 기초한 코드 효율에 예속되게 구성되도록 상기 리드 솔로몬 인코딩된 스트림으로부터 상기 재블록화된 출력 데이터 스트림을 생성하는 단계;
하나 이상의 입력 파라미터들에 기초하여 상기 입력 데이터 스트림 내의 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 콘볼루션 코드의 코드 효율을 변경하는 단계; 및
상기 코드 효율에 따라 및 상기 입력 파라미터들에 기초하여 상기 재블록화된 출력 데이터 스트림의 상기 부분을 콘볼루션 인코딩하여 저장된 데이터로서 내부에 저장하기 위한 상기 비휘발성 메모리로 향하는 맵핑된 출력 데이터 스트림을 생성하는 단계
를 포함하는 방법. - 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서의 장치로서,
상기 디지털 시스템을 통해 제공되는 입력 데이터를 포함하는 입력 데이터 스트림을 수신하여 일련의 블록 코드 심볼들로 구성된 블록 코드 인코딩된 스트림을 생성하기 위한 블록 코드 인코더(block code encoder);
상기 블록 코드 인코딩된 스트림을 수신하여, 재블록화된 출력 데이터 스트림의 전부는 아닌 적어도 하나의 부분이 콘볼루션 코드에 기초한 코드 효율에 예속되게 구성되도록 상기 재블록화된 출력 데이터 스트림을 생성하는 팩킹 구조 ― 상기 팩킹 구조는, 상기 팩킹 구조에 제공된 하나 이상의 입력 파라미터들의 하나 이상의 값들의 변경에 기초하여 상기 입력 데이터 스트림 내의 미리 결정된 개수의 블록 코드 심볼들과 연관된 콘볼루션 코드의 코드 효율의 변경을 지원하도록 상기 재블록화된 출력 데이터 스트림을 수정하도록 구성됨 ―; 및
상기 재블록화된 출력 데이터 스트림을 수신하고 TCM 코드를 적용하여 TCM 인코딩된 출력 데이터 스트림을 생성하기 위한 맵핑 구조 ― 상기 맵핑 구조는, 상기 입력 파라미터들의 값들에 기초하여 상기 코드 효율의 변경을 지원하도록 상기 콘볼루션 코드의 코드 효율에 따라 상기 TCM 인코딩된 출력 데이터 스트림의 부분을 콘볼루션 인코딩하여 저장된 데이터로서 내부에 저장하기 위한 상기 비휘발성 메모리로 향하는 맵핑된 출력 데이터 스트림을 생성하기 위한 콘볼루션 인코더를 포함함 ―
를 포함하는 장치. - 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서의 방법으로서,
상기 디지털 시스템을 통해 제공되는 입력 데이터를 포함하는 입력 데이터 스트림을 수신하여 일련의 블록 코드 심볼들로 구성된 블록 코드 인코딩된 스트림을 생성하는 단계;
재블록화된 출력 데이터 스트림의 적어도 하나의 부분이 콘볼루션 코드에 기초한 코드 효율에 예속되게 구성되도록 상기 블록 코드 인코딩된 스트림으로부터 상기 재블록화된 출력 데이터 스트림을 생성하는 단계;
하나 이상의 입력 파라미터들에 기초하여 상기 입력 데이터 스트림 내의 미리 결정된 개수의 블록 코드 심볼들과 연관된 콘볼루션 코드의 코드 효율을 변경하는 단계; 및
상기 코드 효율에 따라 및 상기 입력 파라미터들에 기초하여 상기 재블록화된 출력 데이터 스트림의 상기 부분을 콘볼루션 인코딩하여 저장된 데이터로서 내부에 저장하기 위한 상기 비휘발성 메모리로 향하는 맵핑된 출력 데이터 스트림을 생성하는 단계
를 포함하는 방법. - 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서의 장치로서,
리드 솔로몬 인코딩된 스트림을 수신하여, 재블록화된 출력 데이터 스트림의 적어도 하나의 부분이 콘볼루션 코드에 기초한 코드 효율에 예속되게 구성되도록 상기 재블록화된 출력 데이터 스트림을 생성하도록 구성된 팩킹 구조를 포함하고, 상기 팩킹 구조는, 상기 비휘발성 메모리에 입력 데이터를 저장하기 위한 준비적인 중간 단계로서 상기 팩킹 구조에 제공된 하나 이상의 입력 파라미터들의 주어진 값들에 기초하여 입력 스트림 내의 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 상기 콘볼루션 코드의 코드 효율의 변경에 맞게 적응되는 장치. - 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서의 방법으로서,
리드 솔로몬 인코딩된 스트림을 수신하여, 재블록화된 출력 데이터 스트림의 적어도 하나의 부분이 콘볼루션 코드에 기초한 코드 효율에 예속되게 구성되도록 상기 재블록화된 출력 데이터 스트림을 생성하도록 팩킹 구조를 구성하고, 상기 비휘발성 메모리에 입력 데이터를 저장하기 위한 준비적인 중간 단계로서 상기 팩킹 구조에 제공된 하나 이상의 입력 파라미터들의 주어진 값들에 기초하여 입력 스트림 내의 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 상기 콘볼루션 코드의 코드 효율의 변경에 맞게 상기 팩킹 구조를 적응하는 단계를 포함하는 방법. - 디지털 데이터를 저장하기 위한 복수의 메모리 셀을 포함하는 비휘발성 메모리를 이용하는 디지털 시스템의 일부로서의 장치로서,
상기 시스템에 의해 제공되는 입력 데이터 스트림을 수신하여 상기 메모리 셀들에 저장하기 위한 블록 크기에 기초하는 출력 데이터 스트림을 생성하는 팩킹 구조를 포함하고, 상기 팩킹 구조는, 선택적으로, 상기 메모리 셀들에 저장하기 위한 제1 블록 크기를 생성하기 위해 하나 이상의 입력 파라미터들에 기초하여 제1 모드에서 동작가능하고, 그의 동작 동안에 상기 블록 크기를 선택적으로 변경하기 위한 상기 입력 파라미터들의 변경에 응답하여 상기 제1 블록 크기와는 상이한 제2 블록 크기를 생성하기 위해 적어도 제2 모드에서 동작가능한 장치. - 제23항에 있어서,
상기 제1 모드 및 상기 제2 모드 중 적어도 하나는, 셀당 분수 개수의 비트들이 적어도 메모리 셀당 평균적으로 상기 메모리 셀들에 저장되게 하는 장치. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 메모리 셀들 중 적어도 일부가 하나보다 많은 비트를 저장할 수 있도록 디지털 데이터를 저장하기 위한 복수의 메모리 셀을 포함하는 비휘발성 메모리로 구성된 디지털 시스템의 일부로서의 장치로서,
상기 비휘발성 메모리로부터의 저장된 데이터의 판독에 기초하여 메모리 출력 스트림 ― 상기 메모리 출력 스트림은 TCM 인코딩된 출력 데이터 스트림의 형태이며, 상기 TCM 인코딩된 출력 데이터 스트림의 전부는 아닌 한 부분은 인코딩 동작 동안에 한 세트의 파라미터들의 주어진 값들에 의해 설정되는 코드 효율에 예속됨 ―을 수신하고, 상기 코드 효율에 기초하여 상기 TCM 인코딩된 출력 데이터 스트림을 콘볼루션 디코딩하여, 상기 인코딩 동작 동안에 제공된 입력 파라미터들의 주어진 값들 중 대응하는 값들에 기초하여 디맵핑된 출력 스트림 ― 이 디맵핑된 출력 스트림은 리드 솔로몬 인코딩된 스트림을 포함함 ―으로서 상기 TCM 인코딩된 출력 데이터 스트림을 재생하기 위한 디맵핑 구조;
상기 디맵핑된 출력 스트림을 수신하고, 이로부터 상기 코드 효율에 기초하여 상기 리드 솔로몬 인코딩된 스트림을 재생하기 위한 언팩킹 구조 ― 상기 언팩킹 구조는, 상기 인코딩 동작 동안에 제공된 상기 하나 이상의 입력 파라미터들의 주어진 값들 중 대응하는 값들에 기초하여 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 콘볼루션 코드의 코드 효율의 변경에 응답함 ―; 및
상기 언팩킹 구조로부터 상기 리드 솔로몬 인코딩된 스트림을 수신하고, 이로부터, 판독 데이터로서 상기 디지털 시스템이 이용하기 위한 입력 데이터를 포함하는 판독 데이터 스트림을 디코딩하기 위한 리드 솔로몬 디코더
를 포함하는 장치. - 메모리 셀들 중 적어도 일부가 하나보다 많은 비트를 저장할 수 있도록 디지털 데이터를 저장하기 위한 복수의 메모리 셀을 포함하는 비휘발성 메모리로 구성된 디지털 시스템에서의 방법으로서,
상기 비휘발성 메모리로부터의 저장된 데이터의 판독에 기초하여 메모리 출력 스트림 ― 상기 메모리 출력 스트림은 TCM 인코딩된 출력 데이터 스트림의 형태이며, 상기 TCM 인코딩된 출력 데이터 스트림의 전부는 아닌 한 부분은 인코딩 동작 동안에 한 세트의 파라미터들의 주어진 값들에 의해 설정되는 코드 효율에 예속됨 ―을 수신하고, 상기 코드 효율에 기초하여 상기 TCM 인코딩된 출력 데이터 스트림을 콘볼루션 디코딩하여, 상기 인코딩 동작 동안에 제공된 입력 파라미터들의 주어진 값들 중 대응하는 값들에 기초하여 디맵핑된 출력 스트림 ― 이 디맵핑된 출력 스트림은 리드 솔로몬 인코딩된 스트림을 포함함 ―으로서 상기 TCM 인코딩된 출력 데이터 스트림을 재생하도록 디맵핑 구조를 구성하는 단계;
언팩킹 구조를 이용하여 상기 디맵핑된 출력 스트림을 수신하고, 이로부터 상기 코드 효율에 기초하여 상기 리드 솔로몬 인코딩된 스트림을 재생하되, 상기 언팩킹 구조가, 상기 인코딩 동작 동안에 제공된 상기 하나 이상의 입력 파라미터들의 주어진 값들 중 대응하는 값들에 기초하여 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 콘볼루션 코드의 코드 효율의 변경에 응답하도록, 재생하는 단계; 및
상기 언팩킹 구조로부터 상기 리드 솔로몬 인코딩된 스트림을 수신하여, 이로부터, 판독 데이터로서 상기 디지털 시스템이 이용하기 위한 입력 데이터를 포함하는 판독 데이터 스트림을 디코딩하기 위한 리드 솔로몬 디코더를 제공하는 단계
를 포함하는 방법. - 호스트 장치에 응답하여 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서의 장치로서,
상기 호스트 장치를 상기 비휘발성 메모리와 인터페이싱시켜 이들 사이에서 일련의 코드워드 ― 각 코드워드는 상기 호스트 장치로부터 상기 비휘발성 메모리로의 인코딩된 데이터 흐름과 상기 비휘발성 메모리로부터 상기 호스트 장치로의 디코딩된 데이터 흐름 각각이, 적어도, 콘볼루션 코드에 기초하는 코드 효율에 예속되도록 하는 코드워드 크기를 가짐 ―로 판독 데이터 및 기입 데이터를 전송하기 위한 인코더/디코더 구조를 포함하고, 상기 인코더/디코더 구조는 코드워드 대 코드워드 기초로(on a codeword to codeword basis) 입력 파라미터들의 변경에 응답하여 상기 코드 효율이 변경가능하도록 하나 이상의 입력 파라미터들을 수신하도록 구성되는 장치. - 제34항에 있어서,
각각의 코드워드는 코드워드 길이를 형성하는 복수의 심볼들로 구성되고, 각 심볼은 메모리 셀들 중 하나에 저장되는 값을 나타내고, 상기 인코더/디코더 구조는, 주어진 일련의 코드워드들 중 제1 코드워드에서 제1 코드 효율을 생성하기 위해 제1 모드에서 동작하고 상기 주어진 일련의 코드워드들 중 제2 코드워드에서 제2 코드 효율을 생성하기 위해 제2 모드에서 동작하도록 구성되는 장치. - 제34항에 있어서,
상기 인코더/디코더 구조는 상기 기입 데이터를 처리하기 위한 인코더 구조를 포함하고, 상기 인코더 구조는,
상기 디지털 시스템을 통해 제공되는 상기 기입 데이터를 포함하는 입력 데이터 스트림을 수신하여 일련의 리드 솔로몬 심볼들로 구성된 리드 솔로몬 인코딩된 스트림을 생성하기 위한 리드 솔로몬 인코더;
상기 리드 솔로몬 인코딩된 스트림을 수신하여, 재블록화된 출력 데이터 스트림의 전부는 아닌 적어도 하나의 부분이 콘볼루션 코드에 기초한 코드 효율에 예속되게 구성되도록 상기 재블록화된 출력 데이터 스트림을 생성하는 팩킹 구조 ― 상기 팩킹 구조는, 상기 팩킹 구조에 제공된 하나 이상의 입력 파라미터들의 하나 이상의 값들의 변경에 기초하여 상기 입력 데이터 스트림 내의 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 콘볼루션 코드의 코드 효율의 변경을 지원하도록 상기 재블록화된 출력 데이터 스트림을 수정하도록 구성됨 ―; 및
상기 재블록화된 출력 데이터 스트림을 수신하고 TCM 코드를 적용하여 TCM 인코딩된 출력 데이터 스트림을 생성하기 위한 맵핑 구조 ― 상기 맵핑 구조는, 상기 입력 파라미터들의 값들에 기초하여 상기 코드 효율의 변경을 지원하도록 상기 콘볼루션 코드의 코드 효율에 따라 상기 TCM 인코딩된 출력 데이터 스트림의 부분을 콘볼루션 인코딩하여 저장된 데이터로서 내부에 저장하기 위한 상기 비휘발성 메모리에 기입하기 위한 맵핑된 출력 데이터 스트림을 생성하기 위한 콘볼루션 인코더를 포함함 ―
를 포함하는 장치. - 제36항에 있어서,
상기 인코더/디코더 구조는 상기 판독 데이터를 처리하기 위한 디코더 구조를 포함하고, 상기 디코더 구조는,
상기 비휘발성 메모리로부터의 상기 판독 데이터를 포함하는 저장된 데이터의 판독에 기초한 메모리 출력 스트림을 수신하고, 상기 코드 효율에 따라 상기 메모리 출력 스트림을 콘볼루션 디코딩하여 상기 맵핑 구조에 제공된 입력 파라미터들의 주어진 값들 중의 대응하는 값들에 기초하여 디맵핑된 출력 스트림으로서 상기 TCM 인코딩된 출력 데이터 스트림을 재생하기 위한 디맵핑 구조;
디맵핑된 출력 스트림을 수신하고, 이로부터 상기 코드 효율에 기초하여 상기 리드 솔로몬 인코딩된 스트림을 재생하기 위한 언팩킹 구조 ― 상기 언팩킹 구조는, 상기 팩킹 구조에 제공된 상기 하나 이상의 입력 파라미터들의 주어진 값들 중 대응하는 값들에 기초하여 상기 미리 결정된 개수의 리드 솔로몬 심볼들과 연관된 상기 콘볼루션 코드의 코드 효율의 변경에 응답함 ―; 및
상기 언팩킹 구조로부터 상기 리드 솔로몬 인코딩된 스트림을 수신하여, 이로부터, 판독 데이터로서 상기 디지털 시스템이 이용하기 위한 입력 데이터를 포함하는 판독 데이터 스트림을 디코딩하기 위한 리드 솔로몬 디코더
를 포함하는 장치. - 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서, 데이터 구조를 저장하는 비휘발성 메모리로서,
상기 데이터 구조는, 상기 비휘발성 메모리에 저장되는 일련의 TCM 심볼을 포함하고, 각 TCM 심볼은 콘볼루션 코드에 예속된 각 TCM 심볼의 적어도 최하위 비트를 갖는 적어도 2개의 비트를 나타내고, 각 심볼의 적어도 하나의 다른 비트는 콘볼루션 인코딩되지 않으며, 상기 TCM 심볼들은, 상기 데이터 구조 내의 적어도 하나의 코드워드에 대한 콘볼루션 코드의 코드 효율이 상기 데이터 구조 내의 인접 코드워드의 코드 효율과는 상이하도록 일련의 코드워드를 형성하는 일련의 리드 솔로몬 심볼을 형성하는 비휘발성 메모리. - 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서 사용하기 위한, 상기 비휘발성 메모리에 데이터 구조를 저장하기 위한 방법으로서,
상기 비휘발성 메모리에 일련의 TCM 심볼을 기입하는 단계를 포함하고, 각 TCM 심볼은 콘볼루션 코드에 예속된 각 TCM 심볼의 적어도 최하위 비트를 갖는 적어도 2개의 비트를 나타내고, 각 심볼의 적어도 하나의 다른 비트는 콘볼루션 인코딩되지 않으며, 상기 TCM 심볼들은, 상기 데이터 구조 내의 적어도 하나의 코드워드에 대한 콘볼루션 코드의 코드 효율이 상기 데이터 구조 내의 인접 코드워드의 코드 효율과는 상이하도록 일련의 코드워드를 형성하는 일련의 리드 솔로몬 심볼을 형성하는 방법. - 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서, 데이터 구조를 저장하는 비휘발성 메모리로서,
상기 데이터 구조는, 상기 비휘발성 메모리의 일부를 형성하는 일련의 메모리 셀들로 된 상기 비휘발성 메모리에 저장되는 일련의 TCM 심볼을 포함하고, 각 TCM 심볼은 적어도 하나의 비트를 포함하며 상기 비휘발성 메모리에 이전에 기입된 데이터 전송을 형성하고, 상기 데이터 전송의 표현으로서 상기 일련의 메모리 셀들에 의해 적어도 평균적으로 셀당 분수 개수의 비트들이 저장되는 비휘발성 메모리. - 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서의 방법으로서,
상기 비휘발성 메모리의 일부를 형성하는 일련의 메모리 셀들로 된 상기 비휘발성 메모리에 데이터 전송으로서 일련의 TCM 심볼을 기입하는 단계를 포함하고, 각 TCM 심볼은 적어도 하나의 비트를 포함하며, 상기 데이터 전송의 표현으로서 상기 일련의 메모리 셀들에 의해 적어도 평균적으로 셀당 분수 개수의 비트들이 저장되는 방법. - 제41항에 있어서,
상기 데이터 전송은 사용자 데이터를 포함하고, 상기 방법은,
상기 사용자 데이터를 복구하기 위해 셀당 상기 분수 개수의 비트에 기초하여 상기 비휘발성 메모리로부터 상기 일련의 TCM 심볼들을 판독하는 단계를 더 포함하는 방법. - 디지털 데이터를 저장하기 위한 비휘발성 메모리로 구성된 디지털 시스템에서의 장치로서,
데이터 전송 동작에서 상기 비휘발성 메모리의 일부를 형성하는 일련의 메모리 셀들로 된 상기 비휘발성 메모리에 일련의 TCM 심볼로서 데이터 구조를 기입하기 위한 기입 구조를 포함하고, 각 TCM 심볼은 적어도 하나의 비트를 포함하고, 데이터 구조는 사용자 데이터를 포함하며, 상기 일련의 메모리 셀들에 의해 적어도 평균적으로 셀당 분수 개수의 비트들이 저장되는 장치. - 제43항에 있어서,
상기 사용자 데이터를 복구하기 위해 셀당 상기 분수 개수의 비트에 기초하여 상기 비휘발성 메모리로부터 상기 일련의 TCM 심볼들을 판독하기 위한 판독 구조를 더 포함하는 장치.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/794,706 US8615703B2 (en) | 2010-06-04 | 2010-06-04 | Advanced bitwise operations and apparatus in a multi-level system with nonvolatile memory |
US12/794,706 | 2010-06-04 | ||
PCT/US2011/037194 WO2011153000A2 (en) | 2010-06-04 | 2011-05-19 | Advanced bitwise operations and apparatus in a multi-level system with nonvolatile memory |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147030251A Division KR101504083B1 (ko) | 2010-06-04 | 2011-05-19 | 비휘발성 메모리를 갖춘 멀티레벨 시스템에서의 진보된 비트별 동작 및 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130050335A KR20130050335A (ko) | 2013-05-15 |
KR101482889B1 true KR101482889B1 (ko) | 2015-01-14 |
Family
ID=45065438
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137000291A KR101482889B1 (ko) | 2010-06-04 | 2011-05-19 | 비휘발성 메모리를 갖춘 멀티레벨 시스템에서의 진보된 비트별 동작 및 장치 |
KR1020147030251A KR101504083B1 (ko) | 2010-06-04 | 2011-05-19 | 비휘발성 메모리를 갖춘 멀티레벨 시스템에서의 진보된 비트별 동작 및 장치 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147030251A KR101504083B1 (ko) | 2010-06-04 | 2011-05-19 | 비휘발성 메모리를 갖춘 멀티레벨 시스템에서의 진보된 비트별 동작 및 장치 |
Country Status (6)
Country | Link |
---|---|
US (3) | US8615703B2 (ko) |
EP (1) | EP2577672B1 (ko) |
KR (2) | KR101482889B1 (ko) |
CN (1) | CN102934171B (ko) |
TW (1) | TWI493551B (ko) |
WO (1) | WO2011153000A2 (ko) |
Families Citing this family (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6369027B1 (en) | 1995-12-22 | 2002-04-09 | Amgen Inc. | Osteoprotegerin |
DK2332978T3 (da) | 1999-02-03 | 2014-06-23 | Amgen Inc | Nye polypeptider, der er involveret ved et immunrespons |
WO2002044364A2 (en) | 2000-11-28 | 2002-06-06 | Amgen Inc. | Polypeptides involved in immune response |
US8401105B2 (en) | 2010-06-10 | 2013-03-19 | Intel Mobile Communications GmbH | Method for transmitting a data signal in a MIMO system |
JP5525410B2 (ja) * | 2010-10-14 | 2014-06-18 | 株式会社日立製作所 | 操作ログ格納システム、装置、およびプログラム |
US9275720B2 (en) * | 2010-12-30 | 2016-03-01 | Kandou Labs, S.A. | Differential vector storage for dynamic random access memory |
RU2011118108A (ru) * | 2011-05-06 | 2012-11-20 | ЭлЭсАй Корпорейшн (US) | Устройство (варианты) и способ параллельного декодирования для нескольких стандартов связи |
DE112012005424T5 (de) * | 2011-12-21 | 2014-09-18 | International Business Machines Corporation | Lese/Schreib-Operationen in Halbleiterspeicher-Bauelementen |
US8737139B2 (en) | 2012-04-11 | 2014-05-27 | Micron Technology, Inc. | Determining soft data for combinations of memory cells |
US8788743B2 (en) * | 2012-04-11 | 2014-07-22 | Micron Technology, Inc. | Mapping between program states and data patterns |
US8717831B2 (en) * | 2012-04-30 | 2014-05-06 | Hewlett-Packard Development Company, L.P. | Memory circuit |
US8804452B2 (en) * | 2012-07-31 | 2014-08-12 | Micron Technology, Inc. | Data interleaving module |
US8885410B2 (en) * | 2012-08-29 | 2014-11-11 | Sandisk Technologies Inc. | Direct multi-level cell programming |
US8902650B2 (en) * | 2012-08-30 | 2014-12-02 | Micron Technology, Inc. | Memory devices and operating methods for a memory device |
WO2014120193A1 (en) | 2013-01-31 | 2014-08-07 | Hewlett-Packard Development Company, L. P. | Non-volatile multi-level-cell memory with decoupled bits for higher performance and energy efficiency |
KR102007174B1 (ko) * | 2013-04-22 | 2019-08-05 | 에스케이하이닉스 주식회사 | 인코더, 디코더 및 이를 포함하는 반도체 장치 |
KR20150020849A (ko) * | 2013-08-19 | 2015-02-27 | 에스케이하이닉스 주식회사 | 비휘발성 메모리 장치, 이를 이용하는 반도체 시스템 및 컴퓨터 장치 |
US9164837B2 (en) * | 2013-09-12 | 2015-10-20 | Seagate Technology Llc | Transfer unit management |
WO2015048037A1 (en) * | 2013-09-24 | 2015-04-02 | Rambus Inc. | Memory component having internal read-modify-write operation |
US9754682B2 (en) * | 2013-11-19 | 2017-09-05 | Western Digital Technologies, Inc. | Implementing enhanced performance with read before write to phase change memory |
TWI533305B (zh) * | 2014-02-10 | 2016-05-11 | 慧榮科技股份有限公司 | 將資料寫入至快閃記憶體的方法及相關的記憶裝置與快閃記憶體 |
US9363114B2 (en) | 2014-02-28 | 2016-06-07 | Kandou Labs, S.A. | Clock-embedded vector signaling codes |
KR102238650B1 (ko) | 2014-04-30 | 2021-04-09 | 삼성전자주식회사 | 저장 장치, 상기 저장 장치를 포함하는 컴퓨팅 시스템 및 상기 저장 장치의 동작 방법 |
CN105634654B (zh) * | 2014-10-27 | 2019-12-17 | 中兴通讯股份有限公司 | 多用户信息传输的叠加编码、解调方法及装置 |
US9613664B2 (en) * | 2015-01-20 | 2017-04-04 | Samsung Electronics Co., Ltd. | Method of operating memory device including multi-level memory cells |
US11461010B2 (en) | 2015-07-13 | 2022-10-04 | Samsung Electronics Co., Ltd. | Data property-based data placement in a nonvolatile memory device |
US10509770B2 (en) | 2015-07-13 | 2019-12-17 | Samsung Electronics Co., Ltd. | Heuristic interface for enabling a computer device to utilize data property-based data placement inside a nonvolatile memory device |
EP3442146B1 (en) * | 2017-08-11 | 2022-12-28 | Nxp B.V. | Encoder input selector |
US10446198B2 (en) * | 2017-10-02 | 2019-10-15 | Micron Technology, Inc. | Multiple concurrent modulation schemes in a memory system |
US10490245B2 (en) | 2017-10-02 | 2019-11-26 | Micron Technology, Inc. | Memory system that supports dual-mode modulation |
US10725913B2 (en) | 2017-10-02 | 2020-07-28 | Micron Technology, Inc. | Variable modulation scheme for memory device access or operation |
US11403241B2 (en) | 2017-10-02 | 2022-08-02 | Micron Technology, Inc. | Communicating data with stacked memory dies |
US10355893B2 (en) | 2017-10-02 | 2019-07-16 | Micron Technology, Inc. | Multiplexing distinct signals on a single pin of a memory device |
US10467177B2 (en) | 2017-12-08 | 2019-11-05 | Kandou Labs, S.A. | High speed memory interface |
KR20190074890A (ko) * | 2017-12-20 | 2019-06-28 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러 및 그 동작 방법 |
CN110213073B (zh) * | 2018-04-20 | 2021-10-22 | 腾讯科技(深圳)有限公司 | 数据流向变更方法、电子设备、计算节点及存储介质 |
KR102616813B1 (ko) | 2018-05-24 | 2023-12-26 | 에스케이하이닉스 주식회사 | 반도체 메모리 장치 및 그 동작 방법 |
US10361715B1 (en) * | 2018-06-04 | 2019-07-23 | Amazon Technologies, Inc. | Decompression circuit |
US11494264B2 (en) | 2020-07-28 | 2022-11-08 | Micron Technology, Inc. | Generating a protected and balanced codeword |
US11237906B1 (en) * | 2020-07-28 | 2022-02-01 | Micron Technology, Inc. | Generating a balanced codeword protected by an error correction code |
US11567831B2 (en) | 2020-07-28 | 2023-01-31 | Micron Technology, Inc. | Generating a protected and balanced codeword |
US11757468B2 (en) * | 2020-09-24 | 2023-09-12 | Sandisk Technologies Llc | Soft data compression for non-volatile memory |
US20230410921A1 (en) * | 2022-06-21 | 2023-12-21 | Sandisk Technologies Llc | Three-bit-per-cell programming using a four-bit-per-cell programming algorithm |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070266296A1 (en) * | 2006-05-15 | 2007-11-15 | Conley Kevin M | Nonvolatile Memory with Convolutional Coding |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
NL8701996A (nl) * | 1987-08-26 | 1989-03-16 | Philips Nv | Halfgeleidergeheugen voorzien van een medegeintegreerde foutkorrektie-inrichting, en geintegreerde schakeling voorzien van zo een halfgeleidergeheugen. |
US5790570A (en) | 1996-08-30 | 1998-08-04 | Cornell Research Foundation, Inc. | Concatenated trellis coded modulation and linear block codes |
US6034996A (en) | 1997-06-19 | 2000-03-07 | Globespan, Inc. | System and method for concatenating reed-solomon and trellis codes |
US5930167A (en) * | 1997-07-30 | 1999-07-27 | Sandisk Corporation | Multi-state non-volatile flash memory capable of being its own two state write cache |
US6034976A (en) * | 1998-03-09 | 2000-03-07 | State Of Oregon Acting By And Through The State Board Of Higher Education On Behalf Of The University Of Oregon | Method and apparatus for laser frequency stabilization |
US6567475B1 (en) | 1998-12-29 | 2003-05-20 | Ericsson Inc. | Method and system for the transmission, reception and processing of 4-level and 8-level signaling symbols |
KR100401801B1 (ko) * | 2001-03-27 | 2003-10-17 | (주)텔레시스테크놀로지 | 데이터 전송 성능을 개선하기 위한 직교주파수 분할 다중통신 시스템 및 방법 |
US7142612B2 (en) | 2001-11-16 | 2006-11-28 | Rambus, Inc. | Method and apparatus for multi-level signaling |
GB0228434D0 (en) * | 2002-12-05 | 2003-01-08 | Scient Generics Ltd | Error correction |
FR2840477B1 (fr) | 2002-06-03 | 2005-02-04 | Nortel Networks Ltd | Procede d'adaptation de liens radio et unite de controle mettant en oeuvre le procede |
US7359313B2 (en) | 2002-06-24 | 2008-04-15 | Agere Systems Inc. | Space-time bit-interleaved coded modulation for wideband transmission |
US7379505B2 (en) | 2003-02-13 | 2008-05-27 | Broadcom Corporation | Method and apparatus for performing trellis coded modulation of signals for transmission on a TDMA channel of a cable network |
US7356755B2 (en) | 2003-10-16 | 2008-04-08 | Intel Corporation | Error correction for multi-level cell memory with overwrite capability |
KR100924189B1 (ko) * | 2004-12-02 | 2009-10-29 | 미쓰비시덴키 가부시키가이샤 | 복호 장치 및 통신 장치 |
US7844879B2 (en) | 2006-01-20 | 2010-11-30 | Marvell World Trade Ltd. | Method and system for error correction in flash memory |
US8055979B2 (en) | 2006-01-20 | 2011-11-08 | Marvell World Trade Ltd. | Flash memory with coding and signal processing |
CN101405810B (zh) * | 2006-01-20 | 2012-01-25 | 马维尔国际贸易有限公司 | 在闪存中用于纠错的方法和系统 |
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 |
KR100766042B1 (ko) | 2006-12-06 | 2007-10-12 | 삼성전자주식회사 | 연접 부호화를 이용한 멀티 레벨 셀 메모리 장치 |
KR100822030B1 (ko) | 2006-12-26 | 2008-04-15 | 삼성전자주식회사 | 고 부호화율 부호를 이용한 멀티 레벨 셀 메모리 장치 |
EP2127093B1 (en) * | 2007-01-19 | 2014-11-26 | Koninklijke Philips N.V. | Method and system of single carrier block transmission with parallel encoding and decoding |
US7856067B2 (en) * | 2007-04-04 | 2010-12-21 | The Aerospace Corporation | Unequal hierarchical communications modulation method |
US8051358B2 (en) | 2007-07-06 | 2011-11-01 | Micron Technology, Inc. | Error recovery storage along a nand-flash string |
US8327245B2 (en) * | 2007-11-21 | 2012-12-04 | Micron Technology, Inc. | Memory controller supporting rate-compatible punctured codes |
CN101499325B (zh) * | 2008-02-03 | 2012-10-03 | 深圳艾科创新微电子有限公司 | 一种具有可变纠错能力的非易失性存储系统及方法 |
US8156398B2 (en) * | 2008-02-05 | 2012-04-10 | Anobit Technologies Ltd. | Parameter estimation based on error correction code parity check equations |
US8627165B2 (en) | 2008-03-24 | 2014-01-07 | Micron Technology, Inc. | Bitwise operations and apparatus in a multi-level system |
US8595415B2 (en) * | 2011-02-02 | 2013-11-26 | Micron Technology, Inc. | At least semi-autonomous modules in a memory system and methods |
-
2010
- 2010-06-04 US US12/794,706 patent/US8615703B2/en active Active
-
2011
- 2011-05-19 CN CN201180027699.5A patent/CN102934171B/zh not_active Expired - Fee Related
- 2011-05-19 WO PCT/US2011/037194 patent/WO2011153000A2/en active Application Filing
- 2011-05-19 KR KR1020137000291A patent/KR101482889B1/ko active IP Right Grant
- 2011-05-19 KR KR1020147030251A patent/KR101504083B1/ko active IP Right Grant
- 2011-05-19 EP EP11790184.3A patent/EP2577672B1/en not_active Not-in-force
- 2011-06-03 TW TW100119653A patent/TWI493551B/zh active
-
2013
- 2013-11-19 US US14/084,497 patent/US9411675B2/en not_active Expired - Fee Related
-
2016
- 2016-07-05 US US15/202,123 patent/US10740173B2/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070266296A1 (en) * | 2006-05-15 | 2007-11-15 | Conley Kevin M | Nonvolatile Memory with Convolutional Coding |
Also Published As
Publication number | Publication date |
---|---|
KR20140136059A (ko) | 2014-11-27 |
US20140082454A1 (en) | 2014-03-20 |
US20160314039A1 (en) | 2016-10-27 |
WO2011153000A2 (en) | 2011-12-08 |
US10740173B2 (en) | 2020-08-11 |
CN102934171A (zh) | 2013-02-13 |
US20110302475A1 (en) | 2011-12-08 |
US8615703B2 (en) | 2013-12-24 |
KR20130050335A (ko) | 2013-05-15 |
US9411675B2 (en) | 2016-08-09 |
EP2577672B1 (en) | 2015-08-12 |
EP2577672A4 (en) | 2014-01-15 |
CN102934171B (zh) | 2016-05-11 |
TW201214439A (en) | 2012-04-01 |
KR101504083B1 (ko) | 2015-03-19 |
WO2011153000A3 (en) | 2012-02-23 |
EP2577672A2 (en) | 2013-04-10 |
TWI493551B (zh) | 2015-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101482889B1 (ko) | 비휘발성 메모리를 갖춘 멀티레벨 시스템에서의 진보된 비트별 동작 및 장치 | |
TWI533304B (zh) | 用於儲存資料於具有跨頁區段、多頁編碼及每頁編碼之多位準單元快閃記憶體器件中之方法及裝置 | |
US11804856B2 (en) | Advanced bitwise operations and apparatus in a multi-level system with nonvolatile memory | |
KR101264476B1 (ko) | 증가된 용량의 이종의 스토리지 엘리먼트들 | |
KR20100104623A (ko) | 데이터 처리 시스템 및 그것의 부호율 제어 스킴 | |
WO2009078006A2 (en) | Apparatus for coding at a plurality of rates in multi-level flash memory systems, and methods useful in conjunction therewith | |
WO2009074978A2 (en) | Systems and methods for error correction and decoding on multi-level physical media | |
KR20130029080A (ko) | 소거 없는 플래시 메모리의 다중 프로그래밍 | |
US20130147645A1 (en) | Encoding methods and systems for binary product codes | |
US8850275B2 (en) | Encoding apparatus, decoding apparatus, and encoding and decoding system | |
KR20160150036A (ko) | 부분 페이지 압축을 위한 메모리 시스템 | |
KR101206137B1 (ko) | 모바일 와이맥스용 ldpc 복호기 | |
CN109935263B (zh) | 非易失性存储器的编译码方法及存储系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E902 | Notification of reason for refusal | ||
A107 | Divisional application of patent | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20171219 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20181221 Year of fee payment: 5 |