KR20180023804A - 전기적으로 버퍼링된 nv-dimm 및 그에 사용하는 방법 - Google Patents

전기적으로 버퍼링된 nv-dimm 및 그에 사용하는 방법 Download PDF

Info

Publication number
KR20180023804A
KR20180023804A KR1020170072551A KR20170072551A KR20180023804A KR 20180023804 A KR20180023804 A KR 20180023804A KR 1020170072551 A KR1020170072551 A KR 1020170072551A KR 20170072551 A KR20170072551 A KR 20170072551A KR 20180023804 A KR20180023804 A KR 20180023804A
Authority
KR
South Korea
Prior art keywords
data
host
controller
command
memory
Prior art date
Application number
KR1020170072551A
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 KR20180023804A publication Critical patent/KR20180023804A/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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/22Read-write [R-W] timing or clocking circuits; Read-write [R-W] control signal generators or management 
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • 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/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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/0683Plurality of storage devices
    • 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/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/26Sensing or reading circuits; Data output circuits
    • 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/1008Correctness of operation, e.g. memory ordering
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1072Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers for memories with random access ports synchronised on clock signal pulse trains, e.g. synchronous memories, self timed memories

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)
  • Memory System (AREA)
  • Dram (AREA)

Abstract

전기적으로 버퍼링된 NV-DIMM 및 그에 사용하는 방법이 제공된다. 일 실시예에서, 복수의 비휘발성 메모리 디바이스들; 복수의 비휘발성 메모리 디바이스들과 통신하는 제어기; 제어기와 통신하고, 제어기와 입출력 버스 사이에서 송신되는 데이터를 저장하도록 구성된 복수의 데이터 버퍼들; 및 호스트로부터 송신된 명령들 및 주소들을 저장하도록 구성되고 복수의 데이터 버퍼들 안으로의 그리고 밖으로의 데이터 흐름을 동기화하도록 추가로 구성된 명령 및 주소 버퍼를 포함하는 저장 시스템이 제공된다.

Description

전기적으로 버퍼링된 NV-DIMM 및 그에 사용하는 방법{ELECTRICALLY-BUFFERED NV-DIMM AND METHOD FOR USE THEREWITH}
관련 출원의 상호 참조
본 출원은 2016년 8월 26일에 출원된 미국 특허 출원 제62/380,217호 - 이로써 본 명세서에 참고로 포함됨 - 를 우선권 주장한다.
많은 컴퓨터 시스템들은 데이터를 저장하기 위해 CPU(central processing unit)에 접속된 하나 이상의 DIMM(dual in-line memory module)들을 사용한다. 일부 DIMM들은 DRAM(dynamic random-access memory) 칩들을 포함한다. 그렇지만, DRAM은 비교적 비싸고, 비교적 많은 양의 전력을 필요로 하며, 프로세서 능력에 부합하는 속도로 용량을 확장시키지 못하고 있는데, 이는 방대한 양의 데이터가 저장되는 데이터 센터들에 있는 엔터프라이즈 및 하이퍼스케일 시스템들과 같은, 서버들에서 사용될 때 바람직하지 않을 수 있다. 이 문제들을 해결하기 위해, 휘발성 DRAM 칩들을 비휘발성 메모리 디바이스들로 대체하는 비휘발성 DIMM(NV-DIMM)들이 개발되었다. DRAM 기반 DIMM들에 비해, NV-DIMM들은, 특히 정전이나 시스템 작동중지(system crash)의 경우에, 기가 바이트당 보다 낮은 비용, 보다 낮은 전력 소비, 그리고 보다 긴 데이터 보존을 제공할 수 있다. 일부 DRAM 기반 DIMM들과 같이, 일부 NV-DIMM들은, DDR(double-data rate) 인터페이스와 같은, 클록-데이터 병렬 인터페이스를 통해 통신하도록 설계된다.
도 1은 일 실시예의 호스트 및 저장 시스템들의 블록도.
도 2a는 저장 시스템이 NV-DIMM(non-volatile dual in-line memory module)의 형태를 취하는 일 실시예의 저장 시스템의 블록도.
도 2b는 분산 제어기를 갖는 일 실시예의 저장 시스템의 블록도.
도 3은 일 실시예의 호스트와 저장 시스템들 간의 신호들을 나타낸 블록도.
도 4는 DRAM DIMM으로부터 데이터를 판독하는 방법의 플로우차트.
도 5는 DRAM DIMM으로부터 데이터를 판독하는 방법의 타이밍도.
도 6은 호스트가 판독 명령을 송신하는 일 실시예의 방법의 플로우차트.
도 7은 호스트가 송신 명령을 이용함으로써 판독 데이터의 반환을 요청하고 수신된 데이터를 처리하는 일 실시예의 방법의 플로우차트.
도 8a 및 도 8b는 일 실시예의 저장 시스템으로부터 데이터를 판독하는 비결정적 방법의 타이밍도.
도 8c는 일 실시예의 저장 시스템에 데이터를 기입하는 비결정적 방법의 타이밍도.
도 9는 일 실시예의 저장 시스템의 제어기의 블록도.
도 10은 일 실시예의 저장 시스템으로부터 데이터를 판독하는 방법의 플로우차트.
도 11은 일 실시예의 저장 시스템에 데이터를 기입하는 방법의 플로우차트.
도 12 및 도 13은, 각각, DRAM 기반 DIMM의 판독 및 기입 흐름들을 나타낸 도면.
도 14는 DRAM 기반 DIMM에서의 데이터 흐름의 내부 상태들을 나타낸 도면.
도 15는 저장 시스템이 NV-DIMM(non-volatile dual in-line memory module)의 형태를 취하는 일 실시예의 저장 시스템의 블록도.
도 16은 일 실시예의 저장 시스템의 판독 동작을 나타낸 블록도.
도 17은 일 실시예의 저장 시스템의 기입 동작을 나타낸 블록도.
도 18a 및 도 18b는 일 실시예의 판독 동작의 플로우차트.
도 19a 및 도 19b는 일 실시예의 기입 동작의 플로우차트.
도 20은 일 실시예의 클록 속도의 변화를 나타낸 도면.
도 21은 데이터 버퍼의 블록도.
도 22는 일 실시예의 데이터 버퍼의 블록도.
도 23a는 비휘발성 메모리 디바이스들이 NVM 제어기를 통하지 않고 데이터 버퍼들에 연결되는 일 실시예의 저장 시스템의 블록도.
도 23b는 일 실시예의 등록 클록 드라이버(registered clock driver)(RCD)의 블록도.
개요
서론으로서, 이하의 실시예들은 전기적으로 버퍼링된(electrically-buffered) NV-DIMM 및 그에 사용하는 방법에 관한 것이다. 일 실시예에서, 복수의 비휘발성 메모리 디바이스들; 복수의 비휘발성 메모리 디바이스들과 통신하는 제어기; 제어기와 통신하며, 제어기와 입출력 버스 사이에서 송신되는 데이터를 저장하도록 구성된 복수의 데이터 버퍼들; 및 호스트로부터 송신된 명령들 및 주소들을 저장하도록 구성되고 복수의 데이터 버퍼들 안으로의 그리고 밖으로의 데이터 흐름을 동기화하도록 추가로 구성된 명령 및 주소 버퍼를 포함하는 저장 시스템이 제공된다.
일부 실시예들에서, 제어기는, 판독 및/또는 기입 명령들이 호스트로부터 수신되는 순서와 상이한 순서로 처리될 수 있도록, 판독 및/또는 기입 명령들을 식별자들과 연관시키도록 구성된다.
일부 실시예들에서, 명령 및 주소 버퍼는 등록 클록 드라이버를 포함한다.
일부 실시예들에서, 복수의 데이터 버퍼들은 랜덤 액세스 메모리를 포함한다.
일부 실시예들에서, 명령 및 주소 버퍼는 호스트로부터 수신되는 클록의 주파수를 감소시키도록 추가로 구성된다.
일부 실시예들에서, 명령 및 주소 버퍼는 대역폭 변환을 수행하도록 추가로 구성된다.
일부 실시예들에서, 저장 시스템의 물리 및 명령 계층들은 DRAM DIMM 통신 프로토콜과 호환가능하도록 구성된다.
일부 실시예들에서, 저장 시스템의 물리 및 명령 계층들은 UDIMM(unbuffered DIMM), RDIMM(registered DIMM), 및 LRDIMM(load-reduced DIMM) 중 하나 이상과 호환가능하도록 구성된다.
일부 실시예들에서, 제어기는 호스트에 의해 요청된 데이터가 호스트로 송신될 준비가 된 후에 준비 신호(ready signal)를 송신하고; 호스트로부터 송신 명령을 수신하며; 호스트로부터 송신 명령을 수신하는 것에 응답하여, 데이터를 호스트로 송신하도록 추가로 구성된다.
일부 실시예들에서, 일정 시간 지연 이후에(after a time delay) 데이터가 호스트로 송신되고, 여기서 시간 지연은 호스트에 사용되는 통신 프로토콜에 기초하여 선택된다.
일부 실시예들에서, 제어기는 클록-데이터 병렬 인터페이스를 사용하여 호스트와 통신하도록 구성된다.
일부 실시예들에서, 클록-데이터 병렬 인터페이스는 더블 데이터 레이트(double data rate)(DDR) 인터페이스를 포함한다.
일부 실시예들에서, 복수의 비휘발성 메모리 디바이스들 중 적어도 하나는 3차원 메모리를 포함한다.
다른 실시예들이 가능하고, 실시예들 각각은 단독으로 또는 서로 조합하여 사용될 수 있다.
일 실시예의 일 구현에 대한 일반 서론
앞서 배경기술 섹션에서 설명된 바와 같이, DIMM(dual in-line memory module)들은 데이터를 저장하기 위해 호스트의 CPU(central processing unit)에 접속될 수 있다. NV-DIMM(non-volatile dual in-line memory module)들은 표준의 DIMM들 상의 휘발성 DRAM 칩들을, NAND와 같은, 비휘발성 메모리 디바이스들로 대체하기 위해 개발되었다. DRAM 기반 DIMM들에 비해, NV-DIMM들은, 특히 정전이나 시스템 작동중지의 경우에, 기가 바이트당 보다 낮은 비용, 보다 낮은 전력 소비, 그리고 보다 긴 데이터 보존을 제공할 수 있다. 일부 DRAM 기반 DIMM들과 같이, 일부 NV-DIMM들은, DDR(double-data rate) 인터페이스와 같은, 클록-데이터 병렬 인터페이스를 통해 통신하도록 설계된다.
그렇지만, DRAM 기반 DIMM들에 적절한 기존의 표준들은 NV-DIMM들에 적절하지 않을 수 있다. 예를 들어, 일부 기존의 표준들은 판독 및 기입 동작들이 명시된("결정적") 양의 시간 내에 완료될 것을 요구한다. 판독 및 기입 동작들을 명시된 양의 시간 내에 완료하는 것이 전형적으로 DRAM 메모리에 대해서는 문제가 되지 않지만, 비휘발성 메모리를 판독하고 그에 기입하는 메커니즘들은 명시된 양의 시간을 초과하는 지연들을 야기할 수 있다. 즉, DRAM 기반 DIMM 프로토콜들은, 비휘발성 메모리가 제공할 수 없을지도 모르는, 일관성있고 예측가능하며 빠른 응답들을 기대한다. 이것을 고려하기 위해, 일부 최근 표준들(예컨대, JEDEC의 NVDIMM-P 표준)은 저장 시스템과 호스트 간의 통신을 "느슨하게" 하기 위해 "비결정적" 판독 및 기입 동작들을 허용한다. 이러한 표준들에 따르면, NV-DIMM에 대한 판독 및 기입 동작들이 특정 양의 시간 내에 완료될 필요가 없다. 그 대신에, 판독 동작의 경우에, NV-DIMM은 요청된 데이터가 준비될 때 호스트에 통보하고, 따라서 호스트는 이어서 그것을 검색할 수 있다. 기입 동작의 경우에, 호스트는, 비휘발성 메모리 디바이스가 핸들링할 수 있는 것보다 더 많은 기입 명령들을 수신하지 않도록 하기 위해, 특정 개수 초과의 기입 명령들을 미처리된(outstanding) 상태로 갖지 않도록 제한될 수 있다.
프로토콜 레벨에서 비결정적으로 타이밍이 결정되는 동작(non-deterministically timed operation)들을 허용하는 접근법은 비휘발성 메모리들의 예측불가능한 속성을 처리하는 하나의 가능한 접근법에 불과하다. 다른 접근법들은 DDR 표준에 대한 비결정적 수정들을 이용하지 않는다. 그 대신에, 그들은 종래의 DDR 프리미티브(DDR primitive)들로부터 복합 판독 및 기입 절차들을 구성하는 소프트웨어 접근법들에 의존한다. 각각의 DDR 프리미티브는 비휘발성 메모리 자체에의 직접 액세스에 대응할 수 있거나, 제어 레지스터들 또는 버퍼들과 같은, 중간 회로 요소들의 사용을 통해 수행되는 간접적인 동작들에 대응할 수 있다. 판독 또는 기입 알고리즘들 자체가 완료하기 위해 명시되지 않은 수의 반복들 또는 DRR 명령들을 필요로 할 수 있지만 - 그리고 따라서 특정 기간 내에 완료되지 않을 수 있음 -, 각각의 개별 프리미티브 DDR 동작은 보통의 (결정적으로 타이밍이 결정되는(deterministically-timed)) DDR 표준들에 의해 설정된 잘 정의된 제한 시간들 내에 완료된다.
하기의 실시예들 중 일부는 NV-DIMM이, 종래의 DRAM 기반 DIMM 표준들 하에서는 수행할 시간이 없을 수 있는, 시간이 많이 걸리는 동작들을 수행할 수 있게 하기 위해 최근 표준의 비결정적 측면을 이용한다. 이 동작들은 때때로 본원에서 호스트의 관점에서 미결정된 지속기간을 갖는 동작들이라고 지칭될 것이며, 메모리 및 데이터 관리 동작들을 포함할 수 있다. 이 메모리 및 데이터 관리 동작들은 NV-DIMM의 동작에 중요할 수 있다. 예를 들어, DRAM과 비교하여, 비휘발성 메모리 디바이스는 보다 낮은 내구성(즉, 고장전 기입 횟수)을 가지며 (예컨대, 비트들이 부정확하게 저장되게 하는 내부 메모리 오류들로 인해) 데이터를 보다 덜 신뢰성있게 저장할 수 있다. NV-DIMM에서 DRAM 대체물로서 사용될 가능성이 있는 최근의 비휘발성 메모리 기술들에서 이 문제들이 더욱 두드러지게 될 수 있다. 이에 따라, 일 실시예에서, NV-DIMM은, 종래의 DRAM 기반 DIMM 표준들 하에서 할당된 시간 내에 수행하지 못할 수 있는 메모리 및 데이터 관리 동작들(예컨대, 웨어 레벨링(wear leveling) 및 오류 정정 동작들)과 같은, 호스트의 관점에서 미결정된 지속시간을 갖는 동작들을 수행해야 한다는 "스트레스 하에(under the gun)" 있지 않는 것을 이용한다.
이 서론이 일 실시예의 하나의 특정 구현을 논의하는 것에 불과하다는 것과, 하기의 단락들에서 논의되는 바와 같이, 다른 구현들 및 실시예들이 사용될 수 있다는 것에 유의해야 한다. 게다가, 이 실시예들 중 일부가 호스트의 CPU에 접속된 NV-DIMM과 관련하여 논의될 것이지만, 임의의 유형의 저장 시스템이 임의의 적당한 유형의 환경에서 사용될 수 있다는 것을 잘 알 것이다. 그에 따라, 본원에서 논의되는 특정 아키텍처들 및 프로토콜들은, 청구항들에서 명시적으로 언급되지 않는 한, 청구항으로 해석되어서는 안 된다.
클록-데이터 병렬 인터페이스들 및 새로운 프로토콜들에 대한 전반적 논의
클록-데이터 병렬 인터페이스들은 디지털화된 데이터와 명령들을 임의의 2개의 디바이스들 사이에서 전송하는 간단한 방법이다. 데이터 또는 명령들을 하나의 디바이스로부터 다른 디바이스로 전달하는 임의의 전송 라인은 데이터 및 명령 버스들에서의 변화들을 샘플링하기 위한 시간 기준을 제공하는 별도의 "클록" 전송 라인을 수반한다. 일부 실시예들에서, 인터페이스가 비활성이고, 어떤 데이터 또는 명령들도 전송하지 않을 때 클록이 비활성화될 수 있다. 이것은 비활성일 때 전력 소비를 줄이는 편리한 방법을 제공한다. 클록-데이터 병렬 인터페이스들의 일부 실시예들에서, 클록은 단일 종단형 전송 라인(single-ended transmission-line)이며, 이는 클록이 하나의 부가 전송 라인 - 그의 전압이 CPU와 메모리 디바이스들 사이에 있는 많은 전송 라인들에 의해 공유되는 공통 기준 전압과 비교됨 - 로 구성된다는 것을 의미한다. 다른 실시예들에서, 타이밍 기준은 포지티브 기준 클록(positive clock reference)과 상보 클록(clock complement) 둘 다를 갖는 차동 클록(differential clock)일 수 있고, 차동 클록은 포지티브 클록의 매 로우-하이 전압 전환 - 클록의 "상승 에지"라고 하는 이벤트 - 마다 동기하여 로우 전압으로 전환하고, 이와 달리 상보 클록은 포지티브 기준 클록의 매 하이-로우 전압 천이 - 클록의 "하강 에지"라고 하는 이벤트 - 마다 하이 전압 상태로 전환한다. 클록-데이터 병렬 인터페이스들은 클록과 함께 몇 비트의 데이터가 송신되는지에 의해 종종 분류된다. "싱글 데이터 레이트(single-data rate)" 또는 SDR 인터페이스들에서, 명령 또는 데이터 버스들은 클록 사이클당 한 번, 종종 기준 클록의 상승 에지에서 천이한다. "더블 데이터 레이트(double-data rate)" 또는 DDR 인터페이스들에서, 명령 및 데이터 버스들은, 명령 및 데이터 버스들이 주기당 두 번 - 클록의 상승 에지에서 한 번 그리고 클록의 하강 에지에서 한 번 - 전환할 수 있게 하는 것에 의해, 클록 주기당 2배의 데이터를 송신한다. 게다가, 클록당 4개의 데이터 또는 명령 천이들을 허용하는, QDR(quad-data rate) 프로토콜들이 있다. 전형적으로, 클록-데이터 병렬 인터페이스들은 간단하고, 효율적이고 낮은 지연시간을 가지며, 수신기 회로부는 로직 플립 플롭들의 단일 뱅크만큼 간단할 수 있다. 그렇지만, "물리 통신 계층" 또는 간단히 "Phy 계층"이라고 하는 신호 컨디셔닝 회로(signal conditioning circuit)들의 컬렉션에 의해 핸들링되는 많은 작업들 중 하나인, 새로 래칭된 데이터를 디바이스들 자체의 내부 클록과 동기화시킬 필요성에 의해 유발되는 부가의 복잡성이 있을 수 있다.
직렬 인터페이스들은, 이와 달리, 전압을 규칙적인 시간 간격으로 그러나 명령들 및/또는 데이터도 통신하도록 하는 패턴으로 전환하는 단일의 전기 전송 라인으로부터 기준 시간(time-reference)을 추출하기 위해 전형적으로 클록-데이터 복구 프로세스들에 의존한다(예컨대, 일부 실시예들에서, 증가된 대역폭을 위해 많은 상이한 라인들이 병렬로 지나가고, 따라서 각각의 라인은 명령 전체, 데이터 시퀀스 전체, 또는 명령 또는 데이터 시퀀스의 단지 일부분에 대한 데이터를 인코딩할 수 있다). 클록과 데이터를 동일한 물리적 전송 라인에 인코딩하는 것은 클록과 데이터 또는 명령 라인들 사이의 불일치된 지연들에 의해 야기되는 타이밍 불확실성을 감소시키고 따라서 초고대역폭 통신을 위해 25GHz 이상의 클록 주파수들을 가능하게 한다. 그렇지만, 이러한 인터페이스들은 일부 단점들도 갖는다. 클록-데이터 복구의 속성으로 인해, 통신 당사자들 사이에 추론된 기준 클록의 동기화를 유지하기 위해 전송 라인이 계속 활성으로 있어야만 한다. 절전 모드들이 가능하지만, 활성 모드에 재진입하는 것은 상당한 재훈련 지연(retraining delay)들을 필요로 한다. 더욱이, 클록-데이터 복구의 바로 그 속성은 각각의 메시지를 디코딩하는 데 약간 더 많은 시간을 필요로 하고, 잘 훈련된 직렬 링크에 대해서도 단방향 통신 지연들이 일반적이다. 이것은 임의의 데이터 요청에 추가 지연시간을 부가한다.
컴퓨터 CPU들과 그들의 대응하는 메모리 디바이스들 사이의 인터페이스는 전력 및 지연시간 둘 다의 최적화가 요망되는 인터페이스의 일 예이다. 따라서, Hybrid Memory Cube와 같은, 고대역폭 직렬 CPU-메모리 인터페이스들이 존재하지만, CPU들과 메모리 디바이스들 사이의 최신의 인터페이스들의 대부분은 여전히 클록-데이터 병렬 인터페이스들을 사용한다. 예를 들어, SDRAM(synchronous dynamic random access memory)은, 각각이 1 비트의 명령 시퀀스 정보를 인코딩하는, 복수의 전송 라인들로 이루어진 명령 버스 상의 명령들을 동기화하기 위해 단일의 클록을 사용한다. 실시예에 따라, SDRAM 명령 시퀀스 내의 명령들은 장래의 판독 또는 기입을 위해 2차원 데이터 어레이에서의 셀들의 행을 활성화시키는 것; 현재 활성인 행에서 어떤 열들을 판독하는 것; 현재 활성인 행에서 어떤 열들을 기입하는 것; 판독 또는 기입을 위한 셀들의 상이한 뱅크를 선택하는 것; 메모리 디바이스의 거동의 측면들을 변경하기 위해 메모리 모드 레지스터들에 어떤 비트들을 기입하는 것; 및 메모리 디바이스의 상태를 식별하기 위해 모드 레지스터들로부터 값들을 리드백(read back)하는 것을 포함할 수 있지만 이들로 제한되지 않는다.
이 명령들과 연관된 데이터는, DQ 버스라고 지칭되는, 별도의 병렬인 복수의 데이터 전송 라인들로 이루어진 별도의 데이터 버스를 따라 송신되거나 수신된다. 일부 실시예들에서, DQ 버스는, 데이터의 수신 및 전송을 위해 동일한 라인들이 사용되고 데이터가 반대 방향으로 흐르는 동안 데이터가 메모리 디바이스로부터 CPU로 동시에 송신될 수 없고 그 반대로 마찬가지라는 것을 의미하는, 반이중(half-duplex)이고 양방향(bi-directional)일 수 있다. 다른 실시예들에서, DQ 버스는 데이터의 수신 또는 전송을 위해 별도의 라인들을 갖는 전이중(full-duplex)일 수 있다. DQ 버스 상의 데이터는 디바이스 명령 클록과 동기되어 있는 것으로 안전하게 가정될 수 있다. 그렇지만, 보다 긴 전송 라인들 또는 보다 빠른 동작 주파수들에 대해, 이것은 좋지 않은 동기화를 가져올 수 있다. 따라서, DQ 버스 전체가, 복수의 보다 작은 DQ 그룹들 - 각각은, 그 DQ 그룹에서의 와이어들에 대한 개별적인 타이밍 기준으로서 역할하는, 그 자신의 "DQ 스트로브" 신호(DQS)를 가짐 - 로 세분되는 다른 실시예들이 존재한다. 예를 들어, 일 실시예에서, 64-비트 DQ 버스는 각각 8개의 DQ 라인들로 된 8개의 그룹들(또는 "바이트 레인(byte-lane)들") - 각각은 그 자신의 DQS 스트로브에 의해 동기화됨 - 로 나누어질 수 있다. DQS 스트로브는, 실시예에 따라, 차동 또는 단일 종단형일 수 있다. 일부 실시예들에서, 어떤 DQ 라인들은 호스트에 의해 저장되는 데이터뿐만 아니라 부가의 오류 정정 코드들을 기록하기 위한 부가의 패리티 또는 다른 신호 데이터에 대한 인코딩을 제공할 수 있다. 실시예에 따라, 많은 DDR 프로토콜들은, 예를 들어, 일부 실시예들에서, 명령 억제(Command Suppression) 라인들(CS_N), 클록 인에이블(Clock Enable)(CKE), 또는 온다이 종단(on-die termination)의 인에이블(ODT)(이들로 제한되지 않음)을 포함하는 기능들을 명령할 수 있는, 메모리 디바이스로의 CPU에 의해 구동되는 다양한 다른 제어 신호 전송 라인들을 갖는다.
전자 시스템은 복수의 메모리 디바이스들에 접속된 하나 또는 복수의 데이터 처리 요소들 - 처리하는 동작은 계산, 분석, 데이터의 저장 또는 네트워크 또는 주변기기 버스를 통한 데이터의 전송을 포함할 수 있음 - 로 이루어질 수 있다. 데이터 처리 요소들의 예들은 CPU들, CPU 캐시들, ASIC(application-specific integrated circuit)들, 주변기기 버스들, DMA(Direct Memory Access) 엔진들, 또는 네트워크 인터페이스 디바이스들을 포함하지만, 이들로 제한되지 않는다. 많은 DRAM 구성들에서, 복수의 메모리 회로들은 모듈들에; 예를 들어, DIMM(dual-inline memory module) 표준에 의해 기술된 모듈들에 함께 번들링된다. 모듈 내에서, 일부 디바이스들은 개별적인 DQ 그룹들을 따라 병렬로 데이터를 전송할 수 있는 반면, 다른 디바이스들은 모두 DQ 그룹 내의 동일한 전송 라인들에 병렬로 연결될 수 있다. 다시 말하지만, 많은 전형적인 DRAM 구성들에서, 복수의 모듈들은 또한 채널을 형성하기 위해 병렬로 연결될 수 있다. 메모리 모듈들 이외에, 각각의 채널은, 이후부터 호스트라고 지칭되는, 정확히 하나의 데이터 처리 요소에 연결된다. 각각의 메모리 디바이스는 (전이중 DQ 버스가 아니라) 반이중 DQ 버스의 일부분을 통해 호스트에 연결될 수 있거나, 게다가 - 동일한 모듈 상의 또는 동일한 채널에서의 다른 인접한 모듈들 상의 - 몇개의 다른 메모리 디바이스들과 동일한 DQ 전송 라인들에 접속될 수 있다. 따라서, 메모리 디바이스가 데이터를 DQ 버스 상에 또는 다른 메모리 디바이스들과 동시에 동일한 버스 상에 어써트(assert)하기로 선택할 수 있고, 따라서 버스 상에서의 중재가 필요하다. 따라서, SDRAM 프로토콜들은 중앙집중식, 시간 창, 버스 할당 방식(centralized, time-windowed, bus allocation scheme)에 의존하고: 호스트는 기본적으로 DQ 버스를 통해 데이터를 전송하도록 허용된 유일한 디바이스이며, 기본적으로 모든 메모리 디바이스들은 DQ 라인들을 대부분의 시간 동안 고임피던스에 둔다. 응답을 필요로 하는 명령이 특정의 메모리 디바이스로 송신될 때, 그 디바이스는 데이터를 DQ 버스를 통해 그러나 명령의 첫 번째 펄스 이후의 특정 시간 창 내에서만 전송할 수 있다. 창은 명령으로부터 고정된 수의 클록 사이클들 이후에 시작되고, 데이터를 전송하는 데 필요한 시간보다 하나 또는 2개의 클록 사이클들만큼 더 긴 전형적인 지속시간을 갖는다. 메모리 디바이스들이 이 창 밖에서 데이터를 전송하는 것은 그들의 데이터를 성공적으로 호스트에 이르게 하지 못할 것이거나, 인접한 메모리 디바이스들로부터 돌아오는 데이터를 손상시킬 것이다.
이 클록-데이터 병렬 SDRAM 프로토콜들에 의해 사용되는 DQ 버스 중재 방식은 DRAM에 대해 잘 동작한다. DRAM 디바이스들을 뒷받침하는 기술은 그들의 데이터 액세스 시간들이 극히 일관적이고 예측가능한 지점까지 발전하였다. 그렇지만, DRAM은, 초당 수천회 빈번한 리프레시를 필요로 하기 때문에, 비교적 전력을 많이 소모하는 기술이다.
상 변화(phase-change) 랜덤 액세스 메모리(PCM), 산화 저항성(oxidative resistive) 랜덤 액세스 메모리(OxRAM 또는 ReRAM), 전도성 브리지(conductive-bridge) 랜덤 액세스 메모리(CBRAM), NAND 플래시(NAND), 자기 터널 접합 기반 자기(magnetic tunnel junction-based magnetic) 랜덤 액세스 메모리(MRAM), 멤리스터, NOR 플래시(NOR), 스핀 토크 전달 자기 메모리(spin torque-transfer magnetic memory)(STT-MRAM), 및 강유전체 랜덤 액세스 메모리(FeRAM)와 같은 비휘발성 메모리들 모두는 데이터에 대한 저지연시간 데이터 액세스를 보장하고, 많은 데이터 과중 작업부하들에 대한 보다 낮은 전력 소비를 위해 최적화될 수 있으며, 조만간 DRAM보다 더 높은 밀도의 랜덤 액세스 저장소를 제공할 수 있다. 그렇지만, 그들은 DRAM보다 약간 더 완화된 데이터 액세스 프로토콜들을 필요로 한다. 이 비휘발성 메모리들 모두는 비결정적 판독 및 기입 지연시간들을 나타낸다. 판독 또는 기입 명령이 작성될 때 모든 NVM 선택물들에 대해 그리고 모든 NVM 디바이스 아키텍처들에 대해 비휘발성 메모리의 셀로부터의 데이터에 액세스하거나 비휘발성 메모리의 셀에 데이터를 커밋하는 데 얼마나 걸리는지를 정확하게 아는 것은 불가능하다. 그렇지만, 결정론적 지연시간들을 모방하는 것은 가능한다. 최악의 경우의 타이밍 조건들을 가정하는 것 또는 너무 오래 걸릴 수 있는 판독을 포기하는 것에 의해 결정론적 지연시간들이 모방될 수 있다. DDR SDRAM 프로토콜들의 수정들이 비관적 판독 또는 기입 지연시간 규격들에 기초하여 규정될 수 있다. 예를 들어, 대부분의 기입들을 100ns 내에 커밋하지만 예측불가능한 이유들로 데이터를 커밋하는 데 가끔씩 10us가 걸리는 메모리는 (일부 메모리 기술들에 있어서, 기입들은 판독들이 또한 지연되어야만 한다는 것을 의미하기 때문에) 이전의 기입으로부터 꼬박 10us 동안 기입들을 허용하지 않고 이 기간에 판독들도 허용하지 않는 DDR 프로토콜을 사용할 수 있을 것이다. 그렇지만, 이것은 이러한 디바이스에 의해 달성가능한 최대 대역폭에 대한 극적인 제한을 야기할 수 있을 것이고, 게다가 동일한 채널 상에서의 다른 디바이스들의 성능을 제한할 수 있을 것이다. 이와 달리, 비결정적 판독 지연시간들 및 비결정적 기입 지연시간들에 대한 유연성을 가능하게 하는 표준 DDR 또는 SDR 또는 QDR SDRAM 프로토콜들의 수정을 생각할 수 있다. 일 실시예에서, 이 프로토콜은 동기식 비휘발성 RAM(이후부터, SNVRAM이라고 함) 프로토콜이라고 지칭된다.
예를 들어, SNVRAM 프로토콜들의 일부 실시예들에서, 판독 명령이 3개의 보다 작은 명령들로 분할될 수 있다. 판독 명령 시퀀스가 활성화 명령과, 그에 뒤이은, 요청된 데이터의 행과 열을 명시하는 판독의 두 부분으로 이루어진 경우, 명령은 이제 활성화 명령, 판독 명령, 그리고 마지막으로 - 미결정된 지연 이후의 - 송신 명령으로 이루어질 것이다. 활성화/판독 조합은 특정 영역을 판독하기 위해 두 부분으로 된 요청을 명시할 것이다. 그렇지만, 판독 명령 이후에 어떤 응답도 송신되지 않을 것이고; 그 대신에, 메모리 디바이스는, 예를 들어, "READ READY"(때로는 본원에서 "R_RDY"라고 지칭됨)라고 하는, 신호를 판독 명령으로부터 어떤 미결정된 시간 이후에 호스트로 다시 어써트할 것이다. 이 어써션(assertion)은 또한, 다른 SDRAM 활동이 완전히 추출된 데이터를 메모리 디바이스로부터 다시 호스트로 전달하도록 허용되어 있기 때문에, SEND 명령을 발행하라고 호스트에 촉구할 것이다. SEND 명령으로부터의 응답은 SEND 명령 이후의 미리 결정된 창 내에서 공유 DQ 버스를 통해 나갈 것이다. 이러한 방식으로, 전형적인 판독 명령이 비결정적 판독 지연시간들을 지원할 것이지만; 시스템의 평균 최소 지연시간 또는 전체 대역폭과 같은 성능 특성들이 가능한 가장 느린 판독에 의해 제한되지 않는다. 매체의 선택의 물리적 결과로서 명백히 예상되는 이상치들에 대한 얼마간의 유연성을 여전히 허용하면서 프로토콜의 평균 성능이 디바이스의 전형적인 성능과 일치한다.
일 실시예에서, SNVRAM은 하기의 특성들을 포함한다:
* 기존의 SDRAM 또는 DDR 프로토콜들과 유사하게, 단일의 호스트와 동일한 메모리 채널 상의 복수의 메모리 디바이스들 사이의 통신을 지원한다. 비록 각각의 채널이 독립적으로 동작하지만, 호스트들은 개별적인 메모리 채널들에 접속될 수 있으며, 따라서 프로토콜은 다른 채널들에서의 디바이스들의 거동을 명시하지 않는다. 하나의 채널의 동작을 위한 전송 라인들이 그 채널에 의해 독점적으로 사용될 수 있다. 다른 실시예들에서, 호스트는 단일의 메모리 디바이스에 접속될 수 있고, 그 메모리 디바이스는 명령들 및 데이터를 연쇄 배치 방식(chained style of deployment)으로 제2 디바이스로 중계할 수 있다.
* 기존의 SDRAM 또는 DDR 프로토콜들에서와 같이, 호스트로부터 채널로의 각각의 신호 또는 버스는 병렬 전송 라인을 따라가는 클록 신호에 동기되어 있을 수 있다.
* 기존의 SDRAM 또는 DDR 프로토콜들에서와 같이, 명령 버스를 따라 송신될 수 있는 "주소 블록 활성화", "활성 주소 블록 내의 요소 판독" 또는 "활성 주소 블록 내의 요소에의 기입"과 같은 논리적 명령들이 존재한다.
* 기존의 SDRAM 또는 DDR 프로토콜들에서와 같이, 명령 버스는 채널에 대한 마스터 클록 또는 마스터 명령 스트로브에 동기화될 수 있다.
* 기존의 SDRAM 또는 DDR 프로토콜들에서와 같이, 메모리 디바이스로부터 복귀하는 데이터는, DQ 버스라고 지칭되는 복수의 전송 라인들로 이루어지는, 별도의 데이터 버스를 따라 송신될 수 있다.
* 기존의 SDRAM 또는 DDR 프로토콜들에서와 같이, 일부 실시예들에서 DQ 버스 내의 각각의 라인은 마스터 클록에 동기되어 있을 수 있다. 다른 실시예들에서, DQ 버스는 (호스트에 의해 또는 메모리 디바이스에 의해 발생되는) 분리된 DQ 스트로브 신호 - 이후부터 DQS라고 지칭됨 - 에 동기되어 있다. 일부 실시예들에서 다수의 DQS 라인들 - 각각은 DQ 버스 라인들의 서브셋에 대응함 - 이 있을 수 있다.
* 기존의 SDRAM 또는 DDR 프로토콜들에서와 같이, DQ 버스가 양방향일 수 있는 일부 실시예들이 존재하고, 호스트로부터 메모리 디바이스로의 저장가능 데이터를 수용할 수 있다. 다른 실시예들은 별도의 기입 DQ 버스를 포함할 수 있다.
* 기존의 SDRAM 또는 DDR 프로토콜들에서와 같이, DQ 버스 상의 호스트로부터 메모리 디바이스로의 데이터는, 고려 중인 실시예에 따라, 마스터 클록 또는 적절한 DQS 라인들과 동기하여 전송될 수 있다.
* 기존의 SDRAM 또는 DDR 프로토콜들에서와 같이, DQ 버스들은 단일의 호스트 외에 다수의 메모리 디바이스들에 접속될 수 있다. 이 버스 상에서의 중재는 시간 창들에 기초하여 행해진다. 메모리 디바이스가 응답을 필요로 하는 명령을 호스트로부터 수신할 때, 메모리 디바이스는 메모리 디바이스가 DQ 버스를 소유하고 데이터를 어써트할 수 있는 좁은 시간 창을 갖는다.
* 기존의 SDRAM 또는 DDR 프로토콜들에서와 같이, 채널 내에서, 메모리 디바이스들은 협력된 모듈들을 형성하기 위해 복수의 메모리 디바이스들로서 서로 그룹화될 수 있다.
* SNVRAM 프로토콜들은 전형적으로 저장 시스템으로부터 호스트로 신호들을 송신하는 부가의 제어 라인들이 있다는 점에서 SDRAM 프로토콜들과 달리 독특하다. (전형적인 SDRAM 인터페이스들은 호스트로부터 저장 시스템으로 송신되는 제어 신호들만을 포함한다. 이 부가의 제어 라인들은 이후부터 "응답 버스"(또는 RSP)라고 지칭된다. 응답 버스는 일부 실시예들에서 마스터 클록에 동기되어 있을 수 있거나, 다른 실시예들에서 메모리 모듈에 의해 발생된 그 자신의 스트로브 신호를 가질 수 있다. 응답 버스는, 우리의 목적들을 위해 여기에서 "READ READY"(R_RDY) 및 "WRITE CREDIT INCREMENT"(WC_INC)라고 식별되는, 신호들을 포함하지만 이들로 제한되지 않는다. 그렇지만, SNVRAM 프로토콜들의 상이한 실시예들이 유사한 기능들을 갖는 전기 신호들을 가질 수 있지만, 프로토콜이 그들을 상이한 이름으로 지칭할 수 있다는 것에 유의해야 한다. 그에 따라, 본원에서 사용되는 특정 신호 이름들이 예들에 불과하다는 것을 잘 알 것이다.
* NVRAM 프로토콜들의 일부 실시예들에서, 응답 버스는 채널 내의 모든 모듈들에 의해 공유될 수 있고 호스트에 의해 중재될 수 있거나, 다른 실시예들에서 응답 버스는 각각의 모듈로부터 호스트로만 지나가고 어떤 다른 모듈과도 전기적 접촉을 하지 않은 별개의 전송 라인들- 어떤 모듈들 간에도 공유되지 않음 - 로 이루어져 있을 수 있다.
SDRAM 또는 DDR 프로토콜들의 상이한 실시예들이 프로토콜 명시 레이트들로 데이터를 전송하는 것과 같이, 임의의 명령 버스 상의 데이터는 특정의 프로토콜 실시예에 의해 SDR, DDR, 또는 QDR 레이트들로 전송하도록 명시될 수 있다
* 임의의 명령 버스 상의 데이터, 클록들 또는 스트로브들은, SNVRAM 프로토콜의 실시예에 의해 포함된 규격들에 따라, 단일 종단 방식으로 또는 차동 방식으로 송신될 수 있다
* SNVRAM 프로토콜들은, 그들의 대역폭을 불필요하게 제한하지 않고, 비결정적 비휘발성 매체의 불규칙한 거동을 수용하는 간단한 방법을 제공한다. 그렇지만, 이러한 프로토콜들에 의해 실현될 수 있는 많은 다른 기회들이 있다. 메모리의 비결정적 거동을 보상하는 것 외에, 이 프로토콜들이 또한, 오류 정정, I/O 스케줄링, 메모리 웨어 레벨링, 인시츄 매체 특성분석(in-situ media characterization), 그리고 제어기 특정 이벤트들 및 기능들의 로깅과 같은, 다양한 유지관리 작업들 및 데이터 품질 향상들을 위한 시간을 제공하기 위해 사용될 수 있다. 이 기능들을 구현하는 하드웨어가 보다 복잡해지게 되면, 이 기능들을 수행하는 하드웨어 자원들을 위한 경쟁은 지연들의 다른 잠재적 원인이 된다. 이러한 지연들 모두는 표준의 SDRAM 통신 프로토콜을 사용할 때 중요한 성능 또는 신뢰성 문제들을 야기할 수 있다. 그렇지만, 비결정적으로 타이밍이 결정되는 SNVRAM 프로토콜의 사용은 유연한 동작과 하드웨어 복잡성의 자유를 가능하게 한다. 게다가, 비결정적 판독 타이밍(non-deterministic read-timing)들은 캐싱을 통해 가끔씩의 보다 빠른 판독 응답의 가능성을 가능하게 한다.
도면의 논의
이제부터 도면들을 참조하면, 도 1은 일 실시예의 저장 시스템들과 통신하는 호스트(100)의 블록도이다. 여기에서 사용되는 바와 같이, "통신하는"이라는 문구는 직접 통신하거나, 본원에 도시 또는 기술될 수 있거나 그렇지 않을 수 있는, 하나 이상의 컴포넌트들을 통해 간접적으로 통신하는 것을 의미할 수 있다. 이 예시에서, 2개의 저장 시스템들(저장 시스템 A 및 저장 시스템 B)이 도시되어 있지만; 2개 초과의 저장 시스템들이 사용될 수 있거나 하나의 저장 시스템만이 사용될 수 있다는 것을 잘 알 것이다. 이 실시예에서, 호스트(100)는 하나 이상의 CPU(central processing unit)들(110) 및 메모리 제어기(120)를 포함한다. 이 예시에서, 2개의 CPU들(CPU A와 CPU B)이 있지만; 2개 초과의 CPU들이 사용될 수 있거나 단일의 CPU만이 사용될 수 있다는 것을 잘 알 것이다. 메모리 제어기는 또한 단지 CPU들 이외의 디바이스들에도 연결될 수 있고, 네트워크 카드들 또는 다른 저장 시스템들(예컨대, 하드 드라이브 또는 SSD(solid-state drive))(이들로 제한되지 않음)과 같은, 다른 디바이스들을 대신하여 메모리 요청들을 중계하도록 구성될 수 있다. 게다가, 메모리 제어기는, 접속된 저장 시스템들에의 액세스를 위한 요청들을 메모리 제어기(120)로 송신하는, CPU 상에서 실행 중인 하나 이상의 소프트웨어 애플리케이션들을 대신하여 메모리 요청들을 중계할 수 있다.
이 실시예에서, 호스트(100)는 또한 (다른 실시예들에서, 메모리 제어기가 사용되지 않더라도) CPU들(110)과 통신하는 메모리 제어기(120)를 포함하는데, 메모리 제어기(120)는, 클록-데이터 병렬 인터페이스(예컨대, DDR)와 같은, 통신 인터페이스를 사용하여 저장 시스템들과 통신하고 특정 프로토콜(예컨대, JEDEC(Joint Electron Device Engineering Council)에 의해 규정된 프로토콜) 하에서 동작한다. 일 실시예에서, 메모리 제어기(120)는 CPU들(110)로부터의 저장 시스템들에 대한 액세스 요청들을 상관시키고 저장 시스템들로부터의 응답들을 정렬하며 그들을 적절한 CPU들(110)로 전달한다.
또한 도 1에 도시된 바와 같이, 저장 시스템 A는 복수의 비휘발성 메모리 디바이스들(140)과 통신하는 매체(비휘발성 메모리) 제어기(130)를 포함한다. 이 실시예에서, 저장 시스템 A와 저장 시스템 B는 동일한 컴포넌트들을 포함하며, 따라서 저장 시스템 A는 또한 복수의 비휘발성 메모리 디바이스들(160)과 통신하는 매체(비휘발성 메모리) 제어기(150)를 포함한다. 다른 실시예들에서, 저장 시스템들이 상이한 컴포넌트들을 포함할 수 있다는 것에 유의해야 한다.
매체 제어기(130)(때때로 "비휘발성 메모리(NVM) 제어기" 또는 단지 "제어기"라고 지칭됨)는, 예를 들어, 처리 회로부, 마이크로프로세서 또는 프로세서, 그리고 (마이크로)프로세서, 로직 게이트들, 스위치들, ASIC(application specific integrated circuit), 프로그래밍가능 로직 제어기, 및 임베디드 마이크로컨트롤러에 의해 실행가능한 컴퓨터 판독가능 프로그램 코드(예컨대, 펌웨어)를 저장하는 컴퓨터 판독가능 매체의 형태를 취할 수 있다. 제어기(130)는 이하에서 기술되고 흐름도들에 도시된 다양한 기능들을 수행하기 위해 하드웨어 및/또는 펌웨어로 구성될 수 있다.
일반적으로, 제어기(130)는 호스트(100) 내의 메모리 제어기(120)로부터 저장 시스템에 액세스하기 위한 요청들을 수신하고, 요청들을 처리하여 비휘발성 메모리들(140)로 송신하며, 응답들을 다시 메모리 제어기(120)에 제공한다. 일 실시예에서, 제어기(130)는 메모리가 제대로 동작하고 있도록 보장하기 위해 비휘발성 메모리를 포맷팅하고, 불량 비휘발성 메모리 셀들을 맵 아웃(map out)하고, 장래의 고장난 셀들을 대체할 예비 셀들을 할당할 수 있는 비휘발성(예컨대, 플래시) 메모리 제어기의 형태를 취할 수 있다. 예비 셀들의 어떤 일부는 비휘발성 메모리 제어기를 작동시키고 다른 기능들을 구현하기 위해 펌웨어를 보유하는 데 사용될 수 있다. 동작을 설명하면, 호스트(100)는, 비휘발성 메모리로부터 데이터를 판독하거나 비휘발성 메모리에 데이터를 기입할 필요가 있을 때, 비휘발성 메모리 제어기와 통신할 것이다. 호스트(100)가 어느 데이터가 판독/기입되어야 하는지에 대한 논리 주소를 제공하면, 플래시 메모리 제어기는 호스트(100)로부터 수신된 논리 주소를 비휘발성 메모리에서의 물리 주소로 변환할 수 있다. (대안적으로, 호스트(100)가 물리 주소를 제공할 수 있다.) 비휘발성 메모리 제어기는 또한, 웨어 레벨링(그렇지 않으면 반복적으로 기입될 특정 메모리 블록들을 마모시키는 것을 피하기 위해 기입들을 분산시키는 것) 및 가비지 컬렉션(블록이 가득찬 후에, 전체 블록이 소거되고 재사용될 수 있도록, 유효한 데이터 페이지들만을 새 블록으로 이동시키는 것)과 같은, 호스트의 관점에서 미결정된 지속시간을 가지는 다양한 동작들을 수행할 수 있다. 제어기(130)의 하나의 특정 실시예에 관한 추가 정보는 도 6과 관련하여 이하에서 설명된다.
비휘발성 메모리 디바이스(140)는 또한 임의의 적당한 형태를 취할 수 있다. 예를 들어, 비휘발성 메모리 디바이스(140)는 단일의 메모리 다이 또는 다수의 메모리 다이들을 포함할 수 있고, 내부 제어기를 갖추고 있거나 그렇지 않을 수 있다. 본원에서 사용되는 바와 같이, "다이"라는 용어는, 단일의 반도체 기판 상에 형성되는, 비휘발성 메모리 셀들의 컬렉션 및 그 비휘발성 메모리 셀들의 물리적 동작을 관리하기 위한 관련 회로부를 지칭한다. 비휘발성 메모리 다이(104)는, NAND 플래시 메모리 셀들, NOR 플래시 메모리 셀들, PCM, RRAM, OxRAM, CBRAM, MRAM, STT-RAM, FeRAM, 또는 임의의 다른 비휘발성 기술을 비롯한, 임의의 적당한 비휘발성 저장 매체를 포함할 수 있다. 또한, 배터리 백업 방식(battery-backed up)이거나 보조 전원에 의해 다른 방식으로 보호되는 휘발성 메모리와 같은, 비휘발성을 모방하는 휘발성 저장소가 사용될 수 있다. 메모리 셀들은 솔리드 스테이트(예컨대, 플래시) 메모리 셀들의 형태를 취할 수 있고, 한 번 프로그래밍가능하거나, 몇 번 프로그래밍가능하거나, 여러 번 프로그래밍가능할 수 있다. 메모리 셀들은 또한 단일 레벨 셀(SLC)들, 다중 레벨 셀(MLC)들, 삼중 레벨 셀(TLC)들일 수 있거나, 현재 공지되어 있거나 나중에 개발되는, 다른 메모리 셀 레벨 기술들을 사용할 수 있다. 또한, 메모리 셀들은 2차원 또는 3차원 방식으로 제조될 수 있다. 어떤 다른 메모리 기술들이 앞서 논의되었으며, 사용될 수 있는 가능한 메모리 기술들에 대한 부가의 논의가 또한 이하에서 제공된다. 또한, 상이한 메모리 기술들은 그 기술에 적용가능한 상이한 알고리즘들(예컨대, 적절한 프로그램 및 웨어 레벨링)을 가질 수 있다.
간략함을 위해, 도 1은 제어기(130)와 비휘발성 메모리 디바이스(140)를 연결하는 단일의 라인을 도시하지만, 그 연결이 단일의 채널 또는 다수의 채널들을 포함할 수 있다는 것을 잘 알 것이다. 예를 들어, 일부 아키텍처들에서, 2개, 4개, 8개, 또는 그 이상의 채널들이 제어기(130)와 메모리 디바이스(140) 사이에 존재할 수 있다. 그에 따라, 본원에 기술되는 실시예들 중 임의의 것에서, 비록 단일의 채널이 도면들에 도시되어 있을지라도, 제어기(130)와 메모리 디바이스(140) 사이에 하나 초과의 채널이 존재할 수 있다.
호스트(100)와 저장 시스템들은 임의의 적당한 형태를 취할 수 있다. 예를 들어, (도 2a에 도시된) 일 실시예에서, 저장 모듈은 NV-DIMM(non-volatile dual in-line memory module)(200)의 형태를 취하고, 호스트(100)는 하나 이상의 DIMM들을 수용하는 마더보드를 갖는 컴퓨터의 형태를 취한다. 도 2a에 도시된 NV-DIMM(200)에서, 9개의 비휘발성 메모리 디바이스들(40)이 있고, NV-DIMM(200)은 9개의 데이터 입출력 DQ 그룹들(DQ0-DQ8), 명령 버스, 및 응답 버스를 포함하는 인터페이스(210)를 갖는다. 물론, 이들은 예들에 불과하고, 다른 구현들이 사용될 수 있다. 예를 들어, 도 2b는, 저장 시스템이 분산 제어기(31) 및 마스터 제어기(212)(도시되지 않았지만, 모든 분산 제어기들(31)에 연결됨)를 갖는, 대안의 실시예를 도시한다. 도 2a에서의 저장 시스템과 비교하여, 각각의 NVM 디바이스(41)는, 모든 NVM 디바이스들이 단일의 NVM 제어기와 통신하는 대신에, 그 자신의 NVM 제어기(31)와 통신한다. 일 실시예에서, 마스터 제어기(212)는, 이하에서 보다 상세히 논의될, 모든 분산 제어기들(31)이 RD_RDY 신호를 송신하기 위해 판독되는 때를 결정하는 것을 비롯하여, 필요한 임의의 동기화 활동을 행한다.
앞서 언급된 바와 같이, 다수의 저장 시스템들이 사용될 수 있고, 여기서 신호들은 다른 저장 시스템에 도달하기 위해 하나의 저장 시스템을 통과할 수 있다. 이것은 도 3에 도시되어 있다. 도 3에서, 저장 시스템 A는 저장 시스템 B보다 인라인으로 호스트(100)에 더 가깝다. 화살표(300)는 호스트(100)로부터 제1 및 제2 저장 시스템들 둘 다에 있는 명령 핀으로 송신되는 공유 메모리 입력 신호들을 나타낸다. 사용될 수 있는 공유 메모리 입력 신호들의 예들은 주소 신호, 판독 칩 선택 신호, 뱅크 그룹 신호, 명령 신호, 활성화 신호, 클록 인에이블 신호, 종단 제어 신호, 및 명령 식별자(ID) 신호를 포함하지만, 이들로 제한되지 않는다. 화살표(310)는, 역시 명령 핀을 통해 송신될 수 있는, 메모리 채널 클록을 나타낸다. 화살표(320)는, DQ0 내지 DQ8 그룹들을 통해 송신될 수 있는, 공유 메모리 출력 신호들을 나타낸다. 공유 메모리 출력 신호들의 예들은 데이터 신호들, 패리티 신호들, 및 데이터 스트로브 신호들 포함하지만 이들로 제한되지 않는다. 화살표(330)는 저장 시스템 B에 대한 전용 메모리 입력 신호들을 나타내고, 화살표(350)는 저장 시스템 A에 대한 전용 메모리 입력 신호들을 나타낸다. 명령 핀을 통해 송신될 수 있는, 전용 메모리 입력 신호들의 예들은 클록 인에이블 신호들, 데이터 스트로브, 칩 선택 신호들, 및 종단 제어 신호들을 포함하지만, 이들로 제한되지 않는다. 화살표(340)는 저장 시스템 B에 대한 디바이스 전용 응답 라인을 나타내고, 화살표(360)는 저장 시스템 A에 대한 디바이스 전용 응답 라인을 나타낸다. 명령 핀을 통해 송신될 수 있는, 디바이스 전용 응답 라인들을 통해 송신되는 신호들의 예들은 판독 데이터 준비(R_RDY) 신호들, 판독 식별자(ID) 신호, 및 기입 흐름 제어 신호를 포함하지만, 이들로 제한되지 않는다. 이 신호들은 이하에서 보다 상세히 논의될 것이다.
이 실시예들의 일 양태는 저장 시스템 내의 NVM 제어기(130)가 판독 및 기입 명령들을 어떻게 핸들링하는지이다. 이 실시예들의 그 양태를 살펴보기 전에, 종래의 호스트가 종래의 DDR-기반 DRAM DIMM으로부터 어떻게 데이터를 판독하는지를 설명하기 위해 도 4에서의 플로우차트(400)가 논의될 것이다. 이 플로우차트(400)는 도 5에서의 타이밍도(500)와 관련하여 논의될 것이다. 도 4에 도시된 바와 같이, 호스트가 DIMM(도 4에서 "디바이스"라고 지칭됨)에 데이터를 요구했을 때(동작(410)), 호스트 내의 메모리 제어기는 상위 주소를 갖는 활성화 명령을 송신한다(동작(420)). 호스트 내의 메모리 제어기는 이어서 하위 주소를 갖는 판독 명령을 송신한다(동작(430)). 이것은 도 5에서 명령/주소 라인 상에 "Act"및 "Rd" 상자들로서 도시되어 있다. 호스트 내의 메모리 제어기는 이어서 미리 결정된 양의 시간(때때로 "프리앰블 시간"이라고도 지칭됨) 동안 기다린다(동작(440)). 이것은 도 5에서 "미리 정의된 지연"으로서 도시되어 있다. 미리 결정된("결정적") 양의 시간이 만료된 후에, 호스트 내의 메모리 제어기는 (미세한 타이밍 동기화를 위해 데이터 스트로브들을 사용해) 데이터를 수락(accept)하고(동작(450))(도 5에서 데이터 라인 상의 상자들(D1 내지 DN)), 데이터가 호스트에 제공된다(동작(460)).
앞서 언급된 바와 같이, 호스트와 저장 시스템 사이의 이 상호 작용이 DRAM DIMM인 저장 시스템에는 적절하지만, 비휘발성 메모리에 대한 판독 및 기입을 뒷받침하는 메커니즘들이 프로토콜 하에서의 판독 또는 기입 동작에 대해 명시된 시간량을 초과하는 지연들을 야기할 수 있기 때문에, NV-DIMM에 대해 결정적 프로토콜을 사용할 때 문제들이 발생할 수 있다. 이것을 고려하기 위해, 일부 최근 표준들은 "비결정적" 판독 및 기입 동작들을 가능하게 한다. 이러한 표준들에 따르면, NV-DIMM에 대한 판독 및 기입 동작들이 특정 양의 시간 내에 완료될 필요가 없다.
판독 동작의 경우에, NV-DIMM은 요청된 데이터가 준비될 때 호스트(100)에 통보하고, 따라서 호스트는 이어서 그것을 검색할 수 있다. 이것은 도 6 및 도 7에서의 플로우차트들(600, 700)과 도 8a에서의 타이밍도(800)에 도시되어 있다. 도 6에 도시된 바와 같이, 호스트(100)가 저장 시스템에 데이터를 요구할 때(동작(610)), 호스트(100)는 요청에 대한 DDR ID(double data rate identifier)를 발생시킨다(동작(620)). 호스트(100)는 이어서 DDR ID를 호스트 요청 ID(예컨대, 데이터를 요청한 호스트(100) 내의 CPU 또는 다른 엔티티의 ID)와 연관시킨다(동작(630)). 다음에, 호스트(100)는 활성화 명령과 상위 주소를 송신하고(동작(640)), 이어서 판독 명령, 하위 주소, 및 DDR ID를 송신한다(동작(650)). 이것은 도 8a에서 명령/주소 라인 상에 "Act"및 "Rd+ID" 상자들에 의해 도시되어 있다. (도 8b는 앞서 논의된 판독 프로세스에 대한 다른 타이밍도(810)이지만, 여기서 2개의 판독 명령들이 있고, 나중에 수신된 판독 명령(판독 명령 B)이 먼저 수신된 판독 명령(판독 명령 B) 이전에 완료된다. 이에 따라, 데이터 B가 데이터 A 이전에 호스트(100)로 반환된다.)
판독 명령을 수신하는 것에 응답하여, 제어기(130)가 비휘발성 메모리(140)로부터 데이터를 판독하는 데 미결정된 양의 시간이 걸린다. 데이터가 판독된 후에, 제어기(130)는 R_RDY 신호를 응답 버스를 통해 송신함으로써 데이터가 준비되어 있다는 것을 호스트(100)에 알린다(도 7에서의 동작(710)). 그에 응답하여, 호스트(100)는 명령/주소 라인을 통해 "송신" 명령을 송신하고(동작(720)), 미리 정의된 지연 이후에, 제어기(130)는 (도 8b에서 데이터 라인 상의 "D1" 내지 "DN" 상자들 및 ID 라인 상의 "ID" 상자에 의해 도시된 바와 같이) 데이터를 호스트(100)에 반환한다(동작(730)). 호스트(100) 내의 메모리 제어기(120)는 이어서 데이터와 DDR ID를 수락한다(동작(740)). 다음에, 메모리 제어기(120)는 DDR ID가 호스트(100) 내의 CPU들(110) 중 하나의 CPU의 특정 호스트 ID와 연관되어 있는지를 결정한다(동작(750)). 있는 경우, 메모리 제어기(120)는 데이터를 올바른 CPU(110)에 반환하고(동작(760)); 그렇지 않은 경우, 메모리 제어기(120)는 데이터를 무시하거나 예외를 발행한다(동작(770)).
기입 동작의 경우에, 호스트(100)는, 비휘발성 메모리 디바이스가 핸들링할 수 있는 것보다 더 많은 기입 명령들을 수신하지 않도록 하기 위해, 특정 개수 초과의 기입 명령들을 미처리된(outstanding) 상태로 갖지 않도록 제한될 수 있다. 이것은 도 8c에서의 기입 타이밍도(820)에 도시되어 있다. 도 8c에 도시된 바와 같이, 호스트(100)가 기입 명령을 발행할 때마다, 호스트(100)는 그의 기입 흐름 제어 크레딧들(도면에서 "WC"라고 부기됨)을 감소시킨다. 기입 동작이 완료될 때, 매체 제어기(130)는 그의 기입 흐름 제어 크레딧들을 증가시키기 위해 응답을 호스트(100)로 송신한다.
앞서 논의된 프로토콜은 예측불가능한 지속시간의 판독 및 기입 동작들을 지원하는 NVRAM 프로토콜의 일 실시예이다. 이전에 논의된 바와 같이, 일부 실시예들에서, 제어기(130)는, 종래의 DRAM 기반 DIMM 표준들 하에서는 수행할 시간이 없을 수 있는, 시간이 많이 걸리는 동작들(본원에서 호스트의 관점에서 미결정된 지속시간을 갖는 동작들이라고 지칭될 수 있음)을 수행하기 위해 판독 및 기입 동작들에서 비결정적 측면을 이용할 수 있다. 메모리 및 데이터 관리 동작들과 같은, 호스트의 관점에서 미결정된 지속시간을 갖는 이 동작들이 NV-DIMM의 동작에 중요할 수 있다. 예를 들어, DRAM과 비교하여, 비휘발성 메모리 디바이스(140)는 보다 낮은 내구성(즉, 고장전 기입 횟수)을 가지며 (예컨대, 비트들이 부정확하게 저장되게 하는 내부 메모리 오류들로 인해) 데이터를 보다 덜 신뢰성있게 저장할 수 있다. NV-DIMM에서 DRAM 대체물로서 사용될 가능성이 있는 최근의 비휘발성 메모리 기술들에서 이 문제들이 더욱 두드러지게 될 수 있다. 이에 따라, 일 실시예에서, NV-DIMM은, 종래의 DRAM 기반 DIMM 표준들 하에서 할당된 시간 내에 수행하지 못할 수 있는, 호스트의 관점에서 미결정된 지속시간을 갖는 동작들(예컨대, 웨어 레벨링 및 오류 정정 동작들)을 수행해야 한다는 "스트레스 하에" 있지 않는 것을 이용한다.
일반적으로, 호스트의 관점에서 미결정된 지속시간을 갖는 동작은 (1) 그의 속성상, (예컨대, 동작의 지속시간이 하나 이상의 변수들에 의존하기 때문에) 미리 결정된 지속시간을 갖지 않거나 또는 (2) 미리 결정된 지속시간을 갖지만 지속시간이 호스트에 알려지지 않은(예컨대, 복호화 동작은 미리 결정된 지속시간을 가질 수 있지만 그 지속시간이 호스트의 관점에서 미결정되어 있는데, 그 이유는 호스트가 저장 시스템이 복호화 동작을 수행할 것인지 여부를 알지 못하기 때문임) 동작을 지칭한다. "호스트의 관점에서 미결정된 지속시간을 갖는 동작"은 임의의 적당한 형태를 취할 수 있다. 예를 들어, 이러한 동작은 NVM 디바이스의 건전성(health) 및 무결성을 관리하기 위해 제어기(130)에 의해 취해지는 조치인 "메모리 및 데이터 관리 기능"일 수 있다. 메모리 및 데이터 관리 기능의 예들은 웨어 레벨링, 데이터 이동, 메타데이터 기입/판독(예컨대, 로깅, 제어기 상태 및 상태 추적, 웨어 레벨링 추적 업데이트), 데이터 디코드 변형(ECC 엔진 변형(신드롬, BCH 대 LDPC, 소프트 비트 디코드), 소프트 판독 또는 재판독, 증가된 전송 및 판독을 필요로 하는 계층화된 ECC, 복합 디코딩 및 컴포넌트 지연시간을 갖는 RAID 또는 패리티 판독), 자원 경쟁(ECC 엔진, 채널, NVM 속성(다이, 블록, 평면, IO 회로부, 버퍼), DRAM 액세스, 스크램블러, 다른 하드웨어 엔진, 다른 RAM 경쟁), 제어기 예외(버그, 주변기기(온도, NOR), 매체 특성분석 활동(메모리 셀의 유효 수명을 결정하는 것, BER(bit error rate)을 결정하는 것, 또는 메모리 결함을 탐지하는 것)을 포함하지만, 이들로 제한되지 않는다. 게다가, 매체 제어기는, 역효과(고속 프로그램, 감소된 보존력 또는 다른 특성들을 갖는 일시적 기입)를 가지며 결정적으로 예측하기 어려울 방식들로 판독 또는 기입 동작들을 가속화하는 역할을 하는, 캐시와 같은, 요소들을 도입할 수 있다.
게다가, 호스트 관점에서 미결정된 지속시간의 동작은 프로그램 리프레시, 검증을 위한 단계(예컨대, 스킵 검증, 일반 설정, 엄격한 설정), 하나의 매체/상태로부터 다른 위치 또는 다른 상태로의(예컨대, SLC로부터 TLC로의, ReRam으로부터 NAND로의, STT-MRAM으로부터 ReRam으로의, 버스트 설정으로부터 강화된 설정으로의, 낮은 ECC로부터 높은 ECC로의) 데이터 이동, 그리고 보다 긴 매체 설정(예컨대, 보다 느린 전압 과도현상)을 포함할 수 있지만, 이들로 제한되지 않는다. 이러한 동작들은, 예를 들어, 내구성 연장, 보존력 개선 또는 완화, 그리고 성능 가속화(예컨대, 이 데이터 버스트를 신속하게 기입하는 것 또는 장래의 판독이 보다 신속하게 안정되도록 이 데이터를 선호된 방향으로 보다 강력하게 프로그래밍하는 것)을 위해 수행될 수 있다.
매체/NVM 제어기(130)는 이 메모리 및 데이터 관리 동작들을 수행하기 위해 다양한 하드웨어 및/또는 소프트웨어 모듈들을 구비할 수 있다. 본원에서 사용되는 바와 같이, "모듈"은, 예를 들어, 다른 컴포넌트들과 함께 사용하도록 설계되어 있는 패키징된 기능적 하드웨어 유닛, 보통 관련 기능들 중 특정의 기능을 수행하는 (마이크로)프로세서 또는 처리 회로부에 의해 실행가능한 프로그램 코드(예컨대, 소프트웨어 또는 펌웨어)의 일부분, 또는 보다 큰 시스템과 인터페이싱하는 자체 완비된 하드웨어 또는 소프트웨어 컴포넌트의 형태를 취할 수 있다.
도 9는 메모리 및 데이터 관리 기능들을 수행하는 데 사용될 수 있는 다양한 모듈들을 도시하는 일 실시예의 NVM 제어기(130)의 블록도이다. 이 특정 실시예에서, 제어기(130)는 암호화, 오류 정정, 웨어 레벨링, 명령 스케줄링, 및 데이터 집계를 수행하도록 구성된다. 그렇지만, 제어기(130)가 다른 유형 및 수의 메모리 및 데이터 관리 기능들을 수행하도록 구성될 수 있다는 것에 유의해야 한다.
도 9에 도시된 바와 같이, 이 NVM 제어기(900)는 (메모리 제어기(120)를 통해) 호스트(100)와 통신하기 위해 사용되는 (명령 및 위치 디코딩을 포함한) 비휘발성 RAM("SNVRAM") 프로토콜 논리 인터페이스(905) 및 물리 계층(900)을 포함한다. 물리 계층(900)은 데이터 및 명령들의 래칭하는 일을 맡고 있으며, 인터페이스(905)는 명령들과 위치들을 분리시키고 호스트(100)와 제어기(130) 사이의 부가의 시그널링 핀들을 핸들링한다. 제어기(130)는 또한 M개의 비휘발성 메모리 디바이스들(140)과 통신하는 N개의 메모리 유한 상태 머신(MemFSM)들(910) 및 NVM 물리 계층(Phy)들(910)을 포함한다.
이 입력 및 출력 부분들 사이에서, 제어기(130)는 우측에 있는 기입 경로, 중간에 있는 명령 경로, 그리고 좌측에 있는 판독 경로를 갖는다. 도시되지는 않았지만, 제어기(130)는 도 9에 도시된 다양한 요소들을 제어하고 그들과 인터페이싱할 수 있는 프로세서(예컨대, 펌웨어를 실행하는 CPU)를 가질 수 있다. 먼저 기입 동작을 살펴보면, 명령 및 위치가 인터페이스(905)에 의해 디코딩된 후에, 주소가 웨어 레벨링 주소 변환 모듈(955)로 송신된다. 이 실시예에서, 호스트(100)는 데이터를 기입하라는 명령과 함께 논리 주소를 전송하고, 웨어 레벨링 주소 변환 모듈(955)은 논리 주소를 메모리(140)에서의 물리 주소로 변환한다. 이 변환에서, 웨어 레벨링 주소 변환 모듈(955)은 그다지 마모되지 않은 물리 주소에 배치될 데이터를 셔플링한다. 웨어 레벨링 데이터 이동 모듈(960)은 충분히 마모되지 않은 메모리 영역이 주소 변환 방식 내에서 발견될 수 없는 경우에 데이터를 재배열하는 일을 맡고 있다. 그 결과 얻어진 물리 주소는, 데이터가 제어기(130) 내부의 로컬 버퍼들에서 발견될 수 있는 경우 관련 명령 및 주소와 함께, 메모리(140)에 대한 판독 및 기입 동작들을 스케줄링하는 NVM I/O 스케줄링 모듈(940)에 입력된다. NVM I/O 스케줄링 모듈(940)은, 소거, 설정 변경, 및 결함 관리(이들로 제한되지 않음)와 같은, 스케줄링할 다른 기능들을 포함할 수 있다.
이 실시예에서, 주소 변환과 병행하여, 기입 동작에 있어서, 데이터가 먼저 암호화 엔진(925)에 의해 암호화된다. 다음에, 매체 오류 정정 코드(ECC) 인코더(930)는 데이터가 NVM 메모리(140)에 저장되어(at rest) 있는 동안 데이터에 대한 ECC 보호를 발생시킨다. 비휘발성 메모리들이 이전에 저장된 데이터를 검색할 때 DRAM보다 오류가 발생하기 더 쉽기 때문에 저장되어(at rest) 있는 동안 데이터를 보호하는 것이 바람직할 수 있다. 그렇지만, 오류 정정을 사용해 데이터를 디코딩하는 것이 항상 일정 시간의 동작인 것은 아니며, 따라서 결정적 프로토콜들 하에서 이러한 동작들을 수행하는 것이 어려울 것이다. 이 예에서 ECC가 사용되지만, 온도, 시간, 및 전압 노출과 같은 물리적 이벤트들로 인한 열화로부터 보호하기 위해 CRC(cyclic redundancy check), RAID(redundant array of independent disks), 스크램블링, 데이터 가중/변조, 또는 다른 변경(이들로 제한되지 않음)과 같은, 임의의 적당한 데이터 보호 방식이 사용될 수 있다는 것을 잘 알 것이다(DRAM도 오류가 발생하기 쉽지만, NVM은 상이한 오류들이 발생하기 쉽다. 따라서, 각각의 NVM은 휴지상태에 있는 동안 상이한 보호 방식을 요구할 가능성이 있다. 종종, 지연시간과 비용 간의 트레이드오프가 있다). 또한, 도면을 단순화하기 위해 도시되지 않았지만, 다른 데이터 보호 시스템들이 호스트(100)와 제어기(130) 사이에서 "이동 중에(in flight)" 있을 때 그리고 제어기(130)에서 이리저리 이동할 때 (예컨대, CRC, ECC 또는 RAID를 사용하여) 데이터를 보호하기 위해 제어기(130)에 의해 사용될 수 있다는 것에 유의해야 한다.
앞서 언급된 바와 같이, ECC 이외의 데이터 보호 방식들이 사용될 수 있다. 이하의 단락은 다양한 데이터 보호 방식들에 대한 어떤 부가 정보를 제공한다.
ECC와 관련하여, BCH 또는 다른 해밍 코드들과 같은, 오류 검사 코드들의 일부 실시예들은, 거의 순간적인 신드롬을 사용할 수 있는, 디코딩 엔진이 데이터의 정확성을 유효성 확인할 수 있게 한다. 그렇지만, 신드롬 검사 실패는 상당한 지연을 증가시킬 수 있는 복잡한 대수 방정식들을 푸는 것을 수반할 수 있다. 더욱이, 다수의 신드롬 검사 실패들이 동시에 일어나는 경우, 디코딩을 위한 하드웨어 자원들이 이용불가능한 것으로 인해 하드웨어 자원 발생 백로그(hardware-resource-generated backlog)들이 있을 수 있다. 그렇지만, 이러한 가끔 있는 지연들은 호스트에 대한 판독 준비 통지를 지연시키는 것에 의해 핸들링될 수 있다. 공간의 보다 효율적인 사용 또는 보다 높은 신뢰성을 위해, LDPC 또는 부가의 CRC 검사들과 같은, 다른 코딩 방식들이 포함될 수 있으며, 이 다른 방식들이 저장 매체로부터 나오는 데이터를 처리하는 시간에서의 부가의 변동들을 가질 가능성이 있지만, 이 변동들도 판독 준비 신호의 단순 지연에 의해 핸들링될 수 있다.
다른 형태의 데이터 보호는 소프트 비트 디코딩의 형태를 취할 수 있으며, 그에 의해 매체에 저장된 데이터의 이진 값이 물리 메모리 매체에 저장된 데이터의 아날로그 값들을, 몇 개의 문턱값들과 비교하여, 여러 번 측정하는 것에 의해 보다 높은 신뢰도로 측정된다. 이러한 기법들은 수행하는 데 보다 오래 걸릴 것이고, 조합된 데이터 판독 및 디코딩 프로세스에 부가의 변동성을 추가할 수 있다. 그렇지만, 이 부가의 지연들은, 필요한 경우, 호스트에 대해 다시 READ READY 신호를 연기시키는 것에 의해 무리 없이 핸들링될 수 있다.
게다가, 중첩된(nested) 또는 계층화된(layered) 오류 정정 방식들을 사용하여 신뢰성이 여전히 부가될 수 있다. 예를 들어, 매체 내의 데이터는 판독된 매 A 바이트 중의 N개의 오류들을 견딜 수 있고 판독된 매 B(여기서 B>A임) 바이트 중의 M(여기서 M>N임)개의 오류들을 견딜 수 있도록 인코딩될 수 있다. 크기 A의 작은 판독은 따라서 고속 동작에는 최적일 수 있지만, N개 초과의 오류들을 갖는 아주 불량한 데이터 블록에 직면해서는 데이터 신뢰성에 대해 차선적일 수 있다. 이 방식에서 가끔 있는 문제들은 A 바이트를 먼저 판독하고 유효성 확인하는 것에 의해 정정될 수 있다. 오류들이 지속되는 경우, 제어기는, 지연이라는 불이익이 있지만 데이터의 성공적인 디코딩을 갖는, 훨씬 더 큰 블록을 판독하는 옵션을 갖는다. 이것은 SNVRAM 지원 매체 제어기에 의해 제공되는 비결정적 판독 타이밍들에 의해 가능하게 되는 다른 비상 디코딩 옵션이다.
또한, 특정의 메모리 디바이스의 심각한 장애들이 RAID 기법들을 통해 인코딩될 수 있을 것이다. 데이터는 이 세트 내의 어떤 수의 메모리 디바이스들의 완전한 장애에 대응하기 위해 복수의 메모리 디바이스들에 걸쳐 분산될 수 있다. 불량 메모리 디바이스들을 만나게 되는 경우 중복성 데이터(redundancy data)를 수용하기 위해 예비 메모리 디바이스들이 손상 장소(fail-in-place) 예비품으로서 메모리 모듈에 포함될 수 있다.
도 9로 돌아가서, 매체 오류 정정 코드(ECC) 인코더(930)가 데이터에 대한 ECC 보호를 발생시킨 후에, 데이터는, 기입 데이터 캐시 버퍼들(945)에 공간이 있는지 여부와 데이터를 그 버퍼들(945) 내의 어디에 둘지를 결정하는, 기입 캐시 관리 모듈(935)로 송신된다. 데이터는 기입 데이터 캐시 버퍼들(945)에 저장되며, 여기에 판독될 때까지 저장된다. 따라서, 기입 명령을 스케줄링하는 데 지연이 있는 경우, 데이터는 메모리(140)가 데이터를 수신할 준비가 될 때까지 무기한으로 기입 데이터 캐시 버퍼들(945)에 저장될 수 있다.
그 기입 데이터 캐시 버퍼 엔트리와 연관된 기입 명령이 큐의 선두에 오면, 데이터 엔트리는 NVM 기입 I/O 큐(950)로 전달된다. NVM I/O 스케줄러(940)에 의해 표시될 때, 명령은 NVM I/O 스케줄러(940)로부터 NVM 데이터 라우팅, 명령 라우팅, 및 데이터 집계 모듈(920)로 전달되고, 데이터는 NVM 기입 I/O 큐(950)로부터 NVM 데이터 라우팅, 명령 라우팅, 및 데이터 집계 모듈(920)로 전달된다. 명령과 데이터는 이어서 적절한 채널로 전달된다. 메모리 유한 상태 머신(MemFSM)(910)은 명령을 보다 세분화된 NVM 특정 명령들로 파싱하고 그 명령들이 NVM 디바이스들(140)로 분산되는 타이밍을 제어하는 일을 맡고 있다. NVM Phy(915)는 훨씬 더 세밀한 레벨로 타이밍을 제어하여, 데이터와 명령 펄스들이 NVM 클록에 대해 잘 동기화된 간격으로 배치되도록 한다.
이제부터 판독 경로를 살펴보면, 판독 명령들로부터의 데이터가 NVM 디바이스들(140)로부터 되돌아올 때, NVM 데이터 라우팅, 명령 라우팅, 및 데이터 집계 모듈(920)은 판독 데이터를 NVM 판독 I/O 큐(965)에 위치시킨다. 이 실시예에서, 판독 데이터는 사용자에 의해 요청되는 데이터, (제어기(130)에 의한 내부 사용을 위한) NVM 레지스터 데이터, 그리고 기입-유효성 확인 데이터와 같은 3가지 형태들 중 하나를 취할 수 있다. 다른 실시예들에서, 이 데이터 부류들 중 하나 이상이 상이한 큐들에 보유될 수 있다. 데이터가 내부 목적들을 위해 판독된 경우, 데이터는 (예컨대, 확인응답을 다시 호스트(100)로 송신하거나 재기입 요청을 스케줄러(940)로 송신하기 전에, 이전에 기입된 데이터가 정확하게 기입되었는지를 검사하기 위해) 내부 판독 처리 모듈(960)에 의해 처리된다. 데이터가 사용자에 의해 요청된 경우, 판독 데이터와 연관된 명령 ID를 나타내는 메타데이터가 데이터에 첨부된다. 이 명령 ID 메타데이터는 (양방향 화살표로 표시된 바와 같이) 판독 파이프라인을 통해 전송될 때 판독 데이터와 연관된다. 데이터는 이어서 데이터를 디코딩하는 매체 ECC 디코더(975)로, 그리고 이어서 데이터를 판독 데이터 캐시(955)로 송신하기 전에 데이터를 복호화하는 복호화 모듈(980)로 송신된다. 호스트(100)가 명령 ID 블록을 식별하는 것에 의해 데이터를 요청할 때까지 데이터는 판독 데이터 캐시(955)에 머물러 있다. 그 때, 데이터는 호스트(100)로의 전송을 위해 인터페이스(905) 및 물리 계층(900)으로 송신된다.
도 10은 도 6의 제어기(130)를 사용하여 데이터를 판독하는 방법의 플로우차트(1000)이다. 도 10에 도시된 바와 같이, 먼저 호스트(100)는 판독 요청을 저장 시스템으로 송신한다(동작(1050)). 이 실시예에서의 NVM 제어기(130)는 이어서 주소, 판독 요청 ID, 및 요청의 길이와 같은 요소들을 요청으로부터 추출한다(동작(1010)). NVM 제어기(130)는 이어서 웨어 레벨링을 위해 요청으로부터의 논리 주소를 물리 주소로 변환한다(동작(1015)).
NVM 제어기(130)는 이어서 물리 주소가 판독을 위해 사용 중이거나 이용불가능한 메모리 어레이의 부분에 대응하는지를 결정한다(동작(1020)). 메모리 부분이 사용 중이거나 이용불가능한 경우, NVM 제어기(130)는 비휘발성 메모리 디바이스들(140)의 판독을 차후의 시기로 스케줄링한다(동작(1022). 그 차후의 시기에, 물리 주소가 이용가능하게 되면(동작(1024)), NVM 제어기(130)는 판독을 방해하는 보류 중인 다른 보다 높은 우선순위의 동작들이 있는지를 결정한다(동작(1026)). 있는 경우, NVM 제어기(130)는 대기한다(동작(1028)).
메모리 부분이 이용가능하게 되는 경우(이용가능하게 될 때), NVM 제어기(130)는 요청된 데이터를 판독하기 위해 판독 명령들을 NVM 디바이스들(140)로 송신한다(동작(1030)). NVM 디바이스들(140)은 이어서 요청된 데이터를 반환한다(동작(1035)). 사용된 디바이스들의 유형에 따라, NVM 디바이스들(140)은 고정된 미리 결정된 기간 이후에 데이터를 반환할 수 있다. NVM 제어기(130)는 이어서 반환된 데이터를 처리할 수 있다. 예를 들어, 다양한 NVM 디바이스들(140)로부터 반환된 데이터를 집계(동작(1040))한 후에, NVM 제어기(130)는 데이터가 오류 정정 코드(ECC) 검사를 통과하는지를 결정할 수 있다(동작(1045)). 데이터가 ECC 검사를 통과하지 못하는 경우, NVM 제어기(130)는 오류 복구 프로세스를 개시할 수 있다(동작(1046)). 오류 복구 프로세스가 완료(동작(1048))된 후에, 또는 집계된 데이터가 ECC 검사를 통과한 경우, NVM 제어기(130)는 데이터가 암호화되어 있는지를 결정한다(동작(1050)). 데이터가 암호화되어 있는 경우, NVM 제어기(130)는 복호화 프로세스를 개시한다(동작(1052)).
복호화 프로세스가 완료(동작(1054))된 후에, 또는 데이터가 암호화되어 있지 않은 경우, NVM 제어기(130)는 호스트(100)가 비결정적 판독들을 사용하기로 이전에 동의했는지를 임의로 결정한다(동작(1055)). (동작(1055)은 NVM 제어기(130)가 결정적 및 비결정적 판독들 둘 다에 대해 사용될 수 있게 하지만 특정 실시예에 대해서는 사용되지 않을 수 있다.) 호스트(100)가 이전에 동의한 경우, NVM 제어기(130)는 (이하에서 논의되는 바와 같이) 장래의 송신 명령에 대한 판독 데이터를 보류(또는 유보)한다(단계(1060)). NVM 제어기(130)는 또한 신호를 "READ READY" 라인을 통해 호스트(100)로 송신한다(동작(1065)). 준비가 될 때, 호스트(100) 내의 메모리 제어기(120)는 송신 명령을 송신한다(동작(1070)). 호스트(100)로부터 송신 명령을 수신하는 것에 응답하여, NVM 제어기(130)는 (예컨대, 미리 정의된 지연 이후에(호스트 내의 메모리 제어기로부터의 전역 타임아웃들이 있을 수 있음)) 처리된 판독 데이터를, 명령 ID와 함께, 호스트(100)로 전송한다(동작(1075)).
호스트(100)가 비결정적 판독들을 사용하기로 이전에 동의하지 않았으면(동작(1055)), NVM 제어기(130)는, 앞서 논의된 종래의 시스템에서와 같이, 판독을 핸들링할 것이다. 즉, NVM 제어기(130)는 경과 시간이 미리 합의된 전송 시간을 초과하는지를 결정할 것이다(동작(1080)). 경과 시간이 미리 합의된 전송 시간을 초과하지 않으면, NVM 제어기(130)는 데이터를 호스트(100)로 전송한다(동작(1075)). 그렇지만, 경과 시간이 미리 합의된 전송 시간을 초과한 경우, 판독은 실패하였다(동작(1085)).
이제부터 기입 동작을 살펴보면, 도 11은 호스트(100)가 기입할 데이터를 가질 때(동작(1105)) 시작되는 플로우차트(1100)이다. 다음에, 호스트(1110)는 기입 동작에 대한 이용가능한 흐름 제어 크레딧이 있는지를 검사한다(동작들(1110 및 1115)). 이용가능한 흐름 제어 크레딧이 있는 경우, 호스트(100)는 기입 요청을 발행하고(동작(1130)), 매체 제어기(130)는 호스트(10)로부터 기입 요청을 수신한다(동작(1125)). 제어기(130)는 이어서 요청으로부터 목적지 주소 및 사용자 데이터를 추출한다(동작(1130)). 이 실시예에서 비결정적 프로토콜이 사용되기 때문에, 제어기(130)는 이제 메모리 및 데이터 관리 동작들을 수행하는 데 시간을 소비할 수 있다. 예를 들어, 데이터가 암호화를 필요로 하는 경우(동작(1135)), 제어기(130)는 데이터를 암호화한다(동작(1140)). 그렇지 않으면, 제어기(130)는 오류 정정을 위해 데이터를 인코딩한다(동작(1145)). 앞서 살펴본 바와 같이, ECC, CRC(cyclic redundancy check), RAID(redundant array of independent disks), 스크램블링, 또는 데이터 가중/변조(이들로 제한되지 않음)와 같은 임의의 적당한 오류 정정 방식이 사용될 수 있다. 다음에, 제어기(130)는 논리 주소를 물리(NVM) 주소로 변환하기 위해 웨어 레벨링 하드웨어(또는 소프트웨어)를 사용한다(동작(1150)). 제어기(130)는 이어서 기입 캐시가 가득 찼는지를 결정한다(동작(1155)). 그러한 경우, 제어기(130)는 실패를 시그널링한다(동작(1160)). 실패는 응답 버스 상의 전용 핀 또는 핀들에서의 일련의 전압들을 사용하는 것, 오류를 로그에(예컨대, NVM 제어기에) 기입하는 것, 또는 SPD(serial presence detect) 데이터에서의 오류를 증분시키거나 그에 주석 첨부하는 것을 비롯한, 임의의 적당한 방법으로 시그널링될 수 있다. 그렇지 않은 경우, 제어기(130)는 기입 캐시 엔트리를 현재의 요청과 연관시키고(동작(1165)), 데이터를 기입 캐시에 기입한다(동작(1170)).
제어기(130)는 이어서 물리 매체가 요구된 물리 주소에서 사용 중인지를 결정한다(동작(1175)). 그러한 경우, 제어기(130)는 장래의 처리를 위해 기입 동작을 스케줄링한다(동작(1180)). 그렇지 않은 경우, 제어기(130)는 현재 동작이 완료(동작(1182))되기를 기다리고, 이어서 여전히 보류 중인 보다 높은 우선순위의 요청이 있는지를 결정한다(동작(1184)). 있지 않은 경우, 제어기(130)는 데이터를 기입 명령들을 통해 NVM 디바이스들(140)에 분산시킨다(동작(1186)). NVM 디바이스들에의 기입 시에 전형적인 지연들이 있기 때문에, 제어기(130)는 이어서 대기한다(동작(1188)). 다음에, 임의로, 제어기(140)는 기입이 성공했는지를 결정(동작(1192))하는 것에 의해 기입 커밋이 성공했다는 것을 보장한다(동작(1190)). 기입이 성공하지 못한 경우, 제어기(130)는 추가의 시도들이 보증되는지를 결정한다(동작(1193)). 그렇지 않은 경우, 제어기(130)는 임의로 오류 정정 기법들을 적용할 수 있다(동작(1194)). 기입이 성공적이면, 제어기(130)는 기입 캐시 엔트리를 릴리스하고(동작(1195)), 호스트(100)에 부가의 기입 버퍼 공간을 통지하고(동작(1196)), 기입 동작이 이어서 종결된다(동작(1197)).
도 10 및 도 11 둘 다에서의 플로우차트들은 단일의 판독 동작 또는 단일의 기입 동작을 수행하는 프로세스를 기술한다. 그렇지만, 많은 매체 제어기 실시예들에서, 다수의 판독 또는 기입 동작들이 병렬로 진행될 수 있고, 따라서 판독 또는 기입 프로세스들의 연속적인 파이프라인을 생성할 수 있다. 이러한 단계들 중 많은 단계들이 비순차 처리를 지원할 것이다. 플로우차트들은 단일의 판독 또는 기입 요청을 처리하는 데 필요할 수 있는 단계들의 일 예로서 역할한다.
요약하면, 상기 실시예들 중 일부는 SNVRAM 프로토콜의 특정의 실시예를 통해 호스트와 인터페이싱하고 또한 복수의 메모리 디바이스들과 인터페이싱하는 매체 제어기를 제공한다. SNVRAM 프로토콜의 비결정적 판독 및 기입 타이밍 특징들을 사용하는 것 외에도, 매체 제어기는, 저 지연시간, 고 대역폭 메모리 인터페이스를 호스트에 제공하면서, 매체(NVM)의 수명을 향상시키고, 매체에서의 오류들을 최적으로 정정하며, 그리고 처리율을 최적화하기 위해 매체를 통한 요청들을 스케줄링하도록 특정 방식으로 설계되어 있다. 이러한 방식으로, 매체 제어기는 메모리 특이성(memory idiosyncrasy)들을 "무마(massaging)"시키는 것에 의해 저장 매체의 건전성 및 무결성을 관리할 수 있다. 또한, 매체 제어기는 보다 효율적인 데이터 처리 및 오류 핸들링을 위해 NVM 칩들로부터 데이터를 수집하고 집계할 수 있다.
이러한 실시예들에 사용될 수 있는 많은 대안들이 있다. 예를 들어, 상기 예들에 클록-데이터 병렬 인터페이스가 있었지만, SATA(serial advanced technology attachment), PCIe(peripheral component interface express), NVMe(non-volatile memory express), RapidIO, ISA(Industry Standard Architecture), Lightning, Infiniband, 또는 FCoE(fiber channel over Ethernet)(이들로 제한되지 않음)와 같은, 다른 유형의 인터페이스들이 상이한 실시예들에서 사용될 수 있다. 그에 따라, 상기 예에서 병렬 DDR 인터페이스가 사용되었지만, 직렬 인터페이스들을 비롯한 다른 인터페이스들이 대안의 실시예들에서 사용될 수 있다. 그렇지만, 현재의 직렬 인터페이스들은 긴 지연시간들 및 I/O 지연들에 직면할 수 있다(반면 DDR 인터페이스는 빠른 액세스 시간을 제공한다). 또한, 앞서 살펴본 바와 같이, 저장 시스템이 상기 예들에서 NV-DIMM의 형태를 취했지만, SSD(solid-state drive) 또는 메모리 카드(예컨대, SD(secure digital), 마이크로-SD(micro secure digital) 카드, 또는 USB(universal serial bus) 드라이브들)와 같은, 임베디드 및 이동식 디바이스들(이들로 제한되지 않음)을 비롯한, 다른 유형의 저장 시스템들이 사용될 수 있다.
다른 대안으로서, 매체 제어기를 사용하지 않고, 표준의 DDR 또는 보다 새로운 SNVRAM 프로토콜들을 사용할 수 있는 NVM 칩들이 제작될 수 있다. 그렇지만, 현존하는 NVM 디바이스들이 보다 많이 발전된 DRAM 디바이스들보다 훨씬 더 많은 특징들을 가지고 있기 때문에, 매체 제어기의 사용이 현재 선호되며; 따라서 현재의 DDR 주파수들에서 사용하는 데 NVM 칩들에 의존할 수 없다. 메모리 제어기는 NVM 칩들과 통신하기 위해 DDR 신호들을 느려지게 한다. 또한, 매체 제어기가 수행하는 기능들은 메모리 칩들 자체에 통합시키기에는 비교적 복잡하고 고비용일 수 있다. 게다가, 매체 제어기 기술은 발전할 가능성이 있고, 특정 유형의 메모리 칩을 보다 잘 핸들링하기 위해 매체 제어기를 개별적으로 업그레이드할 수 있게 하는 것이 요망될 수 있다. 즉, NVM과 NVM 제어기를 충분히 격리시키는 것은 성숙한 NVM들을 위한 DRAM 속도 흐름도 제공하면서 새로운 메모리들의 태동을 가능하게 한다. 그에 부가하여, 매체 제어기는 모든 칩들에 걸쳐 데이터를 분산시키고 결함들을 핸들링하는 웨어 레벨링 방식들 및 오류 검사 코드들을 가능하게 하고, 하나의 디바이스를 통해 데이터를 집계하는 것으로부터 이점이 있다.
앞서 논의된 바와 같이, 일부 실시예들에서, 제어기(130)는 호스트의 관점에서 미결정된 지속시간을 갖는 시간이 많이 걸리는 동작들을 수행하기 위해 판독 및 기입 동작들에서 비결정적 측면을 이용할 수 있다. 이러한 동작들의 예들로서 메모리 및 데이터 관리 동작들이 앞서 언급되었지만, 개개의 비휘발성 매체 셀들의 건전성을 모니터링하는 것, 그들을 마모로부터 보호하는 것, 셀들에 액세스하는 데 사용되는 회로부에서의 고장들을 식별하는 것, NVM 디바이스의 동작 요구사항들과 부합하는 적시에 사용자 데이터가 셀들로 전송되거나 셀들로부터 제거되도록 보장하는 것, 및 사용자 데이터가 신뢰성있게 저장되고 불량 셀들 또는 매체 회로 고장들로 인해 손실 또는 손상되지 않도록 보장하는 것과 같은, 이러한 동작들의 많은 다른 예들이 있다.  게다가, 민감한 데이터가 이러한 디바이스 상에 저장될 수 있는 경우에, 호스트의 관점에서 미결정된 지속시간을 갖는 동작들은 악의적 엔티티들에 의한 비휘발성 데이터의 도난을 방지하기 위한 관리 서비스로서의 암호화를 포함할 수 있다.
보다 일반적으로, 호스트의 관점에서 미결정된 지속시간을 갖는 동작은 (1) NVM 활동, (2) NVM에 저장된 데이터의 보호, (3) 제어기에서의 데이터 이동 효율성 중 하나 이상(이들로 제한되지 않음)을 포함할 수 있다.
NVM 활동의 예들은 사용자 데이터 핸들링, 비사용자 매체 활동, 및 스케줄링 결정을 포함하지만, 이들로 제한되지 않는다. 사용자 데이터 핸들링의 예들은 NVM의 내구성을 개선시키거나 완화시키는 것(예컨대, 웨어 레벨링이 디바이스의 내구성을 연장시키기 위해 로컬화된 사용자 활동을 보다 큰 물리적 공간에 걸쳐 확산시키고 그 위치의 내구성 특성들에 영향을 미치는 방식으로 NVM을 기입하거나 판독하는 웨어 레벨링 데이터 이동), NVM의 보존력을 개선시키거나 완화시키는 것(예컨대, 프로그램 새로고침, 데이터 이동, 및 보존 검증), (예컨대, 원하는 특성(내구성, 보존력, 장래의 판독 지연시간, BER 등)을 개선시키기 위해 NVM 핸들링을 위해 필요에 따라 보다 긴 또는 보다 짧은 지연시간 방법들을 사용하여) 매체 활동(기입, 판독, 소거, 검증, 또는 다른 상호작용) 동안 매체에 대한 마모 영향을 보다 잘 관리하기 위한 다양한 매체 지연시간 핸들링, 및 일시적 저장소(SLC 또는 STT-MRAM)로부터 보다 영구적인 저장소(TLC 또는 ReRam)로의 데이터의 폴딩(folding)을 포함하지만, 이들로 제한되지 않는다. 비사용자 매체 활동의 예들은 디바이스 로그(예컨대, 오류, 디버그 정보, 호스트 사용 정보, 보증 지원 정보, 설정, 활동 추적 정보, 및 디바이스 이력 정보), 제어기 상태 및 상태 추적(예컨대, 전원 상실 또는 전원 켜기 핸들링에 대한 개선된 또는 연속적인 거동을 위한 알고리즘 및 상태 추적 업데이트, 그리고 매체 기입 확인, 결함 식별, 및 ECC에 대한 데이터 보호 업데이트(패리티 또는 계층화된 ECC 값을 업데이트하는 것)를 위한 중간 검증 상태 조건), 매체 특성분석 활동(예컨대, NVM 수명 또는 BER의 특성분석, 그리고 결함이 있는지 NVM을 조사하는 것), 및 결함 영역의 재매핑을 포함하지만, 이들로 제한되지 않는다.
NVM에 저장된 데이터의 보호의 예들은 다양한 ECC 엔진 구현(예컨대, BCH 또는 해밍(크기, 구현의 병렬화, 신드롬과 같은 하드웨어 구현 선택항목, 발생기 다항식, 보호 수준, 또는 특별한 경우의 배열과 같은 인코딩 구현 선택항목), LDPC(예컨대, 크기, 구현의 병렬화, 어레이 크기, 및 클록 레이트와 같은 하드웨어 구현 선택항목, 보호 레벨 및 매체 BER 특성에 이득이 되는 다항식 선택과 같은 인코딩 구현 선택항목), 패리티(예컨대, ECC 이전에 배치된 사용자 데이터 CRC, 및 RAID), 임의의 순서로 상기한 것들 중 임의의 것의 계층화된 보호(예컨대, 사용자 데이터에 대한 CRC, 사용자 데이터 및 CRC에 대한 ECC, 2개의 ECC 블록이 함께 다른 ECC를 가져와, RAID의 전체 스트라이프에 대해 몇 개의 ECC된 블록들에 걸쳐 RAID를 계산함), 디코드 재시도 경로(예컨대, 다른 보호 계층들(예컨대, 투기적 소프트 판독, RAID 스트라이프 전체를 판독하기 전에 고장날 때까지 대기, 저전력 대 고전력 ECC 엔진 모드)을 개시하고 이용하는 것에 대한 선택항목), 투기적 비트 플립(speculative bit flip), 소프트 비트 디코드, 소프트 판독, 새로운 판독(예컨대, 재판독 및 소프트 판독(상이한 설정들로 동일한 데이터를 재판독함), 및 디코드 실패) 중 임의의 것을 갖는 또는 갖지 않는 ECC 재시도, 및 개선된 저장 거동을 위한 데이터 정형(예컨대, 감소된 셀간 간섭(예컨대, 개선된 감지 회로부 성능을 위해 스크램블러 또는 가중된 스크램블러를 사용하는 것))을 포함하지만, 이들로 제한되지 않는다.
제어기에서의 데이터 이동 효율성의 예들은 스케줄링 아키텍처 및 스케줄링 결정을 포함하지만, 이들로 제한되지 않는다. 스케줄링 아키텍처는 우선순위 부여, 투기적 조기 시작, 병렬화, 컴포넌트 가속, 자원 중재, 및 그 컴포넌트에 특유한 구현 선택항목 각각에 대한 단일 경로 대 다중 경로의 이용가능성과 관련될 수 있다.  모든 디바이스 자원의 수량, 처리율, 지연시간, 및 연결은 스케줄링에 암시적으로 영향을 미칠 것이다. 스케줄링 아키텍처는 또한 전송 동안의 내부 버스 충돌(예컨대, AXI 버스 충돌), ECC 엔진, NVM 통신 채널(예컨대, 대역폭, 속도, 지연시간, 유휴 시간, 다른 NVM으로의 트래픽의 혼잡, 순서부여 또는 우선순위부여 선택항목, 그리고 명령, 데이터, 상태, 및 다른 NVM 상호작용에 대한 사용의 효율성), 종종 각각의 특정 NVM(예컨대, 다이, 블록, 플레인, IO 회로부, 버퍼, 베이, 어레이, 워드 라인, 스트링, 셀, 코움(comb), 계층, 및 비트 라인)의 내부 회로부 액세스 및 배열로 인한 NVM 액세스 충돌, 메모리 액세스(예컨대, 외부 DRAM, SRAM, eDRAM, 내부 NVM, 및 그 메모리 상의 ECC), 스크램블러, 내부 데이터 전송, 인터럽트 지연, 폴링 지연, 프로세서 및 펌웨어 지연(예컨대, 프로세서 코드 실행 속도, 코드 효율성, 그리고 기능, 스레드 또는 인터럽트 교환), 및 캐시 엔진(예컨대, 캐시 검색의 효율성, 캐시 삽입 비용, 캐시 채우기 전략, 병렬 NVM 및 제어기 활동을 성공적으로 그리고 효율적으로 취소하는 캐시 히트, 그리고 캐시 방출 전략)을 포함할 수 있다. 스케줄링 결정은 명령 중복 검출 및 순서부여, 위치 디코딩 및 저장 방식(예컨대, 캐싱된 룩업 테이블(cached look-up table), 하드웨어 기반 테이블(hardware driven table), 및 계층화된 테이블(layered table)), 제어기 예외(예컨대, 펌웨어 중단(firmware hang), 컴포넌트 타임아웃, 및 예상치 못한 컴포넌트 상태), 주변기기 핸들링(예컨대, NOR 또는 EEPROM과 같은 대안의 NVM 핸들링, 온도, NVDIMM-P 상에서의 SPD(Serial Presence Detect) 상호작용, 및 대안의 디바이스 액세스 경로(예컨대, 저전력 모드 및 대역외 명령), 전원 회로부 상태), 및 절전 모드(예컨대, 오프, 절전 상태, 유휴, 유휴 활성, 그리고 가속 또는 버스트에 도움이 될 수 있는 상위 전력 상태)를 포함할 수 있지만, 이들로 제한되지 않는다.
앞서 논의된 저장 시스템은 명령 및 주소 버퍼와 데이터 버퍼들(DB)의 사용으로부터 이득을 볼 수 있다. 명령 및 주소 버퍼의 일 예는 레지스터 클록 드라이버(register clock driver)(RCD)이다. 하기의 예들에서 RCD가 사용될 것이지만, 다른 유형의 명령 및 주소 버퍼들이 사용될 수 있다는 것을 잘 알 것이다. 또한, 명령 및 주소 버퍼는 다른 기능을 가질 수 있다. 예를 들어, RCD와 같은, 명령 및 주소 버퍼는 또한 DB 안으로의 그리고 밖으로의 데이터의 흐름을 동기화하기 위한 데이터 병렬 디코드 동기화 기능을 가질 수 있다.
신호 무결성을 개선시키기 위해 RCD들 및 DB들이 DRAM 기반 DIMM들에 사용되었다. 예를 들어, DIMM에서 흩어져 있는 긴 전기 라인들이 명령 및 주소 신호 그룹에 좋지 않은 전기적 특성을 야기할 때, RCD(1220)는, DRAM 칩들(1210)이 명령 및 주소를 수신하도록 보장하는 데 도움을 주기 위해, 명령 및 주소를 수신하여 DRAM 칩들(1210)로 리피트(repeat)한다. RDIMM(registered DIMM)은 RCD를 갖는 DIMM의 일 예이고, LRDIMM(load reduced DIMM)(또는 FBDIMM(Fully Buffered DIMM))은 RCD와 DB들 둘 다를 갖는 DIMM의 일 예이다(UDIMM(unbuffered DIMM)은 버스에 영향을 미치는 전기적 라우팅 규칙을 강제한다). NV-DIMM, 특히, 앞서 논의된 것과 같은, 매체 제어기를 갖는 것을 사용할 때 신호 무결성 및 다른 문제들이 발생할 수 있다. 이하의 단락은, NV-DIMM에서의 RCD들 및 DB들의 사용을 살펴보기 전에, RCD들 및 DB들의 일반적인 사용에 대해 그와 관련하여 논의할 것이다.
도면들로 돌아가서, 도 12 및 도 13은 복수의 DRAM 칩들(1210), RCD(1220), 및 복수의 DB들(1230)을 갖는 DRAM DIMM(1200)의 예시이다. 도면을 단순화하기 위해 도 12 및 도 13에는 도시되지 않았지만, RCD(1220)는 DRAM 칩들(1210) 및 DB들(1230) 전부와 통신한다. 일반적으로, DB들(1230)은 DIMM(1200)으로 송신되거나 그로부터 판독되는 데이터를 저장하고, RCD(1220)는 DIMM의 CMD/Addr 라인을 통해 수신된 명령 및 주소를 DRAM 칩들(1210)로 리피트하기 위한 리피터로서 역할한다. RCD(1220)는 또한 DB들(1230)이 그들이 저장하는 데이터를 릴리스할 때를 제어한다.
도 12는 DIMM(1200)에서의 판독 흐름을 나타내고, 도 13은 DIMM에서의 기입 흐름을 나타낸다. 도 12에 도시된 바와 같이, 판독 명령은 CMD/Addr 라인을 통해 RCD(1220)에 의해 수신된다(화살표 1). 다음에, RCD(1220)는, 각각의 DRAM 블록이 여기에서 동일하게 주소지정되기 때문에, 각각의 DRAM 블록(1210) 내의 주소로 "판독" 명령을 통신한다(화살표 2). 데이터는 이어서 DRAM들(1210) 각각으로부터 판독되고 대응하는 DB(1230)로 이동된다(화살표 3). DRAM 기반 DIMM 프로토콜에서, DIMM은 데이터를 호스트에 다시 제공하기 위해 판독 명령을 수신한 후에 일정 양의 시간을 갖는다. 따라서, 그 양의 시간이 경과한 후에, RCD(1220)는 데이터를 호스트로 릴리스하라고 DB들(1230)에 신호한다(화살표 4). 이 단계들 각각 사이에, 이 방식에서 허용되는 변형이 있다. 이 아키텍처에서, RCD(1220)는 그 양의 시간이 경과한 후에 데이터가 DB들(1230)에 있는 것으로 가정할 뿐이고, 보통 이것은, 데이터를 판독할 때 DRAM 지연시간이 얼마나 신뢰할 수 있는지가 주어지면, 안전한 가정이다.
이제 도 13을 참조하면, 기입 동작에서, 기입 명령이 CMD/Addr 라인을 통해 RCD(1220)에 의해 수신된다(화살표 1). 거의 그 직후에, RCD(1220)는 기입 프로세스로 되기 위해 DRAM 블록들(1210)과 통신한다(화살표 2). 다음에, 고정된 시간 지연(tWL) 이후에, DB들(1230)은 기입될 데이터를 수신하고(화살표 3), 이어서 그 데이터를 DRAM 블록들(1210)로 전송한다(화살표 4).
도 14는 DRAM 기반 DIMM에서의 데이터 흐름의 내부 상태들의 다이어그램이다. 디코딩 및 라우팅의 초기 계층은 이 다이어그램에서의 각각의 서브블록이 올바르게 디코딩되고 그룹으로서 이해되는 것으로 가정할 수 있게 한다. 추상적으로, 서브그룹들 각각은 함께 이동하는 보다 큰 데이터 세트에 이르기까지 이동될 수 있다. 이 도면에서의 점선으로 된 상자들은 함께 처리될 수 있는 그룹들 중 4개를 전달한다. CMD/ADDR이 DQ 데이터보다 더 일찍 들어올 수 있는 때가 있지만, 관계들이 잘 형성되며, 따라서 이 시간 지연을 무시할 수 있다. 어쨌든, 최대 DQ 및 CMD/ADDR이 물리 계층의 상태를 나타낼 수 있다.
이제 RCD와 DB의 일반적인 배경기술이 제공되었으며, 이하의 단락들은 NV-DIMM에서의 RCD와 DB의 사용에 대해 논의할 것이다. 도면으로 돌아가서, 도 15는, 앞서 논의된, 도 2a에서의 저장 시스템(200)과 유사한 저장 시스템(1500)의 블록도이다. 그 저장 시스템(200)에서와 같이, 이 저장 시스템(100)은 9개의 데이터 입출력 핀들(DQ0 내지 DQ8), 명령 핀들, 및 응답 핀들을 포함하는 인터페이스(1510), NVM 제어기(1530), 및 9개의 비휘발성 메모리 디바이스들(1240)을 포함한다. 이 실시예에 새로운 점은 RCD(1520)와 DB들(1550)이다.
이 실시예의 하나의 장점은 RCD(1520) 및 DB들(1550)이 NV-DIMM을 전기적으로 버퍼링하는 역할을 한다는 것이다. 예를 들어, 도 2a의 저장 시스템(200)에 도시된 바와 같이, DQ 배선들이 길고 라우팅하기가 어려울 수 있으며, 이는 버스의 신호 무결성(SI) 품질에 영향을 줄 수 있다. 이와 달리, DRAM 버스 핀들과 RCD(1520) 및 DB들(1560) 사이의 배선들(1560)은 비교적 짧아서, DRAM 버스의 신호 무결성을 보장한다. 이 배선들(1560)은 버스 무결성을 열화시키지 않으면서 UDIMM, RDIMM, LRDIMM, 및 (현존하거나 향후 개발되는) 임의의 다른 DIMM 구성들 각각에서 최대 SI 및 NV-DIMM-P 동작성을 위해 엄격하게 명시될 수 있다(이것은 벤더 경쟁을 증가시킬 수 있고 시스템 통합 과제들을 감소시킬 수 있다). 즉, 라인들(1560)의 속도는 다른 DRAM 물리적 통신과 정합하기에 충분한 신호 무결성 및 속도일 수 있다. 이와 달리, RCD(1520) 및 DB들(1550)과 NVM 제어기(1530) 사이에 있는 라인들(1570)은 물론, NVM 제어기(1530)와 NVM 디바이스들(1540) 사이의 라인들(1580)은 보다 느슨한 규격들로 명시될 수 있는데, 그 이유는 이 라인들(1570, 1580)을 통한 통신이 기존의 JEDEC 규격 지연시간 완화 응답들에 흡수될 수 있거나(즉, 지연시간이 RCD(1520) 및 DB들(1550) 배후에 격리될 수 있음) DIMM 내에 완전히 포함된 전기 라우팅이 전송을 위한 충분한 SI를 보장할 수 있기 때문이다. 이것은 DB 및 RCD 칩들의 멀티 벤더 개발과 NVM 디바이스들 및 NVM 제어기의 "애그노스틱" 배치를 가능하게 한다. 게다가, 이것은 NVM 디바이스들과 NVM 제어기의 충분한 격리가 성숙한 NVM들을 위한 DRAM 속도 흐름도 제공하면서 새로운 메모리들의 태동을 가능하게 할 수 있다. 또한, 비결정적 프로토콜을 갖는 DB들(1550) 및 RCD(1520)에서의 RAM 버퍼들은 NV-DIMM-P 내부와 DRAM 버스 외부의 거동들을 분리시키고 정렬시키기에 충분할 수 있다.
일 실시예에서, 각각의 DQx는 호스트(100) 내의 메모리 제어기(120)로부터 오는 데이터, 스트로브, 및 클로킹 신호들의 그룹을 유추한다. DQ 세트들의 수는 하나의 배치에서 최대 DQ7 또는 DQ8을 가질 수 있지만, DQ9와 같은, 다른 최대가 있다. (일부 규격들은 이것을 CB(Check Bit)라고 지칭한다.) 그에 따라, 이 실시예들은 임의의 수의 데이터 그룹 신호들에 적용될 수 있고, 최대 DQ 그룹 번호는 본원에서 N이라고 지칭될 것이다. 각각의 그룹 내에서의 DQ 및 RCD 신호 타이밍들과 제약조건들(예컨대, 메시지 내용 라인, 스트로브, 및 클록)은 매우 엄격할 수 있다. 예를 들어, "메시지 라인"은 DQ의 경우에 데이터일 수 있거나, RCD의 경우에 명령 및 주소일 수 있다. 이것은 8 바이트의 데이터와 명령들 및 주소들 각각이 함께 수신되고 그룹별로 올바르게 디코딩되도록 보장할 것이다. 각각의 메시지는 (적절한 그룹에 따라) DB들(1550) 또는 RCD(1530)에 의해 수신되고 올바르게 해석될 수 있으며, 따라서 각각의 DQ와 RCD(1530) 사이의 전체적인 타이밍 제약조건들이 보다 완화될 수 있다. DRAM 버스 전체의 지연들의 프레임워크는 DRAM 버스 클록 레이트의 단일의 에지보다 훨씬 더 완화될 수 있다. 따라서, DQ 및 RCD(1530)는 대응하는 관련 버퍼들로 정확하게 디코딩 및 인코딩될 수 있다. 일 실시예에서, 메모리 제어기(1530)는 메시지 그룹들을 한번에 송신하고, 데이터가 각각의 컴포넌트에 도달하여 올바르게 디코딩되도록, 정확한 배치 및 신호 무결성 규칙들이 보장된다.
RCD(1520) 및 DB들(1550)의 기본 동작은 DRAM 기반 DIMM을 갖는 상기 예에서의 RCD(1220) 및 DB들(1230)의 동작과 유사하고, NVM 디바이스들(1540) 및 NVM 제어기(1530)의 사용을 고려하기 위해 얼마간의 차이가 있다. 즉, 일반적으로, DB들(1550)은 NVM 디바이스들(1540)로 송신되거나 그로부터 판독되는 데이터를 저장하고, RCD(1520)는 저장 시스템(1500)의 CMD/Addr 라인을 통해 수신된 명령 및 주소를 NVM 디바이스들(1540)로 리피트하는 리피터로서 역할한다. 그렇지만, DRAM 기반 DIMM은, RCD(1220)가 미리 결정된 양의 시간 이후에 DB들(1230)의 데이터를 호스트로 릴리스하라고 DB들(1230)에 지시하는, 결정적 프로토콜을 사용한다. 앞서 언급된 바와 같이, 비휘발성 메모리로부터의 판독 데이터의 메커니즘으로 인해, 요청된 데이터는 그 미리 결정된 양의 시간 내에 호스트로 송신될 준비가 되지 않을 수 있다. 이 메커니즘들의 예들은 매체 선택항목(예컨대, MRAM, PRAM, RRAM 등) 및 매체에 대한 재료, 프로세스 노드, I/O 회로 거동, I/O 회로 프로토콜, 간헐적인 논리 다이, 제어기 지연, 보다 많거나 보다 적은 수의 NVM 다이들을 의미하는 보다 높거나 보다 낮은 ECC를 필요로 하는 데이터 오류(BER, 결함), NVM 디바이스들 및 제어기들의 배치, NVM 통신 채널 지연(예컨대, 명령 대 데이터 명령 그룹, 공유 데이터와 명령, 직렬화기/역직렬화기(SerDes) 대 병렬), 및 NVM 채널 연결 옵션들(예컨대, TSV(Through Silicon Via), TSW(Through Silicon sideWall), 직접(direct), 중재(intermediary))을 포함하지만, 이들로 제한되지 않는다.
그에 따라, 도 15에 도시된 실시예에서, RCD(1520)는 앞서 논의된 새로운 판독 명령을 수신하고 그에 응답하도록 (예컨대, RCD(1520) 내의 프로세서를 펌웨어/소프트웨어로 프로그래밍하는 것에 의해 또는 순수 하드웨어 구현을 제공하는 것에 의해) 구성된다. 구체적으로는, 이 실시예에서의 RCD(1520)는 판독 명령에 응답하여 DB들(1550)이 데이터를 포함할 때마다 CMD/Addr 라인을 통해 준비 신호를 제공하도록 구성되고, 또한 RCD(1520)가 송신 명령을 수신하는 것에 응답하여 (미리 정의된 지연 이후에) DB들(1550)의 데이터를 호스트로 릴리스하라고 DB들(1550)에 지시하도록 추가로 구성된다.
도 16은 판독 동작을 예시하는 블록도이다. 도 16에 도시된 바와 같이, 판독 명령이 호스트 내의 메모리 제어기로부터 RCD(1520)에 의해 수신된다(화살표 1). 주소 및 판독 명령이 이어서 RCD(1520)로부터 NVM 제어기(1530)로 송신된다(화살표 2). 판독 명령이 처리되고 관련 NVM 디바이스들(1540)에 전송되고(화살표 3), 판독 데이터는 NVM 제어기로 반환되며 이어서 DB들(1550)로 간다(화살표 4). RCD(1520)가 (예컨대, 폴링 또는 DB들(1550)과 다른 방식으로 통신하는 것에 의해 또는 NVM 제어기(1530)에 의해 지시된 후에) DB들(1550)이 데이터를 포함한다는 것을 알 때, RCD(1520)는 RD_RDY 신호를 호스트 내의 메모리 제어기로 송신한다(화살표 5). 그에 응답하여, 호스트 내의 메모리 제어기는 명령 버스 상에 SEND 명령을 발행하고(화살표 6), 그에 응답하여, RCD(1520)는 (임의의 명시된 지연(tsend) 이후에) DB들(1550)에 데이터를 호스트로 전송하라고 지시한다(화살표 7).
이제부터 기입 동작(도 17을 참조)을 살펴보면, 기입 동작에 대한 남아 있는 크레딧이 있도록 보장하기 위해 먼저 호스트 내의 메모리 제어기가 기입 카운트를 검사한다. 있는 경우, 호스트 내의 메모리 제어기는 기입 명령 및 주소를 RCD(1520)로 전송하고(화살표 2), 메모리 제어기는 그의 기입 크레딧 카운트를 감소시킨다. 다음에, 호스트 내의 메모리 제어기는 명시된 JEDEC 지연 이후에 데이터를 DB들(1550)로 전송한다(화살표 3). 이어서, 명령 및 데이터가 RCD(1520) 및 DB들(1550)로부터 NVM 제어기(1530)로 전송되지만(화살표 4), RCD(1520)가 DB들(1550)로부터의 데이터가 도착하기 전에 주소 및 명령을 전달할 수 있다. 다음에, 기입 데이터가 NVM 디바이스들(1540)에 커밋되고(화살표 5), 기입 크레딧이 버스를 통해 호스트 내의 메모리 제어기로 다시 전달된다(화살표 6). 동작 5와 동작 6이 바뀔 수 있다는 것에 유의해야 한다. 그렇지만, 기입 크레딧 확인 이전에 지속성이 요구되는 경우, 동작 6 이전에 동작 5를 수행하는 것이 바람직할 수 있다. 기입 크레딧 확인 이전에 지속성이 요구되지 않는 경우, 동작 5 이전에 동작 6을 수행하는 것이 바람직할 수 있다. 어쨌든, 호스트 내의 메모리 제어기는 기입 크레딧 카운트를 증가시킨다(호스트(100)에 대한 기입 크레딧 회답은 호스트(100)에 대한 메시지당 단일의 크레딧 또는 다수의 크레딧일 수 있다).
NVM 메모리 디바이스들을 판독하고 그에 기입하는 메커니즘들로 인해, 판독 및 기입 명령들은 그들이 수신된 순서로 완료되지 않을 수 있다. 앞서 논의된 바와 같이, 두번째로 수신된 판독 명령(Read B)이 첫번째로 수신된 판독 명령(Read A) 이전에 완료될 수 있으며, 예를 들어, Read B가 보다 높은 우선순위를 갖는 경우에 또는 Read A의 물리 주소가 판독을 위해 이용가능하지 않고 Read A가 나중의 시기로 스케줄링되어 있는 경우에 그러하다. 이것이 DRAM 기반 DIMM들에 대해서는 문제가 되지 않는데, 그 이유는 판독 및 기입 명령들이 수신된 순서로 처리되기 때문이다. 그렇지만, 이것이 NV-DIMM들에서는 문제가 될 수 있는데, 그 이유는 NV-DIMM에 의해 호스트로 릴리스되는 데이터가 호스트가 예상하는 데이터가 아닐 수 있기 때문이다(예컨대, 호스트가 Read A로부터 데이터를 가져올 것으로 기대하고 있지만 그 대신에 Read B로부터 데이터를 가져온다). 이 문제를 해결하기 위해, 어떤 데이터가 어떤 명령들에 속하는지 추적하기 위해 식별자(ID)가 다양한 명령들과 연관된다. 이것은 도 18과 도 19에서 설명될 것이다.
도 18a는 도 15에서의 저장 시스템(1500)을 사용하는 일 실시예의 판독 동작의 플로우차트이다. 도 18a에 도시된 바와 같이, 호스트는 주소로부터의 판독을 명령한다(그리고 임의적인 판독 ID를 제공한다)(동작(1880)). RCD는 이어서 명령, 주소, 및 ID를 전달한다(동작(1882)). (비순차 동작들을 가능하게 하기 위해 사용될 수 있는) 이 ID는 호스트로부터 수신된 ID와 동일할 수 있거나 그렇지 않을 수 있다. 다음에, 데이터가 NVM으로부터 준비되고(동작(1884)), RCD는 판독 데이터가 준비되었다는 것을 호스트에 알린다(그리고 임의로 준비된 판독의 ID를 포함시킨다)(동작(1886)). 호스트는 이어서 송신 신호를 발행하고(동작(1888)), RCD는 NVM 제어기에 전송하라고 알린다(동작(1890)). 데이터(1892)가 이어서, ID를 포함하는 응답과 함께(동작(1896)), 전송된다(동작(1894)).
도 18b는 다른 실시예의 판독 동작의 플로우차트이다. 도 18b에 도시된 바와 같이, 호스트(100)는 주소로부터의 판독을 명령하고 임의적인 판독 식별자(ID)를 포함시킨다(동작(1805)). RCD(1520)는 명령, 주소 및 ID를 NVM 제어기(1520)로 전달한다(동작(1810)). RCD(1520)는 또한 (주소가 아니라) 명령 및 ID를 DB들(1550)로 전달한다(동작(1815)). 그에 응답하여, DB들(1550)은 판독 데이터를 위한 공간을 할당하고 ID를 사용해 그 할당된 공간을 참조한다(동작(1820)). (다른 실시예에서, DB들은 얼마간의 이용가능한 공간을 항상 가지며, ID는 지연된 방식으로 RCD 내에 포함된 ID와 상관된다.) NVM 제어기(1530)가 요청된 데이터를 NVM 디바이스들로부터 판독한 후에(동작(1825)), NVM 제어기(1520)는 데이터 및 ID를 DB들(1550)로 송신하며, DB들(1550)은 ID에 의해 식별되는 할당된 공간에 데이터를 넣는다(동작(1835)). NVM 제어기(1520)는 또한 완료 신호 및 ID를 RCD(1520)로 송신하고(동작(1840)), RCD(1520)는 DB들(1550)이 데이터가 제자리에 있다고 확인 응답할 때까지 기다리거나 미리 정의된 시간 동안 기다릴 수 있다(동작(1845)). DB들(1550)이 데이터를 저장했음을 확인 응답한 후에 또는 미리 정의된 시간이 경과한 후에, RCD(1520)는 판독이 준비되었음을 호스트(100)에 알린다(그리고 또한 ID를 포함시킬 수 있다)(동작(1850)). 호스트(100)는 나중에 판독 데이터를 요청하기 위해 송신 명령을 (ID와 함께) 송신한다(동작(1855)). RCD는 이어서 NVM 제어기에 전송하라고 지시한다(동작(1859)). 그에 응답하여, NVM 제어기는 표준에 의해 명시된 임의의 미리 결정된 지연 이후에 ID와 연관된 데이터를 전송하라고 DB들(1550)에 지시한다(동작(1860)). DB들(1550)은 이어서 ID와 연관된 데이터를 전송하고(동작(1865)), RCD는 그것의 대응하는 정보를 전송한다(동작(1870)).
이제부터 도 19a를 살펴보면, 도 19a는 일 실시예의 기입 동작의 플로우차트이다. 도 19a에 도시된 바와 같이, 호스트(100)는 먼저 기입 카운터에 남아있는 임의의 크레딧이 있는지를 검사하는 것 및/또는 지속성 레벨이 0보다 큰지를 검사하는 것에 의해 기입 명령을 전송할 수 있는지를 결정한다(동작(1904)). 기입 카운터 및 지속성 카운터가 임의적이며 구현이 카운터들 중 하나, 둘 다를 가지거나 아무 것도 갖지 않을 수 있다는 것에 유의해야 한다. 이 특정의 예는 기입 및 지속 카운터들 둘 다를 사용하고, 기입이 허용되면, 호스트(100)는 카운터들 둘 다에서의 카운트를 감소시킨다(동작(1908)). RCD(1520)는, 호스트(100)로부터 기입 명령을 수신할 때, 명령 및 주소를 NVM 제어기(1530)로 송신하고(동작(1912)), 기입될 데이터를 DB들(1550)로 송신한다(동작(1922)). RCD(1520)는 또한 NVM 제어기(1530)가 DB들(1550)로부터 데이터를 풀링하는 실시예들에서 임의적인 ID를 포함시킬 수 있다(동작(1925)). 데이터가 이어서 리피트된다(동작(1926)). NVM 제어기(1530)는 이어서 DB들(1550)로부터의 데이터를 그의 기입 버퍼들 내로 수락한다(동작(1932)). NVM 제어기(1530)는 이어서 데이터를 그의 버퍼들을 통해 이동시키고, 궁극적으로 전원 고장 보호 및 기입 보장의 임의적인 상태에 있을 수 있다(동작(1934)). NVM 제어기(1530)는 이어서 데이터를 NVM 디바이스들(1540)에 기입한다(동작(1936)).
이 실시예에서, 저장 시스템(100)이 기입이 완료되었음을 다시 호스트(100)로 통신할 수 있는 세 곳이 있다. 프로토콜은 이들을 구별할 수 있거나 그렇지 않을 수 있으며, 그들을 개별적으로 추적할 수 있거나 그렇지 않을 수 있다. 또한, 고객들 또는 제조업체들이 상이한 거동들을 구현할 때가 있을 수 있다. 도 19에 도시된 바와 같이, 일 실시예에서, 기입 지속 지시자와 카운터가 증가된다(동작들(1944 및 1948)). 다른 실시예에서, 기입 지속 지시자와 카운터가 증가된다(동작들(1952 및 1956)). 또 다른 실시예에서, 기입 완료 지시자와 카운터가 증가된다(동작들(1964 및 1968)).
도 19b는 다른 실시예의 기입 동작의 플로우차트이다. 도 19b에 도시된 바와 같이, 호스트(100)는 먼저 기입 카운터에 남아있는 임의의 크레딧이 있는지를 검사하는 것 및/또는 지속성 레벨이 0보다 큰지를 검사하는 것에 의해 기입 명령을 전송할 수 있는지를 결정한다(동작(1905)). 기입 카운터 및 지속성 카운터가 임의적이며 구현이 카운터들 중 하나, 둘 다를 가지거나 아무 것도 갖지 않을 수 있다는 것에 유의해야 한다. 이 특정의 예는 기입 및 지속 카운터들 둘 다를 사용하고, 기입이 허용되면, 호스트(100)는 카운터들 둘 다에서의 카운트를 감소시킨다(동작(1910)). RCD(1520)는, 호스트(100)로부터 기입 명령을 수신할 때, 명령 및 주소를 NVM 제어기(1530)로 송신하고(동작(1915)), 기입될 데이터를 DB들(1550)로 송신한다(동작(1920)). RCD(1520)는 또한 NVM 제어기(1530)가 DB들(1550)로부터 데이터를 풀링하는 실시예들에서 기입 ID를 포함시킬 수 있다(동작(1925)). NVM 제어기(1530)가 DB들(1550)로부터 데이터를 풀링하지 않는 경우, DB들(1550)은 ID에 대한 데이터를 요청하기 위해, RCD(1520)에 의해 조정되는 바와 같이, 기입 데이터를 NVM 제어기(1520)로 푸시한다(동작(1930)). 데이터는 이어서 NVM 제어기(1530)로 이동된다(동작(1932)). NVM 제어기(1530)는 이어서 DB들(1550)로부터의 데이터를 그의 기입 버퍼들 내로 수락한다(동작(1935)). NVM 제어기(1530)는 이어서 데이터를 그의 버퍼들을 통해 이동시키고, 궁극적으로 전원 고장 보호 및 기입 보장의 임의적인 상태에 있을 수 있다(동작(1940)). NVM 제어기(1530)는 이어서 데이터를 NVM 디바이스들(1540)에 기입한다(동작(1945)).
이 실시예에서, 저장 시스템(100)이 기입이 완료되었음을 다시 호스트(100)로 통신할 수 있는 세 곳이 있다. 프로토콜은 이들을 구별할 수 있거나 그렇지 않을 수 있으며, 그들을 개별적으로 추적할 수 있거나 그렇지 않을 수 있다. 또한, 고객들 또는 제조업체들이 상이한 거동들을 구현할 때가 있을 수 있다. 도 19에 도시된 바와 같이, 일 실시예에서, 기입 지속 지시자와 카운터가 증가된다(동작들(1955 및 1960)). 다른 실시예에서, 기입 지속 지시자와 카운터가 증가된다(동작들(1970 및 1975)). 또 다른 실시예에서, 기입 완료 지시자와 카운터가 증가된다(동작들(1985 및 1990)).
NVM 제어기(1520)가 SDRAM 버스 상에 호스트(100)에 의해 발생된 것보다 더 느린 클록을 필요로 할 수 있기 때문에, NVM 제어기(1520)의 사용으로 인해 해결될 필요가 있을 수 있는 다른 문제는 클록 레이트이다.  전통적인 DIMM들로부터의 고속 버스 라인들은 NVM 제어기(1520) 상의 입출력 연결들에서의 복잡한 회로부는 물론, 저장 시스템(1500)에서의 주의깊은 라우팅을 필요로 할 수 있다. 이것을 해결하기 위해, 일 실시예에서, RCD(1520)는 저장 시스템(100) 내의 내부 라인들에서의 데이터를 보다 느린 주파수로 전송하기 위해 클록 속도를 변경할 수 있다. (RCD(1520)가 이 기능을 수행하는 것에 대한 대안으로서, NVM 제어기(1520) 또는 저장 시스템(100) 내의 일부 다른 컴포넌트가 클록 속도를 변경할 수 있다.) 이것은 들어오는 데이터에 대해 도 20에서 개략적으로 도시된다(동일한 변환이 데이터를 다시 호스트(100)로 송신하기 위해 역으로 적용될 수 있다). 도 20은 호스트(100)측(도 20의 좌측 부분)으로부터 그리고 NVM 제어기(1530)측(도 20의 우측 부분)으로부터의 클록, DQ, 및 DQ 스트로브 신호를 도시한다. 이 도면에 도시된 바와 같이, 호스트(100)로부터의 클록 신호는, DDR 프로토콜에 기인하여, 데이터 및 데이터 스트로브들이 비교적 높은 주파수 - 이는 NVM 제어기(1530)가 그의 회로부에 대한 변화가 그다지 없이 핸들링하기에는 너무 클 수 있음 - 에서 발생하게 하는 주파수(Thost)에 있다. 이와 달리, 도 20의 오른쪽 부분에 의해 도시된 바와 같이, 클록을 Tnvsdimm으로 낮추는 것에 의해, 데이터 및 데이터 스트로브들이, NVM 제어기(1530)에게 보다 용이한, 비교적 낮은 주파수로 느려질 수 있다.
RCD(1520)는 임의의 적당한 방법을 사용하여 클록을 느려지게 하도록 구성될 수 있다. 예를 들어, RCD(1520)는 (예컨대, 보다 느린 주파수를 생성하기 위해 주파수를 정수로 나누는 것에 의해) 소스 클록으로부터 보다 느린 클록들을 발생시키기 위해 클록 분주기들을 포함할 수 있다. RCD(1520)는 또한 클록 주파수를 증가시키기 위해, 클록 주파수를 비정수 분수로 나누는 데 중요할 수 있는, PLL(phase-locked loop)을 포함할 수 있다. 예를 들어, 클록 주파수를 3/2로 나누기 위해(또는 환언하면, 2/3와 곱하기 위해), 클록 주파수를 3으로 나누기 전에 클록 주파수를 먼저 두 배하기 위해 PLL이 사용될 수 있다. 다른 예로서, RCD(1520)는 지연 보상 회로부를 가질 수 있다(예컨대, 위상 동기 루프(phase-locked loop)는 보상할 지연을 그의 피드백 루프에 포함할 수 있고, 따라서 지연이 클록 출력으로부터 자동으로 차감될 것이거나; 지연들을 명시적으로 조정하기 위해 명시적 지연 동기 루프(delay-locked loop)들이 추가될 수 있다). 또 다른 예로서, RCD(1520)는 클록뿐만 아니라 데이터를 느려지게 하는 데이터 동기화기들을 가질 수 있다. 이것은 선입 선출(first-in-first-out) 메모리를 사용하여 수행될 수 있고, 이는 하나의 클록 도메인(clock domain)으로부터 다른 클록 도메인으로 데이터를 안전하게 이동시키는 장점을 갖는다.
앞서 언급된 바와 같이, RCD(1520)에서 이 클록-변경 컴포넌트들을 구현하는 대신, 그들이 NVM 제어기(1520)에서 구현될 수 있다. 또한, RCD(1502)는 DIMM 내부 배선 상의 신호 무결성 및 라우팅 요구사항들을 완화시키기 위해 클록 및 데이터 재클로킹 기능들을 포함할 수 있다.  게다가, 3개의 클록들이 사용될 수 있고(호스트와 대화하기 위한 것(아주 빠름), 매체 제어기로 데이터를 송신하기 위한 것(덜 빠름), 그리고 NVM과 대화하기 위한 것(훨씬 덜 빠름)), 이 경우에 NVM 제어기(1520)와 RCD(1520) 둘 다는 일부 클록 변환을 수행할 수 있다.
RCD를 통과할 때 데이터 클록 레이트가 감소하는 실시예들에서, 클록은 바람직하게는 모든 DB들에 분배된다. 따라서, DB들은 호스트 클록 및 매체 제어기측 클록의 복제본을 수신할 수 있다.  또한, RCD는 바람직하게는 매체 제어기측 클록이 얼마나 느린지를 알고 있으며, 따라서 DB 데이터 전송들을 동기화하는 자신의 작업을 계속할 수 있다.
또한, 클록 변환 외에도, 대역폭 고려사항들이 있을 수 있다. 예를 들어, 도 20의 왼쪽 부분에서, 대역폭은 N 비트 * (1 ns)/(Thost) * 1 GHz, 또는 N/(Thost/1 ns) [Gbits/sec]로서 정의된다. 도 20의 오른쪽 부분에서, 대역폭은 N/(nvdimm/1 ns) [Gbits/sec]로서 정의될 것이다. 대역폭 차이를 고려하기 위해 사용될 수 있는 다양한 접근법들이 있다. 예를 들어, 하나의 접근법은 DIMM에 걸쳐 DDR과 동일한 대역폭을 달성하기 위해 직렬화기와 역직렬화기를 사용한다. 역직렬화기는 f 사이클/초의 주파수와 f*N 비트/초의 전송 레이트를 갖는 N 비트의 좁은 버스를 취하고, 이를 f/b 사이클/초의 주파수와 f*N*a/b 비트/초(a = b의 경우, 대역폭은 보다 넓은, 보다 느린 버스에 대해 동일함)의 전송 레이트를 갖는 N*a 비트의 보다 넓은 버스로 변환할 수 있다. 직렬화기를 사용하는 것은 폭을 f 사이클/초의 주파수를 갖는 N 비트로 다시 변환할 수 있다.
다른 접근법에서, 대역폭 불일치를 보상하기 위해 큐들이 사용될 수 있다. 버스 폭은 DB 입력 및 출력에 대해 동일하다. 이 접근법에서, (호스트(100)로부터 NVM 제어기(1330)로의) 들어오는 데이터는, 선입 선출(FIFO) 메모리일 수 있지만 반드시 그럴 필요는 없는, 버퍼에 보유된다. 버퍼의 사용의 결과, NVM 제어기(1520)로의 전송이 보다 오래 걸릴 수 있지만, 버퍼는 전송 동안의 일시적 보유 장소를 제공한다. (NVM 제어기(1530)로부터 DB들로의) 나가는 데이터는, 낮은 대역폭으로 조금씩 들어오기 때문에, 버퍼(FIFO(이들로 제한되지 않음) 등)에 모아질 수 있다. 완전한 패킷이 수신될 때만 데이터가 호스트로 재전송될 수 있다.
비휘발성 메모리 및 NVM 제어기(1530)의 사용을 고려하기 위해 DB들(1550)에 대한 변경들이 또한 행해질 수 있다. 이 변경들을 이해하기 위해, 먼저 도 21에 도시된 DB(2100)를 생각해본다. 이 DB(2100)는 DQ 신호들을 위한 그리고 DQ 스트로브 신호들을 위한 한 세트의 컴포넌트들을 포함한다. 도 21에 도시된 바와 같이, DQ 신호들을 위한 컴포넌트들은 I/O 버퍼들(2110, 2120), 입력 및 출력 FIFO들(2130, 2140), 그리고 동기화/위상 조정 로직(2115)을 포함한다. DQ 스트로브 신호들을 위한 컴포넌트들은 I/O 버퍼들(2150, 2160)과 스트로브 발생기들(2170, 2180)을 포함한다. DB(2100)는 또한 클록 및 명령 버스 신호들을 그의 입력으로서 갖는 명령 파싱 로직(2190)을 포함한다. 이 실시예에서, FIFO들(2130, 2140)은 데이터를 캐싱하는데 사용되고, RCD 및 DQ 스트로브 발생기들에 의해 동기화된다.  다른 구현에서, FIFO들이 사용되지 않고, DB(2100)는 "통과 모드(pass-through mode)"로 구성된다.
DB가 데이터를 보다 낮은 주파수로 다운컨버팅하도록 구성되는 경우, 도 22에 도시된 바와 같이, 부가의 컴포넌트들이 사용될 수 있다. 도 21에서의 DB(2100)와 같이, DQ 스트로브 신호들을 위한 컴포넌트들은 I/O 버퍼들(2250, 2260) 및 스트로브 발생기들(2270, 2280)을 포함하고, DQ 신호들을 위한 컴포넌트들은 I/O 버퍼들(2210, 2220) 및 동기화/위상 조정 로직(2215)을 포함한다. 그렇지만, 입력 및 출력 FIFO들 대신에, 도 22에서의 DB(22)는 I/O 버퍼들(2230, 2240)을 포함하고, 명령 파싱 로직(2290)은 클록 A(호스트측), 클록 B(NV-DIMM측), 및 RCD로부터의 명령 버스 신호들과 같은 입력들을 포함한다. 그에 부가하여, 입력 및 출력 버퍼들(2230, 2240)이 데이터 저장소와 동기화를 위한 준비 단계(staging area) 둘 다로서 역할하기 때문에, DB(2200)는 비순차 처리를 가능하게 하기 위해 듀얼 포트, 듀얼 클록 랜덤 액세스 메모리들(2235)을 포함한다(제2 FIFO는 추가의 동기화를 위해 사용될 수 있음).
도면들로 돌아간다. 도 23은 도 15에 도시된 아키텍처에 대한 대안의 아키텍처의 예시이다.
도 23a에 도시된 바와 같이, NVM 디바이스들(2540)은 NVM 제어기(2330)를 거치지 않고 DB들(2350)에 연결한다. 이 실시예는 DRAM 속도로 동작하는 NVM 디바이스들이 데이터 레이트들을 DB들(2350) 및 버스(2310)와 일치시킬 수 있을 때 유용할 수 있다. 예기치 못한 지연시간들을 유발하는 매체 위치들에서 충돌하는 기입들 및 판독들이 버스(2310)에 영향을 미치지 않고 DB들(2350)에 의해 흡수될 수 있다. NVM 제어기(2330)는 데이터가 DB들(2350)과 NMV 디바이스들(2340) 사이에서 직접 전달될 수 있게 하면서 DB들(2350), RCD(2320), 및 NVM 활동을 조정할 수 있다.
또한, 앞서 살펴본 바와 같이, RCD 및 DB들을 갖는 저장 시스템이 DIMM의 다양한 변형들(예컨대, UDIMM, RDIMM, 및 LRDIMM)에 부가될 수 있다. 이 DIMM 포맷들 각각에 변형들이 있다. 예를 들어, 전기 라우팅 규칙들의 면에서, UDIMM들이 직선의 짧은 라인들을 갖는다. UDIMM들은 일반적으로 패키지당 적은 수의 DIMM들, DRAM 뱅크들/랭크들과, 서버 마더보드에서 가장 가까운 물리적 레이아웃을 갖는다. DRAM 패키지들 및 명령 라우팅 라인들 모두는 반복가능한 시스템 통합 및 시스템 전기 상호작용들을 위해 명시되어 있다. 이것은 UDIMM들을 가장 저렴한 생산 원가를 갖게 만드는 데 도움이 된다. RDIMM들은 RCD를 가지며, 일반적으로 보다 많은 수의 DIMM들을 갖는다. 패키지당 DRAM 뱅크들/랭크들이 가능하다. DRAM 패키지들, 종단들, 데이터에 대한 라우팅, 및 RCD 상세가 명시된다. RCD와 DRAM 간의 연결들은 완화된 규격이다. UDIMM과 비교할 때, RCD에 대해 비용 증가가 있다. LRDIMM들은 모든 전기 통신 그룹들 상에 아이솔레이터(isolator)들을 가지며, 메모리 제어기에의 DB 및 RCD 연결들은 엄격하게 명시되어 있다. LRDIMM들은 이 3개의 포맷들 중에서 최고 비용을 갖지만, 메모리 제어기당 가장 많은 수의 DIMM들, BGA들, 및 뱅크들/랭크들이 허용된다.
각각의 DRAM 버스(UDIMM, RDIMM, LRDIMM)에 대해, 저장 시스템은 외부 상호작용 컴포넌트들에 대한 규격들을 사용할 수 있다. 이 규격들은 최대 상호운용성을 위한 물리적 및 전기적 특성들을 포괄할 수 있다. 이것은 (예컨대, 전기 규격들과 일치시키기 위한) 물리 시그널링 계층과 (예컨대, 적절한 명령 디코드를 제공하기 위한) 명령 계층 둘 다에 대한 변경들을 포함할 수 있다. 물리 시그널링 계층에 대한 변경들은 제어 세트에 추가의 전송 라인들을 도입하는 것, 또는 클록, 명령, 데이터 또는 제어 세트 라인들(표준의 SDRAM/DDR 제어 세트 라인들 및 응답 버스 둘 다를 포함함) 중 임의의 것의 지오메트리, 임피던스, 및/또는 종단에 대한 변경들을 포함할 수 있다. 명령 계층에서, 이 변경들은 또한, 이 상이한 포맷들이 경험하는 지연에 따라, 상이한 Tsend들 중에서 선택하는 것, 또는 새로운 명령들에 새로운 해석을 추가하는 것(예컨대, 특정의 행 디코딩 비트들을 랭크 내의 주소들이 아니라 오히려 DIMM 내의 부가의 랭크들의 유추된 선택과 연관시키는 것)을 포함할 수 있다.
또한, NVM 제어기로부터 RCD 및 DB들로의 내부 연결들에 대한 파라미터화된 규격들이 확정될 수 있다. 내부 연결들은 벤더 특정 최적화, 패키지 통합, 또는 ASIC 통합을 가능하게 하기 위해 임의적일 수 있다. 규격들은 다양한 NVM 제어기 배치들, 다양한 데이터 통신 레이트들, 및 신호 무결성 특성들을 핸들링하기에 충분히 강건할 수 있다. RAM 버퍼 크기조정 및 RCD 타이밍 거동들에 대한 규격들은 또한 성공적인 벤더 무관 상호운용성을 위해 사용될 수도 있다.
도면들로 돌아가서, 도 23b는 일 실시예의 RCD(2360)의 예시이다. 도 23b에 도시된 바와 같이, 이 실시예에서의 RCD(2360)는 입력 버퍼들(2363), 래치들/FF들(2363), 제어 레지스터들(2364), 출력 버퍼들(2365), CS, CKE, 디코드 로직(2366), 제어 로직(2367), 클록 버퍼들(2368), PLL(2369), 및 PLL 피드백 지연 보상 모듈 (2370)을 포함한다. 이 RCD(2360) 내의 회로 요소들 중 다수는 앞서 논의된 RCD에서 발견되는 것들과 유사할 수 있다. 그렇지만, SNVRAM들을 지원하기 위해 비결정적으로 타이밍이 결정되는 SNVRAM 명령 시퀀스들의 속성을 고려하기 위해 제어 로직(2367)의 구성이 변경될 수 있다. 제어 로직(2367)은 RCD의 거동 응답을 맡고 있으며, DRAM DIMM RCD들이 도 18 및 도 19 상의 플로우차트들에 도시된 명령 흐름들을 조율할 수 있도록 변경들이 행해질 수 있다. RCD는 또한 보다 많은 명령들, 제어들, 및 주소들을 이해하는 구별하는 능력을 가지고 있다. NVM 제어기와 같은 새로운 부분들을 동기화시키기 위해 부가의 출력들 및 입력들이 있을 수 있다.
마지막으로, 앞서 언급된 바와 같이, 임의의 적당한 유형의 메모리가 사용될 수 있다. 반도체 메모리 디바이스들은 DRAM(dynamic random access memory) 또는 SRAM(static random access memory) 디바이스들과 같은 휘발성 메모리 디바이스들, ReRAM(resistive random access memory), EEPROM(electrically erasable programmable read only memory), 플래시 메모리(EEPROM의 서브셋으로 간주될 수도 있음), FRAM(ferroelectric random access memory), 및 MRAM(magnetoresistive random access memory)과 같은 비휘발성 메모리 디바이스들, 그리고 정보를 저장할 수 있는 다른 반도체 요소들을 포함한다. 각각의 유형의 메모리 디바이스는 상이한 구성들을 가질 수 있다. 예를 들어, 플래시 메모리 디바이스들은 NAND 또는 NOR 구성으로 구성될 수 있다.
메모리 디바이스들은, 임의의 조합으로, 수동 및/또는 능동 요소들로 형성될 수 있다. 비제한적인 예로서, 수동 반도체 메모리 요소들은, 일부 실시예에서, 안티퓨즈(anti-fuse), 상변화 재료 등과 같은, 저항률 스위칭 저장 요소(resistivity switching storage element) 그리고, 임의로, 다이오드 등과 같은, 조정 요소(steering element)를 포함하는, ReRAM 디바이스 요소들을 포함한다. 게다가 비제한적인 예로서, 능동 반도체 메모리 요소들은, 일부 실시예들에서, 부유 게이트, 전도성 나노입자들, 또는 전하 저장 유전체 재료와 같은 전하 저장 영역을 포함하는 요소들을 포함하는, EEPROM 및 플래시 메모리 디바이스 요소들을 포함한다.
다수의 메모리 요소들은 직렬로 연결되도록 또는 각각의 요소가 개별적으로 액세스가능하도록 구성될 수 있다. 비제한적인 예로서, NAND 구성으로 된 플래시 메모리 디바이스들(NAND 메모리)은 전형적으로 직렬로 연결된 메모리 요소들을 포함한다. NAND 메모리 어레이는 어레이가 다수의 메모리 스트링(string of memory)들로 이루어지도록 구성될 수 있고, 여기서 스트링은 단일의 비트 라인(bit line)을 공유하고 그룹으로서 액세스되는 다수의 메모리 요소들로 이루어져 있다. 대안적으로, 메모리 요소들은 각각의 요소가 개별적으로 액세스가능하도록 구성될 수 있다 - 예컨대, NOR 메모리 어레이 -. NAND 및 NOR 메모리 구성들은 예시적인 것이고, 메모리 요소들이 다른 방식으로 구성될 수 있다.
기판 내에 및/또는 그 위에 위치된 반도체 메모리 요소들이, 2차원 메모리 구조물 또는 3차원 메모리 구조물과 같이, 2차원 또는 3차원으로 배열될 수 있다.
2차원 메모리 구조물에서, 반도체 메모리 요소들은 단일의 평면 또는 단일의 메모리 디바이스 레벨에 배열된다. 전형적으로, 2차원 메모리 구조물에서, 메모리 요소들은 메모리 요소들을 지지하는 기판의 주 표면에 실질적으로 평행하게 연장되는 평면에(예컨대, x-z 방향 평면에) 배열된다. 기판은 웨이퍼일 수 있거나 - 웨이퍼 위에 또는 웨이퍼 내에 메모리 요소들의 층이 형성됨 -, 메모리 요소들이 형성된 후에 메모리 요소들에 부착되는 캐리어 기판(carrier substrate)일 수 있다. 비제한적인 예로서, 기판은 실리콘과 같은 반도체를 포함할 수 있다.
메모리 요소들은 단일의 메모리 디바이스 레벨에 정렬된 어레이(ordered array)로 - 예컨대, 복수의 행들 및/또는 열들로 - 배열될 수 있다. 그렇지만, 메모리 요소들은 비규칙적 또는 비직교적 구성들로 배열될 수 있다. 메모리 요소들 각각은 2개 이상의 전극들 또는 콘택 라인(contact line)들 - 비트 라인들 및 워드 라인들 등 - 을 가질 수 있다.
3차원 메모리 어레이는 메모리 요소들이 다수의 평면들 또는 다수의 메모리 디바이스 레벨들을 차지함으로써, 구조물을 3차원으로(즉, x, y 및 z 방향으로, 여기서 y 방향은 기판의 주 표면에 실질적으로 수직이고 x 방향 및 z 방향은 그에 실질적으로 평행함) 형성하도록 배열된다.
비제한적인 예로서, 3차원 메모리 구조물은 다수의 2차원 메모리 디바이스 레벨들의 스택으로서 수직으로 배열될 수 있다. 다른 비제한적인 예로서, 3차원 메모리 어레이는 다수의 수직 열들(예컨대, 기판의 주 표면에 실질적으로 수직으로, 즉 y 방향으로 연장되는 열들) - 각각의 열은 각각의 열에 다수의 메모리 요소들을 가짐 - 로서 배열될 수 있다. 열들이 2차원 구성으로(예컨대, x-z 평면에) 배열될 수 있고, 그 결과 다수의 수직으로 적층된 메모리 평면들 상에 요소들을 갖는 메모리 요소들의 3차원 배열이 얻어진다. 3차원으로 된 메모리 요소들의 다른 구성들이 또한 3차원 메모리 어레이를 구성할 수 있다.
비제한적인 예로서, 3차원 NAND 메모리 어레이에서, 메모리 요소들이 단일의 수평(예컨대, x-z) 메모리 디바이스 레벨 내에 NAND 스트링을 형성하기 위해 서로 결합될 수 있다. 대안적으로, 메모리 요소들이 다수의 수평 메모리 디바이스 레벨들에 걸쳐 횡단하는 수직 NAND 스트링을 형성하기 위해 서로 결합될 수 있다. 일부 NAND 스트링들은 단일의 메모리 레벨에 있는 메모리 요소들을 포함하는 반면 다른 스트링들은 다수의 메모리 레벨들을 통해 걸쳐 있는 메모리 요소들을 포함하는 다른 3차원 구성들이 생각될 수 있다. 3차원 메모리 어레이들이 또한 NOR 구성으로 그리고 ReRAM 구성으로 설계될 수 있다.
전형적으로, 모놀리식 3차원 메모리 어레이에서, 하나 이상의 메모리 디바이스 레벨들이 단일의 기판 위쪽에 형성된다. 임의로, 모놀리식 3차원 메모리 어레이는 또한 적어도 부분적으로 단일의 기판 내에 하나 이상의 메모리 층들을 가질 수 있다. 비제한적인 예로서, 기판은 실리콘과 같은 반도체를 포함할 수 있다. 모놀리식 3차원 어레이에서, 어레이의 각각의 메모리 디바이스 레벨을 구성하는 층들은 어레이의 아래에 있는 메모리 디바이스 레벨들의 층들 상에 형성된다. 그렇지만, 모놀리식 3차원 메모리 어레이의 인접한 메모리 디바이스 레벨들의 층들은 공유되거나 메모리 디바이스 레벨들 사이에 중간 층들을 가질 수 있다.
이어서 다시 말하지만, 2차원 어레이들이 개별적으로 형성된 다음에, 다수의 메모리 층들을 가지는 비모놀리식 메모리 디바이스를 형성하기 위해 하나로 패키징될 수 있다. 예를 들어, 메모리 레벨들을 개별 기판들 상에 형성하고 이어서 메모리 레벨들을 서로의 위에 적층시키는 것에 의해 비모놀리식 적층형 메모리들이 구성될 수 있다. 기판들이 적층 이전에 박형화되거나 메모리 디바이스 레벨들로부터 제거될 수 있지만, 메모리 디바이스 레벨들이 처음에 개별 기판들 위에 형성되기 때문에, 그 결과 얻어진 메모리 어레이들은 모놀리식 3차원 메모리 어레이들이 아니다. 게다가, 적층형 칩 메모리 디바이스를 형성하기 위해, 다수의 2차원 메모리 어레이들 또는 3차원 메모리 어레이들(모놀리식 또는 비모놀리식)이 개별 칩들 상에 형성되고 이어서 하나로 패키징될 수 있다.
메모리 요소들의 동작을 위해 그리고 메모리 요소들과의 통신을 위해 연관된 회로부가 전형적으로 필요하게 된다. 비제한적인 예로서, 메모리 디바이스들은 프로그래밍 및 판독과 같은 기능들을 달성하기 위해 메모리 요소들을 제어하고 구동하는 데 사용되는 회로부를 가질 수 있다. 이 연관된 회로부는 메모리 요소들과 동일한 기판 상에 그리고/또는 별개의 기판 상에 있을 수 있다. 예를 들어, 메모리 판독-기입 동작들을 위한 제어기는 별개의 제어기 칩 상에 그리고/또는 메모리 요소들과 동일한 기판 상에 위치될 수 있다.
본 기술 분야의 통상의 기술자는 본 발명이 기술된 예시적인 2차원 및 3차원 구조들로 제한되지 않고, 본원에 기술되는 바와 같이 그리고 본 기술분야의 통상의 기술자에 의해 이해되는 바와 같이 본 발명의 사상 및 범주 내의 모든 관련 메모리 구조들을 포함한다는 것을 알 것이다.
이상의 상세한 설명이 본 발명의 한정으로서가 아니라 본 발명이 취할 수 있는 선택된 형태들의 예시로서 이해되어야 하는 것으로 의도되어 있다. 모든 균등물을 포함한, 하기의 청구항들만이 청구된 발명의 범주를 한정하는 것으로 의도되어 있다. 마지막으로, 본원에 기술되는 바람직한 실시예들 중 임의의 실시예의 임의의 양태가 단독으로 또는 서로 조합하여 사용될 수 있다는 것에 유의해야 한다.

Claims (26)

  1. 저장 시스템으로서,
    복수의 비휘발성 메모리 디바이스들;
    상기 복수의 비휘발성 메모리 디바이스들과 통신하는 제어기 - 상기 제어기는,
    호스트로부터 판독 명령(read command)을 수신하고,
    상기 호스트로부터 상기 판독 명령을 수신하는 것에 응답하여, 상기 복수의 비휘발성 메모리 디바이스들로부터 데이터를 판독하고,
    상기 호스트의 관점에서 미결정된 지속시간(undetermined duration)을 갖는 동작을 수행하고,
    상기 동작이 수행된 이후에 준비 신호(ready signal)를 상기 호스트로 송신하고,
    상기 호스트로부터 송신 명령을 수신하고,
    상기 호스트로부터 상기 송신 명령을 수신하는 것에 응답하여, 상기 데이터를 상기 호스트로 송신하도록
    구성됨 -;
    상기 제어기와 통신하고, 상기 제어기와 상기 호스트 사이에서 송신되는 데이터를 저장하도록 구성된 복수의 데이터 버퍼들; 및
    상기 호스트로부터 송신된 명령들 및 주소들을 저장하도록 구성된 명령 및 주소 버퍼(command and address buffer) - 상기 명령 및 주소 버퍼는 상기 복수의 데이터 버퍼들 안으로의 그리고 밖으로의 데이터 흐름을 동기화하도록 추가로 구성됨 -
    를 포함하는 저장 시스템.
  2. 제1항에 있어서,
    판독 및/또는 기입 명령들이 식별자들과 연관되어, 상기 판독 및/또는 기입 명령들은 상기 호스트로부터 수신되는 순서와는 상이한 순서로 처리될 수 있는 저장 시스템.
  3. 제1항에 있어서,
    상기 명령 및 주소 버퍼는 등록 클록 드라이버(registered clock driver)를 포함하는 저장 시스템.
  4. 제1항에 있어서,
    상기 복수의 데이터 버퍼들은 랜덤 액세스 메모리를 포함하는 저장 시스템.
  5. 제1항에 있어서,
    상기 명령 및 주소 버퍼는 상기 호스트로부터 수신된 클록의 주파수를 변경하도록 추가로 구성되는 저장 시스템.
  6. 제1항에 있어서,
    상기 명령 및 주소 버퍼는 대역폭 변환을 수행하도록 추가로 구성되는 저장 시스템.
  7. 제1항에 있어서,
    상기 저장 시스템의 물리 및 명령 계층들은 DRAM DIMM 통신 프로토콜과 호환가능하도록 구성되는 저장 시스템.
  8. 제7항에 있어서,
    상기 저장 시스템의 물리 및 명령 계층들은 UDIMM(unbuffered DIMM), RDIMM(registered DIMM) 및 LRDIMM(load-reduced DIMM) 중 하나 이상과 호환가능하도록 구성되는 저장 시스템.
  9. 제1항에 있어서,
    상기 데이터는 일정 시간 지연(a time delay) 이후에 상기 호스트로 송신되고, 상기 시간 지연은 상기 호스트에 사용되는 통신 프로토콜에 기초하여 선택되는 저장 시스템.
  10. 제1항에 있어서,
    상기 제어기는 클록-데이터 병렬 인터페이스를 사용하여 상기 호스트와 통신하도록 구성되는 저장 시스템.
  11. 제10항에 있어서,
    상기 클록-데이터 병렬 인터페이스는 더블 데이터 레이트(double data rate)(DDR) 인터페이스를 포함하는 저장 시스템.
  12. 제1항에 있어서,
    상기 복수의 비휘발성 메모리 디바이스들 중 적어도 하나는 3차원 메모리를 포함하는 저장 시스템.
  13. 저장 시스템으로서,
    복수의 비휘발성 메모리 디바이스들;
    상기 복수의 비휘발성 메모리 디바이스들과 통신하는 제어기 - 상기 제어기는,
    호스트로부터 기입 명령을 수신하고 - 상기 호스트는 상기 호스트에서의 기입 카운터에 의해 추적되는 바와 같은 특정 개수의 미처리된(outstanding) 기입 명령들만이 허용됨 -,
    상기 호스트의 관점에서 미결정된 지속시간을 갖는 동작을 수행하고,
    상기 복수의 비휘발성 메모리 디바이스들에 데이터를 기입하고,
    상기 데이터가 기입된 이후에 기입 카운터 증가 신호를 상기 호스트로 송신하도록
    구성됨 -;
    상기 제어기와 통신하고, 상기 제어기와 상기 호스트 사이에서 송신되는 데이터를 저장하도록 구성된 복수의 데이터 버퍼들; 및
    상기 호스트로부터 송신된 명령들 및 주소들을 저장하도록 구성된 명령 및 주소 버퍼 - 상기 명령 및 주소 버퍼는 상기 복수의 데이터 버퍼들 안으로의 그리고 밖으로의 데이터 흐름을 동기화하도록 추가로 구성됨 -
    를 포함하는 저장 시스템.
  14. 제13항에 있어서,
    판독 및/또는 기입 명령들이 식별자들과 연관되어, 상기 판독 및/또는 기입 명령들은 상기 호스트로부터 수신되는 순서와는 상이한 순서로 처리될 수 있는 저장 시스템.
  15. 제13항에 있어서,
    상기 명령 및 주소 버퍼는 등록 클록 드라이버를 포함하는 저장 시스템.
  16. 제13항에 있어서,
    상기 복수의 데이터 버퍼들은 랜덤 액세스 메모리를 포함하는 저장 시스템.
  17. 제13항에 있어서,
    상기 명령 및 주소 버퍼는 상기 호스트로부터 수신된 클록의 주파수를 변경하도록 추가로 구성되는 저장 시스템.
  18. 제13항에 있어서,
    상기 명령 및 주소 버퍼는 대역폭 변환을 수행하도록 추가로 구성되는 저장 시스템.
  19. 제13항에 있어서,
    상기 저장 시스템의 물리 및 명령 계층들은 DRAM DIMM 통신 프로토콜과 호환가능하도록 구성되는 저장 시스템.
  20. 제19항에 있어서,
    상기 저장 시스템의 물리 및 명령 계층들은 UDIMM(unbuffered DIMM), RDIMM(registered DIMM) 및 LRDIMM(load-reduced DIMM) 중 하나 이상과 호환가능하도록 구성되는 저장 시스템.
  21. 제13항에 있어서,
    상기 데이터는 일정 시간 지연 이후에 상기 호스트로 송신되고, 상기 시간 지연은 상기 호스트에 사용되는 통신 프로토콜에 기초하여 선택되는 저장 시스템.
  22. 제13항에 있어서,
    상기 제어기는 클록-데이터 병렬 인터페이스를 사용하여 상기 호스트와 통신하도록 구성되는 저장 시스템.
  23. 제22항에 있어서,
    상기 클록-데이터 병렬 인터페이스는 더블 데이터 레이트(DDR) 인터페이스를 포함하는 저장 시스템.
  24. 제13항에 있어서,
    상기 복수의 비휘발성 메모리 디바이스들 중 적어도 하나는 3차원 메모리를 포함하는 저장 시스템.
  25. 저장 시스템으로서,
    복수의 비휘발성 메모리 디바이스들;
    호스트로부터 판독 명령을 수신하는 수단;
    상기 호스트로부터 상기 판독 명령을 수신하는 것에 응답하여, 상기 복수의 비휘발성 메모리 디바이스들로부터 데이터를 판독하는 수단;
    상기 호스트의 관점에서 미결정된 지속시간을 갖는 동작을 수행하는 수단;
    상기 동작이 수행된 이후에 준비 신호를 상기 호스트로 송신하는 수단;
    상기 호스트로부터 송신 명령을 수신하는 수단;
    상기 호스트로부터 상기 송신 명령을 수신하는 것에 응답하여, 상기 데이터를 상기 호스트로 송신하는 수단;
    상기 제어기와 상기 호스트 사이에서 송신되는 데이터를 저장하는 수단; 및
    상기 호스트로부터 송신된 명령들 및 주소들을 저장하는 수단 - 상기 명령 및 주소 버퍼는 상기 복수의 데이터 버퍼들 안으로의 그리고 밖으로의 데이터 흐름을 동기화하도록 추가로 구성됨 -
    을 포함하는 저장 시스템.
  26. 제25항에 있어서,
    상기 호스트로부터 기입 명령을 수신하는 수단 - 상기 호스트는 상기 호스트에서의 기입 카운터에 의해 추적되는 바와 같은 특정 개수의 미처리된 기입 명령들만이 허용됨 -;
    상기 호스트의 관점에서 미결정된 지속시간을 갖는 동작을 수행하는 수단;
    상기 복수의 비휘발성 메모리 디바이스들에 데이터를 기입하는 수단; 및
    상기 데이터가 기입된 이후에 기입 카운터 증가 신호를 상기 호스트로 송신하는 수단
    을 더 포함하는 저장 시스템.
KR1020170072551A 2016-08-26 2017-06-09 전기적으로 버퍼링된 nv-dimm 및 그에 사용하는 방법 KR20180023804A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201662380217P 2016-08-26 2016-08-26
US62/380,217 2016-08-26
US15/297,971 US20180059933A1 (en) 2016-08-26 2016-10-19 Electrically-Buffered NV-DIMM and Method for Use Therewith
US15/297,971 2016-10-19

Publications (1)

Publication Number Publication Date
KR20180023804A true KR20180023804A (ko) 2018-03-07

Family

ID=61242382

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170072551A KR20180023804A (ko) 2016-08-26 2017-06-09 전기적으로 버퍼링된 nv-dimm 및 그에 사용하는 방법

Country Status (3)

Country Link
US (1) US20180059933A1 (ko)
KR (1) KR20180023804A (ko)
CN (1) CN107785044B (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10127074B2 (en) * 2017-01-27 2018-11-13 Futurewei Technologies, Inc. Transaction identification synchronization
KR102443106B1 (ko) 2017-06-23 2022-09-14 후아웨이 테크놀러지 컴퍼니 리미티드 메모리 액세스 기술 및 컴퓨터 시스템
CN111448543B (zh) * 2017-12-07 2021-10-01 华为技术有限公司 内存访问技术及计算机系统
CN109451870B (zh) * 2018-05-18 2023-10-10 北京小米移动软件有限公司 上行数据传输方法、装置及计算机可读存储介质
KR20200015233A (ko) 2018-08-03 2020-02-12 삼성전자주식회사 불휘발성 메모리 장치들을 포함하는 반도체 메모리 모듈
US10782916B2 (en) 2018-08-08 2020-09-22 Micron Technology, Inc. Proactive return of write credits in a memory system
US11409436B2 (en) 2018-08-08 2022-08-09 Micron Technology, Inc. Buffer management in memory systems for read and write requests
US10732892B2 (en) 2018-09-24 2020-08-04 Micron Technology, Inc. Data transfer in port switch memory
US11099779B2 (en) 2018-09-24 2021-08-24 Micron Technology, Inc. Addressing in memory with a read identification (RID) number
KR20200076923A (ko) * 2018-12-20 2020-06-30 에스케이하이닉스 주식회사 저장 장치, 컨트롤러 및 저장 장치의 동작 방법
CN109634785A (zh) * 2018-12-29 2019-04-16 西安紫光国芯半导体有限公司 一种兼容nvdimm-p的nvdimm-n装置和方法
US11468435B1 (en) * 2019-01-03 2022-10-11 Blockchain Innovation, Llc Apparatus and methods of air-gapped crypto storage using diodes
KR102656609B1 (ko) * 2019-01-07 2024-04-12 삼성전자주식회사 극 부호를 이용한 신호 송수신 방법 및 그에 따른 장치
TWI700590B (zh) * 2019-01-28 2020-08-01 瑞昱半導體股份有限公司 介面轉接電路
KR20200101626A (ko) * 2019-02-20 2020-08-28 에스케이하이닉스 주식회사 어드레스를 스크램블할 수 있는 반도체 시스템
US10990321B2 (en) 2019-02-20 2021-04-27 Micron Technology, Inc. Memory sub-system for supporting deterministic and non-deterministic commands based on command expiration and the state of the intermediate command queue
US20200342917A1 (en) * 2019-04-24 2020-10-29 Samsung Electronics Co., Ltd. Memory module and memory system having the same
US11537521B2 (en) * 2019-06-05 2022-12-27 Samsung Electronics Co., Ltd. Non-volatile dual inline memory module (NVDIMM) for supporting dram cache mode and operation method of NVDIMM
US11347860B2 (en) * 2019-06-28 2022-05-31 Seagate Technology Llc Randomizing firmware loaded to a processor memory
US11030128B2 (en) * 2019-08-05 2021-06-08 Cypress Semiconductor Corporation Multi-ported nonvolatile memory device with bank allocation and related systems and methods
KR20210033593A (ko) * 2019-09-18 2021-03-29 삼성전자주식회사 메모리 모듈 및 그것의 동작 방법
US20210173784A1 (en) * 2019-12-06 2021-06-10 Alibaba Group Holding Limited Memory control method and system
US11650925B2 (en) 2019-12-17 2023-05-16 Micron Technology, Inc. Memory interface management
US11244735B2 (en) * 2020-02-18 2022-02-08 Sandisk Technologies Llc Systems and methods for program verification on a memory system
US11436144B2 (en) * 2020-04-10 2022-09-06 Micron Technology, Inc. Cache memory addressing
US11347394B2 (en) 2020-08-03 2022-05-31 Seagate Technology Llc Controlling SSD performance by the number of active memory dies
US11735232B2 (en) * 2021-03-15 2023-08-22 Montage Technology Co., Ltd. Memory device with split power supply capability
CN116072203A (zh) * 2021-10-29 2023-05-05 长鑫存储技术有限公司 基础芯片、存储系统以及半导体结构
CN114442587B (zh) * 2021-12-21 2024-04-16 潍柴动力股份有限公司 发动机异常断电监控方法、系统及存储介质
US20240069783A1 (en) * 2022-08-29 2024-02-29 Micron Technology, Inc. Memory phase monitoring and scheduling system
CN115938456B (zh) * 2023-03-09 2023-07-25 长鑫存储技术有限公司 半导体存储装置的测试方法、装置、设备及介质
CN118051191A (zh) * 2024-04-16 2024-05-17 电子科技大学 一种支持参数化和并行访问的非易失存储器电路、装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001060392A (ja) * 1999-08-24 2001-03-06 Mitsubishi Electric Corp 半導体装置
US7512650B2 (en) * 2002-01-11 2009-03-31 Thomson Licensing Physical layer recovery in a streaming data delivery system
JP2003308698A (ja) * 2002-04-12 2003-10-31 Toshiba Corp 不揮発性半導体メモリ装置
CN201444394U (zh) * 2009-08-13 2010-04-28 中国华录·松下电子信息有限公司 可修改配置参数的ddr2控制器
US8531898B2 (en) * 2010-04-02 2013-09-10 Samsung Electronics Co., Ltd. On-die termination circuit, data output buffer and semiconductor memory device
US9754648B2 (en) * 2012-10-26 2017-09-05 Micron Technology, Inc. Apparatuses and methods for memory operations having variable latencies
US9411722B2 (en) * 2013-03-04 2016-08-09 Sandisk Technologies Llc Asynchronous FIFO buffer for memory access
US9990246B2 (en) * 2013-03-15 2018-06-05 Intel Corporation Memory system
US9195542B2 (en) * 2013-04-29 2015-11-24 Amazon Technologies, Inc. Selectively persisting application program data from system memory to non-volatile data storage
KR20150116174A (ko) * 2014-04-07 2015-10-15 에스케이하이닉스 주식회사 비휘발성 메모리 장치 및 비휘발성 메모리 장치의 동작 방법

Also Published As

Publication number Publication date
US20180059933A1 (en) 2018-03-01
CN107785044A (zh) 2018-03-09
CN107785044B (zh) 2021-05-04

Similar Documents

Publication Publication Date Title
CN107785044B (zh) 电缓冲nv-dimm和其使用方法
US11610642B2 (en) Storage system with multiple components and method for use therewith
US20180059976A1 (en) Storage System with Integrated Components and Method for Use Therewith
US20180059945A1 (en) Media Controller with Response Buffer for Improved Data Bus Transmissions and Method for Use Therewith
US10025522B2 (en) Memory interface command queue throttling
KR100621631B1 (ko) 반도체 디스크 제어 장치
US7984329B2 (en) System and method for providing DRAM device-level repair via address remappings external to the device
US7669086B2 (en) Systems and methods for providing collision detection in a memory system
US10593380B1 (en) Performance monitoring for storage-class memory
US7606988B2 (en) Systems and methods for providing a dynamic memory bank page policy
US10331345B2 (en) Method and apparatus for reducing silent data errors in non-volatile memory systems
US10777271B2 (en) Method and apparatus for adjusting demarcation voltages based on cycle count metrics
US10528286B2 (en) Interface for non-volatile memory
US20070276976A1 (en) Systems and methods for providing distributed technology independent memory controllers
US20090187794A1 (en) System and method for providing a memory device having a shared error feedback pin
US11928042B2 (en) Initialization and power fail isolation of a memory module in a system
WO2021040964A1 (en) Semiconductor device with modified command and associated methods and systems
TW202223903A (zh) 適應性內部記憶體錯誤刷洗及錯誤處置
US10228866B2 (en) Performance tuning for storage devices
US20180059943A1 (en) Media Controller and Method for Management of CPU-Attached Non-Volatile Memory
CN110998729B (zh) 使用与存储器集成的逻辑来执行后台功能
DE102017112446A1 (de) Elektrisch gepuffertes NV-DIMM und Verfahren zur Verwendung damit
US20220011939A1 (en) Technologies for memory mirroring across an interconnect
WO2024040569A1 (en) Data handling during a reflow operation
WO2022232980A1 (en) Debug interface between host system and memory system

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application