KR20210088657A - 시스템-온-칩에서 어드레스 디코딩을 핸들링하기 위한 장치 및 방법 - Google Patents

시스템-온-칩에서 어드레스 디코딩을 핸들링하기 위한 장치 및 방법 Download PDF

Info

Publication number
KR20210088657A
KR20210088657A KR1020217017364A KR20217017364A KR20210088657A KR 20210088657 A KR20210088657 A KR 20210088657A KR 1020217017364 A KR1020217017364 A KR 1020217017364A KR 20217017364 A KR20217017364 A KR 20217017364A KR 20210088657 A KR20210088657 A KR 20210088657A
Authority
KR
South Korea
Prior art keywords
devices
address
pool
address decoder
addresses
Prior art date
Application number
KR1020217017364A
Other languages
English (en)
Inventor
테실 토마스
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20210088657A publication Critical patent/KR20210088657A/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/20Handling requests for interconnection or transfer for access to input/output bus
    • 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/382Information transfer, e.g. on bus using universal interface adapter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/17Ink jet characterised by ink handling
    • B41J2/175Ink supply systems ; Circuit parts therefor
    • B41J2/17503Ink cartridges
    • B41J2/17526Electrical contacts to the cartridge
    • B41J2/1753Details of contacts on the cartridge, e.g. protection of contacts
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/17Ink jet characterised by ink handling
    • B41J2/175Ink supply systems ; Circuit parts therefor
    • B41J2/17503Ink cartridges
    • B41J2/17543Cartridge presence detection or type identification
    • B41J2/17546Cartridge presence detection or type identification electronically
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J2/00Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
    • B41J2/005Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
    • B41J2/01Ink jet
    • B41J2/17Ink jet characterised by ink handling
    • B41J2/175Ink supply systems ; Circuit parts therefor
    • B41J2/17503Ink cartridges
    • B41J2/17553Outer structure
    • GPHYSICS
    • G03PHOTOGRAPHY; CINEMATOGRAPHY; ANALOGOUS TECHNIQUES USING WAVES OTHER THAN OPTICAL WAVES; ELECTROGRAPHY; HOLOGRAPHY
    • G03GELECTROGRAPHY; ELECTROPHOTOGRAPHY; MAGNETOGRAPHY
    • G03G21/00Arrangements not provided for by groups G03G13/00 - G03G19/00, e.g. cleaning, elimination of residual charge
    • G03G21/16Mechanical means for facilitating the maintenance of the apparatus, e.g. modular arrangements
    • G03G21/18Mechanical means for facilitating the maintenance of the apparatus, e.g. modular arrangements using a processing cartridge, whereby the process cartridge comprises at least two image processing means in a single unit
    • G03G21/1875Mechanical means for facilitating the maintenance of the apparatus, e.g. modular arrangements using a processing cartridge, whereby the process cartridge comprises at least two image processing means in a single unit provided with identifying means or means for storing process- or use parameters, e.g. lifetime of the cartridge
    • G03G21/1878Electronically readable memory
    • 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/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • 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/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • G06F13/4291Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus using a clocked protocol
    • 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/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • G06F13/4295Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus using an embedded synchronisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/00127Connection or combination of a still picture apparatus with another apparatus, e.g. for storage, processing or transmission of still picture signals or of information associated with a still picture
    • H04N1/00204Connection or combination of a still picture apparatus with another apparatus, e.g. for storage, processing or transmission of still picture signals or of information associated with a still picture with a digital computer or a digital computer system, e.g. an internet server
    • H04N1/00209Transmitting or receiving image data, e.g. facsimile data, via a computer, e.g. using e-mail, a computer network, the internet, I-fax
    • H04N1/00214Transmitting or receiving image data, e.g. facsimile data, via a computer, e.g. using e-mail, a computer network, the internet, I-fax details of transmission
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0038System on Chip
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0052Assignment of addresses or identifiers to the modules of a bus system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Multimedia (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Systems (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

시스템-온-칩(SoC)에서 어드레스 디코딩을 핸들링하기 위한 장치 및 방법이 제공된다. SoC는 데이터 처리 동작들을 수행하기 위한 처리 회로, 제1 복수의 디바이스, 및 처리 회로를 제1 복수의 디바이스에 결합하는 인터커넥트를 갖는다. 제1 복수의 디바이스는 디바이스 네트워크를 형성하는 디바이스들의 계층 구조 내의 제1 레벨의 디바이스들이다. 이러한 디바이스들은 처리 회로 상에서 실행되는 소프트웨어가 네트워크 내의 디바이스들을 발견하고 구성할 수 있게 하는 열거 메커니즘을 또한 제공하는 디바이스 통신 프로토콜을 사용하여 통신한다. 시스템 어드레스 공간은 제1 복수의 디바이스에의 할당을 위해 예약되는 어드레스들의 풀을 제공한다. SoC의 어드레스 디코더는, 제1 복수의 디바이스 중의 각각의 디바이스에 대해, 풀 내의 어느 어드레스들이 그 디바이스에 할당되는지의 표시를 유지하는 디바이스 어드레스 디코더를 갖는다. 따라서, 어드레스들의 풀 내의 어드레스를 식별하는 요청이 처리 회로에 의해 발행될 때, 디바이스 어드레스 디코더는 요청이 지향되는 제1 복수의 디바이스 내의 적절한 디바이스를 결정하는 데 사용될 수 있다. 디바이스 어드레스 디코더는 처리 회로 상에서 실행되는 소프트웨어가 열거 메커니즘을 사용하여 디바이스 어드레스 디코더를 발견하고 구성할 수 있게 하기 위해 디바이스 네트워크의 디바이스로서 소프트웨어에 노출된다. 결과적으로, 제1 복수의 디바이스 사이의 어드레스들의 풀의 할당은 소프트웨어 제어하에서 동적으로 재구성될 수 있다.

Description

시스템-온-칩에서 어드레스 디코딩을 핸들링하기 위한 장치 및 방법
본 기술은 시스템-온-칩(system-on-chip, SoC)에서 어드레스 디코딩을 핸들링하기 위한 장치 및 방법에 관한 것이다.
SoC 내에서, 하나 이상의 프로세서 코어들과 같은, SoC 내의 주요 처리 디바이스들이 입력/출력(I/O) 디바이스들 또는 가속기 디바이스들과 같은 디바이스들의 네트워크와 인터커넥트를 통해 결합될 수 있는 경우가 종종 있다. 종종, 디바이스들의 네트워크는 특정 디바이스 통신 프로토콜을 사용하여 통신하도록 배열되고, 그 디바이스 통신 프로토콜은 SoC의 처리 회로 상에서 실행되는 소프트웨어가 디바이스 네트워크 내의 디바이스들을 발견하고 구성할 수 있게 하는 열거 메커니즘을 제공할 수 있다.
그러한 디바이스 통신 프로토콜의 일례는 PCIe(Peripheral Component Interconnect Express) 프로토콜이다. 열거 메커니즘을 제공함으로써, 네트워크의 디바이스들에 관하여 핫 플러그(hot plug)/핫 스왑(hot swap) 기능성을 지원하는 것이 가능하며, 여기서 디바이스들의 구성 또는 수에 있어서의 변경 후에, 열거 메커니즘은 네트워크 내의 디바이스들을 발견하고 구성하기 위해 재수행될 수 있다.
SoC의 시스템 어드레스 공간 내의 영역들은 네트워크 내의 다양한 디바이스들에 할당하기 위해 예약될 수 있다. 종종 디바이스들의 네트워크는 계층 방식으로 배열되며, 별개의 어드레스 영역들이 계층 내의 상위 레벨에 있는 다수의 상이한 디바이스들 각각에 대해 예약될 수 있다. 그러나, 전형적으로 그러한 디바이스들에의 할당을 위해 시스템 어드레스 공간의 큰 부분들을 보수적으로 예약하여, 그러한 디바이스들에 접속될 수 있는, 계층에서 하위에 있는 디바이스들의 수 및 메모리 요구들에 관한 최악의 시나리오들을 수용하는 것이 필요하였다. 이것은 더 큰 멀티-루트 PCIe 계층들의 배치를 방해할 수 있는 중대한 확장성 문제를 야기한다.
하나의 예시적인 배열에서, 시스템-온-칩으로서, 데이터 처리 동작들을 수행하는 처리 회로; 제1 복수의 디바이스들; 처리 회로를 제1 복수의 디바이스들에 결합하는 인터커넥트 - 제1 복수의 디바이스들은 디바이스 네트워크를 형성하는 디바이스들의 계층 구조 내의 제1 레벨의 디바이스들이고, 디바이스 네트워크 내의 디바이스들은 디바이스 통신 프로토콜을 사용하여 통신하도록 배열되고, 디바이스 통신 프로토콜은 처리 회로 상에서 실행되는 소프트웨어가 디바이스들의 네트워크 내의 디바이스들을 발견하고 구성할 수 있게 하는 열거 메커니즘을 제공함 -; 및 처리 회로에 의해 발행된 요청에 의해 지정된 어드레스를 디코딩하여 요청에 대한 수신자를 결정하는 어드레스 디코더를 포함하며, 시스템 어드레스 공간 내에서, 어드레스들의 풀이 제1 복수의 디바이스들에의 할당을 위해 예약되고, 어드레스 디코더는, 제1 복수의 디바이스들 중의 각각의 디바이스에 대해, 풀 내의 어느 어드레스들이 그 디바이스에 할당되는지의 표시를 유지하는 디바이스 어드레스 디코더를 포함하며, 어드레스 디코더는, 요청에 의해 지정된 어드레스가 어드레스들의 풀 내에 있음을 검출하는 것에 응답하여, 디바이스 어드레스 디코더를 이용하여 요청이 제1 복수의 디바이스들 중 어느 디바이스로 지향되는지를 결정하고 요청이 상기 제1 복수 내의 결정된 디바이스로 라우팅되게 하며, 디바이스 어드레스 디코더는 처리 회로 상에서 실행되는 소프트웨어가 열거 메커니즘을 사용하여 디바이스 어드레스 디코더를 발견하고 구성할 수 있게 하여서, 제1 복수의 디바이스들 사이의 어드레스들의 풀의 할당이 소프트웨어 제어하에서 동적으로 재구성될 수 있게 하기 위해 디바이스 네트워크의 디바이스로서 소프트웨어에 노출되도록 배열되는, 시스템-온-칩이 제공된다.
다른 예시적인 배열에서, 데이터 처리 동작들을 수행하는 처리 회로, 제1 복수의 디바이스들, 및 처리 회로를 제1 복수의 디바이스들에 결합하는 인터커넥트를 갖는 시스템-온-칩에서 어드레스 디코딩을 핸들링하는 방법으로서, 제1 복수의 디바이스들은 디바이스 네트워크를 형성하는 디바이스들의 계층 구조 내의 제1 레벨의 디바이스들이고, 방법은 디바이스 네트워크 내의 디바이스들이 디바이스 통신 프로토콜을 사용하여 통신하게 하는 단계 - 디바이스 통신 프로토콜은 처리 회로 상에서 실행되는 소프트웨어가 디바이스들의 네트워크 내의 디바이스들을 발견하고 구성할 수 있게 하는 열거 메커니즘을 제공함 -; 어드레스 디코더를 이용하여 처리 회로에 의해 발행된 요청에 의해 지정된 어드레스를 디코딩하여 요청에 대한 수신자를 결정하는 단계; 시스템 어드레스 공간 내에서, 제1 복수의 디바이스들에의 할당을 위해 어드레스들의 풀을 예약하는 단계; 제1 복수의 디바이스들 중의 각각의 디바이스에 대해, 풀 내의 어느 어드레스들이 그 디바이스에 할당되는지의 표시를 유지하기 위해 어드레스 디코더 내에 디바이스 어드레스 디코더를 제공하는 단계; 요청에 의해 지정된 어드레스가 어드레스들의 풀 내에 있음을 검출하는 것에 응답하여, 디바이스 어드레스 디코더를 이용하여 요청이 제1 복수의 디바이스들 중 어느 디바이스로 지향되는지를 결정하고 요청을 상기 제1 복수 내의 결정된 디바이스로 라우팅하는 단계; 및 처리 회로 상에서 실행되는 소프트웨어가 열거 메커니즘을 사용하여 디바이스 어드레스 디코더를 발견하고 구성할 수 있게 하여서, 제1 복수의 디바이스들 사이의 어드레스들의 풀의 할당이 소프트웨어 제어하에서 동적으로 재구성될 수 있게 하기 위해 디바이스 어드레스 디코더를 디바이스 네트워크의 디바이스로서 소프트웨어에 노출시키는 단계를 포함하는, 방법이 제공된다.
또 다른 예시적인 배열에서, 시스템-온-칩으로서, 데이터 처리 동작들을 수행하기 위한 처리 수단; 제1 복수의 디바이스들; 처리 수단을 제1 복수의 디바이스들에 결합하기 위한 인터커넥트 수단 - 제1 복수의 디바이스들은 디바이스 네트워크를 형성하는 디바이스들의 계층 구조 내의 제1 레벨의 디바이스들이고, 디바이스 네트워크 내의 디바이스들은 디바이스 통신 프로토콜을 사용하여 통신하도록 배열되고, 디바이스 통신 프로토콜은 처리 수단 상에서 실행되는 소프트웨어가 디바이스들의 네트워크 내의 디바이스들을 발견하고 구성할 수 있게 하는 열거 메커니즘을 제공함 -; 및 처리 수단에 의해 발행된 요청에 의해 지정된 어드레스를 디코딩하여 요청에 대한 수신자를 결정하기 위한 어드레스 디코더 수단을 포함하며, 시스템 어드레스 공간 내에서, 어드레스들의 풀이 제1 복수의 디바이스들에의 할당을 위해 예약되고, 어드레스 디코더 수단은, 제1 복수의 디바이스들 중의 각각의 디바이스에 대해, 풀 내의 어느 어드레스들이 그 디바이스에 할당되는지의 표시를 유지하기 위한 디바이스 어드레스 디코더 수단을 포함하고, 어드레스 디코더 수단은, 요청에 의해 지정된 어드레스가 어드레스들의 풀 내에 있음을 검출하는 것에 응답하여, 디바이스 어드레스 디코더 수단을 이용하여 요청이 제1 복수의 디바이스들 중 어느 디바이스로 지향되는지를 결정하고 요청이 상기 제1 복수 내의 결정된 디바이스로 라우팅되게 하며, 디바이스 어드레스 디코더 수단은 처리 수단 상에서 실행되는 소프트웨어가 열거 메커니즘을 사용하여 디바이스 어드레스 디코더 수단을 발견하고 구성할 수 있게 하여서, 제1 복수의 디바이스들 사이의 어드레스들의 풀의 할당이 소프트웨어 제어하에서 동적으로 재구성될 수 있게 하기 위해 디바이스 네트워크의 디바이스로서 소프트웨어에 노출되도록 배열되는, 시스템-온-칩이 제공된다.
본 기술이 첨부 도면들에 예시된 바와 같은 그의 예들을 참조하여, 단지 예로서, 추가로 설명될 것이다.
도 1은 디바이스 네트워크를 형성하는 디바이스들의 계층 구조 내의 상이한 포트들에 별개의 메모리 영역들을 할당할 때 발생할 수 있는 확장성 문제를 개략적으로 예시하는 도면이다.
도 2는 하나의 예시적인 배열에 따른, 다수의 상이한 루트 포트 디바이스들 사이의 어드레스 풀 내의 영역들의 동적 재할당을 가능하게 하기 위해, SoC 레벨 지원과 조합하여, SoC 구현 내에서 이용될 수 있는 플래트닝 포털 브릿지(Flattening Portal Bridge, FPB) 형태의 어드레스 디코딩을 예시한다.
도 3은 하나의 예시적인 배열에 따른 SoC를 예시하는 블록도이다.
도 4는 하나의 배열에 따른 도 3의 MMIO 디코더를 개략적으로 예시한다.
도 5는 디바이스 네트워크의 디바이스들을 발견하고 구성하기 위해 하나의 예시적인 배열에 따라 사용될 수 있는 소프트웨어 제어 구성 프로세스를 예시하는 흐름도이며, 이 프로세스 동안 MMIO 디코더가 또한 발견되고 구성된다.
도 6은 하나의 예시적인 배열에서 수행되는 어드레스 디코딩 동작을 예시하는 흐름도이다.
도 7은 본 명세서에 설명된 기술들에 따른, 메모리 풀이 다수의 루트 포트들 사이에 어떻게 할당될 수 있는지를 개략적으로 예시한다.
도 8은 하나의 예시적인 배열에 따른, MMIO 디코더의 소프트웨어 프로그래밍 가능 메모리 매핑 구성 레지스터들 내에서 이용될 수 있는 지정된 벤더 특정 확장 능력(Designated Vendor-Specific Extended Capability, DVSEC) 구조를 예시한다.
도 9는 하나의 예시적인 배열에 따른, 핫 플러그 또는 핫 스왑 이벤트에 응답하여 수행되는 단계들을 예시하는 흐름도이다.
도 10은 하나의 예시적인 배열에 따른, 핫 제거 이벤트에 응답하여 수행되는 단계들을 예시하는 흐름도이다.
앞서 논의된 바와 같이, 디바이스 네트워크를 형성하는 디바이스들의 계층 구조를 SoC 내의 인터커넥트에 접속할 때, 전형적으로 그러한 디바이스들에의 메모리 매핑 I/O(memory mapped I/O, MMIO) 영역들의 할당을 위해 시스템 어드레스 공간의 큰 부분들을 보수적으로 예약하는 것이 필요하였다. 특히, 루트 포트와 같은, 계층 구조에서 상위 레벨에 있는 디바이스를 언제 고려할지, 얼마나 많은 디바이스들이 그 디바이스에 결합될 것인지, 또는 그러한 디바이스들의 메모리 요구들이 무엇일 수 있는지가 전형적으로 알려져 있지 않을 수 있고, 따라서 어드레스 공간의 보수적으로 큰 영역이 루트 포트와 같은 디바이스에 대해 할당될 수 있다. 이것은 중대한 확장성 문제들을 야기할 수 있다.
앞서 언급된 바와 같이, 그러한 디바이스들의 네트워크에 대한 일반적으로 사용되는 하나의 통신 프로토콜은 SoC의 처리 회로 상에서 실행되는 소프트웨어가 네트워크 내의 디바이스들을 발견하고 구성할 수 있게 하는 열거 메커니즘을 제공하는 PCIe 프로토콜이다. PCI-SIG(Peripheral Component Interconnect Special Interest Group)는 2017년 2월의 PCI-SIG 엔지니어링 변경 통지(Engineering Change Notice)(그의 사본이 https://pcisig.com/sites/default/files/specification_documents/ECN_FPB_9_Feb_2017.pdf에서 이용 가능함)에 설명된 플래트닝 포털 브릿지(FPB) 어드레스 디코딩 메커니즘을 도입했다. FPB 메커니즘은 네트워크 내의 라우팅 ID들의 더 효율적이고 조밀한 할당을 허용하고, 비-인접 범위들에서 라우팅 ID들 및 메모리 공간 자원들을 할당하여, 시스템 소프트웨어가 이러한 자원들의 풀들을 배정할 수 있게 하는 메커니즘들을 정의하며, 그 풀들로부터 시스템 소프트웨어는 플래트닝 포털 브릿지 아래의 기능들에 "빈(bin)들"을 할당할 수 있다. FPB 능력을 구현하는 브릿지는 그 자체가 FPB로 지칭되고, FPB 메커니즘은 특정한 브릿지들에 대해 인에이블 또는 디스에이블될 수 있다.
따라서, 특정 브릿지 디바이스(본 명세서에서 루트 포트 디바이스로도 지칭됨)와 관련하여 FPB 스킴을 이용할 때, 어드레스 공간의 풀 내의 어드레스 영역 부분들이 FPB 아래의 특정 디바이스들에 할당될 수 있고, FPB는 그 통신에 대해 지정된 어드레스가 브릿지의 다른 측의 특정 디바이스들에 할당된 어드레스 영역들 중 하나에 속하는지에 따라 브릿지를 통한 통신 상에서 전파할지를 결정할 수 있다.
FPB 스킴은, 어드레스들의 풀들의 할당을 통해, 이용 가능한 메모리 어드레스 공간을 더 효율적으로 활용하는 데 도움이 될 수 있다. 그러나, FPB 스킴은 PCI 브릿지들에 대해서만 정의된다. 또한, 그러한 FPB 스킴의 사용을 통해 이용 가능한 잠재적인 이익들을 최적화할 수 있기 위해, PCI-SIG는 새로운 하드웨어 및 소프트웨어가 요구될 것임을 시사했으며, 특히 FPB 어드레스 디코딩 메커니즘에 대한 SoC 레벨 지원이 있는 경우에만 스킴으로부터 상당한 이익들을 달성하는 것이 가능할 것이다.
본 명세서에 설명된 기술들은 FPB 어드레스 디코딩을 위한 그러한 SoC 레벨 지원을 제공하기 위한 효율적이고 효과적인 메커니즘을 제공하고자 한다.
하나의 예시적인 배열에서, 시스템-온-칩은 데이터 처리 동작들을 수행하기 위한 처리 회로, 제1 복수의 디바이스, 및 처리 회로를 제1 복수의 디바이스에 결합하는 인터커넥트를 갖는다. 제1 복수의 디바이스는 디바이스 네트워크를 형성하는 디바이스들의 계층 구조 내에서 제1 레벨의 디바이스들을 형성한다. 디바이스 네트워크 내의 디바이스들은 디바이스 통신 프로토콜을 사용하여 통신하고, 그 프로토콜은 처리 회로 상에서 실행되는 소프트웨어가 디바이스들의 네트워크 내의 디바이스들을 발견하고 구성할 수 있게 하는 열거 메커니즘을 제공한다. 이 프로세스에 사용되는 소프트웨어는 복수의 형태를 취할 수 있지만, 예를 들어 디바이스 통신 프로토콜에 의해 제공되는 열거 메커니즘을 이용하는 데 사용될 수 있는 운영 체제 소프트웨어 및/또는 부트 펌웨어일 수 있다.
SoC는 요청에 대한 수신자를 결정하기 위해 처리 회로에 의해 발행되는 요청에 의해 지정된 어드레스를 디코딩하는 어드레스 디코더를 추가로 갖는다. 시스템 어드레스 공간 내에서, 어드레스들의 풀은 제1 복수의 디바이스에의 할당을 위해 예약되고, 어드레스 디코더는, 제1 복수의 디바이스 중의 각각의 디바이스에 대해, 풀 내의 어느 어드레스들이 그 디바이스에 할당되는지의 표시를 유지하는 디바이스 어드레스 디코더를 갖는다. 그 결과, 요청에 의해 지정된 어드레스가 어드레스들의 풀 내에 있다는 것을 검출하면, 디바이스 어드레스 디코더는 요청이 제1 복수의 디바이스 중 어느 디바이스로 지향되는지를 결정하고, 요청이 제1 복수 내의 결정된 디바이스로 라우팅되게 하는 데 이용될 수 있다.
본 명세서에 설명된 기술들은 디바이스 어드레스 디코더 내에서 요구되는 정보를 유지하기 위한 매우 효율적이고 효과적인 메커니즘을 제공한다. 특히, 디바이스 어드레스 디코더는 디바이스 네트워크의 디바이스로서 소프트웨어에 노출되도록 배열된다. 그 결과, 이것은 처리 회로 상에서 실행되는 소프트웨어가 열거 메커니즘을 사용하여 디바이스 어드레스 디코더를 발견하고 구성할 수 있게 한다. 그 결과, 디바이스 통신 프로토콜에 대해 제공되는 표준 열거 메커니즘을 이용함으로써, 디바이스 어드레스 디코더의 존재가 처리 회로 상에서 실행되는 소프트웨어에 의해 결정될 수 있고, 또한 디바이스 네트워크 내의 디바이스들을 구성하기 위한 표준 기술들이 이어서 디바이스 어드레스 디코더를 구성하는 데 또한 이용될 수 있다. 그 결과, 이것은 계층 구조 내의 제1 복수의 디바이스를 형성하는 다양한 디바이스들로의 요청들의 라우팅을 가능하게 하기 위해 필요한 요구된 정보를 SoC 내의 디코드 레벨에서 캡처하기 위한 표준화된 메커니즘을 제공한다.
열거 메커니즘은, 예를 들어 핫 플러그 또는 핫 스왑 활동들로 인해, 디바이스 네트워크 내의 디바이스들의 수 또는 구성에 있어서 변경이 있을 때마다 재호출될 수 있기 때문에, 전술한 메커니즘은 디바이스 어드레스 디코더에 의해 유지되는 정보가 열거 메커니즘의 임의의 재수행 동안 자동으로 갱신될 수 있게 하고, 그렇기 때문에 제1 복수의 디바이스 사이의 어드레스들의 풀의 할당이 소프트웨어 제어하에서 동적으로 재구성될 수 있게 하기 위한 매우 효율적이고 효과적인 메커니즘을 제공한다. 이 프로세스 동안, 소프트웨어는 네트워크 내의 모든 디바이스들을 재구성하기 위해 침습적 재균형 프로세스를 수행해야 함이 없이 네트워크 구성에 있어서의 변경들을 수용하기 위해 어드레스들의 풀이 어떻게 할당되는지를 조정하려고 시도할 수 있다.
SoC 내에서 어드레스 디코딩을 관리하기 위한 그러한 메커니즘은 상기의 침습적 재균형 문제를 회피하려고 시도하기 위해 네트워크 내의 다양한 디바이스들에의 할당에 사용하기 위해 시스템 어드레스 공간의 큰 부분들을 보수적으로 예약할 필요를 회피함으로써 시스템 어드레스 공간의 훨씬 더 효율적인 사용이 이루어질 수 있게 한다. 예를 들어, PCI-SIG에 의해 제안된 앞서 논의된 FPB 메커니즘을 고려하여, 위에서 제시된 방식으로 디바이스 어드레스 디코더를 형성함으로써, FPB 어드레스 디코딩 메커니즘에 대한 SoC 레벨 지원을 용이하게 하여, 디바이스들의 PCIe 네트워크에 대해 어드레스 공간을 할당할 때 어드레스 공간에 있어서의 상당한 절약이 실현될 수 있게 하고, 풀 내의 어드레스 공간의 효율적인 재할당을 가능하게 하기 위한 매우 효과적이고, 효율적이고, 표준화된 메커니즘이 제공된다.
디바이스 어드레스 디코더가 소프트웨어에 노출되도록 배열될 수 있는 다수의 방법이 존재하지만, 하나의 예시적인 배열에서 디바이스 어드레스 디코더는 통합 엔드포인트 디바이스로서 노출되는데, 즉 디바이스들의 네트워크 내의 엔드포인트인 것으로 간주되고, SoC에 통합된다.
제1 복수의 디바이스는 다양한 형태를 취할 수 있지만, 일 실시예에서 루트 포트 디바이스로도 지칭될 수 있는 복수의 브릿지 디바이스를 포함한다.
전술한 기술이 그와 함께 이용될 수 있는 다수의 디바이스 통신 프로토콜이 존재한다. 특히, SoC의 처리 회로 상에서 실행되는 소프트웨어가 디바이스들을 발견하고 구성하여서, 핫 플러그/핫 스왑 기능성을 지원할 수 있게 하는 열거 메커니즘을 제공하는 다수의 디바이스 통신 프로토콜이 존재한다. 그러나, 하나의 예시적인 구성에서, 디바이스 통신 프로토콜은 PCIe(Peripheral Component Interconnect Express) 프로토콜이고, 디바이스 어드레스 디코더는 루트 컴플렉스 통합 엔드포인트 디바이스로서 소프트웨어에 노출되도록 배열된다. PCIe 프로토콜 내에서, 디바이스 어드레스 디코더를 루트 컴플렉스 디바이스로서 제공함으로써, 이것은 처리 회로 상에서 실행되는 소프트웨어가 디바이스 어드레스 디코더를 열거 가능한 디바이스로서 간주하기 위한 간단한 메커니즘을 제공한다.
하나의 예시적인 배열에서, 디바이스 어드레스 디코더는 연관된 루트 버스를 가지며, 그를 통해 디바이스 어드레스 디코더는 처리 회로 상에서 실행되는 소프트웨어에 의해 액세스 가능하다. 따라서, 디바이스 어드레스 디코더는 네트워크의 디바이스들을 발견하고 구성하는 데 사용되는 처리 회로 상에서 실행되는 소프트웨어에 대한 그 자신의 루트 버스를 가질 수 있다. 이것은 표준 PCIe 방법들이 디바이스 어드레스 디코더를 발견하고 구성하는 데 사용될 수 있는 것을 보장한다.
디바이스 어드레스 디코더가 임의의 특정 요청이 제1 복수의 디바이스 중 어느 디바이스로 지향되는지를 결정하는 데 요구되는 정보를 저장하도록 구성될 수 있는 다수의 방법이 존재한다. 그러나, 하나의 예시적인 배열에서 디바이스 어드레스 디코더는 디바이스 어드레스 디코더가 요청이 제1 복수의 디바이스 중 어느 디바이스로 지향되는지를 결정할 수 있게 하기 위해 처리 회로 상에서 실행되는 소프트웨어의 제어하에서 구성 정보가 저장되는 복수의 레지스터를 포함하는 확장 능력 구조를 구비한다. 이것은 어드레스들의 풀이 제1 복수의 디바이스 사이에 어떻게 할당되었는지에 관한 요구된 정보를 캡처하기 위한 효율적인 메커니즘을 제공할 수 있다.
하나의 특정 예에서, 확장 능력 구조는 연관된 디바이스를 디바이스 어드레스 디코더인 것으로서 식별하는 데 사용되는 헤더 필드를 갖는 지정된 벤더 특정 확장 능력(DVSEC) 구조이다. DVSEC는 PCI 익스프레스 기능에 의해 구현되도록 허용되어, PCI 익스프레스 컴포넌트 벤더들이 확장 능력 메커니즘을 사용하여 다양한 벤더들에 의한 컴포넌트들에 존재할 수 있는 벤더 특정 레지스터들을 노출시킬 수 있게 하는 선택적인 확장 능력이다. 헤더 필드의 사용을 통해, 디바이스 어드레스 디코더에 대해 특정 형태의 DVSEC 구조가 제공될 수 있다. DVSEC 구조의 사용은 어드레스들의 풀이 네트워크의 계층 구조 내의 다양한 제1 디바이스들 사이에 어떻게 할당되는지에 관한 요구된 정보를 캡처하기 위한 특히 효율적인 메커니즘을 제공하는 것으로 밝혀졌다.
DVSEC 구조는 다양한 형태를 취할 수 있지만, 일례에서 제1 복수의 디바이스 중의 디바이스들의 수를 식별하는 개수 필드를 포함한다. 또한, 하나의 예시적인 배열에서 DVSEC 구조는 제1 복수의 디바이스 중의 각각의 디바이스와 연관된 메모리 관련 레지스터들을 포함하며, 이들은 풀 내의 어느 어드레스들이 제1 복수의 디바이스 중의 연관된 디바이스에 할당되는지를 식별하는 어드레스 정보를 포함하도록 처리 회로 상에서 실행되는 소프트웨어의 제어하에서 프로그래밍된다. 따라서, DVSEC 구조 내에서, 별개의 메모리 관련 레지스터들은 제1 복수의 디바이스 중의 각각의 디바이스에 대해 유지될 수 있으며, 그러한 레지스터들은 열거 프로세스 동안 소프트웨어 제어하에서 프로그래밍 가능하다.
어드레스들의 풀에 의해 정의된 어드레스 공간은 다양한 방식들로 배열될 수 있지만, 일례에서 복수의 어드레스 공간 미립(address space granule)으로부터 형성되고, DVSEC 구조의 메모리 관련 레지스터들에 프로그래밍된 어드레스 정보는 어느 어드레스 공간 미립들이 제1 복수의 디바이스 중의 각각의 디바이스에 할당되는지를 식별한다.
그러한 배열 내에서, 제1 복수의 디바이스 중의 각각의 디바이스에 대해, DVSEC 구조 내의 메모리 관련 레지스터들은 어느 어드레스 공간 미립들이 디바이스에 할당되는지를 식별하는 데 사용되는 다수의 벡터를 저장할 수 있다. 임의의 특정 디바이스에 할당된 어드레스 공간 미립들은 인접할 필요는 없으며, 따라서 미립들이 할당되는 방법에 대한 큰 유연성이 존재한다. 또한, 임의의 특정 시점에 어드레스 공간 미립들 중 하나 이상이 어떠한 디바이스에도 할당되지 않을지도 모른다.
하나의 예시적인 배열에서, DVSEC 구조 내의 메모리 관련 레지스터들은 또한 제1 복수의 디바이스 중의 각각의 디바이스에 대한 기본 어드레스 및 어드레스 공간 미립들의 크기를 식별할 수 있다. 따라서, 몇몇 구현들에서 제1 복수의 디바이스 중의 디바이스들 모두가 동일한 기본 어드레스를 부여받을 수 있고, 따라서 메모리 어드레스들의 풀 내의 공통 포인트를 식별할 수 있지만, 이것은 필요조건은 아니며 상이한 구현들에서 상이한 기본 어드레스들이 상이한 제1 디바이스들에 할당되어, 그러한 제1 복수의 디바이스에 대한 시작 어드레스로서의 역할을 하는 풀 내의 상이한 포인트들을 식별할 수 있다.
또한, 디바이스들 각각이 동일한 크기의 어드레스 공간 미립들을 할당받을 수 있지만, 이것 또한 필요조건은 아니고, 따라서 상이한 크기 미립들이 상이한 디바이스들에 할당될 수 있다. 디바이스 어드레스 디코더가 열거 메커니즘 동안 발견되고 구성되는 중앙집중식 방식으로 인해, 구성을 수행하기 위해 처리 회로 상에서 실행되는 소프트웨어는 임의의 특정 제1 디바이스에 할당된 어드레스 공간 미립들이 임의의 다른 디바이스에 할당된 어드레스 공간 미립들과 중첩되고 있지 않는 것을 보장할 수 있다.
DVSEC 구조 내의 메모리 관련 레지스터들은 다양한 방식으로 조직될 수 있다. 그러나, 하나의 예시적인 구현에서, 제1 복수의 디바이스 중의 각각의 디바이스는 또한 풀 내의 어느 어드레스들이 그 디바이스에 할당되는지를 식별하는 어드레스 정보를 포함하도록 처리 회로 상에서 실행되는 소프트웨어의 제어하에서 프로그래밍되는 메모리 관련 레지스터들을 포함한다. 그러한 구현에서, 소프트웨어는 제1 복수의 디바이스 중의 개별 디바이스들의 메모리 관련 레지스터들 내에 저장된 것과 동일한 어드레스 정보를 유지하기 위해 디바이스 어드레스 디코더의 DVSEC 구조 내의 각각의 디바이스에 대한 메모리 관련 레지스터들을 프로그래밍하도록 배열될 수 있다. 따라서, 그러한 배열에서, 동일한 값들이 제1 복수의 디바이스 내의 특정 디바이스의 메모리 관련 레지스터들, 및 디바이스 어드레스 디코더의 DVSEC 구조 내의 대응하는 메모리 관련 레지스터들 둘 모두에 프로그래밍될 수 있다. 이것은 열거 프로세스 동안 디바이스 어드레스 디코더를 구성하는 데 수반되는 오버헤드를 최소화한다.
제1 복수의 디바이스는 다양한 형태들을 취할 수 있고, 일 구현에서 복수의 PCIe 루트 포트 디바이스를 포함할 수 있다. 일 구현에서 제1 복수 중의 디바이스들 모두가 PCIe 루트 포트 디바이스들일 수 있지만, 대안적인 구현에서 제1 복수의 디바이스 중 하나 이상이 다른 형태를 취할 수 있고, 따라서 예를 들어 제1 복수의 디바이스는 하나 이상의 통합 엔드포인트 디바이스를 추가로 포함할 수 있다.
어드레스들의 풀은 다양한 형태들을 취할 수 있지만, 일 구현에서 어드레스들의 풀은 시스템 어드레스 공간의 메모리 매핑 I/O(MMIO) 영역이다.
어드레스들의 풀이 단일 풀을 포함할 수 있지만, 일 구현에서 어드레스들의 풀은 상위 풀 및 하위 풀을 포함한다. 특히, 하위 풀은 상위 풀 내의 어드레스들을 식별하기에 불충분한 수의 어드레스 비트를 사용하여 어드레싱 가능한 시스템 어드레스 공간의 제1 영역 내에 있을 수 있다. 그러한 접근법에 의해, 감소된 어드레스 공간을 사용하는 레거시 시스템들과의 호환성을 제공하는 것이 가능하다. 하나의 특정 예에서, 그러한 레거시 시스템들은 시스템 어드레스 공간 내의 4GB 경계까지의 어드레스들만을 이용하는 것이 가능할 수 있고, 따라서 하위 풀은 4GB 경계 아래의 그러한 시스템 어드레스 공간 내에 할당될 수 있는 반면, 상위 풀은 4GB 경계 위에 할당될 수 있다.
이제 도면들을 참조하여 특정 예들이 설명될 것이다.
본 명세서에 설명된 기술들은 이용되는 디바이스 통신 프로토콜이 소프트웨어가 네트워크 내의 디바이스들을 발견하고 구성할 수 있게 하는 열거 메커니즘을 제공하는 임의의 디바이스들의 네트워크와 관련하여 이용될 수 있다. 이하의 논의의 목적을 위해, PCIe 프로토콜이 고려될 것이다.
도 1은 PCIe 네트워크를 형성하는 디바이스들과 관련하여 핫 플러그 및/또는 핫 스왑 활동들을 지원하기 위해, PCIe 네트워크 내의 디바이스들에 대해 충분한 시스템 어드레스 공간을 예약하려고 시도할 때 발생할 수 있는 문제를 개략적으로 예시하는 도면이다. 도 1은 인터커넥트(25)를 통해 디바이스들의 네트워크에 결합된 프로세서 코어들(15, 20)과 같은, 복수의 처리 요소를 포함하는 시스템(10)을 도시한다. 디바이스들의 네트워크는 계층 구조로 배열되고, 계층 구조의 상위 레벨은 인터커넥트(25)에 접속된 다수의 루트 포트 디바이스(30, 35)를 포함하며, 이어서 다양한 다른 디바이스들이 그러한 루트 포트들을 통해 인터커넥트(25)에 접속된다. 다른 디바이스들은 박스들(40, 45)에 의해 집합적으로 예시된다.
디바이스 네트워크의 디바이스들 중 일부는 칩 상에 제공될 수 있지만, 다른 디바이스들은 칩 밖에 제공될 수 있다. 예를 들어, 프로세서 코어들(15, 20), 인터커넥트(25), 및 적어도 루트 포트들(30, 35)에 의해 형성되는 디바이스 네트워크의 상위 레벨을 통합하는 시스템-온-칩(SoC)이 제공될 수 있다. 그러나, 디바이스 네트워크의 계층 구조의 다른 레벨들은 칩 밖에 제공될 수 있고, 따라서 디바이스들(40, 45)은 칩 밖에 있을 수 있다.
디바이스 네트워크는 다양한 형태를 취할 수 있지만, 본 논의의 목적을 위해 앞서 논의된 바와 같이, 디바이스 네트워크는 PCIe 네트워크인 것으로 가정될 것이다. 디바이스 네트워크 내의 다양한 디바이스들은 메모리 매핑 I/O(MMIO) 디바이스들로서 취급되고, 시스템 어드레스 공간(50) 내의 메모리의 MMIO 영역들을 할당받는다. 루트 포트들(30, 35)과 같은, 디바이스 네트워크 내의 상위 레벨 디바이스들에 메모리 어드레스 공간을 할당할 때, 그러한 다양한 디바이스들의 메모리 요구들을 고려하여, 디바이스 네트워크 내의 그러한 루트 포트들에 접속된 다양한 디바이스들에 어드레스들이 할당될 수 있게 하기에 충분한 공간을 할당하는 것이 바람직하다. 예를 들어 시스템의 부트 시간에 발생할 수 있는, 어드레스 공간이 처음에 할당되는 때에 이것이 알려져 있지 않은 경우가 종종 있다. 그러나, 불충분한 공간이 할당되는 경우, 이것은, 예를 들어 추가적인 디바이스가 특정 루트 포트에 접속되지만, 그 추가적인 디바이스의 메모리 요구들을 수용하기에는 그 루트 포트에 할당된 공간이 불충분할 때, 필연적으로 열거 실패들로 이어질 수 있다. 그 경우에, 침습적 재균형 프로세스를 수행하는 것이 필요할 수 있으며, 그 시간 동안 메모리 공간은 네트워크 내의 잠재적으로 모든 디바이스들 사이에 재할당될 필요가 있을 수 있다. 이것은 매우 중대한 성능 영향을 가질 수 있다.
도 1에 도시된 바와 같이, 그러한 열거 실패들 및 재균형에 대한 잠재적 필요성을 완화시키려고 시도하기 위해, 알려진 기술에 따르면 메모리 어드레스 공간의 영역들이 루트 포트들 각각에 할당될 수 있고, 할당되는 메모리의 양은 디바이스 계층에서 하위에 있는 디바이스들의 수 및 메모리 요구들에 관한 최악의 시나리오들을 수용하려고 시도하기 위해 보수적으로 선택된다. 따라서, 각각의 루트 포트(30, 35)에 대해, 시스템 어드레스 공간(50) 내의 별개의, 보수적으로 크기설정된 영역(55, 60)이 할당될 수 있다.
또한, 상이한 어드레스 영역들이 시스템 어드레스 공간의 상이한 부분들에서 할당될 필요가 있는 경우가 종종 있다. 예를 들어, 어드레스들을 지정하기 위해 감소된 수의 비트들만을 사용할 수 있는 컴포넌트들과의 역호환성, 예를 들어 최대 어드레스가 4GB인 32 비트 어드레싱을 유지하기 위해, 별개의 영역들(65, 70)이 또한 그 하위 시스템 어드레스 공간에서 각각의 루트 포트에 대해 할당될 필요가 있을 수 있다. 각각의 루트 포트에 별개의 영역들을 할당하는 요구는, 이용 가능한 공간의 양이 비교적 적기 때문에, 그 하위 어드레스 공간 내에 특히 극심한 어드레스 공간 압박을 야기할 수 있다.
도 2는 FPB 메커니즘이 인에이블되고 SoC 레벨 지원이 제공되는 상황들에서, 시스템 어드레스 공간이 어떻게 더 최적으로 이용될 수 있는지를 개략적으로 예시한다. 특히, 앞서 논의된 도 1과 도 2의 비교로부터 명백할 바와 같이, 각각의 루트 포트에 대해 별개의 시스템 어드레스 공간들을 예약해야 하기보다는, 모든 루트 포트 디바이스들(30, 35)과 관련하여 사용하기 위해 단일 어드레스 풀이 예약될 수 있다. 도시된 특정 예에서, 4 기가바이트(GB) 어드레스 경계의 위 및 아래에 할당된 별개의 메모리 풀들이 존재하고, 따라서 루트 포트들(30, 35)(및 실제로 디바이스 네트워크의 최고 레벨을 형성하는 임의의 다른 디바이스들, 즉 인터커넥트(25)에 직접 접속된 컴포넌트들)과 관련하여 사용하기 위해 할당된 단일 상위 MMIO 메모리 풀(80) 및 단일 하위 MMIO 메모리 풀(85)이 존재한다. 메모리 어드레스 풀들(80, 85) 각각은 개별 루트 포트들에 할당될 수 있는 청크들로 분할될 수 있으며, 본 명세서에서 이러한 청크들은 어드레스 공간 미립들로도 지칭된다. 각각의 루트 포트에 할당되는 미립들의 크기는 동일할 필요는 없고, 특정 루트 포트에 할당되는 개별 미립들은 인접할 필요가 없다. 그러나, 메모리 풀 내에 형성된 각각의 미립은 루트 포트들 중 하나에만 할당될 것이고, 따라서 개별 루트 포트들에 의해 사용되는 어드레스들은 서로 별개로 유지된다.
앞서 논의된 FPB 스킴은 브릿지 디바이스들에의 할당을 위한 메모리 풀들을 유지하는 개념을 도입하지만, PCI-SIG에 의해 발표된 앞서 언급된 FPB 논문은 새로운 소프트웨어 및 하드웨어가 개발될 필요가 있을 것이고, 특히 FPB 스킴을 사용하여 어드레스 공간이 상이한 루트 포트들 사이에 할당되는 방법을 제어함으로써 상당한 이익들이 달성될 경우 FPB 어드레스 디코딩에 대한 SoC 레벨 지원이 요구될 것임을 인정한다.
본 명세서에 설명된 기술들은 (루트 포트들과 같은) 제1 레벨 디바이스들에 걸친 동적 할당 및 할당해제를 가능하게 하여서, 메모리 할당들이 그러한 디바이스들 사이에서 이동될 수 있게 하기 위해 SoC 레벨 지원을 제공한다. 이것은 어드레스가 브릿지/루트 포트 하류의 포인트에 매핑되는지 여부만을 결정하는, 기존의 FPB 기능성을 크게 향상시킨다. 기존의 FPB 메커니즘은, 현재의 할당들에 기초하여, 하나의 브릿지/루트 포트로부터 다른 것으로의 어떠한 라우팅도 명시적으로 행하지 않는다. 그러나, 본 명세서에 설명된 SoC 레벨 향상들을 통해, 현재의 할당들에 기초하여, 올바른 루트 포트로의 명시적 라우팅을 수행하는 것이 가능하다.
특히, 이하에서 설명되는 기술들은 FPB 어드레스 디코딩 메커니즘을 사용하기 위한 표준화된 SoC 레벨 지원을 제공하여, 시스템 소프트웨어가 잘 알려진 PCIe 방법들을 사용하여 다양한 PCIe 루트 포트들 사이의 풀들 내의 어드레스 공간의 동적 재할당을 지원할 수 있게 한다. 특히, 나머지 도면들을 참조하여 더 상세히 논의될 바와 같이, 어드레스 디코딩 컴포넌트는 SoC 레벨에서, 예를 들어 PCI 디바이스 네트워크를 열거하기 위해 SoC 상에서 실행되는 소프트웨어에 노출되는 SoC 인터커넥트 내에서 제공될 수 있으며, 따라서 그 어드레스 디코딩 컴포넌트는 열거 및 구성의 목적들을 위한 디바이스 네트워크의 디바이스로서 간주된다. 그 결과, 그 어드레스 디코딩 컴포넌트는 표준 PCIe 열거 메커니즘을 사용하여 발견되고 구성될 수 있으며, 이는 네트워크의 디바이스들 사이의 어드레스들의 풀의 할당이 소프트웨어 제어하에서 동적으로 재구성될 수 있게 하기 위한 특히 효율적이고, 효과적이고, 표준화된 메커니즘을 제공한다.
이것은 도 3의 블록도에 추가로 예시된다. 이 예에서는, 인터커넥트(115)에 접속된 다수의 프로세서 코어(105, 110)를 갖는 SoC(100)가 제공된다. PCIe 디바이스 네트워크가 또한 도 3에 도시된 바와 같이 제공되며, 그 디바이스 네트워크의 계층 구조 내의 제1 레벨은 인터커넥트(115)에 접속되고 SoC(100)의 일부인 것으로 간주되는 다수의 컴포넌트(125, 130, 135, 140)를 포함한다. 도 3에 도시된 바와 같이, 이들은 전형적으로 다수의 루트 포트(125, 130, 135)를 포함할 것이지만, 하나 이상의 추가적인 유형의 디바이스, 예를 들어 통합 엔드포인트 디바이스(140)를 또한 포함할 수 있다.
당업자에 의해 이해될 바와 같이, 루트 포트(125)와 관련하여 예로서 도시된 바와 같이, 디바이스 네트워크의 계층 구조의 제1 레벨을 형성하는 다수의 디바이스가 루트 포트들에 접속될 수 있다. 예를 들어, 루트 포트(125)에 접속되고 다수의 엔드포인트 디바이스(150, 155, 160)에 또한 접속된 스위치 디바이스(145)가 제공될 수 있다. 실제로 디바이스 네트워크는 다수의 상이한 계층 레벨을 가질 수 있고, 다양한 상이한 형태들을 취할 수 있으며, 도 3에서의 스위치(145) 및 엔드포인트들(150, 155, 160)의 사용은 전적으로 예시를 위해 제공된다는 것이 인식될 것이다.
인터커넥트(115)와 관련하여, 인터커넥트에서 수신된 요청들에 응답하여, 그러한 요청들에 대한 적절한 수신자를 결정하는 어드레스 디코더(120)가 제공될 수 있다. 따라서, 예로서, 프로세서 코어는 어드레스를 지정하는 요청을 발행할 수 있고, 어드레스 디코더(120)는 그 요청을 인터커넥트를 통해 적절한 수신자 디바이스로 라우팅하는 방법을 결정하는 데 사용될 수 있다. 도 3에서, 어드레스 디코더(120)는 인터커넥트(115)의 일부인 것으로서 개략적으로 도시되지만, 대안적인 구현들에서 어드레스 디코더는 적어도 부분적으로 인터커넥트 외부에 있을 수 있는데, 예를 들어 프로세서 코어들(105, 110) 중 하나 이상 내의 기능성에 의해 부분적으로 제공될 수 있다.
앞선 논의들로부터, PCIe 네트워크 내의 디바이스들은 MMIO 어드레스 영역들 내의 어드레스들을 할당받고, FPB 스킴에 따라 하나 이상의 메모리 풀, 예를 들어 도 2에 도시된 상위 메모리 풀(80) 및 하위 메모리 풀(85)이 그러한 디바이스들과 관련하여 사용하기 위해 할당될 수 있다는 것이 인식될 것이다. 컴포넌트들(125, 130, 135, 140)로 구성된 계층 구조 내의 제1 레벨을 고려하면, 메모리 풀 내의 개별 어드레스 공간 미립들이 그러한 디바이스들(125, 130, 135, 140) 중 특정 디바이스들에 할당될 수 있다.
그러한 메모리 풀들의 사용에 의해 용이하게 되는 바와 같은 어드레스 공간의 효율적인 이용을 가능하게 하기 위해, 메모리 풀들 내의 어드레스 공간 미립들이 PCIe 네트워크 내의 상이한 제1 레벨 디바이스들 사이에 재할당되는 것을 효율적으로 가능하게 하기 위한 시스템 레벨 메커니즘을 제공하는 것이 바람직하다. 예를 들어, 루트 포트(125)를 고려하면, 그 루트 포트를 통해 인터커넥트에 결합된 PCIe 네트워크 내의 개별 컴포넌트들 각각의 어드레싱을 지원하기 위해 충분한 양의 어드레스 공간이 그 루트 포트에 할당될 필요가 있다. 따라서, 예를 들어, 엔드포인트 디바이스들(150, 155, 160) 각각은 루트 포트(125)에 대해 할당된 어드레스 공간 미립들을 사용하여 충분한 어드레스 공간을 할당받을 필요가 있을 것이다. 또한, 핫 플러그 및 핫 스왑 활동들과 같은 활동들은 PCIe 네트워크의 구성에 대한 변경들을 초래하여, 예를 들어 특정 루트 포트들에 접속된 디바이스들의 수를 변경하고, 임의의 개별 루트 포트에 의해 지원될 필요가 있는 메모리 요구들에 잠재적으로 영향을 미칠 수 있다.
앞서 논의된 FPB 메커니즘을 사용할 때, 다양한 루트 포트들 및/또는 PCIe 디바이스 네트워크의 디바이스들의 계층 구조 내에서 제1 레벨을 형성하는 다른 컴포넌트들 사이의 어드레스 공간 미립들의 재할당을 위한 SoC 레벨 지원을 제공하는 것이 매우 바람직할 것이다. 그러한 SoC 레벨 지원을 제공하는 목적은 그러한 디바이스들 사이의 어드레스 공간의 재할당을 효율적으로 가능하게 하여, 그렇지 않으면 네트워크 내의 디바이스들의 상당한 수 그리고 잠재적으로는 모두에 대한 어드레스 공간 매핑의 변경을 수반할 수 있는, 침습적 재균형 메커니즘을 수행해야 함이 없이 가능한 경우는 언제나 요구된 변경들이 수용될 수 있게 한다는 것이다.
본 명세서에 설명된 기술들에 따르면, 어드레스 디코더(120)는 PCIe 네트워크의 디바이스로서 소프트웨어에 노출되는, MMIO 디코더(본 명세서에서 디바이스 어드레스 디코더로도 지칭됨)를 포함한다. 특히, PCIe 디바이스 네트워크를 발견하고 구성하기 위해 열거 프로세스 동안 프로세서 코어들(105, 110) 중 하나 상에서 실행될 수 있는 소프트웨어(펌웨어를 포함할 수 있음)는 MMIO 디코더를 PCIe 네트워크의 디바이스로서 간주할 수 있다. 따라서, 그것이 PCIe 디바이스 네트워크의 일부로서 공식적으로 제공되는 디바이스가 아니더라도, 그것은 프로세서 코어 상에서 실행되는 전술한 소프트웨어에 의해 그와 같이 간주될 수 있고, 그렇기 때문에 표준 PCIe 열거 기술들을 사용하여 발견되고 구성될 수 있다.
MMIO 디코더(170)는 다양한 방식으로 구성될 수 있지만, 하나의 특정 구현에서 루트 컴플렉스 통합 엔드포인트로서 형성된다. 통합 엔드포인트, 즉 SoC(100) 내의 PCIe 네트워크의 엔드포인트인 루트 컴플렉스 디바이스로서 MMIO 디코더(170)를 배열함으로써, 이것은 프로세서 상에서 실행되는 소프트웨어가 MMIO 디코더를 열거 가능한 디바이스로서 간주하기 위한 간단한 메커니즘을 제공한다. 특히, MMIO 디코더는 그러한 배열에서 프로세서 상에서 실행되는 소프트웨어에 대한 그 자신의 루트 버스를 가질 수 있고, 결과적으로 MMIO 디코더 엔드포인트는 그 자신의 ECAM(Enhanced Configuration Access Mechanism) 영역, 그 자신의 ECAM 베이스 및 그 자신의 루트 버스 번호를 가질 것이다. 이것은 표준 PCIe 방법들이 MMIO 디코더(170)를 열거하고 구성하는 데 사용될 수 있는 것을 보장한다.
도 4는 MMIO 디코더(170)를 더 상세히 예시한다. 특히, MMIO 디코더는 PCIe 네트워크의 계층 구조 내에서 제1 레벨을 형성하는 다양한 디바이스들(125, 130, 135, 140) 사이에 상위 및 하위 메모리 풀들(80, 85)이 어떻게 할당되었는지를 식별하기에 충분한 정보를 제공하기 위해 표준 PCIe 열거 프로세스 동안 프로그래밍될 수 있는 몇몇 소프트웨어 프로그래밍 가능 메모리 매핑 구성 레지스터들(180)을 포함할 것이다. 구성 레지스터들의 특정 형태는 도 8을 참조하여 나중에 더 상세히 논의될 것이지만, 일반적으로 구성 레지스터들(180)은 메모리 풀들(80, 85) 내의 다양한 어드레스 공간 미립들이 어떻게 할당되었는지에 관한 정보를 제공하기 위해 디바이스들(125, 130, 135, 140)의 개별 구성 레지스터 내에 유지되는 정보의 일부를 복제할 수 있다. 구성 레지스터들(180)이 열거 프로세스 동안 액세스 가능하고 재프로그래밍 가능하기 때문에, 그들은 완전한 재균형 프로세스를 수행할 필요 없이 PCIe 네트워크 내의 변화하는 메모리 요구들을 수용하기 위해 메모리 풀 자원들이 다양한 디바이스들(125, 130, 135, 140) 사이에 어떻게 할당되는지를 조정하려고 시도하도록 핫 플러그 및 핫 스왑 이벤트들에 응답하여 재프로그래밍될 수 있다.
도 5는 도 3의 시스템 내에서 구현되어, MMIO 디코더(170)가 PCIe 디바이스 네트워크의 소프트웨어 구성 동안 발견되고 구성되게 할 수 있는 소프트웨어 제어 구성 프로세스를 예시하는 흐름도이다. 단계 200에서, 구성 트리거가 대기된다. 이것은 예를 들어 부트 시간에 시스템이 처음 스위치 온될 때 발생할 수 있지만, 추가적인 구성 트리거들이 또한 사용 동안 동적으로 발생할 수 있다.
구성 트리거의 발생 시에, 단계 205에서 프로세서 코어(105) 상에서 실행되는 소프트웨어(예를 들어 운영 체제 소프트웨어 및/또는 부트 펌웨어의 형태를 취할 수 있음)는 PCIe 네트워크에 현재 존재하는 디바이스들을 발견하려고 시도하기 위해 PCIe 열거 메커니즘을 이용하는 데 사용된다. 이 프로세스 동안 MMIO 디코더(170)가 또한 발견될 것인데, 그 이유는 앞서 언급된 바와 같이 이것이 PCIe 네트워크의 디바이스로서 소프트웨어에 노출되기 때문이다. 열거 프로세스 동안, 루트 포트 아래의 모든 디바이스들에 대한 MMIO 요구들이 발견될 것이다. 이것은 각각의 루트 포트에의 미립 할당에 대해, 그리고 각각의 루트 포트에서의 FPB 디코더들의 프로그래밍에 대해 결정하기 위해 소프트웨어에 의해 사용될 것이다.
단계 210에서 상위 및 하위 풀들(80, 85) 내의 미립들은 PCIe 네트워크의 계층 구조의 제1 레벨에 있는 각각의 디바이스에, 즉 도 3의 특정한 예시적인 경우에 대해 디바이스들(125, 130, 135, 140)에 할당되어, 그러한 디바이스들 및 그들에 결합된, 계층에서 하위에 있는 임의의 디바이스들의 메모리 요구들을 고려한다. 이어서 그러한 디바이스들 각각 내의 구성 레지스터들은 미립들이 어떻게 할당되었는지에 기초하여 프로그래밍된다. 특히, 각각의 그러한 디바이스에 대해, 그 디바이스의 구성 레지스터들은 그것에 할당된 상위 및 하위 풀들(80, 85) 내의 특정 미립들을 식별하도록 프로그래밍된다. 그러한 구성 레지스터들은 다양한 형태를 취할 수 있지만, 일 구현에서 할당된 미립들을 식별하는 데 사용되는 특정 정보를 제공하도록 프로그래밍된 FPB 메모리 레지스터들이다. 이 정보는 그 특정 디바이스에 의해 사용되는 상위 및 하위 풀들에 대한 기본 어드레스, 할당된 메모리 풀들 내의 개별 미립들의 크기를 식별하는 데 사용되는 미립 크기, 및 (예를 들어 기본 어드레스 정보 및 미립 크기를 참조하여 해석되는 하나 이상의 벡터를 지정함으로써) 특정한 할당된 미립들을 식별하는 정보를 포함할 수 있다.
단계 210에서 구체적으로 언급되지 않지만, 이러한 동일 프로세스가 계층 구조에서 하위 레벨에 있는 다른 디바이스들에 어드레스들을 할당하는 데 사용되며, 이러한 디바이스들은 또한 단계 210 동안 소프트웨어에 의해 프로그래밍되는 구성 레지스터들을 포함한다. 따라서, 예를 들어 루트 포트(125)를 고려하면, 그의 FPB 메모리 레지스터들은 그 루트 포트에 할당된 특정 미립들을 식별하도록 프로그래밍될 것이지만, 계층 구조 내의 하위 디바이스들과 연관된 구성 레지스터들은 또한 루트 포트(125)에 할당된 미립들 중에서 그러한 하위 디바이스들에 할당된 특정 어드레스들을 식별할 것이다.
단계 215에 도시된 바와 같이, MMIO 디코더(170) 내의 구성 레지스터들(180)은 또한 PCIe 네트워크의 계층 구조 내에서 제1 레벨을 형성하는 디바이스들(125, 130, 135, 140)에 어드레스 공간이 어떻게 할당되었는지를 식별하기 위해 소프트웨어 구성 프로세스 동안 프로그래밍된다. 구성 레지스터들(180)은 다양한 형태들을 취할 수 있지만, 이후에 논의되는 하나의 예시적인 경우에서, 계층의 제1 레벨 내의 디바이스들의 수를 식별하도록(따라서 도 3의 특정 예에 대해 이것은 4개의 디바이스가 존재한다는 것을 식별할 것임), 그리고, 각각의 그러한 디바이스에 대해, 각각의 그러한 디바이스에 프로그래밍된 FPB 메모리 레지스터 내용들의 사본을 유지하도록 프로그래밍되는 지정된 벤더 특정 확장 능력(DVSEC) 구조를 포함할 것이다. 이것은 MMIO 디코더(170)가 메모리 풀(80, 85) 내의 다양한 어드레스 공간 미립들이 디바이스들(125, 130, 135, 140) 사이에 어떻게 할당되었는지에 관한 정보를 유지하기 위한 매우 효율적인 메커니즘을 제공한다.
도 5에서, 계층 구조 내의 제1 레벨에 있는 디바이스들 각각이 FPB 메커니즘이 인에이블되게 하는 것으로 가정된다. 그러나, 이것은 필요조건은 아니며, 개별 디바이스들은 FPB 메커니즘이 디스에이블되게 할 수 있으며, 이 경우에 그들은 도 2에 예시된 풀링 메커니즘으로부터 배제되고, 대신에 4GB 경계 위 및 아래의 그들 자신의 어드레스 공간을 할당받는다.
도 5로부터 명백할 바와 같이, MMIO 디코더는 PCIe 네트워크의 디바이스로서 노출되므로, 그것은 표준 PCIe 열거 기술을 사용하여 발견되고 구성될 수 있으며, 따라서 그것의 구성 레지스터들은 다양한 풀들 내의 MMIO 어드레스 공간이 PCIe 네트워크 내의 상위 계층 레벨에 있는 디바이스들 사이에 어떻게 할당되었는지를 알기에 충분한 정보를 유지한다. 이것은 FPB 어드레스 디코딩 메커니즘을 사용할 때 어드레스 디코딩을 위한 SoC 레벨 지원을 제공하기 위해 SoC 레벨에서 이 정보를 캡처하기 위한 매우 효율적이고 효과적인 메커니즘을 제공한다. 게다가, 그것은 예를 들어 핫 플러그 또는 핫 스왑 이벤트들에 응답하여, PCIe 네트워크의 계층 구조 내의 제1 레벨에 있는 다양한 디바이스들 사이에 어드레스 공간 미립들이 어떻게 할당되는지를 동적으로 조정하기 위한 매우 효율적인 메커니즘을 제공한다.
특히, 그러한 이벤트가 발생할 때, 이것은 PCIe 네트워크 열거 프로세스를 관리하는 데 사용되는 관련 프로세서 코어로 하여금 핫 플러그 또는 핫 스왑 이벤트에 관한 충분한 정보를 얻는 데 필요한 정도까지 열거를 재수행하게 하는 인터럽트를 트리거할 것이다. 따라서, 새로운 디바이스가 삽입되는 경우, 그것은 그 디바이스를 발견하고, 그것이 어느 루트 포트에 접속되는지를 식별하고, 그 디바이스의 메모리 요구들을 식별할 수 있다. 이어서 그것은 그렇지 않으면 다른 디바이스들이 어떻게 어드레싱되는지에 영향을 미칠 수 있는 침습적 재균형을 수행할 필요 없이 그 새로운 디바이스가 어드레싱될 수 있게 하기 위해 관련 루트 포트를 통해 충분한 메모리 공간을 제공하려고 시도하기 위해 요구되는 바에 따라 풀들 내의 어드레스 미립들을 재분배하려고 시도할 수 있다. 특히, 풀들 내에 임의의 미할당된 미립들이 존재하는 경우, 또는 할당된 것들 중에 미사용 미립들이 존재하는 경우, 그러한 미립들은 새로운 디바이스와 관련하여 사용하기 위해 관련 루트 포트에 할당하기 위해 자유로워질 수 있다. 유사한 메커니즘이 또한 핫 스왑 기능들을 위해 호출될 수 있고, 또한 디바이스가 제거될 때, 유사한 열거 프로세스가 사용되어 결과적으로 자유로워진 미립들을 식별할 수 있으며, 따라서 그러한 미립들이 재할당에 이용 가능하다.
MMIO 디코더는 PCIe 네트워크의 디바이스로서 노출되기 때문에, 상위 및 하위 풀들 내의 어드레스 공간 미립들이 어떻게 할당되었는지에 관해 MMIO 디코더(170) 내에 최신 레코드를 유지하기 위해, 소프트웨어가 전술한 열거 프로세스 동안 MMIO 디코더 내의 관련 구성 레지스터들을 재프로그래밍하는 것은 간단하다.
도 6은 도 3의 어드레스 디코더(120)에 의해 이용될 수 있는 어드레스 디코딩 프로세스의 흐름도이다. 단계 300에서, 요청이 프로세서 코어들(105, 110) 중 하나로부터 수신되었는지가 결정되며, 그러한 요청은 그 요청과 연관된 시스템 어드레스 공간 내의 어드레스를 지정한다. 일단 요청이 수신되면, 단계 305에서 어드레스가 시스템 어드레스 공간 내의 풀 영역을 지정하는지, 그리고 특히 그것이 상위 MMIO 풀(80) 내의 어드레스인지 또는 하위 MMIO 메모리 풀(85) 내의 어드레스인지가 결정된다. 만일 그렇지 않다면, 단계 310에서, 어드레스는 표준 방식으로 디코딩되고 수신자에게 라우팅되며, 특히 MMIO 디코더(170)는 그 경우에 요구되지 않는다.
그러나, 단계 305에서 어드레스가 상위 또는 하위 풀 영역을 지정한다고 결정되면, 프로세스는 단계 315로 진행하며, 여기서 어드레스는 분석을 위해 MMIO 디코더(170)로 전달된다. 단계 320에서, MMIO 디코더는 문제의 어드레스를 포함하는 미립을 할당받은 제1 레벨 PCIe 디바이스(125, 130, 135, 140)를 식별하려고 시도하기 위해 그의 구성 레지스터(180), 그리고 특히 앞서 언급된 DVSEC 구조를 유지하는 레지스터들에 액세스한다. 어드레스가 임의의 할당된 미립에 매핑되지 않는 경우, 에러가 플래깅될 것이지만, 도 6에서의 논의의 목적을 위해, 어드레스는 할당된 미립들 중 하나에 매핑되는 것으로 가정된다. 따라서, 프로세스는 이어서 단계 325로 진행하고, 여기서 요청은 식별된 제1 레벨 PCIe 디바이스, 즉 문제의 어드레스를 포함하는 할당된 미립을 갖는 디바이스로 라우팅된다. 표준 PCIe 메커니즘들에 따르면, 그 제1 레벨 디바이스는 이어서 그 자신이 의도된 수신자가 아닌 경우 요청을 최종 엔드포인트 디바이스로 라우팅할 것이다. 따라서, 도 3을 고려하면, 요청은 루트 포트(125)를 통해 그리고 스위치(145)를 거쳐 엔드포인트들(150, 155, 160) 중 적절한 엔드포인트로 라우팅될 수 있으며, 적절한 엔드포인트는 어드레스를 참조하여 결정된다.
전술된 기술들을 사용하여, 원하는 경우 비-인접 인터리빙된 할당과 함께, 하위 MMIO 메모리 풀(85) 및 상위 MMIO 메모리 풀(80)의 상이한 루트 포트들에의 미립 할당이 가능하다. 또한, PCIe 네트워크의 디바이스로서 소프트웨어에 노출되는 SoC 레벨에서의 MMIO 디코더를 제공함으로써, SoC 레벨에서 할당 정보를 유지하는 것이 가능하고, 할당에 있어서의 변경들이 표준 디바이스 열거 기술 동안 쉽게 채택될 수 있다.
도 7은 특히 하위 MMIO 메모리 풀(85)을 고려하는, 예시적인 사용 사례에 대한 미립들의 인터리빙된 할당을 예시한다. FPB 스킴에 따르면, 하위 및 상위 MMIO 메모리 풀들이 개별 디바이스들에 어떻게 할당되는지를 식별하기 위해 다수의 벡터 레지스터가 정의된다. 도 7의 예에 도시된 바와 같이, 메모리 풀은 6개의 청크(본 명세서에서 어드레스 공간 미립으로도 지칭됨)로 분할되고, 이 예에서 3개의 루트 포트, 즉 RP0, RP1 및 RP2가 있다고 가정된다. 이 예시적인 예에 도시된 바와 같이, 청크(405)는 비-인접 청크(410)가 그러하듯이 루트 포트 0에 할당된다. 청크(415)는 루트 포트 1에 할당되고, 청크(420)는 루트 포트 2에 할당된다. 현재 청크들(425 및 430)은 어떠한 루트 포트에도 할당되지 않는다. 도 7은 지나치게 단순화한 예를 예시하고 있고, 다른 예들에서 제공되는 더 많은 또는 더 적은 청크들, 및 더 많은 또는 더 적은 루트 포트들(그리고 선택적으로 메모리 풀 내의 하나 이상의 청크를 또한 할당받을 수 있는 통합 엔드포인트(140)와 같은 다른 디바이스들)이 있을 수 있다는 것이 인식될 것이다.
FPB 스킴에 따르면, 그 디바이스에 할당된 하위 MMIO 메모리 풀 및 상위 MMIO 메모리 풀 내의 임의의 청크들을 식별하기 위해 다수의 벡터 레지스터들이 루트 포트의 구성 레지스터들 내에 제공될 수 있다. 하위 MMIO 메모리 풀을 고려하면, 하위 벡터 제어 레지스터가 이 목적을 위해 사용될 수 있고, 따라서 각각의 루트 포트에의 청크들의 할당은 루트 포트들 각각에 대한 하위 벡터 제어 레지스터들의 검토로부터 결정될 수 있다. 하위 벡터 제어 레지스터 내에 유지되는 하나의 정보는 본 명세서에서 기본 어드레스로도 지칭되는 하위 벡터 시작이다. 도 7에 도시된 예에서, 각각의 하위 벡터 제어 레지스터의 벡터 시작 정보에서 식별된 기본 어드레스는 동일하고, 하위 MMIO 메모리 풀 내의 초기 엔트리를 가리키는 것으로 가정된다. 그러나, 벡터 시작이 루트 포트들 각각에 대해 동일한 것은 필수적이지는 않으며, 몇몇 구현들에서 어느 청크들이 할당되었는지를 구성 레지스터들에서 지정된 다른 정보로부터 해석하는 데 사용될 수 있는 시작점을 식별하기 위해, 벡터 시작은 상이한 루트 포트들에 대해 상이하게 지정될 수 있다. 또한, 청크 또는 미립 크기는 루트 포트들 각각에 대해 동일할 필요는 없으며, 하위 벡터 제어 레지스터는 또한 미립 크기에 관한 정보를 캡처할 수 있다.
앞서 언급된 바와 같이, MMIO 디코더(170)의 소프트웨어 프로그래밍 가능 메모리 매핑 구성 레지스터들(180)은 도 8에 예로서 예시된 DVSEC 구조를 포함한다. 근본적인 DVSEC 구조는 도면의 좌상측에 예시되고 DVSEC 구조에 요구되는 몇몇 필드들을 포함하며, DVSEC 구조는 그의 기본 형태가 PCI-SIG에 의해 정의되는 구조이다. 본 명세서에 설명된 기술들에 따르면, 지정된 벤더 특정 헤더 1(505)은 DVSEC 구조가 MMIO 디코더를 정의하고 있음을 식별하는 데 사용될 수 있다. 필드(507)는 이어서 시스템 내의 루트 포트들의 수, 또는 보다 구체적으로는 계층 구조 내의 제1 레벨 디바이스들의 수에 관한 정보를 캡처하는 데 사용될 수 있다. 이들은 주로 루트 포트들일 수 있지만, 도 3을 참조하여 앞서 논의된 바와 같이 통합 엔드포인트(140)와 같은 다른 디바이스들이 또한 제1 레벨에서 제공될 수 있고, 따라서 도 3의 예와 관련하여 필드(507)는 계층 구조 내의 제1 레벨에 4개의 디바이스가 있음을 식별할 것이다.
도 8로부터 명백할 바와 같이, DVSEC 구조의 일부는 DVSEC 벤더 특정 레지스터들(509)을 지정하고, MMIO 디코더와 연관된 DVSEC에 대해, 이러한 레지스터들은 확장된 박스(500)에 도시된 정보를 캡처하는 데 사용된다. 특히, 도시된 바와 같이, 루트 포트들 각각에 대한, 또는 더 일반적으로는 계층 구조 내의 제1 레벨 디바이스들 각각에 대한 FPB 메모리 관련 레지스터들의 세트가 존재한다. 이러한 메모리 관련 레지스터들은 사실상 각각의 제1 레벨 디바이스의 관련 구성 레지스터들에 유지되는 정보의 사본인 일련의 벡터 레지스터들을 포함한다. 특히, 루트 포트 내에서, FPB 메커니즘은 그 루트 포트 디바이스에 할당된 메모리 공간 미립들을 식별하도록 프로그래밍된 일련의 벡터 레지스터들을 정의한다. 그러한 레지스터들은 도 8에 예시된 다양한 하위 벡터 및 상위 벡터 제어 레지스터들, 및 액세스 제어 및 액세스 데이터 레지스터들을 포함한다. 개별 루트 포트 디바이스들 내에서, 이러한 다양한 레지스터들은 기본 어드레스, 미립 크기, 및 연관된 루트 포트 디바이스에 할당된 개별 미립들이 식별될 수 있게 하는 벡터 정보에 관한 정보를 캡처한다. 플래트닝 포털 브릿지(FPB)에 대한 앞서 언급된 PCI-SIG 엔지니어링 변경 통지는 이러한 레지스터들 각각에서 제공되는 정보를 상세히 제시한다.
도 8에 도시된 바와 같이, MMIO 디코더(170)에서 제공된 DVSEC 구조 내에서, 메모리 관련 레지스터들(510, 520)의 세트가 각각의 제1 레벨 디바이스에 대해 제공되고, 연관된 제1 레벨 디바이스 자체에 프로그래밍되는 정보를 효과적으로 복제한다. MMIO 디코더는 PCIe 네트워크의 디바이스로서 간주되기 때문에, 이러한 레지스터들을 채우는 프로세스는 열거 구성 프로세스 동안 간단하며, 따라서 MMIO 디코더(170) 내의 DVSEC 구조의 채움은 표준 열거 기술들을 사용하여 쉽게 달성될 수 있다는 것이 인식될 것이다.
요약하면, 위의 논의로부터 MMIO 디코더 내의 DVSEC 구조는 SoC 레벨 MMIO 디코더가 PCIe 네트워크 내의 제1 레벨 디바이스들의 수, MMIO 메모리 상위 및 하위 풀들 내의 어느 어드레스 미립(들)이 어느 제1 레벨 디바이스에 할당되는지, 및 각각의 루트 포트에 대한 FPB 메모리 하위 및 FPB 메모리 상위 영역들의 시작 어드레스에 관한 정보를 갖는 것을 보장한다는 것이 인식될 것이다. 이 정보는 이어서 MMIO 트랜잭션들을 PCIe 네트워크 내의 올바른 제1 레벨 디바이스로 라우팅하는 데 사용될 수 있다. 게다가, 앞서 논의된 시스템 소프트웨어는 표준 구성 프로세스의 일부로서, 실제 루트 포트의 FPB 메모리 레지스터들에 프로그래밍된 것과 동일한 값들로 각각의 루트 포트에 대한 MMIO 디코더 엔드포인트의 FPB 메모리 관련 레지스터들을 프로그래밍할 것이다.
도 9는 핫 플러그/핫 스왑 이벤트의 발생 시에 취해질 수 있는 단계들을 예시하는 흐름도이다. 단계 600에서 그러한 이벤트가 검출될 때, 단계 605에서 관련 프로세서 코어에 대한 인터럽트가 트리거된다. 특히, 단계 605에서 PCIe 디바이스 네트워크를 구성하는 데 사용되는 소프트웨어를 실행하는 데 사용되는 프로세서 코어가 인터럽트를 수신할 것이다.
단계 610에서, 새로운 또는 스와핑된 디바이스의 상세들 및 그 디바이스와 연관된 메모리 요구들을 찾기 위해 열거 기술이 호출될 것이다. 게다가, 단계 615에서, 새로운 또는 스와핑된 디바이스가 결합되는 루트 포트가 식별될 것이다. 따라서, 도 3을 고려하면, 예로서 엔드포인트 디바이스(150)가 처음으로 시스템에 플러그 인되고 있는 경우, 그 엔드포인트 디바이스(150)가 루트 포트(125)와 연관된다는 것이 식별될 것이다.
단계 620에서, 소프트웨어는 이어서 충분한 공간이 이미 그 루트 포트에 할당되었는지를 결정할 것이다. 특히, 어느 어드레스 공간 미립들이 그 루트 포트에 할당되었는지뿐만 아니라, 그러한 미립들이 이용된 정도에 관한 정보가 유지될 것이다. 새로운 또는 스와핑된 디바이스의 메모리 요구들을 수용하기 위해 루트 포트에 할당된 충분한 공간이 이미 있는 경우, 프로세스는 단계 625로 진행하고, 여기서 (새로운 디바이스에 할당된 어드레스 범위를 나타내도록 관련 구성 레지스터들을 프로그래밍하는 것 이외의) 어떠한 특정 액션도 요구되지 않고, 이어서 단계 655에서 인터럽트로부터의 복귀가 수행될 수 있다.
그러나, 단계 620에서 관련 루트 포트에 이미 할당된 충분한 공간이 없는 것으로 결정되는 경우, 단계 630에서 관련 메모리 풀 내에 이용 가능한 충분한 자유 미립들이 존재하는지가 결정될 수 있다. 열거 프로세스의 일부로서, 메모리 공간이 4GB 경계 위로 요구되는지 또는 아래로 요구되는지에 관한 정보가 새로운/스와핑된 디바이스로부터 검색될 것이고 따라서 관련 메모리 풀이 단계 630에서 알려진다.
풀 내에 이용 가능한 충분한 자유 미립들이 존재하는 경우, 즉 (도 7의 예에서 미립들(425 및 430)과 같은) 제1 레벨 디바이스들 중 하나에 아직 할당되지 않은 충분한 수의 미립들이 존재하는 경우, 프로세스는 단계 635로 진행하고, 여기서 메모리 관련 레지스터들은 관련 루트 포트에 대한 MMIO 디코더의 DVSEC 구조 및 또한 관련 루트 포트 자체 둘 모두에서 재프로그래밍되어, 그 루트 포트에 할당된 바와 같은 하나 이상의 추가 미립들을 식별한다. 따라서, 새로운 또는 스와핑된 디바이스에 대한 관련 루트 포트가 루트 포트 0이면, MMIO 디코더의 DVSEC 내의 루트 포트 0에 대한 메모리 관련 레지스터들이 업데이트될 것이고, 게다가 루트 포트 0 내의 구성 레지스터들이 또한 업데이트될 것이다. 업데이트 후에, 루트 포트 0에 대한 DVSEC 구조에 유지되는 정보는 업데이트된 내용을 루트 포트 0 자체에 다시 복제할 것이다. 새로운 디바이스의 구성 레지스터들은 또한 이 스테이지에서 그 디바이스에 대한 할당된 어드레스 범위를 식별하도록 프로그래밍될 것이다. 단계 635 후에, 이어서 단계 655에서 인터럽트로부터의 복귀가 호출될 수 있다.
단계 630에서 풀 내에 이용 가능한 충분한 자유 미립들이 존재하지 않는다고 결정되면, 단계 640에서 다른 루트 포트가 충분한 미사용 할당을 갖는지, 즉 그것이 사용하고 있지 않은 하나 이상의 미립들을 할당받았는지, 그리고 어느 자원이 다른 루트 포트와 연관된 새로운 또는 스와핑된 디바이스를 서비스하는 데 사용될 수 있는지가 결정된다. 이것이 사실인 경우, 프로세스는 단계 645로 진행하며, 여기서 MMIO 디코더의 DVSEC 구조 내의 메모리 관련 레지스터들은 루트 포트들(즉, 새로운/스와핑된 디바이스와 연관된 루트 포트 및 충분한 미사용 할당을 갖는 루트 포트) 둘 모두에 대해 재프로그래밍된다. 또한, 그러한 영향을 받은 루트 포트들은 또한 그들의 구성 레지스터들이 업데이트되도록 재프로그래밍되고, 그 결과로서 하나 이상의 미립이 새로운/스와핑된 디바이스에 대한 충분한 자원을 제공하기 위해 2개의 루트 포트 사이에서 효과적으로 이동된다. 다시 새로운/스와핑된 디바이스의 구성 레지스터들이 또한 이 스테이지에서 프로그래밍된다. 그 후에, 프로세스는 단계 655로 진행할 수 있다.
단계 640에서 다른 루트 포트가 충분한 미사용 할당을 갖지 않는다고 결정되는 경우에만, 프로세스는 단계 650으로 진행하며, 여기서 완전한 재균형 메커니즘이 수행된다. 이것은 예를 들어 관련 풀의 전체 크기에 있어서의 증가를 요구할 할 수 있고, 잠재적으로 PCIe 디바이스 네트워크 내의 상당한 수의 디바이스들의 리매핑을 수반할 수 있다. 그러나, 도 9로부터 명백할 바와 같이, 대부분의 경우에 재균형을 수행할 필요가 없을 것이며, 앞서 설명한 메커니즘들 중 하나는 핫 플러그 또는 핫 스왑 활동을 수용하기 위해 메모리 풀들 내의 이용 가능 공간을 동적으로 재구성하는 데 사용될 수 있다.
도 10은 핫 제거 이벤트의 경우에 하나의 예시적인 구성에서 구현될 수 있는 단계들을 예시하는 흐름도이다. 따라서, 이 경우에 기존 디바이스가 PCIe 네트워크로부터 제거된다. 단계 700에서 그러한 이벤트의 발생 시에, 단계 705에서 관련 프로세서 코어에 대해 인터럽트가 트리거되고, 이어서 단계 710에서 앞서 논의된 열거 기술이 호출되어 그 디바이스의 메모리 요구들을 포함한, 제거된 디바이스의 상세들을 찾는다. 이 상황에서, 소프트웨어는 제거된 디바이스에 대한 메모리 요구/할당된 메모리 미립에 관한 정보를 이미 갖고 있는데, 이는 그 정보가 그 디바이스에 관한 이전의 열거 단계 동안 획득되었을 것이기 때문이다.
그 다음에, 단계 715에서, 현재 동작 모드가 그 제거된 디바이스와 연관된 미립 또는 미립들이 그들이 이어서 풀 내의 미할당된 미립들의 총 수를 증가시키도록 릴리스될 것을 요구하는지가 결정된다. 만일 그렇다면, 프로세스는 단계 725로 진행하고, 여기서 MMIO 디코더의 DVSEC 구조 및 관련 루트 포트 내의 메모리 관련 레지스터들은 관련 미립 또는 미립들이 더 이상 그 루트 포트에 할당되지 않음을 나타내도록 재프로그래밍된다. 그 후에, 단계 730에서, 인터럽트로부터의 복귀가 발생한다.
그러나, 미립들이 디바이스가 제거되자마자 릴리스되는 것은 필수적이지는 않으며, 대신에 구현은 미립들이 그들이 현재 사용되지 않더라도 루트 포트에 할당되도록 허용할 수 있다. 그 경우에, 프로세스는 단계 720으로 진행하고, 여기서 현재 사용되지 않는 관련 루트 포트에 할당된 어드레스 공간에 관한 정보가 유지된다. 특히, 소프트웨어는, 관련 루트 포트에 대해, 어느 할당된 미립들이 현재 사용되지 않는지를 추적할 수 있다. 그 후에, 프로세스는 이어서 단계 730으로 진행한다.
전술한 예들로부터, 그러한 예들은 FPB 어드레스 디코딩을 위한 SoC 레벨 지원을 제공하는 데 사용될 수 있는 특히 효과적이고 표준화된 메커니즘을 제공한다는 것이 인식될 것이다. 특히, PCIe 네트워크의 디바이스로서 관련 소프트웨어에 노출되는 SoC 레벨에서의 MMIO 디코더를 제공함으로써, MMIO 디코더가 표준 PCIe 열거 기술들을 사용하여 발견되고 구성되는 것이 가능하다. MMIO 디코더는 그 자신의 루트 버스 상의 루트 컴플렉스 통합 엔드포인트로서 소프트웨어에 노출될 수 있어, 디코더의 손쉬운 열거 및 구성을 가능하게 할 수 있다. 또한, 의무적인 PCIe 능력 구조들에 더하여, MMIO 디코더 엔드포인트는 네트워크의 디바이스들의 계층 구조 내에서 제1 레벨을 형성하는 다양한 디바이스들 사이에 상위 및 하위 MMIO 메모리 풀들이 어떻게 할당되었는지에 관한 관련 정보 모두를 캡처하기 위한 매우 효율적인 메커니즘을 제공하는 DVSEC 구조를 구비할 수 있다. 특히, 그러한 제1 레벨 디바이스들의 구성 레지스터들에 유지되는 정보는 MMIO 디코더에 의해 유지되는 DVSEC 구조 내에 직접 복제될 수 있다. 이것은 PCIe 네트워크의 디바이스들 사이의 요청들의 라우팅을 용이하게 하기 위해 요구되는 정보 모두를 유지하기 위한 특히 효율적인 메커니즘을 제공하고, PCIe 네트워크의 구성에 대한 동적 조정들 동안 요구되는 바에 따라 그리고 요구될 때 메모리 풀들 내의 다양한 미립들의 효율적인 재할당을 허용한다.
본 출원에서, 단어들 "... 하도록 구성된"은 장치의 요소가 정의된 동작을 수행할 수 있는 구성을 갖는다는 것을 의미하는 데 사용된다. 이러한 맥락에서, "구성"은 하드웨어 또는 소프트웨어의 상호 접속의 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 처리 디바이스가 그 기능을 수행하도록 프로그래밍될 수 있다. "하도록 구성된"은 장치 요소가 정의된 동작을 제공하기 위해 임의의 방식으로 변경될 필요가 있다는 것을 암시하지는 않는다.
본 발명의 예시적인 실시예들이 첨부 도면들을 참조하여 본 명세서에서 상세히 설명되었지만, 본 발명은 그러한 정확한 실시예들로 제한되지 않으며, 첨부된 청구항들에 의해 한정된 바와 같은 본 발명의 범위 및 사상으로부터 벗어남이 없이 실시예들에서 다양한 변경들, 추가들 및 수정들이 당업자에 의해 이루어질 수 있다는 것이 이해되어야 한다. 예를 들어, 본 발명의 범위로부터 벗어남이 없이 독립 청구항들의 특징들과 종속 청구항들의 특징들의 다양한 조합이 이루어질 수 있다.

Claims (19)

  1. 시스템-온-칩으로서,
    데이터 처리 동작들을 수행하는 처리 회로;
    제1 복수의 디바이스들;
    상기 처리 회로를 상기 제1 복수의 디바이스들에 결합하는 인터커넥트 - 상기 제1 복수의 디바이스들은 디바이스 네트워크를 형성하는 디바이스들의 계층 구조 내의 제1 레벨의 디바이스들이고, 상기 디바이스 네트워크 내의 디바이스들은 디바이스 통신 프로토콜을 사용하여 통신하도록 배열되고, 상기 디바이스 통신 프로토콜은 상기 처리 회로 상에서 실행되는 소프트웨어가 디바이스들의 상기 네트워크 내의 상기 디바이스들을 발견하고 구성할 수 있게 하는 열거 메커니즘을 제공함 -; 및
    상기 처리 회로에 의해 발행된 요청에 의해 지정된 어드레스를 디코딩하여 상기 요청에 대한 수신자를 결정하는 어드레스 디코더를 포함하며,
    시스템 어드레스 공간 내에서, 어드레스들의 풀이 상기 제1 복수의 디바이스들에의 할당을 위해 예약되고, 상기 어드레스 디코더는, 상기 제1 복수의 디바이스들 중의 각각의 디바이스에 대해, 상기 풀 내의 어느 어드레스들이 그 디바이스에 할당되는지의 표시를 유지하는 디바이스 어드레스 디코더를 포함하며,
    상기 어드레스 디코더는, 상기 요청에 의해 지정된 상기 어드레스가 상기 어드레스들의 풀 내에 있음을 검출하는 것에 응답하여, 상기 디바이스 어드레스 디코더를 이용하여 상기 요청이 상기 제1 복수의 디바이스들 중 어느 디바이스로 지향되는지를 결정하고 상기 요청이 상기 제1 복수 내의 상기 결정된 디바이스로 라우팅되게 하며,
    상기 디바이스 어드레스 디코더는 상기 처리 회로 상에서 실행되는 상기 소프트웨어가 상기 열거 메커니즘을 사용하여 상기 디바이스 어드레스 디코더를 발견하고 구성할 수 있게 하여서, 상기 제1 복수의 디바이스들 사이의 상기 어드레스들의 풀의 상기 할당이 소프트웨어 제어하에서 동적으로 재구성될 수 있게 하기 위해 상기 디바이스 네트워크의 디바이스로서 상기 소프트웨어에 노출되도록 배열되는, 시스템-온-칩.
  2. 제1항에 있어서, 상기 디바이스 어드레스 디코더는 통합 엔드포인트 디바이스로서 상기 소프트웨어에 노출되도록 배열되는, 시스템-온-칩.
  3. 제1항 또는 제2항에 있어서, 상기 제1 복수의 디바이스들은 복수의 브릿지 디바이스들을 포함하는, 시스템-온-칩.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 디바이스 통신 프로토콜은 PCIe(Peripheral Component Interconnect Express) 프로토콜이고, 상기 디바이스 어드레스 디코더는 루트 컴플렉스 통합 엔드포인트 디바이스로서 상기 소프트웨어에 노출되도록 배열되는, 시스템-온-칩.
  5. 제4항에 있어서, 상기 디바이스 어드레스 디코더는 상기 디바이스 어드레스 디코더가 상기 처리 회로 상에서 실행되는 상기 소프트웨어에 의해 액세스 가능하게 하는 연관된 루트 버스를 갖는, 시스템-온-칩.
  6. 제4항 또는 제5항에 있어서, 상기 디바이스 어드레스 디코더는 상기 디바이스 어드레스 디코더가 상기 요청이 상기 제1 복수의 디바이스들 중 어느 디바이스로 지향되는지를 결정할 수 있게 하기 위해 상기 처리 회로 상에서 실행되는 상기 소프트웨어의 제어하에서 구성 정보가 저장되는 복수의 레지스터들을 포함하는 확장 능력 구조를 구비하는, 시스템-온-칩.
  7. 제6항에 있어서, 상기 확장 능력 구조는 상기 연관된 디바이스를 상기 디바이스 어드레스 디코더인 것으로서 식별하는 데 사용되는 헤더 필드를 갖는 지정된 벤더 특정 확장 능력(Designated Vendor-Specific Extended Capability, DVSEC) 구조인, 시스템-온-칩.
  8. 제7항에 있어서, 상기 DVSEC 구조는 상기 제1 복수의 디바이스들 중의 디바이스들의 수를 식별하는 개수 필드를 포함하는, 시스템-온-칩.
  9. 제8항에 있어서, 상기 DVSEC 구조는 상기 제1 복수의 디바이스들 중의 각각의 디바이스와 연관된 메모리 관련 레지스터들을 포함하고, 상기 메모리 관련 레지스터들은 상기 풀 내의 어느 어드레스들이 상기 제1 복수의 디바이스들 중의 연관된 디바이스에 할당되는지를 식별하는 어드레스 정보를 포함하도록 상기 처리 회로 상에서 실행되는 상기 소프트웨어의 제어하에서 프로그래밍되는, 시스템-온-칩.
  10. 제9항에 있어서, 상기 어드레스들의 풀에 의해 정의되는 어드레스 공간이 복수의 어드레스 공간 미립(address space granule)들로부터 형성되고, 상기 DVSEC 구조의 상기 메모리 관련 레지스터들에 프로그래밍된 상기 어드레스 정보는 어느 어드레스 공간 미립들이 상기 제1 복수의 디바이스들 중의 각각의 디바이스에 할당되는지를 식별하는, 시스템-온-칩.
  11. 제10항에 있어서, 상기 제1 복수의 디바이스들 중의 각각의 디바이스에 대해, 상기 DVSEC 구조 내의 상기 메모리 관련 레지스터들은 어느 어드레스 공간 미립들이 그 디바이스에 할당되는지를 식별하는 데 사용되는 다수의 벡터들을 저장하는, 시스템-온-칩.
  12. 제11항에 있어서, 상기 DVSEC 구조 내의 상기 메모리 관련 레지스터들은 상기 제1 복수의 디바이스들 중의 각각의 디바이스에 대한 기본 어드레스, 및 상기 어드레스 공간 미립들의 크기를 추가로 식별하는, 시스템-온-칩.
  13. 제9항 내지 제12항 중 어느 한 항에 있어서, 상기 제1 복수의 디바이스들 중의 각각의 디바이스는 상기 풀 내의 어느 어드레스들이 그 디바이스에 할당되는지를 식별하는 어드레스 정보를 포함하도록 상기 처리 회로 상에서 실행되는 상기 소프트웨어의 제어하에서 프로그래밍되는 메모리 관련 레지스터들을 포함하고, 상기 소프트웨어는 상기 제1 복수의 디바이스들 중의 개별 디바이스들의 상기 메모리 관련 레지스터들 내에 저장된 것과 동일한 어드레스 정보를 유지하도록 상기 디바이스 어드레스 디코더의 상기 DVSEC 구조 내의 각각의 디바이스에 대한 상기 메모리 관련 레지스터들을 프로그래밍하도록 배열되는, 시스템-온-칩.
  14. 제4항에 종속할 때 제5항 내지 제13항 중 어느 한 항에 있어서, 상기 제1 복수의 디바이스들은 복수의 PCIe 루트 포트 디바이스들을 포함하는, 시스템-온-칩.
  15. 제14항에 있어서, 상기 제1 복수의 디바이스들은 하나 이상의 통합 엔드포인트 디바이스들을 추가로 포함하는, 시스템-온-칩.
  16. 제1항 내지 제15항 중 어느 한 항에 있어서, 상기 어드레스들의 풀은 상기 시스템 어드레스 공간의 메모리 매핑 I/O(memory mapped I/O, MMIO) 영역인, 시스템-온-칩.
  17. 제1항 내지 제16항 중 어느 한 항에 있어서, 상기 어드레스들의 풀은 상위 풀 및 하위 풀을 포함하며, 상기 하위 풀은 상기 상위 풀 내의 어드레스들을 식별하기에 불충분한 수의 어드레스 비트들을 사용하여 어드레싱 가능한 상기 시스템 어드레스 공간의 제1 영역 내에 있는, 시스템-온-칩.
  18. 데이터 처리 동작들을 수행하는 처리 회로, 제1 복수의 디바이스들, 및 상기 처리 회로를 상기 제1 복수의 디바이스들에 결합하는 인터커넥트를 갖는 시스템-온-칩에서 어드레스 디코딩을 핸들링하는 방법으로서, 상기 제1 복수의 디바이스들은 디바이스 네트워크를 형성하는 디바이스들의 계층 구조 내의 제1 레벨의 디바이스들이고, 상기 방법은,
    상기 디바이스 네트워크 내의 상기 디바이스들이 디바이스 통신 프로토콜을 사용하여 통신하게 하는 단계 - 상기 디바이스 통신 프로토콜은 상기 처리 회로 상에서 실행되는 소프트웨어가 디바이스들의 상기 네트워크 내의 상기 디바이스들을 발견하고 구성할 수 있게 하는 열거 메커니즘을 제공함 -;
    어드레스 디코더를 이용하여 상기 처리 회로에 의해 발행된 요청에 의해 지정된 어드레스를 디코딩하여 상기 요청에 대한 수신자를 결정하는 단계;
    시스템 어드레스 공간 내에서, 상기 제1 복수의 디바이스들에의 할당을 위해 어드레스들의 풀을 예약하는 단계;
    상기 제1 복수의 디바이스들 중의 각각의 디바이스에 대해, 상기 풀 내의 어느 어드레스들이 그 디바이스에 할당되는지의 표시를 유지하기 위해 상기 어드레스 디코더 내에 디바이스 어드레스 디코더를 제공하는 단계;
    상기 요청에 의해 지정된 상기 어드레스가 상기 어드레스들의 풀 내에 있음을 검출하는 것에 응답하여, 상기 디바이스 어드레스 디코더를 이용하여 상기 요청이 상기 제1 복수의 디바이스들 중 어느 디바이스로 지향되는지를 결정하고 상기 요청을 상기 제1 복수 내의 상기 결정된 디바이스로 라우팅하는 단계; 및
    상기 처리 회로 상에서 실행되는 상기 소프트웨어가 상기 열거 메커니즘을 사용하여 상기 디바이스 어드레스 디코더를 발견하고 구성할 수 있게 하여서, 상기 제1 복수의 디바이스들 사이의 상기 어드레스들의 풀의 상기 할당이 소프트웨어 제어하에서 동적으로 재구성될 수 있게 하기 위해 상기 디바이스 어드레스 디코더를 상기 디바이스 네트워크의 디바이스로서 상기 소프트웨어에 노출시키는 단계를 포함하는, 방법.
  19. 시스템-온-칩으로서,
    데이터 처리 동작들을 수행하기 위한 처리 수단;
    제1 복수의 디바이스들;
    상기 처리 수단을 상기 제1 복수의 디바이스들에 결합하기 위한 인터커넥트 수단 - 상기 제1 복수의 디바이스들은 디바이스 네트워크를 형성하는 디바이스들의 계층 구조 내의 제1 레벨의 디바이스들이고, 상기 디바이스 네트워크 내의 디바이스들은 디바이스 통신 프로토콜을 사용하여 통신하도록 배열되고, 상기 디바이스 통신 프로토콜은 상기 처리 수단 상에서 실행되는 소프트웨어가 디바이스들의 상기 네트워크 내의 상기 디바이스들을 발견하고 구성할 수 있게 하는 열거 메커니즘을 제공함 -; 및
    상기 처리 수단에 의해 발행된 요청에 의해 지정된 어드레스를 디코딩하여 상기 요청에 대한 수신자를 결정하기 위한 어드레스 디코더 수단을 포함하며,
    시스템 어드레스 공간 내에서, 어드레스들의 풀이 상기 제1 복수의 디바이스들에의 할당을 위해 예약되고, 상기 어드레스 디코더 수단은, 상기 제1 복수의 디바이스들 중의 각각의 디바이스에 대해, 상기 풀 내의 어느 어드레스들이 그 디바이스에 할당되는지의 표시를 유지하기 위한 디바이스 어드레스 디코더 수단을 포함하고,
    상기 어드레스 디코더 수단은, 상기 요청에 의해 지정된 상기 어드레스가 상기 어드레스들의 풀 내에 있음을 검출하는 것에 응답하여, 상기 디바이스 어드레스 디코더 수단을 이용하여 상기 요청이 상기 제1 복수의 디바이스들 중 어느 디바이스로 지향되는지를 결정하고 상기 요청이 상기 제1 복수 내의 상기 결정된 디바이스로 라우팅되게 하며,
    상기 디바이스 어드레스 디코더 수단은 상기 처리 수단 상에서 실행되는 상기 소프트웨어가 상기 열거 메커니즘을 사용하여 상기 디바이스 어드레스 디코더 수단을 발견하고 구성할 수 있게 하여서, 상기 제1 복수의 디바이스들 사이의 상기 어드레스들의 풀의 상기 할당이 소프트웨어 제어하에서 동적으로 재구성될 수 있게 하기 위해 상기 디바이스 네트워크의 디바이스로서 상기 소프트웨어에 노출되도록 배열되는, 시스템-온-칩.
KR1020217017364A 2018-11-12 2019-08-20 시스템-온-칩에서 어드레스 디코딩을 핸들링하기 위한 장치 및 방법 KR20210088657A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/186,913 2018-11-12
US16/186,913 US10846250B2 (en) 2018-11-12 2018-11-12 Apparatus and method for handling address decoding in a system-on-chip
PCT/GB2019/052331 WO2020099818A1 (en) 2018-11-12 2019-08-20 An apparatus and method for handling address decoding in a system-on-chip

Publications (1)

Publication Number Publication Date
KR20210088657A true KR20210088657A (ko) 2021-07-14

Family

ID=67777354

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217017364A KR20210088657A (ko) 2018-11-12 2019-08-20 시스템-온-칩에서 어드레스 디코딩을 핸들링하기 위한 장치 및 방법

Country Status (5)

Country Link
US (1) US10846250B2 (ko)
EP (1) EP3881192B1 (ko)
KR (1) KR20210088657A (ko)
CN (1) CN112955880B (ko)
WO (1) WO2020099818A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11176063B2 (en) * 2019-11-01 2021-11-16 EMC IP Holding Company LLC Optimized use of processor memory for I/O operations
US11314673B2 (en) 2019-12-27 2022-04-26 Texas Instruments Incorporated Configurable multi-function PCIe endpoint controller in an SoC
US11449424B2 (en) * 2020-10-26 2022-09-20 International Business Machines Corporation Server recovery from a change in storage control chip
CN115185874B (zh) * 2022-09-15 2022-12-13 珠海星云智联科技有限公司 一种pcie资源的分配方法及相关装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8019943B2 (en) * 2000-01-06 2011-09-13 Super Talent Electronics, Inc. High endurance non-volatile memory devices
KR100880832B1 (ko) * 2004-02-10 2009-01-30 삼성전자주식회사 코-디버깅 기능을 지원하는 반도체 집적회로 및 반도체집적회로 테스트 시스템
US8332906B2 (en) * 2006-02-27 2012-12-11 Research In Motion Limited Method of customizing a standardized IT policy
CA2731567C (en) * 2010-02-12 2015-06-30 Research In Motion Limited Image-based and predictive browsing
US9195623B2 (en) 2010-06-23 2015-11-24 International Business Machines Corporation Multiple address spaces per adapter with address translation
US9032102B2 (en) 2012-03-02 2015-05-12 International Business Machines Corporation Decode data for fast PCI express multi-function device address decode
US9411762B2 (en) 2013-03-15 2016-08-09 Intel Corporation Method and system for platform management messages across peripheral component interconnect express (PCIe) segments
US9529775B2 (en) * 2013-10-30 2016-12-27 Futurewei Technologies, Inc. Network topology of hierarchical ring with gray code and binary code
US9558143B2 (en) * 2014-05-09 2017-01-31 Micron Technology, Inc. Interconnect systems and methods using hybrid memory cube links to send packetized data over different endpoints of a data handling device
US9864701B1 (en) * 2015-03-10 2018-01-09 Amazon Technologies, Inc. Resource mapping for an input/output device
US9489211B2 (en) * 2015-03-31 2016-11-08 Vmware, Inc. Exposing memory-mapped IO devices to drivers through firmware
US9843436B2 (en) * 2015-06-27 2017-12-12 Intel Corporation Flexible interconnect architecture
US9864605B2 (en) * 2015-11-03 2018-01-09 Xilinx, Inc. Multistage boot image loading by configuration of a bus interface
US10061707B2 (en) * 2015-12-26 2018-08-28 Intel Corporation Speculative enumeration of bus-device-function address space
US10877915B2 (en) 2016-03-04 2020-12-29 Intel Corporation Flattening portal bridge

Also Published As

Publication number Publication date
EP3881192B1 (en) 2023-12-06
US10846250B2 (en) 2020-11-24
WO2020099818A1 (en) 2020-05-22
CN112955880B (zh) 2024-02-09
CN112955880A (zh) 2021-06-11
US20200151124A1 (en) 2020-05-14
EP3881192A1 (en) 2021-09-22

Similar Documents

Publication Publication Date Title
KR20210088657A (ko) 시스템-온-칩에서 어드레스 디코딩을 핸들링하기 위한 장치 및 방법
US9122575B2 (en) Processing system having memory partitioning
CN107690622B9 (zh) 实现硬件加速处理的方法、设备和系统
US8918568B2 (en) PCI express SR-IOV/MR-IOV virtual function clusters
US7492723B2 (en) Mechanism to virtualize all address spaces in shared I/O fabrics
JP6329318B2 (ja) 情報処理装置
CN110809760B (zh) 资源池的管理方法、装置、资源池控制单元和通信设备
JP5692065B2 (ja) 計算機システムにおける仮想装置の高速移動システム及び管理装置並びにその方法及びそのプログラム
US20190042329A1 (en) System with programmable multi-context accelerator circuitry
US6832303B2 (en) Method and system for managing an allocation of a portion of a memory
CN100399300C (zh) 用于数据处理的系统和方法和用于分配资源的系统和方法
KR102290540B1 (ko) 네임스페이스/스트림 관리
US20100146170A1 (en) Differentiating Traffic Types in a Multi-Root PCI Express Environment
JPH096722A (ja) コンピュータ・システム
KR101812300B1 (ko) 다수의 메모리 채널들을 가진 컴퓨팅 시스템에서의 메모리 버퍼들의 할당
CN110032335B (zh) 原子数据访问请求的调节
US20140129797A1 (en) Configurable i/o address translation data structure
CN112074820A (zh) 用于多内核系统的存储器池分配
CN113590313B (zh) 负载均衡方法、装置、存储介质和计算设备
CN109408226A (zh) 数据处理方法、装置及终端设备
US7039733B2 (en) Method, system, and apparatus for eliminating bus renumbering in a computer system
JP2009070265A (ja) 情報処理装置
CN108228496B (zh) 一种直接内存访问内存管理方法、装置和主控设备
JP4106964B2 (ja) アドレス割当装置およびその方法
JP2018113075A (ja) 情報処理装置

Legal Events

Date Code Title Description
A201 Request for examination