KR20190019200A - 융통성 있는 어드레스 디코딩을 이용하는 메모리 제어기 - Google Patents

융통성 있는 어드레스 디코딩을 이용하는 메모리 제어기 Download PDF

Info

Publication number
KR20190019200A
KR20190019200A KR1020197002561A KR20197002561A KR20190019200A KR 20190019200 A KR20190019200 A KR 20190019200A KR 1020197002561 A KR1020197002561 A KR 1020197002561A KR 20197002561 A KR20197002561 A KR 20197002561A KR 20190019200 A KR20190019200 A KR 20190019200A
Authority
KR
South Korea
Prior art keywords
address
memory
decoder
zone
access
Prior art date
Application number
KR1020197002561A
Other languages
English (en)
Inventor
케빈 엠. 브랜들
토마스 해밀턴
히데키 가나야마
케다르나스 바라크리시난
제임스 알. 마그로
구안하오 쉔
마크 파울러
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20190019200A publication Critical patent/KR20190019200A/ko

Links

Images

Classifications

    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0607Interleaved addressing
    • 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/1063Control signal output circuits, e.g. status or busy flags, feedback command signals
    • 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
    • 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
    • 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/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • G06F12/1018Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
    • 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/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1642Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • G06F13/4031Coupling between buses using bus bridges with arbitration
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/21Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
    • G11C11/34Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
    • G11C11/40Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
    • G11C11/401Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
    • G11C11/4063Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
    • G11C11/407Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
    • G11C11/408Address circuits
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Dram (AREA)
  • Memory System (AREA)
  • Bus Control (AREA)
  • Power Sources (AREA)

Abstract

메모리 제어기는 액세스 어드레스를 포함하는 메모리 액세스 요청을 수신하기 위한 호스트 인터페이스, 메모리 액세스를 메모리 시스템에 제공하기 위한 메모리 인터페이스, 및 복수의 구역 중 선택된 구역에 액세스 어드레스를 프로그램 가능하게 맵핑하기 위해 호스트 인터페이스에 연결된 어드레스 디코더를 포함한다. 어드레스 디코더는 2의 거듭제곱 크기를 각각 가진 1차 디코더 및 2차 디코더를 사용하여 2의 거듭제곱이 아닌 크기를 가진 제1 구역에 액세스 어드레스를 맵핑하도록 프로그램 가능하고, 그리고 이에 응답하여 제1 구역 맵핑 신호를 제공한다. 명령 큐는 메모리 액세스 요청 및 구역 맵핑 신호를 저장한다. 아비터는 구역 맵핑 신호에 부분적으로 기초하여 평가되는, 복수의 기준에 기초하여 명령 큐로부터 메모리 액세스 요청을 선택하고, 그리고 이에 응답하여 대응하는 메모리 액세스를 메모리 인터페이스에 제공한다.

Description

융통성 있는 어드레스 디코딩을 이용하는 메모리 제어기
본 개시내용은 일반적으로 데이터 처리 시스템, 더 구체적으로, 가변적인 크기를 가진 메모리와 인터페이싱할 수 있는 메모리 제어기를 구비한 데이터 처리 시스템에 관한 것이다.
컴퓨터 시스템은 보통 주 메모리를 위해 저가의 그리고 고밀도의 동적 랜덤 액세스 메모리(dynamic random access memory: DRAM) 칩을 사용한다. 오늘날 판매되는 대부분의 DRAM 칩은 전자 디바이스 엔지니어링 합동 위원회(Joint Electron Devices Engineering Council: JEDEC)에 의해 공포된 다양한 이중 데이터율(double data rate: DDR) DRAM 표준과 호환 가능하다. JEDEC가 새로운 DDR 표준을 공포했기 때문에, DDR DRAM의 다수의 세대, 예컨대, DDR3 및 DDR4가 대중화되기 위해서 상당한 기간이 걸린다. 또한, JEDEC가 그래픽 DDR(graphics DDR: gDDR) 메모리로서 알려진, 현대의 그래픽 프로세서의 필요를 위해 특별히 설계된 DRAM의 또 다른 부류를 명시하고, 그리고 1세대, gDDR5가 여전히 오늘날 인기가 있다. 따라서, 메모리 제어기가 어쩌면 다른 최근에 만들어진 메모리 유형뿐만 아니라 이러한 메모리 중 임의의 하나와 융통성있게 인터페이싱할 수 있다는 것이 중요하다.
메모리 제어기 융통성(flexibility)은 또한 메모리 시스템이 메모리 제어기를 사용하는 상이한 유형의 제품의 필요를 충족하도록 메모리 시스템에 있어서 중요하다. 예를 들어, 메모리는 보통 레이아웃 및 디코딩을 단순화하도록 2의 거듭제곱 밀도로 설계된다. 메모리 칩 밀도는 현대의 집적 회로 리소그래피 기법이 발달함에 따라 역사적으로 기하급수적으로 증가하였다. 따라서 역사적으로 DRAM 크기는 1980대 중반에 입수 가능한 64 킬로비트(64Kb)로부터 128Kb로, 256Kb로, 등으로, 4-, 8-, 및 16-기가비트(Gb) 밀도의 DDR DRAM이 흔히 입수 가능한 현재까지 증가하였다. 이러한 경향이 계속되지 못할 수도 있는 2가지 이유가 있다. 첫째로, 반도체 리소그래피 기술은 물리적 한계에 다가가고 있을 수도 있다. 따라서, 메모리 제작업자는 2의 거듭제곱이 아닌 중간 크기를 제공할 수도 있다. 둘째로, 설계자는 2의 거듭제곱에 가장 가까운 크기와 근접하지 않은 밀도를 가진 메모리를 필요로 할 수도 있고 그리고 다음의 더 높은 밀도와 수반되는 추가의 제품 비용을 원하지 않을 수도 있다. 따라서 메모리 제작업자는 이러한 현실을 더 잘 충족하기 위해서 2의 거듭제곱이 아닌 메모리 크기를 설계하기 시작하였다. 2의 거듭제곱이 아닌 메모리와 인터페이싱하는 것은 과도한 비용 없이 모든 가능한 구성을 충족하는 회로를 디자인하기 위해 메모리 제어기 제작업자에게 추가의 부담을 준다.
메모리 시스템은 메모리 제어기가 페이지 충돌을 유발하는 일 없이 인터리브 방식(interleaved fashion)으로 상이한 뱅크에 액세스할 수 있다면 더 효율적으로 작동된다. 상이한 뱅크로의 액세스를 인터리빙함으로써, 메모리 제어기는 동일한 뱅크에서 상이한 행으로의 일련의 액세스를 위해 요구될 오버헤드(overhead)를 부분적으로 숨길 수 있다. 공지된 메모리 제어기는 동일한 랭크 및 뱅크로의 순차적인 액세스가 다수의 뱅크에 걸쳐 스프레드(spread)되도록 입력 어드레스를 스크램블(scramble) 또는 "스위즐(swizzle)"하는 회로를 사용한다. 예를 들어, 메모리 제어기는, 어드레스 공간의 비교적 작은 구역으로의 메모리 액세스가 상이한 뱅크와 맵핑되도록 뱅크 어드레스를 스크램블하기 위하여 특정한 어드레스 비트를 사용한다. 이 메모리 제어기에 의해 구현된 뱅크 스크램블 알고리즘은 시스템의 유형, 응용 프로그램 및 작동 시스템에 의해 생성된 액세스의 특성 등에 따라, 다른 시스템이 아닌 일부 시스템을 위한 인터리빙의 목적하는 레벨을 액세스의 패턴에 제공한다.
도 1은 일부 실시형태에 따른, 데이터 처리 시스템을 블록도 형태로 예시한 도면;
도 2는 도 1의 데이터 처리 시스템에서 사용되기에 적합한 가속 처리 장치(accelerated processing unit: APU)를 블록도 형태로 예시한 도면;
도 3은 일부 실시형태에 따른, 도 2의 APU에서 사용되기에 적합한 메모리 제어기 및 연관된 물리적 인터페이스(physical interface: PHY)를 블록도 형태로 예시한 도면;
도 4는 일부 실시형태에 따른, 도 2의 APU에서 사용되기에 적합한 또 다른 메모리 제어기 및 연관된 PHY를 블록도 형태로 예시한 도면;
도 5는 일부 실시형태에 따른, 메모리 제어기를 블록도 형태로 예시한 도면; 및
도 6은 일부 실시형태에 따른, 도 5의 메모리 제어기의 일부를 구현하도록 사용될 수 있는 메모리 제어기를 블록도 형태로 예시한 도면.
도 7은 일부 실시형태에 따른, 도 6의 2의 거듭제곱이 아닌 디코더로서 사용될 수 있는 어드레스 디코더의 간략화된 블록도를 블록도 형태로 예시한 도면.
도 8은 2개의 구역 디코더를 사용하여 2의 거듭제곱이 아닌 어드레스 공간을 위해 프로그래밍될 때 도 7의 어드레스 디코더에 의해 수행된 어드레스 맵핑을 도시하는 도면.
도 9는 일부 실시형태에 따른, 칩 선택 인터리브를 구현하도록 프로그래밍될 때 도 7의 어드레스 디코더에 의해 수행된 어드레스 맵핑을 도시하는 도면.
도 10은 일부 실시형태에 따른, 도 5의 어드레스 디코더를 구현하도록 사용될 수 있는 어드레스 디코더를 블록도 형태로 예시한 도면.
도 11은 일부 실시형태에 따른, 도 5의 어드레스 디코더를 구현하도록 사용될 수 있는 또 다른 어드레스 디코더를 블록도 형태로 예시한 도면.
다음의 도면에서, 상이한 도면 내의 동일한 참조 부호의 사용은 유사하거나 또는 동일한 항목을 나타낸다. 달린 언급되지 않는 한, 단어 "연결" 및 그와 연관된 동사 형태는 기술에 공지된 수단에 의한 직접적인 연결 및 간접적인 연결 둘 다를 포함하고 그리고 달리 언급되지 않는 한, 직접적인 연결의 어떤 설명은 또한 간접적인 전기적 연결의 적합한 형태를 사용하는 대안적인 실시형태를 암시한다.
아래에 하나의 형태로 설명될 바와 같이, 메모리 제어기는 메모리 액세스 요청을 수신하기 위한 호스트 인터페이스(메모리 액세스 요청은 액세스 어드레스를 포함함), 메모리 액세스를 메모리 시스템에 제공하기 위한 메모리 인터페이스, 어드레스 디코더, 명령 큐(command queue), 및 아비터(arbiter)를 포함한다. 어드레스 디코더는 해싱 함수(hashing function)를 사용하여 복수의 구역 중 선택된 구역에 액세스 어드레스를 프로그램 가능하게 맵핑하기 위해 호스트 인터페이스에 연결된다. 어드레스 디코더는 액세스 어드레스의 대응하는 복수의 비트 중 어느 것이 해싱 함수에서 사용되는지를 결정하도록 복수의 프로그램 가능한 비트에 응답하고, 그리고 제1의 2의 거듭제곱 크기를 가진 1차 디코더와 제2의 2의 거듭제곱 크기를 가진 2차 디코더를 사용하여 2의 거듭제곱이 아닌 크기를 가진 제1 구역에 액세스 어드레스를 맵핑하도록 프로그램 가능하다. 명령 큐는 메모리 액세스 요청 및 구역 맵핑 신호를 저장하기 위해 어드레스 디코더에 연결된다. 아비터는 복수의 기준에 기초하여 명령 큐로부터 메모리 액세스 요청을 선택하기 위한 것이고(복수의 기준은 구역 맵핑 신호에 부분적으로 기초하여 평가됨), 그리고 이에 응답하여 대응하는 메모리 액세스를 메모리 인터페이스에 제공하기 위한 것이다.
예를 들어, 어드레스 디코더는 구역이 메모리 시스템의 칩 선택 신호에 대응하는, 복수의 구역 디코더를 포함할 수도 있다. 각각의 구역 디코더는 1차 디코더 및 2차 디코더 둘 다를 포함할 수도 있다. 1차 디코더는 액세스 어드레스를 수신하고 그리고 1차 구역 선택 신호를 제공하기 위한 것이고, 그리고 제1 베이스 어드레스 및 제1의 2의 거듭제곱 크기를 갖는다. 2차 디코더는 액세스 어드레스를 수신하고 그리고 2차 구역 선택 신호를 제공하기 위한 것이고, 2차 디코더는 제2 베이스 어드레스 및 제2의 2의 거듭제곱 크기를 갖는다. 구역 디코더는 1차 구역 선택 신호 및 2차 구역 선택 신호 중 적어도 하나의 활성화에 응답하여 대응하는 구역 맵핑 신호를 활성화시키기 위한 논리 회로를 더 포함한다. 예를 들어, 구역은 2N + 2(N-1)의 크기를 가질 수도 있고, 1차 디코더는 2N의 구역 크기를 디코딩하고 그리고 2차 디코더는 2(N-1)의 구역 크기를 디코딩한다. 이 방식으로, 구역은 2개의 콤팩트한 2의 거듭제곱 디코더로 구현된 예를 들어, 6기가바이트(6GB)의 크기를 가질 수 있다.
또 다른 실시예에서, 메모리 제어기는 제1 구역 디코더 및 제2 구역 디코더를 더 포함한다. 제1 구역 디코더는 제3의 2의 거듭제곱 크기를 가진 제1의 1차 디코더 및 제3의 2의 거듭제곱 크기를 가진 제1의 2차 디코더를 사용하여 2의 거듭제곱 크기를 가진 제1 구역에 액세스 어드레스를 선택적으로 맵핑하고 그리고 이에 응답하여 제1 구역 맵핑 신호를 제공하기 위한 것이다. 제2 구역 디코더는 제3의 2의 거듭제곱 크기를 가진 제2의 1차 디코더 및 제3의 2의 거듭제곱 크기를 가진 제2의 2차 디코더를 사용하여 2의 거듭제곱 크기를 가진 제2 구역에 액세스 어드레스를 선택적으로 맵핑하고 그리고 이에 응답하여 제2 구역 맵핑 신호를 제공하기 위한 것이다. 메모리 제어기는 액세스 어드레스에 대응하는 메모리 공간을 제1의 1차 디코더, 제2의 1차 디코더, 제1의 2차 디코더, 및 제2의 2차 디코더의 각각 간에 인터리브한다.
또 다른 형태에서, 장치는 호스트 인터페이스, 메모리 인터페이스, 어드레스 디코더, 명령 큐, 및 아비터를 포함하는 메모리 제어기를 갖는다. 호스트 인터페이스는 메모리 액세스 요청을 수신하기 위한 것이고, 메모리 액세스 요청은 액세스 어드레스를 포함한다. 메모리 인터페이스는 메모리 액세스를 메모리 시스템에 제공하기 위한 것이다. 어드레스 디코더는 복수의 구역 중 선택된 구역에 액세스 어드레스를 프로그램 가능하게 맵핑하기 위해 호스트 인터페이스에 연결되고, 어드레스 디코더는 제1의 2의 거듭제곱 크기를 가진 1차 디코더 및 제2의 2의 거듭제곱 크기를 가진 2차 디코더를 사용하여 2의 거듭제곱이 아닌 크기를 가진 제1 구역에 액세스 어드레스를 맵핑하도록 프로그램 가능하고, 그리고 이에 응답하여 제1 구역 맵핑 신호를 제공한다. 명령 큐는 메모리 액세스 요청 및 구역 맵핑 신호를 저장하기 위해 어드레스 디코더에 연결된다. 아비터는 복수의 기준에 기초하여 명령 큐로부터 메모리 액세스 요청을 선택하기 위한 것이고(복수의 기준은 구역 맵핑 신호에 부분적으로 기초하여 평가됨), 그리고 이에 응답하여 대응하는 메모리 액세스를 메모리 인터페이스에 제공하기 위한 것이다. 여전히 또 다른 형태에서, 메모리 제어기를 가진 장치는 호스트 인터페이스, 메모리 인터페이스, 어드레스 디코더, 명령 큐, 및 아비터를 포함한다. 호스트 인터페이스는 메모리 액세스 요청을 수신하기 위한 것이고, 메모리 액세스 요청은 액세스 어드레스를 포함한다. 메모리 인터페이스는 메모리 액세스를 메모리 시스템에 제공하기 위한 것이고, 메모리 액세스는 해싱된 어드레스를 포함한다. 어드레스 디코더는 해싱 함수를 사용하여 메모리 시스템의 복수의 구역 중 선택된 구역에 액세스 어드레스를 프로그램 가능하게 맵핑하기 위해 호스트 인터페이스에 연결되고, 어드레스 디코더는 액세스 어드레스의 대응하는 복수의 비트 중 어느 것이 해싱 함수에서 사용되는지를 결정하도록 복수의 프로그램 가능한 비트에 응답한다. 명령 큐는 해싱된 어드레스를 포함하는 메모리 액세스 요청을 저장하기 위해 어드레스 디코더에 연결된다. 아비터는 복수의 기준에 기초하여 명령 큐로부터 메모리 액세스 요청을 선택하기 위한 것이고, 그리고 이에 응답하여 해싱된 어드레스를 포함하는 대응하는 메모리 액세스를 메모리 인터페이스에 제공하기 위한 것이다.
여전히 또 다른 형태에서, 방법은 메모리 액세스 요청을 수신하는 것을 포함하고, 메모리 액세스 요청은 액세스 어드레스를 포함한다. 액세스 어드레스가 디코딩되고 그리고 이에 응답하여 대응하는 구역 맵핑 신호가 제공된다. 디코딩은 제1의 2의 거듭제곱 크기를 가진 제1의 1차 디코더 및 제2의 2의 거듭제곱 크기를 가진 제1의 2차 디코더를 사용하여 2의 거듭제곱이 아닌 크기를 가진 제1 구역에 액세스 어드레스를 선택적으로 맵핑하는 것을 포함한다. 제1 구역 맵핑 신호는 액세스 어드레스를 제1 구역에 맵핑하는 것에 응답하여 제공된다. 메모리 액세스 요청 및 구역 맵핑 신호가 저장되고, 그리고 그렇게 저장된, 메모리 액세스 요청은 복수의 기준에 기초하여 선택되고, 복수의 기준은 구역 맵핑 신호에 부분적으로 기초하여 평가된다. 대응하는 메모리 액세스가 선택된 메모리 액세스 요청에 응답하여 제공된다.
여전히 또 다른 형태에서, 방법은 메모리 액세스 요청을 수신하는 것을 포함하고, 메모리 액세스 요청은 액세스 어드레스를 포함한다. 액세스 어드레스가 디코딩되고 그리고 이에 응답하여 대응하는 구역 맵핑 신호가 제공되고, 디코딩은 액세스 어드레스의 대응하는 복수의 비트 중 어느 것이 해싱 함수에서 사용되는지를 결정하도록 복수의 프로그램 가능한 비트에 응답하는 해싱 함수를 사용하여 액세스 어드레스를 선택적으로 해싱하는 것을 포함한다. 구역 맵핑 신호가 디코딩에 응답하여 제공된다. 메모리 액세스 요청 및 구역 맵핑 신호가 저장되고, 그리고 그렇게 저장된, 메모리 액세스 요청은 복수의 기준에 기초하여 선택되고, 복수의 기준은 구역 맵핑 신호에 부분적으로 기초하여 평가된다. 대응하는 메모리 액세스가 선택된 메모리 액세스 요청에 응답하여 제공된다.
도 1은 일부 실시형태에 따른, 데이터 처리 시스템(100)을 블록도 형태로 예시한다. 데이터 처리 시스템(100)은 가속 처리 장치(APU)의 형태인 데이터 프로세서(110), 메모리 시스템(120), 주변 컴포넌트 상호접속 익스프레스(peripheral component interconnect express: PCIe) 시스템(150), 범용 직렬 버스(universal serial bus: USB) 시스템(160) 및 디스크 드라이브(170)를 포함한다. 데이터 프로세서(110)는 데이터 처리 시스템(100)의 중앙 처리 장치(central processing unit: CPU)로서 작동되고 그리고 현대의 컴퓨터 시스템에서 유용한 다양한 버스 및 인터페이스를 제공한다. 이 인터페이스는 2개의 이중 데이터율(DDRx) 메모리 채널, PCIe 링크에 대한 연결을 위한 PCIe 루트 콤플렉스(root complex), USB 네트워크에 대한 연결을 위한 USB 제어기, 및 직렬 고급 기술 부착(Serial Advanced Technology Attachment: SATA) 대용량 저장 디바이스에 대한 인터페이스를 포함한다.
메모리 시스템(120)은 메모리 채널(130) 및 메모리 채널(140)을 포함한다. 메모리 채널(130)은 이 실시예에서 별개의 랭크에 대응하는 대표적인 듀얼 인라인 메모리 모듈(dual inline memory module: DIMM)(134, 136 및 138)을 포함하는, DDRx 버스(132)에 연결된 DIMM의 세트를 포함한다. 마찬가지로, 메모리 채널(140)은 대표적인 DIMM(144, 146 및 148)을 포함하는, DDRx 버스(142)에 연결된 DIMM의 세트를 포함한다.
PCIe 시스템(150)은 데이터 프로세서(110)의 PCIe 루트 콤플렉스에 연결된 PCIe 스위치(152), PCIe 디바이스(154), PCIe 디바이스(156), 및 PCIe 디바이스(158)를 포함한다. PCIe 디바이스(156)는 결국 시스템 기본 입력/출력 시스템(basic input/output system: BIOS) 메모리(157)에 연결된다. 시스템 BIOS 메모리(157)는 다양한 비휘발성 메모리 유형, 예컨대, 판독-전용 메모리(read-only memory: ROM), 플래시 전기적으로 소거 가능한 프로그램 가능 ROM(electrically erasable programmable 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 메모리, 예컨대, DDR 버전 4(DDR version four: DDR4), 저전력 DDR4(low power DDR4: LPDDR4), 그래픽 DDR 버전 5(graphics DDR version five: gDDR5) 및 고대역폭 메모리(high bandwidth memory: HBM)에 연결될 수 있고 그리고 미래의 메모리 기술을 위해 조정될 수 있다. 이 메모리는 높은 버스 대역폭 및 고속 작동을 제공한다. 동시에, 메모리는 또한 랩톱 컴퓨터와 같은 배터리로 전력 공급되는 애플리케이션을 위한 전력을 절약하도록 저전력 모드를 제공하고 그리고 또한 빌트인 열 모니터링을 제공한다.
도 2는 도 1의 데이터 처리 시스템(100)에서 사용되기에 적합한 APU(200)를 블록도 형태로 예시한다. APU(200)는 중앙 처리 장치(CPU) 코어 콤플렉스(210), 그래픽 코어(220), 디스플레이 엔진(230)의 세트, 메모리 관리 허브(240), 데이터 패브릭(250), 주변 제어기(260)의 세트, 주변 버스 제어기(270)의 세트, 시스템 관리 장치(system management unit: SMU)(280) 및 메모리 제어기(290)의 세트를 포함한다.
CPU 코어 콤플렉스(210)는 CPU 코어(212) 및 CPU 코어(214)를 포함한다. 이 실시예에서, CPU 코어 콤플렉스(210)는 2개의 CPU 코어를 포함하지만, 다른 실시형태에서 CPU 코어 콤플렉스는 임의의 수의 CPU 코어를 포함할 수 있다. CPU 코어(212 및 214)의 각각은 제어 패브릭을 형성하는 시스템 관리 네트워크(system management network: SMN)에 그리고 데이터 패브릭(250)에 양방향으로 연결되고 그리고 메모리 액세스 요청을 데이터 패브릭(250)에 제공할 수 있다. CPU 코어(212 및 214)의 각각은 통합 코어일 수도 있거나 또는 또한 캐시와 같은 특정한 리소스를 공유하는 2개 이상의 통합 코어를 가진 코어 콤플렉스일 수도 있다.
그래픽 코어(graphics core)(220)는 그래픽 작동, 예컨대, 정점 처리, 플래그먼트 처리, 섀딩, 텍스처 블렌딩 등을 고도로 통합된 그리고 병행 방식으로 작동시킬 수 있는 고성능 그래픽 처리 장치(graphics processing unit: GPU)이다. 그래픽 코어(220)는 SMN에 그리고 데이터 패브릭(250)에 양방향으로 연결되고 그리고 메모리 액세스 요청을 데이터 패브릭(250)에 제공할 수 있다. 이 점에서, APU(200)는 그래픽 코어(220)가 또한 CPU 코어 콤플렉스(210)에 의해 액세스 불가능한 개인용 그래픽 메모리를 사용하는 동안, CPU 코어 콤플렉스(210)와 그래픽 코어(220)가 동일한 메모리 공간을 공유하는 통합 메모리 구조 또는 CPU 코어 콤플렉스(210)와 그래픽 코어(220)가 메모리 공간의 부분을 공유하는 메모리 구조를 제공할 수도 있다.
디스플레이 엔진(230)은 모니터 상의 디스플레이를 위해 그래픽 코어(220)에 의해 생성된 대상을 만들고 래스터화(rasterize)한다. 그래픽 코어(220) 및 디스플레이 엔진(230)은 메모리 시스템(120)에서 적합한 어드레스로의 균일한 이동을 위해 공통 메모리 관리 허브(240)에 양방향으로 연결되고 그리고 메모리 관리 허브(240)는 이러한 메모리 액세스를 생성하기 위해 그리고 메모리 시스템으로부터 복귀된 판독 데이터를 수신하기 위해 데이터 패브릭(250)에 양방향으로 연결된다.
데이터 패브릭(250)은 임의의 메모리 액세싱 에이전트와 메모리 제어기(290) 간에 메모리 액세스 요청 및 메모리 응답을 라우팅하기 위한 크로스바 스위치를 포함한다. 데이터 패브릭은 또한 시스템 구성에 기초하여 메모리 액세스의 목적지를 결정하기 위한, BIOS에 의해 획정된, 시스템 메모리 맵, 뿐만 아니라 각각의 가상 연결을 위한 버퍼를 포함한다.
주변 제어기(260)는 USB 제어기(262) 및 SATA 인터페이스 제어기(264)를 포함하고, 그 각각은 시스템 허브(266)에 그리고 SMN 버스에 각각 양방향으로 연결된다. 이 2개의 제어기는 단지 APU(200)에서 사용될 수도 있는 주변 제어기의 예이다.
주변 버스 제어기(270)는 시스템 제어기 또는 "사우스브리지"(Southbridge: SB)(272) 및 PCIe 제어기(274)를 포함하고, 그 각각은 입력/출력(input/output: 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)의 컴포넌트의 각각에 제공하도록, 도 2에 도시되지 않은 하나 이상의 클록 소스, 예컨대, 위상 동기 루프(phase locked loop: PLL)를 포함한다. SMU(280)는 또한 다양한 프로세서 및 다른 기능 블록을 위한 전력을 관리하고 그리고 적합한 전력 상태를 결정하도록 CPU 코어(212 및 214) 및 그래픽 코어(220)로부터 측정된 전력 소비값을 수신할 수도 있다.
APU(200)는 또한 다양한 시스템 모니터링 및 전력 절약 기능을 구현한다. 특히, 하나의 시스템 모니터링 기능은 열 모니터링이다. 예를 들어, APU(200)가 뜨거워지면, 그러면 SMU(280)는 CPU 코어(212 및 214) 및/또는 그래픽 코어(220)의 주파수 및 전압을 감소시킬 수 있다. APU(200)가 너무 뜨거워지면, 그러면 APU는 완전히 정지될 수 있다. 열 이벤트는 또한 외부 센서로부터 SMU(280)에 의해 SMN 버스를 통해 수신될 수 있고 그리고 SMU(280)는 이에 응답하여 클록 주파수 및/또는 전력 공급 전압을 감소시킬 수 있다.
도 3은 일부 실시형태에 따른, 도 2의 APU(200)에서 사용되기에 적합한 메모리 제어기(300) 및 연관된 물리적 인터페이스(PHY)(330)를 블록도 형태로 예시한 다. 메모리 제어기(300)는 메모리 채널(310) 및 동력 엔진(320)을 포함한다. 메모리 채널(310)은 호스트 인터페이스(312), 메모리 채널 제어기(314) 및 물리적 인터페이스(316)를 포함한다. 호스트 인터페이스(312)는 메모리 채널 제어기(314)를 가변 데이터 포트(scalable data port: SDP)를 통해 데이터 패브릭(250)에 양방향으로 연결한다. 물리적 인터페이스(316)는 메모리 채널 제어기(314)를 DDR-PHY 인터페이스 사양(DDR-PHY Interface 사양: DFI)을 따르는 버스를 통해 PHY(330)에 양방향으로 연결한다. 동력 엔진(320)은 SMN 버스를 통해 SMU(280)에, 고급 주변 버스(Advanced Peripheral Bus: APB)를 통해 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)는 메모리 채널 제어기(414)를 SDP를 통해 데이터 패브릭(250)에 양방향으로 연결한다. 물리적 인터페이스(416)는 메모리 채널 제어기(414)를 PHY(440)에 양방향으로 연결하고 그리고 DFI 사양을 따른다. 메모리 채널(420)은 호스트 인터페이스(422), 메모리 채널 제어기(424) 및 물리적 인터페이스(426)를 포함한다. 호스트 인터페이스(422)는 메모리 채널 제어기(424)를 또 다른 SDP를 통해 데이터 패브릭(250)에 양방향으로 연결한다. 물리적 인터페이스(426)는 메모리 채널 제어기(424)를 PHY(450)에 양방향으로 연결하고 그리고 DFI 사양을 따른다. 동력 엔진(430)은 SMN 버스를 통해 SMU(280)에, APB를 통해 PHY(440 및 450)에 양방향으로 연결되고 그리고 또한 메모리 채널 제어기(414 및 424)에 양방향으로 연결된다. PHY(440)는 메모리 채널, 예컨대, 도 1의 메모리 채널(130)에 대한 양방향 연결부를 갖는다. PHY(450)는 메모리 채널, 예컨대, 도 1의 메모리 채널(140)에 대한 양방향 연결부를 갖는다. 메모리 제어기(400)는 2개의 메모리 채널 제어기를 가진 메모리 제어기의 예시이고 그리고 메모리 채널 제어기(414) 및 메모리 채널 제어기(424) 둘 다의 작동을 아래에 더 설명될 방식으로 제어하도록 공유된 동력 엔진(430)을 사용한다.
도 5는 일부 실시형태에 따른, 메모리 제어기(500)를 블록도 형태로 예시한 다. 메모리 제어기(500)는 메모리 채널 제어기(510) 및 전력 제어기(550)를 포함한다. 메모리 채널 제어기(510)는 인터페이스(512), 큐(514), 명령 큐(520), 어드레스 생성기(522), 콘텐츠 어드레스 가능 메모리(content addressable memory: CAM)(524), 리플레이 큐(replay queue)(530), 리프레시 논리 블록(532), 타이밍 블록(534), 페이지 테이블(536), 아비터(538), 에러 정정 코드(error correction code: ECC) 검사 블록(542), ECC 생성 블록(544) 및 데이터 버퍼(data buffer: DB)(546)를 포함한다.
인터페이스(512)는 외부 버스를 통한 데이터 패브릭(250)에 대한 제1 양방향 연결부를 갖고 그리고 출력부를 갖는다. 메모리 제어기(500)에서, 이 외부 버스는 "AXI4"로서 알려진, 영국 캠브리지에 소재한 ARM 홀딩스, PLC(ARM Holdings, PLC)에 의해 명시된 고급 확장성 인터페이스 버전 4와 호환 가능하지만, 다른 실시형태에서 다른 유형의 인터페이스일 수 있다. 인터페이스(512)는 메모리 액세스 요청을 FCLK(또는 MEMCLK) 도메인으로서 알려진 제1 클록 도메인으로부터 UCLK 도메인으로서 알려진 메모리 제어기(500) 내부의 제2 클록 도메인으로 이동시킨다. 유사하게, 큐(514)는 메모리 액세스를 UCLK 도메인으로부터 DFI 인터페이스와 연관된 DFICLK 도메인으로 제공한다.
어드레스 생성기(522)는 데이터 패브릭(250)으로부터 AXI4 버스를 통해 수신된 메모리 액세스 요청의 어드레스를 디코딩한다. 메모리 액세스 요청은 정규화된 포맷으로 나타낸 물리적 어드레스 공간에 액세스 어드레스를 포함한다. 어드레스 생성기(522)는 메모리 시스템(120)의 실제의 메모리 디바이스를 어드레스하도록 뿐만 아니라 관련된 액세스를 효율적으로 스케줄링하도록 사용될 수 있는 포맷으로 정규화된 어드레스를 전환한다. 이 포맷은 메모리 액세스 요청을 특정한 랭크, 행 어드레스, 열 어드레스, 뱅크 어드레스 및 뱅크 그룹과 연관시키는 구역 식별자를 포함한다. 시작 시, 시스템 BIOS는 메모리 디바이스의 크기 및 구성을 결정하도록 메모리 시스템(120)의 메모리 디바이스에 문의하고 그리고 어드레스 생성기(522)와 연관된 구성 레지스터의 세트를 프로그래밍한다. 어드레스 생성기(522)는 정규화된 어드레스를 적합한 포맷으로 바꾸도록 구성 레지스터에 저장된 구성을 사용한다. 명령 큐(520)는 CPU 코어(212 및 214) 및 그래픽 코어(220)와 같은, 데이터 처리 시스템(100)의 메모리 액세싱 에이전트로부터 수신된 메모리 액세스 요청의 큐이다. 명령 큐(520)는 어드레스 생성기(522)에 의해 디코딩된 어드레스 필드뿐만 아니라 액세스 유형 및 서비스 품질(quality of service: QoS) 식별자를 포함하여, 아비터(538)가 메모리 액세스를 효율적으로 선택하게 하는 다른 어드레스 정보를 저장한다. CAM(524)은 명령 규칙, 예컨대, 기입 후 기입(write after write: WAW) 및 기입 후 판독(read after write: RAW) 명령 규칙을 시행하는 정보를 포함한다.
리플레이 큐(530)는 대기 응답, 예컨대, 어드레스 및 명령 패리티 응답, DDR4 DRAM를 위한 기입 순환 중복 검사(cyclic redundancy check: CRC) 응답 및 gDDR5 DRAM을 위한 기입 및 판독 CRC 응답인 아비터(538)에 의해 선택된 메모리 액세스를 저장하기 위한 임시 큐이다. 리플레이 큐(530)는 복귀된 ECC가 정정되었는지 또는 에러를 나타내는지를 결정하도록 ECC 검사 블록(542)에 액세스한다. 리플레이 큐(530)는 액세스가 이 사이클 중 하나의 사이클의 패리티 또는 CRC 에러의 경우에 리플레이되게 한다.
리프레시 논리(532)는 메모리 액세싱 에이전트로부터 수신된 정상적인 판독 및 기입 메모리 액세스 요청으로부터 별도로 생성되는 다양한 전원 차단, 리프레시 및 종단 저항(ZQ) 교정 사이클을 위한 상태 기계를 포함한다. 예를 들어, 메모리 랭크가 기충전(precharge) 전원 차단 상태라면, 메모리 랭크는 리프레시 사이클을 실행하도록 주기적으로 실행되어야 한다. 리프레시 논리(532)는 DRAM 칩 내의 메모리 셀의 차지 오프(charge off) 저장 커패시터의 누출에 의해 유발된 데이터 에러를 방지하도록 리프레시 명령을 주기적으로 생성한다. 또한, 리프레시 논리(532)는 시스템의 열 변화에 기인한 다이 상의 종단 저항의 미스매치를 방지하도록 ZQ를 주기적으로 교정한다.
아비터(538)는 명령 큐(520)에 양방향으로 연결되고 그리고 메모리 채널 제어기(510)의 중심부이다. 아비터는 메모리 버스의 사용을 개선하도록 액세스의 지능적 스케줄링에 의해 효율을 개선한다. 아비터(538)는 명령 큐(520)의 특정한 액세스가 DRAM 타이밍 매개변수에 기초하여 발행에 자격이 있는지를 결정함으로써 적절한 타이밍 관계를 시행하도록 타이밍 블록(534)을 사용한다. 예를 들어, 각각의 DRAM은 "tRC"로서 알려진, 활성화 명령 간의 최소 명시된 시간을 갖는다. 타이밍 블록(534)은 JEDEC 사양에 명시된 이 타이밍 매개변수 및 다른 타이밍 매개변수에 기초하여 자격을 결정하는 계수기의 세트를 유지하고 그리고 리플레이 큐(530)에 양방향으로 연결된다. 페이지 테이블(536)은 아비터(538)를 위한 메모리 채널의 각각의 뱅크 및 랭크의 액티브 페이지에 대한 상태 정보를 유지하고 그리고 리플레이 큐(530)에 양방향으로 연결된다.
인터페이스(512)로부터 수신된 기입 메모리 액세스 요청에 응답하여, ECC 생성 블록(544)은 기입 데이터에 따라 ECC를 산출한다. DB(546)는 수신된 메모리 액세스 요청을 위해 기입 데이터 및 ECC를 저장한다. 이것은 아비터(538)가 메모리 채널에 대한 디스패치를 위해 대응하는 기입 액세스를 선택할 때 결합된 기입 데이터/ECC를 큐(514)로 출력한다.
전력 제어기(550)는 고급 확장성 인터페이스(advanced extensible interface: AXI) 버전 1에 대한 인터페이스(552), APB 인터페이스(554) 및 동력 엔진(560)을 포함한다. 인터페이스(552)는 도 5에 별도로 도시된 "EVENT_n"으로 표기된 이벤트 신호를 수신하기 위한 입력부 및 출력부를 포함하는, SMN에 대한 제1 양방향 연결부를 갖는다. APB 인터페이스(554)는 인터페이스(552)의 출력부에 연결된 입력부, 및 APB를 통해 PHY에 대한 연결을 위한 출력부를 갖는다. 동력 엔진(560)은 인터페이스(552)의 출력부에 연결된 입력부 및 큐(514)의 입력부에 연결된 출력부를 갖는다. 동력 엔진(560)은 구성 레지스터(562), 마이크로제어기(μC)(564), 자동 리프레시 제어기(self refresh controller: SLFREF/PE)(566) 및 신뢰 가능한 판독/기입 타이밍 엔진(reliable read/write timing engine: RRW/TE)(568)의 세트를 포함한다. 구성 레지스터(562)는 AXI 버스를 통해 프로그래밍되고 그리고 다양한 블록의 작동을 제어하도록 구성 정보를 메모리 제어기(500)에 저장한다. 따라서, 구성 레지스터(562)는 도 5에 상세히 도시되지 않은 이 블록에 연결된 출력부를 갖는다. 자동 리프레시 제어기(566)는 리프레시 논리(532)에 의한 리프레시의 자동 생성에 더하여 리프레시의 수동 생성을 허용하는 엔진이다. 신뢰 가능한 판독/기입 타이밍 엔진(568)은 DDR 인터페이스 최대 판독 대기 시간(maximum read latency: MRL) 트레이닝 및 루프백 테스트와 같은 목적을 위해 연속적인 메모리 액세스 스트림을 메모리 또는 I/O 디바이스에 제공한다.
메모리 채널 제어기(510)는 메모리 채널 제어기가 연관된 메모리 채널에 대한 디스패치를 위해 메모리 액세스를 선택하게 하는 회로를 포함한다. 목적하는 중재 결정을 하기 위해서, 어드레스 생성기(522)는 어드레스 정보를 메모리 시스템의 랭크, 행 어드레스, 열 어드레스, 뱅크 어드레스 및 뱅크 그룹을 포함하는 미리 디코딩된 정보로 디코딩하고 그리고 명령 큐(520)는 미리 디코딩된 정보를 저장한다. 구성 레지스터(562)는 어드레스 생성기(522)가 수신된 어드레스 정보를 디코딩하는 방법을 결정하도록 구성 정보를 저장한다. 아비터(538)는 QoS 필요조건과 같은 다른 기준을 준수하면서 메모리 액세스를 효율적으로 스케줄링하도록 디코딩된 어드레스 정보, 타이밍 블록(534)에 의해 나타낸 타이밍 자격 정보 및 페이지 테이블(536)에 의해 나타낸 액티브 페이지 정보를 사용한다. 예를 들어, 아비터(538)는 메모리 페이지를 변화시키도록 요구된 기충전 및 활성화 명령의 오버헤드를 방지하도록 페이지를 열기 위해서 액세스에 대한 우선권을 구현하고 그리고 또 다른 뱅크로의 판독 및 기입 액세스에 명령을 인터리브함으로써 하나의 뱅크에 대한 오버헤드 액세스를 숨긴다. 특히, 정상 작동 동안, 아비터(538)는 보통 페이지가 상이한 페이지를 선택하기 전에 기충전되게 요구될 때까지 상이한 뱅크에서 페이지가 열리게 유지된다.
도 6은 일부 실시형태에 따른, 도 5의 메모리 제어기(500)의 일부를 구현하도록 사용될 수 있는 메모리 제어기(600)를 블록도 형태로 예시한다. 메모리 제어기(600)는 전형적이지 않은 메모리 크기를 수용하도록 2의 거듭제곱이 아닌 어드레스 디코더(610)로서 도 5의 어드레스 디코더(522)를 구현한다. 예를 들어, 메모리 제어기(600)는 데이터 패브릭(250)으로부터 요청을 수신할 수 있고 그리고 요청을 2의 거듭제곱이 아닌 메모리 크기, 예컨대, 6GB DIMM에 프로그램 가능하게 맵핑할 수 있다. 이 작동은 아래에 더 상세히 설명될 것이다.
메모리 제어기(600)는 SDP를 사용하여 데이터 패브릭(250)으로부터 메모리 액세스 요청을 수신하기 위한 입력 포트를 갖는다. 각각의 메모리 액세스 요청은 "CONTROL"로 표기된 제어 신호의 세트, "NORMALIZED ADDRESS"로 표기된 40-비트 어드레스 및 "DATA"로 표기된 256 데이터 신호의 세트를 포함한다. 제어 신호는 액세스 요청을 위한 태그, 요청의 크기, 요청된 서비스 품질, 판독 또는 기입과 같은 액세스의 유형 등을 포함한다. NORMALIZED ADDRESS는 모든 제공된 어드레스 비트를 포함하고 그리고 선행 제로가 붙은 것으로 암시되는 40-비트 어드레스이다. DATA 신호는 단일의 메모리 액세스 요청과 연관되는 충분한 수의 신호를 포함한다. 예를 들어, CPU 코어는 256-비트 캐시 라인 크기를 가진 최종 레벨 캐시를 포함할 수도 있고; 따라서 메모리에 대한 캐시 라인의 라이트백(writeback)은 256-비트 전송을 요구할 것이다. 물리적 인터페이스, 예컨대, 도 3의 PHY(330)는 8 내지 64-비트 또는 72-비트(에러 정정 코드의 64 비트 더하기 8 비트) DDR DIMM의 버스트로서 대응하는 메모리 액세스를 수행할 수도 있지만, 메모리 제어기는 메모리 액세스 요청의 부분으로서 모든 256 데이터 비트를 수신한다.
메모리 제어기(600)는 2의 거듭제곱이 아닌 어드레스 디코더(610) 및 이전에 도 5에 예시된 바와 같은, 기입 데이터 버퍼(546)를 포함한다. 어드레스 디코더(610)는 NORMALIZED ADDRESS를 수신하기 위한 입력부, 및 "CS[n]"으로 표기된 n개의 칩 선택 신호의 세트, "CHIP_ID"로 표기된 3개의 칩 식별 신호의 세트, "ROW_ADDRESS"로 표기된 디코딩된 행 어드레스, "COLUMN_ADDRESS"로 표기된 디코딩된 열 어드레스, "BG"로 표기된 뱅크 그룹 신호, 및 "BA"로 표기된 뱅크 어드레스 신호를 제공하기 위한 출력부를 포함한다. 메모리 제어기(600)가 제어 신호와 함께 어드레스 디코더(610)의 이 출력을 명령 큐(520)에 제공하여 명령 큐(520)가 이들을 저장해서 아비터(538)가 메모리 액세스 요청의 효율적인 주문에 대한 결정을 내릴 수 있다. 메모리 제어기(600)는 또한 페이지 테이블(536)이 각각의 DRAM 칩에서 열린 페이지와 액세스 요청을 연관시키도록 열_어드레스, BG, 및 BA 신호를 페이지 테이블(536)에 제공한다.
기입 데이터 버퍼(546)는 256-비트 데이터 신호를 수신하기 위한 입력부 및 BEQ(514)의 입력부에 연결된 출력부를 가진 홀딩 버퍼이다. 데이터 패브릭(250)이 산재된 판독 및 기입 메모리 액세스 요청을 메모리 제어기(600)에 제공하기 때문에, 기입 데이터 버퍼(546)는 모든 수신된 메모리 액세스 요청을 위해 사용되지 않을 것이지만 기입만을 위해 사용될 것이다.
작동시, 시스템 BIOS는 메모리 채널의 밀도 및 구성을 결정하도록 부팅 시 메모리 채널(130 및 140)의 각각의 메모리 모듈의 직렬 존재 검출(serial presence detect: SPD) ROM에 문의한다. 시스템 BIOS는 미리 결정된 작업 부하 및 메모리 칩 구성을 위한 어드레스 맵을 획정하도록 어드레스 디코더(610)의 구성 가능한 어드레스 디코더 레지스터를 프로그래밍하도록 이 정보를 사용한다. 시스템 BIOS는 또한 논리 어드레스로부터 NORMALIZED ADDRESS의 포맷인 물리적 어드레스로의 가상 어드레스 이동을 위해 사용되는 페이지 테이블을 프로그래밍하는 것을 허용하도록 이 정보를 작동 시스템에서 이용 가능하게 만든다. 레지스터가 시스템 BIOS에 의해 구성된 후에, 어드레스 디코더(610)는 각각의 액세스 요청을 대응하는 칩 선택을 가진 특정한 구역에 맵핑하도록 NORMALIZED ADDRESS를 디코딩하게 레지스터를 사용한다.
예를 들어, 메모리가 2의 거듭제곱 크기를 가진 DDR4 메모리라면, 어드레스 디코더(522)는 아래의 표 1에 도시된 바와 같이 NORMALIZED ADDRESS를 다양한 출력 신호로 디코딩한다:
CS 크기 디바이스 크기, 폭 BG1 BG0 BA1 BA0 어드레스
1GB 2Gb, x16 x A15 A14 A13 ROW_ADDRESS = A[29:16]
COLUMN_ADDRESS = A[12:3]
2GB 2Gb, x8 A16 A15 A14 A13 ROW_ADDRESS = A[30:17]
COLUMN_ADDRESS = A[12:3]
2GB 4Gb, x16 x A15 A14 A13 ROW_ADDRESS = A[30:16]
COLUMN_ADDRESS = A[12:3]
4GB 2Gb, x4;4Gb, x8 A16 A15 A14 A13 ROW_ADDRESS = A[31:17]
COLUMN_ADDRESS = A[12:3]
4GB 8Gb, x16 x A15 A14 A13 ROW_ADDRESS = A[31:16]
COLUMN_ADDRESS = A[12:3]
8GB 4Gb, x4;8Gb, x8 A16 A15 A14 A13 ROW_ADDRESS = A[32:17]
COLUMN_ADDRESS = A[12:3]
8GB 16Gb, x16 x A15 A14 A13 ROW_ADDRESS = A[32:16]
COLUMN_ADDRESS = A[12:3]
16GB 8Gb, x4; 16Gb, x8 A16 A15 A14 A13 ROW_ADDRESS = A[33:17]
COLUMN_ADDRESS = A[12:3]
32GB 16Gb, x4 A16 A15 A14 A13 ROW_ADDRESS = A[34:17]
COLUMN_ADDRESS = A[12:3]
일부 DIMM와 협력하기 위해서, 메모리 제어기(600)는 또한 랭크 곱셈(rank multiplication)으로서 알려진 피처를 제공한다. 랭크 곱셈을 하는 시스템에서, 미리 결정된 DIMM 상의 각각의 패키징된 집적 회로는 관통-실리콘-비아(through-silicon-via: TSV) 기술을 사용하여 상호 연결된 메모리 칩의 3차원(3D) 스택을 포함한다. 예를 들어, DDR4 표준은 2, 4, 및 8개의 메모리 칩의 스택을 제공하도록 3-비트 칩 식별 입력 신호(C[2:0])를 명시한다. 이 방식으로, 스택의 각각의 메모리 칩은 구역 내에서 선택된 논리 랭크를 식별하도록 공통 칩 선택 신호 및 인코딩된 C[2:0] 신호 둘 다에 의해 선택된다. 랭크 곱셈을 구현하기 위해서, 어드레스 디코더(610)는 NORMALIZED ADDRESS를 논리 랭크로 프로그램 가능하게 디코딩하고 그리고 하나의 핫 칩 선택 신호를 선택된 구역에 대해 활성화시키고 그리고 또한 선택된 논리 랭크에 대응하는 인코딩된 C[2:0] 신호를 제공한다.
어드레스 디코더(610)는 2의 거듭제곱이 아닌 어드레스 디코딩을 제공한다. 어드레스 디코더(610)의 구성이 이제 설명될 것이다.
도 7은 일부 실시형태에 따른, 도 6의 2의 거듭제곱이 아닌 디코더(610)의 간략화된 블록도를 블록도 형태로 예시한다. 2의 거듭제곱이 아닌 어드레스 디코더(610)는 대응하는 칩 선택 신호에 의해 획정된 상이한 랭크와 연관된 구역 디코더(700)의 세트를 포함한다. 도 7에 예시된 실시예에서, 어드레스 디코더(700)는 "CS0", "CS1", "CS2", 및 "CS3"으로 각각 표기된 4개의 칩 선택 신호와 연관된 4개의 구역 디코더(710)를 포함한다. 각각의 구역 디코더(710)는 1차 디코더(720), 2차 디코더(730), 논리 회로 표기된 "OR"(740), "CFG"로 표기된 1차 디코더(720)와 연관된 구성 레지스터(750)의 제1 세트, 및 2차 디코더(730)와 연관된 유사하게 표기된 구성 레지스터(760)의 제2 세트를 포함한다. 구성 레지스터(750 및 760)가 1차 디코더(720) 및 2차 디코더(730), 각각과 논리적으로 연관되고 그리고 물리적으로 구별될 수도 있거나 또는 도 5의 구성 레지스터(562)와 같이 중앙 레지스터 세트로 다른 구성 레지스터와 결합될 수도 있다는 것을 주의하라.
구성 레지스터(750 및 760)의 각각은 SMN 버스에 연결된 입력부, 및 1차 디코더(720) 및 2차 디코더(730) 중 각각의 하나에 의한 사용을 위해 레지스터 값을 제공하기 위한 출력부를 갖는다. 1차 디코더(720)는 NORMALIZED ADDRESS를 수신하기 위한 제1 입력부, 구성 레지스터(750)의 출력부에 연결된 제2 입력부, 및 1차 칩 선택 신호를 제공하기 위한 출력부를 갖는다. 1차 칩 선택 신호는 "CSPRI0", "CSPRI1", "CSPRI2" 및 "CSPRI3"으로 각각 표기된다. 2차 디코더(730)는 NORMALIZED ADDRESS를 수신하기 위한 제1 입력부, 구성 레지스터(760)의 출력부에 연결된 제2 입력부, 및 1차 칩 선택 신호를 제공하기 위한 출력부를 갖는다. 1차 칩 선택 신호는 "CSSEC0", "CSSEC1", "CSSEC2", 및 "CSSEC3"으로 각각 표기된다. 논리 회로(740)는 1차 디코더(720)의 출력부에 연결된 제1 입력부, 2차 디코더(730)의 출력부에 연결된 제2 입력부, 및 신호("CS0", "CS1", "CS2", 및 "CS3") 중 각각의 신호를 제공하기 위한 출력부를 갖는다.
구성 레지스터(750 및 760)의 각각의 세트는 NORMALIZED ADDRESS가 디코딩될 수 있고 그리고 구역에 맵핑될 수 있도록 구역의 속성을 획정하기에 충분한 수개의 레지스터를 포함한다. 하나의 실시예에서, 베이스 어드레스 레지스터는 구역의 스타팅 어드레스를 획정하고 그리고 구역의 최하위 어드레스에 대응하며, 반면에 어드레스 마스크 레지스터는 구역의 크기를 획정하고 따라서 디코딩에서 사용될 상당한 비트를 식별한다. 각각의 디코더는 어드레스 마스크 레지스터에 따라 마스킹된, NORMALIZED ADDRESS의 상당한 비트를 베이스 어드레스 레지스터의 대응하는 비트와 비교한다. 매칭된다면, 그러면 디코더는 디코더의 각각의 칩 선택 신호를 출력하고 그리고 논리 회로(740)는 최종 칩 선택 신호를 출력한다. 액티브한 높은 칩 선택 신호에 대해, 논리 회로(740)는 논리 OR 함수를 사용하여 구현된다.
하나의 실시형태에서, 각각의 1차 디코더는 2N의 크기의 구역을 제공하고 그리고 각각의 2차 디코더는 2(N-1)의 크기의 구역을 제공하며, 여기서 N은 정수이다. 예를 들어, N이 32와 같다면, 그러면 6GB의 총 구역 크기에 대해, 1차 디코더(720)는 4GB의 구역 크기를 제공하고 그리고 2차 디코더는 2GB의 구역 크기를 제공한다.
동일한 구역이 할당되고 그리고 그 결과를 결합하는, 1차 디코더 및 2차 디코더 둘 다를 제공함으로써, 구역 디코더(710)는 복잡한 비트-바이-비트 디코딩(bit-by-bit decoding) 없이 2의 거듭제곱이 아닌 메모리 크기를 제공하여, 디코더의 크기를 감소시킨다. 1차 디코더 및 2차 디코더 각각이 2의 거듭제곱 크기를 갖기 때문에, 디코더는 콤팩트한 회로를 사용하여 신속하게 그리고 효율적으로 NORMALIZED ADDRESS 비트의 하위 세트에서 구역 디코딩을 수행할 수 있다. 디코딩 작동에 요구되는 비트의 수를 감소시킴으로써, 어드레스 디코더(700)는 어드레스를 더 빠르게 디코딩할 수 있다. 예를 들어, 임의의 구역 크기의 베이스 레지스터 및 리미트 레지스터와 40-비트 NORMALIZED ADDRESS의 32 비트의 완전한 비트-바이-비트 비교는 현대의 CMOS 논리 과정을 사용하는 더 높은 클록 속도를 해결하기 위해서 1개보다 많은 클록 사이클을 필요로 할 것이다.
어드레스 디코더(710)가 1차 디코더 및 2차 디코더 둘 다와 함께 2의 거듭제곱이 아닌 구역 크기를 제공하도록 사용될 수 있지만, 추가적인 구성이 다른 실시형태에 따라 가능하다. 예를 들어, 각각의 어드레스 디코더는 2N, 2(N-1), 및 2(N-2)의 각각의 크기를 갖는 1차 디코더, 2차 디코더, 및 3차 디코더를 포함할 수 있다. 예를 들어, N이 32와 같다면, 이 구성은 1GB 증분으로 1 내지 7GB의 구역 크기로의 정규화된 어드레스의 디코딩을 허용한다. 이 개념은 또한 4개 이상의 디코더로 더 확장될 수 있다.
도 8은 2개의 구역 디코더를 사용하여 2의 거듭제곱이 아닌 어드레스 공간을 위해 프로그래밍될 때 도 7의 어드레스 디코더에 의해 수행된 어드레스 맵핑을 도시하는 도면(800)을 예시한다. 도면(800)은 정규화된 어드레스 공간(810), 제1 구역(820) 및 제2 구역(830)을 포함한다. 정규화된 어드레스 공간(810)은 디코딩된 신호(CSPRI0)와 연관된 4GB 하위-구역(812), 디코더 신호(CSPRI1)와 연관된 4GB 하위-구역(814), 디코딩된 신호(CSSEC0)와 연관된 2GB 하위-구역(816) 및 디코딩된 신호(CSSEC1)와 연관된 2GB 하위-구역을 갖는다. 하위-구역(812)은 어드레스(0×0)에서 시작되고 그리고 4G - 1 (232 - 1)인 어드레스(0×0_FFFF_FFFF)로 확장되며,
0×는 선행 제로를 내포한 40-비트 16진법 어드레스를 나타낸다. 하위-구역(814)은 어드레스(0×1_0000_0000)(232)에서 시작되고 그리고 8G - 1 (232 + 232 - 1)인 어드레스(0×1_FFFF_FFFF)로 확장된다. 하위-구역(816)은 어드레스(0×2_0000_0000)(8G)에서 시작되고 그리고 어드레스(0×2_7FFF_FFFF)(10G - 1)로 확장된다. 하위-구역(818)은 어드레스(0×2_8000_0000)(10G)에서 시작되고 그리고 어드레스(0×2_FFFF_FFFF)(12G - 1)로 확장된다. 제1 구역(820)은 CS0과 연관된 6GB 구역이고 그리고 4GB 1차 부분(822) 및 2GB 2차 부분(824)을 갖는다. 제1 구역(820)은 128K(131,072) 바이트의 48K(49,152) 행 각각으로 구현되고, 1차 구역(822)은 행 어드레스(0×0)로부터 행 어드레스(0×7FFF)로 확장되는 32K(32,768) 행으로 구현되고 그리고 2차 구역(824)은 행 어드레스(0×8000)로부터 행 어드레스(0×bFFF)로 확장되는 16K 행으로 구현된다. 마찬가지로, 제2 구역(830)은 128K 바이트의 48K 행 각각으로 구현되고, 1차 구역(832)은 행 어드레스(0×0)로부터 행 어드레스(0×7FFF)로 확장되는 32K 행으로 구현되고 그리고 2차 구역(834)은 행 어드레스(0×8000)로부터 행 어드레스(0×bFFF)로 확장되는 16K 행으로 구현된다.
이 디코딩 작동을 수행하기 위해서, 시스템 BIOS는 구성 레지스터를 표2에 나타낸 바와 같이 프로그래밍한다:
레지스터 명칭 레지스터 기능
BaseAddrCS0[39:8] CS0 1차 디코더에 대한 베이스 어드레스 레지스터 0×0_0000_00
BaseAddrCS1[39:8] CS1 1차 디코더에 대한 베이스 어드레스 레지스터 0×1_0000_00
BaseAddrSecCS0[39:8] CS0 2차 디코더에 대한 베이스 어드레스 레지스터 0×2_0000_00
BaseAddrSecCS1[39:8] CS1 1차 디코더에 대한 베이스 어드레스 레지스터 0×2_8000_00
AddrMaskCS01[39:8] CS0 및 CS1에 대한 1차 디코더에 대한 어드레스 마스크 0×0_FFFF_FF
AddrMaskSecCS01[39:8] CS0 및 CS1에 대한 2차 디코더에 대한 어드레스 마스크 0×0_7FFF_FF
비트 [7:0]은 256 바이트의 바이트 어드레싱을 나타낸다는 것을 주의하라. 이 비트는 구현 편의를 위해 제외하고, 그리고 베이스 레지스터에 대해 0 그리고 마스크 레지스터에 대해 1인 것으로 추론된다.
메모리 액세스 인터리빙
공지된 메모리 제어기는 입력 어드레스의 특정한 비트가 뱅크 어드레스를 형성하도록 디코딩되는 뱅크 스위즐 모드로서 알려진 부가적인 인터리빙 모드를 사용한다. 이 특정한 비트는 새로운 뱅크(또는 뱅크 및 뱅크 그룹 둘 다의 DDR4의 경우에) 비트를 생성하도록 하위의 행 어드레스 비트와 같은 액세스 어드레스의 특정한 비트를 포함한다. 이 방식으로, 그렇지 않았다면 페이지 충돌을 유발할 연속 어드레스의 세트의 상이한 부분이 뱅크 간에 나눠져서, 더 큰 효율을 발생시킨다.
일부 실시형태에 따르면, 본 명세서에 설명된 바와 같은 메모리 제어기는 별개의 구역의 세트에 걸쳐 물리적 어드레스 공간을 인터리브하도록 프로그램 가능한 메커니즘을 포함한다. 이 방식으로, 위에서 설명된 바와 같은 메모리 제어기, 예를 들어, 도 2의 메모리 제어기(292 또는 294) 또는 도 5의 메모리 제어기(500)는 DRAM의 다수의 랭크에 걸친 프로그램의 실행 동안 직면될 수도 있는 일련의 액세스를 스프레드함으로써 더 효율적으로 작동될 수 있다. 따라서 오버헤드 사이클, 예컨대, 페이지 기충전 및 페이지 활성화(page activate)가 유용한 사이클 내에 숨겨질 수 있다. 제1 메커니즘은 1차 및 2차 구역 디코더를 사용하여 달성될 수 있는 칩 선택 인터리빙이다.
도 9는 일부 실시형태에 따른, 2개의 어드레스 디코더를 사용하여 칩 선택 인터리브를 구현하도록 프로그래밍될 때 도 7의 어드레스 디코더에 의해 수행된 어드레스 맵핑을 도시하는 도면(900)을 예시한다. 도면(900)은 정규화된 어드레스 공간(910), 제1 구역(920) 및 제2 구역(930)을 포함한다. 정규화된 어드레스 공간(910)은 디코딩된 신호(CSPRI0)와 연관된 2GB 하위-구역(912), 디코더 신호(CSPRI1)와 연관된 2GB 하위-구역(914), 디코딩된 신호(CSSEC0)와 연관된 2GB 하위-구역(916) 및 디코딩된 신호(CSSEC1)와 연관된 2GB 하위-구역(918)을 갖는다. 하위-구역(912)은 어드레스(0×0)에서 시작되고 그리고 2G - 1 (231 - 1)인 어드레스(0×0_7FFF_FFFF)로 확장된다. 하위-구역(914)은 어드레스(0×8_0000_0000)(231)에서 시작되고 그리고 4G - 1 (231 + 231 - 1)인 어드레스(0×0_FFFF_FFFF)로 확장된다. 하위-구역(916)은 어드레스(0×1_0000_0000)(4GB)에서 시작되고 그리고 어드레스(0×1_7FFF_FFFF)(6G - 1)로 확장된다. 하위-구역(918)은 어드레스(0×1_8000_0000)(6G)에서 시작되고 그리고 어드레스(0×1_FFFF_FFFF)(8G - 1)로 확장된다. 제1 구역(920)은 CS0과 연관된 4GB 구역이고 그리고 2GB 부분(922) 및 2GB 부분(924)을 갖는다. 제1 구역(920)은 128K 바이트의 16K 행 각각으로 구현되고, 1차 구역(922)은 행 어드레스(0×0)로부터 행 어드레스(0×3FFF)로 확장되는 16K 행으로 구현되고 그리고 2차 구역(924)은 행 어드레스(0×4000)로부터 행 어드레스(0×7FFF)로 확장되는 16K 행으로 구현된다. 마찬가지로, 제2 구역(930)은 128K 바이트의 16K 행 각각으로 구현되고, 1차 구역(932)은 행 어드레스(0×0)로부터 행 어드레스(0×3FFF)로 확장되는 16K 행으로 구현되고 그리고 2차 구역(934)은 행 어드레스(0×4000)로부터 행 어드레스(0×7FFF)로 확장되는 16K 행으로 구현된다.
칩 선택 인터리브 모드에서, 메모리 제어기(600)는 정규화된 어드레스 공간에서 어드레스의 연속 세트를 차지하는 단일의 DIMM 랭크와 대조적으로, 채널의 다수의 DIMM 랭크에 걸쳐 물리적 어드레스 공간을 인터리브한다. 칩 선택(chip select: CS) 인터리브는 잠재적으로 더 많은 DRAM 뱅크가 더 작은 어드레스 구역에 걸쳐 사용될 수 있을 때 페이지 충돌을 감소시켜서, 실질적으로 더 많은 DRAM 뱅크가 이용 가능하게 만든다. 칩 선택 인터리브를 사용하기 위해서, 2개의 필요조건이 있다. 첫째로, 인터리브된 칩 선택 신호의 수는 2의 거듭제곱이다. 둘째로, 구역은 동일한 크기이다. 도 9의 실시예에서, 동일한 크기(4GB)를 가진 2개의 구역을 위한 2(21)개의 칩 선택이 있다.
메모리 제어기(600)는 구역 및 칩 선택 신호를 선택하도록 사용된 상위의 정규화된 어드레스 비트를 목적하는 인터리브 크기에 대응하는 정규화된 어드레스의 하위 비트로 바꿈으로써 칩 선택 인터리브를 프로그램 가능하게 구현한다. CS 인터리브 모드는 인터리브의 크기를 나타내도록 BaseAddrCS 레지스터 및 AddrMaskCS 레지스터를 설정함으로써 구성될 수 있다. 예를 들어, 2-CS 시스템에서 1024KB 정규화된 어드레스 범위에서 1차 디코더만을 그리고 이어서 2차 디코더만을 인터리빙한다면, 레지스터 설정은 아래의 표3에 나타낸 바와 같을 것이다:
레지스터 명칭 레지스터 기능 원본 맵 인터리브된 맵
BaseAddrCS0[39:8] CS0 1차 디코더에 대한 베이스 어드레스 레지스터 0×0_0000_00 0×0_0000_00
BaseAddrCS1[39:8] CS1 1차 디코더에 대한 베이스 어드레스 레지스터 0×0_8000_00 0×0_0000_10
BaseAddrSecCS0[39:8] CS0 2차 디코더에 대한 베이스 어드레스 레지스터 0×1_0000_00 0×1_0000_00
BaseAddrSecCS1[39:8] CS1 1차 디코더에 대한 베이스 어드레스 레지스터 0×1_8000_00 0×1_0000_10
AddrMaskCS01[39:8] CS0 및 CS1에 대한 1차 디코더에 대한 어드레스 마스크 0×0_7FFF_FF 0×0_FFFF_EF
AddrMaskSecCS01[39:8] CS0 및 CS1에 대한 2차 디코더에 대한 어드레스 마스크 0×0_7FFF_FF 0×0_7FFF_EF
따라서 구역(912 및 914)은 이제 어드레스(0×0) 내지 어드레스(0×0_FFFF_FFFF)에 걸쳐 양방향으로 인터리브되고 그리고 어드레스 비트 12는 CS0 또는 CS1이 사용되는지를 결정한다. 마찬가지로, 구역(916 및 918)은 또한 어드레스(0×1_0000_0000) 내지 어드레스(0×1_FFFF_FFFF)에 걸쳐 양방향으로 인터리브되고 그리고 어드레스 비트 12는 CS0 또는 CS1이 사용되는지를 다시 결정한다.
표 1에 나타낸 실시예에서, 어드레스 비트 A[12](1024KB의 크기에 대응함)는 열 어드레스 비트 9(COL[9])에 맵핑되었다. 이 맵핑은 인터리빙을 구현할 때 펌웨어의 부가적인 융통성을 허용한다. 현재의 실시예에서, A[12]는 CS 인터리빙을 위해 사용되고 그리고 COL[9]는 A[13] 대신에 맵핑되며 그리고 고차 어드레스 비트는 표1의 패턴에 따라, 뱅크 및 뱅크 그룹 어드레스를 위해 사용되고, 즉, BA0에 대해 A[14], BA1에 대해 A[15] 등이 사용된다.
제2 메커니즘은 해싱으로서 알려져 있다. 해싱은 더 많은 어드레스 비트가 사용되게 허용함으로써 더 미세한 입상도를 제공한다. 해싱에서 사용되는 어드레스 비트의 수 및 위치가 사용자에 의해 프로그래밍될 수 있어서, 융통성을 제공하여, 해싱 작동이 소프트웨어 코드의 특정한 적용 및 특성을 위해 조정될 수 있다.
도 10은 일부 실시형태에 따른, 도 5의 어드레스 디코더(522)를 구현하도록 사용될 수 있는 메모리 제어기(1000)의 부분을 블록도 형태로 예시한다. 메모리 제어기(1000)는 어드레스 디코더(1010) 및 구성 레지스터(1020)의 세트를 포함한다. 어드레스 디코더(1010)는 칩 선택(CS) 해싱 회로(1012) 및 뱅크 어드레스(BA) 해싱 회로(1014)를 포함한다. CS 해싱 회로(1012)는 인터페이스(512)로부터 40-비트 NORMALIZED ADDRESS를 수신하기 위한 입력부 및 "CS_HASH"로 표기된 해싱된 칩 선택 신호의 세트를 제공하기 위한 출력부를 갖는다. BA 해싱 회로(1014)는 CS 해싱 회로(1012)의 출력부에 연결된 제1 입력부, NORMALIZED ADDRESS를 수신하기 위한 제2 입력부 및 CHIP_ID, ROW_ADDRESS, COLUMN_ADDRESS, BG, 및 BA_HASH 신호를 제공하기 위한 출력부를 갖는다. 메모리 제어기(1000)가 CONTOL 신호와 함께 이 출력부를 사용하여 디코딩된 메모리 액세스를 명령 큐(520)에 제공하여 명령 큐(520)가 메모리 액세스를 저장해서 아비터(538)가 메모리 액세스 요청의 효율적인 주문에 대한 결정을 할 수 있다.
어드레스 디코더(1010)는 위에서 설명된 바와 같이 메모리 채널의 각각의 메모리 칩의 크기 및 베이스 어드레스에 대한 다양한 구성 레지스터로부터 필드를 수신한다. 또한, 어드레스 디코더(1010)는 프로그램 가능한 해싱 함수를 제공하도록 부가적인 구성 레지스터를 사용하고 그리고 도 10은 이 부가적인 구성 레지스터만을 도시한다. 예시된 실시형태에서, 어드레스 디코더(1010)는 4개의 칩 선택 신호까지 그리고 32개의 뱅크까지 제공한다. 따라서 구성 레지스터(1020)는 인코딩된 CS 신호의 비트에 각각 대응하는 2개의 CS 해시 레지스터(1030)의 세트 및 인코딩된 BA 신호의 비트에 각각 대응하는 5개의 BA 해시 레지스터(1040)의 세트를 포함한다.
CS 해시 레지스터(1030)는 CS_HASH[0]과 연관된 제1 CS 해시 레지스터(1032) 및 CS_HASH[1]과 연관된 제2 CS 해시 레지스터(1034)를 포함한다. 각각의 CS 해시 레지스터는 레지스터 비트 31:1에서 "NORMALIZED ADDRESS XOR[39:9]"로 표기된 30-비트 필드 및 레지스터 비트 0에서 "EN"으로 표기된 인에이블 필드(enable field)를 포함하는 32-비트 레지스터이다. BA 해시 레지스터(1040)는 해싱된 뱅크 어드레스 비트(BA_HASH[0], BA_HASH[1], BA_HASH[2], BA_HASH[3] 및 BA_HASH[4]) 각각과 연관된 BA 해시 레지스터(1042, 1044, 1046, 1048 및 1050)를 포함한다. 각각의 BA 해시 레지스터는 3개의 필드: 레지스터 비트 31:14에서 "ROWXOR[17:0]"로 표기된 18-비트 행 배타적-OR(XOR) 필드, 레지스터 비트 13:1에서 "COLXOR[12:0]"로 표기된 13-비트 열 XOR 필드 및 레지스터 비트 0에서 "EN"으로 표기된 인에이블 필드를 가진 32 비트 레지스터이다.
어드레스 디코더(1010)는 NORMALIZED ADDRESS의 선택된 비트를 사용하여 비트의 XOR 작동을 수행한다. CS 해싱 회로(1012)는 먼저 NORMALIZED ADDRESS의 최상위 31 비트 중 선택된 비트를 사용하여 칩 선택 비트를 해싱한다. CS 해시 레지스터의 NORMALIZED ADDRESS XOR 필드의 각각의 비트는 NORMALIZED ADDRESS의 표시된 비트에서 비트의 배타적 OR(XOR) 작동을 선택적으로 수행하도록 사용된다. 2개의 칩 선택 신호는 아래의 방정식 [1] 및 방정식 [2]에 따라 해싱된다:
Figure pct00001
Figure pct00002
^는 XOR 연산자를 나타내고 그리고 ^( )는 각각의 비트의 쌍에 대한 비트의 XOR 연산자를 나타낸다.
메모리 디코더(1010)는 먼저 메모리의 크기에 기초하여 CS[1:0] 비트를 위치시킨다. 이어서 메모리 디코더는 방정식 [1] 및 방정식 [2]를 사용하여 CS_HASH 값을 계산하도록 CS 해싱을 수행한다. CS 해싱 회로(1012)가 해싱된 CS_HASH 값을 결정한 후에, BA 해싱 회로(1014)는 방정식 [3] 내지 방정식 [7]을 사용하여 BA_HASH 값을 계산하도록 BA 해싱을 수행한다:
Figure pct00003
Figure pct00004
Figure pct00005
Figure pct00006
Figure pct00007
CS 비트에 대응하는 NORMALIZED ADDRESS 비트가 CS 비트를 해싱하도록 사용될 수 없는데, 그것은 그렇지 않으면 모든 CS_HASH 값이 0이 되게 강요되기 때문임을 주의하라. 이 레지스터 값을 설정하는 것에 관한 부가적인 제약이 아래에 더 설명될 것이다.
일부 실시형태에서, CS 및 BA 해싱 함수는 메모리 구성의 추가 레벨로 확장될 수 있다. 예를 들어, HBM 메모리는 "의사 채널(pseudo channel)"로서 알려진 개념을 구현한다. 의사 채널은 또한 아래의 방정식 [8]에 설명된 바와 같이, 대응하는 해싱 방정식 및 대응하는 의사 채널 레지스터를 사용하여 해싱될 수 있다:
Figure pct00008
이 경우에, 메모리 제어기는 부가적인 해싱 회로 및 부가적인 구성 레지스터를 사용한다.
공지된 메모리 제어기는 오직 뱅크 어드레스를 해싱하고 그리고 고정된 해싱 함수를 사용한다. 메모리 제어기(1000)는 융통성을 증가시키도록 2개의 부가적인 메커니즘을 제공한다. 첫째로, 메모리 제어기(1000)는 액세스를 나눌 시 더 큰 융통성을 서용하도록 칩 선택을 선택적으로 해싱한다. 예를 들어, 4개의 랭크 및 4개의 칩 선택을 가진 메모리는 4배 이상의 메모리 뱅크에 걸쳐 근위의 메모리 액세스의 세트를 더 넓게 스프레드하도록 사용될 수 있다. 이 더 넓은 스프레딩은 메모리 제어기(1000)가 오버헤드를 더 잘 숨기게 한다. 둘째로, 메모리 제어기(1000)는 해싱 함수 자체가 프로그램 가능하게 하고 따라서 처리 환경에 더 잘 맞춰지도록 변화 가능하게 한다. 예를 들어, 모바일 시스템은 데스크톱 시스템 또는 서버보다는 더 적은 수의 태스크를 실행하고 그리고 물리적 어드레스 공간에서 상위 코드 및 데이터 집중을 사용하려는 경향이 있고, 따라서 물리적 메모리의 비교적 작은 영역에 대한 더 많은 메모리 액세스가 다수의 칩 및 뱅크에 걸쳐 더 넓게 스프레드되는 것을 보장하도록 더 복잡한 해싱 알고리즘으로부터 이익을 얻을 것이다. 반면에, 데스크톱 및 서버 시스템은 더 멀티-태스킹 및 멀티-스레드되는 경향이 있고, 그래서 더 단순한 해싱 알고리즘이 충분할 수도 있다. 둘 다의 경우에, 해싱 알고리즘은 시스템 BIOS에 의해 선택적으로 프로그래밍될 수 있는 해싱 레지스터의 세트를 통해 프로그래밍 가능하다.
도 11은 일부 실시형태에 따른, 도 5의 어드레스 디코더(522)를 구현하도록 사용될 수 있는 메모리 제어기(1100)의 또 다른 부분을 블록도 형태로 예시한다. 본 명세서에 도시된 바와 같이, 메모리 제어기(1100)는 해싱 회로(1120), 뒤이어 2의 거듭제곱이 아닌 디코더(1130)를 가진 어드레스 디코더(1110)를 포함한다. 해싱 회로(1120)는 액세스 어드레스를 수신하기 위한 입력부 및 출력부를 갖고 그리고 도 10의 해싱 회로(1010)를 사용하여 구현될 수 있다. 2의 거듭제곱이 아닌 디코더(1130)는 해싱 회로(1120)의 출력부에 연결된 입력부 및 디코딩된 어드레스를 제공하기 위한 출력부를 갖고 그리고 도 6 및 도 7의 2의 거듭제곱이 아닌 디코더 회로(610)를 사용하여 구현될 수 있다. 메모리 제어기(1100)는 해싱 메커니즘 및 2의 거듭제곱이 아닌 메모리 크기의 디코더가 따로따로 구현될 수 있을 뿐만 아니라, 이들이 또한 단일의 메모리 디코더(1110)에서 함께 사용될 수 있다는 것을 예시한다. 이 경우에, 해싱 메커니즘은 함수 둘 다를 제공함으로써 메모리 제어기에 더 향상된 융통성을 제공하도록 2의 거듭제곱이 아닌 디코딩을 매끄럽게 선행한다.
해싱 작동은 또한 2의 거듭제곱이 아닌 메모리 크기로 매끄럽게 사용될 수 있다. 해싱 회로(1012)가 2의 거듭제곱이 아닌 메모리 어드레스 크기로 해싱 작동을 수행하는 방식이 특정한 실시예에 대하여 설명될 수 있다. 이 실시예에서, 듀얼-랭크 12Gb 메모리는 2개의 구역 디코더를 사용하여 구현되고, CS0에 대한 제1 구역 디코더는 1차 디코더(CS0p) 및 2차 디코더(CS0s)를 사용하여 메모리 공간의 12Gb에 맵핑되고 그리고 CS1에 대한 제2 구역 디코더는 1차 디코더(CS1p) 및 2차 디코더(CS1s)를 사용하여 메모리 공간의 12Gb에 맵핑된다. 이 실시예에서, 인터리빙은 간단한 방식으로 발생한다:
레지스터 명칭 레지스터 기능 원본 맵 인터리브된 맵
BaseAddrCS0[39:8] CS0 1차 디코더에 대한 베이스 어드레스 레지스터 0×0_0000_00 0×0_0000_00
BaseAddrCS1[39:8] CS1 1차 디코더에 대한 베이스 어드레스 레지스터 0×1_0000_00 0×0_0000_10
BaseAddrSecCS0[39:8] CS0 2차 디코더에 대한 베이스 어드레스 레지스터 0×2_0000_00 0×2_0000_00
BaseAddrSecCS1[39:8] CS1 1차 디코더에 대한 베이스 어드레스 레지스터 0×2_8000_00 0×2_8000_10
AddrMaskCS01[39:8] CS0 및 CS1에 대한 1차 디코더에 대한 어드레스 마스크 0×0_FFFF_FF 0×0_FFFF_EF
AddrMaskSecCS01[39:8] CS0 및 CS1에 대한 2차 디코더에 대한 어드레스 마스크 0×0_7FFF_FF 0×0_FFFF_EF
NORMALIZED ADDRESS 디코더 해싱된 어드레스의 MSB
0×000 CS0p 0×0
0×001 CS1p 0×0
0×002 CS0p 0×0
0×003 CS1p 0×0
0×004 CS0p 0×0
0×005 CS1p 0×0
0×006 CS0p 0×0
0×007 CS1p 0×0
0×008 CS0p 0×1
0×009 CS1p 0×1
0×00A CS0p 0×1
0×00B CS1p 0×1
0×00C CS0p 0×1
0×00D CS1p 0×1
0×00E CS0p 0×1
0×00F CS1p 0×1
0×010 CS0s 0×2
0×011 CS1s 0×2
0×012 CS0s 0×2
0×013 CS1s 0×2
0×014 CS0s 0×2
0×015 CS1s 0×2
0×016 CS0s 0×2
0×017 CS1s 0×2
시스템 BIOS가 2의 거듭제곱이 아닌 크기를 설정하도록 2의 거듭제곱이 아닌 디코더(1130)를 구성할 때, DRAM 구조에 기인한 해싱 함수에 관한 부가적인 제약이 있다. 예를 들어, 도 8 및 도 9에 예시된 구성에 따르면, 48K 행만이 있고, 그리고 Row[MSB:MSB-1]에 대응하는 ROWXOR 비트는 이것이 3개의 상태를 정확한 수의 뱅크 상태로 정확하게 바꾸지 않기 때문에 해싱 작동을 위해 가능하게 되지 않아야 한다. 대신에, 이 비트는 오직 2의 거듭제곱 크기를 가진 메모리에서 사용될 수 있다.
따라서 위에서 설명된 메모리 제어기가 다양한 구성 가능한 선택을 통해 융통성 있는 어드레스 맵핑을 수행할 수 있어서, 사용자에게 다양한 선택권을 제공한다. 이 어드레스 맵핑 선택권은 2의 거듭제곱이 아닌 메모리 크기의 제공, 인터리빙 및 해싱을 포함하고, 이것들 전부는 하나의 결합된 디코더(어드레스 디코더(522))에서 구현된다.
도 5 및 도 6의 메모리 제어기는 하드웨어와 소프트웨어의 다양한 조합을 사용하여 구현될 수도 있다. 예를 들어 디코더(610)는 속도 및 효율 목적을 위해 하드웨어 회로를 사용하여 구현될 수도 있다. 이 하드웨어 회로는 우선 순위 인코더, 유한 상태 기계, 프로그램 가능한 논리 어레이(programmable logic array: PLA) 등을 포함할 수도 있다. 일부 실시형태에서, 메모리 제어기(500)의 다른 기능 블록은 소프트웨어의 제어 하에서 데이터 프로세서에 의해 수행될 수 있다. 소프트웨어 컴포넌트의 일부는 적어도 하나의 프로세서에 의한 실행을 위해 컴퓨터 판독 가능한 저장 매체에 저장될 수도 있고 그리고 비일시적인 컴퓨터 메모리 또는 컴퓨터 판독 가능한 저장 매체에 저장된 명령어에 대응할 수도 있다. 다양한 실시형태에서, 비일시적인 컴퓨터 판독 가능한 저장 매체는 자기 또는 광 디스크 저장 디바이스, 고체-상태 저장 디바이스, 예컨대, 플래시 메모리 또는 다른 비휘발성 메모리 디바이스 또는 디바이스들을 포함한다. 비일시적인 컴퓨터 판독 가능한 저장 매체에 저장된 컴퓨터 판독 가능한 명령어는 소스 코드, 어셈블리 언어 코드, 객체 코드 또는 하나 이상의 프로세서에 의해 해석되고/되거나 실행 가능한 다른 명령어 포맷일 수도 있다.
도 5의 메모리 제어기(500) 또는 도 6의 어드레스 디코더(610) 또는 이들의 임의의 부분은 프로그램에 의해 판독될 수 있고 그리고 집적 회로를 제작하도록 직접적으로 또는 간접적으로 사용될 수 있는 데이터베이스 또는 다른 데이터 구조의 형태로 컴퓨터 액세스 가능한 데이터 구조에 의해 설명 또는 나타낼 수도 있다. 예를 들어, 이 데이터 구조는 고 레벨 디자인 언어(high level design language: HDL), 예컨대, Verilog 또는 VHDL의 하드웨어 기능의 거동 레벨 묘사 또는 레지스터-트랜스퍼 레벨(register-transfer level: RTL) 묘사일 수도 있다. 이 묘사는 종합 라이브러리로부터 게이트의 리스트를 포함하는 넷리스트(netlist)를 생성하도록 묘사를 종합할 수도 있는 종합 툴에 의해 판독될 수도 있다. 넷리스트는 또한 집적 회로를 포함하는 하드웨어의 기능을 나타내는 게이트의 세트를 포함한다. 이어서 넷리스트는 마스크에 적용될 기하학적 형상을 묘사하는 데이터 세트를 생성하도록 배치 및 라우팅될 수도 있다. 그래서 마스크는 집적 회로를 생성하도록 다양한 반도체 제작 단계에서 사용될 수도 있다. 대안적으로, 컴퓨터 액세스 가능한 저장 매체의 데이터베이스는 넷리스트(종합 라이브러리가 있거나 없음) 또는 원한다면, 데이터 세트 또는 그래픽 데이터 시스템(Graphic Data System: GDS) II 데이터일 수도 있다.
특정한 실시형태가 설명되지만, 이 실시형태에 대한 다양한 변경이 당업자에게 분명할 것이다. 예를 들어, 메모리 제어기(500)는 DDRx 메모리 외에, 고대역폭 메모리(HBM), RAMbus DRAM(RDRAM) 등과 같은 다른 유형의 메모리뿐만 아니라 상이한 유형의 DIMM과 인터페이싱할 수도 있다. 게다가, 메모리 제어기(500)는 상이한 크기의 메모리에 액세스하도록 가변된다. 2의 거듭제곱 디코더의 수가 다른 실시형태에서 변할 것이다. 예시적인 실시형태가 DDR 메모리에서 유용한 메모리 어드레싱 및 제어 신호를 설명하지만, 이들은 사용되는 메모리의 유형에 따라 변할 것이다. 또한, 예시적인 데이터 처리 시스템(100)은 CPU 코어 및 GPU 코어 둘 다를 가진 APU, 예컨대, 도 2의 APU(200)에 기초하였지만, 위에서 설명된 기법은 또한 CPU(하나 이상의 CPU 코어를 갖지만 GPU 코어를 갖지 않은 시스템) 및 GPU(CPU 코어를 갖지 않지만 하나 이상의 GPU 코어를 가진 시스템)에 적용된다.
따라서, 개시된 실시형태의 범위 내에 속하는 개시된 실시형태의 모든 변경을 포함하는 것이 첨부된 청구항에 의해 의도된다.

Claims (34)

  1. 메모리 제어기(500)를 가진 장치(100/200)로서, 상기 메모리 제어기(500)는,
    액세스 어드레스를 포함하는 메모리 액세스 요청을 수신하기 위한 호스트 인터페이스(512);
    메모리 액세스를 메모리 시스템(120)에 제공하기 위한 메모리 인터페이스(514);
    해싱 함수(hashing function)를 사용하여 복수의 구역 중 선택된 구역에 상기 액세스 어드레스를 프로그램 가능하게 맵핑하기 위해 상기 호스트 인터페이스(512)에 연결된 어드레스 디코더(522/610/1110)로서, 상기 액세스 어드레스의 대응하는 복수의 비트 중 어느 것이 상기 해싱 함수에서 사용되는지를 결정하도록 복수의 프로그램 가능한 비트에 응답하고, 그리고 제1의 2의 거듭제곱 크기를 가진 1차 디코더(720)와 제2의 2의 거듭제곱 크기를 가진 2차 디코더(730)를 사용하여 2의 거듭제곱이 아닌 크기를 가진 제1 구역에 상기 액세스 어드레스를 맵핑하도록 프로그램 가능한, 상기 어드레스 디코더(522/610/1110);
    상기 메모리 액세스 요청 및 구역 맵핑 신호를 저장하기 위해 상기 어드레스 디코더(522/610/1110)에 연결된 명령 큐(command queue)(520); 및
    상기 구역 맵핑 신호에 부분적으로 기초하여 평가되는 복수의 기준에 기초하여 상기 명령 큐(520)로부터 상기 메모리 액세스 요청을 선택하고 그리고 이에 응답하여 대응하는 메모리 액세스를 상기 메모리 인터페이스(514)에 제공하기 위한 아비터(arbiter)(538)를 포함하는, 메모리 제어기를 가진 장치.
  2. 제1항에 있어서,
    상기 어드레스 디코더(1110)는,
    상기 호스트 인터페이스에 연결된 입력부 및 액세스 요청에 해싱된 어드레스를 제공하기 위한 출력부를 가진 해싱 회로(1120); 및
    상기 해싱된 어드레스, 및 상기 구역 맵핑 신호를 제공하기 위한 출력부에 응답하는 2의 거듭제곱이 아닌 디코더 회로(1130)를 포함하는, 메모리 제어기를 가진 장치.
  3. 제2항에 있어서,
    상기 해싱 회로(1120)는,
    하나의 해싱된 칩 선택 신호와 각각의 액세스 요청을 연관시키도록 상기 액세스 어드레스의 프로그램 가능한 부분을 해싱하기 위해 상기 액세스 어드레스 및 적어도 하나의 프로그램 가능한 칩 선택 해싱 비트에 응답하는 칩 선택 해싱 회로(1012); 및
    선택된 해싱된 칩 선택에 대응하는 칩에서 하나의 뱅크와 각각의 액세스 요청을 연관시키도록 상기 액세스 어드레스의 프로그램 가능한 부분을 해싱하기 위해 상기 액세스 어드레스, 상기 해싱된 칩 선택 신호, 및 적어도 하나의 프로그램 가능한 뱅크 어드레스 해싱 비트에 응답하는 뱅크 어드레스 해싱 회로(1014)를 포함하는, 메모리 제어기를 가진 장치.
  4. 제2항에 있어서,
    상기 2의 거듭제곱이 아닌 디코더 회로(1130)는 복수의 구역 디코더를 포함하고, 각각의 구역 디코더(710)에 대해,
    상기 1차 디코더(720)는 상기 액세스 어드레스를 수신하고 그리고 1차 구역 선택 신호를 제공하기 위한 것이고, 상기 1차 디코더(720)는 제1 베이스 어드레스 및 제1의 2의 거듭제곱 크기를 갖고;
    상기 2차 디코더(730)는 상기 액세스 어드레스를 수신하고 그리고 2차 구역 선택 신호를 제공하기 위한 것이고, 상기 2차 디코더(730)는 제2 베이스 어드레스 및 제2의 2의 거듭제곱 크기를 갖고; 그리고
    상기 구역 디코더(710)는 상기 1차 구역 선택 신호 및 상기 2차 구역 선택 신호 중 적어도 하나의 활성화에 응답하여 대응하는 구역 맵핑 신호를 활성화시키기 위한 논리 회로(740)를 더 포함하는, 메모리 제어기를 가진 장치.
  5. 제4항에 있어서,
    상기 제1 구역은 2N + 2(N-1)의 크기를 갖고, 그리고 N은 정수이며;
    상기 1차 디코더(720)는 크기 2N의 하위-구역을 디코딩하고; 그리고
    상기 2차 디코더(730)는 크기 2(N-1)의 구역을 디코딩하는, 메모리 제어기를 가진 장치.
  6. 제4항에 있어서,
    상기 구역 맵핑 신호는 상기 메모리 시스템(120)의 칩 선택 신호에 대응하는, 메모리 제어기를 가진 장치.
  7. 제6항에 있어서,
    상기 2의 거듭제곱이 아닌 디코더 회로(1130)는 행 어드레스, 열 어드레스, 뱅크 어드레스, 및 뱅크 그룹을 제공하도록 상기 액세스 어드레스를 더 디코딩하는, 메모리 제어기를 가진 장치.
  8. 제1항에 있어서,
    상기 장치(100/200)는 데이터 처리 시스템(100)이되,
    상기 액세스 어드레스를 가진 메모리 액세스 요청을 제공하기 위한 메모리 액세싱 에이전트(110/210/220); 및
    상기 메모리 액세스에 응답하는 메모리 시스템(120)으로서, 적어도 하나의 2의 거듭제곱이 아닌 구역을 포함하는 복수의 구역을 가진, 상기 메모리 시스템(120)을 더 포함하는, 메모리 제어기를 가진 장치.
  9. 제1항에 있어서,
    상기 장치(200)는 단일의 집적 회로 칩에 형성된 마이크로프로세서(100)이되,
    액세스 어드레스를 가진 상기 메모리 액세스 요청을 제공하기 위한 메모리 액세싱 에이전트(110/210/220)를 더 포함하는, 메모리 제어기를 가진 장치.
  10. 메모리 제어기(500)를 가진 장치(100/200)로서, 상기 메모리 제어기(500)는,
    액세스 어드레스를 포함하는 메모리 액세스 요청을 수신하기 위한 호스트 인터페이스(512);
    메모리 액세스를 메모리 시스템(120)에 제공하기 위한 메모리 인터페이스(514);
    복수의 구역 중 선택된 구역에 상기 액세스 어드레스를 프로그램 가능하게 맵핑하기 위해 상기 호스트 인터페이스(512)에 연결된 어드레스 디코더(522/610)로서, 제1의 2의 거듭제곱 크기를 가진 1차 디코더(720) 및 제2의 2의 거듭제곱 크기를 가진 2차 디코더(730)를 사용하여 2의 거듭제곱이 아닌 크기를 가진 제1 구역에 상기 액세스 어드레스를 맵핑하도록 프로그램 가능하고, 그리고 이에 응답하여 제1 구역 맵핑 신호를 제공하는, 상기 어드레스 디코더(522/610);
    상기 메모리 액세스 요청 및 구역 맵핑 신호를 저장하기 위해 상기 어드레스 디코더(522/610)에 연결된 명령 큐(520); 및
    상기 구역 맵핑 신호에 부분적으로 기초하여 평가되는 복수의 기준에 기초하여 상기 명령 큐(520)로부터 상기 메모리 액세스 요청을 선택하고 그리고 이에 응답하여 대응하는 메모리 액세스를 상기 메모리 인터페이스(514)에 제공하기 위한 아비터(538)를 포함하는, 메모리 제어기를 가진 장치.
  11. 제10항에 있어서,
    상기 구역 맵핑 신호는 상기 메모리 시스템(120)의 칩 선택 신호에 대응하는, 메모리 제어기를 가진 장치.
  12. 제10항에 있어서,
    상기 어드레스 디코더(522/610)는 복수의 구역 디코더를 포함하고, 각각의 구역 디코더(710)에 대해,
    상기 1차 디코더(720)는 상기 액세스 어드레스를 수신하고 그리고 1차 구역 선택 신호를 제공하기 위한 것이고, 상기 1차 디코더(720)는 제1 베이스 어드레스 및 제1의 2의 거듭제곱 크기를 갖고;
    상기 2차 디코더(730)는 상기 액세스 어드레스를 수신하고 그리고 2차 구역 선택 신호를 제공하기 위한 것이고, 상기 2차 디코더(730)는 제2 베이스 어드레스 및 제2의 2의 거듭제곱 크기를 갖고; 그리고
    상기 구역 디코더(710)는 상기 1차 구역 선택 신호 및 상기 2차 구역 선택 신호 중 적어도 하나의 활성화에 응답하여 대응하는 구역 맵핑 신호를 활성화시키기 위한 논리 회로(740)를 더 포함하는, 메모리 제어기를 가진 장치.
  13. 제12항에 있어서,
    상기 제1 구역은 2N + 2(N-1)의 크기를 갖고, 그리고 N은 정수이며, 상기 1차 디코더(720)는 크기 2N의 하위-구역을 디코딩하고, 그리고 상기 2차 디코더(730)는 크기 2(N-1)의 구역을 디코딩하는, 메모리 제어기를 가진 장치.
  14. 제12항에 있어서,
    상기 어드레스 디코더(522/700)는 행 어드레스, 열 어드레스, 뱅크 어드레스, 및 뱅크 그룹을 제공하도록 상기 액세스 어드레스를 더 디코딩하는, 메모리 제어기를 가진 장치.
  15. 제12항에 있어서,
    각각의 상기 구역 디코더(710)는,
    상기 1차 디코더(720)와 연관된 구성 레지스터(750)의 제1 세트; 및
    상기 2차 디코더(730)와 연관된 구성 레지스터(760)의 제2 세트를 더 포함하는, 메모리 제어기를 가진 장치.
  16. 제10항에 있어서,
    제3의 2의 거듭제곱 크기를 가진 제1의 1차 디코더(720) 및 상기 제3의 2의 거듭제곱 크기를 가진 제1의 2차 디코더(730)를 사용하여 2의 거듭제곱 크기를 가진 제1 구역(920)에 상기 액세스 어드레스를 선택적으로 맵핑하고, 그리고 이에 응답하여 상기 제1 구역 맵핑 신호를 제공하기 위한 제1 구역 디코더(710/CSO); 및
    상기 제3의 2의 거듭제곱 크기를 가진 제2의 1차 디코더(720) 및 상기 제3의 2의 거듭제곱 크기를 가진 제2의 2차 디코더(730)를 사용하여 2의 거듭제곱 크기를 가진 제2 구역(930)에 상기 액세스 어드레스를 선택적으로 맵핑하고, 그리고 이에 응답하여 제2 구역 맵핑 신호를 제공하기 위한 제2 구역 디코더(710/CSl)를 더 포함하되,
    상기 메모리 제어기(500)는 상기 액세스 어드레스에 대응하는 메모리 공간을 상기 제1의 1차 디코더(720), 상기 제2의 1차 디코더(720), 상기 제1의 2차 디코더(730), 및 상기 제2의 2차 디코더(730) 간에 인터리브하는, 메모리 제어기를 가진 장치.
  17. 제10항에 있어서,
    상기 장치(100/200)는 데이터 처리 시스템(100)이되,
    상기 액세스 어드레스를 가진 메모리 액세스 요청을 제공하기 위한 메모리 액세싱 에이전트(110/210/220); 및
    상기 메모리 액세스에 응답하는 메모리 시스템(120)으로서, 적어도 하나의 2의 거듭제곱이 아닌 구역을 포함하는 복수의 구역을 가진, 상기 메모리 시스템(120)을 더 포함하는, 메모리 제어기를 가진 장치.
  18. 제10항에 있어서,
    상기 장치(200)는 단일의 집적 회로 칩에 형성된 마이크로프로세서(100)이되,
    액세스 어드레스를 가진 상기 메모리 액세스 요청을 제공하기 위한 메모리 액세싱 에이전트(110/210/220)를 더 포함하는, 메모리 제어기를 가진 장치.
  19. 메모리 제어기(500)를 가진 장치(100/200)로서, 상기 메모리 제어기(500)는,
    액세스 어드레스를 포함하는 메모리 액세스 요청을 수신하기 위한 호스트 인터페이스(512);
    해싱된 어드레스를 포함하는 메모리 액세스를 메모리 시스템(120)에 제공하기 위한 메모리 인터페이스(514);
    해싱 함수를 사용하여 상기 메모리 시스템(120)의 복수의 구역 중 선택된 구역에 상기 액세스 어드레스를 프로그램 가능하게 맵핑하기 위해 상기 호스트 인터페이스(512)에 연결된 어드레스 디코더(522/1010)로서, 상기 액세스 어드레스의 대응하는 복수의 비트 중 어느 것이 상기 해싱 함수에서 사용되는지를 결정하도록 복수의 프로그램 가능한 비트에 응답하는, 상기 어드레스 디코더(522/610);
    상기 해싱된 어드레스를 포함하는 상기 메모리 액세스 요청을 저장하기 위해 상기 어드레스 디코더(522/610)에 연결된 명령 큐(520); 및
    복수의 기준에 기초하여 상기 명령 큐(520)로부터 상기 메모리 액세스 요청을 선택하고 그리고 이에 응답하여 상기 해싱된 어드레스를 포함하는 대응하는 메모리 액세스를 상기 메모리 인터페이스(514)에 제공하기 위한 아비터(538)를 포함하는, 메모리 제어기를 가진 장치.
  20. 제19항에 있어서,
    상기 어드레스 디코더(522/1010)는,
    하나의 해싱된 칩 선택 신호와 각각의 액세스 요청을 연관시키도록 상기 액세스 어드레스의 프로그램 가능한 부분을 해싱하기 위해 상기 액세스 어드레스 및 적어도 하나의 프로그램 가능한 칩 선택 해싱 비트에 응답하는 칩 선택 해싱 회로(1012); 및
    선택된 해싱된 칩 선택에 대응하는 칩에서 하나의 뱅크와 각각의 액세스 요청을 연관시키도록 상기 액세스 어드레스의 프로그램 가능한 부분을 해싱하기 위해 상기 액세스 어드레스, 상기 해싱된 칩 선택 신호, 및 적어도 하나의 프로그램 가능한 뱅크 어드레스 해싱 비트에 응답하는 뱅크 어드레스 해싱 회로(1014)를 포함하는, 메모리 제어기를 가진 장치.
  21. 제20항에 있어서,
    인코딩된 칩 선택 신호의 비트에 각각 대응하고, 상기 액세스 어드레스의 비트에 각각 대응하는 복수의 비트를 저장하고, 그리고 대응하는 비트가 상기 해싱 함수의 부분을 형성할지를 획정하는 복수의 칩 선택 구성 레지스터(1020)를 더 포함하는, 메모리 제어기를 가진 장치.
  22. 제21항에 있어서,
    상기 칩 선택 해싱 회로(1012)는 상기 인코딩된 칩 선택 신호의 각각의 비트에 대해 상기 복수의 칩 선택 구성 레지스터(1020) 중 대응하는 하나에서 비트로 나타낸 상기 액세스 어드레스의 복수의 비트의 각각 간에 배타적인 OR 연산을 수행하는, 메모리 제어기를 가진 장치.
  23. 제20항에 있어서,
    인코딩된 뱅크 어드레스 신호의 비트에 각각 대응하고, 상기 액세스 어드레스의 비트에 각각 대응하는 복수의 비트를 저장하고, 그리고 상기 액세스 어드레스의 대응하는 비트가 상기 해싱 함수에서 사용될지를 획정하는 복수의 뱅크 어드레스 구성 레지스터(1030)를 더 포함하는, 메모리 제어기를 가진 장치.
  24. 제23항에 있어서,
    상기 뱅크 해싱 회로(1014)는 상기 인코딩된 뱅크 신호의 각각의 비트에 대해 상기 복수의 뱅크 어드레스 구성 레지스터(1030) 중 대응하는 하나에서 비트로 나타낸 상기 액세스 어드레스의 복수의 비트의 각각 간에 배타적인 OR 연산을 수행하는, 메모리 제어기를 가진 장치.
  25. 제19항에 있어서,
    상기 장치(100/200)는 데이터 처리 시스템(100)이되,
    상기 액세스 어드레스를 가진 메모리 액세스 요청을 제공하기 위한 메모리 액세싱 에이전트(110/210/220); 및
    상기 메모리 액세스에 응답하는 메모리 시스템(120)으로서, 적어도 하나의 2의 거듭제곱이 아닌 구역을 포함하는 복수의 구역을 가진, 상기 메모리 시스템(120)을 더 포함하는, 메모리 제어기를 가진 장치.
  26. 제19항에 있어서,
    상기 장치(200)는 단일의 집적 회로 칩에 형성된 마이크로프로세서(100)이되,
    액세스 어드레스를 가진 상기 메모리 액세스 요청을 제공하기 위한 메모리 액세싱 에이전트(110/210/220)를 더 포함하는, 메모리 제어기를 가진 장치.
  27. 방법으로서,
    액세스 어드레스를 포함하는 메모리 액세스 요청을 수신하는 단계;
    상기 액세스 어드레스를 디코딩하고 그리고 이에 응답하여 대응하는 구역 맵핑 신호를 제공하는 단계로서, 상기 디코딩은 제1의 2의 거듭제곱 크기를 가진 제1의 1차 디코더(720) 및 제2의 2의 거듭제곱 크기를 가진 제1의 2차 디코더(730)를 사용하여 2의 거듭제곱이 아닌 크기를 가진 제1 구역에 상기 액세스 어드레스를 선택적으로 맵핑하는 것을 포함하는, 상기 구역 맵핑 신호를 제공하는 단계;
    상기 액세스 어드레스를 상기 제1 구역에 맵핑하는 것에 응답하여 제1 구역 맵핑 신호를 제공하는 단계;
    상기 메모리 액세스 요청 및 구역 맵핑 신호를 저장하는 단계;
    상기 구역 맵핑 신호에 부분적으로 기초하여 평가된 복수의 기준에 기초하여 그렇게 저장된 상기 메모리 액세스 요청을 선택하는 단계; 및
    선택된 메모리 액세스 요청에 응답하여 대응하는 메모리 액세스를 제공하는 단계를 포함하는, 방법.
  28. 제27항에 있어서,
    상기 선택된 메모리 액세스 요청의 상기 구역 맵핑 신호에 응답하여 복수의 칩 선택 신호 중 선택된 칩 선택 신호를 활성화시키는 단계를 더 포함하는, 방법.
  29. 제27항에 있어서, 상기 디코딩은,
    제1 액세스 어드레스가 제1 베이스 어드레스 및 상기 제1의 2의 거듭제곱 크기로 획정된 제1 하위-구역 내에 속한다면 상기 제1 액세스 어드레스를 디코딩하고 그리고 1차 구역 선택 신호를 제공하는 것;
    상기 액세스 어드레스가 제2 베이스 어드레스 및 상기 제2의 2의 거듭제곱 크기로 획정된 제2 하위-구역 내에 속한다면 상기 제1 액세스 어드레스를 디코딩하고 그리고 2차 구역 선택 신호를 제공하는 것; 및
    상기 1차 구역 선택 신호 및 상기 2차 구역 선택 신호 중 적어도 하나의 활성화에 응답하여 대응하는 구역 맵핑 신호를 활성화시키는 것을 포함하는, 방법.
  30. 제29항에 있어서,
    상기 제1 액세스 어드레스를 디코딩하고 그리고 상기 1차 구역 선택 신호를 제공하는 것 및 상기 제1 액세스 어드레스를 디코딩하고 그리고 상기 2차 구역 선택 신호를 선택하는 것은,
    행 어드레스, 열 어드레스, 뱅크 어드레스, 및 뱅크 그룹을 제공하도록 상기 제1 액세스 어드레스를 디코딩하는 것을 포함하는, 방법.
  31. 제27항에 있어서,
    제3의 2의 거듭제곱 크기를 가진 상기 제1의 1차 디코더(720) 및 상기 제3의 2의 거듭제곱 크기를 가진 상기 제1의 2차 디코더(730)를 사용하여 2의 거듭제곱 크기를 가진 상기 제1 구역(920)에 상기 액세스 어드레스를 선택적으로 맵핑하고, 그리고 이에 응답하여 상기 제1 구역 맵핑 신호를 제공하는 단계; 및
    상기 제3의 2의 거듭제곱 크기를 가진 제2의 1차 디코더(720) 및 상기 제3의 2의 거듭제곱 크기를 가진 제2의 2차 디코더(730)를 사용하여 2의 거듭제곱 크기를 가진 제2 구역(930)에 상기 액세스 어드레스를 선택적으로 맵핑하고, 그리고 이에 응답하여 제2 구역 맵핑 신호를 제공하는 단계를 더 포함하되,
    상기 액세스 어드레스를 상기 제1 구역(920)에 선택적으로 맵핑하는 것 및 상기 액세스 어드레스를 상기 제2 구역(930)에 선택적으로 맵핑하는 것 각각은 상기 액세스 어드레스에 대응하는 메모리 공간(910)을 상기 제1의 1차 디코더(720), 상기 제2의 1차 디코더(720), 상기 제1의 2차 디코더(730), 및 상기 제2의 2차 디코더(730) 간에 인터리빙하는 것을 포함하는, 방법.
  32. 제27항에 있어서, 상기 디코딩은,
    상기 액세스 어드레스의 대응하는 복수의 비트 중 어느 것이 상기 해싱 함수에서 사용되는지를 결정하도록 복수의 프로그램 가능한 비트에 응답하는 해싱 함수를 사용하여 상기 액세스 어드레스를 선택적으로 해싱하는 것을 더 포함하는, 방법.
  33. 방법으로서,
    액세스 어드레스를 포함하는 메모리 액세스 요청을 수신하는 단계;
    상기 액세스 어드레스를 디코딩하고 그리고 이에 응답하여 대응하는 구역 맵핑 신호를 제공하는 단계로서, 상기 디코딩은 상기 액세스 어드레스의 대응하는 복수의 비트 중 어느 것이 상기 해싱 함수에서 사용되는지를 결정하도록 복수의 프로그램 가능한 비트에 응답하는 해싱 함수를 사용하여 상기 액세스 어드레스를 선택적으로 해싱하는 것을 포함하는, 상기 대응하는 구역 맵핑 신호를 제공하는 단계;
    상기 디코딩에 응답하여 상기 구역 맵핑 신호를 제공하는 단계;
    상기 메모리 액세스 요청 및 상기 구역 맵핑 신호를 저장하는 단계;
    상기 구역 맵핑 신호에 부분적으로 기초하여 평가된 복수의 기준에 기초하여 그렇게 저장된 상기 메모리 액세스 요청을 선택하는 단계; 및
    선택된 메모리 액세스 요청에 응답하여 대응하는 메모리 액세스를 제공하는 단계를 포함하는, 방법.
  34. 제33항에 있어서,
    하나의 해싱된 칩 선택 신호와 각각의 액세스 요청을 연관시키도록 상기 액세스 어드레스 및 적어도 하나의 프로그램 가능한 비트에 응답하여 상기 액세스 어드레스의 프로그램 가능한 부분을 해싱하는 단계; 및
    선택된 해싱된 칩 선택에 대응하는 칩에서 하나의 뱅크와 각각의 액세스 요청을 연관시키도록 상기 액세스 어드레스, 상기 해싱된 칩 선택 신호, 및 적어도 하나의 프로그램 가능한 비트에 응답하여 상기 액세스 어드레스의 프로그램 가능한 부분을 해싱하는 단계를 더 포함하는, 방법.
KR1020197002561A 2016-07-15 2016-09-23 융통성 있는 어드레스 디코딩을 이용하는 메모리 제어기 KR20190019200A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/211,887 US10403333B2 (en) 2016-07-15 2016-07-15 Memory controller with flexible address decoding
US15/211,887 2016-07-15
PCT/US2016/053358 WO2018013158A1 (en) 2016-07-15 2016-09-23 Memory controller with flexible address decoding

Publications (1)

Publication Number Publication Date
KR20190019200A true KR20190019200A (ko) 2019-02-26

Family

ID=60940724

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197002561A KR20190019200A (ko) 2016-07-15 2016-09-23 융통성 있는 어드레스 디코딩을 이용하는 메모리 제어기

Country Status (6)

Country Link
US (1) US10403333B2 (ko)
EP (1) EP3485383A4 (ko)
JP (1) JP6761891B2 (ko)
KR (1) KR20190019200A (ko)
CN (1) CN109478169B (ko)
WO (1) WO2018013158A1 (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108604206B (zh) * 2016-11-23 2021-10-22 华为技术有限公司 一种内存分配方法和设备
US11082523B2 (en) * 2017-02-09 2021-08-03 International Business Machines Corporation System, method and computer program product for a distributed virtual address space
IT201800002895A1 (it) * 2018-02-21 2019-08-21 Stmicroelectronics Application Gmbh Sistema di elaborazione, relativo circuito integrato, dispositivo e procedimento
KR102583448B1 (ko) * 2018-04-10 2023-09-27 에스케이하이닉스 주식회사 온도 관리를 위해 주소를 제어하는 반도체 메모리 장치
US11194382B2 (en) * 2018-10-16 2021-12-07 Advanced Micro Devices, Inc. Speculative exit from power down mode of a dynamic random access memory rank
US10642734B1 (en) * 2018-12-03 2020-05-05 Advanced Micro Devices, Inc. Non-power of two memory configuration
KR20210034726A (ko) 2019-09-20 2021-03-31 삼성전자주식회사 메모리 모듈, 그것을 제어하는 메모리 제어기의 에러 정정 방법, 및 그것을포함하는 컴퓨팅 시스템
US11403217B2 (en) * 2019-10-30 2022-08-02 Qualcomm Incorporated Memory bank group interleaving
US11537319B2 (en) 2019-12-11 2022-12-27 Advanced Micro Devices, Inc. Content addressable memory with sub-field minimum and maximum clamping
US11561862B2 (en) 2020-05-29 2023-01-24 Advanced Micro Devices, Inc. Refresh management for DRAM
CN112286844B (zh) * 2020-10-30 2022-09-02 烽火通信科技股份有限公司 一种可适配业务地址映射的ddr4控制方法及装置
US11379388B1 (en) * 2021-03-31 2022-07-05 Advanced Micro Devices, Inc. Credit scheme for multi-queue memory controllers
US11693585B2 (en) 2021-04-26 2023-07-04 Apple Inc. Address hashing in a multiple memory controller system
US11972140B2 (en) 2021-04-26 2024-04-30 Apple Inc. Hashing with soft memory folding
CN113312277B (zh) * 2021-06-29 2024-06-25 合肥忆芯电子科技有限公司 存储体地址映射装置、方法及电子设备
JP7168731B1 (ja) 2021-07-19 2022-11-09 Necプラットフォームズ株式会社 メモリアクセス制御装置、メモリアクセス制御方法、及び、メモリアクセス制御プログラム
US12007895B2 (en) 2021-08-23 2024-06-11 Apple Inc. Scalable system on a chip
US20230418772A1 (en) * 2022-06-24 2023-12-28 Advanced Micro Devices, Inc. Memory controller with pseudo-channel support
CN116049047B (zh) * 2022-12-30 2024-04-12 成都电科星拓科技有限公司 一种eeprom访问方法
CN116700631B (zh) * 2023-08-03 2023-09-29 摩尔线程智能科技(北京)有限责任公司 任务管理装置、方法、图形处理器及电子设备

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5142672A (en) * 1987-12-15 1992-08-25 Advanced Micro Devices, Inc. Data transfer controller incorporating direct memory access channels and address mapped input/output windows
US5748939A (en) * 1993-06-30 1998-05-05 Intel Corporation Memory device with a central control bus and a control access register for translating an access request into an access cycle on the central control bus
JP3713312B2 (ja) * 1994-09-09 2005-11-09 株式会社ルネサステクノロジ データ処理装置
US5764963A (en) * 1995-07-07 1998-06-09 Rambus, Inc. Method and apparatus for performing maskable multiple color block writes
US7318114B1 (en) 2004-10-29 2008-01-08 Sun Microsystems, Inc. System and method for dynamic memory interleaving and de-interleaving
US7480781B2 (en) 2004-12-30 2009-01-20 Intel Corporation Apparatus and method to merge and align data from distributed memory controllers
US9171585B2 (en) * 2005-06-24 2015-10-27 Google Inc. Configurable memory circuit system and method
US7620793B1 (en) * 2006-08-28 2009-11-17 Nvidia Corporation Mapping memory partitions to virtual memory pages
JP5018074B2 (ja) * 2006-12-22 2012-09-05 富士通セミコンダクター株式会社 メモリ装置,メモリコントローラ及びメモリシステム
US7904626B2 (en) * 2007-06-07 2011-03-08 Renesas Electronics Corporation Arbiter and arbitration method of multiple data accesses
US8438320B2 (en) * 2007-06-25 2013-05-07 Sonics, Inc. Various methods and apparatus for address tiling and channel interleaving throughout the integrated system
US7793038B2 (en) * 2007-06-26 2010-09-07 International Business Machines Corporation System and method for programmable bank selection for banked memory subsystems
US7813212B2 (en) * 2008-01-17 2010-10-12 Mosaid Technologies Incorporated Nonvolatile memory having non-power of two memory capacity
US20120137090A1 (en) * 2010-11-29 2012-05-31 Sukalpa Biswas Programmable Interleave Select in Memory Controller
US9432298B1 (en) * 2011-12-09 2016-08-30 P4tents1, LLC System, method, and computer program product for improving memory systems
US9141541B2 (en) 2013-09-20 2015-09-22 Advanced Micro Devices, Inc. Nested channel address interleaving
US9213600B2 (en) 2013-11-11 2015-12-15 Seagate Technology Llc Dynamic per-decoder control of log likelihood ratio and decoding parameters
US9293188B2 (en) * 2014-02-03 2016-03-22 Advanced Micro Devices, Inc. Memory and memory controller for high reliability operation and method

Also Published As

Publication number Publication date
EP3485383A1 (en) 2019-05-22
WO2018013158A1 (en) 2018-01-18
EP3485383A4 (en) 2020-04-22
CN109478169B (zh) 2023-07-28
US20180019006A1 (en) 2018-01-18
CN109478169A (zh) 2019-03-15
JP2019520660A (ja) 2019-07-18
JP6761891B2 (ja) 2020-09-30
US10403333B2 (en) 2019-09-03

Similar Documents

Publication Publication Date Title
KR20190019200A (ko) 융통성 있는 어드레스 디코딩을 이용하는 메모리 제어기
JP6761873B2 (ja) セルフリフレッシュステートマシンmopアレイ
KR102395745B1 (ko) 스트릭 및 판독/기입 트랜잭션 관리 기능을 갖는 메모리 제어기 아비터
JP6730453B2 (ja) 細かい粒度のリフレッシュ
KR102442078B1 (ko) 고속 메모리 인터페이스들을 위한 명령 중재
KR102370477B1 (ko) 가상 컨트롤러 모드를 가진 메모리 컨트롤러
JP7181863B2 (ja) データ処理システム、データプロセッサ及び方法
CN109219806B (zh) 低功率存储器节流
KR102615693B1 (ko) Dram을 위한 리프레시 관리
JP2023539737A (ja) 複数のコマンドサブキュー及び対応するアービタを有するメモリコントローラ
EP3270295A1 (en) Memory controller with virtual controller mode

Legal Events

Date Code Title Description
E902 Notification of reason for refusal