KR20240055142A - 스케일러블 시스템 온 칩 - Google Patents

스케일러블 시스템 온 칩 Download PDF

Info

Publication number
KR20240055142A
KR20240055142A KR1020247012429A KR20247012429A KR20240055142A KR 20240055142 A KR20240055142 A KR 20240055142A KR 1020247012429 A KR1020247012429 A KR 1020247012429A KR 20247012429 A KR20247012429 A KR 20247012429A KR 20240055142 A KR20240055142 A KR 20240055142A
Authority
KR
South Korea
Prior art keywords
interrupt
memory
cache
integrated circuit
request
Prior art date
Application number
KR1020247012429A
Other languages
English (en)
Inventor
페르 에이치. 햄마를룬드
리오르 지메트
세르지오 콜로르
사기 라하브
제임스 바쉬
가우라브 가르그
탈 쿠지
제프리 이. 고니온
찰스 이. 투커
리탈 레비-루빈
다니 다비도프
스티븐 피쉬위크
니르 레쉬엠
마크 필립
3세 제라드 알. 윌리엄스
하사바르단 카우시카르
스리니바사 랑간 스리다란
에란 타마리
세르지오 브이. 토타
조나단 엠. 레드쇼
스티븐 알. 헛셀
숀 엠. 후카미
라메쉬 비. 군나
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 KR20240055142A publication Critical patent/KR20240055142A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0824Distributed directories, e.g. linked lists of caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0833Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
    • 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/109Address translation for multiple virtual address spaces, e.g. segmentation
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • 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
    • 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/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • G06F15/17368Indirect interconnection networks non hierarchical topologies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • 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/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1048Scalability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/305Providing cache or TLB in specific location of a processing system being part of a memory device, e.g. cache DRAM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/455Image or video data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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)
  • Mathematical Physics (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)
  • Microcomputers (AREA)
  • Image Processing (AREA)

Abstract

복수의 프로세서 코어들, 복수의 그래픽 프로세싱 유닛들, 복수의 주변 회로들, 및 복수의 메모리 제어기들을 포함하는 시스템은 통합형 메모리 아키텍처를 사용하여 시스템의 스케일링을 지원하도록 구성된다.
시스템에 포함된 상호연결 패브릭은 이종 상호연결 토폴로지들을 갖는 적어도 2개의 네트워크들을 포함한다.
적어도 2개의 네트워크들은 프로세서 코어들 및 복수의 메모리 제어기들을 상호연결하는 코히어런트 네트워크를 포함한다.

Description

스케일러블 시스템 온 칩{SCALABLE SYSTEM ON A CHIP}
기술분야
본 명세서에서 설명되는 실시예들은 디지털 시스템들에 관한 것으로, 보다 구체적으로는 시스템 내의 이종 에이전트들에 액세스가능한 통합형 메모리를 갖는 시스템에 관한 것이다.
배경기술
현대 컴퓨팅 시스템들의 설계에서, 이전에는 이산적 실리콘 컴포넌트들로서 구현되었던 다양한 시스템 하드웨어 컴포넌트들을 단일 실리콘 다이에 통합하는 것이 점점 더 일반적이 되었다. 예를 들어, 한 번에, 완전한 컴퓨터 시스템은 백플레인 상에 장착되고 마이크로프로세서를 시스템 메모리, 그래픽 프로세서 및 다른 주변 디바이스들과 같은 다른 디바이스들에 인터페이싱하는 칩셋에 커플링된 별개로 패키징된 마이크로프로세서를 포함했을 수 있다. 대조적으로, 반도체 프로세스 기술의 진화는 이들 이산적 디바이스들 중 다수의 통합을 가능하게 하였다. 이러한 통합의 결과는 일반적으로 "시스템-온-칩(system-on-a-chip, SOC)"으로 지칭된다.
종래에, 상이한 애플리케이션들에 대한 SOC들은 개별적으로 아키텍처화되고, 설계되고, 구현된다. 예를 들어, 스마트 시계 디바이스에 대한 SOC는 엄격한 전력 소비 요건들을 가질 수 있는데, 그 이유는 이러한 디바이스의 폼 팩터가 이용가능한 배터리 크기 및 그에 따라 디바이스의 최대 사용 시간을 제한하기 때문이다. 동시에, 이러한 디바이스의 작은 크기는 SOC가 지원하는 데 필요한 주변기기들의 수 뿐만 아니라 SOC가 실행하는 애플리케이션들의 컴퓨팅 요건들을 제한할 수 있다. 대조적으로, 모바일 폰 애플리케이션에 대한 SOC는 더 큰 이용가능한 배터리 및 그에 따라 더 큰 전력 버짓을 가질 것이지만, 또한, 더 복잡한 주변기기들 및 더 큰 그래픽들 및 일반적인 컴퓨팅 요건들을 가질 것으로 예상될 것이다. 따라서, 그러한 SOC는 더 작은 디바이스에 대한 설계보다 더 크고 더 복잡할 것으로 예상될 것이다. 이러한 비교는 다른 애플리케이션들로 임의로 확장될 수 있다. 예를 들어, 증강 및/또는 가상 현실 시스템들과 같은 웨어러블 컴퓨팅 솔루션들은 덜 복잡한 디바이스들보다 더 큰 컴퓨팅 요건들을 제공할 것으로 예상될 수 있고, 데스크톱 및/또는 랙-장착형 컴퓨터 시스템들을 위한 디바이스들은 여전히 더 큰 것으로 예상될 수 있다.
SOC들에 대한 종래의 개별적으로 아키텍처화된 접근법은 설계 재사용을 위한 기회를 거의 남기지 않으며, 다수의 SOC 구현들에 걸쳐 설계 노력이 중복된다.
다음의 상세한 설명은 첨부 도면들을 참조하며, 이제 도면들이 간단히 설명된다.
도 1은 시스템 온 칩(SOC)의 일 실시예의 블록도이다.
도 2는 다수의 네트워크 상호연결 에이전트들의 일 실시예를 포함하는 시스템의 블록도이다.
도 3은 링 토폴로지(ring topology)를 사용하는 네트워크의 일 실시예의 블록도이다.
도 4는 메시 토폴로지(mesh topology)를 사용하는 네트워크의 일 실시예의 블록도이다.
도 5는 트리 토폴로지(tree topology)를 사용하는 네트워크의 일 실시예의 블록도이다.
도 6은 일 실시예에 대한 다수의 네트워크들을 갖는 시스템 온 칩(SOC)의 일 실시예의 블록도이다.
도 7은 일 실시예에 대해 도 6에 도시된 독립적인 네트워크들 중 하나를 예시하는 시스템 온 칩(SOC)의 일 실시예의 블록도이다.
도 8은 일 실시예에 대해 도 6에 도시된 독립적인 네트워크들 중 다른 하나를 예시하는 시스템 온 칩(SOC)의 일 실시예의 블록도이다.
도 9는 일 실시예에 대해 도 6에 도시된 독립적인 네트워크들 중 또 다른 하나를 예시하는 시스템 온 칩(SOC)의 일 실시예의 블록도이다.
도 10은 2개의 반도체 다이를 포함하는 멀티-다이 시스템의 일 실시예의 블록도이다.
도 11은 입력/출력(I/O) 클러스터의 일 실시예의 블록도이다.
도 12는 프로세서 클러스터의 일 실시예의 블록도이다.
도 13은, 가상 채널들 및 트래픽 유형들, 및 일 실시예에 대해 그들이 사용되는 도 6 내지 도 9에 도시된 네트워크들을 예시하는 테이블들의 쌍이다.
도 14는 네트워크 상의 트랜잭션(transaction)을 개시하는 일 실시예를 예시하는 흐름도이다.
도 15는 인터럽트 제어기 및 프로세서들의 복수의 클러스터들에 대응하는 복수의 클러스터 인터럽트 제어기들을 포함하는 시스템의 일 실시예의 블록도이다.
도 16은 도 15에 도시된 시스템의 일 실시예를 구현할 수 있는 시스템 온 칩(system on a chip, SOC)의 일 실시예의 블록도이다.
도 17은 인터럽트 제어기의 일 실시예에서 구현될 수 있는 상태 기계의 일 실시예의 블록도이다.
도 18은 인터럽트 전달의 소프트 또는 하드 반복을 수행하기 위한 인터럽트 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 19는 클러스터 인터럽트 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 20은 프로세서의 일 실시예의 블록도이다.
도 21은 재정렬 버퍼의 일 실시예의 블록도이다.
도 22는 도 20에 도시된 인터럽트 확인응답 제어 회로의 일 실시예의 동작을 예시하는 흐름도이다.
도 23은 도 15에 도시된 시스템의 일 실시예를 구현할 수 있는 복수의 SOC들의 블록도이다.
도 24는 도 23에 도시된 1차 인터럽트 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 25는 도 23에 도시된 2차 인터럽트 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 26은 인터럽트들을 처리하기 위한 방법의 일 실시예를 예시하는 흐름도이다.
도 27은 시스템 온 칩(SOC)으로서 구현된 캐시 코히어런트 시스템의 일 실시예의 블록도이다.
도 28은 캐시 블록의 코히어런트 전달을 위한 3-홉(three hop) 프로토콜의 일 실시예를 예시한 블록도이다.
도 29는 하나의 코히어런트 트랜잭션에 대한 필(fill)과 다른 코히어런트 트랜잭션에 대한 스누프(snoop) 사이의 경쟁을 관리하는 일 실시예를 예시한 블록도이다.
도 30은 하나의 코히어런트 트랜잭션에 대한 스누프와 다른 코히어런트 트랜잭션에 대한 확인응답 사이의 경쟁을 관리하는 일 실시예를 예시한 블록도이다.
도 31은 코히어런트 에이전트의 일 실시예의 일부분의 블록도이다.
도 32는 코히어런스 제어기에서 요청을 프로세싱하는 일 실시예의 동작을 예시하는 흐름도이다.
도 33은 요청에 관련된 완료들을 프로세싱하기 위해 요청을 메모리 제어기에 송신한 코히어런트 에이전트의 일 실시예의 동작을 예시하는 흐름도이다.
도 34는 스누프를 수신하는 코히어런트 에이전트의 일 실시예의 동작을 예시하는 흐름도이다.
도 35는 일 실시예에 따른 캐시 블록에 대한 충돌하는 요청들의 체인을 예시하는 블록도이다.
도 36은 스누프를 흡수하는 코히어런트 에이전트의 일 실시예를 예시하는 흐름도이다.
도 37은 캐싱가능하지 않은(non-cacheable) 요청의 일 실시예를 예시하는 블록도이다.
도 38은 요청들의 캐싱가능하고 캐싱가능하지 않은 속성들에 기초하여 스누프들을 생성하기 위한 코히어런스 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 39는 코히어런스 프로토콜의 일 실시예에 따른 복수의 캐시 상태들을 예시하는 표이다.
도 40은 코히어런시 프로토콜의 일 실시예에서 사용될 수 있는 복수의 메시지들을 예시하는 표이다.
도 41은 배타적으로의 변경 조건부 요청(change to exclusive conditional request)을 프로세싱하기 위한 코히어런스 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 42는 디렉토리(directory) 엔트리를 판독하고 스누프들을 생성하기 위한 코히어런스 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 43은 배타적 데이터 없음(no data) 요청을 프로세싱하기 위한 코히어런스 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 44는 일부 실시예들에 따른, 시스템 온 칩의 예시적인 요소들을 예시하는 블록도이다.
도 45는 일부 실시예들에 따른, I/O 에이전트와 메모리 제어기 사이의 상호작용들의 예시적인 요소들을 예시하는 블록도이다.
도 46a는 일부 실시예들에 따른, 기록 트랜잭션들을 프로세싱하도록 구성된 I/O 에이전트의 예시적인 요소들을 예시하는 블록도이다.
도 46b는 일부 실시예들에 따른, 판독 트랜잭션들을 프로세싱하도록 구성된 I/O 에이전트의 예시적인 요소들을 예시하는 블록도이다.
도 47은 일부 실시예들에 따른, 주변 컴포넌트로부터의 판독 트랜잭션 요청들을 프로세싱하는 일례를 예시하는 흐름도이다.
도 48은 일부 실시예들에 따른, I/O 에이전트에 의한 판독 트랜잭션 요청들의 프로세싱에 관한 예시적인 방법을 예시하는 흐름도이다.
도 49는 함께 커플링된 2개의 집적 회로들을 갖는 시스템의 일 실시예의 블록도를 예시한다.
도 50은 외부 인터페이스를 갖는 집적 회로의 일 실시예의 블록도를 도시한다.
도 51은 개개의 외부 인터페이스들의 핀 할당들을 라우팅하기 위해 인터페이스 랩퍼를 활용하는 2개의 집적 회로들을 갖는 시스템의 블록도를 도시한다.
도 52는 핀 번들(bundle)들을 활용하는 외부 인터페이스를 갖는 집적 회로의 일 실시예의 블록도를 예시한다.
도 53a는 상보적 인터페이스들을 사용하여 함께 커플링된 2개의 집적 회로들의 2개의 예들을 도시한다.
도 53b는 함께 커플링된 2개의 집적 회로들의 2개의 추가적인 예들을 도시한다.
도 54는 2개의 커플링된 집적 회로들 사이에서 데이터를 전달하기 위한 방법의 일 실시예의 흐름도를 예시한다.
도 55는 집적 회로 내의 온-칩 라우터들과 외부 인터페이스 사이에서 신호 데이터를 라우팅하기 위한 방법의 일 실시예의 흐름도를 도시한다.
도 56은 복수의 시스템 온 칩(SOC)들의 일 실시예의 블록도이며, 여기서 주어진 SOC는 복수의 메모리 제어기들을 포함한다.
도 57은 SOC들 상의 메모리 제어기들 및 물리적/논리적 배열의 일 실시예를 예시하는 블록도이다.
도 58은 특정 어드레스를 서비스하는 메모리 제어기를 결정하기 위한 이진 결정 트리의 일 실시예의 블록도이다.
도 59는 복수의 메모리 위치 구성 레지스터들의 일 실시예를 예시하는 블록도이다.
도 60은 부트/전력 투입 동안 SOC들의 일 실시예의 동작을 예시하는 흐름도이다.
도 61은 메모리 요청을 라우팅하기 위한 SOC들의 일 실시예의 동작을 예시하는 흐름도이다.
도 62는 메모리 요청에 응답하는 메모리 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 63은 메모리 폴딩(memory folding)을 결정하기 위해 시스템 동작을 모니터링하는 일 실시예의 동작을 예시하는 흐름도이다.
도 64는 메모리 슬라이스를 폴딩하는 일 실시예의 동작을 예시하는 흐름도이다.
도 65는 메모리 슬라이스를 언폴딩(unfolding)하는 일 실시예의 동작을 예시하는 흐름도이다.
도 66은 메모리 폴딩 방법의 일 실시예를 예시하는 흐름도이다.
도 67은 메모리 어드레스를 해싱하는 방법의 일 실시예를 예시하는 흐름도이다.
도 68은 압축된 파이프 어드레스를 형성하는 방법의 일 실시예를 예시하는 흐름도이다.
도 69는 전체 및 부분 인스턴스들을 지원하는 집적 회로 설계의 일 실시예의 블록도이다.
도 70 내지 도 72는 도 69에 도시된 집적 회로의 전체 및 부분 인스턴스들의 다양한 실시예들이다.
도 73은 집적 회로의 각각의 하위 영역에 로컬 클록 소스들을 갖는, 도 69에 도시된 집적 회로의 일 실시예의 블록도이다.
도 74는 집적 회로의 각각의 하위 영역에 로컬 아날로그 패드들을 갖는, 도 69에 도시된 집적 회로의 일 실시예의 블록도이다.
도 75는, 각각의 하위 영역의 코너들에서의 차단 영역들 및 각각의 하위 영역의 에지들 근처의 영역들을 배제하는 상호연결 "범프들"에 대한 영역들을 갖는, 도 69에 도시된 집적 회로의 일 실시예의 블록도이다.
도 76은 스터브(stub) 및 대응하는 회로 컴포넌트의 일 실시예를 예시하는 블록도이다.
도 77은 한 쌍의 집적 회로들의 일 실시예 및 한 쌍의 집적 회로들의 특정한 추가적인 세부사항들을 예시하는 블록도이다.
도 78은 집적 회로 설계 방법의 일 실시예를 예시하는 흐름도이다.
도 79는 전체 및 부분 인스턴스들을 테스트하기 위한 테스트 벤치 배열을 예시하는 블록도이다.
도 80은 컴포넌트-레벨 테스트를 위한 테스트 벤치 배열을 예시하는 블록도이다.
도 81은 집적 회로에 대한 설계 및 제조 방법의 일 실시예를 예시하는 흐름도이다.
도 82는 집적 회로들을 제조하기 위한 방법의 일 실시예를 예시하는 흐름도이다.
도 83은 시스템의 일 실시예의 블록도이다.
도 84는 컴퓨터 액세스가능한 저장 매체의 일 실시예의 블록도이다.
본 개시내용에 설명된 실시예들은 다양한 수정들 및 대안적인 형태들을 허용할 수 있지만, 그의 특정 실시예들이 도면들에 예로서 도시되고, 본 명세서에서 상세히 설명될 것이다. 그러나, 그에 대한 도면들 및 상세한 설명은 실시예들을 개시된 특정 형태로 제한하는 것으로 의도되는 것이 아니라, 그와는 반대로, 의도는 첨부된 청구범위의 사상 및 범주 내에 속한 모든 수정들, 등가물들, 및 대안들을 커버하기 위한 것임을 이해하여야 한다. 본 명세서에서 사용되는 표제들은 오직 구성 목적들을 위한 것이며 설명의 범위를 제한하기 위해 사용되는 것으로 의도되지 않는다.
SOC는 완전한 컴퓨터 시스템을 구현하는 데 필요한 대부분의 요소들을 포함할 수 있지만, 일부 요소들(예컨대, 시스템 메모리)은 SOC 외부에 있을 수 있다. 예를 들어, SOC는 하나 이상의 범용 프로세서 코어들, 하나 이상의 그래픽 프로세싱 유닛들, 및 프로세서 코어들 및 그래픽 프로세싱 유닛들과 별개인 하나 이상의 다른 주변 디바이스들(이를테면 주문형 가속기들, I/O 인터페이스들 또는 다른 유형들의 디바이스들)을 포함할 수 있다. SOC는 시스템 메모리와 인터페이싱하도록 구성된 하나 이상의 메모리 제어기 회로뿐만 아니라 메모리 제어기 회로(들), 프로세서 코어(들), 그래픽 프로세싱 유닛(들), 및 주변 디바이스(들) 사이의 통신을 제공하도록 구성된 상호연결 패브릭을 더 포함할 수 있다.
주어진 SOC에 대한 설계 요건들은 종종, SOC가 목표로 하는 특정 애플리케이션의 전력 제한들 및 성능 요건들에 의해 결정된다. 예를 들어, 스마트 시계 디바이스에 대한 SOC는 엄격한 전력 소비 요건들을 가질 수 있는데, 그 이유는 이러한 디바이스의 폼 팩터가 이용가능한 배터리 크기 및 그에 따라 디바이스의 최대 사용 시간을 제한하기 때문이다. 동시에, 이러한 디바이스의 작은 크기는 SOC가 지원하는 데 필요한 주변기기들의 수 뿐만 아니라 SOC가 실행하는 애플리케이션들의 컴퓨팅 요건들을 제한할 수 있다. 대조적으로, 모바일 폰 애플리케이션에 대한 SOC는 더 큰 이용가능한 배터리 및 그에 따라 더 큰 전력 버짓을 가질 것이지만, 또한, 더 복잡한 주변기기들 및 더 큰 그래픽들 및 일반적인 컴퓨팅 요건들을 가질 것으로 예상될 것이다. 따라서, 그러한 SOC는 더 작은 디바이스에 대한 설계보다 더 크고 더 복잡할 것으로 예상될 것이다.
이러한 비교는 다른 애플리케이션들로 임의로 확장될 수 있다. 예를 들어, 증강 및/또는 가상 현실 시스템들과 같은 웨어러블 컴퓨팅 솔루션들은 덜 복잡한 디바이스들보다 더 큰 컴퓨팅 요건들을 제공할 것으로 예상될 수 있고, 데스크톱 및/또는 랙-장착형 컴퓨터 시스템들을 위한 디바이스들은 여전히 더 큰 것으로 예상될 수 있다.
시스템들이 더 큰 애플리케이션들을 위해 구축됨에 따라, 성능을 스케일링하기 위해 다수의 칩들이 함께 사용되어, "칩들의 시스템"을 형성할 수 있다. 본 명세서는, 이러한 시스템들이 단일 물리적 칩이든 또는 다수의 물리적 칩들이든 간에, 이러한 시스템들을 "SOC"로서 계속 지칭할 것이다. 본 개시내용의 원리들은 다수의 칩 SOC들 및 단일 칩 SOC들에 동일하게 적용가능하다.
본 개시내용의 발명자들의 통찰은, 위에서 논의된 다양한 애플리케이션들에 대한 컴퓨팅 요건들 및 대응하는 SOC 복잡도가 작은 것으로부터 큰 것으로 스케일링되는 경향이 있다는 것이다. SOC가 물리적 복잡성에서 쉽게 스케일링되도록 설계될 수 있다면, 코어 SOC 설계는 설계 재사용을 활용하고 중복된 노력을 감소시키면서 다양한 애플리케이션들에 쉽게 맞춤화될 수 있다. 그러한 SOC는 또한 기능 블록들, 예컨대 프로세싱 코어들 또는 매체 블록들에 대한 일관된 뷰를 제공하여, 노력의 감소에 추가로 부가하여, 이들의 SOC로의 통합을 더 용이하게 한다. 즉, 동일한 기능 블록(또는 "IP") 설계는 작은 것에서부터 큰 것까지 SOC들에서 본질적으로 수정되지 않고 사용될 수 있다. 추가적으로, 그러한 SOC 설계가 SOC 상에서 실행되는 소프트웨어에 대체로 또는 완전히 투명한 방식으로 스케일링될 수 있는 경우, SOC의 상이하게 자원이 공급된 버전들에 걸쳐 쉽게 스케일링될 수 있는 소프트웨어 애플리케이션들의 개발이 크게 단순화될 것이다. 애플리케이션은 한 번 기록될 수 있고, 다시 작은 것에서 큰 것에 이르기까지 많은 상이한 시스템들에서 자동으로 정확하게 동작할 수 있다. 동일한 소프트웨어가 상이한 자원 버전들에 걸쳐 스케일링될 때, 소프트웨어는 사용자에게 동일한 인터페이스를 제공하는데, 이는 스케일링의 추가의 이익이다.
본 개시내용은 그러한 스케일러블 SOC 설계를 고려한다. 특히, 코어 SOC 설계는 프로세서 코어들, 그래픽 프로세싱 유닛들, 메모리 제어기 회로들, 주변 디바이스들, 및 이들을 상호연결하도록 구성된 상호연결 패브릭의 세트를 포함할 수 있다. 추가로, 프로세서 코어들, 그래픽 프로세싱 유닛들 및 주변 디바이스들은 통합형 메모리 아키텍처를 통해 시스템 메모리에 액세스하도록 구성될 수 있다. 통합형 메모리 아키텍처는 통합형 어드레스 공간을 포함하며, 이는 시스템 내의 이종 에이전트들(프로세서들, 그래픽 프로세싱 유닛들, 주변기기들 등)이 간단하게 그리고 고성능으로 협력할 수 있게 한다. 즉, 사설 어드레스 공간을 그래픽 프로세싱 유닛에 전용하고 그 사설 어드레스 공간으로 그리고 그로부터 데이터가 복사될 것을 요구하기보다는, 그래픽 프로세싱 유닛, 프로세서 코어들 및 다른 주변 디바이스들은 원칙적으로, (일부 실시예들에서, 특정 유형들의 메모리 콘텐츠에 대한 액세스를 제한하는 특권 모델들 또는 다른 보안 특징들을 조건으로) 메모리 제어기 회로들에 의해 임의의 메모리 어드레스에 대한 액세스를 공유할 수 있다. 추가적으로, 통합형 메모리 아키텍처는, SOC 복잡도가 상이한 시스템들의 요건들을 충족하도록 스케일링되는 것과 동일한 메모리 시맨틱(memory semantic)들(예컨대, 메모리 시맨틱들의 공통 세트)을 제공한다. 예를 들어, 메모리 시맨틱들은 메모리 순서화 특성들, QoS(quality of service) 지원 및 속성들, 메모리 관리 유닛 정의, 캐시 코히어런시 기능 등을 포함할 수 있다. 통합형 어드레스 공간은 물리적 어드레스 공간과 상이한 가상 어드레스 공간일 수 있거나, 또는 물리적 어드레스 공간일 수 있거나, 또는 둘 모두일 수 있다.
아키텍처는 SOC가 스케일링될 때와 동일하게 유지되지만, 다양한 구현 선택들이 이루어질 수 있다. 예를 들어, 가상 채널들은 QoS 지원의 일부로서 사용될 수 있지만, 주어진 시스템에서 QoS의 전부가 보장되지 않는다면, 지원되는 가상 채널들의 서브세트가 구현될 수 있다. 주어진 시스템에서 요구되는 대역폭 및 레이턴시 특성들에 따라 상이한 상호연결 패브릭 구현들이 사용될 수 있다. 추가적으로, 일부 특징들은 더 작은 시스템들에서는 필요하지 않을 수 있다(예컨대, 다양한 메모리 제어기들로의 메모리 트래픽을 밸런싱하기 위한 어드레스 해싱은 단일 메모리 제어기 시스템에서 요구되지 않을 수 있다. 해싱 알고리즘은 적은 수(예컨대, 2개 또는 4개)의 메모리 제어기들을 갖는 경우들에는 중요하지 않을 수 있지만, 더 많은 수의 메모리 제어기들이 사용될 때 시스템 성능에 대한 더 큰 기여자가 된다.
추가적으로, 컴포넌트들 중 일부는 확장성을 염두에 두고 설계될 수 있다. 예를 들어, 메모리 제어기들은 추가적인 메모리 제어기들을 패브릭에 추가함으로써 스케일 업하도록 설계될 수 있으며, 이들 각각은 어드레스 공간의 일부, 메모리 캐시, 및 코히어런시 추적 로직을 갖는다.
더 구체적으로, 복잡도에서 쉽게 증가 뿐만 아니라 축소될 수 있는 SOC 설계의 실시예들이 개시된다. 예를 들어, SOC에서, 프로세서 코어들, 그래픽 프로세싱 유닛들, 패브릭, 및 다른 디바이스들은, 정의된 방향을 따라 SOC를 "초핑(chopping)"함으로써, 제조 전에 SOC의 크기 및 복잡성이 용이하게 감소될 수 있도록 배열 및 구성되어, 결과적인 설계는 오리지널 설계에서 정의된 컴포넌트들의 서브세트만을 포함할 수 있다. 그렇지 않고 SOC의 제거된 부분으로 확장될 버스들이 적절하게 종결될 때, 비교적 적은 설계 및 검증 노력으로 오리지널 SOC 설계의 복잡성이 감소된 버전이 획득될 수 있다. 통합형 메모리 아키텍처는 복잡성이 감소된 설계에서의 애플리케이션들의 배치를 용이하게 할 수 있으며, 일부 경우들에서, 이는 실질적인 수정 없이 단순히 동작할 수 있다.
이전에 언급된 바와 같이, 개시된 SOC 설계의 실시예들은 복잡성이 확대되도록 구성될 수 있다. 예를 들어, 단일-다이 SOC 설계의 다수의 인스턴스들이 상호연결될 수 있어서, 시스템은 2, 3, 4의 배수, 또는 그 초과만큼 단일-다이 설계보다 더 많은 자원들을 갖게 된다. 또한, 통합형 메모리 아키텍처 및 일관된 SOC 아키텍처는 이러한 다중-다이 시스템 구성들에 의해 제공되는 추가적인 컴퓨팅 자원들을 사용하도록 스케일링되는 소프트웨어 애플리케이션들의 개발 및 배치를 용이하게 할 수 있다.
도 1은 메모리들(12A-12m)과 같은 하나 이상의 메모리들에 커플링된 스케일러블 SOC(10)의 일 실시예의 블록도이다. SOC(10)는 복수의 프로세서 클러스터들(14A-14n)을 포함할 수 있다. 프로세서 클러스터들(14A-14n)은 하나 이상의 캐시들(예컨대, 캐시(18))에 커플링된 하나 이상의 프로세서들(P)(16)을 포함할 수 있다. 프로세서들(16)은 범용 프로세서들(예를 들어, 중앙 프로세싱 유닛들 또는 CPU들) 뿐만 아니라 다른 유형들의 프로세서들, 이를테면 GPU(graphics processing unit)들을 포함할 수 있다. SOC(10)는 하나 이상의 다른 에이전트들(20A-20p)을 포함할 수 있다. 하나 이상의 다른 에이전트들(20A-20p)은 예를 들어 다양한 주변 회로들/디바이스들, 및/또는 하나 이상의 주변 디바이스들/회로들에 커플링된 입력/출력 에이전트(IOA)와 같은 브리지(bridge)를 포함할 수 있다. SOC(10)는 사용 동안 개개의 메모리 디바이스 또는 회로(12A-12m)에 각각 커플링되는 하나 이상의 메모리 제어기들(22A-22m)을 포함할 수 있다. 일 실시예에서, 각각의 메모리 제어기(22A-22m)는 디렉토리에 커플링된 코히어런시 제어기 회로(더 간략하게 "코히어런트 제어기" 또는 "CC")를 포함할 수 있다(코히어런시 제어기 및 디렉토리는 도 1에 도시되지 않음). 추가적으로, D2D(die to die) 회로(26)가 SOC(10)에 도시된다. 메모리 제어기들(22A-22m), 다른 에이전트들(20A-20p), D2D 회로(26) 및 프로세서 클러스터들(14A-14n)은 다양한 컴포넌트들(22A-22m, 20A-20p, 26, 14A-14n) 사이에서 통신하기 위해 상호연결부(28)에 커플링될 수 있다. 명칭에서 나타나는 바와 같이, SOC(10)의 컴포넌트들은 하나의 실시예에서 단일 집적 회로 "칩" 상으로 집적될 수 있다. 다른 실시예들에서, 다양한 컴포넌트들이 다른 칩들 상의 SOC(10) 또는 달리 별개의 컴포넌트들 외부에 있을 수 있다. 임의의 양의 통합부 또는 별개의 컴포넌트들이 사용될 수 있다. 일 실시예에서, 프로세서 클러스터들(14A-14n) 및 메모리 제어기들(22A-22m)의 서브세트들이, 도 1의 SOC(10)에 예시된 컴포넌트들을 형성하기 위해 함께 커플링되는 다수의 집적 회로 칩들 중 하나에서 구현될 수 있다.
D2D 회로(26)는 상호연결 패브릭(28)에 커플링되고 상호연결 패브릭(28)을 SOC(10)의 다른 인스턴스 상의 대응하는 상호연결 패브릭(28)에 커플링하도록 구성된 오프-칩 상호연결부일 수 있다. 상호연결 패브릭(28) 및 오프-칩 상호연결부(26)는 하나 이상의 메모리 제어기 회로들, 프로세서 코어들, 그래픽 프로세싱 유닛들 및 주변 디바이스들을 집적 회로의 단일 인스턴스 또는 집적 회로의 2개 이상의 인스턴스들 중 어느 하나에서 투명하게 연결하는 인터페이스를 제공한다. 즉, D2D 회로(26)를 통해, 상호연결 패브릭(28)은 2개 이상의 집적 회로 다이들에 걸쳐 연장되고, 집적 회로 다이들 상의 소스 및 목적지의 위치에 투명한 통신은 소스와 목적지 사이에서 라우팅된다. 상호연결 패브릭(28)은 소스 및 목적지가 동일한 집적 회로 상에 있는지 여부와 독립적으로 소스와 목적지 사이의 통신을 자동으로 라우팅하기 위해 하드웨어 회로들(예를 들어, D2D 회로(26))을 사용하여 2개 이상의 집적 회로 다이들에 걸쳐 연장된다.
따라서, D2D 회로(26)는 시스템에서 SOC(10)의 2개 이상의 인스턴스들에 대한 SOC(10)의 확장성을 지원한다. 2개 이상의 인스턴스들이 포함될 때, 통합형 어드레스 공간을 포함하는 통합형 메모리 아키텍처는, 프로세서 코어들, 그래픽 프로세싱 유닛들, 또는 주변 디바이스들 상에서 실행되는 소프트웨어에 투명한 집적 회로 다이의 2개 이상의 인스턴스들에 걸쳐 확장된다. 유사하게, 시스템 내의 집적 회로 다이의 단일 인스턴스의 경우, 통합형 어드레스 공간을 포함하는 통합형 메모리 아키텍처는 소프트웨어에 대해 투명한 단일 인스턴스에 맵핑된다. 집적 회로 다이의 2개 이상의 인스턴스가 시스템에 포함될 때, 시스템의 프로세서 코어들(16), 그래픽 프로세싱 유닛들, 주변 디바이스들(20A-20p) 및 상호연결 패브릭(28)의 세트는 다시 소프트웨어에 투명한 2개 이상의 집적 회로 다이들에 걸쳐 분산된다.
위에서 언급된 바와 같이, 프로세서 클러스터들(14A-14n)은 하나 이상의 프로세서들(16)을 포함할 수 있다. 프로세서들(16)은 SOC(10)의 중앙 프로세싱 장치(CPU)의 역할을 할 수 있다.
시스템의 CPU는 시스템의 메인 제어 소프트웨어, 예컨대 운영 체제를 실행하는 프로세서(들)를 포함한다. 일반적으로, 사용 동안 CPU에 의해 실행되는 소프트웨어는 시스템의 다른 컴포넌트들을 제어하여 시스템의 원하는 기능을 실현할 수 있다. 프로세서들은 또한 다른 소프트웨어, 예를 들어, 애플리케이션 프로그램들을 실행할 수 있다. 애플리케이션 프로그램들은 사용자 기능을 제공할 수 있고, 저-레벨 디바이스 제어, 스케줄링, 메모리 관리 등을 위해 운영 시스템에 의존할 수 있다. 따라서, 프로세서들은 또한 애플리케이션 프로세서들로 지칭될 수 있다. 추가적으로, 주어진 클러스터(14A-14n) 내의 프로세서들(16)은 이전에 언급된 바와 같이 GPU들일 수 있고, 렌더링, 셰이딩, 및 다른 조작들을 위해 최적화된 그래픽 명령어 세트를 구현할 수 있다. 클러스터들(14A-14n)은 캐시(18)와 같은 다른 하드웨어 및/또는 시스템의 다른 컴포넌트들에 대한 인터페이스(예를 들어, 상호연결부(28)에 대한 인터페이스)를 더 포함할 수 있다. 다른 코히어런트 에이전트들은 CPU들 또는 GPU들이 아닌 프로세서들을 포함할 수 있다.
일반적으로, 프로세서는 프로세서에 의해 구현된 명령어 세트 아키텍처에 정의된 명령어들을 실행하도록 구성된 임의의 회로부 및/또는 마이크로코드를 포함할 수 있다. 프로세서들은 시스템-온-칩(SOC(10)) 또는 다른 레벨들의 통합부로서 다른 컴포넌트들과 함께 집적 회로 상에 구현된 프로세서 코어들을 망라할 수 있다. 프로세서들은 별개의 마이크로프로세서들, 다중 칩 모듈 구현들에 통합된 프로세서 코어들 및/또는 마이크로프로세서들, 다수의 집적 회로들로서 구현된 프로세서들 등을 추가로 포함할 수 있다. 주어진 클러스터(14A-14n) 내의 프로세서들(16)의 수는 다른 클러스터(14A-14n)의 프로세서들(16)의 수와는 상이할 수 있다. 일반적으로, 하나 이상의 프로세서들이 포함될 수 있다. 추가적으로, 프로세서들(16)은 마이크로아키텍처 구현, 성능 및 전력 특성들 등에서 상이할 수 있다. 일부 경우들에서, 프로세서들은 이들이 구현하는 명령 세트 아키텍처, 이들의 기능(예를 들어, CPU, 그래픽 프로세싱 유닛(GPU) 프로세서들, 마이크로제어기들, 디지털 신호 프로세서들, 이미지 신호 프로세서들 등) 등에서도 상이할 수 있다.
캐시들(18)은 세트 연관, 직접 맵핑 또는 완전 연관과 같은 임의의 용량 및 구성을 가질 수 있다. 캐시 블록 크기는 임의의 원하는 크기(예를 들어, 32 바이트, 64 바이트, 128 바이트 등)일 수 있다. 캐시 블록은 캐시(18) 내의 할당 및 할당해제(deallocation)의 단위일 수 있다. 추가적으로, 캐시 블록은 본 실시예에서 코히어런시가 유지되는 단위(예를 들어, 메모리 어드레스 공간의 정렬된 코히어런스-그래뉼-크기의 세그먼트)일 수 있다. 캐시 블록은 또한 일부 경우들에서 캐시 라인으로 지칭될 수 있다.
메모리 제어기들(22A-22m)은 일반적으로, SOC(10)의 다른 컴포넌트들로부터 메모리 동작들을 수신하고, 메모리들(12A-12m)에 액세스하여 메모리 동작들을 완료하기 위한 회로부를 포함할 수 있다. 메모리 제어기들(22A-22m)은 임의의 유형의 메모리들(12A-12m)에 액세스하도록 구성될 수 있다. 더 구체적으로, 메모리들(12A-12m)은 랜덤 액세스 메모리로서 맵핑될 수 있는 임의의 유형의 메모리 디바이스일 수 있다. 예를 들어, 메모리들(12A-12m)은 정적 랜덤 액세스 메모리(SRAM), 이중 데이터 레이트(DDR, DDR2, DDR3, DDR4 등) DRAM, 비휘발성 메모리들, 그래픽 DDR DRAM(GDDR)과 같은 그래픽 DRAM, 및 고대역폭 메모리들(HBM)을 포함하는 동기식 DRAM(SDRAM)과 같은 동기 RAM(DRAM)일 수 있다. 저전력/모바일 버전들의 DDR DRAM(예컨대, LPDDR, mDDR 등)이 지원될 수 있다. 메모리 제어기들(22A-22m)은, 동작들을 순서화하기 위한(그리고 잠재적으로 재순서화하기 위한) 그리고 동작들을 메모리들(12A-12m)에 제시하기 위한, 메모리 동작들에 대한 큐들을 포함할 수 있다. 메모리 제어기들(22A-22m)은 메모리로의 기록을 대기하는 기록 데이터 및 메모리 동작의 소스로의 리턴을 대기하는 판독 데이터를 저장하기 위한 데이터 버퍼들을 더 포함할 수 있다(스누프에서 데이터가 제공되지 않는 경우). 일부 실시예들에서, 메모리 제어기들(22A-22m)은 최근에 액세스된 메모리 데이터를 저장하는 메모리 캐시를 포함할 수 있다. SOC 구현예들에서, 예를 들어, 메모리 캐시는, 곧 다시 액세스될 것으로 예상되는 경우에 메모리들(12A-12m)로부터의 데이터의 재-액세스를 피함으로써, SOC에서의 전력 소모를 감소시킬 수 있다. 일부 경우들에 있어서, 메모리 캐시는, 또한, 소정 컴포넌트들만을 서빙하는 프라이빗 캐시들, 예컨대 프로세서들(16) 내의 캐시(18) 또는 캐시들과는 대조적인 시스템 캐시로서 지칭될 수 있다. 추가적으로, 일부 실시예들에서, 시스템 캐시는 메모리 제어기들(22A-22m) 내에 위치될 필요가 없다. 따라서, 프로세서 코어들, 그래픽 프로세싱 유닛들, 주변 디바이스들, 및 시스템 메모리 사이에 하나 이상의 레벨들의 캐시가 있을 수 있다. 하나 이상의 메모리 제어기 회로들(22A-22m)은 상호연결 패브릭과 시스템 메모리 사이에 개재된 개개의 메모리 캐시들을 포함할 수 있고, 개개의 메모리 캐시들은 하나 이상의 레벨들의 캐시 중 하나이다.
다른 에이전트들(20A-20p)은 일반적으로 SOC(C10)(예를 들어, 주변기기들", "주변 디바이스들" 또는 "주변 회로들")에 포함된 다양한 추가적인 하드웨어 기능을 포함할 수 있다. 예를 들어, 주변기기들은 비디오 주변기기들, 예컨대 카메라 또는 다른 이미지 센서로부터의 이미지 캡처 데이터를 프로세싱하도록 구성된 이미지 신호 프로세서, 비디오 인코더/디코더, 스케일러, 로테이터, 블렌더 등을 포함할 수 있다. 주변기기들은 오디오 주변기기들, 예컨대 마이크로폰, 스피커, 마이크로폰 및 스피커에 대한 인터페이스, 오디오 프로세서, 디지털 신호 프로세서, 믹서 등을 포함할 수 있다. 주변기기들은, USB(Universal Serial Bus), PCIe(peripheral component interconnect(PCI) Express)를 비롯한 PCI, 직렬 및 병렬 포트 등과 같은 인터페이스들을 포함한, SOC(10) 외부의 다양한 인터페이스들에 대한 인터페이스 제어기들을 포함할 수 있다. 주변기기들은 매체 액세스 제어기(MAC)들과 같은 네트워킹 주변기기들을 포함할 수 있다. 하드웨어의 임의의 세트가 포함될 수 있다. 다른 에이전트들(20A-20p) 은 또한 하기에 설명된 IOA와 같은, 일 실시예에서, 주변기기들의 세트에 대한 브리지들을 포함할 수 있다. 일 실시예에서, 주변 디바이스들은, 오디오 프로세싱 디바이스, 비디오 프로세싱 디바이스, 기계 학습 가속기 회로, 행렬 산술 가속기 회로, 카메라 프로세싱 회로, 디스플레이 파이프라인 회로, 비휘발성 메모리 제어기, 주변 컴포넌트 상호연결 제어기, 보안 프로세서, 또는 직렬 버스 제어기 중 하나 이상을 포함한다.
상호연결부(28)는 SOC(10)의 컴포넌트들 간의 통신을 위한 임의의 통신 상호연결부 및 프로토콜일 수 있다. 상호연결부(28)는 공유 버스 구성들, 크로스 바(cross bar) 구성들, 및 브리지들을 이용한 계층적 버스들을 포함하여, 버스-기반일 수 있다. 상호연결부(28)는 또한 패킷-기반형 또는 회로-스위칭형일 수 있고, 브리지들을 갖는 계층구조, 크로스 바, 포인트-투-포인트(point-to-point), 또는 다른 상호연결부들일 수 있다. 상호연결부(28)는 일 실시예에서 다수의 독립적인 통신 패브릭들을 포함할 수 있다.
일 실시예에서, 집적 회로 다이의 2개 초과의 인스턴스들이 시스템에 포함될 때, 시스템은 2개 이상의 집적 회로 다이들에 걸쳐 상호연결 패브릭의 버스들을 커플링하도록 구성된 적어도 하나의 인터포저 디바이스를 더 포함할 수 있다. 일 실시예에서, 주어진 집적 회로 다이는 주어진 집적 회로 다이의 로컬 전력 상태를 관리하도록 구성된 전력 관리자 회로를 포함한다. 일 실시예에서, 집적 회로 다이의 2개 이상의 인스턴스들이 시스템에 포함될 때, 개개의 전력 관리자는 집적 회로 다이의 로컬 전력 상태를 관리하도록 구성되고, 2개 이상의 집적 회로 다이 중 적어도 하나는 전력 관리자 회로들을 동기화하도록 구성된 다른 전력 관리자 회로를 포함한다.
일반적으로, 각각의 컴포넌트(22A-22m, 20A-20p, 14A-14n)의 수는 실시예마다 다를 수 있고, 임의의 수가 사용될 수 있다. "m", "p" 및 "n"-접미사로 나타낸 바와 같이, 한 유형의 컴포넌트의 수는 다른 유형의 컴포넌트의 수와 상이할 수 있다. 그러나, 주어진 유형의 수가 다른 유형의 수와 동일할 수도 있다. 추가적으로, 도 1의 시스템은 다수의 메모리 제어기들(22A-22m)로 예시되어 있지만, 하나의 메모리 제어기(22A-22m)를 갖는 실시예들이 또한 고려된다.
스케일러블 SOC 설계의 개념은 설명하기는 간단하지만, 실행하기는 어렵다. 이러한 노력을 지원하기 위해 다수의 혁신들이 개발되었으며, 이들은 아래에서 더 상세히 설명된다. 특히, 도 2 내지 도 14는 통신 패브릭(28)의 실시예들의 추가적인 세부사항들을 포함한다. 도 15 내지 도 26은 스케일러블 인터럽트 구조의 실시예들을 예시한다. 도 27 내지 도 43은 프로세서 클러스터들(14A-14n)뿐만 아니라 디렉토리/코히어런트 제어 회로 또는 회로들을 포함하는, 시스템의 코히어런트 에이전트들 사이에서 구현될 수 있는 스케일러블 캐시 코히어런시 메커니즘의 실시예들을 예시한다. 일 실시예에서, 디렉토리들 및 코히어런시 제어 회로들은 복수의 메모리 제어기들(22A-22m) 사이에 분산되며, 여기서 각각의 디렉토리 및 코히어런시 제어 회로는, 주어진 메모리 제어기가 커플링되는 메모리 디바이스들(12A-12m)에 맵핑된 어드레스 공간의 부분들에 대한 캐시 코히어런시를 관리하도록 구성된다. 도 44 내지 도 48은 하나 이상의 주변 회로들에 대한 IOA 브리지의 실시예들을 도시한다. 도 49 내지 도 55는 D2D 회로(26)의 실시예들의 추가적인 세부사항들을 예시한다. 도 56 내지 도 68은 복수의 메모리 제어기들(22A-22m)에 걸쳐 어드레스 공간을 분배하기 위한 해싱 방식들의 실시예들을 예시한다. 도 69 내지 도 82는 동일한 설계 데이터베이스에 기초하여, 상이한 시스템들에 대한 스케일러블 Soc(10)의 다수의 테이프아웃들을 지원하는 설계 방법론의 실시예들을 예시한다.
아래에서 설명되는 다양한 실시예들 및 위에서 설명된 실시예들은 본 개시내용의 실시예들을 형성하기 위해 임의의 원하는 조합으로 사용될 수 있다. 구체적으로, 실시예들 전부가 아닌 실시예 및/또는 임의의 주어진 실시예에서 설명된 특징들 전부가 아닌 특징을 포함하여, 실시예들 중 임의의 실시예로부터의 실시예 특징들의 임의의 서브세트가 조합되어 실시예들을 형성할 수 있다. 모든 그러한 실시예들은 본 명세서에서 설명되는 바와 같은 스케일러블 SOC의 고려되는 실시예들이다.
패브릭
도 2 내지 도 14는 상호연결 패브릭(28)의 다양한 실시예들을 예시한다. 이러한 설명에 기초하여, 복수의 프로세서 코어들; 복수의 그래픽 프로세싱 유닛들; 프로세서 코어들 및 그래픽 프로세싱 유닛들과 구별되는 복수의 주변 디바이스들; 시스템 메모리와 인터페이싱하도록 구성된 하나 이상의 메모리 제어기 회로들; 및 하나 이상의 메모리 제어기 회로들과 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭을 포함하고; 상호연결 패브릭은 이종 동작 특성들을 갖는 적어도 2개의 네트워크들을 포함하는 시스템이 고려된다. 일 실시예에서, 상호연결 패브릭은 이종 상호연결 토폴로지들을 갖는 적어도 2개의 네트워크들을 포함한다. 적어도 2개의 네트워크들은 프로세서 코어들과 하나 이상의 메모리 제어기 회로들을 상호연결하는 코히어런트 네트워크를 포함할 수 있다. 보다 구체적으로, 코히어런트 네트워크는 코히어런트 에이전트들을 상호연결하고, 프로세서 코어는 코히어런트 에이전트일 수 있거나, 또는 프로세서 클러스터는 코히어런트 에이전트일 수 있다. 적어도 2개의 네트워크들은 그래픽 프로세싱 유닛들 및 하나 이상의 메모리 제어기 회로들에 커플링된 완화된 순서의 네트워크를 포함할 수 있다. 일 실시예에서, 주변 디바이스들은 디바이스들의 서브세트를 포함하고, 서브세트는 기계 학습 가속기 회로 또는 완화된 순서의 벌크 미디어 디바이스 중 하나 이상을 포함하고, 완화된 순서의 네트워크는 추가로, 하나 이상의 메모리 제어기 회로들에 대한 디바이스들의 서브세트에 커플링된다. 적어도 2개의 네트워크들은 주변 디바이스들과 하나 이상의 메모리 제어기 회로들을 상호연결하도록 커플링된 입력-출력 네트워크를 포함할 수 있다. 주변 디바이스들은 하나 이상의 실시간 디바이스들을 포함한다.
일 실시예에서, 적어도 2개의 네트워크들은 적어도 2개의 네트워크들 중 제2 네트워크와 비교하여 레이턴시를 감소시키기 위한 하나 이상의 특성들을 포함하는 제1 네트워크를 포함한다. 예를 들어, 하나 이상의 특성들은 집적 회로의 표면적에 걸쳐 제2 네트워크보다 더 짧은 루트를 포함할 수 있다. 하나 이상의 특성들은 제2 상호연결부에 대한 배선보다 더 낮은 레이턴시 특성들을 제공하는 금속 층들 내의 제1 상호연결부에 대한 배선을 포함할 수 있다.
일 실시예에서, 적어도 2개의 네트워크들은 적어도 2개의 네트워크들 중 제2 네트워크와 비교하여 대역폭을 증가시키기 위한 하나 이상의 특성들을 포함하는 제1 네트워크를 포함한다. 예를 들어, 하나 이상의 특성들은 제2 네트워크와 비교하여 더 넓은 상호연결부를 포함한다. 하나 이상의 특성들은 제2 네트워크에 대한 배선보다 시스템이 구현되는 기판의 표면으로부터 더 먼 금속 층들에서의 배선을 포함한다.
일 실시예에서, 적어도 2개의 네트워크들에 의해 이용되는 상호연결 토폴로지들은 스타 토폴로지, 메시 토폴로지, 링 토폴로지, 트리 토폴로지, 팻 트리 토폴로지, 하이퍼큐브 토폴로지, 또는 토폴로지들 중 하나 이상의 조합을 포함한다. 다른 실시예에서, 적어도 2개의 네트워크들은 물리적으로 그리고 논리적으로 독립적이다. 또 다른 실시예에서, 적어도 2개의 네트워크들은 제1 동작 모드에서 물리적으로 별개이고, 적어도 2개의 네트워크들 중 제1 네트워크 및 적어도 2개의 네트워크들 중 제2 네트워크는 가상이고, 제2 동작 모드에서 단일 물리적 네트워크를 공유한다.
일 실시예에서, SOC는 반도체 다이 상에 집적된다. SOC는 복수의 프로세서 코어들; 복수의 그래픽 프로세싱 유닛들; 복수의 주변 디바이스들; 하나 이상의 메모리 제어기 회로들; 및 하나 이상의 메모리 제어기 회로들과 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭을 포함하고; 상호연결 패브릭은 적어도 제1 네트워크 및 제2 네트워크를 포함하고, 제1 네트워크는 적어도 2개의 네트워크들 중 제2 네트워크와 비교하여 레이턴시를 감소시키기 위한 하나 이상의 특성들을 포함한다. 예를 들어, 하나 이상의 특성들은 제2 네트워크의 루트보다 반도체 다이의 표면에 걸쳐 제1 네트워크에 대한 더 짧은 루트를 포함한다. 다른 예에서, 하나 이상의 특성들은 제2 네트워크에 사용되는 배선 층들보다 더 낮은 레이턴시 특성들을 갖는 금속 층들에 배선을 포함한다. 일 실시예에서, 제2 네트워크는 제1 네트워크에 비해 대역폭을 증가시키기 위한 하나 이상의 제2 특성들을 포함한다. 예를 들어, 하나 이상의 제2 특성들은 제2 네트워크에 비해 더 넓은 상호연결부(예컨대, 제1 네트워크보다 상호연결부 당 더 많은 와이어들)를 포함할 수 있다. 하나 이상의 제2 특성들은 제1 네트워크에 사용된 배선 층들보다 더 조밀한 금속 층들에 배선을 포함할 수 있다.
일 실시예에서, 시스템 온 칩(SOC)은 복수의 독립적인 네트워크들을 포함할 수 있다. 네트워크들은 물리적으로 독립적일 수 있고(예를 들어, 네트워크를 형성하는 전용 와이어들 및 다른 회로부를 가짐), 논리적으로 독립적일 수 있다(예를 들어, SOC 내의 에이전트들에 의해 소싱(source)된 통신들은 복수의 네트워크들 중 선택된 네트워크 상에서 송신되도록 논리적으로 정의될 수 있고, 다른 네트워크들 상에서의 송신에 의해 영향을 받지 않을 수 있음). 일부 실시예들에서, 주어진 네트워크 상에서 패킷들을 송신하기 위해 네트워크 스위치들이 포함될 수 있다. 네트워크 스위치들은 네트워크의 물리적인 부분일 수 있다(예를 들어, 각각의 네트워크에 대한 전용 네트워크 스위치들이 존재할 수 있다). 다른 실시예들에서, 네트워크 스위치는 물리적으로 독립적인 네트워크들 사이에서 공유될 수 있으며, 따라서, 네트워크들 중 하나 상에서 수신된 통신이 그 네트워크 상에서 유지된다는 것을 보장할 수 있다.
물리적으로 그리고 논리적으로 독립적인 네트워크들을 제공함으로써, 상이한 네트워크들 상에서의 병렬 통신을 통해 높은 대역폭이 달성될 수 있다. 부가적으로, 상이한 트래픽이 상이한 네트워크들 상에서 송신될 수 있고, 따라서 주어진 네트워크가 주어진 유형의 트래픽에 대해 최적화될 수 있다. 예를 들어, SOC 내의 중앙 프로세싱 유닛(CPU)들과 같은 프로세서들은 메모리 레이턴시에 민감할 수 있고, 프로세서들과 메모리 사이에서 코히어런트일 것으로 예상되는 데이터를 캐싱할 수 있다. 따라서, 시스템 내의 CPU들 및 메모리 제어기들이 에이전트들인 CPU 네트워크가 제공될 수 있다. CPU 네트워크는 낮은 레이턴시를 제공하도록 최적화될 수 있다. 예를 들어, 일 실시예에서, 낮은 레이턴시 요청들 및 벌크 요청들을 위한 가상 채널들이 존재할 수 있다. 낮은 레이턴시 요청들은 패브릭(fabric) 주위에서 그리고 메모리 제어기들에 의해 포워딩하는 데 있어서 벌크 요청들에 비해 선호될 수 있다. CPU 네트워크는 또한, 코히어런트하게 통신하도록 정의된 메시지들 및 프로토콜과의 캐시 코히어런시를 지원할 수 있다. 다른 네트워크는 입력/출력(I/O) 네트워크일 수 있다. 이러한 네트워크는 메모리와 통신하기 위해 다양한 주변기기 디바이스들("주변기기들")에 의해 사용될 수 있다. 네트워크는 주변기기들에 의해 필요한 대역폭을 지원할 수 있고, 또한 캐시 코히어런시를 지원할 수 있다. 그러나, I/O 트래픽은 때때로 CPU 트래픽보다 상당히 더 높은 레이턴시를 가질 수 있다. CPU로부터 메모리 트래픽으로 I/O 트래픽을 분리시킴으로써, CPU 트래픽은 I/O 트래픽에 의해 덜 영향을 받을 수 있다. CPU들은 코히어런시를 관리하고 주변기기들과 통신하기 위해 또한 I/O 네트워크 상의 에이전트들로서 포함될 수 있다. 일 실시예에서, 또 다른 네트워크는 완화된 순서 네트워크(relaxed order network)일 수 있다. CPU 및 I/O 네트워크들은 둘 모두, CPU들 및 주변기기들에 의해 예상되는 순서화를 제공하는, 이들 네트워크들 상의 통신들 사이의 순서화 모델들을 지원할 수 있다. 그러나, 완화된 순서 네트워크는 비-코히어런트일 수 있고, 많은 순서화 제약들로서 강제되지 않을 수 있다. 완화된 순서 네트워크는 메모리 제어기들과 통신하기 위해 그래픽 프로세싱 유닛(GPU)들에 의해 사용될 수 있다. 따라서, GPU들은 네트워크들에서 전용 대역폭을 가질 수 있고, CPU들 및/또는 주변기기들에 의해 요구되는 순서화에 의해 제약되지 않을 수 있다. 다른 실시예들은 원하는 대로 위의 네트워크들 및/또는 임의의 부가적인 네트워크들의 임의의 서브세트를 이용할 수 있다.
네트워크 스위치는 네트워크 상에서 통신들을 수신하고 통신의 목적지의 방향으로 네트워크 상에서 통신들을 포워딩하도록 구성된 회로일 수 있다. 예를 들어, 프로세서에 의해 소싱된 통신은 통신의 어드레스에 맵핑되는 메모리를 제어하는 메모리 제어기에 송신될 수 있다. 각각의 네트워크 스위치에서, 통신은 메모리 제어기를 향해 전방으로 송신될 수 있다. 통신이 판독되면, 메모리 제어기는 데이터를 소스로 다시 통신할 수 있고, 각각의 네트워크 스위치는 네트워크 상에서 데이터를 소스를 향해 포워딩할 수 있다. 일 실시예에서, 네트워크는 복수의 가상 채널들을 지원할 수 있다. 네트워크 스위치는, 가상 채널들 상의 통신들이 논리적으로 독립적으로 유지될 수 있도록 각각의 가상 채널에 전용되는 리소스들(예를 들어, 버퍼들)을 이용할 수 있다. 네트워크 스위치는 또한 네트워크 상에서 포워딩할 버퍼링된 통신들 중에서 선택하기 위해 중재 회로부를 이용할 수 있다. 가상 채널들은 네트워크를 물리적으로 공유하지만 네트워크 상에서 논리적으로 독립적인 채널들일 수 있다(예를 들어, 하나의 가상 채널에서의 통신들은 다른 가상 채널 상에서의 통신들의 진행을 차단하지 않는다).
에이전트는 일반적으로 네트워크 상의 통신들을 소싱 및/또는 싱크(sink)할 수 있는 임의의 디바이스(예를 들어, 프로세서, 주변기기, 메모리 제어기 등)일 수 있다. 소스 에이전트는 통신을 생성(소싱)하고, 목적지 에이전트는 통신을 수신(싱크)한다. 주어진 에이전트는 일부 통신들에 대한 소스 에이전트 및 다른 통신들에 대한 목적지 에이전트일 수 있다.
이제 도면들을 참조하면, 도 2는 물리적으로 그리고 논리적으로 독립적인 네트워크들을 예시하는 일반적인 도면이다. 도 3 내지 도 5는 다양한 네트워크 토폴로지들의 예들이다. 도 6은 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들을 갖는 SOC의 일 예이다. 도 7 내지 도 9는 부가적인 명확성을 위해 도 6의 다양한 네트워크들을 별개로 예시한다. 도 10은 2개의 반도체 다이를 포함하는 시스템의 블록도이며, SOC의 다수의 인스턴스들에 대한 네트워크들의 확장성(scalability)을 예시한다. 도 11 및 도 12는 더 상세히 도시된 예시적인 에이전트들이다. 도 13은 다양한 가상 채널들 및 통신 유형들, 및 어느 가상 채널들 및 통신 유형들이 도 6의 어느 네트워크들에 적용되는지를 도시한다. 도 14는 방법을 예시하는 흐름도이다. 아래의 설명은 도면들에 기초하여 추가적인 세부사항들을 제공할 것이다.
도 2는 다수의 네트워크 상호연결 에이전트들의 일 실시예를 포함하는 시스템의 블록도이다. 도 1에서, 에이전트들(A10A, A10B, A10C)이 예시되지만, 임의의 수의 에이전트들이 다양한 실시예들에 포함될 수 있다. 에이전트들A10A-A10B)은 네트워크(A12A)에 커플링되고, 에이전트들(A10A, A10C)은 네트워크(A12B)에 커플링된다. 임의의 수의 네트워크들(A12A-A12B)이 다양한 실시예들에 또한 포함될 수 있다. 네트워크(A12A)는 네트워크 스위치들(A14A, A14AB, A14AM, A14AN)(집합적으로 네트워크 스위치들(A14A))을 포함하는 복수의 네트워크 스위치들을 포함하고; 유사하게, 네트워크(A12B)는 네트워크 스위치들(A14BA, A14BB, A14BM, A14BN)(집합적으로 네트워크 스위치들(A14B))을 포함하는 복수의 네트워크 스위치들을 포함한다. 상이한 네트워크들(A12A-A12B)은 상이한 수의 네트워크 스위치들(A14A)을 포함할 수 있고, 12A-A12B는, 도 2에 다양한 화살표들로서 예시된, 물리적으로 별개의 연결부들("와이어들", "버스들" 또는"상호연결부")을 포함한다.
각각의 네트워크(A12A-A12B)가 그 자신의 물리적으로 그리고 논리적으로 별개의 상호연결부 및 네트워크 스위치들을 가지므로, 네트워크들(A12A-A12B)은 물리적으로 그리고 논리적으로 분리된다. 네트워크(A12A) 상의 통신은 네트워크(A12B) 상의 통신에 의해 영향을 받지 않고, 그 반대의 경우도 마찬가지이다. 개개의 네트워크들(A12A-A12B)에서의 상호연결부 상의 대역폭도 별개이고 독립적이다.
선택적으로, 에이전트(A10A-A10C)는 네트워크 인터페이스 회로(각각 참조 번호들(A16A-A16C))를 포함할 수 있거나 이에 커플링될 수 있다. 일부 에이전트들(A10A-A10C)은 네트워크 인터페이스들(A16A-A16C)을 포함할 수 있거나 이들에 커플링될 수 있는 반면, 다른 에이전트들(A10A-A10C)은 네트워크 인터페이스들(A16A-A16C)을 포함하지 않을 수 있거나 이들에 커플링되지 않을 수 있다. 네트워크 인터페이스들(A16A-A16C)은 대응하는 에이전트들(A10A-A10C)을 대신하여 네트워크들(A12A-A12B) 상에서 트래픽을 송신 및 수신하도록 구성될 수 있다. 네트워크 인터페이스들(A16A-A16C)은, 네트워크들(A12A-A12B)의 프로토콜/포맷에 부합하기 위해 대응하는 에이전트들(A10A-A10C)에 의해 발행된 통신들을 변환하거나 수정하고, 수정들을 제거하거나 또는 수신된 통신들을 에이전트들(A10A-A10C)에 의해 사용되는 프로토콜/포맷으로 변환하도록 구성될 수 있다. 따라서, 네트워크 인터페이스들(A16A-A16C)은 네트워크들(A12A-A12B)에 직접 인터페이싱하도록 구체적으로 설계되지 않은 에이전트들(A10A-A10C)에 대해 사용될 수 있다. 일부 경우들에서, 에이전트(A10A-A10C)는 하나 초과의 네트워크 상에서 통신할 수 있다(예를 들어, 에이전트(A10A)는 도 1의 네트워크들(A12A-A12B) 둘 모두 상에서 통신한다). 대응하는 네트워크 인터페이스(A16A)는 에이전트(A10A)에 의해 발행된 트래픽을 네트워크들(A12A-A12B)에 분리시키도록 구성될 수 있으며, 그에 따라, 네트워크들(A12A-A12B) 각각의 통신이 할당되고; 네트워크 인터페이스(A16A)는 대응하는 에이전트(A10A)에 대해 네트워크들(A12A-A12B)로부터 수신된 트래픽을 조합하도록 구성될 수 있다. (예를 들어, 다양한 실시예들에서 통신의 유형, 통신을 위한 목적지 에이전트(A10B-A10C), 어드레스 등에 기초하여) 네트워크(A12A-A12B)가 주어진 통신을 반송할 것으로 결정하기 위한 임의의 메커니즘이 사용될 수 있다.
네트워크 인터페이스 회로들이 선택적이고, 에이전트들이 네트워크들(A12A-A12B)을 직접 지원하는 데 많은 것들이 필요하지 않으므로, 단순화를 위해, 네트워크 인터페이스 회로들은 도면들의 나머지로부터 생략될 것이다. 그러나, 네트워크 인터페이스 회로들이 임의의 에이전트 또는 에이전트의 서브세트, 또는 심지어 에이전트들 모두에 의해, 예시된 실시예들 중 임의의 실시예에서 이용될 수 있다는 것이 이해된다.
일 실시예에서, 도 2의 시스템은 SOC로서 구현될 수 있고, 도 2에 예시된 컴포넌트들은 단일 반도체 기판 다이 상에 형성될 수 있다. SOC에 포함된 회로부는 복수의 에이전트들(A10C) 및 복수의 에이전트들(A10A-A10C)에 커플링된 복수의 네트워크 스위치들(A14A-A14B)을 포함할 수 있다. 복수의 네트워크 스위치들(A14A-A14B)은 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들(A12A-A12B)을 형성하도록 상호연결된다.
네트워크들(A12A-A12B)이 물리적으로 그리고 논리적으로 독립적이므로, 상이한 네트워크들은 상이한 토폴로지들을 가질 수 있다. 예를 들어, 주어진 네트워크는 링, 메시, 트리, 스타, 네트워크 스위치들의 완전히 연결된 세트(예를 들어, 네트워크 내의 서로 다른 스위치에 직접 연결된 스위치), 버스에 커플링된 다수의 에이전트들을 갖는 공유 버스 등 또는 토폴로지들 중 임의의 하나 이상의 토폴로지들의 하이브리드들을 가질 수 있다. 각각의 네트워크(A12A-A12B)는, 예를 들어 그 네트워크에 대해 요구되는 대역폭 및 레이턴시 속성들을 제공하거나, 네트워크에 대한 임의의 원하는 속성을 제공하는 토폴로지를 이용할 수 있다. 따라서, 일반적으로, SOC는 제1 토폴로지에 따라 구성된 제1 네트워크 및 제1 토폴로지와 상이한 제2 토폴로지에 따라 구성된 제2 네트워크를 포함할 수 있다.
도 3 내지 도 5는 예시적인 토폴로지들을 예시한다. 도 3은 에이전트들(A10A-A10C)을 커플링하기 위해 링 토폴로지를 사용하는 네트워크의 일 실시예의 블록도이다. 도 3의 예에서, 링은 네트워크 스위치들(A14AA-A14AH)로부터 형성된다. 에이전트(A10A)는 네트워크 스위치(A14AA)에 커플링되고; 에이전트(A10B)는 네트워크 스위치(A14AB)에 커플링되며; 에이전트(A10C)는 네트워크 스위치(A14AE)에 커플링된다.
링 토폴로지에서, 각각의 네트워크 스위치(A14AA-A14AH)는 2개의 다른 네트워크 스위치들(A14AA-A14AH)에 연결될 수 있으며, 스위치들은 임의의 네트워크 스위치(A14AA-A14AH)가 다른 네트워크 스위치의 방향으로 링 상에서 통신을 송신함으로써 링 내의 임의의 다른 네트워크 스위치에 도달할 수 있도록 링을 형성한다. 주어진 통신은 타겟팅된 네트워크 스위치에 도달하기 위해 링 내의 하나 이상의 중간 네트워크 스위치들을 통과할 수 있다. 주어진 네트워크 스위치(A14AA-A14AAH)가 링 상의 인접한 네트워크 스위치(A14AA-A14AH)로부터 통신을 수신할 때, 주어진 네트워크 스위치는 주어진 네트워크 스위치가 커플링되는 에이전트(A10A-A10C)가 통신의 목적지인지를 결정하기 위해 통신을 검사할 수 있다. 그렇다면, 주어진 네트워크 스위치는 통신을 종료하고 통신을 에이전트에 포워딩할 수 있다. 그렇지 않으면, 주어진 네트워크 스위치는 링 상의 다음 네트워크 스위치(예를 들어, 주어진 네트워크 스위치에 인접하고, 주어진 네트워크 스위치가 통신을 수신했던 인접한 네트워크 스위치가 아닌 다른 네트워크 스위치(A14AA-A14AH))에 통신을 포워딩할 수 있다. 주어진 네트워크 스위치에 대한 인접한 네트워크 스위치는, 통신이 임의의 중간 네트워크 스위치들을 통해 이동하지 않으면서, 주어진 네트워크 스위치가 통신을 직접 송신할 수 있는 경우에 대한 네트워크 스위치일 수 있다.
도 4는 에이전트들(A10A-A10P)을 커플링하기 위해 메시 토폴로지를 사용하는 네트워크의 일 실시예의 블록도이다. 도 4에 도시된 바와 같이, 네트워크는 네트워크 스위치들(A14AA-A14AH)을 포함할 수 있다. 각각의 네트워크 스위치(A14AA-A14AH)는 2개 이상의 다른 네트워크 스위치들에 커플링된다. 예를 들어, 도 4에 예시된 바와 같이, 네트워크 스위치(A14AA)는 네트워크 스위치들(A14AB, A14AE)에 커플링되고; 네트워크 스위치(A14AB)는 네트워크 스위치들(A14AA, A14AF, A14AC)에 커플링되는 등의 식이다. 따라서, 메시 네트워크 내의 상이한 네트워크 스위치들은 상이한 수들의 다른 네트워크 스위치들에 커플링될 수 있다. 더욱이, 도 4의 실시예가 비교적 대칭적인 구조를 갖지만, 다른 메시 네트워크들은, 예를 들어 네트워크 상에서 일반적인 것으로 예상되는 다양한 트래픽 패턴들에 의존하여 비대칭적일 수 있다. 각각의 네트워크 스위치(A14AA-A14AH)에서, 수신된 통신의 하나 이상의 속성들은, (수신 네트워크 스위치(A14AA-A14AH)가 커플링되는 에이전트(A10A-A10P)가 통신의 목적지가 아닌 한(이 경우, 수신 네트워크 스위치(A14AA-A14AH)는 네트워크 상의 통신을 종료하고, 이를 목적지 에이전트(A10A-A10P)에 제공할 수 있음)) 수신 네트워크 스위치(A14AA-A14AH)가 통신을 송신할 인접한 네트워크 스위치(A14AA-A14AH)를 결정하는 데 사용될 수 있다. 예를 들어, 일 실시예에서, 네트워크 스위치들(A14AA-A14AH)은 다양한 속성들에 기초하여 통신들을 라우팅하기 위해 시스템 초기화에서 프로그래밍될 수 있다.
일 실시예에서, 통신들은 목적지 에이전트에 기초하여 라우팅될 수 있다. 라우팅들은 메시 토폴로지에서 지원될 수 있는 소스와 목적지 에이전트 사이의 가장 적은 수의 네트워크 스위치들("최단 경로)을 통해 통신들을 전달하도록 구성될 수 있다. 대안적으로, 주어진 소스 에이전트-주어진 목적지 에이전트에 대한 상이한 통신들은 메시를 통해 상이한 경로들을 취할 수 있다. 예를 들어, 레이턴시-민감성 통신들은 더 짧은 경로를 통해 송신될 수 있는 반면, 덜 중요한 통신들은 짧은 경로 상의 대역폭을 소비하는 것을 피하기 위해 상이한 경로를 취할 수 있으며, 여기서 상이한 경로는, 예를 들어 사용 동안 덜 많이 로딩될 수 있다.
도 4는 부분적으로 연결된 메시의 일 예일 수 있으며: 적어도 일부 통신들은 메시 내의 하나 이상의 중간 네트워크 스위치들을 통과할 수 있다. 완전히 연결된 메시는 각각의 네트워크 스위치로부터 각각의 다른 네트워크 스위치로의 연결을 가질 수 있으며, 따라서 임의의 통신은 임의의 중간 네트워크 스위치들을 횡단하지 않으면서 송신될 수 있다. 다양한 실시예들에서, 임의의 레벨의 상호연결성이 사용될 수 있다.
도 5는 에이전트들(A10A-A10E)을 커플링하기 위해 트리 토폴로지를 사용하는 네트워크의 일 실시예의 블록도이다. 네트워크 스위치들(A14A-A14AG)은 이러한 예에서 트리를 형성하기 위해 상호연결된다. 트리는, 에이전트들(A10A-A10E)에 커플링된 에지 네트워크 스위치들(예를 들어, 도 5의 A14A, A14AB, A14AC, A14AD, A14AG) 및 다른 네트워크 스위치들에만 커플링된 중간 네트워크 스위치들(예를 들어, 도 5의 A14AE, A14AF)이 존재하는 계층적 네트워크의 형태이다. 예를 들어, 특정 에이전트가 종종 다른 에이전트들에 의해 발행된 통신들에 대한 목적지이거나 종종 통신들에 대한 소스 에이전트일 때, 트리 네트워크가 사용될 수 있다. 따라서, 예를 들어, 도 5의 트리 네트워크는 통신들에 대한 주요 소스 또는 목적지인 에이전트(A10E)에 대해 사용될 수 있다. 예를 들어, 에이전트(A10E)는, 흔히 메모리 트랜잭션들을 위한 목적지일 메모리 제어기일 수 있다.
다른 실시예들에서 사용될 수 있는 많은 다른 가능한 토폴로지들이 존재한다. 예를 들어, 스타 토폴로지는 네트워크의 "중심"에 소스/목적지 에이전트를 갖고, 다른 에이전트들은 중심 에이전트에 직접 또는 일련의 네트워크 스위치들을 통해 커플링될 수 있다. 트리 토폴로지와 마찬가지로, 스타 토폴로지는, 중심 에이전트가 흔히 통신들의 소스 또는 목적지인 경우에 사용될 수 있다. 공유 버스 토폴로지가 사용될 수 있고, 임의의 토폴로지들 중 2개 이상의 토폴로지들의 하이브리드들이 사용될 수 있다.
도 6은 일 실시예에 대한 다수의 네트워크들을 갖는 시스템 온 칩(SOC)(A20)의 일 실시예의 블록도이다. 예를 들어, SOC(A20)는 도 1의 SOC(10)의 인스턴스일 수 있다. 도 6의 실시예에서, SOC(A20)는 복수의 프로세서 클러스터들(P 클러스터들)(A22A-A22B), 복수의 입력/출력(I/O) 클러스터들(A24A-A24D), 복수의 메모리 제어기들(A26A-A26D), 및 복수의 그래픽 프로세싱 유닛(GPU)들(A28A-A28D)을 포함한다. 명칭(SOC)에 의해 암시된 바와 같이, (이러한 실시예에서 메모리들(A30A-A30D)을 제외한) 도 6에 예시된 컴포넌트들은 단일 반도체 다이 또는 "칩"으로 통합될 수 있다. 그러나, 다른 실시예들은 임의의 원하는 방식으로 커플링되거나 패키징된 2개 이상의 다이를 이용할 수 있다. 부가적으로, 특정 수들의 P 클러스터들(A22A-A22B), I/O 클러스터들(A24-A24D), 메모리 제어기들(A26A-A26D), 및 GPU들(A28A-A28D)이 도 6의 예에 도시되어 있지만, 위의 컴포넌트들 중 임의의 컴포넌트들의 수 및 배열은 다양할 수 있고, 도 6에 도시된 수보다 더 많거나 더 적을 수 있다. 메모리들(A30A-A30D)은 SOC(A20), 및 더 구체적으로는 도 6에 도시된 바와 같이, 메모리 제어기들(A26A-A26D)에 각각 커플링된다.
예시된 실시예에서, SOC(A20)는 도 6에 도시된 바와 같이 복수의 네트워크 스위치들(A32, A34, A36)로부터 형성된 3개의 물리적으로 그리고 논리적으로 독립적인 네트워크들, 및 네트워크 스위치들과 다른 컴포넌트들 사이의 화살표들로 예시된 그들 사이의 상호연결부를 포함한다. 다른 실시예들은 더 많거나 더 적은 네트워크들을 포함할 수 있다. 네트워크 스위치들(A32, A34, A36)은, 예를 들어 도 2 내지 도 5에 관해 위에서 설명된 바와 같이 네트워크 스위치들(A14A-A14B)과 유사한 네트워크 스위치들의 인스턴스들일 수 있다. 복수의 네트워크 스위치들(A32, A34, A36)은 도 6에 도시된 바와 같이, 복수의 P 클러스터들(A22A-A22B), 복수의 GPU들(A28A-A28D), 복수의 메모리 제어기들(A26-A25B), 및 복수의 I/O 클러스터들(A24A-A24D)에 커플링된다. P 클러스터들(A22A-A22B), GPU들(A28A-A28B), 메모리 제어기들(A26A-A26B), 및 I/O 클러스터들(A24A-A24D) 모두는 SOC(A20)의 다양한 네트워크들 상에서 통신하는 에이전트들의 예들일 수 있다. 다른 에이전트들이 원하는 대로 포함될 수 있다.
도 6에서, 중앙 프로세싱 유닛(CPU) 네트워크는, 복수의 네트워크 스위치들의 제1 서브세트(예를 들어, 네트워크 스위치들(A32)), 및 도면 부호(A38)와 같은 짧은 대시/긴 대시 라인들로 예시된 그들 사이의 상호연결부로부터 형성된다. CPU 네트워크는 P 클러스터들(A22A-A22B)과 메모리 제어기들(26A-A26D)을 커플링한다. I/O 네트워크는 복수의 네트워크 스위치들의 제2 서브세트(예를 들어, 네트워크 스위치들(A34)), 및 도면 부호(A40)와 같은 실선들로 예시된 그들 사이의 상호연결부로부터 형성된다. I/O 네트워크는 P 클러스터들(A22A-A22B), I/O 클러스터들(A24A-A24D), 및 메모리 제어기들(A26A-A26B)을 커플링한다. 완화된 순서 네트워크는, 복수의 네트워크 스위치들의 제3 서브세트(예를 들어, 네트워크 스위치들(A36)), 및 도면 부호(A42)와 같은 짧은 대시 라인들로 예시된 그들 사이의 상호연결부로부터 형성된다. 완화된 순서 네트워크는 GPU들(2A8A-A28D)과 메모리 제어기들(A26A-A26D)을 커플링한다. 일 실시예에서, 완화된 순서 네트워크는 또한 I/O 클러스터들(A24A-A24D) 중 선택된 I/O 클러스터들을 또한 커플링할 수 있다. 위에서 언급된 바와 같이, CPU 네트워크, I/O 네트워크, 및 완화된 순서 네트워크는 서로 독립적이다(예를 들어, 논리적으로 그리고 물리적으로 독립적임). 일 실시예에서, CPU 네트워크 및 I/O 네트워크 상의 프로토콜은 캐시 코히어런시를 지원한다(예를 들어, 네트워크들은 코히어런트이다). 완화된 순서 네트워크는 캐시 코히어런시를 지원하지 않을 수 있다(예를 들어, 네트워크는 비-코히어런트이다). 완화된 순서 네트워크는 또한 CPU 네트워크 및 I/O 네트워크와 비교하여 감소된 순서화 제약들을 갖는다. 예를 들어, 일 실시예에서, 가상 채널들 및 가상 채널들 내의 서브채널들의 세트가 각각의 네트워크에 대해 정의된다. CPU 및 I/O 네트워크들의 경우, 동일한 소스와 목적지 에이전트 사이 그리고 동일한 가상 채널 및 서브채널에 있는 통신들이 순서화될 수 있다. 완화된 순서 네트워크의 경우, 동일한 소스와 목적지 에이전트 사이의 통신들이 순서화될 수 있다. 일 실시예에서, 동일한 소스와 목적지 에이전트 사이의 동일한 어드레스에 대한(캐시 블록과 같은 주어진 입도의) 통신들만이 순서화될 수 있다. 완화된-순서 네트워크에 대해 덜 엄격한 순서화가 강제되기 때문에, 예를 들어, 더 오래된 트랜잭션들 전에 더 신생의 트랜잭션들이 완료될 준비가 되면, 트랜잭션들이 순서를 벗어나 완료되도록 허용될 수 있으므로, 더 높은 대역폭이 평균적으로 달성될 수 있다.
다양한 실시예들에서, 네트워크 스위치들(A32, A34, A36) 사이의 상호연결부는 임의의 형태 및 구성을 가질 수 있다. 예를 들어, 일 실시예에서, 상호연결부는 포인트-투-포인트, 단방향 링크들(예를 들어, 버스들 또는 직렬 링크들)일 수 있다. 패킷들은 링크들 상에서 송신될 수 있으며, 여기서 패킷 포맷은 패킷이 이동하고 있는 가상 채널 및 서브채널을 표시하는 데이터, 메모리 어드레스, 소스 및 목적지 에이전트 식별자들, (적절한 경우) 데이터 등을 포함할 수 있다. 다수의 패킷들은 주어진 트랜잭션을 형성할 수 있다. 트랜잭션은 소스 에이전트와 타겟 에이전트 사이의 완전한 통신일 수 있다. 예를 들어, 판독 트랜잭션은 프로토콜에 의존하여, 소스 에이전트로부터 타겟 에이전트로의 판독 요청 패킷, 트랜잭션이 코히어런트이면, 캐싱 에이전트 및 타겟 에이전트 및/또는 소스 에이전트 사이의 하나 이상의 코히어런스 메시지 패킷들, 타겟 에이전트로부터 소스 에이전트로의 데이터 응답 패킷, 및 가능하게는 소스 에이전트로부터 타겟 에이전트로의 완료 패킷을 포함할 수 있다. 기록 트랜잭션은, 소스 에이전트로부터 타겟 에이전트로의 기록 요청 패킷, 트랜잭션이 코히어런트이면, 판독 트랜잭션과 마찬가지로 하나 이상의 코히어런스 메시지 패킷들, 및 가능하게는 타겟 에이전트로부터 소스 에이전트로의 완료 패킷을 포함할 수 있다. 일 실시예에서, 기록 데이터는 기록 요청 패킷에 포함될 수 있거나, 또는 소스 에이전트로부터 타겟 에이전트로 별개의 기록 데이터 패킷에서 송신될 수 있다.
일 실시예에서, 도 6의 에이전트들의 배열은 SOC(A20)를 형성하는 반도체 다이 상의 에이전트들의 물리적 배열을 표시할 수 있다. 즉, 도 6은 반도체 다이의 표면 영역으로서 보여질 수 있고, 도 6의 다양한 컴포넌트들의 위치들은 그 영역에 대한 그들의 물리적 위치들을 근사화할 수 있다. 따라서, 예를 들어, I/O 클러스터들(A24A-A24D)은 (도 6에 배향된 바와 같이) SOC(A20)의 상단에 의해 표현되는 반도체 다이 영역에 배열될 수 있다. P 클러스터들(A22A-A22B)은 도 6에 배향된 바와 같이, 아래의 SOC(A20)의 일부에 의해 표현되는 영역에 그리고 I/O 클러스터들(A24A-A24D)의 배열 사이에 배열될 수 있다. 도 6에 배향된 바와 같이, GPU들(A24A-A28D)은 중앙에 위치될 수 있고, SOC(A20)의 하단에 의해 표현되는 영역을 향해 연장될 수 있다. 메모리 제어기들(A26A-A26D)은 도 6에 배향된 바와 같이 SOC(A20)의 우측 및 좌측에 의해 표현되는 영역들 상에 배열될 수 있다.
일 실시예에서, SOC(A20)는, 에이전트가 동일한 다이 상의 다른 에이전트 내에서 통신하는 것과 동일한 방식으로 하나의 다이 상의 에이전트가 상이한 다이 상의 에이전트에 네트워크를 통해 논리적으로 통신할 수 있는 논리적으로 하나의 네트워크로서 인스턴스들 상에서 주어진 네트워크를 커플링하여, SOC(A20)의 하나 이상의 다른 인스턴스들에 직접 커플링되도록 설계될 수 있다. 레이턴시가 상이할 수 있지만, 통신은 동일한 방식으로 수행될 수 있다. 따라서, 도 6에 예시된 바와 같이, 네트워크들은 도 6에 배향된 바와 같이 SOC(A20)의 하단으로 연장된다. 도 6에 도시되지 않은 인터페이스 회로부(예를 들어, 직렬화기/역직렬화기(SERDES) 회로들)가 다이 경계를 가로질러 다른 다이에 통신하는 데 사용될 수 있다. 따라서, 네트워크들은 2개 이상의 반도체 다이들로 확장가능할 수 있다. 예를 들어, 2개 이상의 반도체 다이들은 다수의 반도체 다이들의 존재가 단일 시스템 상에서 실행되는 소프트웨어에 투명한 단일 시스템으로서 구성될 수 있다. 일 실시예에서, 다이로부터 다이로의 통신에서의 지연들이 최소화될 수 있어서, 다이-투-다이 통신은 전형적으로, 멀티-다이 시스템에 대한 소프트웨어 투명성의 하나의 양태로서 다이-내(intra-die) 통신과 비교하여 상당한 부가적인 레이턴시를 발생시키지 않는다. 다른 실시예들에서, 네트워크들은 다이-내에서만 통신하는 폐쇄형 네트워크들일 수 있다.
위에서 언급된 바와 같이, 상이한 네트워크들은 상이한 토폴로지들을 가질 수 있다. 도 6의 실시예에서, 예를 들어, CPU 및 I/O 네트워크들은 링 토폴로지를 구현하고, 완화된 순서는 메시 토폴로지를 구현할 수 있다. 그러나, 다른 토폴로지들이 다른 실시예들에서 사용될 수 있다. 도 7, 도 8, 및 도 9는 상이한 네트워크들을 포함하는 SOC(A30)의 부분들: CPU(도 7), I/O(도 8), 및 완화된 순서(도 9)를 예시한다. 도 7 및 도 8에서 알 수 있는 바와 같이, 네트워크 스위치들(A32, A34)은, 각각, 다른 다이 상의 대응하는 스위치들에 커플링될 때 링을 형성한다. 단일 다이만이 사용되면, 도 7 및 도 8에 배향된 바와 같이, (예를 들어, SOC(A20)의 핀(pin)들 상의 외부 연결을 통해) SOC(A20)의 하단에서 2개의 네트워크 스위치들(A32 또는 A34) 사이에 연결이 이루어질 수 있다. 대안적으로, 하단에 있는 2개의 네트워크 스위치들(A32 또는 A34)은 단일 다이 구성으로 사용될 수 있는 그들 사이에 링크들을 가질 수 있거나, 또는 네트워크는 데이지-체인(daisy-chain) 토폴로지로 동작할 수 있다.
유사하게, 도 9에서, GPU들(A28A-A28D)과 메모리 제어기들(A26A-A26D) 사이의 메시 토폴로지에서의 네트워크 스위치들(A36)의 연결이 도시되어 있다. 이전에 언급된 바와 같이, 일 실시예에서, I/O 클러스터들(A24A-A24D) 중 하나 이상이 완화된 순서 네트워크에 또한 커플링될 수 있다. 예를 들어, 비디오 주변기기들(예를 들어, 디스플레이 제어기, 메모리 스케일러/회전기, 비디오 인코더/디코더 등)을 포함하는 I/O 클러스터들(A24A-A24D)은 비디오 데이터에 대한 완화된 순서 네트워크에 대한 액세스를 가질 수 있다.
도 9에 배향된 바와 같은 SOC(A30)의 하단 부근의 네트워크 스위치들(A36)은 SOC(A30)의 다른 인스턴스로 라우팅될 수 있는 연결부들을 포함할 수 있어서, 메시 네트워크가 CPU 및 I/O 네트워크들에 관해 위에서 논의된 바와 같이 다수의 다이들에 걸쳐 연장되게 허용한다. 단일 다이 구성에서, 칩으로부터 연장하는 경로들이 사용되지 않을 수 있다. 도 10은 각각의 네트워크가 2개의 SOC 다이들(A20A-A20B)을 가로질러 연장되어, 그들이 2개의 다이를 통해 연장되더라도 논리적으로 동일한 네트워크들을 형성하는 2개의 다이 시스템의 블록도이다. 네트워크 스위치들(A32, A34, A36)은 도 10에서 단순화를 위해 제거되었고, 완화된 순서 네트워크는 라인으로 단순화되었지만, 일 실시예에서 메시일 수 있다. I/O 네트워크(A44)는 실선으로 도시되어 있고, CPU 네트워크(A46)는 교번하는 길고 짧은 파선으로 도시되어 있으며, 완화된 순서 네트워크(A48)는 파선으로 도시되어 있다. 네트워크들(A44, A46)의 링 구조는 또한 도 10에서 명백하다. 2개의 다이들이 도 10에 도시되어 있지만, 다른 실시예들은 2개 초과의 다이를 이용할 수 있다. 다양한 실시예들에서, 네트워크들은 함께 데이지 체인화되어, 교시된 다이 쌍 사이의 포인트-투-포인트 링크들 또는 임의의 다른 연결 구조와 완전히 연결될 수 있다.
일 실시예에서, CPU 네트워크로부터의 I/O 네트워크의 물리적 분리는, I/O 트래픽이 I/O 네트워크로 위임(relegate)될 수 있으므로, 시스템이 프로세서 클러스터들(A22A-A22B)에 의한 낮은 레이턴시 메모리 액세스를 제공하는 것을 도울 수 있다. 네트워크들은 메모리에 액세스하기 위해 동일한 메모리 제어기들을 사용하므로, 메모리 제어기들은 I/O 네트워크로부터의 메모리 트래픽에 비해 CPU 네트워크로부터의 메모리 트래픽을 어느 정도 선호하도록 설계될 수 있다. 프로세서 클러스터들(A22A-A22B)은 (예를 들어, 프로그래밍된 입력/출력(PIO) 트랜잭션들을 이용하여) I/O 클러스터들(A24A-A24D) 내의 디바이스 공간에 액세스하기 위해 또한 I/O 네트워크의 일부일 수 있다. 그러나, 프로세서 클러스터들(A22A-A22B)에 의해 개시된 메모리 트랜잭션들은 CPU 네트워크를 통해 송신될 수 있다. 따라서, CPU 클러스터들(A22A-A22B)은 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 적어도 2개에 커플링된 에이전트의 예들일 수 있다. 에이전트는 송신될 트랜잭션을 생성하고, 트랜잭션의 유형(예를 들어, 메모리 또는 PIO)에 기초하여 트랜잭션을 송신할, 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 적어도 2개의 네트워크들 중에서 하나를 선택하도록 구성될 수 있다.
다양한 네트워크들은 상이한 수들의 물리적 채널들 및/또는 가상 채널들을 포함할 수 있다. 예를 들어, I/O 네트워크는 다수의 요청 채널들 및 완료 채널들을 가질 수 있는 반면, CPU 네트워크는 하나의 요청 채널 및 하나의 완료 채널을 가질 수 있다(또는 그 반대의 경우도 가능함). 하나 초과의 요청이 존재할 때 주어진 요청 채널 상에서 송신된 요청들은 임의의 원하는 방식으로(예를 들어, 요청의 유형에 의해, 요청의 우선순위에 의해, 물리적 채널들에 걸쳐 대역폭을 밸런싱(balance)하기 위해 등) 결정될 수 있다. 유사하게, I/O 및 CPU 네트워크들은 스누프(snoop) 요청들을 반송하기 위한 스누프 가상 채널을 포함할 수 있지만, 완화된 순서 네트워크는 그것이 이러한 실시예에서 비-코히어런트이기 때문에 스누프 가상 채널을 포함하지 않을 수 있다.
도 11은 더 상세히 예시된 입력/출력(I/O) 클러스터(A24A)의 일 실시예의 블록도이다. 다른 I/O 클러스터들(A24B-A24D)은 유사할 수 있다. 도 11의 실시예에서, I/O 클러스터(A24A)는 주변기기들(A50, A52), 주변기기 인터페이스 제어기(A54), 로컬 상호연결부(A56), 및 브리지(A58)를 포함한다. 주변기기(A52)는 외부 컴포넌트(A60)에 커플링될 수 있다. 주변기기 인터페이스 제어기(A54)는 주변기기 인터페이스(A62)에 커플링될 수 있다. 브리지(A58)는 네트워크 스위치(A34)에(또는 네트워크 스위치(A34)에 커플링된 네트워크 인터페이스에) 커플링될 수 있다.
주변기기들(A50, A52)은 SOC(A20)에 포함된 (예를 들어, CPU들, GPU들, 및 메모리 제어기들을 넘어서는) 부가적인 하드웨어 기능의 임의의 세트를 포함할 수 있다. 예를 들어, 주변기기들(A50, A52)은 카메라 또는 다른 이미지 센서로부터의 이미지 캡처 데이터를 프로세싱하도록 구성된 이미지 신호 프로세서, 비디오 인코더/디코더들, 스케일러들, 회전기들, 블렌더(blender)들, 디스플레이 제어기 등과 같은 비디오 주변기기들을 포함할 수 있다. 주변기기들은 마이크로폰들, 스피커들, 마이크로폰들 및 스피커들에 대한 인터페이스들, 오디오 프로세서들, 디지털 신호 프로세서들, 믹서들 등과 같은 오디오 주변기기들을 포함할 수 있다. 주변기기들은 매체 액세스 제어기(MAC)들과 같은 네트워킹 주변기기들을 포함할 수 있다. 주변기기들은 비휘발성 메모리 제어기들과 같은 다른 유형들의 메모리 제어기들을 포함할 수 있다. 일부 주변기기들(A52)은 온-칩 컴포넌트 및 오프-칩 컴포넌트(A60)를 포함할 수 있다. 주변기기 인터페이스 제어기(A54)는 SOC(A20)의 외부에 있는 다양한 인터페이스들(A62)에 대한 인터페이스 제어기들을 포함할 수 있으며, 인터페이스들은 USB(Universal Serial Bus), PCIe(PCI Express)를 포함하는 PCI(peripheral component interconnect), 직렬 및 병렬 포트들 등과 같은 인터페이스들을 포함한다.
로컬 상호연결부(A56)는 다양한 주변기기들(A50, A52, A54)이 통신하는 상호연결부일 수 있다. 로컬 상호연결부(A56)는 도 6에 도시된 범시스템적(system-wide) 상호연결부(예를 들어, CPU, I/O, 및 완화된 네트워크들)와 상이할 수 있다. 브리지(A58)는 로컬 상호연결부 상의 통신들을 범시스템적 상호연결부 상의 통신들로 변환하도록 구성될 수 있으며, 그 반대의 경우도 가능하다. 일 실시예에서, 브리지(A58)는 네트워크 스위치들(A34) 중 하나에 커플링될 수 있다. 브리지(A58)는 또한 주변기기들(A50, A52, A54)로부터 발행된 트랜잭션들 간의 순서화를 관리할 수 있다. 예를 들어, 브리지(A58)는 주변기기들(A50, A52, A54) 등을 대신하여 트랜잭션들의 순서화를 보장하기 위해 네트워크들 상에서 지원되는 캐시 코히어런시 프로토콜을 사용할 수 있다. 상이한 주변기기들(A50, A52, A54)은 상이한 순서화 요건들을 가질 수 있고, 브리지(A58)는 상이한 요건들에 적응하도록 구성될 수 있다. 일부 실시예들에서, 브리지(A58)는 다양한 성능-향상 특징부들을 또한 구현할 수 있다. 예를 들어, 브리지(A58)는 주어진 요청에 대한 데이터를 프리페치(prefetch)할 수 있다. 브리지(A58)는 트랜잭션들이 로컬로 완료되게 허용하고 순서화를 강제하기 위해, 주변기기들(A50, A52, A54)로부터의 하나 이상의 트랜잭션들이 지향되는 캐시 블록의 코히어런트 사본을 (예를 들어, 배타적 상태에서) 캡처할 수 있다. 브리지(A58)는 후속 트랜잭션들에 의해 타겟팅된 하나 이상의 캐시 블록들의 배타적인 사본을 추론적으로 캡처할 수 있고, 후속 트랜잭션들이 완료될 수 있을 때까지(예를 들어, 더 이전의 트랜잭션들에 대한 임의의 순서화 제약들을 만족시킨 이후) 배타적인 상태가 성공적으로 유지되면, 후속 트랜잭션들을 완료하기 위해 캐시 블록을 사용할 수 있다. 따라서, 일 실시예에서, 캐시 블록 내의 다수의 요청들이 캐싱된 사본으로부터 서비스될 수 있다. 다양한 세부사항들은 2021년 4월 5일자로 출원된 미국 가특허 출원 제63/170,868호, 2021년 4월 16일자로 출원된 미국 가특허 출원 제63/175,868호, 및 2021년 4월 16일자로 출원된 미국 가특허 출원 제63/175,877호에서 발견될 수 있다. 이들 특허 출원들은 그들 전체들이 본 명세서에 참고로 포함된다. 포함된 자료 중 임의의 자료가 본 명세서에 명시적으로 기재된 자료와 충돌하는 범위에서, 본 명세서에 명시적으로 기재된 자료가 우선한다.
도 12는 프로세서 클러스터(A22A)의 일 실시예의 블록도이다. 다른 실시예들이 유사할 수 있다. 도 12의 실시예에서, 프로세서 클러스터 (A22A)는 마지막 레벨 캐시(LLC)(A72)에 커플링된 하나 이상의 프로세서들(A70)을 포함한다. LLC(A72)는, 적절한 경우, CPU 네트워크 및 I/O 네트워크 상에서 트랜잭션들을 송신하기 위해 네트워크 스위치들(A32, A34)에 인터페이싱하기 위한 인터페이스 회로부를 포함할 수 있다.
프로세서들(A70)은 프로세서들(A70)에 의해 구현된 명령어 세트 아키텍처에서 정의된 명령어들을 실행하도록 구성된 임의의 회로부 및/또는 마이크로코드를 포함할 수 있다. 프로세서들(A70)은 임의의 마이크로아키텍처(microarchitectural) 구현, 성능 및 전력 특성들 등을 가질 수 있다. 예를 들어, 프로세서들은 순차적 실행, 비순차적 실행, 슈퍼스칼라, 슈퍼파이프라인형 등일 수 있다.
LLC(A72), 및 프로세서들(A70) 내의 임의의 캐시들은 세트 연관, 직접 맵핑 또는 완전 연관과 같은 임의의 용량 및 구성을 가질 수 있다. 캐시 블록 크기는 임의의 원하는 크기(예를 들어, 32 바이트, 64 바이트, 128 바이트 등)일 수 있다. 캐시 블록은 LLC(A70) 내의 할당 및 할당해제(deallocation)의 단위일 수 있다. 부가적으로, 캐시 블록은 이러한 실시예에서 코히어런시가 유지되는 단위일 수 있다. 캐시 블록은 또한 일부 경우들에서 캐시 라인으로 지칭될 수 있다. 일 실시예에서, 분산된 디렉토리-기반 코히어런시 방식은 시스템 내의 각각의 메모리 제어기(A26)에서 코히어런시의 포인트로 구현될 수 있으며, 여기서 코히어런시의 포인트는 메모리 제어기에 맵핑되는 메모리 어드레스들에 적용된다. 디렉토리는 임의의 코히어런트 에이전트에 캐싱되는 캐시 블록들의 상태를 추적할 수 있다. 코히어런시 방식은 가능하게는 다수의 반도체 다이들에 걸쳐 많은 메모리 제어기들로 확장가능할 수 있다. 예를 들어, 코히어런시 방식은 다음의 특징들 중 하나 이상을 이용할 수 있다: 코히어런트 및 메모리 에이전트들에서 스누프 필터링 및 레이스 해결(race resolution)을 위한 정밀한 디렉토리; 메모리 에이전트에서 결정된 순서화 포인트(액세스 순서)(직렬화 포인트는 코히어런트 에이전트들 및 메모리 에이전트 사이에서 이동함); 메모리 에이전트에 의해 제공되는 완료-카운트로 추적되는 요청 코히어런트 에이전트에서의 2차 완료(무효화 확인응답) 수집; 메모리 에이전트에 의해 제공되는 디렉토리 상태를 통해 코히어런트 에이전트에서 핸들링되는 충전/스누프 및 스누프/희생자(victim)-ack 레이스 해결; 레이스 해결 및 동일한 어드레스/타겟으로 비행(flight) 스누프들을 제한하는 것을 돕기 위한 별개의 1차/2차 공유 상태들; 부가적인 nack/충돌/재시도 메시지들 또는 액션들 없이 데드록(deadlock)을 피하기 위한 코히어런트 에이전트에서의 충돌 스누프들의 흡수; 직렬화 최소화(충돌 체인을 통해 소유권(ownership)을 전달하기 위한 액세서(accessor)당 하나의 부가적인 메시지 레이턴시); 메시지 최소화(관련 에이전트들 사이의 직접적인 메시지들, 및 충돌들/레이스들을 핸들링하기 위한 부가적인 메시지들 없음(예를 들어, 메모리 에이전트로의 메시지들 없음)); 레이스로 인한 실패 시에 과도한-무효화가 없는 조건부-저장; 최소화된 데이터 전달(더티한(dirty) 경우에만) 및 관련 캐시/디렉토리 상태들을 갖는 전체 캐시-라인을 수정하려는 의도를 갖는 독점 소유권 요청; 캐싱가능 및 비-캐싱가능 흐름들(예를 들어, 3 홉 및 4 홉 프로토콜들) 둘 모두를 핸들링하기 위한 별개의 스누프-백(snoop-back) 및 스누프-포워드(snoop-forward) 메시지 유형들. 부가적인 세부사항들은 2020년 9월 11일자로 출원된 미국 가특허 출원 제63/077,371호에서 발견될 수 있다. 이러한 특허 출원은 그 전체가 본 명세서에 참고로 포함된다. 포함된 자료 중 임의의 자료가 본 명세서에 명시적으로 기재된 자료와 충돌하는 범위에서, 본 명세서에 명시적으로 기재된 자료가 우선한다.
도 13은, 가상 채널들 및 트래픽 유형들, 및 그들이 일 실시예에 대해 사용되는 도 6 내지 도 9에 도시된 네트워크들을 예시하는 테이블들(A80, A82)의 쌍이다. 테이블(A80)에 도시된 바와 같이, 가상 채널들은 벌크 가상 채널, 낮은 레이턴시(LLT) 가상 채널, 실시간(RT 가상 채널) 및 비-DRAM 메시지들에 대한 가상 채널(VCP)을 포함할 수 있다. 벌크 가상 채널은 메모리 액세스들을 위한 디폴트 가상 채널일 수 있다. 벌크 가상 채널은, 예를 들어 LLT 및 RT 가상 채널들보다 낮은 서비스 품질을 수신할 수 있다. LLT 가상 채널은 고성능 동작을 위해 낮은 레이턴시가 필요한 메모리 트랜잭션들에 대해 사용될 수 있다. RT 가상 채널은 정확한 동작(예를 들어, 비디오 스트림들)을 위한 레이턴시 및/또는 대역폭 요건들을 갖는 메모리 트랜잭션들에 대해 사용될 수 있다. VCP 채널은 메모리 트랜잭션들과의 간섭을 방지하기 위해 메모리로 지향되지 않는 트래픽을 분리시키는 데 사용될 수 있다.
일 실시예에서, 벌크 및 LLT 가상 채널들은 모든 3개의 네트워크들(CPU, I/O, 및 완화된 순서) 상에서 지원될 수 있다. RT 가상 채널은 CPU 또는 완화된 순서 네트워크들이 아니라 I/O 네트워크 상에서 지원될 수 있다. 유사하게, VCP 가상 채널은 CPU 또는 완화된 순서 네트워크들이 아니라 I/O 네트워크 상에서 지원될 수 있다. 일 실시예에서, VCP 가상 채널은 (예를 들어, 구성을 위해) 그 네트워크 상에서 네트워크 스위치들을 타겟팅하는 트랜잭션들을 위해서만 CPU 및 완화된 순서 네트워크 상에서 지원될 수 있고, 따라서 정상 동작 동안 사용되지 않을 수 있다. 따라서, 테이블(A80)이 예시하는 바와 같이, 상이한 네트워크들은 상이한 수들의 가상 채널들을 지원할 수 있다.
테이블(A82)은 다양한 트래픽 유형들 및 어느 네트워크들이 그 트래픽 유형을 반송하는지를 예시한다. 트래픽 유형들은 코히어런트 메모리 트래픽, 비-코히어런트 메모리 트래픽, 실시간(RT) 메모리 트래픽, 및 VCP(비-메모리) 트래픽을 포함할 수 있다. CPU 및 I/O 네트워크들은 둘 모두 코히어런트 트래픽을 반송할 수 있다. 일 실시예에서, 프로세서 클러스터들(A22A-A22B)에 의해 소싱되는 코히어런트 메모리 트래픽은 CPU 네트워크 상에서 반송될 수 있는 반면, I/O 네트워크는 I/O 클러스터들(A24A-A24D)에 의해 소싱되는 코히어런트 메모리 트래픽을 반송할 수 있다. 비-코히어런트 메모리 트래픽은 완화된 순서 네트워크 상에서 반송될 수 있고, RT 및 VCP 트래픽은 I/O 네트워크 상에서 반송될 수 있다.
도 14는 네트워크 상의 트랜잭션을 개시하는 방법의 일 실시예를 예시하는 흐름도이다. 일 실시예에서, 에이전트는 송신될 트랜잭션을 생성할 수 있다(블록(A90)). 트랜잭션은 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 하나 상에서 송신될 것이다. 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 제1 네트워크는 제1 토폴로지에 따라 구성되고, 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 제2 네트워크는 제1 토폴로지와 상이한 제2 토폴로지에 따라 구성된다. 트랜잭션의 유형에 기초하여 트랜잭션을 송신할 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 하나가 선택된다(블록(A92)). 예를 들어, 프로세서 클러스터들(A22A-A22B)은 CPU 네트워크 상에서 코히어런트 메모리 트래픽을 그리고 I/O 네트워크 상에서 PIO 트래픽을 송신할 수 있다. 일 실시예에서, 에이전트는, 유형 이외의 트랜잭션의 하나 이상의 속성들에 기초하여 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 선택된 네트워크 상에서 지원되는 복수의 가상 채널들 중 일 가상 채널을 선택할 수 있다(블록(A94)). 예를 들어, CPU는 메모리 트랜잭션들의 서브세트(예를 들어, 캐시 누락들, 임계 수까지의 캐시 누락들의 수인 가장 오래된 메모리 트랜잭션들(그 이후, 벌크 채널이 선택될 수 있음))에 대해 LLT 가상 채널을 선택할 수 있다. GPU는 데이터가 필요한 긴급성(urgency)에 기초하여 LLT와 벌크 가상 채널들 사이에서 선택할 수 있다. 비디오 디바이스들은 필요에 따라 RT 가상 채널을 사용할 수 있다(예를 들어, 디스플레이 제어기는 RT 가상 채널 상에서 프레임 데이터 판독들을 발행할 수 있다). VCP 가상 채널은 메모리 트랜잭션들이 아닌 트랜잭션들에 대해 선택될 수 있다. 에이전트는 선택된 네트워크 및 가상 채널 상에서 트랜잭션 패킷을 송신할 수 있다. 일 실시예에서, 상이한 가상 채널들 내의 트랜잭션 패킷들은 네트워크들을 통해 상이한 경로들을 취할 수 있다. 일 실시예에서, 트랜잭션 패킷들은 트랜잭션 패킷의 유형(예를 들어, 요청 대 응답)에 기초하여 상이한 경로들을 취할 수 있다. 일 실시예에서, 상이한 가상 채널들 및 상이한 유형들의 트랜잭션들 둘 모두에 대해 상이한 경로들이 지원될 수 있다. 다른 실시예들은 트랜잭션 패킷들의 하나 이상의 부가적인 속성들을 이용하여 이들 패킷들에 대한 네트워크를 통한 경로를 결정할 수 있다. 다른 방식으로 보면, 네트워크로부터의 네트워크 스위치들은 가상 채널, 유형, 또는 임의의 다른 속성들에 기초하여 상이한 패킷들을 라우팅할 수 있다. 상이한 경로들을 사용하는 트랜잭션 패킷들이 동일한 소스로부터 동일한 목적지로 이동하고 있더라도, 상이한 경로는 다른 경로 상에서 횡단되지 않은 네트워크 스위치들 사이의 적어도 하나의 세그먼트를 횡단하는 것을 지칭할 수 있다. 상이한 경로들을 사용하는 것은 네트워크들에서의 로드 밸런싱(load balancing) 및/또는 트랜잭션들에 대한 감소된 레이턴시를 제공할 수 있다.
일 실시예에서, 시스템은 복수의 프로세서 클러스터들, 복수의 메모리 제어기들, 복수의 그래픽 프로세싱 유닛들, 복수의 에이전트들, 및 복수의 프로세서 클러스터들, 복수의 그래픽 프로세싱 유닛들, 복수의 메모리 제어기들, 및 복수의 에이전트에 커플링된 복수의 네트워크 스위치들을 포함한다. 주어진 프로세서 클러스터는 하나 이상의 프로세서들을 포함한다. 메모리 제어기들은 메모리 디바이스들에 대한 액세스를 제어하도록 구성된다. 복수의 네트워크 스위치들의 제1 서브세트는 복수의 프로세서 클러스터들과 복수의 메모리 제어기들 사이에 중앙 프로세싱 유닛(CPU) 네트워크를 형성하도록 상호연결된다. 복수의 네트워크 스위치들의 제2 서브세트는 복수의 프로세서 클러스터들, 복수의 에이전트들, 및 복수의 메모리 제어기들 사이에 입력/출력(I/O) 네트워크를 형성하도록 상호연결된다. 복수의 네트워크 스위치들의 제3 서브세트는 복수의 그래픽 프로세싱 유닛들, 복수의 에이전트들 중 선택된 에이전트들, 및 복수의 메모리 제어기들 사이에 완화된 순서 네트워크를 형성하도록 상호연결된다. CPU 네트워크, I/O 네트워크, 및 완화된 순서 네트워크는 서로 독립적이다. CPU 네트워크 및 I/O 네트워크는 코히어런트이다. 완화된 순서 네트워크는 비-코히어런트이고, CPU 네트워크 및 I/O 네트워크와 비교하여 감소된 순서화 제약들을 갖는다. 일 실시예에서, CPU 네트워크, I/O 네트워크, 및 완화된 순서 네트워크 중 적어도 하나는 CPU 네트워크, I/O 네트워크, 및 완화된 순서 네트워크 중 다른 하나 상의 물리적 채널들의 수와 상이한 수의 물리적 채널들을 갖는다. 일 실시예에서, CPU 네트워크는 링 네트워크이다. 일 실시예에서, I/O 네트워크는 링 네트워크이다. 일 실시예에서, 완화된 순서 네트워크는 메시 네트워크이다. 일 실시예에서, 복수의 에이전트들 중 제1 에이전트는 복수의 주변기기 디바이스들을 포함하는 I/O 클러스터를 포함한다. 일 실시예에서, I/O 클러스터는, 복수의 주변기기 디바이스들에 커플링되고 제2 서브세트 내의 제1 네트워크 스위치에 추가로 커플링된 브리지를 더 포함한다. 일 실시예에서, 시스템은 주어진 에이전트로부터의 통신들을 CPU 네트워크, I/O 네트워크, 및 완화된 순서 네트워크 중 주어진 네트워크에 대한 통신들로 변환하도록 구성된 네트워크 인터페이스 회로를 더 포함하며, 여기서, 네트워크 인터페이스 회로는 주어진 네트워크에서 복수의 네트워크 스위치들 중 하나에 커플링된다.
일 실시예에서, 시스템 온 칩(SOC)은 회로부가 형성되는 반도체 다이를 포함한다. 회로부는 복수의 에이전트들, 및 복수의 에이전트들에 커플링된 복수의 네트워크 스위치들을 포함한다. 복수의 네트워크 스위치들은 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들을 형성하도록 상호연결된다. 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 제1 네트워크는 제1 토폴로지에 따라 구성되고, 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 제2 네트워크는 제1 토폴로지와 상이한 제2 토폴로지에 따라 구성된다. 일 실시예에서, 제1 토폴로지는 링 토폴로지이다. 일 실시예에서, 제2 토폴로지는 메시 토폴로지이다. 일 실시예에서, 제1 네트워크 상에서 코히어런시가 강제된다. 일 실시예에서, 제2 네트워크는 완화된 순서 네트워크이다. 일 실시예에서, 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 적어도 하나의 네트워크는 제1 수의 물리적 채널들을 구현하고, 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 적어도 하나의 다른 네트워크는 제2 수의 물리적 채널들을 구현하며, 여기서 제1 수는 제2 수와 상이하다. 일 실시예에서, 제1 네트워크는 하나 이상의 제1 가상 채널들을 포함하고, 제2 네트워크는 하나 이상의 제2 가상 채널들을 포함한다. 하나 이상의 제1 가상 채널들 중 적어도 하나는 하나 이상의 제2 가상 채널들과 상이하다. 일 실시예에서, SOC는 복수의 에이전트들 중 주어진 에이전트로부터의 통신들을 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 주어진 네트워크에 대한 통신들로 변환하도록 구성된 네트워크 인터페이스 회로를 더 포함한다. 네트워크 인터페이스 회로는 주어진 네트워크에서 복수의 네트워크 스위치들 중 하나에 커플링된다. 일 실시예에서, 복수의 에이전트들 중 제1 에이전트는 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 적어도 2개에 커플링된다. 제1 에이전트는 송신될 트랜잭션을 생성하도록 구성된다. 제1 에이전트는 트랜잭션의 유형에 기초하여 트랜잭션을 송신할, 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 적어도 2개의 네트워크들 중에서 하나를 선택하도록 구성된다. 일 실시예에서, 적어도 2개의 네트워크들 중 하나는 I/O 트랜잭션들이 송신되는 I/O 네트워크이다.
일 실시예에서, 방법은, 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들에 커플링된 에이전트에서 트랜잭션을 생성하는 단계 - 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 제1 네트워크는 제1 토폴로지에 따라 구성되고, 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 제2 네트워크는 제1 토폴로지와 상이한 제2 토폴로지에 따라 구성됨 -; 및 트랜잭션의 유형에 기초하여 트랜잭션을 송신할, 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 하나를 선택하는 단계를 포함한다. 일 실시예에서, 방법은, 유형 이외의 트랜잭션의 하나 이상의 속성들에 기초하여 복수의 물리적으로 그리고 논리적으로 독립적인 네트워크들 중 하나 상에서 지원되는 복수의 가상 채널들 중 일 가상 채널을 선택하는 단계를 더 포함한다.
인터럽트들
도 15 내지 도 26은 스케일러블 인터럽트 구조의 다양한 실시예들을 예시한다. 예를 들어, 2개 이상의 집적 회로 다이들을 포함하는 시스템에서, 주어진 집적 회로 다이는 주어진 집적 회로 다이의 프로세서 코어들 사이에 인터럽트들을 분배하기 위한 로컬 인터럽트 분배 회로를 포함할 수 있다. 2개 이상의 집적 회로 다이들 중 적어도 하나는 글로벌 인터럽트 분배 회로를 포함할 수 있고, 로컬 인터럽트 분배 회로들 및 글로벌 인터럽트 분배 회로는 멀티-레벨 인터럽트 분배 방식을 구현한다. 일 실시예에서, 글로벌 인터럽트 분배 회로는 인터럽트 요청을 로컬 인터럽트 분배 회로들에 순서대로 송신하도록 구성되고, 로컬 인터럽트 분배 회로들은 글로벌 인터럽트 분배 회로로부터의 인터럽트 요청에 응답하기 전에 인터럽트 요청을 로컬 인터럽트 목적지들에 순서대로 송신하도록 구성된다.
컴퓨팅 시스템들은 일반적으로, 다양한 하드웨어 기능들을 구현하는 하나 이상의 주변기기들과 함께, 중앙 프로세싱 유닛(CPU)들로서 기능하는 하나 이상의 프로세서들을 포함한다. CPU들은 다양한 주변기기들의 동작을 제어하는 제어 소프트웨어(예컨대, 운영 체제)를 실행한다. CPU들은 또한, 시스템에서 사용자 기능을 제공하는 애플리케이션들을 실행할 수 있다. 추가적으로, CPU들은 주변기기들과 상호작용하고 주변기기를 대신하여 다양한 서비스들을 수행하는 소프트웨어를 실행할 수 있다. 시스템에서 CPU들로서 사용되지 않는 다른 프로세서들(예를 들어, 일부 주변기기들에 통합된 프로세서들)은 또한 주변기기들을 위해 그러한 소프트웨어를 실행할 수 있다.
주변기기들은 프로세서들로 하여금 인터럽트들을 사용하여 자신들 대신에 소프트웨어를 실행하게 할 수 있다. 일반적으로, 주변기기들은, 통상적으로 프로세서들로 진행하는 인터럽트들을 제어하는 인터럽트 제어기에 인터럽트 신호를 어서트(assert)함으로써 인터럽트를 발행한다. 인터럽트는 프로세서로 하여금 자신의 현재 소프트웨어 태스크를 실행하는 것을 중지하게 하여, 태스크가 나중에 재개될 수 있도록 태스크에 대한 상태를 저장한다. 프로세서는 인터럽트와 관련된 상태를 로딩하고 인터럽트 서비스 루틴의 실행을 시작할 수 있다. 인터럽트 서비스 루틴은 주변기기에 대한 드라이버 코드일 수 있거나, 또는 필요에 따라 드라이버 코드에 실행을 전달할 수 있다. 일반적으로, 드라이버 코드는 주변 디바이스를 제어 및/또는 구성하기 위해 프로세서에 의해 실행될 주변 디바이스에 대해 제공되는 코드이다.
인터럽트의 어서션으로부터 인터럽트의 서비스까지의 레이턴시는 시스템의 성능 및 심지어 기능에 중요할 수 있다. 추가적으로, 어느 CPU가 인터럽트를 서비스할지의 효율적인 결정 및 시스템의 나머지의 최소의 섭동(perturbation)으로 인터럽트를 전달하는 것은, 성능 및 시스템에서의 낮은 전력 소비의 유지 둘 모두에 중요할 수 있다. 시스템 내의 프로세서들의 수가 증가함에 따라, 인터럽트 전달을 효율적이고 효과적으로 스케일링하는 것이 훨씬 더 중요하다.
이제 도 15를 참조하면, 복수의 클러스터 인터럽트 제어기들(B24A-B24n)에 커플링된 인터럽트 제어기(B20)를 포함하는 시스템(B10)의 일부의 일 실시예의 블록도가 도시된다. 복수의 클러스터 인터럽트 제어기들(B24A-B24n) 각각은 개개의 복수의 프로세서들(B30)(예를 들어, 프로세서 클러스터)에 커플링된다. 인터럽트 제어기(B20)는 복수의 인터럽트 소스들(B32)에 커플링된다.
적어도 하나의 인터럽트가 인터럽트 제어기(B20)에 의해 수신되었을 때, 인터럽트 제어기(B20)는 (예를 들어, 인터럽트 서비스 루틴에 의한 추가 서비스를 위해 인터럽트를 기록하도록 소프트웨어를 실행시킴으로써 인터럽트를 서비스하기 위해 및/또는 인터럽트 서비스 루틴을 통해 인터럽트에 의해 요청된 프로세싱을 제공하기 위해 프로세서(B30)에) 인터럽트를 전달하려고 시도하도록 구성될 수 있다. 시스템(B10)에서, 인터럽트 제어기(B20)는 클러스터 인터럽트 제어기들(B24A-B24n)을 통해 인터럽트들을 전달하려고 시도할 수 있다. 각각의 클러스터 제어기(B24A-B24n)는 프로세서 클러스터와 연관되고, 클러스터를 형성하는 개개의 복수의 프로세서들 내의 프로세서들(B30)에 인터럽트를 전달하려고 시도할 수 있다.
더 구체적으로, 인터럽트 제어기(B20)는 클러스터 인터럽트 제어기들(B24A-B24n)을 통해 복수의 반복들로 인터럽트를 전달하도록 시도하도록 구성될 수 있다. 인터럽트 제어기(B20)와 각각의 인터럽트 제어기(B24A-B24n) 사이의 인터페이스는 요청/확인응답(Ack)/부정-확인응답(Nack) 구조를 포함할 수 있다. 예를 들어, 예시된 실시예에서, 요청들은 반복: 소프트, 하드 및 강제에 의해 식별될 수 있다. 초기 반복("소프트" 반복)은 소프트 요청을 어서트함으로써 시그널링될 수 있다. 다음 반복("하드" 반복)은 하드 요청을 어서트함으로써 시그널링될 수 있다. 마지막 반복("강제" 반복)은 강제 요청을 어서트함으로써 시그널링될 수 있다. 주어진 클러스터 인터럽트 제어기(B24A-B24n)는 Ack 응답(주어진 클러스터 인터럽트 제어기(B24A-B24n)와 연관된 프로세서 클러스터 내의 프로세서(B30)가 인터럽트를 수락하였고 적어도 하나의 인터럽트를 프로세싱할 것임을 나타냄) 또는 Nack 응답(프로세서 클러스터 내의 프로세서들(B30)이 인터럽트를 거부했음을 나타냄)으로 소프트 및 하드 반복들에 응답할 수 있다. 강제 반복은 Ack/Nack 응답들을 사용하지 않을 수 있지만, 오히려, 아래에서 더 상세히 논의될 바와 같이, 인터럽트들이 서비스될 때까지 인터럽트들을 계속 요청할 수 있다.
클러스터 인터럽트 제어기들(B24A-B24n)은 또한 프로세서들(B30)에 대해 요청/Ack/Nack 구조를 사용하여, 주어진 프로세서(B30)에 인터럽트를 전달하려고 시도할 수 있다. 클러스터 인터럽트 제어기(B24A-B24n)로부터의 요청에 기초하여, 주어진 프로세서(B30)는, 주어진 프로세서(B30)가 미리 결정된 시간 기간 내에 현재 명령어 실행을 인터럽트할 수 있는지 여부를 결정하도록 구성될 수 있다. 주어진 프로세서(B30)가 시간 기간 내에 인터럽트를 단행할 수 있는 경우, 주어진 프로세서(B30)는 Ack 응답을 어서트하도록 구성될 수 있다. 주어진 프로세서(B30)가 인터럽트를 단행할 수 없는 경우, 주어진 프로세서(B30)는 Nack 응답을 어서트하도록 구성될 수 있다. 클러스터 인터럽트 제어기(B24A-B24n)는, 적어도 하나의 프로세서가 클러스터 인터럽트 제어기(B24A-B24n)에 Ack 응답을 어서트하는 경우 인터럽트 제어기(B20)에 Ack 응답을 어서트하도록 구성될 수 있고, 프로세서들(B30)이 주어진 반복에서 Nack 응답을 어서트하는 경우 Nack 응답을 어서트하도록 구성될 수 있다.
요청/Ack/Nack 구조를 사용하는 것은, 일 실시예에서 인터럽트가 요청의 수신기(예를 들어, 인터페이스에 따라, 클러스터 인터럽트 제어기(B24A-B24n) 또는 프로세서(B30))에 의해 수락되고 있는지 여부의 신속한 표시를 제공할 수 있다. 예를 들어, 일 실시예에서, 표시는 타임아웃보다 신속할 수 있다. 추가적으로, 클러스터 인터럽트 제어기들(B24A-B24n) 및 인터럽트 제어기(B20)의 계층화된 구조는 일 실시예에서, 시스템(B10)에서 더 많은 수의 프로세서들(예를 들어, 다수의 프로세서 클러스터들)에 대해 더 스케일링가능할 수 있다.
클러스터 인터럽트 제어기들(B24A-B24n)에 대한 반복은 클러스터 인터럽트 제어기들(B24A-B24n)의 적어도 서브세트를 통해 최대 모든 클러스터 인터럽트 제어기들(B24A-B24n)까지 인터럽트를 전달하려는 시도를 포함할 수 있다. 반복은 임의의 원하는 방식으로 진행될 수 있다. 예를 들어, 일 실시예에서, 인터럽트 제어기(B20)는 클러스터 인터럽트 제어기들(B24A-B24n) 중 하나로부터의 Ack 응답(그리고 일 실시예에서 추가적인 계류중인 인터럽트들의 결여)에 의해 또는 모든 클러스터 인터럽트 제어기들(B24A-B24n)로부터의 Nack 응답에 의해 종료되는 개개의 클러스터 인터럽트 제어기들(B24A-B24n)에 인터럽트 요청들을 연속으로 어서트하도록 구성될 수 있다. 즉, 인터럽트 제어기는 클러스터 인터럽트 제어기들(B24A-B24n) 중 하나를 선택하고, (예를 들어, 어느 반복이 수행되고 있는지에 따라 소프트 또는 하드 요청을 어서트함으로써) 선택된 클러스터 인터럽트 제어기(B24A-B24n)에 인터럽트 요청을 어서트할 수 있다. 선택된 클러스터 인터럽트 제어기(B24A-B24n)는 Ack 응답으로 응답할 수 있으며, 이는 반복을 종료할 수 있다. 한편, 선택된 클러스터 인터럽트 제어기(B24A-B24n)가 Nack 응답을 어서트하는 경우, 인터럽트 제어기는 다른 클러스터 인터럽트 제어기(B24A-B24n)를 선택하도록 구성될 수 있고, 선택된 클러스터 인터럽트 제어기(B24A-B24n)에 대한 소프트 또는 하드 요청을 어서트할 수 있다. 선택 및 어서션은 Ack 응답이 수신되거나 또는 클러스터 인터럽트 제어기들(B24A-B24n) 각각이 선택되고 Nack 응답을 어서트할 때까지 계속될 수 있다. 다른 실시예들은 다른 방식들로 클러스터 인터럽트 제어기들(B24A-B24n)을 통해 반복을 수행할 수 있다. 예를 들어, 인터럽트 제어기(B20)는, 2개 이상의 클러스터 인터럽트 제어기들(B24A-B24n)의 서브세트에 인터럽트 요청을 동시에 어서트하도록 구성될 수 있어서, 서브세트 내의 각각의 클러스터 인터럽트 제어기(B24A-B24n)가 인터럽트 요청에 대한 Nack 응답을 제공하는 경우 다른 서브세트들로 계속된다. 이러한 구현은, 서브세트 내의 하나 초과의 클러스터 인터럽트 제어기(B24A-B24n)가 Ack 응답을 제공하는 경우, 스퓨리어스 인터럽트들을 야기할 수 있고, 따라서 인터럽트에 응답하여 실행되는 코드는 스퓨리어스 인터럽트의 발생을 처리하도록 설계될 수 있다.
초기 반복은 위에서 언급된 바와 같이 소프트 반복일 수 있다. 소프트 반복에서, 주어진 클러스터 인터럽트 제어기(B24A-B24n)는 주어진 클러스터 인터럽트 제어기(B24A-B24n)와 연관된 복수의 프로세서들(B30)의 서브세트에 인터럽트를 전달하려고 시도할 수 있다. 서브세트는 파워 온된 프로세서들(B30)일 수 있으며, 여기서 주어진 클러스터 인터럽트 제어기(B24A-B24n)는 파워 오프된(또는 슬리핑) 프로세서들(B30)에 인터럽트를 전달하려고 시도하지 않을 수 있다. 즉, 파워 오프된 프로세서들은, 클러스터 인터럽트 제어기(B24A-B24n)가 인터럽트를 전달하려고 시도하는 서브세트에 포함되지 않는다. 따라서, 파워 오프된 프로세서들(B30)은 소프트 반복에서 파워 오프된 상태로 유지될 수 있다.
소프트 반복 동안 각각의 클러스터 인터럽트 제어기(B24A-B24n)로부터의 Nack 응답에 기초하여, 인터럽트 제어기(B20)는 하드 반복을 수행할 수 있다. 하드 반복에서, 주어진 프로세서 클러스터 내의 파워 오프된 프로세서들(B30)은 개개의 클러스터 인터럽트 제어기(B24A-B24n)에 의해 파워 온될 수 있고, 개개의 인터럽트 제어기(B24A-B24n)는 프로세서 클러스터 내의 각각의 프로세서(B30)에 인터럽트를 전달하려고 시도할 수 있다. 더 구체적으로, 일 실시예에서, 하드 반복을 수행하기 위해 프로세서(B30)가 파워 온된 경우, 그 프로세서(B30)는 인터럽트들에 대해 신속하게 이용가능할 수 있고, 빈번하게 Ack 응답들을 초래할 수 있다.
하나 이상의 인터럽트들이 여전히 계류중인 상태로 하드 반복이 종료되거나, 또는 소프트 및 하드 반복들을 완료하기 전에 타임아웃이 발생하는 경우, 인터럽트 제어기는 강제 신호를 어서트함으로써 강제 반복을 개시할 수 있다. 일 실시예에서, 강제 반복은 클러스터 인터럽트 제어기들(B24A-B24n)과 병렬로 수행될 수 있고, Nack 응답들은 허용되지 않을 수 있다. 일 실시예에서, 강제 반복은 어떠한 인터럽트들도 계류중인 상태로 유지되지 않을 때까지 계속 진행중일 수 있다.
주어진 클러스터 인터럽트 제어기(B24A-B24n)는 임의의 원하는 방식으로 인터럽트들을 전달하려고 시도할 수 있다. 예를 들어, 주어진 클러스터 인터럽트 제어기(B24A-B24n)는 프로세서 클러스터 내의 개개의 프로세서들(B30)에 인터럽트 요청들을 연속으로 어서트할 수 있으며, 이는 개개의 프로세서들(B30) 중 하나로부터의 Ack 응답에 의해 또는 주어진 클러스터 인터럽트 제어기(B24A-B24n)가 인터럽트를 전달하려고 시도할 개개의 프로세서들(B30) 각각으로부터의 Nack 응답에 의해 종료된다. 즉, 주어진 클러스터 인터럽트 제어기(B24A-B4n)는 개개의 프로세서들(B30) 중 하나를 선택하고, (예를 들어, 선택된 프로세서(B30)에 대한 요청을 어서트함으로써) 선택된 프로세서(B30)에 인터럽트 요청을 어서트할 수 있다. 선택된 프로세서(B30)는 Ack 응답으로 응답할 수 있으며, 이는 시도를 종료할 수 있다. 한편, 선택된 프로세서(B30)가 Nack 응답을 어서트하는 경우, 주어진 클러스터 인터럽트 제어기(B24A-B24n)는 다른 프로세서(B30)를 선택하도록 구성될 수 있고, 선택된 프로세서(B30)에 인터럽트 요청을 어서트할 수 있다. 선택 및 어서션은 Ack 응답이 수신되거나 또는 프로세서들(B30) 각각이 선택되어 Nack 응답으로 어서트될 때까지 계속될 수 있다(소프트 반복에서 파워 오프된 프로세서들을 배제함). 다른 실시예들은 위에서 언급된 스퓨리어스 인터럽트들에 대한 가능성을 갖고서 동시에 다수의 프로세서들(B30)에 또는 병렬로 프로세서들(B30)에 인터럽트 요청을 어서트할 수 있다. 주어진 클러스터 인터럽트 제어기(B24A-B24n)는 프로세서들(B30) 중 하나로부터 Ack 응답을 수신하는 것에 기초하여 Ack 응답으로 인터럽트 제어기(B20)에 응답할 수 있거나, 또는 프로세서들(B30) 각각이 Nack 응답으로 응답하는 경우, Nack 응답으로 인터럽트 제어기(B20)에 응답할 수 있다.
일 실시예에서, 인터럽트 제어기(B20)가 클러스터 인터럽트 제어기들(B24A-B24n)에 인터럽트 요청들을 어서트하는 순서는 프로그래밍가능할 수 있다. 보다 구체적으로, 일 실시예에서, 순서는 인터럽트의 소스에 기초하여 변할 수 있다(예를 들어, 하나의 인터럽트 소스(B32)로부터의 인터럽트들은 하나의 순서를 초래할 수 있고, 다른 인터럽트 소스(B32)로부터의 인터럽트들은 상이한 순서를 초래할 수 있음). 예를 들어, 일 실시예에서, 하나의 클러스터 내의 복수의 프로세서들(B30)은 다른 클러스터 내의 복수의 프로세서들(B30)과 상이할 수 있다. 하나의 프로세서 클러스터는 성능에 대해 최적화되지만 더 높은 전력일 수 있는 프로세서들을 가질 수 있는 반면, 다른 프로세서 클러스터는 전력 효율에 대해 최적화된 프로세서들을 가질 수 있다. 비교적 더 적은 프로세싱을 요구하는 소스들로부터의 인터럽트들은 전력 효율적인 프로세서들을 갖는 클러스터들에 유리할 수 있는 반면, 상당한 프로세싱을 필요로 하는 소스들로부터의 인터럽트들은 더 높은 성능 프로세서들을 갖는 클러스터들에 유리할 수 있다.
인터럽트 소스들(B32)은 프로세서(B30)로 하여금 인터럽트 서비스 루틴을 실행하게 하기 위해 인터럽트를 어서트하도록 구성된 임의의 하드웨어 회로부일 수 있다. 예를 들어, 일 실시예에서, 다양한 주변 컴포넌트들(주변기기들)은 인터럽트 소스들일 수 있다. 다양한 주변기기들의 예들이 도 16과 관련하여 아래에서 설명된다. 인터럽트는, 프로세서(B30)가 인터럽트를 수신할 때 프로세서(B30)에 의해 실행되는 코드와 비동기식이다. 일반적으로, 프로세서(B30)는, 현재 코드의 실행을 중지하고, 인터럽트를 서비스한 후에 실행의 재개를 허용하도록 프로세서 콘텍스트를 저장하고, 인터럽트 코드의 실행을 시작하기 위해 미리 결정된 어드레스로 분기함으로써 인터럽트를 취하도록 구성될 수 있다. 미리 결정된 어드레스의 코드는 인터럽트 제어기로부터 상태를 판독하여, 어느 인터럽트 소스(B32)가 인터럽트를 어서트했는지 및 인터럽트에 기초하여 실행될 대응하는 인터럽트 서비스 루틴을 결정할 수 있다. 코드는 실행을 위해 인터럽트 서비스 루틴(이는 운영 체제에 의해 스케줄링될 수 있음)을 큐잉할 수 있고, 인터럽트 서비스 루틴에 의해 예상되는 데이터를 제공할 수 있다. 이어서, 코드는 이전에 실행중인 코드로 실행을 복귀할 수 있다(예를 들어, 프로세서 콘텍스트는 리로딩될 수 있고, 실행은 실행이 중단된 명령에서 재개될 수 있다).
인터럽트들은 임의의 원하는 방식으로 인터럽트 소스들(B32)로부터 인터럽트 제어기(B20)로 송신될 수 있다. 예를 들어, 인터럽트 소스들과 인터럽트 제어기(B20) 사이에 전용 인터럽트 와이어들이 제공될 수 있다. 주어진 인터럽트 소스(B32)는 인터럽트 제어기(B20)에 인터럽트를 송신하기 위해 자신의 전용 와이어 상에서 신호를 어서트할 수 있다. 대안적으로, 시스템(B10)에서의 다른 통신들을 위해 사용되는 상호연결부를 통해 메시지가 송신되는 메시지-시그널링된 인터럽트들이 사용될 수 있다. 메시지는, 예를 들어, 특정된 어드레스에 대한 기록의 형태일 수 있다. 기록 데이터는 인터럽트를 식별하는 메시지일 수 있다. 일부 인터럽트 소스들(B32)로부터의 전용 와이어들과 다른 인터럽트 소스들(B32)로부터의 메시지-시그널링된 인터럽트들의 조합이 사용될 수 있다.
인터럽트 제어기(B20)는 인터럽트들을 수신하고, 이들을 계류중인 인터럽트들로서 인터럽트 제어기(B20)에 기록할 수 있다. 다양한 인터럽트 소스들(B32)로부터의 인터럽트들은 운영 체제 또는 다른 제어 코드에 의해 배열된 다양한 프로그래밍가능 우선순위들에 따라 인터럽트 제어기(B20)에 의해 우선순위화될 수 있다.
이제 도 16을 참조하면, 시스템 온 칩(SOC)(B10)으로서 구현된 시스템(B10)의 블록도의 일 실시예가 메모리(B12)에 커플링된 것으로 도시된다. 일 실시예에서, SOC(B10)는 도 1에 도시된 SOC(10)의 인스턴스일 수 있다. 명칭에서 암시되는 바와 같이, SOC(B10)의 컴포넌트들은 집적 회로 "칩"으로서 단일의 반도체 기판 상에 집적될 수 있다. 일부 실시예들에서, 컴포넌트들은 시스템 내의 2개 이상의 별개의 칩들 상에 구현될 수 있다. 그러나, SOC(B10)는 본 명세서에서 일 예로서 사용될 것이다. 예시된 실시예에서, SOC(B10)의 컴포넌트들은 복수의 프로세서 클러스터들(B14A-B14n), 인터럽트 제어기(B20), 하나 이상의 주변 컴포넌트들(B18)(더 간략하게, "주변기기들"), 메모리 제어기(B22), 및 통신 패브릭(B27)을 포함한다. 컴포넌트들(BB14A-14n, B18, B20, B22)은 모두 통신 패브릭(B27)에 커플링될 수 있다. 메모리 제어기(B22)는 사용 중에 메모리(B12)에 커플링될 수 있다. 일부 실시예들에서, 대응하는 메모리에 커플링된 하나 초과의 메모리 제어기가 있을 수 있다. 메모리 어드레스 공간은 임의의 원하는 방식으로 메모리 제어기들에 걸쳐 맵핑될 수 있다. 예시된 실시예에서, 프로세서 클러스터들(B14A-B14n)은 도 16에 도시된 바와 같이 개개의 복수의 프로세서들(P)(B30) 및 개개의 클러스터 인터럽트 제어기(IC)들(B24A-B24n)을 포함할 수 있다. 프로세서들(B30)은 SOC(B10)의 중앙 프로세싱 유닛들(CPU(들))을 형성할 수 있다. 일 실시예에서, 하나 이상의 프로세서 클러스터들(B14A-B14n)은 CPU들로서 사용되지 않을 수 있다.
일 실시예에서, 주변기기들(B18)은 인터럽트 소스들(BB32)의 예들인 주변기기들을 포함할 수 있다. 따라서, 하나 이상의 주변기기들(B18)은 인터럽트들을 인터럽트 제어기(B20)에 송신하기 위해 인터럽트 제어기(B20)에 대한 전용 와이어들을 가질 수 있다. 다른 주변기기들(B18)은 통신 패브릭(B27)을 통해 송신되는 메시지-시그널링된 인터럽트들을 사용할 수 있다. 일부 실시예들에서, 하나 이상의 오프-SOC 디바이스들(도 16에 도시되지 않음)이 또한 인터럽트 소스들일 수 있다. 인터럽트 제어기(B20)로부터 오프-칩으로의 점선은 오프-SOC 인터럽트 소스들에 대한 잠재성을 예시한다.
도 15에 도시된 클러스터 IC들(B24A-B24n) 사이의 하드/소프트/강제 Ack/Nack 인터페이스들은 클러스터 IC들(B24A-B24n)과 인터럽트 제어기(B20) 사이의 화살표들을 통해 도 16에 예시된다. 유사하게, 도 1의 프로세서들(B30)과 클러스터 IC들(B24A-B24n) 사이의 Req Ack/Nack 인터페이스들은 개개의 클러스터들(B14A-B14n) 내의 클러스터 IC들(B24A-B24n)과 프로세서들(B30) 사이의 화살표들에 의해 예시된다.
전술된 바와 같이, 프로세서 클러스터들(B14A-B14n)은 SOC(B10)의 CPU로서 기능할 수 있는 하나 이상의 프로세서들(B30)을 포함할 수 있다. 시스템의 CPU는 시스템의 메인 제어 소프트웨어, 예컨대 운영 체제를 실행하는 프로세서(들)를 포함한다. 일반적으로, 사용 동안 CPU에 의해 실행되는 소프트웨어는 시스템의 다른 컴포넌트들을 제어하여 시스템의 원하는 기능을 실현할 수 있다. 프로세서들은 또한 다른 소프트웨어, 예를 들어, 애플리케이션 프로그램들을 실행할 수 있다. 애플리케이션 프로그램들은 사용자 기능을 제공할 수 있고, 저-레벨 디바이스 제어, 스케줄링, 메모리 관리 등을 위해 운영 시스템에 의존할 수 있다. 따라서, 프로세서들은 또한 애플리케이션 프로세서들로 지칭될 수 있다.
일반적으로, 프로세서는 프로세서에 의해 구현된 명령어 세트 아키텍처에 정의된 명령어들을 실행하도록 구성된 임의의 회로부 및/또는 마이크로코드를 포함할 수 있다. 프로세서들은 시스템-온-칩(SOC(B10)) 또는 다른 레벨들의 통합부로서 다른 컴포넌트들과 함께 집적 회로 상에 구현된 프로세서 코어들을 망라할 수 있다. 프로세서들은 별개의 마이크로프로세서들, 멀티칩 모듈 구현부들 내에 집적화된 프로세서 코어들 및/또는 마이크로프로세서들, 다수의 집적 회로들로서 구현된 프로세서들 등을 추가로 망라할 수 있다.
메모리 제어기(B22)는 일반적으로, SOC(B10)의 다른 컴포넌트들로부터 메모리 동작들을 수신하고, 메모리(B12)에 액세스하여 메모리 동작들을 완료하기 위한 회로부를 포함할 수 있다. 메모리 제어기(B22)는 임의의 유형의 메모리(B12)에 액세스하도록 구성될 수 있다. 예를 들어, 메모리(B12)는 SRAM(static random access memory), DRAM(dynamic RAM), 예컨대 더블 데이터 레이트(DDR, DDR2, DDR3, DDR4 등) DRAM을 포함하는 SDRAM(synchronous DRAM)일 수 있다. 저전력/모바일 버전들의 DDR DRAM(예컨대, LPDDR, mDDR 등)이 지원될 수 있다. 메모리 제어기(B22)는, 동작들을 순서화하기 위한(그리고 잠재적으로 재정렬하기 위한) 그리고 동작들을 메모리(B12)에 제시하기 위한, 메모리 동작들에 대한 큐(queue)들을 포함할 수 있다. 메모리 제어기(B22)는 메모리로의 기입을 대기하는 기입 데이터 및 메모리 동작의 소스로의 복귀를 대기하는 판독 데이터를 저장하기 위한 데이터 버퍼들을 더 포함할 수 있다. 일부 실시예들에서, 메모리 제어기(B22)는 최근에 액세스된 메모리 데이터를 저장하는 메모리 캐시를 포함할 수 있다. SOC 구현예들에서, 예를 들어, 메모리 캐시는, 곧 다시 액세스될 것으로 예상되는 경우에 메모리(B12)로부터의 데이터의 재-액세스를 피함으로써, SOC에서의 전력 소모를 감소시킬 수 있다. 일부 경우들에서, 메모리 캐시는 또한, 소정의 컴포넌트들만을 보조하는 전용 캐시(private cache)들 그 예로서 프로세서들 내의 L2 캐시 또는 캐시들과 상반되는, 시스템 캐시로서 지칭될 수 있다. 추가적으로, 일부 실시예들에서, 시스템 캐시는 메모리 제어기(B22) 내에 위치될 필요가 없다.
주변기기들(B18)은 SOC(B10)에 포함된 부가적인 하드웨어 기능의 임의의 세트일 수 있다. 예를 들어, 주변기기들(18)은 비디오 주변기기들, 예를 들어, 카메라 또는 다른 이미지 센서로부터의 이미지 캡처 데이터를 프로세싱하도록 구성된 이미지 신호 프로세서, GPU들, 비디오 인코더/디코더들, 스케일러(scaler)들, 로테이터(rotator)들, 블렌더(blender)들, 디스플레이 제어기 등을 포함할 수 있다. 주변기기들은 오디오 주변기기들, 예를 들어, 마이크로폰들, 스피커들, 마이크로폰들 및 스피커들에 대한 인터페이스들, 오디오 프로세서들, 디지털 신호 프로세서들, 믹서들 등을 포함할 수 있다. 주변기기들은, 인터페이스들, 예를 들어, 범용 직렬 버스(USB), PCI 익스프레스(PCIe)를 포함한 주변기기 컴포넌트 상호연결부(PCI), 직렬 및 병렬 포트들 등을 포함한 SOC(B10) 외부의 다양한 인터페이스들에 대한 인터페이스 제어기들을 포함할 수 있다. 외부 디바이스에 대한 상호연결부는 SOC(B10) 외부로 연장되는 도 15의 파선 화살표로 예시된다. 주변기기들은 네트워킹 주변기기들, 예컨대 MAC(media access controller)들을 포함할 수 있다. 하드웨어의 임의의 세트가 포함될 수 있다.
통신 패브릭(B27)은 SOC(B10)의 컴포넌트들 사이에서 통신하기 위한 임의의 통신 상호연결부 및 프로토콜일 수 있다. 통신 패브릭(B27)은 공유 버스 구성들, 크로스 바(cross bar) 구성들, 및 브리지들을 이용한 계층적 버스들을 포함하는 버스-기반일 수 있다. 통신 패브릭(B27)은, 또한, 패킷 기반일 수 있고, 브리지들을 갖는 계층구조, 크로스 바, 포인트-투-포인트(point-to-point), 또는 다른 상호연결부들일 수 있다.
SOC(B10)의 컴포넌트들의 개수(및 각각의 프로세서 클러스터(B14A-B14n) 내의 프로세서들(B30)과 같은, 도 16에 도시된 컴포넌트들에 대한 서브컴포넌트들의 개수)는 실시예마다 다를 수 있다는 것에 유의한다. 추가적으로, 하나의 프로세서 클러스터(B14A-B14n) 내의 프로세서들(B30)의 개수는 다른 프로세서 클러스터(B14A-B14n) 내의 프로세서들(B30)의 개수와 상이할 수 있다. 도 16에 도시된 수보다 더 많거나 더 적은 각각의 컴포넌트/서브컴포넌트가 존재할 수 있다.
도 17은 일 실시예에서 인터럽트 제어기(B20)에 의해 구현될 수 있는 상태 기계의 일 실시예를 예시하는 블록도이다. 예시된 실시예에서, 상태들은 유휴 상태(B40), 소프트 상태(BB42), 하드 상태(B44), 강제 상태(B46), 및 대기 드레인 상태(B48)를 포함한다.
유휴 상태(B40)에서, 어떠한 인터럽트들도 계류중이 아닐 수 있다. 일반적으로, 상태 기계는 도 17에 도시된 바와 같이 다른 상태들 중 임의의 상태로부터 계류중인 인터럽트들이 없을 때마다 유휴 상태(B40)로 복귀할 수 있다. 적어도 하나의 인터럽트가 수신되었을 때, 인터럽트 제어기(B20)는 소프트 상태(B42)로 전환할 수 있다. 인터럽트 제어기(B20)는 또한, 상태 기계가 강제 상태(B46)로 전환되게 할 수 있는 타임아웃 간격을 카운팅하기 시작하기 위해 타임아웃 카운터를 초기화할 수 있다. 타임아웃 카운터는 0으로 초기화될 수 있고, 증분되어 타임아웃을 검출하기 위해 타임아웃 값과 비교될 수 있다. 대안적으로, 타임아웃 카운터는 타임아웃 값으로 초기화될 수 있고, 0에 도달할 때까지 감소될 수 있다. 증분/감소는 인터럽트 제어기(B20)에 대한 클록의 각각의 클록 사이클마다 수행될 수 있거나, 상이한 클록(예를 들어, 압전 발진기 등으로부터의 고정 주파수 클록)에 따라 증분/감소될 수 있다.
소프트 상태(B42)에서, 인터럽트 제어기(B20)는 인터럽트를 전달하려고 시도하는 소프트 반복을 개시하도록 구성될 수 있다. 클러스터 인터럽트 제어기들(B24A-B24n) 중 하나가 소프트 반복 동안 Ack 응답을 송신하고 계류중인 적어도 하나의 인터럽트가 존재하는 경우, 인터럽트 제어기(B20)는 대기 드레인 상태(B48)로 전환할 수 있다. 대기 드레인 상태(B48)는, 주어진 프로세서가 인터럽트를 취할 수 있지만, 실제로 인터럽트 제어기로부터 다수의 인터럽트들을 캡처하여, 그들의 개개의 인터럽트 서비스 루틴들을 위해 그들을 큐잉 업(queuing up)할 수 있기 때문에 제공될 수 있다. 다양한 실시예들에서, 프로세서는 인터럽트 제어기(B20)로부터 모든 인터럽트들이 판독될 때까지 인터럽트들을 계속 드레인할 수 있거나, 또는 특정 최대 수의 인터럽트들까지 판독하고 프로세싱으로 복귀할 수 있거나, 또는 타이머가 만료될 때까지 인터럽트들을 판독할 수 있다. 전술된 타이머가 타임 아웃되고 여전히 계류중인 인터럽트들이 존재하는 경우, 인터럽트 제어기(B20)는 강제 상태(B46)로 전환하고 인터럽트들을 전달하기 위한 강제 반복을 개시하도록 구성될 수 있다. 프로세서가 인터럽트들을 드레인하는 것을 중단하고 적어도 하나의 인터럽트가 계류중인 경우 또는 새로운 인터럽트들이 계류중인 경우, 인터럽트 제어기(B20)는 소프트 상태(B42)로 복귀하여 소프트 반복을 계속하도록 구성될 수 있다.
각각의 클러스터 인터럽트 제어기(B24A-B24n)로부터의 Nack 응답들로 소프트 반복이 완료되면(그리고 적어도 하나의 인터럽트가 계류중인 채로 유지되면), 인터럽트 제어기(B20)는 하드 상태(B44)로 전환하도록 구성될 수 있고, 하드 반복을 개시할 수 있다. 클러스터 인터럽트 제어기(B24A-B24n)가 하드 반복 동안 Ack 응답을 제공하고 적어도 하나의 계류중인 인터럽트가 존재하는 경우, 인터럽트 제어기(B20)는 위의 논의와 유사하게 대기 드레인 상태(B48)로 전환할 수 있다. 각각의 클러스터 인터럽트 제어기(B24A-B24n)로부터의 Nack 응답들로 하드 반복이 완료되고 적어도 하나의 계류중인 인터럽트가 존재하는 경우, 인터럽트 제어기(B20)는 강제 상태(B46)로 전환하도록 구성될 수 있고, 강제 반복을 개시할 수 있다. 인터럽트 제어기(B20)는 계류중인 인터럽트들이 더 이상 존재하지 않을 때까지 강제 상태(B46)로 유지될 수 있다.
도 18은 소프트 또는 하드 반복을 수행할 때의 인터럽트 제어기(B20)의 일 실시예의 동작을 예시하는 흐름도이다(예를 들어, 도 17의 상태들(B42 또는 B44)에 있을 때). 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 인터럽트 제어기(B20) 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 인터럽트 제어기(B20)는 도 18에 예시된 동작을 구현하도록 구성될 수 있다.
인터럽트 제어기는 클러스터 인터럽트 제어기(B24A-B24n)를 선택하도록 구성될 수 있다(블록(B50)). 복수의 인터럽트 제어기들(B24A-B24n)로부터 클러스터 인터럽트 제어기(B24A-B24n)를 선택하기 위한 임의의 메커니즘이 사용될 수 있다. 예를 들어, 인터럽트 제어기들(B24A-B24n)의 클러스터의 프로그래밍가능한 순서는 인터럽트 제어기들(B24A-B24n)의 어느 클러스터가 선택되는지를 나타낼 수 있다. 일 실시예에서, 순서는 주어진 인터럽트의 인터럽트 소스에 기초할 수 있다(예를 들어, 다수의 순서들이 이용가능할 수 있고, 특정 순서는 인터럽트 소스에 기초하여 선택될 수 있음). 이러한 구현은, 상이한 유형의 프로세서 클러스터들로 이동하기 전에 원하는 유형의 프로세서 클러스터들에 인터럽트를 전달하려고 초기에 시도함으로써, 상이한 인터럽트 소스들이 주어진 유형(예를 들어, 성능-최적화 또는 효율-최적화)의 프로세서들에 유리하도록 허용할 수 있다. 다른 실시예에서, 가장 최근의 클러스터 인터럽트 제어기(B24A-B24n)(예를 들어, 인터럽트에 대한 Ack 응답을 가장 덜 최근에 생성된 클러스터 인터럽트 제어기(B24A-B24n))를 선택하여 상이한 프로세서 클러스터들에 걸쳐 인터럽트들을 확산시키기 위해 가장 덜 최근에 전달된 알고리즘이 사용될 수 있다. 다른 실시예에서, 클러스터 인터럽트 제어기(예를 들어, 인터럽트에 대한 Ack 응답을 가장 최근에 생성한 클러스터 인터럽트 제어기(B24A-B24n))를 선택하여 인터럽트 코드 또는 상태가 프로세서 클러스터에 여전히 캐싱되는 가능성을 이용하기 위해 가장 최근에 전달된 알고리즘이 사용될 수 있다. 임의의 메커니즘 또는 메커니즘들의 조합이 사용될 수 있다.
인터럽트 제어기(B20)는 선택된 클러스터 인터럽트 제어기(B24A-B24n)에 인터럽트 요청(현재 반복에 따라 하드 또는 소프트)을 송신하도록 구성될 수 있다(블록(B52)). 예를 들어, 인터럽트 제어기(B20)는 선택된 클러스터 인터럽트 제어기(B24A-B24n)에 하드 또는 소프트 인터럽트 요청 신호를 어서트할 수 있다. 선택된 클러스터 인터럽트 제어기(B24A-B24n)가 인터럽트 요청에 대한 Ack 응답을 제공하는 경우(판정 블록(B54), "예" 레그), 인터럽트 제어기(B20)는, 선택된 클러스터 인터럽트 제어기(B24A-B24n)와 연관된 프로세서 클러스터(B14A-B14n) 내의 프로세서(B30)가 하나 이상의 계류중인 인터럽트들을 서비스하도록 허용하기 위해 대기 드레인 상태(B48)로 전환하도록 구성될 수 있다(블록(B56)). 선택된 클러스터 인터럽트 제어기가 Nack 응답을 제공하고(판정 블록(B58), "예" 레그), 현재 반복에서 선택되지 않은 적어도 하나의 클러스터 인터럽트 제어기(B24A-B24n)가 존재하는 경우(판정 블록(B60), "예" 레그), 인터럽트 제어기(B20)는 구현된 선택 메커니즘에 따라 다음 클러스터 인터럽트 제어기(B24A-B24n)를 선택하고(블록(B62)), 선택된 클러스터 인터럽트 제어기(B24A-B24n)에 인터럽트 요청을 어서트하기 위해 블록(B52)으로 복귀하도록 구성될 수 있다. 따라서, 인터럽트 제어기(B20)는, 이 실시예에서 복수의 클러스터 인터럽트 제어기들(B24A-B24n)를 통한 반복 동안 복수의 클러스터 인터럽트 제어기들(B24A-B24n)에 인터럽트 제어기를 전달하도록 연속으로 시도하도록 구성될 수 있다. 선택된 클러스터 인터럽트 제어기(B24A-B24n)가 Nack 응답을 제공하고(판정 블록(B58), "예" 레그), 선택될 클러스터 인터럽트 제어기들(B24A-B24n)이 더 이상 남아 있지 않은 경우(예를 들어, 모든 클러스터 인터럽트 제어기들(B24A-B24n)이 선택된 경우), 클러스터 인터럽트 제어기(B20)는 상태 기계에서 다음 상태로 (예를 들어, 현재 반복이 소프트 반복인 경우 하드 상태(B44)로 또는 현재 반복이 하드 반복인 경우 강제 상태(B46)로) 전환하도록 구성될 수 있다(블록(B64)). 인터럽트 요청에 대한 응답이 아직 수신되지 않은 경우(판정 블록들(B54 및 B58), "아니오" 레그), 인터럽트 제어기(B20)는 응답을 계속 대기하도록 구성될 수 있다.
전술된 바와 같이, 인터럽트 전달 프로세스가 시작될 때 초기화될 수 있는 타임아웃 메커니즘이 존재할 수 있다. 일 실시예에서, 임의의 상태 동안 타임아웃이 발생하는 경우, 인터럽트 제어기(B20)는 강제 상태(B46)로 이동하도록 구성될 수 있다. 대안적으로, 타이머 만료는 대기 드레인 상태(B48)에서만 고려될 수 있다.
도 19는 인터럽트 제어기(B20)로부터의 인터럽트 요청에 기초한 클러스터 인터럽트 제어기(B24A-B24n)의 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 클러스터 인터럽트 제어기(B24A-B24n) 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 클러스터 인터럽트 제어기(B24A-B24n)는 도 19에 예시된 동작을 구현하도록 구성될 수 있다.
인터럽트 요청이 하드 또는 강제 요청인 경우(판정 블록(B70), "예" 레그), 클러스터 인터럽트 제어기(B24A-B24n)는 임의의 파워 다운된(예를 들어, 슬리핑) 프로세서들(B30)을 파워 업하도록 구성될 수 있다(블록(B72)). 인터럽트 요청이 강제 인터럽트 요청인 경우(판정 블록(B74), "예" 레그), 클러스터 인터럽트 제어기(B24A-B24n)는 병렬로(B30) 모든 프로세서들을 인터럽트하도록 구성될 수 있다(블록(B76)). Ack/Nack은 강제 경우에 적용되지 않을 수 있으므로, 클러스터 인터럽트 제어기(B24A-B24n)는 적어도 하나의 프로세서가 인터럽트를 취할 때까지 인터럽트 요청들을 계속해서 어서트할 수 있다. 대안적으로, 클러스터 인터럽트 제어기(B24A-B24n)는, 자신이 인터럽트를 취할 것임을 나타내는 Ack 응답을 프로세서로부터 수신하도록 구성될 수 있고, 강제 인터럽트를 종료하고 Ack 응답을 인터럽트 제어기(B20)에 송신할 수 있다.
인터럽트 요청이 하드 요청(판정 블록(B74), "아니오" 레그)이거나 소프트 요청(판정 블록(B70), "아니오" 레그)인 경우, 클러스터 인터럽트 제어기는 파워 온된 프로세서(B30)를 선택하도록 구성될 수 있다(판정 블록(B78)). 인터럽트 제어기(B20)에 의해 클러스터 인터럽트 제어기들(B24A-B24n)을 선택하기 위해 전술된 메커니즘들과 유사한 임의의 선택 메커니즘(예를 들어, 프로그래밍가능한 순서, 가장 덜 최근에 인터럽트된 것, 가장 최근에 인터럽트된 것 등)이 사용될 수 있다. 일 실시예에서, 순서는 클러스터 내의 프로세서들에 할당된 프로세서 ID들에 기초할 수 있다. 클러스터 인터럽트 제어기(B24A-B24n)는 선택된 프로세서(B30)에 인터럽트 요청을 어서트하여, 프로세서(B30)에 요청을 송신하도록 구성될 수 있다(블록(B80)). 선택된 프로세서(B30)가 Ack 응답을 제공하는 경우(판정 블록(B82), "예" 레그), 클러스터 인터럽트 제어기(B24A-B24n)는 Ack 응답을 인터럽트 제어기(B20)에 제공하고(블록(B84)), 프로세서 클러스터 내에서 전달하려는 시도를 종료하도록 구성될 수 있다. 선택된 프로세서(30)가 Nack 응답을 제공하고(판정 블록(B86), "예" 레그), 아직 선택되지 않은 적어도 하나의 파워 온된 프로세서(B30)가 존재하는 경우(판정 블록(B88), "예" 레그), 클러스터 인터럽트 제어기(B24A-B24n)는 (예를 들어, 전술된 선택 메커니즘에 따라) 다음으로 파워 온된 프로세서를 선택하고(블록(B90)), 선택된 프로세서(B30)에 인터럽트 요청을 어서트하도록 구성될 수 있다(블록(B80)). 따라서, 클러스터 인터럽트 제어기(B24A-B24n)는 프로세서 클러스터 내의 프로세서들(B30)에 인터럽트를 전달하도록 연속으로 시도할 수 있다. 선택할 파워 온된 프로세서들이 더 이상 없는 경우(판정 블록(B88), "아니오" 레그), 클러스터 인터럽트 제어기(B24A-B24n)는 인터럽트 제어기(B20)에 Nack 응답을 제공하도록 구성될 수 있다(블록(B92)). 선택된 프로세서(B30)가 아직 응답을 제공하지 않은 경우(판정 블록들(B82 및 B86), "아니오" 레그), 클러스터 인터럽트 제어기(B24A-B24n)는 응답을 대기하도록 구성될 수 있다.
일 실시예에서, 하드 반복에서, 프로세서(B30)가 파워 오프 상태로부터 파워 온된 경우, 프로세서(B30)는 운영 체제 또는 다른 제어 소프트웨어에 의해 태스크를 아직 할당받지 않았으므로 인터럽트에 대해 신속하게 이용가능할 수 있다. 운영 체제는 프로세서를 초기화한 후 가능한 한 빨리, 파워 오프된 상태로부터 파워 온된 프로세서(B30)의 인터럽트들을 언마스킹(unmask)하도록 구성될 수 있다. 클러스터 인터럽트 제어기(B24A-B24n)는 프로세서가 인터럽트에 대한 Ack 응답을 제공할 가능성을 개선하기 위해 선택 순서에서 최근에 파워 온된 프로세서를 먼저 선택할 수 있다.
도 20은 프로세서(B30)의 일 실시예의 더 상세한 블록도이다. 예시된 실시예에서, 프로세서(B30)는 페치 및 디코딩 유닛(B100)(명령 캐시 또는 ICache(B102)를 포함함), MDR(map-dispatch-renam) 유닛(B106)(프로세서 인터럽트 확인응답(Int Ack) 제어 회로(B126) 및 재정렬 버퍼(B108)를 포함함), 하나 이상의 예비 스테이션들(B110), 하나 이상의 실행 유닛들(B112), 레지스터 파일(B114), 데이터 캐시(DCache)(B104), 로드/저장 유닛(LSU)(B118), 로드/저장 유닛에 대한 예비 스테이션(RS)(B116) 및 코어 인터페이스 유닛(CIF)(B122)을 포함한다. 페치 및 디코딩 유닛(B100)은, 예비 스테이션들(B110), 예비 스테이션(B116), 및 LSU(B118)에 커플링되는 MDR 유닛(B106)에 커플링된다. 예비 스테이션들(B110)은 실행 유닛들(B28)에 커플링된다. 레지스터 파일(B114)은 실행 유닛들(B112) 및 LSU(B118)에 커플링된다. LSU(B118)는 또한, CIF(B122) 및 레지스터 파일(B114)에 커플링되는 DCache(B104)에 커플링된다. LSU(B118)는 저장 큐(B120)(STQ(B120)) 및 로드 큐(LDQ(B124))를 포함한다. CIF(B122)는 프로세서 Int Ack) 제어 회로(B126)에 커플링되어 프로세서(B30)에 어서트된 인터럽트 요청 (Int Req)를 전달하고, 프로세서 Int Ack 제어 회로(B126)로부터의 Ack/Nack 응답을 인터럽트 요청자(예를 들어, 클러스터 인터럽트 제어기(B24A-B24n))에 전달한다.
프로세서 Int Ack 제어 회로(B126)는, 프로세서(B30)가 프로세서(B30)에 송신된 인터럽트 요청을 수락할 수 있는지 여부를 결정하도록 구성될 수 있고, 결정에 기초하여 Ack 및 Nack 표시들을 CIF(B122)에 제공할 수 있다. 프로세서(B30)가 Ack 응답을 제공하는 경우, 프로세서(B30)는 특정된 시간 기간 내에 인터럽트를 취하는 것(그리고 인터럽트 및 인터럽트 소스를 식별하기 위한 인터럽트 코드의 실행을 시작하는 것을 시작함)을 담당한다. 즉, 프로세서 Int Ack 제어 회로(B126)는, 재정렬 버퍼(B108)가 인터럽트가능한 포인트에 명령어 동작들을 리타이어할 것이고 LSU(B118)가 특정 시간 기간 내에 인터럽트가능한 포인트에 대한 로드/저장 동작들을 완료할 것이라는 결정에 기초하여 수신된 인터럽트 요청에 대한 확인응답(Ack) 응답을 생성하도록 구성될 수 있다. 재정렬 버퍼(B108) 및 LSU(B118) 중 적어도 하나가 특정된 시간 기간 내에 인터럽트가능 포인트에 도달하지 않을 것(또는 도달하지 않을 수 있는 것)으로 결정되면, 프로세서 Int Ack 제어 회로(B126)는 인터럽트 요청에 대한 비-확인응답(Nack) 응답을 생성하도록 구성될 수 있다. 예를 들어, 특정된 시간 기간은, 일 실시예에서 대략 5 마이크로초일 수 있지만, 다른 실시예들에서, 더 길거나 또는 더 짧을 수 있다.
일 실시예에서, 프로세서 Int Ack 제어 회로(B126)는 Ack/Nack의 초기 결정을 하기 위해 재정렬 버퍼(108)의 콘텐츠들을 검사하도록 구성될 수 있다. 즉, MDR 유닛(B106) 내의 상태에 기초하여 Nack 응답이 생성될 것이라고 프로세서 Int Ack 제어 회로(B126)가 결정할 수 있는 하나 이상의 경우들이 존재할 수 있다. 예를 들어, 재정렬 버퍼(B108)는 아직 실행되지 않고 특정 임계치보다 큰 잠재적 실행 레이턴시를 갖는 하나 이상의 명령어 동작들을 포함하고, 프로세서 Int Ack 제어 회로(B126)는 Nack 응답이 생성될 것이라고 결정하도록 구성될 수 있다. 일부 명령어 동작들은 데이터 의존적, 메모리 레이턴시 의존적 등일 수 있는 가변 실행 레이턴시를 가질 수 있기 때문에, 실행 레이턴시는 "잠재적"으로 지칭된다. 따라서, 잠재적 실행 레이턴시는, 항상 발생하지는 않더라도, 발생할 수 있는 가장 긴 실행 레이턴시일 수 있다. 다른 경우들에서, 잠재적 실행 레이턴시는 특정 확률 등을 초과하여 발생하는 가장 긴 실행 레이턴시일 수 있다. 이러한 명령어들의 예들은 특정 암호화 가속 명령어들, 특정 유형들의 부동 소수점 또는 벡터 명령어들 등을 포함할 수 있다. 명령어들이 인터럽트가능하지 않은 경우, 명령어들은 잠재적으로 긴 레이턴시로 고려될 수 있다. 즉, 인터럽트가능하지 않은 명령어들은 일단 실행을 시작하면 실행을 완료하도록 요구된다.
Ack/Nack 응답을 생성할 때 고려될 수 있는 다른 조건은 프로세서(30)에서의 인터럽트 마스킹의 상태이다. 인터럽트들이 마스킹될 때, 프로세서(B30)는 인터럽트들을 취하는 것이 방지된다. Nack 응답은, (일 실시예에서 MDR 유닛(B106)에서 유지되는 상태일 수 있는) 인터럽트들이 프로세서에서 마스킹되는 것을 프로세서 Int Ack 제어 회로(B126)가 검출하는 경우 생성될 수 있다. 더 구체적으로, 일 실시예에서, 인터럽트 마스크는 가장 최근에 리타이어된 명령어들에 대응하는 아키텍처화된 현재 상태를 가질 수 있고, 인터럽트 마스크에 대한 하나 이상의 추론적 업데이트들이 또한 큐잉될 수 있다. 일 실시예에서, Nack 응답은, 아키텍처화된 현재 상태가 인터럽트들이 마스킹되는 것인 경우 생성될 수 있다. 다른 실시예에서, Nack 응답은, 아키텍처화된 현재 상태가 인터럽트들이 마스킹된 것인 경우, 또는 추론적 상태들 중 임의의 것이 인터럽트들이 마스킹된 것으로 나타내는 경우 생성될 수 있다.
프로세서 Int Ack 제어 회로(B126)에서 다른 경우들이 또한 Nack 응답 경우들로 고려될 수 있다. 예를 들어, 예외 처리(예를 들어, 브랜치 오예측들 등과 같은 어떠한 마이크로아키텍처 재지향들도 없음)와 관련된 계류중인 재지향이 재정렬 버퍼에 존재하는 경우, Nack 응답이 생성될 수 있다. 특정 디버그 모드들(예를 들어, 단일 단계 모드) 및 높은 우선순위 내부 인터럽트들은 Nack 응답 경우들로 고려될 수 있다.
프로세서 Int Ack 제어 회로(B126)가 재정렬 버퍼(B108) 및 MDR 유닛(B106)의 프로세서 상태를 조사하는 것에 기초하여 Nack 응답을 검출하지 않는 경우, 프로세서 Int Ack 제어 회로(B126)는, (예를 들어, CIF(B122)에 또는 프로세서(B30) 외부에) 발행되었고 재정렬 버퍼 및 로드/저장 유닛에 아직 커플링이 완료되지 않은 긴 레이턴시 로드/저장 op들이 존재하는지 여부를 결정하기 위해 LSU(B118)와 인터페이싱할 수 있다. 예를 들어, 디바이스 공간으로의 로드들 및 저장들(예를 들어, 메모리 대신에 주변기기들에 맵핑되는 로드들 및 저장들)은 잠재적으로 긴 레이턴시일 수 있다. LSU(B118)가 긴 레이턴시 로드/저장 op들(예를 들어, 잠재적으로, MDR 유닛(B106) 내부에서 사용되는 전술된 임계치와 상이하거나 동일할 수 있는 임계치보다 더 큼)이 있다고 응답하는 경우, 프로세서 Int Ack 제어 회로(B126)는 응답이 Nack인 것으로 결정할 수 있다. 다른 잠재적으로 긴 레이턴시 op들은, 예를 들어 동기화 배리어 동작들일 수 있다.
일 실시예에서, 결정이 상기 경우들에 대한 Nack 응답이 아닌 경우, LSU(B118)는 재정렬 버퍼(B108)에 대한 포인터를 제공하여, LSU(B118)가 완료를 단행한(예를 들어, LDQ(B124) 또는 STQ(B120)로부터 개시되었거나, LSU(B118)에서 달리 비-추론적임) 가장 오래된 로드/저장 op를 식별할 수 있다. 포인터는 "진정한 로드/저장(LS) 비-추론적(NS) 포인터"로 지칭될 수 있다. MDR(B106)/재정렬 버퍼(B108)는 LS NS 포인터에서 인터럽트를 시도할 수 있고, 특정 시간 기간 내에서 가능하지 않은 경우, 프로세서 Int Ack 제어 회로(B126)는 Nack 응답이 생성될 것이라고 결정할 수 있다. 그렇지 않으면, Ack 응답이 생성될 수 있다.
페치 및 디코딩 유닛(B100)은 프로세서(B30)에 의한 실행을 위해 명령어들을 페치하고 명령어들을 실행을 위해 op들로 디코딩하도록 구성될 수 있다. 더 구체적으로, 페치 및 디코딩 유닛(B100)은 (CIF(B122)를 통해) 메모리로부터 이전에 페치된 명령어들을 ICache(B102)에서 캐싱하도록 구성될 수 있고, 프로세서(B30)를 위한 명령어들의 추론적 경로를 페치하도록 구성될 수 있다. 페치 및 디코딩 유닛(B100)은 페치 경로를 예측하기 위해 다양한 예측 구조들을 구현할 수 있다. 예를 들어, 그 다음의(next) 페치 예측기는 이전에 실행된 명령어들에 기반하여, 페치 어드레스들을 예측하기 위해 사용될 수 있다. 다양한 유형들의 브랜치(branch) 예측기들은 그 다음의 페치 예측을 검증하기 위해 사용될 수 있거나, 또는 그 다음의 페치 예측기가 사용되지 않는 경우 그 다음의 페치 어드레스들을 예측하기 위해 사용될 수 있다. 페치 및 디코딩 유닛(100)은 명령어들을 명령어 동작들로 디코딩하도록 구성될 수 있다. 몇몇 실시예들에서, 주어진 명령어는 명령어의 복잡성에 의존하여, 하나 이상의 명령어 연산들로 디코딩될 수 있다. 특히, 복잡한 명령어들은 몇몇 실시예들에서 마이크로코딩될 수 있다. 그러한 실시예들에서, 명령어에 대한 마이크로코드 루틴은 명령어 연산들로 코딩될 수 있다. 다른 실시예들에서, 프로세서(B30)에 의해 구현된 명령어 세트 아키텍처 내의 명령어 각각은 단일 명령어 동작으로 디코딩될 수 있고, 이로써, 명령어 동작은 명령어와 기본적으로 같은 뜻일 수 있다(그러나, 그는 디코더에 의한 형태로 수정될 수 있음). 용어 "명령어 동작"은 보다 간략하게 본 명세서에서 "op"로 지칭될 수 있다.
MDR 유닛(B106)은 비순차적 및/또는 추론적 실행을 허용하기 위해 op들을 추론적 자원들(예를 들어, 물리적 레지스터들)에 맵핑하도록 구성될 수 있고, op들을 예비 스테이션들(B110, B116)에 디스패치할 수 있다. op들은 대응하는 명령어들에서 사용된 아키텍처 레지스터들로부터 레지스터 파일(B114)의 물리적 레지스터들에 맵핑될 수 있다. 즉, 레지스터 파일(B114)은 프로세서(B30)에 의해 구현된 명령어 세트 아키텍처에 의해 특정된 아키텍처화된 레지스터들보다 수가 더 많을 수 있는 물리적 레지스터들의 세트를 구현할 수 있다. MDR 유닛(B106)은 아키텍처화된 레지스터들과 물리적 레지스터들의 맵핑을 관리할 수 있다. 실시예에서 서로 다른 피연산자 유형들(예컨대 정수, 미디어, 부동 소수점, 기타 등등)에 대한 별개의 물리적 레지스터들이 있을 수 있다. 다른 실시예들에서, 물리적 레지스터들은 피연산자 유형들을 통해 공유될 수 있다. MDR 유닛(B106)은 또한 추론적 실행을 추적하고 op들을 리타이어하거나, 오역된 op들을 플러싱(flushing)하는 것을 담당할 수 있다. 재정렬 버퍼(B108)는 op들의 프로그램 순서를 추적하고 리타이어/플러시를 관리하는 데 사용될 수 있다. 즉, 재정렬 버퍼(B108)는 프로세서에 의해 페치되고 프로세서에 의해 리타이어되지 않은 명령어들에 대응하는 복수의 명령어 동작들을 추적하도록 구성될 수 있다.
op들은, op들에 대한 소스 피연산자들이 준비될 때 실행을 위해 스케줄링될 수 있다. 예시된 실시예에서, 예를 들어, 예비 스테이션들(B116, B110)에서 실행 유닛들(B28) 및 LSU(B118) 각각에 대해 탈중앙집중형 스케줄링이 사용된다. 다른 실시예들은, 원하는 경우 중앙집중형 스케줄러를 구현할 수 있다.
LSU(B118)는 로드/저장 메모리 op들을 실행하도록 구성될 수 있다. 일반적으로, (메모리 액세스는 DCache(B104)와 같은 캐시에서 완료될 수 있지만) 메모리 동작(메모리 op)은 메모리에 대한 액세스를 특정하는 명령어 동작일 수 있다. 로드 메모리 동작은 메모리 위치로부터 레지스터로 데이터의 전송을 특정할 수 있는 반면, 저장 메모리 동작은 레지스터로부터 메모리 위치로 데이터의 전송을 특정할 수 있다. 로드 메모리 동작들은 로드 메모리 op들, 로드 op들 또는 로드들로 지칭될 수 있고; 저장 메모리 동작들은 저장 메모리 op들, 저장 op들 또는 저장들로 지칭될 수 있다. 일 실시예에서, 저장 op들은 저장 어드레스 op 및 저장 데이터 op로서 실행될 수 있다. 저장 어드레스 op는 저장의 어드레스를 생성하고, 초기 히트/미스 결정에 대해 캐시를 프로빙하고, 어드레스 및 캐시 정보를 갖는 저장 큐를 업데이트하도록 정의될 수 있다. 따라서, 저장 어드레스 op는 소스 피연산자들로서 어드레스 피연산자들을 가질 수 있다. 저장 데이터 op는 저장 큐에 저장 데이터를 전달하도록 정의될 수 있다. 따라서, 저장 데이터 op는 소스 피연산자들로서 어드레스 피연산자들을 갖지 않을 수 있지만, 소스 피연산자로서 저장 데이터 피연산자를 가질 수 있다. 많은 경우들에서, 저장소의 어드레스 피연산자들은 저장 데이터 피연산자 이전에 이용가능할 수 있고, 따라서 어드레스는 저장 데이터보다 더 일찍 결정되고 이용가능하게 될 수 있다. 일부 실시예들에서, 예를 들어, 저장 데이터 피연산자가 저장 어드레스 피연산자들 중 하나 이상 전에 제공되는 경우, 저장 데이터 op가 대응하는 저장 어드레스 op 이전에 실행되는 것이 가능할 수 있다. 일부 실시예들에서, 저장 op들은 저장 어드레스 및 저장 데이터 op들로서 실행될 수 있지만, 다른 실시예들은 저장 어드레스/저장 데이터 분할을 구현하지 않을 수 있다. 본 개시내용의 나머지는 일 예로서 저장 어드레스 op들(및 저장 데이터 op들)을 종종 사용할 것이지만, 저장 어드레스/저장 데이터 최적화를 사용하지 않는 구현들이 또한 고려된다. 저장 어드레스 op의 실행을 통해 생성된 어드레스는 저장 op에 대응하는 어드레스로 지칭될 수 있다.
로드/저장 op들은 예비 스테이션(B116)에서 수신될 수 있으며, 이는, 동작들의 소스 피연산자들을 모니터링하여, 이들이 이용가능한 때를 결정하고, 이어서, 로드 또는 저장 파이프라인들에 동작들을 각각 발행하도록 구성될 수 있다. 동작들이 예비 스테이션(B116)에서 수신될 때 일부 소스 피연산자들이 이용가능할 수 있으며, 이는 대응하는 동작에 대해 MDR 유닛(B106)으로부터 예비 스테이션(B116)에 의해 수신된 데이터에 표시될 수 있다. 다른 피연산자들은 다른 실행 유닛들(B112)에 의한 동작들의 실행을 통해 또는 심지어 이전 로드 op들의 실행을 통해 이용가능해질 수 있다. 피연산자들은 예비 스테이션(B116)에 의해 수집될 수 있거나, 또는 도 20에 도시된 바와 같이 예비 스테이션(B116)으로부터 발행 시에 레지스터 파일(B114)로부터 판독될 수 있다.
일 실시예에서, 예비 스테이션(B116)은, 피연산자들이 이용가능해짐에 따라 ("프로그램 순서"로 지칭되는, 프로세서(B30)에 의해 실행되고 있는 코드 시퀀스 내의 그들의 원래 순서로부터) 순서 없이 로드/저장 op들을 발행하도록 구성될 수 있다. 예비 스테이션(B116)에서 더 신생의 동작들에 의해 우회되는 더 오래된 동작들을 위한 공간이 LDQ(B124) 또는 STQ(B120)에 존재함을 보장하기 위해, MDR 유닛(B106)은 LDQ(B124) 또는 STQ(B120) 엔트리들을 로드/저장 유닛(B118)에 송신되는 동작들에 미리 할당하는 회로부를 포함할 수 있다. MDR 유닛(B106)에서 프로세싱되는 로드에 대해 이용가능한 LDQ 엔트리가 존재하지 않으면, MDR 유닛(B106)은 하나 이상의 LDQ 엔트리들이 이용가능하게 될 때까지 프로그램 순서로 로드 op 및 후속 op들의 디스패치를 지연시킬 수 있다. 유사하게, 저장에 대해 이용가능한 STQ 엔트리가 존재하지 않으면, MDR 유닛(B106)은 하나 이상의 STQ 엔트리들이 이용가능하게 될 때까지 op 디스패치를 지연시킬 수 있다. 다른 실시예들에서, 예비 스테이션(B116)은 프로그램 순서로 동작들을 발행할 수 있고, LRQ(B46)/STQ(B120) 할당은 예비 스테이션(B116)으로부터 발행 시에 발생할 수 있다.
LDQ(B124)는 초기 실행으로부터 LSU(B118)에 의한 리타이어까지 로드들을 추적할 수 있다. LDQ(B124)는 메모리 순서화 규칙들이 (순서 없이 실행된 로드들 사이 뿐만 아니라 로드들과 저장들 사이에서) 위반되지 않음을 보장하는 것을 담당할 수 있다. 메모리 정렬 위반이 검출되면, LDQ(B124)는 대응하는 로드에 대한 재지향을 시그널링할 수 있다. 재지향은 프로세서(B30)로 하여금, 로드 및 후속 op들을 프로그램 순서로 플러싱하게 하고, 대응하는 명령어들을 리페치하게 할 수 있다. 로드 및 후속적인 op들에 대한 추론적 상태는 폐기될 수 있고, op들은 페치 및 디코딩 유닛(B100)에 의해 리페치되고 다시 실행되도록 리프로세싱될 수 있다.
로드/저장 어드레스 op가 예비 스테이션(B116)에 의해 발행될 때, LSU(B118)는 로드/저장에 의해 액세스되는 어드레스를 생성하도록 구성될 수 있고, 로드/저장 어드레스 op로부터 생성된 유효 또는 가상 어드레스로부터 실제로 어드레스 메모리에 사용되는 물리적 어드레스로 어드레스를 변환하도록 구성될 수 있다. LSU(B118)는 DCache(B104)에 대한 액세스를 생성하도록 구성될 수 있다. DCache(B104)에서 히트되는 로드 동작들의 경우, 데이터는, 어드레스가 STQ(B120)에서 선행 동작(즉, 프로그램 순서에서 더 오래된 저장)에 히트하지 않는 한 또는 로드가 리플레이되지 않는 한, DCache(B104)로부터 로드 동작의 목적지 피연산자(예를 들어, 레지스터 파일(B114)의 레지스터)로 추론적으로 포워딩될 수 있다. 데이터는 또한, 추론적으로 스케줄링되었고 실행 유닛들(B28)에 있는 종속적인 op들에 포워딩될 수 있다. 이러한 경우들에서, 실행 유닛들(B28)은 레지스터 파일(B114)로부터 출력된 데이터 대신에 포워딩된 데이터를 우회할 수 있다. 저장 데이터가 STQ 히트에 대한 포워딩에 이용가능한 경우, STQ(B120)에 의해 출력된 데이터는 캐시 데이터 대신 포워딩될 수 있다. 데이터가 포워딩될 수 없는 캐시 미스들 및 STQ 히트들은 리플레이에 대한 이유들일 수 있고, 로드 데이터는 그러한 경우들에서 포워딩되지 않을 수 있다. DCache(B104)로부터의 캐시 히트/미스 상태는 추후의 프로세싱을 위해 STQ(B120) 또는 LDQ(B124)에서 로깅될 수 있다.
LSU(B118)는 다수의 부하 파이프라인들을 구현할 수 있다. 예를 들어, 일 실시예에서, 3개의 로드 파이프라인들("파이프들")이 구현될 수 있지만, 다른 실시예들에서는 더 많거나 더 적은 파이프라인들이 구현될 수 있다. 각각의 파이프라인은 상이한 로드들을 독립적으로 그리고 다른 로드들과 병렬로 실행할 수 있다. 즉, RS(B116)는 동일한 클록 사이클에서 로드 파이프들의 수까지 임의의 수의 로드들을 발행할 수 있다. LSU(B118)는 또한 하나 이상의 저장 파이프들을 구현할 수 있고, 특히 다수의 저장 파이프들을 구현할 수 있다. 그러나, 저장 파이프들의 수는 로드 파이프들의 수와 동일할 필요는 없다. 일 실시예에서, 예를 들어, 2개의 저장 파이프들이 사용될 수 있다. 예비 스테이션(B116)은 저장 파이프들에 대해 독립적으로 그리고 병렬로 저장 어드레스 op들 및 저장 데이터 op들을 발행할 수 있다. 저장 파이프들은, 실행되었지만 단행되지 않은 저장 동작들을 유지하도록 구성될 수 있는 STQ(B120)에 커플링될 수 있다.
CIF(B122)는 프로세서(B30)를 대신하여 프로세서(B30)를 포함하는 시스템의 나머지와 통신하는 것을 담당할 수 있다. 예를 들어, CIF(B122)는 DCache(B104) 미스들 및 ICache(B102) 미스들에 대한 데이터를 요청하도록 구성될 수 있다. 데이터가 리턴될 때, CIF(B122)는 캐시 충전을 대응하는 캐시에 시그널링할 수 있다. DCache 충전들의 경우, CIF(B122)는 또한 LSU(B118)에 통지할 수 있다. LDQ(B124)는, 충전 데이터가 DCache(B104)에 제공될 때(충전 포워드 동작으로 지칭됨) 리플레이된 로드들이 충전 데이터를 포워딩할 수 있도록, 캐시 충전을 대기하고 있는 리플레이된 로드들을 스케줄링하려고 시도할 수 있다. 리플레이된 로드가 충전 동안 성공적으로 리플레이되지 않으면, 리플레이된 로드는 후속적으로 스케줄링되고 캐시 히트로서 DCache(B104)를 통해 리플레이될 수 있다. CIF(B122)는 또한, DCache(B104)에 의해 축출된 수정된 캐시 라인들을 기입하고, 캐시가능하지 않은 저장소들에 대한 저장 데이터를 병합하는 것 등을 할 수 있다.
실행 유닛들(B112)은 다양한 실시예들에서 임의의 유형들의 실행 유닛들을 포함할 수 있다. 예를 들어, 실행 유닛들(B112)은 정수, 부동 소수점, 및/또는 벡터 실행 유닛들을 포함할 수 있다. 정수 실행 유닛들은 정수 op들을 실행하도록 구성될 수 있다. 일반적으로, 정수 op는 정수 피연산자들에 관한 정의 동작(예컨대 산술의, 논리의, 시프트/회전의, 기타 등등)을 수행하는 op이다. 정수들은 각각의 값이 수학적 정수에 대응하는 수치들일 수 있다. 정수 실행 유닛들은 브랜치 op들을 프로세싱하기 위해 브랜치 프로세싱 하드웨어를 포함할 수 있거나, 또는 별개의 브랜치 실행 유닛들이 있을 수 있다.
부동 소수점 실행 유닛들은 부동 소수점 op들을 실행하도록 구성될 수 있다. 일반적으로, 부동 소수점 op들은 부동 소수점 피연산자들에 관해 동작하기 위해 정의되었던 op들일 수 있다. 부동 소수점 피연산자는, 지수가 있는 밑(a base raised to an exponent power)으로 나타내고 가수(mantissa)(또는 유효수(significand))로 곱해진 피연산자이다. 지수, 피연산자의 기호, 및 가수/유효수는 피연산자에서 명확하게 나타날 수 있고, 밑은 내포될 수 있다(예컨대, 실시예에서, 밑이 2임).
벡터 실행 유닛들은 벡터 op들을 실행하도록 구성될 수 있다. 벡터 op들은 예를 들어, 미디어 데이터(예컨대, 픽셀들, 오디오 데이터 등과 같은 이미지 데이터)를 프로세싱하기 위해 사용될 수 있다. 미디어 프로세싱은 상당한 양의 데이터에 관해 동일한 프로세싱을 수행함으로써 특징지어질 수 있고, 이때 각각의 데이터는 상대적으로 작은 값이다(예컨대, 정수가 32 비트 내지 64 비트인 것에 비해, 8 비트, 또는 16 비트임). 따라서, 벡터 op들은 단일 명령어-다수 데이터(single instruction-multiple data: SIMD), 또는 다수의 미디어 데이터를 나타내는 피연산자에 관한 벡터 연산들을 포함한다.
이로써, 각각의 실행 유닛(B112)은, 다루기 위해 특정 실행 유닛이 정의된 op들에 대해 정의된 동작들을 수행하도록 구성된 하드웨어를 포함할 수 있다. 실행 유닛들은, 각각의 실행 유닛이 다른 실행 유닛들과의 의존성 없이 그 실행 유닛에 발행된 op에 관해 동작되도록 구성될 수 있다는 점에서, 일반적으로 서로 독립적일 수 있다. 또 다른 방식으로 보면, 각각의 실행 유닛은 op들을 실행하는 독립적인 파이프(independent pipe)일 수 있다. 상이한 실행 유닛들은 상이한 실행 레이턴시들(예를 들어, 상이한 파이프 길이들)을 가질 수 있다. 추가적으로, 상이한 실행 유닛들은 우회가 발생하는 파이프라인 스테이지에 대해 상이한 레이턴시들을 가질 수 있으며, 따라서 로드 op에 기초하여 종속적 op들의 추론적 스케줄링이 발생하는 클록 사이클들은 op의 유형 및 op를 실행할 실행 유닛(B28)에 기초하여 변할 수 있다.
임의의 수 및 유형의 실행 유닛들(B112)이 하나의 실행 유닛을 가진 실시예들, 및 다수의 실행 유닛들을 가진 실시예들을 포함한 다양한 실시예들에 포함될 수 있음을 유의한다.
캐시 라인은 캐시 내의 할당 및 반납(deallocation)의 단위일 수 있다. 즉, 캐시 라인 내의 데이터는 한 단위로서 캐시에 할당/반납될 수 있다. 캐시 라인들은 크기가 변할 수 있다(예컨대, 32 바이트, 64 바이트, 128 바이트, 또는 더 크거나 더 작은 캐시 라인들). 상이한 캐시들은 상이한 캐시 라인 크기들을 가질 수 있다. ICache(B102) 및 DCache(B104)는 각각 임의의 원하는 용량, 캐시 라인 크기, 및 구성을 갖는 캐시일 수 있다. 다양한 실시예들에서, DCache(B104)/ICache(B102)와 메인 메모리 사이에 더 많은 추가적인 레벨들의 캐시가 존재할 수 있다.
다양한 포인트들에서, 로드/저장 동작들은 다른 로드/저장 동작들보다 더 신생이거나 더 예전의 것으로 지칭된다. 제1 동작이 프로그램 순서에서 제2 동작에 후속하는 경우, 제1 동작은 제2 동작보다 더 신생의 것일 수 있다. 유사하게, 제1 동작이 프로그램 순서에서 제2 동작에 선행하는 경우, 제1 동작은 제2 동작보다 더 예전의 것일 수 있다.
도 21은 재정렬 버퍼(B108)의 일 실시예의 블록도이다. 예시된 실시예에서, 재정렬 버퍼(108)는 복수의 엔트리들을 포함한다. 다양한 실시예들에서, 각각의 엔트리는 명령어, 명령어 동작, 또는 명령어 동작들의 그룹에 대응할 수 있다. 명령어 동작들과 관련된 다양한 상태는 재정렬 버퍼에 저장될 수 있다(예를 들어, 아키텍처화된 레지스터 맵을 업데이트하기 위한 타겟 논리적 및 물리적 레지스터들, 실행 동안 검출된 예외들 또는 재지향들 등).
몇몇 포인터들이 도 21에 예시된다. 리타이어 포인터(B130)는 프로세서(B30)에서 가장 오래된 리타이어되지 않은 op를 가리킬 수 있다. 즉, 리타이어(B130)에서의 op 이전의 op들은 재정렬 버퍼(B108)로부터 리타이어되었고, 프로세서(B30)의 아키텍처화된 상태는 리타이어된 op들 등의 실행을 반영하도록 업데이트되었다. 해결된 포인터(B132)는, 선행 브랜치 명령어들이 정확하게 예측된 것으로 해결되고 예외를 초래할 수 있는 선행 op들이 예외를 초래하지 않도록 해결되는 가장 오래된 op를 가리킬 수 있다. 리타이어 포인터(B130)와 해결 포인터(B132) 사이의 op들은 재정렬 버퍼(B108)에서의 단행된 op들일 수 있다. 즉, op들을 생성한 명령어들의 실행은 (외부 인터럽트들의 부재 시에) 해결된 포인터(B132)에 대해 완료될 것이다. 가장 신생의 포인터(B134)는 MDR 유닛(B106)으로부터 가장 최근에 페치 및 디스패치된 op를 가리킬 수 있다. 해결된 포인터(B132)와 가장 신생의 포인터(B134) 사이의 op들은 추론적이며, 예외들, 브랜치 오예측들 등으로 인해 플러싱될 수 있다.
진정한 LS NS 포인터(B136)는 위에서 설명된 진정한 LS NS 포인터이다. 진정한 LS NS 포인터는, 인터럽트 요청이 어서트되고 Nack 응답에 대한 다른 테스트들이 부정(negative)인 경우에만 생성될 수 있다(예를 들어, Ack 응답이 이들 테스트들에 의해 표시됨). MDR 유닛(B106)은 해결된 포인터(B132)를 진정한 LS NS 포인터(B136)로 다시 이동시키려고 시도할 수 있다. 플러싱될 수 없는 단행된 op들이 재정렬 버퍼(B108)에 있을 수 있다(예를 들어, 이들이 단행되면, 이들은 완료되고 리타이어되어야 함). 명령어 동작들의 일부 그룹들(예를 들어, 마이크로코드 루틴들, 특정 인터럽트불가능 예외들 등)은 인터럽트가능하지 않을 수 있다. 이러한 경우들에서, 프로세서 Int Ack 제어기(B126)는 Nack 응답을 생성하도록 구성될 수 있다. 프로세서(B30)에서 "실행취소"하기에는 너무 복잡한 op들 또는 op들의 조합들이 존재할 수 있고, 해결 포인터와 진정한 LS NS 포인터(B136) 사이의 그러한 op들의 존재는 프로세서 Int Ack 제어기(B126)로 하여금 Nack 응답을 생성하게 할 수 있다. 재정렬 버퍼(B108)가 해결 포인터를 진정한 LS NS 포인터(B136)로 다시 이동시키는 데 성공한 경우, 프로세서 Int Ack 제어 회로(B126)는 Ack 응답을 생성하도록 구성될 수 있다.
도 22는 프로세서(B30)에 의한 인터럽트 요청의 수신에 기초한 프로세서 Int Ack 제어 회로(B126)의 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 프로세서 Int Ack 제어 회로(B126) 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 프로세서 Int Ack 제어 회로(B126)는 도 22에 예시된 동작을 구현하도록 구성될 수 있다.
프로세서 Int Ack 제어 회로(B126)는, 임의의 Nack 조건들이 MDR 유닛(B106)에서 검출되는지 여부를 결정하도록 구성될 수 있다(판정 블록(B140)). 예를 들어, 완료되지 않은 잠재적으로 긴 레이턴시 동작들, 인터럽트들이 마스킹되는 것 등이 MDR 유닛(B106)에서 검출된 Nack 조건들일 수 있다. 그러한 경우(판정 블록(B140), "예" 레그), 프로세서 Int Ack 제어 회로(B126)는 Nack 응답을 생성하도록 구성될 수 있다(블록(B142)). 그렇지 않으면(판정 블록(B140), "아니오" 레그), 프로세서 Int Ack 제어 회로(B126)는 Nack 조건들 및/또는 진정한 LS NS 포인터를 요청하기 위해 LSU와 통신할 수 있다(블록(B144)). LSU(B118)가 Nack 조건을 검출하는 경우(판정 블록(B146), "예" 레그), 프로세서 Int Ack 제어 회로(B126)는 Nack 응답을 생성하도록 구성될 수 있다(블록(B142)). LSU(B118)가 Nack 조건을 검출하지 않는 경우(판정 블록(B146), "아니오" 레그), 프로세서 Int Ack 제어 회로(B126)는 LSU(B118)로부터 진정한 LS NS 포인터를 수신하도록 구성될 수 있고(블록(B148)), 재정렬 버퍼(B108) 내의 해결 포인터를 진정한 LS NS 포인터로 다시 이동시키려고 시도할 수 있다(블록(B150)). 이동이 성공적이지 않은 경우(예를 들어, 플러싱될 수 없는 해결 포인터와 진정한 LS NS 포인터 사이에 적어도 하나의 명령어 동작이 존재함)(판정 블록(B152), "아니오" 레그), 프로세서 Int Ack 제어 회로(B126)는 Nack 응답을 생성하도록 구성될 수 있다(블록(B142)). 그러지 않으면(판정 블록(B152), "예" 레그), 프로세서 Int Ack 제어 회로(B126)는 Ack 응답을 생성하도록 구성될 수 있다(블록(B154)). 프로세서 Int Ack 제어 회로(B126)는 해결 포인터를 진정한 LS NS 포인터에 동결시키고, 리타이어 포인터가 해결 포인터에 도달할 때까지 op들을 리타이어하도록 구성될 수 있다(블록(B156)). 이어서, 프로세서 Int Ack 제어 회로(B126)는 인터럽트를 취하도록 구성될 수 있다(블록(B158)). 즉, 프로세서(B30)는 (예를 들어, 프로세서(B30)에 의해 구현된 명령어 세트 아키텍처에 따라 인터럽트들과 연관된 미리 결정된 어드레스로부터) 인터럽트 코드를 페치하기 시작할 수 있다.
다른 실시예에서, SOC(B10)는 시스템의 SOC들 중 하나일 수 있다. 더 구체적으로, 일 실시예에서, SOC(B10)의 다수의 인스턴스들이 이용될 수 있다. 다른 실시예들은 비대칭 SOC들을 가질 수 있다. 각각의 SOC는 별개의 집적 회로 칩(예를 들어, 별개의 반도체 기판 또는 "다이" 상에 구현됨)일 수 있다. 다이는 인터포저(interposer), 패키지 온 패키지(package on package) 솔루션 등을 통해 패키징되고 서로 연결될 수 있다. 대안적으로, 다이는 칩-온-칩 패키지 솔루션, 멀티칩 모듈 등으로 패키징될 수 있다.
도 23은 SOC(B10)의 다수의 인스턴스들을 포함하는 시스템의 일 실시예를 예시하는 블록도이다. 예를 들어, SOC(B10A), SOC(B10B) 등 내지 SOC(B10q)는 시스템에서 함께 커플링될 수 있다. 각각의 SOC(B10A-B10q)는 인터럽트 제어기(B20)(예를 들어, 도 23의 인터럽트 제어기(B20A), 인터럽트 제어기(B20B), 및 인터럽트 제어기(B20q))를 포함한다. 하나의 인터럽트 제어기, 이 예에서는 인터럽트 제어기(B20A)가 시스템에 대한 1차 인터럽트 제어기로서 기능할 수 있다. 다른 인터럽트 제어기들(B20B 내지 B20q)은 2차 인터럽트 제어기들로서 기능할 수 있다.
1차 인터럽트 제어기(B20A)와 2차 제어기(B20B) 사이의 인터페이스는 도 23에 더 상세히 도시되며, 1차 인터럽트 제어기(B20A)와 다른 2차 인터럽트 제어기들, 예를 들어, 인터럽트 제어기(B20q) 사이의 인터페이스는 유사할 수 있다. 도 23의 실시예에서, 2차 제어기(B20B)는 SOC(B10B) 상의 인터럽트 소스들(또는 도 23에 도시되지 않은 SOC(B10B)에 커플링된 외부 디바이스들)로부터 발행된 인터럽트들을 Int들(B160)로서 식별하는 인터럽트 정보를 제공하도록 구성된다. 1차 인터럽트 제어기(B20A)는 2차 인터럽트 제어기(20B)(참조 번호 B162)에 하드, 소프트 및 강제 반복들을 시그널링하도록 구성되고, 인터럽트 제어기(B20B)(참조 번호 B164)로부터 Ack/Nack 응답들을 수신하도록 구성된다. 인터페이스는 임의의 방식으로 구현될 수 있다. 예를 들어, 참조 번호들(B160, B162, 및/또는 B164)을 구현하기 위해 전용 와이어들이 SOC(B10A)와 SOC(B10B) 사이에 커플링될 수 있다. 다른 실시예에서, 메시지들은 다른 통신들을 위해 또한 사용되는 SOC들(B10A-B10q) 사이의 일반적인 인터페이스를 통해 1차 인터럽트 제어기(B20A)와 2차 인터럽트 제어기들(B20B-B20q) 사이에서 교환될 수 있다. 일 실시예에서, 프로그래밍된 PIO(input/output) 기록들은 데이터로서 각각 인터럽트 데이터, 하드/소프트/강제 요청들 및 Ack/Nack 응답들과 함께 사용될 수 있다.
1차 인터럽트 제어기(B20A)는, SOC(B10A), 오프-칩 디바이스들일 수 있는 다른 SOC들(B10B-B10q) 중 하나, 또는 이들의 임의의 조합 상에 있을 수 있는 다양한 인터럽트 소스들로부터 인터럽트들을 수집하도록 구성될 수 있다. 2차 인터럽트 제어기들(B20B-B20q)은 1차 인터럽트 제어기(B20A)(도 23의 Ints)에 인터럽트들을 송신하여, 1차 인터럽트 제어기(B20A)에 대한 인터럽트 소스를 식별하도록 구성될 수 있다. 1차 인터럽트 제어기(B20A)는 또한 인터럽트들의 전달을 보장하는 것을 담당할 수 있다. 2차 인터럽트 제어기들(B20B-B20q)은 1차 인터럽트 제어기(B20A)로부터 지시를 받아, 1차 인터럽트 제어기(B20A)로부터 소프트, 하드 및 강제 반복 요청들을 수신하고, 대응하는 SOC(B10B-B10q) 상에 구현된 클러스터 인터럽트 제어기들(B24A-B24n)을 통해 반복들을 수행하도록 구성될 수 있다. 클러스터 인터럽트 제어기들(B24A-B24n)로부터의 Ack/Nack 응답들에 기초하여, 2차 인터럽트 제어기들(B20B-B20q)은 Ack/Nack 응답들을 제공할 수 있다. 일 실시예에서, 1차 인터럽트 제어기(B20A)는 소프트 및 하드 반복들에서 2차 인터럽트 제어기들(B20B-B20q)을 통해 인터럽트들을 전달하려고 연속으로 시도할 수 있고, 강제 반복에서 2차 인터럽트 제어기들(B20B-B20q)에 병렬로 전달할 수 있다.
일 실시예에서, 1차 인터럽트 제어기(B20A)는, 다른 SOC들(BB10-B10q) 상에서 다른 SOC들(B10B-B10q) 상의 클러스터 인터럽트 제어기들의 서브세트들에 대해 (2차 인터럽트 제어기들(B20B-B20q)의 보조로) 주어진 반복을 수행하기 전에 1차 인터럽트 제어기(B20A)와 동일한 SOC(B10A)에 통합되는 클러스터 인터럽트 제어기들의 서브세트에 대한 주어진 반복을 수행하도록 구성될 수 있다. 즉, 1차 인터럽트 제어기(B20A)는 SOC(B10A) 상에서 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려고 연속으로 시도할 수 있고, 이어서, 2차 인터럽트 제어기들(BB20B-20q)에 통신할 수 있다. 2차 인터럽트 제어기들(B20B-B20q)을 통해 전달하려는 시도들은 또한 연속으로 수행될 수 있다. 2차 인터럽트 제어기들(BB20B-B20q)을 통한 시도들의 순서는, 클러스터 내의 클러스터 인터럽트 제어기들 및 프로세서들에 대해 전술된 실시예들과 유사하게 임의의 원하는 방식으로 결정될 수 있다(예를 들어, 프로그래밍가능한 순서, 가장 최근에 수락된 것, 가장 덜 최근에 수락된 것 등). 따라서, 1차 인터럽트 제어기(B20A) 및 2차 인터럽트 제어기들(B20B-B20q)은 다수의 SOC들(B10A-B10q)의 존재로부터 소프트웨어를 크게 격리시킬 수 있다. 즉, SOC들(B10A-B10q)은 단일 시스템 상에서의 소프트웨어 실행에 대해 대체로 투명한 단일 시스템으로서 구성될 수 있다. 시스템 초기화 동안, 일부 실시예들은 위에서 논의된 바와 같이 인터럽트 제어기들(B20A-B20q)을 구성하도록 프로그래밍될 수 있지만, 그렇지 않으면, 인터럽트 제어기들(B20A-B20q)은 소프트웨어 보조 또는 시스템의 다중-다이 성질에 대한 소프트웨어의 특정 가시성 없이, 각각 별개의 반도체 다이 상에 있는 가능하게는 다수의 SOC들(B10A-B10q)에 걸친 인터럽트들의 전달을 관리할 수 있다. 예를 들어, 다이-간 통신으로 인한 지연들이 시스템에서 최소화될 수 있다. 따라서, 초기화 후의 실행 동안, 단일 시스템은 소프트웨어에게 단일 시스템으로 보일 수 있고, 시스템의 다중-다이 성질은 소프트웨어에 투명할 수 있다.
1차 인터럽트 제어기(B20A) 및 2차 인터럽트 제어기들(B20B-B20q)은, 당업자들에 의해 "마스터"(즉, 1차) 및 "슬레이브"(즉, 2차)로 또한 지칭되는 방식으로 동작할 수 있다는 것에 유의한다. 1차/2차 용어가 본 명세서에서 사용되지만, "1차" 및 "2차"라는 용어들은 이러한 대응 용어들을 포함하는 것으로 해석되는 것으로 명백히 의도된다.
일 실시예에서, SOC(B10A-B10q)의 각각의 인스턴스는 자신의 인터럽트 제어기(B20A-B20q)에 구현된 1차 인터럽트 제어기 회로 및 2차 인터럽트 제어기 회로 둘 모두를 가질 수 있다. 하나의 인터럽트 제어기(예를 들어, 인터럽트 제어기(B20A))는 (예를 들어, SOC들(B10A-B10q) 상의 퓨즈들, 또는 SOC들(B10A-B10q)의 하나 이상의 핀들 상의 핀 스트랩들을 통해) 시스템의 제조 동안 1차로 지정될 수 있다. 대안적으로, 1차 및 2차 지정들은 시스템의 초기화(또는 부트) 구성 동안 이루어질 수 있다.
도 24는 하나 이상의 인터럽트 소스들로부터 하나 이상의 인터럽트들의 수신에 기초한 1차 인터럽트 제어기(B20A)의 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 1차 인터럽트 제어기(B20A) 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 1차 인터럽트 제어기(B20A)는 도 24에 예시된 동작을 구현하도록 구성될 수 있다.
1차 인터럽트 제어기(B20A)는 로컬 SOC(B10A) 상에 통합된 클러스터 인터럽트 제어기들을 통해 소프트 반복을 수행하도록 구성될 수 있다(블록(B170)). 예를 들어, 소프트 반복은 도 18의 흐름도와 유사할 수 있다. 로컬 소프트 반복이 Ack 응답을 초래하는 경우(판정 블록(B172), "예" 레그), 인터럽트는 성공적으로 전달될 수 있고 1차 인터럽트 제어기(B20A)는 유휴 상태(B40)로 복귀하도록 구성될 수 있다(어떠한 추가 계류중인 인터럽트들도 없다고 가정함). 로컬 소프트 반복이 Nack 응답을 초래하는 경우(판정 블록(B172), "아니오" 레그), 1차 인터럽트 제어기(B20A)는 전술된 바와 같이 임의의 원하는 순서를 사용하여 다른 SOC들(B10B-B10q) 중 하나를 선택하도록 구성될 수 있다(블록(B174)). 1차 인터럽트 제어기(B20A)는 선택된 SOC(B10B-B10q)에 대해 2차 인터럽트 제어기(B20B-B20q)에 소프트 반복 요청을 어서트하도록 구성될 수 있다(블록(B176)). 2차 인터럽트 제어기(B20B-B20q)가 Ack 응답을 제공하는 경우(판정 블록(B178), "예" 레그), 인터럽트는 성공적으로 전달될 수 있고 1차 인터럽트 제어기(B20A)는 유휴 상태(B40)로 복귀하도록 구성될 수 있다(어떠한 추가 계류중인 인터럽트들도 없다고 가정함). 2차 인터럽트 제어기(B20B-B20q)가 Ack 응답을 제공하고(판정 블록(B178), "예" 레그), 소프트 반복에서 아직 선택되지 않은 더 많은 SOC들(B10B-B10q)이 존재하는 경우(판정 블록(B180), "예" 레그), 1차 인터럽트 제어기(B20A)는 구현된 정렬 메커니즘에 따라 다음 SOC(B10B-B10q)를 선택하도록 구성될 수 있고(블록(B182)) 선택된 SOC 상에서 2차 인터럽트 제어기(B20B-B20q)에 소프트 반복 요청을 송신하고(블록(B176)) 프로세싱을 계속하도록 구성될 수 있다. 한편, 각각의 SOC(B10B-B10q)가 선택된 경우, 소프트 반복은 2차 인터럽트 제어기들(B20B-B20q)을 통해 인터럽트를 전달하려는 연속 시도가 완료되었기 때문에 완료될 수 있다.
성공적 인터럽트 전달 없이 2차 인터럽트 제어기들(B20B-B20q)을 통한 소프트 반복을 완료하는 것(판정 블록(B180), "아니오" 레그)에 기초하여, 1차 인터럽트 제어기(B20A)는 로컬 SOC(B10A)에 통합된 로컬 클러스터 인터럽트 제어기들을 통해 하드 반복을 수행하도록 구성될 수 있다(블록(B184)). 예를 들어, 소프트 반복은 도 18의 흐름도와 유사할 수 있다. 로컬 하드 반복이 Ack 응답을 초래하는 경우(판정 블록(B186), "예" 레그), 인터럽트는 성공적으로 전달될 수 있고 1차 인터럽트 제어기(B20A)는 유휴 상태(B40)로 복귀하도록 구성될 수 있다(어떠한 추가 계류중인 인터럽트들도 없다고 가정함). 로컬 하드 반복이 Nack 응답을 초래하는 경우(판정 블록(B186), "아니오" 레그), 1차 인터럽트 제어기(B20A)는 전술된 바와 같이 임의의 원하는 순서를 사용하여 다른 SOC들(B10B-B10q) 중 하나를 선택하도록 구성될 수 있다(블록(B188)). 1차 인터럽트 제어기(B20A)는 선택된 SOC(B10B-B10q)에 대해 2차 인터럽트 제어기(B20B-B20q)에 하드 반복 요청을 어서트하도록 구성될 수 있다(블록(B190)). 2차 인터럽트 제어기(B20B-B20q)가 Ack 응답을 제공하는 경우(판정 블록(B192), "예" 레그), 인터럽트는 성공적으로 전달될 수 있고 1차 인터럽트 제어기(B20A)는 유휴 상태(B40)로 복귀하도록 구성될 수 있다(어떠한 추가 계류중인 인터럽트들도 없다고 가정함). 2차 인터럽트 제어기(B20B-B20q)가 Ack 응답을 제공하고(판정 블록(B192), "예" 레그), 하드 반복에서 아직 선택되지 않은 더 많은 SOC들(B10B-B10q)이 존재하는 경우(판정 블록(B194), "예" 레그), 1차 인터럽트 제어기(B20A)는 구현된 정렬 메커니즘에 따라 다음 SOC(B10B-B10q)를 선택하도록 구성될 수 있고(블록(B196)) 선택된 SOC 상에서 2차 인터럽트 제어기(B20B-B20q)에 하드 반복 요청을 송신하고(블록(B190)) 프로세싱을 계속하도록 구성될 수 있다. 한편, 각각의 SOC(B10B-B10q)가 선택된 경우, 하드 반복은 2차 인터럽트 제어기들(B20B-B20q)을 통해 인터럽트를 전달하려는 연속 시도가 완료되었기 때문에 완료될 수 있다(판정 블록(B194), "아니오" 레그). 1차 인터럽트 제어기(B20A)는 강제 반복으로 진행하도록 구성될 수 있다(블록(B198)). 강제 반복은 국부적으로 수행될 수 있거나, 또는 로컬 SOC(B10A) 및 다른 SOC들(B10B-B10q)에 걸쳐 병렬로 또는 연속으로 수행될 수 있다.
전술된 바와 같이, 인터럽트 전달 프로세스가 시작될 때 초기화될 수 있는 타임아웃 메커니즘이 존재할 수 있다. 일 실시예에서, 임의의 상태 동안 타임아웃이 발생하는 경우, 인터럽트 제어기(B20)는 강제 반복으로 이동하도록 구성될 수 있다. 대안적으로, 타이머 만료는 다시 언급된 바와 같이 대기 드레인 상태(B48)에서만 고려될 수 있다.
도 25는 2차 인터럽트 제어기(B20B-B20q)의 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 2차 인터럽트 제어기(B20B-B20q) 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 2차 인터럽트 제어기(B20B-B20q)는 도 25에 예시된 동작을 구현하도록 구성될 수 있다.
대응하는 SOC(B10B-B10q)의(또는 SOC(B10B-B10q)에 커플링된) 인터럽트 소스가 2차 인터럽트 제어기(B20B-B20q)에 인터럽트를 제공하는 경우(판정 블록(B200), "예" 레그), 2차 인터럽트 제어기(B20B-B20q)는 다른 인터럽트 소스들로부터의 다른 인터럽트들과 함께 처리를 위해 인터럽트를 1차 인터럽트 제어기(B20A)에 송신하도록 구성될 수 있다(블록(B202)).
1차 인터럽트 제어기(B20A)가 반복 요청을 송신한 경우(판정 블록(B204), "예" 레그), 2차 인터럽트 제어기(B20B-B20q)는 로컬 SOC(B10B-B10q)의 클러스터 인터럽트 제어기들을 통해 요청된 반복(하드, 소프트 또는 강제)을 수행하도록 구성될 수 있다(블록(B206)). 예를 들어, 하드 및 소프트 반복들은 도 18과 유사할 수 있고, 강제는 로컬 SOC(B10B-B10q)에서 클러스터 인터럽트 제어기들에 병렬로 수행될 수 있다. 반복이 Ack 응답을 초래하는 경우(판정 블록(B208), "예" 레그), 2차 인터럽트 제어기(B20B-B20q)는 Ack 응답을 1차 인터럽트 제어기(B20A)에 송신하도록 구성될 수 있다(블록(B210)). 반복이 Nack 응답을 초래하는 경우(판정 블록(B208), "아니오" 레그), 2차 인터럽트 제어기(B20B-B20q)는 Nack 응답을 1차 인터럽트 제어기(B20A)에 송신하도록 구성될 수 있다(블록(B212)).
도 26은 인터럽트들을 처리하기 위한 방법의 일 실시예를 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 본 명세서에 설명된 시스템들 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 본 명세서에 설명된 시스템들은 도 26에 예시된 동작을 구현하도록 구성될 수 있다.
인터럽트 제어기(B20)는 인터럽트 소스로부터 인터럽트를 수신할 수 있다(블록(B220)). 1차 및 2차 인터럽트 제어기들(B20A-B20q)을 갖는 실시예들에서, 인터럽트는 임의의 인터럽트 제어기(B20A-B20q)에서 수신될 수 있고, 인터럽트 소스로부터 인터럽트를 수신하는 것의 일부로서 1차 인터럽트 제어기(B20A)에 제공될 수 있다. 인터럽트 제어기(B20)는 복수의 클러스터 인터럽트 제어기들에 인터럽트를 전달하려고 연속으로 시도하는 제1 반복(예를 들어, 소프트 반복)을 수행하도록 구성될 수 있다(블록(B222)). 복수의 클러스터 인터럽트 제어기들의 개개의 클러스터 인터럽트 제어기는 복수의 프로세서들을 포함하는 개개의 프로세서 클러스터와 연관된다. 복수의 클러스터 인터럽트 제어기들의 주어진 클러스터 인터럽트 제어기는 제1 반복에서, 파워 온되는 개개의 복수의 프로세서들의 서브세트에 인터럽트를 전달하려고 시도하고, 서브세트에 포함되지 않은 개개의 복수의 프로세서들 중의 프로세서들에 인터럽트를 전달하려고 시도하지 않도록 구성될 수 있다. Ack 응답이 수신되면, 반복은 인터럽트 제어기(B20)에 의해 종료될 수 있다(판정 블록(B224), "예" 레그 및 블록(B226)). 한편(판정 블록(B224), "아니오" 레그), 제1 반복에서 복수의 클러스터 인터럽트 제어기들로부터의 비-확인응답(Nack) 응답들에 기초하여, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들을 통한 제2 반복(예를 들어, 하드 반복)을 수행하도록 구성될 수 있다(블록(B228)). 주어진 클러스터 인터럽트 제어기는 제2 반복에서, 파워 오프되는 개개의 복수의 프로세서들 중의 프로세서들을 파워 온시키고 개개의 복수의 프로세서들에 인터럽트를 전달하려고 시도하도록 구성될 수 있다. Ack 응답이 수신되면, 반복은 인터럽트 제어기(B20)에 의해 종료될 수 있다(판정 블록(B230), "예" 레그 및 블록(B232)). 한편(판정 블록(B230), "아니오" 레그), 제2 반복에서 복수의 클러스터 인터럽트 제어기들로부터의 비-확인응답(Nack) 응답들에 기초하여, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들을 통한 제3 반복(예를 들어, 강제 반복)을 수행하도록 구성될 수 있다(블록(B234)).
본 개시내용에 기초하여, 시스템은 복수의 클러스터 인터럽트 제어기들 및 복수의 클러스터 인터럽트 제어기들에 커플링된 인터럽트 제어기를 포함할 수 있다. 복수의 클러스터 인터럽트 제어기들의 개개의 클러스터 인터럽트 제어기는 복수의 프로세서들을 포함하는 개개의 프로세서 클러스터와 연관될 수 있다. 인터럽트 제어기는 제1 인터럽트 소스로부터 인터럽트를 수신하도록 구성될 수 있고, 인터럽트에 기초하여, 인터럽트를 전달하려고 시도하기 위해 복수의 클러스터 인터럽트 제어기들을 통해 제1 반복을 수행하고; 제1 반복에서 복수의 클러스터 인터럽트 제어기들로부터의 비-확인응답(Nack) 응답들에 기초하여, 복수의 클러스터 인터럽트 제어기들을 통해 제2 반복을 수행하도록 구성될 수 있다. 복수의 클러스터 인터럽트 제어기들의 주어진 클러스터 인터럽트 제어기는 제1 반복에서, 파워 온되는 개개의 프로세서 클러스터 내의 복수의 프로세서들의 서브세트에 인터럽트를 전달하려고 시도하고, 서브세트에 포함되지 않은 개개의 클러스터 내의 개개의 복수의 프로세서들 중의 프로세서들에 인터럽트를 전달하려고 시도하지 않도록 구성될 수 있다. 제2 반복에서, 주어진 클러스터 인터럽트 제어기는 파워 오프되는 개개의 복수의 프로세서들 중의 프로세서들을 파워 온시키고 개개의 복수의 프로세서들에 인터럽트를 전달하려고 시도하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 제1 클러스터 인터럽트 제어기에 제1 인터럽트 요청을 어서트하도록 구성될 수 있고; 제1 클러스터 인터럽트 제어기로부터의 Nack 응답에 기초하여, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 제2 클러스터 인터럽트 제어기에 제2 인터럽트 요청을 어서트하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 제2 클러스터 인터럽트 제어기로부터의 제2 Nack 응답에 기초하여, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 제3 클러스터 인터럽트 제어기에 제3 인터럽트 요청을 어서트하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 제2 클러스터 인터럽트 제어기로부터의 확인응답(Ack) 응답 및 추가적인 계류중인 인터럽트들의 부재에 기초하여, 인터럽트 제어기는 시도를 종료하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 제1 클러스터 인터럽트 제어기에 인터럽트 요청을 어서트하도록 구성될 수 있고; 제1 클러스터 인터럽트 제어기로부터의 확인응답(Ack) 응답 및 추가적인 계류중인 인터럽트들의 부재에 기초하여, 인터럽트 제어기는 시도를 종료하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 하나 이상의 클러스터 인터럽트 제어기들에 인터럽트 요청들을 연속으로 어서트하도록 구성될 수 있고, 인터럽트 요청들은 하나 이상의 클러스터 인터럽트 제어기들 중 제1 클러스터 인터럽트 제어기로부터의 확인응답(Ack) 응답에 의해 종료된다. 일 실시예에서, 인터럽트 제어기는 프로그래밍가능한 순서로 연속으로 어서트하도록 구성될 수 있다. 일 실시예에서, 인터럽트 제어기는 제1 인터럽트 소스에 기초하여 인터럽트 요청을 연속으로 어서트하도록 구성될 수 있다. 제2 인터럽트 소스로부터의 제2 인터럽트는 상이한 순서의 연속 어서션을 초래할 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 제1 클러스터 인터럽트 제어기에 인터럽트 요청을 어서트하도록 구성될 수 있고; 제1 클러스터 인터럽트 제어기는 제1 클러스터 인터럽트 제어기에 대한 인터럽트 요청에 기초하여 개개의 프로세서 클러스터 내의 복수의 프로세서들에 프로세서 인터럽트 요청들을 연속으로 어서트하도록 구성될 수 있다. 일 실시예에서, 제1 클러스터 인터럽트 제어기는 복수의 프로세서들 중 제1 프로세서로부터의 확인응답(Ack) 응답에 기초하여 연속 어서션을 종료하도록 구성된다. 일 실시예에서, 제1 클러스터 인터럽트 제어기는 제1 프로세서로부터의 Ack 응답에 기초하여 인터럽트 제어기에 Ack 응답을 송신하도록 구성될 수 있다. 일 실시예에서, 제1 클러스터 인터럽트 제어기는 프로세서 인터럽트들의 연속 어서션 동안 개개의 클러스터 내의 복수의 프로세서들로부터의 Nack 응답들에 기초하여 인터럽트 제어기에 Nack 응답을 제공하도록 구성될 수 있다. 일 실시예에서, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들의 제1 서브세트를 포함하는 제1 반도체 기판 상의 제1 집적 회로 상에 포함될 수 있다. 복수의 클러스터 인터럽트 제어기들의 제2 서브세트는 제2 별개의 반도체 기판 상의 제2 집적 회로 상에 구현될 수 있다. 인터럽트 제어기는 제2 서브세트에 전달하려고 시도하기 전에, 제1 서브세트에 인터럽트 요청들을 연속으로 어서트하도록 구성될 수 있다. 일 실시예에서, 제2 집적 회로는 제2 인터럽트 제어기를 포함하고, 인터럽트 제어기는 제1 서브세트가 인터럽트를 거부하는 것에 응답하여 제2 인터럽트 제어기에 인터럽트 요청을 통신하도록 구성될 수 있다. 제2 인터럽트 제어기는 제2 서브세트에 인터럽트를 전달하려고 시도하도록 구성될 수 있다.
일 실시예에서, 프로세서는 재정렬 버퍼, 로드/저장 유닛, 및 재정렬 버퍼 및 로드/저장 유닛에 커플링된 제어 회로를 포함한다. 재정렬 버퍼는 프로세서에 의해 페치되고 프로세서에 의해 리타이어되지 않은 명령어들에 대응하는 복수의 명령어 동작들을 추적하도록 구성될 수 있다. 로드/저장 유닛은 로드/저장 동작들을 실행하도록 구성될 수 있다. 제어 회로는, 재정렬 버퍼가 인터럽트가능한 포인트에 명령어 동작들을 리타이어할 것이고 로드/저장 유닛이 특정 시간 기간 내에 인터럽트가능한 포인트에 대한 로드/저장 동작들을 완료할 것이라는 결정에 기초하여 프로세서에 의해 수신된 인터럽트 요청에 대한 확인응답(Ack) 응답을 생성하도록 구성될 수 있다. 제어 회로는 재정렬 버퍼 및 로드/저장 유닛 중 적어도 하나가 특정 시간 기간 내에 인터럽트가능한 포인트에 도달하지 않을 것이라는 결정에 기초하여 인터럽트 요청에 대한 비-확인응답(Nack) 응답을 생성하도록 구성될 수 있다. 일 실시예에서, 결정은 재정렬 버퍼가 임계치보다 큰 잠재적 실행 레이턴시를 갖는 적어도 하나의 명령어 동작을 갖는 것에 기초한 Nack 응답일 수 있다. 일 실시예에서, 결정은 재정렬 버퍼가 인터럽트들이 마스킹되게 하는 적어도 하나의 명령어 동작을 갖는 것에 기초한 Nack 응답일 수 있다. 일 실시예에서, 결정은 로드/저장 유닛이 현저한 디바이스 어드레스 공간에 대한 적어도 하나의 로드/저장 동작을 갖는 것에 기초한 Nack 응답이다.
일 실시예에서, 방법은 인터럽트 제어기에서 제1 인터럽트 소스로부터 인터럽트를 수신하는 단계를 포함한다. 방법은 인터럽트를 복수의 클러스터 인터럽트 제어기들에 전달하려고 연속으로 시도하는 제1 반복을 수행하는 단계를 더 포함할 수 있다. 복수의 프로세서들을 포함하는 개개의 프로세서 클러스터와 연관된 복수의 클러스터 인터럽트 제어기들의 개개의 클러스터 인터럽트 제어기는 제1 반복에서, 파워 온되는 개개의 프로세서 클러스터 내의 복수의 프로세서들의 서브세트에 인터럽트를 전달하려고 시도하고, 서브세트에 포함되지 않은 개개의 프로세서 클러스터 내의 복수의 프로세서들 중의 프로세서들에 인터럽트를 전달하려고 시도하지 않도록 구성될 수 있다. 방법은 제1 반복에서 복수의 클러스터 인터럽트 제어기들로부터의 비-확인응답(Nack) 응답들에 기초하여, 인터럽트 제어기에 의해 복수의 클러스터 인터럽트 제어기들을 통해 제2 반복을 수행하는 단계를 더 포함할 수 있다. 제2 반복에서, 주어진 클러스터 인터럽트 제어기는 개개의 프로세서 클러스터에서 파워 오프되는 복수의 프로세서들 중의 프로세서들을 파워 온시키고 복수의 프로세서들에 인터럽트를 전달하려고 시도하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들에 인터럽트를 전달하려고 연속으로 시도하는 단계는 복수의 클러스터 인터럽트 제어기들 중 하나로부터의 확인응답 응답에 기초하여 종료된다.
코히어런시
이제 도 27 내지 도 43을 참조하면, SOC(10)의 실시예들에서 구현될 수 있는 캐시 코히어런시 메커니즘의 다양한 실시예들이 도시된다. 일 실시예에서, 코히어런시 메커니즘은 통합형 메모리 어드레스 공간의 서브세트들의 코히어런시 상태를 추적하도록 구성된 복수의 디렉토리들을 포함할 수 있다. 복수의 디렉토리들은 시스템에 분배된다. 실시예에서, 복수의 디렉토리들은 메모리 제어기들에 분배된다. 일 실시예에서, 하나 이상의 메모리 제어기 회로들의 주어진 메모리 제어기는, 주어진 메모리 제어기가 인터페이싱하는 시스템 메모리의 부분 내의 데이터에 대응하는 복수의 캐시 블록들을 추적하도록 구성된 디렉토리를 포함하고, 디렉토리는, 시스템 내의 복수의 캐시들 중 어느 캐시가 복수의 캐시 블록들 중 주어진 캐시 블록을 캐싱하고 있는지를 추적하도록 구성되고, 디렉토리는, 메모리 요청들이 시스템에서 아직 완료하지 않은 경우에도 디렉토리에서 순서화되고 프로세싱된 메모리 요청들에 대해 정확하다. 일 실시예에서, 주어진 메모리 제어기는 주어진 캐시 블록에 대한 메모리 요청에 기초하여 주어진 캐시 블록에 대한 하나 이상의 코히어런시 유지 커맨드들을 발행하도록 구성되고, 하나 이상의 코히어런시 유지 커맨드들은 복수의 캐시들의 대응하는 캐시에서 주어진 캐시 블록에 대한 캐시 상태를 포함하고, 대응하는 캐시는, 대응하는 캐시 내의 캐시 상태가 주어진 코히어런시 유지 커맨드의 캐시 상태와 매칭하지 않는 것에 기초하여, 주어진 코히어런시 유지 커맨드의 프로세싱을 지연시키도록 구성된다. 일 실시예에서, 제1 캐시는 주어진 캐시 블록을 1차 공유 상태로 저장하도록 구성되고, 제2 캐시는 주어진 캐시 블록을 2차 공유 상태로 저장하도록 구성되고, 주어진 메모리 제어기는 메모리 요청 및 제1 캐시의 1차 공유 상태에 기초하여 제1 캐시가 주어진 캐시 블록을 요청자에게 전송하게 하도록 구성된다. 실시예에서, 주어진 메모리 제어기는 제1 메모리 요청의 유형에 기초하여 복수의 캐시들 중 제1 캐시에 제1 코히어런시 유지 커맨드 및 제2 코히어런시 유지 커맨드 중 하나를 발행하도록 구성되고, 제1 캐시는 제1 코히어런시 유지 커맨드에 기초하여 제1 메모리 요청을 발행한 요청자에게 제1 캐시 블록을 포워딩하도록 구성되고, 제1 캐시는 제2 코히어런시 유지 커맨드에 기초하여 주어진 메모리 제어기에 제1 캐시 블록을 리턴하도록 구성된다.
하나 이상의 메모리 제어기들에 커플링된 복수의 코히어런트 에이전트들을 포함하는 시스템에 대한 스케일링가능한(scalable) 캐시 코히어런시 프로토콜이 설명된다. 코히어런트 에이전트는 일반적으로 메모리 데이터를 캐싱하기 위한 캐시를 포함하거나 그렇지 않으면 하나 이상의 캐시 블록들의 소유권을 취할 수 있고, 잠재적으로 캐시 블록들을 로컬적으로 수정할 수 있는 임의의 회로부를 포함할 수 있다. 코히어런트 에이전트들은 캐시 코히어런시 프로토콜에 참여하여 하나의 코히어런트 에이전트에 의해 이루어진 수정들이 후속적으로 동일한 데이터를 판독하는 다른 에이전트들에 가시적일 수 있도록 보장하고, 2개 이상의 코히어런트 에이전트들에 의해 (캐시 블록을 저장하는 메모리에 대한 메모리 제어기와 같은 시스템의 순서화 지점에서 결정된 바와 같은) 특정 순서로 이루어진 수정들이 코히어런트 에이전트들의 각각에서 그 순서로 관찰되도록 보장한다.
캐시 코히어런시 프로토콜은 메시지들, 또는 명령들의 세트를 특정할 수 있으며, 이는 코히어런트 트랜잭션들을 완료하기 위해 에이전트들 및 메모리 제어기들(또는 메모리 제어기들 내의 코히어런시 제어기들) 사이에서 전송될 수 있다. 메시지들은 요청들, 스누프들, 스누프 응답들, 및 완료들을 포함할 수 있다. "요청"은 트랜잭션을 개시하고, 요청된 캐시 블록(예를 들어, 캐시 블록의 어드레스를 가짐) 및 요청기(requestor)가 캐시 블록을 수신할 상태(또는 최소 상태, 일부 경우들에서 더 허용적인 상태가 제공될 수 있음)를 특정하는 메시지이다. 본 명세서에서 사용된 "스누프" 또는 "스누프 메시지"는 캐시 블록 내의 상태 변경을 요청하기 위해 코히어런트 에이전트로 전송되는 메시지를 지칭하고, 코히어런트 에이전트가 캐시 블록의 배타적 사본을 가지고 있거나 그렇지 않으면 캐시 블록에 책임이 있는 경우, 코히어런트 에이전트에 의해 캐시 블록이 제공되도록 요청할 수도 있다. 스누프 메시지는 코히어런시 유지 커맨드의 예일 수 있고, 이는 특정 코히어런스 에이전트에서 캐시 라인의 코히어런트 상태의 변화를 야기하기 위해 특정 코히어런트 에이전트에 송신되는 임의의 커맨드일 수 있다. 코히어런시 유지 커맨드의 예인 다른 용어는 프로브(probe)이다. 코히어런시 유지 커맨드는, 예컨대, 공유 버스 시스템들에서 때때로 사용되는 바와 같이, 모든 코히어런시 에이전트들에 전송되는 브로드캐스트 커맨드를 지칭하도록 의도되지 않는다. "스누프"라는 용어는 아래에서 예로서 사용되지만, 그 용어는 일반적으로 코히어런시 유지 커맨드를 지칭하는 것으로 이해된다. "완료" 또는 "스누프 응답"은, 상태 변화가 이루어졌다는 것을 표시하고 그리고 적용가능한 경우, 캐시 블록의 사본을 제공하는 코히어런트 에이전트로부터의 메시지일 수 있다. 일부 경우들에서, 특정 요청들에 대해 요청의 소스에 의해 완료가 또한 제공될 수 있다.
"상태" 또는 "캐시 상태"는 일반적으로, 캐시 블록의 사본이 캐시에서 유효한지 여부를 표시하는 값을 지칭할 수 있고, 또한 캐시 블록의 다른 속성들을 표시할 수 있다. 예를 들어, 상태는 캐시 블록이 메모리의 사본에 대해 수정되는지 여부를 나타낼 수 있다. 상태는 캐시 블록의 소유권 레벨을 나타낼 수 있다(예를 들어, 캐시를 갖는 에이전트가 캐시 블록을 수정하도록 허용되는지 여부, 에이전트가 캐시 블록을 제공할 책임이 있는지 또는 캐시로부터 축출(evict)된 경우 캐시 블록을 메모리 제어기로 리턴할 책임이 있는지 등). 상태는 또한 다른 코히어런트 에이전트들에서 캐시 블록의 가능한 존재를 나타낼 수 있다(예를 들어, "공유" 상태는 캐시 블록의 사본이 하나 이상의 다른 캐싱가능한 에이전트들에 저장될 수 있음을 나타낼 수 있음).
다양한 특징들이 캐시 코히어런시 프로토콜의 다양한 실시예들에 포함될 수 있다. 예를 들어, 메모리 제어기(들)는 각각 코히어런시 제어기 및 그 메모리 제어기에 의해 제어되는 메모리에 대응하는 캐시 블록들에 대한 디렉토리를 구현할 수 있다. 디렉토리는 복수의 캐싱가능한 에이전트들에서 캐시 블록들의 상태들을 추적하여, 코히어런시 제어기가 캐시 블록의 상태를 변경하고 가능하게는 캐시 블록의 사본을 제공하도록 스누핑될 캐싱가능한 에이전트를 결정하도록 허용한다. 즉, 스누프들은 캐시 제어기에서 수신된 요청에 기초하여 모든 캐싱가능한 에이전트들로 브로드캐스트될 필요가 없고, 오히려 스누프들은 요청에 의해 영향을 받는 캐시 블록의 사본을 갖는 그러한 에이전트들로 전송될 수 있다. 일단 스누프들이 생성되면, 스누프들이 프로세싱되고 데이터가 요청의 소스에 제공된 후 각각의 코히어런트 에이전트에서 캐시 블록의 상태를 반영하기 위해 디렉토리가 업데이트될 수 있다. 따라서, 디렉토리는 동일한 캐시 블록으로 프로세싱되는 다음 요청에 대해 정확할 수 있다. 예를 들어, 브로드캐스트 해결책과 비교할 때 코히어런트 에이전트들과 메모리 제어기 사이의 상호 연결 상의 트래픽을 줄여 스누프들이 최소화될 수 있다. 하나의 실시예에서, 캐싱 코히어런트 에이전트들 중 하나가 요청의 소스에 캐시 블록의 사본을 제공하는 "3-홉" 프로토콜이 지원될 수 있거나, 캐싱 에이전트가 없는 경우, 메모리 제어기가 사본을 제공한다. 따라서, 데이터는 3개의 "홉들"(또는 인터페이스를 통해 송신되는 메시지들)에서 제공된다: 소스로부터 메모리 제어기로의 요청, 요청에 응답할 코히어런트 에이전트로의 스누프, 및 코히어런트 에이전트로부터 요청의 소스로의 데이터의 캐시 블록에 의한 완료. 캐싱된 사본이 없는 경우들에서, 소스로부터 메모리 제어기로의 요청 및 메모리 제어기로부터 소스로의 데이터 완료의 2개의 홉들이 있을 수 있다. 추가적인 메시지들(예를 들어, 요청에 대한 다수의 스누프들이 있을 때, 요청된 상태 변경이 이루어졌음을 나타내는 다른 에이전트들로부터의 완료들)이 있을 수 있지만, 데이터 자체는 3개의 홉들 내에 제공될 수 있다. 대조적으로, 많은 캐시 코히어런시 프로토콜들은 4-홉 프로토콜들로서, 여기서 코히어런트 에이전트는 캐시 블록을 메모리 제어기로 리턴함으로써 스누프에 응답하고, 메모리 제어기는 캐시 블록을 소스에 포워딩한다. 일 실시예에서, 3-홉 흐름들에 더하여 프로토콜에 의해 4-홉 흐름들이 지원될 수 있다.
일 실시예에서, 캐시 블록에 대한 요청은 코히어런시 제어기에 의해 처리될 수 있고, 디렉토리는 스누프들(및/또는 캐싱된 사본이 없는 경우 메모리 제어기로부터의 완료)이 생성되면 업데이트될 수 있다. 이어서, 동일한 캐시 블록에 대한 다른 요청이 서비스될 수 있다. 따라서, 일부 다른 캐시 코히어런스 프로토콜들의 경우에서와 같이, 동일한 캐시 블록에 대한 요청들은 직렬화되지 않을 수 있다. 캐시 블록에 대해 미처리의(outstanding) 다수의 요청들이 있을 때 발생하는 다양한 경쟁 조건들이 있을 수 있는데, 그 이유는 후속 요청에 관련된 메시지들이 이전 요청과 관련된 메시지들 전에 주어진 코히어런트 에이전트에 도달할 수 있기 때문이다(여기서, "후속" 및 "이전"은 메모리 제어기의 코히어런시 제어기에서 순서화된 요청들을 지칭함). 에이전트들이 요청들을 분류하도록 허용하기 위해, 메시지들(예를 들어, 스누프들 및 완료들)은 요청이 프로세싱될 때 디렉토리에 의해 나타낸 바와 같이, 수신 에이전트에서 예상 캐시 상태를 포함할 수 있다. 따라서, 수신 에이전트가 메시지에 나타낸 상태의 캐시 블록을 갖지 않는 경우, 수신 에이전트는 캐시 상태가 예상 상태로 변경될 때까지 메시지의 프로세싱을 지연시킬 수 있다. 예상 상태에 대한 변경은 이전 요청과 관련된 메시지들을 통해 발생할 수 있다. 경쟁 조건들의 추가 설명 및 이들을 해결하기 위해 예상 캐시 상태를 사용하는 것이 도 29 및 도 30, 그리고 도 32 내지 도 34에 대해 아래에서 제공된다.
일 실시예에서, 캐시 상태들은 1차 공유 상태 및 2차 공유 상태를 포함할 수 있다. 1차 공유 상태는 캐시 블록의 사본을 요청 에이전트로 전송하는 책임을 담당하는 코히어런트 에이전트에 적용될 수 있다. 2차 공유 에이전트들은 주어진 요청(예를 들어, 공유 상태로 리턴하도록 허용되는 캐시 블록에 대한 판독)의 프로세싱 동안 스누프될 필요조차 없을 수 있다. 1차 및 2차 공유 상태들에 관한 추가 세부 사항은 도 40 및 도 42와 관련하여 설명될 것이다.
일 실시예에서, 적어도 2개의 유형들의 스누프들 즉, 스누프 포워드(forward) 및 스누프 백(back)이 지원될 수 있다. 스누프 포워드 메시지들은 코히어런트 에이전트로 하여금 캐시 블록을 요청 에이전트로 포워딩하게 하는 데 사용될 수 있는 반면, 스누프 백 메시지들은 코히어런트 에이전트로 하여금 캐시 블록을 메모리 제어기로 리턴하게 하는 데 사용될 수 있다. 일 실시예에서, 스누프 무효화 메시지들이 또한 지원될 수 있다(그리고 완료들에 대한 목적지를 특정하기 위해 포워드 및 백 변형들을 포함할 수 있다). 스누프 무효화 메시지는 캐시 코히어런트 에이전트로 하여금 캐시 블록을 무효화하게 한다. 스누프 포워드 및 스누프 백 흐름들을 지원하는 것은 예를 들어, 캐싱가능한 (스누프 포워드) 거동 및 캐싱가능하지 않은 (스누프 백) 거동 둘 모두를 제공할 수 있다. 스누프 포워드는 캐시 블록이 캐싱 에이전트에 제공될 때 메시지들의 수를 최소화하는 데 사용될 수 있는데, 그 이유는 캐시 에이전트가 캐시 블록을 저장하고 잠재적으로 그 내부의 데이터를 사용할 수 있기 때문이다. 한편, 비-코히어런트 에이전트는 전체 캐시 블록을 저장하지 않을 수 있고, 따라서 메모리로 다시 사본을 보내는 것은 전체 캐시 블록이 메모리 제어기에서 캡처되는 것을 보장할 수 있다. 따라서, 스누프 포워드 및 스누프 백 변형들 또는 유형들은 요청 에이전트의 능력들에 기초하여(예를 들어, 요청 에이전트의 아이덴티티에 기초하여) 그리고/또는 요청의 유형(예를 들어, 캐싱가능한 유형 또는 캐싱가능하지 않은 유형)에 기초하여 선택될 수 있다. 스누프 포워드 및 스누프 백 메시지들에 관한 추가 세부사항들이 도 37, 도 38 및 도 40과 관련하여 아래에서 제공된다. 다양한 다른 특징들이 나머지 도면들에 예시되어 있으며 아래에서 더 상세히 설명될 것이다.
도 27은 메모리들(C12A-C12m)과 같은 하나 이상의 메모리들에 커플링된 시스템 온 칩(SOC)(C10)을 포함하는 시스템의 실시예의 블록도이다. SOC(C10)는 예를 들어, 도 1에 도시된 SOC(10)의 인스턴스일 수 있다. SOC(C10)는 복수의 코히어런트 에이전트들(CA들)(C14A-C14n)을 포함할 수 있다. 코히어런트 에이전트들은 하나 이상의 캐시들(예를 들어, 캐시(C18))을 커플링하는 하나 이상의 프로세서들(P)(C16)을 포함할 수 있다. SOC(C10)는 하나 이상의 비-코히어런트 에이전트들(NCA들)(C20A-C20p)을 포함할 수 있다. SOC(C10)는 사용 동안 각자의 메모리(C12A-C12m)에 각각 커플링되는 하나 이상의 메모리 제어기들(C22A-C22m)을 포함할 수 있다. 각각의 메모리 제어기(C22A-C22m)는 디렉토리(C26)에 커플링된 코히어런시 제어기 회로(C24)(더 간략하게 "코히어런시 제어기", 또는 "CC")를 포함할 수 있다. 메모리 제어기들(C22A-C22m), 비-코히어런트 에이전트들(C20A-C20p), 및 코히어런트 에이전트들(C14A-C14n)은 다양한 컴포넌트들(C22A-C22m, C20A-C20p, C14A-C14n) 사이에서 통신하기 위해 상호연결부(C28)에 커플링될 수 있다. 명칭에서 나타나는 바와 같이, SOC(C10)의 컴포넌트들은 하나의 실시예에서 단일 집적 회로 "칩" 상으로 집적될 수 있다. 다른 실시예들에서, 다양한 컴포넌트들이 다른 칩들 상의 SOC(C10) 또는 달리 별개의 컴포넌트들 외부에 있을 수 있다. 임의의 양의 통합부 또는 별개의 컴포넌트들이 사용될 수 있다. 하나의 실시예에서, 코히어런트 에이전트들(C14A-C14n) 및 메모리 제어기들(C22A-C22m)의 서브세트들이, 도 27의 SOC(C10)에 예시된 컴포넌트들을 형성하기 위해 함께 커플링되는 다수의 집적 회로 칩들 중 하나에서 구현될 수 있다.
코히어런시 제어기(C24)는 캐시 코히어런시 프로토콜의 메모리 제어기 부분을 구현할 수 있다. 일반적으로, 코히어런시 제어기(C24)는 메모리 제어기(C22A-C22m)가 커플링되는 메모리(C12A-C12m)에 맵핑된 캐시 블록들에서 타겟팅되는 (예를 들어, 메모리 제어기들(C22A-C22m) 내의 도시되지 않은 하나 이상의 큐들을 통해) 상호연결부(C28)로부터 요청들을 수신하도록 구성될 수 있다. 디렉토리는 복수의 엔트리들을 포함할 수 있으며, 이들 각각은 시스템 내의 각자의 캐시 블록의 코히어런시 상태를 추적할 수 있다. 코히어런시 상태는 예를 들어, 다양한 코히어런트 에이전트들(C14A-C14N) 내(예를 들어, 캐시들(C18) 내의, 또는 프로세서들(C16) 내의 캐시들과 같은 다른 캐시들(도시되지 않음) 내의) 캐시 블록의 캐시 상태를 포함할 수 있다. 따라서, 주어진 요청에 대응하는 캐시 블록에 대한 디렉토리 엔트리 및 주어진 요청의 유형에 기초하여, 코히어런시 제어기(C24)는 어느 코히어런트 에이전트들(C14A-C14n)이 스누프들을 수신할지 및 스누프의 유형(예컨대, 스누프 무효화, 스누프 공유, 공유로의 변경, 소유로의 변경, 무효로의 변경 등)을 결정하도록 구성될 수 있다. 코히어런시 제어기(C24)는 또한, 스누프 포워드 또는 스누프 백이 전송될 것인지 여부를 독립적으로 결정할 수 있다. 코히어런트 에이전트들(C14A-C14n)은 스누프들을 수신하고, 코히어런트 에이전트들(C14A-C14n)에서 캐시 블록 상태를 업데이트하도록 스누프들을 프로세싱하고, 스누프를 전송한 요청 코히어런트 에이전트(C14A-C14n) 또는 메모리 제어기(C22A-22m)에 캐시 블록(스누프에 의해 명시된 경우)의 사본을 제공할 수 있다. 추가 상세 사항들이 아래에 더 제공될 것이다.
전술한 바와 같이, 코히어런트 에이전트들(C14A-C14n)은 하나 이상의 프로세서들(C16)을 포함할 수 있다. 프로세서들(C16)은 SOC(C10)의 중앙 프로세싱 장치(CPU)의 역할을 할 수 있다. 시스템의 CPU는 시스템의 메인 제어 소프트웨어, 예컨대 운영 체제를 실행하는 프로세서(들)를 포함한다. 일반적으로, 사용 동안 CPU에 의해 실행되는 소프트웨어는 시스템의 다른 컴포넌트들을 제어하여 시스템의 원하는 기능을 실현할 수 있다. 프로세서들은 또한 다른 소프트웨어, 예를 들어, 애플리케이션 프로그램들을 실행할 수 있다. 애플리케이션 프로그램들은 사용자 기능을 제공할 수 있고, 저-레벨 디바이스 제어, 스케줄링, 메모리 관리 등을 위해 운영 시스템에 의존할 수 있다. 따라서, 프로세서들은 또한 애플리케이션 프로세서들로 지칭될 수 있다. 코히어런트 에이전트들(C14A-C14n)은 캐시(C18)와 같은 다른 하드웨어 및/또는 시스템의 다른 컴포넌트들에 대한 인터페이스(예를 들어, 상호연결부(C28)에 대한 인터페이스)를 더 포함할 수 있다. 다른 코히어런트 에이전트들은 CPU들이 아닌 프로세서들을 포함할 수 있다. 또한, 다른 코히어런트 에이전트들은 프로세서들을 포함하지 않을 수 있다(예를 들어, 디스플레이 제어기 또는 기타 주변 회로부와 같은 고정 기능 회로부, 임베디드 프로세서 또는 프로세서들을 통한 프로세서 보조가 있는 고정 기능 회로부 등은 코히어런트 에이전트들일 수 있음).
일반적으로, 프로세서는 프로세서에 의해 구현된 명령어 세트 아키텍처에 정의된 명령어들을 실행하도록 구성된 임의의 회로부 및/또는 마이크로코드를 포함할 수 있다. 프로세서들은 시스템-온-칩(SOC(C10)) 또는 다른 레벨들의 통합부로서 다른 컴포넌트들과 함께 집적 회로 상에 구현된 프로세서 코어들을 망라할 수 있다. 프로세서들은 별개의 마이크로프로세서들, 멀티칩 모듈 구현부들 내에 집적화된 프로세서 코어들 및/또는 마이크로프로세서들, 다수의 집적 회로들로서 구현된 프로세서들 등을 추가로 망라할 수 있다. 주어진 코히어런트 에이전트(C14A-C14n) 내의 프로세서들(C16)의 수는 다른 코히어런트 에이전트(C14A-C14n) 내의 프로세서들(C16)의 수와 상이할 수 있다. 일반적으로, 하나 이상의 프로세서들이 포함될 수 있다. 추가적으로, 프로세서들(C16)은 마이크로아키텍처 구현, 성능 및 전력 특성들 등에서 상이할 수 있다. 일부 경우들에서, 프로세서들은 이들이 구현하는 명령 세트 아키텍처, 이들의 기능(예를 들어, CPU, 그래픽 프로세싱 유닛(GPU) 프로세서들, 마이크로제어기들, 디지털 신호 프로세서들, 이미지 신호 프로세서들 등) 등에서도 상이할 수 있다.
캐시들(C18)은 세트 연관, 직접 맵핑 또는 완전 연관과 같은 임의의 용량 및 구성을 가질 수 있다. 캐시 블록 크기는 임의의 원하는 크기(예를 들어, 32 바이트, 64 바이트, 128 바이트 등)일 수 있다. 캐시 블록은 캐시(C18) 내의 할당 및 할당해제(deallocation)의 단위일 수 있다. 추가적으로, 캐시 블록은 본 실시예에서 코히어런시가 유지되는 단위(예를 들어, 메모리 어드레스 공간의 정렬된 코히어런스-그래뉼-크기의 세그먼트)일 수 있다. 캐시 블록은 또한 일부 경우들에서 캐시 라인으로 지칭될 수 있다.
코히어런시 제어기(C24) 및 디렉토리(C26)에 추가로, 메모리 제어기들(C22A-C22m)은 일반적으로, SOC(C10)의 다른 컴포넌트들로부터 메모리 동작들을 수신하고, 메모리들(C12A-C12m)에 액세스하여 메모리 동작들을 완료하기 위한 회로부를 포함할 수 있다. 메모리 제어기들(C22A-C22m)는 임의의 유형의 메모리(C12A-C12m)에 액세스하도록 구성될 수 있다. 예를 들어, 메모리들(C12A-C12m)은 정적 랜덤 액세스 메모리(SRAM), 이중 데이터 레이트(DDR, DDR2, DDR3, DDR4 등) DRAM, 비휘발성 메모리들, 그래픽 DDR DRAM(GDDR)과 같은 그래픽 DRAM, 및 고대역폭 메모리들(HBM)을 포함하는 동기식 DRAM(SDRAM)과 같은 동기 RAM(DRAM)일 수 있다. 저전력/모바일 버전들의 DDR DRAM(예컨대, LPDDR, mDDR 등)이 지원될 수 있다. 메모리 제어기들(C22A-C22m)는, 동작들을 순서화하기 위한(그리고 잠재적으로 재정렬하기 위한) 그리고 동작들을 메모리들(C12A-C12m)에 제시하기 위한, 메모리 동작들에 대한 큐(queue)들을 포함할 수 있다. 메모리 제어기들(C22A-C22m)은 메모리로의 기록을 대기하는 기록 데이터 및 메모리 동작의 소스로의 리턴을 대기하는 판독 데이터를 저장하기 위한 데이터 버퍼들을 더 포함할 수 있다(스누프에서 데이터가 제공되지 않는 경우). 일부 실시예들에서, 메모리 제어기(C22A-C22m)는 최근에 액세스된 메모리 데이터를 저장하는 메모리 캐시를 포함할 수 있다. SOC 구현예들에서, 예를 들어, 메모리 캐시는, 곧 다시 액세스될 것으로 예상되는 경우에 메모리(C12A-C12m)로부터의 데이터의 재-액세스를 피함으로써, SOC에서의 전력 소모를 감소시킬 수 있다. 일부 경우들에 있어서, 메모리 캐시는, 또한, 소정 컴포넌트들만을 서빙하는 프라이빗 캐시들, 예컨대 프로세서들(C16) 내의 캐시(C18) 또는 캐시들과는 대조적인 시스템 캐시로서 지칭될 수 있다. 추가적으로, 일부 실시예들에서, 시스템 캐시는 메모리 제어기들(C22A-C22m) 내에 위치될 필요가 없다.
비-코히어런트 에이전트들(C20A-C20p)은 일반적으로 SOC(C10)(예를 들어, "주변 장치들")에 포함된 다양한 추가 하드웨어 기능을 포함할 수 있다. 예를 들어, 주변기기들은 비디오 주변기기들, 예컨대 카메라 또는 다른 이미지 센서로부터의 이미지 캡처 데이터를 프로세싱하도록 구성된 이미지 신호 프로세서, GPU들, 비디오 인코더/디코더, 스케일러, 로테이터, 블렌더 등을 포함할 수 있다. 주변기기들은 오디오 주변기기들, 예컨대 마이크로폰, 스피커, 마이크로폰 및 스피커에 대한 인터페이스, 오디오 프로세서, 디지털 신호 프로세서, 믹서 등을 포함할 수 있다. 주변기기들은, USB(Universal Serial Bus), PCIe(peripheral component interconnect(PCI) Express)를 비롯한 PCI, 직렬 및 병렬 포트 등과 같은 인터페이스들을 포함한, SOC(C10) 외부의 다양한 인터페이스들에 대한 인터페이스 제어기들을 포함할 수 있다. 주변기기들은 매체 액세스 제어기(MAC)들과 같은 네트워킹 주변기기들을 포함할 수 있다. 하드웨어의 임의의 세트가 포함될 수 있다. 비-코히어런트 에이전트들(C20A-C20p)은 또한 일 실시예에서, 주변 장치들의 세트에 대한 브리지들을 포함할 수 있다.
상호연결부(C28)는 SOC(C10)의 컴포넌트들 간의 통신을 위한 임의의 통신 상호연결부 및 프로토콜일 수 있다. 상호연결부(C28)는 공유 버스 구성들, 크로스 바(cross bar) 구성들, 및 브리지들을 이용한 계층적 버스들을 포함하여, 버스-기반일 수 있다. 상호연결부(C28)는 또한 패킷-기반형 또는 회로-스위칭형일 수 있고, 브리지들을 갖는 계층구조, 크로스 바, 포인트-투-포인트(point-to-point), 또는 다른 상호연결부들일 수 있다. 상호연결부(C28)는 일 실시예에서 다수의 독립적인 통신 패브릭들을 포함할 수 있다.
일반적으로, 각각의 컴포넌트(C22A-C22m, C20A-C20p, C14A-C14n)의 수는 실시예마다 다를 수 있고, 임의의 수가 사용될 수 있다. "m", "p" 및 "n"-접미사로 나타낸 바와 같이, 한 유형의 컴포넌트의 수는 다른 유형의 컴포넌트의 수와 상이할 수 있다. 그러나, 주어진 유형의 수가 다른 유형의 수와 동일할 수도 있다. 추가적으로, 도 27의 시스템은 다수의 메모리 제어기들(C22A-C22m)로 예시되어 있지만, 하나의 메모리 제어기(C22A-C22m)를 갖는 실시예들이 또한 고려되고, 본 명세서에 설명된 캐시 코히어런시 프로토콜을 구현할 수 있다.
다음으로 도 28을 참조하면, 스케일링가능한 캐시 코히어런시 프로토콜의 일 실시예에 따른, 캐싱가능한 판독 배타적 요청(cacheable read exclusive request, CRdEx)에 대한 코히어런트 트랜잭션을 수행하는 복수의 코히어런트 에이전트들(C12A-12D) 및 메모리 제어기(C22A)를 예시한 블록도가 도시되어 있다. 판독 배타적 요청은 캐시 블록의 배타적 사본에 대한 요청일 수 있어서, 코히어런트 에이전트들(C14A-C14D)이 무효화되는 임의의 다른 사본들 및 요청자는 트랜잭션이 완료될 때, 유일한 유효 사본을 갖는다. 캐시 블록에 할당된 메모리 위치들을 갖는 메모리(C12A-C12m)는 메모리(C12A-C12m) 내의 캐시 블록에 할당된 위치에서의 데이터를 가지지만, 요청기가 데이터를 수정하는 경우 그 데이터도 "스테일(stale)"이 될 것이다. 판독 배타적 요청은 예를 들어, 요청기가 캐시 코히어런시 프로토콜에서 추가 요청을 전송하지 않고 캐시 블록을 수정하는 능력을 갖도록 사용될 수 있다. 배타적 사본이 필요하지 않은 경우 다른 요청들이 사용될 수 있다(예를 들어, 기록가능한 사본이 요청기에게 반드시 필요한 것이 아니라면 판독 공유 요청(CRdSh)이 사용될 수 있음). "CRdEx" 라벨에서 "C"는 "캐싱가능함"을 지칭할 수 있다. 다른 트랜잭션들은 비-코히어런트 에이전트들(예를 들어, 도 27의 에이전트들(C20A-C20p)에 의해 발행될 수 있고, 이러한 트랜잭션들은 "NC"(예를 들어, NCRd)로 라벨링될 수 있다. 트랜잭션에서의 요청 유형들 및 다른 메시지들의 추가 논의는 일 실시예에 대해 도 40과 관련하여 아래에서 더 제공되고, 캐시 상태들의 추가 논의는 일 실시예에 대해 도 39와 관련하여 아래에서 더 제공된다.
도 28의 예에서, 코히어런트 에이전트(C14A)는 판독 배타적 요청을 (이는 판독 배타적 요청에서 어드레스에 할당된 메모리 위치들을 제어하는) 메모리 제어기(C22A)로 전송함으로써 트랜잭션을 개시할 수 있다. 메모리 제어기(C22A)(그리고 더 구체적으로는 메모리 제어기(C22A) 내의 코히어런시 제어기(C24))는 디렉토리(C26) 내의 엔트리를 판독하고, 코히어런트 에이전트(C14D)가 1차 공유 상태(P)의 캐시 블록을 갖는 것으로 결정할 수 있고, 따라서 요청 코히어런트 에이전트(C14D)에 캐시 블록을 제공할 코히어런트 에이전트일 수 있다. 코히어런시 제어기(C24)는 코히어런트 에이전트(C14D)에 대해 스누프 포워드(SnpFwd[st]) 메시지를 생성할 수 있고, 스누프 포워드 메시지를 코히어런트 에이전트(C14D)로 발행할 수 있다. 코히어런시 제어기(C24)는 디렉토리(C26)에 따라 스누프를 수신하는 코히어런트 에이전트 내의 현재 상태의 식별자를 포함할 수 있다. 예를 들어, 이 경우, 현재 상태는 디렉토리(C26)에 따라 코히어런트 에이전트(C14D)에서 "P"이다. 스누프에 기초하여, 코히어런트 에이전트(C14D)는 캐시 블록을 저장하고 있는 캐시에 액세스할 수 있고, 캐시 블록에 대응하는 데이터로 필 완료(도 28의 Fill)를 생성할 수 있다. 코히어런트 에이전트(C14D)는 필 완료를 코히어런트 에이전트(C14A)로 전송할 수 있다. 따라서, 시스템은 데이터를 요청기에게 전달하기 위한 "3-홉" 프로토콜을 구현한다: CRdEx, SnpFwd[st], 및 Fill. SnpFwd[st] 메시지에서 "[st]"로 나타낸 바와 같이, 스누프 포워드 메시지는 또한, 스누프를 프로세싱한 후에 코히어런트 에이전트가 전환될 캐시 블록의 상태로 코딩될 수 있다. 다양한 실시예들에서, 메시지의 상이한 변형들이 있을 수 있거나, 상태가 메시지 내의 필드로서 전달될 수 있다. 도 28의 예에서, 요청이 판독 배타적 요청이기 때문에, 코히어런트 에이전트 내의 캐시 블록의 새로운 상태는 무효일 수 있다. 다른 요청들은 새로운 공유 상태를 허용할 수 있다.
추가적으로, 코히어런시 제어기(C24)는 캐시 블록에 대한 디렉토리 엔트리로부터 코히어런트 에이전트들(C14B-C14C)이 2차 공유 상태(S)에서 캐시 블록을 갖는다고 결정할 수 있다. 따라서, 스누프들은, (i) 캐시 블록의 캐싱된 사본을 갖고; (ii) 코히어런트 에이전트 내의 블록의 상태가 트랜잭션에 기초하여 변경되는 각각의 코히어런트 에이전트로 발행될 수 있다. 코히어런트 에이전트(C14A)가 배타적 사본을 획득하고 있기 때문에, 공유된 사본들은 무효화되어야 하고, 따라서, 코히어런시 제어기(C24)는 코히어런트 에이전트들(C14B-C14C)에 대한 스누프 무효화(SnpInvFw) 메시지들을 생성할 수 있고, 스누프들을 코히어런트 에이전트들(C14B-C14C)로 발행할 수 있다. 스누프 무효화 메시지들은 코히어런트 에이전트들(C14B-C14C) 내의 현재 상태가 '공유'임을 나타내는 식별자들을 포함한다. 코히어런트 에이전트들(C14B-C14C)은 스누프 무효화 요청들을 프로세싱하고, 확인 응답(Ack) 완료들을 코히어런트 에이전트(C14A)로 제공할 수 있다. 예시된 프로토콜에서, 스누핑 에이전트들로부터 코히어런시 제어기(C24)로의 메시지들은 본 실시예에서 구현되지 않는다는 것에 유의한다. 코히어런시 제어기(C24)는 스누프들의 발행에 기초하여 디렉토리 엔트리를 업데이트할 수 있고, 다음 트랜잭션을 프로세싱할 수 있다. 따라서, 전술한 바와 같이, 동일한 캐시 블록에 대한 트랜잭션들은 본 실시예에서 직렬화되지 않을 수 있다. 코히어런시 제어기(C24)는 동일한 캐시 블록에 대한 추가적인 트랜잭션들을 시작할 수 있게 하고, 어떤 스누프들이 어떤 트랜잭션들에 속하는지를 식별하기 위해 스누프들 내의 현재 상태 표시에 의존할 수 있다(예를 들어, 동일한 캐시 블록에 대한 다음 트랜잭션은 완료된 이전 트랜잭션에 대응하는 캐시 상태들을 검출할 것임). 도시된 실시예에서, 스누프 무효화 메시지는 SnpInvFw 메시지인데, 그 이유는 완료가 3-홉 프로토콜의 일부로서 개시 코히어런트 에이전트(C14A)로 전송되기 때문이다. 일 실시예에서, 4-홉 프로토콜이 또한 특정 에이전트들에 대해 지원된다. 이러한 실시예에서, 스누핑 에이전트가 완료를 다시 코히어런시 제어기(C24)로 전송할 것임을 나타내기 위해 SnpInvBk 메시지가 사용될 수 있다.
따라서, 스누프들의 캐시 상태 식별자들은 코히어런트 에이전트들이 동일한 캐시 블록에 대한 상이한 트랜잭션들을 형성하는 메시지들 사이의 경쟁들을 해결할 수 있게 할 수 있다. 즉, 메시지들은 대응하는 요청들이 코히어런시 제어기에 의해 프로세싱되었던 순서로부터 비순차적으로(out of order) 수신될 수 있다. 코히어런시 제어기(C24)가 디렉토리(C26)를 통해 동일한 캐시 블록에 대한 요청들을 프로세싱하는 순서는 요청들의 순서를 정의할 수 있다. 즉, 코히어런시 제어기(C24)는 주어진 메모리 제어기(C22A-C22m)에서 수신된 트랜잭션들에 대한 순서화 지점일 수 있다. 한편, 메시지들의 직렬화는 각각의 메시지에 대응하는 현재 캐시 상태 및 코히어런트 에이전트들(C14A-C14n) 내의 캐시 상태에 기초하여 코히어런트 에이전트들(C14A-C14n)에서 관리될 수 있다. 주어진 코히어런트 에이전트는 스누프에 기초하여 코히어런트 에이전트 내의 캐시 블록에 액세스할 수 있고, 스누프에 특정된 캐시 상태를 캐시 내의 현재 캐시 상태와 비교하도록 구성될 수 있다. 상태들이 매칭되지 않는 경우, 스누프는 다른 트랜잭션 이후에 순서화되는 트랜잭션에 속하며, 이는 에이전트의 캐시 상태를 스누프에 특정된 상태로 변경한다. 따라서, 스누핑 에이전트는 제1 요청과는 상이한 요청과 관련된 상이한 통신에 응답하여 제2 상태가 제1 상태로 변경될 때까지, 제1 상태가 제2 상태와 매칭되지 않는 것에 기초하여 스누프의 프로세싱을 지연시키도록 구성될 수 있다. 예를 들어, 상태는 상이한 트랜잭션으로부터의 스누핑 에이전트에 의해 수신된 필 완료에 기초하여 변경될 수 있다.
일 실시예에서, 스누프들은 트랜잭션에 대응하는 완료들의 수를 나타내는 완료 카운트(Cnt)를 포함할 수 있으므로, 요청기는 트랜잭션에 관련된 모든 완료들이 수신된 시기를 결정할 수 있다. 코히어런시 제어기(C24)는 캐시 블록에 대한 디렉토리 엔트리에 나타낸 상태들에 기초하여 완료 카운트를 결정할 수 있다. 완료 카운트는 예를 들어, 완료들의 수에서 1을 뺀 수(예를 들어, 도 28의 예에서는 완료들이 3이므로 2)일 수 있다. 이러한 구현예는, 트랜잭션에 대한 초기 완료가 요청 에이전트에 의해 수신될 때 완료 카운트가 트랜잭션에 대한 완료 카운터에 대한 초기화로서 사용되도록 허용할 수 있다(예를 들어, 이미 완료 카운트를 전달하는 완료의 수신을 반영하기 위해 이미 감소됨). 일단 카운트가 초기화되면, 트랜잭션에 대한 추가 완료들은 요청 에이전트가 완료 카운터를 업데이트하게 할 수 있다(예를 들어, 카운터를 감분시킴). 다른 실시예들에서, 실제 완료 카운트가 제공될 수 있고, 완료 카운트를 초기화하기 위해 요청기에 의해 감분될 수 있다. 일반적으로, 완료 카운트는 트랜잭션이 완전히 완료되기 전에 요청기가 관찰하게 될 완료들의 수를 식별하는 임의의 값일 수 있다. 즉, 요청 에이전트는 완료 카운터에 기초하여 요청을 완료할 수 있다.
도 29 및 도 30은 동일한 캐시 블록에 대한 트랜잭션들로 발생할 수 있는 예시적인 경쟁 조건들, 및 트랜잭션이 메모리 제어기에서 프로세싱될 때 디렉토리에 반영된 바와 같은 주어진 에이전트에 대한 현재 캐시 상태("예상 캐시 상태"라고도 지칭함) 및 (예를 들어, 캐시 데이터를 일시적으로 저장할 수 있는 주어진 에이전트의 캐시(들) 또는 버퍼들에 반영된 바와 같은) 주어진 에이전트 내의 현재 캐시 상태의 사용을 예시한다. 도 29 및 도 30에서, 코히어런트 에이전트들은 CA0 및 CA1로서 열거되고, 캐시 블록과 연관된 메모리 제어기는 MC로서 도시된다. CA0, CA1 및 MC에 대한 수직선들(30, 32, 34)은 트랜잭션들에 대응하는 다양한 메시지들의 소스(화살표의 베이스) 및 메시지들의 목적지(화살표의 헤드)를 예시한다. 도 29 및 도 30에서 시간은 상부에서 하부로 진행한다. 메모리 제어기가 커플링된 메모리가 캐시 블록의 어드레스에 할당된 메모리 위치들을 포함하는 경우, 메모리 제어기는 캐시 블록과 연관될 수 있다.
도 29는 하나의 트랜잭션에 대한 필 완료와 동일한 캐시 블록에 대한 상이한 트랜잭션에 대한 스누프 사이의 경쟁 조건을 예시한다. 도 29의 예에서, CA0은 MC에 대한 CRdEx 요청으로 판독 배타적 트랜잭션을 개시한다(화살표(36)). CA1도 역시 CRdEx 요청으로 판독 배타적 트랜잭션을 개시한다(화살표(38)). CA0 트랜잭션은 먼저 MC에 의해 프로세싱되어, CA1 요청보다 앞서 순서화된 CA0 트랜잭션을 확립한다. 이 예에서, 디렉토리는 시스템에 캐시 블록의 캐싱된 사본들이 없음을 나타내고, 따라서 MC는 배타적 상태의 필로 CA0 요청에 응답한다(FillE, 화살표(40)). MC는 CA0에 대한 배타적 상태로 캐시 블록의 디렉토리 엔트리를 업데이트한다.
MC는 프로세싱을 위해 CA1로부터 CRdEx respect를 선택하고, CA0이 배타적 상태의 캐시 블록을 가짐을 검출한다. 따라서, MC는 CA0에 대한 스누프 포워드 요청을 생성하여, CA0이 그의 캐시(들) 내의 캐시 블록을 무효화하고 캐시 블록을 CA1에 제공하도록 요청할 수 있다(SnpFwdI). 스누프 포워드 요청은 또한 CA0의 캐시 블록에 대한 E 상태의 식별자를 포함하는데, 그것이 CA0에 대해 디렉토리에 반영된 캐시 상태이기 때문이다. MC는 스누프를 발행할 수 있고(화살표(42)), CA1이 배타적 사본을 갖고 CA0이 더 이상 유효 사본을 갖지 않는다는 것을 나타내도록 디렉토리를 업데이트할 수 있다.
스누프 및 필 완료는 정시에 어느 하나의 순서로 CA0에 도달할 수 있다. 메시지들은 상이한 가상 채널들에서 이동할 수 있고/있거나 상호연결부에서 다른 지연들은 메시지들이 어느 순서로든 도달하게 할 수 있다. 예시된 예에서, 스누프는 필 완료 이전에 CA0에 도달한다. 그러나, 스누프(E) 내의 예상 상태가 CA0(I) 내의 캐시 블록의 현재 상태와 매칭되지 않기 때문에, CA0은 스누프의 프로세싱을 지연시킬 수 있다. 후속적으로, 필 완료는 CA0에 도달할 수 있다. CA0은 캐시 블록을 캐시에 기록하고 상태를 '배타적'(E)으로 설정할 수 있다. CA0은 또한 CA0에서 태스크의 포워드 진행을 지원하기 위해 캐시 블록에서 적어도 하나의 동작을 수행하도록 허용될 수 있고, 그 동작은 상태를 '수정된'(M)으로 변경할 수 있다. 캐시 코히어런스 프로토콜에서, 디렉토리(C26)는 M 상태를 개별적으로 추적하지 않을 수 있지만(예를 들어, 이는 E로 취급될 수 있음), E 상태를 스누프 내의 예상되는 상태로서 매칭할 수 있다. CA0은 수정된 상태로, CA1에 필 완료를 발행할 수 있다(FillM, 화살표(44)). 따라서, 2개의 트랜잭션들에 대한 스누프와 필 완료 사이의 경쟁 조건이 올바르게 처리되었다.
CRdEx 요청이 CA0으로부터의 CRdEx 요청에 후속하여 CA1에 의해 발행되고 있으나, 도 29의 예에서, CRdEx 요청은 CA0으로부터의 CRdEx 요청 전에 CA1에 의해 발행될 수 있고, CA0으로부터의 CRdEx 요청은 여전히 MC에 의해 CA1로부터의 CRdEx 요청보다 먼저 순서화될 수 있는데, 이는 MC가 트랜잭션들에 대한 순서화 지점이기 때문이다.
도 30은 하나의 코히어런트 트랜잭션에 대한 스누프와 동일한 캐시 블록에 대한 다른 코히어런트 트랜잭션에 대한 완료 사이의 경쟁 조건을 예시한다. 도 30에서, CA0은 라이트백(write back) 트랜잭션(CWB)을 개시하여 수정된 캐시 블록을 메모리에 기록하지만(화살표(46)), 실제로 캐시 블록은 전술된 바와 같이 디렉토리에서 '배타적'인 것으로 추적될 수 있다. CWB는, 예를 들어, CA0이 자신의 캐시들로부터 캐시 블록을 축출하지만 캐시 블록이 수정된 상태에 있는 경우 전송될 수 있다. CA1은 동일한 캐시 블록에 대한 판독 공유 트랜잭션(CRdS)을 개시한다(화살표(48)). CA1 트랜잭션은 MC에 의해 CA0 트랜잭션보다 앞서 순서화되며, 이는 캐시 블록에 대한 디렉토리 엔트리를 판독하고, CA0이 배타적 상태의 캐시 블록을 가짐을 결정한다. MC는 CA0에 스누프 포워드 요청을 발행하고, 2차 공유 상태로의 변경을 요청한다(SnpFwdS, 화살표(50)). 스누프 내의 식별자는 CA0 내의 '배타적'(E)인 현재 캐시 상태를 나타낸다. MC는, (이전에 배타적인 카피가 CA1에 제공되고 있기 때문에) CA0이 2차 공유 상태의 캐시 블록을 갖고, CA1이 1차 공유 상태의 사본을 가짐을 표시하기 위해 디렉토리 엔트리를 업데이트한다.
MC는 CA0으로부터의 CWB 요청을 프로세싱하여 캐시 블록에 대한 디렉토리 엔트리를 다시 판독한다. MC는 Ack 완료를 발행하여, Ack 완료 내의 캐시 상태의 식별자로 현재 캐시 상태가 CA0에서 2차 공유(S)임을 나타낸다(화살표(52)). 예상 상태 '2차 공유'가 현재 상태 '수정된'과 매칭되지 않는 것에 기초하여, CA0은 Ack 완료의 프로세싱을 지연시킬 수 있다. Ack 완료를 프로세싱하는 것은 CA0이 캐시 블록을 폐기하는 것을 허용할 것이고, 그러면 CA0은 이후 도착하는 SnpFwdS 요청에 응답하여 CA1에 제공할 캐시 블록의 사본을 갖지 않을 것이다. SnpFwdS 요청이 수신될 때, CA0은 CA1에 필 완료를 제공하여(화살표(54)), 1차 공유 상태(P)의 캐시 블록을 제공할 수 있다. CA0은 또한 CA0 내의 캐시 블록의 상태를 '2차 공유'(S)로 변경할 수 있다. 상태의 변경은 Ack 완료에 대한 예상 상태와 매칭되고, 따라서 CA0은 캐시 블록을 무효화하고 CWB 트랜잭션을 완료할 수 있다.
도 31은 코히어런트 에이전트들(C14A)의 하나의 실시예의 일부분의 하나의 실시예의 더 상세한 블록도이다. 다른 코히어런트 에이전트들(C14B-C14n)이 유사할 수 있다. 예시된 실시예에서, 코히어런트 에이전트(C14A)는 요청 제어 회로(C60) 및 요청 버퍼(C62)를 포함할 수 있다. 요청 버퍼(C62)는 요청 제어 회로(C60)에 커플링되고, 요청 버퍼(C62)와 요청 제어 회로(C60) 둘 모두는 캐시(C18) 및/또는 프로세서들(C16) 및 상호연결부(C28)에 커플링된다.
요청 버퍼(C62)는 코히어런트 캐시 블록들에 대해 캐시(C18)/프로세서들(C16)에 의해 생성된 복수의 요청들을 저장하도록 구성될 수 있다. 즉, 요청 버퍼(C62)는 상호연결부(C28) 상의 트랜잭션들을 개시하는 요청들을 저장할 수 있다. 요청 버퍼(C62)의 하나의 엔트리가 도 31에 예시되며, 다른 엔트리들은 유사할 수 있다. 엔트리는 유효(V) 필드(C63), 요청(Req.) 필드(C64), 카운트 유효(CV) 필드(C66), 및 완료 카운트(CompCnt) 필드(C68)를 포함할 수 있다. 유효 필드(C63)는 엔트리가 유효한지 여부를 나타내는 유효 표시(예를 들어, 유효 비트)를 저장할 수 있다(예를 들어, 미처리 요청을 저장함). 요청 필드(C64)는 요청을 정의하는 데이터(예를 들어, 요청 유형, 캐시 블록의 어드레스, 트랜잭션에 대한 태그 또는 다른 식별자 등)를 저장할 수 있다. 카운트 유효 필드(C66)는 완료 카운트 필드(C68)에 대한 유효 표시를 저장하여 완료 카운트 필드(C68)가 초기화되었음을 나타낼 수 있다. 요청 제어 회로(C68)는 요청을 위해 상호연결부(C28)로부터 수신된 완료를 프로세싱할 때 카운트 유효 필드(C66)를 사용하여, 요청 제어 회로(C68)가 완료에 포함된 완료 카운트로 필드를 초기화할지(카운트 필드 유효하지 않음) 또는 완료 카운트를 감소시키는 것과 같이 완료 카운트를 업데이트할지(카운트 필드 유효)를 결정할 수 있다. 완료 카운트 필드(C68)는 현재 완료 카운트를 저장할 수 있다.
요청 제어 회로(C60)는 캐시(18)/프로세서들(16)로부터 요청들을 수신할 수 있고, 요청 버퍼(C62) 내의 요청 버퍼 엔트리들을 요청들에 할당할 수 있다. 요청 제어 회로(C60)는 버퍼(C62) 내의 요청들을 추적하여, 요청들이 상호연결부(C28) 상에서 (예를 들어, 임의의 분류의 중재 기법에 따라) 전송되게 하고, 요청 내의 수신된 완료들을 추적하여 트랜잭션을 완료하고 캐시 블록을 캐시(C18)/프로세서들(C16)로 포워딩할 수 있다.
이제 도 32를 참조하면, 프로세싱될 요청을 수신하는 것에 기초하여 메모리 제어기들(C22A-C22m) 내의 코히어런시 제어기(C24)의 하나의 실시예의 동작을 예시한 흐름도가 도시되어 있다. 도 32의 동작은 임의의 원하는 중재 알고리즘을 통해 메모리 제어기(C22A-C22m) 내의 수신된 요청들 중에서 서비스를 위한 요청이 선택되었을 때 수행될 수 있다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 코히어런시 제어기(C24)의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 코히어런시 제어기(C24)는 도 32에 도시된 동작을 구현하도록 구성될 수 있다.
코히어런시 제어기(C24)는 요청의 어드레스에 기초하여 디렉토리(C26)로부터의 디렉토리 엔트리를 판독하도록 구성될 수 있다. 코히어런시 제어기(C24)는 요청의 유형(예를 들어, 요청기에 의한 캐시 블록에 대해 요청된 상태) 및 디렉토리 엔트리에 나타낸 바와 같은 다양한 코히어런트 에이전트들(C14A-C14n) 내의 캐시 블록의 현재 상태에 기초하여 어떤 스누프들이 생성될 것인지를 결정하도록 구성될 수 있다(블록(C70)). 또한, 코히어런시 제어기(C24)는 디렉토리에 나타낸 바와 같이 스누프를 수신할 코히어런트 에이전트(C14A-C14n)에 대한 현재 상태에 기초하여, 각각의 스누프 내에 포함될 현재 상태를 생성할 수 있다. 코히어런시 제어기(C24)는 스누프에 현재 상태를 삽입하도록 구성될 수 있다(블록(C72)). 코히어런시 제어기(C24)는 또한 완료 카운트를 생성하고, 각각의 스누프 내에 완료 카운트를 삽입하도록 구성될 수 있다(블록(C74)). 이전에 언급된 바와 같이, 일 실시예에서, 완료 카운트는 완료들의 수에서 1을 뺀 수, 또는 완료들의 총 개수일 수 있다. 완료들의 수는 스누프들의 수일 수 있고, 메모리 제어기(C22A-C22m)가 캐시 블록을 제공할 경우, 메모리 제어기(C22A-C22m)로부터의 필 완료일 수 있다. 캐싱가능한 요청에 대한 스누프가 있는 대부분의 경우들에서, 스누핑된 코히어런트 에이전트들(C14A-C14n) 중 하나는 캐시 블록을 제공할 수 있고, 따라서 완료들의 수는 스누프들의 수일 수 있다. 그러나, 예를 들어, 코히어런트 에이전트(C14A-C14n)가 캐시 블록의 사본을 갖지 않는 경우(스누프들 없음), 메모리 제어기는 필 완료를 제공할 수 있다. 코히어런시 제어기(C24)는 코히어런트 에이전트들(C14A-C14n)로의 전송을 위한 스누프들을 큐잉하도록 구성될 수 있다(블록(C76)). 일단 스누프들이 성공적으로 큐잉되면, 코히어런시 제어기(C24)는 요청의 완료를 반영하기 위해 디렉토리 엔트리를 업데이트하도록 구성될 수 있다(블록(C78)). 예를 들어, 업데이트들은 스누프들에 의해 요청된 캐시 상태들과 매칭되도록 디렉토리 엔트리 내의 추적된 캐시 상태들을 변경하고, 트랜잭션이 완료되면, 배타적, 수정, 소유 또는 1차 공유 상태의 캐시 블록을 가질 코히어런트 에이전트(C14A-C14n)에 캐시 블록의 사본을 제공할 에이전트를 나타내는 에이전트 식별자를 변경할 수 있다.
이제 도 33을 참조하면, 요청 버퍼(C62) 내의 미처리 요청에 대한 완료를 수신하는 것에 기초하여, 코히어런트 에이전트(C14A-C14n) 내의 요청 제어 회로(C60)의 하나의 실시예의 동작을 예시한 흐름도가 도시되어 있다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 요청 제어 회로(C60)의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 요청 제어 회로(C60)는 도 33에 도시된 동작을 구현하도록 구성될 수 있다.
요청 제어 회로(C60)는 수신된 완료가 연관되는 요청과 연관되는 요청 버퍼(C62) 내의 요청 버퍼 엔트리에 액세스하도록 구성될 수 있다. 카운트 유효 필드(C66)에서 완료 카운트가 유효하다는 것을 나타내는 경우(결정 블록(C80), "예" 레그), 요청 제어 회로(C60)는 요청 카운트 필드(C68) 내의 카운트를 감소시키도록 구성될 수 있다(블록(C82)). 카운트가 0인 경우(결정 블록(C84), "예" 레그), 요청이 완료되고, 요청 제어 회로(C60)는 완료의 표시(및 적용가능한 경우, 수신된 캐시 블록)를 캐시(C18) 및/또는 요청을 생성한 프로세서들(C16)에 포워딩하도록 구성될 수 있다(블록(C86)). 완료는 캐시 블록의 상태가 업데이트되게 할 수 있다. 업데이트 후 캐시 블록의 새로운 상태가 대기 중인 스누프에서 예상 상태와 일치하는 경우(결정 블록(C88), "예" 레그), 요청 제어 회로(C60)는 대기 중인 스누프를 프로세싱하도록 구성될 수 있다(블록(C90)). 예를 들어, 요청 제어 회로(C60)는 스누프를 캐시(C18)/프로세서들(C16)로 전달하여, 대기 중인 스누프에 대응하는 완료를 생성하도록(그리고 스누프에 의해 나타낸 바와 같이 캐시 블록의 상태를 변경하도록) 구성될 수 있다.
새로운 상태가 예상 상태와 동일한 경우, 새로운 상태는 예상 상태와 일치할 수 있다. 추가적으로, 예상 상태가 새로운 상태에 대해 디렉토리(C26)에 의해 추적되는 상태인 경우 새로운 상태는 예상 상태와 일치할 수 있다. 예를 들어, 수정된 상태는 하나의 실시예에서 디렉토리(C26)에서 배타적 상태로서 추적되고, 따라서 수정된 상태가 예상 상태 '배타적'과 일치한다. 새로운 상태는, 예를 들어, 캐시 블록을 '배타적'으로 갖고 캐시 블록을 로컬적으로 수정한 다른 코히어런트 에이전트(C14A-C14n)에 의해 전송된 필 완료 내에 상태가 제공되는 경우, 수정될 수 있다.
카운트 유효 필드(C66)에서 완료 카운트가 유효함을 나타내고(결정 블록(C80)), 완료 카운트가 감소 후 0이 아님을 나타내는 경우(결정 블록(C84), "아니오" 레그), 요청은 완료되지 않고, 따라서 요청 버퍼(C62)에서 대기 상태로 유지된다(그리고 요청이 완료되기를 기다리고 있는 임의의 대기 중인 스누프는 대기 중인 상태로 유지될 수 있다). 카운트 유효 필드(C66)에서 완료 카운트가 유효하지 않음을 나타내는 경우(결정 블록(C80), "아니오" 레그), 요청 제어 회로(C60)는 완료 카운트를 완료하여 제공된 완료 카운트 필드(C68)를 초기화하도록 구성될 수 있다(블록(C92)). 요청 제어 회로(C60)는 여전히, 완료 카운트가 0인 것을 체크하도록 구성될 수 있으며(예컨대, 요청에 대한 단지 하나의 완료가 존재할 경우, 완료 시 완료 카운트가 0일 수 있음)(결정 블록(C84)), 프로세싱은 위에서 논의된 바와 같이 계속될 수 있다.
도 34는 스누프를 수신하는 것에 기초한 코히어런트 에이전트(C14A-C14n)의 하나의 실시예의 동작을 예시한 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 코히어런트 에이전트(14CA-C14n) 내의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 코히어런트 에이전트(14CA-C14n)는 도 34에 도시된 동작을 구현하도록 구성될 수 있다.
코히어런트 에이전트(C14A-C14n)는 캐시(C18) 내의 상태에 대조하여 스누프 내의 예상 상태를 체크하도록 구성될 수 있다(결정 블록(C100)). 예상 상태가 캐시 블록의 현재 상태와 일치하지 않는 경우(결정 블록(C100), "아니오" 레그), 캐시 블록의 현재 상태를 예상 상태로 변경할 완료는 미해결 상태이다. 완료는 스누프에 대응하는 트랜잭션 이전에 순서화된 트랜잭션에 대응한다. 따라서, 코히어런트 에이전트(C14A-C14n)는 스누프를 대기시켜, 현재 상태가 스누프에 나타낸 예상 상태로 변경될 때까지 스누프의 프로세싱을 지연시키도록 구성될 수 있다(블록(C102)). 대기 중인 스누프는 일 실시예에서 대기 중인 스누프들을 위해 특별히 제공된 버퍼에 저장될 수 있다. 대안적으로, 대기 중인 스누프는 도 36과 관련하여 아래에서 더 상세히 논의되는 바와 같이 충돌하는 요청을 저장하고 있는 요청 버퍼(C62)의 엔트리 내로 흡수될 수 있다.
예상 상태가 현재 상태와 일치하는 경우(결정 블록(C100), "예" 레그), 코히어런트 에이전트(C14A-C14n)는 스누프에 기초하여 상태 변경을 프로세싱하도록 구성될 수 있다(블록(C104)). 즉, 스누프는 원하는 상태 변경을 나타낼 수 있다. 코히어런트 에이전트(C14A-C14n)는 완료(예를 들어, 스누프가 스누프 포워드 요청인 경우 필(fill), 스누프가 스누프 백 요청인 경우 카피 백(copy back) 스누프 응답, 또는 스누프가 상태 변경 요청인 경우 확인 응답(스누프 유형에 기초하여 포워드 또는 백))를 생성하도록 구성될 수 있다. 코히어런트 에이전트는 스누프로부터 완료 카운트를 갖는 완료를 생성하고(블록(C106)), 요청 코히어런트 에이전트(C14A-C14n)로의 전송을 위해 완료를 큐잉하도록 구성될 수 있다(블록(CC108)).
본 명세서에 설명된 캐시 코히어런시 알고리즘을 사용하여, 캐시 블록이, 낮은 메시지 대역폭 오버헤드를 갖는 일련의 충돌하는 요청들을 통해 하나의 코히어런트 에이전트(C14A-C14n)로부터 다른 에이전트로 전송될 수 있다. 예를 들어, 도 35는 4개의 코히어런트 에이전트들(CA0 내지 CA3) 사이의 캐시 블록의 전송을 예시한 블록도이다. 도 29 및 도 30과 유사하게, 코히어런트 에이전트들은 CA0 내지 CA3으로서 열거되고, 캐시 블록과 연관된 메모리 제어기는 MC로서 도시된다. CA0, CA1, CA2, CA3 및 MC에 대한 수직선들(110, 112, 114, 116, 118)은 트랜잭션들에 대응하는 다양한 메시지들의 소스(화살표의 베이스) 및 메시지들의 목적지(화살표의 헤드)를 각각 예시한다. 도 35에서 시간은 상부에서 하부로 진행한다. 도 35의 상부에 대응하는 시간에서, 코히어런트 에이전트(CA3)는 수정된 상태의 트랜잭션들에 관여하는 캐시 블록을 갖는다(디렉토리(C26)에서 '배타적'인 것으로 추적됨). 도 35에서 트랜잭션들은 모두 동일한 캐시 블록에 대한 것이다.
코히어런트 에이전트(CA0)는 메모리 제어기로의 CRdEx 요청으로 판독 배타적 트랜잭션을 개시한다(화살표(120)). 코히어런트 에이전트들(CA1, CA2)은 또한 판독 배타적 트랜잭션들을 개시한다(각각 화살표들(122, 124)). 라인(118)에서 화살표들(120, 122, 124)의 헤드들에 의해 나타낸 바와 같이, 메모리 제어기(MC)는 트랜잭션들을 CA0, 이어서 CA1, 및 이어서 마지막으로 CA2와 같이 순서화한다. CA0으로부터의 트랜잭션에 대한 디렉토리 상태는 배타적 상태의 CA3이고, 따라서 스누프 포워드 및 무효화(SnpFwdI)가 현재 캐시 상태 '배타적'을 가지고 전송된다(화살표(126)). 코히어런트 에이전트(CA3)는 스누프를 수신하고, 데이터와 함께 FillM 완료를 코히어런트 에이전트(CA0)로 포워딩한다(화살표(128)). 유사하게, CA1로부터의 트랜잭션에 대한 디렉토리 상태는 (CA0에 대한 이전 트랜잭션으로부터의) 배타적 상태의 코히어런트 에이전트(CA0)이고, 따라서 메모리 제어기(MC)는 SnpFwdI를 현재 캐시 상태 E를 갖는 코히어런트 에이전트(CA0)로 발행하고(화살표 130), CA2로부터의 트랜잭션에 대한 디렉토리 상태는 현재 캐시 상태 E를 갖는 코히어런트 에이전트(CA1)이다(화살표(132)). 일단 코히어런트 에이전트(CA0)가 캐시 블록 상에서 적어도 하나의 메모리 동작을 수행할 기회를 가졌다면, 코히어런트 에이전트(CA0)는 FillM 완료로 코히어런트 에이전트(CA1)에게 응답한다(화살표(134)). 유사하게, 일단 코히어런트 에이전트(CA1)가 캐시 블록 상에서 적어도 하나의 메모리 동작을 수행할 기회를 가졌다면, 코히어런트 에이전트(CA1)는 코히어런트 에이전트(CA2)에게 FillM 완료로 그의 스누프에게 응답한다(화살표(136)). 다양한 메시지들의 순서 및 타이밍은 (예를 들어, 도 29 및 도 30에 도시된 경쟁 조건들과 유사하게) 변경될 수 있지만, 일반적으로 캐시 블록은 충돌하는 요청이 해결됨에 따라 에이전트로부터 에이전트로 하나의 추가 메시지(FillM 완료)를 가지고 이동할 수 있다.
일 실시예에서, 위에서 언급한 경쟁 조건들로 인해, 필 완료가 스누핑되기 전에 스누프가 수신될 수 있다(예상 캐시 상태를 전달하는 스누프에 의해 검출됨). 추가적으로, Ack 완료들이 수집되고 필 완료가 프로세싱될 수 있기 전에 스누프가 수신될 수 있다. Ack 완료들은 스누프들로부터의 결과이며, 따라서 스누프들을 전달하는 가상 채널의 진행에 의존한다. 따라서 충돌하는 스누프들(예상 캐시 상태 상의 지연되는 대기)은 내부 버퍼들을 채우고 패브릭 내로 역으로 압력을 가할 수 있으며, 이는 데드록(deadlock)을 야기할 수 있다. 일 실시예에서, 코히어런트 에이전트들(C14A-C14n)은 별개의 엔트리를 할당하기보다는 오히려 하나의 스누프 포워드 및 하나의 스누프 무효화를 요청 버퍼 내의 미처리 요청 내로 흡수하도록 구성될 수 있다. 이어서, 충돌하지 않는 스누프들 또는 더 이상의 상호연결 의존성 없이 프로세싱할 수 있는 지점에 도달할 충돌하는 스누프들은 충돌하는 스누프들을 우회하여 흐르고 데드록을 피할 수 있다. 하나의 스누프 포워드 및 하나의 스누프 무효화의 흡수로서 충분할 수 있는데, 이는 스누프 포워드가 이루어질 때, 포워딩 책임이 타겟으로 이전되기 때문이다. 따라서, 요청기가 그의 현재 요청을 완료하고 이전 스누프 포워드가 완료된 후 다른 새로운 요청을 발행할 때까지 다른 스누프가 다시 이루어지지 않을 것이다. 스누프 무효화가 완료될 때, 요청기는 디렉토리에 따라 무효 상태이며, 요청기가 이전 무효화를 프로세싱하고, 캐시 블록을 다시 요청하고 새로운 사본을 얻을 때까지 다시 다른 무효화를 수신하지 않을 것이다.
따라서, 코히어런트 에이전트(C14A-C14n)는, 코히어런트 에이전트가 스누프보다 먼저 순서화된 미처리 요청을 갖는 캐시 블록에 대해, 코히어런트 에이전트에 의해 수신된 스누프를 검출함으로써 포워드 진행을 보장하고/하거나 데드록을 방지하도록 구성될 수 있다. 코히어런트 에이전트는 제2 스누프를 미처리 요청 내로(예를 들어, 요청을 저장하는 요청 버퍼 엔트리 내로) 흡수하도록 구성될 수 있다. 코히어런트 에이전트는 미처리 요청을 완료하는 것에 후속하여 흡수된 스누프를 프로세싱할 수 있다. 예를 들어, 흡수된 스누프가 스누프 포워드 요청인 경우, 코히어런트 에이전트는 미처리 요청을 완료하는 것에 후속하여 스누프 포워드 스누프 내에 나타낸 다른 코히어런트 에이전트로 캐시 블록을 포워딩하도록(그리고 캐시 상태를 스누프 포워드 요청에 의해 나타낸 상태로 변경하도록) 구성될 수 있다. 흡수된 스누프가 스누프 무효화 요청인 경우, 코히어런트 에이전트는 캐시 상태를 무효로 업데이트하고, 미처리 요청을 완료하는 것에 후속하여 확인 응답 완료를 전송할 수 있다. 예를 들어, 흡수된 스누프를 설명하는 데이터를 위한 추가적인 저장소를 각각의 요청 버퍼 엔트리 내에 포함함으로써, 스누프를 충돌하는 요청 내로 흡수하는 것이 구현될 수 있다.
도 36은 스누프를 수신하는 것에 기초한 코히어런트 에이전트(C14A-C14n)의 하나의 실시예의 동작을 예시한 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 코히어런트 에이전트(C14A-C14n) 내의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 코히어런트 에이전트(C14A-C14n)는 도 36에 도시된 동작을 구현하도록 구성될 수 있다. 예를 들어, 도 36에 예시된 동작은 예상 캐시 상태가 예상 캐시 상태와 일치하지 않고 대기 중인 스누프의 검출의 일부일 수 있다(도 34의 결정 블록(C100) 및 블록(C102)).
코히어런트 에이전트(C14A-C14n)는 일치하는 캐시 상태가 없는 것으로 인해 대기되어야 하는 스누프의 어드레스를 요청 버퍼(C62) 내의 미처리 요청들(또는 대기 중인 요청들)의 어드레스들과 비교하도록 구성될 수 있다. 어드레스 충돌이 검출되는 경우(결정 블록(C140), "예" 레그), 요청 버퍼(C62)는 스누프를 어드레스 충돌이 검출된 대기 중인 요청에 할당된 버퍼 엔트리 내로 흡수할 수 있다(블록(C142)). 대기 중인 요청과 어드레스 충돌이 없는 경우(결정 블록(C140), "아니오" 레그), 코히어런트 에이전트(C14A-C14n)는 스누프에 대해 (예를 들어, 요청 버퍼(C62) 또는 코히어런트 에이전트(C14A-C14n)의 다른 버퍼 내에) 별도의 버퍼 위치를 할당하도록 구성될 수 있고, 버퍼 엔트리 내에 스누프를 설명하는 데이터를 저장하도록 구성될 수 있다(블록(C144)).
이전에 언급된 바와 같이, 캐시 코히어런시 프로토콜은 일 실시예에서, 관련된 데이터의 코히어런시를 유지하면서 캐싱가능한 요청 및 캐싱가능하지 않은 요청 모두를 지원할 수 있다. 캐싱가능하지 않은 요청들은 예를 들어 비-코히어런트 에이전트들(C20A-C20p)에 의해 발행될 수 있고, 비-코히어런트 에이전트들(C20A-C20p)은 캐시 블록들을 코히어런트하게 저장하는 능력을 갖지 않을 수 있다. 일 실시예에서, 코히어런트 에이전트(C14A-C14n)가 또한 캐싱가능하지 않은 요청을 발행하는 것이 가능할 수 있고, 코히어런트 에이전트는 이러한 요청에 응답하여 제공되는 데이터를 캐싱하지 않을 수 있다. 따라서, 예컨대, 주어진 비-코히어런트 에이전트(C20A-C20p)가 요청하는 데이터가 코히어런트 에이전트들(C14A-C14n) 중 하나 내의 수정된 캐시 블록에 있는 경우, 비-캐시가능 요청에 대한 스누프 포워드 요청은 적절하지 않을 것이고, 수정된 캐시 블록이 주어진 비-코히어런트 에이전트(C20A-C20p)에 의해 보존될 것이라는 예상으로, 주어진 비-코히어런트 에이전트(C20A-C20p)에 포워딩될 것이다.
코히어런트한 캐싱가능하지 않은 트랜잭션들을 지원하기 위해, 스케일링가능한 캐시 코히어런시 프로토콜의 일 실시예는 다수의 유형들의 스누프들을 포함할 수 있다. 예를 들어, 일 실시예에서, 스누프들은 스누프 포워드 요청 및 스누프 백 요청을 포함할 수 있다. 전술한 바와 같이, 스누프 포워드 요청은 캐시 블록이 요청 에이전트로 포워딩되게 할 수 있다. 한편, 스누프 백 요청은 캐시 블록이 메모리 제어기로 다시 전송되게 할 수 있다. 일 실시예에서, 캐시 블록을 무효화하기 위해 스누프 무효화 요청이 또한 지원될 수 있다(완료들을 지향하기 위한 포워드 버전 및 백 버전이 구비됨).
보다 구체적으로, 요청을 수신하는 메모리 제어기(C22A-C22m)(및 보다 더 구체적으로는, 메모리 제어기(C22A-C22m) 내의 코히어런시 제어기(C24))는 디렉토리(C26)로부터의 요청 내의 어드레스에 의해 식별된 캐시 블록에 대응하는 엔트리를 판독하도록 구성될 수 있다. 메모리 제어기(C22A-C22m)는 엔트리에 따라 캐시 블록의 캐싱된 사본을 갖는 코히어런트 에이전트들(C14A-C14m)의 주어진 에이전트에 스누프를 발행하도록 구성될 수 있다. 스누프는, 주어진 에이전트가 제1 요청이 제1 유형(예를 들어, 캐싱가능한 요청)인 것에 기초하여, 캐시 블록을 요청의 소스로 전송할 것임을 나타낸다. 스누프는, 주어진 에이전트가 제1 요청이 제2 유형(예를 들어, 캐싱가능하지 않은 요청)인 것에 기초하여, 제1 캐시 블록을 메모리 제어기로 전송할 것임을 나타낸다. 메모리 제어기(C22A-C22n)는 주어진 에이전트로부터 캐시 블록을 수신하는 것에 기초하여, 요청의 소스에 완료로 응답하도록 구성될 수 있다. 추가적으로, 다른 코히어런트 요청들에서와 같이, 메모리 제어기(C22A-C22n)는 캐싱가능하지 않은 요청에 대한 복수의 스누프들을 발행하는 것에 기초하여, 캐싱가능하지 않은 요청의 완료를 반영하기 위해 디렉토리(C26) 내의 엔트리를 업데이트하도록 구성될 수 있다.
도 37은 하나의 실시예에서 코히어런트하게 관리되는 캐싱가능하지 않은 트랜잭션의 예를 예시한 블록도이다. 도 37은 스누핑된 데이터를 메모리 제어기를 통해 요청기에게 전달하는 4-홉 프로토콜의 예일 수 있다. 비-코히어런트 에이전트는 NCA0으로서 나열되고, 코히어런트 에이전트는 CA1로서 나열되고, 캐시 블록과 연관된 메모리 제어기는 MC로서 나열된다. NCA0, CA1 및 MC에 대한 수직선들(150, 152, 154)은 트랜잭션들에 대응하는 다양한 메시지들의 소스(화살표의 베이스) 및 메시지들의 목적지(화살표의 헤드)를 예시한다. 도 37에서 시간은 상부에서 하부로 진행한다.
도 37의 상단에 대응하는 시간에서, 코히어런트 에이전트(CA1)는 배타적 상태(E)의 캐시 블록을 갖는다. NCA0은 캐싱가능하지 않은 판독 요청(NCRd)을 MC에 발행한다(화살표(156)). MC는 디렉토리(26)로부터, CA1이 배타적 상태의 NCRd에 의해 요청된 데이터를 포함하는 캐시 블록을 갖는다고 결정하고, CA1에 대한 스누프 백 요청(SnpBkI(E))을 생성한다(화살표(158)). CA1은 데이터의 캐시 블록과 함께 캐시 백 스누프 응답(CpBkSR)을 MC에 제공한다(화살표(160)). 데이터가 수정되는 경우, MC는 데이터로 메모리를 업데이트할 수 있고, 캐싱가능하지 않은 판독 응답(NCRdRsp) 내에 캐싱가능하지 않은 판독 요청에 대한 데이터를 NCA0에 제공하여, 요청을 완료할 수 있다(화살표(162)). 일 실시예에서, 다음의 하나 초과의 유형의 NCRd 요청이 있을 수 있다: 스누핑된 코히어런트 에이전트 내의 캐시 블록을 무효화하는 요청들 및 스누핑된 코히어런트 에이전트가 캐시 블록을 유지할 수 있게 허용하는 요청들. 위의 논의는 무효화를 예시한 것이다. 다른 경우들에서, 스누핑된 에이전트는 캐시 블록을 동일한 상태로 유지할 수 있다.
캐싱가능하지 않은 기록 요청은 유사한 방식으로 수행될 수 있으며, 캐시 블록을 획득하기 위해 스누프 백 요청을 사용하고, 캐시 블록을 메모리에 기록하기 전에 캐시 블록을 캐싱가능하지 않은 기록 데이터로 수정한다. 캐싱가능하지 않은 에이전트(도 37에서 NCA0)에게 기록이 완료됨을 통지하기 위해 캐싱가능하지 않은 기록 응답이 여전히 제공될 수 있다.
도 38은 캐시가능 및 비-캐시가능 동작을 예시하는, 요청에 대한 응답으로, 메모리 제어기(C22A-C22m)(그리고 더 구체적으로는 일 실시예에서 메모리 제어기(C22A-C22m)의 코히어런시 제어기(24))의 일 실시예의 동작을 예시하는 흐름도이다. 도 38에 예시된 동작은 예를 들어 도 32에 도시된 동작의 일부분의 보다 상세한 예시일 수 있다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 코히어런시 제어기(C24)의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 코히어런시 제어기(C24)는 도 38에 도시된 동작을 구현하도록 구성될 수 있다.
코히어런시 제어기(C24)는 요청 내의 어드레스에 기초하여 디렉토리를 판독하도록 구성될 수 있다. 요청이 디렉토리 히트(hit)인 경우(결정 블록(C170), "예" 레그), 캐시 블록은 코히어런트 에이전트들(C14A-C14n) 내의 하나 이상의 캐시들 내에 존재한다. 요청이 캐싱가능하지 않은 경우(결정 블록(C172), "예" 레그), 코히어런시 제어기(C24)는 캐시 블록의 사본을 제공할 책임이 있는 코히어런트 에이전트(C14A-C14n)에 대한 스누프 백 요청을 발행하도록(그리고, 적용가능한 경우, 공유 에이전트들에 대한 무효화 요청들을 스누핑하도록(백 변형) - 블록(C174)) 구성될 수 있다. 코히어런시 제어기(C24)는 완료되는 스누프들을 반영하기 위해(예를 들어, 코히어런트 에이전트들(C14A-C14n) 내의 캐시 블록을 무효화하기 위해 - 블록(C176)) 디렉토리를 업데이트하도록 구성될 수 있다. 코히어런시 제어기(C24)는 공유 코히어런트 에이전트(C14A-C14n)로부터의 임의의 Ack 스누프 응답뿐만 아니라 카피 백 스누프 응답(결정 블록(C178), "예" 레그)을 기다리도록 구성될 수 있고, 요청 에이전트에 대한 캐싱가능하지 않은 완료(적절한 경우, NCRdRsp 또는 NCWrRsp)를 생성하도록 구성될 수 있다(블록(C180)). 캐시 블록이 수정되는 경우, 데이터는 또한 메모리 제어기(C22A-C22m)에 의해 메모리에 기록될 수 있다.
요청이 캐싱가능한 경우(결정 블록(C172), "아니오" 레그), 코히어런시 제어기(C24)는 캐시 블록을 포워딩할 책임이 있는 코히어런트 에이전트(C14A-C14n)에 대한 스누프 포워드 요청뿐만 아니라(블록(C182)), 필요한 경우, 다른 캐싱 코히어런트 에이전트들(C14A-C14n)에 대한 다른 스누프들을 생성하도록 구성될 수 있다. 코히어런시 제어기(C24)는 트랜잭션의 완료를 반영하기 위해 디렉토리(C24)를 업데이트할 수 있다(블록(C184)).
요청이 디렉토리(C26) 내의 히트가 아닌 경우(결정 블록(C170), "아니오" 레그), 코히어런트 에이전트들(C14A-C14n) 내에는 캐시 블록의 캐싱된 사본이 없다. 이 경우, 스누프들이 생성되지 않을 수 있고, 메모리 제어기(C22A-22m)는 데이터를 제공하거나 요청을 완료하기 위해 (캐싱가능한 요청에 대한) 필 완료 또는 (캐싱가능하지 않은 요청에 대한) 캐싱가능하지 않은 완료를 생성하도록 구성될 수 있다(블록(C186)). 캐싱가능한 요청의 경우, 코히어런시 제어기(C24)는 캐시 블록에 대한 엔트리를 생성하기 위해 디렉토리(C26)를 업데이트할 수 있고, 요청 코히어런트 에이전트(14A-C14n)를 코히어런트 에이전트(C14A-C14n)에 의해 요청된 캐시 상태의 캐시 블록의 사본을 갖는 것으로 초기화할 수 있다(블록(C188)).
도 39는 코히어런트 에이전트들(C14A-C14n)의 하나의 실시예에서 구현될 수 있는 예시적인 캐시 상태들을 예시한 표(C190)이다. 다른 실시예들은 상이한 캐시 상태들, 도시된 캐시 상태들의 서브세트 및 다른 캐시 상태들, 도시된 캐시 상태들 및 다른 캐시 상태들의 수퍼세트(superset) 등을 이용할 수 있다. 수정된 상태(M), 또는 "더티(dirty) 배타적" 상태는 캐시 블록의 유일한 캐싱된 사본(사본은 배타적임)을 갖는 코히어런트 에이전트들(C14A-C14n)의 상태일 수 있으며, 캐싱된 사본 내의 데이터는 메모리 내의 대응하는 데이터와 관련하여 수정된 바 있다(예를 들어, 데이터의 적어도 하나의 바이트가 메모리 내의 대응하는 바이트와 상이함). 수정된 데이터는 또한 더티 데이터로 지칭될 수 있다. 소유 상태(O) 또는 "더티 공유" 상태는, 캐시 블록의 수정된 사본을 갖지만 적어도 하나의 다른 코히어런트 에이전트(C14A-C14n)와 함께 사본을 공유했을 수 있는 코히어런트 에이전트(C14A-C14n) 내의 상태일 수 있다(다만 다른 코히어런트 에이전트(C14A-C14n)는 이후에 공유 캐시 블록을 축출했을 수 있음). 다른 코히어런트 에이전트(C14A-C14n)는 2차 공유 상태의 캐시 블록을 가질 것이다. 배타적 상태(E), 또는 "클린(clean) 배타적" 상태는, 캐시 블록의 유일한 캐싱된 사본을 갖지만, 캐싱된 사본이 메모리 내의 대응하는 데이터와 동일한 데이터를 갖는 코히어런트 에이전트(C14A-C14n) 내의 상태일 수 있다. 배타적 데이터 없음(EnD) 상태, 또는 "클린 배타적, 데이터 없음" 상태는, 데이터의 캐시 블록이 코히어런트 에이전트에 전달되고 있지 않다는 점을 제외하고는 배타적(E) 상태와 유사한 코히어런트 에이전트(C14A14n) 내의 상태일 수 있다. 이러한 상태는 코히어런트 에이전트(C14A-C14n)가 캐시 블록 내의 각각의 바이트를 수정하는 경우에 사용될 수 있고, 따라서 캐시 블록 내에 이전 데이터를 공급하는 이익 또는 코히어런시 이유가 없을 수 있다. EnD 상태는 상호연결부(C28) 상의 트래픽을 감소시키기 위한 최적화일 수 있고, 다른 실시예들에서 구현되지 않을 수 있다. 1차 공유(P) 상태 또는 "클린 공유 1차" 상태는, 캐시 블록의 공유 사본을 갖지만 또한 스누프 포워드 요청에 기초하여 캐시 블록을 다른 코히어런트 에이전트로 포워딩하는 책임을 갖는 코히어런트 에이전트(C14A-C14n) 내의 상태일 수 있다. 2차 공유(S) 상태 또는 "클린 공유 2차"상태는, 캐시 블록의 공유 사본을 갖지만 다른 코히어런트 에이전트(C14A-C14n)가 1차 공유 상태의 캐시 블록을 갖는 경우 캐시 블록을 제공하는 책임을 갖지 않는 코히어런트 에이전트(C14A-C14n) 내의 상태일 수 있다. 일부 실시예들에서, 코히어런트 에이전트(C14A-C14n)가 1차 공유 상태의 캐시 블록을 갖지 않는 경우, 코히어런시 제어기(C24)는 캐시 블록을 제공하기 위해 2차 공유 에이전트를 선택할 수 있다(그리고 선택된 코히어런트 에이전트에 스누프 포워드 요청을 전송할 수 있다). 다른 실시예들에서, 코히어런시 제어기(C24)는 메모리 제어기(C22A-C22m)로 하여금 1차 공유 상태의 코히어런트 에이전트(C14A-C14n)가 없는 경우 캐시 블록을 요청기에게 제공하게 하도록 할 수 있다. 무효 상태(I)는 캐시 블록의 캐싱된 사본을 갖지 않는 코히어런트 에이전트(C14A-C14n) 내의 상태일 수 있다. 무효 상태의 코히어런트 에이전트(C14A-C14n)는 이전에 사본을 요청하지 않았을 수 있거나, 또는 임의의 사본을 가지고 있으며 상이한 캐시 블록을 캐싱하기 위해 스누프에 기초하여 또는 캐시 블록의 축출에 기초하여 이를 무효화했을 수 있다.
도 40은 스케일링가능한 캐시 코히어런스 프로토콜의 하나의 실시예에서 사용될 수 있는 다양한 메시지들을 예시한 표(C192)이다. 다른 실시예들에서, 대안적인 메시지들, 예시된 메시지들 및 추가적인 메시지들의 서브세트들, 예시된 메시지들 및 추가적인 메시지들의 수퍼세트들 등이 존재할 수 있다. 메시지들은 동일한 트랜잭션(예컨대, 초기 요청, 스누프들, 완료들)으로부터의 메시지들을 링크시키는 트랜잭션 식별자를 반송할 수 있다. 초기 요청들 및 스누프들은 트랜잭션에 의해 영향을 받는 캐시 블록의 어드레스를 전달할 수 있다. 일부 다른 메시지들이 또한 어드레스를 전달할 수 있다. 일부 실시예들에서, 모든 메시지들이 어드레스를 전달할 수 있다.
캐싱가능한 판독 트랜잭션들은 캐싱가능한 판독 요청 메시지(CRd)로 개시될 수 있다. 상이한 캐시 상태들을 요청하기 위해 CRd 요청의 다양한 버전들이 있을 수 있다. 예를 들어, CRdEx는 배타적 상태를 요청할 수 있고, CRdS는 2차 공유 상태 등을 요청할 수 있다. 캐싱가능한 판독 요청에 응답하여 실제로 제공되는 캐시 상태는 적어도 요청 상태만큼 허용적일 수 있고, 더 허용적일 수 있다. 예를 들어, CRdEx는 배타적 또는 수정 상태의 캐시 블록을 수신할 수 있다. CRdS는 1차 공유, 배타적, 소유, 또는 수정 상태들의 블록을 수신할 수 있다. 일 실시예에서, 기회적(opportunistic) CRd 요청이 구현될 수 있고, 가능한 최대로 허용적인 상태(캐시 블록의 다른 사본을 무효화하지 않음)가 부여될 수 있다(예를 들어, 다른 코히어런트 에이전트에 캐싱된 사본이 없는 경우 배타적이고, 캐싱된 사본들이 있는 경우 소유 또는 1차 공유 등임).
배타적으로의 변경(change to exclusive, CtoE) 메시지는 수정을 허용하지 않는 상태(예를 들어, 소유, 1차 공유, 2차 공유)의 캐시 블록의 사본을 가지고 있는 코히어런트 에이전트에 의해 사용될 수 있으며, 코히어런트 에이전트는 캐시 블록을 수정하려고 시도하는 중이다(예를 들어, 코히어런트 에이전트는 캐시 블록을 수정된 상태로 변경하기 위해 배타적 액세스가 필요함). 일 실시예에서, 조건부 CtoE 메시지가 저장 조건부 명령(store conditional instruction)을 위해 사용될 수 있다. 저장 조건부 명령은 로드 예비(load reserve)/저장 조건부 쌍의 일부이며, 로드는 캐시 블록의 사본을 획득하고 캐시 블록에 대한 예약을 설정한다. 코히어런트 에이전트(C14A-C14n)는 다른 에이전트들에 의한 캐시 블록에 대한 액세스를 모니터링할 수 있고, 캐시 블록이 로드와 저장 사이의 다른 코히어런트 에이전트(C14A-C14n)에 의해 수정되지 않았는지 여부에 기초하여 그 저장을 조건부로 수행할 수 있다(캐시 블록이 수정되지 않은 경우 성공적으로 저장, 캐시 블록이 수정된 경우 저장하지 않음). 추가 세부 사항들이 아래에 제공된다.
일 실시예에서, 캐시 판독 배타적, 데이터 전용(CRdE-Donly) 메시지는 코히어런트 에이전트(C14A-C14n)가 전체 캐시 블록을 수정하는 경우에 사용될 수 있다. 캐시 블록이 다른 코히어런트 에이전트(C14A-C14n)에서 수정되지 않은 경우, 요청 코히어런트 에이전트(C14A-C14n)는 EnD 캐시 상태를 사용할 수 있고, 캐시 블록 내의 이전 데이터를 에이전트로 전송하지 않고 블록의 모든 바이트를 수정할 수 있다. 캐시 블록이 수정되는 경우, 수정된 캐시 블록은 요청 코히어런트 에이전트(C14A-C14n)로 전달될 수 있고, 요청 코히어런트 에이전트(C14A-C14n)는 M 캐시 상태를 사용할 수 있다.
캐싱가능하지 않은 트랜잭션들은 캐싱가능하지 않은 판독 및 캐싱가능하지 않은 기록(NCRd 및 NCWr) 메시지들로 개시될 수 있다.
스누프 포워드 및 스누프 백(각각 SnpFwd 및 SnpBk)은 전술한 바와 같이 스누프들에 사용될 수 있다. 스누프를 프로세싱한 후에 수신 코히어런트 에이전트(C14A-C14n) 내의 다양한 상태들을 요청하기 위한 메시지들이 있을 수 있다(예를 들어, 무효화 상태 또는 공유 상태). 또한 CRdE-Donly 요청에 대한 스누프 포워드 메시지가 있을 수 있으며, 이는 캐시 블록이 수정될 경우 포워딩을 요청하지만, 그렇지 않으면 포워딩하지 않고 수신기에서의 무효화를 요청한다. 일 실시예에서, 또한, 표(C192)에서 SnpInvFw 및 SnpInvBk로서 도시된 무효화-전용 스누프 포워드 및 스누프 백 요청들(예를 들어, 수신기가 데이터를 리턴하지 않고 무효화하고 각각 요청기 또는 메모리 제어기로 확인 응답하게 하는 스누프들)이 있을 수 있다.
완료 메시지들은 필 메시지(Fill) 및 확인 응답 메시지(Ack)를 포함할 수 있다. 필 메시지는 완료 시 요청기에 의해 취해질 캐시 블록의 상태를 특정할 수 있다. 캐싱가능한 라이트백(CWB) 메시지는(예를 들어, 캐시로부터 캐시 블록을 축출하는 것에 기초하여) 캐시 블록을 메모리 제어기(C22A-C22m)로 전송하는 데 사용될 수 있다. 카피 백 스누프 응답(CpBkSR)은 (예를 들어, 스누프 백 메시지에 기초하여) 캐시 블록을 메모리 제어기(C22A-C22m)로 전송하는 데 사용될 수 있다. 캐싱가능하지 않은 기록 완료(NCWrRsp) 및 캐싱가능하지 않은 판독 완료(NCRdRsp)는 캐싱가능하지 않은 요청들을 완료하는데 사용될 수 있다.
도 41은 CtoECond(conditional change to exclusive) 메시지를 수신하는 것에 기초하는 코히어런시 제어기(C24)의 일 실시예의 동작을 예시하는 흐름도이다. 예를 들어, 도 41은 일 실시예에서 도 32의 블록(C70)의 일부에 대한 보다 상세한 설명일 수 있다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 코히어런시 제어기(C24)의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 코히어런시 제어기(C24)는 도 41에 도시된 동작을 구현하도록 구성될 수 있다.
CtoECond 메시지는 저장 조건부 명령의 실행에 기초하여 코히어런트 에이전트(C14A-14n)("소스")에 의해 발행될 수 있다. 저장 조건부 명령은 소스가 저장 조건부 명령 이전에 캐시 블록의 사본을 상실한 경우(예를 들어, 사본이 더 이상 유효하지 않음) 소스에서 로컬적으로 실패할 수 있다. 소스가 (예컨대, 2차 또는 1차 공유 상태 또는 소유 상태의) 유효한 사본을 여전히 갖는 경우, 저장 조건부 명령어가 실행될 때, 소스로 하여금 자신의 캐시된 사본을 무효화하게 하는 소스로부터 배타적 메시지로의 변경에 앞서 다른 트랜잭션이 순서화될 것이 여전히 가능하다. 캐싱된 사본을 무효화하는 동일한 트랜잭션은 또한 저장 조건부 명령이 소스에서 실패하게 할 것이다. 캐시 블록의 무효화들 및 저장 조건부 명령이 실패할 것인 소스로의 캐시 블록의 전달을 피하기 위해, CoECond 메시지가 제공되고 소스에 의해 사용될 수 있다.
CtoECond 메시지는 이것이 코히어런시 제어기(C24)에 의해 순서화될 때 적어도 2개의 가능한 결과들을 갖도록 정의될 수 있다. CtoECond 메시지가 순서화되고 프로세싱될 때에 소스가 여전히 디렉토리(C26)에 나타낸 바와 같은 캐시 블록의 유효 사본을 갖는 경우, CtoECond는 비-조건 CtoE 메시지와 유사하게 진행될 수 있다: 즉, 스누프들을 발행하고 캐시 블록에 대한 배타적 상태를 획득한다. 소스가 캐시 블록의 유효 사본을 갖지 않는 경우, 코히어런시 제어기(C24)는 CtoE 트랜잭션에 실패할 수 있고, CtoE가 실패했다는 표시와 함께 Ack 완료를 소스로 리턴할 수 있다. 소스는 Ack 완료에 기초하여 CtoE 트랜잭션을 종료할 수 있다.
도 41에 예시된 바와 같이, 코히어런시 제어기(C24)는 어드레스에 대한 디렉토리 엔트리를 판독하도록 구성될 수 있다(블록(C194)). 소스가 (예를 들어, 공유 상태의) 캐시 블록의 유효 사본을 보유하는 경우(결정 블록(C196), "예" 레그), 코히어런시 제어기(C24)는 디렉토리 엔트리 내의 캐시 상태들에 기초하여 스누프들(예를 들어, 소스가 배타적 상태로 변경될 수 있도록 캐시 블록을 무효화하기 위한 스누프들)을 생성하도록 구성될 수 있다(블록(C198)). 소스가 캐시 블록의 유효 사본을 보유하지 않은 경우(결정 블록(C196), "아니오" 레그), 캐시 제어기(C24)는 소스에 확인 응답 완료를 전송하여, CtoECond 메시지의 실패를 나타내도록 구성될 수 있다(블록(C200)). 따라서, CtoE 트랜잭션이 종료될 수 있다.
이제 도 42를 참조하면, 디렉토리 엔트리를 판독하고 스누프들을 결정하기 위한 코히어런시 제어기(C24)는 일 실시예의 동작(예를 들어, 일 실시예에서 도 32의 블록(C70)의 적어도 일부)을 예시하는 흐름도가 도시된다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 코히어런시 제어기(C24)의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 코히어런시 제어기(C24)는 도 42에 도시된 동작을 구현하도록 구성될 수 있다.
도 42에 예시된 바와 같이, 코히어런시 제어기(C24)는 요청의 어드레스에 대한 디렉토리 엔트리를 판독하도록 구성될 수 있다(블록(C202)). 디렉토리 엔트리 내의 캐시 상태들에 기초하여, 코히어런시 제어기(C24)는 스누프들을 생성하도록 구성될 수 있다. 예를 들어, 에이전트들 중 하나의 캐시 상태가 적어도 1차 공유인 것에 기초하여(결정 블록(C204), "예" 레그), 코히어런시 제어기(C24)는 1차 공유 에이전트로 SnpFwd 스누프를 전송하여, 1차 공유 에이전트가 캐시 블록을 요청 에이전트로 전송할 것임을 나타내도록 구성될 수 있다. (예를 들어, 2차 공유 상태의) 다른 에이전트들에 대해, 코히어런시 제어기(C24)는, 다른 에이전트들이 캐시 블록을 요청 에이전트에 전송하지 않음을 나타내는 무효화-전용 스누프들(SnpInv)을 생성하도록 구성될 수 있다(블록(C206)). 일부 경우들에서, (예를 들어, 캐시 블록의 공유 사본을 요청하는 CRdS 요청), 다른 에이전트들은 상태를 변경할 필요가 없기 때문에 스누프를 수신할 필요가 없다. 에이전트는 적어도 1차 공유(예를 들어, 도 39의 실시예에서 1차 공유, 소유, 배타적 또는 수정)로서 허용되는 캐시 상태인 경우 적어도 1차 공유되는 캐시 상태를 가질 수 있다.
적어도 1차 공유되는 캐시 상태를 갖는 에이전트가 없는 경우(결정 블록(C204), "아니오" 레그), 코히어런시 제어기(C24)는 하나 이상의 에이전트들이 2차 공유 상태의 캐시 블록을 갖는지 여부를 결정하도록 구성될 수 있다(결정 블록(C208)). 그러한 경우(결정 블록(C208), "예" 레그), 코히어런시 제어기(C24)는 2차 공유 상태를 갖는 에이전트들 중 하나를 선택하도록 구성될 수 있고, 선택한 에이전트가 캐시 블록을 요청 에이전트로 포워딩하라는 SnpFwd 요청 명령을 전송할 수 있다. 코히어런시 제어기(C24)는 2차 공유 상태의 다른 에이전트들에 대한 SnpInv 요청들을 생성하도록 구성될 수 있으며, 이들은 다른 에이전트들이 캐시 블록을 요청 에이전트에 전송하지 않을 것임을 나타낸다(블록(C210)). 상기와 같이, SnpInv 메시지들은 다른 에이전트들이 상태를 변경할 필요가 없으면 생성 및 전송되지 않을 수 있다.
2차 공유의 캐시 상태를 갖는 에이전트가 없는 경우(결정 블록(C208), "아니오" 레그), 코히어런시 제어기(C24)는 필 완료를 생성하도록 구성될 수 있고, 메모리 제어기로 하여금 요청 에이전트로의 전송을 위한 캐시 블록을 판독하게 하도록 구성될 수 있다(블록(C212)).
도 43은 CRdE-Donly 요청에 응답하여 디렉토리 엔트리를 판독하고 스누프들을 결정하기 위한 코히어런시 제어기(C24)는 일 실시예의 동작(예를 들어, 일 실시예에서 도 32의 블록(C70)의 적어도 일부)을 예시한 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 코히어런시 제어기(C24)의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 코히어런시 제어기(C24)는 도 43에 도시된 동작을 구현하도록 구성될 수 있다.
전술한 바와 같이, CRdE-Donly 요청은 캐시 블록 내의 모든 바이트들을 수정할 코히어런트 에이전트(C14A-C14n)에 의해 사용될 수 있다. 따라서, 코히어런시 제어기(C24)는 다른 에이전트들로 하여금 캐시 블록을 무효화하게 할 수 있다. 에이전트가 캐시 블록을 수정한 경우, 에이전트는 수정된 캐시 블록을 요청 에이전트에게 공급할 수 있다. 그렇지 않으면, 에이전트들은 캐시 블록을 공급하지 않을 수 있다.
코히어런시 제어기(C24)는 요청의 어드레스에 대한 디렉토리 엔트리를 판독하도록 구성될 수 있다(블록(C220)). 디렉토리 엔트리 내의 캐시 상태들에 기초하여, 코히어런시 제어기(C24)는 스누프들을 생성하도록 구성될 수 있다. 보다 구체적으로, 주어진 에이전트가 캐시 블록의 수정된 사본을 가질 수 있는 경우(예를 들어, 주어진 에이전트는 배타적 또는 1차 상태의 캐시 블록을 가질 수 있음)(블록(C222), "예" 레그), 캐시 제어기(C24)는 캐시 블록을 요청 에이전트로 전송하기 위해 에이전트에 스누프 포워드-더티 전용(SnpFwdDonly)을 생성할 수 있다(블록(C224)). 전술한 바와 같이, SnpFwdDonly 요청은 수신 에이전트로 하여금 데이터가 수정되는 경우 캐시 블록을 전송하게 하지만, 그렇지 않으면 캐시 블록을 전송하지 않게 할 수 있다. 어느 경우든, 수신 에이전트는 캐시 블록을 무효화할 수 있다. 수신 에이전트는 데이터가 수정되는 경우 필 완료를 전송하고 수정된 캐시 블록을 제공할 수 있다. 그렇지 않으면, 수신 에이전트는 Ack 완료를 전송할 수 있다. 수정된 사본을 갖는 에이전트가 없는 경우(결정 블록(C222), "아니오" 레그), 코히어런시 제어기(C24)는 캐시 블록의 캐싱된 사본을 갖는 각각의 에이전트에 대한 스누프 무효화(SnpInv)를 생성하도록 구성될 수 있다. (블록(C226)). 다른 실시예에서, 요청기가 전체 캐시 블록을 수정할 것이기 때문에, 코히어런시 제어기(C24)는 캐시 블록이 수정되더라도 데이터의 포워딩을 요청하지 않을 수 있다. 즉, 코히어런시 제어기(C24)는 수정된 사본을 갖는 에이전트로 하여금 데이터를 포워딩하지 않고 데이터를 무효화하게 할 수 있다.
본 개시내용에 기초하여, 시스템은 복수의 코히어런트 에이전트들을 포함할 수 있으며, 복수의 코히어런트 에이전트들 중의 주어진 에이전트는 메모리 데이터를 캐싱하기 위한 하나 이상의 캐시들을 포함한다. 시스템은, 하나 이상의 메모리 디바이스들에 커플링된 메모리 제어기를 더 포함할 수 있고, 메모리 제어기는 복수의 코히어런트 에이전트들 중 어느 것이 메모리 디바이스들 내의 복수의 캐시 블록들의 사본들을 캐싱하고 있는지, 및 복수의 코히어런트 에이전트들 내의 캐싱된 사본들의 상태들을 추적하도록 구성된 디렉토리를 포함한다. 복수의 코히어런트 에이전트들 중 제1 에이전트에 의한 제1 캐시 블록에 대한 제1 요청에 기초하여, 메모리 제어기는, 디렉토리로부터 제1 캐시 블록에 대응하는 엔트리를 판독하고, 엔트리에 따라 제1 캐시 블록의 캐싱된 사본을 갖는 복수의 코히어런트 에이전트들 중 제2 에이전트에 스누프를 발행하고, 제2 에이전트 내의 제1 캐시 블록의 제1 상태의 식별자를 스누프에 포함하도록 구성될 수 있다. 스누프에 기초하여, 제2 에이전트는, 제1 상태를 제2 에이전트 내의 제1 캐시 블록의 제2 상태와 비교하고, 제1 요청과 상이한 요청과 관련된 상이한 통신에 응답하여 제2 상태가 제1 상태로 변경될 때까지, 제1 상태가 제2 상태와 매칭되지 않는 것에 기초하여 스누프의 프로세싱을 지연시키도록 구성될 수 있다. 일 실시예에서, 메모리 제어기는, 제1 에이전트가 제1 요청에 대해 수신할 완료들의 수를 표시하는 완료 카운트를 결정하고 - 결정은 엔트리로부터의 상태들에 기초함 -; 제2 에이전트에 발행된 스누프를 포함하는 제1 요청에 기초하여 발행된 복수의 스누프들에 완료 카운트를 포함하도록 구성될 수 있다. 제1 에이전트는, 복수의 코히어런트 에이전트들 중 하나로부터의 초기 완료를 수신하는 것에 기초하여 완료 카운트를 갖는 완료 카운터를 초기화하고, 복수의 코히어런트 에이전트들 중 다른 코히어런트 에이전트로부터 후속 완료를 수신하는 것에 기초하여 완료 카운터를 업데이트하고, 완료 카운터에 기초하여 제1 요청을 완료하도록 구성될 수 있다. 일 실시예에서, 메모리 제어기는 제1 요청에 기초하여 복수의 스누프들을 발행하는 것에 기초하여 제1 요청의 완료를 반영하기 위해 디렉토리의 엔트리 내의 상태들을 업데이트하도록 구성될 수 있다. 일 실시예에서, 제1 에이전트는 제1 캐시 블록에 대해 제1 에이전트에 의해 수신된 제2 스누프를 검출하도록 구성될 수 있고, 제1 에이전트는 제2 스누프를 제1 요청 내로 흡수하도록 구성될 수 있다. 일 실시예에서, 제1 에이전트는 제1 요청을 완료하는 것에 후속하여 제2 스누프를 프로세싱하도록 구성될 수 있다. 일 실시예에서, 제1 에이전트는 제1 요청을 완료하는 것에 후속하여 제1 캐시 블록을 제2 스누프에 표시된 제3 에이전트로 포워딩하도록 구성될 수 있다. 일 실시예에서, 제3 에이전트는 제3 에이전트에서 유효 상태에 있는 제2 캐시 블록에 대한 저장 조건부 명령에 기초하여 조건부 배타적 상태로의 변경 요청을 생성하도록 구성될 수 있다. 메모리 제어기는 제2 캐시 블록과 연관된 디렉토리 내의 제2 엔트리에 기초하여 제3 에이전트가 제2 캐시 블록의 유효 카피를 보유하는지 여부를 결정하도록 구성될 수 있고, 메모리 제어기는 실패를 표시하는 완료를 제3 에이전트에 송신하고, 제3 에이전트가 더 이상 제2 캐시 블록의 유효한 사본을 보유하지 않는다는 결정에 기초하여 배타적 요청에 대한 조건부 변경을 종료하도록 구성될 수 있다. 일 실시예에서, 메모리 제어기는 제3 에이전트가 제2 캐시 블록의 유효 사본을 보유한다는 결정에 기초하여 제2 엔트리에 의해 표시된 바와 같이 복수의 코히어런트 에이전트들 중 다른 코히어런트 에이전트들에 하나 이상의 스누프들을 발행하도록 구성될 수 있다. 일 실시예에서, 스누프는, 제2 에이전트가, 1차 공유되는 제1 상태에 기초하여 제1 캐시 블록을 제1 에이전트로 전송할 것임을 나타내고, 스누프는, 제2 에이전트가, 2차 공유되는 제1 상태에 기초하여 제1 캐시 블록을 전송하지 않을 것임을 나타낸다. 일 실시예에서, 스누프는 제2 에이전트가 제1 상태가 2차 공유되는 경우에도 제1 캐시 블록을 전송할 것임을 나타낸다.
다른 실시예에서, 시스템은 복수의 코히어런트 에이전트들을 포함하며, 여기서 복수의 코히어런트 에이전트들 중의 주어진 에이전트는 메모리 데이터를 캐싱하기 위한 하나 이상의 캐시들을 포함한다. 시스템은 하나 이상의 메모리 디바이스들에 커플링된 메모리 제어기를 더 포함한다. 메모리 제어기는 복수의 코히어런트 에이전트들 중 어느 것이 메모리 디바이스들 내의 복수의 캐시 블록들의 사본들을 캐싱하고 있는지, 및 복수의 코히어런트 에이전트들 내의 캐싱된 사본들의 상태들을 추적하도록 구성된 디렉토리를 포함할 수 있다. 복수의 코히어런트 에이전트들 중 제1 에이전트에 의한 제1 캐시 블록에 대한 제1 요청에 기초하여, 메모리 제어기는, 디렉토리로부터 제1 캐시 블록에 대응하는 엔트리를 판독하고, 엔트리에 따라 제1 캐시 블록의 캐싱된 사본을 갖는 복수의 코히어런트 에이전트들 중 제2 에이전트에 스누프를 발행하하도록 구성될 수 있다. 스누프는, 제2 에이전트가 적어도 1차 공유 상태의 제1 캐시 블록을 가짐을 나타내는 엔트리에 기초하여 제2 에이전트가 제1 캐시 블록을 제1 에이전트로 전송할 것임을 나타낼 수 있다. 스누프는, 제2 에이전트가, 적어도 1차 공유 상태의 제1 캐시 블록을 갖는 상이한 에이전트에 기초하여 제1 캐시 블록을 제1 에이전트로 전송하지 않을 것임을 나타낸다. 일 실시예에서, 상이한 에이전트가 1차 공유 상태에 있는 경우, 제1 에이전트는 제1 캐시 블록에 대한 2차 공유 상태에 있다. 일 실시예에서, 스누프는, 제1 에이전트가, 적어도 1차 공유 상태의 제1 캐시 블록을 갖는 상이한 에이전트에 기초하여 제1 캐시 블록을 무효화할 것임을 나타낸다. 일 실시예에서, 메모리 제어기는 1차 공유 상태의 제1 캐시 블록을 갖는 상이한 에이전트 및 제1 캐시 블록의 공유 사본에 대한 요청이 되는 제1 요청에 기초하여 제2 에이전트에 스누프를 발행하지 않도록 구성된다. 일 실시예에서, 제1 요청은 제1 캐시 블록에 대한 배타적 상태에 대한 것일 수 있고, 제1 에이전트는 제1 캐시 블록의 전체를 수정하는 것이다. 스누프는, 제1 캐시 블록이 제2 에이전트에서 수정된 상태에 있는 경우 제2 에이전트가 제1 캐시 블록을 전송할 것임을 나타낼 수 있다. 일 실시예에서, 스누프는, 제1 캐시 블록이 제2 에이전트에서 수정된 상태에 있지 않은 경우 제2 에이전트가 제1 캐시 블록을 무효화할 것임을 나타낸다.
다른 실시예에서, 시스템은 복수의 코히어런트 에이전트들을 포함하며, 여기서 복수의 코히어런트 에이전트들 중의 주어진 에이전트는 메모리 데이터를 캐싱하기 위한 하나 이상의 캐시들을 포함한다. 시스템은 하나 이상의 메모리 디바이스들에 커플링된 메모리 제어기를 더 포함한다. 메모리 제어기는 복수의 코히어런트 에이전트들 중 어느 것이 메모리 디바이스들 내의 복수의 캐시 블록들의 사본들을 캐싱하고 있는지, 및 복수의 코히어런트 에이전트들 내의 캐싱된 사본들의 상태들을 추적하도록 구성된 디렉토리를 포함할 수 있다. 제1 캐시 블록에 대한 제1 요청에 기초하여, 메모리 제어기는, 디렉토리로부터 제1 캐시 블록에 대응하는 엔트리를 판독하고, 엔트리에 따라 제1 캐시 블록의 캐싱된 사본을 갖는 복수의 코히어런트 에이전트들 중 제2 에이전트에 스누프를 발행하도록 구성될 수 있다. 스누프는, 제2 에이전트가, 제1 값을 갖는 제1 요청과 연관된 속성에 기초하여 제1 캐시 블록을 제1 요청의 소스로 전송할 것임을 나타낼 수 있고, 스누프는, 제2 에이전트가, 제2 값을 갖는 속성에 기초하여 제1 캐시 블록을 메모리 제어기에 전송할 것임을 나타낸다. 일 실시예에서, 속성은 요청의 유형이고, 제1 값은 캐싱가능하고, 제2 값은 캐싱가능하지 않다. 다른 실시예에서, 속성은 제1 요청의 소스이다. 일 실시예에서, 메모리 제어기는, 제2 에이전트로부터 제1 캐시 블록을 수신하는 것에 기초하여 제1 요청의 소스에 응답하도록 구성될 수 있다. 일 실시예에서, 메모리 제어기는, 제1 요청에 기초하여 복수의 스누프들을 발행하는 것에 기초하여 제1 요청의 완료를 반영하기 위해 디렉토리의 엔트리 내의 상태들을 업데이트하도록 구성된다.
IOA
도 44 내지 도 48은 SOC의 다양한 실시예들에서 이용될 수 있는 입력/출력 에이전트(IOA)의 다양한 실시예들을 예시한다. IOA는 주어진 주변 디바이스와 상호연결 패브릭 사이에 개재될 수 있다. IOA 에이전트는 주어진 주변 디바이스에 대해 상호연결 패브릭의 코히어런시 프로토콜들을 강제하도록 구성될 수 있다. 일 실시예에서, IOA는 코히어런시 프로토콜들을 사용하여 주어진 주변 디바이스로부터의 요청들의 순서화를 보장한다. 일 실시예에서, IOA는 2개 이상의 주변 디바이스들의 네트워크를 상호연결 패브릭에 커플링하도록 구성된다.
많은 경우들에서, 컴퓨터 시스템은, 컴퓨터 시스템 내에서 데이터의 코히어런트 뷰가 보장되는 데이터/캐시 코히어런시 프로토콜을 구현한다. 결과적으로, 코히어런트 뷰를 보장하기 위해 공유 데이터에 대한 변경들은 적시에 정상적으로 컴퓨터 시스템 전체에 걸쳐 전파된다. 컴퓨터 시스템은 또한, 전형적으로, 입력/출력(I/O) 디바이스들과 같은 주변기기들을 포함하거나 또는 그들과 인터페이싱한다. 그러나, 이러한 주변기기들은 컴퓨터 시스템에 의해 구현되는 캐시 코히어런시 프로토콜을 이해하거나 효율적으로 사용하도록 구성되지 않는다. 예를 들어, 주변기기들은 종종 캐시 코히어런시 프로토콜보다 더 엄격한 특정 순서 규칙들을 그들의 트랜잭션들에 대해 사용한다(이는 아래에서 추가로 논의됨). 많은 주변기기들은 또한 캐시들을 갖지 않는데, 즉, 그들은 캐싱가능한 디바이스들이 아니다. 그 결과, 주변기기들의 트랜잭션들이 로컬 캐시에서 완료되지 않기 때문에, 주변기기들이 그들의 트랜잭션들에 대한 완료 확인응답들을 수신하는 데 상당히 더 오랜 시간이 걸릴 수 있다. 본 발명은, 다른 것들 중에서도, 주변기기들이 캐시 코히어런시 프로토콜을 적절히 사용하지 못하고 캐시들을 갖지 않는 것에 관련된 이러한 기술적인 문제들을 해결한다.
본 발명은, 코히어런트 패브릭에 주변기기들을 브리징하도록 그리고 그러한 I/O 디바이스들과 연관된 트랜잭션들을 프로세싱하기 위한 코히어런시 메커니즘들을 구현하도록 구성된 I/O 에이전트를 구현하기 위한 다양한 기법들을 설명한다. 후술되는 다양한 실시예들에서, 시스템 온 칩(SOC)은 메모리, 메모리 제어기들, 및 주변기기들에 커플링된 I/O 에이전트를 포함한다. I/O 에이전트는, 데이터가 SOC의 캐시 라인들에 저장될 수 있는 특정된 메모리 어드레스들을 타겟화하는 판독 및 기록 트랜잭션 요청들을 주변기기들로부터 수신하도록 구성된다. (캐시 라인은 캐시 블록으로 또한 지칭될 수 있다.) 다양한 실시예들에서, 주변기기들의 특정 순서화 규칙들은, 판독/기록 트랜잭션들이 직렬로(예컨대, 그들이 수신되는 순서에 대해 순서가 벗어나지 않게) 완료되는 것을 요구한다. 그 결과, 하나의 실시예에서, I/O 에이전트는 판독/기록 트랜잭션을, 다음으로 발생하는 판독/기록 트랜잭션을 개시하기 전에, 그들의 실행 순서에 따라 완료하도록 구성된다. 그러나, 그러한 트랜잭션들을 더 성능에 좋은 방식으로 수행하기 위해, 다양한 실시예들에서, I/O 에이전트는 타겟화되고 있는 캐시 라인들의 배타적 소유권을 획득하도록 구성되며, 이에 따라 그러한 캐시 라인들의 데이터가 SOC의 다른 캐싱 에이전트들(예컨대, 프로세서 코어) 내에서 유효 상태에서 캐싱되지 않게 된다. 제2 트랜잭션에 대해 작업을 시작하기 전에 제1 트랜잭션이 완료되기를 기다리는 대신, I/O 에이전트는 제2 트랜잭션에 의해 타겟화된 캐시 라인(들)의 배타적 소유권을 선점적으로 획득할 수 있다. 배타적 소유권을 획득하는 것의 일부로서, 다양한 실시예들에서, I/O 에이전트는 그러한 캐시 라인들에 대한 데이터를 수신하고, 데이터를 I/O 에이전트의 로컬 캐시 내에 저장한다. 제1 트랜잭션이 완료되면, 그 이후에 I/O 에이전트는, 그러한 캐시 라인들의 데이터에 대한 요청을 전송해 보내고 데이터가 반환되기를 기다릴 필요 없이, 그의 로컬 캐시에서 제2 트랜잭션을 완료할 수 있다. 아래에서 더 상세히 논의되는 바와 같이, I/O 에이전트는 연관된 트랜잭션의 유형에 따라 배타적 판독 소유권 또는 배타적 기록 소유권을 획득할 수 있다.
일부 경우들에서, I/O 에이전트가 대응하는 트랜잭션을 수행하기 전에, I/O 에이전트는 캐시 라인의 배타적 소유권을 상실할 수 있다. 예를 들어, I/O 에이전트는, 캐시 라인에 대해 I/O 에이전트에 저장된 데이터를 무효화하는 것을 포함하여, I/O 에이전트로 하여금 캐시 라인의 배타적 소유권을 포기하게 하는 스누프를 수신할 수 있다. 본 명세서에서 사용되는 바와 같은 "스누프" 또는 "스누프 요청"은 캐시 라인에 대한 상태 변경을 요청하기 위해(예컨대, 컴포넌트의 캐시 내에 저장된 캐시 라인의 데이터를 무효화하기 위해) 컴포넌트로 송신되는 메시지를 지칭하고, 그 컴포넌트가 캐시 라인의 배타적 사본을 갖거나 또는 이와 달리 캐시 라인을 담당하는 경우, 메시지는 또한 캐시 라인이 컴포넌트에 의해 제공되는 것을 요청할 수 있다. 다양한 실시예들에서, 캐시 라인으로 지향된 임계 수의 나머지 프로세싱되지 않은 트랜잭션들이 존재하는 경우, I/O 에이전트는 캐시 라인의 배타적 소유권을 재획득할 수 있다. 예를 들어, 캐시 라인을 타겟화하는 3개의 프로세싱되지 않은 기록 트랜잭션들이 존재하는 경우, I/O 에이전트는 그 캐시 라인의 배타적 소유권을 재획득할 수 있다. 이는 특정 캐시 라인을 타겟화하는 나머지 트랜잭션들의 비합리적으로 느린 직렬화를 방지할 수 있다. 다양한 실시예들에서, 더 많거나 더 적은 수의 프로세싱되지 않은 트랜잭션들이 임계치로서 사용될 수 있다.
이러한 기법들은 이전 접근법들에 비해 유리할 수 있는데, 그 이유는, 이러한 기법들이, 주변기기들의 순서 규칙들이, 코히어런시 메커니즘들을 구현하는 것을 통해 그러한 순서 규칙들의 부정적인 영향들을 부분적으로 또는 전체적으로 무효화하면서, 유지되게 하기 때문이다. 특히, 트랜잭션이, 다음으로 발생하는 트랜잭션에 대한 작업이 시작되기 전에 완료되는 순서 규칙들에 따라 특정 순서로 트랜잭션들을 수행하는 패러다임은 비합리적으로 느릴 수 있다. 일례로서, 캐시 라인에 대한 데이터를 캐시 내로 판독하는 것은 발생하는 데 500회 초과의 클록 사이클들이 걸릴 수 있다. 이와 같이, 이전 트랜잭션이 완료될 때까지 다음으로 발생하는 트랜잭션이 시작되지 않는 경우, 각각의 트랜잭션은 완료되는 데 적어도 500회의 클록 사이클들이 걸릴 것이며, 그 결과 트랜잭션들의 세트를 프로세싱하는 데 많은 수의 클록 사이클들이 사용된다. 본 발명에 개시된 바와 같이 관련 캐시 라인들의 배타적 소유권을 선점적으로 획득함으로써, 각각의 트랜잭션에 대한 많은 수의 클록 사이클들이 회피될 수 있다. 예를 들어, I/O 에이전트가 트랜잭션들의 세트를 프로세싱하고 있을 때, I/O 에이전트는 제1 트랜잭션이 완료되기 전에 데이터를 선점적으로 캐싱하기 시작할 수 있다. 그 결과, 제1 트랜잭션이 완료될 때 제2 트랜잭션에 대한 데이터가 캐싱되어 이용가능할 수 있으며, 이에 따라 I/O 에이전트가 이후에 곧 바로 제2 트랜잭션을 완료할 수 있게 된다. 이와 같이, 트랜잭션들의 일부분은 완료되는 데 각각, 예컨대 500회 초과의 클록 사이클들이 걸리지 않을 수 있다. 이들 기법들의 예시적인 적용이 이제, 도 44에 대한 참조를 시작으로 논의될 것이다.
이제 도 44를 참조하면, 예시적인 시스템 온 칩(SOC)(D100)의 블록도가 예시되어 있다. 일 실시예에서, SOC(D100)는 도 1에 도시된 SOC(10)의 실시예일 수 있다. 명칭에서 암시되는 바와 같이, SOC(D100)의 컴포넌트들은 집적 회로 "칩"으로서 단일 반도체 기판 상에 집적된다. 그러나, 일부 실시예들에서, 컴포넌트들은 컴퓨팅 시스템 내의 2개 이상의 별개의 칩들 상에 구현된다. 예시된 실시예에서, SOC(D100)는 캐싱 에이전트(D110), 메모리(DD130A, 130B)에 각각 커플링된 메모리 제어기들(D120A, D120B), 및 입력/출력(I/O) 클러스터(D140)를 포함한다. 컴포넌트들(D110, D120, D140)은 상호연결부(D105)를 통해 함께 커플링된다. 또한 도시된 바와 같이, 캐싱 에이전트(D110)는 프로세서(D112) 및 캐시(D114)를 포함하는 반면, I/O 클러스터(D140)는 I/O 에이전트(D142) 및 주변기기(D144)를 포함한다. 다양한 실시예들에서, SOC(D100)는 도시된 것과는 상이하게 구현된다. 예를 들어, SOC(D100)는 디스플레이 제어기, 전력 관리 회로 등을 포함할 수 있고, 메모리(D130A, D130B)는 SOC(D100) 상에 포함될 수 있다. 다른 예로서, I/O 클러스터(D140)는 다수의 주변기기들(D144)을 가질 수 있고, 이들 중 하나 이상은 SOC(D100) 외부에 있을 수 있다. 따라서, SOC(D100)의 컴포넌트들의 수(및 또한 서브컴포넌트들의 수)는 실시예들 사이에서 가변적일 수 있다는 것에 유의한다. 도 44에 도시된 수보다 더 많거나 더 적은 각각의 컴포넌트/서브컴포넌트가 존재할 수 있다.
다양한 실시예들에서, 캐싱 에이전트(D110)는, 메모리 데이터를 캐싱하기 위한 캐시를 포함하거나, 또는 이와 달리 캐시 라인들을 제어하고 잠재적으로 그러한 캐시 라인들의 데이터를 국소적으로 업데이트할 수 있는 임의의 회로부이다. 캐싱 에이전트들(D110)은 캐시 코히어런시 프로토콜에 참여하여, 하나의 캐싱 에이전트(D110)에 의해 이루어진 데이터에 대한 업데이트들이 그 데이터를 후속적으로 판독하는 다른 캐싱 에이전트들(D110)에게 가시적인 것을 그리고 둘 이상의 캐싱 에이전트들(D110)에 의해 특정 순서(메모리 제어기들(D120A, D120B)과 같은 SOC(D100) 내의 순서화 지점에서 결정된 바와 같음)로 이루어진 업데이트들이 캐싱 에이전트들(D110)에 의해 그 순서로 관찰되는 것을 보장할 수 있다. 캐싱 에이전트들(D110)은, 예를 들어, 프로세싱 유닛들(예컨대, CPU들, GPU들 등), 고정된 기능 회로부, 및 내장형 프로세서(또는 프로세서들)를 통해 프로세서 보조를 받는 고정된 기능 회로부를 포함할 수 있다. I/O 에이전트(D142)가 캐시들의 세트를 포함하기 때문에, I/O 에이전트(D142)는 한 유형의 캐싱 에이전트(D110)로 간주될 수 있다. 그러나, I/O 에이전트(D142)는 다른 캐싱 에이전트들(D110)과는 상이한데, 그 이유는 적어도, I/O 에이전트(D142)가 그들 자신의 캐시들을 갖지 않는 다른 별개의 엔티티들(예컨대, 디스플레이, USB 접속 디바이스 등과 같은 주변기기들)에 대한 데이터를 캐싱하도록 구성된 캐싱 가능 엔티티로서 역할을 하기 때문이다. 추가적으로, I/O 에이전트(D142)는 주변기기 메모리 액세스 레이턴시를 개선하기 위해 비교적 적은 수의 캐시 라인들을 일시적으로 캐싱할 수 있지만, 일단 트랜잭션들이 완료되면 캐시 라인들을 선제적으로 해제(retire)할 수 있다.
예시된 실시예에서, 캐싱 에이전트(D110)는 SOC(D100)의 CPU로서 역할을 할 수 있는 프로세서(D112)를 갖는 프로세싱 유닛이다. 다양한 실시예들에서, 프로세서(D112)는 그 프로세서(D112)에 의해 구현된 명령어 세트 아키텍처에 정의된 명령어들을 실행하도록 구성된 임의의 회로부 및/또는 마이크로코드를 포함한다. 프로세서(D112)는 SOC(D100)의 다른 컴포넌트들과 함께 집적 회로 상에 구현된 하나 이상의 프로세서 코어들을 포괄할 수 있다. 프로세서(D112)의 그러한 개별 프로세서 코어들은 데이터 및 프로그램 명령어들을 저장하기 위한 그들 자신의 각각의 캐시들(예를 들어, L0 캐시 및/또는 L1 캐시)을 포함하면서 공통의 마지막 레벨 캐시(예를 들어, L2 캐시)를 공유할 수 있다. 프로세서(D112)는 운영 체제와 같은 시스템의 메인 제어 소프트웨어를 실행할 수 있다. 대체적으로, CPU에 의해 실행되는 소프트웨어는 시스템의 원하는 기능을 실현하도록 시스템의 다른 컴포넌트들을 제어한다. 프로세서(D112)는 애플리케이션 프로그램들과 같은 다른 소프트웨어를 추가로 실행할 수 있으며, 그에 따라 애플리케이션 프로세서로 지칭될 수 있다. 캐싱 에이전트(D110)는 캐싱 에이전트(D110)를 SOC(D100)의 다른 컴포넌트들에 대해 인터페이싱시키도록 구성된 하드웨어(예컨대, 상호연결부(D105)에 대한 인터페이스)를 추가로 포함할 수 있다.
다양한 실시예들에서, 캐시(D114)는 데이터 또는 프로그램 명령어들을 저장하도록 구성된 엔트리들을 포함하는 저장 어레이이다. 이와 같이, 캐시(D114)는 데이터 캐시 또는 명령어 캐시, 또는 공유 명령어/데이터 캐시일 수 있다. 캐시(D114)는 연관 저장 어레이(예를 들어, 완전 연관 또는 4 웨이 집합 연관 캐시(4-way set associative cache)와 같은 집합 연관) 또는 직접 사상 저장 어레이(direct-mapped storage array)일 수 있고, 임의의 저장 용량을 가질 수 있다. 다양한 실시예들에서, 캐시 라인들(또는 대안적으로 "캐시 블록들")은 캐시(DD114) 내에서의 할당 및 할당해제의 단위이고, 임의의 원하는 크기(예컨대, 32 바이트, 64 바이트, 128 바이트 등)의 것일 수 있다. 캐싱 에이전트(DD110)의 동작 동안, 정보는 시스템의 다른 컴포넌트들로부터 캐시(D114)로 인출(pull)되어 프로세서(D112)의 프로세서 코어들에 의해 사용될 수 있다. 예를 들어, 프로세서 코어가 실행 경로를 통해 진행함에 따라, 프로세서 코어는 프로그램 명령어들이 메모리(D130A, D130B)로부터 캐시(D114)로 페치되게 할 수 있고, 이어서 프로세서 코어는 그들을 캐시(D114)로부터 페치하고 이들을 실행할 수 있다. 또한, 캐싱 에이전트(D110)의 동작 동안, 정보는 메모리 제어기들(D120A, D120B)을 통해 캐시(D114)로부터 메모리(예컨대, 메모리(D130A, D130B))로 기입될 수 있다.
다양한 실시예들에서, 메모리 제어기(D120)는 메모리(D130)로부터의 데이터에 액세스하는 것과 같은 메모리 동작들을 수행하기 위한 메모리 요청들(예를 들어, 로드/저장 요청들, 명령어 페치 요청들 등)을, SOC(D100)의 다른 컴포넌트들로부터 수신하도록 구성된 회로부를 포함한다. 메모리 제어기들(D120)은 임의의 유형의 메모리(D130)에 액세스하도록 구성될 수 있다. 메모리(D130)는 하드 디스크 저장소, 플로피 디스크 저장소, 착탈식 디스크 저장소, 플래시 메모리, 랜덤 액세스 메모리(RAM-SRAM, EDO RAM, SDRAM, DDR SDRAM, RAMBUS RAM, 등), 판독 전용 메모리(PROM, EEPROM 등) 등과 같은 다양하고 상이한 물리적 메모리 매체들을 사용하여 구현될 수 있다. 그러나, SOC(D100)에 이용가능한 메모리는 메모리(D130)와 같은 1차 저장소로 제한되지 않는다. 오히려, SOC(D100)는 캐싱 에이전트(D110) 내의 캐시 메모리(예를 들어, L1 캐시, L2 캐시 등)와 같은 다른 형태들의 저장소를 추가로 포함할 수 있다. 일부 실시예들에서, 메모리 제어기들(D120)은 메모리(D130)에 제시될 메모리 동작들을 저장하고 순서화하기 위한 큐들을 포함한다. 메모리 제어기들(D120)은 또한, 메모리(D130)에 기록되기를 기다리고 있는 기록 데이터 및 캐싱 에이전트(D110)와 같은 메모리 동작의 소스로 반환되기를 기다리고 있는 판독 데이터를 저장하기 위한 데이터 버퍼들을 포함할 수 있다.
도 45와 관련하여 더 상세히 논의되는 바와 같이, 메모리 제어기들(D120)은 SOC(D100) 내의 캐시 라인들의 데이터의 위치를 추적하는 컴포넌트들을 포함하여, SOC(D100) 내에서 캐시 코히어런시를 유지하기 위한 다양한 컴포넌트들을 포함할 수 있다. 이에 따라, 다양한 실시예들에서, 캐시 라인 데이터에 대한 요청들은 다른 캐싱 에이전트들(D110) 및/또는 메모리(D130A, D130B)로부터의 데이터에 액세스할 수 있는 메모리 제어기들(D120)을 통해 라우팅된다. 데이터에 액세스하는 것에 추가하여, 메모리 제어기들(D120)은 스누프 요청들이 자신들의 로컬 캐시 내에 데이터를 저장하는 캐싱 에이전트들(D110) 및 I/O 에이전트들(DD142)에 발행되게 할 수 있다. 그 결과, 메모리 제어기들(120)은 그러한 캐싱 에이전트들(D110) 및 I/O 에이전트들(D142)로 하여금, 시스템 내에서의 코히어런시를 보장하기 위해 그들의 캐시들로부터 데이터를 무효화하고/하거나 축출하게 할 수 있다. 따라서, 다양한 실시예들에서, 메모리 제어기들(D120)은 배타적 캐시 라인 소유권 요청들을 프로세싱하는데, 여기서 메모리 제어기들(D120)은 캐시 라인의 컴포넌트 배타적 소유권을 승인하면서, 스누프 요청을 사용하여 데이터가 다른 캐싱 에이전트들(D110) 및 I/O 에이전트들(D142)에는 캐싱되지 않는 것을 보장한다.
다양한 실시예들에서, I/O 클러스터(D140)는 추가적인 하드웨어 기능을 제공할 수 있는 하나 이상의 주변 디바이스들(D144)(또는 간단히, 주변기기들(D144)) 및 I/O 에이전트(D142)를 포함한다. 주변기기들(D144)은, 예를 들어, 비디오 주변기기들(예를 들어, GPU들, 블렌더들, 비디오 인코더/디코더들, 스케일러들, 디스플레이 제어기들 등) 및 오디오 주변기기들(예를 들어, 마이크로폰들, 스피커들, 마이크로폰들 및 스피커들에 대한 인터페이스들, 디지털 신호 프로세서들, 오디오 프로세서들, 믹서들 등)을 포함할 수 있다. 주변기기들(D144)은 SOC(D100) 외부의 다양한 인터페이스들(예컨대, USB(Universal Serial Bus), PCI(peripheral component interconnect) 및 PCIe(PCI Express), 직렬 및 병렬 포트들 등)에 대한 인터페이스 제어기들을 포함할 수 있다. 외부 컴포넌트들에 대한 상호연결은 SOC(D100)의 외부로 연장되는, 도 44에서 파선 화살표로 예시된다. 주변기기들(D144)은 또한 매체 액세스 제어기(media access controller, MAC)들과 같은 네트워킹 주변기기들을 포함할 수 있다. 도시되지 않았지만, 다양한 실시예들에서, SOC(D100)는 각자의 주변기기들(D144)의 세트들을 갖는 다수의 I/O 클러스터들(D140)을 포함한다. 일례로서, SOC(D100)는 외부 디스플레이 주변기기들(D144)을 갖는 제1 I/O 클러스터(140), USB 주변기기들(D144)을 갖는 제2 I/O 클러스터(D140), 및 비디오 인코더 주변기기들(D144)을 갖는 제3 I/O 클러스터(D140)를 포함할 수 있다. 그러한 I/O 클러스터들(D140) 각각은 그 자신의 I/O 에이전트(D142)를 포함할 수 있다.
다양한 실시예들에서, I/O 에이전트(D142)는 상호연결부(D105)에 그의 주변기기들(D144)을 브리징하도록 그리고 그러한 주변기기들(D144)과 연관된 트랜잭션들을 프로세싱하기 위한 코히어런시 메커니즘들을 구현하도록 구성된 회로부를 포함한다. 도 45에 대해 더 상세히 논의된 바와 같이, I/O 에이전트(D142)는 메모리(D130A, D130B)와 연관된 캐시 라인들에 데이터를 판독 및/또는 기록하기 위한 트랜잭션 요청들을 주변기기(D144)로부터 수신할 수 있다. 이러한 요청들에 응답하여, 다양한 실시예들에서, I/O 에이전트(D142)는 메모리 제어기들(D120)과 통신하여 타겟팅된 캐시 라인들에 대한 배타적 소유권을 획득한다. 따라서, 메모리 제어기들(D120)은 I/O 에이전트(D142)에게 배타적 소유권을 승인할 수 있는데, 이는 I/O 에이전트(D142)에게는 캐시 라인 데이터를 제공하고 다른 캐싱 에이전트들(D110) 및 I/O 에이전트들(D142)에게는 스누프 요청들을 전송하는 것을 수반할 수 있다. 캐시 라인의 배타적 소유권을 획득한 후, I/O 에이전트(D142)는 캐시 라인을 타겟화하는 트랜잭션들을 완료하기 시작할 수 있다. 트랜잭션을 완료하는 것에 응답하여, I/O 에이전트(D142)는 트랜잭션이 완료되었다는 확인응답을 요청 주변기기(D144)로 전송할 수 있다. 일부 실시예들에서, I/O 에이전트(D142)는 특정된 순서로 완료될 필요가 없는 완화된 순서화된 요청들에 대해서는 배타적 소유권을 획득하지 않는다.
다양한 실시예들에서, 상호연결부(D105)는 SOC(D100)의 컴포넌트들 사이에서 통신하기 위한 임의의 통신 기반 상호연결부 및/또는 프로토콜이다. 예를 들어, 상호연결부(D105)는 캐싱 에이전트(D110) 내의 프로세서(D112)가 I/O 클러스터(D140) 내의 주변기기(D144)와 상호작용하게 할 수 있다. 다양한 실시예들에서, 상호연결부(D105)는 공유 버스 구성들, 크로스 바(cross bar) 구성들, 및 브리지들을 갖는 계층구조적 버스들을 포함하는, 버스 기반이다. 상호연결부(D105)는 패킷 기반일 수 있고, 브리지들을 갖는 계층구조, 크로스 바, 포인트-투-포인트(point-to-point), 또는 다른 상호연결부들일 수 있다.
이제 도 45를 참조하면, 캐싱 에이전트(D110), 메모리 제어기(D120), I/O 에이전트(D142), 및 주변기기들(D144)을 수반하는 상호작용들의 예시적인 요소들의 블록도가 도시되어 있다. 예시된 실시예에서, 메모리 제어기(120)는 코히어런시 제어기(D210) 및 디렉토리(D220)를 포함한다. 일부 경우들에서, 예시된 실시예는 도시된 것과는 상이하게 구현될 수 있다. 예를 들어, 다수의 캐싱 에이전트들(D110), 다수의 메모리 제어기들(D120), 및/또는 다수의 I/O 에이전트들(D142)이 존재할 수 있다.
언급된 바와 같이, 메모리 제어기(D120)는 SOC(D100) 내의 캐시 라인들의 위치를 추적하는 것을 포함하여, SOC(D100) 내에서 캐시 코히어런시를 유지할 수 있다. 따라서, 다양한 실시예들에서, 코히어런시 제어기(D210)는 캐시 코히어런시 프로토콜의 메모리 제어기 부분을 구현하도록 구성된다. 캐시 코히어런시 프로토콜은 코히어런트 트랜잭션들을 완료하기 위해, 캐싱 에이전트들(D110), I/O 에이전트들(D142), 및 메모리 제어기들(D120)(또는 코히어런시 제어기들(D210)) 사이에서 송신될 수 있는 메시지들 또는 커맨드들을 특정할 수 있다. 그러한 메시지들은 트랜잭션 요청들(D205), 스누프들(D225), 및 스누프 응답들(D227)(또는 대안적으로, "완료들")을 포함할 수 있다. 다양한 실시예들에서, 트랜잭션 요청(D205)은 트랜잭션을 개시하고, 요청된 캐시 라인/블록을 (예를 들어, 그 캐시 라인의 어드레스를 이용하여) 특정하고 요청자가 그 캐시 라인을 수신하기 위한 상태를 특정하는(또는, 다양한 경우들에서, 더 허용적인 상태로서의 최소 상태가 제공될 수 있음) 메시지이다. 트랜잭션 요청(D205)은 요청자가 캐시 라인에 데이터를 기록하고자 하는 기록 트랜잭션 또는 요청자가 캐시 라인의 데이터를 판독하고자 하는 판독 트랜잭션일 수 있다. 예를 들어, 트랜잭션 요청(D205)은 완화되지 않은 순서화된 동적 랜덤 액세스 메모리(DRAM) 요청을 특정할 수 있다. 일부 실시예들에서, 코히어런시 제어기(D210)는 또한, SOC(D100)의 컴포넌트들을 대신해 메모리(D130)로부터의 데이터에 액세스하기 위한 메모리 요청들(D222)을 메모리(D130)에 발행하도록 그리고 요청된 데이터를 포함할 수 있는 메모리 응답들(D224)을 수신하도록 구성된다.
묘사된 바와 같이, I/O 에이전트(D142)는 주변기기들(D144)로부터 트랜잭션 요청들(D205)을 수신한다. I/O 에이전트(D142)는 주어진 주변기기(D144)로부터 일련의 기록 트랜잭션 요청들(D205), 일련의 판독 트랜잭션 요청들(D205), 또는 판독 및 기록 트랜잭션 요청들의 조합(D205)을 수신할 수 있다. 예를 들어, 설정된 시간 간격 내에서, I/O 에이전트(D142)는 주변기기(D144A)로부터 4개의 판독 트랜잭션 요청들(D205)을 그리고 주변기기(D144B)로부터 3개의 기록 트랜잭션 요청들(D205)을 수신할 수 있다. 다양한 실시예들에서, 주변기기(D144)로부터 수신된 트랜잭션 요청들(D205)은 소정 순서로 완료되어야(예컨대, 그들이 주변기기(D144)로부터 수신된 순서로 완료되어야) 한다. 순서 내의 다음 트랜잭션 요청(D205)에 대해 작업을 시작하기 전에 트랜잭션 요청(D205)이 완료될 때까지 기다리는 대신, 다양한 실시예들에서, I/O 에이전트(D142)는 타겟화된 캐시 라인들의 배타적 소유권을 선점적으로 획득함으로써 나중의 요청들(D205)에 대해 작업을 수행한다. 따라서, I/O 에이전트(D142)는 메모리 제어기들(D120)(특히, 코히어런시 제어기들(D210))에 배타적 소유권 요청들(D215)을 발행할 수 있다. 일부 경우들에서, 트랜잭션 요청들(D205)의 세트는 상이한 메모리 제어기들(D120)에 의해 관리되는 캐시 라인들을 타겟화할 수 있으며, 이와 같이, I/O 에이전트(142)는 그러한 트랜잭션 요청들(D205)에 기초하여 적절한 메모리 제어기들(D120)에 배타적 소유권 요청들(D215)을 발행할 수 있다. 판독 트랜잭션 요청(D205)의 경우, I/O 에이전트(D142)는 배타적 판독 소유권을 획득할 수 있고; 기록 트랜잭션 요청(D205)의 경우, I/O 에이전트(D142)는 배타적 기록 소유권을 획득할 수 있다.
다양한 실시예들에서, 코히어런시 제어기(D210)는, 메모리 제어기(D120)가 커플링된 메모리(D130)에 맵핑된 캐시 라인들에 타겟화된 요청들(예컨대, 배타적 소유권 요청들(D215))을 상호연결부(D105)로부터 (예컨대, 메모리 제어기(D120)에 포함된 하나 이상의 큐들을 통해) 수신하도록 구성된 회로부이다. 코히어런시 제어기(D210)는, 또한 SOC(D100)에서 캐시 코히어런시를 유지하면서, 그러한 요청들을 프로세싱하고 요청된 캐시 라인들의 데이터를 갖는 응답들(예컨대, 배타적 소유권 응답(D217))을 생성할 수 있다. 캐시 코히어런시를 유지하기 위해, 코히어런시 제어기(D210)는 디렉토리(D220)를 사용할 수 있다. 다양한 실시예들에서, 디렉토리(D220)는 엔트리들의 세트를 갖는 저장 어레이이며, 이들 각각은 시스템 내의 각자의 캐시 라인의 코히어런시 상태를 추적할 수 있다. 일부 실시예들에서, 엔트리는 또한 캐시 라인의 데이터의 위치를 추적한다. 예를 들어, 디렉토리(D220)의 엔트리는, 특정 캐시 라인의 데이터가 유효 상태에서 캐싱 에이전트(D110)의 캐시(D114)에 캐싱됨을 나타낼 수 있다. (배타적 소유권이 논의되지만, 일부 경우들에서, 캐시 라인은 판독 목적들을 위해 다수의 캐싱 가능 엔티티들(예컨대, 캐싱 에이전트(D110)) 사이에서 공유될 수 있으며, 이에 따라 공유된 소유권이 제공될 수 있다.) 캐시 라인의 배타적 소유권을 제공하기 위해, 코히어런시 제어기(D210)는 캐시 라인이 유효 상태에서 메모리 제어기(D120) 및 메모리(D130) 외부에 저장되지 않는다는 것을 보장할 수 있다. 결과적으로, 배타적 소유권 요청(D215)에 의해 타겟화된 캐시 라인과 연관된 디렉토리 엔트리에 기초하여, 다양한 실시예들에서, 코히어런시 제어기(D210)는 어느 컴포넌트들(예컨대, 캐싱 에이전트들(D110), I/O 에이전트들(D142) 등)이 스누프들(D225)을 수신할지를 그리고 스누프(D225)의 유형(예컨대, 무효화, 소유됨으로의 변경 등)을 결정한다. 예를 들어, 메모리 제어기(D120)는, 캐싱 에이전트(110)가 I/O 에이전트(D142)에 의해 요청된 캐시 라인의 데이터를 저장한다고 결정할 수 있으며, 이에 따라 도 45에 도시된 바와 같이 캐싱 에이전트(D110)에 스누프(D225)를 발행할 수 있다. 일부 실시예들에서, 코히어런시 제어기(D210)는 특정 컴포넌트들을 타겟화하지 않지만, 대신에, SOC(D100)의 컴포넌트들 중 많은 것에 의해 관찰되는 스누프들(D225)을 브로드캐스트한다.
다양한 실시예들에서, 적어도 2개의 유형들의 스누프들, 즉, 스누프 포워드(forward) 및 스누프 백(back)이 지원된다. 스누프 포워드 메시지들은 컴포넌트(예컨대, 캐시 에이전트(D110))로 하여금 캐시 라인의 데이터를 요청 컴포넌트로 포워딩하게 하는 데 사용될 수 있는 반면, 스누프 백 메시지들은 컴포넌트로 하여금 캐시 라인의 데이터를 메모리 제어기(D120)로 반환하게 하는 데 사용될 수 있다. 스누프 포워드 및 스누프 백 흐름들을 지원하는 것은 3-홉(스누프 포워드) 거동 및 4-홉(스누프 백) 거동 둘 모두를 허용할 수 있다. 예를 들어, 스누프 포워드는 캐시 라인이 컴포넌트에 제공될 때 메시지들의 수를 최소화하는 데 사용될 수 있는데, 그 이유는 컴포넌트가 캐시 라인을 저장하고 잠재적으로 그 내부의 데이터를 사용할 수 있기 때문이다. 한편, 캐싱불가능 컴포넌트는 전체 캐시 라인을 저장하지 않을 수 있으며, 따라서 메모리로 다시 사본을 보내는 것은 전체 캐시 라인 데이터가 메모리 제어기(D120)에서 캡처되는 것을 보장할 수 있다. 다양한 실시예들에서, 캐싱 에이전트(D110)는 메모리 제어기(D120)로부터 스누프(D225)를 수신하고, 캐시 라인 상태를 업데이트하도록(예컨대, 캐시 라인을 무효화하도록) 그 스누프(D225)를 프로세싱하고, (스누프(D225)에 의해 특정된 경우) 초기 소유권 요청자 또는 메모리 제어기(D120)에게 캐시 라인의 데이터의 사본을 다시 제공한다. 다양한 실시예들에서, 스누프 응답(D227)(또는 "완료")은, 상태 변경이 이루어졌다는 것을 나타내고, 적용가능한 경우, 캐시 라인 데이터의 사본을 제공하는 메시지이다. 스누프 포워드 메커니즘이 사용될 때, 데이터는 상호연결부(D105)를 거쳐 다음과 같은 3개의 홉들에서 요청 컴포넌트에게 제공된다: 요청 컴포넌트로부터 메모리 제어기(D120)로의 요청, 메모리 제어기(D120)로부터 캐싱으로의 스누프, 및 캐싱 컴포넌트에 의한 요청 컴포넌트로의 스누프 응답. 스누프 백 메커니즘이 사용될 때, 다음과 같은 4개의 홉들이 발생할 수 있다: 3-홉 프로토콜에서와 같은 요청 및 스누프, 캐싱 컴포넌트에 의한 메모리 제어기(D120)로의 스누프 응답, 및 메모리 제어기(D120)로부터 요청 컴포넌트로의 데이터.
일부 실시예들에서, 코히어런시 제어기(D210)는, 스누프 응답(D227)이 수신될 때 대신에, 스누프(D225)가 생성되고 송신될 때 디렉토리(D220)를 업데이트할 수 있다. 일단 요청된 캐시 라인이 메모리 제어기(D120)에 의해 회수되었다면, 다양한 실시예들에서, 코히어런시 제어기(D210)는 배타적 소유권 응답(D217)을 통해 소유권 요청자(예를 들어, I/O 에이전트(D142))에게 배타적 판독(또는 기록) 소유권을 승인한다. 배타적 소유권 응답(D217)은 요청된 캐시 라인의 데이터를 포함할 수 있다. 다양한 실시예들에서, 코히어런시 제어기(D210)는, 캐시 라인이 소유권 요청자에게 승인되었음을 나타내도록 디렉토리(D220)를 업데이트한다.
예를 들어, I/O 에이전트(D142)는 주변기기(D144A)로부터 일련의 판독 트랜잭션 요청들(D205)을 수신할 수 있다. 그러한 요청들 중 주어진 하나의 요청에 대하여, I/O 에이전트(D142)는 특정 캐시 라인과 연관된 데이터에 대한 배타적 판독 소유권 요청(D215)을 메모리 제어기(D120)로 전송할 수 있다(또는 캐시 라인이 다른 메모리 제어기(D120)에 의해 관리되는 경우, 배타적 판독 소유권 요청(D215)은 그 다른 메모리 제어기(D120)로 전송됨). 코히어런시 제어기(D210)는, 디렉토리(D220)의 엔트리에 기초하여, 캐시 에이전트(D110)가 유효 상태에서 특정 캐시 라인과 연관된 데이터를 현재 저장하고 있다고 결정할 수 있다. 따라서, 코히어런시 제어기(D210)는, 캐싱 에이전트(D110)로 하여금 그 캐시 라인의 소유권을 포기하게 하고 캐시 라인 데이터를 포함할 수 있는 스누프 응답(D227)을 다시 전송하게 하는 스누프(D225)를 캐싱 에이전트(D110)로 전송한다. 그 스누프 응답(D227)을 수신한 후에, 코히어런시 제어기(D210)는 배타적 소유권 응답(D217)을 생성하고 이어서 그것을 I/O 에이전트(D142)로 전송하여, I/O 에이전트(D142)에게 캐시 라인 데이터 및 캐시 라인의 배타적 소유권을 제공할 수 있다.
캐시 라인의 배타적 소유권을 수신한 후, 다양한 실시예들에서, I/O 에이전트(D142)는 대응하는 트랜잭션이 (순서화 규칙들에 따라) 완료될 수 있을 때까지 기다리는데, 즉, 대응하는 트랜잭션이 가장 연장의(senior) 트랜잭션이 될 때까지 그리고 트랜잭션에 대한 순서화 종속성이 해결될 때까지 기다린다. 예를 들어, I/O 에이전트들(D142)은 기록 트랜잭션들(A-D)을 수행하기 위해 주변기기(D144)로부터 트랜잭션 요청들(D205)을 수신할 수 있다. I/O 에이전트(D142)는 트랜잭션 C와 연관된 캐시 라인의 배타적 소유권을 획득할 수 있지만; 트랜잭션 A 및 트랜잭션 B는 완료되지 않았을 수 있다. 결과적으로, I/O 에이전트(D142)는, 트랜잭션 C와 연관된 캐시 라인에 대한 관련 데이터를 기록하기 전에, 트랜잭션 A 및 트랜잭션 B가 완료될 때까지 기다린다. 주어진 트랜잭션을 완료한 후에, 다양한 실시예들에서, I/O 에이전트(D142)는 요청된 트랜잭션이 수행되었음을 나타내는 트랜잭션 응답(D207)을 트랜잭션 요청자(예컨대, 주변기기(D144A))에게 제공한다. 다양한 경우들에서, I/O 에이전트(D142)는 캐시 라인의 배타적 판독 소유권을 획득하고, 캐시 라인에 대해 판독 트랜잭션들의 세트를 수행하고, 그 후에 배타적 판독 소유권이 유지되었던 동안 캐시 라인에 기록을 수행하지 않으면서 캐시 라인의 배타적 판독 소유권을 해제할 수 있다.
일부 경우들에서, I/O 에이전트(D142)는 동일한 캐시 라인을 타겟화하는 다수의 트랜잭션 요청들(D205)을 (상당히 짧은 기간 내에) 수신할 수 있고, 그 결과, I/O 에이전트(D142)는 대규모 판독 및 기록들을 수행할 수 있다. 일례로서, 주변기기(D144A)로부터 수신된 2개의 기록 트랜잭션 요청들(D205)이 캐시 라인의 하위 부분 및 상위 부분을 각각 타겟화할 수 있다. 따라서, I/O 에이전트(D142)는 캐시 라인의 배타적 기록 소유권을 획득하고, 적어도 기록 트랜잭션들 둘 모두가 완료될 때까지 캐시 라인과 연관된 데이터를 유지할 수 있다. 따라서, 다양한 실시예들에서, I/O 에이전트(D142)는 동일한 캐시 라인을 타겟화하는 트랜잭션들 사이에서 실행 소유권을 포워딩할 수 있다. 즉, I/O 에이전트(D142)는 각각의 개별 트랜잭션 요청(D205)에 대해 소유권 요청(D215)을 전송할 필요가 없다. 일부 경우들에서, I/O 에이전트(D142)는 판독 트랜잭션으로부터 기록 트랜잭션으로 (또는 그 반대로) 실행 소유권을 포워딩할 수 있지만, 다른 경우들에서, I/O 에이전트(D142)는 동일한 유형의 트랜잭션들 사이에서만(예컨대, 판독 트랜잭션으로부터 다른 판독 트랜잭션으로) 실행 소유권을 포워딩한다.
일부 경우들에서, I/O 에이전트(D142)가 캐시 라인에 대한 관련 트랜잭션들을 수행하기 전에, I/O 에이전트(D142)는 캐시 라인의 배타적 소유권을 상실할 수 있다. 일례로서, 트랜잭션이 수행될 수 있도록 가장 연장의 것이 되기를 기다리는 동안, I/O 에이전트(D142)는, 다른 I/O 에이전트(D142)가 캐시 라인의 배타적 소유권을 획득하고자 하는 결과로서, 메모리 제어기(D120)로부터 스누프(D225)를 수신할 수 있다. 캐시 라인의 배타적 소유권을 포기한 후, 다양한 실시예들에서, I/O 에이전트(D142)는 상실된 캐시 라인의 소유권을 재획득할지 여부를 결정한다. 상실된 캐시 라인이 하나의 보류 중인 트랜잭션과 연관되는 경우, 많은 경우들에서, I/O 에이전트(D142)는 캐시 라인의 배타적 소유권을 재획득하지 않지만; 일부 경우들에서, 보류 중인 트랜잭션이 설정된 수의 트랜잭션들의 뒤에 있는 경우(그리고 따라서 연장의 트랜잭션이 되려고 하지 않음), I/O 에이전트(D142)는 캐시 라인에 대한 배타적 소유권 요청(D215)을 발행할 수 있다. 그러나, 다양한 실시예들에서, 캐시 라인으로 지향된 임계 수의 보류 중인 트랜잭션들(예컨대, 2개의 보류 중인 트랜잭션들)이 있는 경우, I/O 에이전트(D142)는 캐시 라인의 배타적 소유권을 재획득한다.
이제 도 46a를 참조하면, I/O 에이전트(D142)가 기록 트랜잭션들을 프로세싱하는 것과 연관된 예시적인 요소들의 블록도가 도시되어 있다. 예시된 실시예에서, I/O 에이전트(D142)는 I/O 에이전트 제어기(D310) 및 코히어런시 캐시들(D320)을 포함한다. 도시된 바와 같이, 코히어런시 캐시들(D320)은 페치된 데이터 캐시(D322), 병합된 데이터 캐시(D324), 및 새로운 데이터 캐시(D326)를 포함한다. 일부 실시예들에서, I/O 에이전트(D142)는 도시된 것과는 상이하게 구현된다. 일례로서, I/O 에이전트(D142)는 메모리로부터 인출된 데이터 및 기록 트랜잭션의 일부로서 기록될 데이터를 위한 별개의 캐시들을 포함하지 않을 수 있다.
다양한 실시예들에서, I/O 에이전트 제어기(D310)는 I/O 에이전트(D142)에 커플링된 주변기기들(D144)과 연관된 트랜잭션들을 수신하고 프로세싱하도록 구성된 회로부이다. 예시된 실시예에서, I/O 에이전트 제어기(D310)는 주변기기(D144)로부터 기록 트랜잭션 요청(D205)을 수신한다. 기록 트랜잭션 요청(D205)은 목적지 메모리 어드레스를 특정하고, 기록될 데이터 또는 그 데이터의 위치에 대한 참조를 포함할 수 있다. 기록 트랜잭션을 프로세싱하기 위해, 다양한 실시예들에서, I/O 에이전트(D142)는 캐시들(D320)을 사용한다. 다양한 실시예들에서, 코히어런시 캐시들(D320)은 데이터 또는 프로그램 명령어들을 저장하도록 구성된 엔트리들을 포함하는 저장 어레이들이다. 캐시(D114)와 유사하게, 코히어런시 캐시들(D320)은 연관 저장 어레이들(예를 들어, 완전 연관 또는 4 웨이 연관 캐시와 같은 집합 연관) 또는 직접 사상 저장 어레이들일 수 있고, 임의의 저장 용량 및/또는 임의의 캐시 라인 크기(예컨대, 32 바이트, 64 바이트 등)를 가질 수 있다.
다양한 실시예들에서, 페치된 데이터 캐시(D322)는 배타적 소유권 요청(D215)을 발행하는 것에 응답하여 획득된 데이터를 저장하는 데 사용된다. 특히, 주변기기(D144)로부터 기록 트랜잭션 요청(D205)을 수신한 후, I/O 에이전트(D142)는 이어서 목적지/타겟화된 메모리 어드레스에 저장된 데이터를 관리하는 특정 메모리 제어기(D120)에게 배타적 기록 소유권 요청(D215)을 발행할 수 있다. 예시된 바와 같이, 그 메모리 제어기(D120)에 의해 반환된 데이터는 I/O 에이전트 제어기(D310)에 의해, 페치된 데이터 캐시(D322)에 저장된다. 다양한 실시예들에서, I/O 에이전트(D142)는 순서화 해결 이전에 페치된 데이터의 스누핑을 허용하기 위해, 그 데이터를 기록 트랜잭션 요청(D205)에 포함된 데이터와는 별개로 저장한다. 따라서, 도시된 바와 같이, I/O 에이전트(D142)는, I/O 에이전트(D142)로 하여금 스누프 응답(D227)을 제공하게 하는 스누프(D225)를 수신하여, 특정 메모리 제어기(D120)로부터 수신된 데이터를 해제할 수 있다.
다양한 실시예들에서, 새로운 데이터 캐시(D326)는 순서화 종속성이 해결될 때까지 기록 트랜잭션 요청(D205)에 포함된 데이터를 저장하는 데 사용된다. 일단 I/O 에이전트(D142)가 특정 메모리 제어기(D120)로부터 관련 데이터를 수신했으면 그리고 일단 기록 트랜잭션이 연장의 트랜잭션이 되었으면, I/O 에이전트(D142)는 페치된 데이터 캐시(D322)로부터의 관련 데이터를 새로운 데이터 캐시(D326)로부터의 대응하는 기록 데이터와 병합할 수 있다. 다양한 실시예들에서, 병합된 데이터 캐시(D324)는 병합된 데이터를 저장하는 데 사용된다. 다양한 경우들에서, 기록 트랜잭션은 캐시 라인의 모두가 아니라 일부를 타겟화할 수 있다. 따라서, 병합된 데이터는 기록 트랜잭션에 의해 변경된 부분 및 변경되지 않은 부분을 포함할 수 있다. 일부 경우들에서, I/O 에이전트(D142)는 다수의 캐시 라인 또는 캐시 라인의 모든 부분들을 함께 타겟화하는 기록 트랜잭션 요청들의 세트(D205)를 수신할 수 있다. 이와 같이, 기록 트랜잭션들의 세트를 프로세싱하면, 대부분의 캐시 라인(또는 전체 캐시 라인)이 변경될 수 있다. 일례로서, I/O 에이전트(D142)는 각각이 동일한 128 비트 캐시 라인의 상이한 32 비트 부분을 타겟화하는 4개의 기록 트랜잭션 요청들(D205)을 프로세싱할 수 있으며, 이에 따라 전체 라인 콘텐츠가 새로운 데이터로 대체된다. 일부 경우들에서, 기록 트랜잭션 요청(D205)은 전체 캐시 라인 기록이며, 이에 따라 기록 트랜잭션에 대한 페치된 데이터 캐시(D322)로부터 액세스된 데이터는 그 하나의 기록 트랜잭션 요청(D205)에 의해 완전히 대체된다. 일단 캐시 라인의 전체 콘텐츠가 대체되었거나 I/O 에이전트(D142)가 그 캐시 라인을 타겟화하는 관련 기록 트랜잭션들 모두를 완료했으면, 다양한 실시예들에서, I/O 에이전트(D142)는 캐시 라인의 배타적 기록 소유권을 해제하고, 이어서 코히어런시 캐시들(D320)로부터 데이터를 축출할 수 있다.
이제 도 46b를 참조하면, I/O 에이전트(D142)가 판독 트랜잭션들을 프로세싱하는 것과 연관된 예시적인 요소들의 블록도가 도시되어 있다. 예시된 실시예에서, I/O 에이전트(D142)는 I/O 에이전트 제어기(D310) 및 페치된 데이터 캐시(D322)를 포함한다. 일부 실시예들에서, I/O 에이전트(D142)는 도시된 것과는 상이하게 구현된다.
I/O 에이전트(D142)가 판독 트랜잭션들에 대해서는 데이터를 기록하지 않기 때문에, 다양한 실시예들에서, I/O 에이전트(D142)는 판독 트랜잭션들을 프로세싱하기 위해 병합된 데이터 캐시(D324) 및 새로운 데이터 캐시(D326)를 사용하지 않으며, 이와 같이, 그들은 예시된 실시예에서 도시되지 않는다. 결과적으로, 판독 트랜잭션 요청(D205)을 수신한 후, I/O 에이전트(D142)는 배타적 판독 소유권 요청(D215)을 적절한 메모리 제어기(D120)에 발행하고, 타겟화된 캐시 라인의 데이터를 포함하는 배타적 소유권 응답(D217)을 다시 수신할 수 있다. 일단 I/O 에이전트(D142)가 관련 데이터를 수신했으면 그리고 일단 판독 트랜잭션이 연장의 계류 중인 트랜잭션이 되었으면, I/O 에이전트(D142)는 판독 트랜잭션을 완료할 수 있다. 일단 캐시 라인의 전체 콘텐츠가 판독되었으면 또는 I/O 에이전트(D142)가 그 캐시 라인을 타겟화하는 관련 판독 트랜잭션들 모두를 완료했으면(상이한 판독 트랜잭션은 그 캐시 라인의 상이한 부분들을 타겟화할 수 있기 때문임), 다양한 실시예들에서, I/O 에이전트(D142)는 캐시 라인의 배타적 판독 소유권을 해제하고, 이어서 페치된 데이터 캐시(D322)로부터 데이터를 축출할 수 있다.
이제 도 47을 참조하면, 주변기기(D144)로부터 수신된 판독 트랜잭션 요청들(D205)을 프로세싱하는 일례가 도시되어 있다. 이러한 예는 판독 트랜잭션 요청들(D205)에 관한 것이지만, 하기의 논의는 또한 기록 트랜잭션 요청들(D205)을 프로세싱하는 것에 적용될 수 있다. 도시된 바와 같이, I/O 에이전트(D142)는 주변기기(D144)로부터, 판독 트랜잭션 요청(D205A) 및 이어서 판독 트랜잭션 요청(D205B)을 수신한다. 트랜잭션 요청들(D205A, D205B)을 수신하는 것에 응답하여, 트랜잭션 요청(D205A)에 대해, I/O 에이전트(142)는 메모리 제어기(D120B)에 배타적 판독 소유권 요청(D215A)을 발행하고, 트랜잭션 요청(D205B)에 대해, I/O 에이전트(D142)는 메모리 제어기(D120A)에 배타적 판독 소유권 요청(D215B)을 발행한다. 예시된 실시예에서는 I/O 에이전트(142)가 2개의 상이한 메모리 제어기들(D120)과 통신하지만, 일부 경우들에서, 판독 트랜잭션 요청들(D205A, D205B)은 동일한 메모리 제어기(D120)에 의해 관리되는 캐시 라인들을 타겟화할 수 있으며, 이에 따라 I/O 에이전트(D142)는 그 메모리 제어기(D120)와만 통신하여 판독 트랜잭션 요청들(D205A, D205B)을 이행할 수 있다.
추가로 묘사된 바와 같이, 디렉토리 미스가 트랜잭션 요청(D205B)의 타겟화된 캐시 라인에 대해 메모리 제어기(D120A)에서 발생하여, 타겟화된 캐시 라인의 데이터가 유효 상태에서 메모리(D130) 외부에 저장되어 있지 않음을 나타낸다. 메모리 제어기(D120A)는 캐시 라인의 배타적인 판독 소유권을 승인하고 그 캐시 라인과 연관된 데이터를 추가로 포함할 수 있는 배타적 판독 소유권 응답(D217B)을 I/O 에이전트(D142)에게 반환한다. 또한 도시된 바와 같이, 디렉토리 히트가 트랜잭션 요청(D205A)의 타겟화된 캐시 라인에 대해 메모리 제어기(D120B)에서 발생한다. 메모리 제어기(D120B)는, 그의 디렉토리(D220)에 기초하여, 예시된 캐싱 에이전트(D110)가 타겟화된 캐시 라인의 데이터를 캐싱하고 있다고 결정할 수 있다. 결과적으로, 메모리 제어기(D120B)는 그 캐싱 에이전트(D110)에 스누프(D225)를 발행하고, 타겟화된 캐시 라인과 연관된 데이터를 포함할 수 있는 스누프 응답(D227)을 수신한다. 메모리 제어기(D120B)는 타겟화된 캐시 라인의 배타적인 판독 소유권을 승인하고 그 캐시 라인과 연관된 데이터를 추가로 포함할 수 있는 배타적 판독 소유권 응답(D217A)을 I/O 에이전트(D142)에게 반환한다.
예시된 바와 같이, I/O 에이전트(D142)는, 배타적 판독 소유권 응답(D217A)을 수신하기 전에, 배타적 판독 소유권 응답(D217B)을 수신한다. 다양한 실시예들에서, 주변기기(D144)의 트랜잭션 순서 규칙들은, 트랜잭션 요청들(D205A, D205B)이 소정 순서(예컨대, 그들이 수신되었던 순서)로 완료되어야 한다는 것을 요구한다. 그 결과, I/O 에이전트(D142)가 배타적 판독 소유권 응답(D217B)을 수신할 때 판독 트랜잭션 요청(D205A)이 완료되지 않았기 때문에, 응답(D217B)을 수신할 시에, I/O 에이전트(D142)는 추론적 판독 배타적 소유권을 보유하지만 대응하는 판독 트랜잭션 요청(D205B)을 완료하지는 않는다. 일단 I/O 에이전트(D142)가 배타적 판독 소유권 응답(D217A)을 수신하면, I/O 에이전트(D142)는 트랜잭션 요청(D205A)을 완료하고 완료 요청(D205A)을 주변기기(D144)에 발행할 수 있다. 그 후, I/O 에이전트(D142)는 트랜잭션 요청(D205B)을 완료하고, 또한 완료 요청(D205B)을 주변기기(D144)에 발행할 수 있다. I/O 에이전트(D142)가 판독 트랜잭션 요청(D205B)과 연관된 캐시 라인의 배타적 판독 소유권을 선점적으로 획득했기 때문에, I/O 에이전트(D142)는 (I/O 에이전트(D142)가 캐시 라인의 소유권을 상실하지 않았다고 가정하여) 판독 트랜잭션 요청(D205A)을 완료한 후에 그 캐시 라인에 대한 요청을 전송해 보낼 필요가 없다. 대신, I/O 에이전트(D142)는 판독 트랜잭션 요청(D205A)을 완료한 후 비교적 곧 바로 판독 트랜잭션 요청(D205B)을 완료하며, 이에 따라 I/O 에이전트(142)의 코히어런시 캐시들(D320)로 그 캐시 라인을 페치하는 것과 연관된 지연(예컨대, 500회의 클록 사이클들)의 대부분 또는 전부를 발생시키지 않을 수 있다.
이제 도 48을 참조하면, 방법(500)의 흐름도가 도시된다. 방법(500)은, 주변 컴포넌트(예컨대, 주변기기(144))로부터 수신된 트랜잭션 요청들(예컨대, 트랜잭션 요청들(D205))의 세트를 프로세싱하기 위해 I/O 에이전트 회로(예컨대, I/O 에이전트(142))에 의해 수행되는 방법의 하나의 실시예이다. 일부 실시예들에서, 방법(500)은 도시된 것보다 더 많거나 더 적은 단계들을 포함하는데, 예를 들어, I/O 에이전트 회로는 트랜잭션 요청들의 세트를 프로세싱한 후 그의 캐시(예컨대, 코히어런시 캐시(D330))로부터 데이터를 축출할 수 있다.
방법(500)은, I/O 에이전트 회로가 복수의 캐시 라인들 중 하나 이상의 캐시 라인으로 지향된 판독 트랜잭션들의 세트(이는 적어도 하나의 판독 트랜잭션을 포함함)를 수행하기 위한 트랜잭션 요청들의 세트를 주변 컴포넌트로부터 수신하는 단계(D510)에서 시작한다. 일부 경우들에서, I/O 에이전트는 기록 트랜잭션들 또는 판독 및 기록 트랜잭션들의 혼합물을 수행하기 위한 요청들을 수신한다. I/O 에이전트는 다수의 주변 컴포넌트들로부터 그러한 트랜잭션 요청들을 수신할 수 있다.
단계(520)에서, I/O 에이전트 회로는, 복수의 캐시 라인들 중 제1 캐시 라인에 대한 액세스를 관리하도록 구성된 제1 메모리 제어기 회로(예컨대, 메모리 제어기(D120))에, 제1 캐시 라인의 데이터가 유효 상태에서 I/O 에이전트 회로 및 메모리 외부에 캐싱되지 않도록 제1 캐시 라인의 배타적 판독 소유권에 대한 요청(예컨대, 배타적 소유권 요청(D215))을 발행한다. 제1 캐시 라인의 배타적 판독 소유권에 대한 요청은 스누프 요청(예컨대, 스누프(D225))이 다른 I/O 에이전트 회로(또는 캐싱 에이전트(D110))로 전송되게 하여, 제1 캐시 라인의 배타적 판독 소유권을 해제할 수 있다.
단계(530)에서, I/O 에이전트 회로는 제1 캐시 라인의 데이터를 수신하는 것을 포함하여, 제1 캐시 라인의 배타적 판독 소유권을 수신한다. 일부 경우들에서, I/O 에이전트 회로는 제1 캐시 라인으로 지향된 스누프 요청을 수신할 수 있고, 이어서, 제1 캐시 라인에 대해 I/O 에이전트 회로에 저장된 데이터를 무효화하는 것을 포함하여, 판독 트랜잭션들의 세트의 수행을 완료하기 전에 제1 캐시 라인의 배타적 판독 소유권을 해제할 수 있다. 이후, I/O 에이전트 회로는 판독 트랜잭션들의 세트 중 적어도 임계 수의 나머지 프로세싱되지 않은 판독 트랜잭션들이 제1 캐시 라인으로 지향된다는 결정을 행하고, 결정에 응답하여, 제1 캐시 라인의 배타적 판독 소유권을 재확립하기 위한 요청을 제1 메모리 제어기 회로로 전송할 수 있다. 그러나, I/O 에이전트 회로가, 판독 트랜잭션들의 세트 중 임계 수 미만의 나머지 프로세싱되지 않은 판독 트랜잭션들이 제1 캐시 라인으로 지향된다는 결정을 행하는 경우, I/O 에이전트 회로는 제1 캐시 라인의 배타적 판독 소유권을 재확립하지 않으면서 나머지 판독 트랜잭션들을 프로세싱할 수 있다.
단계(540)에서, I/O 에이전트 회로는 데이터에 대해 판독 트랜잭션들의 세트를 수행한다. 일부 경우들에서, I/O 에이전트 회로는 배타적 판독 소유권이 유지되었던 동안 제1 캐시 라인에 기입을 수행하지 않으면서 제1 캐시 라인의 배타적 판독 소유권을 해제할 수 있다.
I/O 에이전트 회로는, 판독 트랜잭션들의 세트 중 적어도 2개의 판독 트랜잭션들이 제1 캐시 라인의 적어도 2개의 상이한 부분들을 타겟화한다는 결정을 행할 수 있다. 결정에 응답하여, I/O 에이전트 회로는 제1 캐시 라인의 배타적 판독 소유권을 해제하기 전에 다수의 판독 트랜잭션들을 프로세싱할 수 있다.
일부 경우들에서, I/O 에이전트 회로는 다른 주변 컴포넌트로부터, 복수의 캐시 라인들 중 하나 이상의 캐시 라인으로 지향된 기록 트랜잭션들의 세트를 수행하기 위한 요청들의 세트를 수신할 수 있다. I/O 에이전트 회로는, 복수의 캐시 라인들 중 제2 캐시 라인에 대한 액세스를 관리하도록 구성된 제2 메모리 제어기 회로에, 제2 캐시 라인의 데이터가 유효 상태에서 I/O 에이전트 회로 및 메모리 외부에 캐싱되지 않도록 제2 캐시 라인의 배타적 기록 소유권에 대한 요청을 발행할 수 있다. 따라서, I/O 에이전트 회로는 제2 캐시 라인의 데이터를 수신하고 제2 캐시 라인의 데이터에 대해 기록 트랜잭션들의 세트를 수행할 수 있다. 일부 경우들에서, 기록 트랜잭션들의 세트 중 하나의 기록 트랜잭션은 제2 캐시 라인의 제1 부분에 데이터를 기록하는 것을 수반할 수 있다. I/O 에이전트 회로는, 제1 부분(예컨대, 하위 64 비트)은 업데이트되지만 제2 캐시 라인의 제2 부분(예컨대, 상위 64 비트)은 변경되지 않게, 제2 캐시 라인의 데이터를 기록 트랜잭션의 데이터와 병합할 수 있다. 기록 트랜잭션들의 세트가 제2 캐시 라인의 상이한 부분들에 기록하는 것을 수반하는 그러한 경우들에서, I/O 에이전트 회로는 제2 캐시 라인의 모든 부분들에 기록하는 것에 응답하여 제2 캐시 라인의 배타적 기록 소유권을 해제할 수 있다.
D2D 회로
도 49 내지 도 55는 D2D 회로(26)의 다양한 실시예들을 예시한다. 시스템 온 칩(SOC) 집적 회로(IC)들은 일반적으로 메모리 제어기들 및 주변 컴포넌트들과 같은 다양한 다른 컴포넌트들과 함께 시스템에 대한 중앙 프로세싱 유닛(CPU)으로서 기능하는 하나 이상의 프로세서들을 포함한다. 하나 이상의 추가적인 IC들을 포함하는 추가적인 컴포넌트들이 특정 SOC IC에 포함되어 주어진 디바이스를 형성할 수 있다. 증가된 성능을 위해 SOC IC 상에 포함된 프로세서들 및/또는 다른 이산 컴포넌트들의 수를 증가시키는 것이 바람직할 수 있다. 추가적으로, SOC IC에 추가하여 디바이스를 형성하는 데 필요한 다른 컴포넌트들의 수를 감소시킴으로써 디바이스에서 비용 절약들이 달성될 수 있다. 전체 시스템의 더 많은 부분이 단일 IC에 통합되면, 디바이스는 더 콤팩트할 수 있다(크기가 더 작음). 또한, 전체적으로 디바이스에 대한 감소된 전력 소비는 더 많은 컴포넌트들을 SOC에 통합함으로써 달성될 수 있다.
주어진 SOC는 다양한 성능, 비용 및 전력 고려사항들과 함께 다양한 애플리케이션들에서 사용될 수 있다. 예를 들어, 비용-민감한 애플리케이션의 경우, 성능은
비용 및 전력 소비만큼 요구되지 않을 수 있다. 반면에, 성능-지향 애플리케이션의 경우, 비용 및 전력 소비는 강조되지 않을 수 있다. 따라서, 다양한 애플리케이션들을 지원하기 위해 다양한 SOC 설계들이 활용될 수 있다.
주어진 SOC 설계의 재사용을 증가시키는 것은 새로운 SOC 설계를 설계, 검증, 제조 및 평가하는 것과 연관된 비용들을 감소시키는 데 바람직할 수 있다. 따라서, 다양한 애플리케이션들을 위해 단일 SOC 설계를 스케일링하기 위한 기법이 바람직하다.
위에서 설명된 바와 같이, 주어진 IC 설계는 다양한 성능 및 비용 고려사항들을 갖는 다양한 애플리케이션들에서 사용될 수 있다. 추가하여, 기존의 IC 설계의 재사용은 새로운 IC 설계를 설계, 검증, 제조 및 평가하는 것과 비교하여 비용들을 감소시킬 수 있다. 다양한 애플리케이션들에 걸쳐 단일 IC 설계를 스케일링하기 위한 하나의 기법은 비용보다 성능을 강조하는 애플리케이션들에서 IC의 다수의 인스턴스들을 활용하고 비용에 민감한 애플리케이션들에서 IC의 단일 인스턴스를 사용하는 것이다.
IC의 다수의 인스턴스들을 이용하는 것은 몇 가지 난제들을 포함할 수 있다. 일부 애플리케이션들, 예를 들어 모바일 디바이스들은 다수의 IC들이 포함될 공간이 제한된다. 또한, IC-간 통신과 연관된 레이턴시를 감소시키기 위해, 외부 IC-간 네트워크 인터페이스는 많은 수의 핀들을 포함할 수 있으며, 이에 의해, 2개 이상의 IC들 사이에서 다수의 비트들이 병렬로 교환되게 할 수 있다. 예를 들어, 멀티-코어 SOC에 대한 인터페이스는 병렬로 이동하는 수백 또는 심지어 수천개 이상의 신호들을 갖는 시스템-와이드 통신 버스를 활용할 수 있다. 2개 이상의 이러한 SOC를 함께 커플링하기 위해서는, 통신 버스의 상당한 부분에 대한 액세스를 제공하는 인터페이스가 필요할 수 있으며, 잠재적으로 100개 이상의 핀들이 2개 이상의 다이에 걸쳐 와이어링되는 것을 요구할 수 있다. 또한, 통신 버스의 내부 통신 주파수와 일치하거나 심지어 접근하기 위해, IC-간 인터페이스의 많은 수의 핀들의 타이밍 특성들은 동일한 데이터 워드의 상이한 비트들이 상이한 클록 사이클들에 도달하는 것을 방지하도록 일관되어야 한다. 동일한 IC 다이의 2개 이상의 인스턴스들이 작은 물리적 공간에서 함께 커플링될 수 있도록 단일 핀 배열로 대형 고속 인터페이스를 생성하는 것은 IC 설계자들에게 상당한 난제를 제공할 수 있다.
아래에서 추가로 설명될 바와 같이, 본 개시내용은 "상보적인" IC-간 인터페이스들의 사용을 설명한다. 본 개시내용은 이러한 IC-간 인터페이스들이 제한된 공간에서 동일한 IC 설계의 2개 이상의 인스턴스들을 커플링하는 것을 지원하고, 다양한 애플리케이션들을 지원하기 위해 IC 설계의 확장성을 제공한다는 것을 인식한다. 그러한 스케일러블 인터페이스는, 2개의 IC들이 2개의 다이의 공통 에지를 따라 또는 대면하여 배치될 때 2개의 IC들 사이의 와이어들의 교차가 거의 또는 전혀 없이 2개의 IC들이 물리적으로 커플링될 수 있게 하는 핀 배열을 포함할 수 있다. 인터페이스의 핀들에 걸쳐 성능 특성들의 코히어런시를 증가시키기 위해, 인터페이스에 대한 원하는 수의 핀들이 구현될 때까지, 더 적은 수의 핀들, 예컨대 16개, 32개 등의 핀들에 대한 단일 설계가 반복될 수 있다.
그러한 IC-간 인터페이스는 IC의 2개 이상의 인스턴스들의 커플링을 통해 성능 증가들을 가능하게 함으로써 광범위한 애플리케이션들에서 IC가 활용될 수 있게 할 수 있다. 이러한 인터페이스는 추가로, 커플링된 IC들이 다수의 IC들에 대한 물리적 공간이 제한되는 모바일 애플리케이션들 또는 다른 애플리케이션들에서 사용될 수 있게 하는 방식으로 2개 이상의 IC들이 함께 커플링되는 것을 가능하게 할 수 있다.
"상보적 기능들"을 갖는 핀들이 "상보적 레이아웃들"을 갖도록 포지셔닝될 때, 2개의 IC-간 인터페이스들은 본 개시내용의 의미 내에서 "상보적"인 것으로 말해질 수 있다. 한 쌍의 인터페이스 핀들은, 하나의 집적 회로 상의 그러한 핀들 중 제1 핀이 다른 집적 회로 상의 그러한 핀들 중 제2 핀에 의해 수용되도록 설계되면, "상보적 기능들"을 갖는다. 데이터 워드의 특정 비트의 출력 신호를 제공하는 하나의 IC 상의 송신 핀이 데이터 워드의 특정 비트를 입력 신호로서 수락하는 다른 IC 상의 수신 핀에 커플링되도록 설계되기 때문에, 송신 및 수신은 상보적 기능들의 일례이다. 유사하게, 클록 신호 출력을 전달하는 핀은 입력으로서 클록 신호를 수신할 수 있는 연관된 핀에 대한 상보 기능을 갖는 것으로 간주된다.
"대칭 축"이라는 용어가 본 개시내용 전반에 걸쳐 사용된다는 것에 유의한다. 대칭 축의 다양한 실시예들이 도 49, 도 50, 도 51, 도 52, 도 53a 및 도 53b에 도시되고, 이러한 도면들을 참조하여 아래에서 설명된다.
상보적 기능을 갖는 핀들은, 인터페이스를 갖는 제1 집적 회로가 집적 회로의 제2 인스턴스 옆에 포지셔닝되거나 또는 그에 커플링되어 상보적 기능들을 갖는 핀들이 정렬될 수 있도록, 핀들이 인터페이스의 대칭 축에 대해 위치될 때 상보적 레이아웃을 갖는다. 그러한 핀들은 또한, "상보적 포지션들"에 있는 것으로 말할 수 있다. 상보적 레이아웃의 예는 특정 신호들(예컨대, 데이터 버스의 비트 0 및 비트 1)에 대한 송신 핀들이 축의 일 측 상에서 대칭 축으로부터 가장 멀리 그리고 두 번째로 멀리 각각 포지셔닝되고, 상보적 수신 핀들(예컨대, 데이터 버스의 비트 0 및 비트 1)은 축의 대향 축 상에서 대칭 축으로부터 가장 멀리 그리고 두 번째로 멀리 배치되는 것일 것이다. 이러한 실시예에서, 제1 인스턴스의 송신 핀들이 제2 인스턴스의 수신 핀들과 정렬되도록 그리고 제1 인스턴스의 수신 핀들이 제2 인스턴스의 송신 핀들과 정렬되도록, 상보적 인터페이스를 갖는 IC의 제1 인스턴스는 동일한 IC-간 인터페이스를 갖는 IC의 제2 인스턴스에 대해 포지셔닝될 수 있다. 도 53a 및 도 53b와 관련하여 추가로 설명될 바와 같이, 2개의 동일한 인터페이스들 상의 핀들은, 2개의 인터페이스들의 주연부들이 일렬로 정렬되고 해당 핀들을 통해 2개의 인터페이스들에 수직인 직선이 그려질 수 있을 때 "정렬"되는 것으로 간주된다. 인터페이스의 핀들에 관한 정렬의 개념은 도 53a 및 도 53b와 관련하여 아래에서 추가로 설명된다.
이러한 상보적 핀 레이아웃은, 제1 및 제2 인스턴스들 사이에 어떠한 신호 경로들도 교차되지 않으면서 이들의 개개의 외부 인터페이스들을 통해 제1 및 제2 인스턴스들이 커플링될 수 있게 한다. 상보적 기능들뿐만 아니라 상보적 포지션들을 갖는 한 쌍의 인터페이스 핀들은 "상보적 핀들"로 지칭된다. 상보적 핀들의 예를 보여주기 위해 송신 및 수신 핀들의 쌍들이 본 명세서에서 사용된다. 그러나, 다른 실시예들에서, 상보적 핀들은, 하나 이상의 제어 신호들의 설정들에 기초하여 어느 하나의 방향으로 신호들이 전송될 수 있도록 구성된 양방향 핀들의 쌍들을 포함할 수 있다. 예를 들어, 데이터 버스의 상보적 핀들은 데이터가 판독되고 있는지 또는 기록되고 있는지에 따라 데이터를 전송 또는 수신하도록 구성가능할 수 있다.
본 명세서에서 참조되는 바와 같이, 인터페이스의 상보적 핀 기능들 중 일부만이 상보적 포지션들에 있을 때, 인터페이스는 여전히 상보적인 것으로 간주될 수 있다는 것에 유의한다. 예를 들어, 주어진 IC-간 인터페이스는 메모리 버스, 디스플레이 버스, 네트워크 버스 등 중 2개 이상과 같은 복수의 통신 버스들과 연관된 핀들을 포함할 수 있다. 포함된 버스들 중 적어도 하나와 연관된 상보적 기능들을 갖는 핀들이 주어진 인터페이스의 대칭 축에 대해 상보적인 레이아웃으로 배열될 때, 주어진 IC-간 인터페이스는 상보적인 것으로 간주된다. 인터페이스의 다른 버스들 및/또는 특정 통신 버스와 직접 관련되지 않은 다른 신호들은 상보적인 포지션들에 핀들을 갖지 않을 수 있다.
본 개시내용 전반에 걸쳐 예시된 예들에서, 동일한 설계의 2개 이상의 IC들의 사용이 참조된다는 것에 유의한다. 동일한 물리적 핀 레이아웃을 갖는 동일한 외부 인터페이스가 상이한 설계의 IC들을 커플링하는 데 사용될 수 있다는 것이 고려된다. 예를 들어, 상이한 IC 설계들의 패밀리는 IC들 중 2개 이상의 인스턴스들의 다양한 조합들을 가능하게 하기 위해 패밀리에 걸쳐 동일한 외부 인터페이스 설계를 포함할 수 있다. 그러한 다양한 조합들은 광범위한 애플리케이션들에 걸쳐 고도로 확장가능한 시스템 솔루션을 제공할 수 있으며, 이로써, 예를 들어, 비용에 민감한 애플리케이션들에서 패밀리의 더 작고 덜 비싼 멤버들의 사용 및 성능을 중시하는 애플리케이션들에서 패밀리의 더 비싸고 더 높은 성능의 멤버들의 사용을 허용할 수 있다. 패밀리의 멤버들은 또한, 감소된 전력 모드들에서 사용하기 위한 소형 저전력 멤버 및 복잡한 프로세스들 및/또는 많은 병렬 프로세스들이 수행될 필요가 있을 때 사용하기 위한 고성능 멤버와 조합될 수 있다.
일부 실시예들에서, 외부 인터페이스는 IC의 다이의 하나의 에지를 따라 물리적으로 위치된다. 이러한 물리적 위치는 다양한 멀티-다이 구성들을 지원할 수 있는데, 이를테면, 외부 인터페이스들이 커플링될 때 와이어 길이를 감소시키기 위해 외부 인터페이스를 포함하는 에지들이 이웃 다이에 가장 가까이 배향되어, 동일 평면 표면 상에 2개 이상의 다이를 배치할 수 있다.
다른 예에서, 쌍 중 하나의 다이가 상방을 향하게 배치되는 한편, 다른 다이는 하방을 향하게 배치되고, 이어서, 이들 개개의 인터페이스들에 의해 정렬될 수 있다. IC들 중 단 하나의 IC만이 포함되는 실시예에서, 다이의 하나의 에지를 따른 외부 인터페이스의 배치는, 예를 들어 웨이퍼 톱니 동작 동안 외부 인터페이스가 물리적으로 제거되는 것을 가능하게 할 수 있다.
도 49는 개개의 외부 인터페이스들을 통해 커플링된 IC의 2개의 인스턴스들을 포함하는 시스템의 일 실시예의 블록도를 예시한다. 예시된 바와 같이, 시스템(E100)은 이들의 외부 인터페이스들(E110a 및 E110b)(총괄적으로 외부 인터페이스들(E110))을 통해 각각 커플링된 집적 회로들(E101a 및 E101b)(총괄적으로 집적 회로들(E101))을 포함한다. 일 실시예에서, 집적 회로들(E101)은 도 1에 도시된 SOC(10)의 예들일 수 있다. 대칭 축(E140)은 인터페이스들(E110a 및 E110b)에 수직으로 그리고 그의 중심을 통해 위치된 수직 파선으로 도시된다. 대칭 축은 특정 버스와 연관된 송신 핀들(E120a 및 E120b) 및 수신 핀들(E125a 및 E125b)을 포함하는 외부 인터페이스들(E110)에 포함된 핀들의 물리적 레이아웃에 대한 기준을 제공한다. 도시된 바와 같이, 인터페이스들(E110a 및 E110b)은 각각 집적 회로들(E101a 및 E101b)에 센터링된다는 것에 유의한다. 그러나, 다른 실시예들에서, 외부 인터페이스는 집적 회로의 특정 측에 더 가깝게 포지셔닝될 수 있다.
도시된 바와 같이, 집적 회로(E101a)는 대칭 축(E140)에 대해 상보적 포지션들(E130)에 위치된 특정 버스에 대한 송신 핀(E120a) 및 수신 핀(E125a)을 갖는 물리적 핀 레이아웃을 갖는 외부 인터페이스(E110a)를 포함한다. 집적 회로(E101a)는 유한한 양의 대역폭으로 임의의 특정 기능을 수행하는 IC 설계이다. 예를 들어, 집적 회로(E101a)는 범용 마이크로프로세서 또는 마이크로제어기, 디지털-신호 프로세서, 그래픽 또는 오디오 프로세서, 또는 다른 유형의 시스템 온 칩일 수 있다. 일부 애플리케이션들에서, 집적 회로(E101)의 단일 인스턴스는 적합한 성능 대역폭을 제공할 수 있다. 다른 애플리케이션들에서, 성능 대역폭을 증가시키기 위해 다수의 집적 회로들(E101)이 사용될 수 있다. 일부 애플리케이션들에서, 다수의 집적 회로들(E101)은, 다수의 집적 회로들의 존재가 단일 시스템 상에서 실행되는 소프트웨어에 대해 투명한 단일 시스템으로서 구성될 수 있다.
도 49에 도시된 바와 같이, 외부 인터페이스(E110b)의 수신 핀(E125b)은 외부 인터페이스(E110a)의 송신 핀(E120a)에 상보적이다. 따라서, 송신 핀(E120a)을 통해 전송된 I/O 신호(E115a)는 수신 핀(E125b)에 의해 수신된 I/O 신호(E115a)에 공통이다. 유사한 방식으로, 외부 인터페이스(E110a)의 수신 핀(E125a)은 외부 인터페이스(E110b)의 송신 핀(E120b)에 상보적이다. 따라서, 송신 핀(E120b)에 의해 송신되는 I/O 신호(E115b)는 수신 핀(E125a)에 의해 수신되는 I/O 신호(E115b)에 대한 공통 신호이다.
I/O 신호(E115a)는 예를 들어, 집적 회로들(E101a 및 E101b)에서 특정 버스의 데이터 비트 0에 대응할 수 있다. 따라서, I/O 신호(E115b)는 또한 집적 회로들(E101a 및 E101b)에서 특정 버스의 데이터 비트 0에 대응할 것이다.
예시된 바와 같이, 송신 핀(E120a) 및 수신 핀(E120a)을 대칭 축(E140)에 대해 동일한 순서로 배치함으로써 상보적 핀 레이아웃이 가능하게 되며, 각각의 핀은 대칭 축(E140)으로부터 10번째 핀이다. 예시된 실시예에서, 송신 핀(E120a) 및 수신 핀(E120a)은 또한 대칭 축(E140)으로부터 동일한 물리적 거리(E135)이지만 그의 대향하는 측들 상에 위치되는 것으로 도시된다. 따라서, 외부 인터페이스(E110)의 2개의 인스턴스들은 서로 직접적으로 커플링될 수 있다. 이러한 물리적 핀 대칭은 집적 회로(E101b)가 집적 회로(E101a)로부터 대향하는 포지션으로 회전될 때 바람직한 핀 정렬을 가능하게 할 수 있지만, 이러한 핀 대칭 정도는 상보적 인터페이스들의 모든 실시예들에 대한 요건으로 간주되지 않는다.
예시된 바와 같이, 집적 회로(E101a)는 제2 인스턴스인 집적 회로(E101b)에 커플링된다. 집적 회로들(E101a 및 E101b)은 동일한 IC의 2개의 인스턴스들이며, 따라서 동일한 회로들, 동일한 피처들, 및 도시된 바와 같이 동일한 외부 인터페이스(E110)의 개개의 인스턴스들을 포함한다. 따라서, 집적 회로(E101b)는 대칭 축(E140)에 대해 상보적 포지션들에 위치된 주어진 입력/출력(I/O) 신호에 대한 송신 핀(E120b) 및 수신 핀(E125b)을 갖는 물리적 핀 레이아웃을 갖는 외부 인터페이스(E110b)를 포함한다.
집적 회로들(E101)을 커플링하기 위해, 집적 회로(E101)의 제1 및 제2 인스턴스들의 외부 인터페이스들(E110)은, 집적 회로(E101a) 상의 I/O 신호(E115)에 대한 송신 핀(E120a) 및 수신 핀(E125a)이 각각, 집적 회로(E101b) 상의 I/O 신호(E115)에 대한 송신 핀(E120b) 및 수신 핀(E125b)과 정렬되도록 포지셔닝된다. 집적 회로(E101b)의 다이를 180도 회전시키고 2개의 집적 회로들(E101)의 공통 에지를 서로 인접하게 배치함으로써, 집적 회로(E101a)의 송신 핀(E120a)은 집적 회로(E101b)의 수신 핀(E125b)에 물리적으로 인접하게 위치된다. 유사하게, 집적 회로(E101a)의 수신 핀(E125a)은 집적 회로(E101b)의 송신 핀(E120b)에 물리적으로 인접하게 위치된다. 본 명세서에서 사용되는 바와 같이, "인접한"은 2개의 요소들을 커플링하는 와이어들이 유사한 요소들의 이웃하는 세트들의 와이어들과 교차하지 않도록 배열되는 2개 이상의 회로 요소들의 물리적 위치를 지칭한다. 예를 들어, 2개의 외부 인터페이스들의 핀들의 관점에서, 인접한 핀들은, 제1 인스턴스의 주어진 핀으로부터 제2 인스턴스의 상보적 핀으로의 와이어가 제1 및 제2 인스턴스들의 이웃 핀들 중 임의의 핀을 커플링하는 데 사용되는 와이어와 교차하지 않는다는 것을 표시한다.
개개의 와이어들(E145)을 통해, 송신 핀(E120a)은 수신 핀(E125b)에 커플링되고, 수신 핀(E125a)은 송신 핀(E120b)에 커플링된다. 본 명세서에서 사용되는 바와 같이, "와이어"는 외부 인터페이스들(E110)의 송신 및 수신 핀들의 커플링된 쌍들 사이에서 신호가 전달될 수 있게 하는 임의의 적합한 전도성 매체를 지칭한다는 것에 유의한다. 예를 들어, 와이어는 송신 핀(E120a)과 수신 핀(E125b) 사이에 부착된 본드 와이어에 대응할 수 있다. 추가적으로, 인터포저 디바이스가 외부 인터페이스(E110a)의 핀들을 외부 인터페이스(E110b)의 핀들에 커플링하는 데 사용될 수 있다. 일부 실시예들에서, 집적 회로(E101a)는 플립 오버되고, 2개의 집적 회로 다이 사이에 인터포저 디바이스를 갖거나 또는 갖지 않고, 집적 회로(E101b)에 대면하여 부착될 수 있다.
외부 인터페이스(E110)의 다른 핀들이 또한 유사한 상보적 포지션들에 배열될 수 있어서, 외부 인터페이스(E110)의 송신 핀들의 그룹에 대해, 수신 핀들의 상보적 그룹은 송신 핀들의 그룹으로부터의 대향 측 상에서 대칭 축(E140)에 대해 동일한 순서로 위치된다. 그러한 레이아웃은, 대칭 축(E140)으로부터 동일한 수의 핀들이지만 대향 측들에 있는 한 쌍의 핀들이 상보적 기능들을 갖는, 예컨대 쌍 중 하나의 핀은 송신 핀이고 다른 하나는 수신 핀인 대칭적 핀 배열을 초래한다.
이 상보적 핀 레이아웃을 사용하여, 집적 회로(E101a)에 의해 데이터를 전송하는 것은 대칭 축(E140)으로부터 특정 거리에 위치된 송신 핀(E120a)을 통해 데이터 패킷의 일부를 전송하는 것, 및 집적 회로(E101b)에 의해, 대칭 축(E140)으로부터 동일한 특정 거리에 위치된 수신 핀(E125b)을 통해 데이터 패킷의 일부를 수신하는 것을 포함한다. 유사하게, 데이터 패킷의 나머지 부분들은 제1 부분과 병렬로 다른 송신 핀들에 의해, 대칭 축(E140)으로부터 등거리에 위치된 상보적 수신 핀들에 전송된다. 상보적 핀 레이아웃은 또한, 외부 인터페이스(E110a와 E110b) 사이에 연결된 와이어들(E145)이 길이가 유사하게 할 수 있다는 것에 유의한다. 이러한 유사성은 데이터 패킷이 병렬로 전송될 뿐만 아니라 수신될 수 있게 하여, 데이터 패킷을 샘플링하는 데 사용되는 임의의 클록 신호들뿐만 아니라 데이터 패킷의 상이한 비트들 사이의 스큐(skew)를 감소시키는 데 도움이 될 수 있다.
위에서 설명된 상보적 핀 레이아웃을 활용함으로써, 외부 인터페이스는, 애플리케이션의 성능 요건을 충족시키면서 공간 제약된 애플리케이션들에서의 사용을 가능하게 하는 방식으로 집적 회로의 다수의 인스턴스들이 함께 커플링될 수 있게 하는 집적 회로 상에 구현될 수 있다. 증가된 범위의 애플리케이션들에 걸친 기존의 집적 회로의 재사용은 증가된 범위의 하나 이상의 애플리케이션들의 성능 요건들을 충족시키기 위해 새로운 집적 회로를 달리 설계하는 것과 연관된 설계 및 생산 비용들을 감소시킬 수 있다.
도 49에 도시된 바와 같은 시스템(100)은 일례일 뿐임에 유의한다. 도 49의 도시는 본 개시내용에 관련된 특징부들을 강조하기 위해 간략화되었다. 다양한 실시예들은 회로 요소들의 상이한 구성들을 포함할 수 있다. 예를 들어, 20개의 핀들을 갖는 외부 인터페이스(E110)가 도시된다. 다른 실시예들에서, 예를 들어 1000개 초과의 핀들을 포함하는 임의의 적합한 수의 핀들이 외부 인터페이스에 포함될 수 있다. 집적 회로의 단지 2개의 인스턴스들만이 도시되지만, 추가적인 인스턴스들이 다른 실시예들에 포함될 수 있다는 것이 고려된다. 대칭 축(E140)은 집적 회로들(E101a 및 E101b)의 중심을 통과하는 것으로 도시된다. 다른 실시예들에서, 외부 인터페이스, 및 그에 따른 대칭 축은 집적 회로의 중심을 벗어나서 포지셔닝될 수 있다.
도 49에 예시된 집적 회로는 외부 인터페이스만을 갖는 것으로 도시된다. 다양한 집적 회로들은 임의의 적합한 수의 추가적인 회로 블록들을 포함할 수 있다. 추가적인 회로 블록들을 갖는 집적 회로의 일 예가 도 50에 도시된다.
도 50으로 이동하면, 외부 인터페이스를 갖는 집적 회로의 실시예의 도면이 도시된다. 예시된 바와 같이, 집적 회로(101)는 온-칩 라우터들(E240a-E240e)에 커플링된 외부 인터페이스(E110)를 포함하며, 온-칩 라우터들(E240a-E240e)은 이어서, 버스 회로들(E250, E255, 및 E258)을 포함하는 몇몇 버스 회로들 중 개개의 버스 회로들에 커플링된다. 다양한 버스 회로들은 기능 회로들(E260a-E260f)의 개개의 세트들에 커플링된다. 외부 인터페이스(E110)는 복수의 송신 핀들(E120) 및 수신 핀들(E125)뿐만 아니라 연관된 송신기 회로들(E230) 및 수신기 회로들(E235)과 함께 도시된다. 도시된 바와 같이, 집적 회로(E101)는 도 49의 집적 회로들(E101a 및 E101b) 둘 모두에 대한 IC 설계에 대응한다.
예시된 바와 같이, 버스 회로들(E250-E258)은 복수의 기능 회로들(E260a-E260f)(총괄적으로 기능 회로들(E260)) 사이에서 주어진 데이터를 전달하도록 구성된다. 버스 회로들(E250, E255, 및 E258)은, 외부 인터페이스(E110) 및 기능 회로들의 개개의 세트들(E260)을 포함하는, 기능 회로들의 다양한 세트들 사이에 개개의 통신 경로들을 제공한다. 버스 회로들(E250-E258) 각각은 네트워크 프로토콜들의 개개의 세트 및/또는 특정 유형들의 데이터를 지원할 수 있다. 예를 들어, 버스 회로(E258)는 그래픽 데이터를 전달하기 위해 사용될 수 있는 한편, 버스 회로(E250)는 범용 데이터를 지원할 수 있고, 버스 회로(E255)는 오디오 데이터를 위해 사용된다.
버스 회로들(E250, E255, 및 258)은 집합적으로, 다양한 기능 회로들(E260)과 예시되지 않은 추가적인 기능 회로들 사이에서 데이터 트랜잭션들을 전달하기 위해 집적 회로(E101) 내에 통신 패브릭을 형성할 수 있다. 외부 인터페이스(E110) 그리고 이에 따라 집적 회로(E101)의 다른 인스턴스에 액세스하기 위해, 버스 회로들(E250-E258) 각각은 온칩 라우터들(E240) 중 개개의 하나 이상에 커플링되고, 이는 이어서, 외부 인터페이스(E110)에 포함된 하나 이상의 송신기 회로들(E230) 및 수신기 회로들(E235)에 커플링된다.
도시된 바와 같이, 온-칩 라우터들(E240a 및 E240d)은 상이한 액세스 포인트들을 버스 회로(E250)에 제공하고, 집적 회로(E101) 상의 상이한 위치들, 이를테면 연관된 송신기 및 수신기 회로들 근처에 물리적으로 위치될 수 있다. 유사하게, 온-칩 라우터들(E240b 및 E240c)은 버스 회로(E255)에 상이한 액세스 포인트들을 제공하고, 온-칩 라우터(E240e)는 버스 회로(E258)에 액세스 포인트를 제공한다.
예시된 바와 같이, 외부 인터페이스(E110)의 복수의 송신기 회로들(E230)은 특정 세트의 송신 핀들(E220)에 커플링되고, 복수의 수신기 회로들(E235)은 특정 세트의 수신 핀들(E225)에 커플링된다. 이러한 송신기 회로들(E230) 및 수신기 회로들(E235)은 그들의 대응하는 세트의 송신 핀들(E220) 및 수신 핀들(E225)의 세트에 의해 물리적으로 위치될 수 있다. 이들 회로들의 그러한 공동 위치는, 집적 회로(E101)의 제1 인스턴스 내의 송신기 회로들(E230)의 세트 중 주어진 송신기 회로가 특정 신호 레벨을 어서트하는 시점과 집적 회로(E101)의 제2 인스턴스 상에서 수신기 회로들의 세트의 대응하는 수신기 회로가 어서트된 신호 레벨을 수신하는 추후의 시점 사이의 타이밍 스큐를 감소시킬 수 있다. 이러한 타이밍 스큐는, 송신기 회로들(E230) 및/또는 수신기 회로들(E235)이 그들 개개의 송신 및 수신 핀들로부터 더 멀리 떨어져 배치되는 IC 설계들에서 증가할 수 있다.
송신 핀들(E220)의 특정 세트는 외부 인터페이스(E110)의 대칭 축(E140)에 대해 특정 레이아웃으로 배열된다. 수신기 핀들(E225)의 특정 세트는 대칭 축(E140)에 대한 특정 레이아웃에 대해 상보적 레이아웃으로 배열된다. 따라서, 인스턴스들 중 하나가 다른 인스턴스로부터 E180도 뒤집힌 상태로 집적 회로(E101)의 2개의 인스턴스들이 서로 대면하여 배치될 때, 주어진 송신 핀(E120)은 대응하는 수신 핀(E125)과 정렬된다. 외부 인터페이스(E110)는 버스 회로들(E250-E258)과 집적 회로(E101)의 다른 인스턴스 사이에서 특정 데이터를 전달하도록 구성된다.
온-칩 라우터들(E240)은 복수의 신호들을 통해 연관된 버스 회로(E250-E258)와 외부 인터페이스(E110) 사이에서 특정 데이터를 전달한다. 온-칩 라우터들(E240)은 버스 회로들(E250-E258) 중 개개의 버스 회로에 전송하기 위해 하나 이상의 데이터 패킷들을 큐잉하고/하거나 개개의 버스 회로로부터 수신된 하나 이상의 데이터 패킷들을 큐잉하도록 구성될 수 있다. 예를 들어, 온-칩 라우터(E240a)는 외부 인터페이스(E110)를 통해 집적 회로(E101)의 다른 인스턴스로부터 일련의 데이터 패킷들을 수신할 수 있다. 일부 실시예들에서, 온-칩 라우터(E240a)는 수신된 데이터 패킷들을 전송하기 전에 버스 회로(E250)에서 이용가능한 대역폭을 대기하면서 일련의 하나 이상의 데이터 패킷들을 버퍼링할 수 있다. 그 반대가 또한 발생할 수 있는데, 온-칩 라우터(E240a)는 집적 회로(E101)의 다른 인스턴스에 패킷들을 전송하기 위한 대역폭을 대기하면서 버스 회로(E250)로부터의 데이터 패킷들을 버퍼링한다.
다른 실시예들에서, 온-칩 라우터(E240a)는, 버스(E250) 상의 대역폭 및/또는 목적지 회로의 자원들이 데이터 패킷을 수신하기 위해 이용가능할 때까지 기능 회로(E260a 또는 E260b)로 하여금 데이터 패킷의 전송을 지연시키게 할 수 있다. 또한, 온-칩 라우터들(E240)은 수신된 데이터 패킷의 최종 목적지, 예컨대, 기능 회로들(E260) 중 특정 하나(또는 그 초과)를 결정하기 위한 로직 회로들을 포함할 수 있다. 일부 실시예들에서, 온-칩 라우터들(E240)은 하나의 유형의 데이터 프로토콜을 사용하여 외부 인터페이스(E110)로부터 수신된 데이터 신호들을 연관된 버스 회로와 호환가능한 상이한 유형의 데이터 프로토콜로 변환할 수 있다.
개시된 바와 같이, 집적 회로(E101)는, 복수의 송신 핀들(E120) 및 복수의 수신 핀들(E125) 중 개개의 핀들에 대응하는 복수의 송신기 회로들(E230) 및 복수의 수신기 회로들(E235)을 포함한다. 송신기 회로들(E230)은 대응하는 송신 핀들(E120) 상으로 데이터 신호들을 구동하기 위한 회로부를 포함한다. 예를 들어, 송신기 회로들(E230)은, 연관된 온-칩 라우터(E240)에 의해 생성된 신호로부터 특정 전압 레벨을 수신하고, 이어서 연관된 송신 핀(E120) 상에서 대응하는 전압 레벨을 생성하여, 집적 회로(E101)의 다른 인스턴스 내의 대응하는 수신기 회로(E235)가 이러한 전압 레벨을 검출할 수 있게 하도록 구성된 드라이버 회로들을 포함할 수 있다. 수신기 회로들(E235)은 예를 들어, 수신 핀들(E125) 중 대응하는 수신 핀 상의 수신된 전압 레벨이 특정 전압 임계치를 초과하는지 또는 미만인지를 검출하고, 이어서, 연관된 온-칩 라우터(E240)에 전송된 신호에 대해 대응하는 로직 레벨을 생성하도록 구성된 입력 회로들을 포함할 수 있다. 도시된 바와 같이, 송신기 회로들(E230) 및 수신기 회로들(E235)은 대칭 축(E140)에 대해 특정 상보적 레이아웃에 대응하는 물리적 레이아웃으로 배열된다.
온-칩 라우터들(E240)은, 공통 버스 회로(예를 들어, 버스 회로(E250))에 커플링된 한 쌍의 온-칩 라우터들(예를 들어, 온-칩 라우터들(E240a 및 E240d))을 포함한다. 온-칩 라우터(E240a)는 대칭 축(E140)의 좌측 상에 위치된 외부 인터페이스(E110)의 송신 및 수신 핀들의 특정 세트에 커플링된다. 온-칩 라우터(E240d)는 송신 및 수신 핀들의 특정 세트에 상보적인 대칭 축(E140)의 우측 상에 위치된 외부 인터페이스의 송신 및 수신 핀들의 상이한 세트에 커플링된다. 예를 들어, 온-칩 라우터(E240a)에 커플링된 주어진 송신 핀(E120)은 온-칩 라우터(E240d)에 커플링된 대응하는 상보적 수신 핀(E125)을 갖는다.
집적 회로(E101)의 제1 인스턴스의 특정 기능 회로(예컨대, 기능 회로(E260a))와 집적 회로(E101)의 제2 인스턴스의 상이한 기능 회로(예컨대, 기능 회로(E260b)의 제2 인스턴스) 사이의 데이터 교환의 예는 제1 인스턴스의 기능 회로(E260a)에 의해, 제1 인스턴스의 외부 인터페이스(E110)의 송신 핀들(E220)의 세트를 통해 제1 데이터를 전송하는 것을 포함한다.
이러한 전송은, 온-칩 라우터(E240a)를 사용하여 외부 인터페이스(E110)를 통해 신호들의 특정 세트를 제2 인스턴스에 송신하는 것을 포함한다. 제2 인스턴스에 의해, 제1 데이터를 수신하는 것은, 제2 인스턴스에서 온-칩 라우터(E240d)에 커플링되는 외부 인터페이스(E110)의 수신 핀들(E225)의 세트를 통해 신호들의 특정 세트를 제2 인스턴스에 의해 수신하는 것을 포함한다. 이어서, 온-칩 라우터(E240d)는 수신된 제1 데이터를 제2 인스턴스의 버스 회로(E250)를 통해 기능 회로(E260b)의 제2 인스턴스에 라우팅할 수 있다.
제2 인스턴스의 기능 회로(E260b)로부터 제1 인스턴스의 기능 회로(E260a)에 전송된 데이터는 이러한 프로세스를 반복한다. 집적 회로(E101)의 제2 인스턴스는, 제2 인스턴스의 온-칩 라우터(E240a)를 사용하여 외부 인터페이스(E110)를 통해 제1 인스턴스에 신호들의 상이한 세트의 신호들을 송신하는 것을 포함하여, 제2 인스턴스의 외부 인터페이스(E110)의 송신 핀들(E220)의 세트를 통해 제2 데이터를 전송한다. 제1 인스턴스에 의해, 제1 인스턴스의 외부 인터페이스(E110)의 수신 핀들(E225)의 세트를 통해 제2 데이터를 수신하는 것은, 제1 인스턴스의 온-칩 라우터(E240d)를 사용하여 외부 인터페이스(E110)를 통해 제2 인스턴스로부터 상이한 세트의 신호들을 수신하는 것을 포함한다. 이어서, 수신된 제2 데이터는 제1 인스턴스의 버스 회로(E250)를 통해 기능 회로(E260a)에 라우팅된다. 따라서, 데이터는 상보적 송신 핀들(E120) 및 수신 핀들(E125)의 대응하는 세트들을 사용하여 집적 회로(E101)의 2개의 인스턴스들 사이에서 교환될 수 있다.
또한, 온-칩 라우터(E240a)는 버스 회로(E250)를 통해, 온-칩 라우터(E240d) 및 송신 핀들의 세트(E220)에 커플링된다. 유사하게, 온-칩 라우터(E240d)는 수신 핀들(E225)의 세트에 커플링된다. 따라서, 제1 인스턴스에서 기능 회로(E260a)는 온-칩 라우터들(E240a 및 E240d)의 상보적 세트를 사용하여 외부 인터페이스(E110)를 통해 데이터를 전송 및 수신할 수 있다. 제2 인스턴스의 기능 회로(E260b)는 유사하게 제2 인스턴스의 온-칩 라우터들(E240a 및 E240d)의 상보적 세트를 사용하여 외부 인터페이스(E110)를 통해 데이터를 전송 및 수신할 수 있다. 따라서, 제1 및 제2 인스턴스들의 커플링된 외부 인터페이스들(E110)은 2개의 인스턴스들의 개개의 통신 패브릭들이 단일 코히어런트 통신 패브릭으로서 기능하는 것을 가능하게 할 수 있으며, 이로써 데이터 패킷들이 동일한 다이 상의 2개의 기능 회로들 사이에서 교환되는 데이터 패킷들과 유사한 방식으로 대향하는 다이들 상의 기능 회로들 사이에서 교환될 수 있게 한다. 기능적 관점에서, 집적 회로(E101)의 2개의 인스턴스들은 단일 집적 회로로서 수행할 수 있다.
도 50의 실시예가 하나의 예시임에 유의한다. 다른 실시예들에서, 상이한 조합의 요소들이 포함될 수 있다. 예를 들어, 상이한 수의 버스 회로들 및/또는 온-칩 라우터들이 포함될 수 있다. 도 50은 외부 인터페이스(E110)에 포함된 E26 핀들을 도시하지만, 다른 실시예들에서, 임의의 적합한 수의 핀들이 포함될 수 있다.
도 49 및 도 50의 설명에서, 외부 인터페이스(110)의 핀들의 다양한 쌍들은 상보적인 것으로 설명된다. 일부 실시예들에서, IC의 제1 인스턴스의 송신 핀들의 특정 세트에 걸쳐 송신되는 데이터의 비트들의 순서는 IC의 제2 인스턴스의 수신 핀들의 상보적 세트와 직접 정렬되지 않을 수 있다. 데이터 비트들의 오정렬이 어떻게 해결될 수 있는지를 보여주는 IC의 실시예가 도 51에 도시된다.
도 51을 참조하면, 외부 인터페이스(E110)의 이들 개개의 인스턴스들을 통해 커플링된, 집적 회로(E101)의 2개의 인스턴스들이 도시된다. 도시된 바와 같이, 시스템(E300)은 수신된 데이터가 송신 데이터로부터 오정렬되는 실시예를 도시한다. 시스템(E300)은 개개의 외부 인터페이스(E110a 및 E110b) 및 개개의 쌍의 온-칩 라우터들: 집적 회로(E101a) 내의 온-칩 라우터들(E340a 및 E340b) 및 집적 회로(E101b) 상의 온-칩 라우터들(E340c 및 E340d)을 각각 갖는 집적 회로들(E101a 및 E101b)을 포함한다. 예시된 예의 경우, 집적 회로(E101a)의 온-칩 라우터(E340a)는 집적 회로(E101b)의 온-칩 라우터(E340c)에 대응한다. 유사한 방식으로, 온-칩 라우터(E340b)는 온-칩 라우터(E340d)에 대응한다. 집적 회로들(E101a 및 E101b) 각각은, 개개의 온-칩 라우터들과 외부 인터페이스들 사이에서 개별 신호들을 라우팅하도록 구성된 인터페이스 랩퍼들(E350a 및 E350b) 중 개개의 인터페이스 랩퍼를 더 포함한다.
예시된 바와 같이, 외부 인터페이스(E110a 및 E110b)의 송신 및 수신 핀들은 개개의 송신기 및 수신기 회로들을 포함하는 핀들의 세트들로 그룹화된다. 이러한 핀들의 세트들은, 임의의 적합한 수가 사용될 수 있지만, 공통 수의 핀들(예시된 예에서는 8개)을 갖는다. 이러한 공통 수의 핀들은 핀들의 세트들에 대한 설계를 표준화하는 데 사용될 수 있다. 핀들의 각각의 세트는 클록 신호들, 전력 등을 제어하기 위한 신호들의 공통 세트를 포함할 수 있다. 예를 들어, 주어진 세트의 각각의 핀은 동일한 게이팅된 클록 신호를 수신하고, 동일한 게이팅된 전력 노드 및/또는 동일한 게이팅된 접지 기준 노드에 커플링될 수 있다. 핀들의 세트들에 대해 적은 수(예컨대, 하나 또는 2개)의 설계들을 활용하는 것은 외부 인터페이스에 대한 개발 시간을 감소시킬 뿐만 아니라 외부 인터페이스들(E110a 및 E110b)의 핀들 각각에 대해, 배치뿐만 아니라 성능 특성들(예컨대, 상승 및 하강 시간들)에 대한 균일성을 증가시킬 수 있다. 이전에 개시된 바와 같이, 외부 인터페이스(E110)의 각각의 인스턴스에 대해 단지 32개의 핀들만이 예시되지만, 외부 인터페이스(E110)는 실제로 수백 또는 수천 개의 핀들을 포함할 수 있다. 따라서, 인터페이스 설계에서 하나의 유닛으로서 구현될 핀들의 세트들을 표준화하는 것은 외부 인터페이스(E110)를 설계하고 검증하는 데 요구되는 시간들을 상당히 감소시킬 수 있다.
복수의 온-칩 라우터들(E340a-E340d) 중 개별적인 온-칩 라우터들은 핀들의 세트들 중 개개의 하나 이상의 핀들에 할당된다. 예를 들어, 온-칩 라우터(E340a)는 송신 핀들의 세트(E320a) 및 수신 핀들의 세트(E325a)에 할당된다. 마찬가지로, 온-칩 라우터들(EE340b-340d)은 개개의 세트의 송신 핀들 및 개개의 세트의 수신 핀들에 할당된다.
다양한 실시예들에서, 이들 할당들은 고정될 수 있거나 또는 프로그래밍가능할 수 있는데, 예컨대, 핀들의 세트들은 특정 구성 레지스터(도시되지 않음)를 설정함으로써 할당된다. 도시된 실시예에서, 수신 및 송신 핀들이 별개의 세트들로 그룹화된다는 것에 유의한다. 다른 실시예들에서, 아래에 도시될 바와 같이, 핀들의 세트는 송신 핀들 및 수신 핀들 둘 모두를 포함할 수 있다.
또한, 복수의 온-칩 라우터들(E340a-E340d) 중 개별적인 온-칩 라우터들이 개개의 버스 회로에 할당되고, 그에 따라, 동일한 집적 회로(E101) 상에 포함된 복수의 기능 회로들에 커플링된다. 일부 실시예들에서, 온-칩 라우터들(E340)의 물리적 배향은, 온-칩 라우터가 커플링되는 특정 버스 회로에 우선하여 구현될 수 있다. 예를 들어, 온-칩 라우터들(E340a 및 E340b)은, 이들이 집적 회로(E101a)를 둘러싸는 공통 버스 회로에 정렬되기 위해 서로 180도 회전되도록 인스턴스화될 수 있다. 이러한 실시예에서, 온-칩 라우터(E340b)의 핀들은 외부 인터페이스(E110a)의 수신 핀들(E325b)의 세트 및/또는 송신 핀들(E320b)의 세트에 정렬되지 않을 수 있다. 추가로, 인터페이스 랩퍼(350a)는 서로 180도 인스턴스화되는 동일한 컴포넌트의 몇몇 인스턴스들을 포함할 수 있다. 그러한 경우, 인터페이스 랩퍼(E350a)의 송신 및 수신 핀들은 외부 인터페이스(E110a)의 핀들에 정렬되지 않을 수 있다. 따라서, 인터페이스 랩퍼(E350a)를 통해 핀들 신호들을 리라우팅하는 능력이 요구될 수 있다.
도시된 바와 같이, 온-칩 라우터들(E340a-E340d) 각각은 핀들의 공통 수인 8과는 상이한 6개의 출력 신호들 및 6개의 입력 신호들을 포함한다. 따라서, 각각의 온-칩 라우터(E340)에 할당된 핀들(E320 및 E325)의 각각의 세트들 중 2개의 핀들은 사용되지 않는다. 도 50과 관련하여 위에서 설명된 바와 같이, 온-칩 라우터들(E340a-E340d) 각각은 특정 네트워크 프로토콜을 지원한다. 도 51에 도시된 바와 같은 일부 경우들에서, 특정 네트워크 프로토콜은 핀들의 세트들에 포함된 공통 수의 핀들과 정렬되는 수의 핀들을 포함하지 않을 수 있다. 여분의 핀들을 제거하는 것이 나머지 핀들의 성능 특성들에 영향을 미칠 수 있기 때문에(예컨대, 나머지 핀들 각각에 의해 보이는 기생 커패시턴스가 상이하여, 상승 및 하강 시간들에 영향을 미칠 수 있음), 일부 실시예들에서, 무관한 핀들이 개개의 세트들에 남겨진다.
도시된 바와 같이, 송신 핀들(E320)의 각각의 세트는 송신 버퍼를 포함하고, 유사하게, 수신 핀들(E325)의 각각의 세트는 수신 버퍼를 포함한다. 8개의 송신 핀들 또는 8개의 수신 핀들이 각각의 세트에 포함되기 때문에, 개개의 송신 및 수신 버퍼들은 데이터의 바이트로서 액세스될 수 있다. 예를 들어, 온-칩 라우터(E340a)는 데이터를 온-칩 라우터(E340d)에 전송할 수 있다. 온-칩 라우터(E340a)는 6개의 출력 신호들을 인터페이스 랩퍼(E350a)에 전송한다. 인터페이스 랩퍼(E350a)는 송신 핀들(E320a)의 세트를 온-칩 라우터(E340a)의 디폴트 핀 할당에 라우팅하도록 구성된다. 도시된 바와 같이, 이러한 디폴트 할당은 송신 핀들(E320a)의 세트의 비트 0이 온-칩 라우터(E340a)의 비트 0에 커플링되는 식으로 고, 온-칩 라우터(E340a)의 비트 5에 할당된 송신 핀들(E320a)의 세트의 비트 5에 커플링되는 직선형 할당이다.
이러한 비트 할당은 비트 0이 외부 인터페이스(E110a)의 핀들의 세트들의 최좌측 핀에 대응한다고 가정한다.
집적 회로(E101b)는 집적 회로(E101a)에 대해 180도 회전된다는 것에 유의한다. 따라서, 비트 0은 외부 인터페이스(E110b)의 핀들의 세트들의 최우측 핀에 대응한다. 외부 인터페이스(E110 및 E110b) 사이의 와이어들(E145)은 도시된 바와 같이 직선형이기 때문에, 송신 핀들(E320)의 세트의 비트 0은 수신 핀들(E325d)의 세트의 비트 7에 커플링되고, 유사하게 송신 핀들(E320a)의 세트의 비트 5는 수신 핀들(E325d)의 세트의 비트 2에 커플링된다. 따라서, 인터페이스 랩퍼(E350b)는 비-디폴트 핀 할당을 사용하여 수신 핀들(E325d)의 세트를 온-칩 라우터(E340d)에 라우팅한다.
유사한 방식으로, 온-칩 라우터(E340d)로부터 온-칩 라우터(E340a)로 데이터를 전송하는 것은, 온-칩 라우터(E340d)에 의해, 송신 핀들(E320d)의 세트를 온-칩 라우터(E340d)에 라우팅하기 위해 비-디폴트 핀 할당을 사용하여 외부 인터페이스(E110b)의 송신 핀들(E320d)의 세트를 통해 신호들을 전송하는 것을 포함할 수 있다. 온-칩 라우터(E340a)에 의해, 외부 인터페이스(E110a)의 수신 핀들(E325a)의 세트를 통해 데이터를 수신하는 것은 디폴트 핀 할당을 사용하여 온-칩 라우터(E340a)에 수신 핀들(E325a)의 세트를 라우팅하는 것을 포함한다.
일부 실시예들에서, 인터페이스 랩퍼들(E350a 및 E350b)은, 주어진 온-칩 라우터(E340)에 의해 어떠한 데이터도 전달되고 있지 않은 임의의 주어진 클록 사이클 상에서 주어진 온-칩 라우터(E340)와 핀들의 할당된 세트(또는 세트들)의 송신 및 수신 핀들 사이의 라우팅을 조정할 수 있다. 예를 들어, 특정 양의 데이터가 온-칩 라우터(E340b)와 온-칩 라우터(E340c) 사이에서 전송될 수 있다. 인터페이스 랩퍼(E350a)는 특정 데이터의 제1 부분에 대해, 제1 핀 할당을 사용하여 온-칩 라우터(E340b)와 송신 핀들(E320b)의 세트 사이에서 복수의 신호들을 라우팅하고, 이어서, 특정 데이터의 제2 부분에 대해, 제1 핀 할당과 상이한 제2 핀 할당을 사용하여 온-칩 라우터(E340b)와 송신 핀들(E320b)의 세트 사이에서 복수의 신호들을 리라우팅한다.
집적 회로들(E101a 및 E101b)은, 예컨대, 특정 명령어 세트 아키텍처의 명령어들을 실행할 수 있는 하나 이상의 프로세싱 코어들을 각각 포함할 수 있다. 따라서, 특정 프로그램의 명령어들은 코어로 하여금 특정 시점들에 또는 특정 유형들의 데이터에 대해 인터페이스 랩퍼들(E350a 및/또는 E350b) 내의 핀 할당들을 수정하게 할 수 있다. 예를 들어, 이미지 데이터는 하나의 핀 할당을 사용하여 전송되고, 이어서 오디오 데이터에 대해 또는 이미지 데이터와 연관된 커맨드들에 대해 상이한 핀 할당으로 스위칭될 수 있다. 또한, 인터페이스 랩퍼(E350a 및 E350b)는 동일한 IC 상의 상이한 라우터가 데이터를 전송 또는 수신하고 있는 동안 하나의 온-칩 라우터에 대한 핀 할당들을 리라우팅할 수 있다.
도 51의 예들은 단지 개시된 개념들을 보여주기 위한 것임에 유의한다. 시스템(E300)은 설명된 기법들을 명확하게 예시하기 위해 간략화되었다. 다른 실시예들에서, 송신 및 수신 핀들의 추가적인 세트들이 외부 인터페이스들 뿐만 아니라 추가적인 온-칩 라우터들에 포함될 수 있다. 집적 회로들(E101a 및 E101b)의 다른 회로 블록들은 명확성을 위해 생략되었다.
도 51은 외부 인터페이스의 핀들의 세트들이 어떻게 구현되고 활용될 수 있는지를 설명한다. 이러한 핀들의 세트들을 구현하기 위해 다양한 기법들이 활용될 수 있다. 도 51에서, 외부 인터페이스의 핀들은 수신 핀들의 세트들과 별개인 송신 핀들의 세트들로 그룹화된다. 도 52는 송신 및 수신 핀들 둘 모두를 포함하는 핀들의 세트들을 그룹화하기 위한 다른 예를 예시한다.
도 52으로 진행하면, 외부 인터페이스를 갖는 집적 회로의 실시예의 블록도가 도시된다. 예시된 실시예에서, 집적 회로(E101)는 외부 인터페이스(E410) 및 온-칩 라우터들(E440a-E440d)(총괄적으로, 온-칩 라우터들(E440))을 포함한다. 외부 인터페이스(E410)는 송신 및 수신 핀들의 4개의 세트들, 즉 번들들(E450a-E450d)(총괄적으로 번들들(E450))을 포함하며, 여기서 송신 및 수신 핀들은 대칭 축(E140)에 대해 상보적 레이아웃으로 배열된다. 예시된 번들들(E450a-E450d) 각각은 8개의 핀들, 즉, 4개의 송신 핀들 및 4개의 수신 핀들을 포함한다.
예시된 바와 같이, 외부 인터페이스(E410)의 송신 및 수신 핀들은 핀들의 세트들인 번들들(E450a-E450d)로 그룹화되며, 번들들(E450) 각각은 공통 수(8개)의 핀들을 갖는다. 온-칩 라우터들(E440)은 번들들(E450) 중 개개의 번들들에 할당된다. 그러나, 다른 실시예들에서, 온-칩 라우터들(E440) 중 하나 이상은 2개 이상의 번들들(E450)에 할당될 수 있다. 앞서 설명된 바와 같이, 송신 및 수신 핀들의 세트들은 외부 인터페이스(E410)의 핀들에 걸쳐 코히어런시를 증가시키기 위해 표준화된 번들들(E450)을 사용하여 구현될 수 있다. 각각의 번들(E450) 내에서, 포함된 송신 및 수신 핀들은 공통 전력 신호 및 클록 신호를 공유한다.
각각의 번들(E450)은 임의의 적적한 전력 신호 및 클록 신호에 커플링될 수 있다. 도시된 바와 같이, 번들들(E450a 및 E450d)은 수신 전력 신호(E460a) 및 클록 신호(E465a)에 커플링되는 한편, 번들들(E450b 및 E450c)은 수신 전력 신호(E460b) 및 클록 신호(E465b)에 커플링된다. 일부 실시예들에서, 전력 신호(E460a)는, 예를 들어, 상이한 전압 레벨을 사용하는 것 및/또는 상이한 전력 게이트들을 구현하여 개개의 번들들(E450)을 인에이블/디스에이블하는 것을 포함하여, 전력 신호(E460b)와 독립적으로 제어될 수 있다. 유사한 방식으로, 클록 신호(E465a)는 또한 클록 신호(E465b)와 독립적으로 제어될 수 있다. 클록 신호(E465a)에 따르면, 클록 신호(E465b)와 독립적으로 특정 주파수로 인에이블 및/또는 설정될 수 있다. 본 실시예에서, 번들들(E450a 및 E450d)은, 번들들(E450b 및 E450c)과 마찬가지로 상보적 쌍이다.
번들들(E450) 각각을 구현하기 위해 표준화된 핀 번들을 사용하는 것에 추가하여, 번들들(E450)의 상보적 쌍에 대한 공통 전력 및 클록 신호들의 사용은 상보적 쌍의 2개의 번들들(E450) 사이의 성능 코히어런시를 추가로 증가시킬 수 있다.
도시된 바와 같이, 온-칩 라우터들(E440a 및 E440d)은 번들들(E450a 및 E450d)에 각각 할당된다. 유사한 방식으로, 온-칩 라우터들(E440b 및 E440c)은 번들들(E450b 및 E450c)에 각각 할당된다. 온-칩 라우터들(E440a 및 E440d)은 표준화된 번들에 포함되는 것과 동일한 수의 송신 및 수신 핀들을 포함하여, 번들들(E450a 및 E450d)에서 미사용 핀들이 없게 된다. 반대로, 온-칩 라우터들(E440b 및 E440c)은 표준화된 번들에 포함된 공통 수의 핀들보다 더 적은 송신 및 수신 핀들을 포함하여, 번들들(E450b 및 E450c)에서 각각 하나의 미사용 송신 핀 및 하나의 미사용 수신 핀을 초래한다.
예시된 바와 같이, 온-칩 라우터들(E440a 및 E440d)은 개개의 번들들의 모든 송신 핀들을 사용하여 번들들(E450a 및 E450d)을 통해 데이터 패킷들을 전송할 수 있다. 그러나, 상이한 시점에, 온-칩 라우터들(E440a 및 E440d)은 복수의 데이터 패킷들을 전송할 수 있으며, 여기서 복수의 데이터 패킷들 중의 데이터 패킷들은 더 적은 수의 비트들을 포함하여, 개개의 번들(E450)의 모든 송신 핀들보다 더 적은 수의 송신 핀들이 사용되게 한다. 마찬가지로, 데이터 패킷들을 수신할 때, 번들(E450a 및 E450d) 내의 모든 수신 핀들보다 더 적은 핀들이 주어진 데이터 패킷을 수신하는 데 사용될 수 있다.
도 52는 단지 개시된 개념들의 일 예일 뿐이라는 것에 유의한다. 4개의 온-칩 라우터들 및 4개의 핀 번들들이 도시되지만, 다른 실시예들에서는 임의의 적합한 수가 포함될 수 있다. 예시된 바와 같이, 각각의 핀 번들 내에 4개의 송신 핀들 및 4개의 수신 핀들이 도시된다. 다른 실시예들에서, 임의의 적합한 수의 송신 및 수신 핀들이 포함될 수 있다. 일부 실시예들에서, 송신 핀들의 수는 수신 핀들의 수와 상이할 수 있다. 다른 실시예들에서, 송신 및 수신 핀들은 별개의 번들들로 구현될 수 있다.
도 49 및 도 51에서, 2개의 집적 회로들은 이들 개개의 외부 인터페이스들을 통해 커플링된 것으로 도시된다. 일부 실시예들에서, 2개의 집적 회로들은 동일 평면 표면 상에 배치될 수 있으며, IC들 둘 모두는 동일한 방향을 향하고, 하나의 IC는, 2개의 외부 인터페이스들의 핀들이 교차하는 임의의 와이어들 없이 커플링될 수 있게 하는 방식으로 이들 개개의 외부 인터페이스들의 핀들이 정렬되도록 회전된다. 다른 실시예들에서, 도 53a 및 도 53b에 도시된 바와 같이, 2개의 IC들은 그들 개개의 외부 인터페이스들이 정렬된 상태로 대면하여 부착될 수 있다. 도 53b는 비정렬된 외부 인터페이스를 통해 커플링된 2개의 다이의 예를 추가로 도시한다.
이제 도 53a로 진행하면, 외부 인터페이스를 통해 2개의 집적 회로들을 함께 부착하기 위한 2개의 실시예들이 도시된다. 일 실시예에서, 시스템(E500)은 솔더 범프들(E540)을 사용하여 집적 회로 다이(E501b)에 커플링된 집적 회로 다이(E501a)를 도시한다. 다른 실시예에서, 시스템(E505)은 인터포저 디바이스(E530)뿐만 아니라 2개의 세트들의 솔더 범프들(E545)을 사용하여 집적 회로 다이(E501b)에 커플링된 집적 회로 다이(E501a)를 도시한다. 본 실시예에서, 집적 회로 다이(E501a 및 E501b)는 도 49의 집적 회로들(E101a 및 E101b)에 대응한다.
도 49에 도시된 바와 같이, 집적 회로들(E101a 및 E101b)의 외부 인터페이스들은, 동일 평면 표면 상에 배치된 2개의 다이들과 함께, 와이어들(예컨대, 회로 보드들 상에 침착된 솔더링된 본드 와이어들 또는 마이크로스트립 전도체들)을 사용하여 커플링될 수 있으며, 다이들 둘 모두의 면은 동일한 방향을 향한다. 그러한 기법은 저비용 조립 솔루션을 가능하게 할 수 있지만, 2개의 다이들의 풋프린트보다 더 큰, 연관된 회로 보드의 표면적을 요구할 수 있다. 이 풋프린트를 감소시키기 위해, 시스템(E500)은, 솔더 범프들(E540)을 사용하여 서로 직접 솔더링 및 정렬된 개개의 외부 인터페이스들의 핀들과 대면하게 배치된 2개의 집적 회로 다이(E501a 및 E501b)를 포함한다. 예를 들어, 송신 핀(E120a)은 수신 핀(E125b)에 직접 솔더링되고, 수신 핀(E125a)은 송신 핀(E120b)에 직접 솔더링된다. 도 49의 외부 인터페이스들(E110)에 대해 위에서 설명된 상보적 핀 레이아웃은 동일한 인터페이스의 상이한 인스턴스들 사이에서 이러한 직접 솔더링을 가능하게 한다. 대칭 축(E140)으로부터 등거리에 상보적 쌍들의 핀들의 배치는 직접 연결들을 가능하게 하는 정렬을 제공한다.
시스템(E505)은 시스템(E500)과 유사한 솔루션을 제시하지만, 인터포저 디바이스(E530a)가 추가되어, 각각의 다이의 외부 인터페이스 사이에 전도성 연결을 제공한다. 시스템(E505)에서, 집적 회로 다이(E501a)의 송신 핀(E120a)은 인터포저 디바이스(E530a)의 특정 핀에 솔더링된다. 이어서, 이 특정 핀은 핀(E125b)을 수용하도록 솔더링된다. 유사한 방식으로, 수신 핀(E125a)은 인터포저 디바이스(E530a)의 상이한 핀에 솔더링되고, 인터포저 디바이스(E530a)는 이어서 송신 핀(E120b)에 솔더링된다. 인터포저 디바이스(E530a)가 물리적으로 정렬되지 않은 집적 회로 다이(E501b)의 핀들로의 집적 회로 다이(E501a)의 핀들의 라우팅을 허용할 수 있지만, 집적 회로 다이(E501a 및 E501b)의 외부 인터페이스들에 대한 상보적 핀 레이아웃의 사용은 인터포저 디바이스(E530a)가 2개의 다이 사이에서 직선형으로 전도성 경로들을 가질 수 있게 한다. 이러한 직선 연결은 2개의 다이 상의 오정렬된 핀들 사이의 연결들을 라우팅하는 것에 비해, 집적 회로(E501a 및 E501b)의 핀들 사이의 물리적 경로를 감소시킬 수 있다. 인터포저 디바이스(E530a)의 사용은 추가로, 예를 들어, 핀들이 다른 집적 회로들에 커플링될 수 있는 인터포저 디바이스(E530)의 에지로의 집적 회로 다이(E501a 및 E501b) 중 어느 하나의 다른 핀들 또는 외부 인터페이스들의 하나 이상의 핀들의 라우팅을 허용할 수 있다.
도 53a에서, 집적 회로들(E501a 및 E501b)의 외부 인터페이스들의 핀들은 대칭 축(E140)으로부터 등거리에 있는 상보적 핀들과 함께 도시된다. 일부 실시예들에서, 인터페이스의 모든 핀들이 그러한 등거리의 핀 레이아웃을 포함하는 것은 아닐 수 있다. 이제 도 53b를 참조하면, 2개의 커플링된 IC들의 2개 이상의 예들이 도시된다. 그러나, 시스템들(E510 및 E515)에 포함된 IC들은 대칭 축으로부터 모두 등거리에 있는 핀들을 포함하지 않는다.
예시된 바와 같이, 시스템(E510)은 상보적 핀들을 포함하는 외부 인터페이스의 예를 보여준다. 집적 회로 다이(E501a, E501b)와 유사하게, 집적 회로 다이(E502a, E502b)는 공통 외부 인터페이스 설계를 통해 커플링된 동일한 집적 회로 설계의 2개의 인스턴스들이다. 집적 회로 다이(E502a, E502b)의 외부 인터페이스의 핀들은 2개의 버스들, 즉 버스(E560) 및 버스(E565)에 대한 송신 및 수신 핀들을 포함한다. 버스(E565)에 대한 핀들은 다이 당 2개의 섹션들, 즉, 집적 회로 다이(E502a) 상의 버스(E565a 및 E565b) 및 집적 회로 다이(E502b) 상의 버스(E565c 및 E565d)로 분할된다. 각각의 다이는 또한, 버스(E560), 즉, 집적 회로 다이(E502a) 상의 E560a 및 집적 회로 다이(E502b) 상의 E560b에 대한 개개의 핀들을 포함한다. 버스(E565a 및 E565d)의 상보적 핀들은 대칭 축(E140)으로부터 등거리가 아니며, 핀들은 동일한 순서로 배열되지만, 다이의 에지들에 평행한 직선은 버스들(E565a 및 E565d)의 핀들을 통해 그리고 유사하게 버스들(E565b 및 E565c)의 핀들로 인출될 수 없다. 따라서, 버스(E565)의 핀들은 정렬되지 않는다.
도시된 바와 같이, 상보적 기능들을 갖는 버스(E560a)의 핀들은 또한 대칭 축(E140)으로부터 등거리에 배열되지 않는다. 그러나, 버스(E565)의 핀들과 달리, 다이의 에지들에 평행한 라인들이 버스들(E560a 및 E560b)의 핀들의 상보적 쌍들을 통해 인출될 수 있다. 따라서, 버스(E560)의 핀들은 정렬된다.
제시된 바와 같이, 시스템(E515)은 상보적이지 않은 외부 인터페이스의 예를 보여준다. 시스템(E510)과 같이, 시스템(E515)은 동일한 집적 회로 설계의 2개의 인스턴스들인 집적 회로 다이(E503a 및 E503b)를 포함한다. 시스템(E515)에서, 외부 인터페이스의 핀들은 정렬되지 않으며, 결과적으로 다수의 신호 경로들이 교차한다. 예를 들어, 송신 핀(E120a)과 수신 핀(E125b) 사이의 신호 경로는 송신 핀(E121a) 및 수신 핀(E126b)으로부터의 경로와 교차한다. 대칭 축(E140)의 반대편에서, 송신 핀(E120b)과 수신 핀(E125a) 사이의 신호 경로는 송신 핀(E121b) 및 수신 핀(E126a)으로부터의 경로와 교차한다. 이러한 오정렬로 인해, 집적 회로들(E503a 및 E503b)은 상보적 인터페이스를 갖는 것으로 간주되지 않는다.
외부 인터페이스의 상보적 핀들의 정렬은 인접한 신호들 사이의 잡음 커플링의 감소를 초래할 수 있다는 것에 유의한다. 2개 이상의 신호 경로들이 교차할 때, 신호들을 전달하는 와이어들이 매우 근접하게 될 수 있고, 이는 결국, 제1 신호 경로가 제2 신호 경로 상의 신호 전환들로부터 전자기 간섭을 수신하는 잡음 커플링에 대한 민감성을 증가시킬 수 있다. 2개의 신호 경로들이 가까울수록, 2개의 경로들 사이에서 송신되는 잡음에 대한 민감성이 더 크다. 인터페이스의 핀들을 정렬시킴으로써, 인접한 신호 경로들 사이에 적합한 거리가 유지되어, 잡음 민감성을 수용가능한 레벨로 감소시킬 수 있다. 정렬된 핀 레이아웃은 인터포저 디바이스를 통한 신호 경로들의 길이를 추가로 감소시킬 수 있고, 이는 핀들의 상보적 쌍들 사이의 임피던스를 감소시켜, 시스템의 동작이 더 낮은 전압 레벨들 및/또는 더 높은 클록 주파수들에서 발생하는 것을 가능하게 할 수 있다.
도 53a 및 도 53b의 예들은 단지 개시된 기법들을 보여주기 위한 것임에 추가로 유의한다. 2개 이상의 IC 다이를 커플링하기 위한 다른 기법들이 고려된다. 예를 들어, 일부 실시예들에서, 2개 이상의 IC 다이 각각에 대한 핀들은 회로 보드를 통해 라우팅되는 다이 사이의 연결부들을 이용하여 회로 보드에 직접 커플링될 수 있다.
도 49 내지 도 53과 관련하여 위에서 설명된 회로들 및 기법들은 다양한 방법들을 사용하여 2개의 외부 인터페이스들을 커플링할 수 있다. 인터페이스들을 커플링하는 것과 연관된 2개의 방법들이 도 54 및 도 55에 관하여 아래에서 설명된다.
이제 도 54로 이동하면, 2개의 집적 회로들을 함께 커플링하기 위한 방법의 실시예에 대한 흐름도가 도시된다. 방법(E600)은 도 49의 시스템(E100)과 같은 집적 회로의 2개 이상의 인스턴스들을 포함하는 시스템에 의해 수행될 수 있다. 도 49 및 도 54를 종합적으로 참조하면, 방법(E600)은 블록(E610)에서 시작한다.
블록(E610)에서, 방법(E600)은, 집적 회로(E101a)에 의해, 외부 인터페이스(E110a)의 송신 핀들의 세트를 통해 제1 데이터를 집적 회로(E101b)에 전송하는 단계를 포함한다. 도시된 바와 같이, 집적 회로들(E101a 및 E101b)은 공통 집적 회로 설계의 2개의 인스턴스들이다. 따라서, 2개의 인스턴스들의 물리적 핀 레이아웃은 동일하다. 그러나, 다른 실시예들에서, 2개의 상이한 집적 회로들의 개개의 인스턴스들이 사용될 수 있다는 것이 고려된다. 도 49에서, 집적 회로(E101a)의 외부 인터페이스(E110a)의 송신 핀들은 수신 핀(E125b)에 커플링된 송신 핀(E120a)을 포함하여 집적 회로(E101b)의 외부 인터페이스(E110b)의 개개의 수신 핀들에 커플링된다. 따라서, 집적 회로(E101a)는 외부 인터페이스(E110a)를 사용하여 제1 데이터를 집적 회로(E101b)에 전송할 수 있다.
방법(E600)은 블록(E620)에서, 집적 회로(E101a)에 의해 집적 회로(E101b)로부터, 외부 인터페이스(E110a)의 수신 핀들의 세트를 통해 제2 데이터를 수신하는 단계를 더 포함한다.
예시된 바와 같이, 송신 핀(E120b)에 커플링된 수신 핀(E125a)을 포함하여, 외부 인터페이스(E110a)의 수신 핀들이 외부 인터페이스(E110b)의 개개의 수신 핀들에 커플링된다. 송신 핀들의 세트 및 수신 핀들의 세트는 집적 회로(E101)의 대칭 축(E140)에 대해 상보적 포지션들에 위치된다. 따라서, 송신 핀들(E120a 및 E120b)은 공통 집적 회로 설계에서 동일한 송신 핀에 대응한다. 마찬가지로, 수신 핀들(E125a 및 E125b)은 공통 집적 회로 설계에서 동일한 수신 핀에 대응한다. 대칭 축(E140)에 대한 외부 인터페이스의 이러한 상보적 핀 레이아웃은, 외부 인터페이스의 어떠한 핀들도 리라우팅할 필요 없이 공통 집적 회로 설계의 2개의 인스턴스들이 그들 개개의 외부 인터페이스들에 의해 커플링될 수 있게 한다. 대신에, 외부 인터페이스들(E110a, E110b) 사이의 직접적인 연결들은 교차하는 어떠한 연관된 와이어들도 없이 가능할 수 있다. 공통 집적 회로의 2개의 인스턴스들을 커플링하기 위한 그러한 기법은 많은 수의 핀들(예컨대, 1000개 초과의 핀들)과의 외부 인터페이스를 허용할 수 있다.
일부 실시예들에서, 방법(E600)은 블록(E620)에서 종료될 수 있거나, 또는 다른 실시예들에서, 2개의 집적 회로들(E101a 및 E101b) 사이에서 교환될 새로운 데이터에 응답하여 반복될 수 있다. 도 54의 방법은 단지 2개의 집적 회로들을 커플링하기 위한 예일 뿐이라는 것에 유의한다.
이제 도 55를 참조하면, 외부 인터페이스의 핀들과 하나 이상의 온-칩 라우터들 사이에서 신호들을 라우팅하기 위한 방법의 실시예에 대한 흐름도가 예시된다. 위의 방법(E600)과 유사한 방식으로, 방법(E700)은 도 51의 시스템(E300)과 같은 2개 이상의 집적 회로들을 갖는 시스템에 의해 수행될 수 있다. 도 51 및 도 55를 종합적으로 참조하면, 방법(E700)은 블록(E710)에서 시작한다.
방법(E700)은 블록(E710)에서, 송신 핀들(E320a)의 세트를 통해 제1 데이터를 전송하기 위해, 집적 회로(E101a)에 의해, 비-디폴트 핀 할당을 사용하여 송신 핀들(E320b)의 세트를 온-칩 라우터(E340b)에 라우팅하는 단계를 포함한다. 도 51에 도시된 바와 같이, 집적 회로(E101a)는 온-칩 라우터들(E340a 및 E340b)로부터 외부 인터페이스(E110a) 내의 송신 및 수신 핀들의 개개의 세트들로 신호들을 라우팅하도록 구성된 인터페이스 랩퍼(E350a)를 포함한다. 인터페이스 랩퍼(E350a)는 송신 핀들(E320b)의 세트를 라우팅하여 온-칩 라우터(E340b)로부터의 출력 신호들에 라우팅하기 위한 디폴트 핀 할당을 사용할 수 있다. 그러나, 일부 조건들 하에서, 인터페이스 랩퍼(E350a)는 비-디폴트 핀 할당을 사용하여 온-칩 라우터(E340b)로부터의 출력 신호들을 송신 핀들(E320b)의 세트로 리라우팅하도록 구성될 수 있다. 예를 들어, 도 51에 도시된 바와 같이, 온-칩 라우터(E340b)는 송신 핀들(E320b)의 세트에 포함된 송신 핀들의 수보다 더 적은 출력 신호들을 갖는다. 비-디폴트 핀 할당은, 제1 데이터의 개별 비트들이 집적 회로(E101b)에 의해 수신되는 곳을 조정하는 데 사용될 수 있다.
블록(E720)에서, 방법(E700)은 수신 핀들(E325a)의 세트를 통해 제2 데이터를 수신하기 위해, 집적 회로(E101a)에 의해, 디폴트 핀 할당을 사용하여 수신 핀들(E325a)의 세트를 온-칩 라우터(E340a)에 라우팅하는 단계를 포함한다. 예시된 바와 같이, 인터페이스 랩퍼(E350a)는, 일부 경우들에서, 예를 들어, 제2 데이터의 개별 비트들이 원하는 순서로 도달되도록 제2 데이터가 외부 인터페이스(E110b) 내의 송신 핀들(E320d)의 세트로부터 전송되기 전에 핀 할당을 리라우팅하기 위해 집적 회로(E101b) 내의 인터페이스 랩퍼(E350b)가 비-디폴트 핀 할당을 사용할 때, 온-칩 라우터(E340a)에 수신 핀들(E325a)의 세트를 커플링하기 위해 디폴트 핀 할당을 사용하도록 추가로 구성될 수 있다.
디폴트 및 비-디폴트 핀 할당들의 그러한 사용은 함께 커플링된 2개의 집적 회로들의 외부 인터페이스들의 유연성을 증가시킬 수 있다. 신호들이 외부 인터페이스들과 온-칩 라우터들 사이에서 리라우팅될 수 있게 함으로써, 2개의 외부 인터페이스들 사이에서 전달되는 신호들의 코히어런시는 2개의 외부 인터페이스들 사이에서 와이어들을 통해 신호들을 리라우팅하는 것에 비해 증가될 수 있다. 또한, 인터페이스 랩퍼들의 프로그래밍가능한 라우팅 능력들은 외부 인터페이스들의 유연성을 증가시킬 수 있어서, 잠재적으로, 전달된 데이터 비트들을 적절한 비트 포지션에 배치하기 위해 전송 전에 데이터를 전처리하거나 수신된 데이터를 후처리할 필요 없이 집적 회로들 사이에서 전달될 증가된 수의 데이터 유형들에 대해 외부 인터페이스들이 활용될 수 있게 한다.
도 55의 방법은 단지, 온-칩 라우터와 외부 인터페이스 사이에서 데이터를 라우팅하기 위한 예라는 것에 유의한다. 방법(E700)은 도 49 내지 도 53에 개시된 집적 회로들의 임의의 인스턴스들에 의해 수행될 수 있다. 방법들(E600 및 E700)의 동작들의 조합들을 포함하여, 개시된 방법들의 변형들이 고려된다. 예를 들어, 방법(E700)의 블록(E710)은 방법(E600)에서의 블록(E610)의 수행 이전에 수행될 수 있고, 블록(E720)은 방법(E600)의 블록(E620)의 수행 이전에 수행될 수 있다.
해싱
도 56 내지 도 68은 SOC(10)의 일 실시예에 의해 이용될 수 있는 어드레스 해싱 메커니즘의 다양한 실시예들을 예시한다. 일 실시예에서, 해싱 회로부는 선택적으로 프로그래밍가능한 해싱 프로토콜에 따라 메모리 요청 트래픽을 시스템 메모리에 분배하도록 구성된다. 프로그래밍가능한 해싱 프로토콜의 적어도 하나의 프로그래밍은, 다양한 일련의 메모리 요청들에 대해 시스템 내의 복수의 메모리 제어기들에 걸쳐 일련의 메모리 요청들을 균등하게 분배한다. 프로그래밍가능한 해싱 프로토콜의 적어도 하나의 프로그래밍은 특정된 입도로 메모리 공간 내의 인접한 요청들을 물리적으로 먼 메모리 인터페이스들에 분배한다.
(예컨대, 특정 I/O 디바이스들에 맵핑되는 I/O 어드레스 공간과 비교하여) 메모리 어드레스 공간을 통해 시스템 내의 프로세서들 및 다른 하드웨어 에이전트(hardware agent)들에 직접 액세스가능한 많은 양의 시스템 메모리를 포함하는 다양한 컴퓨터 시스템들이 존재한다.
시스템 메모리는 일반적으로 다수의 동적 랜덤 액세스 메모리(DRAM) 디바이스들로서 구현된다. 다른 경우들에서, 다른 유형들의 메모리, 예컨대 정적 랜덤 액세스 메모리(SRAM) 디바이스들, 다양한 유형들의 자기 메모리 디바이스들(예컨대, MRAM), 플래시 메모리 또는 판독 전용 메모리(ROM)와 같은 비휘발성 메모리 디바이스들, 다른 유형들의 랜덤 액세스 메모리 디바이스들이 또한 사용될 수 있다. 일부 경우들에서, RAM 디바이스들에 맵핑되는 메모리 어드레스 공간의 부분들에 더하여 메모리 어드레스 공간의 일부분이 그러한 디바이스들에 맵핑될 수 있다(그리고 메모리 맵핑된 I/O 디바이스들도 사용될 수 있다).
메모리 디바이스들에 대한 메모리 어드레스들의 맵핑은 메모리 시스템의 성능(예컨대, 지속가능한 대역폭 및 메모리 레이턴시의 면에서)에 큰 영향을 미칠 수 있다. 예를 들어, 전형적인 불균일 메모리 아키텍처(non-uniform memory architecture, NUMA) 시스템들은 프로세서들, 주변기기 디바이스들, 및 메모리를 포함하는 컴퓨팅 노드들로 구성된다. 컴퓨팅 노드들은 통신하며, 하나의 컴퓨팅 노드가 다른 컴퓨팅 노드 내의 데이터에 액세스할 수 있지만, 증가된 레이턴시에서 액세스할 수 있다. 메모리 어드레스 공간은 큰 연속 섹션들에서 맵핑된다(예컨대, 하나의 노드는 어드레스들 0 내지 N-1을 포함하고 - 여기서 N은 노드 내의 메모리의 바이트 수임 -, 다른 노드는 어드레스들 N 내지 2N-1을 포함하는 등이다). 이러한 맵핑은 비-로컬 메모리에 대한 액세스들을 희생하면서 로컬 메모리에 대한 액세스를 최적화한다. 그러나, 이러한 맵핑은 또한, 가상 페이지들을 물리적 페이지들에 맵핑하는 방식, 및 더 높은 성능을 달성하기 위한 시스템에서 주어진 프로세스가 실행될 수 있는 컴퓨팅 노드의 선택 둘 모두에서 운영 체제를 제한한다. 부가적으로, 대량의 데이터에 대한 프로세스에 의한 액세스들의 대역폭 및 레이턴시는 주어진 로컬 메모리 시스템의 성능에 의해 제한되고, 다른 컴퓨팅 노드 내의 메모리가 액세스되는 경우에 악화된다.
도 56은 시스템을 형성하는 복수의 시스템 온 칩(SOC)들(F10)의 일 실시예의 블록도이다. SOC들(F10)은 공통 집적 회로 설계의 인스턴스들일 수 있으며, 따라서 SOC들(F10) 중 하나가 더 상세히 도시된다. SOC(F10)의 다른 인스턴스들은 유사할 수 있다. SOC들(F10)은 예를 들어, 도 1에 도시된 SOC(10)의 인스턴스들일 수 있다. 예시된 실시예에서, SOC(F10)는 복수의 메모리 제어기들(F12A-F12H), 하나 이상의 프로세서 클러스터들(P 클러스터들)(F14A-F14B), 하나 이상의 그래픽 프로세싱 유닛(GPU)들(F16A-F16B), 하나 이상의 I/O 클러스터들(F18A-F18B), 및 서쪽 상호연결부(IC)(F20A) 및 동쪽 IC(F20B)를 구성하는 통신 패브릭을 포함한다. I/O 클러스터들(F18A-F18B), P 클러스터들(F14A-F14B), 및 GPU들(F16A-F16B)은 서쪽 IC(F20A) 및 동쪽 IC(F20B)에 커플링될 수 있다. 서쪽 IC(F20A)는 메모리 제어기들(F12A-F12D)에 커플링될 수 있고, 동쪽 IC(F20B)는 메모리 제어기들(F12E-F12H)에 커플링될 수 있다.
도 56에 도시된 시스템은 메모리 제어기들(F12A-F12H)에 커플링된 복수의 메모리 디바이스들(F28)을 추가로 포함한다. 도 56의 예에서, 59개의 메모리 디바이스들(F28)이 각각의 메모리 제어기(F12A-F12H)에 커플링된다. 다른 실시예들은 주어진 메모리 제어기(F12A-F12H)에 커플링된 더 많거나 더 적은 메모리 디바이스들(F28)을 가질 수 있다. 또한, 상이한 메모리 제어기들(F12A-F12H)은 상이한 수의 메모리 디바이스들(F28)을 가질 수 있다. 메모리 디바이스들(F28)은 용량 및 구성이 다를 수 있거나, 코히어런트 용량 및 구성(예컨대, 뱅크들, 뱅크 그룹들, 행 크기, 랭크들 등)을 가질 수 있다. 각각의 메모리 디바이스(F28)는 이 구현예에서 독립 채널을 통해 각자의 메모리 제어기(F12A-F12H)에 커플링될 수 있다. 다른 실시예들에서는 2개 이상의 메모리 디바이스들(F28)에 의해 공유되는 채널들이 지원될 수 있다. 일 실시예에서, 메모리 디바이스들(F28)은 칩 온 칩(chip-on-chip, CoC) 또는 패키지 온 패키지(package-on-package, PoP) 구현으로 대응하는 SOC(F10) 상에 장착될 수 있다. 다른 실시예에서, 메모리 디바이스들(F28)은 다중칩 모듈(multi-chip-module, MCM) 구현으로 SOC(F10)와 함께 패키징될 수 있다. 또 다른 실시예에서, 메모리 디바이스들(F28)은 단일 인라인 메모리 모듈(SIMM)들, 듀얼 인라인 메모리 모듈(DIMM)들 등과 같은 하나 이상의 메모리 모듈들 상에 장착될 수 있다. 일 실시예에서, 메모리 디바이스들(F28)은 동기식 DRAM(SDRAM) 및 더 구체적으로 더블 데이터 레이트(DDR) SDRAM과 같은 동적 랜덤 액세스 메모리(DRAM)일 수 있다. 일 실시예에서, 메모리 디바이스들(F28)은 모바일 DDR(mDDR) SDRAM으로도 알려진, 저전력(LP) DDR SDRAM 사양으로 구현될 수 있다.
일 실시예에서, 상호연결부들(F20A-F20B)은 또한 SOC(F10)의 다른 인스턴스에 대한 오프-SOC 인터페이스에 커플링되어, 시스템을 하나 초과의 SOC(예컨대, 하나 초과의 반도체 다이, 여기서 SOC(F10)의 주어진 인스턴스는 단일 반도체 다이 상에 구현될 수 있지만 다수의 인스턴스들이 커플링되어 시스템을 형성할 수 있음)로 확장할 수 있다. 따라서, 시스템은, SOC(F10)의 인스턴스들이 구현되는 2개 이상의 반도체 다이들로 확장가능할 수 있다. 예를 들어, 2개 이상의 반도체 다이들은 다수의 반도체 다이들의 존재가 단일 시스템 상에서 실행되는 소프트웨어에 투명한 단일 시스템으로서 구성될 수 있다. 일 실시예에서, 다이로부터 다이로의 통신에서의 지연들이 최소화될 수 있어서, 다이-투-다이 통신은 전형적으로, 멀티-다이 시스템에 대한 소프트웨어 투명성의 하나의 양태로서 다이-내(intra-die) 통신과 비교하여 상당한 부가적인 레이턴시를 발생시키지 않는다. 다른 실시예들에서, SOC(F10) 내의 통신 패브릭은 물리적으로 구별되는 상호연결부들(F20A-F20B)을 갖지 않을 수 있고, 오히려 (메모리 요청들을 송신하는) 시스템 내의 소스 하드웨어 에이전트들과 메모리 제어기들(F12A-F12H) 사이의 완전한 상호연결부(full interconnect)(예컨대, 완전한 크로스바)일 수 있다. 그러한 실시예들은, 일 실시예에서, 해싱 및 라우팅 목적들을 위해, 논리적으로 상호연결부들(F20A-F20B)의 개념을 여전히 포함할 수 있다.
메모리 제어기(F12A)는 도 56에서 더 상세하게 도시되어 있으며, 제어 회로(F24) 및 다양한 내부 버퍼(들)(F26)를 포함할 수 있다. 다른 메모리 제어기들(F12B-F12H)은 유사할 수 있다. 제어 회로(F24)는 내부 버퍼들(F26) 및 메모리 위치 구성 레지스터들(F22F)(아래에서 논의됨)에 커플링된다. 일반적으로, 제어 회로(F24)는, 메모리 디바이스들(F28)에 대한 채널들을 제어하는 것, 교정을 수행하는 것, 정확한 리프레시를 보장하는 것 등을 포함하여, 메모리 제어기(F12A)가 커플링되는 메모리 디바이스들(F28)에 대한 액세스를 제어하도록 구성될 수 있다. 제어 회로(F24)는 또한 레이턴시를 최소화하는 것, 메모리 대역폭을 최대화하는 것 등을 시도하기 위해 메모리 요청들을 스케줄링하도록 구성될 수 있다. 일 실시예에서, 메모리 제어기들(F12A-F12H)은 메모리 레이턴시를 감소시키기 위해 메모리 캐시들을 이용할 수 있고, 제어 회로(F24)는 메모리 요청들에 대해 메모리 캐시에 액세스하고 메모리 캐시 내의 히트들 및 미스들, 및 메모리 캐시로부터의 축출들을 프로세싱하도록 구성될 수 있다. 일 실시예에서, 메모리 제어기들(F12A-12H)은 그에 부착된 메모리에 대한 코히어런시(예컨대, 디렉토리-기반 코히어런시 방식)를 관리할 수 있고, 제어 회로(F24)는 코히어런시를 관리하도록 구성될 수 있다. 메모리 디바이스(F28)에 대한 채널은 디바이스에 대한 물리적 연결들뿐만 아니라, 저레벨 통신 회로부(예컨대, 물리 계층(PHY) 회로부)를 포함할 수 있다.
도 56에 예시된 바와 같이, I/O 클러스터들(F18A-F18B), P 클러스터들(F14A-F14B), GPU들(F16A-F16B), 및 메모리 제어기들(F12A-F12H)은 메모리 위치 구성(MLC) 레지스터들(참조 번호 F22A-22H, F22J-F22N, 및 F22P)을 포함한다. 일부 실시예들에서, 서쪽 및 동쪽 IC(F20A-F20B)는 또한 메모리 위치 구성 레지스터들을 포함할 수 있다. 시스템은 다수의 메모리 제어기들(F12A-F12H)(및 가능하게는 SOC(F10)의 다수의 인스턴스들에서 메모리 제어기들의 다수의 세트들)을 포함하기 때문에, 메모리 요청에 의해 액세스되는 어드레스는 디코딩(예컨대, 해싱)되어 메모리 제어기(F12A-F12H)를 결정할 수 있고, 결국 그 어드레스에 맵핑되는 특정 메모리 디바이스(F28)를 결정할 수 있다. 즉, 메모리 어드레스들은 메모리 어드레스들을 메모리 디바이스들 내의 메모리 위치들에 맵핑하는 메모리 어드레스 공간 내에서 정의될 수 있다. 메모리 어드레스 공간 내의 주어진 메모리 어드레스는 복수의 메모리 제어기들(F12A-F12H) 중 하나에 커플링되는 메모리 디바이스들(F28) 중 하나 내의 메모리 위치를 고유하게 식별한다. MLC 레지스터들(F22A-F22H, F22J-F22N, 및 F22P)은 맵핑을 설명하도록 프로그래밍될 수 있어서, MLC 레지스터들(F22A-F22H, F22J-F22N, 및 F22P)에 의해 특정된 바와 같은 메모리 어드레스 비트들을 해싱하는 것은 메모리 제어기(F12A-F12H)를 식별할 수 있고, 결국 메모리 요청이 지향되는 메모리 디바이스(F28)(및 일 실시예에서, 메모리 디바이스(F28) 내의 뱅크 그룹 및/또는 뱅크)를 식별할 수 있다.
주어진 회로에는 하나 초과의 MLC 레지스터가 있을 수 있다. 예를 들어, 메모리 제어기(F12A-F12H)를 식별하기 위해 입도 레벨(level of granularity)들의 계층구조에서 각각의 입도 레벨에 대한 MLC 레지스터가 있을 수 있다. 주어진 회로에 의해 디코딩되는 레벨들의 수는 메모리 요청을 올바른 메모리 제어기(F12A-F12H)로 라우팅하는 방법을 결정하기 위해 주어진 회로가 사용하는 입도 레벨들의 수에 의존할 수 있고, 일부 경우들에서는 올바른 메모리 제어기(F12A-F12H) 내의 훨씬 더 낮은 입도 레벨들에 의존할 수 있다. 메모리 제어기들(F12A-F12H)은, 적어도 특정 메모리 디바이스(F28)까지, 계층구조의 각각의 레벨에 대한 MLC 레지스터들을 포함할 수 있다. 일반적으로, 입도 레벨들은 복수의 메모리 제어기들(F12A-F12H) 중 적어도 2개의 메모리 제어기들의 2의 재귀적 거듭제곱으로서 보일 수 있다. 따라서, MLC 레지스터들(F22A-F22H, F22J-F22N, 및 F22P)은 동일한 일반 참조 번호를 부여받지만, MLC 레지스터들(F22A-F22H, F22J-F22N, 및 F22P)은 모두 동일한 세트의 레지스터들이지는 않을 수 있다. 그러나, 동일한 입도 레벨에 대응하는 레지스터들(F22A-F22H, F22J-F22N, 및 F22P)의 인스턴스들은 동일할 수 있고, 일관되게 프로그래밍될 수 있다. 부가적인 세부사항들이 아래에서 추가로 논의된다.
메모리 제어기들(F12A-F12H)은 SOC(F10)가 구현되는 집적 회로 다이에 걸쳐 물리적으로 분산될 수 있다. 따라서, 시스템 내의 메모리 제어기들은 다수의 집적 회로 다이에 걸쳐 물리적으로 분산되고, 집적 회로 다이 내에서 물리적으로 분산될 수 있다. 즉, 메모리 제어기들(F12A-F12H)은 SOC(F10)가 형성되는 반도체 다이의 영역에 걸쳐 분산될 수 있다. 예를 들어, 도 56에서, SOC(F10) 내에서의 메모리 제어기들(F12A-F12H)의 위치는 SOC(F10) 다이 영역 내에서의 그러한 메모리 제어기들(F12A-F12H)의 물리적 위치들을 나타낼 수 있다. 따라서, 주어진 메모리 요청이 맵핑되는 메모리 제어기(F12A-F12H)("타겟팅된 메모리 제어기")를 결정하는 것은 메모리 요청을 SOC(F10) 내의 통신 패브릭을 통해 타겟팅된 메모리 제어기로 라우팅하는 데 사용될 수 있다. 통신 패브릭은, 예를 들어, 서쪽 IC(F20A) 및 동쪽 IC(F20B)를 포함할 수 있고, 도 56에 도시되지 않은 추가적인 상호연결부를 추가로 포함할 수 있다. 다른 실시예들에서, 메모리 제어기들(F12A-F12H)은 물리적으로 분산되지 않을 수 있다. 그럼에도 불구하고, 본 명세서에 설명된 바와 같은 해싱 메커니즘은 타겟팅된 메모리 제어기(F12A-F12H)를 식별하는 데 사용될 수 있다.
I/O 클러스터들(F18A-F18B), P 클러스터들(F14A-F14B) 및 GPU들(F16A-F16B)은 메모리 어드레스들을 사용하여 메모리 제어기들(F12A-F12H)을 통해 메모리 디바이스들(F28) 내의 데이터에 액세스하도록 구성되는 하드웨어 에이전트들의 예들일 수 있다. 다른 하드웨어 에이전트들도 포함될 수 있다. 일반적으로, 하드웨어 에이전트는 메모리 요청(예컨대, 판독 또는 기록 요청)의 소스일 수 있는 하드웨어 회로일 수 있다. 요청은 MLC 레지스터들의 내용에 기초하여 하드웨어 에이전트로부터 타겟팅된 메모리 제어기로 라우팅된다.
일 실시예에서, 메모리 어드레스들은 메모리 시스템 전체에 걸쳐 페이지 내에서 데이터를 분산시키기 위해 메모리 제어기들(F12A-F12H)(및 시스템에 포함된 SOC(F10)의 다른 인스턴스들에서의 대응하는 메모리 제어기들)에 걸쳐 맵핑될 수 있다. 그러한 방식은 페이지 내의 데이터의 대부분 또는 전부에 액세스하는 애플리케이션들을 위한 메모리 제어기 및 통신 패브릭의 대역폭 사용량을 개선할 수 있다. 즉, 메모리 어드레스 공간 내의 주어진 페이지는 복수의 블록들로 분할될 수 있고, 주어진 페이지의 복수의 블록들은 시스템 내의 복수의 메모리 제어기들에 걸쳐 분산될 수 있다. 페이지는 가상 메모리 시스템에서 메모리의 할당 단위일 수 있다. 즉, 메모리가 애플리케이션 또는 다른 프로세스/스레드에 할당될 때, 메모리는 페이지 단위로 할당된다. 가상 메모리 시스템은 애플리케이션에 의해 사용되는 가상 어드레스들 및 메모리 어드레스 공간 내의 물리적 어드레스로부터의 변환을 생성하며, 이는 메모리 디바이스들(F28) 내의 위치들을 식별한다. 페이지 크기들은 실시예마다 다르다. 예를 들어, F16 킬로바이트(16 kB) 페이지 크기가 사용될 수 있다. 더 작거나 더 큰 페이지 크기들이 사용될 수 있다(예컨대, 4 kB, 8 kB, 1메가바이트(MB), 4 MB 등). 일부 실시예들에서, 다수의 페이지 크기들이 시스템에서 동시에 지원된다. 일반적으로, 페이지는 페이지-크기의 경계에 정렬된다(예컨대, 16 kB 페이지가 16 kB 경계들 상에 할당되어, 최하위 F14개 어드레스 비트들이 페이지 내에서 오프셋을 형성하고, 나머지 어드레스 비트들은 페이지를 식별한다).
주어진 페이지가 분할되는 블록들의 수는 시스템 내의 메모리 제어기들 및/또는 메모리 채널들의 수와 관련될 수 있다. 예를 들어, 블록들의 수는 메모리 제어기들의 수(또는 메모리 채널들의 수)와 동일할 수 있다. 그러한 실시예에서, 페이지 내의 모든 데이터가 액세스되는 경우, 동일한 수의 메모리 요청들이 각각의 메모리 제어기/메모리 채널로 전송될 수 있다. 다른 실시예들은 메모리 제어기들의 수의 배수, 또는 메모리 제어기들의 분수(예컨대, 2의 거듭제곱 분수)와 동일한 블록들의 수를 가져서, 페이지가 메모리 제어기들의 서브세트에 걸쳐 분산되도록 할 수 있다.
일 실시예에서, MLC 레지스터들은 페이지의 인접한 블록들을 시스템의 SOC(들)(F10) 내에서 물리적으로 서로 먼 메모리 제어기들에 맵핑하도록 프로그래밍될 수 있다. 따라서, 페이지의 연속적인 블록들이 액세스되는 액세스 패턴은, 통신 패브릭의 상이한 부분들을 이용하고 최소의 방식으로 서로 간섭하면서(또는 아마도 전혀 간섭하지 않으면서), 시스템에 걸쳐 분산될 수 있다. 예를 들어, 인접한 블록들에 대한 메모리 요청들은 통신 패브릭을 통해 상이한 경로들을 취할 수 있고, 따라서 동일한 패브릭 자원들(예컨대, 상호연결부들(F20A-F20B)의 부분들)을 소비하지 않을 것이다. 즉, 경로들은 적어도 부분적으로 비-중첩될 수 있다. 일부 경우들에서, 경로들은 완전히 비-중첩될 수 있다. 메모리 액세스들의 분산에 관한 추가 세부사항들은 도 57과 관련하여 아래에서 제공된다.
메모리 액세스들의 분산을 최대화하는 것은 전체 레이턴시를 감소시키고 대역폭 이용을 증가시킴으로써 시스템 전반의 성능을 개선할 수 있다. 부가적으로, 프로세서들에 대한 프로세스들을 스케줄링하는 데 있어서의 유연성이 달성될 수 있는데, 이는 유사한 성능이 임의의 P 클러스터(F14A-F14B) 내의 임의의 유사한 프로세서 상에서 발생할 수 있기 때문이다.
MLC 레지스터들(F22A-F22H, F22J-F22N, F22P)은 주어진 메모리 어드레스에 대해 시스템에서 각각의 입도 레벨을 선택하기 위해 해싱되는 어드레스 비트들을 독립적으로 특정할 수 있다. 예를 들어, 제1 입도 레벨은 메모리 요청이 라우팅되는 반도체 다이를 선택할 수 있다. 제2 입도 레벨은 메모리 제어기들의 세트일 수 있는 슬라이스를 선택할 수 있다(예컨대, 상위 4개의 메모리 제어기들(FF12A-12B 및 F12E-F12F)은 슬라이스를 형성할 수 있고, 하위 4개의 메모리 제어기들(F12C-F12D 및 F12F-F12G)은 다른 슬라이스를 형성할 수 있다). 다른 입도 레벨들은 "측(side)"(도 1에서 동쪽 또는 서쪽), 및 슬라이스 내의 행을 선택하는 것을 포함할 수 있다. 메모리 제어기들(F12A-F12H) 내에 추가적인 입도 레벨들이 있을 수 있어서, 최종적으로, 선택된 메모리 디바이스(F28)(및 아마도, 일 실시예에서, 디바이스(F28) 내의 뱅크 그룹 및 뱅크)를 생성할 수 있다. 다양한 실시예들에서 임의의 수의 입도 레벨들이 지원될 수 있다. 예를 들어, 2개 이상의 다이가 포함되는 경우, 다이 레벨보다 더 거친 하나 이상의 입도 레벨들이 있을 수 있으며, 여기서 다이의 그룹들이 선택된다.
각각의 입도 레벨에 대한 어드레스 비트들의 독립적인 사양은 시스템에서 상당한 유연성을 제공할 수 있다. 부가적으로, SOC(F10) 자체의 설계에 대한 변화들은 MLC 레지스터들에서 상이한 프로그래밍을 사용함으로써 관리될 수 있고, 따라서 메모리 시스템 및/또는 상호연결부 내의 하드웨어는 메모리 디바이스들에 대한 어드레스들의 상이한 맵핑을 수용하기 위해 변화할 필요가 없다. 또한, MLC 레지스터들에서의 프로그래밍가능성은, SOC(들)(F10)를 포함하는 주어진 제품에서 메모리 디바이스들(F28)이 줄도록(depopulated) 하여, 그 제품에서 메모리 디바이스들(F28)의 전체(full complement)가 요구되지 않는 경우 비용 및 전력 소비를 감소시킬 수 있다.
일 실시예에서, 각각의 입도 레벨은 이진 결정이다: 해시로부터의 이진 0의 결과는 그 레벨에서 하나의 결과를 선택하고, 해시로부터의 이진 1의 결과는 다른 결과를 선택한다. 해시들은 MLC 레지스터들의 프로그래밍에 의해 레벨들에 대해 선택된 입력 비트들에 대한 임의의 조합 논리 연산일 수 있다. 일 실시예에서, 해시는, 어드레스 비트들이 서로 배타적-논리합(exclusive-OR)되어 이진 출력을 생성하는, 배타적 논리합 감소일 수 있다. 다른 실시예들은 둘 초과의 결과들 중에서 선택하기 위해 다중 비트 출력 값을 생성할 수 있다.
주어진 메모리 제어기(F12A-F12H) 내의 내부 버퍼들(F26)은 상당한 수의 메모리 요청들을 저장하도록 구성될 수 있다.
내부 버퍼들(F26)은 주어진 메모리 제어기(F12A-F12H)에서 프로세싱되는 다양한 메모리 요청들의 상태뿐만 아니라, 요청들이 프로세싱될 때 요청들이 통과하여 흐를 수 있는 다양한 파이프라인 스테이지들을 추적하는 트랜잭션 테이블들과 같은 정적 버퍼들을 포함할 수 있다. 요청에 의해 액세스되는 메모리 어드레스는 요청을 기술하는 데이터의 상당 부분일 수 있고, 따라서 요청들을 저장하고 요청들을 주어진 메모리 제어기(F12A-F12H) 내에서 다양한 자원들을 통해 이동시키는 데 있어서 전력 소비의 상당한 컴포넌트일 수 있다. 일 실시예에서, 메모리 제어기들(F12A-F12H)은 타겟팅된 메모리 제어기를 결정하기 위해 사용되는 (각각의 입도 레벨에 대응하는) 어드레스 비트들의 각각의 세트로부터 어드레스 비트를 드롭(drop)하도록 구성될 수 있다. 일 실시예에서, 나머지 어드레스 비트들은, 요청이 타겟팅된 메모리 제어기에 대한 것이라는 사실과 함께, 필요한 경우 드롭된 어드레스 비트들을 복구하는 데 사용될 수 있다. 일부 실시예들에서, 드롭된 비트는 다른 입도 레벨에 대응하는 임의의 다른 해시에 포함되지 않는 어드레스 비트일 수 있다. 다른 레벨들로부터의 드롭된 비트의 배제는 드롭 비트들의 복구를 병렬로 허용할 수 있는데, 이는 동작들이 독립적이기 때문이다. 주어진 드롭된 비트가 다른 레벨들로부터 배제되지 않는 경우, 그것은 먼저 복구될 수 있고, 이어서 다른 드롭된 비트들을 복구하는 데 사용될 수 있다. 따라서, 배제는 복구를 위한 최적화일 수 있다. 다른 실시예들은 원래 어드레스의 복구를 요구하지 않을 수 있고, 따라서 드롭된 비트들은 각각의 해시에 고유할 필요가 없거나, 또는 배제가 구현되지 않는 경우 직렬 방식으로 비트들을 복구할 수 있다. (드롭된 비트들이 없는) 나머지 어드레스 비트들은 프로세싱을 위해 메모리 제어기의 내부에서 사용될 수 있는 압축된 파이프 어드레스를 형성할 수 있다. 드롭된 어드레스 비트들은 필요하지 않는데, 그 이유는 주어진 메모리 제어기(F12A-F12H)에 커플링된 메모리 디바이스들(F28) 내의 메모리의 양이, 압축된 파이프 어드레스를 사용하여 고유하게 어드레싱될 수 있기 때문이다. MLC 레지스터들(F22A-F22H, F22J-FF22N, 및 22P)은, 일 실시예에서, 드롭 비트들을 식별하도록 프로그래밍가능한 레지스터들을 포함할 수 있다.
도 56의 SOC(F10)는 특정 수의 메모리 제어기들(F12A-F12H), P 클러스터들(F14A-F14B), GPU들(F16A-F16B), 및 I/O 클러스터들(F18A-F18B)을 포함한다. 일반적으로, 다양한 실시예들은, 원하는 대로, 임의의 수의 메모리 제어기들(F12A-F12H), P 클러스터들(F14A-F14B), GPU들(F16A-F16B), 및 I/O 클러스터들(F18A-F18B)을 포함할 수 있다. 위에서 언급된 바와 같이, P 클러스터들(F14A-F14B), GPU들(F16A-F16B), 및 I/O 클러스터들(F18A-F18B)은 일반적으로 각각의 컴포넌트에 대해 본 명세서에 설명된 동작을 구현하도록 구성된 하드웨어 회로들을 포함한다. 유사하게, 메모리 제어기들(F12A-12H)은 일반적으로 각각의 컴포넌트에 대해 본 명세서에 설명된 동작을 구현하기 위한 하드웨어 회로들(메모리 제어기 회로들)을 포함한다. 상호연결부(F20A-F20B) 및 다른 통신 패브릭은 일반적으로 다른 컴포넌트들 사이에서 통신들(예컨대, 메모리 요청들)을 수송하기 위한 회로들을 포함한다. 상호연결부(F20A-F20B)는 포인트 투 포인트 인터페이스들, 공유된 버스 인터페이스들, 및/또는 하나 또는 양쪽 모두의 인터페이스들의 계층구조들을 포함할 수 있다.
패브릭은 회선 교환, 패킷 교환 등일 수 있다.
도 57은 일 실시예에 대한, SOC 다이(들) 상의 복수의 메모리 제어기들 및 물리적/논리적 배열의 일 실시예를 예시하는 블록도이다. 메모리 제어기들(F12A-F12H)은 도 57에서 다이 0 및 다이 1로 예시된(예컨대, 짧은 점선(30)으로 분리된) SOC(F10)의 두 인스턴스들에 대해 예시된다. 다이 0은 점선(30) 위에 예시된 부분일 수 있고, 다이 1은 점선(30) 아래의 부분일 수 있다. 주어진 다이 상의 메모리 제어기들(F12A-F12H)은 메모리 제어기들(F12A-F12H)의 물리적 위치에 기초하여 슬라이스들로 분할될 수 있다. 예를 들어, 도 57에서, 슬라이스 0은 다이 0 또는 다이 1의 하나의 반부 상에 물리적으로 위치된, 메모리 제어기들(F12A-F12B 및 F12E-F12F)을 포함할 수 있다. 슬라이스 1은 다이 0 또는 다이 1의 다른 반부 상에 물리적으로 위치된, 메모리 제어기들(F12C-F12D 및 F12G-F12H)을 포함할 수 있다. 다이 상의 슬라이스는 도 57에서 파선들(32)에 의해 범위가 정해진다. 슬라이스들 내에서, 메모리 제어기들(F12A-F12H)은 슬라이스 내의 물리적 위치에 기초하여 행들로 분할될 수 있다. 예를 들어, 다이 0의 슬라이스 0은 도 56에서 두 행들을 포함하도록 도시되며, 행 0에서 점선(34) 위의 메모리 제어기들(F12A, F12E)은 슬라이스 0에 의해 점유된 영역의 하나의 반부 상에 물리적으로 위치된다. 슬라이스 1의 행 1의 메모리 제어기들(F12B, F12F)은, 슬라이스 0에 의해 점유된 영역의 다른 반부 상에서 점선(34) 아래에, 슬라이스 0에 의해 점유된 영역의 다른 반부 상에서 물리적으로 위치된다. 다른 슬라이스들은 유사하게 행들로 분할될 수 있다. 부가적으로, 주어진 메모리 제어기(F12A-F12H)는 서쪽 상호연결부(F20A) 또는 동쪽 상호연결부(F20B) 중 어느 하나를 통해 도달가능할 수 있다.
따라서, 메모리 어드레스가 맵핑되는 주어진 다이 0 또는 1 상의 주어진 메모리 제어기(F12A-F12H)를 식별하기 위해, 메모리 어드레스는 다수의 입도 레벨들에서 해싱될 수 있다. 이 실시예에서, 레벨들은 다이 레벨, 슬라이스 레벨, 행 레벨, 및 측 레벨(동쪽 또는 서쪽)을 포함할 수 있다. 다이 레벨은 복수의 집적 회로 다이 중 어느 것이 주어진 메모리 제어기를 포함하는지를 특정할 수 있다. 슬라이스 레벨은 다이 내의 복수의 슬라이스들 중 어느 것이 주어진 메모리 제어기를 포함하는지를 특정할 수 있으며, 여기서 다이 상의 복수의 메모리 제어기들은 주어진 집적 회로 다이 상의 물리적 위치에 기초하여 복수의 슬라이스들로 논리적으로 분할되고, 주어진 슬라이스는 다이 내의 복수의 메모리 제어기들 중 적어도 2개의 메모리 제어기들을 포함한다. 주어진 슬라이스 내에서, 메모리 제어기들은 다이 상의 물리적 위치에 기초하여, 더 구체적으로는 주어진 슬라이스 내에서, 복수의 행들로 논리적으로 분할될 수 있다. 행 레벨은 복수의 행들 중 어느 것이 주어진 메모리 제어기를 포함하는지를 특정할 수 있다. 행은, 다시 다이 내의 물리적 위치에 기초하여, 더 구체적으로는 주어진 행 내에서, 복수의 측들로 분할될 수 있다. 측 레벨은 주어진 행의 어느 측이 주어진 메모리 제어기를 포함하는지를 특정할 수 있다.
다른 실시예들은 메모리 제어기들(12A-12H)의 수, 다이의 수 등에 기초하여 더 많은 또는 더 적은 레벨들을 포함할 수 있다. 예를 들어, 2개 초과의 다이를 포함하는 실시예는 다이를 선택하기 위한 다수의 입도 레벨들을 포함할 수 있다(예컨대, 다이 그룹들은 4개의 다이 구현예에서 SOC들(10)의 쌍들을 그룹화하는 데 사용될 수 있고, 다이 레벨은 선택된 쌍 내의 다이 중에서 선택할 수 있다). 유사하게, 다이당 8개 대신 4개의 메모리 제어기들을 포함하는 구현예는 슬라이스 또는 행 레벨들 중 하나를 제거할 수 있다. 다중 다이가 아닌 단일 다이를 포함하는 구현예는 다이 레벨을 제거할 수 있다.
입도 레벨들 각각에서, 하나의 또는 다른 레벨을 선택하기 위해 어드레스 비트들의 서브세트의 해시에 기초하여 이진 결정이 이루어진다. 따라서, 해시는 어드레스 비트들에서 논리적으로 연산하여 이진 출력(하나의 비트, 0 또는 1)을 생성할 수 있다. 임의의 논리 함수가 해시에 사용될 수 있다. 일 실시예에서, 예를 들어, 해시가 어드레스 비트들의 서브세트를 함께 배타적-논리합(XOR)하여 결과를 생성하는, XOR 감소가 사용될 수 있다. XOR 감소는 또한 해시의 가역성을 제공할 수 있다. 가역성은 드롭된 비트들의 복구를 허용할 수 있지만, 이진 결과를 드롭되지 않은 어드레스 비트들과 XOR할 수 있다(레벨당 하나의 드롭된 비트). 특히, 일 실시예에서, 드롭된 어드레스 비트는 다른 레벨들에 대해 사용된 어드레스 비트들의 서브세트들로부터 배제될 수 있다. 해시 내의 다른 비트들은 해시들 사이에서 공유될 수 있지만, 드롭될 비트는 그렇지 않다. 이 실시예에서 XOR 감소가 사용되지만, 다른 실시예들은 해시로서 임의의 논리적으로 가역적인 부울 연산을 구현할 수 있다.
도 58은 특정 메모리 어드레스를 서비스하는 메모리 제어기(F12A-F12H)(및 다이)(즉, 특정 메모리 어드레스가 맵핑되는 메모리 제어기)를 결정하기 위한 이진 결정 트리의 일 실시예의 블록도이다. 결정 트리는 다이(도면 부호 F40), 다이 상의 슬라이스(도면 부호 F42), 슬라이스 내의 행(도면 부호 F44), 및 행 내의 측(도면 부호 F46)을 결정하는 것을 포함할 수 있다. 일 실시예에서, 메모리 제어기 내에서 메모리 요청의 프로세싱을 안내하기 위한 추가적인 이진 결정들이 있을 수 있다. 예를 들어, 도 58의 실시예는 평면 레벨(F48) 및 파이프 레벨(F50)을 포함할 수 있다. 내부 입도 레벨들은 메모리 요청을, 메모리 요청에 의해 영향받는 데이터를 저장하는 특정 메모리 디바이스(F28)에 맵핑할 수 있다. 즉, 가장 정밀한 입도 레벨은 특정 메모리 디바이스(F28)에 맵핑하는 레벨일 수 있다. 메모리 평면들은 독립적이어서, 다수의 메모리 요청들이 병렬로 진행되게 할 수 있다. 부가적으로, 메모리 제어기에 포함된 다양한 구조들(예컨대, 메모리 디바이스들(F28)에서 이전에 액세스된 데이터를 캐싱하는 메모리 캐시, 중복 태그들 또는 디렉토리와 같은 코히어런시 제어 하드웨어, 다양한 버퍼들 및 큐들 등)은 평면들 사이에서 분할될 수 있고, 따라서 메모리 구조들은 설계하기에 더 작고 더 용이하여 주어진 동작 주파수에서 타이밍을 충족할 수 있는 등일 수 있다.
따라서, 주어진 크기의 하드웨어 구조들에 대한 더 높은 달성가능한 클록 주파수 및 병렬 프로세싱 둘 모두를 통해 성능은 증가될 수 있다. 다른 실시예들에서, 메모리 제어기 내에 추가적인 내부 입도 레벨들이 또한 있을 수 있다.
도 58에 예시된 이진 결정 트리는 다이 레벨(F40), 슬라이스 레벨(F42), 행 레벨(F44), 측 레벨(F46), 평면 레벨(F48), 및 파이프(F50)의 결정들이 직렬로 이루어짐을 암시하고자 하는 것이 아니다. 결정들을 수행하기 위한 로직은 병렬로 동작하여, 어드레스 비트들의 세트들을 선택하고 해시들을 수행하여 결과적인 이진 결정들을 생성할 수 있다.
도 57로 돌아가면, 메모리 제어기들(F12A-F12H) 및 다이들 0 및 1에 대한 어드레스 맵핑의 프로그래밍가능성은 물리적으로 먼 메모리 제어기들(F12A-F12H) 사이의 연속적인 어드레스들의 분산을 제공할 수 있다. 즉, 소스가 메모리의 페이지의 연속적인 어드레스들에 액세스하고 있는 경우, 예를 들어, 메모리 요청들은 (소정 어드레스 입도에서) 상이한 메모리 제어기들에 걸쳐 분산될 수 있다. 예를 들어, 연속적인 캐시 블록들(예컨대, 정렬된 64바이트 또는 128바이트 블록들)은 상이한 메모리 제어기들(F12A-F12H)에 맵핑될 수 있다. 더 낮은 입도 맵핑들이 또한 사용될 수 있다(예컨대, 256바이트, 512바이트, 또는 1킬로바이트 블록들이 상이한 메모리 제어기들에 맵핑될 수 있음). 즉, 동일한 블록 내의 데이터에 액세스하는 다수의 연속적인 메모리 어드레스들이 동일한 메모리 제어기로 라우팅될 수 있고, 이어서 다음 다수의 연속적인 메모리 어드레스들이 상이한 메모리 제어기로 라우팅될 수 있다.
연속적인 블록들을 물리적으로 분산된 메모리 제어기들(F12A-F12H)에 맵핑하는 것은 성능 이점들을 가질 수 있다. 예를 들어, 메모리 제어기들(F12A-F12H)은 서로 독립적이기 때문에, 메모리 제어기들(F12A-F12H)의 세트 전체에서 이용가능한 대역폭은 전체 페이지가 액세스되는 경우 더 충분히 활용될 수 있다. 부가적으로, 일부 실시예들에서, 통신 패브릭 내의 메모리 요청들의 루트는 부분적으로 비-중첩되거나 완전히 비-중첩될 수 있다. 즉, 하나의 메모리 요청에 대한 루트의 일부인 통신 패브릭의 적어도 하나의 세그먼트는 다른 메모리 요청에 대한 루트의 일부가 아닐 수 있고, 부분적으로 비-중첩된 루트의 경우 그 반대도 마찬가지이다. 완전히 비-중첩된 루트들은 패브릭의 구별되는 완전한 별개의 부분들을 사용할 수 있다(예컨대, 어떠한 세그먼트들도 동일할 수 없음). 따라서, 통신 패브릭에서의 트래픽은 확산될 수 있고, 트래픽이 그렇지 않았다면 간섭할 수 있는 만큼 서로 간섭하지 않을 수 있다.
따라서, MLC 레지스터들(F22A-F22H, F22J-F22N, 및 F22P)은 회로부로 하여금, 제1 어드레스 및 제2 어드레스가 제2 레벨의 입도에서 인접한 어드레스들일 때, 제1 어드레스를 갖는 제1 메모리 요청을 복수의 메모리 제어기들 중 제1 메모리 제어기로 라우팅하게 하고, 제2 어드레스를 갖는 제2 메모리 요청을 제1 메모리 제어기로부터 물리적으로 떨어져 있는, 복수의 메모리 제어기들 중 제2 메모리 제어기로 라우팅하게 하는 데이터로 프로그래밍가능할 수 있다.
일 실시예에서, 통신 패브릭을 통한 제1 메모리 요청의 제1 루트 및 통신 패브릭을 통한 제2 메모리 요청의 제2 루트는 완전히 비-중첩된다. 다른 경우들에서, 제1 및 제2 루트들은 부분적으로 비-중첩될 수 있다. 하나 이상의 레지스터들은, 통신 패브릭으로 하여금 연속적인 어드레스들에 대한 복수의 메모리 요청들을 물리적으로 먼 메모리 제어기들에 걸쳐 분산시키는 패턴으로 복수의 메모리 요청들을 복수의 메모리 제어기들 중 상이한 메모리 제어기들로 라우팅하게 하는 데이터로 프로그래밍가능할 수 있다.
예를 들어, 도 57에서, 다이 0 및 다이 1 상의 메모리 제어기들(F12A-F12H)은 MC 0 내지 MC 15로 라벨링된다. 페이지 내의 어드레스 0으로 시작하여, MLC 레지스터들(F22A-F22H, F22J-F22N, 및 F22P)의 프로그래밍에서 정의된 입도 레벨에서의 연속적인 어드레스들은 먼저 MC0(다이 0 내의 메모리 제어기(F12A)), 이어서 MC1(다이 1 내의 메모리 제어기(12G)), MC2(다이 1 내의 메모리 제어기(F12D)), MC3(다이 0 내의 메모리 제어기(F12F)), MC4(다이 1 내의 메모리 제어기(F12A)), MC5(다이 0 내의 메모리 제어기(F12G)), MC6(다이 0 내의 메모리 제어기(F12D)), MC7(다이 1 내의 메모리 제어기(F12F)), MC8(다이 0 내의 메모리 제어기(F12C)), MC9(다이 1 내의 메모리 제어기(F12E)), MC10(다이 1 내의 메모리 제어기(F12B)), MC11(다이 0 내의 메모리 제어기(F12H)), MC12(다이 1 내의 메모리 제어기(F12C)), MC13(다이 0 내의 메모리 제어기(F12E)), MC14(다이 0 내의 메모리 제어기(F12B)), 및 이어서 MC15(다이 1 내의 메모리 제어기(F12H))에 액세스할 수 있다. 제2 입도 레벨이 페이지 크기의 1/Nth보다 작은 경우 - 여기서 N은 시스템 내의 메모리 제어기들의 수임(예컨대, 이 실시예에서, F16) -, MC15 이후의 다음 연속적인 액세스는 MC0으로 복귀할 수 있다. 더 랜덤한 액세스 패턴은 메모리 요청들이 물리적으로 가까운 메모리 제어기들로 라우팅하는 것을 야기할 수 있지만, 더 일반적인 규칙적인 액세스 패턴들(하나 이상의 메모리 제어기가 위의 순서에서 스킵되는 스트라이드(stride)가 수반되는 경우에도)은 시스템에서 잘 분산될 수 있다.
도 59는 복수의 메모리 위치 구성 레지스터들(F60, F62)의 일 실시예를 예시하는 블록도이다. 일반적으로, 주어진 하드웨어 에이전트에서 레지스터들(F60)은 복수의 입도 레벨들 중 하나 이상에서 어느 어드레스 비트들이 해시에 포함되는지를 식별하는 데이터로 프로그래밍가능할 수 있다. 예시된 실시예에서, 레지스터들(F60)은 이전에-설명된 레벨들에 대응하는 다이 레지스터, 슬라이스 레지스터, 행 레지스터, 측 레지스터, 평면 레지스터, 및 파이프 레지스터뿐만 아니라, 데이터를 저장하는 메모리 디바이스(F28) 내의 뱅크 그룹(BankG) 및 뱅크를 정의하는 뱅크 그룹 및 뱅크 레지스터를 포함할 수 있다(DRAM 메모리 디바이스들이 뱅크 그룹들 및 뱅크들 둘 모두를 갖는 실시예의 경우).
도 59에서 각각의 입도 레벨에 대해 별개의 레지스터들(F60)이 도시되지만, 다른 실시예들은, 원하는 대로, 단일 레지스터 내의 필드들로서 2개 이상의 입도 레벨들을 조합할 수 있다는 것에 유의한다.
다이 레지스터는 일 실시예에 대해 분해도로 도시되고, 다른 레지스터들(F60)은 유사할 수 있다. 예시된 실시예에서, 다이 레지스터는 반전 필드(F66), 및 마스크 필드(F68)를 포함할 수 있다. 반전 필드(F66)는 반전을 나타내는 설정 상태 및 반전 없음을 나타내는 소거 상태를 갖는 비트일 수 있다(또는 그 반대일 수 있거나, 또는 다중 비트 값이 사용될 수 있음). 마스크 필드(F68)는 각자의 어드레스 비트들에 대응하는 비트들의 필드일 수 있다. 그 입도 레벨에 대해, 마스크 비트에서의 설정 상태는 각자의 어드레스 비트가 해시에 포함됨을 나타낼 수 있고, 소거 상태는 각자의 어드레스 비트가 해시로부터 배제됨을 나타낼 수 있다(또는 그 반대도 마찬가지임).
반전 필드(F66)는 선택된 어드레스 비트들의 해시의 결과가 반전되어야 함을 특정하는 데 사용될 수 있다. 반전은 메모리 제어기의 결정에서 추가적인 유연성을 허용할 수 있다. 예를 들어, 모두 제로의 마스크를 프로그래밍하는 것은 임의의 어드레스에 대해 그 입도 레벨에서 이진 0을 야기하여, 매번 동일한 방향으로 결정을 강제한다. 임의의 어드레스에 대해 주어진 입도 레벨에서 이진 1이 요구되는 경우, 마스크는 모두 제로로 프로그래밍될 수 있고, 반전 비트는 설정될 수 있다.
MLC 레지스터들(F22A-F22H, F22J-F22N, 및 F22P) 각각은, 하드웨어 에이전트 및 그 하드웨어 에이전트에 의해 메모리 요청을 라우팅하는 데 사용되는 입도 레벨들에 따라, 레지스터들(F60)의 서브세트 또는 모두를 포함할 수 있다. 일반적으로, 주어진 하드웨어 에이전트는, 원하는 경우, 뱅크 레벨까지(도 59에서 "뱅크"로 라벨링된 중괄호(curly brace)), 입도 레벨들 모두를 채용할 수 있다. 그러나, 일부 하드웨어 에이전트들은 그러한 많은 입도 레벨들을 구현할 필요가 없다. 예를 들어, 하드웨어 에이전트는 다이, 슬라이스, 행, 및 측 입도 레벨들을 채용하여, 메모리 요청들을 타겟팅된 다이 상의 타겟팅된 메모리 제어기(F12A-F12H)(도 59에서 "MC"로 라벨링된 중괄호)로 전달할 수 있다. 메모리 제어기(F12A-F12H)는 나머지 해싱 레벨들을 처리할 수 있다. 다른 하드웨어 에이전트는, 각각의 평면에 대해 하나씩, 주어진 메모리 제어기(F12A-F12H)로의 2개의 루트들을 가질 수 있다. 따라서, 그러한 하드웨어 에이전트는 다이, 슬라이스, 행, 측, 및 평면 레지스터들(도 59에서"평면"으로 라벨링된 중괄호)을 채용할 수 있다. 또 다른 하드웨어 에이전트는 다이, 슬라이스, 행, 측, 및 평면 입도 레벨들뿐만 아니라, 원하는 채널을 식별하는 파이프 레벨(도 59에서 "채널"로 라벨링된 중괄호)을 포함할 수 있다. 따라서, 제1 하드웨어 에이전트는 복수의 입도 레벨들 중 제1 수에 대해 프로그래밍가능할 수 있고, 제2 하드웨어 에이전트는 복수의 입도 레벨들 중 제2 수에 대해 프로그래밍가능할 수 있으며, 여기서 제2 수는 제1 수와 상이하다.
다른 실시예들에서, 뱅크 그룹, 뱅크, 및 다른 디바이스내(intra-device) 입도 레벨들은 다른 입도 레벨들과 상이하게 특정될 수 있고, 따라서 레지스터들(F60)에 포함되지 않는 별도로-정의된 레지스터들일 수 있다. 또 다른 실시예들에서, 뱅크 그룹, 뱅크, 및 다른 디바이스-내 입도 레벨들은 하드웨어에서 고정될 수 있다.
MLC 레지스터들(F22A- F22H, F22J-F22N, 및 F22P)의 일부 세트들에 포함될 수 있는 레지스터들의 다른 세트는 도 59에 도시된 드롭 레지스터들(F62)이다. 특히, 일 실시예에서, 드롭 레지스터들(F62)은 메모리 제어기들(F12A-F12H)에서 MLC 레지스터들(F22F-F22H 및 F22J-F22N)에 포함될 수 있다. 드롭 레지스터들(F62)은 각각의 입도 레벨에 대한 레지스터를 포함할 수 있고, 타겟팅된 메모리 제어기(F12A-F12H)에 의해 드롭될 그 입도 레벨에 대응하는 어드레스 비트들의 서브세트 내의 적어도 하나의 어드레스 비트를 식별하도록 프로그래밍가능할 수 있다. 특정된 비트는 그 입도 레벨의 해시에 포함된 비트로서 대응하는 레지스터(F60)에서 특정된 비트들 중 하나이다. 일 실시예에서, 드롭된 어드레스 비트는 그 입도 레벨에 대한 해시에 배타적으로 포함될 수 있다(예컨대, 드롭된 어드레스 비트는 레지스터들(F60)에서 임의의 다른 입도 레벨에서 특정되지 않는다). 주어진 해시에 포함된 다른 비트들은 다른 입도 레벨들에서 공유될 수 있지만, 드롭된 비트는 주어진 입도 레벨에 고유할 수 있다. 드롭 레지스터들(F62)은 드롭될 어드레스 비트를 나타내는 임의의 방식으로 프로그래밍될 수 있다(예컨대, 비트 번호는 16진수로서 특정될 수 있거나, 도 59에 도시된 바와 같이 비트 마스크가 사용될 수 있다). 비트 마스크는 각각의 어드레스 비트에 대한 비트(또는 일부 어드레스 비트들이 드롭에 적격하지 않은 경우, 각각의 선택가능한 어드레스 비트)를 포함할 수 있다. 비트 마스크는 선택된 드롭 비트를 나타낼 수 있는, 단 하나의 세트 비트가(set bit)가 있는, "원 핫(one hot)" 마스크일 수 있다. 다른 실시예들에서, 단일 드롭 레지스터(F62) 내의 단일 비트 마스크는 각각의 입도 레벨에 대한 드롭 비트를 특정할 수 있고, 따라서 하나의 핫 마스크가 아닐 수 있다.
메모리 제어기는 드롭 비트들을 특정하기 위해 드롭 레지스터들(F62)을 통해 프로그래밍될 수 있다. 메모리 제어기(그리고 보다 구체적으로, 제어 회로(F24)는 내부 버퍼들(F26) 내의 메모리 제어기에서 내부적으로 사용하기 위해 각각의 메모리 요청에 대한 내부 어드레스(위에서 언급된 "압축된 파이프 어드레스", 또는 더 간단히 "압축된 어드레스")를 생성하고 메모리 디바이스(F28)를 어드레싱하도록 구성될 수 있다. 압축된 파이프 어드레스는 특정된 어드레스 비트들 중 일부 또는 전부를 드롭하고 나머지 어드레스 비트들을 함께 시프팅함으로써 생성될 수 있다.
이전에 언급된 바와 같이, 어드레스의 복사본들을 갖는 다수의 내부 버퍼들은 불필요한 어드레스 비트들을 제거함으로써 전력을 절약할 수 있다. 부가적으로, 가역적 해시 함수를 이용해, 드롭된 비트들이 복구되어 전체 어드레스를 복구할 수 있다. 주어진 메모리 제어기(F12A-F12H)에서의 메모리 요청의 존재는 주어진 입도 레벨에서 해시의 결과를 제공하고, 그 결과를 그 입도 레벨에 포함된 다른 어드레스 비트들과 해싱하는 것은 드롭된 어드레스 비트를 초래한다.
전체 어드레스의 복구는, 그것이 요청에 대한 응답을 위해, 코히어런시 이유들에 대한 스누프들 등을 위해 필요한 경우, 유용할 수 있다.
이제 도 60을 참조하면, 부트/전력 투입 동안 SOC들의 일 실시예의 동작을 예시하는 흐름도가 도시된다. 예를 들어, 도 60에 예시된 동작은 프로세서에 의해 실행되는 명령어들(예컨대, 운영 체제의 실행을 위해 시스템을 초기화하기 위해 실행되는 낮은 레벨 부트 코드)에 의해 수행될 수 있다. 대안적으로, 도 60에 도시된 동작의 전부 또는 일부는 부트 동안 하드웨어 회로부에 의해 수행될 수 있다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 SOC들(F10) 내의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다.
부트 코드는 SOC 구성(예컨대, SOC(F10) 인스턴스들을 포함하는 하나 이상의 칩들, 더 적은 메모리 제어기들(F12A-F12H)을 포함하는 부분 SOC 또는 시스템에 의해 지원되는 복수의 SOC 설계들 중 하나와 같은 SOC 설계 차이들, 각각의 메모리 제어기(F12A-F12H)에 커플링된 메모리 디바이스들(F28) 등)을 식별할 수 있다(블록(F70)). 구성을 식별하는 것은 일반적으로 메모리 요청들에 대한 목적지들의 수(예컨대, 시스템 내의 메모리 제어기들(F12A-F12H)의 수, 각각의 메모리 제어기(F12A-F12H) 내의 평면들의 수, 사용 동안 인에이블될 메모리 제어기들(F12A-F12H)의 수 등)를 결정하는 데 있어서의 활동(exercise)일 수 있다. 주어진 메모리 제어기(F12A-F12H)는 사용 동안 이용불가능할 수 있는데, 예컨대 메모리 디바이스들(F28)이 주어진 메모리 제어기(F12A-F12H)에서 채워지지 않거나 메모리 디바이스들(F28)에 하드웨어 실패가 있는 경우에 이용불가능할 수 있다. 다른 경우들에서, 주어진 메모리 제어기(F12A-F12H)는 소정 테스트 모드들 또는 진단 모드들에서 이용불가능할 수 있다. 구성을 식별하는 것은 또한 이용가능한 메모리의 총량(예컨대, 각각의 메모리 제어기(F12A-F12H)에 커플링된 메모리 디바이스들(F28)의 수 및 메모리 디바이스들(F28)의 용량)을 결정하는 것을 포함할 수 있다.
이러한 결정들은 각각의 메모리 제어기(F12A-F12H)에 맵핑될 페이지 내의 인접한 블록의 크기에 영향을 미칠 수 있으며, 이는 메모리 제어기들(F12A-F12H)(및, 하나 초과의 인스턴스가 제공될 때, SOC(F10) 인스턴스들) 사이에서 페이지 내에서 메모리 요청들을 확산시키는 것과, 요청들을 동일한 어드레스들로 그룹화하는 것으로부터 얻어질 수 있는 효율들 사이의 트레이드오프를 나타낸다. 따라서, 부트 코드는 각각의 메모리 제어기(F12A-F12H)에 맵핑될 블록 크기를 결정할 수 있다(블록(F72)). 다른 모드들에서, 메모리 제어기들(F12A-F12H)에 대한 어드레스들의 선형 맵핑이 사용될 수 있거나(예컨대, 메모리 제어기(F12A-F12H) 내의 메모리 디바이스들(F28) 전체를 메모리 어드레스 공간 내의 어드레스들의 인접 블록에 맵핑함), 또는 하나 이상의 입도 레벨들에서 인터리빙되는 것과 다른 입도 레벨들에서 선형인 것의 하이브리드가 사용될 수 있다.
부트 코드는 메모리 제어기들(F12A-F12H)에 대한 어드레스들의 원하는 맵핑을 제공하기 위해 MLC 레지스터들(F22A-F22H, F22J-F22N, 및 F22P)을 프로그래밍하는 방법을 결정할 수 있다(블록(F74)). 예를 들어, 마스크 레지스터들(F60)은 각각의 입도 레벨에서 어드레스 비트들을 선택하도록 프로그래밍될 수 있고, 드롭 비트 레지스터들(F62)은 각각의 입도 레벨에 대해 드롭 비트를 선택하도록 프로그래밍될 수 있다.
도 61은 소스 컴포넌트로부터, 메모리 요청에 대한 식별된 메모리 제어기(F12A-F12H)로 그 메모리 요청에 대한 루트를 결정하기 위한 다양한 SOC 컴포넌트들의 동작을 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 SOC들(F10) 내의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다.
컴포넌트는 다이, 슬라이스, 행, 측 등과 같은 다양한 입도 레벨들을 결정하기 위해 메모리 요청의 어드레스에 레지스터들(F60)을 적용할 수 있다(블록(F76)). 입도 레벨들에서의 결과들에 기초하여, 컴포넌트는 메모리 요청을 식별된 메모리 제어기(F12A-F12H)로 패브릭을 통해 라우팅할 수 있다(블록(F78)).
도 62는 메모리 요청에 응답하는 메모리 제어기(F12A-F12H)의 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 SOC들(F10) 내의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다.
메모리 제어기(F12A-F12H)는 평면, 파이프, 뱅크 그룹, 및 뱅크 마스크 레지스터들(F60)을 사용하여 메모리 요청에 대한 평면, 파이프, 뱅크 그룹, 및 뱅크를 식별할 수 있다(블록(F80)). 예를 들어, 메모리 제어기(F12A-F12H)는 대응하는 레지스터(F60)로부터의 마스크를 어드레스와 논리적으로 AND하고, 비트들을 논리적으로 조합하고(예컨대, XOR 감소), 표시된 경우 반전시킬 수 있다. 메모리 제어기(F12A-F12H)는 드롭 레지스터들(F62)로부터의 드롭 마스크들을 사용하여 각각의 입도 레벨(예컨대, 다이, 슬라이스, 행, 측, 평면, 파이프, 뱅크 그룹, 및 뱅크)에 의해 특정된 어드레스 비트들을 드롭할 수 있고, 나머지 어드레스 비트들을 함께 시프팅하여 압축된 파이프 어드레스를 형성할 수 있다(블록(F82)). 예를 들어, 메모리 제어기(F12A-F12H)는 드롭 마스크들의 역의 논리적 AND로 어드레스를 마스킹할 수 있고, 나머지 비트들을 함께 시프팅할 수 있다. 대안적으로, 메모리 제어기(F12A-F12H)는 단순히 어드레스 비트들을 함께 시프팅하여, 식별된 비트들을 자연스럽게 드롭할 수 있다. 메모리 제어기(F12A-F12H)는 특정된 메모리 요청(예컨대, 판독 또는 기록)을 수행할 수 있고(블록(F84)), (예컨대, 판독 데이터로, 또는 기록이 게시된 기록이 아닌 경우 기록 완료로) 소스에 응답할 수 있다.
응답 또는 프로세싱 동안의 다른 이유들로 전체 어드레스가 필요한 경우, 전체 어드레스는 압축된 파이프 어드레스, 각각의 레벨에 대한 레지스터들(F60)의 내용, 및 메모리 요청을 수신한 메모리 제어기(F12A-F12H)에 대응하는 각각의 레벨에 대한 알려진 결과로부터 복구될 수 있다(블록(F86)).
시스템 내의 다수의 메모리 제어기들(F12A-F12H), 및 메모리 제어기들(F12A-F12H)에 커플링된 다수의 메모리 디바이스들(F28)은 시스템에서 전력 소비의 상당한 공급원일 수 있다. 동작 동안 소정 지점들에서, 상대적으로 작은 양의 메모리는 활성 사용에 있을 수 있고, 메모리 제어기들/메모리 디바이스들의 하나 이상의 슬라이스들에 대한 액세스들이 빈번하지 않을 때 이들 슬라이스들을 디스에이블함으로써 전력이 보존될 수 있다. 슬라이스를 디스에이블하는 것은, 슬라이스에서의 전력 소비를 감소시키고 슬라이스가 재인에이블될 때까지 슬라이스를 이용불가능하게 하는 임의의 메커니즘을 포함할 수 있다. 일 실시예에서, 슬라이스가 디스에이블되는 동안 데이터는 메모리 디바이스들(F28)에 의해 유지될 수 있다. 따라서, 메모리 디바이스들(F28)에 대한 전력 공급은 활성 상태로 유지될 수 있지만, 메모리 디바이스들(F28)은 더 낮은 전력 모드에 배치될 수 있다(예컨대, DRAM 디바이스들은, 디바이스들이 데이터를 유지하기 위한 리프레시 동작들을 내부적으로 생성하지만 자체-리프레시 모드가 종료될 때까지 SOC(F10)로부터 액세스가능하지 않은, 자체-리프레시 모드에 배치될 수 있다). 슬라이스 내의 메모리 제어기(들)(F12A-F12H)는 또한 저전력 모드(예컨대, 클록 게이팅됨)에 있을 수 있다. 슬라이스 내의 메모리 제어기(들)(F12A-F12H)는 전력 게이팅될 수 있고, 따라서 슬라이스를 인에이블할 때 그리고 디스에이블 후에 전력 투입되고 재구성될 수 있다.
일 실시예에서, 소프트웨어(예컨대, 운영 체제의 일부)는 시스템 내의 활동을 모니터링하여 슬라이스 또는 슬라이스들이 디스에이블되는지 여부를 결정할 수 있다. 소프트웨어는 또한 디스에이블된 시간 동안 슬라이스 내의 데이터에 액세스하려는 시도들을 모니터링할 수 있고, 원하는 대로 슬라이스를 재인에이블할 수 있다. 또한, 일 실시예에서, 모니터 소프트웨어는 슬라이스를 디스에이블하기 전에 특정된 레이트보다 큰 레이트로 액세스되는 슬라이스 내의 데이터의 페이지들을 검출할 수 있고, 그러한 페이지들을 디스에이블되지 않을 다른 슬라이스로 복사할 수 있다(그러한 페이지들에 대해 가상 대 물리적 어드레스 변환들을 재맵핑함). 따라서, 슬라이스 내의 일부 페이지들은 이용가능하게 유지될 수 있고, 슬라이스가 디스에이블되는 동안 액세스될 수 있다. 액세스되고 있는 페이지들을 재할당하고 슬라이스를 디스에이블하는 프로세스는 본 명세서에서 슬라이스를 "폴딩(folding)"하는 것으로 지칭된다. 폴딩된 슬라이스를 재인에이블하는 것은 슬라이스를 "언폴딩(unfolding)"하는 것으로 지칭될 수 있고, 재인에이블하는 프로세스는 이전에 재할당된 페이지들을 재맵핑하여 이용가능한 슬라이스들에 걸쳐 페이지들을 확산시키는 것(그리고, 슬라이스가 폴딩되었던 시간 동안 재할당된 페이지들 내의 데이터가 수정된 경우, 재할당된 물리적 페이지에 데이터를 복사하는 것)을 포함할 수 있다.
도 63은 메모리를 폴딩할지 언폴딩할지를 결정하기 위해 시스템 동작을 모니터링하는 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다.
SOC(들)(F10) 상의 하나 이상의 프로세서들에 의해 실행되는 복수의 명령어들을 포함하는 하나 이상의 코드 시퀀스들("코드")은 아래에 나타낸 바와 같은 동작들을 포함하는 동작들을 야기할 수 있다. 예를 들어, 메모리 모니터 및 폴드/언폴드 코드는, SOC(들)(F10) 상의 프로세서들에 의해 실행될 때 SOC들을 포함하는 시스템으로 하여금 도 63에 도시된 동작들을 포함하는 동작들을 수행하게 할 수 있는 명령어들을 포함할 수 있다.
메모리 모니터 및 폴드/언폴드 코드는 시스템 내의 조건들을 모니터링하여, 슬라이스를 폴딩할 기회들 또는 폴딩된 슬라이스가 언폴딩될 것임을 나타내는 활동을 식별할 수 있다(블록(F90)). 모니터링될 수 있는 활동은, 예를 들어, 주어진 슬라이스에 포함된 다양한 페이지들에 대한 액세스 레이트들을 포함할 수 있다. 주어진 슬라이스 내의 페이지들이 임계 레이트 초과의 레이트로 액세스되지 않는 경우(또는 상당한 수의 페이지들이 임계 레이트 초과의 레이트로 액세스되지 않는 경우), 주어진 슬라이스는 슬라이스가 종종 유휴이므로 폴딩 후보일 수 있다. SOC들 내의 프로세서들 내의 전력 상태들은 메모리 모니터 및 폴드/언폴드 코드에 의해 모니터링되는 다른 인자일 수 있는데, 이는 더 낮은 전력 상태들의 프로세서들이 메모리에 덜 빈번하게 액세스할 수 있기 때문이다. 특히, 슬립 상태들에 있는 프로세서들은 메모리의 페이지들에 액세스하지 않을 수 있다. SOC(들)(F10) 내의 통신 패브릭에서의 소비된 대역폭이 모니터링될 수 있다. 다른 시스템 인자들이 또한 모니터링될 수 있다. 예를 들어, 전력을 공급하는 배터리가 낮은 충전 상태에 도달하고 있음을 시스템이 검출하는 것으로 인해, 메모리는 폴딩될 수 있다. 다른 인자는 전원의 변화일 수 있는데, 예컨대 시스템이 연속적인, 사실상 무제한 전원(예컨대, 벽 콘센트)에 연결되었다가 언플러그되어 이제 배터리 전력에 의존하고 있는 경우일 수 있다. 다른 인자는 시스템 온도 과부하, 전력 공급 과부하 등일 수 있으며, 폴딩 메모리는 열 또는 전기 부하를 감소시킬 수 있다. 시스템에서의 활동 레벨을 나타내는 인자들의 임의의 세트가 다양한 실시예들에서 모니터링될 수 있다.
활동이, 성능에 대한 상당한 영향 없이 하나 이상의 메모리 슬라이스들이 폴딩될 수 있음을 나타내는 경우(결정 블록(F92), "예" 레그), 메모리 모니터 및 폴드/언폴드 코드는 적어도 하나의 슬라이스의 폴드를 개시할 수 있다(블록(F94)). 활동이, 메모리에 대한 수요가 증가하고 있을 수 있음(또는 곧 증가하고 있을 수 있음)을 나타내는 경우(결정 블록(F96), "예" 레그), 메모리 모니터 및 폴드/언폴드 코드는 언폴드를 개시할 수 있다(블록(F98)).
일 실시예에서, 슬라이스들의 폴딩은 점진적일 수 있고 단계적으로 발생할 수 있다. 도 64는 슬라이스의 점진적 폴드의 일 실시예를 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. SOC(들)(F10) 상의 하나 이상의 프로세서들에 의해 실행되는 코드는 아래에 나타낸 바와 같은 동작들을 포함하는 동작들을 야기할 수 있다.
폴딩 프로세스는 폴딩할 슬라이스를 결정하는 것으로 시작될 수 있다(블록(F100)). 슬라이스는, 슬라이스가, 슬라이스들 중에서, 또는 가장 덜 빈번하게 액세스되는 것 중에서, 가장 덜 빈번하게 액세스된다고 결정함으로써 선택될 수 있다.
슬라이스는 무작위로 선택될 수 있다(일 실시예에서, 활성 상태로 유지되도록 지정될 수 있는 슬라이스들을 포함하지 않음). 슬라이스는 슬라이스에서 와이어드(wired) 및/또는 기록시 복사(copy-on-write) 페이지들(아래에서 논의됨)의 결여에 기초하여 선택될 수 있거나, 슬라이스는 다른 슬라이스들보다 더 적은 유선 및/또는 기록시 복사 페이지들을 가질 수 있다. 슬라이스는 다른 폴딩된 슬라이스들로부터의 그의 상대적 독립성(예컨대, 물리적 거리, 다른 폴딩된 슬라이스들과의 통신 패브릭에서의 공유 세그먼트들의 결여 등)에 기초하여 선택될 수 있다. 슬라이스를 결정하기 위해 임의의 인자 또는 인자들이 사용될 수 있다. 슬라이스는 폴딩으로 마킹될 수 있다. 일 실시예에서, 폴딩 프로세스는 해싱에 대한 이진 결정 트리와 매칭되는, 2의 거듭제곱으로 슬라이스들을 디스에이블할 수 있다. 적어도 하나의 슬라이스는 폴딩불가능한 것으로 지정될 수 있고, 데이터가 메모리 시스템에서 액세스가능한 것을 보장하기 위해 활성 상태로 유지될 수 있다.
폴드를 개시하는 것은 폴딩 슬라이스 내의 물리적 페이지들에 대한 새로운 메모리 할당들을 억제하는 것을 포함할 수 있다. 따라서, 메모리 모니터 및 폴드/언폴드 코드는 메모리에 아직 맵핑되지 않은 가상 페이지들에 대한 물리적 페이지들을 할당하는 가상 메모리 페이지 할당기 코드와 통신하여, 가상 메모리 페이지 할당기로 하여금 슬라이스 내의 물리적 페이지들을 할당하는 것을 중지하게 할 수 있다(블록(F102)). 비활성화/디스에이블은 또한 잠재적으로, 슬라이스 내의 와이어드 페이지들이 언와이어드(unwired)될 것을 기다릴 수 있다. 와이어드 페이지는 가상 메모리 시스템에 의해 페이징 아웃되도록 허용되지 않는 페이지일 수 있다. 예를 들어, 커널 코드의 페이지들 및 관련 데이터 구조들의 페이지들이 와이어드일 수 있다. 기록시 복사 페이지가 할당될 때, 그것은 활성 상태로 유지되어야 할 슬라이스에 할당될 수 있고 따라서 폴딩 슬라이스에 할당되지 않을 수 있다. 기록시 복사 페이지들은, 독립적인 코드 시퀀스들(예컨대, 프로세스들, 또는 프로세스 또는 프로세스들 내의 스레드들)이 독립적인 코드 시퀀스들 중 어느 것도 페이지들을 기록하지 않는 한 페이지들을 공유할 수 있도록 허용하기 위해 사용될 수 있다. 독립적인 코드 시퀀스가 기록을 생성할 때, 기록은 가상 메모리 페이지 할당기로 하여금 새로운 페이지를 할당하게 하고 데이터를 새롭게 할당된 페이지로 복사하게 할 수 있다.
따라서, 가상 메모리 페이지 할당기는 어느 물리적 페이지들이 어느 슬라이스들에 맵핑되는지를 인식할 수 있다. 일 실시예에서, 폴딩이 사용될 때, 상이한 메모리 제어기들/메모리에 걸쳐 각각의 페이지의 블록들을 확산시키는 대신에 메모리에 대한 어드레스들의 선형 맵핑이 사용될 채용될 수 있다. 대안적으로, 어드레스들의 맵핑은 주어진 슬라이스에 인접할 수 있지만, 페이지들은 슬라이스 내의 메모리 제어기들/메모리 채널들 사이에서 확산될 수 있다. 하나의 특정 실시예에서, 어드레스 공간은 각각의 슬라이스에 단일 인접한 블록들로서 맵핑될 수 있다(예컨대, 하나의 슬라이스는 어드레스들 0 내지 slice_size-1에 맵핑될 수 있고, 다른 슬라이스는 어드레스들 slice_size 내지 2*slice_size-1에 맵핑되는 등일 수 있다). 다른 메커니즘들은 페이지 경계들 사이에서 인터리빙을 사용하거나, 또는 유닛으로서 폴딩/언폴딩될 수 있는 제한된 수의 슬라이스들에 페이지들을 맵핑할 수 있는 식이다.
슬라이스가 폴딩되고 있는 전이 기간 동안, 선택된 (폴딩) 슬라이스 내의 페이지들은 일정 기간에 걸쳐 추적되어, 어느 페이지들이 활성으로 액세스되는지를 결정할 수 있다(블록(F104)). 예를 들어, 페이지 테이블 변환들 내의 액세스 비트들은 어느 페이지들이 액세스되고 있는지를 추적하는 데 사용될 수 있다(액세스 비트들을 주기적으로 체크하고 체크되면 그들을 소거하여 새로운 액세스들이 검출될 수 있도록 함). 활성이고 더티한(dirty) 것으로 밝혀진 페이지들(데이터는 메모리에 로딩된 이후로 수정되었음)이 활성 상태로 유지될 슬라이스로 이동될 수 있다. 즉, 페이지들은 가상 메모리 페이지 할당기에 의해 상이한 슬라이스에 재맵핑될 수 있다(블록(F106)). 활성이지만 클린한(clean) 것으로 밝혀진 페이지들(메모리로의 초기 로드 후 수정되지 않음)은 선택적으로 상이한 슬라이스에 재맵핑될 수 있다(블록(F108)). 활성이지만 클린한 페이지가 재맵핑되지 않는 경우, 슬라이스가 폴딩된 후의 페이지에 대한 액세스는 슬라이스가 다시 인에이블/활성화되게 할 수 있고, 따라서 달성될 수 있는 전력 절감을 제한할 수 있다. 따라서, 일반적인 의도는, 활성으로-액세스된 페이지들이 디스에이블된/폴딩된 슬라이스에 남아 있지 않는 것일 수 있다.
전술한 것이 완료되면, 슬라이스 내의 메모리 디바이스들(F28)(예컨대, DRAM들)은 자체-리프레시에 활성으로 배치될 수 있다(블록(F110)). 대안적으로, 시간이 경과함에 따라 액세스들이 발생하고 있지 않기 때문에 메모리 디바이스들(F28)은 자연스럽게 자체-리프레시로 하강하여, 메모리 제어기(F12A-F12H) 하드웨어 내에 내장된 전력 관리 메커니즘들에 의존하여 자체-리프레시로의 전이를 야기할 수 있다. 다른 유형들의 메모리 디바이스들은 그러한 디바이스들의 정의에 따라 저전력 모드에 활성으로 배치될 수 있다(또는 자연스럽게 하강하도록 허용될 수 있다). 선택적으로, 슬라이스 내의 메모리 제어기들(F12A-F12H)은 트래픽의 결여로 인해 더 낮은 전력 상태로 감소될 수 있지만, 메모리 요청들이 발생하는 경우 이들을 계속 청취하고 이들에 응답할 수 있다(블록(F112)).
일 실시예에서, 폴딩된 슬라이스 내의 데이터가 요구되지 않는다는 충분히 높은 확신이 있는 경우, 현재 폴딩에 더해 하드 폴드(hard fold)가 더 공격적인 모드로서 적용될 수 있다. 즉, 폴딩된 슬라이스에 대한 액세스가 장기간 동안 없는 경우 메모리 디바이스들(F28)은 실제로 전력 오프될 수 있다.
슬라이스를 언폴딩(재인에이블 또는 활성화)하는 것은 점진적이거나 신속할 수 있다. 점진적인 언폴딩은, 실행 중인 애플리케이션들에 의해 필요한 활성 메모리 또는 대역폭의 양이 증가하고 있고 현재 활성인 슬라이스들이 수요를 충족시킬 수 없어서 성능을 제한하게 될 임계치에 접근하고 하고 있을 때, 발생할 수 있다. 신속한 언폴딩은 큰 메모리 할당 또는 대역폭 수요의 상당한 증가 시 발생할 수 있다(예컨대, 디스플레이가 켜지거나, 새로운 애플리케이션이 시작되거나, 사용자가 시스템을 잠금해제하거나 버튼 또는 다른 입력 디바이스를 누름으로써 달리 시스템과 상호작용하는 것과 같이 시스템에 참여하는 경우 등).
도 65는 메모리 슬라이스를 언폴딩하는 일 실시예를 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. SOC(들)(F10) 상의 하나 이상의 프로세서들에 의해 실행되는 코드는 아래에 나타낸 바와 같은 동작들을 포함하는 동작들을 야기할 수 있다.
언폴딩할 슬라이스가 선택될 수 있거나(블록(F120)), 위에서 논의된 바와 같이 2의 거듭제곱의 수의 슬라이스들과 같은 다수의 슬라이스들이 선택될 수 있다. 슬라이스/슬라이스들을 선택하기 위한 임의의 메커니즘이 사용될 수 있다. 예를 들어, 폴딩된 슬라이스에 대한 메모리 액세스가 발생하는 경우, 그 슬라이스가 선택될 수 있다. 슬라이스는 무작위로 선택될 수 있다. 슬라이스는 다른 비-폴딩된 슬라이스들로부터의 그의 상대적 독립성(예컨대, 물리적 거리, 다른 비-폴딩된 슬라이스들과의 통신 패브릭에서의 공유 세그먼트들의 결여 등)에 기초하여 선택될 수 있다. 언폴딩할 슬라이스를 선택하기 위해 임의의 인자 또는 인자들의 조합이 사용될 수 있다.
언폴딩 슬라이스 내의 메모리 제어기(들)(F12A-F12H)의 전력 상태는 선택적으로 증가될 수 있고/있거나, DRAM들은 자체-리프레시(또는, 다른 유형들의 메모리 디바이스들(F28)의 경우, 다른 저전력 모드)를 종료하도록 활성으로 야기될 수 있다(블록(F122)). 대안적으로, 메모리 제어기들(F12A-F12H) 및 메모리 디바이스들(F28)은, 언폴딩 메모리 슬라이스 내의 물리적 페이지들이 도착할 때 메모리 요청들의 도착에 응답하여 더 높은 성능/전력 상태들로 자연스럽게 전이할 수 있다. 메모리 모니터 및 폴드/언폴드 코드는 선택된 메모리 슬라이스 내의 물리적 페이지 할당들이 할당에 이용가능하다는 것을 가상 메모리 페이지 할당기에 통지할 수 있다(블록(F124)). 시간의 경과에 따라, 가상 메모리 페이지 할당기는 선택된 메모리 슬라이스 내의 페이지들을 새로 요청된 페이지들에 할당할 수 있다(블록(F126)). 새롭게 요청된 페이지들을 할당하는 것에 대안적으로 또는 추가적으로, 가상 메모리 페이지 할당기는 선택된 메모리 슬라이스에서 이전에 할당된 페이지들을 선택된 메모리 슬라이스에 재배치할 수 있다. 다른 실시예에서, 가상 메모리 페이지 할당기는 페이지들을 선택된 슬라이스에 신속하게 재배치할 수 있다.
슬라이스는 도 57과 관련하여 이전에 설명된 바와 같이 정의될 수 있다(예컨대, 슬라이스는 행보다 더 거친 입자일 수 있음). 다른 실시예들에서, 메모리 폴딩의 목적들을 위해, 슬라이스는 단일 메모리 채널(예컨대, 단일 메모리 디바이스(F28))에 이르는 임의의 크기일 수 있다. 다른 실시예들은 슬라이스를 하나 이상의 메모리 제어기들(F12A-F12H)로 정의할 수 있다. 일반적으로, 슬라이스는 복수의 페이지들이 맵핑되는 물리적 메모리 자원이다. 맵핑은, 일 실시예에서, MLC 레지스터들(F22A-F22H, F22J-F22N, 및 F22P)의 프로그래밍에 따라 결정될 수 있다. 다른 실시예에서, 맵핑은 하드웨어로 고정될 수 있거나, 다른 방식으로 프로그래밍가능할 수 있다.
일 실시예에서, 슬라이스 크기의 선택은, 부분적으로, 시스템에서 관심 있는 저전력 사용 사례들에 의해 사용되는 데이터 용량 및 대역폭에 기초할 수 있다. 예를 들어, 슬라이스 크기는, 단일 슬라이스가 시스템의 일차 디스플레이를 지속하고 운영 체제 및 작은 수의 백그라운드 애플리케이션들을 유지할 수 있는 메모리 용량을 가질 수 있도록 선택될 수 있다.
사용 사례들은, 예를 들어, 영화를 보는 것, 음악을 재생하는 것, 화면 보호기가 켜져 있지만 이메일을 페치하거나 백그라운드에서 업데이트들을 다운로드하는 것을 포함할 수 있다.
도 66은 (예컨대, 슬라이스를 디스에이블하거나 비활성화하기 위해) 메모리 슬라이스를 폴딩하기 위한 방법의 일 실시예를 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. SOC(들)(F10) 상의 하나 이상의 프로세서들에 의해 실행되는 코드는 아래에 나타낸 바와 같은 동작들을 포함하는 동작들을 야기할 수 있다.
본 방법은 메모리 시스템 내의 복수의 메모리 슬라이스들 중 제1 메모리 슬라이스가 디스에이블되어야 하는지 여부를 검출하는 것을 포함할 수 있다(결정 블록(F130)). 검출이 제1 메모리 슬라이스가 디스에이블되지 않아야 함을 나타내는 경우(결정 블록(F130), "아니오" 레그), 방법은 완료될 수 있다. 검출이 제1 메모리 슬라이스가 디스에이블되어야 함을 나타내는 경우, 방법은 계속될 수 있다(결정 블록(F130), "예" 레그). 제1 메모리 슬라이스가 디스에이블되어야 함을 검출하는 것에 기초하여, 방법은 제1 메모리 슬라이스 내의 물리적 페이지들의 서브세트를 복수의 메모리 슬라이스들 중 다른 메모리 슬라이스로 복사하는 것을 포함할 수 있다. 물리적 페이지들의 서브세트 내의 데이터는 임계 레이트 초과로 액세스될 수 있다(블록(F132)). 방법은, 제1 메모리 슬라이스가 디스에이블되어야 함을 검출하는 것에 기초하여, 물리적 페이지들의 서브세트에 대응하는 가상 어드레스들을 다른 메모리 슬라이스에 재맵핑하는 것을 포함할 수 있다(블록(F134)). 방법은 또한, 제1 메모리 슬라이스가 디스에이블되어야 함을 검출하는 것에 기초하여, 제1 메모리 슬라이스를 디스에이블하는 것을 포함할 수 있다(블록(F136)). 일 실시예에서, 제1 메모리 슬라이스를 디스에이블하는 것은, 제1 메모리 슬라이스 내의 하나 이상의 동적 액세스 메모리들(DRAM들)을 자체 리프레시 모드에 활성으로 배치하는 것을 포함할 수 있다. 다른 실시예에서, 제1 메모리 슬라이스를 디스에이블하는 것은, 제1 메모리 슬라이스 내의 하나 이상의 동적 액세스 메모리들(DRAM들)이 액세스의 결여로 인해 자체-리프레시 모드로 전이하도록 허용하는 것을 포함할 수 있다. 일 실시예에서, 메모리 시스템은 복수의 메모리 제어기들을 포함하고, 물리적 메모리 자원은 복수의 메모리 제어기들 중 적어도 하나를 포함한다. 다른 실시예에서, 메모리 시스템은 복수의 메모리 채널들을 포함하고, 주어진 동적 랜덤 액세스 메모리(DRAM)는 복수의 메모리 채널들 중 하나에 커플링된다. 주어진 메모리 슬라이스는 복수의 메모리 채널들 중 적어도 하나를 포함한다. 예를 들어, 일 실시예에서, 주어진 메모리 슬라이스는 복수의 메모리 채널들 중 하나의 메모리 채널이다.
일 실시예에서, 제1 메모리 슬라이스가 디스에이블되어야 한다고 결정하는 것은, 제1 메모리 슬라이스에 대한 액세스 레이트가 제1 임계치보다 낮다는 것을 검출하는 것; 및 제2 임계치보다 더 빈번하게 액세스되는 물리적 페이지들의 서브세트를 식별하는 것을 포함할 수 있다.
일 실시예에서, 본 방법은, 액세스 레이트가 제1 임계치보다 낮음을 검출하는 것에 기초하여, 제1 메모리 슬라이스에 대응하는 복수의 물리적 페이지들을 메모리 할당기 내의 가상 어드레스들에 할당하는 것을 디스에이블하는 것을 추가로 포함할 수 있다. 방법은 복수의 물리적 페이지들의 할당을 디스에이블하는 것에 후속하여 식별하는 것을 수행하는 것을 추가로 포함할 수 있다. 일 실시예에서, 복사하는 것은 메모리 시스템에서 수정된 데이터를 포함하는 서브세트의 하나 이상의 물리적 페이지들로부터 다른 메모리 슬라이스로 데이터를 복사하는 것을 포함한다. 일부 실시예들에서, 복사하는 것은 하나 이상의 물리적 페이지들로부터 데이터를 복사하는 것에 후속하여 서브세트의 나머지 물리적 페이지들로부터 데이터를 복사하는 것을 추가로 포함한다.
전술한 것에 따라, 시스템은 메모리 시스템을 형성하는 하나 이상의 메모리 디바이스들에 커플링된 하나 이상의 메모리 제어기들을 포함할 수 있고, 여기서 메모리 시스템은 복수의 메모리 슬라이스들을 포함하고, 복수의 메모리 슬라이스들 중 주어진 메모리 슬라이스는 복수의 물리적 페이지들이 맵핑되는 물리적 메모리 자원이다. 시스템은 하나 이상의 프로세서들; 및 하나 이상의 프로세서들에 의해 실행될 때, 시스템으로 하여금 위에서 강조된 바와 같은 방법을 포함하는 동작들을 수행하게 하는 복수의 명령어들을 저장하는 비일시적 컴퓨터 판독가능 저장 매체를 추가로 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체는 또한 일 실시예이다.
도 67은 어드레스에 대한 메모리 요청을 타겟팅된 메모리 제어기로 라우팅하기 위해, 그리고 일부 경우들에서, 타겟팅된 메모리 디바이스 및/또는 메모리 디바이스 내의 뱅크 그룹 및/또는 뱅크로 라우팅하기 위해 어드레스를 해싱하기 위한 방법의 일 실시예를 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 소스 하드웨어 에이전트들, 통신 패브릭 컴포넌트들, 및/또는 메모리 제어기 컴포넌트들과 같은 SOC(F10)의 다양한 컴포넌트들은 방법의 부분들 또는 전부를 수행하도록 구성될 수 있다.
본 방법은 하나 이상의 집적 회로 다이에 걸쳐 물리적으로 분산된 복수의 메모리 제어기들을 갖는 시스템 내의 메모리 디바이스들에 맵핑되는 메모리 어드레스 공간 내의 제1 어드레스를 갖는 메모리 요청을 생성하는 것을 포함할 수 있다(블록(F140)). 일 실시예에서, 메모리 어드레스 공간 내의 주어진 메모리 어드레스는 복수의 메모리 제어기들 중 하나에 커플링된 메모리 디바이스들 중 하나 내의 메모리 위치를 고유하게 식별하고, 메모리 어드레스 공간 내의 주어진 페이지는 복수의 블록들로 분할되고, 주어진 페이지의 복수의 블록들은 복수의 메모리 제어기들에 걸쳐 분산된다. 본 방법은 제1 어드레스로부터 어드레스 비트들의 독립적으로-특정된 세트들을 해싱하여 메모리 요청을 복수의 메모리 제어기들 중 제1 메모리 제어기로 지향시키는 것을 추가로 포함할 수 있으며, 여기서 어드레스 비트들의 독립적으로-특정된 세트들은 복수의 입도 레벨들에서 제1 메모리 제어기를 위치시킨다(블록(F142)).
본 방법은 더 추가적으로, 해싱에 기초하여 메모리 요청을 제1 메모리 제어기로 라우팅하는 것을 포함할 수 있다(블록(F144)).
일 실시예에서, 하나 이상의 집적 회로 다이는 복수의 집적 회로 다이이고; 복수의 입도 레벨들은 다이 레벨을 포함하고; 다이 레벨은 복수의 집적 회로 다이 중 어느 것이 제1 메모리 제어기를 포함하는지를 특정한다. 일 실시예에서, 주어진 집적 회로 다이 상의 복수의 메모리 제어기들은 주어진 집적 회로 다이 상의 물리적 위치에 기초하여 복수의 슬라이스들로 논리적으로 분할되고; 상기 복수의 메모리 제어기들 중 적어도 2개의 메모리 제어기들은 상기 복수의 슬라이스들 중 주어진 슬라이스에 포함되고; 복수의 입도 레벨들은 슬라이스 레벨을 포함하고; 슬라이스 레벨은 복수의 슬라이스들 중 어느 것이 제1 메모리 제어기를 포함하는지를 특정한다. 일 실시예에서, 주어진 슬라이스 내의 적어도 2개의 메모리 제어기들은 주어진 집적 회로 다이 상의 물리적 위치에 기초하여 복수의 행들로 논리적으로 분할되고; 복수의 입도 레벨들은 행 레벨을 포함하고; 행 레벨은 복수의 행들 중 어느 것이 제1 메모리 제어기를 포함하는지를 특정한다. 일 실시예에서, 복수의 행들은 주어진 집적 회로 다이 상의 물리적 위치에 기초하여 복수의 측들을 포함하고; 복수의 입도 레벨들은 측 레벨을 포함하고; 측 레벨은 복수의 행들 중 주어진 행의 어느 측이 제1 메모리 제어기를 포함하는지를 특정한다. 일 실시예에서, 메모리 요청들을 생성하는 복수의 하드웨어 에이전트들 중 주어진 하드웨어 에이전트는 하나 이상의 레지스터들을 포함하고, 본 방법은 복수의 입도 레벨들 중 하나 이상에서 해시에 어느 어드레스 비트들이 포함되는지를 식별하는 데이터로 하나 이상의 레지스터들을 프로그래밍하는 것을 추가로 포함한다. 일 실시예에서, 복수의 하드웨어 에이전트들 중 제1 하드웨어 에이전트는 복수의 입도 레벨들 중 제1 수에 대해 프로그래밍가능하고, 복수의 하드웨어 에이전트들 중 제2 하드웨어 에이전트는 복수의 입도 레벨들 중 제2 수에 대해 프로그래밍가능하며, 여기서 제2 수는 제1 수와 상이하다. 일 실시예에서, 복수의 메모리 제어기들 중 주어진 메모리 제어기는, 복수의 입도 레벨들 및 주어진 메모리 제어기 내부의 하나 이상의 다른 입도 레벨들에 어느 어드레스 비트들이 포함되는지를 식별하는 데이터로 프로그래밍가능한 하나 이상의 레지스터들을 포함한다.
도 68은 메모리 제어기에서 압축된 파이프 어드레스를 형성하기 위해 어드레스 비트들을 드롭하기 위한 방법의 일 실시예를 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 메모리 제어기는 방법의 부분들 또는 전부를 수행하도록 구성될 수 있다.
방법은 시스템의 복수의 메모리 제어기들 중 제1 메모리 제어기에서 복수의 어드레스 비트들을 포함하는 어드레스를 수신하는 단계를 포함할 수 있다.
어드레스는 제1 메모리 제어기로 라우팅되고, 제1 메모리 제어기에 의해 제어되는 복수의 메모리 디바이스들 중 제1 메모리 디바이스는 복수의 어드레스 비트들의 세트들의 복수의 해시들에 기초하여 선택된다(블록(F150)). 본 방법은 복수의 어드레스 비트들 중 복수를 드롭하는 것을 추가로 포함할 수 있다(블록(F152)). 복수의 어드레스 비트들 중 복수의 주어진 비트가 복수의 해시들 중 하나에 포함되고, 복수의 해시들 중 나머지 것들로부터 배제된다. 본 방법은, 복수의 어드레스 비트들 중 나머지 어드레스 비트들을 시프팅하여 제1 메모리 제어기 내에서 사용되는 압축된 어드레스를 형성하는 것을 포함할 수 있다(블록(F154)).
일 실시예에서, 본 방법은 복수의 해시들에서 사용되는 복수의 어드레스 비트들의 세트들 및 제1 메모리 제어기의 식별에 기초하여 복수의 어드레스 비트들 중 복수를 복구하는 것을 추가로 포함할 수 있다. 일 실시예에서, 본 방법은 압축된 어드레스에 기초하여 메모리 제어기에 의해 제어되는 메모리 디바이스에 액세스하는 것을 추가로 포함할 수 있다. 일 실시예에서, 본 방법은 복수의 해시들 중 각자의 것들에 포함된 복수의 어드레스 비트들의 세트들을 식별하기 위해 복수의 구성 레지스터들을 프로그래밍하는 것을 추가로 포함할 수 있다. 일 실시예에서, 프로그래밍하는 것은 복수의 어드레스 비트들의 세트들을 식별하는 비트 마스크들로 복수의 구성 레지스터들을 프로그래밍하는 것을 포함할 수 있다. 일 실시예에서, 본 방법은 드롭되는 복수의 어드레스 비트들 중 복수를 식별하기 위해 복수의 구성 레지스터들을 프로그래밍하는 것을 추가로 포함한다. 일 실시예에서, 프로그래밍하는 것은 복수의 구성 레지스터들을 원-핫 비트 마스크들로 프로그래밍하는 것을 포함한다.
공통 데이터베이스로부터의 다수의 테이프아웃들
집적 회로들은, 단일 반도체 기판 또는 "칩" 상에 집적되는 다양한 디지털 로직 회로들 및/또는 아날로그 회로들을 포함한다. 고정 기능 하드웨어 내지 마이크로프로세서들로부터, 프로세서들, 집적 메모리 제어기들 및 시스템의 중심에 있을 수 있는 고도로 집적된 칩을 형성하는 다양한 다른 컴포넌트들을 포함하는 시스템 온 칩(systems on a chip, SOCs)까지 매우 다양한 집적 회로들이 존재한다.
주어진 집적 회로는 다양한 시스템들(예를 들어, "기성품(off the shelf)" 컴포넌트)에서의 사용을 위해 설계될 수 있다. 주어진 집적 회로는 자신이 다양한 시스템들에서 사용될 수 있게 하는 컴포넌트들의 세트를 포함할 수 있지만, 특정 시스템은 컴포넌트들 모두 또는 컴포넌트들 모두의 전체 기능 및/또는 성능을 요구하지는 않을 수 있다. 여분의 컴포넌트들/기능은 상당히 낭비되고, 매몰 비용이 들며, 시스템에서 전력(적어도 누설 전력)을 소비한다. 벽 콘센트의 본질적으로 무제한의 공급과는 대조적으로, 제한된 전력 공급(예를 들어, 배터리) 상에서 적어도 때때로 동작하는 휴대용 시스템들의 경우, 전력의 비효율적인 사용은 제한된 공급부의 비효율적인 사용 및 심지어 제한된 공급에 대한 충전 요건들 사이에서 수용가능하지 않게 짧은 시간들로 이어진다.
따라서, 주어진 시스템의 요건들에 집적 회로 기능을 매칭시키는 것은 고품질 제품을 생산하는 데 중요하다. 그러나, 많은 상이한 시스템들에 대한 맞춤 집적 회로 설계는 또한, 각각의 집적 회로에 대한 설계 및 검증 노력의 관점에서 비용을 나타낸다.
일 실시예에서, 집적 회로의 방법 및 설계는 공통 설계 데이터베이스에 기초하여 집적 회로의 상이한 구현들의 하나 초과의 테이프 아웃, 및 궁극적으로는 제조를 지원한다. 설계는, 설계에 포함된 모든 회로 컴포넌트들이 제조된 칩에 포함되는 전체 인스턴스뿐만 아니라, 제조된 칩에 회로 컴포넌트들의 서브세트를 포함하는 하나 이상의 부분 인스턴스들을 지원할 수 있다. 부분 인스턴스들은 더 작은 다이 상에 제조될 수 있지만, 부분 인스턴스를 갖는 회로 컴포넌트들 및 이들의 물리적 배열 및 배선은 전체 인스턴스 내의 대응하는 영역과 동일할 수 있다. 즉, 부분 인스턴스를 생성하기 위해 설계 데이터베이스로부터 전체 인스턴스의 영역의 일부 및 그 위의 컴포넌트들을 제거함으로써 부분 인스턴스가 생성될 수 있다. 설계, 검증, 합성, 타이밍 분석 수행, 설계 규칙 체크 수행, 전기 분석 수행 등의 작업은 전체 인스턴스 및 부분 인스턴스들에 걸쳐 공유될 수 있다. 추가로, 일 실시예에서, 다양한 컴퓨팅 요건들, 폼 팩터들, 비용 구조들, 전원 공급 제한들 등을 갖는 다양한 제품들에 적절한 집적 회로 칩이 동일한 설계 프로세스로부터 지원될 수 있다.
예를 들어, 전체 인스턴스는 특정 수의 컴퓨팅 유닛들(예를 들어, 중앙 프로세싱 유닛(CPU) 프로세서들, 그래픽 프로세싱 유닛(GPU)들, CPU에 부착된 코프로세서들, 디지털 신호 프로세서들과 같은 다른 특수 프로세서들, 이미지 신호 프로세서들 등)을 포함할 수 있다. 부분 인스턴스들은 더 적은 컴퓨팅 유닛들을 포함할 수 있다. 전체 인스턴스는 복수의 메모리 제어기들을 통해 특정량의 메모리 용량을 포함할 수 있고, 부분 인스턴스들은 더 낮은 메모리 용량을 지원하는 더 적은 메모리 제어기들을 포함할 수 있다. 전체 인스턴스는 특정 수의 입력 출력(I/O) 디바이스들 및/또는 인터페이스들(주변 디바이스들/인터페이스들 또는 간단히 주변기기들로 또한 지칭됨)을 포함할 수 있다. 부분 인스턴스는 더 적은 I/O 디바이스들/인터페이스들을 가질 수 있다.
일 실시예에서, 부분 인스턴스들은 스터브 영역을 더 포함할 수 있다. 스터브 영역은 부분 인스턴스들에 포함된 회로 컴포넌트들에 대한 입력 신호들에 대한 종단들을 제공할 수 있으며, 여기서, 전체 인스턴스에서 그러한 입력 신호들에 대한 소스들은 제거된 영역 내의 회로 컴포넌트들이고 따라서 입력 신호들은 스터브의 부재 시에 연결되지 않는다. 회로 컴포넌트들로부터 제거된 영역의 회로 컴포넌트들로의 출력 신호들은 적어도 스터브의 에지에 도달할 수 있고 연결되지 않을 수 있다.
일 실시예에서, 스터브 영역은, 부분 인스턴스에서 회로 컴포넌트들의 적절한 기능을 제공하기 위해 필요에 따라, 입력 신호들을 전력(디지털 1) 또는 접지(디지털 0) 와이어들(예를 들어, 전력 및 접지 그리드들)에 연결하기 위한 금속화를 포함할 수 있다. 예를 들어, 부분 인스턴스에서 전력 관리자 블록은 제거된 회로 컴포넌트들로부터 입력들을 수신할 수 있고, 입력들은 제거된 회로 컴포넌트들이 전력이 차단된 것, 유휴 상태인 것 등을 표시하기 위해 전력 또는 접지에 연결될 수 있어서, 전력 관리자 블록은 전력 상태들을 변경할 때 등의 경우 제거된 회로 컴포넌트의 응답을 기다리지 않는다. 일 실시예에서, 스터브 영역은 금속화(배선)만을 포함할 수 있다. 즉, 스터브 영역은 능동 회로부(예를 들어, 반도체 기판에 형성된 트랜지스터들)를 배제할 수 있다. 금속화 층들(또는 금속 층들)은, 능동 회로 요소들 사이에 와이어 상호연결부를 제공하기 위해(또는 스터브 영역에서 디지털 1/0 값들을 제공하기 위해) 반도체 기판의 표면 영역 위에 형성된다. 이러한 방식으로 부분 인스턴스 설계들을 관리하는 것은 전체 인스턴스에서의 노력에 비해 부분 인스턴스들의 검증의 양을 최소화할 수 있다. 예를 들어, 추가적인 타이밍 검증이 필요하지 않을 수 있고, 추가적인 물리적 설계 검증이 최소일 수 있는 식이다.
도 69는 집적 회로의 전체 인스턴스 및 몇몇 부분 인스턴스들의 일 실시예를 예시하는 블록도이다. 집적 회로의 전체 인스턴스는 중괄호 G12("칩 1")로 표시되고, 집적 회로의 부분 인스턴스들은 중괄호들 G14 및 G16("칩 2" 및 "칩 3")으로 표시된다. 전체 인스턴스인 칩 1은 복수의 회로 컴포넌트들(G10A-G10D)을 포함한다. 전체 인스턴스에 대한 반도체 기판 칩 또는 다이(참조 번호 G18)의 표면 상의 회로 컴포넌트들(G10A-G10D)의 물리적 위치들은 회로 컴포넌트들(10A-10D)의 배치에 의해 표시된다. 도 69는 간략화된 표현이며, 도 69에 도시된 것보다 더 많은 회로 컴포넌트들이 존재할 수 있고, 물리적 배열이 더 변경될 수 있다. 회로 컴포넌트들(G10A-G10D) 사이의 다양한 상호연결부가 도 69에 도시되지 않은 컴포넌트 간 통신을 위해 사용된다. 상호연결부뿐만 아니라 회로 컴포넌트들(G10A-G10D) 자체 내의 상호연결부는 반도체 기판 표면 위의 금속화 층들에서 구현될 수 있다.
각각의 부분 인스턴스는 도 69의 "촙 라인(chop line)"(G20A-G20B)에 대응한다. 촙 라인은 전체 인스턴스에 포함된 그러한 회로 컴포넌트들(G10A-G10D)을 다양한 부분 인스턴스들에 포함된 회로 컴포넌트들(G10A-G10D)로부터 분할한다. 따라서, 예를 들어, 칩(2)은 촙 라인(G20A)에 의해 정의되고, 회로 컴포넌트들(G10A-G10C)을 포함하지만 회로 컴포넌트(G10D)를 포함하지 않는다. 유사하게, 칩(3)은 촙 라인(G20B)에 의해 정의되고, 회로 컴포넌트들(G10A-G10B)을 포함하지만 회로 컴포넌트들(G10C-G10D)을 포함하지 않는다. 촙 라인은 설계 데이터베이스에 정의될 수 있거나, 설계 프로세스의 일부일 수 있지만, 설계 데이터베이스에 명시적으로 표현되지 않을 수 있다.
일반적으로, 설계 데이터베이스는 회로 컴포넌트들(G10A-G10D) 및 이들의 상호연결부의 디스크립션들을 저장하는 복수의 컴퓨터 파일들을 포함할 수 있다. 설계 데이터베이스는, 예를 들어, Verilog, VHDL 등과 같은 하드웨어 디스크립션 언어(HDL)로 표현된 회로들의 레지스터 전송 레벨(RTL) 디스크립션들을 포함할 수 있다. 설계 데이터베이스는 표준 셀들의 라이브러리를 사용하여 RTL 디스크립션들로부터 합성되기보다는 직접 구현되는 회로들에 대해, 회로 편집기 툴로부터의 회로 디스크립션들을 포함할 수 있다. 설계 데이터베이스는, 표준 셀 인스턴스들 및 이들의 상호연결부를 설명하는, 합성으로부터 초래되는 네트리스트(netlist)들을 포함할 수 있다. 설계 데이터베이스는 회로 컴포넌트들 및 이들의 상호연결부의 물리적 레이아웃 디스크립션들을 포함할 수 있고, 집적 회로 제조 프로세스를 위한 마스크들을 생성하는 데 사용될 수 있는 기하학적 형상들 및 층들의 관점에서 집적 회로들을 설명하는 테이프 아웃 디스크립션 파일들을 포함할 수 있다. 테이프 아웃 디스크립션 파일들은 그래픽 설계 시스템(GDSII) 포맷, 개방 아트워크 시스템 교환 표준(OASIS) 포맷 등으로 표현될 수 있다. 위의 것들의 임의의 조합이 설계 데이터베이스에 포함될 수 있다.
촙 라인들(G20A-G20B)은 칩(G18) 영역을 회로 컴포넌트들(G10A-G10D)의 서브세트들이 인스턴스화되는 하위 영역들로 분할한다. 예를 들어, 촙 라인(G20B)은 칩(G18) 영역을 (도 69에서 배향된 바와 같이 라인(G20B) 위의) 제1 하위 영역 및 (라인(G20B) 아래의) 제2 하위 영역으로 분할한다. 촙 라인(G20A)은 제2 하위 영역을 제3 하위 영역 및 제4 하위 영역으로 추가로 분할하며, 여기서 제3 하위 영역들은 제1 하위 영역에 인접하거나 접한다. 제1 하위 영역과 제2 하위 영역의 조합은 전체 인스턴스를 표현한다. 제1 하위 영역만이 (스터브 영역과 함께) 가장 작은 부분 인스턴스(칩 3)를 표현한다. 제1 하위 영역 및 제3 하위 영역은 이 예에서 다른 부분 인스턴스(칩 2)를 표현한다.
주어진 하위 영역 내의 회로 컴포넌트들의 물리적 위치들, 및 회로 컴포넌트들 내의 그리고 회로 컴포넌트들 사이의 상호연결부는 전체 인스턴스와 부분 인스턴스들 사이에서 변경되지 않을 수 있다. 따라서, 전체 인스턴스 내의 회로 컴포넌트들이 전체 인스턴스의 성공적인 제조 및 사용을 위한 타이밍 요건들, 물리적 설계 요건들 및 전기적 요건들을 충족할 때, 대부분의 부분에 대한 부분 인스턴스들에 의해 동일한 요건들이 또한 충족되어야 한다. 스터브 영역들 내의 물리적 설계 및 전기적 요건들이 검증될 필요가 있을 수 있으며, 아래에서 논의되는 바와 같이 코너 배제부들, 제어된 붕괴 칩 연결(C4) 범프 배제 구역들 등과 같은 하위 영역들에 특정 물리적 설계 요건들이 적용될 수 있다. 그러나, 일 실시예에서, 전체 인스턴스가 검증되고 테이프 아웃을 위해 준비되면, 부분 인스턴스들로부터의 테이프 아웃은 최소의 노력들로 진행될 수 있다.
도 70 내지 도 72는 도 69에 도시된 실시예에 대한 부분 인스턴스들 및 전체 인스턴스를 예시한다. 도 72는 전체 인스턴스이며, 따라서 회로 컴포넌트들(G10A-G10D)을 포함한다. 도 70 및 도 71은 각각 칩 3 및 칩 2에 대응한다. 따라서, 도 70의 부분 인스턴스는 제1 하위 영역으로부터의 회로 컴포넌트들(G10A-G10B)뿐만 아니라 스터브 영역(G22)(스터브 1)을 포함한다. 도 71의 부분 인스턴스는 제1 하위 영역으로부터의 회로 컴포넌트들(G10A-G10B), 제2 하위 영역으로부터의 회로 컴포넌트(G10C) 및 스터브 영역(G24)(스터브 2)을 포함한다.
회로 컴포넌트는 IC의 특정 컴포넌트(예를 들어, CPU 또는 GPU와 같은 프로세서, 프로세서들 또는 GPU들의 클러스터, 메모리 제어기, 통신 패브릭 또는 이들의 일부, 주변 디바이스 또는 주변 인터페이스 회로 등)를 구현하도록 배열되는 임의의 그룹의 회로들일 수 있다. 주어진 회로 컴포넌트는 계층적 구조를 가질 수 있다. 예를 들어, 프로세서 클러스터 회로 컴포넌트는 클러스터에 의해 점유된 영역 내에 여러 번 배치된 동일한 프로세서 설계의 사본들일 수 있는 프로세서의 다수의 인스턴스들을 가질 수 있다.
이 설명에 따르면, 방법은, 집적 회로 설계에 대응하는 설계 데이터베이스에서, 반도체 기판 상에 제조될 때 집적 회로 설계에 의해 점유될 영역을 정의하는 단계를 포함할 수 있다. 예를 들어, 영역은 도 69 및 도 72에 도시된 바와 같은 전체 인스턴스의 영역일 수 있다. 이 방법은 촙 라인(다수의 촙 라인들 중 하나일 수 있음)을 정의하는 단계를 더 포함할 수 있다. 촙 라인은 영역을 제1 하위 영역 및 제2 하위 영역으로 구획할 수 있으며, 제1 하위 영역과 제2 하위 영역의 조합은 전체 인스턴스를 표현한다. 제1 하위 영역 및 스터브 영역은 전체 인스턴스보다 적은 회로 컴포넌트들을 포함하는 집적 회로의 부분 인스턴스를 표현한다. 설계 데이터베이스에서, 집적 회로의 전체 인스턴스 및 부분 인스턴스 둘 모두에 포함된 복수의 회로 컴포넌트들의 물리적 위치가 제1 하위 영역에서 정의된다. 제1 하위 영역 내의 복수의 회로 컴포넌트들 및 제1 하위 영역 내의 복수의 회로 컴포넌트들의 상호연결부의 상대적 위치는 전체 인스턴스 및 부분 인스턴스에서 변경되지 않을 수 있다. 전체 인스턴스에 포함되지만 부분 인스턴스로부터 배제된 다른 복수의 회로 컴포넌트들의 물리적 위치가 제2 하위 영역에서 정의된다. 스터브 영역이 또한 설계 데이터베이스에 정의된다. 스터브 영역은, 그렇지 않으면 제1 하위 영역과 제2 하위 영역 사이의 촙 라인을 횡단할 와이어들에 대한 종단들을 포함할 수 있다. 스터브 영역은, 부분 인스턴스에, 제2 하위 영역의 부재 시에, 제1 하위 영역 내의 복수의 회로 컴포넌트들의 정확한 동작을 보장할 수 있다. 전체 인스턴스에 대한 제1 데이터 세트는 제1 하위 영역 및 제2 하위 영역을 사용하여 생성될 수 있고, 제1 데이터 세트는 전체 인스턴스의 제조를 위한 전체 인스턴스를 정의한다.
부분 인스턴스에 대한 제2 데이터 세트는 또한 제1 하위 영역 및 스터브 영역을 사용하여 생성될 수 있다. 제2 데이터 세트는 부분 인스턴스의 제조를 위한 부분 인스턴스를 정의한다. 일 실시예에서, 이 방법은 제2 하위 영역을 제3 하위 영역 및 제4 하위 영역으로 분할하는 제2 촙 라인을 제2 하위 영역에 정의하는 단계를 더 포함할 수 있다. 제3 하위 영역은 제1 하위 영역에 인접할 수 있고, 제3 하위 영역 및 제1 하위 영역은 집적 회로의 제2 부분 인스턴스를 표현할 수 있다. 이 방법은 제1 하위 영역, 제3 하위 영역 및 제2 스터브 영역을 사용하여 제2 부분 인스턴스에 대한 제3 데이터 세트를 생성하는 단계를 더 포함할 수 있다. 제3 데이터 세트는 제2 부분 인스턴스의 제조를 위한 제2 부분 인스턴스를 정의한다.
전술된 바와 같이, 스터브 영역은 회로부를 배제할 수 있다. 예를 들어, 스터브 영역은 반도체 기판에 형성된 트랜지스터들 또는 다른 회로들과 같은 능동 회로부를 배제할 수 있다. 스터브 영역은 금속화 층들에 또한 형성될 수 있는 회로들(예를 들어, 명시적 저항기들, 인덕터들 또는 커패시터들)을 배제할 수 있다. 금속화 층들은 기생 속성들(예를 들어, 저항, 인덕턴스, 및 커패시턴스)을 갖지만, 명시적으로 정의된 회로들은 허용되지 않을 수 있다. 스터브 영역은 반도체 기판의 표면 영역 위의 하나 이상의 금속화 층들에 배선만을 포함할 수 있다.
다른 방법은, 예를 들어, 반도체 제조 설비 또는 "파운드리"에서 제1 데이터 세트 및 제2 데이터 세트를 수신하는 단계를 포함할 수 있다. 이 방법은, 제1 데이터 세트에 기초하여 집적 회로의 제1 복수의 전체 인스턴스를 제조하는 단계, 및 제2 데이터 세트에 기초하여 집적 회로의 제2 복수의 부분 인스턴스를 제조하는 단계를 더 포함할 수 있다.
본 개시내용에 따른 부분 인스턴스를 구현하는 집적 회로는, 집적 회로를 형성하는 반도체 기판의 표면 상에 물리적으로 배열된 복수의 회로 컴포넌트들; 및 표면의 단일 에지(예를 들어, 스터브 영역)를 따르는 복수의 와이어 종단들을 포함할 수 있다. 복수의 와이어 종단들은, 복수의 회로 컴포넌트들 중 하나 이상에 대한 입력들인 와이어들 상에 고정된 디지털 로직 레벨들을 제공하기 위해, 집적 회로의 복수의 공급 와이어들에 전기적으로 연결될 수 있다. 전력 공급 와이어들은 집적 회로의 금속화 층들의 전력 공급 그리드(예를 들어, 전력 및/또는 접지)의 일부일 수 있다. 전력 및 접지 그리드들은 또한 전력 및 접지 그리드들로 지칭될 수 있다. 와이어 종단들에 의해 종료되는 입력 와이어들은 단일 에지와 교차하도록 배향되고, 집적 회로 내의 와이어들을 구동하도록 구성된 회로가 없다(예를 들어, 와이어들은 부분 인스턴스에 존재하지 않은 제2 하위 영역 내의 회로 컴포넌트들에 의해 전체 인스턴스에서 구동됨). 복수의 와이어 종단들을 포함하는 단일 에지를 따르는 영역은 능동 회로 요소들을 또한 배제한다. 예를 들어, 단일 에지를 따르는 영역은 반도체 기판의 표면 영역 위의 하나 이상의 금속화 층들에 배선만을 포함할 수 있다.
본 명세서에서 설명되는 방법은 집적 회로에 대한 전체 설계 프로세스의 다양한 영역들에 영향을 미칠 수 있다. 예를 들어, 플로어 계획은, 다양한 회로 컴포넌트들이 반도체 기판 상의 영역들에 할당되는 설계 프로세스의 요소이다. 플로어 계획 동안, 부분 인스턴스들의 존재 및 촙 라인들의 위치가 고려될 수 있어서, 모든 인스턴스들에 포함된 회로 컴포넌트들이 제1 하위 영역에 있고 다른 회로 컴포넌트들이 제2 하위 영역(또는 제3 및 제4 하위 영역들 등)에 포함되는 것을 보장한다. 추가적으로, 하위 영역들의 형상은 전체 인스턴스 및 부분 인스턴스들 둘 모두에서 영역의 효율적인 사용을 제공하도록 신중하게 설계될 수 있다. 전체 인스턴스 전반에 걸쳐 회로 컴포넌트들 사이의 통신을 제공할 수 있는 메인 버스들 또는 다른 상호연결부는 다양한 인스턴스들에서 통신을 정확하게 관리하도록 설계될 수 있다(예를 들어, 부분 인스턴스에서, 버스들은 스터브 영역에서 종료될 수 있거나 또는 스터브 영역에서 연결되지 않을 수 있고, 따라서, 통신들은 스터브 영역의 방향으로 송신되지 않아야 한다). 플로어 계획은 또한 전체 인스턴스 및 부분 인스턴스들 둘 모두에 대한 테이프 아웃에 대한 요건들을 고려할 수 있다(예를 들어, 아래에서 더 상세히 논의되는 바와 같은 다양한 배제 구역들). 추가적으로, 플로어 계획은, 부분 인스턴스들이 정확하게 동작할 것이라는 검증을 단순화하기 위해, 촙 라인을 횡단하는 와이어들의 수를 최소화하려고 시도할 수 있다.
일 실시예에서, 플로어 계획 단계에서의 고려사항은, 부분 인스턴스들에 대한 초핑에 의해 영향을 받을 수 있는 특정 임계 연결들의 정의를 포함할 수 있다. 클록 상호연결부 및 아날로그 상호연결부가 예들일 수 있다. 클록 상호연결부(또는 "클록 트리")는 종종, 클록 생성기 또는 클록 소스로부터 회로 컴포넌트들의 다양한 상태 요소들에서의 클록 종단들까지의 거리 및 전기 부하가 대략 동일하거나 또는 "밸런싱"되도록 설계된다. 상태 요소들은 예를 들어, 플립플롭들("플롭들"), 레지스터들, 래치들, 메모리 어레이들, 및 다른 클록킹된 저장 디바이스들을 포함할 수 있다.
집적 회로 설계의 다양한 인스턴스들 사이의 밸런스를 유지하기 위해, 각각의 하위 영역 내의 로컬 클록 소스들과 그 하위 영역 내의 상태 요소들 사이에 독립적인 클록 트리들이 정의될 수 있다. 예를 들어, 도 73은 집적 회로(칩 18)의 전체 인스턴스 및 촙 라인들(G20A-G20B)이 부분 인스턴스들로의 초핑을 위해 전체 인스턴스의 하위 영역들을 구획하는 실시예를 예시하는 블록도이다. 로컬 클록 소스(들)(G30A-G30C)가 예시되며, 이들 각각은 각각의 하위 영역 내의 라인들에 의해 예시된 독립적인 클록 트리들을 구동한다. 클록 트리들은 촙 라인들(G20A-G20B)을 가로지르지 않을 수 있다. 즉, 주어진 하위 영역 내의 클록 트리는 그 하위 영역 내에 유지될 수 있다.
클록 소스는, 자신의 클록 트리에 커플링된 회로부에 대한 클록 신호를 생성하도록 구성된 임의의 회로일 수 있다.
예를 들어, 클록 소스는 위상 잠금 루프(PLL), 지연 잠금 루프(DLL), 클록 분할기 회로 등일 수 있다. 클록 소스는 외부 클록 신호가 제공되는 집적 회로에 대한 클록 입력에 커플링될 수 있고, 클록 소스는 위상 또는 클록 에지들을 외부 신호에 대해 잠금하는 동안 외부 클록 신호를 주파수에서 곱하거나 주파수에서 나눌 수 있다.
따라서, 방법은, 제1 하위 영역에서, 제1 하위 영역 내에서 클록들을 분배하기 위해 하나 이상의 제1 클록 트리들을 정의하는 단계, 및 제2 하위 영역에서, 제2 하위 영역과 함께 분산형 클록들에 대해 하나 이상의 제2 클록 트리들을 정의하는 단계를 더 포함할 수 있다. 하나 이상의 제1 클록 트리들은 전체 인스턴스에서 하나 이상의 제2 클록 트리들로부터 전기적으로 격리될 수 있다. 클록 트리들은 도 73에 도시된 바와 같이 물리적으로 독립적일 수 있다(예를 들어, 상이한 로컬 클록 소스들에 연결됨). 클록 트리들은 다른 하위 영역으로 촙 라인을 가로지르지 않을 수 있다. 제조 방법에서, 제1 데이터 세트는 제1 하위 영역 내에 클록들을 분배하기 위한 하나 이상의 제1 클록 트리들 및 제2 하위 영역과 함께 클록들을 분배하기 위한 하나 이상의 제2 클록 트리들을 더 포함할 수 있고, 하나 이상의 제1 클록 트리들은 전체 인스턴스에서 하나 이상의 제2 클록 트리들로부터 전기적으로 격리될 수 있다.
일 실시예에서, 집적 회로는 제1 영역의 제1 하위 영역 내에 클록들을 분배하기 위한 하나 또는 이상의 제1 클록 트리들; 및 제2 하위 영역과 함께 분산형 클록들에 대한 하나 이상의 제2 클록 트리들을 포함할 수 있다. 하나 이상의 제1 클록 트리들은 하나 이상의 제2 클록 트리들로부터 전기적으로 격리될 수 있다.
도 74는 촙 라인들(G20A-G20B)에 의해 구획된 전체 다이(G18)의 일 실시예, 및 촙 라인들(G20A-G20B)에 의해 정의된 각각의 하위 영역 내의 로컬 아날로그 패드들(G32A-G32C)의 제공의 블록도이다. 아날로그 패드들(G32A-G32C)은 칩에 대한 아날로그 입력들을 위한 연결 포인트들을 제공할 수 있다. 아날로그 신호들은 종종, 아날로그 신호들의 정확도 및 기능성에 영향을 미칠 수 있는 디지털 잡음으로부터의 차폐와 같은 특별한 요건들을 가지며, 이러한 디지털 잡음은 디지털 값들에서만 의미를 갖고 이들 사이에서 전환하지 않는 디지털 신호들과는 대조적으로 연속적인 값 신호들이다. 각각의 하위 영역 내에서 아날로그 요건들이 충족됨을 보장하는 것은 집적 회로의 설계를 전체적으로 단순화할 수 있다. 일 실시예에서, 주어진 하위 영역 내에서 아날로그 신호들의 사용이 없다면, 그 하위 영역은 아날로그 패드들 및 신호 라우팅을 배제할 수 있다.
따라서, 방법은, 제1 하위 영역에서 하나 이상의 제1 아날로그 입력들을 정의하고, 제2 하위 영역에서 하나 이상의 제2 아날로그 입력들을 정의하는 단계를 더 포함할 수 있다. 하나 이상의 제1 아날로그 입력은 제1 하위 영역과 함께 유지될 수 있고 하나 이상의 제2 아날로그 입력들은 제2 하위 영역 내에 유지될 수 있다. 즉, 입력들 상에서의 또는 입력들로부터 유도된 아날로그 신호들은 촙 라인들(G20A-G20B)을 가로지르지 않는 와이어들을 통해 전달될 수 있다. 제조 방법에서, 제1 데이터 세트는 제1 하위 영역 내의 하나 이상의 제1 아날로그 입력들을 더 포함할 수 있고, 하나 이상의 제1 아날로그 입력들은 제1 하위 영역과 함께 유지되고, 제1 데이터 세트는 제2 하위 영역 내에 하나 이상의 제2 아날로그 입력들을 더 포함하고, 하나 이상의 제2 아날로그 입력들은 제2 하위 영역 내에 유지된다.
본 개시내용에 따르면, 집적 회로는, 집적 회로를 형성하는 반도체 기판의 표면의 제1 영역 내에 물리적으로 배열된 제1 복수의 회로 컴포넌트들, 및 집적 회로를 형성하는 반도체 기판의 표면의 제2 영역 내에 물리적으로 배열된 제2 복수의 회로 컴포넌트들을 포함할 수 있다. 하나 이상의 제1 아날로그 입력들이 제1 영역 내에 제공될 수 있으며, 여기서 하나 이상의 제1 아날로그 입력들은 제1 복수의 회로 컴포넌트들에 대해 격리된다. 하나 이상의 제2 아날로그 입력들이 제2 영역 내에 있고, 여기서 하나 이상의 제2 아날로그 입력들은 제2 복수의 회로 컴포넌트들에 대해 격리된다.
고려될 수 있는 집적 회로들의 다른 특징은 DFT(design for test) 전략이다. DFT는 일반적으로, DFT 인터페이스가 정의되는 포트 또는 포트들, 이를테면 JTAG(joint test access group) 규격들과 호환가능한 인터페이스를 포함한다. DFT는, 상태가 스캔 인 및 스캔 아웃될 수 있도록 설계 내의 상태 요소들의 스캔 체인들을 정의하는 것을 포함할 수 있고, 스캔 체인들은, 예를 들어 주어진 하위 영역 내에 유지되도록 정의될 수 있다. 크로스-촙(cross-chop) 라인 통신을 가능한 한 최소화하기 위해, 별개의 DFT 포트들이 각각의 하위 영역 내에 제공될 수 있다. 크로스-촙 라인 통신이 필요한 경우, 다른 신호들과 유사하게, 그러한 신호들은 스터브 영역에서 종료되고(하위 영역으로의 입력들) 연결되지 않을 수 있다(하위 영역의 출력들). 일 실시예에서, 스캔 네트워크들 및 다른 DFT 네트워크들은 계층적 링들로서 설계될 수 있어서, 제거된 회로 컴포넌트들의 부분들은 나머지 네트워크에 대한 추가의 영향 없이 DFT 네트워크로부터 연결해제될 수 있다.
일 실시예에서, 일부 회로 컴포넌트들은 전체 인스턴스 내에서 여러 번 인스턴스화될 수 있다. 인스턴스들 중 하나 이상은 부분적 인스턴스들 중 하나 이상에 포함되지 않은 하위 영역들에 있을 수 있다. 이러한 회로 컴포넌트들은 인스턴스의 각각의 위치에서 모든 요건들(타이밍, 물리적, 전기적)을 충족시키도록 설계될 수 있고, 따라서 일부 다른 위치들에 대해 과잉 설계될 수 있다(예를 들어, 회로 컴포넌트는 그의 위치들 등에 걸친 최악의 클록 스큐(skew)에 대해 설계될 수 있다). 추가적으로, 부분 인스턴스들은 상이한 패키징 솔루션을 가질 수 있으며, 이는 패키지들의 차이들(예를 들어, 상이한 IR 전압 강하들)을 처리하기 위한 추가적인 설계를 요구할 수 있다.
일 실시예에서, 파운드리는 반도체 기판 상의 특정 "비-논리" 셀들의 제작을 요구할 수 있다. 이러한 셀들은 집적 회로 자체의 일부가 아니라, 제조 프로세스를 튜닝하기 위해 파운드리에 의해 사용될 수 있다. 파운드리-요구 셀들은 엄격한 규칙들을 가질 수 있고, 다이-크기 의존적일 수 있으며, 따라서 부분 인스턴스(들)에 셀들이 적절하게 위치되도록 전체 인스턴스의 플로어 계획에서 이들 셀들의 배치를 위한 계획이 필요할 수 있다.
도 75는 집적 회로 설계에 대한 다른 고려사항인 다양한 유형들의 배제 영역들(또는 배제 구역들)의 실시예를 예시한다. 도 75에서, 좌측에는 전체 다이(G18)의 전체 인스턴스(칩 1)가 있고, 우측의 부분 인스턴스들과 함께, 최상부의 칩 3(전체 인스턴스에서의 그의 위치는 점선들(G34)로 표시된 칩 라인(G20B) 위에 있음) 및 하단의 칩 2(전체 인스턴스에서의 그의 위치는 쇄선들(G36)로 표시된 칩 라인(G20A) 위에 있음)가 있다. 각각의 경우에, 칩들의 코너들은 반도체 기판 표면의 다른 부분들보다 회로부가 허용되지 않는(또는 훨씬 더 엄격한 설계 규칙들을 따라야 하는) 배제 구역들을 갖는다. 반도체 다이의 코너들에 대한 기계적 응력이 칩의 다른 위치들에서보다 더 클 수 있기 때문에, 코너 배제 구역들이 정의될 수 있다. 코너 배제 구역들은 도 75에서 참조 번호 G38로 표시된, 교차 해칭된 영역들에 의해 표시된다.
따라서, 전체 인스턴스는 자신의 4개의 코너들 각각에서 코너 전용 구역들뿐만 아니라, 부분 인스턴스들에 대한 칩들의 코너들인 것으로 종료될 촙 라인들(G20A-G20B)에 인접한 하위 영역들의 코너들에서 칩의 측면들을 따른 "코너" 배제 구역들을 갖는다. 추가적인 코너 배제 구역은 전체 인스턴스의 코너 배제 구역들과 동일한 크기일 수 있거나, 또는 코너 배제 구역들의 크기가 전체 다이 크기로 스케일링되는 경우 상이한 크기들일 수 있다.
따라서, 방법은 반도체 기판의 각각의 코너들에 복수의 배제 구역들을 정의하는 단계를 더 포함할 수 있고, 회로 컴포넌트들은 집적 회로를 제조하기 위해 이용될 제조 프로세스의 기계적 요건들에 따라 복수의 배제 구역들로부터 배제된다. 이 방법은 촙 라인에 인접한 제1 하위 영역의 코너들에 추가적인 배제 구역들을 정의하는 단계를 더 포함할 수 있어서, 부분 인스턴스는 상부에 부분 인스턴스가 형성된 반도체 기판의 각각의 코너들에 배제 구역들을 포함한다. 제조 방법의 제1 데이터 세트는 반도체 기판의 각각의 코너들에 복수의 배제 구역들을 포함할 수 있고, 회로 컴포넌트들은 집적 회로를 제조하기 위해 이용될 제조 프로세스의 기계적 요건들에 따라 복수의 배제 구역들로부터 배제되고; 제1 데이터 세트는 제2 하위 영역에 인접한 제1 하위 영역의 코너들에 추가적인 배제 구역들을 포함하여, 부분 인스턴스는 상부에 부분 인스턴스가 형성된 반도체 기판의 각각의 코너들에 배제 구역들을 포함할 수 있다.
추가적으로, (예를 들어, 전체 인스턴스를 포함하는) 집적 회로는, 집적 회로를 형성하는 반도체 기판의 표면의 제1 영역 내에 물리적으로 배열된 제1 복수의 회로 컴포넌트들;
반도체 기판의 각각의 코너들에 있는 복수의 배제 구역들 - 회로 컴포넌트들은 집적 회로를 제조하기 위해 이용된 제조 프로세스의 기계적 요건들에 따라 복수의 배제 구역들로부터 배제됨 -; 및 반도체 기판의 한 쌍의 공칭적으로 평행한 에지들을 따라 각각의 코너들과 별개인 다른 복수의 배제 구역들을 포함할 수 있고, 회로 컴포넌트들은 다른 복수의 배제 구역들로부터 배제되고, 다른 복수의 배제 구역들은 복수의 배제 구역들과 실질적으로 동일하게 치수가 정해진다.
도 75는 또한, 도 75의 참조 번호 G40에서 이중 교차 해칭된 영역들로 도시된, 집적 회로의 전체 인스턴스 및 부분 인스턴스들 상의 C4 범프들의 허용가능한 위치들을 예시한다. 이중 교차 해칭된 영역들(G40)로 표시된 영역들 외부의 영역들은 C4 범프들에 대한 허용가능한 위치들(예를 들어, C4 범프들에 대한 배제 구역들)이 아닐 수 있거나, 또는 그러한 영역들에서의 C4 범프들의 배치에 대해 더 엄격한 규칙들이 있을 수 있다. 따라서, 각각의 인스턴스의 각각의 에지에 대해 허용가능한 위치들/배제 구역들이 존재한다. 즉, 전체 다이(G18)의 주변부 주위뿐만 아니라 촙 라인들(G20A-G20B)의 양측들 상에 C4 배제 구역들이 존재할 수 있다. 따라서, 방법은 제2 하위 영역에 인접한 제1 하위 영역의 에지를 따라 제2 배제 구역을 정의하는 단계를 더 포함할 수 있고, 제어된 붕괴 칩 연결(C4) 연결부들은 제2 배제 구역에서 배제된다. 제조 방법에서, 제1 데이터 세트는 제2 하위 영역에 인접한 제1 하위 영역의 에지를 따라 제2 배제 구역을 더 포함할 수 있고, 제어된 붕괴 칩 연결(C4) 연결부들은 제2 배제 구역에서 배제된다. 일 실시예에서, 집적 회로는 복수의 배제 구역들 사이의 라인을 따르는 제2 배제 구역을 더 포함할 수 있고, 제어된 붕괴 칩 연결(C4) 연결부들은 제2 배제 구역에서 배제된다.
도 76은 도 70에 도시된 칩 3G 실시예에 대한 회로 컴포넌트(G10B) 및 스터브 영역(G22)의 일 실시예를 더 상세히 예시하는 블록도이다. 회로 컴포넌트(G10A)에 대한 유사한 연결들이 또한 제공될 수 있고, 도 71의 스터브 영역(G24)은 회로 컴포넌트들(G10A-G10C)과 유사할 수 있다. 스터브 영역(G22)은, 스터브 영역(G22)의 에지에 대한 종단들로부터 도 76의 점선들로 예시된, 전체 인스턴스의 부분이지만 부분 인스턴스의 부분이 아닌 제거된 회로 컴포넌트에 의해 제공될 입력들에 대한 회로 컴포넌트(G10B)에 대해 (타이 업되거나(tied up) 이진 1에 연결될 입력들에 대한) VDD 종단들(G50) 및 (타이 다운되거나(tied down) 이진 0에 연결될 입력들에 대한) VSS 또는 접지 종단들(G52)과 같은 종단들을 포함할 수 있다. 주어진 종단에 대한 이진 1 또는 이진 0의 선택은 회로 컴포넌트(G10B) 내의 입력의 논리적 효과에 의존할 수 있다.
일반적으로, 종단은, (예를 들어, 제거된 회로 컴포넌트의 출력으로서) 전체 인스턴스에서 입력을 소싱할 제거된 회로 컴포넌트로부터의 추가 입력 없이 수신 회로가 진행하게 할 어떠한 값으로도 선택될 수 있다. 신호를 위한 구동 회로가 없을 때, 종단은 알려진 값을 제공한다. 제거된 회로 컴포넌트에 연결될 회로 컴포넌트(G10B)의 출력들은 스터브 영역(G22)(예를 들어, 참조 번호들 G54 및 G56)에 도달할 수 있지만, 연결되지 않을 수 있다(예를 들어, 수신 회로에 연결되지 않음). 전체 인스턴스 또는 더 큰 부분 인스턴스에서, 출력 와이어들(G54 및 G56)은 부분 인스턴스에 존재하지 않는 회로 컴포넌트들(도 76에서 점선들로 예시됨)까지 연장될 수 있다.
따라서, 스터브 영역에서 종료되는 입력들은, 스터브 영역으로 연장되고, 스터브 영역이 배열되는 집적 회로의 에지와 교차하도록 배향되는 와이어들일 수 있다. 입력들은, 집적 회로 내의 와이어들을 구동하도록 구성된 회로가 없다(예를 들어, 와이어들은 부분 인스턴스에 존재하지 않은 회로 컴포넌트들에 의해 전체 인스턴스에서 구동됨).
다른 경우들에서, 제거된 회로 컴포넌트로부터의 입력을 로컬 입력으로 대체하는 것이 바람직할 수 있다. 예를 들어, 테스트를 위해 사용되는 루프 백 회로 또는 링 상호연결 구조는 부분 인스턴스에서 루프백/링을 국부적으로 완료할 수 있다. 이러한 인스턴스들을 지원하기 위해, 수신 회로 컴포넌트(예를 들어, 회로 컴포넌트(G10B))는 제거된 컴포넌트로부터의 입력과 로컬 신호 사이에서 선택하기 위한 로직 회로를 포함할 수 있다. 예를 들어, 도 76에서, 회로 컴포넌트(G10B)는 복수의 멀티플렉서(mux)들(G58 및 G60)을 포함할 수 있다. 각각의 mux(G58 또는 G60)는 부분 인스턴스에 존재하지 않는 회로 컴포넌트로부터 일반적으로 소싱되는 입력 와이어에 커플링될 수 있다. 입력 와이어는 스터브 영역(G22)에 도달할 수 있지만 연결되지 않을 수 있다. 대안적으로, 입력 와이어는 원하는 경우 이진 1 또는 0으로 종료될 수 있다. 그러한 입력을 종료하는 것은, 플로팅 입력이 상당한 기간 동안 전력과 접지 사이에 있는 경우, 그러한 입력이 플로팅되는 것 그리고 가능하게는 낭비되는 전류를 야기하는 것을 방지할 수 있다. mux 선택 와이어는 또한 스터브 영역(G22)으로부터 제공될 수 있고, 이진 0(VSS) 또는 이진 1(VDD)로 종료될 수 있으며, 이는 mux가 로컬 와이어를 선택하게 할 수 있다. (예를 들어, 전체 또는 더 큰 부분 인스턴스에) 입력 와이어의 소스 회로 컴포넌트가 존재할 때, mux 선택 와이어는 소스 회로 컴포넌트(도 76의 점선)로부터 제공될 수 있다. 그러한 경우, mux 선택 와이어는 동작 동안 원하는 대로 로컬 입력과 소스 회로 컴포넌트로부터의 입력 사이에서 선택할 수 있는 동적 신호일 수 있거나, 또는 스터브 영역(G22) 내의 mux 선택 와이어와 비교하여 반대 이진 값에 연결될 수 있다.
따라서, 방법의 일 실시예에서, 전체 인스턴스는, 제1 하위 영역 내의 복수의 회로 컴포넌트들에 대한 복수의 입력들인 복수의 출력들을 포함할 수 있는, 제2 하위 영역 내의 다른 복수의 회로 컴포넌트들을 포함할 수 있다. 복수의 회로 컴포넌트들은 입력들로서 복수의 입력들의 각각의 입력들을 갖는 복수의 멀티플렉서 회로들을 포함할 수 있다. 방법은 스터브 영역에서, 복수의 멀티플렉서 회로들에 대한 복수의 선택 신호들을 표현하는 단계를 포함할 수 있다. 복수의 선택 신호들은, 복수의 입력들이 연결되는 mux 입력들과 상이한 복수의 멀티플렉서 회로들의 입력을 선택하는 이진 값으로 스터브 영역 내에서 종료될 수 있다. 일 실시예에서, 복수의 선택 신호들은 상이한 이진 값으로 제2 하위 영역에서 종료될 수 있다.
일 실시예에서, 집적 회로는 집적 회로를 형성하는 반도체 기판의 표면 상에 물리적으로 배열된 복수의 회로 컴포넌트들을 포함할 수 있다. 복수의 회로 컴포넌트들은 복수의 멀티플렉서 회로들을 포함하며, 복수의 멀티플렉서 회로들의 주어진 멀티플렉서 회로는 제1 입력 와이어, 제2 입력 와이어, 및 선택 제어 와이어를 갖는다. 집적 회로는 표면의 단일 에지를 따르는 영역을 더 포함할 수 있고, 영역은 선택 제어 와이어의 전기 소스이고, 제2 입력 와이어들은 표면의 단일 에지에 도달하고 연결되지 않으며, 선택 제어 와이어들은 집적 회로의 공급 와이어들에 전기적으로 연결된다. 사용 동안 공급 와이어들 상의 전압은 복수의 멀티플렉서 회로들로 하여금 제1 입력 와이어들을 복수의 멀티플렉서 회로들의 출력들로서 선택하게 하는 디지털 로직 레벨에 대응한다.
이제 도 77을 참조하면, 칩(G18)의 전체 인스턴스들일 수 있는 한 쌍의 집적 회로들(G76 및 G78)의 일 실시예의 블록도가 도시된다. 촙 라인들(G20A-G20B)은 집적 회로(G76)에 대해 도시되고, 집적 회로(G76)의 특정한 추가적인 세부사항들이 실시예에 대해 도시된다. 특히, 집적 회로(G76)는 집적 회로(G76)에서 통신 네트워크의 일부일 수 있는 복수의 네트워크 스위치들(G70A-G70H)을 포함할 수 있다. 통신 네트워크는 회로 컴포넌트들의 예일 수 있고, 다른 회로 컴포넌트들(예를 들어, 프로세서들, 메모리 제어기들, 주변기기들 등) 사이의 통신을 제공하도록 구성될 수 있다.
네트워크 스위치들(G70A-G70H)은 링, 메시, 스타 등과 같은 임의의 토폴로지를 사용하여 서로 커플링될 수 있다. 주어진 통신 메시지 또는 패킷이 네트워크 스위치(G70A-G70H)에서 수신될 때, 네트워크 스위치(G70A-G70H)는 패킷을 자신의 목적지를 향해 이동시키기 위해 패킷이 어느 출력 상에서 송신될지를 결정할 수 있다. 방향은, 네트워크 스위치들이 집적 회로의 어느 인스턴스 상에 제조되었는지에 의존할 수 있다.
예를 들어, 전체 인스턴스가 제조되면, 네트워크 스위치(G70E)와 같은 주어진 네트워크 스위치는 도 77에 도시된 바와 같이 상향 또는 하향으로 패킷을 송신할 수 있다(또는, 네트워크 스위치(G70E)에 커플링된 도시되지 않은 다른 회로 컴포넌트가 패킷의 타겟인 경우, 네트워크 스위치(G70E)는 패킷을 그 회로 컴포넌트에 송신할 수 있다). 그러나, 부분 인스턴스가 촙 라인(G20A)에 기초하여 형성되면, 네트워크 스위치(G70E)는 거기에 수신 회로가 없기 때문에 하향으로 패킷들을 송신하지 않을 수 있다. 유사하게, 네트워크 스위치(G70F)는 그 시나리오에서 하향으로 패킷들을 송신하지 않을 수 있다. 부분 인스턴스가 촙 라인(G20B)에 기초하여 형성되면, 네트워크 스위치들(G70C 및 G70D)은 하향 방향으로 패킷들을 송신하지 않을 수 있다.
따라서, 네트워크 스위치들(G70A-G70H) 중 적어도 일부의 동작은 인스턴스에 의존할 수 있다. 차이들을 관리하기 위한 다수의 방식들이 있을 수 있다. 예를 들어, 스위치들에 대한 입력은 인스턴스(전체 인스턴스에 대해 스터브 영역들에 의해 또는 촙 라인(20B) 아래의 영역 내의 회로 컴포넌트에 의해 출력됨)를 특정할 수 있다. 예시된 실시예에서, 라우팅 테이블 또는 다른 프로그래밍가능 자원(G74)이 각각의 네트워크 스위치(70A-70H)에 포함될 수 있다. 라우팅 테이블(G74)은 제자리에 있는 인스턴스에 기초하여 (예를 들어, 부트 코드 또는 다른 펌웨어에 의해) 초기화 시에 프로그래밍될 수 있다.
유사하게, 다양한 인스턴스들은 상이한 수들의 메모리 제어기들을 가질 수 있다(예를 들어, 제거된 하위 영역들의 회로 컴포넌트들은 메모리 제어기들을 포함할 수 있고, 나머지 하위 영역들에는 추가적인 메모리 제어기들이 존재할 수 있다). 메모리 어드레스 공간은 메모리 제어기들 상에 맵핑될 수 있고, 따라서 맵핑은 주어진 전체 또는 부분 인스턴스에 실제로 존재하는 메모리 제어기들의 수에 기초하여 변할 수 있다. 메모리 동작 패킷들을 반송하는 네트워크 스위치들(G70A-G70H)은 또한 프로그래밍가능 자원을 사용하여 어드레스 맵핑을 설명하는 데이터로 프로그래밍가능할 수 있다. 적절히 동작하기 위해 어드레스 맵핑을 통지받을 필요가 있을 수 있는 다른 회로 컴포넌트들은 유사하게 프로그래밍가능 자원을 가질 수 있다.
예시된 실시예에서, 한 쌍의 집적 회로들(G76 및 G78)은 서로 통신하고, 이들이 하나의 집적 회로 다이인 것처럼 동작하도록 구성될 수 있다. 예를 들어, 각각의 집적 회로(G76 및 G78) 상의 네트워크 스위치들(G70A-G70H)은 집적 회로들(G76 및 G78)에 걸쳐 하나의 통신 상호연결부를 형성하기 위해 다이 투 다이(D2D) 인터페이스 회로(G72)를 통해 통신하도록 구성될 수 있다. 따라서, 어느 하나의 집적 회로 다이 상에서 발생하는 패킷은 다른 집적 회로 다이 상에 목적지를 가질 수 있고, D2D 인터페이스 회로들(G72)을 통해, 끊김없이 그리고 따라서 시스템에서 실행되는 소프트웨어에 본질적으로 보이지 않게 타겟에 송신될 수 있다. D2D 인터페이스 회로들(G72)은 도 1에 도시된 D2D 회로(26)의 예들일 수 있다.
집적 회로의 부분 인스턴스들이 전체 미만의 회로 인스턴스를 포함하기 때문에, 부분 인스턴스들 각각으로부터 제거될 수 있는 컴포넌트 회로들 중 하나는 D2D 인터페이스 회로(G72)이다. 즉, D2D 인터페이스 회로(G72)는 (예를 들어, 예시된 실시예에서 촙 라인(G20A) 아래의) 부분 인스턴스들 각각으로부터 제거되는 하위 영역에서 인스턴스화될 수 있다.
도 78은 전체 및 부분 인스턴스들을 지원하는 집적 회로의 일 실시예에 대한 설계 및 확인/검증 방법의 다양한 부분들을 예시하는 흐름도이다. 전체 인스턴스에 대한 설계 데이터베이스는 도 78의 최상부 중심에 도시된다(참조 번호 G80). 부분 인스턴스들에 대한 설계 데이터베이스들은 전체 인스턴스의 좌측 및 우측에 도시된다(참조 번호들 G82 및 G84). 설계 데이터베이스들(G82 및 G84)은, 도 78에 도시된 바와 같이 대응하는 스터브 영역들(G22 및 G24)과 함께, 화살표들(G86 및 88)로 표시된 바와 같이, 설계 데이터베이스(G80)로부터 그러한 집적 회로들을 형성하는 하위 영역들에 대한 콘텐츠를 인출한다.
데이터베이스들(G80, G82, 및 G84)은, 설계들이 타이밍 요건들을 충족함을 검증하기 위한 정적 타이밍 분석(블록(G90)), 설계들이 다양한 물리적 설계 규칙들을 충족함을 검증하기 위한 물리적 검증(블록(G92)), 및 설계들이 (전체 인스턴스와 부분 인스턴스 사이에서 다를 수 있는, 각각의 설계에 대해 사용될 패키지와 함께) 전력 그리드 안정성, 임피던스 등과 같은 전기적 요건들을 충족함을 검증하기 위한 전기적 검증(블록(G94))을 사용하여 분석될 수 있다. 물리적 설계 규칙들은 디바이스들 사이의 최소 간격들 및/또는 배선 층들에서의 배선, 디바이스 크기들 등과 같은 특징들을 포함할 수 있다. 물리적 설계 규칙들은 또한, 전술된 바와 같이 코너 배제, C4 범프 배제들 등을 포함할 수 있다. 추가적으로, 일 실시예에서, 부분 인스턴스들에서 연결되지 않은 회로 컴포넌트들로부터의 출력들로 인해, 다루어질 추가적인 "안테나" 규칙들이 존재할 수 있다.
다양한 검증 단계들의 결과들은 검토되고, 다양한 검증들의 후속 실행들(분류 ECO 블록들(G96, G98, G100))에서 결과들을 개선할 것으로 예상될 수 있는 설계 변경들(엔지니어링 변경 명령, 즉, ECO들)에 대해 분류될 수 있다. ECO들은, 어느 인스턴스가 ECO를 초래하였는지와 무관하게, 설계 데이터베이스(G80)(화살표들(G102, G104, 및 G106))에서 구현될 수 있다. 따라서, 설계에 필요한 최악의 경우의 정정이 부분 인스턴스들 중 하나로부터 기인한 경우, 설계 데이터베이스(G80)는 다소 과잉설계될 수 있다. 설계 데이터베이스들(G82 및 G84)은, 부분 인스턴스들에 포함된 하위 영역에서 변경들이 이루어진 경우들에서, 부분 인스턴스들을 업데이트하기 위해 변경들이 이루어진 후에, 설계 데이터베이스(G80)로부터 추출될 수 있다.
다양한 검증들이 완료되면(클린 블록들(G108, G110, 및 G112)), 전체 인스턴스 및 부분 인스턴스들에 대해 테이프 아웃들이 수행될 수 있어서(블록들(G114, G116, 및 G118)), 각각의 인스턴스에 대한 데이터 세트들을 초래한다(블록들(G120, G122 및 G124)).
다양한 실시예들에서 추가적인 분석 및 설계 흐름들이 있을 수 있지만, 유사하게, 다양한 설계 노력들에 의해 식별된 임의의 ECO들이 전체 인스턴스 설계 데이터베이스(G80)에서 구현되고, 이어서, 부분 설계 데이터베이스들(G82 및 G84)로 추출될 수 있다.
집적 회로 설계의 전체 및 부분적 인스턴스들에 대한 지원에 의해 영향을 받을 수 있는 집적 회로 설계 방법의 다른 영역은 설계 검증(DV)이다. DV는 일반적으로, 설계가 예상대로 동작하고 설계에 대한 기능 및/또는 성능 요건들을 충족함을 보장하기 위해, 주어진 회로 컴포넌트와 같은 집적 회로 설계 또는 그 일부를 테스트하는 것을 포함한다. 예를 들어, DV는 예상 결과들에 대해 설계 및 측정 동작을 자극하기 위한 테스트 벤치를 정의하는 것을 포함할 수 있다. 테스트 벤치는, 예를 들어, 자극을 설명하는 추가적인 HDL 코드를 포함할 수 있다. 설계의 모든 인스턴스들에 대해 DV를 수행하기 위한 상당한 재작업 및 추가적인 자원들을 회피하기 위해, 각각의 인스턴스를 커버하는 구성가능한 테스트 벤치 환경이 정의될 수 있다. 컴포넌트 레벨에서, 인스턴스들 사이의 칩-레벨 차이들의 재현은 컴포넌트들을 테스트하기 위해 사용될 수 있다.
도 79는 칩-레벨 DV에 대한 테스트 벤치 배열의 일 실시예를 예시하는 블록도이다. 테스트 벤치는 이러한 예에서 Chip1(전체 인스턴스), Chip2(부분 인스턴스) 또는 Chip3(부분 인스턴스)이 되도록 선택될 수 있는 정의 진술($DEFINE)을 포함할 수 있는 테스트 최상위 레벨(G170)을 포함할 수 있다. 즉, 주어진 시뮬레이션에 대해, $DEFINE 진술은 테스트되고 있는 인스턴스(라벨들 Chip1, Chip2, 또는 Chip3 중 하나)로 설정될 수 있다. 테스트 최상위 레벨(G170)은 테스트 중인 디바이스(DUT)(G172)(예를 들어, 그 부분 및 전체 인스턴스들의 집적 회로) 및 테스트 벤치(TB)(G174)를 더 포함할 수 있다.
DUT(G172)는 인스턴스들 각각에 포함된 집적 회로의 부분(예를 들어, 이 예에서는 각각의 인스턴스에 공통인 회로 컴포넌트들(G10A-G10B))을 포함할 수 있다. 공통 부분(G176)은 주어진 시뮬레이션에 대해 DUT(G172)에 조건 없이 포함될 수 있다. 주어진 시뮬레이션에서 어느 인스턴스가 테스트되고 있는지에 따라 3개의 추가 부분들 중 하나가 조건부로 포함될 수 있다. 예를 들어, 칩 1이 테스트되고 있을 때(그리고 이에 따라 $DEFINE 진술이 Chip1을 언급함), 다른 회로 컴포넌트들(G10C-G10D)이 포함될 수 있다(참조 번호 G178). 칩 2가 테스트되고 있다면(그리고 그에 따라 $DEFINE 진술이 Chip2를 언급하면), 회로 컴포넌트(G10C) 및 스터브(G24)가 포함될 수 있다(참조 번호 G180). 칩 3이 테스트되고 있다면(그리고 그에 따라 $DEFINE 진술이 Chip3을 언급하면), 스터브(G22)가 포함될 수 있다(참조 번호 G182).
테스트 벤치(G174)는 $DEFINE 진술에 기초하여 유사하게 구성가능할 수 있다. 테스트 벤치(G174)는 공통 부분(G176)에 대응하는 공통 부분(G184)(예를 들어, 공통 부분(G176)에 대한 자극)을 포함할 수 있다. 다른 부분들(G184, G186, 또는 G188)은 각각 Chip1, Chip2 및 Chip3을 인용하는 $DEFINE 진술에 기초하여 선택적으로 포함될 수 있다.
대응하는 부분들(G178, G180, 및 G182)에 대한 자극이 각각 포함될 수 있다. 즉, 회로 컴포넌트들(G10C-G10D)의 조합에 대한 자극이 부분(G186)에 포함될 수 있고; 회로 컴포넌트(G10C)와 스터브(G24)의 조합에 대한 자극은 부분(G188)에 포함될 수 있고; 스터브(G22)에 대한 자극은 부분(G190)에 포함될 수 있다. 일 실시예에서, 스터브(G22)가 임의의 능동 회로부를 포함하지 않을 수 있기 때문에, 부분(G190)은 생략될 수 있다. 대안적으로, 공통 부분(G176)에서의 동작의 차이들은 부분(G190)에서의 캡처들일 수 있다.
따라서, 테스트 최상위 레벨(G170)의 동일한 전체 셋업은 설계를 선택하기 위한 $DEFINE 진술의 변화만으로 설계의 임의의 인스턴스의 시뮬레이션을 가능하게 한다.
도 80은 복제를 통한 회로 컴포넌트-레벨 테스트의 예를 예시한다. 이 예에서, 회로 컴포넌트(G10C)와 회로 컴포넌트(G10B) 사이에 특정 입력들/출력들(예를 들어, 인터페이스)을 갖는 칩(1)이 도시된다. 회로 컴포넌트들(G10A 및 G10D) 중 다른 것들 사이의 다른 인터페이스들이 회로 컴포넌트(G10B)에 의해 수신되지만, 이들은 간략화를 위해 도 80에 예시되지 않는다.
따라서, 회로 컴포넌트(G10B)에 대한 테스트 배열은 DUT의 회로 컴포넌트(G10B)(참조 번호 G192)를 포함할 수 있다. 회로 컴포넌트(G10B)와 회로 컴포넌트(G10C) 사이의 인터페이스는 테스트 벤치(G194)에서 회로 컴포넌트(G10C)의 모델을 통해 모델링될 수 있다. 모델은 회로 컴포넌트(G10C)의 거동 모델일 수 있다. 대안적으로, 모델은, 인터페이스 상에서 회로 컴포넌트(G10C)의 동작을 충실하게 재현하지만 많은 내부 동작들을 생략할 수 있는 회로 컴포넌트(G10C)의 버스 기능 모델일 수 있다. 임의의 모델이 사용될 수 있다. 테스트 배열은 칩 3 배열을 테스트하기 위해 복제될 수 있으며, 예를 들어, 여기서 회로 컴포넌트(G10C)로부터 소싱된, 인터페이스 상의 회로 컴포넌트(G10B)에 대한 다양한 입력 신호들을 타이 업 및 타이 다운하기 위해 스터브(G22)가 포함된다. 재현된 배열은 DUT(G192), 및 스터브(G22)의 타이 업들 및 타이 다운들을 인스턴스화하는 테스트 벤치(G196)를 포함할 수 있다.
일 실시예에서, 설계 통합(DI)이 또한 수정될 수 있다. 설계 통합은 다양한 회로 컴포넌트들(G10A-G10D)을 연결하는 것, 회로 컴포넌트들(G10A-G10D) 사이의 정확한 통신을 허용할 수 있는 임의의 필요한 "글루 로직(glue logic)"을 제공하는 것 등의 프로세스를 포함할 수 있다. 집적 회로의 상이한 인스턴스들이 테이프 아웃될 때 다양한 구성이 변할 수 있다. 예를 들어, 네트워크 스위치들(G70A-G70H)(또는 주어진 인스턴스에 포함된 스위치들의 서브세트들)을 통한 패킷들의 라우팅은 인스턴스에 의존할 수 있다. 따라서, 라우팅 테이블들(G74)의 프로그래밍은 인스턴스에 기초하여 변할 수 있다. 설계의 다른 거동들, 이를테면 전력 관리가 또한 변할 수 있다. 퓨즈들은, 거동이 스터브들(G22 또는 G24)에서의 풀업들 및 풀 다운들에 의해 적절하게 제어되지 않는 경우, 다른 회로 컴포넌트들(G10A-G10D)에서의 라우팅 테이블들(G74) 또는 다양한 구성 레지스터들의 인스턴스 및 그에 따른 프로그래밍을 식별하기 위해 사용될 수 있다.
퓨즈들은 스터브들의 일부일 수 있거나, 또는 회로 컴포넌트들(G10A-GG10D)에 포함될 수 있고, 주어진 인스턴스에 대해 선택적으로 끊어질 수 있다.
도 81은 집적 회로에 대한 설계 및 제조 방법의 일 실시예를 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 독립적인 블록들은 병렬로 수행될 수 있다.
방법은 집적 회로 설계에 대응하는 설계 데이터베이스에서, 반도체 기판 상에 제조될 때 집적 회로 설계에 의해 점유될 영역을 정의하는 단계(블록(G130))를 포함할 수 있다. 방법은 원하는 대로 촙 라인 또는 하나 초과의 촙 라인을 정의하는 단계를 더 포함할 수 있다. 촙 라인은 영역을 제1 하위 영역 및 제2 하위 영역으로 구획할 수 있고, 제1 하위 영역 및 제2 하위 영역의 조합은 집적 회로의 전체 인스턴스를 표현하고, 제1 하위 영역 및 스터브 영역은 전체 인스턴스보다 적은 회로 컴포넌트들을 포함하는 집적 회로의 부분 인스턴스를 표현한다(블록(G132)). 방법은 설계 데이터베이스에서, 제1 하위 영역 내의 집적 회로의 전체 인스턴스 및 부분 인스턴스 둘 모두에 포함된 복수의 회로 컴포넌트들의 물리적 위치를 표현하는 단계를 더 포함할 수 있다(블록(G134)). 일 실시예에서, 제1 하위 영역 내의 복수의 회로 컴포넌트들 및 제1 하위 영역 내의 복수의 회로 컴포넌트들의 상호연결부의 상대적 위치는 전체 인스턴스 및 부분 인스턴스에서 변경되지 않는다. 방법은 설계 데이터베이스에서, 전체 인스턴스에 포함되지만 제2 하위 영역의 부분 인스턴스로부터 배제된 다른 복수의 회로 컴포넌트들의 물리적 위치를 표현하는 단계를 더 포함할 수 있다(블록(G136)). 방법은 설계 데이터베이스의 스터브 영역에서, 그렇지 않으면 제1 하위 영역과 제2 하위 영역 사이의 촙 라인을 횡단할 와이어들에 대한 종단들을 정의하여, 부분 인스턴스에서 제2 하위 영역의 부재 시에 제1 하위 영역 내의 복수의 회로 컴포넌트들의 정확한 동작을 보장하는 단계를 더 포함할 수 있다(블록(G138)). 방법은 제1 하위 영역 및 제2 하위 영역을 사용하여 전체 인스턴스에 대한 제1 데이터 세트를 생성하는 단계를 더 포함할 수 있다(블록(G140)). 제1 데이터 세트는 전체 인스턴스를 제조하기 위한 전체 인스턴스를 정의할 수 있다. 방법은 제1 하위 영역 및 스터브 영역을 사용하여 부분 인스턴스에 대한 제2 데이터 세트를 생성하는 단계를 더 포함할 수 있고, 제2 데이터 세트는 부분 인스턴스의 제조를 위한 부분 인스턴스를 정의한다(블록(G142)). 방법은 각각 제1 및 제2 데이터 세트들에 기초하여 전체 및 부분 인스턴스들을 제조하는 단계를 더 포함할 수 있다(블록(G144)).
일 실시예에서, 스터브 영역은 회로부를 배제할 수 있다. 예를 들어, 스터브 영역은 반도체 기판의 표면 영역 위의 하나 이상의 금속화 층들에 배선만을 포함할 수 있다. 일 실시예에서, 제2 하위 영역 내의 다른 복수의 회로 컴포넌트들은 제1 하위 영역 내의 복수의 회로 컴포넌트들에 대한 복수의 입력들인 복수의 출력들을 포함할 수 있다. 복수의 회로 컴포넌트들은 입력들로서 복수의 입력들의 각각의 입력들을 갖는 복수의 멀티플렉서 회로들을 포함할 수 있다. 방법은 스터브 영역에서, 복수의 멀티플렉서 회로들에 대한 복수의 선택 신호들을 표현하는 단계를 더 포함할 수 있다. 복수의 선택 신호들은, 복수의 입력들이 연결되는 입력들과 상이한 복수의 멀티플렉서 회로들의 입력을 선택하는 이진 값으로 스터브 영역 내에서 종료될 수 있다. 복수의 선택 신호들은 상이한 이진 값으로 제2 하위 영역에서 종료될 수 있다.
일 실시예에서, 방법은 반도체 기판의 각각의 코너들에서 복수의 배제 구역들을 정의하는 단계를 더 포함할 수 있다. 회로 컴포넌트들은 집적 회로를 제조하는 데 이용될 제조 프로세스의 기계적 요건들에 따라 복수의 배제 구역들로부터 배제될 수 있다. 이 방법은 촙 라인에 인접한 제1 하위 영역의 코너들에 추가적인 배제 구역들을 정의하는 단계를 또한 더 포함할 수 있어서, 부분 인스턴스는 상부에 부분 인스턴스가 형성된 반도체 기판의 각각의 코너들에 배제 구역들을 포함한다.
일 실시예에서, 방법은 제2 하위 영역에 인접한 제1 하위 영역의 에지를 따라 제2 배제 구역을 정의하는 단계를 더 포함할 수 있다. 제어된 붕괴 칩 연결(C4) 연결부들은 제2 배제 구역으로부터 배제될 수 있다. 일 실시예에서, 방법은, 제1 하위 영역에서 하나 이상의 제1 아날로그 입력들을 정의하고, 제2 하위 영역에서 하나 이상의 제2 아날로그 입력들을 정의하는 단계를 더 포함할 수 있다. 하나 이상의 제1 아날로그 입력들은 제1 하위 영역 내에 유지되고 하나 이상의 제2 아날로그 입력들은 제2 하위 영역 내에 유지된다. 일 실시예에서, 방법은 제1 하위 영역에서, 제1 하위 영역 내에서 클록들을 분배하기 위해 하나 이상의 제1 클록 트리들을 정의하는 단계, 및 제2 하위 영역에서, 제2 하위 영역과 함께 분산형 클록들에 대해 하나 이상의 제2 클록 트리들을 정의하는 단계를 포함할 수 있다. 하나 이상의 제1 클록 트리들은 전체 인스턴스에서 하나 이상의 제2 클록 트리들로부터 전기적으로 격리될 수 있다. 일 실시예에서, 방법은 설계 데이터베이스에서 제2 하위 영역에 제2 촙 라인을 정의하는 단계를 더 포함할 수 있다. 제2 칩 라인은 제2 하위 영역을 제3 하위 영역 및 제4 하위 영역으로 분할할 수 있고, 여기서 제3 하위 영역은 제1 하위 영역에 인접한다. 제3 하위 영역 및 제1 하위 영역은 집적 회로의 제2 부분 인스턴스를 표현할 수 있다. 이 방법은 제1 하위 영역, 제3 하위 영역 및 제2 스터브 영역을 사용하여 제2 부분 인스턴스에 대한 제3 데이터 세트를 생성하는 단계를 더 포함할 수 있다. 제3 데이터 세트는 제2 부분 인스턴스의 제조를 위한 제2 부분 인스턴스를 정의할 수 있다.
도 82는 집적 회로들을 제조하기 위한 방법의 일 실시예를 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 독립적인 블록들은 병렬로 수행될 수 있다.
일 실시예에서, 방법은 집적 회로 설계의 전체 인스턴스에 대한 제1 데이터 세트를 수신하는 단계를 포함할 수 있다(블록(G150)). 제1 데이터 세트는 전체 인스턴스를 제조하기 위한 전체 인스턴스를 정의할 수 있다. 전체 인스턴스는 전체 인스턴스에 의해 반도체 기판 상에 점유된 영역의 제1 하위 영역에 물리적으로 위치된 제1 복수의 회로 컴포넌트들 및 전체 인스턴스에 의해 반도체 기판 상에 점유된 영역의 제2 하위 영역에 물리적으로 위치된 제2 복수의 회로 컴포넌트들을 포함할 수 있다. 방법은 집적 회로 설계의 부분 인스턴스에 대해 제2 데이터 세트를 수신하는 단계를 더 포함할 수 있다(블록(G152)). 제2 데이터 세트는 부분 인스턴스를 제조하기 위한 부분 인스턴스를 정의할 수 있다. 부분 인스턴스는 제1 하위 영역 내의 제1 복수의 회로 컴포넌트들을 포함할 수 있고, 제1 하위 영역 내의 제1 복수의 회로 컴포넌트들 및 제1 하위 영역 내의 제1 복수의 회로 컴포넌트들의 상호연결부의 상대적 위치는 전체 인스턴스 및 부분 인스턴스에서 변경되지 않는다. 부분 인스턴스는 제1 하위 영역에 인접한 스터브 영역을 더 포함할 수 있고, 스터브 영역은, 그렇지 않으면 제1 하위 영역 및 제2 하위 영역 내의 컴포넌트들을 상호연결할 와이어들에 대한 종단들을 포함하여, 부분 인스턴스에서 제2 하위 영역의 부재 시에 제1 하위 영역 내의 제1 복수의 회로 컴포넌트들의 정확한 동작을 보장한다. 방법은 제1 데이터 세트에 기초하여 집적 회로의 제1 복수의 전체 인스턴스를 제조하는 단계(블록(G154)); 및 제2 데이터 세트에 기초하여 집적 회로의 제2 복수의 부분 인스턴스를 제조하는 단계(블록(G156))를 더 포함할 수 있다.
일 실시예에서, 스터브 영역은 회로부를 배제한다. 예를 들어, 스터브 영역은 반도체 기판의 표면 영역 위의 하나 이상의 금속화 층들에 배선만을 포함할 수 있다. 일 실시예에서, 제2 하위 영역 내의 다른 복수의 회로 컴포넌트들은 제1 하위 영역 내의 제1 복수의 회로 컴포넌트들에 대한 복수의 입력들인 복수의 출력들을 포함하고, 제1 복수의 회로 컴포넌트들은 입력들로서 복수의 입력들의 각각의 입력들을 갖는 복수의 멀티플렉서 회로들을 포함한다. 스터브 영역은 복수의 멀티플렉서 회로들에 대한 복수의 선택 신호들을 더 포함할 수 있다. 일 실시예에서, 복수의 선택 신호들은, 복수의 입력들이 연결되는 입력들과 상이한 복수의 멀티플렉서 회로들의 입력을 선택하는 이진 값으로 스터브 영역 내에서 종료된다. 복수의 선택 신호들은 전체 인스턴스에서 상이한 이진 값으로 제2 하위 영역에서 종료될 수 있다.
일 실시예에서, 제1 데이터 세트는 반도체 기판의 각각의 코너들에서 복수의 배제 구역들을 포함할 수 있다. 회로 컴포넌트들은 집적 회로를 제조하는 데 이용될 제조 프로세스의 기계적 요건들에 따라 복수의 배제 구역들로부터 배제될 수 있다. 제1 데이터 세트는 제2 하위 영역에 인접한 제1 하위 영역의 코너들에 추가적인 배제 구역들을 더 포함할 수 있어서, 부분 인스턴스는 상부에 부분 인스턴스가 형성된 반도체 기판의 각각의 코너들에 배제 구역들을 포함한다. 일 실시예에서, 제1 데이터 세트는 제2 하위 영역에 인접한 제1 하위 영역의 에지를 따라 제2 배제 구역을 더 포함할 수 있고, 제어된 붕괴 칩 연결(C4) 연결부들은 제2 배제 구역에서 배제된다. 일 실시예에서, 제1 데이터 세트는 제1 하위 영역 내의 하나 이상의 제1 아날로그 입력들 및 제2 하위 영역 내의 하나 이상의 제2 아날로그 입력들을 더 포함할 수 있다. 하나 이상의 제1 아날로그 입력은 제1 하위 영역과 함께 유지될 수 있고 하나 이상의 제2 아날로그 입력들은 제2 하위 영역 내에 유지된다. 일 실시예에서, 제1 데이터 세트는 제1 하위 영역 내에 클록들을 분배하기 위한 하나 이상의 제1 클록 트리들 및 제2 하위 영역과 함께 분산형 클록들에 대한 하나 이상의 제2 클록 트리들을 더 포함할 수 있고, 하나 이상의 제1 클록 트리들은 전체 인스턴스에서 하나 이상의 제2 클록 트리들로부터 전기적으로 격리된다.
컴퓨터 시스템
다음을 참조하면, 시스템(700)의 일 실시예의 블록도가 도시된다. 예시된 실시예에서, 시스템(700)은 하나 이상의 주변기기들(704) 및 외부 메모리(702)에 커플링된 시스템 온 칩(SOC)(10)의 적어도 하나의 인스턴스를 포함한다. SOC(10)에 공급 전압들을 공급할 뿐만 아니라, 메모리(702) 및/또는 주변기기들(154)에 하나 이상의 공급 전압들을 공급하는 전력 공급부(PMU)(708)가 제공된다. 일부 실시예들에서, SOC(10)의 1개 초과의 인스턴스가 포함될 수 있다(그리고 1개 초과의 메모리(702)가 또한 포함될 수 있다). 일 실시예에서, 메모리(702)는 도 1에 예시된 메모리들(12A-12m)을 포함할 수 있다.
주변기기들(704)은 시스템(700)의 유형에 의존하여 임의의 원하는 회로부를 포함할 수 있다. 예를 들어, 일 실시예에서, 시스템(700)은 모바일 디바이스(예를 들어, 개인 휴대 정보 단말기(personal digital assistant, PDA), 스마트 폰 등)일 수 있고, 주변기기들(704)은 Wi-Fi, 블루투스(Bluetooth), 셀룰러, 글로벌 포지셔닝 시스템 등과 같은 다양한 유형들의 무선 통신용 디바이스들을 포함할 수 있다. 주변기기들(704)은 또한 RAM 저장소, 솔리드 스테이트 저장소(solid state storage) 또는 디스크 저장소를 포함하는 부가적인 저장소를 포함할 수 있다. 주변기기들(704)은 사용자 인터페이스 디바이스들, 예컨대 터치 디스플레이 스크린들 또는 멀티터치 디스플레이 스크린을 포함한 디스플레이 스크린, 키보드 또는 다른 입력 디바이스, 마이크로폰, 스피커 등을 포함할 수 있다. 다른 실시예들에서, 시스템(700)은 임의의 타입의 컴퓨팅 시스템(예컨대 데스크톱 개인용 컴퓨터, 랩톱, 워크스테이션, 넷톱 등)일 수 있다.
외부 메모리(702)는 임의의 유형의 메모리를 포함할 수 있다. 예를 들어, 외부 메모리(702)는 SRAM, 동적 RAM(DRAM), 예컨대, 동기식 DRAM(synchronous DRAM, SDRAM), 더블 데이터 레이트(double data rate)(DDR, DDR2, DDR3 등) SDRAM, RAMBUS DRAM, 저전력 버전들의 DDR DRAM(예를 들어, LPDDR, mDDR 등) 등일 수 있다. 외부 메모리(702)는 메모리 디바이스들이 장착되는 하나 이상의 메모리 모듈들, 예컨대, 단일 인라인 메모리 모듈(single inline memory module, SIMM)들, 듀얼 인라인 메모리 모듈(dual inline memory module, DIMM)들 등을 포함할 수 있다. 대안적으로, 외부 메모리(702)는 칩-온-칩(chip-on-chip) 또는 패키지-온-패키지(package-on-package) 구현예로 SOC(10) 상에 장착되는 하나 이상의 메모리 디바이스들을 포함할 수 있다.
예시된 바와 같이, 시스템(700)은 광범위한 영역들의 애플리케이션을 갖는 것으로 도시되어 있다. 예를 들어, 시스템(700)은 데스크톱 컴퓨터(710), 랩톱 컴퓨터(720), 태블릿 컴퓨터(730), 셀룰러 또는 모바일 폰(740), 또는 텔레비전(750)(또는 텔레비전에 커플링된 셋톱 박스)의 칩들, 회로부, 컴포넌트들 등의 부분으로서 이용될 수 있다. 스마트워치 및 건강 모니터링 디바이스(760)가 또한 예시된다. 일부 실시예들에서, 스마트워치는 다양한 범용 컴퓨팅 관련 기능들을 포함할 수 있다. 예를 들어, 스마트워치는 이메일, 셀폰 서비스, 사용자 캘린더 등에 대한 액세스를 제공할 수 있다. 다양한 실시예들에서, 건강 모니터링 디바이스는 전용 의료 디바이스일 수 있거나, 또는 그렇지 않으면 전용 건강 관련 기능을 포함할 수 있다. 예를 들어, 건강 모니터링 디바이스는 사용자의 바이탈 사인(vital sign)들을 모니터링하고, 역학적인 사회적 거리두기의 목적을 위해 다른 사용자들에 대한 사용자의 근접도를 추적하고, 접촉을 추적하고, 건강 위험의 경우 응급 서비스에 통신을 제공하는 등일 수 있다. 다양한 실시예들에서, 위에서 언급된 스마트워치는 일부 또는 임의의 건강 모니터링 관련 기능들을 포함할 수 있거나 포함하지 않을 수 있다. 목부 주위에 착용된 디바이스들, 인체에서 이식가능한 디바이스들, 증강 및/또는 가상 현실 경험을 제공하도록 설계된 안경 등과 같은 다른 웨어러블 디바이스들이 또한 고려된다.
시스템(700)은 클라우드 기반 서비스(들)(770)의 일부로서 추가로 사용될 수 있다. 예를 들어, 이전에 언급된 디바이스들, 및/또는 다른 디바이스들은 클라우드 내의 컴퓨팅 자원들(즉, 원격으로 위치된 하드웨어 및/또는 소프트웨어 자원들)에 액세스할 수 있다. 더 추가적으로, 시스템(700)은 이전에 언급된 것들 이외의 홈(home)의 하나 이상의 디바이스들에서 이용될 수 있다. 예를 들어, 홈 내의 기기들은 주의를 요하는 조건들을 모니터링하고 검출할 수 있다. 예를 들어, 홈 내의 다양한 디바이스들(예를 들어, 냉장고, 냉각 시스템 등)은 디바이스의 상태를 모니터링하고, 특정 이벤트가 검출되면 경보를 집주인(또는 예를 들어, 수리 설비)에게 제공할 수 있다. 대안적으로, 서모스탯(thermostat)은 홈 내의 온도를 모니터링할 수 있고, 집주인에 의한 다양한 조건들에 대한 응답들의 이력에 기초하여 가열/냉각 시스템에 대한 조정들을 자동화할 수 있다.
또한, 다양한 운송 모드들에 대한 시스템(700)의 적용이 도 83에 예시되어 있다. 예를 들어, 시스템(700)은 항공기, 기차들, 버스들, 임대용 자동차들, 개인용 자동차들, 개인용 보트들로부터 유람선(cruise liner)들까지의 수상 선박들, (대여 또는 소유를 위한) 스쿠터들 등의 제어 및/또는 엔터테인먼트 시스템들에서 사용될 수 있다. 다양한 경우들에서, 시스템(700)은 자동화된 안내(예를 들어, 자율-주행 차량들), 일반적인 시스템 제어 등을 제공하기 위해 사용될 수 있다. 이들 임의의 많은 다른 실시예들이 가능하고 고려된다. 도 83에 예시된 디바이스들 및 애플리케이션들이 단지 예시적인 것이며 제한하려는 의도가 아니라는 것을 유의한다. 다른 디바이스들이 가능하고 고려된다.
컴퓨터 판독가능 저장 매체
이제 도 84를 참조하면, 컴퓨터 판독가능 저장 매체(800)의 일 실시예의 블록도가 도시된다. 일반적으로 말하면, 컴퓨터 액세스가능 저장 매체는 명령어들 및/또는 데이터를 컴퓨터에 제공하기 위하여 사용 동안 컴퓨터에 의해 액세스가능한 임의의 저장 매체를 포함할 수 있다. 예를 들어, 컴퓨터 액세스가능 저장 매체는, 자기 또는 광학 매체, 예를 들어, 디스크(고정식 또는 착탈식), 테이프, CD-ROM, DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW, 또는 블루레이(Blu-Ray)와 같은 저장 매체들을 포함할 수 있다. 저장 매체들은, RAM(예를 들어, 동기식 동적 RAM(SDRAM), 램버스 DRAM(RDRAM), 정적 RAM(SRAM) 등), ROM, 또는 플래시 메모리와 같은 휘발성 또는 비휘발성 메모리 매체들을 추가로 포함할 수 있다. 저장 매체들은 저장 매체들이 명령어들/데이터를 제공하는 컴퓨터 내에 물리적으로 포함될 수 있다. 대안적으로, 저장 매체들은 컴퓨터에 연결될 수 있다. 예를 들어, 저장 매체들은 네트워크 부착형 저장소와 같이, 네트워크 또는 무선 링크를 통해 컴퓨터에 연결될 수 있다. 저장 매체들은 USB(Universal Serial Bus)와 같은 주변기기 인터페이스를 통해 연결될 수 있다. 일반적으로, 컴퓨터 액세스가능 저장 매체(800)는 비일시적 방식으로 데이터를 저장할 수 있고, 이러한 맥락에서 비일시적은 신호 상에서 명령어들/데이터를 송신하지 않는 것을 지칭할 수 있다. 예를 들어, 비일시적 저장소는 휘발성(그리고 전력 차단에 응답하여 저장된 명령어들/데이터를 상실할 수 있음) 또는 비휘발성일 수 있다.
도 84의 컴퓨터 액세스가능 저장 매체(800)는 SOC(10)를 표현하는 데이터베이스(804)를 저장할 수 있다. 일반적으로, 데이터베이스(804)는, 프로그램에 의해 판독될 수 있고 SOC(10)를 포함하는 하드웨어를 제조하기 위해 직접적으로 또는 간접적으로 사용될 수 있는 데이터베이스일 수 있다. 예를 들어, 데이터베이스는 베릴로그(Verilog) 또는 VHDL과 같은 고레벨 설계 언어(high level design language, HDL)에서 하드웨어 기능의 거동-레벨 디스크립션(behavioral-level description) 또는 레지스터-전송 레벨(register-transfer level, RTL) 디스크립션일 수 있다. 디스크립션은 합성 라이브러리로부터의 게이트들의 목록을 포함하는 넷리스트(netlist)를 생성하기 위해 디스크립션을 합성할 수 있는 합성 도구에 의해 판독될 수 있다.
넷리스트는 SOC(10)를 포함하는 하드웨어의 기능을 또한 표현하는 한 세트의 게이트들을 포함한다. 이어서, 넷리스트는 마스크들에 적용될 기하학적 형상들을 설명하는 데이터 세트를 생성하기 위해 배치되고 라우팅될 수 있다. 이어서, 마스크들은 SOC(10)에 대응하는 반도체 회로 또는 회로들을 생성하기 위한 다양한 반도체 제조 단계들에서 사용될 수 있다. 대안적으로, 컴퓨터 액세스가능 저장 매체(800) 상의 데이터베이스(804)는, 원하는 대로, 넷리스트(합성 라이브러리가 있거나 없음) 또는 데이터 세트일 수 있다.
컴퓨터 액세스가능 저장 매체(800)가 SOC(10)의 표현을 저장하지만, 다른 실시예들은 도 1 내지 도 82와 관련하여 위에서 설명된 다양한 실시예들 중 임의의 실시예 및 위에서 설명된 실시예의 임의의 조합 또는 서브세트를 포함하여, 원하는 대로, SOC(10)의 임의의 부분의 표현을 반송할 수 있다.
도 84에 예시된 바와 같이, 컴퓨터 액세스가능 저장 매체(800)는 가상 메모리 페이지 할당기(806) 및 메모리 모니터 및 폴드/언폴드 코드(808) 중 하나 이상을 추가로 저장할 수 있다. 가상 메모리 페이지 할당기(806)는, 하나 이상의 SOC들(F10)을 포함하는 본 명세서에 기술된 다양한 컴퓨터 시스템들과 같은 컴퓨터 상에서 실행될 때(그리고 더 구체적으로 P 클러스터들(F14A-F14B) 중 하나 이상 내의 프로세서 상에서 실행될 때), 컴퓨터로 하여금 (예컨대, 도 63 내지 도 66과 관련하여) 가상 메모리 페이지 할당기에 대해 전술한 것들을 포함하는 동작들을 수행하게 하는 명령어들을 포함할 수 있다. 유사하게, 메모리 모니터 및 폴드/언폴드 코드(F808)는, 하나 이상의 SOC들(F10)을 포함하는 본 명세서에 기술된 다양한 컴퓨터 시스템들과 같은 컴퓨터 상에서 실행될 때(그리고 더 구체적으로 P 클러스터들(F14A-F14B) 중 하나 이상 내의 프로세서 상에서 실행될 때), 컴퓨터로 하여금 (예컨대, 도 63 내지 도 66과 관련하여) 메모리 모니터 및 폴드/언폴드 코드에 대해 전술한 것들을 포함하는 동작들을 수행하게 하는 명령어들을 포함할 수 있다.
또한 도 68에 예시된 바와 같이, 도 15의 컴퓨터 액세스가능 저장 매체(800)는 집적 회로(G18)의 전체 인스턴스 및 집적 회로(G18)의 부분 인스턴스들을 표현하는 데이터베이스들(812, 814 및 816)을 저장할 수 있다. 데이터베이스(802)와 유사하게, 데이터베이스들(812, 814, 및 816)은, 프로그램에 의해 판독될 수 있고 인스턴스들을 포함하는 하드웨어를 제조하기 위해 직접적으로 또는 간접적으로 사용될 수 있는 데이터베이스일 수 있다.
***
본 개시내용은 "실시예" 또는 "실시예들의 그룹들"(예를 들어, "일부 실시예들" 또는 "다양한 실시예들")에 대한 언급들을 포함한다. 실시예들은 개시된 개념들의 상이한 구현들 또는 인스턴스들이다. "일 실시예", "하나의 실시예", "특정 실시예" 등에 대한 언급들은 반드시 동일한 실시예를 지칭하는 것은 아니다. 구체적으로 개시된 것들 뿐만 아니라, 본 개시내용의 사상 또는 범주 내에 속하는 수정들 또는 대안들을 포함하는 많은 가능한 실시예들이 고려된다.
본 개시내용은 개시된 실시예들로부터 발생할 수 있는 잠재적인 이점들을 논의할 수 있다. 이러한 실시예들의 모든 구현들이 반드시 잠재적인 이점들 중 임의의 또는 모든 것을 나타내는 것은 아닐 것이다. 특정 구현에 대해 이점이 실현되는지 여부는 많은 인자들에 의존하며, 이들 중 일부는 본 개시내용의 범위를 벗어난다. 실제로, 청구항들의 범위 내에 속하는 구현이 임의의 개시된 이점들 중 일부 또는 전부를 나타내지 않을 수 있는 많은 이유들이 있다. 예를 들어, 특정 구현은 개시된 실시예들 중 하나와 함께, 하나 이상의 개시된 이점들을 무효화하거나 약화시키는, 본 개시내용의 범주 밖의 다른 회로부를 포함할 수 있다. 더욱이, 특정 구현의 차선의 설계 실행(예를 들어, 구현 기술들 또는 도구들)은 또한 개시된 이점들을 무효화하거나 약화시킬 수 있다. 숙련된 구현을 가정하더라도, 이점들의 실현은 구현이 전개되는 환경 상황들과 같은 다른 인자들에 여전히 의존할 수 있다. 예를 들어, 특정 구현에 공급되는 입력들은 본 개시내용에서 해결되는 하나 이상의 문제들이 특정 기회에 발생하는 것을 방지할 수 있으며, 그 결과, 그 해결책의 이익이 실현되지 않을 수 있다. 본 개시내용 외부의 가능한 인자들의 존재를 고려할 때, 본 명세서에서 설명되는 임의의 잠재적인 이점들은, 침해를 입증하기 위해 충족되어야 하는 청구항 제한들로서 해석되지 않아야 한다는 것이 명백하게 의도된다. 오히려, 그러한 잠재적 이점들의 식별은 본 개시내용의 이익을 갖는 설계자들에게 이용가능한 개선의 유형(들)을 예시하도록 의도된다. 그러한 이점들이 허용가능하게 설명된다는 것(예를 들어, 특정 이점이 "발생할 수 있다"고 언급함)은 그러한 이점들이 실제로 실현될 수 있는지에 대한 의구심을 전달하도록 의도되는 것이 아니라, 그러한 이점들의 실현이 종종 부가적인 인자들에 의존한다는 기술적 현실을 인식하도록 의도된다.
달리 언급되지 않는 한, 실시예들은 비제한적이다. 즉, 개시된 실시예들은, 특정 특징에 대해 단일 예만이 설명되는 경우에도, 본 개시내용에 기초하여 작성되는 청구항들의 범위를 제한하도록 의도되지 않는다. 개시된 실시예들은, 이에 반하는 본 개시내용의 어떠한 진술도 없이, 제한적이기보다는 예시적인 것으로 의도된다. 따라서, 본 출원은 개시된 실시예들을 커버하는 청구항들뿐만 아니라, 본 개시내용의 이익을 갖는 당업자에게 명백할 그러한 대안들, 수정들 및 등가물들을 허용하도록 의도된다.
예를 들어, 본 출원에서의 특징들은 임의의 적합한 방식으로 조합될 수 있다. 따라서, 특징들의 임의의 그러한 조합에 대해 본 출원(또는 그에 대한 우선권을 주장하는 출원)의 심사 동안에 새로운 청구범위가 작성될 수 있다. 특히, 첨부된 청구항들을 참조하면, 종속 청구항들로부터의 특징들은 다른 독립 청구항들로부터 의존하는 청구항들을 포함하여, 적절한 경우 다른 종속 청구항들의 특징들과 조합될 수 있다. 유사하게, 개개의 독립 청구항들로부터의 특징들은 적절한 경우 조합될 수 있다.
따라서, 첨부된 종속 청구항들은 각각이 단일의 다른 청구항에 의존하도록 작성될 수 있지만, 부가적인 종속성들이 또한 고려된다. 본 개시내용과 일치하는 종속물에서의 특징들의 임의의 조합들이 고려되며, 이러한 또는 다른 출원에서 청구될 수 있다. 간단히 말하면, 조합들은 첨부된 청구항들에 구체적으로 열거된 것들로 제한되지 않는다.
적절한 경우, 하나의 포맷 또는 법정 유형(예를 들어, 장치)으로 작성된 청구항들은 다른 포맷 또는 법정 유형(예를 들어, 방법)의 대응하는 청구항들을 지원하도록 의도되는 것으로 또한 고려된다.
***
본 개시내용은 법적인 문서이기 때문에, 다양한 용어들 및 문구들은 행정적 및 사법적 해석의 대상이 될 수 있다. 본 개시내용 전반에 걸쳐 제공되는 정의들뿐만 아니라 다음의 단락들이 본 개시내용에 기초하여 작성되는 청구항들을 해석하는 방법을 결정하는 데 사용될 것이라는 공지가 본 명세서에 주어진다.
물품의 단수 형태(즉, "a", "an" 또는 "the"가 선행되는 명사 또는 명사 문구)에 대한 언급들은, 문맥상 명확하게 달리 지시되지 않는 한, "하나 이상"을 의미하는 것으로 의도된다. 따라서, 청구항에서 "항목"에 대한 언급은, 수반되는 상황 없이, 항목의 부가적인 인스턴스들을 배제하지 않는다. "복수"의 항목들은 항목들 중 2개 이상의 세트를 지칭한다.
"~할 수 있다"라는 단어는 본 명세서에서 강제적인 의미(즉, ~ 해야 하는)가 아니라 허용적인 의미(즉, ~할 가능성을 갖는, ~할 수 있는)로 사용된다.
용어들 "포함하는"("comprising" 및 "including") 및 이들의 형태들은 개방형(open-ended)이며, "포함하지만 이로 한정되지 않는"을 의미한다.
용어 "또는"이 옵션들의 리스트에 관하여 본 개시내용에서 사용될 때, 문맥이 달리 제공하지 않는 한, 일반적으로 포괄적인 의미로 사용되는 것으로 이해될 것이다. 따라서, "x 또는 y"의 언급은 "x 또는 y, 또는 둘 모두"와 동등하고, 따라서 1) x지만 y 아님, 2) y지만 x 아님 및 3) x 및 y 둘 모두를 커버한다. 반면에, "둘 모두가 아니라 x 또는 y 중 어느 하나"와 같은 문구는 "또는"이 배타적인 의미로 사용되고 있다는 것을 명확하게 한다.
"w, x, y, 또는 z, 또는 이들의 임의의 조합" 또는 "... w, x, y, 및 z 중 적어도 하나"의 언급은 세트 내의 요소들의 총 수까지 단일 요소를 수반하는 모든 가능성들을 커버하도록 의도된다. 예를 들어, 세트 [w, x, y, z]가 주어지면, 이러한 문구들은 세트의 임의의 단일 요소(예를 들어, w지만 x, y, 또는 z 아님), 임의의 2개의 요소들(예를 들어, w 및 x지만 y 또는 z 아님), 임의의 3개의 요소들(예를 들어, w, x 및 y지만, z 아님) 및 4개의 요소들 모두를 커버한다.
따라서, "... w, x, y, 및 z 중 적어도 하나"라는 문구는 세트 [w, x, y, z]의 적어도 하나의 요소를 지칭하고, 이로써 요소들의 이러한 리스트 내의 모든 가능한 조합들을 커버한다. 이러한 문구는 w의 적어도 하나의 인스턴스, x의 적어도 하나의 인스턴스, y의 적어도 하나의 인스턴스, 및 z의 적어도 하나의 인스턴스가 있음을 요구하도록 해석되지 않아야 한다.
본 개시내용에서 다양한 "라벨들"이 명사들 또는 명사 문구들에 선행할 수 있다. 문맥이 달리 제공하지 않는 한, 특징에 대해 사용되는 상이한 라벨들(예를 들어, "제1 회로", "제2 회로", "특정 회로", "주어진 회로" 등)은 특징의 상이한 인스턴스들을 지칭한다. 추가적으로, 특징에 적용될 때, "제1", "제2" 및 "제3" 라벨들은, 달리 언급되지 않는 한, 어떠한 유형의 순서화(예를 들어, 공간적, 시간적, 논리적 등)를 의미하지 않는다.
문구 "기초하여"는 결정에 영향을 주는 하나 이상의 인자들을 설명하기 위해 사용된다. 이러한 용어는 부가적인 인자들이 결정에 영향을 줄 수 있는 가능성을 배제하지 않는다. 즉, 결정은 단지 특정된 인자들에 기초하거나 또는 그 특정된 인자들뿐만 아니라 다른, 불특정된 인자들에 기초할 수 있다. "B에 기초하여 A를 결정한다"라는 문구를 고려한다. 이러한 문구는 B가 A를 결정하는 데 사용되거나 A의 결정에 영향을 주는 인자라는 것을 명시한다. 이러한 문구는 A의 결정이 C와 같은 일부 다른 인자에 또한 기초할 수 있음을 배제하지 않는다. 또한, 이 문구는 A가 B만에 기초하여 결정되는 실시예를 커버하도록 의도된다. 본 명세서에서 사용되는 바와 같이, "에 기초하여"라는 문구는 "적어도 부분적으로 기초하여"라는 문구와 동의어이다.
문구들 "~ 에 응답하여" 및 "~ 에 응답으로"는 효과를 트리거하는 하나 이상의 인자들을 설명한다. 이러한 문구는 부가적인 인자들이 특정된 인자들과 공동으로 또는 특정된 인자들과는 독립적으로 영향을 주거나 또는 달리 효과를 트리거할 수 있는 가능성을 배제하지 않는다. 즉, 효과는 단지 이들 인자들에만 응답할 수 있거나 또는 특정된 인자들뿐만 아니라 다른 불특정된 인자들에 응답할 수 있다. "B에 응답하여 A를 수행한다"라는 문구를 고려한다. 이러한 문구는 B가 A의 수행을 트리거하는 또는 A에 대한 특정 결과를 트리거하는 인자라는 것을 명시한다. 이러한 문구는 A를 수행하는 것이 C와 같은 일부 다른 인자에 또한 응답할 수 있음을 배제하지 않는다. 이러한 문구는 또한 A를 수행하는 것이 B와 C에 응답하여 공동으로 수행될 수 있다는 것을 배제하지 않는다. 이러한 문구는 또한 A가 B에만 응답하여 수행되는 실시예를 커버하도록 의도된다. 본 명세서에서 사용되는 바와 같이, 문구 "응답하여"는 문구 "적어도 부분적으로 응답하여"와 동의어이다. 유사하게, 문구 "~에 응답하여"는 문구 "적어도 부분적으로 응답하여"와 동의어이다.
***
본 개시내용 내에서, 상이한 엔티티들(이는, "유닛들", "회로들", 다른 컴포넌트들 등으로 다양하게 지칭될 수 있음)은 하나 이상의 태스크들 또는 동작들을 수행하도록 "구성된" 것으로 설명되거나 또는 청구될 수 있다.
이러한 표현-[하나 이상의 태스크들을 수행]하도록 구성된 [엔티티]-은 본 명세서에서 구조체(즉, 물리적인 것)를 지칭하는 데 사용된다. 더 상세하게는, 이러한 표현은 이러한 구조체가 동작 동안 하나 이상의 태스크들을 수행하도록 배열됨을 나타내는 데 사용된다. 구조체는 그 구조체가 현재 동작되고 있지 않더라도 일부 태스크를 수행하도록 "구성된다"고 말할 수 있다. 따라서, 일부 태스크를 수행"하도록 구성된" 것으로 설명된 또는 언급된 엔티티는 디바이스, 회로, 태스크를 구현하도록 실행가능한 프로그램 명령어들을 저장하는 메모리 및 프로세서 유닛을 갖는 시스템 등과 같은 물리적인 것을 지칭한다. 이러한 문구는 본 명세서에서 무형인 것을 지칭하기 위해 사용되지는 않는다.
일부 경우들에서, 다양한 유닛들/회로들/구성요소들은 태스크 또는 동작들의 세트를 수행하는 것으로 본 명세서에서 설명될 수 있다. 이들 엔티티들은, 구체적으로 언급되지 않더라도, 그러한 태스크들/동작들을 수행하도록 "구성"된다는 것이 이해된다.
용어 "~ 하도록 구성된"은 "~하도록 구성가능한"을 의미하도록 의도되지 않는다. 예를 들어, 프로그래밍되지 않은 FPGA는 특정 기능을 수행하도록 "구성된" 것으로 간주되지 않을 것이다. 그러나, 이러한 프로그래밍되지 않은 FPGA는 그 기능을 수행하도록 "구성가능"할 수 있다. 적절한 프로그래밍 후에, 이어서 FPGA는 특정 기능을 수행하도록 "구성된다"고 말할 수 있다.
본 개시내용에 기초한 미국 특허 출원들의 목적들을 위해, 구조가 하나 이상의 태스크들을 수행하도록 "구성"된다고 청구항에서 언급하는 것은 명백히 그 청구항 요소에 대하여 35 U.S.C. §112(f)를 적용하지 않도록 의도된다. 출원인이 본 개시내용에 기초하여 미국 특허 출원의 심사 동안 섹션 112(f)의 적용을 원하면, [기능을 수행]"하기 위한 수단" 구조를 이용하여 청구항 요소들을 열거할 것이다.
상이한 "회로들"이 본 개시내용에서 설명될 수 있다. 이러한 회로들 또는 "회로부"는 조합 로직, 클록킹된 저장 디바이스들(예를 들어, 플립-플롭들, 레지스터들, 래치들 등), 유한 상태 머신들, 메모리(예를 들어, 랜덤 액세스 메모리, 내장형 동적 랜덤 액세스 메모리), 프로그래밍가능 로직 어레이들 등과 같은 다양한 유형들의 회로 요소들을 포함하는 하드웨어를 구성한다. 회로부는 맞춤 설계되거나 표준 라이브러리들로부터 취해질 수 있다. 다양한 구현들에서, 회로부는 적절하게 디지털 구성요소들, 아날로그 구성요소들, 또는 둘 모두의 조합을 포함할 수 있다. 특정 유형들의 회로들은 일반적으로 "유닛들"(예를 들어, 디코드 유닛, 산술 로직 유닛(ALU), 기능 유닛, 메모리 관리 유닛(MMU) 등)로 지칭될 수 있다. 그러한 유닛들은 또한 회로들 또는 회로부를 지칭한다.
따라서, 도면들에 예시되고 본 명세서에서 설명된 개시된 회로들/유닛들/구성요소들 및 다른 요소들은 이전 단락에서 설명된 것들과 같은 하드웨어 요소들을 포함한다. 많은 경우들에서, 특정 회로 내의 하드웨어 요소들의 내부 배열은 그 회로의 기능을 설명함으로써 특정될 수 있다. 예를 들어, 특정 "디코드 유닛"은 "명령어의 오피코드(opcode)를 프로세싱하고 그 명령어를 복수의 기능 유닛들 중 하나 이상에 라우팅하는" 기능을 수행하는 것으로 설명될 수 있으며, 이는 디코드 유닛이 이러한 기능을 수행하도록 "구성됨"을 의미한다.
이러한 기능의 규격은, 컴퓨터 분야의 당업자들에게, 회로에 대한 가능한 구조체들의 세트를 암시하기에 충분하다.
다양한 실시예들에서, 이전 단락에서 논의된 바와 같이, 회로들, 유닛들, 및 이들이 구현하도록 구성된 기능들 또는 동작들에 의해 정의된 다른 요소들, 그러한 회로들/유닛들/컴포넌트들의 배열은 서로에 대해 그리고 이들이 상호작용하는 방식으로, 마이크로 아키텍처 정의의 물리적 구현을 형성하도록 집적 회로에서 궁극적으로 제조되거나 FPGA로 프로그래밍되는 하드웨어의 마이크로 아키텍처 정의를 형성한다. 따라서, 마이크로아키텍처 정의는 많은 물리적 구현들이 유도될 수 있는 구조체로서 당업자들에 의해 인식되며, 이들 모두는 마이크로아키텍처 정의에 의해 설명된 더 넓은 구조체에 속한다. 즉, 본 개시내용에 따라 공급되는 마이크로아키텍처 정의를 제공받는 당업자는, 과도한 실험 없이 그리고 통상의 기술의 적용으로, 회로들/유닛들/구성요소들의 디스크립션을 Verilog 또는 VHDL과 같은 하드웨어 디스크립션 언어(HDL)로 코딩함으로써 구조체를 구현할 수 있다. HDL 디스크립션은 종종, 기능적으로 보일 수 있는 방식으로 표현된다. 그러나, 본 분야의 당업자들에게, 이러한 HDL 디스크립션은 회로, 유닛 또는 구성요소의 구조체를 다음 레벨의 구현 세부사항으로 변환하는 데 사용되는 방식이다. 그러한 HDL 디스크립션은 (통상적으로 합성가능하지 않은) 거동 코드, (거동 코드와는 대조적으로, 통상적으로 합성가능한) 레지스터 전송 언어(RTL) 코드, 또는 구조적 코드(예를 들어, 로직 게이트들 및 그들의 연결을 특정하는 넷리스트)의 형태를 취할 수 있다. HDL 디스크립션은 주어진 집적 회로 제조 기술을 위해 설계된 셀들의 라이브러리에 대해 순차적으로 합성될 수 있고, 타이밍, 전력 및 다른 이유들로 인해 수정되어 최종 설계 데이터베이스를 생성할 수 있으며, 이는 파운드리(foundry)로 송신되어 마스크들을 생성하고 궁극적으로 집적 회로를 생성할 수 있다. 일부 하드웨어 회로들 또는 그의 부분들은 또한 회로도 편집기(schematic editor)로 맞춤 설계될 수 있고 합성된 회로부와 함께 집적 회로 설계 내로 캡처될 수 있다. 집적 회로들은 트랜지스터들, 및 다른 회로 요소들(예를 들어, 커패시터들, 저항기들, 인덕터들 등과 같은 수동 요소들) 및 트랜지스터들과 회로 요소들 사이의 상호연결부를 포함할 수 있다. 일부 실시예들은 하드웨어 회로를 구현하기 위해 함께 조합된 다수의 집적 회로들을 구현할 수 있고/있거나 일부 실시예들에서는 이산 요소들이 사용될 수 있다. 대안적으로, HDL 설계는 FPGA(Field Programmable Gate Array)와 같은 프로그래밍가능 로직 어레이로 합성될 수 있으며 FPGA에서 구현될 수 있다. 회로들의 그룹의 설계와 이들 회로들의 후속 저레벨 구현 사이의 이러한 분리는 일반적으로, 회로 또는 로직 설계자가 회로가 무엇을 하도록 구성되는지의 설명을 넘어서 저레벨 구현에 대한 특정 세트의 구조들을 결코 특정하지 않는 시나리오를 도출하는데, 이는 이러한 처리가 회로 구현 처리의 상이한 스테이지에서 수행되기 때문이다.
회로 요소들의 많은 상이한 저레벨 조합들이 회로의 동일한 규격을 구현하는 데 사용될 수 있다는 사실은 그 회로에 대한 다수의 등가 구조체들을 초래한다. 언급된 바와 같이, 이러한 저레벨 회로 구현들은 제조 기술의 변화들, 집적 회로를 제조하기 위해 선택된 파운드리, 특정 프로젝트를 위해 제공된 셀들의 라이브러리 등에 따라 변할 수 있다. 많은 경우들에서, 이들 상이한 구현들을 생성하기 위해 상이한 설계 도구들 또는 방법론들에 의해 이루어지는 선택들은 임의적일 수 있다.
게다가, 회로의 특정 기능 규격의 단일 구현이 주어진 실시예에 대해 많은 수의 디바이스들(예를 들어, 수백만 개의 트랜지스터들)을 포함하는 것이 일반적이다. 따라서, 엄청난 체적의 이러한 정보는, 등가의 가능한 구현들의 방대한 어레이는 말할 것도 없이, 단일 실시예를 구현하는 데 사용되는 저레벨 구조체의 완전한 설명을 제공하는 것을 비실용적으로 만든다. 이러한 이유로, 본 개시내용은 업계에서 일반적으로 사용되는 기능적 속기(shorthand)를 사용하여 회로들의 구조체를 설명한다.
다양한 실시예들의 추가적인 세부사항들이 다음 예들에 기재되어 있다:
1. 시스템으로서,
복수의 프로세서 코어들;
복수의 그래픽 프로세싱 유닛들;
프로세서 코어들 및 그래픽 프로세싱 유닛들과 구별되는 복수의 주변 디바이스들;
시스템 메모리와 인터페이싱하도록 구성된 하나 이상의 메모리 제어기 회로들; 및
하나 이상의 메모리 제어기 회로들과 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭을 포함하고;
프로세서 코어들, 그래픽 프로세싱 유닛들, 주변 디바이스들 및 메모리 제어기들은 통합형 메모리 아키텍처를 통해 통신하도록 구성되는, 시스템.
2. 예 1에 있어서, 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들은 통합형 메모리 아키텍처에 의해 정의된 통합형 어드레스 공간 내의 임의의 어드레스에 액세스하도록 구성되는, 시스템.
3. 예 2에 있어서, 통합형 어드레스 공간은 시스템 메모리에 의해 제공되는 물리적 어드레스 공간과 별개인 가상 어드레스 공간인, 시스템.
4. 예 1 내지 예 3 중 어느 하나에 있어서, 통합형 메모리 아키텍처는 프로세서 코어들, 그래픽 프로세싱 유닛들 및 주변 디바이스들에 의한 메모리 액세스를 위한 시맨틱들의 공통 세트를 제공하는, 시스템.
5. 예 4에 있어서, 시맨틱들은 메모리 순서화 특성들을 포함하는, 시스템.
6. 예 4 또는 예 5에 있어서, 시맨틱들은 서비스 품질 속성들을 포함하는, 시스템.
7. 예 4 내지 예 6 중 어느 하나에 있어서, 시맨틱들은 캐시 코히어런시를 포함하는, 시스템.
8. 예 1 내지 예 7 중 어느 하나에 있어서, 하나 이상의 메모리 제어기 회로들은 랜덤 액세스 메모리의 맵핑가능한 하나 이상의 메모리 디바이스들에 대한 개개의 인터페이스들을 포함하는, 시스템.
9. 예 8에 있어서, 하나 이상의 메모리 디바이스들은 동적 랜덤 액세스 메모리(DRAM)를 포함하는, 시스템.
10. 예 1 내지 예 9 중 어느 하나에 있어서, 프로세서 코어들, 그래픽 프로세싱 유닛들, 주변 디바이스들, 및 시스템 메모리 사이에 하나 이상의 레벨들의 캐시를 더 포함하는, 시스템.
11. 예 10에 있어서, 하나 이상의 메모리 제어기 회로들은 상호연결 패브릭과 시스템 메모리 사이에 개재된 개개의 메모리 캐시들을 포함하고, 개개의 메모리 캐시들은 하나 이상의 레벨들의 캐시 중 하나인, 시스템.
12. 예 1 내지 예 11 중 어느 하나에 있어서, 상호연결 패브릭은 이종 상호연결 토폴로지들을 갖는 적어도 2개의 네트워크들을 포함하는, 시스템.
13. 예 1 내지 예 12 중 어느 하나에 있어서, 상호연결 패브릭은 이종 동작 특성들을 갖는 적어도 2개의 네트워크들을 포함하는, 시스템.
14. 예 12 또는 예 13에 있어서, 적어도 2개의 네트워크들은 프로세서 코어들과 하나 이상의 메모리 제어기 회로들을 상호연결하는 코히어런트 네트워크를 포함하는, 시스템.
15. 예 12 내지 예 14 중 어느 하나에 있어서, 적어도 2개의 네트워크들은 그래픽 프로세싱 유닛들 및 하나 이상의 메모리 제어기 회로들에 커플링된 완화된 순서의 네트워크를 포함하는, 시스템.
16. 예 15에 있어서, 주변 디바이스들은 디바이스들의 서브세트를 포함하고, 서브세트는 기계 학습 가속기 회로 또는 완화된 순서의 벌크 미디어 디바이스 중 하나 이상을 포함하고, 완화된 순서의 네트워크는 추가로, 하나 이상의 메모리 제어기 회로들에 대한 디바이스들의 서브세트에 커플링되는, 시스템.
17. 예 12 내지 예 16 중 어느 하나에 있어서, 적어도 2개의 네트워크들은 주변 디바이스들과 하나 이상의 메모리 제어기 회로들을 상호연결하도록 커플링된 입력-출력 네트워크를 포함하는, 시스템.
18. 예 17에 있어서, 주변 디바이스들은 하나 이상의 실시간 디바이스들을 포함하는, 시스템.
19. 예 12 내지 예 18 중 어느 하나에 있어서, 적어도 2개의 네트워크들은 적어도 2개의 네트워크들 중 제2 네트워크와 비교하여 레이턴시를 감소시키기 위한 하나 이상의 특성들을 포함하는 제1 네트워크를 포함하는, 시스템.
20. 예 19에 있어서, 하나 이상의 특성들은 제2 네트워크보다 더 짧은 루트를 포함하는, 시스템.
21. 예 19 또는 예 20에 있어서, 하나 이상의 특성들은 제2 네트워크에 대한 배선보다 더 낮은 레이턴시 특성들을 갖는 금속 계층들에서의 배선을 포함하는, 시스템.
22. 예 12 내지 예 21 중 어느 하나에 있어서, 적어도 2개의 네트워크들은 적어도 2개의 네트워크들 중 제2 네트워크와 비교하여 대역폭을 증가시키기 위한 하나 이상의 특성들을 포함하는 제1 네트워크를 포함하는, 시스템.
23. 예 22에 있어서, 하나 이상의 특성들은 제2 네트워크와 비교하여 더 넓은 상호연결부를 포함하는, 시스템.
24. 예 22 또는 예 23에 있어서, 하나 이상의 특성들은 제2 네트워크에 대한 배선에 사용된 금속 층들보다 더 조밀한 금속 층들에서의 배선을 포함하는, 시스템.
25. 예 12 내지 예 24 중 어느 하나에 있어서, 적어도 2개의 네트워크들에 의해 이용되는 상호연결 토폴로지들은 스타 토폴로지, 메시 토폴로지, 링 토폴로지, 트리 토폴로지, 팻 트리 토폴로지, 하이퍼큐브 토폴로지, 또는 토폴로지들 중 하나 이상의 조합을 포함하는, 시스템.
26. 예 12 내지 예 25 중 어느 하나에 있어서, 적어도 2개의 네트워크들에 의해 이용되는 동작 특성들은 강하게 순서화된 메모리 코히어런스 또는 완화된 순서의 메모리 코히어런스 중 적어도 하나를 포함하는, 시스템.
27. 예 12 내지 예 26 중 어느 하나에 있어서, 적어도 2개의 네트워크들은 물리적으로 그리고 논리적으로 독립적인, 시스템.
28. 예 12 내지 예 27 중 어느 하나에 있어서, 적어도 2개의 네트워크들은 제1 동작 모드에서 물리적으로 별개이고, 적어도 2개의 네트워크들 중 제1 네트워크 및 적어도 2개의 네트워크들 중 제2 네트워크는 가상이고, 제2 동작 모드에서 단일 물리적 네트워크를 공유하는, 시스템.
29. 예 1 내지 예 28 중 어느 하나에 있어서, 프로세서 코어들, 그래픽 프로세싱 유닛들, 주변 디바이스들, 및 상호연결 패브릭은 2개 이상의 집적 회로 다이들에 걸쳐 분산되는, 시스템.
30. 예 29에 있어서, 통합형 메모리 아키텍처에 의해 정의된 통합형 어드레스 공간은 프로세서 코어들, 그래픽 프로세싱 유닛들 또는 주변 디바이스들 상에서 실행되는 소프트웨어에 투명한 방식으로 2개 이상의 집적 회로 다이들에 걸쳐 연장되는, 시스템.
31. 예 29 또는 예 30에 있어서, 상호연결 패브릭은 2개 이상의 집적 회로 다이들에 걸쳐 연장되고, 집적 회로 다이들 상의 소스 및 목적지의 위치에 투명한 통신은 소스와 목적지 사이에서 라우팅되는, 시스템.
32. 예 29 내지 예 31 중 어느 하나에 있어서, 상호연결 패브릭은, 소스 및 목적지가 동일한 집적 회로 다이 상에 있는지 여부와 독립적으로, 소스와 목적지 사이의 통신을 자동으로 라우팅하기 위해 하드웨어 회로들을 사용하여 2개의 집적 회로 다이들에 걸쳐 연장되는, 시스템.
33. 예 29 내지 예 32 중 어느 하나에 있어서, 2개 이상의 집적 회로 다이들에 걸쳐 상호연결 패브릭의 버스들을 커플링하도록 구성된 적어도 하나의 인터포저 디바이스를 더 포함하는, 시스템.
34. 예 1 내지 예 33 중 어느 하나에 있어서, 주어진 집적 회로 다이는 주어진 집적 회로 다이의 프로세서 코어들 사이에 인터럽트들을 분배하기 위한 로컬 인터럽트 분배 회로를 포함하는, 시스템.
35. 예 34에 있어서, 개개의 로컬 인터럽트 분배 회로들을 포함하는 2개 이상의 집적 회로 다이들을 포함하고, 2개 이상의 집적 회로 다이들 중 적어도 하나는 글로벌 인터럽트 분배 회로를 포함하고, 로컬 인터럽트 분배 회로들 및 글로벌 인터럽트 분배 회로는 멀티-레벨 인터럽트 분배 방식을 구현하는, 시스템.
36. 예 35에 있어서, 글로벌 인터럽트 분배 회로는 인터럽트 요청을 로컬 인터럽트 분배 회로들에 순서대로 송신하도록 구성되고, 로컬 인터럽트 분배 회로들은 글로벌 인터럽트 분배 회로로부터의 인터럽트 요청에 응답하기 전에 인터럽트 요청을 로컬 인터럽트 목적지들에 순서대로 송신하도록 구성되는, 시스템.
37. 예 1 내지 예 36 중 어느 하나에 있어서, 주어진 집적 회로 다이는 주어진 집적 회로 다이의 로컬 전력 상태를 관리하도록 구성된 전력 관리자 회로를 포함하는, 시스템.
38. 예 37에 있어서, 집적 회로 다이의 로컬 전력 상태를 관리하도록 구성된 개개의 전력 관리자 회로들을 포함하는 2개 이상의 집적 회로 다이들을 포함하고, 2개 이상의 집적 회로 다이 중 적어도 하나는 전력 관리자 회로들을 동기화하도록 구성된 다른 전력 관리자 회로를 포함하는, 시스템.
39. 예 1 내지 예 38 중 어느 하나에 있어서, 주변 디바이스들은, 오디오 프로세싱 디바이스, 비디오 프로세싱 디바이스, 기계 학습 가속기 회로, 행렬 산술 가속기 회로, 카메라 프로세싱 회로, 디스플레이 파이프라인 회로, 비휘발성 메모리 제어기, 주변 컴포넌트 상호연결 제어기, 보안 프로세서, 또는 직렬 버스 제어기 중 하나 이상을 포함하는, 시스템.
40. 예 1 내지 예 39 중 어느 하나에 있어서, 상호연결 패브릭은 코히어런트 에이전트들을 상호연결하는, 시스템.
41. 예 40에 있어서, 프로세서 코어들 중 개별 프로세서 코어는 코히어런트 에이전트에 대응하는, 시스템.
42. 예 40에 있어서, 프로세서 코어들의 클러스터는 코히어런트 에이전트에 대응하는, 시스템.
43. 예 1 내지 예 42 중 어느 하나에 있어서, 주변 디바이스들 중 주어진 주변 디바이스는 비-코히어런트 에이전트인, 시스템.
44. 예 43에 있어서, 주어진 주변 디바이스와 상호연결 패브릭 사이에 개재된 입력/출력 에이전트를 더 포함하고, 입력/출력 에이전트는 주어진 주변 디바이스에 대해 상호연결 패브릭의 코히어런시 프로토콜들을 강제하도록 구성되는, 시스템.
45. 예 44에 있어서, 입력/출력 에이전트는 코히어런시 프로토콜들을 사용하여 주어진 주변 디바이스로부터의 요청들의 순서를 보장하는, 시스템.
46. 예 44 또는 예 45에 있어서, 입력/출력 에이전트는 2개 이상의 주변 디바이스들의 네트워크를 상호연결 패브릭에 커플링하도록 구성되는, 시스템.
47. 예 1 내지 예 46 중 어느 하나에 있어서, 선택적으로 프로그래밍가능한 해싱 프로토콜에 따라 메모리 요청 트래픽을 시스템 메모리에 분배하도록 구성된 해싱 회로부를 더 포함하는, 시스템.
48. 예 47에 있어서, 프로그래밍가능한 해싱 프로토콜의 적어도 하나의 프로그래밍은, 다양한 일련의 메모리 요청들에 대해 시스템 내의 복수의 메모리 제어기들에 걸쳐 일련의 메모리 요청들을 균등하게 분배하는, 시스템.
49. 예 29에 있어서, 프로그래밍가능한 해싱 프로토콜의 적어도 하나의 프로그래밍은 특정된 입도로 메모리 공간 내의 인접한 요청들을 물리적으로 먼 메모리 인터페이스들에 분배하는, 시스템.
50. 예 1 내지 예 49 중 어느 하나에 있어서, 통합형 메모리 어드레스 공간의 서브세트들의 코히어런시 상태를 추적하도록 구성된 복수의 디렉토리들을 더 포함하고, 복수의 디렉토리들은 시스템에서 분배되는, 시스템.
51. 예 50에 있어서, 복수의 디렉토리들은 메모리 제어기들에 분배되는, 시스템.
52. 예 1 내지 예 51 중 어느 하나에 있어서, 하나 이상의 메모리 제어기 회로들의 주어진 메모리 제어기는, 주어진 메모리 제어기가 인터페이싱하는 시스템 메모리의 부분 내의 데이터에 대응하는 복수의 캐시 블록들을 추적하도록 구성된 디렉토리를 포함하고, 디렉토리는, 시스템 내의 복수의 캐시들 중 어느 캐시가 복수의 캐시 블록들 중 주어진 캐시 블록을 캐싱하고 있는지를 추적하도록 구성되고, 디렉토리는, 메모리 요청들이 시스템에서 아직 완료하지 않은 경우에도 디렉토리에서 순서화되고 프로세싱된 메모리 요청들에 대해 정확한, 시스템.
53. 예 50 내지 예 52 중 어느 하나에 있어서, 주어진 메모리 제어기는 주어진 캐시 블록에 대한 메모리 요청에 기초하여 주어진 캐시 블록에 대한 하나 이상의 코히어런시 유지 커맨드들을 발행하도록 구성되고, 하나 이상의 코히어런시 유지 커맨드들은 복수의 캐시들의 대응하는 캐시에서 주어진 캐시 블록에 대한 캐시 상태를 포함하고, 대응하는 캐시는, 대응하는 캐시 내의 캐시 상태가 주어진 코히어런시 유지 커맨드의 캐시 상태와 매칭하지 않는 것에 기초하여, 주어진 코히어런시 유지 커맨드의 프로세싱을 지연시키도록 구성되는, 시스템.
54. 예 50 내지 예 53 중 어느 하나에 있어서, 제1 캐시는 주어진 캐시 블록을 1차 공유 상태로 저장하도록 구성되고, 제2 캐시는 주어진 캐시 블록을 2차 공유 상태로 저장하도록 구성되고, 주어진 메모리 제어기는 메모리 요청 및 제1 캐시의 1차 공유 상태에 기초하여 제1 캐시가 주어진 캐시 블록을 요청자에게 전송하게 하도록 구성되는, 시스템.
55. 예 50 내지 예 54 중 어느 하나에 있어서, 주어진 메모리 제어기는 제1 메모리 요청의 유형에 기초하여 복수의 캐시들 중 제1 캐시에 제1 코히어런시 유지 커맨드 및 제2 코히어런시 유지 커맨드 중 하나를 발행하도록 구성되고, 제1 캐시는 제1 코히어런시 유지 커맨드에 기초하여 제1 메모리 요청을 발행한 요청자에게 제1 캐시 블록을 포워딩하도록 구성되고, 제1 캐시는 제2 코히어런시 유지 커맨드에 기초하여 주어진 메모리 제어기에 제1 캐시 블록을 리턴하도록 구성되는, 시스템.
56. 시스템으로서,
복수의 프로세서 코어들;
복수의 그래픽 프로세싱 유닛들;
프로세서 코어들 및 그래픽 프로세싱 유닛들과 구별되는 복수의 주변 디바이스들;
시스템 메모리와 인터페이싱하도록 구성된 하나 이상의 메모리 제어기 회로들; 및
하나 이상의 메모리 제어기 회로들과 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭을 포함하고;
프로세서 코어들, 그래픽 프로세싱 유닛들, 주변 디바이스들 및 메모리 제어기들은 통합형 메모리 아키텍처를 통해 통신하도록 구성되는, 시스템.
57. 예 56에 있어서, 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들은 통합형 메모리 아키텍처에 의해 정의된 통합형 어드레스 공간 내의 임의의 어드레스에 액세스하도록 구성되는, 시스템.
58. 예 57에 있어서, 통합형 어드레스 공간은 시스템 메모리에 의해 제공되는 물리적 어드레스 공간과 별개인 가상 어드레스 공간인, 시스템.
59. 예 56 내지 예 58 중 어느 하나에 있어서, 통합형 메모리 아키텍처는 프로세서 코어들, 그래픽 프로세싱 유닛들 및 주변 디바이스들에 의한 메모리 액세스를 위한 시맨틱들의 공통 세트를 제공하는, 시스템.
60. 예 59에 있어서, 시맨틱들은 메모리 순서화 특성들을 포함하는, 시스템.
61. 예 59에 있어서, 시맨틱들은 서비스 품질 속성들을 포함하는, 시스템.
62. 예 59에 있어서, 시맨틱들은 캐시 코히어런시를 포함하는, 시스템.
63. 예 56 내지 예 62 중 어느 하나에 있어서, 하나 이상의 메모리 제어기 회로들은 랜덤 액세스 메모리에 맵핑가능한 하나 이상의 메모리 디바이스들에 대한 개개의 인터페이스들을 포함하는, 시스템.
64. 예 63에 있어서, 하나 이상의 메모리 디바이스들은 동적 랜덤 액세스 메모리(DRAM)를 포함하는, 시스템.
65. 예 56 내지 예 64 중 어느 하나에 있어서, 프로세서 코어들, 그래픽 프로세싱 유닛들, 주변 디바이스들, 및 시스템 메모리 사이에 하나 이상의 레벨들의 캐시를 더 포함하는, 시스템.
66. 예 65에 있어서, 하나 이상의 메모리 제어기 회로들은 상호연결 패브릭과 시스템 메모리 사이에 개재된 개개의 메모리 캐시들을 포함하고, 개개의 메모리 캐시들은 하나 이상의 레벨들의 캐시 중 하나인, 시스템.
67. 예 56 내지 예 66 중 어느 하나에 있어서, 통합형 메모리 어드레스 공간의 서브세트들의 코히어런시 상태를 추적하도록 구성된 복수의 디렉토리들을 더 포함하고, 복수의 디렉토리들은 시스템에서 분배되는, 시스템.
68. 예 57에 있어서, 복수의 디렉토리들은 메모리 제어기들에 분배되는, 시스템.
69. 예 56 내지 예 68 중 어느 하나에 있어서, 하나 이상의 메모리 제어기 회로들의 주어진 메모리 제어기는, 주어진 메모리 제어기가 인터페이싱하는 시스템 메모리의 부분 내의 데이터에 대응하는 복수의 캐시 블록들을 추적하도록 구성된 디렉토리를 포함하고, 디렉토리는, 시스템 내의 복수의 캐시들 중 어느 캐시가 복수의 캐시 블록들 중 주어진 캐시 블록을 캐싱하고 있는지를 추적하도록 구성되고, 디렉토리는, 메모리 요청들이 시스템에서 아직 완료하지 않은 경우에도 디렉토리에서 순서화되고 프로세싱된 메모리 요청들에 대해 정확한, 시스템.
70. 예 69에 있어서, 주어진 메모리 제어기는 주어진 캐시 블록에 대한 메모리 요청에 기초하여 주어진 캐시 블록에 대한 하나 이상의 코히어런시 유지 커맨드들을 발행하도록 구성되고, 하나 이상의 코히어런시 유지 커맨드들은 복수의 캐시들의 대응하는 캐시에서 주어진 캐시 블록에 대한 캐시 상태를 포함하고, 대응하는 캐시는, 대응하는 캐시 내의 캐시 상태가 주어진 코히어런시 유지 커맨드의 캐시 상태와 매칭하지 않는 것에 기초하여, 주어진 코히어런시 유지 커맨드의 프로세싱을 지연시키도록 구성되는, 시스템.
71. 예 70에 있어서, 제1 캐시는 주어진 캐시 블록을 1차 공유 상태로 저장하도록 구성되고, 제2 캐시는 주어진 캐시 블록을 2차 공유 상태로 저장하도록 구성되고, 주어진 메모리 제어기는 메모리 요청 및 제1 캐시의 1차 공유 상태에 기초하여 제1 캐시가 주어진 캐시 블록을 요청자에게 전송하게 하도록 구성되는, 시스템.
72. 예 70 또는 예 71에 있어서, 주어진 메모리 제어기는 제1 메모리 요청의 유형에 기초하여 복수의 캐시들 중 제1 캐시에 제1 코히어런시 유지 커맨드 및 제2 코히어런시 유지 커맨드 중 하나를 발행하도록 구성되고, 제1 캐시는 제1 코히어런시 유지 커맨드에 기초하여 제1 메모리 요청을 발행한 요청자에게 제1 캐시 블록을 포워딩하도록 구성되고, 제1 캐시는 제1 코히어런시 유지 커맨드에 기초하여 주어진 메모리 제어기에 제1 캐시 블록을 리턴하도록 구성되는, 시스템.
73. 시스템-온-칩(SOC)으로서,
복수의 프로세서 코어들;
복수의 그래픽 프로세싱 유닛들;
복수의 주변 디바이스들;하나 이상의 메모리 제어기 회로들; 및
하나 이상의 메모리 제어기 회로들과 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭을 포함하고;
프로세서 코어들, 그래픽 프로세싱 유닛들, 주변 디바이스들 및 메모리 제어기들은 통합형 메모리 아키텍처를 통한 상호연결 패브릭을 통해 통신하도록 구성되는, SOC.
74. 예 73에 있어서, 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들은 통합형 메모리 아키텍처에 의해 정의된 통합형 어드레스 공간 내의 임의의 어드레스에 액세스하도록 구성되는, SOC.
75. 예 73 또는 예 74에 있어서, 통합형 메모리 아키텍처는 프로세서 코어들, 그래픽 프로세싱 유닛들 및 주변 디바이스들에 의한 메모리 액세스를 위한 시맨틱들의 공통 세트를 제공하는, SOC.
76. 예 73 내지 예 75 중 어느 하나에 있어서, 시맨틱들은 메모리 순서화 특성들을 포함하는, SOC.
77. 예 73 내지 예 76 중 어느 하나에 있어서, 시맨틱들은 서비스 품질 속성들을 포함하는, SOC.
78. 예 73 내지 예 77 중 어느 하나에 있어서, 시맨틱들은 메모리 코히어런시를 포함하는, SOC.
79. 예 73 내지 예 78 중 어느 하나에 있어서, 통합형 메모리 어드레스 공간의 서브세트들의 코히어런시 상태를 추적하도록 구성된 복수의 디렉토리들을 더 포함하고, 복수의 디렉토리들은 SOC에서 분배되는, SOC.
80. 예 79에 있어서, 복수의 디렉토리들은 메모리 제어기들에 분배되는, SOC.
81. 예 73 내지 예 80 중 어느 하나에 있어서, 하나 이상의 메모리 제어기 회로들의 주어진 메모리 제어기는, 주어진 메모리 제어기가 인터페이싱하는 시스템 메모리의 부분 내의 데이터에 대응하는 복수의 캐시 블록들을 추적하도록 구성된 디렉토리를 포함하고,
디렉토리는, 시스템 내의 복수의 캐시들 중 어느 캐시가 복수의 캐시 블록들 중 주어진 캐시 블록을 캐싱하고 있는지를 추적하도록 구성되고, 디렉토리는, 메모리 요청들이 시스템에서 아직 완료하지 않은 경우에도 디렉토리에서 순서화되고 프로세싱된 메모리 요청들에 대해 정확한, SOC.
82. 방법으로서,
시스템 온 칩(SOC)에서, 복수의 메모리 제어기들, 복수의 프로세서들, 복수의 주변 회로들 사이에서 통신 패브릭을 통해 통합형 메모리 아키텍처를 사용하여 통신하는 단계를 포함하고, 통합형 메모리 아키텍처는 프로세서 코어들, 그래픽 프로세싱 유닛들 및 주변 디바이스들에 의한 메모리 액세스를 위한 시맨틱들의 공통 세트를 제공하는, SOC.
83. 예 82에 있어서, 시맨틱들은 메모리 순서화 특성들을 포함하는, 방법.
84. 예 82 또는 예 83에 있어서, 시맨틱들은 서비스 품질 속성들을 포함하는, 방법.
85. 예 82 내지 예 84 중 어느 하나에 있어서, 시맨틱들은 메모리 코히어런시를 포함하는, 방법.
86. 시스템으로서,
복수의 프로세서 코어들;
복수의 그래픽 프로세싱 유닛들;
프로세서 코어들 및 그래픽 프로세싱 유닛들과 구별되는 복수의 주변 디바이스들;
시스템 메모리와 인터페이싱하도록 구성된 하나 이상의 메모리 제어기 회로들; 및
하나 이상의 메모리 제어기 회로들과 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭을 포함하고;
상호연결 패브릭은 이종 동작 특성들을 갖는 적어도 2개의 네트워크들을 포함하는, 시스템.
87. 예 86에 있어서, 상호연결 패브릭은 이종 상호연결 토폴로지들을 갖는 적어도 2개의 네트워크들을 포함하는, 시스템.
88. 예 86 또는 예 87에 있어서, 적어도 2개의 네트워크들은 프로세서 코어들과 하나 이상의 메모리 제어기 회로들을 상호연결하는 코히어런트 네트워크를 포함하는, 시스템.
89. 예 86 내지 예 88 중 어느 하나에 있어서, 적어도 2개의 네트워크들은 그래픽 프로세싱 유닛들 및 하나 이상의 메모리 제어기 회로들에 커플링된 완화된 순서의 네트워크를 포함하는, 시스템.
90. 예 89에 있어서, 주변 디바이스들은 디바이스들의 서브세트를 포함하고, 서브세트는 기계 학습 가속기 회로 또는 완화된 순서의 벌크 미디어 디바이스 중 하나 이상을 포함하고, 완화된 순서의 네트워크는 추가로, 하나 이상의 메모리 제어기 회로들에 대한 디바이스들의 서브세트에 커플링되는, 시스템.
91. 예 89 및 예 90 중 어느 하나에 있어서, 적어도 2개의 네트워크들은 주변 디바이스들과 하나 이상의 메모리 제어기 회로들을 상호연결하도록 커플링된 입력-출력 네트워크를 포함하는, 시스템.
92. 예 91에 있어서, 주변 디바이스들은 하나 이상의 실시간 디바이스들을 포함하는, 시스템.
93. 예 86 내지 예 92 중 어느 하나에 있어서, 적어도 2개의 네트워크들은 적어도 2개의 네트워크들 중 제2 네트워크와 비교하여 레이턴시를 감소시키기 위한 하나 이상의 특성들을 포함하는 제1 네트워크를 포함하는, 시스템.
94. 예 93에 있어서, 하나 이상의 특성들은 제2 네트워크보다 더 짧은 루트를 포함하는, 시스템.
95. 예 93 또는 예 94에 있어서, 하나 이상의 특성들은 제2 네트워크에 대한 배선에 사용된 금속 층들보다 하나 이상의 더 낮은 레이턴시 특성들을 갖는 금속 층들에서의 배선을 포함하는, 시스템.
96. 예 93에 있어서, 적어도 2개의 네트워크들은 적어도 2개의 네트워크들 중 제2 네트워크와 비교하여 대역폭을 증가시키기 위한 하나 이상의 특성들을 포함하는 제1 네트워크를 포함하는, 시스템.
97. 예 96에 있어서, 하나 이상의 특성들은 제2 네트워크에 대한 상호연결부에 비해 더 많은 수의 와이어들을 사용하는 상호연결부를 포함하는, 시스템.
98. 예 96 또는 예 97에 있어서, 하나 이상의 특성들은 제2 네트워크에 대한 배선에 사용된 금속 층들보다 더 조밀한 금속 층들에서의 배선을 포함하는, 시스템.
99. 예 86 내지 예 98 중 어느 하나에 있어서, 적어도 2개의 네트워크들에 의해 이용되는 상호연결 토폴로지들은 스타 토폴로지, 메시 토폴로지, 링 토폴로지, 트리 토폴로지, 팻 트리 토폴로지, 하이퍼큐브 토폴로지, 또는 토폴로지들 중 하나 이상의 조합을 포함하는, 시스템.
100. 예 86 내지 예 99 중 어느 하나에 있어서, 적어도 2개의 네트워크들에 의해 이용되는 동작 특성들은 강하게 순서화된 메모리 코히어런스 또는 완화된 순서의 메모리 코히어런스 중 적어도 하나를 포함하는, 시스템.
101. 예 89에 있어서, 적어도 2개의 네트워크들은 물리적으로 그리고 논리적으로 독립적인, 시스템.
102. 예 86 내지 예 101 중 어느 하나에 있어서, 적어도 2개의 네트워크들은 제1 동작 모드에서 물리적으로 별개이고, 적어도 2개의 네트워크들 중 제1 네트워크 및 적어도 2개의 네트워크들 중 제2 네트워크는 가상이고, 제2 동작 모드에서 단일 물리적 네트워크를 공유하는, 시스템.
103. 반도체 다이 상에 통합된 시스템 온 칩(SOC)으로서,
복수의 프로세서 코어들;
복수의 그래픽 프로세싱 유닛들;
복수의 주변 디바이스들;
하나 이상의 메모리 제어기 회로들; 및
하나 이상의 메모리 제어기 회로들과 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭을 포함하고;
상호연결 패브릭은 적어도 제1 네트워크 및 제2 네트워크를 포함하고, 제1 네트워크는 적어도 2개의 네트워크들 중 제2 네트워크와 비교하여 레이턴시를 감소시키기 위한 하나 이상의 특성들을 포함하는, SOC.
104. 예 103에 있어서, 하나 이상의 특성들은 제2 네트워크의 루트보다 반도체 다이의 표면에 걸쳐 제1 네트워크에 대한 더 짧은 루트를 포함하는, SOC.
105. 예 103 또는 예 104에 있어서, 하나 이상의 특성들은 제2 네트워크에 대한 배선에 사용된 금속 층들보다 하나 이상의 더 낮은 레이턴시 특성들을 갖는 금속 층들에서의 배선을 포함하는, SOC.
106. 예 103 내지 예 105 중 어느 하나에 있어서, 제2 네트워크는 제1 네트워크와 비교하여 대역폭을 증가시키기 위한 하나 이상의 제2 특성들을 포함하는, SOC.
107. 예 106에 있어서, 하나 이상의 제2 특성들은 제2 네트워크의 상호연결부와 비교하여 더 많은 와이어들을 갖는 상호연결부를 포함하는, SOC.
108. 예 106 또는 예 107에 있어서, 하나 이상의 제2 특성들은 제2 네트워크에 대한 배선에 사용된 금속 층들보다 더 조밀한 금속 층들에서의 배선을 포함하는, SOC.
109. 반도체 다이 상에 통합된 시스템 온 칩(SOC)으로서,
복수의 프로세서 코어들;
복수의 그래픽 프로세싱 유닛들;
복수의 주변 디바이스들;
하나 이상의 메모리 제어기 회로들; 및
하나 이상의 메모리 제어기 회로들과 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭을 포함하고;
상호연결 패브릭은 적어도 제1 네트워크 및 제2 네트워크를 포함하고, 제1 네트워크는 제2 네트워크와는 물리적으로 그리고 논리적으로 독립적인, SOC.
110. 예 109에 있어서, 제1 네트워크 및 제2 네트워크는 제1 동작 모드에서 물리적으로 별개이고, 적어도 2개의 네트워크들 중 제1 네트워크 및 적어도 2개의 네트워크들 중 제2 네트워크는 가상이고, 제2 동작 모드에서 단일 물리적 네트워크를 공유하는, 시스템.
111. 집적 회로로서,
복수의 프로세서 코어들;
복수의 그래픽 프로세싱 유닛들;
프로세서 코어들 및 그래픽 프로세싱 유닛들과 구별되는 복수의 주변 디바이스들;
시스템 메모리와 인터페이싱하도록 구성된 하나 이상의 메모리 제어기 회로들;
하나 이상의 메모리 제어기 회로들과 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭; 및
상호연결 패브릭에 커플링되고 상호연결 패브릭을 집적 회로의 다른 인스턴스 상의 대응하는 상호연결 패브릭에 커플링하도록 구성된 오프-칩 상호연결부를 포함하고, 상호연결 패브릭 및 오프-칩 상호연결부는 하나 이상의 메모리 제어기 회로들, 프로세서 코어들, 그래픽 프로세싱 유닛들 및 주변 디바이스들을 집적 회로의 단일 인스턴스 또는 집적 회로의 2개 이상의 인스턴스들 중 어느 하나에서 투명하게 연결하는 인터페이스를 제공하는, 집적 회로.
112. 예 111에 있어서, 통합형 메모리 아키텍처에 의해 정의된 통합형 어드레스 공간은 프로세서 코어들, 그래픽 프로세싱 유닛들 또는 주변 디바이스들 상에서 실행되는 소프트웨어에 투명한 집적 회로 다이의 2개 이상의 인스턴스들에 걸쳐 연장되는, 집적 회로.
113. 예 112에 있어서, 통합형 어드레스 공간은 소프트웨어에 투명한 단일 인스턴스에 맵핑되는, 집적 회로.
114. 예 111 및 예 112 중 어느 하나에 있어서, 집적 회로 다이의 프로세서 코어들 사이에 인터럽트들을 분배하기 위한 로컬 인터럽트 분배 회로를 더 포함하는, 집적 회로.
115. 예 114에 있어서, 글로벌 인터럽트 분배 회로를 더 포함하고, 로컬 인터럽트 분배 회로들 및 글로벌 인터럽트 분배 회로는 집적 회로의 2개 이상의 인스턴스들이 사용될 때 멀티-레벨 인터럽트 분배 방식을 구현하는, 집적 회로.
116. 예 115에 있어서, 글로벌 인터럽트 분배 회로는 인터럽트 요청을 적어도 2개의 인스턴스들의 로컬 인터럽트 분배 회로들에 순서대로 송신하도록 구성되고, 로컬 인터럽트 분배 회로들은 글로벌 인터럽트 분배 회로로부터의 인터럽트 요청에 응답하기 전에 인터럽트 요청을 로컬 인터럽트 목적지들에 순서대로 송신하도록 구성되는, 집적 회로.
117. 예 111 내지 예 116 중 어느 하나에 있어서, 주어진 집적 회로 다이는 주어진 집적 회로 다이의 로컬 전력 상태를 관리하도록 구성된 전력 관리자 회로를 포함하는, 집적 회로.
118. 예 117에 있어서, 집적 회로의 2개 이상의 인스턴스들 상에서 전력 관리자 회로들을 동기화시키도록 구성된 다른 전력 관리자 회로를 더 포함하는, 집적 회로.
119. 예 111 내지 예 118 중 어느 하나에 있어서, 주변 디바이스들은, 오디오 프로세싱 디바이스, 비디오 프로세싱 디바이스, 기계 학습 가속기 회로, 행렬 산술 가속기 회로, 카메라 프로세싱 회로, 디스플레이 파이프라인 회로, 비휘발성 메모리 제어기, 주변 컴포넌트 상호연결 제어기, 보안 프로세서, 또는 직렬 버스 제어기 중 하나 이상을 포함하는, 집적 회로.
120. 예 111 내지 예 119 중 어느 하나에 있어서, 상호연결 패브릭은 코히어런트 에이전트들을 상호연결하는, 집적 회로.
121. 예 120에 있어서, 프로세서 코어들 중 개별 프로세서 코어는 코히어런트 에이전트에 대응하는, 집적 회로.
122. 예 120에 있어서, 프로세서 코어들의 클러스터는 코히어런트 에이전트에 대응하는, 집적 회로.
123. 예 111 내지 예 122 중 어느 하나에 있어서, 주변 디바이스들 중 주어진 주변 디바이스는 비-코히어런트 에이전트인, 집적 회로.
124. 예 123에 있어서, 주어진 주변 디바이스와 상호연결 패브릭 사이에 개재된 입력/출력 에이전트를 더 포함하고, 입력/출력 에이전트는 주어진 주변 디바이스에 대해 상호연결 패브릭의 코히어런시 프로토콜들을 강제하도록 구성되는, 집적 회로.
125. 예 124에 있어서, 입력/출력 에이전트는 코히어런시 프로토콜들을 사용하여 주어진 주변 디바이스로부터의 요청들의 순서를 보장하는, 집적 회로.
126. 예 124에 있어서, 입력/출력 에이전트는 2개 이상의 주변 디바이스들의 네트워크를 상호연결 패브릭에 커플링하도록 구성되는, 집적 회로.
127. 예 111 내지 예 126 중 어느 하나에 있어서, 선택적으로 프로그래밍가능한 해싱 프로토콜에 따라 메모리 요청 트래픽을 시스템 메모리에 분배하도록 구성된 해싱 회로부를 더 포함하는, 집적 회로.
128. 예 127에 있어서, 프로그래밍가능한 해싱 프로토콜의 적어도 하나의 프로그래밍은, 다양한 일련의 메모리 요청들에 대해 시스템 내의 복수의 메모리 제어기들에 걸쳐 일련의 메모리 요청들을 균등하게 분배하는, 집적 회로.
129. 예 128에 있어서, 프로그래밍가능한 해싱 프로토콜의 적어도 하나의 프로그래밍은 특정된 입도로 메모리 공간 내의 인접한 요청들을 물리적으로 먼 메모리 인터페이스들에 분배하는, 집적 회로.
130. 시스템으로서,
집적 회로의 복수의 인스턴스들을 포함하고, 집적 회로는,
복수의 프로세서 코어들;
복수의 그래픽 프로세싱 유닛들;
프로세서 코어들 및 그래픽 프로세싱 유닛들과 구별되는 복수의 주변 디바이스들;
시스템 메모리와 인터페이싱하도록 구성된 하나 이상의 메모리 제어기 회로들;
하나 이상의 메모리 제어기 회로들과 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭; 및
상호연결 패브릭에 커플링되고 상호연결 패브릭을 집적 회로의 복수의 인스턴스들 중 다른 인스턴스 상의 대응하는 상호연결 패브릭에 커플링하도록 구성된 오프-칩 상호연결부를 포함하고, 상호연결 패브릭 및 오프-칩 상호연결부는 하나 이상의 메모리 제어기 회로들, 프로세서 코어들, 그래픽 프로세싱 유닛들 및 주변 디바이스들을 집적 회로의 단일 인스턴스 또는 집적 회로의 2개 이상의 인스턴스들 중 어느 하나에서 투명하게 연결하는 인터페이스를 제공하는, 시스템.
131. 예 130에 있어서, 복수의 인스턴스들 중 하나의 인스턴스로부터의 오프-칩 상호연결부를 복수의 인스턴스들 중 다른 인스턴스의 오프-칩 상호연결부에 커플링하도록 구성된 기판을 더 포함하는, 시스템.
132. 예 130에 있어서, 복수의 인스턴스들에서 오프-칩 상호연결부에 커플링하고 복수의 인스턴스들 사이의 통신들을 라우팅하도록 구성된 네트워크 집적 회로를 더 포함하는, 시스템.
일단 위의 개시내용이 완전히 이해되면 다수의 변형들 및 수정들이 당업자들에게 명백해질 것이다. 다음의 청구범위는 모든 그러한 변형들 및 수정들을 망라하는 것으로 해석되도록 의도된다.

Claims (22)

  1. 집적 회로로서,
    복수의 프로세서 코어들;
    복수의 그래픽 프로세싱 유닛들;
    상기 프로세서 코어들 및 상기 그래픽 프로세싱 유닛들과 구별되는 복수의 주변 디바이스들;
    시스템 메모리와 인터페이싱하도록 구성된 하나 이상의 메모리 제어기 회로들;
    상기 하나 이상의 메모리 제어기 회로들과 상기 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭; 및
    상기 상호연결 패브릭에 커플링되고 상기 집적 회로의 다른 인스턴스 상의 대응하는 상호연결 패브릭에 상기 상호연결 패브릭을 커플링하도록 구성된 오프-칩 상호연결부를 포함하고, 상기 상호연결 패브릭 및 상기 오프-칩 상호연결부는, 상기 집적 회로의 단일 인스턴스 또는 상기 집적 회로의 2개 이상의 인스턴스들 중 어느 하나에서 상기 하나 이상의 메모리 제어기 회로들, 상기 프로세서 코어들, 상기 그래픽 프로세싱 유닛들, 및 상기 주변 디바이스들을 연결하도록 구성된 인터페이스를 제공하고, 상기 인터페이스는 또한, 상기 집적 회로의 복수의 인스턴스들이 단일 시스템으로서 소프트웨어에 대해 투명하게 나타나는 방식으로 상기 집적 회로의 상기 복수의 인스턴스들을 커플링하도록 구성되는, 집적 회로.
  2. 제1항에 있어서, 통합형 메모리 아키텍처에 의해 정의되는 통합형 어드레스 공간은 상기 프로세서 코어들, 그래픽 프로세싱 유닛들, 또는 주변 디바이스들 상에서 실행되는 소프트웨어에 대해 투명한 상기 집적 회로 다이의 상기 2개 이상의 인스턴스들에 걸쳐 연장되는, 집적 회로.
  3. 제2항에 있어서, 상기 통합형 어드레스 공간은 소프트웨어에 대해 투명한 상기 단일 인스턴스에 맵핑되는, 집적 회로.
  4. 제1항에 있어서, 상기 집적 회로 내의 프로세서 코어들 사이에 인터럽트들을 분배하는 로컬 인터럽트 분배 회로를 더 포함하는 집적 회로.
  5. 제4항에 있어서, 글로벌 인터럽트 분배 회로를 더 포함하고, 상기 로컬 인터럽트 분배 회로들 및 상기 글로벌 인터럽트 분배 회로는 상기 집적 회로의 2개 이상의 인스턴스들이 사용될 때 멀티-레벨 인터럽트 분배 스킴을 구현하는, 집적 회로.
  6. 제5항에 있어서, 상기 글로벌 인터럽트 분배 회로는 시퀀스 내의 적어도 2개의 인스턴스들에서 상기 로컬 인터럽트 분배 회로들에 인터럽트 요청을 송신하도록 구성되고, 상기 로컬 인터럽트 분배 회로들은 상기 글로벌 인터럽트 분배 회로로부터의 상기 인터럽트 요청에 응답하기 전에 시퀀스 내의 로컬 인터럽트 목적지들에 상기 인터럽트 요청을 송신하도록 구성되는 집적 회로.
  7. 제1항에 있어서, 주어진 집적 회로 다이는 상기 주어진 집적 회로 다이의 로컬 전력 상태를 관리하도록 구성된 전력 관리자 회로를 포함하는, 집적 회로.
  8. 제7항에 있어서, 상기 집적 회로의 상기 2개 이상의 인스턴스들 상에서 상기 전력 관리자 회로들을 동기화하도록 구성되는 다른 전력 관리자 회로를 더 포함하는 집적 회로.
  9. 제1항에 있어서, 상기 주변 디바이스들은, 오디오 프로세싱 디바이스, 비디오 프로세싱 디바이스, 기계 학습 가속기 회로, 행렬 산술 가속기 회로, 카메라 프로세싱 회로, 디스플레이 파이프라인 회로, 비휘발성 메모리 제어기, 주변 컴포넌트 상호연결 제어기, 보안 프로세서, 또는 직렬 버스 제어기 중 하나 이상을 포함하는, 집적 회로.
  10. 제1항에 있어서, 상기 상호연결 패브릭은 코히어런트 에이전트들을 상호연결하는, 집적 회로.
  11. 제10항에 있어서, 상기 프로세서 코어들 중 개별 프로세서 코어는 코히어런트 에이전트에 대응하는, 집적 회로.
  12. 제10항에 있어서, 상기 프로세서 코어들의 클러스터는 코히어런트 에이전트에 대응하는, 집적 회로.
  13. 제1항에 있어서, 상기 주변 디바이스들 중 주어진 주변 디바이스는 비-코히어런트 에이전트인, 집적 회로.
  14. 제13항에 있어서, 상기 주어진 주변 디바이스와 상기 상호연결 패브릭 사이에 개재된 입력/출력 에이전트를 더 포함하고, 상기 입력/출력 에이전트는 상기 주어진 주변 디바이스에 대해 상기 상호연결 패브릭의 코히어런시 프로토콜들을 강제하도록 구성되는, 집적 회로.
  15. 제14항에 있어서, 상기 입력/출력 에이전트는 상기 코히어런시 프로토콜들을 사용하여 상기 주어진 주변 디바이스로부터의 요청들의 순서를 보장하는, 집적 회로.
  16. 제14항에 있어서, 상기 입력/출력 에이전트는 2개 이상의 주변 디바이스들의 네트워크를 상기 상호연결 패브릭에 커플링하도록 구성되는, 집적 회로.
  17. 제1항에 있어서, 선택적으로 프로그래밍가능한 해싱 프로토콜에 따라 메모리 요청 트래픽을 시스템 메모리에 분배하도록 구성된 해싱 회로부를 더 포함하는, 집적 회로.
  18. 제17항에 있어서, 상기 프로그래밍가능한 해싱 프로토콜의 적어도 하나의 프로그래밍은, 다양한 일련의 메모리 요청들에 대해 상기 시스템 내의 복수의 메모리 제어기들에 걸쳐 상기 일련의 메모리 요청들을 균등하게 분배하는, 집적 회로.
  19. 제18항에 있어서, 상기 프로그래밍가능한 해싱 프로토콜의 적어도 하나의 프로그래밍은 특정된 입도로 메모리 공간 내의 인접한 요청들을 물리적으로 먼 메모리 인터페이스들에 분배하는, 집적 회로.
  20. 시스템으로서,
    집적 회로의 복수의 인스턴스들을 포함하며; 상기 집적 회로는:
    복수의 프로세서 코어들;
    복수의 그래픽 프로세싱 유닛들;
    상기 프로세서 코어들 및 그래픽 프로세싱 유닛들과 구별되는 복수의 주변 디바이스들;
    시스템 메모리와 인터페이싱하도록 구성된 하나 이상의 메모리 제어기 회로들;
    상기 하나 이상의 메모리 제어기 회로들과 상기 프로세서 코어들, 그래픽 프로세싱 유닛들, 및 주변 디바이스들 사이의 통신을 제공하도록 구성된 상호연결 패브릭; 및
    상기 상호연결 패브릭에 커플링되고 상기 집적 회로의 상기 복수의 인스턴스들 중 다른 인스턴스 상의 대응하는 상호연결 패브릭에 상기 상호연결 패브릭을 커플링하도록 구성된 오프-칩 상호연결부를 포함하고, 상기 상호연결 패브릭 및 상기 오프-칩 상호연결부는, 상기 집적 회로의 단일 인스턴스 또는 상기 집적 회로의 2개 이상의 인스턴스 중 어느 하나에서 상기 하나 이상의 메모리 제어기 회로들, 상기 프로세서 코어들, 상기 그래픽 프로세싱 유닛들, 및 상기 주변 디바이스들을 연결하도록 구성된 인터페이스를 제공하고, 상기 인터페이스는 또한, 상기 집적 회로의 복수의 인스턴스들이 단일 시스템으로서 소프트웨어에 대해 투명하게 나타나는 방식으로 상기 집적 회로의 상기 복수의 인스턴스들을 커플링하도록 구성되는, 시스템.
  21. 제20항에 있어서, 상기 복수의 인스턴스들 중 하나로부터의 상기 오프-칩 상호연결부를 상기 복수의 인스턴스들 중 다른 하나의 인스턴스의 상기 오프-칩 상호연결부에 커플링하도록 구성되는 기판을 더 포함하는 시스템.
  22. 제20항에 있어서, 상기 복수의 인스턴스들 내의 상기 오프-칩 상호연결부에 커플링되고 상기 복수의 인스턴스들 사이의 통신들을 라우팅하도록 구성되는 네트워크 집적 회로를 더 포함하는 시스템.
KR1020247012429A 2021-08-23 2022-08-23 스케일러블 시스템 온 칩 KR20240055142A (ko)

Applications Claiming Priority (10)

Application Number Priority Date Filing Date Title
US202163235979P 2021-08-23 2021-08-23
US63/235,979 2021-08-23
US17/821,305 US12007895B2 (en) 2021-08-23 2022-08-22 Scalable system on a chip
US17/821,312 2022-08-22
US17/821,305 2022-08-22
US17/821,296 2022-08-22
US17/821,312 US11803471B2 (en) 2021-08-23 2022-08-22 Scalable system on a chip
US17/821,296 US11934313B2 (en) 2021-08-23 2022-08-22 Scalable system on a chip
PCT/US2022/041189 WO2023028042A1 (en) 2021-08-23 2022-08-23 Scalable system on a chip
KR1020247006213A KR20240035610A (ko) 2021-08-23 2022-08-23 스케일러블 시스템 온 칩

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020247006213A Division KR20240035610A (ko) 2021-08-23 2022-08-23 스케일러블 시스템 온 칩

Publications (1)

Publication Number Publication Date
KR20240055142A true KR20240055142A (ko) 2024-04-26

Family

ID=85227541

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1020247012427A KR20240055141A (ko) 2021-08-23 2022-08-23 스케일러블 시스템 온 칩
KR1020247006213A KR20240035610A (ko) 2021-08-23 2022-08-23 스케일러블 시스템 온 칩
KR1020247012429A KR20240055142A (ko) 2021-08-23 2022-08-23 스케일러블 시스템 온 칩

Family Applications Before (2)

Application Number Title Priority Date Filing Date
KR1020247012427A KR20240055141A (ko) 2021-08-23 2022-08-23 스케일러블 시스템 온 칩
KR1020247006213A KR20240035610A (ko) 2021-08-23 2022-08-23 스케일러블 시스템 온 칩

Country Status (7)

Country Link
US (3) US11934313B2 (ko)
EP (3) EP4398115A2 (ko)
KR (3) KR20240055141A (ko)
CN (1) CN117836750A (ko)
AU (1) AU2022332113A1 (ko)
DE (1) DE202022002976U1 (ko)
WO (1) WO2023028042A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11908947B2 (en) * 2019-08-08 2024-02-20 Semiconductor Energy Laboratory Co., Ltd. Semiconductor device
US11531061B2 (en) * 2020-08-03 2022-12-20 Qualcomm Incorporated Interleaved testing of digital and analog subsystems with on-chip testing interface
US11681627B1 (en) * 2021-10-18 2023-06-20 Meta Platforms Technologies, Llc Distributed temporal cache for Systems on a Chip
CN117054948A (zh) * 2023-08-08 2023-11-14 安庆师范大学 一种集成电路测试设备稳定性分析方法及系统
CN117155842B (zh) * 2023-10-25 2024-02-13 苏州元脑智能科技有限公司 一种双主机路由的实现方法、系统、设备及介质
CN117950739B (zh) * 2024-03-26 2024-06-18 摩尔线程智能科技(北京)有限责任公司 主控制单元确定方法、装置、设备、存储介质及程序产品

Family Cites Families (102)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US976697A (en) 1910-09-08 1910-11-22 Ernst Roth Sliding brush for plan sifters.
US5893160A (en) 1996-04-08 1999-04-06 Sun Microsystems, Inc. Deterministic distributed multi-cache coherence method and system
US5897657A (en) 1996-07-01 1999-04-27 Sun Microsystems, Inc. Multiprocessing system employing a coherency protocol including a reply count
US6049847A (en) 1996-09-16 2000-04-11 Corollary, Inc. System and method for maintaining memory coherency in a computer system having multiple system buses
US6111582A (en) * 1996-12-20 2000-08-29 Jenkins; Barry L. System and method of image generation and encoding using primitive reprojection
US6263409B1 (en) 1998-12-22 2001-07-17 Unisys Corporation Data processing system and method for substituting one type of request for another for increased performance when processing back-to-back requests of certain types
US6976115B2 (en) 2002-03-28 2005-12-13 Intel Corporation Peer-to-peer bus segment bridging
US6854043B2 (en) 2002-07-05 2005-02-08 Hewlett-Packard Development Company, L.P. System and method for multi-modal memory controller system operation
US7191349B2 (en) 2002-12-26 2007-03-13 Intel Corporation Mechanism for processor power state aware distribution of lowest priority interrupt
US8321650B2 (en) 2003-01-13 2012-11-27 Emulex Design & Manufacturing Corporation Alignment-unit-based virtual formatting methods and devices employing the methods
US7098541B2 (en) 2003-05-19 2006-08-29 Hewlett-Packard Development Company, L.P. Interconnect method for directly connected stacked integrated circuits
US7444547B2 (en) 2003-06-19 2008-10-28 International Business Machines Corproation Method, system, and product for programming in a simultaneous multi-threaded processor environment
US7340548B2 (en) 2003-12-17 2008-03-04 Microsoft Corporation On-chip bus
US7720054B2 (en) 2004-03-02 2010-05-18 Cisco Technology, Inc. Router configured for outputting update messages specifying a detected attribute change of a connected active path according to a prescribed routing protocol
US20070079075A1 (en) 2005-09-30 2007-04-05 Collier Josh D Providing cache coherency in an extended multiple processor environment
US7636835B1 (en) 2006-04-14 2009-12-22 Tilera Corporation Coupling data in a parallel processing environment
CN101449250B (zh) 2006-05-30 2011-11-16 英特尔公司 用于高速缓存一致性协议的方法、装置及系统
US7480770B2 (en) 2006-06-14 2009-01-20 Sun Microsystems, Inc. Semi-blocking deterministic directory coherence
JP2008065713A (ja) 2006-09-08 2008-03-21 Canon Inc マルチプロセッサシステム及び割込み制御方法
US8074022B2 (en) 2006-09-28 2011-12-06 Virident Systems, Inc. Programmable heterogeneous memory controllers for main memory with different memory modules
US20080162869A1 (en) 2006-12-29 2008-07-03 Intel Corporation Address hashing to help distribute accesses across portions of destructive read cache memory
TWI317945B (en) 2007-01-12 2009-12-01 Via Tech Inc Memory refresh method and system
US8438320B2 (en) 2007-06-25 2013-05-07 Sonics, Inc. Various methods and apparatus for address tiling and channel interleaving throughout the integrated system
US8095735B2 (en) 2008-08-05 2012-01-10 Convey Computer Memory interleave for heterogeneous computing
US8286014B2 (en) 2008-03-25 2012-10-09 Intel Corporation Power management for a system on a chip (SoC)
US8291245B2 (en) 2008-04-17 2012-10-16 International Business Machines Corporation Method, apparatus and system for reducing power consumption based on storage device data migration
US20090305463A1 (en) 2008-06-06 2009-12-10 International Business Machines Corporation System and Method for Thermal Optimized Chip Stacking
US8190820B2 (en) 2008-06-13 2012-05-29 Intel Corporation Optimizing concurrent accesses in a directory-based coherency protocol
US7849247B2 (en) 2008-10-14 2010-12-07 Freescale Semiconductor, Inc. Interrupt controller for accelerated interrupt handling in a data processing system and method thereof
US8799582B2 (en) 2008-12-30 2014-08-05 Intel Corporation Extending cache coherency protocols to support locally buffered data
US20140325129A1 (en) 2008-12-31 2014-10-30 Micron Technology, Inc. Method and apparatus for active range mapping for a nonvolatile memory device
US8260996B2 (en) 2009-04-24 2012-09-04 Empire Technology Development Llc Interrupt optimization for multiprocessors
US8549249B1 (en) 2009-09-21 2013-10-01 Tilera Corporation Supporting secondary atomic operations using primary atomic operations
US8407516B2 (en) 2009-12-23 2013-03-26 Intel Corporation Controlling memory redundancy in a system
US8874855B2 (en) 2009-12-28 2014-10-28 Empire Technology Development Llc Directory-based coherence caching
US8799553B2 (en) 2010-04-13 2014-08-05 Apple Inc. Memory controller mapping on-the-fly
KR101717494B1 (ko) 2010-10-08 2017-03-28 삼성전자주식회사 인터럽트 처리 장치 및 방법
US20120096295A1 (en) 2010-10-18 2012-04-19 Robert Krick Method and apparatus for dynamic power control of cache memory
US20120144104A1 (en) * 2010-12-02 2012-06-07 Advanced Micro Devices, Inc. Partitioning of Memory Device for Multi-Client Computing System
US8458386B2 (en) 2010-12-07 2013-06-04 Apple Inc. Atomic interrupt masking in an interrupt controller to prevent delivery of same interrupt vector for consecutive interrupt acknowledgements
US8959270B2 (en) 2010-12-07 2015-02-17 Apple Inc. Interrupt distribution scheme
EP2490100B1 (en) 2011-02-14 2014-10-15 2236008 Ontario Inc. Suspendable interrupts for processor idle management
US8732496B2 (en) 2011-03-24 2014-05-20 Nvidia Corporation Method and apparatus to support a self-refreshing display device coupled to a graphics controller
US8775700B2 (en) 2011-09-29 2014-07-08 Intel Corporation Issuing requests to a fabric
EP2769409A1 (en) 2011-10-03 2014-08-27 Invensas Corporation Stub minimization for multi-die wirebond assemblies with orthogonal windows
WO2013085501A1 (en) 2011-12-07 2013-06-13 Intel Corporation Multiple transaction data flow control unit for high-speed interconnect
US9029234B2 (en) 2012-05-15 2015-05-12 International Business Machines Corporation Physical design symmetry and integrated circuits enabling three dimentional (3D) yield optimization for wafer to wafer stacking
US20130318308A1 (en) 2012-05-24 2013-11-28 Sonics, Inc. Scalable cache coherence for a network on a chip
US9424191B2 (en) 2012-06-29 2016-08-23 Intel Corporation Scalable coherence for multi-core processors
US8963933B2 (en) 2012-07-23 2015-02-24 Advanced Micro Devices, Inc. Method for urgency-based preemption of a process
US9009368B2 (en) 2012-10-23 2015-04-14 Advanced Micro Devices, Inc. Interrupt latency performance counters
US9135174B2 (en) 2012-11-27 2015-09-15 International Business Machines Corporation Coherent attached processor proxy supporting master parking
US9348762B2 (en) 2012-12-19 2016-05-24 Nvidia Corporation Technique for accessing content-addressable memory
US9170946B2 (en) 2012-12-21 2015-10-27 Intel Corporation Directory cache supporting non-atomic input/output operations
US9678564B2 (en) 2012-12-21 2017-06-13 Nxp B.V. Multiprocessor system with interrupt distributor
US9075952B2 (en) 2013-01-17 2015-07-07 Intel Corporation Controlling bandwidth allocations in a system on a chip (SoC)
KR20150115752A (ko) 2013-01-31 2015-10-14 휴렛-팩커드 디벨롭먼트 컴퍼니, 엘.피. 적응성 입도 로우 버퍼 캐시
US8786069B1 (en) 2013-03-15 2014-07-22 Invensas Corporation Reconfigurable pop
US9160627B2 (en) 2013-04-04 2015-10-13 Netspeed Systems Multiple heterogeneous NoC layers
US9405303B2 (en) 2013-04-22 2016-08-02 Emerson Electric Co. Power stealing for a wireless-enabled thermostat
EP2997482A4 (en) 2013-05-16 2016-11-16 Hewlett Packard Development Co AGENT WITH MULTIPLE MODES
US9244874B2 (en) 2013-06-14 2016-01-26 National Instruments Corporation Selectively transparent bridge for peripheral component interconnect express bus systems
US9054977B2 (en) 2013-08-05 2015-06-09 Netspeed Systems Automatic NoC topology generation
US9355034B2 (en) 2013-12-31 2016-05-31 Samsung Electronics Co., Ltd. Removal and optimization of coherence acknowledgement responses in an interconnect
US9442869B2 (en) 2014-01-24 2016-09-13 Texas Instruments Incorporated Programmable interrupt routing in multiprocessor devices
US9842076B2 (en) 2014-05-19 2017-12-12 Microchip Technology Incorporated Switchless USB C-connector hub
US9825779B2 (en) 2014-05-23 2017-11-21 Arteris, Inc. Network-on-chip (NoC) topology generation
KR102187912B1 (ko) 2014-09-26 2020-12-07 인텔 코포레이션 인터럽트들의 세트들을 구성하는 장치 및 방법
US10394730B2 (en) 2014-11-14 2019-08-27 Cavium, Llc Distributed interrupt scheme in a multi-processor system
US10523585B2 (en) 2014-12-19 2019-12-31 Amazon Technologies, Inc. System on a chip comprising multiple compute sub-systems
US9747225B2 (en) 2015-05-05 2017-08-29 Microsoft Technology Licensing, Llc Interrupt controller
US9996487B2 (en) 2015-06-26 2018-06-12 Intel Corporation Coherent fabric interconnect for use in multiple topologies
US20170017419A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Enabling High Read Rates To Data Element Lists
JP6500736B2 (ja) 2015-10-14 2019-04-17 富士通株式会社 半導体装置および半導体装置の制御方法
US9940423B2 (en) 2015-12-20 2018-04-10 Arteris, Inc. Editing a NoC topology on top of a floorplan
US10191877B2 (en) 2015-12-22 2019-01-29 Intel Corporation Architecture for software defined interconnect switch
US10733350B1 (en) 2015-12-30 2020-08-04 Sharat C Prasad On-chip and system-area multi-processor interconnection networks in advanced processes for maximizing performance minimizing cost and energy
WO2017120270A1 (en) 2016-01-04 2017-07-13 Gray Research LLC Massively parallel computer, accelerated computing clusters, and two dimensional router and interconnection network for field programmable gate arrays, and applications
US10585826B2 (en) 2016-01-25 2020-03-10 Advanced Micro Devices, Inc. Using processor types for processing interrupts in a computing device
US20170269666A1 (en) * 2016-03-18 2017-09-21 Apple Inc. Smart Dynamic Voltage and Frequency Scaling of Electronic Components
US10403333B2 (en) 2016-07-15 2019-09-03 Advanced Micro Devices, Inc. Memory controller with flexible address decoding
US20180189641A1 (en) 2017-01-04 2018-07-05 Stmicroelectronics S.R.L. Hardware accelerator engine
US10769080B2 (en) 2017-03-30 2020-09-08 Futurewei Technologies, Inc. Distributed and shared memory controller
US10043232B1 (en) 2017-04-09 2018-08-07 Intel Corporation Compute cluster preemption within a general-purpose graphics processing unit
US10515046B2 (en) * 2017-07-01 2019-12-24 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10372446B2 (en) 2017-07-01 2019-08-06 Intel Corporation Technology to dynamically modulate memory device read granularity
US10534719B2 (en) 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10268600B2 (en) 2017-09-12 2019-04-23 Intel Corporation System, apparatus and method for prefetch-aware replacement in a cache memory hierarchy of a processor
US10719651B2 (en) 2017-12-30 2020-07-21 Arteris, Inc. Synthesizing topology for an interconnect network of a system-on-chip with intellectual property blocks
US10579469B2 (en) 2018-05-25 2020-03-03 Arm Limited Interconnection network for integrated circuit
US10997771B2 (en) 2018-08-29 2021-05-04 Intel Corporation Position-based rendering apparatus and method for multi-die/GPU graphics processing
KR102641520B1 (ko) 2018-11-09 2024-02-28 삼성전자주식회사 멀티-코어 프로세서를 포함하는 시스템 온 칩 및 그것의 태스크 스케줄링 방법
US10944693B2 (en) 2018-11-13 2021-03-09 Advanced Micro Devices, Inc. Routing flits in a network-on-chip based on operating states of routers
US11734192B2 (en) 2018-12-10 2023-08-22 International Business Machines Corporation Identifying location of data granules in global virtual address space
US11113216B2 (en) 2019-03-20 2021-09-07 Mediatek Inc. Dispatching interrupts in a multi-processor system based on power and performance factors
US10673439B1 (en) 2019-03-27 2020-06-02 Xilinx, Inc. Adaptive integrated programmable device platform
US11036279B2 (en) 2019-04-29 2021-06-15 Arm Limited Apparatus and method for managing a cache
US11016810B1 (en) 2019-11-26 2021-05-25 Mythic, Inc. Tile subsystem and method for automated data flow and data processing within an integrated circuit architecture
US11327786B2 (en) 2020-07-21 2022-05-10 Arm Limited Distributing interrupt request to be handled by target virtual processor
US11544193B2 (en) 2020-09-11 2023-01-03 Apple Inc. Scalable cache coherency protocol
US20230028642A1 (en) * 2021-07-26 2023-01-26 Verizon Patent And Licensing Inc. Systems and methods for application security utilizing centralized security management
US20230069310A1 (en) * 2021-08-10 2023-03-02 Nvidia Corporation Object classification using one or more neural networks

Also Published As

Publication number Publication date
TW202328895A (zh) 2023-07-16
EP4392856A1 (en) 2024-07-03
WO2023028042A1 (en) 2023-03-02
US11934313B2 (en) 2024-03-19
KR20240055141A (ko) 2024-04-26
KR20240035610A (ko) 2024-03-15
US12007895B2 (en) 2024-06-11
AU2022332113A1 (en) 2024-03-07
CN117836750A (zh) 2024-04-05
EP4398114A2 (en) 2024-07-10
US20230058989A1 (en) 2023-02-23
US20230053530A1 (en) 2023-02-23
DE202022002976U1 (de) 2024-03-11
EP4398115A2 (en) 2024-07-10
US20230056044A1 (en) 2023-02-23
US11803471B2 (en) 2023-10-31

Similar Documents

Publication Publication Date Title
EP4398115A2 (en) Scalable system on a chip
US20190205244A1 (en) Memory system, method and computer program products
JP5826865B2 (ja) プログラマブル回路と埋込型プロセッサシステムとを伴う集積回路
KR102355989B1 (ko) 다중 노드 시스템 저전력 관리
US20020046324A1 (en) Scalable architecture based on single-chip multiprocessing
Hill et al. THE UNCORE: A MODULAR APPROACH TO FEEDING THE HIGH-PERFORMANCE CORES.
Rotenberg et al. Rationale for a 3D heterogeneous multi-core processor
US11537538B2 (en) Inter cluster snoop latency reduction
Bai et al. Back to the future: Current-mode processor in the era of deeply scaled CMOS
KR102604573B1 (ko) 다수의 독립적인 온-칩 상호연결부
TWI847235B (zh) 可擴縮之系統單晶片
Schmidt Accelerating checkpoint/restart application performance in large-scale systems with network attached memory
Jhamb et al. A high level implementation and performance evaluation of level-I asynchronous cache on FPGA
JP2023550231A (ja) 局所性を欠くデータを対象とするメモリ要求のプリフェッチ無効化
Pfile Typhoon-Zero implementation: The vortex module
Kapil et al. A chip multithreaded processor for network-facing workloads
Zhang Design of On-chip Bus of Heterogeneous 3DIC Micro-processors.
KR20240034258A (ko) Ram으로서의 캐시 메모리의 동적 할당
Robert Typhoon-Zero Implementation: The Vortex Module
Vassiliki Integrated Photonic Networks for Multiprocessor Systems
Daya SC²EPTON: high-performance and scalable, low-power and intelligent, ordered Mesh on-chip network
Kumar et al. Tmfab: A transactional memory fabric for chip multiprocessors
Feehrer et al. Coherency hub design for multi-node victoria falls server systems
Fossum Multi core design for chip level multiprocessing

Legal Events

Date Code Title Description
A107 Divisional application of patent
A302 Request for accelerated examination