KR102511827B1 - Ldpc 디코더 및 스토리지 장치 - Google Patents

Ldpc 디코더 및 스토리지 장치 Download PDF

Info

Publication number
KR102511827B1
KR102511827B1 KR1020220008006A KR20220008006A KR102511827B1 KR 102511827 B1 KR102511827 B1 KR 102511827B1 KR 1020220008006 A KR1020220008006 A KR 1020220008006A KR 20220008006 A KR20220008006 A KR 20220008006A KR 102511827 B1 KR102511827 B1 KR 102511827B1
Authority
KR
South Korea
Prior art keywords
variable node
unit logic
order
variable
logic circuits
Prior art date
Application number
KR1020220008006A
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 US17/878,431 priority Critical patent/US11929762B2/en
Priority to TW111134030A priority patent/TW202322576A/zh
Priority to EP22208814.8A priority patent/EP4187795A1/en
Priority to CN202211467166.5A priority patent/CN116170029A/zh
Priority to KR1020230033089A priority patent/KR20230076805A/ko
Application granted granted Critical
Publication of KR102511827B1 publication Critical patent/KR102511827B1/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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • G06F7/501Half or full adders, i.e. basic adder cells for one denomination
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Mathematical Optimization (AREA)
  • Error Detection And Correction (AREA)

Abstract

LDPC(Low Density Parity Check) 디코더는, 이레귤러(irregular) 패리티 체크 행렬을 저장하는 메모리; 및 외부에서 수신된 코드워드의 값으로 변수 노드들을 초기화하고, 상기 패리티 체크 행렬을 참조하여 업데이트된 변수 노드들을 디코딩된 메시지로서 출력하는 메인 디코더를 포함하고, 상기 메인 디코더는 전체가 하나의 변수 노드를 업데이트하는 싱글 모드, 또는 각각이 서로 다른 변수 노드를 업데이트함으로써 복수의 변수 노드들을 병렬로 업데이트하는 멀티 모드로 동작하는 복수의 단위 논리 회로들, 및 변수 노드들 중 임계차수보다 큰 차수(degree)를 갖는 고차수 변수 노드는 상기 싱글 모드에서 업데이트하고, 상기 임계차수 이하의 차수를 갖는 저차수 변수 노드는 상기 멀티 모드에서 업데이트하도록 상기 복수의 단위 논리 회로들을 제어하는 모드 제어부를 포함한다.

Description

LDPC 디코더 및 스토리지 장치 {LOW DENSITY PARITY CHECK DECODER AND STORAGE DEVICE}
본 발명은 LDPC 디코더, 및 상기 LDPC 디코더를 포함하는 스토리지 장치에 관한 것이다.
반도체 메모리는 휘발성 메모리 장치 및 비휘발성 메모리 장치로 구분된다. 휘발성 메모리 장치는 전원이 차단되면 저장된 데이터를 잃지만, 비휘발성 메모리는 전원이 차단되더라도 저장된 데이터를 보존할 수 있다. 특히, 플래시 메모리는 높은 프로그래밍 속도, 낮은 전력 소비, 대용량 데이터 저장 등의 장점을 가지기 때문에, 컴퓨터 시스템 등에서 저장 매체로 광범위하게 사용되고 있다.
비휘발성 메모리의 메모리 셀들에 데이터를 프로그램하면, 메모리 셀들의 문턱 전압들은 일정한 범위의 문턱 전압 산포(threshold voltage distribution)를 형성한다. 문턱 전압 산포는 비휘발성 메모리의 동작이 지속되면서 열화될 수 있다. 문턱 전압 산포가 열화되는 경우, 기존에 정의해 둔 리드 레벨로 리드 동작을 수행하여 리드된 데이터에는 많은 에러 비트들이 포함될 수 있다.
상기 리드된 데이터에 에러 정정 디코딩을 수행함으로써 상기 리드된 데이터로부터 정확한 데이터를 획득할 수 있다. 에러 정정 디코딩의 예로는 LDPC(Low Density Parity Check) 디코딩이 있다. LDPC 디코딩은, 서로 연결된 변수 노드들과 체크 노드들의 업데이트를 반복 수행함으로써 데이터의 에러를 정정하는 디코딩 방식이다. 변수 노드들과 체크 노드들의 연결 관계는 패리티 체크 행렬에 의해 정의될 수 있다.
변수 노드들 각각에 연결된 체크 노드들의 수가 일정하지 않은 경우의 LDPC 코드는 이레귤러 LDPC 코드로 지칭될 수 있다. 변수 노드들 각각에 연결된 체크 노드들의 수가 서로 다르면, 각 변수 노드를 업데이트하기 위해 요구되는 연산량이 달라질 수 있다. 각 변수 노드를 업데이트하기 위해 요구되는 연산량이 다르다면, LDPC 디코더가 변수 노드들을 순차적으로 업데이트하는 경우에 LDPC 디코더의 연산 자원이 충분히 활용되지 못하는 때가 발생할 수 있다.
본 발명은 처리량(throughput)이 향상되고, 디코딩 레이턴시(latency)가 개선된 LDPC 디코더를 제공하고자 한다.
본 발명은, 상기 LDPC 디코더를 이용하여 메모리 셀에 저장된 데이터를 정확하고 신속하게 리드할 수 있는 스토리지 장치를 제공하고자 한다.
본 발명의 실시 예에 따른 LDPC(Low Density Parity Check) 디코더는, 이레귤러(irregular) 패리티 체크 행렬을 저장하는 메모리; 및 외부에서 수신된 코드워드의 값으로 변수 노드들을 초기화하고, 상기 패리티 체크 행렬을 참조하여 업데이트된 변수 노드들을 디코딩된 메시지로서 출력하는 메인 디코더를 포함하고, 상기 메인 디코더는 전체가 하나의 변수 노드를 업데이트하는 싱글 모드, 또는 각각이 서로 다른 변수 노드를 업데이트함으로써 복수의 변수 노드들을 병렬로 업데이트하는 멀티 모드로 동작하는 복수의 단위 논리 회로들, 및 변수 노드들 중 임계차수보다 큰 차수(degree)를 갖는 고차수 변수 노드는 상기 싱글 모드에서 업데이트하고, 상기 임계차수 이하의 차수를 갖는 저차수 변수 노드는 상기 멀티 모드에서 업데이트하도록 상기 복수의 단위 논리 회로들을 제어하는 모드 제어부를 포함한다.
본 발명의 실시 예에 따른 LDPC 디코더는, 이레귤러 LDPC 코드로 인코딩된 데이터를 버퍼링하고, 상기 데이터의 값을 변수 노드들로 제공하는 데이터 버퍼; 상기 변수 노드들에 연결된 체크 노드들을 업데이트하는 체크 노드 업데이트부; 상기 업데이트된 체크 노드들에 연결된 상기 변수 노드들을 업데이트하는 변수 노드 업데이트부; 및 상기 업데이트된 변수 노드들의 신드롬(syndrome) 체크 결과에 따라 상기 변수 노드들의 값을 디코딩된 데이터로서 외부로 출력하는 신드롬 체크부를 포함하고, 상기 변수 노드 업데이트부는 하나 이상의 단위 논리 회로 그룹을 포함하고, 변수 노드들 각각의 요구 연산량에 따라 하나의 단위 논리 회로 그룹이 한 주기에 하나의 변수 노드를 업데이트하거나, 상기 하나의 단위 논리 회로 그룹에 포함된 단위 논리 회로들 각각이 한 주기에 서로 다른 변수 노드를 병렬로 업데이트하도록 제어한다.
본 발명의 실시 예에 따른 스토리지 장치는, 이레귤러 LDPC 코드로 인코딩된 데이터를 저장하는 메모리 장치; 및 상기 메모리 장치로부터 출력된 데이터의 값으로 변수 노드들을 초기화하고, 상기 변수 노드들에 연결된 체크 노드들을 업데이트하고, 상기 변수 노드들 각각의 차수가 임계차수를 넘는지 여부에 따라 한 주기에 Q(Q는 자연수)개의 변수 노드를 업데이트하거나, 한 주기에 Q*K(K는 자연수)개의 변수 노드들을 동시에 업데이트하는 동작을 반복 수행함으로써 상기 변수 노드들을 업데이트하고, 상기 변수 노드들의 신드롬(syndrome) 체크 결과에 따라 상기 변수 노드들의 값을 외부로 출력하는 LDPC부를 포함한다.
본 발명의 실시 예에 따른 LDPC 디코더는 한 사이클에 하나의 고차수 변수 노드를 업데이트하거나, 복수의 저차수 변수 노드들을 동시에 업데이트함으로써 프로세싱 자원을 효율적으로 활용할 수 있다.
본 발명의 실시 예에 따른 LDPC 디코더는 복수의 저차수 변수 노드들을 동시에 업데이트할 수 있으므로, LDPC 디코더의 처리량이 향상되고 디코딩 레이턴시가 개선될 수 있다.
본 발명의 실시 예에 따른 스토리지 장치는, 디코딩 레이턴시가 개선된 LDPC 디코더를 이용하여 메모리 셀에 저장된 데이터를 신속하고 정확하게 리드할 수 있다.
본 발명이 해결하려는 과제들은 이상에서 언급한 과제로 제한되지 않으며, 언급되지 않은 또 다른 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
도 1은 본 발명의 실시 예들에 따른 LDPC 디코더를 나타내는 블록도이다.
도 2는 본 발명의 실시 예들에 따른 LDPC 디코더의 동작을 나타내는 흐름도이다.
도 3은 본 발명의 제1 실시 예에 따른 LDPC 디코더를 보다 자세히 설명하기 위한 블록도이다.
도 4는 태너 그래프(Tanner graph)로 표현되는 LDPC 디코딩을 나타내는 개념도이다.
도 5는 이레귤러(irregular) LDPC 코드의 태너 그래프를 나타내는 도면이다.
도 6a 및 도 6b는 도 5의 태너 그래프에서 서로 다른 차수를 갖는 변수 노드들을 보여주는 도면이다.
도 7은 도 5의 태너 그래프에 대응하는 패리티 체크 행렬을 나타내는 도면이다.
도 8은 LDPC 디코더의 동작을 나타내는 흐름도이다.
도 9a 및 도 9b는 본 발명의 제1 실시 예에 따른 LDPC 디코더의 변수 노드 업데이트 방법을 나타내는 흐름도이다.
도 10은 본 발명의 제1 실시 예에 따른 LDPC 디코딩 동작의 타이밍도이다.
도 11a 및 도 11b는 본 발명의 제1 실시 예에 따른 LDPC 디코더의 동작 모드에 따른 연산 자원 사용률을 나타내는 도면이다.
도 12는 본 발명의 제2 실시 예에 따른 패리티 체크 행렬을 나타내는 도면이다.
도 13은 본 발명의 제2 실시 예에 따른 LDPC 디코더를 보다 자세히 설명하기 위한 블록도이다.
도 14는 본 발명의 실시 예에 따른 스토리지 장치를 나타내는 블록도이다.
도 15는 도 14의 비휘발성 메모리를 보다 자세히 설명하기 위한 도면이다.
도 16은 본 발명의 일 실시 예에 따른 스토리지 장치에 적용될 수 있는 3D V-NAND 구조에 대해 설명하기 위한 도면이다.
도 17a 및 도 17b는 메모리 셀들의 문턱 전압 분포를 나타내는 도면이다.
도 18은 본 발명의 실시 예에 따른 스토리지 장치의 에러 정정 방법을 설명하기 위한 도면이다.
도 19는 본 발명의 실시 예에 따른 스토리지 장치를 보다 자세히 나타내는 블록도이다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시 예를 설명하기로 한다.
도 1은 본 발명의 실시 예들에 따른 LDPC(Low Density Parity Check) 디코더(100)를 나타내는 블록도이다.
도 1을 참조하면, LDPC 디코더(100)는 메인 디코더(110) 및 메모리(120)를 포함할 수 있다.
메모리(120)는 메인 디코더(110)가 에러 정정 디코딩을 수행하기 위해 필요한 데이터를 저장할 수 있다. 예를 들어, 메모리(120)는 LDPC 디코딩을 위한 패리티 체크 행렬(121)을 저장할 수 있다. 메모리(120)는 메인 디코더(110)의 요청에 따라, 디코딩 데이터를 메인 디코더(110)로 제공할 수 있다.
메인 디코더(110)는 외부로부터 코드워드(CW)를 수신할 수 있다. 그리고, 메인 디코더(110)는 메모리(120)로부터 디코딩 데이터를 수신할 수 있다. 메인 디코더(110)는 메모리(120)로부터의 데이터를 참조하여, 코드워드(CW)에 대해 에러 정정 디코딩을 수행할 수 있다.
예를 들어, 메인 디코더(110)는 패리티 체크 행렬(121)을 참조하여 체크 노드 업데이트 및 변수 노드 업데이트를 반복 수행함으로써 코드워드(CW)에 대한 에러 정정 디코딩을 수행할 수 있다. 메인 디코더(110)는 코드워드(CW)에 대한 에러 정정 디코딩에 성공하면, 에러가 정정된 데이터를 외부에 메시지(MSG)로서 출력할 수 있다.
한편, 패리티 체크 행렬(121)은 변수 노드들과 체크 노드들 간의 연결 관계를 나타낼 수 있다. 메인 디코더(110)는 패리티 체크 행렬(121)을 참조하여 체크 노드에 연결된 변수 노드들 간의 연산을 수행함으로써 체크 노드를 업데이트할 수 있으며, 변수 노드에 연결된 체크 노드들 간의 연산을 수행함으로써 변수 노드를 업데이트할 수 있다.
패리티 체크 행렬(121)은, 변수 노드들 각각에 연결된 체크 노드들의 개수에 따라 레귤러(regular) 패리티 체크 행렬과 이레귤러(irregular) 패리티 체크 행렬로 분류될 수 있다. 레귤러 패리티 체크 행렬은 변수 노드들 각각에 연결된 체크 노드들의 개수가 모두 동일한 행렬을 지칭할 수 있다. 그리고, 이레귤러 패리티 체크 행렬은 변수 노드들 각각에 연결된 체크 노드들의 개수가 서로 동일하지 않은 행렬을 지칭할 수 있다. 이하에서, 변수 노드에 연결된 체크 노드들의 개수는, 변수 노드의 차수(degree)로 지칭될 수도 있다.
변수 노드를 업데이트하기 위해서는 변수 노드에 연결된 체크 노드들에 대한 연산이 수행되어야 하므로, 변수 노드의 차수가 높을수록 해당 변수 노드를 업데이트하기에 많은 연산량이 요구될 수 있다. 메인 디코더(110)는 최대차수를 갖는 변수 노드를 한 주기에 업데이트하기에 충분한 연산 자원을 가질 수 있다. 예를 들어, 한 주기는 하나의 클럭 사이클을 지칭할 수 있다. 만약 메인 디코더(110)가 한 주기에 하나의 변수 노드를 업데이트한다면, 상대적으로 낮은 차수를 갖는 변수 노드를 업데이트하는 주기에는 메인 디코더(110)의 연산 자원이 충분히 활용되지 못할 수 있다.
본 발명의 실시 예에 따르면, 메인 디코더(110)는 복수의 단위 논리 회로들(111, 112) 및 모드 제어부(113)를 포함할 수 있다. 복수의 단위 논리 회로들(111, 112)은 변수 노드를 업데이트하기 위한 연산 자원을 제공할 수 있다. 복수의 단위 논리 회로들(111, 112)은 적어도 두 가지의 동작 모드를 지원할 수 있다. 예를 들어, 복수의 단위 논리 회로들(111, 112)은 전체로서 하나의 변수 노드를 업데이트하는 싱글 모드, 및 각각이 서로 다른 변수 노드를 업데이트함으로써 복수의 변수 노드들을 병렬로 업데이트하는 멀티 모드를 지원할 수 있다.
모드 제어부(113)는 복수의 단위 논리 회로들(111, 112)의 동작 모드를 제어할 수 있다. 본 발명의 실시 예에 따르면, 모드 제어부(113)는 변수 노드들 중 임계차수보다 큰 차수를 갖는 고차수 변수 노드는 상기 싱글 모드에서 업데이트하고, 상기 임계차수 이하의 차수를 갖는 저차수 변수 노드는 상기 멀티 모드에서 업데이트하도록 상기 복수의 단위 논리 회로들(111, 112)을 제어할 수 있다.
도 2는 본 발명의 실시 예들에 따른 LDPC 디코더의 동작을 나타내는 흐름도이다.
단계 S101에서, LDPC 디코더는 외부에서 수신된 코드워드들의 값으로 변수 노드들을 초기화할 수 있다. 단계 S102 내지 단계 S105에서, LDPC 디코더는 복수의 변수 노드들을 순차적으로 업데이트할 수 있다. 이하에서, 순차적으로 업데이트되는 변수 노드들 중 현재 업데이트하려는 변수 노드가 타겟 변수 노드로 지칭될 수 있다.
단계 S102에서, LDPC 디코더는 타겟 변수 노드의 차수가 임계차수(d)보다 큰지 여부를 판단할 수 있다. 예를 들어, LDPC 디코더는 내부에 저장된 패리티 체크 행렬을 참조하여 타겟 변수 노드의 차수를 결정하고, 결정된 차수를 임계차수(d)와 비교할 수 있다.
타겟 변수 노드가 임계차수(d)보다 큰 차수를 갖는 고차수 변수 노드(HDV)인 경우(단계 S102에서, "예"), 단계 S103에서 LDPC 디코더는 상기 타겟 변수 노드를 싱글 모드에서 갱신할 수 있다.
타겟 변수 노드가 임계차수(d) 이하의 차수를 갖는 저차수 변수 노드(LDV)인 경우(단계 S102에서, "아니오"), 단계 S104에서 LDPC 디코더는 상기 타겟 변수 노드를 포함하는, 둘 이상의 저차수 변수 노드들을 멀티 모드에서 업데이트할 수 있다. 즉, 한 주기에서 둘 이상의 저차수 변수 노드들이 병렬로 업데이트될 수 있다.
단계 S105에서, LDPC 디코더는 모든 변수 노드들이 업데이트되었는지 여부를 판단할 수 있다. 모든 변수 노드들이 업데이트되지는 않은 경우(단계 S105에서, "아니오"), LDPC 디코더는 단계 S102로 돌아가서 업데이트되지 않은 변수 노드들을 업데이트할 수 있다.
모든 변수 노드들이 업데이트된 경우(단계 S105에서, "예"), LDPC 디코더는 변수 노드 업데이트를 완료할 수 있다. 단계 S106에서, LDPC 디코더는 업데이트된 변수 노드들의 값을 디코딩된 메시지로서 외부로 출력할 수 있다.
본 발명의 실시 예에 따르면, LDPC 디코더는 고차수 변수 노드를 업데이트하기에 충분한 연산 자원을 이용하여 복수의 저차수 변수 노드들을 병렬로 업데이트할 수 있다. LDPC 디코더는 저차수 변수 노드를 업데이트하는 주기에도 내부 연산 자원을 충분히 활용할 수 있다. 따라서, LDPC 디코더의 처리량(throughput)이 향상될 수 있으며, 코드워드의 에러가 신속하게 정정될 수 있다.
이하에서, 도 3 내지 도 13을 참조하여 본 발명의 실시 예들에 따른 LDPC 디코더가 보다 자세히 설명된다.
도 3은 본 발명의 제1 실시 예에 따른 LDPC 디코더를 보다 자세히 설명하기 위한 블록도이다.
도 3은 LDPC 디코더에 포함될 수 있는 메인 디코더(1100)를 나타낸다. 메인 디코더(1100)는 도 1을 참조하여 설명된 메인 디코더(110)에 대응할 수 있다.
메인 디코더(1100)는 데이터 버퍼(1110), 변수 노드 업데이트부(1120), 체크 노드 업데이트부(1130), 체크 노드 전달부(1140) 및 신드롬 체크부(1150)를 포함할 수 있다.
데이터 버퍼(1110)는 외부로부터 수신된 코드워드(CW)를 버퍼링할 수 있다. 코드워드(CW)는 LDPC 디코더에 의해 인코딩된 데이터일 수 있으며, 메시지에 패리티가 부가된 데이터일 수 있다. 데이터 버퍼(1110)는 외부로부터 코드워드(CW)의 비트들 각각에 대응하는 로그 우도비(LLR: Log Likelihood Ratio)를 더 수신하여 버퍼링할 수 있다.
변수 노드 업데이트부(1120)는 코드워드(CW) 및 로그 우도비에 기초하여 변수 노드들을 초기화할 수 있다. 변수 노드들은 코드워드(CW)의 비트들에 대응할 수 있다.
체크 노드 업데이트부(1130)는 데이터 버퍼(1110)에 저장된 변수 노드들의 값들을 이용하여 체크 노드들의 값들을 업데이트할 수 있다. 예를 들어, 체크 노드 업데이트부(1130)는 체크 노드에 상기 연결된 변수 노드들 간의 최솟값(min) 연산을 수행함으로써 상기 체크 노드를 업데이트할 수 있다.
체크 노드 전달부(1140)는 체크 노드 업데이트부(1130)에 의해 업데이트된 체크 노드들의 값을 변수 노드 업데이트부(1120)로 전달할 수 있다.
변수 노드 업데이트부(1120)는 체크 노드 전달부(1140)로부터의 메시지들에 기초하여 변수 노드들을 업데이트할 수 있다. 본 발명의 실시 예에 따르면, 변수 노드 업데이트부(1120)는 복수의 단위 논리 회로들(1121, 1122), 모드 제어부(1123) 및 복수의 체크 노드 버퍼들(1124, 1125)을 포함할 수 있다.
복수의 단위 논리 회로들(1121, 1122) 및 모드 제어부(1123)는 도 1을 참조하여 설명된 복수의 단위 논리 회로들(111, 112) 및 모드 제어부(113)에 대응할 수 있다. 즉, 복수의 단위 논리 회로들(1121, 1122)은 전체로서 하나의 변수 노드를 업데이트하는 싱글 모드로 동작하거나, 각각이 하나씩의 변수 노드를 업데이트함으로써 복수의 변수 노드들을 업데이트하는 멀티 모드로 동작할 수 있다. 모드 제어부(113)는 업데이트하려는 타겟 변수 노드의 차수에 기초하여 복수의 단위 논리 회로들(1121, 1122)이 싱글 모드 또는 멀티 모드로 동작하도록 제어할 수 있다.
타겟 변수 노드가 고차수 변수 노드인 경우에 복수의 단위 논리 회로들(1121, 1122)이 싱글 모드로 동작할 수 있다. 도 4 내지 도 8을 참조하여 보다 자세히 설명될 것이나, 변수 노드를 업데이트하기 위해서는 상기 변수 노드에 연결된 체크 노드들에 대한 합(sum) 연산이 수행될 수 있다. 타겟 변수 노드에 연결된 체크 노드들은 제1 체크 노드들과 제2 체크 노드들로 나뉠 수 있다. 싱글 모드에서, 제1 단위 논리 회로(1121)는 상기 제1 체크 노드들에 대한 합 연산을 수행하고, 제2 단위 논리 회로(1122)는 상기 제2 체크 노드들에 대한 합 연산을 수행함으로써 상기 타겟 변수 노드를 업데이트할 수 있다.
타겟 변수 노드가 저차수 변수 노드인 경우에 복수의 단위 논리 회로들(1121, 1122)이 멀티 모드로 동작할 수 있다. 예를 들어, 저차수 변수 노드인 제1 및 제2 타겟 변수 노드들이 복수의 단위 논리 회로들(1121, 1122)에서 병렬로 업데이트될 수 있다. 구체적으로, 멀티 모드에서, 제1 단위 논리 회로(1121)는 상기 제1 타겟 변수 노드에 연결된 체크 노드들의 합 연산을 수행하고, 제2 단위 논리 회로(1122)는 상기 제2 타겟 변수 노드에 연결된 체크 노드들의 합 연산을 수행할 수 있다.
복수의 단위 논리 회로들(1121, 1122) 각각은 체크 노드들의 합 연산을 수행하기 위해서, 둘 이상의 입력들을 갖는 가산기를 포함할 수 있다.
복수의 체크 노드 버퍼들(1124, 1125)은 체크 노드 전달부(1140)로부터 전달되는 체크 노드들의 값을 버퍼링할 수 있다. 구체적으로, 제1 체크 노드 버퍼(1124)는 제1 단위 논리 회로(1121)와 전기적으로 연결될 수 있으며, 제1 단위 논리 회로(1121)에서 연산될 체크 노드들의 값을 버퍼링할 수 있다. 그리고, 제2 체크 노드 버퍼(1125)는 제2 단위 논리 회로(1122)와 전기적으로 연결될 수 있으며, 제2 단위 논리 회로(1122)에서 연산될 체크 노드들의 값을 버퍼링할 수 있다.
한편, 도 3에서는 생략되었으나, 변수 노드 업데이트부(1120)는 싱글 모드에서 복수의 단위 논리 회로들(111, 112)에 의한 제1 체크 노드들과 제2 체크 노드들의 연산 결과를 종합하기 위한 가산기를 더 포함할 수 있다. 그리고, 변수 노드 업데이트부(1120)는 업데이트된 변수 노드들의 값의 크기에 따라 업데이트된 변수 노드들 각각을 0 또는 1로 양자화하기 위한 양자화기(quantizer)를 더 포함할 수 있다. 양자화된 데이터는 디코딩된 데이터로서 외부로 출력될 수 있다.
신드롬 체크부(1150)는 변수 노드 업데이트부(1120)로부터 디코딩된 데이터를 획득하고, 획득된 데이터에 대한 패리티 체크 연산을 수행할 수 있다. 신드롬 체크부(1150)는 LDPC 디코더에 저장된 패리티 체크 행렬과 상기 획득된 데이터의 각 비트들에 대한 행렬 연산을 수행함으로써 신드롬 벡터를 획득할 수 있다. 예를 들어, 신드롬 벡터의 모든 성분들이 '0' 값을 갖는 경우 디코딩된 데이터는 올바른 값을 갖는 것으로 판단될 수 있으며, 신드롬 벡터의 성분들 중 하나라도 '0' 값을 갖지 않는 경우 디코딩된 데이터에는 에러가 있는 것으로 판단될 수 있다.
신드롬 체크부(1150)는 디코딩된 데이터에 에러가 없는 것으로 판단되면, 디코딩된 데이터를 에러 정정된 메시지(MSG)로서 외부로 출력할 수 있다. 반면에, 신드롬 체크부(1150)는 디코딩된 데이터에 에러가 있는 것으로 판단되면, 체크 노드 업데이트 및 변수 노드 업데이트를 반복 수행하도록 체크 노드 업데이트부(1130)로 신호를 제공할 수 있다.
이하에서, 도 4 내지 도 8을 참조하여 LDPC 디코더의 동작이 보다 자세히 설명된다.
도 4는 태너 그래프(Tanner graph)로 표현되는 LDPC 디코딩을 나타내는 개념도이다.
LDPC 코드는 상기 LDPC 코드를 정의하는 패리티 체크 행렬의 각 행과 열에 '1'의 수가 매우 적은 부호를 지칭할 수 있다. 도 4를 참조하면, LDPC 코드는 체크 노드들(610), 변수 노드들(620)을 포함하고, 상기 체크 노드들(610)과 변수 노드들(620)을 연결하는 엣지(615)들로 구성된 태너 그래프에 의해 그 구조가 정의될 수 있다.
체크 노드 업데이트 후에 상기 체크 노드(610)로부터 변수 노드(620)로 전달되는 값은 체크 노드 메시지(615A)이고, 변수 노드 업데이트 후에 상기 변수 노드(620)로부터 체크 노드(610)로 전달되는 값은 변수 노드 메시지(615B)이다.
도 5는 LDPC 코드의 태너 그래프를 나타내는 도면이다.
도 5를 참조하면, LDPC 코드의 태너 그래프는 정해진 LDPC 코드의 패리티 체크 식을 나타내는 15개의 체크 노드들(C1-C15)과, 코드워드의 각 심볼을 나타내는 9개의 변수 노드들(V1-V9), 그리고 이들의 연결관계를 나타내는 엣지들로 이루어진다. 상기 엣지들은 패리티 체크 행렬에 따라 체크 노드들(C1-C15)과 변수 노드들(V1-V9)을 연결할 수 있다. 변수 노드들(V1-V9)의 초깃값은 하드 디시젼 데이터 또는 소프트 디시젼 데이터일 수 있다. 한편, 도 5에 도시된 변수 노드들 및 체크 노드들의 개수는 예시에 불과하며, LDPC 코드는 수만 개의 변수 노드들 및 수천 개의 체크 노드들을 포함할 수도 있다.
도 5는, 체크 노드들(C1-C15) 각각에 연결된 변수 노드의 수가 상이하고, 변수 노드들(V1-V9) 각각에 연결된 변수 노드의 수가 상이한 이레귤러(irregular) LDPC 코드를 예시한다. 즉, 도 5의 태너 그래프가 나타내는 LDPC 코드에서, 변수 노드들은 상이한 차수를 가질 수 있다.
도 6a 및 도 6b는 도 5의 태너 그래프에서 서로 다른 차수를 갖는 변수 노드들을 보여주는 도면이다.
도 6a는 도 5의 태너 그래프에서 제1 변수 노드(V1)와 체크 노드들 간의 연결관계를 나타내는 엣지들을 굵은 선으로 도시한다. 도 6a를 참조하면, 제1 변수 노드(V1)은 9개의 체크 노드들(C1, C2, C4, C5, C6, C8, C10, C11, C15)과 연결될 수 있으며, 제1 변수 노드(V1)의 차수는 '9'일 수 있다.
도 6b는 도 5의 태너 그래프에서 제3 변수 노드(V3)과 체크 노드들 간의 연결관계를 나타내는 엣지들을 굵은 선으로 도시한다. 도 6b를 참조하면, 제3 변수 노드(V3)는 4개의 체크 노드들(C2, C7, C8, C12)과 연결될 수 있으며, 제3 변수 노드(V3)의 차수는 '4'일 수 있다.
도 7은 도 5의 태너 그래프에 대응하는 패리티 체크 행렬을 나타내는 도면이다.
패리티 체크 행렬은 복수의 컬럼(column)들과 복수의 로우(row)들을 포함할 수 있다. 복수의 컬럼들은 변수 노드들(V1-V9)에 대응할 수 있으며, 복수의 로우들은 체크 노드들(C1-C15)에 대응할 수 있다. 도 7의 패리티 체크 행렬에서, 서로 연결된 변수 노드와 체크 노드가 교차하는 지점의 성분은 '1' 값을 가질 수 있으며, 서로 연결되지 않은 변수 노드와 체크 노드가 교차하는 지점의 성분은 '0' 값을 가질 수 있다. 도 7에서는 '1' 이 있는 지점에는 패턴이 도시되고, '0'이 있는 지점에는 아무런 패턴이 도시되지 않는다.
도 5에 도시된 태너 그래프와 유사하게, 도 7에 도시된 패리티 체크 행렬의 각 컬럼에는 서로 다른 개수의 '1'이 있을 수 있다. 즉, 변수 노드들의 차수가 서로 다를 수 있다. 예를 들어, 제1 변수 노드(V1)의 컬럼에 있는 9개의 '1'은 제1 변수 노드(V1)에 연결된 9개의 체크 노드들을 나타낼 수 있다. 다른 예로, 제3 변수 노드(V3)의 컬럼에 있는 4개의 '1'은 제3 변수 노드(V3)에 연결된 4개의 체크 노드들을 나타낼 수 있다.
하나의 변수 노드를 업데이트하기 위해 요구되는 연산량은 상기 변수 노드들에 연결된 체크 노드들의 수, 즉 상기 변수 노드의 차수에 기초하여 결정될 수 있다. 예를 들어, 제1 변수 노드(V1)를 업데이트하기 위해서는 9개의 체크 노드들로부터의 메시지에 대한 연산을 수행할 수 있으며, 제3 변수 노드(V3)를 업데이트하기 위해서는 4개의 체크 노드들로부터의 메시지에 대한 연산을 수행할 수 있다. 따라서, 변수 노드의 차수가 높을수록 상기 변수 노드를 업데이트하기 위해 요구되는 연산량이 증가할 수 있다.
본 발명의 실시 예에 따르면, LDPC 디코더는 복수의 단위 논리 회로들이 한 주기에 요구 연산량이 임계 연산량보다 큰 하나의 고차수 변수 노드를 업데이트하거나, 한 주기에 요구 연산량이 임계 연산량 이하인 둘 이상의 저차수 변수 노드를 업데이트하도록 제어할 수 있다. 저차수 변수 노드를 업데이트할 때도 복수의 단위 논리 회로들이 제공하는 연산 자원이 충분히 활용될 수 있으므로, LDPC 디코더의 처리량이 증가할 수 있다.
한편, 어떤 변수 노드가 고차수 변수 노드인지 또는 저차수 변수 노드인지는 다른 변수 노드들과의 관계에서 상대적으로 결정될 수 있다. 예를 들어, 도 7의 예에서 변수 노드들은 2, 3, 4, 8, 9 중 하나의 차수를 가질 수 있다. 복수의 단위 논리 회로들은 한 주기에 최고 차수 '9'를 갖는 변수 노드를 업데이트하기에 충분한 연산 자원을 제공할 수 있다.
만약 LDPC 디코더가 균등한 연산 자원을 갖는 2개의 단위 논리 회로들을 포함하는 경우, 하나의 단위 논리 회로는 2 내지 4의 차수를 갖는 변수 노드를 업데이트하기에 충분한 연산 자원을 가질 수 있다. 예를 들어, 2개의 단위 논리 회로들은 각각 5개의 입력들을 갖는 가산기를 포함할 수 있다. 상기 2개의 단위 논리 회로들은 총 10개의 입력들을 처리할 수 있으므로, 싱글 모드로 9의 차수를 갖는 변수 노드를 업데이트할 수 있으며, 멀티 모드로 2 내지 4의 차수를 갖는 변수 노드들을 업데이트할 수 있다.
위의 예에서, LDPC 디코더는 8 또는 9의 차수를 갖는 변수 노드는 고차수 변수 노드로서 복수의 단위 논리 회로들 전부를 이용하여 업데이트할 수 있다. 반면에, LDPC 디코더는 복수의 단위 논리 회로들 각각이 2 내지 4의 차수를 갖는 변수 노드들을 저차수 변수 노드들로서 병렬로 업데이트할 수 있다.
즉, 고차수 변수 노드와 저차수 변수 노드를 구분하기 위한 임계차수는 변수 노드들의 차수들 중 최대차수 및 상기 복수의 단위 논리 회로들의 개수에 기초하여 결정될 수 있다. 특히, 단위 논리 회로들이 가산기를 포함하는 경우 상기 임계차수는 상기 가산기의 입력들의 수를 넘지 않을 수 있다. 바꾸어 말하면, 임계 연산량은 단위 논리 회로 각각의 최대 연산량을 넘지 않을 수 있다.
도 8은 LDPC 디코더의 동작을 나타내는 흐름도이다.
LDPC 디코더는 변수 노드들과 체크 노드들이 각 노드별로 생성 및 업데이트한 메시지들을 교환하는 과정을 반복함으로써 LDPC 디코딩을 수행할 수 있다. 변수 노드 업데이트와 체크 노드 업데이트는 다양한 방법에 의해 수행될 수 있지만, 이하에서는 최소합(min-sum) 방법에 의해 변수 노드들과 체크 노드들이 업데이트되는 경우를 예로 들어 LDPC 디코더의 동작이 설명된다.
단계 S201에서, LDPC 디코더는 변수 노드들을 외부에서 수신된 코드워드의 값들로 초기화할 수 있다. 각 변수 노드는 코드워드의 각 비트에 대응할 수 있다.
단계 S202에서, LDPC 디코더는 최솟값(min) 연산을 이용하여 체크 노드들을 업데이트할 수 있다. 예를 들어, LDPC 디코더는 체크 노드에서 타겟 변수 노드로 메시지를 전달할 때, 상기 체크 노드에 연결된 변수 노드들 중 상기 타겟 변수 노드를 제외한 나머지 변수 노드들 중 최솟값을 상기 메시지로서 전달할 수 있다. LDPC 디코더는 이러한 메시지 전달을 위해, 체크 노드에 연결된 변수 노드들의 값들 중 최솟값, 준최솟값, 그리고 상기 최솟값의 부호를 저장할 수 있다.
단계 S203에서, LDPC 디코더는 합(sum) 연산을 이용하여 변수 노드들을 업데이트할 수 있다. 예를 들어, LDPC 디코더는 변수 노드에서 타겟 체크 노드로 메시지를 전달할 때, 상기 변수 노드에 연결된 체크 노드들 중 상기 타겟 체크 노드를 제외한 나머지 변수 노드들의 합을 상기 메시지로서 전달할 수 있다. LDPC 디코더는 이러한 메시지 전달을 위해, 변수 노드에 연결된 체크 노드들의 값들의 합 연산을 수행할 수 있다.
본 발명의 실시 예에 따라 복수의 단위 논리 회로들을 이용하여 변수 노드들을 업데이트하는 방법의 예들은 도 9a 및 도 9b를 참조하여 후술된다.
단계 S204에서, LDPC 디코더는 업데이트된 변수 노드들의 값에 기초하여 신드롬 체크를 수행함으로써 LDPC 디코딩 성공 여부를 판단할 수 있다. 예를 들어, LDPC 디코더는 상기 변수 노드들의 값을 양자화하고, 패리티 체크 행렬과 양자화된 값들의 곱(product) 연산을 수행함으로써 신드롬 벡터를 생성할 수 있다. LDPC 디코더는 신드롬 벡터가 영벡터인 경우 LDPC 디코딩이 성공한 것으로 판단하고, 그렇지 않은 경우 LDPC 디코딩이 실패한 것으로 판단할 수 있다.
LDPC 디코딩이 성공한 경우(단계 S204에서, "예"), LDPC 디코더는 상기 양자화된 값들을 디코딩된 데이터로서 외부로 출력할 수 있다.
반면에, LDPC 디코딩이 실패한 경우(단계 S204에서, "아니오"), LDPC 디코더는 단계 S202로 돌아가 체크 노드 업데이트, 변수 노드 업데이트 및 신드롬 체크를 반복 수행할 수 있다.
도 9a 및 도 9b는 본 발명의 제1 실시 예에 따른 LDPC 디코더의 변수 노드 업데이트 방법을 나타내는 흐름도이다.
도 9a의 예에서, LDPC 디코더는 변수 노드들을 패리티 체크 행렬의 컬럼 순서대로 업데이트할 수 있다.
단계 S301에서, LDPC 디코더의 모드 제어부는 첫 번째 변수 노드부터 업데이트하기 위한 초기화를 수행할 수 있다.
단계 S302에서, 상기 모드 제어부는 i(i는 자연수)번째 변수 노드, 즉 업데이트하려는 타겟 변수 노드의 차수가 임계차수(d)보다 큰지 여부를 판단할 수 있다.
타겟 변수 노드가 임계차수(d)보다 큰 차수를 갖는 고차수 변수 노드인 경우(단계 S302에서, "예"), 상기 모드 제어부는 단계 S303에서 상기 복수의 단위 논리 회로들이 상기 타겟 변수 노드를 싱글 모드로 업데이트하도록 제어할 수 있다.
반면에, 타겟 변수 노드가 임계차수(d) 이하의 차수를 갖는 저차수 변수 노드인 경우(단계 S302에서, "아니오"), 상기 모드 제어부는 단계 S304에서 상기 저차수 변수 노드의 업데이트를 스킵할지 여부를 결정할 수 있다.
예를 들어, 이미 스킵된 저차수 변수 노드가 있는 경우(단계 S304에서, "예"), 상기 모드 제어부는 단계 S304에서 상기 스킵된 변수 노드와 상기 타겟 변수 노드를 멀티 모드로, 즉 병렬로 업데이트하도록 상기 복수의 단위 논리 회로들을 제어할 수 있다.
반면에, 스킵된 저차수 변수 노드가 없는 경우(단계 S304에서, "아니오"), 상기 모드 제어부는 상기 타겟 변수 노드와 병렬로 업데이트될 수 있는 저차수 변수 노드가 확인될 때까지 상기 타겟 변수 노드의 업데이트를 스킵할 수 있다.
단계 S307에서, 상기 모드 제어부는 모든 변수 노드들이 업데이트되었는지 여부를 결정할 수 있다. 모든 변수 노드들이 업데이트되지는 않은 경우(단계 S307에서, "아니오"), 상기 모드 제어부는 단계 S308을 수행함으로써 다음 차례의 변수 노드를 업데이트할 수 있다. 반면에, 모든 변수 노드들이 업데이트된 경우(단계 S307에서, "예"), 상기 모드 제어부는 변수 노드 업데이트를 완료할 수 있다.
도 9b의 예에서, LDPC 디코더는 변수 노드들을 차수의 내림차순으로 업데이트할 수 있다.
LDPC 디코더의 모드 제어부는, 단계 S401에서 변수 노드들을 차수의 내림차순으로 정렬하고, 단계 S402에서 최고 차수를 갖는 변수 노드부터 업데이트하기 위한 초기화를 수행할 수 있다.
단계 S403에서, 상기 모드 제어부는 i번째 변수 노드, 즉 타겟 변수 노드의 차수가 임계차수(d)보다 큰지 여부를 결정할 수 있다.
타겟 변수 노드가 임계차수(d)보다 큰 차수를 갖는 고차수 변수 노드인 경우(단계 S403에서, "예"), 상기 모드 제어부는 단계 S404에서 상기 복수의 단위 논리 회로들이 상기 타겟 변수 노드를 싱글 모드로 업데이트하도록 제어할 수 있다.
단계 S405에서, 상기 모드 제어부는 모든 변수 노드들이 업데이트되었는지 여부를 결정할 수 있다. 모든 변수 노드들이 업데이트된 경우(단계 S405에서, "예"), 상기 모드 제어부는 변수 노드 업데이트를 완료할 수 있다. 반면에, 모든 변수 노드들이 업데이트되지는 않은 경우(단계 S405에서, "아니오"), 상기 모드 제어부는 단계 S406을 수행함으로써 다음 차례의 변수 노드를 업데이트할 수 있다.
타겟 변수 노드가 임계차수(d) 이하의 차수를 갖는 저차수 변수 노드인 경우(단계 S403에서, "아니오"), 상기 타겟 변수 노드의 다음 차례의 변수 노드 또한 저차수 변수 노드일 수 있다. 상기 모드 제어부는 단계 S407에서 상기 복수의 단위 논리 회로들이 상기 타겟 변수 노드 및 다음 차례의 변수 노드를 멀티 모드로 업데이트하도록 제어할 수 있다.
단계 S408에서, 상기 모드 제어부는 모든 변수 노드들이 업데이트되었는지 여부를 결정할 수 있다. 모든 변수 노드들이 업데이트되지는 않은 경우(단계 S408에서, "아니오"), 상기 모드 제어부는 단계 S409를 수행함으로써 다음 차례의 변수 노드를 업데이트할 수 있다. 반면에, 모든 변수 노드들이 업데이트된 경우(단계 S408에서, "예"), 상기 모드 제어부는 변수 노드 업데이트를 완료할 수 있다.
본 발명의 실시 예에 따르면, LDPC 디코더는 변수 노드들을 정해진 순서대로 업데이트하는 과정에서 타겟 변수 노드의 차수에 따라 복수의 단위 회로들의 동작 모드를 실시간으로 전환할 수 있다. LDPC 디코더는 한 주기에 고차수 변수 노드를 업데이트할 수 있는 연산 자원을 이용하여 한 주기에 복수의 저차수 변수 노드들을 업데이트할 수 있다. 따라서, 변수 노드들을 업데이트하는 데 요구되는 시간이 감소되고, LDPC 디코더의 연산 자원이 효과적으로 이용될 수 있다.
도 10은 본 발명의 제1 실시 예에 따른 LDPC 디코딩 동작의 타이밍도이다.
도 10은 7개의 시점(t0-t6)에 의해 구분되는 6개의 시구간들을 나타낸다. 각 시구간은 변수 노드를 업데이트하기 위한 한 주기에 대응할 수 있다. 도 10은 변수 노드들(V1-V9)이 6개의 시구간들 중에 어느 시구간에서 업데이트되는지를 나타낸다. 변수 노드들(V1-V9)은 도 5 내지 도 7에 도시된 변수 노드들(V1-V9)에 대응할 수 있다. 즉, 변수 노드들(V1, V2, V4)은 고차수 변수 노드일 수 있고, 변수 노드들(V3, V5-V9)은 저차수 변수 노드일 수 있다.
도 10을 참조하면, 고차수 변수 노드들은 시구간 t0-t1, 시구간 t1-t2, 시구간 t2-t3에서 하나씩 업데이트될 수 있다. 반면에, 저차수 변수 노드들은 시구간 t3-t4, 시구간 t4-t5, 시구간 t5-t6에서 두 개씩 병렬로 업데이트될 수 있다. 도 10의 예에서, 저차수 변수 노드들을 병렬로 업데이트함으로써 9개의 변수 노드들(V1-V9)을 여섯 주기 동안에 업데이트할 수 있다. 본 발명의 실시 예에 따르면, 한 주기 동안 하나씩의 변수 노드를 업데이트하는 경우에 비해, 변수 노드 업데이트 시간이 33% 정도 단축될 수 있다. 따라서, LDPC 디코더의 디코딩 성능이 향상될 수 있다.
도 11a 및 도 11b는 본 발명의 제1 실시 예에 따른 LDPC 디코더의 동작 모드에 따른 연산 자원 사용률을 나타내는 도면이다.
도 11a는 LDPC 디코더의 변수 노드 업데이트부가 고차수 변수 노드인 제1 변수 노드(V1)를 싱글 모드로 업데이트하는 경우의 연산 자원 사용률을 예시한다. 변수 노드 업데이트부가 2개의 단위 논리 회로들을 포함하고, 각 단위 논리 회로들이 5개의 입력들을 갖는 가산기를 포함하는 경우를 예로 들면, 변수 노드 업데이트부는 한 주기에 10개의 입력들에 대한 합 연산을 수행할 수 있다.
도 11a의 단위 논리 회로들에 도시된 음영은 단위 논리 회로들 각각의 연산 자원 사용률을 대략적으로 나타낸다. 차수가 9인 제1 변수 노드(V1)를 업데이트하기 위해 9개의 체크 노드들에 대한 합 연산이 수행될 수 있으므로, 제1 변수 노드(V1)를 업데이트하기 위해 단위 논리 회로들이 제공하는 연산 자원의 총 90% 정도가 사용될 수 있다.
도 11b는 LDPC 디코더의 변수 노드 업데이트부가 저차수 변수 노드인 제6 및 제7 변수 노드(V6, V7)를 멀티 모드로 업데이트하는 경우의 연산 자원 사용률을 대략적으로 나타낸다. 변수 노드 업데이트부가 2개의 단위 논리 회로들을 포함하고, 각 단위 논리 회로들이 5개의 입력들을 갖는 가산기를 포함할 수 있다. 제1 단위 논리 회로는 차수가 4인 제6 변수 노드(V6)를 업데이트하기 위해 4개의 체크 노드들에 대한 합 연산을 수행할 수 있으며, 제2 단위 논리 회로는 차수가 3인 제7 변수 노드(V7)를 업데이트하기 위해 3개의 체크 노드들에 대한 합 연산을 수행할 수 있다. LDPC 디코더는 제6 및 제7 변수 노드(V6, V7)를 동시에 업데이트하면서, 단위 논리 회로들이 제공하는 연산 자원의 총 70% 정도를 사용할 수 있다.
본 발명의 실시 예에 따르면, LDPC 디코더는 저차수 변수 노드를 업데이트하는 경우에도 단위 논리 회로들이 제공하는 연산 자원을 효율적으로 활용할 수 있다. 따라서, LDPC 디코더의 처리량(throughput)이 향상될 수 있다.
한편, 도 3 내지 도 11b를 참조하여 LDPC 디코더가 한 주기에 하나 또는 두 개의 변수 노드를 업데이트하는 경우를 예로 들어 본 발명이 설명되었으나, 본 발명은 이에 제한되지 않는다. 예를 들어, LDPC 디코더는 셋 이상의 단위 논리 회로들을 포함할 수 있으며, LDPC 디코더는 멀티 모드에서 셋 이상의 변수 노드들을 업데이트할 수도 있다.
또한, 병렬성이 개선된 QC(Quasi-cyclic) LDPC 코드 등을 이용하여 LDPC 디코딩을 수행하는 경우에, LDPC 디코더는 싱글 모드에서 Q(Q는 자연수)개의 변수 노드들을 병렬로 업데이트하고, 멀티 모드에서 Q*K(K는 자연수)개의 변수 노드들을 병렬로 업데이트할 수도 있다. 이하에서, 도 12 및 도 13을 참조하여 본 발명의 제2 실시 예에 따른 LDPC 디코더가 설명된다.
도 12는 본 발명의 제2 실시 예에 따른 패리티 체크 행렬을 나타내는 도면이다.
도 12의 패리티 체크 행렬은 M*N(M, N은 자연수)개의 서브 행렬들(802)을 포함할 수 있다. 서브 행렬들(802) 각각은 영행렬(O) 또는 Q*Q차원의 순환 이동 항등 행렬(cyclically shifted identify matrix; I)일 수 있다. 이진 LDPC 코드를 정의하는 상기 패리티 체크 행렬의 각 성분은 0 또는 1로 결정될 수 있다.
도 5를 참조하여 설명된 바와 같이, LDPC 코드는 체크 노드들, 변수 노드들 및 상기 체크 노드들과 변수 노드들을 연결하는 엣지들로 구성된 태너 그래프에 의해 그 구조가 정의될 수 있다.
상기 태너 그래프를 구성하는 체크 노드들 및 변수 노드들은 상기 패리티 체크 행렬의 컬럼들과 로우들에 각각 대응할 수 있다. 따라서, 상기 패리티 체크 행렬의 컬럼들의 개수(M*Q) 및 로우들의 개수(N*Q)는 상기 태너 그래프를 구성하는 체크 노드들 및 변수 노드들의 개수와 각각 일치할 수 있다. 상기 패리티 체크 행렬의 성분이 1인 경우, 상기 성분이 위치한 행과 열에 각각 대응하는 체크 노드와 변수 노드는 상기 태너 그래프 상에서 엣지로 연결될 수 있다.
도 12의 패리티 체크 행렬에서, 순환 이동 항등 행렬(I)에 대응하는 위치에는 패턴이 도시되고, 영행렬(O)에 대응하는 위치에는 아무 패턴이 도시되지 않는다. 각 컬럼의 '1'의 개수는, 각 컬럼에 연관된 순환 이동 항등 행렬(I)의 개수와 일치할 수 있다. 각 컬럼에 연결된 순환 이동 항등 행렬(I)의 개수가 상이할 수 있으며, 상기 패리티 체크 행렬의 각 컬럼에는 서로 다른 개수의 '1'이 있을 수 있다. 즉, 패리티 체크 행렬의 각 변수 노드들의 차수는 상이할 수 있다.
한편, 상기 패리티 체크 행렬에서, 동일한 서브 행렬에 포함되는 Q개의 컬럼들에 해당하는 Q개의 변수 노드들은 병렬로 업데이트될 수 있다. 본 발명의 실시 예에 따르면, LDPC 디코더는 한 주기에 Q개의 고차수 변수 노드들을 병렬로 업데이트하기에 충분한 연산 자원을 가질 수 있다. 그리고, 상기 LDPC 디코더는 상기 연산 자원을 이용하여 한 주기에 Q*K(K는 자연수) 개의 저차수 변수 노드들을 병렬로 업데이트할 수 있다.
도 13은 본 발명의 제2 실시 예에 따른 LDPC 디코더를 보다 자세히 설명하기 위한 블록도이다.
도 13은 LDPC 디코더에 포함될 수 있는 메인 디코더(2100)를 나타낸다. 메인 디코더(2100)는 도 1을 참조하여 설명된 메인 디코더(110)에 대응할 수 있다.
메인 디코더(2100)는 데이터 버퍼(2110), 변수 노드 업데이트부(2120), 체크 노드 업데이트부(2130), 체크 노드 전달부(2140) 및 신드롬 체크부(2150)를 포함할 수 있다. 데이터 버퍼(2110), 체크 노드 업데이트부(2130), 체크 노드 전달부(2140) 및 신드롬 체크부(2150)는 도 3을 참조하여 설명된 데이터 버퍼(1110), 체크 노드 업데이트부(1130), 체크 노드 전달부(1140) 및 신드롬 체크부(1150)와 유사한 구조를 가질 수 있다. 이하에서는 변수 노드 업데이트부(2120)를 중심으로, 본 발명의 제2 실시 예에 따른 LDPC 디코더가 설명된다.
변수 노드 업데이트부(2120)는 복수의 단위 논리 회로 그룹들, 모드 제어부(2123), 복수의 메시지 버퍼들(2124, 2125)을 포함할 수 있다. 도 12의 패리티 체크 행렬에 기초하여 LDPC 디코딩을 수행하는 경우, 변수 노드 업데이트부(2120)는 Q개의 단위 논리 회로 그룹들을 포함할 수 있다.
단위 논리 회로 그룹들 각각은 복수의 단위 논리 회로들(ULC1, ULC2)을 포함할 수 있다. 단위 논리 회로 그룹들 각각은 모드 제어부(2123)의 제어에 응하여, 싱글 모드로 동작하여 한 주기에 하나의 고차수 변수 노드를 업데이트하거나, 멀티 모드로 동작하여 한 주기에 복수의 저차수 변수 노드들을 업데이트할 수 있다.
단위 논리 회로 그룹들은 병렬로 동작할 수 있다. 변수 노드 업데이트부(2120)는 단위 논리 회로 그룹들을 이용하여 Q개의 고차수 변수 노드들을 싱글 모드로 업데이트하거나, Q*K개의 저차수 변수 노드들을 멀티 모드로 업데이트할 수 있다. 여기서, K는 단위 논리 회로 그룹에 포함된 논리 회로 그룹의 개수를 나타낼 수 있다.
제1 체크 노드 버퍼(2124)는 단위 논리 회로 그룹들에 포함된 제1 단위 논리 회로들(ULC1)의 연산에 필요한 체크 노드들을 버퍼링할 수 있으며, 제2 체크 노드 버퍼(2125)는 단위 논리 회로 그룹들에 포함된 제2 단위 논리 회로들(ULC2)의 연산에 필요한 체크 노드들을 버퍼링할 수 있다.
본 발명의 제2 실시 예에 따르면, QC-LDPC 코드에 기초하여 LDPC 디코딩을 수행하는 LDPC 디코더에서도 연산 자원을 효율적으로 활용함으로써 LDPC 디코딩의 병렬성을 더욱 개선할 수 있다. 따라서, LDPC 디코더의 성능이 개선될 수 있다.
본 발명의 실시 예들에 따른 LDPC 디코더는 다양한 장치 및 시스템에 적용될 수 있다. 예를 들어, 상기 LDPC 디코더는 스토리지 장치에 적용됨으로써 스토리지 장치가 내부에 저장된 데이터를 정확하고 신속하게 출력하도록 지원할 수 있다. 이하에서, 도 14 내지 도 19를 참조하여 본 발명의 실시 예에 따른 스토리지 장치가 자세히 설명된다.
도 14는 본 발명의 실시 예에 따른 스토리지 장치를 나타내는 블록도이다.
스토리지 장치(200)는 스토리지 컨트롤러(210) 및 비휘발성 메모리(220)를 포함할 수 있다.
비휘발성 메모리(220)는 스토리지 컨트롤러(210)의 제어에 따라 소거, 쓰기 및 읽기 동작 등을 수행할 수 있다. 비휘발성 메모리(220)는 입출력 라인을 통해 스토리지 컨트롤러(210)로부터 커맨드(CMD), 어드레스(ADDR), 그리고 데이터(DATA)를 수신할 수 있다. 또한, 비휘발성 메모리(220)는 전원 라인을 통해 스토리지 컨트롤러(210)로부터 전원(PWR)을 수신하고, 제어 라인을 통해 스토리지 컨트롤러(210)로부터 제어 신호(CTRL)를 수신할 수 있다. 제어 신호(CTRL)에는 커맨드 래치 인에이블(CLE), 어드레스 래치 인에이블(ALE), 칩 인에이블(nCE), 쓰기 인에이블(nWE), 읽기 인에이블(nRE) 등이 포함될 수 있다.
스토리지 컨트롤러(210)는 전반적으로 비휘발성 메모리(220) 동작을 제어할 수 있다. 메모리 컨트롤러(200)는 에러 비트를 정정하는 LDPC부(217)를 포함할 수 있다. LDPC부(217)는 LDPC 인코더 및 LDPC 디코더를 포함할 수 있다.
LDPC 인코더는 비휘발성 메모리(220)에 프로그램될 데이터를 오류정정 인코딩을 하여, 패리티(parity) 비트가 부가된 데이터를 생성할 수 있다. 패리티 비트는 비휘발성 메모리(220)에 저장될 수 있다.
LDPC 디코더는 비휘발성 메모리(220)로부터 리드한 데이터에 대하여 에러 정정 디코딩을 수행할 수 있다. LDPC 디코더는 에러 정정 디코딩의 성공 여부를 판단하고 판단 결과에 따라 지시 신호를 출력할 수 있다. LDPC 디코더는 LDPC 인코딩 과정에서 생성된 패리티 비트를 사용하여 데이터의 에러 비트를 정정할 수 있다.
한편, LDPC부(217)는 에러 비트 개수가 정정 가능한 에러 비트 한계치 이상 발생하면, 에러 비트를 정정할 수 없다. 이때는 에러 정정 페일(fail) 신호가 발생될 수 있다.
LDPC부(217)는 LDPC(low density parity check) 코드를 사용하여 에러 정정을 할 수 있다. LDPC부(217)는 오류정정을 위한 회로, 시스템 또는 장치를 모두 포함할 수 있다. 여기에서 LDPC 코드는 이진 LDPC 코드 및 비이진 LDPC 코드를 포함한다. 구현에 따라, LDPC부(217)는 하드 디시전 데이터 및 소프트 디시전 데이터를 사용하여 에러 비트 정정을 수행할 수 있다.
스토리지 컨트롤러(210) 및 비휘발성 메모리(220)는 하나의 반도체 장치로 집적될 수 있다. 예시적으로, 스토리지 컨트롤러(210) 및 비휘발성 메모리(220)는 하나의 반도체 장치로 집적되어 솔리드 스테이트 드라이브(SSD, Solid State Drive)를 구성할 수 있다. 솔리드 스테이트 드라이브는 반도체 메모리에 데이터를 저장하도록 구성되는 저장 장치를 포함할 수 있다.
스토리지 컨트롤러(210) 및 비휘발성 메모리(220)는 하나의 반도체 장치로 집적되어, 메모리 카드를 구성할 수 있다. 예를 들면, 스토리지 컨트롤러(210) 및 비휘발성 메모리(220)는 하나의 반도체 장치로 집적되어 PC 카드(PCMCIA, personal computer memory card international association), 컴팩트 플래시 카드(CF), 스마트 미디어 카드(SM, SMC), 메모리 스틱, 멀티미디어 카드(MMC, RS-MMC, MMCmicro), SD 카드(SD, miniSD, microSD, SDHC), 유니버설 플래시 기억장치(UFS) 등과 같은 메모리 카드를 구성할 수 있다.
도 15는 도 14의 비휘발성 메모리를 보다 자세히 설명하기 위한 도면이다.
도 15는 메모리 장치를 나타내는 예시적인 블록도이다. 도 15를 참조하면, 메모리 장치(300)는 제어 로직 회로(320), 메모리 셀 어레이(330), 페이지 버퍼(340), 전압 생성기(350), 및 로우 디코더(360)를 포함할 수 있다. 도 15에는 도시되지 않았으나, 메모리 장치(300)는 도 15에 도시된 메모리 인터페이스 회로(310)를 더 포함할 수 있고, 또한 컬럼 로직, 프리-디코더, 온도 센서, 커맨드 디코더, 어드레스 디코더 등을 더 포함할 수 있다.
제어 로직 회로(320)는 메모리 장치(300) 내의 각종 동작을 전반적으로 제어할 수 있다. 제어 로직 회로(320)는 메모리 인터페이스 회로(310)로부터의 커맨드(CMD) 및/또는 어드레스(ADDR)에 응답하여 각종 제어 신호들을 출력할 수 있다. 예를 들어, 제어 로직 회로(320)는 전압 제어 신호(CTRL_vol), 로우 어드레스(X-ADDR), 및 컬럼 어드레스(Y-ADDR)를 출력할 수 있다.
메모리 셀 어레이(330)는 복수의 메모리 블록들(BLK1 내지 BLKz)을 포함할 수 있고(z는 양의 정수), 복수의 메모리 블록들(BLK1 내지 BLKz) 각각은 복수의 메모리 셀들을 포함할 수 있다. 메모리 셀 어레이(330)는 비트 라인들(BL)을 통해 페이지 버퍼부(340)에 연결될 수 있고, 워드 라인들(WL), 스트링 선택 라인들(SSL), 및 그라운드 선택 라인들(GSL)을 통해 로우 디코더(360)에 연결될 수 있다.
예시적인 실시 예에서, 메모리 셀 어레이(330)는 3차원 메모리 셀 어레이를 포함할 수 있고, 3차원 메모리 셀 어레이는 복수의 낸드 스트링들을 포함할 수 있다. 각 낸드 스트링은 기판 위에 수직으로 적층된 워드 라인들에 각각 연결된 메모리 셀들을 포함할 수 있다. 미국 특허공개공보 제7,679,133호, 미국 특허공개공보 제8,553,466호, 미국 특허공개공보 제8,654,587호, 미국 특허공개공보 제8,559,235호, 및 미국 특허출원공개공보 제2011/0233648호는 본 명세서에 인용 형식으로 결합된다. 예시적인 실시 예에서, 메모리 셀 어레이(330)는 2차원 메모리 셀 어레이를 포함할 수 있고, 2차원 메모리 셀 어레이는 행 및 열 방향을 따라 배치된 복수의 낸드 스트링들을 포함할 수 있다.
페이지 버퍼(340)는 복수의 페이지 버퍼들(PB1 내지 PBn)을 포함할 수 있고(n은 3 이상의 정수), 복수의 페이지 버퍼들(PB1 내지 PBn)은 복수의 비트 라인들(BL)을 통해 메모리 셀들과 각각 연결될 수 있다. 페이지 버퍼(340)는 컬럼 어드레스(Y-ADDR)에 응답하여 비트 라인들(BL) 중 적어도 하나의 비트 라인을 선택할 수 있다. 페이지 버퍼(340)는 동작 모드에 따라 기입 드라이버 또는 감지 증폭기로서 동작할 수 있다. 예를 들어, 프로그램 동작 시, 페이지 버퍼(340)는 선택된 비트 라인으로 프로그램될 데이터에 대응하는 비트 라인 전압을 인가할 수 있다. 독출 동작 시, 페이지 버퍼(340)는 선택된 비트 라인의 전류 또는 전압을 감지하여 메모리 셀에 저장된 데이터를 감지할 수 있다.
전압 생성기(350)는 전압 제어 신호(CTRL_vol)를 기반으로 프로그램, 독출, 및 소거 동작들을 수행하기 위한 다양한 종류의 전압들을 생성할 수 있다. 예를 들어, 전압 생성기(350)는 워드 라인 전압(VWL)으로서 프로그램 전압, 독출 전압, 프로그램 검증 전압, 소거 전압 등을 생성할 수 있다.
로우 디코더(360)는 로우 어드레스(X-ADDR)에 응답하여 복수의 워드 라인들(WL) 중 하나를 선택할 수 있고, 복수의 스트링 선택 라인들(SSL) 중 하나를 선택할 수 있다. 예를 들어, 프로그램 동작 시, 로우 디코더(360)는 선택된 워드 라인으로 프로그램 전압 및 프로그램 검증 전압을 인가하고, 독출 동작 시, 선택된 워드 라인으로 독출 전압을 인가할 수 있다.
도 16은 본 발명의 일 실시 예에 따른 스토리지 장치에 적용될 수 있는 3D V-NAND 구조에 대해 설명하기 위한 도면이다. 스토리지 장치의 비휘발성 메모리가 3D V-NAND 타입의 플래시 메모리로 구현될 경우, 비휘발성 메모리를 구성하는 복수의 메모리 블록 각각은 도 16에 도시된 바와 같은 등가 회로로 표현될 수 있다.
도 16에 도시된 메모리 블록(BLKi)은 기판 상에 삼차원 구조로 형성되는 삼차원 메모리 블록을 나타낸다. 예를 들어, 메모리 블록(BLKi)에 포함되는 복수의 메모리 낸드 스트링들은 상기 기판과 수직한 방향으로 형성될 수 있다.
도 16을 참조하면, 메모리 블록(BLKi)은 비트 라인들(BL1, BL2, BL3)과 공통 소스 라인(CSL) 사이에 연결되는 복수의 메모리 낸드 스트링들(NS11~NS33)을 포함할 수 있다. 복수의 메모리 낸드 스트링들(NS11~NS33) 각각은 스트링 선택 트랜지스터(SST), 복수의 메모리 셀들(MC1, MC2, ..., MC8) 및 접지 선택 트랜지스터(GST)를 포함할 수 있다. 도 16에는 복수의 메모리 낸드 스트링들(NS11~NS33) 각각이 8개의 메모리 셀들(MC1, MC2, ..., MC8)을 포함하는 것으로 도시되어 있으나, 반드시 이에 한정되는 것은 아니다.
스트링 선택 트랜지스터(SST)는 상응하는 스트링 선택 라인(SSL1, SSL2, SSL3)에 연결될 수 있다. 복수의 메모리 셀들(MC1, MC2, ..., MC8)은 각각 상응하는 게이트 라인(GTL1, GTL2, ..., GTL8)에 연결될 수 있다. 게이트 라인(GTL1, GTL2, ..., GTL8)은 워드 라인들에 해당할 수 있으며, 게이트 라인(GTL1, GTL2, ..., GTL8)의 일부는 더미 워드 라인에 해당할 수 있다. 접지 선택 트랜지스터(GST)는 상응하는 접지 선택 라인(GSL1, GSL2, GSL3)에 연결될 수 있다. 스트링 선택 트랜지스터(SST)는 상응하는 비트 라인들(BL1, BL2, BL3)에 연결되고, 접지 선택 트랜지스터(GST)는 공통 소스 라인(CSL)에 연결될 수 있다.
동일 높이의 워드 라인(예를 들면, WL1)은 공통으로 연결되고, 접지 선택 라인(GSL1, GSL2, GSL3) 및 스트링 선택 라인(SSL1, SSL2, SSL3)은 각각 분리될 수 있다. 도 16에는 메모리 블록(BLK)이 여덟 개의 게이트 라인(GTL1, GTL2, ..., GTL8) 및 세 개의 비트 라인들(BL1, BL2, BL3)에 연결되는 것으로 도시되어 있으나, 반드시 이에 한정되는 것은 아니다.
메모리 블록(BLK)에 포함되는 메모리 셀들을 프로그램하면, 메모리 셀들의 문턱전압은 일정한 확률분포들을 형성할 수 있다. 문턱전압 분포들은 서로 다른 논리 상태에 매핑될 수 있다.
도 17a 및 도 17b는 메모리 셀들의 문턱전압 분포들을 설명하기 위한 도면이다.
도 17a 및 도 17b에 도시된 그래프들의 가로 축은 문턱전압의 크기(Vth), 세로 축은 메모리 셀들의 개수(# of Cells)를 나타낸다. 도 17a 및 도 17b는 메모리 셀이 3비트의 데이터를 저장하는 TLC(Triple Level Cell)인 경우를 예로 들어서 각 문턱전압 분포가 나타내는 논리 상태를 도시한다.
TLC 메모리 장치의 메모리 셀들에 3개의 비트를 프로그램하면, 8개의 문턱 전압 산포들 중 어느 하나가 상기 메모리 셀에 형성된다.
다수의 메모리 셀들 간의 미세한 전기적 특성의 차이로 인해, 동일한 데이터가 프로그램된 메모리 셀들 각각의 문턱 전압들 각각은 일정한 범위의 문턱 전압 산포를 형성한다. TLC의 경우, 도면에 도시된 바와 같이 7개의 프로그램 상태(state)의 문턱 전압의 산포(P1-P7)와 하나의 소거 상태(state)의 문턱 전압 산포(E)가 형성된다. 도 17a는 이상적인 산포도로 상태 산포가 하나도 겹치지 아니하고, 각 문턱 전압의 산포 별로 일정 범위의 리드 전압 마진을 가지게 된다.
도 17b에 도시된 바와 같이, 플래시 메모리의 경우, 시간이 지남에 따라, 플로팅 게이트(floating gate) 또는 터널 산화물(tunnel oxide)에 포획(trap)된 전자들이 방출되는 차지 로스(charge loss)가 발생할 수 있다. 또한, 프로그램 및 소거를 반복하면서 터널 산화물이 열화 되어 차지 로스(charge loss)를 더욱 증가할 수 있다. 차지 로스(charge loss)는 문턱 전압을 감소시킬 수 있다. 예들 들어 문턱 전압의 산포는 왼쪽으로 이동될 수 있다.
또한, 프로그램 디스터번스, 소거 디스터번스, 및/또는 백 패턴 디펜던시(back pattern dependency) 현상은 서로 문턱 전압의 산포를 증가시킬 수 있다. 따라서, 상술한 이유로 인한 메모리 셀의 특성 열화로 기인하여, 도 17b에 도시된 바와 같이 인접한 각 상태(E, P1-P7)의 문턱 전압 산포가 서로 중첩될 수 있다.
문턱 전압 산포가 중첩되면, 리드되는 데이터에는 많은 오류가 포함될 수 있다. 예를 들면, 제3 리드 전압(Vread3)이 인가되었을 때, 당해 메모리 셀이 온(on)상태이면 당해 메모리 셀은 제2 프로그램 상태(P2)를 가지는 것으로 판단되며, 당해 메모리 셀이 오프(off) 상태이면 당해 메모리 셀은 제3 프로그램 상태(P3)를 가지는 것으로 판단된다. 그러나 제2 프로그램 상태(P2)와 제3 프로그램 상태(P3)가 중첩되어 있는 구간에서 제3 리드 전압(Vread3)가 인가되면, 당해 메모리 셀이 오프(off) 상태임에도 불구하고, 온(on) 상태로 리드될 수 있다. 따라서, 문턱 전압 산포가 중첩됨에 따라, 리드된 데이터에는 많은 에러 비트들이 포함될 수 있다.
따라서 반도체 메모리 장치의 메모리 셀에 저장된 데이터를 정확하게 리드할 수 있는 기술이 요구된다.
도 18은 본 발명의 실시 예에 따른 스토리지 장치의 에러 정정 방법을 설명하기 위한 도면이다.
도 18은 도 14를 참조하여 설명된 비휘발성 메모리(220) 및 LDPC부(217)를 도시한다.
LDPC부(217)는 이레귤러(irregular) LDPC 코드에 기초하여 LDPC 인코딩 및 LDPC 디코딩을 수행할 수 있다. 비휘발성 메모리(220)는 이레귤러 LDPC 코드로 인코딩된 데이터를 저장할 수 있다.
LDPC부(217)는 비휘발성 메모리(220)로부터 리드된 데이터의 LDPC 디코딩을 수행함으로써 디코딩된 데이터를 외부로 출력할 수 있다. 본 발명의 실시 예에 따르면, LDPC부(217)는 복수의 단위 논리 회로들(ULC)을 포함하는 단위 논리 회로 그룹들(ULC Group), 그리고 상기 단위 논리 회로 그룹들을 제어하기 위한 모드 제어부(Mode Controller)를 포함할 수 있다.
LDPC부(217)는 비휘발성 메모리(220)로부터 리드된 데이터의 값으로 변수 노드들을 초기화하고, 상기 변수 노드들에 연결된 체크 노드들을 업데이트하고, 상기 체크 노드들에 연결된 변수 노드들을 업데이트하고, 상기 업데이트된 변수 노드들의 신드롬 체크 결과에 따라 상기 변수 노드들의 값을 상기 디코딩된 데이터로서 외부로 출력하는 동작을 수행할 수 있다.
구현에 따라, LDPC부(217)는 M*N개의 서브 행렬들을 포함하고 상기 서브 행렬들 각각은 영행렬 또는 Q*Q(Q는 자연수) 차원의 순환 이동 항등 행렬인 패리티 체크 행렬에 기초하여 상기 체크 노드들 및 변수 노드들을 업데이트할 수 있다.
본 발명의 실시 예에 따르면, LDPC부(217)는 변수 노드들의 차수가 임계차수를 넘는지 여부에 따라 한 주기에 Q개의 변수 노드를 업데이트하거나, 한 주기에 Q*K개의 변수 노드들을 동시에 업데이트하는 동작을 반복 수행함으로써 변수 노드들을 업데이트할 수 있다. 여기서, K는 하나의 단위 논리 회로 그룹에 포함되는 단위 논리 회로의 개수에 해당할 수 있다.
본 발명의 실시 예에 따르면, 병렬로 변수 노드들을 업데이트할 수 있는 LDPC 디코더에서 LDPC 디코딩의 병렬성을 더욱 개선할 수 있다. 따라서, LDPC 디코더의 처리량이 향상될 수 있으며, 비휘발성 메모리(220)로부터 출력된 데이터의 에러를 신속하게 정정할 수 있다. 따라서, 스토리지 장치(200)의 성능 및 신뢰성이 개선될 수 있다.
도 19는 본 발명의 실시 예에 따른 호스트-스토리지 시스템을 나타내는 블록도이다.
호스트-스토리지 시스템(10)은 호스트(100) 및 스토리지 장치(200)를 포함할 수 있다. 또한, 스토리지 장치(200)는 스토리지 컨트롤러(210) 및 비휘발성 메모리(NVM)(220)를 포함할 수 있다.
호스트(100)는 전자 장치, 예를 들어 휴대폰, MP3 플레이어, 랩탑 컴퓨터 등과 같은 휴대용 전자 장치들, 또는 데스크탑 컴퓨터, 게임기, TV, 프로젝터 등과 같은 전자 장치들을 포함할 수 있다. 호스트(100)는 적어도 하나의 운영 체제(OS: operating system)를 포함할 수 있다. 운영 체제는 호스트(100)의 기능 및 동작을 전반적으로 관리 및 제어할 수 있다.
스토리지 장치(200)는 호스트(100)로부터의 요청에 따라 데이터를 저장하기 위한 저장 매체들을 포함할 수 있다. 일 예로서, 스토리지 장치(200)는 SSD(Solid State Drive), 임베디드(embedded) 메모리 및 착탈 가능한 외장(external) 메모리 중 적어도 하나를 포함할 수 있다. 스토리지 장치(200)가 SSD인 경우, 스토리지 장치(200)는 NVMe(non-volatile memory express) 표준을 따르는 장치일 수 있다. 스토리지 장치(200)가 임베디드 메모리 혹은 외장(external) 메모리인 경우, 스토리지 장치(200)는 UFS(universal flash storage) 혹은 eMMC(embedded multi-media card) 표준을 따르는 장치일 수 있다. 호스트(100)와 스토리지 장치(200)는 각각 채용된 표준 프로토콜에 따른 패킷을 생성하고 이를 전송할 수 있다.
비휘발성 메모리(220)는 전원이 공급되지 않아도 저장된 데이터를 유지할 수 있다. 비휘발성 메모리(220)는 프로그램 동작을 통해 호스트(100)로부터 제공된 데이터를 저장할 수 있고, 리드 동작을 통해 비휘발성 메모리(220)에 저장된 데이터를 출력할 수 있다.
비휘발성 메모리(220)가 플래시 메모리를 포함할 때, 상기 플래시 메모리는 2D NAND 메모리 어레이나 3D(또는 수직형, Vertical) NAND(VNAND) 메모리 어레이를 포함할 수 있다. 다른 예로서, 스토리지 장치(200)는 다른 다양한 종류의 비휘발성 메모리들을 포함할 수도 있다. 예를 들어, 스토리지 장치(200)에는 MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torgue MRAM), Conductive bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase RAM), 저항 메모리(Resistive RAM) 및 다른 다양한 종류의 메모리가 적용될 수 있다.
스토리지 컨트롤러(210)는 호스트(100)로부터의 요청에 응답하여 비휘발성 메모리(220)를 제어할 수 있다. 예를 들어, 스토리지 컨트롤러(210)는 비휘발성 메모리(220)로부터 리드된 데이터를 호스트(100)로 제공하고, 호스트(100)로부터 제공된 데이터를 비휘발성 메모리(220)에 저장할 수 있다. 이러한 동작을 위해, 스토리지 컨트롤러(210)는 비휘발성 메모리(220)의 리드(read), 프로그램(program), 이레이즈(erase) 등의 동작을 지원할 수 있다.
스토리지 컨트롤러(210)는 호스트 인터페이스(211), 메모리 인터페이스(212) 및 CPU(central processing unit)(213)를 포함할 수 있다. 또한, 스토리지 컨트롤러(210)는 플래시 변환 레이어(Flash Translation Layer; FTL)(214), 패킷 매니저(215), 버퍼 메모리(216), ECC(error correction code)(217) 엔진 및 AES(advanced encryption standard) 엔진(218)을 더 포함할 수 있다. 스토리지 컨트롤러(210)는 플래시 변환 레이어(FTL)(214)가 로딩되는 워킹 메모리(미도시)를 더 포함할 수 있으며, CPU(213)가 플래시 변환 레이어(214)를 실행하는 것에 의해 비휘발성 메모리(220)에 대한 데이터 기록 및 독출 동작이 제어될 수 있다.
호스트 인터페이스(211)는 호스트(100)와 패킷(packet)을 송수신할 수 있다. 호스트(100)로부터 호스트 인터페이스(211)로 전송되는 패킷은 커맨드(command) 혹은 비휘발성 메모리(220)에 기록될 데이터 등을 포함할 수 있으며, 호스트 인터페이스(211)로부터 호스트(100)로 전송되는 패킷은 커맨드에 대한 응답(response) 혹은 비휘발성 메모리(220)로부터 독출된 데이터 등을 포함할 수 있다.
메모리 인터페이스(212)는 비휘발성 메모리(220)에 기록될 데이터를 비휘발성 메모리(220)로 송신하거나, 비휘발성 메모리(220)로부터 독출된 데이터를 수신할 수 있다. 이러한 메모리 인터페이스(212)는 토글(Toggle) 혹은 온파이(Open NAND Flash Interface; ONFI)와 같은 표준 규약을 준수하도록 구현될 수 있다.
플래시 변환 레이어(214)는 주소 매핑(address mapping), 웨어-레벨링(wear-leveling), 가비지 콜렉션(garbage collection)과 같은 여러 기능을 수행할 수 있다. 주소 매핑 동작은 호스트(100)로부터 수신한 논리 주소(logical address)를, 비휘발성 메모리(220) 내에 데이터를 실제로 저장하는 데 사용되는 물리 주소(physical address)로 바꾸는 동작이다. 웨어-레벨링은 비휘발성 메모리(220) 내의 블록(block)들이 균일하게 사용되도록 하여 특정 블록의 과도한 열화를 방지하기 위한 기술로, 예시적으로 물리 블록(physical block)들의 소거 카운트들을 밸런싱하는 펌웨어 기술을 통해 구현될 수 있다. 가비지 콜렉션은, 블록의 유효 데이터를 새 블록에 복사한 후 기존 블록을 소거(erase)하는 방식을 통해 비휘발성 메모리(220) 내에서 사용 가능한 용량을 확보하기 위한 기술이다.
패킷 매니저(215)는 호스트(100)와 협의된 인터페이스의 프로토콜에 따른 패킷(Packet)을 생성하거나, 호스트(100)로부터 수신된 패킷(Packet)으로부터 각종 정보를 파싱할 수 있다. 또한, 버퍼 메모리(216)는 비휘발성 메모리(220)에 기록될 데이터 혹은 비휘발성 메모리(220)로부터 독출될 데이터를 임시로 저장할 수 있다. 버퍼 메모리(216)는 스토리지 컨트롤러(210) 내에 구비되는 구성일 수 있으나, 스토리지 컨트롤러(210)의 외부에 배치되어도 무방하다.
LDPC부(217)는 비휘발성 메모리(220)로부터 독출되는 독출 데이터에 대한 오류 검출 및 정정 기능을 수행할 수 있다. 보다 구체적으로, LDPC부(217)는 비휘발성 메모리(220)에 기입될 기입 데이터에 대하여 패리티 비트(parity bit)들을 생성할 수 있으며, 이와 같이 생성된 패리티 비트들은 기입 데이터와 함께 비휘발성 메모리(220) 내에 저장될 수 있다. 비휘발성 메모리(220)로부터의 데이터 독출 시, LDPC부(217)는 독출 데이터와 함께 비휘발성 메모리(220)로부터 독출되는 패리티 비트들을 이용하여 독출 데이터의 에러를 정정하고, 에러가 정정된 독출 데이터를 출력할 수 있다.
AES 엔진(218)은, 스토리지 컨트롤러(210)로 입력되는 데이터에 대한 암호화(encryption) 동작과 복호화(decryption) 동작 중 적어도 하나를, 대칭 키 알고리즘(symmetric-key algorithm)를 이용하여 수행할 수 있다.
한편, 고용량의 스토리지 장치에 대한 수요에 부응하여, 비휘발성 메모리(220)의 하나의 메모리 셀이 저장할 수 있는 비트 수가 증가하는 추세이다. 예를 들어, 비휘발성 메모리(220)는 메모리 셀 당 3비트 데이터를 저장할 수 있는 TLC, 메모리 셀 당 4비트 데이터를 저장할 수 있는 QLC(Quadruple Level Cell)뿐만 아니라, 메모리 셀 당 5비트 데이터를 저장할 수 있는 PLC(Penta Level Cell)를 포함할 수 있다.
비휘발성 메모리(220)의 한 페이지에 저장될 수 있는 데이터의 양이 늘어남에 따라, LDPC 인코딩되는 데이터의 크기 또한 증가할 수 있다. 크기가 큰 데이터에 대한 LDPC 인코딩을 수행하기 위해, 패리티 체크 행렬의 규모 또한 커질 수 있다. 패리티 체크 행렬에 포함되는 변수 노드들의 수가 증가할 수 있으며, 변수 노드들의 차수가 다양해질 수 있다.
본 발명의 실시 예에 따르면, LDPC부(217)는 셋 이상의 다양한 병렬 동작 모드를 지원할 수도 있다. 예를 들어, LDPC부(217)는 하나의 단위 논리 회로 그룹이 하나의 고차수 변수 노드를 처리하는 모드, 2개의 중간차수 변수 노드들을 처리하는 모드, 4개의 저차수 변수 노드를 처리하는 모드 등을 지원할 수 있다. 본 발명의 실시 예에 따르면, 고용량화되는 스토리지 장치(200)에서 LDPC부(217)의 연산 자원이 더욱 효율적으로 활용될 수 있다. 비휘발성 메모리(220)로부터의 데이터의 에러가 신속하게 정정될 수 있으므로, 결과적으로 스토리지 장치(200)의 데이터 처리 성능이 향상될 수 있다.
본 발명은 상술한 실시형태 및 첨부된 도면에 의해 한정되는 것이 아니며 첨부된 청구범위에 의해 한정하고자 한다. 따라서, 청구범위에 기재된 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 당 기술분야의 통상의 지식을 가진 자에 의해 다양한 형태의 치환, 변형 및 변경이 가능할 것이며, 이 또한 본 발명의 범위에 속한다고 할 것이다.
100: LDPC 디코더
110, 1100, 2100: 메인 디코더
111, 112, 1121, 1122, ULC: 단위 논리 회로
113, 1123, 2123: 모드 제어부

Claims (20)

  1. 외부에서 수신된 코드워드의 값으로 변수 노드들을 초기화하고, 이레귤러(irregular) 패리티 체크 행렬에 기초하여 상기 변수 노드들을 업데이트함으로써 상기 코드워드를 디코딩하고, 상기 디코딩된 코드워드를 출력하는 LDPC(Low Density Parity Check) 디코더에 있어서,
    전체가 하나의 변수 노드 그룹-상기 하나의 변수 노드 그룹은 하나 또는 그 이상의 변수 노드를 포함함-을 업데이트하는 싱글 모드, 또는 각각이 서로 다른 변수 노드 그룹을 업데이트함으로써 복수의 변수 노드 그룹들을 병렬로 업데이트하는 멀티 모드로 동작하는 복수의 단위 논리 회로들, 및
    변수 노드 그룹들 중 임계차수보다 큰 차수(degree)를 갖는 고차수 변수 노드 그룹은 상기 싱글 모드에서 업데이트하고, 상기 임계차수 이하의 차수를 갖는 저차수 변수 노드 그룹은 상기 멀티 모드에서 업데이트하도록 상기 복수의 단위 논리 회로들을 제어하는 모드 제어부
    를 포함하는 LDPC 디코더.
  2. 제1항에 있어서,
    상기 임계차수는
    상기 변수 노드 그룹들의 차수들 중 최대차수, 및 상기 복수의 단위 논리 회로들의 개수에 기초하여 결정되는
    LDPC 디코더.
  3. 제1항에 있어서,
    상기 복수의 단위 논리 회로들 각각은
    둘 이상의 입력을 갖는 가산기(adder)를 포함하는
    LDPC 디코더.
  4. 제3항에 있어서,
    상기 임계차수는
    상기 가산기의 입력의 수에 기초하여 결정되는
    LDPC 디코더.
  5. 제1항에 있어서,
    상기 복수의 단위 논리 회로들은 제1 단위 논리 회로 및 제2 단위 논리 회로를 포함하고,
    상기 싱글 모드에서, 상기 제1 단위 논리 회로가 상기 하나의 변수 노드 그룹에 연결된 체크 노드들 중 제1 체크 노드들에 대한 합 연산을 수행하고, 상기 제2 단위 논리 회로가 상기 연결된 체크 노드들 중 제2 체크 노드들에 대한 합 연산을 수행함으로써 상기 복수의 단위 논리 회로들이 상기 하나의 변수 노드 그룹의 값을 업데이트하는
    LDPC 디코더.
  6. 제5항에 있어서,
    상기 LDPC 디코더는
    상기 복수의 단위 논리 회로들 각각이 처리하기 위한 체크 노드들의 값을 버퍼링하기 위한 복수의 체크 노드 버퍼들을 더 포함하는
    LDPC 디코더.
  7. 제1항에 있어서,
    상기 모드 제어부는
    상기 변수 노드 그룹들을 정해진 순서대로 업데이트하고, 업데이트하려는 타겟 변수 노드 그룹의 차수에 따라 복수의 단위 논리 회로들의 동작 모드를 실시간으로 전환하는
    LDPC 디코더.
  8. 제1항에 있어서,
    상기 모드 제어부는
    상기 변수 노드 그룹들을 정해진 순서대로 업데이트하고, 업데이트하려는 제1 타겟 변수 노드 그룹이 고차수 변수 노드 그룹인 경우 상기 복수의 단위 논리 회로들이 상기 싱글 모드로 상기 제1 타겟 변수 노드 그룹을 업데이트하도록 제어하고, 상기 제1 타겟 변수 노드 그룹이 저차수 변수 노드 그룹인 경우 상기 제1 타겟 변수 노드 그룹의 업데이트를 스킵(skip)하고, 저차수 변수 노드 그룹인 제2 타겟 변수 노드 그룹을 업데이트할 차례에 상기 복수의 단위 논리 회로들이 상기 제1 및 제2 타겟 변수 노드 그룹을 상기 멀티 모드로 업데이트하도록 제어하는
    LDPC 디코더.
  9. 제1항에 있어서,
    상기 모드 제어부는
    상기 변수 노드 그룹들을 차수의 내림차순으로 정렬하고, 제1 시구간에 상기 변수 노드 그룹들 중 고차수 변수 노드 그룹들이 상기 싱글 모드에서 업데이트되도록 상기 복수의 단위 논리 회로들을 제어하고, 상기 제1 시구간 이후의 제2 시구간에서 상기 변수 노드 그룹들 중 저차수 변수 노드 그룹들이 상기 멀티 모드에서 업데이트되도록 상기 복수의 단위 논리 회로들을 제어하는
    LDPC 디코더.
  10. 제1항에 있어서,
    상기 차수는
    상기 패리티 체크 행렬이 나타내는 LDPC 코드에서, 변수 노드 그룹에 연결된 체크 노드의 개수인
    LDPC 디코더.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
KR1020220008006A 2021-11-24 2022-01-19 Ldpc 디코더 및 스토리지 장치 KR102511827B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
US17/878,431 US11929762B2 (en) 2021-11-24 2022-08-01 Low density parity check decoder and storage device
TW111134030A TW202322576A (zh) 2021-11-24 2022-09-08 低密度同位檢查解碼器及儲存裝置
EP22208814.8A EP4187795A1 (en) 2021-11-24 2022-11-22 Low density parity check decoder and storage device
CN202211467166.5A CN116170029A (zh) 2021-11-24 2022-11-22 低密度奇偶校验解码器和储存装置
KR1020230033089A KR20230076805A (ko) 2021-11-24 2023-03-14 Ldpc 디코더 및 스토리지 장치

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20210162955 2021-11-24
KR1020210162955 2021-11-24

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020230033089A Division KR20230076805A (ko) 2021-11-24 2023-03-14 Ldpc 디코더 및 스토리지 장치

Publications (1)

Publication Number Publication Date
KR102511827B1 true KR102511827B1 (ko) 2023-03-21

Family

ID=85801476

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220008006A KR102511827B1 (ko) 2021-11-24 2022-01-19 Ldpc 디코더 및 스토리지 장치

Country Status (1)

Country Link
KR (1) KR102511827B1 (ko)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20070079513A (ko) * 2006-02-02 2007-08-07 삼성전자주식회사 노드 메모리 기반의 ldpc 복호기 및 복호방법
KR100953936B1 (ko) * 2009-04-28 2010-04-22 엘아이지넥스원 주식회사 Ldpc 복호화를 위한 복호화 방법 및 장치

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20070079513A (ko) * 2006-02-02 2007-08-07 삼성전자주식회사 노드 메모리 기반의 ldpc 복호기 및 복호방법
KR100953936B1 (ko) * 2009-04-28 2010-04-22 엘아이지넥스원 주식회사 Ldpc 복호화를 위한 복호화 방법 및 장치

Similar Documents

Publication Publication Date Title
US9977713B2 (en) LDPC decoder, semiconductor memory system and operating method thereof
KR102643457B1 (ko) Ldpc 디코더, 반도체 메모리 시스템 및 그것의 동작 방법
US10381089B2 (en) Semiconductor memory system performing read operation based on counted memory cells and operating method thereof
KR102559925B1 (ko) Ldpc 디코더, 반도체 메모리 시스템 및 그것의 동작 방법
US11450400B2 (en) Controller and operating method thereof
KR102631407B1 (ko) Ldpc 디코더, 반도체 메모리 시스템 및 그것의 동작 방법
KR102529666B1 (ko) LDPC 코드(Low Density Parity Check Code) 부호를 위한 복호 방법 및 장치
KR102556479B1 (ko) Ldpc 디코더, 반도체 메모리 시스템 및 그것의 동작 방법
KR102606829B1 (ko) Ldpc 디코더, 반도체 메모리 시스템 및 그것의 동작 방법
KR20210115961A (ko) Ldpc 디코더 및 그것의 동작 방법
US10439647B2 (en) Controller, semiconductor memory system and operating method thereof
KR20200021253A (ko) 디코더, 그것의 동작 방법 및 메모리 시스템
US11387845B2 (en) LDPC decoder, operating method of LDPC decoder, and semiconductor memory system
US11095316B2 (en) Controller and operating method for performing read operation to read data in memory device
CN105304143A (zh) 解码方法、存储器控制电路单元及存储器存储装置
KR20100050789A (ko) 메모리 장치 및 그것을 포함하는 메모리 시스템
KR102511827B1 (ko) Ldpc 디코더 및 스토리지 장치
US11966589B2 (en) Controller and operating method thereof
EP4187795A1 (en) Low density parity check decoder and storage device
CN112216328A (zh) 具有低复杂度解码的存储器系统及其操作方法
EP4351006A1 (en) Generalized ldpc encoder, generalized ldpc encoding method and storage device
KR102706981B1 (ko) 컨트롤러, 반도체 메모리 시스템 및 그것의 동작 방법
KR20230068268A (ko) 메모리 장치, 메모리 시스템 및 메모리 시스템의 동작 방법

Legal Events

Date Code Title Description
A107 Divisional application of patent
GRNT Written decision to grant