KR20200019046A - 에러 정정 회로 및 이의 동작 방법 - Google Patents

에러 정정 회로 및 이의 동작 방법 Download PDF

Info

Publication number
KR20200019046A
KR20200019046A KR1020180094633A KR20180094633A KR20200019046A KR 20200019046 A KR20200019046 A KR 20200019046A KR 1020180094633 A KR1020180094633 A KR 1020180094633A KR 20180094633 A KR20180094633 A KR 20180094633A KR 20200019046 A KR20200019046 A KR 20200019046A
Authority
KR
South Korea
Prior art keywords
value
error correction
threshold value
variable node
symbol
Prior art date
Application number
KR1020180094633A
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 KR1020180094633A priority Critical patent/KR20200019046A/ko
Priority to US16/395,640 priority patent/US10826531B2/en
Priority to CN201910515450.7A priority patent/CN110830046B/zh
Publication of KR20200019046A publication Critical patent/KR20200019046A/ko

Links

Images

Classifications

    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • 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
    • 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
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • 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
    • 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
    • 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/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3723Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using means or methods for the initialisation of the decoder

Landscapes

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

Abstract

본 기술은, 에러 정정 회로가 비이진 저밀도 패리티 체크(Non-Binary Low Density Parity Check; NB-LDPC) 코드를 이용하여 반복 복호(iterative decoding) 기법에 따른 에러 정정 디코딩을 수행하는 방법으로서, 변수 노드에 변수 노드 값으로서 초기 심볼을 할당하는 단계; 매 반복(iteration) 시작 시에, 상기 변수 노드에 할당된 초기 심볼을 기반으로, 상기 변수 노드 값으로서 선택될 수 있는 후보 심볼들의 제 1 신뢰도 값을 초기화하는 단계; 상기 변수 노드에 연결된 체크 노드들로부터 수신되는 C2V(check to variable) 메시지들을 기반으로, 상기 후보 심볼들의 제 1 신뢰도 값을 갱신하는 단계; 및 상기 갱신된 제 1 신뢰도 값이 제 1 임계 값 이상인 후보 심볼이 존재하는 경우, 상기 변수 노드 값을 상기 갱신된 제 1 신뢰도 값이 상기 제 1 임계 값 이상인 후보 심볼로 수정하는 단계를 포함한다.

Description

에러 정정 회로 및 이의 동작 방법{Error correction circuit and operating method thereof}
본 발명은, 에러 정정 회로 및 이의 동작 방법에 관한 것으로, 보다 구체적으로는 비이진 LDPC(Non-Binary Low Density Parity Check; NB-LDPC) 코드를 이용하는 에러 정정 회로 및 이의 동작 방법에 관한 것이다.
메모리 시스템은, 외부 장치로부터 제공된 데이터를 저장하고, 저장된 데이터를 외부 장치로 제공할 수 있다. 메모리 시스템은, 데이터의 신뢰성을 보장하기 위하여 에러 정정 회로를 포함할 수 있다. 에러 정정 회로는, 에러 정정 코드 이용하여 에러 정정 인코딩 및 에러 정정 디코딩을 수행할 수 있다.
저밀도 패리티 체크(Low Density Parity Check; LDPC) 코드는, 강력한 에러 정정 코드이다. 이는, 코드의 길이를 길게 함에 따라 비트당 에러 정정 능력은 향상되는 반면, 비트당 계산 복잡도는 그대로 유지되는 LDPC 반복 복호(iterative decoding) 기법의 특성에 기인한다.
본 발명의 실시 예들은, 비이진 LDPC 코드를 이용하여 에러 정정 디코딩을 수행하는 에러 정정 회로 및 이의 동작 방법을 제공한다.
본 발명의 일 실시 예에 따른 에러 정정 회로가 비이진 저밀도 패리티 체크(Non-Binary Low Density Parity Check; NB-LDPC) 코드를 이용하여 반복 복호(iterative decoding) 기법에 따른 에러 정정 디코딩을 수행하는 방법은, 변수 노드에 변수 노드 값으로서 초기 심볼을 할당하는 단계; 매 반복(iteration) 시작 시에, 상기 변수 노드에 할당된 초기 심볼을 기반으로, 상기 변수 노드 값으로서 선택될 수 있는 후보 심볼들의 제 1 신뢰도 값을 초기화하는 단계; 상기 변수 노드에 연결된 체크 노드들로부터 수신되는 C2V(check to variable) 메시지들을 기반으로, 상기 후보 심볼들의 제 1 신뢰도 값을 갱신하는 단계; 및 상기 갱신된 제 1 신뢰도 값이 제 1 임계 값 이상인 후보 심볼이 존재하는 경우, 상기 변수 노드 값을 상기 갱신된 제 1 신뢰도 값이 상기 제 1 임계 값 이상인 후보 심볼로 수정하는 단계를 포함한다.
본 발명의 일 실시 예에 따른 비이진 저밀도 패리티 체크(Non-Binary Low Density Parity Check; NB-LDPC) 코드를 이용하여 반복 복호(iterative decoding) 기법에 따른 에러 정정 디코딩을 수행하는 에러 정정 회로는, 변수 노드에 변수 노드 값으로서 할당할 초기 심볼을 구성하는 심볼 구성부; 매 반복(iteration) 시작 시에, 상기 변수 노드에 할당된 초기 심볼을 기반으로, 상기 변수 노드 값으로서 선택될 수 있는 후보 심볼들의 제 1 신뢰도 값을 초기화하는 신뢰도 값 초기화부; 및 상기 변수 노드에 연결된 체크 노드들로부터 수신되는 C2V(check to variable) 메시지들을 기반으로 상기 후보 심볼들의 제 1 신뢰도 값을 갱신하고, 상기 갱신된 제 1 신뢰도 값이 제 1 임계 값 이상인 후보 심볼이 존재하는 경우 상기 변수 노드 값을 상기 갱신된 제 1 신뢰도 값이 상기 제 1 임계 값 이상인 후보 심볼로 수정하는 심볼 수정부를 포함한다.
본 기술에 따르면, 비이진 LDPC 코드를 이용하는 에러 정정 회로의 성능을 향상시킬 수 있다.
도 1은 본 발명의 일 실시 예에 따른 에러 정정 회로를 설명하기 위한 도면이다.
도 2는 패리티 체크 행렬을 설명하기 위한 예시도이다.
도 3은 도 2에 도시된 패리티 체크 행렬을 태너 그래프로 나타낸 도면이다.
도 4는 도 2에 도시된 패리티 체크 행렬을 이용하여 계산되는 신드롬 벡터를 설명하기 위한 예시도이다.
도 5는 본 발명의 일 실시 예에 따른 심볼 구성 과정을 설명하기 위한 예시도이다.
도 6은 본 발명의 일 실시 예에 따른 임계 값들을 설명하기 위한 예시도이다.
도 7은 본 발명의 일 실시 예에 따른 제 1 신뢰도 값을 초기화하는 과정을 설명하기 위한 예시도이다.
도 8은 본 발명의 일 실시 예에 따른 제 1 신뢰도 값에 따라 심볼을 수정하는 과정을 설명하기 위한 예시도이다.
도 9는 본 발명의 일 실시 예에 따른 제 2 신뢰도 값을 설명하기 위한 예시도이다.
도 10은 본 발명의 일 실시 예에 따라 제 2 신뢰도 값을 설정하는 과정을 설명하기 위한 예시도이다.
도 11은 본 발명의 일 실시 예에 따른 제 2 신뢰도 값에 따라 심볼을 수정하는 과정을 설명하기 위한 예시도이다.
도 12는 본 발명의 다른 실시 예에 따라 제 2 신뢰도 값을 설정하는 과정을 설명하기 위한 예시도이다.
도 13은 본 발명의 다른 실시 예에 따른 제 2 신뢰도 값에 따라 심볼을 수정하는 과정을 설명하기 위한 예시도이다.
도 14는 본 발명의 일 실시 예에 따른 에러 정정 회로의 동작 방법을 설명하기 위한 흐름도이다.
도 15는 본 발명의 다른 실시 예에 따른 에러 정정 회로의 동작 방법을 설명하기 위한 흐름도이다.
도 16은 본 발명의 실시 예들이 적용되는 메모리 시스템을 설명하기 위한 도면이다.
도 17은 본 발명의 일 실시 예에 따른 메모리 장치를 설명하기 위한 도면이다.
도 18은 메모리 블록을 설명하기 위한 예시도이다.
도 19 및 도 20은 도 16에 도시된 메모리 컨트롤러를 포함하는 메모리 시스템의 다른 예를 설명하기 위한 도면이다.
본 발명의 이점 및 특징, 그리고 그것을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시 예들을 통해 설명될 것이다. 그러나 본 발명은 여기에서 설명되는 실시 예들에 한정되지 않고 다른 형태로 구체화될 수도 있다. 단지, 본 실시 예들은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 본 발명의 기술적 사상을 용이하게 실시할 수 있을 정도로 상세히 설명하기 위하여 제공되는 것이다.
명세서 전체에서, 어떤 부분이 다른 부분과 "연결"되어 있다고 할 때, 이는 "직접적으로 연결"되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 "간접적으로 연결"되어 있는 경우도 포함한다. 명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
이하, 첨부되는 도면을 참조하여 본 발명의 실시 예들을 설명한다.
도 1은 본 발명의 일 실시 예에 따른 에러 정정 회로를 설명하기 위한 도면이다.
도 1을 참조하면, 본 발명의 일 실시 예에 따른 에러 정정 회로(error correction circuit; 10)는, 에러 정정 디코더(error correction decoder)(100) 및 포스트 프로세서(post processor; 200)를 포함할 수 있다.
에러 정정 디코더(100)는, 코드워드(codeword)에 대한 에러 정정 디코딩을 수행할 수 있다. 에러 정정 디코더(100)는, 반복 복호 기법(iterative decoding scheme)을 채택하는 다양한 알고리즘을 이용하여 코드워드에 대한 에러 정정 디코딩을 수행할 수 있다. 예를 들어, 에러 정정 디코더(100)는, 신뢰 전파 알고리즘(Belief Propagation Algorithm; BPA)으로도 일컬어지는 메시지 전달 알고리즘(Message Passing Algorithm; MPA)을 이용하여 에러 정정 디코딩을 수행할 수 있다.
에러 정정 디코더(100)는, 설정된 최대 반복 횟수(maximum iteration number) 내에서 반복 복호 기법에 따라 에러 정정 디코딩을 수행할 수 있다. 에러 정정 디코더(100)는, 최대 반복 횟수 내에서 에러 정정 코드(Error Correction Code; ECC)의 패리티 체크 행렬(parity check matrix)을 만족하는 유효한 코드워드가 생성되는 경우, 해당 유효한 코드워드를 디코딩된 코드워드(decoded codeword)로서 출력할 수 있다. 에러 정정 디코더(100)는, 최대 반복 횟수 내에서 에러 정정 코드의 패리티 체크 행렬을 만족하는 유효한 코드워드가 생성되지 않는 경우, 에러 정정 디코딩이 실패하였음을 나타내는 페일(Fail) 신호를 출력할 수 있다.
에러 정정 디코더(100)는, 에러 정정 코드로서 LDPC(Low Density Parity Check) 코드를 이용하는 LDPC 디코더일 수 있다. 에러 정정 디코더(100)는, 채널로부터 수신된 코드워드에 포함된 비트들을 그룹핑(grouping)하여 심볼들을 구성하고, 심볼 단위로 에러 정정 디코딩을 수행하는 비이진(non-binary) LDPC 디코더일 수 있다.
에러 정정 디코더(100)는, 심볼 구성부(110), 노드 연산부(120) 및 신드롬 체크부(130)를 포함할 수 있다.
심볼 구성부(110)는, 채널로부터 판독 값들을 수신할 수 있다. 예를 들어, 심볼 구성부(110)는, 에러 정정 인코딩된 하나의 코드워드에 대응하는 판독 값들을, 통신 채널을 통하여 메모리 장치로부터 수신할 수 있다. 경판정 디코딩이 이용되는 경우, 하나의 판독 값들의 세트는 하나의 코드워드에 대응할 수 있다. 하나의 판독 값들의 세트는, 하나의 판독 벡터로 언급될 수 있다. 연판정 디코딩이 이용되는 경우, 복수의 판독 값들의 세트가 하나의 코드워드에 대응할 수 있다. 즉, 연판정 디코딩이 이용되는 경우, 복수의 판독 벡터들이 하나의 코드워드에 대응할 수 있다.
심볼 구성부(110)는, 판독 벡터에 포함된 비트들을 그룹핑하여 초기 심볼들을 구성하고, 구성된 초기 심볼들을 노드 연산부(120)에 제공할 수 있다. 예를 들어, 판독 벡터가 14개의 비트로 이루어진 경우, 심볼 구성부(110)는, 2개의 비트 단위로 비트들을 그룹핑하여 7개의 초기 심볼을 구성할 수 있다.
노드 연산부(120)는, 심볼 구성부(110)로부터 수신된 초기 심볼들을 기반으로 에러 정정 디코딩을 수행할 수 있다. 노드 연산부(120)는, 반복 복호 기법을 채택하는 다양한 알고리즘을 이용하여 에러 정정 디코딩을 수행할 수 있다. 예를 들어, 노드 연산부(120)는, 메시지 전달 알고리즘을 이용하여 에러 정정 디코딩을 수행할 수 있다. 메시지 전달 알고리즘으로서, 합-곱(sum-product) 알고리즘 또는 최소-합(min-sum) 알고리즘 등이 이용될 수 있으며, 그 외에도 다양한 알고리즘이 이용될 수 있다.
노드 연산부(120)는, 최대 반복 횟수(maximum iteration number; I) 내에서 반복을 수행할 수 있으며, i번째 반복의 수행 결과로서 나타나는 변수 노드들의 값을 신드롬 체크부(130)에 제공할 수 있다. 여기서, I는 자연수이고, i는 I 이하의 자연수이다. 신드롬 체크부(130)에 제공되는 변수 노드들의 값은, 이하에서 설명하는 제 1 신뢰도 값 및 제 2 신뢰도 값 중 적어도 하나를 기반으로 수정된 값일 수 있다. 자세한 내용은, 관련되는 부분에서 설명한다.
메시지 전달 알고리즘은, 변수 노드(variable node)들과 체크 노드(check node)들 간에 이루어지는 메시지들(messages)의 교환을 통하여 원하는 결과에 수렴하는 출력을 생성할 수 있다. 메시지들은, 변수 노드에서 체크 노드로 전송되는 변수-투-체크(Variable to Check; V2C) 메시지들 및 체크 노드에서 변수 노드로 전송되는 체크-투-변수(Check to Variable; C2V) 메시지들을 포함할 수 있다.
변수 노드 업데이트 모듈(122)은, 첫 번째 반복이 수행되기 이전에, 심볼 구성부(110)로부터 수신된 초기 심볼들을 이용하여 변수 노드들을 초기화할 수 있다. 즉, 변수 노드 업데이트 모듈(122)은, 초기 심볼들을 변수 노드 값으로서 변수 노드들에 하나씩 할당할 수 있다.
변수 노드 업데이트 모듈(122)은, 첫 번째 반복에서, 변수 노드들 각각의 변수 노드 값(첫 번째 반복인 경우 초기 심볼 값)이 해당 변수 노드에 연결된 체크 노드로 전달될 수 있도록 V2C 메시지들을 생성하여 체크 노드 업데이트 모듈(126)로 전송할 수 있다. 변수 노드 업데이트 모듈(122)은, 각각의 반복에서 체크 노드 업데이트 모듈(126)로부터 수신되는 C2V 메시지들에 따라 변수 노드들의 값을 업데이트할 수 있다. 변수 노드 업데이트 모듈(122)은, 첫 번째 반복을 제외한 각각의 반복에서, 체크 노드 업데이트 모듈(126)로부터 수신된 C2V 메시지들을 기반으로 V2C 메시지들을 생성하고, 생성된 V2C 메시지들을 체크 노드 업데이트 모듈(126)로 전송할 수 있다.
체크 노드 업데이트 모듈(126)은, 각각의 반복에서, 변수 노드 업데이트 모듈(122)로부터 수신되는 V2C 메시지들에 따라 체크 노드들의 값을 업데이트할 수 있다. 체크 노드 업데이트 모듈(126)은, 각각의 반복에서, 변수 노드 업데이트 모듈(122)로부터 수신된 V2C 메시지들을 기반으로 C2V 메시지들을 생성하고, 생성된 C2V 메시지들을 변수 노드 업데이트 모듈(122)로 전송할 수 있다.
변수 노드 업데이트 모듈(122)과 체크 노드 업데이트 모듈(126) 간에 교환되는 메시지들에 대하여 에지 게인 연산(edge gain processing) 또는 역 에지 게인 연산(inverse edge gain processing)이 수행될 수 있다. 예를 들어, 에지 게인 연산부(124)는, 변수 노드 업데이트 모듈(122)에서 생성된 V2C 메시지들에 대하여 에지 게인 연산(edge gain processing)을 수행하고, 에지 게인 연산이 수행된 V2C 메시지들을 체크 노드 업데이트 모듈(126)로 전송할 수 있다. 예를 들어, 에지 게인 연산부(124)는, 체크 노드 업데이트 모듈(126)에서 생성된 C2V 메시지들에 대하여 역 에지 게인 연산(inverse edge gain processing)을 수행하고, 역 에지 게인 연산이 수행된 C2V 메시지들을 변수 노드 업데이트 모듈(122)로 전송할 수 있다. 에지 게인(edge gain)은, 패리티 체크 행렬로부터 획득될 수 있으며, 에지 계수(edge coefficient) 또는 에지 가중치(edge weight)로 언급될 수도 있다.
변수 노드 업데이트 모듈(122)은, 신뢰도 값 초기화부(122a), 심볼 수정부(122b) 및 임계 값 설정부(122c)를 포함할 수 있다.
신뢰도 값 초기화부(122a)는, 복수의 변수 노드들 각각에 할당된 초기 심볼을 기반으로, 매 반복 시작 시에, 각각의 변수 노드의 값으로서 선택될 수 있는 후보 심볼들의 신뢰도 값인 제 1 신뢰도 값을 초기화할 수 있다. 신뢰도 값 초기화부(122a)는, 최초의 반복 시작 시에 또는 신드롬 체크부(130)로부터 i번째 반복에서 에러 정정 디코딩이 실패하였음을 통지받는 경우마다, 후보 심볼들의 제 1 신뢰도 값을 초기화할 수 있다. 여기서, 후보 심볼이란, 갈로아체(Galois Field) GF(q)에 존재하는 모든 심볼들을 의미할 수 있다.
신뢰도 값 초기화부(122a)는, 최초의 반복 시작 시에, 각각의 변수 노드에 대응하는 신뢰도 값인 제 2 신뢰도 값을 초기화할 수 있다. 제 2 신뢰도 값은, 대응하는 변수 노드의 현재 변수 노드 값에 대한 불신뢰도를 나타낼 수 있다. 신뢰도 값 초기화부(122a)는, 제 2 신뢰도 값에 기반하여 대응하는 변수 노드의 값이 수정된 경우에 제 2 신뢰도 값을 초기화할 수 있다.
신뢰도 값 초기화부는(122a)는, 복수의 변수 노드들 각각에 대응하는 후보 심볼들의 제 1 신뢰도 값을 서로 다르게 초기화할 수 있다.
일 실시 예에서, 신뢰도 값 초기화부(122a)는, 복수의 변수 노드들 각각에 할당된 초기 심볼과 후보 심볼들 간의 해밍 거리(hamming distance)에 따라, 후보 심볼들 각각의 제 1 신뢰도 값을 서로 다르게 초기화할 수 있다. 일 실시 예에서, 신뢰도 값 초기화부(122a)는, 초기 심볼과의 해밍 거리가 가까운 후보 심볼일수록 제 1 신뢰도 값을 더 높게 초기화하고, 초기 심볼과의 해밍 거리가 먼 후보 심볼일수록 제 1 신뢰도 값을 더 낮게 초기화할 수 있다. 예를 들어, GF(4)가 이용되고, 임의의 변수 노드에 할당된 초기 심볼이 '01'이라 가정하자. 이러한 경우, 해당 임의의 변수 노드에 대응하는 후보 심볼들은 '00', '01', '10' 및 '11'의 4가지가 있을 수 있다. 이하에서, 심볼 '00', '01', '10' 및 '11'은 GF(4)의 이진 표현을 나타낸다. 여기서, 후보 심볼 '01'은 초기 심볼 '01'과의 해밍 거리가 0이고, 후보 심볼들 '00' 및 '11'은 초기 심볼 '01'과의 해밍 거리가 1이며, 후보 심볼 '10'은 초기 심볼 '01'과의 해밍 거리가 2이다. 이러한 경우, 초기 심볼 '01'과의 해밍 거리가 0인 후보 심볼 '01'의 제 1 신뢰도 값은 3으로 초기화될 수 있고, 초기 심볼 '01'과의 해밍 거리가 1인 후보 심볼들 '00' 및 '11'의 제 1 신뢰도 값은 1로 초기화될 수 있으며, 초기 심볼 '01'과의 해밍 거리가 2인 후보 심볼 '10'의 제 1 신뢰도 값은 0으로 초기화될 수 있다.
일 실시 예에서, 신뢰도 값 초기화부(122a)는, 반복의 회차에 따라, 후보 심볼들 각각의 제 1 신뢰도 값을 다르게 초기화할 수 있다. 일 실시 예에서, 신뢰도 값 초기화부(122a)는, 반복의 회차가 증가할수록 제 1 신뢰도 값을 더 높게 초기화할 수 있다. 일 실시 예에서, 신뢰도 값 초기화부(122a)는, 반복의 회차가 증가할수록 그리고 초기 심볼과의 해밍 거리가 가까운 후보 심볼일수록, 이전 회차보다 제 1 신뢰도 값을 더 높게 초기화할 수 있다. 예를 들어, GF(4)가 이용되고, 임의의 변수 노드에 할당된 초기 심볼이 '01'이며, i번째 반복에서 후보 심볼 '01'의 제 1 신뢰도 값은 3으로 초기화되었고, 후보 심볼들 '00' 및 '11'의 제 1 신뢰도 값은 1로 초기화되었고, 후보 심볼 '10'의 제 1 신뢰도 값은 0으로 초기화되었다고 가정하자. 이러한 경우, 신뢰도 값 초기화부(122a)는 i+1번째 반복에서, 초기 심볼 '01'과의 해밍 거리가 가장 가까운 후보 심볼 '01'의 제 1 신뢰도 값을 4로 초기화할 수 있다. 이 때, 나머지 후보 심볼들 '00', '11' 및 '10'의 제 1 신뢰도 값은 이전 회차와 동일하게 초기화될 수 있다. 또는, 신뢰도 값 초기화부(122a)는 i+1번째 반복에서, 초기 심볼 '01'과의 해밍 거리가 가장 가까운 후보 심볼 '01'의 제 1 신뢰도 값을 5로 초기화하고, 초기 심볼 '01'과의 해밍 거리가 그 다음으로 가까운 후보 심볼들 '00' 및 '11'의 제 1 신뢰도 값을 4로 초기화할 수 있다. 이 때, 나머지 후보 심볼 '10'의 제 1 신뢰도 값은 이전 회차와 동일하게 초기화될 수 있다. 실시 예에 따라, 신뢰도 값 초기화부(122a)는, 반복의 회차가 증가할수록 그리고 초기 심볼과의 해밍 거리가 가까운 후보 심볼일수록, 이전 회차보다 제 1 신뢰도 값을 더 낮게 초기화할 수도 있다.
일 실시 예에서, 신뢰도 값 초기화부(122a)는, UCN(Unsatisfied Check Node)의 개수에 따라, 후보 심볼들의 제 1 신뢰도 값을 초기화할 수 있다. 일 실시 예에서, 신뢰도 값 초기화부(122a)는, i번째 반복에서의 UCN의 개수가 많을수록 i+1번째 반복에서 제 1 신뢰도 값을 더 높게 초기화할 수 있다. 일 실시 예에서, 신뢰도 값 초기화부(122a)는, i번째 반복에서의 UCN의 개수가 많을수록 그리고 초기 심볼과의 해밍 거리가 가까운 후보 심볼일수록, i+1번째 반복에서 제 1 신뢰도 값을 더 높게 초기화할 수 있다. 예를 들어, GF(4)가 이용되고, 임의의 변수 노드에 할당된 초기 심볼이 '01'이며, i번째 반복에서 후보 심볼 '01'의 제 1 신뢰도 값은 3으로 초기화되었고, 후보 심볼들 '00' 및 '11'의 제 1 신뢰도 값은 1로 초기화되었고, 후보 심볼 '10'의 제 1 신뢰도 값은 0으로 초기화되었다고 가정하자. 이러한 가정 하에서, 만약, i번째 반복의 UCN의 개수가 3개였다면, 신뢰도 값 초기화부(122a)는, i+1번째 반복에서 모든 후보 심볼들의 제 1 신뢰도 값을 i번째 반복에서와 동일하게 초기화할 수 있다. 만약, i번째 반복에서의 UCN의 개수가 5개였다면, 신뢰도 값 초기화부(122a)는, i+1번째 반복에서 후보 심볼 '01'과 해밍 거리가 가장 가까운 후보 심볼 '01'의 제 1 신뢰도 값을 4로 초기화할 수 있다. 이 때, 나머지 후보 심볼들 '00', '11' 및 '10'의 제 1 신뢰도 값은 이전 회차와 동일하게 초기화될 수 있다. 실시 예에 따라, 신뢰도 값 초기화부(122a)는, i번째 반복에서의 UCN의 개수가 많을수록 그리고 초기 심볼과의 해밍 거리가 가까운 후보 심볼일수록, i+1번째 반복에서 제 1 신뢰도 값을 더 낮게 초기화할 수도 있다.
심볼 수정부(122b)는, 매 반복마다, 변수 노드들 각각에 대응하여 입력되는 C2V 메시지들을 기반으로, 변수 노드들 각각에 대응하는 후보 심볼들의 제 1 신뢰도 값을 갱신할 수 있다. 일 실시 예에서, 심볼 수정부(122b)는, 임의의 후보 심볼을 나타내는 C2V 메시지가 수신된 개수만큼 해당 임의의 후보 심볼에 대한 제 1 신뢰도 값을 증가시킬 수 있다. 예를 들어, 심볼 수정부(122b)는, 후보 심볼 '10'를 나타내는 C2V 메시지가 1개 수신되는 경우 후보 심볼 '10'에 대한 제 1 신뢰도 값을 1만큼 증가시키고, 후보 심볼 '10'를 나타내는 C2V 메시지가 2개 수신되는 경우 후보 심볼 '10'에 대한 제 1 신뢰도 값을 2만큼 증가시킬 수 있다.
심볼 수정부(122b)는, 갱신된 제 1 신뢰도 값을 기반으로 적어도 하나의 변수 노드의 값을 수정할 수 있다. 심볼 수정부(122b)는, 변수 노드들 각각에 대하여, 후보 심볼들 중 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인하고, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우 변수 노드의 값을 수정할 수 있다. 예를 들어, 심볼 수정부(122b)는, 후보 심볼 들 중 어느 하나가 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 경우, 해당 후보 심볼에 대응하는 변수 노드의 값을 상기 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼로 수정할 수 있다.
한편, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후볼 심볼이 존재하지 않는 변수 노드들의 신뢰성을 보장하기 위하여, 추가적인 신뢰도 값인 제 2 신뢰도 값이 더 이용될 수 있다. 제 2 신뢰도 값은, 현재 변수 노드 값에 대한 신뢰도 또는 불신뢰도를 나타낼 수 있다. 제 2 신뢰도 값을 나타내기 위하여 하나의 비트 또는 둘 이상의 비트가 할당될 수 있으며, 이하에서 두 가지 경우를 나누어 살펴본다.
먼저, 제 2 신뢰도 값을 나타내기 위하여, 하나의 비트가 할당된 경우를 살펴본다.
심볼 수정부(122b)는, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하지 않는 변수 노드들 각각에 대하여, 후보 심볼들 중 제 1 임계 값보다 작은 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인할 수 있다. 심볼 수정부(122b)는, 제 1 임계 값 미만 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 변수 노드가 있는 경우, 해당 변수 노드에 제 2 신뢰도 값이 설정되어 있는지 여부를 확인할 수 있다. 예를 들어, 심볼 수정부(122b)는, 제 2 신뢰도 값을 나타내기 위하여 할당된 비트가 1로 설정되어 있는지 여부를 확인할 수 있다.
심볼 수정부(122b)는, 제 1 임계 값 미만 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 변수 노드에 제 2 신뢰도 값이 설정되어 있지 않은 경우, 해당 변수 노드에 제 2 신뢰도 값을 설정할 수 있다. 즉, 심볼 수정부(122b)는, 변수 노드의 후보 심볼들 중 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼은 존재하지 않으나, 제 1 임계 값보다 작은 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우에, 해당 변수 노드에 제 2 신뢰도 값을 설정할 수 있다. 예를 들어, 심볼 수정부(122b)는, 해당 변수 노드의 제 2 신뢰도 값을 1로 설정할 수 있다. 임의의 변수 노드에 대응하는 제 2 신뢰도 값은, 제 2 신뢰도 값에 기초하여 해당 임의의 변수 노드의 값이 수정되기 전까지 초기화되지 않을 수 있다.
심볼 수정부(122b)는, 제 1 임계 값 미만 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 변수 노드에 제 2 신뢰도 값이 설정되어 있는 경우, 해당 변수 노드의 값을 수정할 수 있다. 예를 들어, 심볼 수정부(122b)는, 제 2 신뢰도 값이 설정되어 있는 변수 노드의 값을, 제 1 임계 값 미만 제 2 임계 이상의 제 1 신뢰도 값을 갖는 후보 심볼로 수정할 수 있다. 심볼 수정부(122b)는, 제 2 신뢰도 값이 설정되어 있는 변수 노드의 값을 수정한 경우, 이를 신뢰도 값 초기화부(122a)에 통지할 수 있다. 그에 따라, 신뢰도 값 초기화부(122a)는, 해당 변수 노드의 제 2 신뢰도 값을 초기화할 수 있다.
다음, 제 2 신뢰도 값을 나타내기 위하여, 둘 이상의 비트가 할당된 경우를 살펴본다.
제 2 신뢰도 값을 나타내기 위하여 둘 이상의 비트가 할당된 경우 n(n은 4이상의 자연수)개의 임계 값이 이용될 수 있다. 심볼 수정부(122b)는, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하지 않는 변수 노드들 각각에 대하여, 제 1 임계 값보다 작은 제 2 내지 제 n-1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인할 수 있다. 이러한 확인은, 높은 임계 값들부터 순차적으로, 즉 제 2 임계 값부터 제 n-1 임계 값까지 순차적으로 이루어질 수 있다. 이 때, 제 2 내지 제 n-1 임계 값들 중 어느 하나의 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 것으로 확인되는 경우, 나머지 임계 값들에 대한 확인은 이루어지지 않을 수 있다. 예를 들어, 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 변수 노드에 대하여는, 제 3 임계 값 내지 제 n-1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지에 대한 확인이 이루어지지 않을 수 있다.
심볼 수정부(122b)는, 제 2 내지 제 n-1 임계 값들 중 어느 하나의 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 것으로 확인되는 경우, 해당 변수 노드의 제 2 신뢰도 값을 해당 임계 값에 대응하는 설정 값만큼 증가시킬 수 있다. 여기서, 설정 값은, 대응하는 임계 값이 클수록 큰 값을 가질 수 있다. 예를 들어, 심볼 수정부(122b)는, 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우 해당 변수 노드의 제 2 신뢰도 값을 제 1 설정 값만큼 증가시키고, 제 3 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우 해당 변수 노드의 제 2 신뢰도 값을 제 1 설정 값보다 작은 제 2 설정 값만큼 증가시킬 수 있다.
심볼 수정부(122b)는, 갱신된 제 2 신뢰도 값이 제 n 임계 값 이상인지 여부를 확인할 수 있다. 갱신된 제 2 신뢰도 값이 제 n 임계 값 미만인 경우, 제 2 신뢰도 값은 이후의 반복들에서 누적 계산될 수 있다. 갱신된 제 2 신뢰도 값이 제 n 임계 값 이상인 경우, 심볼 수정부(122b)는, 해당 변수 노드의 값을 수정할 수 있다. 예를 들어, 심볼 수정부(122b)는, 해당 변수 노드의 값을 현재 반복에서 제 2 신뢰도 값을 갱신시킨 후보 심볼로 수정할 수 있다.
심볼 수정부(122b)는, 제 2 신뢰도 값에 기반하여 변수 노드의 값을 수정한 경우, 이를 신뢰도 값 초기화부(122a)에 통지할 수 있다. 그에 따라, 신뢰도 값 초기화부(122a)는, 해당 변수 노드의 제 2 신뢰도 값을 초기화할 수 있다.
심볼 수정부(122b)는, 매 반복마다 변수 노드들의 값을 신드롬 체크부(130)에 제공할 수 있다. 신드롬 체크부(130)에 제공되는 변수 노드들의 값 중 적어도 하나는, 제 1 신뢰도 값 및 제 2 신뢰도 값에 기반하여 수정된 값일 수 있다.
임계 값 설정부(122c)는, 변수 노드 값을 수정할지 여부를 판단하는 기준이 되는 임계 값들을 설정할 수 있다.
일 실시 예에서, 임계 값 설정부(122c)는, 초기의 임계 값들, 즉 첫 번째 반복이 수행되기 이전의 임계 값들을, 미리 정의된 값들로 설정할 수 있다. 일 실시 예에서, 임계 값 설정부(122c)는, 모든 변수 노드들에 대하여 서로 동일한 제 n 임계 값을 설정할 수 있다. 예를 들어, 모든 변수 노드들에 대하여 동일한 제 1 임계 값이 설정될 수 있고, 모든 변수 노드들에 대하여 동일한 제 2 임계 값이 설정될 수 있다.
일 실시 예에서, 임계 값 설정부(122c)는, 변수 노드들의 차수(degree)에 따라 초기 임계 값들을 달리 설정할 수 있다. 예를 들어, 임계 값 설정부(122c)는, 차수가 높은 변수 노드일수록 초기 임계 값을 높게 설정하고 차수가 낮은 변수 노드일수록 초기 임계 값을 낮게 설정할 수 있다.
일 실시 예에서, 임계 값 설정부(122c)는, 반복의 회차에 따라 임계 값들 중 적어도 하나를 변경할 수 있다. 예를 들어, 임계 값 설정부(122c)는, 반복의 회차가 증가할수록 임계 값들 중 적어도 하나를 더 높게 설정할 수 있다. 반대로, 임계 값 설정부(122c)는, 반복의 회차가 증가할수록 임계 값들 중 적어도 하나를 더 낮게 설정할 수도 있다.
일 실시 예에서, 임계 값 설정부(122c)는, 신드롬 체크에 대응하는 UCN의 개수에 따라 임계 값들 중 적어도 하나를 변경할 수 있다. 예를 들어, 임계 값 설정부(122c)는, i번째 반복에 대응하는 UCN의 개수가 많을수록 i+1번째 반복에서 임계 값들 중 적어도 하나를 더 높게 설정할 수 있다. 반대로, 임계 값 설정부(122c)는, i번째 반복에 대응하는 UCN의 개수가 많을수록 임계 값들 중 적어도 하나를 더 낮게 설정할 수도 있다.
신드롬 체크부(130)는, i번째 반복의 수행 결과로서 노드 연산부(120)로부터 수신되는 변수 노드들의 값(변수 노드 벡터)을 제 1 버퍼(132)에 저장하고, 수신된 변수 노드 벡터에 대한 신드롬 체크를 수행할 수 있다. 일 예로, 신드롬 체크는, <수학식 1>에 의해 계산되는 신드롬 벡터(Si)의 모든 엔트리들이 0인지 여부를 확인함으로써 이루어질 수 있다.
Figure pat00001
여기서, Si는 i번째 반복에서의 신드롬 벡터, H는 에러 정정 코드의 패리티 체크 행렬, Ci T는 i번째 반복에서의 변수 노드 벡터(Ci)의 전치 행렬을 나타낸다.
신드롬 벡터(Si)의 모든 엔트리들이 0인 경우 신드롬 체크가 패스되었음을 의미한다. 이는 i번째 반복에서 에러 정정 디코딩이 성공적으로 이루어졌음을 의미하며, 따라서 신드롬 체크부(130)는, 제 1 버퍼(132)에 저장된 변수 노드 벡터를 유효한 코드워드 즉, 디코딩된 코드워드로서 출력할 수 있다.
한편, 신드롬 벡터(Si)의 엔트리들 중 0이 아닌 엔트리가 있는 경우 신드롬 체크가 실패하였음을 의미한다. 이는 i번째 반복에서 에러 정정 디코딩이 실패하였음을 의미한다. i번째 반복에서 에러 정정 디코딩이 실패한 경우, 신드롬 체크부(130)는, i번째 반복에 대응하는 신드롬 벡터(Si)를 노드 연산부(120)에 전송하거나, 신드롬 벡터(Si)에 대응하는 UCN(Unsatisfied Check Node)의 개수 정보를 노드 연산부(120)에 제공할 수 있다. 여기서, UCN은, 신드롬 벡터(Si)의 엔트리들 중 0이 아닌 엔트리에 대응할 수 있다.
만약, 최대 반복 횟수(I) 내에서 에러 정정 코드의 패리티 체크 행렬을 만족하는 유효한 코드워드가 생성되지 않는다면, 신드롬 체크부(130)는, 에러 정정 디코딩이 실패하였음을 나타내는 페일 신호를 출력할 수 있다.
포스트 프로세서(200)는, 에러 정정 디코더(100)가 유효한 코드워드를 생성할 수 있도록 에러 정정 디코더(100)를 지원(support)할 수 있다. 예를 들어, 에러 정정 디코더(100)가 최대 반복 횟수 내에서 유효한 코드워드를 생성하지 못하는 경우, 포스트 프로세서(200)는, 에러 정정 디코딩에 이용되는 각종 파라미터를 수정하고, 수정된 파라미터를 이용하여 에러 정정 디코딩을 다시 수행하도록 에러 정정 디코더(100)를 제어할 수 있다.
도 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는 자연수일 수 있다. 한편, GF(2)로 표시되는 갈로아 체에 속하는 LDPC 코드는 이진 LDPC 코드를 의미하고, GF(q)(여기서, q>2)로 표시되는 갈로아 체에 속하는 LDPC 코드는 비이진 LDPC 코드를 의미한다. 도 2에는 일 예로서, GF(4)의 원소들을 엔트리로서 갖는 비이진 LDPC 코드의 패리티 체크 행렬을 도시하였다.
도 3은 도 2에 도시된 패리티 체크 행렬을 태너 그래프로 나타낸 도면이다.
(n, k) 코드는, 등가의 이분 그래프(bipartite graph) 표현인 태너(Tanner) 그래프로 표현될 수 있다. 태너 그래프는, 체크 노드(check node)들, 변수 노드(variable node)들 및 에지(edge)들로 표현될 수 있다. 체크 노드들은 패리티 체크 행렬의 행(row)들에 대응하고, 변수 노드들은 패리티 체크 행렬의 열(column)들에 대응한다. 각각의 에지는, 하나의 체크 노드와 하나의 변수 노드를 연결하며, 패리티 체크 행렬에서 0이 아닌 원소로 표현된 엔트리를 나타낸다.
도 3에 도시된 바와 같이, 도 2에 도시된 (n, k) 코드의 패리티 체크 행렬은, n-k개의 체크 노드들(CN1 ~ CNn-k) 및 n개의 변수 노드들(VN1 ~ VNn)을 포함하는 태너 그래프로 표현될 수 있다. 체크 노드들(CN1 ~ CNn-k) 및 변수 노드들(VN1 ~ VNn)을 연결하는 실선 및 점선은 에지를 나타낸다.
반복 복호는, 도 3에 도시된 바와 같은 태너 그래프 상에서 체크 노드들(CN1 ~ CNn-k)과 변수 노드들(VN1 ~ VNn) 사이의 반복적인 메시지 전달 알고리즘에 따라 이루어질 수 있다. 즉, 각각의 반복마다 체크 노드들(CN1 ~ CNn-k)과 변수 노드들(VN1 ~ VNn) 사이에서 C2V 메시지들 및 V2C 메시지들이 전달되면서 반복 복호가 수행될 수 있다. 변수 노드들은 자신과 연결된 체크 노드들로부터 수신되는 C2V 메시지들을 이용하여 에러 정정을 수행할 수 있고, 체크 노드들은 자신과 연결된 변수 노드들로부터 수신되는 V2C 메시지들을 이용하여 체크(check)를 수행할 수 있다. 만약, 어느 하나의 체크 노드가 자신과 연결되어 있는 모든 변수 노드들의 값을 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번째 반복에서의 결과 값인 변수 노드 벡터(Ci)가 디코딩된 코드워드로서 출력될 수 있다.
만약, 신드롬 벡터(Si)의 모든 엔트리들(Si1, Si2, ..., Sin-k) 중 적어도 하나의 엔트리가 0이 아닌 경우, 이는 신드롬 체크가 페일되었음을 의미한다. 따라서, 최대 반복 횟수에 도달하지 않은 경우라면 다음 반복이 수행될 수 있다. 여기서, 0이 아닌 엔트리는, UCN를 나타낸다.
도 5는 본 발명의 일 실시 예에 따른 심볼 구성 과정을 설명하기 위한 예시도이다.
도 5를 참조하여 설명하는 실시 예에서, 채널로부터 수신된 판독 벡터가 14개의 비트로 이루어진 상황을 가정한다.
심볼 구성부는, 판독 벡터에 포함된 비트들을 설정된 개수 단위로 그룹핑하여 복수의 심볼들을 구성할 수 있다. 예를 들어, GF(4)가 이용되는 경우, 심볼 구성부는 2개의 비트들을 그룹핑하여 하나의 심볼을 구성할 수 있다. 판독 벡터가 14개의 비트로 이루어진 상황을 가정하였으므로, 심볼 구성부는 총 7개의 심볼들을 구성할 수 있다. 심볼 구성부는, 구성된 심볼들을 순차적으로 변수 노드들(VN1, ..., VN7)에 할당할 수 있다.
이하에서, 바이너리 표현 '00'은 GF(4) 표현 '0'에 대응하고, 바이너리 표현 '01'은 GF(4) 표현 '1'에 대응하고, 바이너리 표현 '10'은 GF(4) 표현 'α'에 대응하고, 바이너리 표현 '11'은 GF(4) 표현 'α2'에 대응하는 것으로 가정한다.
도 6은 본 발명의 일 실시 예에 따른 임계 값들을 설명하기 위한 예시도이다.
제 2 신뢰도 값이 이용되지 않는 경우, 즉 제 1 신뢰도 값만이 이용되는 경우에는, 하나의 임계 값, 즉 제 1 임계 값만이 변수 노드의 값을 수정하기 위한 판단 기준으로 이용될 수 있다.
한편, 제 2 신뢰도 값이 추가적으로 이용되고, 제 2 신뢰도 값을 나타내기 위하여 하나의 비트가 할당된 경우에는, 두 개의 임계 값들, 즉 제 1 임계 값 및 제 2 임계 값이 변수 노드의 값을 수정하기 위한 판단 기준으로 이용될 수 있다.
한편, 제 2 신뢰도 값이 추가적으로 이용되고, 제 2 신뢰도 값을 나타내기 위하여 둘 이상의 비트가 할당된 경우에는 n(n은 4 이상의 자연수)개의 임계 값들이 변수 노드의 값을 수정하기 위한 판단 기준으로 이용될 수 있다.
도 6에는, 일 예로서, 제 2 신뢰도 값이 추가적으로 이용되고, 제 2 신뢰도 값을 나타내기 위하여 둘 이상의 비트가 할당되고, 4개의 임계 값들이 변수 노드의 값을 수정하기 위한 판단 기준으로 이용되는 경우를 도시하였다.
예를 들어, 제 1 임계 값 내지 제 3 임계 값은 후보 심볼들의 제 1 신뢰도 값과 비교되는 기준 값이고, 제 4 임계 값은 변수 노드들의 제 2 신뢰도 값과 비교되는 기준 값일 수 있다.
한편, 전술한 바와 같이, 임계 값들은, 변수 노드의 차수(degree)에 따라 서로 다르게 설정될 수 있다. 예를 들어, 차수가 높은 변수 노드일수록 임계 값들 중 적어도 하나가 더 높게 설정되고, 차수가 낮은 변수 노드일수록 임계 값들 중 적어도 하나가 더 낮게 설정될 수 있다. 실시 예에 따라, 차수가 높은 변수 노드일수록 임계 값들 중 적어도 하나가 더 낮게 설정되고, 차수가 낮은 변수 노드일수록 임계 값들 중 적어도 하나가 더 높게 설정될 수도 있다.
도 6에는, 일 예로서, 차수(32)가 높은 변수 노드들(VN1, VNn)에 더 높은 임계 값들이 설정되고, 차수(26)가 낮은 변수 노드들(VN2, VN3)에 더 낮은 임계 값들이 설정된 예를 도시하였다.
도 7은 본 발명의 일 실시 예에 따른 제 1 신뢰도 값을 초기화하는 과정을 설명하기 위한 예시도이다.
도 7에는 설명의 편의를 위하여, 태너 그래프 상의 일부 변수 노드들과 일부 체크 노드들만을 도시하였다. 도 7에 도시된 바와 같이, GF(4)가 이용되고, 변수 노드(VN1)에는 초기 심볼 '1'이 할당되고, 변수 노드(VN2)에는 초기 심볼 '0'이 할당되고, 변수 노드(VN3)에는 초기 심볼 'α'가 할당되고, 변수 노드(VNn)에는 초기 심볼 'α2'이 할당된 경우를 가정한다.
도 7에는, 일 예로서, 각각의 변수 노드에 할당된 초기 심볼과 해당 변수 노드에 대응하는 후보 심볼들 간의 해밍 거리가 가까운 후보 심볼일수록 제 1 신뢰도 값이 높게 초기화된 예를 도시하였다. 설명의 편의를 위하여, 도 7 이하의 도면들을 참조하여 설명하는 실시 예들에서 두 개의 변수 노드들(VN1, VN2)만을 예로 들어 설명하나, 나머지 변수 노드들(VN3, ..., VNn)에도 동일한 내용이 적용될 수 있다.
도 7을 참조하면, 변수 노드(VN1)의 후보 심볼들 중 변수 노드(VN1)의 초기 심볼 '1'과의 해밍 거리가 0으로 가장 가까운 후보 심볼 '1'에 가장 높은 제 1 신뢰도 값(3)이 설정될 수 있다. 변수 노드(VN1)의 후보 심볼들 중 변수 노드(VN1)의 초기 심볼 '1'과의 해밍 거리가 2로 가장 먼 후보 심볼 'α'에는 가장 낮은 제 1 신뢰도 값(0)이 설정될 수 있다. 변수 노드(VN1)의 후보 심볼들 중 변수 노드(VN1)의 초기 심볼 '1'과의 해밍 거리가 1인 후보 심볼들 '0' 및 'α2'에는 중간 단계의 제 1 신뢰도 값(1)이 설정될 수 있다.
마찬가지로, 변수 노드(VN2)의 후보 심볼들 중 변수 노드(VN2)의 초기 심볼 '0'과의 해밍 거리가 0으로 가장 가까운 후보 심볼 '0'에 가장 높은 제 1 신뢰도 값(3)이 설정될 수 있다. 변수 노드(VN2)의 후보 심볼들 중 변수 노드(VN2)의 초기 심볼 '0'과의 해밍 거리가 2로 가장 먼 후보 심볼 'α2'에는 가장 낮은 제 1 신뢰도 값(0)이 설정될 수 있다. 변수 노드(VN2)의 후보 심볼들 중 변수 노드(VN2)의 초기 심볼 '0'과의 해밍 거리가 1인 후보 심볼들 '1' 및 'α'에는 중간 단계의 제 1 신뢰도 값(1)이 설정될 수 있다.
도 8은 본 발명의 일 실시 예에 따른 제 1 신뢰도 값에 따라 심볼을 수정하는 과정을 설명하기 위한 예시도이다.
심볼 수정부는, 매 반복마다, 변수 노드들(VN1, VN2, VN3, ..., VNn) 각각에 대응하여 입력되는 C2V 메시지들에 따라, 변수 노드들(VN1, VN2, VN3, ..., VNn) 각각에 대응하는 후보 심볼들의 제 1 신뢰도 값을 갱신할 수 있다. 예를 들어, 심볼 수정부는, 임의의 후보 심볼을 나타내는 C2V 메시지가 수신된 개수만큼 해당 임의의 후보 심볼에 대한 제 1 신뢰도 값을 증가시킬 수 있다. 예를 들어, 후보 심볼 'α'를 나타내는 C2V 메시지가 1개 수신되는 경우 후보 심볼 'α'에 대한 제 1 신뢰도 값을 1만큼 증가시키고, 후보 심볼 'α'를 나타내는 C2V 메시지가 2개 수신되는 경우 후보 심볼 'α'에 대한 제 1 신뢰도 값을 2만큼 증가시킬 수 있다.
도 8에는 일 예로서, 도 7을 참조하여 설명한 초기화 과정 이후에, 변수 노드(VN1)에게, 후보 심볼 '0'을 나타내는 C2V 메시지가 12개 수신되고, 후보 심볼 '1'을 나타내는 C2V 메시지가 4개 수신되고, 후보 심볼 'α'를 나타내는 C2V 메시지가 5개 수신되고, 후보 심볼 'α2'를 나타내는 C2V 메시지가 6개 수신된 경우를 도시하였다. 따라서, 변수 노드(VN1)의 후보 심볼 '0'에 대한 제 1 신뢰도 값은 13으로 갱신되고, 변수 노드(VN1)의 후보 심볼 '1'에 대한 제 1 신뢰도 값은 7로 갱신되고, 변수 노드(VN1)의 후보 심볼 'α'에 대한 제 1 신뢰도 값은 5로 갱신되고, 변수 노드(VN1)의 후보 심볼 'α2'에 대한 제 1 신뢰도 값은 7로 갱신될 수 있다.
또한, 도 8에는, 변수 노드(VN2)에게, 후보 심볼 '0'을 나타내는 C2V 메시지가 4개 수신되고, 후보 심볼 '1'을 나타내는 C2V 메시지가 6개 수신되고, 후보 심볼 'α'를 나타내는 C2V 메시지가 4개 수신되고, 후보 심볼 'α2'를 나타내는 C2V 메시지가 7개 수신된 경우를 도시하였다. 따라서, 변수 노드(VN2)의 후보 심볼 '0'에 대한 제 1 신뢰도 값은 7로 갱신되고, 변수 노드(VN2)의 후보 심볼 '1'에 대한 제 1 신뢰도 값은 7로 갱신되고, 변수 노드(VN2)의 후보 심볼 'α'에 대한 제 1 신뢰도 값은 5로 갱신되고, 변수 노드(VN2)의 후보 심볼 'α2'에 대한 제 1 신뢰도 값은 7로 갱신될 수 있다.
제 1 신뢰도 값이 갱신된 이후, 심볼 수정부는, 변수 노드들 각각에 대하여, 후보 심볼들 중 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인하고, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 변수 노드의 값을 수정할 수 있다. 여기서, 변수 노드(VN1)에 대응하는 제 1 임계 값은 13으로 설정되어 있고, 변수 노드(VN2)에 대응하는 제 1 임계 값은 12로 설정되어 있다고 가정한다.
이러한 경우, 변수 노드(VN1)의 후보 심볼들 중 후보 심볼 '0'에 대한 제 1 신뢰도 값이 변수 노드(VN1)에 대응하는 제 1 임계 값인 13 이상이므로, 변수 노드(VN1)의 값이 '1'에서 '0'으로 수정될 수 있다. 한편, 변수 노드(VN2)의 후보 심볼들 중에는 변수 노드(VN2)에 대응하는 제 1 임계 값인 12 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 없으므로, 변수 노드(VN2)의 값은 수정되지 않을 것이다.
도 9는 본 발명의 일 실시 예에 따른 제 2 신뢰도 값을 설명하기 위한 예시도이다.
도 9에는 도 7에 도시된 실시 예에 비하여, 변수 노드들 각각에 제 2 신뢰도 값이 더 설정되는 경우를 도시하였다. 전술한 바와 같이, 변수 노드의 후보 심볼들 중 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼은 존재하지 않으나, 소정의 임계 값 이상의 제 1 신뢰도 값을 갖는 갖는 후보 심볼이 존재하는 경우, 해당 변수 노드에 제 2 신뢰도 값이 설정(또는 갱신)될 수 있다. 제 2 신뢰도 값은, 변수 노드의 현재 변수 노드 값이 오류일 수 있는 가능성을 나타낸다고 할 수 있다. 다시 말해, 제 2 신뢰도 값은, 변수 노드의 현재 변수 노드 값에 대한 불신뢰도를 나타낸다고 할 수 있다.
제 1 신뢰도 값은 매 반복이 시작될 때마다 초기화되지만, 제 2 신뢰도 값은 반복이 진행되더라도 초기화되지 않을 수 있다. 다만, 제 2 신뢰도 값은, 제 2 신뢰도 값에 기초하여 변수 노드의 값이 후보 심볼들 중 어느 하나의 후보 심볼로 수정되는 경우에 초기화될 수 있다. 한편, 전술한 바와 같이, 제 2 신뢰도 값을 나타내기 위하여, 하나의 비트 또는 둘 이상의 비트가 할당될 수 있다.
도 10은 본 발명의 일 실시 예에 따라 제 2 신뢰도 값을 설정하는 과정을 설명하기 위한 예시도이다.
도 10을 참조하여 설명하는 실시 예에서, 제 2 신뢰도 값을 나타내기 위하여 하나의 비트가 할당된 것을 가정한다.
심볼 수정부는, 매 반복마다, 변수 노드들(VN1, VN2, VN3, ..., VNn) 각각에 대응하여 입력되는 C2V 메시지들에 따라, 변수 노드들(VN1, VN2, VN3, ..., VNn) 각각에 대응하는 후보 심볼들의 제 1 신뢰도 값을 갱신할 수 있다.
도 10에는 일 예로서, 제 1 신뢰도 값 및 제 2 신뢰도 값이 초기화된 이후에, 변수 노드(VN1)에게, 후보 심볼 '0'을 나타내는 C2V 메시지가 12개 수신되고, 후보 심볼 '1'을 나타내는 C2V 메시지가 4개 수신되고, 후보 심볼 'α'를 나타내는 C2V 메시지가 5개 수신되고, 후보 심볼 'α2'를 나타내는 C2V 메시지가 6개 수신된 경우를 도시하였다. 따라서, 변수 노드(VN1)의 후보 심볼 '0'에 대한 제 1 신뢰도 값은 13으로 갱신되고, 변수 노드(VN1)의 후보 심볼 '1'에 대한 제 1 신뢰도 값은 7로 갱신되고, 변수 노드(VN1)의 후보 심볼 'α'에 대한 제 1 신뢰도 값은 5로 갱신되고, 변수 노드(VN1)의 후보 심볼 'α2'에 대한 제 1 신뢰도 값은 7로 갱신될 수 있다.
또한, 도 10에는, 변수 노드(VN2)에게, 후보 심볼 '0'을 나타내는 C2V 메시지가 2개 수신되고, 후보 심볼 '1'을 나타내는 C2V 메시지가 9개 수신되고, 후보 심볼 'α'를 나타내는 C2V 메시지가 3개 수신되고, 후보 심볼 'α2'를 나타내는 C2V 메시지가 7개 수신된 경우를 도시하였다. 따라서, 변수 노드(VN2)의 후보 심볼 '0'에 대한 제 1 신뢰도 값은 5로 갱신되고, 변수 노드(VN2)의 후보 심볼 '1'에 대한 제 1 신뢰도 값은 10으로 갱신되고, 변수 노드(VN2)의 후보 심볼 'α'에 대한 제 1 신뢰도 값은 4로 갱신되고, 변수 노드(VN2)의 후보 심볼 'α2'에 대한 제 1 신뢰도 값은 7로 갱신될 수 있다.
제 1 신뢰도 값이 갱신된 이후, 심볼 수정부는, 변수 노드들 각각에 대하여, 후보 심볼들 중 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인하고, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 변수 노드의 값을 수정할 수 있다. 여기서, 변수 노드(VN1)에 대응하는 제 1 임계 값은 13으로 설정되어 있고, 변수 노드(VN2)에 대응하는 제 1 임계 값은 12로 설정되어 있다고 가정한다.
이러한 경우, 변수 노드(VN1)의 후보 심볼들 중 후보 심볼 '0'에 대한 제 1 신뢰도 값이 변수 노드(VN1)에 대응하는 제 1 임계 값인 13 이상이므로, 변수 노드(VN1)의 값이 '1'에서 '0'으로 수정될 수 있다.
한편, 변수 노드(VN2)의 후보 심볼들 중에는 변수 노드(VN2)에 대응하는 제 1 임계 값인 12 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 없으므로, 변수 노드(VN2)의 값은 수정되지 않을 것이다.
한편, 심볼 수정부는, 변수 노드들 중 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하지 않는 변수 노드가 있는 경우, 해당 변수 노드의 후보 심볼들 중 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인할 수 있다. 만약, 제 1 임계 값 미만 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우, 심볼 수정부는 해당 변수 노드에 제 2 신뢰도 값을 설정할 수 있다. 여기서, 변수 노드(VN2)에 대응하는 제 2 임계 값은 10으로 설정되어 있다고 가정한다.
이러한 경우, 변수 노드(VN2)의 후보 심볼들 중 후보 심볼 '1'에 대한 제 1 신뢰도 값이 변수 노드(VN2)에 대응하는 제 2 임계 값인 10 이상이므로, 변수 노드(VN2)에 제 2 신뢰도 값이 설정될 수 있다. 도 10을 참조하면, 변수 노드(VN2)의 제 2 신뢰도 값이 1로 설정되었음을 알 수 있다.
도 11은 본 발명의 일 실시 예에 따른 제 2 신뢰도 값에 따라 심볼을 수정하는 과정을 설명하기 위한 예시도이다.
도 11에는, 도 10을 참조하여 설명한 심볼 수정 및 제 2 신뢰도 값 설정이 이루어진 후, 다음 반복에서 제 1 신뢰도 값은 초기화되고 제 2 신뢰도 값은 유지된 상태에서 C2V 메시지들이 수신된 경우의 예를 도시하였다.
도 10을 참조하여 설명한 바와 마찬가지로, 심볼 수정부는, 변수 노드에게 수신되는 C2V 메시지들의 개수에 기반하여 후보 심볼들의 제 1 신뢰도 값을 갱신하고, 갱신된 제 1 신뢰도 값이 제 1 임계 값 이상인 후보 심볼이 존재하는 경우 해당 변수 노드의 값을 해당 후보 심볼로 수정할 수 있다. 도 11에는, 일 예로서, 변수 노드(VN1)의 후보 심볼 'α2'의 제 1 신뢰도 값이 변수 노드(VN1)에 대응하는 제 1 임계 값인 13 이상이어서, 변수 노드(VN1)의 값이 '0'에서 'α2'로 수정된 예를 도시하였다.
한편, 심볼 수정부는, 갱신된 제 1 신뢰도 값이 제 1 임계 값 이상인 후보 심볼이 존재하지 않는 경우, 갱신된 제 1 신뢰도 값이 제 2 임계 값 이상인 후보 심볼이 존재하는지 확인할 수 있다. 심볼 수정부는, 갱신된 제 1 신뢰도 값이 제 2 임계 값 이상인 후보 심볼이 존재하는 경우, 해당 변수 노드에 제 2 신뢰도 값이 설정되어 있는지 확인할 수 있다. 심볼 수정부는, 해당 변수 노드에 제 2 신뢰도 값이 설정되어 있지 않은 경우에는 해당 변수 노드에 제 2 신뢰도 값을 설정하고, 해당 변수 노드에 제 2 신뢰도 값이 설정되어 있는 경우에는 해당 변수 노드의 값을 수정할 수 있다.
도 11에는, 일 예로서, 변수 노드(VN2)의 후보 심볼 'α'의 제 1 신뢰도 값이 변수 노드(VN2)에 대응하는 제 2 임계 값인 10 이상인 경우를 도시하였다. 여기서, 변수 노드(VN2)에는 이전 반복에서 제 2 신뢰도 값이 설정되었기 때문에, 심볼 수정부는, 변수 노드(VN2)의 값을 수정할 수 있다. 이 때, 심볼 수정부는, 변수 노드의 값을, 현재 반복에서 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼로 수정할 수 있다.
예를 들어, 도 10을 참조하여 설명한 바와 같이 이전 반복에서 변수 노드(VN2)의 후보 심볼들 중 후보 심볼 '1'의 제 1 신뢰도 값이 제 2 임계 값 이상이어서 변수 노드(VN2)에 제 2 신뢰도 값이 설정되었다 하더라도, 도 11에 도시된 바와 같이 현재 반복에서 변수 노드(VN2)의 후보 심볼들 중 후보 심볼 'α'의 제 1 신뢰도 값이 제 2 임계 값 이상인 경우에 변수 노드(VN2)의 값은 'α'로 수정될 수 있다.
도 12는 본 발명의 다른 실시 예에 따라 제 2 신뢰도 값을 설정하는 과정을 설명하기 위한 예시도이다.
도 12를 참조하여 설명하는 실시 예에서, 제 2 신뢰도 값을 나타내기 위하여 둘 이상의 비트가 할당된 것을 가정한다.
도 12에는, 제 1 신뢰도 값 및 제 2 신뢰도 값이 초기화된 이후에, 변수 노드들(VN1, VN2)에게 수신된 C2V 메시지들에 따라 제 1 신뢰도 값이 갱신된 예를 도시하였다.
도 12에 도시된 바와 같이, 변수 노드(VN1)의 후보 심볼 '0'에 대한 제 1 신뢰도 값은 11로 갱신되고, 변수 노드(VN1)의 후보 심볼 '1'에 대한 제 1 신뢰도 값은 6으로 갱신되고, 변수 노드(VN1)의 후보 심볼 'α'에 대한 제 1 신뢰도 값은 8로 갱신되고, 변수 노드(VN1)의 후보 심볼 'α2'에 대한 제 1 신뢰도 값은 7로 갱신된 경우를 가정한다. 또한, 변수 노드(VN2)의 후보 심볼 '0'에 대한 제 1 신뢰도 값은 5로 갱신되고, 변수 노드(VN2)의 후보 심볼 '1'에 대한 제 1 신뢰도 값은 8로 갱신되고, 변수 노드(VN3)의 후보 심볼 'α'에 대한 제 1 신뢰도 값은 6으로 갱신되고, 변수 노드(VN2)의 후보 심볼 'α2'에 대한 제 1 신뢰도 값은 7로 갱신된 경우를 가정한다.
제 1 신뢰도 값이 갱신된 이후, 심볼 수정부는, 변수 노드들 각각에 대하여, 후보 심볼들 중 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인하고, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 변수 노드의 값을 수정할 수 있다. 여기서, 변수 노드(VN1)에 대응하는 제 1 임계 값은 13으로 설정되어 있고, 변수 노드(VN2)에 대응하는 제 1 임계 값은 12로 설정되어 있다고 가정한다. 이러한 경우, 변수 노드들(VN1, VN)의 후보 심볼들 중 제 1 임계 값을 만족하는 후보 심볼이 없으므로, 변수 노드들(VN1, VN)의 값은 수정되지 않을 것이다.
심볼 수정부는, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하지 않는 변수 노드들 각각에 대하여, 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인할 수 있다. 만약, 제 1 임계 값 미만 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우, 심볼 수정부는 해당 변수 노드의 제 2 신뢰도 값을 갱신할 수 있다. 여기서, 변수 노드(VN1)에 대응하는 제 2 임계 값은 11로 설정되어 있고, 변수 노드(VN2)에 대응하는 제 2 임계 값은 10으로 설정되어 있다고 가정한다. 이러한 경우, 변수 노드(VN1)의 후보 심볼들 중 후보 심볼 '0'에 대한 제 1 신뢰도 값이 변수 노드(VN1)에 대응하는 제 2 임계 값인 11 이상이므로, 변수 노드(VN1)의 제 2 신뢰도 값이 갱신될 수 있다. 이 때, 2 임계 값에 대응하는 설정 값만큼 제 2 신뢰도 값이 갱신될 수 있다. 설정 값은, 대응하는 임계 값마다 다를 수 있다. 예를 들어, 제 2 임계 값에 대응하는 설정 값은 2이고, 제 3 임계 값에 대응하는 설정 값은 1일 수 있다. 도 12에는, 제 2 임계 값에 대응하는 설정 값이 2이어서, 변수 노드(VN1)의 제 2 신뢰도 값이 2로 갱신된 예를 도시하였다.
한편, 심볼 수정부는, 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하지 않는 변수 노드들 각각에 대하여, 제 3 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인할 수 있다. 만약, 제 2 임계 값 미만 제 3 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우, 심볼 수정부는 해당 변수 노드의 제 2 신뢰도 값을 갱신할 수 있다. 여기서, 변수 노드(VN2)에 대응하는 제 3 임계 값은 8로 설정되어 있다고 가정한다. 이러한 경우, 변수 노드(VN2)의 후보 심볼들 중 후보 심볼 '1'에 대한 제 1 신뢰도 값이 변수 노드(VN2)에 대응하는 제 3 임계 값인 8 이상이므로, 변수 노드(VN2)의 제 2 신뢰도 값이 갱신될 수 있다. 도 12에는, 제 3 임계 값에 대응하는 설정 값이 1이어서, 변수 노드(VN2)의 제 2 신뢰도 값이 1로 갱신된 예를 도시하였다.
도 13은 본 발명의 다른 실시 예에 따른 제 2 신뢰도 값에 따라 심볼을 수정하는 과정을 설명하기 위한 예시도이다.
도 13에는, 도 12를 참조하여 설명한 제 2 신뢰도 값 갱신이 이루어진 후, 다음 반복에서 제 1 신뢰도 값은 초기화되고 제 2 신뢰도 값은 유지된 상태에서 C2V 메시지들이 수신된 경우의 예를 도시하였다. 심볼 수정부는, 변수 노드에게 수신되는 C2V 메시지들의 개수에 기반하여 후보 심볼들의 제 1 신뢰도 값을 갱신할 수 있다.
제 1 신뢰도 값이 갱신된 이후, 심볼 수정부는, 변수 노드들 각각에 대하여, 후보 심볼들 중 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인하고, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 변수 노드의 값을 수정할 수 있다. 여기서, 변수 노드(VN1)에 대응하는 제 1 임계 값은 13으로 설정되어 있고, 변수 노드(VN2)에 대응하는 제 1 임계 값은 12로 설정되어 있다고 가정한다. 이러한 경우, 변수 노드들(VN1, VN)의 후보 심볼들 중 제 1 임계 값을 만족하는 후보 심볼이 없으므로, 변수 노드들(VN1, VN)의 값은 수정되지 않을 것이다.
심볼 수정부는, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하지 않는 변수 노드들 각각에 대하여, 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인할 수 있다. 만약, 제 1 임계 값 미만 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우, 심볼 수정부는 해당 변수 노드의 제 2 신뢰도 값을 갱신할 수 있다. 여기서, 변수 노드(VN1)에 대응하는 제 2 임계 값은 11로 설정되어 있고, 변수 노드(VN2)에 대응하는 제 2 임계 값은 10으로 설정되어 있다고 가정한다. 이러한 경우, 변수 노드들(VN1, VN2)의 후보 심볼들 중 제 2 임계 값을 만족하는 후보 심볼이 없으므로, 변수 노드들(VN1, VN2)의 제 2 신뢰도 값은 갱신되지 않을 것이다.
심볼 수정부는, 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하지 않는 변수 노드들 각각에 대하여, 제 3 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인할 수 있다. 만약, 제 2 임계 값 미만 제 3 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우, 심볼 수정부는 해당 변수 노드의 제 2 신뢰도 값을 갱신할 수 있다. 여기서, 변수 노드(VN1)에 대응하는 제 3 임계 값은 9로 설정되어 있고, 변수 노드(VN2)에 대응하는 제 3 임계 값은 8로 설정되어 있다고 가정한다. 이러한 경우, 변수 노드(VN1)의 후보 심볼들 중 'α'에 대한 제 1 신뢰도 값이 변수 노드(VN1)에 대응하는 제 3 임계 값인 9 이상이므로, 변수 노드(VN1)의 신뢰도 값이 갱신될 수 있다. 도 13에는, 일 예로서, 제 3 임계 값에 대응하는 설정 값이 1이어서, 변수 노드(VN1)의 제 2 신뢰도 값이 2에서 3으로 갱신된 예를 도시하였다.
심볼 수정부는, 변수 노드의 제 2 신뢰도 값이 갱신되는 경우, 갱신된 제 2 신뢰도 값이 제 4 임계 값 이상인지 여부를 확인할 수 있다. 만약, 갱신된 제 2 신뢰도 값이 제 4 임계 값 이상인 경우, 심볼 수정부는, 변수 노드의 값을 수정할 수 있다. 여기서, 변수 노드(VN1)에 대응하는 제 4 임계 값은 3으로 설정되어 있다고 가정한다. 이러한 경우, 변수 노드(VN1)의 갱신된 제 2 신뢰도 값은 변수 노드(VN1)에 대응하는 제 4 임계 값인 3 이상이므로, 변수 노드(VN1)의 값이 수정될 수 있다. 이 때, 변수 노드(VN1)의 값은, 현재 반복에서 제 2 신뢰도 값을 갱신시킨 후보 심볼, 즉 후보 심볼 'α'로 수정될 수 있다.
한편, 변수 노드(VN2)의 후보 심볼들 중 제 3 임계 값을 만족하는 후보 심볼이 없으므로, 변수 노드(VN2)의 제 2 신뢰도 값은 갱신되지 않을 것이다.
도 14는 본 발명의 일 실시 예에 따른 에러 정정 회로의 동작 방법을 설명하기 위한 흐름도이다.
실시 예에 따라, 도 14에 도시된 단계들 중 적어도 하나는 생략될 수 있으며, 각 단계들의 순서는 바뀔 수 있다.
단계(1401)에서, 에러 정정 회로는, 코드 워드에 대응하는 판독 벡터를 수신할 수 있다.
단계(1403)에서, 에러 정정 회로는, 판독 벡터를 기반으로 심볼들을 구성하고, 구성된 심볼들을 각 변수 노드에 하나씩 할당할 수 있다.
단계(1405)에서, 에러 정정 회로는, 변수 노드들 각각에 할당된 초기 심볼을 기반으로 변수 노드들 각각의 값으로서 선택될 수 있는 후보 심볼들의 제 1 신뢰도 값을 초기화할 수 있다. 일 실시 예에서, 에러 정정 회로는, 변수 노드들 각각에 할당된 초기 심볼과 후보 심볼들 간의 해밍 거리(hamming distance)에 따라, 후보 심볼들 각각의 제 1 신뢰도 값을 서로 다르게 초기화할 수 있다. 예를 들어, 에러 정정 회로는, 초기 심볼과의 해밍 거리가 가까운 후보 심볼일수록 제 1 신뢰도 값을 높게 초기화하고, 초기 심볼과 해밍 거리가 먼 후보 심볼일수록 제 1 신뢰도 값을 낮게 초기화할 수 있다. 일 실시 예에서, 에러 정정 회로는, 반복의 회차를 더 고려하여, 후보 심볼들 각각의 제 1 신뢰도 값을 다르게 초기화할 수 있다. 예를 들어, 에러 정정 회로는, 반복의 회차가 증가할수록 그리고 초기 심볼과의 해밍 거리가 가까운 후보 심볼일수록, 이전 회차보다 더 높게 제 1 신뢰도 값을 초기화할 수 있다. 일 실시 예에서, 에러 정정 회로는, UCN(Unsatisfied Check Node)의 개수를 더 고려하여, 후보 심볼들의 제 1 신뢰도 값을 초기화 할 수 있다. 예를 들어, 에러 정정 회로는, i번째 반복에서의 UCN의 개수가 많을수록 그리고 초기 심볼과의 해밍 거리가 가까운 후보 심볼일수록, i+1번째 반복에서 제 1 신뢰도 값을 더 높게 초기화할 수 있다.
단계(1407)에서, 에러 정정 회로는, 변수 노드의 값을 수정할지 여부를 판단하는 기준이 되는 임계 값들을 설정할 수 있다. 일 실시 예에서, 에러 정정 회로는, 초기의 임계 값들, 즉 첫 번째 반복이 수행되기 이전의 임계 값들을, 미리 정의된 값들로 설정할 수 있다. 일 실시 예에서, 에러 정정 회로는, 모든 변수 노드들에 대하여 서로 동일한 제 n 임계 값을 설정할 수 있다. 예를 들어, 모든 변수 노드들에 대하여 동일한 제 1 임계 값이 설정될 수 있고, 모든 변수 노드들에 대하여 동일한 제 2 임계 값이 설정될 수 있다. 일 실시 예에서, 에러 정정 회로는, 변수 노드들의 차수(degree)에 따라 초기 임계 값들을 달리 설정할 수 있다. 예를 들어, 에러 정정 회로는, 차수가 높은 변수 노드일수록 초기 임계 값을 높게 설정하고 차수가 낮은 변수 노드일수록 초기 임계 값을 낮게 설정할 수 있다. 일 실시 예에서, 에러 정정 회로는, 반복의 회차에 따라 임계 값들 중 중 적어도 하나를 변경할 수 있다. 예를 들어, 에러 정정 회로는, 반복의 회차가 증가할수록 임계 값들 중 적어도 하나를 더 높게 설정할 수 있다. 일 실시 예에서, 에러 정정 회로는, 신드롬 체크에 대응하는 UCN의 개수에 따라 임계 값들 중 적어도 하나를 변경할 수 있다. 예를 들어, 에러 정정 회로는, i번째 반복에 대응하는 UCN의 개수가 많을수록 i+1번째 반복에서 임계 값들 중 중 적어도 하나를 더 높게 설정할 수 있다.
단계(1409)에서, 에러 정정 회로는, 체크 노드 업데이트 및 변수 노드 업데이트를 수행할 수 있다. 즉, 단계(1409)에서, 체크 노드들과 변수 노드들 간에 C2V 메시지 및 V2C 메시지의 교환이 이루어질 수 있다.
단계(1411)에서, 에러 정정 회로는, 변수 노드들 각각에 대하여, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인할 수 있다. 만약, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우(Y) 단계(1413)가 진행되고, 그렇지 않은 경우(N) 단계(1421)가 진행될 수 있다. 여기서, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 변수 노드에 대하여는 단계(1413)가 진행되고, 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하지 않는 변수 노드에 대하여는 단계(1421)가 진행될 수 있다.
단계(1413)에서, 에러 정정 회로는, 변수 노드의 값을 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼로 수정할 수 있다.
단계(1415)에서, 에러 정정 회로는, 변수 노드들의 값을 기반으로 신드롬 체크를 수행하고, 신드롬 체크가 패스되었는지 여부를 확인할 수 있다. 만약, 신드롬 체크가 패스된 경우(Y) 단계(1417)가 진행되고, 그렇지 않은 경우(N) 단계(1441)가 진행될 수 있다.
단계(1417)에서, 에러 정정 회로는, 신드롬 체크가 패스된 변수 노드들의 값을 디코딩된 코드워드로서 출력할 수 있다.
한편, 변수 노드의 후보 심볼들 중 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하지 않는다고 판단되어 진행된 단계(1421)에서, 에러 정정 회로는, 해당 변수 노드의 후보 심볼들 중 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인할 수 있다. 만약, 해당 변수 노드의 후보 심볼들 중 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우(Y) 단계(1423)가 진행되고, 그렇지 않은 경우(N) 단계(1415)가 진행될 수 있다.
단계(1423)에서, 에러 정정 회로는, 변수 노드에 제 2 신뢰도 값이 설정되어 있는지 확인할 수 있다. 만약, 변수 노드에 제 2 신뢰도 값이 설정되어 있는 경우(Y) 단계(1425)가 진행되고, 그렇지 않은 경우(N) 단계(1431)가 진행될 수 있다.
단계(1425)에서, 에러 정정 회로는, 변수 노드의 값을 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼로 수정할 수 있다.
단계(1427)에서, 에러 정정 회로는, 단계(1425)에서 값이 수정된 변수 노드에 대응하는 제 2 신뢰도 값을 초기화할 수 있다. 이후, 단계(1415)가 진행될 수 있다.
한편, 단계(1423)의 판단 결과 제 2 신뢰도 값이 설정되어 있지 않다고 판단되어 진행한 단계(1431)에서, 에러 정정 회로는, 해당 변수 노드에 제 2 신뢰도 값을 설정할 수 있다. 이후, 단계(1415)가 진행될 수 있다.
한편, 단계(1415)의 판단 결과 신드롬 체크가 패스되지 않았다고 판단되어 진행한 단계(1441)에서, 에러 정정 회로는, 최대 반복 횟수(I)만큼 반복이 수행되었는지 여부를 확인할 수 있다. 만약, 최대 반복 횟수(I)만큼 반복이 수행된 경우(Y) 단계(1443)가 진행되어 페일 신호가 출력될 수 있다. 만약, 최대 반복 횟수(I)만큼 반복이 수행되지 않은 경우(N), 단계(1451)를 거쳐 i+1번째 반복이 수행될 수 있다.
도 15는 본 발명의 다른 실시 예에 따른 에러 정정 회로의 동작 방법을 설명하기 위한 흐름도이다.
도 15를 참조하여 설명하는 실시 예에서, 도 14를 참조하여 설명한 실시 예와 중복되는 내용은 생략한다. 구체적으로, 도 15에 도시된 단계들(1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1541, 1543, 1551)은 각각 도 14에 도시된 단계들(1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1441, 1443, 1451)과 동일하게 수행될 수 있다.
단계(1511)의 판단 결과 변수 노드의 후보 심볼들 중 제 1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하지 않는다고 판단되어 진행된 단계(1521)에서, 에러 정정 회로는, 해당 변수 노드의 후보 심볼들 중 제 2 내지 제 n-1 (n은 4 이상의 자연수)임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지 확인할 수 있다. 이러한 확인은, 높은 임계 값들부터 순차적으로, 즉 제 2 임계 값부터 제 n-1 임계 값까지 순차적으로 이루어질 수 있다. 이 때, 제 2 내지 제 n-1 임계 값들 중 어느 하나의 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 것으로 확인되는 경우, 나머지 임계 값들에 대한 확인은 이루어지지 않을 수 있다. 예를 들어, 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 변수 노드에 대하여는, 제 3 임계 값 내지 제 n-1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는지에 대한 확인이 이루어지지 않을 수 있다. 만약, 해당 변수 노드의 후보 심볼들 중 제 2 내지 제 n-1 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우(Y) 단계(1523)가 진행되고, 그렇지 않은 경우(N) 단계(1515)가 진행될 수 있다.
단계(1523)에서, 에러 정정 회로는, 변수 노드의 제 2 신뢰도 값을 갱신할 수 있다. 예를 들어, 에러 정정 회로는, 제 1 신뢰도 값이 만족하는 가장 큰 임계 값에 대응하는 설정 값만큼 변수 노드의 제 2 신뢰도 값을 증가시킬 수 있다. 예를 들어, 에러 정정 회로는, 제 2 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우 해당 변수 노드의 제 2 신뢰도 값을 제 1 설정 값만큼 증가시키고, 제 3 임계 값 이상의 제 1 신뢰도 값을 갖는 후보 심볼이 존재하는 경우 해당 변수 노드의 제 2 신뢰도 값을 제 1 설정 값보다 작은 제 2 설정 값만큼 증가시킬 수 있다.
단계(1525)에서, 에러 정정 회로는, 갱신된 제 2 신뢰도 값이 제 n 임계 값을 초과하는지 여부를 판단할 수 있다. 갱신된 제 2 신뢰도 값이 제 n 임계 값을 초과하는 경우(Y) 단계(1527)가 진행되고, 그렇지 않은 경우(N) 단계(1515)가 진행될 수 있다.
단계(1527)에서, 에러 정정 회로는, 변수 노드의 값을 수정할 수 있다. 예를 들어, 에러 정정 회로는, 변수 노드의 값을 현재 반복에서 제 2 신뢰도 값을 갱신시킨 후보 심볼로 수정할 수 있다.
단계(1529)에서, 에러 정정 회로는, 제 2 신뢰도 값에 기반하여 값이 수정된 변수 노드의 제 2 신뢰도 값을 초기화할 수 있다. 이후, 단계(1515)가 진행될 수 있다.
도 16은 본 발명의 실시 예들이 적용되는 메모리 시스템을 설명하기 위한 도면이다.
도 16을 참조하면, 메모리 시스템(memory system; 2000)은, 데이터가 저장되는 메모리 장치(memory device; 2200) 및 호스트(host; 1000)의 제어에 따라 메모리 장치(2200)를 제어하는 메모리 컨트롤러(memory controller; 2100)를 포함할 수 있다.
호스트(1000)는, PCI-E(Peripheral Component Interconnect-Express), ATA(Advanced Technology Attachment), SATA(Serial ATA), PATA(Parallel ATA) 또는 SAS(serial attached SCSI) 등의 인터페이스 프로토콜을 이용하여 메모리 시스템(2000)과 통신할 수 있다. 호스트(1000)와 메모리 시스템(2000) 간에 이용되는 인터페이스 프로토콜들은 상술한 예에 한정되지 않으며, USB(Universal Serial Bus), MMC(Multi-Media Card), ESDI(Enhanced Small Disk Interface) 또는 IDE(Integrated Drive Electronics) 등의 인터페이스 프로토콜이 이용될 수도 있다.
메모리 컨트롤러(2100)는, 메모리 시스템(2000)의 동작을 전반적으로 제어하며, 호스트(1000)와 메모리 장치(2200) 사이의 데이터 교환을 제어할 수 있다.
메모리 컨트롤러(2100)는, 호스트 인터페이스(host interface; 2110), CPU(Central Processing Unit; 2120), 메모리 인터페이스(memory interface; 2130), 버퍼 메모리(buffer memory; 2140), 에러 정정 회로(error correction circuit; 2150) 및 내부 메모리(2160)를 포함할 수 있다. 호스트 인터페이스(2110), 메모리 인터페이스(2130), 버퍼 메모리(2140), 에러 정정 회로(2150) 및 내부 메모리(2160)는 CPU(2120)에 의해 제어될 수 있다.
호스트 인터페이스(2110)는, 통신 프로토콜을 이용하여 호스트(1000)와 데이터 교환을 수행할 수 있다.
CPU(2120)는, 메모리 장치(2200)를 제어하기 위하여, 각종 연산을 수행하거나 커맨드 및 어드레스를 생성할 수 있다. 예를 들어, CPU(2120)는, 프로그램 동작, 리드 동작, 소거 동작, 데이터 압축 동작 및 카피백 동작들에 필요한 다양한 커맨드들(commands)을 생성할 수 있다.
메모리 인터페이스(2130)는, 통신 프로토콜을 이용하여 메모리 장치(2200)와 통신을 수행할 수 있다.
버퍼 메모리(2140)는, 메모리 컨트롤러(2100)가 메모리 장치(2200)를 제어하는 동안 데이터를 임시로 저장할 수 있다. 예를 들면, 프로그램 동작이 완료될 때까지 호스트로부터 수신된 데이터는 버퍼 메모리(2140)에 임시로 저장될 수 있다. 또한, 리드 동작 시 메모리 장치(2200)로부터 리드된 데이터가 버퍼 메모리(2140)에 임시로 저장될 수도 있다.
에러 정정 회로(2150)는, 프로그램 동작 또는 리드 동작 시 에러 정정을 위한 인코딩 및 디코딩을 수행할 수 있다. 에러 정정 회로(2150)는 비이진 LDPC 코드를 이용하는 에러 정정 회로일 수 있다.
에러 정정 회로(2150)는, 에러 정정 디코더(2152) 및 포스트 프로세서(2154)를 포함할 수 있다. 에러 정정 디코더(2152)는, 메모리 장치(2200)로부터 리드된 데이터, 즉 코드워드(codeword)에 대한 에러 정정 디코딩을 수행할 수 있다. 에러 정정 디코더(2152)는, 에러 정정을 위한 반복 복호 과정에서 에러가 검출된 경우, 패리티 체크 행렬을 이용하여 에러를 정정할 수 있다. 예를 들어, 에러 정정 디코더(2152)는, 패리티 체크 행렬을 기반으로 코드워드에 대응하는 신드롬을 산출하고, 산출된 신드롬에 근거하여 코드워드에 에러가 포함되어 있는지 여부를 판단할 수 있다. 에러 정정 디코더(2152)는, 코드워드에 포함된 에러를 정정할 수 있는 경우, 에러를 정정하고, 에러 정정된 데이터를 출력할 수 있다. 에러 정정 디코더(2152)는, 코드워드에 포함된 에러를 정정할 수 없는 경우, 디코딩이 페일(fail)되었음을 CPU(2120)에 보고할 수 있다.
에러 정정 디코더(2152)는, 심볼 구성부(2152a), 노드 연산부(2152b) 및 신드롬 체크부(2152c)를 포함할 수 있다. 에러 정정 디코더(2152)는, 도 1을 참조하여 설명한 에러 정정 디코더(100)와 동일한 동작을 수행할 수 있다. 즉, 도 16에 도시된 심볼 구성부(2152a), 노드 연산부(2152b) 및 신드롬 체크부(2152c)는, 각각 도 1에 도시된 심볼 구성부(110), 노드 연산부(120) 및 신드롬 체크부(130)에 대응하는 동작을 수행할 수 있다.
포스트 프로세서(2154)는, 도 1에 도시된 포스트 프로세서(200)에 대응하는 동작을 수행할 수 있다.
내부 메모리(2160)는, 메모리 컨트롤러(2100)의 동작에 필요한 다양한 정보들을 저장하는 저장부(storage unit)로서 사용될 수 있다. 내부 메모리(2160)는, 다수의 테이블들을 저장할 수 있다. 예를 들어, 내부 메모리(2160)는, 논리적 어드레스(logical address)와 물리적 어드레스(physical address)의 맵핑 테이블을 저장할 수 있다.
메모리 장치(2200)는, 메모리 컨트롤러(2100)의 제어에 따라 프로그램 동작, 리드 동작, 소거 동작, 데이터 압축 동작 및 카피백 동작 등을 수행할 수 있다. 메모리 장치(2200)는, 전원 공급이 차단되면 저장된 데이터가 소멸되는 휘발성 메모리 장치, 또는 전원 공급이 차단되더라도 저장된 데이터가 유지되는 비휘발성 메모리 장치로 이루어질 수 있다.
도 17은 본 발명의 일 실시 예에 따른 메모리 장치를 설명하기 위한 도면이다. 도 17에 도시된 메모리 장치는 도 16에 도시된 메모리 시스템에 적용될 수 있다.
메모리 장치(2200)는, 제어 로직(2210), 주변 회로들(2220) 및 메모리 셀 어레이(2240)를 포함할 수 있다. 주변 회로들(2220)은, 전압 생성 회로(voltage generation circuit; 2222), 로우 디코더(row decoder; 2224), 입출력 회로(input/output circuit; 2226), 칼럼 디코더(column decoder; 2228), 페이지 버퍼 그룹(page buffer group; 2232) 및 전류 센싱 회로(current sensing circuit; 2234)를 포함할 수 있다.
제어 로직(2210)은, 도 16에 도시된 메모리 컨트롤러(2100)의 제어 하에 주변 회로들(2220)을 제어할 수 있다.
제어 로직(2210)은, 입출력 회로(2226)를 통하여 메모리 컨트롤러(2100)로부터 수신되는 커맨드(CMD) 및 어드레스(ADD)에 응답하여 주변 회로들(2220)을 제어할 수 있다. 예를 들어, 제어 로직(2210)은, 커맨드(CMD) 및 어드레스(ADD)에 응답하여 동작 신호(OP_CMD), 로우 어드레스(RADD), 페이지 버퍼 제어 신호들(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차원 구조로 구현될 수 있으며, 서로 동일하게 구성될 수 있다.
도 18은 메모리 블록을 설명하기 위한 예시도이다.
메모리 셀 어레이는 복수의 메모리 블록들을 포함할 수 있으며, 도 18에는 설명의 편의를 위하여 복수의 메모리 블록들 중 어느 하나의 메모리 블록(BLKi)이 도시되었다.
메모리 블록(BLKi)은 제 1 셀렉트 라인과 제 2 셀렉트 라인 사이에 서로 평행하게 배열된 복수의 워드 라인들이 연결될 수 있다. 여기서, 제 1 셀렉트 라인은 소스 셀렉트 라인(SSL)일 수 있고, 제 2 셀렉트 라인은 드레인 셀렉트 라인(DSL)일 수 있다. 구체적으로, 메모리 블록(BLKi)은, 비트 라인들(BL1~BLn)과 소스 라인(SL) 사이에 연결된 복수의 스트링들(strings; ST)을 포함할 수 있다. 비트 라인들(BL1~BLn)은 스트링들(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개의 논리 페이지 데이터가 저장될 수 있다.
도 19는 도 16에 도시된 메모리 컨트롤러를 포함하는 메모리 시스템의 다른 예를 설명하기 위한 도면이다.
도 19를 참조하면, 메모리 시스템(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)와는 별도의 칩으로 구현될 수 있다.
도 20은 도 16에 도시된 메모리 컨트롤러를 포함하는 메모리 시스템의 다른 예를 설명하기 위한 도면이다.
도 20을 참조하면, 메모리 시스템(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; μP; 6100)의 제어에 따라 카드 인터페이스(7100)와 메모리 컨트롤러(2100)를 통하여 메모리 장치(2200)와 데이터 통신을 수행할 수 있다.
본 발명의 상세한 설명에서는 구체적인 실시 예에 관하여 설명하였으나, 본 발명의 범위와 기술적 사상에서 벗어나지 않는 한도 내에서 다양한 변경이 가능하다. 그러므로 본 발명의 범위는 상술한 실시 예에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 한다.
10, 2150: 에러 정정 회로
110, 2152a: 심볼 구성부
120, 2152b: 노드 연산부
130, 2152c: 신드롬 체크부

Claims (40)

  1. 에러 정정 회로가 비이진 저밀도 패리티 체크(Non-Binary Low Density Parity Check; NB-LDPC) 코드를 이용하여 반복 복호(iterative decoding) 기법에 따른 에러 정정 디코딩을 수행하는 방법으로서,
    변수 노드에 변수 노드 값으로서 초기 심볼을 할당하는 단계;
    매 반복(iteration) 시작 시에, 상기 변수 노드에 할당된 초기 심볼을 기반으로, 상기 변수 노드 값으로서 선택될 수 있는 후보 심볼들의 제 1 신뢰도 값을 초기화하는 단계;
    상기 변수 노드에 연결된 체크 노드들로부터 수신되는 C2V(check to variable) 메시지들을 기반으로, 상기 후보 심볼들의 제 1 신뢰도 값을 갱신하는 단계; 및
    상기 갱신된 제 1 신뢰도 값이 제 1 임계 값 이상인 후보 심볼이 존재하는 경우, 상기 변수 노드 값을 상기 갱신된 제 1 신뢰도 값이 상기 제 1 임계 값 이상인 후보 심볼로 수정하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  2. 제 1 항에 있어서, 상기 제 1 신뢰도 값을 초기화하는 단계는,
    상기 변수 노드에 할당된 초기 심볼과 상기 후보 심볼들 간의 해밍 거리(hamming distance)를 고려하여, 상기 후보 심볼들의 제 1 신뢰도 값을 서로 다르게 초기화하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  3. 제 2 항에 있어서, 상기 제 1 신뢰도 값을 초기화하는 단계는,
    상기 초기 심볼과의 해밍 거리가 가까운 후보 심볼일수록 상기 제 1 신뢰도 값을 더 높게 초기화하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  4. 제 1 항에 있어서, 상기 제 1 신뢰도 값을 초기화하는 단계는,
    상기 반복의 회차를 고려하여, 상기 후보 심볼들의 제 1 신뢰도 값을 초기화하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  5. 제 4 항에 있어서, 상기 제 1 신뢰도 값을 초기화하는 단계는,
    상기 반복의 회차가 증가할수록 상기 제 1 신뢰도 값을 더 높게 초기화하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  6. 제 1 항에 있어서,
    상기 수정된 변수 노드 값을 이용하여 신드롬 체크를 수행하는 단계
    를 더 포함하는 에러 정정 회로의 동작 방법.
  7. 제 6 항에 있어서, 상기 제 1 신뢰도 값을 초기화하는 단계는,
    i(는 자연수)번째 반복에 대응하는 신드롬 체크가 페일되는 경우, 상기 i번째 반복에 대응하는 UCN(Unsatisfied Check Node)의 개수에 대응하여, i+1번째 반복 시작 시에 상기 제 1 신뢰도 값을 초기화하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  8. 제 7 항에 있어서, 상기 제 1 신뢰도 값을 초기화하는 단계는,
    상기 i번째 반복에 대응하는 UCN의 개수가 많을수록 상기 i+1번째 반복 시작 시에 상기 제 1 신뢰도 값을 더 높게 초기화하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  9. 제 6 항에 있어서,
    i(i는 자연수)번째 반복에 대응하는 신드롬 체크가 페일되는 경우, 상기 i번째 반복에 대응하는 UCN(Unsatisfied Check Node)의 개수에 대응하여, 상기 제 1 임계 값을 변경하는 단계
    를 더 포함하는 에러 정정 회로의 동작 방법.
  10. 제 9 항에 있어서, 상기 제 1 임계 값을 변경하는 단계는,
    상기 i번째 반복에 대응하는 UCN의 개수가 많을수록 i+1번째 반복 시작 시에 상기 제 1 임계 값을 더 높게 변경하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  11. 제 1 항에 있어서,
    상기 반복의 회차에 대응하여, 상기 제 1 임계 값을 변경하는 단계
    를 더 포함하는 에러 정정 회로의 동작 방법.
  12. 제 11 항에 있어서, 상기 제 1 임계 값을 변경하는 단계는,
    상기 반복의 회차가 증가할수록 상기 제 1 임계 값을 더 높게 변경하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  13. 제 1 항에 있어서,
    상기 변수 노드의 차수(degree)에 대응하여, 상기 제 1 임계 값을 설정하는 단계
    를 더 포함하는 에러 정정 회로의 동작 방법.
  14. 제 13 항에 있어서, 상기 제 1 임계 값을 설정하는 단계는,
    상기 변수 노드의 차수가 높을수록 상기 제 1 임계 값을 높게 설정하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  15. 제 1 항에 있어서,
    상기 갱신된 제 1 신뢰도 값이 제 1 임계 값 이상인 후보 심볼이 존재하지 않는 경우, 상기 갱신된 제 1 신뢰도 값이 상기 제 1 임계 값보다 작은 제 2 임계 값 이상인 후보 심볼이 존재하는지 확인하는 단계;
    상기 갱신된 제 1 신뢰도 값이 상기 제 2 임계 값 이상인 후보 심볼이 존재하는 경우, 상기 변수 노드에 제 2 신뢰도 값을 설정하는 단계; 및
    다음 반복에서 상기 후보 심볼들 중 어느 하나가 상기 제 2 임계 값 이상 상기 제 1 임계 값 미만의 제 1 신뢰도 값을 갖는 경우, 상기 변수 노드 값을 수정하는 단계
    를 더 포함하는 에러 정정 회로의 동작 방법.
  16. 제 15 항에 있어서, 상기 변수 노드 값을 수정하는 단계는,
    상기 변수 노드 값을, 상기 다음 반복에서 상기 제 2 임계 값 이상 상기 제 1 임계 값 미만의 제 1 신뢰도 값을 갖는 후보 심볼로 수정하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  17. 제 1 항에 있어서,
    상기 갱신된 제 1 신뢰도 값이 제 1 임계 값 이상인 후보 심볼이 존재하지 않는 경우, 상기 갱신된 제 1 신뢰도 값이 상기 제 1 임계 값보다 작은 제 2 임계 값 이상인 후보 심볼이 존재하는지 확인하는 단계;
    상기 갱신된 제 1 신뢰도 값이 상기 제 2 임계 값 이상인 후보 심볼이 존재하는 경우, 상기 변수 노드에 대응하는 제 2 신뢰도 값을 제 1 설정 값만큼 증가시키는 단계;
    상기 갱신된 제 1 신뢰도 값이 상기 제 2 임계 값 이상인 후보 심볼이 존재하지 않는 경우, 상기 갱신된 제 1 신뢰도 값이 상기 제 2 임계 값보다 작은 제 3 임계 값 이상인 후보 심볼이 존재하는지 확인하는 단계;
    상기 갱신된 제 1 신뢰도 값이 상기 제 3 임계 값 이상인 후보 심볼이 존재하는 경우, 상기 변수 노드에 대응하는 제 2 신뢰도 값을 제 2 설정 값만큼 증가시키는 단계; 및
    상기 제 1 설정 값 또는 상기 제 2 설정 값만큼 증가된 제 2 신뢰도 값이 제 4 임계 값 이상인 경우, 상기 변수 노드 값을 수정하는 단계
    를 더 포함하는 에러 정정 회로의 동작 방법.
  18. 제 17 항에 있어서, 상기 변수 노드 값을 수정하는 단계는,
    상기 제 2 신뢰도 값이 상기 제 1 설정 값만큼 증가된 경우, 상기 변수 노드의 값을 상기 제 1 임계 값 미만 상기 제 2 임계 값 이상인 후보 심볼로 수정하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  19. 제 17 항에 있어서, 상기 변수 노드 값을 수정하는 단계는,
    상기 제 2 신뢰도 값이 상기 제 2 설정 값만큼 증가된 경우, 상기 변수 노드의 값을 상기 제 2 임계 값 미만 상기 제 3 임계 값 이상인 후보 심볼로 수정하는 단계
    를 포함하는 에러 정정 회로의 동작 방법.
  20. 제 17 항에 있어서,
    상기 제 2 설정 값은, 상기 제 1 설정 값보다 작은
    에러 정정 회로의 동작 방법.
  21. 비이진 저밀도 패리티 체크(Non-Binary Low Density Parity Check; NB-LDPC) 코드를 이용하여 반복 복호(iterative decoding) 기법에 따른 에러 정정 디코딩을 수행하는 에러 정정 회로로서,
    변수 노드에 변수 노드 값으로서 할당할 초기 심볼을 구성하는 심볼 구성부;
    매 반복(iteration) 시작 시에, 상기 변수 노드에 할당된 초기 심볼을 기반으로, 상기 변수 노드 값으로서 선택될 수 있는 후보 심볼들의 제 1 신뢰도 값을 초기화하는 신뢰도 값 초기화부; 및
    상기 변수 노드에 연결된 체크 노드들로부터 수신되는 C2V(check to variable) 메시지들을 기반으로 상기 후보 심볼들의 제 1 신뢰도 값을 갱신하고, 상기 갱신된 제 1 신뢰도 값이 제 1 임계 값 이상인 후보 심볼이 존재하는 경우 상기 변수 노드 값을 상기 갱신된 제 1 신뢰도 값이 상기 제 1 임계 값 이상인 후보 심볼로 수정하는 심볼 수정부
    를 포함하는 에러 정정 회로.
  22. 제 21 항에 있어서, 상기 신뢰도 값 초기화부는,
    상기 변수 노드에 할당된 초기 심볼과 상기 후보 심볼들 간의 해밍 거리(hamming distance)를 고려하여, 상기 후보 심볼들의 제 1 신뢰도 값을 서로 다르게 초기화하는
    에러 정정 회로.
  23. 제 21 항에 있어서, 상기 신뢰도 값 초기화부는,
    상기 초기 심볼과의 해밍 거리가 가까운 후보 심볼일수록 상기 제 1 신뢰도 값을 더 높게 초기화하는
    에러 정정 회로.
  24. 제 21 항에 있어서, 상기 신뢰도 값 초기화부는,
    상기 반복의 회차를 고려하여, 상기 후보 심볼들의 제 1 신뢰도 값을 초기화하는
    에러 정정 회로.
  25. 제 24 항에 있어서, 상기 신뢰도 값 초기화부는,
    상기 반복의 회차가 증가할수록 상기 제 1 신뢰도 값을 더 높게 초기화하는
    에러 정정 회로.
  26. 제 21 항에 있어서,
    상기 수정된 변수 노드 값을 이용하여 신드롬 체크를 수행하는 신드롬 체크부
    를 더 포함하는 에러 정정 회로.
  27. 제 26 항에 있어서, 상기 신뢰도 값 초기화부는,
    i(i는 자연수)번째 반복에 대응하는 신드롬 체크가 페일되는 경우, 상기 i번째 반복에 대응하는 UCN(Unsatisfied Check Node)의 개수에 대응하여, i+1번째 반복 시작 시에 상기 제 1 신뢰도 값을 초기화하는
    에러 정정 회로.
  28. 제 27 항에 있어서, 상기 신뢰도 값 초기화부는,
    상기 i번째 반복에 대응하는 UCN의 개수가 많을수록 상기 i+1번째 반복 시작 시에 상기 제 1 신뢰도 값을 더 높게 초기화하는
    에러 정정 회로.
  29. 제 26 항에 있어서,
    i(i는 자연수)번째 반복에 대응하는 신드롬 체크가 페일되는 경우, 상기 i번째 반복에 대응하는 UCN(Unsatisfied Check Node)의 개수에 대응하여 상기 제 1 임계 값을 변경하는 임계 값 설정부
    를 더 포함하는 에러 정정 회로.
  30. 제 29 항에 있어서, 상기 임계 값 설정부는,
    상기 i번째 반복에 대응하는 UCN의 개수가 많을수록 i+1번째 반복 시작 시에 상기 제 1 임계 값을 더 높게 변경하는
    에러 정정 회로.
  31. 제 21 항에 있어서,
    상기 반복의 회차에 대응하여 상기 제 1 임계 값을 변경하는 임계 값 설정부
    를 더 포함하는 에러 정정 회로.
  32. 제 31 항에 있어서, 상기 임계 값 설정부는,
    상기 반복의 회차가 증가할수록 상기 제 1 임계 값을 더 높게 변경하는
    에러 정정 회로.
  33. 제 21 항에 있어서, 상기 임계 값 설정부는,
    상기 변수 노드의 차수(degree)에 대응하여, 상기 제 1 임계 값을 설정하는
    에러 정정 회로.
  34. 제 33 항에 있어서, 상기 임계 값 설정부는,
    상기 변수 노드의 차수가 높을수록 상기 제 1 임계 값을 높게 설정하는
    에러 정정 회로.
  35. 제 21 항에 있어서, 상기 심볼 수정부는,
    상기 갱신된 제 1 신뢰도 값이 제 1 임계 값 이상인 후보 심볼이 존재하지 않는 경우 상기 갱신된 제 1 신뢰도 값이 상기 제 1 임계 값보다 작은 제 2 임계 값 이상인 후보 심볼이 존재하는지 확인하고, 상기 갱신된 제 1 신뢰도 값이 상기 제 2 임계 값 이상인 후보 심볼이 존재하는 경우 상기 변수 노드에 제 2 신뢰도 값을 설정하며, 다음 반복에서 상기 후보 심볼들 중 어느 하나가 상기 제 2 임계 값 이상 상기 제 1 임계 값 미만의 제 1 신뢰도 값을 갖는 경우 상기 변수 노드 값을 수정하는
    에러 정정 회로.
  36. 제 35 항에 있어서, 상기 심볼 수정부는,
    상기 변수 노드 값을, 상기 다음 반복에서 상기 제 2 임계 값 이상 상기 제 1 임계 값 미만의 제 1 신뢰도 값을 갖는 후보 심볼로 수정하는
    에러 정정 회로.
  37. 제 21 항에 있어서, 상기 심볼 수정부는,
    상기 갱신된 제 1 신뢰도 값이 제 1 임계 값 이상인 후보 심볼이 존재하지 않는 경우 상기 갱신된 제 1 신뢰도 값이 상기 제 1 임계 값보다 작은 제 2 임계 값 이상인 후보 심볼이 존재하는지 확인하고, 상기 갱신된 제 1 신뢰도 값이 상기 제 2 임계 값 이상인 후보 심볼이 존재하는 경우 상기 변수 노드에 대응하는 제 2 신뢰도 값을 제 1 설정 값만큼 증가시키고, 상기 갱신된 제 1 신뢰도 값이 상기 제 2 임계 값 이상인 후보 심볼이 존재하지 않는 경우 상기 갱신된 제 1 신뢰도 값이 상기 제 2 임계 값보다 작은 제 3 임계 값 이상인 후보 심볼이 존재하는지 확인하고, 상기 갱신된 제 1 신뢰도 값이 상기 제 3 임계 값 이상인 후보 심볼이 존재하는 경우 상기 변수 노드에 대응하는 제 2 신뢰도 값을 제 2 설정 값만큼 증가시키고, 상기 제 1 설정 값 또는 상기 제 2 설정 값만큼 증가된 제 2 신뢰도 값이 제 4 임계 값 이상인 경우 상기 변수 노드 값을 수정하는
    에러 정정 회로.
  38. 제 37 항에 있어서, 상기 심볼 수정부는,
    상기 제 2 신뢰도 값이 상기 제 1 설정 값만큼 증가된 경우, 상기 변수 노드의 값을 상기 제 1 임계 값 미만 상기 제 2 임계 값 이상인 후보 심볼로 수정하는
    에러 정정 회로.
  39. 제 37 항에 있어서, 상기 심볼 수정부는,
    상기 제 2 신뢰도 값이 상기 제 2 설정 값만큼 증가된 경우, 상기 변수 노드의 값을 상기 제 2 임계 값 미만 상기 제 3 임계 값 이상인 후보 심볼로 수정하는
    에러 정정 회로.
  40. 제 37 항에 있어서,
    상기 제 2 설정 값은, 상기 제 1 설정 값보다 작은
    에러 정정 회로.
KR1020180094633A 2018-08-13 2018-08-13 에러 정정 회로 및 이의 동작 방법 KR20200019046A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020180094633A KR20200019046A (ko) 2018-08-13 2018-08-13 에러 정정 회로 및 이의 동작 방법
US16/395,640 US10826531B2 (en) 2018-08-13 2019-04-26 Error correction circuit and operating method thereof
CN201910515450.7A CN110830046B (zh) 2018-08-13 2019-06-14 纠错电路及其操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180094633A KR20200019046A (ko) 2018-08-13 2018-08-13 에러 정정 회로 및 이의 동작 방법

Publications (1)

Publication Number Publication Date
KR20200019046A true KR20200019046A (ko) 2020-02-21

Family

ID=69405171

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180094633A KR20200019046A (ko) 2018-08-13 2018-08-13 에러 정정 회로 및 이의 동작 방법

Country Status (3)

Country Link
US (1) US10826531B2 (ko)
KR (1) KR20200019046A (ko)
CN (1) CN110830046B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11031952B2 (en) 2019-06-04 2021-06-08 SK Hynix Inc. Error correction decoder and memory system having the same

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7827461B1 (en) * 2006-09-18 2010-11-02 Marvell International Ltd. Low-density parity-check decoder apparatus
GB2445005B (en) * 2006-12-19 2012-01-18 Martin Tomlinson Concatenated coding system
US8219873B1 (en) * 2008-10-20 2012-07-10 Link—A—Media Devices Corporation LDPC selective decoding scheduling using a cost function
US8850295B2 (en) 2012-02-01 2014-09-30 Lsi Corporation Symbol flipping data processor
US9203432B2 (en) * 2012-08-28 2015-12-01 Marvell World Trade Ltd. Symbol flipping decoders of non-binary low-density parity check (LDPC) codes
US8826109B2 (en) * 2012-09-04 2014-09-02 Lsi Corporation LDPC decoder irregular decoding of regular codes
US20140089757A1 (en) * 2012-09-22 2014-03-27 Lsi Corporation LDPC Decoder With Fractional Local Iterations
JP6367562B2 (ja) * 2013-01-31 2018-08-01 エルエスアイ コーポレーション 選択的なバイナリ復号および非バイナリ復号を用いるフラッシュ・メモリ内の検出および復号
TWI619353B (zh) * 2013-07-03 2018-03-21 Lsi公司 在低密度奇偶性校驗(ldpc)解碼器中之對數相似比(llr)抑制
EP2903166A1 (en) * 2014-02-03 2015-08-05 Centre National de la Recherche Scientifique (C.N.R.S.) Multiple-vote symbol-flipping decoder for non-binary LDPC codes
US20160087653A1 (en) 2014-07-28 2016-03-24 Lsi Corporation Decoder With Targeted Symbol Flipping Recovery Of Miscorrected Codewords
US10432353B2 (en) * 2014-12-04 2019-10-01 Samsung Display Co., Ltd. Memory-efficient methods of transporting error correction codes in a symbol encoded transmission stream
CN107733444B (zh) * 2016-08-11 2021-01-05 爱思开海力士有限公司 用于乘积码的软译码器参数优化
CN108173550A (zh) * 2017-12-27 2018-06-15 南京大学 一种适用于几乎所有nb-ldpc译码方法的通用简化方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11031952B2 (en) 2019-06-04 2021-06-08 SK Hynix Inc. Error correction decoder and memory system having the same

Also Published As

Publication number Publication date
US20200052716A1 (en) 2020-02-13
US10826531B2 (en) 2020-11-03
CN110830046B (zh) 2023-06-13
CN110830046A (zh) 2020-02-21

Similar Documents

Publication Publication Date Title
US11050438B2 (en) Memory controller
US11031952B2 (en) Error correction decoder and memory system having the same
US11128315B2 (en) Error correction decoder
CN110673979B (zh) 存储器控制器及其操作方法
US11309916B2 (en) Error correction circuit and memory controller having the same
KR102540772B1 (ko) 에러 정정 회로 및 이의 동작 방법
US11115064B2 (en) Error correction decoder and memory system having the same
US11239865B2 (en) Error correction circuit and operating method thereof
KR102592870B1 (ko) 에러 정정 회로 및 이의 동작 방법
US11804857B2 (en) Electronic device
US10826531B2 (en) Error correction circuit and operating method thereof
US11055164B2 (en) Error correction decoder and memory controller having the same
KR20210125294A (ko) 에러 정정 회로 및 이의 동작 방법

Legal Events

Date Code Title Description
A201 Request for examination