KR20180123426A - Ddr 채널을 통해 dimm을 위한 모핑 가능한 ecc 인코더 및 디코더를 포함하는 코딩 메커니즘 및 그 방법 - Google Patents

Ddr 채널을 통해 dimm을 위한 모핑 가능한 ecc 인코더 및 디코더를 포함하는 코딩 메커니즘 및 그 방법 Download PDF

Info

Publication number
KR20180123426A
KR20180123426A KR1020180003472A KR20180003472A KR20180123426A KR 20180123426 A KR20180123426 A KR 20180123426A KR 1020180003472 A KR1020180003472 A KR 1020180003472A KR 20180003472 A KR20180003472 A KR 20180003472A KR 20180123426 A KR20180123426 A KR 20180123426A
Authority
KR
South Korea
Prior art keywords
bits
code
data
data based
encoder
Prior art date
Application number
KR1020180003472A
Other languages
English (en)
Other versions
KR102421048B1 (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 KR20180123426A publication Critical patent/KR20180123426A/ko
Application granted granted Critical
Publication of KR102421048B1 publication Critical patent/KR102421048B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • 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
    • 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/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • 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
    • 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/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4234Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus
    • G06F13/4239Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus with asynchronous protocol

Abstract

하드웨어 코딩 메커니즘이 기술된다. 코딩 메커니즘은 기본 개수의 비트들을 이용하여 제 1 코드를 생성하는 제 1 인코더 및 보충 개수의 비트들을 이용하여 제 2 코드를 생성하는 제 2 인코더를 포함할 수 있다. 제 2 코드 및 제 1 코드는 함께 제 1 코드 단독보다 더 강할 수 있다. 스토리지에 저장된 모드 레지스터는 제 2 인코더에 대한 스위치가 열리는지 또는 닫히는지 여부를 지정할 수 있다: 제 1 코더는 항상 사용된다.

Description

DDR 채널을 통해 DIMM을 위한 모핑 가능한 ECC 인코더 및 디코더를 포함하는 코딩 메커니즘 및 그 방법{CODING MECHANISM INCLUDING MORPHABLE ECC ENCODER/DECODER FOR DIMM OVER DDR CHANNEL, AND METHOD OF THEREOF}
본 발명은 메모리 모듈들에 관한 것으로, 좀 더 자세하게는 메모리 트랜잭션 내 다양한 레벨들의 인코딩 및 디코딩을 지원하는 것에 관한 것이다.
DDR(Dual Data Rate) 채널들을 이용하는 NVDIMM(Non-Volatile Dual In-Line Memory Module)들은 트랜잭션(transaction) 기반의 인터페이스를 통한 비동기식 핸드쉐이크(handshake)를 요구한다. NVDIMM들 이외의 다른 형태의 메모리에 의해서도 사용될 수 있는 이 핸드쉐이크는, 가변 읽기/쓰기 타이밍(timing)을 가질 수 있고, 그리고 DIMM으로부터 피드백 정보가 필요하다. 또한, 몇몇 시스템들은 호스트와 DIMM간에 메타데이터(metadata, 요청 ID, 히트/미스(hit/miss) 정보, 공급업체(vendor) 메타데이터 등)를 교환하기를 원한다. 메타데이터를 전달하는 전용의 채널은 하드웨어 변경을 요구할 것이나, 메타데이터를 전달하는 전용의 패키지(package)를 이용하는 것은 성능 오버헤드(overhead)를 증가시킬 것이다.
ECC(Error Correcting Code)들에 할당된 비트들을 이용하여 메타데이터를 교환하는 것이 가능하다. 인텔(Intel)사에 양도된 미국 특허출원공개공보(US 2014/0040550, Nale et al.)는 메타데이터를 위해 ECC 비트들을 사용하는 하나의 접근 방법을 설명한다. 이 해결책에서, 메타데이터 정보 전송을 요구하는 “근거리/원거리” 비동기식 메모리 계층이 있고, 그리고 프로토콜은 메타데이터 교환을 제공한다. 그러나 이 프로토콜은 공급업체들이 공급업체별 기능들에 대한 메타데이터를 구현하는 것을 허용하지 않는다.
또한, 메타데이터의 교환을 가능하게 하기 위해 ECC 비트들을 사용하는 것은 그 비트들은 ECC에 사용할 수 없는 것을 의미한다. 따라서, 메타데이터로서 사용을 위해 ECC 비트들을 할당하는 것은 약한 ECC 시스템으로 이어진다. 이 문제를 악화시키는 것은 상이한 시스템들이 메타데이터에 대한 상이한 개수들의 비트들을 요구할 것이고, 에러 정정을 위해 사용 가능한 비트들의 개수에 영향을 미친다.
ECC 및 메타데이터 모두를 위해 ECC 비트들의 사용을 관리하는 방법이 여전히 필요하다.
본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명은 DDR 채널을 통해 DIMM을 위한 모핑 가능한 ECC 인코더 및 디코더를 포함하는 코딩 메커니즘 및 그 방법을 제공할 수 있다.
본 발명의 실시 예에 따라, 하드웨어로 구현되는 코딩 메커니즘은: 데이터에 대한 기본 개수의 비트들을 포함하는 제 1 코드를 생성하는 제 1 인코더; 데이터에 대한 보충 개수의 비트들을 포함하는 제 2 코드를 생성하는 제 2 인코더; 모드 레지스터에 대한 스토리지; 및 제 2 인코더가 사용되는지 여부를 제어하도록 모드 레지스터에 응답하는 스위치를 포함한다. 제 1 인코더는 제 1 코드를 생성하는데 항상 사용되고 그리고 제 2 인코더는 제 2 코드를 생성하는데 선택적으로 사용된다. 제 2 코드는 제 1 코드와 함께 제 1 코드 단독보다 더 강한 인코딩을 제공한다.
본 발명의 실시 예에 따라, 하드웨어로 구현되는 코딩 메커니즘은: 데이터 및 기본 개수의 비트들을 포함하는 제 1 코드에 대한 제 1 결과를 생성하는 제 1 디코더; 데이터 및 보충 개수의 비트들을 포함하는 적어도 제 2 코드에 대한 제 2 결과를 생성하는 제 2 디코더; 모드 레지스터에 대한 스토리지; 및 제 2 디코더가 사용되는지 여부를 제어하도록 모드 레지스터에 응답하는 스위치를 포함한다. 제 1 디코더는 제 1 결과를 생성하는데 항상 사용되고 그리고 제 2 디코더는 제 2 결과를 생성하는데 선택적으로 사용된다. 제 2 결과는 제 1 결과와 함께 제 1 결과 단독보다 더 강한 디코딩을 제공한다.
본 발명의 실시 예에 따라, 방법은: 메모리 트랜잭션(transaction)에 대한 데이터를 수신하는 단계; 메모리 트랜잭션 동안, 기본 개수의 비트들 및 보충 개수의 비트들을 포함하는 에러 관리가 가능한 비트들의 개수를 판별하는 단계; 기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계; 및 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계를 포함한다.
본 발명의 실시 예에 따르면, 인코더/디코더의 “항상 켜진” 부분은 에러들을 검출할 수 있는 CRC를 구현할 수 있다. 전환 가능한 인코더/디코더는 에러 정정도 할 수 있는 패리티 정보를 구현할 수 있다. 전환 가능한 인코더/디코더 회로들의 동작은 모드 레지스터의 특정한 값을 설정하여 변경될 수 있다.
도 1은 본 발명의 실시 예에 따라, 다수 레벨들의 인코딩/디코딩을 수행하도록 작동하는 머신을 도시한다.
도 2는 도 1의 머신의 추가 세부 사항들을 도시한다.
도 3은 인코딩/디코딩을 수행하도록 작동하는 도 1의 머신의 메모리 모듈을 도시한다.
도 4는 인코딩/디코딩을 수행하도록 작동하는 도 1의 메모리 컨트롤러를 도시한다.
도 5a 및 도 5b는 64+8-비트 폭의 메모리 채널에서 인코딩/디코딩을 위해 사용되는 가변 개수의 ECC 비트들을 도시한다.
도 6a 및 도 6b는 32+8-비트 폭의 메모리 채널에서 인코딩/디코딩을 위해 사용되는 가변 개수의 ECC 비트들을 도시한다.
도 7은 본 발명의 제 1 실시 예에 따라, 도 3 및 도 4의 코딩 메커니즘을 도시한다.
도 8은 본 발명의 제 2 실시 예에 따라, 도 3 및 도 4의 코딩 메커니즘을 도시한다.
도 9는 본 발명의 제 3 실시 예에 따라, 도 3 및 도 4의 코딩 메커니즘을 도시한다.
도 10은 본 발명의 제 4 실시 예에 따라, 도 3 및 도 4의 코딩 메커니즘을 도시한다.
도 11은 본 발명의 제 5 실시 예에 따라, 도 3 및 도 4의 코딩 메커니즘을 도시한다.
도 12a 및 도 12b는 본 발명의 실시 예에 따라, 도 7, 도 9, 및 도 11의 코딩 메커니즘을 이용하여 메모리 트랜잭션을 위해 데이터를 인코딩하는 예시적인 절차의 순서도를 도시한다.
도 13a 및 도 13b는 본 발명의 실시 예에 따라, 도 8 및 도 10의 코딩 메커니즘을 이용하여 메모리 트랜잭션을 위해 데이터를 디코딩하는 예시적인 절차의 순서도를 도시한다.
도 14는 에러 검출 및 정정을 지원하기 위해 코드들을 이용하는 예시적인 절차의 순서도를 도시한다.
이하 본 발명의 구체적인 실시 예들에 대한 참조가 상세하게 제공될 것이고, 본 발명의 구체적인 실시 예에 대한 예시들은 첨부된 도면들에 도시될 것이다. 후술하는 상세한 설명에서, 본 발명에 대한 완전한 이해가 가능해지도록 수많은 구체적인 사항들이 제공될 것이다. 그러나, 당업자는 이러한 상세한 사항들 없이도 본 발명을 실시할 수 있다는 것이 이해되어야 한다. 다른 예시들에서, 공지된 방법들, 단계들, 구성들, 회로들, 및 네트워크들은 실시 예들의 측면들을 불필요하게 모호하게 하지 않기 위해 상세하게 기재되지 않았다.
본 명세서에서 제 1, 제 2 등이 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 이러한 구성 요소들은 이러한 용어들에 의해 한정되지 않는 것으로 이해될 것이다. 이러한 용어들은 하나의 구성 요소를 다른 것과 단지 구별하기 위해 사용된다. 예를 들어, 제 1 모듈은 제 2 모듈로 명명될 수 있고, 그리고, 유사하게, 본 발명의 범위를 벗어나지 않으면서, 제 2 모듈은 제 1 모듈로 명명될 수 있다.
본 명세서에서 본 발명의 설명에 사용된 용어들은 단지 특정한 실시 예들을 기술하기 위한 목적으로 사용되고, 본 발명을 한정하는 의도로는 사용되지 않는다. 문맥상 명백히 다르게 나타내지 않는 한, 단수 형태들이 본 발명의 설명 및 부가된 청구항들에서 사용될 때, 복수의 형태들을 포함하는 것으로 의도된다. 또한, 본 명세서에 사용된 “및/또는” 용어는 하나 또는 그 이상의 관련된 나열된 사항들의 모든 가능한 조합들을 나타내거나 포함하는 것으로 이해될 것이다. “포함하는” 용어가 본 명세서에 사용되는 경우, 기술된 특징들, 숫자들, 단계들, 동작들, 구성들, 및/또는 요소들의 존재를 명기하는 것이며, 이들의 하나 또는 그 이상의 다른 특징들, 숫자들, 단계들, 동작들, 구성들, 요소들, 및/또는 그룹들의 존재 또는 부가를 배제하지 않는 것으로 더 이해되어야 한다. 도면들의 구성들 및 특징들은 반드시 일정한 비율로 그려지는 것은 아니다.
종래 DRAM(Dynamic Random Access Memory)은 동기식 프로토콜을 사용하여 DIMM(Dual In-Line Memory Module)들과 메모리 컨트롤러들간의 메모리 트랜잭션(transaction; 또는 처리)들을 관리한다. 동기식 인터페이스는 몇몇 장점들을 갖는다: DIMM 및 메모리 컨트롤러 모두는 데이터가 사용 가능할 것으로 예상되는 시기를 정확히 안다. 반면에, NVDIMM(Non-Volatile Dual In-Line Memory Module)들은 비동기식 프로토콜을 사용한다(NVDIMM-P). 비동기식 프로토콜을 이용하여, 메모리 트랜잭션을 완료하는데 필요한 시간은, 수행되는 동작 및 NVDIMM을 제작하는데 사용되는 물질과 같은 임의의 개수의 요인들에 기초하여 변경될 수 있다. 또한, 비동기식 프로토콜은 NVDIMM에서 메모리 컨트롤러로 피드백(feedback)을 요구하는 핸드쉐이킹(handshaking)을 요구할 수 있다. 이 피드백은 NVDIMM에서 메모리 컨트롤러로 전송되는 데이터에 부착된 메타데이터의 형태를 가질 수 있다.
또한, 호스트는 데이터와 함께 저장되는 메타데이터를 지정할 수 있다. 이 메타데이터는 ECC 비트들과 같은, 메모리 트랜잭션 내에서 몇몇 “스페어(spare)” 비트들을 이용하는 데이터에 종종 첨부된다. 메모리로부터 데이터가 읽히면, 이 메타데이터 또한 읽혀지고 메모리 컨트롤러로 되돌아가야 한다. 상이한 공급업체들은 상이한 메타데이터 비트 할당들을 요구할 수 있고, 그리고 다양한 메타데이터 요구들을 지원하는 다양한 종래의 방법들은 고유한 단점을 각각 갖는다. 본질적으로, 메타데이터 비트들을 지원하는 것은 ECC를 위한 비트들의 효용성과 그리고 이에 ECC 강도의 균형을 요구한다.
예를 들어, 데이터의 8개 버스트(burst)들 각각에 ECC를 위한 8개 비트들을 포함하는 메모리 모듈을 고려한다. 이 조합은 각 512 비트 메모리 트랜잭션에 대한 ECC를 위해 사용 가능한 총 64개 비트들을 변환한다.
버스트 당 8개 비트들 중 3개가 메타데이터를 위해 사용되면, 64개 ECC 비트들 중 24개는 메타데이터를 위해 사용되고, ECC에 이용 가능한 40개 비트들을 남긴다. 그러나 버스트 당 8개 비트들 중 단지 2개가 메타데이터를 위해 사용되면, 64개 비트들 중 단지 16개는 메타데이터를 위해 사용되고, 남은 48개 비트들은 ECC를 위해 사용 가능하다. 전자의 조합은 메타데이터를 위해 많은 비트들을 제공하나 ECC가 약해진다. 후자의 조합은 ECC가 강해지나, 메타데이터를 위해 적은 비트들을 제공한다.
메모리 모듈들이 메타데이터 및 ECC에 할당된 특정한 개수의 비트들로 제작되면, 상이한 메모리 모듈들이 상이한 메타데이터 및 ECC 요구들을 지원하는데 필요하다. 더 나은 솔루션(solution)은 나머지 비트들에서 관련된 메타데이터 양의 유연성을 감안하여, 하나의 장치 내에서 다수의 상이한 ECC 알고리즘들(일부는 강하고, 일부는 약한)을 지원할 것이다.
DDR(Double Data Rate) 5와 같은, 미래 메모리 솔루션들은 다른 문제들을 도입한다. DDR5 메모리에서 좁은 채널들로의 변화로, 에러 정정을 위한 오버헤드와 함께 프리패치되는(pre-fetched) 비트들의 개수가 증가한다. 예를 들어, DDR4 메모리는 16개 데이터 칩들 당 2개 ECC 칩들을 요구한다. 반면에, DDR5 메모리는 8개 데이터 칩들 당 2개 ECC 칩들을 요구한다. 따라서, DDR5에서 기존 ECC 능력(capability)을 유지하는 것은 증가된 ECC 오버헤드를 요구한다: 기존 오버헤드를 유지하는 것은 메모리의 ECC 능력을 약화시킨다.
종래 다수의 ECC 코딩 시스템은 2개 (혹은 그 이상의) 모든 인코더(encoder)들 또는 디코더(decoder)들을 요구하나, 그러나 단지 한번에 하나(활성 ECC 메커니즘을 위한 코딩 시스템)만 활성화되고, 훨씬 더 많은 회로를 요구한다. 본 발명의 실시 예들에 있어서, 인코더/디코더는 “항상 켜진(always on)” 부분 및 더 큰 범위를 제공하는 전환 가능한(switchable) 부분으로 나뉘어질 수 있다.
본 발명의 실시 예들이 어떻게 동작할 수 있는지 예시로서, 인코더/디코더의 “항상 켜진” 부분은 에러들을 검출할 수 있는 (그러나 반드시 에러 정정은 아닌) CRC(Cyclic Redundancy Check; 순환 중복 검사)를 구현할 수 있다. 전환 가능한 인코더/디코더는 에러 정정도 할 수 있는 패리티 정보를 구현할 수 있다.
전환 가능한 인코더/디코더 회로들의 동작은 모드 레지스터의 특정한 값을 설정하여 변경될 수 있다.
본 명세서의 설계들은 NVDIMM들 및 미래 DDRx 인터페이스 기반의 DRAM 모두에 적용될 수 있다.
도 1은 본 발명의 실시 예에 따라, 스토리지 장치를 갖는 머신을 도시한다. 도 1에서, 머신(machine, 105)이 도시되었다. 머신(105)은 데스크탑(desktop) 또는 노트북 컴퓨터(laptop computer), 서버(독립 실행형 서버 또는 랙 서버 중 하나), 또는 본 발명의 실시 예들이 도움될 수 있는 임의의 다른 장치를 포함하되, 이에 한정되지 않는 임의의 원하는 머신일 수 있다. 머신(105)은 전문화된 휴대용 컴퓨팅 장치들, 태블릿 컴퓨터들, 스마트폰들, 및 다른 컴퓨팅 장치들을 또한 포함할 수 있다. 머신(105)은 임의의 원하는 어플리케이션들을 실행할 수 있다: 데이터베이스 어플리케이션들이 좋은 예시이지만, 본 발명의 실시 예들은 임의의 원하는 어플리케이션까지 확장될 수 있다.
머신(105)은, 그것의 특정한 형태와 관계없이, 프로세서(110), 메모리(115), 및 스토리지 장치(120)를 포함할 수 있다. 프로세서(110)는 임의의 다양한 프로세서일 수 있다: 예를 들어, 인텔 제온(Intel Xeon), 셀러론(Celeron), 아이타니엄(Itanium), 또는 아톰(Atom) 프로세서, AMD 옵테론(Opteron) 프로세서, ARM 프로세서 등일 수 있다. 도 1은 하나의 프로세서를 도시하지만, 머신(105)은 임의의 개수의 프로세서들을 포함할 수 있고, 각각의 프로세서는 싱글 코어(single core) 또는 멀티-코어(multi-core) 프로세서들일 수 있다. 메모리(115)는 플래시 메모리, SRAM(Static Random Access Memory), PRAM(Persistent Random Access Memory), FRAM(Ferroelectric Random Access Memory), 또는 MRAM(Magnetoresistive Random Access Memory)과 같은 NVRAM(Non-Volatile Random Access Memory) 등과 같은 임의의 다양한 메모리일 수 있다. 메모리(115)는 또한 상이한 메모리 종류들의 임의의 원하는 조합일 수 있다. 메모리(115)는 또한 머신(105)의 일부인 메모리 컨트롤러(125)에 의해 제어될 수 있다.
스토리지 장치(120)는 임의의 다양한 스토리지 장치일 수 있다. 스토리지 장치(120)는 메모리(115) 내에 있을 수 있는 장치 드라이버(130)에 의해 제어될 수 있다.
도 2는 도 1의 머신(105)의 추가 세부 사항들을 도시한다. 도 2를 참조하면, 일반적으로, 머신(105)은 머신(105)의 구성 요소들의 동작들을 조정하는데 사용될 수 있는 메모리 컨트롤러(125) 및 클럭(205)을 포함할 수 있는 하나 이상의 프로세서들(110)을 포함한다. 프로세서들(110)은 또한 예시로서 RAM(random access memory), ROM(read-only memory), 또는 다른 상태 저장 매체를 포함할 수 있는 메모리(115)와 연결될 수 있다. 프로세서들(110)은 또한 스토리지 장치들(120)과 연결될 수 있고, 그리고 예를 들어 이더넷(Ethernet) 커넥터 또는 무선 커넥터일 수 있는 네트워크 커넥터(210)와 연결될 수 있다. 프로세서들(110)은 또한 다른 구성 요소들 중 유저 인터페이스(220) 및 입출력 엔진(225)을 이용하여 관리될 수 있는 입출력 인터페이스 포트들이 부착될 수 있는 버스(215)와 연결될 수 있다.
도 3은 인코딩/디코딩을 수행하도록 작동하는 도 1의 머신(105)의 메모리 모듈을 도시한다. 도 3에서, 메모리 모듈(115)이 도시되었다. 메모리 모듈(115)은 칩들(305-1~305-6)을 포함할 수 있다. 도 3은 6개의 칩들(305-1~305-6)을 포함하는 것으로서 메모리 모듈(115)을 도시하지만, 그러나 본 발명의 실시 예들은 임의의 개수의 칩들(305)의 사용을 지원할 수 있다.
메모리 모듈(115)은 또한 DIMM 컨트롤러(310)를 포함할 수 있다. DIMM 컨트롤러(310)는 칩들(305-1~305-6)간의 데이터 이동, 메모리 모듈(115) 내 캐시(미도시)를 지원하는 캐시 메커니즘, 및 다른 기능들을 제어할 수 있다. DIMM 컨트롤러(310)의 일부일 수 있는 코딩 메커니즘(315)은 메모리 트랜잭션의 일부로서, ECC(Error Correction Code)들과 같은 다양한 코딩들을 수행 및/또는 사용할 수 있다. 예를 들어, 코딩 메커니즘(315)은 메모리 트랜잭션의 일부인 데이터 상의 에러 정정 코드들을 생성하거나 사용할 수 있다. 도 7 내지 도 9를 참조하여 아래에서 설명될 바와 같이, 코딩 메커니즘(315)은 메모리 모듈(115) 내 요구되는 공간 및 메모리 모듈(115)에 의해 생성되는 열을 줄이기 위한 하드웨어 구현들을 (부분적으로 혹은 완전히) 공유할 수 있는 다수의 코딩들을 지원할 수 있다. 다양한 코딩들은 또한 서로 관계가 있을 수 있다: 즉, 하나의 코딩은 완전히 별개가 아닌 또 다른 하나의 코딩을 보완할 수 있다. 예를 들어, 코딩 메커니즘(315)은 코딩 회로 또는 코딩 장치일 수 있다.
도 4는 인코딩/디코딩을 수행하도록 작동하는 도 1의 메모리 컨트롤러(125)를 도시한다. 도 4에서, 메모리 컨트롤러(125)는 코딩 메커니즘(315)을 포함할 수 있다. 메모리 컨트롤러(125)는 또한 도 1의 머신(105) 사이의 데이터를 수신하고 송신하는 수신기/송신기(405), 도 1의 머신(105)으로부터 메모리 트랜잭션을 수신하는 특정한 메모리 모듈을 선택하는 메모리 모듈 선택기(410) 등과 같은 다른 종래의 구성 요소들을 포함할 수 있다. 일반적으로 도 3의 메모리 모듈(115) 및 메모리 컨트롤러(125) 중 하나가 데이터를 인코딩할 것이고 다른 하나가 데이터를 디코딩할 것이지만, 메모리 컨트롤러(125) 내 코딩 메커니즘(315)은 도 3의 메모리 모듈(115) 내 코딩 메커니즘(315)과 유사하게 동작한다. 예를 들어, 코딩 메커니즘(315)이 에러 검출 및 정정 코드들을 생성하는데 사용되면, 하나의 코딩 메커니즘(315)은 에러 검출 및 정정 코드들을 생성할 것이고, 그리고 다른 코딩 메커니즘(315)은 메모리 트랜잭션의 일부로서 전송된 임의의 데이터에 에러가 있는지 여부를 판별하기 위해 그 코드들을 사용할 것이다.
도 5a 및 도 5b는 인코딩/디코딩을 위해 사용되는 가변적인 개수의 ECC 비트들을 도시한다. 도 5a에서, 넓은 메모리 채널이 도시되었다. 도 5a에서 (그리고 도 5b에서), 메모리 트랜잭션의 각 버스트는 72개 비트들(데이터의 64개 비트들 및 비데이터(non-data)의 8개 비트들)을 전송한다. 총 8개 버스트들은 메모리 트랜잭션 당 총 512개 비트들의 데이터를, 그리고 메모리 트랜잭션 당 64개 비트들의 비데이터를 전달할 것이다.
각 버스트 내에서, 비데이터에 할당된 8개 비트들 중, 5개 비트들은 에러 검출/정정을 위해 사용되는 것으로 도시되었고, 3개 비트들은 메타데이터를 위해 사용되는 것으로 도시되었다. 에러 검출/정정을 위해 사용되는 5개 비트들은 예시로 에러 검출/정정을 위해 항상 사용되는 “기본 개수”의 비트들(505)로 간주될 수 있다. 3개 나머지 비데이터 비트들은 특정한 구현에 따라, 에러 검출/정정 또는 메타데이터를 위해 사용될 수 있다.
도 5a와 대조적으로, 도 5b에서 동일한 72개 비트들이 도시되었다. 그러나 도 5b에서, 기본 개수의 비트들(505)은 여전히 동일하지만(5개 비트들), 다른 비데이터 비트들은 메타데이터에 전적으로 할당되지 않는다. 대신에, 이들 비트들 중 2개는 메타데이터에 할당되고, 그리고 다른 (1개) 나머지 비트는 에러 검출/정정에 할당된다. 에러 검출/정정에 할당된 이 추가 비트는 이 예시에서 보충 개수의 비트들(510)로 지칭될 수 있다. 8개 ECC 비트들 중 6개가 도 5b에서 에러 정정을 위해 실제로 사용되므로, 도 5b는 도 5a와 비교하면 더 우수한 에러 검출/정정을 제공한다. 데이터, 비데이터, ECC, 및 메타데이터를 위해 사용되는 비트들의 개수는 단지 예시적이다: 임의의 개수의 비트들이 임의의 카테고리들을 위해 사용될 수 있다.
도 5a 및 도 5b와 대조적으로, 도 6a 및 도 6b는 좁은 메모리 채널을 도시한다. 도 6a에서 (그리고 도 6b에서), 메모리 트랜잭션 내 각 버스트는 40개 비트들(데이터의 32개 비트들 및 비데이터의 8개 비트들)을 전송한다. 총 16개 버스트들은 메모리 트랜잭션 당 총 512개 비트들의 데이터, 그리고 메모리 트랜잭션 당 128개 비트들의 메타데이터/ECC를 전달할 것이다.
각 버스트 내에서, 비데이터에 할당된 8개 비트들 중, 4개 비트들은 에러 검출/정정을 위해 사용되고, 4개 비트들은 메타데이터를 위해 사용된다. 에러 검출/정정을 위해 사용되는 4개 비트들은 예시로 에러 검출/정정을 위해 항상 사용되는 “기본 개수”의 비트들(505)로 간주될 수 있다; 나머지 비데이터 비트들은 특정한 구현에 따라, 에러 검출/정정 또는 메타데이터를 위해 사용될 수 있다.
도 6a와 대조적으로, 도 6b에서 동일한 40개 비트들이 도시되었다. 그러나 도 6b에서, 기본 개수의 비트들(505)은 여전히 동일하지만(4개 비트들), 다른 비데이터 비트들은 메타데이터에 전적으로 할당되지 않는다. 대신에, 이들 비트들 중 2개는 메타데이터에 할당되고, 그리고 다른 2개 비트들은 에러 검출/정정에 할당된다. 에러 검출/정정에 할당된 2개 추가 비트들은 예시로 “보충 개수”의 비트들(510)로서 간주될 수 있다. 8개 비데이터 비트들 중 6개가 도 6b에서 에러 정정을 위해 실제로 사용되므로, 도 6b는 도 6a와 비교하면 더 우수한 에러 검출/정정을 제공한다.
도 7은 본 발명의 제 1 실시 예에 따라, 도 3 및 도 4의 코딩 메커니즘(315)을 도시한다. 도 7에서, 코딩 메커니즘(315)이 인코더들(705, 710), 스위치(715), 및 스토리지(720)를 포함하는 것으로 도시되었다. 인코더들(705, 710)은 입력 데이터를 받을 수 있고 이 데이터로부터 코드들(725, 730)을 생성할 수 있다. 인코더(705)는 인코더(710)가 사용되는지 여부와 관계없이 데이터를 부호로 처리하는데(code) 항상 사용되는 주 인코더로서 간주될 수 있다. 인코더(710)는 이차적인 인코더로서 간주될 수 있다: 인코더(710)는 스위치(715)가 닫혀야만 사용될 수 있다. 스위치(715)는 스토리지(720)에 저장된 모드 레지스터(735)의 값에 따라 차례로 열리거나 닫힐 수 있다.
예를 들어, 인코더(705)는 도 5a 내지 도 6b의 기본 개수의 비트들(예를 들어, 도 5a 및 도 5b의 5개 비트들, 또는 도 6a 및 도 6b의 4개 비트들)을 이용하여 입력 데이터에 기초하여 에러 검출 코드를 생성할 수 있다. 그 다음, (이차적인) 인코더(710)는 도 5a 내지 도 6b의 이차적인(보충) 개수의 비트들(510, 예를 들어, 도 5b의 1개 비트, 도 6b의 2개 비트들)이 양인지(0보다 큰 지) 여부에 따라 추가 에러 정정 코드의 추가 비트들을 생성하는데 사용될 수 있다.
모드 레지스터(735)에는 인코더(710)가 활성화되도록, 스위치(715)가 열렸는지 또는 닫혔는지를 나타내는 값이 설정될 수 있다. 단지 1개 스위치가 도 7에서 사용되었으므로, 모드 레지스터(735)는 단지 데이터의 1개 비트를 포함할 수 있다: 예를 들어, 비트가 0으로 설정되면 스위치(715)는 열릴 수 있고, 그리고 비트가 1로 설정되면 스위치(715)는 닫힐 수 있다. 모드 레지스터(735)는 임의의 원하는 접근 방법을 이용하여 스위치(715, 또는 도 9 내지 도 11을 참조하여 설명될 임의의 추가 스위치들)가 열렸는지 또는 닫혔는지를 나타낼 수 있다.
도 7이 도 3 및 도 4의 코딩 메커니즘(315)이 에러 정정 코드들로서 사용될 수 있는 코드들을 어떻게 생성할 수 있는지 도시하지만, 도 7의 코딩 메커니즘(315)은 데이터가 정확하게 전송되었는지 검증 및/또는 정정하기 위해 이 에러 정정 코드들을 사용하지 않는다. 도 8은 본 발명의 제 2 실시 예에 따라, 이러한 코드들을 디코딩할 수 있는 도 3 및 도 4의 코딩 메커니즘(315)을 도시한다.
도 8에서, 코딩 메커니즘이 데이터 및 도 7의 코드들(725, 730)과 같은 코드들을 수신하는 것으로 도시되었다. 이 정보는 도 5a 내지 도 6b의 기본 개수의 비트들(505)에 기초하여 데이터의 최초 디코딩을 수행하는 디코더(805)로 입력되어 결과(810)를 생성한다. 그러나 도 5b 및 도 6b의 보충 개수의 비트들(510)이 0이 아니면, (가능한 코딩 메커니즘(315)으로 입력된 데이터 및 코드들과 함께) 디코더(805)의 출력은 또한 도 5b 및 도 6b의 보충 개수의 비트들(510)에 기초하여 추가 디코딩을 수행하는 디코더(815)로 넘어갈 수 있다. 제 2 디코더(815)의 결과는 결과(820)로서 도시된다. 제 2 디코더(815)가 사용되는지 여부는 모드 레지스터(735)에 기초하여 열리거나 닫히는 스위치(825)에 의해 제어될 수 있다. 결과들(810, 820)이 모두 사용되면, 데이터의 보다 나은 판별을 기대할 수 있다: 예를 들어, 결과(810)만을 사용하는 것 이상의, 에러 검출 및 정정 양자, 또는 향상된 에러 검출 또는 향상된 에러 정정.
도 7 및 도 8은 2개 레벨들의 인코더들 및 디코더들을 이용하여 인코딩 및 디코딩을 수행하는 코딩 메커니즘(315)을 도시하였으나, 본 발명의 실시 예들은 임의의 원하는 구성을 이용하여 임의의 개수의 레벨들 내의, 임의의 개수의 인코더들 및 디코더들을 지원할 수 있다. 도 9는 본 발명의 제 3 실시 예에 따라, 도 3 및 도 4의 코딩 메커니즘(315)을 도시한다. 도 9에서, 코딩 메커니즘(315)이 인코더들(705, 710, 905), 스위치들(715, 910), 및 스토리지(720)를 포함하는 것으로 도시되었다. 인코더들(705, 710)과 같이, 인코더(905)는 입력 데이터를 받을 수 있고 이 데이터로부터 코드(915)를 생성할 수 있다. 인코더들(710, 905)은 스위치들(715, 910)에 기초하여, 임의의 원하는 조합 내에서 활성화될 수 있다. 예를 들어, 스위치들(715, 910)이 모두 열릴 수 있고, 이 경우 인코더(705)만이 코드(725)를 생성하는데 사용될 수 있다. 또는 스위치들(715, 910)이 모두 닫힐 수 있고, 이 경우 인코더들(705, 710, 905)이 모두 사용되어 코드들(725, 730, 915)을 각각 생성할 수 있다. 또는, 스위치들(715, 910) 중 단지 하나만 닫힐 수 있고 (다른 하나는 열림), 이 경우 인코더들(710, 905) 중 하나만 사용되어 코드(730) 또는 코드(915)를 각각 생성할 수 있다. 스위치들(715, 910)은 모드 레지스터(735)의 값을 이용하여 관리될 수 있다.
다시, 예를 들어, 인코더(705)는 도 5a 및 도 5b의 5개 기본 개수의 비트들(505) 또는 도 6a 및 도 6b의 4개 기본 개수의 비트들(505)을 이용하여, 입력 데이터에 기초하여 에러 검출 코드를 생성할 수 있다. 그 다음, 이차적인 인코더들(710, 905)은 도 5b 및 도 6b의 이차적인(보충) 개수의 비트들(510)이 적어도 1개 또는 2개인지 여부에 따라, 에러 정정 코드의 1개 또는 2개 (또는 그 이상의) 추가 비트들을 생성하는데 사용될 수 있다.
도 9는 2개 스위치들(715, 910)을 포함하므로, 모드 레지스터(735)는 열리거나 닫히는 스위치들(715, 910)의 모든 적절한 조합들을 지원하기 위해 1개 비트 이상을 필요로 할 수 있다. 예를 들어, 모드 레지스터(735)의 최하위 비트는 스위치(715)가 열리거나 닫히는지를 지정할 수 있고, 모드 레지스터(735)의 다음 하위 비트는 스위치(910)가 열리거나 닫히는지를 지정할 수 있다. 모드 레지스터(735)는 임의의 원하는 접근 방법을 이용하여 어느 스위치들이 열리거나 닫히는지를 나타낼 수 있다.
도 9는 3개 인코더들(705, 710, 905)을 이용하여 인코딩을 수행하는 도 3 및 도 4의 코딩 메커니즘(315)을 도시한다. 유사한 방식으로, 도 3 및 도 4의 코딩 메커니즘(315)은 또한 2개 이상의 디코더들을 이용하여 디코딩을 수행할 수 있다. 도 10은 본 발명의 제 4 실시 예에 따라, 이러한 코딩 메커니즘의 예시를 도시한다.
도 10에서, 코딩 메커니즘(315)이 데이터 및 도 7 및 도 9의 코드들(725, 730, 915)과 같은 코드들을 수신하는 것으로 도시된다. 도 8을 참조하여 전술한 바와 같이, 이 정보는 도 5a 내지 도 6b의 기본 개수의 비트들(505)에 기초하여 데이터의 최초 디코딩을 수행하는 디코더(805)로 입력되어 결과(810)를 생성한다. 도 5b 및 도 6b의 보충 개수의 비트들(510)이 0이 아니면, (잠재적으로 데이터 및 코드들과 함께) 디코더(805)의 출력은 또한 도 5b 및 도 6b의 보충 개수의 비트들(510)에 기초하여 추가 디코딩을 수행하는 디코더(815)로 넘어갈 수 있다. 제 2 디코더(815)의 결과는 결과(820)로서 도시된다. 도 5b 및 도 6b의 보충 개수의 비트들(510)이 단지 디코더(815)에 의해 생성되는 것보다 더 많은 비트들을 포함하면, (다시, 잠재적으로 데이터 및 코드들과 함께) 디코더(815)의 출력은 또한 도 5b 및 도 6b의 보충 개수의 비트들(510)에 기초하여 추가 디코딩을 수행하는 디코더(1005)로 넘어갈 수 있다. 제 3 디코더(1005)의 결과는 결과(1010)로서 도시된다. 제 3 디코더(1005)가 사용되는지 여부는 모드 레지스터(735)에 기초하여 열리거나 닫히는 스위치(1015)에 의해 제어될 수 있다. 모든 결과들(810, 820, 1010)을 사용하는 것은 데이터의 보다 나은 판별을 제공하는 것이 기대될 수 있다: 예를 들어, 단지 결과들(810, 820)만을 사용하는 것 이상의, 에러 검출 및 정정 양자, 또는 향상된 에러 검출 또는 향상된 에러 정정.
도 7 내지 도 10에서 도시된 본 발명의 실시 예들에 있어서, 인코딩은 도 7 및 도 9의 선택적인 병렬 인코더들(parallel encoders; 710, 905)을 이용하여 행해지고, 반면에 디코딩은 도 8 및 도 10의 직렬 디코더들(cascading decoders; 815, 1005)을 이용하여 행해진다. 그러나 본 발명의 실시 예들은 직렬 인코더들(또는 병렬 및 직렬 인코더들의 조합)을 이용하여 인코딩을 수행할 수 있고, 병렬 디코더들(또는 병렬 및 직렬 디코더들의 조합)을 이용하여 디코딩을 수행할 수 있는 도 3 및 도 4의 코딩 메커니즘(315)을 포함한다. 도 11은 본 발명의 제 5 실시 예에 따라, 직렬 인코더들을 이용하는 도 3 및 도 4의 코딩 메커니즘(315)을 도시한다.
도 11에서, 코딩 메커니즘(315)이 인코더들(705, 710, 905), 스위치들(715, 910), 및 스토리지(720)를 포함하는 것으로 도시되었고, 이 모든 구성 요소들은 도 9와 유사하게 동작한다. 그러나 인코더(710)의 대안인 인코더(905) 대신에, 인코더(905)는 인코더(710)를 선택적으로 보완할 수 있다. 즉, 도 11의 인코더(905)는 도 11의 인코더(710)도 사용되지 않으면, 사용되지 않는다. 그러므로, 인코더(905)는 단지 스위치들(715, 910)이 모두 닫혀야만 사용될 수 있다. 스위치들(715, 910)은 스토리지(720)에 저장된 모드 레지스터(735)의 값에 따라 차례로 열리거나 닫힐 수 있다.
다시, 예를 들어, 인코더(705)는 도 5a 및 도 5b의 5개 기본 개수의 비트들(505) 또는 도 6a 및 도 6b의 4개 기본 개수의 비트들(505)을 이용하여, 입력 데이터에 기초하여 에러 검출 코드를 생성할 수 있다. 그 다음, 이차적인 인코더(710)는 도 5b 및 도 6b의 이차적인(보충) 개수의 비트들(510)이 적어도 1개 또는 2개인지 여부에 따라, 에러 정정 코드의 1개 또는 2개 (도는 그 이상) 추가 비트들을 생성하는데 사용될 수 있다. 메타데이터 비트들이 전혀 필요하지 않으면, 즉, 도 5b 및 도 6b의 이차적인(보충) 개수의 비트들(510)이 인코더(710)에 의해 생성된 비트들의 개수보다 크면, 제 3 인코더(905)는 또한 추가 이차적인 비트들을 이용하여 추가로 그리고 더 유능한(further and more-capable) 에러 정정 코드들을 생성하는데 사용될 수 있다.
직렬 인코더들을 사용하는 본 발명의 실시 예들에 있어서, 도 8 및 도 10의 코딩 메커니즘(315)과 함께, 직렬 내 하위의 인코더들은 입력으로서 이전의 인코더들의 출력을 수신할 수 있고, 또한 가능한 원본 데이터를 수신할 수 있다. 따라서, 예를 들어, 도 11의 인코더(905)는 도 11의 코드(730)를 수신할 수 있고, 그리고 또한 원본 데이터를 수신하여 도 11의 코드(915)를 생성한다.
도 9에서와 같이, 도 11은 2개 스위치들(715, 910)을 포함하므로, 모드 레지스터(735)는 열리거나 닫히는 스위치들(715, 910)의 모든 적절한 조합들을 지원하기 위해 1개 비트 이상이 필요할 수 있다. 예를 들어, 모드 레지스터(735)의 최하위 비트는 스위치(715)가 열리거나 닫히는지 여부를 지정할 수 있고, 모드 레지스터(735)의 다음 하위 비트는 스위치(910)가 열리거나 닫히는지 여부를 지정할 수 있다. 모드 레지스터(735)는 임의의 원하는 접근 방법을 이용하여 어느 스위치들이 열리거나 닫히는지를 나타낼 수 있다.
이 논의의 목적들로, “코더(coder)” 용어는 인코더들 및 디코더들 모두를 포함하는 포괄적인 용어가 되도록 의도된 것이다. 유사하게, 이 논의의 목적들로, “에러 관리(error management)” 용어는 (도 7, 9, 11의 코딩 메커니즘(315)과 함께) 에러 검출 및/또는 정정 코드들의 생성 그리고 (도 8 및 도 10의 코딩 메커니즘(315)과 함께) 임의의 에러들을 검출 및 정정하는 것에서 이러한 코드들의 사용 모두를 포함하는 포괄적인 용어가 되도록 의도된다. 또한, “에러 관리” 용어는 에러 검출 및 정정의 모든 변형들을 포함하도록 의도된다. 따라서, 예를 들어, 도 7, 9, 11의 코드(725)가 원본 데이터 내에서 에러 검출 능력을 제공하고 그리고 도 7, 9, 11의 코드(730)가 원본 데이터 내에서 에러 정정 능력을 제공하면, 양자는 “에러 관리”로 간주된다. 유사하게, 도 7, 9, 11의 코드(725)가 약한 에러 검출 또는 에러 정정 결과를 제공하고 도 7, 9, 11의 코드(730)가 강한 에러 검출 또는 에러 정정을 제공하면, 양자는 “에러 관리”로 간주된다.
도 7 내지 도 11은 본 발명의 특정한 실시 예들을 제시한다. 그러나 본 발명의 다른 실시 예들은 인코더들 또는 디코더들의 임의의 원하는 조합을 지원할 수 있다. 따라서, 예를 들어, 도 3 및 도 4의 코딩 메커니즘(315)은 몇몇 직렬의 코더들 및 대체의 다른 코더들을 포함할 수 있다. 또는, 도 3 및 도 4의 코딩 메커니즘(315)은 직렬의 하위 레벨에서 다수의 대체 코더들과 함께, 직렬의 최상위에서 하나의 코더를 가질 수 있다. 직렬의 그리고 대체의 코더의 이러한 조합들 모두는 본 발명의 실시 예들로서 포함된다. 다시, 모드 레지스터(735)의 값은 모드 레지스터(735)의 값으로부터 스위치들(715, 910)로의 임의의 원하는 맵핑(mapping)을 이용하여, 어느 스위치들이 열리는지 그리고 어느 스위치들이 닫히는지 제어할 수 있다. 또한, 본 발명의 실시 예들은 모든 임의의 구성들에서, 인코딩 및 디코딩 메커니즘들 모두를 지원할 수 있다. 예를 들어, 도 3 및 도 4의 코딩 메커니즘(315)은 도 7, 도 9, 도 11에서 도시된 것들과 같은 인코더들 그리고 도 8 및 도 10에서 도시된 것들과 같은 디코더들을 모두 포함할 수 있다.
또한, 도 7은 단지 2개 디코더들(705, 710)을 도시하고, 그리고 도 9 및 도 11 각각은 3개 인코더들(705, 710, 905)을 도시한다. 유사하게, 도 8은 2개 디코더들(805, 825)을 도시하고, 반면에 도 10은 3개 디코더들(805, 825, 1005)을 도시한다. 본 발명의 실시 예들은 임의의 개수의 코더들, 및 임의의 원하는 구성을 지원할 수 있다. 본 발명의 실시 예들을 위해 필요한 코더들의 최소 개수는 인코더들(705, 710) 또는 디코더들(805, 815)과 같은 2개 코더들을 포함하는 것이고, 여기서 인코더(705) 또는 디코더(805)와 같은 1개 코더는 항상 활성화되고 그리고 인코더(710) 또는 디코더(815)와 같은 1개 코더는 제 1 코더를 보완하는데 사용될 수 있다.
전술한대로, 도 7, 도 9, 및 도 11의 인코더들(705, 710, 905) 및 도 8 및 도 10의 디코더들(805, 815, 1005)은 하드웨어 구현들을 공유할 수 있다. 예시로서, 도 7, 도 9, 및 도 11의 인코더들(705, 710, 905)은 모든 가능한 ECC 비트들을 생성하는 1개 인코더로서 구현될 수 있다: 도 7, 도 9, 및 도 11의 스위치들(715, 910)은 그 다음 어느 ECC 비트들이 도 7, 도 9, 및 도 11의 코딩 메커니즘(315)으로부터 출력되는지를 선택할 수 있다: 단지 에러 검출 비트들, 몇몇의 에러 정정 비트들, 및/또는 모든 에러 정정 비트들(또는, 약한 에러 검출/정정 대 강한 에러 검출/정정을 지원하는 본 발명의 실시 예들을 위해, 단지 약한 에러 검출/정정 비트들, 몇몇의 강한 에러 검출/정정 비트들, 또는 모든 강한 에러 검출/정정 비트들).
도 5b 및 도 6b의 보충 개수의 비트들(510)은 2개 이상의 집합들의 비트들을 실제로 포함할 수 있다. 예를 들어, 도 5b 및 도 6b에서 메타데이터 비트들이 필요하지 않은 것으로 가정한다. 도 5b의 보충 개수의 비트들(510)은 3개일 것이고, 그리고 도 6b의 보충 개수의 비트들(510)은 4개일 것이다. 그러나 4개 코드 비트들을 생성하는 것을 지원할 수 있는 도 7, 도 9, 및 도 11의 코딩 메커니즘(315) 내 제 2 코더가 없을 수도 있다. 본 발명의 이러한 실시 예에 있어서, 도 7, 도 9, 및 도 11의 인코더(710)는 2개 비트들의 에러 정정 능력을 부가하는 도 7, 도 9, 및 도 11의 코드(730)를 생성하는데 사용될 수 있고, 그리고 도 9 및 도 11의 인코더(905)는 추가 2개 비트들의 에러 정정 능력을 부가하는 도 9 및 도 11의 코드(915)를 생성하는데 사용될 수 있다.
단지 (인코더이거나 디코더인) 1개의 이차적인 코더가 있으면, 도 5b 및 도 6b의 단 1개의 보충 개수의 비트들이 충분할 수 있다. 그러나 다수의 이차적인 코더들이 있으면 (또는, 대안으로 또는 결합하여, 제 2 코더, 제 3 코더, 등), 이러한 다양한 코더들을 언제 활성화할지를 관리하는 대체 방법들이 있다. 본 발명의 몇몇 실시 예들에 있어서, 다양한 이차적인 코더들에 의해 지원되는 상이한 비트들의 수들을 각각 관리하는 도 5b 및 도 6의 다수의 보충 개수의 비트들(510)이 있을 수 있다. 예를 들어, 도 11의 코딩 메커니즘(315)을 고려한다. 인코더(710)는 제 2 코드(730)로서 코드의 2개 추가 비트들을 제공하는데 사용될 수 있고, 그리고 인코더(905)는 제 3 코드(915)로서 코드의 제 3 추가 비트를 제공할 수 있다. 이를 나타내기 위해, 도 5b 및 도 6b의 보충 개수의 비트들(510)은 2개 보충 개수의 비트들을 실제로 포함할 수 있다. 그 다음에, 시스템이 메타데이터를 위해 3개 비트들을 요구하면, 이러한 값들 모두는 보충 에러 정정 코드들을 위해 사용 가능한 비트들이 없음을 나타내는 0으로 설정될 수 있다. 그러나, 시스템이 메타데이터를 위해 1개 비트를 단지 요구하면: 보충 개수의 비트들 중 하나는 2로 설정될 수 있다. 그리고 시스템이 메타데이터를 위해 비트들을 요구하지 않으면, 보충 개수의 비트들 중 하나는 2로 설정될 수 있고 다른 보충 개수의 비트들은 1로 설정될 수 있다. 이 정보로부터, 도 11의 모드 레지스터(735)는 사용 가능한 보충 개수의 비트들을 위해 적절하게 도 11의 인코더들(710, 905)을 활성화하도록 설정될 수 있다.
본 발명의 다른 실시 예에 있어서, 도 5b 및 도 6b의 보충 개수의 비트들(510)은, 단일 값으로서, 메타데이터로서 사용되지 않는 모든 추가 비트들(도 5a 내지 도 6b의 기본 개수의 비트들(505)로서 표현되는 것들 이상)을 나타낼 수 있다. 그 다음, 코더들은 모든 사용 가능한 비트들을 사용하기 적절하게 활성화될 수 있다. 이러한 본 발명의 실시 예들에 있어서, 도 5b 및 도 6b의 보충 개수의 비트들(510)은 얼마나 많은 비트들이 메타데이터를 위해 필요한지에 따라 0, 2, 또는 3 (또는 도 5b 및 도 6b의 기본 개수의 비트들(505) 및 도 5b 및 도 6b의 보충 개수의 비트들(510)의 값들에 따라, 다른 값들) 으로 설정될 수 있다. 그 다음, 도 11의 인코더들(710, 905)에 의해 생성되는 알려진 개수의 비트들과 이 값을 비교함으로써, 도 11의 모드 레지스터(735)는 도 11의 인코더들(710, 905)을 활성화하도록 설정될 수 있다. 예를 들어, 도 5b 및 도 6b의 보충 개수의 비트들(510)이 0이면, 그 다음 도 11의 모드 레지스터(735)는 도 11의 인코더들(710, 905) 중 어느 것도 활성화되지 않도록 설정될 수 있다. 도 5b 및 도 6b의 보충 개수의 비트들(510)이 2이면, (도 11의 인코더(710)는 코드(730) 내에 모든 사용 가능한 보충 비트들을 사용하기에 충분한 비트들을 생성할 것이므로) 도 11의 모드 레지스터(735)는 도 11의 인코더(710)는 활성화되도록 그러나 도 11의 인코더(905)는 활성화되지 않도록 설정될 수 있다. 그리고 도 5b 및 도 6b의 보충 개수의 비트들(510)이 3이면, 도 11의 모드 레지스터(735)는 도 11의 인코더들(710, 905) 모두가 활성화되도록 설정되어 코드들(730, 915) 내 모든 3개 추가 비트들을 생성한다. 도 3 및 도 4의 코딩 메커니즘(315)이 보통 하드웨어 형태로 구현되므로, 도 7, 도 9, 및 도 11의 코드들(730, 915)의 일부로서 생성될 수 있는 비트들의 개수는 미리 알려지고, 최대로 가능한 에러 검출/정정을 지원하기 위해 얼마나 많은 이차적인 코더들이 필요한지가 쉽게 판별될 수 있다.
(도 11에서와 같이) 직렬 코더들 경우 본 발명의 실시 예들에 있어서, 도 11의 모드 레지스터(735)에 의해 활성화되는 코더들은 (도 5b 및 도 6b의 보충 개수의 비트들(510)에 기초하여) 특정한 순서가 필요하다. 따라서, 예를 들어, 도 11의 인코더들(710, 905) 각각이 (도 11의 코드들(730, 915) 내에서) 코드의 2개 비트들을 생성하나 도 5b 및 도 6b의 보충 개수의 비트들(510)이 단지 3이면, 도 11의 인코더(905)는 활성화되지 않아야 한다(사용될 수 있는 것보다 더 많은 비트들을 생성할 것이다). 그러나, 코더들이 대안으로서 사용 가능한 본 발명의 실시 예들에 있어서, 도 9의 코딩 메커니즘(315)으로서, 코더들은 활성화를 위해 선택되어 도 5b 및 도 6b의 사용 가능한 보충 개수의 비트들(510)을 최대화할 수 있다. 예를 들어, 도 5b 및 도 6b의 보충 개수의 비트들(510)이 3이고, (도 9의 인코더(710)에 의해 생성된) 도 9의 코드(730)가 2개 추가 비트들을 포함하였고, 그리고 (도 9의 인코더(905)에 의해 생성된) 도 9의 코드(915)가 3개 추가 비트들을 포함한 것으로 가정한다. 시스템의 에러 검출/정정을 최대화하기 위해, 도 9의 모드 레지스터(735)는 도 9의 인코더(905)는 활성화되도록 그러나 도 9의 인코더(710)는 활성화되지 않도록 설정되어야 한다. 이러한 방식으로, 단지 (도 9의 인코더(710)에 의해 생성되는 것으로서) 2개 비트들이 아닌, 3개 추가 에러 정정 비트들이 생성될 수 있다.
전술한대로, 상이한 호스트들 및 메모리 모듈 제조사들은 상이한 메타데이터를 요구할 수 있다. 본 발명의 실시 예들은 도 1의 메모리 컨트롤러(125) 및 도 1의 메모리 모듈(115)이 ECC 대 메타데이터에 대한 가변적인 개수의 비트들을 지원하게 할 수 있다. 결과적으로, 도 1의 메모리 컨트롤러(125) 및 도 1의 메모리 모듈(115) 모두는 가변된 ECC 대 메타데이터를 지원하는 해당 구성 요소들과 함께 메모리 트랜잭션을 지원할 수 있다. 즉, 도 3의 메모리 모듈(115)을 지원하는 본 발명의 실시 예들은 메모리 컨트롤러들(125)의 특정한 메타데이터 요구들과 관계없이, 도 1의 메모리 컨트롤러들(125)과 통신할 수 있고, 도 1의 메모리 컨트롤러(125)의 메타데이터 요건들이 주어지면 사용 가능한 최적의 ECC를 제공한다. 그리고 도 4의 메모리 컨트롤러(125)를 지원하는 본 발명의 실시 예들은 도 1의 메모리 모듈들(115)과 통신할 수 있고 고유 ECC 능력의 사용을 최대화할 수 있다. (물론, 머신이 도 3의 메모리 모듈(115) 및 도 4의 메모리 컨트롤러(125)를 모두 포함하면, 두 개는 그들 중 어느 하나가 개별적으로 지원하는 최적의 ECC를 사용할 수 있다.) 달리 설명하면, 예를 들어, NVDIMM 메모리를 사용하는 본 발명의 실시 예들에 있어서, NVDIMM 메모리 모듈은 호스트에 의해 요구되는 메타데이터의 비트들의 개수에 기초하여 제공된 ECC 지원 레벨을 변경할 수 있다. 다른 예로, DDR5 메모리를 사용하는 본 발명의 다른 실시 예들에 있어서, 도 1의 메모리 컨트롤러(125)는 DDR5 메모리가 ECC 능력의 현재 레벨 또는 ECC 오버헤드의 현재 레벨을 유지하는지 여부에 기초하여 ECC 지원 레벨을 변경할 수 있다.
보통, 도 1의 머신(105)이 전원이 들어오면 ECC 대 메타데이터를 위해 사용되는 비트들의 개수가 판별되고, (런타임(runtime) 동안의 변경은 수신 시 데이터가 어떻게 해석되는지 영향을 미치므로) 런타임 동안 변경되지 않는다. 그러나 본 발명의 몇몇 실시 예들은 런타임 동안 ECC 대 메타데이터를 위해 사용되는 비트들의 개수를 변경하는 것을 지원할 수 있다.
ECC 대 메타데이터를 위해 사용되는 비트들의 개수가 일단 판별되면, 도 7 내지 도 11의 모드 레지스터(735)가 설정될 수 있다. 예를 들어, 도 6b의 보충 개수의 비트들(510)이 0이면, 도 7 내지 도 11의 모드 레지스터(735)는 도 7 내지 도 11의 스위치들(715, 910)이 열리도록 설정될 수 있다. 도 6b의 보충 개수의 비트들(510)이 0이 아니면, 도 7 내지 도 11의 모드 레지스터(735)는 메모리 트랜잭션의 에러 정정 능력을 보완하도록 도 7 내지 도 11의 적절한 코더들(710, 905)을 활성화하도록 도 7 내지 도 11의 적절한 스위치들(715, 910)이 닫히도록 설정될 수 있다.
도 12a 및 도 12b는 본 발명의 실시 예에 따라, 메모리 트랜잭션을 위한 인코딩 데이터에 대한 예시적인 절차의 순서도를 도시한다. 도 12a에서, 단계(1205)에서, 도 7, 도 9, 및 도 11의 코딩 메커니즘(315)은 메모리 트랜잭션을 위한 데이터를 수신할 수 있다. 단계(1210)에서, 도 7, 도 9, 및 도 11의 코딩 메커니즘(315)은 에러 검출 및 정정에서 사용 가능한 도 5a 내지 도 6b의 기본 개수의 비트들 및 도 5b 및 도 6b의 보충 개수의 비트들(510)을 판별할 수 있다. 단계(1215)에서, 도 7, 도 9, 및 도 11의 제 1 인코더(705)는 도 5a 내지 도 6b의 기본 개수의 비트들(505)을 이용하여 제 1 인코딩을 수행할 수 있다.
(도 12b) 단계(1220)에서, 도 7, 도 9, 및 도 11의 코딩 메커니즘(315)은 인코딩될 수 있는 임의의 보충 비트들이 존재하는지를 (또는 모든 나머지 비트들이 메타데이터를 위해 사용되는지를) 판별할 수 있다. 인코딩될 수 있는 보충 비트들이 없으면, 단계(1225)에서 메모리 트랜잭션은 (도 3의 메모리 모듈(115) 또는 도 4의 메모리 컨트롤러(125) 중 어느 하나에 의해) 도 7, 도 9, 및 도 11의 데이터 및 제 1 코드(725)를 이용하여 수행될 수 있다. 그렇지 않으면, 단계(1230)에서 이차적인 인코더가 보충 개수의 비트들을 사용하는데 선택된다. 단계(1230)는 점선(1235)으로 도시된 바와 같이 선택적이다. 예를 들어, 도 7 및 도 11의 코딩 메커니즘(315)이 사용되면, 도 7 및 도 11의 코딩 메커니즘(315)의 임의의 한 “레벨”에서 선택 가능한 단지 1개의 인코더가 존재할 수 있다. 그러나 도 9의 코딩 메커니즘(315)이 사용되면, 도 9의 코딩 메커니즘(315)의 임의의 한 “레벨”에서 선택 가능한 임의의 개수의 인코더들이 존재할 수 있다. 그러므로, 인코더는 선택되어야 할 수 있다. 임의의 기준에 따라 인코더가 선택될 수 있다: 예를 들어, 인코딩을 위해 사용 가능한 비트들을 최대한 사용하는 인코더, 또는 특정한 유형의 인코딩을 제공하는 인코더.
일단 인코더가 선택되면, 단계(1240)에서, 이차적인 인코딩은 선택된 인코더를 이용하여 수행될 수 있다. 단계(1245)에서, 도 7, 도 9, 및 도 11의 코딩 메커니즘(315)은 인코딩될 수 있는 임의의 나머지 보충 비트들이 있는지를 판별할 수 있다. 만약 보충 비트들이 있다면, 단계(1250)에서 (단계들(1230, 1240)을 필수적으로 반복하여) 추가 인코딩이 수행될 수 있다. 그렇지 않으면, 단계(1225)가 진행되고, 메모리 트랜잭션의 데이터 및 코드들이 사용된다.
도 13a 및 도 13b는 본 발명의 실시 예에 따라, 도 8 및 도 10의 코딩 메커니즘을 이용하여 메모리 트랜잭션을 위해 데이터를 디코딩하는 예시적인 절차의 순서도를 도시한다. 도 13a에서, 단계(1305)에서, 도 8 및 도 10의 코딩 메커니즘(315)은 데이터 트랜잭션을 위한 데이터를 수신할 수 있다. 단계(1310)에서, 도 8 및 도 10의 코딩 메커니즘(315)은 메모리 트랜잭션에서 데이터를 위한 코드들을 수신할 수 있다. 단계들(1305, 1310)은 단계들(1305, 1310)에 의해 제안된 것처럼 분리된 동작들이 아니라, 하나의 동작으로서 수행될 수 있다. 단계(1315)에서, 도 8 및 도 10의 코딩 메커니즘(315)은 에러 검출 및 정정에서 사용 가능한 도 5a 내지 도 6b의 기본 개수의 비트들(505) 및 도 5b 및 도 6b의 보충 개수의 비트들(510)을 판별할 수 있다. 단계(1320)에서, 도 8 및 도 10의 제 1 디코더(805)는 도 5a 내지 도 6b의 기본 개수의 비트들(505)을 이용하여 제 1 디코딩을 수행할 수 있다.
(도 13b) 단계(1325)에서, 도 8 및 도 10의 코딩 메커니즘(315)은 디코딩될 수 있는 임의의 보충 비트들이 존재하는지를 (또는 모든 나머지 비트들이 메타데이터를 위해 사용되는지를) 판별할 수 있다. 디코딩될 수 있는 보충 비트들이 없으면, 단계(1330)에서 메모리 트랜잭션은 (도 3의 메모리 모듈(115) 또는 도 4의 메모리 컨트롤러(125) 중 어느 하나에 의해) 도 8 및 도 10의 데이터 및 제 1 결과(810)를 이용하여 수행될 수 있다. 그렇지 않으면, 단계(1335)에서 이차적인 디코더가 보충 개수의 비트들을 사용하는데 선택된다. 단계(1335)는 점선(1340)으로 도시된 바와 같이 선택적이다. 예를 들어, 도 8 및 도 10의 코딩 메커니즘(315)이 도 8 및 도 10의 코딩 메커니즘(315)의 임의의 한 “레벨”에서 선택 가능한 단지 1개의 디코더를 도시하지만, 다른 구현들은 도 8 및 도 10의 코딩 메커니즘(315)의 임의의 레벨에서 다수의 디코더들을 제공할 수 있다. 그러므로, 디코더는 선택되어야 할 수 있다. 임의의 기준에 따라 디코더가 선택될 수 있다: 예를 들어, 디코딩을 위해 사용 가능한 비트들을 최대한 사용하는 디코더, 또는 특정한 유형의 디코딩을 제공하는 디코더.
일단 디코더가 선택되면, 단계(1345)에서, 이차적인 디코딩은 선택된 디코더를 이용하여 수행될 수 있다. 단계(1350)에서, 도 8 및 도 10의 코딩 메커니즘(315)은 디코딩될 수 있는 임의의 나머지 보충 비트들이 있는지를 판별할 수 있다. 만약 보충 비트들이 있다면, 단계(1355)에서 (단계들(1335, 1345)을 필수적으로 반복하여) 추가 디코딩이 수행될 수 있다. 그렇지 않으면, 단계(1330)가 진행되고, 메모리 트랜잭션의 데이터 및 결과들이 사용된다.
도 14는 에러 검출 및 정정을 지원하기 위해 코드들을 이용하는 예시적인 절차의 순서도를 도시한다. 도 14에서, 단계(1405)에서, 도 7, 도 9, 및 도 11의 코드(725)는 에러 검출을 수행하는데 사용될 수 있고, 단계(1410)에서, 도 7, 도 9, 및 도 11의 코드(725, 730, 915)는 에러 검출 및 정정 모두를 수행하는데 사용될 수 있다. 그렇지 않으면, 단계(1415)에서, 도 7, 도 9, 및 도 11의 코드(725)는 약한 코딩(에러 검출 또는 에러 정정 중 하나)을 수행하는데 사용될 수 있고, 그리고 단계(1420)에서 도 7, 도 9, 및 도 11의 코드들(725, 730, 915)은 강한 코딩(반복하여, 에러 검출 및 에러 정정 중 하나)을 수행하는데 사용될 수 있다.
도 12a 내지 도 14에서, 본 발명의 몇몇 실시 예들이 도시되었다. 그러나 당업자는 단계들의 순서를 변경함으로써, 단계들을 생략함으로써, 또는 도시되지 않은 링크(link)들을 포함함으로써 본 발명의 다른 실시 예들도 가능한 것을 인식할 것이다. 순서도들의 모든 이러한 변형들은 명시적으로 설명되거나 그렇지 않았던, 본 발명의 실시 예들인 것으로 간주된다.
아래의 설명은 본 발명의 일부 측면들이 구현될 수 있는 적합한 머신 또는 머신들의 간결하고, 일반적인 설명을 제공하기 위해 의도된다. 머신 또는 머신들은 적어도 일부는 다른 머신으로부터 수신되는 지시들, 가상현실(VR) 환경과의 상호 작용, 생체 피드백, 또는 다른 입력 신호뿐만 아니라 키보드, 마우스 등과 같은 종래 입력 장치들로부터의 입력에 의해 제어될 수 있다. 본 명세서에서 사용되는 바와 같이, "머신" 용어는 단일 머신, 가상 머신, 또는 머신들, 가상 머신들 또는 함께 동작하는 장치들과 통신하도록 연결된 시스템을 넓게 포함하는 것으로 의도된다. 예시적인 머신들은 예를 들어 자동차, 기차, 택시 등과 같은 개인용 또는 공공 수송과 같은 수송 장치들뿐만 아니라 PC(personal computer)들, 워크스테이션들, 서버들, 포터블 컴퓨터(portable computer)들, 핸드헬드(handheld) 장치들, 전화들, 태블릿(tablet)들 등과 같은 컴퓨팅 장치들을 포함할 수 있다.
머신 또는 머신들은 프로그램 가능한 또는 프로그램 불가능한 논리 장치들 또는 어레이들, ASIC(Application Specific Integrated Circuit), 임베디드(embedded) 컴퓨터들, 스마트 카드들 등과 같은 임베디드 컨트롤러들을 포함할 수 있다. 머신 또는 머신들은 네트워크 인터페이스, 모뎀, 또는 다른 통신 연결을 통해서와 같이 하나 또는 그 이상의 원격 머신들에 대한 하나 그 이상의 연결들을 사용할 수 있다. 머신들은 인트라넷(intranet), 인터넷, LAN(Local Area Networks), WAN(Wide Area Networks) 등과 같은 물리적 및/또는 논리적 네트워크의 수단으로 서로 연결될 수 있다. 당업자는 네트워크 통신이 다양한 유선 및/또는 무선 근거리 또는 원거리 캐리어(carrier)들 및 무선 주파수(RF), 위성, 마이크로파, IEEE 802.11, 블루투스, 광학, 적외선, 케이블, 레이저 등을 포함하는 프로토콜을 이용함을 이해할 것이다.
본 발명의 실시 예들은, 머신에 의해 액세스되는 때에 머신이 작업들을 수행하거나 또는 추상적인 유형의 데이터 또는 하위 레벨 하드웨어 콘텍스트(context)들을 정의하는 것을 야기하는 함수들, 절차들, 데이터 구조들, 어플리케이션 프로그램들 등을 포함하는 관련된 데이터를 참조하여 또는 협력하여 설명될 수 있다. 관련된 데이터는, 예를 들어 RAM, ROM 등과 같은 휘발성 및/또는 불휘발성 메모리, 또는 다른 스토리지 장치들, 그리고 하드 드라이브들, 플로피 디스크들, 광학 저장, 테이프들, 플래시 메모리, 메모리 스틱(stick)들, 디지털 비디오 디스크들, 생체 저장 등을 포함하는 관련된 저장 매체에 저장될 수 있다. 관련된 데이터는 물리적 및/또는 논리적 네트워크를 포함하는 전송 환경들을 거쳐 패킷들, 직렬 데이터, 병렬 데이터, 전파된 신호들 등의 형태로 전달되고, 압축된 또는 암호화된 포맷으로 사용될 수 있다. 관련된 데이터는 분산 환경에서 사용될 수 있고, 머신 접근을 위해 지역적으로 및/또는 원격으로 저장될 수 있다.
본 발명의 실시 예들은 하나 또는 그 이상의 프로세서들에 의해 실행 가능한 명령들을 포함하는 비일시적 머신 독출 가능한 매체를 포함할 수 있고, 명령들은 본 명세서에서 설명된 바와 같이 본 발명의 요소들을 수행하는 명령들을 포함한다.
도시된 실시 예들을 참조하여 설명되고 도시된 본 발명의 원리들을 가지면, 도시된 실시 예들이 이러한 원리들로부터 벗어나지 않으면서 배열 및 세부 사항에서 수정될 수 있고, 임의의 원하는 방법으로 조합될 수 있음이 이해될 것이다. 그리고, 전술한 설명이 구체적인 실시 예들에 집중하였지만, 다른 구성들 또한 고려된다. 구체적으로, "본 발명의 실시 예에 따른"과 같은 설명들 또는 본 명세서에서 사용된 유사한 것들에도 불구하고, 이러한 문구들은 일반적으로 실시 예의 가능성들을 참조하기 위해 의도되고, 본 발명을 특정한 실시 예의 구성들로 한정하는 것을 의도하지 않는다. 본 명세서에서 사용된 바와 같이, 이러한 용어들은 다른 실시 예들로 조합 가능한 동일한 또는 상이한 실시 예들을 참조할 수 있다.
전술한 예시적인 실시 예들은 본 발명을 그것들로 한정하는 것으로서 해석되지 않는다. 적은 실시 예들이 설명되었으나, 당업자는 본 기재의 신규한 설명들 및 장점들로부터 실질적으로 벗어나지 않으면서 이러한 실시 예들에 대해 많은 수정들이 가능함을 충분히 이해할 것이다. 따라서, 이러한 모든 수정들은 청구항들에서 정의되는 바와 같이 본 발명의 범위 내에 포함되는 것으로 의도된다.
본 발명의 실시 예들은 제한없이 다음의 서술들로 확장 될 수 있다:
서술 1. 본 발명의 실시 예는 하드웨어로 구현된, 코딩 메커니즘을 포함한다. 코딩 메커니즘은:
데이터에 대한 기본 개수의 비트들을 포함하는 제 1 코드를 생성하는 제 1 인코더;
데이터에 대한 보충 개수의 비트들을 포함하는 제 2 코드를 생성하는 제 2 인코더;
모드 레지스터에 대한 스토리지; 및
제 2 인코더가 사용되는지 여부를 제어하도록 모드 레지스터에 응답하는 스위치를 포함하되,
제 1 인코더는 제 1 코드를 생성하는데 항상 사용되고 그리고 제 2 인코더는 제 2 코드를 생성하는데 선택적으로 사용되고, 그리고
제 2 코드는 제 1 코드와 함께 제 1 코드 단독보다 더 강한 인코딩을 제공한다.
서술 2. 본 발명의 실시 예는 서술 1에 따른 코딩 메커니즘을 포함하되, 코딩 메커니즘은 메모리 모듈 내에서 구현된다.
서술 3. 본 발명의 실시 예는 서술 2에 따른 코딩 메커니즘을 포함하되, 메모리 모듈은 NVDIMM(Non-Volatile Dual In-Line Memory Module)을 포함한다.
서술 4. 본 발명의 실시 예는 서술 3에 따른 코딩 메커니즘을 포함하되, 코딩 메커니즘은 NVDIMM-P 프로토콜을 이용하여 통신한다.
서술 5. 본 발명의 실시 예는 서술 1에 따른 코딩 메커니즘을 포함하되, 코딩 메커니즘은 메모리 컨트롤러 내에서 구현된다.
서술 6. 본 발명의 실시 예는 서술 1에 따른 코딩 메커니즘을 포함하되,
코딩 메커니즘은 보충 개수의 비트들을 이용하여 데이터에 대한 제 3 코드를 생성하는 제 3 인코더를 더 포함하고, 그리고
스위치는 모드 레지스터에 응답하여 제 2 인코더를 사용하거나, 제 3 인코더를 사용하거나, 또는 제 2 인코더와 제 3 인코더 모두 사용하지 않는 것 중 선택하도록 작동한다.
서술 7. 본 발명의 실시 예는 서술 1에 따른 코딩 메커니즘을 포함하되,
코딩 메커니즘은 제 2 보충 개수의 비트들을 이용하여 데이터에 대한 제 3 코드를 생성하는 제 3 인코더를 더 포함하고, 그리고
스위치는 모드 레지스터에 응답하여 제 2 인코더를 사용하거나, 제 2 인코더 및 제 3 인코더 모두를 사용하거나, 또는 제 2 인코더와 제 3 인코더 모두 사용하지 않는 것 중 선택하도록 작동한다.
서술 8. 본 발명의 실시 예는 서술 1에 따른 코딩 메커니즘을 포함하되, 모드 레지스터는 스위치가 제 2 인코더를 사용하는지 여부를 나타내는 값을 저장하도록 작동한다.
서술 9. 본 발명의 실시 예는 서술 8에 따른 코딩 메커니즘을 포함하되, 모드 레지스터는 스위치가 보충 개수의 비트들이 0보다 큰 지 여부에 응답하는 제 2 인코더를 사용하는지 여부를 나타내는 값을 저장하도록 작동한다.
서술 10. 본 발명의 실시 예는 서술 1에 따른 코딩 메커니즘을 포함하되, 제 1 인코더 및 제 2 인코더는 부분적인 하드웨어 구현을 공유한다.
서술 11. 본 발명의 실시 예는 하드웨어에서 구현된, 코딩 메커니즘을 포함한다. 코딩 메커니즘은:
데이터 및 기본 개수의 비트들을 포함하는 제 1 코드에 대한 제 1 결과를 생성하는 제 1 디코더;
데이터에 및 보충 개수의 비트들을 포함하는 제 2 코드에 대한 제 2 결과를 생성하는 제 2 디코더;
모드 레지스터에 대한 스토리지; 및
제 2 디코더가 사용되는지 여부를 제어하도록 모드 레지스터에 응답하는 스위치를 포함하되,
제 1 디코더는 제 1 결과를 생성하는데 항상 사용되고 그리고 제 2 디코더는 제 2 결과를 생성하는데 선택적으로 사용되고, 그리고
제 2 결과는 제 1 결과와 함께 제 1 결과 단독보다 더 강한 디코딩을 제공한다.
서술 12. 본 발명의 실시 예는 서술 11에 따른 코딩 메커니즘을 포함하되, 제 2 디코더는 데이터, 제 1 코드, 및 제 2 코드에 대응하는 제 2 결과를 생성하도록 작동한다.
서술 13. 본 발명의 실시 예는 서술 11에 따른 코딩 메커니즘을 포함하되, 코딩 메커니즘은 메모리 모듈 내에서 구현된다.
서술 14. 본 발명의 실시 예는 서술 13에 따른 코딩 메커니즘을 포함하되, 메모리 모듈은 NVDIMM(Non-Volatile Dual In-Line Memory Module)을 포함한다.
서술 15. 본 발명의 실시 예는 서술 14에 따른 코딩 메커니즘을 포함하되, 코딩 메커니즘은 NVDIMM-P 프로토콜을 이용하여 통신한다.
서술 16. 본 발명의 실시 예는 서술 11에 따른 코딩 메커니즘을 포함하되, 코딩 메커니즘은 메모리 컨트롤러 내에서 구현된다.
서술 17. 본 발명의 실시 예는 서술 11에 따른 코딩 메커니즘을 포함하되,
코딩 메커니즘은 보충 개수의 비트들을 이용하여 데이터 및 적어도 제 3 코드에 대한 제 3 결과를 생성하는 제 3 디코더를 더 포함하고, 그리고
스위치는 모드 레지스터에 응답하여 제 2 디코더를 사용하거나, 제 3 디코더를 사용하거나, 또는 제 2 디코더와 제 3 디코더 모두 사용하지 않는 것 중 선택하도록 작동한다.
서술 18. 본 발명의 실시 예는 서술 11에 따른 코딩 메커니즘을 포함하되,
코딩 메커니즘은 제 2 보충 개수의 비트들을 이용하여 데이터 및 적어도 제 3 코드에 대한 제 3 결과를 생성하는 제 3 디코더를 더 포함하고, 그리고
스위치는 모드 레지스터에 응답하여 제 2 디코더를 사용하거나, 제 2 디코더 및 제 3 디코더 모두를 사용하거나, 또는 제 2 디코더와 제 3 디코더 모두 사용하지 않는 것 중 선택하도록 작동한다.
서술 19. 본 발명의 실시 예는 서술 11에 따른 코딩 메커니즘을 포함하되, 모드 레지스터는 스위치가 제 2 디코더를 사용하는지 여부를 나타내는 값을 저장하도록 작동한다.
서술 20. 본 발명의 실시 예는 서술 11에 따른 코딩 메커니즘을 포함하되, 모드 레지스터는 스위치가 보충 개수의 비트들이 0보다 큰 지 여부에 응답하는 제 2 디코더를 사용하는지 여부를 나타내는 값을 저장하도록 작동한다.
서술 21. 본 발명의 실시 예는 서술 11에 따른 코딩 메커니즘을 포함하되, 제 1 디코더 및 제 2 디코더는 부분적인 하드웨어 구현을 공유한다.
서술 22. 본 발명의 실시 예는 방법을 포함한다. 방법은:
메모리 트랜잭션에 대한 데이터를 수신하는 단계;
메모리 트랜잭션 동안, 기본 개수의 비트들 및 보충 개수의 비트들을 포함하는 에러 관리가 가능한 비트들의 개수를 판별하는 단계;
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계; 및
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계를 포함한다.
서술 23. 본 발명의 실시 예는 서술 22에 따른 방법을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 기본 개수의 비트들에 기초하여 데이터에 대한 제 1 인코딩을 수행하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 인코딩을 수행하는 단계를 포함한다.
서술 24. 본 발명의 실시 예는 서술 23에 따른 방법을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 인코딩을 수행하는 단계는, 제 1 코드를 생성하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 인코딩을 수행하는 단계는, 제 2 코드를 생성하는 단계를 포함한다.
서술 25. 본 발명의 실시 예는 서술 24에 따른 방법을 포함하되, 제 2 코드는 제 1 코드와 함께 제 1 코드 단독보다 더 강한 에러 관리 코딩을 제공한다.
서술 26. 본 발명의 실시 예는 서술 22에 따른 방법을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 기본 개수의 비트들에 기초하여 데이터에 대해 제 1 디코딩을 수행하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 디코딩을 수행하는 단계를 포함한다.
서술 27. 본 발명의 실시 예는 서술 26에 따른 방법을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대해 제 1 디코딩을 수행하는 단계는, 제 1 결과를 생성하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 디코딩을 수행하는 단계는, 제 2 결과를 생성하는 단계를 포함한다.
서술 28. 본 발명의 실시 예는 서술 26에 따른 방법을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대해 제 1 디코딩을 수행하는 단계는, 기본 개수의 비트들에 기초하여 데이터 및 제 1 코드에 대응하는 제 1 디코딩을 수행하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 디코딩을 수행하는 단계는, 데이터 및 적어도 제 2 코드에 대응하는 제 2 디코딩을 수행하는 단계를 포함한다.
서술 29. 본 발명의 실시 예는 서술 28에 따른 방법을 포함하되, 데이터 및 적어도 제 2 코드에 대응하는 제 2 디코딩을 수행하는 단계는, 데이터, 제 1 코드, 및 제 2 코드에 대응하여 제 2 디코딩을 수행하는 단계를 포함한다.
서술 30. 본 발명의 실시 예는 서술 28에 따른 방법을 포함하되, 메모리 트랜잭션에 대한 데이터를 수신하는 단계는, 제 1 코드 및 적어도 제 2 코드를 수신하는 단계를 포함한다.
서술 31. 본 발명의 실시 예는 서술 22에 따른 방법을 포함하되, 방법은 DIMM(Dual In-Line Memory Module) 및 메모리 컨트롤러 중 하나에 의해 수행된다.
서술 32. 본 발명의 실시 예는 서술 31에 따른 방법을 포함하되, DIMM은 NVDIMM(Non-Volatile Dual In-Line Memory Module)을 포함한다.
서술 33. 본 발명의 실시 예는 서술 22에 따른 방법을 포함하되, 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 보충 개수의 비트들이 0보다 클 경우에만 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계를 포함한다.
서술 34. 본 발명의 실시 예는 서술 22에 따른 방법을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 데이터 내 에러 검출을 지원하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 데이터 내 에러 정정을 지원하는 단계를 포함한다.
서술 35. 본 발명의 실시 예는 서술 22에 따른 방법을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 데이터 내 약한 에러 검출을 지원하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 데이터 내 강한 에러 검출을 지원하는 단계를 포함한다.
서술 36. 본 발명의 실시 예는 서술 22에 따른 방법을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 데이터 내 약한 에러 정정을 지원하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 데이터 내 강한 에러 정정을 지원하는 단계를 포함한다.
서술 37. 본 발명의 실시 예는 서술 22에 따른 방법을 포함하되, 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 적어도 제 2 에러 관리 코딩 및 제 3 에러 관리 코딩으로부터 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계를 포함한다.
서술 38. 본 발명의 실시 예는 서술 37에 따른 방법을 포함하되, 적어도 제 2 에러 관리 코딩 및 제 3 에러 관리 코딩으로부터 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 제 2 보충 개수의 비트들에 기초하여 데이터에 대한 제 3 에러 관리 코딩을 수행하는 단계를 포함한다.
서술 39. 본 발명의 실시 예는 서술 38에 따른 방법을 포함하되, 제 2 보충 개수의 비트들에 기초하여 데이터에 대한 제 3 에러 관리 코딩을 수행하는 단계는 보충 개수의 비트들에 기초하여 데이터에 대한 제 3 에러 관리 코딩을 수행하는 단계를 포함한다.
서술 40. 본 발명의 실시 예는 머신에 의해 수행되는 저장된 명령어들을 포함하는 비일시적 스토리지 매체를 포함하는 물건(article, 혹은 장치)을 포함한다. 물건은:
메모리 트랜잭션에 대한 데이터를 수신하는 단계;
메모리 트랜잭션 동안, 기본 개수의 비트들 및 보충 개수의 비트들을 포함하는 에러 관리가 가능한 비트들의 개수를 판별하는 단계;
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계; 및
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계를 야기한다.
서술 41. 본 발명의 실시 예는 서술 22에 따른 방법을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 기본 개수의 비트들에 기초하여 데이터에 대한 제 1 인코딩을 수행하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 인코딩을 수행하는 단계를 포함한다.
서술 42. 본 발명의 실시 예는 서술 41에 따른 물건을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 인코딩을 수행하는 단계는, 제 1 코드를 생성하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 인코딩을 수행하는 단계는, 제 2 코드를 생성하는 단계를 포함한다.
서술 43. 본 발명의 실시 예는 서술 42에 따른 물건을 포함하되, 제 2 코드는 제 1 코드와 함께 제 1 코드 단독보다 더 강한 에러 관리 코딩을 제공한다.
서술 44. 본 발명의 실시 예는 서술 40에 따른 물건을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 기본 개수의 비트들에 기초하여 데이터에 대해 제 1 디코딩을 수행하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 디코딩을 수행하는 단계를 포함한다.
서술 45. 본 발명의 실시 예는 서술 44에 따른 물건을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대해 제 1 디코딩을 수행하는 단계는, 제 1 결과를 생성하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 디코딩을 수행하는 단계는, 제 2 결과를 생성하는 단계를 포함한다.
서술 46. 본 발명의 실시 예는 서술 44에 따른 물건을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대해 제 1 디코딩을 수행하는 단계는, 기본 개수의 비트들에 기초하여 데이터 및 제 1 코드에 대응하는 제 1 디코딩을 수행하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 디코딩을 수행하는 단계는, 데이터 및 적어도 제 2 코드에 대응하는 제 2 디코딩을 수행하는 단계를 포함한다.
서술 47. 본 발명의 실시 예는 서술 46에 따른 물건을 포함하되, 데이터 및 적어도 제 2 코드에 대응하는 제 2 디코딩을 수행하는 단계는, 데이터, 제 1 코드, 및 제 2 코드에 대응하여 제 2 디코딩을 수행하는 단계를 포함한다.
서술 48. 본 발명의 실시 예는 서술 46에 따른 물건을 포함하되, 메모리 트랜잭션에 대한 데이터를 수신하는 단계는, 제 1 코드 및 적어도 제 2 코드를 수신하는 단계를 포함한다.
서술 49. 본 발명의 실시 예는 서술 40에 따른 물건을 포함하되, 방법은 DIMM(Dual In-Line Memory Module) 및 메모리 컨트롤러 중 하나에 의해 수행된다.
서술 50 본 발명의 실시 예는 서술 49에 따른 물건을 포함하되, DIMM은 NVDIMM(Non-Volatile Dual In-Line Memory Module)을 포함한다.
서술 51. 본 발명의 실시 예는 서술 40에 따른 물건을 포함하되, 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 보충 개수의 비트들이 0보다 클 경우에만 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계를 포함한다.
서술 52. 본 발명의 실시 예는 서술 40에 따른 물건을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 데이터 내 에러 검출을 지원하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 데이터 내 에러 정정을 지원하는 단계를 포함한다.
서술 53. 본 발명의 실시 예는 서술 40에 따른 물건을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 데이터 내 약한 에러 검출을 지원하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 데이터 내 강한 에러 검출을 지원하는 단계를 포함한다.
서술 54. 본 발명의 실시 예는 서술 40에 따른 물건을 포함하되,
기본 개수의 비트들에 기초하여 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 데이터 내 약한 에러 정정을 지원하는 단계를 포함하고, 그리고
보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 데이터 내 강한 에러 정정을 지원하는 단계를 포함한다.
서술 55. 본 발명의 실시 예는 서술 40에 따른 물건을 포함하되, 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 적어도 제 2 에러 관리 코딩 및 제 3 에러 관리 코딩으로부터 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계를 포함한다.
서술 56. 본 발명의 실시 예는 서술 55에 따른 물건을 포함하되, 적어도 제 2 에러 관리 코딩 및 제 3 에러 관리 코딩으로부터 보충 개수의 비트들에 기초하여 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 제 2 보충 개수의 비트들에 기초하여 데이터에 대한 제 3 에러 관리 코딩을 수행하는 단계를 포함한다.
서술 57. 본 발명의 실시 예는 서술 56에 따른 물건을 포함하되, 제 2 보충 개수의 비트들에 기초하여 데이터에 대한 제 3 에러 관리 코딩을 수행하는 단계는 보충 개수의 비트들에 기초하여 데이터에 대한 제 3 에러 관리 코딩을 수행하는 단계를 포함한다.
결론적으로, 본 명세서에 설명된 실시 예들에 대한 폭넓고 다양한 변경들의 관점에서, 이 상세한 설명 및 첨부된 자료는 단지 예시적인 것으로 의도되며, 본 발명의 범위를 한정하는 것으로서 간주되어서는 안된다. 그러므로, 본 발명으로서 청구되는 것은 이하의 청구항들 및 그 균등물의 범위 및 사상 내에 있을 수 있는 모든 이러한 변형들이다.
105: 머신;
110: 프로세서;
115: 메모리;
120: 스토리지 장치;
125: 메모리 컨트롤러;
130: 장치 드라이버;

Claims (20)

  1. 데이터에 대한 기본 개수의 비트들을 포함하는 제 1 코드를 생성하는 제 1 인코더;
    상기 데이터에 대한 보충 개수의 비트들을 포함하는 제 2 코드를 생성하는 제 2 인코더;
    모드 레지스터에 대한 스토리지; 및
    상기 제 2 인코더가 사용되는지 여부를 제어하도록 상기 모드 레지스터에 응답하는 스위치를 포함하되,
    상기 제 1 인코더는 상기 제 1 코드를 생성하는데 항상 사용되고 그리고 상기 제 2 인코더는 상기 제 2 코드를 생성하는데 선택적으로 사용되고, 그리고
    상기 제 2 코드는 상기 제 1 코드와 함께 상기 제 1 코드 단독보다 더 강한 인코딩을 제공하는 하드웨어로 구현되는 코딩 메커니즘.
  2. 제 1 항에 있어서,
    상기 모드 레지스터는 상기 스위치가 상기 제 2 인코더를 사용하는지 여부를 나타내는 값을 저장하도록 작동하는 코딩 메커니즘.
  3. 제 2 항에 있어서,
    상기 모드 레지스터는 상기 스위치가 상기 보충 개수의 비트들이 0보다 큰 지 여부에 응답하는 상기 제 2 인코더를 사용하는지 여부를 나타내는 상기 값을 저장하도록 작동하는 코딩 메커니즘.
  4. 제 1 항에 있어서,
    상기 제 1 인코더 및 상기 제 2 인코더는 부분적인 하드웨어 구현을 공유하는 코딩 메커니즘.
  5. 데이터 및 기본 개수의 비트들을 포함하는 제 1 코드에 대한 제 1 결과를 생성하는 제 1 디코더;
    상기 데이터 및 보충 개수의 비트들을 포함하는 적어도 제 2 코드에 대한 제 2 결과를 생성하는 제 2 디코더;
    모드 레지스터에 대한 스토리지; 및
    상기 제 2 디코더가 사용되는지 여부를 제어하도록 상기 모드 레지스터에 응답하는 스위치를 포함하되,
    상기 제 1 디코더는 상기 제 1 결과를 생성하는데 항상 사용되고 그리고 상기 제 2 디코더는 상기 제 2 결과를 생성하는데 선택적으로 사용되고, 그리고
    상기 제 2 결과는 상기 제 1 결과와 함께 상기 제 1 결과 단독보다 더 강한 디코딩을 제공하는 하드웨어로 구현되는 코딩 메커니즘.
  6. 제 5 항에 있어서,
    상기 제 2 디코더는 상기 데이터, 상기 제 1 코드, 및 상기 제 2 코드에 대응하는 제 2 결과를 생성하도록 작동하는 코딩 메커니즘.
  7. 제 5 항에 있어서,
    상기 모드 레지스터는 상기 스위치가 상기 제 2 디코더를 사용하는지 여부를 나타내는 값을 저장하도록 작동하는 코딩 메커니즘.
  8. 제 7 항에 있어서,
    상기 모드 레지스터는 상기 스위치가 상기 보충 개수의 비트들이 0보다 큰 지 여부에 응답하는 상기 제 2 디코더를 사용하는지 여부를 나타내는 상기 값을 저장하도록 작동하는 코딩 메커니즘.
  9. 제 5 항에 있어서,
    상기 제 1 디코더 및 상기 제 2 디코더는 부분적인 하드웨어 구현을 공유하는 코딩 메커니즘.
  10. 메모리 트랜잭션(transaction)에 대한 데이터를 수신하는 단계;
    상기 메모리 트랜잭션 동안, 기본 개수의 비트들 및 보충 개수의 비트들을 포함하는 에러 관리가 가능한 비트들의 개수를 판별하는 단계;
    상기 기본 개수의 비트들에 기초하여 상기 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계; 및
    상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계를 포함하는 방법.
  11. 제 10 항에 있어서,
    상기 기본 개수의 비트들에 기초하여 상기 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 상기 기본 개수의 비트들에 기초하여 상기 데이터에 대한 제 1 인코딩을 수행하는 단계를 포함하고, 그리고
    상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 제 2 인코딩을 수행하는 단계를 포함하는 방법.
  12. 제 11 항에 있어서,
    상기 기본 개수의 비트들에 기초하여 상기 데이터에 대한 제 1 인코딩을 수행하는 단계는, 제 1 코드를 생성하는 단계를 포함하고, 그리고
    상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 제 2 인코딩을 수행하는 단계는, 제 2 코드를 생성하는 단계를 포함하는 방법.
  13. 제 12 항에 있어서,
    상기 제 2 코드는 상기 제 1 코드와 함께 상기 제 1 코드 단독보다 더 강한 에러 관리를 제공하는 방법.
  14. 제 10 항에 있어서,
    상기 기본 개수의 비트들에 기초하여 상기 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 상기 기본 개수의 비트들에 기초하여 상기 데이터에 대한 제 1 디코딩을 수행하는 단계를 포함하고, 그리고
    상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 제 2 디코딩을 수행하는 단계를 포함하는 방법.
  15. 제 14 항에 있어서,
    상기 기본 개수의 비트들에 기초하여 상기 데이터에 대한 제 1 디코딩을 수행하는 단계는, 상기 기본 개수의 비트들에 기초하여 상기 데이터 및 제 1 코드에 대응하는 제 1 디코딩을 수행하는 단계를 포함하고, 그리고
    상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 제 2 디코딩을 수행하는 단계는, 상기 데이터 및 적어도 제 2 코드에 대응하는 제 2 디코딩을 수행하는 단계를 포함하는 방법.
  16. 제 15 항에 있어서,
    상기 데이터 및 적어도 제 2 코드에 대응하는 제 2 디코딩을 수행하는 단계는 상기 데이터, 상기 제 1 코드, 및 상기 제 2 코드에 대응하는 제 2 디코딩을 수행하는 단계를 포함하는 방법.
  17. 제 10 항에 있어서,
    상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 상기 보충 개수의 비트들이 0보다 클 경우에만 상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 상기 제 2 에러 관리 코딩을 수행하는 단계를 포함하는 방법.
  18. 제 10 항에 있어서,
    상기 기본 개수의 비트들에 기초하여 상기 데이터에 대한 제 1 에러 관리 코딩을 수행하는 단계는, 상기 데이터 내 에러 검출을 지원하는 단계를 포함하고, 그리고
    상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 상기 데이터 내 에러 정정을 지원하는 단계를 포함하는 방법.
  19. 제 10 항에 있어서,
    상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 제 2 에러 관리 코딩을 수행하는 단계는, 적어도 상기 제 2 에러 관리 코딩 및 제 3 에러 관리 코딩으로부터 상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 상기 제 2 에러 관리 코딩을 수행하는 단계를 포함하는 방법.
  20. 제 19 항에 있어서,
    적어도 상기 제 2 에러 관리 코딩 및 제 3 에러 관리 코딩으로부터 상기 보충 개수의 비트들에 기초하여 상기 데이터에 대한 상기 제 2 에러 관리 코딩을 수행하는 단계는, 제 2 보충 개수의 비트들에 기초하여 상기 데이터에 대한 상기 제3 에러 관리 코딩을 수행하는 단계를 포함하는 방법.
KR1020180003472A 2017-05-08 2018-01-10 Ddr 채널을 통해 dimm을 위한 모핑 가능한 ecc 인코더 및 디코더를 포함하는 코딩 메커니즘 및 그 방법 KR102421048B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762503317P 2017-05-08 2017-05-08
US62/503,317 2017-05-08
US15/675,679 2017-08-11
US15/675,679 US10552256B2 (en) 2017-05-08 2017-08-11 Morphable ECC encoder/decoder for NVDIMM over DDR channel

Publications (2)

Publication Number Publication Date
KR20180123426A true KR20180123426A (ko) 2018-11-16
KR102421048B1 KR102421048B1 (ko) 2022-07-14

Family

ID=64014811

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180003472A KR102421048B1 (ko) 2017-05-08 2018-01-10 Ddr 채널을 통해 dimm을 위한 모핑 가능한 ecc 인코더 및 디코더를 포함하는 코딩 메커니즘 및 그 방법

Country Status (5)

Country Link
US (1) US10552256B2 (ko)
JP (1) JP7231989B2 (ko)
KR (1) KR102421048B1 (ko)
CN (1) CN108874577B (ko)
TW (1) TWI740009B (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008192054A (ja) * 2007-02-07 2008-08-21 Megachips Lsi Solutions Inc 半導体メモリシステム
KR20090099757A (ko) * 2008-03-18 2009-09-23 삼성전자주식회사 메모리 장치 및 인코딩/디코딩 방법
US20140105202A1 (en) * 2004-02-13 2014-04-17 Broadcom Corporation Encoding system and method for a transmitter in wireless communications
US20170077955A1 (en) * 2015-09-11 2017-03-16 Micron Technology, Inc. Multi channel memory with flexible code-length ecc

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0011353B1 (en) * 1978-11-06 1982-06-16 British Broadcasting Corporation Cyclic redundancy data check encoding method and apparatus
CN1220387C (zh) * 2000-07-06 2005-09-21 三星电子株式会社 视频编解码器系统、数据处理方法、编解码控制方法
KR100811184B1 (ko) * 2005-10-21 2008-03-07 삼성전자주식회사 아우터 인코더 및 그 방법
US8055979B2 (en) * 2006-01-20 2011-11-08 Marvell World Trade Ltd. Flash memory with coding and signal processing
US8024637B2 (en) * 2007-04-02 2011-09-20 Broadcom Corporation Super block error correction code (ECC) adaptable to communication systems including hard disk drives (HDDs) and other memory storage devices
US8429498B1 (en) * 2009-03-25 2013-04-23 Apple Inc. Dual ECC decoder
US8560918B1 (en) * 2009-04-21 2013-10-15 Marvell International Ltd. Method and apparatus for dynamically selecting an error correction code to be applied to data in a communication system
WO2011159805A2 (en) 2010-06-15 2011-12-22 Fusion-Io, Inc. Apparatus, system, and method for providing error correction
US8880977B2 (en) * 2011-07-22 2014-11-04 Sandisk Technologies Inc. Systems and methods of storing data
US9342453B2 (en) 2011-09-30 2016-05-17 Intel Corporation Memory channel that supports near memory and far memory access
US9294132B1 (en) * 2011-11-21 2016-03-22 Proton Digital Systems, Inc. Dual-stage data decoding for non-volatile memories
US9183085B1 (en) * 2012-05-22 2015-11-10 Pmc-Sierra, Inc. Systems and methods for adaptively selecting from among a plurality of error correction coding schemes in a flash drive for robustness and low latency
TWI594254B (zh) * 2012-07-17 2017-08-01 慧榮科技股份有限公司 讀取快閃記憶體中區塊之資料的方法及相關的記憶裝置
KR102068030B1 (ko) * 2012-12-11 2020-01-20 삼성전자 주식회사 메모리 컨트롤러 및 그 동작방법
US9344117B2 (en) * 2013-03-15 2016-05-17 Mellanox Technologies, Ltd. Methods and systems for error-correction decoding
US9201728B2 (en) * 2013-09-12 2015-12-01 Seagate Technology Llc Memory device with variable code rate
US9621188B2 (en) * 2014-03-17 2017-04-11 Samsung Electronics Co., Ltd. Soft and hard decision message-passing decoding
US10116336B2 (en) 2014-06-13 2018-10-30 Sandisk Technologies Llc Error correcting code adjustment for a data storage device
US9407294B2 (en) 2014-07-07 2016-08-02 Kabushi Kaisha Toshiba. Non-volatile memory controller with error correction (ECC) tuning via error statistics collection
JP6438763B2 (ja) 2014-12-25 2018-12-19 株式会社メガチップス エラー訂正装置
JP6294251B2 (ja) 2015-02-26 2018-03-14 ファナック株式会社 誤り訂正機能による寿命予測を有する制御装置
US9691505B2 (en) 2015-03-27 2017-06-27 Intel Corporation Dynamic application of error correction code (ECC) based on error type
US20170288705A1 (en) * 2016-04-05 2017-10-05 Alibaba Group Holding Limited Shared memory with enhanced error correction

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140105202A1 (en) * 2004-02-13 2014-04-17 Broadcom Corporation Encoding system and method for a transmitter in wireless communications
JP2008192054A (ja) * 2007-02-07 2008-08-21 Megachips Lsi Solutions Inc 半導体メモリシステム
KR20090099757A (ko) * 2008-03-18 2009-09-23 삼성전자주식회사 메모리 장치 및 인코딩/디코딩 방법
US20170077955A1 (en) * 2015-09-11 2017-03-16 Micron Technology, Inc. Multi channel memory with flexible code-length ecc

Also Published As

Publication number Publication date
KR102421048B1 (ko) 2022-07-14
TW201907299A (zh) 2019-02-16
JP7231989B2 (ja) 2023-03-02
TWI740009B (zh) 2021-09-21
JP2018190416A (ja) 2018-11-29
US10552256B2 (en) 2020-02-04
US20180322007A1 (en) 2018-11-08
CN108874577B (zh) 2023-11-03
CN108874577A (zh) 2018-11-23

Similar Documents

Publication Publication Date Title
US11461017B2 (en) Systems and methods for improving efficiencies of a memory system
JP6983313B2 (ja) 不揮発性メモリの書込みクレジットの管理
CN110998536B (zh) 存储器系统中的动态链路差错保护
EP2297641A2 (en) Efficient in-band reliability with separate cyclic redundancy code frames
JP2021504863A (ja) メモリアドレス指定方法と関連するコントローラ、メモリデバイス、及びホスト
KR20170012675A (ko) 컴퓨팅 시스템 및 그것의 데이터 전송 방법
KR102421048B1 (ko) Ddr 채널을 통해 dimm을 위한 모핑 가능한 ecc 인코더 및 디코더를 포함하는 코딩 메커니즘 및 그 방법
KR20180102268A (ko) 메모리 모듈 및 이를 포함하는 메모리 시스템
KR20220032816A (ko) 메모리 시스템에서 데이터 통신을 보정하는 장치 및 방법
EP4035040A1 (en) Device intrusion detection via variable code comparison
US11256565B2 (en) Transaction metadata
KR20190129139A (ko) 거래 식별
US20240145025A1 (en) Memory controller and memory system including the same
US20230280930A1 (en) Memory controller and memory system for executing error correction operation
KR20160062418A (ko) 메모리 제어 장치 및 방법

Legal Events

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