KR102467072B1 - 반복 연산 과정을 이용하여 디코딩을 수행하는 디코더 및 이를 이용한 스토리지 장치 - Google Patents

반복 연산 과정을 이용하여 디코딩을 수행하는 디코더 및 이를 이용한 스토리지 장치 Download PDF

Info

Publication number
KR102467072B1
KR102467072B1 KR1020170139976A KR20170139976A KR102467072B1 KR 102467072 B1 KR102467072 B1 KR 102467072B1 KR 1020170139976 A KR1020170139976 A KR 1020170139976A KR 20170139976 A KR20170139976 A KR 20170139976A KR 102467072 B1 KR102467072 B1 KR 102467072B1
Authority
KR
South Korea
Prior art keywords
data
flag
memory
decoding
decoding logic
Prior art date
Application number
KR1020170139976A
Other languages
English (en)
Other versions
KR20190046318A (ko
Inventor
장재훈
신동민
정헌화
공준진
손홍락
임세진
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020170139976A priority Critical patent/KR102467072B1/ko
Priority to US15/956,960 priority patent/US11031957B2/en
Priority to CN201811247776.8A priority patent/CN109714062B/zh
Publication of KR20190046318A publication Critical patent/KR20190046318A/ko
Priority to US17/314,768 priority patent/US11791846B2/en
Application granted granted Critical
Publication of KR102467072B1 publication Critical patent/KR102467072B1/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/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3746Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with iterative decoding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • 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/085Error detection or correction by redundancy in data representation, e.g. by using checking codes using codes with inherent redundancy, e.g. n-out-of-m 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • 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
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/29Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2948Iterative decoding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6502Reduction of hardware complexity or efficient processing
    • H03M13/6505Memory efficient implementations
    • 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)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

본 발명에는 반복 연산 과정을 이용하여 디코딩을 수행하는 디코더가 제공된다. 반복 연산 과정을 이용하여 디코딩을 수행하는 디코더는, 메인 메모리, 플래그 데이터를 저장하는 플래그 메모리, 및 반복(iteration) 연산을 수행하는 디코딩 로직(decoding logic)을 포함하되, 디코딩 로직은, 제1 데이터를 이용하여 i 번째(i는 자연수) 연산을 수행하고, 제1 데이터의 i 번째 연산 결과인 제2 데이터를 플래그 인코딩하여, 플래그 인코딩이 성공하는 경우, 제2 데이터의 플래그 인코딩 결과를 제1 플래그 데이터로 플래그 메모리에 저장하고, 플래그 인코딩이 실패하는 경우, 제2 데이터의 제1 플래그 데이터와 다르고 미리 정한 제2 플래그 데이터를 플래그 메모리에 저장하는 것을 포함한다.

Description

반복 연산 과정을 이용하여 디코딩을 수행하는 디코더 및 이를 이용한 스토리지 장치{A DECODER PERFORMING ITERATION DECODING, AND STORAGE DEVICE USING THE SAME}
본 발명은, 반복 연산 과정을 이용하여 디코딩을 수행하는 디코더 및 이를 이용한 스토리지 장치에 관한 것이다. 구체적으로, 반복 연산에서, 중간 결과값을 저장하는 제1 메모리와 제1 메모리보다 저장 용량이 큰 제2 메모리를 포함하는 반복 연산 수행 디코더에 관한 것이다.
LDPC(Low Density Parity Check) 디코딩(decoding)은, 복수회의 반복(iteration) 연산을 수행하는 것을 포함한다. 이때, 각 연산의 결과값을 중간값으로 메모리(memory)에 저장하고, 다음번 연산에서 이 중간값을 이용하여 연산을 수행한다. 예를 들어, i 번째 연산 과정에서의 결과를 메모리에 저장하고, i+1 번째 연산 과정에서 이 메모리에 액세스(access)하여 상기 결과를 리드하고, 이 결과값을 이용하여 i+1 번째 연산을 수행한다.
이러한 과정을 수행하기 위해, 각각의 연산 과정에서 메모리에 항상 액세스하여야 하기 때문에, 전력이 과도하게 소모된다. 뿐만 아니라, 메모리가 중간 값을 1bit라도 에러가 발생한 경우, 에러를 정정하는 시간이 길어지거나, 정정이 실패할 수 있다.
전력 소모를 줄이기 위해, 단순히 메모리 액세스를 줄이게 되는 경우, 오류 정정 능력이 감소하게 된다. 또한, 정정 능력을 증가시키기 위해, 시간당 처리량을 줄여 메모리 액세스를 줄이게 되는 경우, 스루풋(throughput)이 감소하게 된다.
본 발명이 해결하고자 하는 기술적 과제는 스루풋(throughput) 감소를 최소화하면서, 전력 소비가 낮은, 반복 연산 수행 디코더를 제공하는 것이다.
본 발명이 해결하고자 하는 다른 기술적 과제는 오류 정정 능력이 높고, 전력 소비는 낮은, 반복 연산 수행 디코더를 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예들에 따른 디코더는, 메인 메모리, 플래그 데이터를 저장하는 플래그 메모리, 및 반복(iteration) 연산을 수행하는 디코딩 로직(decoding logic)을 포함하되, 디코딩 로직은, 제1 데이터를 이용하여 i 번째(i는 자연수) 연산을 수행하고, 제1 데이터의 i 번째 연산 결과인 제2 데이터를 플래그 인코딩하여, 플래그 인코딩이 성공하는 경우, 제2 데이터의 플래그 인코딩 결과를 제1 플래그 데이터로 플래그 메모리에 저장하고, 플래그 인코딩이 실패하는 경우, 제2 데이터의 제1 플래그 데이터와 다르고 미리 정한 제2 플래그 데이터를 플래그 메모리에 저장하는 것을 포함한다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예들에 따른 디코더는, 메인 메모리, 플래그 데이터를 저장하는 플래그 메모리, 및 반복(iteration) 연산을 수행하는 디코딩 로직(decoding logic)을 포함하되, 디코딩 로직은, 플래그 메모리에 저장된 플래그 데이터를 참조하고, 참조한 플래그 데이터를 기반으로 플래그 데이터보다 데이터 크기가 큰 출력 데이터를 생성하되, 출력 데이터를 생성하는 것은, 참조한 플래그 데이터가 제1 플래그 데이터이면, 제1 플래그 데이터를 플래그 디코딩하는 것을 포함하고, 참조한 플래그 데이터가 상기 제1 플래그 데이터와 다르고 미리 정한 제2 플래그 데이터이면, 메인 메모리를 리드하는 것을 포함한다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예들에 따른 스토리지 장치는, 하나 이상의 비휘발성 메모리(non-volatile memory), 및 하나 이상의 비휘발성 메모리와 연결된 ECC(Error Check and Correct) 장치를 포함하되, ECC 장치는, 제1 메모리와, 제1 메모리보다 큰 저장 용량을 갖는 제2 메모리와, 반복(iteration) 연산을 이용하여 ECC 디코딩을 수행하는 디코딩 로직(decoding logic)을 포함하고, 하나 이상의 비휘발성 메모리에 저장된 데이터를 리드할 때, 디코딩 로직은, 반복 연산을 이용하여 ECC 디코딩을 수행하되, ECC 디코딩은, 반복 연산의 결과에 따라 제1 메모리만 액세스(access) 하거나, 제1 및 제2 메모리 모두에 액세스하는 것을 포함한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
도 1은, 몇몇 실시예들에 따른 디코더(decoder)의 구성을 설명하기 위한 예시적인 블록도이다.
도 2는, 몇몇 실시예에 따른 반복 연산을 수행하기 위한 선행과정에 대한 예시적인 순서도이다.
도 3a는, 몇몇 실시예들에 따른 신드롬 지원 코드를 이용한 원본 데이터의 변환을 설명하기 위한 예시적인 도면이다.
도 3b는, 몇몇 실시예들에 따른 신드롬 지원 코드를 이용한 원본 데이터의 변환을 설명하기 위한 다른 예시적인 도면이다.
도 4a는, 몇몇 실시예들에 따른 플래그 인코딩 및 플래그 디코딩을 설명하기 위한 예시적인 도면이다.
도 4b는, 몇몇 실시예들에 따른 플래그 인코딩의 실패를 설명하기 위한 예시적인 도면이다
도 5는, 다른 몇몇 실시예들에 따른 플래그 인코딩 및 플래그 디코딩을 설명하기 위한 예시적인 도면이다.
도 6은, 몇몇 실시예들에 따른 반복 연산 과정을 설명하기 위한 예시적인 순서도이다.
도 7a 내지 도 8b는, 몇몇 실시예들에 따른 반복 연산 과정을 설명하기 위한 예시적인 도면이다.
도 9는, 몇몇 실시예들에 따른 반복 연산을 수행하는 과정에서, 각각의 구성요소들의 동작을 설명하기 위한 타이밍도이다.
도 10은, 몇몇 실시예들에 따른 반복 연산을 통한 오류 정정을 수행하는 스토리지 장치에 관한 예시적인 블록도이다.
도 11은, 몇몇 실시예들에 따른 스토리지 장치가 반복 연산을 이용하여, ECC 디코딩을 수행하는 방법에 관한 예시적인 순서도이다.
도 12는, 몇몇 실시예들에 따른 수신기의 구조를 설명하는 예시적인 블록도이다.
도 1은, 몇몇 실시예들에 따른 디코더(decoder)의 구성을 설명하기 위한 예시적인 블록도이다.
도 1을 참조하면, 몇몇 실시예들에 따른 디코더(100)는, 디코딩 로직(decoding logic, 110), 메인 메모리(main memory, 120), 플래그 메모리(flag memory, 130), 및 버퍼(buffer, 140)를 포함할 수 있다. 몇몇 실시예들에 따른 디코더(100)는, 반복 연산을 이용하는 디코딩을 수행할 수 있다. 예를 들어, 디코더(100)는 LDPC(Low Density Parity Check) 디코더일 수 있다. 그러나 실시예들이 이에 제한되지는 않는다. 예를 들어, 디코더(100)는 터보(turbo) 디코더일 수 있다.
디코딩 로직(110)은 로직 게이트(logic gate, 112), 플래그 인코딩 로직(flag encoding logic, 114), 및 플래그 디코딩 로직(flag decoding logic, 116)을 포함할 수 있다.
로직 게이트(112)는 데이터를 이용하여 실질적인 연산을 수행할 수 있다. 플래그 인코딩 로직(114)은 제1 데이터, 예를 들어 '0001000000000000'를 제1 데이터보다 크기가 작은 플래그 데이터, 예를 들어 '01101'를 생성하는 플래그 인코딩을 수행할 수 있다. 플래그 인코딩 로직(114)은 플래그 인코딩을 수행할 때, 로직 게이트(112)를 이용하여 연산을 수행할 수 있다. 플래그 디코딩 로직(116)은 플래그 인코딩된 플래그 데이터를 다시 제1 데이터로 복구하는 플래그 디코딩을 수행할 수 있다. 플래그 디코딩 로직(116)은 플래그 디코딩을 수행할 때, 로직 게이트(112)를 이용하여 연산을 수행할 수 있다.
비록 도 1에서, 디코딩 로직(110)이 플래그 인코딩 로직(114), 및 플래그 디코딩 로직(116)을 포함하는 것으로 도시하였으나, 실시예들이 이에 제한되지는 않는다. 예를 들어, 플래그 인코딩 로직(114), 및 플래그 디코딩 로직(116)은 디코딩 로직(110)과 분리된 별개의 로직일 수 있다. 또한, 플래그 인코딩 로직(114) 및 플래그 디코딩 로직(116)은 각각 별개의 로직 게이트(logic gate)를 포함할 수 있다. 플래그 인코딩 로직(114) 및 플래그 디코딩 로직(116)은 각각 별개의 로직 게이트를 이용하여, 각각 플래그 인코딩 및 플래그 디코딩을 수행할 수 있다.
디코딩 로직(110)은 반복 연산을 이용하는 디코딩의 일련의 과정을 처리할 수 있다. 예를 들어, 디코딩 로직(110)은 메인 메모리(120)에 액세스(access)하여 데이터를 리드(read)할 수 있다. 또한, 디코딩 로직(110)은 리드한 데이터를 버퍼(140)에 라이트(write)할 수 있다. 또한, 디코딩 로직(110)은 버퍼(140)에 라이트된 데이터와 로직 게이트(112)를 이용하여 연산을 수행할 수 있다. 또한, 디코딩 로직(110)은 메인 메모리(120)에 액세스하기 전 플래그 메모리(130)에 액세스하여, 플래그 데이터의 종류를 판단하여, 메인 메모리(120)에 액세스할지 여부를 결정할 수 있다. 이와 관련된 구체적인 내용은 후술한다.
디코딩 로직(110)은 호스트(HOST)로부터 명령에 의해, 반복 연산을 이용하는 디코딩을 수행할 수 있다. 또한, 디코딩 로직(110)은 특정 상황이 주어지면 반복 연산을 이용하는 디코딩을 수행할 수 있다. 예를 들어, 디코딩 로직(110)은, 디코더(100)에 특정 길이의 데이터가 제공되면, 반복 연산을 이용하는 디코딩을 수행할 수 있다. 그러나, 실시예들이 이에 제한되지는 않는다.
비록 도 1의 110번 구성을 본 명세서에서는, "디코딩 로직"이라고 지칭하였으나, 본 발명의 기술적 사상이 이에 제한되지는 않는다. 예를 들어, 도 1의 디코딩 로직(110)은 중앙 처리 장치(CPU: Central Processing Unit), 마이크로프로세서(MPU: Micro Processor Unit), 어플리케이션 프로세서(AP: Application Processor) 및/또는 이들의 조합으로 구현될 수 있다.
메인 메모리(120)는 데이터를 저장할 수 있다. 예를 들어, 메인 메모리(120)는 제1 및 제2 데이터를 저장할 수 있다. 메인 메모리(120)는 디코딩 로직(110)이 연산을 수행하기 위한 데이터를 버퍼(140)에 제공할 수 있다. 메인 메모리(120)는 일시적 컴퓨터 판독가능한 매체(transitory computer readable media)일 수 있다. 예를 들어, 메인 메모리(120)는 레지스터(register), 캐쉬(cache), SRAM(static random access memory), 및 DRAM(dynamic random access memory) 등과 같은, 일시적으로 데이터를 저장하고 컴퓨터에 의해 판독이 가능한 매체일수 있다. 그러나, 실시예들이 이에 제한되지는 않는다. 예를 들어, 메인 메모리(120)는 플래시 메모리(flash memory), CD, DVD, 하드 디스크(hard disk), 블루레이 디스크(blu-ray disk), USB, 및 ROM 등과 같은 반영구적으로 데이터를 저장하는 매체일 수 있다.
플래그 메모리(130)는 데이터를 저장할 수 있다. 예를 들어, 플래그 메모리(130)는 제1 및 제2 플래그 데이터를 저장할 수 있다. 제1 및 제2 플래그 데이터는 제1 및 제2 데이터에 비해 상대적으로 크기가 작을 수 있다. 따라서, 플래그 메모리(130)의 저장 용량은 메인 메모리(120)의 저장 용량보다 상대적으로 작을 수 있다. 결국, 플래그 메모리(130)에 액세스 하기 위한 소비 전력은, 메인 메모리(120)에 액세스하기 위한 소비 전력보다 작을 수 있다. 또한, 플래그 메모리(130)는 메인 메모리(120)과 물리적으로 분리된 다른 메모리일 수 있다. 플래그 메모리(130)는 일시적 컴퓨터 판독가능한 매체(transitory computer readable media)일 수 있다. 예를 들어, 플래그 메모리(130)는 레지스터(register), 캐쉬(cache), SRAM(static random access memory), 및 DRAM(dynamic random access memory) 등과 같은, 일시적으로 데이터를 저장하고 기기에 의해 판독이 가능한 매체일수 있다. 그러나, 실시예들이 이에 제한되지는 않는다. 예를 들어, 플래그 메모리(130)는 플래시 메모리(flash memory), CD, DVD, 하드 디스크(hard disk), 블루레이 디스크(blu-ray disk), USB, 및 ROM 등과 같은 반영구적으로 데이터를 저장하는 매체일 수 있다.
버퍼(140)는 디코딩 로직(110)이 연산을 수행하기 위해, 임시로 데이터를 저장하는 공간일 수 있다. 비록 도 1에서, 버퍼(140)가 디코딩 로직(110)과 분리된 것으로 도시하였으나, 실시예들이 이에 제한되는 것은 아니다. 예를 들어, 몇몇 실시예들에서 버퍼(140)는 디코딩 로직(110) 내부에 포함될 수 있다. 즉, 버퍼(140)는 디코딩 로직(110)의 내부 캐쉬 메모리(internal cache memory)일 수 있다. 버퍼(140)는 일시적 컴퓨터 판독 가능한 매체(transitory computer-readable media)일 수 있다. 일시적 컴퓨터 판독 가능한 매체는 레지스터(register), 캐쉬(cache), SRAM(static random access memory), 및 DRAM(dynamic random access memory) 등과 같은, 일시적으로 데이터를 저장하고 기기에 의해 판독이 가능한 매체를 의미할 수 있다. 그러나, 실시예들이 이에 제한되지는 않는다.
도 2는, 몇몇 실시예에 따른 반복 연산을 수행하기 위한 선행과정에 대한 예시적인 순서도이다.
도 2를 참조하면, 우선 원본 데이터를 제1 데이터로 변환한다(S210). 원본 데이터를 제1 데이터로 변환하는 것은, 랜덤(random)한 값을 갖는 원본 데이터를 단순한 값을 갖는 제1 데이터로 변환하는 것일 수 있다. 예를 들어, 단순한 값은 데이터에 '1'이 포함된 비율이 매우 크거나, '0' 이 포함된 비율이 매우 큰 값일 수 있다. 예를 들어, '000000010000000'은 여기서 의미하는 단순한 값일 수 있다.
몇몇 실시예들에서, 신드롬 지원 코드(syndrome aided code)를 이용하여 원본 데이터를 제1 데이터로 변환할 수 있다. 신드롬 지원 코드는 원본 데이터에서 오류가 추정되는 위치를 '1'로 표현하는 코드일 수 있다. 구체적인 설명을 위해, 도 3a 및 도 3b를 참조한다.
도 3a는, 몇몇 실시예들에 따른 신드롬 지원 코드를 이용한 원본 데이터의 변환을 설명하기 위한 예시적인 도면이다.
도 3b는, 몇몇 실시예들에 따른 신드롬 지원 코드를 이용한 원본 데이터의 변환을 설명하기 위한 다른 예시적인 도면이다.
도 3a를 참조하면, 원본 데이터(310)는 '0011101010010101'일 수 있다. 만약, 13 번째 비트(bit)의 값(여기에서 비트의 순서는, 맨 오른쪽 비트를 첫번째 비트라고 한다.)에 오류가 있는 것으로 추정되면, 신드롬 지원 코드를 이용하여 이를 나타내면, '0001000000000000'으로 표현될 수 있다. 즉, 신드롬 지원 코드를 이용하여, 원본 데이터(310)를 제1 데이터(320)로 변환하면, 제1 데이터(320)는 '0001000000000000'의 값을 가질 수 있다.
도 3b를 참조하면, 원본 데이터(311)는 '0011101010010101'일 수 있다. 만약, 7, 10 번째 비트(bit)의 값에 오류가 있는 것으로 추정되면, 신드롬 지원 코드를 이용하여 이를 나타내면, '0000001001000000'으로 표현될 수 있다. 즉, 신드롬 지원 코드를 이용하여, 원본 데이터(311)를 제1 데이터(321)로 변환하면, 제1 데이터(321)는 '0000001001000000'의 값을 가질 수 있다. 도 3a 및 도 3b에서 상술한 값들은 원본 데이터와 제1 데이터를 용이하게 설명하기 위해 임의로 선택된 값일 뿐, 실시예들이 이에 제한되지는 않는다.
도 3a 및 도 3b에서, 디코딩 로직(110)이 원본 데이터(310, 311)를 제1 데이터(320, 321)로 변환할 수 있으나, 실시예들이 이에 제한되지는 않는다. 예를 들어, 몇몇 실시예들에서, 디코더(100) 외부에 존재하는 프로세서가 원본 데이터(310, 311)를 제1 데이터(320, 321)로 변환할 수 있다.
비록 본 명세서에서 랜덤(random)한 값을 갖는 원본 데이터(310, 311)를 단순한 값을 갖는 제1 데이터(320, 321)로 변환하는 예로서, 신드롬 지원 코드를 이용하는 것을 설명하였으나, 실시예들이 이에 제한되지는 않는다. 원본 데이터(310, 311)를 제1 데이터(320, 321)로 변환하기 위해, 본 발명의 기술분야에서 통상의 지식을 가진자가 특정 데이터를 단순화하기 위해 이용할 수 있는 다양한 방법들을 이용할 수 있다.
또한, 본 명세서에서 원본 데이터(310, 311)를 제1 데이터(320, 321)로 변환하는 것은, 후술할 플래그 인코딩 및 플래그 디코딩에서, 무손실(lossless)의 플래그 인코딩 및 플래그 디코딩을 수행하기 위함이다. 따라서, 원본 데이터(310, 311)가 단순한 값을 갖는 데이터라면, 원본 데이터(310, 311)를 제1 데이터(320, 321)로 변환하는 과정은 필요하지 않을 수 있고, 원본 데이터(310, 311) 자체를 제1 데이터(320, 321)로 가정할 수 있다. 다시 말해서, 본 명세서에서 제1 데이터(320, 321)는, 중간 과정에 관계 없이, '1'이 포함된 비율이 매우 크거나, '0' 이 포함된 비율이 매우 큰 데이터일 수 있다.
다시 도 2를 참조하면, 제1 데이터를 이용하여, 반복 연산을 수행할 수 있다(S220). 반복 연산을 수행하는 과정을 설명하기에 앞서, 도 4a 내지 도 5를 참조하여, 몇몇 실시예들에 따른 플래그 인코딩 및 플래그 디코딩을 설명한다.
도 4a는, 몇몇 실시예들에 따른 플래그 인코딩 및 플래그 디코딩을 설명하기 위한 예시적인 도면이다.
도 4a를 참조하면, 몇몇 실시예들에 따른 디코딩 로직(110)은 제1 데이터(420)를 플래그 인코딩하여, 제1 플래그 데이터(430)를 생성할 수 있다. 예를 들어, 제1 플래그 데이터(430)는 제1 데이터(420)에서 '1'의 위치일 수 있다. 예를 들어, 제1 데이터(420)가 '0001000000000000'일 때, 플래그 인코딩을 통해 생성된 제1 플래그 데이터(430)는 '01101'일 수 있다. 다시 말해서, 제1 데이터(420)에서, '1'이 포함된 위치는 '13 번째' 비트이며, 플래그 인코딩을 통해 생성된 제1 플래그 데이터(430)는 '13'을 의미하는 '01101'일 수 있다.
플래그 디코딩이 수행되는 과정은, 앞서 설명한 플래그 인코딩을 수행하는 과정의 반대일 수 있다. 설명의 편의를 위해 이러한 과정은 생략한다.
도 4a의 제1 데이터(420)는 도 3a에서 신드롬 지원 코드를 이용하여 변환된 데이터를 의미할 수 있으나, 실시예들이 이에 제한되는 것은 아니다.
도 4b는, 몇몇 실시예들에 따른 플래그 인코딩의 실패를 설명하기 위한 예시적인 도면이다.
도 4b를 참조하면, 몇몇 실시예들에 따른 제1 데이터(421)를 플래그 인코딩하여, 제2 플래그 데이터(431)를 생성할 수 있다. 예를 들어, 제2 플래그 데이터(431)는 제1 데이터(421)의 플래그 인코딩 실패를 의미하고, 제1 플래그 데이터와는 다른, 미리 정한 값일 수 있다. 예를 들어, 제1 데이터(421)를 플래그 인코딩할 때, 제1 데이터(421)에 '1'이 2개 이상 포함되는 경우, '1'의 위치를 효과적으로 표현이 불가능할 수 있다. 즉, 제1 데이터(421)에 '1'이 2개 이상인 경우, 플래그 인코딩이 실패할 수 있다. 플래그 인코딩이 실패하면, 제2 플래그 데이터(431)를 제1 플래그 데이터와 다르고, 플래그 인코딩 실패를 의미하는 미리 정한 값으로 생성할 수 있다. 예를 들어, 제2 플래그 데이터(431)는 '11111'일 수 있다.
플래그 데이터가 제2 플래그 데이터(431)인 경우, 플래그 디코딩을 수행할 수 없다. 예를 들어, 제1 데이터(421)가 '0000111000000000'인 경우와, 제1 데이터(421)가 '0000111000000001'인 경우 모두 플래그 인코딩하면, '11111'이 생성될 수 있다. 따라서, 제2 플래그 데이터(431) '11111'인 경우, 이를 제1 데이터(421)로 복구할 수 없다. 즉, 몇몇 실시예에서, 플래그 데이터가 제2 플래그 데이터(431)인 경우, 플래그 디코딩을 수행하지 않을 수 있다.
도 4b의 제1 데이터(421)는 도 3b에서 신드롬 지원 코드를 이용하여 변환된 데이터를 의미할 수 있으나, 실시예들이 이에 제한되는 것은 아니다.
도 1, 도 4a, 및 도 4b를 참조하면, 제1 데이터(420, 421)와 제1 및 제2 플래그 데이터(430, 431)를 비교해 볼 때, 만약 제1 데이터(420, 421)가 2N의 크기를 갖는 경우, 제1 및 제2 플래그 데이터(430, 431)는 N+1개의 크기를 가질 수 있다. 예를 들어, 제1 데이터(420, 421)가 210 크기를 갖는다면, 제1 및 제2 플래그 데이터(430, 431)는 11의 크기를 가질 수 있다. 결론적으로, 제1 및 제2 플래그 데이터(430, 431)은 제1 데이터(420, 430)보다 크기가 매우 작을 수 있다. 결국, 앞서 설명한 바와 같이, 제1 데이터(420, 421)을 저장하는 메인 메모리(120)의 저장 용량은 제1 및 제2 플래그 데이터(430, 431)을 저장하는 플래그 메모리(130)의 저장 용량보다 상대적으로 클 수 있다.
도 5는, 다른 몇몇 실시예들에 따른 플래그 인코딩 및 플래그 디코딩을 설명하기 위한 예시적인 도면이다.
도 5를 참조하면, 몇몇 실시예들에 따른 제1 데이터(520)를 플래그 인코딩을 이용하여, 제1 플래그 데이터(530)를 생성할 수 있다. 예를 들어, 플래그 인코딩 및 플래그 디코딩은 런-렝쓰 코드(run-length code)를 이용할 수 있다. 예를 들어, 제1 데이터(520)가 '0000000...00111000'이라고 가정할 수 있다. 여기에서 최상위 비트의 0이 연속되는 개수는 100개라고 가정한다. 이때, 플래그 인코딩을 통해 생성된 제1 플래그 데이터(530)는 '0(100)1(3)0(3)'일 수 있다. 이때, 괄호 안의 숫자는 괄호 앞의 숫자가 연속되는 개수를 의미한다. 즉, 런-렝쓰 코드는 런(연속되는 수)의 길이를 나타내는 코드일 수 있다. 몇몇 실시예들에서, 런-렝쓰 코드를 이용하면, 런의 개수가 많을 수록 제1 플래그 데이터(530)의 크기는 작아질 수 있다. 예를 들어, 제1 데이터(520)가 1이 M개, 0이 N개 연속되는 데이터라고 가정하면, 제1 데이터(520)의 크기는 M+N이 될 수 있다. 이때, 런-렝쓰 코드를 이용하여 제1 데이터(520)를 플래그 인코딩하면, 제1 플래그 데이터(530)의 크기는 1+log2M+1+log2N이 될 수 있다. 여기에서 각각의 1의 크기는 연속되는 데이터의 값(예를 들어, 1 또는 0)을 나타내는데 이용되고, log2M, log2N은 연속되는 데이터의 개수(예를 들어, M번 연속, N번 연속)를 나타내기 이용된다. 즉, 제1 플래그 데이터(530)은, 1(M)0(N)이 될 수 있다.
플래그 디코딩이 수행되는 과정은, 앞서 설명한 플래그 인코딩을 수행하는 과정의 반대일 수 있다. 설명의 편의를 위해 이러한 과정은 생략한다.
도 4a 내지 도 5에서, 몇몇 실시예들에 따른 플래그 인코딩 및 플래그 디코딩을 설명하였으나, 실시예들이 이에 제한되는 것은 아니다. 본 기술분야의 통상의 지식을 가진자는, 제1 데이터의 종류, 형태 및 오류의 개수 등에 따라 적당한 플래그 인코딩 및 플래그 디코딩 방법을 선택하여 적용할 수 있을 것이다. 예를 들어, 몇몇 실시예들에 따른 플래그 인코딩 및 플래그 디코딩을 수행하기 위해, 허프만 코드(Huffman code)나 렘펠-지브-웰치 코드(Lempel-Ziv-Welch code)를 이용할 수 있다.
도 6은, 몇몇 실시예들에 따른 반복 연산 과정을 설명하기 위한 예시적인 순서도이다.
도 7a 내지 도 8b는, 몇몇 실시예들에 따른 반복 연산 과정을 설명하기 위한 예시적인 도면이다.
도 6의 순서도를 용이하게 설명하기 위해, 도 7a 내지 도 8b를 참조하여 설명하도록 한다.
도 7a 내지 도 8b에서, 디코딩 로직(110), 메인 메모리(120), 플래그 메모리(130), 및 버퍼(140)는 도 1에서의 디코딩 로직(110), 메인 메모리(120), 플래그 메모리(130), 및 버퍼(140)와 동일한 구성요소일 수 있다.
먼저, 도 6을 참조하면, 반복 연산 과정이 시작되면, 먼저 플래그 메모리(130)를 참조한다(S610).
플래그 메모리(130)에 플래그 데이터가 존재하는지를 판단하고(S620), 플래그 메모리(130)에 데이터가 존재하지 않으면, 제1 데이터를 초기화하여 제1 데이터를 생성한다(S622). 제1 데이터를 초기화하는 것은, 도 3a 및 도 3b의 원본 데이터를 제1 데이터로 변환하는 과정일 수 있다.
도 7a 및 도 7b를 참조하면, 디코딩 로직(110)은 플래그 메모리(130)를 참조할 수 있다. 플래그 메모리(130)에 플래그 데이터가 존재하지 않으면, 즉, 플래그 메모리(130)가 'NULL'이면, 디코딩 로직(110)은 제1 데이터를 초기화하여 버퍼(140)에 저장할 수 있다. 예를 들어, 초기화된 제1 데이터를 '0000011010000000'이라 가정한다(①, ②).
다시, 도 6을 참조하면, 생성된 제1 데이터를 이용하여, 연산을 수행한다(S640). 본 명세서에서, 설명의 편의를 위해, 제1 데이터의 연산 결과를 제2 데이터라 한다.
도 7a를 참조하면, 디코딩 로직(110)은 버퍼(140)에 저장된 제1 데이터를 이용하여, 연산을 수행할 수 있다. 제1 데이터의 연산 수행 결과는 제2 데이터로 버퍼(140)에 저장될 수 있다. 예를 들어, 디코딩 로직(110)이 제1 데이터 '0000011010000000'를 이용해 연산한 결과가 제2 데이터, 즉 '0001000000000000'이라 가정한다(③).
도 7b를 참조하면, 디코딩 로직(110)은 버퍼(140)에 저장된 제1 데이터를 이용하여, 연산을 수행할 수 있다. 제1 데이터의 연산 수행 결과는 제2 데이터로 버퍼(140)에 저장될 수 있다. 예를 들어, 디코딩 로직(110)이 제1 데이터 '0000011010000000'를 이용해 연산한 결과가 제2 데이터, 즉 '0000001001000000'이라 가정한다(③).
다시 도 6을 참조하면, 제2 데이터를 플래그 인코딩하여 플래그 데이터를 생성한다(S650). 생성된 플래그 데이터를 플래그 메모리(130)에 저장한다(S660).
도 7a를 참조하면, 디코딩 로직(110)은 제2 데이터를 플래그 인코딩하여 제1 플래그 데이터를 생성할 수 있다. 제1 플래그 데이터는, 예를 들어, '01101'일 수 있다(④).
도 7a에서 이용된 플래그 인코딩은 도 4a에서 설명한 플래그 인코딩일 수 있다. 다시 말해서, 제1 플래그 데이터는, 제2 데이터의 1의 위치를 의미하도록 생성될 수 있다. 그러나, 실시예들이 이에 제한되지는 않는다.
디코딩 로직(110)은 제1 플래그 데이터를 플래그 메모리(130)에 저장할 수 있다. 예를 들어, 디코딩 로직(110)은 제1 플래그 데이터 '01101'을 플래그 메모리(130)에 저장할 수 있다(⑤).
도 7b를 참조하면, 디코딩 로직(110)은 제2 데이터를 플래그 인코딩하여 제2 플래그 데이터를 생성할 수 있다. 제2 플래그 데이터는, 예를 들어, '11111'일 수 있다(④).
도 7b에서 이용된 플래그 인코딩은 도 4b에서 설명한 플래그 인코딩일 수 있다. 다시 말해서, 제2 플래그 데이터 '11111'은 제2 데이터의 플래그 인코딩 실패를 의미할 수 있다. 그러나, 실시예들이 이에 제한되지는 않는다.
디코딩 로직(110)은 제2 플래그 데이터를 플래그 메모리(130)에 저장할 수 있다. 예를 들어, 디코딩 로직(110)은 제2 플래그 데이터 '11111'을 플래그 메모리(130)에 저장할 수 있다(⑤).
다시, 도 6을 참조하면, 생성된 플래그 데이터의 종류를 판단한다(S662). 만일 생성된 플래그 데이터가 제1 플래그 데이터인 경우, 반복 연산이 완료되었는지 여부를 판단하고(S670), 반복 연산이 완료되지 않은 경우 다시 플래그 메모리(130)를 참조하여(S610), 상기 과정을 반복한다. 만약 반복 연산이 완료된 경우, 해당 과정은 종료한다.
생성된 플래그 데이터가 제2 플래그 데이터인 경우, 제2 데이터를 메인 메모리(120)에 저장한다(S664).
도 7b를 참조하면, 디코딩 로직(110)은 제2 데이터를 메인 메모리(120)에 저장할 수 있다. 예를 들어, 디코딩 로직(110)은 제2 데이터 '00000100100000'을 메인 메모리(120)에 저장할 수 있다(⑥).
다시 도 6을 참조하면, 반복 연산이 완료되었는지 여부를 판단하고(S670), 반복 연산이 완료되지 않은 경우 다시 플래그 메모리를 참조하여(S610), 상기 과정을 반복한다. 만약 반복 연산이 완료된 경우, 해당 과정은 종료한다.
만일, 플래그 메모리(130)에 플래그 데이터가 존재하는지를 판단하여(S620), 플래그 메모리(130)에 플래그 데이터가 존재하면, 플래그 메모리(130)에 존재하는 플래그 데이터의 종류를 판단한다(S630). 만약, 플래그 메모리(130)에 존재하는 플래그 데이터가 제1 플래그 데이터이면, 제1 플래그 데이터를 플래그 디코딩하여 제1 데이터를 생성한다(S632). 이후, 생성된 제1 데이터를 이용하여 연산을 수행한다(S640). 이후 단계 S650 내지 S670은 앞서 설명한 바와 동일하게 진행될 수 있다.
도 8a를 참조하면, 디코딩 로직(110)은 플래그 메모리(130)를 참조할 수 있다(①). 플래그 메모리(130)에 제1 플래그 데이터가 존재하면, 디코딩 로직(110)은 제1 플래그 데이터를 플래그 디코딩하여, 제2 데이터를 복구하고 이를 버퍼(140)에 저장할 수 있다. 예를 들어, 플래그 메모리(130)에 제1 플래그 데이터 '01101'이 존재하면, 디코딩 로직(110)은 플래그 디코딩을 통해, 이를 제2 데이터 '0001000000000000'로 복구하여, 이를 버퍼(140)에 저장할 수 있다(②). 디코딩 로직(110)은 버퍼(140)에 저장된 제2 데이터를 이용하여, 연산을 수행할 수 있다(③). 도 8a에서 이용된 플래그 디코딩은 도 4a에서 설명한 플래그 디코딩일 수 있으나, 실시예들이 이에 제한되지는 않는다.
다시 도 6을 참조하면, 플래그 메모리(130)에 플래그 데이터가 존재하는지를 판단하여(S620), 플래그 메모리(130)에 존재하는 플래그 데이터가 제2 플래그 데이터이면, 메인 메모리(120)에 액세스하여, 메인 메모리(120)로부터 제1 데이터를 리드한다(S634). 이후, 리드된 제1 데이터를 이용하여 연산을 수행한다(S640). 이후 단계 S650 내지 S670은 앞서 설명한 바와 동일하게 진행될 수 있다. 이와 같은 과정을 구체적으로 설명하기 위해, 도 8a 및 도 8b를 참조하여 설명한다.
도 8b를 참조하면, 디코딩 로직(110)은 플래그 메모리(130)를 참조할 수 있다(①). 플래그 메모리(130)에 제2 플래그 데이터가 존재하면, 디코딩 로직(110)은 메인 메모리(120)에 액세스할 수 있다. 디코딩 로직(110)은 메인 메모리(120)로부터 제2 데이터를 리드하여 버퍼(140)에 저장할 수 있다. 예를 들어, 플래그 메모리(130)에 제2 플래그 데이터 '11111'이 존재하면, 디코딩 로직(110)은 메인 메모리(120)에 액세스할 수 있다. 디코딩 로직(110)은, 메인 메모리(120)으로부터 제2 데이터 '0001000000000000'를 리드하여 버퍼(140)에 저장할 수 있다(②, ③). 디코딩 로직(110)은 버퍼(140)에 저장된 제2 데이터를 이용하여, 연산을 수행할 수 있다(④).
도 9는, 몇몇 실시예들에 따른 반복 연산을 수행하는 과정에서, 각각의 구성요소들의 동작을 설명하기 위한 타이밍도이다.
도 9를 참조하면, 각 반복 연산의 말미에 버퍼 플러쉬(buffer flush)가 이루어진다. 몇몇 실시예들에 따르면, 디코딩 로직(110)은 버퍼(140)에 저장된 데이터를 이용해 연산을 수행하며, 연산 수행 결과를 메인 메모리(120)에 저장하거나, 연산 수행 결과를 플래그 인코딩을 통해 제1 플래그 데이터를 생성하여 플래그 메모리(130)에 저장한다. 이후, 다음 연산을 위해, 버퍼(140)에 저장된 데이터가 삭제될 필요가 있는데, 이를 본 명세서에서, 버퍼 플러쉬로 지칭한다.
디코딩 로직(110)이 플래그 메모리(130)를 참조하는 것은, 버퍼 플러쉬가 동작하는 동안 진행될 수 있다. 이를 통해, 플래그 메모리(130)를 참조하는데 필요한 시간을 절약할 수 있다. 따라서, 몇몇 실시예들에서, 디코딩 로직(110)은, 버퍼 플러쉬가 동작하는 동안 플래그 메모리(130)를 참조하기 때문에, 플래그 메모리(130)를 참조하는데 따로 시간이 할당되지 않으므로, 전체적인 스루풋(throughput)을 유지할 수 있다.
메인 메모리(120)는, 플래그 메모리(130)가 부존재할 경우, 버퍼 플러쉬가 동작하는 동안을 제외하고 모두 액세스될 수 있다.
플래그 메모리(130)가 존재하는 경우, 플래그 메모리(130)는 항상 액세스 상태를 유지할 수 있다.
메인 메모리(120)는 플래그 메모리(130)가 존재하는 경우, 메인 메모리(120)로부터 데이터를 리드할 때, 또는 메인 메모리(120)로 데이터를 라이트할 때 액세스 될 수 있다. 다시 말해서, 플래그 메모리(130)에 제2 플래그 데이터가 존재하는 경우에만, 액세스될 수 있다.
즉, 플래그 메모리(130)에 제1 플래그 데이터가 존재하는 경우, 플래그 메모리(130)만 액세스될 수 있다. 또한, 플래그 메모리(130)에 제2 플래그 데이터가 존재하는 경우, 메인 메모리(120) 및 플래그 메모리(130) 모두 액세스될 수 있다. 연산 과정이 반복될 수록 메인 메모리(120)에 액세스하는 횟수는 줄어들 수 있으나, 실시예들이 이에 제한되는 것은 아니다.
플래그 디코딩은 메인 메모리(120)가 액세스되지 않는 경우에만 수행될 수 있다. 즉, 플래그 메모리(130)에 제1 플래그 메모리가 존재하는 경우에만, 플래그 디코딩이 수행될 수 있다.
도 10은, 몇몇 실시예들에 따른 반복 연산을 통한 오류 정정을 수행하는 스토리지 장치에 관한 예시적인 블록도이다.
도 10을 참조하면, 몇몇 실시예들에 따른 스토리지 장치(storage device, 1000)는 비휘발성 메모리 컨트롤러(1010), ECC 장치(ECC DEVICE, 1020_1~1020_N), 및 비휘발성 메모리(NON-VOLATILE MEORY, 1030_1~1030_N)를 포함할 수 있다.
비휘발성 메모리 컨트롤러(1010)는 프로세서(PROCESSOR, 1012), 컨트롤러(CONTROLLER, 1014), 및 로컬 메모리(LOCAL MEMORY, 1016)를 포함할 수 있다.
프로세서(1012)는 회로, 로직, 코드 또는 이들의 조합으로 구현가능하며, 스토리지 장치(1000)의 동작을 전반적으로 제어한다. 스토리지 장치(1000)에 전원이 인가되면, 프로세서(1012)는 롬(ROM)에 저장된 스토리지 장치(1000) 동작을 위한 펌웨어를 램(RAM) 상에서 구동시킴으로써 스토리지 장치(1000)의 전반적인 동작을 제어할 수 있다.
컨트롤러(1014)는 스토리지 장치(1000) 구비된 로컬 메모리(1016)를 제어한다. 로컬 메모리(1016)는 롬 또는 램을 포함할 수 있다. 몇몇의 실시예에서, 롬은 스토리지 장치(1000)의 구동 펌웨어 코드를 저장할 수 있다. 한편, 램은 호스트(HOST)로부터 입력되는 각종 명령어 또는 변수들을 저장할 수 있다. 그리고 비휘발성 메모리(1030_1~1030_N)로 입력 또는 비휘발성 메모리(1030_1~1030_N)로부터 출력되는 데이터들을 저장할 수 있다. 그리고, 비휘발성 메모리(1030_1~1030_N)로 입력되고 출력되는 각종 파라미터 및 변수들을 저장할 수 있다.
도 10에 도시된 바와 같이, ECC 장치(1020_1~1020_N)는 디코더 로직(1022_1~1022_N), 제1 메모리(1124_1~1124_N), 및 제2 메모리(1126_1~1126_N)를 포함할 수 있다. 디코더 로직(1022_1~1022_N), 제1 메모리(1124_1~1124_N), 및 제2 메모리(1126_1~1126_N)은 각각 도 1의 디코더 로직(110), 플래그 메모리(130), 메인 메모리(120)와 동일 또는 유사할 수 있다. 다시 말해서, 제1 메모리(1124_1~1124_N)의 저장 용량은 제2 메모리(1126_1~1126_N)보다 작을 수 있다. 또한, 제1 메모리(1124_1~1124_N)에 저장되는 데이터의 크기는 제2 메모리(1126_1~1126_N)에 저장되는 데이터의 크기보다 작을 수 있다. ECC 장치(1020_1~1020_N)는 몇몇 실시예들에 따른 반복 연산을 이용하는 오류 정정 디코딩(ECC 디코딩)을 수행할 수 있다. 도면에 도시하지는 않았지만, ECC 장치는 도 1의 버퍼(140)를 포함할 수 있다.
비휘발성 메모리(1030_1~1030_N)는 비휘발성 메모리 컨트롤러(1010)로부터 제공받은 데이터를 메모리 셀에 저장할 수 있다. 구체적으로, 비휘발성 메모리(1030_1~1030_N)는 데이터를 저장하는 복수개의 셀 어레이를 포함할 수 있다. 셀 어레이는 복수개의 플레인을 포함할 수 있고, 플레인은 복수개의 블록을 포함하며, 블록은 복수개의 페이지를 포함할 수 있다. 몇몇의 실시예에서, 비휘발성 메모리(1030_1~1030_N)는 EEPROM(Electrically Erasable Programmable Read-Only Memory), FRAM(Ferroelectrics Random Access Memory), PRAM(Phase-change Random Access Memory), MRAM(Magnetic Random Access Memory)를 포함하는 비휘발성 메모리 장치일 수 있다.
비록 도 10에서, 스토리지 장치(1000)가 복수개의 ECC 장치(1020_1~1020_N) 및 각각 이와 연결된 복수개의 비휘발성 메모리(1030_1~1030_N)를 포함하는 것으로 도시하였으나, 실시예들이 이에 제한되는 것은 아니다. 예를 들어, 하나의 ECC 장치(1020_1)에 복수개의 비휘발성 메모리(1030_1~1030_N)이 연결될 수 있다. 또한, 예를 들어, 스토리지 장치(1000)가 하나의 ECC 장치(1020_1)와 하나의 비휘발성 메모리(1020_1)를 포함할 수 있다. 따라서, 본 발명의 기술분야의 통상의 기술을 가진자는 여러 조합을 통해 스토리지 장치를 구성할 수 있을 것이다.
몇몇 실시예들에서, 호스트(HOST)로부터 데이터 리드(read) 명령이 입력되면, 비휘발성 메모리 컨트롤러(1010)는 비휘발성 메모리(1030_1~1030_N)에서 데이터를 읽어올 수 있다. 이때, ECC 장치(1020_1~1020_N)는 비휘발성 메모리(1030_1~1030_N)에 저장된 데이터를, 도 1 내지 도 9에서 설명한 바와 같은 반복 연산을 이용하여, ECC 디코딩할 수 있다. 예를 들어, ECC 디코딩은 LDPC 디코딩일 수 있다. 도 11을 참조하여, 몇몇 실시예들에 따른 스토리지 장치의 구동 방법에 대해 설명한다.
도 11은, 몇몇 실시예들에 따른 스토리지 장치가 반복 연산을 이용하여, ECC 디코딩을 수행하는 방법에 관한 예시적인 순서도이다. 설명의 편의를 위해, 도 10을 참조하여 설명하도록 한다.
도 10, 및 도 11을 참조하면, 호스트(HOST)로부터 리드 명령이 입력되면, 비휘발성 메모리(1030_1~1030_N)에 저장된 데이터에 대한 오류 정정을 시작할 수 있다. 또는, 호스트(HOST)로부터 리드 명령이 입력되면, 비휘발성 메모리(1030_1~1030_N)의 데이터는 ECC 장치(1020_1~1020_N)로 전달되고, ECC 장치(1020_1~1020_N)는 특정 길이의 데이터가 입력되면, 해당 데이터에 대한 오류정정을 시작할 수 있다. 저장된 데이터의 오류는 반복 연산을 이용하는 ECC 디코딩을 통해 정정될 수 있다(S1100). 설명의 편의를 위해, ECC 디코딩 과정을 하나의 ECC 장치(1020_1)와 하나의 비휘발성 메모리(1030_1)를 이용하는 것을 예로 든다. 또한, 설명의 편의를 위해, 앞서 설명한 내용과 중복되는 내용은 생략하거나 간단히 설명한다.
ECC 디코딩이 시작되면, 먼저 디코딩 로직(1022_1)은 제1 메모리(1024_1)에 액세스하여(S1110), 플래그 데이터를 참조한다(S1120).
참조한 플래그 데이터의 종류를 판별하고(S1130), 참조한 플래그 데이터가 제2 플래그 데이터이면, 제2 메모리(1026_1)에 액세스한다(S1132). 제2 메모리(1026_1)에 액세스 후 연산을 수행한다(S1140). 참조한 플래그 데이터가 제1 플래그 데이터이면, 제2 메모리(1026_1)에 액세스 없이 연산을 수행한다(S1140). 예를 들어, 참조한 플래그 데이터가 제1 플래그 데이터인 경우, 디코딩 로직(1122_1)은 제1 메모리(1024_1)의 제1 플래그 데이터를 플래그 디코딩하여 연산에 이용할 수 있다. 예를 들어, 참조한 플래그 데이터가 제2 플래그 데이터인 경우, 디코딩 로직(1122_1)은 제2 메모리(1026_1)에 저장된 데이터를 리드하여 연산에 이용할 수 있다.
연산 수행 결과를 플래그 인코딩하여 제1 메모리(1024_1)에 저장한다(S1150).
연산 수행 결과를 플래그 인코딩하여 생성된 플래그 데이터의 종류를 판별한다(S1160).
생성된 플래그 데이터가 제2 플래그 데이터이면, 제2 메모리(1026_1)에 액세스하여, 상기 연산 수행 결과를 제2 메모리(1026_1)에 저장하고(S1162), 반복 연산이 완료되었는지 여부를 판단한다(S1170). 생성된 플래그 데이터가 제1 플래그 데이터이면, 반복 연산이 완료되었는지 여부를 판단한다(S1170).
반복 연산이 완료되면, 즉, ECC 디코딩이 완료되면, 반복 연산의 최종 결과를 이용하여 오류를 정정할 수 있다(S1180).
몇몇 실시예들에서, ECC 디코딩은 병렬적으로 수행될 수 있다. 또한, 예를 들어, 비휘발성 메모리 컨트롤러(1010)가 복수의 비휘발성 메모리(1030_1~1030_N)에서 복수의 데이터를 리드할 때, 복수의 ECC 장치(1020_1~1020_N)는 각각 ECC 디코딩을 수행할 수 있다.
몇몇 실시예들에서, ECC 디코딩을 수행할 때, ECC 디코딩을 완료한 ECC 장치(예를 들어, 1020_1)는, ECC 디코딩을 완료하지 못한 ECC 장치(예를 들어, 1020_2)의 연산을 함께 수행할 수 있다. 예를 들어, 리드 명령이 수행되면, 제1 및 제2 ECC 장치(1020_1, 1020_2)는 각각 제1 및 제2 비휘발성 메모리(1030_1, 1030_2)에 저장된 데이터들을 각각 ECC 디코딩할 수 있다. 제1 ECC 장치(1020_1)는 ECC 디코딩이 완료되면 비휘발성 메모리 컨트롤러(1010)로 ECC 디코딩 완료 메세지를 전송할 수 있다. 비휘발성 메모리 컨트롤러(1010)는 제1 ECC 장치(1020_1)로부터 ECC 디코딩 완료 메세지를 전송받으면, 제1 ECC 장치(1020_1)를 ECC 디코딩 완료 메세지를 전송하지 않은 제2 ECC 장치(1020_2)가 수행하는 연산 과정에 참여하도록 할 수 있다.
도 12는, 몇몇 실시예들에 따른 수신기의 구조를 설명하는 예시적인 블록도이다. 앞서 설명한 내용과 중복되는 부분은 생략하거나 간단하게 설명한다.
도 12를 참조하면, 몇몇 실시예들에 따른 수신기(RECEIVER, 1200)는 안테나(ANTENNA, 1210) 및 디코더(DECODER, 1220)를 포함할 수 있다. 도 12의 디코더(1220)는 도 1 내지 도 9를 이용한 디코더(100)와 동일할 수 있다.
안테나(1210)는 인코딩된 데이터를 수신할 수 있다. 예를 들어, 인코딩된 데이터는 LDPC 인코딩된 데이터일 수 있다. 안테나(1210)가 수신한 인코딩된 데이터는, 디코더(1220)로 전달될 수 있다. 디코더(1220)는 인코딩된 데이터를, 반복 연산을 이용한 디코딩을 이용해서 디코딩할 수 있다. 예를 들어, 안테나(1210)로부터 인코딩된 데이터가 전달되면, 디코더(1220)는 인코딩된 데이터를 단순한 값을 갖는 제1 데이터로 변환할 수 있다. 디코더(1220)는 제1 데이터를 반복적인 연산과정을 통해 디코딩할 수 있다. 디코더(1220)가 반복적인 연산을 수행할 때, 디코더(1220)에 포함된 제1 메모리(1222)를 참조할 수 있다. 디코더(1220)는 제1 메모리(1222)에 저장된 데이터의 종류에 따라 제1 메모리(1222)만 액세스하거나, 제1 및 제2 메모리(1222, 1224) 모두 액세스할 수 있다. 제1 메모리(1222)의 저장 용량은 제2 메모리(1224)의 저장 용량보다 작을 수 있다. 제1 메모리(1222)에 저장되는 데이터의 크기는 제2 메모리(1224)에 저장되는 데이터의 크기보다 작을 수 있다. 디코더(1220)가 수행하는 반복적인 연산을 이용한 디코딩은 본 명세서에서 설명한 디코딩 방식과 동일 또는 유사할 수 있다.
이상 첨부된 도면을 참조하여 본 발명의 몇몇 실시예들을 설명하였으나, 본 발명은 상기 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 제조될 수 있으며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
100, 1220: 디코더(decoder)
1000: 스토리지 장치(storage device)
1020_1~1020_N: ECC 장치(ECC device)
1030_1~1030_N: 비휘발성 메모리(non-volatile memory)
1200: 리시버(receiver)

Claims (10)

  1. 메인 메모리;
    플래그 데이터를 저장하는 플래그 메모리; 및
    반복(iteration) 연산을 수행하는 디코딩 로직(decoding logic)을 포함하되,
    상기 디코딩 로직은,
    제1 데이터를 이용하여 i 번째(i는 자연수) 연산을 수행하고,
    상기 제1 데이터의 상기 i 번째 연산 결과인 제2 데이터를 플래그 인코딩하여,
    상기 플래그 인코딩이 성공하는 경우, 상기 제2 데이터의 플래그 인코딩 결과를 제1 플래그 데이터로 상기 플래그 메모리에 저장하고, 상기 제2 데이터를 상기 메인 메모리에 저장하지 않고, 상기 제1 플래그 데이터는 상기 제1 데이터에서 '1'의 위치를 나타내는 것이고,
    상기 플래그 인코딩이 실패하는 경우, 상기 제2 데이터의 상기 제1 플래그 데이터와 다르고 미리 정한 제2 플래그 데이터를 상기 플래그 메모리에 저장하고, 상기 제2 데이터를 상기 메인 메모리에 저장하는 것을 포함하는 디코더.
  2. 제 1항에 있어서,
    상기 플래그 메모리의 저장 용량은 상기 메인 메모리의 저장 용량 보다 작은 디코더.
  3. 제1항에 있어서, 상기 제1 및 제2 플래그 데이터의 크기는, 상기 제1 및 제2 데이터의 크기보다 작은 디코더.
  4. 제 1항에 있어서,
    상기 디코딩 로직은,
    랜덤한 값을 갖는 데이터를 신드롬 지원 코드(syndrome aided code)를 이용하여 상기 제1 데이터로 변환하는 것을 더 포함하는 디코더.
  5. 제 1항에 있어서,
    상기 플래그 인코딩은 런-렝쓰 코드(run-length code)를 이용하는 디코더.
  6. 메인 메모리;
    플래그 데이터를 저장하는 플래그 메모리; 및
    반복(iteration) 연산을 수행하는 디코딩 로직(decoding logic)을 포함하되,
    상기 디코딩 로직은,
    상기 플래그 메모리에 저장된 상기 플래그 데이터를 참조하고,
    상기 참조한 플래그 데이터를 기반으로 상기 플래그 데이터보다 데이터 크기가 큰 제1 데이터를 생성하되,
    상기 제1 데이터를 생성하는 것은,
    상기 참조한 플래그 데이터가 제1 플래그 데이터인지, 상기 제1 플래그 데이터와 다르고 미리 정한 제2 플래그 데이터인지 결정하고,
    상기 참조한 플래그 데이터가 상기 제1 플래그 데이터이면, 상기 제1 플래그 데이터를 플래그 디코딩하여 상기 제1 데이터를 생성하고,
    상기 참조한 플래그 데이터가 상기 제2 플래그 데이터이면, 상기 메인 메모리에 액세스하고 리드하여 상기 제1 데이터를 생성하는 것을 포함하는 디코더.
  7. 제 6항에 있어서,
    상기 참조한 플래그 데이터가 널(NULL)이면, 상기 제1 데이터를 초기화하여 생성하는 것을 더 포함하고,
    상기 제1 데이터를 초기화하여 생성하는 것은
    상기 메인 메모리에서 원본 데이터를 리드하여 신드롬 지원 코드(syndrome aided code)를 이용하여 상기 제1 데이터로 변환하는, 디코더.
  8. 제 6항에 있어서,
    상기 디코더는 상기 디코딩 로직이 연산을 수행하기 위해 임시로 데이터를 저장하는 버퍼를 더 포함하고,
    상기 디코딩 로직은 상기 버퍼에 저장된 데이터가 삭제되는 동안 상기 플래그 데이터를 참조하는 디코더.
  9. 하나 이상의 비휘발성 메모리(non-volatile memory); 및
    상기 하나 이상의 비휘발성 메모리와 연결된 ECC(Error Check and Correct) 장치를 포함하되,
    상기 ECC 장치는,
    제1 메모리와, 상기 제1 메모리보다 큰 저장 용량을 갖는 제2 메모리와, 반복(iteration) 연산을 이용하여 ECC 디코딩을 수행하는 디코딩 로직(decoding logic)을 포함하고,
    상기 하나 이상의 비휘발성 메모리에 저장된 데이터를 리드할 때,
    상기 디코딩 로직은,
    상기 반복 연산을 이용하여 상기 ECC 디코딩을 수행하되,
    상기 ECC 디코딩은,
    상기 반복 연산의 결과에 따라 상기 제1 메모리만 액세스(access) 하거나, 상기 제1 및 제2 메모리 모두에 액세스하고,
    i 번째(i는 자연수) 연산의 결과를 ECC 플래그 인코딩하여 제1 플래그 데이터나 제2 플래그 데이터 중 어느 하나를 생성하여 제1 메모리에 저장하는 것을 포함하는 스토리지 장치.
  10. 제 9항에 있어서, 상기 ECC 장치는 신드롬 지원 코드(syndrome aided code)를 이용하여, 상기 하나 이상의 비휘발성 메모리에 저장된 데이터를 제1 데이터로 변환하는 것을 더 포함하는 스토리지 장치.
KR1020170139976A 2017-10-26 2017-10-26 반복 연산 과정을 이용하여 디코딩을 수행하는 디코더 및 이를 이용한 스토리지 장치 KR102467072B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020170139976A KR102467072B1 (ko) 2017-10-26 2017-10-26 반복 연산 과정을 이용하여 디코딩을 수행하는 디코더 및 이를 이용한 스토리지 장치
US15/956,960 US11031957B2 (en) 2017-10-26 2018-04-19 Decoder performing iterative decoding, and storage device using the same
CN201811247776.8A CN109714062B (zh) 2017-10-26 2018-10-24 执行迭代解码的解码器和使用该解码器的存储设备
US17/314,768 US11791846B2 (en) 2017-10-26 2021-05-07 Decoder performing iterative decoding, and storage device using the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170139976A KR102467072B1 (ko) 2017-10-26 2017-10-26 반복 연산 과정을 이용하여 디코딩을 수행하는 디코더 및 이를 이용한 스토리지 장치

Publications (2)

Publication Number Publication Date
KR20190046318A KR20190046318A (ko) 2019-05-07
KR102467072B1 true KR102467072B1 (ko) 2022-11-11

Family

ID=66244425

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170139976A KR102467072B1 (ko) 2017-10-26 2017-10-26 반복 연산 과정을 이용하여 디코딩을 수행하는 디코더 및 이를 이용한 스토리지 장치

Country Status (3)

Country Link
US (2) US11031957B2 (ko)
KR (1) KR102467072B1 (ko)
CN (1) CN109714062B (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11664122B2 (en) * 2019-06-19 2023-05-30 Hill-Rom Services, Inc. Patient support apparatus tracking system

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3549519B2 (ja) * 2002-04-26 2004-08-04 沖電気工業株式会社 軟出力復号器
JP4946844B2 (ja) * 2007-12-13 2012-06-06 ソニー株式会社 記録再生装置および記録再生方法
RU2440669C1 (ru) 2007-12-13 2012-01-20 Нек Корпорейшн Устройство декодирования, устройство хранения данных, система обмена данными и способ декодирования
US20100037121A1 (en) 2008-08-05 2010-02-11 The Hong Kong University Of Science And Technology Low power layered decoding for low density parity check decoders
US8667376B2 (en) 2008-11-07 2014-03-04 Nec Corporation Decoding device, data communication apparatus having the decoder device, and data memory
CN101604975A (zh) * 2009-07-08 2009-12-16 复旦大学 一种低功耗多模qc-ldpc码解码器及其工作方法
TWI425519B (zh) 2009-12-09 2014-02-01 Nat Chip Implementation Ct Nat Applied Res Lab 低複雜度低密度同位元檢查碼解碼器之記憶體配置方法及其解碼器結構
US8756479B2 (en) * 2011-01-14 2014-06-17 Marvell World Trade Ltd. LDPC multi-decoder architectures
US8677225B1 (en) 2011-02-11 2014-03-18 Marvell International Ltd. Low-density parity-check decoder
KR101267322B1 (ko) 2011-12-29 2013-05-24 한국과학기술원 Ldpc 복호기 및 그 복호방법
US8977937B2 (en) * 2012-03-16 2015-03-10 Lsi Corporation Systems and methods for compression driven variable rate decoding in a data processing system
KR102049281B1 (ko) * 2012-10-23 2019-11-27 삼성전자주식회사 불휘발성 메모리 및 컨트롤러를 포함하는 메모리 시스템, 그리고 불휘발성 메모리에 데이터를 프로그램하는 프로그램 방법
KR101482684B1 (ko) 2013-10-15 2015-01-16 한국과학기술원 디코딩 방법 및 이를 포함하는 메모리 시스템의 동작 방법
US20150227419A1 (en) 2014-02-12 2015-08-13 Kabushiki Kaisha Toshiba Error correction decoder based on log-likelihood ratio data
US9906327B2 (en) * 2014-07-03 2018-02-27 Sony Semiconductor Solutions Corporation Receiving device, receiving method, and program
US9755665B1 (en) * 2014-09-23 2017-09-05 Marvell International Ltd. Systems and methods for an iterative decoding scheme
KR102347418B1 (ko) * 2015-09-25 2022-01-06 에스케이하이닉스 주식회사 데이터 처리 장치 및 그것의 동작 방법
KR20180020006A (ko) * 2016-08-17 2018-02-27 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
US10187086B2 (en) * 2017-03-15 2019-01-22 SK Hynix Inc. State-based decoding of product codes
CN107025948B (zh) * 2017-05-17 2023-08-15 西安紫光国芯半导体有限公司 具有标志位指示数据长度的纠错功能的存储器和纠错方法

Also Published As

Publication number Publication date
US20190132008A1 (en) 2019-05-02
CN109714062B (zh) 2024-05-14
US11031957B2 (en) 2021-06-08
US11791846B2 (en) 2023-10-17
CN109714062A (zh) 2019-05-03
US20210281280A1 (en) 2021-09-09
KR20190046318A (ko) 2019-05-07

Similar Documents

Publication Publication Date Title
US20190312593A1 (en) Decoding method and storage controller
JP2011134433A (ja) Ecc回路を含む半導体ストーリッジシステム及びその制御方法
US11711095B2 (en) Bit flipping low-density parity-check decoders with low error floor
JP2011081776A (ja) 不揮発性メモリ装置、メモリコントローラ、およびメモリシステム
US11146291B2 (en) Configuring iterative error correction parameters using criteria from previous iterations
US9507658B2 (en) Data reading method, memory storage device and memory controlling circuit unit
US11063607B2 (en) Compressing error vectors for decoding logic to store compressed in a decoder memory used by the decoding logic
KR100688549B1 (ko) 비휘발성 메모리를 지원하는 온더플라이 bcc 코덱시스템 및 방법
KR20200122064A (ko) 오류 정정 회로 및 이를 포함하는 메모리 컨트롤러
US10771094B2 (en) Memory system configured to estimate a read voltage using a histogram
TWI536749B (zh) 解碼方法、記憶體儲存裝置與記憶體控制電路單元
KR102467072B1 (ko) 반복 연산 과정을 이용하여 디코딩을 수행하는 디코더 및 이를 이용한 스토리지 장치
US11994945B2 (en) Managing write disturb for units of memory in a memory sub-system
US11996860B2 (en) Scaled bit flip thresholds across columns for irregular low density parity check decoding
CN110795271A (zh) 对用户数据执行纠错的纠错电路和使用其的纠错方法
US11515898B2 (en) Error correction decoder, error correction circuit having the same, and method of operating the same
US20210273653A1 (en) Iterative error correction with adjustable parameters after a threshold number of iterations
CN107301873B (zh) 译码方法、存储器储存装置及存储器控制电路单元
US20230396271A1 (en) Early stopping of bit-flip low density parity check decoding based on syndrome weight
TWI829252B (zh) 低密度奇偶校檢碼的解碼方法及電腦程式產品及裝置
US11928353B2 (en) Multi-page parity data storage in a memory device
US11394403B1 (en) Error correction based on rate adaptive low density parity check (LDPC) codes with flexible column weights in the parity check matrices
US20230185452A1 (en) Storage controller compressing indicator data, storage device including the same, and method of operating the same
CN117472643A (zh) 低密度奇偶校检码的译码方法、存储介质和装置

Legal Events

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