KR20220110055A - 저-복잡도 커버리지-기반 압축 - Google Patents

저-복잡도 커버리지-기반 압축 Download PDF

Info

Publication number
KR20220110055A
KR20220110055A KR1020210171799A KR20210171799A KR20220110055A KR 20220110055 A KR20220110055 A KR 20220110055A KR 1020210171799 A KR1020210171799 A KR 1020210171799A KR 20210171799 A KR20210171799 A KR 20210171799A KR 20220110055 A KR20220110055 A KR 20220110055A
Authority
KR
South Korea
Prior art keywords
data
block
base value
value
ecc
Prior art date
Application number
KR1020210171799A
Other languages
English (en)
Inventor
알라 알라멜딘
아미르 알리 라드자이
제이슨 반 다이켄
아디티아 나가라자
조슈아 언더다운
제임스 그린스카이
웨이 우
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20220110055A publication Critical patent/KR20220110055A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0661Format or protocol conversion arrangements
    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Memory System (AREA)

Abstract

전자 장치의 실시예는 기판, 및 이러한 기판에 연결되는 로직을 포함할 수 있고, 이러한 로직은 데이터의 블록을 압축하기 위한 베이스 값을 결정하고- 이러한 데이터의 블록은 제1 수의 데이터 워드들로 이루어짐 -, 상기 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 상기 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하고- 상기 제2 수의 데이터 워드들은 상기 제1 수의 데이터 워드들보다 적어도 2개 더 적음 -, 상기 압축된 데이터와 함께 상기 데이터의 블록과 연관된 메타데이터를 상기 데이터의 블록에 저장한다. 다른 실시예들이 개시되고 청구된다.

Description

저-복잡도 커버리지-기반 압축{LOW-COMPLEXITY COVERAGE-BASED COMPRESSION}
ECC(error-correcting code) 메모리는 많은 타입들의 내부 데이터 손상을 검출하고 정정하는 타입의 컴퓨터 데이터 스토리지이다. 전형적으로, ECC 메모리는 하나의 또는 다수의 비트의 에러에 대해 면역이 있는 메모리 시스템을 유지한다. ECC 메모리에서, 각각의 워드로부터 판독되는 데이터는, 심지어 ECC 메모리에 실제로 저장된 비트들 중 하나 이상이 잘못된 상태로 플립되더라도, 그것에 기입된 데이터와 동일하다. 신드롬 테이블들은 비트 에러를 식별하는 그리고 다음으로 비트 에러를 정정하는 수학적 방식이고, 신드롬 공간이 이러한 신드롬-기반 디코딩에서 사용될 수 있다.
데이터 손상을 견딜 수 없는 애플리케이션들에 대한 신뢰성을 제공하기 위해 ECC 메모리가 사용된다. ECC 정보가 데이터와 함께 기입되고 판독되도록 데이터 레인 뿐만 아니라 추가적인 ECC 스토리지를 제공하는 DIMM(dual in-line memory module) 상의 추가 디바이스로 ECC 메모리가 이루어질 수 있다. 예를 들어, x8 디바이스들을 갖는 DDR4 상에서, 72 비트 채널을 형성하기 위해 9개의 이러한 디바이스로 ECC DIMM이 이루어질 수 있고, 여기서 64 비트는 데이터를 전송하기 위해 사용되고 8 비트는 ECC 데이터 전송을 위해 사용된다. 데이터 전송의 64 비트마다 8 비트로 SECDED(Single Error Correction and Double Error Detection)로 데이터가 보호될 수 있다. ECC DIMM들은 전형적으로 정규 DIMM들보다 더 비싸다.
BDI(Base-Delta-Immediate) 압축은 온-칩 캐시들에서 데이터를 압축하기 위한 기술을 지칭한다. BDI는 조합된 크기가 원래의 캐시 라인보다 더 작은 차이들의 어레이 및 베이스 값을 사용하는 캐시 라인을 표현한다. 캐시 라인이 이러한 베이스+델타 값들을 작은 값들과 섞어 쓰는 경우, BDI는 이러한 즉치 값들을 인코딩에 효율적으로 포함시킨다.
FECC(frugal ECC)는, ECC 정보를 저장하기 위해 절약된 공간을 사용하여, 캐시-블록 입도로 메인 메모리를 압축한다. FECC는 압축 커버리지에 대해 압축 비율을 트레이드오프하기 위해 커버리지-지향 압축을 이용한다. FECC는 동종-타입의 데이터에 대한 BDI 압축, 부동-소수점 데이터에 대한 지수 압축, 및 이종-타입의 데이터에 대한 빈번한 워드 패턴 압축을 이용한다.
본 명세서에 설명되는 재료는 첨부 도면들에서 제한으로서가 아니라 예로서 예시된다. 예시의 단순성 및 명료성을 위해, 도면들에 예시되는 엘리먼트들이 반드시 비례에 맞춰 그려지는 것은 아니다. 예를 들어, 일부 엘리먼트들의 치수들은 명료성을 위해 다른 엘리먼트들에 상대적으로 과장될 수 있다. 추가로, 적절한 것으로 고려될 때, 대응하는 또는 유사한 엘리먼트들을 표시하기 위해 도면들 중에 참조 라벨들이 반복되어 있다. 도면들에서:
도 1은 실시예에 따른 전자 메모리 시스템의 예의 블록도이다.
도 2는 실시예에 따른 전자 장치의 예의 블록도이다.
도 3은 실시예에 따른 메모리를 압축하는 방법의 예의 흐름도이다.
도 4는 실시예에 따른 프로세스 흐름의 예의 블록도이다.
도 5는 실시예에 따른 압축된 블록의 예의 블록도이다.
도 6은 실시예에 따른 압축된 블록의 다른 예의 블록도이다.
도 7은 실시예에 따른 메모리 서브시스템에서의 대역내 ECC 압축 모듈의 배치를 도시하는 블록도를 예시한다.
도 8은 실시예에 따른 메모리 공간이 시스템 가시 메모리 및 ECC 신드롬 공간으로 어떻게 분할되는지를 도시하는 블록도를 예시한다.
도 9는 실시예에 따른 최근 신드롬 버퍼를 갖는 대역내 ECC 압축 모듈을 도시하는 블록도를 예시한다.
도 10은 실시예에 따른 전자 메모리 시스템의 다른 예의 블록도이다.
첨부 도면들을 참조하여 하나 이상의 실시예 또는 구현이 이제 설명된다. 구체적인 구성들 및 배열들이 논의되지만, 이러한 것은 단지 예시적인 목적들을 위해 행해진다는 점이 이해되어야 한다. 관련 분야에서의 기술자들은 본 설명의 사상 및 범위로부터 벗어나지 않고 다른 구성들 및 배열들이 이용될 수 있다는 점을 인식할 것이다. 본 명세서에 설명되는 기법들 및/또는 배열들이 본 명세서에 설명되는 것 이외의 다양한 다른 시스템들 및 애플리케이션들에서 또한 이용될 수 있다는 점이 관련 분야에서의 기술자들에게 명백할 것이다.
다음의 설명은, 예를 들어, SoC(system-on-a-chip) 아키텍처들과 같은 아키텍처들에서 나타날 수 있는 다양한 구현들을 제시하지만, 본 명세서에 설명되는 기법들 및/또는 배열들의 구현이 특정한 아키텍처들 및/또는 컴퓨팅 시스템들에 제한되는 것은 아니고, 유사한 목적들을 위한 임의의 아키텍처 및/또는 컴퓨팅 시스템에 의해 구현될 수 있다. 예를 들어, 다수의 IC(integrated circuit) 칩들 및/또는 패키지들, 및/또는 셋 톱 박스들, 스마트폰들 등과 같은 CE(consumer electronic) 디바이스들 및/또는 다양한 컴퓨팅 디바이스들을 이용하는, 예를 들어, 다양한 아키텍처들이 본 명세서에 설명되는 기법들 및/또는 배열들을 구현할 수 있다. 추가로, 다음의 설명은 로직 구현들, 시스템 컴포넌트들의 상호관계들 및 타입들, 로직 파티셔닝/통합 선택들 등과 같은 다수의 구체적인 상세사항들을 제시할 수 있지만, 청구 대상은 이러한 구체적인 상세사항들 없이 실시될 수 있다. 다른 경우들에서, 예를 들어, 제어 구조들 및 전체 소프트웨어 명령어 시퀀스들과 같은 일부 자료는, 본 명세서에 개시되는 자료를 불명료하지 않게 하기 위해서 상세히 도시되지 않을 수 있다.
본 명세서에 개시되는 자료는 하드웨어, FPGA(Field Programmable Gate Array), 펌웨어, 드라이버, 소프트웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 본 명세서에 개시되는 자료는, Moore Machine, Mealy Machine, 및/또는 하나 이상의 프로세서에 의해 판독되고 실행될 수 있는, 머신-판독가능 매체 상에 저장되는 명령어들로서 또한 구현될 수 있다. 머신-판독가능 매체는 정보를 머신(예를 들어, 컴퓨팅 디바이스)에 의해 판독가능한 형태로 저장 또는 송신하기 위한 임의의 매체 및/또는 메커니즘을 포함할 수 있다. 예를 들어, 머신-판독가능 매체는 ROM(read only memory); RAM(random access memory); DRAM(dynamic random-access memory), 자기 디스크 스토리지 매체; 광학 스토리지 매체; 플래시 메모리 디바이스들; 상변화 메모리, 큐비트 고체-상태 양자 메모리, 전기, 광학, 음향 또는 다른 형태의 전파 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들 등) 등을 포함할 수 있다.
본 명세서에서 "하나의 구현(one implementation)", "구현(implementation)", "예시적인 구현(example implementation)" 등에 대한 참조들은, 설명되는 구현이 특정한 특징, 구조, 또는 특성을 포함할 수 있지만, 모든 실시예가 반드시 이러한 특정한 특징, 구조, 또는 특성을 포함하지는 않을 수 있다는 점을 표시한다. 또한, 이러한 구문들이 반드시 동일한 구현을 지칭하는 것은 아니다. 추가로, 특정한 특징, 구조 또는 특성이 실시예에 관련하여 설명될 때, 본 명세서에 명시적으로 설명되든지 또는 그렇지 않든지 간에 다른 구현들과 관련하여 이러한 특징, 구조, 또는 특성을 가져오는 것이 해당 분야에서의 기술자의 지식 내에 있음이 제기된다.
본 명세서에 설명되는 다양한 실시예들은 메모리 컴포넌트 및/또는 메모리 컴포넌트로의 인터페이스를 포함할 수 있다. 이러한 메모리 컴포넌트들은 휘발성 메모리 및/또는 NV(nonvolatile) 메모리를 포함할 수 있다. 휘발성 메모리는 매체에 의해 저장되는 데이터의 상태를 유지하기 위해 전력을 요구하는 스토리지 매체일 수 있다. 휘발성 메모리의 비-제한적인 예들은, DRAM(dynamic RAM) 또는 SRAM(static RAM)과 같은, 다양한 타입들의 RAM(random access memory)을 포함할 수 있다. 메모리 모듈에서 사용될 수 있는 하나의 특정 타입의 DRAM은 SDRAM(synchronous dynamic RAM)이다. 특정 실시예들에서, 메모리 컴포넌트의 DRAM은, DDR(double data rate) SDRAM에 대한 JESD79F, DDR2 SDRAM에 대한 JESD79-2F, DDR3 SDRAM에 대한 JESD79-3F, DDR4 SDRAM에 대한 JESD79-4A, LPDDR(Low Power DDR)에 대한 JESD209, LPDDR2에 대한 JESD209-2, LPDDR3에 대한 JESD209-3, 및 LPDDR4에 대한 JESD209-4(이러한 표준들은 jedec.org에서 이용가능함)와 같은, JEDEC(Joint Electron Device Engineering Council)에 의해 공표된 표준을 준수할 수 있다. 이러한 표준들(및 유사한 표준들)은 DDR-기반 표준들이라고 지칭될 수 있고, 이러한 표준들을 구현하는 스토리지 디바이스의 통신 인터페이스들이 DDR-기반 인터페이스들이라고 지칭될 수 있다.
NVM(NV memory)은 매체에 의해 저장되는 데이터의 상태를 유지하기 위해 전력을 요구하지 않는 스토리지 매체일 수 있다. 하나의 실시예에서, 메모리 디바이스는, NAND 또는 NOR 기술들에 기초하는 것들과 같은, 블록 어드레싱가능 메모리 디바이스를 포함할 수 있다. 메모리 디바이스는, 3D(three dimensional) 크로스포인트 메모리 디바이스, 또는 다른 바이트 어드레싱가능 라이트-인-플레이스(write-in-place) 비휘발성 메모리 디바이스들과 같은, 미래 세대 비휘발성 디바이스를 또한 포함할 수 있다. 하나의 실시예에서, 메모리 디바이스는 칼코게나이드 글라스(chalcogenide glass), 다중-임계 레벨 NAND 플래시 메모리, NOR 플래시 메모리, 단일 또는 다중-레벨 PCM(Phase Change Memory), 저항성 메모리, 나노와이어 메모리, FeTRAM(ferroelectric transistor RAM), 반-강유전성 메모리, 멤리스터 기술을 포함하는 MRAM(magnetoresistive RAM) 메모리, 금속 산화물 베이스, 산소 공공 베이스 및 CB-RAM(conductive bridge RAM)을 포함하는 저항성 메모리, 또는 STT(spin transfer torque)-MRAM, 스핀트로닉 자기 접합 메모리 기반 디바이스, MTJ(magnetic tunneling junction) 기반 디바이스, DW(Domain Wall) 및 SOT(Spin Orbit Transfer) 기반 디바이스, 사이리스터 기반 메모리 디바이스, 또는 위의 것 중 임의의 것의 조합, 또는 다른 메모리를 사용하는 메모리 디바이스들일 수 있거나 또는 이들을 포함할 수 있다. 메모리 디바이스는 다이 자체 및/또는 패키징된 메모리 제품을 지칭할 수 있다. 특정 실시예들에서, 비-휘발성 메모리를 갖는 메모리 컴포넌트는, JESD218, JESD219, JESD220-1, JESD223B, JESD223-1, 또는 다른 적합한 표준(본 명세서에서 인용되는 JEDEC 표준들은 jedec.org에서 이용가능함)과 같은, JEDEC에 의해 공표된 하나 이상의 표준을 준수할 수 있다.
도 1을 참조하면, 전자 메모리 시스템(10)의 실시예는 제어기(11), 제1 수의 데이터 워드들로 이루어지는 데이터의 블록을 저장하는 메모리(12), 및 제어기(11) 및 메모리(12)에 통신가능하게 연결되는 로직(13)을 포함할 수 있다. 로직(13)은 데이터의 블록을 압축하기 위한 베이스 값을 결정하도록, 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하도록- 제2 수의 데이터 워드들은 제1 수의 데이터 워드들보다 적어도 2개 더 적음-, 그리고 압축된 데이터와 함께 데이터의 블록과 연관된 메타데이터를 데이터의 블록에 저장하도록 구성될 수 있다. 일부 실시예들에서, 로직(13)은 베이스 값으로부터의 각각의 델타 값들로 대체되는 데이터의 블록의 데이터 워드들의 각각의 위치들을 표시하기 위해 메타데이터에 하나 이상의 데이터 인덱스 필드를 설정하도록 추가로 구성될 수 있다.
일부 실시예들에서, 로직(13)은 베이스 값에 적합한 데이터 값으로 데이터의 블록으로부터 데이터 워드를 식별하고, 베이스 값을 식별된 데이터 워드의 데이터 값으로 설정하도록 추가로 구성될 수 있다. 예를 들어, 로직(13)은 또한 식별된 데이터 워드의 위치를 표시하기 위해 메타데이터에 베이스 인덱스 필드를 설정하도록 구성될 수 있다. 대안적으로 또는 추가적으로, 로직(13)은 베이스 값을 고정된 데이터 워드 위치에서의 데이터 값으로 설정하도록, 그리고 베이스 값이 0인지 또는 고정된 데이터 워드 위치에서의 데이터 값인지를 표시하기 위해 메타데이터에 필드를 설정하도록 구성될 수 있다. 예를 들어, 메타데이터는 ECC(error correction code) 정보를 포함할 수 있다.
위 제어기(11), 메모리(12), 로직(13), 및 다른 시스템 컴포넌트들의 각각의 실시예들은 하드웨어, 소프트웨어, 또는 이들의 임의의 적합한 조합으로 구현될 수 있다. 예를 들어, 하드웨어 구현들은, 예를 들어, PLA들(programmable logic arrays), FPGA들(field programmable gate arrays), CPLD들(complex programmable logic devices)과 같은 구성가능한 로직, 또는, 예를 들어, ASIC(application specific integrated circuit), CMOS(complementary metal oxide semiconductor) 또는 TTL(transistor-transistor logic) 기술과 같은 회로 기술을 사용하는 고정-기능성 로직 하드웨어, 또는 이들의 임의의 조합을 포함할 수 있다. 제어기(11)의 실시예들은 범용 제어기, 특수 목적 제어기, 메모리 제어기, 스토리지 제어기, 마이크로-제어기, 범용 프로세서, 특수 목적 프로세서, CPU(central processor unit), 실행 유닛 등을 포함할 수 있다. 일부 실시예들에서, 메모리(12), 로직(13), 및/또는 다른 시스템 메모리는, (예를 들어, 동일한 다이 상의) 제어기(11)를 포함하는, 다양한 컴포넌트들 내에 위치되거나, 또는 이들과 함께 위치될 수 있다.
대안적으로, 또는 추가적으로, 이러한 컴포넌트들의 전부 또는 일부는, 프로세서 또는 컴퓨팅 디바이스에 의해 실행될, RAM(random access memory), ROM(read only memory), PROM(programmable ROM), 펌웨어, 플래시 메모리 등과 같은 머신- 또는 컴퓨터-판독가능 스토리지 매체에 저장된 로직 명령어들의 세트로서 하나 이상의 모듈에서 구현될 수 있다. 예를 들어, 컴포넌트들의 동작들을 수행하기 위한 컴퓨터 프로그램 코드는, PYTHON, PERL, JAVA, SMALLTALK, C++, C#, VHDL, Verilog, System C 등과 같은 객체-지향 프로그래밍 언어 및, "C" 프로그래밍 언어 또는 유사한 프로그래밍 언어들과 같은, 종래의 프로시저형 프로그래밍 언어들을 포함하는, 하나 이상의 OS(operating system) 적용가능한/적절한 프로그래밍 언어의 임의의 조합으로 작성될 수 있다. 예를 들어, 메모리(12), 영구 스토리지 매체, 또는 다른 시스템 메모리는, 제어기(11)에 의해 실행될 때, 시스템(10)으로 하여금 시스템(10)의 하나 이상의 컴포넌트, 특징, 또는 양태(예를 들어, 로직(13)이, 데이터의 블록을 압축하기 위한 베이스 값을 결정하고, 데이터의 블록으로부터의 원래의 값들을 베이스 값으로부터의 델타 값들로 대체하여 압축된 데이터를 제공하고, 압축된 데이터와 함께 데이터의 블록과 연관된 메타데이터를 데이터의 블록에 저장하는 등)을 구현하게 하는 명령어들의 세트를 저장할 수 있다.
이제 도 2를 살펴보면, 전자 장치(15)의 실시예는 기판(16) 및 이러한 기판(16)에 연결되는 로직(17)을 포함할 수 있다. 로직(17)은 데이터의 블록을 압축하기 위한 베이스 값을 결정하도록(데이터의 블록은 제1 수의 데이터 워드들로 이루어짐), 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하도록(제2 수의 데이터 워드들은 제1 수의 데이터 워드들보다 적어도 2개 더 적음), 그리고 압축된 데이터와 함께 데이터의 블록과 연관된 메타데이터를 데이터의 블록에 저장하도록 구성될 수 있다. 일부 실시예들에서, 로직(17)은 베이스 값으로부터의 각각의 델타 값들로 대체되는 데이터의 블록의 데이터 워드들의 각각의 위치들을 표시하기 위해 메타데이터에 하나 이상의 데이터 인덱스 필드를 설정하도록 추가로 구성될 수 있다.
일부 실시예들에서, 로직(17)은 베이스 값에 적합한 데이터 값으로 데이터의 블록으로부터 데이터 워드를 식별하고, 베이스 값을 식별된 데이터 워드의 데이터 값으로 설정하도록 추가로 구성될 수 있다. 예를 들어, 로직(17)은 또한 식별된 데이터 워드의 위치를 표시하기 위해 메타데이터에 베이스 인덱스 필드를 설정하도록 구성될 수 있다. 대안적으로 또는 추가적으로, 로직(17)은 베이스 값을 고정된 데이터 워드 위치에서의 데이터 값으로 설정하도록, 그리고 베이스 값이 0인지 또는 고정된 데이터 워드 위치에서의 데이터 값인지를 표시하기 위해 메타데이터에 필드를 설정하도록 구성될 수 있다. 예를 들어, 메타데이터는 ECC 정보를 포함할 수 있다.
로직(17)의 실시예들은, 예를 들어, 본 명세서에 설명되는 것들과 같은, 시스템, 장치, 컴퓨터, 디바이스 등에서 구현될 수 있다. 더욱 특히, 로직(17)의 하드웨어 구현들은, 예를 들어, PLA들, FPGA들, CPLD들과 같은 구성가능한 로직, 또는, 예를 들어, ASIC, CMOS 또는 TTL 기술과 같은 회로 기술을 사용하는 고정-기능성 로직 하드웨어, 또는 이들의 임의의 조합을 포함할 수 있다. 대안적으로, 또는 추가적으로, 로직(17)은, 프로세서 또는 컴퓨팅 디바이스에 의해 실행될 RAM, ROM, PROM, 펌웨어, 플래시 메모리 등과 같은 머신- 또는 컴퓨터-판독가능 스토리지 매체에 저장된 로직 명령어 세트로서 하나 이상의 모듈에 구현될 수 있다. 예를 들어, 컴포넌트들의 동작들을 수행하기 위한 컴퓨터 프로그램 코드는, PYTHON, PERL, JAVA, SMALLTALK, C++, C#, VHDL, Verilog, System C 등과 같은 객체-지향 프로그래밍 언어 및, "C" 프로그래밍 언어 또는 유사한 프로그래밍 언어들과 같은, 종래의 프로시저형 프로그래밍 언어들을 포함하는, 하나 이상의 OS 적용가능한/적절한 프로그래밍 언어들의 임의의 조합으로 작성될 수 있다.
예를 들어, 로직(17)은, 하나 이상의 기판(16)을 포함할 수 있는, 반도체 장치 상에 구현될 수 있으며, 이러한 하나 이상의 기판(16)에 로직(17)이 연결된다. 일부 실시예들에서, 로직(17)은 반도체 기판(들)(예를 들어, 실리콘, 사파이어, 갈륨-비소 등) 상의 구성가능한 로직 및 고정-기능성 하드웨어 로직 중 하나 이상에서 적어도 부분적으로 구현될 수 있다. 예를 들어, 로직(17)은 기판(들)(16) 내에 배치되는 트랜지스터 채널 영역들을 갖는 기판(들)(16)에 연결되는 트랜지스터 어레이 및/또는 다른 집적 회로 컴포넌트들 포함할 수 있다. 로직(17)과 기판(들)(16) 사이의 인터페이스는 가파른 접합(abrupt junction)이 아닐 수 있다. 로직(17)은 기판(들)(16)의 초기 웨이퍼 상에 성장되는 에피택셜 층을 포함하는 것으로 또한 고려될 수 있다.
이제 도 3을 살펴보면, 메모리를 압축하는 방법(20)의 실시예는, 박스 21에서, 데이터의 블록을 압축하기 위한 베이스 값을 결정하는 단계- 데이터의 블록은 제1 수의 데이터 워드들로 이루어짐 -, 박스 22에서, 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하는 단계- 제2 수의 데이터 워드들은 제1 수의 데이터 워드들보다 적어도 2개 더 적음-, 및, 박스 23에서, 압축된 데이터와 함께 데이터의 블록과 연관된 메타데이터를 데이터의 블록에 저장하는 단계를 포함할 수 있다. 이러한 방법의 일부 실시예들은 박스 24에서 베이스 값으로부터의 각각의 델타 값들로 대체되는 데이터의 블록의 데이터 워드들의 각각의 위치들을 표시하기 위해 메타데이터에 하나 이상의 데이터 인덱스 필드를 설정하는 단계를 추가로 포함할 수 있다.
일부 실시예들에서, 방법(20)은 박스 25에서 베이스 값에 적합한 데이터 값으로 데이터의 블록으로부터 데이터 워드를 식별하는 단계, 및 박스 26에서 베이스 값을 식별된 데이터 워드의 데이터 값으로 설정하는 단계를 추가로 포함할 수 있다. 예를 들어, 방법(20)은 박스 27에서 식별된 데이터 워드의 위치를 표시하기 위해 메타데이터에 베이스 인덱스 필드를 설정하는 단계를 또한 포함할 수 있다. 대안적으로 또는 추가적으로, 방법(20)의 실시예들은 박스 28에서 베이스 값을 고정된 데이터 워드 위치에서의 데이터 값으로 설정하는 단계, 및 박스 29에서 베이스 값이 0인지 또는 고정된 데이터 워드 위치에서의 데이터 값인지를 표시하기 위해 메타데이터에 필드를 설정하는 단계를 포함할 수 있다. 예를 들어, 메타데이터는 박스(30)에서 ECC 정보를 포함할 수 있다.
방법(20)의 실시예들은, 예를 들어, 본 명세서에 설명되는 것들과 같은, 시스템, 장치, 컴퓨터, 디바이스 등에서 구현될 수 있다. 더욱 특히, 방법(20)의 하드웨어 구현들은, 예를 들어, PLA들, FPGA들, CPLD들과 같은 구성가능 로직, 또는, 예를 들어, ASIC, CMOS 또는 TTL 기술과 같은 회로 기술을 사용하는 고정-기능성 로직 하드웨어, 또는 이들의 임의의 조합을 포함할 수 있다. 하이브리드 하드웨어 구현들은, 제어 흐름, 및 데이터 경로들이 기능성을 위한 로직을 구현하도록, 정적 동적 SoC 재구성 가능 디바이스들을 포함한다. 대안적으로, 또는 추가적으로, 방법(20)은 프로세서 또는 컴퓨팅 디바이스에 의해 실행될 RAM, ROM, PROM, 펌웨어, 플래시 메모리 등과 같은 머신 또는 컴퓨터-판독가능 스토리지 매체에 저장된 로직 명령어 세트로서 하나 이상의 모듈에 구현될 수 있다. 예를 들어, 컴포넌트들의 동작들을 수행하기 위한 컴퓨터 프로그램 코드는, PYTHON, PERL, JAVA, SMALLTALK, C++, C#, VHDL, Verilog, System C 등과 같은 객체-지향 프로그래밍 언어 및, "C" 프로그래밍 언어 또는 유사한 프로그래밍 언어들과 같은, 종래의 프로시저형 프로그래밍 언어들을 포함하는, 하나 이상의 OS 적용가능한/적절한 프로그래밍 언어들의 임의의 조합으로 작성될 수 있다.
예를 들어, 방법(20)은 컴퓨터 판독가능 매체 상에서 구현될 수 있다. 방법(20)의 실시예들 또는 일부는 펌웨어,(예를 들어, API(application programming interface)를 통한) 애플리케이션들, 또는 OS(operating system) 상에서 실행되는 드라이버 소프트웨어로 구현될 수 있다. 추가적으로, 로직 명령어들은 어셈블러 명령어들, ISA(instruction set architecture) 명령어들, DSA(data set architecture) 커맨드들, (머신 명령어들, 머신 의존 명령어들, 마이크로코드, 상태-설정 데이터, 집적 회로에 대한 구성 데이터, 전자 회로를 개인화하는 상태 정보 및/또는 하드웨어에 고유한 다른 구조적 컴포넌트들(예를 들어, 호스트 프로세서, 중앙 처리 유닛/CPU, 마이크로제어기, Moore Machine, Mealy Machine 등)을 포함할 수 있다.
도 4를 참조하면, 메모리를 압축하기 위한 프로세스 흐름(40)의 실시예는 데이터의 블록(42) 및 데이터의 블록(44)과 연관된 메타데이터 M1로 시작할 수 있다. 데이터의 블록(42)에 대한 기입 요청 시에, 프로세스 흐름(40)은 압축되지 않은 데이터의 블록(42)에 대해 사용되는 동일한 공간에 압축된 데이터 및 메타데이터 M1 양자 모두를 저장하기 위해 본 명세서에 설명되는 바와 같이 데이터를 압축하는 것을 포함한다. 압축이 성공적이면, 압축된 데이터는 1로 설정되는 압축 플래그 (C=1, 성공적인 압축을 표시함) 및 메타데이터 M2(압축 메타데이터 및 메타데이터 M1을 포함함)와 조합된다. 성공적으로 압축된 블록은 다음으로 메모리(44)(예를 들어, DIMM)에 기입된다. 압축이 성공적이지 않으면, 압축되지 않은 데이터는 0으로 설정되는 압축 플래그 (C=0, 성공적이지 않은 압축을 표시함) 및 메타데이터 M3과 조합되는 압축되지 않은 부분 데이터로 분할된다. 압축되지 않은 블록은 다음으로 메모리(44)에 기입되고, 오버플로우 데이터로서 압축되지 않은 데이터의 나머지에 대해 제2 기입이 필요하다. 메타데이터 M1은 메타데이터 M3 또는 오버플로우 데이터와 함께 포함될 수 있다. 판독 요청 시에, 데이터의 블록(42)은 (예를 들어, 적절한 압축해제로) 압축된 블록 또는 (예를 들어, 압축되지 않은 데이터를 재조립하는 것에 의해) 압축되지 않은 블록으로부터 재구성되고, 메타데이터 M1이 검색된다. 유리하게는, 압축이 성공적일 때, 데이터의 블록(42) 및 메타데이터 M1 양자 모두를 검색하기 위해 메모리(44)의 단지 하나의 판독만이 필요하다. 또한, 종래에는 2개의 메모리 판독들이 데이터의 블록(42) 및 메타데이터 M1 양자 모두를 검색하기 위해 이미 요구되었기 때문에 압축이 성공적이지 않을 때 패널티가 거의 없거나 또는 전혀 수반되지 않는다.
일부 실시예들은 저-복잡도 커버리지-기반 압축을 위한 기술을 제공할 수 있다. 모든 메모리 블록과 연관된 메타데이터를 저장하는 것은 모든 메모리 요청에 대해 2개의 메모리 액세스를 사용할 것을 잠재적으로 요구한다. 예로서, 메모리 에러들을 감소시키기 위해, ECC는 메모리에 64 B(byte) 또는 32B 블록마다 저장될 수 있다. 메모리 블록을 판독하는 것은 데이터 및 ECC 양자 모두를 판독하는 것을 요구하며, 이는 모든 LLC(last level cache) 누락이 2개의 메모리 참조들을 필요로 할 수 있고, 이는 메모리 대역폭 사용 및 전력을 증가시킨다는 것을 의미한다. FECC(Frugal ECC)는 ECC 정보에 대한 충분한 공간을 절약하기 위해 미세한 압축을 사용하는 ECC에 대한 지원을 제공하지만, 압축 알고리즘 구현은 압축/압축해제 로직에서 높은 레이턴시 및 상당한 전력 소비를 갖는 다수의 복잡한 알고리즘들을 이용하기 때문에 복잡하다. FECC에 의해 이용되는 알고리즘들 중 하나는 BDI 알고리즘이고, 이는 계산 및 전력 소비를 증가시키는 메모리 블록에서의 베이스 워드 이외의 모든 워드에 대한 델타 값을 계산하는 것을 수반한다. 유리하게는, 실시예들은 전술한 문제점들 중 하나 이상을 극복한다.
실시예들은 메모리 대역폭 및 전력을 절약하기 위해 단일 블록(예를 들어, ECC 입도에 의존하여, 64B 또는 32B)에서의 데이터로 ECC를 압축하는 것을 타겟으로 하는 기술을 제공한다. 성공적인 압축은 압축되지 않은 블록에 사용되는 동일한 공간에 압축된 데이터 및 ECC(예를 들어, 및/또는 다른 메타데이터) 양자 모두를 저장한다. 일부 실시예들은 복잡성을 증가시키지 않고 커버리지를 증가시키기 위해 압축 알고리즘들의 클래스(예를 들어, 임의 베이스 선택으로부터의 델타 압축)를 이용할 수 있다. 유리하게는, 일부 실시예들은 메모리 에러들로부터 복구하기 위해 ECC를 사용하는 시스템들에서 대역폭 및 전력을 절약할 수 있다. 예를 들어, 실시예들은 상품 (비-ECC) DIMMS를 사용하지만 여전히 신뢰성을 지원할 필요가 있는 클라이언트, 서버, HPC(high performance computing) 시스템들 등에 적용될 수 있다.
일부 실시예들은, 종래의 기법들보다 더 낮은 복잡성 및 높은 커버리지 양자 모두를 제공하는, 압축 알고리즘들의 클래스, 임의 베이스 선택을 갖는 델타 압축을 이용할 수 있다. 델타 압축은, 일반적으로, 베이스 워드와 유사한(예를 들어, 작은 델타 내에 있는) 메모리 블록에서의 하나 이상의 워드를 식별한다. 베이스 워드는 값 0, 블록에서의 식별된 워드(예를 들어, 성공적인 압축을 제공함), 블록에서의 제1 워드, 또는 블록에서의 다른 임의의 워드일 수 있다. 워드는 고정된 길이, 예를 들어, 16b(bits), 32b, 64b 등을 갖는다. 다양한 구현들에서, "블록(block)" 또는 "데이터의 블록(block of data)"이라는 용어들은 "라인(line)" 또는 "캐시라인(cacheline)" 또는 "데이터의 라인(line of data)"을 지칭하거나 또는 이들과 교환될 수 있다. 실시예들은 블록으로부터 하나 이상의 워드를 제거하고, 제거된 워드들이 압축되지 않은 블록에서 어디에 있었는지를 표시하기 위한 압축 메타데이터를 포함한다. 성공적인 압축의 실시예들은 메타데이터(예를 들어, ECC) 및 임의의 다른 압축 관련 메타데이터를 저장하기 위해 제거된 비트들을 재사용할 수 있도록 충분한 비트들이 제거될 때에 대응한다.
도 5를 참조하면, 압축된 블록(50)의 실시예는 32B 블록에서의 선택된 16 비트 워드로부터 3 비트 델타 내에 있는 2개의 16 비트 워드들을 제거하기 위한 압축 기술을 이용한다. 압축된 블록에 대한 압축 메타데이터는 압축된 플래그 필드 C(1-비트 플래그 x 3), 베이스 플래그 필드 F(제로 베이스 또는 선택된 베이스를 표시하는 1 비트 플래그), 베이스 인덱스 필드 IS(선택된 베이스 값의 위치에 대한 4 비트 인덱스), 제1 데이터 인덱스 필드 I1(대체된 데이터 워드 1의 위치에 대한 4 비트 인덱스), 제2 데이터 인덱스 필드 I2(대체된 데이터 워드 2의 위치에 대한 4 비트 인덱스), 제1 델타 필드 D1(대체된 데이터 워드 1에 대한 3 비트 델타 값), 제2 델타 필드 D2(대체된 데이터 워드 2에 대한 3 비트 델타 값), 메타데이터 필드 ECC(10 비트 SECDED(Single Error Correction and Double Error Detection) ECC), 및 나머지 (비-압축) 16 비트 데이터 워드들에 대한 14개(14)의 데이터 워드 필드들 W0 ... W13을 포함한다. 압축이 성공적일 때, 압축 메타데이터 및 ECC 메타데이터 모두는 2개의 제거된 16 비트 데이터 워드들의 32 비트를 점유한다.
도 5에 도시되는 바와 같이, 1 비트 플래그 F는 델타들이 0으로부터 측정되는지 또는 선택된 데이터 워드로부터 측정되는지를 표시한다. 3개의 인덱스 필드들(각각 4 비트임)은 선택된 워드 인덱스 (IS) 뿐만 아니라 2개의 제거된 워드의 2개의 인덱스들(I1, I2)에 포인팅한다. 2개의 3 비트 델타 필드들 D1, D2는 2개의 제거된 워드들 각각과 0 또는 선택된 워드 사이의 산술 차이를 저장한다. 압축된 플래그 필드에서의 에러가 ECC에 의해 커버되지 않기 때문에, TMR(triple modular redundancy)을 사용하여, 압축된 플래그 필드에 대해 3 비트가 사용된다. 제거된 32 비트의 나머지 10 비트는 데이터의 32B를 커버하는 10 비트 SECDED ECC 필드를 저장한다. 압축된 블록의 나머지는 제거되지 않은 14개의 워드들을 저장한다.
압축에 적합한 베이스 값을 식별하기 위해 임의의 적합한 기술이 이용될 수 있다. 예를 들어, 일부 실시예들은 베이스 값에 대해 제로(0)로 시작하고 다른 워드들 중 2개가 0의 3 비트 델타 내에 있는지를 결정할 수 있다. 그렇다면, 압축된 플래그 C는 7(바이너리 111)로 설정되고, 플래그 F는 0의 베이스 값을 표시하기 위해 0으로 설정되고, I1은 0의 3 비트 델타 내의 제1 데이터 워드의 위치로 설정되고, I2는 0의 3 비트 델타 내의 제2 데이터 워드의 위치로 설정되고, 델타 필드들 D1 및 D2는 각각의 델타 값들로 설정된다. 그렇지 않으면, 일부 실시예들은 W0으로 시작하고 다른 워드들 중 2개가 W0의 3 비트 델타 내에 있는지를 결정할 수 있다. 그렇다면, 압축된 플래그 C는 7(바이너리 111)로 설정되고, 플래그 F는 선택된 베이스 값을 표시하기 위해 1로 설정되고, IS는 0(W0의 데이터 워드 위치)으로 설정되고, I1은 W0의 3 비트 델타 내의 제1 데이터 워드의 위치로 설정되고, I2는 W0의 3 비트 델타 내의 제2 데이터 워드의 위치로 설정되고, 델타 필드들 D1 및 D2는 각각의 델타 값들로 설정된다. 2개 미만의 워드가 W0의 3 비트 델타 내에 있으면, 프로세스는 데이터 워드들 W1 내지 W15에 대해 반복될 수 있고, 적합한 베이스 값이 식별될 때 중지된다. 해당 분야에서의 기술자들은 전술한 프로세스의 전부 또는 일부들이 상태 머신 또는 조합 로직으로 구현될 수 있다는 점을 인식할 것이다. 적합한 베이스 값이 식별되면, 블록에 대한 ECC 정보가 ECC 필드에 저장된다. 적합한 베이스 값이 식별되지 않으면, 압축 플래그 필드는 0으로 설정될 수 있고, 이는 압축이 성공적이지 않았고 오버플로우 데이터가 압축되지 않은 블록과 별도로 저장될 수 있다는 점을 표시한다.
도 6을 참조하면, 압축된 블록(60)의 실시예는 32B 블록에서의 고정된 위치들에서 하나 이상의 임의의 16 비트 워드로부터 4 비트 델타 내에 있는 2개의 16 비트 워드들을 제거하기 위한 압축 기술을 이용한다. 압축된 블록에 대한 압축 메타데이터는 압축된 플래그 필드 C(1-비트 플래그 x 3), 메타데이터 필드 ECC(11-비트 SECDED ECC), 베이스 플래그 필드 F(제로 베이스 또는 임의의 베이스를 표시하기 위한 1-비트 플래그), 베이스 인덱스 필드 IA(베이스 값에 대해 2개의 임의의 위치들 중 어느 것을 사용할지를 표시하기 위한 1-비트 플래그), 제1 데이터 인덱스 필드 I1(대체된 데이터 워드 1의 위치에 대한 4-비트 인덱스), 제2 데이터 인덱스 필드 I2(대체된 데이터 워드 2의 위치에 대한 4-비트 인덱스), 제1 델타 필드 D1(대체된 데이터 워드 1에 대한 4-비트 델타 값), 제2 델타 필드 D2(대체된 데이터 워드 2에 대한 4-비트 델타 값), 및 나머지 (비-압축) 16-비트 데이터 워드들에 대한 14개의 데이터 워드 필드 W0... W13을 포함한다. 압축이 성공적일 때, 압축 메타데이터 및 ECC 메타데이터 모두는 2개의 제거된 16 비트 데이터 워드들의 32 비트를 점유한다.
압축된 블록(50)에 대해, 2개의 다른 워드들이 가까운 단일의 선택된 워드를 식별하는 것은 블록에서의 워드들의 모든 쌍들을 감산하기 위해 더 많은 복잡성(예를 들어, 구역, 레이턴시 및 전력)을 요구한다. 압축된 블록(60)은 선택된 임의의 워드들을 타겟으로 하고, 여기서 임의의 워드들의 미리 정의된 세트가 델타 압축을 위한 베이스로서 사용될 수 있다. 예를 들어, 일부 실시예들은 블록에서의 제1 및 제9 워드들을 2개의 임의의 베이스들로서 이용할 수 있다. 가능한 베이스 워드 위치들의 수를 제한하는 것 및/또는 가능한 베이스 워드들에 대해 고정된 위치들을 이용하는 것은, 감산들이 단지 모든 워드 쌍들의 작은 서브세트로만 수행되어야 하기 때문에 델타들을 계산하기 위해 필요한 구역, 레이턴시 및 전력을 상당히 감소시킨다. 더 적은 가능한 베이스 워드 위치들을 이용하는 것은 메타데이터에서의 자유 비트들의 수를 또한 증가시키며, 이는 다음으로 다른 목적들을 위해 이용될 수 있다. 예를 들어, 4 비트 IS 필드는 1 비트 IA 플래그로 대체될 수 있으며, 이는 메타데이터의 3 비트를 자유롭게 한다. 추가 비트들은 압축된 블록(60)이 (최대 64B 블록을 커버할 수 있는) 11 비트 SECDEC ECC, 및 (성공적인 압축의 가능성을 증가시키는) 3 비트 대신에 4 비트 델타 값들을 포함하는 것을 허용한다.
압축된 블록(60)의 예시적인 구현은 0 외에도 단지 2개의 임의의 워드들(예를 들어, 제1 및 제9 워드들)을 잠재적 베이스로서 이용할 수 있다. 예를 들어, 일부 실시예들은 베이스 값에 대해 제로(0)로 시작하고 다른 워드들 중 2개가 0의 4 비트 델타 내에 있는지를 결정할 수 있다. 그렇다면, 압축된 플래그 C는 7(바이너리 111)로 설정되고, 플래그 F는 0의 베이스 값을 표시하기 위해 0으로 설정되고, I1은 0의 4 비트 델타 내의 제1 데이터 워드의 위치로 설정되고, I2는 0의 4 비트 델타 내의 제2 데이터 워드의 위치로 설정되고, 델타 필드들 D1 및 D2는 각각의 델타 값들로 설정된다. 그렇지 않으면, 일부 실시예들은 제1 워드로 시작하고 다른 워드들 중 2개가 제1 워드의 4 비트 델타 내에 있는지를 결정할 수 있다. 그렇다면, 압축된 플래그 C는 7(바이너리 111)로 설정되고, 플래그 F는 임의의 베이스 값을 표시하기 위해 1로 설정되고, (제1 워드가 베이스 값을 제공한다는 것을 표시하기 위해) IA는 0으로 설정되고, I1은 제1 워드의 4 비트 델타 내의 제1 데이터 워드의 위치로 설정되고, I2는 제1 워드의 4 비트 델타 내의 제2 데이터 워드의 위치로 설정되고, 델타 필드들 D1 및 D2는 각각의 델타 값들로 설정된다.
2개 미만의 워드가 제1 워드의 4 비트 델타 내에 존재하면, 프로세스는 다른 워드들 중 2개가 제9 워드의 4 비트 델타 내에 있는지를 결정하기 위해 제9 데이터 워드에 대해 반복될 수 있다. 그렇다면, 압축된 플래그 C는 7(바이너리 111)로 설정되고, 플래그 F는 임의의 베이스 값을 표시하기 위해 1로 설정되고, (제9 워드가 베이스 값을 제공한다는 것을 표시하기 위해) IA는 1로 설정되고, I1은 제9 워드의 4 비트 델타 내의 제1 데이터 워드의 위치로 설정되고, I2는 제9 워드의 4 비트 델타 내의 제2 데이터 워드의 위치로 설정되고, 델타 필드들 D1 및 D2는 각각의 델타 값들로 설정된다. 해당 분야에서의 기술자들은 전술한 프로세스의 전부 또는 일부들이 상태 머신 또는 조합 로직으로 구현될 수 있다는 점을 인식할 것이다. 0, 제1 워드, 또는 제9 워드 중 임의의 것이 적합한 베이스 값을 제공하면, 블록에 대한 ECC 정보가 ECC 필드에 저장된다. 그렇지 않으면, 압축 플래그 필드는 0으로 설정될 수 있고, 이는 압축이 성공적이지 않았고 오버플로우 데이터가 압축되지 않은 블록과 별도로 저장될 수 있다는 점을 표시한다.
압축된 블록(60)은 유리하게는 32B 또는 64B 블록에 대한 SECDED ECC를 커버한다. 32B에 대해, 단지 10 비트의 ECC만이 필요하다. 64B 입도에 대해, ECC를 위해 11 비트가 필요하며, 이는 상단 또는 하단 32B 청크에 저장될 수 있다. 1 비트 플래그 F는 델타들이 0으로부터 측정되는지 또는 임의의 베이스로부터 측정되는지를 표시하고, 1 비트 플래그 IA는 단지 2개의 가능성들(예를 들어, W0 또는 W8)이 존재하기 때문에 임의의 베이스에 대한 적절한 인덱스를 식별한다. 유리하게는, 실시예들은 종래의 압축 기술(예를 들어, FECC, BDI 등)에 비해 덜 복잡한 높은 압축 커버리지를 제공한다. 몇몇 클라이언트, 서버, 및 HPC 작업부하들에 걸친 광범위한 벤치마크들에 걸쳐, 실시예들은 32B ECC 입도를 지원할 때 80% 초과의 평균 커버리지를 보였다. 64B 입도에 대해, 상단 또는 하단 청크가 압축될 수 있으면 블록이 커버되기 때문에, 평균 커버리지는 84%로 증가한다.
압축된 블록들(50 및 60)은 일부 실시예들에 따른 압축 기술의 비-제한적인 예들이다. 본 출원의 혜택을 고려하면, 다수의 다른 예들이 해당 분야에서의 기술자들에게 떠오를 것이다. 예를 들어, 메타데이터의 크기에 의존하여, 압축 메타데이터에 대한 대응하는 변경들과 함께 더 많은 또는 더 적은 데이터 워드들이 제거될 수 있다. 유사하게, 일부 실시예들은 베이스 값에 대해 더 많은 또는 더 적은 고정된, 임의의 데이터 워드 위치들을 사용할 수 있다. 일부 실시예들은 델타 값에 대해 더 많은 또는 더 적은 비트들을 사용할 수 있다.
본 명세서에서 논의되는 기술은 다양한 컴퓨팅 시스템들(예를 들어, 데스크톱, 워크스테이션, 서버, 랙 시스템 등과 같은 비-모바일 컴퓨팅 디바이스, 스마트 폰, 태블릿, UMPC(Ultra-Mobile Personal Computer), 랩톱 컴퓨터, ULTRABOOK 컴퓨팅 디바이스, 스마트 워치, 스마트 안경, 스마트 팔찌 등과 같은 모바일 컴퓨팅 디바이스, 및/또는 IoT(Internet-of-Things) 디바이스(예를 들어, 센서, 카메라 등)와 같은 클라이언트/에지 디바이스를 포함함)에서 제공될 수 있다.
위에 주목된 바와 같이, ECC 메모리는 추가적인 DRAM 디바이스들 및 데이터 레인으로 인해 비용을 증가시킨다. 하이-엔드 시스템들에 대해, 고객들은 정규 DRAM들과 비교하여 특수 ECC DRAM들을 채우기 위해 필요한 추가 비용들에 전통적으로 투자하였다. 그러나, IoT(internet of things) 도메인에서의 로우-엔드 시스템들에 대해, 비용은 매우 중요한 파라미터이다. 예를 들어, 16 비트 채널 폭을 갖는 LPDDR(Low Power DDR) 메모리를 사용할 때, ECC 보호를 위해 채널 당 전용 디바이스들을 추가하는 비용은 엄청나다. 따라서, 저 비용 및 ECC 요건을 지원하기 위해, 대역내 ECC 메커니즘들이 사용될 수 있다.
대역내 ECC는 훨씬 더 낮은 용량 오버헤드로 그리고 핀 카운트 증가 없이 SECDED를 허용한다. 2 바이트의 ECC 값으로 구성가능한 입도(64 바이트, 32 바이트, 16 바이트 등)로 데이터가 보호된다. 종래에는, 이러한 ECC 데이터를 저장하기 위해 총 DRAM 크기의 일부가 예약되고, 대역내 ECC를 가능하게 하는 것은 성능 패널티를 야기하는데, 그 이유는 메모리에 대한 각각의 판독 또는 기입 액세스가 ECC 데이터를 판독 또는 기입하라는 추가적 요청으로 변환되고 따라서 사용되는 메모리 대역폭을 증가시키기 때문이다. 일부 실시예들은 임의 베이스 선택으로부터의 델타 압축으로 블록을 압축하는 것 및 압축되지 않은 블록에 대해 사용되는 동일한 공간에 압축된 데이터 및 ECC(예를 들어, 및/또는 다른 메타데이터) 양자 모두를 저장하는 것에 의해 ECC 데이터를 저장하기 위해 예약되는 DRAM의 부분을 감소시키고 대역내 ECC 성능 패널티를 감소시키는 기술을 제공한다. 일부 실시예들은 (예를 들어, 다른 압축 기법들에 비해) 낮은 복잡도 압축으로 커버리지를 유리하게 증가시킬 수 있다. 유리하게는, 대역내 ECC 압축 기술의 실시예들은 메모리에 대한 2개의 액세스들을 요구하는 판독 및 기입 요청들의 수를 크게 감소시킬 수 있다.
일부 실시예들에서, 대역내 ECC 압축은 SoC에서 메모리 제어기 전에 배치되는 별개의 모듈에서 구현된다. 독립적인 모듈에서 대역내 ECC 압축 기능성을 갖는 것은 기존 모듈들에 대한 변경들 없이 상이한 SoC들에 걸쳐 휴대성 및 재사용을 허용한다. 이는 ECC 보호가 필요하지 않을 때 전체 대역내 ECC 압축 모듈의 전력 게이팅을 또한 허용한다.
대역내 ECC 압축 모듈은 물리적 메모리 공간의 모든 또는 구체적인 영역들에 에러 체크 및 정정을 제공하는 것에 의해 안전성 및 신뢰성을 개선한다. 대역내 ECC 압축 모듈은 대역외 ECC를 지원하지 않는 메모리 기술들에 대해 인에이블될 수 있으며, 여기서 ECC 데이터 스토리지를 위해 각각의 채널에 추가적인 디바이스를 추가하는 비용은 엄청나다.
일부 실시예들에서, 대역내 ECC 압축 모듈은 DRAM 메모리 제어기(또는 임의의 다른 타입의 어드레싱가능 메모리 엘리먼트)에 대한 메모리 판독들 및 기입들의 경로 상에 배치된다. 대역내 ECC 압축 모듈은 인커밍 요청 어드레스에 기초하여 영역이 ECC 보호되어야 하는지를 인식한다. ECC 데이터의 판독 및 생성은 추가적인 대역폭 오버헤드를 추가하므로, 최근에 사용된 ECC 데이터를 저장하는 것에 의해, 이러한 오버헤드를 감소시키기 위해 대역내 ECC 압축 모듈 내부의 최근 신드롬 버퍼가 사용될 수 있다.
도 7은, 특정 실시예들에 따른, 메모리 서브시스템에서의 대역내 ECC 압축 모듈(120)의 배치를 도시하는 블록도(100)를 예시한다.
복수의 메모리 요청기들(104, 106)이 메모리 패브릭(108)을 통해 메모리 디바이스(110)에 판독들 및 기입들을 포함하는 I/O(input/output) 요청들을 송신할 수 있다. 복수의 메모리 요청기들(104, 106)은 호스트 계산 시스템들 또는 다른 디바이스들을 포함할 수 있다.
메모리 디바이스(110)는 (예를 들어, 압축 블록(60) 등을 이용하여) 본 명세서에 설명되는 바와 같이 임의 베이스 선택으로부터의 델타 압축 기술을 포함하는 대역내 ECC 압축 모듈(120)을 포함한다. DRAM(114)(대안적인 실시예들에서 DRAM(114) 이외의 다른 메모리가 사용될 수 있음)에 액세스하기 위한 메모리 제어기(112)에 의한 추가의 처리 전에 대역내 ECC 압축 모듈(120)에 의해 I/O 요청들이 인터셉트되고 처리되도록 하는 구성으로 메모리 디바이스(110)에 대역내 ECC 압축 모듈(120)이 배치된다. 도 7에서 대역내 ECC 압축 모듈(120)이 메모리 제어기(112)와 별개의 모듈로서 도시되었지만, 특정 실시예들에서, 대역내 ECC 압축 모듈(120) 또는 그 동작들이 메모리 제어기(112)에서 구현될 수 있다.
도 7에서, 대역내 ECC 압축 모듈(120)은 메모리 제어기(112)에 대한 메모리 판독들 및 기입들의 경로에 놓이고, 16 비트 SECDED 코드로, 구성가능한 입도(64B, 32B, 16B 등)로 데이터를 보호한다. 대역내 ECC 압축 모듈(120)은 DRAM 메모리(114)로 가는 도중에 놓이고, 인에이블될 때, 메모리 제어기(112)로의 모든 요청들을 인터셉트한다.
대역내 ECC 압축 모듈(120)이 DRAM(114)에서 모든 메모리 어드레스 공간의 ECC 보호를 지원하더라도, 메모리 어드레스 공간의 더 작은 부분만이 ECC 보호될 필요가 있고, 중요한 애플리케이션들만이 그 보호 공간에 할당될 것으로 예상된다. 이러한 것은 대역내 ECC를 인에이블하는 대역폭 오버헤드를 감소시키는데, 그 이유는 보호되지 않은 영역들로의 액세스들이 ECC 데이터를 판독 또는 기입하라는 추가적인 요청들을 생성하지 않기 때문이다.
다양한 실시예들이 DRAM(114)과 같은 동적 휘발성 메모리에 관하여 설명되더라도, 실시예들은 값들을 전파하는 임의의 메모리 디바이스 또는 디바이스들에 적용될 수 있다. 본 명세서에 설명되는 바와 같은 메모리 서브시스템은, DDR4(DDR 버전 4, JEDEC에 의해 2012년 9월에 공개된 초기 사양), LPDDR4(LPDDR(LOW POWER DOUBLE DATA RATE) 버전 4, JESD209-4, 2014년 8월에 JEDEC에 의해 처음으로 공개됨), WIO2(WideIO2(Wide I/O2), JESD229-2, 2014년 8월에 JEDEC에 의해 처음으로 공개됨), HBM(HIGH BANDWIDTH MEMORY DRAM, JESD235, 2013년 10월에 JEDEC에 의해 처음으로 공개됨), DDR5(DDR 버전 5), LPDDR5(LPDDR 버전 5), HBM2(HBM 버전 2), 및/또는 다른 것들과 같은, 다수의 메모리 기술들, 및 이러한 사양들의 파생들 또는 확장들에 기초하는 기술들과 호환가능할 수 있다.
휘발성 메모리 외에도, 또는 이에 대안적으로, 특정 실시예들에서, 메모리 디바이스들에 대한 지칭은 심지어 디바이스에 대해 전력이 중단되더라도 그것의 상태가 확정적인 비휘발성 메모리 디바이스를 지칭할 수 있다. 하나의 실시예에서, 비휘발성 메모리 디바이스는, NAND 또는 NOR 기술들과 같은, 블록 어드레싱가능 메모리 디바이스이다. 따라서, 메모리 디바이스는 3D 크로스포인트 메모리 디바이스, 또는 다른 바이트 어드레싱가능 비휘발성 메모리 디바이스들을 또한 포함할 수 있다. 하나의 실시예에서, 메모리 디바이스는 칼코게나이드 상 변화 재료(예를 들어, 칼코게나이드 글라스), 다중-임계 레벨 NAND 플래시 메모리, NOR 플래시 메모리, 단일 또는 멀티-레벨 PCM(Phase Change Memory), 저항성 메모리, 나노와이어 메모리, FeTRAM(ferroelectric transistor random access memory), 멤리스터 기술을 포함하는 MRAM(magnetoresistive random access memory) 메모리, 또는 STT(spin transfer torque)-MRAM, 스핀트로닉 자기 접합 메모리 기반 디바이스, 또는 위의 것 중 임의의 것의 조합, 또는 다른 메모리를 사용하는 메모리 디바이스들일 수 있거나, 또는 이들을 포함할 수 있다.
"DRAM"을 지칭하는 본 명세서에서의 설명들은, 휘발성이든 또는 비휘발성이든 간에, 랜덤 액세스를 허용하는 임의의 메모리 디바이스에 적용될 수 있다. 메모리 디바이스 또는 DRAM은 다이 자체 및/또는 패키징된 메모리 제품을 지칭할 수 있다.
도 8은, 특정 실시예들에 따른, DRAM(114)에 대응하는 어드레싱가능 메모리 공간이 어떻게 시스템 가시 메모리(202) 및 ECC 데이터 스토리지 영역인 ECC 신드롬 공간(204)으로 분할되는지를 도시하는 블록도(200)를 예시한다. 도 8은 어드레싱가능 메모리 공간이 어떻게 시스템 가시 메모리에서 보호 영역 및 비-보호 영역으로 분할되는지를 또한 도시한다. 예를 들어, 캐시라인 A(206) 및 캐시라인 B(208)는 그 데이터가 ECC 보호를 필요로 하는 보호 영역들이고, 압축이 성공적이지 않으면, 대응하는 ECC 데이터는, 압축되지 않은 블록으로부터의 임의의 오버플로우 데이터와 함께, 각각 영역들(214, 216)에서 ECC 캐시라인(212)에 저장된다. 캐시라인 C(210)는 그 데이터가 ECC 보호를 필요로 하지 않는 보호되지 않은 영역이다.
ECC 신드롬 공간(204)에 대한 영역 및 시스템 가시 메모리(202)에 대한 영역은 부팅 시에 프로그램될 수 있거나 또는 런타임 시에 동적으로 변경될 수 있다. ECC 데이터 스토리지에 대해 부팅 시에 예약되는 메모리의 영역은 ECC 신드롬 공간(204)이라고 지칭된다. 이러한 영역의 크기는 압축 커버리지 및 보호 입도에 의존한다. 이러한 예약 공간(204)은 시스템의 나머지에 가시적이지 않으며, 대역내 ECC 압축 모듈(120)에 의해서만 사용될 수 있다. 유리하게도, 일부 실시예들은 ECC 신드롬 공간(204)에 대해 예약되는 메모리의 양을 감소시키는데, 그 이유는 비교적 높은 압축 커버리지가 대부분의 ECC 데이터가 압축된 블록들과 함께 저장되는 것을 보장하기 때문이다.
(예를 들어, 압축 플래그에 의해 표시되는 바와 같이) 압축이 성공적이지 않았다면, 대역내 ECC 압축 모듈(120)은 메모리의 보호 영역으로의 판독/기입 트랜잭션(캐시 라인 액세스)을 2개의 별개의 메모리 요청들로 변환한다. 하나의 메모리 요청은 실제 데이터 캐시 라인에 대한 것이고, 다른 것은 ECC 값 및 오버플로우 데이터를 포함하는 캐시 라인에 대한 것이다. 인커밍 판독/기입 어드레스에 기초하여, 대역내 ECC 압축 모듈(120)은 간단한 어드레스 계산을 사용하여 그 캐시 라인에 대응하는 ECC 데이터의 어드레스를 결정한다.
예를 들어, 대역내 ECC 압축 모듈(120)은 메모리 패브릭(108)을 통해 메모리 요청기(104, 106)로부터 메모리 디바이스(110)에 전송되는 I/O 요청을 인터셉트한다. 대역내 ECC 압축 모듈(120)은 I/O 요청에 대응하는 논리 어드레스의 데이터가 ECC 보호를 필요로 하는지를 결정한다. 그렇다면, 대역내 ECC 압축 모듈(120)은, 성공적으로 압축된 데이터가 저장되는 위치들에서의 가시 어드레스 공간(즉, 시스템 가시 메모리(202)), 및, 필요하다면, 압축되지 않은 데이터에 대한 ECC 데이터가 저장되는 ECC 신드롬 공간(204) 양자 모두에 대해 I/O를 수행한다.
I/O 요청에 대응하는 논리 어드레스의 데이터가 ECC 보호를 필요로 하지 않는다고 대역내 ECC 압축 모듈(120)이 결정하면, 대역내 ECC 압축 모듈(120)은 압축되지 않은 데이터가 저장되는 위치들에서의 가시 어드레스 공간(즉, 시스템 가시 메모리(202))에 대해 I/O를 수행하지만, 데이터에 대한 ECC 데이터가 존재하지 않으므로 ECC 신드롬 공간(204)에 대해 I/O를 수행할 필요가 없다.
도 9는, 특정 실시예들에 따른, 최근 신드롬 버퍼(402)를 갖는 대역내 ECC 압축 모듈(120)을 도시하는 블록도를 예시한다.
대역내 ECC 압축 모듈(120) 내부의 최근 신드롬 버퍼(402)는 최근에 사용된 ECC 데이터 및 오버플로우 데이터를 대역내 ECC 압축 모듈(120)에서의 내부 구조에 저장하는 것에 의해 대역폭 오버헤드를 추가로 감소시키기 위해 그리고 메모리로부터 데이터를 판독하는데 필요한 추가적인 판독 요청을 회피하기 위해 사용될 수 있다. ECC 캐시라인(212)의 영역에 저장되는 ECC 데이터를 판독하면서 ECC 캐시라인(212)의 전체가 판독되기 때문에, 미래의 판독 요청들이 참조의 지역성 때문에 인접한 영역들에 지향되는 것을 예상하여 복수의 보호 영역들에 대한 ECC 데이터가 신드롬 버퍼(402)에 저장될 수 있다.
예를 들어, 판독 요청이 캐시라인 A(206)에 저장되는 데이터에 대한 것이면, 캐시라인 A(206)의 ECC 데이터(214) 및 오버플로우 데이터를 판독하기 위해, ECC 캐시라인(212) 전체가 판독되고, 캐시라인 B(208)의 ECC 데이터(216) 및 오버플로우 데이터가 또한 판독된다. 캐시라인 B(208)의 ECC 데이터(216) 및 오버플로우 데이터는, 미래의 판독 요청들이 캐시라인 B(208)에 저장되는 데이터로 지향되는 것을 예상하여, 최근 신드롬 버퍼(402)에 저장된다.
단일 ECC 캐시라인이 (ECC 보호 입도에 기초하여) 32, 16 또는 8개의 다른 데이터 라인들에 대한 ECC 및 오버플로우 데이터를 포함하기 때문에, 그리고 대부분의 벤치마크들이 시간/공간 지역성을 나타내는 것을 고려하면, 동일한 ECC 캐시 라인이 DRAM으로부터 많은 횟수로 리페치될 수 있으며, 이는 전체 DRAM 대역폭을 상당히 증가시킬 것이다.
최근 신드롬 버퍼(402)는 4개의 주요 필드들을 포함하는 완전 연관 구조이다. 64 바이트 캐시 라인을 보유하는 DATA 필드(404), 태그 필드(406), 얼마나 많은 소비자들이 요청기로부터 이러한 DATA 필드를 기다리고 있는지를 표시하는 소비자 카운트 필드(408), 및 마지막으로 데이터가 최근 신드롬 버퍼(402)에 존재하는지 또는 메모리로부터 전이 중인지를 표시하는 준비 필드(410).
대역내 ECC 모듈 DATA 세그먼트는 하나의 판독 및 하나의 기입 포트를 가질 수 있다. 판독 포트는 DATA 영역으로부터 데이터를 판독하기 위해 소비자에 의해 이용될 수 있고, 기입 포트는 데이터를 최근 신드롬 버퍼(402)에 리턴하는 것을 저장하기 위해 사용될 수 있다. 태그 룩업은 어드레스 매치를 위한 단지 하나의 포트를 가질 수 있고, 이것은 다음의 응답들: 엔트리 위치 및 준비 비트와 함께인 HIT 표시 또는 최근 신드롬 버퍼(402)에서의 할당 및 대응하는 엔트리 위치와 함께인 MISS 표시 중 하나를 가질 수 있다. 소비자 카운트 필드(408)는 DATA 포트 판독이 대응하는 엔트리에 대해 발생할 때마다 감소되고, HIT가 그 엔트리에 대해 발생할 때마다 증가된다.
준비 필드(410)는 데이터가 최근 신드롬 버퍼(402)에서 이용가능한지 또는 데이터가 DRAM으로부터 페치되는 프로세스에 있는지를 표시한다. 모든 ECC 보호된 판독에 대해, 일단 ECC 메타-데이터 판독의 어드레스가 생성되면, 액세스하려고 시도하고 있는 캐시 라인이 최근 신드롬 버퍼(402)에 이미 존재하는지를 찾기 위해 최근 신드롬 버퍼 태그들(406)을 룩업한다.
특정 실시예들에서, 기입들은 최근 신드롬 버퍼(402)에 캐싱되지 않을 것이다. 이러한 기입들은 이들이 히트한다면 최근 신드롬 버퍼(402)에서의 라인을 무효화한다. 그러나, 최근 신드롬 버퍼(402)는 판독들 및 기입들 양자 모두에 의해 액세스되는 캐시로서 또한 구현될 수 있다.
도 10은, 특정 실시예들에 따른, 대역내 ECC 압축 모듈(120)에서의 엘리먼트들 및 대역내 ECC 압축 모듈(120) 내에서 수행되는 동작들을 도시하는 블록도(500)를 예시한다. 대역내 ECC 압축 모듈(120)은 어드레싱가능 메모리로의 경로 상에서 메모리 요청기 및 응답기 양자 모두로서 거동한다.
대역내 ECC 압축 모듈(120)은, 입력 포트(502), 및 출력 포트(504), 기입 데이터 버퍼(506), ECC 및 압축 계산 유닛(540), 어드레스 범위 룩업(516), 판독 계류 큐(518), 기입 계류 큐(520), 중재기(526), 최근 신드롬 버퍼 제어기(528), 판독 추적기(532), 판독 데이터 버퍼(538), 최근 신드롬 버퍼(536)(최근 신드롬 버퍼(402)에 대응함) 및 압축해제/ECC 계산 및 정정 유닛(544)으로 이루어진다.
입력 포트(502)를 통해 대역내 ECC 압축 모듈(120)에 진입하는 모든 판독들 및 기입들은, 그 어드레스(517)에 기초하여, 주어진 트랜잭션이 ECC 보호 액세스인지를 먼저 결정하는 ECC 어드레스 룩업(516)을 통과한다. 위험 체크들이 수행되고, 판독 또는 기입을 전송할 큐의 결정이 행해진다.
대역내 ECC 압축 모듈(120)은 판독들 및 기입들에 대해 2개의 별개의 큐들(518, 520)를 유지한다. 이러한 큐들은 ECC 및 비-ECC 트래픽에 걸쳐 조합된다. 모든 큐들에서의 각각의 큐 엔트리는 데이터 요청에 대한 정보를 보유하고; ECC 트랜잭션은 요청이 중재에서 승리한 후에 생성된다. 큐들은 요청이 ECC-보호 트랜잭션인지, 이것이 다른 트랜잭션에 대한 의존성으로 인해 현재 차단되는지를 표시하는 추가적인 메타데이터, 및 스케줄링을 인에이블하는 다른 메타데이터 필드들을 또한 유지한다.
큐들 각각은 가장 오래된, 비-차단 트랜잭션을 주요 대역내 ECC 모듈 중재기(526)에 제시한다. 대역내 ECC 압축 모듈(120) 중재기(526)는 다음으로 중재 정책에 기초하여 한 번에 하나의 요청을 선택한다.
각각의 인플라이트 ECC-보호된 판독 트랜잭션에 대해, 데이터가 압축되지 않으면, 대역내 ECC 압축 모듈(120)은 2개의 독립적인 판독들: 데이터 판독 및 ECC/오버플로우 판독의 완료를 추적한다. 양자 모두의 판독 트랜잭션들에 대한 데이터가 리턴된 후에만 ECC 검출 및 정정 동작들(544)이 수행될 수 있다. 또한, 대역내 ECC 압축 모듈(120)은 각각의 보호된 판독 또는 기입 요청에 새로운 요청 태그를 배정한다. ECC 판독 추적기(532)는 원래의 판독 요청의 태그를 보유하고 2개의 연관된 판독 요청들의 완료를 추적한다.
판독 데이터 버퍼(538)는 ECC 보호된 판독 트랜잭션들 및 보호되지 않은 리턴 데이터에 대한 별개의 스토리지로 이루어진다.
최근 신드롬 버퍼(536)는 가장 최근에 액세스된 ECC 데이터를 저장한다. 최근 신드롬 버퍼(525)에서의 각각의 엔트리는 구성된 보호 입도에 기초하여 32, 16 또는 8개의 캐시라인들에 대한 ECC 데이터를 보유한다.
요청이 대역내 ECC 압축 모듈(120)에 진입한 후, 그 트랜잭션의 어드레스는 그 요청이 ECC-보호 또는 비-보호 영역에 대한 것인지를 결정하기 위해 보호 어드레스 범위들과 비교된다. 다음으로 이러한 요청은 계류 요청 큐들 중 하나에 할당된다.
큐들 각각은 가장 오래된, 비-차단 트랜잭션을 주요 대역내 ECC 압축 모듈(120) 스케줄러에 제시한다. 다음으로 대역내 ECC 압축 모듈(120)은 "트랜잭션(transaction)" 레벨로 스케줄링하는 중재기(526)를 이용한다. ECC-보호된 트래픽에 대해, 압축된 데이터에 대한 트랜잭션은 단일 판독/기입으로 이루어지고, 한편 압축되지 않은 데이터에 대한 트랜잭션은 2개의 판독/기입으로 이루어지고; 보호되지 않은 트래픽에 대해, 트랜잭션은 단일 판독/기입으로 이루어진다. ECC 트랜잭션은, 필요하다면, 중재기에 의해 요청들이 선택된 후에 생성된다.
ECC 데이터 스토리지 영역에 포인팅하는 인커밍 어드레스의 함수로서 ECC 데이터 요청 어드레스가 계산된다.
승자 트랜잭션이 선택된 후, 대역내 ECC 압축 모듈(120) 스케줄러는 이것이 원자적으로 발행되는 것을 보장한다. 이러한 것은, 압축되지 않은 데이터에 대한 ECC-보호 트랜잭션이 선택되면, 데이터에 대한 판독들/기입들 및 ECC 양자 모두가 백-투-백(back-to-back)으로 발행되고, 다른 트랜잭션으로부터의 어떠한 다른 중간 판독/기입도 발행될 수 없다는 것을 본질적으로 의미한다.
RDB(read data buffer)(538)는 모든 인-플라이트 보호 데이터 및 그들의 ECC 값들에 대한 임시 스토리지이다. 요청을 전송하기 전에, 대역내 ECC 압축 모듈(120)은 데이터 및 그 ECC 데이터를 리턴하기 위해 판독 데이터 리턴 버퍼에 미리 할당된 데이터 리턴 슬롯들이 존재하는 것을 보장할 수 있다. 보호되지 않은 트래픽에 대해, 전용 FIFO(first in first out) 데이터 구조들이 존재한다.
ECC 판독 데이터 추적기(532) 구조는 최근 신드롬 버퍼(536)와 록스텝으로 동작하고, 원래의 요청에 대한 헤더 정보를 유지할 뿐만 아니라, 데이터가 리턴되고 소비될 준비가 된 때의 상세사항들을 추적한다.
대역내 ECC 압축 모듈(120)에 진입하는 모든 요청은 그것이 보호 트랜잭션인지를 결정하기 위해 ECC 어드레스 룩업을 통과한다. 보호되는지/보호되지 않는지 및 판독/전체 기입/부분 기입인지에 기초하여, 많은 타입들의 요청들이 존재할 수 있다.
대역내 ECC 압축 모듈(120)에 진입하는 보호되지 않은 판독은, 연령에 기초하는 스케줄링을 지원하는, 판독 계류 큐(518)로 지향된다. 큐에서 기다리는 기입들과의 임의의 의존성들이 존재하는지를 확인하기 위해 기입 계류 큐(520)에 대해 판독 어드레스가 체크된다. 매치가 존재하면, 동일한 어드레스에 대한 모든 이전 기입들이 스케줄링될 때까지 큐에서 더 새로운 기입이 차단된다. 판독의 데이터가 메모리 제어기로부터 리턴할 때, 대역내 ECC 압축 모듈(120)은 데이터가 보호된 트래픽 또는 보호되지 않은 트래픽에 대한 것인지를 결정하기 위해 태그 정보를 체크한다. 보호되지 않은 판독의 경우, 판독 데이터는 ECC 체크 엔진을 우회하고, 원래의 요청기에 전송된다.
대역내 ECC 압축 모듈(120)에 진입하는 보호되지 않은 전체 기입 트랜잭션은 연령에 기초하는 스케줄링을 지원하는 기입 계류 큐(520)에 지향된다. 기입은 동일한 어드레스에 대한 더 오래된 기입들 및 판독들과의 임의의 의존성들을 갖는지를 확인하기 위해 큐에서의 다른 엔트리들에 대해 어드레스를 체크하고, 이러한 의존성이 해결될 때까지 차단된다. 보호되지 않은 기입 및 부분 기입에 대해, 대역내 ECC 압축 모듈(120)은 ECC 생성이 필요하지 않은 포워딩 에이전트로서만 단지 거동한다.
보호되지 않은 판독과 유사하게, 할당 시에, 보호된 판독 트랜잭션은 그가 차단되는 트랜잭션들(데이터/ECC 쌍들) 전부를 찾기 위해 기입 계류 큐(520)를 룩업한다. 보호된, 압축되지 않은 데이터에 대해, 보호된 판독들은 이들이 데이터 및 해당 어드레스에 대한 ECC 요청 양자 모두를 확인할 때까지 차단된 채로 유지되고 스케줄러로부터 나온다. 일단 판독 요청이 중재에 승리하면, 그 요청에 대한 ECC 데이터가 이미 존재하는지를 확인하기 위해 최근 신드롬 버퍼(536)를 체크한다. 누락 시에, 버퍼가 가득 차지 않을 때 새로운 엔트리가 최근 신드롬 버퍼(536)에 할당되거나, 또는 최근 신드롬 버퍼가 가득 차면, 기다리는 소비자들이 없는 최근 신드롬 버퍼(536)에서의 엔트리들 중 하나가 할당해제되고 새로운 엔트리가 해당 위치에서 할당될 것이다. 엔트리 번호가 판독 추적기(532)에 저장된다. 동시에, ECC 데이터 트랜잭션은 병렬로 생성되고 판독 데이터 요청 직후에 전송된다. 히트 시에, 최근 신드롬 버퍼 제어기(528)는 엔트리의 소비자 카운터를 증분시키고 엔트리 번호를 그것이 저장되는 최근 신드롬 버퍼(536)에서 또한 리턴한다. 이러한 엔트리 번호는 ECC 판독 추적기(532)에 저장될 것이고, 대응하는 데이터가 최근 신드롬 버퍼(536)에 존재할 때 이용될 것이다. 이러한 경우에, 최근 신드롬 버퍼가 데이터를 준비시킬 것이기 때문에 ECC 데이터 트랜잭션이 생성되지 않는다.
보호된, 압축되지 않은 데이터에 대한 리턴 경로 상에서, 대역내 ECC 압축 모듈(120)은 ECC 검출/정정 동작들을 수행하기 전에 (최근 신드롬 버퍼에 존재하지 않으면) 데이터 액세스 및 ECC 액세스 양자 모두가 리턴하기를 기다린다. 필요한 ECC 데이터의 준비가 판독 추적기에 의해 추적될 것이다. 대역내 ECC 압축 모듈(120)은 리턴하는 트랜잭션들이 ECC 로직에 발행될 수 있기 전에 유지될 수 있는 판독 데이터 버퍼/판독 추적기 구조에 슬롯들이 존재하는 것을 보장할 필요가 있다. 이러한 이슈를 해결하기 위해, 대역내 ECC 압축 모듈(120)은 스케줄링의 포인트에서 추적기에서의 엔트리를 미리 할당한다. 보호된 판독 데이터가 리턴할 때, 대역내 ECC 압축 모듈(120)은 판독 데이터 버퍼(538)에서의 어느 위치에서 기입되어야 하는지를 식별할 수 있다. ECC 데이터가 대역내 ECC 압축 모듈(120) 최근 신드롬 버퍼(536)에 리턴할 때, 엔트리 번호가 판독 추적기에서의 모든 기다리는 소비자들에게 브로드캐스트될 것이고, 이것이 기다리는 엔트리와 동일한지를 체크할 것이고, 따라서 ECC 데이터가 도착하고 최근 신드롬 버퍼(536)로부터 소비할 준비가 된 때를 추적하는 것이 가능할 것이다. 일단 양자 모두의 액세스들이 판독 데이터 버퍼(538) 및 최근 신드롬 버퍼(536)에 존재하면, 대역내 ECC 압축 모듈(120)은 ECC 계산 및 정정 로직(534)에 요청을 스케줄링한다. 다음으로 정정된 데이터는 적절한 FIFO(First In First Out) 큐에 배치되어 요청기에 전송된다.
보호된 기입 트랜잭션이 대역내 ECC 압축 모듈(120)에 진입할 때, 기입 계류 큐에서 요청 정보가 할당되고, 기입 데이터 버퍼에서 데이터가 저장된다. 트랜잭션이 스케줄링될 때, 보호된 기입에 대한 ECC 요청 어드레스, 값, 및 바이트 인에이블들은 저장되지 않고 온 더 플라이로 생성된다. 대역내 ECC 압축 모듈(120)은 기입 후 기입 및 판독 후 기입 순서화 뿐만 아니라 존재하는 경우 최근 신드롬 버퍼(536)에서의 대응하는 ECC 데이터의 무효화를 보장할 필요가 있다. 이러한 것을 보장하기 위해, 인커밍 기입 요청은 계류 큐들에서의 모든 판독들, 추적기/판독 데이터 버퍼에서 기다리는 모든 미처리 판독들, 기입 계류 큐에서의 모든 기입들 및 최근 신드롬 버퍼에서의 유효한 엔트리들에 대해 체크한다.
대역내 ECC 압축 모듈(120)에서의 보호된 부분 기입 트랜잭션은 본질적으로 2개의 보호 트랜잭션들: 보호된 언더필 판독 트랜잭션 및 보호된 전체 기입 트랜잭션으로 구성된다. 위험 관리는 전체 기입 경우와 동일하다. 그러나, 언더필 판독 트랜잭션은 모든 위험들 및 의존성들 클리어링 없이는 발행될 수 없다는 점에 주목한다. 대역내 ECC 압축 모듈(120) 스케줄러는 그것이 언더필 판독을 발행하고 있다는 것을 알 필요가 있고, 추적기/판독 데이터 버퍼 구조들은 언더필 필드를 설정할 뿐만 아니라, 기입 큐에서의 어느 엔트리가 언더필 판독의 수신자인지를 표시할 필요가 있다. 일단 언더필 판독이 완료되면, 정정된 데이터는 다시 기입 데이터 버퍼에 지향되고, 여기서 이것은 부분 데이터와 병합된다. 이러한 포인트 후에, 기입 계류 큐는 보호된 전체 기입을 대역내 ECC 압축 모듈(120) 스케줄러에 이제 제시할 것이다.
에러 검출 및 정정은 (보호 입도 구성에 기초하여) 메모리에 기입되는 512, 256 또는 128개 데이터 비트들마다 16 비트를 추가하는 것에 의해 행해진다. 각각의 ECC 비트의 생성은 해밍 행렬에 따라 기입된 비트들의 특정 조합을 XOR하는 것에 의해 행해진다. 데이터를 판독할 때, 각각의 ECC 비트를 원래 생성한 동일한 비트들과 XOR 연산하는 것에 의해 16 비트 신드롬이 생성된다.
신드롬 분석은 에러, 정정가능한지, 및 어떻게 정정하는지를 보여준다.
대역내 ECC 압축 모듈(120)은 ECC 에러들을 식별하고 이들을 보고할 필요가 있다. 대역내 ECC 압축 모듈(120)은 ECC 에러가 발생할 때마다 수집기 모듈에 에러 메시지를 생성할 수 있다. 에러 메시지는 에러가 정정가능한 에러인지 또는 정정불가능한 에러인지를 표시하고, 다음으로 시스템 소프트웨어는 에러에 관한 더 많은 상세사항들을 찾기 위해 대응하는 에러 로그 레지스터들을 조사할 수 있다.
추가적인 주목사항들 및 예들
예 1은 전자 장치를 포함하고, 이는, 기판, 및 이러한 기판에 연결되는 로직을 포함하고, 이러한 로직은 데이터의 블록을 압축하기 위한 베이스 값을 결정하고, 이러한 데이터의 블록은 제1 수의 데이터 워드들로 이루어짐 -, 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하고- 제2 수의 데이터 워드들은 제1 수의 데이터 워드들보다 적어도 2개 더 적음 -, 압축된 데이터와 함께 데이터의 블록과 연관된 메타데이터를 데이터의 블록에 저장한다.
예 2는 청구항 1의 장치를 포함하고, 이러한 로직은 추가로 베이스 값으로부터의 각각의 델타 값들로 대체되는 데이터의 블록의 데이터 워드들의 각각의 위치들을 표시하기 위해 메타데이터에 하나 이상의 데이터 인덱스 필드를 설정한다.
예 3은 청구항들 1 내지 2 중 어느 하나의 장치를 포함하고, 이러한 로직은 추가로 베이스 값에 적합한 데이터 값으로 데이터의 블록으로부터 데이터 워드를 식별하고, 베이스 값을 식별된 데이터 워드의 데이터 값으로 설정한다.
예 4는 청구항 3의 장치를 포함하고, 이러한 로직은 추가로 식별된 데이터 워드의 위치를 표시하기 위해 메타데이터에 베이스 인덱스 필드를 설정한다.
예 5는 청구항들 1 내지 4 중 어느 하나의 장치를 포함하고, 이러한 로직은 추가로 베이스 값을 고정된 데이터 워드 위치에서의 데이터 값으로 설정한다.
예 6은 청구항 5의 장치를 포함하고, 이러한 로직은 추가로 베이스 값이 0인지 또는 고정된 데이터 워드 위치에서의 데이터 값인지를 표시하기 위해 메타데이터에 필드를 설정한다.
예 7은 청구항들 1 내지 6 중 어느 하나의 장치를 포함하고, 메타데이터는 에러 정정 코드 정보를 포함한다.
예 8은 전자 메모리 시스템을 포함하고, 이는, 제어기, 제1 수의 데이터 워드들로 이루어지는 데이터의 블록을 저장하는 메모리, 및 제어기 및 메모리에 통신가능하게 연결되는 로직을 포함하고, 이러한 로직은, 데이터의 블록을 압축하기 위한 베이스 값을 결정하고, 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하고, 제2 수의 데이터 워드들은 제1 수의 데이터 워드들보다 적어도 2개 더 적음 -, 압축된 데이터와 함께 데이터의 블록과 연관된 메타데이터를 데이터의 블록에 저장한다.
예 9는 청구항 8의 시스템을 포함하고, 이러한 로직은 추가로 베이스 값으로부터의 각각의 델타 값들로 대체되는 데이터의 블록의 데이터 워드들의 각각의 위치들을 표시하기 위해 메타데이터에 하나 이상의 데이터 인덱스 필드를 설정한다.
예 10은 청구항들 8 내지 9 중 어느 하나의 시스템을 포함하고, 이러한 로직은 추가로 베이스 값에 적합한 데이터 값으로 데이터의 블록으로부터 데이터 워드를 식별하고, 베이스 값을 식별된 데이터 워드의 데이터 값으로 설정한다.
예 11은 청구항 10의 시스템을 포함하고, 이러한 로직은 추가로 식별된 데이터 워드의 위치를 표시하기 위해 메타데이터에 베이스 인덱스 필드를 설정한다.
예 12는 청구항들 8 내지 11 중 어느 하나의 시스템을 포함하고, 이러한 로직은 추가로 베이스 값을 고정된 데이터 워드 위치에서의 데이터 값으로 설정한다.
예 13은 청구항 12의 시스템을 포함하고, 이러한 로직은 추가로 베이스 값이 0인지 또는 고정된 데이터 워드 위치에서의 데이터 값인지를 표시하기 위해 메타데이터에 필드를 설정한다.
예 14는 청구항들 8 내지 13 중 어느 하나의 시스템을 포함하고, 메타데이터는 에러 정정 코드 정보를 포함한다.
예 15는 메모리를 압축하는 방법을 포함하고, 이는, 데이터의 블록을 압축하기 위한 베이스 값을 결정하는 단계- 데이터의 블록은 제1 수의 데이터 워드들로 이루어짐 -, 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하는 단계- 제2 수의 데이터 워드들은 제1 수의 데이터 워드들보다 적어도 2개 더 적음 -, 및 압축된 데이터와 함께 데이터의 블록과 연관된 메타데이터를 데이터의 블록에 저장하는 단계를 포함한다.
예 16은 청구항 15의 방법을 포함하고, 베이스 값으로부터의 각각의 델타 값으로 대체된 데이터의 블록의 데이터 워드들의 각각의 위치를 표시하기 위해 메타데이터에 하나 이상의 데이터 인덱스 필드를 설정하는 단계를 추가로 포함한다.
예 17은 청구항들 15 내지 16 중 어느 하나의 방법을 포함하고, 베이스 값에 적합한 데이터 값으로 데이터의 블록으로부터 데이터 워드를 식별하는 단계, 및 베이스 값을 식별된 데이터 워드의 데이터 값으로 설정하는 단계를 추가로 포함한다.
예 18은 청구항 17의 방법을 포함하고, 식별된 데이터 워드의 위치를 표시하기 위해 메타데이터에 베이스 인덱스 필드를 설정하는 단계를 추가로 포함한다.
예 19는 청구항들 15 내지 18 중 어느 하나의 방법을 포함하고, 고정된 데이터 워드 위치에서의 데이터 값으로 베이스 값을 설정하는 단계를 추가로 포함한다.
예 20은 청구항 19의 방법을 포함하고, 베이스 값이 0인지 또는 고정된 데이터 워드 위치에서의 데이터 값인지를 표시하기 위해 메타데이터에 필드를 설정하는 단계를 추가로 포함한다.
예 21은 청구항들 15 내지 20 중 어느 하나의 방법을 포함하고, 메타데이터는 에러 정정 코드 정보를 포함한다.
예 22는 적어도 하나의 비-일시적 머신 판독가능 매체를 포함하고, 이는, 복수의 명령어들을 포함하고, 이러한 명령어들은, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 컴퓨팅 디바이스로 하여금, 데이터의 블록을 압축하기 위한 베이스 값을 결정하고- 이러한 데이터의 블록은 제1 수의 데이터 워드들로 이루어짐 -, 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하고- 제2 수의 데이터 워드들은 제1 수의 데이터 워드들보다 적어도 2개 더 적음 -, 압축된 데이터와 함께 데이터의 블록과 연관된 메타데이터를 데이터의 블록에 저장하게 한다.
예 23은 청구항 22의 적어도 하나의 비-일시적 머신 판독가능 매체를 포함하고, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 컴퓨팅 디바이스로 하여금 베이스 값으로부터의 각각의 델타 값들로 대체되는 데이터의 블록의 데이터 워드들의 각각의 위치들을 표시하기 위해 메타데이터에 하나 이상의 데이터 인덱스 필드를 설정하게 하는 복수의 추가 명령어들을 포함한다.
예 24는 청구항들 22 내지 23 중 어느 하나의 적어도 하나의 비-일시적 머신 판독가능 매체를 포함하고, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 컴퓨팅 디바이스로 하여금 베이스 값에 적합한 데이터 값으로 데이터의 블록으로부터 데이터 워드를 식별하고, 베이스 값을 식별된 데이터 워드의 데이터 값으로 설정하게 하는 복수의 추가 명령어들을 포함한다.
예 25는 청구항 24의 적어도 하나의 비-일시적 머신 판독가능 매체를 포함하고, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 컴퓨팅 디바이스로 하여금 식별된 데이터 워드의 위치를 표시하기 위해 메타데이터에 베이스 인덱스 필드를 설정하게 하는 복수의 추가 명령어들을 포함한다.
예 26은 청구항들 22 내지 예 25 중 어느 하나의 적어도 하나의 비-일시적 머신 판독가능 매체를 포함하고, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 컴퓨팅 디바이스로 하여금 베이스 값을 고정된 데이터 워드 위치에서의 데이터 값으로 설정하게 하는 복수의 추가 명령어들을 포함한다.
예 27은 청구항 26의 적어도 하나의 비-일시적 머신 판독가능 매체를 포함하고, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 컴퓨팅 디바이스로 하여금 고정된 데이터 워드 위치에서의 데이터 값 또는 베이스 값이 0인지를 표시하기 위해 메타데이터에 필드를 설정하게 하는 복수의 추가 명령어들을 포함한다.
예 28은 청구항들 22 내지 27 중 어느 하나의 적어도 하나의 비-일시적 머신 판독가능 매체를 포함하고, 메타데이터는 에러 정정 코드 정보를 포함한다.
예 29는 메모리 압축 장치를 포함하고, 이는, 데이터의 블록을 압축하기 위한 베이스 값을 결정하는 수단- 데이터의 블록은 제1 수의 데이터 워드들로 이루어짐 -, 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하는 수단- 제2 수의 데이터 워드들은 제1 수의 데이터 워드들보다 적어도 2개 더 적음 -, 및 압축된 데이터와 함께 데이터의 블록과 연관된 메타데이터를 데이터의 블록에 저장하는 수단을 포함한다.
예 30은 청구항 29의 장치를 포함하고, 베이스 값으로부터의 각각의 델타 값으로 대체된 데이터의 블록의 데이터 워드들의 각각의 위치를 표시하기 위해 메타데이터에 하나 이상의 데이터 인덱스 필드를 설정하는 수단을 추가로 포함한다.
예 31은 청구항들 29 내지 30 중 어느 하나의 장치를 포함하고, 베이스 값에 적합한 데이터 값으로 데이터의 블록으로부터 데이터 워드를 식별하는 수단, 및 베이스 값을 식별된 데이터 워드의 데이터 값으로 설정하는 수단을 추가로 포함한다.
예 32는 청구항 31의 장치를 포함하고, 식별된 데이터 워드의 위치를 표시하기 위해 메타데이터에 베이스 인덱스 필드를 설정하는 수단을 추가로 포함한다.
예 33은 청구항들 29 내지 32 중 어느 하나의 장치를 포함하고, 고정된 데이터 워드 위치에서의 데이터 값으로 베이스 값을 설정하는 수단을 추가로 포함한다.
예 34는 청구항 33의 장치를 포함하고, 베이스 값이 0인지 또는 고정된 데이터 워드 위치에서의 데이터 값인지를 표시하기 위해 메타데이터에 필드를 설정하는 수단을 추가로 포함한다.
예 35는 청구항들 29 내지 34 중 어느 하나의 장치를 포함하고, 메타데이터는 에러 정정 코드 정보를 포함한다.
"연결된(coupled)"이라는 용어는, 관심 대상인 컴포넌트들 사이의, 직접적인 또는 간접적인, 임의의 타입의 관계를 지칭하기 위해 본 명세서에 사용될 수 있고, 전기적, 기계적, 유체, 광학, 전자기, 전기기계 또는 다른 접속들에 적용될 수 있다. 또한, "제1(first)", "제2(second)", 등의 용어들은 단지 논의를 용이하게 하기 위해 본 명세서에 사용될 수 있고, 달리 표시되지 않는 한 특정한 시간적 또는 연대순적 의미를 전달하지 않는다.
본 출원 및 청구항들에서 사용되는 바와 같이, "중 하나 이상(one or more of)"이라는 용어에 의해 연결되는 항목들의 리스트는 열거된 용어들의 임의의 조합을 의미할 수 있다. 예를 들어, "A, B, 및 C 중 하나 이상"이라는 문구 및 "A, B, 또는 C 중 하나 이상"이라는 문구는 양자 모두 A; B; C; A 및 B; A 및 C; B 및 C; 또는 A, B 및 C를 의미할 수 있다. 본 명세서에 설명되는 시스템들의 다양한 컴포넌트들은 소프트웨어, 펌웨어, 및/또는 하드웨어 및/또는 이들의 임의의 조합으로 구현될 수 있다. 예를 들어, 본 명세서에 논의되는 시스템들 또는 디바이스들의 다양한 컴포넌트들은, 예를 들어, 스마트폰과 같은, 컴퓨팅 시스템에서 발견될 수 있는 것과 같은 컴퓨팅 SoC의 하드웨어에 의해, 적어도 부분적으로, 제공될 수 있다. 해당 분야에서의 기술자들은 본 명세서에 설명되는 시스템들이 대응하는 도면들에는 묘사되지 않은 추가적인 컴포넌트들을 포함할 수 있다는 점을 인식할 수 있다. 예를 들어, 본 명세서에서 논의되는 시스템은 명료성을 위해 묘사되지 않은 비트 스트림 멀티플렉서 또는 디-멀티플렉서 모듈들 등과 같은 추가적인 컴포넌트를 포함할 수 있다.
본 명세서에 논의되는 예시적인 프로세스들의 구현은 예시되는 순서로 도시되는 모든 동작들의 수행을 포함할 수 있지만, 본 개시내용은 이러한 점에서 제한되지 않으며, 다양한 예들에서, 본 명세서에서의 예시적인 프로세스의 구현은 도시되는 동작들, 예시되는 것과 상이한 순서로 수행되는 동작들, 또는 추가적인 동작들의 서브세트만을 포함할 수 있다.
또한, 본 명세서에 논의되는 동작들 중 임의의 하나 이상은 하나 이상의 컴퓨터 프로그램 제품에 의해 제공되는 명령어들에 응답하여 수행될 수 있다. 이러한 프로그램 제품들은, 예를 들어, 프로세서에 의해 실행될 때, 본 명세서에 설명되는 기능성을 제공할 수 있는 명령어들을 제공하는 신호 전달 매체(signal bearing media)를 포함할 수 있다. 컴퓨터 프로그램 제품은 임의의 형태의 하나 이상의 머신-판독가능 매체에 의해 제공될 수 있다. 따라서, 예를 들어, 하나 이상의 그래픽 처리 유닛(들) 또는 프로세서 코어(들)를 포함하는 프로세서가, 하나 이상의 머신-판독가능 매체에 의해 프로세서에 전달되는 프로그램 코드 및/또는 명령어들 또는 명령어 세트들에 응답하여, 본 명세서에서의 예시적인 프로세스들의 블록들 중 하나 이상을 수행할 수 있다. 일반적으로, 머신-판독가능 매체는 본 명세서에 설명되는 디바이스들 및/또는 시스템들 중 임의의 것으로 하여금 본 명세서에 논의되는 동작들의 적어도 부분들 및/또는 본 명세서에 논의되는 바와 같은 디바이스들, 시스템들, 또는 임의의 모듈 또는 컴포넌트의 임의의 부분들을 구현하게 할 수 있는 프로그램 코드 및/또는 명령어들 또는 명령어 세트들의 형태로 소프트웨어를 전달할 수 있다.
본 명세서에 설명되는 임의의 구현에서 사용되는 바와 같이, "모듈(module)"이라는 용어는 본 명세서에 설명되는 기능성을 제공하도록 구성되는 소프트웨어 로직, 펌웨어 로직, 하드웨어 로직, 및/또는 회로의 임의의 조합을 지칭한다. 소프트웨어는 소프트웨어 패키지, 코드 및/또는 명령어 세트 또는 명령어들로서 구현될 수 있고, 본 명세서에 설명되는 임의의 구현에서 사용되는 바와 같이, "하드웨어(hardware)"는, 예를 들어, 프로그램가능 회로에 의해 실행되는 명령어들을 저장하는 하드와이어드 회로, 프로그램가능 회로, 상태 머신 회로, 고정 기능 회로, 실행 유닛 회로 및/또는 펌웨어를 단독으로 또는 임의의 조합으로 포함할 수 있다. 모듈들은, 집합적으로 또는 개별적으로, 더 큰 시스템의 일부를 형성하는 회로, 예를 들어, IC(integrated circuit), SoC(system on-chip) 등으로서 구현될 수 있다.
다양한 실시예들이 하드웨어 엘리먼트들, 소프트웨어 엘리먼트들, 또는 양자 모두의 조합을 사용하여 구현될 수 있다. 하드웨어 엘리먼트들의 예들로는 프로세서들, 마이크로프로세서들, 회로들, 회로 엘리먼트들(예를 들어, 트랜지스터들, 저항기들, 커패시터들, 인덕터들 등), 집적 회로들, ASIC(application specific integrated circuits), PLD(programmable logic devices), DSP(digital signal processors), FPGA(field programmable gate array), 로직 게이트들, 레지스터들, 반도체 디바이스, 칩들, 마이크로칩들, 칩 셋들 등을 포함할 수 있다. 소프트웨어의 예들은 소프트웨어 컴포넌트들, 프로그램들, 애플리케이션 프로그램들, 컴퓨터 프로그램들, 애플리케이션들, 시스템 프로그램들, 머신 프로그램들, 운영 체제 소프트웨어, 미들웨어, 펌웨어, 소프트웨어 모듈들, 루틴들, 서브루틴들, 함수들, 메소드들, 프로시저들, 소프트웨어 인터페이스들, API(application program interfaces), 명령어 세트들, 컴퓨팅 코드, 컴퓨터 코드, 코드 세그먼트들, 컴퓨터 코드 세그먼트들, 워드들, 값들, 심볼들, 또는 이들의 임의의 조합을 포함할 수 있다. 하드웨어 엘리먼트들 및/또는 소프트웨어 엘리먼트들을 사용하여 실시예가 구현되는지를 결정하는 것은, 원하는 계산 속도, 전력 레벨들, 열 허용한계들, 처리 사이클 예산(processing cycle budget), 입력 데이터 레이트들, 출력 데이터 레이트들, 메모리 리소스들, 데이터 버스 속도들, 비용들, 및 다른 설계 또는 성능 제약들과 같은, 임의의 수의 인자들에 따라 변할 수 있다.
적어도 하나의 실시예의 하나 이상의 양태는 프로세서 내의 다양한 로직을 표현하는 머신-판독가능 매체 상에 저장된 대표적인 명령어들에 의해 구현될 수 있으며, 이는 머신에 의해 판독될 때 이러한 머신으로 하여금 본 명세서에 설명되는 기법들을 수행하는 로직을 제조하게 한다. IP 코어들로서 알려진 이러한 표현들은 유형의(tangible), 머신 판독가능 매체 상에 저장되고, 다양한 고객들 또는 제조 설비들에 공급되어, 로직 또는 프로세서를 실제로 제조하는 제작 머신들로 로딩될 수 있다.
본 명세서에 제시되는 특정 특징들이 다양한 구현들을 참조하여 설명되지만, 이러한 설명은 제한적 의미로 해석되도록 의도되는 것은 아니다. 따라서, 본 명세서에 설명되는 구현들의 다양한 수정들 뿐만 아니라, 다른 구현들- 이들은 본 개시내용이 관련되는 해당 분야에서의 기술자들에게 명백함 -은 본 개시내용의 사상 및 범위 내에 놓이는 것으로 간주된다.
실시예들이 그렇게 설명되는 실시예들로 제한되는 것은 아니고, 첨부된 청구항들의 범위를 벗어나지 않고 수정 및 변경하여 실시될 수 있다는 점이 인정될 것이다. 예를 들어, 위 실시예들은 특징들의 구체적인 조합을 포함할 수 있다. 그러나, 위 실시예들이 이러한 점에서 제한되는 것은 아니며, 다양한 구현들에서, 위 실시예들은, 이러한 특징들의 서브세트만을 수행하는 것, 이러한 특징들의 상이한 순서를 수행하는 것, 이러한 특징들의 상이한 조합을 수행하는 것, 및/또는 명시적으로 열거되는 이러한 특징들 외에 추가적인 특징들을 수행하는 것을 포함할 수 있다. 실시예들의 범위는, 따라서, 첨부된 청구항들을 참조하여, 이러한 청구항들이 자격을 부여받는 등가물들의 전체 범위와 함께 결정되어야 한다.

Claims (25)

  1. 전자 장치로서,
    기판; 및
    상기 기판에 연결되는 로직을 포함하고, 상기 로직은,
    데이터의 블록을 압축하기 위한 베이스 값을 결정하고- 상기 데이터의 블록은 제1 수의 데이터 워드들로 이루어짐 -,
    상기 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 상기 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하고- 상기 제2 수의 데이터 워드들은 상기 제1 수의 데이터 워드들보다 적어도 2개 더 적음 -,
    상기 압축된 데이터와 함께 상기 데이터의 블록과 연관된 메타데이터를 상기 데이터의 블록에 저장하는 장치.
  2. 제1항에 있어서, 상기 로직은 추가로,
    상기 베이스 값으로부터의 상기 각각의 델타 값들로 대체되는 상기 데이터의 블록의 데이터 워드들의 각각의 위치들을 표시하기 위해 상기 메타데이터에 하나 이상의 데이터 인덱스 필드를 설정하는 장치.
  3. 제1항 또는 제2항에 있어서, 상기 로직은 추가로,
    상기 베이스 값에 적합한 데이터 값으로 상기 데이터의 블록으로부터 데이터 워드를 식별하고;
    상기 베이스 값을 상기 식별된 데이터 워드의 데이터 값으로 설정하는 장치.
  4. 제3항에 있어서, 상기 로직은 추가로,
    상기 식별된 데이터 워드의 위치를 표시하기 위해 상기 메타데이터에 베이스 인덱스 필드를 설정하는 장치.
  5. 제1항 또는 제2항에 있어서, 상기 로직은 추가로,
    상기 베이스 값을 고정된 데이터 워드 위치에서의 데이터 값으로 설정하는 장치.
  6. 전자 메모리 시스템으로서,
    제어기;
    제1 수의 데이터 워드들로 이루어지는 데이터의 블록을 저장하는 메모리; 및
    상기 제어기 및 상기 메모리에 통신가능하게 연결되는 로직을 포함하고, 상기 로직은,
    상기 데이터의 블록을 압축하기 위한 베이스 값을 결정하고,
    상기 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 상기 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하고- 상기 제2 수의 데이터 워드들은 상기 제1 수의 데이터 워드들보다 적어도 2개 더 적음 -,
    상기 압축된 데이터와 함께 상기 데이터의 블록과 연관된 메타데이터를 상기 데이터의 블록에 저장하는 시스템.
  7. 제6항에 있어서, 상기 로직은 추가로,
    상기 베이스 값으로부터의 상기 각각의 델타 값들로 대체되는 상기 데이터의 블록의 데이터 워드들의 각각의 위치들을 표시하기 위해 상기 메타데이터에 하나 이상의 데이터 인덱스 필드를 설정하고;
    상기 베이스 값에 적합한 데이터 값으로 상기 데이터의 블록으로부터 데이터 워드를 식별하고;
    상기 베이스 값을 상기 식별된 데이터 워드의 데이터 값으로 설정하는 시스템.
  8. 제6항 또는 제7항에 있어서, 상기 로직은 추가로,
    상기 베이스 값을 고정된 데이터 워드 위치에서의 데이터 값으로 설정하는 시스템.
  9. 제8항에 있어서, 상기 로직은 추가로,
    상기 베이스 값이 0인지 또는 상기 고정된 데이터 워드 위치에서의 데이터 값인지를 표시하기 위해 상기 메타데이터에 필드를 설정하는 시스템.
  10. 제6항 또는 제7항에 있어서, 상기 메타데이터는 에러 정정 코드 정보를 포함하는 시스템.
  11. 메모리를 압축하는 방법으로서,
    데이터의 블록을 압축하기 위한 베이스 값을 결정하는 단계- 상기 데이터의 블록은 제1 수의 데이터 워드들로 이루어짐 -;
    상기 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 상기 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하는 단계- 상기 제2 수의 데이터 워드들은 상기 제1 수의 데이터 워드들보다 적어도 2개 더 적음 -; 및
    상기 압축된 데이터와 함께 상기 데이터의 블록과 연관된 메타데이터를 상기 데이터의 블록에 저장하는 단계를 포함하는 방법.
  12. 제11항에 있어서, 추가로,
    상기 데이터의 블록의 데이터 워드의 위치를 표시하기 위해 상기 메타데이터에 베이스 인덱스 필드를 설정하는 단계를 포함하는 방법.
  13. 제11항 또는 제12항에 있어서, 추가로,
    상기 베이스 값을 고정된 데이터 워드 위치에서의 데이터 값으로 설정하는 단계를 포함하는 방법.
  14. 제13항에 있어서, 추가로,
    상기 베이스 값이 0인지 또는 상기 고정된 데이터 워드 위치에서의 데이터 값인지를 표시하기 위해 상기 메타데이터에 필드를 설정하는 단계를 포함하는 방법.
  15. 제11항 또는 제12항에 있어서, 상기 메타데이터는 에러 정정 코드 정보를 포함하는 방법.
  16. 적어도 하나의 비-일시적 머신 판독가능 매체로서, 복수의 명령어들을 포함하고, 상기 명령어들은, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 상기 컴퓨팅 디바이스로 하여금,
    데이터의 블록을 압축하기 위한 베이스 값을 결정하고- 상기 데이터의 블록은 제1 수의 데이터 워드들로 이루어짐 -;
    상기 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 상기 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하고- 상기 제2 수의 데이터 워드들은 상기 제1 수의 데이터 워드들보다 적어도 2개 더 적음 -;
    상기 압축된 데이터와 함께 상기 데이터의 블록과 연관된 메타데이터를 상기 데이터의 블록에 저장하게 하는 적어도 하나의 비-일시적 머신 판독가능 매체.
  17. 제16항에 있어서, 복수의 추가의 명령어들을 포함하고, 상기 명령어들은, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 상기 컴퓨팅 디바이스로 하여금,
    상기 베이스 값으로부터의 상기 각각의 델타 값들로 대체되는 상기 데이터의 블록의 데이터 워드들의 각각의 위치들을 표시하기 위해 상기 메타데이터에 하나 이상의 데이터 인덱스 필드를 설정하게 하는 적어도 하나의 비-일시적 머신 판독가능 매체.
  18. 제16항 내지 제17항 중 어느 한 항에 있어서, 복수의 추가의 명령어들을 포함하고, 상기 명령어들은, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 상기 컴퓨팅 디바이스로 하여금,
    상기 베이스 값에 적합한 데이터 값으로 상기 데이터의 블록으로부터 데이터 워드를 식별하고;
    상기 베이스 값을 상기 식별된 데이터 워드의 데이터 값으로 설정하게 하는 적어도 하나의 비-일시적 머신 판독가능 매체.
  19. 제18항에 있어서, 복수의 추가의 명령어들을 포함하고, 상기 명령어들은, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 상기 컴퓨팅 디바이스로 하여금,
    상기 식별된 데이터 워드의 위치를 표시하기 위해 상기 메타데이터에 베이스 인덱스 필드를 설정하게 하는 적어도 하나의 비-일시적 머신 판독가능 매체.
  20. 제16항 내지 제17항 중 어느 한 항에 있어서, 복수의 추가의 명령어들을 포함하고, 상기 명령어들은, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 상기 컴퓨팅 디바이스로 하여금,
    상기 베이스 값을 고정된 데이터 워드 위치에서의 데이터 값으로 설정하게 하는 적어도 하나의 비-일시적 머신 판독가능 매체.
  21. 메모리 압축 장치로서,
    데이터의 블록을 압축하기 위한 베이스 값을 결정하는 수단- 상기 데이터의 블록은 제1 수의 데이터 워드들로 이루어짐 -;
    상기 데이터의 블록으로부터의 제2 수의 데이터 워드들로부터의 원래의 값들을 상기 베이스 값으로부터의 각각의 델타 값들로 대체하여 압축된 데이터를 제공하는 수단- 상기 제2 수의 데이터 워드들은 상기 제1 수의 데이터 워드들보다 적어도 2개 더 적음 -; 및
    상기 압축된 데이터와 함께 상기 데이터의 블록과 연관된 메타데이터를 상기 데이터의 블록에 저장하는 수단을 포함하는 장치.
  22. 제21항에 있어서, 추가로,
    상기 베이스 값에 적합한 데이터 값으로 상기 데이터의 블록으로부터 데이터 워드를 식별하는 수단;
    상기 베이스 값을 상기 식별된 데이터 워드의 데이터 값으로 설정하는 수단; 및
    상기 식별된 데이터 워드의 위치를 표시하기 위해 상기 메타데이터에 베이스 인덱스 필드를 설정하는 수단을 포함하는 장치.
  23. 제21항 또는 제22항에 있어서, 추가로,
    상기 베이스 값을 고정된 데이터 워드 위치에서의 데이터 값으로 설정하는 수단을 포함하는 장치.
  24. 제23항에 있어서, 추가로,
    상기 베이스 값이 0인지 또는 상기 고정된 데이터 워드 위치에서의 데이터 값인지를 표시하기 위해 상기 메타데이터에 필드를 설정하는 수단을 포함하는 장치.
  25. 제21항 또는 제22항에 있어서, 상기 메타데이터는 에러 정정 코드 정보를 포함하는 장치.
KR1020210171799A 2021-01-29 2021-12-03 저-복잡도 커버리지-기반 압축 KR20220110055A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/163,179 US20210255808A1 (en) 2021-01-29 2021-01-29 Low-complexity coverage-based compression
US17/163,179 2021-01-29

Publications (1)

Publication Number Publication Date
KR20220110055A true KR20220110055A (ko) 2022-08-05

Family

ID=77272077

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210171799A KR20220110055A (ko) 2021-01-29 2021-12-03 저-복잡도 커버리지-기반 압축

Country Status (4)

Country Link
US (1) US20210255808A1 (ko)
KR (1) KR20220110055A (ko)
CN (1) CN114816830A (ko)
DE (1) DE102021129138A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11422879B1 (en) * 2021-03-18 2022-08-23 Xilinx, Inc. Universal in-band error masking

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7133228B2 (en) * 2003-10-10 2006-11-07 Seagate Technology Llc Using data compression to achieve lower linear bit densities on a storage medium
US11321324B2 (en) * 2019-12-31 2022-05-03 Huawei Technologies Co., Ltd. Systems and methods for cross-region data management in an active-active architecture
SE544557C2 (en) * 2020-12-01 2022-07-12 Zeropoint Tech Ab Systems, methods and devices for exploiting value similarity in computer memories

Also Published As

Publication number Publication date
CN114816830A (zh) 2022-07-29
US20210255808A1 (en) 2021-08-19
DE102021129138A1 (de) 2022-08-04

Similar Documents

Publication Publication Date Title
EP1449082B1 (en) Error correcting memory and method of operating same
US10642685B2 (en) Cache memory and processor system
US7650557B2 (en) Memory scrubbing of expanded memory
CN109416666B (zh) 用于存储和读取多个缓存行的装置和方法
US20190332469A1 (en) Address range based in-band memory error-correcting code protection module with syndrome buffer
US11726907B2 (en) Method and system for in-line ECC protection
US10635589B2 (en) System and method for managing transactions
US20200363998A1 (en) Controller and persistent memory shared between multiple storage devices
US20140164828A1 (en) Consistency of data in persistent memory
US10725849B2 (en) Server RAS leveraging multi-key encryption
US6591393B1 (en) Masking error detection/correction latency in multilevel cache transfers
WO2023150017A1 (en) Data corruption tracking for memory reliability
KR20220110055A (ko) 저-복잡도 커버리지-기반 압축
KR20230070231A (ko) 신뢰할 수 있는 저전압 캐시 동작을 위한 마스킹된 결함 검출
US8656214B2 (en) Dual ported replicated data cache
US20210405889A1 (en) Data rollback for tiered memory and storage
US20200264800A1 (en) Erasure coding write hole closure for solid-state drive (ssd) erasure coding
US20240143206A1 (en) Memory controller to perform in-line data processing and efficiently organize data and associated metadata in memory
US11829242B2 (en) Data corruption tracking for memory reliability
US10852988B2 (en) On access memory zeroing
JP2023522544A (ja) 単方向コマンドによるオン-ssdの消失訂正符号化