[go: up one dir, main page]

KR20040064259A - 컴포넌트 실패를 검출 및 보정하고, 컴포넌트 실패 후에단일 비트 에러보정을 제공하는 에러검출/보정 코드 - Google Patents

컴포넌트 실패를 검출 및 보정하고, 컴포넌트 실패 후에단일 비트 에러보정을 제공하는 에러검출/보정 코드 Download PDF

Info

Publication number
KR20040064259A
KR20040064259A KR10-2004-7003075A KR20047003075A KR20040064259A KR 20040064259 A KR20040064259 A KR 20040064259A KR 20047003075 A KR20047003075 A KR 20047003075A KR 20040064259 A KR20040064259 A KR 20040064259A
Authority
KR
South Korea
Prior art keywords
bits
data block
column
bit
xor
Prior art date
Application number
KR10-2004-7003075A
Other languages
English (en)
Inventor
로버트 이 싸이퍼
Original Assignee
선 마이크로시스템즈 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 선 마이크로시스템즈 인코포레이티드 filed Critical 선 마이크로시스템즈 인코포레이티드
Publication of KR20040064259A publication Critical patent/KR20040064259A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • 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
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check

Landscapes

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

Abstract

메모리 컨트롤러는 체크비트 인코더(check bit encoder) 회로 및 체크/보정회로를 포함한다. 체크비트 인코더 회로는 복수의 메모리 장치를 포함하는 메모리에 기록되는 데이터 블럭을 수신하도록 연결되고, 인코드된 데이터 블럭을 생성하기 위해 복수의 체크비트로 데이터 블럭을 인코드 하도록 구성된다. 복수의 체크비트는 적어도 (i) 복수의 메모리 장치 중 하나의 실패의 검출과 보정 및 (ii) 복수의 메모리 장치 중 하나의 실패 검출 후에 인코드된 데이터 블럭에서의 단일 비트 에러의 검출 및 보정을 제공하도록 정의된다. 체크/보정회로는 메모리로부터 인코드된 데이터 블럭을 수신하도록 연결되고, 인코드된 데이터 블럭을 디코드하며, 인코드된 데이터 블럭상에서 적어도 (i)와 (ii)의 검출을 수행하도록 구성된다.

Description

컴포넌트 실패를 검출 및 보정하고, 컴포넌트 실패 후에 단일 비트 에러보정을 제공하는 에러검출/보정 코드{ERROR DETECTION/CORRECTION CODE WHICH DETECTS AND CORRECTS COMPONENT FAILURE AND WHICH PROVIDES SINGLE BIT ERROR CORRECTION SUBSEQUENT TO COMPONENT FAILURE}
에러 코드는, 전자 시스템에서 전송 에러 또는 저장 에러과 같은 데이터 에러를 검출하고 보정하는데 공통적으로 이용된다. 예를 들면, 에러 코드는 전송매체(즉, 전자 시스템, 네트워크 연결, 전화선, 라디오 전송장치 등에서의 칩사이의 도체 및/또는 전송장치)를 거쳐 전송된 데이터에서 에러를 검출하고 보정하는데 이용된다. 에러 코드는, 컴퓨터 시스템의 메모리에 저장된 데이터에 관련된 에러를 검출하고 보정하는데도 이용된다. 에러 코드의 하나의 공통된 이용은 컴퓨터 시스템의 데이터 버스상에서 전송된 데이터의 에러를 검출하고 보정하는 것이다. 그러한 시스템에서, 에러보정비트 또는 체크비트는 데이터의 이동 또는 저장 이전에 생성된다. 데이터가 수신되거나 복구되는 경우, 체크비트는 데이터내의 에러를 검출하고 보정하는데 사용된다.
컴포넌트 실패(component failures)는 전자 시스템에서 에러의 공통 소스이다. 결함 컴포넌트는 시스템의 장치 사이에서 제공된 결함 메모리 칩 또는 결함 데이터 경로를 포함한다. 결함 데이터 경로는 예를 들면, 결함 핀, 결함 데이터 트레이스(traces), 또는 결함 배선의 결과이다. 게다가, 다양한 메모리 칩을 포함하는 메모리 모듈은 실패할 수 있다. 데이터 경로는 작동하는 회로 또한 실패할 수 있다.
전자 시스템에서 에러의 또 다른 소스는 "소프트(soft)" 또는 "일시적인 에러"로 불린다. 일시적인 메모리 에러는 메모리 회로 자체에서의 결함이라기 보다, 사건의 발생에 의해 생긴 에러이다. 일시적인 메모리 에러는 예를 들면, 메모리 회로에 충돌하는 랜덤 알파 입자에 기인하여 발생된다. 일시적인 통신 에러는 데이터 경로상의 노이즈, 클럭 드리프트 등에 기인한 데이터의 부정확한 샘플링에 기인하여 발생된다. 반면에, "하드(hard)" 또는 "연속" 에러는 컴포넌트 실패에 기인하여 발생된다.
일반적으로, 다양한 에러검출코드(EDC) 및 에러보정코드(ECC) 방식은, 메모리 및/또는 통신 에러를 검출하고 보정하는데 이용된다. 예를 들면, 패리티(parity)가 사용된다. 패리티로서, 데이터 비트의 2진 비트의 갯수가 기수인지 우수인지를 나타내는, 단일 패리티 비트는 데이터 비트의 주어진 셋트에저장/전송된다. 패리티는 데이터 비트의 셋트가 저장/전송되면 생성되고, 데이터 비트의 셋트가 액세스/수신되면 체크된다. 패리티가 데이터 비트의 액세스된 셋트와 정합되지 않으면, 에러가 검출된다.
다른 EDC/ECC 방식은 데이터 비트의 셋트마다 몇개의 체크비트를 할당한다. 체크비트는 대응하는데이터 비트의 다양한 오버랩핑(overlapping) 조합으로 인코드된다. 인코딩은 비트 에러 또는 에러가 검출되게 선택되고, 몇몇의 경우 인코딩은 에러가 보정될 수 있도록 비트 또는 에러의 비트가 동일시 되게 선택된다 (에러의 비트 갯수와 사용되는 ECC 방식에 따라) 선택된다. 일반적으로, 검출 및/또는 보정될 수 있는 비트 에러의 갯수가 증가하면, 이 방식에서 사용된 체크비트의 갯수 또한 증가한다.
본 발명은 메모리 시스템과 통신 시스템에서 에러 체킹(error checking) 및 보정의 분야에 관한 것이다.
다음의 상세한 설명은, 여기서 간단히 설명되는 첨부된 도면들을 참조하여 설명된다.
도 1은 메모리와 연결된 메모리 컨트롤러의 일실시예의 블럭도이다.
도 2는 메모리 장치와 메모리 모듈에서 비트의 스토리지를 나타내는, 코드 워드의 일실시예를 형성하는 데이터 비트의 논리적인 어레이를 나타내는 블럭도이다.
도 3은 도 2의 컬럼에서 한쌍의 비트와 그 투입을 나타내는 블럭도이다.
도 4는 코드 워드와 코드 워드의 컬럼을 리맵핑(remapping)하는 일실시예를 나타내고 블럭도이다.
도 5는 도 4에 도시된 실시예에 따른 실패한 메모리 장치의 검출 후에 코드 워드를 리맵핑하는 메모리 컨트롤러의 일실시예의 동작을 나타내는 플로우차트이다.
도 6은 코드 워드와 코드 워드에서 컬럼을 리맵핑하는 제2 실시예를 나타내고 블럭도이다.
도 7은 도 6에 도시된 실시예에 따른 실패한 메모리 장치의 검출 후에 코드 워드를 리맵핑하는 메모리 컨트롤러의 제2 실시예의 동작을 나타내는 플로우차트이다.
도 8은 체크비트를 포함하는, 코드 워드의 일실시예를 나타내는 블럭도이다.
도 9는 체크비트를 포함하는, 코드 워드의 제2 실시예를 나타내는 블럭도이다.
도 10은 다양한 메모리 장치에서 비트에 대한 내부 체크비트의 할당의 일실시예를 나타내는 테이블이다.
도 11은 도 1에 도시된 체크비트 인코더 회로의 일실시예의 블럭도이다.
도 12는 도 11에 도시된 체크비트 인코더 회로의 일실시예에서 사용되는 특정 함수들을 나타내는 도면이다.
도 13은 도 1에 도시된 ECC 회로의 일실시예의 블럭도이다.
도 14는 도 13에 도시된 삭제 보정회로의 일실시예를 나타내는 블럭도이다.
도 15는 도 13에 도시된 단일 에러 식별/보정회로의 일실시예의 블럭도이다.
도 16은 도 13에 도시된 단일 에러 에일리어스(alias) 및 재배치 회로의 일실시예의 블럭도이다.
도 17은 도 13에 도시된 실패한 DRAM 식별회로의 일실시예의 블럭도이다.
도 18은 도 13에 도시된 실패한 DIMM 식별회로의 일실시예의 블럭도이다.
도 19는 통신 시스템의 일실시예의 블럭도이다.
도 20은 슬라이스내의 도체상에서 비트의 전송을 나타내는, 코드 워드의 일실시예를 형성하는데이터 비트의 논리적인 어레이를 나타내는 블럭도이다.
본 발명은 다양한 수정과 변형이 가능하고, 구체적인 실시예가 도면에서 예로서 도시되어, 여기서 상세히 설명될 것이다. 그러나, 도면과 상세한 설명에 의해 본 발명이 특정 형태로 제한되는 것은 아니고, 첨부된 청구항에 의해 정의된 바와 같이 본 발명의 정신 및 범위내에서 모든 수정, 등가물 및 변형이 포함되어야 한다.
일실시예에 있어서, 메모리 컨트롤러는 체크비트 인코더 회로 및 체크/보정회로를 포함한다. 체크비트 인코더 회로는 복수의 메모리 장치를 포함하는 메모리에 기록되는 데이터 블럭을 수신하도록 연결되고, 인코드된 데이터 블럭을 생성하기 위해 복수의 체크비트를 가지고 데이터 블럭을 인코드하도록 구성된다. 복수의 체크비트는 적어도 (i) 복수의 메모리 장치 중 하나의 실패의 검출과 보정 및 (ii) 복수의 메모리 장치 중 하나의 실패 검출 후에 인코드된 데이터 블럭에서 단일 비트 에러의 검출 및 보정을 제공하도록 정의된다. 메모리 컨트롤러는 인코드된 데이터 블럭을 메모리에 기록하도록 구성된다. 체크/보정회로는 메모리로부터 인코드된 데이터 블럭을 수신하도록 연결되고, 인코드된 데이터 블럭을 디코드하며 인코드된 데이터 블럭상에서 적어도 (i) 및 (ii)의 검출을 수행하도록 구성된다. 또한, 체크비트로 데이터 블럭을 인코딩하고 메모리에 데이터 블럭을 기록하는 방법도 고려된다.
또 다른 실시예에 있어서, 메모리 컨트롤러는 체크비트 인코더 회로 및 체크/보정회로를 포함한다. 체크비트 인코더 회로는 복수의 메모리 장치를 포함하는 메모리에 기록되는 데이터 블럭을 수신하도록 연결되고, 인코드된 데이터 블럭을 생성하기 위해 복수의 체크비트를 가지고 데이터 블럭을 인코드하도록 구성된다. 복수의 체크비트는 적어도 (i) 복수의 메모리 장치 중 하나의 실패의 검출과 보정 및 (ii) 복수의 메모리 장치 중 하나의 실패 검출 후에 인코드된 데이터 블럭에 더블(double) 비트 에러의 검출 및 보정을 제공하도록 정의된다. 메모리 컨트롤러는 인코드된 데이터 블럭을 메모리에 기록하도록 구성된다. 체크/보정회로는 메모리로부터 인코드된 데이터 블럭을 수신하도록 연결되고, 인코드된 데이터 블럭을 디코드하며 인코드된 데이터 블럭상에서 적어도 (i) 및 (ii)의 검출을 수행하도록 구성된다. 본 실시예에서 인코드된 데이터 블럭은 비트들의 로들(0에서 R-1) 및 컬럼들(0에서 C-1)의 어레이로서 논리적으로 배열된다. 각각의 컬럼은 복수의 메모리 장치 중 다른 하나에 저장된 비트를 포함한다. 복수의 체크비트는 복수의 보조 체크비트와 복수의 내부 체크비트를 포함한다. 복수의 보조 체크비트는 어레이의 제1 컬럼에 저장되고, 복수의 보조 체크비트의 각각은 어레이의 로(row)에 있고 어레이의 다른 컬럼들에서 비트를 커버한다. 복수의 내부 체크비트의 각각은 복수의 보조 체크비트를 제외하고 인코드된 데이터 블럭의 선택된 비트들을 커버하고, 복수의 보조 체크비트를 제외한 어레이의 각 비트는 그 비트를 커버하는 복수의 내부 체크비트 중 하나 이상의 관련된 할당을 가진다. 할당은 다음을 만족하도록 선택되고, 이때 syn(rx, cy)은 어레이의 로 x, 컬럼 y의 비트와 관련된 내부 체크비트 신드롬(또는 보다 간단히, 내부 신드롬, 즉 내부 체크비트에 대한 신드롬)이고, XOR은 비트 단위의 배타적인 OR이며:
R1은 비어있는 셋트가 아닌 어레이의 로들 R1의 어떤 셋트에 대해서, 그리고 c1은 c2와 같지 않은 어레이의 컬럼 c1와 c2의 어떤 셋트에 대해서, r은 R의 요소이고 c는 (c1, c2)의 요소인 각 위치(r, c)상에서 신드롬의 XOR은 0이 아니고;
2개의 구별된 로들 r1과 r2의 어떤 셋트와 3개의 구별된 컬럼들 c1, c2, c3의 어떤 셋트에 대해서, syn(r1, c1) XOR syn(r2, c2) XOR syn(r1, c3) XOR syn(r2, c3)은 0이 아니다.
또 다른 실시예에 있어서, 통신 시스템은 체크비트 인코더와 체크/보정회로를 포함한다. 복수의 경로를 포함하는 전송매체를 거쳐 전송되는 데이터 블럭을 수신하도록 연결되는, 체크비트 인코더 회로는 인코드된 데이터 블럭을 생성하기 위해 복수의 체크비트를 가지고 데이터 블럭을 인코드하도록 구성된다. 복수의 체크비트는 적어도 (i) 복수의 경로 중 하나의 실패의 검출과 보정 및 (ii) 복수의 경로 중 하나의 실패 검출 후에 인코드된 데이터 블럭에서 단일 비트 에러의 검출 및 보정을 제공하도록 정의된다. 전송매체로부터 인코드된 데이터 블럭을 수신하도록 연결되는, 체크/보정회로는 인코드된 데이터 블럭을 디코드하며, 인코드된 데이터 블럭상에서 적어도 (i)와 (ii)의 검출을 수행하도록 구성된다.
또 다른 실시예에 있어서, 통신 시스템은 복수의 경로를 포함하는 전송매체를 거쳐 전송되는 데이터 블럭을 수신하도록 연결되는 체크비트 인코더를 포함한다. 체크비트 인코더 회로는 인코드된 데이터 블럭을 생성하기 위해 복수의 체크비트를 가지고 데이터 블럭을 인코드하도록 구성되며, 복수의 체크비트는 적어도 (i)복수의 경로 중 하나의 실패의 검출과 보정 및 (ii) 복수의 경로 중 하나의 실패 검출 후에 인코드된 데이터 블럭에 더블 비트 에러의 검출을 제공하도록 정의된다.
통신 시스템은 전송매체로부터 인코드된 데이터 블럭을 수신하도록 연결되고, 인코드된 데이터 블럭을 디코드하며 인코드된 데이터 블럭상에서 적어도 (i) 및 (ii)의 검출을 수행하도록 구성된 체크/보정회로를 더 포함한다. 인코드된 데이터 블럭은 비트들의 로들(0에서 R-1) 및 컬럼들(0에서 C-1)의 어레이로서 논리적으로 배열되고, 각각의 컬럼은 복수의 경로 중 다른 하나를 거쳐 전송되는 비트를 포함한다. 복수의 체크비트는 복수의 보조 체크비트와 복수의 내부 체크비트를 포함한다. 복수의 보조 체크비트는 어레이의 제1 컬럼에 있고, 복수의 보조 체크비트의 각각은 어레이의 로에 있고 어레이의 다른 컬럼들에서 비트를 커버한다. 복수의 내부 체크비트의 각각은 복수의 보조 체크비트를 제외하고 인코드된 데이터 블럭의 선택된 비트를 커버하고, 복수의 보조 체크비트를 제외한 어레이의 각 비트는 그 비트를 커버하는 복수의 내부 체크비트 중 하나 이상의 관련된 할당을 가진다. 할당은 다음을 만족하도록 선택되고, 이때 syn(rx, cy)은 어레이의 로 x, 컬럼 y의 비트와 관련된 내부 체크비트 신드롬이고, XOR은 비트 단위의 배타적인 OR이며:
R1은 비어있는 셋트가 아닌 어레이의 로 R1의 어떤 셋트에 대해서, 그리고 c1은 c2와 같지 않은 어레이의 컬럼 c1와 c2의 어떤 셋트에 대해서, r은 R의 요소이고c는 (c1, c2)의 요소인 각 위치(r, c)상에서 신드롬의 XOR은 0이 아니고;
2개의 다른 로 r1과 r2의 어떤 셋트와 3개의 다른 컬럼 c1, c2, c3의 어떤 셋트에 대해서, syn(r1, c1) XOR syn(r2, c2) XOR syn(r1, c3) XOR syn(r2, c3)은 0이 아니다.
[실시예의 상세한 설명]
다음에 도 1을 참조하여, 메모리 뱅크(14)를 포함하는 복수의 메모리 뱅크를 포함하는 메모리 컨트롤러(10)와 메모리(12)의 일실시예의 블럭도가 도시되었다. 다른 실시예가 가능하며, 고려된다. 각 메모리 뱅크는 복수의 메모리 모듈(즉, 도 1에 도시된 것과 같은 메모리 뱅크(14)의 MM_0에서 MM_P)를 포함한다. 각 메모리 모듈은 복수의 메모리 장치(즉, 도 1에서 MM_O의 MD_0에서 MD_N, MM_1의 MD_N+1에서 MD_M 및 MM_P의 MD_O에서 MD_Q)를 포함한다. 메모리 컨트롤러(10)는 메모리(12)와 연결된다. 도시된 실시예에 있어서, 메모리 컨트롤러(10)는 체크비트 인코더 회로(16), 에러 체크/보정(ECC)회로(18), 연속상태 스토리지(20), 데이터 리맵핑(remap) 제어회로(22) 및 멀티플렉서(mux)(24)를 포함한다. 체크비트 인코더 회로(16)는 멀티플렉서(24)로부터 데이터를 수신하고, 스토리지를 위해 메모리(12)로 인코드된 데이터(인코드된 데이터 입력)를 제공하도록 연속상태 스토리지(20)와 연결된다. ECC 회로(18)는 메모리(12)로부터 대응되는 데이터(데이터 출력)를 멀티플렉서(24)에 제공하기 위해 판독된 인코드된 데이터(인코드된 데이터 출력)를 수신하고, 메모리 컨트롤러(10)에서 출력하도록 연결된다. ECC(18)는 연속상태 스토리지(20)에 연결되어 MD 실패신호를 데이터 리맵 제어회로(22)에 제공한다. 데이터 리맵 제어회로(22)는 연속상태 스토리지(20)와 멀티플렉서(24)에 연결된다.
메모리 컨트롤러(10)는 다양한 소스(즉, 메모리 컨트롤러(10)를 포함하는 컴퓨터 시스템의 프로세서 및/또는 주변 장치)로부터의 판독 및 기록 요구를 수신하기 위해 연결된다. 메모리 컨트롤러(10)는 판독 및 기록 요구를 수신하기 위해 어떤 인터페이스(즉, 버스 인터페이스, 패킷 인터페이스 등)를 가진다. 하나의 특정 실시예에 있어서, 메모리 컨트롤러(10)는 입력과 출력, 어드레스를 이동을 위한, 단일 방향의 소스 동기화 인터페이스 및 요구를 포함하는데이터 패킷을 지원한다.
메모리 컨트롤러(10)는 복수의 체크비트로 메모리에 기록되는 데이터를 인코드하도록 구성되고, 따라서 메모리에 저장되는 인코드된 데이터를 생성한다. 일반적으로, 인코드된 데이터는 메모리 컨트롤러에 공급되는 데이터 및 체크비트를 포함하고, 메모리(12)의 다양한 메모리 장치의 스토리지에서 예정된 형식으로 배열된다. 주어진 기록을 위해 공급된 데이터는 일실시예에 있어서, 메모리 뱅크(14) 중 하나에 저장된다. 추가적으로, 인코드된 데이터가 메모리(12)로부터 판독되면, EEC 회로(18)는 데이터의 특정 에러를 검출하고, 몇몇의 경우, 에러를 보정하기 위해 인코드된 데이터를 디코드하도록 구성된다. 보정된 데이터는 메모리 컨트롤러(10)의 출력으로 공급되고, 멀티플렉서(24)의 입력으로 공급된다.
메모리 컨트롤러(10)에 의해 메모리(12)에 기록된 데이터는 메모리컨트롤러(10)에 의해 수신된 기록 요구로부터의 데이터를 포함하거나(도 1에서 "데이터 입력(data in)") 에러가 검출된 메모리(12)로부터 판독된 데이터를 포함한다. 메모리(14)로부터 판독된 데이터의 일시적인 에러(즉, 단일 비트 에러)에 대해, 보정된 데이터가 메모리(12)에 다시 기록된다. 다른 경우에서(즉, 메모리 장치 실패), 데이터 리맵 제어회로(22)는 실패한 메모리 장치에 저장된 비트를 가지는 각 인코드된 데이터 블럭을 판독하여, 메모리에 재기록하고, 실패한 메모리 장치에 서 비트 저장을 회피하기 위해 리맵된다. 다른 에러의 경우, 데이터 리맵 제어회로(22)는 멀티플렉서(24)를 통해 EEC 회로(18)로부터 체크비트 인코더 회로(16)에 제공되는 데이터를 선택한다. 에러가 없는 경우, 메모리 컨트롤러에 대한 데이터 입력은 멀티플렉서(24)를 통해 선택된다.
메모리 컨트롤러(10)는 체크비트의 인코딩을 통해 다양한 에러를 검출하기 위해(몇몇의 경우 보정하기 위해) 구성된다. 에러는 일시적인(즉, "소프트") 에러(단일 비트 에러과 같은) 또는 연속(즉, "하드") 에러(메모리 장치 또는 메모리 모듈의 실패와 같은)가 있다. 예를 들면, 일실시예에 있어서, 체크비트는 메모리 장치의 실패 검출 및 보정을 위해 제공한다. 보정은 체크비트를 사용하여 실패한 메모리 장치에 저장된 데이터와 다른 메모리 장치로부터의 데이터를 재구성하는 것을 포함한다. 보정은 또한 실패한 메모리 장치가 인코드된 데이터 블럭의 비트를 저장하는데 더 이상 사용되지 않도록 실패한 메모리 장치 "매핑 아웃(mapping out)"을 포함한다. 실패 검출 이후, 체크비트 인코딩은 단일 비트 에러검출 및 보정에 계속 제공된다. 실패한 메모리 장치는 데이터 리맵 제어회로(22)에 의해 매핑되며, 실패한 메모리 장치에 저장된 비트를 가지는 인코드된 데이터 블럭을 판독하여 데이터를 리맵핑시키고(체크비트 인코더 회로(16)를 통해), 실패한 메모리 장치는 인코드된 데이터 블럭의 어떠한 비트도 저장하는데 사용되지 않는다. 데이터가 리맵핑되면, 체크비트 인코딩이 단일 비트 에러검출 및 보정뿐만 아니라 더블 비트 에러검출에도 제공된다. 또 다른 실시예에 있어서, 데이터가 리맵핑되면, 체크비트 인코딩은 또 다른 메모리 장치의 실패 검출 및 보정뿐만 아니라 더블 비트 에러검출도 제공한다. 또 다른 실시예에 있어서, 체크비트 인코딩은 실패한 메모리 모듈의 검출 및 개연성 보정(실패한 메모리 장치의 검출 및 보정 후에도)뿐만 아니라 실패한 메모리 장치의 검출 및 보정도 제공한다. 단일 비트 에러검출 및 보정은 메모리 장치 및/또는 메모리 모듈의 실패 이후 제공된다. 더블 비트 에러검출은 실패한 메모리 장치로부터 데이터의 리맵핑 이후 제공된다. 개연성 보정은 일정한 가능성으로 에러를 보정할 수 있는 보정 메커니즘을 나타내지만, 보정될 수 없는 적어도 몇가지 에러가 있다. 하나의 실행의 구체적인 예뿐만 아니라, 상기 특징을 제공하는 체크비트를 정의하는 방법의 일실시예의 더 상세한 설명이 아래에서 제공된다.
연속상태 스토리지(20)는 메모리 컨트롤러(10)에 의해 검출되는 연속 실패를 에 대한 상태 정보를 기록하도록 구성된다. 예를 들면, 상술한 몇가지 실시예에서, 연속상태는 실패한 메모리 장치의 표시(도 1에서의 실패한 MD), 실패한 메모리 모듈의 표시(도 1에서의 실패한 MM) 및 실패한 메모리 장치의 검출에 응답하여 리맵핑된 데이터의 양을 나타내는 리페어 카운트를 포함한다. 연속상태 스토리지(20)는 모든 형태의 연속 스토리지(즉, 레지스터들, 메모리 어레이 등)로부터 형성된다.
기록 요구는 메모리에 기록되는 예정된 데이터의 양까지 공급되고, 비슷하게 판독 요구는 메모리로부터 예정된 데이터의 양까지 이동된다. 예를 들면, 일실시예에 있어서, 판독 또는 기록 요구가 데이터의 캐쉬 라인(cache line)을 공급한다. 캐쉬 라인은 특정 크기(즉, 32 바이트, 64 바이트, 128 바이트 등)이다. 하나의 특정 실로에서, 캐쉬 라인은 64 바이트의 데이터(512비트)를 포함한다. 기록 요구를 거쳐 공급된 데이터는 메타데이터(metadata) 비트(즉, 하나의 실로에서 24 비트)을 더 포함한다. 일반적으로, 메타데이터 비트는 대응하는 캐쉬 라인의 다양한 특징(즉, 데이터의 형태, 코히런시(coherency) 정보 등)을 설명하는데 사용된다. 데이터의 생산자 및 소비자에 의해 이용되는 메타데이터(즉, 프로세서)는 모든 메타데이터로 인코드 된다.
캐쉬 라인은 하나 이상의 데이터 블럭으로 분할된다. 체크비트는 주어진 캐쉬 라인에 대응하는 다른 데이터 블럭과 독립적으로 각 데이터 블럭에 생성된다. 하나의 실행에 있어서, 2개의 데이터 블럭이 정의되고, 각각 데이터의 1/2(즉, 256 비트) 및 메타데이터의 1/2(즉, 12 비트)을 가진다. 각 데이터 블럭에 대응하는 인코드된 데이터 블럭(데이터 비트, 메타데이터 비트 및 예정된 형식에서 배열되는 체크비트를 포함하는)은 여기서 코드 워드로서 불린다. 각 코드 워드는 메모리(12)의 메모리 뱅크(14)에 저장된다. 특히, 코드 워드의 일부는 메모리 뱅크(14) 내의 각 메모리 장치에 저장된다.
여기서 사용되는 것과 같이, 메모리 장치는 그것에 저장된 데이터를 기록하고 판독하는 메모리 장치를 액세스하기 위한 핀을 가지는 단일 장치 패키지로 패키지된 모든 메모리를 포함한다. 예를 들면, 메모리 장치는 모든 형태(즉, 비동기 DRAM, 동기 DRAM(SDRAM), RAMBUS DRAM(RDRAM), 더블 데이터율 SDRAM(DDR SDRAM) 등)의 다이나믹 랜덤 액세스 메모리(DRAM)를 포함한다. 메모리 장치는 또한 스태틱 RAM(SRAM), 플래쉬 메모리 등을 포함한다. 메모리 장치는 일시적인 또는 연속 에러를 겪는 모든 메모리를 포함한다. 몇가지 실시예에서, 메모리 장치는 단일 칩이다. 메모리 모듈은 2개 이상의 메모리 장치가 고착된 회로 기판이다. 예를 들면, 메모리 모듈은 듀얼 인라인 메모리 모듈(DIMM), 단일 인라인 메모리 모듈(SIMM)및 다른 형태의 메모리 모듈을 포함한다. 하나의 특정 실시예에 있어서, 메모리 모듈은 하나의 메모리 뱅크(14)의 일부인 2개 이상의 메모리 장치와 다른 메모리 뱅크에 포함되는 2개 이상의 메모리 장치를 포함한다.
여기서 사용되는 것과 같이, 체크비트는 데이터 비트에서 에러검출을 제공하는 2개 이상의 데이터 비트로부터 생성되는 비트를 나타낸다(추가적으로, 전체의, 에러보정으로서 체크비트의 인코딩에 따른). 데이터 비트가 체크비트의 생성에 이용되면 체크비트는 주어진 데이터 비트를 "커버하는(covering)" 것을 나타낸다(따라서, 체크비트는 데이터 비트의 에러검출/보정을 돕는다). 예를 들면, 체크비트는 2개 이상의 데이터 비트의 배타적 OR(XOR) 또는 배타적 NOR(XNOR)에 의해 2개 이상의 데이터 비트로부터 생성된다.
다양한 버퍼 및/또는 큐(queues)(나타나지 않음)가 데이터를 버퍼링하는데 바람직한 메모리 컨트롤러(10)에 포함될 수 있는 것에 주의한다. 더욱이, 도 1에서 도시되지 않았던, 메모리(12)에 대한 판독 및 기록 요구(실패한 메모리 장치에 응답하여 데이터의 리맵핑 동안에 생성되는 판독 및 기록 요구를 포함)는 일반적으로 판독되거나 또는 기록되는 뱅크의 각 메모리 장치내의 메모리 위치를 선택하는 어드레스, 메모리(메모리 뱅크 선택을 포함)에 대한 액세스를 제어하는 제어라인 등을 포함한다. 인코드된 데이터 블럭을 기록하는 수단은 메모리에 대한 어드레스, 제어 및 데이터 라인을 작동시키기 위한 회로를 포함한다.
도 2는 코드 워드의 일실시예의 블럭도이다. 다른 실시예가 가능하며, 고려된다. 도 2는 로와 컬럼의 어레이로 논리적으로 배열되는 코드 워드를 나타낸다. 각각의 컬럼은 메모리 장치 중 하나에 저장된 비트를 포함한다. 따라서, 로의 갯수는 각 메모리 장치에 의해 공급된 코드 워드의 비트 갯수와 동일하다. 예를 들면, 컬럼 0(c0)은 메모리 장치 0(MD_0)에 저장된 코드 워드의 비트이고, 컬럼 1(c1)은 메모리 장치 1(MD_1)에 저장된 코드 워드의 비트 등이다. 몇가지 실시예(즉, 메모리 모듈 실패를 검출하는 실시예)에서, 동일한 메모리 모듈 상의 메모리 장치에 대응하는 컬럼은 어레이의 연속적인 컬럼(즉, MD_0에서 MD_N에 대응하는 컬럼 c0에서 cN이 메모리 모듈 MM_0상에 저장된 컬럼 등이다)에 위치된다. 짙은 수직 대쉬 라인은 다양한 메모리 모듈에 대응하는 컬럼의 한계를 정한다.
체크비트를 정의하는 방법 - 단일 비트 에러보정 이후 더블 비트 에러검출 및 메모리 장치 실패 보정
도 2에 도시된 코드 워드에 의거한 다양한 에러검출/보정 특징을 제공하는 체크비트 인코딩을 정의하는 방법의 일실시예가 다음에 설명될 것이다. 본 실시예에 있어서, 체크비트는 보조 체크비트의 셋트와 내부 체크비트의 셋트를 포함한다. 보조 체크비트는 코드 워드의 선택된 컬럼(즉, 어떠한 컬럼이 선택되어도 컬럼 0)에 저장된다. 하나의 실로에서, 보조 체크비트는 로 체크비트이다. 각가의 로 체크비트는 코드 워드의 서로이 컬럼과 로 체크비트와 동일한 로에 있는 비트를 커버한다(즉, 로 r0의 로 체크비트는 서로의 컬럼과 로 r0에 있는 비트를 커버한다). 또 다른 실로에서, 보조 체크비트는 다른 비트의 회전 XOR을 포함한다. 외부의 체크비트를 포함하는 실시예(아래에서 설명)에서, 외부 체크비트는 보조 체크비트 생성으로부터 제외된다.
에러를 검출하기 위한 코드 워드의 디코딩은 보조 신드롬의 대응하는 비트를 생성하기 위해 각각의 로에서 비트를 XOR하는 것을 포함한다. 보조 신드롬이 0이 아니면, 에러가 발생된다. 디코딩은 데이터의 다른 조작과 실패가 무엇인지를 결정하는 보조 신드롬(및 내부 체크비트상의 내부 신드롬)을 더 포함하고, 몇몇의 경우, 보정이 수행된다. 다양한 데이터 비트를 커버하는 내부 체크비트의 할당은 내부 신드롬을 생성하기 위해 논리적인 어레이의 주어진 위치에 에러를 일으키고, 데이터 비트에 대한 체크비트의 적절한 할당에 의해, 다양한 에러검출 및 보정 특징이 실현된다.
일반적으로, 보조 체크비트는 메모리 장치의 실패를 식별하고, 실패한 메모리 장치에 저장된 데이터 비트를 재구성하는데 사용된다. 예를 들면, 로 체크비트는 동일한 로에서 상호 비트의 XOR이고, 따라서 로에 주어진 비트가 변화되는 것을 검출한다(즉, 그 비트를 저장하는 메모리 장치의 실패에 기인하여). 로에서의 다른비트와 로 체크비트를 XOR함에 의해, 변화된 비트가 재구성된다. 메모리 장치의 실패는 적어도 하나의 로로서 실패를 나타낸다. 즉, 로 체크비트는 논리적인 어레이의 로가 에러를 포함하지만, 컬럼에는 에러가 없는 것을 식별한다. 내부 체크비트는 특정한 메모리 장치(코드 워드 어레이의 컬럼)가 실패된 것을 식별하는 다양한 데이터 비트를 커버하도록 할당된다(따라서 실패한 메모리 장치로부터 데이터의 재구성을 허용하고 실패한 메모리 장치를 제외한 코드 워드를 리맵핑한다). 이 설명의 나머지에서, "실패한 메모리 장치" 또는 "실패한 DRAM" 및 "실패한 컬럼"이 사용된다. 실패한 컬럼은 실패한 메모리 장치 또는 실패한 DRAM에 대응하는 어레이의 컬럼이다.
일실시예에 있어서, 실패한 메모리 장치를 식별하기 위해, 내부 체크비트에 의해 커버된 데이터 비트가 다음의 규칙(이하, "규칙 1"이라 한다)을 만족하도록 할당된다: 논리 어레이의 로 R1의 모든 셋트에 대해서, R1은 비어있는 셋트가 아니고, 논리 어레이의 컬럼 c1과 c2의 모든 셋트에 대해서, c1은 c2와 같지 않고, r은 R의 요소이고 c는 (c1, c2)의 요소인 각 위치(r, c)에 대응하는 내부 신드롬의 비트 단위의 XOR은 0이 아니다. 규칙 1이 만족되면, 주어진 컬럼 실패에 대응하는 내부 신드롬은 로 실패의 주어진 셋트와 다르다. 따라서, 컬럼은 컬럼이 실패되는 것을 검출하기 위해 보조 신드롬으로 각 컬럼을 검사함으로써 식별된다.
주어진 메모리 장치(컬럼)가 실패된 것을 식별한 후에, 나머지 컬럼(로 체크비트 컬럼을 포함)은 실패한 컬럼을 재구성하는데 사용된다. 나머지 컬럼 중 하나가 단일 비트 에러를 가지면, 단일 비트 에러는 실패한 컬럼으로 투입된다. 도 3은 투입을 나타내는데 사용된다. c3으로 레이블된 컬럼이 실패되고, 비트(r1, c1)가 에러라면, 비트(r1, c3)의 재구성도 에러이다((r1, c1)이 (r1, c3)을 재구성하는데 사용되기 때문이다). syn(r1, c1) XOR syn(r1, c3)이 0이 아니라면, 2개의 에러가 검출된다(syn(rx, cy)가 (rx, cy)에서 에러로 계산되는 내부 신드롬이다). 추가적으로, 다른 비트(r2, c2)와 실패한 컬럼(r2, c3)으로의 투입에 대해서, syn(r2, c2) XOR syn(r2, c3)가 syn(r1, c1) XOR syn(r1, c3)와 같지 않으면, 에러는 재구성하는 동안에 생성될 수 있는 가능한 에러 중에서 유일하게 검출 가능하다(따라서 보정 가능하다). (r1, c1)이 (r2, c2)과 같지 않고 c3이 c1과 같지 않은 모든 로 r1과 r2의 각각의 조합과 모든 컬럼 c1, c2, c3의 각각의 조합인 상기 2가지 조건이 고정되면, 내부 체크비트는 단일 비트 에러검출 및 보정에 제공된다. 규칙 2라 불리는, 데이터 비트에 대한 내부 체크비트의 할당의 규칙은 모든 로 r1과 r2의 각각의 조합과 모든 컬럼 c1, c2, c3에 대해서 (r1, c1)이 (r2, c2)과 같지 않고 c3이 c1과 같지 않으며; syn(r2, c2) XOR syn(r2, c3)가 syn(r1, c1) XOR syn(r1, c3)은 0이 아니다.
메모리 장치 실패 이전에 더블 비트 에러검출을 제공하기 위해, 2개 비트가 실패가 일으키는 메모리 장치 실패를 위한 내부 신드롬(즉, 컬럼 c3에서의 실패를 위한 (r1, c3) 및 (r2, c3))은 더블 비트 실패로 내부 신드롬(즉, (r2, c2) 및 (r1,c1))과 다르다. 또 다른 방식으로 진술되어, 규칙 3으로 불리는, 모든 로 r1, r2및 컬럼 c1, c2, c3에 대해서, c1은 c2와 같지 않고; syn(r2, c2) XOR syn(r2, c3) XOR syn(r1, c1) XOR syn(r1, c3)은 0이 아니다.
규칙 3은 규칙 2에 의해 커버되고, 따라서 무시된다. 더욱이, c1과 c2가 같고 c3와 같지 않은 경우와, r1과 r2가 규칙 1에 의해 동일한 경우, 규칙 2는 커버된다. 따라서, 규칙 1과 규칙 4의 조합은 내부 체크비트 할당을 정의하는데 사용되고, 규칙 4는: 2개의 다른 로 r1와 r2의 모든 셋트와 3개의 다른 컬럼 c1, c2, c3의 모든 셋트에 대해서; syn(r2, c2) XOR syn(r2, c3) XOR syn(r1, c1) XOR syn(r1, c3)은 0이 아니다.
내부 체크비트 할당의 다양성은 규칙 1 및 4와 충족하고, 이들 규칙을 충족하는 방법의 일실시예가 다음에서 설명될 것이다. GF(2) 행렬에서 모든 순환 PxP이 계수 P-1을 가지는 소수 P에서, 코드 워드 어레이의 로의 갯수는 P보다 작다: (i) 한쌍의 키 Kj와 Ki가 존재하지 않고 KjXOR Ki는 모든 1 벡터에서 같도록, C(C는 컬럼의 갯수)개의 다른 P-비트 2진 벡터 K0에서 Kc-1(Ki가 컬럼 ci에서의 키이고, 키로 불리움)를 선택하고, (ii) 행렬의 각 위치(r1, c1)에서, P 내부 체크비트 할당은 r1위치에 의해 주기적으로 좌측으로 이동되는 Ki에 의해 정의된다. 일실시예에 있어서, (i)에 의해 표현된 처리는 모든 C키를 선택함에 의해 수행되고, K0는 모두 0 벡터이며, 나머지 키는 모두 1 벡터와 다른 임의의, 다른, 기수 웨이트 P-비트 2진 벡터이다. (i)와 (ii)에 표현된 처리는 규칙 1을 충족한다. 이 처리가 주어지면, 규칙 4를 충족하는 하나의 방법은 3개의 다른 컬럼 c1, c2, c3의 모든 셋트에 대해서, KC1XOR KC3은 KC2XOR KC3의 주기적 이동이 아니도록 K0에서 KC-1을 선택하는 것이다(규칙 5라 한다).
행렬은 각 컬럼이 이전 컬럼의 주기적 이동이고 i번째 컬럼이 컬럼 0의 i번째의 주기적 이동이라면, 순환한다. 행렬은 모두 0이거나 모두 1이 아니라면 자명하지 않는다. 행렬은 r의 모든 셋트 또는 더 적은 로의 선형으로 독립적이라면 계수 r을 가진다. 행렬은 행렬의 각 요소가 GF(2)에 있다면 GF(2)이다. 즉, 행렬의 요소가 2개의 요소, 즉, 0과 1을 가지는 갈루아 필드(Galois Field)("GF")에 있고, 덧셈은 배타적 OR 오퍼레이터로 정의되며 곱셈은 원래의 정수 곱셈으로 정의된다.
아래에서 더 상세히 설명되는 것과 같이, 일실시예에 있어서, 실패한 메모리 장치는 실패한 메모리 장치로부터 비트를 저장하는 보조 체크비트를 이전에 저장된 메모리 장치를 사용함으로써 매핑 아웃된다(그리고 보조 체크비트는 더 이상 저장되지 않는다). 일실시예에 있어서, 상술한 처리를 사용하여 선택된 내부 체크비트 할당은 실패한 메모리 장치를 매핑 아웃한 후, 동일한 내부 신드롬이 매핑 아웃되기 전에 사용된 것과 같이 데이터의 각 컬럼에서 사용되도록 선택된다(그리고 비록 보조 체크비트를 미리 저장한 컬럼에 저장되더라도, 실패한 컬럼에 저장된 데이터와 관련된 내부 신드롬은 여전히 그 데이터에 할당된다). 이와 같은 실시예에 있어서, 단일 비트 에러검출 및 보정이 리맵핑 후에도 제공되는 것을 보증하기 위해, 규칙 6이 사용된다: 모든 다른 위치 (r1, c1) 및 (r2, c2)에 대해서, c1, c2는 보조 체크비트를 저장하는 컬럼(즉, 컬럼 0)이 아니고; 리맵핑되기 전의 syn(r1, c1)는 리맵핑되기 전의 syn(r2, c2)와 같지 않다.
더욱이, 리맵핑된 후 더블 비트 에러검출에서, 내부 체크비트 할당은 규칙 7을 충족하도록 선택된다: 모든 다른 위치 (r1, c1), (r2, c2) 및 (r3, c3)에 대해서, c1, c2및 c3은 보조 체크비트를 미리 저장하는 컬럼이 아니고; syn(r1, c1) XOR syn(r2, c2) XOR syn(r3, c3)은 0이 아니다. 규칙 7은 예를 들면, 기수 중심으로 내부 체크비트 할당을 선택하기 위해 충족된다(즉, 체크비트의 기수는 각 데이터 비트를 커버하도록 할당됨).
하나의 실행에서, 코드 워드내의 스토리지 위치는 보조 체크비트와 내부 체크비트 사이의 주기적 종속을 회피하도록 할당된다. 예를 들면, 보조 체크비트는 특정 컬럼에 할당되고, 그 컬럼(실패한 메모리 장치를 리맵핑하기 이전에)에 대한 신드롬은 0으로 정의된다. 하나의 특정 실행에서, 보조 체크비트는 컬럼 0으로 할당된다. 내부 체크비트 0에서 R-1(R은 논리 어레이에서 로의 갯수)은 다른 컬럼(즉, 컬럼 1)에 할당되고, 그 컬럼을 위한 키(즉, K1)는 (0, 0, 0, ...., 0, 1)로 선택된다. 나머지 내부 체크비트는 나머지 체크비트의 갯수와 동일한, 내부 패리티 듀얼 비트의 셋트가 선택되는 대신에 저장되지 않고, 나머지 내부 체크비트가 0으로 계산되는 비트를 선택한다.
체크비트를 정의하는 방법 - 단일 비트 에러보정 이후 메모리 모듈 실패
메모리 모듈 실패를 검출하는 실시예에서도(예를 들면, 각각 다른 메모리 모듈에 대응하는 비트를 커버하는, 용장 메모리 모듈에 저장된 외부 체크비트을 사용), 규칙 8은 연속 컬럼이 주어진 메모리 모듈상에서의 메모리 장치로 가정하여, 메모리 모듈 실패 이후 단일 비트 에러보정을 제공하는데 사용된다: 모든 로 r1, r2와 모든 컬럼 c1, c2, c3및 c4에 대해서, (r1, c1)은 (r2, c2)와 같지 않고, c1과 c3은 다른 메모리 모듈의 대응컬럼이고, c2와 c4는 다른 메모리 모듈의 대응컬럼이며, c3과 c4는 동일한 메모리 모듈의 컬럼이고; syn(r1, c1) XOR syn(r2, c2) XOR syn(r1, c3) XOR syn(r2, c4)은 0이 아니다.
다른 실시예에서, 바람직하게, 메모리 모듈 실패가 메모리 실패 검출 및 보정을 실행하지 않고 검출되어 보정된다는 것에 주의한다.
실패한 메모리 장치를 위한 리맵핑(Remapping)
상술한 바와 같이, 몇가지 실시예에서, 실패한 메모리 장치는 실패한 메모리 장치에서 이전에 사용된 코드 워드에서 매핑 아웃된다. 달리 말하면, 실패한 메모리 장치는 코드 워드의 비트를 저장하는데 사용되지 않는다. 일반적으로, 실패한 메모리 장치로부터의 데이터는 비트를 위한 이용가능한 스토리지에 따라, 하나 이상의 나머지 메모리 장치에 저장된다. 예를 들면, 하나 이상의 다른 컬럼에 저장된 메타데이터 비트는 데이터의 생산자 및 소비자에 의해 논리적으로 사용될 수 없다.이 메타데이터 비트는 실패한 메모리 장치로부터 비트를 저장하게 된다. 보조 체크비트와 외부 체크비트가 사용되는 몇가지 실시예에서, 데이터는 보조 체크비트 컬럼에 리맵된다. 다른 실시예에서, 실패한 컬럼은 외부 체크비트 컬럼에 리맵된다.
도 4는 실패한 메모리 장치에 대응하는 컬럼의 리맵핑으로 코드 워드의 제1 실시예를 나타낸다. 다른 실시예가 가능하며, 고려된다. 도 4에서, 컬럼 cF는 실패한 메모리 장치에 대응하는 것을 나타낸다. 컬럼 cF는 이 실시예에서 이전에 보조 체크비트를 저장한 컬럼 c0에 리맵된다. 내부 체크비트는 컬럼 c1에 저장되고, 내부 체크비트 듀얼은 컬럼 c2의 일부에 저장된다. 외부 체크비트는 컬럼의 갯수가 메모리 뱅크 그리고 주어진 메모리 모듈의 메모리 장치의 갯수와 동일한 cm의 2개 이상의 컬럼 단부에 저장된다. 외부 체크비트는 각각의 다른 메모리 모듈 내에 동일한 위치(로과 컬럼)의 비트의 배타적 OR이다. 따라서, 이와 같은 실시예에서, 외부 체크비트는 실패한 로를 식별하는데 충분한 정보를 포함하고, 보조 체크비트는 용장한(여분의) 것이다.
도 5는 실패한 메모리 장치에 저장한 비트를 회피하는 캐쉬 라인(하나 이상의 코드 워드를 포함하는)을 리맵핑하기 위해 메모리 컨트롤러(10)의 일실시예의 작동을 나타내는 플로우차트이다. 도 5에 도시된 블럭을 이해를 쉽게 하기 위해 특별한 방법으로 설명되는 동안, 다른 방법이 사용된다. 블럭은 메모리 컨트롤러(10)에서 수행되는 다양하게 조합되는 논리회로의 작동을 나타낼 수 있고, 따라서 병렬로 실행된다.
데이터 리맵 제어회로(22)는 일반적으로 데이터의 디코딩과 인코딩을 수행하기 위한 체크비트 인코더 회로(16)와 ECC 회로(18)를 사용하여, 캐쉬 라인의 리맵핑을 제어할 수 있다. 데이터 리맵 제어회로(22)는 메모리 장치 실패가 검출되는 지시(결정 블럭 30 - yes)를 수신한다. 메모리 장치 실패의 지시를 수신하기 이전에, 데이터 리맵 제어회로(22)는 정지된다. 메모리 장치 실패는 다양한 형식으로 표시된다. 예를 들면, 도 1의 실시예에 있어서, MD 실패신호는 ECC 회로(18)로부터 표시된다. 메모리 장치가 메모리로부터 데이터를 판독하는 동안 실패한 발생의 검출에 응답하여, ECC 회로(18)는 MD 실패신호를 나타낸다. 다른 실시예에서, 예를 들면, 데이터 리맵 제어회로(22)는 연속상태 스토리지(20)를 검사함으로써메모리 실패를 검출할 수 있다. 실패한 MD 값은 실패가 없음을 나타내는 값을 포함한다(또는 실패한 MD 값을 위한 유용한 비트이다). 실패가 없음으로부터 특별한 메모리 장치를 나타내도록 변화하는 실패한 MD 값에 대응하여, 데이터 리맵 제어회로(22)는 실패가 검출되는 것을 결정할 수 있다.
실패가 검출되면, 데이터 리맵 제어회로(22)는 각 캐쉬 라인(따라서 캐쉬 라인을 포함하는 각 코드 워드)이 실패한 메모리 장치의 비트의 스토리지를 제거하도록 리맵핑에 의해 리페어 처리를 초기화한다. 데이터 리맵 제어회로(22)는 연속상태 스토리지(20)의 리페어 카운트를 0으로 설정한다(블럭 32). 리페어 카운트는 각 캐쉬 라인이 처리되는 때까지 차례로 메모리 뱅크에 저장된 각 캐쉬 라인을 선택하는, 메모리 뱅크(14)의 어드레스로써 사용된다.
데이터 리맵 제어회로(22)는 리페어 카운트에 의해 나타내어진 캐쉬 라인의판독을 초기화한다(블럭 34). 판독 데이터의 인코드된 캐쉬 라인은 ECC 회로(18)로 되돌아간다.
ECC 회로(18)는 각 코드 워드를 디코드하고, 실패한 메모리 장치로부터의 데이터를 재구성하고, 데이터 리맵 제어회로(22)가 데이터를 선택함을 통해, 데이터를 멀티플렉서(24)로 전송한다(블럭 36). 단일 비트 에러가 재구성 이후에 데이터에서 검출된다면, ECC 회로(18)는 단일 비트 에러를 보정한다(그리고 재구성된 데이터안으로 투입). 체크비트 인코더 회로(16)는 컬럼 0(보조 체크비트를 저장하는 컬럼)에서 실패한 컬럼로 저장된 데이터를 이동하는, 캐쉬 라인의 코드 워드를 기록한다(블럭 38). 실패한 컬럼이 컬럼 0라면, 보조 체크비트는 제거된다. 데이터 리맵 제어회로(22)는 메모리에 리코드된 라인을 기록하는 기록을 초기화한다.
데이터 리맵 제어회로(22)는 리페어 카운트를 증가시키고(블럭 40) 각 라인이 성공적으로 리코드되는 지를 결정한다(결정 블럭 42). 아니라면, 데이터 리맵 제어회로는 다음의 라인의 판독을 초기화하고(블럭 34) 처리가 계속된다. 그렇다면, 데이터 리맵 제어회로(22)는 리페어 카운트를 종료됨을 나타내는 값으로 설정하고(블럭 44) 리맵핑은 완료된다. 값은 예를 들면, 뱅크에 저장된 캐쉬 라인의 갯수보다 커짐에 의해 종료를 나타낼 수 있고, 또는 유용한 비트를 포함한다. 대안적으로, 연속상태는 리맵핑이 종료되는 것을 나타내는 또 다른 비트를 포함한다.
일실시예에 있어서, 코드 워드가 실패한 컬럼로부터의 비트를 저장하는 컬럼 0를 사용하여 리맵핑된 후에, 컬럼 0가 내부 체크비트에 의해 커버된다는 것은 중요하다. 내부 체크비트의 할당은 상기 규칙 1, 4, 5, 6 및 7과 관련된다(및 메모리모듈 실패가 또한 검출되면 규칙 8도). 따라서, 코드 워드의 인코딩과 디코딩은 리맵핑이 됐는지의 여부를, 제공된 캐쉬 라인을 위해, 합계로 기억할 수 있다.
도 5에 도시된 리맵핑 처리 동안에, 다른 메모리 요구가 메모리 컨트롤러(10)에 의해 받아들여지는 것이 중요하다. 메모리 컨트롤러(10)는 일시적으로 리맵핑 처리를 방해하는, 이러한 요구를 제공할 수 있다.
도 6은 실패한 메모리 장치의 리맵핑 및 제2 실패한 메모리 장치의 검출 및 보정으로 코드 워드의 제2 실시예를 설명한다. 다른 실시예도 가능하며, 고려된다. 도 6의 실시예는 리맵핑을 포함하고, 제2 메모리 장치 실패를 검출하고 보정함에 의해 따라오는 제1 메모리 장치 실패를 검출하고 보정할 수 있다. 추가적으로, 단일 비트 에러보정(및 리맵핑이 따라오는, 더블 비트 에러검출)은 이 실시예에서 수행된다.
도 6의 실시예에 있어서, 컬럼 cN은 판독 및 기록을 위해 공급되는 데이터의 몇개의 메타데이터 부분을 저장한다. 특히, 컬럼 cN에 저장된 메타데이터는 데이터의 생산자 및 소비자에 의해 논리적으로 사용될 수 없다. 데이터의 생산자는 사용되지 않는 메타데이터를 상수값(즉, 2진수 0, 2진수 1 또는 2진수 0과 1의 일정한 조합)으로 설정할 수 있다. 따라서, 제1 실패한 메모리 장치(도 6의 컬럼 cF1에 대응하는)는 사용되지 않는 메타데이터(컬럼 cN)를 저장하는 컬럼에 리맵된다. 제2 실패한 메모리 장치(즉, 도 6의 컬럼 cF2)는 검출되고 보정된다(보조 체크비트와 내부 체크비트를 사용하여 데이터를 재구성함에 의해). 이 실시예는 외부 체크비트가사용되지 않더라도 사용된다(이 실시예는 외부 체크비트가 사용되어도 또한 사용된다). 또 다른 실시예에 있어서, 메모리 컨트롤러는 메모리 모듈 실패 검출/보정을 완료하도록 형성될 수 있고 미리 외부 체크비트를 저장되는 컬럼의 실패한 컬럼을 리맵핑할 수 있다. 추가적인 논리적으로 사용되지 않는 컬럼로 다른 실시예에서, 부가 메모리 장치 실패는 사용되지 않는 컬럼에 리맵된다. 상술한 바와 같이, 사용되지 않는 비트는 다수의 다른 컬럼에 있을 수 있고(사용되는 다른 비트에 따라), 몇개의 다른 컬럼에 사용되지 않은 비트로 실패한 컬럼의 리맵핑은 사용되지 않는 컬럼으로 실패한 컬럼의 리맵핑과 비슷한 방법으로 수행된다.
이러한 실시예에 있어서, 연속상태(20)는 검출되는 각 실패한 메모리 장치를 기록하는, 다양한 실패한 메모리 장치를 위한 스토리지를 포함할 것이다.
도 7은 실패한 메모리 장치에 저장한 비트를 피하는 캐쉬 라인(하나 이상의 코드 워드를 포함하는)을 리맵핑하기 위해 그리고 제2 실패한 메모리 장치를 위한 후의 보정을 위해 메모리 컨트롤러(10)의 일실시예의 작동을 도시하는 플로우차트이다. 도 5에 도시된 블럭을 이해를 쉽게 하기 위한 특정 방법으로 설명되는 동안, 다른 방법이 사용된다. 블럭은 메모리 컨트롤러(10)에서 수행되는 다양하고 결합된 논리회로의 작동을 나타낼 수 있고, 따라서 병렬로 수행된다.
도 5의 실시예와 비슷하게, 데이터 리맵 제어회로(22)는 메모리 장치 실패가 검출되는지를 결정할 수 있다(블럭 30). 아니라면, 데이터 리맵 제어회로(22)는 정지된다. 그렇다면, 데이터 리맵 제어회로(22)는 메모리 장치 실패가 제1 실패인지 아닌지를, 연속상태(20)로부터 결정할 수 있다(결정 블럭 50). 그렇다면, 데이터리맵 제어회로(22)는 사용되지 않는 메타데이터 컬럼로 실패한 컬럼을 리맵핑할 수 있다(블럭 52). 아니라면, 데이터 리맵 제어회로(22)는 연속상태 스토리지(20)에서의 제2 실패한 컬럼을 기록할 수 있으므로, 메모리 뱅크로부터의 후퇴 판독들이 재구성되는 제2 실패한 컬럼로부터의 데이터로 이끌어질 수 있다(블럭 54). 블럭 52는 도 5에서의 블럭 32-44로써 비슷한 일련의 작동들을 포함한다.
추가적인 논리적으로 사용되지 않는 컬럼(또는 컬럼에서의 비트의 갯수와 동일한 다수의 컬럼에서 사용되지 않는 비트의 갯수)을 가지는 실시예에서, 도 7의 플로우차트는 제1 몇몇의 메모리 장치 실패를 위해 사용되지 않는 각각의 컬럼로 블럭을 리맵핑하고, 재구성을 위한 마지막 실패를 기록하도록 연장된다. 실패한 메모리 모듈이 추가적인 사용되지 않는 메모리 모듈이 포함되는지를 비슷한 방식으로 리맵된다는 것은 중요하다.
추가적인 세부사항들, 대표적인 실행
도 8-18은 메모리 컨트롤러(10)의 대표적인 수행을 설명한다. 이 실행에서, 메모리 장치는 메모리 모듈로써의 DIMM 상의 DRAM 실시예일 것이다. 따라서, 예가 다른 메모리 장치와 메모리 모듈로 수행될 수 있더라도, DRAM과 DIMM이 이 예에서 불리워진다. 이 예에서 특별히, 각 DRAM은 주기마다 4 비트의 주기를 공급하고, 2 주기는 DRAM으로부터 데이터의 가치가 있는 코드 워드를 판독/기록할 수 있다. DIMM은 이 실시예에서 주어진 메모리 뱅크 내에서 4개의 DRAM을 포함한다. 이 예에서 캐쉬 라인 당 2개의 코드 워드가 있다(즉, 데이터의 4 주기는 주기 당 DRAM로부터 판독/기록). 뱅크 당 DIMM의 갯수는 9개(DIMM 실패 검출이 지원되지 않으면) 또는 10개(DIMM 실패 검출이 지원되면)이고, 따라서, 36개 또는 40개의 DRAM이 포함된다. DRAM은 DIMM을 가로질러 연속적인 순서의 갯수들이다(즉, DIMM_0은 DRAM_0, DRAM_1, DRAM_2 및 DRAM_3을 포함하고; DIMM_1은 DRAM_4, DRAM_5, DRAM_6 및 DRAM_7을 포함한다). 특정한 세부사항들이 이 대표적인 실행에서 제공되는 동안, 다수의 다른 수로이 하나 이상의 세부사항들을 다양하게 할 수 있다는 것은 중요하다.
대표적인 실행은 2가지의 작동 모드들을 지원한다. 제1 모드에서, DRAM 실패 검출 및 보정(실패한 DRAM의 매핑을 포함하는)이 지원된다. 단일 비트 에러보정이 지원된다. 더블 비트 에러검출은 리맵핑 처리 동안은 제외하고 지원된다. 제1 모드는 9개의 DIMM이 뱅크 내에 포함된다면 사용된다. 제2 모드에서, DRAM 실패 검출 및 보정은 DIMM 실패 검출(DRAM 실패는 검출되고 매핑된 후에 DIMM 실패 검출을 포함하여) 뿐만 아니라, 위에서 설명되었던 단일 비트 에러보정 및 더블 비트 에러보정을 포함하여, 지원된다. 이 모드에서, 10번째의 DIMM은 DIMM 실패 검출을 위해 사용된 체크비트를 저장하기 위해 포함된다.
일반적으로, 이 실행에서의 제공된 캐쉬 라인은 연속상태를 기반으로 5개의 상태들 중 하나를 가짐으로써 나타내어질 수 있고, 상태들은 캐쉬 라인을 위한 코드 워드의 인코딩과 디코딩에 영향을 미칠 수 있다. 상태들은 코드 워드가 리맵핑된 컬럼을 가지는 지를 결정하는 메모리 컨트롤러(10)를 허용한다(따라서 내부 체크비트의 생성과 코드 워드에서의 데이터의 위치가 다를 수 있다). 실패한 DRAM을 매핑하기 전의 인코딩은 인코딩 #1으로써 불리워지고, 컬럼 0을 위한 엔트리들을무시하는, 도 8과 도 9 및 도 10의 테이블에 대응한다. 매핑 후의 인코딩은 인코딩 #2로 불리우고, 도 10의 표에서 컬럼 0을 위한 엔트리들의 사용 및 실패한 컬럼으로부터 리맵핑된 데이터를 저장하는 컬럼 0의 사용을 포함한다. 이 상태들은 다음에 나타난다:
1. 스테이트_1 : 연속 실패는 검출되지 않는다. 인코딩 #1은 사용된다. 실패한 DRAM이 Null(DRAM 0-39 중 하나를 지시하지 않음)이고 실패한 DIMM이 Null(DIMM 0-9의 지시 아님)인 상태이다.
2. 스테이트_2 : DRAM 실패가 검출되고 식별되지만, 캐쉬 라인이 실패한 DRAM을 매핑하도록 리코드되지 않는다. 인코딩 #1은 사용된다. 실패한 DRAM이 Null이 아니고, 실패한 DIMM이 Null이며, 리페어 카운트가 뱅크에서의 캐쉬 라인 어드레스보다 작은 상태이다.
3. 스테이트_2R : DRAM 실패가 검출되고 식별되고, 캐쉬 라인이 실패한 DRAM을 매핑하도록 리코드된다. 인코딩 #2가 사용된다. 실패한 DRAM이 Null이 아니고, 실패한 DIMM이 Null이며, 리페어 카운트가 뱅크에서의 캐쉬 라인 어드레스보다 큰 상태이다.
4. 스테이트_1D : DRAM 실패가 검출되고 식별되고, 캐쉬 라인이 인코딩 #1에 있다. 달리 말하면, DIMM 실패는 DRAM 실패 이전에 또는 DIMM 내의 DRAM 실패의 리맵핑동안 검출된다. 실패한 DIMM이 Null이고, 리페어 카운트가 뱅크에서의 캐쉬 라인 어드레스보다 작고, 실패한 DIMM이 Null이 아닌 상태이다.
5. 스테이트_2RD : DRAM 실패가 검출되고 식별되고, 캐쉬 라인이 인코딩 #2(실패한 DRAM이 실패한 DIMM 검출 이전에 매핑되는)에 있다. 실패한 DRAM이 Null이 아니고, 리페어 카운트가 뱅크에서의 캐쉬 라인 어드레스보다 크고, 실패한 DIMM이 Null이 아닌 상태이다.
도 8은 제1 모드에서 대표적인 수행을 위한 코드 워드의 일실시예의 블럭도이다. 다른 실시예도 가능하며, 고려된다. 도 8의 실시예는 36개의 컬럼(제1 모드에서 포함되는 36개의 DRAM과 대응하는, c0에서 c35)을 포함한다. 9개의 DIMM(DIMM_0에서 DIMM_8)이 있고, 각각은 메모리 뱅크 내에서 4개의 DRAM을 포함하고 따라서 코드 워드의 4개의 연속적인 컬럼을 가진다. 코드 워드를 위해 제공된 DRAM에 저장된 8개의 비트를 위해, 코드 워드의 8개의 로가 있다.
컬럼 0은 보조 체크비트를 저장하고, 이 실행에서는 로 체크비트이다. 다른 실행에서, 보조 체크비트는 제2 모드와 비슷한 회전 XOR 비트이다. 컬럼 1은 내부 체크비트의 최하위 8개의 비트를 저장하고, 컬럼 2의 제1의 4개 로는 내부 체크비트 듀얼이고, 그들은 내부 체크비트의 가장 중요한 4개의 비트를 0으로 생성된다. 따라서, 12개의 내부 체크비트는 현재 실시예에서 사용된다. 코드 워드의 나머지 비트는 메타데이터를 포함하는, 데이터를 저장한다.
도 9는 제2 모드에서 대표적인 수행을 위한 코드 워드의 일실시예의 블럭도이다. 다른 실시예도 가능하며, 고려된다. 도 9의 실시예는 40개의 컬럼(제2 모드에 포함되는 40개의 DRAM과 대응하는, c0에서 c39)을 포함한다. 10개의 DIMM(DIMM_0에서 DIMM_9)이 있고, 각각은 메모리 뱅크 내의 4개의 DRAM을 포함하고 따라서 코드 워드에서 4개의 연속적인 컬럼을 가진다. 제공된 DRAM 내에 저장된 8개의 비트와 대응하는, 코드 워드의 8개의 로가 있다.
도 9의 실시예는 도 8의 실시예와 비슷하게, 컬럼 0의 보조 체크비트, 컬럼 1의 내부 체크비트 및 컬럼 2의 내부 체크비트 듀얼을 포함한다. 그러나, 이 예에서, 보조 체크비트는 나머지 컬럼에서 비트의 회전 XOR 되도록 정의된다. 다른 실시예에서, 보조 체크비트는 이 모드를 위한 로 체크비트이다. 회전 XOR를 사용하여, 실패한 DRAM 및/또는 DIMM을 식별할 수 있는 추가적인 정보가 제공된다. 일반적으로, 회전 XOR은 대각선이 상부를 지날 때(또는 역으로) 어레이의 하부를 둘러싸는, 비트(컬럼 c1에서 c35)의 어레이로 대각선들에 따라 비트를 커버한다. 예를 들면, 일실시예에 있어서, 9개의 비트 회전 XOR은 어레이(모두 0들)로 임시의 9번째 로을 추가하고 대각선들로 회전 XOR의 9개의 비트를 계산함에 의해 계산되는다. 이러일실시예에 있어서, 컬럼 c8의 첫번째 비트를 통해 회전 XOR의 비트 9는 컬럼 c1의 8번째 비트, 컬럼 c2의 7번째 비트 등을 커버하고 나서, 컬럼 c9의 9번째 비트(0), 컬럼 c10의 8번째 비트 등을 둘러싼다. 회전 XOR의 비트 8은 다음의 대각선을 커버한다(즉, 컬럼 c7의 첫번째 비트를 통해, 컬럼 c1의 7번째 비트, 컬럼 c2의 6번째 비트 그 후, 컬럼 c8의 9번째 비트(0), 컬럼 c9의 8번째 비트 등을 둘러싼다). 보조 체크비트는 대응하는 보조 체크비트를 생성하도록 나머지 8개의 비트의 각각으로 회전 XOR의 9번째 비트를 XOR함에 의해 생성된다.
추가적으로, DIMM_9는 외부 체크비트의 셋트를 저장한다. 외부 체크비트는나머지 DIMM(DIMM_0에서 DIMM_8)을 커버한다. 예를 들면, 일실시예에 있어서, 각 외부 체크비트는 서로의 DIMM 내에서 동일한 위치의 비트를 커버한다. 예를 들면, DIMM_0에서, 컬럼 c36의 외부 체크비트가 컬럼 c0의 대응하는 비트를 커버하고; 컬럼 c35의 외부 체크비트가 컬럼 c1의 대응하는 비트를 커버하고;컬럼 c34의 외부 체크비트가 컬럼 c2의 대응하는 비트를 커버하고;컬럼 c33의 외부 체크비트가 컬럼 c3의 대응하는 비트를 커버한다. 외부 체크비트는 DIMM 실패를 검출하고 실패한 DIMM으로부터의 데이터를 재구성하도록 할 수 있다.
도 9에 도시된 코드 워드의 나머지 컬럼은 데이터(메타데이터를 포함하는)를 저장한다.
도 10에서, 표는 대표적인 실시예의 각 DRAM(도 8 및 도 9에서 도시된 논리적인 어레이의 각 컬럼)에 내부 체크비트의 할당을 나타내는 것이다. 표는 DRAM 갯수("0" 또는 "!0"으로 표시되는 DRAM 0을 위한 2개의 엔트리들로, 0에서 35), 그 DRAM(2진수 1은 대응하는 내부 체크비트가 그 비트를 커버하는 것을 나타내고 2진수 0은 대응하는 내부 체크비트가 그 비트를 감추지 않는 것을 나타내는)을 위한 내부 체크비트 벡터[10:0]를 열거한다. 도 10의 표에서 열거된 내부 체크비트는 로 0의 비트와 대응한다(그리고 아래의 "헤더(headers)"로 불린다). 다른 비트를 위해 내부 체크비트 할당은 체크비트부를 정의하는 방법으로 상술된 것과 같이, 로 갯수를 기반으로, 열거된 비트 벡터의 주기적인 좌측 이동으로 생성된다.
도 10에 도시된 내부 체크비트 할당은 소수(11)의 행렬로부터 생성된다(즉,상술된 체크비트부를 정의하는 방법으로 P = 11). 예를 들면, 규칙 5, 6 및 8에 반대하는 벡터의 선택된 셋트를 검사하는, 바람직한 비트 벡터로 임의의 검색 처리가 수행된다. 벡터의 셋트가 식별되면, 도 10의 표에서 나타나는 12번째 내부 체크비트가 규칙 7을 충족하기 위해, 서로의 벡터를 위해 기수 중심을 보증하는 것이 추가된다. 규칙 7을 충족하는 것이 내부 체크비트로 더블 비트 에러검출을 제공하기 때문에, 12번째 내부 체크비트 또한 DED 비트로 불리운다. DED 비트는 각각의 로에서 내부 체크비트의 비트 11로써 남는 것 대신에, 로 1에서 7을 위해 내부 체크비트 할당을 생산하도록 주기적으로 이동되지 않는다. 다른 실시예에서, 기수 중심 내부 체크비트 할당은 DED 비트를 추가하지 않고 만들어질 수 있다.
도 11에서, 대표적인 실행을 위한 체크비트 인코더 회로(16)의 일실시예가 블럭도가 도시되었다. 다른 실시예도 가능하며, 고려된다. 설명된 실시예에 있어서, 체크비트 인코더 회로(16)는 AND 회로(60), 디코더(62), 내부 체크비트 회로(64), 부분 체크비트회로(66), 하부 DRAM 인코더 회로(68), 인코딩 선택회로(70) 및 멀티플렉서(72)를 포함한다. 디코더(62)는 연속상태 스토리지(20)로부터 실패한 DRAM 지시를 받아들이도록 연결되고 입력 신호의 셋트를 AND 회로(60)로 제공하도록 연결된다. AND 회로(60)는 입력 데이터를 받아들이도록, DRAM 2-35를 위해(컬럼 2의 내부 체크비트 듀얼 위치에 2진수 0으로) 코드 워드의 컬럼 2-35의 논리적인 어레이로 정렬되도록 연결된다. AND 회로(60)는 부분 체크비트회로(66)에서 컬럼 4-35(DRAM 4-35)을 위해 그리고 메모리(12)에 전송되는 출력으로써 인코드된 데이터 출력을 제공하도록 연결된다. AND 회로(60)는 내부 체크비트의 셋트를 생성하고 하부 DRAM 인코더 회로(68)로 제공하는, 컬럼 2와 3을 하부 DRAM 인코더 회로(68)로 그리고 컬럼 2-35(DRAM 2-35)을 위한 데이터를 내부 체크비트 회로(64)로 출력한다. 부분 체크비트회로(66)는 부분 회전 체크비트의 셋트와 클래스 체크비트의 셋트를 생성하고, 이 비트를 하부 DRAM 인코더 회로(68)로 출력한다. 멀티플렉서(72)는 연속상태 스토리지(20)로부터 실패한 DRAM에 반응하는, 실패한 DRAM에 저장된 데이터(실패한 DRAM 데이터)를 선택하고 입력 데이터를 받아들이도록 연결된다. 하부 DRAM 인코더 회로(68)는 실패한 DRAM 데이터, 실패한 DRAM 지시, 및 인코딩 선택회로(70)로부터의 인코딩 식별자(ID)를 받아들이도록 연결되고, 연속상태 스토리지(20)로부터 연속상태를 받아들인다. 하부 DRAM 인코더 회로(68)는 DIMM 실패 검출을 사용하여 실시예에서 DRAM 36-39 및 컬럼 0-3(DRAM 0-3)을 위해 인코드된 데이터를 메모리(12)로 출력한다.
체크비트 인코더 회로(16)는 캐쉬 라인의 상태를 기반으로(위에서 제공된 5개의 상태들 중 하나), 기록되는 캐쉬 라인에서 코드 워드를 생성한다. 일반적으로, 코드 워드(인코딩 #1과 인코딩 #2 사이에서)은 컬럼 2에서 35 중 하나가 0일 수 있고(만일 대응하는 DRAM이 실패라면) 컬럼 0이 실패한 컬럼에 저장된 데이터를 저장하게 될 수 있음(만일 컬럼 0이 실패한 컬럼이 아니라면)에서 다르다. 추가적으로, 인코딩 #2에서, 내부 체크비트는 컬럼 0을 커버한다.
AND 회로(60)는 실패한 DRAM 지시에 응답하여 컬럼 2-35 중 하나가 0으로 제공된다. AND 회로(60)는 컬럼 2에서 내부 체크비트 듀얼을 0이거나, 이 0으로 하는 것은 어디서나 수행된다. 디코더(62)는 실패한 DRAM 지시를 디코드하고 34개의 신호(컬럼 2-35의 각각 중 하나)를 생성한다. AND 회로(60)는 논리적으로 내부 체크비트 회로(64)와 부분 체크비트회로(66)(및 하부 DRAM 인코더 회로(68)에 제공되는 컬럼 2와 3로부터의 데이터) 위한 출력 비트를 생성하기 위해 각 컬럼의 비트로 각 컬럼을 위한 신호를 AND한다. AND 회로(60)의 실제 회로는 디코더(62)에 의한 신호 출력이 실패한 컬럼(그리고 다른 컬럼에서 반대 상태)에서 2진수 1 또는 2진수 0인지 아닌지를 기반으로 하는, 논리회로이다.
실패한 DRAM에 기록되는 데이터가 컬럼 0로 이동되기 때문에, 멀티플렉서(72)는 실패한 DRAM 지시를 기반으로 입력 데이터로부터 AND 회로(60)로 데이터를 선택하게 된다.
이 컬럼에서 도 10에서 지시된 내부 체크비트에 따라, 내부 체크비트 회로(64)는 컬럼 2-35의 내부 체크비트를 생성한다. 즉, 내부 체크비트 회로(64)는 그 체크비트를 생성하기 위해 제공된 내부 체크비트에 의해 커버된 각각의 어레이 비트를 XOR할 수 있다. 상술된 것과 같이, 내부 체크비트 듀얼로 정의되는 컬럼 2의 비트는 이 계산에 의해 0으로 설정된다. 하부 DRAM 인코더 회로(68)는 내부 체크비트 듀얼을 설정하기 위해 계산되고 또한 인코딩 #2가 사용되어지면 컬럼 0에 저장된 데이터들로 계산되어, 내부 체크비트 회로(64)에 의해 생성된 내부 체크비트를 조절할 수 있다.
부분 체크비트회로(66)는 하부 DRAM 인코더(68)에 의해 사용을 위해 부분 체크비트의 셋트를 생성한다. 특히, 보조 체크비트로 회전 XOR 정의에 따라, 부분 체크비트회로(66)가 부분 회전 체크비트의 셋트를 컬럼 4-35에서 생성한다. 부분 회전 체크비트는 회전 XOR 결과를 생성하는(각각의 나머지 회전 XOR 결과 비트로 회전 XOR 결과의 9번째 비트를 XOR함에 의해 보조 체크비트로 인코드될 수 있는) 회전 XOR 정의에 따른 하부 DRAM 인코더 회로(68)에 의해 생성된 컬럼 0-3로부터 비트와 결합된다. 회전 XOR를 수행하지 않는 실시예에서, 부분 체크비트회로(66)는 부분 회전 체크비트를 생성할 수 없다.
부분 체크비트회로(66)는 또한 컬럼 4-35에서 클래스 체크비트의 셋트를 생성할 수 있다. 여기서 사용된 것과 같이, 클래스는 각 DIMM 내의 동일한 위치에 대응하는 컬럼의 셋트이다. 예를 들면, 클래스 0은 각 DIMM의 제1 DRAM에 대응한다(즉, DRAM/컬럼 0, 4, 8등). 비슷하게, 클래스 1은 각 DIMM의 제 2 DRAM에 대응한다(즉, DRAM/컬럼 1, 5, 9등). 클래스 체크비트는 동일한 로에서 및 클래스에서 각 비트의 XOR이고, 따라서 비트의 4x8 벡터를 생산한다. 이 비트는 DIMM 실패한 검출이 수행되는 실시예에서 외부 체크비트를 생성하고 DIMM 실패한 검출이 수행되지 않는 실시예에서 로 체크비트를 생성하여, 하부 DRAM 인코더 회로(68)에 의해 생성되는 컬럼 0-3로부터의 비트로 이용된다.
인코딩 선택회로(70)는 인코딩(#1 또는 #2)이 생성되는 코드 워드로 이용되는지를 결정하는 연속상태를 디코드한다. 인코딩 선택회로는 인코딩 ID를 하부 DRAM 인코더 회로(68)로 제공한다.
하부 DRAM 인코더 회로(68)의 함수는 아래의 경우의 셋트로 설명되는 것이다. 경우 0은 인코딩 #1이고, 나머지 경우는 다양한 DRAM 실패를 위한 인코딩 #2이다. 다음의 설명에서, 특정한 함수들이 불려진다. 함수 f0, f1, f2, g0, g1및 g2는도 12에 도시된다. 이 함수들은 입력 벡터에 의해 따르는 행렬을 설명한다. 어레이의 각각의 로는 로 내의 대응하는 위치로 2진수 0들에 의해 지시된 입력 비트의 XOR로써 출력 비트를 상술한다. 함수들 f0및 g0는 컬럼 2에 저장된 내부 체크비트 듀얼을 생성하고 개별적으로, 내부 체크비트 듀얼을 반영하는 컬럼 1에 저장된 내부 체크비트를 조정한다. 함수들 f1및 g1는 개별적으로, 컬럼 1 또는 컬럼 37이 실패한 경우 내부 체크비트의 각각을 0으로 설정한다. 함수들 f2및 g2는 개별적으로, 컬럼 2 또는 컬럼 38이 실패한 경우 내부 체크비트 듀얼을 생성하고 컬럼 1에 저장된 내부 체크비트를 조절한다. 또한, 함수 "패리티0"은 컬럼 0을 위한 내부 체크비트 정의에 사용하는 체크비트 생성이고(도 10에서 보여짐), "패리티2"은 컬럼 2을 위한 내부 체크비트 정의에 사용하는 체크비트 생성이고(도 10에서 보여짐), "패리티3"은 컬럼 3을 위한 내부 체크비트 정의에 사용하는 체크비트 생성이다(도 10에서 보여짐). "내부 체크비트x:y"은 내부 체크비트 회로(64)에 의해 생성된 내부 체크비트이다. Data_X는 AND 회로(60)에 의해 AND하기 이전에 컬럼 X에 있던 데이터이다. 비트 범위가 아래에서 사용되지 않는 경우, 값의 전체가 상술된다.
경우 0 : 인코딩 #1
컬럼 1 = 내부 체크비트0:7XOR g0(내부 체크비트8:11)
컬럼 20:3= f0(내부 체크비트8:11)
컬럼 24:7= Data_24:7
컬럼 3 = Data_3
컬럼 0 = 보조 체크비트
경우 1 : DRAM 0이 실패한 때(Aux0:7 = 0으로 설정)
업데이트0:11= 패리티0(Aux)
컬럼 0 = Aux
컬럼 1 = 내부 체크비트0:7XOR g0(내부 체크비트8:11) 업데이트0:7XOR g0(내부 체크비트8:11)
컬럼 20:3= f0(내부 체크비트8:11) XOR f0(업데이트8:11)
컬럼 24:7= Data_24:7
컬럼 3 = Data_3
Aux가 0으로 설정되기 때문에, 업데이트0:11는 0이고 입력 또한 0이므로 함수들은 업데이트 하게 된다. 이 조건들은 DIMM 실패한 검출을 수행하지 않는 실시예에서는 무시된다. Aux는 경우 6에서 다르게 설정된다.
경우 2 : DRAM 1이 실패한 때(Aux 0:7 = 0으로 설정)
업데이트0:7= Aux
업데이트8:11= 0
컬럼 0 = g1(내부 체크비트) XOR g1(업데이트)
컬럼 1 = Aux
컬럼 20:3= f1(내부 체크비트) XOR g1(업데이트)
컬럼 24:7= Data_24:7
컬럼 3 = Data_3
Aux가 0으로 설정되기 때문에, 업데이트0:11는 0이고 입력 또한 0이므로 함수들은 업데이트 하게 된다. 이 조건들은 DIMM 실패한 검출을 수행하지 않는 실시예에서는 무시된다. Aux는 경우 6에서 다르게 설정된다.
경우 3 : DRAM 2가 실패한 때(Aux 0:7 = 0으로 설정)
New0:3= 0
New4:7= Data_24:7
업데이트 = 패리티0(New) XOR 패리티2(Aux0:7)
컬럼 00:3= f2(내부 체크비트8:11) XOR f2(업데이트8:11)
컬럼 04:7= Data_24:7
컬럼 1 = 내부 체크비트0:7XOR g2(내부 체크비트8:11) XOR 업데이트0:7XOR g2(업데이트8:11)
컬럼 2 = Aux
컬럼 3 = Data_3
경우 4 : DRAM 3이 실패한 때(Aux 0:7 = 0으로 설정)
업데이트 = 패리티0(Data_3) XOR 패리티3(Aux0:7)
컬럼 0 = Data_3
컬럼 1 = 내부 체크비트0:7XOR g0(내부 체크비트8:11) XOR 업데이트0:7XOR g2(업데이트8:11)
컬럼 20:3= f0(내부 체크비트8:11) XOR g0(업데이트8:11)
컬럼 24:7= Data_24:7
컬럼 3 = Aux
경우 5 : DRAM 4-35 중 하나가 실패한 때(실패한 DRAM = X)
업데이트 = 패리티0(Data_X)
컬럼 0 = Data_X
컬럼 1 = 내부 체크비트0:7XOR g0(내부 체크비트8:11) XOR 업데이트0:7XOR g0(업데이트8:11)
컬럼 20:3= f0(내부 체크비트8:11) XOR f0(업데이트8:11)
컬럼 24:7= Data_24:7
컬럼 3 = Data_3
경우 6 : DRAM 36-39 중 하나가 실패한 때(실패한 DRAM = X)
이 컬럼이 컬럼 0-39에서 계산되기 때문에, 이 컬럼 중 하나는 간접적으로 0이 된다. 즉, 다른 컬럼 중 하나는 실패한 컬럼이 0으로 평가되도록 설정된다, 다음으로:
Y = X mod 4
Aux0:7= 클래스 Y DRAM의 XOR
Aux의 위의 설정으로 DRAM Y를 위한 경우 1-4 중 하나로 계산.
도 10의 컬럼 0에 2개의 내부 체크비트 할당(0 및 !0)이 있다. 상술된 것과 같이, 인코딩 #1에서 사용되지 않는다. "0"으로 레이블된 할당은 "!0"으로 레이블된 할당이 이용되는 경우에, 실패한 DRAM이 DRAM 1 또는 37이 아닐 때 인코딩 #2로 이용된다. "0"으로 레이블된 할당이 DED 비트 설정을 가지고, DRAM 2가 실패하더라도 DRAM 2에서 할당에 DED 비트를 취소한다. "!0"으로 레이블된 할당은 DED 비트가 비워지고, 함수 1을 생성하기 위해 DRAM 2에서의 할당로 결합되는 경우 반전을 허용한다.
일실시예에 있어서, 함수들 f1(내부 체크비트0:11) 및 g1(내부 체크비트0:11)이 내부 체크비트 생성과 함수 계산을 이루기 위한 추가적인 XOR 트리들을 쌓음에 의해 AND 회로(60) 출력으로부터 병렬로 계산된다. 비슷하게, 위의 경우의 다른 함수들 또는 결합들이 바람직하게, AND 회로(60) 출력으로부터 직접적으로 계산된다.
도 13에 따라, 대표적인 수행을 위한 ECC 회로(18)의 일실시예의 블럭도가 도시되었다. 다른 실시예도 가능하며, 고려된다. 도 13의 실시예에 있어서, ECC 회로(18)는 AND 회로(80), 삭제 보정회로(82), 신드롬 계산회로(84), 내부 및 회전 에러 신드롬 계산회로(86), 실패한 DRAM 식별회로(88), 실패한 DIMM 식별회로(90), 단일 에러 식별/보정회로(92) 및 단일 에러 에일리어스와 재배치 회로(94)를 포함한다. 몇개의 회로는 DRAM 상태를 받아들이도록 나타낸다. DRAM 상태는 위에서 설명한 5개의 상태들(스테이트 1, 스테이트 1R 등)중 하나이다. 상태들은 다른 방법으로 나타낼 수 있다. 예를 들면, 3 비트는 인코딩 #1 또는 #2를 나타내는 하나의 비트로 사용될 수 있고, 실패한 DRAM인지 아닌지를 나타내는 또 다른 비트 및 실패한 DIMM인지 아닌지를 나타내는 또 다른 비트이다. 연속상태 스토리지(20)로부터 DRAM 상태를 디코딩하기 위한 회로가 나타나지 않는다. 추가적으로, AND 회로(80) 및 실패한 DRAM 식별회로(88)에 의해 받아들여진 모드는 제1 모드(DIMM 실패 검출 없음) 또는 제2 모드(DIMM 실패 검출)의 지시이다.
AND 회로(80)는 실패한 DRAM 지시, DRAM 상태 및 모드뿐만 아니라, 메모리로부터의 코드 워드(인코드된 데이터 출력)를 받아들인다. AND 회로(80)는 실패한 DRAM 지시 및 DRAM 상태에 따라, 선택적으로 컬럼 0-39(또는 DRAM 실패가 나타나지 않을 때) 중 하나를 0으로 한다. 특히, DRAM 상태가 라인이 인코딩 #2인 것을 나타내는 경우 실패한 DRAM에 의해 식별된 컬럼은 0이 된다. 추가적으로, AND 회로(80)는 제1 모드인 경우 컬럼 36-39이 0이다.
AND 회로(80)는 40x8 어레이를 신드롬 계산회로(84)으로 출력하고, 36x8 어레이는 코드 워드의 컬럼 0-35를 삭제 보정회로(82)에 포함한다. 신드롬 계산회로(84)는 2개의 신드롬, 클래스 신드롬 및 보조 신드롬을 계산한다. 추가적으로 IsNz 신호의 셋트가 생성된다. 클래스 신드롬은 삭제 보정회로(82), 실패한 DRAM 식별회로(88)및 실패한 DIMM 식별회로(90)에 제공된다. 보조 신드롬은 실패한 DRAM 식별회로(88)와 삭제 보정회로(82)에 제공된다. IsNz 신호는 실패한 DRAM 식별회로(88)와 실패한 DIMM 식별회로(90)에 제공된다.
신드롬 계산회로(84)에 의해 계산되는 클래스 신드롬은 DRAM이 따르는 클래스에 따라 계산된 신드롬의 셋트이다. 즉, 클래스 0은 DRAM 0, 4, 8 등을 포함하고, 클래스의 각 DRAM로분터 대응하는 로 비트를 XOR함에 의해 계산되는 클래스 신드롬의 제1 컬럼은 클래스 0의 신드롬이다. 보조 신드롬은 클래스 신드롬의 XOR로 생성된다(로을 기본으로). 4개의 클래스 신드롬에 대응하는 4개의 IsNz 신호가 있다. 클래스 신드롬의 적어도 하나의 비트가 0이 아니라고 가정된 경우, 각 신호는 나타난다.
삭제 보정회로(82)는 실패한 DRAM 또는 DIMM으로부터 데이터를 재구성함에 의해 미리 식별된 연속 에러(DRAM 실패 또는 DIMM 실패)을 보정하도록 구성된다. 삭제 보정회로(82)는 재구성된 데이터로, 코드 워드의 컬럼 0-35을 내부와 회전 에러 신드롬 계산회로(86) 및 단일 에러 식별/보정회로(92)에 공급한다. 삭제 보정회로(82)는 실패한 DRAM 지시, DRAM 상태 및 실패한 DIMM 지시를 받아들이도록 연결된다.
내부 및 회전 에러 신드롬 계산회로(86)는 실패한 DRAM 지시와 DRAM 상태를 받아들이도록 더 연결되고, 단일 에러 식별/보정회로(92), 실패한 DRAM 식별회로(88) 및 실패한 DIMM 식별회로(90)에 제공되는 내부 신드롬을 생성한다. 추가적으로, 내부 및 회전 에러 신드롬 계산회로(86)는 회전 에러 신드롬을 실패한 DRAM 식별회로(88)와 실패한 DIMM 식별회로(90)를 위해 생성한다.
인코딩 #1에서, 도 10에 도시된 내부 체크비트 정의들을 사용하여, 내부 신드롬은 컬럼 1-35에서 계산된다. 인코딩 #2에서, 실패한 DRAM이 DRAM 1 또는 37일 경우, 내부 신드롬은 도 10에 도시된 것과 같이, 컬럼 0을 위해 내부 체크비트 정의 "!0"을 사용하여, 컬럼 0-35에서 계산된다. 인코딩 #2에서, 실패한 DRAM이 DRAM 1 또는 37과 다른 경우, 내부 신드롬은 도 10에 도시된 것과 같이, 컬럼 0을 위해 내부 체크비트 정의 "0"을 사용하여, 컬럼 0-35에서 계산된다. 회전 에러 신드롬은 컬럼 0으로부터의 대응하는 회전 체크비트로 회전 체크비트를 계산되는 비트의 회전 셋트를 XOR함에 의해 계산된다(9번째 비트가 0이라 가정). 내부 체크비트를 생성하기 위해 상술된 것과 비슷하게, 몇가지 실시예에서, 도 12에서의 함수들이 내부 체크비트를 생성하게 됨에 따라 XOR 트리들의 다양한 셋트가 내부 신드롬을 생성한다는 것이 중요하다.
단일 에러 식별/보정회로(92)는 실패한 DRAM 지시, DRAM 상태 및 실패한 DIMM 지시를 받아들이도록 더 연결된다. 일반적으로, 단일 에러 식별/보정회로(92)는 삭제 보정 이전의 데이터에서 존재되는 단일 비트 에러를 보정하도록 구성된다.단일 에러 식별/보정회로(92)는 단일 에러 에일리어스와 재배치 회로(94)로 보정되는 단일 비트 에러로 36x8 어레이를 출력한다. 추가적으로, 단일 에러 식별/보정회로(92)는 단일 비트 에러의 투입을 재구성된 데이터에서 식별하는 보조 신드롬과 또 다른 클래스 신드롬을 생성한다. 보조 신드롬과 클래스 신드롬은 단일 에러 에일리어스와 재배치 회로(94)에 제공된다.
단일 에러 식별/보정회로(92)는 또한 보정될 수 없는 에러가 검출되는 경우 보정될 수 없는 에러 신호(UError)를 생성할 수 있다. 단일 에러 식별/보정회로의 일실시예의 추가적인 세부사항들이 도 15에서 나타나고 아래에서 보다 상세히 설명된다.
단일 에러 에일리어스와 재배치 회로(94)는 실패한 DRAM 지시, DRAM 상태 및 실패한 DIMM 지시를 받아들이도록 더 연결되고, 데이터 출력을 생성한다(메모리 컨트롤러(10)로부터 데이터의 요구자에게 출력하고 멀티플렉서(24)를 통해 체크비트 인코더 회로(15)로 공급). 단일 에러 에일리어스와 재배치 회로(94)는 단일 비트 에러의 투입을 보정하고 또한 원래의 위치로 인코딩 #2의 컬럼 0에 저장된 데이터를 재정렬한다. 단일 에러 에일리어스와 재배치 회로(94)의 일실시예의 추가적인 세부 사항들은 도 16에서 나타나고 아래에서 설명된다.
실패한 DRAM 식별회로(88)는 DRAM_ID에 대응하는 실패한 DRAM 지시를 저장할 수 있는, 연속상태 스토리지(20)에 DRAM_ID를 출력하여, 실패한 DRAM을 검출한다. 추가적으로, 실패한 DRAM 식별회로(88)는 리맵핑을 초기화 하는데이터 리맵 제어회로에 의해 사용되는 수 있는 DRAM 실패신호(일실시예)와 보정될 수 없는 에러를 나타내는 UError 신호를 출력할 수 있다. 실패한 DRAM 식별회로(88)의 일실시예는 도 17에서 나타내고 아래에서 설명된다.
실패한 DIMM 식별회로(90)는 DIMM_ID에 대응하는 실패한 DIMM 지시를 저장하는, 연속상태 스토리지(20)에 DIMM_ID를 출력하여, 실패한 DIMM을 검출하고 DRAM 상태를 받아들이도록 연결된다. 추가적으로, 실패한 DIMM 식별회로(90)는 보정될 수 없는 에러를 나타내는 UError 신호를 출력할 수 있다. 실패한 DIMM 식별회로(90)의 일실시예가 도 18에서 나타나고 아래에서 설명된다.
다음에 도 14를 참조하여, 소거 보정회로(82)의 일실시예의 블럭도가 예시적으로 도시되었다. 다른 실시예도 가능하고, 예상된다. 도 14의 실시예에 있어서, 소거 보정회로(82)는 제어회로(100), 보정회로(102)의 셋트 및 멀티플렉서(multiplexer)(104)를 포함한다. 제어회로(100)는, 실패한 DRAM 지시, DRAM 상태 및 실패한 DIMM 지시를 수신하고, 멀티플렉서(104)에 대한 선택 제어 및 DoCorrect 신호(컬럼당 1개)의 셋트를 제공하기 위해 보정회로(102)에 연결된다. 멀티플렉서(104)는 신드롬(syndrome) 계산회로(84)로부터 클래스 신드롬 및 보조 신드롬을 수신하고, 신드롬 비트의 셋트를 제공하기 위해 보정회로(102)에 연결된다. 보정회로(102)는 AND 회로(80)로부터 입력 비트를 수신하고, 출력 비트를 내부 및 회전에러 신드롬 계산회로(86)로 출력하기 위해 단일 에러 식별/보정회로(92)에 연결된다.
멀티플렉서(104)는 DIMM 실패가 검출되었는지 아닌지에 따라 클래스 신드롬과 보조 신드롬(4×8 어레이를 형성하기 위해 4번 반복된다) 사이에서 선택하도록구성되어 있다. 즉, DIMM 실패가 검출되면(DRAM의 상태가 스테이트_1D 또는 스테이스_2RD), 제어회로(100)는 멀티플렉서(104)를 통해 클래스 신드롬을 선택하고, 그렇지 않으면 멀티플렉서(104)를 통해 보조 신드롬을 선택한다.
제어회로(100)는 DoCorrect 신호도 생성하기 위해 구성되어 있다. 상술한 바와 같이, 컬럼당 1개의 DoCorrect 신호가 생성된다. 주장된 DoCorrect 신호는 보정(데이터의 재구성)이 대응하는 컬럼에서 실행되는 것을 나타낸다. DoCorrect 신호는 다음과 같이 생성된다: DRAM 상태가 스테이트_1이면, DRAM 또는 DIMM 실패는 전혀 검출되지 않고, DoCorrect 신호가 주장되지 않는다. DRAM 상태가 스테이트_1R이면, DRAM 실패가 검출되며, 이 코드 워드는 아직 기록되지 않고, 그러므로 실패한 DRAM 지시에 의해 표시된 컬럼용 DoCorrect 신호가 주장된다(그리고 다른 DoCorrect 신호는 주장되지 않는다). 실패한 DRAM이 DRAM(36~39)중 하나이면, DoCorrect 신호가 주장되지 않는다. DRAM 상태가 스테이트_2R이면, DRAM 실패가 검출되며, 이 코드 워드는 기록되고(실패한 DRAM 데이터를 컬럼 0에 저장한다), 그러므로 데이터는 재구성을 필요로 하지 않는다. 따라서, DoCorrect 신호가 주장되지 않는다. DRAM 상태가 스테이트_1D 또는 스테이트_2RD이면, DIMM 실패가 검출된다.실패한 DIMM 지시에 의해 표시된 실패한 DIMM내의 DRAM용 DoCorrect 신호가 주장된다(그리고 다른 DoCorrect 신호는 주장되지 않는다).
입력 비트 [i][j], 0〈i〈35, 0〈j〈7에 대응하는 전형적인 보정회로(102A)가 도 14에 도시되어 있다. 유사한 회로가 각각의 i 및 각각의 j를 위해 포함된다. 회로(102A)는 클래스(i mod 4) 및 로(row) 숫자(j)를 위한 신드롬 비트, 컬럼 숫자를 위한 DoCorrect 신호 및 로(row)와 컬럼(column)을 위한 입력 비트를 수신한다. DoCorrect 신호가 주장되고, 신드롬 비트가 주장되면, 입력 비트는 반전된다. 그렇지 않으면, 입력 비트는 변경되지 않은채 통과된다. AND 게이트와 XOR 게이트가 도 14에 도시되어 있지만, 다른 실시예는 소망하는 바와 같이, 신드롬 비트와 DoCorrect 신호(즉, 이진수 1 또는 이진수 0으로 주장되어 정의된다) 및 모든 불(Boolean) 등가물에서 주장된 정의에 따라 다른 게이트를 사용한다.
신드롬 비트는 어레이의 주어진 로에서 각 비트(보조 체크비트를 포함한다)의 XOR이기 때문에, 신드롬 비트는 실패한 컬럼에서의 비트가 실패한 컬럼에서 데이터를 재구성하기 위해 플립(flip)되는 것을 나타낸다. 사실상, 보정회로(102A)는 실패한 컬럼을 2회 XOR함으로써(실패한 컬럼의 보정 컨텐츠를 재생성하기 위해 보정회로(102A)에서 한번 더 보조 신드롬을 생성한다) 실패한 컬럼을 제외하고 상호간 컬럼의 XOR을 수행한다. 유사하게, 클래스 신드롬 비트가 어레이의 주어진 로 및 동일한 클래스에서 각 비트(보조 체크비트 및 아웃터 체크비트를 포함한다)의 XOR이기 때문에, 클래스 신드롬 비트는 실패한 DIMM에 대응하는 실패한 컬럼에서의 비트가 클래스에 기초하여 이들 실패한 컬럼에서 데이터를 재구성하기 위해 플립(flip)되는 것을 나타낸다.
다음에 도 15를 참조하여, 단일 에러 식별/보정회로(92)의 일실시예의 블럭도가 예시적으로 도시되었다. 다른 실시예도 가능하고, 예상된다. 도 15의 실시예에 있어서, 단일 에러 식별/보정회로(92)는 헤더 에일리어스(alias) 생성회로(110), 헤더 에일리어스 계산회로(112), 에러 식별회로(114), 비트단위(bitwise) XOR 회로(116), 신드롬 계산회로(118) 및 제어회로(120)를 포함한다. 헤더 에일리어스 생성회로(110)는 실패한 DRAM 및 실패한 DIMM 지시 및 DRAM 상태를 수신하도록 연결되고, 에러 식별회로(114)용 계산된 헤더 에일리어스(도 15에서 C_Header_Alias)의 셋트를 생성하는, 헤더 에일리어스 계산회로(112)용 4개의 헤더 에일리어스(도 15에서 Header_Alias)의 셋트를 생성하도록 구성되며, 내부 및 회전 에러 신드롬 계산회로(86)로부터 내부 신드롬과 제어회로(120)로부터 AllowMatch 신호의 셋트를 수신한다. 제어회로(120)는 실패한 DRAM 지시, 실패한 DIMM 지시 및 DRAM 상태에 응답하는 AllowMatch 신호를 생성한다. 에러 식별회로(114)는 에러 어레이를 생성하여 신드롬 계산회로(118) 및 비트 단위 XOR 회로(116)에 제공한다. 비트 단위 XOR 회로(116)는 소거 보정회로(82)에서 데이터의 36x8 어레이(도 14에서 출력비트)를 수신하고, 단일 에러 에일리어스 및 재배치회로(94)를 위해 데이터의 36x8 어레이를 생성한다. 신드롬 계산회로(118)는 단일 에러 에일리어스 및 재배치회로(94)를 위해 클래스 신드롬 및 보조 신드롬을 계산한다. 헤더 에일리어스 계산회로는 실패한 DRAM 지시를 수신하기 위해 연결된다.
일반적으로, 단일 에러 식별/보정회로(92)는 소거 보정회로(82)에 의한 데이터 재구성에 앞서 코드 워드에 존재하는 단일 비트 에러를 검출하여 보정하기 위해 구성된다. 소거 보정회로(82)의 동작은 단일 비트 에러를 재구성된 데이터로 투입함으로써 생성되고, 그 결과 신드롬은 단일 비트 에러와 그 투입의 XOR이 되므로, 헤더 에일리어스의 셋트는 실패한 DRAM 또는 실패한 DIMM에 의거해서 생성된다. 헤더는 로 0에 대한 내부 체크비트의 정의이다(즉, 각 컬럼에 대해 도 10에서 이 실행이 도시되었다).
특히, 헤더 에일리어스 생성회로(110)는 헤더 에일리어스의 셋트를 출력한다. 이들 헤더 에일리어스는 대개 실패한 컬럼(또는 DIMM 실패용 컬럼)에 대응한다. 헤더 에일리어스는 DIMM 실패를 제공하기 위해 클래스에 기초하여 생성되지만, DIMM 실패가 검출되지 않으면 동일한 헤더 에일리어스가 된다. 특히, 헤더 에일리어스는 다음과 같이 생성된다: DRAM 상태가 스테이트_1이면, DRAM 또는 DIMM 실패는 전혀 검출되지 않고, 헤더 에일리어스는 0이다. DRAM 상태가 스테이트_1R이면, DRAM 실패가 식별되며, 현재의 코드 워드는 인코딩 #1에 있다. 실패한 DRAM에 대응하는 헤더는 4개의 헤더 에일리어스와 같이, 4번 반복해서 출력된다. DRAM 상태가 스테이트_1D이면, DIMM 실패가 검출되고, 현재의 코드 워드는 인코딩 #1에 있다. 실패한 DIMM상에서 DRAM을 위한 4개의 헤더 에일리어스는, DIMM_0가 실패이면, 컬럼 0 헤더가 0인 것을 제외하고 생성된다(컬럼 0은 인코딩 #1에서 내부 체크비트에 포함되지 않기 때문이다). DRAM 상태가 스테이트_2R이면, DRAM 실패이지만 DIMM 실패는 아니며, 현재의 코드 워드는 인코딩 #2에 있다. 데이터의 재구성이 없으므로, 단일 비트 에러 에일리어스도 없고, 4개의 헤더 에일리어스는 0으로 설정된다. DRAM 상태가 스테이트_2RD이면, 이전 DRAM 실패, DIMM 실패가 있고, 현재의 코드 워드는 인코딩 #2에 있다. 실패한 DIMM의 DRAM을 위해 4개의 헤더 에일리어스가 생성된다. 실패한 DIMM이 DIMM_0이고, 실패한 DRAM이 DRAM 1 또는 37이 아니면, 헤더 0은 클래스 0을 위해 사용된다. 실패한 DIMM이 DIMM_0이고, 실패한 DRAM이 DRAM 1 또는 37이면, 헤더 !0은 클래스 0을 위해 사용된다. 그렇지 않으면, 도 10의 테이블에서 리스트된 헤더가 사용된다.
일실시예에 있어서, 헤더 에일리어스 생성회로(110)는 한쌍의 ROM을 사용한다. 제1 ROM은 실패한 DRAM 지시 및 인코딩이 인코딩 #1에 있는지 아닌지에 의거해서 헤더를 출력한다. 실패한 DRAM이 없으면, 실패한 DRAM은 0 또는 36-39이거나 또는 인코딩이 인코딩 #2이며, 제1 ROM은 0을 출력한다. 그렇지 않으면, 제1 ROM은 실패한 DRAM에 대응하는 헤더를 출력한다. 제2 ROM은 실패한 DRAM 지시, 실패한 DIMM 지시 및 인코딩이 인코디 #1인지 아닌지에 따라 4개의 헤더(각 클래스당 1개)를 출력한다. 실패한 DIMM이 없거나 또는 실패한 DIMM이 DIMM_9이면, 제2 ROM은 0을 출력한다. 그렇지 않으면, 제2 ROM은 상술한 바와 같이 스테이트_1D 또는 스테이트_2RD로 정의된 헤더를 출력한다. 멀티플렉서의 셋트는, 각각 제1 ROM의 출력과 제2 ROM으로부터 헤더중 하나를 수신한다. 멀티플렉서는 제2 ROM의 출력이 선택되는 경우인 DRAM 상태가 스테이트_1D 또는 2RD를 제외하고 제1 ROM의 출력을 선택한다. 다른 실시예에서는, 다른 ROM, 하드 코드된 회로 또는 소망의 조합을 사용한다.
헤더 에일리어스 계산회로(112)는, 헤더 에일리어스 생성회로로부터 헤더 에일리어스를 수신하여 어레이의 각 컬럼 0-35를 위해 헤더 에일리어스를 생성한다. 논리적으로, 계산된 헤더 에일리어스는 그 컬럼(Header_Alias[컬럼 mod 4][0:11])에 대응하는 헤더 에일리어스와 그 컬럼(도 10에서, 헤터 "!0"이 선택되는 경우인 실패한 DRAM 지시가 DRAM 1 또는 DRAM 37을 나타내는 것을 제외하고, 컬럼 0의 헤더는 "0"으로서 선택된다.)에 대응하는 헤더의 XOR이다. 이것은 논리적으로 XOR이지만, 커럼에 대응하는 헤더가 고정되므로, 헤더 에일리어스 계산회로(112)는, 헤더 "0"와 헤더 "!0" 사이의 비트 차이를 설명하기 이해 추가적인 논리를 포함하는 컬럼 0를 제외하고,입력 비트를 반전하여 계산된 헤더 에일리어스를 생성한다.
에러 식별회로(114)는 계산된 헤더 에일리어스(C_Header_Alias)를 수신한다. 어레이에서 로마다, 에러 식별회로는 주기적으로 좌측으로 최상위 11 비트를 이동시킨다(12번째 비트 대신에 DED비트를 남긴다). 이 후, 그 결과로 생성된 값이 내부 신드롬과 비교된다. 예를 들면, 내부 신드롬과 결과는 XOR된다. 결과는 그 컬럼을 위해 AllowMatch 신호로 완화되어, 에러 식별회로(114)에 의해 수신된다. 즉, 비교는 AllowMatch 신호가 주장되고, XOR이 0으로 귀착되는 매치(match)와 그렇지 않은 비매치(non-match)를 나타낸다. 결과는, 에러[0:35][0:7] 출력 매트릭스에서 대응하는 로 및 컬럼을 위한 비트로서 기록된다. 출력 매트릭스는 많아야 하나의 표시된 에러를 갖진다. 특히, 비트 단위 XOR 회로(116)는 에러 출력 매트릭스를 수신하고, 소거 보정회로(82)에서 수신된 데이터를 가지고 매트릭스를 비트 단위로 XOR하여 단일 에러 에일리어스 및 재배치 회로(94)에 대해서 출력데이터 36x8를 생성한다.
신드롬 계산회로(118)도, 도 13에서 신드롬 계산회로(84)에 의해 계산되지만 에러 매트릭스에 걸쳐 생성되는 것과 유사하게, 에러 출력 매트릭스를 수신하여 클래스 신드롬 및 보조 신드롬을 계산한다. 이들 신드롬은, 다일 비트 에러(보조 신드롬)의 로 위치 및 단일 비트 에러(클래스 신드롬)의 DIMM내의 위치를 나타내고, 이렇게 각각 재구성된 컬럼 또는 DIMM으로 단일 비트 에러의 투입을 설정한다. 보조 신드롬 및 클래스 신드롬은 단일 에러 에일리어스 및 재배치 회로(94)로 넘겨진다. 이들 신드롬은 에러 출력 매트릭스에서 논리적으로 비트의 XOR이고, 에러 출력 매트릭스에서 많아야 하나가 설정된다는 것에 주의한다. 따라서, 신드롬 계산회로(118)는 논리적인 비트의 OR을 실행하여 보조 신드롬을 계산한다. 논리적인 비트의 OR을 수행하는 어떤 회로도 사용된다. 하나의 실행에 있어서, 클래스 신드롬이 계산된 후 보조 신드롬은 클래스 신드롬의 논리적인 컬럼의 OR(로에 의거해서)로서 계산된다.
제어회로(120)는 DRAM 상태, 실패한 DRAM 지시 및 실패한 DIMM 지시에 의거해서 AllowCorrect 신호를 생성한다. 일반적으로, 제어회로(120)는 실패한 DRAM 걸럼 또는 실패한 DIMM의 일부인 컬럼(이들 컬럼은 재구성되고, 이들 컬럼으로 단일 비트 에러를 투입한다)을 제외한 어떠한 컬럼에서도 보정을 허용한다. 특히, 제어회로(120)는 다음과 같이 AllowCorrect 신호를 생성한다: DRAM 상태가 스테이트_1이면, 데이터 재구성은 없다. 컬럼 0은 인코딩 #1에서 내부 체크비트에 의해 커버되지 않으므로, AllowCorrect[0]를 제외한 각각의 AllowCorrect 신호가 주장된다. DRAM 상태가 스테이트_1R이면, 실패한 DRAM이 있지만 코드 워드는 여전히 인코딩 #1에 있다. AllowCorrect[0] 및 실패한 DRAM에 대응하는 AllowCorrect 신호를 제외한 AllowCorrect 신호가 주장된다. DRAM 상태가 스테이트_2R이면, 실패한 DRAM이 있고, 코드 워드는 인코딩 #2에 있다. 실패한 DRAM 지시에 의해 표시된 컬럼을 제외한, AllowCorrect 신호가 주장된다(AllowCorrect[0] 포함). DRAM 상태가 스테이트_1D 또는 스테이트_2RD이면, DIMM 실패가 있다. 실패한 DIMM에 대응하는 컬럼을제외한, AllowCorrect 신호가 주장된다.
도 13에 도시된 바와 같이, 단일 에러 식별/보정회로(92)는 보정할 수 없는 에러가 검출되면 UError 신호도 주장한다. 특히, 이 실행에 있어서, 내부 신드롬이 0이 아니고(단일 에러비트 존재를 표시), 에러 출력 매트릭스가 0(에러가 위치되지 않은 것을 표시)이면, UError 신호도 주장된다.
다음에 도 16을 참조하여, 단일 에러 에일리어스 및 재비치 회로(94)의 일실시예의 블럭도가 예시적으로 도시되었다. 도 16에 도시된 바와 같이, 단일 에러 에일리어스 및 재비치 회로(94)는 제어회로(130), 컬럼 0 회로(132)의 셋트, 보정회로(134)의 셋트 및 멀티플렉서(136)를 포함한다.
제어회로(130)는, 실패한 DRAM 지시, DRAM 상태 및 실패한 DIMM 지시를 수신하기 위해 연결되고, 멀티플렉서(136)에 대한 선택 제어, 컬럼 0 회로(132)용 DoAlias[0][0] 신호 및 보정회로(134)용 DoAlias[0:1][1:35] 신호를 생성하기 위해 구성된다. 멀티플렉서(136)는 단일 에러 식별/보정회로(92)로부터 클래스 신드롬 및 보조 신드롬을 수신하기 위해 연결되고, 컬럼 0 회로 및 보정회로(134)용 신드롬 비트[0:3][0:7]의 4x8 셋트를 생성하기 위해 구성된다. 컬럼 0 회로(132)는 단일 에러 식별/보정회로(92)로부터 컬럼 0를 위한 입력비트를 수신하고, 나머지 입력비트는 보정회로(134)에 제공된다. 컬럼 0 회로(132)는 컬럼 0 비트(컬럼 0[0:7])의 셋트를 보정회로(134)로 출력한다.
일반적으로, 단일 에러 조정 및 재배치 회로(94)는 재구성된 컬럼 또는 컬럼으로 투입되는 단일 에러 비트를 보정하기 위해 구성되고, 코드 워드가 인코딩 #2에 있으면, 컬럼 0 데이터를 원래의 컬럼으로 전송한다. 이렇게, 보정회로(134)는 2개중 하나의 보정을 행한다. DoAlias 신호는 2개 유형의 보정을 제어한다. 특히, DoAlias[0][1:35] 신호는 단일 비트 에러보정이 대응하는 신드롬 비트에 의거해서 행해졌는지 아닌지를 제어하고, DoAlias[1][1:35] 신호는 컬럼 0 데이터가 입력데이터 대신 출력(아마 보정되었다)으로서 선택되었는지를 판정한다. 컬럼 1은 단지 체크비트를 저장하고, 이렇게 이들 비트는 출력될 필요가 없으므로, 컬럼 1 회로는 제거된다는 것에 주의한다. 몇가지 실시예에 있어서, 컬럼 0 회로는 멀티플렉서(136) 대신에 컬럼 0에 대응하는 클래스 신드롬을 수신하여, 어느 정도의 지연으로 균형을 유지한다.
제어회로(130)는 DIMM 실패가 발생되었는지 아닌지에 따라 멀티플렉서(136)를 통해서 클래스 신드롬 또는 보조 신드롬(4회 반복)을 선택한다. 즉, DRAM 상태가 스테이트_1D 또는 스테이트_2RD이면, 제어회로(130)는 신드롬 비트[0:3][0:7]로서 멀티플렉서(136)를 통해서 클래스 신드롬을 선택하고, 그렇지 않으면 신드롬 비트[0:3][0:7]로서 멀티플렉서(136)를 통해서 보조 신드롬의 4개 복사본을 선택한다.
컬럼 0 회로(132)는 컬럼 0에 투입된 단일 비트 에러를 보정하고, 컬럼 0 데이터를 보정회로(134)로 전송한다. 전형적인 컬럼 0 회로(132A)가 본 실시예에서 0〈j〈7인 컬럼 0의 j번째 로를 위해 도 16에 도시되었다. 다른 유사 회로가 각각의 로에 사용된다. DoAlias[0][0] 신호가 주장되고, 신드롬 비트[0][j]가 1개이면, 컬럼 0 회로(132A)는 입력비트[0][j]를 반전하여 컬럼 0[j]을 생산한다. 그렇지 않으면, 입력비트[0][j]는 컬럼 0[j] 출력으로서 공급된다. 구체적인 논리회로(132A)가 도 16에 도시되었지만, 회로의 어떤 불 등가물도 사용된다. 게다가, 신드롬 비트 및/또는 DoAlias 신호가 하이(high) 또는 로우(low)가 주장되도록 정의되는 것에 따라 다른 회로가 사용된다.
전형적인 보정회로(134A)가 본 실시예에서 0〈j〈7, 1〈i〈35일때 출력비트의 i번째 컬럼과 j번째 로를 위해 도 16에 도시되었다. 유사한 회로가 각각의 로 및 컬럼을 위해 사용된다. DoAlias[1][1] 신호가 주장되면, 컬럼 0[j] 비트는 멀티플렉서를 통해 선택되고, 이렇게 컬럼 0 데이터를 컬럼 i로 이동시킨다. DoAlias[1][1] 신호가 주장되지 않으면, 입력비트[i][j] 또는 그 반전(DoAlias[0][j] 신호가 주장되고, 신드롬 비트[i mod 4][j]가 1개이면)이 출력(이렇게 투입될 수 있는 단일 비트 에러를 보정)으로서 선택된다. 구체적인 논리회로(134A)가 도 16에 도시되었지만, 회로의 어떤 불 등가물도 사용된다. 게다가, 신드롬 비트 및/또는 DoAlias 신호가 하이(high) 또는 로우(low)가 주장되도록 정의되는 것에 따라 다른 회로가 사용된다.
제어회로(130)는 다음과 같이 DoAlias 신호를 생성한다: DRAM 상태가 스테이트_1이면, 재구성 데이터가 없고, 그러므로 DoAlias[0] 및 DoAlias[1] 신호는 주장되지 않는다. DRAM 상태가 스테이트_1R이면, DRAM 실패가 있고, 코드 워드는 여전히 인코딩 #1에 있다. 실패한 DRAM을 위한 DoAlias[0] 신호가 주장되어 컬럼에서 투입된 단일 비트 에러의 보정을 허용하고, DoAlias[1] 신호는 주장되지 않는다. DRAM 상태가 스테이트_2R이면, DRAM 실패가 있고, 코드 워드는 인코딩 #2에 있다.재구성 데이터가 없고, 투입된 단일 비트 에러가 없으므로 DoAlias[0] 신호는 주장되지 않는다. 실패한 DRAM이 DRAM 1-35중 하나이면, 실패한 DRAM에 대응하는 DoAlias[1] 신호는 주장되고, 다른 DoAlias[1] 신호는 주장되지 않는다. 실패한 DRAM이 DRAM 35-39중 하나이면, DIMM에서 대응하는 DRAM의 DoAlias[1] 신호는 주장되고, 다른 DoAlias[1] 신호는 주장되지 않는다. DRAM 상태가 스테이트_1D이면, DIMM 실패가 있고, 코드 워드는 인코딩 #1에 있다. 실패한 DIMM을 위한 DoAlias[0] 신호가 주장되어 재구성된 데이터에서 투입된 단일 비트 에러의 보정을 허용하고, 나머지 DoAlias[0] 신호는 주장되지 않으며, DoAlias[1] 신호는 주장되지 않는다. DRAM 상태가 스테이트_2RD이면, DIMM 실패, 이전 DRAM 실패가 있고, 코드 워드는 인코딩 #2에 있다. 실패한 DIMM을 위한 DoAlias[0] 신호가 주장되어 재구성된 데이터에서 투입된 단일 비트 에러의 보정을 허용하고, 나머지 DoAlias[0] 신호는 주장되지 않는다. 실패한 DRAM이 DRAM 1-35중 하나이면, 실패한 DRAM에 대응하는 DoAlias[1] 신호가 주장되고, 다른 DoAlias[1] 신호는 주장되지 않는다. 실패한 DRAM이 DRAM 35-39중 하나이면, DIMM에서 대응하는 DRAM의 DoAlias[1] 신호가 주장되고, 다른 DoAlias[1] 신호는 주장되지 않는다.
다음에 도 17을 참조하여, 실패한 DRAM 식별회로(88)의 일실시예의 블럭도가 예시적으로 도시되었다. 다른 실시예가 가능하여, 예상된다.
실패한 DRAM 식별회로(88)는 DRAM 1-35의 각각의 XOR 트리의 셋트를 포함한다(즉, DRAM 1에 대한 Dram_1 XOR 트리(140A)와 DRAM 35에 대한 Dram_35 XOR 트리(140N)). XOR 트리는 신드롬 계산회로(84)에 의해 계산된 보조 신드롬을 수신하고, 대응하는 DRAM이 실패되는(도 10에 도시된 대응하는 헤더에 의거해서) 결과 보조 신드롬으로 귀착되는 내부 신드롬을 계산하기 위해 연결된다. 보조 신드롬은 로가 실패한 것을 나타낸다. 각각의 DRAM에 대한 XOR 트리는 DRAM에 대응하는 컬럼내에 존재하는 각각의 로 에러를 가정할 때 발생되는 내부 신드롬을 계산한다. 주어진 내부 체크비트에 의해 커버된 에러를 갖는 로가 대응하는 컬럼이면, XOR 트리에 대응하는 입력비트가 주장된다. XOR 트리의 결과는 각각의 XOR 트리에 연결된 비교기를 이용하여 내부 신드롬과 비교된 후, 내부 신드롬을 수신하기 위해 연결된다(즉, 도 17에서 비교기 142A 및 142N). XOR 트리의 결과가 내부 신드롬과 같고, 보조 신드롬이 0이 아니면, 그때 XOR 트리에 대응하는 DRAM 1-35는 실패한 DRAM으로서 식별된다. 제2 모드에 있어서, 회전 신드롬은 보조 신드롬과 비교되어, 최상위 비트에서 0이 추가되고, 컬럼 위치에 의거해서 좌측으로 회전된다(참조 부호 148A-148N). 비교는 모든 비트가 같게 되거나 모든 비트가 같게 되지 않는다(회전체크비트는 각각의 비트를 변경하거나 또는 수정되지 않은 각각의 비트를 남겨 두는, 나머지 비트로 9번째 비트를 XOR하는 것에 의해 생성되기 때문이다). 이들 출력은 실패한 DRAM으로서 DRAM 1-DRAM 35의 식별을 검증한다. 제1 모드에 있어서, 비교기(150A-150N)의 출력은 결과에 영향을 미치지 않도록 이진수 1이 강제된다. AND 게이트(152A, 152N)는 상술한 DRAM 1 및 35의 판정을 나타낸다.
제1 모드에 있어서, DRAM 0은 보조 신드롬이 0이 아니고(0 체크회로(146)), 내부 신드롬이 0(0 체크회로(144))이면 실패한 DRAM으로서 식별된다. 제2 모드에 있어서, 비교지(150A)의 출력은 DRAM 0의 선택을 검증하기 위해 사용된다. AND 게이트(154)는 실패한 DRAM으로서 DRAM 0을 식별하는 것을 나타낸다.
제2 모드에 있어서, DRAM 36-39중 하나사 실패한 DRAM으로서 식별된다. 이것은 내부 신드롬이 0(보조 신드롬으로부터 간접적으로 0이되고, 0 체크회로(146))이고, 회전 신드롬은 0(비교기 (156))이며, IsNz 신호중 하나가 주장되면(AND 게이트 (158) 및 AND 게이트(160A-160D)), 발생한다. 제어회로(162)는 실패한 DRAM신호를 수신하여 실패한 DRAM 신호뿐만 아니라 실패한 DRAM을 식별하는 DRAM_ID를 생성한다.
실패한 DRAM 식별회로(88)는, DRAM 상태가 스테이트_1R이고, 단일 에러 식별/보정회로(92)에 의해 UError 신호가 주장되거나 또는 내부 신드롬이 0이고, 하나 이상의 IsNz 신호가 주장되면, 실패한 DRAM을 식별한다는 것에 주의한다. 또한, 제어회로(162)는 실패한 DRAM 식별회로(88)가 실패한 DRAM을 식별하지만 도 17에서 주장되는 DRAM_XX Fail 신호가 없으면, 보정할 수 없는 에러신호(UError)를 주장한다.
도 17에 구체적인 논리 게이트가 도시되었지만, 다른 논리 게이트도 사용된다는 것에 주의한다. 이들 게이트의 불 등가물도 사용된다.
다음에 도 18을 참조하여, 실패한 DIMM 식별회로(90)의 일실시예의 블럭도가 예시적으로 도시되었다. 다른 실시예도 가능하고, 예상된다.
DRAM식별회로(8)와 유사하게, 실패한 DIMM 식별회로(90)는 DIMM에서 각 컬럼에 대한 헤더에 의거해서, DIMM이 실패로 되는 결과와 신드롬 계산회로(84)에 의해 계산된 클래스 신드롬으로 귀착되는 내부 신드롬을 생성하기 위해 DIMM_9를 제외한각각의 DIMM에 대한 XOR 트리(즉, 도 18에서 DIMM_0용 XOR 트리(170A) 및 DIMM_8용 XOR 트리(170N))를 사용한다. XOR 트리의 결과가 내부 신드롬과 비교된다(비교기(172A, 172N)). 또한, XOR 트리(170A)는 인코딩 #1이 사용되고 있는지 아니지를 나타내는 입력(Enc1)을 수신한다. 인코딩 #1이 사용되면, 컬럼 0의 헤더는 0이다. 그러므로, 컬럼 0에 대응하는 클래스 신드롬의 일부는 인코딩 #1에서 무시된다. 예를 들면, 클래스 신드롬의 일부는 Enc1 입력의 반전과 논리적으로 AND 된다. 내부 체크비트 생성에 포함되지 않는 DIMM_9 때문에, 내부 신드롬은 0을 위해 체크된다(0 체크회로(174)).
추가적으로, 클래스 신드롬은 이진수 0의 9번째 로를 추가하고, 회전 신드롬의 가각의 비트를 생산하기 위해 각 대각선에 다른 비트를 XOR하는 것에 의해, 회전 신드롬을 사용하는데 사용된다. 회전 신드롬 생성은 회전 신드롬 생성장치(176)에 의해 수행되고, 클래스 신드롬을 수신하고, 입력을 회전장치(178A-178N)에 제공하기 위해 연결된다. 각각의 회전장치는 회전 에러 신드롬(DIMM_0을 위해 0, DOMM_1을 위해 4 등 DIMM_8을 위해 32까지)을 회전시킨다. 실패한 DRAM 식별장치(88)와 유사하게, 회전된 신드롬은 균등성 또는 각 비트에서의 차별성(비교기(180A-180N))에 대해서 실패한 DIMM 식별회로에 공급된 회전 신드롬과 비교된다. 회전 시드롬은 인코딩 #2에서 이용할 수 없으므로(DRAM0은 실패한 DRAM으로부터 데이터를 저장한다), 비교기(180A-180N)는 인코딩 #1에서 동작되어 인코딩 #2에서 균등성을 나타내기 위해 강제된다.
0 체크회로(182)는 클래스 신드롬이 0인지 아닌지를 체크하기 위해 포함된다. 클래스 신드롬이 0이면, 실패한 DRAM 식별회로(90)는 실패한 DIMM을 검출하지 못한다. DIMM 0-8중 하나는 클래스 신드롬이 0이 아니고, XOR 트리 결과가 내부 신드롬에 필적하며, (인코딩 #1에서) 회전 신드롬이 DIMM(즉, DIMM_0 및 DIMM_8을 위한 AND 게이트(184A, 184N))을 식별하면, 실패한 DIMM으로서 식별된다. DIMM_9는 클래스 신드롬이 0이 아니고, 내부 신드롬은 0이며, 회전 신드롬이 0(또는 모두 1--비교기(186))이면, 실패한 DIMM으로서 식별된다. AND 게이트(188)는 실패한 DIMM으로서 DIMM_9의 검출을 나타낸다.
제어회로(190)는, AND 게이트(184A, 184N) 및 AND 게이트(188)로부터 DIMM 실패신호를 수신하고, 실패한 DIMM의 DIMM_ID를 생성한다. 일실시예에 있어서, 실패한 DIMM 식별회로(90)는 실패한 DIMM을 다음과 같이 식별하는데 사용되는 것에 주의한다: DRAM 상태가 스테이트_1이면, 실패한 DIMM 식별회로(90)는 UError이 단일 에러 식별/보정회로(92) 및 실패한 DRAM 식별회로(88)에 의해 신호될 때 사용된다. DRAM 상태가 스테이트_1R 또는 스테이트_2R이면, 실패한 DIMM 식별회로(90)는 UError이 단일 에러 식별/보정회로(92)에 의해 신호될 때 사용된다. 제어회로(190)는 DIMM 실패가 이미 검출되었기 때문에, DRAM 상태가 스테이트_1D 또는 스테이트_2RD이고, 단일 에러 식별/보정회로(92)가 UError을 신호하면, 보정할 수 없는 에러(UError)를 생성한다. 또한, 제어회로(190)는 DRAM 상태가 스테이트_1R이고, 실패한 DRAM을 포함하는 DIMM이 아닌 DIMM 실패가 검출되면 UError을 생성한다. 추가적으로, 제어회로(190)는 실패한 DIMM을 위치시키고, DIMM 실패신호가 주장되지 않으나 또는 1개 이상의 DIMM 실패신호가 주장되는 것으로 가정하면 UError을 생성한다. 일실시예에 있어서, DIMM 실패는 1개 이상의 DIMM 실패가 신호되는 경우의 수를 줄이기 위해 캐시 라인의 양쪽 코드 워드를 교차해서 검출된다. 이와 같은 실시예에 있어서, 양쪽 코드 워드에서 실패로서 검출되는 DIMM은 실패한 DIMM으로서 표시되고, UError는 양쪽 코드 워드에서 실패로서 동일한 2개 이상의 DIMM을 검출하면 신호된다.
구체적인 논리 게이트가 도 18에 도시되지만, 다른 논리 게이트도 사용된다는 것에 주의한다. 또한, 이들 게이트의 불 등가물도 사용된다.
도 17 및 도 18에 도시된 XOR 트리 및 대응하는 비교기는, 바람직하게 균등성을 나타내기 위해 그 출력상에서 12 이진수 1의 벡터를 생산하는 조합회로에 병합되는 것에 주의한다.
도 8-18에 도시된 전형적인 실행은 구체적인 크기와 수치를 사용하지만(즉, DRAM에서 코드 워드당 8비트, DIMM에서 4개의 DRAM, 뱅크에서 9 또는 10개의 DIMM) , 다른 실로에서는 바람직하게 이들 크기 및 수치를 변경할 수 있다.
용어 "주기적인 이동"은 상기에서 사용되었다는 것에 주의한다. 값의 주기적인 이동은, 값을 벗어나 이동된 비트가 값의 반대측 단부에 다시 기록되는 이동이다. 예를 들면, 주기적인 좌측 이동은 최상위 위치에서 벗어나 이동된 비트 또는 비트를 취하여, 최하위 비트에 다시 기록하는 것이다. 또한, 주기적인 이동은 회전으로도 언급된다.
다음에 도 19를 참조하여, 통신 시스템의 일실시예의 블럭도가 도시되었다. 다른 실시예도 가능하며, 고려된다. 도 19의 실시예에 있어서, 통신 시스템은 소스장치(180) 및 목적(destination) 장치(182)를 포함한다. 소스 장치(180)는 체크비트 인코더 회로(16)(도 1-18에 관한 상기 설명과 유사하다) 및 실패한 경로 표시를 저장하는 지속적인 상태 스토리지(190)를 포함한다. 체크비트 인코더 회로(16)는 목적지 장치(182)로부터(특히, ECC 회로(18)로부터) 경로 실패 표시를 수신하도록 연결되는, 지속적인 상태 스토리지(190)에 연결된다. 목적지 장치(182)는 ECC 회로(18)(도 1-18에 관한 상기 설명과 유사하다)를 포함한다. 체크비트 인코더 회로(16)는 소스 장치(180)내에서 인코드되지 않은 데이터를 수신하도록 연결되며, 전송매체(184)를 통해서 목적지 장치(182)로 전송하기 위한 하나 이상의 코드 워드(데이터 및 체크비트를 포함)를 포함하는 패킷을 인코드하도록 구성되어 있다. ECC 회로(18)는 코드 워드를 디코드하고(체크비트 정의에 따라서 어떠한 에러도 검출하고, 검출된 에러를 임의로 보정한다), 대응하는 내부 수신데이터를 목적지 장치(182)로 넘긴다. 코드 워드로부터 스위치(186A-186D)중 하나를 통해서 전송된 데이터는 "슬라이스(slice)"로서 언급된다.
도시된 실시예에 있어서, 전송매체(184)는 소스 장치(180)와 스위치(186)의 셋트 사이에서 연결된 도체와 스위치(186)와 목적지 장치(182) 사이에서 연결된 도체를 포함한다. 예를 들면, 도 19는 소스 장치(180)와 스위치(186A) 사이의 도체(188A)와; 소스 장치(180)와 스위치(186B) 사이의 도체(188B)와; 소스 장치(180)와 스위치(186C) 사이의 도체(188C) 및 소스 장치(180)와 스위치(186D) 사이의 도체(188D)를 나타낸다. 추가적으로, 도 19는 스위치(186A)와 목적지 장치(182) 사이의 도체(188E)와; 스위치(186B)dhk 목적지 장치(182) 사이의도체(188F)와; 스위치(186C)와 목적지 장치(182) 사이의 도체(188G) 및 스위치(186D)와 목적지 장치(182) 사이의 도체(188H)를 나타낸다. 각각의 도체(188A-188H)는 2개 이상의 도체를 포함한다(즉, 각각의 스위치(186A-186D)는 소스 장치(180)로부터 적어도 2개의 도체 및 목적지 장치(182)로부터 적어도 2개의 도체에 연결된다).
도 20은 전송매체(184)상에서 데이터를 전송하기 위해 사용되는 코드 워드의 일실시예를 나타낸다. 도 20의 실시예에 있어서, 코드 워드는 로 및 컬럼의 논리 어레이로 배열된다. 각각의 컬럼은 소스 장치(180)와 목적지 장치(182) 사이의 하나의 도전 경로(또는 더 간단히 "경로(path)")에 대응한다. 예를 들면, 도 19에 도시된 실시예에 있어서, 도전 경로는 도체(188A)내의 도체와 도체(188E)내의 대응하는 도체를 포함한다. 그러므로, 도 20에서, 컬럼 0는 경로_0에 대응하고, 컬럼1은 경로_1에 대응하는 등등이다. 코드 워드의 일부를 형성하는 주어진 경로상에서 각각의 전송은 코드 워드의 로이다. 그러므로, 로0은 경로상에서 제1 전송이 되고, 로1은 경로상에서 제2 전송이 되는 등등이다.
도 20의 실시예에 있어서, 어레이의 컬럼은 슬라이스를 나타내기 위해 짙은 대시 라인으로 더 경계가 결정된다(즉, 슬라이스_0, 슬라이스_1, 등등., 슬라이스_p를 통해서). 슬라이스_0은, 예를 들면, 다른 슬라이스가 다른 스위치를 통해서 전송되는 데이터가 되는 동안, 스위치(186A)를 통해서 전송된 데이터가 된다. 슬라이스 실패가 검출되지 않는 실시예에 있어서, 슬라이스 경계기호는 무시된다.
일반적으로, 상술한 메모리 컨트롤러에 의한 체크비트의 다양한 실시예는 도 19의 통신 시스템에서 사용된다. 스위치(186)는 메모리 모듈과 유사한 방식으로 처리되고, 경로는 메모리 장치와 유사한 방식으로 처리된다. 즉, 각각의 스위치(186A-186B)는 체크비트 정의를 위해 메모리 모듈과 유사하게 처리된다. 각각의 경로는 메모리 장치와 유사하게 처리된다. 체크비트는 코드 워드의 어떤 컬럼에서도 운반된다(즉, 컬럼 0은 보조 체크비트를 위해 사용되고, 컬럼1은 내부 체크비트를 위해 사용되며, 컬럼2의 일부는 이중 내부 체크비트를 위해 사용되고, 슬라이스는 외부 체크비트를 위해 임의로 사용된다). 그러므로, 예를 들면, 다양한 실시예에 있어서, 주어진 경로의 실패가 검출되어 보정된다(그리고 임의로 정밀하게 나타낸다). 단일 비트 에러보정은 주어진 경로를 정밀하게 나타내기 이전, 동안 및 이후에 지원된다. 이중 비트 에러검출은 주어진 경로를 정밀하게 나타내기 이전및 이후 양쪽에서 지원된다. 슬라이스가 외부 체크비트를 운반하기 위해 사용되는 시시예에 있어서, 슬라이스의 실패가 검출되어 개연적으로 보정된다. 단일 에러 비트보정 및/또는 이중 비트 에러검출은 이와 같은 실시예에서도 지원된다. 코드 워드에서 비트의 컬럼 값이 사용되지 않은 실시예에 있어서, 그 경로상에서 전송되 비트를 코드 워드에서 사용되지 않은 비트에 위치시킴으로써 경로가 정밀하게 나타난다. 상술한 메모리 컨트롤러의 모든 실시예가 사용된다.
도 19의 실시예에 있어서, ECC 회로(18)는 경로 실패 검출에 응답하여 경로_실패 표시를 소스 장치(180)로 전송한다. 이 경우, 실패 경로는 후속 패킷에 대한 실패 경로의 사용을 중지하고, 실패 경로((즉, 상술한 메모리 장치 실시예와 유사하게, 사용되지 않은 경로 또는 경로 운반 보조 체크비트)상에서 이전에 전송된 비트를 전송하기 위해 다른 경로중 하나를 사용하는 것에 의해, "정밀하게 나타난다(map out)". 다른 실시예에 있어서, 경로_실패 표시를 소스 장치(180)로 전송하는 대신에, 목적지 장치(182)는 서비스 프로세서에게 실패를 알린다. 서비스 프로세서는 실패 경로의 사용을 중단하도록 소스 장치(180)에 알린다(그리고 다른 모든 소스 장치도 실패 경로를 사용할 수 있다).
단일 스위치가 도 19에서 각각의 도체 셋트를 위해 도시되었지만, 각각의 스위치는 실질적으로 소스 장치(180)와 목적지 장치(182) 사이의 계층적인 또는 개인 대개인(P2P) 접속에서 다중 스위치로서 실행된다. 추가적으로, 주어진 스위치가 소스 장치(180)와 목적지 장치(182) 사이에서 연결되도록 도시되었지만, 스위치는 다른 목적지 장치(도 19에 도시되지 않았다)에 추가적으로 접속하여, 소스 장치(180)에서 목적지 장치 중 하나로 패킷을 라우트(route) 한다. 게다가, 다른 실시예에 있어서, 스위치(186A-186D)는 다른 모든 전송회로(즉, 리피터)에 의해 교체된다. 일반적으로, 전송회로는 2개 이상의 도체와 연결된 어떤 회로도 포함하며, 도체상에서 데이터를 전송하도록 구성된다.
다른 실시예에 있어서, 스위치가 전혀 사용되지 않는다(즉, 소스 장치(180)와 목적지 장치(182) 사이에서 개인 대 개인 접속이 된다). 이와 같은 실시예에 있어서, 경로 실패는 메모리 장치 실패와 유사한 방식으로 검출된다.
일단 상술한 설명은 충분히 이해되지만, 수 많은 변동 및 수정이 기술분야의 숙련된 사람들에게 명백해질 것이다. 다음의 청구항은 이와 같은 변동 및 수정을모두 포함하도록 이해될 것이다.

Claims (27)

  1. 복수의 메모리 장치를 포함하는 메모리에 기록되는 데이터 블럭을 수신하도록 연결된 체크비트 인코더 회로로서, 상기 체크비트 인코더 회로는 인코드된 데이터 블럭을 생성하기 위해 복수의 체크비트를 가지고 데이터 블럭을 인코드하도록 구성되고, 상기 복수의 체크비트는 적어도 (i) 상기 복수의 메모리 장치 중 하나의 실패의 검출과 보정, 및 (ii) 상기 복수의 메모리 장치 중 하나의 실패 검출 후에 상기 인코드된 데이터 블럭에서 단일 비트 에러의 검출 및 보정을 제공하도록 정의되며, 상기 메모리 컨트롤러는 상기 인코드된 데이터 블럭을 상기 메모리에 기록하도록 구성되는, 체크비트 인코더 회로와;
    상기 메모리로부터 상기 인코드된 데이터 블럭을 수신하도록 연결되고, 상기 인코드된 데이터 블럭을 디코드하며, 상기 인코드된 데이터 블럭상에서 적어도 (i) 및 (ii)의 검출을 수행하도록 구성된 체크/보정회로를 포함하는, 메모리 컨트롤러.
  2. 제 1 항에 있어서,
    상기 체크/보정회로에 연결된 데이터 리맵핑(remap) 제어회로를 더 포함하고,
    상기 데이터 리맵핑 제어회로는 상기 복수의 메모리 장치들 중 실패한 메모리 장치의 식별을 수신하기 위해 연결되고, 상기 데이터 리맵핑 제어회로는, 상기 데이터(i)을 검출하는 체크/보정 회로에 응답하여, 상기 실패한 메모리 장치가 상기 데이터 블럭중 적어도 1비트를 저장하는 각각의 데이터 블럭을 판독하도록 구성되며, 상기 체크비트 인코더 회로는 상기 실패한 메모리 장치에 비트들을 저장하는 것을 회피하기 위해 데이터 블럭을 리코드(recode)하고, 상기 리코드된 데이터 블럭을 복수의 메모리 장치에 기록하도록 구성되는, 메모리 컨트롤러.
  3. 제 2 항에 있어서,
    상기 체크비트 인코더 회로는 상기 실패한 메모리 장치에 저장되는 각각의 비트에 대해 이진수 0들을 포함하는 데이터 블럭을 리코드하도록 구성되는, 메모리 컨트롤러.
  4. 제 1 항에 있어서,
    상기 인코드된 데이터 블럭은, 비트들의 로(row)(0에서 R-1)와 컬럼(column)(0에서 C-1)의 어레이로서 논리적으로 배열되고, 각각의 컬럼은 복수의 메모리 장치 중 다른 하나에 저장된 비트들을 포함하고, 상기 복수의 체크비트는 복수의 보조 체크비트와 복수의 내부 체크비트를 포함하며, 상기 복수의 보조 체크비트는 상기 어레이의 제1 컬럼에 저장되고, 상기 복수의 보조 체크비트의 각각은 상기 어레이의 로내에 있고, 상기 어레이의 다른 컬럼들에서 비트들을 커버하며, 상기 복수의 내부 체크비트의 각각은 상기 복수의 보조 체크비트를 제외하고 상기 인코드된 데이터 블럭의 선택된 비트들을 커버하고, 상기 복수의 보조 체크비트를 제외한 상기 어레이의 각 비트는 그 비트를 커버하는 상기 복수의 내부 체크비트 중 하나 이상의 관련된 할당을 가지고, 상기 할당들은 다음을 만족하도록 선택되며, 여기서 syn(rx, cy)은 상기 어레이의 로 x, 컬럼 y에서 상기 비트와 연관된 내부 신드롬이고, XOR은 비트 단위의 배타적 OR이며:
    R1은 비어있는 셋트가 아닌, 상기 어레이의 로들 R1의 어떤 셋트에 대해서, 그리고 c1은 c2와 같지 않은, 상기 어레이의 컬럼들 c1및 c2의 어떤 셋트에 대해서, 각각의 위치(r, c)에 대응하는 신드롬들의 XOR은 0이 아니고, 이때 r은 R의 요소이고 c는 (c1, c2)의 요소이며;
    2개의 구별된 로들 r1및 r2의 어떤 셋트와 3개의 구별된 컬럼 c1, c2및 c3의 어떤 셋트에 대해서, syn(r1, c1) XOR syn(r2, c2) XOR syn(r1, c3) XOR syn(r2, c3) 은 0이 아닌, 메모리 컨트롤러.
  5. 제 4 항에 있어서,
    상기 복수의 체크비트는, 상기 복수의 메모리 장치 중 하나의 실패 검출 이후 상기 인코드된 데이터 블럭에서 더블 비트 에러를 검출하도록 더 정의되어 있는, 메모리 컨트롤러.
  6. 제 4 항에 있어서,
    소수 P 〉R에 대해서, 갈루아 필드(Galois Field) 2(GF(2)) 상의 각각의 자명하지 않은(non-trivial) PxP 순환행렬이 계수 P-1을 가지고, 상기 어레이에 대한 내부 체크비트의 셋트들은, KjXOR Ki가 모든 1 벡터와 같은 한쌍의 벡터 Ki〉Ki가 존재하지 않도록, 복수의 구별된 P비트 이진 벡터(K0-Kc-1로 표시된)를 선택함으로써 할당되고, K0내지 Kc-1각각은 상기 어레이의 컬럼들 중 하나에 할당되며, 주어진 컬럼 c1에서의 각각의 로에 대해서, 상기 할당은 로 숫자와 같은 위치들의 수만큼 주기적으로 좌측으로 이동된 Ki인, 메모리 컨트롤러.
  7. 제 6 항에 있어서,
    상기 K0내지 Kc-1는 3개의 구별된 컬럼 c1, c2및 c3의 모든 셋트에 대해서, Kc1XOR Kc3가 Kc2XOR Kc3의 주기적인 이동이 되지 않도록 선택되는, 메모리 컨트롤러.
  8. 제 7 항에 있어서,
    상기 어레이 (r1, c1) 및 (r2, c2)의 구별된 위치들의 모든 셋트에 대해서, c1및 c2는 제1 컬럼이 아니며, syn(r1, c1)은 syn(r2, c2)와 같지 않은, 메모리 컨트롤러.
  9. 제 8 항에 있어서,
    c1, c2및 c3가 제1 컬럼이 아닌 상기 어레이 (r1, c1), (r2, c2) 및 (r3, c3)의 구별된 위치들의 모든 셋트에 대해서, syn(r1, c1) XOR syn(r2, c2) XOR syn(r3, c3)은 0이 아닌, 메모리 컨트롤러.
  10. 제 8 항에 있어서,
    상기 제1 컬럼에 있지 않은 위치들 각각을 위해 선택된 상기 내부 체크비트의 할당들 각각은 기수 웨이트(odd weight)인, 메모리 컨트롤러.
  11. 제 4 항에 있어서,
    상기 제1 컬럼은 컬럼 0인, 메모리 컨트롤러.
  12. 제 1 항에 있어서,
    상기 복수 메모리 장치 중 하나의 실패 보정은, 상기 복수의 메모리 장치들에 저장되어 있던 재구성된 데이터 비트를 포함하는, 메모리 컨트롤러.
  13. 인코드된 데이터 블럭을 생성하기 위해 복수의 체크비트를 가진 복수의 메모리 장치를 포함하는 메모리에 기록되는 데이터 블럭을 인코딩하는 인코딩단계로서, 상기 복수의 체크비트는 적어도 (i) 상기 복수의 메모리 장치 중 하나의 실패의 검출과 보정 및 (ii) 상기 복수의 메모리 장치 중 하나의 실패 검출 이후 상기 인코드된 데이터 블럭에서 단일 비트 에러의 검출 및 보정을 제공하도록 정의되는, 인코딩단계와;
    상기 인코드된 데이터를 상기 메모리에 기록하는 기록단계를 포함하는, 방법.
  14. 제 13 항에 있어서,
    상기 메모리로부터 상기 인코드된 데이터 블럭을 판독하는 판독단계와;
    상기 인코드된 데이터 블럭을 디코딩하고, 상기 인코드된 데이터 블럭상에 적어도 (i) 및 (ii)의 검출을 수행하는 수행단계를 더 포함하는, 방법.
  15. 제 14 항에 있어서,
    (i) 검출에 응답하여:
    상기 복수 메모리 장치의 실패한 메모리 장치가 상기 데이터 블럭의 적어도 1 비트를 저장하는 각 데이터 블럭을 판독하는 판독단계와;
    상기 실패한 메모리 장치에 비트들을 저장하는 것을 회피하기 위해 상기 데이터 블럭을 리코딩하는 리코딩단계와;
    상기 리코드된 블럭을 상기 복수의 메모리 장치에 기록하는 기록단계를 더 포함하는, 방법.
  16. 제 15 항에 있어서,
    상기 리코딩은 상기 데이터 블럭내에서, 상기 실패한 메모리 장치내에 저장되는 각각의 비트에 대해 이진수 0을 포함하는, 방법.
  17. 제 13 항에 있어서,
    상기 인코드된 데이터 블럭은, 비트들의 로들(0에서 R-1)과 컬럼들(0에서 C-1)의 어레이로서 논리적으로 배열되고, 각각의 컬럼은 상기 복수의 메모리 장치 중 구별된 하나에 저장된 비트들을 포함하고, 상기 복수의 체크비트는 복수의 보조 체크비트와 복수의 내부 체크비트를 포함하며, 상기 복수의 보조 체크비트는 상기 어레이의 제1 컬럼에 저장되고, 상기 복수의 보조 체크비트의 각각은 상기 어레이의 로내에 있고, 상기 어레이의 다른 컬럼들에서 비트들을 커버하며, 상기 복수의 내부 체크비트의 각각은 상기 복수의 보조 체크비트들을 제외하고 상기 인코드된 데이터 블럭의 선택된 비트들을 커버하고, 상기 복수의 보조 체크비트를 제외한 상기 어레이의 각 비트는 그 비트를 커버하도록 상기 복수의 내부 체크비트들 중 하나 이상의 관련된 할당을 가지고, 상기 할당들은 다음을 만족하도록 선택되며, 이때 syn(rx, cy)은 상기 어레이의 로 x, 컬럼 y에서 상기 비트와 연관된 내부 신드롬이고, XOR은 비트 단위의 배타적 OR이며:
    R1은 비어있는 셋트가 아닌 상기 어레이의 로들 R1의 어떤 셋트에 대해서, c1은 c2와 같지 않은 상기 어레이의 컬럼 c1및 c2의 어떤 셋트에 대해서, r은 R의 요소이고 c가 (c1, c2)의 요소인 각각의 위치(r, c)에 대한 신드롬의 XOR은 0이 아니고;
    2개의 구별된 로들 r1및 r2의 어떤 셋트와 3개의 구별된 컬럼 c1, c2및 c3의 어떤 셋트에 대해서, syn(r1, c1) XOR syn(r2, c2) XOR syn(r1, c3) XOR syn(r2, c3) 은 0이 아닌, 방법.
  18. 제 17 항에 있어서,
    상기 복수의 체크비트는, 상기 복수의 메모리 장치 중 하나의 실패 검출 이후 상기 인코드된 데이터 블럭에서 더블 비트 에러를 검출하도록 더 정의되어 있는, 방법.
  19. 인코드된 데이터 블럭을 생성하기 위해 복수의 체크비트를 가진 복수의 메모리 장치를 포함하는 메모리에 기록되는 데이터 블럭을 인코딩하는 인코딩수단으로서, 상기 복수의 체크비트는 적어도 (i) 상기 복수의 메모리 장치 중 하나의 실패 의 검출과 보정; 및 (ii) 상기 복수의 메모리 장치 중 하나의 실패 검출 이후 상기 인코드된 데이터 블럭에서 단일 비트 에러의 검출 및 보정을 제공하도록 정의되는 인코딩수단과;
    상기 인코드된 데이터 블럭을 상기 메모리에 기록하는 기록수단을 포함하는, 장치.
  20. 제 19 항에 있어서,
    상기 메모리로부터 상기 인코드된 데이터 블럭을 판독하는 판독수단과;
    상기 인코드된 데이터 블럭을 인코딩하고, 상기 인코드된 데이터 블럭상에서 적어도 (i) 및 (ii)의 검출을 수행하는 수단을 더 포함하는, 장치.
  21. 복수의 메모리 장치를 포함하는 메모리에 기록되는 데이터 블럭을 수신하도록 연결된 체크비트 인코더 회로로서, 상기 체크비트 인코더 회로는 인코드된 데이터 블럭을 생성하기 위해 복수의 체크비트를 가지고 상기 데이터 블럭을 인코드하도록 구성되고, 상기 복수의 체크비트는 적어도 (i) 상기 복수의 메모리 장치 중 하나의 실패의 검출과 보정; 및 (ii) 상기 복수의 메모리 장치 중 하나의 실패의 검출 후에 상기 인코드된 데이터 블럭에서 더블 비트 에러의 검출 및 보정을 제공하도록 정의되며, 상기 메모리 컨트롤러는 상기 인코드된 데이터 블럭을 상기 메모리에 기록하도록 구성되는, 체크비트 인코더 회로와;
    상기 메모리로부터 상기 인코드된 데이터 블럭을 수신하도록 연결되고, 상기 인코드된 데이터 블럭을 디코드하고 상기 인코드된 데이터 블럭상에서 적어도 (i) 및 (ii)의 검출을 수행하도록 구성된, 체크/보정회로를 포함하고,
    상기 인코드된 데이터 블럭은, 비트들의 로들(0에서 R-1)와 컬럼들(0에서 C-1)의 비트 어레이로서 논리적으로 배열되고, 각각의 컬럼은 상기 복수의 메모리 장치 중 다른 하나에 저장된 비트들을 포함하고, 상기 복수의 체크비트는 복수의 보조 체크비트와 복수의 내부 체크비트를 포함하며, 상기 복수의 보조 체크비트는 상기 어레이의 제1 컬럼에 저장되고, 상기 복수의 보조 체크비트의 각각은 상기 어레이의 로내에 있고, 상기 어레이의 다른 컬럼들에서 비트들을 커버하며, 상기 복수의 내부 체크비트의 각각은 상기 복수의 보조 체크비트를 제외하고 상기 인코드된 데이터 블럭의 선택된 비트들을 커버하고, 상기 복수의 보조 체크비트를 제외한 상기 어레이의 각 비트는 그 비트를 커버하는 상기 복수의 내부 체크비트들 중 하나 이상의 관련된 할당을 가지고, 상기 할당은 다음을 만족하도록 선택되며, 이때 syn(rx, cy)은 상기 어레이의 로 x, 컬럼 y에서 상기 비트와 연관된 내부 신드롬이고, XOR은 비트 단위의 배타적 OR이며:
    R1가 비어있는 셋트가 아닌 상기 어레이의 로 R1의 어떤 셋트에 대해서, 그리고 c1은 c2와 같지 않은 상기 어레이의 컬럼 c1및 c2의 어떤 셋트에 대해서, r은 R의 요소이고 c가 (c1, c2)의 요소인 각각의 위치(r, c)에 대한 신드롬의 XOR은 0이 아니고;
    2개의 구별된 로들 r1및 r2의 어떤 셋트와 3개의 구별된 컬럼들 c1, c2및 c3의 어떤 셋트에 대해서, syn(r1, c1) XOR syn(r2, c2) XOR syn(r1, c3) XOR syn(r2, c3)은 0이 아닌, 메모리 컨트롤러.
  22. 제 21 항에 있어서,
    소수 P 〉R에 대해서, GF(2)상의 각각의 자명하지 않은 PxP 순환행렬이 계수P-1을 가지고, 상기 어레이에 대한 할당은, KjXOR Ki가 모든 1벡터와 같은 한쌍의 벡터 Ki및 Ki이 존재하지 않도록 복수의 구별된 P비트 이진 벡터(K0내지 Kc-1로 표시된)를 선택함으로써 할당되고, 각각의 K0내지 Kc-1는 상기 어레이의 컬럼들 중 하나에 할당되며, 주어진 컬럼 c1에서의 각각의 로에 대해서, 상기 할당은 로 숫자와 같은 위치들의 수만큼 주기적으로 좌측으로 이동된 Ki인, 메모리 컨트롤러.
  23. 제 22 항에 있어서,
    상기 K0내지 Kc-1는, 3개의 구별된 컬럼들 c1, c2및 c3의 어떤 셋트에 대해서, Kc1XOR Kc3이 Kc2XOR Kc3의 주기적인 이동이 되지 않도록 선택되는 메모리 컨트롤러.
  24. 제 23 항에 있어서,
    상기 어레이 (r1, c1), (r2, c2) 및 (r3, c3)의 구별된 위치들의 어떤 셋트에 대해서, c1, c2및 c3는 제1 컬럼이 아니며, syn(r1, c1) XOR syn(r2, c2) XOR syn(r3, c3)은 0이 아닌, 메모리 컨트롤러.
  25. 제 23 항에 있어서,
    상기 제1 컬럼내에 있지 않은 상기 위치들 각각에 대해 선택된 할당들 각각은 기수 웨이트가 되도록 선택되는, 메모리 컨트롤러.
  26. 복수의 경로들을 포함하는 전송 매체를 경유하여 전송되는 데이터 블럭을 수신하도록 연결된 체크비트 인코더 회로로서, 상기 체크비트 인코더 회로는 인코드된 데이터 블럭을 생성하기 위해 복수의 체크비트를 가지고 상기 데이터 블럭을 인코드하도록 구성되고, 상기 복수의 체크비트는 적어도 (i) 상기 복수의 경로들 중 하나의 실패의 검출과 보정; 및 (ii) 상기 복수의 경로들 중 하나의 실패의 검출 후에 상기 인코드된 데이터 블럭에서 단일 비트 에러의 검출 및 보정을 제공하도록 정의되는, 체크비트 인코더 회로와;
    상기 전송매체로부터 상기 인코드된 데이터 블럭을 수신하도록 연결되고, 상기 인코드된 데이터 블럭을 디코드하고 상기 인코드된 데이터 블럭상에서 적어도 (i) 및 (ii)의 검출을 수행하도록 구성된, 체크/보정회로를 포함하는, 통신 시스템.
  27. 복수의 경로를 포함하는 전송매체를 경유하여 전송되는 데이터 블럭을 수신하도록 연결된 체크비트 인코더 회로로서, 상기 체크비트 인코더 회로는 인코드된 데이터 블럭을 생성하기 위해 복수의 체크비트를 가지고 상기 데이터 블럭을 인코드하도록 구성되고, 상기 복수의 체크비트는 적어도 (i) 상기 복수의 경로들 중 하나의 실패의 검출과 보정; 및 (ii) 상기 복수의 경로들 중 하나의 실패 검출 후에상기 인코드된 데이터 블럭에서 더블 비트 에러의 검출을 제공하도록 정의되는, 체크비트 인코더 회로와;
    상기 전송매체로부터 상기 인코드된 데이터 블럭을 수신하도록 연결되고, 상기 인코드된 데이터 블럭을 디코드하며 상기 인코드된 데이터 블럭상에서 적어도 (i) 및 (ii)의 검출을 수행하도록 구성된, 체크/보정회로를 포함하고,
    상기 인코드된 데이터 블럭은, 비트들의 로들(0에서 R-1)과 컬럼들(0에서 C-1)의 비트 어레이로서 논리적으로 배열되고, 각각의 컬럼은 상기 복수의 경로들 중 다른 하나를 경유하여 전송된 비트들을 포함하고, 상기 복수의 체크비트는 복수의 보조 체크비트와 복수의 내부 체크비트를 포함하며, 상기 복수의 보조 체크비트는 상기 어레이의 제1 컬럼에 저장되고, 상기 복수의 보조 체크비트의 각각은 상기 어레이의 로내에 있고, 상기 어레이의 다른 컬럼들에서 비트들을 커버하며, 상기 복수의 내부 체크비트의 각각은 복수의 보조 체크비트를 제외하고 상기 인코드된 데이터 블럭의 선택된 비트들을 커버하고, 상기 복수의 보조 체크비트를 제외한 상기 어레이의 각 비트는 그 비트들을 커버하는 상기 복수의 내부 체크비트들 중 하나 이상의 관련된 할당을 가지고, 상기 할당은 다음을 만족하도록 선택되며, 이때 syn(rx, cy)은 상기 어레이의 로 x, 컬럼 y에서 상기 비트와 연관된 내부 신드롬이고, XOR은 비트 단위의 배타적 OR이며:
    R1가 비어있는 셋트가 아닌 상기 어레이의 로들 R1의 어떤 셋트에 대해서, 그리고 c1은 c2와 같지 않은 상기 어레이의 컬럼들 c1및 c2의 어떤 셋트에 대해서, r은 R의 요소이고 c가 (c1, c2)의 요소인 각각의 위치(r, c)에 대한 신드롬들의 XOR은 0이 아니고;
    2개의 구별된 로들 r1및 r2의 어떤 셋트와 3개의 구별된 컬럼들 c1, c2및 c3의 어떤 셋트에 대해서, syn(r1, c1) XOR syn(r2, c2) XOR syn(r1, c3) XOR syn(r2, c3) XOR은 0이 아닌, 통신 시스템.
KR10-2004-7003075A 2002-06-28 2003-05-01 컴포넌트 실패를 검출 및 보정하고, 컴포넌트 실패 후에단일 비트 에러보정을 제공하는 에러검출/보정 코드 KR20040064259A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/185,265 US6973613B2 (en) 2002-06-28 2002-06-28 Error detection/correction code which detects and corrects component failure and which provides single bit error correction subsequent to component failure
US10/185,265 2002-06-28
PCT/US2003/013751 WO2004003750A2 (en) 2002-06-28 2003-05-01 Error detection/correction code which detects component failure and which provides single bit error correction upon such detection

Publications (1)

Publication Number Publication Date
KR20040064259A true KR20040064259A (ko) 2004-07-16

Family

ID=29779582

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2004-7003075A KR20040064259A (ko) 2002-06-28 2003-05-01 컴포넌트 실패를 검출 및 보정하고, 컴포넌트 실패 후에단일 비트 에러보정을 제공하는 에러검출/보정 코드

Country Status (5)

Country Link
US (1) US6973613B2 (ko)
KR (1) KR20040064259A (ko)
AU (1) AU2003241348A1 (ko)
GB (1) GB2395326A (ko)
WO (1) WO2004003750A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160141557A (ko) * 2015-06-01 2016-12-09 삼성전자주식회사 반도체 메모리 장치, 이를 포함하는 메모리 시스템 및 반도체 메모리 장치의 에러 정정 방법

Families Citing this family (140)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7779285B2 (en) * 2003-02-18 2010-08-17 Oracle America, Inc. Memory system including independent isolated power for each memory module
US7475326B2 (en) * 2003-06-27 2009-01-06 Maxwell Technologies, Inc. Error detection and correction method and system for memory devices
US7530008B2 (en) * 2003-08-08 2009-05-05 Sun Microsystems, Inc. Scalable-chip-correct ECC scheme
US7188296B1 (en) 2003-10-30 2007-03-06 Sun Microsystems, Inc. ECC for component failures using Galois fields
US7404118B1 (en) 2004-09-02 2008-07-22 Sun Microsystems, Inc. Memory error analysis for determining potentially faulty memory components
US7353437B2 (en) * 2004-10-29 2008-04-01 Micron Technology, Inc. System and method for testing a memory for a memory failure exhibited by a failing memory
US7412642B2 (en) * 2005-03-09 2008-08-12 Sun Microsystems, Inc. System and method for tolerating communication lane failures
US20060256615A1 (en) * 2005-05-10 2006-11-16 Larson Thane M Horizontal and vertical error correction coding (ECC) system and method
US7478307B1 (en) 2005-05-19 2009-01-13 Sun Microsystems, Inc. Method for improving un-correctable errors in a computer system
JP4864395B2 (ja) * 2005-09-13 2012-02-01 株式会社東芝 半導体記憶装置
US7676554B1 (en) * 2005-09-15 2010-03-09 Juniper Networks, Inc. Network acceleration device having persistent in-memory cache
US7979509B1 (en) 2005-09-15 2011-07-12 Juniper Networks, Inc. Clustered network acceleration devices having shared cache
US7644108B1 (en) 2005-09-15 2010-01-05 Juniper Networks, Inc. Network acceleration device cache supporting multiple historical versions of content
US8291295B2 (en) 2005-09-26 2012-10-16 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US7523342B1 (en) 2005-10-28 2009-04-21 Sun Microsystems, Inc. Data and control integrity for transactions in a computer system
JP4643479B2 (ja) * 2006-03-22 2011-03-02 株式会社東芝 アクセス制御装置、アクセス制御システム、プロセッサ、アクセス制御方法およびメモリアクセス制御方法
US7506226B2 (en) 2006-05-23 2009-03-17 Micron Technology, Inc. System and method for more efficiently using error correction codes to facilitate memory device testing
US8024639B2 (en) 2006-06-23 2011-09-20 Schweitzer Engineering Laboratories, Inc. Software and methods to detect and correct data structure
US8069377B2 (en) * 2006-06-26 2011-11-29 Micron Technology, Inc. Integrated circuit having memory array including ECC and column redundancy and method of operating the same
US7676729B2 (en) * 2006-08-23 2010-03-09 Sun Microsystems, Inc. Data corruption avoidance in DRAM chip sparing
US20080080114A1 (en) * 2006-09-29 2008-04-03 Schweitzer Engineering Laboratories, Inc. Apparatus, systems and methods for reliably detecting faults within a power distribution system
US20080155293A1 (en) * 2006-09-29 2008-06-26 Schweitzer Engineering Laboratories, Inc. Apparatus, systems and methods for reliably detecting faults within a power distribution system
ATE484834T1 (de) * 2007-02-16 2010-10-15 Advantest Corp Testapparat
JP2008287404A (ja) * 2007-05-16 2008-11-27 Hitachi Ltd 読み出しによる非アクセスメモリセルのデータ破壊を検出及び回復する装置、及びその方法
US8055975B2 (en) 2007-06-05 2011-11-08 Apple Inc. Combined single error correction/device kill detection code
US20080309532A1 (en) * 2007-06-12 2008-12-18 Silicon Optronics, Inc. Solid-state imaging device and method of manufacturing thereof
US8140945B2 (en) * 2008-05-23 2012-03-20 Oracle America, Inc. Hard component failure detection and correction
US8327224B2 (en) * 2009-04-16 2012-12-04 Micron Technology, Inc. Data recovery in a solid state storage system
US20110040924A1 (en) * 2009-08-11 2011-02-17 Selinger Robert D Controller and Method for Detecting a Transmission Error Over a NAND Interface Using Error Detection Code
US20110041005A1 (en) * 2009-08-11 2011-02-17 Selinger Robert D Controller and Method for Providing Read Status and Spare Block Management Information in a Flash Memory System
US8327225B2 (en) 2010-01-04 2012-12-04 Micron Technology, Inc. Error correction in a stacked memory
US8677203B1 (en) * 2010-01-11 2014-03-18 Apple Inc. Redundant data storage schemes for multi-die memory systems
US8751912B1 (en) 2010-01-12 2014-06-10 Marvell International Ltd. Layered low density parity check decoder
KR20110100739A (ko) * 2010-03-05 2011-09-15 삼성전자주식회사 불휘발성 메모리 장치의 동작 방법, 컨트롤러의 동작 방법, 그리고 불휘발성 메모리 장치 및 컨트롤러를 포함하는 메모리 시스템의 동작 방법
US9288089B2 (en) 2010-04-30 2016-03-15 Ecole Polytechnique Federale De Lausanne (Epfl) Orthogonal differential vector signaling
US9985634B2 (en) 2010-05-20 2018-05-29 Kandou Labs, S.A. Data-driven voltage regulator
US9450744B2 (en) 2010-05-20 2016-09-20 Kandou Lab, S.A. Control loop management and vector signaling code communications links
US9106238B1 (en) 2010-12-30 2015-08-11 Kandou Labs, S.A. Sorting decoder
US9362962B2 (en) 2010-05-20 2016-06-07 Kandou Labs, S.A. Methods and systems for energy-efficient communications interface
US9246713B2 (en) 2010-05-20 2016-01-26 Kandou Labs, S.A. Vector signaling with reduced receiver complexity
US9077386B1 (en) 2010-05-20 2015-07-07 Kandou Labs, S.A. Methods and systems for selection of unions of vector signaling codes for power and pin efficient chip-to-chip communication
US9596109B2 (en) 2010-05-20 2017-03-14 Kandou Labs, S.A. Methods and systems for high bandwidth communications interface
US9288082B1 (en) 2010-05-20 2016-03-15 Kandou Labs, S.A. Circuits for efficient detection of vector signaling codes for chip-to-chip communication using sums of differences
US9401828B2 (en) 2010-05-20 2016-07-26 Kandou Labs, S.A. Methods and systems for low-power and pin-efficient communications with superposition signaling codes
US8593305B1 (en) 2011-07-05 2013-11-26 Kandou Labs, S.A. Efficient processing and detection of balanced codes
US9479369B1 (en) 2010-05-20 2016-10-25 Kandou Labs, S.A. Vector signaling codes with high pin-efficiency for chip-to-chip communication and storage
US9251873B1 (en) 2010-05-20 2016-02-02 Kandou Labs, S.A. Methods and systems for pin-efficient memory controller interface using vector signaling codes for chip-to-chip communications
US9564994B2 (en) * 2010-05-20 2017-02-07 Kandou Labs, S.A. Fault tolerant chip-to-chip communication with advanced voltage
WO2011151469A1 (en) 2010-06-04 2011-12-08 Ecole Polytechnique Federale De Lausanne Error control coding for orthogonal differential vector signaling
US8441768B2 (en) 2010-09-08 2013-05-14 Schweitzer Engineering Laboratories Inc Systems and methods for independent self-monitoring
EP2633414A4 (en) * 2010-10-29 2014-03-26 Empire Technology Dev Llc EVOLVED DATA CODING WITH REDUCED ERASURE NUMBER FOR ELECTRONIC HARD DISK
US9275720B2 (en) 2010-12-30 2016-03-01 Kandou Labs, S.A. Differential vector storage for dynamic random access memory
US9058291B2 (en) 2011-02-28 2015-06-16 International Business Machines Corporation Multiple erasure correcting codes for storage arrays
US8433979B2 (en) * 2011-02-28 2013-04-30 International Business Machines Corporation Nested multiple erasure correcting codes for storage arrays
JP5601256B2 (ja) * 2011-03-20 2014-10-08 富士通株式会社 メモリコントローラ及び情報処理装置
US8756363B2 (en) 2011-07-07 2014-06-17 Oracle International Corporation Efficient storage of memory version data
CN102436852A (zh) * 2012-01-06 2012-05-02 北京航空航天大学 一种纠正固定错误的数据校验与纠错方法
US8874995B2 (en) 2012-02-02 2014-10-28 International Business Machines Corporation Partial-maximum distance separable (PMDS) erasure correcting codes for storage arrays
US9007731B2 (en) 2012-03-26 2015-04-14 Schweitzer Engineering Laboratories, Inc. Leveraging inherent redundancy in a multifunction IED
KR101750215B1 (ko) * 2012-03-31 2017-06-22 인텔 코포레이션 지연 보상 에러 표시 신호
US9268683B1 (en) 2012-05-14 2016-02-23 Kandou Labs, S.A. Storage method and apparatus for random access memory using codeword storage
CN102915768B (zh) * 2012-10-01 2016-05-04 中国科学院近代物理研究所 基于edac模块的三模冗余对存储器的容错装置及其方法
US9043559B2 (en) 2012-10-23 2015-05-26 Oracle International Corporation Block memory engine with memory corruption detection
US9246516B2 (en) * 2012-12-20 2016-01-26 Intel Corporation Techniques for error correction of encoded data
KR101741346B1 (ko) 2013-01-11 2017-06-15 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 플래시 메모리들에 대한 페이지 할당
WO2014113727A1 (en) 2013-01-17 2014-07-24 Kandou Labs, S.A. Methods and systems for chip-to-chip communication with reduced simultaneous switching noise
CN105122758B (zh) 2013-02-11 2018-07-10 康杜实验室公司 高带宽芯片间通信接口方法和系统
KR101742462B1 (ko) 2013-02-27 2017-06-01 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 메모리 디바이스들을 위한 선형 프로그래밍 기반 디코딩
US10212049B2 (en) 2013-03-14 2019-02-19 Time Warner Cable Enterprises Llc Apparatus and methods for managing service delivery telemetry
KR102241045B1 (ko) 2013-04-16 2021-04-19 칸도우 랩스 에스에이 고 대역폭 통신 인터페이스를 위한 방법 및 시스템
US9430324B2 (en) * 2013-05-24 2016-08-30 Rambus Inc. Memory repair method and apparatus based on error code tracking
WO2014210074A1 (en) 2013-06-25 2014-12-31 Kandou Labs SA Vector signaling with reduced receiver complexity
WO2015016877A1 (en) * 2013-07-31 2015-02-05 Hewlett-Packard Development Company, L.P. Memory unit
CN104347122B (zh) * 2013-07-31 2017-08-04 华为技术有限公司 一种消息式内存模组的访存方法和装置
US9898365B2 (en) 2013-07-31 2018-02-20 Hewlett Packard Enterprise Development Lp Global error correction
US9106465B2 (en) 2013-11-22 2015-08-11 Kandou Labs, S.A. Multiwire linear equalizer for vector signaling code receiver
US9778982B2 (en) 2013-12-09 2017-10-03 Hewlett Packard Enterprise Development Lp Memory erasure information in cache lines
US9859925B2 (en) 2013-12-13 2018-01-02 Empire Technology Development Llc Low-complexity flash memory data-encoding techniques using simplified belief propagation
US9806761B1 (en) 2014-01-31 2017-10-31 Kandou Labs, S.A. Methods and systems for reduction of nearest-neighbor crosstalk
CN110266615B (zh) 2014-02-02 2022-04-29 康杜实验室公司 低isi比低功率芯片间通信方法和装置
US9369312B1 (en) 2014-02-02 2016-06-14 Kandou Labs, S.A. Low EMI signaling for parallel conductor interfaces
US9363114B2 (en) 2014-02-28 2016-06-07 Kandou Labs, S.A. Clock-embedded vector signaling codes
US9672298B2 (en) 2014-05-01 2017-06-06 Oracle International Corporation Precise excecution of versioned store instructions
US9509437B2 (en) 2014-05-13 2016-11-29 Kandou Labs, S.A. Vector signaling code with improved noise margin
US9148087B1 (en) 2014-05-16 2015-09-29 Kandou Labs, S.A. Symmetric is linear equalization circuit with increased gain
US9852806B2 (en) 2014-06-20 2017-12-26 Kandou Labs, S.A. System for generating a test pattern to detect and isolate stuck faults for an interface using transition coding
US9112550B1 (en) 2014-06-25 2015-08-18 Kandou Labs, SA Multilevel driver for high speed chip-to-chip communications
CN106797352B (zh) 2014-07-10 2020-04-07 康杜实验室公司 高信噪特性向量信令码
US9432082B2 (en) 2014-07-17 2016-08-30 Kandou Labs, S.A. Bus reversable orthogonal differential vector signaling codes
KR101943048B1 (ko) 2014-07-21 2019-01-28 칸도우 랩스 에스에이 다분기 데이터 전송
KR101949964B1 (ko) 2014-08-01 2019-02-20 칸도우 랩스 에스에이 임베딩된 클록을 갖는 직교 차동 벡터 시그널링 코드
US9477548B2 (en) * 2014-08-01 2016-10-25 Freescale Semiconductor, Inc. Error repair location cache
US9195593B1 (en) 2014-09-27 2015-11-24 Oracle International Corporation Hardware assisted object memory migration
US9674014B2 (en) 2014-10-22 2017-06-06 Kandou Labs, S.A. Method and apparatus for high speed chip-to-chip communications
CN105988714A (zh) * 2015-02-01 2016-10-05 复旦大学 一种抗辐射容错sram存储阵列及其制备方法
US9691505B2 (en) * 2015-03-27 2017-06-27 Intel Corporation Dynamic application of error correction code (ECC) based on error type
KR102372931B1 (ko) 2015-06-26 2022-03-11 칸도우 랩스 에스에이 고속 통신 시스템
US9557760B1 (en) 2015-10-28 2017-01-31 Kandou Labs, S.A. Enhanced phase interpolation circuit
US9577815B1 (en) 2015-10-29 2017-02-21 Kandou Labs, S.A. Clock data alignment system for vector signaling code communications link
US10055372B2 (en) 2015-11-25 2018-08-21 Kandou Labs, S.A. Orthogonal differential vector signaling codes with embedded clock
CN108781060B (zh) 2016-01-25 2023-04-14 康杜实验室公司 具有增强的高频增益的电压采样驱动器
US10224967B2 (en) * 2016-02-10 2019-03-05 ScaleFlux Protecting in-memory immutable objects through hybrid hardware/software-based memory fault tolerance
WO2017185072A1 (en) 2016-04-22 2017-10-26 Kandou Labs, S.A. High performance phase locked loop
US10003454B2 (en) 2016-04-22 2018-06-19 Kandou Labs, S.A. Sampler with low input kickback
US10153591B2 (en) 2016-04-28 2018-12-11 Kandou Labs, S.A. Skew-resistant multi-wire channel
EP3449379B1 (en) 2016-04-28 2021-10-06 Kandou Labs S.A. Vector signaling codes for densely-routed wire groups
EP3449606A4 (en) 2016-04-28 2019-11-27 Kandou Labs S.A. LOW POWER MULTILAYER ATTACK CIRCUIT
US10122384B2 (en) * 2016-05-18 2018-11-06 Arm Limited Logical interleaver
US9906358B1 (en) 2016-08-31 2018-02-27 Kandou Labs, S.A. Lock detector for phase lock loop
US10411922B2 (en) 2016-09-16 2019-09-10 Kandou Labs, S.A. Data-driven phase detector element for phase locked loops
US10200188B2 (en) 2016-10-21 2019-02-05 Kandou Labs, S.A. Quadrature and duty cycle error correction in matrix phase lock loop
US10200218B2 (en) 2016-10-24 2019-02-05 Kandou Labs, S.A. Multi-stage sampler with increased gain
US10372665B2 (en) 2016-10-24 2019-08-06 Kandou Labs, S.A. Multiphase data receiver with distributed DFE
US10585732B1 (en) * 2017-01-11 2020-03-10 Seagate Technology Llc Error categorization based on bit information
US10666297B2 (en) 2017-04-14 2020-05-26 Kandou Labs, S.A. Pipelined forward error correction for vector signaling code channel
US10116468B1 (en) 2017-06-28 2018-10-30 Kandou Labs, S.A. Low power chip-to-chip bidirectional communications
US10686583B2 (en) 2017-07-04 2020-06-16 Kandou Labs, S.A. Method for measuring and correcting multi-wire skew
US10693587B2 (en) 2017-07-10 2020-06-23 Kandou Labs, S.A. Multi-wire permuted forward error correction
US10203226B1 (en) 2017-08-11 2019-02-12 Kandou Labs, S.A. Phase interpolation circuit
US10326623B1 (en) 2017-12-08 2019-06-18 Kandou Labs, S.A. Methods and systems for providing multi-stage distributed decision feedback equalization
US10554380B2 (en) 2018-01-26 2020-02-04 Kandou Labs, S.A. Dynamically weighted exclusive or gate having weighted output segments for phase detection and phase interpolation
US11184446B2 (en) 2018-12-05 2021-11-23 Micron Technology, Inc. Methods and apparatus for incentivizing participation in fog networks
US11013043B2 (en) 2019-01-08 2021-05-18 Micron Technology, Inc. Methods and apparatus for routine based fog networking
US11327551B2 (en) 2019-02-14 2022-05-10 Micron Technology, Inc. Methods and apparatus for characterizing memory devices
US10957416B2 (en) * 2019-02-14 2021-03-23 Micron Technology, Inc. Methods and apparatus for maintaining characterized memory devices
US11256778B2 (en) 2019-02-14 2022-02-22 Micron Technology, Inc. Methods and apparatus for checking the results of characterized memory searches
US11335430B2 (en) 2019-03-26 2022-05-17 Rambus Inc. Error remapping
US12118056B2 (en) 2019-05-03 2024-10-15 Micron Technology, Inc. Methods and apparatus for performing matrix transformations within a memory array
US10867655B1 (en) 2019-07-08 2020-12-15 Micron Technology, Inc. Methods and apparatus for dynamically adjusting performance of partitioned memory
US11449577B2 (en) 2019-11-20 2022-09-20 Micron Technology, Inc. Methods and apparatus for performing video processing matrix operations within a memory array
US11853385B2 (en) 2019-12-05 2023-12-26 Micron Technology, Inc. Methods and apparatus for performing diversity matrix operations within a memory array
US11409592B2 (en) 2020-02-13 2022-08-09 Baker Hughes Oilfield Operations Llc Methods of predicting electronic component failures in an earth-boring tool and related systems and apparatus
US11601137B2 (en) 2020-06-18 2023-03-07 Intel Corporation ECC memory chip encoder and decoder
US11237906B1 (en) 2020-07-28 2022-02-01 Micron Technology, Inc. Generating a balanced codeword protected by an error correction code
US11494264B2 (en) 2020-07-28 2022-11-08 Micron Technology, Inc. Generating a protected and balanced codeword
US11567831B2 (en) 2020-07-28 2023-01-31 Micron Technology, Inc. Generating a protected and balanced codeword
US11323362B2 (en) 2020-08-07 2022-05-03 Schweitzer Engineering Laboratories, Inc. Resilience to single event upsets in software defined networks
KR20220060156A (ko) 2020-11-04 2022-05-11 삼성전자주식회사 반도체 메모리 장치 및 반도체 메모리 장치의 동작 방법
US11356197B1 (en) 2021-03-19 2022-06-07 Kandou Labs SA Error-tolerant forward error correction ordered set message decoder
CN117280315B (zh) * 2021-05-27 2025-02-07 美光科技公司 存储体保护

Family Cites Families (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4434459A (en) * 1980-04-25 1984-02-28 Data General Corporation Data processing system having instruction responsive apparatus for both a basic and an extended instruction set
US4376300A (en) 1981-01-02 1983-03-08 Intel Corporation Memory system employing mostly good memories
US4584681A (en) 1983-09-02 1986-04-22 International Business Machines Corporation Memory correction scheme using spare arrays
US4604751A (en) 1984-06-29 1986-08-05 International Business Machines Corporation Error logging memory system for avoiding miscorrection of triple errors
US4617664A (en) 1984-06-29 1986-10-14 International Business Machines Corporation Error correction for multiple bit output chips
US5058115A (en) 1989-03-10 1991-10-15 International Business Machines Corp. Fault tolerant computer memory systems and components employing dual level error correction and detection with lock-up feature
US5228046A (en) 1989-03-10 1993-07-13 International Business Machines Fault tolerant computer memory systems and components employing dual level error correction and detection with disablement feature
JPH0814985B2 (ja) 1989-06-06 1996-02-14 富士通株式会社 半導体記憶装置
US5077737A (en) 1989-08-18 1991-12-31 Micron Technology, Inc. Method and apparatus for storing digital data in off-specification dynamic random access memory devices
EP0459521B1 (en) 1990-06-01 1997-03-12 Nec Corporation Semiconductor memory device with a redundancy circuit
US5164944A (en) 1990-06-08 1992-11-17 Unisys Corporation Method and apparatus for effecting multiple error correction in a computer memory
US5251219A (en) 1990-09-10 1993-10-05 Advanced Micro Devices, Inc. Error detection and correction circuit
US5291496A (en) 1990-10-18 1994-03-01 The United States Of America As Represented By The United States Department Of Energy Fault-tolerant corrector/detector chip for high-speed data processing
US5276834A (en) 1990-12-04 1994-01-04 Micron Technology, Inc. Spare memory arrangement
US5233614A (en) 1991-01-07 1993-08-03 International Business Machines Corporation Fault mapping apparatus for memory
US5379411A (en) 1991-11-15 1995-01-03 Fujitsu Limited Fault indication in a storage device array
US6367046B1 (en) 1992-09-23 2002-04-02 International Business Machines Corporation Multi-bit error correction system
US5490155A (en) 1992-10-02 1996-02-06 Compaq Computer Corp. Error correction system for n bits using error correcting code designed for fewer than n bits
US5463644A (en) * 1992-11-13 1995-10-31 Unisys Corporation Resilient storage system
US5909541A (en) 1993-07-14 1999-06-01 Honeywell Inc. Error detection and correction for data stored across multiple byte-wide memory devices
GB2289779B (en) 1994-05-24 1999-04-28 Intel Corp Method and apparatus for automatically scrubbing ECC errors in memory via hardware
EP0721162A2 (en) 1995-01-06 1996-07-10 Hewlett-Packard Company Mirrored memory dual controller disk storage system
US5812564A (en) 1995-05-08 1998-09-22 Western Digital Corporation Disk drive with embedded finite field processor for error correction
US5867642A (en) 1995-08-10 1999-02-02 Dell Usa, L.P. System and method to coherently and dynamically remap an at-risk memory area by simultaneously writing two memory areas
US5757823A (en) 1995-10-03 1998-05-26 International Business Machines Corporation Error detection and correction for four-bit-per-chip memory system
US5640353A (en) 1995-12-27 1997-06-17 Act Corporation External compensation apparatus and method for fail bit dynamic random access memory
US5758056A (en) 1996-02-08 1998-05-26 Barr; Robert C. Memory system having defective address identification and replacement
JP3862330B2 (ja) 1996-05-22 2006-12-27 富士通株式会社 半導体記憶装置
US5864569A (en) 1996-10-18 1999-01-26 Micron Technology, Inc. Method and apparatus for performing error correction on data read from a multistate memory
US6038680A (en) 1996-12-11 2000-03-14 Compaq Computer Corporation Failover memory for a computer system
US6076182A (en) 1996-12-16 2000-06-13 Micron Electronics, Inc. Memory fault correction system and method
US5978952A (en) 1996-12-31 1999-11-02 Intel Corporation Time-distributed ECC scrubbing to correct memory errors
US5923682A (en) 1997-01-29 1999-07-13 Micron Technology, Inc. Error correction chip for memory applications
US5872790A (en) 1997-02-28 1999-02-16 International Business Machines Corporation ECC memory multi-bit error generator
JPH10302497A (ja) 1997-04-28 1998-11-13 Fujitsu Ltd 不良アドレスの代替方法、半導体記憶装置、及び、半導体装置
EP1000395B1 (en) 1997-07-28 2004-12-01 Intergraph Hardware Technologies Company Apparatus and method for memory error detection and error reporting
US6065102A (en) 1997-09-12 2000-05-16 Adaptec, Inc. Fault tolerant multiple client memory arbitration system capable of operating multiple configuration types
US5953265A (en) 1997-09-29 1999-09-14 Emc Corporation Memory having error detection and correction
US6223301B1 (en) 1997-09-30 2001-04-24 Compaq Computer Corporation Fault tolerant memory
US5987628A (en) 1997-11-26 1999-11-16 Intel Corporation Method and apparatus for automatically correcting errors detected in a memory subsystem
US6018817A (en) 1997-12-03 2000-01-25 International Business Machines Corporation Error correcting code retrofit method and apparatus for multiple memory configurations
KR100266748B1 (ko) 1997-12-31 2000-10-02 윤종용 반도체 메모리 장치 및 그 장치의 에러 정정 방법
US6044483A (en) 1998-01-29 2000-03-28 International Business Machines Corporation Error propagation operating mode for error correcting code retrofit apparatus
US6052818A (en) 1998-02-27 2000-04-18 International Business Machines Corporation Method and apparatus for ECC bus protection in a computer system with non-parity memory
US6070255A (en) 1998-05-28 2000-05-30 International Business Machines Corporation Error protection power-on-self-test for memory cards having ECC on board
US6505305B1 (en) * 1998-07-16 2003-01-07 Compaq Information Technologies Group, L.P. Fail-over of multiple memory blocks in multiple memory modules in computer system
US6167495A (en) 1998-08-27 2000-12-26 Micron Technology, Inc. Method and apparatus for detecting an initialization signal and a command packet error in packetized dynamic random access memories
US6301780B1 (en) 1998-09-16 2001-10-16 Positech International, Inc. Method for recording an aviation oil cooler
US6141789A (en) 1998-09-24 2000-10-31 Sun Microsystems, Inc. Technique for detecting memory part failures and single, double, and triple bit errors
US6233716B1 (en) 1998-09-24 2001-05-15 Sun Microsystems, Inc. Technique for partitioning data to correct memory part failures
US6301680B1 (en) 1998-09-24 2001-10-09 Sun Microsystems, Inc. Technique for correcting single-bit errors and detecting paired double-bit errors
US6282686B1 (en) 1998-09-24 2001-08-28 Sun Microsystems, Inc. Technique for sharing parity over multiple single-error correcting code words
WO2000041182A1 (en) 1998-12-30 2000-07-13 Intel Corporation Memory array organization
JP2000215687A (ja) 1999-01-21 2000-08-04 Fujitsu Ltd 冗長セルを有するメモリデバイス
US6473880B1 (en) 1999-06-01 2002-10-29 Sun Microsystems, Inc. System and method for protecting data and correcting bit errors due to component failures
US6393597B1 (en) 1999-06-01 2002-05-21 Sun Microsystems, Inc. Mechanism for decoding linearly-shifted codes to facilitate correction of bit errors due to component failures
US6453440B1 (en) 1999-08-04 2002-09-17 Sun Microsystems, Inc. System and method for detecting double-bit errors and for correcting errors due to component failures
US6181614B1 (en) 1999-11-12 2001-01-30 International Business Machines Corporation Dynamic repair of redundant memory array
US6447682B1 (en) * 2001-07-03 2002-09-10 David A. Flowers Process and system for enhanced nitrogen removal in a wetland wastewater treatment facility
US7051264B2 (en) * 2001-11-14 2006-05-23 Monolithic System Technology, Inc. Error correcting memory and method of operating same
US7131050B2 (en) * 2002-02-28 2006-10-31 Lsi Logic Corporation Optimized read performance method using metadata to protect against drive anomaly errors in a storage array
US6959413B2 (en) * 2002-06-18 2005-10-25 Lsi Logic Corporation Method of handling unreadable blocks during rebuilding of a RAID device

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160141557A (ko) * 2015-06-01 2016-12-09 삼성전자주식회사 반도체 메모리 장치, 이를 포함하는 메모리 시스템 및 반도체 메모리 장치의 에러 정정 방법

Also Published As

Publication number Publication date
GB2395326A (en) 2004-05-19
AU2003241348A1 (en) 2004-01-19
WO2004003750A3 (en) 2004-06-10
GB0404112D0 (en) 2004-03-31
AU2003241348A8 (en) 2004-01-19
WO2004003750A2 (en) 2004-01-08
US20040003337A1 (en) 2004-01-01
US6973613B2 (en) 2005-12-06

Similar Documents

Publication Publication Date Title
KR20040064259A (ko) 컴포넌트 실패를 검출 및 보정하고, 컴포넌트 실패 후에단일 비트 에러보정을 제공하는 에러검출/보정 코드
US6996766B2 (en) Error detection/correction code which detects and corrects a first failing component and optionally a second failing component
US6976194B2 (en) Memory/Transmission medium failure handling controller and method
US6662333B1 (en) Shared error correction for memory design
US5164944A (en) Method and apparatus for effecting multiple error correction in a computer memory
US6751769B2 (en) (146,130) error correction code utilizing address information
US5418796A (en) Synergistic multiple bit error correction for memory of array chips
EP1183605B1 (en) System and method for protecting data and correcting bit errors due to component failures
EP0989491B1 (en) Technique for partioning data to correct memory part failures
US7370264B2 (en) H-matrix for error correcting circuitry
US6018817A (en) Error correcting code retrofit method and apparatus for multiple memory configurations
US7188296B1 (en) ECC for component failures using Galois fields
US5099484A (en) Multiple bit error detection and correction system employing a modified Reed-Solomon code incorporating address parity and catastrophic failure detection
US20040177309A1 (en) Familial correction with non-familial double bit error detection
US5768294A (en) Memory implemented error detection and correction code capable of detecting errors in fetching data from a wrong address
US5917838A (en) Fault tolerant memory system
US8140945B2 (en) Hard component failure detection and correction
JP2003507985A (ja) 2ビット・エラーを検出し、構成要素の障害によるエラーを訂正するためのシステムおよび方法
US4961193A (en) Extended errors correcting device having single package error correcting and double package error detecting codes
US5631915A (en) Method of correcting single errors
KR900001228B1 (ko) 에러정정 및 검출장치
US5751745A (en) Memory implemented error detection and correction code with address parity bits
EP1440372B1 (en) Multibit package error correction with non-restricted double bit error detection
US6973612B1 (en) Familial correction with non-familial double bit error detection for directory storage
US6460157B1 (en) Method system and program products for error correction code conversion

Legal Events

Date Code Title Description
PA0105 International application

Patent event date: 20040228

Patent event code: PA01051R01D

Comment text: International Patent Application

A201 Request for examination
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20040520

Comment text: Request for Examination of Application

PG1501 Laying open of application
E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20051213

Patent event code: PE09021S01D

E601 Decision to refuse application
PE0601 Decision on rejection of patent

Patent event date: 20060526

Comment text: Decision to Refuse Application

Patent event code: PE06012S01D

Patent event date: 20051213

Comment text: Notification of reason for refusal

Patent event code: PE06011S01I