KR20160054395A - 메모리 데이터 에러 정정 방법 - Google Patents

메모리 데이터 에러 정정 방법 Download PDF

Info

Publication number
KR20160054395A
KR20160054395A KR1020150127743A KR20150127743A KR20160054395A KR 20160054395 A KR20160054395 A KR 20160054395A KR 1020150127743 A KR1020150127743 A KR 1020150127743A KR 20150127743 A KR20150127743 A KR 20150127743A KR 20160054395 A KR20160054395 A KR 20160054395A
Authority
KR
South Korea
Prior art keywords
bits
data
burst
ecc
memory
Prior art date
Application number
KR1020150127743A
Other languages
English (en)
Other versions
KR102190683B1 (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 삼성전자주식회사
Publication of KR20160054395A publication Critical patent/KR20160054395A/ko
Application granted granted Critical
Publication of KR102190683B1 publication Critical patent/KR102190683B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents
    • 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/13Linear codes
    • H03M13/19Single error correction without using particular properties of the cyclic codes, e.g. Hamming codes, extended or generalised Hamming 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
    • 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/1048Adding 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 arrangements adapted for a specific error detection or correction feature
    • 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/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Probability & Statistics with Applications (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

본 발명에 따른 메모리 데이터 에러 정정 방법은 메모리 모듈로부터의 복수의 버스트들의 각 버스트로부터 버스트 특정 컨텐츠(burst-specific content)를 수신하는 단계, 상기 복수의 버스트들의 각 버스트로부터의 상기 버스트 특정 컨텐츠를 저장하는 단계, 그리고 상기 복수의 버스트들 중 적어도 하나로부터 버스트 특정 데이터(burst-specific data)의 제 1 미리 결정된 수의 비트들에 있는 하나 이상의 에러를 정정하기 위해 SECDED(Single Error Correction Double Error Detection) 코드의 일부로서 수신된 모든 ECC(Error Corrrection Code) 비트들을 사용하는 단계를 포함하되, 상기 버스트 특정 컨텐츠는 버스트 특정 ECC의 대응 비트들과 더불어 상기 버스트 특정 데이터의 상기 제 1 미리 결정된 수의 비트들을 포함한다.

Description

메모리 데이터 에러 정정 방법{ERROR CORRECTION METHOD OF MEMORY DATA}
본 발명은 메모리 데이터의 에러 정정 방법에 관한 것으로, 더 구체적으로는 메모리로부터의 64 비트 데이터에 있는 하나 이상의 에러를 정정하기 위해 (128,120) 싱글 에러 정정 더블 에러 탐지(Single Error Correction Double Error Detection, SECDED) 코드에 기초하는 SECDED와 데이터 병합(aggregation)을 사용하는 메모리 데이터 에러 정정 기법에 관한 것이다.
듀얼 인라인 메모리 모듈들(DIMMs)에 기초하는 현재의 에러 정정 코드(ECC)는 시스템 메모리 컨트롤러가 ECC-DIMM에 저장된 실제 데이터의 에러들을 탐지 및 정정할 수 있도록 하기 위해 ECC 비트들이라고 알려진, 여분의 비트들을 그 자신의 메모리 모듈 상에 저장한다. 이와 같은 에러 탐지 및 정정은 저장된 데이터의 무결성을 보전하기 위한 목적으로 수행된다. 그러나, 현존하는 ECC 가능 메모리 컨트롤러들은 일반적으로 메모리 컨트롤러가 64-비트 메모리 워드 당 싱글 비트의 에러들을 탐지 및 정정할 수 있도록 하고, 그리고 64-비트 워드 당 2 비트의 에러들을 탐지(정정하지는 않음)할 수 있도록 하는 SECDED-(72,64) 해밍 코드(Hamming code)-와 같은 코드들을 실행한다. 따라서, 컨트롤러들의 데이터 무결성을 관리하는 능력은 단지 64-비트 워드에 있는 데이터의 싱글 비트를 정정하기 때문에 상당히 제한적이다. 비록 ECC-DIMM은 64 데이터 비트들 당 8 ECC 비트들을 저장하지만, 싱글 비트 에러 정정 능력의 결과는 매우 효율적이지 않으며 그 개선이 필요하다.
따라서, ECC-DIMM의 64개의 데이터 비트들 당 8개의 ECC 비트들이 할당되는 현재의 할당(current allocation)방식을 조정하지 않고 현존하는 메모리 컨트롤러들의 에러 정정 성능을 향상시키는 것이 요구된다. 복잡한 회로망을 추가하지 않고 메모리 컨트롤러에 현존하는 SECDED 회로망을 사용할 수 있도록 하기 위해 SECDED 기반의 기법을 사용하여 64-비트 메모리 워드에 있는 하나 이상의 에러들을 정정할 수 있는 것이 요구된다.
본 발명의 목적은 현존하는 SECDED 회로망을 사용하면서 에러 정정 성능을 향상시킬 수 있는 메모리 컨트롤러 및 그것의 에러 정정 방법을 제공하는데 있다.
본 발명에 따른 에러 정정 방법은 메모리 모듈로부터의 복수의 버스트들의 각 버스트로부터 버스트 특정 컨텐츠(burst-specific content)를 수신하는 단계, 상기 복수의 버스트들의 각 버스트로부터의 상기 버스트 특정 컨텐츠를 저장하는 단계, 그리고 상기 복수의 버스트들 중 적어도 하나로부터 버스트 특정 데이터(burst-specific data)의 제 1 미리 결정된 수의 비트들에 있는 하나 이상의 에러를 정정하기 위해 SECDED(Single Error Correction Double Error Detection) 코드의 일부로서 수신된 모든 ECC(Error Corrrection Code) 비트들을 사용하는 단계를 포함하되, 상기 버스트 특정 컨텐츠는 버스트 특정 ECC의 대응 비트들과 더불어 상기 버스트 특정 데이터의 상기 제 1 미리 결정된 수의 비트들을 포함한다.
본 발명에 따른 메모리 컨트롤러는, 컨트롤 유닛, 상기 컨트롤 유닛과 연결되며, 메모리 모듈로부터의 복수의 버스트들의 각 버스트로부터 버스트 특정 컨텐츠를 수신하고, 그리고 상기 복수의 버스트들의 각 버스트로부터의 상기 버스트 특정 컨텐츠를 저장하도록 상기 컨트롤 유닛에 의해 제어되는 버퍼, 그리고 상기 버퍼 및 상기 컨트롤 유닛과 연결되며, 상기 복수의 버스트들 중 적어도 하나의 버스트로부터의 버스트 특정 데이터의 미리 결정된 수의 비트들에 있는 하나 이상의 에러들을 정정하기 위한 SECDED(Single Error Correction Double Error Detection) (128,120) 코드의 일부로서 수신된 모든 ECC(Error Correction Code) 비트들을 사용하도록 상기 컨트롤 유닛에 의해 제어되는 디코더를 포함하되, 상기 버스트 특정 컨텐츠는 버스트 특정 ECC의 대응 비트들과 더불어 상기 버스트 특정 데이터의 미리 결정된 수의 비트들을 포함한다.
실시 예에 있어서, 상기 버스트 특정 ECC의 대응 비트들은 버스트 특정 ECC의 8 비트들을 포함하고, 그리고 복수의 버스트의 각 버스트에 대해 상기 컨트롤 유닛은, 버스트 특정 데이터의 추가적인 56 비트들을 생성하기 위해 상기 다른 버스트들 각각과 연관된 버스트 특정 데이터로부터 동일한 수의 비트들을 선택하고, 그리고 상기 복수의 버스트들의 각 버스트에 대해, 상기 디코더는, 8 비트의 버스트 특정 ECC를 버스트 특정 데이터의 대응하는 미리 결정된 수의 비트들과 상기 버스트 특정 데이터의 추가적인 56 비트들에 적용하도록 상기 컨트롤 유닛에 의해 제어되며, 상기 미리 결정된 수의 비트들과 상기 추가적인 56 비트들의 합은 적어도 120이다.
실시 예에 있어서, 상기 미리 결정된 수의 비트들은 64 비트들이다.
실시 예에 있어서, 상기 메모리 모듈은 ECC-DIMM(Dual In-line Memory Module)이다.
실시 예에 있어서, 상기 버퍼 및 상기 컨트롤 유닛과 연결되는 인코더를 더 포함하고, 상기 버퍼는 복수의 연속적인 메모리 액세스들을 통해 메모리 모듈에 저장된 데이터 컨텐츠를 수신하도록 상기 컨트롤 유닛에 의해 제어되고, 상기 컨트롤 유닛은 상기 데이터 컨텐츠를 복수의 액세스 특정 데이터로 나누고, 그리고 각 액세스 특정 데이터에 대해, 추가적인 56 데이터 비트들을 생성하기 위해 다른 액세스 특정 데이터 각각으로부터 동일한 수의 비트들을 선택하며, 상기 인코더 유닛은 각 메모리 액세스에 대해, 8 비트의 액세스 특정 ECC를 결정하기 위해 SECDED (128,120) 코드를 상기 액세스 특정 데이터와 연관된 추가적인 56 데이터 비트들에 적용하도록 상기 컨트롤 유닛에 의해 제어되고, 각각의 연속적인 메모리 액세스 동안, 상기 컨트롤 유닛은 메모리 모듈에 상기 8 비트의 액세스 특정 ECC와 더불어 상기 액세스 특정 데이터를 저장하도록 동작하며, 상기 액세스 특정 데이터 각각은 제 1 미리 결정된 수의 비트들을 포함하고, 상기 제 1 미리 결정된 수의 비트들과 상기 추가적인 56 비트들의 합은 적어도 120이다.
실시 예에 있어서, 상기 복수의 버스트들은 8개의 버스트들이고, 그리고 상기 복수의 연속적인 메모리 액세스들은 8개의 액세스들이다.
본 발명에 따른 시스템은, 일렉트로닉 컨텐츠를 저장하도록 구성된 메모리 모듈, 상기 메모리 모듈과 연결되며 상기 메모리 모듈에 상기 일렉트로닉 컨텐츠를 저장하고 그리고 상기 메모리 모듈로부터 상기 일렉트로닉 컨텐츠를 검색하는 것을 제어하도록 구성된 메모리 컨트롤러, 그리고 상기 메모리 컨트롤러와 연결되며 상기 메모리 컨트롤러를 사용하여 상기 메모리 모듈에 대한 메모리 리드 동작을 수행하도록 구성된 프로세서를 포함하되, 상기 메모리 리드 동작의 일부로서, 상기 메모리 컨트롤러는, 상기 메모리 모듈로부터의 복수의 버스트들의 각 버스트로부터 버스트 특정 컨텐츠를 수신하고, 상기 복수의 버스트들의 각 버스트로부터의 상기 버스트 특정 컨텐츠를 저장하고, 상기 복수의 버스트들 중 적어도 하나로부터의 버스트 특정 데이터의 제 1 미리 결정된 수의 비트들에 있는 하나 이상의 에러를 정정하기 위해 SECDED(Single Error Correction Double Error Detection) 코드의 일부로서 수신된 모든 ECC(Error Correcting Code) 비트들을 사용하고, 그리고 버스트 특정 데이터의 모든 제 1 미리 결정된 수의 비트들을 프로세서로 전송하며, 상기 복수의 버스트들의 모든 버스트들은 함께 상기 메모리 리드 동작을 구성하고, 그리고 상기 버스트 특정 컨텐츠는 버스트 특정 ECC의 대응 비트들과 더불어 상기 버스트 특정 데이터의 제 1 미리 결정된 수의 비트들을 포함한다.
실시 예에 있어서, 상기 버스트 특정 ECC의 대응 비트들은 8 비트의 버스트 특정 ECC를 포함하고, 그리고 상기 메모리 리드 동작의 일부로서. 상기 메모리 컨트롤러는 복수의 버스트들의 각 버스트에 대해, 상기 복수의 버스트들의 모든 다른 버스트로부터 버스트 특정 데이터의 제 2 미리 결정된 비트들을 선택하고, 그리고 상기 8 비트의 버스트 특정 ECC를 상기 버스트 특정 데이터의 대응하는 제 1 미리 결정된 수이 비트들과 상기 버스트 특정 데이터의 제 2 미리 결정된 수의 비트들에 적용하는 동작을 수행하고, 상기 제 1 미리 결정된 수의 비트들과 상기 제 2 미리 결정된 수의 비트들의 합은 적어도 120이다.
실시 예에 있어서, 상기 프로세스는 상기 메모리 컨트롤러를 이용하여 상기 메모리 모듈에 대해 메모리 라이트 동작을 수행하도록 구성되고, 그리고 상기 메모리 라이트 동작의 일부로서, 상기 메모리 컨트롤러는, 복수의 연속적인 메모리 액세스들을 통해 상기 메모리 모듈에 저장된 컨텐츠 데이터를 프로세서로부터 수신하고, 상기 데이터 컨텐츠를 복수의 액세스 특정 데이터로 나누고, 각 액세스 특정 데이터에 대해, 상기 복수의 액세스 특정 데이터의 모든 다른 액세스 특정 데이터로부터 추가적인 제 2 미리 결정된 수의 데이터 비트들을 선택하고, 각 메모리 액세스에 대해, 8 비트의 액세스 특정 ECC를 결정하기 위해 상기 액세스 특정 데이터 및 연관된 추가적인 제 2 미리 결정된 수의 데이터 비트들의 조합에 상기 SECDED (128,120) 코드를 적용하고, 그리고 각각의 연속적인 메모리 액세스 동안, 상기 메모리 모듈에 상기 8 비트의 액세스 특정 ECC와 더불어 상기 액세스 특정 데이터를 저장하도록 동작하며, 상기 복수의 연속적인 액세스들의 모든 메모리 액세스들은 함께 메모리 라이트 동작을 구성하고, 각 액세스 특정 데이터는 상기 제 1 미리 결정된 수의 비트들을 포함하고, 상기 제 1 미리 결정된 수의 비트들과 상기 제 2 미리 결정된 수의 비트들의 합은 적어도 120이다.
본 발명에 따른 시스템은, 일렉트로닉 컨텐츠를 저장하도록 구성된 메모리 모듈, 그리고 상기 메모리 모듈과 연결되며 상기 메모리 모듈의 메모리 리드 동작을 수행하도록 구성된 프로세서를 포함하되, 상기 메모리 리드 동작의 일부로서, 상기 프로세서는, 상기 메모리 모듈로부터의 복수의 버스트들의 각 버스트로부터 버스트 특정 컨텐츠를 수신하고, 상기 복수의 버스트들의 각 버스트로부터의 상기 버스트 특정 컨텐츠를 저장하고, 상기 복수의 버스트들 중 적어도 하나로부터 버스트 특정 데이터의 제 1 미리 결정된 수의 비트들에 있는 하나 이상의 에러를 정정하기 위해 SECDED(Single Error Correction Double Error Detection) 코드의 일부로서 수신된 모든 ECC 비트들을 사용하도록 동작하고, 상기 수신된 모든 ECC(Error Correction Code) 비트들을 사용하는 것의 일부로서, 상기 프로세서는 상기 복수의 버스트들의 각 버스트에 대해, 상기 복수의 버스트들의 다른 모든 버스트들로부터 버스트 특정 데이터의 제 2 미리 결정된 수의 비트들을 선택하고, 그리고 상기 버스트 특정 ECC의 비트들을 상기 버스트 특정 데이터의 상기 대응하는 제 1 미리 결정된 수의 비트들과 상기 버스트 특정 데이터의 제 2 미리 결정된 수의 데이터 비트들에 적용하도록 동작하며, 상기 복수의 버스트들의 모든 버스트들은 함께 메모리 리드 동작을 구성하고, 상기 버스트 특정 컨텐츠는 버스트 특정 ECC의 대응 비트들과 더불어 상기 버스트 특정 데이터의 제 1 미리 결정된 수의 비트들을 포함하고, 상기 제 1 미리 결정된 수의 비트들 및 상기 제 2 미리 결정된 수의 비트들의 합은 적어도 120이다.
실시 예에 있어서, 상기 프로세서는 상기 메모리 모듈에 대해 메모리 라이트 동작을 수행하도록구성되고, 그리고 상기 메모리 라이트 동작의 일부로서, 상기 프로세서는, 복수의 연속적인 메모리 액세스들을 통해 상기 메모리 모듈에 저장될 데이터 컨텐츠를 준비하고, 상기 데이터 컨텐츠를 복수의 액세스 특정 데이터로 나누고, 각 액세스 특정 데이터에 대해, 상기 복수의 액세스 특정 데이터의 다른 모든 액세스 특정 데이터로부터 추가적인 제 2 미리 결정된 수의 데이터 비트들을 선택하고, 각 메모리 액세스들에 대해, 액세스 특정 ECC 비트들을 결정하기 위해 상기 액세스 특정 데이터 및 연관된 추가적인 제 2 결정된 수의 데이터 비트들의 조합에 상기 SECDED 코드를 적용하고, 그리고 각각의 연속적인 메모리 액세스에 대해, 상기 액세스 특정 ECC 비트들과 더불어 상기 액세스 특정 데이터를 상기 메모리 모듈에 저장하도록 동작하며, 상기 복수의 연속적인 액세스들의 모든 메모리 액세스들은 함께 메모리 라이트 동작을 구성하고, 각 액세스 특정 데이터는 상기 제 1 미리 결정된 수의 비트들을 포함하고, 상기 제 1 미리 결정된 수의 비트들과 상기 제 2 미리 결정된 수의 비트들의 합은 적어도 120이다.
실시 예에 있어서, 상기 SECDED 코드는 SECDED (128,120) 코드이다.
본 발명에 따르면, 현존하는 SECDED 회로망을 이용하면서도 에러 정정 능력이 향상되는 효과가 있다.
도 1은 ECC-DIMM 모듈의 매우 간소화된 레이아웃을 보여주는 도면이다.
도 2는 ECC-DIMM으로부터의 데이터 버스트들에 대한 종래의 에러 정정 메커니즘을 예시적으로 보여주는 도면이다.
도 3은 ECC-DIMM으로부터의 싱글 버스트에 있는 다수의 에러들이 본 발명의 일 실시 예에 따른 기법에 기초하는 SECDED를 사용하여 정정하는 방법을 보여주는 예시적인 흐름도이다.
도 4는 다수의 에러들이 도 3에서 도시된 방법을 사용하여 데이터의 싱글 버스트에서 정정될 수 있는 방법을 예시적으로 보여주는 도면이다.
도 5는 도 3 및 도 4의 실시 예들에서 보여준 에러 정정 방법이 실행되는 부분적인 시스템 구성을 예시적으로 보여주는 도면이다.
도 6은 도 5의 부분적인 시스템 구성에서 도시된 메모리 컨트롤러의 보다 자세한 구조를 예시적으로 보여주는 도면이다.
도 7은 본 발명의 실시 예에 따른 도 5의 시스템 메모리 유닛을 포함하는 시스템 또는 장치를 예시적으로 보여주는 도면이다.
도 8은 도 3 및 도 4의 실시 예들에서 도시된 에러 정정 방법이 실행될 수 있는 부분적인 시스템 구성을 예시적으로 보여주는 도면이다.
아래의 상세한 설명에서, 수많은 특정한 세부 사항들이 본 개시의 철저한 이해를 제공하기 위해 기술된다. 그러나 개시된 발명의 측면들은 이러한 특정한 세부 사항들이 없이도 실시될 수 있음을 통상의 기술자들은 이해할 수 있을 것이다. 다른 예시들에서, 잘 알려진 방법들, 절차들, 구성요소들 및 회로들은 본 개시를 모호하게 하지 않기 위해 상세한 설명에서 기술되지 않을 것이다. 추가로, 비록 개시가 64-비트 데이터 버스를 가지는 ECC-DIMM에 기반한 SECDED의 맥락에서 우선적으로 설명되지만, 기술된 발명의 측면들은 다른 형태들의 메모리들에서 에러를 정정하거나 관리하기 위해 구현될 수도 있다.
본 명세서에서 사용된, 용어 "제 1", 제 2" 등은 선행하는 명사를 대한 표시로서 사용된 것이고 명확하게 정의되지 않은 한 어떠한 순서나 차례를 함축하는 것은 아니다.
도 1은 ECC-DIMM 모듈(10)의 매우 간소화된 레이아웃을 보여준다. 도시된 바와 같이, ECC-DIMM 모듈(10)은 데이터 비트들을 저장하기 위한 8개의 메모리 칩들(12-19)과 메모리 칩들(12-19)의 데이터 비트들에 대한 에러 정정을 제공하기 위해 선택된 특정 에러 정정 코드를 위한 체크 비트들 또는 패리티 비트들(또한 "ECC 비트들"로도 언급된)을 저장하기 위한 하나의 ECC 칩(20)을 포함한다. 8개의 데이터 칩들은 "D1"에서 "D8"로 지정된다. 칩 번호들은 단지 쉽게 참조(reference) 하기 위해 제공되었으며, 칩들 사이의 특정 순서 또는 우선권을 나타내는 것은 아니다. 반면에, 각 데이터 칩들(D1-D8)은 다른 데이터 칩들과 함께 실질적으로 동시에 그것들의 대응하는 데이터 컨텐츠를 수신하거나 또는 출력할 수 있다. 도 1에서 도시된 바와 같이, DIMM(10)에 있는 각 칩(12-20)은 싱글 메모리 액세스 또는 "버스트"에 있는 컨텐츠의 대응하는 8 비트들을 전송할 수 있다. 데이터 칩들(12-19)에 대해, 이와 같은 "컨텐츠"는 독출되거나 또는 저장될 데이터이고, 반면에 ECC 칩(20)에 대해, 이와 같은 "컨텐츠"는 싱글 메모리 액세스 동안 데이터 칩들 D1에서 D8으로/로부터 전송될 총 64 데이터 비트들(데이터 칩 당 8 비트들)에 대응하는 ECC 비트들이다. 따라서, DIMM(10)으로/로부터의 각 메모리 버스트의 "대폭(width)"은 72 비트들일 것이다. ECC-DIMM의 각 칩(12-20)은 SDRAM(Synchronous Dynamic Random Access Memory)일 수 있다. 예를 들어 DDR/DDR2/DDR3/DDR4 SDRAM일 수 있다.또한, 각 데이터 칩(12-19)은 동일한 저장 용량, 예를 들어 DIMM(10)을 512 메가 바이트(MB)로 만드는 512 메가 비트(Mb)일 수 있다. 이 경우에, ECC 칩(20)은 또한 512 Mb의 저장공간을 포함할 수 있다. 어떠한 경우에도, 칩(12-20) 내부의 메모리 뱅크들의 저장 용량 또는 내부 구조는 본 개시와는 관련이 없고, 따라서, 그것들에 대한 추가적인 설명들은 생략될 것이다.
본 명세서에서, 용어 "메모리 워드(memory word)" 또는 "데이터 워드"는 메모리 버스트 당 ECC-DIMM으로/으로부터 전송된 데이터 비트들의 총 수를 언급하기 위해 사용된다. 메모리 버스트와 연관된 ECC 비트들은 용어 "메모리 워드"의 일부로서 카운트되지 않는다. 따라서, 도 1에 있는 ECC-DIMM(10)의 경우, 버스트 당 비트들의 총 수는 72 비트들(64 데이터 비트들+대응하는 8 ECC 비트들)임에도 불구하고, 메모리 워드는 64 비트들-버스트 당 데이터 칩 당 8 데이터 비트들일 것이다. 게다가, 용어 "메모리 버스트" 또는 "버스트"는 ECC-DIMM으로의 연속적인 액세스들의 그룹에 있는 싱글 액세스를 의미하며, 각 싱글 액세스 또는 "버스트"는 ECC-DIMM으로/으로부터 버스트-특정 ECC의 대응하는 8 비트들을 따라 버스트-특정 데이터의 미리 결정된 수의 비트들을 전송한다. 예를 들어, 데이터는 일반적으로 외부 메모리, 예를 들어, 도 1의 ECC-DIMM(10)과 "캐시 라인"이라 불리는, 고정된 크기의 블록들의 프로세서의 캐시 메모리 사이에서 전송된다. 현대의 마이크로프로세서들은 512 비트(또는 64 바이트)의 캐시 라인을 지원한다. 따라서, 64-바이트의 캐시 라인을 전송하기 위해서, 메모리 컨트롤러는 DIMM의 메모리 워드가 64 비트 길이라면, 8번의 연속적인 액세스 또는 "버스트"가 필요할 것이다. 이와 같은 모든 버스트들은 하나의 읽기 또는 쓰기 명령에 의해 트리거될 수 있다. 예를 들어, 싱글 캐시 라인을 위한 ECC-DIMM(10) 상의 메모리 읽기 동작의 경우, 총 512 비트의 데이터 및 64 비트의 ECC를 출력하는 컨텐츠의 8번의 연속적인 버스트들이 있을 것이다. 각 버스트에서, 각 칩(12-20)은 버스트-특정 데이터 또는 예를 들어, 도 2에서 도시된 것과 같은 ECC 컨텐츠의 대응하는 8 비트들을 실질적으로 동시에 출력할 것이다.
ECC-DIMM(10)은 대응하는 데이터 비트들에 있는 에러들을 탐지하고 정정하기 위해 시스템 메모리 컨트롤러에 의해 사용될 수 있는 ECC 비트들(칩(20)에서와 같은)의 형태의 컨텐츠의 엑스트라 비트들 포함한다. 다양한 ECC 기법들이 있지만, 해밍 코드 기반 ECC 기법은 비트 에러들이 드문 컴퓨터 메모리들을 위해 가장 잘 알려져 있다. 한정된 리던던시(redundancy) 때문에, 해밍 코드들은 기초 데이터(underying data)에 추가되고, 이러한 코드들은 컴퓨터 메모리들의 경우와 같은, 에러율이 낮은 경우에만 에러들을 탐지 및 정정할 수 있다. 일반적으로, 3 해밍 거리를 가지는 해밍 코드는 싱글 에러를 탐지 및 정정할 수 있지만, 디코더가 다른 코드어(codeword)의 싱글 비트 에러로부터 일부 코드어의 더블 비트 에러를 구별하는 것을 허용하지 않는다. 따라서, 이 경우에, 디코더는 또 다른 싱글 비트 에러를 정정하는 것을 동시에 시도하지 않는 경우에만 더블 비트 에러를 탐지할 수 있다. 그러나 이와 같은 해밍 코드가 엑스트라 패리티 비트에 의해 확정되는 경우, 디코더가 싱글 비트 에러를 탐지 및 정정하는 것뿐만 아니라, 더블 비트 에러를 동시에 탐지(그러나 정정은 아님)하는 것을 허용하는 코드의 최소 해밍 거리는 4로 증가할 것이다. 이 확장된 해밍 코드는 싱글 에러 정정 더블 에러 탐지(SECDED)로 알려진, 컴퓨터 메모리 시스템들의 데이터 무결성을 보존하기 위해 일반적으로 사용된다. SEDED 코드 및 ECC의 엑스트라 8 비트들을 사용함으로 인해, 일반적으로 현대의 컴퓨터들의 메모리 컨트롤러의 ECC 능력은 64-비트 메모리 워드 당 싱글 비트의 에러들을 탐지 및 정정할 수 있다.
SECDED 코드는 리니어 에러 정정 코드들인, 해밍 코드들의 서브-클래스이다. 더 일반적으로, (n,k) 바이너리 해밍 코드는 데이터의 "k" 비트들을 "n" 비트들(n>k)의 코드어로 인코딩한다. "n" 총 비트들은 "n-k" 체크 비트들 또는 ECC 비트들 뿐만 아니라 "k" 데이터 비트들을 포함한다. 수학적으로, 바이너리 해밍 코드는 (n,k)=(2m-1, 2m-1-m)인 속성을 가진다. 여기에서 "m"은 코드의 체크 비트들 또는 패리티 비트들을 나타내는 어떤 양의 정수이다. 따라서, m=7인 값은 (127,120) 해밍 코드의 결과가 된다. SECDED 코드는 각 코드어에 부가된 추가 패리티 비트를 가지는 해밍 코드의 확장된 버전이다. 따라서, m=7인 예시에서, SECDED 코드는 m+1=8 패리티 또는 ECC 비트들 및 120 데이터 비트들을 포함할 수 있다.
컴퓨터 시스템 또는 프로세서들에서 ECC를 수행하는 현재의 메모리 컨트롤러 또는 다른 유닛들은 추가 패리티 비트를 가지는 (128,120) 해밍 코드의 축소된 버전인 (72, 64) SECDED 코드를 사용한다. (72,64) SECDED 코드는 64 데이터 비트들 당 8 ECC 비트들을 요구하며, 그리고 컴퓨터 시스템들의 일반적인 64 데이터 비트 버스에 정렬될 필요가 있기 때문에 사용된다.
해밍 코드에서 어떠한 2개의 다른 코드어들이 주어지는 경우, 용어 "해밍 거리"는 이러한 다른 2개의 코드어들의 대응하는 성분들 또는 위치들의 수를 언급한다. 따라서, 해밍 거리는 코드어들의 쌍들 사이의 분리도의 측정을 제공한다. 예를 들어, 앞에서 설명한 바와 같이, (72,64) 해밍 코드의 해밍 거리는 4이다. 유사하게, SECDED (128,120) 코드의 해밍 거리 또한 4이다.
도 2는 도 1의 ECC-DIMM(10)과 같은, ECC-DIMM으로부터의 데이터 버스트에 대한 전형적인 에러 정정 메커니즘을 예시적으로 보여준다. 도 2에서, 예시적으로 메모리로부터 512 데이터 비트들의 캐시 라인을 독출하는 상황에서, 메모리 컨텐츠의 8개의 버스트들(21-28)이 도시되었다. 도 2에서 도시된 바와 같이, 각 버스트(21-28)는 각 버스트-특정 데이터 부분(31-38) 및 각 버스트-특정 ECC 비트들(41-48)을 포함한다. 예를 들어, 제 1 버스트(21)는 데이터 부분(31) 및 ECC 비트들(41)을 포함하고, 제 2 버스트(22)는 데이터 부분(32) 및 ECC 비트들(42)을 포함한다. 각 버스트-특정 데이터 부분은 도 1에서 도시된 8개의 데이터 칩들(D1 내지 D8) 각각으로부터 8 비트들의 데이터를 포함한다. 따라서, 각 버스트는 도 2에서 예시적으로 도시된 메모리 독출 동작을 위해 총 512 데이터 비트들 및 64 ECC 비트들의 결과가 되는, 64 데이터 비트들 및 대응하는 8 ECC 비트들을 포함한다.
도 2 및 도 6에서, 아래의 명명법(nomenclature)이 사용되었다. (i) 각 데이터 칩(D1-D8, 12-19)으로부터의 버스트-특정 데이터가 버스트 넘버에 따르는 칩 번호에 의해 할당되었다. 따라서, 예를 들어, "D1-1"은 제 1 버스트(21)에 대한 칩(D1)으로부터의 8 데이터 비트들을 나타내고, "D2-1"은 제 1 버스트(21)에 대한 칩(D2)로부터의 8 데이터 비트들을 나타내고, "D4-3"은 제 3 버스트(23)에 대한 칩(D4)으로부터의 8 데이터 비트들을 나타내고, "D8-8"은 제 8 버스트(28)에 대한 칩(D8)로부터의 8 데이터 비트들을 나타낸다. (ii) 칩(20)으로부터의 버스트-특정 8 ECC 비트들은 버스트 넘버에 따르는 "ECC"에 의해 할당된다. 따라서, 예를 들어, "ECC-1"은 제 1 버스트(21)에 대한 8 ECC 비트들을 언급하고, "ECC-3"은 제 3 버스트(23)에 대한 8 ECC 비트들을 언급한다.
도 2는 ECC를 위해 모든 64 데이터 비트들 대해 8 ECC 비트들을 가지는 (72,64) SECDED 기법을 도시한다. 도 2에서, DIMM(10)으로부터 출력된 ECC 비트들(41-48)에는 에러가 존재하지 않는다. 따라서, 도 2의 SECDED 기법은 버스트 당 각 64-비트 데이터 부분에 있는 2개의 에러들을 탐지하고 하나의 에러를 정정하는 것을 허용한다. 예를 들어, 에러가 있는 데이터를 타원형의 심볼로 나타내는 경우, 도 2는 ECC-1 블록(41)이 메모리 컨트롤러 또는 디코더가 칩(D2)로부터의 출력(D2-1)의 8 비트들에 있는 하나의 에러를 탐지 및 정정할 수 있도록 하는 반면에, ECC-4 블록(44)은 도 2를 참조하여 논의되는 메모리 읽기 동작 동안 칩(D7)으로부터의 출력(D7-4)에 있는 또 다른 하나의 에러를 탐지 및 정장하는 것을 허용한다.
그러나 현재의 (72,64) SECDED 기법에 따른 에러 정정은 메모리 버스트의 데이터 워드 당 하나 이상의 에러를 정정하는 것을 허용하지 못한다. 반면에, 아래에서 논의되는 바와 같이, 데이터 버스트 당 하나 이상의 에러는 본 방법론의 특정 실시 예들에 따른 데이터 병합과 함께하는 에러 정정에 기초하는 SECDED를 사용하여 정정될 수 있다.
도 3은 도 1의 ECC-DIMM(10)과 같은, ECC-DIMM으로부터의 하나의 버스트에 있는 복수의 에러들이 본 발명의 일 실시 예에 따른 기법에 기초하는 SECDED를 사용하여 어떻게 정정될 수 있는지를 보여주는 예시적인 흐름도이다. 도 4는 도 3의 방법론을 설명하기 위한 보다 구체적인 예시를 보여준다. 도 3 및 도 4의 실시 예들은 메모리 읽기 동작과 관련된다. 그러나 도 3 및 도 4에서 도시된 방법론은 메모리 쓰기 동작에도 마찬가지로 쉽게 구현될 수 있음은 통상의 기술자들에게 자명할 것이다.
도 3 및 도 4의 실시 예들이 도시하는 방법들은 도 5 및 도 6에서 도시된 메모리 컨트롤러(77)와 같은, 메모리 컨트롤러에서 구현될 수 있다. 다른 실시 예에서, ECC-DIMM(10)은 도 3 및 도 4의 방법론을 구현하도록 구성된 온-칩 에러 정정 유닛(미도시)를 포함하도록 구성될 수 있다. 또 다른 실시 예에서, 도 5의 CPU(80)와 같은, 중앙 처리 장치(CPU) 또는 도 5 및 도 7의 프로세서 유닛(74)과 같은, 프로세서 유닛이 도 3 및 도 4의 실시 예에 따른 에러 정정 기법들을 구현하도록 구성될 수 있다. 대안적으로, 특정한 실시 예들에서, 이러한 접근들의 조합이 도 3에서 도시된 단계들 및 도 4를 참조하여 더 논의되는 단계들을 구현하는데 사용될 수 있다. 그러나 쉬운 논의 및 비 제한적인 예시를 위해, 도 3 및 도 4의 방법들은 메모리 컨트롤러에 의해 수행되는 것으로 아래에서 우선적으로 기술될 것이다.
도 3의 블록(53)에서 기술된 바와 같이, 512 데이터 비트들의 캐시 라인을 읽기 위한 메모리 읽기 동작의 일부로서, 메모리 컨트롤러 또는 다른 적당한 엔티티(entity, 상술한 바와 같은)는 메모리 읽기 동작을 구성하는 복수의 버스트들의 각 버스트로부터 버스트-특정 컨텐츠를 수신할 수 있다. 앞에서 논의되었고 그리고 블록(53)에 기술된 바와 같이, 버스트들을 제공하는 메모리 모듈은 ECC-DIMM(10)과 같은, ECC-DIMM일 수 있고, 그리고 메모리 읽기 동작은 메모리로부터 8 버스트들을 사용하여 이루어질 수 있다. 각 버스트에 대한 버스트-특정 컨텐츠는 버스트-특정 ECC의 대응하는 비트들에 따라 버스트-특정 데이터 중 미리 결정된 수의 비트들을 포함할 수 있다. 따라서, 블록(54)에 기술된 바와 같이, 캐시 라인의 경우, 미리 결정된 수는 64 비트들(512 비트 캐시 라인에 64 데이터 비트들을 제공하는 8 버스트들 각각)이고 그리고 버스트-특정 ECC의 대응하는 비트들은 8 ECC 비트들이다.
블록(55)에서, 메모리 컨트롤러는 블록(52)의 복수의 버스트들의 각 버스트로부터 버스트-특정 컨텐츠(데이터 및 ECC 비트들을 포함하는)를 저장할 수 있다. 일 실시 예에서, 메모리 컨트롤러는 도 6에 도시된 그와 같은 스토리지를 위한, 컨텐츠 버퍼(85)와 같은, 컨텐츠 버퍼를 포함할 수 있다. 블록(56)에서, 메모리 컨트롤러는 복수의 버스트 중 적어도 하나로부터의 버스트-특정 데이터 비트들에 있는 하나 이상의 에러를 정정하기 위해, 예를 들어, 앞서 언급된 SECDED (128,120) 코드와 같은, SECDED 코드의 일부로서 수신된 64 ECC 비트들을 모두를 사용할 수 있다. 따라서, 블록(57)에 기술된 바와 같이 그리고 도 4를 참조하여 더 구체적으로 설명된 바와 같이, 일 실시 예에서, 메모리 컨트롤러는 버스트-특정 데이터의 대응하는 64 비트들뿐만 아니라 복수의 버스트들의 다른 모든 버스트들로부터 선택된 추가적인 56 데이터 비트들에 버스트-특정 ECC의 8 비트들의 각 세트를 적용하기 위해 SECDED (128,120) 코드를 사용할 수 있다. 따라서, 도 2를 참조하여 설명된 현존하는 에러 정정에 기초하는 SECDED (72,64)와 대비하여, 도 3의 실시 예에 따른 에러 정정은 64 데이터 비트들 대신에 총 120 데이터 비트들에 8 ECC 비트들을 효율적으로 적용한다. 이러한 방법으로, (128,120) SECDED 코드의 해밍 거리는 아래에서 더 기술될 것처럼 메모리 워드의 2 내지 7 에러들을 정정하는데 완전하게 이용된다.
현재의 SECDED (72,64) 기법은 (128,120) 해밍 코드의 축소 버전이기 때문에, (72,64) SECDED 기법은 그와 같은 해밍 거리에 의해 지원되는 데이터 비트들의 최대의 수로 동작하기 위한 그것의 해밍 거리 "4"를 완전히 이용하지 못하기 때문에, (72,64) SECDED 기법은 ECC 해밍 거리의 언더-프로비저닝(under-provisioning) 또는 언더-유틸라이제이션(under-utilization)의 결과를 가져온다. 해밍 거리 "4"가 가지는 데이터 비트들의 최대 수를 지원할 수 있는 SECDED 코드는 SECDED (128,120) 코드이고, 8 ECC 비트들은 SECDED (72,64) 기법인 경우의 단지 64 데이터 비트들 대신에, 120 데이터 비트들에 있는 하나의 에러를 잠재적으로 정정할 수 있다. 따라서, 데이터의 스트라이핑(striping)을 확장하고 그리고 120 데이터 비트들의 최대 SECDED 능력을 지원하기 위해 데이터의 (72,64) SECDED 기법의 이용 가능한 해밍 거리를 완전하게 사용하는 것에 의해, 적어도 하나의 데이터 워드에 있는 하나 이상의 에러가 도 4를 참조하여 아래에서 더 설명되는 것처럼 정정될 수 있다.
도 4는 도 3에서 도시된 방법론을 사용하여 복수의 에러들이 데이터의 하나의 버스트에서 어떻게 정정될 수 있는지를 예시적으로 보여준다. 비교 및 논의의 용이함을 위해, 도 2와 함께 사용된 명명법이 도 4에서도 사용된다. 또한, 비교 및 논의의 용이함을 위해, 도 4는 본 발명의 특정 일시 예들에 따른 에러 정정 방법론을 도 2의 전통적인 에러 정정 방법과 명확하게 비교하기 위해 도 2의 버스트 구성을 복제한다. 그러나 이와 같은 도 4에서의 복제가 도 2의 에러 정정 방법이 도 4의 에러 정정을 위해 앞서 필요한 단계이거나, 또는 도 4의 에러 정정 방법이 도 2에서 도시된 것과 같은 동일한 버스트 출력들을 필요로 하는 것을 의미하지는 않는다. 도 2 및 도 4에서 동일한 정보의 사용은 단지 예시적인 목적이며, 도 2 및 도 4의 구성들 사이의 컨텐츠 및 방법의 어떠한 유사성을 의미하는 것은 아니다.
도 4를 참조하면, 도 4의 실시 예에서의 코드어가 오리지널 데이터 부분, 확장된 데이터 부분(60), 및 ECC 부분의 조합으로서 구성된 것을 확인할 수 있다. 대비적으로, 이와 같은 확장된 데이터 부분은 도 2의 에러 정정 기법에 존재하지 않거나 또는 적용되지 못 할 수 있다. 도 4에서, 앞서 설명된 것과 같이 용이한 논의를 위해, 각 버스트에 대한 오리지널 데이터 부분이 도 2에서의 그것과 같이 동일하게 도시되었고, 그리고, 따라서 동일한 참조 번호들인 "31" 내지 "38"을 사용하여 전체적으로 식별된다. 유사하게, 도 2의 오리지널 ECC 블록들(41-48)은 또한 대응하는 버스트 특정 데이터 워드들(31-38)을 따라 도 4에서 동일한 참조 번호들을 사용하여 도시되었다. 도면의 복잡도와 혼잡성을 피하기 위해, 도 4의 각 개별적인 블록은 도 2의 경우와 같은 참조 번호를 사용하여 개별적으로 식별되지 않는다. 따라서, 참조 번호 "60"은 그 버스트에 대해 오리지널 데이터 부분의 일부가 아닌 각 버스트에 있는 데이터의 모든 바이트들을 전체적으로 식별하기 위해 사용된다. 예시를 위해서, 확장된 데이터 부분(60)에 있는 3개의 이와 같은 데이터 바이트들(62-44)은 도 4에서 특별히 식별되었다. 또한, 오리지널 버스트-특정 데이터와 그것들을 명확하게 구별하기 위해, 버스트-특정 확장된 데이터 바이트들은 점선을 사용하여 도시되었다.
메모리 컨트롤러는 도 3을 참조하여 논의된 메모리 읽기 동작에서 단지 512 데이터 비트들-버스트 당 64 데이터 비트들-을 여전히 수신한다. 그러나 도 4에서 도시된 것과 같은 데이터 배열은 수신된 512 데이터 비트들 및 64 ECC 비트들 모두가 일단 도 6의 버퍼(85)와 같은, 버퍼에 저장되면 메모리 컨트롤러에 의해 달성될 수 있다. 다시 말해서, ECC-DIMM(10)은 단지 ECC 비트들(41-48) 및 오리지널 데이터 부분(31-38)을 캐시 라인 읽기 동작을 위해 출력한다. 확장된 데이터 부분(60)은 예를 들어, 데이터 병합(aggregation) 또는 오버랩을 통해, 본 발명의 특정한 실시 예들의 시사(teaching)에 따른 (128,120) SECDED 기법을 적용할 수 있도록 하기 위해 각 버스트에 대한 128-비트 코드어를 생성하기 위한 다른 스토리지 또는 버퍼의 메모리 컨트롤러에 의해 형성될 수 있다.
일 실시 예에서, 각 버스트에 대한 확장된 데이터 부분은 모든 다른 버스트들의 오리지널 버스트-특정 데이터로부터 선택된 미리 결정된 수의 비트들을 포함할 수 있다. 따라서, 예를 들어, 도 4에서 도시된 바와 같이, 제 1 버스트(21)에 대한 확장된 데이터 부분은 제 2 버스트(22, D7-2 블록)로부터의 데이터 바이트, 제 3 버스트(23, D7-3)로부터의 데이터 바이트, 제 4 버스트(24, D8-4)로부터의 데이터 바이트 등을 포함할 수 있다. 유사하게, 제 6 버스트에 대한 확장된 데이터 부분은 데이터 바이트들(D2-1, D4-2, D6-3, D6-4, D1-5, D8-7, 및 D4-8)을 포함하는 것으로 도시되었다. 다른 버스트-특정 확장된 데이터 부분들 또한 유사하게 설명될 수 있다.
또한, 일 실시 예에서 SECDED (128,120) 코드를 사용하기 위해, 메모리 컨트롤러는 각 버스트-특정 확장된 데이터 부분의 미리 결정된 수의 비트들로서 120-64=56 비트들을 선택할 수 있다.
일 실시 예에서, 복수의 버스트들(21-28)의 각 버스트에 대해, 메모리 컨트롤러는 여기에서는 8 비트들인, 동일한 수의 비트들을 이러한 추가적인 56 데이터 비트들을 생성하도록 다른 버스트들 각각과 연관된 오리지널 버스트-특정 데이터로부터 선택할 수 있다.
도 4에서, 쉬운 설명을 위해, 확장된 데이터 부분(60)의 각 데이터 바이트는 싱글 메모리 칩(D1, D2, D3, 등) 및 싱글 버스트(D1-1, D1-2, 등)로부터 오는 것으로 도시되었다. 그러나 일 실시 예에서, 이와 같은 것이 그 케이스는 아닐 수 있다. 즉, 버스트-특정 확장된 데이터 부분의 각 데이터 바이트는 하나 이상의 메모리 칩들로부터의 데이터 비트들, 또는 복수의 버스트들로부터의 데이터 비트들을 포함할 수 있다.
도 4에서 도시된 8 버스트들 중 어떤 하나에 대해, 메모리 컨트롤러가 7개의 다른 버스트들 각각으로부터 8 데이터 비트들을 선택할 수 있기 때문에, 도 4에서 도시된 바와 같이, 버스트에 대해 버스트-특정 확장된 데이터 부분에 총 56 비트들이 있을 수 있다. 이러한 56 비트들이 버스트-특정 64-비트 오리지널 데이터 부분에 더해지는 경우, 이러한 56 비트들은 총 120 데이터 비트들의 결과가 될 것이다. 그런 다음 SECDED (128,120) 코드가 이러한 120 데이터 비트들에 적용될 것이다. 그러나, 일 실시 예에서, 만약 버스트-특정 ECC 비트들이 SECDED (128,120) 코드의 일부로서 사용된다면, 메모리 컨트롤러는 도 4의 방법론을 사용하여 생성된 총 120 비트들에서 하나의 데이터 비트를 무시 또는 생략하도록 구성될 수 있다.
일 실시 예에서, 메모리 컨트롤러는 확장된 부분들(60)에 대해 바이트들 62-64와 같이, 임의로 데이터 바이트들을 선택하도록 구성될 수 있다. 다른 실시 예에서, 메모리 컨트롤러는 특정 알고리즘 또는 미리 결정된 방법에 따라 이러한 데이터 바이트들을 선택하도록 구성될 수 있다. 그러나, 보다 나은 에러 정정을 위해, 2개의 확장된 데이터 부분들 사이에서 공통의 데이터 바이트를 가지는 것을 피하는 것이 선호될 것이다. 반면에, 코드어의 오리지널 데이터 부분으로부터의 데이터 바이트가 다른 코드어의 확장된 데이터 부분에 나타날 수 있기 때문에 2개의 128-비트 코드어들 사이의 데이터 바이트들이 오버랩될 수 있음을 도 4로부터 확인할 수 있다. 그러나 이와 같은 오버랩은 도 3 및 도 4의 실시 예들에서 SECDED (128,120) 코드의 해밍 거리의 완전한 사용 때문에 SECDED 코드의 에러 정정 능력을 떨어뜨리지 않고 가능할 수 있다.
도 4는 또한 적어도 하나의 데이터 워드에 있는 복수의 에러들이 SECDED 기법을 사용하여 어떻게 정정될 수 있는 지를 보여준다. 도 2의 경우와 같이, 도 4에서도 DIMM(10)으로부터 수신된 ECC 비트들(41-48) 즉, 도 4의 ECC-1 내지 ECC-8 블록들에 에러가 없다고 가정하였다. 반면에, 단지 예시로서, 수신된 데이터 워드(31, 제 1 버스트에 대한 오리지널 데이터 부분에 있는)가 싱글 비트 각각의 3개의 에러들을 포함하는 것으로 가정되었다. 데이터 워드(31)에 있는 타원형은 이러한 에러들의 위치들을 나타낸다. 타원형은 단지 예시적은 목적을 위한 것이며, 그리고 에러 위치들은 단지 예시를 위해서 완전히 임의로 선택되었다. 따라서, 제 1 에러는 데이터 바이트(D2-1)에 있는 것으로 도시되었고, 제 2 에러는 데이터 바이트(D4-1)에 있는 것으로 도시되었고, 그리고 제 3 에러는 데이터 바이트(D5-1)에 있는 것으로 도시되었다.
본 발명의 시사에 따른 에러 정정이 없어서, ECC-1 비트들(41)이 전통적인 (72,64) SECDED 기법을 사용하여 데이터 워드(31)에 적용되는 경우, 그 결과는 이러한 3개의 에러들 중 하나를 정정하고 그리고 다른 2개의 에러들을 정정하지는 못하고 탐지만 할 것이다. 그러나, 도 3 및 도 4의 에러 정정 기법에서, 도 3 및 도 4의 실시 예들에서 구현된 에러 정정 방법론이 2개의 에러 있는 데이터 바이트들이 128 비트들의 동일한 코드어 내에 나타날 수 없는 것과 같은 이러한 방법을 이용하여 에러 있는 데이터 바이트들을 구분 또는 구별할 수 있기 때문에 메모리 워드 또는 데이터 버스트(31)에 있는 3개의 모든 에러들이 정정될 수 있다. 에러 있는 비트들이 복수의 코드어들 사이에서 이제 구분되었기 때문에, SECDED (128,120) 기법이 각각의 개별적인 비트 에러를 정정하기 위해 사용될 수 있다. 따라서, 도 4에서 도시된 바와 같이, D2-1 바이트에 있는 비트 에러는 ECC-6 비트들(46)에 의해 탐지 및 정정될 수 있고, D4-1 바이트에 있는 비트 에러는 ECC-5 비트들(45)에 의해 탐지 및 정정될 수 있고, 그리고 D5-1 바이트에 있는 비트 에러는 ECC-3 비트들(43)에 의해 탐지 및 정정될 수 있다. 결과적으로, 데이터 워드(31)에 연관된 ECC-1 비트들과는 다른 ECC 비트들을 사용할지라도, 데이터 워드(31)에 있는 3개의 모든 비트 에러들이 정정될 수 있다. 데이터 워드에 있는 복수의 에러들의 이와 같은 정정은 도 2를 참조하여 앞서 설명된 현재의 SECDED (72,64) 방법론에서는 가능하지 않다.
어떠한 2개의 128-비트 코드어들이 적어도 하나의 오리지널 데이터 바이트를 가지는 것에 의해, 버스트-특정 128-비트 코드어의 오리지널 데이터 부분에 있는 복수의 비트 에러들이 다른 코드어들로부터의 "백업" ECC 비트들을 사용(더 구체적으로, 다른 코드어들의 ECC를 사용하는 것으로부터 이용 가능한 여분의 정정 능력)하여 정정될 수 있는 "백업(backup)" 플랜이 만들어진다. 확장된 데이터 부분(60)을 생성하는 것에 의해, 메모리 컨트롤러는 그것의 각각의 ECC 비트들이 하나의 에러를 SECDED 처리 방법에 따라 탐지 및 정정할 수 있는, 영향을 받지 않은 다른 코드어들의 확장된 데이터 부분들 중의 하나의 데이터 워드 중에서 에러 있는 데이터를 효율적으로 구분한다.
도 4에서 도시된 에러 정정 방법은 하나의 메모리 워드에 있는 2 내지 7 비트 에러들 또는 2 이상의 메모리 워드들에 있는 복수의 비트 에러들을 정정하는 것을 허용함을 알 수 있다. 예를 들어, 비록 도 4에서 도시되진 않았지만, 데이터 워드(31)가 D1-1, D6-1, 및 D7-1에 추가적인 하나의 비트 에러들을 가진다면(즉, 도 4에서 도시된 그것들에 추가된 에러들), 그러한 에러들 또한 ECC-8, ECC-4, ECC-7 및 ECC-2를 각각 사용하여 정정될 수 있다. 따라서, 이 예시에서, 데이터 워드(31)에 있는 총 7개의 에러들이 정정될 수 있다. 이 예시에서, 에러 정정들에 추가하여, ECC-2 내지 ECC-8 각각은 또한 또 다른 2개의 에러들을 탐지(정정은 아님)할 수 있고, 그로 인해 적어도 14개의 추가적인 에러들을 탐지하는 것을 제공할 수 있다. 2 이상의 메모리 워드들에 있는 복수의 비트 에러들의 정정의 예시로서, 도 4에서 도시된 바와 같이 에러들이 D2-1, D4-1, 및 D5-1에 추가되는 것을 가정할 수 있고, 또한 데이터 워드(34)의 D1-4 및 D4-4에 하나의 비트 에러가 있는 것을 가정할 수 있다. 비록 이러한 추가적인 에러들이 도 4에서 타원형으로 표시되지 않았지만, D1-4 및 D4-4에 있는 이러한 추가적인 하나의 비트 에러들이 각각 ECC-2 및 ECC-8을 사용하여 정정될 수 있는 것을 도 4의 데이터 병합 기법으로부터 알 수 있다. 따라서, 데이터 워드들(31 및 34)에 있는 복수의 비트 에러들이 본 발명의 특정한 실시 예들의 시사에 따라 SECDED (128,120) 기법을 사용하여 탐지뿐만 아니라, 효율적으로 정정될 수도 있다.
도 3 및 도 4의 논의로부터, 본 발명의 특정 실시 예들에 따른 에러 정정 방법론은 메모리 컨트롤러(또는 다른 적절한 에러 탐지/정정 유닛)에 있는 현재의 SECDED 회로망을 계속해서 사용할 수 있기 때문에 어떠한 추가적인 복잡한 회로망을 필요로 하지 않고, 현존하는 SECDED 기법에 비해 버스트 당 더 많은 수의 에러들을 정정할 수 있다. 에러들은 앞서 논의된 방법으로 SECDED 및 데이터 병합을 사용함으로 인해 더 높은 효율성에서 정정될 수 있다. 또한, 도 4의 ECC 비트들(41-48)이 BCH01(Bose Chaudhuri Hocquenghem-1) 코드에 기초하는 경우, 본 발명의 시사에 따른 에러 정정 방법론은 BCH-1 코드가 SECDED 타입의 보호를 제공할 수 있고, 따라서, SECDED 회로망이 코드어들에 기초하는 BCH-1을 위해 사용될 수 있기 때문에 다른 BCH 코드를 구현하기 위한 메모리 컨트롤러를 필요로 하지 않는다. 추가적으로, 본 발명의 시사에 따른 에러 정정에 기초하는 SECDED (128,120)는 에러 정정 기법들에 기초하는 현존하는 SECDED (72,64)에 비해 더 강한 RAS(Reliability Availability Serviceability)를 가질 수 있다.
도 5는 도 3 및 도 4의 실시 예들에서 도시된 에러 정정 방법론이 구현될 수 있는 예시적인 일부의 시스템 구성(70)을 도시한다. 시스템 구성(70)에서, 시스템 메모리 유닛(73)은 프로세서 유닛(74)과 연결되어 동작하는 것으로 도시되었다. 메모리 유닛(3)은 다른 구성요소들 가운데 적어도 하나의 메모리 모듈(76) 및 메모리 컨트롤러(77)를 포함할 수 있다. 반면에, 프로세서 유닛(74)은 캐시 유닛(79) 및 중앙 처리 유닛(CPU, 80)을 포함할 수 있다.
일 실시 예에서, 메모리 컨트롤러(77)는 프로세서 유닛(74)의 일부이거나 또는 프로세서 유닛(74)이 메모리 컨트롤러(77)의 기능을 수행하도록 구성될 수 있으며, 이러한 구성에 대한 자세한 것은 도 6의 예시적인 실시 예에 도시되어 있다. 논의의 용이함을 위해, 유닛들(73,74)의 단지 매우 간단한 설명이 도 5에 제공되었다. 이러한 유닛들은 많은 다른 복잡한 구성요소들을 포함할 수 있음을 이해할 수 있을 것이다. 그러나 이와 같은 구성요소들은 본 발명과의 관련성이 없기 때문에 도 5에 도시되지 않았다.
일 실시 예에서, 메모리 모듈(76)은 각 ECC-DIMM이 도 1의 ECC-DIMM과 유사할 수 있는 하나 이상의 ECC-DIMM들을 포함할 수 있다. 대안적으로, 다른 실시 예에서, 메모리 모듈(76)의 ECC-DIMM들은 본 발명의 시사에 따른 에러 정정 방법론을 실행하도록 구성된 온-보드형의 에러 정정 유닛들을 가질 수 있다. 일 실시 예에서, 도 1의 ECC-DIMM(10)과 같은, 메모리 모듈(76)의 각 ECC-DIMM은 8개의 데이터 칩들과 하나의 ECC 칩인, 9개의 칩들을 포함할 수 있다. 버스트의 ECC 비트들은 도 1의 ECC-DIMM(10)의 경우로 도시된 메모리 모듈의 ECC-특정 칩에 개별적으로 저장되거나, 또는 데이터 비트들에 인터리브(interleave)된 하나 이상의 칩에 저장될 수 있다. 후자의 경우에, ECC-DIMM에 있는 모든 칩들은 "데이터 칩들"로 간주될 수 있고 그리고 ECC 칩 전용은 없을 것이다. 메모리 유닛(76)을 구성하는 메모리 모듈들은, 예를 들어, FB-DIMM(Fully Buffered Dual Inline Memory Module), Rambus®DRAM, 또는 앞서 언급된 DDR/DDR2/DDR3/DDR4 SDRAM과 같은, 어떠한 적당한 형태의 시스템 메모리일 수 있다. 메모리 컨트롤러(77)는 도 6에서 도시된 예시적인 구성을 가질 수 있다. 앞서 설명한 바와 같이, 본 발명에서, 메모리 컨트롤러(77)는 도 3 및 도 4를 참조하여 앞서 논의된 방법론들을 수행하기 위해 동작하는 것으로 고려되었다. 그러나 또한 앞서 언급된 바와 같이, 특정한 실시 예들에서, 본 발명의 에러 정정 기법은 프로세서 유닛(74) 또는 온-보드형 ECC-DIMM에서 실행될 수도 있다.
CPU(80)는 범용의 마이크로프로세서일 것이다. 아래의 논의에서, 용어 "프로세서" 및 "CPU"는 논의의 용이함을 위해 서로 교환되어 사용될 수 있다. 그러나 CPU(80) 대신에 또는 CPU(80)에 더하여, 프로세서 유닛(74)이 예를 들어, 마이크로컨트롤러, 디지털 신호 프로세서(DSP), 그래픽 프로세싱 유닛(GPU), 응용 주문형 집적 회로(ASIC) 전용 프로세서, 등과 같은, 어떠한 다른 타입의 프로세서를 포함할 수 있는 것으로 이해되어야 한다. 게다가, 일 실시 예에서, 프로세서 유닛(74)은 분산 처리 환경에서 동작할 수 있는, 하나 이상이 CPU 들을 포함할 수 있다. CPU(80)는 명령어들을 실행하고 그리고 예를 들어, x86 ISA(32-비트 또는 64-비트 버전들), PowerPC® ISA, 또는 RISC (Reduced Instruction Set Computer) ISA에 의존하는 MIPS(Microprocessor without Interlocked Pipeline Stages) ISA와 같은, 특정 ISA(Instruction Set Architecture)에 따른 데이터를 처리하도록 구성될 수 있다.
명령어 실행 시간을 감소시키기 위해, 현대의 CPU들은 데이터를 위한 더 느린 시스템 메모리(메모리(76)과 같은)에 접근하는 것과 연관된 지연들을 피하기 위해 자주 사용되는 데이터들의 복사본들을 더 작고, 더 빠른 메모리들에 저장한다. 이러한 빠른 메모리들은 "캐시"로 언급되며, 캐시는 데이터 액세스 시간을 상당히 감소시킬 수 있도록, CPU의 코어와 동일한 칩에 존재할 수 있다. 캐시 유닛(79)은 레벨 1(또는 L1) 캐시, 레벨2(또는 L2) 캐시, 레벨 3(또는 L3) 캐시, 등과 같은 캐시 레벨들의 계층구조를 구성할 수 있는 캐시 메모리들을 포함할 수 있다. 캐시 메모리들은 가장 낮은 레벨의 캐시(즉, L1 캐시)가 다음 레벨의 캐시로 이동하기 전에 먼저 CPU에 의해 액세스될 수 있도록 구성된다. 메모리 명령에 의해 L1 캐시가 "히트" 된 경우, 관련된 데이터가 프로세서(74)의 실행 유닛들(미도시)로 리턴된다. 메모리 명령이 L1 캐시에서 "미스" 된 경우, 미스 요청이 다음(더 높은) 레벨의 캐시인 L2 캐시 또는 시스템 버스(예컨대, 시스템 메모리(76)에 액세스하기 위해)로 전송된다. 유사하게, 데이터는 캐시에서 시스템 메모리(76)로 쓰여질 수 있다. 어떠한 이벤트에서도, 시스템 메모리(76)는 앞서 논의된 것과 같은 각각이 512 비트 라인일 수 있는 하나 이상의 "캐시 라인"을 통해 캐시(79)로/로부터 데이터를 전송할 수 있다.
캐시가능한 데이터를 저장하는 것에 더해서, 메모리(76)는 또한 입출력(I/O) 장치와 같은, 주변 장치로부터 데이터를 수신 및 저장할 수 있다. CPU(80)는 시스템 메모리 유닛(73) 및 주변 장치 사이에서 이와 같은 데이터의 전송들을 조정하도록 구성될 수 있다. 일 실시 예에서, 서로 다른 레벨의 캐시 메모리들은 L2 캐시 전에 L1 캐시가 액세스되고, L3 캐시 전에 L2 캐시가 액세스되도록, 직렬로 배열될 수 있다. 다양한 캐시 메모리들의 실제의 배치 예컨대, 동일한 CPU 칩 상에 있거나 또는 CPU 칩 밖에 있거나, CPU 코어의 일부이거나 또는 일부가 아닌 것과 같은, 배치는 본 발명과는 무관한 주어진 프로세서의 아키텍쳐에 의해 영향을 받는 디자인적인 선택이다.
도 6은 도 5의 부분적인 시스템 구성(70)에서 도시된 메모리 컨트롤러(77)의 보다 자세한 예시적인 아키텍쳐를 보여준다. 간결성의 위해, 단지 본 발명과 관련이 있는 구성요소들만 도 6에서 도시되었고 그리고 이하에서 논의된다. 메모리 컨트롤러(77)는 그 모두가 컨텐츠 버퍼(85, 간단히, "버퍼")와 동작 가능하게 연결되는, 메모리 인터페이스(82) 및 프로세서 인터페이스(83)를 포함할 수 있다. 메모리 인터페이스(82)는 메모리 모듈(76)과 프로세서 유닛(74) 사이에서의 데이터의 전송을 관리하도록 구성될 수 있다. 이와 같은 데이터의 전송은 앞서 기술된 캐시 라인들의 전송을 포함한다. 예를 들어, 하나 이상의 캐시 라인들이 데이터를 캐시(79)로 전송하기 위한 캐시 필 요청(cache fill request)들에 대한 응답으로 메모리 컨트롤러(77)에 의해 메모리(76)로부터 읽혀질 수 있다. 캐시 필 요청들은 프로세서 인터페이스(83)를 통해 프로세서 유닛(74)으로부터 메모리 컨트롤러(77)에 의해 수신될 수 있다. 반면에, 먼저 저장된 캐시 라인이 캐시 "미스"의 이벤트에서 대체될 경우와 같이 CPU에 의해 캐시(79)로부터 "이빅트(evict)" 된 데이터는 메모리 인터페이스(82)를 통해 결국 메모리(76)로 전송하기 위해 버퍼(85)에 저장되도록 프로세서 인터페이스(83)를 통해 수신될 수 있다. 따라서, 캐시(79)를 전송하거나 또는 메모리(76)에 쓰여질 캐시 라인들은 컨텐츠 버퍼(85)에 일시적으로 저장될 것이다. 앞서 언급하였듯이, 데이터는 단일 메모리 읽기 또는 쓰기 동작을 구성하는 복수의 버스트들을 통해 메모리(76)로부터 읽혀지거나 또는 메모리(76)에 쓰여질 것이다.
일부 실시 예들에서, 메모리 인터페이스(82)의 몇몇 예시들이 각각의 예시가 시스템 메모리(76)의 각 뱅크들을 컨트롤하게 구성되도록 구현될 수 있다. 메모리 인터페이스(82)는 시스템 메모리의 복수의 다른 타입들과 인터페이싱하는 것을 동시에 지원하도록 구성될 수 있다. 로우/칼럼 액세스, 및 메모리 컨트롤러(77)에 의한 메모리 칩(메모리 모듈(76)에 있는)의 메모리 뱅크로/로부터의 데이터 전송과 같은 메모리 뱅크 선택의 구체적인 내용들은 본 개시와 관련이 없기 때문에, 여기에서 논의되지 않는다.
메모리 컨트롤러(77)는 또한 디코더 또는 정정 유닛(87) 및 인코더 유닛(88)을 포함할 수 있다. 이러한 유닛들은 컨텐츠 버퍼(85)와 동작 가능하게 연결될 수 있다. 도 6에서 도시된 모든 구성 유닛들(82-83, 85, 및 87-88)은 이러한 유닛들의 동작들을 조정하기 위한 컨트롤 시그널링 및 필요한 타이밍을 제공할 수 있는, 컨트롤 유닛(90)의 제어 하에서 동작할 수 있다. 메모리 모듈(76) 상에서 메모리 리드 동작 동안, 컨트롤 유닛(90)은 대응하는 64 비트의 ECC에 따른 캐시 라인(512 비트)을 컨텐츠 버퍼(85)에 저장하도록 메모리 인터페이스(82)를 구성할 수 있다. 컨트롤 유닛(90)은 도 4의 예시적인 실시 예에서 도시된 128-비트 오버래핑하는 코드어들을 생성하기 위해 수신된 메모리 컨텐츠를 조작할 수 있다. 이러한 128-비트 코드어들의 생성의 일부로서, 컨트롤 유닛(87)은 SECDED (128,120) 코드의 어플리케이션을 가능하게 하기 위해 데이터 맵핑 및 데이터 병합을 수행할 수 있다. 일 실시 예에서, 디코더 유닛(87)은 디코더가 모두 128 비트들(데이터와 ECC가 더해진)을 수신하더라도, 효율적으로 120 비트들을 조작하도록 구성될 수 있다. 컨트롤 유닛(90)은 하나 이상의 생성된 코드어들을 버퍼(85) 또는 컨트롤 유닛 또는 디코더 유닛(87) 안의 내부 저장소(미도시)에 저장할 수 있다. 대안적으로, 컨트롤 유닛(90)은 한번에 하나의 코드어를 생성할 수 있고 그리고 디코드(87)가 다음 코드어를 그 디코더에 생성 및 공급하기 전에 그것을 조작하도록 한다. 디코더(87)가 128 비트들의 각 코드어들을 조작하는 경우, 디코더(87)는 버스트에서 수신한 64 데이터 비트들과 예를 들어, 도 4에서 논의된 것과 같이 첨부되어 "확장된" 56 데이터 비트들을 포함하는 120 데이터 비트들의 에러 정정 및 탐지를 수행하기 위해 SECDED (128,120) 코드를 사용할 것이다. 디코더(87)는 예를 들어, 도 4에서 도시된 에러들 및 앞서 논의된 에러들과 같은 에러들뿐만 아니라, 데이터 에러들을 정정하도록 구성될 수 있다. 디코딩되고 정정된 64-비트 데이터 워드(더 이상 ECC 비트들을 포함하지 않을) 각각은 결국에는 프로세스 인터페이스(83)를 통해 캐시 메모리(79)로 전송되기 위해 컨텐츠 버퍼(85)에 저장될 것이다.
앞에서 논의된 바와 같이, 디코더(87)는 본 발명의 특정한 실시 예들에 따른 에러 정정을 위한 SECDED 코드의 사용 때문에 현존하는 SECDED 기반 디코딩 회로망을 사용하는 것을 계속할 수 있다. 따라서, 디코더(87)의 디자인이 단순화될 수 있다.
비록 메모리 리드 동작이 본 발명에서 우선적으로 논의되었지만, 도 3 및 도 4의 실시 예들에서의 에러 정정 기법이 메모리 쓰기 동작에서도 마찬가지로 적용될 수 있음을 이해할 수 있을 것이다. 예를 들어, 캐시 라인이 메모리(76)에 쓰여지는 경우, 메모리 컨트롤러(77)는 프로세서 인터페이스(83)를 통해 캐시(79)로부터 512 비트의 캐시 라인을 수신할 것이다. 수신된 비-인코딩된 데이터는 컨텐츠 버퍼(85)에 먼저 저장될 것이다. 일 실시 예에서, 캐시 라인을 받는 즉시, 컨트롤 유닛(90)은 최종적으로 8개의 연속적인 버스트들을 통해 메모리(76)에 기입하기 위해, 각각이 64 비트인 8개의 세그먼트들로 데이터를 나눌 것이다. 오리지널 64 비트 데이터 워드 각각을 인코딩하기 전에, 특정 실시 예들에서, 컨트롤 유닛(90) 또는 인코더(88)는 SECDED (128,120) 기법하에서 데이터 비트들의 크기를 120 비트들로 확장하기 위해 추가적인 56 데이터 비트들을 가지는 데이터 워드를 첨부할 수 있다. 첨부된 데이터 비트들은 도 4의 예시적인 실시 예에서 도시된 확장된 데이터 부분들(60)을 포함한다. 이 데이터 "확장" 동작은 적절한 데이터 매핑 또는 데이터 병합 접근방법을 사용하여 수행될 수 있다. 상술한 메모리 읽기 동작의 경우와 같이, 컨트롤 유닛(90)은 120-비트의 확장된 데이터 세그먼트를 버퍼(85) 또는 컨트롤 유닛 또는 인코더 유닛(88) 안의 내부 스토리지(미도시)에 저장할 수 있다. 대안적으로, 컨트롤 유닛(90)은 하나의 120-비트의 데이터 세그먼트를 한번에 생성할 수 있고 그리고 인코드(88)가 다음 데이터 세그먼트를 생성하고 그것을 인코더(88)로 공급하기 전에 그 데이터 세그먼트를 조작하도록 할 수 있다.
일 실시 예에서, 인코더(88)가 120 비트의 각 데이터 세그먼트를 조작하는 경우, 인코더(88)는 SECDED (128,120) 코드를 관련된 120 데이터 비트들에 대해 대응하는 8 ECC 비트들을 생성하기 위해 사용할 수 있다. 인코더(88)는 오리지널 데이터의 64 비트들을 따라 생성된 8 ECC 비트들을 컨텐츠 버퍼(85)에 저장하도록 구성될 수 있다. 메모리 쓰기 동작의 일부로서, 컨트롤 유닛(90)은 메모리 인터페이스(82)를 통해 메모리 모듈(76)로 72 비트들(64 데이터 비트들 더하기 8 ECC 비트들)의 버스트-특정 인코딩된 데이터 세그먼트를 저장하기 위해 메모리 버스트를 사용할 수 있다.
도 3 및 도 4의 예시적인 실시 예들을 따르는 캐시 라인의 메모리 읽기 동작에서, 이러한 72 비트들의 인코딩된 데이터 세그먼트들 각각은 메모리 인터페이스(82)를 통해 메모리 모듈(76)로부터 수신될 숭 lT고 그리고 본 발명에 따른 SECDED (128,120) 에러 정정 기법의 일부로서 사용될 수 있다.
특정 실시 예에서, 디코더 및 인코더 유닛들(87,88)은 단일의 유닛으로 구현될 수 있다. 다른 실시 예들에서, 그와 같은 "조합된" 유닛은 컨트롤 유닛(90)의 일부로서 구현될 수 있으며, 이와 같은 경우, 인코더/디코더 유닛들(97,88)에 의해 수행되는 상술한 많은 기능들은 컨트롤 유닛(90)에 의해 효율적으로 수행될 수 있다.
대안적으로, 일 실시 예에서, 앞서 논의된 컨트롤 유닛의 특정 기능의 일부를 수행하기 위해 개별적인 디코더(87) 및 인코더(88)로 구성하는 것도 가능하다. 그러나, 특정 실시 예들에서, 메모리 컨트롤러(77)에 의한 본 발명의 에러 정정 기법의 전체적인 구현은 메모리 컨트롤러(77)의 어떤 구성요소 또는 유닛이 정확하게 무슨 작업을 수행하는지와 더 관련될 수 있다.
도 7은 본 발명의 일 실시 예에 따른 도 5의 시스템 메모리 유닛(73)을 포함하는 예시적인 시스템 또는 장치(92)를 도시한다. 따라서, 일 실시 예에서, 도 5의 부분 구성(70)은 도 7에서 도시된 전체 시스템(92)을 나타내는 것으로 간주된다. 따라서, 참조 및 논의의 용이함을 위해, 공통의 시스템 구성요소들/유닛들을 위해 동일한 참조 번호들이 도 5 및 도 7에서 사용된다.
메모리 유닛(73)은 도 3 및 도 4의 예시적인 실시 예들의 컨텍스트에서 앞서 논의된 에러 정정 동작들을 수행하도록 구성된 도 6의 예시적인 실시 예에서 도시된 메모리 컨트롤러(77)를 포함할 수 있다. 메모리 컨트롤러(77)는 본 발명의 특정 실시 예들의 창의적인 측면들에 따라 복수의 에러 정정들을 수행하기 위해 하드웨어(필요하다면, 소프트웨어와 결합하여)로 구성될 수 있다.
다른 실시 예들에서, 메모리 컨트롤러(77), 프로세서 유닛(74) 또는 시스템 메모리 유닛(73, 예를 들어, 도 5의 메모리 모듈(76)의 ECC-DIMM들과 같은)의 ECC-기반 메모리 모듈들은 앞서 설명된 본 발명의 에러 정정 방법론을 수행하도록 구성될 수 있다. 예를 들어, 일 실시 예에서, 프로세서 유닛(74)은 본 발명의 SECDED (128,120) 기법을 사용하여 메모리 모듈(76)로부터 수신된 또는 메모리 모듈(76)로 전송된 컨텐츠를 프로세서(74)가 저장하고 그리고 처리하는 것을 가능하도록 하는 도 6에서 도시된 그것들과 유사한 구성요소들(비록 메모리 컨트롤러(77)의 컨텍스트이기는 하나)을 포함할 수 있다.
대안적으로, 다른 실시 예에서, 시스템 메모리 유닛(73)이 메모리 컨트롤러(77)를 포함하지 않는 대신에, 프로세서 유닛(74)이 앞서 논의된 메모리 컨트롤러(77)의 기능을 수행할 수 있다.
도 7에서, 프로세서 유닛(74)이 주변 저장 유닛(94), 하나 이상의 입력 장치들(96), 하나 이상의 출력 장치들(97), 및 네트워크 인터페이스 유닛(99)뿐만 아니라 시스템 메모리(73)와도 연결된 것으로 도시되었다. 일부 실시 예들에서, 시스템(92)은 도시된 장치들 및 유닛들의 하나 이상의 예시들을 포함할 수 있다. 시스템(92)의 일부 예시들은 컴퓨터 시스템(데스크탑 또는 랩탑), 태블릿 컴퓨터, 모바일 장치, 셀룰러 폰, 비디오 게임 유닛 또는 콘솔, 머신 대 머신(M2M) 통신, 스테이트리스 "씬" 클라이언트 시스템(stateless "thin" client system), 또는 다른 모든 타입들의 컴퓨팅 또는 데이터 프로세싱 장치를 포함할 수 있다. 다양한 실시 예들에서, 시스템(92)은 랙-마운터블 서버 시스템(rack-mountable server system), 독립 시스템, 또는 적절한 모든 타입의 폼 팩터로서 구성될 수 있다. 일부 실시 예에서, 시스템(92)은 서버 시스템보다 클라이언트 시스템으로서 구성될 수 있다.
특정 실시 예들에서, 프로세서 유닛(74)은 하나 이상의 CPU들을 포함할 수 있고, 및/또는 시스템(92)은 하나 이상의 프로세서 유닛들(74, 예컨대, 분산 프로세싱 구성)을 포함할 수 있다. 시스템(92)이 멀티프로세서 시스템인 경우, CPU 또는 프로세서의 하나 이상의 예시들이 있을 것이다.
다양한 실시 예들에서, 시스템 메모리(73)는 FB-DIMM, DDR/DDR2/DDR3/DDR4 SDRAM, Rambus® DRAM, 플래시 메모리, 다양한 타입의 ROM(Read Only Memory), 등고 같은, 앞서 논의된 것과 같은 적절한 타입의 모든 메모리를 포함할 수 있다. 일 실시 예에서, 시스템 메모리(73)는 별개의 메모리 인터페이스들에 의해 제어되는 메모리의 복수의 개별 뱅크들을 포함할 수 있다. 또한, 일부 실시 예들에서, 시스템 메모리(73)는 단일 타입 메모리와는 반대로, 복수의 다른 타입들의 메모리를 포함할 수 있다.
다양한 실시 예들에서, 주변 스토리지 유닛(94)은 마그네틱, 옵티컬, 마그네토-옵티컬, 또는 하드 드라이브들, 옵티컬 디스크들(CD들 또는 DVD들과 같은)과 같은 솔리드-스테이트 스토리지 미디어, 불휘발성 RAM 장치들, 등을 위한 지원을 포함할 수 있다. 일부 실시 예들에서, 주변 스토리지 유닛(94)은 디스크 어레이들(적절한 RAID(Redundant Array of Independent Disks) 구성일 수 있는) 또는 표준 SCSI(Small Computer System Interface)를 통해 프로세서(74)와 연결될 수 있는 SANs(Storage Area Networks), 광 채널 인터페이스, Firewire® (IEEE 1394)인터페이스, 또는 다른 어떠한 적당한 인터페이스와 같은 더 복잡한 스토리지 장치들/시스템들을 포함할 수 있다. 일 실시 예에서, 주변 스토리지 유닛(94)은 예를 들어, PCI Express™(Peripheral Component Interface Express) 표준 기반의 인터페이스, USB(Universal Serial Bus) 프로토콜 기반의 인터페이스, 또는 IEEE 1394 (Firewire®) 프로토콜 기반의 인터페이스와 같은 표준 주변 인터페이스를 통해 프로세서(74)와 연결될 수 있다.
특정 실시 예들에서, 입력 장치(96)는 컴퓨터 키보드, 마우스 또는 다른 포인팅 장치, 터치패드, 조이스틱, 또는 다른 어떤 타입의 데이터 입력 장치와 같은 표준 입력 장치들을 포함할 수 있다. 출력 장치(97)는 그래픽/디스플레이 장치, 컴퓨터 스크린, 오디오 스피커, 알람 시스템, CAD/CAM(Computer Aided Design/Computer Aided Machining) 시스템, 비디오 게임 스테이션, 또는 다른 어떤 타입의 데이터 출력 또는 처리 제어 장치를 포함할 수 있다. 일부 실시 예들에서, 입력 장치(96) 및 출력 장치(97)는 I/O 또는 주변 인터페이스를 통해 프로세서 유닛(74)과 연결될 수 있다.
일 실시 예에서, 네트워크 인터페이스(99)는 시스템(92)과 네트워크(미도시)를 연결할 수 있도록 하기 위해 프로세서 유닛(74)과 통신할 수 있다. 또 다른 실시 예에서, 네트워크 인터페이스(99)는 모두 함께 결여될 수 있다. 네트워크 인터페이스(99)는 시스템(92)과 유선 또는 무선인 네트워크를 연결하기 위한 모든 적당한 장치들, 매체 및/또는 프로토콜 컨텐츠를 포함할 수 있다. 다양한 실시 예들에서, 네트워크는 LANs(Local Area Networks), WANs(Wide Area Networks), 유선 또는 무선 이더넷, 텔레커뮤니케이션 네트워크, 또는 다른 적당한 타입의 네트워크들을 포함할 수 있다.
시스템(92)은 도 7에서 도시된 다양한 시스템 구성요소들에 전원을 공급하기 위한 온보드형의 전원 공급부(100)를 포함할 수 있다. 전원 공급부(100)는 배터리들을 수신할 수 있거나 또는 AC 전원 아울렛과 연결될 수 있다. 일 실시 예에서, 전원 공급부(100)는 태양 에너지를 전기 에너지로 변환할 수 있다.
도 8은 도 3 및 도 3의 실시 예들에서 도시된 에러 정정 방법론이 구현될 수 있는 예시적인 부분(partial) 시스템 구성(102)을 도시한다. 도 8에서 도시되었듯이, 프로세서 유닛(74)은 여기에서 논의된 에러 정정 방법론을 구현하기 위해 메모리 모듈(76)과 인터페이스할 수 있다. 도 5의 시스템 레이아웃과 대조적으로, 도 8의 실시 예에서는, 본 발명이 시사하는 것에 따른 에러 정정이 프로세서 유닛(74)에 의해 수행되기 때문에 메모리 컨트롤러(77)가 결여되어 있다. 대안적으로, 도 8의 실시 예에서, 앞서 설명된 메모리 컨트롤러의 기능은 본 명세서에서 논의된 것과 같은 에러 정정을 수행하기 위해 프로세서 유닛(74)에서 구현될 수 있다. 앞서 설명한 바와 같이, 프로세서 유닛(74)은 본 개시의 시사에 따른 메모리 리드 동작 동안 SECDED (128,120)에 기반한 에러 정정을 수행하기 위해 메모리(76)로부터 검색된 대응하는 ECC 비트들에 따른 메모리 데이터를 저장하기 위한 필수 스토리지를 포함할 수 있다. 유사하게, 메모리 라이트 동작 동안, 프로세서(74)는 메모리(76)에 저장하기 위해 적합한 컨텐츠를 생성하기 위해 SECDED (128,120)를 적용할 수 있다. 앞에서의 광범위한 논의 때문에, 도 8의 추가적인 논의는 간결함을 위해 제공되지 않을 것이다.
계속하여, 제한이 아닌 설명을 위한 목적으로, 특정한 세목들(특정 아키텍처, 인터페이스들, 기술들, 등과 같은)은 개시된 기술의 철저한 이해를 제공하기 위한 것이다. 그러나 개시된 기술들이 이러한 특정한 세목들로부터 출발하는 다른 실시 예들에서 실시될 수 있음이 통상의 기술자들에게는 명확할 것이다. 즉, 통상의 기술자들은 본 명세서에서 명확하게 기술되거나 또는 도시되지 않았음에도 불구하고, 개시된 기술들의 원리들을 포함하는 다양한 방식들을 고안할 수 있을 것이다. 일부 예시들에서, 잘 알려진 장치들, 회로들 및 방법들의 상세한 설명들이 불필요한 세목을 가지는 개시된 기술들의 설명을 모호하게 하지 않을 목적으로 생략될 수 있다. 본 명세서에서 설명하는 개시된 기술들의 원리들, 측면들, 및 실시 예들의 모든 서술들은 그것들의 특정 예시들뿐만 아니라, 그것들의 구조적 및 기능적인 균등물들 모두를 포함하는 것으로 의도되었다. 추가로, 그와 같은 균등물들은 현재 알려진 균등물뿐만 아니라 장래에 개발될 균등물들, 예를 들어 구조에 관계없이 동일한 기능을 수행하는 모든 개발될 균등물들을 포함하는 것으로 의도되었다.
따라서, 예를 들어, 명세서의 블록도(예컨대, 도 5 내지 8에 있는)는 본 기술의 원리를 구현하는 예시적인 회로망의 개념적인 관점을 나타내거나 또는 본 기술의 원리를 구현하는 다른 기능 유닛들을 나타낼 수 있다. 유사하게, 도 3의 흐름도 및 도 4의 예시적인 에러 정정의 예시는 프로세서(예컨대, 도 5, 7 및 8의 프로세서 유닛(74))로부터 지원받거나 또는 지원받지 않는 메모리 컨트롤러(예컨대, 도 5 및 6의 메모리 컨트롤러)에 의해 주로 수행될 수 있는 다양한 프로세스들 또는 혁신적인 측면들을 나타낼 수 있다. 메모리 컨트롤러 또는 프로세서는 범용 프로세서, 특수 목적 프로세서, 통상적인 프로세서, DSP(Digital Signal Processor), 복수의 마이크로프로세서들, DSP 코어와 연관된 하나 이상의 마이크로프로세서들, 컨트롤러, 마이크로컨트롤러, ASICs(Application Specific Integrated Circuits), FPGAs(Field Programmable Gate Arrays) 회로들, 집적 회로의 모든 형태들, 및/또는 상태 머신을 포함할 수 있다. 도 3 및 4의 상황에서 상술한 기능성의 전부 또는 일부는 하드웨어로 제공될 수 있다. 특정한 발명의 측면이 소프트웨어 기반 프로세싱을 요구하는 경우, 이와 같은 소프트웨어 또는 프로그램 코드는 컴퓨터 판독 가능 데이터 저장 매체(미도시)에 존재할 수 있다. 그와 같은 저장 매체는 도 7의 실시 예의 주변 저장 장치(94)의 일부이거나, 또는 프로세서 유닛(74) 또는 메모리 컨트롤러(77, 도 5 및 6)의 내부 메모리의 일부일 수 있다. CPU(80, 도 5) 또는 메모리 컨트롤러(77)는 소프트웨어 기반 프로세싱을 수행하기 위해 그와 같은 매체에 저장된 명령어들을 실행할 수 있다. 컴퓨터 판독 가능 데이터 저장 매체는 위에서 언급된 범용 컴퓨터 또는 프로세서에 의해 실행되기 위한 컴퓨터 프로그램, 소프트웨어, 펌웨어, 또는 마이크로코드를 포함하는 비-일시적 데이터 저장 매체일 수 있다. 컴퓨터 판독 가능 저장 매체는 ROM(Read Only Memory), RAM(Random Access Memory), 디지털 레지스터, 캐시 메모리, 반도체 메모리 장치, 내부 하드 디스크들과 같은 자기 매체, 자기 테이프들 및 제거 가능한 디스크들, 자기 광학 매체, 및 CD-ROM 디스크들 및 DVD(Digital Versatile Disks)과 같은 광학 매체를 포함할 수 있다.
본 개시의 발명적인 측면들에 따른 복수의 에러 정정 기법의 대안적인 실시 예들은 본 개시의 시사에 따른 해결책을 지원하는데 필요한 어떠한 기능성 및/또는 위에서 확인된 모든 기능성을 포함하는, 추가적인 기능성을 제공하기 위한 추가적인 구성요소들을 포함할 수 있다. 비록 특징들 및 성분들이 특정한 조합들로 위에서 설명되었지만, 각 특징 및 성분들은 다른 특징들 및 성분들이 없이 혼자 또는 다른 특징들과 함께 또는 다른 특징들이 없이 다양한 조합들로서 사용될 수 있다. 전술한 바와 같이, 시스템(92)의 일부 구성요소들 예를 들어, 메모리 컨트롤러(77) 및 CPU(80)들의 기능들은 하드웨어(회로 하드웨어와 같은)의 사용 및/또는 코딩된 명령어들 또는 컴퓨터 판독 가능 데이터 저장 매체(상술한)에 저장된 코딩된 명령어 또는 마이크로코드의 형태인 소프트웨어/펌웨어를 실행할 수 있는 하드웨어를 통해 제공될 수 있다. 따라서, 그와 같은 기능들 및 예시적인 기능 블록들은 하드웨어로 수행되는 및/또는 컴퓨터로 수행되는, 및 머신으로 수행되는 것으로 이해되어야 할 것이다.
앞의 내용은 EEC-DIMM으로부터의 메모리 버스트와 연관된 메모리 워드에 있는 하나 이상의 에러를 정정하기 위해 데이터 병합과 함께 SECDED (128,120) 코드를 사용하는 ECC-DIMM을 위한 에러 정정 기법을 기술한다. SECDED (128,120) 코드의 해밍 거리를 완전하게 이용하는 것에 의해, 8 ECC 비트들은 120 데이터 비트들에 있는 하나의 에러를 정정하는데 잠재적으로 사용될 수 있다. 따라서, 8 ECC 비트들은 그것들의 대응하는 64 데이터 비트들뿐만 아니라, 8 ECC 비트들 당 120 데이터 비트들을 가지기 위해 다른 메모리 버스트들로부터 추가적인 56 데이터 비트들과도 연관된다. ECC-DIMM으로부터의 각 버스트는 72 비트들-64개의 데이터 비트들과 8개의 ECC 비트들의 합-에 머무른다. 그러나 각 메모리 버스트는 다른 모든 버스트들로부터 데이터 비트들을 공유하는 것에 의해 실제의 64 데이터 비트들에서 120 데이터 비트들로 효과적으로 확장된다. ECC-DIMM으로부터 512 비트의 캐시 라인을 읽는 경우, SECDED (128,120) 코드는 메모리 워드에 있는 실제의 64 데이터 비트들에 있는 하나 이상의 에러를 정정하기 위해 수신된 64 ECC 비트들 모두와 함께 사용된다. 본 발명의 시사에 따른 데이터 맵핑은 현존하는 (72,64) SECDED 코드에 비해 더 높은 탄력성 또는 에러 정정 능력을 가지는 것을 의미한다. 또한, 본 발명에 따른 에러 정정 방법론은 새로운 코드의 구현을 요구하지 않으며, 따라서 메모리 컨트롤러에 있는 현존하는 SECDED 회로망이 효율적으로 사용될 수 있다.
본 발명이 특정 실시 예에서, 데이터 병합은 더 높은 효율성으로 에러들을 정정하기 위해 SECDED 코딩과 함께 사용된다. (128,120) SECDED 코드의 해밍 거리를 완전히 이용하는 것에 의해, 8개의 ECC 비트들은 120개의 데이터 비트들의 하나의 에러를 잠재적으로 정정하는데 사용될 수 있다. 따라서, 일 실시 예에서, 8개의 ECC 비트들은 그것들과 대응하는 64개의 데이터 비트들뿐만 아니라, ECC의 8개의 비트들 당 총 120개의 데이터 비트들을 가지기 위해 다른 메모리 버스트들로부터의 추가적인 56개의 데이터 비트들과도 연관된다. ECC-DIMM으로부터의 각 버스트는 72개의 비트들-64개의 데이터 비트들 더하기 ECC의 8개의 비트들-에서 남아있다. 그러나, 메모리 컨트롤러(또는 호스트 프로세서)는 주어진 버스트의 8개의 ECC 비트들을 이러한 120개의 데이터 비트들에 적용하기 위해 주어진 버스트의 64개의 데이터 비트들을 가지는 다수의 다른 버스트들로부터 56개의 데이터 비트들을 오버랩(overlap)하도록 구성될 수 있다. 반면에, 각 메모리 버스트는 ECC-DIMM으로부터 독출되는 캐시 라인에 대해 다른 모든 버스트들로부터 데이터 비트들을 쉐어링하는 것에 의해 그것의 실제적인(또는 원래의) 64개의 데이터 비트들로부터 120개의 데이터 비트들까지 효율적으로 확장될 수 있다. 버스트와 연관된 ECC 비트들의 수는 여전히 8개의 비트들로 동일하게 남아있다. 512-비트 캐시 라인을 위한 64개의 ECC 비트들의 경우에 있어서, 각 메모리 워드/버스트가 이러한 방법으로 효율적으로 확장된다면, 메모리 컨트롤러(또는 호스트 프로세서)는 메모리 워드에 있는 데이터의 실제의 64개의 비트들에 있는 하나 이상의 에러를 정정하기 위해 수신된 모든 64개의 ECC 비트들과 함께 SEDED 코드를 사용할 수 있다.
본 발명의 특정 실시 예들은 데이터 병합과 더불어 SECDED 코딩을 사용하여 메모리 워드에 있는 하나 이상의 에러를 정정할 수 있는 데이터 저장 및 검색 기법을 제공한다. SECDED (128,120) 코딩은 64-비트 메모리 버스트의 복수의 에러들을 정정하기 위해 그것의 완전한 해밍 거리를 데이터 레이어들을 오버래핑하는 것과 함께 이용한다. 특정한 실시 예들에서, 본 발명의 시사에 따른 방법론은 때로는 추가적인 복잡한 회로망의 필요 없이, 6EC7ED(Six Error Correction Seven Error Detection) 기법에 비해 메모리 버스트 당 더 많은 수의 에러들을 정정할 수 있다. 본 발명의 시사에 따른 데이터 맵핑은 현존하는 (72,64) SECDED 코드보다 더 높은 레질리언스(resilience) 또는 에러 정정으로 번역할 수 있다. 또한, 본 발명의 특정 실실 예들에 따른 에러 정정 방법론은 새로운 코드의 구현을 필요로 하지 않고, 따라서 메모리 컨트롤러에 있는 현존하는 SECDED 회로망을 효과적으로 사용할 수 있다.
기술분야에서 통상의 지식을 가진 자에 의해 알 수 있듯이, 본 명세서에서 기술된 혁신적인 개념들은 폭넓은 범위의 어플리케이션을 통해 수정되거나 또는 변경될 수 있다. 따라서, 특허성이 있는 주제의 범위는 상술한 임의의 특정 예시적인 개시에 한정되지 않아야 한다. 따라서, 특허성 있는 주제의 범위는 상술한 특정 예시적인 시사들에 제한되어서는 안되고, 아래의 청구항들에 의해 한정되어야 한다.
10: ECC-DIMM 12~20; 데이터 칩들
21~28: 버스트들 31~38: 버스트 특정 데이터 부분
41~48: 버스트 특정 ECC 비트 60: 확장된 데이터 부분
70: 시스템 73: 시스템 메모리 유닛
74: 프로세서 유닛 76: 메모리
77: 메모리 컨트롤러 79; 캐시
80: CPU 82: 메모리 인터페이스
83: 프로세서 인터페이스 85: 컨텐츠 버퍼
87: 디코더 또는 정정 유닛 88: 인코더 유닛
90: 컨트롤 유닛 92: 시스템
94: 주변 저장 유닛 96: 입력 장치들
97: 출력 장치들 99: 네트워크 인터페이스
100: 전원 공급부

Claims (10)

  1. 메모리 모듈로부터의 복수의 버스트들의 각 버스트로부터 버스트 특정 컨텐츠(burst-specific content)를 수신하는 단계;
    상기 복수의 버스트들의 각 버스트로부터의 상기 버스트 특정 컨텐츠를 저장하는 단계; 그리고
    상기 복수의 버스트들 중 적어도 하나로부터 버스트 특정 데이터(burst-specific data)의 제 1 미리 결정된 수의 비트들에 있는 하나 이상의 에러를 정정하기 위해 SECDED(Single Error Correction Double Error Detection) 코드의 일부로서 수신된 모든 ECC(Error Corrrection Code) 비트들을 사용하는 단계를 포함하되,
    상기 버스트 특정 컨텐츠는 버스트 특정 ECC의 대응 비트들과 더불어 상기 버스트 특정 데이터의 상기 제 1 미리 결정된 수의 비트들을 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 SECDED 코드는 SECDED (128,120) 코드인 방법.
  3. 제 1 항에 있어서,
    상기 버스트 특정 ECC의 대응 비트들은 버스트 특정 ECC의 8 비트들을 포함하며, 상기 SECDED 코드의 일부로서 모든 수신된 ECC 비트들을 사용하는 단계는:
    상기 복수의 버스트들의 각 버스트에 대해, 상기 복수의 버스트들의 다른 모든 버스트들로부터 버스트 특정 데이터의 제 2 미리 결정된 수의 비트들을 선택하는 단계를 포함하고; 그리고
    상기 복수의 버스트들의 각 버스트들에 대해, 상기 버스트 특정 ECC의 8 비트들을 버스트 특정 데이터의 제 2 미리 결정된 수의 비트들 및 대응하는 버스트 특정 데이터의 제 1 미리 결정된 수의 비트들에 적용하는 단계를 포함하되,
    상기 제 1 미리 결정된 수의 비트들과 상기 제 2 미리 결정된 수의 비트들의 합은 적어도 120인 방법.
  4. 제 3 항에 있어서,
    상기 버스트 특정 데이터의 제 2 미리 결정된 수의 비트들의 버스트를 선택하는 단계는:
    상기 복수의 버스트들의 각 버스트에 대해, 상기 제 2 미리 결정된 수의 데이터 비트들을 생성하기 위해 상기 다른 버스트들 각각과 연관된 상기 버스트 특정 데이터로부터 동일한 수의 비트들을 선택하는 단계를 포함하는 방법.
  5. 제 1 항에 있어서,
    상기 복수의 버스트들은 8개의 버스트들인 방법.
  6. 제 1 항에 있어서,
    상기 제 1 미리 결정된 수의 비트들은 64개의 비트들인 방법.
  7. 제 1 항에 있어서,
    상기 메모리 모듈은 ECC 듀얼 인-라인 메모리 모듈(ECC-DIMM)인 방법.
  8. 제 1 항에 있어서,
    복수의 연속적인 메모리 액세스들을 통해 상기 메모리 모듈에 저장된 데이터 컨텐츠를 수신하는 단계;
    상기 데이터 컨텐츠를 액세스 특정 데이터(access-specific data)로 나누는 단계;
    각각의 액세스 특정 데이터에 대해, 상기 복수의 액세스 특정 데이터에 있는 다른 모든 액세스 특정 데이터로부터 추가적인 제 2 미리 결정된 수의 데이터 비트들을 선택하는 단계;
    각각의 메모리 액세스에 대해, 8 비트의 액세스 특정 ECC를 결정하기 위해 상기 액세스 특정 데이터 및 연관된 추가적인 제 2 미리 결정된 수의 데이터 비트들의 조합에 상기 SECDED 코드를 적용하는 단계; 그리고
    각각의 연속적인 메모리 액세스 동안, 상기 8 비트의 액세스 특정 ECC와 더불어 상기 액세스 특정 데이터를 상기 메모리 모듈에 저장하는 단계를 포함하되,
    상기 각각의 액세스 특정 데이터는 상기 제 1 미리 결정된 수의 비트들을 포함하고, 상기 제 1 미리 결정된 수의 비트들과 상기 제 2 미리 결정된 수의 비트들의 합은 적어도 120인 방법.
  9. 제 8 항에 있어서,
    상기 복수의 연속적인 메모리 액세스들은 8개의 액세스들인 방법.
  10. 제 8 항에 있어서,
    상기 추가적인 제 2 미리 결정된 수의 데이터 비트들을 선택하는 단계는:
    각각의 액세스 특정 데이터에 대해, 상기 추가적인 제 2 미리 결정된 수의 데이터 비트들을 생성하기 위해 상기 다른 액세스 특정 데이터들 각각으로부터 동일한 수의 비트들을 선택하는 단계를 포함하는 방법.
KR1020150127743A 2014-11-06 2015-09-09 메모리 데이터 에러 정정 방법 KR102190683B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201462076477P 2014-11-06 2014-11-06
US62/076,477 2014-11-06
US14/640,005 2015-03-05
US14/640,005 US9754684B2 (en) 2014-11-06 2015-03-05 Completely utilizing hamming distance for SECDED based ECC DIMMs

Publications (2)

Publication Number Publication Date
KR20160054395A true KR20160054395A (ko) 2016-05-16
KR102190683B1 KR102190683B1 (ko) 2020-12-14

Family

ID=55913060

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150127743A KR102190683B1 (ko) 2014-11-06 2015-09-09 메모리 데이터 에러 정정 방법

Country Status (2)

Country Link
US (1) US9754684B2 (ko)
KR (1) KR102190683B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11520513B2 (en) 2018-05-15 2022-12-06 Micron Technology, Inc. Code word format and structure
US11886338B2 (en) 2018-05-15 2024-01-30 Micron Technology, Inc. Forwarding code word address

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10162702B2 (en) * 2016-02-01 2018-12-25 Lattice Semiconductor Corporation Segmented error coding for block-based memory
EP3453022B1 (en) 2016-05-02 2022-07-06 INTEL Corporation Internal error checking and correction (ecc) with extra system bits
US10853163B2 (en) 2017-04-28 2020-12-01 Qualcomm Incorporated Optimized error-correcting code (ECC) for data protection
US10606690B2 (en) 2017-09-29 2020-03-31 Intel Corporation Memory controller error checking process using internal memory device codes
US10642683B2 (en) * 2017-10-11 2020-05-05 Hewlett Packard Enterprise Development Lp Inner and outer code generator for volatile memory
US10725841B1 (en) * 2017-12-18 2020-07-28 Xilinx, Inc. Method and apparatus for error detection and correction
US10606713B2 (en) 2018-01-03 2020-03-31 International Business Machines Corporation Using dual channel memory as single channel memory with command address recovery
US10546628B2 (en) * 2018-01-03 2020-01-28 International Business Machines Corporation Using dual channel memory as single channel memory with spares
CN114765056A (zh) 2021-01-14 2022-07-19 长鑫存储技术有限公司 存储系统
EP4050608B1 (en) 2021-01-14 2023-06-28 Changxin Memory Technologies, Inc. Comparator with xor and xnor logic circuits
US11599417B2 (en) 2021-01-14 2023-03-07 Changxin Memory Technologies, Inc. Error correction system
JP7343709B2 (ja) 2021-01-14 2023-09-12 チャンシン メモリー テクノロジーズ インコーポレイテッド 誤り訂正システム

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050022065A1 (en) * 2003-05-20 2005-01-27 Dixon R. Paul Apparatus and method for memory with bit swapping on the fly and testing
JP2017511950A (ja) * 2014-03-10 2017-04-27 日本テキサス・インスツルメンツ株式会社 Framメモリにおけるインプリント低減のための回路及び方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5978370A (en) * 1997-01-13 1999-11-02 At&Tcorp Circuit-switched switching system
US7949931B2 (en) 2007-01-02 2011-05-24 International Business Machines Corporation Systems and methods for error detection in a memory system
US8010875B2 (en) 2007-06-26 2011-08-30 International Business Machines Corporation Error correcting code with chip kill capability and power saving enhancement
US8041990B2 (en) 2007-06-28 2011-10-18 International Business Machines Corporation System and method for error correction and detection in a memory system
KR101466694B1 (ko) * 2007-08-28 2014-11-28 삼성전자주식회사 Ecc 회로, ecc 회로를 구비하는 메모리 시스템 및그의 오류 정정 방법
US8230305B2 (en) * 2009-04-02 2012-07-24 Micron Technology, Inc. Extended single-bit error correction and multiple-bit error detection
US8677211B2 (en) * 2010-12-23 2014-03-18 International Business Machines Corporation Data bus inversion using spare error correction bits
US20140063983A1 (en) 2012-09-06 2014-03-06 International Business Machines Corporation Error Detection And Correction In A Memory System
US10198314B2 (en) * 2013-05-23 2019-02-05 Rambus Inc. Memory device with in-system repair capability

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050022065A1 (en) * 2003-05-20 2005-01-27 Dixon R. Paul Apparatus and method for memory with bit swapping on the fly and testing
US20070067556A1 (en) * 2003-05-20 2007-03-22 Cray Inc. Apparatus and method for memory bit-swapping-within-address-range circuit
US20070101238A1 (en) * 2003-05-20 2007-05-03 Cray Inc. Apparatus and method for memory read-refresh, scrubbing and variable-rate refresh
JP2017511950A (ja) * 2014-03-10 2017-04-27 日本テキサス・インスツルメンツ株式会社 Framメモリにおけるインプリント低減のための回路及び方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11520513B2 (en) 2018-05-15 2022-12-06 Micron Technology, Inc. Code word format and structure
US11886338B2 (en) 2018-05-15 2024-01-30 Micron Technology, Inc. Forwarding code word address
US11907560B2 (en) 2018-05-15 2024-02-20 Micron Technology, Inc. Code word format and structure

Also Published As

Publication number Publication date
US20160134307A1 (en) 2016-05-12
KR102190683B1 (ko) 2020-12-14
US9754684B2 (en) 2017-09-05

Similar Documents

Publication Publication Date Title
KR102190683B1 (ko) 메모리 데이터 에러 정정 방법
US10459793B2 (en) Data reliability information in a non-volatile memory device
KR101684045B1 (ko) 로컬 에러 검출 및 글로벌 에러 정정
CN108351820B (zh) 在跨存储器链路传送纠正数据时保护ecc位置
US9183078B1 (en) Providing error checking and correcting (ECC) capability for memory
TWI703499B (zh) 資料儲存裝置及其共享控制器中記憶體的方法
US11409601B1 (en) Memory device protection
US11218165B2 (en) Memory-mapped two-dimensional error correction code for multi-bit error tolerance in DRAM
US20220391282A1 (en) Modified checksum using a poison data pattern
CN114816829A (zh) 分布ecc比特以为元数据分配ecc比特
US11775382B2 (en) Modified parity data using a poison data unit
US11237901B2 (en) Error correction using hierarchical decoders
KR20230121611A (ko) 시스템 메모리 신뢰성, 가용성 및 서비스 가능성(ras)을개선하기 위한 적응형 오류 정정
US11256565B2 (en) Transaction metadata
US20240053904A1 (en) Efficient security metadata encoding in error correcting code (ecc) memory without dedicated ecc bits
CN116954982A (zh) 数据写入方法以及处理系统
Chen Designing Low Cost Error Correction Schemes for Improving Memory Reliability

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant