KR101326011B1 - 솔리드 스테이트 드라이브를 위한 삭제 카운트가 감소된 진보된 데이터 인코딩 - Google Patents
솔리드 스테이트 드라이브를 위한 삭제 카운트가 감소된 진보된 데이터 인코딩 Download PDFInfo
- Publication number
- KR101326011B1 KR101326011B1 KR1020137013756A KR20137013756A KR101326011B1 KR 101326011 B1 KR101326011 B1 KR 101326011B1 KR 1020137013756 A KR1020137013756 A KR 1020137013756A KR 20137013756 A KR20137013756 A KR 20137013756A KR 101326011 B1 KR101326011 B1 KR 101326011B1
- Authority
- KR
- South Korea
- Prior art keywords
- block
- codeword
- message
- mapping rule
- identifying
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- 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/11—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 using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/1157—Low-density generator matrices [LDGM]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B11/00—Recording on or reproducing from the same record carrier wherein for these two operations the methods are covered by different main groups of groups G11B3/00 - G11B7/00 or by different subgroups of group G11B9/00; Record carriers therefor
- G11B11/08—Recording on or reproducing from the same record carrier wherein for these two operations the methods are covered by different main groups of groups G11B3/00 - G11B7/00 or by different subgroups of group G11B9/00; Record carriers therefor using recording by electric charge or by variation of electric resistance or capacitance
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C14/00—Digital stores characterised by arrangements of cells having volatile and non-volatile storage properties for back-up when the power is down
-
- 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/11—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 using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/1171—Parity-check or generator matrices with non-binary elements, e.g. for non-binary LDPC codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/001—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits characterised by the elements used
- H03M7/005—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits characterised by the elements used using semiconductor devices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Error Detection And Correction (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
메시지를 인코딩하기 위한 기술이 여기에서 일반적으로 설명된다. 인코딩된 메시지를 디코딩하기 위한 기술도 여기에서 일반적으로 설명된다. 메시지는 매핑 규칙에 따라 인코딩 및/또는 디코딩될 수 있다. 매핑 규칙은 다수의 메시지가 삭제 동작 없이 솔리드 스테이트 드라이브 내 동일한 블록에 연이어 기록될 수 있도록 할 수 있다.
Description
여기에서 달리 언급하지 않는다면, 본 섹션에서 기술된 내용은 본 출원에서 청구항에 대한 선행기술이 아니며 본 섹션에 포함함으로써 선행기술로 인정되는 것이 아니다.
솔리드 스테이트 드라이브(solid state drive)의 새롭게 삭제된 블록(block) 내 각각의 셀(cell)은 최고 전압 상태(state)에서 시작할 수 있다. 보통, 블록으로의 각각의 연이은 기록 동작(write operation)은 셀의 전압 상태를 감소시킬 수 있으나 셀의 전압 상태를 증가시킬 수는 없다. 셀의 전압 상태를 증가시키기 위해서, 삭제 동작(erasure operation)이 블록 상에 수행될 수 있으며, 블록 내 셀은 최고 전압 상태로 다시 변경된다. 그러나, 솔리드 스테이트 드라이브는 드라이브의 수명 안에서 제한된 수의 삭제 동작만을 처리할 수 있으며, 이에 따라, 잦은 삭제 동작이 예상될 수 있는 구현에서 솔리드 스테이트 드라이브의 적용 가능성을 감소시킨다.
본 개시는 일반적으로 메시지를 인코딩하기 위한 일부 방법을 설명한다. 일부 예시적인 방법에 따르면, 블록이 솔리드 스테이트 디스크에서 선택될 수 있다. 블록은 제1 상태로 구성될 수 있다. 메시지, 제약(constraint) 및 블록에 대응하는 매핑 규칙(mapping rule)이 수신될 수 있다. 메시지로 매핑하는 하나 이상의 코드워드(codeword)가 매핑 규칙에 따라 식별될 수 있다. 코드워드 내 적용가능 코드워드가 제1 상태로 구성된 블록에 적용되는 제약에 따라 식별될 수 있다. 솔리드 스테이트 드라이브 내 블록으로 적용가능 코드워드의 기록 동작이 수행될 수 있으며, 이에 따라 블록을 제1 상태에서 제2 상태로 변환할 수 있다.
본 개시는 일반적으로 일부 컴퓨터 저장 매체를 설명한다. 일부 예시적인 컴퓨터 저장 매체는, 컴퓨터에 의해 실행되는 경우 컴퓨터가 메시지를 인코딩하도록 하는 일부 방법을 위하여 거기에 저장된 컴퓨터 실행 가능 명령어를 포함할 수 있다. 일부 예시적인 방법에 따르면, 컴퓨터는 다음의 동작 중 하나 이상을 수행하도록 구성될 수 있다. 컴퓨터는 솔리드 스테이트 드라이브 내 블록으로부터 적용가능 코드워드를 판독할 수 있다. 컴퓨터는 블록에 대응하는 매핑 규칙을 검색(retrieve)할 수 있다. 컴퓨터는 매핑 규칙에 따라 코드워드로 매핑하는 메시지를 식별할 수 있다.
본 개시는 일반적으로 메시지를 인코딩하도록 구성된 일부 컴퓨터 시스템을 설명한다. 일부 예시적인 컴퓨터 시스템은 프로세서, 프로세서에 결합된 메모리 및 인코딩 유닛을 포함하도록 구성될 수 있다. 인코딩 유닛은 메모리로부터 프로세서에서 실행하도록 구성될 수 있으며, 프로세서에 의하여 실행되면, 컴퓨터 시스템이 다음의 동작 중 하나 이상을 수행함으로써 메시지를 인코딩하도록 구성될 수 있다. 컴퓨터 시스템은 솔리드 스테이트 드라이브 내 블록을 선택할 수 있다. 블록은 제1 상태로 구성될 수 있다. 컴퓨터 시스템은 제1 메시지, 제약 및 블록에 대응하는 제1 매핑 규칙을 수신할 수 있다. 컴퓨터 시스템은 제1 매핑 규칙에 따라 제1 메시지로 매핑하는 하나 이상의 제1 코드워드를 식별할 수 있다. 컴퓨터 시스템은 제1 상태로 구성된 블록에 적용되는 제약에 따라 제1 코드워드 내 제1 적용가능 코드워드를 식별할 수 있다. 컴퓨터 시스템은 솔리드 스테이트 드라이브 내 블록으로의 제1 적용가능 코드워드의 기록 동작을 수행할 수 있으며, 이에 따라 블록을 제1 상태로부터 제2 상태로 변환할 수 있다. 컴퓨터 시스템은 제2 메시지 및 블록에 대응하는 제2 매핑 규칙을 수신할 수 있다. 컴퓨터 시스템은 제2 매핑 규칙에 따라 제2 메시지로 매핑하는 하나 이상의 제2 코드워드를 식별할 수 있다. 컴퓨터 시스템은 제2 상태로 구성된 블록에 적용되는 제약에 따라 제2 코드워드 내 제2 적용가능 코드워드를 식별할 수 있다. 컴퓨터 시스템은 솔리드 스테이트 드라이브 내 블록으로의 제2 적용가능 코드워드의 기록 동작을 수행할 수 있으며, 이에 따라 블록을 제2 상태에서 제3 상태로 변환할 수 있다.
전술한 요약은 예시적인 것일 뿐이고, 어떤 방식으로든 제한을 의도한 것은 아니다. 상술한 예시적인 태양, 실시예 및 특징들에 더하여, 추가의 태양, 실시예 및 특징들이 도면과 이하의 상세한 설명을 참조함으로써 분명하게 될 것이다.
본 개시의 전술한 특징들 및 기타 특징들은, 첨부 도면을 참조하여 이하의 설명 및 첨부된 청구항으로부터 충분히 분명해질 것이다. 이러한 도면들은 본 개시에 따르는 단지 몇 가지의 실시예만을 도시한 것이고, 따라서 그 범위를 제한하는 것으로 간주되어서는 안되는 것을 이해하면서, 본 개시는 첨부된 도면의 사용을 통하여, 더 구체적이고 상세하게 기술될 것이다.
도 1은 메시지를 인코딩 하기 위한 예시적인 동작 환경을 도시하는 기능 블록도이고;
도 2a는 메시지를 인코딩하기위한 예시적인 프로세스를 도시하는 흐름도이고;
도 2b는 인코딩된 메시지를 디코딩하기 위한 예시적인 프로세스를 도시하는 흐름도이고;
도 3a-3c는 매핑 규칙으로의 입력으로서 구성된 행렬(matrix)의 예시를 도시하고;
도 4a-4c는 솔리드 스테이트 드라이브로 기록될 수 있는 메시지의 예시를 도시하고;
도 5a-5c는 메시지 및 행렬에 따른 매핑 규칙을 만족하도록 구성된 코드워드의 예시를 도시하고;
도 6a는 메시지를 인코딩하기 위한 예시적인 동작 환경을 도시하는 기능 블록도이고;
도 6b는 코드워드를 디코딩하기 위한 예시적인 동작 환경을 도시하는 기능 블록도이고;
도 7은 예시적인 컴퓨팅 시스템을 도시하는 블록도이며;
도 8a-8c는 컴퓨터 프로그램 제품을 도시하는 개략도이고, 모두 제시된 적어도 일부 실시예에 따라 배열된다.
도 1은 메시지를 인코딩 하기 위한 예시적인 동작 환경을 도시하는 기능 블록도이고;
도 2a는 메시지를 인코딩하기위한 예시적인 프로세스를 도시하는 흐름도이고;
도 2b는 인코딩된 메시지를 디코딩하기 위한 예시적인 프로세스를 도시하는 흐름도이고;
도 3a-3c는 매핑 규칙으로의 입력으로서 구성된 행렬(matrix)의 예시를 도시하고;
도 4a-4c는 솔리드 스테이트 드라이브로 기록될 수 있는 메시지의 예시를 도시하고;
도 5a-5c는 메시지 및 행렬에 따른 매핑 규칙을 만족하도록 구성된 코드워드의 예시를 도시하고;
도 6a는 메시지를 인코딩하기 위한 예시적인 동작 환경을 도시하는 기능 블록도이고;
도 6b는 코드워드를 디코딩하기 위한 예시적인 동작 환경을 도시하는 기능 블록도이고;
도 7은 예시적인 컴퓨팅 시스템을 도시하는 블록도이며;
도 8a-8c는 컴퓨터 프로그램 제품을 도시하는 개략도이고, 모두 제시된 적어도 일부 실시예에 따라 배열된다.
이하의 상세한 설명에서, 여기의 일부를 형성하는 첨부 도면에 대한 참조가 이루어진다. 도면에서, 유사한 부호는, 문맥에서 다른 지시가 없다면, 일반적으로 유사한 구성요소를 식별한다. 상세한 설명, 도면, 및 청구항에서 기술된 예시적인 실시예들은 제한하는 것으로 의미되지 않는다. 여기에 제시된 대상의 범위와 사상을 벗어나지 않으면서 다른 실시예가 이용될 수 있고, 다른 변형이 이루어질 수 있다. 여기에서 일반적으로 기술되고 도면에서 도시된 바와 같은 본 개시의 태양들이 다양한 다른 구성으로 배열, 대체, 조합, 분리, 및 설계될 수 있음과, 이 모두가 여기에서 명확히 고려됨이 쉽게 이해될 것이다.
본 개시는, 그 중에서도, 일반적으로 메시지를 인코딩하도록 구성된 기술에 관련된다. 다양한 실시예에서, 새로운 정보가 블록 상에서 삭제 동작을 수행하지 않으면서 이전에 기록된 블록에 기록될 수 있다. 예시적인 구현예에서, 사용자는 제1 메시지를 새롭게 삭제된 블록에 기록하고 싶어할 수 있다. 제1 매핑 규칙은 제1 메시지를 하나 이상의 코드워드의 제1 세트로 매핑하도록 구성될 수 있다. 컨트롤러는 코드워드의 제1 세트로부터, 다운 플립핑(down-flipping) 제약 및 저전압 레벨 비용(low-voltage-level-cost) 제약과 같은 제약을 만족하는 제1 적용가능 코드워드를 식별할 수 있다. 제1 메시지를 블록에 기록하는 대신에, 컨트롤러는 제1 적용가능 코드워드를 블록에 기록할 수 있다. 제1 적용가능 코드워드가 블록으로부터 판독되면, 컨트롤러는 또한 제1 매핑 규칙을 통하여 제1 적용가능 코드워드를 제1 메시지로 디코딩할 수 있다.
제1 메시지가 무용(obsolete)하게 되면, 사용자는 이후 제2 메시지를 블록에 기록하기 원할 수 있다. 제2 매핑 규칙은 제2 메시지를 하나 이상의 코드워드의 제2 세트로 매핑하도록 구성될 수 있다. 컨트롤러는 코드워드의 제2 세트로부터 제약을 만족하는 제2 적용가능 코드워드를 식별할 수 있다. 종래의 구현과 달리, 컨트롤러는 블록 상에 삭제 동작을 수행하지 않고 제2 적용가능 코드워드를 블록에 기록할 수 있다. 제2 적용가능 코드워드가 블록으로부터 판독되면, 컨트롤러는 또한 제2 매핑 규칙을 통하여 제2 적용가능 코드워드를 제2 메시지로 디코딩할 수 있다.
도 1로 넘어가면, 기능 블록도는 여기에서 제시된 적어도 일부 실시예에 따라 메시지를 인코딩하기 위한 예시적인 동작 환경(100)을 도시한다. 동작 환경(100)은 솔리드 스테이트 드라이브(104)에 결합된 컴퓨터(102)를 포함할 수 있다. 컴퓨터(102)는 컨트롤러(106)를 포함할 수 있다. 컨트롤러(106)는 메시지를 솔리드 스테이트 드라이브(104)에 기록하고 메시지를 솔리드 스테이트 드라이브(104)로부터 판독하도록 구성될 수 있다. 여기에서 이용되는 바와 같이, 메시지는 솔리드 스테이트 드라이브(104)에 기록되거나 솔리드 스테이트 드라이브(104)로부터 판독될 수 있는 데이터의 임의의 적절한 모음(collection)을 지칭할 수 있다.
솔리드 스테이트 드라이브(104)는 제1 블록(108A), 제2 블록(108B) 및 제N 블록(108N)을 포함하는 다수의 블록을 포함할 수 있다. 블록(108A-108N)은 일괄하여 블록(108)으로 지칭될 수 있다. 각각의 블록(108)은 다수의 셀을 포함할 수 있다. 예컨대, 제1 블록(108A)은 제1 셀(110A), 제2 셀(110B) 및 제N 셀(110N)을 포함할 수 있다. 셀(110A-110N)은 일괄하여 셀(110)로 지칭될 수 있다. 각각의 셀(110)은 전압 레벨과 같이 다수의 상태를 가지도록 구성될 수 있다. 일부 실시예에서, 각각의 셀(110)은 두 개의 전압 레벨인 고전압 레벨 및 저전압 레벨을 저장하도록 구성될 수 있다. 일부 다른 실시예에서, 각각의 셀(110)은 두 개 초과의 전압 레벨을 저장하도록 구성될 수 있다. 각 전압 레벨은 비트 값을 나타낼 수 있다. 예컨대, 2-상태 구현예에서, 고전압 레벨은 이진수 1을 나타낼 수 있고 저전압 레벨은 이진수 0을 나타낼 수 있다. 일부 실시예에서, 전압 레벨은 블록 내 셀의 전압 레벨의 비율을 나타내는 실수(real number)에 대응할 수 있다. 예컨대, 코드워드는 0.92, 0.83, 0.7510333 및 0.63일 수 있다. 이러한 경우에, 제1 셀의 전압 레벨은 0.92v로 설정될 수 있고, 제2 셀의 전압 레벨은 0.83v로 설정될 수 있고, 제3 셀의 전압 레벨은 0.7510333v로 설정될 수 있고, 제4 셀의 전압 레벨은 0.63v로 설정될 수 있으며, 여기서 v는 미리 정해진 전압 레벨을 나타낼 수 있다.
컨트롤러(106)는 제1 매핑 규칙(112A), 제2 매핑 규칙(112B) 및 제N 매핑 규칙(112N)을 포함하는 다수의 매핑 규칙을 포함할 수 있다. 매핑 규칙(112A-112N)은 일괄하여 매핑 규칙(112)으로 지칭될 수 있다. 컨트롤러(106)는 메시지를 하나 이상의 대응하는 코드워드로 인코딩하기 위하여 적절한 매핑 규칙(112)을 적용하도록 구성될 수 있다. 컨트롤러(106)는 또한 코드워드를 대응하는 메시지로 디코딩하도록 적절한 매핑 규칙(112)을 적용하도록 구성될 수 있다. 예컨대, 제1 메시지(114A)는 제1 매핑 규칙(112A)을 통하여 하나 이상의 코드워드의 제1 세트(116A)로 매핑할 수 있다. 제2 메시지(114B)는 제2 매핑 규칙(112B)을 통하여 하나 이상의 코드워드의 제2 세트(116B)로 매핑할 수 있다. 제N 메시지(114N)는 하나 이상의 코드워드의 제N 세트(116N)로 매핑할 수 있다. 메시지(114A-114N)는 일괄하여 메시지(114)로 지칭될 수 있다. 코드워드의 세트(116A-116N)는 일괄하여 코드워드(116)로 지칭될 수 있다.
컨트롤러(106)는 코드워드(116) 내에서부터, 다운 플립핑 제약 및 저전압 레벨 비용 제약과 같은 제약을 만족하는 적용가능 코드워드를 식별하도록 더 구성될 수 있다. 예컨대, 코드워드의 제1 세트(116A)는 제약을 만족하는 제1 적용가능 코드워드(118A)를 포함할 수 있다. 코드워드의 제2 세트(116B)는 제약을 만족하는 제2 적용가능 코드워드(118B)를 포함할 수 있다. 코드워드의 제N 세트(116N)는 제약을 만족하는 제N 적용가능 코드워드(118N)를 포함할 수 있다. 적용가능 코드워드(118A-118N)는 일괄하여 적용가능 코드워드(118)로 지칭될 수 있다. 다운 플립핑 제약은 기록 동작이 셀(110)의 전압 레벨을 유지하거나 감소시킬 수 있으나 셀(110)의 전압 레벨을 증가시킬 수 없음을 명시할 수 있다. 적용가능 코드워드(118)는 컨트롤러(106)가 삭제 동작 간에 다수의 메시지를 솔리드 스테이트 드라이브(104)의 블록(108)에 기록하는 것을 가능하게 할 수 있다.
도 2a로 넘어가면, 흐름도는 여기에서 설명된 적어도 일부 실시예에 따라, 메시지를 인코딩하기 위한 예시적인 프로세스(200A)를 도시한다. 프로세스(200A)는 블록(202-216) 중 하나 이상에 의해 예시된 다양한 동작, 기능 또는 작용을 포함할 수 있다. 프로세스(200A)는 블록(202)(명령어를 수신)에서 시작할 수 있으며, 여기서 컨트롤러(106)는 메시지(114) 중 하나와 같은 메시지를 솔리드 스테이트 드라이브(104)에 기록하기 위한 명령어를 수신하도록 구성될 수 있다. 메시지는 솔리드 스테이트 드라이브(104) 상에 저장될 수 있는 데이터의 임의의 적절한 모음을 포함할 수 있다. 일부 실시예에서, 메시지는 이진 값의 열 벡터(column vector)일 수 있다. 서버 컴퓨터(102)와 같은 컴퓨터는 명령어를 컨트롤러(106)에 제공할 수 있다. 블록(202)은 블록(204)으로 이어질 수 있다.
블록(204)(솔리드 스테이트 드라이브 내 블록을 선택)에서, 컨트롤러(106)는 블록(108) 중 하나와 같은 블록을 솔리드 스테이트 드라이브(104)로부터 선택하도록 구성될 수 있다. 블록은 임의의 적절한 전략에 따라 선택될 수 있다. 일 예시에서, 블록은 미리 정의된 시퀀스(sequence)에 따라 선택될 수 있다. 다른 예시에서, 블록은 미리 정해진 패턴에 따라 선택될 수 있다. 또 다른 예시에서, 블록은 무작위 또는 의사-무작위(pseudo-randomly)로 선택될 수 있다. 블록(204)은 블록(206)으로 이어질 수 있다.
블록(206)(매핑 규칙을 검색)에서, 컨트롤러(106)는 매핑 규칙(112) 중 하나와 같은 매핑 규칙을 검색하도록 구성될 수 있다. 매핑 규칙은 선택된 블록의 상태에 기초하여 선택될 수 있다. 일부 실시예에서, 선택된 블록 상에서의 정보 기록의 각각의 라운드(round)는 상이한 매핑 규칙(112)에 대응할 수 있다(예컨대, N개의 매핑 규칙은 정보 기록의 N개의 라운드에 대응할 수 있음). 일부 기타 실시예에서, 선택된 블록 상에서의 정보 기록의 각 라운드는 하나 이상의 매핑 규칙(112)에 대응할 수 있다(예컨대, 단일 매핑 규칙은 정보 기록의 N개의 라운드에 대응할 수 있음). 정보 기록의 각각의 라운드는 삭제 동작 없는 연이은 기록 동작을 나타낼 수 있다. 예컨대, 제1 매핑 규칙(112A)은 정보 기록의 제1 라운드 동안 선택된 블록이 새롭게 삭제되는 경우 선택될 수 있다. 제2 매핑 규칙(112B)은 정보 기록의 제2 라운드 동안 선택된 블록이 한번 기록된 이후에 선택될 수 있다. 제N 매핑 규칙(112N)은 정보 기록의 제N 라운드 동안에 선택된 블록이 N-1회 기록된 이후에 선택될 수 있다.
일부 실시예에서, 각각의 매핑 규칙(112)은 이하의 신드롬 코딩 방정식(syndrome coding equation) 을 만족하도록 구성된 행렬 H를 정의할 수 있고, 여기서 는 코드워드를 나타내고, 은 메시지를 나타내며, "mod"는 모듈로(modulo) 연산을 나타낸다. 일부 실시예에서, 각각의 매핑 규칙(112)은 상이한 행렬을 정의할 수 있다. 예컨대, 제1 매핑 규칙(112A)은 제1 행렬을 이용할 수 있고, 제2 매핑 규칙(112B)은 제2 행렬을 이용할 수 있으며, 제N 매핑 규칙(112N)은 제N 행렬을 이용할 수 있다. 일부 다른 실시예에서, 매핑 규칙(112)은 하나 이상의 행렬을 공유할 수 있다. 코드워드 는 이진 문자열(binary string)을 나타낼 수 있다. 하나 이상의 코드워드는 임의의 주어진 메시지에 대한 신드롬 코딩 방정식을 만족할 수 있다.
일부 실시예에서, 단일 매핑 규칙(112)이 에러 정정 기반 매핑 규칙에 해당할 수 있다. 에러 정정 기반 매핑 규칙은 프로세스를 인코딩하고 디코딩하는 다양한 저밀도 패리티 검사 코드(low-density parity-check code) 및 저밀도 생성 행렬 코드(low-density generator-matrix code)를 이용할 수 있다. 에러 정정 기반 매핑 규칙은 또한 프로세스를 인코딩 및 디코딩하는 결합(joint) 저밀도 패리티 검사 코드 및 저밀도 생성 행렬 코드를 이용할 수 있다. 단일 매핑 규칙(112)은 정보 기록의 다수의 라운드에 대하여 이용될 수 있다. 단일 매핑 규칙(112)은 다수의 코드워드에 대응할 수 있다. 이러한 경우에, 적용가능 코드워드는 저전압 레벨 비용 제약에 따라 다수의 코드워드로부터 선택될 수 있다. 블록(206)은 블록(208)으로 이어질 수 있다.
블록(208)(하나 이상의 코드워드를 식별)에서, 컨트롤러(106)는 메시지로 매핑하는 하나 이상의 코드워드를 식별하도록 구성될 수 있다. 코드워드는 메시지의 인코딩을 나타낼 수 있다. 일부 실시예에서, 컨트롤러(106)는 앞서 설명된 신드롬 코딩 방정식을 적용함으로써 코드워드를 결정할 수 있다. 블록(208)은 블록(210)으로 이어질 수 있다.
블록(210)(적용가능 코드워드가 존재하는지 여부를 결정)에서, 컨트롤러(106)는 식별된 코드워드가 선택된 블록에 관련된 제약을 만족하는 적용가능 코드워드를 포함하는지 여부를 결정하도록 구성될 수 있다. 일부 실시예에서, 제약은 저전압 레벨 비용 제약일 수 있다. 저전압 레벨 비용 제약은 기록 동작이 블록에서 전체 전압 레벨 감소를 최소화하는 점을 명시할 수 있다. 즉, 저전압 레벨 비용 제약은 기록 동작 이전의 종전 전체 전압 레벨 및 기록 동작 이후의 현재 전체 전압 레벨 간의 최소 차에 대응할 수 있다. 일부 다른 실시예에서, 제약은 다운 플립핑 제약일 수 있다. 다운 플립핑 제약은 기록 동작이 선택된 블록 내 셀의 전압 레벨을 유지하거나 감소시키는 점을 명시할 수 있다.
예컨대, 선택된 블록이 [1, 1, 0, 0]로 구성될 수 있다. 즉, 선택된 블록은 4개의 셀을 포함할 수 있다. 제1 및 제2 셀은 이진수 1을 나타내는 고전압 레벨로 구성될 수 있다. 제3 및 제4 셀은 이진수 0을 나타내는 저전압 레벨로 구성될 수 있다. 주어진의 메시지에 대응하는 일부 식별된 코드워드는 [1, 0, 1, 0]t, [1, 1, 1, 1]t 및 [1, 0, 0, 0]t을 포함할 수 있다. 위첨자 t는 전치(transpose)를 나타낼 수 있다. 이러한 예시에서, 첫번째 코드워드 [1, 0, 1, 0]t는 선택된 블록 내 제3 셀이 현재 저전압 레벨에 있고 첫번째 코드워드를 저장하기 위해 고전압 레벨로 "플립핑 업(flipped up)"될 수 없으므로, 다운 플립핑 제약을 만족하지 않을 수 있다. 마찬가지로, 두번째 코드워드 [1, 1, 1, 1]t는 선택된 블록 내 제3 및 제4 셀이 현재 저전압 레벨에 있고, 두번째 코드워드를 저장하기 위해 고전압 레벨로 "플립핑 업"될 수 없으므로, 다운 플립핑 제약을 만족하지 않을 수 있다. 첫번째 코드워드 및 두번째 코드워드와는 달리, 세번째 코드워드 [1, 0, 0, 0]t는 세번째 코드워드를 저장하기 위해 선택된 블록의 각 셀이 그 전압 레벨을 유지하거나 감소시키므로 다운 플립핑 제약을 만족할 수 있다.
컨트롤러(106)가 식별된 코드워드 내에 적용가능 코드워드가 존재하지 않는다고 결정하면, 블록(210)은 블록(216)으로 이어질 수 있다. 컨트롤러(106)가 식별된 코드워드 내에 적용가능 코드워드가 존재한다고 결정하면, 블록(210)은 블록(212)으로 이어질 수 있다.
블록(212)(적용가능 코드워드를 선택)에서, 컨트롤러(106)는 제약을 만족하는 적용가능 코드워드를 선택하도록 구성될 수 있다. 앞선 예시에서, 컨트롤러(106)는 세번째 코드워드가 선택된 블록의 현재 구성 [1, 1, 0, 0]에 관하여 다운 플립핑 제약을 만족하므로 세번째 코드워드 [1, 0, 0, 0]t를 선택할 수 있다.
일부 실시예에서, 컨트롤러(106)는 저전압 레벨 비용 제약을 만족하도록, 필요에 따라, 적용가능 코드워드를 반전(reverse)하도록 구성될 수 있다. 저전압 레벨 비용 제약은 적용가능 코드워드가 가능한 적은 셀의 전압 레벨을 감소시켜야 함을 명시할 수 있다. 예컨대, 선택된 블록은 [1, 1, 1, 1]으로 구성될 수 있다. 주어진 메시지에 대응하는 적용가능 코드워드는 [1, 0, 0, 0]t일 수 있다. 컨트롤러(106)가 적용가능 코드를, 있는 그대로, 선택된 블록에 기록하면, 선택된 블록의 4개의 셀 중 3개의 전압 레벨이 감소될 수 있다.
이러한 경우에, 컨트롤러(106)는 적용가능 코드워드를 [1, 0, 0, 0]t에서 [0, 1, 1, 1]t로 반전하도록 구성될 수 있다. 이러한 방식으로, 컨트롤러(106)가 반전된 적용가능 코드워드를 선택된 블록에 기록하면, 선택된 블록의 4개의 셀 중 단 하나만의 전압 레벨이 감소될 수 있다. 컨트롤러(106)가 반전된 적용가능 코드워드를 선택된 블록으로부터 판독하면, 컨트롤러(106)는 디코딩에 앞서 반전된 적용가능 코드워드를 적용가능 코드워드로 전환하도록 구성될 수 있다. 블록(212)은 블록(214)으로 이어질 수 있다.
블록(214)(적용가능 코드워드를 기록)에서, 컨트롤러(106)는 선택된 적용가능 코드워드를 솔리드 스테이트 드라이브(104) 내 선택된 블록에 기록하도록 구성될 수 있다. 선택된 적용가능 코드워드를 솔리드 스테이트 드라이브(104) 내 선택된 블록에 기록함으로써, 컨트롤러(106)는 선택된 블록을 한 상태에서 다른 상태로 변환할 수 있다. 앞선 예시에서, 선택된 블록은 초기에 [1, 1, 0, 0]으로 구성될 수 있다. 컨트롤러(106)가 세번째 코드워드 [1, 0, 0, 0]t를 선택된 블록에 기록하면, 컨트롤러(106)는 선택된 블록을 [1, 1, 0, 0]의 현재 구성으로부터 [1, 0, 0, 0]의 새로운 구성으로 변환할 수 있다. 블록(214) 이후에, 프로세스(200A)는 (예컨대, 필요에 따라 주기적으로, 연속적으로 또는 요구에 따라) 반복하거나 종료할 수 있다.
블록(216)(에러 복구 절차를 수행)에서, 컨트롤러(106)가 블록(210)에서 적용가능 코드워드가 존재하지 않는다고 결정하면, 컨트롤러(106)는 에러 복구 절차를 수행하도록 구성될 수 있다. 에러 복구 절차의 일부 실시예에서, 컨트롤러(106)는 선택된 블록 상에 삭제 동작을 수행하도록 구성될 수 있다. 선택된 블록 상에 삭제 동작을 수행함으로써, 컨트롤러(106)는 선택된 블록 내 각각의 셀을 다시 최고 전압 레벨로 구성할 수 있다. 에러 복구 절차의 일부 다른 실시예에서, 컨트롤러(106)는 솔리드 스테이트 드라이브(104) 내 다른 블록을 선택할 수 있다. 컨트롤러(106)가 에러 복구 절차를 수행하면, 블록(216)은 블록(206)으로 이어질 수 있다.
도 2b로 넘어가면, 흐름도는 여기에서 설명된 적어도 일부 실시예에 따라 인코딩된 메시지를 디코딩하기 위한 예시적인 프로세스(200B)를 도시한다. 프로세스(200B)는 블록(222-226) 중 하나 이상에 의해 예시된 바와 같은 다양한 동작, 기능 또는 작용을 포함할 수 있다. 프로세스(200B)는 블록(222)(코드워드를 판독)에서 시작할 수 있고, 여기서 컨트롤러(106)는 블록(108) 중 하나와 같은 블록으로부터 코드워드를 판독하도록 구성될 수 있다. 블록(222)은 블록(224)으로 이어질 수 있다.
블록(224)(현재 매핑 규칙을 검색)에서, 컨트롤러(106)는 판독된 블록과 연관된 현재 매핑 규칙을 검색하도록 구성될 수 있다. 앞서 설명된 바와 같이, 판독된 블록과 연관된 현재 매핑 규칙은 블록의 현재 상태에 따를 수 있다. 일부 실시예에서, 판독된 블록과 연관된 현재 매핑 규칙은 정보 기록의 현재 라운드에 대응할 수 있다. 블록(224)은 블록(226)으로 이어질 수 있다.
블록(226)(메시지를 식별)에서, 컨트롤러(106)는 현재 매핑 규칙에 따른 검색된 코드워드에 대응하는 메시지를 식별하도록 구성될 수 있다. 블록(226) 이후에, 프로세스(200B)는 (예컨대, 필요에 따라 주기적으로, 연속적으로 또는 요구에 따라) 반복하거나 종료할 수 있다.
도 3a-3c, 4a-4c 및 5a-5c로 넘어가면, 여기에서 제시된 적어도 일부 실시예에 따라, 매핑 규칙의 예시적인 실시예가 일부 예시의 방식으로 도시된다. 도 3a-3c, 4a-4c 및 5a-5c에 도시된 예시에서, 예시적인 매핑 규칙은 앞서 설명된 신드롬 코딩 방정식 에 해당할 수 있다. 도 3a-3c는 매핑 규칙으로의 입력으로서 구성된 행렬(H 1, H 2, H 3)의 일부 예시를 도시한다. 도 4a-4c는 솔리드 스테이트 드라이브(104)에 기록될 수 있는 메시지()의 일부 예시를 도시한다. 도 5a-5c는 각각 행렬(H 1, H 2, H 3) 및 메시지()에 따라 매핑 규칙을 만족하도록 구성된 코드워드()의 일부 예시를 도시한다.
도 3a는 정보 기록의 제1 라운드에서 이용될 수 있는 제1 행렬(302)을 도시한다. 도 4a는 제1 메시지(402)를 도시한다. 도 5a는 코드워드(502)를 도시한다. 일부 예시에서, 컨트롤러(106)는 제1 메시지(402)를 솔리드 스테이트 드라이브(104) 내 제1 블록(108A)과 같은 블록에 기록하기 위한 명령어를 수신할 수 있다. 정보 기록의 제1 라운드에 앞서, 제1 블록(108A)은 새롭게 삭제된 블록으로 시작할 수 있다. 예컨대, 제1 블록(108A) 내 각각의 셀(110)은 이진수 1을 나타내는 최고 전압 레벨로 구성될 수 있다. 제1 블록(108A)은 정보 기록의 제1 라운드에 앞서 [1, 1, 1, 1]로 구성될 수 있다.
제1 메시지(402)를 제1 블록(108A)에 기록하기 위한 컨트롤러(106)로부터의 명령어를 수신하면, 컨트롤러(106)는 방정식 에 대응하는 제1 매핑 규칙을 검색할 수 있다. 컨트롤러(106)는 방정식을 만족하는 코드워드 의 값을 식별하도록 구성될 수 있다. 이러한 예시에서, 단일의 코드워드(502)가 제1 행렬(302) 및 제1 메시지(402)가 주어진 방정식을 만족할 수 있다. 제1 블록(108A)이 새롭게 삭제되므로, 코드워드(502)를 포함하는 임의의 이진 문자열은 다운 플립핑 제약을 만족할 수 있다. 결과적으로, 컨트롤러(106)는 기록 동작을 수행하여 코드워드(502)를 제1 블록(108A) 상에 기록하도록 구성될 수 있다. 이러한 기록 동작에 비추어, 제1 블록(108A)은 [1, 1, 1, 1]의 현재 구성으로부터 [1, 1, 0, 0]의 새로운 구성으로 변환될 수 있다.
컨트롤러(106)가 제1 블록(108A)을 판독하기 위한 명령어를 수신하면, 컨트롤러(106)는 인코딩된 메시지 [1, 1, 0, 0]를 제1 블록(108)으로부터 판독할 수 있다. 인코딩된 메시지 [1, 1, 0, 0]를 제1 블록(108)으로부터 판독하면, 컨트롤러(106)는 현재 매핑 규칙을 검색할 수 있다. 이러한 경우에, 현재 매핑 규칙은 방정식 에 대응하는 제1 매핑 규칙일 수 있다. 컨트롤러(106)는 제1 매핑 규칙에 따라 인코딩된 메시지 [1, 1, 0, 0]를 다시 제1 메시지(402)로 디코딩할 수 있다.
도 3b는 정보 기록의 제2 라운드에서 이용될 수 있는 제2 행렬(304)을 도시한다. 도 4b는 제2 메시지(404)를 도시한다. 도 5b는 다수의 코드워드(504-510)를 도시한다. 예시예서, 제1 메시지(402)가 무용하게 될 수 있고, 컨트롤러(106)는 제2 메시지(404)를 제1 블록(108A)에 기록하기 위한 후속의 명령어를 수신할 수 있다. 정보 기록의 제1 라운드의 결과로서, 정보 기록의 제2 라운드에 앞서 제1 블록(108A)은 [1, 1, 0, 0]으로 구성될 수 있다.
제2 메시지(404)를 제1 블록(108A)에 기록하기 위한 컨트롤러(106)로부터의 명령어를 수신하면, 컨트롤러(106)는 방정식 에 대응하는 제2 규칙을 검색할 수 있다. 컨트롤러(106)는 방정식을 만족하는 코드워드 의 값을 식별하도록 구성될 수 있다. 이러한 예시에서, 다수의 코드워드(504-510)는 제2 행렬(304) 및 제2 메시지(404)가 주어진 방정식을 만족할 수 있다. 그러나, 코드워드(504, 506, 510)가 제1 블록(108A)의 현재 구성이 주어진 다운 플립핑 제약을 만족하지 않을 수 있다. 즉, 코드워드(504, 506, 510) 각각은 셀(110) 중 적어도 하나의 전압 레벨을 부적절히 증가시키는 것을 수반할 수 있다. 코드워드(508)는 다운 플립핑 제약을 만족할 수 있다. 결과적으로, 컨트롤러(106)는 코드워드(508)를 제1 블록(108A)에 기록하기 위한 기록 동작을 수행하도록 구성될 수 있다. 이러한 기록 동작에 비추어, 제1 블록(108A)은 [1, 1, 0, 0]의 현재 구성으로부터 [1, 0, 0, 0]의 새로운 구성으로 변환될 수 있다.
컨트롤러(106)가 제1 블록(108A)을 판독하기 위한 명령어를 수신하면, 컨트롤러(106)는 인코딩된 메시지 [1, 0, 0, 0]를 제1 블록(108)으로부터 판독할 수 있다. 인코딩된 메시지 [1, 0, 0, 0]를 제1 블록(108)으로부터 판독하면, 컨트롤러(106)는 현재 매핑 규칙을 검색할 수 있다. 이러한 경우에, 현재 매핑 규칙은 방정식 에 대응하는 제2 매핑 규칙일 수 있다. 컨트롤러(106)는 제2 매핑 규칙에 따라 인코딩된 메시지 [1, 0, 0, 0]를 다시 제2 메시지(404)로 디코딩할 수 있다.
도 3c는 정보 기록의 제3 라운드에서 이용될 수 있는 제3 행렬(306)을 도시한다. 도 4c는 제3 메시지(406)를 도시한다. 도 5c는 다수의 코드워드(512-526)를 도시한다. 예시에서, 제2 메시지(404)가 무용하게 될 수 있고, 컨트롤러(106)는 제3 메시지(406)를 제1 블록(108A)에 기록하기 위한 후속의 명령어를 수신할 수 있다. 정보 기록의 제2 라운드의 결과로서, 제1 블록(108A)은 정보 기록의 제3 라운드에 앞서 [1, 0, 0, 0]으로 구성될 수 있다.
제3 메시지(406)를 제1 블록(108A)으로 기록하기 위한 컨트롤러(106)로부터의 명령어를 수신하면, 컨트롤러(106)는 방정식 에 대응하는 제3 규칙을 검색할 수 있다. 컨트롤러(106)는 방정식을 만족하는 코드워드 의 값을 식별하도록 구성될 수 있다. 이러한 예시에서, 다수의 코드워드(512-526)는 제3 행렬(306) 및 제3 메시지(406)가 주어진 방정식을 만족할 수 있다. 그러나, 코드워드(512-518 및 522-526)는 제1 블록(108A)의 현재 구성이 주어진 다운 플립핑 제약을 만족하지 않을 수 있다. 즉, 코드워드(512-518 및 522-526) 각각은 셀(110) 중 적어도 하나의 전압 레벨을 부적절히 증가시키는 것을 수반할 수 있다. 코드워드(520)는 다운 플립핑 제약을 만족할 수 있다. 결과적으로, 컨트롤러(106)는 코드워드(508)를 제1 블록(108A)에 기록하기 위한 기록 동작을 수행하도록 구성될 수 있다. 이러한 기록 동작에 비추어, 제1 블록(108A)은 [1, 0, 0, 0]으로 구성되어 남을 수 있다.
컨트롤러(106)가 제1 블록(108A)을 판독하기 위한 명령어를 수신하면, 컨트롤러(106)는 인코딩된 메시지 [1, 0, 0, 0]를 제1 블록(108)으로부터 판독할 수 있다. 인코딩된 메시지 [1, 0, 0, 0]를 제1 블록(108)으로부터 판독하면, 컨트롤러(106)는 현재 매핑 규칙을 검색할 수 있다. 이러한 경우에, 현재 매핑 규칙은 방정식 에 대응하는 제3 매핑 규칙일 수 있다. 컨트롤러(106)가 제3 매핑 규칙에 따라 인코딩된 메시지 [1, 0, 0, 0]를 다시 제3 메시지(406)로 디코딩할 수 있다.
도 6a로 넘어가면, 기능 블록도가 여기에서 설명된 적어도 일부 실시예에 따라, 메시지를 인코딩하기 위한 예시적인 동작 환경(600A)을 도시한다. 동작 환경(600A)은 차수 4의 갈르와 필드(Galois field of order 4("GF(4)"))(602) 상의 저밀도 패리티 검사(low-density parity-check("LDPC")) 코드(602), 희소 매핑 모듈(sparse mapping module)(604), GF(4) 상의 저밀도 생성 행렬(low-density generator-matrix("LDGM")) 코드(606), 매핑 모듈(608) 및 코드워드 생성 모듈(610)을 포함할 수 있다.
LDPC 코드(602)는 메시지(612)를 하나 이상의 LDPC 코드워드(614)로 인코딩할 수 있다. LDPC 코드워드(614)는 유한 필드 GF(4) 내의 심볼(symbol)의 문자열로 표현될 수 있다. LDPC 코드(602)는 행렬 방정식에 의해 정의될 수 있다. LDPC 코드(602)에 의해 인코딩된 코드워드는 상기 행렬 방정식을 만족하는 벡터()일 수 있으며, 여기서 H는 고정된 희소 행렬일 수 있고, H 및 의 요소는 GF(4) 내 심볼일 수 있고, 승산 및 가산은 GF(4) 내 유한 필드 승산 및 가산일 수 있다.
희소 매핑 모듈(604)은 LDPC 코드(602)에 의해 인코딩된 각각의 LDPC 코드워드(614)를 희소 이진 문자열(616)로 매핑할 수 있다. 희소 이진 문자열(616)은 0 및 1의 문자열일 수 있고, 여기서 1보다 0이 많다. 예컨대, 희소 매핑 모듈(604)은 유한 필드 GF(4) 내 4개의 심볼을 희소 비트 문자열 1000, 0100, 0010 및 0001로 각각 매핑할 수 있다. 희소 매핑 모듈(604)은 GF(4) 내 심볼의 문자열을 각각의 개별 심볼에 대응하는 희소 문자열의 연결(concatenation)로 매핑할 수 있다.
LDGM 코드(606)는 희소 이진 문자열(616) 및 솔리드 스테이트 드라이브 내 블록의 현재 상태(620)에 기초하여 하나 이상의 LDGM 코드워드(618)를 생성할 수 있다. 각각의 LDGM 코드워드(618)는 GF(4) 심볼의 문자열로 표현될 수 있다. LDGM 코드(606)는 행렬 방정식 에 의해 정의될 수 있다. LDGM 코드(606)에 의해 인코딩된 LDGM 코드워드는 벡터 일 수 있으며, 여기서 는 상기 행렬 방정식을 만족하는 두 개의 벡터일 수 있고, G는 고정된 희소 행렬일 수 있고, 요소 는 유한 필드 GF(4) 내 심볼일 수 있고, 승산 및 가산은 GF(4)에서의 유한 필드 승산일 수 있다. 하나 초과의 LDGM 코드워드(618)가 생성되면, 적용가능 LDGM 코드워드(618)가 저전압 레벨 비용 제약에 따라 선택될 수 있다.
매핑 모듈(608)은 LDGM 코드워드(618)를 상태 적응 문자열(state adaptive string)(622)로서 구현된 정수의 문자열로 매핑할 수 있다. 각각의 정수는 비트 값에 해당할 수 있으며, 그 각각은 상이한 전압 레벨에 대응한다. 예컨대, 솔리드 스테이트 드라이브 내 각각의 셀이 4개의 전압 중 하나로 구성될 수 있으면, 정수 0, 1, 2, 3은 각각 제1, 제2, 제3 및 제4 전압 레벨에 대응할 수 있다. 코드워드 생성 모듈(610)은 상태 적응 문자열(622) 및 희소 이진 문자열(616)을 합산함으로써 코드워드(624)를 생성할 수 있다.
메시지를 인코딩하기 위한 예시적인 프로세스 흐름이 다음과 같이 설명될 수 있다. LDPC 코드(602)는 메시지(612)를 수신할 수 있다. LDPC 코드(602)는 메시지(612)를 LDPC 코드워드(614)로 인코딩할 수 있다. 희소 매핑 모듈(604)은 LDPC 코드워드(614)를 25%의 1 및 75%의 0을 포함하는 희소 이진 문자열(616)로 매핑할 수 있다. LDGM 코드(606)는 솔리드 스테이트 드라이브 내 블록의 현재 상태(즉, 구성)(620)를 관찰할 수 있고 희소 이진 문자열(616) 및 현재 상태(620)에 기초하여 LDGM 코드워드(618)를 생성할 수 있다. 매핑 모듈(608)은 LDGM 코드워드(618)를 상태 적응 문자열(622)로 매핑할 수 있다. 코드워드 생성 모듈(610)에 의해 생성된 결과적인 코드워드(624)는 희소 이진 문자열(616) 및 상태 적응 문자열(622)의 합산의 모듈로 4와 같을 수 있다.
도 6b로 넘어가면, 기능 블록도는 여기에서 설명된 적어도 일부 실시예에 따라, 코드워드를 디코딩하기 위한 예시적인 동작 환경(600B)을 도시한다. 동작 환경(600B)은, 도 6a에 관하여 상술한 바와 같이, 차수 4의 갈르와 필드(GF(4))(602) 상의 저전압 패리티 검사(LDPC) 코드(602), 희소 매핑 모듈(604), GF(4) 상의 저전압 생성 행렬(LDGM) 코드(606), 매핑 모듈(608) 및 코드워드 생성 모듈(610)을 포함할 수 있다. 동작 환경(600B)은 메시지 디코딩 모듈(626)을 더 포함할 수 있다.
코드워드를 디코딩하기 위한 예시적인 프로세스 흐름이 이하에서 설명될 수 있다. LDGM 코드(606) 및/또는 매핑 모듈(608)은 코드워드(624)를 솔리드 스테이트 드라이브의 블록으로부터 검색할 수 있다. 코드워드(624)는 희소 이진 문자열(616) 및 상태 적응 문자열(622)의 합산의 모듈로 4와 같을 수 있으므로, 코드워드(624)는 심볼의 25%가 플립핑된 상태 적응 문자열(622)의 노이즈 손상 버전(noise corrupted version)으로 고려될 수 있다. 매핑 모듈(608) 및 LDGM 코드(606)는 다양한 에러 정정 기술을 이용하여 상태 적응 문자열(622) 및 LDGM 코드워드(618)를 각각 복구할 수 있다. 메시지 디코딩 모듈(626)은 상태 적응 문자열(622)을 LDGM 코드워드(618)로부터 감산하여 희소 이진 문자열(616)을 획득할 수 있다. 희소 매핑 모듈(604)은 이후 희소 이진 문자열(616)을 LDPC 코드워드(614)로 매핑할 수 있다. LDPC 코드(602)는 메시지(612)를 LDPC 코드워드(614)로부터 획득할 수 있다.
도 7은 여기에서 제시된 적어도 일부 실시예를 구현할 수 있는 예시적인 컴퓨팅 시스템에 대한 예시적인 컴퓨터 하드웨어 아키텍처를 도시하는 컴퓨터 아키텍처도이다. 도 7은 프로세서(710), 메모리(720) 및 하나 이상의 드라이브(730)를 포함하는 컴퓨터(700)를 포함한다. 컴퓨터(700)는 종래의 컴퓨터 시스템, 임베디드 컨트롤 컴퓨터, 랩탑 또는 서버 컴퓨터, 모바일 장치, 셋탑 박스, 키오스크(kiosk), 차량 정보 시스템, 모바일 전화, 맞춤형 머신 또는 기타 하드웨어 플랫폼으로 구현될 수 있다.
드라이브(730) 및 그 연관된 컴퓨터 저장 매체는 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 및 컴퓨터(700)에 대한 다른 데이터의 저장을 제공한다. 드라이브(730)는 운영 체제(740), 어플리케이션 프로그램(750), 프로그램 모듈(760) 및 데이터베이스(780)를 포함할 수 있다. 프로그램 모듈(760)은 컨트롤러(106)를 포함할 수 있다. 컨트롤러(106)는 도 2a-2b에 관하여 위에서 보다 상세히 설명된 바와 같은 메시지를 인코딩하기 위한 프로세스(200A) 및/또는 인코딩된 메시지를 디코딩하기 위한 프로세스(200B)를 실행하도록 구성될 수 있다. 컴퓨터(700)는 사용자 입력 장치(790)를 더 포함하며, 이를 통하여 사용자는 명령 및 데이터를 입력할 수 있다. 입력 장치는 전자 디지타이저, 마이크, 키보드, 및 보통 마우스, 트랙볼 또는 터치 패드로 지칭되는 포인팅 장치를 포함할 수 있다. 다른 입력 장치는 조이스틱, 게임 패드, 위성 안테나, 스캐너 등을 포함할 수 있다.
이러한 입력 장치 및 다른 입력 장치는 시스템 버스에 결합되는 사용자 입력 인터페이스를 통하여 프로세서(710)에 결합될 수 있으나, 병렬 포트, 게임 포트 또는 범용 직렬 버스(universal serial bus(USB))와 같은 다른 인터페이스 및 버스 구조에 의해 결합될 수 있다. 컴퓨터(700)와 같은 컴퓨터는 또한 출력 주변장치 인터페이스(794) 등을 통하여 결합될 수 있는 스피커와 같은 다른 주변 출력 장치를 포함할 수 있다.
컴퓨터(700)는 네트워크 인터페이스(796)에 결합된 원격 컴퓨터와 같은 하나 이상의 컴퓨터로의 논리적인 연결을 이용하여 네트워크 환경에서 동작할 수 있다. 원격 컴퓨터는 개인용 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 공통 네트워크 노드일 수 있고 컴퓨터(700)에 관하여 상술한 요소 중 다수 또는 전부를 포함할 수 있다. 네트워킹 환경은 사무실, 기업 광역 통신망(WAN), 근거리 통신망(LAN), 인트라넷 및 인터넷에서 흔하다.
LAN 또는 WLAN 네트워킹 환경에서 이용되는 경우, 컴퓨터(700)는 네트워크 인터페이스(796) 또는 어댑터를 통하여 LAN에 결합될 수 있다. WAN 네트워킹 환경에서 이용되는 경우, 컴퓨터(700)는 보통 모뎀 또는 네트워크(708) 또는 인터넷과 같은 WAN을 통하여 통신을 수립하기 위한 다른 수단을 포함할 수 있다. WAN은 인터넷, 예시된 네트워크(708), 다양한 다른 네트워크 또는 그들의 임의의 조합을 포함할 수 있다. 컴퓨터 간의 통신 링크, 링, 메쉬, 버스, 클라우드 또는 네트워크를 수립하는 다른 메커니즘이 이용될 수 있다는 점이 인정될 것이다.
일부 실시예에 따르면, 컴퓨터(700)는 네트워킹 환경에 결합될 수 있다. 컴퓨터(700)는 드라이브(730) 또는 다른 저장 장치와 연관된 물리적인 컴퓨터 판독 가능 저장 매체(들) 중 하나 이상의 예시를 포함할 수 있다. 시스템 버스는 프로세서(710)가 코드 및/또는 데이터를 컴퓨터 판독가능 저장 매체로/로부터 판독하는 것이 가능하도록 할 수 있다. 매체는 반도체, 자기성 재료, 광학 매체, 전기적 저장 장치, 전기화학 저장 장치 또는 임의의 다른 그러한 저장 기술을 포함하지만 이에는 제한되지 않는 임의의 적절한 기술을 이용하여 구현되는 저장 요소의 형태의 장치를 나타낼 수 있다. 매체는 RAM, ROM, 플래시 또는 다른 유형의 휘발성 또는 비휘발성 기술로서 특징지어지든 아니든, 메모리(720)와 연관된 컴포넌트를 나타낼 수 있다. 매체는 또한 저장 드라이브(730)로 구현되든 아니든 2차 저장 장치를 나타낼 수 있다. 하드 드라이브 구현예는 솔리드 스테이트로서 특징지어질 수 있거나 자기적으로 인코딩된 정보를 저장하는 회전 매체를 포함할 수 있다.
저장 매체는 하나 이상의 프로그램 모듈(760)을 포함할 수 있다. 프로그램 모듈(760)은 프로세서(710)로 로딩되고, 실행되는 경우, 범용 컴퓨팅 시스템을 특수 목적 컴퓨팅 시스템으로 변환하는 소프트웨어 명령어를 포함할 수 있다. 본 설명 전반을 통하여 상세하게 설명된 바와 같이, 프로그램 모듈(760)은 다양한 툴(tool) 또는 기법을 제공할 수 있고, 이에 따라 컴퓨터(700)는 여기에서 설명된 컴포넌트, 로직 흐름 및/또는 데이터 구조를 이용하여 전체적인 시스템 또는 동작 환경 내에 참여할 수 있다.
프로세서(710)는 개별적으로 또는 집합적으로 임의의 수의 상태를 가정할 수 있는, 임의의 수의 트랜지스터 또는 기타 회로 소자로부터 구성될 수 있다. 더 구체적으로, 프로세서(710)는 상태 머신 또는 유한 상태 머신으로 동작할 수 있다. 그러한 머신은 프로그램 모듈(760) 내에 포함된 실행 가능한 명령어를 로딩함으로써 특정 머신 또는 제2 머신으로 변환될 수 있다. 이러한 컴퓨터로 실행 가능한 명령어는, 프로세서(710)가 어떻게 상태 간에 전환하는지를 지정함으로써 프로세서(710)를 변환할 수 있고, 이에 따라 제1 머신으로부터 제2 머신으로 프로세서(710)를 구성하는 트랜지스터 또는 기타의 회로 소자를 변환할 수 있다. 각 머신의 상태는 또한 하나 이상의 사용자 입력 장치(790), 네트워크 인터페이스(796), 기타의 주변장치, 기타의 인터페이스, 또는 하나 이상의 사용자 또는 기타의 행위자로부터 입력을 수신함으로써 변환될 수 있다. 각각의 머신은 또한 프린터, 스피커, 비디오 디스플레이 등과 같은 다양한 출력 장치의 다양한 물리적인 특징 또는 상태를 변환할 수 있다.
프로그램 모듈(760)을 인코딩하는 것은 저장 매체의 물리적 구조를 또한 변환할 수 있다. 본 개시의 상이한 구현예에서, 물리적 구조의 특정 변환은 다양한 요소에 의존할 수 있다. 그러한 요소의 예시는, 저장 매체를 구현하는데 사용되는 기술, 저장 매체가 주 저장장치로 특징지어지는지 또는 이차적인 저장장치로 특징지어지는지 여부 등을 포함할 수 있으나, 이에 제한되지는 않는다. 예를 들어, 저장 매체가 반도체 기반의 메모리로 구현되면, 프로그램 모듈(760)은 소프트웨어가 거기에 인코딩되면 반도체 메모리(720)의 물리적 상태를 변환할 수 있다. 예를 들어, 소프트웨어는 반도체 메모리(720)를 구성하는 트랜지스터, 커패시터, 또는 기타의 이산 회로 소자를 변환할 수 있다.
다른 예시로서, 저장 매체는 드라이브(730)와 같은 자기 또는 광학 기술을 이용하여 구현될 수 있다. 그러한 구현예에서, 프로그램 모듈(760)은 소프트웨어가 거기에 인코딩되면, 자기 또는 광학 매체의 물리적인 상태를 변환할 수 있다. 이러한 변환은 주어진 자기 매체 내에서 특정 위치의 자기적인 특성을 바꾸는 것을 포함할 수 있다. 이러한 변환은 또한 주어진 광학 매체 내에서 특정 위치의 물리적인 특성 또는 특징을 바꾸어, 그 위치의 광학적인 특성을 바꾸는 것을 포함할 수 있다. 본 개시의 범위 및 사상으로부터 벗어나지 않으면서 물리적 매체의 다양한 기타의 변환이 가능하다는 것이 인식되어야 한다.
도 8a-8c로 넘어가면, 개략도가 여기에서 제시된 적어도 일부 실시예에 따라 배열된 컴퓨팅 장치 상에서 컴퓨터 프로세스를 실행하기 위한 컴퓨터 프로그램을 포함하는 컴퓨터 프로그램 제품(800)의 부분도를 도시한다. 예시적인 컴퓨터 프로그램 제품(800)의 예시적인 실시예는 신호 포함 매체(802)를 이용하여 제공되고, 804A의 적어도 하나의 명령어 및/또는 804B의 적어도 하나의 명령어를 포함할 수 있다. 도 8b에 도시된 명령어(804A)는, 솔리드 스테이트 드라이브 내 블록을 선택하기 위한 하나 이상의 명령어 - 블록은 제1 상태로 구성됨 -; 블록에 대응하는 매핑 규칙을 수신하기 위한 하나 이상의 명령어; 제약을 수신하기 위한 하나 이상의 명령어; 메시지를 수신하기 위한 하나 이상의 명령어; 매핑 규칙에 따라 메시지로 매핑하는 하나 이상의 코드워드를 식별하기 위한 하나 이상의 명령어; 제1 상태로 구성된 블록에 적용되는 제약에 따라 코드워드 내 적용가능 코드워드를 식별하기 위한 하나 이상의 명령어; 또는 솔리드 스테이트 드라이브 내 블록으로의 적용가능 코드워드의 기록 동작을 수행하여 블록을 제1 상태에서 제2 상태로 변환하기 위한 하나 이상의 명령어를 포함할 수 있다.
도 8c에 도시된 명령어(804B)는, 솔리드 스테이트 드라이브 내 블록으로부터 적용가능 코드워드를 판독하기 위한 하나 이상의 명령어; 블록에 대응하는 매핑 규칙을 검색하기 위한 하나 이상의 명령어; 또는 매핑 규칙에 따라 코드워드로 매핑하는 메시지를 식별하기 위한 하나 이상의 명령어를 포함할 수 있다. 하나 이상의 명령어는, 예컨대, 컴퓨터 판독 가능 및/또는 로직 구현된 명령어일 수 있다. 일부 실시예에서, 하나 이상의 컴퓨터 프로그램 제품(800)의 신호 포함 매체(802)는 컴퓨터 판독 가능 매체(806), 기록 가능 매체(808) 및/또는 통신 매체(810)를 포함한다.
여기에서 설명된 대상이 컴퓨터 시스템 상의 운영 체제 및 어플리케이션 프로그램의 실행과 함께 실행하는 프로그램 모듈의 일반적인 맥락에서 제시되고 있으나, 당업자는 다른 구현예가 다른 유형의 프로그램 모듈과 조합하여 수행될 수 있다는 것을 인식할 것이다. 일반적으로, 프로그램 모듈은, 루틴, 프로그램, 컴포넌트, 데이터 구조 및 특정 태스크를 수행하거나 특정한 추상 데이터 유형(abstract data type)을 구현하는 기타 유형의 구조를 포함한다. 또한, 당업자는 여기에서 설명된 대상이 휴대용 장치, 멀티 코어 프로세서 시스템, 마이크로프로세서 기반 또는 프로그램 가능한 가전, 미니 컴퓨터, 메인 프레임 컴퓨터 등을 포함하는 다른 컴퓨터 시스템 구성으로 실시될 수 있다는 것을 인정할 것이다.
본 개시는 다양한 태양의 예시로서 의도된 본 출원에 기술된 특정 실시예들에 제한되지 않을 것이다. 당업자에게 명백할 바와 같이, 많은 수정과 변형들이 그 사상과 범위를 벗어나지 않으면서 이루어질 수 있다. 여기에 열거된 것들에 더하여, 본 개시의 범위 안에서 기능적으로 균등한 방법과 장치가 위의 설명으로부터 당업자에게 명백할 것이다. 그러한 수정과 변형들은 첨부된 청구항의 범위에 들어가도록 의도된 것이다. 본 개시는 첨부된 청구항과 그러한 청구항에 부여된 균등물의 전 범위에 의해서만 제한될 것이다. 본 개시가 물론 다양할 수 있는 특정 방법, 시약, 합성 구성 또는 생물학적 시스템에 제한되지 않는 것으로 이해될 것이다. 또한, 여기에서 사용된 용어는 특정 실시예를 기술하기 위한 목적이고, 제한하는 것으로 의도되지 않음이 이해될 것이다.
여기에서 실질적으로 임의의 복수 및/또는 단수의 용어의 사용에 대하여, 당업자는 맥락 및/또는 응용에 적절하도록, 복수를 단수로 및/또는 단수를 복수로 해석할 수 있다. 다양한 단수/복수의 치환은 명확성을 위해 여기에서 명시적으로 기재될 수 있다.
당업자라면, 일반적으로 본 개시에 사용되며 특히 첨부된 청구범위(예를 들어, 첨부된 청구범위)에 사용된 용어들이 일반적으로 "개방적(open)" 용어(예를 들어, 용어 "포함하는"은 "포함하지만 이에 제한되지 않는"으로, 용어 "갖는"는 "적어도 갖는"으로, 용어 "포함하다"는 "포함하지만 이에 한정되지 않는" 등으로 해석되어야 함)로 의도되었음을 이해할 것이다. 또한, 당업자라면, 도입된 청구항의 기재사항의 특정 수가 의도된 경우, 그러한 의도가 청구항에 명시적으로 기재될 것이며, 그러한 기재사항이 없는 경우, 그러한 의도가 없음을 또한 이해할 것이다. 예를 들어, 이해를 돕기 위해, 이하의 첨부 청구범위는 "적어도 하나" 및 "하나 이상" 등의 도입 구절의 사용을 포함하여 청구항 기재사항을 도입할 수 있다. 그러나, 그러한 구절의 사용이, 부정관사 "하나"("a" 또는 "an")에 의한 청구항 기재사항의 도입이, 그러한 하나의 기재사항을 포함하는 실시예로, 그러한 도입된 청구항 기재사항을 포함하는 특정 청구항을 제한함을 암시하는 것으로 해석되어서는 안되며, 동일한 청구항이 도입 구절인 "하나 이상" 또는 "적어도 하나" 및 "하나"("a" 또는 "an")과 같은 부정관사(예를 들어, "하나"는 "적어도 하나" 또는 "하나 이상"을 의미하는 것으로 일반적으로 해석되어야 함)를 포함하는 경우에도 마찬가지로 해석되어야 한다. 이는 청구항 기재사항을 도입하기 위해 사용된 정관사의 경우에도 적용된다. 또한, 도입된 청구항 기재사항의 특정 수가 명시적으로 기재되는 경우에도, 당업자라면 그러한 기재가 일반적으로 적어도 기재된 수(예를 들어, 다른 수식어가 없는 "두 개의 기재사항"을 단순히 기재한 것은, 일반적으로 적어도 두 개의 기재사항 또는 두 개 이상의 기재사항을 의미함)를 의미하도록 해석되어야 함을 이해할 것이다. 또한, "A, B 및 C 등 중의 적어도 하나"와 유사한 규칙이 사용된 경우에는, 일반적으로 그러한 해석은 당업자가 그 규칙을 이해할 것이라는 전제가 의도된 것이다(예를 들어, "A, B 및 C 중의 적어도 하나를 갖는 시스템"은, A만을 갖거나, B만을 갖거나, C만을 갖거나, A 및 B를 함께 갖거나, A 및 C를 함께 갖거나, B 및 C를 함께 갖거나, A, B, 및 C를 함께 갖는 시스템을 포함하지만 이에 제한되지 않음). "A, B 또는 C 중의 적어도 하나"와 유사한 규칙이 사용된 경우에는, 일반적으로 그러한 해석은 당업자가 그 규칙을 이해할 것이라는 전제가 의도된 것이다(예를 들어, "A, B 또는 C 중의 적어도 하나를 갖는 시스템"은, A만을 갖거나, B만을 갖거나, C만을 갖거나, A 및 B를 함께 갖거나, A 및 C를 함께 갖거나, B 및 C를 함께 갖거나, A, B, 및 C를 함께 갖는 시스템을 포함하지만 이에 제한되지 않음). 또한 당업자라면, 실질적으로 어떠한 이접 접속어(disjunctive word) 및/또는 두 개 이상의 대안적인 용어들을 나타내는 구절은, 그것이 상세한 설명, 청구범위 또는 도면에 있는지와 상관없이, 그 용어들 중의 하나, 그 용어들 중의 어느 하나, 또는 그 용어들 두 개 모두를 포함하는 가능성을 고려했음을 이해할 것이다. 예를 들어, "A 또는 B"라는 구절은 "A" 또는 "B" 또는 "A 및 B"의 가능성을 포함하는 것으로 이해될 것이다.
또한, 마쿠쉬 그룹을 이용하여 본 개시의 특징 또는 양상이 기술될 때는, 당업자라면 본 개시가 또한 마쿠쉬 그룹의 임의의 개별 구성원 또는 구성원의 서브그룹을 이용하여 기술됨을 이해할 것이다.
서면의 기재를 제공하는 것과 같은 어떠한 그리고 모든 목적을 위해서, 본 개시에 기재된 모든 범위는 모든 어떠한 가능한 하위범위 및 그 하위범위의 조합을 또한 포괄함이 이해 되어야 한다. 임의의 나열된 범위는, 그 동일한 범위가 적어도 동일한 이분 범위, 삼분 범위, 사분 범위, 오분 범위, 십분 범위 등으로 분할될 수 있으며, 그러한 동일 범위를 충분히 기술하는 것으로 용이하게 인식될 수 있다. 제한되지 않은 예로서, 본 개시에 기재된 각 범위는, 하위 삼분, 중간 삼분, 상위 삼분 등으로 용이하게 분할될 수 있다. 또한, "까지(up to)," "적어도(at least)," "더 큰(greater than)," "더 적은(less than)" 등과 같은 모든 언어는 인용된 수를 포함하며, 상술한 바와 같은 하위 범위로 분할될 수 있는 범위들을 나타냄이 이해되어야 한다. 마지막으로, 범위는 각 개별 구성요소를 포함됨이 이해되어야 한다. 따라서, 예를 들어, 1 내지 3 셀(cell)을 가지는 그룹은 1, 2 또는 3 셀을 가지는 그룹을 나타낸다. 유사하게, 1 내지 5 셀을 가지는 그룹은 1, 2, 3, 4 또는 5 셀을 가지는 그룹을 나타내는 등이다.
다양한 양상 및 실시예들이 본 개시에서 기술되었지만, 다른 양상 및 실시예들이 당업자에게 명확할 것이다. 본 개시에 기재된 다양한 양상 및 실시예는 예시의 목적으로 제시된 것이고, 제한하려고 의도된 것은 아니며, 진정한 범위 및 사상은 이하 청구범위에 의해 나타낸다.
Claims (25)
- 메시지를 인코딩하기 위한 방법으로서,
솔리드 스테이트 드라이브(solid state drive) 내 블록을 선택하는 단계 - 상기 블록은 제1 상태(state)로 구성됨 -;
상기 블록에 대응하는 매핑 규칙(mapping rule)을 수신하는 단계;
제약(constraint)을 수신하는 단계;
상기 메시지를 수신하는 단계;
상기 매핑 규칙에 따라 상기 메시지로 매핑하는 하나 이상의 코드워드(codeword)를 식별하는 단계;
상기 제1 상태로 구성된 상기 블록에 적용되는 상기 제약에 따라 상기 코드워드 내 적용가능 코드워드를 식별하는 단계; 및
상기 솔리드 스테이트 드라이브 내 상기 블록으로의 상기 적용가능 코드워드의 기록 동작을 수행하는 단계 - 이에 따라 상기 블록을 상기 제1 상태로부터 제2 상태로 변환함 -
를 포함하는 메시지를 인코딩하기 위한 방법. - 제1항에 있어서,
상기 매핑 규칙에 따라 상기 메시지로 매핑하는 하나 이상의 코드워드를 식별하는 단계는 매핑 규칙에 기초한 신드롬 코딩(syndrome coding)에 따라 상기 메시지로 매핑하는 상기 코드워드를 식별하는 단계를 포함하는, 메시지를 인코딩하기 위한 방법. - 제1항에 있어서,
상기 매핑 규칙에 따라 상기 메시지로 매핑하는 하나 이상의 코드워드를 식별하는 단계는 매핑 규칙에 기초한 에러 정정에 따라 상기 메시지로 매핑하는 상기 코드워드를 식별하는 단계를 포함하는, 메시지를 인코딩하기 위한 방법. - 제1항에 있어서,
상기 제약은 다운 플립핑 제약(down-flipping constraint)을 포함하고;
상기 제1 상태로 구성된 상기 블록에 적용되는 상기 제약에 따라 상기 코드워드 내 적용가능 코드워드를 식별하는 단계는 상기 다운 플립핑 제약을 만족하는 한편 상기 제1 상태의 상기 블록에 기록될 수 있는 상기 적용가능 코드워드를 식별하는 단계를 포함하는, 메시지를 인코딩하기 위한 방법. - 제4항에 있어서,
상기 다운 플립핑 제약은 상기 기록 동작이 상기 블록 내 셀의 전압 레벨을 유지하거나 감소시키는 것을 명시하고;
복수의 비트 값 각각은 상기 전압 레벨 중 하나에 대응하는, 메시지를 인코딩하기 위한 방법. - 제4항에 있어서,
상기 블록은 하나 이상의 셀을 포함하고, 각각의 셀은 복수의 전압 레벨 중에서 한 전압 레벨을 저장하고, 상기 복수의 전압 레벨 각각은 비트 값을 나타내며, 상기 복수의 전압 레벨 각각이 높을수록 상기 비트 값은 높은 값을 가지고, 상기 복수의 전압 레벨 각각이 낮을수록 상기 비트 값은 낮은 값을 가지는, 메시지를 인코딩하기 위한 방법. - 제1항에 있어서,
상기 코드워드는 상기 블록 내 셀의 전압 레벨의 비율을 나타내는 실수(real number)를 포함하고;
복수의 비트 값 각각은 상기 전압 레벨의 상기 비율 중 하나에 대응하는, 메시지를 인코딩하기 위한 방법. - 제1항에 있어서,
상기 제약은 저전압 레벨 비용(low-voltage-level-cost) 제약을 포함하고;
상기 저전압 레벨 비용 제약은 상기 기록 동작이 상기 블록 내 전체 전압 레벨 감소를 최소화하는 것을 명시하며;
복수의 비트 값 각각은 상기 전압 레벨 중 하나에 대응하는, 메시지를 인코딩하기 위한 방법. - 제1항에 있어서,
상기 블록에 대응하는 제2 매핑 규칙을 수신하는 단계;
제2 메시지를 수신하는 단계;
상기 제2 매핑 규칙에 따라 상기 제2 메시지로 매핑하는 하나 이상의 제2 코드워드를 식별하는 단계;
상기 제2 상태로 구성된 상기 블록에 적용되는 상기 제약에 따라 상기 제2 코드워드 내 제2 적용가능 코드워드를 식별하는 단계; 및
상기 솔리드 스테이트 드라이브 내 상기 블록으로의 상기 제2 적용가능 코드워드의 상기 기록 동작을 수행하여, 상기 블록을 상기 제2 상태로부터 제3 상태로 변환하는 단계
를 더 포함하는 메시지를 인코딩하기 위한 방법. - 제1항에 있어서,
제2 메시지를 수신하는 단계;
상기 매핑 규칙에 따라 상기 제2 메시지로 매핑하는 하나 이상의 제2 코드워드를 식별하는 단계;
상기 제2 상태로 구성된 상기 블록에 적용되는 상기 제약에 따라 상기 제2 코드워드 내 제2 적용가능 코드워드를 식별하는 단계; 및
상기 솔리드 스테이트 드라이브 내 상기 블록으로의 상기 제2 적용가능 코드워드의 상기 기록 동작을 수행하여, 상기 블록을 상기 제2 상태로부터 제3 상태로 변환하는 단계
를 더 포함하는 메시지를 인코딩하기 위한 방법. - 제1항에 있어서,
상기 적용가능 코드워드를 상기 솔리드 스테이트 드라이브 내 상기 블록으로부터 판독하는 단계;
상기 블록에 대응하는 상기 매핑 규칙을 검색(retrieving)하는 단계; 및
상기 매핑 규칙에 따라 상기 코드워드로 매핑하는 상기 메시지를 식별하는 단계
를 더 포함하는 메시지를 인코딩하기 위한 방법. - 제11항에 있어서,
상기 매핑 규칙에 따라 상기 코드워드로 매핑하는 상기 메시지를 식별하는 단계는 매핑 규칙에 기초한 신드롬 코딩에 따라 상기 메시지를 식별하는 단계를 포함하는, 메시지를 인코딩하기 위한 방법. - 제12항에 있어서,
상기 매핑 규칙에 기초한 신드롬 코딩은 행렬(matrix)을 포함하는, 메시지를 인코딩하기 위한 방법. - 제1항에 있어서,
상기 솔리드 스테이트 드라이브 내 상기 블록으로의 상기 적용가능 코드워드의 기록 동작을 수행하는 단계는,
상기 적용가능 코드워드가 제2 비트 값보다 많은 수의 제1 비트 값을 포함하는지 여부를 결정하는 단계;
상기 적용가능 코드워드가 제2 비트 값보다 많은 수의 제1 비트 값을 포함한다고 결정하는 것에 응답하여, 상기 적용가능 코드워드의 비트 값을 반전하여 반전된 적용가능 코드워드를 생성하는 단계;
상기 적용가능 코드워드의 상기 비트 값을 반전하여 상기 반전된 적용가능 코드워드를 생성한 후, 상기 솔리드 스테이트 드라이브 내 상기 블록으로의 상기 반전된 적용가능 코드워드의 상기 기록 동작을 수행하는 단계; 및
상기 적용가능 코드워드가 제2 비트 값보다 많은 수의 제1 비트 값을 포함하지 않는다고 결정하는 것에 응답하여, 상기 솔리드 스테이트 드라이브 내 상기 블록으로의 상기 적용가능 코드워드의 상기 기록 동작을 수행하는 단계를 포함하는, 메시지를 인코딩하기 위한 방법. - 컴퓨터 실행 가능 명령어가 저장된 컴퓨터 판독 가능 저장 매체로서, 상기 컴퓨터 실행 가능 명령어는, 컴퓨터에 의하여 실행되는 경우, 상기 컴퓨터가,
적용가능 코드워드를 솔리드 스테이트 드라이브 내 블록으로부터 판독하는 것;
상기 블록의 상태를 검색하는 것;
상기 블록의 상기 상태에 대응하는 매핑 규칙을 복수의 매핑 규칙으로부터 검색하는 것; 및
상기 매핑 규칙에 따라 상기 코드워드로 매핑하는 메시지를 식별하는 것
에 의하여 상기 메시지를 인코딩하도록 하는, 컴퓨터 판독 가능 저장 매체. - 제15항에 있어서,
상기 매핑 규칙에 따라 상기 코드워드로 매핑하는 메시지를 식별하는 것은 매핑 규칙에 기초한 신드롬 코딩에 따라 상기 코드워드로 매핑하는 상기 메시지를 식별하는 것을 포함하는, 컴퓨터 판독 가능 저장 매체. - 제15항에 있어서,
상기 매핑 규칙에 따라 상기 코드워드로 매핑하는 메시지를 식별하는 것은 매핑 규칙에 기초한 에러 정정에 따라 상기 코드워드로 매핑하는 상기 메시지를 식별하는 것을 포함하는, 컴퓨터 판독 가능 저장 매체. - 제15항에 있어서,
상기 컴퓨터에 의하여 실행되는 경우, 상기 컴퓨터가,
상기 솔리드 스테이트 드라이브 내 상기 블록을 선택하는 것 - 상기 블록은 제1 상태로 구성됨 -;
상기 블록에 대응하는 상기 매핑 규칙을 수신하는 것;
제약을 수신하는 것;
상기 메시지를 수신하는 것;
상기 매핑 규칙에 따라 상기 메시지로 매핑하는 하나 이상의 코드워드를 식별하는 것;
상기 제1 상태로 구성된 상기 블록에 적용되는 상기 제약에 따라 상기 코드워드 내 상기 적용가능 코드워드를 식별하는 것; 및
상기 솔리드 스테이트 드라이브 내 상기 블록으로의 상기 적용가능 코드워드의 기록 동작을 수행하여, 상기 블록을 상기 제1 상태로부터 제2 상태로 변환하는 것에 의하여 상기 메시지를 인코딩하도록 하는 컴퓨터 실행 가능 명령어가 더 저장된 컴퓨터 판독 가능 저장 매체. - 컴퓨터 시스템으로서,
프로세서;
상기 프로세서에 결합된 메모리;
솔리드 스테이트 드라이브; 및
상기 메모리로부터 상기 프로세서에서 실행하는 인코딩 유닛을 포함하고,
상기 인코딩 유닛은 상기 프로세서에 의하여 실행되는 경우, 상기 컴퓨터 시스템으로 하여금,
상기 솔리드 스테이트 드라이브 내 블록을 선택하는 것 - 상기 블록은 제1 상태로 구성됨 -;
상기 블록에 대응하는 제1 매핑 규칙을 수신하는 것;
제약을 수신하는 것;
제1 메시지를 수신하는 것;
상기 제1 매핑 규칙에 따라 상기 제1 메시지로 매핑하는 하나 이상의 제1 코드워드를 식별하는 것;
상기 제1 상태로 구성되는 상기 블록에 적용되는 상기 제약에 따라 상기 제1 코드워드 내 제1 적용가능 코드워드를 식별하는 것;
상기 솔리드 스테이트 드라이브 내 상기 블록으로의 상기 제1 적용가능 코드워드의 기록 동작을 수행하여 상기 블록을 상기 제1 상태로부터 제2 상태로 변환하는 것;
상기 블록에 대응하는 제2 매핑 규칙을 수신하는 것;
제2 메시지를 수신하는 것;
상기 제2 매핑 규칙에 따라 제2 메시지로 매핑하는 하나 이상의 제2 코드워드를 식별하는 것;
상기 제2 상태로 구성되는 상기 블록에 적용되는 상기 제약에 따라 상기 제2 코드워드 내 제2 적용가능 코드워드를 식별하는 것; 및
상기 솔리드 스테이트 드라이브 내 상기 블록으로의 상기 제2 적용가능 코드워드의 상기 기록 동작을 수행하여 상기 블록을 상기 제2 상태로부터 제3 상태로 변환하는 것에 의하여 메시지를 인코딩하도록 하는, 컴퓨터 시스템. - 제19항에 있어서,
상기 제1 상태는 상기 블록 상에 삭제 동작을 수행한 이후의 삭제된 상태를 포함하는, 컴퓨터 시스템. - 제19항에 있어서,
상기 메모리로부터 상기 프로세서에서 실행하는 상기 인코딩 유닛은, 상기 프로세서에 의하여 실행되는 경우, 상기 컴퓨터 시스템으로 하여금, 추가로
제3 메시지를 수신하는 것;
제3 매핑 규칙을 수신하는 것;
상기 제3 매핑 규칙에 따라 상기 제3 메시지로 매핑하는 하나 이상의 제3 코드워드를 식별하는 것;
상기 제약에 따라 상기 제3 코드워드가 제3 적용가능 코드워드를 포함하는지 여부를 결정하는 것; 및
상기 제약에 따라 상기 제3 코드워드가 상기 제3 적용가능 코드워드를 포함한다고 결정하는 것에 응답하여, 상기 솔리드 스테이트 드라이브 내 상기 블록으로의 상기 제3 적용가능 코드워드의 상기 기록 동작을 수행하여, 상기 블록을 상기 제3 상태로부터 제4 상태로 변환하는 것에 의하여 메시지를 인코딩하도록 하는, 컴퓨터 시스템. - 제21항에 있어서,
상기 제약에 따라 상기 제3 코드워드가 상기 제3 적용가능 코드워드를 포함하지 않는다고 결정하는 것에 응답하여, 에러 복구 프로세스를 수행하는, 컴퓨터 시스템. - 제22항에 있어서,
에러 복구 프로세스를 수행하는 것은 상기 솔리드 스테이트 드라이브 내 다른 블록을 선택하는 것을 포함하는, 컴퓨터 시스템. - 제22항에 있어서,
에러 복구 프로세스를 수행하는 것은 상기 솔리드 스테이트 드라이브 내 상기 블록 상에 삭제 동작을 수행하여, 상기 블록을 상기 제3 상태로부터 상기 제1 상태로 변환하는 것을 포함하는, 컴퓨터 시스템. - 삭제
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2010/054634 WO2012057777A1 (en) | 2010-10-29 | 2010-10-29 | Advanced data encoding with reduced erasure count for solid state drives |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130077895A KR20130077895A (ko) | 2013-07-09 |
KR101326011B1 true KR101326011B1 (ko) | 2013-11-07 |
Family
ID=45994244
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137013756A KR101326011B1 (ko) | 2010-10-29 | 2010-10-29 | 솔리드 스테이트 드라이브를 위한 삭제 카운트가 감소된 진보된 데이터 인코딩 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8423867B2 (ko) |
EP (1) | EP2633414A4 (ko) |
JP (1) | JP5468184B2 (ko) |
KR (1) | KR101326011B1 (ko) |
CN (1) | CN103221928B (ko) |
WO (1) | WO2012057777A1 (ko) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104919433B (zh) | 2013-01-11 | 2017-10-31 | 英派尔科技开发有限公司 | 用于闪存的页面分配 |
CN105074826B (zh) | 2013-02-27 | 2018-01-16 | 英派尔科技开发有限公司 | 存储器装置的基于线性规划的解码 |
US9859925B2 (en) | 2013-12-13 | 2018-01-02 | Empire Technology Development Llc | Low-complexity flash memory data-encoding techniques using simplified belief propagation |
US9734129B2 (en) | 2014-04-22 | 2017-08-15 | Sandisk Technologies Llc | Low complexity partial parallel architectures for Fourier transform and inverse Fourier transform over subfields of a finite field |
US9444493B2 (en) * | 2014-06-26 | 2016-09-13 | Sandisk Technologies Llc | Encoder with transform architecture for LDPC codes over subfields using message mapping |
US9432055B2 (en) | 2014-06-26 | 2016-08-30 | Sandisk Technologies Llc | Encoder for quasi-cyclic low-density parity-check codes over subfields using fourier transform |
KR102415645B1 (ko) | 2017-03-29 | 2022-07-04 | 삼성전자주식회사 | 멀티미디어 서비스 콘텐트 제공 장치 및 방법 |
JP2020071888A (ja) * | 2018-10-29 | 2020-05-07 | キオクシア株式会社 | 記憶装置及び記憶方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080294965A1 (en) | 2007-05-24 | 2008-11-27 | Realtek Semiconductor Corp. | Data Writing Method For Flash Memory and Error Correction Encoding/Decoding Method Thereof |
US20100194607A1 (en) | 2009-02-05 | 2010-08-05 | Lsi Corporation | Data compression method and apparatus |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3604466B2 (ja) | 1995-09-13 | 2004-12-22 | 株式会社ルネサステクノロジ | フラッシュディスクカード |
GB2291991A (en) | 1995-09-27 | 1996-02-07 | Memory Corp Plc | Disk drive emulation with a block-erasable memory |
US5673224A (en) | 1996-02-23 | 1997-09-30 | Micron Quantum Devices, Inc. | Segmented non-volatile memory array with multiple sources with improved word line control circuitry |
US6492918B1 (en) * | 1999-09-30 | 2002-12-10 | Stmicroelectronics, Inc. | Code word having data bits and code bits and method for encoding data |
WO2001080249A1 (fr) * | 2000-04-19 | 2001-10-25 | Fujitsu Limited | Procede de commande d'ecriture/de lecture de donnees, et dispositif de stockage |
JP3893902B2 (ja) * | 2001-05-28 | 2007-03-14 | セイコーエプソン株式会社 | 画像形成装置および該装置における情報更新方法 |
US6973613B2 (en) * | 2002-06-28 | 2005-12-06 | Sun Microsystems, Inc. | Error detection/correction code which detects and corrects component failure and which provides single bit error correction subsequent to component failure |
US7065607B2 (en) * | 2002-06-28 | 2006-06-20 | Microsoft Corporation | System and method for implementing a counter |
US8412879B2 (en) | 2002-10-28 | 2013-04-02 | Sandisk Technologies Inc. | Hybrid implementation for error correction codes within a non-volatile memory system |
US6933864B1 (en) | 2002-11-07 | 2005-08-23 | Maxtor Corporation | Encoding method using code constraint violation pointers |
JP4372134B2 (ja) * | 2006-09-29 | 2009-11-25 | 株式会社日立製作所 | データ比較機能を有するストレージシステム |
JP4785819B2 (ja) * | 2007-11-07 | 2011-10-05 | 株式会社コナミデジタルエンタテインメント | 記憶装置、記憶方法、ならびに、プログラム |
JP2009135854A (ja) * | 2007-12-03 | 2009-06-18 | Fujitsu Ltd | メモリアクセス制御装置、制御方法及びプログラム |
US7907070B2 (en) * | 2008-09-12 | 2011-03-15 | Sharp Laboratories Of America, Inc. | Systems and methods for providing unequal error protection using embedded coding |
US8732388B2 (en) | 2008-09-16 | 2014-05-20 | Micron Technology, Inc. | Embedded mapping information for memory devices |
CN101676882B (zh) * | 2008-09-16 | 2013-01-16 | 美光科技公司 | 存储器装置的内嵌映射信息 |
US8161355B2 (en) * | 2009-02-11 | 2012-04-17 | Mosys, Inc. | Automatic refresh for improving data retention and endurance characteristics of an embedded non-volatile memory in a standard CMOS logic process |
-
2010
- 2010-10-29 WO PCT/US2010/054634 patent/WO2012057777A1/en active Application Filing
- 2010-10-29 JP JP2013536575A patent/JP5468184B2/ja not_active Expired - Fee Related
- 2010-10-29 KR KR1020137013756A patent/KR101326011B1/ko not_active IP Right Cessation
- 2010-10-29 EP EP10859090.2A patent/EP2633414A4/en not_active Withdrawn
- 2010-10-29 US US13/059,808 patent/US8423867B2/en not_active Expired - Fee Related
- 2010-10-29 CN CN201080069822.5A patent/CN103221928B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080294965A1 (en) | 2007-05-24 | 2008-11-27 | Realtek Semiconductor Corp. | Data Writing Method For Flash Memory and Error Correction Encoding/Decoding Method Thereof |
US20100194607A1 (en) | 2009-02-05 | 2010-08-05 | Lsi Corporation | Data compression method and apparatus |
Also Published As
Publication number | Publication date |
---|---|
CN103221928A (zh) | 2013-07-24 |
KR20130077895A (ko) | 2013-07-09 |
US8423867B2 (en) | 2013-04-16 |
WO2012057777A1 (en) | 2012-05-03 |
JP5468184B2 (ja) | 2014-04-09 |
EP2633414A4 (en) | 2014-03-26 |
US20120110418A1 (en) | 2012-05-03 |
CN103221928B (zh) | 2016-01-20 |
EP2633414A1 (en) | 2013-09-04 |
JP2013541111A (ja) | 2013-11-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101326011B1 (ko) | 솔리드 스테이트 드라이브를 위한 삭제 카운트가 감소된 진보된 데이터 인코딩 | |
US9385754B2 (en) | Controller, information processing system, method of controlling controller, and program | |
US9996420B2 (en) | Error-correction encoding and decoding | |
JP5944941B2 (ja) | クロス・ページ・セクタ、マルチ・ページ符号化およびパー・ページ符号化を使用して多重レベル・セル・フラッシュ・メモリ・デバイスにデータを記憶するための方法および装置 | |
US8782496B2 (en) | Memory controller, semiconductor memory apparatus and decoding method | |
JP4818381B2 (ja) | 半導体メモリ装置 | |
US9070453B2 (en) | Multiple programming of flash memory without erase | |
JP4702632B2 (ja) | 符号化方法および符号化装置、並びにプログラム | |
JP2012181761A (ja) | 半導体メモリ装置および復号方法 | |
US8788922B2 (en) | Error correction codes for incremental redundancy | |
Jiang et al. | Rewriting codes for joint information storage in flash memories | |
WO2013006564A2 (en) | Apparatus, system, and method for generating and decoding a longer linear block codeword using a shorter block length | |
KR20160144960A (ko) | 폴라 코드들을 이용한 비대칭 에러 정정 및 플래시 메모리 재기록 | |
JP6957392B2 (ja) | メモリシステム | |
JP6847796B2 (ja) | メモリシステム | |
US20160329910A1 (en) | Non-binary ldpc decoder using binary subgroup processing | |
KR101913900B1 (ko) | 조기 디코딩 종료 검출을 갖는 디코더 | |
US11258464B1 (en) | Codeword concatenation for correcting errors in data storage devices | |
WO2023246473A1 (zh) | 一种译码方法、芯片及相关装置 | |
JP2020527880A (ja) | エンコーディング方法および装置、コンピュータ記憶媒体 | |
CN112951313A (zh) | 用于纠错的存储控制器、包括其的存储设备及其操作方法 | |
KR102511779B1 (ko) | 극 부호 연속 제거 비트 반전 복호 장치 및 방법 | |
JP2021141369A (ja) | メモリシステム | |
JP4672641B2 (ja) | 誤り訂正処理装置及び誤り訂正処理方法 | |
Kim et al. | Rateless erasure resilient codes for content storage and distribution in P2P networks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
A302 | Request for accelerated examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20160929 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20170929 Year of fee payment: 5 |
|
LAPS | Lapse due to unpaid annual fee |