KR101625273B1 - 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성 및 디코딩하기 위한 장치, 시스템 및 방법 - Google Patents

더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성 및 디코딩하기 위한 장치, 시스템 및 방법 Download PDF

Info

Publication number
KR101625273B1
KR101625273B1 KR1020137034874A KR20137034874A KR101625273B1 KR 101625273 B1 KR101625273 B1 KR 101625273B1 KR 1020137034874 A KR1020137034874 A KR 1020137034874A KR 20137034874 A KR20137034874 A KR 20137034874A KR 101625273 B1 KR101625273 B1 KR 101625273B1
Authority
KR
South Korea
Prior art keywords
codeword
portions
codewords
data
block
Prior art date
Application number
KR1020137034874A
Other languages
English (en)
Other versions
KR20140015602A (ko
Inventor
라비 에이치. 모트와니
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20140015602A publication Critical patent/KR20140015602A/ko
Application granted granted Critical
Publication of KR101625273B1 publication Critical patent/KR101625273B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0057Block codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1131Scheduling of bit node or check node processing
    • H03M13/1137Partly parallel processing, i.e. sub-blocks or sub-groups of nodes being processed in parallel
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3707Adaptive decoding and hybrid decoding, e.g. decoding methods or techniques providing more than one decoding algorithm for one code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3746Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with iterative decoding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3761Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using code combining, i.e. using combining of codeword portions which may have been transmitted separately, e.g. Digital Fountain codes, Raptor codes or Luby Transform [LT] codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3769Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using symbol combining, e.g. Chase combining of symbols received twice or more

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Error Detection And Correction (AREA)

Abstract

더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성하고 디코딩하는 장치, 시스템, 및 방법이 개시된다. 방법은, 저장 영역으로부터 데이터를 수신하는 단계, 및 인코더를 이용하여 상기 수신된 데이터로부터 코드워드를 생성하는 단계를 포함하고, 상기 코드워드는 데이터 부분과 패리티 부분을 갖고, 상기 코드워드는 제1 블록 길이를 가지며, 상기 인코더는 선형 블록 코드를 적용하고, 상기 선형 블록 코드는 상기 제1 블록 길이보다 짧은 제2 블록 길이를 갖는다.

Description

더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성 및 디코딩하기 위한 장치, 시스템 및 방법{APPARATUS, SYSTEM, AND METHOD FOR GENERATING AND DECODING A LONGER LINEAR BLOCK CODEWORD USING A SHORTER BLOCK LENGTH}
본 발명의 실시예들은 일반적으로 에러 검출 및 정정의 분야에 관한 것이다. 구체적으로, 실시예들은 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성 및 디코딩하기 위한 장치, 시스템 및 방법에 관한 것이다.
많은 응용에서, 예를 들어 통신 또는 데이터 저장 시스템들에 대한 에러 검출 또는 정정에서는 에러 제어 코드들이 사용될 수 있다. 예를 들어, 에러 제어 코드들을 사용하여, 저장 디바이스들에서, 예를 들어 하드 드라이브들 또는 NAND 메모리들에서 발생하는 에러들을 정정할 수 있다. 에러 제어 코드들은 잡음이 많은 채널을 통해 수신되는 데이터 내의 에러들을 검출 또는 정정하는 데에도 사용될 수 있다.
에러 제어 코드의 타입 및 에러 제어 코드의 블록 길이와 같은 에러 제어 코드들의 속성들은 인코딩 및 디코딩 구현의 코딩 이득 및 복잡성에 영향을 미칠 수 있다. 일 타입의 에러 제어 코드는 BCH(Bose-Chaudhuri-Hocquenghem) 코드이다. 다른 타입의 에러 코드는 LDPC(low-density parity-check) 코드이다. 블록 길이도 구현 복잡성에 영향을 미친다. 예를 들어, LDPC 코드에서, 더 큰 블록 길이는 인코딩 및 디코딩 복잡성을 증가시킨다.
실시예들은 아래에 제공되는 상세한 설명으로부터 그리고 본 발명의 다양한 실시예들의 첨부 도면들로부터 더 충분히 이해될 것이지만, 이들은 본 발명을 특정 실시예들로 한정하는 것으로 간주되지 않아야 하며, 단지 설명 및 이해를 위한 것일 뿐이다.
도 1은 일 실시예에 따른, 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성하기 위한 데이터 및 패리티 부분들을 나타내는 블록도이다.
도 2는 일 실시예에 따른, 더 짧은 블록 길이를 이용하는 더 긴 선형 블록 코드워드를 위한 패리티 검사 행렬을 나타내는 블록도이다.
도 3은 일 실시예에 따른, 더 짧은 블록 길이를 이용하는 더 긴 선형 블록 코드워드의 생성을 나타내는 흐름도이다.
도 4는 다른 실시예에 따른, 더 짧은 블록 길이를 이용하는 더 긴 선형 블록 코드워드의 생성을 나타내는 흐름도이다.
도 5는 일 실시예에 따른, 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 디코딩하는 것을 나타내는 흐름도이다.
도 6은 다른 실시예에 따른, 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 디코딩하는 것을 나타내는 흐름도이다.
도 7은 또 다른 실시예에 따른, 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 디코딩하는 것을 나타내는 흐름도이다.
도 8은 또 다른 실시예에 따른, 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 디코딩하는 것을 나타내는 흐름도이다.
도 9는 일 실시예에 따른, 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성 및 디코딩하기 위한 논리를 포함하는 반도체 드라이브를 포함하는 시스템 도면이다.
도 10은 일 실시예에 따른, 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성 및 디코딩하도록 동작할 수 있는 논리를 포함하는 제어기의 블록도이다.
도 11은 일 실시예에 따른, 반도체 드라이브 및 디스플레이에 결합된 호스트 시스템을 포함하는 시스템 도면으로서, 반도체 드라이브는 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성 및 디코딩하기 위한 논리를 포함한다.
실시예들은 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성 및 디코딩하기 위한 장치, 시스템 및 방법과 관련된다.
"코드워드"라는 용어는 데이터 부분 및 에러 검출 또는 정정에 사용되는 정보의 부분을 포함하는 인코딩된 데이터를 지칭한다. 일 실시예에서, 에러 검출 또는 정정에 사용되는 정보의 부분은 패리티 부분이다. 일 실시예에 따르면, 인코더가 코드워드들을 생성한다. 다른 실시예에 따르면, 인코더가 에러 검출 또는 정정에 사용되는 정보를 생성하고, 다른 논리 유닛이 데이터 부분과 생성된 정보를 결합하여 코드워드들을 생성한다.
"선형 블록 코드워드"라는 용어는 선형 블록 코드 내의 코드워드를 의미한다. "코드"라는 용어는 유효 코드워드들의 세트를 의미한다. 선형 블록 코드는 갈로이스 필드(Galois field)의 하위 공간이다. "블록 길이"라는 용어는 코드워드의 길이를 지칭한다. 코드워드들의 세트인 코드도 블록 길이를 갖는다.
일 실시예에서는, 코드워드를 디코딩하여, 인코딩된 데이터를 복구한다. 하나의 그러한 실시예에서, 코드워드의 디코딩에 의해 인코딩된 데이터를 복구하는 것은 코드워드 내의 에러들을 정정하는 것을 포함한다. 일 실시예에서, 코드워드 내의 에러들을 정정하는 것은 코드워드의 데이터 부분 및 패리티 부분 양자 내의 에러들을 정정하는 것을 포함한다.
일 실시예에 따르면, 더 짧은 코드워드들을 독립적으로 디코딩함으로써 더 긴 선형 블록 코드워드가 디코딩되며, 더 짧은 코드워드들은 더 긴 선형 블록 코드워드의 블록 길이보다 짧은 블록 길이를 갖는다. 예를 들어, 일 실시예에서, 더 긴 선형 블록 코드워드는 4K 바이트의 길이를 갖는 데이터 부분 및 500 바이트의 길이를 갖는 패리티 부분을 포함하며, 더 짧은 코드워드들 각각은 1K 바이트의 길이를 갖는 데이터 부분 및 100 바이트의 패리티 부분을 갖는다. 하나의 그러한 실시예에서, 더 긴 선형 블록 코드워드 및 각각의 더 짧은 코드워드의 블록 길이들은 각각 4.5K 바이트 및 1.1K 바이트이다.
일 실시예에서, 더 긴 선형 블록 코드워드의 부분 디코딩은 인코딩된 데이터를 복구하는 데 충분할 수 있다. 일 실시예에서, 부분 디코딩이 성공적이지 못한 경우, 전체 디코딩을 쓸 수 있다. 일 실시예에 따르면, 더 낮은 디코딩 복잡성을 이용하여 더 높은 코딩 이득이 달성될 수 있다. "코딩 이득"이라는 용어는 에러 제어 코드 없이도 에러 제어 코드를 사용하는 것과 동일한 출력 비트 에러 레이트를 달성하는 데 필요한 입력 비트 에러 레이트의 차이를 의미한다. 일 실시예에 따르면, 더 긴 선형 블록 길이를 이용하여 달성되는 코딩 이득과 동등한 코딩 이득이 더 짧은 블록 길이 LDPC 디코더에 대한 디코딩 복잡성과 유사한 디코딩 복잡성을 이용하여 달성될 수 있다.
실시예들은 임의의 수의 에러 검출 또는 정정 응용들을 위해, 예를 들어 비휘발성 메모리들을 위해 또는 통신 채널을 통한 데이터의 송신을 위해 구현될 수 있다. 하나의 그러한 실시예에서, 비휘발성 메모리들은 NAND 메모리들일 수 있다. 실시예들은 또한 동적 정적 랜덤 액세스 메모리(DRAM)를 위해 또는 다른 타입의 저장 디바이스들을 위해 구현될 수 있다.
아래의 설명에서는 본 발명의 실시예들의 더 충분한 설명을 제공하기 위해 다수의 상세가 설명된다. 그러나, 이 분야의 기술자에게는 본 발명의 실시예들이 특정 상세 없이도 실시될 수 있다는 것이 명백할 것이다. 다른 예들에서는 실시예들을 불명확하게 하지 않기 위해 공지 구조들 및 디바이스들은 블록도 형태로 도시되며 상세히는 도시되지 않는다.
실시예들의 대응하는 도면들에서 신호들은 라인들로 표현된다는 점에 유의한다. 일부 라인들은 더 구성적인 신호 경로들을 지시하기 위해 더 두꺼울 수 있고/있거나, 주요 정보 흐름 방향을 지시하기 위해 하나 이상의 단부에 화살표를 가질 수 있다. 그러한 지시들은 한정을 의도하지 않는다. 오히려, 라인들은 하나 이상의 예시적인 실시예와 연계하여 사용되어, 회로 또는 논리 유닛의 더 쉬운 이해를 촉진한다. 설계 요구 또는 선호에 의해 지시되는 바와 같은 임의의 표현된 신호는 실제로는 임의의 방향으로 이동할 수 있고 임의의 적절한 타입의 신호 스킴을 이용하여 구현될 수 있는 하나 이상의 신호를 포함할 수 있다.
아래의 설명 및 청구범위에서는, "결합"이라는 용어 및 그 파생어들이 사용된다. 본 명세서에서 "결합"이라는 용어는 (물리적으로, 전기적으로, 자기적으로, 광학적으로, 기타 등등으로) 직접 접촉하는 둘 이상의 요소를 지칭할 수 있다. 본 명세서에서 "결합"이라는 용어는 서로 직접 접촉하지 않지만 여전히 서로 협력하거나 상호작용하는 둘 이상의 요소를 지칭할 수도 있다.
도 1은 일 실시예에 따른, 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성하기 위한 데이터 및 패리티 부분들을 나타내는 블록도(100)이다. 일 실시예에서, 데이터가 수신되고, 4개의 데이터 블록(104, 106, 108, 110)으로 분할된다. 이 도면은 데이터가 4개의 데이터 블록으로 분할되는 것을 도시하지만, 데이터는 임의의 수의 블록으로 분할될 수 있다.
일 실시예에서, 데이터 블록들(104, 106, 108, 110) 각각의 1/4이 부분들(112, 114, 116, 118)로서 선택된다. 일 실시예에서, 데이터 블록들(104, 106, 108, 110) 각각의 동일 부분이 선택된다. 일 실시예에서, 부분들(112, 114, 116, 118)은 데이터 블록들(104, 106, 108, 110)의 임의의 부분으로부터 선택될 수 있다. 예를 들어, 일 실시예에서, 부분들(112, 114, 116, 118)은 데이터 블록들(104, 106, 108, 110)의 최상위 비트들로부터 선택된다. 다른 실시예들에서, 부분들(112, 114, 116, 118)은 데이터 블록들(104, 106, 108, 110)의 상이한 비트 범위들로부터 선택될 수 있다. 다른 실시예에서, 선택되는 데이터는 임의의 수의 데이터 블록으로부터 선택될 수 있다. 예를 들어, 일 실시예에서, 선택되는 부분들(112, 114, 116, 118)은 오로지 데이터 블록(104)으로부터 선택될 수 있다.
일 실시예에서, 인코더가 데이터 블록들(104, 106, 108, 110) 각각을 인코딩하여, 대응하는 패리티 부분들(120, 122, 124, 126)을 생성한다. 일 실시예에 따르면, 대응하는 코드워드들은 데이터 블록(104, 106, 108, 110)으로부터의 데이터인 데이터 부분, 및 블록들(120, 122, 124, 126)에 의해 표현되는 대응하는 패리티 부분을 포함한다. 예를 들어, 일 실시예에 따르면, 대응하는 코드워드들 중 하나는 데이터 블록(104) 및 패리티 부분(120)을 포함한다.
일 실시예에서, 선택된 부분들(112, 114, 116, 118)은 데이터 블록들(104, 106, 108, 110) 각각과 동일한 결합된 길이를 갖는다. 일 실시예에서, 선택된 부분들(112, 114, 116, 118)을 인코딩하여 다른 패리티 부분(128)을 생성한다. 일 실시예에서, 선택된 부분들(112, 114, 116, 118) 및 다른 패리티 부분(128)을 포함하는 다른 코드워드가 생성된다.
일 실시예에 따르면, 더 긴 선형 블록 코드워드는 데이터 부분들(104, 106, 108, 110), 대응하는 패리티 부분들(120, 122, 124, 126) 및 다른 패리티 부분(128)을 포함한다. 다른 실시예들에서, 코드워드는 선택된 부분들(112, 114, 116, 118)을 더 포함한다.
코드워드에서 패리티 부분들(120, 122, 124, 126, 128)에 대한 데이터 부분들(104, 106, 108, 110)의 비율은 임의의 수일 수 있다. 더 높은 비율은 오버헤드를 줄이고 성능을 향상시킬 수 있다. 예를 들어, 일 실시예에서, 비율은 89 퍼센트와 91 퍼센트 사이일 수 있다. 더 낮은 비율은 에러 정정 스킴을 더 강건하게 하고 코딩 이득을 증가시킬 수 있다. 예를 들어, 일 실시예에서, 비율은 50 퍼센트일 수 있다. 다른 실시예에서, 비율은 50 퍼센트보다 낮을 수 있다.
일 실시예에서, 데이터 부분들(104, 106, 108, 110) 및 패리티 부분들(120, 122, 124, 126, 128)은 코드워드 내에 임의의 순서로 분포될 수 있다. 예를 들어, 일 실시예에서, 코드워드의 최초 부분은 데이터 부분들(104, 106, 108, 110)을 포함할 수 있고, 코드워드의 마지막 부분은 패리티 부분들(120, 122, 124, 126, 128)을 포함할 수 있다. 다른 실시예에서, 데이터 부분들(104, 106, 108, 110)은 코드워드의 최종 부분에 위치할 수 있다. 또 다른 실시예에서, 데이터 부분들(104, 106, 108, 110) 및 패리티 부분들(120, 122, 124, 126, 128)은 알고리즘에 따라 분포될 수 있다.
도 2는 일 실시예에 따른, 더 짧은 블록 길이를 이용하는 더 긴 선형 블록 코드워드를 위한 패리티 검사 행렬(202)("H 행렬"이라고도 함)을 나타내는 블록도(200)이다. 도 2는 일 실시예에 따른, 더 긴 블록 길이를 갖는 코드워드가 어떻게 더 짧은 블록 길이를 이용하여 생성될 수 있는지를 보여준다. 일 실시예에서, 패리티 검사 행렬(202)은 LDPC 코드에 대한 패리티 검사 방정식들의 세트를 표현한다. "패리티 검사 방정식"은 코드워드의 데이터 부분의 패리티를 계산하기 위한 방정식이다. 예를 들어, 일 실시예에서, 패리티 검사 방정식은 합산, 모듈로 2, 패리티 비트를 얻기 위한 코드워드의 데이터 부분 내의 비트들의 소정 조합을 포함한다. 일 실시예에서, 패리티 검사 행렬(202)은 더 짧은 블록 길이들(204, 206, 208, 210)을 갖는 패리티 검사 행렬들을 포함한다. 일 실시예에서, 더 짧은 블록 길이들(204, 206, 208, 210)을 갖는 패리티 검사 행렬들은 데이터 부분들(212, 214, 216, 218) 및 패리티 부분들(220, 222, 224,226)을 포함한다. 일 실시예에서, 패리티 검사 행렬(202)은 도 1의 선택된 부분들(112, 114, 116, 118) 및 다른 패리티 부분(128)에 대응하는 228, 230, 232, 234 및 236을 포함하는 패리티 검사 행렬을 더 포함한다. 일 실시예에 따르면, 패리티 부분들(220, 222, 224, 226, 236)은 패리티 검사 행렬(202)의 행들의 최종 부분 내에 위치한다. 일 실시예에서, 패리티 검사 행렬(202)의 나머지 부분들(238)은 0들이다.
도 2는 행렬(202)을 갖는 패리티 검사 방정식들을 도시하지만, 일 실시예에서 패리티 검사 방정식들은 다른 그래픽 표현들로 표현될 수 있다. 예를 들어, 일 실시예에서, 패리티 검사 방정식들은 태너(Tanner) 그래프와 같은 두 갈래 그래프에 의해 표현될 수 있다.
일부 실시예들은 흐름도, 흐름 다이어그램, 구조 다이어그램 또는 블록 다이어그램으로서 통상적으로 도시되는 프로세스로서 설명될 수 있다. 흐름도는 동작들을 순차적 프로세스로서 설명할 수 있지만, 동작들 중 다수는 동시에(즉, 병렬로) 수행될 수 있다. 또한, 동시 프로세스들로서 도시된 흐름도 내의 동작들은 다른 실시예들에서는 순차적으로 수행될 수 있다. 게다가, 동작들의 순서는 재배열될 수 있다. 프로세스는 그의 동작들이 완료될 때 종료된다. 프로세스는 방법, 프로그램, 절차, 제조 또는 제작 방법 등에 대응할 수 있다.
도 3은 일 실시예에 따른, 더 짧은 블록 길이를 이용하는 더 긴 선형 블록 코드워드의 생성을 나타내는 흐름도(300)이다.
일 실시예에 따르면, 블록(301)에서, 저장 영역으로부터 데이터가 수신된다. 일 실시예에서, 저장 영역은 국지적일 수 있다. 예를 들어, 하나의 그러한 실시예에서, 저장 영역은 코드워드를 생성하고 있는 시스템 내에 위치할 수 있다. 하나의 그러한 실시예에서, 저장 영역은 고체상태 드라이브(SSD) 내에 포함될 수 있다. 다른 실시예에서, 저장 영역은 원격에 있을 수 있다. 예를 들어, 하나의 그러한 실시예에서, 저장영역은 코드워드를 생성하는 시스템으로부터 분리된 시스템 상에 위치할 수 있다. 하나의 그러한 실시예에서, 데이터는 전기 통신 네트워크, 예를 들어 인터넷 또는 컴퓨터 네트워크와 같은 통신 채널을 통해 수신될 수 있다.
이어서, 블록(302)에서, 선형 블록 코드를 적용하는 인코더를 이용하여 제1 길이를 갖는 코드워드가 생성되며, 선형 블록 코드는 제1 블록 길이보다 짧은 제2 블록 길이를 갖는다.
일 실시예에서, 적용되는 선형 블록 코드는 LDPC 코드이다. 다른 실시예에서, 적용되는 선형 블록 코드는 BCH 코드이다. 또 다른 실시예에서, 적용되는 선형 블록 코드는 다른 선형 블록 코드일 수 있다.
도 4는 다른 실시예에 따른, 더 짧은 블록 길이를 이용하는 더 긴 선형 블록 코드워드의 생성을 나타내는 흐름도(400)이다. 도 4의 흐름도(400)는 도 1의 실시예를 참조하여 설명된다. 도 4의 흐름도(400)는 도 3의 블록(301)으로부터 계속된다.
일 실시예에서, 블록(404)에서, 저장 영역으로부터 데이터를 수신한 후, 수신된 데이터는 복수의 데이터 블록(104, 106, 108, 110)으로 분할된다. 일 실시예에서, 복수의 데이터 블록(104, 106, 108, 110) 각각은 동일한 길이를 갖는다. 다른 실시예에서, 복수의 데이터 블록(104, 106, 108, 110)은 상이한 길이들을 가질 수 있다. 하나의 그러한 실시예에서, 복수의 데이터 블록(104, 106, 108, 110) 중 일부는 0으로 패딩(padding)되어, 상이한 길이들을 가짐에도 불구하고 복수의 데이터 블록(104, 106, 108, 110) 각각에 대한 동일한 인코딩 및 디코딩 하드웨어의 사용을 가능하게 할 수 있다. 일 실시예에서, 수신된 데이터가 분할되는 데이터 블록들(104, 106, 108, 110)의 수는 짝수이다. 다른 실시예에서, 데이터 블록들(104, 106, 108, 110)의 수는 4개이다. 또 따른 실시예에서, 데이터 블록들(104, 106, 108, 110)의 수는 홀수이다.
블록(406 및 408)에서 시작하는 경로들은 (흐름도(400)에 도시된 바와 같이) 병렬일 수 있다. 예를 들어, 일 실시예에서, 블록(406 및 408)의 동작들은 동시에 수행될 수 있다. 다른 실시예에서, 블록(408) 내의 동작들은 블록(406)의 동작들 전 또는 후에 발생할 수 있다.
블록(406)에서, 인코더가 복수의 데이터 블록(104, 106, 108, 110) 각각을 인코딩하여 복수의 대응하는 코드워드를 생성한다. 일 실시예에서, 복수의 대응하는 코드워드 각각은 물론, 인코더에 의해 적용되는 코드는 제2 블록 길이와 동일한 블록 길이를 갖는다. 일 실시예에 따르면, 대응하는 코드워드들 각각은 데이터 부분(104, 106, 108, 110) 및 패리티 부분(120, 122, 124, 126)을 포함한다.
블록(408)에서, 복수의 데이터 블록(104, 106, 108, 110) 중 하나 이상의 데이터 블록의 하나 이상의 부분(112, 114, 116, 118)이 선택된다. 실시예들에서, 이러한 선택은 데이터 수신 후의 임의의 시간에 발생할 수 있다. 예를 들어, 일 실시예에서, 하나 이상의 부분(112, 114, 116, 118)의 선택은 수신 데이터의 분할 전에 발생할 수 있다. 일 실시예에서, 하나 이상의 부분(112, 114, 116, 118)의 선택은 수신된 데이터를 복수의 데이터 블록(104, 106, 108, 110)으로 분할한 후에 그리고 복수의 데이터 블록(104, 106, 108, 110)의 인코딩과 동시에 발생할 수 있다. 일 실시예에서, 선택된 부분들(112, 114, 116, 118)은 복수의 데이터 블록(104, 106, 108, 110) 각각으로부터의 동일 부분을 포함할 수 있다.
블록(410)에서, 하나 이상의 부분(112, 114, 116, 118)을 선택한 후, 인코더는 하나 이상의 부분(112, 114, 116, 118)을 인코딩하여 다른 패리티 부분(128)을 생성한다. 일 실시예에서, 선택된 부분들(112, 114, 116, 118)을 인코딩하기 전에, 선택된 부분들(112, 114, 116, 118) 중 적어도 하나가 버퍼 내에 큐잉(queuing)된다.
블록(412)에서, 일 실시예에 따라 복수의 대응하는 코드워드 및 다른 패리티 부분(128)으로부터 코드워드가 형성된다. 하나의 그러한 실시예에서, 코드워드의 데이터 부분의 길이는 대응하는 코드워드들 각각의 데이터 부분의 길이의 정수 배이다. 예를 들어, 하나의 그러한 실시예에서, 코드워드의 데이터 부분의 길이는 4K 바이트이고, 대응하는 코드워드들 각각의 데이터 부분의 길이는 1K 바이트이다. 다른 실시예에서, 코드워드의 그리고 대응하는 코드워드들 각각의 데이터 부분들의 길이들은 각각 8K 바이트 및 1K 바이트 또는 8K 바이트 및 2K 바이트일 수 있다. 다른 실시예에서, 코드워드는 다른 코드워드를 더 포함하며, 다른 코드워드는 다른 패리티 부분(128) 및 선택된 하나 이상의 부분(112, 114, 116, 118)을 포함한다.
도 5는 일 실시예에 따른, 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 디코딩하는 것을 나타내는 흐름도(500)이다. 도 5의 흐름도(500)는 도 4의 블록(412)으로부터 계속된다.
블록(502)에서, 코드워드가 수신된다. 블록(504)에서, 수신된 코드워드가 디코더를 이용하여 디코딩되며, 디코더는 선형 블록 코드를 적용하고, 디코딩은 대응하는 코드워드들의 디코딩을 포함한다. 일 실시예에서, 대응하는 코드워드들의 디코딩은 더 짧은 블록 길이들(204, 206, 208, 210)을 갖는 패리티 검사 행렬들을 이용하여 수행된다. 일 실시예에서, 디코더는 하드 입력 디코딩을 적용한다. 다른 실시예에서, 디코더는 소프트 입력 디코딩을 적용한다. 예를 들어, 일 실시예에서, 디코더는 한 번의 판독만을 수행하여 하드 정보를 생성할 수 있다. 다른 실시예에서는, 상이한 기준 전압들에 대응하는 다수의 판독을 수행하여 소프트 정보를 생성한다.
코드워드는 임의의 수의 위치로부터 수신될 수 있다. 예를 들어, 일 실시예에서, 코드워드는 코드워드를 디코딩하는 시스템 상에 위치하는 비휘발성 메모리로부터 수신된다. 다른 실시예에서, 코드워드는 원격 위치로부터 수신된다. 예를 들어, 코드워드는 코드워드를 디코딩하는 시스템으로부터 분리된 시스템으로부터 인터넷을 통해 수신될 수 있다.
도 6은 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 디코딩하는 다른 실시예를 나타내는 흐름도(600)이다. 도 6의 흐름도(600)는 도 4의 블록(412)으로부터 계속된다.
블록(602)에서, 코드워드가 수신된다. 블록(604)에서, 수신된 코드워드가 대응하는 코드워드들로 분할된다. 일 실시예에서, 대응하는 코드워드들 각각은 데이터 부분(104, 106, 108, 110) 및 대응하는 패리티 부분(120, 122, 124, 126)을 포함한다. 블록(606)에서, 대응하는 코드워드들 각각이 디코딩된다. 일 실시예에서, 대응하는 코드워드들의 디코딩은 순차적으로 발생한다. 하나의 그러한 실시예에서, 코드워드를 디코딩하기 위한 하드웨어 구현은 선형 블록 코드를 적용하기 위한 단일 디코더를 포함할 수 있다. 다른 실시예에서, 대응하는 코드들의 디코딩은 동시에 발생한다. 하나의 그러한 실시예에서, 성능(예를 들어, 병렬 처리로 인한 디코딩의 속도) 증가들이 더 많은 하드웨어의 대가로 달성될 수 있다. 예를 들어, 하나의 그러한 하드웨어 구현은 선형 블록 코드를 적용하기 위한 둘 이상의 디코더를 포함할 것이다.
도 7은 더 긴 선형 블록 코드워드가 더 짧은 블록 길이를 이용하여 디코딩되는 또 다른 실시예를 도시하는 흐름도(700)이다. 도 7의 흐름도(700)는 도 4의 블록(412)에서 이어진다.
블록(702)에서, 코드워드가 수신된다. 블록(704)에서, 수신된 코드워드가 대응하는 코드워드들로 분할된다. 블록(706)에서, 대응하는 코드워드의 각각은 디코딩된다. 블록(708)에서, 대응하는 코드워드들 모두의 디코딩이 성공적이라고 판정된 경우, 블록(710)으로 나타낸 바와 같이, 디코딩 프로세스가 완료된다. 일 실시예에서, 신드롬이 0인 경우, 코드워드는 성공적으로 디코딩되고, 여기서, 신드롬은 cHT인데, c는 코드워드이고 H는 패리티-검사 행렬이다.
블록(708)에서, 대응하는 코드워드들 중 하나 이상의 디코딩에 실패한 것으로 판정된 경우, 블록(712)에서, 다른 패리티 부분이 디코딩된다. 일 실시예에 따르면, 다른 패리티 부분의 디코딩은 코드워드를 다시 수신하는 것과, 수신된 코드워드의 데이터 부분에서 선택된 부분들을 추출하는 것을 포함할 수 있다. 또 다른 실시예에서, 선택된 부분은 버퍼링되고, 따라서, 다른 패리티 부분을 디코딩하는 것은 코드워드를 다시 수신하는 것을 포함하지 않는다.
블록(714)에서, 다른 패리티 부분을 디코딩하는 것으로부터 획득된 정보는 대응하는 코드워드들 중 하나 이상을 재디코딩하는데 적용된다. 일 실시예에서, 디코딩에 실패한 하나 이상의 대응하는 코드워드를 복구하는 것은 다양한 방식으로 수행될 수 있다. 일 실시예에서, 대응하는 코드워드들은 하드 판정 디코딩을 통해 디코딩된다. 또 다른 실시예에서, 소프트 정보 조합이 적용된다. 하나의 그러한 실시예에서, 소프트 정보 조합은, 소프트 정보가 최소합 LDPC 디코더의 비트 노드에서 업데이트되는 것과 유사한 방식으로 수행된다. 예를 들어, 일 실시예에서, (다른 패리티 부분을 포함하는) 또 다른 코드워드로부터의 외적 정보는 독립적인 정보로서 처리되고, 디코딩에 실패한 대응하는 코드워드들 중 하나 이상의 실패 부분들의 채널 LLR(Log Likelihood Ratio)에 추가된다.
일 실시예에서, 다른 패리티 부분을 디코딩하는 것으로부터 획득된 정보는 디코딩에 실패한 코드워드들에만 적용된다. 일 실시예에서, 디코딩에 실패한 대응하는 코드워드들만 재디코딩된다. 또 다른 실시예에서, 대응하는 코드워드들 모두 재디코딩된다.
도 8은, 더 긴 선형 블록 코드워드가 더 짧은 블록 길이를 이용하여 디코딩되는 또 다른 실시예를 도시하는 흐름도(800)이다. 도 8의 흐름도(800)는 도 7의 블록(706)에서 이어진다.
블록(802)에서, 대응하는 코드워드 모두의 디코딩이 성공적이라고 판정되는 경우, 블록(804)으로 나타낸 바와 같이, 디코딩 프로세스가 완료된다. 블록(802)에서, 대응하는 코드워드들 중 하나 이상의 디코딩에 실패한 것으로 판정된 경우, 블록(806)에서, 다른 패리티 부분이 디코딩된다. 블록(808)에서, 다른 패리티 부분의 디코딩이 성공적이라고 판정된 경우, 블록(810)에서, 대응하는 코드워드들의 적어도 하나의 부분은 다른 패리티 부분을 디코딩하는 것으로부터 획득된 하나 이상의 대응하는 부분으로 교체된다. 일 실시예에서, 디코딩에 실패한 대응하는 코드워드들만 그 부분들이 교체된다.
블록(808)에서, 다른 패리티 부분의 디코딩에 실패한 것으로 판정된 경우, 블록(812)에서, 대응하는 코드워드들의 적어도 하나의 부분은, 일 실시예에 따라, 출력 소프트 정보 조합에 의해 다른 패리티 부분을 디코딩하는 것으로부터 획득된 하나 이상의 대응하는 부분으로 교체된다. 또 다른 실시예에서, 다른 패리티 부분에 대한 실패한 디코딩은 대응하는 코드워드의 어떠한 부분도 교체되지 않는 결과를 야기할 수 있다.
도 9는, 비휘발성 메모리(902), 및 제2 블록 길이를 사용하여 제1 블록 길이와 동일한 블록 길이를 갖는 코드워드를 생성하도록 동작가능한 로직(여기서, 제1 및 제2 블록 길이는 도 3의 블록(302)에서 언급된 것들과 동일하다)을 갖는 일 실시예에 따른 시스템(900)이다. 일 실시예에서, 제1 블록 길이와 동일한 블록 길이를 갖는 코드워드를 생성하도록 동작가능한 로직은 인코더(904), 디코더(906), 및 에러 정정 로직(907)을 포함한다.
일 실시예에서, 시스템(900)은 고체상태 드라이브(SSD)(901)를 포함한다. 일 실시예에서, 시스템(900)은 메모리 컨트롤러(908), 및 메모리 컨트롤러(908)에 연결된 프로세서(914)를 포함하는 시스템 온 칩(SOC)(909)을 포함한다. 일 실시예에서, 메모리 컨트롤러(908)는, 인코더(904), 디코더(906), 및 에러 정정 로직(907)을 포함하고, 제2 블록 길이를 이용하여 제1 블록 길이와 동일한 블록 길이를 갖는 코드워드를 생성하도록 동작가능한 로직을 포함한다. 일 실시예에서, SOC(909)는 다른 컴포넌트들, 예를 들어, 무선 안테나, 메모리, 프로세서 등을 포함한다.
일 실시예에서, SOC(909)는 SATA(Serial Advance Technology Attachment), 입-출력(I/O) 버스(912)를 통해 호스트(910)와 통신한다. 일 실시예에서, SOC(909)는 SAS(Serially Attached Small System Computer) 입-출력(I/O) 버스(912)를 통해 호스트(910)와 통신한다. 다른 실시예에서, 912를 위해, 실시예들의 본질을 변경시키지 않는, 다른 유형의 버스들, 예를 들어, SCSI(Small Computer Systems Interface) 입-출력(I/O) 버스, FC(Fibre Channel) 입-출력(I/O) 버스, iSCSI(SCSI over Internet) 입-출력(I/O) 버스, 또는 USB(Universal Serial Bus) 입-출력(I/O) 버스 중 임의의 것이 사용될 수 있다.
그러한 실시예들에 따르면, 호스트(910)가 SCSI 프로토콜에 따라 메모리 디바이스와 데이터 및/또는 명령들을 교환하는 경우, SCSI 프로토콜은, ANSI(American National Standards Institute) SCSI-2(Small Computer Systems Interface-2) ANSI/INCITS(InterNational Committee for Information Technology Standards) 131-1994 명세에 설명된 프로토콜을 준수 및/또는 그와 호환될 수 있다.
일 실시예에서, SOC(909) 및 비휘발성 메모리(902)는 SSD(901)의 일부이다. 이러한 일 실시예에서, SOC(909)는 SSD 컨트롤러이다. 일 실시예에서, SSD(901)는 퍼스널 컴퓨터, 태블릿, 스마트폰(스마트 디바이스로도 불림) 등의 내부에 위치한다. 일 실시예에서, 메모리 컨트롤러(908) 및/또는 SOC(909)는 호스트(910) 및 비휘발성 메모리(902)에 결합된 독립형 집적 회로이다. 또 다른 실시예에서, 메모리 컨트롤러(908) 및/또는 SOC(909)는 호스트(910)에 통합된다.
일 실시예에서, 호스트(910)는 프로세서(914) 및 운영 체제(916)를 포함한다. 일 실시예에서, 호스트(910)에서 프로세서(914)는 캘리포니아 산타 클라라의 인텔사에 의해 설계 및 제조된 마이크로-프로세서이다. 또 다른 실시예에서, 다른 벤더들에 의해 제조 및 설계된 다른 프로세서들이 호스트(910)를 위해 사용될 수 있다. 일 실시예에서, 호스트(910)는 퍼스널 컴퓨터, 서버, 클라이언트, 랩톱, 스마트-폰, 및/또는 태블릿 등 중 하나이다. 실시예들은 메모리 컨트롤러(908)에 연결된 하나 또는 다수의 비휘발성 메모리(918, 920, 922 및 924)를 가질 수 있다. 일부 실시예에는 호스트(910) 및 비휘발성 메모리(902)와 통신하는 메모리 컨트롤러(908)에 대하여 설명되어 있지만, 실시예들은 또한 호스트(910) 및 비휘발성 메모리(902)와 통신하는 SOC(909)와 동작하는 것으로 이해된다.
일 실시예에서, 비휘발성 메모리(902)는 NVRAM(random-access non-volatile memory)이다. 일 실시예에서, 비휘발성 메모리(902)는 SSD의 일부이다. 일 실시예에서, 비휘발성 메모리(902)는 NAND 플래시 메모리이다. 일 실시예에서, 비휘발성 메모리(902)는 NOR 플래시 메모리이다. 일 실시예에서, 비휘발성 메모리(902)는 PCM(phase change memory), PCMS(stacked PCM, PCM 및 스위치로도 불림), ROM(read-only memory), EEPROM(electrically erasable programmable read-only memory), 또는 임의의 다른 유형의 비휘발성 메모리 디바이스 중 하나이다. 일 실시예에서, 비휘발성 메모리(902)는 이동식 드라이브, 예컨대, USB(Universal Serial Bus) 메모리 스틱, 플래시 카드 등이다.
일 실시예에서, 메모리 컨트롤러(908)는, 데이터를 수신하는 로직(제1 로직 유닛으로도 불림), 및 수신된 데이터를 복수의 데이터 블록으로 분할하고, 복수의 데이터 블록 각각을 인코더(904)로 전송하는 로직(제2 로직 유닛으로도 불림)을 더 포함하는데, 여기서, 인코더는 대응하는 코드워드들을 생성하기 위해 복수의 데이터 블록 각각에 선형 블록 코드를 적용하며, 적용된 선형 블록 코드 및 대응하는 코드워드들은 제2 블록 길이와 동일한 블록 길이를 갖는다. 일 실시예에서, 선형 블록 코드는 LDPC 코드이다. 일 실시예에서, 메모리 컨트롤러(908)는 수신된 데이터의 하나 이상의 부분들을 선택 및 저장하는 로직 및 다른 패리티를 생성하기 위해 인코더(904)에 하나 이상의 부분을 전송하는 로직(제4 로직 유닛으로도 불림)을 더 포함한다. 일 실시예에서, 하나 이상의 부분들을 선택 및 저장하는 로직은 버퍼를 포함한다. 일 실시예에서, 메모리 컨트롤러(908)는 대응하는 코드워드 및 다른 패리티 부분으로부터 제1 블록 길이와 동일한 블록 길이를 갖는 코드워드를 생성하는 로직을 더 포함한다.
일 실시예에서, 메모리 컨트롤러(908)는 코드워드를 수신하는 로직(제5 로직 유닛으로도 불림), 및 수신된 코드워드를 대응하는 코드워드들로 분할하고 대응하는 코드워드들 각각을 디코더(906)로 전송하는 로직(제6 로직 유닛으로도 불림)을 더 포함한다.
일 실시예에서, 메모리 컨트롤러(908)는 대응하는 코드워드들의 디코딩이 성공적인지 여부를 판정하는 로직(제7 로직 유닛으로도 불림), 및 대응하는 코드워드들 중 하나 이상의 디코딩에 실패한 경우 디코더(906)에 다른 코드워드를 전송하는 로직(제8 로직 유닛으로도 불림)을 더 포함하는데, 여기서, 다른 코드워드는 선택된 부분들 및 다른 패리티 부분을 포함한다. 일 실시예에서, 메모리 컨트롤러(908)는 대응하는 코드워드들의 하나 이상의 부분을 다른 코드워드의 대응하는 부분들로 교체하도록 동작가능한 로직(제9 로직 유닛으로도 불림) 및 대응하는 코드워드들 중 하나 이상을 디코더(906)로 재전송하는 로직(제10 로직 유닛으로도 불림)을 더 포함한다. 이러한 일 실시예에서, 그 로직은 에러 정정 로직(907)이다.
로직 유닛들은 개별적으로 (예를 들어, "제1 로직 유닛", "제2 로직 유닛" 등) 지칭되지만, 로직 유닛들에 의해 수행되는 기능들이 조합될 수 있다. 예를 들어, 일 실시예에서, 디코더(906)는 제5 로직 유닛 및 제6 로직 유닛을 포함할 수 있다.
도 10은 일 실시예에 따른 더 짧은 블록 길이를 이용하여 더 긴 블록 길이 코드워드를 생성 및 디코딩하도록 동작가능한 로직을 포함하는 컨트롤러(1001)의 블록도(1000)이다. 도 10은 도 3-8의 실시예들을 참조하여 도시된다. 블록도(1000)의 다음의 설명은 도 3-8의 실시예들을 제한하려는 것이 아니라, 데이터 및 데이터 블록들의 길이와, 코드워드들의 블록 길이 사이의 관계를 일 실시예에 따라 예시하려는 것이다.
일 실시예에 따르면, 데이터(1004)는 'xL'의 길이를 갖는데, 여기서, 데이터(1004)는 도 3의 블록(301)에서 수신된 데이터와 동일하고, 양의 정수 x는 수신된 데이터가 도 4의 블록(404)에 따라 분할되는 데이터 블록들의 개수이다.
일 실시예에서, 도 4의 블록(404)에서 복수의 데이터 블록 각각은 데이터 블록(1008)으로서 인코더(1006)로 전송되는데, 여기서, 각각의 데이터 블록(1008)은 길이 'L'을 갖는다. 일 실시예에서, 인코더(1006)는 'L+p'와 동일한 블록 길이를 갖는 선형 블록 코드를 적용하는데, 여기서, 'p'는 인코더(1006)에 의해 생성된 패리티 부분의 길이이다. 일 실시예에 따르면, 인코더(1006)는 코드워드(1009)를 생성하는데, 여기서, 코드워드(1009)는 'L+p'와 동일한 블록 길이를 갖는다. 일 실시예에서, 도 4의 블록(406)에서 대응하는 코드워드들 각각은 인코더(1006)에 의해 코드워드(1009)로서 생성된다.
일 실시예에서, 도 4의 블록(408)에서 선택된 하나 이상의 부분들 중 적어도 하나는 버퍼(1012)에 저장된 선택된 부분(1010)이다. 일 실시예에서, 버퍼(1012)는 스캔 체인(scan chain)을 포함한다. 일 실시예에 따르면, 선택된 부분(1010)은 도 4의 블록(406)에서 언급된 복수의 데이터 블록 각각의 동일한 부분이다. 또 다른 실시예에서, 선택된 부분(1010)의 길이는 'L/x'이다. 일 실시예에서, 버퍼(1012)는 'L(x-1)/x' 데이터를 저장할 수 있다. 예를 들어, 일 실시예에서, 여기서 데이터(1004)는 길이 4K 바이트(즉, xL=4K 바이트)이고, 4개의 데이터 블록(즉, x=4)으로 분할되는 경우, 버퍼는 데이터의 0.75K 바이트를 저장한다(즉, 3개의 선택된 부분, 각각은 0.25K 바이트의 길이를 가짐). 그러한 일 실시예에서, 제4 선택된 부분이 버퍼(1012)로 전송되면, 선택된 부분들(1014)로 불리는, 1K 바이트(즉, L=1K 바이트)의 데이터 블록은 다른 패리티 부분을 생성하기 위해 인코더(1006)로 전송되는데, 여기서, 다른 패리티 부분은 도 4의 블록(410)에서 설명된다. 일 실시예에서, 복수의 데이터 블록 각각이 데이터 블록(1008)으로서 인코더(1006)로 전송되는 동안 선택된 부분(1014)의 적어도 한 부분은 버퍼(1012)에 저장될 수 있다. 또 다른 실시예에서, 선택된 부분들(1014)은 복수의 데이터 블록 각각을 인코딩하기 전에 또는 그 이후에 선택될 수 있다.
일 실시예에 따르면, 코드워드(1002)는 도 4의 블록(412) 및 도 5의 블록(502)에서 설명된 코드워드이며, 여기서, 코드워드(1002)는 'xL+(x+1)p'의 길이를 갖는다. 이러한 일 실시예에서, 코드워드(1002)는 도 4의 블록들(406 및 410)에서 각각 설명된 대응하는 코드워드들 및 다른 패리티 부분을 포함한다. 또 다른 실시예에서, 코드워드(1002)는 x(L+p)'의 길이를 갖는다. 이러한 일 실시예에서, 코드워드(1002)는, 도 4의 블록들(406, 410 및 408)에서 각각 설명된, 대응하는 코드워드들, 다른 패리티 부분, 및 선택된 부분을 포함한다. 또 다른 실시예에서, 코드워드(1002)는 또 다른 길이를 갖고, 여기서, 코드워드(1002)의 길이는 코드워드(1009)의 블록 길이보다 더 길다.
일 실시예에 따르면, 장치는 코드워드(1002)를 대응하는 코드워드들로 분할하고, 데이터 블록(1022)을 복구하기 위해 대응하는 코드워드들 각각을 코드워드(1018)로서 디코더(1016)로 전송하는 로직을 더 포함하는데, 여기서, 데이터 블록(1022)은, 프로세스들에서의 하나의 포인트에서, 도 6의 블록(606)에서의 복수의 데이터 블록 각각은 물론 도 8의 블록(810)에서의 대응하는 부분들이다. 일 실시예에서, 디코더(1016)는 인코더(1006)에 의해 적용되는 동일한 코드인 선형 블록 코드를 적용한다.
일 실시예에서, 에러 정정 로직(1020)은 도 9의 에러 정정 로직(907)과 동일한 기능들을 수행하도록 동작가능하다.
도 11은 고체상태 드라이브에 연결된 호스트 시스템 및 디스플레이를 포함하는 일 실시예에 따른 시스템(1100)이고, 고체상태 드라이브는 제2 블록 길이를 사용하여 제1 블록 길이와 동일한 블록 길이를 갖는 코드워드를 생성하도록 동작가능한 로직을 포함한다(여기서, 제1 및 제2 블록 길이는 도 3의 블록(302)에서 설명된 것과 동일함).
도 11은 또한 다양한 실시예들의 방법들을 수행하는 컴퓨터 판독가능한 명령어들을 실행하는 머신-판독가능한 저장 매체를 포함한다. 실시예들의 요소들은 또한 컴퓨터-실행가능한 명령어들(도 3-8의 흐름도를 구현하는 명령어들)을 저장하기 위한 머신-판독가능한 매체로서 제공된다. 머신-판독가능한 매체는 플래시 메모리, 광 디스크, CD-ROM, DVD ROM, RAM, EPROM, EEPROM, 자기 카드 또는 광 카드, 또는 전자 또는 컴퓨터-실행가능한 명령어들을 저장하기에 적합한 다른 유형의 머신-판독가능한 매체를 포함할 수 있지만, 이로 제한되지 않는다. 예를 들어, 본 발명의 실시예들은 원격 컴퓨터(예컨대, 서버)로부터, 통신 링크(예컨대, 모뎀 또는 네트워크 접속)를 경유하여 데이터 신호들을 통해 요청 컴퓨터(예컨대, 클라이언트)로 이송될 수 있는 컴퓨터 프로그램(예컨대, BIOS)으로서 다운로드될 수 있다.
일 실시예에서, 시스템(1100)은, 데스크톱 컴퓨터, 랩톱 컴퓨터, 넷북, 태블릿, 노트북 컴퓨터, 개인 휴대 정보 단말기(PDA), 서버, 워크스테이션, 셀룰러 전화기, 모바일 컴퓨팅 디바이스, 스마트 폰, 인터넷 가전 제품 또는 임의의 다른 유형의 컴퓨팅 디바이스를 포함하지만, 이로 제한되지 않는다. 또 다른 실시예에서, 시스템(1100)은 본원에 개시된 방법들을 구현하고, SOC 시스템일 수 있다.
일 실시예에서, 프로세서(1102)는 하나 이상의 프로세싱 코어(1106 및 1106N)를 갖는데, 여기서 1106N은 프로세서(1102) 내부에서 N번째 프로세서 코어를 나타내고, N은 양의 정수이다. 일 실시예에서, 시스템(1100)은 프로세서(1102 및 1104)를 포함하는 다수의 프로세서를 포함하고, 여기서, 프로세서(1104)는 프로세서(1102)의 로직과 유사하거나 동일한 로직을 갖는다. 일 실시예에서, 시스템(1100)은 프로세서들(1102 및 1104)을 포함하는 다수의 프로세서를 포함하여, 프로세서(1104)는 프로세서(1102)의 로직으로부터 완전히 독립적인 로직을 갖는다. 그러한 실시예에서, 멀티-패키지 시스템(1100)은 이종 멀티-패키지 시스템인데, 그 이유는 프로세스들(1104 및 1102)이 상이한 로직 유닛들을 갖기 때문이다. 일 실시예에서, 프로세싱 코어(1106)는 명령어들을 페치(fetch)하는 프리-페치 로직, 명령어들을 디코딩하는 디코드 로직, 명령어들을 실행하는 실행 로직 등을 포함하지만, 이로 제한되지 않는다. 일 실시예에서, 프로세서(1102)는 시스템(1100)의 데이터 및/또는 명령어들을 캐시하는 캐시 메모리(1108)를 갖는다. 본 발명의 또 다른 실시예에서, 캐시 메모리(1108)는 레벨 1, 레벨 2 및 레벨 3, 캐시 메모리, 또는 프로세서(1102) 내의 캐시 메모리의 임의의 다른 구성을 포함한다.
일 실시예에서, 프로세서(1102)는, 프로세서(1102)가 휘발성 메모리(1114) 및/또는 비휘발성 메모리(1116)를 포함하는 메모리(1112)에 액세스 및 그와 통신하는 것을 가능하게 하는 기능들을 수행하도록 동작가능한 MCH(memory control hub; 1110)를 포함한다. 일 실시예에서, MCH(1110)는 독립적인 집적 회로로서 프로세서(1102)의 외부에 위치된다.
일 실시예에서, 프로세서(1102)는 메모리(1112) 및 칩셋(1118)과 통신하도록 동작가능하다. 일 실시예에서, 프로세서(1102)(도 9의 914와 동일함) 및 칩셋(1118)은 도 9의 호스트(910)의 일부이다. 일 실시예에서, 칩셋(1118)은 SATA 버스(1122)(도 9의 버스(912)와 동일함)를 경유하여 SSD(1120)(도 9의 901과 동일함)에 연결된다. 일 실시예에서, SSD(1120)는 도 3-8의 흐름도를 구현하는 컴퓨터-실행가능한 명령어들을 저장하기 위한 머신-판독가능한 매체를 포함한다. 그러한 실시예에서, SSD(1120)는 SSD(1120)에 전원이 들어온 경우 컴퓨터-실행가능한 명령어들을 실행한다.
일 실시예에서, 프로세서(1102)는 또한 무선 신호를 송신 및/또는 수신하도록 구성된 임의의 디바이스와 통신하기 위해 무선 안테나(1124)에 연결된다. 일 실시예에서, 무선 안테나 인터페이스(1124)는, IEEE 802.11 표준 및 그의 관련된 패밀리, HPAV(HomePlug AV), UWB(Ultra Wide Band), 블루투스(Bluetooth), 와이맥스(WiMAX), 또는 임의의 형태의 무선 통신 프로토콜에 따라 동작하지만 이로 제한되지 않는다.
일 실시예에서, 휘발성 메모리(1114)는 SDRAM(Synchronous Dynamic Random Access Memory), DRAM(Dynamic Random Access Memory), RDRAM(RAMBUS Dynamic Random Access Memory), 및/또는 임의의 다른 유형의 랜덤 액세스 메모리 디바이스를 포함하지만, 이로 제한되지 않는다. 비휘발성 메모리(1116)는 플래시 메모리(예컨대, NAND, NOR), PCM(phase change memory), ROM(read-only memory), EEPROM(electrically erasable programmable read-only memory), 또는 임의의 다른 유형의 비휘발성 메모리 디바이스를 포함하지만, 이로 제한되지 않는다.
메모리(1112)는 프로세서(1102)에 의해 실행될 정보 및 명령어를 저장한다. 일 실시예에서, 메모리(1112)는, 프로세서(1102)가 명령어를 실행하는 동안 임시 변수 또는 다른 중간 정보를 또한 저장한다. 일 실시예에서, 칩셋(1118)은 포인트-대-포인트(PtP 또는 P-P) 인터페이스(1126 및 1128)를 통해 프로세서(1102)와 연결된다. 일 실시예에서, 칩셋(1118)은 프로세서(1102)가 시스템(1100)에서 다른 모듈과 연결하는 것을 가능하게 한다. 본 발명의 일 실시예에서, 인터페이스(1126 및 1128)는 INTEL® QPI(QuickPath Interconnect) 등과 같은 PtP 통신 프로토콜에 따라 동작한다.
일 실시예에서, 칩셋(1118)은 프로세서(1102 및 1104), 디스플레이 디바이스(1130) 및 다른 디바이스들(1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146 등)과 통신하도록 동작가능하다. 일 실시예에서, 칩셋(1118)은 무선 안테나(1124)와 결합되어 무선 신호를 송신 및/또는 수신하도록 구성된 임의의 디바이스와 통신한다.
일 실시예에서, 칩셋(1118)은 인터페이스(1148)를 통해 디스플레이 디바이스(1130)에 연결된다. 일 실시예에서, 디스플레이(1130)는, 액정 디스플레이(LCD), 플라즈마, CRT(Cathode Ray Tube) 디스플레이, 또는 시각 표시 장치의 임의의 다른 형태를 포함하나, 이에 제한되지 않는다. 본 발명의 일 실시예에서, 프로세서(1102) 및 칩셋(1118)은 단일 SOC로 통합된다. 또한, 칩셋(1118)은 여러 모듈들(1136, 1138, 1140, 1142 및 1144)과 상호접속하는 하나 이상의 버스들(1122 및 1150)에 연결된다. 일 실시예에서, 버스들(1122 및 1150)은, 버스 속도 또는 통신 프로토콜에 불일치가 있는 경우, 버스 브릿지(1132)를 경유해 함께 상호접속된다. 일 실시예에서, 칩셋(1118)은, 비휘발성 메모리(1138), 대용량 디바이스(1140), 키보드/마우스(1142) 및 네트워크 인터페이스(1144)에 인터페이스(1124), 스마트 TV(1134), 가전제품(1146) 등을 통해 연결되나, 이에 제한되지 않는다.
일 실시예에서, 대용량 디바이스(1140)는, 고체 상태 드라이브, 하드 디스크 드라이브, 범용 직렬 버스 플래시 메모리 드라이브, 또는 임의의 다른 형태의 컴퓨터 데이터 저장 매체를 포함하나, 이에 제한되지 않는다. 일 실시예에서, 네트워크 인터페이스(1144)는 이더넷 인터페이스, USB 인터페이스, PCI(Peripheral Component Interconnect) 고속 인터페이스, 무선 인터페이스 및/또는 임의의 다른 적당한 형태의 인터페이스를 포함하나, 이에 제한되지 않는, 공지된 소정 타입의 네트워크 인터페이스 표준으로 구현된다. 일 실시예에서, 무선 인터페이스는 IEEE 802.11 표준과, 이와 관련된 패밀리, HPAV(HomePlug AV), UWB(Ultra Wide Band), 블루투스, WiMAX, 또는 임의의 형태의 무선 통신 프로토콜에 따라 동작하나, 이에 제한되지 않는다.
도 11에 도시된 모듈들이 시스템(1100) 내의 별개의 블록들을 묘사한다 할지라도, 이들 블록들 중 일부가 수행하는 기능은 단일 반도체 회로 내에 통합될 수 있거나, 또는 2개 이상의 별개의 집적 회로를 이용하여 구현될 수 있다. 예컨대, 캐시 메모리(1108)가 프로세서(1102) 내의 별개의 블록으로서 도시된다 할지라도, 캐시 메모리(1108)는 프로세서 코어(1106)에 각각 통합될 수 있다. 일 실시예에서, 시스템(1100)은 본 발명의 다른 실시예에서 둘 이상의 프로세서/프로세싱 코어를 포함할 수 있다.
본 명세서에서, "일 실시예", "일부 실시예" 또는 "다른 실시예"로 언급하는 것은 그 실시예와 관련돼서 기술된 특정 특징, 구조 또는 특성이 반드시 모든 실시예에 포함될 필요없이 적어도 일부 실시예에 포함된다는 것을 의미한다. "일 실시예" 및 "일부 실시예" 의 다양한 형태는 반드시 동일 실시예를 모두 언급할 필요가 없다. 명세서에서 컴포넌트, 특징, 구조 또는 특성이 포함될 수 있다고 한다면, 그런 컴포넌트, 특징, 구조 또는 특성이 반드시 포함될 필요는 없다. 명세서 또는 특허청구범위에서 "하나"의 엘리먼트를 언급한다면, 이는 단지 하나의 엘리먼트만이 존재한다는 것을 의미하지 않는다. 명세서 또는 특허청구범위에서 "부가적인' 엘리먼트를 언급한다면, 이는 둘 이상의 부가 엘리먼트가 존재한다는 것을 배제하지 않는다.
본 발명이 여러 실시예의 관점에서 설명된다 할지라도, 당업자에게는 본 발명이 설명된 실시예에 제한되지 않고, 오히려 첨부된 특허청구범위의 정신 및 범위 내에서 수정 및 변경으로 실시될 수 있음을 인식할 것이다. 따라서, 상세한 설명은 제한적인 것이 아니라 예시적인 것으로 간주돼야 한다.

Claims (28)

  1. 선형 블록 코드워드를 생성하는 방법으로서,
    저장 영역으로부터 데이터를 수신하는 단계, 및
    인코더를 이용하여 상기 수신된 데이터로부터 코드워드를 생성하는 단계 - 상기 코드워드는 데이터 부분과 제1 패리티 부분을 갖고, 상기 코드워드는 제1 블록 길이를 가지며, 상기 인코더는 선형 블록 코드를 적용하고, 상기 선형 블록 코드는 상기 제1 블록 길이보다 짧은 제2 블록 길이의 코드워드를 가짐 -
    를 포함하고,
    상기 코드워드를 생성하는 단계는,
    상기 수신된 데이터를 복수의 데이터 블록들로 분할하는 단계,
    상기 인코더에 의해, 상기 복수의 데이터 블록들 각각을 인코딩하여 대응하는 코드워드들을 생성하는 단계 - 상기 대응하는 코드워드들 각각은 상기 제2 블록 길이와 같은 블록 길이를 가지며, 상기 대응하는 코드워드들 각각은 데이터 부분과 제2 패리티 부분을 가짐-,
    상기 복수의 데이터 블록들 중 하나 이상의 데이터 블록들의 하나 이상의 부분들을 선택하는 단계,
    상기 인코더에 의해, 상기 선택된 하나 이상의 부분들을 인코딩하여 상기 대응하는 코드워드들 각각의 제2 패리티 부분과는 다른 제3 패리티 부분을 생성하는 단계, 및
    상기 대응하는 코드워드들 및 상기 생성된 제3 패리티 부분을 포함하는 코드워드를 생성하는 단계를 포함하는, 선형 블록 코드워드를 생성하는 방법.
  2. 제1항에 있어서,
    상기 선형 블록 코드는 LDPC(low-density parity-check) 코드인, 선형 블록 코드워드를 생성하는 방법.
  3. 제1항에 있어서,
    상기 복수의 데이터 블록들 중 하나 이상의 데이터 블록들의 선택된 부분들은 상기 복수의 데이터 블록들 내의 블록들 각각과 같은 결합(combined) 길이를 갖는, 선형 블록 코드워드를 생성하는 방법.
  4. 제1항에 있어서,
    상기 코드워드의 데이터 부분의 길이(n1)는 상기 대응하는 코드워드들 각각의 데이터 부분의 길이(n2)의 정수배인, 선형 블록 코드워드를 생성하는 방법.
  5. 제1항에 있어서,
    상기 선택된 하나 이상의 부분들은 상기 복수의 데이터 블록들 각각의 길이와 같은 결합(combined) 길이를 갖는, 선형 블록 코드워드를 생성하는 방법.
  6. 제1항에 있어서,
    상기 하나 이상의 부분들을 선택하는 단계는, 상기 복수의 데이터 블록들 각각으로부터 동일 부분을 선택하는 단계를 포함하는, 선형 블록 코드워드를 생성하는 방법.
  7. 제1항에 있어서,
    상기 선택된 하나 이상의 부분들을 인코딩하기 이전에, 상기 선택된 하나 이상의 부분들 중 적어도 하나의 부분을 버퍼에 큐잉(queuing)하는 단계를 더 포함하는, 선형 블록 코드워드를 생성하는 방법.
  8. 제1항에 있어서,
    상기 코드워드의 데이터 부분은 4K 바이트이고, 상기 대응하는 코드워드들 각각의 데이터 부분은 1K 바이트인, 선형 블록 코드워드를 생성하는 방법.
  9. 제1항에 있어서,
    상기 코드워드를 생성하는 단계는, 다른 코드워드를 생성하는 단계를 더 포함하며, 상기 다른 코드워드는 상기 선택된 하나 이상의 부분들과 상기 제3 패리티 부분을 포함하는, 선형 블록 코드워드를 생성하는 방법.
  10. 제9항에 있어서,
    상기 코드워드를 수신하는 단계, 및
    상기 수신된 코드워드를 선형 블록 디코더를 이용하여 디코딩하는 단계를 더 포함하고,
    상기 선형 블록 디코더는 상기 선형 블록 코드를 적용하는, 선형 블록 코드워드를 생성하는 방법.
  11. 제10항에 있어서,
    상기 수신된 코드워드를 상기 대응하는 코드워드들로 분할하는 단계, 및
    상기 선형 블록 디코더에 의해, 상기 대응하는 코드워드들 각각을 디코딩하는 단계를 더 포함하는, 선형 블록 코드워드를 생성하는 방법.
  12. 제11항에 있어서,
    상기 대응하는 코드워드들 중 하나 이상의 코드워드들의 디코딩 실패에 응답하여, 상기 제3 패리티 부분을 디코딩하는 단계, 및
    상기 대응하는 코드워드들 중 하나 이상의 코드워드를 재디코딩하기 위해 상기 제3 패리티 부분의 디코딩으로부터 획득한 정보를 적용하는 단계를 더 포함하는, 선형 블록 코드워드를 생성하는 방법.
  13. 제12항에 있어서,
    상기 제3 패리티 부분의 디코딩으로부터 획득한 정보를 적용하는 단계는,
    상기 제3 패리티 부분의 디코딩 성공에 응답하여, 상기 대응하는 코드워드들 중 적어도 일 부분을 상기 제3 패리티 부분의 디코딩으로부터 획득한 대응하는 부분들로 교체하는 단계, 및
    상기 다른 코드워드의 디코딩 실패에 응답하여, 상기 대응하는 코드워드들 중 적어도 일 부분을 출력 소프트 정보 조합에 의해 상기 제3 패리티 부분의 디코딩으로부터 획득한 대응하는 부분들로 교체하는 단계를 포함하는, 선형 블록 코드워드를 생성하는 방법.
  14. 제10항에 있어서,
    상기 저장 영역은 비휘발성 메모리인, 선형 블록 코드워드를 생성하는 방법.
  15. 제14항에 있어서,
    상기 비휘발성 메모리는 NAND 메모리인, 선형 블록 코드워드를 생성하는 방법.
  16. 선형 블록 코드워드를 생성하는 장치로서,
    데이터를 수신하는 제1 로직 유닛,
    인코더,
    상기 수신된 데이터를 복수의 데이터 블록들로 분할하고 상기 복수의 데이터 블록들 각각을 상기 인코더에 전송하는 제2 로직 유닛 - 상기 인코더는 선형 블록 코드를 상기 복수의 데이터 블록들 각각에 적용하여 대응하는 코드워드들을 생성함-,
    상기 대응하는 코드워드들로부터 제1 블록 길이를 갖는 코드워드를 생성하는 제3 로직 유닛 - 상기 대응하는 코드워드들 각각은 제2 블록 길이를 가지며, 상기 선형 블록 코드는 상기 제2 블록 길이와 같은 블록 길이의 코드워드를 가지고, 상기 제2 블록 길이는 상기 제1 블록 길이보다 짧음 -,
    상기 수신된 데이터 중 하나 이상의 선택된 부분들을 저장하는 버퍼, 및
    상기 선택된 부분들을 상기 인코더에 전송하여 상기 대응하는 코드워드들 각각의 제2 패리티 부분과는 다른 제3 패리티 부분을 생성하는 제4 로직 유닛
    을 포함하는, 선형 블록 코드워드를 생성하는 장치.
  17. 제16항에 있어서,
    상기 수신된 데이터의 선택된 부분들은 상기 복수의 데이터 블록들 내의 블록들 각각과 같은 결합 길이를 갖는, 선형 블록 코드워드를 생성하는 장치.
  18. 제16항에 있어서,
    상기 하나 이상의 선택된 부분들은 상기 복수의 데이터 블록들로부터 선택되는, 선형 블록 코드워드를 생성하는 장치.
  19. 제16항에 있어서,
    상기 제1 블록 길이를 갖는 코드워드를 수신하는 제5 로직 유닛,
    상기 선형 블록 코드를 적용하는 선형 블록 디코더, 및
    상기 수신된 제1 블록 길이를 갖는 코드워드를 상기 대응하는 코드워드들로 분할하고 상기 대응하는 코드워드들 각각을 상기 선형 블록 디코더에 전송하는 제6 로직 유닛을 더 포함하는, 선형 블록 코드워드를 생성하는 장치.
  20. 제19항에 있어서,
    상기 대응하는 코드워드들의 디코딩이 성공적인지를 판정하는 제7 로직 유닛,
    상기 대응하는 코드워드들 중 하나 이상의 코드워드들의 디코딩이 실패인 경우 다른 코드워드를 상기 선형 블록 디코더에 전송하는 제8 로직 유닛 - 상기 다른 코드워드는 상기 선택된 부분들과 상기 제3 패리티 부분을 포함함-,
    상기 대응하는 코드워드들 중 하나 이상의 부분들을 상기 다른 코드워드의 대응하는 부분들로 교체하도록 동작가능한 제9 로직 유닛, 및
    상기 대응하는 코드워드들 중 하나 이상의 코드워드들을 상기 선형 블록 디코더에 재전송하도록 동작가능한 제10 로직 유닛을 더 포함하는, 선형 블록 코드워드를 생성하는 장치.
  21. 제20항에 있어서,
    상기 제9 로직 유닛은,
    상기 다른 코드워드의 디코딩 성공에 응답하여, 상기 대응하는 코드워드들 중 적어도 일 부분을 상기 다른 코드워드의 대응하는 부분들로 교체하도록 동작가능하며, 상기 다른 코드워드의 디코딩 실패에 응답하여, 상기 대응하는 코드워드들 중 하나 이상의 부분들을 출력 소프트 정보 조합에 의해 상기 다른 코드워드의 대응하는 부분들로 교체하도록 동작가능한 로직을 포함하는, 선형 블록 코드워드를 생성하는 장치.
  22. 선형 블록 코드워드를 생성하는 시스템으로서,
    디스플레이, 및
    상기 디스플레이에 결합된 고체상태 드라이브(SSD)
    를 포함하고,
    상기 SSD는 비휘발성 메모리에 결합되고 인코더를 포함하는 메모리 컨트롤러를 포함하며, 상기 메모리 컨트롤러는,
    데이터를 수신하고,
    상기 수신된 데이터를 복수의 데이터 블록들로 분할하고,
    상기 복수의 데이터 블록들 각각을 상기 인코더에 전송하고 - 상기 인코더는 상기 복수의 데이터 블록들 각각에 선형 블록 코드를 적용하여 대응하는 코드워드들을 생성함 -,
    상기 대응하는 코드워드들로부터 제1 블록 길이를 갖는 코드워드를 생성하고 - 상기 대응하는 코드워드들 각각은 제2 블록 길이를 가지며, 상기 선형 블록 코드는 상기 제2 선형 블록 길이와 같은 블록 길이의 코드워드를 가지며, 상기 제2 블록 길이는 상기 제1 블록 길이보다 짧음 -,
    버퍼를 이용하여, 상기 복수의 데이터 블록들 중 하나 이상의 데이터 블록들의 하나 이상의 선택된 부분들을 저장하도록 동작가능하고,
    상기 메모리 컨트롤러는 상기 선택된 부분들을 상기 인코더에 전송하여 상기 대응하는 코드워드들 각각의 제2 패리티 부분과는 다른 제3 패리티 부분을 생성하도록 동작가능한, 선형 블록 코드워드를 생성하는 시스템.
  23. 제22항에 있어서,
    상기 복수의 데이터 블록들 중 하나 이상의 데이터 블록들의 선택된 부분들은 상기 복수의 데이터 블록들 내의 블록들 각각과 같은 결합 길이를 갖는, 선형 블록 코드워드를 생성하는 시스템.
  24. 제22항에 있어서,
    상기 메모리 컨트롤러는 상기 선형 블록 코드를 적용하기 위한 선형 블록 디코더를 더 포함하며, 상기 메모리 컨트롤러는,
    제1 블록 길이를 갖는 코드워드를 수신하고,
    상기 수신된 코드워드를 상기 대응하는 코드워드들로 분할하고,
    상기 대응하는 코드워드들 각각을 상기 선형 블록 디코더에 전송하도록 동작가능한, 선형 블록 코드워드를 생성하는 시스템.
  25. 제24항에 있어서,
    상기 메모리 컨트롤러는,
    상기 대응하는 코드워드들의 디코딩이 성공적인지를 판정하고,
    상기 대응하는 코드워드들 중 하나 이상의 코드워드들의 디코딩이 실패인 경우 다른 코드워드를 상기 선형 블록 디코더에 전송하며 - 상기 다른 코드워드는 상기 하나 이상의 선택된 부분들과 상기 제3 패리티 부분을 포함함 -,
    상기 대응하는 코드워드들 중 하나 이상의 부분들을 상기 다른 코드워드의 대응하는 부분들로 교체하고,
    상기 대응하는 코드워드들 중 하나 이상의 코드워드들을 상기 선형 블록 디코더에 재전송하도록 동작가능한, 선형 블록 코드워드를 생성하는 시스템.
  26. 제25항에 있어서,
    상기 메모리 컨트롤러는,
    상기 다른 코드워드의 디코딩 성공에 응답하여, 상기 대응하는 코드워드들 중 적어도 일 부분을 상기 다른 코드워드의 대응하는 부분들로 교체하고, 상기 다른 코드워드의 디코딩 실패에 응답하여, 상기 대응하는 코드워드들 중 하나 이상의 부분들을 출력 소프트 정보 조합에 의해 상기 다른 코드워드의 대응하는 부분들로 교체하도록 동작가능한, 선형 블록 코드워드를 생성하는 시스템.
  27. 제22항에 있어서,
    상기 SSD는 NAND 플래시 메모리를 포함하며, 상기 메모리 컨트롤러는 SSD 컨트롤러인, 선형 블록 코드워드를 생성하는 시스템.
  28. 제22항에 있어서,
    안테나, 및
    상기 안테나에 결합되어 상기 비휘발성 메모리에 저장될 신호 데이터를 수신하기 위한 무선 주파수 회로를 더 포함하는, 선형 블록 코드워드를 생성하는 시스템.
KR1020137034874A 2011-07-01 2012-07-02 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성 및 디코딩하기 위한 장치, 시스템 및 방법 KR101625273B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/175,602 US8667360B2 (en) 2011-07-01 2011-07-01 Apparatus, system, and method for generating and decoding a longer linear block codeword using a shorter block length
US13/175,602 2011-07-01
PCT/US2012/045284 WO2013006564A2 (en) 2011-07-01 2012-07-02 Apparatus, system, and method for generating and decoding a longer linear block codeword using a shorter block length

Publications (2)

Publication Number Publication Date
KR20140015602A KR20140015602A (ko) 2014-02-06
KR101625273B1 true KR101625273B1 (ko) 2016-05-27

Family

ID=47391974

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137034874A KR101625273B1 (ko) 2011-07-01 2012-07-02 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성 및 디코딩하기 위한 장치, 시스템 및 방법

Country Status (4)

Country Link
US (1) US8667360B2 (ko)
KR (1) KR101625273B1 (ko)
GB (1) GB2510492B (ko)
WO (1) WO2013006564A2 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013048385A1 (en) 2011-09-28 2013-04-04 Intel Corporation Maximum-likelihood decoder in a memory controller for synchronization
US9467170B2 (en) * 2013-05-17 2016-10-11 Marvell World Trade Ltd. NAND flash memory systems with efficient soft information interface
KR102110767B1 (ko) * 2013-12-24 2020-06-09 삼성전자 주식회사 메모리 컨트롤러 구동방법 및 메모리 컨트롤러
KR101544649B1 (ko) * 2013-12-30 2015-08-17 서울과학기술대학교 산학협력단 SoC에서의 오류율 분석 방법
US20150303947A1 (en) * 2014-04-18 2015-10-22 LSI Corportaion Systems and Methods for Protected Portion Data Processing
US9582361B2 (en) 2014-05-20 2017-02-28 Seagate Technology Llc Fixed point conversion of LLR values based on correlation
US10033411B2 (en) 2015-11-20 2018-07-24 Intel Corporation Adjustable error protection for stored data
JP6770593B2 (ja) 2016-06-19 2020-10-14 エルジー エレクトロニクス インコーポレイティド データ伝送方法及び送信器
US10243638B2 (en) 2016-10-04 2019-03-26 At&T Intellectual Property I, L.P. Forward error correction code selection in wireless systems
US10270559B2 (en) 2016-10-04 2019-04-23 At&T Intellectual Property I, L.P. Single encoder and decoder for forward error correction coding
WO2018079987A1 (ko) * 2016-10-24 2018-05-03 엘지전자 주식회사 Ldpc 코드의 운송블록 분할 방법 및 이를 위한 장치
US10268538B2 (en) * 2016-11-28 2019-04-23 Alibaba Group Holding Limited Efficient and enhanced distributed storage clusters
US10599515B2 (en) 2017-12-21 2020-03-24 Intel Corporation Transfer of encoded data stored in non-volatile memory for decoding by a controller of a memory device
TWI712268B (zh) * 2018-11-14 2020-12-01 慧榮科技股份有限公司 快閃記憶體控制器及其中的編碼電路與解碼電路

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7376883B2 (en) 2003-10-27 2008-05-20 The Directv Group, Inc. Method and system for providing long and short block length low density parity check (LDPC) codes
US7395495B2 (en) 2004-01-12 2008-07-01 Intel Corporation Method and apparatus for decoding forward error correction codes
US7516391B2 (en) 2004-08-16 2009-04-07 Samsung Electronics Co., Ltd Apparatus and method for coding/decoding block low density parity check code with variable block length
US7661037B2 (en) 2005-10-27 2010-02-09 Samsung Electronics Co., Ltd. LDPC concatenation rules for IEEE 802.11n systems
JP4662278B2 (ja) * 2006-04-28 2011-03-30 富士通株式会社 エラー訂正装置、符号器、復号器、方法及び情報記憶装置
JP5007676B2 (ja) * 2008-01-31 2012-08-22 富士通株式会社 符号化装置、復号化装置、符号化・復号化装置及び記録再生装置
WO2010073922A1 (ja) * 2008-12-25 2010-07-01 日本電気株式会社 誤り訂正符号化装置、復号装置、符号化方法、復号方法、及びそのプログラム

Also Published As

Publication number Publication date
US8667360B2 (en) 2014-03-04
GB201323100D0 (en) 2014-02-12
GB2510492A (en) 2014-08-06
WO2013006564A3 (en) 2013-04-18
US20130007561A1 (en) 2013-01-03
GB2510492B (en) 2019-03-20
KR20140015602A (ko) 2014-02-06
WO2013006564A2 (en) 2013-01-10

Similar Documents

Publication Publication Date Title
KR101625273B1 (ko) 더 짧은 블록 길이를 이용하여 더 긴 선형 블록 코드워드를 생성 및 디코딩하기 위한 장치, 시스템 및 방법
US10353622B2 (en) Internal copy-back with read-verify
US8612834B2 (en) Apparatus, system, and method for decoding linear block codes in a memory controller
US9048876B2 (en) Systems, methods and devices for multi-tiered error correction
US8954822B2 (en) Data encoder and decoder using memory-specific parity-check matrix
US8924815B2 (en) Systems, methods and devices for decoding codewords having multiple parity segments
US8448050B2 (en) Memory system and control method for the same
US8560918B1 (en) Method and apparatus for dynamically selecting an error correction code to be applied to data in a communication system
KR101919990B1 (ko) 데이터 처리 시스템 및 그것의 에러 정정 코드 처리 방법
TWI557747B (zh) 記憶體控制模組與方法以及錯誤更正碼編/解碼電路與方法
KR20150091148A (ko) 계층적 반복 에러 교정을 위한 종료 기준
US20170331500A1 (en) System and method for parallel decoding of codewords sharing common data
US11184034B2 (en) Method and device for decoding staircase code, and storage medium
US10326477B2 (en) Techniques for miscorrection detection for constituent codewords in product codes
TWI645683B (zh) 使用代數碼與ldpc碼的部分聯結編碼系統
KR101304570B1 (ko) 패리티 체크 행렬 생성 방법, 이를 이용한 오류 정정 방법 및 장치, 오류 정정 장치용 디코더 그리고 오류 정정 장치를 포함하는 메모리 및 전자장치
KR102532611B1 (ko) 컨트롤러 및 그것의 동작 방법
US8977926B2 (en) Modified targeted symbol flipping for non-binary LDPC codes

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E90F Notification of reason for final refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190429

Year of fee payment: 4