KR102446825B1 - 하이브리드 메모리 시스템의 동작을 제어하는 회로들 및 방법들 - Google Patents

하이브리드 메모리 시스템의 동작을 제어하는 회로들 및 방법들 Download PDF

Info

Publication number
KR102446825B1
KR102446825B1 KR1020177024101A KR20177024101A KR102446825B1 KR 102446825 B1 KR102446825 B1 KR 102446825B1 KR 1020177024101 A KR1020177024101 A KR 1020177024101A KR 20177024101 A KR20177024101 A KR 20177024101A KR 102446825 B1 KR102446825 B1 KR 102446825B1
Authority
KR
South Korea
Prior art keywords
memory
data
access
controlling
circuit
Prior art date
Application number
KR1020177024101A
Other languages
English (en)
Other versions
KR20170107559A (ko
Inventor
미카엘라 블롯트
링 리우
코넬리스 에이. 비스서스
Original Assignee
자일링크스 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 자일링크스 인코포레이티드 filed Critical 자일링크스 인코포레이티드
Publication of KR20170107559A publication Critical patent/KR20170107559A/ko
Application granted granted Critical
Publication of KR102446825B1 publication Critical patent/KR102446825B1/ko

Links

Images

Classifications

    • 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/1694Configuration of memory controller to different memory types
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • 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/1051Data output circuits, e.g. read-out amplifiers, data output buffers, data output registers, data output level conversion circuits
    • G11C7/1057Data output buffers, e.g. comprising level conversion circuits, circuits for adapting load
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Dram (AREA)
  • Transceivers (AREA)

Abstract

상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하기 위한 회로가 설명된다. 이 회로는, 제 1 타입의 메모리 엘리먼트를 갖고 제 1 액세스 시간을 갖는 제 1 메모리(208); 제 2 타입의 메모리 엘리먼트를 갖고 제 2 액세스 시간을 갖는 제 2 메모리(212)(여기서, 제 2 타입의 메모리 엘리먼트는 제 1 타입의 메모리 엘리먼트와 상이함); 제 1 메모리(208) 및 제 2 메모리(212)로의 액세스를 가능하게 하는 메모리 제어 회로(203); 제 1 액세스 시간과 제 2 액세스 시간의 차이를 보상하기 위해 제 2 메모리에 커플링된 지연 버퍼(214); 및 제 1 메모리의 출력들과 제 2 메모리의 지연된 출력들을 병합(merging)하여 순서화된 출력 데이터를 생성하는 회로(216)를 포함한다. 메모리 시스템의 동작을 제어하는 방법(도 7)이 또한 개시된다.

Description

하이브리드 메모리 시스템의 동작을 제어하는 회로들 및 방법들
본 발명은 일반적으로 집적 회로 디바이스들에 관한 것이고, 특히 상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하는 회로들 및 방법들에 관한 것이다.
데이터 센터들은, 전세계 어디에서든 다양한 컴퓨팅 디바이스들을 통해 코히어런트하게(coherently) 스토리지, 소셜 네트워킹, 게이밍, 웹 검색 및 수많은 다른 서비스들을 전달하고, 제공되는 서비스들의 완전한 다양성 및 사이즈가 매일 성장하고 있다. 현재 캡쳐되어 교환되는 무정형 데이터 양의 폭발적인 증가를 비롯하여, 몇가지 주요한 요인들이 이러한 성장에 기여한다. 데이터 센터들을 구현하는데 있어서 직면되는 근본적인 도전과제들 중 하나는 계속 증가하는 양의 데이터를 처리하고 저장하는 것이다.
다양한 목적들을 위해 대량의 데이터를 저장하는데 사용되는 데이터 센터들은 많은 산업 분야들에서 중요해지고 있으며, 여기서 데이터 센터들은 더 증가하는 양의 데이터를 저장하고 프로세싱할 때의 동작을 개선하는데 집중하고 있다. SSD(solid state drive)들은, 이들이 하드 디스크 드라이브들보다 훨씬 더 높은 성능(예컨대, IOPS(input/output operations per second)) 및 더 낮은 액세스 레이턴시, 그리고 표준 DRAM(dynamic random access memory)보다 더 높은 저장 밀도, 더 낮은 비용 및 더 낮은 전력 소비를 저장 계층의 추가 티어에 제공하기 때문에, 빠르게 인기를 얻고 있다. 그러나, 그들의 큰 액세스 레이턴시는, 멀티코어 프로세서들이 성능을 희생시키지 않으면서 큰 액세스 레이턴시들을 처리할 수 없기 때문에, SSD들이 표준 DRAM과 조합되는 것을 막는다.
이에 따라, 메모리 시스템의 동작을 제어하기 위한 개선된 회로들이 유용할 것이다.
상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하기 위한 회로가 설명된다. 이 회로는, 제 1 타입의 메모리 엘리먼트를 갖고 제 1 액세스 시간을 갖는 제 1 메모리; 제 2 타입의 메모리 엘리먼트를 갖고 제 2 액세스 시간을 갖는 제 2 메모리(여기서, 제 2 타입의 메모리 엘리먼트는 제 1 타입의 메모리 엘리먼트와 상이함); 제 1 메모리 및 제 2 메모리로의 액세스를 가능하게 하는 메모리 제어 회로; 제 1 액세스 시간과 제 2 액세스 시간의 차이를 보상하기 위해 제 2 메모리에 커플링된 지연 버퍼; 및 제 1 메모리의 출력 데이터와 제 2 메모리의 지연된 출력 데이터를 병합(merging)하여 순서화된 출력 데이터를 생성하는 회로를 포함한다.
선택적으로, 메모리 제어 회로는 제 1 메모리와 연관된 제 1 메모리 제어기 및 제 2 메모리와 연관된 제 2 메모리 제어기를 포함한다.
선택적으로, 메모리 제어 회로는 제 1 메모리 제어기 및 제 2 메모리 제어기에 커플링된 메모리 선택 회로를 포함하고, 이 메모리 선택 회로는 제 1 메모리 및 제 2 메모리 중 원하는 메모리로의 액세스를 가능하게 한다.
선택적으로, 제 1 메모리는 SSD 메모리를 포함한다.
선택적으로, 제 2 메모리는 DRAM을 포함한다.
선택적으로, 지연 버퍼는 PLD 상의 RAM의 블록을 포함한다.
선택적으로, PLD 상의 RAM의 블록은 미리결정된 지연 동안 데이터를 버퍼링함으로써 제 1 액세스 시간과 제 2 액세스 시간의 차이를 보상한다.
선택적으로, 미리결정된 지연 이후에 RAM의 블록으로부터 데이터가 판독된다.
선택적으로, PLD는 구성 비트들을 수신하도록 커플링된다.
선택적으로, RAM의 블록은 구성 비트들을 사용하여 프로그래밍되는 프로그래머블 인터커넥트 엘리먼트들을 사용하여 제 2 메모리에 커플링된다.
선택적으로, 제 1 메모리는 비-휘발성 메모리를 포함하고, 제 2 메모리는 휘발성 메모리를 포함한다.
선택적으로, 이 회로는 제 1 메모리 및 제 2 메모리에 대한 메모리 액세스들을 제어하는 메모리 변환기(memory translator)를 더 포함하고, 여기서 메모리 변환기는 제 1 메모리에 액세스할지 또는 제 2 메모리에 액세스할지를 결정한다.
선택적으로, 메모리 변환기는 제 1 메모리 및 제 2 메모리와 연관된 액세스 시간들에 관련된 정보를 저장하기 위한 프로파일러를 포함한다.
선택적으로, 메모리 변환기는 프로파일러에 저장된 정보에 기반하여 제 1 메모리에 액세스할지 또는 제 2 메모리에 액세스할지를 결정한다.
상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하기 위한 방법이 또한 설명된다. 이 방법은, 제 1 타입의 메모리 엘리먼트를 갖고 제 1 액세스 시간을 갖는 제 1 메모리를 구현하는 단계; 제 2 타입의 메모리 엘리먼트를 갖고 제 2 액세스 시간을 갖는 제 2 메모리를 구현하는 단계 - 여기서, 제 2 타입의 메모리 엘리먼트는 제 1 타입의 메모리 엘리먼트와 상이함 -; 제 1 메모리 및 제 2 메모리로의 액세스를 가능하게 하는 단계; 제 1 액세스 시간과 제 2 액세스 시간의 차이를 보상하기 위해 제 2 메모리에 지연 버퍼를 커플링하는 단계; 및 순서화된 출력 데이터를 생성하기 위해 제 1 메모리의 출력 데이터와 제 2 메모리의 지연된 출력 데이터를 병합하는 단계를 포함한다.
선택적으로, 제 1 메모리에 액세스하는 단계는 제 1 메모리와 연관된 제 1 메모리 제어기에 의해 제 1 메모리에 액세스하는 단계를 포함하고, 제 2 메모리에 액세스하는 단계는 제 2 메모리와 연관된 제 2 메모리 제어기에 의해 제 2 메모리에 액세스하는 단계를 포함한다.
선택적으로, 이 방법은 제 1 메모리 제어기 및 제 2 메모리 제어기에 커플링된 메모리 선택 회로를 구현하는 단계를 더 포함하고, 이 메모리 선택 회로는 제 1 메모리 및 제 2 메모리 중 선택된 메모리로의 액세스를 가능하게 한다.
선택적으로, 제 1 메모리에 액세스하는 단계는 SSD 메모리를 구현하는 단계를 포함한다.
선택적으로, 제 2 메모리에 액세스하는 단계는 DRAM을 구현하는 단계를 포함한다.
선택적으로, 제 2 메모리에 의해 출력된 데이터를 지연 버퍼에 커플링하는 단계는 PLD 상의 RAM의 블록에 데이터를 커플링하는 단계를 포함한다.
도 1은 복수의 메모리들로의 액세스를 가능하게 하는 회로의 블록도이다.
도 2는 상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하고 그리고 순차적(in-order) 프로세싱을 가능하게 하기 위한 회로의 블록도이다.
도 3은 상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하고 그리고 비-순차적(out-of-order) 프로세싱을 가능하게 하기 위한 회로의 블록도이다.
도 4는 상이한 타입들의 메모리에 액세스하기 위한 회로를 갖는 메모리 시스템의 동작을 제어하는 회로의 블록도이다.
도 5는 상이한 타입들의 메모리에 액세스하기 위한 회로를 갖는 메모리 시스템의 동작을 제어하는 회로의 다른 블록도이다.
도 6은 상이한 타입들의 메모리를 갖는 메모리 시스템을 구현하는 방법을 나타내는 플로우차트이다.
도 7은 상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하는 방법을 나타내는 플로우차트이다.
도 8은 링-노드 구현에서 메모리를 배정하기 위한 회로를 나타내는 블록도이다.
도 9는 메모리 변환기의 아키텍쳐를 나타내는 블록도이다.
도 10은 도 9의 메모리 변환기의 프로파일러의 동작을 나타내는 플로우차트이다.
도 11은 데이터가 저장되는 복수의 메모리들 중 하나의 메모리를 결정하는 방법을 나타내는 플로우차트이다.
도 12는 DRAM(dynamic random access memory)의 블록도이다.
도 13은 도 12의 DRAM의 메모리 엘리먼트의 블록도이다.
도 14는 SSD(solid-state drive) 메모리의 블록도이다.
도 15는 도 14의 고체-상태 드라이브의 메모리 엘리먼트의 블록도이다.
도 16은 복수의 메모리 타입들을 구현하는 키-값 저장소를 가능하게 하기 위한 회로의 블록도이다.
도 17은 프로그래머블 리소스들을 갖는 디바이스를 프로그래밍하기 위한 시스템의 블록도이다.
도 18은 프로그래머블 리소스들을 갖는 디바이스의 블록도이다.
도 19는 도 18의 디바이스의 구성가능한 로직 엘리먼트의 블록도이다.
데이터 센터들에 사용되는 것들과 같은 대형 메모리 네트워크들이 계속해서 더욱 중요해지고 더 많은 양의 데이터를 저장하는 것에 의존함에 따라서, 메모리 네트워크들의 성능은 더욱 중요해져 가고 있다. 이하에 설명되는 다양한 회로들 및 방법들에 따른 데이터-플로우 아키텍쳐는 상이한 타입들의 메모리를 갖는 메모리 네트워크의 동작을 가능하게 한다. 예컨대, 메모리 시스템의 동작을 제어하기 위한 회로는 큰 액세스 레이턴시들과 같은 메모리들의 차이들을 보상한다. 이하에 설명되는 회로들 및 방법들은, PLD(programmable logic device)들, 이를테면, FPGA(field programmable gate array)들에서 특정 애플리케이션을 발견하고, 종래의 프로세서들을 구현하는 시스템들보다 훨씬 저렴한 비용으로 더 적은 전력으로 그리고 증가된 컴퓨팅 및 저장 밀도들로 테라바이트의 데이터를 프로세싱하고 저장할 수 있는 저장 시스템들을 PLD들에 기반하여 생성하는 것을 가능하게 한다.
예컨대, 회로는 상이한 액세스 시간들과 같은 상이한 특성들을 갖는 상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하는 것을 가능하게 하고, 상이한 메모리로의 액세스를 가능하게 하는 메모리 제어 회로를 포함한다. 이하에서 더욱 상세하게 설명되는 바와 같이, 휘발성 또는 비-휘발성 메모리를 포함하는 다양한 타입들의 메모리가 구현될 수 있다. 지연 버퍼는, 예컨대, 액세스 시간들의 차이들을 보상하기 위해 메모리들 중 하나에 커플링될 수 있다. 회로는, 순서화된 출력 데이터를 생성하기 위해 하나의 메모리의 출력들과 다른 메모리의 지연된 출력들을 병합하기 위해 구현될 수 있다. 종래의 멀티코어 프로세서 디바이스들과는 달리, 데이터흐름 아키텍쳐들을 구현하는 FPGA들은 이러한 큰 액세스 레이턴시들을 성공적으로 보상할 수 있으며, 바람직한 메모리 계층으로서 SSD 메모리를 DRAM과 조합하여 사용하는 것을 가능하게 하여 DRAM을 효과적으로 대체할 수 있다. 이에 의해, 테라바이트의 데이터를 훨씬 더 낮은 비용으로, 더 낮은 전력으로, 증가된 컴퓨팅 및 저장 밀도들로, 그리고 감소된 레이턴시로 프로세싱하고 저장할 수 있는 저장 어플라이언스들을 FPGA들에 기반하여 생성하는 것이 가능하다.
상세한 설명은 신규한 것으로 간주되는 하나 또는 그 초과의 구현들의 특징들을 정의하는 청구항들을 포함하지만, 도면들과 관련하여 상세한 설명을 고려할 때 회로들 및 방법들이 더 잘 이해될 것으로 믿어진다. 다양한 회로들 및 방법들이 개시되지만, 회로들 및 방법들이 다양한 형태들로 구현될 수 있는 본 발명의 어레인지먼트들의 단지 예시적인 것임이 이해되어야 한다. 따라서, 본 명세서 내에 개시된 특정 구조적 및 기능적 세부사항들은 제한적으로 해석되는 것이 아니라, 단지 청구항들에 대한 기초로서 그리고 사실상 임의의 적절하게 세부화된 구조로 본 발명의 어레인지먼트들을 다양하게 사용하도록 당업자들에게 교시하기 위한 대표적인 기초로서 해석되어야 한다. 또한, 본 명세서에서 사용되는 용어들 및 문구들은 제한하려는 것이 아니라 회로들 및 방법들의 이해가능한 설명을 제공하려는 것이다.
우선, 도 1을 참조하면, 복수의 메모리들을 갖는 집적 회로 디바이스의 블록도가 도시된다. 특히, 입/출력 포트(102)는 구성 메모리(108)를 갖는 프로그래머블 리소스들(106)을 제어하는 제어 회로(104)에 커플링된다. 도 16 내지 도 18을 참조하여 이하에 더욱 상세하게 설명되는 구성 데이터는 구성 제어기(110)에 의해 구성 메모리(108)에 제공될 수 있다. 구성 데이터는 구성가능한 엘리먼트들(109)의 동작을 가능하게 한다. 메모리(112) 및 메모리(113)로 본 명세서에 도시된 복수의 메모리 엘리먼트들은 제어 회로(104) 및 프로그래머블 리소스들(106)에 커플링될 수 있다. 메모리 제어기(114)는, 제어 회로(104), 프로그래머블 리소스들(106) 및 메모리들(112 및 113)에 커플링될 수 있고, 집적 회로 디바이스 외부의 신호들을 수신할 수 있거나 또는 신호들을 I/O 포트(116)에 의해 송신할 수 있다. 메모리 제어기(114)는, 이하에 더욱 상세하게 설명되는 바와 같이, 메모리들(112 및 113)을 제어할 수 있다. 대안적으로, 제어 회로(104) 또는 프로그래머블 리소스들의 회로는 이하에 설명된 바와 같이 메모리들(112 및 113)을 제어할 수 있다. 다른 I/O 포트들은, 도시된 바와 같이 제어 회로(104)에 커플링된 I/O 포트(118)와 같은 집적 회로 디바이스의 회로들에 커플링될 수 있다. 이하에 더욱 상세하게 설명되는 회로들 및 방법들은, 단일 집적 회로 다이 내에서 구현될 수 있거나, 또는 멀티-칩 모듈 또는 메모리 네트워크에서 상이한 타입들의 메모리들을 제어하는 일부 다른 시스템에서 구현될 수 있다.
이제 도 2를 참조하면, 상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하고 그리고 순차적(in-order) 프로세싱을 가능하게 하기 위한 회로의 블록도가 도시된다. 데이터 플로우 버퍼들을 갖는 데이터 플로우 아키텍쳐를 갖는 애플리케이션(201)은 메모리 제어 회로(203)와의 통신을 가능하게 한다. 애플리케이션 메타데이터는 점선으로 도시되고, 메모리 요청들 및 응답들은 도 2 및 도 3에서 실선으로 도시된다. 데이터가 도 2의 회로에서 “순차적으로” 라우팅될 때, 도 2의 메모리들에 대한 데이터 요청들에 대한 응답으로 생성되는 데이터는 데이터 요청들과 동일한 순차로서 제공될 것이다. 대조적으로, 데이터가 비순차적으로 라우팅될 때, 데이터는 제 2 메모리에 대한 하나의 메모리의 임의의 레이턴시에 관계없이 그 데이터가 상이한 메모리들에 의해 출력되는 순서로 제공될 것이다. 즉, 제 1 데이터 요청에서 생성되는 데이터는, 이후의 데이터 요청에서 데이터가 제공되는 이후까지 제공되지 않을 수 있다. 도 2의 회로에 의해 라우팅된 데이터가 “순차적으로” 라우팅될 때, 주어진 데이터 요청과 연관된 메타데이터가 데이터 요청에 대한 출력 데이터와 매칭되도록 보장하기 위해 메타데이터 지연 버퍼(202)가 제공된다. 즉, 메타데이터가 데이터 요청과 연관된 데이터와 관련된 정보를 제공하기 때문에, 메타데이터는 데이터 요청과 연관된 데이터와 매칭되어야 하는 것은 필수적이다. 이에 따라, 메타데이터 지연 버퍼는, 도 2의 메모리에 의해 생성된 임의의 데이터가 그 데이터와 연관된 메타데이터와 매칭됨을 보장할 것이다.
이하에 더욱 상세하게 설명되는 바와 같이, 애플리케이션(201)은 집적 회로에 의해 구현되는 임의의 애플리케이션, 또는 집적 회로를 갖는 컴퓨터와 같이 더 큰 시스템 내에서 구현되는 집적 회로일 수 있다. 예로써, 애플리케이션(201)은 도 1의 프로그래머블 리소스들(106)에서 구현되는 프로세싱 엘리먼트들을 갖는 데이터 프로세싱 회로일 수 있는 한편, 메모리 제어기(203)는 메모리 제어기(114)에서 구현될 수 있다. 메모리 선택 회로(204)는 데이터를 판독하거나 또는 기록하기 위한 복수의 이용가능한 메모리들(207) 중 하나의 메모리의 선택을 가능하게 한다. 메모리 선택 회로(204)는, 동일한 타입의 복수의 메모리를 갖는 복수의 메모리 서브-시스템들과 인터페이싱할 수 있고, (제 1 타입의 메모리(208)의 출력 데이터(209)를 생성하는) 제 1 타입의 메모리(208)에 액세스하기 위한 제 1 메모리 제어기(206) 및 (제 2 타입의 메모리(212)의 출력 데이터(213)를 생성하는) 제 2 타입의 메모리(212)에 액세스하기 위한 제 2 메모리 제어기(210)를 포함할 수 있으며, 여기서 제 1 타입의 메모리는 제 2 타입의 메모리와 상이하다. 제 2 타입의 메모리(212)의 출력에 커플링된 지연 버퍼(214)는 제 1 타입의 메모리(208)의 출력 데이터(209) 및 제 2 타입의 메모리(212)의 지연된 출력 데이터(215)에 기반하여 병합 회로(216)가 순서화된 출력 데이터를 생성하는 것을 가능하게 한다. 즉, 순서화된 출력 데이터는 데이터 요청들의 순서에 대응하여 원하는 순서로 데이터를 포함하며, 여기서 지연 버퍼(214)는 순서화된 출력 데이터에 포함될 데이터의 일부를 지연시켜, 병합 회로(216)가 올바른 순서로 데이터를 배치하여 순서화된 출력 데이터로서 생성할 수 있게 한다.
도 2의 엘리먼트들 모두는 단일 IC(integrated circuit)에서 구현될 수 있거나, 또는 시스템의 다수의 IC들에 분배될 수 있다. 메모리 제어기(206) 및 메모리 제어기(210)는 동일한 IC 상에 있을 수 있고 메모리 제어 회로(203)와 연관될 수 있거나, 또는 제 1 타입의 메모리(208) 및 제 2 메모리 타입(212)을 갖는 별도의 메모리 서브-시스템들과 함께 로케이팅될 수 있다. 오직 2개의 타입들의 메모리가 예로써 도 2에 도시되지만, 다양한 회로들 및 방법들이 2개 이상의 타입들의 메모리로 구현될 수 있음을 이해해야 한다.
메모리 제어 회로(203)는 상이한 대역폭 및 레이턴시 특징들을 갖는 2개의 데이터 스트림들을 병합하는 것을 가능하게 한다. 이하에 설명되는 회로들 및 방법들은 순차적인 및 비-순차적인 프로세싱 모두를 가능하게 한다. 순차적인 프로세싱은, 모든 메모리 서브-시스템들의 레이턴시를 밸런싱하기 위해 인위적인 지연를 데이터 스트림들에 삽입함으로써 유지될 수 있다. 이러한 지연 요건은, SSD들을 갖는 메모리 서브-시스템과 같은 제 1 메모리 서브-시스템의 레이턴시에 따라 중요한 중간 버퍼 공간을 요구할 수 있다. 비-순차적 프로세싱이 허용가능한 경우, 메모리 요청에 관한 모든 대응하는 정보가 메모리 시스템을 통해 스트리밍되며, 여기서 메모리 서브-시스템들로부터의 응답들은 이들이 이용가능하게 되자마자 출력 데이터 스트림으로 다시 병합된다. 추가적으로, 오버프로비저닝(overprovisioning)이 예컨대 DRAM보다 통상적으로 쓰루풋이 더 낮은 SSD 인터페이스들에 대해 사용될 수 있으며, 여기서 다수의 SSD 인터페이스들은 SSD에 대한 대역폭 요건들을 증가시키기 위해 조합될 수 있다.
도 2의 어레인지먼트의 일 예는, 제 1 타입의 메모리로서 SSD들을 그리고 제 2 타입의 메모리로서 DRAM들을 포함한다. NAND-기반 플래시 디바이스들과 같은 SSD들은 IOPS(input/output operations per second)와 관련하여 더 높은 성능 및 하드디스크 드라이브들보다 더 낮은 액세스 레이턴시 둘 다를 제공하기 때문에, 이들은 메모리 네트워크들에서 빠르게 인기를 얻고 있다. 이들은 또한, 표준 DRAM보다 더 큰 저장 밀도, 더 낮은 비용 및 더 낮은 전력 소비를 제공한다. 그러나, 두 타입들의 메모리 모두로 메모리 네트워크를 구현하는데 있어서의 하나의 중요한 도전과제는 메모리들에 대한 상이한 액세스 레이턴시들을 수용하는 것이며, 여기서 SSD에 대한 액세스 시간은 DRAM의 경우 수 10 나노초(ns)와 비교하여 수 10 마이크로초(㎲)일 수 있다. 예로써, 메모리 칩의 레이턴시는 특정될 수 있다. 또한, 일부 DRAM들 및 SSD들의 레이턴시를 측정하는 것이 가능하다. 이 데이터는 지연 버퍼 크기를 결정하는데 사용될 수 있다. 예컨대, 일부 DRAM들은 약 600 나노초의 레이턴시를 가질 수 있고, 일부 SSD들은 약 100 마이크로초의 레이턴시를 가질 수 있다. 따라서, 제 1 데이터 요청이 SSD로 이동하고 다음 요청들이 DRAM으로 이동하면, DRAM 데이터는 600ns 이후에(즉, SSD에 대한 제 1 데이터 요청보다 더 먼저) 이용가능하다. 출력 데이터의 순서를 유지하기 위해, DRAM 제어기에 커플링된 지연 버퍼는 100㎲-600ns (즉, 99.4㎲) 기간 동안 DRAM에 의해 생성되는 데이터를 버퍼링한다. DRAM이 매 240ns마다 512 비트(64 바이트)의 데이터를 출력하기 위한 대역폭을 갖는다고 가정하면, 지연 버퍼 크기는 64 *(99400/240) = 26507 바이트여야만 한다. 1024*4 = 4096 바이트의 크기를 갖는 BRAM을 갖는 FPGA들에서, DRAM에 의해 생성된 데이터를 버퍼링하고 SSD의 레이턴시를 수용하는 데 필수적인 지연를 제공하기 위해 (26507/4096) = 7 BRAM들을 갖는 것만이 필요할 수 있다. 이에 따라, 지연 엘리먼트들은 SSD들 및 DRAM들이 함께 사용되는 것을 가능하게 하고, 여기서 (도 16에 도시된 FPGA와 같이) FPGA의 BRAM들이 필수적인 지연를 제공하기 위해 사용되어 순차적인 출력 데이터로서 정확한 데이터가 생성됨을 보장할 수 있다. 이하에 더욱 상세하게 설명되는 바와 같이, BRAM으로부터의 데이터가 SSD로부터의 데이터와 관련하여 정확한 양의 시간만큼 지연되기에 적절한 시간까지 데이터는 BRAM으로부터 판독되지 않을 것이다. 종래의 멀티코어 프로세서들은 멀티스레딩을 통해 이러한 과도한 액세스 레이턴시들에 대해 보상할 수 없는 반면에, 도 17에 설명된 FPGA들과 같은 프로그래머블 리소스들을 갖는 디바이스들은 상이한 레이턴시들을 갖는 상이한 타입들의 메모리들이 함께 구현되는 것을 가능하게 한다.
도 3에 도시된 바와 같이, 메타데이터 지연 버퍼는 상이한 타입들의 메모리를 갖고 비-순차적 프로세싱을 가능하게 하는 메모리 시스템에서 요구되지 않는다. 데이터가 비-순차적으로 프로세싱되고 어떠한 지연도 메모리에 의해 출력된 데이터에 대해 제공되지 않기 때문에, 메타데이터는 점선들로 도시된 바와 같이 메모리 제어기에서 데이터와 함께 이동한다. 즉, 메타데이터는 데이터 요청에 대한 응답으로 생성되는 데이터와 매칭되어, 애플리케이션(201)에 제공된다.
이하에 더욱 상세하게 설명되는 회로들 및 방법들은 이러한 큰 액세스 레이턴시들에 대해 보상하며, SSD들이 메모리 계층에서 DRAM과 조합하여 사용되는 것을 가능하게 한다. PLD들에 기반하여, 테라바이트의 데이터를 훨씬 더 낮은 비용으로, 더 낮은 전력으로, 증가된 컴퓨팅 및 저장 밀도들로 프로세싱하고 저장할 수 있는 저장 어플라이언스들을 생성하는 것이 가능하다. 또한, 회로들 및 방법들은, 종래의 어레인지먼트들보다 훨씬 더 낮은 액세스 레이턴시들로 이러한 데이터를 네트워크에까지 제공할 수 있다.
메모리 네트워크는 주어진 타입의 메모리의 큰 액세스 레이턴시에 대해, 그리고 메모리 제어 회로(203)를 사용하여 지연를 도입함으로써 성능을 떨어뜨리지 않고 액세스 레이턴시들의 임의의 큰 변동에 대해 효과적으로 보상하기 위한 데이터 흐름 아키텍쳐로서 구현될 수 있다. 예컨대, 지연는 FIFO들의 형태로 지연 엘리먼트들을 사용함으로써 데이터 흐름 아키텍처에 도입될 수 있다. 이러한 어레인지먼트는 FPGA와 같은 집적 회로에서 효과적으로 구현될 수 있으며, 여기서 BRAM은 FIFO로서 구현될 수 있다. BRAM은 어떠한 다른 기능도 갖지 않지 않을 수 때문에, 지연를 제공하기 위해 전용 FIFO들을 제공할 필요는 없지만, 오히려 임의의 필요한 지연를 제공하기 위해 (달리 사용되지 않는) BRAM들이 FIFO들로서 구현될 수 있다. 또한, 메모리 제어 회로는, 아이템이 특정 타입의 메모리에 저장될지 여부를 결정할 수 있고, 그후 대응 메모리 제어기 상으로 요청을 포워딩할 수 있다. 아래에 더욱 상세하게 설명되는 바와 같이, 이 결정은 수많은 상이한 기준들, 이를테면, DRAM과 SSD 사이의 액세스 대역폭들을 밸런싱하는 것, 실제 저장 용량을 특정 사용 케이스에 매칭하는 것, 또는 현재 부하 조건들을 밸런싱하는 것에 기초하여 행해질 수 있다.
이제 도 4를 참조하면, 상이한 타입들의 메모리 서브-시스템들에 액세스하기 위한 회로를 갖는 메모리 시스템의 동작을 제어하는 회로의 블록도가 도시된다. 도 4에 도시된 바와 같이, 메모리 제어 회로(203)는 애플리케이션(201)과 연관된 복수의 PE(processing element)들(406-412)에 커플링된다. PE들은, 예컨대, 이하에 설명되는 도 18 및 도 19를 참조하여 더욱 상세하게 설명되는 바와 같이, FPGA의 CLE들에서 구현될 수 있다. 메모리 제어 회로(203)는 메모리 변환기(418)를 갖는 메모리 네트워크 회로(416)를 포함한다. 메모리 변환기(418)는, 프로세싱 엘리먼트의 대응 출력(423)으로부터의 입력(422)에, 프로세싱 엘리먼트(408)로부터의 데이터 요청들을 수신하도록 커플링된 제 1 버퍼 회로(420)를 포함한다. 제 2 버퍼 회로(424)에 저장되고 출력(426)에서 발생된 데이터는 도시된 바와 같이 프로세싱 엘리먼트(408)의 대응 입력(427)에 커플링된다. 이하에 설명되는 메모리 제어기들의 버퍼들뿐만 아니라 메모리 변환기(418)의 버퍼 회로들(420 및 424)은 FPGA의 BRAM들에서 구현될 수 있다. 지연의 양은 변할 수 있으며, 선택된 지연를 제공하기 위해 FIFO들로서 구현된 BRAM들의 수에 기반하여 선택될 수 있다. 즉, 메모리 제어기(203)는 특정 지연를 갖는 FIFO들로서 구현되는 BRAM들을 포함하도록 메모리의 출력으로부터의 경로를 선택함으로써 메모리의 출력에서 특정의 공지된 지연를 제공하는 경로의 선택을 가능하게 한다. 지연가 필수적이지 않은 이벤트에서(즉, 비-순차적 프로세싱에 대해), 지연 엘리먼트들은, 예컨대, 지연 엘리먼트들 주위에서의 라우팅을 가능하게 하는 인터커넥트 엘리먼트들을 사용하여 바이패싱된다. 다음으로, 상이한 메모리들에 의해 출력되는 데이터는 순차적 프로세싱을 가능하게 하기 위해 메모리 변환기(418)에 의해 조합되고, 여기서 순서화된 데이터 출력들은 버퍼(424)에 저장될 수 있다.
메모리 변환기(418)는 메모리 변환기에 의해 제어된 메모리에 그리고 그 메모리로부터 라우팅된 신호들의 제어를 가능하게 하기 위해 메모리 네트워크(419)에 커플링된다. 특히, 예를 들어, 멀티플렉서로써 본원에 도시된 제 1 선택 회로(428)는 메모리 변환기(418)에 커플링되고 이 메모리 변환기(418)에 의해 제어되며, 더욱 구체적으로는 제 1 입력(429)에서의 메모리 액세스 요청을 수신하도록 커플링된다. 그후, 메모리 액세스 요청은 선택 회로(428)의 복수의 대응 출력들(430-434)에서 복수의 MC(memory controller) 회로들 중 하나로 라우팅될 수 있다. 출력(430)은 입력(438)에서 메모리 제어기(436)에 커플링된다. 버퍼 회로(441)의 출력(437)은, DRAM(Dynamic Random Access Memory)들로서 본원에 도시된 복수의 메모리들(440)에 커플링되며, 여기서 메모리 제어기는 복수의 메모리들(440)을 제어한다. DRAM들이 휘발성 메모리라은 점에 유의해야 한다. 버퍼 회로(442)는, 입력(439)에서 복수의 메모리들(440)의 출력을 수신하고, 그리고 출력(443)에서 메모리 변환기(418)에 대한 데이터를 생성하도록 커플링된다. 버퍼 회로들(441 및 442)은, 데이터가 메모리 변환기로 다시 라우팅될 수 있기 전에, 메모리 엘리먼트들로부터 수신된 데이터 또는 메모리에 라우팅된 요청들을 저장하도록 구현될 수 있다. DRAM들이 SSD들보다 빠른 액세스 레이트를 갖기 때문에, 메모리 변환기가 순차적 프로세싱을 위해 정확한 순서로 정확한 데이터를 제공할 수 있도록, 버퍼(442)가 지연를 제공하는 것을 가능하게 한다.
제 2 메모리 제어기(444)는 메모리 네트워크(419) 및 입력(446)에서의 제 2 복수의 메모리들(445)에 커플링되며, 여기서 복수의 메모리들은 메모리로부터 전력이 제거된 이후에 저장된 데이터를 보유하는 비-휘발성 메모리인 SSD들로서 예로써 도시된다. 버퍼들(447 및 448)은, 메모리 제어기(436)와 관련하여 위에 설명된 바와 같이, 메모리 변환기(418)로부터 수신된 데이터 요청들 또는 메모리들(445)로부터 수신된 데이터를 저장하는 것을 가능하게 한다. 특히, 메모리 변환기로부터의 데이터 요청들은 버퍼(447)의 입력(446)에 제공되고 출력(449)에서 생성될 수 있는 한편, 복수의 메모리들(445)의 출력에 발생된 데이터는 버퍼(448)의 입력(450)에 커플링되며, 여기서 데이터는 출력(451)에서 생성될 수 있다. 최종적으로, 제 3 메모리 제어기(452)는 입력(454)에서 메모리 네트워크(419)에 그리고 호스트 메모리(456)에 커플링된다. 메모리 제어기(452)로부터 수신된 데이터 요청들은 버퍼 회로(457)에 저장될 수 있고, 여기서 버퍼(457)의 입력(459)에 제공된 데이터 요청은 출력(460)에서 생성되고 호스트 메모리(456)에 커플링될 수 있다. 유사하게, 입력(461)에서 호스트 메모리로부터 수신된 데이터는 메모리 변환기(418)로 라우팅되도록 버퍼 회로(458)의 출력(462)에서 생성될 수 있다.
멀티플렉서로서 본원에 도시된 제 2 선택 회로(470)는, 메모리 변환기에 커플링되고, 더욱 구체적으로는 입력들(472-476)에서 메모리들(440, 445, 및 456)의 출력들을 수신하도록 커플링되며, 여기서 선택된 출력은 출력(478)에서 생성된다. 선택된 메모리의 출력은 메모리 변환기(418)의 입력에 제공된다. 메모리 배정기는, 정확한 데이터가 특정 메모리로부터 액세스되어 이 데이터가 순차적 프로세싱을 위해 정확한 순서로 제공되도록 보장하기 위해 선택 회로(470)를 제어한다. 특정 메모리 엘리먼트들이 예로써 도시되지만, 다른 타입들의 메모리 엘리먼트들이 메모리 제어 회로(203)에 의해 제어될 수 있음을 이해해야 한다.
이제 도 5를 참조하면, 상이한 타입들의 메모리에 액세스하기 위한 회로를 갖는 메모리 시스템의 동작을 제어하는 회로의 다른 블록도가 도시된다. 제 2 메모리 변환기(502)는, 본원에 프로세싱 엘리먼트(406)로서 도시된 다른 프로세싱 엘리먼트와 연관된다. 메모리 변환기는 제 1 버퍼(504) 및 제 2 버퍼(506)를 포함한다. 제 1 버퍼는 프로세싱 엘리먼트(406)의 출력(509)으로부터 제 1 입력(508)에서 데이터 요청을 수신하도록 커플링된다. 제 2 버퍼(506)는 제 2 프로세싱 엘리먼트(406)의 입력(512)에 커플링된 제 1 출력(510)에서 데이터를 생성하도록 커플링된다. 메모리 변환기(502)는 또한 메모리 변환기(502)에 의해 제어된 메모리에 그리고 그 메모리로부터 라우팅된 신호들의 제어를 가능하게 하기 위해 메모리 네트워크(419)에 커플링된다. 즉, 제 2 선택 회로(470)의 출력(514)은 메모리 변환기(502)에 커플링되는 반면, 메모리 변환기(502)의 출력은 선택 회로(428)의 입력(516)에 커플링된다. 2개 이상의 메모리 변환기들이 구현될 수 있고, 메모리 변환기의 출력들이 상이한 프로세싱 엘리먼트에 커플링될 수 있음을 이해해야 한다.
이제 도 6을 참조하면, 플로우차트는 메모리 시스템의 동작을 제어하는 방법을 도시한다. 블록(602)에서, 제 1 타입의 메모리 엘리먼트를 갖고 제 1 액세스 시간을 갖는 제 1 메모리로의 액세스가 가능하게 된다. 블록(604)에서, 제 2 타입의 메모리 엘리먼트를 갖고 제 2 액세스 시간을 갖는 제 2 메모리로의 액세스가 가능하게 되고, 여기서 제 2 타입의 메모리 엘리먼트는 제 1 타입의 메모리 엘리먼트와 상이하다. 제 1 및 제 2 메모리들로의 액세스는, 예컨대, 도 18의 집적 회로의 IOB들과 같은 입/출력 회로들에 의해 제공될 수 있다. 블록(606)에서, 제 1 메모리 제어기 및 제 2 메모리 제어기에 커플링된 메모리 선택 회로가 제공되고, 여기서 선택 회로는 예컨대 멀티플렉서일 수 있다. 블록(608)에서, 메모리 선택 회로 및 제 1 및 제 2 메모리 제어기들을 사용하여 제 1 메모리 및 제 2 메모리 중 적절한 메모리로의 액세스가 가능하게 된다. 블록(610)에서, 제 1 액세스 시간과 제 2 액세스 시간의 차이를 보상하기 위해 지연 버퍼로서 구성가능한 프로그래머블 리소스들이 제공된다. 블록(612)에서 순서화된 출력 데이터를 생성하기 위해 제 1 메모리의 출력들 및 제 2 메모리의 지연된 출력들의 병합을 가능하게 하기 위해 프로그래머블 인터커넥트들이 제공된다. 지연 버퍼로서 구현될 수 있는 프로그래머블 리소스들의 일례는 도 18의 PLD의 BRAM들을 포함하지만, 프로그래머블 인터커넥트들의 일례는 도 18의 PLD의 프로그래머블 인터커넥트들을 포함할 수 있다.
도 7은 상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하는 방법을 나타내는 플로우차트이다. 블록(702)에서, 제 1 메모리 제어기 및 제 2 메모리 제어기에 커플링된 메모리 선택 회로가 구현된다. 블록(704)에서, 메모리 선택 회로 및 제 1 및 제 2 메모리 제어기들을 사용하여 제 1 메모리 및 제 2 메모리 중 적절한 메모리로의 액세스가 가능하게 된다. 예컨대, 데이터가 정확한 메모리로 라우팅되거나 또는 정확한 메모리로부터 수신됨을 보장하기 위해 제어 신호들이 메모리 선택 회로에 제공된다. 블록(706)에서, 제 1 타입의 메모리 엘리먼트를 갖고 제 1 액세스 시간을 갖는 제 1 메모리가 액세스된다. 블록(708)에서, 제 2 타입의 메모리 엘리먼트를 갖고 제 2 액세스 시간을 갖는 제 2 메모리가 액세스되고, 여기서 제 2 타입의 메모리 엘리먼트는 제 1 타입의 메모리 엘리먼트와 상이하다. 블록(710)에서, 제 1 액세스 시간과 제 2 액세스 시간의 차이를 보상하기 위해 제 2 메모리에 의해 출력되는 데이터는 지연 버퍼에 커플링된다. 예컨대, 지연 버퍼는 도 18의 집적 회로의 BRAM과 같은 집적 회로의 BRAM으로서 구현될 수 있어서, 정확한 시간에 BRAM의 판독을 가능하게 함으로써 적절한 지연를 효과적으로 제공한다. 즉, DRAM으로부터의 데이터가 BRAM에서 버퍼링되었지만 (먼저 판독되어야만 하는) SSD로부터의 데이터가 아직 준비되지 않은 경우, BRAM의 판독 인에이블 회로는 어써팅되지 않을 것이고, 데이터는 미리결정된 지연 동안 홀딩될 것이다. 이에 따라, 데이터는 BRAM에서 데이터를 버퍼링함으로써 BRAM에 의해 지연될 수 있고, 데이터는 미리결정된 지연 이후에 BRAM으로부터 판독된다. 블록(712)에서 순서화된 출력 데이터를 생성하기 위해 제 1 메모리의 출력들 및 제 2 메모리의 지연된 출력들이 병합된다.
도 6 및 도 7의 방법들의 다양한 엘리먼트들은, 설명된 바와 같이 도 1 내지 도 5의 회로들을 사용하여, 또는 일부 다른 적절한 회로들을 사용하여 구현될 수 있다. 방법의 특정 엘리먼트들이 설명되지만, 방법의 부가적인 엘리먼트들, 또는 엘리먼트들에 관련된 부가적인 세부사항들이 도 1 내지 도 5의 개시내용에 따라 구현될 수 있음을 이해해야 한다.
이제 도 8을 참조하면, 링-노드 구현에서 메모리를 배정하기 위한 회로의 블록도가 도시된다. 도 8의 회로는 엘리먼트들의 어레인지먼트를 도시하고, 여기서 링-노드 구현의 노드(802)는 더욱 상세하게 도시된다. 특히, 각각의 노드(802)는 입력 버퍼(806) 및 출력 버퍼(808)에 커플링된 중재기(804)를 포함한다. 중재기(804)는, 링 상의 다른 노드(이를테면, 메모리 제어기 또는 메모리 변환기)로 데이터를 라우팅하거나 또는 그로부터 데이터를 수신하기 위해 버퍼들(806 및 808) 사이에 인터페이스를 제공한다. 도 8의 회로는 기본 토큰 링을 구현하고, 중재기는 일단 이것이 일부 특정 데이터(즉, 토큰)를 수신하면 전송 버퍼로부터 링으로 데이터를 송신하고 그리고 일단 목적지 어드레스가 그 노드에서의 어드레스임을 결정하면 링으로부터 입력 버퍼로 데이터를 송신할 것이다. 도 8의 토큰 링 어레인지먼트는 순차적 프로세싱 또는 비-순차적 프로세싱 모두에 적용될 수 있다. 도 6의 방법들이 상이한 토폴로지들, 이를테면, 링, 메쉬 또는 토러스(torus) 토폴로지들에서 구현될 수 있지만, 도 7의 링 인터커넥트 토폴로지는 일반적으로 라우팅 리소스들을 덜 사용하고 예측가능한 레이턴시를 갖는다. 또한, 링 토폴로지는 시스템 내에 상당한 수의 메모리 노드들이 존재할 때 유용하다.
이제 도 9를 참조하면, 블록도는 메모리 변환기(418)의 아키텍쳐를 도시한다. 특히, 입력 버퍼(420)는 어드레스 디코더(904)에 커플링되고 메모리에 데이터를 저장하기 위한 요청을 제공한다. 어드레스 디코더(904)의 출력은 프로파일러(906) 및 어드레스 변환 및 배정 블록(908)에 커플링된다. 도 10을 참조로 더욱 상세하게 설명되는 바와 같이, 프로파일러(906)는 메모리 네트워크의 동작을 최적화하기 위한 데이터를 저장하기 위해 어떤 메모리가 사용되는지 선택적으로 결정하는 것을 가능하게 한다. 어드레스는 어드레스 디코더(904) 및 프로파일러(910)에 대한 응답으로 어드레스 변환 및 배정 블록(908)으로부터 출력된다. 즉, 어드레스 변환 및 배정 블록(908)은 메모리들(440, 445 및 456) 중 어떤 메모리에 액세스될지를 결정할 것이다. 출력 버퍼(424)는 메모리의 출력을 수신하도록 커플링된다.
프로파일러(906)는 액세스할 메모리(이를테면, 고속 액세스 메모리(예컨대, DRAM) 및 저속 액세스 메모리(예컨대, SSD))를 결정하기 위해 메모리 서브-시스템들의 분석을 가능하게 한다. 메모리 성능의 관측들에 기반하여, 메모리 서브-시스템들은, 이들이 미리결정된 양의 데이터를 지원하도록 구현될 수 있다. 예컨대, 메모리 네트워크에서 DRAM들 및 SSD들을 구현할 때, 멤캐시드(memcached) 구현은, 몇몇 SSD들이 데이터 액세스를 위해 초당 10 기가비트(Gbps) 데이터 인터페이스의 데이터 요청들 중 1%를 지원할 수 있음을 나타낸다. 즉, 10Gbps 멤캐시드 요청들 중 1%가 SSD로부터 값을 리트리브하게 하면, 멤캐시드 요청들은 여전히 10Gbps 응답들을 생성할 수 있다. 예로써, 메모리 액세스들을 분할하기 위해 2킬로바이트(Kbytes)의 값 크기가 임계치로서 사용될 수 있다. 즉, 요청들이 2KB보다 더 큰 값을 리트리브하면, 이들은 SSD에 액세스할 것이고, 그렇지 않으면 이들은 DRAM에 액세스할 것이다. 그러나, 실제로 구현될 때, 더 큰 값(즉, 이 경우에서는 2KB보다 더 큼)을 리트리브하는 요청들이 데이터 요청들의 1%를 초과하면, 임계치를 어느 정도(by some value) 증가시킬 필요가 있다. 예컨대, 임계치는, 액세스들 중 오직 1%만이 SSD들에 저장된 데이터에 대해 이루어짐을 보장하기 위해 예컨대 1024Bytes(즉, 1KB)만큼 증가될 수 있다. 도 10의 흐름도는 최적의 성능을 가능하게 하기 위한 임계치의 변형을 나타낸다. 이는, 일부 액세스 빈도(예컨대, SSD에 대해 1% 그리고 DRAM에 대해 99%)를 가정하고, 액세스 빈도와 데이터 크기 사이의 맵을 구축한다. 그후, 데이터 액세스 크기가 임계치보다 더 작으면, 액세스는 DRAM에 대한 것이다. 그러나, 데이터 액세스 크기가 임계치보다 더 크면, 해당 데이터 크기에 대한 액세스 빈도가 체크되어 임계값을 조정할 필요가 있는지 결정할 것이다. 이 빈도가 너무 높으면, 임계치는 감소될 것이다. 이 빈도가 너무 낮으면, 임계치는 증가될 것이다.
특히, 블록(1002)에서 어드레스 디코딩이 수행되며, 여기서 액세스될 바이트들의 수가 결정된다. 블록(1004)에서, 데이터 크기 및 액세스 빈도 쌍들의 테이블이 업데이트되며, 여기서 데이터 크기 및 액세스 빈도 데이터가 생성된다. 크기들(즉, 바이트들의 수)은 메모리 액세스들을 DRAM들 또는 SSD들과 같은 상이한 메모리 타입들로 우회하는데(divert) 사용된다. 또한, 상이한 메모리들(예컨대, DRAM들 또는 SSD들)은 상이한 액세스 세분성을 갖는데, 이는 액세스될 바이트들의 수이다. 예컨대, SSD들은 페이지-단위(page-wise)(예컨대, 4K 바이트들) 액세스 세분성을 입증한다. 따라서, (한 번의 액세스로 4KB의 데이터를 생성할 수 있는) SSD로부터 1 바이트가 리트리브되면, 하나의 페이지에 액세스하는데 요구되는 것과 본질적으로 동일한 시간이 1 바이트에 액세스하는데 요구되며, 메모리 액세스 대역폭의 대부분이 낭비되기 때문에 메모리 성능은 매우 낮다. 그후, 블록(1006)에서 데이터 크기가 임계치보다 더 큰지 여부가 결정된다. 만약 더 크다면, 블록(1008)에서 빈도가 너무 높은지 여부가 결정된다. 빈도가 너무 높다면, 블록(1010)에서 임계치 레지스터 - 1024바이트가 기록된다. 빈도가 너무 높지 않다면, 블록(1012)에서 빈도가 너무 낮은지 여부가 결정된다. 빈도가 너무 낮다면, 블록(1014)에서 임계치 레지스터 + 1024비트가 기록된다. 그후, 어드레스 변환은 블록(1016)에서 수행되며, 여기서 데이터는 데이터의 크기 및 임계값에 따라 적절한 타입의 메모리에 저장된다.
상이한 타입들의 메모리를 갖는 시스템을 구현할 때, 어떤 타입의 메모리에 특정 데이터가 저장되어야만 하는지 결정되어야만 한다. 도 11의 플로우차트는, 데이터가 저장되는 복수의 메모리들 중 하나의 메모리를 결정하는 방법을 도시한다. 블록(1102)에서, 제 1 타입의 메모리 엘리먼트를 갖고 제 1 액세스 시간을 갖는 제 1 메모리가 구현된다. 블록(1104)에서, 제 2 타입의 메모리 엘리먼트를 갖고 제 2 액세스 시간을 갖는 제 2 메모리가 구현되고, 여기서 제 2 타입의 메모리 엘리먼트는 제 1 타입의 메모리 엘리먼트와 상이하다. 제 1 메모리 및 제 2 메모리로의 액세스가 블록(1106)에서 가능하게 된다. 제 1 및 제 2 타입들의 메모리는, 예컨대, 도 4 및 도 5와 관련하여 설명된 바와 같이 NAND 및 SSD 메모리들일 수 있다. 제 1 메모리 및 제 2 메모리와 연관된 액세스 시간들은 블록(1108)에서 결정된다. 상이한 타입들의 메모리와 연관된 액세스 시간들은, 예컨대, 메모리 디바이스의 제조업자에 의해 제공될 수 있거나 또는 메모리 디바이스의 동작 동안 결정될 수 있다. 블록(1110)에서, 제 1 메모리 제어기 및 제 2 메모리 제어기에 커플링된 메모리 선택 회로가 구현된다. 블록(1112)에서, 메모리 선택 회로를 사용하여 제 1 메모리 및 제 2 메모리 중 적절한 메모리로의 액세스가 가능하게 된다. 적절한 메모리는, 제 1 메모리 및 제 2 메모리와 연관된 결정된 액세스 시간들, 및 저장될 데이터의 크기와 같은 특정 기준에 기초하여 액세스된다. 이에 따라, 이하에 더욱 상세하게 설명되는 바와 같이, 데이터는 메모리의 액세스 시간 및 데이터의 크기에 기반하여 특정 메모리, 이를테면, DRAM 또는 SSD 메모리에 저장될 수 있다. 예컨대, 다수의 페이지 크기들로 구성된 데이터는 SSD에 저장될 수 있지만, 더 작은 데이터는 DRAM에 저장된다. 또한, 도 10에서 위에 설명된 바와 같이, 메모리 변환기는 DRAM에 저장될 더 작은 데이터의 크기의 임계치를 결정할 수 있다.
이제 도 12를 참조하면, DRAM의 블록도가 도시된다. DRAM 블록(1200)은 복수의 메모리 셀들(1202)을 포함하고, 이들 각각은 어드레스 디코더(1204)에 커플링된다. 어드레스 디코더(1104)는, 어드레스 라인들(1206)을 수신하고, 도시된 바와 같이 복수의 메모리 셀들(1202)에 커플링된 어드레스를 생성한다. 어드레스 디코더(1204)는 칩 인에이블 신호를 수신하고, 메모리 셀들(1102) 각각은 기준 전압(Vref)을 수신한다. 기록 블록(1210)은 메모리 셀들(1202)로부터의 데이터를 판독하거나 또는 메모리 셀들(1202)로 데이터의 기록을 가능하게 한다. 특히, 기록 블록(1210)에 제공되는 기록 인에이블 신호가 게이트들(1214)에 의해 메모리 셀들(1202)로의 기록을 가능하게 한다면, 데이터 라인들(1212)에 의해 제공되는 데이터는 어드레스 디코더에 제공되는 어드레스에 기록된다. 기록 인에이블 신호가 메모리 셀들(1202)로의 기록을 가능하게 하지 않는다면, 인버터들(1216)에 커플링된 데이터는 데이터 라인들(1218) 상에 생성된다. 이하에 더욱 상세하게 설명되는 바와 같이, DRAM 블록의 셀들에 저장된 데이터는 데이터를 보유하기 위해 주기적으로 리프레시되어야만 한다.
이제 도 13를 참조하면, 도 12의 DRAM의 메모리 엘리먼트의 블록도가 도시된다. 특히, 제 1 트랜지스터(1302)는 기준 비트 라인에 커플링된 드레인(1304) 및 커패시터(1308)에 커플링된 소스(1306)를 갖는다. 트랜지스터(1302)는 기준 워드 라인에 의해 게이트(1310)에서 제어된다. 제 2 트랜지스터(1314)는 비트 라인에 커플링된 드레인(1316) 및 커패시터(1320)에 커플링된 소스(1318)를 갖는다. 트랜지스터(1314)는 워드 라인에 의해 게이트(1322)에서 제어된다. 커패시터(1320)를 충전시키기 위해 워드 라인을 하이로 풀링하고 원하는 값이 비트 라인에 저장되도록 적용함으로써 데이터가 기록된다. 메모리로부터 데이터를 판독하기 위해, 감지 증폭기(1326)는 출력 값을 생성하기 위해 기준 비트 라인에서 커패시터(1312) 상에 저장된 전압과 비트 라인에서 커패시터(1324) 상에 저장된 전압 사이의 차이를 검출할 것이다. 비트 라인의 값이 결정된 후, 그 값은 커패시터(1324) 상에 적절한 전하를 저장함으로써 비트 라인에 재-기입된다. 즉, 커패시터(1324)는 셀에 의해 저장된 데이터의 정확한 값을 유지하기 위해 주기적으로 재충전된다. DRAM 메모리 셀은, 저장된 데이터를 나타내는 커패시터 상에 전하를 유지하기 위해 주기적으로 리프레시되어야만 하지만, SSD 메모리 셀보다 단축된 액세스 시간을 가질 수 있다.
이제 도 14를 참조하면, SSD 메모리의 블록도가 도시된다. SSD는, 각각 멀티플렉서/디멀티플렉서(1408)와 인터페이싱하는 프로세서(1404) 및 버퍼 회로(1406)를 갖는 SSD 제어기(1402)를 포함한다. 멀티플렉서/디멀티플렉서 회로(1408)는 복수의 SSD들(1410-1416) 중 하나로부터 데이터를 수신하고 그 하나에 데이터를 제공한다. 인터페이스 회로(1418)는, SSD와 메모리 제어 회로(203)의 메모리 제어기와 같은 디바이스의 메모리 인터페이스 사이의 데이터의 전달(transfer)을 가능하게 한다.
이제 도 15를 참조하면, 도 14의 SSD의 메모리 엘리먼트의 블록도가 도시된다. 도 15의 메모리 엘리먼트는, 비트 라인에 의해 제어되는 드레인(1506) 및 소스(1504)를 갖는 기판(1502)을 포함한다. 워드 라인은 산화물 층(1514) 상의 플로팅 게이트(1512)로부터 산화물 층(1510)에 의해 분리된 제어 게이트(1508)를 갖는 게이트 엘리먼트를 제어한다. DRAM 및 SSD 메모리 디바이스들과 연관된 회로들의 예시들이 제공되지만, 다른 회로들이 구현될 수 있음을 이해해야 한다.
도 16은 키-값 저장소가 복수의 메모리 타입들을 구현하는 것을 가능하게 하기 위한 회로의 블록도이다. 키-값 저장소는, 통신 또는 네트워크 인터페이스를 통해 (어드레스들로 인덱스된 것들이 아닌) 연관 키들을 갖는 값들을 저장하고 리트리브하는 것을 가능하게 한다. 집적 회로(1602)는, 데이터를 수신하기 위한 하나 또는 그 초과의 네트워크 인터페이스들(1608)에 커플링된 I/O 블록(1606) 및 데이터를 출력하기 위해 하나 또는 그 초과의 네트워크 인터페이스들(1612)에 커플링된 I/O 블록(1610)과 인터페이스하는 키-값 저장소 제어 회로(1604)로 구현될 수 있다. 앞서 설명된 바와 같이, 키-값 저장소 제어 회로(1604)는 메모리 제어 회로(203)에 따라 구현될 수 있다. 도 16의 구현에 따라, 메모리 인터페이스(1614)는 여기서 DRAM들로 도시된 제 1 복수의 메모리 디바이스들(1616)의 하나 또는 그 초과의 메모리 디바이스들과의 통신을 가능하게 하고, 제 2 메모리 인터페이스(1618)는 여기서 SSD들로서 도시된 제 2 복수의 메모리 디바이스들(1620)의 하나 또는 그 초과의 메모리 디바이스들과 통신하는 것을 가능하게 한다.
SSD들은 더 낮은 비용 및 전력 소비를 포함하는 수많은 이점들을 제공한다. 그러나, 더 중요하게 SSD들은, 키-값 저장소가 더 적은 수의 핀들(예컨대, 4개 핀들)에 걸쳐서 훨씬 더 큰 저장 밀도(이를테면, 500GB 메모리)를 제공하게 하는 것을 허용한다. 즉, SSD들이 SATA(serial advanced technology attachment), SAS(serial attached SCSI), 또는 PCIe(peripheral component interconnect express)와 같은 고속 직렬 인터페이스를 활용하기 때문에, I/O(입력/출력) 핀들은 거의 필요하지 않다. 대조적으로, DRAM SODIMM(small outline dual in-line memory module) 인터페이스는 8GB의 저장장치를 연결하기 위해 약 140개의 I/O 핀들을 요구한다. SSD가 일반적으로 DRAM과 비교하여 더 낮은 액세스 속도를 갖지만, 더 큰 데이터 블록들이 SSD들에 저장될 때와 같이 적합한 메모리 디바이스에 데이터가 저장될 때, 회로의 동작은 개선될 수 있다.
예컨대, 메모리 인터페이스들(1614 및 1618)은 도 2를 참조하여 위에 설명된 바와 같이 구현될 수 있다. DRAM들 및 SSD들이 예로서 도시되지만, 다른 타입들의 메모리 엘리먼트들이 구현될 수 있음이 이해되어야만 하고, 여기서 특정 타입의 메모리 디바이스의 선택은 메모리 디바이스들의 동작 파라미터들에 기반한다.
키-값 저장소의 데이터에 액세스하기 위한 하나 또는 그 초과의 메모리 엘리먼트들의 선택은, 어떤 타입들의 메모리 디바이스를 키-값 저장소의 다양한 데이터에 사용할지 결정하기 위해 상이한 메모리 디바이스들의 액세스 특징들을 고려함으로써 키-값 저장소의 효율적인 동작을 가능하게 한다. 일 구현에 따르면, 메모리 관리 회로는 데이터 블록을 제 1 데이터 부분 및 제 2 데이터 부분으로 분할하고, 제 1 데이터 부분 및 제 2 데이터 부분은 상이한 메모리 타입들에 제공된다. 다른 구현에 따르면, 데이터(전체 데이터 블록 또는 데이터 블록의 일부로서)는, 예컨대, 액세스 기준들, 이를테면 액세스의 속도 또는 빈도에 기반하여, 선택된 메모리 타입으로 라우팅된다.
SSD들의 하나의 중요 양상은, 블록-방식의 액세스 특징 및 낮은 I/O 핀 요건과 관련된다. 이러한 액세스 특성은 키-값 저장소를 구현하기 위한 일부 애플리케이션들에서 해로울 수 있지만, 이러한 액세스 특성은 다른 애플리케이션들에서 유리하게 사용될 수 있다. 예컨대, 페이지 크기들(예컨대, 4킬로바이트 페이지 크기)보다 더 작은 SSD 상의 액세스들이 매우 비효율적이 될 수 있다. 따라서, 액세스 성능을 최대화하기 위해, SSD들 이외에도 DRAM들이 제공되어 DRAM들과 SSD들 사이에 데이터를 분배시킨다. 그러나, DRAM들은 데이터를 전달하기 위해 더 큰 I/O 핀 요건을 갖는다. 이에 따라, 하이브리드 구현에서 메모리 엘리먼트들의 선택은 다수의 인자들을 고려할 수 있다.
일 구현에 따르면, 키-값 저장소에 액세스되거나 또는 저장된 데이터는 2개의 부분들로 분할된다. 다수의 페이지 크기들로 구성된 값의 부분은 SSD에 저장되지만, 나머지는 DRAM에 저장된다. 따라서, SSD는 전체 페이지 크기들로만 액세스되어, 액세스 성능을 최대화시킨다. DRAM과 SSD 사이에 리스트를 유지하고 값들을 이동시키는 것이 필수적이지만, 하이브리드 아키텍쳐는 현저하게 개선된 성능을 제공한다.
이제 도 17을 참조하면, 어레인지먼트에 따라 프로그래머블 리소스들을 갖는 디바이스를 프로그래밍하기 위한 시스템의 블록도가 도시된다. 특히, 컴퓨터(1702)는, 메모리(1706)로부터 회로 설계(1704)를 수신하고 그리고, 비-휘발성 메모리(1706)에 저장되는 구성 비트스트림을 생성하도록 커플링된다. 이하에 더욱 상세하게 설명되는 바와 같이, 회로 설계는, 하이 레벨 설계, 이를테면, HDL(hardware description language)에 정의된 회로 설계일 수 있다. 또한, 컴퓨터는, 비-휘발성 메모리(1708)에 저장되고 도 18에서 이하에 설명되는 집적 회로와 같은 프로그래머블 집적 회로일 수 있는 집적 회로(1710)에 제공되는 구성 비트스트림을 생성하는 소프트웨어를 실행하도록 구성될 수 있다. 이하에 더욱 상세하게 설명되는 바와 같이, 구성 비트스트림의 비트는 집적 회로의 프로그래머블 리소스들을 구성하도록 사용된다.
이제 도 18을 참조하면, 도 1 내지 도 5의 회로들을 포함하는 프로그래머블 리소스들을 갖는 디바이스의 블록도가 도시된다. 프로그래머블 리소스들을 갖는 디바이스들이 임의의 타입의 집적 회로 디바이스, 이를테면, 프로그래머블 리소스들을 갖는 ASIC(application specific integrated circuit)으로 구현될 수 있는 한편, 다른 디바이스들은 전용 PLD(programmable logic device)들을 포함한다. 일 타입의 PLD는 CPLD(Complex Programmable Logic Device)이다. CPLD는, 인터커넥트 스위치 매트릭스에 의해 함께 그리고 I/O(input/output) 리소스들에 연결된 2개 또는 그 초과의 “기능 블록들”을 포함한다. CPLD의 각각의 기능 블록은, PLA(Programmable Logic Array) 또는 PAL(Programmable Array Logic) 디바이스에 사용되는 것과 유사한 2-레벨 AND/OR 구조를 포함한다. 다른 타입의 PLD는 FPGA(field programmable gate array)이다. 통상적인 FPGA에서, CLB(configurable logic block)들의 어레이는 프로그래머블 IOB(input/output block)들에 커플링된다. CLB들 및 IOB들은 프로그래머블 라우팅 리소스들의 계층에 의해 인터커넥팅된다. 이러한 CLB들, IOB들, 및 프로그래머블 라우팅 리소스들은 일반적으로 오프-칩 메모리로부터 FPGA의 구성 메모리 셀들로 구성 비트스트림을 로딩함으로써 고객맞춤된다. 모든 이러한 타입들의 PLD(programmable logic device)들의 경우, 디바이스의 기능성은 그 목적을 위해 디바이스에 제공되는 구성 비트스트림의 구성 데이터 비트들에 의해 제어된다. 구성 데이터 비트들은 휘발성 메모리(예컨대, FPGA들 및 몇몇 CPLD들에서와 같이, 정적 메모리 셀들)에, 비-휘발성 메모리(예컨대, 몇몇 CPLD들에서와 같이, Flash 메모리)에, 또는 임의의 다른 타입의 메모리 셀에 저장될 수 있다.
도 18의 디바이스는, MGT(multi-gigabit transceiver)들(1801), CLB들(1802), BRAM(random access memory block)들(1803), lOB(input/output block)들(1804), CONFIG/CLOCKS(configuration and clocking logic)(1805), DSP(digital signal processing block)들(1806), 특수화된 I/O(input/output) 블록들(1807)(예컨대, 구성 포트들 및 클록 포트들), 및 다른 프로그래머블 로직(1808), 이를테면, 디지털 클록 관리자들, 아날로그-디지털 컨버터들, 시스템 모니터링 로직, 등을 포함하는 다수의 상이한 프로그래머블 타일들을 갖는 FPGA 아키텍쳐(1800)를 포함한다. 일부 FPGA들은 또한 전용 PROC(processor block)들(1810)을 포함하며, 이는 예컨대 소프트웨어 애플리케이션을 구현하는데 사용될 수 있다.
일부 FPGA들에서, 각각의 프로그래머블 타일은, 각각의 인접 타일의 대응 인터커넥트 엘리먼트로의 그리고 그로부터의 표준화된 커넥션들을 갖는 프로그래머블 INT(interconnect element)(1811)를 포함한다. 따라서, 함께 취해진 프로그래머블 인터커넥트 엘리먼트들은 도시된 FPGA에 대한 프로그래머블 인터커넥트 구조를 구현한다. 프로그래머블 인터커넥트 엘리먼트(1811)는 또한, 도 18의 상단에 포함된 예들에 의해 도시된 바와 같이, 동일한 타일 내 프로그래머블 로직 엘리먼트로의 그리고 그로부터의 커넥션들을 포함한다.
예컨대, CLB(1802)는 사용자 로직 + 단일 프로그래머블 인터커넥트 엘리먼트(1811)를 구현하도록 프로그래밍될 수 있는 CLE(configurable logic element)(1812)를 포함할 수 있다. BRAM(1803)은 하나 또는 그 초과의 프로그래머블 인터커넥트 엘리먼트들에 더해 BRL(BRAM logic element)(1813)을 포함할 수 있다. BRAM은 구성 로직 블록의 분배된 RAM과는 별도의 전용 메모리를 포함한다. 통상적으로, 타일에 포함된 인터커넥트 엘리먼트들의 수는 타일의 높이에 의존한다. 도시된 어레인지먼트에서, BRAM 타일은 5개의 CLB들과 동일한 높이를 갖지만, 다른 수들도 또한 사용될 수 있다. DSP 타일(1806)은 적절한 수의 프로그래머블 인터커넥트 엘리먼트들에 더해 DSPL(DSP logic element)(1814)을 포함할 수 있다. IOB(1804)는, 예컨대, 프로그래머블 인터커넥트 엘리먼트(1811)의 일 경우에 더해 IOL(input/output logic element)(1815)의 2개의 인스턴스들을 포함할 수 있다. 디바이스의 커넥션들의 로케이션은 그 목적을 위해 디바이스에 제공되는 구성 비트스트림의 구성 데이터 비트들에 의해 제어된다. 프로그래머블 인터커넥트들은, 구성 비트스트림의 비트들에 대한 응답으로, 프로그래머블 로직으로 구현된 회로들 또는 다른 회로들, 이를테면, BRAM들 또는 프로세서에 다양한 신호들을 커플링하는데 인터커넥트 라인들을 포함하는 커넥션들이 사용되는 것을 가능하게 한다.
도시된 어레인지먼트에서, 다이의 중심 가까이의 컬럼형(columnar) 영역은 구성, 클록, 및 다른 제어 로직에 사용된다. 이 컬럼(column)으로부터 연장하는 구성/클록 분배 영역들(1809)은 FPGA의 폭에 걸쳐 클록들 및 구성 신호들을 분배하는데 사용된다. 도 18에 예시된 아키텍쳐를 활용하는 일부 FPGA들은 그 FPGA의 대부분을 형성하는 규칙적인 컬럼 구조를 방해하는 추가적인 로직 블록들을 포함한다. 추가적인 로직 블록들은 프로그래머블 블록들 및/또는 전용 로직일 수 있다. 예컨대, 도 18에 도시된 프로세서 블록 PROC(1810)은 CLB들 및 BRAM들의 몇몇 컬럼들에 걸쳐있다.
도 18이 오직 예시적인 FPGA 아키텍쳐만을 예시하도록 의도되었음에 유의한다. 컬럼들의 논리 블록들의 수들, 컬럼들의 상대 폭들, 컬럼들의 수 및 순서, 컬럼들에 포함된 로직 블록들의 타입들, 로직 블록들의 상대적 크기들, 및 도 18의 상단에 포함된 인터커넥트/로직 구현들은 순전히 예시적인 것이다. 예컨대, 실제 FPGA에서, 사용자 로직의 효율적인 구현을 용이하게 하기 위해 CLB들이 나타나는 곳 마다 CLB들의 하나 초과의 인접 컬럼이 통상적으로 포함된다. 도 18의 어레인지먼트는 프로그래머블 리소스들을 갖는 집적 회로와 관련된 것이지만, 이하에 더욱 상세하게 설명되는 회로들 및 방법들이 임의의 타입의 ASIC에서 구현될 수 있음이 이해되어야 한다.
이제 도 19를 참조하면, 도 18의 디바이스의 구성가능 로직 엘리먼트의 블록도가 도시된다. 특히, 도 19는 도 18의 구성 로직 블록(1802)의 구성가능 로직 엘리먼트를 간략화된 형태로 도시한다. 도 19의 어레인지먼트에서, 슬라이스 M(1901)은 4개의 LUTM(lookup table)들(1901A-1901D)을 포함하고, 이들 각각은 6개의 LUT 데이터 입력 단자들(A1-A6, B1-B6, C1-C6, 및 D1-D6)에 의해 구동되며, 각각은 2개의 LUT 출력 신호들(O5 및 O6)을 제공한다. LUT들(1901A-1901D)로부터의 O6 출력 단자들은 각각 슬라이스 출력 단자들(A-D)을 구동한다. LUT 데이터 입력 신호들은, 프로그래머블 인터커넥트 엘리먼트(1911)에 의해 구현될 수 있는 입력 멀티플렉서들을 통해 FPGA 인터커넥트 구조에 의해 공급되고, LUT 출력 신호들은 또한 인터커넥트 구조에 공급된다. 슬라이스 M은 또한: 출력 단자들(AMUX-DMUX)을 구동하는 출력 선택 멀티플렉서들(1911A-1911D); 메모리 엘리먼트들(1902A-1902D)의 데이터 입력 단자들을 구동하는 멀티플렉서들(1912A-1912D); 조합 멀티플렉서들(1916, 1918, 및 1919); 바운스 멀티플렉서 회로들(1922-1923); (입력 클록 경로 상에 선택적인 반전을 함께 제공하는) 인버터(1905) 및 멀티플렉서(1906)로 표시된 회로; 및 멀티플렉서들(1914A-1914D, 1915A-1915D, 1920-1921) 및 배타적 OR 게이트들(1913A-1913D)을 갖는 캐리 로직(carry logic)을 포함한다. 이러한 엘리먼트들 모두는 도 19에 도시된 바와 같이 함께 커플링된다. 도 19에 예시된 멀티플렉서들에 대한 선택 입력들이 도시되지 않은 경우, 선택 입력들은 구성 메모리 셀들에 의해 제어된다. 즉, 구성 메모리 셀들에 저장된 구성 비트스트림의 구성 비트들이 멀티플렉서들에 대한 정확한 입력들을 선택하기 위해 멀티플렉서들의 선택 입력들에 커플링된다. 잘 알려져 있는 이러한 구성 메모리 셀들은 명확성을 위해 도 19에서뿐만 아니라 본 명세서의 다른 선택된 도면들에도 생략되어 있다.
도시된 어레인지먼트에서, 각각의 메모리 엘리먼트(1902A-1902D)는 동기식 또는 비동기식 플립-플롭 또는 래치로서 기능하도록 프로그래밍될 수 있다. 동기식 기능과 비동기식 기능 사이에서의 선택은, 동기/비동기(Sync/Asynch) 선택 회로(1903)를 프로그래밍함으로써 슬라이스 내의 4개의 모든 메모리 엘리먼트들에 대해 이루어진다. S/R(세트/리셋) 입력 신호가 세트 기능을 제공하도록 메모리 엘리먼트가 프로그래밍될 때, REV 입력 단자는 리셋 기능을 제공한다. S/R 입력 신호가 리셋 기능을 제공하도록 메모리 엘리먼트가 프로그래밍될 때, REV 입력 단자는 세트 기능을 제공한다. 메모리 엘리먼트들(1902A-1902D)은, 예컨대, 글로벌 클록 네트워크에 의해 또는 인터커넥트 구조에 의해 제공될 수 있는 클록 신호(CK)에 의해 클록킹된다. 이러한 프로그래머블 메모리 엘리먼트들은 FPGA 설계의 분야에 잘 알려져 있다. 각각의 메모리 엘리먼트(1902A-1902D)는 레지스터된 출력 신호(AQ-DQ)를 인터커넥트 구조에 제공한다. 각각의 LUT(1901A-1901D)가 2개의 출력 신호들(O5 및 O6)을 제공하기 때문에, LUT는 5개의 공유 입력 신호들(IN1-IN5)을 갖는 2개의 5-입력 LUT들로서, 또는 입력 신호들(IN1-IN6)을 갖는 하나의 6-입력 LUT로서 기능하도록 구성될 수 있다.
도 19의 어레인지먼트에서, 각각의 LUTM(1901A-1901D)은 임의의 수개의 모드들에서 기능할 수 있다. 룩업 테이블 모드에 있을 때, 각각의 LUT는 입력 멀티플렉서들을 통해 FPGA 인터커넥트 구조에 의해 공급되는 6개의 데이터 입력 신호들(IN1-IN6)을 갖는다. 64개의 데이터 값들 중 하나는 신호들(IN1-IN6)의 값들에 기반하여 구성 메모리 셀들로부터 프로그래밍가능하게 선택된다. RAM 모드에 있을 때, 각각의 LUT는 공유 어드레싱을 통해 단일 64-비트 RAM 또는 2개의 32-비트 RAM들로서 기능한다. RAM 기록 데이터는 입력 단자(DI1)을 통해(LUT들(1901A-1901C)에 대한 멀티플렉서들(1917A-1917C)을 통해) 64-비트 RAM에, 또는 입력 단자들(DI1 및 DI2)을 통해 2개의 32-비트 RAM들에 공급된다. LUT RAM들에서의 RAM 기록 동작들은, 멀티플렉서(1906)로부터 클록 신호(CK)에 의해, 그리고 클록 인에이블 신호(CE) 또는 기록 인에이블 신호(WE) 중 하나를 선택적으로 통과시킬 수 있는 멀티플렉서(1907)로부터의 기록 인에이블 신호(WEN)에 의해 제어된다. 시프트 레지스터 모드에서, 각각의 LUT는 2개의 16-비트 시프트 레지스터들로서 기능하거나, 또는 2개의 16-비트 시프트 레지스터들은 직렬로 커플링되어 단일 32-비트 시프트 레지스터를 생성한다. 시프트-인 신호들은 입력 단자들(DI1 및 DI2) 중 하나 또는 둘 다를 통해 제공된다. 16-비트 및 32-비트 시프트 아웃 신호들은 LUT 출력 단자들을 통해 제공될 수 있고, 32-비트 시프트 아웃 신호는 또한 LUT 출력 단자(MC31)를 통해 보다 직접 제공될 수 있다. LUT(1901A)의 32-비트 시프트 아웃 신호 MC31은 또한, 출력 선택 멀티플렉서(1911D) 및 CLE 출력 단자(DMUX)를 통해 시프트 레지스터 체이닝을 위해 일반적인 인터커넥트 구조에 제공될 수 있다. 이에 따라, 앞서 설명된 회로들 및 방법들은 디바이스, 이를테면, 도 18 및 도 19의 디바이스들, 또는 임의의 다른 적절한 디바이스에서 구현될 수 있다.
따라서, 메모리 시스템의 동작을 제어하기 위한 새로운 회로들 및 방법들이 설명되었음이 이해될 수 있다. 당업자라면, 개시된 발명을 포함하는 다양한 대안들 및 균등물들이 존재하는 것으로 이해될 것임을 인식할 것이다. 그 결과, 본 발명은 전술한 것에 제한되지 않으며 다음의 청구항들에 의해서만 제한된다.

Claims (15)

  1. 상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하기 위한 회로로서,
    제 1 타입의 메모리 엘리먼트를 갖고 제 1 액세스 시간을 갖는 제 1 메모리;
    제 2 타입의 메모리 엘리먼트를 갖고 제 2 액세스 시간을 갖는 제 2 메모리 ― 상기 제 2 타입의 메모리 엘리먼트는 상기 제 1 타입의 메모리 엘리먼트와 상이함 ―;
    상기 제 1 메모리 및 상기 제 2 메모리로의 액세스를 가능하게 하는 메모리 제어 회로 ― 상기 메모리 제어 회로는 상기 제 1 메모리 및 상기 제 2 메모리에 저장된 데이터의 크기들에 대한 임계값을 결정하는 프로파일러를 포함하고, 상기 제 1 메모리와 연관된 액세스 빈도가 미리결정된 액세스 빈도와 상이하다고 결정되면 상기 임계값은 조정됨 ―;
    상기 제 1 액세스 시간과 상기 제 2 액세스 시간의 차이를 보상하기 위해 상기 제 2 메모리에 커플링된 지연 버퍼; 및
    순서화된 출력 데이터(ordered output data)를 생성하기 위해 상기 제 1 메모리의 출력 데이터와 상기 제 2 메모리의 지연된 출력 데이터를 병합(merging)하기 위한 회로를 포함하는,
    메모리 시스템의 동작을 제어하기 위한 회로.
  2. 제 1 항에 있어서,
    상기 메모리 제어 회로는, 상기 제 1 메모리와 연관된 제 1 메모리 제어기, 상기 제 2 메모리와 연관된 제 2 메모리 제어기 및 상기 제 1 메모리 제어기 및 상기 제 2 메모리 제어기에 커플링된 메모리 선택 회로를 포함하고,
    상기 메모리 선택 회로는 상기 제 1 메모리 및 상기 제 2 메모리 중 원하는 메모리로의 액세스를 가능하게 하는,
    메모리 시스템의 동작을 제어하기 위한 회로.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 제 1 메모리는 SSD를 포함하고,
    상기 제 2 메모리는 DRAM을 포함하는,
    메모리 시스템의 동작을 제어하기 위한 회로.
  4. 제 1 항 또는 제 2 항에 있어서,
    상기 지연 버퍼는, 미리결정된 지연 동안 데이터를 버퍼링함으로써 상기 제 1 액세스 시간과 상기 제 2 액세스 시간의 차이를 보상하는, PLD 상의 RAM의 블록을 포함하는,
    메모리 시스템의 동작을 제어하기 위한 회로.
  5. 제 4 항에 있어서,
    데이터는 상기 미리결정된 지연 이후에 상기 RAM의 블록으로부터 데이터가 판독되는,
    메모리 시스템의 동작을 제어하기 위한 회로.
  6. 제 4 항에 있어서,
    상기 PLD는 구성 비트들을 수신하도록 커플링되고,
    상기 RAM의 블록은 상기 구성 비트들을 사용하여 프로그래밍되는 프로그래머블 인터커넥트 엘리먼트들을 사용하여 상기 제 2 메모리에 커플링되는,
    메모리 시스템의 동작을 제어하기 위한 회로.
  7. 제 1 항 또는 제 2 항에 있어서,
    상기 제 1 메모리는 비-휘발성 메모리를 포함하고,
    상기 제 2 메모리는 휘발성 메모리를 포함하는,
    메모리 시스템의 동작을 제어하기 위한 회로.
  8. 제 1 항 또는 제 2 항에 있어서,
    상기 제 1 메모리 및 상기 제 2 메모리에 대한 메모리 액세스들을 제어하는 메모리 변환기(memory translator)를 더 포함하고,
    상기 메모리 변환기는 상기 제 1 메모리에 액세스할지 또는 상기 제 2 메모리에 액세스할지를 결정하는,
    메모리 시스템의 동작을 제어하기 위한 회로.
  9. 제 8 항에 있어서,
    상기 메모리 변환기는 상기 제 1 메모리 및 상기 제 2 메모리와 연관된 액세스 시간들에 관련된 정보를 저장하기 위한 프로파일러를 포함하고,
    상기 메모리 변환기는 상기 프로파일러에 저장된 정보에 기반하여 상기 제 1 메모리에 액세스할지 또는 상기 제 2 메모리에 액세스할지 결정하는,
    메모리 시스템의 동작을 제어하기 위한 회로.
  10. 상이한 타입들의 메모리를 갖는 메모리 시스템의 동작을 제어하기 위한 방법으로서,
    제 1 타입의 메모리 엘리먼트를 갖고 제 1 액세스 시간을 갖는 제 1 메모리에 액세스하는 단계;
    제 2 타입의 메모리 엘리먼트를 갖고 제 2 액세스 시간을 갖는 제 2 메모리에 액세스하는 단계 ― 상기 제 2 타입의 메모리 엘리먼트는 상기 제 1 타입의 메모리 엘리먼트와 상이함 ―;
    상기 제 1 메모리 및 상기 제 2 메모리에 저장된 데이터의 크기들에 대한 임계값을 결정하는 단계;
    상기 제 1 메모리와 연관된 액세스 빈도가 미리결정된 액세스 빈도와 상이하다고 결정되면 상기 임계값을 조정하는 단계;
    상기 제 1 액세스 시간과 상기 제 2 액세스 시간의 차이를 보상하기 위해 제 2 메모리에 의해 출력되는 데이터를 지연 버퍼에 커플링하는 단계; 및
    순서화된 출력 데이터를 생성하기 위해 상기 제 1 메모리의 출력 데이터와 상기 제 2 메모리의 지연된 출력 데이터를 병합하는 단계를 포함하는,
    메모리 시스템의 동작을 제어하기 위한 방법.
  11. 제 10 항에 있어서,
    상기 제 1 메모리에 액세스하는 단계는, 상기 제 1 메모리와 연관된 제 1 메모리 제어기에 의해 상기 제 1 메모리에 액세스하는 단계를 포함하고,
    상기 제 2 메모리에 액세스하는 단계는, 상기 제 2 메모리와 연관된 제 2 메모리 제어기에 의해 상기 제 2 메모리에 액세스하는 단계를 포함하는,
    메모리 시스템의 동작을 제어하기 위한 방법.
  12. 제 11 항에 있어서,
    상기 제 1 메모리 제어기 및 상기 제 2 메모리 제어기에 커플링된 메모리 선택 회로를 구현하는 단계를 더 포함하고,
    상기 메모리 선택 회로는 상기 제 1 메모리 및 상기 제 2 메모리 중 선택된 메모리로의 액세스를 가능하게 하는,
    메모리 시스템의 동작을 제어하기 위한 방법.
  13. 제 10 항 내지 제 12 항 중 어느 한 항에 있어서,
    상기 제 1 메모리에 액세스하는 단계는 SSD 메모리를 구현하는 단계를 포함하는,
    메모리 시스템의 동작을 제어하기 위한 방법.
  14. 제 10 항 내지 제 12 항 중 어느 한 항에 있어서,
    상기 제 2 메모리에 액세스하는 단계는 DRAM을 구현하는 단계를 포함하는,
    메모리 시스템의 동작을 제어하기 위한 방법.
  15. 제 14 항에 있어서,
    상기 제 2 메모리에 의해 출력된 데이터를 지연 버퍼에 커플링하는 단계는, PLD 상의 RAM의 블록에 데이터를 커플링하는 단계를 포함하는,
    메모리 시스템의 동작을 제어하기 위한 방법.
KR1020177024101A 2015-01-28 2015-11-24 하이브리드 메모리 시스템의 동작을 제어하는 회로들 및 방법들 KR102446825B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/607,978 2015-01-28
US14/607,978 US9711194B2 (en) 2015-01-28 2015-01-28 Circuits for and methods of controlling the operation of a hybrid memory system
PCT/US2015/062364 WO2016122762A1 (en) 2015-01-28 2015-11-24 Circuits for and methods of controlling the operation of a hybrid memory system

Publications (2)

Publication Number Publication Date
KR20170107559A KR20170107559A (ko) 2017-09-25
KR102446825B1 true KR102446825B1 (ko) 2022-09-22

Family

ID=54979922

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177024101A KR102446825B1 (ko) 2015-01-28 2015-11-24 하이브리드 메모리 시스템의 동작을 제어하는 회로들 및 방법들

Country Status (6)

Country Link
US (1) US9711194B2 (ko)
EP (1) EP3251017B1 (ko)
JP (1) JP6530815B2 (ko)
KR (1) KR102446825B1 (ko)
CN (1) CN107209734B (ko)
WO (1) WO2016122762A1 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9921757B1 (en) * 2016-03-31 2018-03-20 EMC IP Holding Company LLC Using an FPGA for integration with low-latency, non-volatile memory
US9698793B1 (en) * 2016-04-30 2017-07-04 Arista Networks, Inc. Live system upgrade
US11625523B2 (en) 2016-12-14 2023-04-11 iCometrue Company Ltd. Logic drive based on standard commodity FPGA IC chips
CN108288616B (zh) 2016-12-14 2023-04-07 成真股份有限公司 芯片封装
US10482129B1 (en) 2017-04-11 2019-11-19 Xilinx, Inc. Pipelined database processing circuit and method
US10845866B2 (en) * 2017-06-22 2020-11-24 Micron Technology, Inc. Non-volatile memory system or sub-system
WO2018232736A1 (zh) * 2017-06-23 2018-12-27 华为技术有限公司 内存访问技术及计算机系统
US10447274B2 (en) 2017-07-11 2019-10-15 iCometrue Company Ltd. Logic drive based on standard commodity FPGA IC chips using non-volatile memory cells
US10957679B2 (en) 2017-08-08 2021-03-23 iCometrue Company Ltd. Logic drive based on standardized commodity programmable logic semiconductor IC chips
US10630296B2 (en) * 2017-09-12 2020-04-21 iCometrue Company Ltd. Logic drive with brain-like elasticity and integrality based on standard commodity FPGA IC chips using non-volatile memory cells
US10839286B2 (en) * 2017-09-14 2020-11-17 Xilinx, Inc. System and method for implementing neural networks in integrated circuits
US10354733B1 (en) * 2017-10-17 2019-07-16 Xilinx, Inc. Software-defined memory bandwidth reduction by hierarchical stream buffering for general matrix multiplication in a programmable IC
US10396799B1 (en) 2017-12-12 2019-08-27 Xilinx, Inc. Circuit for and method of accessing memory elements in an integrated circuit device
US10608642B2 (en) 2018-02-01 2020-03-31 iCometrue Company Ltd. Logic drive using standard commodity programmable logic IC chips comprising non-volatile radom access memory cells
US10623000B2 (en) 2018-02-14 2020-04-14 iCometrue Company Ltd. Logic drive using standard commodity programmable logic IC chips
US10809942B2 (en) * 2018-03-21 2020-10-20 Micron Technology, Inc. Latency-based storage in a hybrid memory system
US10705747B2 (en) * 2018-03-21 2020-07-07 Micron Technology, Inc. Latency-based storage in a hybrid memory system
US10705963B2 (en) 2018-03-21 2020-07-07 Micron Technology, Inc. Latency-based storage in a hybrid memory system
US10608638B2 (en) 2018-05-24 2020-03-31 iCometrue Company Ltd. Logic drive using standard commodity programmable logic IC chips
US11309334B2 (en) 2018-09-11 2022-04-19 iCometrue Company Ltd. Logic drive using standard commodity programmable logic IC chips comprising non-volatile random access memory cells
US10892011B2 (en) 2018-09-11 2021-01-12 iCometrue Company Ltd. Logic drive using standard commodity programmable logic IC chips comprising non-volatile random access memory cells
US10937762B2 (en) 2018-10-04 2021-03-02 iCometrue Company Ltd. Logic drive based on multichip package using interconnection bridge
US11616046B2 (en) 2018-11-02 2023-03-28 iCometrue Company Ltd. Logic drive based on chip scale package comprising standardized commodity programmable logic IC chip and memory IC chip
US11211334B2 (en) 2018-11-18 2021-12-28 iCometrue Company Ltd. Logic drive based on chip scale package comprising standardized commodity programmable logic IC chip and memory IC chip
US11227838B2 (en) 2019-07-02 2022-01-18 iCometrue Company Ltd. Logic drive based on multichip package comprising standard commodity FPGA IC chip with cooperating or supporting circuits
US10985154B2 (en) 2019-07-02 2021-04-20 iCometrue Company Ltd. Logic drive based on multichip package comprising standard commodity FPGA IC chip with cryptography circuits
US11887930B2 (en) 2019-08-05 2024-01-30 iCometrue Company Ltd. Vertical interconnect elevator based on through silicon vias
US11637056B2 (en) 2019-09-20 2023-04-25 iCometrue Company Ltd. 3D chip package based on through-silicon-via interconnection elevator
US11600526B2 (en) 2020-01-22 2023-03-07 iCometrue Company Ltd. Chip package based on through-silicon-via connector and silicon interconnection bridge
KR20210127339A (ko) 2020-04-14 2021-10-22 에스케이하이닉스 주식회사 리프레시 주기가 다른 다수의 영역을 구비한 메모리 장치, 이를 제어하는 메모리 컨트롤러 및 이를 포함하는 메모리 시스템
US11527270B2 (en) * 2021-05-06 2022-12-13 Advanced Micro Devices, Inc. Hybrid library latch array
US11715514B2 (en) 2021-05-06 2023-08-01 Advanced Micro Devices, Inc. Latch bit cells

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010019509A1 (en) 1999-12-22 2001-09-06 Ari Aho Memory controller
US20080126716A1 (en) 2006-11-02 2008-05-29 Daniels Scott L Methods and Arrangements for Hybrid Data Storage
WO2008131058A2 (en) 2007-04-17 2008-10-30 Rambus Inc. Hybrid volatile and non-volatile memory device

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6446141B1 (en) 1999-03-25 2002-09-03 Dell Products, L.P. Storage server system including ranking of data source
KR101626117B1 (ko) 2009-06-22 2016-05-31 삼성전자주식회사 클라우드 스토리지를 제공하는 클라이언트, 중개 서버 및 방법
CN102274245B (zh) * 2010-06-09 2014-06-11 景岳生物科技股份有限公司 新颖乳杆菌及其组合物和在制备改善糖尿病及其并发症药物中的应用
US10558705B2 (en) 2010-10-20 2020-02-11 Microsoft Technology Licensing, Llc Low RAM space, high-throughput persistent key-value store using secondary memory
JP6170553B2 (ja) * 2012-06-08 2017-07-26 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated 異種プロセッサを使用するアプリケーションに低レイテンシを提供するためのシステムおよび方法
US9405621B2 (en) 2012-12-28 2016-08-02 Super Talent Technology, Corp. Green eMMC device (GeD) controller with DRAM data persistence, data-type splitting, meta-page grouping, and diversion of temp files for enhanced flash endurance
US9456353B2 (en) * 2014-07-15 2016-09-27 Alcatel Lucent Multi-board architecture for wireless transceiver station

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010019509A1 (en) 1999-12-22 2001-09-06 Ari Aho Memory controller
US20080126716A1 (en) 2006-11-02 2008-05-29 Daniels Scott L Methods and Arrangements for Hybrid Data Storage
WO2008131058A2 (en) 2007-04-17 2008-10-30 Rambus Inc. Hybrid volatile and non-volatile memory device

Also Published As

Publication number Publication date
CN107209734B (zh) 2019-02-12
EP3251017A1 (en) 2017-12-06
US20160217835A1 (en) 2016-07-28
CN107209734A (zh) 2017-09-26
EP3251017B1 (en) 2019-01-09
US9711194B2 (en) 2017-07-18
KR20170107559A (ko) 2017-09-25
JP2018503921A (ja) 2018-02-08
WO2016122762A1 (en) 2016-08-04
JP6530815B2 (ja) 2019-06-12

Similar Documents

Publication Publication Date Title
KR102446825B1 (ko) 하이브리드 메모리 시스템의 동작을 제어하는 회로들 및 방법들
JP6564375B2 (ja) 高スループットのキーバリューストアの実現のためのメモリ構成
US9153292B2 (en) Integrated circuit devices having memory and methods of implementing memory in an integrated circuit device
JP3853736B2 (ja) ユーザによる構成可能なオンチップメモリシステム
US9015397B2 (en) Method and apparatus for DMA transfer with synchronization optimization
EP3805937B1 (en) Memory device including interface circuit and method of operating the same
US7106098B1 (en) Split FIFO configuration of block RAM
US9189199B2 (en) Folded FIFO memory generator
US9390017B2 (en) Write and read collision avoidance in single port memory devices
US9478272B1 (en) Configurable storage blocks with embedded first-in first-out and last-in first-out circuitry
US8995210B1 (en) Write and read collision avoidance in single port memory devices
US9837133B1 (en) Address arithmetic on block RAMs
CN113448498B (zh) 非易失性存储器接口
KR102326661B1 (ko) 이퀄라이저 장치 및 이를 포함하는 메모리 장치
Knödtel et al. Check for
RAMESWARI et al. Implementation of Bram Multiported Memory
MANOHAR et al. Power Efficient of Multiported Memory on FPGA
GANESH et al. Composing A Design And Implementation of Multi Ported Memories On FPGA for Power Efficiency

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right