KR20150070252A - 높은 신뢰도 메모리 컨트롤러 - Google Patents

높은 신뢰도 메모리 컨트롤러 Download PDF

Info

Publication number
KR20150070252A
KR20150070252A KR1020157012194A KR20157012194A KR20150070252A KR 20150070252 A KR20150070252 A KR 20150070252A KR 1020157012194 A KR1020157012194 A KR 1020157012194A KR 20157012194 A KR20157012194 A KR 20157012194A KR 20150070252 A KR20150070252 A KR 20150070252A
Authority
KR
South Korea
Prior art keywords
address space
memory
data
banks
reliability
Prior art date
Application number
KR1020157012194A
Other languages
English (en)
Other versions
KR101626040B1 (ko
Inventor
가브리엘 에이치. 로
빌라스 케이. 스리드하란
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20150070252A publication Critical patent/KR20150070252A/ko
Application granted granted Critical
Publication of KR101626040B1 publication Critical patent/KR101626040B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller

Landscapes

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

Abstract

집적 회로는 어드레스 공간을 갖는 메모리 및 메모리에 결합되어 수신된 메모리 액세스들에 응답하여 어드레스 공간에 액세스하는 메모리 컨트롤러를 포함한다. 메모리 컨트롤러는 어드레스 공간의 제 1 부분 내의 복수의 데이터 요소들, 및 어드레스 공간의 제 2 부분 내의 복수의 데이터 요소들에 대응하는 신뢰도 데이터에 더 액세스한다.

Description

높은 신뢰도 메모리 컨트롤러{HIGH RELIABILITY MEMORY CONTROLLER}
본 발명은 일반적으로 집적 회로들에 관한 것으로, 보다 구체적으로 메모리 컨트롤러들을 갖는 집적 회로들에 관한 것이다.
소비자들은 더 높은 성능 및 더 낮은 비용을 갖는 컴퓨터 시스템들을 계속 요구한다. 더 높은 성능 요건들을 처리하기 위해, 컴퓨터 칩 설계자들은 단일 칩 상에 다수의 프로세서 코어들을 갖는 집적 회로들을 개발해왔다. 게다가, 멀티 코어 집적 마이크로프로세서 및 연관된 메모리 칩들을 단일 구성요소로 패키징하는 다양한 다이 적층 집적 기술들이 개발되어왔다. 그러나, 메모리 칩들은 다양한 결함 상태들에 민감하다. 적층 다이 구성들에 사용되는 메모리 칩들의 경우에, 영구적 결함이 발생할 때, 스택에서 모든 다른 칩들을 교체하는 것 없이 메모리 칩을 용이하게 교체하는 것이 가능하지 않다.
어드레스 공간을 갖는 메모리, 및 메모리에 결합되어 수신된 메모리 액세스들에 응답하여 어드레스 공간에 액세스하는 메모리 컨트롤러를 포함하는 집적 회로가 제공된다. 메모리 컨트롤러는 상기 어드레스 공간의 제 1 부분 내의 복수의 데이터 요소들, 및 상기 어드레스 공간의 제 2 부분 내의 복수의 데이터 요소들에 대응하는 신뢰도 데이터에 더 액세스한다.
메모리 액세스 생성 회로 및 메모리 컨트롤러를 포함하는 집적 회로가 또한 제공된다. 메모리 액세스 생성 회로는 메모리의 어드레스 공간에서 데이터 요소들에 대한 메모리 액세스들을 생성한다. 메모리 컨트롤러는 수신된 메모리 액세스들에 응답하여 어드레스 공간에 액세스하기 위해 메모리에 결합된다. 메모리 컨트롤러는 어드레스 공간의 제 1 부분 내의 복수의 데이터 요소들, 및 어드레스 공간의 제 2 부분 내의 복수의 데이터 요소들에 대응하는 신뢰도 데이터에 더 액세스한다.
제 1 데이터 요소에 대한 기록 액세스가 리퀘스터로부터 수신되는 방법이 제공된다. 신뢰도 데이터는 데이터 요소에 대해 산출된다. 데이터 요소는 어드레스 공간의 제 1 부분에 저장되고, 신뢰도 데이터는 어드레스 공간의 제 2 부분에 저장된다.
도 1은 일부 실시예들에 따른 물리 메모리를 구현하는 제 1 멀티 칩 모듈의 사시도를 예시한다.
도 2는 일부 실시예들에 따른 물리 메모리를 구현하는 제 2 멀티 칩 모듈의 사시도를 예시한다.
도 3은 일부 실시예들에 따른 높은 신뢰도 메모리 컨트롤러를 갖는 집적 회로를 블록도 형태로 예시한다.
도 4는 일부 실시예들에 따른 도 3의 메모리에 대한 어드레스 공간의 표현을 예시한다.
도 5는 일부 실시예들에 따른 도 3의 메모리에 대한 어드레스 공간의 다른 표현을 예시한다.
도 6은 일부 실시예들에 따른 도 3의 메모리에 대한 어드레스 공간의 다른 표현을 예시한다.
도 7은 일부 실시예들에 따른 도 3의 메모리에 대한 어드레스 공간의 다른 표현을 예시한다.
도 8은 일부 실시예들에 따른 데이터를 기록하는 방법의 흐름도를 예시한다.
도 9는 일부 실시예들에 따른 데이터를 판독하는 방법의 흐름도를 예시한다.
이하의 설명에서, 상이한 도면들 내의 동일한 참조 숫자들의 사용은 유사 또는 동일한 항목들을 지시한다. 다르게 언급되지 않으면, 단어 "결합된" 및 그것의 연관된 동사 형태들은 본 기술분야에 공지된 수단에 의해 직접 연결 및 간접 전기적 연결 양자를 포함하고, 다르게 언급되지 않으면 직접 연결의 임의의 설명은 또한 간접 전기적 연결의 적절한 형태들을 사용하는 대체 실시예들을 암시한다.
도 1은 일부 실시예들에 따른 물리 메모리를 구현하는 제 1 멀티 칩 모듈의 사시도를 예시한다. 멀티 칩 모듈(100)은 일반적으로 멀티 코어 프로세서 칩(120) 및 메모리 칩 스택(140)을 포함한다. 메모리 칩 스택(140)은 서로의 상단에 적층되는 복수의 메모리 칩들을 포함한다. 도 1에 예시된 바와 같이, 메모리 칩 스택(140)은 메모리 칩(142), 메모리 칩(144), 메모리 칩(146), 및 메모리 칩(148)을 포함한다. 일반적으로, 메모리 칩 스택(140)은 도 1에 예시된 것보다 더 많거나 더 적은 메모리 칩들을 포함할 수 있다는 점을 주목한다. 메모리 칩 스택(140)의 각각의 개별 메모리 칩은 적절한 시스템 동작을 위해 요구되는 바와 같이, 메모리 칩 스택(140)의 다른 메모리 칩들에 연결된다. 메모리 칩 스택(140)의 각각의 개별 메모리 칩은 또한 적절한 시스템 동작을 위해 요구되는 바와 같이, 멀티 코어 칩(120)에 연결된다.
동작 시, 멀티 칩 모듈(100)의 구성요소들은 단일 집적 회로 패키지에 결합되며, 여기서 메모리 칩 스택(140) 및 멀티 코어 칩(120)은 단일 집적 회로로서 사용자에게 나타난다. 멀티 코어 칩(120)에 메모리 칩 스택(140)의 전기적 연결은 수평 인터커넥트와 결합하여, 수직 인터커넥트, 예를 들어 비아(via) 또는 실리콘 관통 구멍을 사용하여 달성된다. 멀티 코어 프로세서 다이(120)는 메모리 칩 스택(140) 내의 메모리 칩들보다 더 두껍고 메모리 칩 스택(140)을 물리적으로 지원한다. 5개의 개별 칩들과 비교될 때, 멀티 칩 모듈(100)은 일반적으로 구성요소 액세스 시간을 감소시키고 시스템 성능을 증가시킴과 동시에, 시스템 비용 및 보드 공간을 절감한다. 그러나, 메모리 칩들은 다양한 신뢰도 문제들을 받는다. 예를 들어, 환경에서 본래 발생하거나 반도체 패키징 재료로부터 방출되는 알파 입자들과 같은, 백그라운드 방사선은 비트 셀(bit cell)에 부딪칠 수 있어, 값이 손상되게 한다. 메모리의 반복된 사용은 다른 장애들을 초래할 수도 있다. 예를 들어, 임의의 중요한 디바이스들 내의 일렉트로마이그레이션(electromigration)은 디바이스들이 마모되는 것을 초래할 수 있다: 그것들은 효과적으로 더 두껍게 되며, 그것에 의해 그의 저항을 증가시키고 결국 부정확한 값들이 판독되게 하는 타이밍 오류들을 초래한다. 다른 타입들의 고장들이 또한 가능하다. 메모리 칩이 고장나면, 결함 메모리 칩을 교체하는 실제적인 방법이 없다. 그 대신에, 사용자는 고가의 옵션인, 여전히 작동하는 메모리 및 프로세서 칩들의 모두를 포함하는, 전체 패키지를 교체해야 한다.
도 2는 일부 실시예들에 따른 물리 메모리를 구현하는 제 2 멀티 칩 모듈(200)의 사시도를 예시한다. 멀티 칩 모듈(200)은 일반적으로 인터포저(interposer)(210), 멀티 코어 프로세서 칩(220), 및 메모리 칩 스택(240)을 포함한다. 인터포저(210)는 멀티 코어 칩(220)의 활성 측면에 연결된다. 메모리 칩 스택(240)은 서로의 상단에 적층되는 복수의 메모리 칩들을 포함한다. 도 2에 예시된 바와 같이, 메모리 칩 스택(240)은 메모리 칩(242), 메모리 칩(244), 메모리 칩(246), 및 메모리 칩(248)을 포함한다. 일반적으로, 메모리 칩 스택(240)은 도 2에 예시된 것보다 더 많거나 더 적은 메모리 칩들을 포함할 수 있다는 점을 주목한다. 메모리 칩 스택(240)의 각각의 개별 메모리 칩은 적절한 시스템 동작을 위해 요구되는 바와 같이, 메모리 칩 스택(240)의 다른 메모리 칩들에 연결된다. 메모리 칩 스택(240)의 각각의 개별 메모리 칩은 또한 적절한 시스템 동작을 위해 요구되는 바와 같이, 멀티 코어 칩(220)에 연결된다. 일부 실시예들에서, 메모리 칩 스택(240)은 단일 메모리 칩을 포함한다. 일부 실시예들에서, 멀티 칩 모듈(200)은 메모리 칩 스택(240)과 같은 하나보다 더 많은 메모리 칩 스택을 포함한다.
동작 시, 멀티 칩 모듈(200)의 구성요소들은 단일 패키지(도 2에 도시되지 않음)에 결합되고, 따라서 메모리 칩 스택(240) 및 멀티 코어 칩(220)은 단일 집적 회로로서 사용자에게 나타난다. 멀티 코어 칩(220)에 메모리 칩 스택(240)의 전기적 연결은 수평 인터커넥트와 결합하여, 수직 인터커넥트, 예를 들어 비아 또는 실리콘 관통 구멍을 사용하여 달성된다. 인터포저(210)는 메모리 칩 스택(240)의 각각의 개별 메모리 칩에 멀티 코어 칩(220)을 연결하는 것을 용이하게 하기 위해 물리적 지원 및 인터페이스 양자를 제공한다. 5개의 개별 칩들과 비교될 때, 멀티 칩 모듈(200)은 일반적으로 구성요소 액세스 시간을 감소시키고 시스템 성능을 증가시킴과 동시에, 시스템 비용 및 보드 공간을 절약한다. 멀티 칩 모듈(200)은 멀티 코어 프로세서(220)로부터 메모리 칩 스택(240)을 분리하므로 멀티 코어 프로세서(220)의 더 양호한 냉각을 허용한다. 그러나, 멀티 칩 모듈(200)은 또한 전체 패키지를 교체하는 것 없이 결함 메모리 칩이 용이하게 교체될 수 없으므로 신뢰도 및 서비스 가용성 문제들을 겪는다.
도 3은 일부 실시예들에 따른 높은 신뢰도 메모리 컨트롤러를 갖는 집적 회로(300)를 블록도 형태로 예시한다. 집적 회로(300)는 일반적으로 단일 집적 회로 다이 상에 구현되는 멀티 코어 프로세서(310) 및 메모리(350)를 포함한다.
멀티 코어 프로세서(310)는 메모리 액세스 생성 회로(320), 큐(queue)(332), 크로스바 스위치(crossbar switch)(XBAR)(334), 고속 입력/출력(I/O) 컨트롤러(336), 및 메모리 컨트롤러(340)를 포함한다. 메모리 액세스 생성 회로(320)는 "CPU0"로 라벨링된 중앙 처리 유닛(CPU) 코어(322), 및 "CPU1"로 라벨링된 CPU 코어(324)를 포함한다. CPU 코어들(322 및 324)은 메모리 액세스들을 수행하고, 메모리 액세스들을 정의하는 어드레스들, 데이터, 및 제어 신호들을 송신하고 수신한다. 큐(332)는 CPU 코어(322), CPU 코어(324), 및 XBAR(334)에 연결된다. XBAR(334)은 고속 I/O 컨트롤러(336) 및 메모리 컨트롤러(340)에 연결된다. 고속 I/O 컨트롤러(336)는 도 3에 도시되지 않은, 외부 신호들의 세트를 주변 디바이스에 송신하고 수신하기 위해 "I/O"로 라벨링된 입력/출력(I/O) 포트를 갖는다.
메모리 컨트롤러(340)는 에러 정정 코드(ECC; error correction code)/순환 중복 코드(CRC; cyclic redundancy code) 산출("comp") 회로(342), 동적 랜덤 액세스 메모리(DRAM; dynamic random-access memory) 스케줄러(344), 및 물리 인터페이스(PHY)(346)를 포함한다. ECC/CRC comp 회로(342) 및 DRAM 스케줄러(344)는 PHY(346)에 각각 연결된다. PHY(346)는 "컨트롤"로 라벨링된 신호들의 세트를 제공하는 출력, "BA"로 라벨링된 뱅크 어드레스 신호들의 세트를 제공하는 출력, "어드레스"로 라벨링된 신호들의 세트를 제공하는 출력, 및 "데이터"로 라벨링된 신호들의 세트를 송신하고 수신하는 I/O 포트를 갖는다.
메모리(350)는 어드레스 공간을 정의하고 DRAM(352), DRAM(354), DRAM(356), 및 DRAM(358)을 포함하는, 다수의 동적 랜덤 액세스 메모리(DRAM) 칩들을 포함한다. 메모리(350)는 도 1의 메모리 칩 스택(140) 또는 도 2의 메모리 칩 스택(240)에 의해 구현될 수 있다. DRAM들(352, 354, 356, 및 358)은 JEDEC에 의해 발행된 DDR3 더블 데이터 레이트(DDR; double data rate) 표준과 호환가능하지만, 다른 실시예들에서 그들은 다른 DDR 및 비-DDR 표준들과 호환가능할 수 있다. 일반적으로, DDR 칩들은 메모리 뱅크들의 세트를 각각 갖는다. 메모리(350) 내의 각각의 DRAM 칩은 컨트롤을 수신하는 입력, BA를 수신하는 입력, 어드레스를 수신하는 입력, 및 데이터를 송신하고 수신하는 I/O 포트를 갖는다.
동작 시, CPU 코어(322) 및 CPU 코어(324) 양자는 하나 이상의 프로그램들에 대응하는 명령들을 검색하고 실행하며 메모리 액세스 요청들을 큐(332)에 제공함으로써 명령들과 연관된 데이터에 액세스하는 능력을 갖는다. 큐(332)는 I/O 컨트롤러(336) 또는 메모리 컨트롤러(340)에 디스패치(dispatch)를 위한 액세스들을 저장한다. 큐(332)는 선입, 선출 기초로 데이터 액세스들을 우선순위화한다.
XBAR(334)은 메모리 액세스 생성 회로(320), 큐(332), 고속 I/O 컨트롤러(336), 및 메모리 컨트롤러(340)를 포함하는, 멀티 코어 프로세서(310)의 회로들 및 그 연관된 버스들을 스위칭하고 멀티플렉싱한다. 고속 I/O 컨트롤러(336)는 XBAR(334)과 이더넷 컨트롤러와 같은, 외부 회로들 사이에 연결을 제공한다.
메모리 컨트롤러(340)는 메모리 액세스 요청들에 응답하여 메모리(350)의 어드레스 공간 내의 메모리 위치들에 액세스한다. 메모리 컨트롤러(340)는 정상 데이터 및 데이터에 관한 특수 신뢰도 정보 양자를 표준, 재고품 메모리 칩들에 저장함으로써 높은 신뢰도를 보장한다. 신뢰도 데이터 정보는 비트 오류들의 검출 및 가능한 정정을 허용한다. 신뢰도 데이터를 저비용 상품 메모리에 저장함으로써, 메모리 컨트롤러(340)는 멀티 코어 프로세서(310)가 저가의 멀티 칩 모듈들에서 적층 다이와 집적되는 것을 허용한다.
아래에 더 상세히 설명되는 바와 같이, 메모리 컨트롤러(340)는 어드레스 공간의 제 1 부분 내의 데이터 요소들 및 어드레스 공간의 제 2 부분 내의 데이터 요소들에 대응하는 신뢰도 데이터에 액세스한다. 메모리 컨트롤러(340)는 그것이 메모리(350)에 저장하는 신뢰도 데이터를 생성한 후에, 저장된 신뢰도 데이터에 대해 검사하기 위해 신뢰도 데이터를 산출하는 ECC/CRC comp 회로(342)를 사용한다. ECC/CRC comp 회로(342)는 신뢰도 데이터를 사용하여, DRAM 스케줄러(324)에 의해 액세스되는 데이터를 검사하고, 적절하다면 데이터에서 오류들을 선택적으로 정정하고 정정된 데이터를 요청 CPU에 전송한다.
PHY(346)는 ECC/CRC comp 회로(342) 및 DRAM 스케줄러(344)에 대한 인터페이스를 멀티 뱅크 메모리(350)에 제공한다. 데이터에 액세스하기 위해, PHY(346)는 표준 컨트롤 신호들, BA 신호들, 및 어드레스 신호들을 메모리(350)에 제공한다. 일반적으로, 메모리 컨트롤러(340)는 어드레스 공간의 제 1 부분으로부터 데이터 요소 및 어드레스 공간의 제 2 부분으로부터 신뢰도 데이터를 판독하기 위해 PHY(346)를 제어하도록 판독 액세스 요청에 응답한다. ECC/CRC comp 회로(342)는 수신된 데이터에 기초하여 신뢰도를 생성하고 메모리 컨트롤러(340)는 데이터가 정확하게 판독되었는지를 판단하기 위해 생성된 신뢰도 데이터를 검색된 신뢰도 데이터와 비교한다. 메모리 컨트롤러(340)는 데이터 요소에 대한 신뢰도 데이터를 생성하기 위해 ECC/CRC comp 회로(342)를 제어하도록 기록 액세스 요청에 응답하고 어드레스 공간의 제 1 부분에 데이터 요소 및 어드레스 공간의 제 2 부분에 신뢰도 데이터를 기록하기 위해 PHY(346)를 제어한다. 메모리 컨트롤러(340)가 상이한 레벨들의 신뢰도 지원을 위해 메모리(350)의 어드레스 공간을 생성하고 관리하는 방법들이 이제 설명될 것이다.
도 4는 일부 실시예들에 따른 도 3의 메모리에 대한 어드레스 공간(400)의 표현을 예시한다. 어드레스 공간(400)은 일반적으로 "뱅크 0"으로 라벨링된 메모리 뱅크(410), "뱅크 1"로 라벨링된 메모리 뱅크(420), "뱅크 2"로 라벨링된 메모리 뱅크(430), 및 "뱅크 3"으로 라벨링된 메모리 뱅크(440)를 포함하는 연속 메모리 뱅크들 중에 어드레스들의 인접 부분을 포함한다.
메모리 뱅크(410)는 "A"로 라벨링된 대표적인 메모리 페이지(412) 및 "B" 내지 "P"로 연속적으로 라벨링된 다수의 추가 대표적인 메모리 페이지들을 포함하는, 다수의 4 킬로바이트(KB) 메모리 페이지들을 포함한다.
메모리 뱅크들(420, 430, 및 440)은 마찬가지로 다수의 4 KB 메모리 페이지들을 포함한다. 그러나, 메모리 뱅크(440)는 모든 메모리 뱅크들에 대한 신뢰도 데이터를 저장하는 인접 데이터 부분(442) 및 연속 신뢰도 부분(444)을 포함한다. 신뢰도 부분(444)은 "E0"으로 라벨링된 대표적인 메모리 페이지(446), 및 "E1"로 라벨링된 대표적인 메모리 페이지를 포함한다. 메모리 페이지(446)는 메모리 페이지들(A 내지 H) 내의 데이터 요소들에 대응하는, "EA" 내지 "EH"로 연속적으로 라벨링된, 신뢰도 데이터를 포함한다.
동작 시, 메모리 컨트롤러(340)는 어드레스 공간(400)의 제 1(예를 들어 상단 또는 더 낮은 어드레스) 부분 내의 데이터 요소들에 액세스하고 어드레스 공간(400)의 제 2(예를 들어 하단 또는 더 높은 어드레스) 부분, 즉 신뢰도 부분(444) 내의 데이터 요소들에 대응하는 신뢰도 데이터에 액세스한다. 예를 들어 메모리 뱅크(410)는 4 KB 메모리 페이지들로 조직된다. 도 4는 어드레스들의 인접 부분에 대표적인 페이지들(A 내지 H)을 예시한다. 메모리 뱅크(440)에서, 메모리 컨트롤러(340)는 또한 어드레스들(444)의 인접 부분에서, 페이지들(A 내지 H) 내의 데이터 그룹들에 대응하는, 신뢰도 데이터(EA 내지 EH)를 포함하는, 신뢰도 데이터 그룹(E0)에 대한 하나의 4 KB 메모리 페이지(446)에 액세스한다.
마찬가지로, 메모리 뱅크(410)에서, 메모리 컨트롤러(340)는 어드레스들의 인접 부분 내의 페이지들(I 내지 P)에서 데이터 그룹들에 대한 8개의 4 KB 메모리 페이지들에 액세스한다. 메모리 뱅크(440)에서, 메모리 컨트롤러(340)는 또한 신뢰도 부분(444)에서, 페이지들(I 내지 P) 내의 데이터 그룹들에 대응하는, 신뢰도 데이터(도 4에 구체적으로 도시되지 않음)를 포함하는, 신뢰도 데이터 그룹(E1)에 대한 하나의 4 KB 메모리 페이지에 액세스한다.
어드레스 공간(400)은 인접 부분 내의 신뢰도 데이터를 어드레스 공간(400)의 단부에 배치함으로써 선형 데이터 어드레스 공간을 제공하며, 그것에 의해 어드레스 공간에서 "홀들"을 방지한다. 어드레스 공간(400)은 다양한 타입들의 신뢰도 데이터를 지원한다. 예를 들어, 임의의 표준들은 모든 64 데이터 비트들(72 전체 비트들)에 대해 8 신뢰도 비트들을 갖는 것으로, (72, 64) SECDED 코드와 같은, 유용한 단일 오류 정정, 더블 오류 검출(SECDED) 코드를 정의한다. SECDED를 사용하면, ECC/CRC comp 회로(342)는 단일 오류를 검출하고 정정하며, 더블 오류를 검출하지만 정정하지 않는 능력을 갖는다. 다른 공지된 코드들에 대해, ECC/CRC comp 회로(342)는 2개보다 더 많은 오류들을 검출하고/하거나 정정하는 능력을 갖는다. 어드레스 공간(400)은 신뢰도 부분(444)의 크기가 사용된 신뢰도 코드의 타입에 기초하여 변화되는 것을 허용하며, 그 자체는 시스템의 신뢰도 요구들에 기초할 수 있다.
그러나, 모든 신뢰도 데이터를 단일 메모리 뱅크에 배치함으로써, 메모리 컨트롤러(340)는 일부 시스템들에 대한 액세스 레이턴시를 허용불가능하게 증가시킬 수 있다. 예를 들어, 페이지들을 다수의 뱅크들에서 동시에 개방하게 하는 시스템들에서, 신뢰도 부분(444)으로의 액세스들은 메모리 컨트롤러(340)가 단일 뱅크(440)로부터 상이한 뱅크들로 액세스들을 위한 신뢰도 데이터에 액세스할 때 "병목"을 야기한다. 멀티 코어 프로세서(310)는 이러한 병목을 보상하기 위해 다른 메커니즘들을 통합할 수 있다는 점을 주목한다. 예를 들어, 메모리 컨트롤러(340) 또는 메모리 액세스 생성 회로(320)와 같은 회로들은 신뢰도 데이터를 프리페이(prefetch)하고 그것을 로컬 캐시에 저장할 수 있다. 또한, 아래에 더 완전히 설명되는 바와 같이, 메모리 컨트롤러(340)는 신뢰도 데이터를 하나보다 더 많은 단일 뱅크에 분배함으로써 신뢰도 데이터에 액세스하기 위해 레이턴시를 보상하거나, 데이터 요소들 및 신뢰도 데이터를 메모리 뱅크들 중에 대체 형태로 저장할 수 있다.
도 5는 일부 실시예들에 따른 도 3의 메모리에 대한 어드레스 공간(500)의 다른 표현을 예시한다. 어드레스 공간(500)은 일반적으로 "뱅크 0"으로 라벨링된 메모리 뱅크(510), "뱅크 1"로 라벨링된 메모리 뱅크(520), "뱅크 2"로 라벨링된 메모리 뱅크(530), 및 "뱅크 3"으로 라벨링된 메모리 뱅크(540)를 포함하는, 연속 메모리 뱅크들 중에 어드레스들의 인접 부분을 포함한다.
메모리 뱅크(510)는 "A" 내지 "D"로 연속적으로 라벨링된 4개의 대표적인 메모리 페이지들(516)을 포함하는, 인접 데이터 부분(512) 내의 다수의 메모리 페이지들을 포함한다. 뱅크(510)는 또한 신뢰도 부분(514) 내의 메모리 페이지들을 포함한다. 신뢰도 부분(514) 내의 각각의 페이지는 "EA"로 라벨링된 대표적인 신뢰도 데이터(518), 및 메모리 페이지들(A 내지 D) 내의 데이터 요소들에 대응하는, "EB" 내지 "ED"로 연속적으로 라벨링된 신뢰도 데이터를 포함하는, 신뢰도 데이터를 포함한다. 마찬가지로, 메모리 뱅크들(520, 530, 및 540)은 또한 데이터 부분들(522, 532, 및 543) 및 신뢰도 부분들(524, 534, 및 544)을 각각 포함한다. 신뢰도 부분(524, 534, 및 544) 내의 각각의 페이지는 데이터 부분들(522, 532, 및 542) 내의 데이터 요소들에 대응하는 신뢰도 데이터를 각각 포함한다.
동작 시, 메모리 컨트롤러(340)는 각각의 메모리 뱅크의 제 1 부분 내의 데이터 요소들 및 동일한 메모리 뱅크의 제 2 부분 내의 데이터 요소들에 대응하는 신뢰도 데이터에 액세스한다. 예를 들어, 메모리 컨트롤러(340)는 데이터 부분(510)의 메모리 페이지들(516) 내의 데이터 요소들(A, B, C, 및 D), 및 신뢰도 부분(514)의 메모리 페이지(518) 내의 신뢰도 데이터(EA 내지 ED)에 액세스한다. 따라서, 메모리 컨트롤러(340)는 데이터 및 그것의 대응하는 신뢰도 데이터 양자를 단일 메모리 뱅크에 저장한다. 마찬가지로, 메모리 컨트롤러(340)는 데이터 부분들(522, 532, 및 542) 내의 데이터 요소들 각각에 대해, 메모리 뱅크들(520, 530, 및 540) 각각에 액세스한다. 메모리 컨트롤러(340)는 또한 신뢰도 부분들(524, 534, 및 544) 내의 신뢰도 데이터 각각에 대해, 메모리 뱅크들(520, 530, 및 540) 각각에 액세스한다.
전체, 어드레스 공간(500)은 메모리 뱅크들(510-540) 중에 분배되는 비인접 데이터 부분, 및 또한 메모리 뱅크들(510-540) 중에 분배되는 비연속 신뢰도 부분을 갖는다. 메모리 컨트롤러(340)는 제 1 (100-X)%의 메모리 뱅크로부터 데이터 요소들에 액세스하고 마지막 X%의 동일한 메모리 뱅크로부터 신뢰도 데이터에 액세스한다. 예를 들어, 메모리 컨트롤러(340)가 (64, 72) SECDED 코드를 사용할 때, X = 12.5%이다. 어드레스 공간(500)이 신뢰도 데이터를 대응하는 데이터로서 동일한 메모리 뱅크에 배치함으로써, 단일, 선형 데이터 공간을 포함하지 않지만, 메모리 공간(500)은 도 4의 메모리 공간(400)과 연관된 병목들을 방지한다.
도 6은 일부 실시예들에 따른 도 3의 메모리에 대한 어드레스 공간(600)의 다른 표현을 예시한다. 어드레스 공간(600)은 일반적으로 "뱅크 0"으로 라벨링된 메모리 뱅크(610), "뱅크 1"로 라벨링된 메모리 뱅크(620), "뱅크 2"로 라벨링된 메모리 뱅크(630), 및 "뱅크 3"으로 라벨링된 메모리 뱅크(640)를 포함하는, 연속 메모리 뱅크들 중에 어드레스들의 인접 부분을 포함한다.
어드레스 공간(600)은 "A" 내지 "R"로 라벨링된 대표적인 메모리 로우들(rows)을 포함하는, 데이터를 저장하고 4개의 메모리 뱅크들 중에 분배되는 다수의 메모리 로우들을 포함한다. 어드레스 공간(600)은 또한 데이터에 대한 신뢰도 코드들을 저장하고 또한 메모리 뱅크들 중에 분배되며, 데이터 요소들을 갖는 로우들과 인터리빙(interleaving)되는 다수의 메모리 로우들을 포함한다. 이러한 로우들 각각은 다른 로우들의 데이터 요소들에 대응하는 신뢰도 데이터를 갖는다.
특히, 메모리 뱅크(610)는 로우들(611-615)을 포함하고; 메모리 뱅크(620)는 로우들(621-625)을 포함하고; 메모리 뱅크(630)는 로우들(631-635)을 포함하고; 메모리 뱅크(640)는 로우들(641-645)을 포함한다. 어드레스 공간(600)에서, 데이터는 메모리 뱅크들 중에 분배된다. 따라서, 데이터 요소(H)가 뱅크(640)의 로우(642)에 저장될 때까지, 데이터 요소(A)는 뱅크(610)의 로우(611)에 저장되고, 데이터 요소(B)는 뱅크(620)의 로우(621)에 저장되는 등등이다. 그러나, 8개의 데이터 요소들이 이러한 방식으로 로우들에 분배된 후에, 로우들에 대응하는 신뢰도 데이터의 세트가 저장된다. 따라서, 메모리 뱅크(610)는 로우들(A 내지 H) 내의 데이터 요소들에 대응하는 로우(613)에 "EA - EH"로 라벨링된 신뢰도 데이터를 포함한다.
뱅크들(610-640)은 뱅크(610) 내의 로우(615)가 데이터 요소(P)를 저장할 때까지, 데이터 요소(I)를 저장하는 뱅크(620) 내의 로우(623), 데이터 요소(J)를 저장하는 뱅크(630) 내의 로우(633) 등등으로 시작하는 연속 위치들에 8개의 후속 데이터 요소들(I 내지 P)을 저장한다. 메모리 뱅크(620)의 로우(625)는 로우들(I 내지 P)에 데이터 요소들에 대응하는 "EI - EP"로 라벨링된 신뢰도 데이터 등을 저장하는 등등이다.
동작 시, 메모리 컨트롤러(340)는 데이터 요소들을 어드레스 공간(600) 내의 연속 메모리 뱅크들(610 내지 640) 중에서 데이터 요소들에 대응하는 신뢰도 데이터와 인터리빙시킨다. 메모리 컨트롤러(340)는 다수의 뱅크들 중 연속 뱅크들 중에 임의의 수의 연속적으로 어드레스된 데이터 요소들을 갖는, 데이터 그룹의 각각의 데이터 요소를 저장하고, 다음 연속 뱅크에 그룹의 모든 데이터 요소들에 대한 신뢰도 데이터를 저장한다. 예를 들어, 메모리 컨트롤러(340)는 메모리 뱅크들(610 내지 640) 중에, 로우들(611, 621, 631, 641, 612, 622, 632, 및 642)에서 첫번째 8개의 데이터 그룹들에 수평으로 액세스한다. 메모리 컨트롤러(340)는 여덟번째 데이터 그룹 후에 로우(613)에 위치된 신뢰도 데이터(EA - EH)에 액세스하며, 이는 로우들(A-H)에 첫번째 8개의 데이터 그룹들에 대응하는 신뢰도 데이터를 저장한다. 메모리 컨트롤러(340)는 또한 메모리 뱅크들(610 내지 640) 중에, 로우들(623, 633, 643, 614, 624, 634, 644, 및 615)에서 두번째 8개의 데이터 그룹들에 수평으로 액세스한다. 메모리 컨트롤러(340)는 또한 두번째 8개의 데이터 그룹들 후에 로우(625) 내의 신뢰도 데이터(EI - EP)에 액세스하며, 이는 로우들(I-P)에 두번째 8개의 데이터 그룹들에 대응하는 신뢰도 데이터를 저장하는 등등이다.
데이터 요소들을 연속 메모리 뱅크들 중에서 데이터 요소들에 대응하는 신뢰도 데이터와 인터리빙시킴으로써, 메모리 컨트롤러(340)는 특정 메모리 액세스를 위한 신뢰도 데이터가 데이터를 저장하는 동일한 메모리 뱅크에 저장될 기회를 감소시킨다. DDR DRAM에서, 새로운 페이지에 액세스하기 전에 이전 페이지는 프리차지 커맨드(precharge command)를 뱅크에 발행함으로써 폐쇄되고, 새로운 페이지는 활성화 커맨드를 발행함으로써 개방되어야 한다. 따라서, 데이터 및 그것의 대응하는 신뢰도 데이터가 동일한 뱅크에 저장될 확률을 감소시킴으로써, 어드레스 공간(600)은 데이터 및 대응하는 신뢰도 데이터에 액세스하는데 요구되는 시간의 평균량을 감소시킨다.
도 7은 일부 실시예들에 따른 도 3의 메모리에 대한 어드레스 공간(700)의 다른 표현을 예시한다. 어드레스 공간(700)은 일반적으로 "채널 0"으로 라벨링된 메모리 채널(710), "채널 1"로 라벨링된 메모리 채널(720), 데이터 요소(730), 및 신뢰도 데이터(740)를 포함한다. 메모리 채널(710)은 "뱅크 0" 내지 "뱅크 7"로 연속적으로 라벨링된, 메모리 뱅크들(711 내지 718)을 포함하는, 다수의 메모리 뱅크들을 포함한다.
메모리 뱅크(711)는 데이터 바이트들("A [7]" 내지 "A [0]")을 각각 포함하는 "A"로 라벨링된 데이터 그룹을 포함한다. 메모리 뱅크들(712-718)은 마찬가지로 8 바이트들을 각각 갖고 메모리 뱅크(711)와 유사한 방식으로 배열되는 데이터 그룹들을 포함한다. 메모리 뱅크(712)는 데이터 바이트들("B [7]" 내지 "B [0]")을 각각 포함하는 "B"로 라벨링된 데이터 그룹을 포함한다. 메모리 뱅크(713)는 데이터 바이트들("C [7]" 내지 "C [0]")을 각각 포함하는 "C"로 라벨링된 데이터 그룹을 포함한다. 메모리 뱅크(714)는 데이터 바이트들("D [7]" 내지 "D [0]")을 각각 포함하는 "D"로 라벨링된 데이터 그룹을 포함한다. 메모리 뱅크(715)는 데이터 바이트들("E [7]" 내지 "E [0]")을 각각 포함하는 "E"로 라벨링된 데이터 그룹을 포함한다. 메모리 뱅크(716)는 데이터 바이트들("F [7]" 내지 "F [0]")을 각각 포함하는 "F"로 라벨링된 데이터 그룹을 포함한다. 메모리 뱅크(717)는 데이터 바이트들("G [7]" 내지 "G [0]")을 각각 포함하는 "G"로 라벨링된 데이터 그룹을 포함한다. 메모리 뱅크(718)는 데이터 바이트들("H [7]" 내지 "H [0]")을 각각 포함하는 "H"로 라벨링된 데이터 그룹을 포함한다.
메모리 채널(720)은 "뱅크 0"으로 라벨링된 대표적인 메모리 뱅크(721) 및 "뱅크 1"로 라벨링된 대표적인 메모리 뱅크를 포함하는, 다수의 추가 메모리 뱅크들을 포함한다. 메모리 뱅크(721)는 "ECC 구성요소들"로 라벨링된 신뢰도 데이터 구성요소들을 포함한다.
데이터 요소(730)는 8개의 대표적인 데이터 바이트들, 구성요소([0]) 내지 구성요소([7])를 포함한다.
동작 시, 메모리 컨트롤러(340)는 데이터 요소(730)의 일부들을 메모리 채널(710) 중에 인터리빙하고, 데이터 요소(730)에 대한 신뢰도 데이터를 추가 메모리 뱅크(721)에 저장한다. 예를 들어, 메모리 컨트롤러(340)는 데이터 요소(730)의 구성요소([0])를 뱅크(711)의 A [0]에, 데이터 요소(730)의 구성요소([1])를 뱅크(712)의 B [0]에, 데이터 요소(730)의 구성요소([2])를 뱅크(713)의 C [0]에 등등, 내지 데이터 요소(730)의 구성요소([7])를 뱅크(718)의 H [0]에 저장한다. 메모리 컨트롤러(340)는 데이터 구성요소([7]) 내지 데이터 구성요소([0])에 대응하는, 신뢰도 데이터 구성요소(740)를 추가 메모리 뱅크(721)의 바이트 위치([0])에 더 저장한다.
데이터 요소의 바이트들을 메모리 채널의 뱅크들 중에서 인터리빙하고, 신뢰도 데이터 바이트들을 추가 메모리 채널의 추가 뱅크에 저장함으로써, 메모리 컨트롤러(340)는 단일 뱅크가 고장날 때 데이터의 복구를 허용한다.
그러나, 메모리 컨트롤러(340)는 결함 메모리 뱅크의 데이터 구성요소들을, 다른 완전한 기능 메모리 뱅크들에서 재생성하는 능력을 갖는다. 예를 들어, 메모리 컨트롤러(340)가 데이터 요소의 각각의 구성요소를 메모리 뱅크에 저장하고, 추가 메모리 뱅크로부터 신뢰도 데이터 구성요소를 갖는 각각의 구성요소를 커버하므로, 결함 메모리 요소의 모든 데이터 요소 구성요소는 연관된 신뢰도 데이터에 의해 추가 뱅크로부터 커버된다. 예를 들어 SECDED 코드를 사용하면, 메모리 컨트롤러(340)는 모든 데이터 요소들을 결함 뱅크에서 검출, 정정, 및 재생성하는 능력을 갖는다.
위의 도 4-도 7에 개시된 것들과 같은 구성들을 사용함으로써, 멀티 코어 프로세서(310)는 저가의 재고품 메모리를 사용하여 메모리 칩들을 추가하는 것 없이 시스템의 신뢰도, 유용성, 및 서비스 가용성을 증대시킨다.
도 8은 일부 실시예들에 따른 데이터를 기록하는 방법(800)의 흐름도를 예시한다. 동작 박스(810)에서, 데이터 요소에 대한 기록 액세스는 리퀘스터로부터 수신된다. 동작 박스(820)에서, 데이터 요소에 대한 신뢰도 데이터가 산출된다. 동작 박스(830)에서, 데이터 요소는 어드레스 공간의 제 1 부분에 저장된다. 동작 박스(840)에서, 신뢰도 데이터는 상기 어드레스 공간의 제 2 부분에 저장된다.
도 9는 일부 실시예들에 따른 데이터를 판독하는 방법(900)의 흐름도를 예시한다. 예를 들어, 판독은 도 8의 방법(800)을 사용하여 이전에 기록된 데이터에 대해 수행될 수 있다. 동작 박스(910)에서, 데이터 요소에 대한 판독 액세스는 리퀘스터로부터 수신된다. 결정 박스(920)에서, 데이터 요소는 어드레스 공간의 제 1 부분으로부터 판독된다. 동작 박스들(930)의 한 세트에서, 신뢰도 데이터가 정확하게 판독되었는지가 결정된다.
동작 박스들(930)의 세트는 산출된 신뢰도 데이터를 형성하기 위해 어드레스 공간의 제 1 부분으로부터 판독된 데이터 요소에 대한 신뢰도 데이터가 산출되는 동작 박스(932), 저장된 신뢰도 데이터를 형성하기 위해 어드레스 공간의 제 2 부분에 저장된 신뢰도 데이터가 판독되는 동작 박스(934), 및 산출된 신뢰도 데이터가 저장된 신뢰도 데이터와 비교되는 동작 박스(936)를 더 포함한다.
방법(900)을 계속하면, 판단 박스(940)는 저장된 신뢰도 데이터가 산출된 신뢰도 데이터와 일치하는지를 판단한다. 저장된 신뢰도 데이터가 산출된 신뢰도 데이터와 일치하면, 흐름은 동작 박스(942)로 진행하며, 이는 데이터 요소를 리퀘스터로 복귀시킨다. 저장된 신뢰도가 산출된 신뢰도 데이터와 일치하지 않으면, 이때 흐름은 신뢰도 데이터가 정정될 수 있는지를 판단하는 판단 박스(944)로 진행한다. 신뢰도 데이터가 정정될 수 있으면, 이때 흐름은 데이터를 정정하는 동작 박스(946), 및 정정된 데이터를 리퀘스터로 복귀시키는 동작 박스(948)로 진행한다. 신뢰도 데이터가 정정될 수 없으면, 흐름은 오류를 리퀘스터에 보고하는 동작 박스(950)로 진행한다.
데이터 및 대응하는 신뢰도 데이터를 저장하고 나중에 검색하는 것은 위의 도 4-도 7에 설명된 기술들 중 어느 것을 사용하여 수행될 수 있다. 따라서, 일부 실시예들에서, 어드레스 공간은 어드레스들의 제 1 인접 부분 및 어드레스들의 제 2 인접 부분으로 분할되고, 데이터 요소는 어드레스들의 제 1 인접 부분에 저장되고, 신뢰도 데이터는 어드레스들의 제 2 인접 부분에 저장된다. 일부 실시예들에서, 어드레스 공간은 뱅크의 어드레스들의 제 1 인접 부분 및 뱅크의 어드레스들의 제 2 인접 부분으로 분할되고, 데이터 요소는 뱅크의 어드레스들의 제 1 인접 부분에 저장되고 신뢰도 데이터는 뱅크의 어드레스들의 제 2 인접 부분에 저장된다. 일부 실시예들에서, 어드레스 공간은 어드레스 공간 내에서 순서를 갖는 복수의 뱅크들에 분할되고, 어드레스 공간의 제 1 부분은 그 순서로 복수의 뱅크들 중에 분배되는 미리 결정된 수의 데이터 요소들의 복수의 그룹들로 형성되고, 어드레스 공간의 제 2 부분은 복수의 그룹들 각각의 각각 대응하는 데이터 요소에 대한 신뢰도 데이터 요소를 포함하며, 여기서 그룹에 대한 신뢰도 데이터 요소들은 그 순서로 그룹의 마지막 데이터 요소를 포함하는 제 2 뱅크 후에 제 1 뱅크에 위치된다. 일부 실시예들에서, 어드레스 공간은 제 1 채널 및 제 2 채널을 사용하여 형성되며, 제 1 채널은 복수의 뱅크들을 포함하고, 데이터 요소는 제 1 채널 내의 복수의 뱅크들 중에 분배되고, 데이터 요소에 대한 신뢰도 데이터는 제 2 채널에 저장된다.
도 3의 메모리 컨트롤러(340)는 하드웨어 및 소프트웨어의 다양한 조합들로 구현될 수 있고, 소프트웨어 구성요소는 적어도 하나의 프로세서에 의한 실행을 위한 컴퓨터 판독가능 저장 매체에 저장될 수 있다. 더욱이, 도 4-도 7에 예시된 어드레스 맵들은 컴퓨터 판독가능 저장 매체에 저장되고 메모리 컨트롤러(340)의 기능을 구현하는 적어도 하나의 프로세서에 의해 실행되는 명령들에 의해 적어도 부분적으로 구현될 수도 있다. 도 8 및 도 9에 도시된 동작들 각각은 비일시적 컴퓨터 메모리 또는 컴퓨터 판독가능 저장 매체에 저장된 명령들에 대응할 수 있다. 다양한 실시예들에서, 비일시적 컴퓨터 판독가능 저장 매체는 자기 또는 광 디스크 저장 디바이스, 플래시 메모리와 같은 고체 상태 저장 디바이스들, 또는 다른 비휘발성 메모리 디바이스 또는 디바이스들을 포함한다. 비일시적 컴퓨터 판독가능 저장 매체 상에 저장된 컴퓨터 판독가능 명령들은 하나 이상의 프로세서들에 의해 해석되고/되거나 실행가능한 소스 코드, 어셈블리 언어 코드, 목적 코드, 또는 다른 명령 포맷일 수 있다.
더욱이, 메모리 컨트롤러(340) 및/또는 멀티 코어 프로세서(310)는 집적 회로(300)를 제조하기 위해, 프로그램에 의해 판독되고 직접 또는 간접적으로 사용될 수 있는 데이터베이스 또는 다른 데이터 구조의 형태로 컴퓨터 액세스가능 데이터 구조에 의해 설명되거나 표현될 수 있다. 예를 들어, 이러한 데이터 구조는 베릴로그(Verilog) 또는 VHDL과 같은 고급 설계 언어(HDL; high level design language)에서 하드웨어 기능성의 동작 레벨 기술 또는 레지스터 전송 레벨(RTL; register-transfer level) 설명일 수 있다. 설명은 합성 라이브러리로부터 게이트들의 리스트를 포함하는 넷리스트(netlist)를 생성하는 설명을 합성할 수 있는 합성 툴에 의해 판독될 수 있다. 넷리스트는 또한 집적 회로(300)를 포함하는 하드웨어의 기능성을 표현하는 게이트들의 세트를 포함한다. 그 다음, 넷리스트는 마스크들에 적용될 기하학적 형상들을 설명하는 데이터 세트를 생성하기 위해 배치되고 라우팅될 수 있다. 그 다음, 마스크들은 집적 회로(300)를 제조하기 위해 다양한 반도체 제조 단계들에 사용될 수 있다. 대안적으로, 컴퓨터 액세스가능 저장 매체 상의 데이터베이스는 요구되는 바와 같이, 넷리스트(합성 라이브러리를 갖거나 갖지 않음) 또는 데이터 세트, 또는 그래픽 데이터 시스템(GDS; Graphic Data System) II 데이터일 수 있다.
개시된 실시예들에 대한 다양한 수정들은 당해 기술에서 통상의 기술자들에게 분명할 것이다. 본 명세서에 설명된 메모리 컨트롤러는 멀티 칩 모듈들(100 및 200) 이외에 데이터 손상에 민감한 다른 직접 회로 구성들에 유용하다. 예를 들어, 프로세서 및 메모리 칩들은 플립 칩 본딩(flip-chip bonding)을 사용하여 머더보드(motherboard) 기판에 직접 부착된다. 메모리 컨트롤러 및 메모리는 동일한 다이 상에 구현되지만 다른 이유들로 고 레벨들의 전자기 간섭(EMI; electromagnetic interference)을 갖는 환경들에 사용됨으로써와 같이, 데이터 손상에 민감할 수도 있다. 메모리 칩 스택(140) 또는 메모리 칩 스택(240)은 예를 들어 개별 CPU 메모리, 개별 그래픽 처리 유닛(GPU; graphics processing unit) 메모리, 개별 APU 메모리 등으로서, 집적 회로(300) 메인 메모리로부터 분리되어 구현될 수 있다. 다이 적층 집적(100) 및 다이 적층 집적(200)은 멀티 칩 모듈(MCM; multi-chip module)로 구현될 수 있다. 대체적으로, 메모리 칩들은 공통 기판 상의 CPU, GPU, APU, 메인 메모리 등에 인접하여 배치되고 이들과 동일 평면일 수 있다. 멀티 칩 모듈들(100 및 200)이 4-칩 메모리 칩 스택들을 포함하지만, 다른 실시예들은 상이한 수들의 메모리 칩들을 포함할 수 있다는 점을 주목한다.
메모리 컨트롤러(340)는 도 3에 도시된 바와 같은 마이크로프로세서 다이 상의 적어도 하나의 프로세서 코어와 집적될 수 있거나, 그 자체로 개별 칩일 수 있다. 일부 실시예들에서, 집적 회로(310)는 CPU를 필요로 하지 않는 로직 기능들과 같은, 컴퓨팅 기능들 이외에 다른 전체 기능들을 수행할 수 있다. 더욱이, 도 3은 CPU 코어들(322 및 324)로부터 분리된 메모리 컨트롤러(340)를 도시하지만, 그것은 CPU 코어 또는 다른 로직 블록 내부에 형성될 수도 있다.
메모리 컨트롤러(340)의 동작은 상이한 레벨들의 신뢰도 및 오버헤드를 구현하는 다양한 어드레스 맵들에 대해 설명되었다. 도 4-도 7은 대표적인 수의 메모리 뱅크들로 이러한 개념들을 예시하지만 그 안에 설명된 기술들은 상이한 수들의 메모리 뱅크들로 스케일링될 수 있다. 예를 들어 메모리(350)가 4개의 DDR3 칩들로 구현되면, 이때 어드레스 공간 내의 메모리 뱅크들의 전체 수는 32일 것이다.
사용될 수 있는 신뢰도 데이터의 예들은 패리티 비트들, 오류 정정 코드 비트들{예를 들어, 단일 오류 정정(SEC; single error correction), 단일 오류 정정 및 더블 오류 검출(SEC-DED; single error correction and double error detection), 더블 비트 오류 정정 및 트리플 비트 오류 검출(DEC-TED; double bit error correction and triple bit error detection), 트리플 오류 정정, 쿼드 오류 검출(TEC-QED;triple-error-correct, quad-error-detect) 및 선형 블록 코드들 예컨대 BCH(Bose Chaudhuri Hocquenghem) 코드들을 포함하지만 이들에 제한되지 않음} 및 체크섬들(예를 들어, CRC, 메시지 다이제스트(MD5))을 포함한다. 1개, 2개, 또는 그 이상의 레벨들의 ECC 보호를 위한 지원이 제공될 수 있으며, 시스템 하드웨어 또는 소프트웨어는 밸런스 성능 및 신뢰도를 선택할 수 있다.
메모리(350)는 DRAM 기술의 맥락에서 상술되었다. 그러나, 메모리(350)는 다른 메모리 기술들, 예를 들어 정적 랜덤 액세스 메모리(SRAM; static random access memory), 상 변화 메모리(PCM; phase-change memory), 멤리스터들(memristors) 및 스핀 토크 전달 자기 RAM(STT-MRAM; spin-torque transfer magnetic RAM)과 같은 저항성 RAM 기술들, 및 플래시 메모리로 구현될 수 있다.
위의 도 4-도 7에 예시된 실시예들은 8 바이트들의 데이터 당 1 바이트의 신뢰도 데이터를 사용한다. 다른 실시예들에 따르면, 주어진 수의 데이터 바이트들에 대한 신뢰도 데이터의 양은 상이할 수 있다.
예시된 실시예들에서, 메모리 컨트롤러(340)는 임의의 메모리 뱅크들의 임의의 부분 내의 신뢰도 데이터에 액세스한다. 일부 실시예들에 따르면, 메모리 컨트롤러(340)는 대체 메모리 뱅크들의 대체 부분들에 액세스할 수 있다.
일부 예시된 실시예들은 다수의 뱅크들 중에서 데이터 요소들에 대응하는 신뢰도 데이터와 데이터 요소들의 인터리빙을 나타낸다. 일부 실시예들에 따르면, 인터리빙 및 매핑 알고리즘들이 수정될 수 있다.
일부 실시예들에서, 다수의 뱅크들에 걸친 어드레스들의 인접 부분이 도시된다. 다른 실시예들에 따르면, 어드레스들의 부분은 어드레스들의 비인접 부분일 수 있고 어드레스 홀들을 포함할 수 있다.
따라서, 개시된 실시예들의 범위 내에 있는 개시된 실시예들의 모든 수정들을 커버하는 것이 첨부된 특허청구범위에 의해 의도된다.

Claims (30)

  1. 어드레스 공간(400/500/600/700)을 갖는 메모리(350); 및
    상기 메모리(350)에 결합되어 수신된 메모리 액세스들에 응답하여 상기 어드레스 공간(400/500/600/700)에 액세스하는 메모리 컨트롤러(340)로서, 상기 메모리 컨트롤러(340)는 상기 어드레스 공간(400/500/600/700)의 제 1 부분 내의 복수의 데이터 요소들에 더 액세스하고, 신뢰도 데이터는 상기 어드레스 공간(400/500/600/700)의 제 2 부분 내의 상기 복수의 데이터 요소들에 대응하는, 상기 메모리 컨트롤러를 포함하는, 집적 회로(300).
  2. 청구항 1에 있어서,
    상기 어드레스 공간(400)의 상기 제 1 부분은 어드레스들의 제 1 인접 부분(412)을 포함하고;
    상기 어드레스 공간의 상기 제 2 부분은 어드레스들의 제 2 인접 부분(414)을 포함하는 집적 회로(300).
  3. 청구항 2에 있어서,
    상기 어드레스 공간(400)은 복수의 뱅크들(410, 420, 430, 440)을 포함하고;
    상기 어드레스들의 제 1 인접 부분(412)은 상기 어드레스 공간(400)의 상단에 위치되고;
    상기 어드레스들의 제 2 인접 부분(414)은 상기 어드레스 공간(400)의 하단에 위치되는 집적 회로(300).
  4. 청구항 1에 있어서,
    상기 어드레스 공간(500)은 복수의 뱅크들(510, 520, 530, 540)을 포함하고;
    상기 어드레스 공간(500)의 상기 제 1 부분은 상기 복수의 뱅크들(510) 중 하나에 대한 어드레스들의 제 1 인접 부분(512)을 포함하고;
    상기 어드레스 공간(500)의 상기 제 2 부분은 상기 복수의 뱅크들(510) 중 상기 하나에 대한 어드레스들의 제 2 인접 부분(514)을 포함하는 집적 회로(300).
  5. 청구항 4에 있어서,
    상기 어드레스들의 제 1 인접 부분(512)은 상기 복수의 뱅크들(510) 중 상기 하나에 대한 제 1 어드레스 공간의 상단에 위치되고;
    상기 어드레스들의 제 2 인접 부분(514)은 상기 복수의 뱅크들(510) 중 상기 하나에 대한 상기 제 1 어드레스 공간의 하단에 위치되는 집적 회로(300).
  6. 청구항 1에 있어서,
    상기 어드레스 공간(600)은 상기 어드레스 공간(600) 내에서 순서를 갖는 복수의 뱅크들(610, 620, 630, 640)을 포함하고;
    상기 어드레스 공간의 상기 제 1 부분은 상기 순서로 상기 복수의 뱅크들(610, 620, 630, 640) 중에 분배되는 미리 결정된 수의 데이터 요소들의 복수의 그룹들(A-F, I-P)을 포함하고;
    상기 어드레스 공간의 상기 제 2 부분은 각각의 상기 복수의 그룹들의 각 대응하는 데이터 요소에 대한 신뢰도 데이터 요소를 포함하며, 그룹에 대한 신뢰도 데이터 요소들은 상기 순서로 상기 그룹의 마지막 데이터 요소를 포함하는 제 2 뱅크(640) 후에 제 1 뱅크(610)에 위치되는 집적 회로(300).
  7. 청구항 1에 있어서,
    상기 메모리 컨트롤러(340)는 제 1 채널(710) 및 제 2 채널(720)을 사용하여 상기 어드레스 공간(700)을 형성하며, 상기 제 1 채널(710)은 복수의 뱅크들(711-718)을 포함하고;
    상기 메모리 컨트롤러(340)는 상기 제 1 채널(710) 내의 상기 복수의 뱅크들(711-718) 중에 특정 데이터 요소(730)를 분배하고;
    상기 메모리 컨트롤러(340)는 상기 제 2 채널(720) 내의 상기 데이터 요소(730)에 대한 신뢰도 데이터(740)에 액세스하는 집적 회로(300).
  8. 청구항 1에 있어서,
    상기 메모리 액세스들을 생성하고 상기 메모리 액세스들을 상기 메모리 컨트롤러(340)에 제공하는 메모리 액세스 생성 회로(320)를 더 포함하는 집적 회로(300).
  9. 청구항 8에 있어서,
    상기 메모리 액세스 생성 회로(320)는 중앙 처리 유닛 코어(322)를 포함하는 집적 회로(300).
  10. 청구항 8에 있어서,
    상기 메모리 액세스 생성 회로(320) 및 상기 메모리 컨트롤러는 단일 집적 회로 다이(310) 상에 결합되는 집적 회로(300).
  11. 청구항 10에 있어서,
    상기 메모리(350)는 복수의 메모리 칩들(352, 354, 356, 358)을 포함하는 집적 회로(300).
  12. 청구항 1에 있어서,
    상기 신뢰도 데이터는 각각의 상기 데이터 요소들에 대한 적어도 하나의 ECC를 포함하는 복수의 오류 정정 코드들(ECCs; error correcting codes)을 포함하는 집적 회로(300).
  13. 청구항 1에 있어서,
    상기 신뢰도 데이터는 각각의 상기 데이터 요소들에 대한 적어도 하나의 CRC를 포함하는 복수의 순환 중복 검사(CRC; cyclic redundancy check) 코드들을 포함하는 집적 회로(300).
  14. 청구항 1에 있어서,
    상기 메모리(350)는 복수의 뱅크들을 각각 갖는 복수의 메모리 칩들(352, 354, 356, 358)을 포함하는 집적 회로(300).
  15. 청구항 1에 있어서,
    상기 복수의 메모리 칩들(352, 354, 356, 358)은 메모리 칩 스택(140, 240)을 포함하는 집적 회로(300).
  16. 집적 회로(300)로서,
    메모리(350)의 어드레스 공간(400/500/600/700)에서 데이터 요소들에 대한 메모리 액세스들을 생성하는 메모리 액세스 생성 회로(320); 및
    상기 메모리(350)에 결합되어 수신된 메모리 액세스들에 응답하여 상기 어드레스 공간(400/500/600/700)에 액세스하는 메모리 컨트롤러(340)로서, 상기 메모리 컨트롤러(340)는 상기 어드레스 공간(400/500/600/700)의 제 1 부분 내의 복수의 데이터 요소들에 더 액세스하고, 신뢰도 데이터는 상기 어드레스 공간(400/500/600/700)의 제 2 부분 내의 상기 복수의 데이터 요소들에 대응하는, 상기 메모리 컨트롤러를 포함하는, 집적 회로(300).
  17. 청구항 16에 있어서,
    상기 어드레스 공간(400)의 상기 제 1 부분은 어드레스들의 제 1 인접 부분(412)을 포함하고;
    상기 어드레스 공간의 상기 제 2 부분은 어드레스들의 제 2 인접 부분(414)을 포함하는 집적 회로(300).
  18. 청구항 17에 있어서,
    상기 어드레스 공간(400)은 복수의 뱅크들(410, 420, 430, 440)을 포함하고;
    상기 어드레스들의 제 1 인접 부분(412)은 상기 어드레스 공간(400)의 상단에 위치되고;
    상기 어드레스들의 제 2 인접 부분(414)은 상기 어드레스 공간(400)의 하단에 위치되는 집적 회로(300).
  19. 청구항 16에 있어서,
    상기 어드레스 공간(500)은 복수의 뱅크들(510, 520, 530, 540)을 포함하고;
    상기 어드레스 공간(500)의 상기 제 1 부분은 상기 복수의 뱅크들(510) 중 하나에 대한 어드레스들의 제 1 인접 부분(512)을 포함하고;
    상기 어드레스 공간(500)의 상기 제 2 부분은 상기 복수의 뱅크들(510) 중 상기 하나에 대한 어드레스들의 제 2 인접 부분(514)을 포함하는 집적 회로(300).
  20. 청구항 19에 있어서,
    상기 어드레스들의 제 1 인접 부분(512)은 상기 복수의 뱅크들(510) 중 상기 하나에 대한 제 1 어드레스 공간의 상단에 위치되고;
    상기 어드레스들의 제 2 인접 부분(514)은 상기 복수의 뱅크들(510) 중 상기 하나에 대한 상기 제 1 어드레스 공간의 하단에 위치되는 집적 회로(300).
  21. 청구항 16에 있어서,
    상기 어드레스 공간(600)은 상기 어드레스 공간(600) 내에서 순서를 갖는 복수의 뱅크들(610, 620, 630, 640)을 포함하고;
    상기 어드레스 공간의 상기 제 1 부분은 상기 순서로 상기 복수의 뱅크들(610, 620, 630, 640) 중에 분배되는 미리 결정된 수의 데이터 요소들의 복수의 그룹들(A-F, I-P)을 포함하고;
    상기 어드레스 공간의 상기 제 2 부분은 각각의 상기 복수의 그룹들의 각 대응하는 데이터 요소에 대한 신뢰도 데이터 요소를 포함하며, 그룹에 대한 신뢰도 데이터 요소들은 상기 순서로 상기 그룹의 마지막 데이터 요소를 포함하는 제 2 뱅크 후에 제 1 뱅크에 위치되는 집적 회로(300).
  22. 청구항 16에 있어서,
    상기 메모리 컨트롤러(340)는 제 1 채널(710) 및 제 2 채널(720)을 사용하여 상기 어드레스 공간(700)을 형성하며, 상기 제 1 채널(710)은 복수의 뱅크들(711-718)을 포함하고;
    상기 메모리 컨트롤러(340)는 상기 제 1 채널(710) 내의 상기 복수의 뱅크들(711-718) 중에 특정 데이터 요소(730)를 분배하고;
    상기 메모리 컨트롤러(340)는 상기 제 2 채널(720) 내의 상기 데이터 요소(730)에 대한 신뢰도 데이터(740)에 액세스하는 집적 회로(300).
  23. 리퀘스터(320)로부터 데이터 요소에 대한 기록 액세스를 수신하는 단계(810);
    상기 데이터 요소에 대한 신뢰도 데이터를 산출하는 단계(820); 및
    상기 데이터 요소를 어드레스 공간(400/500/600/700)의 제 1 부분에 저장하는 단계(830) 및 상기 신뢰도 데이터를 상기 어드레스 공간(400/500/600/700)의 제 2 부분에 저장하는 단계(840)를 포함하는 방법.
  24. 청구항 23에 있어서,
    상기 리퀘스터(320)로부터 상기 데이터 요소에 대한 판독 액세스를 수신하는 단계(910);
    상기 어드레스 공간(400/500/600/700)의 상기 제 1 부분으로부터 상기 데이터 요소를 판독하는 단계(920); 및
    상기 신뢰도 데이터가 정확하게 판독되었는지를 판단하는 단계(930)를 더 포함하는 방법.
  25. 청구항 24에 있어서, 상기 판단하는 단계(930)는,
    산출된 신뢰도 데이터를 형성하기 위해 상기 어드레스 공간(400/500/600/700)의 상기 제 1 부분으로부터 판독된 상기 데이터 요소에 대한 신뢰도 데이터를 산출하는 단계(932);
    저장된 신뢰도 데이터를 형성하기 위해 상기 어드레스 공간(400/500/600/700)의 상기 제 2 부분에 저장된 상기 신뢰도 데이터를 판독하는 단계(934); 및
    상기 산출된 신뢰도 데이터를 상기 저장된 신뢰도 데이터와 비교하는 단계(936)를 포함하는 방법.
  26. 청구항 25에 있어서,
    상기 저장된 신뢰도 데이터가 상기 산출된 신뢰도 데이터와 일치할 때, 상기 데이터 요소를 상기 리퀘스터(320)로 복귀시키는 단계(942);
    상기 저장된 신뢰도가 상기 산출된 신뢰도 데이터와 일치하지 않을 때, 상기 신뢰도 데이터가 정정될 수 있는지를 판단하는 단계(944);
    상기 신뢰도 데이터가 정정될 수 있을 때, 상기 데이터를 정정하고(946) 정정된 데이터를 상기 리퀘스터(320)로 복귀시키는 단계(948); 및
    상기 신뢰도 데이터가 정정될 수 없을 때, 오류를 상기 리퀘스터(320)에 보고하는 단계(950)를 더 포함하는 방법.
  27. 청구항 23에 있어서, 상기 저장하는 단계(830, 840)는,
    상기 어드레스 공간(400)을 어드레스들의 제 1 인접 부분(412) 및 어드레스들의 제 2 인접 부분(414)으로 분할하는 단계;
    상기 데이터 요소를 상기 어드레스들의 제 1 인접 부분(412)에 저장하는 단계; 및
    상기 신뢰도 데이터를 상기 어드레스들의 제 2 인접 부분(414)에 저장하는 단계를 포함하는 방법.
  28. 청구항 23에 있어서, 상기 저장하는 단계(830, 840)는,
    상기 어드레스 공간(500)을 뱅크(510)의 어드레스들의 제 1 인접 부분(512) 및 상기 뱅크(510)의 어드레스들의 제 2 인접 부분(514)으로 분할하는 단계;
    상기 데이터 요소를 상기 뱅크(510)의 상기 어드레스들의 제 1 인접 부분(512)에 저장하는 단계; 및
    상기 신뢰도 데이터를 상기 뱅크(510)의 상기 어드레스들의 제 2 인접 부분(514)에 저장하는 단계를 포함하는 방법.
  29. 청구항 23에 있어서, 상기 저장하는 단계(830, 840)는,
    상기 어드레스 공간(600) 내에서 순서를 갖는 복수의 뱅크들(610, 620, 630, 640) 중에서 상기 어드레스 공간(600)을 분할하는 단계;
    상기 어드레스 공간의 상기 제 1 부분을 상기 순서로 상기 복수의 뱅크들(610, 620, 630, 640) 중에 분배되는 미리 결정된 수의 데이터 요소들의 복수의 그룹들(A-F, I-P)로서 형성하는 단계; 및
    각각의 상기 복수의 그룹들의 각 대응하는 데이터 요소에 대한 신뢰도 데이터 요소를 포함하는 상기 어드레스 공간의 상기 제 2 부분을 형성하는 단계로서, 그룹에 대한 신뢰도 데이터 요소들은 상기 순서로 상기 그룹의 마지막 데이터 요소를 포함하는 제 2 뱅크(640) 후에 제 1 뱅크(610)에 위치되는, 상기 단계를 포함하는 방법.
  30. 청구항 23에 있어서, 상기 저장하는 단계(830, 840)는,
    제 1 채널(710) 및 제 2 채널(720)을 사용하여 상기 어드레스 공간(700)을 형성하는 단계로서, 상기 제 1 채널(710)은 복수의 뱅크들(711-718)을 포함하는, 상기 단계;
    상기 제 1 채널(710) 내의 복수의 뱅크들(711-718) 중에 상기 데이터 요소(730)를 분배하는 단계; 및
    상기 데이터 요소(730)에 대한 상기 신뢰도 데이터(740)를 상기 제 2 채널(720)에 저장하는 단계를 포함하는 방법.
KR1020157012194A 2012-10-11 2013-10-08 높은 신뢰도 메모리 컨트롤러 KR101626040B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/649,745 2012-10-11
US13/649,745 US8984368B2 (en) 2012-10-11 2012-10-11 High reliability memory controller
PCT/US2013/063881 WO2014058879A1 (en) 2012-10-11 2013-10-08 High reliability memory controller

Publications (2)

Publication Number Publication Date
KR20150070252A true KR20150070252A (ko) 2015-06-24
KR101626040B1 KR101626040B1 (ko) 2016-06-13

Family

ID=49510512

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157012194A KR101626040B1 (ko) 2012-10-11 2013-10-08 높은 신뢰도 메모리 컨트롤러

Country Status (7)

Country Link
US (1) US8984368B2 (ko)
EP (1) EP2907030A1 (ko)
JP (1) JP6101807B2 (ko)
KR (1) KR101626040B1 (ko)
CN (1) CN104871137B (ko)
IN (1) IN2015DN02935A (ko)
WO (1) WO2014058879A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9753858B2 (en) 2011-11-30 2017-09-05 Advanced Micro Devices, Inc. DRAM cache with tags and data jointly stored in physical rows
US9009548B2 (en) * 2013-01-09 2015-04-14 International Business Machines Corporation Memory testing of three dimensional (3D) stacked memory
US9798622B2 (en) * 2014-12-01 2017-10-24 Intel Corporation Apparatus and method for increasing resilience to raw bit error rate
US9800271B2 (en) * 2015-09-14 2017-10-24 Qualcomm Incorporated Error correction and decoding
US10013212B2 (en) * 2015-11-30 2018-07-03 Samsung Electronics Co., Ltd. System architecture with memory channel DRAM FPGA module
US10031801B2 (en) * 2015-12-01 2018-07-24 Microsoft Technology Licensing, Llc Configurable reliability for memory devices
CN110730988B (zh) * 2017-06-02 2023-07-11 超极存储器股份有限公司 半导体模块
US11494087B2 (en) 2018-10-31 2022-11-08 Advanced Micro Devices, Inc. Tolerating memory stack failures in multi-stack systems
KR102693213B1 (ko) * 2018-11-30 2024-08-09 에스케이하이닉스 주식회사 메모리 시스템
CN110770898A (zh) 2019-04-15 2020-02-07 长江存储科技有限责任公司 具有处理器和动态随机存取存储器的键合半导体器件及其形成方法
JP7311615B2 (ja) * 2019-04-30 2023-07-19 長江存儲科技有限責任公司 プロセッサおよびnandフラッシュメモリを有する接合半導体デバイスならびにそれを形成する方法
CN115413367A (zh) 2020-02-07 2022-11-29 日升存储公司 具有低有效延迟的高容量存储器电路
WO2021158994A1 (en) * 2020-02-07 2021-08-12 Sunrise Memory Corporation Quasi-volatile system-level memory
US11656937B2 (en) * 2020-08-25 2023-05-23 Micron Technology, Inc. Techniques for error detection and correction in a memory system

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002091382A2 (en) * 2000-12-01 2002-11-14 Yan Chiew Chow A memory matrix and method of operating the same
JP2007115390A (ja) * 2005-09-30 2007-05-10 Quantum Corp メモリ機器、データを転送する方法、およびデータを格納する方法
US7620875B1 (en) * 2006-03-07 2009-11-17 Xilinx, Inc. Error correction code memory system with a small footprint and byte write operation

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5329489A (en) 1988-03-31 1994-07-12 Texas Instruments Incorporated DRAM having exclusively enabled column buffer blocks
US5412787A (en) 1990-11-21 1995-05-02 Hewlett-Packard Company Two-level TLB having the second level TLB implemented in cache tag RAMs
US5848433A (en) 1995-04-12 1998-12-08 Advanced Micro Devices Way prediction unit and a method for operating the same
US5764946A (en) 1995-04-12 1998-06-09 Advanced Micro Devices Superscalar microprocessor employing a way prediction unit to predict the way of an instruction fetch address and to concurrently provide a branch prediction address corresponding to the fetch address
US5845323A (en) 1995-08-31 1998-12-01 Advanced Micro Devices, Inc. Way prediction structure for predicting the way of a cache in which an access hits, thereby speeding cache access time
US5802594A (en) 1995-09-06 1998-09-01 Intel Corporation Single phase pseudo-static instruction translation look-aside buffer
JPH09110582A (ja) 1995-10-11 1997-04-28 Kokusai Chodendo Sangyo Gijutsu Kenkyu Center 結晶製造装置
US6061759A (en) 1996-02-09 2000-05-09 Apex Semiconductor, Inc. Hidden precharge pseudo cache DRAM
US5974506A (en) 1996-06-28 1999-10-26 Digital Equipment Corporation Enabling mirror, nonmirror and partial mirror cache modes in a dual cache system
US20010034808A1 (en) 1996-07-19 2001-10-25 Atsushi Nakajima Cache memory device and information processing system
US5784391A (en) 1996-10-08 1998-07-21 International Business Machines Corporation Distributed memory system with ECC and method of operation
JPH10207726A (ja) * 1997-01-23 1998-08-07 Oki Electric Ind Co Ltd 半導体ディスク装置
US6044478A (en) 1997-05-30 2000-03-28 National Semiconductor Corporation Cache with finely granular locked-down regions
US6073230A (en) 1997-06-11 2000-06-06 Advanced Micro Devices, Inc. Instruction fetch unit configured to provide sequential way prediction for sequential instruction fetches
US6138213A (en) 1997-06-27 2000-10-24 Advanced Micro Devices, Inc. Cache including a prefetch way for storing prefetch cache lines and configured to move a prefetched cache line to a non-prefetch way upon access to the prefetched cache line
US6016533A (en) 1997-12-16 2000-01-18 Advanced Micro Devices, Inc. Way prediction logic for cache array
KR100313996B1 (ko) 1998-01-08 2001-12-28 구자홍 컴퓨터시스템의바이오스데이터저장장치및방법
JP3307579B2 (ja) * 1998-01-28 2002-07-24 インターナショナル・ビジネス・マシーンズ・コーポレーション データ記憶システム
US6038693A (en) 1998-09-23 2000-03-14 Intel Corporation Error correction scheme for an integrated L2 cache
US6314514B1 (en) 1999-03-18 2001-11-06 Ip-First, Llc Method and apparatus for correcting an internal call/return stack in a microprocessor that speculatively executes call and return instructions
US6493800B1 (en) 1999-03-31 2002-12-10 International Business Machines Corporation Method and system for dynamically partitioning a shared cache
US6353910B1 (en) * 1999-04-09 2002-03-05 International Business Machines Corporation Method and apparatus for implementing error correction coding (ECC) in a dynamic random access memory utilizing vertical ECC storage
US6629207B1 (en) 1999-10-01 2003-09-30 Hitachi, Ltd. Method for loading instructions or data into a locked way of a cache memory
US6804162B1 (en) 2001-04-05 2004-10-12 T-Ram, Inc. Read-modify-write memory using read-or-write banks
US6662272B2 (en) 2001-09-29 2003-12-09 Hewlett-Packard Development Company, L.P. Dynamic cache partitioning
US7007210B2 (en) 2002-01-30 2006-02-28 International Business Machines Corporation Method and system for handling multiple bit errors to enhance system reliability
US7234052B2 (en) 2002-03-08 2007-06-19 Samsung Electronics Co., Ltd System boot using NAND flash memory and method thereof
US6832294B2 (en) 2002-04-22 2004-12-14 Sun Microsystems, Inc. Interleaved n-way set-associative external cache
US7054999B2 (en) 2002-08-02 2006-05-30 Intel Corporation High speed DRAM cache architecture
US20050050278A1 (en) 2003-09-03 2005-03-03 Advanced Micro Devices, Inc. Low power way-predicted cache
US7117290B2 (en) 2003-09-03 2006-10-03 Advanced Micro Devices, Inc. MicroTLB and micro tag for reducing power in a processor
US7237098B2 (en) 2003-09-08 2007-06-26 Ip-First, Llc Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence
US20050228631A1 (en) 2004-04-07 2005-10-13 Maly John W Model specific register operations
US7558920B2 (en) 2004-06-30 2009-07-07 Intel Corporation Apparatus and method for partitioning a shared cache of a chip multi-processor
US7996644B2 (en) 2004-12-29 2011-08-09 Intel Corporation Fair sharing of a cache in a multi-core/multi-threaded processor by dynamically partitioning of the cache
CN101107599B (zh) 2005-03-22 2011-09-21 松下电器产业株式会社 高速缓冲存储器控制方法和高速缓冲存储器控制装置
JP4201783B2 (ja) 2005-08-04 2008-12-24 富士通マイクロエレクトロニクス株式会社 キャッシュメモリ装置、半導体集積回路およびキャッシュ制御方法
US7707463B2 (en) 2005-11-30 2010-04-27 International Business Machines Corporation Implementing directory organization to selectively optimize performance or reliability
US7739576B2 (en) * 2006-08-31 2010-06-15 Micron Technology, Inc. Variable strength ECC
US8135935B2 (en) * 2007-03-20 2012-03-13 Advanced Micro Devices, Inc. ECC implementation in non-ECC components
US7809980B2 (en) 2007-12-06 2010-10-05 Jehoda Refaeli Error detector in a cache memory using configurable way redundancy
US8589706B2 (en) 2007-12-26 2013-11-19 Intel Corporation Data inversion based approaches for reducing memory power consumption
US20090276587A1 (en) 2008-04-30 2009-11-05 Moyer William C Selectively performing a single cycle write operation with ecc in a data processing system
US8266498B2 (en) 2009-03-31 2012-09-11 Freescale Semiconductor, Inc. Implementation of multiple error detection schemes for a cache
US8327225B2 (en) * 2010-01-04 2012-12-04 Micron Technology, Inc. Error correction in a stacked memory
US8644104B2 (en) * 2011-01-14 2014-02-04 Rambus Inc. Memory system components that support error detection and correction
JP5426711B2 (ja) * 2011-06-08 2014-02-26 パナソニック株式会社 メモリコントローラ及び不揮発性記憶装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002091382A2 (en) * 2000-12-01 2002-11-14 Yan Chiew Chow A memory matrix and method of operating the same
JP2007115390A (ja) * 2005-09-30 2007-05-10 Quantum Corp メモリ機器、データを転送する方法、およびデータを格納する方法
US7620875B1 (en) * 2006-03-07 2009-11-17 Xilinx, Inc. Error correction code memory system with a small footprint and byte write operation

Also Published As

Publication number Publication date
KR101626040B1 (ko) 2016-06-13
JP6101807B2 (ja) 2017-03-22
US8984368B2 (en) 2015-03-17
CN104871137B (zh) 2019-02-01
EP2907030A1 (en) 2015-08-19
WO2014058879A1 (en) 2014-04-17
IN2015DN02935A (ko) 2015-09-18
US20140108885A1 (en) 2014-04-17
JP2015535101A (ja) 2015-12-07
CN104871137A (zh) 2015-08-26

Similar Documents

Publication Publication Date Title
KR101626040B1 (ko) 높은 신뢰도 메모리 컨트롤러
US11704183B2 (en) Data integrity for persistent memory systems and the like
JP6339280B2 (ja) ハイブリッドメモリのためのシステム、方法及び装置
US9146811B2 (en) Method and apparatus for repairing high capacity/high bandwidth memory devices
TWI546815B (zh) 錯誤檢測與校正之設備及方法
US20130346695A1 (en) Integrated circuit with high reliability cache controller and method therefor
US9406403B2 (en) Spare memory external to protected memory
TW201435896A (zh) 用以基於叢訊形成符號之記憶體控制器
KR20160143744A (ko) 로컬 메모리를 갖는 제어기를 가진 메모리 디바이스
US12086026B2 (en) Multiple error correction code (ECC) engines and ECC schemes
NL2029789B1 (en) Adaptive error correction to improve for system memory reliability, availability, and serviceability (ras)
US8661320B2 (en) Independent orthogonal error correction and detection
US11494087B2 (en) Tolerating memory stack failures in multi-stack systems

Legal Events

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

Payment date: 20190429

Year of fee payment: 4