KR20230054844A - 복수의 명령 서브 큐 및 대응하는 아비터를 갖는 메모리 컨트롤러 - Google Patents
복수의 명령 서브 큐 및 대응하는 아비터를 갖는 메모리 컨트롤러 Download PDFInfo
- Publication number
- KR20230054844A KR20230054844A KR1020237008725A KR20237008725A KR20230054844A KR 20230054844 A KR20230054844 A KR 20230054844A KR 1020237008725 A KR1020237008725 A KR 1020237008725A KR 20237008725 A KR20237008725 A KR 20237008725A KR 20230054844 A KR20230054844 A KR 20230054844A
- Authority
- KR
- South Korea
- Prior art keywords
- subqueue
- command
- instruction
- memory access
- memory
- Prior art date
Links
- 230000015654 memory Effects 0.000 title claims abstract description 415
- 238000012545 processing Methods 0.000 claims description 32
- 238000000034 method Methods 0.000 claims description 26
- 238000012546 transfer Methods 0.000 claims description 7
- 230000006870 function Effects 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 14
- 239000004744 fabric Substances 0.000 description 14
- 230000004044 response Effects 0.000 description 8
- 230000002093 peripheral effect Effects 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 4
- 230000015572 biosynthetic process Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000003786 synthesis reaction Methods 0.000 description 3
- 238000012549 training Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 2
- 239000000872 buffer Substances 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 241000699670 Mus sp. Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 239000003990 capacitor Substances 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1684—Details of memory controller using multiple buses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System (AREA)
Abstract
메모리 컨트롤러는 명령 큐 및 아비터 쌍의 다수의 그룹을 사용하는 메모리 채널 컨트롤러를 포함한다. 각각의 아비터는 미리 결정된 기준에 따라 각각의 명령 큐로부터 메모리 액세스 명령를 선택하기 위해 각각의 명령 큐에 결합된다. 각각의 아비터는 미리 결정된 기준들에 기초하여 독립적으로 각각의 명령 큐 내의 메모리 액세스 요청들 중에서 선택하고, 메모리 서브 채널에 요청을 전송하는 제2 레벨 아비터로서 기능하는 선택기로 선택된 메모리 액세스 요청들을 전송한다.
Description
관련 출원의 교차 참조
본 출원은 2020년 8월 24일자로 출원된 미국 임시 출원 제63/069,352호에 대한 우선권을 주장하는 2020년 10월 30일자로 출원된 미국 출원 제17/085,304호에 대한 우선권을 주장하며, 이의 전체 개시내용은 명백하게 본원에 포함된다.
컴퓨터 시스템들은 전형적으로 메인 메모리에 대해 저렴한 고밀도 동적 랜덤 액세스 메모리(DRAM) 칩들을 사용한다. 오늘날 판매되는 대부분의 DRAM 칩들은 JEDEC(Joint Electron Devices Engineering Council)에 의해 공표된 다양한 DDR(double data rate) DRAM 표준들과 호환된다. DDR DRAM은 다양한 저전력 모드를 제공함으로써 고성능 및 저전력 동작 모두를 제공한다.
현대의 DDR 메모리 컨트롤러들은 보류 중인 메모리 액세스 요청들을 저장하는 큐들을 유지하여, 이들이 생성되거나 저장되는 순서와 관련하여 계류 중인 메모리 액세스 요청들을 순서대로 선택할 수 있게 한다. 예를 들어, 메모리 컨트롤러들은 다수의 메모리 액세스 요청들을 큐로부터 주어진 메모리 랭크에서 동일한 로우로 요청하고, 현재 로우를 사전 충전하는 오버헤드를 피하기 위해, 페이지 히트들을 검사하는 것에 기초하여, 메모리 시스템에 연속적으로 이들을 발행할 수 있다. 일부 DDR 메모리 컨트롤러들은 메모리 액세스 요청을 각각 포함하는 64개의 명령 큐 엔트리들 모두를 중재하는 64개의 엔트리 명령 큐 및 중재하는 단일 명령 큐를 사용한다. 클라우드 컴퓨팅 서버, 데스크톱 컴퓨터, 랩톱 컴퓨터, 모바일 디바이스, 프린터 및 다른 디바이스와 같은 고밀도 동적 랜덤 액세스 메모리를 사용하는 데이터 처리 시스템은 이전에 보다 높은 성능 능력을 필요로 한다.
구현예는 하기 도면을 수반할 때 하기 설명을 고려하여 보다 쉽게 이해될 것이며, 여기서 유사한 참조 번호는 동일한 요소를 나타낸다.
도 1은 일부 실시예들에 따른 데이터 처리 시스템의 블록도를 도시한다.
도 2는 도 1의 데이터 처리 시스템에 사용하기에 적합한 가속 처리 유닛(APU)의 블록도를 도시한다.
도 3은 일부 실시예들에 따른 도 2의 APU에 사용하기에 적합한 메모리 컨트롤러 및 연관된 물리적 인터페이스(PHY)의 블록도를 도시한다.
도 4는 일부 실시예들에 따른 도 2의 APU에 사용하기에 적합한 다른 메모리 컨트롤러 및 연관된 PHY의 블록도를 도시한다.
도 5는 일부 실시예들에 따른 메모리 컨트롤러의 블록도를 도시한다.
도 6은 일부 실시예들에 따른 복수의 명령 서브 큐들을 사용하는 메모리 컨트롤러의 부분의 블록도를 도시한다.
도 7은 일부 실시예들에 따른 별개의 기입 명령 서브 큐들 및 별개의 판독 명령 서브 큐들을 사용하는 메모리 컨트롤러의 다른 예의 블록도를 도시한다.
도 8은 일부 실시예들에 따른 판독/기입 서브 큐들의 상이한 그룹들을 사용하는 다른 메모리 컨트롤러를 도시하는 블록도이다.
도 9는 도 7에 도시된 메모리 컨트롤러 아키텍처의 다수의 구성들을 사용하는 다른 메모리 컨트롤러의 블록도를 도시한다.
도 10은 일부 실시예들에 따른 복수의 메모리 채널들을 갖는 메모리 시스템을 제어하기 위한 방법의 일 예를 도시하는 흐름도이다.
하기의 설명에서, 상이한 도면들에서의 동일한 참조 번호들의 사용은 유사하거나 동일한 아이템들을 지시한다. 달리 언급되지 않는 한, 단어 "결합된" 및 그의 관련된 동사 형태들은 당업계에 공지된 수단에 의한 직접적인 연결 및 간접적인 전기 연결 둘 모두를 포함하며, 달리 언급되지 않는 한, 직접적인 연결에 대한 임의의 설명은 적합한 형태의 간접적인 전기 연결을 사용하는 대안적인 실시예들도 암시한다.
도 1은 일부 실시예들에 따른 데이터 처리 시스템의 블록도를 도시한다.
도 2는 도 1의 데이터 처리 시스템에 사용하기에 적합한 가속 처리 유닛(APU)의 블록도를 도시한다.
도 3은 일부 실시예들에 따른 도 2의 APU에 사용하기에 적합한 메모리 컨트롤러 및 연관된 물리적 인터페이스(PHY)의 블록도를 도시한다.
도 4는 일부 실시예들에 따른 도 2의 APU에 사용하기에 적합한 다른 메모리 컨트롤러 및 연관된 PHY의 블록도를 도시한다.
도 5는 일부 실시예들에 따른 메모리 컨트롤러의 블록도를 도시한다.
도 6은 일부 실시예들에 따른 복수의 명령 서브 큐들을 사용하는 메모리 컨트롤러의 부분의 블록도를 도시한다.
도 7은 일부 실시예들에 따른 별개의 기입 명령 서브 큐들 및 별개의 판독 명령 서브 큐들을 사용하는 메모리 컨트롤러의 다른 예의 블록도를 도시한다.
도 8은 일부 실시예들에 따른 판독/기입 서브 큐들의 상이한 그룹들을 사용하는 다른 메모리 컨트롤러를 도시하는 블록도이다.
도 9는 도 7에 도시된 메모리 컨트롤러 아키텍처의 다수의 구성들을 사용하는 다른 메모리 컨트롤러의 블록도를 도시한다.
도 10은 일부 실시예들에 따른 복수의 메모리 채널들을 갖는 메모리 시스템을 제어하기 위한 방법의 일 예를 도시하는 흐름도이다.
하기의 설명에서, 상이한 도면들에서의 동일한 참조 번호들의 사용은 유사하거나 동일한 아이템들을 지시한다. 달리 언급되지 않는 한, 단어 "결합된" 및 그의 관련된 동사 형태들은 당업계에 공지된 수단에 의한 직접적인 연결 및 간접적인 전기 연결 둘 모두를 포함하며, 달리 언급되지 않는 한, 직접적인 연결에 대한 임의의 설명은 적합한 형태의 간접적인 전기 연결을 사용하는 대안적인 실시예들도 암시한다.
종래의 DDR 메모리 컨트롤러들에서의 아비터는 우선순위, JEDEC 타이밍 의존성 및 페이지 상태 정보에 관한 모든 64개의 엔트리들을 평가하는 데 너무 많은 시간을 취할 수 있다는 것이 밝혀졌다. 타이밍은 메모리 판독 및 기입 명령들(본원에서 판독 액세스들, 판독 요청들, 기입 액세스들 및 기입 요청들로도 지칭됨)에서 지연들을 야기하는 것을 어렵게 할 수 있다. 아래에서 설명되는 바와 같이, 일부 구현예들에서, 메모리 컨트롤러는 더 많지만 더 작은 명령 큐들이 사용되도록 명령 큐 및 아비터 쌍들의 다수의 그룹들을 사용하는 메모리 채널 컨트롤러를 포함한다. 복수의 명령 서브 큐는 채널 또는 서브 채널을 위한 명령 큐로서 사용된다. 일부 구현예들에서, 각각의 아비터는 DDR 타이밍 기준들 및 다른 기준들과 같은 미리 결정된 기준들에 따라 각각의 명령 큐로부터 메모리 액세스 명령들을 선택하기 위해 각각의 명령 큐에 결합된다. 아비터는 미리 결정된 기준들에 기초하여 독립적으로 각각의 명령 큐 내의 메모리 액세스 요청들 중에서 선택하고, 서브 채널에 요청을 전송하는 제2 레벨 아비터로서 기능하는 선택기로 선택된 메모리 액세스 요청들을 전송한다. 특정 구현예에서, 단일 더 큰 명령 큐 대신 다수의 더 작은 명령 큐 및 대응하는 전용 아비터를 사용하여, 메모리 컨트롤러 및 대응하는 데이터 처리 시스템의 동작 속도를 증가시킨다.
일부 구현예들에 따르면, 복수의 메모리 채널들을 갖는 메모리 시스템을 제어하기 위한 방법은 제1 명령 서브 큐 내의 메모리 액세스 요청을 선택하는 단계, 제2 명령 서브 큐 내의 메모리 액세스 요청을 선택하는 단계, 상기 제1 메모리 액세스 요청 및 상기 제2 메모리 액세스 요청 중에서 메모리 액세스 요청을 선택하는 단계; 및 상기 선택된 메모리 액세스 요청을 메모리 채널로 디스패칭하는 단계를 포함한다.
특정 구현예들에 따르면, 복수의 메모리 채널들을 갖는 메모리 시스템을 제어하기 위한 방법은 메모리 액세스 요청들을 수신하는 단계를 포함한다. 방법은 메모리 액세스 요청들 각각을 디코딩하는 단계를 포함한다. 방법은 또한, 디코딩된 메모리 액세스 요청을 제1 명령 서브 큐 또는 제2 명령 서브 큐 내에 저장하는 단계를 포함한다. 방법은 또한, 제1 명령 서브 큐로부터 선택된 제1 메모리 액세스 요청을 제공하기 위해 미리 결정된 기준을 사용하여 제1 명령 서브 큐 내의 복수의 메모리 액세스 요청들 중에서 선택하는 단계를 포함한다. 방법은 또한 제2 명령 서브 큐로부터 선택된 제2 메모리 액세스 요청을 제공하기 위해 미리 결정된 기준을 사용하여 제2 명령 서브 큐 내의 복수의 메모리 액세스 요청들 중에서 선택하는 단계를 포함한다. 방법은 또한 상기 제공된 상기 제1 명령 서브 큐로부터의 제1 메모리 액세스 요청 및 상기 제2 명령 서브 큐로부터의 제2 메모리 액세스 요청 중에서 바람직한 메모리 액세스 요청을 선택하는 단계를 포함한다. 방법은 또한, 서브 채널에 따라 복수의 메모리 채널들 중 하나에 선택된 바람직한 선택된 메모리 액세스 요청을 디스패치하는 단계를 포함한다.
일부 예들에서, 방법은 제1 명령 서브 큐가 판독 요청들만을 포함하고 제2 명령 서브 큐가 기입 요청들만을 포함하도록 상이한 명령 서브 큐들로 메모리 액세스 요청들을 분류하는 단계를 포함한다. 특정 예들에서, 방법은 메모리 시스템에서 메모리 디바이스들의 복수의 서브 채널들의 뱅크, 랭크 및 서브 채널로 메모리 액세스 요청들을 디코딩하는 단계를 포함하고, 복수의 명령 서브 큐 중 하나에 뱅크, 랭크 및 서브 채널을 저장하는 단계를 포함한다. 일부 구현예들에서, 방법은 제1 명령 서브 큐 및 제2 메모리 서브 큐로부터 제2 메모리 액세스 요청으로부터 제공된 제1 메모리 액세스 요청 중에서 가장 오래된 메모리 액세스 요청을 선택함으로써 바람직한 메모리 액세스 요청을 선택하는 단계를 포함한다.
특정 구현예들에서, 메모리 컨트롤러는 메모리 채널 컨트롤러를 포함하고, 메모리 채널 컨트롤러는 메모리 액세스 요청들을 저장하도록 구성된 제1 명령 서브 큐 및 제1 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 제1 명령 서브 큐에 결합된 대응하는 제1 아비터를 포함한다. 메모리는 또한, 메모리 액세스 요청들을 저장하도록 구성된 제2 명령 서브 큐 및 제2 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 제2 명령 서브 큐에 결합된 대응하는 제2 아비터를 포함한다. 메모리는 또한 메모리 액세스 요청들을 제1 명령 서브 큐 및 제2 명령 서브 큐 내에 배치하는 명령 큐 엔트리 로직을 포함한다. 메모리는 또한 제1 명령 서브 큐 또는 제2 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 복수의 서브 채널들 중 적어도 하나에 전송하도록 동작하는 제1 선택기를 포함한다. 일부 구현예들에서, 아비터는 미리 결정된 기준들에 기초하여 메모리 액세스 명령들을 선택한다. 일부 구현예들에서, 제1 선택기는 제1 및 제2 아비터들 모두에 결합된다.
일부 예들에서, 명령 큐 엔트리 로직은 제1 명령 서브 큐가 판독 요청들만을 포함하고 제2 명령 서브 큐가 기입 요청들만을 포함하도록 상이한 명령 서브 큐들로 메모리 액세스 요청들을 분류한다. 다른 구현예들에서, 명령 큐 엔트리 로직은 엔트리들을 제1 명령 서브 큐로부터 제2 명령 서브 큐로 이송한다.
특정 예들에서, 메모리 컨트롤러는 제1 아비터와 제2 아비터 사이에서 공유되는 공유 타이밍 로직 및 공유 페이지 테이블을 포함한다.
일부 예들에서, 메모리 제어 로직은 미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐를 포함한다. 메모리는 또한 메모리 액세스 요청들을 저장하기 위한 제4 명령 서브 큐 및 미리 결정된 기준에 따라 제4 명령 서브 큐로부터 메모리 액세스 명령를 선택하기 위해 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 포함한다. 메모리는 또한 제3 명령 서브 큐 또는 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하도록 동작하는 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기를 포함한다. 메모리는 또한 제1 및 제2 선택기에 동작 가능하게 결합되고 제1 선택기 또는 제2 선택기 중 어느 하나로부터 메모리 요청을 선택하고 선택된 메모리 액세스 요청들을 복수의 서브 채널들 중 적어도 하나에 전송하도록 동작하도록 동작하는 제3 선택기를 포함한다.
특정 예들에서, 메모리 컨트롤러는 제1 명령 서브 큐 및 제2 명령 서브 큐에 동작 가능하게 결합된 명령 큐 엔트리 로직을 포함하고, 제1 명령 서브 큐 및 제2 명령 큐가 판독 요청들만을 포함하고 제3 명령 서브 큐 및 제4 명령 큐가 기입 요청들만을 포함하도록 메모리 액세스 요청들을 상이한 명령 큐들로 분류하도록 동작한다.
일부 예들에서, 메모리 제어 로직은 미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐를 포함한다. 메모리 제어 로직은 또한 메모리 액세스 요청들을 저장하기 위한 제4 명령 서브 큐 및 미리 결정된 기준에 따라 제4 명령 서브 큐로부터 메모리 액세스 명령를 선택하기 위해 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 포함한다. 메모리 제어 로직은 또한 상기 제3 명령 서브 큐 또는 상기 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 대응하는 서브 채널로 전송하도록 동작하는 상기 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기를 포함한다.
특정 구현예에서, 데이터 처리 시스템은 메모리 액세스 요청을 제공하기 위한 복수의 메모리 액세스 에이전트를 포함한다. 데이터 처리 시스템은 또한 복수의 메모리 채널을 포함한다. 데이터 처리 시스템은 또한 복수의 메모리 액세스에이전트들에 결합되고 복수의 메모리 채널들에 결합되는 메모리 채널 컨트롤러를 갖고, 메모리 채널 컨트롤러는 메모리 액세스 요청들을 저장하기 위한 제1 명령 서브 큐 및 제1 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 제1 명령 서브 큐에 결합된 대응하는 제1 아비터를 포함한다. 메모리 채널 컨트롤러는 또한 메모리 액세스 요청들을 저장하기 위한 제2 명령 서브 큐 및 상기 제2 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 상기 제2 명령 서브 큐에 동작 가능하게 결합된 대응하는 제2 아비터를 포함한다. 일부 구현예들에서, 아비터는 미리 결정된 기준들에 기초하여 메모리 액세스 명령들을 선택한다. 메모리 채널 컨트롤러는 또한 제1 명령 서브 큐 및 제2 명령 서브 큐에 동작 가능하게 결합된 명령 큐 엔트리 로직을 포함하고, 메모리 액세스 요청들을 제1 명령 서브 큐 및 제2 명령 서브 큐 내에 배치하도록 동작한다. 메모리 채널 컨트롤러는 또한 제1 명령 서브 큐 또는 제2 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 복수의 서브 채널들 중 적어도 하나에 전송하는 제1 및 제2 아비터들 둘 모두에 결합된 제1 선택기를 포함한다.
일부 예들에서, 명령 큐 엔트리 로직은 제1 명령 서브 큐가 판독 요청들만을 포함하고 제2 명령 서브 큐가 기입 요청들만을 포함하도록 상이한 명령 서브 큐들로 메모리 액세스 요청들을 분류한다. 일부 구현예들에서, 명령 큐 엔트리 로직은 엔트리들을 제1 명령 서브 큐로부터 제2 명령 서브 큐로 이송한다.
특정 예들에서, 데이터 처리 시스템은 제1 아비터와 제2 아비터 사이에서 공유되는 공유 타이밍 로직 및 공유 페이지 테이블을 포함한다.
일부 예들에서, 데이터 처리 시스템은 미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐를 포함한다. 데이터 처리 시스템은 또한 메모리 액세스 요청들을 저장하기 위한 제4 명령 서브 큐 및 미리 결정된 기준에 따라 제4 명령 서브 큐로부터 메모리 액세스 명령를 선택하기 위해 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 포함한다. 데이터 처리 시스템은 또한 제3 명령 서브 큐 또는 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하도록 동작하는 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기를 포함한다. 데이터 처리 시스템은 또한 제1 및 제2 선택기에 동작 가능하게 결합되고 제1 선택기 또는 제2 선택기 중 어느 하나로부터 메모리 요청을 선택하고 선택된 메모리 액세스 요청들을 복수의 서브 채널들 중 적어도 하나에 전송하도록 동작하도록 동작하는 제3 선택기를 포함한다.
특정 예들에서, 메모리 컨트롤러는 제1 명령 서브 큐 및 제2 명령 서브 큐에 동작 가능하게 결합된 명령 큐 엔트리 로직을 포함하고, 제1 명령 서브 큐 및 제2 명령 큐가 판독 요청들만을 포함하고 제3 명령 서브 큐 및 제4 명령 큐가 기입 요청들만을 포함하도록 메모리 액세스 요청들을 상이한 명령 큐들로 분류한다.
일부 예들에서, 데이터 처리 시스템은 미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐를 포함한다. 데이터 처리 시스템은 또한 메모리 액세스 요청들을 저장하기 위한 제4 명령 서브 큐 및 미리 결정된 기준에 따라 제4 명령 서브 큐로부터 메모리 액세스 명령를 선택하기 위해 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 포함한다. 데이터 처리 시스템은 또한 제3 명령 서브 큐 또는 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 대응하는 서브 채널로 전송하도록 동작하는 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기를 포함한다.
도 1은 일부 실시예들에 따른 데이터 처리 시스템(100)을 도시하는 비제한적인 예시적인 블록도를 도시한다. 데이터 처리 시스템(100)은 일반적으로 가속 처리 유닛 (APU), 메모리 시스템(120), 주변 컴포넌트 상호연결 표현(PCIe) 시스템(150), 범용 직렬 버스 (USB) 시스템(160), 및 디스크 드라이브(170)의 형태의 데이터 프로세서(110)를 포함한다. 데이터 프로세서(110)는 데이터 처리 시스템(100)의 중앙 처리 유닛(CPU)으로서 동작하고, 현대의 컴퓨터 시스템들에서 유용한 다양한 버스들 및 인터페이스들을 제공한다. 이러한 인터페이스들은 2개의 더블 데이터 레이트(DDRx) 메모리 채널들, PCIe 링크에 대한 접속을 위한 PCIe 루트 컴플렉스, USB 네트워크에 대한 접속을 위한 USB 컨트롤러, 및 SATA(Serial Advanced Technology Attachment) 대용량 저장 디바이스에 대한 인터페이스를 포함한다.
메모리 시스템(120)은 메모리 채널(130) 및 메모리 채널(140)을 포함한다. 메모리 채널(130)은 이 예에서 별개의 랭크들에 대응하는 대표적인 이중 인라인 메모리 모듈들(DIMM들)(134, 136, 및 138)을 포함하여, DDRx 버스(132)에 접속된 DIMM들의 세트를 포함한다. 마찬가지로, 메모리 채널(140)은 대표적인 DIMM들(144, 146, 및 148)을 포함하여, DDRx 버스(142)에 접속된 DIMM들의 세트를 포함한다. 예를 들어, DDR5 듀얼 인-라인 메모리 모듈(DIMM)은 "서브 채널"로 지칭되는 2개의 독립적인 32-비트 채널을 갖는다. DRAM 컨트롤러 아키텍처 사용 시점으로부터, 단일 컨트롤러는 2개의 별개의 32-비트 채널들을 독립적으로 작동하며 이 경우에 컨트롤러로부터, 2개의 채널들이 또한 서브 채널로도 지칭된다.
PCIe 시스템(150)은 데이터 프로세서(110)에서 PCIe 루트 복합체에 연결된 PCIe 스위치(152), PCIe 디바이스(154), PCIe 디바이스(156), 및 PCIe 디바이스(158)를 포함한다. 결국, PCIe 디바이스(156)는 시스템 기본 입력/출력 시스템(BIOS) 메모리(157)에 연결된다. 시스템 BIOS 메모리(157)는 판독 전용 메모리(ROM), 플래시 전기적 소거가능 프로그래밍 가능 ROM(EEPROM) 등과 같은 다양한 비휘발성 메모리 유형들 중 임의의 것일 수 있다.
USB 시스템(160)은 데이터 프로세서(110)의 USB 마스터에 연결된 USB 허브(162), 각각 USB 허브(162)에 연결된 대표적인 USB 디바이스(164, 166, 168)를 포함한다. USB 디바이스(164, 166, 168)는 키보드, 마우스, 플래시 EEPROM 포트 등과 같은 디바이스일 수 있다.
디스크 드라이브(170)는 SATA 버스를 통해 데이터 프로세서(110)에 연결되고, 운영 체제, 애플리케이션 프로그램들, 애플리케이션 파일들 등을 위한 질량 저장을 제공한다.
데이터 처리 시스템(100)은 메모리 채널(130) 및 메모리 채널(140)에 제공함으로써 현대의 컴퓨팅 애플리케이션에서 사용하기에 적합하다. 메모리 채널들(130 및 140) 각각은 DDR 버전 4(DDR4), 저전력 DDR4(LPDDR4), 그래픽 DDR 버전 5(gDDR5), 및 고대역폭 메모리(HBM)와 같은 최신 DDR 메모리들에 접속할 수 있고, 미래의 메모리 기술들에 대해 적응될 수 있다. 이러한 메모리들은 고 버스 대역폭 및 고속 동작을 제공한다. 동시에, 그들은 또한 랩톱 컴퓨터들과 같은 배터리-급전식 애플리케이션들에 대한 전력을 절감하기 위해 저전력 모드들을 제공하고, 또한 내장 열 모니터링을 제공한다.
도 2는 도 1의 데이터 처리 시스템(100)에 사용하기에 적합한 APU(200)를 블록도 형태로 도시한다. APU(200)는 일반적으로 중앙 처리 유닛(CPU) 코어 복합체(210), 그래픽 코어(220), 디스플레이 엔진 세트(230), 메모리 관리 허브(240), 데이터 직물(250), 주변 컨트롤러 세트(260), 주변 버스 컨트롤러 세트(270), 시스템 관리 유닛(SMU)(280), 및 메모리 컨트롤러 세트(290)(메모리 컨트롤러(292) 및 메모리 컨트롤러(294))를 포함한다.
CPU 코어 컴플렉스(210)는 CPU 코어(212) 및 CPU 코어(214)를 포함한다. 이 예에서, CPU 코어 컴플렉스(210)는 2개의 CPU 코어를 포함하지만, 다른 실시예들에서 CPU 코어 컴플렉스는 임의의 수의 CPU 코어들을 포함할 수 있다. CPU 코어들(212 및 214) 각각은 제어 패브릭을 형성하는 시스템 관리 네트워크(SMN)에 그리고 데이터 패브릭(250)에 양방향으로 접속되고, 데이터 패브릭(250)에 메모리 액세스 요청들을 제공할 수 있다. CPU 코어들(212 및 214) 각각은 단일 코어들일 수 있거나, 추가로 캐시들과 같은 소정 자원들을 공유하는 2개 이상의 단일 코어를 갖는 코어 컴플렉스일 수 있다.
그래픽 코어(220)는 고집적 및 병렬 방식으로 정점 처리, 프래그먼트 처리, 셰이딩, 텍스처 블렌딩 등과 같은 그래픽 동작들을 수행할 수 있는 고성능 그래픽 처리 유닛(GPU)이다. 그래픽 코어(220)는 SMN에 그리고 데이터 패브릭(250)에 양방향으로 접속되고, 데이터 패브릭(250)에 메모리 액세스 요청들을 제공할 수 있다. 이와 관련하여, APU(200)는 CPU 코어 컴플렉스(210)와 그래픽 코어(220)가 동일한 메모리 공간을 공유하는 통합 메모리 아키텍처, 또는 CPU 코어 컴플렉스(210)와 그래픽 코어(220)가 메모리 공간의 일부를 공유하는 반면, 그래픽 코어(220)가 또한 CPU 코어 컴플렉스(210)에 의해 액세스 가능하지 않은 프라이빗 그래픽 메모리를 사용하는 메모리 아키텍처를 지원할 수 있다.
디스플레이 엔진들(230)은 모니터 상에의 디스플레이를 위해 그래픽 코어(220)에 의해 생성된 객체들을 렌더링하고 래스터화한다. 그래픽 코어(220) 및 디스플레이 엔진들(230)은 메모리 시스템(120) 내의 적절한 어드레스들로의 균일한 변환을 위해 공통 메모리 관리 허브(240)에 양방향으로 접속되고, 메모리 관리 허브(240)는 그러한 메모리 액세스들을 생성하고 메모리 시스템으로부터 반환된 판독 데이터를 수신하기 위해 데이터 패브릭(250)에 양방향으로 접속된다.
데이터 패브릭(250)은 임의의 메모리 액세싱 에이전트와 메모리 컨트롤러(290)(메모리 컨트롤러(292) 및 메모리 컨트롤러(294)) 사이에서 메모리 액세스 요청들 및 메모리 응답들을 라우팅하기 위한 크로스바 스위치를 포함한다. 그것은 또한 시스템 구성에 기초하여 메모리 액세스들의 목적지들을 결정하기 위한, BIOS에 의해 정의된, 시스템 메모리 맵뿐만 아니라, 각각의 가상 접속을 위한 버퍼들을 포함한다.
주변 컨트롤러(260)는 USB 컨트롤러(262) 및 SATA 인터페이스 컨트롤러(264)를 포함하며, 이들 각각은 시스템 허브(266) 그리고 SMN 버스에 양방향으로 연결된다. 이들 두 컨트롤러는 APU(200)에 사용될 수 있는 단지 예시적인 주변 컨트롤러이다.
주변 버스 컨트롤러(270)는 시스템 컨트롤러 또는 "Southbridge"(SB)(272) 및 PCIe 컨트롤러(274)를 포함하며, 이들 각각은 입력/출력(I/O) 허브(276) 및 SMN 버스에 양방향으로 연결된다. I/O 허브(276)는 또한 시스템 허브(266) 및 데이터 직물(250)에 양방향으로 연결된다. 이에 따라 예를 들어 CPU 코어는 데이터 패브릭(250)이 I/O 허브(276)를 통해 라우팅하는 액세스들을 통해 USB 컨트롤러(262), SATA 인터페이스 컨트롤러(264), SB(272), 또는 PCIe 컨트롤러(274) 내의 레지스터들을 프로그래밍할 수 있다.
SMU(280)는 APU(200) 상의 자원들의 동작을 제어하고 그들 간의 통신을 동기화하는 로컬 컨트롤러이다. SMU(280)는 APU(200) 상의 다양한 프로세서들의 파워-업 시퀀싱을 관리하고, 리셋, 인에이블 및 다른 신호들을 통해 다수의 오프-칩 디바이스들을 제어한다. SMU(280)는 APU(200)의 컴포넌트들 각각에 대한 클록 신호들을 제공하기 위해, 위상 동기 루프(PLL)와 같은, 하나 이상의 클록 소스들(도2에 도시되지 않음)을 포함한다. SMU(280)는 또한 다양한 프로세서들 및 다른 기능 블록들에 대한 전력을 관리하며, 적절한 전력 상태들을 결정하기 위해 CPU 코어들(212 및 214) 및 그래픽 코어(220)로부터 측정된 전력 소비 값들을 수신할 수 있다.
APU(200)는 또한 다양한 시스템 모니터링 및 절전 기능들을 구현한다. 특히, 하나의 시스템 모니터링 기능은 열 모니터링이다. 예를 들어, APU(200)가 뜨거워지면, SMU(280)는 CPU 코어들(212 및 214) 및/또는 그래픽 코어(220)의 주파수 및 전압을 감소시킬 수 있다. APU(200)가 너무 뜨거워지면, 그것은 완전히 셧다운될 수 있다. 열 이벤트들이 또한 SMN 버스를 통해 SMU(280)에 의해 외부 센서들로부터 수신될 수 있고, SMU(280)는 그에 응답하여 클록 주파수 및/또는 전원 전압을 감소시킬 수 있다.
도 3은 일부 실시예들에 따른 도 2의 APU(200)에 사용하기에 적합한 메모리 컨트롤러(300) 및 연관된 물리적 인터페이스(PHY)(330)를 블록도의 형태로 도시한다. 메모리 컨트롤러(300)는 메모리 채널 컨트롤러(310) 및 전력 컨트롤러(320)를 포함한다. 메모리 채널(310)은 호스트 인터페이스(312), 메모리 채널 컨트롤러(314), 및 물리적 인터페이스(316)를 포함한다. 호스트 인터페이스(312)는 확장 가능 데이터 포트(SDP)를 통해 메모리 채널 컨트롤러(314)를 데이터 패브릭(250)에 양방향으로 접속한다. 물리적 인터페이스(316)는 메모리 채널 컨트롤러(314)를 DDR-PHY 인터페이스 사양(DFI)을 준수하는 버스를 통해 PHY(330)에 양방향으로 연결한다. 전력 엔진(320)은 SMN 버스를 통해 SMU(280)에, APB(Advanced Peripheral Bus)를 통해 PHY(330)에 양방향으로 연결되며, 메모리 채널 컨트롤러(314)에도 양방향으로 연결된다. PHY(330)는 도 1의 메모리 채널(130) 또는 메모리 채널(140)과 같은 메모리 채널에 양방향 연결을 갖는다. 메모리 컨트롤러(300)는 단일 메모리 채널 컨트롤러(314)를 사용하는 단일 메모리 채널에 대한 메모리 컨트롤러의 인스턴스화이고, 이하에서 더 설명될 방식으로 메모리 채널 컨트롤러(314)의 동작을 제어하기 위한 전력 엔진(320)을 갖는다.
도 4는 일부 실시예들에 따른 도 2의 APU(200)에 사용하기에 적합한 다른 메모리 컨트롤러(400) 및 연관된 PHY들(440, 450)을 블록도의 형태로 도시한다. 메모리 컨트롤러(400)는 메모리 채널들(410 및 420) 및 전력 엔진(430)을 포함한다. 메모리 채널(410)은 호스트 인터페이스(412), 메모리 채널 컨트롤러(414), 및 물리적 인터페이스(416)를 포함한다. 호스트 인터페이스(412)는 SDP를 통해 메모리 채널 컨트롤러(414)를 데이터 패브릭(250)에 양방향으로 접속한다. 물리적 인터페이스(416)는 메모리 채널 컨트롤러(414)를 PHY(440)에 양방향으로 접속하고, DFI 사양을 따른다. 메모리 채널(420)은 호스트 인터페이스(422), 메모리 채널 컨트롤러(424), 및 물리적 인터페이스(426)를 포함한다. 호스트 인터페이스(422)는 다른 SDP를 통해 메모리 채널 컨트롤러(424)를 데이터 패브릭(250)에 양방향으로 접속한다. 물리적 인터페이스(426)는 메모리 채널 컨트롤러(424)를 PHY(450)에 양방향으로 접속하고, DFI 사양을 따른다. 전력 엔진(430)은 SMN 버스를 통해 SMU(280)에, APB를 통해 PHY들(440 및 450)에 양방향으로 접속되고, 또한 메모리 채널 컨트롤러들(414 및 424)에 양방향으로 접속된다. PHY(440)는 도 1의 메모리 채널(130)과 같은 메모리 채널에 양방향 연결을 갖는다. PHY(450)는 도 1의 메모리 채널(140)과 같은 메모리 채널에 양방향 연결을 갖는다. 메모리 컨트롤러(140)는 2개의 메모리 채널 컨트롤러를 갖는 메모리 컨트롤러의 인스턴스화이고, 아래에서 추가로 설명될 방식으로 메모리 채널 컨트롤러(414) 및 메모리 채널 컨트롤러(424) 둘 모두의 동작을 제어하기 위해 전력 엔진(430)을 사용한다.
도 5는 일부 실시예들에 따른 메모리 컨트롤러(500)의 블록도의 비제한적인 예를 도시한다. 메모리 컨트롤러(500)는 일반적으로 메모리 채널 컨트롤러(510) 및 전력 컨트롤러(550)를 포함한다. 메모리 채널 컨트롤러(510)는 일반적으로 인터페이스(512), 큐(514), 제1 명령 서브 큐(520), 어드레스 생성기(522), 각각의 명령 서브 큐/아비터 쌍에 대한 콘텐츠 주소 지정 가능 메모리(CAM)(524 및 529), 리플레이 큐(530), 리프레시 로직 블록(532), 타이밍 블록(534), 페이지 테이블(536), 대응 아비터(538), 오류 정정 코드(ECC) 체크 블록(542), ECC 생성 블록(544), 및 데이터 버퍼(DB)(546)를 포함한다. 일부 구현예들에서, 메모리 컨트롤러(500)는 아래에서 더 설명되는 바와 같은 제2 명령 서브 큐(521), 대응하는 아비터(539), 및 선택기(541)를 더 포함한다. 각각의 명령 서브 큐(525 및 527)는 대응하는 중재자를 포함하고, 본원에서 서브 큐/아비터 쌍, 또는 명령 서브 큐/아비터 그룹 또는 명령 서브 큐/아비터 모듈로도 지칭된다. 일부 구현예들에서 명령 서브 큐/아비터 모듈들(525 및 527)은 주어진 아키텍처에 대한 필요성으로서 깊이 확장을 허용하도록 복제되고, 선택기(541)를 통한 제2 중재 레벨은 확장된 수의 모듈들로부터 추가 출력들을 처리하도록 구성된다. 특정 구현예들에서, 명령 큐 엔트리 로직(523)은 메모리 액세스 요청들을 상이한 명령 서브 큐들로 배치(예를 들어, 서브 큐들 사이의 분류 및/또는 전송)한다. 일부 예들에서, 이는 하나의 명령 서브 큐 내에 판독 요청들만을 저장하는 단계 및 다른 명령 서브 큐 내에 기입 요청들만을 저장하는 단계를 포함한다. 다른 구현예들에서, 명령 큐 엔트리 로직(523)은 판독 및 기입 요청들 둘 모두를 동일한 명령 서브 큐 모두에 조합한다. 특정 구현예들에서, 명령 큐 엔트리 로직(523)은 하나의 명령 서브 큐로부터 다른 명령으로 엔트리들을 이동시킨다.
일부 구현예들에서, 각각의 명령 서브 큐(520 및 521)는 32개의 엔트리들을 저장하여, 두 명령 서브 큐들로부터의 엔트리들의 조합된 수가 64개의 엔트리들이다. 그러나, 임의의 적합한 수의 명령 서브 큐 및 명령 서브 큐 엔트리 크기가 이용될 수 있다. 일부 구현예들에서, 다양한 블록들에서의 기능들은 원하는 대로 다른 블록들과 조합될 수 있다. 일부 구현예들에서, 명령 큐 엔트리 로직(523)은 어드레스 생성기의 일부로서, 또는 다른 블록들과 조합된다. 일 예에서, 명령 큐 엔트리 로직은 하나 이상의 상태 기계로서 구현된다. 그러나, 임의의 적합한 로직이 사용될 수 있다. 일부 구현예들에서, 명령 큐 엔트리 로직(523)은 주문 메모리 액세스 요청들이 사용되도록 서브 큐 제어를 제공하고 하나의 서브 큐가 다른 서브 큐에 엔트리들을 푸시할 수 있게 한다. 예를 들어, 명령 큐 엔트리 로직(523)은 하나의 서브 큐로부터 다른 서브 큐로의 피드백 구조를 포함하고, 이는 엔트리가 전달될 수 있음을 나타내고, 구조는 엔트리를 다른 명령 서브 큐 내에 배치한다는 것을 나타낸다.
인터페이스(512)는 외부 버스를 통한 데이터 패브릭(250)에 대한 제1 양방향 접속을 갖고, 출력을 갖는다. 메모리 컨트롤러(500)에서, 이러한 외부 버스는 "AXI4"로 알려진, 영국 캠브리지 소재의 에이알엠 홀딩스, 피엘씨(ARM Holdings, PLC)에 의해 지정된 진보된 확장 가능 인터페이스 버전 4와 호환되지만, 다른 실시예들에서 다른 유형들의 인터페이스들일 수 있다. 인터페이스(512)는 FCLK(또는 MEMCLK) 도메인으로 알려진 제1 클록 도메인으로부터 UCLK 도메인으로 알려진 메모리 컨트롤러(500)의 내부에 있는 제2 클록 도메인으로 메모리 액세스 요청들을 옮긴다. 유사하게, 큐(514)는 UCLK 도메인으로부터 DFI 인터페이스와 연관된 DFICLK 도메인으로 메모리 액세스들을 제공한다.
어드레스 생성기(522)는 AXI4 버스를 통해 데이터 직물(250)로부터 수신된 메모리 액세스 요청들의 어드레스들을 디코딩한다. 메모리 액세스 요청들은 정규화된 포맷으로 표현되는 물리적 어드레스 공간에서의 액세스 어드레스들을 포함한다. 어드레스 생성기(522)는 정규화된 어드레스들을, 메모리 시스템(120) 내의 실제 메모리 디바이스들을 어드레싱하는 데뿐만 아니라, 관련 액세스들을 효율적으로 스케줄링하는 데 사용될 수 있는 포맷으로 변환한다. 이러한 포맷은 메모리 액세스 요청을 특정 랭크, 로우 어드레스(row address), 컬럼 어드레스(column address), 뱅크 어드레스, 및 뱅크 그룹과 연관시키는 영역 식별자를 포함한다. 시동 시에, 시스템 BIOS는 메모리 시스템(120) 내의 메모리 디바이스들에 질의하여 그들의 크기 및 구성을 결정하고, 어드레스 생성기(522)와 연관된 구성 레지스터들의 세트를 프로그래밍한다. 어드레스 생성기(522)는 구성 레지스터들에 저장된 구성을 사용하여 정규화된 어드레스들을 적절한 포맷으로 변환한다. 명령 서브 큐(520) 및 명령 서브 큐(521)는, 명령 큐 엔트리 로직(523)에 의해 제공되는 바와 같이, CPU 코어들(212 및 214) 및 그래픽 코어(220)와 같은 데이터 처리 시스템(100)에서 메모리 액세스 제품들로부터 수신된 메모리 액세스 요청들의 각각의 큐이다. 명령 서브 큐(520)는 어드레스 생성기(522)에 의해 디코딩된 어드레스 필드들뿐만 아니라, 액세스 유형 및 서비스 품질(QoS) 식별자들을 포함하여, 아비터(538)가 메모리 액세스들을 효율적으로 선택할 수 있게 하는 다른 어드레스 정보를 저장한다. 이와 같이, 명령 서브 큐(521)는 어드레스 생성기(522)에 의해 디코딩된 어드레스 필드들뿐만 아니라, 액세스 유형 및 서비스 품질(QoS) 식별자들을 포함하여, 대응하는 아비터(539)가 메모리 액세스들을 효율적으로 선택할 수 있게 하는 다른 어드레스 정보를 저장한다. CAM(524) 및 CAM(529)은 기입 후 기입(WAW) 및 기입 후 판독(RAW) 순서화 규칙들과 같은 순서화 규칙들을 시행하기 위한 정보를 포함한다.
재생 큐(530)는 어드레스 및 명령 패리티 응답과 같은 응답을 기다리는 아비터(538) 및 아비터(539)에 의해 픽업된 메모리에 액세스하는 임시 큐이며, DDR4 DRAM에 대한 순환 중복 검사(CRC) 응답을 기입하고 GDDR5 DRAM에 대한 RCC 응답을 판독한다. 일부 구현예에서, 각각의 명령 큐/아비터 쌍에 대해, 재생 큐(530)는, 반환된 ECC가 정확하는지 또는 오류를 나타내는지 여부를 결정하기 위해 ECC 체크 블록(542)에 액세스한다. 재생 큐(530)는 이러한 사이클들 중 하나의 패리티 또는 CRC 오류의 경우에 액세스들이 재생될 수 있게 한다. 다른 구현예들에서, 재생 메커니즘들은 각각의 명령 서브 큐/아비터 쌍에 대해 인스턴스화된다.
리프레시 로직(532)은 메모리 액세싱 에이전트들로부터 수신된 정상 판독 및 기입 메모리 액세스 요청들과는 별도로 생성되는 다양한 파워다운, 리프레시, 및 종료 저항(ZQ) 교정 사이클들을 위한 상태 머신들을 포함한다. 예를 들어, 메모리 랭크가 프리차지 파워다운에 있는 경우, 그것은 리프레시 사이클들을 실행하기 위해 주기적으로 깨어나야 한다. 리프레시 로직(532)은 DRAM 칩들 내의 메모리 셀들의 저장 커패시터들로부터의 전하 누설에 의해 야기되는 데이터 에러들을 방지하기 위해 주기적으로 리프레시 명령들을 생성한다. 게다가, 리프레시 로직(532)은 시스템에서의 열 변화들로 인한 온-다이 종료 저항에 있어서의 미스매치를 방지하기 위해 ZQ를 주기적으로 교정한다. 리프레시 로직(532)은 또한 DRAM 디바이스들을 상이한 전력 다운 모드들에 놓는다고 결정한다.
아비터(538)는 명령 서브 큐(520)에 양방향으로 연결되고, 아비터(539)는 명령 서브 큐(521)에 양방향으로 연결된다. 각각의 아비터는, 메모리 버스의 사용을 개선하기 위해, 이전 시스템들에 비해 더 작은 명령 큐로부터 액세스들의 지능적 스케줄링을 지능적으로 스케줄링하는 효율을 향상시키고, 각각의 아비터(538) 및 아비터(539)는 명령 서브 큐(520) 및/또는 명령 서브 큐(521)에서의 특정 액세스들이 DRAM 타이밍 파라미터들에 기초한 발행에 적격인지 여부를 결정함으로써 타이밍 블록(534)을 이용한다. 예를 들어, 각각의 DRAM은, "tRC"로 알려진, 동일 뱅크에 대한 활성화 명령들 사이의 최소 지정된 시간을 갖는다. 타이밍 블록(534)은 이것 및 JEDEC 사양에서 지정된 다른 타이밍 파라미터들에 기초하여 적격성을 결정하는 카운터들의 세트를 유지하고, 리플레이 큐(530)에 양방향으로 접속된다. 예를 들어, 각각의 DRAM은, "tRCD"로 알려진, 활성화 명령(또는 로우 명령) 및 컬럼 명령 사이의 최소 지정된 시간을 갖는다. 아비터(538) 및 아비터(539)는 각각의 CMD의 적격성을 결정하기 위해 타이밍 블록(534)에서 카운터를 사용한다. 페이지 테이블(536)은 아비터(538) 및 아비터(539)에 대한 메모리 채널의 각각의 뱅크 및 랭크에서의 활성 페이지들에 관한 상태 정보를 유지하고, 리플레이 큐(530)에 양방향으로 접속된다.
인터페이스(512)로부터 수신된 기입 메모리 액세스 요청들에 응답하여, ECC 생성 블록(544)은 기입 데이터에 따라 ECC를 계산한다. DB(546)는 수신된 메모리 액세스 요청들에 대한 기입 데이터 및 ECC를 저장한다. 이는 아래에서 더 설명되는 바와 같이, 각각의 아비터(538) 또는 아비터(539)에 의해 선택된 명령에 기초하여, 선택기(541)가 명령 서브 큐(520) 또는 명령 서브 큐(521) 중 어느 하나로부터 대응하는 기입 액세스를 픽업할 때, 결합된 기입 데이터/ECC를 큐(514)를 출력한다.
전력 컨트롤러(550)는 일반적으로 진보된 확장 가능 인터페이스 버전 1(AXI)에 대한 인터페이스(552), APB 인터페이스(554), 및 전력 엔진(560)을 포함한다. 인터페이스(552)는 도 5에 별도로 도시된 "EVENT_n"으로 라벨링된 이벤트 신호를 수신하기 위한 입력, 및 출력을 포함하는, SMN에 대한 제1 양방향 접속을 갖는다. APB 인터페이스(554)는 인터페이스(552)의 출력에 접속된 입력, 및 APB를 통한 PHY에 대한 접속을 위한 출력을 갖는다. 전력 엔진(560)은 인터페이스(552)의 출력에 접속된 입력, 및 큐(514)의 입력에 접속된 출력을 갖는다. 전력 엔진(560)은 구성 레지스터들(562)의 세트, 마이크로컨트롤러(μC)(564), 셀프 리프레시 컨트롤러(SLFREF/PE)(566), 및 신뢰성 있는 판독/기입 트레이닝 엔진(RRW/TE)(568)(일부 구현에서는 마이크로 컨트롤러로 구현됨)을 포함한다. 구성 레지스터들(562)은 AXI 버스를 통해 프로그래밍되고, 메모리 컨트롤러(500) 내의 다양한 블록들의 동작을 제어하기 위한 구성 정보를 저장한다. 따라서, 구성 레지스터들(562)은 도 5에 상세히 도시되지 않은 이러한 블록들에 접속된 출력들을 갖는다. 셀프 리프레시 컨트롤러(566)는 리프레시 로직(532)에 의한 리프레시들의 자동 생성에 더하여 리프레시들의 수동 생성을 가능하게 하는 엔진이다. 신뢰성 있는 판독/기입 트레이닝 엔진(568)은 DDR 인터페이스 판독 레이턴시 트레이닝 및 루프백 테스팅과 같은 목적들을 위해 메모리 또는 I/O 디바이스들에 연속적인 메모리 액세스 스트림을 제공한다.
메모리 채널 컨트롤러(510)는 그것이 연관된 메모리 채널로의 디스패치를 위한 메모리 액세스들을 선택할 수 있게 하는 회로부를 포함한다. 원하는 중재 결정들을 행하기 위해, 어드레스 생성기(522)는 어드레스 정보를, 메모리 시스템 내의 랭크, 로우 어드레스, 컬럼 어드레스, 뱅크 어드레스, 및 뱅크 그룹을 포함하는 프리디코딩된 정보로 디코딩하고, 명령 서브 큐(520) 및 명령 서브 큐(521)는 프리디코딩된 정보를 저장한다. 구성 레지스터들(562)은 어드레스 생성기(522)가 수신된 어드레스 정보를 어떻게 디코딩하는지를 결정하기 위한 구성 정보를 저장한다. 명령 서브 큐(520)에서의 엔트리들의 경우, QoS 요건들과 같은 다른 기준들을 관찰하면서, 디코딩된 어드레스 정보, 타이밍 블록(534)에 의해 표시된 타이밍 적격성 정보, 및 페이지 테이블(536)에 의해 표시된 활성 페이지 정보를 사용하여, QoS 요건들과 같은 다른 기준들을 관찰하는 동안, "위닝"메모리 액세스를 효율적으로 제공한다. 예를 들어, 아비터(538)는 메모리 페이지들을 변경하기 위해 요구되는 프리차지 및 활성화 명령들의 오버헤드를 회피하기 위해 개방된 페이지들에 대한 액세스들에 대한 선호를 구현하고, 하나의 뱅크에 대한 오버헤드 액세스들을, 다른 뱅크에 대한 판독 및 기입 액세스들과 그들을 인터리빙하는 것에 의해 숨긴다. 특히 정상 동작 동안, 아비터(538)는 보통, 페이지들이 상이한 페이지를 선택하기 전에 프리차지되도록 요구될 때까지, 페이지들을 상이한 뱅크들에서 개방된 채로 유지하도록 결정할 수 있다. 아비터(539)는 아비터(538)과 동일한 방식으로 동작하고, 선택기(541)에 대한 "위닝" 메모리 액세스를 제공한다. 선택기(541)는 제1 명령 서브 큐(520) 및 명령 서브 큐(521)로부터의 메모리 액세스 요청으로부터 제공된 메모리 액세스 요청 중에서 바람직한 메모리 액세스 요청(543)을 선택한다. 선택기(541)는 서브 채널에 따라 복수의 메모리 채널들 중 하나에 선택된 바람직한 선택된 메모리 액세스 요청을 디스패치한다. 일례에서, 선택기(541)는 멀티플렉서 회로를 포함한다. 그러나, 임의의 적합한 로직이 사용될 수 있다.
어드레스 생성기(522)는 디코딩된 서브 채널 번호를 포함하는 디코딩된 메모리 액세스 요청을 명령 서브 큐(520) 및 서브 명령 큐(521)를 전송한다. 명령 서브 큐(520)는, 디코딩된 서브 채널 번호를 저장하기 위한 제1 필드, 및 전술한 바와 같이 디코딩된 메모리 액세스 요청의 나머지를 저장하기 위한 제2 필드를 갖는, 명령 서브 큐(520)의 엔트리에 디코딩된 메모리 액세스 요청을 저장한다. 유사하게, 명령 서브 큐(521)는, 디코딩된 서브 채널 번호를 저장하기 위한 제1 필드, 및 디코딩된 메모리 액세스 요청의 나머지를 저장하기 위한 제2 필드를 갖는, 명령 서브 큐(521)의 엔트리에 디코딩된 메모리 액세스 요청을 저장한다.
아비터(538)는 명령 서브 큐(520)에 양방향으로 연결되고 타이밍 블록(534)을 사용하여 명령 서브 큐(520)의 특정 액세스가 DRAM 타이밍 파라미터에 기초한 발행에 적격인지 여부를 결정함으로써 적절한 타이밍 관계를 시행한다. 아비터(538)는 그것이 사용하는 미리 결정된 기준에 따라 명령 서브 큐(520)로부터 적격의 메모리 액세스 요청을 픽업한다. 유사하게, 아비터(539)는 명령 서브 큐(521)에 양방향으로 연결되고 타이밍 블록(534)을 사용하여 명령 서브 큐(521)의 특정 액세스가 DRAM 타이밍 파라미터에 기초한 발행에 적격인지 여부를 결정함으로써 적절한 타이밍 관계를 시행한다. 아비터(538)는 그것이 사용하는 미리 결정된 기준에 따라 명령 서브 큐(521)로부터 적격의 메모리 액세스 요청을 픽업한다. 이러한 미리 결정된 기준의 예는 위에서 설명되어 있으며 실시예들 사이에서 다양할 수 있다.
도 6 내지 9는 명령 서브 큐 및 대응하는 아비터 구성들의 다양한 비제한적인 예들을 도시한다. 그러나, 이들은 일부 예들이고 다른 구성들이 고려된다는 것이 인식될 것이다. 항상 도시되지는 않았지만, 본원에 설명된 바와 같은 아비터들(도 5의 것들을 포함함)은 JEDEC 사양을 준수하기 위해 필요한 것과 같은 우선순위 정보, PGT 정보, 타이밍 정보 및 다른 정보를 획득하거나, 또는 임의의 다른 적합한 기준들을 획득한다.
도 6은 메모리 채널 컨트롤러를 갖는 메모리 컨트롤러의 예를 예시하며, 여기서 메모리 채널 컨트롤러는 명령 서브 큐 및 대응하는 아비터의 그룹들을 포함한다. 명령 서브 큐/아비터 모듈들(525 및 527)로서 도시된 명령 서브 큐 및 대응하는 아비터의 그룹들. 대응하는 중재는 전술한 기준과 같은 미리 결정된 기준에 따라 각각의 명령 서브 큐로부터 메모리 액세스 명령를 선택한다. 명령 큐 엔트리 로직(523)은 명령 서브 큐와 통신하고 메모리 액세스 요청들을 명령 서브 큐(520) 및 명령 서브 큐(527)로 배치한다. 일 예에서, 명령 큐 엔트리 로직(523)은 하나 이상의 상태 기계로서 구현된다. 일부 예들에서, 명령 큐 엔트리 로직은 CPU 또는 GPU에 의해 프로그래밍되는 프로그래밍 가능한 제어 레지스터를 포함하고, 명령 큐 엔트리 로직(523)을 설정하여 특정 방식으로 명령 서브 큐 중에서 판독 및 기입 요청과 같은 메모리 액세스 요청을 분류한다. 일 예에서, 명령 큐 엔트리 로직(523)은 상이한 명령 서브 큐 내의 하나의 명령 서브 큐 및 기입 요청들에 판독 요청들을 분류한다. 다른 구현예들에서, 판독 및 기입들은 명령 서브 큐 내에서 혼합된다. 일부 구현예들에서, 엔트리들은 명령 서브 큐 사이에서 전달된다. 일부 구현예에서, 프로그래밍 가능한 제어 레지스터는 또한 아래에서 추가로 언급되는 바와 같이 다양한 수준의 중재에 대한 임계값을 설정하는 데 사용된다.
일 예시의 각각의 아비터(538, 539)는, 선택기(541)에 제공되는 위닝 메모리 액세스 요청(606 및 608)을 선택하기 위해, JEDEC 사양 기준에 기초하여 중재하고 페이지 테이블(PGT) 정보(600), 타이밍 정보(602) 및 우선순위 정보(604)(예를 들어, 낮음, 중간, 높음, 긴급)를 평가한다.
예를 들어, PGT 정보(600)는 DRAM 페이지가 개방되는지(즉, 활성화되었는지) 또는 폐쇄 상태인지(즉, 이것이 사전 충전되었음을 의미함)를 나타내며, 따라서 뱅크 상의 페이지가 개방되지 않는다. 타이밍 정보(602)는, 일 예에서, 위에서 언급된 Trc, Trcd 등을 지칭한다. 우선순위 정보(604)는 요청이 낮거나, 중간, 높거나 또는 긴급한 것인지 여부에 대한 우선순위의 레벨이다.
페이지 히트(PH)는 필요한 페이지가 DRAM 디바이스의 감지 증폭기에서 이미 "활성"이고 그 선이 직접 판독 또는 기입될 수 있음을 의미한다. 이것은 최저 지연 시나리오이다. 페이지 미스(PM)는 필요한 페이지가 DRAM 감지 증폭기에서 개방되지 않고 따라서 "활성화될"필요가 있다는 것을 의미하고, 그 다음 액세스를 위한 페이지 히트가 될 때까지 Trcd를 기다린다. 이것은 중간 지연 반응이다. 페이지 충돌(PC)은, 빠져나가는 페이지가 사전-충전될 필요가 있도록 해당 DRAM 뱅크에서 개방된 현재 페이지가 아닌 페이지를 의미하고, 이어서 새로운 페이지들이 활성화될 필요가 있다는 것을 기다린 다음, 그것은 페이지 히트가 된다. - 이것은 가장 높은 지연 오버헤드이다.
제1 레벨 중재는 제2 레벨 중재 로직(612)으로 전달하기 위한 위닝 엔트리를 선택하기 위해 아비터(538 및 539) 각각에 의해 수행된다. 예를 들어, 아비터(538 및 539)는 각각의 서브 큐 내의 메모리 액세스 명령를 선택하는 것으로, 각각의 명령 서브 큐 내의 모든 엔트리들에서 우선순위 정보(604)에 기초하여 가장 높은 우선순위를 갖는 명령과 같은 특정 기준들을 충족시킨다. 타이밍 의존성들은 타이밍 정보(602)(예컨대, 타이밍 OK 정보)에 의해 표시된 바와 같은 명령에 대해 해결되고, 또한 명령에 대해 검출되고 페이지 테이블 정보(600)에 의해 표시된 페이지 테이블 히트가 있어야 한다. 명령어가 이 기준을 충족하지 않는 경우, 서브 큐 또는 임의의 다른 적합한 기준에서 가장 오래된 명령과 같은 위닝 명령을 선택하기 위해 다른 기준이 사용된다.
선택기(541)는 멀티플렉서(610) 및 제2 레벨 중재 로직(612)을 포함한다. 멀티플렉서(610)는 제2 레벨 중재 로직(612)에 의해 결정된 바와 같은 타이밍 임계치들 및 다른 기준들과 같은 기준들에 기초하여 2개의 명령 서브 큐 중 하나로부터 위닝 메모리 액세스 요청들 중 하나를 선택한다. 일 예에서 제2 레벨 중재 로직(612)은 하나 이상의 상태 머신들로서 구현되지만, 프로그래밍된 프로세서들 또는 임의의 다른 적절한 로직을 포함하는 임의의 적합한 로직이 사용될 수 있다. 이와 같이, 이 예에서, 제2 레벨 중재 로직(612)은, 타이밍 정보, 페이지 히트 정보 및 다른 정보와 같은 생성된 또는 미리 저장된 기준들에 기초하여 명령 서브 큐 및 대응하는 아비터 그룹들의 각각의 인스턴스의 위너 사이에서 하나의 위너를 픽업한다. 예를 들어, 페이지 히트들은 페이지 미스들에 비해 선호된다. 일부 구현예들에서, 위닝 메모리 액세스 요청들(606 또는 608) 중 하나가 페이지 히트인 경우, 그 메모리 액세스 요청은 예를 들어, 다른 메모리 액세스 요청이 메모리(예를 들어, 페이지 미스)의 로우를 활성화 및 사전 충전하는 것을 요구하는 메모리 액세스 요청에 대한 것인 경우, 바람직한 메모리 액세스 요청(543)으로서 선택된다. 일부 구현예들에서, 메모리 액세스 요청들이 모두 페이지 히트들을 갖는 경우, 제2 레벨 중재 로직(612)은 가장 높은 우선순위를 갖는 메모리 액세스 요청을 선택한다. 일부 구현예들에서, 메모리 액세스 요청들(606 및 608) 둘 모두가 페이지 히트들을 갖고 모두 동일한 레벨의 우선순위를 갖는 경우, 제2 레벨 중재 로직(612)은 바람직한 메모리 액세스 요청으로서 이전 메모리 액세스 요청을 선택한다. 이들은 예들이며, 임의의 적합한 선택 기준이 사용될 수 있다는 것이 인식될 것이다.
일부 구현예들에서, 엔트리들은 화살표(614)와 같은 점선 화살표들에 의해 도시된 바와 같이 명령 서브 큐 사이에서 전달된다. 일부 구현예들에서, 명령 서브 큐들은 가장 오래된 엔트리가 각각의 서브 큐의 끝에 있도록 순서 방식으로 동작된다. 이 예에서 명령 큐 엔트리 로직(523)은, 엔트리가 개방 엔트리를 갖는 명령 서브 큐로 전달될 수 있다는 것을 다른 명령 서브 큐로부터 다른 명령 서브 큐로부터 피드백을 제공한다. 다른 구현예들에서, 순서외 동작이 제공된다.
도 7은 다수의 명령 서브 큐/아비터 모듈들(525 및 527)이 기입 서브 큐들로서 구성되는 반면, 추가적인 명령 서브 큐들(700 및 702)(예를 들어, 명령 서브 큐/아비터 모듈들)이 판독 서브 큐들로서 구성되는 다른 예시적인 구현예(701)를 도시한다. 예를 들어, 구현예(701)는 전용 기입 명령 서브 큐 및 전용 판독 명령 서브 큐를 사용한다. 이 예에서 제2 레벨 중재 로직(612)은 기입 액세스 요청이 선택되는지를 결정하기 위한 타이밍 기준과 같은 기준을 사용하고, 이 예에서 도 1의 선택기(541)로서 역할을 하는 제3 선택기(704)로 판독 요청이 선택되고 출력된다. 이와 같이, 이 예에서, 4개의 명령 서브 큐들 및 4개의 대응하는 아비터, 2개의 제2 레벨 아비터 로직 섹션들, 선택기들(706, 708), 및 제3 선택기(704)가 있다. 선택기(704)는 제1 선택기(706) 또는 선택기(708) 중 어느 하나로부터 메모리 요청들을 선택하고, 선택된 메모리 액세스 요청을 하나 이상의 서브 채널들로의 선택된 메모리 액세스 요청으로 전송한다. 이 예에서, 선택기(706 및 708).
이 예에서, 선택기(704)는 멀티플렉서(710)를 통한 바람직한 메모리 액세스 요청으로서 판독 요청 또는 기입 요청이 선택되는지 여부를 선택하기 위해 제어 레지스터에 저장된 기입 임계값 및 판독 임계치를 사용한다. 일부 구현예들에서, 판독 요청들은 기입 요청들에 비해 선호된다. 기입 임계값 및 판독 임계값들은 버스를 판독 동작과 기입 동작 사이에서 스위칭할 때 데이터 버스 상의 충돌을 피하도록 설정된다. 예를 들어, 판독 임계치는 버스가 기입 동작으로 스위칭되기 전에 수행하기 위한 연속적인 판독들의 수이고, 기입 임계치는 버스가 판독 동작들을 수행하기 위해 스위칭되기 전에 발생할 수 있는 연속적인 기입들의 수이다. 또한 이 예에서, 명령 큐 엔트리 로직(523)은 주소 생성기(522)로부터 수신된 메모리 액세스 요청들을 상이한 명령 서브 큐(525, 527, 700, 702)로 분류하여, 명령 서브 큐(525)가 기입 요청들을 포함하고 명령 서브 큐(700)가 판독 요청들만을 수신한다. 유사하게, 명령 큐 엔트리 로직(523)은 메모리 액세스 요청들을 분류하여 기입 요청들만이 명령 서브 큐(527)에 저장되고, 판독 요청들만이 명령 서브 큐(702)에 저장된다. 이 예에서, 아비터(538 및 539)는 기입 요청과 관련된 타이밍 정보 뿐만 아니라 전술한 다른 요구된 정보를 평가하는 동일한 유형의 중재제로 구성되는 반면, 아비터(714 및 716)는 판독 요청의 목적을 중재하고 메모리 액세스 판독 요청을 적절하게 처리하는 데 필요한 타이밍 정보를 고려하도록 구성된다.
도 8은 각각의 명령 서브 큐들(800, 802)이 메모리 액세스 요청들만을 읽거나 기입하는 대신에 판독 및 기입 메모리 액세스 요청들 둘 다를 저장하고, 명령 서브 큐(804, 806) 각각이 판독 및 기입 메모리 액세스 요청들 둘 모두를 또한 저장하도록 각각의 서브 채널에 대해 판독 및 기입 큐들이 사용되는 다른 예시적인 메모리 채널 컨트롤러 구성을 도시한다.
도 9는 메모리의 각 서브 채널에 전용되는 도 7에 도시된 구조의 다수의 인스턴스를 포함하는 다른 예시적인 구현예를 도시한다. 이와 같이, 이 예에서, 서브 채널 당 전용인 전용 판독 및 기입 명령 서브 큐가 존재한다. 예를 들어, 서브 채널 0에 대한 다수의 명령 기입 서브 큐(900 및 902), 및 서브 채널 1에 대한 기입 명령 서브 큐(904 및 906)가 있다. 이와 같이, 서브 채널 0 전용의 다수의 명령 판독 서브 큐(908 및 910)가 있고, 서브 채널 1에 대한 명령 기입 서브 큐(912 및 914)가 있다. 명령 서브 큐 각각은 도시된 바와 같이 대응하는 전용 아비터를 갖는다.
도 10은 복수의 메모리 채널들을 갖는 메모리 시스템을 컨트롤러를 위한 예시적인 방법(1000)을 도시한다. 특정 구현예에서, 방법은 도 5 내지 도 9에 도시된 구조에 의해 수행된다. 특정 구현예들에서, 방법은, 예를 들어, 어드레스 생성기(522)에 의해, 그리고 어드레스 생성기(522)에 의해, 메모리 액세스 요청들 각각에 의해, 메모리 액세스 요청들(1002)을 수신하는 단계를 포함한다. DDRx 메모리가 사용되는 구현예들에서, 방법은 블록(1004)에 도시된 바와 같이, 어드레스들을 메모리 시스템 내의 메모리 디바이스들의 복수의 서브 채널들의 뱅크, 랭크, 및 서브 채널로 디코딩하는 단계를 포함한다. 방법은 디코딩된 어드레스들을 복수의 명령 서브 큐 중 하나에 저장하는 단계를 포함한다. DDRx 메모리가 사용되는 구현예에서, 방법은, 예컨대, 명령 큐 엔트리 로직(523)에 의해, 뱅크, 랭크, 및 적어도 제1 명령 서브 큐 또는 적어도 제2 명령 서브 큐 내의 서브 채널을 포함하는 메모리 액세스 요청을 저장하는 단계를 포함한다. 동작(1004 및 1006)은 뱅크 및 랭크 명칭을 사용하지 않는 메모리가 사용되는 경우에 수행될 필요가 없다. 특정 구현예들에서, 제1 명령 서브 큐가 판독 요청들만을 포함하고 제2 명령 서브 큐가 기입 요청들만을 포함하지만 다른 구현예들에서 다른 분류 기준들이 사용되도록 메모리 액세스 요청들을 상이한 명령 서브 큐 내에 저장하는 것을 포함한다. 일부 구현예에서, 명령 서브 큐 사이에서 엔트리를 전송하는 것을 포함한다. 방법은, 제1 명령 서브 큐로부터 선택된 제1 메모리 액세스 요청을 제공하기 위해 아비터(538)에 의한 것과 같은 미리 결정된 기준을 사용하여 제1 명령 서브 큐의 복수의 메모리 액세스 요청 중에서 선택하는 단계(1008), 및 제2 명령 서브 큐로부터 선택된 제2 메모리 액세스 요청을 제공하기 위해 아비터(539)에 의한 것과 같은 미리 결정된 기준을 사용하여 제2 명령 서브 큐의 복수의 메모리 액세스 요청 중에서 선택하는 단계(1010)를 포함한다. 방법은, 제1 명령 서브 큐 및 제2 메모리 액세스 요청으로부터 제1 명령 서브 큐 및 제2 메모리 액세스 요청으로부터 선택기(54,1)로부터 선택된 메모리 액세스 요청과 같은 바람직한 메모리 액세스 요청을 선택하는 단계, 및 서브 채널에 따라 복수의 메모리 채널들 중 하나에 선택된 메모리 액세스 요청을 디스패치(1014)하는 단계를 포함한다. 본원에 제공된 방법은 하나의 예이고, 동작들이 조합될 수 있고, 그 순서가 변경될 수 있고, 다른 변형들이 원하는 동작에 따라 이루어질 수 있다는 것이 인식될 것이다.
하나 이상의 구현예는 종래의 명령 큐보다 작은 전용 명령 서브 큐 및 대응하는 아비터를 이용한다. 예를 들어, 더 작은 명령 큐들 각각을 서비스하기 위한 다수의 32개의 엔트리 명령 큐들 및 대응하는 아비터들이 더 큰 64개의 엔트리 명령 큐 대신 본원에서 일부 구현예들에서 이용된다. 중재 및 타이밍 결정은 훨씬 더 빠른 방식으로 이루어지고 (예를 들어, 더 높은 클록 주파수가 사용됨), 메모리 컨트롤러 속도를 개선하고 메모리 컨트롤러를 포함하는 집적 회로의 데이터 처리량을 개선한다.
도 5의 메모리 컨트롤러(500)는 하드웨어 및 소프트웨어의 다양한 조합으로 구현될 수 있다. 이 하드웨어 회로는 우선순위 인코더들, 유한 상태 기계, 프로그래밍 가능한 로직 어레이(PLA) 등을 포함할 수 있다. 일부 실시예들에서, 다른 기능 블록들은 소프트웨어의 제어 하에서 데이터 프로세서에 의해 수행될 수 있다. 소프트웨어 컴포넌트들 중 일부는 적어도 하나의 프로세서에 의한 실행을 위해 컴퓨터 판독가능 저장 매체에 저장될 수 있고, 비일시적 컴퓨터 메모리 또는 컴퓨터 판독가능 저장 매체에 저장된 명령들에 대응할 수 있다. 여러 실시예에서, 비일시적 컴퓨터 판독가능 저장 매체는 자기 또는 광학 디스크 저장 디바이스, 플래시 메모리, 또는 다른 비휘발성 메모리 디바이스 또는 디바이스와 같은 솔리드 스테이트 저장 디바이스를 포함한다. 비일시적 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 판독 가능 명령어는 하나 이상의 프로세서에 의해 해석고/되거나 실행 가능한 소스 코드, 어셈블리 언어 코드, 객체 코드, 또는 다른 명령어 포맷일 수 있다.
도 5의 메모리 컨트롤러(500), 또는 그의 임의의 부분들은 프로그램에 의해 판독될 수 있고 집적 회로들을 제조하기 위해 직접적으로 또는 간접적으로 사용될 수 있는 데이터베이스 또는 다른 데이터 구조의 형태로 컴퓨터 액세스 가능 데이터 구조에 의해 설명되거나 표현될 수 있다. 예를 들어, 이러한 데이터 구조는 Verilog 또는 VHDL과 같은 고레벨 설계 언어(HDL)에서의 하드웨어 기능의 거동-레벨 설명 또는 레지스터-전송 레벨(RTL) 설명일 수 있다. 설명은 합성 라이브러리로부터 게이트들의 리스트를 포함하는 네트리스트를 생성하기 위해 설명을 합성할 수 있는 합성 도구에 의해 판독될 수 있다. 네트리스트는 집적 회로들을 포함하는 하드웨어의 기능을 또한 나타내는 게이트들의 세트를 포함한다. 이어서 네트리스트는 마스크들에 적용될 기하학적 형상들을 설명하는 데이터 세트를 생성하도록 배치 및 라우팅될 수 있다. 이어서 마스크들은 집적 회로들을 생성하기 위해 다양한 반도체 제조 단계들에서 사용될 수 있다. 대안적으로, 컴퓨터 액세스 가능 저장 매체 상의 데이터베이스는, 원하는 바에 따라, 네트리스트(합성 라이브러리를 갖거나 갖지 않음) 또는 데이터 세트, 또는 그래픽 데이터 시스템(GDS) II 데이터일 수 있다.
특정 실시예들이 설명되었지만, 이러한 실시예들에 대한 다양한 수정들이 당업자에게 명백할 것이다. 예를 들어, 메모리 컨트롤러(500)는 다른 유형의 DIMM뿐만 아니라 고대역폭 메모리(HBM), RDRAM(RAMbus DRAM) 등과 같은 DDRx 메모리 외에 다른 유형의 메모리에 인터페이스할 수 있다. 메모리 컨트롤러는 네트워크 컨트롤러, 하드 구동 컨트롤러 및 다른 디바이스에 통합될 수 있다. DDR 메모리에 유용한 메모리 어드레싱 및 제어 신호들을 설명하는 예시된 실시예는 사용되는 메모리의 유형에 따라 달라질 것이다. 또한, 도 6의 메모리 액세스 제어는 2개 초과의 가상 채널들로 스케일링될 수 있다.
따라서, 첨부된 청구항들에 의해 개시된 실시예들의 범위에 속하는 개시된 실시예들의 모든 수정들을 포함하는 것이 의도된다.
특징 및 엘리먼트가 특정 조합으로 위에서 설명되었지만, 각각의 특징 또는 엘리먼트는 다른 특징 및 엘리먼트 없이 단독으로 또는 다른 특징 및 엘리먼트를 갖거나 갖지 않는 다양한 조합으로 사용될 수 있다. 일부 구현에서 본 명세서에 설명된 장치는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비일시적 컴퓨터 판독가능 스토리지 매체에 통합된 컴퓨터 프로그램, 소프트웨어 또는 펌웨어를 사용하여 제조된다. 컴퓨터 판독 가능 스토리지 매체의 예로는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 내부 하드 디스크 및 이동식 디스크와 같은 자기 매체, 자기 광학 매체, CD-ROM 디스크 및 디지털 다목적 디스크(DVD)와 같은 광학 매체를 포함한다.
다양한 실시예의 선행하는 상세한 설명에서, 이의 일부를 형성하고 본 발명이 실시될 수 있는 특정 바람직한 실시예의 예로서 도시된 첨부 도면이 참조되었다. 이들 실시예는 당업자가 본 발명을 실시할 수 있게 하기에 충분히 상세하게 설명되며, 다른 실시예가 이용될 수 있고, 본 발명의 범위를 벗어나지 않고 논리적, 기계적 및 전기적 변화가 이루어질 수 있음을 이해해야 한다. 당업자가 본 발명을 실시할 수 있게 하기 위해 상세하지 않은 것을 피하기 위해, 설명은 당업자에게 알려진 특정 정보를 생략할 수 있다. 또한, 본 개시내용의 교시를 포함하는 많은 다른 다양한 실시예는 당업자에 의해 용이하게 구성될 수 있다. 따라서, 본 발명은 본원에 제시된 특정 형태로 제한되도록 의도되지 않으며, 반대로 본 발명의 범위 내에 합리적으로 포함될 수 있는 바와 같이 이러한 대안, 변형 및 등가물을 포함하고자 한다. 따라서, 전술한 상세한 설명은 제한적인 의미로 취해지지 않아야 하며, 본 발명의 범위는 첨부된 청구범위에 의해서만 정의된다. 본 명세서에 설명된 실시예들 및 실시예들에 대한 상기 상세한 설명은 단지 예시 및 설명을 위해 제시되었으며 제한이 아니다. 예를 들어, 설명된 동작들은 임의의 적절한 순서 또는 방식으로 수행된다. 따라서, 본 발명은 본원에 개시되고 청구된 기본적인 기본 원리의 범위 내에 속하는 임의의 및 모든 수정, 변형 또는 등가물을 포함하는 것으로 고려된다.
상기 상세한 설명 및 본원에 설명된 예는 제한이 아닌 예시 및 설명의 목적으로 제시되었다.
일부 구현예들에 따르면, 복수의 메모리 채널들을 갖는 메모리 시스템을 제어하기 위한 방법은 제1 명령 서브 큐 내의 메모리 액세스 요청을 선택하는 단계, 제2 명령 서브 큐 내의 메모리 액세스 요청을 선택하는 단계, 상기 제1 메모리 액세스 요청 및 상기 제2 메모리 액세스 요청 중에서 메모리 액세스 요청을 선택하는 단계; 및 상기 선택된 메모리 액세스 요청을 메모리 채널로 디스패칭하는 단계를 포함한다.
특정 구현예들에 따르면, 복수의 메모리 채널들을 갖는 메모리 시스템을 제어하기 위한 방법은 메모리 액세스 요청들을 수신하는 단계를 포함한다. 방법은 메모리 액세스 요청들 각각을 디코딩하는 단계를 포함한다. 방법은 또한, 디코딩된 메모리 액세스 요청을 제1 명령 서브 큐 또는 제2 명령 서브 큐 내에 저장하는 단계를 포함한다. 방법은 또한, 제1 명령 서브 큐로부터 선택된 제1 메모리 액세스 요청을 제공하기 위해 미리 결정된 기준을 사용하여 제1 명령 서브 큐 내의 복수의 메모리 액세스 요청들 중에서 선택하는 단계를 포함한다. 방법은 또한 제2 명령 서브 큐로부터 선택된 제2 메모리 액세스 요청을 제공하기 위해 미리 결정된 기준을 사용하여 제2 명령 서브 큐 내의 복수의 메모리 액세스 요청들 중에서 선택하는 단계를 포함한다. 방법은 또한 상기 제공된 상기 제1 명령 서브 큐로부터의 제1 메모리 액세스 요청 및 상기 제2 명령 서브 큐로부터의 제2 메모리 액세스 요청 중에서 바람직한 메모리 액세스 요청을 선택하는 단계를 포함한다. 방법은 또한, 서브 채널에 따라 복수의 메모리 채널들 중 하나에 선택된 바람직한 선택된 메모리 액세스 요청을 디스패치하는 단계를 포함한다.
일부 예들에서, 방법은 제1 명령 서브 큐가 판독 요청들만을 포함하고 제2 명령 서브 큐가 기입 요청들만을 포함하도록 상이한 명령 서브 큐들로 메모리 액세스 요청들을 분류하는 단계를 포함한다. 특정 예들에서, 방법은 메모리 시스템에서 메모리 디바이스들의 복수의 서브 채널들의 뱅크, 랭크 및 서브 채널로 메모리 액세스 요청들을 디코딩하는 단계를 포함하고, 복수의 명령 서브 큐 중 하나에 뱅크, 랭크 및 서브 채널을 저장하는 단계를 포함한다. 일부 구현예들에서, 방법은 제1 명령 서브 큐 및 제2 메모리 서브 큐로부터 제2 메모리 액세스 요청으로부터 제공된 제1 메모리 액세스 요청 중에서 가장 오래된 메모리 액세스 요청을 선택함으로써 바람직한 메모리 액세스 요청을 선택하는 단계를 포함한다.
특정 구현예들에서, 메모리 컨트롤러는 메모리 채널 컨트롤러를 포함하고, 메모리 채널 컨트롤러는 메모리 액세스 요청들을 저장하도록 구성된 제1 명령 서브 큐 및 제1 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 제1 명령 서브 큐에 결합된 대응하는 제1 아비터를 포함한다. 메모리는 또한, 메모리 액세스 요청들을 저장하도록 구성된 제2 명령 서브 큐 및 제2 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 제2 명령 서브 큐에 결합된 대응하는 제2 아비터를 포함한다. 메모리는 또한 메모리 액세스 요청들을 제1 명령 서브 큐 및 제2 명령 서브 큐 내에 배치하는 명령 큐 엔트리 로직을 포함한다. 메모리는 또한 제1 명령 서브 큐 또는 제2 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 복수의 서브 채널들 중 적어도 하나에 전송하도록 동작하는 제1 선택기를 포함한다. 일부 구현예들에서, 아비터는 미리 결정된 기준들에 기초하여 메모리 액세스 명령들을 선택한다. 일부 구현예들에서, 제1 선택기는 제1 및 제2 아비터들 모두에 결합된다.
일부 예들에서, 명령 큐 엔트리 로직은 제1 명령 서브 큐가 판독 요청들만을 포함하고 제2 명령 서브 큐가 기입 요청들만을 포함하도록 상이한 명령 서브 큐들로 메모리 액세스 요청들을 분류한다. 다른 구현예들에서, 명령 큐 엔트리 로직은 엔트리들을 제1 명령 서브 큐로부터 제2 명령 서브 큐로 이송한다.
특정 예들에서, 메모리 컨트롤러는 제1 아비터와 제2 아비터 사이에서 공유되는 공유 타이밍 로직 및 공유 페이지 테이블을 포함한다.
일부 예들에서, 메모리 제어 로직은 미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐를 포함한다. 메모리는 또한 메모리 액세스 요청들을 저장하기 위한 제4 명령 서브 큐 및 미리 결정된 기준에 따라 제4 명령 서브 큐로부터 메모리 액세스 명령를 선택하기 위해 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 포함한다. 메모리는 또한 제3 명령 서브 큐 또는 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하도록 동작하는 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기를 포함한다. 메모리는 또한 제1 및 제2 선택기에 동작 가능하게 결합되고 제1 선택기 또는 제2 선택기 중 어느 하나로부터 메모리 요청을 선택하고 선택된 메모리 액세스 요청들을 복수의 서브 채널들 중 적어도 하나에 전송하도록 동작하도록 동작하는 제3 선택기를 포함한다.
특정 예들에서, 메모리 컨트롤러는 제1 명령 서브 큐 및 제2 명령 서브 큐에 동작 가능하게 결합된 명령 큐 엔트리 로직을 포함하고, 제1 명령 서브 큐 및 제2 명령 큐가 판독 요청들만을 포함하고 제3 명령 서브 큐 및 제4 명령 큐가 기입 요청들만을 포함하도록 메모리 액세스 요청들을 상이한 명령 큐들로 분류하도록 동작한다.
일부 예들에서, 메모리 제어 로직은 미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐를 포함한다. 메모리 제어 로직은 또한 메모리 액세스 요청들을 저장하기 위한 제4 명령 서브 큐 및 미리 결정된 기준에 따라 제4 명령 서브 큐로부터 메모리 액세스 명령를 선택하기 위해 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 포함한다. 메모리 제어 로직은 또한 상기 제3 명령 서브 큐 또는 상기 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 대응하는 서브 채널로 전송하도록 동작하는 상기 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기를 포함한다.
특정 구현예에서, 데이터 처리 시스템은 메모리 액세스 요청을 제공하기 위한 복수의 메모리 액세스 에이전트를 포함한다. 데이터 처리 시스템은 또한 복수의 메모리 채널을 포함한다. 데이터 처리 시스템은 또한 복수의 메모리 액세스에이전트들에 결합되고 복수의 메모리 채널들에 결합되는 메모리 채널 컨트롤러를 갖고, 메모리 채널 컨트롤러는 메모리 액세스 요청들을 저장하기 위한 제1 명령 서브 큐 및 제1 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 제1 명령 서브 큐에 결합된 대응하는 제1 아비터를 포함한다. 메모리 채널 컨트롤러는 또한 메모리 액세스 요청들을 저장하기 위한 제2 명령 서브 큐 및 상기 제2 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 상기 제2 명령 서브 큐에 동작 가능하게 결합된 대응하는 제2 아비터를 포함한다. 일부 구현예들에서, 아비터는 미리 결정된 기준들에 기초하여 메모리 액세스 명령들을 선택한다. 메모리 채널 컨트롤러는 또한 제1 명령 서브 큐 및 제2 명령 서브 큐에 동작 가능하게 결합된 명령 큐 엔트리 로직을 포함하고, 메모리 액세스 요청들을 제1 명령 서브 큐 및 제2 명령 서브 큐 내에 배치하도록 동작한다. 메모리 채널 컨트롤러는 또한 제1 명령 서브 큐 또는 제2 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 복수의 서브 채널들 중 적어도 하나에 전송하는 제1 및 제2 아비터들 둘 모두에 결합된 제1 선택기를 포함한다.
일부 예들에서, 명령 큐 엔트리 로직은 제1 명령 서브 큐가 판독 요청들만을 포함하고 제2 명령 서브 큐가 기입 요청들만을 포함하도록 상이한 명령 서브 큐들로 메모리 액세스 요청들을 분류한다. 일부 구현예들에서, 명령 큐 엔트리 로직은 엔트리들을 제1 명령 서브 큐로부터 제2 명령 서브 큐로 이송한다.
특정 예들에서, 데이터 처리 시스템은 제1 아비터와 제2 아비터 사이에서 공유되는 공유 타이밍 로직 및 공유 페이지 테이블을 포함한다.
일부 예들에서, 데이터 처리 시스템은 미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐를 포함한다. 데이터 처리 시스템은 또한 메모리 액세스 요청들을 저장하기 위한 제4 명령 서브 큐 및 미리 결정된 기준에 따라 제4 명령 서브 큐로부터 메모리 액세스 명령를 선택하기 위해 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 포함한다. 데이터 처리 시스템은 또한 제3 명령 서브 큐 또는 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하도록 동작하는 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기를 포함한다. 데이터 처리 시스템은 또한 제1 및 제2 선택기에 동작 가능하게 결합되고 제1 선택기 또는 제2 선택기 중 어느 하나로부터 메모리 요청을 선택하고 선택된 메모리 액세스 요청들을 복수의 서브 채널들 중 적어도 하나에 전송하도록 동작하도록 동작하는 제3 선택기를 포함한다.
특정 예들에서, 메모리 컨트롤러는 제1 명령 서브 큐 및 제2 명령 서브 큐에 동작 가능하게 결합된 명령 큐 엔트리 로직을 포함하고, 제1 명령 서브 큐 및 제2 명령 큐가 판독 요청들만을 포함하고 제3 명령 서브 큐 및 제4 명령 큐가 기입 요청들만을 포함하도록 메모리 액세스 요청들을 상이한 명령 큐들로 분류한다.
일부 예들에서, 데이터 처리 시스템은 미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐를 포함한다. 데이터 처리 시스템은 또한 메모리 액세스 요청들을 저장하기 위한 제4 명령 서브 큐 및 미리 결정된 기준에 따라 제4 명령 서브 큐로부터 메모리 액세스 명령를 선택하기 위해 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 포함한다. 데이터 처리 시스템은 또한 제3 명령 서브 큐 또는 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 대응하는 서브 채널로 전송하도록 동작하는 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기를 포함한다.
도 1은 일부 실시예들에 따른 데이터 처리 시스템(100)을 도시하는 비제한적인 예시적인 블록도를 도시한다. 데이터 처리 시스템(100)은 일반적으로 가속 처리 유닛 (APU), 메모리 시스템(120), 주변 컴포넌트 상호연결 표현(PCIe) 시스템(150), 범용 직렬 버스 (USB) 시스템(160), 및 디스크 드라이브(170)의 형태의 데이터 프로세서(110)를 포함한다. 데이터 프로세서(110)는 데이터 처리 시스템(100)의 중앙 처리 유닛(CPU)으로서 동작하고, 현대의 컴퓨터 시스템들에서 유용한 다양한 버스들 및 인터페이스들을 제공한다. 이러한 인터페이스들은 2개의 더블 데이터 레이트(DDRx) 메모리 채널들, PCIe 링크에 대한 접속을 위한 PCIe 루트 컴플렉스, USB 네트워크에 대한 접속을 위한 USB 컨트롤러, 및 SATA(Serial Advanced Technology Attachment) 대용량 저장 디바이스에 대한 인터페이스를 포함한다.
메모리 시스템(120)은 메모리 채널(130) 및 메모리 채널(140)을 포함한다. 메모리 채널(130)은 이 예에서 별개의 랭크들에 대응하는 대표적인 이중 인라인 메모리 모듈들(DIMM들)(134, 136, 및 138)을 포함하여, DDRx 버스(132)에 접속된 DIMM들의 세트를 포함한다. 마찬가지로, 메모리 채널(140)은 대표적인 DIMM들(144, 146, 및 148)을 포함하여, DDRx 버스(142)에 접속된 DIMM들의 세트를 포함한다. 예를 들어, DDR5 듀얼 인-라인 메모리 모듈(DIMM)은 "서브 채널"로 지칭되는 2개의 독립적인 32-비트 채널을 갖는다. DRAM 컨트롤러 아키텍처 사용 시점으로부터, 단일 컨트롤러는 2개의 별개의 32-비트 채널들을 독립적으로 작동하며 이 경우에 컨트롤러로부터, 2개의 채널들이 또한 서브 채널로도 지칭된다.
PCIe 시스템(150)은 데이터 프로세서(110)에서 PCIe 루트 복합체에 연결된 PCIe 스위치(152), PCIe 디바이스(154), PCIe 디바이스(156), 및 PCIe 디바이스(158)를 포함한다. 결국, PCIe 디바이스(156)는 시스템 기본 입력/출력 시스템(BIOS) 메모리(157)에 연결된다. 시스템 BIOS 메모리(157)는 판독 전용 메모리(ROM), 플래시 전기적 소거가능 프로그래밍 가능 ROM(EEPROM) 등과 같은 다양한 비휘발성 메모리 유형들 중 임의의 것일 수 있다.
USB 시스템(160)은 데이터 프로세서(110)의 USB 마스터에 연결된 USB 허브(162), 각각 USB 허브(162)에 연결된 대표적인 USB 디바이스(164, 166, 168)를 포함한다. USB 디바이스(164, 166, 168)는 키보드, 마우스, 플래시 EEPROM 포트 등과 같은 디바이스일 수 있다.
디스크 드라이브(170)는 SATA 버스를 통해 데이터 프로세서(110)에 연결되고, 운영 체제, 애플리케이션 프로그램들, 애플리케이션 파일들 등을 위한 질량 저장을 제공한다.
데이터 처리 시스템(100)은 메모리 채널(130) 및 메모리 채널(140)에 제공함으로써 현대의 컴퓨팅 애플리케이션에서 사용하기에 적합하다. 메모리 채널들(130 및 140) 각각은 DDR 버전 4(DDR4), 저전력 DDR4(LPDDR4), 그래픽 DDR 버전 5(gDDR5), 및 고대역폭 메모리(HBM)와 같은 최신 DDR 메모리들에 접속할 수 있고, 미래의 메모리 기술들에 대해 적응될 수 있다. 이러한 메모리들은 고 버스 대역폭 및 고속 동작을 제공한다. 동시에, 그들은 또한 랩톱 컴퓨터들과 같은 배터리-급전식 애플리케이션들에 대한 전력을 절감하기 위해 저전력 모드들을 제공하고, 또한 내장 열 모니터링을 제공한다.
도 2는 도 1의 데이터 처리 시스템(100)에 사용하기에 적합한 APU(200)를 블록도 형태로 도시한다. APU(200)는 일반적으로 중앙 처리 유닛(CPU) 코어 복합체(210), 그래픽 코어(220), 디스플레이 엔진 세트(230), 메모리 관리 허브(240), 데이터 직물(250), 주변 컨트롤러 세트(260), 주변 버스 컨트롤러 세트(270), 시스템 관리 유닛(SMU)(280), 및 메모리 컨트롤러 세트(290)(메모리 컨트롤러(292) 및 메모리 컨트롤러(294))를 포함한다.
CPU 코어 컴플렉스(210)는 CPU 코어(212) 및 CPU 코어(214)를 포함한다. 이 예에서, CPU 코어 컴플렉스(210)는 2개의 CPU 코어를 포함하지만, 다른 실시예들에서 CPU 코어 컴플렉스는 임의의 수의 CPU 코어들을 포함할 수 있다. CPU 코어들(212 및 214) 각각은 제어 패브릭을 형성하는 시스템 관리 네트워크(SMN)에 그리고 데이터 패브릭(250)에 양방향으로 접속되고, 데이터 패브릭(250)에 메모리 액세스 요청들을 제공할 수 있다. CPU 코어들(212 및 214) 각각은 단일 코어들일 수 있거나, 추가로 캐시들과 같은 소정 자원들을 공유하는 2개 이상의 단일 코어를 갖는 코어 컴플렉스일 수 있다.
그래픽 코어(220)는 고집적 및 병렬 방식으로 정점 처리, 프래그먼트 처리, 셰이딩, 텍스처 블렌딩 등과 같은 그래픽 동작들을 수행할 수 있는 고성능 그래픽 처리 유닛(GPU)이다. 그래픽 코어(220)는 SMN에 그리고 데이터 패브릭(250)에 양방향으로 접속되고, 데이터 패브릭(250)에 메모리 액세스 요청들을 제공할 수 있다. 이와 관련하여, APU(200)는 CPU 코어 컴플렉스(210)와 그래픽 코어(220)가 동일한 메모리 공간을 공유하는 통합 메모리 아키텍처, 또는 CPU 코어 컴플렉스(210)와 그래픽 코어(220)가 메모리 공간의 일부를 공유하는 반면, 그래픽 코어(220)가 또한 CPU 코어 컴플렉스(210)에 의해 액세스 가능하지 않은 프라이빗 그래픽 메모리를 사용하는 메모리 아키텍처를 지원할 수 있다.
디스플레이 엔진들(230)은 모니터 상에의 디스플레이를 위해 그래픽 코어(220)에 의해 생성된 객체들을 렌더링하고 래스터화한다. 그래픽 코어(220) 및 디스플레이 엔진들(230)은 메모리 시스템(120) 내의 적절한 어드레스들로의 균일한 변환을 위해 공통 메모리 관리 허브(240)에 양방향으로 접속되고, 메모리 관리 허브(240)는 그러한 메모리 액세스들을 생성하고 메모리 시스템으로부터 반환된 판독 데이터를 수신하기 위해 데이터 패브릭(250)에 양방향으로 접속된다.
데이터 패브릭(250)은 임의의 메모리 액세싱 에이전트와 메모리 컨트롤러(290)(메모리 컨트롤러(292) 및 메모리 컨트롤러(294)) 사이에서 메모리 액세스 요청들 및 메모리 응답들을 라우팅하기 위한 크로스바 스위치를 포함한다. 그것은 또한 시스템 구성에 기초하여 메모리 액세스들의 목적지들을 결정하기 위한, BIOS에 의해 정의된, 시스템 메모리 맵뿐만 아니라, 각각의 가상 접속을 위한 버퍼들을 포함한다.
주변 컨트롤러(260)는 USB 컨트롤러(262) 및 SATA 인터페이스 컨트롤러(264)를 포함하며, 이들 각각은 시스템 허브(266) 그리고 SMN 버스에 양방향으로 연결된다. 이들 두 컨트롤러는 APU(200)에 사용될 수 있는 단지 예시적인 주변 컨트롤러이다.
주변 버스 컨트롤러(270)는 시스템 컨트롤러 또는 "Southbridge"(SB)(272) 및 PCIe 컨트롤러(274)를 포함하며, 이들 각각은 입력/출력(I/O) 허브(276) 및 SMN 버스에 양방향으로 연결된다. I/O 허브(276)는 또한 시스템 허브(266) 및 데이터 직물(250)에 양방향으로 연결된다. 이에 따라 예를 들어 CPU 코어는 데이터 패브릭(250)이 I/O 허브(276)를 통해 라우팅하는 액세스들을 통해 USB 컨트롤러(262), SATA 인터페이스 컨트롤러(264), SB(272), 또는 PCIe 컨트롤러(274) 내의 레지스터들을 프로그래밍할 수 있다.
SMU(280)는 APU(200) 상의 자원들의 동작을 제어하고 그들 간의 통신을 동기화하는 로컬 컨트롤러이다. SMU(280)는 APU(200) 상의 다양한 프로세서들의 파워-업 시퀀싱을 관리하고, 리셋, 인에이블 및 다른 신호들을 통해 다수의 오프-칩 디바이스들을 제어한다. SMU(280)는 APU(200)의 컴포넌트들 각각에 대한 클록 신호들을 제공하기 위해, 위상 동기 루프(PLL)와 같은, 하나 이상의 클록 소스들(도2에 도시되지 않음)을 포함한다. SMU(280)는 또한 다양한 프로세서들 및 다른 기능 블록들에 대한 전력을 관리하며, 적절한 전력 상태들을 결정하기 위해 CPU 코어들(212 및 214) 및 그래픽 코어(220)로부터 측정된 전력 소비 값들을 수신할 수 있다.
APU(200)는 또한 다양한 시스템 모니터링 및 절전 기능들을 구현한다. 특히, 하나의 시스템 모니터링 기능은 열 모니터링이다. 예를 들어, APU(200)가 뜨거워지면, SMU(280)는 CPU 코어들(212 및 214) 및/또는 그래픽 코어(220)의 주파수 및 전압을 감소시킬 수 있다. APU(200)가 너무 뜨거워지면, 그것은 완전히 셧다운될 수 있다. 열 이벤트들이 또한 SMN 버스를 통해 SMU(280)에 의해 외부 센서들로부터 수신될 수 있고, SMU(280)는 그에 응답하여 클록 주파수 및/또는 전원 전압을 감소시킬 수 있다.
도 3은 일부 실시예들에 따른 도 2의 APU(200)에 사용하기에 적합한 메모리 컨트롤러(300) 및 연관된 물리적 인터페이스(PHY)(330)를 블록도의 형태로 도시한다. 메모리 컨트롤러(300)는 메모리 채널 컨트롤러(310) 및 전력 컨트롤러(320)를 포함한다. 메모리 채널(310)은 호스트 인터페이스(312), 메모리 채널 컨트롤러(314), 및 물리적 인터페이스(316)를 포함한다. 호스트 인터페이스(312)는 확장 가능 데이터 포트(SDP)를 통해 메모리 채널 컨트롤러(314)를 데이터 패브릭(250)에 양방향으로 접속한다. 물리적 인터페이스(316)는 메모리 채널 컨트롤러(314)를 DDR-PHY 인터페이스 사양(DFI)을 준수하는 버스를 통해 PHY(330)에 양방향으로 연결한다. 전력 엔진(320)은 SMN 버스를 통해 SMU(280)에, APB(Advanced Peripheral Bus)를 통해 PHY(330)에 양방향으로 연결되며, 메모리 채널 컨트롤러(314)에도 양방향으로 연결된다. PHY(330)는 도 1의 메모리 채널(130) 또는 메모리 채널(140)과 같은 메모리 채널에 양방향 연결을 갖는다. 메모리 컨트롤러(300)는 단일 메모리 채널 컨트롤러(314)를 사용하는 단일 메모리 채널에 대한 메모리 컨트롤러의 인스턴스화이고, 이하에서 더 설명될 방식으로 메모리 채널 컨트롤러(314)의 동작을 제어하기 위한 전력 엔진(320)을 갖는다.
도 4는 일부 실시예들에 따른 도 2의 APU(200)에 사용하기에 적합한 다른 메모리 컨트롤러(400) 및 연관된 PHY들(440, 450)을 블록도의 형태로 도시한다. 메모리 컨트롤러(400)는 메모리 채널들(410 및 420) 및 전력 엔진(430)을 포함한다. 메모리 채널(410)은 호스트 인터페이스(412), 메모리 채널 컨트롤러(414), 및 물리적 인터페이스(416)를 포함한다. 호스트 인터페이스(412)는 SDP를 통해 메모리 채널 컨트롤러(414)를 데이터 패브릭(250)에 양방향으로 접속한다. 물리적 인터페이스(416)는 메모리 채널 컨트롤러(414)를 PHY(440)에 양방향으로 접속하고, DFI 사양을 따른다. 메모리 채널(420)은 호스트 인터페이스(422), 메모리 채널 컨트롤러(424), 및 물리적 인터페이스(426)를 포함한다. 호스트 인터페이스(422)는 다른 SDP를 통해 메모리 채널 컨트롤러(424)를 데이터 패브릭(250)에 양방향으로 접속한다. 물리적 인터페이스(426)는 메모리 채널 컨트롤러(424)를 PHY(450)에 양방향으로 접속하고, DFI 사양을 따른다. 전력 엔진(430)은 SMN 버스를 통해 SMU(280)에, APB를 통해 PHY들(440 및 450)에 양방향으로 접속되고, 또한 메모리 채널 컨트롤러들(414 및 424)에 양방향으로 접속된다. PHY(440)는 도 1의 메모리 채널(130)과 같은 메모리 채널에 양방향 연결을 갖는다. PHY(450)는 도 1의 메모리 채널(140)과 같은 메모리 채널에 양방향 연결을 갖는다. 메모리 컨트롤러(140)는 2개의 메모리 채널 컨트롤러를 갖는 메모리 컨트롤러의 인스턴스화이고, 아래에서 추가로 설명될 방식으로 메모리 채널 컨트롤러(414) 및 메모리 채널 컨트롤러(424) 둘 모두의 동작을 제어하기 위해 전력 엔진(430)을 사용한다.
도 5는 일부 실시예들에 따른 메모리 컨트롤러(500)의 블록도의 비제한적인 예를 도시한다. 메모리 컨트롤러(500)는 일반적으로 메모리 채널 컨트롤러(510) 및 전력 컨트롤러(550)를 포함한다. 메모리 채널 컨트롤러(510)는 일반적으로 인터페이스(512), 큐(514), 제1 명령 서브 큐(520), 어드레스 생성기(522), 각각의 명령 서브 큐/아비터 쌍에 대한 콘텐츠 주소 지정 가능 메모리(CAM)(524 및 529), 리플레이 큐(530), 리프레시 로직 블록(532), 타이밍 블록(534), 페이지 테이블(536), 대응 아비터(538), 오류 정정 코드(ECC) 체크 블록(542), ECC 생성 블록(544), 및 데이터 버퍼(DB)(546)를 포함한다. 일부 구현예들에서, 메모리 컨트롤러(500)는 아래에서 더 설명되는 바와 같은 제2 명령 서브 큐(521), 대응하는 아비터(539), 및 선택기(541)를 더 포함한다. 각각의 명령 서브 큐(525 및 527)는 대응하는 중재자를 포함하고, 본원에서 서브 큐/아비터 쌍, 또는 명령 서브 큐/아비터 그룹 또는 명령 서브 큐/아비터 모듈로도 지칭된다. 일부 구현예들에서 명령 서브 큐/아비터 모듈들(525 및 527)은 주어진 아키텍처에 대한 필요성으로서 깊이 확장을 허용하도록 복제되고, 선택기(541)를 통한 제2 중재 레벨은 확장된 수의 모듈들로부터 추가 출력들을 처리하도록 구성된다. 특정 구현예들에서, 명령 큐 엔트리 로직(523)은 메모리 액세스 요청들을 상이한 명령 서브 큐들로 배치(예를 들어, 서브 큐들 사이의 분류 및/또는 전송)한다. 일부 예들에서, 이는 하나의 명령 서브 큐 내에 판독 요청들만을 저장하는 단계 및 다른 명령 서브 큐 내에 기입 요청들만을 저장하는 단계를 포함한다. 다른 구현예들에서, 명령 큐 엔트리 로직(523)은 판독 및 기입 요청들 둘 모두를 동일한 명령 서브 큐 모두에 조합한다. 특정 구현예들에서, 명령 큐 엔트리 로직(523)은 하나의 명령 서브 큐로부터 다른 명령으로 엔트리들을 이동시킨다.
일부 구현예들에서, 각각의 명령 서브 큐(520 및 521)는 32개의 엔트리들을 저장하여, 두 명령 서브 큐들로부터의 엔트리들의 조합된 수가 64개의 엔트리들이다. 그러나, 임의의 적합한 수의 명령 서브 큐 및 명령 서브 큐 엔트리 크기가 이용될 수 있다. 일부 구현예들에서, 다양한 블록들에서의 기능들은 원하는 대로 다른 블록들과 조합될 수 있다. 일부 구현예들에서, 명령 큐 엔트리 로직(523)은 어드레스 생성기의 일부로서, 또는 다른 블록들과 조합된다. 일 예에서, 명령 큐 엔트리 로직은 하나 이상의 상태 기계로서 구현된다. 그러나, 임의의 적합한 로직이 사용될 수 있다. 일부 구현예들에서, 명령 큐 엔트리 로직(523)은 주문 메모리 액세스 요청들이 사용되도록 서브 큐 제어를 제공하고 하나의 서브 큐가 다른 서브 큐에 엔트리들을 푸시할 수 있게 한다. 예를 들어, 명령 큐 엔트리 로직(523)은 하나의 서브 큐로부터 다른 서브 큐로의 피드백 구조를 포함하고, 이는 엔트리가 전달될 수 있음을 나타내고, 구조는 엔트리를 다른 명령 서브 큐 내에 배치한다는 것을 나타낸다.
인터페이스(512)는 외부 버스를 통한 데이터 패브릭(250)에 대한 제1 양방향 접속을 갖고, 출력을 갖는다. 메모리 컨트롤러(500)에서, 이러한 외부 버스는 "AXI4"로 알려진, 영국 캠브리지 소재의 에이알엠 홀딩스, 피엘씨(ARM Holdings, PLC)에 의해 지정된 진보된 확장 가능 인터페이스 버전 4와 호환되지만, 다른 실시예들에서 다른 유형들의 인터페이스들일 수 있다. 인터페이스(512)는 FCLK(또는 MEMCLK) 도메인으로 알려진 제1 클록 도메인으로부터 UCLK 도메인으로 알려진 메모리 컨트롤러(500)의 내부에 있는 제2 클록 도메인으로 메모리 액세스 요청들을 옮긴다. 유사하게, 큐(514)는 UCLK 도메인으로부터 DFI 인터페이스와 연관된 DFICLK 도메인으로 메모리 액세스들을 제공한다.
어드레스 생성기(522)는 AXI4 버스를 통해 데이터 직물(250)로부터 수신된 메모리 액세스 요청들의 어드레스들을 디코딩한다. 메모리 액세스 요청들은 정규화된 포맷으로 표현되는 물리적 어드레스 공간에서의 액세스 어드레스들을 포함한다. 어드레스 생성기(522)는 정규화된 어드레스들을, 메모리 시스템(120) 내의 실제 메모리 디바이스들을 어드레싱하는 데뿐만 아니라, 관련 액세스들을 효율적으로 스케줄링하는 데 사용될 수 있는 포맷으로 변환한다. 이러한 포맷은 메모리 액세스 요청을 특정 랭크, 로우 어드레스(row address), 컬럼 어드레스(column address), 뱅크 어드레스, 및 뱅크 그룹과 연관시키는 영역 식별자를 포함한다. 시동 시에, 시스템 BIOS는 메모리 시스템(120) 내의 메모리 디바이스들에 질의하여 그들의 크기 및 구성을 결정하고, 어드레스 생성기(522)와 연관된 구성 레지스터들의 세트를 프로그래밍한다. 어드레스 생성기(522)는 구성 레지스터들에 저장된 구성을 사용하여 정규화된 어드레스들을 적절한 포맷으로 변환한다. 명령 서브 큐(520) 및 명령 서브 큐(521)는, 명령 큐 엔트리 로직(523)에 의해 제공되는 바와 같이, CPU 코어들(212 및 214) 및 그래픽 코어(220)와 같은 데이터 처리 시스템(100)에서 메모리 액세스 제품들로부터 수신된 메모리 액세스 요청들의 각각의 큐이다. 명령 서브 큐(520)는 어드레스 생성기(522)에 의해 디코딩된 어드레스 필드들뿐만 아니라, 액세스 유형 및 서비스 품질(QoS) 식별자들을 포함하여, 아비터(538)가 메모리 액세스들을 효율적으로 선택할 수 있게 하는 다른 어드레스 정보를 저장한다. 이와 같이, 명령 서브 큐(521)는 어드레스 생성기(522)에 의해 디코딩된 어드레스 필드들뿐만 아니라, 액세스 유형 및 서비스 품질(QoS) 식별자들을 포함하여, 대응하는 아비터(539)가 메모리 액세스들을 효율적으로 선택할 수 있게 하는 다른 어드레스 정보를 저장한다. CAM(524) 및 CAM(529)은 기입 후 기입(WAW) 및 기입 후 판독(RAW) 순서화 규칙들과 같은 순서화 규칙들을 시행하기 위한 정보를 포함한다.
재생 큐(530)는 어드레스 및 명령 패리티 응답과 같은 응답을 기다리는 아비터(538) 및 아비터(539)에 의해 픽업된 메모리에 액세스하는 임시 큐이며, DDR4 DRAM에 대한 순환 중복 검사(CRC) 응답을 기입하고 GDDR5 DRAM에 대한 RCC 응답을 판독한다. 일부 구현예에서, 각각의 명령 큐/아비터 쌍에 대해, 재생 큐(530)는, 반환된 ECC가 정확하는지 또는 오류를 나타내는지 여부를 결정하기 위해 ECC 체크 블록(542)에 액세스한다. 재생 큐(530)는 이러한 사이클들 중 하나의 패리티 또는 CRC 오류의 경우에 액세스들이 재생될 수 있게 한다. 다른 구현예들에서, 재생 메커니즘들은 각각의 명령 서브 큐/아비터 쌍에 대해 인스턴스화된다.
리프레시 로직(532)은 메모리 액세싱 에이전트들로부터 수신된 정상 판독 및 기입 메모리 액세스 요청들과는 별도로 생성되는 다양한 파워다운, 리프레시, 및 종료 저항(ZQ) 교정 사이클들을 위한 상태 머신들을 포함한다. 예를 들어, 메모리 랭크가 프리차지 파워다운에 있는 경우, 그것은 리프레시 사이클들을 실행하기 위해 주기적으로 깨어나야 한다. 리프레시 로직(532)은 DRAM 칩들 내의 메모리 셀들의 저장 커패시터들로부터의 전하 누설에 의해 야기되는 데이터 에러들을 방지하기 위해 주기적으로 리프레시 명령들을 생성한다. 게다가, 리프레시 로직(532)은 시스템에서의 열 변화들로 인한 온-다이 종료 저항에 있어서의 미스매치를 방지하기 위해 ZQ를 주기적으로 교정한다. 리프레시 로직(532)은 또한 DRAM 디바이스들을 상이한 전력 다운 모드들에 놓는다고 결정한다.
아비터(538)는 명령 서브 큐(520)에 양방향으로 연결되고, 아비터(539)는 명령 서브 큐(521)에 양방향으로 연결된다. 각각의 아비터는, 메모리 버스의 사용을 개선하기 위해, 이전 시스템들에 비해 더 작은 명령 큐로부터 액세스들의 지능적 스케줄링을 지능적으로 스케줄링하는 효율을 향상시키고, 각각의 아비터(538) 및 아비터(539)는 명령 서브 큐(520) 및/또는 명령 서브 큐(521)에서의 특정 액세스들이 DRAM 타이밍 파라미터들에 기초한 발행에 적격인지 여부를 결정함으로써 타이밍 블록(534)을 이용한다. 예를 들어, 각각의 DRAM은, "tRC"로 알려진, 동일 뱅크에 대한 활성화 명령들 사이의 최소 지정된 시간을 갖는다. 타이밍 블록(534)은 이것 및 JEDEC 사양에서 지정된 다른 타이밍 파라미터들에 기초하여 적격성을 결정하는 카운터들의 세트를 유지하고, 리플레이 큐(530)에 양방향으로 접속된다. 예를 들어, 각각의 DRAM은, "tRCD"로 알려진, 활성화 명령(또는 로우 명령) 및 컬럼 명령 사이의 최소 지정된 시간을 갖는다. 아비터(538) 및 아비터(539)는 각각의 CMD의 적격성을 결정하기 위해 타이밍 블록(534)에서 카운터를 사용한다. 페이지 테이블(536)은 아비터(538) 및 아비터(539)에 대한 메모리 채널의 각각의 뱅크 및 랭크에서의 활성 페이지들에 관한 상태 정보를 유지하고, 리플레이 큐(530)에 양방향으로 접속된다.
인터페이스(512)로부터 수신된 기입 메모리 액세스 요청들에 응답하여, ECC 생성 블록(544)은 기입 데이터에 따라 ECC를 계산한다. DB(546)는 수신된 메모리 액세스 요청들에 대한 기입 데이터 및 ECC를 저장한다. 이는 아래에서 더 설명되는 바와 같이, 각각의 아비터(538) 또는 아비터(539)에 의해 선택된 명령에 기초하여, 선택기(541)가 명령 서브 큐(520) 또는 명령 서브 큐(521) 중 어느 하나로부터 대응하는 기입 액세스를 픽업할 때, 결합된 기입 데이터/ECC를 큐(514)를 출력한다.
전력 컨트롤러(550)는 일반적으로 진보된 확장 가능 인터페이스 버전 1(AXI)에 대한 인터페이스(552), APB 인터페이스(554), 및 전력 엔진(560)을 포함한다. 인터페이스(552)는 도 5에 별도로 도시된 "EVENT_n"으로 라벨링된 이벤트 신호를 수신하기 위한 입력, 및 출력을 포함하는, SMN에 대한 제1 양방향 접속을 갖는다. APB 인터페이스(554)는 인터페이스(552)의 출력에 접속된 입력, 및 APB를 통한 PHY에 대한 접속을 위한 출력을 갖는다. 전력 엔진(560)은 인터페이스(552)의 출력에 접속된 입력, 및 큐(514)의 입력에 접속된 출력을 갖는다. 전력 엔진(560)은 구성 레지스터들(562)의 세트, 마이크로컨트롤러(μC)(564), 셀프 리프레시 컨트롤러(SLFREF/PE)(566), 및 신뢰성 있는 판독/기입 트레이닝 엔진(RRW/TE)(568)(일부 구현에서는 마이크로 컨트롤러로 구현됨)을 포함한다. 구성 레지스터들(562)은 AXI 버스를 통해 프로그래밍되고, 메모리 컨트롤러(500) 내의 다양한 블록들의 동작을 제어하기 위한 구성 정보를 저장한다. 따라서, 구성 레지스터들(562)은 도 5에 상세히 도시되지 않은 이러한 블록들에 접속된 출력들을 갖는다. 셀프 리프레시 컨트롤러(566)는 리프레시 로직(532)에 의한 리프레시들의 자동 생성에 더하여 리프레시들의 수동 생성을 가능하게 하는 엔진이다. 신뢰성 있는 판독/기입 트레이닝 엔진(568)은 DDR 인터페이스 판독 레이턴시 트레이닝 및 루프백 테스팅과 같은 목적들을 위해 메모리 또는 I/O 디바이스들에 연속적인 메모리 액세스 스트림을 제공한다.
메모리 채널 컨트롤러(510)는 그것이 연관된 메모리 채널로의 디스패치를 위한 메모리 액세스들을 선택할 수 있게 하는 회로부를 포함한다. 원하는 중재 결정들을 행하기 위해, 어드레스 생성기(522)는 어드레스 정보를, 메모리 시스템 내의 랭크, 로우 어드레스, 컬럼 어드레스, 뱅크 어드레스, 및 뱅크 그룹을 포함하는 프리디코딩된 정보로 디코딩하고, 명령 서브 큐(520) 및 명령 서브 큐(521)는 프리디코딩된 정보를 저장한다. 구성 레지스터들(562)은 어드레스 생성기(522)가 수신된 어드레스 정보를 어떻게 디코딩하는지를 결정하기 위한 구성 정보를 저장한다. 명령 서브 큐(520)에서의 엔트리들의 경우, QoS 요건들과 같은 다른 기준들을 관찰하면서, 디코딩된 어드레스 정보, 타이밍 블록(534)에 의해 표시된 타이밍 적격성 정보, 및 페이지 테이블(536)에 의해 표시된 활성 페이지 정보를 사용하여, QoS 요건들과 같은 다른 기준들을 관찰하는 동안, "위닝"메모리 액세스를 효율적으로 제공한다. 예를 들어, 아비터(538)는 메모리 페이지들을 변경하기 위해 요구되는 프리차지 및 활성화 명령들의 오버헤드를 회피하기 위해 개방된 페이지들에 대한 액세스들에 대한 선호를 구현하고, 하나의 뱅크에 대한 오버헤드 액세스들을, 다른 뱅크에 대한 판독 및 기입 액세스들과 그들을 인터리빙하는 것에 의해 숨긴다. 특히 정상 동작 동안, 아비터(538)는 보통, 페이지들이 상이한 페이지를 선택하기 전에 프리차지되도록 요구될 때까지, 페이지들을 상이한 뱅크들에서 개방된 채로 유지하도록 결정할 수 있다. 아비터(539)는 아비터(538)과 동일한 방식으로 동작하고, 선택기(541)에 대한 "위닝" 메모리 액세스를 제공한다. 선택기(541)는 제1 명령 서브 큐(520) 및 명령 서브 큐(521)로부터의 메모리 액세스 요청으로부터 제공된 메모리 액세스 요청 중에서 바람직한 메모리 액세스 요청(543)을 선택한다. 선택기(541)는 서브 채널에 따라 복수의 메모리 채널들 중 하나에 선택된 바람직한 선택된 메모리 액세스 요청을 디스패치한다. 일례에서, 선택기(541)는 멀티플렉서 회로를 포함한다. 그러나, 임의의 적합한 로직이 사용될 수 있다.
어드레스 생성기(522)는 디코딩된 서브 채널 번호를 포함하는 디코딩된 메모리 액세스 요청을 명령 서브 큐(520) 및 서브 명령 큐(521)를 전송한다. 명령 서브 큐(520)는, 디코딩된 서브 채널 번호를 저장하기 위한 제1 필드, 및 전술한 바와 같이 디코딩된 메모리 액세스 요청의 나머지를 저장하기 위한 제2 필드를 갖는, 명령 서브 큐(520)의 엔트리에 디코딩된 메모리 액세스 요청을 저장한다. 유사하게, 명령 서브 큐(521)는, 디코딩된 서브 채널 번호를 저장하기 위한 제1 필드, 및 디코딩된 메모리 액세스 요청의 나머지를 저장하기 위한 제2 필드를 갖는, 명령 서브 큐(521)의 엔트리에 디코딩된 메모리 액세스 요청을 저장한다.
아비터(538)는 명령 서브 큐(520)에 양방향으로 연결되고 타이밍 블록(534)을 사용하여 명령 서브 큐(520)의 특정 액세스가 DRAM 타이밍 파라미터에 기초한 발행에 적격인지 여부를 결정함으로써 적절한 타이밍 관계를 시행한다. 아비터(538)는 그것이 사용하는 미리 결정된 기준에 따라 명령 서브 큐(520)로부터 적격의 메모리 액세스 요청을 픽업한다. 유사하게, 아비터(539)는 명령 서브 큐(521)에 양방향으로 연결되고 타이밍 블록(534)을 사용하여 명령 서브 큐(521)의 특정 액세스가 DRAM 타이밍 파라미터에 기초한 발행에 적격인지 여부를 결정함으로써 적절한 타이밍 관계를 시행한다. 아비터(538)는 그것이 사용하는 미리 결정된 기준에 따라 명령 서브 큐(521)로부터 적격의 메모리 액세스 요청을 픽업한다. 이러한 미리 결정된 기준의 예는 위에서 설명되어 있으며 실시예들 사이에서 다양할 수 있다.
도 6 내지 9는 명령 서브 큐 및 대응하는 아비터 구성들의 다양한 비제한적인 예들을 도시한다. 그러나, 이들은 일부 예들이고 다른 구성들이 고려된다는 것이 인식될 것이다. 항상 도시되지는 않았지만, 본원에 설명된 바와 같은 아비터들(도 5의 것들을 포함함)은 JEDEC 사양을 준수하기 위해 필요한 것과 같은 우선순위 정보, PGT 정보, 타이밍 정보 및 다른 정보를 획득하거나, 또는 임의의 다른 적합한 기준들을 획득한다.
도 6은 메모리 채널 컨트롤러를 갖는 메모리 컨트롤러의 예를 예시하며, 여기서 메모리 채널 컨트롤러는 명령 서브 큐 및 대응하는 아비터의 그룹들을 포함한다. 명령 서브 큐/아비터 모듈들(525 및 527)로서 도시된 명령 서브 큐 및 대응하는 아비터의 그룹들. 대응하는 중재는 전술한 기준과 같은 미리 결정된 기준에 따라 각각의 명령 서브 큐로부터 메모리 액세스 명령를 선택한다. 명령 큐 엔트리 로직(523)은 명령 서브 큐와 통신하고 메모리 액세스 요청들을 명령 서브 큐(520) 및 명령 서브 큐(527)로 배치한다. 일 예에서, 명령 큐 엔트리 로직(523)은 하나 이상의 상태 기계로서 구현된다. 일부 예들에서, 명령 큐 엔트리 로직은 CPU 또는 GPU에 의해 프로그래밍되는 프로그래밍 가능한 제어 레지스터를 포함하고, 명령 큐 엔트리 로직(523)을 설정하여 특정 방식으로 명령 서브 큐 중에서 판독 및 기입 요청과 같은 메모리 액세스 요청을 분류한다. 일 예에서, 명령 큐 엔트리 로직(523)은 상이한 명령 서브 큐 내의 하나의 명령 서브 큐 및 기입 요청들에 판독 요청들을 분류한다. 다른 구현예들에서, 판독 및 기입들은 명령 서브 큐 내에서 혼합된다. 일부 구현예들에서, 엔트리들은 명령 서브 큐 사이에서 전달된다. 일부 구현예에서, 프로그래밍 가능한 제어 레지스터는 또한 아래에서 추가로 언급되는 바와 같이 다양한 수준의 중재에 대한 임계값을 설정하는 데 사용된다.
일 예시의 각각의 아비터(538, 539)는, 선택기(541)에 제공되는 위닝 메모리 액세스 요청(606 및 608)을 선택하기 위해, JEDEC 사양 기준에 기초하여 중재하고 페이지 테이블(PGT) 정보(600), 타이밍 정보(602) 및 우선순위 정보(604)(예를 들어, 낮음, 중간, 높음, 긴급)를 평가한다.
예를 들어, PGT 정보(600)는 DRAM 페이지가 개방되는지(즉, 활성화되었는지) 또는 폐쇄 상태인지(즉, 이것이 사전 충전되었음을 의미함)를 나타내며, 따라서 뱅크 상의 페이지가 개방되지 않는다. 타이밍 정보(602)는, 일 예에서, 위에서 언급된 Trc, Trcd 등을 지칭한다. 우선순위 정보(604)는 요청이 낮거나, 중간, 높거나 또는 긴급한 것인지 여부에 대한 우선순위의 레벨이다.
페이지 히트(PH)는 필요한 페이지가 DRAM 디바이스의 감지 증폭기에서 이미 "활성"이고 그 선이 직접 판독 또는 기입될 수 있음을 의미한다. 이것은 최저 지연 시나리오이다. 페이지 미스(PM)는 필요한 페이지가 DRAM 감지 증폭기에서 개방되지 않고 따라서 "활성화될"필요가 있다는 것을 의미하고, 그 다음 액세스를 위한 페이지 히트가 될 때까지 Trcd를 기다린다. 이것은 중간 지연 반응이다. 페이지 충돌(PC)은, 빠져나가는 페이지가 사전-충전될 필요가 있도록 해당 DRAM 뱅크에서 개방된 현재 페이지가 아닌 페이지를 의미하고, 이어서 새로운 페이지들이 활성화될 필요가 있다는 것을 기다린 다음, 그것은 페이지 히트가 된다. - 이것은 가장 높은 지연 오버헤드이다.
제1 레벨 중재는 제2 레벨 중재 로직(612)으로 전달하기 위한 위닝 엔트리를 선택하기 위해 아비터(538 및 539) 각각에 의해 수행된다. 예를 들어, 아비터(538 및 539)는 각각의 서브 큐 내의 메모리 액세스 명령를 선택하는 것으로, 각각의 명령 서브 큐 내의 모든 엔트리들에서 우선순위 정보(604)에 기초하여 가장 높은 우선순위를 갖는 명령과 같은 특정 기준들을 충족시킨다. 타이밍 의존성들은 타이밍 정보(602)(예컨대, 타이밍 OK 정보)에 의해 표시된 바와 같은 명령에 대해 해결되고, 또한 명령에 대해 검출되고 페이지 테이블 정보(600)에 의해 표시된 페이지 테이블 히트가 있어야 한다. 명령어가 이 기준을 충족하지 않는 경우, 서브 큐 또는 임의의 다른 적합한 기준에서 가장 오래된 명령과 같은 위닝 명령을 선택하기 위해 다른 기준이 사용된다.
선택기(541)는 멀티플렉서(610) 및 제2 레벨 중재 로직(612)을 포함한다. 멀티플렉서(610)는 제2 레벨 중재 로직(612)에 의해 결정된 바와 같은 타이밍 임계치들 및 다른 기준들과 같은 기준들에 기초하여 2개의 명령 서브 큐 중 하나로부터 위닝 메모리 액세스 요청들 중 하나를 선택한다. 일 예에서 제2 레벨 중재 로직(612)은 하나 이상의 상태 머신들로서 구현되지만, 프로그래밍된 프로세서들 또는 임의의 다른 적절한 로직을 포함하는 임의의 적합한 로직이 사용될 수 있다. 이와 같이, 이 예에서, 제2 레벨 중재 로직(612)은, 타이밍 정보, 페이지 히트 정보 및 다른 정보와 같은 생성된 또는 미리 저장된 기준들에 기초하여 명령 서브 큐 및 대응하는 아비터 그룹들의 각각의 인스턴스의 위너 사이에서 하나의 위너를 픽업한다. 예를 들어, 페이지 히트들은 페이지 미스들에 비해 선호된다. 일부 구현예들에서, 위닝 메모리 액세스 요청들(606 또는 608) 중 하나가 페이지 히트인 경우, 그 메모리 액세스 요청은 예를 들어, 다른 메모리 액세스 요청이 메모리(예를 들어, 페이지 미스)의 로우를 활성화 및 사전 충전하는 것을 요구하는 메모리 액세스 요청에 대한 것인 경우, 바람직한 메모리 액세스 요청(543)으로서 선택된다. 일부 구현예들에서, 메모리 액세스 요청들이 모두 페이지 히트들을 갖는 경우, 제2 레벨 중재 로직(612)은 가장 높은 우선순위를 갖는 메모리 액세스 요청을 선택한다. 일부 구현예들에서, 메모리 액세스 요청들(606 및 608) 둘 모두가 페이지 히트들을 갖고 모두 동일한 레벨의 우선순위를 갖는 경우, 제2 레벨 중재 로직(612)은 바람직한 메모리 액세스 요청으로서 이전 메모리 액세스 요청을 선택한다. 이들은 예들이며, 임의의 적합한 선택 기준이 사용될 수 있다는 것이 인식될 것이다.
일부 구현예들에서, 엔트리들은 화살표(614)와 같은 점선 화살표들에 의해 도시된 바와 같이 명령 서브 큐 사이에서 전달된다. 일부 구현예들에서, 명령 서브 큐들은 가장 오래된 엔트리가 각각의 서브 큐의 끝에 있도록 순서 방식으로 동작된다. 이 예에서 명령 큐 엔트리 로직(523)은, 엔트리가 개방 엔트리를 갖는 명령 서브 큐로 전달될 수 있다는 것을 다른 명령 서브 큐로부터 다른 명령 서브 큐로부터 피드백을 제공한다. 다른 구현예들에서, 순서외 동작이 제공된다.
도 7은 다수의 명령 서브 큐/아비터 모듈들(525 및 527)이 기입 서브 큐들로서 구성되는 반면, 추가적인 명령 서브 큐들(700 및 702)(예를 들어, 명령 서브 큐/아비터 모듈들)이 판독 서브 큐들로서 구성되는 다른 예시적인 구현예(701)를 도시한다. 예를 들어, 구현예(701)는 전용 기입 명령 서브 큐 및 전용 판독 명령 서브 큐를 사용한다. 이 예에서 제2 레벨 중재 로직(612)은 기입 액세스 요청이 선택되는지를 결정하기 위한 타이밍 기준과 같은 기준을 사용하고, 이 예에서 도 1의 선택기(541)로서 역할을 하는 제3 선택기(704)로 판독 요청이 선택되고 출력된다. 이와 같이, 이 예에서, 4개의 명령 서브 큐들 및 4개의 대응하는 아비터, 2개의 제2 레벨 아비터 로직 섹션들, 선택기들(706, 708), 및 제3 선택기(704)가 있다. 선택기(704)는 제1 선택기(706) 또는 선택기(708) 중 어느 하나로부터 메모리 요청들을 선택하고, 선택된 메모리 액세스 요청을 하나 이상의 서브 채널들로의 선택된 메모리 액세스 요청으로 전송한다. 이 예에서, 선택기(706 및 708).
이 예에서, 선택기(704)는 멀티플렉서(710)를 통한 바람직한 메모리 액세스 요청으로서 판독 요청 또는 기입 요청이 선택되는지 여부를 선택하기 위해 제어 레지스터에 저장된 기입 임계값 및 판독 임계치를 사용한다. 일부 구현예들에서, 판독 요청들은 기입 요청들에 비해 선호된다. 기입 임계값 및 판독 임계값들은 버스를 판독 동작과 기입 동작 사이에서 스위칭할 때 데이터 버스 상의 충돌을 피하도록 설정된다. 예를 들어, 판독 임계치는 버스가 기입 동작으로 스위칭되기 전에 수행하기 위한 연속적인 판독들의 수이고, 기입 임계치는 버스가 판독 동작들을 수행하기 위해 스위칭되기 전에 발생할 수 있는 연속적인 기입들의 수이다. 또한 이 예에서, 명령 큐 엔트리 로직(523)은 주소 생성기(522)로부터 수신된 메모리 액세스 요청들을 상이한 명령 서브 큐(525, 527, 700, 702)로 분류하여, 명령 서브 큐(525)가 기입 요청들을 포함하고 명령 서브 큐(700)가 판독 요청들만을 수신한다. 유사하게, 명령 큐 엔트리 로직(523)은 메모리 액세스 요청들을 분류하여 기입 요청들만이 명령 서브 큐(527)에 저장되고, 판독 요청들만이 명령 서브 큐(702)에 저장된다. 이 예에서, 아비터(538 및 539)는 기입 요청과 관련된 타이밍 정보 뿐만 아니라 전술한 다른 요구된 정보를 평가하는 동일한 유형의 중재제로 구성되는 반면, 아비터(714 및 716)는 판독 요청의 목적을 중재하고 메모리 액세스 판독 요청을 적절하게 처리하는 데 필요한 타이밍 정보를 고려하도록 구성된다.
도 8은 각각의 명령 서브 큐들(800, 802)이 메모리 액세스 요청들만을 읽거나 기입하는 대신에 판독 및 기입 메모리 액세스 요청들 둘 다를 저장하고, 명령 서브 큐(804, 806) 각각이 판독 및 기입 메모리 액세스 요청들 둘 모두를 또한 저장하도록 각각의 서브 채널에 대해 판독 및 기입 큐들이 사용되는 다른 예시적인 메모리 채널 컨트롤러 구성을 도시한다.
도 9는 메모리의 각 서브 채널에 전용되는 도 7에 도시된 구조의 다수의 인스턴스를 포함하는 다른 예시적인 구현예를 도시한다. 이와 같이, 이 예에서, 서브 채널 당 전용인 전용 판독 및 기입 명령 서브 큐가 존재한다. 예를 들어, 서브 채널 0에 대한 다수의 명령 기입 서브 큐(900 및 902), 및 서브 채널 1에 대한 기입 명령 서브 큐(904 및 906)가 있다. 이와 같이, 서브 채널 0 전용의 다수의 명령 판독 서브 큐(908 및 910)가 있고, 서브 채널 1에 대한 명령 기입 서브 큐(912 및 914)가 있다. 명령 서브 큐 각각은 도시된 바와 같이 대응하는 전용 아비터를 갖는다.
도 10은 복수의 메모리 채널들을 갖는 메모리 시스템을 컨트롤러를 위한 예시적인 방법(1000)을 도시한다. 특정 구현예에서, 방법은 도 5 내지 도 9에 도시된 구조에 의해 수행된다. 특정 구현예들에서, 방법은, 예를 들어, 어드레스 생성기(522)에 의해, 그리고 어드레스 생성기(522)에 의해, 메모리 액세스 요청들 각각에 의해, 메모리 액세스 요청들(1002)을 수신하는 단계를 포함한다. DDRx 메모리가 사용되는 구현예들에서, 방법은 블록(1004)에 도시된 바와 같이, 어드레스들을 메모리 시스템 내의 메모리 디바이스들의 복수의 서브 채널들의 뱅크, 랭크, 및 서브 채널로 디코딩하는 단계를 포함한다. 방법은 디코딩된 어드레스들을 복수의 명령 서브 큐 중 하나에 저장하는 단계를 포함한다. DDRx 메모리가 사용되는 구현예에서, 방법은, 예컨대, 명령 큐 엔트리 로직(523)에 의해, 뱅크, 랭크, 및 적어도 제1 명령 서브 큐 또는 적어도 제2 명령 서브 큐 내의 서브 채널을 포함하는 메모리 액세스 요청을 저장하는 단계를 포함한다. 동작(1004 및 1006)은 뱅크 및 랭크 명칭을 사용하지 않는 메모리가 사용되는 경우에 수행될 필요가 없다. 특정 구현예들에서, 제1 명령 서브 큐가 판독 요청들만을 포함하고 제2 명령 서브 큐가 기입 요청들만을 포함하지만 다른 구현예들에서 다른 분류 기준들이 사용되도록 메모리 액세스 요청들을 상이한 명령 서브 큐 내에 저장하는 것을 포함한다. 일부 구현예에서, 명령 서브 큐 사이에서 엔트리를 전송하는 것을 포함한다. 방법은, 제1 명령 서브 큐로부터 선택된 제1 메모리 액세스 요청을 제공하기 위해 아비터(538)에 의한 것과 같은 미리 결정된 기준을 사용하여 제1 명령 서브 큐의 복수의 메모리 액세스 요청 중에서 선택하는 단계(1008), 및 제2 명령 서브 큐로부터 선택된 제2 메모리 액세스 요청을 제공하기 위해 아비터(539)에 의한 것과 같은 미리 결정된 기준을 사용하여 제2 명령 서브 큐의 복수의 메모리 액세스 요청 중에서 선택하는 단계(1010)를 포함한다. 방법은, 제1 명령 서브 큐 및 제2 메모리 액세스 요청으로부터 제1 명령 서브 큐 및 제2 메모리 액세스 요청으로부터 선택기(54,1)로부터 선택된 메모리 액세스 요청과 같은 바람직한 메모리 액세스 요청을 선택하는 단계, 및 서브 채널에 따라 복수의 메모리 채널들 중 하나에 선택된 메모리 액세스 요청을 디스패치(1014)하는 단계를 포함한다. 본원에 제공된 방법은 하나의 예이고, 동작들이 조합될 수 있고, 그 순서가 변경될 수 있고, 다른 변형들이 원하는 동작에 따라 이루어질 수 있다는 것이 인식될 것이다.
하나 이상의 구현예는 종래의 명령 큐보다 작은 전용 명령 서브 큐 및 대응하는 아비터를 이용한다. 예를 들어, 더 작은 명령 큐들 각각을 서비스하기 위한 다수의 32개의 엔트리 명령 큐들 및 대응하는 아비터들이 더 큰 64개의 엔트리 명령 큐 대신 본원에서 일부 구현예들에서 이용된다. 중재 및 타이밍 결정은 훨씬 더 빠른 방식으로 이루어지고 (예를 들어, 더 높은 클록 주파수가 사용됨), 메모리 컨트롤러 속도를 개선하고 메모리 컨트롤러를 포함하는 집적 회로의 데이터 처리량을 개선한다.
도 5의 메모리 컨트롤러(500)는 하드웨어 및 소프트웨어의 다양한 조합으로 구현될 수 있다. 이 하드웨어 회로는 우선순위 인코더들, 유한 상태 기계, 프로그래밍 가능한 로직 어레이(PLA) 등을 포함할 수 있다. 일부 실시예들에서, 다른 기능 블록들은 소프트웨어의 제어 하에서 데이터 프로세서에 의해 수행될 수 있다. 소프트웨어 컴포넌트들 중 일부는 적어도 하나의 프로세서에 의한 실행을 위해 컴퓨터 판독가능 저장 매체에 저장될 수 있고, 비일시적 컴퓨터 메모리 또는 컴퓨터 판독가능 저장 매체에 저장된 명령들에 대응할 수 있다. 여러 실시예에서, 비일시적 컴퓨터 판독가능 저장 매체는 자기 또는 광학 디스크 저장 디바이스, 플래시 메모리, 또는 다른 비휘발성 메모리 디바이스 또는 디바이스와 같은 솔리드 스테이트 저장 디바이스를 포함한다. 비일시적 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 판독 가능 명령어는 하나 이상의 프로세서에 의해 해석고/되거나 실행 가능한 소스 코드, 어셈블리 언어 코드, 객체 코드, 또는 다른 명령어 포맷일 수 있다.
도 5의 메모리 컨트롤러(500), 또는 그의 임의의 부분들은 프로그램에 의해 판독될 수 있고 집적 회로들을 제조하기 위해 직접적으로 또는 간접적으로 사용될 수 있는 데이터베이스 또는 다른 데이터 구조의 형태로 컴퓨터 액세스 가능 데이터 구조에 의해 설명되거나 표현될 수 있다. 예를 들어, 이러한 데이터 구조는 Verilog 또는 VHDL과 같은 고레벨 설계 언어(HDL)에서의 하드웨어 기능의 거동-레벨 설명 또는 레지스터-전송 레벨(RTL) 설명일 수 있다. 설명은 합성 라이브러리로부터 게이트들의 리스트를 포함하는 네트리스트를 생성하기 위해 설명을 합성할 수 있는 합성 도구에 의해 판독될 수 있다. 네트리스트는 집적 회로들을 포함하는 하드웨어의 기능을 또한 나타내는 게이트들의 세트를 포함한다. 이어서 네트리스트는 마스크들에 적용될 기하학적 형상들을 설명하는 데이터 세트를 생성하도록 배치 및 라우팅될 수 있다. 이어서 마스크들은 집적 회로들을 생성하기 위해 다양한 반도체 제조 단계들에서 사용될 수 있다. 대안적으로, 컴퓨터 액세스 가능 저장 매체 상의 데이터베이스는, 원하는 바에 따라, 네트리스트(합성 라이브러리를 갖거나 갖지 않음) 또는 데이터 세트, 또는 그래픽 데이터 시스템(GDS) II 데이터일 수 있다.
특정 실시예들이 설명되었지만, 이러한 실시예들에 대한 다양한 수정들이 당업자에게 명백할 것이다. 예를 들어, 메모리 컨트롤러(500)는 다른 유형의 DIMM뿐만 아니라 고대역폭 메모리(HBM), RDRAM(RAMbus DRAM) 등과 같은 DDRx 메모리 외에 다른 유형의 메모리에 인터페이스할 수 있다. 메모리 컨트롤러는 네트워크 컨트롤러, 하드 구동 컨트롤러 및 다른 디바이스에 통합될 수 있다. DDR 메모리에 유용한 메모리 어드레싱 및 제어 신호들을 설명하는 예시된 실시예는 사용되는 메모리의 유형에 따라 달라질 것이다. 또한, 도 6의 메모리 액세스 제어는 2개 초과의 가상 채널들로 스케일링될 수 있다.
따라서, 첨부된 청구항들에 의해 개시된 실시예들의 범위에 속하는 개시된 실시예들의 모든 수정들을 포함하는 것이 의도된다.
특징 및 엘리먼트가 특정 조합으로 위에서 설명되었지만, 각각의 특징 또는 엘리먼트는 다른 특징 및 엘리먼트 없이 단독으로 또는 다른 특징 및 엘리먼트를 갖거나 갖지 않는 다양한 조합으로 사용될 수 있다. 일부 구현에서 본 명세서에 설명된 장치는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비일시적 컴퓨터 판독가능 스토리지 매체에 통합된 컴퓨터 프로그램, 소프트웨어 또는 펌웨어를 사용하여 제조된다. 컴퓨터 판독 가능 스토리지 매체의 예로는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 내부 하드 디스크 및 이동식 디스크와 같은 자기 매체, 자기 광학 매체, CD-ROM 디스크 및 디지털 다목적 디스크(DVD)와 같은 광학 매체를 포함한다.
다양한 실시예의 선행하는 상세한 설명에서, 이의 일부를 형성하고 본 발명이 실시될 수 있는 특정 바람직한 실시예의 예로서 도시된 첨부 도면이 참조되었다. 이들 실시예는 당업자가 본 발명을 실시할 수 있게 하기에 충분히 상세하게 설명되며, 다른 실시예가 이용될 수 있고, 본 발명의 범위를 벗어나지 않고 논리적, 기계적 및 전기적 변화가 이루어질 수 있음을 이해해야 한다. 당업자가 본 발명을 실시할 수 있게 하기 위해 상세하지 않은 것을 피하기 위해, 설명은 당업자에게 알려진 특정 정보를 생략할 수 있다. 또한, 본 개시내용의 교시를 포함하는 많은 다른 다양한 실시예는 당업자에 의해 용이하게 구성될 수 있다. 따라서, 본 발명은 본원에 제시된 특정 형태로 제한되도록 의도되지 않으며, 반대로 본 발명의 범위 내에 합리적으로 포함될 수 있는 바와 같이 이러한 대안, 변형 및 등가물을 포함하고자 한다. 따라서, 전술한 상세한 설명은 제한적인 의미로 취해지지 않아야 하며, 본 발명의 범위는 첨부된 청구범위에 의해서만 정의된다. 본 명세서에 설명된 실시예들 및 실시예들에 대한 상기 상세한 설명은 단지 예시 및 설명을 위해 제시되었으며 제한이 아니다. 예를 들어, 설명된 동작들은 임의의 적절한 순서 또는 방식으로 수행된다. 따라서, 본 발명은 본원에 개시되고 청구된 기본적인 기본 원리의 범위 내에 속하는 임의의 및 모든 수정, 변형 또는 등가물을 포함하는 것으로 고려된다.
상기 상세한 설명 및 본원에 설명된 예는 제한이 아닌 예시 및 설명의 목적으로 제시되었다.
Claims (20)
- 복수의 메모리 채널들을 갖는 메모리 시스템을 제어하는 방법으로서,
제1 명령 서브 큐에서 메모리 액세스 요청을 선택하는 단계;
제2 명령 서브 큐에서 메모리 액세스 요청을 선택하는 단계;
상기 제1 메모리 액세스 요청 및 상기 제2 메모리 액세스 요청 중에서 메모리 액세스 요청을 선택하는 단계; 및
상기 선택된 메모리 액세스 요청을 메모리 채널로 디스패칭하는 단계를 포함하는, 방법. - 제1항에 있어서,
상기 제1 명령 서브 큐가 판독 요청들만을 포함하고 상기 제2 명령 서브 큐가 기입 요청들만을 포함하도록 메모리 액세스 요청들을 상이한 명령 서브 큐들로 분류하는 단계를 포함하는, 방법. - 제1항에 있어서,
상기 수신된 메모리 액세스 요청들 각각을 상기 메모리 시스템 내의 메모리 디바이스들의 복수의 서브 채널들 중 뱅크, 랭크, 및 서브 채널로 디코딩하는 단계; 및
상기 뱅크, 랭크, 및 서브 채널을 포함하는 메모리 액세스 요청을 제1 명령 서브 큐 또는 적어도 제2 명령 서브 큐 중 적어도 하나에 저장하는 단계를 포함하는, 방법. - 제1항에 있어서,
상기 제1 명령 서브 큐 및 상기 제2 명령 서브 큐 사이에서 메모리 액세스 요청들을 전송하는 단계를 포함하고, 상기 제1 및 제2 명령 서브 큐 각각에서 상기 메모리 액세스 요청을 선택하는 단계는 미리 결정된 섹션 기준을 사용하는 단계를 포함하는, 방법. - 제1항에 있어서,
상기 바람직한 메모리 액세스 요청을 선택하는 단계는 상기 제공된 상기 제1 명령 서브 큐로부터의 제1 메모리 액세스 요청 및 상기 제2 명령 서브 큐로부터의 제2 메모리 액세스 요청 중에서 가장 오래된 메모리 액세스 요청을 선택하는 단계를 포함하는, 방법. - 메모리 채널 컨트롤러를 갖는 메모리 컨트롤러로서, 상기 메모리 채널 컨트롤러는,
제1 명령 서브 큐 및 상기 제1 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 상기 제1 명령 서브 큐에 결합된 제1 아비터,
제2 명령 서브 큐 및 상기 제2 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 상기 제2 명령 서브 큐에 결합된 제2 아비터,
메모리 액세스 요청들을 상기 제1 명령 서브 큐 및 상기 제2 명령 서브 큐 내에 배치하도록 동작하는 명령 큐 엔트리 로직,
상기 제1 명령 서브 큐 또는 상기 제2 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 서브 채널로 전송하도록 동작하는 제1 선택기를 포함하는, 메모리 컨트롤러. - 제6항에 있어서,
상기 명령 큐 엔트리 로직은 메모리 액세스 요청들을 상이한 명령 서브 큐들로 분류하도록 구성되어, 상기 제1 명령 서브 큐가 판독 요청들만을 포함하고 상기 제2 명령 서브 큐가 기입 요청들만을 포함하도록 하는, 메모리 컨트롤러. - 제6항에 있어서,
상기 명령 큐 엔트리 로직은 상기 제1 명령 서브 큐로부터 상기 제2 명령 서브 큐로 엔트리들을 전송하도록 구성되고, 상기 명령 큐 엔트리 로직은 상기 제1 명령 서브 큐 및 상기 제2 명령 서브 큐에 동작 가능하게 결합되고, 상기 제1 선택기는 상기 제1 및 제2 아비터들에 동작 가능하게 결합되는, 메모리 컨트롤러. - 제6항에 있어서,
상기 제1 아비터와 상기 제2 아비터 사이에서 공유되는 공유 타이밍 로직 및 공유 페이지 테이블을 포함하는, 메모리 컨트롤러. - 제6항에 있어서,
미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐,
미리 결정된 기준에 따라 제4 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 저장하기 위한 제4 명령 서브 큐,
상기 제3 명령 서브 큐 또는 상기 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하도록 동작하는 상기 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기; 및
상기 제1 및 제2 선택기들에 동작가능하게 결합되고, 상기 제1 선택기 또는 상기 제2 선택기 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 복수의 서브 채널들 중 적어도 하나에 전송하도록 동작하는 제3 선택기를 포함하는, 메모리 컨트롤러 로직. - 제10항에 있어서,
상기 제1 명령 서브 큐, 제2 명령 서브 큐, 제3 명령 서브 큐, 및 제4 명령 서브 큐에 동작 가능하게 결합되고 메모리 액세스 요청들을 상이한 명령 큐들로 분류하도록 동작하여, 상기 제1 명령 서브 큐 및 제2 명령 큐는 판독 요청들만을 포함하고 상기 제3 명령 서브 큐 및 제4 명령 큐는 기입 요청들만을 포함하도록 하는 명령 큐 엔트리 로직을 포함하는, 메모리 컨트롤러. - 제6항에 있어서,
미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐,
미리 결정된 기준에 따라 제4 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 저장하기 위한 적어도 제4 명령 서브 큐, 및
상기 제3 명령 서브 큐 또는 상기 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 대응하는 서브 채널로 전송하도록 동작하는 상기 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기를 포함하고,
상기 수신된 메모리 액세스 요청들 각각을 상기 메모리 시스템 내의 메모리 디바이스들의 복수의 서브 채널들 중 뱅크, 랭크, 및 서브 채널로 디코딩하는 단계; 및
상기 뱅크, 랭크, 및 서브채널을 포함하는 메모리 액세스 요청을 제1 명령 서브 큐 또는 적어도 제2 명령 서브 큐 중 적어도 하나에 저장하는 단계를 포함하는, 메모리 컨트롤러. - 데이터 처리 시스템으로서,
메모리 액세스 요청들을 제공하기 위한 복수의 메모리 액세스 에이전트;
복수의 메모리 채널;
메모리 채널 컨트롤러를 갖는 메모리 컨트롤러를 포함하고, 상기 메모리 채널 컨트롤러는,
메모리 액세스 요청들을 저장하기 위한 제1 명령 서브 큐 및 상기 제1 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 상기 제1 명령 서브 큐에 동작 가능하게 결합된 대응하는 제1 아비터,
메모리 액세스 요청들을 저장하기 위한 제2 명령 서브 큐 및 상기 제2 명령 서브 큐로부터 메모리 액세스 명령들을 선택하기 위해 상기 제2 명령 서브 큐에 동작 가능하게 결합된 대응하는 제2 아비터,
메모리 액세스 요청들을 상기 제1 명령 서브 큐 및 상기 제2 명령 서브 큐 내에 배치하도록 동작하는 명령 큐 엔트리 로직, 및
상기 제1 명령 서브 큐 또는 상기 제2 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 서브 채널로 전송하도록 구성된 제1 선택기를 포함하는, 데이터 처리 시스템. - 제13항에 있어서,
상기 명령 큐 엔트리 로직은 메모리 액세스 요청들을 상이한 명령 서브 큐들로 분류하도록 구성되어, 상기 제1 명령 서브 큐가 판독 요청들만을 포함하고 상기 제2 명령 서브 큐가 기입 요청들만을 포함하도록 하는, 데이터 처리 시스템. - 제13항에 있어서,
상기 명령 큐 엔트리 로직은 상기 제1 명령 서브 큐로부터 상기 제2 명령 서브 큐로 엔트리들을 전송하도록 구성된, 데이터 처리 시스템. - 제13항에 있어서,
상기 제1 아비터와 상기 제2 아비터 사이에서 공유되는 공유 타이밍 로직 및 공유 페이지 테이블을 포함하는, 데이터 처리 시스템. - 제13항에 있어서,
미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐,
미리 결정된 기준에 따라 제4 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 저장하기 위한 제4 명령 서브 큐,
상기 제3 명령 서브 큐 또는 상기 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하도록 동작하는 상기 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기; 및
상기 제1 및 제2 선택기들에 동작가능하게 결합되고, 상기 제1 선택기 또는 상기 제2 선택기 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 복수의 서브 채널들 중 적어도 하나에 전송하도록 동작하는 제3 선택기를 포함하는, 데이터 처리 시스템. - 제17항에 있어서,
상기 제1 명령 서브 큐, 제2 명령 서브 큐, 제3 명령 서브 큐, 및 제4 명령 서브 큐에 동작 가능하게 결합되고 메모리 액세스 요청들을 상이한 명령 큐들로 분류하도록 동작하여, 상기 제1 명령 서브 큐 및 제2 명령 큐는 판독 요청들만을 포함하고 상기 제3 명령 서브 큐 및 제4 명령 큐는 기입 요청들만을 포함하도록 하는 명령 큐 엔트리 로직을 포함하는, 데이터 처리 시스템. - 제13항에 있어서,
미리 결정된 기준에 따라 제3 명령 서브 큐로부터 메모리 액세스 명령을 선택하기 위해 메모리 액세스 요청들 및 제3 명령 서브 큐에 결합된 대응하는 제3 아비터를 저장하기 위한 제3 명령 서브 큐,
미리 결정된 기준에 따라 상기 제4 명령 서브 큐로부터 메모리 액세스 명령를 선택하기 위해 메모리 액세스 요청들 및 상기 제4 명령 서브 큐에 결합된 대응하는 제4 아비터를 저장하기 위한 제4 명령 서브 큐, 및
상기 제3 명령 서브 큐 또는 상기 제4 명령 서브 큐 중 어느 하나로부터 메모리 요청들을 선택하고 선택된 메모리 액세스 요청들을 대응하는 서브 채널로 전송하도록 동작하는 상기 제3 및 제4 아비터들 둘 모두에 결합된 제2 선택기를 포함하는, 데이터 처리 시스템. - 제13항에 있어서,
상기 수신된 메모리 액세스 요청들 각각을 상기 메모리 시스템 내의 메모리 디바이스들의 복수의 서브 채널들 중 뱅크, 랭크, 및 서브 채널로 디코딩하도록 동작하는 어드레스 생성기를 포함하고,
상기 명령 큐 엔트리 로직은 상기 뱅크, 랭크, 및 서브 채널을 포함하는 메모리 액세스 요청을 제1 명령 서브 큐 또는 적어도 제2 명령 서브 큐 중 적어도 하나에 저장하도록 동작하는, 데이터 처리 시스템.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063069352P | 2020-08-24 | 2020-08-24 | |
US63/069,352 | 2020-08-24 | ||
US17/085,304 | 2020-10-30 | ||
US17/085,304 US11494316B2 (en) | 2020-08-24 | 2020-10-30 | Memory controller with a plurality of command sub-queues and corresponding arbiters |
PCT/US2021/047274 WO2022046720A1 (en) | 2020-08-24 | 2021-08-24 | Memory controller with a plurality of command sub-queues and corresponding arbiters |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20230054844A true KR20230054844A (ko) | 2023-04-25 |
Family
ID=80269599
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020237008725A KR20230054844A (ko) | 2020-08-24 | 2021-08-24 | 복수의 명령 서브 큐 및 대응하는 아비터를 갖는 메모리 컨트롤러 |
Country Status (6)
Country | Link |
---|---|
US (2) | US11494316B2 (ko) |
EP (1) | EP4200713A1 (ko) |
JP (1) | JP2023539737A (ko) |
KR (1) | KR20230054844A (ko) |
CN (1) | CN116324744A (ko) |
WO (1) | WO2022046720A1 (ko) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11494316B2 (en) | 2020-08-24 | 2022-11-08 | Advanced Micro Devices, Inc. | Memory controller with a plurality of command sub-queues and corresponding arbiters |
US12131066B2 (en) * | 2022-06-21 | 2024-10-29 | Micron Technology, Inc. | Efficient command fetching in a memory sub-system |
US12039339B1 (en) * | 2022-06-28 | 2024-07-16 | Amazon Technologies, Inc. | System configuration control through locking of control registers |
US20240005971A1 (en) * | 2022-06-29 | 2024-01-04 | Advanced Micro Devices, Inc. | Channel and sub-channel throttling for memory controllers |
CN116578245B (zh) * | 2023-07-03 | 2023-11-17 | 摩尔线程智能科技(北京)有限责任公司 | 存储器访问电路及存储器访问方法、集成电路和电子设备 |
CN116521097B (zh) * | 2023-07-03 | 2023-09-08 | 摩尔线程智能科技(北京)有限责任公司 | 存储器访问电路及存储器访问方法、集成电路和电子设备 |
CN116860185B (zh) * | 2023-09-05 | 2024-06-07 | 深圳比特微电子科技有限公司 | Sram阵列的数据访问装置、系统、方法、设备、芯片和介质 |
CN117891758B (zh) * | 2024-03-12 | 2024-05-17 | 成都登临科技有限公司 | 一种基于仲裁的存储访问系统、处理器及计算设备 |
CN118467418A (zh) * | 2024-07-08 | 2024-08-09 | 杭州登临瀚海科技有限公司 | 一种存储访问系统以及存储访问调度方法 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6092158A (en) * | 1997-06-13 | 2000-07-18 | Intel Corporation | Method and apparatus for arbitrating between command streams |
US5903776A (en) | 1997-09-05 | 1999-05-11 | Micron Electronics, Inc. | Multiple priority accelerated graphics port (AGP) request queue |
US6938133B2 (en) * | 2001-09-28 | 2005-08-30 | Hewlett-Packard Development Company, L.P. | Memory latency and bandwidth optimizations |
US7366854B2 (en) * | 2003-05-08 | 2008-04-29 | Hewlett-Packard Development Company, L.P. | Systems and methods for scheduling memory requests utilizing multi-level arbitration |
US7127574B2 (en) * | 2003-10-22 | 2006-10-24 | Intel Corporatioon | Method and apparatus for out of order memory scheduling |
JP5908416B2 (ja) * | 2013-01-23 | 2016-04-26 | 株式会社東芝 | インターフェース制御装置、データ記憶装置及びインターフェース制御方法 |
JP6142783B2 (ja) * | 2013-11-25 | 2017-06-07 | 富士通株式会社 | メモリコントローラ,情報処理装置及びメモリコントローラの制御方法 |
EP3270294B1 (en) | 2016-07-15 | 2018-09-26 | Advanced Micro Devices, Inc. | Command arbitration for high-speed memory interfaces |
US10037150B2 (en) * | 2016-07-15 | 2018-07-31 | Advanced Micro Devices, Inc. | Memory controller with virtual controller mode |
US11422707B2 (en) * | 2017-12-21 | 2022-08-23 | Advanced Micro Devices, Inc. | Scheduling memory requests for a ganged memory device |
JP2020016954A (ja) | 2018-07-23 | 2020-01-30 | キオクシア株式会社 | メモリシステム |
US10649922B2 (en) * | 2018-08-06 | 2020-05-12 | Apple Inc. | Systems and methods for scheduling different types of memory requests with varying data sizes |
US11494316B2 (en) | 2020-08-24 | 2022-11-08 | Advanced Micro Devices, Inc. | Memory controller with a plurality of command sub-queues and corresponding arbiters |
-
2020
- 2020-10-30 US US17/085,304 patent/US11494316B2/en active Active
-
2021
- 2021-08-24 CN CN202180065325.6A patent/CN116324744A/zh active Pending
- 2021-08-24 KR KR1020237008725A patent/KR20230054844A/ko active Search and Examination
- 2021-08-24 EP EP21773924.2A patent/EP4200713A1/en active Pending
- 2021-08-24 WO PCT/US2021/047274 patent/WO2022046720A1/en active Application Filing
- 2021-08-24 JP JP2023513429A patent/JP2023539737A/ja active Pending
-
2022
- 2022-10-07 US US17/961,613 patent/US12038856B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
WO2022046720A1 (en) | 2022-03-03 |
EP4200713A1 (en) | 2023-06-28 |
US20230031595A1 (en) | 2023-02-02 |
US12038856B2 (en) | 2024-07-16 |
CN116324744A (zh) | 2023-06-23 |
US11494316B2 (en) | 2022-11-08 |
US20220058141A1 (en) | 2022-02-24 |
JP2023539737A (ja) | 2023-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12038856B2 (en) | Memory controller with a plurality of command sub-queues and corresponding arbiters | |
US11221772B2 (en) | Self refresh state machine mop array | |
CN109564556B (zh) | 具有条纹和读取/写入事务管理的存储器控制器仲裁器 | |
KR102370477B1 (ko) | 가상 컨트롤러 모드를 가진 메모리 컨트롤러 | |
KR102442078B1 (ko) | 고속 메모리 인터페이스들을 위한 명령 중재 | |
KR102714770B1 (ko) | 저 전력 메모리 스로틀링 | |
US12073114B2 (en) | Stacked command queue | |
EP3270294B1 (en) | Command arbitration for high-speed memory interfaces | |
US20240370387A1 (en) | Memory controller with a plurality of command sub-queues and corresponding arbiters | |
EP3270295A1 (en) | Memory controller with virtual controller mode |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination |