KR20200138310A - 디바이스의 데이터 프로세싱 엔진 어레인지먼트 - Google Patents

디바이스의 데이터 프로세싱 엔진 어레인지먼트 Download PDF

Info

Publication number
KR20200138310A
KR20200138310A KR1020207030909A KR20207030909A KR20200138310A KR 20200138310 A KR20200138310 A KR 20200138310A KR 1020207030909 A KR1020207030909 A KR 1020207030909A KR 20207030909 A KR20207030909 A KR 20207030909A KR 20200138310 A KR20200138310 A KR 20200138310A
Authority
KR
South Korea
Prior art keywords
memory
dpe
core
data processing
dpes
Prior art date
Application number
KR1020207030909A
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 KR20200138310A publication Critical patent/KR20200138310A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • 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
    • 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/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • 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/17306Intercommunication techniques
    • G06F15/17331Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices

Abstract

디바이스는 복수의 데이터 프로세싱 엔진들[304]을 포함할 수 있다. 데이터 프로세싱 엔진들[304] 각각은 코어[602] 및 메모리 모듈[604]을 포함할 수 있다. 복수의 데이터 프로세싱 엔진들[304]은 복수의 행들로 조직화될 수 있다. 각각의 코어는, 복수의 데이터 프로세싱 엔진들[304] 중 다른 이웃한 데이터 프로세싱 엔진들[304]과, 이웃한 데이터 프로세싱 엔진들[304]의 메모리 모듈들[604]에 대한 공유된 액세스에 의해 통신하도록 구성될 수 있다.

Description

디바이스의 데이터 프로세싱 엔진 어레인지먼트
본 개시내용은 집적 회로 디바이스들(디바이스들)에 관한 것으로, 더 상세하게는 데이터 프로세싱 엔진들 및/또는 데이터 프로세싱 엔진 어레이를 포함하는 디바이스들에 관한 것이다.
프로그래밍가능 집적 회로(IC)는 프로그래밍가능 회로부를 포함하는 IC의 타입을 지칭한다. 프로그래밍가능 IC의 일 예는 FPGA(field programmable gate array)이다. FPGA는 프로그래밍가능 회로 블록들의 포함을 특징으로 한다. 프로그래밍가능 회로 블록들의 예들은 IOB(input/output block)들, CLB(configurable logic block)들, BRAM(dedicated random access memory block), DSP(digital signal processing block)들, 프로세서들, 클록 관리자들, 및 DLL(delay lock loop)들을 포함한다(그러나 이에 제한되지 않음).
회로 설계들은 구성 비트스트림으로 종종 지칭되는 구성 데이터를 디바이스에 로딩함으로써 프로그래밍가능 IC의 프로그래밍가능 회로부 내에서 물리적으로 구현될 수 있다. 구성 데이터는 디바이스의 내부 구성 메모리 셀들에 로딩될 수 있다. 개별 구성 메모리 셀들의 집합적 상태들은 프로그래밍가능 IC의 기능을 결정한다. 예컨대, 다양한 프로그래밍가능 회로 블록들에 의해 수행되는 특정한 동작들 및 프로그래밍가능 IC의 프로그래밍가능 회로 블록들 사이의 연결은, 일단 구성 데이터로 로딩되면, 구성 메모리 셀들의 집합적 상태들에 의해 정의된다.
하나 이상의 실시예들에서, 디바이스는 복수의 데이터 프로세싱 엔진들을 포함할 수 있다. 각각의 데이터 프로세싱 엔진은 코어 및 메모리 모듈을 포함할 수 있다. 각각의 코어는, 동일한 데이터 프로세싱 엔진 내의 메모리 모듈 및 복수의 데이터 프로세싱 엔진들 중 적어도 하나의 다른 데이터 프로세싱 엔진 내의 메모리 모듈에 액세스하도록 구성될 수 있다.
하나 이상의 실시예들에서, 방법은, 제1 데이터 프로세싱 엔진의 제1 코어가 데이터를 생성하는 단계, 제1 코어가 제1 데이터 프로세싱 엔진 내의 제1 메모리 모듈에 데이터를 기입하는 단계, 및 제2 데이터 프로세싱 엔진의 제2 코어가 제1 메모리 모듈로부터 데이터를 판독하는 단계를 포함할 수 있다.
하나 이상의 실시예들에서, 디바이스는 복수의 데이터 프로세싱 엔진들, 서브시스템, 및 복수의 데이터 프로세싱 엔진들 및 서브시스템에 커플링된 SoC(System-on-Chip) 인터페이스 블록을 포함할 수 있다. SoC 인터페이스 블록은 서브시스템과 복수의 데이터 프로세싱 엔진들 사이에서 데이터를 교환하도록 구성될 수 있다.
하나 이상의 실시예들에서, SoC 인터페이스 블록에 대한 타일은, 구성 데이터의 제1 부분을 이웃한 타일에 제공하고, 구성 데이터의 제2 부분을 복수의 데이터 프로세싱 엔진들 중 일 데이터 프로세싱 엔진에 제공하도록 구성된 메모리 맵핑된 스위치를 포함할 수 있다. 타일은, 제1 데이터를 적어도 하나의 이웃한 타일에 제공하고, 제2 데이터를 복수의 데이터 프로세싱 엔진들 중 일 데이터 프로세싱 엔진에 제공하도록 구성된 스트림 스위치를 포함할 수 있다. 타일은 타일 내에서 생성된 이벤트들 및 타일 외부의 회로부로부터의 이벤트들을 수신하도록 구성된 이벤트 브로드캐스트 회로부를 포함할 수 있으며, 여기서 이벤트 브로드캐스트 회로부는 이벤트들 중 선택된 이벤트들을 선택된 목적지들에 제공하도록 프로그래밍가능하다. 타일은, 타일을 포함하는 디바이스의 서브시스템에 메모리 맵핑된 스위치, 스트림 스위치, 및 이벤트 브로드캐스트 회로부를 커플링시키는 인터페이스 회로부를 포함할 수 있다.
하나 이상의 실시예들에서, 디바이스는 복수의 데이터 프로세싱 엔진들을 포함할 수 있다. 데이터 프로세싱 엔진들 각각은 코어 및 메모리 모듈을 포함할 수 있다. 복수의 데이터 프로세싱 엔진들은 복수의 행들로 조직화될 수 있다. 각각의 코어는, 복수의 데이터 프로세싱 엔진들 중 다른 이웃한 데이터 프로세싱 엔진들과, 이웃한 데이터 프로세싱 엔진들의 메모리 모듈들에 대한 공유된 액세스에 의해 통신하도록 구성될 수 있다.
하나 이상의 실시예들에서, 디바이스는 복수의 데이터 프로세싱 엔진들을 포함할 수 있다. 데이터 프로세싱 엔진들 각각은, 복수의 메모리 뱅크들을 갖는 메모리 풀(pool), 메모리 풀에 각각 커플링되며, 복수의 메모리 뱅크들에 액세스하도록 구성된 복수의 코어들, 적어도 하나의 이웃한 데이터 프로세싱 엔진의 메모리 맵핑된 스위치 및 메모리 풀에 커플링된 메모리 맵핑된 스위치, 및 복수의 코어들 각각에 그리고 적어도 하나의 이웃한 데이터 프로세싱 엔진의 스트림 스위치에 커플링된 스트림 스위치를 포함할 수 있다.
이러한 요약 섹션은 청구된 청구 대상의 임의의 중요 또는 본질적인 특징들을 식별하는 것이 아니라 특정한 개념들을 도입하기 위해서만 제공된다. 본 발명의 어레인지먼트(arrangement)들의 다른 특징들은 첨부한 도면들 및 다음의 상세한 설명으로부터 명백할 것이다.
본 발명의 어레인지먼트들은 첨부한 도면들에서 예로서 예시된다. 그러나, 도면들은, 본 발명의 어레인지먼트들을 도시된 특정한 구현들로만 제한하는 것으로 해석되지 않아야 한다. 다양한 양상들 및 장점들은 다음의 상세한 설명의 검토 시에 그리고 도면들을 참조할 시에 명백해질 것이다.
도 1은 데이터 프로세싱 엔진(DPE) 어레이를 포함하는 디바이스의 일 예를 예시한다.
도 2a, 도 2b, 도 2c, 및 도 2d는 하나 이상의 DPE 어레이들을 갖는 디바이스에 대한 예시적인 아키텍처들을 예시한다.
도 3은 DPE 어레이를 포함하는 디바이스에 대한 다른 예시적인 아키텍처를 예시한다.
도 4a 및 도 4b는 하나 이상의 DPE 어레이들을 갖는 디바이스의 멀티-다이 구현의 일 예를 예시한다.
도 5a, 도 5b, 도 5c, 도 5d, 도 5e, 도 5f, 및 도 5g는 DPE 어레이를 갖는 디바이스의 예시적인 멀티-다이 구현들을 예시한다.
도 6은 DPE 어레이의 DPE에 대한 예시적인 아키텍처를 예시한다.
도 7은 다수의 DPE들 사이의 예시적인 연결을 예시한다.
도 8은 도 6의 예시적인 DPE 아키텍처의 추가적인 양상들을 예시한다.
도 9는 DPE들의 코어들의 캐스케이드(cascade) 인터페이스들의 예시적인 연결을 예시한다.
도 10a, 도 10b, 도 10c, 도 10d, 및 도 10e는 DPE들 사이의 연결의 예들을 예시한다.
도 11은 DPE 내의 이벤트 프로세싱 회로부의 일 예를 예시한다.
도 12는 DPE에 대한 다른 예시적인 아키텍처를 예시한다.
도 13은 DPE 어레이에 대한 예시적인 아키텍처를 예시한다.
도 14a, 도 14b, 및 도 14c는 SoC(System-on-Chip) 인터페이스 블록의 타일들을 구현하기 위한 예시적인 아키텍처들을 예시한다.
도 15는 SoC 인터페이스 블록의 타일의 프로그래밍가능 로직 인터페이스의 예시적인 구현을 예시한다.
도 16은 SoC 인터페이스 블록의 타일의 NoC(Network-On-Chip) 스트림 인터페이스의 예시적인 구현을 예시한다.
도 17은 SoC 인터페이스 블록의 타일의 DMA(direct memory access) 엔진의 예시적인 구현을 예시한다.
도 18은 복수의 DPE들에 대한 예시적인 아키텍처를 예시한다.
도 19는 복수의 DPE들에 대한 다른 예시적인 아키텍처를 예시한다.
도 20은 DPE 어레이를 구성하는 예시적인 방법을 예시한다.
도 21은 DPE 어레이의 예시적인 동작 방법을 예시한다.
도 22는 DPE 어레이의 다른 예시적인 동작 방법을 예시한다.
도 23은 DPE 어레이의 다른 예시적인 동작 방법을 예시한다.
도 24은 DPE 어레이의 다른 예시적인 동작 방법을 예시한다.
본 개시내용이 신규한 특징들을 정의하는 청구항들로 종결되지만, 본 개시내용 내에서 설명된 다양한 특징들이 도면들과 함께 상세한 설명을 고려할 때 더 양호하게 이해될 것으로 생각된다. 본 명세서에 설명된 프로세스(들), 머신(들), 제조(들) 및 그들의 임의의 변경들은 예시의 목적들을 위해 제공된다. 본 개시내용 내에서 설명된 특정한 구조 및 기능 세부사항들은 제한으로서 해석되는 것이 아니라, 오로지, 청구항들에 대한 기반으로서 그리고 사실상 임의의 적절하게 상세한 구조로 설명된 특징들을 다양하게 이용하기 위해 당업자에게 교시하기 위한 대표적인 기반으로서 해석되어야 한다. 추가로, 본 개시내용 내에서 사용된 용어들 및 어구들은 제한하는 것으로 의도되는 것이 아니라 오히려, 설명된 특징들의 이해가능한 설명을 제공하도록 의도된다.
본 개시내용은 하나 이상의 데이터 프로세싱 엔진(DPE)들 및/또는 DPE 어레이들을 포함하는 집적 회로 디바이스들(디바이스들)에 관한 것이다. DPE 어레이는 복수의 하드와이어링된 회로 블록들을 지칭한다. 복수의 회로 블록들은 프로그래밍가능할 수 있다. DPE 어레이는 복수의 DPE들 및 SoC(System-on-Chip) 인터페이스 블록을 포함할 수 있다. 일반적으로, DPE는 데이터 프로세싱 능력들을 제공할 수 있는 코어를 포함한다. DPE는 DPE 내의 코어 또는 코어들에 의해 액세스가능한 메모리 모듈을 더 포함한다. 특정한 실시예들에서, DPE의 메모리 모듈은 또한, DPE 어레이의 상이한 DPE들 내의 하나 이상의 다른 코어들에 의해 액세스될 수 있다.
DPE는 DPE 상호연결을 더 포함할 수 있다. DPE 상호연결은, DPE 어레이의 다른 DPE들과의 통신들 및/또는 DPE 어레이를 포함하는 디바이스의 상이한 서브시스템들과의 통신을 구현할 수 있는 회로부를 지칭한다. DPE 상호연결은 DPE의 구성을 추가로 지원할 수 있다. 특정한 실시예들에서, DPE 상호연결은 제어 데이터 및/또는 디버깅 데이터를 전달할 수 있다.
DPE 어레이는 다양한 상이한 아키텍처들 중 임의의 아키텍처를 사용하여 조직화될 수 있다. 하나 이상의 실시예들에서, DPE 어레이는 하나 이상의 행들로 그리고 하나 이상의 열들로 조직화될 수 있다. 일부 경우들에서, DPE들의 열들 및/또는 행들이 정렬된다. 일부 실시예들에서, 각각의 DPE는 메모리 모듈에 커플링된 단일 코어를 포함할 수 있다. 다른 실시예들에서, DPE 어레이의 하나 이상의 DPE들 또는 각각의 DPE는 메모리 모듈에 커플링된 2개 이상의 코어들을 포함하도록 구현될 수 있다.
하나 이상의 실시예들에서, DPE 어레이는, 각각의 DPE가 서로 동일한 DPE인 동종 구조로서 구현된다. 다른 실시예들에서, DPE 어레이는, DPE 어레이가 2개 이상의 상이한 타입들의 DPE들을 포함하는 이종 구조로서 구현된다. 예컨대, DPE 어레이는 단일 코어들을 갖는 DPE들, 다수의 코어들을 갖는 DPE들, 상이한 타입들의 코어들이 포함된 DPE들, 및/또는 상이한 물리적 아키텍처들을 갖는 DPE들을 포함할 수 있다.
DPE 어레이들은 다양한 사이즈들로 구현될 수 있다. 예컨대, DPE 어레이는 디바이스의 다이의 전체 폭 및/또는 길이에 걸쳐 있도록 구현될 수 있다. 다른 예에서, DPE 어레이는 그러하 다이의 전체 폭 및/또는 길이의 일부에 걸쳐 있도록 구현될 수 있다. 추가적인 실시예들에서, 하나 초과의 DPE 어레이가 다이 내에서 구현될 수 있으며, 여기서 DPE 어레이들 중 상이한 DPE 어레이들은 다이 상의 상이한 구역들로 분배되고, 상이한 사이즈들을 갖고, 상이한 형상들을 가지며, 그리고/또는 본 명세서에 설명된 바와 같이 상이한 아키텍처들을 갖는다(예컨대, 행들 및/또는 열들, 동종 및/또는 이종으로 정렬됨). 추가로, DPE 어레이들은 DPE들의 상이한 수들의 행들 및/또는 DPE들의 상이한 수들의 열들을 포함할 수 있다.
DPE 어레이는 디바이스 내의 다양한 상이한 서브시스템들 중 임의의 서브시스템에 이용되고 그에 커플링될 수 있다. 그러한 서브시스템들은 프로세서들 및/또는 프로세서 시스템들, 프로그래밍가능 로직, 및/또는 NoC(Network-on-Chip)를 포함할 수 있다(그러나 이에 제한되지 않음). 특정한 실시예들에서, NoC는 프로그래밍가능할 수 있다. 디바이스에 포함되고 DPE 어레이에 커플링될 수 있는 서브시스템들의 추가적인 예들은, ASIC(application-specific integrated circuit), 하드와이어링된 회로 블록들, 아날로그 및/또는 믹싱된 신호 회로부, GPU(graphics processing unit)들, 및/또는 범용 프로세서들(예컨대, 중앙 프로세싱 유닛들 또는 CPU들)을 포함할 수 있다(그러나 이에 제한되지 않음). CPU의 일 예는 x86 타입의 아키텍처를 갖는 프로세서이다. 본 명세서 내에서, 용어 "ASIC"는 다른 타입 또는 타입들의 회로부와 조합된 주문형 회로부를 포함하는 IC, 다이, 및/또는 다이의 일부; 및/또는 주문형 회로부로 전적으로 형성된 IC 및/또는 다이를 지칭할 수 있다.
특정한 실시예들에서, 하나 이상의 DPE 어레이들을 포함하는 디바이스는 단일 다이 아키텍처를 사용하여 구현될 수 있다. 그 경우, DPE 어레이(들) 및 DPE 어레이(들)에 이용되는 임의의 다른 서브시스템들은 디바이스의 동일한 다이 상에서 구현된다. 다른 실시예들에서, 하나 이상의 DPE 어레이들을 포함하는 디바이스는 2개 이상의 다이들을 포함하는 멀티-다이 디바이스로서 구현될 수 있다. 일부 멀티-다이 디바이스들에서, DPE 어레이 또는 DPE 어레이들은 하나의 다이 상에서 구현될 수 있는 반면, 하나 이상의 다른 서브시스템들은 하나 이상의 다른 다이들 상에서 구현된다. 다른 멀티-다이 디바이스들에서, DPE 어레이 또는 DPE 어레이들은 멀티-다이 디바이스의 하나 이상의 다른 서브시스템들과 조합하여 하나 이상의 다이들에서 구현될 수 있다(예컨대, 여기서 DPE 어레이는 적어도 하나의 서브시스템과 동일한 다이에서 구현됨).
본 개시내용 내에서 설명된 바와 같은 DPE 어레이는 최적화된 DSP(digital signal processing) 아키텍처를 구현할 수 있다. DSP 아키텍처는 다양한 상이한 동작들 중 임의의 동작을 효율적으로 수행할 수 있다. 아키텍처에 의해 수행될 수 있는 동작들의 타입들의 예들은, 무선 라디오에 관련된 동작들, DFE(decision feedback equalization), 5G/베이스밴드, 무선 백홀, 머신 러닝, 자동차 운전자 보조, 임베디드 비전(embedded vision), 케이블 액세스, 및/또는 레이더를 포함한다(그러나 이에 제한되지 않음). 본 명세서에 설명된 바와 같은 DPE 어레이는, 종래의 프로그래밍가능(예컨대, FPGA 타입) 회로부를 이용하는 다른 솔루션들보다 더 적은 전력을 소비하면서 그러한 동작들을 수행할 수 있다. 추가로, DPE 어레이-기반 솔루션은 종래의 프로그래밍가능 회로부를 이용하는 다른 솔루션들보다 더 적은 영역의 다이를 사용하여 구현될 수 있다. DPE 어레이는 추가로, 예측가능하고 보장된 데이터 스루풋 및 레이턴시 메트릭들을 충족시키면서 본 명세서에 설명된 바와 같은 동작들을 수행할 수 있다.
본 발명의 어레인지먼트들의 추가적인 양상들은 도면들을 참조하여 더 상세히 아래에서 설명된다. 예시의 간략화 및 명확화의 목적들을 위해, 도면들에 도시된 엘리먼트들은 반드시 실척대로 도시될 필요는 없다. 예컨대, 엘리먼트들 중 몇몇 엘리먼트들의 치수들은 명확화를 위해 다른 엘리먼트들에 비해 과장될 수 있다. 추가로, 적절한 것으로 고려될 경우, 참조 번호들은 대응하는, 유사한, 또는 동일한 특징들을 표시하기 위해 도면들 사이에서 반복된다.
도 1은 DPE 어레이(102)를 포함하는 디바이스(100)의 일 예를 예시한다. 도 1의 예에서, DPE 어레이(102)는 SoC 인터페이스 블록(104)을 포함한다. 디바이스(100)는 또한 하나 이상의 서브시스템들(106-1 내지 106-N)을 포함한다. 하나 이상의 실시예들에서, 디바이스(100)는 SoC(System-on-Chip) 타입의 디바이스로서 구현된다. 일반적으로, SoC는 서로 상호작용할 수 있는 2개 이상의 서브시스템들을 포함하는 IC를 지칭한다. 일 예로서, SoC는 프로그램 코드를 실행하는 프로세서 및 하나 이상의 다른 회로들을 포함할 수 있다. 다른 회로들은 하드와이어링된 회로부, 프로그래밍가능 회로부, 다른 서브시스템들, 및/또는 이들의 임의의 조합으로서 구현될 수 있다. 회로들은 서로 그리고/또는 프로세서와 협력하여 동작할 수 있다.
DPE 어레이(102)는 복수의 상호연결된 DPE들로 형성된다. 각각의 DPE는 하드와이어링된 회로 블록이다. 각각의 DPE는 프로그래밍가능할 수 있다. SoC 인터페이스 블록(104)은 하나 이상의 타일들을 포함할 수 있다. SoC 인터페이스 블록(104)의 타일들 각각은 하드와이어링될 수 있다. SoC 인터페이스 블록(104)의 각각의 타일은 프로그래밍가능할 수 있다. SoC 인터페이스 블록(104)은 DPE 어레이(102), 예컨대 DPE들과 디바이스(100)의 서브시스템들(106)과 같은 SoC의 다른 부분들 사이에 인터페이스를 제공한다. 서브시스템들(106-1 내지 106-N)은, 예컨대 프로세서들 및/또는 프로세서 시스템들(예컨대, CPU들, 범용 프로세서들, 및/또는 GPU들), 프로그래밍가능 로직, NoC, ASIC들, 아날로그 및/또는 믹싱된 신호 회로부, 및/또는 하드와이어링된 회로 블록들 중 하나 이상 또는 이들의 임의의 조합을 표현할 수 있다.
하나 이상의 실시예들에서, 디바이스(100)는 단일 다이 아키텍처를 사용하여 구현된다. 그 경우, DPE 어레이(102) 및 적어도 하나의 서브시스템(106)은 단일 다이에 포함되거나 구현될 수 있다. 하나 이상의 다른 실시예들에서, 디바이스(100)는 멀티-다이 아키텍처를 사용하여 구현된다. 그 경우, DPE 어레이(102) 및 서브시스템들(106)은 2개 이상의 다이들에 걸쳐 구현될 수 있다. 예컨대, DPE 어레이(102)는 하나의 다이에서 구현될 수 있는 반면, 서브시스템들(106)은 하나 이상의 다른 다이들에서 구현된다. 다른 예에서, SoC 인터페이스 블록(104)은 DPE 어레이(102)의 DPE들과 상이한 다이에서 구현될 수 있다. 또 다른 예에서, DPE 어레이(102) 및 적어도 하나의 서브시스템(106)은 동일한 다이에서 구현될 수 있는 반면, 다른 서브시스템들 및/또는 다른 DPE 어레이들은 다른 다이들에서 구현된다. 단일 다이 및 멀티-다이 아키텍처들의 추가적인 예들은 도 2, 도 3, 도 4, 및 도 5와 관련하여 아래에서 더 상세히 본 명세서에 설명된다.
도 2a, 도 2b, 도 2c, 및 도 2d(총괄하여, "도 2"로 지칭됨)는 하나 이상의 DPE 어레이들(102)을 포함하는 디바이스에 대한 예시적인 아키텍처들을 예시한다. 더 구체적으로, 도 2는 디바이스(100)에 대한 단일-다이 아키텍처들의 예들을 예시한다. 예시의 목적들을 위해, SoC 인터페이스 블록(104)은 도 2에 도시되지 않는다.
도 2a는 단일 DPE 어레이를 포함하는 디바이스(100)에 대한 예시적인 아키텍처를 예시한다. 도 2a의 예에서, DPE 어레이(102)는 서브시스템(106-1)을 갖는 디바이스(100)에서 구현된다. DPE 어레이(102) 및 서브시스템(106-1)은 동일한 다이에서 구현된다. DPE 어레이(102)는 디바이스(100)의 다이의 전체 폭에 걸쳐 연장되거나 디바이스(100)의 다이에 걸쳐 부분적으로 연장될 수 있다. 도시된 바와 같이, DPE 어레이(102)는 디바이스(100)의 상단 구역에서 구현된다. 그러나, DPE 어레이(102)가 디바이스(100)의 다른 구역에서 구현될 수 있다는 것을 인식해야 한다. 이와 같이, 도 2a의 DPE 어레이(102)의 배치 및/또는 사이즈는 제한으로서 의도되지 않는다. DPE 어레이(102)는 SoC 인터페이스 블록(104)(도시되지 않음)에 의해 서브시스템(106-1)에 커플링될 수 있다.
도 2b는 복수의 DPE 어레이들을 포함하는 디바이스(100)에 대한 예시적인 아키텍처를 예시한다. 도 2b의 예에서, 다수의 DPE 어레이들은 DPE 어레이(102-1) 및 DPE 어레이(102-2)로서 구현 및 묘사된다. 도 2b는, 다수의 DPE 어레이들이 서브시스템(106-1)과 함께 디바이스(100)의 동일한 다이에서 구현될 수 있다는 것을 예시한다. DPE 어레이(102-1) 및/또는 DPE 어레이(102-2)는 디바이스(100)의 다이의 전체 폭에 걸쳐 연장되거나 디바이스(100)의 다이에 걸쳐 단지 부분적으로 연장될 수 있다. 도시된 바와 같이, DPE 어레이(102-1)는 디바이스(100)의 상단 구역에서 구현되는 반면, DPE 어레이(102-2)는 디바이스(100)의 하단 구역에서 구현된다. 언급된 바와 같이, 도 2b의 DPE 어레이들(102-1 및 102-2)의 배치 및/또는 사이즈는 제한들로서 의도되지 않는다.
하나 이상의 실시예들에서, DPE 어레이(102-1) 및 DPE 어레이(102-2)는 실질적으로 유사하거나 동일할 수 있다. 예컨대, DPE 어레이(102-1)는 DPE들의 사이즈, 형상, 수, 및 DPE들이 동종인지 또는 각각의 개개의 DPE 어레이에서 유사한 타입 및 시퀀스를 갖는지의 관점들에서 DPE 어레이(102-2)와 동일할 수 있다. 하나 이상의 다른 실시예들에서, DPE 어레이(102-1)는 DPE 어레이(102-2)와 상이할 수 있다. 예컨대, DPE 어레이(102-1)는 DPE들의 사이즈, 형상, 수, 코어들의 타입, 및 DPE들이 동종인지 또는 각각의 개개의 DPE 어레이에서 상이한 타입 및/또는 시퀀스를 갖는지의 관점들에서 DPE 어레이(102-2)와 상이할 수 있다.
하나 이상의 실시예들에서, DPE 어레이(102-1) 및 DPE 어레이(102-2) 각각은 그 자신의 SoC 인터페이스 블록(도시되지 않음)을 통해 서브시스템(106-1)에 커플링된다. 예컨대, 제1 SoC 인터페이스 블록은 DPE 어레이(102-1)를 서브시스템(106-1)에 커플링시키기 위해 포함 및 사용될 수 있는 반면, 제2 SoC 인터페이스 블록은 DPE 어레이(102-2)를 서브시스템(106-1)에 커플링시키기 위해 포함 및 사용될 수 있다. 다른 실시예에서, 단일 SoC 인터페이스 블록이 DPE 어레이(102-1) 및 DPE 어레이(102-2) 둘 모두를 서브시스템(106-1)에 커플링시키기 위해 사용될 수 있다. 예컨대, 후자의 경우, DPE 어레이들 중 하나는 SoC 인터페이스 블록을 포함하지 않을 수 있다. 그 어레이의 DPE들은 다른 DPE 어레이의 SoC 인터페이스 블록을 사용하여 서브시스템(106-1)에 커플링될 수 있다.
도 2c는 복수의 DPE 어레이들 및 복수의 서브시스템들을 포함하는 디바이스(100)에 대한 예시적인 아키텍처를 예시한다. 도 2c의 예에서, 다수의 DPE 어레이들은 DPE 어레이(102-1) 및 DPE 어레이(102-2)로서 구현 및 묘사된다. 도 2c는, 다수의 DPE 어레이들이 디바이스(100)의 동일한 다이에서 구현될 수 있고, DPE 어레이들(102)의 배치 또는 위치가 다를 수 있다는 것을 예시한다. 추가로, DPE 어레이들(102-1 및 102-2)은 서브시스템들(106-1 및 106-2)과 동일한 다이에서 구현된다.
도 2c의 예에서, DPE 어레이(102-1) 및 DPE 어레이(102-2)는 디바이스(100)의 다이의 전체 폭에 걸쳐 연장되지 않는다. 오히려, DPE 어레이들(102-1 및 102-2) 각각은 디바이스(100)의 다이에 걸쳐 부분적으로 연장되며, 그러므로, 디바이스(100)의 다이의 폭의 일부인 구역에서 구현된다. 도 2b의 예와 유사하게, 도 2c의 DPE 어레이(102-1) 및 DPE 어레이(102-2)는 실질적으로 유사하거나 동일할 수 있거나 또는 상이할 수 있다.
하나 이상의 실시예들에서, DPE 어레이(102-1) 및 DPE 어레이(102-2) 각각은 그 자신의 SoC 인터페이스 블록(도시되지 않음)을 통해 서브시스템(106-1) 및/또는 서브시스템(106-2)에 커플링된다. 예시적이고 비-제한적인 예에서, 제1 SoC 인터페이스 블록은 DPE 어레이(102-1)를 서브시스템(106-2)에 커플링시키기 위해 포함 및 사용될 수 있는 반면, 제2 SoC 인터페이스 블록은 DPE 어레이(102-2)를 서브시스템(106-1)에 커플링시키기 위해 포함 및 사용될 수 있다. 그 경우, 각각의 DPE 어레이는 디바이스(100)의 이용가능한 서브시스템들의 서브세트와 통신한다. 다른 예에서, 제1 SoC 인터페이스 블록은 DPE 어레이(102-1)를 서브시스템들(106-1 및 106-2)에 커플링시키기 위해 포함 및 사용될 수 있는 반면, 제2 SoC 인터페이스 블록은 DPE 어레이(102-2)를 서브시스템들(106-1 및 106-2)에 커플링시키기 위해 포함 및 사용될 수 있다. 또 다른 예에서, 단일 SoC 인터페이스 블록이 DPE 어레이(102-1) 및 DPE 어레이(102-2) 둘 모두를 서브시스템(106-1) 및/또는 서브시스템(106-2)에 커플링시키기 위해 사용될 수 있다. 언급된 바와 같이, 도 2c의 DPE 어레이들(102-1 및 102-2)의 배치 및/또는 사이즈는 제한으로서 의도되지 않는다.
도 2d는 복수의 DPE 어레이들 및 복수의 서브시스템들을 포함하는 디바이스(100)에 대한 다른 예시적인 아키텍처를 예시한다. 도 2d의 예에서, 다수의 DPE 어레이들은 DPE 어레이(102-1) 및 DPE 어레이(102-2)로서 구현 및 묘사된다. 도 2d는 또한, 다수의 DPE 어레이들이 디바이스(100)의 동일한 다이에서 구현될 수 있고, DPE 어레이들(102)의 배치 및/또는 위치가 다를 수 있다는 것을 예시한다. 도 2d의 예에서, DPE 어레이(102-1) 및 DPE 어레이(102-2)는 디바이스(100)의 다이의 전체 폭에 걸쳐 연장되지 않는다. 오히려, DPE 어레이들(102-1 및 102-2) 각각은 디바이스(100)의 다이의 폭의 일부인 구역에서 구현된다. 추가로, 도 2d의 디바이스(100)는 DPE 어레이들(102-1 및 102-2)과 동일한 다이 내에 서브시스템들(106-1, 106-2, 106-3, 및 106-4)을 포함한다. 도 2b의 예와 유사하게, 도 2d의 DPE 어레이(102-1) 및 DPE 어레이(102-2)는 실질적으로 유사하거나 동일할 수 있거나 또는 상이할 수 있다.
도 2d의 예에서 DPE 어레이들 및 서브시스템들 사이의 연결은 다를 수 있다. 일부 경우들에서, DPE 어레이들은 디바이스(100) 내의 이용가능한 서브시스템들의 서브세트에만 커플링될 수 있다. 다른 경우들에서, DPE 어레이들은 하나 초과의 서브시스템 또는 디바이스(100) 내의 각각의 서브시스템에 커플링될 수 있다.
도 2의 예들은 제한이 아니라 예시의 목적들을 위해 제공된다. 단일 다이를 갖는 디바이스는 다이의 상이한 구역들에 로케이팅된 하나 이상의 상이한 DPE 어레이들을 포함할 수 있다. DPE 어레이들의 수, 배치, 및/또는 사이즈는 다를 수 있다. 추가로, DPE 어레이들은 동일하거나 상이할 수 있다. 하나 이상의 DPE 어레이들은 본 개시내용 내에서 설명된 상이한 타입들의 서브시스템들 중 하나 이상 및/또는 이들의 임의의 조합과 조합하여 구현될 수 있다.
하나 이상의 실시예들에서, 2개 이상의 DPE 어레이들은 서로 직접 통신하도록 구성될 수 있다. 예컨대, DPE 어레이(102-1)는 DPE 어레이(102-2)와 그리고/또는 부가적인 DPE 어레이들과 직접 통신하는 것이 가능할 수 있다. 특정한 실시예들에서, DPE 어레이(102-1)는 하나 이상의 SoC 인터페이스 블록들을 통해 DPE 어레이(102-2)와 그리고/또는 다른 DPE 어레이들과 통신할 수 있다.
도 3은 디바이스(100)에 대한 다른 예시적인 아키텍처를 예시한다. 도 3의 예에서, DPE 어레이(102)는 SoC 인터페이스 블록(104)을 포함하는 DPE들(304)의 2차원 어레이로서 구현된다. DPE 어레이(102)는 아래에서 더 상세히 본 명세서에 설명될 다양한 상이한 아키텍처들 중 임의의 아키텍처를 사용하여 구현될 수 있다. 제한이 아닌 예시의 목적들을 위해, 도 3은 도 19와 관련하여 더 상세히 설명되는 바와 같이, 정렬된 행들 및 정렬된 열들로 배열된 DPE들(304)을 예시한다. 그러나, 다른 실시예들에서, DPE들(304)이 배열될 수 있으며, 여기서 선택된 행들 및/또는 열들 내의 DPE들은 인접한 행들 및/또는 열들 내의 DPE들에 비해 수평으로 반전되거나 뒤집혀진다. DPE들의 수평 반전의 일 예가 도 18과 관련하여 설명된다. 하나 이상의 다른 실시예들에서, DPE들의 행들 및/또는 열들은 인접한 행들 및/또는 열들에 대해 오프셋될 수 있다. 하나 이상 또는 모든 DPE들(304)은, 도 6 및 도 8과 관련하여 일반적으로 설명되는 바와 같이 단일 코어를 포함하거나 또는 도 12와 관련하여 일반적으로 설명되는 바와 같이 2개 이상의 코어들을 포함하도록 구현될 수 있다.
SoC 인터페이스 블록(104)은 DPE들(304)을 디바이스(100)의 하나 이상의 다른 서브시스템들에 커플링시킬 수 있다. 하나 이상의 실시예들에서, SoC 인터페이스 블록(104)은 인접한 DPE들(304)에 커플링된다. 예컨대, SoC 인터페이스 블록(104)은 DPE 어레이(102) 내의 DPE들의 하단 행에서 각각의 DPE(304)에 직접 커플링될 수 있다. 예시에서, SoC 인터페이스 블록(104)은 DPE(304-1, 304-2, 304-3, 304-4, 304-5, 304-6, 304-7, 304-8, 304-9, 및 304-10)에 직접 연결될 수 있다.
도 3은 예시의 목적들을 위해 제공된다. 다른 실시예들에서, SoC 인터페이스 블록(104)은, DPE 어레이(102)의 상단에, (예컨대, 열로서) DPE 어레이(102)의 좌측에, (예컨대, 열로서) DPE 어레이(102)의 우측에, 또는 (예컨대, DPE 어레이(102) 내의 하나 이상의 개재 행들 및/또는 열들로서) DPE 어레이(102) 내의 그리고 그 주위의 다수의 위치들에 로케이팅될 수 있다. SoC 인터페이스 블록(104)의 레이아웃 및 위치에 의존하여, SoC 인터페이스 블록(104)에 커플링된 특정한 DPE들이 달라질 수 있다.
제한이 아닌 예시의 목적들을 위해, SoC 인터페이스 블록(104)이 DPE들(304)의 좌측에 로케이팅되면, SoC 인터페이스 블록(104)은 DPE(304-1), DPE(304-11), DPE(304-21), 및 DPE(304-31)를 포함하는 DPE들의 좌측 열에 직접 커플링될 수 있다. SoC 인터페이스 블록(104)이 DPE들(304)의 우측에 로케이팅되면, SoC 인터페이스 블록(104)은 DPE(304-10), DPE(304-20), DPE(304-30), 및 DPE(304-40)를 포함하는 DPE들의 우측 열에 직접 커플링될 수 있다. SoC 인터페이스 블록(104)이 DPE들(304)의 상단에 로케이팅되면, SoC 인터페이스 블록(104)은 DPE(304-31), DPE(304-32), DPE(304-33), DPE(304-34), DPE(304-35), DPE(304-36), DPE(304-37), DPE(304-38), DPE(304-39), 및 DPE(304-40)를 포함하는 DPE들의 상단 행에 커플링될 수 있다. SoC 인터페이스 블록(104)이 다수의 위치들에 로케이팅되면, SoC 인터페이스 블록(104)에 직접 연결되는 특정한 DPE들은 달라질 수 있다. 예컨대, SoC 인터페이스 블록이 DPE 어레이(102) 내의 행 및/또는 열로서 구현되면, SoC 인터페이스 블록(104)에 직접 커플링되는 DPE들은, SoC 인터페이스 블록(104)의 하나 이상 측부들 또는 각각의 측부 상에서 SoC 인터페이스 블록(104)에 인접한 DPE들일 수 있다.
DPE들(304)은, 집합적으로 취해질 때, DPE 상호연결 네트워크를 형성하는 DPE 상호연결들(도시되지 않음)에 의해 상호연결된다. 이와 같이, SoC 인터페이스 블록(104)은, SoC 인터페이스 블록(104)에 직접 연결된 DPE 어레이(102)의 하나 이상의 선택된 DPE들(304)과 통신하고 각각의 개개의 DPE(304) 내에서 구현되는 DPE 상호연결들로 형성된 DPE 상호연결 네트워크를 이용함으로써 DPE 어레이(102)의 임의의 DPE(304)와 통신할 수 있다.
SoC 인터페이스 블록(104)은 DPE 어레이(102) 내의 각각의 DPE(304)를 디바이스(100)의 하나 이상의 다른 서브시스템들과 커플링시킬 수 있다. 예시의 목적들을 위해, 디바이스(100)는 서브시스템들(예컨대, 서브시스템들(106)), 이를테면 NoC(308), 프로그래밍가능 로직(PL)(310), 프로세서 시스템(PS)(312), 및/또는 하드와이어링된 회로 블록들(314, 316, 318, 320, 및/또는 322) 중 임의의 하드와이어링된 회로 블록을 포함한다. 예컨대, SoC 인터페이스 블록(104)은 선택된 DPE들(304)과 PL(310) 사이에 연결들을 설정할 수 있다. SoC 인터페이스 블록(104)은 또한, 선택된 DPE들(304)과 NoC(308) 사이에 연결들을 설정할 수 있다. NoC(308)를 통해, 선택된 DPE들(304)은 PS(312)와 그리고/또는 하드와이어링된 회로 블록들(320 및 322)과 통신할 수 있다. 선택된 DPE들(304)은 SoC 인터페이스 블록(104) 및 PL(310)을 통해, 하드와이어링된 회로 블록들(314 내지 318)과 통신할 수 있다. 특정한 실시예들에서, SoC 인터페이스 블록(104)은 디바이스(100)의 하나 이상의 서브시스템들에 직접 커플링될 수 있다. 예컨대, SoC 인터페이스 블록(104)은 PS(312)에 그리고/또는 다른 하드와이어링된 회로 블록들에 직접 커플링될 수 있다. 특정한 실시예들에서, 하드와이어링된 회로 블록들(314 내지 322)은 ASIC들의 예들로 고려될 수 있다.
하나 이상의 실시예들에서, DPE 어레이(102)는 단일 클록 도메인을 포함한다. 다른 서브시스템들, 이를테면 NoC(308), PL(310), PS(312), 및 다양한 하드와이어링된 회로 블록들은 하나 이상의 별개의 또는 상이한 클록 도메인(들)에 있을 수 있다. 여전히, DPE 어레이(102)는 서브시스템들 중 다른 서브시스템들과 인터페이싱하기 위해 사용될 수 있는 부가적인 클록들을 포함할 수 있다. 특정한 실시예들에서, SoC 인터페이스 블록(104)은, DPE 어레이(102)의 DPE들(304)에 제공 또는 분배될 수 있는 하나 이상의 클록 신호들을 생성할 수 있는 클록 신호 생성기를 포함한다.
DPE 어레이(102)는, DPE들(304) 및 SoC 인터페이스 블록(104) 사이의 연결, 및 DPE들(304) 및 SoC 인터페이스 블록(104)이 어떻게 동작하는지를 정의하는 구성 데이터를 내부 구성 메모리 셀들(또한, 본 명세서에서 "구성 레지스터들"로 지칭됨)에 로딩함으로써 프로그래밍될 수 있다. 예컨대, 특정한 DPE(304) 또는 DPE들(304)의 그룹이 서브시스템과 통신하기 위해, DPE(들)(304) 및 SoC 인터페이스 블록(104)은 그렇게 하도록 프로그래밍된다. 유사하게, 하나 이상의 특정한 DPE들(304)이 하나 이상의 다른 DPE들(304)과 통신하기 위해, DPE들은 그렇게 하도록 프로그래밍된다. DPE(들)(304) 및 SoC 인터페이스 블록(104)은, DPE(들)(304) 및 SoC 인터페이스 블록(104) 내의 구성 레지스터들에 구성 데이터를 각각 로딩함으로써 프로그래밍될 수 있다. 다른 예에서, SoC 인터페이스 블록(104)의 일부인 클록 신호 생성기는 DPE 어레이(102)에 제공되는 클록 주파수들을 변경시키도록 구성 데이터를 사용하여 프로그래밍가능할 수 있다.
NoC(308)는 PL(310), PS(312), 및 하드와이어링된 회로 블록들 중 선택된 회로 블록들(예컨대, 회로 블록들(320 및 322))에 대한 연결을 제공한다. 도 3의 예에서, NoC(308)가 프로그래밍가능하다. 다른 프로그래밍가능 회로부에 사용되는 프로그래밍가능 NoC의 경우, NoC(308)를 통해 라우팅될 네트(net)들은, 사용자 회로 설계가 디바이스(100) 내에서의 구현을 위해 생성될 때까지 알려지지 않는다. NoC(308)는, NoC(308) 내의 엘리먼트들, 이를테면 스위치들 및 인터페이스들이 스위치로부터 스위치로 그리고 NoC 인터페이스들 사이에서 데이터를 전달하도록 어떻게 구성되고 동작되는지를 정의하는 구성 데이터를 내부 구성 레지스터들에 로딩함으로써 프로그래밍될 수 있다.
NoC(308)는 디바이스(100)의 일부로서 제조되며, 물리적으로 수정가능하지 않지만, 사용자 회로 설계의 상이한 마스터 회로들과 상이한 슬레이브 회로들 사이에 연결을 설정하도록 프로그래밍될 수 있다. 이와 관련하여, NoC(308)는 상이한 회로 설계들에 적응될 수 있으며, 여기서 각각의 상이한 회로 설계는 NoC(308)에 의해 커플링될 수 있는 디바이스(100) 내의 상이한 위치들에서 구현되는 마스터 회로들 및 슬레이브 회로들의 상이한 조합들을 갖는다. NoC(308)는 사용자 회로 설계의 마스터 및 슬레이브 회로들 사이에서 데이터, 예컨대 애플리케이션 데이터 및/또는 구성 데이터를 라우팅하도록 프로그래밍될 수 있다. 예컨대, NoC(308)는 PL(310) 내에서 구현된 상이한 사용자-특정된 회로부를 PS(312)와, SoC 인터페이스 블록(104)을 통해 DPE들(304)의 상이한 DPE들과, 상이한 하드와이어링된 회로 블록들과, 그리고/또는 디바이스(100) 외부의 상이한 회로들 및/또는 시스템들과 커플링시키도록 프로그래밍될 수 있다.
PL(310)은 특정된 기능들을 수행하도록 프로그래밍될 수 있는 회로부이다. 일 예로서, PL(310)은 FPGA(field programmable gate array) 회로부로서 구현될 수 있다. PL(310)은 프로그래밍가능 회로 블록들의 어레이를 포함할 수 있다. PL(310) 내의 프로그래밍가능 회로 블록들의 예들은 IOB(input/output block)들, CLB(configurable logic block)들, BRAM(dedicated random access memory block), DSP(digital signal processing block)들, 클록 관리자들, 및/또는 DLL(delay lock loop)들을 포함한다(그러나 이에 제한되지 않음).
PL(310) 내의 각각의 프로그래밍가능 회로 블록은 통상적으로, 프로그래밍가능 상호연결 회로부 및 프로그래밍가능 로직 회로부 둘 모두를 포함한다. 프로그래밍가능 상호연결 회로부는 통상적으로, PIP(programmable interconnect point)들에 의해 상호연결된 다양한 길이들의 많은 수의 상호연결 와이어들을 포함한다. 통상적으로, 상호연결 와이어들은 비트별로 연결을 제공하도록 (예컨대, 와이어별로) 구성된다(예컨대, 여기서 각각의 와이어는 단일 비트의 정보를 전달함). 프로그래밍가능 로직 회로부는, 예컨대 룩업 테이블들, 레지스터들, 산술 로직 등을 포함할 수 있는 프로그래밍가능 엘리먼트들을 사용하여 사용자 설계의 로직을 구현한다. 프로그래밍가능 상호연결 및 프로그래밍가능 로직 회로부들은, 프로그래밍가능 엘리먼트들이 어떻게 구성 및 동작하는지를 정의하는 구성 데이터를 내부 구성 메모리 셀들에 로딩함으로써 프로그래밍될 수 있다.
도 3의 예에서, PL(310)은 2개의 별개의 섹션들로 도시된다. 다른 예에서, PL(310)은 프로그래밍가능 회로부의 통합된 구역으로서 구현될 수 있다. 또 다른 예에서, PL(310)은 프로그래밍가능 회로부의 2개 초과의 상이한 구역들로서 구현될 수 있다. PL(310)의 특정한 조직화는 제한으로서 의도되지 않는다.
도 3의 예에서, PS(312)는 디바이스(100)의 일부로서 제조되는 하드와이어링된 회로부로서 구현된다. PS(312)는 다양한 상이한 프로세서 타입들 중 임의의 타입으로서 구현되거나 이를 포함할 수 있다. 예컨대, PS(312)는 개별 프로세서, 예컨대 프로그램 코드를 실행할 수 있는 단일 코어로서 구현될 수 있다. 다른 예에서, PS(312)는 멀티-코어 프로세서로서 구현될 수 있다. 또 다른 예에서, PS(312)는 하나 이상의 코어들, 모듈들, 코-프로세서들, 인터페이스들, 및/또는 다른 리소스들을 포함할 수 있다. PS(312)는 다양한 상이한 타입들의 아키텍처들 중 임의의 아키텍처를 사용하여 구현될 수 있다. PS(312)를 구현하는 데 사용될 수 있는 예시적인 아키텍처들은 ARM 프로세서 아키텍처, x86 프로세서 아키텍처, GPU 아키텍처, 모바일 프로세서 아키텍처, DSP 아키텍처, 또는 컴퓨터-판독가능 명령들 또는 프로그램 코드를 실행할 수 있는 다른 적합한 아키텍처를 포함할 수 있다(그러나 이에 제한되지 않음).
회로 블록들(314 내지 322)은 다양한 상이한 하드와이어링된 회로 블록들 중 임의의 회로 블록으로서 구현될 수 있다. 하드와이어링된 회로 블록들(314 내지 322)은 특수화된 기능들을 수행하도록 맞춤화될 수 있다. 회로 블록들(314 내지 322)의 예들은 IOB(input/output block)들, 트랜시버들, 또는 다른 특수화된 회로 블록들을 포함한다(그러나 이에 제한되지 않음). 언급된 바와 같이, 회로 블록들(314 내지 322)은 ASIC들의 예들로 고려될 수 있다.
도 3의 예는, 단일 다이를 포함하는 디바이스에서 구현될 수 있는 아키텍처를 예시한다. DPE 어레이(102)가 디바이스(100)의 전체 폭을 점유하는 것으로 예시되어 있지만, 다른 실시예들에서, DPE 어레이(102)는 디바이스(100)의 전체 폭 미만을 점유하거나 그리고/또는 디바이스(100)의 상이한 구역에 로케이팅될 수 있다. 추가로, 포함된 DPE들(304)의 수는 달라질 수 있다. 이와 같이, DPE들(304)의 열들 및/또는 행들의 특정한 수는 도 3에 예시된 것과는 다를 수 있다.
하나 이상의 다른 실시예들에서, 디바이스(100)와 같은 디바이스는 디바이스(100)의 상이한 구역들에 로케이팅된 2개 이상의 DPE 어레이들(102)을 포함할 수 있다. 예컨대, 부가적인 DPE 어레이는 회로 블록들(320 및 322) 아래에 로케이팅될 수 있다.
언급된 바와 같이, 도 2 및 도 3은 단일 다이를 포함하는 디바이스에 대한 예시적인 아키텍처들을 예시한다. 하나 이상의 다른 실시예들에서, 디바이스(100)는 하나 이상의 DPE 어레이들(102)을 포함하는 멀티-다이 디바이스로서 구현될 수 있다.
도 4a 및 도 4b(총괄하여, "도 4"로 지칭됨)는 디바이스(100)의 멀티-다이 구현의 일 예를 예시한다. 멀티-다이 디바이스는, 단일 패키지 내에 2개 이상의 다이들을 포함하는 디바이스 또는 IC이다.
도 4a는 디바이스(100)의 토포그래피 뷰(topographical view)를 예시한다. 도 4a의 예에서, 디바이스(100)는 다수의 다이들을 적층시킴으로써 형성된 "적층된 다이" 타입의 디바이스로서 구현된다. 디바이스(100)는 인터포저(interposer)(402), 다이(404), 다이(406), 및 기판(408)을 포함한다. 다이들(404 및 406) 각각은 인터포저(402)의 표면, 예컨대 상단 표면에 부착된다. 일 양상에서, 다이들(404 및 406)은 플립-칩(flip-chip) 기술을 사용하여 인터포저(402)에 부착된다. 인터포저(402)는 기판(408)의 상단 표면에 부착된다.
도 4a의 예에서, 인터포저(402)는, 다이들(404 및 406)이 수평으로 적층되는 평면 표면을 갖는 다이이다. 도시된 바와 같이, 다이들(404 및 406)은 인터포저(402)의 평면 표면 상에 나란히 로케이팅된다. 도 4a의 인터포저(402) 상에 도시된 다이들의 수는 제한이 아니라 예시의 목적들을 위한 것이다. 다른 실시예들에서, 2개 초과의 다이들이 인터포저(402) 상에 장착될 수 있다.
인터포저(402)는 다이들(404 및 406) 각각에 대한 공통 장착 표면 및 전기적 커플링을 제공한다. 인터포저(402)의 제조는, 와이어들을 형성하도록 패터닝된 하나 이상의 전도성 층들의 증착을 허용하는 하나 이상의 프로세스 단계들을 포함할 수 있다. 이들 전도성 층들은 알루미늄, 금, 구리, 니켈, 다양한 실리사이드들, 및/또는 다른 적합한 재료로 형성될 수 있다. 인터포저(402)는, 예컨대 실리콘 이산화물과 같은 하나 이상의 유전 또는 절연 층(들)의 증착을 허용하는 하나 이상의 부가적인 프로세스 단계들을 사용하여 제조될 수 있다. 인터포저(402)는 또한 비아들 및 TV(through via)들을 포함할 수 있다. TV들은 TSV(through silicon via)들, TGV(through glass via)들, 또는 인터포저(402) 및 그의 기판을 구현하는 데 사용되는 특정한 재료들에 의존하는 다른 비아 구조들일 수 있다. 인터포저(402)가 수동 다이로서 구현되면, 인터포저(402)는 다양한 타입들의 솔더 범프들, 비아들, 와이어들, TV들, 및 UBM(under bump metallization)만을 가질 수 있다. 능동 다이로서 구현되면, 인터포저(402)는 P-N 접합들을 포함하는 트랜지스터들, 다이오드들 등과 같은 전기 디바이스들을 참조하여 하나 이상의 능동 디바이스들을 형성하는 부가적인 프로세스 층들을 포함할 수 있다.
다이들(404 및 406) 각각은 수동 다이, 또는 하나 이상의 능동 디바이스들을 포함하는 능동 다이로서 구현될 수 있다. 예컨대, 하나 이상의 DPE 어레이들은, 능동 다이들로서 구현될 때 다이들(404 및/또는 406) 중 하나 또는 둘 모두에서 구현될 수 있다. 하나 이상의 실시예들에서, 다이(404)는 하나 이상의 DPE 어레이들을 포함할 수 있는 반면, 다이(406)는 본 명세서에 설명된 상이한 서브시스템들 중 임의의 서브시스템을 구현한다. 본 명세서에서 제공된 예들은 예시의 목적들을 위한 것이며, 제한하는 것으로 의도되지 않는다. 예컨대, 디바이스(100)는, 다이들이 상이한 타입들 및/또는 기능들을 갖는 2개 초과의 다이들을 포함할 수 있다.
도 4b는 도 4a의 디바이스(100)의 측단면도이다. 도 4b는 절단선(4B-4B)을 따라 취해진 도 4a로부터의 디바이스(100)의 뷰를 예시한다. 다이들(404 및 406) 각각은 솔더 범프들(410)을 통해 인터포저(402)의 제1 평면 표면에 전기적으로 그리고 기계식으로 커플링된다. 일 예에서, 솔더 범프들(410)은 마이크로-범프들로서 구현된다. 여전히, 다양한 다른 기법들 중 임의의 기법이 다이들(404 및 406)을 인터포저(402)에 부착시키는 데 사용될 수 있다. 예컨대, 본드(bond) 와이어들 또는 에지 와이어들이 다이들(404 및 406)을 인터포저(402)에 기계식으로 그리고 전기적으로 부착시키는 데 사용될 수 있다. 다른 예에서, 접착 재료가 다이들(404 및 406)을 인터포저(402)에 기계식으로 부착시키는 데 사용될 수 있다. 도 4b 내에서 예시된 바와 같이, 솔더 범프들(410)을 사용하는 다이들(404 및 406)의 인터포저(402)로의 부착은 예시의 목적들을 위해 제공되며, 제한하는 것으로 의도되지 않는다.
인터포저(402)는 인터포저(402)에서 파선 또는 점선으로 예시된 하나 이상의 전도성 층들(412)을 포함한다. 전도성 층들(412)은 이전에 설명된 바와 같이 다양한 금속 층들 중 임의의 금속 층을 사용하여 구현된다. 전도성 층들(412)은 인터포저(402)의 와이어들(414)을 구현하는 패터닝된 금속 층들을 형성하도록 프로세싱된다. 적어도 2개의 상이한 다이들, 예컨대 다이들(404 및 406)을 커플링시키는, 인터포저(402) 내에 구현된 와이어는 다이간 와이어(inter-die wire)로 지칭된다. 도 4b는 예시의 목적들을 위해 다이간 와이어들로 고려되는 와이어들(414)을 도시한다. 와이어들(414)은 다이들(404 및 406) 사이에서 다이간 신호들을 전달한다. 예컨대, 와이어들(414) 각각은 다이(404) 아래의 솔더 범프(410)를 다이(406) 아래의 솔더 범프(410)와 커플링시키며, 그에 의해 다이들(404 및 406) 사이에서의 다이간 신호들의 교환을 허용한다. 와이어들(414)은 데이터 와이어들 또는 전력 와이어들일 수 있다. 전력 와이어는, 전압 전위를 전달하는 와이어 또는 접지 또는 기준 전압 전위를 갖는 와이어일 수 있다.
전도성 층들(412)의 상이한 전도성 층들은 비아들(416)을 사용하여 함께 커플링될 수 있다. 일반적으로, 비아 구조는 수직 전도성 경로(예컨대, 디바이스의 프로세스 층에 수직인 전도성 경로)를 구현하는 데 사용된다. 이와 관련하여, 솔더 범프들(410)과 접촉하는 와이어들(414)의 수직 부분들은 비아들(416)로서 구현된다. 인터포저(402) 내에서 상호연결들을 구현하기 위한 다수의 전도성 층들의 사용은 더 많은 수의 신호들이 라우팅되게 허용하고, 신호들의 더 복잡한 라우팅이 인터포저(402) 내에서 달성되게 허용한다.
솔더 범프들(418)은 인터포저(402)의 제2 평면 표면을 기판(408)에 기계식으로 그리고 전기적으로 커플링시키는 데 사용될 수 있다. 특정한 실시예들에서, 솔더 범프들(418)은 C4(controlled collapse chip connection) 볼들로서 구현된다. 기판(408)은 솔더 범프들(418)의 상이한 솔더 범프들을 기판(408) 아래의 하나 이상의 노드들에 커플링시키는 전도성 경로들(도시되지 않음)을 포함한다. 따라서, 솔더 범프들(418) 중 하나 이상은 기판(408) 내의 회로부 또는 배선을 통해, 인터포저(402) 내의 회로부를 디바이스(100) 외부의 노드들에 커플링시킨다.
TV들(420)은 수직으로 횡단하는, 예컨대 인터포저(402)의 전체는 아니지만 인터포저(402)의 실질적인 부분을 통해 연장되는 전기 연결을 형성하는 비아들이다. 와이어들 및 비아들과 같은 TV들(420)은 구리, 알루미늄, 금, 니켈, 다양한 실리사이드들, 및/또는 다른 적합한 재료들을 포함하는(그러나 이에 제한되지 않음) 다양한 상이한 전도성 재료들 중 임의의 전도성 재료로 형성될 수 있다. 도시된 바와 같이, TV들(420) 각각은 인터포저(402)의 하단 표면으로부터 인터포저(402)의 전도성 층(412)까지 연장된다. TV들(420)은 하나 이상의 비아들(416)과 조합하여 전도성 층들(412) 중 하나 이상을 통해 솔더 범프(410)에 추가로 커플링될 수 있다.
도 5a, 도 5b, 도 5c, 도 5d, 도 5e, 도 5f, 및 도 5g(총괄하여, "도 5"로 지칭됨)는 디바이스(100)의 예시적인 멀티-다이 구현들을 예시한다. 도 5의 예들은 도 4와 관련하여 설명된 바와 같이 구현될 수 있다.
도 5a를 참조하면, 다이(404)는 하나 이상의 DPE 어레이들(102)을 포함하는 반면, 다이(406)는 PS(312)를 구현한다.
도 5b를 참조하면, 다이(404)는 하나 이상의 DPE 어레이들(102)을 포함하는 반면, 다이(406)는 ASIC(504)를 구현한다. ASIC(504)는 특정한 또는 특수화된 동작들을 수행하기에 적합한 다양한 상이한 맞춤형 회로들 중 임의의 회로로서 구현될 수 있다.
도 5c를 참조하면, 다이(404)는 하나 이상의 DPE 어레이들(102)을 포함하는 반면, 다이(406)는 PL(310)을 구현한다.
도 5d를 참조하면, 다이(404)는 하나 이상의 DPE 어레이들(102)을 포함하는 반면, 다이(406)는 아날로그 및/또는 믹싱된(아날로그/믹싱된) 신호 회로부(508)를 구현한다. 아날로그/믹싱된 신호 회로부(508)는 하나 이상의 무선 수신기들, 무선 송신기들, 증폭기들, 아날로그-디지털 변환기들, 디지털-아날로그 변환기들, 또는 다른 아날로그 및/또는 디지털 회로부를 포함할 수 있다.
도 5e, 도 5f, 및 도 5g는 3개의 다이들(404, 406, 및 510)을 갖는 디바이스(100)의 예들을 예시한다. 도 5e를 참조하면, 디바이스(100)는 다이들(404, 406, 및 510)을 포함한다. 다이(404)는 하나 이상의 DPE 어레이들(102)을 포함한다. 다이(406)는 PL(310)을 포함한다. 다이(510)는 ASIC(504)를 포함한다.
도 5f를 참조하면, 다이(404)는 하나 이상의 DPE 어레이들(102)을 포함한다. 다이(406)는 PL(310)을 포함한다. 다이(510)는 아날로그/믹싱된 신호 회로부(508)를 포함한다.
도 5g를 참조하면, 다이(404)는 하나 이상의 DPE 어레이들(102)을 포함한다. 다이(406)는 ASIC(504)를 포함한다. 다이(510)는 아날로그/믹싱된 신호 회로부(508)를 포함한다. 하나 이상의 실시예들에서, PS(예컨대, PS(312))는 ASIC의 일 예이다.
도 5의 예에서, 다이들(406 및/또는 510) 각각은 특정한 타입의 서브시스템을 포함하는 것으로 묘사된다. 다른 실시예들에서, 다이(404, 406, 및/또는 510)는 하나 이상의 DPE 어레이들(102)과 조합된 하나 이상의 서브시스템들을 포함할 수 있다. 추가로, 다이들(404, 406, 및/또는 510)은 2개 이상의 상이한 타입들의 서브시스템들을 포함할 수 있다. 이와 같이, 다이들(404, 406, 및/또는 510) 중 임의의 하나 이상은 임의의 조합으로 하나 이상의 서브시스템들과 조합된 하나 이상의 DPE 어레이들(102)을 포함할 수 있다.
하나 이상의 실시예들에서, 인터포저(402) 및 다이들(404, 406, 및/또는 510)은 동일한 IC 제조 기술(예컨대, 피처 사이즈)을 사용하여 구현될 수 있다. 하나 이상의 다른 실시예들에서, 인터포저(402)는 특정한 IC 제조 기술을 사용하여 구현될 수 있는 반면, 다이들(404, 406, 및/또는 510)은 상이한 IC 제조 기술을 사용하여 구현된다. 또 다른 실시예들에서, 다이들(404, 406, 및/또는 510)은 인터포저(402)를 구현하는 데 사용되는 IC 제조 기술과 동일하거나 상이할 수 있는 상이한 IC 제조 기술들을 사용하여 구현될 수 있다. 상이한 다이들 및/또는 인터포저들에 대해 상이한 IC 제조 기술들을 사용함으로써, 더 저렴하고 그리고/또는 더 신뢰할 수 있는 IC 제조 기술들이 특정한 다이들에 대해 사용될 수 있는 반면, 더 작은 피처 사이즈들을 생성할 수 있는 다른 IC 제조 기술들이 다른 다이들에 대해 사용될 수 있다. 예컨대, 더 성숙한 제조 기술들이 인터포저(402)를 구현하는 데 사용될 수 있는 반면, 더 작은 피처 사이즈들을 형성할 수 있는 다른 기술들이 DPE 어레이(들)(102)를 포함하는 다이들 및/또는 능동 다이들을 구현하는 데 사용될 수 있다.
도 5의 예는 인터포저 상에 장착된 2개 이상의 다이들을 포함하는 디바이스(100)의 멀티-다이 구현들을 예시한다. 도시된 다이들의 수는 제한이 아니라 예시의 목적들을 위한 것이다. 다른 실시예들에서, 디바이스(100)는 인터포저(402) 상에 장착된 3개 초과의 다이들을 포함할 수 있다.
하나 이상의 다른 실시예들에서, 디바이스(100)의 멀티-다이 버전은 도 4의 적층된 다이 아키텍처 이외의 아키텍처를 사용하여 구현될 수 있다. 예컨대, 디바이스(100)는 MCM(Multi-Chip Module)으로서 구현될 수 있다. 디바이스(100)의 MCM 구현은 회로 보드 상에 장착된 하나 이상의 사전-패키징된 IC들을 사용하여 구현될 수 있으며, 여기서 회로 보드는 기존의 칩 패키지를 모방하도록 의도된 폼 팩터 및/또는 풋프린트를 갖는다. 다른 예에서, 디바이스(100)의 MCM 구현은 고밀도 상호연결 기판 상에 2개 이상의 다이들을 통합함으로써 구현될 수 있다. 또 다른 예에서, 디바이스(100)의 MCM 구현은 "칩-스택" 패키지로서 구현될 수 있다.
단일 다이 디바이스로 구현되는지 또는 멀티-다이 디바이스로 구현되는지 간에, 하나 이상의 다른 서브시스템들과 조합하여 본 명세서에 설명된 바와 같이 DPE 어레이를 사용하는 것은, 디바이스의 프로세싱 능력들을 증가시키면서, 영역 사용량 및 전력 소비를 낮게 유지시킨다. 예컨대, 하나 이상의 DPE 어레이(들)는 본 명세서에 설명된 디바이스의 서브시스템들 중 하나 이상으로부터 오프로딩(offload)된 기능들을 수행하고 그리고/또는 특정한 동작들을 하드웨어 가속시키는 데 사용될 수 있다. 예컨대, PS에 사용될 때, DPE 어레이는 하드웨어 가속기로서 사용될 수 있다. PS는 DPE 어레이 또는 그의 일부에 의해 수행될 동작들을 오프로딩시킬 수 있다. 다른 예들에서, DPE 어레이는 아날로그/믹싱된 신호 회로부에 제공될 디지털 전치-왜곡(pre-distortion)을 생성하는 것과 같은 계산적으로 리소스 집약적인 연산들을 수행하는 데 사용될 수 있다.
도 1, 도 2, 도 3, 도 4, 및/또는 도 5와 관련하여 본 명세서에 설명된 DPE 어레이(들) 및/또는 다른 서브시스템들의 다양한 조합들 중 임의의 조합이 단일 다이 타입의 디바이스 또는 멀티-다이 타입의 디바이스 중 어느 하나에서 구현될 수 있다는 것을 인식해야 한다.
본 명세서에 설명된 다양한 예들에서, SoC 인터페이스 블록은 DPE 어레이 내에서 구현된다. 하나 이상의 다른 실시예들에서, SoC 인터페이스 블록은 DPE 어레이 외부에서 구현될 수 있다. 예컨대, SoC 인터페이스 블록은, 복수의 DPE들을 구현하는 회로 블록과는 별개인 회로 블록, 예컨대 독립형 회로 블록으로서 구현될 수 있다.
도 6은 DPE 어레이(102)의 DPE(304)에 대한 예시적인 아키텍처를 예시한다. 도 6의 예에서, DPE(304)는 코어(602), 메모리 모듈(604), 및 DPE 상호연결(606)을 포함한다.
코어(602)는 DPE(304)의 데이터 프로세싱 능력들을 제공한다. 코어(602)는 다양한 상이한 프로세싱 회로들 중 임의의 프로세싱 회로로서 구현될 수 있다. 도 6의 예에서, 코어(602)는 선택적인 프로그램 메모리(608)를 포함한다. 하나 이상의 실시예들에서, 코어(602)는 프로그램 코드, 예컨대 컴퓨터 판독가능 명령들을 실행할 수 있는 프로세서로서 구현된다. 그 경우, 프로그램 메모리(608)가 포함되며, 코어(602)에 의해 실행되는 명령들을 저장할 수 있다. 예컨대, 코어(602)는 CPU, GPU, DSP, 벡터 프로세서, 또는 명령들을 실행할 수 있는 다른 타입의 프로세서로서 구현될 수 있다. 코어는 본 명세서에 설명된 다양한 CPU 및/또는 프로세서 아키텍처들 중 임의의 것을 사용하여 구현될 수 있다. 다른 예에서, 코어(602)는 VLIW(very long instruction word) 벡터 프로세서 또는 DSP로서 구현된다.
특정한 실시예들에서, 프로그램 메모리(608)는 코어(602)에 전용인 전용 프로그램 메모리로서 구현된다. 프로그램 메모리(608)는 동일한 DPE(304)의 코어에 의해서만 사용될 수 있다. 따라서, 프로그램 메모리(608)는 코어(602)에 의해서만 액세스될 수 있고, 임의의 다른 DPE 또는 다른 DPE의 컴포넌트와 공유되지 않는다. 프로그램 메모리(608)는 판독 및 기입 동작들을 위한 단일 포트를 포함할 수 있다. 프로그램 메모리(608)는 프로그램 압축을 지원할 수 있으며, 아래에서 더 상세히 설명되는 DPE 상호연결(606)의 메모리 맵핑된 네트워크 부분을 사용하여 어드레싱가능하다. 예컨대, DPE 상호연결(606)의 메모리 맵핑된 네트워크를 통해, 프로그램 메모리(608)에는 코어(602)에 의해 실행될 수 있는 프로그램 코드가 로딩될 수 있다.
하나 이상의 실시예들에서, 프로그램 메모리(608)는 하나 이상의 에러 검출 및/또는 에러 정정 메커니즘들을 지원할 수 있다. 예컨대, 프로그램 메모리(608)는 패리티 비트들의 부가를 통해 패리티 검사를 지원하도록 구현될 수 있다. 다른 예에서, 프로그램 메모리(608)는 다양한 타입들의 데이터 손상을 검출 및 정정할 수 있는 ECC(error-correcting code) 메모리일 수 있다. 다른 예에서, 프로그램 메모리(608)는 ECC 및 패리티 검사 둘 모두를 지원할 수 있다. 본 명세서에 설명되는 상이한 타입들의 에러 검출 및/또는 에러 정정은 예시의 목적들을 위해 제공되며, 설명된 실시예들의 제한인 것으로 의도되지 않는다. 다른 에러 검출 및/또는 에러 정정 기술들이 나열된 것들 이외의 프로그램 메모리(608)에 사용될 수 있다.
하나 이상의 실시예들에서, 코어(602)는 애플리케이션-특정 명령 세트를 지원하기 위해 맞춤형 아키텍처를 가질 수 있다. 예컨대, 코어(602)는 무선 애플리케이션들에 대해 맞춤화되며, 무선-특정 명령들을 실행하도록 구성될 수 있다. 다른 예에서, 코어(602)는 머신 러닝을 위해 맞춤화되며, 머신 러닝-특정 명령들을 실행하도록 구성될 수 있다.
하나 이상의 다른 실시예들에서, 코어(602)는 특정한 동작 또는 동작들을 수행하기 위해 전용되는 강화된 IP(Intellectual Property) 코어와 같은 하드와이어링된 회로부로서 구현된다. 그 경우, 코어(602)는 프로그램 코드를 실행하지 않을 수 있다. 코어(602)가 프로그램 코드를 실행하지 않는 실시예들에서, 프로그램 메모리(608)가 생략될 수 있다. 예시적이고 비-제한적인 예로서, 코어(602)는 강화된 FEC(forward error correction) 엔진 또는 다른 회로 블록으로서 구현될 수 있다.
코어(602)는 구성 레지스터들(624)을 포함할 수 있다. 구성 레지스터들(624)에는 코어(602)의 동작을 제어하기 위해 구성 데이터가 로딩될 수 있다. 하나 이상의 실시예들에서, 코어(602)는 구성 레지스터들(624)로 로딩된 구성 데이터에 기반하여 활성화 및/또는 비활성화될 수 있다. 도 6의 예에서, 구성 레지스터들(624)은 아래에서 더 상세히 설명되는 DPE 상호연결(606)의 메모리 맵핑된 네트워크를 통해 어드레싱가능하다(예컨대, 판독 및/또는 기입될 수 있음).
하나 이상의 실시예들에서, 메모리 모듈(604)은 코어(602)에 의해 사용 및/또는 생성되는 데이터를 저장할 수 있다. 예컨대, 메모리 모듈(604)은 애플리케이션 데이터를 저장할 수 있다. 메모리 모듈(604)은 랜덤-액세스 메모리와 같은 판독/기입 메모리를 포함할 수 있다. 따라서, 메모리 모듈(604)은 코어(602)에 의해 판독 및 소비될 수 있는 데이터를 저장할 수 있다. 메모리 모듈(604)은 또한, 코어(602)에 의해 기입된 데이터(예컨대, 결과들)를 저장할 수 있다.
하나 이상의 다른 실시예들에서, 메모리 모듈(604)은, DPE 어레이 내의 다른 DPE들의 하나 이상의 다른 코어들에 의해 사용 및/또는 생성될 수 있는 데이터, 예컨대 애플리케이션 데이터를 저장할 수 있다. DPE들의 하나 이상의 다른 코어들은 또한 메모리 모듈(604)로부터 판독하고 그리고/또는 메모리 모듈(604)로 기입할 수 있다. 특정한 실시예들에서, 메모리 모듈(604)로부터 판독하고 그리고/또는 메모리 모듈(604)로 기입할 수 있는 다른 코어들은 하나 이상의 이웃한 DPE들의 코어들일 수 있다. (예컨대, 인접한) DPE(304)와 가장자리 또는 경계를 공유하는 다른 DPE는 DPE(304)에 대한 "이웃한" DPE인 것으로 지칭된다. 코어(602) 및 이웃한 DPE들로부터의 하나 이상의 다른 코어들이 메모리 모듈(604)을 판독하고 그리고/또는 그에 기입하게 허용함으로써, 메모리 모듈(604)은, 메모리 모듈(604)에 액세스할 수 있는 상이한 DPE들 및/또는 코어들 사이의 통신을 지원하는 공유된 메모리를 구현한다.
도 3을 참조하면, 예컨대 DPE들(304-14, 304-16, 304-5, 및 304-25)은 DPE(304-15)의 이웃한 DPE들로 고려된다. 일 예에서, DPE들(304-16, 304-5, 및 304-25) 각각 내의 코어는 DPE(304-15) 내의 메모리 모듈을 판독하고 그에 기입할 수 있다. 특정한 실시예들에서, 메모리 모듈에 인접한 이들 이웃한 DPE들만이 DPE(304-15)의 메모리 모듈에 액세스할 수 있다. 예컨대, DPE(304-14)는 DPE(304-15)에 인접하지만, DPE(304-15)의 메모리 모듈에 인접하지 않을 수 있는데, 그 이유는 DPE(304-15)의 코어가 DPE(304-14)의 코어와 DPE(304-15)의 메모리 모듈 사이에 로케이팅될 수 있기 때문이다. 이와 같이, 특정한 실시예들에서, DPE(304-14)의 코어는 DPE(304-15)의 메모리 모듈에 액세스할 수 없다.
특정한 실시예들에서, DPE의 코어가 다른 DPE의 메모리 모듈에 액세스할 수 있는지 여부는, 메모리 모듈에 포함된 메모리 인터페이스들의 수, 및 그러한 코어들이 메모리 모듈의 메모리 인터페이스들 중 이용가능한 메모리 인터페이스에 연결되는지 여부에 의존한다. 위의 예에서, DPE(304-15)의 메모리 모듈은 4개의 메모리 인터페이스들을 포함하며, 여기서 DPE들(304-16, 304-5, 및 304-25)의 각각의 DPE의 코어는 그러한 메모리 인터페이스에 연결된다. DPE(304-15) 그 자체 내의 코어(602)는 제4 메모리 인터페이스에 연결된다. 각각의 메모리 인터페이스는 하나 이상의 판독 및/또는 기입 채널들을 포함할 수 있다. 특정한 실시예들에서, 각각의 메모리 인터페이스는, 그에 부착된 특정한 코어가 동시에 메모리 모듈(604) 내의 다수의 뱅크들을 판독하고 그리고/또는 그에 기입할 수 있도록 하는 다수의 판독 채널들 및 다수의 기입 채널들을 포함한다.
다른 예들에서, 4개 초과의 메모리 인터페이스들이 이용가능할 수 있다. 그러한 다른 메모리 인터페이스들은 DPE(304-15)에 대해 대각선에 있는 DPE들이 DPE(304-15)의 메모리 모듈에 액세스하게 허용하는 데 사용될 수 있다. 예컨대, DPE들(304-14, 304-24, 304-26, 304-4, 및/또는 304-6)과 같은 DPE들 내의 코어들이 또한 DPE(304-15) 내의 메모리 모듈의 이용가능한 메모리 인터페이스에 커플링되면, 그러한 다른 DPE들은 또한, DPE(304-15)의 메모리 모듈에 액세스할 수 있을 것이다.
메모리 모듈(604)은 구성 레지스터들(636)을 포함할 수 있다. 구성 레지스터들(636)에는 메모리 모듈(604)의 동작을 제어하기 위해 구성 데이터가 로딩될 수 있다. 도 6의 예에서, 구성 레지스터들(636(및 624))은 아래에서 더 상세히 설명되는 DPE 상호연결(606)의 메모리 맵핑된 네트워크를 통해 어드레싱가능하다(예컨대, 판독 및/또는 기입될 수 있음).
도 6의 예에서, DPE 상호연결(606)은 DPE(304)에 특정적이다. DPE 상호연결(606)은, DPE(304)와 DPE 어레이(102)의 하나 이상의 다른 DPE들 사이의 통신 및/또는 디바이스(100)의 다른 서브시스템들과의 통신을 포함하는 다양한 동작들을 용이하게 한다. DPE 상호연결(606)은 DPE(304)의 구성, 제어, 및 디버깅을 추가로 가능하게 한다.
특정한 실시예들에서, DPE 상호연결(606)은 온-칩 상호연결로서 구현된다. 온-칩 상호연결의 일 예는 AMBA AXI(Advanced Microcontroller Bus Architecture eXtensible Interface) 버스(예컨대, 또는 스위치)이다. AMBA AXI 버스는, 회로 블록들 및/또는 시스템들 사이에 온-칩 연결들을 설정하는 데 사용하기 위한 임베디드 마이크로제어기 버스 인터페이스이다. AXI 버스는 본 개시내용 내에서 설명된 본 발명의 어레인지먼트들에 사용될 수 있는 상호연결 회로부의 일 예로서 본 명세서에서 제공되며, 그러므로 제한으로서 의도되지 않는다. 상호연결 회로부의 다른 예들은 다른 타입들의 버스들, 크로스바(crossbar)들, 및/또는 다른 타입들의 스위치들을 포함할 수 있다.
하나 이상의 실시예들에서, DPE 상호연결(606)은 2개의 상이한 네트워크들을 포함한다. 제1 네트워크는 DPE 어레이(102)의 다른 DPE들 및/또는 디바이스(100)의 다른 서브시스템들과 데이터를 교환할 수 있다. 예컨대, 제1 네트워크는 애플리케이션 데이터를 교환할 수 있다. 제2 네트워크는 DPE(들)에 대한 구성, 제어, 및/또는 디버깅 데이터와 같은 데이터를 교환할 수 있다.
도 6의 예에서, DPE 상호연결(606)의 제1 네트워크는 스트림 스위치(626) 및 하나 이상의 스트림 인터페이스들로 형성된다. 도시된 바와 같이, 스트림 스위치(626)는 복수의 스트림 인터페이스들(도 6에서 "SI"로 약칭됨)을 포함한다. 하나 이상의 실시예들에서, 각각의 스트림 인터페이스는 하나 이상의 마스터들(예컨대, 마스터 인터페이스들 또는 출력들) 및/또는 하나 이상의 슬레이브들(예컨대, 슬레이브 인터페이스들 또는 입력들)을 포함할 수 있다. 각각의 마스터는 특정한 비트-폭을 갖는 독립적인 출력일 수 있다. 예컨대, 스트림 인터페이스에 포함된 각각의 마스터는 독립적인 AXI 마스터일 수 있다. 각각의 슬레이브는 특정한 비트-폭을 갖는 독립적인 입력일 수 있다. 예컨대, 스트림 인터페이스에 포함된 각각의 슬레이브는 독립적인 AXI 슬레이브일 수 있다.
스트림 인터페이스들(610 내지 616)은 DPE 어레이(102) 내의 다른 DPE들과 그리고/또는 SoC 인터페이스 블록(104)과 통신하는 데 사용된다. 예컨대, 스트림 인터페이스들(610, 612, 614, 및 616) 각각은 상이한 기본 방향으로 통신할 수 있다. 도 6의 예에서, 스트림 인터페이스(610)는 좌측(서쪽)의 DPE와 통신한다. 스트림 인터페이스(612)는 위(북쪽)의 DPE와 통신한다. 스트림 인터페이스(614)는 우측(동쪽)의 DPE와 통신한다. 스트림 인터페이스(616)는 아래(남쪽)의 DPE 또는 SoC 인터페이스 블록(104)와 통신한다.
스트림 인터페이스(628)는 코어(602)와 통신하는 데 사용된다. 예컨대, 코어(602)는 스트림 인터페이스(628)에 연결되는 스트림 인터페이스(638)를 포함하며, 그에 의해, 코어(602)가 DPE 상호연결(606)을 통해 다른 DPE들(304)과 직접 통신하게 허용한다. 예컨대, 코어(602)는, 코어(602)가 스트림 인터페이스(638)를 통해 직접 데이터를 전송 및/또는 수신할 수 있게 하는 명령들 또는 하드와이어링된 회로부를 포함할 수 있다. 스트림 인터페이스(638)는 차단되거나 차단되지 않을 수 있다. 하나 이상의 실시예들에서, 코어(602)가 비어있는 스트림으로부터 판독하거나 전체 스트림에 기입하려고 시도하는 경우들에서, 코어(602)는 멈춰질 수 있다. 다른 실시예들에서, 비어있는 스트림으로부터 판독하거나 전체 스트림에 기입하려고 시도하는 것은 코어(602)가 멈춰지게 하지 않을 수 있다. 오히려, 코어(602)는 실행 또는 동작을 계속할 수 있다.
스트림 인터페이스(630)는 메모리 모듈(604)과 통신하는 데 사용된다. 예컨대, 메모리 모듈(604)은 스트림 인터페이스(630)에 연결되는 스트림 인터페이스(640)를 포함하며, 그에 의해, 다른 DPE들(304)이 DPE 상호연결(606)을 통해 메모리 모듈(604)과 통신하게 허용한다. 스트림 스위치(626)는, 메모리 모듈(604)의 메모리 인터페이스에 커플링되지 않은 DPE들 및/또는 이웃하지 않은 DPE들이 DPE 어레이(102)의 개개의 DPE들(304)의 DPE 상호연결들에 의해 형성된 DPE 상호연결 네트워크를 통해 코어(602) 및/또는 메모리 모듈(604)과 통신하게 허용할 수 있다.
도 3을 다시 참조하면 그리고 기준 포인트로서 DPE(304-15)를 사용하면, 스트림 인터페이스(610)는, DPE(304-14)의 DPE 상호연결에 로케이팅된 다른 스트림 인터페이스에 커플링되고 그와 통신할 수 있다. 스트림 인터페이스(612)는, DPE(304-25)의 DPE 상호연결에 로케이팅된 다른 스트림 인터페이스에 커플링되고 그와 통신할 수 있다. 스트림 인터페이스(614)는, DPE(304-16)의 DPE 상호연결에 로케이팅된 다른 스트림 인터페이스에 커플링되고 그와 통신할 수 있다. 스트림 인터페이스(616)는, DPE(304-5)의 DPE 상호연결에 로케이팅된 다른 스트림 인터페이스에 커플링되고 그와 통신할 수 있다. 이와 같이, 코어(602) 및/또는 메모리 모듈(604)은 또한, DPE들 내의 DPE 상호연결들을 통해 DPE 어레이(102) 내의 DPE들 중 임의의 DPE와 통신할 수 있다.
스트림 스위치(626)는 또한, PL(310) 및/또는 NoC(308)와 같은 서브시스템들에 인터페이싱하는 데 사용될 수 있다. 일반적으로, 스트림 스위치(626)는 서킷-스위칭(circuit-switching) 스트림 상호연결 또는 패킷-스위칭(packet-switched) 스트림 상호연결로서 동작하도록 프로그래밍될 수 있다. 서킷-스위칭 스트림 상호연결은 DPE들 사이의 고대역폭 통신에 적합한 포인트-포인트 전용 스트림들을 구현할 수 있다. 패킷-스위칭 스트림 상호연결은 중간 대역폭 통신을 위해 다수의 논리 스트림들을 하나의 물리적 스트림으로 시간-멀티플렉싱하도록 스트림들이 공유되게 허용한다.
스트림 스위치(626)는 구성 레지스터들(도 6에서 "CR"로 약칭됨)(634)을 포함할 수 있다. 구성 데이터는 DPE 상호연결(606)의 메모리 맵핑된 네트워크에 의해 구성 레지스터들(634)에 기입될 수 있다. 구성 레지스터들(634)에 로딩된 구성 데이터는, DPE(304)가 어느 다른 DPE들 및/또는 서브시스템들(예컨대, NoC(308), PL(310), 및/또는 PS(312))과 통신할지, 및 그러한 통신들이 서킷-스위칭 포인트-포인트 연결들로서 설정되는지 또는 패킷-스위칭 연결들로서 설정되는지를 지시한다.
도 6에 예시된 스트림 인터페이스들의 수가 제한이 아니라 예시의 목적들을 위한 것이라는 것을 인식해야 한다. 다른 실시예들에서, 스트림 스위치(626)는 더 적은 스트림 인터페이스들을 포함할 수 있다. 특정한 실시예들에서, 스트림 스위치(626)는 디바이스 내의 다른 컴포넌트들 및/또는 서브시스템들에 대한 연결들을 용이하게 하는 더 많은 스트림 인터페이스들을 포함할 수 있다. 예컨대, 부가적인 스트림 인터페이스들은 DPE들(304-24, 304-26, 304-4, 및/또는 304-6)과 같은 다른 이웃하지 않은 DPE들에 커플링될 수 있다. 하나 이상의 다른 실시예들에서, 스트림 인터페이스들은 DPE(304-15)와 같은 DPE를 하나 이상의 DPE들과 떨어져 로케이팅되어 있는 다른 DPE들에 커플링시키기 위해 포함될 수 있다. 예컨대, DPE(304-15)가 DPE(304-13), DPE(304-16), 또는 다른 이웃하지 않은 DPE 내의 스트림 인터페이스에 직접 커플링되게 하는 하나 이상의 스트림 인터페이스들이 포함될 수 있다.
DPE 상호연결(606)의 제2 네트워크는 메모리 맵핑된 스위치(632)로 형성된다. 메모리 맵핑된 스위치(632)는 복수의 메모리 맵핑된 인터페이스들(도 6에서 "MMI"로 약칭됨)을 포함한다. 하나 이상의 실시예들에서, 각각의 메모리 맵핑된 인터페이스는 하나 이상의 마스터들(예컨대, 마스터 인터페이스들 또는 출력들) 및/또는 하나 이상의 슬레이브들(예컨대, 슬레이브 인터페이스들 또는 입력들)을 포함할 수 있다. 각각의 마스터는 특정한 비트-폭을 갖는 독립적인 출력일 수 있다. 예컨대, 메모리 맵핑된 인터페이스에 포함된 각각의 마스터는 독립적인 AXI 마스터일 수 있다. 각각의 슬레이브는 특정한 비트-폭을 갖는 독립적인 입력일 수 있다. 예컨대, 메모리 맵핑된 인터페이스에 포함된 각각의 슬레이브는 독립적인 AXI 슬레이브일 수 있다.
도 6의 예에서, 메모리 맵핑된 스위치(632)는 메모리 맵핑된 인터페이스들(620, 622, 642, 644, 및 646)을 포함한다. 메모리 맵핑된 스위치(632)가 부가적인 또는 더 적은 메모리 맵핑된 인터페이스들을 포함할 수 있다는 것을 인식해야 한다. 예컨대, 메모리 맵핑된 스위치(632)를 사용하여 판독 및/또는 기입될 수 있는 DPE의 각각의 컴포넌트에 대해, 메모리 맵핑된 스위치(632)는 그러한 컴포넌트에 커플링된 메모리 맵핑된 인터페이스를 포함할 수 있다. 추가로, 컴포넌트 그 자체는, 메모리 어드레스들의 판독 및/또는 기입을 용이하게 하기 위해, 메모리 맵핑된 스위치(632) 내의 대응하는 메모리 맵핑된 인터페이스에 커플링된 메모리 맵핑된 인터페이스를 포함할 수 있다.
메모리 맵핑된 인터페이스들(620 및 622)은 DPE(304)에 대한 구성, 제어, 및 디버깅 데이터를 교환하는 데 사용될 수 있다. 도 6의 예에서, 메모리 맵핑된 인터페이스(620)는 DPE(304)를 구성하는 데 사용되는 구성 데이터를 수신할 수 있다. 메모리 맵핑된 인터페이스(620)는 DPE(304) 아래에 로케이팅된 DPE로부터 그리고/또는 SoC 인터페이스 블록(104)으로부터 구성 데이터를 수신할 수 있다. 메모리 맵핑된 인터페이스(622)는, 메모리 맵핑된 인터페이스(620)에 의해 수신된 구성 데이터를, DPE(304) 위의 하나 이상의 다른 DPE들에, 코어(602)에(예컨대, 프로그램 메모리(608)에 그리고/또는 구성 레지스터들(624)에), 메모리 모듈(604)에(예컨대, 메모리 모듈(604) 내의 메모리에 그리고/또는 구성 레지스터들(636)에), 그리고/또는 스트림 스위치(626) 내의 구성 레지스터들(634)에 포워딩할 수 있다.
특정한 실시예들에서, 메모리 맵핑된 인터페이스(620)는 본 명세서에 설명될 아래의 SoC 인터페이스 블록(104)의 타일 또는 DPE와 통신한다. 메모리 맵핑된 인터페이스(622)는 위의 DPE와 통신한다. 도 3을 다시 참조하면 그리고 기준 포인트로서 DPE(304-15)를 사용하면, 메모리 맵핑된 인터페이스(620)는, DPE(304-5)의 DPE 상호연결에 로케이팅된 다른 메모리 맵핑된 인터페이스에 커플링되고 그와 통신할 수 있다. 메모리 맵핑된 인터페이스(622)는, DPE(304-25)의 DPE 상호연결에 로케이팅된 다른 메모리 맵핑된 인터페이스에 커플링되고 그와 통신할 수 있다. 하나 이상의 실시예들에서, 메모리 맵핑된 스위치(632)는 남쪽으로부터 북쪽으로 제어, 및/또는 디버그 데이터를 전달한다. 다른 실시예들에서, 메모리 맵핑된 스위치(632)는 또한 북쪽으로부터 남쪽으로 데이터를 전달할 수 있다.
메모리 맵핑된 인터페이스(646)는, 메모리 모듈(604) 내의 구성 레지스터들(636) 및/또는 메모리의 판독 및/또는 기입을 용이하게 하기 위해 메모리 모듈(604) 내의 메모리 맵핑된 인터페이스(도시되지 않음)에 커플링될 수 있다. 메모리 맵핑된 인터페이스(644)는 프로그램 메모리(608) 및/또는 구성 레지스터들(624)의 판독 및/또는 기입을 용이하게 하기 위해 코어(602) 내의 메모리 맵핑된 인터페이스(도시되지 않음)에 커플링될 수 있다. 메모리 맵핑된 인터페이스(642)는 구성 레지스터(634)를 판독하고 그리고/또는 그에 기입하기 위해 구성 레지스터들(634)에 커플링될 수 있다.
도 6의 예에서, 메모리 맵핑된 스위치(632)는 위의(예컨대, 북쪽의) 그리고 아래의(예컨대, 남쪽의) 회로부와 통신할 수 있다. 하나 이상의 다른 실시예들에서, 메모리 맵핑된 스위치(632)는, 좌측 및/또는 우측의 DPE들의 메모리 맵핑된 스위치들의 메모리 맵핑된 인터페이스들에 커플링된 부가적인 메모리 맵핑된 인터페이스들을 포함한다. DPE(304-15)를 기준 포인트로서 사용하면, 그러한 부가적인 메모리 맵핑된 인터페이스들은 DPE(304-14) 및/또는 DPE(304-16)에 로케이팅된 메모리 맵핑된 스위치들에 연결될 수 있으며, 그에 의해 수평 방향 뿐만 아니라 수직 방향으로 DPE들 사이에서 구성, 제어, 및 디버그 데이터를 통신하는 것을 용이하게 한다.
다른 실시예들에서, 메모리 맵핑된 스위치(632)는, DPE(304)에 대해 대각선에 있는 DPE들 내의 메모리 맵핑된 스위치들에 연결된 부가적인 메모리 맵핑된 인터페이스들을 포함할 수 있다. 예컨대, DPE(304-15)를 기준 포인트로서 사용하면, 그러한 부가적인 메모리 맵핑된 인터페이스들은 DPE(304-24, 304-26, 304-4, 및/또는 304-6)에 로케이팅된 메모리 맵핑된 스위치들에 커플링될 수 있으며, 그에 의해 대각선으로 DPE들 사이에서 구성, 제어, 및 디버그 정보를 통신하는 것을 용이하게 한다.
DPE 상호연결(606)은 DPE(304)의 위치에 의존하여, 각각의 이웃한 DPE 및/또는 SoC 인터페이스 블록(104)의 DPE 상호연결에 커플링된다. 전체적으로 보면, DPE들(304)의 DPE 상호연결들은 (스트림 네트워크 및/또는 메모리 맵핑된 네트워크를 포함할 수 있는) DPE 상호연결 네트워크를 형성한다. 각각의 DPE의 스트림 스위치들의 구성 레지스터들은 메모리 맵핑된 스위치들을 통해 구성 데이터를 로딩함으로써 프로그래밍될 수 있다. 구성을 통해, 스트림 스위치들 및/또는 스트림 인터페이스들은, 하나 이상의 다른 DPE들(304)에든 그리고/또는 SoC 인터페이스 블록(104)에든 간에, 다른 엔드포인트들과의 연결들을 패킷-스위칭으로든 또는 서킷-스위칭으로든 설정하도록 프로그래밍된다.
하나 이상의 실시예들에서, DPE 어레이(102)는 PS(312)와 같은 프로세서 시스템의 어드레스 공간에 맵핑된다. 따라서, DPE(304) 내의 임의의 구성 레지스터들 및/또는 메모리들은 메모리 맵핑된 인터페이스를 통해 액세스될 수 있다. 예컨대, 메모리 모듈(604) 내의 메모리, 프로그램 메모리(608), 코어(602) 내의 구성 레지스터들(624), 메모리 모듈(604) 내의 구성 레지스터들(636), 및/또는 구성 레지스터들(634)은 메모리 맵핑된 스위치(632)를 통해 판독 및/또는 기입될 수 있다.
도 6의 예에서, 메모리 맵핑된 인터페이스들은 DPE(304)에 대한 구성 데이터를 수신할 수 있다. 구성 데이터는, (포함되면) 프로그램 메모리(608)에 로딩되는 프로그램 코드, 구성 레지스터들(624, 634, 및/또는 636)에 로딩하기 위한 구성 데이터, 및/또는 메모리 모듈(604)의 메모리(예컨대, 메모리 뱅크들)에 로딩될 데이터를 포함할 수 있다. 도 6의 예에서, 구성 레지스터들(624, 634, 및 636)은, 구성 레지스터들이 제어하도록 의도되는 특정한 회로 구조들, 예컨대 코어(602), 스트림 스위치(626), 및 메모리 모듈(604) 내에 로케이팅되는 것으로 도시된다. 도 6의 예는 단지 예시의 목적들을 위한 것일 뿐이며, 코어(602), 메모리 모듈(604), 및/또는 스트림 스위치(626) 내의 엘리먼트들이 구성 데이터를 대응하는 구성 레지스터들에 로딩함으로써 프로그래밍될 수 있다는 것을 예시한다. 다른 실시예들에서, 구성 레지스터들은, DPE(304) 전반에 걸쳐 분포된 컴포넌트들의 동작을 제어함에도 불구하고 DPE(304)의 특정한 구역 내에 통합될 수 있다.
따라서, 스트림 스위치(626)는 구성 데이터를 구성 레지스터들(634)에 로딩함으로써 프로그래밍될 수 있다. 구성 데이터는, 2개의 상이한 DPE들 및/또는 다른 서브시스템들 사이에서 서킷-스위칭 스트림 인터페이스들로서 또는 선택된 DPE들 및/또는 다른 서브시스템들에 커플링된 패킷-스위칭 스트림 인터페이스들로서 동작하도록 스트림 스위치(626) 및/또는 스트림 인터페이스들(610 내지 616 및/또는 628 내지 630)을 프로그래밍한다. 따라서, 스트림 스위치(626)에 의해 다른 스트림 인터페이스들에 대해 설정된 연결들은, DPE(304) 내에서, 다른 DPE들 및/또는 디바이스(100)의 다른 서브시스템들과의 실제 연결들 또는 애플리케이션 데이터 경로들을 설정하도록 적절한 구성 데이터를 구성 레지스터들(634)에 로딩함으로써 프로그래밍된다.
도 7은 다수의 DPE들(304) 사이의 예시적인 연결을 예시한다. 도 7의 예에서, 도 6에 예시된 아키텍처는 DPE들(304-14, 304-15, 304-24, 및 304-25) 각각을 구현하는 데 사용된다. 도 7은, 스트림 인터페이스들이 (각각의 측부 상의 그리고 위 및 아래의) 이웃한 DPE들 사이에서 상호연결되고, 메모리 맵핑된 인터페이스들이 위 및 아래의 DPE들에 연결되는 일 실시예를 예시한다. 예시의 목적들을 위해, 스트림 스위치들 및 메모리 맵핑된 스위치들은 도시되지 않는다.
언급된 바와 같이, 다른 실시예들에서, 부가적인 메모리 맵핑된 인터페이스들은, 도시된 바와 같이 수직 방향으로 그리고 수평 방향으로 DPE들을 커플링시키기 위해 포함될 수 있다. 추가로, 메모리 맵핑된 인터페이스들은 수직 및/또는 수평 방향들로 양방향 통신을 지원할 수 있다.
메모리 맵핑된 인터페이스들(620 및 622)은 공유된 트랜잭션 스위칭 네트워크를 구현할 수 있으며, 여기서 트랜잭션들은 메모리 맵핑된 스위치마다 전파된다. 예컨대, 메모리 맵핑된 스위치들 각각은 어드레스들에 기반하여 트랜잭션들을 동적으로 라우팅할 수 있다. 트랜잭션들은 임의의 주어진 메모리 맵핑된 스위치에서 멈춰질 수 있다. 메모리 맵핑된 인터페이스들(620 및 622)은 디바이스(100)의 다른 서브시스템들이 DPE들(304)의 리소스들(예컨대, 컴포넌트들)에 액세스하게 허용한다.
특정한 실시예들에서, 디바이스(100)의 서브시스템들은 메모리 맵핑된 인터페이스들(620 및/또는 622)을 통해 DPE의 임의의 레지스터 및/또는 메모리 엘리먼트의 내부 상태를 판독할 수 있다. 메모리 맵핑된 인터페이스들(620 및/또는 622)을 통해, 디바이스(100)의 서브시스템들은 프로그램 메모리(608) 및/또는 DPE들(304) 내의 임의의 구성 레지스터들을 판독하고 그리고/또는 그들에 기입할 수 있다.
스트림 인터페이스들(610 내지 616)(예컨대, 스트림 스위치(626))은 보장되고 고정된 레이턴시를 갖는 결정론적 스루풋을 소스로부터 목적지로 제공할 수 있다. 하나 이상의 실시예들에서, 스트림 인터페이스들(610 및 614)은 4개의 32비트 스트림들을 수신하고 4개의 32비트 스트림들을 출력할 수 있다. 하나 이상의 실시예들에서, 스트림 인터페이스(614)는 4개의 32비트 스트림들을 수신하고 6개의 32비트 스트림들을 출력할 수 있다. 특정한 실시예들에서, 스트림 인터페이스(616)는 4개의 32비트 스트림들을 수신하고 4개의 32비트 스트림들을 출력할 수 있다. 각각의 스트림 인터페이스의 스트림들의 수들 및 스트림들의 사이즈들은 예시의 목적들을 위해 제공되며, 제한들로서 의도되지 않는다.
도 8은 도 6의 예시적인 아키텍처의 추가적인 양상들을 예시한다. 도 8의 예에서, DPE 상호연결(606)에 관한 세부사항들은 도시되지 않는다. 도 8은 공유된 메모리를 통한 다른 DPE들과의 코어(602)의 연결을 예시한다. 도 8은 또한 메모리 모듈(604)의 부가적인 양상들을 예시한다. 예시의 목적들을 위해, 도 8은 DPE(304-15)를 참조한다.
도시된 바와 같이, 메모리 모듈(604)은 복수의 메모리 인터페이스들(802, 804, 806, 및 808)을 포함한다. 도 8 내에서, 메모리 인터페이스들(802 및 808)은 "MI"로서 약칭된다. 메모리 모듈(604)은 복수의 메모리 뱅크들(812-1 내지 812-N)을 더 포함한다. 특정한 실시예들에서, 메모리 모듈(604)은 8개의 메모리 뱅크들을 포함한다. 다른 실시예들에서, 메모리 모듈(604)은 더 적거나 더 많은 메모리 뱅크들(812)을 포함할 수 있다. 하나 이상의 실시예들에서, 각각의 메모리 뱅크(812)는 단일-포팅(single-ported)되어, 그에 의해 각각의 클록 사이클마다 각각의 메모리 뱅크에 최대 하나의 액세스를 허용한다. 메모리 모듈(604)이 8개의 메모리 뱅크들(812)을 포함하는 경우, 그러한 구성은 각각의 클록 사이클마다 8개의 병렬 액세스들을 지원한다. 다른 실시예들에서, 각각의 메모리 뱅크(812)는 듀얼-포팅 또는 멀티-포팅되어, 그에 의해 각각의 클록 사이클마다 더 많은 수의 병렬 액세스들을 허용한다.
하나 이상의 실시예들에서, 메모리 모듈(604)은 하나 이상의 에러 검출 및/또는 에러 정정 메커니즘들을 지원할 수 있다. 예컨대, 메모리 뱅크들(812)은 패리티 비트들의 부가를 통해 패리티 검사를 지원하도록 구현될 수 있다. 다른 예에서, 메모리 뱅크들(812)은 다양한 타입들의 데이터 손상을 검출 및 정정할 수 있는 ECC 메모리일 수 있다. 다른 예에서, 메모리 뱅크들(812)은 ECC 및 패리티 검사 둘 모두를 지원할 수 있다. 본 명세서에 설명되는 상이한 타입들의 에러 검출 및/또는 에러 정정은 예시의 목적들을 위해 제공되며, 설명된 실시예들의 제한인 것으로 의도되지 않는다. 다른 에러 검출 및/또는 에러 정정 기술들이 나열된 것들 이외의 메모리 모듈(604)에 사용될 수 있다.
하나 이상의 다른 실시예들에서, 에러 검출 및/또는 에러 정정 메커니즘들은 메모리 뱅크(812)별로 구현될 수 있다. 예컨대, 메모리 뱅크들(812) 중 하나 이상은 패리티 검사를 포함할 수 있는 반면, 메모리 뱅크들(812) 중 하나 이상의 다른 메모리 뱅크들은 ECC 메모리로서 구현될 수 있다. 여전히, 메모리 뱅크들(812) 중 다른 메모리 뱅크들은 ECC 및 패리티 검사 둘 모두를 지원할 수 있다. 이와 같이, 에러 검출 및/또는 에러 정정의 상이한 조합들은 상이한 메모리 뱅크들(812) 및/또는 메모리 뱅크들(812)의 조합들에 의해 지원될 수 있다.
도 8의 예에서, 메모리 뱅크들(812-1 내지 812-N) 각각은 개개의 중재기(arbiter)(814-1 내지 814-N)를 갖는다. 814 각각은 충돌들을 검출하는 것에 대한 응답으로 멈춤 신호를 생성할 수 있다. 각각의 중재기(814)는 중재 로직을 포함할 수 있다. 추가로, 각각의 중재기(814)는 크로스바를 포함할 수 있다. 따라서, 임의의 마스터는 메모리 뱅크들(812) 중 임의의 특정한 하나 이상의 메모리 뱅크들에 기입할 수 있다. 도 6과 관련하여 언급된 바와 같이, 메모리 모듈(604)은 메모리 맵핑된 스위치(632)의 메모리 맵핑된 인터페이스(646)와 통신하는 메모리 맵핑된 인터페이스(도시되지 않음)를 포함할 수 있다. 메모리 모듈(604) 내의 메모리 맵핑된 인터페이스는, 메모리 뱅크(812)를 판독하고 그리고/또는 그에 기입하기 위해 DMA 엔진(816), 메모리 인터페이스들(802, 804, 806, 및 808), 및 중재기들(814)을 커플링시키는, 메모리 모듈(604)의 통신 라인들에 연결될 수 있다.
메모리 모듈(604)은 DMA(direct memory access) 엔진(816)을 더 포함한다. 하나 이상의 실시예들에서, DMA 엔진(816)은 적어도 2개의 인터페이스들을 포함한다. 예컨대, 하나 이상의 인터페이스들은 DPE 상호연결(606)로부터 입력 데이터 스트림들을 수신하고 수신된 데이터를 메모리 뱅크들(812)에 기입할 수 있다. 하나 이상의 다른 인터페이스들은, 메모리 뱅크들(812)로부터 데이터를 판독하고, DPE 상호연결(606)의 스트림 인터페이스를 통해 데이터를 밖으로 전송할 수 있다. 예컨대, DMA 엔진(816)은 도 6의 스트림 인터페이스(640)를 포함할 수 있다.
메모리 모듈(604)은 복수의 상이한 DPE들에 의해 액세스될 수 있는 공유된 메모리로서 동작할 수 있다. 도 8의 예에서, 메모리 인터페이스(802)는 코어(602)에 포함된 코어 인터페이스(828)를 통해 코어(602)에 커플링된다. 메모리 인터페이스(802)는 중재기들(814)을 통한 메모리 뱅크들(812)에 대한 액세스를 코어(602)에 제공한다. 메모리 인터페이스(804)는 DPE(304-25)의 코어에 커플링된다. 메모리 인터페이스(804)는 메모리 뱅크들(812)에 대한 액세스를 DPE(304-25)의 코어에 제공한다. 메모리 인터페이스(806)는 DPE(304-16)의 코어에 커플링된다. 메모리 인터페이스(806)는 메모리 뱅크들(812)에 대한 액세스를 DPE(304-16)의 코어에 제공한다. 메모리 인터페이스(808)는 DPE(304-5)의 코어에 커플링된다. 메모리 인터페이스(808)는 메모리 뱅크들(812)에 대한 액세스를 DPE(304-5)의 코어에 제공한다. 따라서, 도 8의 예에서, DPE(304-15)의 메모리 모듈(604)과의 공유된 경계를 갖는 각각의 DPE는 메모리 뱅크들(812)을 판독하고 그에 기입할 수 있다. 도 8의 예에서, DPE(304-14)의 코어는 DPE(304-15)의 메모리 모듈(604)에 대한 직접적인 액세스를 갖지 않는다.
메모리 맵핑된 스위치(632)는 데이터를 메모리 뱅크들(812)에 기입할 수 있다. 예컨대, 메모리 맵핑된 스위치(632)는, 결국 중재기들(814)에 커플링되는 메모리 모듈(604)에 로케이팅된 메모리 맵핑된 인터페이스(도시되지 않음)에 커플링될 수 있다. 이와 같이, 메모리 모듈(604)에 저장된 특정한 데이터는 구성, 제어, 및/또는 디버깅 프로세스의 일부로서 제어, 예컨대 기입될 수 있다.
코어(602)는 코어 인터페이스들(830, 832, 및 834)을 통해 다른 이웃한 DPE들의 메모리 모듈들에 액세스할 수 있다. 도 8의 예에서, 코어 인터페이스(834)는 DPE(304-25)의 메모리 인터페이스에 커플링된다. 따라서, 코어(602)는 DPE(304-25)의 메모리 모듈 내에 포함된 메모리 인터페이스 및 코어 인터페이스(834)를 통해 DPE(304-25)의 메모리 모듈에 액세스할 수 있다. 코어 인터페이스(832)는 DPE(304-14)의 메모리 인터페이스에 커플링된다. 따라서, 코어(602)는 DPE(304-14)의 메모리 모듈 내에 포함된 메모리 인터페이스 및 코어 인터페이스(832)를 통해 DPE(304-14)의 메모리 모듈에 액세스할 수 있다. 코어 인터페이스(830)는 DPE(304-5) 내의 메모리 인터페이스에 커플링된다. 따라서, 코어(602)는 DPE(304-5)의 메모리 모듈 내에 포함된 메모리 인터페이스 및 코어 인터페이스(830)를 통해 DPE(304-5)의 메모리 모듈에 액세스할 수 있다. 논의된 바와 같이, 코어(602)는 코어 인터페이스(828) 및 메모리 인터페이스(802)를 통해 DPE(304-15) 내의 메모리 모듈(604)에 액세스할 수 있다.
도 8의 예에서, 코어(602)는, DPE(304-15)에서 코어(602)와 경계를 공유하는 DPE들(예컨대, DPE들(304-25, 304-14, 및 304-5))의 메모리 모듈들 중 임의의 메모리 모듈을 판독하고 그에 기입할 수 있다. 하나 이상의 실시예들에서, 코어(602)는 DPE들(304-25, 304-15, 304-14, 및 304-5) 내의 메모리 모듈들을 단일의 연속 메모리로서 볼 수 있다. 코어(602)는 이러한 연속 메모리 모델을 가정하여 판독들 및 기입들을 위한 어드레스들을 생성할 수 있다. 코어(602)는 생성된 어드레스들에 기반하여 판독 및/또는 기입 요청들을 적절한 코어 인터페이스(828, 830, 832, 및/또는 834)에 보낼 수 있다.
하나 이상의 다른 실시예들에서, 메모리 모듈(604)은 다른 DPE들에 커플링될 수 있는 부가적인 메모리 인터페이스들을 포함한다. 예컨대, 메모리 모듈(604)은 DPE들(304-24, 304-26, 304-4, 및/또는 304-5)의 코어들에 커플링된 메모리 인터페이스들을 포함할 수 있다. 하나 이상의 다른 실시예들에서, 메모리 모듈(604)은 이웃한 DPE들이 아닌 DPE들의 코어들에 연결하는 데 사용되는 하나 이상의 메모리 인터페이스들을 포함할 수 있다. 예컨대, 그러한 부가적인 메모리 인터페이스(들)는, 동일한 행, 동일한 열 또는 대각선 방향에서 하나 이상의 다른 DPE들에 의해 DPE(304-15)로부터 분리된 DPE들의 코어들에 연결될 수 있다. 이와 같이, 메모리 모듈(604) 내의 메모리 인터페이스들 및 그러한 메모리 인터페이스들이 도 8에 예시된 바와 같이 연결되는 특정한 DPE들의 수는 제한이 아니라 예시의 목적들을 위한 것이다.
언급된 바와 같이, 코어(602)는 그러한 동작들의 어드레스들에 기반하여 코어 인터페이스(828, 830, 832, 및/또는 834)를 통해 정확한 방향으로 판독 및/또는 기입 동작들을 맵핑할 수 있다. 코어(602)가 메모리 액세스를 위한 어드레스를 생성할 때, 코어(602)는 방향(예컨대, 액세스될 특정한 DPE)을 결정하기 위해 어드레스를 디코딩할 수 있고, 결정된 방향으로 정확한 코어 인터페이스에 메모리 동작을 포워딩한다.
따라서, 코어(602)는, DPE(304-25) 내의 메모리 모듈 및/또는 DPE(304-15)의 메모리 모듈(604)일 수 있는 공유된 메모리를 통해 DPE(304-25)의 코어와 통신할 수 있다. 코어(602)는 DPE(304-14) 내의 메모리 모듈인 공유된 메모리를 통해 DPE(304-14)의 코어와 통신할 수 있다. 코어(602)는, DPE(304-5) 내의 메모리 모듈 및/또는 DPE(304-15)의 메모리 모듈(604)일 수 있는 공유된 메모리를 통해 DPE(304-5)의 코어와 통신할 수 있다. 추가로, 코어(602)는 DPE(304-15) 내의 메모리 모듈(604)인 공유된 메모리를 통해 DPE(304-16)의 코어와 통신할 수 있다.
논의된 바와 같이, DMA 엔진(816)은 하나 이상의 스트림-메모리 인터페이스들(예컨대, 스트림 인터페이스(640))을 포함할 수 있다. DMA 엔진(816)을 통해, 애플리케이션 데이터는 디바이스(100) 내의 다른 소스들로부터 수신되고, 메모리 모듈(604)에 저장될 수 있다. 예컨대, 데이터는 스트림 스위치(626)에 의해 DPE(304-15)와 경계를 공유하거나 그리고/또는 공유하지 않는 다른 DPE들로부터 수신될 수 있다. 데이터는 또한, DPE들의 스트림 스위치들을 통하여 SoC 인터페이스 블록(104)에 의해 디바이스(100)의 다른 서브시스템들(예컨대, NoC(308), 하드와이어링된 회로 블록들, PL(310), 및/또는 PS(312))로부터 수신될 수 있다. DMA 엔진(816)은, 스트림 스위치들로부터 그러한 데이터를 수신하고, 메모리 모듈(604) 내의 메모리 뱅크들(812) 또는 적절한 메모리 뱅크에 데이터를 기입할 수 있다.
DMA 엔진(816)은 하나 이상의 메모리-스트림 인터페이스들(예컨대, 스트림 인터페이스(630))을 포함할 수 있다. DMA 엔진(816)을 통해, 데이터는 메모리 모듈(604)의 메모리 뱅크 또는 메모리 뱅크들(812)로부터 판독되고, 스트림 인터페이스들을 통해 다른 목적지들로 전송될 수 있다. 예컨대, DMA 엔진(816)은, 메모리 모듈(604)로부터 데이터를 판독하고, 스트림 스위치들에 의해 DPE(304-15)와 경계를 공유하거나 그리고/또는 공유하지 않는 다른 DPE들에 그러한 데이터를 전송할 수 있다. DMA 엔진(816)은 또한, 스트림 스위치들 및 SoC 인터페이스 블록(104)에 의해 다른 서브시스템들(예컨대, NoC(308), 하드와이어링된 회로 블록들, PL(310), 및/또는 PS(312))에 그러한 데이터를 전송할 수 있다.
하나 이상의 실시예들에서, DMA 엔진(816)은 DPE(304-15) 내의 메모리 맵핑된 스위치(632)에 의해 프로그래밍될 수 있다. 예컨대, DMA 엔진(816)은 구성 레지스터들(636)에 의해 제어될 수 있다. 구성 레지스터들(636)은 DPE 상호연결(606)의 메모리 맵핑된 스위치(632)를 사용하여 기입될 수 있다. 특정한 실시예들에서, DMA 엔진(816)은 DPE(304-15) 내의 스트림 스위치(626)에 의해 제어될 수 있다. 예컨대, DMA 엔진(816)은, (예컨대, 스트림 인터페이스(640)를 통하여) 제어 레지스터들에 연결된 스트림 스위치(626)에 의해 기입될 수 있는 제어 레지스터들을 포함할 수 있다. DPE 상호연결(606) 내의 스트림 스위치(626)를 통해 수신된 스트림들은, 구성 레지스터들(624, 634, 및/또는 636)에 로딩된 구성 데이터에 의존하여 메모리 모듈(604) 내의 DMA 엔진(816)에 그리고/또는 직접 코어(602)에 연결될 수 있다. 스트림들은, 구성 레지스터들(624, 634, 및/또는 636)에 로딩된 구성 데이터에 의존하여 DMA 엔진(816)(예컨대, 메모리 모듈(604)) 및/또는 코어(602)로부터 전송될 수 있다.
메모리 모듈(604)은 하드웨어 동기화 회로부(820)(도 8에서 "HSC"로 약칭됨)를 더 포함할 수 있다. 일반적으로, 하드웨어 동기화 회로부(820)는, DPE 상호연결(606)을 통해 통신할 수 있는 상이한 코어들(예컨대, 이웃한 DPE들의 코어들), 도 8의 코어(602), DMA 엔진(816), 및 다른 외부 마스터들(예컨대, PS(312))의 동작을 동기화시킬 수 있다. 예시적이고 비-제한적인 예로서, 하드웨어 동기화 회로부(820)는 메모리 모듈(604) 내의 동일한, 예컨대 공유된 버퍼에 액세스하는 상이한 DPE들에서 2개의 상이한 코어들을 동기화시킬 수 있다.
하나 이상의 실시예들에서, 하드웨어 동기화 회로부(820)는 복수의 상이한 록(lock)들을 포함할 수 있다. 하드웨어 동기화 회로부(820)에 포함된 록들의 특정한 수는 메모리 모듈들에 액세스할 수 있는 엔티티들의 수에 의존할 수 있지만 제한으로서 의도되지 않는다. 특정한 실시예들에서, 각각의 상이한 하드웨어 록은 동시 요청들을 핸들링할 수 있는 중재기를 가질 수 있다. 추가로, 각각의 하드웨어 록은 각각의 클록 사이클마다 새로운 요청을 핸들링할 수 있다. 하드웨어 동기화 회로부(820)는, 코어(602), DPE들(304-25, 304-16, 및 304-5) 각각으로부터의 코어, DMA 엔진(816), 및/또는 DPE 상호연결(606)을 통해 통신하는 마스터와 같은 복수의 요청기들을 가질 수 있다. 예컨대, 요청기는 메모리의 일부에 액세스하기 전에 로컬 하드웨어 동기화 회로부로부터 메모리 모듈 내의 메모리의 특정한 부분에 대한 록을 획득한다. 요청기는, 다른 요청기가 메모리의 동일한 부분에 액세스하기 전에 록을 획득할 수 있도록 록을 해제할 수 있다.
하나 이상의 실시예들에서, 하드웨어 동기화 회로부(820)는 메모리 모듈(604) 및 더 구체적으로는 메모리 뱅크들(812)에 대한 복수의 코어들에 의한 액세스를 동기화시킬 수 있다. 예컨대, 하드웨어 동기화 회로부(820)는 도 8의 메모리 모듈(604)에 대한, 도 8에 예시된 코어(602), DPE(304-25)의 코어, DPE(304-16)의 코어, 및 DPE(304-5)의 코어의 액세스를 동기화시킬 수 있다. 특정한 실시예들에서, 하드웨어 동기화 회로부(820)는, 메모리 인터페이스들(802, 804, 806, 및/또는 808)을 통해 메모리 모듈(604)에 직접 액세스할 수 있는 임의의 코어들에 대한 메모리 뱅크들(812)에 대한 액세스를 동기화시킬 수 있다. 예컨대, 메모리 모듈(604)에 액세스할 수 있는 각각의 코어(예컨대, 도 8의 코어(602) 및 이웃한 DPE들 중 하나 이상의 DPE들의 코어)는, 메모리 모듈(604) 내의 메모리의 특정한 부분에 액세스하기 전에 록을 요청 및 획득하고, 후속하여, 코어가 록을 획득한 메모리의 일부에 1회 다른 코어가 액세스하게 허용하기 위해 록을 해제하도록 하드웨어 동기화 회로부(820)에 액세스할 수 있다. 유사한 방식으로, 코어(602)는, 각각의 개개의 DPE의 메모리 모듈 내의 메모리의 일부에 액세스하기 위해 록을 요청 및 획득하고, 후속하여 록을 해제하도록 하드웨어 동기화 회로부(820), DPE(304-14) 내의 하드웨어 동기화 회로부, DPE(304-25) 내의 하드웨어 동기화 회로부, 및 DPE(304-5) 내의 하드웨어 동기화 회로부에 액세스할 수 있다. 하드웨어 동기화 회로부(820)는 DPE들의 메모리 모듈들에 대한 액세스를 조절하고 동기화시킴으로써 DPE들 사이의 공유된 메모리의 동작을 효과적으로 관리한다.
하드웨어 동기화 회로부(820)는 또한, DPE 상호연결(606)의 메모리 맵핑된 스위치(632)를 통해 액세스될 수 있다. 하나 이상의 실시예들에서, 록 트랜잭션은 리소스에 대한 미세한(atomic) 획득(예컨대, 언록(unlock)하고 록을 세팅할지의 테스트) 및 해제(예컨대, 록을 세팅하지 않음) 동작으로서 구현된다. 하드웨어 동기화 회로부(820)의 록들은 2개의 참여자들 사이의 리소스의 소유권을 효율적으로 전달하기 위한 방식을 제공한다. 리소스는 로컬 메모리 내의 버퍼(예컨대, 메모리 모듈(604) 내의 버퍼)와 같은 다양한 회로 컴포넌트들 중 임의의 회로 컴포넌트일 수 있다.
하드웨어 동기화 회로부(820)가 공유된 메모리를 통한 통신을 지원하기 위해 메모리에 대한 액세스를 동기화시킬 수 있지만, 하드웨어 동기화 회로부(820)는 또한, 다른 DPE들 및/또는 다른 코어들을 포함하는 다양한 다른 리소스들 및/또는 에이전트들 중 임의의 것을 동기화시킬 수 있다. 예컨대, 하드웨어 동기화 회로부(820)가 록들의 공유된 풀(pool)을 제공하므로, 록들은 다른 DPE 또는 코어의 동작을 시작하고 그리고/또는 중지하기 위해 DPE, 예컨대 DPE의 코어에 의해 사용될 수 있다. 하드웨어 동기화 회로부(820)의 록들은, DPE 어레이(102)에 의해 구현되는 특정한 애플리케이션(들)에 의존하여 요구될 수 있는 바와 같이, 상이한 에이전트들 및/또는 리소스들을 동기화시키는 것과 같은 상이한 목적들을 위해, 예컨대 구성 데이터에 기반하여 할당될 수 있다.
특정한 실시예들에서, 하드웨어 동기화 회로부(820)의 록들에 대한 DPE 액세스 및 DMA 액세스가 차단된다. 그러한 액세스들은, 록이 즉시 획득될 수 없는 경우들에서 요청 코어 또는 DMA 엔진을 멈출 수 있다. 일단 하드웨어 록이 이용가능하게 되면, 코어 또는 DMA 엔진은 록을 획득하고, 자동으로 멈춤해제된다.
일 실시예에서, 메모리 맵핑된 액세스들은 차단되지 않을 수 있어서, 메모리 맵핑된 마스터는 하드웨어 동기화 회로부(820)의 록들의 상황을 폴링(poll)할 수 있다. 예컨대, 메모리 맵핑된 스위치는 정상 메모리 판독 동작으로서 록 "획득" 요청을 하드웨어 동기화 회로부(820)에 전송할 수 있다. 판독 어드레스는 록 식별자 및 다른 요청 데이터를 인코딩할 수 있다. 판독 데이터, 예컨대 판독 요청에 대한 응답은 획득 요청 동작의 성공을 시그널링할 수 있다. 메모리 판독으로서 전송된 "획득"은 성공할 때까지 루프로 전송될 수 있다. 다른 예에서, 하드웨어 동기화 회로부(820)는, 요청된 록의 상황이 변화될 때 메모리 맵핑된 마스터가 인터럽트를 수신하도록 이벤트를 발행할 수 있다.
따라서, 2개의 이웃한 DPE들이 메모리 모듈(604)을 통해 데이터 버퍼를 공유할 때, 버퍼를 포함하는 특정한 메모리 모듈(604) 내의 하드웨어 동기화 회로부(820)는 액세스들을 동기화시킨다. 통상적으로, 반드시 그러한 것은 아니지만, 메모리 블록은 스루풋을 개선시키기 위해 이중 버퍼링될 수 있다.
2개의 DPE들이 이웃들이 아닌 경우, 2개의 DPE들은 공통 메모리 모듈에 대한 액세스를 갖지 않는다. 그 경우, 애플리케이션 데이터는 데이터 스트림을 통해 전달될 수 있다(용어들 "데이터 스트림" 및 "스트림"은 본 개시내용 내에서 때때로 상호교환가능하게 사용될 수 있음). 이와 같이, 로컬 DMA 엔진은 전달을 로컬 메모리 기반 전달로부터 스트림-기반 전달로 변환할 수 있다. 그 경우, 코어(602) 및 DMA 엔진(816)은 하드웨어 동기화 회로부(820)를 사용하여 동기화할 수 있다.
코어(602)는 추가로, 공유된 메모리들에 의한 통신을 용이하게 하기 위해, 이웃한 DPE들의 하드웨어 동기화 회로부, 예컨대 하드웨어 동기화 회로부의 록들에 액세스할 수 있다. 이와 같이, 그러한 다른 또는 이웃한 DPE들 내의 하드웨어 동기화 회로부는 이웃한 DPE들의 코어들 사이의 리소스들, 예컨대 메모리에 대한 액세스를 동기화시킬 수 있다.
PS(312)는 메모리 맵핑된 스위치(632)를 통해 코어(602)와 통신할 수 있다. 예컨대, PS(312)는 메모리 판독들 및 기입들을 개시함으로써 메모리 모듈(604) 및 하드웨어 동기화 회로부(820)에 액세스할 수 있다. 다른 실시예에서, 하드웨어 동기화 회로부(820)는 또한, 하드웨어 동기화 회로부(820)의 PS(312)에 의한 폴링을 피하기 위해 록 상황이 변화될 때, 인터럽트를 PS(312)에 전송할 수 있다. PS(312)는 또한, 스트림 인터페이스들을 통해 DPE(304-15)와 통신할 수 있다.
메모리 맵핑된 요청들 및/또는 전달들을 전송하는 엔티티들에 관해 본 명세서에서 제공된 예들은 제한이 아니라 예시의 목적들을 위한 것이다. 특정한 실시예들에서, DPE 어레이(102) 외부에 있는 임의의 엔티티는 메모리 맵핑된 요청들 및/또는 전달들을 전송할 수 있다. 예컨대, DPE 어레이(102) 외부에 있는, 본 명세서에 설명된 바와 같은, PL(310), ASIC, 또는 다른 회로부에서 구현된 회로 블록은 메모리 맵핑된 요청들 및/또는 전달들을 DPE들(304)에 전송하고, 그러한 DPE들 내의 메모리 모듈(들)의 하드웨어 동기화 회로부에 액세스할 수 있다.
공유된 메모리 모듈들을 통해 이웃한 DPE들과 그리고 DPE 상호연결(606)을 통해 이웃한 그리고/또는 이웃하지 않은 DPE들과 통신하는 것에 부가하여, 코어(602)는 캐스케이드 인터페이스들을 포함할 수 있다. 도 8의 예에서, 코어(602)는 캐스케이드 인터페이스들(822 및 824)(도 8에서 "CI"로 약칭됨)을 포함한다. 캐스케이드 인터페이스들(822 및 824)은 다른 코어들과의 직접적인 통신을 제공할 수 있다. 도시된 바와 같이, 코어(602)의 캐스케이드 인터페이스(822)는 DPE(304-14)의 코어로부터 직접 입력 데이터 스트림을 수신한다. 캐스케이드 인터페이스(822)를 통해 수신된 데이터 스트림은 코어(602) 내의 데이터 프로세싱 회로부에 제공될 수 있다. 코어(602)의 캐스케이드 인터페이스(824)는 DPE(304-16)의 코어에 직접 출력 데이터 스트림을 전송할 수 있다.
도 8의 예에서, 캐스케이드 인터페이스(822) 및 캐스케이드 인터페이스(824) 각각은 버퍼링을 위한 FIFO(first-in-first-out) 인터페이스를 포함할 수 있다. 특정한 실시예들에서, 캐스케이드 인터페이스들(822 및 824)은 폭이 수백 비트들일 수 있는 데이터 스트림들을 전달할 수 있다. 캐스케이드 인터페이스들(822 및 824)의 특정한 비트 폭은 제한으로서 의도되지 않는다. 도 8의 예에서, 캐스케이드 인터페이스(824)는 코어(602) 내의 누적기 레지스터(836)(도 8 내에서 "AC"로 약칭됨)에 커플링된다. 캐스케이드 인터페이스(824)는 누적기 레지스터(836)의 콘텐츠들을 출력할 수 있으며, 또한 각각의 클록 사이클마다 이를 행할 수 있다. 누적기 레지스터(836)는, 코어(602) 내의 데이터 프로세싱 회로부에 의해 생성 및/또는 동작되는 데이터를 저장할 수 있다.
도 8의 예에서, 캐스케이드 인터페이스들(822 및 824)은 구성 레지스터들(624)에 로딩된 구성 데이터에 기반하여 프로그래밍될 수 있다. 예컨대, 구성 레지스터들(624)에 기반하여, 캐스케이드 인터페이스(822)는 활성화 또는 비활성화될 수 있다. 유사하게, 구성 레지스터들(624)에 기반하여, 캐스케이드 인터페이스(824)는 활성화 또는 비활성화될 수 있다. 캐스케이드 인터페이스(822)는 캐스케이드 인터페이스(824)와 독립적으로 활성화 및/또는 비활성화될 수 있다.
하나 이상의 다른 실시예들에서, 캐스케이드 인터페이스들(822 및 824)은 코어(602)에 의해 제어된다. 예컨대, 코어(602)는 캐스케이드 인터페이스들(822 및/또는 824)에 대한 판독/기입을 위한 명령들을 포함할 수 있다. 다른 예에서, 코어(602)는 캐스케이드 인터페이스들(822 및/또는 824)을 판독하고 그리고/또는 그에 기입할 수 있는 하드와이어링된 회로부를 포함할 수 있다. 특정한 실시예들에서, 캐스케이드 인터페이스들(822 및 824)은 코어(602) 외부의 엔티티에 의해 제어될 수 있다.
본 개시내용 내에서 설명된 실시예들 내에서, DPE들(304)은 캐시 메모리들을 포함하지 않는다. 캐시 메모리들을 생략함으로써, DPE 어레이(102)는 예측가능한, 예컨대 결정론적 성능을 달성할 수 있다. 추가로, 상이한 DPE들에 로케이팅된 캐시 메모리들 사이에서 코히런시(coherency)를 유지하는 것이 요구되지 않으므로, 상당한 프로세싱 오버헤드가 회피된다.
하나 이상의 실시예들에 따르면, DPE들(304)의 코어들(602)은 입력 인터럽트들을 갖지 않는다. 따라서, DPE들(304)의 코어들(602)은 인터럽트되지 않으면서 동작할 수 있다. DPE들(304)의 코어들(602)에 대한 입력 인터럽트들을 생략하는 것은 또한, DPE 어레이(102)가 예측가능한, 예컨대 결정론적 성능을 달성하게 허용한다.
하나 이상의 DPE들(304)이 외부 판독-기입(예컨대, DDR) 메모리 내의 공유된 버퍼를 통해 PS(312), PL(310), 하드와이어링된 회로 블록, 및/또는 디바이스(100)의 다른 서브시스템(예컨대, ASIC)에서 구현된 외부 에이전트와 통신하는 경우들에서, 코히런시 메커니즘들이 PS(312)에서 코히런시 상호연결을 사용하여 구현될 수 있다. 이들 시나리오들에서, DPE 어레이(102)와 외부 에이전트 사이에서의 애플리케이션 데이터 전달은 NoC(308) 및/또는 PL(310) 둘 모두를 횡단할 수 있다.
하나 이상의 실시예들에서, DPE 어레이(102)는 하나 이상의 DPE들의 복수의 그룹들로 기능적으로 격리될 수 있다. 예컨대, 특정 메모리 인터페이스들은 DPE들의 하나 이상의 그룹들을 생성하도록 구성 데이터를 통해 인에이블링 및/또는 디스에이블링될 수 있으며, 여기서 각각의 그룹은 DPE 어레이(102)의 DPE들 중 하나 이상(예컨대, 서브세트)을 포함한다. 다른 예에서, 스트림 인터페이스들은, 그룹 내의 DPE들의 다른 코어들과 그리고/또는 지정된 입력 소스 및/또는 출력 목적지와 통신하도록 그룹마다 독립적으로 구성될 수 있다.
하나 이상의 실시예들에서, 코어(602)는 메모리 맵핑된 인터페이스들을 통해 디버그 기능들을 지원할 수 있다. 논의된 바와 같이, 프로그램 메모리(608), 메모리 모듈(604), 코어(602), DMA 엔진(816), 스트림 스위치(626), 및 DPE들의 다른 컴포넌트들이 메모리 맵핑된다. 메모리 맵핑된 레지스터들은 메모리 맵핑된 요청들을 생성할 수 있는 임의의 소스, 이를테면 예컨대, PS(312), PL(310), 및/또는 IC 내의 플랫폼 관리 제어기에 의해 판독 및/또는 기입될 수 있다. 요청들은 SoC 인터페이스 블록(104)을 통해 DPE 어레이(102) 내의 의도된 또는 타겟팅된 DPE로 이동될 수 있다.
DPE 내의 메모리 맵핑된 스위치를 통해, 코어를 중단시키는 것, 코어를 재개하는 것, 코어를 단일-스텝핑하는 것, 및/또는 코어를 리세팅하는 것과 같은 기능들이 수행될 수 있다. 추가로, 그러한 동작들은 복수의 상이한 DPE들에 대해 개시될 수 있다. 수행될 수 있는 다른 예시적인 디버그 동작들은, 예컨대 본 명세서에 설명된 메모리 맵핑된 인터페이스들을 통해 하드웨어 동기화 회로부(820) 및/또는 DMA 엔진(816)의 상황을 판독하는 것 및/또는 그들의 상태를 세팅하는 것을 포함한다.
하나 이상의 실시예들에서, DPE들의 스트림 인터페이스들은 DPE 어레이(102)로부터 출력될 수 있는 트레이스(trace) 정보를 생성할 수 있다. 예컨대, 스트림 인터페이스들은 DPE 어레이(102)로부터 트레이스 정보를 추출하도록 구성될 수 있다. 트레이스 정보는, 이벤트 발생들 및/또는 실행 흐름의 제한된 분기 트레이스를 마킹하는 시간-스탬핑된 데이터를 포함하는 패킷-스위칭 스트림들로서 생성될 수 있다. 일 양상에서, DPE들에 의해 생성된 트레이스들은 SoC 인터페이스 블록(104) 및 NoC(308)를 사용하여, PL(310)에서 구현된 로컬 트레이스 버퍼에 또는 외부 RAM에 푸시(push)될 수 있다. 다른 양상에서, DPE들에 의해 생성된 트레이스들은 온-칩으로 구현된 디버깅 서브시스템에 전송될 수 있다.
특정한 실시예들에서, 각각의 DPE의 각각의 코어(602) 및 메모리 모듈(604)은, 스트림 스위치(626)에 직접 트레이스 데이터를 출력할 수 있는 부가적인 스트림 인터페이스를 포함할 수 있다. 트레이스 데이터에 대한 스트림 인터페이스들이 이미 논의된 스트림 인터페이스들에 부가하여 존재할 수 있다. 스트림 스위치(626)는 트레이스 데이터를 패킷-스위칭 스트림으로 보내서, 상이한 DPE들의 다수의 코어들 및 메모리 모듈들로부터의 트레이스 정보가 단일 데이터 스트림 상에서 이동될 수 있도록 구성될 수 있다. 언급된 바와 같이, DPE 상호연결 네트워크의 스트림 부분은, PL(310)을 통해 온-칩 디버깅 시스템에, SoC 인터페이스 블록(104)을 통해 외부 메모리에, 또는 NoC(308)를 통해 기가비트 트랜시버들에 직접 트레이스 데이터를 전송하도록 구성될 수 있다. 생성될 수 있는 상이한 타입들의 트레이스 스트림들의 예들은, PC(program counter)의 각각의 변화와 반대로 분기 명령들에서 PC 값을 생성하는 PC 트레이스 스트림들, 및 (예컨대, 개개의 트레이스 데이터 스트림들을 통해 코어들 및/또는 메모리 모듈들로부터의) 중간 결과들을 DPE들 내에 포함하는 애플리케이션 데이터 트레이스 스트림들을 포함한다.
도 9는 복수의 DPE들 내의 코어들의 캐스케이드 인터페이스들의 예시적인 연결을 예시한다. 도 9의 예에서, DPE들의 코어들(602)만이 예시된다. DPE들의 다른 부분들, 이를테면 DPE 상호연결 및 메모리 모듈은 예시의 목적을 위해 생략된다.
도시된 바와 같이, 코어들은 도 8과 관련하여 설명된 캐스케이드 인터페이스들에 의해 직렬로 연결된다. 코어(602-1)는 코어(602-2)에 커플링되고, 코어(602-2)는 코어(602-3)에 커플링되고, 코어(602-3)는 코더(602-4)에 커플링된다. 따라서, 애플리케이션 데이터는 코어(602-1)로부터 코어(602-2), 코어(602-3), 코어(602-4)로 직접 전파될 수 있다. 코어(602-4)는 다음 위의 행에 있는 코어(602-8)에 커플링된다. 코어(602-8)는 코어(602-7)에 커플링되고, 코어(602-7)는 코어(602-6)에 커플링되고, 코어(602-6)는 코더(602-5)에 커플링된다. 따라서, 애플리케이션 데이터는 코어(602-4)로부터 코어(608-8), 코어(602-7), 코어(602-6), 코어(602-5)로 직접 전파될 수 있다. 코어(602-5)는 다음 위의 행에 있는 코어(602-9)에 커플링된다. 코어(602-9)는 코어(602-10)에 커플링되고, 코어(602-10)는 코어(602-11)에 커플링되고, 코어(602-11)는 코더(602-12)에 커플링된다. 따라서, 애플리케이션 데이터는 코어(602-5)로부터 코어(602-9), 코어(602-10), 코어(602-11), 코어(602-12)로 직접 전파될 수 있다. 코어(602-12)는 다음 위의 행에 있는 코어(602-16)에 커플링된다. 코어(602-16)는 코어(602-15)에 커플링되고, 코어(602-15)는 코어(602-14)에 커플링되고, 코어(602-14)는 코더(602-13)에 커플링된다. 따라서, 애플리케이션 데이터는 코어(602-12)로부터 코어(608-16), 코어(602-15), 코어(602-14), 코어(602-13)로 직접 전파될 수 있다.
도 9는, DPE들의 코어들의 캐스케이드 인터페이스들이 DPE 어레이 내에서 DPE들의 하나의 행으로부터 DPE들의 다른 행에 어떻게 커플링될 수 있는지를 예시하도록 의도된다. 도시된 코어들(예컨대, DPE들)의 열들 및/또는 행들의 특정한 수는 제한으로서 의도되지 않는다. 도 9는, 캐스케이드 인터페이스들을 사용하는 코어들 사이의 연결들이 "S" 또는 지그-재그 패턴으로 DPE들의 행들의 교번하는 말단들에서 이루어질 수 있다는 것을 예시한다.
DPE 어레이(102)가 DPE들(304)의 2개 이상의 상이한 클러스터들을 구현하는 실시예들에서, DPE들의 제1 클러스터는 캐스케이드 및/또는 스트림 인터페이스들을 통해 DPE들의 제2 클러스터에 커플링되지 않을 수 있다. 예컨대, DPE들의 처음 2개의 행들이 제1 클러스터를 형성하고 DPE들의 두번째 2개의 행들이 제2 클러스터를 형성하면, 코어(602-5)의 캐스케이드 인터페이스는 코어(602-9)의 캐스케이드 입력에 데이터를 전달하지 않도록 디스에이블링되게 프로그래밍될 수 있다.
도 8 및 도 9와 관련하여 설명된 예들에서, 각각의 코어는 입력으로서 동작하는 캐스케이드 인터페이스 및 출력으로서 동작하는 캐스케이드 인터페이스를 갖는 것으로 예시된다. 하나 이상의 다른 실시예들에서, 캐스케이드 인터페이스들은 양방향 인터페이스들로서 구현될 수 있다. 특정한 실시예들에서, 코어들은, 코어들이 캐스케이드 인터페이스들을 통해 위, 아래, 좌측, 및/또는 우측의 다른 코어들과 직접 통신할 수 있도록 부가적인 캐스케이드 인터페이스들을 포함할 수 있다. 언급된 바와 같이, 그러한 인터페이스들은 단방향 또는 양방향일 수 있다.
도 10a, 도 10b, 도 10c, 도 10d, 및 도 10e는 DPE들 사이의 연결의 예들을 예시한다. 도 10a는 공유된 메모리를 사용하는 DPE들 사이의 예시적인 연결을 예시한다. 도 10a의 예에서, 코어(602-15)에서 구현되는 기능 또는 커널(예컨대, DPE 및/또는 DPE 어레이에서 구현되는 사용자 회로 설계)이 동작해서, DPE(304-15) 내의 코어 인터페이스 및 메모리 인터페이스를 사용하여 데이터(1005), 예컨대 애플리케이션 데이터를 메모리 모듈(604-15)에 배치한다. DPE(304-15) 및 DPE(304-16)는 이웃한 DPE들이다. 따라서, 코어(602-16)는 데이터(1005)를 포함하는 버퍼에 대한 메모리 모듈(604-15) 내의 하드웨어 동기화 회로부(도시되지 않음)로부터의 록의 획득에 기반하여 메모리 모듈(604-15)로부터의 데이터(1005)에 액세스할 수 있다. 코어들(602-15 및 602-16)에 의한 메모리 모듈(604-15)에 대한 공유된 액세스는, 코어(602-16)가 애플리케이션 데이터에 대해 동작하도록 데이터가 하나의 메모리로부터 다른 메모리로 물리적으로 전달될 필요가 없으므로 고속 트랜잭션 프로세싱을 용이하게 한다.
도 10b는 스트림 스위치들을 사용하는 DPE들 사이의 예시적인 연결을 예시한다. 도 10b의 예에서, DPE(304-15 및 304-17)는 이웃하지 않은 DPE들이며, 그러므로 하나 이상의 개재 DPE들에 의해 분리된다. 코어(602-15)에서 구현되는 기능 또는 커널이 동작해서, 데이터(1005)를 메모리 모듈(604-15)에 배치한다. 메모리 모듈(604-15)의 DMA 엔진(816-15)은 데이터(1005)를 메모리 모듈(604-15) 내에 저장하는 데 사용되는 버퍼에 대한 록의 획득에 기반하여 데이터(1005)를 리트리브한다. DMA 엔진(816-15)은 DPE 상호연결들의 스트림 스위치들을 통해 데이터(1005)를 DPE(304-17)에 전송한다. 메모리 모듈(604-17) 내의 DMA 엔진(816-17)은 DPE(304-17) 내의 스트림 스위치로부터 데이터(1005)를 리트리브하며, 메모리 모듈(604-17) 내의 버퍼에 대한 메모리 모듈(604-17) 내의 하드웨어 동기화 회로부로부터 록을 획득한 이후, 메모리 모듈(604-17)의 버퍼 내에 데이터(1005)를 저장할 수 있다. 도 10b에 예시된 연결은, 설명된 바와 같이 동작하도록 DPE들(304-15 및 304-17) 내의 개개의 스트림 스위치들 및 DMA 엔진들(816-15 및 816-17)을 구성하도록 구성 데이터를 로딩함으로써 프로그래밍될 수 있다.
도 10c는 스트림 스위치들을 사용하는 DPE들 사이의 연결의 다른 예를 예시한다. 도 10c의 예에서, DPE(304-15 및 304-17)는 이웃하지 않은 DPE들이며, 그러므로 하나 이상의 개재 DPE들에 의해 분리된다. 도 10c는, 데이터(1005)가 DMA(816-15)로부터 스트림 스위치를 통해 직접 다른 DPE의 코어에 제공될 수 있다는 것을 예시한다. 도시된 바와 같이, DMA(816-15)는 DPE(304-15)의 스트림 스위치 상에 데이터(1005)를 배치한다. 코어(602-17)는, 데이터(1005)가 메모리 모듈(604-17)로 횡단하지 않으면서, 내부에 포함된 스트림 인터페이스를 사용하여 DPE(304-17) 내의 스트림 스위치로부터 직접 데이터(1005)를 수신할 수 있다. 도 10c에 예시된 연결은, 설명된 바와 같이 동작하도록 DPE들(304-15 및 304-17)의 개개의 스트림 스위치들 및 DMA(816-15)를 구성하도록 구성 데이터를 로딩함으로써 프로그래밍될 수 있다.
일반적으로, 도 10c는 데이터의 DMA-코어 전달의 일 예를 예시한다. 데이터의 코어-DMA 전달이 또한 구현될 수 있다는 것을 인식해야 한다. 예컨대, 코어(602-17)는 내부에 포함된 스트림 인터페이스 및 DPE(304-17)의 스트림 스위치를 통해 데이터를 DPE(304-15)에 전송할 수 있다. DMA 엔진(816-15)은 DPE(304-15)에 포함된 스트림 스위치로부터 데이터를 가져오고(pulling), 데이터를 메모리 모듈(604-15)에 저장할 수 있다.
도 10d는 스트림 스위치들을 사용하는 DPE들 사이의 연결의 다른 예를 예시한다. 도 10d를 참조하면, 각각이 상이한 이웃하지 않은 DPE들인 코어들(602-15, 602-17, 및 602-19)은 각각의 개개의 DPE의 스트림 인터페이스를 통해 서로 직접 통신할 수 있다. 도 10d의 예에서, 코어(602-15)는 동일한 데이터 스트림을 코어(602-17) 및 코어(602-19)에 브로드캐스팅할 수 있다. 코어들(602-15, 602-17, 및 602-19)을 포함하는 각각의 개개의 DPE 내의 스트림 인터페이스들이 브로드캐스트 기능은, 설명된 바와 같이 개개의 스트림 스위치들 및/또는 스트림 인터페이스들을 구성하도록 구성 데이터를 로딩함으로써 프로그래밍될 수 있다. 하나 이상의 다른 실시예들에서, 코어(602-15)는 데이터를 다른 DPE들의 코어들에 멀티캐스팅할 수 있다.
도 10e는 스트림 스위치들 및 캐스케이드 인터페이스들을 사용하는 DPE들 사이의 연결의 일 예를 예시한다. 도 10e를 참조하면, DPE(304-15) 및 DPE(304-16)는 이웃한 DPE들이다. 일부 경우들에서, 커널은 다수의 코어들 상에서 구동되도록 분할될 수 있다. 그 경우, 하나의 서브-커널의 중간 누적 결과는 캐스케이드 인터페이스를 통해 다음 코어 내의 서브-커널에 전달될 수 있다.
도 10e의 예에서, 코어(602-15)는 스트림 스위치를 통해 데이터(1005)를 수신하고 데이터(1005)에 대해 동작한다. 코어(602-15)는 중간 결과 데이터(1010)를 생성하며, 내부의 누적 레지스터로부터 캐스케이드 인터페이스를 통해 코어(602-16)에 직접 중간 결과 데이터(1010)를 출력한다. 특정한 실시예들에서, 코어(602-15)의 캐스케이드 인터페이스는 DPE(304-15)의 각각의 클록 사이클마다 누적기 값을 전달할 수 있다. 코어(602-15)에 의해 수신된 데이터(1005)는 DPE 상호연결들 내의 스트림 스위치들을 통해 코어(602-16)로 추가로 전파되어, 코어(602-16)가 데이터(1005)(예컨대, 오리지널 데이터) 및 코어(602-15)에 의해 생성된 중간 결과 데이터(1010) 둘 모두에 대해 동작하게 허용한다.
도 10의 예들에서, 데이터 스트림들의 전송, 데이터 스트림들의 브로드캐스트, 및/또는 데이터 스트림들의 멀티캐스트가 수평 방향으로 예시된다. 데이터 스트림들이 DPE로부터 DPE 어레이 내의 임의의 다른 DPE로 전송, 브로드캐스팅, 및/또는 멀티캐스팅될 수 있다는 것을 인식해야 한다. 이와 같이, 각각의 그러한 DPE에 로딩된 구성 데이터에 기반하여, 의도된 목적지 DPE(들)에 도달하도록 요구될 수 있는 바와 같이, 데이터 스트림은 좌측, 우측, 위, 아래, 및/또는 대각선으로 DPE들에 전송, 브로드캐스팅, 또는 멀티캐스팅될 수 있다.
도 11은 DPE 내의 이벤트 프로세싱 회로부의 일 예를 예시한다. DPE들은 다른 DPE들의 이벤트 프로세싱 회로부에 상호연결된 이벤트 프로세싱 회로부를 포함할 수 있다. 도 11의 예에서, 이벤트 프로세싱 회로부는 코어(602)에서 그리고 메모리 모듈(604) 내에서 구현된다. 코어(602)는 이벤트 브로드캐스트 회로부(1102) 및 이벤트 로직(1104)을 포함할 수 있다. 메모리 모듈(604)은, 이벤트 브로드캐스트 회로부(1106) 및 이벤트 로직(1108)을 포함하는 별개의 이벤트 프로세싱 회로부를 포함할 수 있다.
이벤트 브로드캐스트 회로부(1102)는, 도 11에 예시된 예시적인 DPE 위 및 아래의 이웃한 DPE들의 코어들 각각 내의 이벤트 브로드캐스트 회로부에 연결될 수 있다. 이벤트 브로드캐스트 회로부(1102)는 또한, 도 11에 예시된 예시적인 DPE의 좌측의 이웃한 DPE의 메모리 모듈 내의 이벤트 브로드캐스트 회로부에 연결될 수 있다. 도시된 바와 같이, 이벤트 브로드캐스트 회로부(1102)는 이벤트 브로드캐스트 회로부(1106)에 연결된다. 이벤트 브로드캐스트 회로부(1106)는, 도 11에 예시된 예시적인 DPE 위 및 아래의 이웃한 DPE들의 메모리 모듈들 각각 내의 이벤트 브로드캐스트 회로부에 연결될 수 있다. 이벤트 브로드캐스트 회로부(1106)는 또한, 도 11에 예시된 예시적인 DPE의 우측의 이웃한 DPE의 코어 내의 이벤트 브로드캐스트 회로부에 연결될 수 있다.
이러한 방식으로, DPE들의 이벤트 프로세싱 회로부는 DPE 어레이 내에서 독립적인 이벤트 브로드캐스트 네트워크를 형성할 수 있다. DPE 어레이 내의 이벤트 브로드캐스트 네트워크는 DPE 상호연결 네트워크와 독립적으로 존재할 수 있다. 추가로, 이벤트 브로드캐스트 네트워크는 적합한 구성 데이터를 구성 레지스터들(624 및/또는 636)에 로딩함으로써 개별적으로 구성가능할 수 있다.
도 11의 예에서, 이벤트 브로드캐스트 회로부(1102) 및 이벤트 로직(1104)은 구성 레지스터들(624)에 의해 구성될 수 있다. 이벤트 브로드캐스트 회로부(1106) 및 이벤트 로직(1108)은 구성 레지스터들(636)에 의해 구성될 수 있다. 구성 레지스터들(624 및 636)은 DPE 상호연결(606)의 메모리 맵핑된 스위치를 통해 기입될 수 있다. 도 11의 예에서, 구성 레지스터들(624)은, 코어(602) 내에서 발생하는 특정한 타입들의 이벤트들을 검출하도록 이벤트 로직(1104)을 프로그래밍한다. 구성 레지스터들(624)에 로딩된 구성 데이터는, 예컨대, 복수의 상이한 타입들의 미리 결정된 이벤트들 중 어느 것이 이벤트 로직(1104)에 의해 검출되는지를 결정한다. 이벤트들의 예들은, 코어(602)에 의한 판독 동작들의 시작들 및/또는 종료들, 코어(602)에 의한 기입 동작들의 시작들 및/또는 종료들, 멈춤들, 및 코어(602)에 의해 수행되는 다른 동작들의 발생을 포함할 수 있다(그러나 이에 제한되지 않음). 유사하게, 구성 레지스터들(636)은, 메모리 모듈(604) 내에서 발생하는 특정한 타입들의 이벤트들을 검출하도록 이벤트 로직(1108)을 프로그래밍한다. 이벤트들의 예들은, DMA 엔진(816)에 의한 판독 동작들의 시작들 및/또는 종료들, DMA 엔진(816)에 의한 기입 동작들의 시작들 및/또는 종료들, 멈춤들, 및 메모리 모듈(604)에 의해 수행되는 다른 동작들의 발생을 포함할 수 있다(그러나 이에 제한되지 않음). 구성 레지스터들(636)에 로딩된 구성 데이터는, 예컨대, 복수의 상이한 타입들의 미리 결정된 이벤트들 중 어느 것이 이벤트 로직(1108)에 의해 검출되는지를 결정한다. 이벤트 로직(1104) 및/또는 이벤트 로직(1108)이 DMA 엔진(816), 메모리 맵핑된 스위치(632), 스트림 스위치(626), 메모리 모듈(604)의 메모리 인터페이스들, 코어(602)의 코어 인터페이스들, 코어(602)의 캐스케이드 인터페이스들, 및/또는 DPE들에 로케이팅된 다른 컴포넌트들로부터 비롯되거나 그리고/또는 그들에 관한 이벤트들을 검출할 수 있다는 것을 인식해야 한다.
구성 레지스터들(624)은 추가로 이벤트 브로드캐스트 회로부(1102)를 프로그래밍할 수 있는 반면, 구성 레지스터들(636)은 이벤트 브로드캐스트 회로부(1106)를 프로그래밍할 수 있다. 예컨대, 구성 레지스터들(624)에 로딩된 구성 데이터는, 다른 이벤트 브로드캐스트 회로부들로부터 이벤트 브로드캐스트 회로부(1102)에 의해 수신된 이벤트들 중 어느 것이 또 다른 이벤트 브로드캐스트 회로부들 및/또는 SoC 인터페이스 블록(104)에 전파되는지를 결정할 수 있다. 구성 데이터는 또한, 이벤트 로직(1104)에 의해 내부적으로 생성된 어느 이벤트들이 다른 이벤트 브로드캐스트 회로부들 및/또는 SoC 인터페이스 블록(104)에 전파되는지를 특정할 수 있다.
유사하게, 구성 레지스터들(636)에 로딩된 구성 데이터는, 다른 이벤트 브로드캐스트 회로부들로부터 이벤트 브로드캐스트 회로부(1106)에 의해 수신된 이벤트들 중 어느 것이 또 다른 이벤트 브로드캐스트 회로부들 및/또는 SoC 인터페이스 블록(104)에 전파되는지를 결정할 수 있다. 구성 데이터는 또한, 이벤트 로직(1108)에 의해 내부적으로 생성된 어느 이벤트들이 다른 이벤트 브로드캐스트 회로부들 및/또는 SoC 인터페이스 블록(104)에 전파되는지를 특정할 수 있다.
따라서, 이벤트 로직(1104)에 의해 생성된 이벤트들은 이벤트 브로드캐스트 회로부(1102)에 제공될 수 있고, 다른 DPE들에 브로드캐스팅될 수 있다. 도 11의 예에서, 이벤트 브로드캐스트 회로부(1102)는, 내부적으로 생성되는지 또는 다른 DPE들로부터 수신되는지 간에, 위의 DPE에, 좌측의 DPE에, 그리고 아래의 DPE 또는 SoC 인터페이스 블록(104)에 이벤트들을 브로드캐스팅할 수 있다. 이벤트 브로드캐스트 회로부(1102)는 또한, 메모리 모듈(604) 내의 이벤트 브로드캐스트 회로부(1106)에 이벤트들을 브로드캐스팅할 수 있다.
이벤트 로직(1108)에 의해 생성된 이벤트들은 이벤트 브로드캐스트 회로부(1106)에 제공될 수 있고, 다른 DPE들에 브로드캐스팅될 수 있다. 도 11의 예에서, 이벤트 브로드캐스트 회로부(1106)는, 내부적으로 생성되는지 또는 다른 DPE들로부터 수신되는지 간에, 위의 DPE에, 우측의 DPE에, 그리고 아래의 DPE 또는 SoC 인터페이스 블록(104)에 이벤트들을 브로드캐스팅할 수 있다. 이벤트 브로드캐스트 회로부(1106)는 또한, 코어(602) 내의 이벤트 브로드캐스트 회로부(1102)에 이벤트들을 브로드캐스팅할 수 있다.
도 11의 예에서, 코어들에 로케이팅된 이벤트 브로드캐스트 회로부들은 위 및/또는 아래의 이웃한 DPE들의 코어들에 로케이팅된 이벤트 브로드캐스트 회로부들과 수직으로 통신한다. DPE가 SoC 인터페이스 블록(104) 바로 위에 있는(또는 인접한) 경우, 그 DPE의 코어 내의 이벤트 브로드캐스트 회로부는 SoC 인터페이스 블록(104)과 통신할 수 있다. 유사하게, 메모리 모듈들에 로케이팅된 이벤트 브로드캐스트 회로부는 위 및/또는 아래의 이웃한 DPE들의 메모리 모듈들에 로케이팅된 이벤트 브로드캐스트 회로부와 수직으로 통신한다. DPE가 SoC 인터페이스 블록(104) 바로 위에 있는(예컨대, 인접한) 경우, 그 DPE의 메모리 모듈 내의 이벤트 브로드캐스트 회로부는 SoC 인터페이스 블록(104)과 통신할 수 있다. 이벤트 브로드캐스트 회로부는 추가로, 그러한 이벤트 브로드캐스트 회로부가 다른 DPE에 로케이팅되는지 및/또는 코어 또는 메모리 모듈 내에 로케이팅되는지에 관계없이, 바로 좌측 및/또는 바로 우측의 이벤트 브로드캐스트 회로부와 통신할 수 있다.
일단 구성 레지스터들(624 및 636)이 기입되면, 이벤트 로직(1104 및 1108)은 백그라운드에서 동작할 수 있다. 특정한 실시예들에서, 이벤트 로직(1104)은 코어(602) 내에서 특정한 조건들을 검출하는 것에 대한 응답으로만 이벤트들을 생성하고; 이벤트 로직(1108)은 메모리 모듈(604) 내에서 특정한 조건들을 검출하는 것에 대한 응답으로만 이벤트들을 생성한다.
도 12는 DPE(304)에 대한 다른 예시적인 아키텍처를 예시한다. 도 12의 예에서, DPE(304)는 복수의 상이한 코어들을 포함하며, "클러스터" 타입의 DPE 아키텍처로 지칭될 수 있다. 도 12에서, DPE(304)는 코어들(1202, 1204, 1206, 및 1208)을 포함한다. 코어들(1202 내지 1208) 각각은 코어 인터페이스(1210, 1212, 1214, 및 1216)(도 12에서 "코어 IF"로 약칭됨)를 통해 메모리 풀(1220)에 각각 커플링된다. 코어 인터페이스들(1210 내지 1216) 각각은 크로스바(1224)를 통해 복수의 메모리 뱅크들(1222-1 내지 1222-N)에 커플링된다. 크로스바(1224)를 통해, 코어들(1202 내지 1208) 중 임의의 코어는 메모리 뱅크들(1222-1 내지 1222-N) 중 임의의 메모리 뱅크에 액세스할 수 있다. 이와 같이, 도 12의 예시적인 아키텍처 내에서, 코어들(1202 내지 1208)은 메모리 풀(1220)의 공유된 메모리 뱅크들(1222)을 통해 서로 통신할 수 있다.
하나 이상의 실시예들에서, 메모리 풀(1220)은 32개의 메모리 뱅크들을 포함할 수 있다. 메모리 풀(1220)에 포함된 메모리 뱅크들의 수는 제한이 아니라 예시의 목적들을 위해 제공된다. 다른 실시예들에서, 메모리 풀(1220)에 포함된 메모리 뱅크들의 수는 32보다 크거나 32보다 작을 수 있다.
도 12의 예에서, DPE(304)는 메모리 맵핑된 스위치(1226)를 포함한다. 메모리 맵핑된 스위치(1226)는, 각각의 기본 방향(예컨대, 북쪽, 남쪽, 서쪽, 및 동쪽)의 이웃한 DPE들 내의 메모리 맵핑된 스위치들에 그리고 메모리 풀(1220)에 커플링될 수 있는 복수의 메모리 맵핑된 인터페이스들(도시되지 않음)을 포함한다. 각각의 메모리 맵핑된 인터페이스는 하나 이상의 마스터들 및 하나 이상의 슬레이브들을 포함할 수 있다. 예컨대, 메모리 맵핑된 스위치(1226)는 메모리 맵핑된 인터페이스를 통해 크로스바(1224)에 커플링된다. 메모리 맵핑된 스위치(1226)는 본 개시내용 내에서 다른 예시적인 DPE들과 관련하여 설명된 바와 같이, 구성, 제어, 및 디버깅 데이터를 전달할 수 있다. 이와 같이, 메모리 맵핑된 스위치(1226)는 DPE(304)에 구성 레지스터들(도시되지 않음)을 로딩할 수 있다. 도 12의 예에서, DPE(304)는 스트림 스위치(1232), 코어들(1202 내지 1208), 및 DMA 엔진(1234)의 동작을 제어하기 위한 구성 레지스터들을 포함할 수 있다.
도 12의 예에서, 메모리 맵핑된 스위치(1226)는 4개의 기본 방향들 각각으로 통신할 수 있다. 다른 실시예들에서, 메모리 맵핑된 스위치(1226)는 북쪽 및 남쪽 방향들로만 통신할 수 있다. 다른 실시예들에서, 메모리 맵핑된 스위치(1226)는, 메모리 맵핑된 스위치(1226)가 4개 초과의 다른 엔티티들과 통신하게 허용하여, 그에 의해, 대각 방향들의 다른 DPE들 및/또는 다른 인접하지 않은 DPE들과의 통신을 허용하는 부가적인 메모리 맵핑된 인터페이스들을 포함할 수 있다.
DPE(304)는 또한 스트림 스위치(1232)를 포함한다. 스트림 스위치(1232)는, 각각의 기본 방향(예컨대, 북쪽, 남쪽, 서쪽, 및 동쪽)의 이웃한 DPE들 내의 스트림 스위치들에 그리고 코어들(1202 내지 1208)에 커플링될 수 있는 복수의 스트림 인터페이스들(도시되지 않음)을 포함한다. 각각의 스트림 인터페이스는 하나 이상의 마스터들 및 하나 이상의 슬레이브들을 포함할 수 있다. 스트림 스위치(1232)는 DMA 엔진(1234)에 커플링된 스트림 인터페이스를 더 포함한다.
DMA 엔진(1234)은 인터페이스(1218)를 통해 크로스바(1224)에 커플링된다. DMA 엔진(1234)은 2개의 인터페이스들을 포함할 수 있다. 예컨대, DMA 엔진(1234)은, 메모리 뱅크들(1222) 중 하나 이상으로부터 데이터를 판독하고 데이터를 스트림 스위치(1232) 상에서 전송할 수 있는 메모리-스트림 인터페이스를 포함할 수 있다. DMA 엔진(1234)은 또한, 스트림 스위치(1232)를 통해 데이터를 수신하고 데이터를 메모리 뱅크들(1222) 중 하나 이상 내에 저장할 수 있는 스트림-메모리 인터페이스를 포함할 수 있다. 인터페이스들 각각은 메모리-스트림이든 또는 스트림-메모리이든, 하나의 입력/출력 스트림 또는 다수의 동시적 입력/출력 스트림들을 지원할 수 있다.
도 12의 예시적인 아키텍처는 메모리 맵핑된 스위치(1226) 및 스트림 스위치(1232) 둘 모두를 통한 DPE간 통신을 지원한다. 도시된 바와 같이, 메모리 맵핑된 스위치(1226)는 위, 아래, 좌측 및 우측의 이웃한 DPE의 메모리 맵핑된 스위치와 통신할 수 있다. 유사하게, 스트림 스위치(1232)는 위, 아래, 좌측 및 우측의 이웃한 DPE의 스트림 스위치와 통신할 수 있다.
하나 이상의 실시예들에서, 메모리 맵핑된 스위치(1226) 및 스트림 스위치(1232) 둘 모두는, 애플리케이션 데이터를 공유하기 위해 (이웃한 및 이웃하지 않은 둘 모두의) 다른 DPE들의 코어들 사이에서의 데이터 전달을 지원할 수 있다. 메모리 맵핑된 스위치(1226)는 추가로, DPE(304)를 구성하려는 목적들을 위한 구성, 제어, 및 디버깅 데이터의 전달을 지원할 수 있다. 특정한 실시예들에서, 스트림 스위치(1232)는 애플리케이션 데이터의 전달을 지원하는 반면, 메모리 맵핑된 스위치(1226)는 구성, 제어, 및 디버깅 데이터의 전달만을 지원한다.
도 12의 예에서, 코어들(1202 내지 1208)은 이전에 설명된 바와 같이 캐스케이드 인터페이스들을 통해 직렬로 연결된다. 추가로, 코어(1202)는 도 12의 DPE의 좌측의 이웃한 DPE 내의 최우측 코어의 캐스케이드 인터페이스(예컨대, 출력)에 커플링되는 반면, 코어(1208)는 도 12의 DPE의 우측의 이웃한 DPE 내의 최좌측 코어의 캐스케이드 인터페이스(예컨대, 입력)에 커플링된다. 클러스터 아키텍처를 사용하는 DPE들의 캐스케이드 인터페이스들은 도 9에 예시된 바와 같이 행마다 연결될 수 있다. 하나 이상의 다른 실시예들에서, 코어들(1202 내지 1208) 중 하나 이상은, 수평 캐스케이드 연결들 대신 그리고/또는 수평 캐스케이드 연결들에 부가하여, 위 및/또는 아래의 이웃한 DPE들 내의 코어들에 캐스케이드 인터페이스들을 통해 연결될 수 있다.
도 12의 예시적인 아키텍처는 본 명세서에 설명된 바와 같이 DPE들을 구현하고 DPE 어레이를 형성하는 데 사용될 수 있다. 도 12의 예시적인 아키텍처는, 본 개시내용 내에서 설명된 다른 예시적인 DPE 아키텍처들과 비교하여 코어들에 이용가능한 메모리의 양을 증가되게 만든다. 따라서, 코어들이 더 많은 양들의 메모리에 대한 액세스를 요구하는 애플리케이션들의 경우, 단일 DPE 내에서 다수의 코어들을 함께 클러스터링하는 도 12의 아키텍처가 사용될 수 있다. 예시의 목적들을 위해, 도 12의 DPE(304)의 구성에 의존하여, 모든 코어들이 사용될 필요가 있지는 않다. 따라서, 하나 이상(예컨대, DPE(304)의 모든 코어들(1202 내지 1208)보다 적음)은 메모리 풀(1220)에 액세스하며, 그렇지 않으면, 도 12의 예의 구성 레지스터들(도시되지 않음)에 로딩되는 구성 데이터에 기반한 경우보다 더 많은 양의 메모리에 대한 액세스를 가질 수 있다.
도 13은 도 1의 DPE 어레이(102)에 대한 예시적인 아키텍처를 예시한다. 도 13의 예에서, SoC 인터페이스 블록(104)은 DPE들(304)과 디바이스(100)의 다른 서브시스템들 사이의 인터페이스를 제공한다. SoC 인터페이스 블록(104)은 DPE들을 디바이스에 통합한다. SoC 인터페이스 블록(104)은, 구성 데이터를 DPE들(304)에 전달하고, DPE들(304)로부터 다른 서브시스템들로 이벤트들을 전달하고, 다른 서브시스템들로부터 DPE들(304)로 이벤트들을 전달하고, 인터럽트들을 생성하여 DPE 어레이(102) 외부의 엔티티들에 전달하고, 다른 서브시스템들과 DPE들(304) 사이에서 애플리케이션 데이터를 전달하며, 그리고/또는 다른 서브시스템들과 DPE들(304) 사이에서 트레이스 및/또는 디버그 데이터를 전달할 수 있다.
도 13의 예에서, SoC 인터페이스 블록(104)은 복수의 상호연결된 타일들을 포함한다. 예컨대, SoC 인터페이스 블록(104)은 타일들(1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 및 1320)을 포함한다. 도 13의 예에서, 타일들(1302 내지 1320)은 행으로 조직화된다. 다른 실시예들에서, 타일들은 열로, 그리드로 또는 다른 레이아웃으로 배열될 수 있다. 예컨대, SoC 인터페이스 블록(104)은 DPE들(304)의 좌측 상에, DPE들(304)의 우측 상에, DPE들(304)의 열들 사이 등에서 타일들의 열로서 구현될 수 있다. 다른 실시예에서, SoC 인터페이스 블록(104)은 DPE 어레이(102) 위에 로케이팅될 수 있다. SoC 인터페이스 블록(104)은, 타일들이 DPE 어레이(102) 아래, DPE 어레이(102)의 좌측, DPE 어레이(102)의 우측, 및/또는 DPE 어레이(102) 위의 임의의 조합으로 로케이팅되도록 구현될 수 있다. 이와 관련하여, 도 13은 제한이 아니라 예시의 목적들을 위해 제공된다.
하나 이상의 실시예들에서, 타일들(1302 내지 1320)은 동일한 아키텍처를 갖는다. 하나 이상의 다른 실시예들에서, 타일들(1302 내지 1320)은 2개 이상의 상이한 아키텍처들을 이용하여 구현될 수 있다. 특정한 실시예들에서, 상이한 아키텍처들은 SoC 인터페이스 블록(104) 내에서 타일들을 구현하는 데 사용될 수 있으며, 여기서 각각의 상이한 타일 아키텍처는 디바이스(100)의 상이한 타입의 서브시스템 또는 서브시스템들의 조합과의 통신을 지원한다.
도 13의 예에서, 타일들(1302 내지 1320)은 데이터가 하나의 타일로부터 다른 타일로 전파될 수 있도록 커플링된다. 예컨대, 데이터는 타일(1302)로부터 타일들(1304, 1306)을 통해 타일들의 라인 아래로 타일(1320)에 전파될 수 있다. 유사하게, 데이터는 타일(1320)로부터 타일(1302)로 역방향으로 전파될 수 있다. 하나 이상의 실시예들에서, 타일들(1302 내지 1320) 각각은 복수의 DPE들에 대한 인터페이스로서 동작할 수 있다. 예컨대, 타일들(1302 내지 1320) 각각은 DPE 어레이(102)의 DPE들(304)의 서브세트에 대한 인터페이스로서 동작할 수 있다. 각각의 타일이 인터페이스를 제공하는 DPE들의 서브세트는, 어떠한 DPE도 SoC 인터페이스 블록(104)의 하나 초과의 타일에 의해 인터페이스를 제공받지 못하도록 상호 배타적일 수 있다.
일 예에서, 타일들(1302 내지 1320) 각각은 DPE들(304)의 열에 대한 인터페이스를 제공한다. 예시의 목적들을 위해, 타일(1302)은 열 A의 DPE들에 대한 인터페이스를 제공한다. 타일(1304)은 열 B의 DPE들에 대한 인터페이스를 제공하는 등의 식이다. 각각의 경우에서, 타일은 DPE들의 열 내의 인접한 DPE(이러한 예에서, 이는 하단 DPE임)에 대한 직접적인 연결을 포함한다. 열 A를 참조하면, 예컨대 타일(1302)은 DPE(304-1)에 직접 연결된다. 열 A 내의 다른 DPE들은 타일(1302)과 통신할 수 있지만, 동일한 열 내의 개재 DPE들의 DPE 상호연결들을 통해 이를 행할 수 있다.
예컨대, 타일(1302)은 다른 소스, 이를테면 PS(312), PL(310), 및/또는 다른 하드와이어링된 회로 블록, 예컨대 ASIC 블록으로부터 데이터를 수신할 수 있다. 타일(1302)은 열 A 내의 DPE들에 어드레싱된 데이터의 이들 부분들을 그러한 DPE들에 제공하면서, 다른 열들 내의 DPE들(예컨대, 타일(1302)이 인터페이스가 아닌 DPE들)에 어드레싱된 데이터를 타일(1304)로 전송할 수 있다. 타일(1304)은 동일하거나 유사한 프로세싱을 수행할 수 있으며, 여기서 열 B 내의 DPE들에 어드레싱된 타일(1302)로부터 수신된 데이터는 그러한 DPE들에 제공되면서, 다른 열들 내의 DPE들에 어드레싱된 데이터를 타일(1306)로 전송하는 등의 식이다.
이러한 방식으로, 데이터는, 데이터가 어드레싱된 DPE들(예컨대, ‘타겟 DPE(들)")에 대한 인터페이스로서 동작하는 타일에 도달할 때까지 SoC 인터페이스 블록(104)의 타일마다 전파될 수 있다. 타겟 DPE(들)에 대한 인터페이스로서 동작하는 타일은, DPE들의 메모리 맵핑된 스위치들 및/또는 DPE들의 스트림 스위치들을 사용하여 데이터를 타겟 DPE(들)로 보낼 수 있다.
언급된 바와 같이, 열들의 사용은 예시적인 구현이다. 다른 실시예들에서, SoC 인터페이스 블록(104)의 각각의 타일은 DPE 어레이(102)의 DPE들의 행에 대한 인터페이스를 제공할 수 있다. DPE들(304)의 열들의 좌측, 우측, 또는 그들 사이에 있든, SoC 인터페이스 블록(104)이 타일들의 열으로서 구현되는 경우들에서 그러한 구성이 사용될 수 있다. 다른 실시예들에서, 각각의 타일이 인터페이스를 제공하는 DPE들의 서브세트는 DPE 어레이(102)의 모든 DPE들보다 적은 DPE들의 임의의 조합일 수 있다. 예컨대, DPE들(304)은 SoC 인터페이스 블록(104)의 타일들에 배분될 수 있다. 그러한 DPE들의 특정한 물리적 레이아웃은 DPE 상호연결들에 의해 설정된 바와 같은 DPE들의 연결에 기반하여 달라질 수 있다. 예컨대, 타일(1302)은 DPE들(304-1, 304-2, 304-11, 및 304-12)에 대한 인터페이스를 제공할 수 있다. SoC 인터페이스 블록(104)의 다른 타일은 4개의 다른 DPE들에 대한 인터페이스를 제공하는 등의 식일 수 있다.
도 14a, 도 14b, 및 도 14c는 SoC 인터페이스 블록(104)의 타일들을 구현하기 위한 예시적인 아키텍처들을 예시한다. 도 14a는 타일(1304)의 예시적인 구현을 예시한다. 도 14a에 예시된 아키텍처는 또한, SoC 인터페이스 블록(104)에 포함된 다른 타일들 중 임의의 타일을 구현하는 데 사용될 수 있다.
타일(1304)은 메모리 맵핑된 스위치(1402)를 포함한다. 메모리 맵핑된 스위치(1402)는 복수의 상이한 방향들 각각에서 통신하기 위한 복수의 메모리 맵핑된 인터페이스들을 포함할 수 있다. 예시적이고 비-제한적인 예로서, 메모리 맵핑된 스위치(1402)는 하나 이상의 메모리 맵핑된 인터페이스들을 포함할 수 있으며, 여기서 메모리 맵핑된 인터페이스는 바로 위의 DPE의 메모리 맵핑된 인터페이스에 수직으로 연결되는 마스터를 갖는다. 이와 같이, 메모리 맵핑된 스위치(1402)는 DPE들 중 하나 이상의 DPE들의 메모리 맵핑된 인터페이스들에 대한 마스터로서 동작할 수 있다. 특정한 예에서, 메모리 맵핑된 스위치(1402)는 DPE들의 서브세트에 대한 마스터로서 동작할 수 있다. 예컨대, 메모리 맵핑된 스위치(1402)는 타일(1304) 위의 DPE들의 열, 예컨대 도 13의 열 B에 대한 마스터로서 동작할 수 있다. 메모리 맵핑된 스위치(1402)가 DPE 어레이(102) 내의 복수의 상이한 회로들(예컨대, DPE들)에 연결되기 위한 부가적인 메모리 맵핑된 인터페이스들을 포함할 수 있다는 것을 인식해야 한다. 메모리 맵핑된 스위치(1402)의 메모리 맵핑된 인터페이스들은 또한, 타일(1304) 위에 로케이팅된 회로부(예컨대, 하나 이상의 DPE(들))와 통신할 수 있는 하나 이상의 슬레이브들을 포함할 수 있다.
도 14a의 예에서, 메모리 맵핑된 스위치(1402)는, 이웃한 타일들(예컨대, 타일들(1302 및 1306)) 내의 메모리 맵핑된 스위치들에 대한 수평 방향으로의 통신을 용이하게 하는 하나 이상의 메모리 맵핑된 인터페이스들을 포함할 수 있다. 예시의 목적들을 위해, 메모리 맵핑된 스위치(1402)는 메모리 맵핑된 인터페이스들을 통해 이웃한 타일들에 수평 방향으로 연결될 수 있으며, 여기서 각각의 그러한 메모리 맵핑된 인터페이스는 하나 이상의 마스터들 및/또는 하나 이상의 슬레이브들을 포함한다. 따라서, 메모리 맵핑된 스위치(1402)는, 타겟 DPE들이 타일(1304) 위의 열에 있든 또는 SoC 인터페이스 블록(104)의 다른 타일이 인터페이스로서 동작하는 다른 서브세트에 있든, 복수의 DPE들 중 정확한 DPE 및/또는 이들의 서브세트에 도달하고 데이터를 그러한 타겟 DPE들에 보내기 위해 하나의 타일로부터 다른 타일로 데이터(예컨대, 구성, 제어, 및/또는 디버그 데이터)를 이동시킬 수 있다. 메모리 맵핑된 트랜잭션들이 NoC(308)로부터 수신되면, 예컨대 메모리 맵핑된 스위치(1402)는 SoC 인터페이스 블록(104) 내의 다른 타일들에 트랜잭션(들)을 수평으로 분배할 수 있다.
메모리 맵핑된 스위치(1402)는 또한, 타일(1304) 내의 구성 레지스터들(1436)에 커플링된 하나 이상의 마스터들 및/또는 슬레이브들을 갖는 메모리 맵핑된 인터페이스를 포함할 수 있다. 메모리 맵핑된 스위치(1402)를 통해, 구성 데이터는 타일(1304) 내의 컴포넌트들에 의해 수행되는 다양한 기능들 및 동작들을 제어하도록 구성 레지스터들(1436)에 로딩될 수 있다. 도 14a, 도 14b 및 도 14c는 구성 레지스터들(1436)과 타일(1304)의 하나 이상의 엘리먼트들 사이의 연결들을 예시한다. 그러나, 구성 레지스터들(1436)이 타일(1304)의 다른 엘리먼트들을 제어하고, 그러므로 그러한 다른 엘리먼트들에 대한 연결들을 가질 수 있지만, 그러한 연결들이 도 14a, 도 14b, 및/또는 도 14c에 예시되지 않는다는 것을 인식해야 한다.
메모리 맵핑된 스위치(1402)는 브리지(1418)를 통해 NoC 인터페이스(들)(1426)에 커플링된 메모리 맵핑된 인터페이스를 포함할 수 있다. 메모리 맵핑된 인터페이스는 하나 이상의 마스터들 및/또는 슬레이브들을 포함할 수 있다. 브리지(1418)는 NoC(308)로부터의 메모리 맵핑된 데이터 전달들(예컨대, 구성, 제어, 및/또는 디버그 데이터)을, 메모리 맵핑된 스위치(1402)에 의해 수신될 수 있는 메모리 맵핑된 데이터로 변환할 수 있다.
타일(1304)은 또한 이벤트 프로세싱 회로부를 포함할 수 있다. 예컨대, 타일(1304)은 이벤트 로직(1432)을 포함한다. 이벤트 로직(1432)은 구성 레지스터들(1436)에 의해 구성될 수 있다. 도 14a의 예에서, 이벤트 로직(1432)은 CDT(Control, debug, and trace) 회로(1420)에 커플링된다. 구성 레지스터들(1436)에 로딩된 구성 데이터는 타일(1304) 내에서 로컬적으로 검출될 수 있는 특정한 이벤트들을 정의한다. 이벤트 로직(1432)은, DMA 엔진(1412), 메모리 맵핑된 스위치(1402), 스트림 스위치(1406), PL 인터페이스(1410) 내에 로케이팅된 FIFO(first-in-first-out) 메모리들, 및/또는 NoC 스트림 인터페이스(1414)로부터 비롯되거나 그리고/또는 그들에 관한 다양한 상이한 이벤트들을 구성 레지스터들(1436) 마다 검출할 수 있다. 이벤트들의 예들은 DMA가 전달을 완료한 것, 록이 해제되는 것, 록이 획득되는 것, PL 전달의 종료, 또는 타일(1304)을 통한 데이터 흐름의 시작 또는 종료에 관한 다른 이벤트들을 포함할 수 있다(그러나 이에 제한되지 않음). 이벤트 로직(1432)은 그러한 이벤트들을 이벤트 브로드캐스트 회로부(1404) 및/또는 CDT 회로(1420)에 제공할 수 있다. 예컨대, 다른 실시예에서, 이벤트 로직(1432)은 CDT 회로(1420)에 대한 직접적인 연결을 갖는 것이 아니라 오히려, 이벤트 브로드캐스트 회로부(1404)를 통한 CDT 회로(1420)에 대한 연결을 가질 수 있다.
타일(1304)은 이벤트 브로드캐스트 회로부(1404) 및 이벤트 브로드캐스트 회로부(1430)를 포함한다. 이벤트 브로드캐스트 회로부(1404) 및 이벤트 브로드캐스트 회로부(1430) 각각은 DPE 어레이(102)의 이벤트 브로드캐스트 네트워크, SoC 인터페이스 블록(104)의 다른 타일들, 및 디바이스(100)의 PL(310) 사이의 인터페이스를 제공한다. 이벤트 브로드캐스트 회로부(1404)는 인접한 또는 이웃한 타일(1302) 내의 이벤트 브로드캐스트 회로부에 그리고 이벤트 브로드캐스트 회로부(1430)에 커플링된다. 이벤트 브로드캐스트 회로부(1430)는 인접한 또는 이웃한 타일(1306) 내의 이벤트 브로드캐스트 회로부에 커플링된다. 하나 이상의 다른 실시예들에서, SoC 인터페이스 블록(104)의 타일들이 그리드 또는 어레이로 배열될 경우, 이벤트 브로드캐스트 회로부(1404) 및/또는 이벤트 브로드캐스트 회로부(1430)는 타일(1304) 위 및/또는 아래의 다른 타일들에 로케이팅된 이벤트 브로드캐스트 회로부에 연결될 수 있다.
도 14a의 예에서, 이벤트 브로드캐스트 회로부(1404)는 타일(1304)에 바로 인접한 DPE, 예컨대 열 B 내의 타일(1304) 바로 위의 DPE(304-2)의 코어 내의 이벤트 브로드캐스트 회로부에 커플링된다. 이벤트 브로드캐스트 회로부(1404)는 또한 PL 인터페이스(1410)에 커플링된다. 이벤트 브로드캐스트 회로부(1430)는 타일(1304)에 바로 인접한 DPE, 예컨대 열 B 내의 타일(1304) 바로 위의 DPE(304-2)의 메모리 모듈 내의 이벤트 브로드캐스트 회로부에 커플링된다. 예시되지 않았지만, 다른 실시예에서, 이벤트 브로드캐스트 회로부(1430)는 또한 PL 인터페이스(1410)에 커플링될 수 있다.
이벤트 브로드캐스트 회로부(1404) 및 이벤트 브로드캐스트 회로부(1430)는, 이벤트 로직(1432)에 의해 내부적으로 생성된 이벤트들, SoC 인터페이스 블록(104)의 다른 타일들로부터 수신된 이벤트들, 및/또는 열 B 내의 DPE들(또는 DPE 어레이(102)의 다른 DPE들)로부터 수신된 이벤트들을 다른 타일들로 전송할 수 있다. 이벤트 브로드캐스트 회로부(1404)는 PL 인터페이스(1410)를 통해 그러한 이벤트들을 PL(310)에 추가로 전송할 수 있다. 다른 예에서, 이벤트들은 PL 인터페이스 블록(1410)을 사용하여, 이벤트 브로드캐스트 회로부(1404)로부터 디바이스(100) 내의 다른 블록들 및/또는 서브시스템들, 이를테면 DPE 어레이(102) 외부에 로케이팅된 ASIC 및/또는 PL 회로 블록들로 전송될 수 있다. 추가로, PL 인터페이스(1410)는 PL(310)로부터 이벤트들을 수신하고, 그러한 이벤트들을 이벤트 브로드캐스트 스위치(1404) 및/또는 스트림 스위치(1406)에 제공할 수 있다. 일 양상에서, 이벤트 브로드캐스트 회로부(1404)는 PL 인터페이스(1410)를 통해 PL(310)로부터 수신된 임의의 이벤트들을, SoC 인터페이스 블록(104)의 다른 타일들에 그리고/또는 열 B 내의 DPE들 및/또는 DPE 어레이(102)의 다른 DPE들에 전송할 수 있다. 다른 예에서, PL(310)로부터 수신된 이벤트들은 이벤트 브로드캐스트 회로부(1404)로부터 디바이스(100) 내의 다른 블록들 및/또는 서브시스템들, 이를테면 ASIC에 전송될 수 있다. 이벤트들이 SoC 인터페이스 블록(104) 내의 타일들 사이에서 브로드캐스팅될 수 있기 때문에, 이벤트들은, SoC 인터페이스 블록(104) 내의 타일들 및 이벤트 브로드캐스트 회로부를 통해 타겟(예컨대, 의도된) DPE들로 횡단함으로써 DPE 어레이(102) 내의 임의의 DPE에 도달할 수 있다. 예컨대, 타일에 의해 관리되는 DPE들(타겟 DPE를 포함함)의 열(또는 서브세트) 아래의 SoC 인터페이스 블록(104)의 타일 내의 이벤트 브로드캐스트 회로부는 이벤트들을 타겟 DPE들로 전파할 수 있다.
도 14a의 예에서, 이벤트 브로드캐스트 회로부(1404) 및 이벤트 로직(1432)은 CDT 회로(1420)에 커플링된다. 이벤트 브로드캐스트 회로부(1404) 및 이벤트 로직(1432)은 이벤트들을 CDT 회로(1420)에 전송할 수 있다. CDT 회로(1420)는 수신된 이벤트들을 패킷화하고, 이벤트 브로드캐스트 회로부(1404) 및/또는 이벤트 로직(1432)으로부터 스트림 스위치(1406)로 이벤트들을 전송할 수 있다. 특정한 실시예들에서, 이벤트 브로드캐스트 회로부(1430)는 스트림 스위치(1406) 및/또는 CDT 회로(1420)에 또한 연결될 수 있다.
하나 이상의 실시예들에서, 이벤트 브로드캐스트 회로부(1404) 및 이벤트 브로드캐스트 회로부(1430)는 도 14a에 예시된 바와 같이, (예를 들어, 도 14a에 도시된 연결들 중 임의의 연결을 통해) 하나 이상 또는 모든 방향들로부터 브로드캐스트 이벤트들을 수집할 수 있다. 특정한 실시예들에서, 이벤트 브로드캐스트 회로부(1404) 및/또는 이벤트 브로드캐스트 회로부(1430)는 신호들의 논리 "OR"을 수행하고, 결과들을 (예컨대, CDT 회로(1420)를 포함하여) 하나 이상 또는 모든 방향들로 포워딩할 수 있다. 이벤트 브로드캐스트 회로부(1404) 및 이벤트 브로드캐스트 회로부(1430)로부터의 각각의 출력은 구성 레지스터들(1436)에 로딩된 구성 데이터에 의해 구성가능한 비트마스크(bitmask)를 포함할 수 있다. 비트마스크는, 어느 이벤트들이 개별적으로 각각의 방향으로 브로드캐스팅되는지를 결정한다. 그러한 비트마스크들은, 예컨대 이벤트들의 원치않거나 중복된 전파를 제거할 수 있다.
인터럽트 핸들러(1434)는 이벤트 브로드캐스트 회로부(1404)에 커플링되며, 이벤트 브로드캐스트 회로부(1404)로부터 브로드캐스팅된 이벤트들을 수신할 수 있다. 하나 이상의 실시예들에서, 인터럽트 핸들러(1434)는, 선택된 이벤트들 및/또는 이벤트 브로드캐스트 회로부(1404)로부터의 이벤트들(예컨대, DPE 생성된 이벤트들, 타일(1304) 내에서 생성된 이벤트들, 및/또는 PL(310) 생성된 이벤트들)의 조합들에 대한 응답으로 인터럽트들을 생성하도록, 구성 레지스터들(1436)에 로딩된 구성 데이터에 의해 구성될 수 있다. 인터럽트 핸들러(1434)는 구성 데이터에 기반하여, PS(312) 및/또는 디바이스(100) 내의 다른 디바이스-레벨 관리 블록들에 대한 인터럽트들을 생성할 수 있다. 이와 같이, 인터럽트 핸들러(1434)는, DPE 어레이(102)에서 발생하는 이벤트들, SoC 인터페이스 블록(104)의 타일들에서 발생하는 이벤트들 및/또는 인터럽트 핸들러(1434)에 의해 생성된 인터럽트(들)에 기반하여 PL(310)에서 발생하는 이벤트들을 PS(312) 및/또는 그러한 다른 디바이스-레벨 관리 블록들에 통지할 수 있다.
특정한 실시예들에서, 인터럽트 핸들러(1434)는 PS(312) 및/또는 다른 디바이스-레벨 관리 블록들의 인터럽트 핸들러 또는 인터럽트 포트에 직접 연결에 의해 커플링될 수 있다. 하나 이상의 다른 실시예들에서, 인터럽트 핸들러(1434)는 다른 인터페이스에 의해 PS(312) 및/또는 다른 디바이스-레벨 관리 블록들에 커플링될 수 있다.
PL 인터페이스(1410)는 디바이스(100)의 PL(310)에 커플링되며, 그에 대한 인터페이스를 제공한다. 하나 이상의 실시예들에서, PL 인터페이스(1410)는 DPE 어레이 클록(들)과 PL 클록 사이의 비동기식 클록-도메인 교차를 제공한다. PL 인터페이스(1410)는 또한, PL 전력 레일(rail)들과의 통합을 위해 레벨 시프터들 및/또는 격리 셀들을 제공할 수 있다. 특정한 실시예들에서, PL 인터페이스(1410)는 백-프레셔(back pressure)를 핸들링하기 위해 FIFO 지원과 함께 32비트, 64비트, 및/또는 128비트 인터페이스를 제공하도록 구성될 수 있다. PL 인터페이스(1410)의 특정한 폭은 구성 레지스터들(1436)에 로딩된 구성 데이터에 의해 제어될 수 있다. 도 14a의 예에서, PL 인터페이스(1410)는 하나 이상의 PL 상호연결 블록들(1422)에 직접 커플링된다. 특정한 실시예들에서, PL 상호연결 블록들(1422)은 PL(310)에 로케이팅된 상호연결 회로부에 커플링된 하드와이어링된 회로 블록들로서 구현된다.
하나 이상의 다른 실시예들에서, PL 인터페이스(1410)는 다른 타입들의 회로 블록들 및/또는 서브시스템들에 커플링된다. 예컨대, PL 인터페이스(1410)는 ASIC, 아날로그/믹싱된 신호 회로부, 및/또는 다른 서브시스템에 커플링될 수 있다. 이와 같이, PL 인터페이스(1410)는 타일(1304)과 그러한 다른 서브시스템들 및/또는 블록들 사이에서 데이터를 전달할 수 있다.
도 14a의 예에서, 타일(1304)은 스트림 스위치(1406)를 포함한다. 스트림 스위치(1406)는 하나 이상의 스트림 인터페이스들을 통해 인접한 또는 이웃한 타일(1302) 내의 스트림 스위치에 그리고 인접한 또는 이웃한 타일(1306) 내의 스트림 스위치에 커플링된다. 각각의 스트림 인터페이스는 하나 이상의 마스터들 및/또는 하나 이상의 슬레이브들을 포함할 수 있다. 특정한 실시예들에서, 이웃한 스트림 스위치들의 각각의 쌍은 하나 이상의 스트림들을 통해 각각의 방향으로 데이터를 교환할 수 있다. 스트림 스위치(1406)는 또한, 하나 이상의 스트림 인터페이스들에 의해 열 B 내의 타일(1304) 바로 위의 DPE, 즉 DPE(304-2) 내의 스트림 스위치에 커플링된다. 논의된 바와 같이, 스트림 인터페이스는 하나 이상의 스트림 슬레이브들 및/또는 스트림 마스터들을 포함할 수 있다. 스트림 스위치(1406)는 또한, 스트림 멀티플렉서/디멀티플렉서(1408)(도 14a에서 스트림 mux/demux로 약칭됨)를 통해 PL 인터페이스(1410), DMA 엔진(1412), 및/또는 NoC 스트림 인터페이스(1414)에 커플링된다. 스트림 스위치(1406)는, 예컨대 스트림 멀티플렉서/디멀티플렉서(1408)를 통해 PL 인터페이스(1410), DMA 엔진(1412), 및/또는 NoC 스트림 인터페이스(1414) 각각과 통신하는 데 사용되는 하나 이상의 스트림 인터페이스들을 포함할 수 있다.
하나 이상의 다른 실시예들에서, 스트림 스위치(1406)는, 포함된 스트림 인터페이스들의 수 및/또는 타일들 및/또는 DPE들 및/또는 타일(1304) 주위의 다른 회로 블록들의 어레인지먼트에 의존하여 다른 방향들로 그리고/또는 대각 방향들로 다른 회로 블록들에 커플링될 수 있다.
하나 이상의 실시예들에서, 스트림 스위치(1406)는 구성 레지스터들(1436)에 로딩된 구성 데이터에 의해 구성가능하다. 스트림 스위치(1406)는, 예컨대 구성 데이터에 기반하여 패킷-스위칭 및/또는 서킷-스위칭 동작을 지원하도록 구성될 수 있다. 추가로, 구성 데이터는, 스트림 스위치(1406)가 통신하는 DPE 어레이(102) 내의 특정한 DPE 및/또는 DPE들을 정의한다. 하나 이상의 실시예들에서, 구성 데이터는, 스트림 스위치(1406)가 통신하는 DPE 어레이(102)의 특정한 DPE 및/또는 DPE들의 서브세트(예컨대, 열 B 내의 DPE들)를 정의한다.
스트림 멀티플렉서/디멀티플렉서(1408)는 PL 인터페이스(1410), DMA 엔진(1412), 및/또는 NoC 스트림 인터페이스(1414)로부터 수신된 데이터를 스트림 스위치(1406)에 보낼 수 있다. 유사하게, 스트림 멀티플렉서/디멀티플렉서(1408)는 스트림 스위치(1406)로부터 수신된 데이터를 PL 인터페이스(1410), DMA 엔진(1412), 및/또는 NoC 스트림 인터페이스(1414)에 보낼 수 있다. 예컨대, 스트림 멀티플렉서/디멀티플렉서(1408)는 선택된 데이터를 PL 인터페이스(1410)에 라우팅하고, 선택된 데이터를 DMA 엔진(1412)에 라우팅하며(여기서, 그러한 데이터는 메모리 맵핑된 트랜잭션들로서 NoC(308)를 통해 전송됨), 그리고/또는 선택된 데이터를 NoC 스트림 인터페이스(1414)에 라우팅하도록(여기서, 데이터는 데이터 스트림 또는 스트림들로서 NoC(308)를 통해 전송됨) 구성 레지스터들(1436)에 저장된 구성 데이터에 의해 프로그래밍될 수 있다.
DMA 엔진(1412)은 선택기 블록(1416)을 통해 NoC(308)로 그리고 NoC 인터페이스(들)(1426) 상으로 데이터를 보내기 위해 마스터로서 동작할 수 있다. DMA 엔진(1412)은 DPE들로부터 데이터를 수신하고, 그러한 데이터를 메모리 맵핑된 데이터 트랜잭션들로서 NoC(308)에 제공할 수 있다. 하나 이상의 실시예들에서, DMA 엔진(1412)은, DMA 엔진(1412)에 포함된 다수의 채널들 및/또는 DMA 엔진(1412) 내의 채널을, 록 요청들을 풀링 및 구동시키는 마스터와 동기화시키는 데 사용될 수 있는 하드웨어 동기화 회로부를 포함한다. 예컨대, 마스터는 PS(312) 또는 PL(310) 내에서 구현된 디바이스일 수 있다. 마스터는 또한, DMA 엔진(1412) 내에서 하드웨어 동기화 회로부에 의해 생성된 인터럽트를 수신할 수 있다.
하나 이상의 실시예들에서, DMA 엔진(1412)은 외부 메모리에 액세스할 수 있다. 예컨대, DMA 엔진(1412)은 DPE들로부터 데이터 스트림들을 수신하고, 데이터 스트림을 외부 메모리로 NoC(308)를 통해, SoC 내에 로케이팅된 메모리 제어기로 전송할 수 있다. 이어서, 메모리 제어기는 데이터 스트림들로서 수신된 데이터를 외부 메모리에 보낸다(예컨대, DMA 엔진(1412)에 의해 요청된 바와 같이 외부 메모리의 판독들 및/또는 기입들을 개시함). 유사하게, DMA 엔진(1412)은 외부 메모리로부터 데이터를 수신할 수 있으며, 여기서 데이터는 SoC 인터페이스 블록(104)의 다른 타일(들)로 그리고/또는 타겟 DPE들까지 분배될 수 있다.
특정한 실시예들에서, DMA 엔진(1412)은, DPE 글로벌 제어 세팅 레지스터들(DPE GCS 레지스터들)(1438)을 사용하여 세팅될 수 있는 보안 비트들을 포함한다. 외부 메모리는 상이한 구역들 또는 파티션들로 분할될 수 있으며, 여기서 DPE 어레이(102)만이 외부 메모리의 특정한 구역들에 액세스하도록 허가된다. DMA 엔진(1412) 내의 보안 비트들은, DPE 어레이(102)가 DMA 엔진(1412)에 의해, 보안 비트들마다 허용되는 외부 메모리의 특정한 구역(들)에만 액세스할 수 있도록 세팅될 수 있다. 예컨대, DPE 어레이(102)에 의해 구현된 애플리케이션은 외부 메모리의 특정한 구역들에만 액세스하도록 제약되거나, 외부 메모리의 특정한 구역들로부터의 판독들로만 제약되거나, 그리고/또는 이러한 메커니즘을 사용하여 외부 메모리로의 기입이 전적으로 제약될 수 있다.
외부 메모리에 대한 액세스를 제어하는 DMA 엔진(1412) 내의 보안 비트들은 DPE 어레이(102)를 전체적으로 제어하도록 구현될 수 있거나 더 세밀한 방식으로 구현될 수 있으며, 여기서 외부 메모리에 대한 액세스는 DPE 마다, 예컨대 코어마다, 또는 조정된 방식으로 동작하도록, 예컨대 커널 및/또는 다른 애플리케이션을 구현하도록 구성되는 코어들의 그룹들에 대해 특정 및/또는 제어될 수 있다.
NoC 스트림 인터페이스(1414)는 NoC 인터페이스(들)(1426)를 통해 NoC(308)로부터 데이터를 수신하고, 데이터를 포워딩하여 멀티플렉서/디멀티플렉서(1408)로 스트리밍할 수 있다. NoC 스트림 인터페이스(1414)는 추가로, 스트림 멀티플렉서/디멀티플렉서(1408)로부터 데이터를 수신하고, 선택기 블록(1416)을 통해 NoC 인터페이스(1426)에 데이터를 포워딩할 수 있다. 선택기 블록(1416)은 DMA 엔진(1412) 또는 NoC 스트림 인터페이스(1414)로부터 NoC 인터페이스(들)(1426) 상으로 데이터를 전달하도록 구성가능하다.
CDT 회로(1420)는 타일(1304) 내에서 제어, 디버그, 및 트레이스 동작들을 수행할 수 있다. 디버그에 관해, 타일(1304)에 로케이팅된 레지스터들 각각은 메모리 맵핑된 스위치(1402)를 통해 액세스가능한 메모리 맵에 맵핑된다. CDT 회로(1420)는 회로부, 이를테면 예컨대, 트레이스 하드웨어, 트레이스 버퍼들, 성능 카운터들, 및/또는 멈춤 로직을 포함할 수 있다. CDT 회로(1420)의 트레이스 하드웨어는 트레이스 데이터를 수집할 수 있다. CDT 회로(1420)의 트레이스 버퍼들은 트레이스 데이터를 버퍼링할 수 있다. CDT 회로(1420)는 추가로, 트레이스 데이터를 스트림 스위치(1406)에 출력할 수 있다.
하나 이상의 실시예들에서, CDT 회로(1420)는 데이터, 예컨대 트레이스 및/또는 디버그 데이터를 수집하고, 그러한 데이터를 패킷화하며, 이어서 패킷화된 데이터를 스트림 스위치(1406)를 통해 출력할 수 있다. 예컨대, CDT 회로(1420)는 패킷화된 데이터를 출력하고, 그러한 데이터를 스트림 스위치(1406)에 제공할 수 있다. 부가적으로, 구성 레지스터들(1436) 등은 개개의 타일의 메모리 맵핑된 스위치(1402)를 통한 메모리 맵핑된 트랜잭션들을 통해 디버깅 동안 판독 또는 기입될 수 있다. 유사하게, CDT 회로(1420) 내의 성능 카운터들은 개개의 타일의 메모리 맵핑된 스위치(1402)를 통한 메모리 맵핑된 트랜잭션들을 통해 프로파일링 동안 판독 또는 기입될 수 있다.
하나 이상의 실시예들에서, CDT 회로(1420)는, 이벤트 브로드캐스트 회로부(1404)(또는 이벤트 브로드캐스트 회로부(1430))에 의해 전파된 임의의 이벤트들 또는 CDT 회로(1420)에 커플링된 이벤트 브로드캐스트 회로부(1404)의 인터페이스에 의해 이용되는 비트마스크 당 선택된 이벤트들을 수신할 수 있다. CDT 회로(1420)는 추가로 이벤트 로직(1432)에 의해 생성된 이벤트들을 수신할 수 있다. 예컨대, CDT 회로(1420)는 PL(310), DPE들(304), 타일(1304)(예컨대, 이벤트 로직(1432) 및/또는 이벤트 브로드캐스트 스위치(1404)), 및/또는 SoC 인터페이스 블록(104)의 다른 타일들로부터 이든, 브로드캐스트 이벤트들을 수신할 수 있다. CDT 회로(1420)는 복수의 그러한 이벤트들을 패킷으로 함께 패킹(pack), 예컨대 패킷화하고, 패킷화된 이벤트들을 타임스탬프(들)와 연관시킬 수 있다. CDT 회로(1420)는 추가로, 패킷화된 이벤트들을 스트림 스위치(1406)를 통해 타일(1304) 외부의 목적지들로 전송할 수 있다. 이벤트들은 PL 인터페이스(1410), DMA 엔진(1412), 및/또는 NoC 스트림 인터페이스(1414)를 통하여 스트림 스위치(1406) 및 스트림 멀티플렉서/디멀티플렉서(1408)에 의해 전송될 수 있다.
DPE GCS 레지스터들(1438)은, DPE 어레이(102)로의 그리고/또는 DPE 어레이(102)로부터의 보안 액세스를 인에이블링 또는 디스에이블링시키는 데 사용되는 DPE 글로벌 제어 세팅들/비트들(본 명세서에서 "보안 비트들"로 또한 지칭됨)을 저장할 수 있다. DPE GCS 레지스터들(1438)은 도 14c와 관련하여 아래에서 더 상세히 설명될 SoC 보안/초기화 인터페이스를 통해 프로그래밍될 수 있다. SoC 보안/초기화 인터페이스로부터 수신된 보안 비트(들)는 도 14a에 예시된 바와 같이 버스를 통해 SoC 인터페이스 블록(104)의 하나의 타일로부터 다음 타일로 전파될 수 있다.
하나 이상의 실시예들에서, (예컨대, NoC(308)를 사용하는) DPE 어레이(102)로의 외부 메모리 맵핑된 데이터 전달들은 안전하지 않거나 신뢰되지 않는다. DPE GCS 레지스터들(1438) 내에서 보안 비트들을 세팅하지 않으면, (예컨대, NoC(308)를 통한) 메모리 맵핑된 데이터 전달들에 의해 통신할 수 있는 디바이스(100) 내의 임의의 엔티티는 DPE 어레이(102)와 통신할 수 있다. DPE GCS 레지스터들(1438) 내에서 보안 비트들을 세팅함으로써, DPE 어레이(102)와 통신하도록 허가된 특정한 엔티티들은, 보안 트래픽을 생성할 수 있는 특정된 엔티티들만이 DPE 어레이(102)와 통신할 수 있도록 정의될 수 있다.
예컨대, 메모리 맵핑된 스위치(1402)의 메모리 맵핑된 인터페이스들은 NoC(308)와 통신할 수 있다. 메모리 맵핑된 데이터 전달들은, 트랜잭션이 안전한지 또는 안전하지 않은지를 특정하는 부가적인 측대역 신호들, 예컨대 비트들을 포함할 수 있다. DPE GCS 레지스터들(1438) 내의 보안 비트들이 세팅될 때, SoC 인터페이스 블록(104)으로 진입하는 메모리 맵핑된 트랜잭션들은, NoC(308)로부터 SoC 인터페이스 블록(104)에 도달하는 메모리 맵핑된 트랜잭션이 안전하다는 것을 표시하도록 세팅된 측대역 신호들을 가져야 한다. SoC 인터페이스 블록(104)에 도달하는 메모리 맵핑된 트랜잭션이 세팅된 측대역 비트들을 갖지 않고, 보안 비트들이 DPE GCS 레지스터들(1438) 내에서 세팅될 때, SoC 인터페이스 블록(104)은 트랜잭션이 DPE들(304)로 진입하거나 전달되게 허용하지 않는다.
하나 이상의 실시예들에서, SoC는 신뢰의 루트로서 동작하는 보안 에이전트(예컨대, 회로)를 포함한다. 보안 에이전트는, DPE GCS 레지스터들(1438)의 보안 비트들이 세팅될 때 DPE 어레이(102)에 액세스하기 위해, 메모리 맵핑된 트랜잭션들 내에서 측대역 비트들을 세팅하는 데 필요한 허가들을 이용하여 SoC 내에서 상이한 엔티티들(예컨대, 회로들)을 구성할 수 있다. SoC가 구성될 시에, 보안 에이전트는, PL(310) 또는 PS(312)에서 구현될 수 있는 상이한 마스터들에 대한 허가들을 제공하여, 그에 의해 보안 트랜잭션들을 NoC(308)를 통해(또는 그것 없이) DPE 어레이(102)에 발행하는 능력을 그러한 마스터들에게 제공한다.
도 14b는 타일(1304)의 다른 예시적인 구현을 예시한다. 도 14b에 예시된 예시적인 아키텍처는 또한, SoC 인터페이스 블록(104)에 포함된 다른 타일들 중 임의의 타일을 구현하는 데 사용될 수 있다. 도 14b의 예는 도 14a에 예시된 아키텍처의 간략화된 버전을 예시한다. 도 14b의 타일 아키텍처는 DPE들 및 디바이스(100) 내의 다른 서브시스템들 및/또는 블록들 사이의 연결을 제공한다. 예컨대, 도 14b의 타일(1304)은 본 명세서에 설명된 바와 같이, DPE들 및 PL(310), 아날로그/믹싱된 신호 회로 블록들, ASIC들, 또는 다른 서브시스템들 사이의 인터페이스를 제공할 수 있다. 도 14b의 타일 아키텍처는 NoC(308)에 대한 연결을 제공하지 않는다. 이와 같이, DMA 엔진(1412), NoC 인터페이스(1414), 선택기 블록(1416), 브리지(1418), 및 스트림 멀티플렉서/디멀티플렉서(1408)가 생략된다. 이와 같이, 도 14b의 타일(1304)은 SoC의 더 적은 영역을 사용하여 구현될 수 있다. 추가로, 도시된 바와 같이, 스트림 스위치(1406)는 PL 인터페이스(1410)에 직접 커플링된다.
도 14b의 예시적인 아키텍처는 NoC(308)로부터 DPE들을 구성하려는 목적들을 위한 메모리 맵핑된 데이터, 예컨대 구성 데이터를 수신할 수 없다. 그러한 구성 데이터는, 메모리 맵핑된 스위치(1402)를 통해 이웃한 타일들로부터 수신되며, 타일(1304)이 관리하는 (예컨대, 도 14b의 타일(1304) 위의 DPE들의 열까지의) DPE들의 서브세트로 보내질 수 있다.
도 14c는 타일(1304)의 다른 예시적인 구현을 예시한다. 특정한 실시예들에서, 도 14c에 예시된 아키텍처는 SoC 인터페이스 블록(104) 내에서 하나의 타일만을 구현하는 데 사용될 수 있다. 예컨대, 도 14c에 예시된 아키텍처는 SoC 인터페이스 블록(104) 내에서 타일(1302)을 구현하는 데 사용될 수 있다. 도 14c에 예시된 아키텍처는 도 14b에 도시된 아키텍처와 유사하다. 도 14c에서, SoC 보안/초기화 인터페이스(1440), 클록 신호 생성기(1442), 및 글로벌 타이머(1444)와 같은 부가적인 컴포넌트들이 포함된다.
도 14c의 예에서, SoC 보안/초기화 인터페이스(1440)는 SoC 인터페이스 블록(104)에 대한 추가적인 인터페이스를 제공한다. 하나 이상의 실시예들에서, SoC 보안/초기화 인터페이스(1440)는 NoC 주변기기 상호연결로서 구현된다. SoC 보안/초기화 인터페이스(1440)는 DPE 어레이(102)(도시되지 않음)에 대한 글로벌 리셋 레지스터들 및 DPE GCS 레지스터들(1438)에 대한 액세스를 제공할 수 있다. 특정한 실시예들에서, DPE GCS 레지스터들(1438)은 클록 신호 생성기(1442)에 대한 구성 레지스터들을 포함한다. 도시된 바와 같이, SoC 보안/초기화 인터페이스(1440)는 보안 비트들을 DPE GCS 레지스터들(1438)에 제공하고, 보안 비트들을 SoC 인터페이스 블록(104)의 다른 타일들 내의 다른 DPE GCS 레지스터들(1438)로 전파할 수 있다. 특정한 실시예들에서, SoC 보안/초기화 인터페이스(1440)는 SoC 인터페이스 블록(104)에 대한 단일 슬레이브 엔드포인트를 구현한다.
도 14c의 예에서, 클록 신호 생성기(1442)는 하나 이상의 클록 신호(들)(1446) 및/또는 하나 이상의 리셋 신호(1450)를 생성할 수 있다. 클록 신호(들)(1446) 및/또는 리셋 신호들(1450)은 DPE들(304) 각각에 그리고/또는 DPE 어레이(102)의 SoC 인터페이스 블록(104)의 다른 타일들에 분배될 수 있다. 하나 이상의 실시예들에서, 클록 신호 생성기(1442)는 하나 이상의 PLL(phase lock loop circuit)들을 포함할 수 있다. 예시된 바와 같이, 클록 신호 생성기(1442)는 DPE 어레이(102) 외부에 있고 SoC 상에 로케이팅된 다른 회로에 의해 생성된 기준 클록 신호를 수신할 수 있다. 클록 신호 생성기(1442)는 수신된 기준 클록 신호에 기반하여 클록 신호(들)(1446)를 생성할 수 있다.
도 14c의 예에서, 클록 신호 생성기(1442)는 SoC 보안/초기화 인터페이스(1440)를 통해 구성된다. 예컨대, 클록 신호 생성기(1442)는 DPE GCS 레지스터들(1438)에 데이터를 로딩함으로써 구성될 수 있다. 이와 같이, DPE 어레이(102)의 클록 주파수 또는 클록 주파수들 및 리셋 신호들(1450)의 생성은, 적절한 구성 데이터를 SoC 보안/초기화 인터페이스(1440)를 통해 DPE GCS 레지스터들(1438)에 기입함으로써 세팅될 수 있다. 테스트 목적들을 위해, 클록 신호(들)(1446) 및/또는 리셋 신호들(1450)이 또한 PL(310)로 직접 라우팅될 수 있다.
SoC 보안/초기화 인터페이스(1440)는 SoC 제어/디버그 (회로) 블록(예컨대, 도시되지 않은 디바이스(100)의 제어 및/또는 디버그 서브시스템)에 커플링될 수 있다. 하나 이상의 실시예들에서, SoC 보안/초기화 인터페이스(1440)는 SoC 제어/디버그 블록에 상황 신호들을 제공할 수 있다. 예시적이고 비-제한적인 예로서, SoC 보안/초기화 인터페이스(1440)는 클록 신호 생성기(1440)의 내부로부터 생성된 "PLL 록" 신호를 SoC 제어/디버그 블록에 제공할 수 있다. PLL 록 신호는, PLL이 기준 클록 신호에 대한 록을 획득할 때를 표시할 수 있다.
SoC 보안/초기화 인터페이스(1440)는 인터페이스(1448)를 통해 명령들 및/또는 데이터를 수신할 수 있다. 데이터는, 본 명세서에 설명된 보안 비트들, 클록 신호 생성기 구성 데이터, 및/또는 DPE GCS 레지스터들(1438)에 기입될 수 있는 다른 데이터를 포함할 수 있다.
글로벌 타이머(1444)는 CDT 회로(1420)에 인터페이싱할 수 있다. 예컨대, 글로벌 타이머(1444)는 CDT 회로(1420)에 커플링될 수 있다. 글로벌 타이머(1444)는 트레이싱을 위해 사용되는 타임스탬핑 이벤트들에 대하여 CDT 회로(1420)에 의해 사용되는 신호를 제공할 수 있다. 하나 이상의 실시예들에서, 글로벌 타이머(1444)는 SoC 인터페이스 회로부(104)의 타일들 중 다른 타일들 내의 CDT 회로(1420)에 커플링될 수 있다. 예컨대, 글로벌 타이머(1444)는 도 14a, 도 14b, 및/또는 도 14c의 예시적인 타일들에서 CDT 회로(1420)에 커플링될 수 있다. 글로벌 타이머(1444)는 또한 SoC 제어/디버그 블록에 커플링될 수 있다.
도 14a, 도 14b, 및 도 14c의 아키텍처들을 총괄하여 참조하면, 타일(1304)은 다양한 상이한 데이터 경로들을 사용하여 DPE들(304)과 통신할 수 있다. 일 예에서, 타일(1304)은 DMA 엔진(1412)을 사용하여 DPE들(304)과 통신할 수 있다. 예컨대, 타일(1304)은 DMA 엔진(1412)을 사용하여 DPE 어레이(102)의 하나 이상의 DPE들의 DMA 엔진(예컨대, DMA 엔진(816))에 통신할 수 있다. 통신은 DPE로부터 SoC 인터페이스 블록(104)의 타일로 또는 SoC 인터페이스 블록(104)의 타일로부터 DPE로 흐를 수 있다. 다른 예에서, DMA 엔진(1412)은 개개의 DPE들 내의 스트림 스위치들에 의해 DPE 어레이(102)의 하나 이상의 DPE들의 코어(들)와 통신할 수 있다. 통신은 코어(들)로부터 SoC 인터페이스 블록(104)의 타일로 그리고/또는 SoC 인터페이스 블록(104)의 타일로부터 DPE 어레이(102)의 하나 이상의 DPE들의 코어(들)로 흐를 수 있다.
도 15는 PL 인터페이스(1410)의 예시적인 구현을 예시한다. 도 15의 예에서, PL 인터페이스(1410)는, 사용되는 특정한 타일 아키텍처에 의존하여 스트림 스위치(1406) 및/또는 스트림 멀티플렉서/디멀티플렉서(1408)에 PL(310)을 커플링시키는 복수의 채널들을 포함한다. PL 인터페이스(1410) 내의 도 15에 예시된 채널들의 특정한 수는 제한이 아니라 예시의 목적들을 위한 것이다. 다른 실시예들에서, PL 인터페이스(1410)는 도 15에 도시된 것보다 더 적거나 더 많은 채널들을 포함할 수 있다. 추가로, PL 인터페이스(1410)가 PL(310)에 연결되는 것으로 예시되지만, 하나 이상의 다른 실시예들에서, PL 인터페이스(1410)는 하나 이상의 다른 서브시스템들 및/또는 회로 블록들에 커플링될 수 있다. 예컨대, PL 인터페이스(1410)는 또한, ASIC, 아날로그/믹싱된 신호 회로부, 및/또는 다른 회로부 또는 서브시스템에 커플링될 수 있다.
하나 이상의 실시예들에서, PL(310)은 DPE들(304)과 상이한 기준 전압 및 상이한 클록 속도로 동작한다. 따라서, 도 15의 예에서, PL 인터페이스(1410)는 복수의 시프트 및 격리 회로들(1502) 및 복수의 비동기식 FIFO 메모리들(1504)을 포함한다. 채널들 각각은 시프트 격리 회로(1502) 및 비동기식 FIFO 메모리(1504)를 포함한다. 채널들의 제1 서브세트는 PL(310)(및/또는 다른 회로부)로부터 스트림 스위치(1406) 및/또는 스트림 멀티플렉서/디멀티플렉서(1408)로 데이터를 전달한다. 채널들의 제2 서브세트는 스트림 스위치(1406) 및/또는 스트림 멀티플렉서/디멀티플렉서(1408)로부터 PL(310) 및/또는 다른 회로부로 데이터를 전달한다.
시프트 및 격리 회로들(1502)는 상이한 전압의 도메인들 사이에서 인터페이싱할 수 있다. 이러한 경우, 시프트 및 격리 회로들(1502)은 PL(310) 및/또는 다른 회로부의 동작 전압과 DPE들(304)의 동작 전압 사이에서 전환하는 인터페이스를 제공할 수 있다. 비동기식 FIFO 메모리들(1504)은 2개의 상이한 클록 도메인들 사이에서 인터페이싱할 수 있다. 이러한 경우, 비동기식 FIFO 메모리들(1504)은 PL(310) 및/또는 다른 회로부의 클록 레이트와 DPE들(304)의 클록 레이트 사이에서 전환하는 인터페이스를 제공할 수 있다.
하나 이상의 실시예들에서, 비동기식 FIFO 메모리들(1504)은 DPE 어레이(102)에 대한 32비트 인터페이스들을 갖는다. 비동기식 FIFO 메모리들(1504)과 시프트 및 격리 회로들(1502) 사이의 연결들 및 시프트 및 격리 회로들(1502)과 PL(310) 사이의 연결들은 폭이 프로그래밍가능(예컨대, 구성가능)할 수 있다. 예컨대, 비동기식 FIFO 메모리들(1504)과 시프트 및 격리 회로들(1502) 사이의 연결들 및 시프트 및 격리 회로들(1502)과 PL(310) 사이의 연결들은 폭이 32비트, 64비트, 또는 128비트가 되도록 구성될 수 있다. 논의된 바와 같이, PL 인터페이스(1410)는 설명된 비트-폭들을 달성하기 위해 구성 데이터를 구성 레지스터들(1436)에 기입하는 메모리 맵핑된 스위치(1402)에 의해 구성가능하다. 메모리 맵핑된 스위치(1402)를 사용하여, PL(310)의 측부 상의 비동기식 FIFO 메모리들(1504)의 측부는 32비트, 64비트, 또는 128비트 중 어느 하나를 사용하도록 구성가능할 수 있다. 본 명세서에서 제공된 비트 폭들은 예시의 목적들을 위한 것이다. 다른 실시예들에서, 다른 비트 폭들이 사용될 수 있다. 임의의 경우, 다양한 컴포넌트들에 대해 설명된 폭들은 구성 레지스터들(1436)에 로딩된 구성 데이터에 기반하여 달라질 수 있다.
도 16은 NoC 스트림 인터페이스(1414)의 예시적인 구현을 예시한다. DPE 어레이(102)는 DPE들 내의 스트림 인터페이스들을 사용하여 NoC(308)를 통해 통신하는 2개의 일반적인 방식들을 갖는다. 일 양상에서, DPE들은 스트림 스위치(1406)를 사용하여 DMA 엔진(1412)에 액세스할 수 있다. DMA 엔진(1412)은, NoC(308)로부터의 메모리 맵핑된 트랜잭션들을, DPE들로 전송하기 위한 데이터 스트림들로 변환하고, DPE들로부터의 데이터 스트림들을, NoC(308)를 통해 전송하기 위한 메모리 맵핑된 트랜잭션들로 변환할 수 있다. 다른 양상에서, 데이터 스트림들은 NoC 스트림 인터페이스(1414)로 보내질 수 있다.
도 16의 예에서, NoC 스트림 인터페이스(1414)는 스트림 스위치(1406) 및/또는 스트림 멀티플렉서/디멀티플렉서에 NoC(308)를 커플링시키는 복수의 채널들을 포함한다. 각각의 채널은 FIFO 메모리, 및 업사이즈 회로 또는 다운사이즈 회로 중 어느 하나를 포함할 수 있다. 채널들의 제1 서브세트는 NoC(308)로부터 스트림 스위치(1406) 및/또는 스트림 멀티플렉서/디멀티플렉서(1408)로 데이터를 전달한다. 채널들의 제2 서브세트는 스트림 스위치(1406) 및/또는 스트림 멀티플렉서/디멀티플렉서(1408)로부터 NoC(308)로 데이터를 전달한다. NoC 스트림 인터페이스(1414) 내의 도 16에 예시된 채널들의 특정한 수는 제한이 아니라 예시의 목적들을 위한 것이다. 다른 실시예들에서, NoC 스트림 인터페이스(1414)는 도 16에 도시된 것보다 더 적거나 더 많은 채널들을 포함할 수 있다.
하나 이상의 실시예들에서, 업사이즈 회로들(1608)(도 16에서 "US 회로"로 약칭됨) 각각은 데이터 스트림을 수신하고, 수신된 데이터 스트림의 폭을 증가시킬 수 있다. 예컨대, 각각의 업사이즈 회로(1608)는 32비트 데이터 스트림을 수신하고, 128비트 데이터 스트림을 대응하는 FIFO 메모리(1610)에 출력할 수 있다. FIFO 메모리들(1610) 각각은 중재 및 멀티플렉서 회로(1612)에 커플링된다. 중재 및 멀티플렉서 회로(1612)는 결과적인 출력 데이터 스트림을 NoC 인터페이스들(1426)에 제공하기 위해 특정한 중재 방식 또는 우선순위(예컨대, 라운드-로빈(round-robin) 또는 다른 스타일)를 사용하여, 수신된 데이터 스트림들 사이를 중재할 수 있다. 중재 및 멀티플렉서 회로(1612)는 매 클록 사이클마다 새로운 요청을 핸들링 및 수용할 수 있다. DPE들(304)과 NoC(308) 사이의 클록 도메인 교차는 NoC(308) 그 자체 내에서 핸들링될 수 있다. 하나 이상의 다른 실시예들에서, DPE들(304)과 NoC(308) 사이의 클록 도메인 교차는 SoC 인터페이스 블록(104) 내에서 핸들링될 수 있다. 예컨대, 클록 도메인 교차는 NoC 스트림 인터페이스(1414)에서 핸들링될 수 있다.
디멀티플렉서(1602)는 NoC(308)로부터 데이터 스트림을 수신할 수 있다. 예컨대, 디멀티플렉서(1602)는 NoC 인터페이스(들)(1426)에 커플링될 수 있다. 예시의 목적들을 위해, NoC 인터페이스(들)(1426)로부터의 데이터 스트림은 폭이 128비트일 수 있다. DPE들(304)과 NoC(308) 사이의 클록 도메인 교차는 이전에 설명된 바와 같이, NoC(308) 내에서 그리고/또는 NoC 스트림 인터페이스(1414) 내에서 핸들링될 수 있다. 디멀티플렉서(1602)는 수신된 데이터 스트림을 FIFO 메모리들(1604) 중 하나로 포워딩할 수 있다. 디멀티플렉서(1602)가 데이터 스트림을 제공하는 특정한 FIFO 메모리(1604)는 데이터 스트림 그 자체 내에서 인코딩될 수 있다. FIFO 메모리들(1604)은 다운사이즈 회로들(1606)(도 16에서 "DS 회로"로 약칭됨)에 커플링된다. 다운사이즈 회로들(1606)은 시분할 멀티플렉싱을 사용하여 버퍼링한 이후, 수신된 스트림들을 더 작은 폭으로 다운사이징할 수 있다. 예컨대, 다운사이즈 회로들(1606)은 128비트 폭으로부터 32비트 폭으로 스트림을 다운사이징할 수 있다.
예시된 바와 같이, 다운사이즈 회로들(1606) 및 업사이즈 회로들(1608)은, 사용되는 SoC 인터페이스 블록(104)의 타일의 특정한 아키텍처에 의존하여 스트림 스위치(1406) 또는 스트림 멀티플렉서/디멀티플렉서(1408)에 커플링된다. 도 16은 예시의 목적들을 위해 제공되며, 제한으로서 의도되지 않는다. 채널들에서의 컴포넌트들(예컨대, 업사이즈/다운사이즈 회로 및 FIFO 메모리)의 순서 및/또는 연결은 달라질 수 있다.
하나 이상의 다른 실시예들에서, PL 인터페이스(1410)는 도 15와 관련하여 설명된 바와 같이, 도 16과 관련하여 설명된 바와 같은 업사이즈 회로들 및/또는 다운사이즈 회로들을 포함할 수 있다. 예컨대, 다운사이즈 회로들은, PL(310)(또는 다른 회로부)로부터 스트림 스위치(1406) 및/또는 스트림 멀티플렉서/디멀티플렉서(1408)로 데이터를 전달하는 각각의 채널에 포함될 수 있다. 업사이즈 회로들은, 스트림 스위치(1406) 및/또는 스트림 멀티플렉서/디멀티플렉서(1408)로부터 PL(310)(또는 다른 회로부)로 데이터를 전달하는 각각의 채널에 포함될 수 있다.
하나 이상의 다른 실시예들에서, 독립적인 엘리먼트들로서 도시되었지만, 각각의 다운사이즈 회로(1606)는 대응하는 FIFO 메모리(1604)와, 예컨대 단일 블록 또는 회로로서 결합될 수 있다. 유사하게, 각각의 업사이즈 회로(1608)는 대응하는 FIFO 메모리(1610)와, 예컨대 단일 블록 또는 회로로서 결합될 수 있다.
도 17은 DMA 엔진(1412)의 예시적인 구현을 예시한다. 도 17의 예에서, DMA 엔진(1412)은 DMA 제어기(1702)를 포함한다. DMA 제어기(1702)는 2개의 별개의 모듈들 또는 인터페이스들로 분할될 수 있다. 각각의 모듈은 다른 모듈과 독립적으로 동작할 수 있다. DMA 제어기(1702)는 메모리 맵핑-스트림 인터페이스(인터페이스)(1704) 및 스트림-메모리 맵핑 인터페이스(인터페이스)(1706)를 포함할 수 있다. 인터페이스(1704) 및 인터페이스(1706) 각각은 2개 이상의 별개의 채널들을 포함할 수 있다. 따라서, DMA 엔진(1412)은, 인터페이스(1706)를 통해 스트림 스위치(1406)로부터 2개 이상의 인입 스트림들을 수신하고, 인터페이스(1704)를 통해 2개 이상의 발신 스트림들을 스트림 스위치(1406)에 전송할 수 있다. DMA 제어기(1702)는 마스터 메모리 맵핑된 인터페이스(1714)를 더 포함할 수 있다. 마스터 메모리 맵핑된 인터페이스(1714)는 인터페이스(1704) 및 인터페이스(1706)에 NoC(308)를 커플링시킨다.
DMA 엔진(1412)은 또한, 하드웨어 동기화 회로부(1710) 및 버퍼 디스크립터(descriptor) 레지스터 파일(1708)을 포함할 수 있다. 하드웨어 동기화 회로부(1710) 및 버퍼 디스크립터 레지스터 파일(1708)은 멀티플렉서(1712)를 통해 액세스될 수 있다. 이와 같이, 하드웨어 동기화 회로부(1710) 및 버퍼 디스크립터 레지스터 파일(1708) 둘 모두는 제어 인터페이스들을 통해 외부적으로 액세스될 수 있다. 그러한 제어 인터페이스들의 예들은 DPE들로부터의 제어 스트림 인터페이스 또는 메모리 맵핑된 인터페이스를 포함한다(그러나 이에 제한되지 않음). DPE의 제어 스트림 인터페이스의 일 예는 DPE의 코어로부터 출력되는 스트리밍 인터페이스이다.
하드웨어 동기화 회로부(1710)는, DMA 엔진(1412)에 포함된 다수의 채널들 및/또는 DMA 엔진(1412) 내의 채널을, 록 요청들을 풀링 및 구동시키는 마스터와 동기화시키는 데 사용될 수 있다. 예컨대, 마스터는 PS(312) 또는 PL(310) 내에서 구현된 디바이스일 수 있다. 다른 예에서, 마스터는 또한, 록이 이용가능할 때 DMA 엔진(1412) 내의 하드웨어 동기화 회로부(1710)에 의해 생성되는 인터럽트를 수신할 수 있다.
DMA 전달들은 버퍼 디스크립터 레지스터 파일(1708) 내에 저장된 버퍼 디스크립터들에 의해 정의될 수 있다. 인터페이스(1706)는 버퍼 디스크립터들 내의 정보에 기반하여 NoC(308)로의 판독 전달들을 요청할 수 있다. 인터페이스(1704)로부터 스트림 스위치(1406)로의 발신 스트림들은 스트림 스위치들에 대한 구성 레지스터들에 기반하여 패킷-스위칭 또는 서킷-스위칭으로서 구성될 수 있다.
도 18은 복수의 DPE들에 대한 예시적인 아키텍처를 예시한다. 예시적인 아키텍처는 DPE 어레이(102)에 포함될 수 있는 DPE들(304)을 예시한다. 도 18의 예시적인 아키텍처는 체커보드 아키텍처로 지칭될 수 있다. 도 18의 예시적인 아키텍처는 DPE의 코어가 공유된 메모리를 사용하여 다른 DPE들의 최대 8개의 다른 코어들과 통신하게 허용한다(예컨대, 총 9개의 코어들이 공유된 메모리를 통해 통신함). 도 18의 예에서, 각각의 DPE(304)는 도 6, 도 7, 및 도 8과 관련하여 설명된 바와 같이 구현될 수 있다. 이와 같이, 각각의 코어(602)는 4개의 상이한 메모리 모듈들(604)에 액세스할 수 있다. 각각의 메모리 모듈(604)은 최대 4개의 상이한 코어들(602)에 의해 액세스될 수 있다.
도시된 바와 같이, DPE 어레이(102)는 행들 1, 2, 3, 4, 및 5를 포함한다. 행들 1 내지 5 각각은 3개의 DPE들(304)을 포함한다. 각각의 행 내의 DPE들(304)의 특정한 수 및 도 18에 도시된 행들의 수는 제한이 아니라 예시의 목적들을 위한 것이다. 행들 1, 3, 및 5를 참조하면, 이들 행들 내의 각각의 DPE의 코어는 메모리 모듈의 좌측에 로케이팅된다. 행들 2 및 4를 참조하면, 이들 행들 내의 각각의 DPE의 코어는 메모리 모듈의 우측에 로케이팅된다. 실제로, 행들 2 및 4 내의 DPE들의 배향은 행들 1, 3, 및 5 내의 DPE들의 배향과 비교할 때 수평으로 반전되거나 수평으로 뒤집혀있다. DPE들의 배향은 각각의 교번 행에서 도시된 바와 같이 반전된다.
도 18의 예에서, DPE들(304)은 열들로 정렬된다. 그러나, 인접한 행들 내의 코어들 및 메모리 모듈들은 열들로 정렬되지 않는다. 도 18의 아키텍처는 이종 아키텍처의 일 예이며, 여기서 DPE들은, DPE가 로케이팅되는 특정한 행에 기반하여 상이하게 구현된다. DPE들(304)의 수평 반전으로 인해, 인접한 행들 내의 코어들은 정렬되지 않는다. 인접한 행들 내의 코어들은 서로 오프셋된다. 유사하게, 인접한 행들 내의 메모리 모듈들은 정렬되지 않는다. 인접한 행들 내의 메모리 모듈들은 서로 오프셋된다. 그러나, 교번 행들 내의 코어들은 교번 행들 내의 메모리 모듈들처럼 정렬된다. 예컨대, 행들 1, 3, 및 5의 코어들 및 메모리 모듈들은 수직으로(예컨대, 열들로) 정렬된다. 유사하게, 행들 2 및 4의 코어들 및 메모리 모듈들은 수직으로(예컨대, 열들로) 정렬된다.
예시의 목적들을 위해, DPE들(304-2, 304-4, 304-5, 304-7, 304-8, 304-9, 304-10, 304-11, 및 304-14)의 코어들은 그룹의 일부로 고려되며, 공유된 메모리를 통해 통신할 수 있다. 화살표들은, 코어가 공유된 메모리를 사용하여 상이한 DPE들 내의 최대 8개의 다른 코어들과 통신하는 것을 도 18의 예시적인 아키텍처가 어떻게 지원하는지를 예시한다. 예컨대, DPE(304-8)를 참조하면, 코어(602-8)는 메모리 모듈들(604-11, 604-7, 604-8, 및 604-5)에 액세스할 수 있다. 메모리 모듈(604-11)을 통해, 코어(602-8)는 코어들(602-14, 602-10, 및 602-11)과 통신할 수 있다. 메모리 모듈(604-7)을 통해, 코어(602-8)는 코어들(602-7, 602-4, 및 602-10)과 통신할 수 있다. 메모리 모듈(604-8)을 통해, 코어(602-8)는 코어(602-9, 602-11, 및 602-5)와 통신할 수 있다. 메모리 모듈(604-5)을 통해, 코어(602-8)는 코어들(602-4, 602-5, 및 602-2)과 통신할 수 있다.
도 18의 예에서, 코어(602-8)를 배제하면, 그룹의 공유된 메모리 모듈들 중 2개의 상이한 메모리 모듈들에 액세스할 수 있는 그룹 내의 4개의 상이한 코어들이 존재한다. 나머지 다른 4개의 코어들은 그룹의 공유된 메모리 모듈들 중 하나의 메모리 모듈만을 공유한다. 그룹의 공유된 메모리 모듈들은 메모리 모듈들(604-5, 604-7, 604-8, 및 604-11)을 포함한다. 예컨대, 코어들(602-10, 602-11, 602-4, 및 602-5) 각각은 2개의 상이한 메모리 모듈들에 액세스할 수 있다. 코어(602-10)는 메모리 모듈들(604-11 및 604-7)에 액세스할 수 있다. 코어(602-11)는 메모리 모듈들(604-11 및 604-8)에 액세스할 수 있다. 코어(602-4)는 메모리 모듈들(604-5 및 604-7)에 액세스할 수 있다. 코어(602-5)는 메모리 모듈들(604-5 및 604-8)에 액세스할 수 있다.
도 18의 예에서, 총 9개의 DPE들의 최대 9개의 코어들은 DPE 어레이(102)의 DPE 상호연결 네트워크를 이용하지 않으면서, 공유된 메모리를 통해 통신할 수 있다. 논의된 바와 같이, 코어(602-8)는 메모리 모듈들(604-11, 604-7, 604-5, 및 604-8)을 통합된 메모리 공간으로서 볼 수 있다.
코어들(602-14, 602-7, 602-9, 및 602-2)은 그룹의 공유된 메모리 모듈들 중 하나의 메모리 모듈에만 액세스할 수 있다. 코어(602-14)는 메모리 모듈(604-11)에 액세스할 수 있다. 코어(602-7)는 메모리 모듈(604-7)에 액세스할 수 있다. 코어(602-9)는 메모리 모듈(604-8)에 액세스할 수 있다. 코어(602-2)는 메모리 모듈(604-5)에 액세스할 수 있다.
이전에 논의된 바와 같이, 다른 실시예들에서, 4개 초과의 메모리 인터페이스들이 각각의 메모리 모듈에 대해 제공되는 경우, 코어는 도 18의 아키텍처를 사용하여, 공유된 메모리를 통해 8개 초과의 다른 코어들과 통신할 수 있을 수 있다.
하나 이상의 다른 실시예들에서, DPE들의 특정한 행들 및/또는 열들은 다른 행들에 대해 오프셋될 수 있다. 예컨대, 행들 2 및 4는 행들 1, 3, 및/또는 5의 시작과 정렬되지 않는 위치로부터 시작할 수 있다. 예컨대, 행들 2 및 4는 행들 1, 3, 및/또는 5의 시작에 대해 우측으로 시프트될 수 있다.
도 19는 복수의 DPE들에 대한 다른 예시적인 아키텍처를 예시한다. 예시적인 아키텍처는 DPE 어레이(102)에 포함될 수 있는 DPE들(304)을 예시한다. 도 19에 예시된 예시적인 아키텍처는 그리드 아키텍처로 지칭될 수 있다. 도 19의 예시적인 아키텍처는 DPE의 코어가 공유된 메모리를 사용하여 다른 DPE들의 최대 10개의 다른 코어들과 통신하게 허용한다(예컨대, 총 11개의 코어들이 공유된 메모리를 통해 통신함). 도 19의 예에서, 각각의 DPE(304)는 도 6, 도 7, 및 도 8과 관련하여 설명된 바와 같이 구현될 수 있다. 이와 같이, 각각의 코어(602)는 4개의 상이한 메모리 모듈들(604)에 액세스할 수 있다. 각각의 메모리 모듈(604)은 최대 4개의 상이한 코어들(602)에 의해 액세스될 수 있다.
도시된 바와 같이, DPE 어레이(102)는 행들 1, 2, 3, 4, 및 5를 포함한다. 행들 1 내지 5 각각은 3개의 DPE들(304)을 포함한다. 각각의 행 내의 DPE들(304)의 특정한 수 및 도 19에 도시된 행들의 수는 제한이 아니라 예시의 목적들을 위한 것이다. 도 19의 예에서, DPE들(304)은 열들로 수직으로 정렬된다. 행들 1, 2, 3, 4, 및 5 각각은 DPE들의 각각의 다른 행과 정렬되는 동일한 시작 포인트를 갖는다. 추가로, 각각의 개개의 DPE(304) 내의 코어들(602) 및 메모리 모듈들(604)의 배치는 동일하다. 다시 말하면, 코어들(602)은 수직으로 정렬된다. 유사하게, 메모리 모듈들(604)이 수직으로 정렬된다.
예시의 목적들을 위해, DPE들(304-2, 304-4, 304-5, 304-6, 304-7, 304-8, 304-9, 304-10, 304-11, 304-12, 및 304-14)의 코어들은 그룹의 일부로 고려되며, 공유된 메모리를 통해 통신할 수 있다. 화살표들은, 코어가 공유된 메모리를 사용하여 상이한 DPE들 내의 최대 10개의 다른 코어들과 통신하는 것을 도 19의 예시적인 아키텍처가 어떻게 지원하는지를 예시한다. 예컨대, DPE(304-8)를 참조하면, 코어(602-8)는 메모리 모듈들(604-11, 604-8, 604-5, 및 604-9)에 액세스할 수 있다. 메모리 모듈(604-11)을 통해, 코어(602-8)는 코어들(602-14, 602-10, 및 602-11)과 통신할 수 있다. 메모리 모듈(604-8)을 통해, 코어(602-8)는 코어들(602-7, 602-11, 및 602-5)과 통신할 수 있다. 메모리 모듈(604-5)을 통해, 코어(602-8)는 코어들(602-4, 602-5, 및 602-2)과 통신할 수 있다. 메모리 모듈(604-9)을 통해, 코어(602-8)는 코어들(602-12, 602-9, 및 602-6)과 통신할 수 있다.
도 19의 예에서, 코어(602-8)를 배제하면, 그룹의 공유된 메모리 모듈들 중 2개의 메모리 모듈들에 액세스할 수 있는 코어들의 그룹 내의 2개의 상이한 코어들이 존재한다. 그룹의 공유된 메모리 모듈들은 메모리 모듈들(604-5, 604-8, 604-9, 및 604-11)을 포함한다. 그룹의 나머지 8개의 코어들은 하나의 메모리 모듈만을 공유한다. 예컨대, 코어들(602-11 및 602-5) 각각은 2개의 상이한 메모리 모듈들에 액세스할 수 있다. 코어(602-11)는 메모리 모듈들(604-11 및 604-8)에 액세스할 수 있다. 메모리 모듈(604-14)이 코어(604-8)에 의해 액세스가능하지 않으므로, 메모리 모듈(604-14)은 공유된 메모리들의 그룹의 일부로 고려되지 않는다. 코어(602-5)는 메모리 모듈들(604-5 및 604-8)에 액세스할 수 있다. 메모리 모듈(604-2)이 코어(602-8)에 의해 액세스가능하지 않으므로, 메모리 모듈(604-2)은 공유된 메모리 모듈들의 그룹의 일부로 고려되지 않는다.
코어들(602-14, 602-10, 602-12, 602-7, 602-9, 602-4, 602-6, 및 602-2)은 그룹의 공유된 메모리 모듈들 중 하나의 메모리 모듈에만 액세스할 수 있다. 코어(602-14)는 메모리 모듈(604-11)에 액세스할 수 있다. 코어(602-10)는 메모리 모듈(604-11)에 액세스할 수 있다. 코어(602-12)는 메모리 모듈(604-9)에 액세스할 수 있다. 코어(602-7)는 메모리 모듈(604-8)에 액세스할 수 있다. 코어(602-9)는 메모리 모듈(604-9)에 액세스할 수 있다. 코어(602-4)는 메모리 모듈(604-5)에 액세스할 수 있다. 코어(602-6)는 메모리 모듈(604-9)에 액세스할 수 있다. 코어(602-2)는 메모리 모듈(604-5)에 액세스할 수 있다.
도 19의 예에서, 11개의 DPE들의 최대 11개의 코어들은 DPE 어레이(102)의 DPE 상호연결 네트워크를 이용하지 않으면서, 공유된 메모리를 통해 통신할 수 있다. 논의된 바와 같이, 코어(602-8)는 메모리 모듈들(604-11, 604-9, 604-5, 및 604-8)을 통합된 메모리 공간으로서 볼 수 있다.
이전에 논의된 바와 같이, 다른 실시예들에서, 4개 초과의 메모리 인터페이스들이 각각의 메모리 모듈에 대해 제공되는 경우, 코어는 도 19의 아키텍처를 사용하여, 공유된 메모리를 통해 10개 초과의 다른 코어들과 통신할 수 있을 수 있다.
도 20은 DPE 어레이를 구성하는 예시적인 방법(2000)을 예시한다. 방법(2000)은 예시의 목적들을 위해 제공되며, 본 개시내용 내에서 설명된 본 발명의 어레인지먼트들의 제한으로서 의도되지 않는다.
블록(2002)에서, DPE 어레이에 대한 구성 데이터가 디바이스에 로딩된다. 구성 데이터는, 컴퓨터 시스템(예컨대, 호스트)이든, 오프-칩 메모리이든, 또는 다른 적합한 소스이든, 다양한 상이한 소스들 중 임의의 소스로부터 제공될 수 있다.
블록(2004)에서, 구성 데이터는 SoC 인터페이스 블록에 제공된다. 특정한 실시예들에서, 구성 데이터는 NoC를 통해 제공된다. SoC 인터페이스 블록의 타일은 구성 데이터를 수신하고, 구성 데이터를 메모리 맵핑된 데이터로 변환할 수 있으며, 그 메모리 맵핑된 데이터는 타일 내에 포함된 메모리 맵핑된 스위치에 제공될 수 있다.
블록(2006)에서, 구성 데이터는, SoC 인터페이스 블록의 타일(들) 사이에서, 타겟 DPE(들)에 대한 인터페이스들로서 동작하거나 이를 제공하는 특정한 타일(들)로 전파된다. 타겟 DPE(들)는, 구성 데이터가 어드레싱되는 DPE(들)이다. 예컨대, 구성 데이터는, 구성 데이터의 상이한 부분들이 보내져야 되는 특정한 DPE들을 특정하는 어드레스들을 포함한다. SoC 인터페이스 블록의 타일들 내의 메모리 맵핑된 스위치들은, 타겟 DPE(들)(예컨대, 타겟 DPE들을 포함하는 DPE들의 서브세트)에 대한 인터페이스들로서 동작하는 특정한 타일들에 구성 데이터의 상이한 부분들을 전파할 수 있다.
블록(2008)에서, 타겟 DPE(들)에 대한 인터페이스들로서 동작하는 SoC 인터페이스 블록의 타일(들)은 타겟 DPE(들)에 대한 구성 데이터의 일부들을 타겟 DPE(들)로 보낼 수 있다. 예컨대, 하나 이상의 타겟 DPE(들)에 대한 인터페이스를 제공하는 타일은, 타일이 인터페이스를 제공하는 DPE들의 서브세트로 구성 데이터의 일부(들)를 보낼 수 있다. 언급된 바와 같이, DPE들의 서브세트는 하나 이상의 타겟 DPE(들)를 포함한다. 각각의 타일이 구성 데이터를 수신할 때, 타일은, 타일이 인터페이스를 제공하는 DPE들의 동일한 서브세트 내의 다른 DPE들에 구성 데이터의 임의의 부분들이 어드레싱되는지 여부를 결정할 수 있다. 타일은 DPE들의 서브세트 내의 DPE들에 어드레싱된 임의의 구성 데이터를 그러한 DPE(들)로 보낸다.
블록(2010)에서, 구성 데이터는 타겟 DPE들에 포함된 DPE들의 엘리먼트들을 프로그래밍하기 위해 타겟 DPE들에 로딩된다. 예컨대, 구성 데이터는 타겟 DPE(들)의 엘리먼트들, 이를테면 스트림 인터페이스들, 코어(예컨대, 스트림 인터페이스(들), 캐스케이드 인터페이스들, 코어 인터페이스들), 메모리 모듈(예컨대, DMA 엔진들, 메모리 인터페이스들, 중재기들 등), 브로드캐스트 이벤트 스위치, 및/또는 브로드캐스트 로직을 프로그래밍하도록 구성 레지스터들에 로딩된다. 구성 데이터는 또한, 코어의 프로그램 메모리에 로딩될 수 있는 실행가능 프로그램 코드 및/또는 메모리 모듈의 메모리 뱅크들에 로딩될 데이터를 포함할 수 있다.
수신된 구성 데이터가 또한, SoC 인터페이스 블록(104)의 타일들 중 하나 이상 또는 모두에 어드레싱되는 부분들을 포함할 수 있다는 것을 인식해야 한다. 그 경우, 개개의 타일들 내의 메모리 맵핑된 스위치들은, 구성 데이터를 적절한(예컨대, 타겟) 타일들에 전달하고, 그러한 데이터를 추출하며, 그러한 데이터를 개개의 타일들 내의 적절한 구성 레지스터들에 기입할 수 있다.
도 21은 DPE 어레이의 예시적인 동작 방법(2100)을 예시한다. 방법(2100)은 예시의 목적들을 위해 제공되며, 본 개시내용 내에서 설명된 본 발명의 어레인지먼트들의 제한으로서 의도되지 않는다. 방법(2100)은, DPE들 및/또는 SoC 인터페이스 블록에 구성 데이터가 로딩되었던 상태에서 시작한다. 예시의 목적들을 위해, 도 3에 대한 참조가 이루어진다.
블록(2102)에서, DPE(304-15)(예컨대, "제1 DPE")의 코어(602-15)(예컨대, "제1 코어")는 데이터를 생성한다. 생성된 데이터는 애플리케이션 데이터일 수 있다. 예컨대, 코어(602-15)는 코어에 의해 액세스가능한 메모리 모듈에 저장된 데이터에 대해 동작할 수 있다. 메모리 모듈은 본 명세서에 설명된 바와 같이 DPE(304-15) 또는 상이한 DPE에 존재할 수 있다. 데이터는, 예컨대 SoC 인터페이스 블록(104)을 사용하여 디바이스의 다른 DPE 및/또는 다른 서브시스템으로부터 수신되었을 수 있다.
블록(2104)에서, 코어(602-15)는 DPE(304-15)의 메모리 모듈(604-15)에 데이터를 저장한다. 블록(2106)에서, 이웃한 DPE들(예컨대, DPE(304-25, 304-16,및/또는 304-5)) 내의 하나 이상의 코어들은 DPE(304-15)의 메모리 모듈(604-15)로부터 데이터를 판독한다. 이웃한 DPE(들) 내의 코어(들)는 추가적인 컴퓨테이션들에서 메모리 모듈(604-15)로부터 판독된 데이터를 이용할 수 있다.
블록(2108)에서, DPE(304-15)는 선택적으로, 데이터를 스트림 인터페이스들을 통해 하나 이상의 다른 DPE들에 전송한다. 데이터가 전송되는 DPE(들)는 이웃하지 않은 DPE(들)일 수 있다. 예컨대, DPE(304-15)는 메모리 모듈(604-15)로부터 하나 이상의 다른 DPE들, 이를테면 DPE(304-35, 304-36 등)로 데이터를 전송할 수 있다. 논의된 바와 같이, 하나 이상의 실시예들에서, DPE(304-15)는 DPE 어레이(102)의 DPE 상호연결 네트워크 내의 스트림 인터페이스들을 통해 애플리케이션 데이터를 브로드캐스팅 및/또는 멀티캐스팅할 수 있다. 다른 예에서, 상이한 DPE들로 전송된 데이터는 데이터의 상이한 부분들일 수 있으며, 여기서 데이터의 각각의 상이한 부분은 상이한 타겟 DPE에 대해 의도된다. 도 21에 예시되지 않았지만, 코어(602-15)는 또한, 캐스케이드 인터페이스들을 사용하여 그리고/또는 스트림 스위치들을 사용하여 코어로부터 직접 DPE 어레이(102)의 다른 코어 및/또는 DPE에 데이터를 전송할 수 있다.
블록(2110)에서, 코어(602-15)는 선택적으로, 캐스케이드 인터페이스를 통해 이웃한 코어로 데이터를 전송하고 그리고/또는 이웃한 코어로부터 데이터를 수신한다. 데이터는 애플리케이션 데이터일 수 있다. 예컨대, 코어(602-15)는 DPE(304-14)의 코어(602-14)로부터 직접 데이터를 수신하고 그리고/또는 캐스케이드 인터페이스들을 통해 DPE(304-16)의 코어(602-16)로 직접 데이터를 전송할 수 있다.
블록(2112)에서, DPE(304-15)는 선택적으로, SoC 인터페이스 블록을 통해 하나 이상의 서브시스템(들)으로 데이터를 전송하고 그리고/또는 하나 이상의 서브시스템(들)으로부터 데이터를 수신한다. 데이터는 애플리케이션 데이터일 수 있다. 예컨대, DPE(304-15)는 NoC(308)를 통해 PS(312)로, PL(310)에서 구현된 회로들로, NoC(308)를 통해 선택된 하드와이어링된 회로 블록들로, PL(310)을 통해 선택된 하드와이어링된 회로 블록들로, 그리고/또는 외부 메모리와 같은 다른 외부 서브시스템들로 데이터를 전송할 수 있다. 유사하게, DPE(304-15)는 SoC 인터페이스 블록을 통해 그러한 다른 서브시스템들로부터 애플리케이션 데이터를 수신할 수 있다.
도 22는 DPE 어레이의 다른 예시적인 동작 방법(2200)을 예시한다. 방법(2200)은 예시의 목적들을 위해 제공되며, 본 개시내용 내에서 설명된 본 발명의 어레인지먼트들의 제한으로서 의도되지 않는다. 방법(2200)은, DPE 어레이에 구성 데이터가 로딩된 상태에서 시작한다.
블록(2202)에서, 제1 코어, 예컨대 제1 DPE 내의 코어는 하드웨어 동기화 회로부로부터 메모리의 타겟 구역에 대한 록을 요청한다. 제1 코어는, 예컨대 제1 DPE, 예컨대 제1 코어와 동일한 DPE에 로케이팅된 메모리 모듈 내의 메모리의 타겟 구역에 대한 또는 제1 코어와는 상이한 DPE에 로케이팅된 메모리 모듈 내의 메모리의 타겟 구역에 대한 록을 하드웨어 동기화 회로부로부터 요청할 수 있다. 제1 코어는, 액세스될 메모리의 타겟 구역과 동일한 DPE에 로케이팅된 특정한 하드웨어 동기화 회로부로부터 록을 요청할 수 있다.
블록(2204)에서, 제1 코어는 요청된 록을 획득한다. 하드웨어 동기화 회로부는, 예컨대 메모리의 타겟 구역에 대한 요청된 록을 제1 코어에 승인(grant)한다.
블록(2206)에서, 록을 획득하는 것에 대한 응답으로, 제1 코어는 데이터를 메모리 내의 타겟 구역에 기입한다. 예컨대, 메모리의 타겟 구역이 제1 DPE에 있으면, 제1 코어는 제1 DPE 내의 메모리 모듈 내에 로케이팅된 메모리 인터페이스를 통해 메모리 내의 타겟 구역에 데이터를 기입할 수 있다. 다른 예에서, 메모리의 타겟 구역이 제1 코어와는 상이한 DPE에 로케이팅된 경우, 제1 코어는 본 명세서에 설명된 임의의 다양한 기법들을 사용하여 메모리의 타겟 구역에 데이터를 기입할 수 있다. 예컨대, 제1 코어는 도 10과 관련하여 설명된 메커니즘들 중 임의의 메커니즘을 통해 메모리의 타겟 구역에 데이터를 기입할 수 있다.
블록(2208)에서, 제1 코어는 메모리의 타겟 구역에 대한 록을 해제한다. 블록(2210)에서, 제2 코어는 제1 코어에 의해 기입된 데이터를 포함하는 메모리의 타겟 구역에 대한 록을 요청한다. 제2 코어는 메모리의 타겟 구역과 동일한 DPE에 또는 메모리의 타겟 구역과는 상이한 DPE 내에 로케이팅될 수 있다. 제2 코어는, 록을 제1 코어에 승인했던 동일한 하드웨어 동기화 회로부로부터 록을 요청한다. 블록(2212)에서, 제2 코어는 하드웨어 동기화 회로부로부터 록을 획득한다. 하드웨어 동기화 회로부는 록을 제2 코어에 승인한다. 블록(2214)에서, 제2 코어는 메모리의 타겟 구역으로부터의 데이터에 액세스하고, 프로세싱을 위해 데이터를 이용할 수 있다. 블록(2216)에서, 제2 코어는, 예컨대 메모리의 타겟 구역에 대한 액세스가 더 이상 필요하지 않을 때 메모리의 타겟 구역에 대한 록을 해제한다.
도 22의 예는 메모리의 구역에 액세스하는 것과 관련하여 설명된다. 특정한 실시예들에서, 제1 코어는 메모리의 타겟 구역에 직접 데이터를 기입할 수 있다. 다른 실시예들에서, 제1 코어는 (예컨대, 제1 DPE 내의) 메모리의 소스 구역으로부터 (예컨대, 제2 또는 상이한 DPE에 로케이팅된) 메모리의 타겟 구역으로 데이터를 이동시킬 수 있다. 그 경우, 제1 코어는 데이터 전달을 수행하기 위해, 메모리의 소스 구역 및 메모리의 타겟 구역에 대한 록들을 획득한다.
다른 실시예들에서, 제1 코어는, 제2 코어의 동작을 멈추기 위해 제2 코어에 대한 록을 획득하고, 이어서 제2 코어의 동작이 계속되게 허용하기 위해 록을 해제할 수 있다. 예컨대, 제1 코어는, 데이터가 제2 코어에 의한 사용을 위해 메모리의 타겟 구역에 기입되는 동안 제2 코어의 동작을 멈추기 위해 메모리의 타겟 구역에 대한 록들에 부가하여 제2 코어에 대한 록을 획득할 수 있다. 일단 제1 코어가 데이터 기입이 완료되면, 제1 코어는 메모리의 타겟 구역에 대한 록 및 제2 코어에 대한 록을 해제할 수 있으며, 그에 의해, 일단 제2 코어가 메모리의 타겟 구역에 대한 록을 획득하면, 제2 코어가 데이터에 대해 동작하게 허용한다.
또 다른 실시예들에서, 제1 코어는 도 10c에 예시된 바와 같이, 동일한 DPE 내의 메모리 모듈로부터, 예컨대 메모리 모듈 내의 DMA 엔진을 통한 직접 다른 코어로의 데이터 전달을 개시할 수 있다.
도 23은 DPE 어레이의 다른 예시적인 동작 방법을 예시한다. 방법(2300)은 예시의 목적들을 위해 제공되며, 본 개시내용 내에서 설명된 본 발명의 어레인지먼트들의 제한으로서 의도되지 않는다. 방법(2300)은, DPE 어레이에 구성 데이터가 로딩된 상태에서 시작한다.
블록(2302)에서, 제1 코어는 그 내에 포함된 누적 레지스터에 데이터를 배치한다. 예컨대, 제1 코어는 계산들을 수행하고 있을 수 있으며, 여기서 계산의 일부 부분은 중간 결과이든 또는 최종 결과이든 다른 코어에 직접 제공될 것이다. 그 경우, 제1 코어는 그 내에 포함된 누적 레지스터 내에 제2 코어로 전송될 데이터를 로딩할 수 있다.
블록(2304)에서, 제1 코어는 그 내에 포함된 누적 레지스터로부터의 데이터를 제1 코어의 캐스케이드 인터페이스 출력으로부터 제2 코어로 전송한다. 블록(2306)에서, 제2 코어는 제2 코어의 캐스케이드 인터페이스 입력 상에서 제1 코어로부터 데이터를 수신한다. 이어서, 제2 코어는 데이터를 프로세싱하거나 데이터를 메모리에 저장할 수 있다.
하나 이상의 실시예들에서, 코어들에 의한 캐스케이드 인터페이스들의 이용은 구성 데이터의 로딩에 의해 제어될 수 있다. 예컨대, 캐스케이드 인터페이스들은 구성 데이터에 기반하여 특정한 애플리케이션에 대해 요구되는 대로 코어들의 연속하는 쌍들 사이에서 인에이블링 또는 디스에이블링될 수 있다. 특정한 실시예들에서, 캐스케이드 인터페이스들이 인에이블링되면, 캐스케이드 인터페이스들의 사용은 코어의 프로그램 메모리에 로딩된 프로그램 코드에 기반하여 제어될 수 있다. 다른 경우들에서, 캐스케이드 인터페이스들의 사용은 코어들에 포함된 전용 회로부 및 구성 레지스터들에 의해 제어될 수 있다.
도 24는 DPE 어레이의 다른 예시적인 동작 방법을 예시한다. 방법(2400)은 예시의 목적들을 위해 제공되며, 본 개시내용 내에서 설명된 본 발명의 어레인지먼트들의 제한으로서 의도되지 않는다. 방법(2400)은, DPE 어레이에 구성 데이터가 로딩된 상태에서 시작한다.
블록(2402)에서, 제1 DPE 내의 이벤트 로직은 제1 DPE 내에서 로컬적으로 하나 이상의 이벤트들을 검출한다. 이벤트들은 코어, 메모리 모듈, 또는 코어 및 메모리 모듈 둘 모두로부터 검출될 수 있다. 블록(2404)에서, 제1 DPE 내의 이벤트 브로드캐스트 회로부는 제1 DPE에 로딩된 구성 데이터에 기반하여 이벤트들을 브로드캐스팅한다. 브로드캐스트 회로부는 블록(2402)에서 생성된 이벤트들 중 선택된 이벤트들을 브로드캐스팅할 수 있다. 이벤트 브로드캐스트 회로부는 또한, DPE 어레이(102) 내의 하나 이상의 다른 DPE들로부터 수신될 수 있는 선택된 이벤트들을 브로드캐스팅할 수 있다.
블록(2406)에서, DPE들로부터의 이벤트들은 SoC 인터페이스 블록 내의 타일들로 전파된다. 예컨대, 이벤트들은 구성 데이터에 의해 결정된 패턴들 및/또는 루트들에서 DPE들을 통해 4개의 기본 방향들 각각으로 전파될 수 있다. 특정한 DPE들 내의 브로드캐스트 회로부는 SoC 인터페이스 블록 내의 타일(들)로 이벤트들을 아래로 전파하도록 구성될 수 있다.
블록(2408)에서, SoC 인터페이스 블록의 타일(들) 내의 이벤트 로직은 선택적으로 이벤트들을 생성한다. 블록(2410)에서, SoC 인터페이스 블록의 타일(들)은 선택적으로 SoC 인터페이스 블록 내의 다른 타일들에 이벤트들을 브로드캐스팅한다. SoC 인터페이스 블록의 타일(들) 내의 브로드캐스트 회로부는 타일들 그 자체를 이용하여 생성된 이벤트들 및/또는 (예컨대, SoC 인터페이스 블록의 다른 타일이든 또는 DPE들이든) 다른 소스들로부터 수신된 이벤트들 중 선택된 이벤트들을 SoC 인터페이스 블록의 다른 타일들로 브로드캐스팅할 수 있다.
블록(2412)에서, SoC 인터페이스 블록의 타일(들)은 선택적으로 하나 이상의 인터럽트들을 생성한다. 예컨대, 인터럽트(들)는 인터럽트 핸들러(1434)에 의해 생성될 수 있다. 인터럽트 핸들러는 특정한 이벤트들, 이벤트들의 조합들, 및/또는 시간에 걸친 이벤트들의 시퀀스들을 수신하는 것에 대한 응답으로 하나 이상의 인터럽트들을 생성할 수 있다. 인터럽트 핸들러는 생성된 인터럽트(들)를 PS(312)와 같은 다른 회로부에 그리고/또는 PL(310) 내에서 구현된 회로들에 전송할 수 있다.
블록(2414)에서, SoC 인터페이스 블록의 타일(들)은 선택적으로 이벤트들을 하나 이상의 다른 회로들에 전송한다. 예컨대, CDT 회로(1420)는 이벤트들을 패킷화하고, SoC 인터페이스 블록의 타일(들)로부터 PS(312), PL(310) 내의 회로들, 외부 메모리, 또는 SoC를 갖는 다른 목적지로 이벤트들을 전송할 수 있다.
하나 이상의 실시예들에서, PS(312)는 SoC 인터페이스 블록(104)의 타일(들)에 의해 생성된 인터럽트들에 응답할 수 있다. 예컨대, PS(312)는 특정한 인터럽트들을 수신하는 것에 대한 응답으로 DPE 어레이(102)를 리세팅할 수 있다. 다른 예에서, PS(312)는 특정한 인터럽트들에 대한 응답으로 DPE 어레이(102) 또는 DPE 어레이(102)의 일부(예컨대, 부분적인 재구성을 수행함)를 재구성할 수 있다. 다른 예에서, PS(312)는 DPE들 내의 코어들에 의한 사용을 위해 그러한 DPE들의 상이한 메모리 모듈들에 새로운 데이터를 로딩하는 것과 같은 다른 액션들을 취할 수 있다.
도 24의 예에서, PS(312)는 인터럽트들에 대한 응답으로 동작들을 수행한다. 다른 실시예들에서, PS(312)는 DPE 어레이(102)에 대한 글로벌 제어기로서 동작할 수 있다. PS(312)는, 메모리 모듈들에 저장되고 런타임 동안 DPE 어레이(102)의 하나 이상의 DPE들(예컨대, 코어들)에 의해 사용되는 애플리케이션 파라미터들을 제어할 수 있다. 예시적이고 비-제한적인 예로서, 하나 이상의 DPE들은 필터를 구현하는 커널로서 동작할 수 있다. 그 경우, PS(312)는, PS(312)가 DPE 어레이(102)의 런타임 동안, 예컨대 런타임 시에 동적으로 필터의 계수들을 계산 및/또는 수정하게 허용하는 프로그램 코드를 실행할 수 있다. PS(312)는 SoC 내에서 검출된 특정한 조건들 및/또는 신호들에 대한 응답으로 계수들을 계산 및/또는 업데이트할 수 있다. 예컨대, PS(312)는 일부 검출된 조건에 대한 응답으로, 필터에 대한 새로운 계수들을 컴퓨팅하고 그리고/또는 그러한 계수들을 애플리케이션 메모리(예컨대, 하나 이상의 메모리 모듈들)에 기입할 수 있다. PS(312)로 하여금 계수들과 같은 데이터를 메모리 모듈(들)에 기입하게 할 수 있는 조건들의 예들은, DPE 어레이(102)로부터 특정한 데이터를 수신하는 것, SoC 인터페이스 블록으로부터 인터럽트들을 수신하는 것, DPE 어레이(102)로부터 이벤트 데이터를 수신하는 것, SoC 외부의 소스로부터 신호를 수신하는 것, SoC 내로부터 다른 신호를 수신하는 것, 및/또는 SoC 내의 소스로부터 또는 SoC 외부로부터 새로운 및/또는 업데이트된 계수들을 수신하는 것을 포함할 수 있다(그러나 이에 제한되지 않음). PS(312)는 새로운 계수들을 컴퓨팅하고 그리고/또는 새로운 계수들을 애플리케이션 데이터, 예컨대 코어 및/또는 코어들에 의해 이용되는 메모리 모듈에 기입할 수 있다.
다른 예에서, PS(312)는 DPE들의 시작, 중지, 및/또는 단일-스텝핑 실행과 같은 액션들을 수행할 수 있는 디버거 애플리케이션을 실행할 수 있다. PS(312)는 NoC(308)를 통해 DPE들의 시작, 중지, 및/또는 단일-스텝핑을 제어할 수 있다. 다른 예들에서, PL(310)에서 구현된 회로들은 또한, 디버깅 동작들을 사용하여 DPE들의 동작을 제어할 수 있을 수 있다.
설명의 목적들을 위해, 특정한 명칭이 본 명세서에서 개시된 다양한 본 발명의 개념들의 완전한 이해를 제공하도록 기재된다. 그러나, 본 명세서에서 사용된 용어는 단지 본 발명의 어레인지먼트들의 특정한 양상들을 설명하려는 목적을 위한 것일 뿐이며, 제한하는 것으로 의도되지 않는다.
본 명세서에서 정의된 바와 같이, 단수형들은, 문맥상 명확하게 달리 표시되지 않으면, 복수형들을 또한 포함하도록 의도된다.
본 명세서에서 정의된 바와 같이, 용어들 "적어도 하나", "하나 이상", 및 "및/또는"은 달리 명확하게 나타내지 않으면, 동작에서 연결형 및 분리형 둘 모두인 개방형(open-ended) 표현들이다. 예컨대, 표현들 "A, B 및 C 중 적어도 하나", "A, B, 또는 C 중 적어도 하나", "A, B, 및 C 중 하나 이상", "A, B, 또는 C 중 하나 이상", 및 "A, B, 및/또는 C" 각각은, A 단독, B 단독, C 단독, A와 B 모두, A와 C 모두, B와 C 모두, 또는 A, B 및 C 모두를 의미한다.
본 명세서에서 정의된 바와 같이, 용어 "자동으로"는 사람 개입이 없는 것을 의미한다.
본 명세서에서 정의된 바와 같이, 용어 "~라면"은 맥락에 의존하여, "때" 또는 "~시에" 또는 "~에 대한 응답으로" 또는 "~에 응답하여"를 의미한다. 따라서, 어구 "결정되면" 또는 "[언급된 조건 또는 이벤트]가 검출되면"은 문맥에 의존하여, "결정할 시에" 또는 "결정하는 것에 대한 응답으로" 또는 "[언급된 조건 또는 이벤트]를 검출할 시에" 또는 "[언급된 조건 또는 이벤트]를 검출하는 것에 대한 응답으로" 또는 "[언급된 조건 또는 이벤트]를 검출하는 것에 응답하여"를 의미하도록 해석될 수 있다.
본 명세서에서 정의된 바와 같이, 용어 "~에 응답하여" 및 위에서 설명된 바와 같은 유사한 언어, 예컨대 "~라면", "때", 또는 "~시에"는 액션 또는 이벤트에 쉽게 응답 또는 반응하는 것을 의미한다. 응답 또는 반응은 자동으로 수행된다. 따라서, 제2 액션이 제1 액션"에 응답하여" 수행되면, 제1 액션의 발생과 제2 액션의 발생 사이에 인과 관계가 존재한다. 용어 "에 응답하여"는 인과 관계를 표시한다.
본 명세서에서 정의된 바와 같이, 용어들 "일 실시예", "실시예", "하나 이상의 실시예들", "특정한 실시예들", 또는 유사한 언어는, 실시예와 관련하여 설명된 특정한 특징, 구조, 또는 특성이 본 개시내용 내에서 설명된 적어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서, 본 개시내용 전반에 걸친 어구들 "일 실시예에서", "실시예에서", "하나 이상의 실시예들에서", "특정한 실시예들에서", 및 유사 언어의 출현들은 모두 동일한 실시예를 지칭할 수 있지만, 반드시 그러할 필요는 없다. 용어들 "실시예" 및 "어레인지먼트"는 본 개시내용 내에서 상호교환가능하게 사용된다.
본 명세서에서 정의된 바와 같이, 용어 "실질적으로"는, 언급된 특성, 파라미터, 또는 값이 정확하게 달성될 필요가 있다는 것이 아니라, 예컨대 허용오차들, 측정 에러, 측정 정확도 제한들, 및 당업자들에게 알려져 있는 다른 인자들을 포함하는 편차들 또는 변동들은 특성이 제공하고자 했던 효과를 배제하지 않는 양들로 발생할 수 있다는 것을 의미한다.
용어들 제1, 제2 등은 다양한 엘리먼트들을 설명하기 위해 본 명세서에서 사용될 수 있다. 달리 언급되지 않거나 또는 문맥상 명확하게 달리 표시되지 않으면, 이들 용어들이 하나의 엘리먼트를 다른 엘리먼트와 구별하기 위해서만 사용되므로, 이들 엘리먼트들은 이들 용어들에 의해 제한되지 않아야 한다.
도면들 내의 흐름도 및 블록 다이어그램들은 본 발명의 어레인지먼트들의 다양한 양상들에 따른, 시스템들, 디바이스들, 및/또는 방법들의 가능한 구현들의 아키텍처, 기능, 및 동작을 예시한다. 몇몇 대안적인 구현들에서, 블록들에서 언급된 동작들은 도면들에서 언급된 순서를 벗어나 발생될 수 있다. 예컨대, 수반된 기능에 의존하여, 연속적으로 도시된 2개의 블록들은 실질적으로 동시에 실행될 수 있거나 또는 블록들은 종종 역순으로 실행될 수 있다. 다른 예들에서, 블록들은 일반적으로 증가하는 숫자 순서로 수행될 수 있는 반면, 또 다른 예들에서, 하나 이상의 블록들은 다양한 순서로 수행될 수 있어서, 결과들은 바로 후속하지 않는 후속 또는 다른 블록들에 저장되고 이용된다.
아래의 청구항들에서 발견될 수 있는 모든 수단 또는 단계 더하기 기능 엘리먼트들의 대응하는 구조들, 재료들, 동작들, 및 등가물들은, 구체적으로 청구된 바와 같은 다른 청구된 엘리먼트들과 조합하여 기능을 수행하기 위한 임의의 구조, 재료, 또는 동작을 포함하도록 의도된다.
하나 이상의 실시예들에서, 디바이스는 복수의 DPE들을 포함할 수 있다. 각각의 DPE는 코어 및 메모리 모듈을 포함할 수 있다. 각각의 코어는, 동일한 DPE 내의 메모리 모듈 및 복수의 DPE들 중 적어도 하나의 다른 DPE 내의 메모리 모듈에 액세스하도록 구성될 수 있다.
일 양상에서, 각각의 코어는 복수의 이웃한 DPE들의 메모리 모듈들에 액세스하도록 구성될 수 있다.
다른 양상에서, 복수의 DPE들의 코어들이 직접 커플링될 수 있다.
다른 양상에서, 복수의 DPE들 각각은 하드와이어링되고 프로그래밍가능한 회로 블록이다.
다른 양상에서, 각각의 DPE는, 복수의 DPE들로부터 선택된 하나 이상의 DPE들과 통신하도록 구성된 스트림 스위치를 포함하는 상호연결 회로부를 포함할 수 있다. 스트림 스위치는 하나 이상의 선택된 DPE들, 예컨대 다른 DPE들과 통신하도록 프로그래밍가능할 수 있다.
디바이스는 또한, 서브시스템, 및 복수의 DPE들을 디바이스의 서브시스템에 커플링시키도록 구성된 SoC 인터페이스 블록을 포함할 수 있다. 일 양상에서, 서브시스템은 프로그래밍가능 로직을 포함한다. 다른 양상에서, 서브시스템은 프로그램 코드를 실행하도록 구성된 프로세서를 포함한다. 또 다른 양상에서, 서브시스템은 주문형 집적 회로 및/또는 아날로그/믹싱된 신호 회로부를 포함한다.
다른 양상에서, 스트림 스위치는 SoC 인터페이스 블록에 커플링되며, 디바이스의 서브시스템과 통신하도록 구성된다.
다른 양상에서, 각각의 DPE의 상호연결 회로부는 SoC 인터페이스 블록에 커플링된 메모리 맵핑된 스위치를 포함할 수 있으며, 여기서 메모리 맵핑된 스위치는 SoC 인터페이스 블록으로부터 DPE를 프로그래밍하기 위한 구성 데이터를 통신하도록 구성된다. 메모리 맵핑된 스위치는 SoC 인터페이스 블록과 제어 데이터 또는 디버깅 데이터 중 적어도 하나를 통신하도록 구성될 수 있다.
다른 양상에서, 복수의 DPE들은 이벤트 브로드캐스트 네트워크에 의해 상호연결될 수 있다.
다른 양상에서, SoC 인터페이스 블록은 서브시스템과 복수의 DPE들의 이벤트 브로드캐스트 네트워크 사이에서 이벤트들을 교환하도록 구성될 수 있다.
하나 이상의 실시예들에서, 방법은, 제1 데이터 프로세싱 엔진의 제1 코어가 데이터를 생성하는 단계, 제1 코어가 제1 데이터 프로세싱 엔진 내의 제1 메모리 모듈에 데이터를 기입하는 단계, 및 제2 데이터 프로세싱 엔진의 제2 코어가 제1 메모리 모듈로부터 데이터를 판독하는 단계를 포함할 수 있다.
일 양상에서, 방법은 제1 DPE 및 제2 DPE가 이웃한 DPE들인 것을 포함할 수 있다.
다른 양상에서, 방법은, 제1 코어가 캐스케이드 인터페이스를 통해 제2 코어에 직접 추가적인 애플리케이션 데이터를 제공할 수 있는 단계를 포함할 수 있다.
다른 양상에서, 방법은, 제1 코어가 스트림 스위치를 통해 제3 DPE에 추가적인 애플리케이션 데이터를 제공할 수 있는 단계를 포함할 수 있다.
다른 양상에서, 방법은, 제2 DPE를 포함하는 선택된 다른 DPE들과 통신하도록 제1 DPE를 프로그래밍하는 단계를 포함할 수 있다.
하나 이상의 실시예들에서, 디바이스는 복수의 데이터 프로세싱 엔진들, 서브시스템, 및 복수의 데이터 프로세싱 엔진들 및 서브시스템에 커플링된 SoC 인터페이스 블록을 포함할 수 있다. SoC 인터페이스 블록은 서브시스템과 복수의 데이터 프로세싱 엔진들 사이에서 데이터를 교환하도록 구성될 수 있다.
일 양상에서, 서브시스템은 프로그래밍가능 로직을 포함한다. 다른 양상에서, 서브시스템은 프로그램 코드를 실행하도록 구성된 프로세서를 포함한다. 다른 양상에서, 서브시스템은 주문형 집적 회로 및/또는 아날로그/믹싱된 신호 회로부를 포함한다.
다른 양상에서, SoC 인터페이스 블록은 복수의 타일들을 포함하며, 여기서 각각의 타일은 복수의 DPE들의 서브세트와 통신하도록 구성된다.
다른 양상에서, 각각의 타일은 구성 데이터의 제1 부분을 적어도 하나의 이웃한 타일에 제공하고 구성 데이터의 제2 부분을 복수의 DPE들의 서브세트 중 적어도 하나의 DPE에 제공하도록 구성된 메모리 맵핑된 스위치를 포함할 수 있다.
다른 양상에서, 각각의 타일은 제1 데이터를 적어도 하나의 이웃한 타일에 제공하고 제2 데이터를 복수의 DPE들 중 적어도 하나에 제공하도록 구성된 스트림 스위치를 포함할 수 있다.
다른 양상에서, 각각의 타일은 타일 내에서 생성된 이벤트들 및 타일 외부의 회로부로부터의 이벤트들을 수신하도록 구성된 이벤트 브로드캐스트 회로부를 포함할 수 있으며, 여기서 이벤트 브로드캐스트 회로부는 이벤트들 중 선택된 이벤트들을 선택된 목적지들에 제공하도록 프로그래밍가능하다.
다른 양상에서, SoC 인터페이스 블록은, 선택된 이벤트들을 패킷화하고 패킷화된 선택된 이벤트들을 서브시스템에 제공하도록 구성된 제어, 디버그, 및 트레이스 회로를 포함할 수 있다.
다른 양상에서, SoC 인터페이스 블록은 이벤트 브로드캐스트 회로부를 서브시스템에 커플링시키는 인터페이스를 포함할 수 있다.
하나 이상의 실시예들에서, SoC 인터페이스 블록에 대한 타일은, 구성 데이터의 제1 부분을 이웃한 타일에 제공하고, 구성 데이터의 제2 부분을 복수의 데이터 프로세싱 엔진들 중 일 데이터 프로세싱 엔진에 제공하도록 구성된 메모리 맵핑된 스위치를 포함할 수 있다. 타일은, 제1 데이터를 적어도 하나의 이웃한 타일에 제공하고, 제2 데이터를 복수의 데이터 프로세싱 엔진들 중 일 데이터 프로세싱 엔진에 제공하도록 구성된 스트림 스위치를 포함할 수 있다. 타일은 타일 내에서 생성된 이벤트들 및 타일 외부의 회로부로부터의 이벤트들을 수신하도록 구성된 이벤트 브로드캐스트 회로부를 포함할 수 있으며, 여기서 이벤트 브로드캐스트 회로부는 이벤트들 중 선택된 이벤트들을 선택된 목적지들에 제공하도록 프로그래밍가능하다. 타일은, 타일을 포함하는 디바이스의 서브시스템에 메모리 맵핑된 스위치, 스트림 스위치, 및 이벤트 브로드캐스트 회로부를 커플링시키는 인터페이스 회로부를 포함할 수 있다.
일 양상에서, 서브시스템은 프로그래밍가능 로직을 포함한다. 다른 양상에서, 서브시스템은 프로그램 코드를 실행하도록 구성된 프로세서를 포함한다. 다른 양상에서, 서브시스템은 주문형 집적 회로 및/또는 아날로그/믹싱된 신호 회로부를 포함한다.
다른 양상에서, 이벤트 브로드캐스트 회로부는, 타일 내에서 생성된 이벤트 또는 복수의 DPE들 중 적어도 하나로부터 수신된 이벤트를 서브시스템에 제공하도록 프로그래밍가능하다.
다른 양상에서, 이벤트 브로드캐스트 회로부는 서브시스템 내에서 생성된 이벤트를 적어도 하나의 이웃한 타일 또는 복수의 DPE들 중 적어도 하나에 제공하도록 프로그래밍가능하다.
다른 양상에서, 타일은, 이벤트 브로드캐스트 회로부로부터 수신된 이벤트들에 기반하여 디바이스의 프로세서에 대한 인터럽트들을 선택적으로 생성하도록 구성된 인터럽트 핸들러를 포함할 수 있다.
다른 양상에서, 타일은 복수의 DPE들에 분배되는 클록 신호를 생성하도록 구성된 클록 생성 회로를 포함할 수 있다.
다른 양상에서, 인터페이스 회로부는 스트림 멀티플렉서/디멀티플렉서, 프로그래밍가능 로직 인터페이스, 다이렉트 메모리 액세스 엔진, 및 NoC 스트림 인터페이스를 포함할 수 있다. 스트림 멀티플렉서/디멀티플렉서는 스트림 스위치를 프로그래밍가능 로직 인터페이스, 다이렉트 메모리 액세스 엔진, 및 네트워크-온-칩 스트림 인터페이스에 커플링시킬 수 있다. 스트림 멀티플렉서/디멀티플렉서는 스트림 스위치, 프로그래밍가능 로직 인터페이스, 다이렉트 메모리 액세스 엔진, 및 NoC 스트림 인터페이스 사이에서 데이터를 라우팅하도록 프로그래밍가능할 수 있다.
다른 양상에서, 타일은 DMA 엔진 및 NoC 스트림 인터페이스에 커플링된 스위치를 포함할 수 있으며, 여기서 스위치는 DMA 엔진 또는 NoC 스트림 인터페이스를 NoC에 선택적으로 커플링시킨다. 타일은 또한, NoC를 메모리 맵핑된 스위치와 커플링시키는 브리지 회로를 포함할 수 있다. 브리지 회로는 NoC로부터의 데이터를 메모리 맵핑된 스위치에 의해 사용가능한 포맷으로 변환하도록 구성된다.
하나 이상의 실시예들에서, 디바이스는 복수의 데이터 프로세싱 엔진들을 포함할 수 있다. 데이터 프로세싱 엔진들 각각은 코어 및 메모리 모듈을 포함할 수 있다. 복수의 데이터 프로세싱 엔진들은 복수의 행들로 조직화될 수 있다. 각각의 코어는, 복수의 데이터 프로세싱 엔진들 중 다른 이웃한 데이터 프로세싱 엔진들과, 이웃한 데이터 프로세싱 엔진들의 메모리 모듈들에 대한 공유된 액세스에 의해 통신하도록 구성될 수 있다.
일 양상에서, 각각의 DPE의 메모리 모듈은 메모리, 및 메모리에 대한 복수의 메모리 인터페이스들을 포함한다. 복수의 메모리 인터페이스들 중 제1 메모리 인터페이스는 동일한 DPE 내의 코어에 커플링될 수 있고, 복수의 메모리 인터페이스들 중 각각의 다른 메모리 인터페이스는 복수의 DPE들 중 상이한 DPE의 코어에 커플링될 수 있다.
다른 양상에서, 복수의 DPE들은 복수의 열들로 추가로 조직화될 수 있으며, 여기서 열들 내의 복수의 DPE들의 코어들이 정렬되고, 열들 내의 복수의 DPE들의 메모리 모듈들이 정렬된다.
다른 양상에서, 선택된 DPE의 메모리 모듈은, 선택된 DPE 바로 위의 DPE의 코어에 커플링된 제1 메모리 인터페이스, 선택된 DPE 내의 코어에 커플링된 제2 메모리 인터페이스, 선택된 DPE에 바로 인접한 DPE의 코어에 커플링된 제3 메모리 인터페이스, 및 선택된 DPE 바로 아래의 DPE의 코어에 커플링된 제4 메모리 인터페이스를 포함할 수 있다.
다른 양상에서, 선택된 DPE는 메모리 모듈들에 대한 공유된 액세스를 통해, 복수의 DPE들 중 적어도 10개의 DPE들의 그룹과 통신하도록 구성된다.
다른 양상에서, 그룹의 적어도 2개의 DPE들은 복수의 DPE들 중 적어도 10개의 DPE들의 그룹의 하나 초과의 메모리 모듈에 액세스하도록 구성된다.
다른 양상에서, DPE들의 복수의 행들은, 복수의 DPE들의 제1 서브세트를 포함하는 제1 행 및 DPE들의 제2 서브세트를 포함하는 제2 행을 포함할 수 있으며, 여기서 제2 행의 각각의 DPE의 배향은 제1 행의 각각의 DPE의 배향에 대해 수평으로 반전된다.
다른 양상에서, 선택된 DPE의 메모리 모듈은, 선택된 DPE 바로 위의 DPE의 코어에 커플링된 제1 메모리 인터페이스, 선택된 DPE 내의 코어에 커플링된 제2 메모리 인터페이스, 선택된 DPE에 바로 인접한 DPE의 코어에 커플링된 제3 메모리 인터페이스, 및 선택된 DPE 바로 아래의 DPE의 코어에 커플링된 제4 메모리 인터페이스를 포함할 수 있다.
다른 양상에서, 선택된 DPE는 메모리 모듈들에 대한 공유된 액세스를 통해, 복수의 DPE들 중 적어도 8개의 DPE들의 그룹과 통신하도록 구성될 수 있다.
다른 양상에서, 그룹의 적어도 4개의 DPE들은 복수의 DPE들 중 적어도 8개의 DPE들의 그룹의 하나 초과의 메모리 모듈에 액세스하도록 구성된다.
하나 이상의 실시예들에서, 디바이스는 복수의 데이터 프로세싱 엔진들을 포함할 수 있다. 데이터 프로세싱 엔진들 각각은, 복수의 메모리 뱅크들을 갖는 메모리 풀, 메모리 풀에 각각 커플링되며, 복수의 메모리 뱅크들에 액세스하도록 구성된 복수의 코어들, 적어도 하나의 이웃한 데이터 프로세싱 엔진의 메모리 맵핑된 스위치 및 메모리 풀에 커플링된 메모리 맵핑된 스위치, 및 복수의 코어들 각각에 그리고 적어도 하나의 이웃한 데이터 프로세싱 엔진의 스트림 스위치에 커플링된 스트림 스위치를 포함할 수 있다.
일 양상에서, 메모리 풀은, 복수의 메모리 뱅크들 각각에 커플링된 크로스바, 및 복수의 코어들 각각 및 크로스바에 커플링된 인터페이스를 포함할 수 있다.
다른 양상에서, 각각의 DPE는 메모리 풀 및 스트림 스위치에 커플링된 다이렉트 메모리 액세스 엔진을 포함할 수 있으며, 여기서 다이렉트 메모리 액세스 엔진은, 메모리 풀로부터 스트림 스위치로 데이터를 제공하고 스트림 스위치로부터 메모리 풀에 데이터를 기입하도록 구성된다.
다른 양상에서, 메모리 풀은 크로스바 및 다이렉트 메모리 액세스 엔진에 커플링된 추가적인 인터페이스를 포함할 수 있다.
다른 양상에서, 복수의 코어들 각각은 복수의 메모리 뱅크들에 대한 공유된 액세스를 갖는다.
다른 양상에서, 각각의 DPE 내에서, 메모리 맵핑된 스위치는 DPE를 프로그래밍하기 위한 구성 데이터를 수신하도록 구성될 수 있다.
다른 양상에서, 스트림 스위치는 구성 데이터에 기반하여 복수의 DPE들 중 상이한 DPE들과의 연결들을 설정하도록 프로그래밍가능하다.
다른 양상에서, 각각의 타일 내의 복수의 코어들은 직접 커플링될 수 있다.
다른 양상에서, 각각의 DPE 내에서, 복수의 코어들 중 처음 코어는 제1 이웃한 DPE 내의 코어에 직접 커플링될 수 있고, 복수의 코어들 중 마지막 코어는 제2 이웃한 DPE 내의 코어에 직접 커플링된다.
다른 양상에서, 복수의 코어들 각각은 비활성화되도록 프로그래밍가능할 수 있다.
본 명세서에서 제공된 본 발명의 어레인지먼트들의 설명은 예시의 목적들을 위한 것이며, 포괄적인 것으로 의도되거나 또는 개시된 형태 및 예들로 제한되지 않는다. 본 명세서에서 사용된 용어는 본 발명의 어레인지먼트들의 원리들, 시장에서 발견되는 기술들에 대한 실제적인 애플리케이션 또는 기술적 개선을 설명하고, 그리고/또는 당업자들이 본 명세서에 개시된 본 발명의 어레인지먼트들을 이해할 수 있도록 선정되었다. 변형들 및 변경들은 설명된 본 발명의 어레인지먼트들의 범위 및 사상을 벗어나지 않으면서 당업자들에게 자명할 수 있다. 따라서, 전술한 개시내용보다는, 그러한 특징들 및 구현들의 범위를 표시하는 다음의 청구항들에 대한 참조가 이루어져야 한다.

Claims (20)

  1. 디바이스로서,
    복수의 데이터 프로세싱 엔진들을 포함하며;
    각각의 데이터 프로세싱 엔진은 코어 및 메모리 모듈을 포함하고;
    상기 복수의 데이터 프로세싱 엔진들은 복수의 행들로 조직화되고;
    각각의 코어는, 상기 복수의 데이터 프로세싱 엔진들 중 다른 이웃한 데이터 프로세싱 엔진들과, 상기 이웃한 데이터 프로세싱 엔진들의 메모리 모듈들에 대한 공유된 액세스에 의해 통신하도록 구성되는, 디바이스.
  2. 제1항에 있어서,
    각각의 데이터 프로세싱 엔진의 메모리 모듈은, 메모리 및 상기 메모리에 대한 복수의 메모리 인터페이스들을 포함하며,
    상기 복수의 메모리 인터페이스들 중 제1 메모리 인터페이스는 동일한 데이터 프로세싱 엔진 내의 코어에 커플링되고,
    상기 복수의 메모리 인터페이스들 중 각각의 다른 메모리 인터페이스는 상기 복수의 데이터 프로세싱 엔진들 중 상이한 데이터 프로세싱 엔진의 코어에 커플링되는, 디바이스.
  3. 제2항에 있어서,
    상기 복수의 데이터 프로세싱 엔진들은 복수의 열들로 추가로 조직화되며,
    상기 열들 내의 상기 복수의 데이터 프로세싱 엔진들의 코어들이 정렬되고, 상기 열들 내의 상기 복수의 데이터 프로세싱 엔진들의 메모리 모듈들이 정렬되는, 디바이스.
  4. 제3항에 있어서,
    선택된 데이터 프로세싱 엔진의 메모리 모듈은,
    상기 선택된 데이터 프로세싱 엔진 바로 위의 데이터 프로세싱 엔진의 코어에 커플링된 제1 메모리 인터페이스;
    상기 선택된 데이터 프로세싱 엔진 내의 코어에 커플링된 제2 메모리 인터페이스;
    상기 선택된 데이터 프로세싱 엔진에 바로 인접한 데이터 프로세싱 엔진의 코어에 커플링된 제3 메모리 인터페이스; 및
    상기 선택된 데이터 프로세싱 엔진 바로 아래의 데이터 프로세싱 엔진의 코어에 커플링된 제4 메모리 인터페이스를 포함하는, 디바이스.
  5. 제3항에 있어서,
    선택된 데이터 프로세싱 엔진은, 메모리 모듈들에 대한 공유된 액세스를 통해, 상기 복수의 데이터 프로세싱 엔진들 중 적어도 10개의 데이터 프로세싱 엔진들의 그룹과 통신하도록 구성되는, 디바이스.
  6. 제5항에 있어서,
    상기 그룹의 적어도 2개의 데이터 프로세싱 엔진들은, 상기 복수의 데이터 프로세싱 엔진들 중 상기 적어도 10개의 데이터 프로세싱 엔진들의 그룹의 하나 초과의 메모리 모듈에 액세스하도록 구성되는, 디바이스.
  7. 제2항에 있어서,
    상기 데이터 프로세싱 엔진들의 복수의 행들은,
    상기 복수의 데이터 프로세싱 엔진들의 제1 서브세트를 포함하는 제1 행; 및
    상기 데이터 프로세싱 엔진들의 제2 서브세트를 포함하는 제2 행을 포함하며,
    상기 제2 행의 각각의 데이터 프로세싱 엔진의 배향은 상기 제1 행의 각각의 데이터 프로세싱 엔진의 배향에 대해 수평으로 반전되는, 디바이스.
  8. 제7항에 있어서,
    선택된 데이터 프로세싱 엔진의 메모리 모듈은,
    상기 선택된 데이터 프로세싱 엔진 바로 위의 데이터 프로세싱 엔진의 코어에 커플링된 제1 메모리 인터페이스;
    상기 선택된 데이터 프로세싱 엔진 내의 코어에 커플링된 제2 메모리 인터페이스;
    상기 선택된 데이터 프로세싱 엔진에 바로 인접한 데이터 프로세싱 엔진의 코어에 커플링된 제3 메모리 인터페이스; 및
    상기 선택된 데이터 프로세싱 엔진 바로 아래의 데이터 프로세싱 엔진의 코어에 커플링된 제4 메모리 인터페이스를 포함하는, 디바이스.
  9. 제7항에 있어서,
    선택된 데이터 프로세싱 엔진은, 메모리 모듈들에 대한 공유된 액세스를 통해, 상기 복수의 데이터 프로세싱 엔진들 중 적어도 8개의 데이터 프로세싱 엔진들의 그룹과 통신하도록 구성되는, 디바이스.
  10. 제9항에 있어서,
    상기 그룹의 적어도 4개의 데이터 프로세싱 엔진들은, 상기 복수의 데이터 프로세싱 엔진들 중 상기 적어도 8개의 데이터 프로세싱 엔진들의 그룹의 하나 초과의 메모리 모듈에 액세스하도록 구성되는, 디바이스.
  11. 디바이스로서,
    복수의 데이터 프로세싱 엔진들을 포함하며;
    각각의 데이터 프로세싱 엔진은,
    복수의 메모리 뱅크들을 갖는 메모리 풀(pool);
    복수의 코어들 - 각각의 코어는 상기 메모리 풀에 커플링되며, 상기 복수의 메모리 뱅크들에 액세스하도록 구성됨 -;
    상기 메모리 풀에 그리고 적어도 하나의 이웃한 데이터 프로세싱 엔진의 메모리 맵핑된 스위치에 커플링된 메모리 맵핑된 스위치; 및
    상기 복수의 코어들 각각에 그리고 상기 적어도 하나의 이웃한 데이터 프로세싱 엔진의 스트림 스위치에 커플링된 스트림 스위치를 포함하는, 디바이스.
  12. 제11항에 있어서,
    상기 메모리 풀은,
    상기 복수의 메모리 뱅크들 각각에 커플링된 크로스바(crossbar);
    상기 복수의 코어들 각각에 그리고 상기 크로스바에 커플링된 인터페이스를 포함하는, 디바이스.
  13. 제12항에 있어서,
    각각의 데이터 프로세싱 엔진은, 상기 메모리 풀 및 상기 스트림 스위치에 커플링된 다이렉트 메모리 액세스 엔진을 더 포함하며,
    상기 다이렉트 메모리 액세스 엔진은, 상기 메모리 풀로부터 상기 스트림 스위치로 데이터를 제공하고, 상기 스트림 스위치로부터 상기 메모리 풀에 데이터를 기입하도록 구성되는, 디바이스.
  14. 제13항에 있어서,
    상기 메모리 풀은, 상기 크로스바 및 상기 다이렉트 메모리 액세스 엔진에 커플링된 추가적인 인터페이스를 더 포함하는, 디바이스.
  15. 제11항에 있어서,
    상기 복수의 코어들 각각은 상기 복수의 메모리 뱅크들에 대한 공유된 액세스를 갖는, 디바이스.
  16. 제11항에 있어서,
    각각의 데이터 프로세싱 엔진 내에서, 상기 메모리 맵핑된 스위치는 상기 데이터 프로세싱 엔진을 프로그래밍하기 위한 구성 데이터를 수신하도록 구성되는, 디바이스.
  17. 제16항에 있어서,
    상기 스트림 스위치는 상기 구성 데이터에 기반하여 상기 복수의 데이터 프로세싱 엔진들 중 상이한 데이터 프로세싱 엔진들과의 연결들을 설정하도록 프로그래밍가능한, 디바이스.
  18. 제11항에 있어서,
    각각의 타일 내의 상기 복수의 코어들은 직접 커플링되는, 디바이스.
  19. 제18항에 있어서,
    각각의 데이터 프로세싱 엔진 내에서, 상기 복수의 코어들 중 처음 코어는 제1 이웃한 데이터 프로세싱 엔진 내의 코어에 직접 커플링되고, 상기 복수의 코어들 중 마지막 코어는 제2 이웃한 데이터 프로세싱 엔진 내의 코어에 직접 커플링되는, 디바이스.
  20. 제11항에 있어서,
    상기 복수의 코어들 각각은 비활성화되도록 프로그래밍가능한, 디바이스.
KR1020207030909A 2018-04-03 2019-04-02 디바이스의 데이터 프로세싱 엔진 어레인지먼트 KR20200138310A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/944,160 2018-04-03
US15/944,160 US10866753B2 (en) 2018-04-03 2018-04-03 Data processing engine arrangement in a device
PCT/US2019/025414 WO2019195309A2 (en) 2018-04-03 2019-04-02 Data processing engine arrangement in a device

Publications (1)

Publication Number Publication Date
KR20200138310A true KR20200138310A (ko) 2020-12-09

Family

ID=66397426

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207030909A KR20200138310A (ko) 2018-04-03 2019-04-02 디바이스의 데이터 프로세싱 엔진 어레인지먼트

Country Status (6)

Country Link
US (3) US10866753B2 (ko)
EP (1) EP3776240A2 (ko)
JP (2) JP7398384B2 (ko)
KR (1) KR20200138310A (ko)
CN (1) CN111936984A (ko)
WO (1) WO2019195309A2 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11379389B1 (en) 2018-04-03 2022-07-05 Xilinx, Inc. Communicating between data processing engines using shared memory
US10866753B2 (en) 2018-04-03 2020-12-15 Xilinx, Inc. Data processing engine arrangement in a device
US10747690B2 (en) 2018-04-03 2020-08-18 Xilinx, Inc. Device with data processing engine array
US10656202B1 (en) * 2018-09-21 2020-05-19 Xilinx, Inc. Electronic device including integrated circuit with debug capabilities
GB202100742D0 (en) * 2021-01-20 2021-03-03 Graphcore Ltd Exchange between stacked die
US11188312B2 (en) 2019-05-23 2021-11-30 Xilinx, Inc. Hardware-software design flow with high-level synthesis for heterogeneous and programmable devices
US11301295B1 (en) 2019-05-23 2022-04-12 Xilinx, Inc. Implementing an application specified as a data flow graph in an array of data processing engines
US10891132B2 (en) 2019-05-23 2021-01-12 Xilinx, Inc. Flow convergence during hardware-software design for heterogeneous and programmable devices
US10891414B2 (en) 2019-05-23 2021-01-12 Xilinx, Inc. Hardware-software design flow for heterogeneous and programmable devices
US11050527B1 (en) * 2019-06-26 2021-06-29 Keysight Technologies, Inc. Methods, systems, and computer readable media for testing of hardened forward error correction (FEC) implementations
US11102104B1 (en) 2019-08-30 2021-08-24 Keysight Technologies, Inc. Methods, systems, and computer readable media for generating analog-distorted test data
US10977018B1 (en) 2019-12-05 2021-04-13 Xilinx, Inc. Development environment for heterogeneous devices
US11323391B1 (en) 2020-03-27 2022-05-03 Xilinx, Inc. Multi-port stream switch for stream interconnect network
US11443091B1 (en) 2020-07-31 2022-09-13 Xilinx, Inc. Data processing engines with cascade connected cores
US11704271B2 (en) * 2020-08-20 2023-07-18 Alibaba Group Holding Limited Scalable system-in-package architectures
US11520717B1 (en) 2021-03-09 2022-12-06 Xilinx, Inc. Memory tiles in data processing engine array
US11336287B1 (en) 2021-03-09 2022-05-17 Xilinx, Inc. Data processing engine array architecture with memory tiles
CN113190291B (zh) * 2021-05-25 2023-06-02 电子科技大学 一种基于片上网络数据采集的可配置协议转换系统及方法
CN113282536B (zh) * 2021-07-26 2021-11-30 浙江毫微米科技有限公司 基于内存密集型算法的数据处理系统和计算机设备
US11829733B2 (en) * 2021-11-22 2023-11-28 Xilinx, Inc. Synthesis flow for data processing engine array applications relying on hardware library packages
US11848670B2 (en) 2022-04-15 2023-12-19 Xilinx, Inc. Multiple partitions in a data processing array
CN114741355A (zh) * 2022-04-25 2022-07-12 电子科技大学 一种基于Soc的数据封装方法
CN115543908B (zh) * 2022-11-28 2023-03-28 成都航天通信设备有限责任公司 基于FPGA的Aurora总线数据交互系统

Family Cites Families (69)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3102188A (en) 1959-08-12 1963-08-27 Kaiser Aluminium Chem Corp Welding method
US3776137A (en) 1971-09-24 1973-12-04 Aai Corp Projectile and cartridge arrangement
GB8608312D0 (en) 1986-04-04 1986-05-08 British Petroleum Co Plc Process control units
GB8618943D0 (en) 1986-08-02 1986-09-10 Int Computers Ltd Data processing apparatus
JPH01263858A (ja) * 1988-04-15 1989-10-20 Nec Corp マルチプロセッサシステム
US5794062A (en) 1995-04-17 1998-08-11 Ricoh Company Ltd. System and method for dynamically reconfigurable computing using a processing unit having changeable internal hardware organization
JPH10129012A (ja) 1996-10-29 1998-05-19 Seiko Epson Corp インク切れ時の記録方法および記録装置
US6091263A (en) 1997-12-12 2000-07-18 Xilinx, Inc. Rapidly reconfigurable FPGA having a multiple region architecture with reconfiguration caches useable as data RAM
US6204687B1 (en) 1999-08-13 2001-03-20 Xilinx, Inc. Method and structure for configuring FPGAS
JP3946393B2 (ja) 1999-10-19 2007-07-18 株式会社東芝 階層構造をもつ並列計算機
JP3674515B2 (ja) * 2000-02-25 2005-07-20 日本電気株式会社 アレイ型プロセッサ
GB0012773D0 (en) * 2000-05-25 2000-07-19 Radioscape Ltd Programmable single-chip device and related development environment
US6526557B1 (en) 2000-07-25 2003-02-25 Xilinx, Inc. Architecture and method for partially reconfiguring an FPGA
US6836842B1 (en) 2001-04-24 2004-12-28 Xilinx, Inc. Method of partial reconfiguration of a PLD in which only updated portions of configuration data are selected for reconfiguring the PLD
US6462579B1 (en) 2001-04-26 2002-10-08 Xilinx, Inc. Partial reconfiguration of a programmable gate array using a bus macro
US6759869B1 (en) 2002-06-05 2004-07-06 Xilinx, Inc. Large crossbar switch implemented in FPGA
US6810514B1 (en) 2002-07-03 2004-10-26 Xilinx, Inc. Controller arrangement for partial reconfiguration of a programmable logic device
US6907595B2 (en) 2002-12-13 2005-06-14 Xilinx, Inc. Partial reconfiguration of a programmable logic device using an on-chip processor
US7124338B1 (en) 2003-10-10 2006-10-17 Xilinx, Inc. Methods of testing interconnect lines in programmable logic devices using partial reconfiguration
US7224184B1 (en) 2004-11-05 2007-05-29 Xilinx, Inc. High bandwidth reconfigurable on-chip network for reconfigurable systems
US7673164B1 (en) * 2004-12-13 2010-03-02 Massachusetts Institute Of Technology Managing power in a parallel processing environment
US7509617B1 (en) 2005-09-12 2009-03-24 Xilinx, Inc. Design methodology to support relocatable bit streams for dynamic partial reconfiguration of FPGAs to reduce bit stream memory requirements
US7546572B1 (en) 2005-09-20 2009-06-09 Xilinx, Inc. Shared memory interface in a programmable logic device using partial reconfiguration
JP2009515160A (ja) 2005-11-02 2009-04-09 エヌエックスピー ビー ヴィ 集積回路検査方法及び装置
US7302625B1 (en) 2005-11-21 2007-11-27 Xilinx, Inc. Built-in self test (BIST) technology for testing field programmable gate arrays (FPGAs) using partial reconfiguration
US7477072B1 (en) 2006-01-17 2009-01-13 Xilinx, Inc. Circuit for and method of enabling partial reconfiguration of a device having programmable logic
US7539845B1 (en) 2006-04-14 2009-05-26 Tilera Corporation Coupling integrated circuits in a parallel processing environment
US7640527B1 (en) 2006-06-29 2009-12-29 Xilinx, Inc. Method and apparatus for partial reconfiguration circuit design for a programmable device
WO2008013098A1 (fr) 2006-07-27 2008-01-31 Panasonic Corporation Circuit intégré à semi-conducteurs, appareil de conversion de programmes et appareil de mappage
US7478357B1 (en) 2006-08-14 2009-01-13 Xilinx, Inc. Versatile bus interface macro for dynamically reconfigurable designs
US7636816B2 (en) 2006-09-29 2009-12-22 Broadcom Corporation Global address space management
US8006149B2 (en) * 2006-11-27 2011-08-23 Verigy (Singapore) Pte. Ltd. System and method for device performance characterization in physical and logical domains with AC SCAN testing
US7724815B1 (en) 2007-02-27 2010-05-25 Xilinx, Inc. Method and apparatus for a programmably terminated receiver
JP2008250846A (ja) 2007-03-30 2008-10-16 Tokyo Metropolitan Univ ディジタル信号処理装置
US7518396B1 (en) 2007-06-25 2009-04-14 Xilinx, Inc. Apparatus and method for reconfiguring a programmable logic device
US8250342B1 (en) 2008-01-09 2012-08-21 Xilinx, Inc. Digital signal processing engine
US7746099B1 (en) 2008-01-11 2010-06-29 Xilinx, Inc. Method of and system for implementing a circuit in a device having programmable logic
US7941637B2 (en) * 2008-04-15 2011-05-10 Freescale Semiconductor, Inc. Groups of serially coupled processor cores propagating memory write packet while maintaining coherency within each group towards a switch coupled to memory partitions
US8045546B1 (en) 2008-07-08 2011-10-25 Tilera Corporation Configuring routing in mesh networks
CN102369601B (zh) 2009-03-30 2015-04-29 三洋电机株式会社 太阳能电池
US8359448B1 (en) 2009-07-17 2013-01-22 Xilinx, Inc. Specific memory controller implemented using reconfiguration
US9081501B2 (en) 2010-01-08 2015-07-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
EP2363812B1 (en) 2010-03-04 2018-02-28 Karlsruher Institut für Technologie Reconfigurable processor architecture
US8667192B2 (en) 2011-02-28 2014-03-04 Xilinx, Inc. Integrated circuit with programmable circuitry and an embedded processor system
US8415974B1 (en) 2011-03-09 2013-04-09 Xilinx, Inc. Methods and circuits enabling dynamic reconfiguration
EP2850555B1 (en) 2012-05-16 2022-11-30 Nokia Technologies Oy Method in a processor, an apparatus and a computer program product
RU2012127580A (ru) 2012-07-02 2014-01-10 ЭлЭсАй Корпорейшн Подход многоэтапного планирования на уровне исходных кодов для разработки и тестирования программного обеспечения для многопроцессорных сред
US9081634B1 (en) 2012-11-09 2015-07-14 Xilinx, Inc. Digital signal processing block
US8719750B1 (en) 2012-11-12 2014-05-06 Xilinx, Inc. Placement and routing of a circuit design
CN104813306B (zh) * 2012-11-21 2017-07-04 相干逻辑公司 具有散布处理器dma‑fifo的处理系统
US8928351B1 (en) 2013-03-13 2015-01-06 Xilinx, Inc. Emulating power domains in an integrated circuit using partial reconfiguration
US9830210B2 (en) * 2013-03-15 2017-11-28 Nvidia Corporation CPU-to-GPU and GPU-to-GPU atomics
JP6311174B2 (ja) 2013-12-26 2018-04-18 インテル・コーポレーション 共有メモリ、およびノード間のi/oサービス
WO2015101827A1 (en) 2013-12-31 2015-07-09 Mosys, Inc. Integrated main memory and coprocessor with low latency
US10078613B1 (en) * 2014-03-05 2018-09-18 Mellanox Technologies, Ltd. Computing in parallel processing environments
US9652410B1 (en) * 2014-05-15 2017-05-16 Xilinx, Inc. Automated modification of configuration settings of an integrated circuit
US9436785B1 (en) 2014-09-19 2016-09-06 Xilinx, Inc. Hierarchical preset and rule based configuration of a system-on-chip
CN105608490B (zh) 2015-07-29 2018-10-26 上海磁宇信息科技有限公司 细胞阵列计算系统以及其中的通信方法
US9722613B1 (en) 2015-09-28 2017-08-01 Xilinx, Inc. Circuit arrangement for and a method of enabling a partial reconfiguration of a circuit implemented in an integrated circuit device
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
CN105718392B (zh) 2016-01-15 2019-01-29 上海磁宇信息科技有限公司 细胞阵列文件存储系统及其文件存储设备与文件存储方法
US9812180B2 (en) 2016-01-18 2017-11-07 Hare Krishna Verma Programmable logic accelerator in system on chip
CN107291209B (zh) 2016-04-01 2021-02-09 上海磁宇信息科技有限公司 细胞阵列计算系统
US9946674B2 (en) 2016-04-28 2018-04-17 Infineon Technologies Ag Scalable multi-core system-on-chip architecture on multiple dice for high end microcontroller
US10359833B2 (en) * 2016-06-20 2019-07-23 Qualcomm Incorporated Active-core-based performance boost
US10467183B2 (en) * 2017-07-01 2019-11-05 Intel Corporation Processors and methods for pipelined runtime services in a spatial array
US10866753B2 (en) 2018-04-03 2020-12-15 Xilinx, Inc. Data processing engine arrangement in a device
US10635622B2 (en) 2018-04-03 2020-04-28 Xilinx, Inc. System-on-chip interface architecture
US10747690B2 (en) 2018-04-03 2020-08-18 Xilinx, Inc. Device with data processing engine array

Also Published As

Publication number Publication date
EP3776240A2 (en) 2021-02-17
JP2023175936A (ja) 2023-12-12
WO2019195309A2 (en) 2019-10-10
JP2021520550A (ja) 2021-08-19
US10866753B2 (en) 2020-12-15
US20190303033A1 (en) 2019-10-03
JP7398384B2 (ja) 2023-12-14
US11573726B1 (en) 2023-02-07
WO2019195309A3 (en) 2019-11-21
CN111936984A (zh) 2020-11-13
US11972132B2 (en) 2024-04-30
US20230131698A1 (en) 2023-04-27

Similar Documents

Publication Publication Date Title
JP7274500B2 (ja) システムオンチップインターフェースアーキテクチャ
US11972132B2 (en) Data processing engine arrangement in a device
KR20200139190A (ko) 데이터 프로세싱 엔진 어레이를 갖는 디바이스
US10911352B2 (en) Multicast message delivery using a directional two-dimensional router and network
EP3298740B1 (en) Directional two-dimensional router and interconnection network for field programmable gate arrays
US11693808B2 (en) Multi-die integrated circuit with data processing engine array
JP2015535630A (ja) 多層相互接続による分散型プロセッサを有する処理システム
US11599498B1 (en) Device with data processing engine array that enables partial reconfiguration
US11567881B1 (en) Event-based debug, trace, and profile in device with data processing engine array