KR20200139571A - 오류 정정 디코더 및 이를 포함하는 메모리 시스템 - Google Patents

오류 정정 디코더 및 이를 포함하는 메모리 시스템 Download PDF

Info

Publication number
KR20200139571A
KR20200139571A KR1020190066227A KR20190066227A KR20200139571A KR 20200139571 A KR20200139571 A KR 20200139571A KR 1020190066227 A KR1020190066227 A KR 1020190066227A KR 20190066227 A KR20190066227 A KR 20190066227A KR 20200139571 A KR20200139571 A KR 20200139571A
Authority
KR
South Korea
Prior art keywords
value
symbol
variable node
error correction
function value
Prior art date
Application number
KR1020190066227A
Other languages
English (en)
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 에스케이하이닉스 주식회사
Priority to KR1020190066227A priority Critical patent/KR20200139571A/ko
Priority to US16/694,929 priority patent/US11031952B2/en
Priority to CN201911283888.3A priority patent/CN112039532A/zh
Publication of KR20200139571A publication Critical patent/KR20200139571A/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
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1148Structural properties of the code parity-check or generator matrix
    • H03M13/1171Parity-check or generator matrices with non-binary elements, e.g. for non-binary LDPC 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
    • 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/1128Judging correct decoding and iterative stopping criteria other than syndrome check and upper limit for decoding iterations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/076Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check
    • 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/1108Hard decision decoding, e.g. bit flipping, modified or weighted bit flipping
    • 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/1111Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
    • H03M13/1117Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms using approximations for check node processing, e.g. an outgoing message is depending on the signs and the minimum over the magnitudes of all incoming messages according to the min-sum rule
    • 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/1134Full parallel processing, i.e. all bit nodes or check nodes are 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/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/1148Structural properties of the code parity-check or generator matrix
    • H03M13/1174Parity-check or generator matrices built from sub-matrices representing known block codes such as, e.g. Hamming codes, e.g. generalized LDPC 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/43Majority logic or threshold decoding

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • Mathematical Physics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Error Detection And Correction (AREA)

Abstract

본 기술은, 비-이진 저밀도 패리티 체크(non-binary low density parity check; NB-LDPC) 코드를 이용하여 반복 복호(iterative decoding) 기법에 따른 오류 정정 디코딩을 수행하는 오류 정정 디코더 및 이를 포함하는 메모리 시스템을 포함한다. 상기 오류 정정 디코더는, 변수 노드의 경판정 값으로서 할당할 초기 심볼을 구성하고, 상기 구성된 초기 심볼을 상기 변수 노드에 할당하는 심볼 구성부; 매 반복(iteration) 시작 시에 상기 초기 심볼을 기반으로 상기 변수 노드에 대응하는 후보 심볼들의 신뢰도 값들을 초기화하고, 상기 매 반복마다 상기 변수 노드에게 수신되는 C2V(check to variable) 메시지들을 기반으로 상기 후보 심볼들의 신뢰도 값들을 갱신하는 신뢰도 값 관리부; 상기 매 반복마다, 상기 후보 심볼들 중 대상 후보 심볼의 갱신된 신뢰도 값과 관련된 제 1 함수 값으로부터 상기 후보 심볼들 중 상기 대상 후보 심볼을 제외한 나머지 후보 심볼들 중 적어도 하나의 후보 심볼들의 갱신된 신뢰도 값들과 관련된 제 2 함수 값을 뺀 값인, 반전 함수 값을 계산하는 반전 함수 값 계산부; 및 상기 매 반복마다, 상기 반전 함수 값과 제 1 임계 값을 비교하고, 상기 비교 결과 상기 반전 함수 값이 상기 제 1 임계 값 이상인 경우 상기 변수 노드의 경판정 값을 상기 대상 후보 심볼로 수정하는 심볼 수정부를 포함한다.

Description

오류 정정 디코더 및 이를 포함하는 메모리 시스템{Error correction decoder and memory system having the error correction decoder}
본 발명은, 오류 정정 디코더 및 이를 포함하는 메모리 시스템에 관한 것으로, 보다 구체적으로는 비-이진 저밀도 패리티 체크(non-binary low density parity check; NB-LDPC) 코드를 이용하는 오류 정정 디코더 및 이를 포함하는 메모리 시스템에 관한 것이다.
메모리 시스템은, 일시적으로 또는 영구적으로 데이터를 저장하는 저장 매체를 포함할 수 있다. 쓰기(write), 읽기(read), 전송(transmission) 또는 프로세싱(processing)과 같은 다양한 동작들 동안, 데이터 오류(error) 또는 데이터 손상(corruption)이 발생할 수 있다.
데이터의 신뢰성(reliability)을 보장하기 위하여, 메모리 시스템은, 오류 정정 인코딩 및 오류 정정 디코딩과 같은 오류 정정 기술들(error correction techniques)을 이용할 수 있다.
본 발명의 실시 예들은, NB-LDPC 코드를 이용한 오류 정정 디코딩 시 향상된 오류 정정 능력을 갖는 오류 정정 디코더 및 이를 포함하는 메모리 시스템을 제공한다.
본 발명의 일 실시 예에 따른 비-이진 저밀도 패리티 체크(non-binary low density parity check; NB-LDPC) 코드를 이용하여 반복 복호(iterative decoding) 기법에 따른 오류 정정 디코딩을 수행하는 오류 정정 디코더는, 변수 노드의 경판정 값으로서 할당할 초기 심볼을 구성하고, 상기 구성된 초기 심볼을 상기 변수 노드에 할당하는 심볼 구성부; 매 반복(iteration) 시작 시에 상기 초기 심볼을 기반으로 상기 변수 노드에 대응하는 후보 심볼들의 신뢰도 값들을 초기화하고, 상기 매 반복마다 상기 변수 노드에게 수신되는 C2V(check to variable) 메시지들을 기반으로 상기 후보 심볼들의 신뢰도 값들을 갱신하는 신뢰도 값 관리부; 상기 매 반복마다, 상기 후보 심볼들 중 대상 후보 심볼의 갱신된 신뢰도 값과 관련된 제 1 함수 값으로부터 상기 후보 심볼들 중 상기 대상 후보 심볼을 제외한 나머지 후보 심볼들 중 적어도 하나의 후보 심볼들의 갱신된 신뢰도 값들과 관련된 제 2 함수 값을 뺀 값인, 반전 함수 값을 계산하는 반전 함수 값 계산부; 및 상기 매 반복마다, 상기 반전 함수 값과 제 1 임계 값을 비교하고, 상기 비교 결과 상기 반전 함수 값이 상기 제 1 임계 값 이상인 경우 상기 변수 노드의 경판정 값을 상기 대상 후보 심볼로 수정하는 심볼 수정부를 포함한다.
본 발명의 일 실시 예에 따른 메모리 시스템은, 메모리 장치; 및 상기 메모리 장치로부터 수신되는 판독 벡터를 기반으로 비-이진 저밀도 패리티 체크(non-binary low density parity check; NB-LDPC) 코드를 이용하여 반복 복호(iterative decoding) 기법에 따른 오류 정정 디코딩을 수행하는 오류 정정 디코더를 포함하는 메모리 컨트롤러를 포함한다. 상기 오류 정정 디코더는, 상기 판독 벡터에 포함된 판독 값들을 그룹핑(grouping)하여 변수 노드의 경판정 값으로서 할당할 초기 심볼을 구성하고, 상기 구성된 초기 심볼을 상기 변수 노드에 할당하는 심볼 구성부; 매 반복(iteration) 시작 시에 상기 초기 심볼을 기반으로 상기 변수 노드에 대응하는 후보 심볼들의 신뢰도 값들을 초기화하고, 상기 매 반복마다 상기 변수 노드에게 수신되는 C2V(check to variable) 메시지들을 기반으로 상기 후보 심볼들의 신뢰도 값들을 갱신하는 신뢰도 값 관리부; 상기 매 반복마다, 상기 후보 심볼들 중 대상 후보 심볼의 갱신된 신뢰도 값과 관련된 제 1 함수 값으로부터 상기 후보 심볼들 중 상기 대상 후보 심볼을 제외한 나머지 후보 심볼들 중 적어도 하나의 후보 심볼들의 갱신된 신뢰도 값들과 관련된 제 2 함수 값을 뺀 값인, 반전 함수 값을 계산하는 반전 함수 값 계산부; 및 상기 매 반복마다, 상기 반전 함수 값과 제 1 임계 값을 비교하고, 상기 비교 결과 상기 반전 함수 값이 상기 제 1 임계 값 이상인 경우 상기 변수 노드의 경판정 값을 상기 대상 후보 심볼로 수정하는 심볼 수정부를 포함한다.
본 기술에 따르면, NB-LDPC 코드를 이용하는 오류 정정 디코더 및 이를 포함하는 메모리 시스템의 오류 정정 능력이 향상될 수 있다.
도 1은 본 발명의 일 실시 예에 따른 오류 정정 회로를 설명하기 위한 도면이다.
도 2는 패리티 체크 행렬을 설명하기 위한 예시도이다.
도 3은 도 2에 도시된 패리티 체크 행렬을 태너 그래프로 나타낸 도면이다.
도 4는 도 2에 도시된 패리티 체크 행렬을 이용하여 계산되는 신드롬 벡터를 설명하기 위한 예시도이다.
도 5는 판독 값을 설명하기 위한 예시도이다.
도 6은 본 발명의 일 실시 예에 따른 심볼 구성 과정을 설명하기 위한 예시도이다.
도 7은 본 발명의 일 실시 예에 따른 임계 값들을 설명하기 위한 예시도이다.
도 8은 본 발명의 일 실시 예에 따른 신뢰도 값을 초기화하는 과정을 설명하기 위한 예시도이다.
도 9 내지 도 15는 본 발명의 일 실시 예에 따라 경판정 값을 수정하는 과정을 설명하기 위한 예시도이다.
도 16 내지 도 19는 본 발명의 일 실시 예에 따른 오류 정정 디코더의 동작 방법을 설명하기 위한 흐름도이다.
도 20은 본 발명의 일 실시 예에 따른 메모리 시스템을 설명하기 위한 도면이다.
도 21은 본 발명의 일 실시 예에 따른 메모리 장치를 설명하기 위한 도면이다.
도 22는 메모리 블록을 설명하기 위한 예시도이다.
도 23 및 도 24는 도 20에 도시된 메모리 컨트롤러를 포함하는 메모리 시스템의 다른 예를 설명하기 위한 도면이다.
본 발명의 이점 및 특징, 그리고 그것을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시 예들을 통해 설명될 것이다. 그러나 본 발명은 여기에서 설명되는 실시 예들에 한정되지 않고 다른 형태로 구체화될 수도 있다. 단지, 본 실시 예들은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 본 발명의 기술적 사상을 용이하게 실시할 수 있을 정도로 상세히 설명하기 위하여 제공되는 것이다.
명세서 전체에서, 어떤 부분이 다른 부분과 "연결"되어 있다고 할 때, 이는 "직접적으로 연결"되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 "간접적으로 연결"되어 있는 경우도 포함한다. 명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
명세서 전체에서, "A 또는 B 중 적어도 하나"는, "A", "B" 또는 "A 및 B"를 의미할 수 있다.
저밀도 패리티 체크(low density parity check; LDPC) 코드는, 메모리 시스템 및 통신 시스템 등에서 오류 정정을 위하여 널리 이용된다. 이는, 코드의 길이가 증가하더라도, 비트당 계산 복잡도는 증가하지 않으면서 오류 정정 성능은 향상되는 LDPC 반복 복호(iterative decoding) 기법의 특성에 기인한다.
LDPC 코드의 다양한 구현에는 몇 가지 제한(limitation)이 있다. 예를 들어, LDPC 코드의 오류(error)는 성공적인 오류 정정 디코딩(error correction decoding)을 이끌어내기까지 필요한 수 많은 반복(iteration)들의 비효율을 야기할 수 있으며, 또한 오류 정정 디코딩의 실패(fail)를 초래할 수 있다.
도 1은 본 발명의 일 실시 예에 따른 오류 정정 회로를 설명하기 위한 도면이다.
도 1을 참조하면, 오류 정정 회로(error correction circuit; 10)는, 오류 정정 인코더(error correction encoder; 100) 및 오류 정정 디코더(error correction decoder; 200)를 포함할 수 있다.
오류 정정 인코더(100)는, 오류 정정 인코딩의 대상이 되는 원본 메시지(original message)를 수신하고, 수신된 원본 메시지와 오류 정정 코드(error correction code; ECC)의 생성 행렬(generator matrix)을 이용하여 오류 정정 인코딩을 수행하거나, 수신된 원본 메시지와 오류 정정 코드의 패리티 체크 행렬(parity check matrix)를 이용하여 오류 정정 인코딩을 수행할 수 있다. 오류 정정 인코더(100)는, 오류 정정 인코딩의 수행 결과로서 생성된 코드워드(codeword)를 채널(channel)로 출력할 수 있다. 오류 정정 회로(10)가 메모리 시스템에 적용되는 경우, 코드워드는, 메모리 장치에 포함된 복수의 메모리 셀들(예를 들어, 하나의 페이지를 구성하는 메모리 셀들)에 저장될 수 있다.
오류 정정 인코더(100)는, 오류 정정 코드로서 LDPC 코드, 특히 비-이진 저밀도 패리티 체크(non-binary low density parity check; NB-LDPC) 코드를 이용하는 NB-LDPC 인코더일 수 있으나, 본 발명의 실시 예들이 이에 한정되는 것은 아니다.
오류 정정 디코더(200)는, 채널로부터 코드워드에 대응하는 판독 벡터(read vector)을 수신하고, 수신된 판독 벡터에 대한 오류 정정 디코딩을 수행할 수 있다.
오류 정정 디코더(200)는, 반복 복호 기법(iterative decoding scheme)을 채택하는 다양한 알고리즘을 이용하여 오류 정정 디코딩을 수행할 수 있다. 오류 정정 디코더(200)는, 신뢰 전파 알고리즘(belief propagation algorithm; BPA)으로도 일컬어지는 메시지 전달 알고리즘(message passing algorithm; MPA)을 이용하여 오류 정정 디코딩을 수행할 수 있다. 메시지 전달 알고리즘으로서 비트 플립핑(bit flipping) 알고리즘, 심볼 플립핑(symbol flipping) 알고리즘, 최소-합(min-sum) 알고리즘 또는 합-곱(sum-product) 알고리즘 등이 이용될 수 있다. 이하에서, 본 발명의 실시 예들을 설명함에 있어, 심볼 플립핑 알고리즘이 이용되는 것으로 가정하여 설명하나, 본 발명의 실시 예들이 이에 한정되는 것은 아니다.
오류 정정 디코더(200)는, 설정된 최대 반복 횟수(maximum iteration number; I) 내에서 오류 정정 디코딩을 수행할 수 있다. 여기서, I는 자연수일 수 있다. 오류 정정 디코더(200)는, 최대 반복 횟수(I) 내에서 오류 정정 코드의 패리티 체크 행렬의 제약들(constraints)을 만족하는 유효한 코드워드(valid codeword)가 생성되는 경우, 생성된 유효한 코드워드를 디코딩된 코드워드(decoded codeword)로서 출력할 수 있다. 오류 정정 디코더(200)는, 최대 반복 횟수(I) 내에서 오류 정정 코드의 패리티 체크 행렬의 제약들을 만족하는 유효한 코드워드가 생성되지 않는 경우, 오류 정정 디코딩이 실패하였음을 나타내는 페일(fail) 신호를 출력할 수 있다.
오류 정정 디코더(200)는, 오류 정정 코드로서 LDPC 코드, 특히 NB-LDPC 코드를 이용하는 NB-LDPC 디코더일 수 있으나, 본 발명의 실시 예들이 이에 한정되는 것은 아니다.
오류 정정 디코더(200)는, 심볼 구성부(symbol configurator; 210), 노드 프로세서(node processor; 220) 및 신드롬 체크부(syndrome checker; 230)를 포함할 수 있다.
심볼 구성부(210)는, 채널로부터 코드워드에 대응하는 판독 벡터를 수신할 수 있다. 심볼 구성부(210)는, 판독 벡터에 포함된 판독 값들(read values)을 그룹핑(grouping)하여 변수 노드들(variable nodes)에게 할당할 초기 심볼들(initial symbols)을 구성하고, 구성된 초기 심볼들을 노드 프로세서(220)에 제공할 수 있다. 예를 들어, 판독 벡터가 14개의 판독 값들로 이루어진 경우, 심볼 구성부(210)는, 판독 값들을 2개씩 그룹핑하여 7개의 초기 심볼들을 구성할 수 있다. 판독 벡터에 포함된 판독 값들 각각은, '0' 또는 '1'일 수 있다.
노드 프로세서(220)는, 심볼 구성부(210)로부터 수신되는 초기 심볼들을 기반으로 메시지 전달 알고리즘을 이용하여 오류 정정 디코딩을 수행할 수 있다. 메시지 전달 알고리즘에 의할 때, 변수 노드들(variable nodes)과 체크 노드들(check nodes) 간에 이루어지는 메시지들(messages)의 교환을 통하여 코드워드에 수렴(converge)하는 결과가 생성될 수 있다. 메시지들은, 변수 노드로부터 체크 노드에게 전송되는 변수-투-체크(variable to check; V2C) 메시지 및 체크 노드로부터 변수 노드에게 전송되는 체크-투-변수(check to variable; C2V) 메시지를 포함할 수 있다.
노드 프로세서(220)는, 최대 반복 횟수(I) 내에서 적어도 한 번의 반복(iteration)을 수행할 수 있다. 노드 프로세서(220)는, i번째 반복에 대응하는 경판정 벡터(hard decision vector)를 생성하고, 생성된 경판정 벡터를 신드롬 체크부(230)에게 제공할 수 있다. 여기서, i는 I 이하의 자연수이다. 경판정 벡터는, 변수 노드들의 경판정 값들(hard decision values)을 포함할 수 있다. 신드롬 체크부(230)에 제공되는 경판정 값들 중 적어도 하나는, 후술될 신뢰도 값(reliability value) 또는 불신뢰도 값(unreliability value) 중 적어도 하나를 기반으로 수정된 값일 수 있다.
노드 프로세서(220)는, 변수 노드 업데이트 모듈(variable node update module; 222), 체크 노드 업데이트 모듈(check node update module; 224) 및 에지 게인 프로세서(edge gain processor; 226)를 포함할 수 있다.
이하에서, 노드 프로세서(220)가 플러딩 기법(flooding scheme)에 따라 동작하는 예를 설명할 것이나, 본 발명의 실시 예들이 이에 한정되는 것은 아니며, 노드 프로세서(220)는 컬럼-레이어드(column-layered) 기법 또는 로우-레이어드(row-layered) 기법에 따라 동작할 수도 있다.
변수 노드 업데이트 모듈(222)은, 첫 번째 반복이 수행되기 이전에, 심볼 구성부(210)로부터 수신되는 초기 심볼들을 이용하여 변수 노드들을 초기화할 수 있다. 즉, 변수 노드 업데이트 모듈(222)은, 초기 심볼들 각각을 변수 노드의 경판정 값으로서 변수 노드들 각각에 하나씩 할당할 수 있다.
첫 번째 반복에서, 변수 노드 업데이트 모듈(222)은, 변수 노드들의 경판정 값들이 체크 노드들에게 전달될 수 있도록 V2C 메시지들을 생성하여 체크 노드 업데이트 모듈(224)에게 전송할 수 있다. 변수 노드 업데이트 모듈(222)은, 체크 노드 업데이트 모듈(224)로부터 수신되는 C2V 메시지들을 기반으로 변수 노드들 각각의 경판정 값을 업데이트할 수 있다.
첫 번째 반복을 제외한 각각의 반복에서, 변수 노드 업데이트 모듈(222)은, 체크 노드 업데이트 모듈(224)로부터 수신되는 C2V 메시지들을 기반으로 V2C 메시지들을 생성하고, 생성된 V2C 메시지들을 체크 노드 업데이트 모듈(224)에게 전송할 수 있다. 또한, 변수 노드 업데이트 모듈(222)은, 체크 노드 업데이트 모듈(224)로부터 수신되는 C2V 메시지들을 기반으로 변수 노드들의 경판정 값들을 업데이트할 수 있다.
각각의 반복에서, 체크 노드 업데이트 모듈(224)은, 변수 노드 업데이트 모듈(222)로부터 수신되는 V2C 메시지들을 기반으로 체크 노드들의 값들을 업데이트할 수 있다. 또한, 체크 노드 업데이트 모듈(224)은, 변수 노드 업데이트 모듈(222)로부터 수신되는 V2C 메시지들을 기반으로 C2V 메시지들을 생성하고, 생성된 C2V 메시지들을 변수 노드 업데이트 모듈(222)에게 전송할 수 있다.
변수 노드 업데이트 모듈(222)과 체크 노드 업데이트 모듈(224) 간에 교환되는 메시지들에 대하여 에지 게인 연산(edge gain processing) 또는 역 에지 게인 연산(inverse edge gain processing)이 수행될 수 있다. 에지 게인 프로세서(226)는, 변수 노드 업데이트 모듈(222)에서 생성된 V2C 메시지들에 대하여 에지 게인 연산(edge gain processing)을 수행하고, 에지 게인 연산이 수행된 V2C 메시지들을 체크 노드 업데이트 모듈(224)에게 전송할 수 있다. 에지 게인 프로세서(226)는, 체크 노드 업데이트 모듈(224)에서 생성된 C2V 메시지들에 대하여 역 에지 게인 연산(inverse edge gain processing)을 수행하고, 역 에지 게인 연산이 수행된 C2V 메시지들을 변수 노드 업데이트 모듈(222)에게 전송할 수 있다. 에지 게인(edge gain)은, 패리티 체크 행렬로부터 획득될 수 있으며, 에지 계수(edge coefficient) 또는 에지 가중치(edge weight)로 언급될 수도 있다.
변수 노드 업데이트 모듈(222)은, 신뢰도 값 관리부(reliability value manager; 222a), 반전 함수 값 계산부(flipping function value calculator; 222b), 심볼 수정부(symbol corrector; 222c) 및 임계 값 관리부(threshold value manager; 222d)를 포함할 수 있다.
신뢰도 값 관리부(222a)는, 변수 노드들 각각에 대응하는 후보 심볼들의 신뢰도 값들(reliability values)을 관리할 수 있다. 후보 심볼들의 신뢰도 값들은, 변수 노드의 경판정 값을 수정할지 여부를 판단하는 기준이 될 수 있다.
신뢰도 값 관리부(222a)는, 매 반복의 시작 시에, 변수 노드들 각각에 대하여 후보 심볼들의 신뢰도 값들(reliability values)을 초기화할 수 있다. 후보 심볼들은, 변수 노드의 경판정 값으로서 선택될 수 있는 심볼들을 의미하며, 갈로아 체(Galois Field) GF(q)에 속하는 모든 심볼들을 포함할 수 있다.
신뢰도 값 관리부(222a)는, 변수 노드에 할당된 초기 심볼, 반복의 회차 또는 UCNs(unsatisfied check nodes)의 개수 중 적어도 하나를 고려하여 후보 심볼들의 신뢰도 값들을 초기화할 수 있다.
일 실시 예에서, 신뢰도 값 관리부(222a)는, 변수 노드에 대응하는 후보 심볼들과 변수 노드에 할당된 초기 심볼 간의 해밍 거리(hamming distance)를 고려하여, 후보 심볼들의 신뢰도 값들을 초기화할 수 있다. 신뢰도 값 관리부(222a)는, 초기 심볼과의 해밍 거리가 서로 다른 후보 심볼들의 신뢰도 값들을 서로 다르게 초기화할 수 있다. 신뢰도 값 관리부(222a)는, 초기 심볼과의 해밍 거리가 더 가까운 후보 심볼의 신뢰도 값을 더 높게 초기화할 수 있다.
예를 들어, GF(4)가 이용되는 경우 변수 노드에 대응하는 후보 심볼들은 '00', '01', '10' 및 '11'의 4가지가 있을 수 있다. '00', '01', '10' 및 '11'은 GF(4) 심볼들(0, 1, α, α2)의 이진 표현을 나타낸다. 변수 노드에 할당된 초기 심볼이 '01'이라 가정하면, 초기 심볼 '01'과의 해밍 거리(0)가 가장 가까운 후보 심볼 '01'의 신뢰도 값은 3으로 초기화될 수 있고, 초기 심볼 '01'과의 해밍 거리(1)가 두 번째로 가까운 후보 심볼들 '00' 및 '11' 각각의 신뢰도 값은 1로 초기화될 수 있으며, 초기 심볼 '01'과의 해밍 거리(2)가 가장 먼 후보 심볼 '10'의 신뢰도 값은 0으로 초기화될 수 있다.
일 실시 예에서, 신뢰도 값 관리부(222a)는, 반복의 회차를 고려하여, 후보 심볼들의 신뢰도 값들을 초기화할 수 있다. 신뢰도 값 관리부(222a)는, 반복의 회차가 증가할수록 후보 심볼들 중 적어도 하나의 신뢰도 값을 이전 회차에 비하여 더 낮게 초기화할 수 있다. 실시 예에 따라, 신뢰도 값 관리부(222a)는, 반복의 회차가 증가할수록 후보 심볼들 중 적어도 하나의 신뢰도 값을 이전 회차에 비하여 더 높게 초기화할 수도 있다.
일 실시 예에서, 신뢰도 값 관리부(222a)는, 반복의 회차 및 해밍 거리를 고려하여, 후보 심볼들의 신뢰도 값들을 초기화할 수 있다. 신뢰도 값 관리부(222a)는, 반복의 회차가 증가할수록 초기 심볼과의 해밍 거리가 더 가까운 후보 심볼의 신뢰도 값을 더 낮게 초기화할 수 있다. 실시 예에 따라, 신뢰도 값 관리부(222a)는, 반복의 회차가 증가할수록 초기 심볼과의 해밍 거리가 더 가까운 후보 심볼의 신뢰도 값을 더 높게 초기화할 수도 있다.
예를 들어, GF(4)가 이용되고, 변수 노드에 할당된 초기 심볼이 '01'이라 가정하자. 그리고, i번째 반복에서 후보 심볼 '01'의 신뢰도 값은 3으로 초기화되었고, 후보 심볼들 '00' 및 '11' 각각의 신뢰도 값은 1로 초기화되었고, 후보 심볼 '10'의 신뢰도 값은 0으로 초기화되었다고 가정하자. 이러한 경우, i+1번째 반복에서, 초기 심볼 '01'과의 해밍 거리가 가장 가까운 후보 심볼 '01'의 신뢰도 값은 2로 초기화될 수 있다. 나머지 후보 심볼들 '00', '10' 및 '11' 각각의 신뢰도 값은 i번째 반복과 동일하게 초기화되거나, i번째 반복에 비하여 더 높게 초기화될 수 있다.
일 실시 예에서, 신뢰도 값 관리부(222a)는, UCNs의 개수를 고려하여, 후보 심볼들의 신뢰도 값들을 초기화할 수 있다. 신뢰도 값 관리부(222a)는, i번째 반복에서 변수 노드에 연결된 UCNs의 개수가 더 많을수록, i+1번째 반복에서 상기 변수 노드에 대응하는 후보 심볼들 중 적어도 하나의 신뢰도 값을 i번째 반복에 비하여 더 낮게 초기화할 수 있다. 실시 예에 따라, 신뢰도 값 관리부(222a)는, i번째 반복에서 변수 노드에 연결된 UCNs의 개수가 더 많을수록, i+1번째 반복에서 상기 변수 노드에 대응하는 후보 심볼들 중 적어도 하나의 신뢰도 값을 i번째 반복에 비하여 더 높게 초기화할 수도 있다.
일 실시 예에서, 신뢰도 값 관리부(222a)는, UCNs의 개수 및 해밍 거리를 고려하여, 후보 심볼들의 신뢰도 값들을 초기화할 수 있다. 예를 들어, 신뢰도 값 관리부(222a)는, i번째 반복에서 변수 노드에 연결된 UCNs의 개수가 더 많을수록, i+1번째 반복에서 초기 심볼과의 해밍 거리가 더 가까운 후보 심볼의 신뢰도 값을 i번째 반복에 비하여 더 낮게 초기화할 수 있다. 실시 예에 따라, 신뢰도 값 관리부(222a)는, i번째 반복에서 변수 노드에 연결된 UCNs의 개수가 더 많을수록, i+1번째 반복에서 초기 심볼과의 해밍 거리가 더 가까운 후보 심볼의 신뢰도 값을 i번째 반복에 비하여 더 높게 초기화할 수도 있다.
예를 들어, GF(4)가 이용되고, 변수 노드에 할당된 초기 심볼이 '01'이라 가정하자. 그리고, i번째 반복에서 후보 심볼 '01'의 신뢰도 값은 3으로 초기화되었고, 후보 심볼들 '00' 및 '11' 각각의 신뢰도 값은 1로 초기화되었고, 후보 심볼 '10'의 신뢰도 값은 0으로 초기화되었다고 가정하자. 이러한 경우, i번째 반복에서 변수 노드에 연결된 UCNs의 개수가 20개라면 i+1번째 반복에서 초기 심볼 '01'과의 해밍 거리가 가장 가까운 후보 심볼 '01'의 신뢰도 값은 2로 초기화될 수 있고, i번째 반복에서 변수 노드에 연결된 UCNs의 개수가 30개라면 후보 심볼 '01'의 신뢰도 값은 1로 초기화될 수 있다. 나머지 후보 심볼들 '00', '10' 및 '11' 각각의 신뢰도 값은 i번째 반복과 동일하게 초기화되거나, i번째 반복에 비하여 더 높게 초기화될 수 있다.
신뢰도 값 관리부(222a)는, 매 반복마다, 변수 노드에게 수신되는 C2V 메시지들을 기반으로 후보 심볼들의 신뢰도 값들을 갱신할 수 있다. 예를 들어, 신뢰도 값 관리부(222a)는, 후보 심볼을 나타내는 C2V 메시지의 개수만큼 후보 심볼의 신뢰도 값을 증가시킬 수 있다. 예를 들어, 신뢰도 값 관리부(222a)는, 후보 심볼 '10'을 나타내는 C2V 메시지가 1개 수신된 경우 후보 심볼 '10'의 신뢰도 값을 1만큼 증가시키고, 후보 심볼 '10'을 나타내는 C2V 메시지가 2개 수신된 경우 후보 심볼 '10'의 신뢰도 값을 2만큼 증가시킬 수 있다.
신뢰도 값 관리부(222a)는, 매 반복마다, 변수 노드들 각각에 대한 후보 심볼들의 갱신된 신뢰도 값들을 반전 함수 값 계산부(222b)에게 제공할 수 있다.
반전 함수 값 계산부(222b)는, 매 반복마다, 신뢰도 값 관리부(222a)로부터 변수 노드들 각각에 대한 후보 심볼들의 갱신된 신뢰도 값들을 수신하고, 수신된 갱신된 신뢰도 값들을 기반으로 변수 노드들 각각에 대응하는 반전 함수 값을 계산할 수 있다.
반전 함수 값 계산부(222b)는, 제 1 함수 값과 제 2 함수 값을 계산하고, 제 1 함수 값으로부터 제 2 함수 값을 뺀 값인 반전 함수 값을 계산할 수 있다. 여기서, 제 1 함수 값은 후보 심볼들 중 대상 후보 심볼의 갱신된 신뢰도 값과 관련된 값일 수 있고, 제 2 함수 값은 후보 심볼들 중 대상 후보 심볼을 제외한 나머지 후보 심볼들 중 적어도 하나의 후보 심볼들의 갱신된 신뢰도 값들과 관련된 값일 수 있다.
반전 함수 값 계산부(222b)는, 제 1 함수 값 및 제 2 함수 값을 계산하기 위하여, 후보 심볼들 중에서 대상 후보 심볼을 선택할 수 있다. 대상 후보 심볼의 선택은, 변수 노드들 각각에 대하여 이루어질 수 있다.
일 실시 예에서, 반전 함수 값 계산부(222b)는, 후보 심볼들의 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼을 대상 후보 심볼로 선택할 수 있다. 반전 함수 값 계산부(222b)는, 대상 후보 심볼을 선택하기 위하여, 모든 후보 심볼들의 갱신된 신뢰도 값들을 서로 비교할 수 있다.
일 실시 예에서, 반전 함수 값 계산부(222b)는, 후보 심볼들의 갱신된 신뢰도 값들 중 변수 노드의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값을 제외한 나머지 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼을 대상 후보 심볼로 선택할 수 있다. 반전 함수 값 계산부(222b)는, 대상 후보 심볼을 선택하기 위하여, 후보 심볼들 중 변수 노드의 경판정 값과 동일한 후보 심볼을 제외한 나머지 후보 심볼들의 갱신된 신뢰도 값들을 서로 비교할 수 있다. 이러한 경우, 갱신된 신뢰도 값들의 비교가 토너먼트(tournament) 방식으로 이루어진다고 가정할 때, 전술한 실시 예에 비하여 비교 횟수가 1회 줄어들 수 있다.
대상 후보 심볼이 선택되면, 반전 함수 값 계산부(222b)는, 설정된 방법에 따라 제 1 함수 값 및 제 2 함수 값을 계산할 수 있다. 제 1 함수 값 및 제 2 함수 값의 계산은, 변수 노드들 각각에 대하여 이루어질 수 있다.
일 실시 예에서, 제 1 함수 값은, 대상 후보 심볼의 갱신된 신뢰도 값일 수 있다.
일 실시 예에서, 제 1 함수 값은, 대상 후보 심볼의 갱신된 신뢰도 값에 스케일링 팩터(scaling factor) 또는 스케일링 오프셋(scaling offset) 중 적어도 하나를 적용한 값일 수 있다. 스케일링 팩터는 대상 후보 심볼의 갱신된 신뢰도 값에 곱해지는 값일 수 있으며, 스케일링 오프셋은 대상 후보 심볼의 갱신된 신뢰도 값에 더해지는 값일 수 있다. 스케일링 팩터 및 스케일링 오프셋은, 상수일수도 있고 변수일수도 있다. 스케일링 팩터 또는 스케일링 오프셋 중 적어도 하나는, 변수 노드의 차수(degree) 또는 반복의 회차 중 적어도 하나에 기반하여 결정될 수 있다. 예를 들어, 스케일링 팩터 또는 스케일링 오프셋 중 적어도 하나는, 변수 노드의 차수가 더 클수록 또는 반복의 회차가 증가할수록, 더 크게 결정될 수 있다.
일 실시 예에서, 제 2 함수 값은, 후보 심볼들의 갱신된 신뢰도 값들 중에서 두 번째로 큰 값일 수 있다.
일 실시 예에서, 제 2 함수 값은, 후보 심볼들의 갱신된 신뢰도 값들 중 가장 큰 값을 제외한 나머지 갱신된 신뢰도 값들 중에서 적어도 둘 이상을 더한 값일 수 있다. 예를 들어, 제 2 함수 값은, 후보 심볼들의 갱신된 신뢰도 값들 중 두 번째로 큰 값과 세 번째로 큰 값을 더한 값일 수 있다. 예를 들어, 제 2 함수 값은, 후보 심볼들의 갱신된 신뢰도 값들 중 가장 큰 값을 제외한 나머지 값들을 모두 더한 값일 수 있다.
일 실시 예에서, 제 2 함수 값은, 변수 노드의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값일 수 있다.
제 1 함수 값 및 제 2 함수 값이 계산되면, 반전 함수 값 계산부(222b)는, 제 1 함수 값에서 제 2 함수 값을 뺀 값인, 반전 함수 값을 계산할 수 있다. 반전 함수 값 계산부(222b)는, 계산된 반전 함수 값을 심볼 수정부(222c)에게 제공할 수 있다. 반전 함수 값의 계산 및 제공은, 변수 노드들 각각에 대하여 이루어질 수 있다. 이 때, 반전 함수 값 계산부(222b)는, 대상 후보 심볼에 대한 정보를 심볼 수정부(222c)에게 더 제공할 수 있다.
심볼 수정부(222c)는, 반전 함수 값 계산부(222b)로부터 수신되는 반전 함수 값들을 기반으로 변수 노드들의 경판정 값들을 수정하거나 유지할 수 있다.
심볼 수정부(222c)는, 변수 노드들 각각에 대하여, 반전 함수 값과 제 1 임계 값을 비교하여 반전 함수 값이 제 1 임계 값 이상인지 여부를 판단할 수 있다. 제 1 임계 값은 양수일 수 있다. 반전 함수 값이 제 1 임계 값 이상이라는 것은, 대상 후보 심볼이 변수 노드에 대한 좀 더 정확한 추정치(estimate)라는 것을 의미할 수 있다. 따라서, 심볼 수정부(222c)는, 반전 함수 값이 제 1 임계 값 이상인 경우 변수 노드의 경판정 값을 대상 후보 심볼로 수정할 수 있다. 이 때, 심볼 수정부(222c)는 후술될 변수 노드의 불신뢰도 값(unreliability value)을 초기화할 수 있다. 심볼 수정부(222c)는, 반전 함수 값이 제 1 임계 값 미만인 경우 변수 노드의 경판정 값을 수정하지 않을 수 있다.
일 실시 예에서, 심볼 수정부(222c)는, 변수 노드에 대응하는 반전 함수 값이 양수가 아닌 경우, 제 1 임계 값과의 비교를 스킵(skip)할 수 있다.
일 실시 예에서, 심볼 수정부(222c)는, 변수 노드에 대응하는 반전 함수 값이 양수가 아닌 경우, 반전 함수 값의 절대 값과 제 1 임계 값을 비교하여 반전 함수 값의 절대 값이 제 1 임계 값 이상인지 여부를 판단할 수 있다. 예를 들어, 제 1 함수 값이 후보 심볼들의 갱신된 신뢰도 값들 중 변수 노드의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값을 제외한 나머지 갱신된 신뢰도 값들 중 가장 큰 값과 관련되고, 제 2 함수 값이 변수 노드의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값과 관련되는 경우, 반전 함수 값이 양수가 아니고 반전 함수 값의 절대 값이 제 1 임계 값 이상이라는 것은, 변수 노드의 경판정 값이 좀 더 정확한 추정치라는 것을 의미할 수 있다. 따라서, 이러한 경우, 심볼 수정부(222c)는 변수 노드의 경판정 값을 수정하지 않고, 후술될 변수 노드의 불신뢰도 값(unreliability value)을 초기화할 수 있다.
한편, 반전 함수 값이 제 1 임계 값 미만이어서 심볼 수정이 이루어지지 않은 변수 노드들의 신뢰성을 보장하기 위하여, 추가적인 정보가 더 이용될 수 있다. 이러한 정보는, 본 발명의 실시 예들에서, 변수 노드의 불신뢰도 값(unreliability value)이라고 언급된다.
심볼 수정부(222c)는, 변수 노드들 각각의 불신뢰도 값을 관리할 수 있다. 심볼 수정부(222c)는, 첫 번째 반복의 시작 시에 변수 노드들 각각의 불신뢰도 값을 초기화할 수 있다. 예를 들어, 심볼 수정부(222c)는, 첫 번째 반복의 시작 시에 변수 노드들 각각의 불신뢰도 값을 서로 동일하게, 예를 들어 0으로 초기화할 수 있다. 심볼 수정부(222c)는, 소정의 반복에서 소정의 변수 노드에 대응하여 계산된 반전 함수 값이 소정의 임계 값 이상인지 여부에 따라 해당 소정의 변수 노드의 불신뢰도 값을 갱신할 수 있다.
불신뢰도 값을 나타내기 위하여, 변수 노드들 각각에 하나 또는 둘 이상의 비트가 할당될 수 있으며, 이하에서 두 가지 경우를 나누어 살펴본다.
먼저, 불신뢰도 값을 나타내기 위하여, 하나의 비트가 할당된 경우를 살펴본다.
심볼 수정부(222c)는, 반전 함수 값이 제 1 임계 값 미만인 변수 노드들 각각에 대하여, 반전 함수 값이 제 1 임계 값 미만인 제 2 임계 값 이상인지 여부를 판단할 수 있다. 제 2 임계 값은 양수일 수 있다. 심볼 수정부(222c)는, 변수 노드에 대응하는 반전 함수 값이 제 2 임계 값 이상 제 1 임계 값 미만인 경우 해당 변수 노드의 불신뢰도 값이 설정되어 있는지 여부를 확인할 수 있다. 예를 들어, 심볼 수정부(222c)는, 불신뢰도 값을 나타내기 위하여 할당된 비트가 1로 설정되어 있는지 여부를 확인할 수 있다.
반전 함수 값이 제 2 임계 값 이상 제 1 임계 값 미만인 변수 노드에 불신뢰도 값이 설정되어 있지 않은 경우, 심볼 수정부(222c)는, 해당 변수 노드의 불신뢰도 값을 설정할 수 있다. 예를 들어, 심볼 수정부(222c)는, 해당 변수 노드의 불신뢰도 값을 1로 설정할 수 있다. 불신뢰도 값은, 변수 노드의 현재 경판정 값이 오류일 수 있는 가능성을 나타낸다고 할 수 있다.
반전 함수 값이 제 2 임계 값 이상 제 1 임계 값 미만인 변수 노드에 불신뢰도 값이 설정되어 있는 경우, 심볼 수정부(222c)는, 해당 변수 노드의 경판정 값을 수정할 수 있다. 예를 들어, 심볼 수정부(222c)는, 불신뢰도 값이 설정되어 있는 변수 노드의 경판정 값을 현재 반복에 대응하는 대상 후보 심볼로 수정할 수 있다. 일 실시 예에서, 심볼 수정부(222c)는, 불신뢰도 값에 기반하여 변수 노드의 경판정 값을 수정한 경우, 해당 변수 노드의 불신뢰도 값을 초기화할 수 있다. 일 실시 예에서, 심볼 수정부(222c)는, 불신뢰도 값에 기반하여 변수 노드의 경판정 값을 수정한 경우라 하더라도, 해당 변수 노드의 불신뢰도 값을 초기화하지 않을 수 있다. 이는, 반전 함수 값이 제 1 임계 값 이상인 경우에 비하여, 반전 함수 값이 제 2 임계 값 이상 제 1 임계 값 미만인 경우 대상 후보 심볼이 변수 노드에 대한 좀 더 덜 정확한 추정치라 할 수 있기 때문이다. 따라서, 이러한 경우 추후 변수 노드의 경판정 값이 다시 수정되기 쉽도록 변수 노드의 불신뢰도 값을 초기화하지 않을 수 있다.
다음, 불신뢰도 값을 나타내기 위하여, 둘 이상의 비트가 할당된 경우를 살펴본다.
일 실시 예에서, 심볼 수정부(222c)는, 반전 함수 값이 제 1 임계 값 미만인 변수 노드들 각각에 대하여, 반전 함수 값이 제 1 임계 값 미만인 제 2 임계 값 이상인지 여부를 판단할 수 있다. 심볼 수정부(222c)는, 변수 노드에 대응하는 반전 함수 값이 제 2 임계 값 이상 제 1 임계 값 미만인 경우 해당 변수 노드의 불신뢰도 값을 갱신할 수 있다. 예를 들어, 심볼 수정부(222c)는, 변수 노드의 불신뢰도 값을 설정 값만큼 증가시킬 수 있다. 예를 들어, 심볼 수정부(222c)는, 변수 노드의 불신뢰도 값을 1만큼 증가시키거나 반전 함수 값만큼 증가시킬 수 있다.
일 실시 예에서, 심볼 수정부(222c)는, 반전 함수 값이 제 1 임계 값 미만인 변수 노드들 각각에 대하여, 반전 함수 값이 제 1 임계 값 미만인 제 4 내지 제 n(n은 5이상의 자연수) 임계 값 이상인지 여부를 판단할 수 있다. 예를 들어, 제 4 임계 값 및 제 4 임계 값보다 작은 제 5 임계 값이 이용되는 경우, 심볼 수정부(222c)는, 반전 함수 값이 제 4 임계 값 이상인 경우 변수 노드의 불신뢰도 값을 제 1 설정 값만큼 증가시키고, 반전 함수 값이 제 5 임계 값 이상 제 4 임계 값 미만인 경우 변수 노드의 불신뢰도 값을 제 2 설정 값만큼 증가시킬 수 있다. 여기서, 제 1 설정 값은, 제 2 설정 값보다 큰 값일 수 있다.
변수 노드의 불신뢰도 값이 갱신된 경우, 심볼 수정부(222c)는, 갱신된 불신뢰도 값이 제 3 임계 값 이상인지 여부를 판단할 수 있다. 제 3 임계 값은 양수일 수 있다. 갱신된 불신뢰도 값이 제 3 임계 값 이상인 경우, 심볼 수정부(222c)는, 변수 노드의 경판정 값을 현재 반복에 대응하는 대상 후보 심볼로 수정할 수 있다. 전술한 예와 동일한 원리로, 심볼 수정부(222c)는, 불신뢰도 값에 기반하여 변수 노드의 경판정 값을 수정한 경우, 변수 노드의 불신뢰도 값을 초기화하거나 초기화하지 않을 수 있다.
심볼 수정부(222c)는, 매 반복마다, 변수 노드들의 경판정 값들을 신드롬 체크부(230)에 제공할 수 있다. 신드롬 체크부(230)에 제공되는 변수 노드들의 경판정 값들 중 적어도 하나는, 신뢰도 값 또는 불신뢰도 값에 기반하여 수정된 값일 수 있다.
임계 값 관리부(222d)는, 변수 노드 값을 수정할지 여부를 판단하는 기준이 되는 임계 값들(예를 들어, 제 1 임계 값 내지 제 n 임계 값들)을 설정할 수 있다. 임계 값들의 설정은, 최초의 반복에서만 이루어질 수도 있고, 이후의 반복들 중 적어도 하나의 반복에서 더 이루어질 수도 있다. 임계 값 관리부(222d)는, 변수 노드의 차수, 반복의 회차 또는 이전 반복에 대응하는 UCNs의 개수 중 적어도 하나를 고려하여 임계 값들을 설정할 수 있다.
예를 들어, 임계 값 관리부(222d)는, 차수가 더 높은 변수 노드일수록 제 1 임계 값 내지 제 n 임계 값들 중 적어도 하나를 더 높게 설정하고, 차수가 더 낮은 변수 노드일수록 제 1 임계 값 내지 제 n 임계 값들 중 적어도 하나를 더 낮게 설정할 수 있다.
예를 들어, 임계 값 관리부(222d)는, 반복의 회차가 증가할수록 제 1 임계 값 내지 제 n 임계 값들 중 적어도 하나를 더 높게 설정할 수 있다. 실시 예에 따라, 임계 값 관리부(222d)는, 반복의 회차가 증가할수록 제 1 임계 값 내지 제 n 임계 값들 중 적어도 하나를 더 낮게 설정할 수도 있다.
예를 들어, 임계 값 관리부(222d)는, 이전 반복에 대응하는 UCNs의 개수가 더 많을수록 제 1 임계 값 내지 제 n 임계 값들 중 적어도 하나를 더 높게 설정할 수 있다. 실시 예에 따라, 임계 값 관리부(222d)는, 이전 반복에 대응하는 UCNs의 개수가 더 많을수록 제 1 임계 값 내지 제 n 임계 값들 중 적어도 하나를 더 낮게 설정할 수도 있다.
신드롬 체크부(230)는, i번째 반복에 대응하여 노드 프로세서(220)로부터 수신되는 경판정 값들(경판정 벡터)에 대한 신드롬 체크를 수행할 수 있다. 예를 들어, 신드롬 체크는, <수학식 1>에 의해 계산되는 신드롬 벡터(Si)의 모든 엔트리들이 0인지 여부를 확인함으로써 이루어질 수 있다.
Figure pat00001
여기서, Si는 i번째 반복에 대응하는 신드롬 벡터, H는 오류 정정 코드의 패리티 체크 행렬, Ci T는 i번째 반복에 대응하는 경판정 벡터(Ci)의 전치(transpose)를 나타낸다. 여기서, 경판정 벡터(Ci)는, 행 벡터(row vector)인 것으로 가정한다.
신드롬 벡터(Si)의 모든 엔트리들이 0인 경우 신드롬 체크가 패스되었음을 의미하고, 신드롬 벡터(Si)의 모든 엔트리들 중 0이 아닌 엔트리가 있는 경우 신드롬 체크가 페일되었음을 의미한다.
신드롬 체크가 패스되는 경우, 신드롬 체크부(230)는, 노드 프로세서(220)로부터 수신된 경판정 벡터를 디코딩된 코드워드로서 출력할 수 있다.
신드롬 체크가 페일되는 경우, 신드롬 체크부(230)는, 신드롬 벡터(Si)에 대응하는 UCNs(unsatisfied check nodes)의 개수 정보를 노드 프로세서(220)에 제공할 수 있다. 여기서, UCN은, 신드롬 벡터(Si)의 엔트리들 중 0이 아닌 엔트리에 대응할 수 있다.
만약, 최대 반복 횟수(I) 내에서 신드롬 체크가 패스되지 않는 경우, 신드롬 체크부(230)는, 오류 정정 디코딩이 페일되었음을 나타내는 페일 신호를 출력할 수 있다.
도 2는 패리티 체크 행렬을 설명하기 위한 예시도이다.
도 2에는, (n, k) 코드를 정의하는 패리티 체크 행렬(H)의 일 예를 도시하였다. (n, k) 코드는, (n-k)×n의 크기를 갖는 패리티 체크 행렬로 정의될 수 있다. 패리티 체크 행렬의 각각의 엔트리는, 갈로아 체(Galois field)에 속하는 원소(element)들로 표현될 수 있다.
갈로아 체(GF(q))는 q 개의 원소들로 이루어진 유한체이며, 갈로아 체(GF(q))의 원소들은, {0, α0, α1, ..., αq-2}로 표현될 수 있다. 패리티 체크 행렬에 포함된 논-제로(non-zero) 엔트리들(α0, α1, ..., αq-2)의 개수가 0의 개수에 비하여 상대적으로 매우 적은 경우, (n, k) 코드는 (n, k) LDPC 코드로 언급될 수 있다. 여기서, n 및 k는 자연수일 수 있다.
이진 LDPC 코드는 GF(2)의 원소들을 엔트리로서 가질 수 있으며, 비이진(non-binary; NB) LDPC 코드는 GF(q)(여기서, q>2)의 원소들을 엔트리로서 가질 수 있다. 도 2에는 일 예로서, GF(4)의 원소들을 엔트리로서 갖는 NB-LDPC 코드의 패리티 체크 행렬을 도시하였다.
도 3은 도 2에 도시된 패리티 체크 행렬을 태너 그래프로 나타낸 도면이다.
(n, k) 코드는, 등가의 이분 그래프(bipartite graph) 표현인 태너(Tanner) 그래프로 표현될 수 있다. 태너 그래프는, 체크 노드(check node)들, 변수 노드(variable node)들 및 에지(edge)들로 표현될 수 있다. 체크 노드들은 패리티 체크 행렬의 행(row)들에 대응하고, 변수 노드들은 패리티 체크 행렬의 열(column)들에 대응한다. 각각의 에지는, 하나의 체크 노드와 하나의 변수 노드를 연결하며, 패리티 체크 행렬의 논-제로 엔트리에 대응한다.
도 3에 도시된 바와 같이, 도 2에 도시된 (n, k) 코드의 패리티 체크 행렬은, n-k개의 체크 노드들(CN1 ~ CNn-k) 및 n개의 변수 노드들(VN1 ~ VNn)을 포함하는 태너 그래프로 표현될 수 있다. 체크 노드들(CN1 ~ CNn-k) 및 변수 노드들(VN1 ~ VNn)을 연결하는 실선 및 점선은 에지를 나타낸다.
반복 복호는, 도 3에 도시된 바와 같은 태너 그래프 상에서 메시지 전달 알고리즘에 따라 체크 노드들(CN1 ~ CNn-k)과 변수 노드들(VN1 ~ VNn) 사이에서 이루어지는 메시지들의 교환을 통하여 이루어질 수 있다. 변수 노드들은 자신과 연결된 체크 노드들로부터 수신되는 C2V 메시지들을 이용하여 오류 정정을 수행할 수 있고, 체크 노드들은 자신과 연결된 변수 노드들로부터 수신되는 V2C 메시지들을 이용하여 패리티 체크를 수행할 수 있다. 만약, 어느 하나의 체크 노드가 자신과 연결되어 있는 모든 변수 노드들의 경판정 값들을 XOR(exclusive OR) 연산한 결과 값이 0으로만 이루어진 경우, 해당 체크 노드는 만족(satisfied)되었다고 할 수 있다. 반면, 어느 하나의 체크 노드가 자신과 연결되어 있는 모든 변수 노드들의 경판정 값을 XOR 연산한 결과 값이 0이 아닌 원소를 포함하는 경우 해당 체크 노드는 불만족(unsatisfied)되었다고 할 수 있으며, 해당 체크 노드는 UCN이라 일컬어질 수 있다. 여기서, XOR 연산이 되는 변수 노드들의 경판정 값은, 에지 게인 연산이 수행된 값일 수 있다.
도 4는 도 2에 도시된 패리티 체크 행렬을 이용하여 계산되는 신드롬 벡터를 설명하기 위한 예시도이다.
전술한 바와 같이, 패리티 체크 행렬(H)과 i번째 반복에 대응 하는 경판정 벡터(Ci)의 전치(Ci T)를 기반으로 신드롬 벡터(Si)가 생성될 수 있다. 신드롬 벡터(Si)의 엔트리들(Si1, Si2, ..., Sin-k)은, 도 3에 도시된 태너 그래프 상의 체크 노드들(CN1 ~ CNn-k)에 대응한다.
신드롬 벡터(Si)의 모든 엔트리들(Si1, Si2, ..., Sin-k)이 0을 나타내는 경우, 이는 i번째 반복에서 신드롬 체크가 패스되었음을 의미한다. 이는, i번째 반복에서 오류 정정 디코딩이 성공적으로 이루어졌음을 의미한다. 따라서, 현재 판독 벡터에 대한 반복 복호는 종료되고, i번째 반복에 대응하는 경판정 벡터(Ci)가 디코딩된 코드워드로서 출력될 수 있다.
만약, 신드롬 벡터(Si)의 모든 엔트리들(Si1, Si2, ..., Sin-k) 중 적어도 하나의 엔트리가 0이 아닌 경우, 이는 i번째 반복에서 신드롬 체크가 페일되었음을 의미한다. 이는 i번째 반복에서 오류 정정 디코딩이 성공되지 않았음을 의미하며, 다라서, 최대 반복 횟수(I)에 도달하지 않은 경우라면 다음 반복이 수행될 수 있다. 만약, 최대 반복 횟수(I)에 도달한 경우라면 현재 판독 벡터에 대한 반복 복호는 종료될 수 있다.
도 5는 판독 값을 설명하기 위한 예시도이다.
도 5에는, 각각이 제 1 상태(S1) 및 제 2 상태(S2) 중 어느 하나의 상태를 갖는 메모리 셀들의 문턱 전압 분포(Vth)를 도시하였다.
하나의 코드워드에 대응하는 하나의 판독 벡터를 획득하기 위하여, 하나의 판독 전압(Vr1)이 하나의 코드워드를 저장하는 복수의 메모리 셀들(예를 들어, 하나의 페이지를 구성하는 메모리 셀들)에 인가될 수 있다. 이에 따라, 하나의 메모리 셀당 하나의 판독 값이 획득될 수 있다. 하나의 판독 벡터는, 복수의 메모리 셀들에 대응하는 판독 값들로 구성될 수 있다.
예를 들어, 제 1 판독 전압(Vr1)이 복수의 메모리 셀들에 인가되었을 때, 제 1 판독 전압(Vr1)보다 낮은 문턱 전압을 갖는 메모리 셀에 대한 판독 값은 '1'로 나타날 수 있고, 제 1 판독 전압(Vr1)보다 높은 문턱 전압을 갖는 메모리 셀에 대한 판독 값은 '0'으로 나타날 수 있다.
도 6은 본 발명의 일 실시 예에 따른 심볼 구성 과정을 설명하기 위한 예시도이다.
도 6을 참조하여 설명하는 실시 예에서, 채널로부터 수신된 판독 벡터(read vector)가 14개의 판독 값들을 포함하는 것으로 가정한다.
오류 정정 디코더는, 판독 벡터에 포함된 판독 값들을 설정된 개수 단위로 그룹핑하여 복수의 심볼들을 구성할 수 있다. 예를 들어, GF(4)가 이용되는 경우, 오류 정정 디코더는, 2개의 판독 값들을 그룹핑하여 하나의 심볼을 구성할 수 있다. 판독 벡터가 14개의 판독 값들을 포함하므로, 오류 정정 디코더는, 총 7개의 심볼들을 구성할 수 있다. 오류 정정 디코더는, 구성된 심볼들을 변수 노드들(VN1 ~ VN7)에게 하나씩 할당할 수 있다.
이하에서, 바이너리 표현(binary representation) '00'은 GF(4) 표현(GF(4) representation) '0'에 대응하고, 바이너리 표현 '01'은 GF(4) 표현 '1'에 대응하고, 바이너리 표현 '10'은 GF(4) 표현 'α'에 대응하고, 바이너리 표현 '11'은 GF(4) 표현 'α2'에 대응하는 것으로 가정한다.
도 7은 본 발명의 일 실시 예에 따른 임계 값들을 설명하기 위한 예시도이다.
전술한 바와 같이, 변수 노드들 각각에 대하여 하나 또는 복수의 임계 값들이 설정될 수 있다.
불신뢰도 값이 이용되지 않는 실시 예, 즉 신뢰도 값만이 이용되는 실시 예에서, 제 1 임계 값(first threshold value)만이 변수 노드들 각각에 대하여 설정될 수 있다.
신뢰도 값 및 불신뢰도 값이 이용되고, 불신뢰도 값을 나타내기 위하여 변수 노드들 각각에 하나의 비트가 할당되는 실시 예에서, 제 1 임계 값 및 제 2 임계 값(second threshold value)들이 변수 노드들 각각에 대하여 설정될 수 있다.
신뢰도 값 및 불신뢰도 값이 이용되고, 불신뢰도 값을 나타내기 위하여 변수 노드들 각각에 둘 이상의 비트가 할당되는 실시 예에서, 제 1 임계 값 내지 제 n 임계 값(third threshold value)들이 변수 노드들 각각에 대하여 설정될 수 있다.
한편, 전술한 바와 같이, 임계 값들 중 적어도 하나는, 변수 노드의 차수, 반복의 회차 또는 이전 반복에 대응하는 UCNs의 개수 중 적어도 하나를 기반으로 설정될 수 있다.
도 7에는, 일 예로서, 변수 노드의 차수에 따라 제 1 임계 값 내지 제 3 임계 값이 설정된 예를 도시하였다. 도 7을 참조하면, 차수(32)가 더 높은 변수 노드들(VN1, VN3)에 더 높은 임계 값들이 설정되고, 차수(26)가 더 낮은 변수 노드들(VN2, VNn)에 더 낮은 임계 값들이 설정되었음을 알 수 있다.
도 8은 본 발명의 일 실시 예에 따른 신뢰도 값을 초기화하는 과정을 설명하기 위한 예시도이다.
도 8에는 설명의 편의를 위하여, 태너 그래프 상의 일부 변수 노드들과 일부 체크 노드들만을 도시하였다. 설명의 편의를 위하여, 도 8 이하의 도면들을 참조하여 설명하는 실시 예들에서 두 개의 변수 노드들(VN1, VN2)만을 예로 들어 설명하나, 나머지 변수 노드들(VN3 ~ VNn)에도 동일한 내용이 적용될 수 있다.
도 8을 참조하여 설명하는 실시 예에서, GF(4)가 이용되고, 변수 노드(VN1)에 초기 심볼 '1'이 할당되고, 변수 노드(VN2)에 초기 심볼 '0'이 할당되고, 변수 노드(VN3)에 초기 심볼 'α'가 할당되고, 변수 노드(VNn)에 초기 심볼 'α2'이 할당된 경우를 가정한다.
전술한 바와 같이, 후보 심볼들의 신뢰도 값들은, 초기 심볼과의 해밍 거리, 반복의 회차 또는 이전 반복에 대응하는 UCNs의 개수 중 적어도 하나를 기반으로 초기화될 수 있다.
도 8에는, 일 예로서, 초기 심볼과의 해밍 거리에 따라 후보 심볼들의 신뢰도 값들이 서로 다르게 초기화된 예를 도시하였다.
변수 노드(VN1)에 대하여 살펴보면, 초기 심볼 '1'과의 해밍 거리가 0으로 가장 가까운 후보 심볼 '1'의 신뢰도 값이 가장 높은 3으로 초기화되고, 초기 심볼 '1'과의 해밍 거리가 1로 두 번째로 가까운 후보 심볼들 '0' 및 'α2' 각각의 신뢰도 값이 두 번째로 높은 1로 초기화되고, 초기 심볼 '1'과의 해밍 거리가 2로 가장 먼 후보 심볼 'α'의 신뢰도 값이 가장 낮은 0으로 초기화되었음을 알 수 있다.
변수 노드(VN2)에 대하여 살펴보면, 초기 심볼 '0'과의 해밍 거리가 0으로 가장 가까운 후보 심볼 '0'의 신뢰도 값이 가장 높은 3으로 초기화되고, 초기 심볼 '0'과의 해밍 거리가 1로 두 번째로 가까운 후보 심볼들 '1' 및 'α' 각각의 신뢰도 값이 두 번째로 높은 1로 초기화되고, 초기 심볼 '0'과의 해밍 거리가 2로 가장 먼 후보 심볼 'α2'의 신뢰도 값이 가장 낮은 0으로 초기화되었음을 알 수 있다.
도 9는 본 발명의 일 실시 예에 따라 경판정 값을 수정하는 과정을 설명하기 위한 예시도이다.
매 반복마다, 변수 노드들(VN1 ~ VNn) 각각에 대응하여 입력되는 C2V 메시지들에 따라, 변수 노드들(VN1 ~ VNn) 각각에 대응하는 후보 심볼들의 신뢰도 값(reliability value)들이 갱신될 수 있다. 예를 들어, 소정의 후보 심볼을 나타내는 C2V 메시지가 수신된 개수만큼 상기 소정의 후보 심볼의 신뢰도 값이 증가될 수 있다. 예를 들어, 후보 심볼 'α'를 나타내는 C2V 메시지가 1개 수신되는 경우 후보 심볼 'α'의 신뢰도 값은 1만큼 증가되고, 후보 심볼 'α'를 나타내는 C2V 메시지가 2개 수신되는 경우 후보 심볼 'α'의 신뢰도 값은 2만큼 증가될 수 있다.
도 9를 참조하여 설명하는 실시 예에서, 도 8을 참조하여 설명한 초기화 과정 이후에, 변수 노드(VN1)에게, 후보 심볼 '0'을 나타내는 C2V 메시지가 6개 수신되고, 후보 심볼 '1'을 나타내는 C2V 메시지가 2개 수신되고, 후보 심볼 'α'를 나타내는 C2V 메시지가 22개 수신되고, 후보 심볼 'α2'를 나타내는 C2V 메시지가 2개 수신된 경우를 가정한다. 또한, 변수 노드(VN2)에게, 후보 심볼 '0'을 나타내는 C2V 메시지가 9개 수신되고, 후보 심볼 '1'을 나타내는 C2V 메시지가 7개 수신되고, 후보 심볼 'α'를 나타내는 C2V 메시지가 5개 수신되고, 후보 심볼 'α2'를 나타내는 C2V 메시지가 5개 수신된 경우를 가정한다.
따라서, 변수 노드(VN1)의 후보 심볼 '0'에 대한 신뢰도 값은 1에서 7로 갱신되고, 변수 노드(VN1)의 후보 심볼 '1'에 대한 신뢰도 값은 3에서 5로 갱신되고, 변수 노드(VN1)의 후보 심볼 'α'에 대한 신뢰도 값은 0에서 22로 갱신되고, 변수 노드(VN1)의 후보 심볼 'α2'에 대한 신뢰도 값은 1에서 3으로 갱신될 수 있다.
또한, 변수 노드(VN2)의 후보 심볼 '0'에 대한 신뢰도 값은 3에서 12로 갱신되고, 변수 노드(VN2)의 후보 심볼 '1'에 대한 신뢰도 값은 1에서 8로 갱신되고, 변수 노드(VN2)의 후보 심볼 'α'에 대한 신뢰도 값은 1에서 6으로 갱신되고, 변수 노드(VN2)의 후보 심볼 'α2'에 대한 신뢰도 값은 0에서 5로 갱신될 수 있다.
신뢰도 값이 갱신된 이후, 변수 노드들 각각에 대하여, 반전 함수 값이 계산될 수 있다. 전술한 바와 같이, 반전 함수 값은, 대상 후보 심볼의 갱신된 신뢰도 값과 관련된 제 1 함수 값으로부터 후보 심볼들 중 대상 후보 심볼을 제외한 나머지 후보 심볼들 중 적어도 하나의 후보 심볼들의 갱신된 신뢰도 값들과 관련된 제 2 함수 값을 뺀 값일 수 있다.
도 9를 참조하여 설명하는 실시 예에서, 대상 후보 심볼은, 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼인 것으로 가정한다. 그리고, 제 1 함수 값은, 대상 후보 심볼의 갱신된 신뢰도 값, 즉 후보 심볼들의 갱신된 신뢰도 값들 중에서 가장 큰 값인 것으로 가정한다. 그리고, 제 2 함수 값은, 갱신된 신뢰도 값들 중에서 두 번째로 큰 값인 것으로 가정한다.
변수 노드(VN1)에 대하여 살펴보면, 후보 심볼들의 갱신된 신뢰도 값들 중 가장 큰 값은 22이고, 두 번째로 큰 값은 7임을 알 수 있다. 즉, 제 1 함수 값은 22가 되고, 제 2 함수 값은 7이 된다. 따라서, 반전 함수 값(flipping function value)은, 제 1 함수 값(22)에서 제 2 함수 값(7)을 뺀 값인, 15가 된다. 반전 함수 값이 제 1 임계 값(first threshold value) 이상인 경우 변수 노드(VN1)의 경판정 값이 대상 후보 심볼로 수정될 수 있다. 변수 노드(VN1)에 대응하는 제 1 임계 값은 7이고 반전 함수 값은 15 이므로, 변수 노드(VN1)의 경판정 값이 대상 후보 심볼, 즉 'α'로 수정될 수 있다.
변수 노드(VN2)에 대하여 살펴보면, 후보 심볼들의 갱신된 신뢰도 값들 중 가장 큰 값은 12이고, 두 번째로 큰 값은 8임을 알 수 있다. 즉, 제 1 함수 값은 12가 되고, 제 2 함수 값은 8이 된다. 따라서, 반전 함수 값은, 제 1 함수 값(12)에서 제 2 함수 값(8)을 뺀 값인, 4가 된다. 반전 함수 값이 제 1 임계 값 미만인 경우 변수 노드(VN2)의 경판정 값이 유지될 수 있다. 변수 노드(VN2)에 대응하는 제 1 임계 값은 6이고 반전 함수 값은 4이므로, 변수 노드(VN2)의 경판정 값이 유지될 수 있다.
도 10은 본 발명의 일 실시 예에 따라 경판정 값을 수정하는 과정을 설명하기 위한 예시도이다.
도 10을 참조하여 설명하는 실시 예에서, 도 9를 참조하여 설명한 내용과 중복되는 내용은 생략한다.
도 10을 참조하여 설명하는 실시 예에서, 도 8을 참조하여 설명한 초기화 과정 이후에 변수 노드들(VN1, VN2)에게 수신된 C2V 메시지들에 따라 변수 노드들(VN1, VN2)의 후보 심볼들의 신뢰도 값들이 갱신된 경우를 가정한다. 변수 노드들(VN1, VN2)의 후보 심볼들의 신뢰도 값들은, 도 9를 참조하여 설명한 바와 동일하게 갱신되었다고 가정한다.
도 10을 참조하여 설명하는 실시 예에서, 대상 후보 심볼은 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼이고, 제 1 함수 값은 대상 후보 심볼의 갱신된 신뢰도 값인 것으로 가정한다.
도 10을 참조하여 설명하는 실시 예에서, 제 2 함수 값은 현재의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값인 것으로 가정한다.
변수 노드(VN1)에 대하여 살펴보면, 후보 심볼들의 갱신된 신뢰도 값들 중 가장 큰 값은 22이고, 변수 노드(VN1)의 경판정 값과 동일한 후보 심볼 '1'의 갱신된 신뢰도 값은 5임을 알 수 있다. 즉, 제 1 함수 값은 22가 되고, 제 2 함수 값은 5이 된다. 따라서, 반전 함수 값(flipping function value)은, 제 1 함수 값(22)에서 제 2 함수 값(5)을 뺀 값인, 17이 된다. 반전 함수 값이 제 1 임계 값(first threshold value) 이상인 경우 변수 노드(VN1)의 경판정 값이 대상 후보 심볼로 수정될 수 있다. 변수 노드(VN1)에 대응하는 제 1 임계 값은 7이고 반전 함수 값은 17 이므로, 변수 노드(VN1)의 경판정 값이 대상 후보 심볼, 즉 'α'로 수정될 수 있다.
변수 노드(VN2)에 대하여 살펴보면, 갱신된 신뢰도 값들 중에서 가장 큰 값(12)에 대응하는 후보 심볼 '0'이 현재의 경판정 값과 동일함을 알 수 있다. 이러한 경우, 반전 함수 값이 계산되지 않고, 변수 노드(VN2)의 경판정 값이 유지될 수 있다.
도 11은 본 발명의 일 실시 예에 따라 경판정 값을 수정하는 과정을 설명하기 위한 예시도이다.
도 11을 참조하여 설명하는 실시 예에서, 도 9를 참조하여 설명한 내용과 중복되는 내용은 생략한다
도 11을 참조하여 설명하는 실시 예에서, 도 8을 참조하여 설명한 초기화 과정 이후에 변수 노드들(VN1, VN2)에게 수신된 C2V 메시지들에 따라 변수 노드들(VN1, VN2)의 후보 심볼들의 신뢰도 값들이 갱신된 경우를 가정한다. 변수 노드들(VN1, VN2)의 후보 심볼들의 신뢰도 값들은, 도 9를 참조하여 설명한 바와 동일하게 갱신되었다고 가정한다.
도 11을 참조하여 설명하는 실시 예에서, 대상 후보 심볼은 갱신된 신뢰도 값들 중 현재의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값을 제외한 나머지 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼이고, 제 1 함수 값은 대상 후보 심볼의 갱신된 신뢰도 값인 것으로 가정한다.
도 11을 참조하여 설명하는 실시 예에서, 제 2 함수 값은 현재의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값인 것으로 가정한다.
변수 노드(VN1)에 대하여 살펴보면, 후보 심볼들의 갱신된 신뢰도 값들 중 현재의 경판정 값과 동일한 후보 심볼 '1'의 갱신된 신뢰도 값을 제외한 나머지 신뢰도 값들 중에서 가장 큰 값은 22이고, 현재의 경판정 값과 동일한 후보 심볼 '1'의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값은 5임을 알 수 있다. 즉, 제 1 함수 값은 22가 되고, 제 2 함수 값은 5가 된다. 따라서, 반전 함수 값(flipping function value)은, 제 1 함수 값(22)에서 제 2 함수 값(5)을 뺀 값인, 17이 된다. 반전 함수 값이 제 1 임계 값 이상인 경우 변수 노드(VN1)의 경판정 값이 대상 후보 심볼로 수정될 수 있다. 변수 노드(VN1)에 대응하는 제 1 임계 값은 7이고 반전 함수 값은 17 이므로, 변수 노드(VN1)의 경판정 값이 대상 후보 심볼, 즉 'α'로 수정될 수 있다.
변수 노드(VN2)에 대하여 살펴보면, 후보 심볼들의 갱신된 신뢰도 값들 중 현재의 경판정 값과 동일한 후보 심볼 '0'의 갱신된 신뢰도 값을 제외한 나머지 신뢰도 값들 중에서 가장 큰 값은 8이고, 현재의 경판정 값과 동일한 후보 심볼 '0'의 갱신된 신뢰도 값은 12임을 알 수 있다. 따라서, 반전 함수 값은, 제 1 함수 값(8)에서 제 2 함수 값(12)를 뺀 값인, -4가 된다. 도 11을 참조하여 설명하는 실시 예에서, 반전 함수 값이 양수가 아니라는 것은, 현재의 경판정 값이 신뢰성 있는 추정치(estimate)임을 의미할 수 있다. 따라서, 이러한 경우, 반전 함수 값과 제 1 임계 값의 비교는 스킵(skip)되고, 변수 노드(VN2)의 경판정 값이 유지될 수 있다.
도 12는 본 발명의 일 실시 예에 따라 경판정 값을 수정하는 과정을 설명하기 위한 예시도이다.
도 12를 참조하여 설명하는 실시 예에서, 변수 노드들의 불신뢰도 값들이 더 이용되며, 불신뢰도 값을 나타내기 위하여 변수 노드들 각각에 1비트가 할당된 경우를 가정한다. 또한, 불신뢰도 값들은 0으로 초기화되어 있는 것으로 가정한다.
도 12를 참조하여 설명하는 실시 예에서, 도 9를 참조하여 설명한 내용과 중복되는 내용은 생략한다.
도 12를 참조하여 설명하는 실시 예에서, 도 8을 참조하여 설명한 초기화 과정 이후에 변수 노드들(VN1, VN2)에게 수신된 C2V 메시지들에 따라 변수 노드들(VN1, VN2)의 후보 심볼들의 신뢰도 값들이 갱신된 경우를 가정한다. 변수 노드들(VN1, VN2)의 후보 심볼들의 신뢰도 값들은, 도 9를 참조하여 설명한 바와 동일하게 갱신되었다고 가정한다.
도 12를 참조하여 설명하는 실시 예에서, 대상 후보 심볼은 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼이고, 제 1 함수 값은 대상 후보 심볼의 갱신된 신뢰도 값인 것으로 가정한다.
도 12를 참조하여 설명하는 실시 예에서, 제 2 함수 값은 갱신된 신뢰도 값들 중에서 두 번째로 큰 값인 것으로 가정한다.
변수 노드(VN1)에 대하여는 도 9를 참조하여 설명한 바와 같이 동일한 원리로 심볼 수정이 이루어질 수 있다.
변수 노드(VN2)에 대하여 살펴보면, 후보 심볼들의 갱신된 신뢰도 값들 중 가장 큰 값은 12이고, 두 번째로 큰 값은 8임을 알 수 있다. 즉, 제 1 함수 값은 12가 되고, 제 2 함수 값은 8이 된다. 따라서, 반전 함수 값(flipping function value)은, 제 1 함수 값(12)에서 제 2 함수 값(8)을 뺀 값인, 4가 된다. 반전 함수 값이 제 2 임계 값(second threshold value) 이상 제 1 임계 값(first threshold value) 미만이고 변수 노드(VN2)의 불신뢰도 값이 설정되어 있지 않다면 변수 노드(VN2)의 불신뢰도 값이 설정될 수 있다. 변수 노드(VN2)에 대응하는 제 1 임계 값은 6이고 제 2 임계 값은 4이며 반전 함수 값은 4이고 변수 노드(VN2)의 불신뢰도 값이 설정되어 있지 않은 상태므로, 변수 노드(VN2)의 불신뢰도 값이 1로 설정될 수 있다. 그리고, 변수 노드(VN2)의 경판정 값은 유지될 수 있다.
도 13은 본 발명의 일 실시 예에 따라 경판정 값을 수정하는 과정을 설명하기 위한 예시도이다.
도 13에는, 도 12를 참조하여 설명한 심볼 수정 및 불신뢰도 값 설정이 이루어진 후, 다음 반복에서 신뢰도 값은 초기화되고 불신뢰도 값은 유지된 상태에서 C2V 메시지들이 수신된 경우의 예를 도시하였다.
도 13을 참조하여 설명하는 실시 예에서, 전술한 실시 예들과 동일한 원리로 후보 심볼들의 신뢰도 값들이 갱신될 수 있으며, 상세한 설명은 생략한다.
도 13을 참조하여 설명하는 실시 예에서, 대상 후보 심볼은 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼이고, 제 1 함수 값은 대상 후보 심볼의 갱신된 신뢰도 값인 것으로 가정한다.
도 13을 참조하여 설명하는 실시 예에서, 제 2 함수 값은 갱신된 신뢰도 값들 중에서 두 번째로 큰 값인 것으로 가정한다.
변수 노드(VN1)에 대하여는 도 9를 참조하여 설명한 바와 같이 동일한 원리로 경판정 값이 수정될 수 있다.
변수 노드(VN2)에 대하여 살펴보면, 후보 심볼들의 갱신된 신뢰도 값들 중 가장 큰 값은 13이고, 두 번째로 큰 값은 8임을 알 수 있다. 즉, 제 1 함수 값은 13이 되고, 제 2 함수 값은 8이 된다. 따라서, 반전 함수 값(flipping function value)은, 제 1 함수 값(13)에서 제 2 함수 값(8)을 뺀 값인, 5가 된다. 반전 함수 값이 제 2 임계 값(second threshold value) 이상 제 1 임계 값(first threshold value) 미만이고 변수 노드(VN2)의 불신뢰도 값이 설정되어 있다면 변수 노드(VN2)의 경판정 값이 대상 후보 심볼로 수정될 수 있다. 변수 노드(VN2)에 대응하는 제 1 임계 값은 6이고 제 2 임계 값은 4이며 반전 함수 값은 4이고 변수 노드(VN2)의 불신뢰도 값이 설정되어 있는 상태이므로, 변수 노드(VN2)의 경판정 값이 대상 후보 심볼인 'α'로 수정될 수 있다. 도 13에는 불신뢰도 값에 기반하여 변수 노드(VN2)의 경판정 값이 수정된 후, 변수 노드(VN2)의 불신뢰도 값이 1에서 0으로 초기화된 예를 도시하였다. 그러나, 전술한 바와 같이, 실시 예에 따라, 불신뢰도 값에 기반하여 변수 노드(VN2)의 경판정 값이 수정된 경우라 하더라도 변수 노드(VN2)의 불신뢰도 값이 초기화되지 않을 수 있다.
도 14는 본 발명의 일 실시 예에 따라 경판정 값을 수정하는 과정을 설명하기 위한 예시도이다.
도 14를 참조하여 설명하는 실시 예에서, 불신뢰도 값을 나타내기 위하여 변수 노드들 각각에 둘 이상의 비트가 할당된 경우를 가정한다. 또한, 불신뢰도 값들은 0으로 초기화되어 있는 것으로 가정한다.
도 14를 참조하여 설명하는 실시 예에서, 도 8을 참조하여 설명한 초기화 과정 이후에 변수 노드들(VN1, VN2)에게 수신된 C2V 메시지들에 따라 변수 노드들(VN1, VN2)에 대응하는 후보 심볼들의 신뢰도 값들이 갱신된 경우를 가정한다. 도 14를 참조하여 설명하는 실시 예에서, 전술한 실시 예들과 동일한 원리로 후보 심볼들의 신뢰도 값들이 갱신될 수 있으며, 상세한 설명은 생략한다.
도 14를 참조하여 설명하는 실시 예에서, 대상 후보 심볼은 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼이고, 제 1 함수 값은 대상 후보 심볼의 갱신된 신뢰도 값인 것으로 가정한다. 또한, 제 2 함수 값은 갱신된 신뢰도 값들 중에서 두 번째로 큰 값인 것으로 가정한다.
변수 노드(VN1)에 대하여 살펴보면, 전술한 실시 예들과 동일한 원리로, 반전 함수 값(flipping function value)은, 제 1 함수 값(17)에서 제 2 함수 값(12)을 뺀 값인, 5가 된다. 반전 함수 값이 제 2 임계 값(second threshold value) 이상 제 1 임계 값(first threshold value) 미만인 경우, 변수 노드(VN1)의 불신뢰도 값이 설정 값만큼 갱신될 수 있다. 도 14에는 일 예로서, 변수 노드(VN1)의 불신뢰도 값이 반전 함수 값인 5만큼 증가된 예를 도시하였다. 한편, 갱신된 불신뢰도 값이 제 3 임계 값(third threshold value) 미만인 경우 변수 노드(VN1)의 경판정 값이 유지될 수 있다. 갱신된 불신뢰도 값(5)이 제 3 임계 값(20) 미만이므로 변수 노드(VN1)의 경판정 값은 유지될 수 있다.
변수 노드(VN2)에 대하여도 동일한 원리로 불신뢰도 값이 갱신될 수 있다.
도 15는 본 발명의 일 실시 예에 따라 심볼을 수정하는 과정을 설명하기 위한 예시도이다.
도 15를 참조하여 설명하는 실시 예서, 도 14를 참조하여 설명한 불신뢰도 값이 갱신된 이후에 추가적인 반복들이 수행되어, 변수 노드(VN1)의 불신뢰도 값은 15로 갱신되어 있고, 변수 노드(VN2)의 불신뢰도 값은 9로 갱신되어 있는 상황을 가정한다.
그리고, 변수 노드들(VN1, VN2)에게 수신된 C2V 메시지들에 따라 변수 노드들(VN1, VN2)에 대응하는 후보 심볼들의 신뢰도 값들이 갱신된 경우를 가정한다. 도 15를 참조하여 설명하는 실시 예에서, 전술한 실시 예들과 동일한 원리로 후보 심볼들의 신뢰도 값들이 갱신될 수 있으며, 상세한 설명은 생략한다.
도 15를 참조하여 설명하는 실시 예에서, 대상 후보 심볼은 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼이고, 제 1 함수 값은 대상 후보 심볼의 갱신된 신뢰도 값인 것으로 가정한다. 또한, 제 2 함수 값은 갱신된 신뢰도 값들 중에서 두 번째로 큰 값인 것으로 가정한다.
변수 노드(VN1)에 대하여 살펴보면, 전술한 실시 예들과 동일한 원리로, 반전 함수 값(flipping function value)은, 제 1 함수 값(18)에서 제 2 함수 값(12)을 뺀 값인, 6이 된다. 반전 함수 값이 제 2 임계 값(second threshold value) 이상 제 1 임계 값(first threshold value) 미만인 경우, 변수 노드(VN1)의 불신뢰도 값이 설정 값만큼 증가될 수 있다. 도 15에는 일 예로서, 변수 노드(VN1)의 불신뢰도 값이 반전 함수 값인 6만큼 증가된 예를 도시하였다. 한편, 갱신된 불신뢰도 값이 제 3 임계 값(third threshold value) 이상인 경우 변수 노드(VN1)의 경판정 값이 수정될 수 있다. 갱신된 불신뢰도 값(21)이 제 3 임계 값(20) 이상이므로, 변수 노드(VN1)의 경판정 값이 대상 후보 심볼, 즉 '0'으로 수정될 수 있다. 도 15에는 불신뢰도 값에 기반하여 변수 노드(VN1)의 경판정 값이 수정된 후, 변수 노드(VN1)의 불신뢰도 값이 21에서 0으로 초기화된 예를 도시하였다. 그러나, 전술한 바와 같이, 실시 예에 따라, 불신뢰도 값에 기반하여 변수 노드(VN1)의 경판정 값이 수정된 경우라 하더라도 변수 노드(VN1)의 불신뢰도 값이 초기화되지 않을 수 있다.
한편, 변수 노드(VN2)의 반전 함수 값(2)은 제 2 임계 값(4) 미만이므로 변수 노드(VN2)의 경판정 값과 불신뢰도 값이 모두 유지될 수 있다.
도 16은 본 발명의 일 실시 예에 따른 오류 정정 디코더의 동작 방법을 설명하기 위한 흐름도이다.
실시 예에 따라, 도 16에 도시된 단계들 중 적어도 하나는 생략될 수 있으며, 각 단계들의 순서는 바뀔 수 있다. 예를 들어, 단계(1607)는 생략될 수 있고, 단계(1607)는 단계(1605) 이전에 수행될 수도 있다.
단계(1601)에서, 오류 정정 디코더는, 코드 워드에 대응하는 판독 벡터를 수신할 수 있다.
단계(1603)에서, 오류 정정 디코더는, 판독 벡터에 포함된 판독 값들을 그룹핑하여 심볼들을 구성하고, 구성된 심볼들을 변수 노드들 각각에 하나씩 할당할 수 있다.
단계(1605) 내지 단계(1611)에서, i번째 반복이 수행될 수 있다.
단계(1605)에서, 오류 정정 디코더는, 변수 노드들 각각에 대응하는 후보 심볼들의 신뢰도 값들을 초기화할 수 있다. 오류 정정 디코더는, 변수 노드들 각각에 대하여, 변수 노드에 할당된 초기 심볼들을 기반으로 변수 노드의 경판정 값으로서 선택될 수 있는 후보 심볼들의 신뢰도 값들을 초기화할 수 있다. 일 실시 예에서, 오류 정정 디코더는, 초기 심볼과의 해밍 거리, 반복의 회차 또는 이전 반복에 대응하는 UCNs의 개수 중 적어도 하나를 고려하여 후보 심볼들의 신뢰도 값들을 초기화할 수 있다. 첫 번째 반복이 수행되는 경우, 변수 노드들 각각의 불신뢰도 값이 초기화될 수 있다.
단계(1607)에서, 오류 정정 디코더는, 변수 노드의 경판정 값을 수정할지 여부를 판단하는 기준이 되는 임계 값들을 설정하거나 변경할 수 있다. 첫 번째 반복에서, 오류 정정 디코더는, 변수 노드의 차수를 고려하여 임계 값들을 설정할 수 있다. 첫 번째 이후의 반복에서, 오류 정정 디코더는, 반복의 회차 또는 이전 반복에 대응하는 UCNs의 개수 중 적어도 하나를 고려하여 임계 값들을 변경할 수 있다.
단계(1609)에서, 오류 정정 디코더는, 후보 심볼들의 신뢰도 값들을 갱신할 수 있다. 예를 들어, 오류 정정 디코더는, 변수 노드들에 대하여 수신되는 C2V 메시지들을 기반으로, 변수 노드들 각각에 대하여 후보 심볼들의 신뢰도 값들을 갱신할 수 있다.
단계(1611)에서, 오류 정정 디코더는, 변수 노드들의 경판정 값을 수정하거나 또는 유지할 수 있다. 단계(1611)에 대하여는 도 17 내지 도 19를 참조하여 좀 더 상세히 후술한다.
단계(1613)에서, 오류 정정 디코더는, 경판정 벡터, 즉 단계(1611)에서 수정 또는 유지된 경판정 값들을 이용하여 신드롬 체크를 수행할 수 있다. 신드롬 체크가 패스되는 경우(Y) 단계(1615)가 수행되고, 그렇지 않은 경우(N) 단계(1621)가 수행될 수 있다.
단계(1615)에서, 오류 정정 디코더는, 경판정 벡터를 디코딩된 코드워드로서 출력할 수 있다.
한편, 단계(1621)에서, 오류 정정 디코더는, 최대 반복 횟수(I)만큼 반복이 수행되었는지 여부를 확인할 수 있다. 만약, 최대 반복 횟수(I)만큼 반복이 수행된 경우(Y) 단계(1443)가 진행되어 오류 정정 디코딩이 페일되었음을 나타내는 페일 신호가 출력될 수 있다. 만약, 최대 반복 횟수(I)만큼 반복이 수행되지 않은 경우(N), 단계(1631)를 거쳐 i+1번째 반복이 수행될 수 있다.
도 17은 본 발명의 일 실시 예에 따른 오류 정정 디코더의 동작 방법을 설명하기 위한 흐름도이다.
도 17에 도시된 단계들(1701~1709)은 변수 노드들 각각에 대하여 수행될 수 있다.
도 17에 도시된 단계들(1701~1709)은 불신뢰도 값이 이용되지 않는 경우에 수행될 수 있다.
단계(1701)에서, 오류 정정 디코더는, 대상 후보 심볼의 갱신된 신뢰도 값과 관련된 제 1 함수 값을 계산할 수 있다.
단계(1703)에서, 오류 정정 디코더는, 후보 심볼들 중 대상 후보 심볼을 제외한 나머지 후보 심볼들 중 적어도 하나의 후보 심볼들의 갱신된 값들과 관련된 제 2 함수 값을 계산할 수 있다.
단계(1705)에서, 오류 정정 디코더는, 반전 함수 값을 계산할 수 있다. 반전 함수 값은 제 1 함수 값으로부터 제 2 함수 값을 뺀 값일 수 있다.
단계(1707)에서, 오류 정정 디코더는, 반전 함수 값이 제 1 임계 값 이상인지 여부를 판단할 수 있다. 반전 함수 값이 제 1 임계 값 이상인 경우(Y) 단계(1709)가 수행되고, 그렇지 않은 경우 단계(1613)가 수행될 수 있다.
단계(1709)에서, 오류 정정 디코더는, 변수 노드의 경판정 값을 대상 후보 심볼로 수정할 수 있다.
실시 예에 따라, 단계(1705)에서, 오류 정정 디코더는, 반전 함수 값이 양수인지 여부를 확인하고, 반전 함수 값이 양수가 아닌 경우 단계(1707) 및 단계(1709)를 스킵(skip)할 수 있다.
도 18은 본 발명의 일 실시 예에 따른 오류 정정 디코더의 동작 방법을 설명하기 위한 흐름도이다.
도 18에 도시된 단계들(1801~1821)은 변수 노드들 각각에 대하여 수행될 수 있다.
도 18에 도시된 단계들(1801~1821)은 불신뢰도 값을 나타내기 위하여 하나의 비트가 할당되는 경우에 수행될 수 있다.
단계(1801)에서, 오류 정정 디코더는, 대상 후보 심볼의 갱신된 신뢰도 값과 관련된 제 1 함수 값을 계산할 수 있다.
단계(1803)에서, 오류 정정 디코더는, 후보 심볼들 중 대상 후보 심볼을 제외한 나머지 후보 심볼들 중 적어도 하나의 후보 심볼들의 갱신된 값들과 관련된 제 2 함수 값을 계산할 수 있다.
단계(1805)에서, 오류 정정 디코더는, 반전 함수 값을 계산할 수 있다. 반전 함수 값은 제 1 함수 값으로부터 제 2 함수 값을 뺀 값일 수 있다.
단계(1807)에서, 오류 정정 디코더는, 반전 함수 값이 제 1 임계 값 이상인지 여부를 판단할 수 있다. 반전 함수 값이 제 1 임계 값 이상인 경우(Y) 단계(1809)가 수행되고, 그렇지 않은 경우 단계(1811)가 수행될 수 있다.
단계(1809)에서, 오류 정정 디코더는, 변수 노드의 경판정 값을 대상 후보 심볼로 수정할 수 있다. 이 때, 오류 정정 디코더는, 변수 노드에 불신뢰도 값이 설정되어 있는지 확인하고, 변수 노드에 불신뢰도 값이 설정되어 있다면 변수 노드의 불신뢰도 값을 초기화할 수 있다.
단계(1811)에서, 오류 정정 디코더는, 반전 함수 값이 제 1 임계 값보다 작은 제 2 임계 값 이상인지 여부를 판단할 수 있다. 반전 함수 값이 제 2 임계 값 이상인 경우(Y) 단계(1813)가 수행되고 그렇지 않은 경우(N) 단계(1613)가 수행될 수 있다.
단계(1813)에서, 오류 정정 디코더는, 변수 노드의 불신뢰도 값이 설정되어 있는지 여부를 판단할 수 있다. 변수 노드의 불신뢰도 값이 설정되어 있는 경우(Y) 단계(1815)가 수행되고, 그렇지 않은 경우(N) 단계(1821)가 수행될 수 있다.
단계(1815)에서, 오류 정정 디코더는, 변수 노드의 경판정 값을 대상 후보 심볼로 수정할 수 있다. 일 실시 예에서, 오류 정정 디코더는, 변수 노드의 경판정 값을 대상 후보 심볼로 수정한 후 변수 노드의 불신뢰도 값을 초기화할 수 있다. 일 실시 예에서, 오류 정정 디코더는, 변수 노드의 경판정 값을 대상 후보 심볼로 수정한 후 변수 노드의 불신뢰도 값을 초기화하지 않을 수도 있다. 이는, 반전 함수 값이 제 1 임계 값 이상인 경우에 비하여, 반전 함수 값이 제 2 임계 값 이상 제 1 임계 값 미만인 경우 대상 후보 심볼이 변수 노드에 대한 좀 더 덜 정확한 추정치라 할 수 있기 때문이다. 따라서, 이러한 경우 추후 변수 노드의 경판정 값이 다시 수정되기 쉽도록 변수 노드의 불신뢰도 값을 초기화하지 않을 수 있다.
단계(1821)에서, 오류 정정 디코더는, 변수 노드의 불신뢰도 값을 설정할 수 있다.
한편, 실시 예에 따라, 오류 정정 디코더는, 단계(1805)에서, 반전 함수 값이 양수인지 여부를 확인하고, 반전 함수 값이 양수가 아닌 경우 반전 함수 값의 절대 값과 제 1 임계 값을 비교하여 반전 함수 값의 절대 값이 제 1 임계 값 이상인지 여부를 판단할 수 있다. 예를 들어, 제 1 함수 값이 후보 심볼들의 갱신된 신뢰도 값들 중 변수 노드의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값을 제외한 나머지 갱신된 신뢰도 값들 중 가장 큰 값과 관련되고, 제 2 함수 값이 변수 노드의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값과 관련되는 경우, 반전 함수 값이 양수가 아니고 반전 함수 값의 절대 값이 제 1 임계 값 이상이라는 것은, 변수 노드의 경판정 값이 좀 더 정확한 추정치라는 것을 의미할 수 있다. 따라서, 이러한 경우, 단계(1807) 내지 단계(1821)는 스킵될 수 있으며, 오류 정정 디코더는 변수 노드의 경판정 값을 수정하지 않을 수 있다. 이 때, 오류 정정 디코더는 변수 노드의 불신뢰도 값이 설정되어 있는지 여부를 확인하고, 변수 노드의 불신뢰도 값이 설정되어 있다면 변수 노드의 불신뢰도 값을 초기화할 수 있다.
도 19는 본 발명의 일 실시 예에 따른 오류 정정 디코더의 동작 방법을 설명하기 위한 흐름도이다.
도 19에 도시된 단계들(1901~1917)은 변수 노드들 각각에 대하여 수행될 수 있다.
도 19에 도시된 단계들(1901~1917)은 불신뢰도 값을 나타내기 위하여 둘 이상의 비트가 할당되는 경우에 수행될 수 있다.
단계(1901)에서, 오류 정정 디코더는, 대상 후보 심볼의 갱신된 신뢰도 값과 관련된 제 1 함수 값을 계산할 수 있다.
단계(1903)에서, 오류 정정 디코더는, 후보 심볼들 중 대상 후보 심볼을 제외한 나머지 후보 심볼들 중 적어도 하나의 후보 심볼들의 갱신된 값들과 관련된 제 2 함수 값을 계산할 수 있다.
단계(1905)에서, 오류 정정 디코더는, 반전 함수 값을 계산할 수 있다. 반전 함수 값은 제 1 함수 값으로부터 제 2 함수 값을 뺀 값일 수 있다.
단계(1907)에서, 오류 정정 디코더는, 반전 함수 값이 제 1 임계 값 이상인지 여부를 판단할 수 있다. 반전 함수 값이 제 1 임계 값 이상인 경우(Y) 단계(1909)가 수행되고, 그렇지 않은 경우 단계(1911)가 수행될 수 있다.
단계(1909)에서, 오류 정정 디코더는, 변수 노드의 경판정 값을 대상 후보 심볼로 수정할 수 있다. 이 때, 오류 정정 디코더는, 변수 노드에 불신뢰도 값이 설정되어 있는지 확인하고, 변수 노드에 불신뢰도 값이 설정되어 있다면 변수 노드의 불신뢰도 값을 초기화할 수 있다.
단계(1911)에서, 오류 정정 디코더는, 반전 함수 값이 제 1 임계 값보다 작은 제 2 임계 값 이상인지 여부를 판단할 수 있다. 반전 함수 값이 제 2 임계 값 이상인 경우(Y) 단계(1913)가 수행되고 그렇지 않은 경우 단계(1613)가 수행될 수 있다.
단계(1913)에서, 오류 정정 디코더는, 변수 노드의 불신뢰도 값을 갱신할 수 있다. 예를 들어, 오류 정정 디코더는, 변수 노드의 불신뢰도 값을 설정 값만큼 증가시킬 수 있다.
단계(1915)에서, 오류 정정 디코더는, 갱신된 불신뢰도 값이 제 3 임계 값 이상인지 여부를 판단할 수 있다. 갱신된 불신뢰도 값이 제 3 임계 값 이상인 경우(Y) 단계(1917)가 수행되고, 그렇지 않은 경우(N) 단계(1613)가 수행될 수 있다.
단계(1917)에서, 오류 정정 디코더는, 변수 노드의 경판정 값을 대상 후보 심볼로 수정할 수 있다. 일 실시 예에서, 오류 정정 디코더는, 변수 노드의 경판정 값을 대상 후보 심볼로 수정한 후 변수 노드의 불신뢰도 값을 초기화할 수 있다. 일 실시 예에서, 오류 정정 디코더는, 도 18의 단계(1815)와 관련하여 설명한 바와 동일한 원리로, 변수 노드의 경판정 값을 대상 후보 심볼로 수정한 후 변수 노드의 불신뢰도 값을 초기화하지 않을 수도 있다.
한편, 실시 예에 따라, 오류 정정 디코더는, 단계(1905)에서, 반전 함수 값이 양수인지 여부를 확인하고, 반전 함수 값이 양수가 아닌 경우 반전 함수 값의 절대 값과 제 1 임계 값을 비교하여 반전 함수 값의 절대 값이 제 1 임계 값 이상인지 여부를 판단할 수 있다. 반전 함수 값의 절대 값이 제 1 임계 값 이상인 경우, 도 18을 참조하여 설명한 원리와 동일한 원리로, 단계(1907) 내지 단계(1917)는 스킵될 수 있으며, 오류 정정 디코더는 변수 노드의 경판정 값을 수정하지 않을 수 있다. 이 때, 오류 정정 디코더는 변수 노드의 불신뢰도 값이 설정되어 있는지 여부를 확인하고, 변수 노드의 불신뢰도 값이 설정되어 있다면 변수 노드의 불신뢰도 값을 초기화할 수 있다.
도 20은 본 발명의 일 실시 예에 따른 메모리 시스템을 설명하기 위한 도면이다.
도 20을 참조하면, 메모리 시스템(memory system; 2000)은, 데이터가 저장되는 메모리 장치(memory device; 2200) 및 호스트(host; 1000)의 요청(request)에 따라 메모리 장치(2200)를 제어하는 메모리 컨트롤러(memory controller; 2100)를 포함할 수 있다.
호스트(1000)는, 메모리 시스템(2000)에 데이터를 저장하거나 메모리 시스템(2000)으로부터 데이터를 회수(retrieve)하는 장치 또는 시스템일 수 있다. 예를 들어, 호스트(1000)는, 컴퓨터(computer), 휴대용 디지털 장치(portable digital device), 태블릿(tablet), 디지털 카메라(digital camera), 디지털 오디오 플레이어(digital audio player), 텔레비전(television), 무선 통신 장치(wireless communication device) 또는 이동 전화기(cellular phone) 중 적어도 하나를 포함할 수 있으나, 본 발명의 실시 예들이 이에 한정되는 것은 아니다.
메모리 컨트롤러(2100)는, 메모리 시스템(2000)의 동작을 전반적으로 제어할 수 있다. 메모리 컨트롤러(2100)는, 호스트(1000)로부터의 요청에 따라 다양한 동작(operation)을 수행할 수 있다. 예를 들어, 메모리 컨트롤러(2100)는, 메모리 장치(2200)에 대하여 프로그램(program) 동작, 판독(read) 동작 및 소거(erase) 동작 등을 수행할 수 있다. 프로그램 동작 시, 메모리 컨트롤러(2100)는 프로그램 커맨드(program command), 어드레스(address) 및 코드워드 등을 메모리 장치(2200)에 전송할 수 있다. 판독 동작 시, 메모리 컨트롤러(2100)는 판독 커맨드(read command) 및 어드레스 등을 메모리 장치(2200)에게 전송하고, 메모리 장치(2200)로부터 코드워드에 대응하는 판독 데이터(read data)를 수신할 수 있다. 소거 동작 시, 메모리 컨트롤러(2100)는, 소거 커맨드(erase command) 및 어드레스 등을 메모리 장치(2200)에게 전송할 수 있다.
메모리 컨트롤러(2100)는, 호스트 인터페이스(host interface; 2110), 중앙 처리 장치(central processing unit; CPU; 2120), 메모리 인터페이스(memory interface; 2130), 버퍼 메모리(buffer memory; 2140), 오류 정정 회로(error correction circuit; 2150) 및 내부 메모리(2160)를 포함할 수 있다. 호스트 인터페이스(2110), 메모리 인터페이스(2130), 버퍼 메모리(2140), 오류 정정 회로(2150) 및 내부 메모리(2160)는 중앙 처리 장치(2120)에 의해 제어될 수 있다.
호스트 인터페이스(2110)는, 호스트(1000)로부터 수신되는 프로그램 요청, 판독 요청 및 소거 요청 등을 중앙 처리 장치(2120)에게 전달할 수 있다. 프로그램 동작 시, 호스트 인터페이스(2110)는, 프로그램 요청에 대응하는 원본 데이터(original data)를 호스트(1000)로부터 수신하고, 수신된 원본 데이터를 버퍼 메모리(2140)에 저장할 수 있다. 판독 동작 시, 호스트 인터페이스(2110)는, 버퍼 메모리(2140)에 저장된 디코딩된 코드워드를 호스트(1000)에게 전송할 수 있다. 호스트 인터페이스(2110)는, 다양한 인터페이스 프로토콜을 이용하여 호스트(1000)와 통신을 수행할 수 있다. 예를 들어, 호스트 인터페이스(2110)는, NVMe(Non-Volatile Memory express), PCI-E(Peripheral Component Interconnect-Express), ATA(Advanced Technology Attachment), SATA(Serial ATA), PATA(Parallel ATA), USB(Universal Serial Bus), MMC(Multi-Media Card), ESDI(Enhanced Small Disk Interface), IDE(Integrated Drive Electronics), MIPI(Mobile Industry Processor Interface), UFS(Universal Flash Storage), SCSI(Small Computer Small Interface) 또는 SAS(serial attached SCSI) 중 적어도 하나의 인터페이스 프로토콜을 이용하여 호스트(1000)와 통신할 수 있으나, 본 발명의 실시 예들이 이에 한정되는 것은 아니다.
중앙 처리 장치(2120)는, 메모리 장치(2200)를 제어하기 위하여, 각종 연산을 수행하거나 커맨드 및 어드레스를 생성할 수 있다. 예를 들어, 중앙 처리 장치(2120)는, 호스트 인터페이스(2110)를 통하여 전달되는 요청에 따라, 프로그램 동작, 판독 동작 및 소거 동작 등에 필요한 다양한 커맨드들 및 어드레스들을 생성할 수 있다.
중앙 처리 장치(2120)는, 호스트 인터페이스(2110)를 통하여 프로그램 요청이 수신되는 경우, 버퍼 메모리(2140)에 저장된 원본 데이터에 대하여 오류 정정 인코딩을 수행하도록 오류 정정 회로(2150)를 제어할 수 있다. 중앙 처리 장치(2120)는, 오류 정정 회로(2150)로부터 코드워드가 생성되었음을 통지받는 경우, 프로그램 커맨드 및 어드레스를 생성하고, 생성된 프로그램 커맨드 및 어드레스와 버퍼 메모리(2140)에 저장된 코드워드가 메모리 장치(2200)에게 전송될 수 있도록 메모리 인터페이스(2130)를 제어할 수 있다.
중앙 처리 장치(2120)는, 호스트 인터페이스(2110)를 통하여 판독 요청이 수신되는 경우, 판독 커맨드 및 어드레스를 생성하고, 생성된 판독 커맨드 및 어드레스가 메모리 장치(2200)에게 전송될 수 있도록 메모리 인터페이스(2130)를 제어할 수 있다. 중앙 처리 장치(2120)는, 메모리 인터페이스(2130)로부터 판독 데이터가 수신되었음을 통지받는 경우, 버퍼 메모리(2140)에 저장된 판독 데이터에 대하여 오류 정정 디코딩을 수행하도록 오류 정정 회로(2150)를 제어할 수 있다. 중앙 처리 장치(2150)는, 오류 정정 회로(2150)로부터 디코딩된 코드워드가 생성되었음을 통지받는 경우, 버퍼 메모리(2140)에 저장된 디코딩된 코드워드가 호스트(1000)에게 전송될 수 있도록 호스트 인터페이스(2110)를 제어할 수 있다.
메모리 인터페이스(2130)는, 다양한 인터페이스 프로토콜을 이용하여 메모리 장치(2200)와 통신을 수행할 수 있다.
프로그램 동작 시, 메모리 인터페이스(2130)는, 중앙 처리 장치(2120)로부터 수신되는 프로그램 커맨드 및 어드레스와 버퍼 메모리(2140)에 저장된 코드워드를 메모리 장치(2200)에게 전송할 수 있다.
판독 동작 시, 메모리 인터페이스(2130)는, 중앙 처리 장치(2120)로부터 수신되는 판독 커맨드 및 어드레스를 메모리 장치(2200)에게 전송할 수 있다. 판독 동작 시, 메모리 인터페이스(2130)는, 메모리 장치(2200)로부터 수신되는 판독 데이터를 버퍼 메모리(2140)에 저장하고, 판독 데이터가 수신되었음을 중앙 처리 장치(2120)에게 통지할 수 있다.
버퍼 메모리(2140)는, 메모리 컨트롤러(2100)가 메모리 장치(2200)를 제어하는 동안 데이터를 임시로 저장할 수 있다.
프로그램 동작 시, 버퍼 메모리(2140)는, 호스트 인터페이스(2110)를 통하여 호스트(1000)로부터 수신되는 원본 데이터를 저장하고, 저장된 원본 데이터를 오류 정정 회로(2150)에게 제공할 수 있다. 프로그램 동작 시, 버퍼 메모리(2140)는, 오류 정정 회로(2150)로부터 수신되는 코드워드를 저장하고, 저장된 코드워드를 메모리 인터페이스(2130)에게 제공할 수 있다.
판독 동작 시, 버퍼 메모리(2140)는, 메모리 인터페이스(2130)를 통하여 메모리 장치(2200)로부터 수신되는 판독 데이터를 저장하고, 저장된 판독 데이터를 오류 정정 회로(2150)에게 제공할 수 있다. 판독 동작 시, 버퍼 메모리(2140)는, 오류 정정 회로(2150)로부터 수신되는 디코딩된 코드워드를 저장하고, 저장된 디코딩된 코드워드를 호스트 인터페이스(2110)에게 제공할 수 있다.
오류 정정 회로(2150)는, 원본 데이터에 대하여 오류 정정 인코딩을 수행하고, 판독 데이터에 대하여 오류 정정 디코딩을 수행할 수 있다. 오류 정정 회로(2150)는 일정 수준의 오류 정정 능력을 가질 수 있다. 예를 들어, 오류 정정 회로(2150)는, 판독 데이터에 오류 정정 능력을 초과하지 않는 수의 오류 비트가 존재하는 경우, 판독 데이터에 포함된 오류를 검출하고 정정할 수 있다. 오류 정정 회로(2150)는, 오류 정정 코드로서 LDPC 코드, 특히 NB-LDPC 코드를 이용하는 오류 정정 회로일 수 있으나, 본 발명의 실시 예들이 이에 한정되는 것은 아니다.
오류 정정 회로(2150)는, 오류 정정 인코더(error correction encoder; 2152) 및 오류 정정 디코더(error correction decoder; 2154)를 포함할 수 있다.
오류 정정 인코더(2152)는, 버퍼 메모리(2140)에 저장된 원본 데이터에 대한 오류 정정 인코딩을 수행하여 코드워드를 생성할 수 있다. 오류 정정 인코더(2152)는, 생성된 코드워드를 버퍼 메모리(2140)에 저장하고, 코드워드가 생성되었음을 중앙 처리 장치(2120)에게 통지할 수 있다. 오류 정정 인코더(2152)의 기본적인 구성 및 동작은 도 1을 참조하여 설명한 오류 정정 인코더(100)와 같다.
오류 정정 디코더(2154)는, 버퍼 메모리(2140)에 저장된 판독 데이터에 대한 오류 정정 디코딩을 수행하여 디코딩된 코드워드를 생성할 수 있다. 오류 정정 디코더(2154)는, 디코딩된 코드워드를 버퍼 메모리(2140)에 저장하고, 디코딩된 코드워드가 생성되었음을 중앙 처리 장치(2120)에게 통지할 수 있다. 판독 데이터에 포함된 오류를 정정할 수 없는 경우, 오류 정정 디코더(2154)는, 오류 정정 디코딩이 페일되었음을 중앙 처리 장치(2120)에게 통지할 수 있다. 오류 정정 디코더(2154)의 기본적인 구성 및 동작은 도 1을 참조하여 설명한 오류 정정 디코더(200)와 같다. 즉, 도 20에 도시된 심볼 구성부(symbol configurator; 2154a), 노드 프로세서(node processor; 2154b) 및 신드롬 체크부(syndrome checker; 2154c)는, 각각 도 1에 도시된 심볼 구성부(210), 노드 프로세서(220) 및 신드롬 체크부(230)와 동일한 동작을 수행할 수 있다.
내부 메모리(2160)는, 메모리 컨트롤러(2100)의 동작에 필요한 다양한 정보들을 저장하는 저장부(storage)로서 사용될 수 있다. 내부 메모리(2160)는, 다수의 테이블들을 저장할 수 있다. 일 실시 예에서, 내부 메모리(2160)는, 논리 어드레스(logical address)와 물리 어드레스(physical address)가 맵핑된 어드레스 맵핑 테이블을 저장할 수 있다.
메모리 장치(2200)는, 메모리 컨트롤러(2100)의 제어에 따라 프로그램 동작, 판독 동작 및 소거 동작 등을 수행할 수 있다. 메모리 장치(2200)는, 전원 공급이 차단되면 저장된 데이터가 소멸되는 휘발성 메모리 장치, 또는 전원 공급이 차단되더라도 저장된 데이터가 유지되는 비휘발성 메모리 장치로 이루어질 수 있다.
메모리 장치(2200)는, 메모리 컨트롤러(2100)로부터 프로그램 커맨드, 어드레스 및 코드워드를 수신하고, 수신된 프로그램 커맨드 및 어드레스에 따라 코드워드를 저장할 수 있다.
메모리 장치(2200)는, 메모리 컨트롤러(2100)로부터 수신되는 판독 커맨드 및 어드레스에 따라 코드워드에 대한 판독 동작을 수행하고, 판독 데이터를 메모리 컨트롤러(2100)에게 제공할 수 있다.
도 21은 본 발명의 일 실시 예에 따른 메모리 장치를 설명하기 위한 도면이다. 도 21에 도시된 메모리 장치는 도 20에 도시된 메모리 시스템에 적용될 수 있다.
메모리 장치(2200)는, 제어 로직(control logic; 2210), 주변 회로들(2220) 및 메모리 셀 어레이(memory cell array; 2240)를 포함할 수 있다. 주변 회로들(2220)은, 전압 생성 회로(voltage generator; 2222), 로우 디코더(row decoder; 2224), 입출력 회로(input/output circuit; 2226), 컬럼 디코더(column decoder; 2228), 페이지 버퍼 그룹(page buffer group; 2232) 및 전류 센싱 회로(current sensing circuit; 2234)를 포함할 수 있다.
제어 로직(2210)은, 도 20에 도시된 메모리 컨트롤러(2100)의 제어 하에 주변 회로들(2220)을 제어할 수 있다.
제어 로직(2210)은, 입출력 회로(2226)를 통하여 메모리 컨트롤러(2100)로부터 수신되는 커맨드(CMD) 및 어드레스(ADD)에 응답하여 주변 회로들(2220)을 제어할 수 있다. 예를 들어, 제어 로직(2210)은, 커맨드(CMD) 및 어드레스(ADD)에 응답하여 동작 신호(OP_CMD), 로우 어드레스(RADD), 컬럼 어드레스(CADD), 페이지 버퍼 제어 신호들(PBSIGNALS) 및 허용 비트(VRY_BIT<#>)를 출력할 수 있다. 제어 로직(2210)은, 전류 센싱 회로(2234)로부터 수신되는 패스 신호(PASS) 또는 페일 신호(FAIL)에 응답하여 검증 동작이 패스되었는지 또는 페일되었는지 여부를 판단할 수 있다.
주변 회로들(2220)은 메모리 셀 어레이(2240)에 데이터를 저장하기 위한 프로그램 동작(program operation), 메모리 셀 어레이(2240)에 저장된 데이터를 출력하기 위한 판독 동작(read operation), 메모리 셀 어레이(2240)에 저장된 데이터를 소거하기 위한 소거 동작(erase operation)을 수행할 수 있다.
전압 생성 회로(2222)는, 제어 로직(2210)으로부터 수신되는 동작 신호(OP_CMD)에 응답하여 프로그램 동작, 판독 동작 및 소거 동작에 이용되는 다양한 동작 전압들(Vop)을 생성할 수 있다. 예를 들어, 전압 생성 회로(2222)는, 프로그램 전압, 검증 전압, 패스 전압, 판독 전압, 소거 전압 및 턴-온 전압 등을 로우 디코더(2224)로 전달할 수 있다.
로우 디코더(2224)는, 제어 로직(2210)으로부터 수신되는 로우 어드레스(RADD)에 응답하여 메모리 셀 어레이(2240)에 포함된 메모리 블록들 중 선택된 메모리 블록에 연결된 로컬 라인들(local lines; LL)에 동작 전압들(Vop)을 전달할 수 있다. 로컬 라인들(LL)은, 로컬 워드 라인들(local word lines), 로컬 드레인 셀렉트 라인들(local drain select lines) 및 로컬 소스 셀렉트 라인들(local source select lines)을 포함할 수 있다. 이 외에도, 로컬 라인들(LL)은 소스 라인(source line) 등 메모리 블록에 연결된 다양한 라인들을 포함할 수 있다.
입출력 회로(2226)는, 입출력 라인들(IO)을 통해 메모리 컨트롤러로부터 수신되는 커맨드(CMD) 및 어드레스(ADD)를 제어 로직(2210)에 전달하거나, 컬럼 디코더(2228)와 데이터(DATA)를 주고 받을 수 있다.
컬럼 디코더(2228)는, 제어 로직(2210)으로부터 수신되는 컬럼 어드레스(CADD)에 응답하여 입출력 회로(2226)와 페이지 버퍼 그룹(2232) 사이에서 데이터를 전달할 수 있다. 예를 들어, 컬럼 디코더(2228)는, 데이터 라인들(DL)을 통해 페이지 버퍼들(PB1~PBm)과 데이터를 주고 받거나, 컬럼 라인들(CL)을 통해 입출력 회로(2226)와 데이터를 주고 받을 수 있다.
페이지 버퍼 그룹(2232)은, 메모리 블록들(BLK1~BLKi)에 공통으로 연결된 비트 라인들(BL1~BLm)에 연결될 수 있다. 페이지 버퍼 그룹(2232)은, 비트 라인들(BL1~BLm)에 연결된 복수의 페이지 버퍼들(PB1~PBm)을 포함할 수 있다. 예를 들어, 각각의 비트 라인마다 하나의 페이지 버퍼가 연결될 수 있다. 페이지 버퍼들(PB1~PBm)은, 제어 로직(2210)으로부터 수신되는 페이지 버퍼 제어 신호들(PBSIGNALS)에 응답하여 동작할 수 있다. 예를 들어, 페이지 버퍼들(PB1~PBm)은, 프로그램 동작 시 메모리 컨트롤러로부터 수신된 프로그램 데이터를 임시로 저장하고, 프로그램 데이터에 따라 비트 라인들(BL1~BLm)에 인가되는 전압을 조절할 수 있다. 또한, 페이지 버퍼들(PB1~PBm)은, 판독 동작 시 비트 라인들(BL1~BLm)을 통하여 수신되는 데이터를 임시로 저장하거나, 비트 라인들(BL1~BLm)의 전압 또는 전류를 센싱할 수 있다.
전류 센싱 회로(2234)는, 판독 동작 또는 검증 동작 시 제어 로직(2210)으로부터 수신되는 허용 비트(VRY_BTI<#>)에 응답하여 기준 전류를 생성하고, 기준 전류에 의하여 생성된 기준 전압과 페이지 버퍼 그룹(2232)으로부터 수신되는 센싱 전압(VPB)을 비교하여 패스 신호(PASS) 또는 페일 신호(FAIL)를 출력할 수 있다.
메모리 셀 어레이(2240)는, 데이터가 저장되는 복수의 메모리 블록들(BLK1~BLKi)을 포함할 수 있다. 메모리 블록들(BLK1~BLKi)에는 사용자 데이터(user data) 및 메모리 장치(2200)의 동작에 필요한 다양한 정보가 저장될 수 있다. 메모리 블록들(BLK1~BLKi)은, 2차원 구조로 구현되거나 3차원 구조로 구현될 수 있으며, 서로 동일하게 구성될 수 있다.
도 22는 메모리 블록을 설명하기 위한 예시도이다.
메모리 셀 어레이는 복수의 메모리 블록들을 포함할 수 있으며, 도 22에는 설명의 편의를 위하여 복수의 메모리 블록들 중 어느 하나의 메모리 블록(BLKi)이 도시되었다.
메모리 블록(BLKi)은 제 1 셀렉트 라인과 제 2 셀렉트 라인 사이에 서로 평행하게 배열된 복수의 워드 라인들이 연결될 수 있다. 여기서, 제 1 셀렉트 라인은 소스 셀렉트 라인(SSL)일 수 있고, 제 2 셀렉트 라인은 드레인 셀렉트 라인(DSL)일 수 있다. 구체적으로, 메모리 블록(BLKi)은, 비트 라인들(BL1~BLm)과 소스 라인(SL) 사이에 연결된 복수의 스트링들(strings; ST)을 포함할 수 있다. 비트 라인들(BL1~BLm)은 스트링들(ST)에 각각 연결될 수 있고, 소스 라인(SL)은 스트링들(ST)에 공통으로 연결될 수 있다. 스트링들(ST)은 서로 동일하게 구성될 수 있으므로, 제 1 비트 라인(BL1)에 연결된 스트링(ST)을 예를 들어 구체적으로 설명하도록 한다.
스트링(ST)은 소스 라인(SL)과 제 1 비트 라인(BL1) 사이에서 서로 직렬로 연결된 소스 셀렉트 트랜지스터(SST), 복수의 메모리 셀들(F1~F16) 및 드레인 셀렉트 트랜지스터(DST)를 포함할 수 있다. 하나의 스트링(ST)에는 소스 셀렉트 트랜지스터(SST) 또는 드레인 셀렉트 트랜지스터(DST)가 적어도 하나 이상씩 포함될 수 있으며, 메모리 셀들(F1~F16) 또한 도면에 도시된 개수보다 더 많이 포함될 수 있다.
소스 셀렉트 트랜지스터(SST)의 소스(source)는 소스 라인(SL)에 연결될 수 있고, 드레인 셀렉트 트랜지스터(DST)의 드레인(drain)은 제 1 비트 라인(BL1)에 연결될 수 있다. 메모리 셀들(F1~F16)은 소스 셀렉트 트랜지스터(SST)와 드레인 셀렉트 트랜지스터(DST) 사이에서 직렬로 연결될 수 있다. 서로 다른 스트링들(ST)에 포함된 소스 셀렉트 트랜지스터들(SST)의 게이트들은 소스 셀렉트 라인(SSL)에 연결될 수 있고, 드레인 셀렉트 트랜지스터들(DST)의 게이트들은 드레인 셀렉트 라인(DSL)에 연결될 수 있고, 메모리 셀들(F1~F16)의 게이트들은 복수의 워드 라인들(WL1~WL16)에 연결될 수 있다. 서로 다른 스트링들(ST)에 포함된 메모리 셀들 중에서 동일한 워드 라인에 연결된 메모리 셀들의 그룹을 물리 페이지(physical page; PPG)라 할 수 있다. 따라서, 메모리 블록(BLKi)에는 워드 라인들(WL1~WL16)의 개수만큼의 물리 페이지들(PPG)이 포함될 수 있다.
하나의 메모리 셀은 1비트 데이터를 저장할 수 있다. 이를 싱글 레벨 셀(single level cell; SLC)이라고 부른다. 이 경우 하나의 물리 페이지(PPG)는 하나의 논리 페이지(logical page; LPG) 데이터를 저장할 수 있다. 하나의 논리 페이지(LPG) 데이터는 하나의 물리 페이지(PPG)에 포함된 셀 개수만큼의 데이터 비트들을 포함할 수 있다. 예를 들면, 하나의 메모리 셀에 2 이상의 비트 데이터가 저장되는 경우, 하나의 물리 페이지(PPG)는 2 이상의 논리 페이지(logical page; LPG) 데이터를 저장할 수 있다. 예를 들면, MLC 타입으로 구동되는 메모리 장치에서는 하나의 물리 페이지(PPG)에 2개의 논리 페이지 데이터가 저장될 수 있고, TLC 타입으로 구동되는 메모리 장치에서는 하나의 물리 페이지(PPG)에 3개의 논리 페이지 데이터가 저장될 수 있다.
도 23은 도 20에 도시된 메모리 컨트롤러를 포함하는 메모리 시스템의 다른 예를 설명하기 위한 도면이다.
도 23을 참조하면, 메모리 시스템(memory system; 30000)은, 이동 전화기(cellular phone), 스마트폰(smart phone), 태블릿(tablet), PC(personal computer), PDA(personal digital assistant) 또는 무선 통신 장치로 구현될 수 있다. 메모리 시스템(30000)은, 메모리 장치(2200)와 상기 메모리 장치(2200)의 동작을 제어할 수 있는 메모리 컨트롤러(2100)를 포함할 수 있다.
메모리 컨트롤러(2100)는, 프로세서(processor; 3100)의 제어에 따라 메모리 장치(2200)의 데이터 액세스 동작, 예컨대 프로그램(program) 동작, 소거(erase) 동작 또는 판독(read) 동작 등을 제어할 수 있다.
메모리 장치(2200)에 프로그램된 데이터는 메모리 컨트롤러(2100)의 제어에 따라 디스플레이(display; 3200)를 통하여 출력될 수 있다.
무선 송수신기(radio transceiver; 3300)는, 안테나(ANT)를 통하여 무선 신호를 주고받을 수 있다. 예컨대, 무선 송수신기(3300)는, 안테나(ANT)를 통하여 수신된 무선 신호를 프로세서(3100)에서 처리(process)될 수 있는 신호로 변경할 수 있다. 따라서, 프로세서(3100)는, 무선 송수신기(3300)로부터 출력된 신호를 처리(process)하고 처리(process)된 신호를 메모리 컨트롤러(2100) 또는 디스플레이(3200)로 전송할 수 있다. 메모리 컨트롤러(2100)는, 프로세서(3100)에 의하여 처리(process)된 신호를 메모리 장치(2200)에 전송할 수 있다. 또한, 무선 송수신기(3300)는, 프로세서(3100)로부터 출력된 신호를 무선 신호로 변경하고 변경된 무선 신호를 안테나(ANT)를 통하여 외부 장치로 출력할 수 있다. 입력 장치(input device; 3400)는, 프로세서(3100)의 동작을 제어하기 위한 제어 신호 또는 프로세서(3100)에 의하여 처리(process)될 데이터를 입력할 수 있는 장치로서, 터치 패드(touch pad)와 컴퓨터 마우스(computer mouse)와 같은 포인팅 장치(pointing device), 키패드(keypad) 또는 키보드로 구현될 수 있다. 프로세서(3100)는, 메모리 컨트롤러(2100)로부터 출력된 데이터, 무선 송수신기(3300)로부터 출력된 데이터, 또는 입력 장치(3400)로부터 출력된 데이터가 디스플레이(3200)를 통하여 출력될 수 있도록 디스플레이(3200)의 동작을 제어할 수 있다.
실시 예에 따라, 메모리 장치(2200)의 동작을 제어할 수 있는 메모리 컨트롤러(2100)는, 프로세서(3100)의 일부로서 구현될 수도 있고, 프로세서(3100)와는 별도의 칩으로 구현될 수 있다.
도 24는 도 20에 도시된 메모리 컨트롤러를 포함하는 메모리 시스템의 다른 예를 설명하기 위한 도면이다.
도 24를 참조하면, 메모리 시스템(memory system; 70000)은, 메모리 카드(memory card) 또는 스마트 카드(smart card)로 구현될 수 있다. 메모리 시스템(70000)은 메모리 장치(2200), 메모리 컨트롤러(2100) 및 카드 인터페이스(card interface; 7100)를 포함할 수 있다.
메모리 컨트롤러(2100)는, 메모리 장치(2200)와 카드 인터페이스(7100) 사이에서 데이터의 교환을 제어할 수 있다. 실시 예에 따라, 카드 인터페이스(7100)는, SD(secure digital) 카드 인터페이스 또는 MMC(multi-media card) 인터페이스일 수 있으나 이에 한정되는 것은 아니다.
카드 인터페이스(7100)는, 호스트(host; 60000)의 프로토콜에 따라 호스트(60000)와 메모리 컨트롤러(2100) 사이에서 데이터 교환을 인터페이스할 수 있다. 실시 예에 따라, 카드 인터페이스(7100)는, USB(universal serial bus) 프로토콜, IC(interchip)-USB 프로토콜을 지원할 수 있다. 여기서, 카드 인터페이스(7100)는, 호스트(60000)가 이용하는 프로토콜을 지원할 수 있는 하드웨어, 상기 하드웨어에 탑재된 소프트웨어 또는 신호 전송 방식을 의미할 수 있다.
메모리 시스템(70000)이 PC, 태블릿, 디지털 카메라, 디지털 오디오 플레이어, 이동 전화기, 콘솔 비디오 게임 하드웨어, 또는 디지털 셋-탑 박스와 같은 호스트(60000)의 호스트 인터페이스(6200)와 접속될 때, 호스트 인터페이스(6200)는 마이크로프로세서(microprocessor; 6100)의 제어에 따라 카드 인터페이스(7100)와 메모리 컨트롤러(2100)를 통하여 메모리 장치(2200)와 데이터 통신을 수행할 수 있다.
본 발명의 상세한 설명에서는 구체적인 실시 예에 관하여 설명하였으나, 본 발명의 범위와 기술적 사상에서 벗어나지 않는 한도 내에서 다양한 변경이 가능하다. 그러므로 본 발명의 범위는 상술한 실시 예에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 한다.
210: 심볼 구성부
220: 노드 프로세서
222: 변수 노드 업데이트 모듈
224: 체크 노드 업데이트 모듈
226: 에지 게인 프로세서
230: 신드롬 체크부

Claims (20)

  1. 비-이진 저밀도 패리티 체크(non-binary low density parity check; NB-LDPC) 코드를 이용하여 반복 복호(iterative decoding) 기법에 따른 오류 정정 디코딩을 수행하는 오류 정정 디코더로서,
    변수 노드의 경판정 값으로서 할당할 초기 심볼을 구성하고, 상기 구성된 초기 심볼을 상기 변수 노드에 할당하는 심볼 구성부;
    매 반복(iteration) 시작 시에 상기 초기 심볼을 기반으로 상기 변수 노드에 대응하는 후보 심볼들의 신뢰도 값들을 초기화하고, 상기 매 반복마다 상기 변수 노드에게 수신되는 C2V(check to variable) 메시지들을 기반으로 상기 후보 심볼들의 신뢰도 값들을 갱신하는 신뢰도 값 관리부;
    상기 매 반복마다, 상기 후보 심볼들 중 대상 후보 심볼의 갱신된 신뢰도 값과 관련된 제 1 함수 값으로부터 상기 후보 심볼들 중 상기 대상 후보 심볼을 제외한 나머지 후보 심볼들 중 적어도 하나의 후보 심볼들의 갱신된 신뢰도 값들과 관련된 제 2 함수 값을 뺀 값인, 반전 함수 값을 계산하는 반전 함수 값 계산부; 및
    상기 매 반복마다, 상기 반전 함수 값과 제 1 임계 값을 비교하고, 상기 비교 결과 상기 반전 함수 값이 상기 제 1 임계 값 이상인 경우 상기 변수 노드의 경판정 값을 상기 대상 후보 심볼로 수정하는 심볼 수정부
    를 포함하는 오류 정정 디코더.
  2. 제 1 항에 있어서, 상기 반전 함수 값 계산부는,
    상기 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼을 상기 대상 후보 심볼로 선택하는
    오류 정정 디코더.
  3. 제 2 항에 있어서,
    상기 제 1 함수 값은, 상기 갱신된 신뢰도 값들 중에서 가장 큰 값이거나, 상기 가장 큰 값에 스케일링 팩터 또는 스케일링 오프셋 중 적어도 하나를 적용한 값이고,
    상기 제 2 함수 값은, 상기 갱신된 신뢰도 값들 중에서 두 번째로 큰 값이거나, 상기 갱신된 신뢰도 값들 중 상기 가장 큰 값을 제외한 나머지 갱신된 신뢰도 값들 중에서 적어도 둘 이상을 더한 값인
    오류 정정 디코더.
  4. 제 2 항에 있어서,
    상기 제 1 함수 값은, 상기 갱신된 신뢰도 값들 중에서 가장 큰 값이거나, 상기 가장 큰 값에 스케일링 팩터 또는 스케일링 오프셋 중 적어도 하나를 적용한 값이고,
    상기 제 2 함수 값은, 상기 변수 노드의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값인
    오류 정정 디코더.
  5. 제 1 항에 있어서, 상기 반전 함수 값 계산부는,
    상기 갱신된 신뢰도 값들 중 상기 변수 노드의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값을 제외한 나머지 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼을 상기 대상 후보 심볼로 선택하는
    오류 정정 디코더.
  6. 제 5 항에 있어서, 상기 반전 함수 값 계산부는,
    상기 후보 심볼들 중 상기 변수 노드의 경판정 값과 동일한 후보 심볼을 제외한 나머지 후보 심볼들의 갱신된 신뢰도 값들을 서로 비교하여 상기 대상 후보 심볼을 선택하는
    오류 정정 디코더.
  7. 제 5 항에 있어서,
    상기 제 1 함수 값은, 상기 나머지 갱신된 신뢰도 값들 중에서 가장 큰 값이거나, 상기 가장 큰 값에 스케일링 팩터 또는 스케일링 오프셋 중 적어도 하나를 적용한 값이고,
    상기 제 2 함수 값은, 상기 변수 노드의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값인
    오류 정정 디코더.
  8. 제 7 항에 있어서, 상기 심볼 수정부는,
    상기 반전 함수 값이 양수가 아닌 경우, 상기 제 1 임계 값과의 비교를 스킵(skip)하는
    오류 정정 디코더.
  9. 제 1 항에 있어서, 상기 신뢰도 값 관리부는,
    상기 초기 심볼과의 해밍 거리(hamming distance)가 서로 다른 후보 심볼들의 신뢰도 값들을 서로 다르게 초기화하는
    오류 정정 디코더.
  10. 제 1 항에 있어서, 상기 신뢰도 값 관리부는,
    상기 반복의 회차를 고려하여 상기 후보 심볼들의 신뢰도 값들을 초기화하는
    오류 정정 디코더.
  11. 제 1 항에 있어서, 상기 신뢰도 값 관리부는,
    이전 반복에 대응하는 UCNs(unsatisfied check nodes)의 개수를 고려하여 상기 후보 심볼들의 신뢰도 값들을 초기화하는
    오류 정정 디코더.
  12. 제 1 항에 있어서,
    상기 변수 노드의 차수(degree), 상기 반복의 회차 또는 이전 반복에 대응하는 UCNs의 개수 중 적어도 하나를 고려하여 상기 제 1 임계 값을 설정하는 임계 값 관리부
    를 더 포함하는 오류 정정 디코더.
  13. 제 1 항에 있어서, 상기 심볼 수정부는,
    상기 반전 함수 값이 상기 제 1 임계 값보다 작은 제 2 임계 값 이상 상기 제 1 임계 값 미만인 경우 상기 변수 노드의 불신뢰도 값이 설정되어 있는지 확인하고,
    상기 확인 결과 상기 불신뢰도 값이 설정되어 있지 않은 경우 상기 불신뢰도 값을 설정하며,
    상기 확인 결과 상기 불신뢰도 값이 설정되어 있는 경우 상기 변수 노드의 경판정 값을 상기 대상 후보 심볼로 수정하는
    오류 정정 디코더.
  14. 제 13 항에 있어서, 상기 심볼 수정부는,
    상기 반전 함수 값이 상기 제 2 임계 값 이상 상기 제 1 임계 값 미만이고 상기 불신뢰도 값이 설정되어 있는 경우, 상기 변수 노드의 경판정 값을 상기 대상 후보 심볼로 수정하고 상기 불신뢰도 값을 유지하는
    오류 정정 디코더.
  15. 제 13 항에 있어서, 상기 심볼 수정부는,
    다음 반복에서 상기 반전 함수 값이 상기 제 1 임계 값 이상인 경우, 상기 변수 노드의 경판정 값을 상기 대상 후보 심볼로 수정하고 상기 불신뢰도 값을 초기화하는
    오류 정정 디코더.
  16. 제 13 항에 있어서, 상기 심볼 수정부는,
    다음 반복에서 상기 반전 함수 값이 음수이고 상기 반전 함수 값의 절대 값이 상기 제 1 임계 값 이상인 경우, 상기 변수 노드의 경판정 값을 수정하지 않고 상기 불신뢰도 값을 초기화하는
    오류 정정 디코더.
  17. 제 1 항에 있어서, 상기 심볼 수정부는,
    상기 반전 함수 값이 상기 제 1 임계 값보다 작은 제 2 임계 값 이상 상기 제 1 임계 값 미만인 경우 상기 변수 노드의 불신뢰도 값을 설정 값만큼 증가시키고,
    상기 증가된 불신뢰도 값이 제 3 임계 값 이상인 경우 상기 변수 노드의 경판정 값을 상기 대상 후보 심볼로 수정하는
    오류 정정 디코더.
  18. 제 1 항에 있어서, 상기 심볼 수정부는,
    상기 반전 함수 값이 상기 제 1 임계 값보다 작은 제 2 임계 값 이상 상기 제 1 임계 값 미만인 경우 상기 변수 노드의 불신뢰도 값을 제 1 설정 값만큼 증가시키고,
    상기 반전 함수 값이 상기 제 2 임계 값보다 작은 제 3 임계 값 이상 상기 제 2 임계 값 미만인 경우 상기 불신뢰도 값을 상기 제 1 설정 값보다 작은 제 2 설정 값만큼 증가시키며,
    상기 증가된 불신뢰도 값이 제 4 임계 값 이상인 경우 상기 변수 노드의 경판정 값을 상기 대상 후보 심볼로 수정하는
    오류 정정 디코더.
  19. 메모리 장치; 및
    상기 메모리 장치로부터 수신되는 판독 벡터를 기반으로 비-이진 저밀도 패리티 체크(non-binary low density parity check; NB-LDPC) 코드를 이용하여 반복 복호(iterative decoding) 기법에 따른 오류 정정 디코딩을 수행하는 오류 정정 디코더를 포함하는 메모리 컨트롤러를 포함하되,
    상기 오류 정정 디코더는,
    상기 판독 벡터에 포함된 판독 값들을 그룹핑(grouping)하여 변수 노드의 경판정 값으로서 할당할 초기 심볼을 구성하고, 상기 구성된 초기 심볼을 상기 변수 노드에 할당하는 심볼 구성부;
    매 반복(iteration) 시작 시에 상기 초기 심볼을 기반으로 상기 변수 노드에 대응하는 후보 심볼들의 신뢰도 값들을 초기화하고, 상기 매 반복마다 상기 변수 노드에게 수신되는 C2V(check to variable) 메시지들을 기반으로 상기 후보 심볼들의 신뢰도 값들을 갱신하는 신뢰도 값 관리부;
    상기 매 반복마다, 상기 후보 심볼들 중 대상 후보 심볼의 갱신된 신뢰도 값과 관련된 제 1 함수 값으로부터 상기 후보 심볼들 중 상기 대상 후보 심볼을 제외한 나머지 후보 심볼들 중 적어도 하나의 후보 심볼들의 갱신된 신뢰도 값들과 관련된 제 2 함수 값을 뺀 값인, 반전 함수 값을 계산하는 반전 함수 값 계산부; 및
    상기 매 반복마다, 상기 반전 함수 값과 제 1 임계 값을 비교하고, 상기 비교 결과 상기 반전 함수 값이 상기 제 1 임계 값 이상인 경우 상기 변수 노드의 경판정 값을 상기 대상 후보 심볼로 수정하는 심볼 수정부
    를 포함하는 메모리 시스템.
  20. 제 19 항에 있어서, 상기 반전 함수 값 계산부는,
    상기 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼을 상기 대상 후보 심볼로 선택하거나, 상기 갱신된 신뢰도 값들 중 상기 변수 노드의 경판정 값과 동일한 후보 심볼의 갱신된 신뢰도 값을 제외한 나머지 갱신된 신뢰도 값들 중에서 가장 큰 값에 대응하는 후보 심볼을 상기 대상 후보 심볼로 선택하는
    메모리 시스템.
KR1020190066227A 2019-06-04 2019-06-04 오류 정정 디코더 및 이를 포함하는 메모리 시스템 KR20200139571A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020190066227A KR20200139571A (ko) 2019-06-04 2019-06-04 오류 정정 디코더 및 이를 포함하는 메모리 시스템
US16/694,929 US11031952B2 (en) 2019-06-04 2019-11-25 Error correction decoder and memory system having the same
CN201911283888.3A CN112039532A (zh) 2019-06-04 2019-12-13 错误校正解码器及具有错误校正解码器的存储器系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190066227A KR20200139571A (ko) 2019-06-04 2019-06-04 오류 정정 디코더 및 이를 포함하는 메모리 시스템

Publications (1)

Publication Number Publication Date
KR20200139571A true KR20200139571A (ko) 2020-12-14

Family

ID=73576696

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190066227A KR20200139571A (ko) 2019-06-04 2019-06-04 오류 정정 디코더 및 이를 포함하는 메모리 시스템

Country Status (3)

Country Link
US (1) US11031952B2 (ko)
KR (1) KR20200139571A (ko)
CN (1) CN112039532A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230029168A (ko) * 2021-08-24 2023-03-03 한양대학교 산학협력단 비이진 저밀도 패리티 검사 코드 디코더, 그것의 동작방법 및 메모리 시스템

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210092391A (ko) * 2020-01-16 2021-07-26 삼성전자주식회사 반도체 메모리 장치의 에러 정정 회로 및 반도체 메모리 장치
US11636285B2 (en) 2020-09-09 2023-04-25 Micron Technology, Inc. Memory including examples of calculating hamming distances for neural network and data center applications
US11586380B2 (en) 2020-09-09 2023-02-21 Micron Technology, Inc. Memory systems including examples of calculating hamming distances for neural network and data center applications
US11609853B2 (en) * 2020-09-09 2023-03-21 Micron Technology, Inc. Memory controllers including examples of calculating hamming distances for neural network and data center applications
US11381253B1 (en) 2021-02-05 2022-07-05 SK Hynix Inc. Decoding codeword based on higher order information

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160087653A1 (en) * 2014-07-28 2016-03-24 Lsi Corporation Decoder With Targeted Symbol Flipping Recovery Of Miscorrected Codewords
EP3419179B1 (en) * 2017-06-19 2022-11-02 Universite De Bretagne Sud Hybrid architectures for check node processing of extended min-sum (ems) decoding of non-binary ldpc codes
WO2019068053A1 (en) * 2017-09-29 2019-04-04 Cohere Technologies, Inc. ERROR CORRECTION WITHOUT RETURN CIRCUIT USING LOW DENSITY NON-BINARY PARITY CHECK CODES
TWI646783B (zh) * 2018-04-10 2019-01-01 大陸商深圳大心電子科技有限公司 解碼方法及儲存控制器
KR20200019046A (ko) 2018-08-13 2020-02-21 에스케이하이닉스 주식회사 에러 정정 회로 및 이의 동작 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230029168A (ko) * 2021-08-24 2023-03-03 한양대학교 산학협력단 비이진 저밀도 패리티 검사 코드 디코더, 그것의 동작방법 및 메모리 시스템

Also Published As

Publication number Publication date
CN112039532A (zh) 2020-12-04
US20200389186A1 (en) 2020-12-10
US11031952B2 (en) 2021-06-08

Similar Documents

Publication Publication Date Title
US20210158169A1 (en) Electronic device and method of operating the same
US11050438B2 (en) Memory controller
US11031952B2 (en) Error correction decoder and memory system having the same
US10804939B2 (en) Memory controller and operating method thereof
US11128315B2 (en) Error correction decoder
US10911068B2 (en) Error correction circuit and method of operating the same
US11115064B2 (en) Error correction decoder and memory system having the same
US11239865B2 (en) Error correction circuit and operating method thereof
US10931308B2 (en) Error correction circuit and method of operating the same
US10826531B2 (en) Error correction circuit and operating method thereof
US11055164B2 (en) Error correction decoder and memory controller having the same
KR20210125294A (ko) 에러 정정 회로 및 이의 동작 방법
CN110795268B (zh) 比特判断方法、存储器控制电路单元以及存储器存储装置

Legal Events

Date Code Title Description
E902 Notification of reason for refusal