KR20200139178A - 집적 회로를 위한 데이터 프로세싱 엔진 타일 아키텍처 - Google Patents

집적 회로를 위한 데이터 프로세싱 엔진 타일 아키텍처 Download PDF

Info

Publication number
KR20200139178A
KR20200139178A KR1020207029828A KR20207029828A KR20200139178A KR 20200139178 A KR20200139178 A KR 20200139178A KR 1020207029828 A KR1020207029828 A KR 1020207029828A KR 20207029828 A KR20207029828 A KR 20207029828A KR 20200139178 A KR20200139178 A KR 20200139178A
Authority
KR
South Korea
Prior art keywords
dpe
memory
core
array
circuitry
Prior art date
Application number
KR1020207029828A
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 KR20200139178A publication Critical patent/KR20200139178A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • 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/17325Synchronisation; Hardware support therefor
    • 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/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • 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/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8061Details on data memory access

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Logic Circuits (AREA)
  • Advance Control (AREA)
  • Microcomputers (AREA)
  • Multi Processors (AREA)
  • Bus Control (AREA)

Abstract

IC(integrated circuit)에서 DPE(data processing engine) 어레이(105)를 위한 예시적인 DPE(110)는, 코어(202); 데이터 메모리(208) 및 프로그램 메모리(206)를 포함하는 메모리(204) ―프로그램 메모리는 코어에 커플링되며, 데이터 메모리는 코어에 커플링되고, DPE 외부에 있는 개개의 적어도 하나의 부가 코어(202)로의 적어도 하나의 연결(316)을 포함함―; 하드웨어 동기화 회로소자(218) 및 DMA(direct memory access) 회로소자(220)를 포함하는 지원 회로소자 -하드웨어 동기화 회로소자 및 DMA 회로소자 각각은 데이터 메모리에 커플링됨-; DMA 회로소자 및 코어에 커플링된 스트리밍 인터커넥트(210); 및 코어, 메모리 및 지원 회로소자에 커플링된 메모리-매핑식 인터커넥트(212)를 포함한다.

Description

집적 회로를 위한 데이터 프로세싱 엔진 타일 아키텍처
본 개시내용의 예들은 일반적으로 전자 회로들에 관한 것으로, 특히, 집적 회로(IC; integrated circuit)를 위한 데이터 프로세싱 엔진 타일 아키텍처에 관한 것이다.
프로세서, SoC(system on a chip) 및 ASIC(application specific integrated circuit)는 디지털 신호들을 프로세싱하는 것, 암호화를 수행하는 것, 소프트웨어 애플리케이션들을 실행하는 것, 그래픽들을 렌더링하는 것 등과 같은 컴퓨팅 동작들을 수행하기 위한 다수의 코어들을 포함할 수 있다. 일부 예들에서, 코어들은 컴퓨팅 동작들을 수행할 때 서로 간에 데이터를 송신할 수 있다. 통상적으로, 코어들 사이에서 데이터를 전송하는 것은 데이터가 코어-대-코어 인터페이스를 통과할 것을 요구하며, 이는 레이턴시를 부가하고 메모리의 비효율적인 사용이다.
IC(integrated circuit)를 위한 데이터 프로세싱 엔진 타일 아키텍처와 관련된 기법들이 설명된다. 예에서, IC(integrated circuit)에서 데이터 프로세싱 엔진(DPE; data processing engine) 어레이를 위한 DPE는, 코어; 데이터 메모리 및 프로그램 메모리를 포함하는 메모리 ―프로그램 메모리는 코어에 커플링되며, 데이터 메모리는 코어에 커플링되고, DPE 외부에 있는 개개의 적어도 하나의 부가 코어로의 적어도 하나의 연결을 포함함―; 하드웨어 동기화 회로소자 및 DMA(direct memory access) 회로소자를 포함하는 지원 회로소자 ―하드웨어 동기화 회로소자 및 DMA 회로소자 각각은 데이터 메모리에 커플링됨―; DMA 회로소자 및 코어에 커플링된 스트리밍 인터커넥트; 및 코어, 메모리 및 지원 회로소자에 커플링된 메모리-매핑식 인터커넥트를 포함한다.
일부 실시예들에서, 지원 회로소자는 코어 및 메모리에 커플링된 디버그 회로소자를 더 포함할 수 있다.
일부 실시예들에서, 데이터 메모리는 하나 이상의 RAM(random access memory) 뱅크들, 및 하나 이상의 RAM 뱅크들로의 액세스를 중재(arbitrate)하도록 구성된 중재 로직을 포함할 수 있다.
일부 실시예들에서, 하드웨어 동기화 회로소자는 코어, DPE 어레이에 있는 다른 DPE 내의 코어, 및 DMA 회로소자에 의한 하나 이상의 RAM 뱅크들로의 액세스를 로크(lock)하도록 구성될 수 있다.
일부 실시예들에서, 하드웨어 동기화 회로소자는 코어와, DPE 어레이에 있는 적어도 하나의 다른 DPE 내의 적어도 하나의 다른 코어 사이의 동기화를 제공하도록 구성될 수 있다.
일부 실시예들에서, DPE는 메모리-매핑식 인터커넥트에 커플링된 복수의 레지스터들을 더 포함할 수 있다.
일부 실시예들에서, 스트리밍 인터커넥트는 DPE 어레이에 있는 적어도 하나의 부가 DPE로의 적어도 하나의 연결을 갖는 스트림 스위치를 포함할 수 있다.
일부 실시예들에서, 스트림 스위치는 코어로의 연결을 포함할 수 있다.
일부 실시예들에서, 스트리밍 인터커넥트는 복수의 스트림 스위치들을 포함할 수 있고, 복수의 스트림 스위치들 각각은 상이한 방향으로 DPE 어레이에 있는 상이한 DPE로의 적어도 하나의 연결을 갖는다.
일부 실시예들에서, 메모리-매핑식 인터커넥트는 DPE 어레이에 있는 적어도 하나의 부가 DPE로의 적어도 하나의 연결을 갖는 메모리-매핑식 스위치를 포함할 수 있다.
일부 실시예들에서, 코어는 DPE 어레이에 있는 다른 DPE에 배치된 다른 코어에 대한 캐스케이딩 인터페이스를 포함할 수 있다.
일부 실시예들에서, 코어는 메모리-매핑식 인터커넥트에 커플링된 복수의 레지스터들을 포함할 수 있다.
일부 실시예들에서, 코어는 VLIW(very long instruction word) 프로세서, SIMD(single instruction, multiple data) 프로세서, 또는 VLIW SIMD 프로세서를 포함할 수 있다.
일부 실시예들에서, 프로그램 메모리는 코어에 배치될 수 있으며, DPE는, 지원 회로소자 및 데이터 메모리를 갖는 메모리 모듈을 더 포함할 수 있다.
일부 실시예들에서, 메모리 모듈은 DPE 어레이에 있는 적어도 하나의 부가 DPE에 의해 공유되도록 구성된 적어도 하나의 인터페이스를 포함할 수 있다.
일부 실시예들에서, DMA 회로소자는, 스트리밍 인터커넥트에 커플링된 출력 및 데이터 메모리에 커플링된 입력을 갖는 제1 DMA 회로, 및 스트리밍 인터커넥트에 커플링된 입력 및 데이터 메모리에 커플링된 출력을 갖는 제2 DMA 회로를 포함할 수 있다.
예에서, IC(integrated circuit)는 복수의 DPE(data processing engine)들을 갖는 DPE 어레이를 포함하며, 복수의 DPE들 각각은, 코어; 데이터 메모리 및 프로그램 메모리를 포함하는 메모리 ―프로그램 메모리는 코어에 커플링되며, 데이터 메모리는 코어에 커플링되고, DPE 외부에 있는 개개의 적어도 하나의 부가 코어로의 적어도 하나의 연결을 포함함―; 하드웨어 동기화 회로소자 및 DMA(direct memory access) 회로소자를 포함하는 지원 회로소자 ―하드웨어 동기화 회로소자 및 DMA 회로소자 각각은 데이터 메모리에 커플링됨―; DMA 회로소자 및 코어에 커플링된 스트리밍 인터커넥트; 및 코어, 메모리 및 지원 회로소자에 커플링된 메모리-매핑식 인터커넥트를 포함한다.
일부 실시예들에서, 프로그램 메모리는 코어에 배치될 수 있으며, DPE는, 지원 회로소자 및 데이터 메모리를 갖는 메모리 모듈을 더 포함할 수 있다.
일부 실시예들에서, 메모리 모듈은 DPE 어레이에 있는 적어도 하나의 부가 DPE에 의해 공유되도록 구성된 적어도 하나의 인터페이스를 포함할 수 있다.
일부 실시예들에서, 코어는 VLIW(very long instruction word) 프로세서, SIMD(single instruction, multiple data) 프로세서, 또는 VLIW SIMD 프로세서를 포함할 수 있다.
이들 및 다른 양상들은 다음의 상세한 설명을 참조하여 이해될 수 있다.
위에서 언급된 특징들이 상세히 이해될 수 있는 방식으로, 위에서 간략하게 요약된 더욱 구체적인 설명이 예시적인 구현들을 참조하여 이루어질 수 있으며, 이러한 예시적인 구현들 중 일부는 첨부된 도면들에서 예시되어 있다. 그러나, 첨부된 도면들이 통상적인 예시적인 구현들만을 예시하고 그러므로 이 구현들의 범위를 제한하는 것으로 간주되지 않아야 한다는 것이 주목되어야 한다.
도 1은 예에 따른, SoC(System-on-Chip)의 블록 다이어그램이다.
도 2는 예에 따른, 타일 회로를 도시하는 블록 다이어그램이다.
도 3은 예에 따른, 도 2의 타일 회로를 더욱 상세히 도시하는 블록 다이어그램이다.
도 4는 예에 따른, 타일 인터커넥트 회로소자를 도시하는 블록 다이어그램이다.
도 5는 다른 예에 따른, 프로세싱 회로소자(350)를 도시하는 블록 다이어그램이다.
도 6은 예에 따른, 데이터 프로세싱 엔진을 도시하는 블록 다이어그램이다.
도 7은 예에 따른, 벡터 프로세서에서의 파이프라인을 도시하는 블록 다이어그램이다.
도 8은 예에 따른, 벡터 레지스터 파일들의 예시적인 구성을 도시하는 표이다.
도 9는 예에 따른, 도 7에서 도시된 벡터 프로세서에 대한 파이프라인의 논리 뷰를 도시하는 블록 다이어그램이다.
도 10은 예에 따른, 중단(stall) 회로의 동작을 도시하는 흐름 다이어그램이다.
도 11은 도 1에서 도시된 SoC의 구현으로서 사용될 수 있는, 예에 따른 프로그램가능 IC를 도시하는 블록 다이어그램이다.
도 12는 예에 따른, 도 5의 프로그램가능 IC의 FPGA(field programmable gate array) 구현을 예시한다.
이해를 용이하게 하기 위해, 가능한 경우, 도면들에 공통인 동일한 엘리먼트들을 표기하기 위해 동일한 참조 번호들이 사용되었다. 일 예의 엘리먼트들이 다른 예들에 유리하게 통합될 수 있다는 것이 고려된다.
다양한 특징들이 도면들을 참조하여 이하에 설명된다. 도면들이 실척대로 도시될 수 있거나 또는 도시되지 않을 수 있으며, 유사한 구조들 또는 기능들의 엘리먼트들이 도면들 전체에 걸쳐 유사한 참조 번호들에 의해 표현된다는 것이 주목되어야 한다. 도면들이 특징들의 설명을 용이하게 하는 것으로만 의도된다는 것이 주목되어야 한다. 도면들은 청구된 발명의 총망라한 설명으로서 또는 청구된 발명의 범위에 대한 제한으로서 의도되지 않는다. 부가하여, 예시된 예는 도시된 양상들 또는 장점들 전부를 가질 필요는 없다. 특정 예와 함께 설명된 양상 또는 장점이 반드시 그 예로 제한되지는 않으며, 그렇게 예시되지 않거나 또는 그렇게 명시적으로 설명되지 않더라도, 임의의 다른 예들에서 실시될 수 있다.
도 1은 예에 따른, DPE(data processing engine) 어레이(105)를 포함하는 디바이스(100)의 블록 다이어그램이다. 예들에서, 디바이스(100)는 SoC(System-on-Chip) 타입의 디바이스이다. 일반적으로, SoC는 서로 상호작용할 수 있는 2 개 이상의 서브시스템들을 포함하는 IC를 지칭한다. 예로서, SoC는 프로그램 코드를 실행하는 프로세서, 및 하나 이상의 다른 회로들을 포함할 수 있다. 다른 회로들은 하드와이어링된 회로소자, 프로그램가능 회로소자, 다른 서브시스템들 및/또는 이들의 임의의 조합으로서 구현될 수 있다. 회로들은 서로 그리고/또는 프로세서와 협력하여 동작할 수 있다. DPE 어레이(105)는, 디바이스(100)에서 그리드, 클러스터 또는 체커보드 패턴으로 배열될 수 있는 복수의 DPE(data processing engine)들(110)을 포함한다. 도 1이 행들 및 열들을 갖는 2D 어레이로 DPE들(110)을 배열하는 것을 예시하지만, 예들은 이 어레인지먼트로 제한되지 않는다. 추가로, 어레이(105)는 임의의 사이즈일 수 있고, DPE들(110)에 의해 형성된 임의의 수의 행들 및 열들을 가질 수 있다.
일 실시예에서, DPE들(110)은 동일하다. 즉, DPE들(110)(타일들 또는 블록들로 또한 지칭됨) 각각은 동일한 하드웨어 컴포넌트들 또는 회로소자를 가질 수 있다. 추가로, 본원의 예들은 DPE들(110)로 제한되지 않는다. 대신에, 디바이스(100)는 임의의 종류의 프로세싱 엘리먼트들 또는 데이터 프로세싱 엔진들의 어레이를 포함할 수 있다. 게다가, DPE들(110)은 하나 이상의 특수 작업들을 수행하기 위한 암호화 엔진들 또는 다른 특수 하드웨어일 수 있다. 이와 같이, DPE들(110)은 일반적으로 데이터 프로세싱 엔진들로 지칭될 수 있다.
도 1에서, 어레이(105)는 모두 동일한 타입인 DPE들(110)을 포함한다(예컨대, 동종 어레이). 그러나, 다른 실시예에서, 어레이(105)는 상이한 타입들의 엔진들을 포함할 수 있다. 예컨대, 어레이(105)는 DPE들(110), 암호화 엔진들, FEC(forward error correction) 엔진들 등을 포함할 수 있다. 아래에서 더욱 상세히 설명된 바와 같이, 어레이(105)가 동종인지 또는 이종인지에 관계없이, DPE들(110)은, DPE들(110)이 메모리 모듈들을 공유할 수 있게 하는, 이웃 DPE들(110)에 있는 메모리 모듈들로의 연결들을 포함할 수 있다.
일 실시예에서, DPE들(110)은 프로그램 불가능 로직으로 형성되는데, 즉, 경화(harden)된다. 그렇게 하는 하나의 장점은, DPE들(110)에 있는 하드웨어 엘리먼트들을 형성하기 위해 프로그램가능 로직을 사용하는 것에 비해, DPE들(110)이 디바이스(100)에서 더 적은 공간을 차지할 수 있다는 것이다. 즉, DPE들(110)에 있는 하드웨어 엘리먼트들, 이를테면, 프로그램 메모리들, 명령 페치/디코딩 유닛, 고정 소수점 벡터 유닛들, 부동 소수점 벡터 유닛들, ALU(arithmetic logic unit)들, MAC(multiply accumulator)들 등을 형성하기 위해 경화된 또는 프로그램 불가능 로직 회로소자를 사용하는 것은 디바이스(100)에서 어레이(105)의 풋프린트를 상당히 감소시킬 수 있다. DPE들(110)이 경화될 수 있지만, 이는 DPE들(110)이 프로그램 가능하지 않음을 의미하지는 않는다. 즉, DPE들(110)은, 디바이스(100)의 전원이 켜지거나 또는 디바이스(100)가 재부팅될 때 상이한 기능들 또는 작업들을 수행하도록 구성될 수 있다.
DPE 어레이(105)는 또한, DPE들(110)과 디바이스(100)에 있는 다른 하드웨어 컴포넌트들 사이의 통신 인터페이스로서의 역할을 하는 SoC 인터페이스 블록(115)을 포함한다. 이 예에서, 디바이스(100)는 SoC 인터페이스 블록(115)에 통신가능하게 커플링되는 NoC(network on chip)(120)를 포함한다. 도시되지 않지만, NoC(120)는, 디바이스(100)에 있는 다양한 컴포넌트들이 서로 통신할 수 있게 하기 위해 디바이스(100) 전체에 걸쳐 연장될 수 있다. 예컨대, 물리적 구현에서, DPE 어레이(105)는 디바이스(100)를 형성하는 집적 회로의 상부 우측 부분에 배치될 수 있다. 그러나, 그럼에도 불구하고, NoC(120)를 사용하여, 어레이(105)는 다양한 서브시스템들, 예컨대, 디바이스(100) 전체에 걸쳐 상이한 위치들에 배치될 수 있는 PL(programmable logic)(120), PS(processor subsystem)(130) 또는 I/O(input/output)(135)와 통신할 수 있다.
DPE들(110)과 NoC(120) 사이의 인터페이스를 제공하는 것에 부가하여, SoC 인터페이스 블록(115)은 또한, PL(122)에 있는 통신 패브릭(fabric)에 직접적으로 연결을 제공할 수 있다. 일 실시예에서, SoC 인터페이스 블록(115)은, 디바이스(100)에서 어레이(105) 근처에 배치되는 PL(122) 및 NoC(120)에 DPE들(110)을 통신가능하게 커플링하기 위한 별개의 하드웨어 컴포넌트들을 포함한다.
도 1이 PL(122)의 하나의 블록을 예시하지만, 디바이스(100)는, 디바이스(100)에서 상이한 위치들에 배치될 수 있는 PL(122)의 다수의 블록들(구성 로직 블록들로 또한 지칭됨)을 포함할 수 있다. 예컨대, 디바이스(100)는 FPGA(field programmable gate array)를 형성하는 하드웨어 엘리먼트들을 포함할 수 있다. 그러나, 다른 실시예들에서, 디바이스(100)는 어떤 PL(122)도 포함하지 않을 수 있는데, 예컨대, 디바이스(100)는 ASIC이다.
도 2는 예에 따른 DPE(110)를 도시하는 블록 다이어그램이다. DPE(110)는, 위에서 논의되고 도 1에서 도시된 바와 같이 DPE 어레이에서 DPE를 구현하기 위해 사용될 수 있다. DPE(110)는 코어(202), 메모리(204), DPE 인터커넥트(209) 및 지원 회로소자(214)를 포함한다. DPE 인터커넥트(209)는 스트리밍 인터커넥트(210) 및 메모리-매핑식(MM; memory-mapped) 인터커텍트(212)를 포함한다. 예에서, 지원 회로소자(214)는 디버그/트레이스/프로파일 회로소자(216), 하드웨어(HW; hardware) 동기화 회로소자("HW 로크(lock)들(218)") 및 DMA(direct memory access) 회로소자("DMA(220)")를 포함한다. 메모리(204)는 프로그램 메모리("PM(206)") 및 데이터 메모리("DM(208)")를 포함한다.
코어(202)는 PM(206)에 저장된 명령(들)에 따라 데이터를 프로세싱하기 위한 하나 이상의 컴퓨팅 유닛들을 포함한다. 예에서, 코어(202)는 VLIW(very-long instruction word) 프로세서, SIMD(single instruction, multiple data) 또는 벡터 프로세서, 또는 VLIW SIMD/벡터 프로세서를 포함한다. 예에서, PM(206)은 코어(202)에 전용(private)이다(예컨대, PM(206)은 DPE(200) 내의 코어(202)에 의한 사용을 위해서만 명령(들)을 저장함). 예에서, PM(206)은 단일-포트 RAM(random access memory)을 포함한다. PM(206)은 명령들의 구성 및 로딩을 위해 MM 인터커넥트(212)에 커플링될 수 있다. 예에서, PM(206)은 패리티, ECC(error-correcting code) 보호 및 보고, 또는 패리티와 ECC 둘 모두를 지원한다. 예컨대, PM(206)은 9-비트 ECC를 지원할 수 있고, 프로그램 명령(예컨대, 128 비트)에서 1-비트 에러 또는 2-비트 에러들을 정정할 수 있다.
코어(202)는, 입력 스트림(들)을 수신하고 그리고/또는 출력 스트림(들)을 제공하기 위해 스트리밍 인터커넥트(210)에 직접적으로 커플링될 수 있다. 부가하여, 코어(202)는 DPE(200)에 있는 DM(208)에 대해 데이터를 판독 및 기록할 수 있다. 아래에서 추가로 논의된 바와 같이, DPE(200)에 있는 코어(202)는 또한, 하나 이상의 이웃 타일 회로들(예컨대, 노스, 사우스, 이스트 및 웨스트 이웃 타일 회로들)에 있는 DM에 액세스할 수 있다. 예에서, 아래에서 추가로 논의된 바와 같이, 코어(202)는 또한, 누산기 출력을 포워딩하기 위한, 하나 이상의 이웃 타일들에 있는 데이터 프로세싱 엔진과의 직접 연결(예컨대, 입력 및 출력 캐스케이딩 연결(들))을 포함할 수 있다. 예에서, 코어(202)는 DPE(200)에 있는 DM(208) 및 이웃 타일(들)에 있는 다른 DM(들)을 하나의 연속적인 메모리 블록으로서 본다. 코어(202)는 또한, HW 로크들(218)에 대한 인터페이스 및 디버그/트레이스/프로파일 회로소자(216)에 대한 인터페이스를 포함할 수 있다. 디버그/트레이스/프로파일 회로소자(216)는 트레이스, 디버그 및/또는 프로파일 회로소자를 포함할 수 있다.
MM 인터커넥트(212)는 컴포넌트들 사이의 어드레스 트랜잭션들을 사용한 데이터의 송신을 위해 구성된 AXI 메모리-매핑식 인터커넥트 등일 수 있다. 예에서, MM 인터커넥트(212)는 DPE(200)에 대한 구성, 제어 및 디버깅 기능성에 사용된다. MM 인터커넥트(212)는 어드레스에 기반하여 트랜잭션들을 라우팅하는 하나 이상의 스위치들을 포함한다. 회로소자는 MM 인터커넥트(212)를 사용하여 DPE(200)에 있는 메모리(204), 코어(202), DMA(220) 및 구성 레지스터들에 액세스할 수 있다.
스트리밍 인터커넥트(210)는 컴포넌트들 사이의 스트리밍 데이터의 송신을 위해 구성된 AXI(Advanced eXtensible Interconnect) 스트리밍 인터커넥트 등일 수 있다. 스트리밍 인터커넥트(210)는 DPE(200)와 외부 회로들 사이에서 데이터를 전송하기 위해 사용된다. 스트리밍 인터커넥트(210)는 데이터 및 제어 둘 모두를 위해 회선 교환 메커니즘 및 패킷 교환 메커니즘 둘 모두를 지원할 수 있다.
예에서, 아래에서 추가로 설명된 바와 같이, DM(208)은 하나 이상의 메모리 뱅크들(예컨대, RAM(random access memory) 뱅크들)을 포함할 수 있다. DMA(220)는 스트리밍 인터커넥트(210)와 DM(208) 사이에 커플링된다. DMA(220)는, 스트리밍 인터커넥트(210)로부터 DM(208)으로 데이터를 이동시키고 DM(208)으로부터 스트리밍 인터커넥트(210)로 데이터를 이동시키도록 구성된다. 이러한 방식으로, 외부 회로(예컨대, 프로그램가능 로직으로 구성된 회로, 또는 IC의 임베디드 프로세싱 시스템에 있는 회로)는 DMA를 사용하여 스트리밍 인터커넥트(210)를 통해 DM(208)으로부터 데이터를 판독하고 데이터를 DM(208)에 기록할 수 있다. DMA(220)는 MM 인터커넥트(212) 및/또는 스트리밍 인터커넥트(210)를 통해 제어될 수 있다. 예에서, DM(208)은 패리티, ECC(error-correcting code) 보호 및 보고, 또는 패리티와 ECC 둘 모두를 지원한다. 예컨대, DM(208)은 9-비트 ECC(예컨대, 128-비트 데이터)를 지원할 수 있다.
HW 로크들(218)은 코어(202), 다른 타일에 있는 다른 데이터 프로세싱 엔진, 또는 DMA(220)에 의한 액세스를 위해 DM(208)의 특정 메모리 뱅크들을 로크하기 위해 사용될 수 있다. HW 로크들(218)은 이웃 타일들에 있는 이웃 데이터 프로세싱 엔진들 사이, 코어(202)와 DMA(220) 사이, 그리고 코어(202)와 외부 회로(예컨대, 외부 프로세서) 사이의 동기화를 제공한다. HW 로크들(218)은 또한, DM(208)에 있는 특정 버퍼를 로크하기 위해 사용될 수 있으며, 이 특정 버퍼는 하나 이상의 메모리 뱅크들에 또는 단일 메모리 뱅크의 일부에 저장될 수 있다. 디버그/트레이스/프로파일 회로소자(216)는 디버그, 트레이스 및 프로파일 기능들을 제공하도록 구성된다. 디버그/트레이스/프로파일 회로소자(216)는 DPE(200)에 있는 회로들에 의해 생성된 이벤트들을 추적할 수 있다. 디버그/트레이스/프로파일 회로소자(216)는 프로파일 기능성, 예컨대, 구성가능 성능 카운터들을 제공할 수 있다.
도 3은 예에 따른, DPE(200)를 더욱 상세히 도시하는 블록 다이어그램이다. 예에서, DPE(200)는 코어(202), 메모리 모듈(351) 및 DPE 인터커넥트(209)를 포함한다. 코어(202)는 컴퓨팅 회로소자(203) 및 PM(206)을 포함한다. 메모리 모듈(351)은 메모리 인터페이스들(302N, 302S, 302E 및 302W)(집합적으로 메모리 인터페이스들, 또는 개별적으로 "mem IF"), RAM 뱅크들(318), HW 로크들(218), 레지스터들("regs(304)"), DMA 인터페이스(204A) 및 DMA 인터페이스(220B)를 포함한다. 컴퓨팅 회로소자(203)는 레지스터들("regs(306)")을 포함한다. DPE 인터커넥트(209)는 MM 인터커넥트(212) 및 스트리밍 인터커넥트(210)(도 2에서 도시됨)를 포함한다. MM 인터커넥트(212) 및 스트리밍 인터커넥트(210) 둘 모두는 RAM 뱅크들(318)에 액세스할 수 있다. RAM 뱅크들(318)은 뱅크 당 중재 로직(319)을 포함한다. 중재 로직(319)은 어느 인터페이스(N, S, E, W, DMA, 외부 PS 등)가 어느 뱅크에 액세스하는지를 제어하도록 구성된다. DPE 인터커넥트(209)의 추가적인 세부사항들은 도 4의 예에 대하여 아래에서 논의된다.
DPE 인터커넥트(209)는 웨스트 타일로의 스트리밍 연결(314W), 이스트 타일로의 스트리밍 연결(314E), 노스 타일로의 스트리밍 연결(314N) 및 사우스 타일로의 스트리밍 연결(314S)을 포함한다. 각각의 스트리밍 연결(314)은 하나 이상의 독립적인 스트리밍 인터페이스들(예컨대, 버스들)을 포함하고, 스트리밍 인터페이스들 각각은 특정 비트 폭을 갖는다. DPE 인터커넥트(209)는 또한, 사우스 타일로부터의 메모리-매핑식 연결(312S) 및 노스 타일로의 메모리-매핑식 연결(312N)을 포함한다. 노스 및 사우스 MM 연결들만이 도시되지만, DPE 인터커넥트(209)가 MM 인터커넥트를 위한 다른 구성들(예컨대, 이스트에서 웨스트로, 웨스트에서 이스트로, 노스에서 사우스로 등)을 포함할 수 있다는 것이 이해되어야 한다. DPE 인터커넥트(209)는 도 3의 예에서 도시된 것과는 스트리밍 및 메모리-매핑식 연결들의 다른 어레인지먼트들을 포함할 수 있다는 것이 이해되어야 한다. 일반적으로, DPE 인터커넥트(209)는 적어도 하나의 스트리밍 연결(314) 및 적어도 하나의 메모리-매핑식 연결(312)을 포함한다.
컴퓨팅 회로소자(203)는 웨스트 타일에 있는 메모리 회로소자로의 연결(308W), 사우스 타일에 있는 메모리 회로소자로의 연결(308S), 노스 타일에 있는 메모리 회로소자로의 연결(308N), 및 메모리 모듈(351)로의 연결(308E)을 포함한다. 컴퓨팅 회로소자(203)는 DPE 인터커넥트(209)에 대한 스트림라이닝 인터페이스를 포함한다. 컴퓨팅 회로소자(203)는 또한, 웨스트 타일에 있는 코어로부터의 연결(310A) 및 이스트 타일에 있는 코어로의 연결(310B)(예컨대, 캐스케이딩 연결들)을 포함한다. DPE는 도 3의 예에서 도시된 것과는 메모리 및 캐스케이딩 연결들의 다른 어레인지먼트들을 포함할 수 있다는 것이 이해되어야 한다. 일반적으로, 컴퓨팅 회로소자(203)는 적어도 하나의 메모리 연결을 포함하며, 적어도 하나의 캐스케이딩 연결을 포함할 수 있다.
mem IF(302W)는 컴퓨팅 회로소자(203)의 메모리 연결(308E)에 커플링된다. mem IF(302N)는 노스 타일에 있는 데이터 프로세싱 엔진의 메모리 연결에 커플링된다. mem IF(302E)는 이스트 타일에 있는 데이터 프로세싱 엔진의 메모리 연결에 커플링된다. mem IF(302S)는 사우스 타일에 있는 데이터 프로세싱 엔진의 메모리 연결에 커플링된다. mem IF(302W, 302N, 302E 및 302S)는 RAM 뱅크들(318)에 커플링된다. DMA(220A)는, 메모리에서 인터커넥트로의 스트림들을 핸들링하기 위한, DPE 인터커넥트(209)에 커플링된 출력을 포함한다. DMA(220B)는, 인터커넥트에서 메모리로의 스트림들을 핸들링하기 위한, DPE 인터커넥트(209)에 커플링된 입력을 포함한다. regs(304) 및 regs(306)은 (예컨대, 메모리-매핑식 인터커넥트를 사용하여) DPE 인터커넥트(209)로부터 구성 데이터를 수신하기 위해 이 DPE 인터커넥트(209)에 커플링된다.
도 4는 예에 따른, DPE 인터커넥트(209)를 도시하는 블록 다이어그램이다. DPE 인터커넥트(209)는 스트림 스위치(402) 및 MM 스위치(404)를 포함한다. 스트림 스위치(402)는 웨스트 스트림 인터페이스(406W), 노스 스트림 인터페이스(406N), 이스트 스트림 인터페이스(406E) 및 사우스 스트림 인터페이스(406S)에 커플링된다. 웨스트 스트림 인터페이스(406W)는 스트림들을 수신하여 웨스트 타일의 DPE 인터커넥트에 제공한다. 노스 스트림 인터페이스(406N)는 스트림들을 수신하여 노스 타일의 DPE 인터커넥트에 제공한다. 웨스트 스트림 인터페이스(406W)는 스트림들을 수신하여 웨스트 타일의 DPE 인터커넥트에 제공한다. 사우스 스트림 인터페이스(406S)는 스트림들을 수신하여 사우스 타일의 DPE 인터커넥트에 제공한다. MM 스위치(404)는 노스 MM 인터페이스(408N) 및 사우스 MM 인터페이스(408S)에 커플링된다. 노스 MM 인터페이스(408N)는 노스 타일에 있는 DPE 인터커넥트에 커플링된다. 사우스 MM 인터페이스(408S)는 사우스 타일에 있는 DPE 인터커넥트에 커플링된다.
스트림 스위치(402)는 FIFO(first-in-first-out) 회로들(FIFO들(412)) 및 레지스터들(regs(410))을 포함한다. FIFO들(412)은 스트림 스위치(402)를 통과하는 스트림들을 버퍼링하도록 구성된다. regs(410)은 스트림 스위치를 통하는 스트림들의 라우팅을 제어하는, 스트림 스위치(402)에 대한 구성 데이터를 저장한다. regs(410)은 MM 스위치(404)로부터 구성 데이터를 수신할 수 있다. 스트림 스위치(402)는 컴퓨팅 회로소자(203)에 대한 부가 인터페이스 및 DMA 회로소자(220)에 대한 부가 인터페이스를 포함할 수 있다. 스트림 스위치(402)는 제어 스트림들을 전송 및 수신할 수 있고, (예컨대, 디버그/트레이스/프로파일 회로소자(216)로부터) 트레이스 스트림들을 수신할 수 있다.
도 5는 다른 예에 따른, 코어(202)를 도시하는 블록 다이어그램이다. 위에서 논의된 엘리먼트들과 동일하거나 또는 유사한 도 5의 엘리먼트들은 동일한 참조 번호들을 이용하여 지정된다. 본 예에서, 코어(202)는 중단 회로(502)를 더 포함한다. 도 10은 예에 따른, 중단 회로(502)의 동작을 도시하는 흐름 다이어그램이다.
도 5 및 도 10을 참조하면, 중단 회로(502)는 컴퓨팅 회로소자(203)에 커플링되고, 중단 신호를 제공하도록 구성된다. 중단 회로(502)는 또한, 중단 신호를 메모리 모듈(351)에 제공한다. 중단 회로(502)는, 컴퓨팅 회로소자(203)를 중단(예컨대, 컴퓨팅 회로소자(203)가 데이터를 프로세싱하지 않도록, 이 컴퓨팅 회로소자(203)의 동작을 중지)시키도록 중단 신호를 어서트할 수 있다. 중단 신호가 디-어서트(de-assert)될 때, 컴퓨팅 회로소자(203)는 중단되지 않고, 데이터를 프로세싱한다. 중단 회로(502)는 DPE(200)에 있는 회로들 또는 DPE(200) 외부에 있는 회로들로부터의 다양한 입력들에 따라 중단 신호의 상태를 세팅한다. 부가하여, 일단 중단 회로(502)가 컴퓨팅 회로소자(203)를 정지(stop)시키면, 중단 회로(502)는 DPE(200)의 다른 컴포넌트들을 정지시킬 수 있다. 예컨대, 중단 회로(502)는 컴퓨팅 회로소자(203)에 데이터를 제공하는, 메모리 모듈(351)에 있는 특정 블록들을 정지시킬 수 있다. 즉, 컴퓨팅 회로소자(203)가 정지되기 때문에, 메모리 모듈(351)로부터 "비행중(in-flight)"인 데이터가 중단되어, 데이터 손실이 회피될 수 있다. 다른 예에서, 중단 회로(502)는 프로그램 메모리(206)에 대해 유사한 기능을 수행할 수 있다. 즉, 컴퓨팅 회로소자(203)가 정지되기 때문에, 프로그램 메모리(206)로부터 "비행중"인 명령들이 중단되어, 명령 손실이 회피될 수 있다.
예에서, 중단 회로(502)는 입력들(504, 506, 508, 510, 512 및 514)을 포함한다. 입력(504)은 중재 로직(319)에 커플링되고, 메모리 충돌을 표시하는 신호를 수신하도록 구성된다(단계(1002)). 예컨대, 다른 데이터 프로세싱 엔진이 DPE(200)에 있는 특정 RAM 뱅크(318)에 액세스하고 있을 수 있으며, 그러면 컴퓨팅 회로소자(203)가 이 특정 RAM 뱅크(318)에는 액세스 불가능할 것이다. 중재 로직(319)은 중단 회로(502)에 시그널링하고, 이 중단 회로(502)는, 컴퓨팅 회로소자(203)를 중단시키고 컴퓨팅 회로소자(203)가 경합 중인 RAM 뱅크(318)에 액세스하는 것을 방지하기 위해, 중단 신호를 어서트한다.
입력(506)은 PS(130)에 커플링되고, 컴퓨팅 회로소자(203)를 중단시키기 위해 사용되는 제어 신호를 수신하도록 구성된다(단계(1004)). 예컨대, PS(130) 상에서 실행되는 소프트웨어는 컴퓨팅 회로소자(203)를 중단시키고 요구에 따라 컴퓨팅 회로소자(203)를 재개할 수 있다.
입력(508)은 스트림 스위치(402)에 커플링되고, FIFO들(412)의 비어 있는(empty) 또는 가득 찬(full) 조건을 표시하는 신호를 수신하도록 구성된다(단계(1006)). 예컨대, FIFO들(412)이 가득 찬 상태이면, FIFO들(412)은 컴퓨팅 회로소자(203)로부터 출력된 부가 데이터를 저장할 수 없다. 따라서, FIFO들(412)의 오버플로를 방지하기 위해 컴퓨팅 회로소자(203)는 중단된다. 일단 FIFO들(412)이 더 이상 가득 찬 상태가 아니라면(예컨대, 비어 있는 조건에 있으면), 컴퓨팅 회로소자(203)는 재개될 수 있다.
입력(510)은 레지스터(514)에 커플링되고, 중단 또는 재개를 표시하는 신호를 수신하도록 구성된다(단계(1008)). 예에서, 레지스터(514)는 MM 인터커넥트(212)를 통해 프로그램될 수 있고, 사용자가 어레이의 구성을 통해 컴퓨팅 회로소자(203)의 중단 또는 재개를 프로그램할 수 있게 한다.
입력(512)은 디버그/트레이스/프로파일 회로소자(216)에 커플링되고, 컴퓨팅 회로소자(203)의 중단을 필요로 하는 하나 이상의 이벤트들을 표시하는 신호를 수신하도록 구성된다(단계(1010)). 이벤트 액션들은 단일-단계 디버그를 활성화하는 것, 비활성화하는 것 등을 포함할 수 있으며, 특정 이벤트가 발생할 때마다 트리거되도록 구성될 수 있다.
입력(514)은 HW 로크들(218)에 커플링되고, RAM 뱅크(418)가 다른 회로(예컨대, 다른 데이터 프로세싱 엔진)에 의한 액세스를 위해 로크되었는지 여부를 표시하는 신호를 수신하도록 구성된다(단계(1012)). 그러한 경우, 컴퓨팅 회로소자(203)는, 액세스되고 있는 특정 RAM 뱅크(418)가 자유로워질 때까지 중단된다.
단계(1014)에서, 중단 회로(502)는 중단 신호의 어서션(assertion)을 유발한 모든 조건들의 해결(resolution)에 대한 응답으로 중단 신호를 디-어서트한다. 즉, 중단 신호의 어서션을 유발하는 각각의 조건이 해결될 때, 중단 회로(502)는 DPE의 전체 동작을 재개하기 위해 중단 신호를 디-어서트한다.
도 6은 예에 따른, 코어(202)를 도시하는 블록 다이어그램이다. 코어(202)는 레지스터 파일들(602), 컴퓨팅 회로소자(203) 및 지원 회로소자(606)를 포함한다. 레지스터 파일들(602)은 스칼라 레지스터 파일들(608) 및 벡터 레지스터 파일들(610)을 포함한다. 스칼라 레지스터 파일들(608)은 범용 레지스터들, 포인터 레지스터들, 수정자 레지스터들, 구성 레지스터들 등을 포함한다. 벡터 레지스터 파일들(610)은 (스칼라 레지스터들과 비교할 때) 벡터 데이터 경로에 대해 SIMD 명령들을 지원하는 고-폭 레지스터들을 포함한다. 벡터 레지스터 파일들(610)은 벡터 레지스터들, 누산기 레지스터들 등을 포함할 수 있다. 레지스터 파일들(602)은 다른 타입들의 레지스터들, 이를테면, 프로그램 카운터, 스택 포인터, 링크 레지스터, 다양한 구성, 제어 및 상태 레지스터들 등을 포함할 수 있다.
컴퓨팅 회로소자(203)는 스칼라 프로세서(612) 및 벡터 프로세서(614)를 포함한다. 스칼라 프로세서(612)는, 부호 있는 곱셈 및 부호 없는 곱셈, 가산/감산, 시프트들, 비교들, 및 논리 연산들, 초등 함수들, 이를테면, 제곱근, 사인/코사인 등을 포함하여, 스칼라 산술을 수행하도록 구성된다. 벡터 프로세서(614)는, 치환(permute) 함수들, 사전-가산 함수들, 곱셈 함수들, 사후-가산 함수들, 누산 함수들, 시프트, 반올림 및 포화(saturate) 함수들, 업시프트 함수들 등을 포함하여, 벡터 산술을 수행하도록 구성된다. 벡터 프로세서(614)는 복소수 및 실수 피연산들자에 대한 다중 정밀도(multiple precision)들을 지원한다. 벡터 프로세서(614)는 고정 소수점 데이터 경로 및 부동 소수점 데이터 경로 둘 모두를 포함할 수 있다.
지원 회로소자(606)는 메모리 인터페이스(616), 어드레스 생성기들(618), 명령 페치 및 디코딩 회로소자(620) 및 하나 이상의 부가 인터페이스들(622)을 포함한다. 명령 페치 및 디코딩 회로소자(620)는, PM(206)으로부터 명령들을 페치하도록, 페치된 명령들을 디코딩하도록, 그리고 디코딩된 명령들에 따라 프로세서(604)의 동작을 제어하기 위해 이 프로세서(604)에 제어 신호들을 제공하도록 구성된다. 어드레스 생성기들(618)은, 데이터 메모리로부터 데이터를 로딩하거나 또는 데이터를 데이터 메모리에 저장하기 위해 데이터 메모리에 대한 어드레스들을 생성하도록 구성된다. 메모리 인터페이스(616)는, 디코딩된 명령들 및 어드레스 생성기들(618)에 의해 생성된 어드레스들에 따라 데이터를 데이터 메모리에 전송하고 데이터 메모리로부터 데이터를 수신하기 위해 데이터 메모리와 통신하도록 구성된다. 다른 인터페이스들(622)은 HW 로크들(218)에 대한 인터페이스, 스트리밍 인터커넥트(210)에 대한 인터페이스, 다른 데이터 프로세싱 엔진들로부터 캐스케이드 스트림(들)을 수신하기 위한 인터페이스, 디버그/트레이스/프로파일 회로소자(216)에 대한 인터페이스 등을 포함할 수 있다.
도 7은 예에 따른, 벡터 프로세서(614)에서의 파이프라인(700)을 도시하는 블록 다이어그램이다. 파이프라인(700)은 고정 소수점 벡터 프로세싱을 수행하도록 구성되고, MAC(multiply-accumulate) 경로(701) 및 업시프트 경로(703)를 포함한다. MAC 경로(701)는 벡터 레지스터들로부터 값들을 판독하고, 사용자-제어가능 방식으로 이들을 치환하고, 선택적인 사전-가산을 수행하고, 일부 사후-가산 후에 이들을 곱셈하며, 그리고 누산 레지스터의 이전 값에 이들을 누산한다. 업시프트 경로(703)는 MAC 경로(701)와 병렬로 동작하며, 그리고 벡터들을 판독하고 이 벡터들을 업시프트하며 그 결과를 누산기에 피딩하도록 구성된다. 아래에서 추가로 논의된 바와 같이, 파이프라인(700)은, MAC 경로(701) 및 업시프트 경로(703)에 있는 다양한 회로들을 제어하도록 구성된 제어 회로(750)를 더 포함한다.
도 8은 예에 따른, 벡터 레지스터 파일들(610)의 예시적인 구성을 도시하는 표(800)이다. 표(800)에서 도시된 바와 같이, 코어(202)는 R, C 및 D로 표기된 3 개의 별개의 벡터 레지스터 파일들을 포함하고, 부가 프리픽스가 이 벡터 레지스터 파일들의 폭을 특정한다. 예에서, 기본적인 하드웨어 레지스터들은 각각 128-비트 폭이다. 하드웨어 레지스터들은 문자 "V"(벡터용)로 프리픽스된다. 2 개의 "V" 레지스터들이 함께 그룹핑되어, 256-비트 레지스터를 형성할 수 있으며, 이 256-비트 레지스터는 "W"(와이드 벡터용)로 프리픽스된다. 또한, WR, VC 및 WD 레지스터들은 쌍으로 그룹핑되어, 512-비트 폭 레지스터(XA, XB, XC 및 XD)를 형성할 수 있다. 마지막으로, 레지스터들(XA 및 XB)은 함께 1024-비트 폭 YA 레지스터를 형성하는 반면, XD 및 XB는 부분적으로 겹치는 1024-비트 폭 YD 레지스터를 형성한다. YD에서, XD 레지스터는 LSB 부분이고, XB 레지스터는 MSB 부분이다.
벡터 레지스터 파일들(610)에 있는 벡터 레지스터들은 상이한 포맷들로 데이터를 저장할 수 있다. 예컨대, 128-비트 레지스터들은 8-비트의 부호 있는 데이터의 16 개의 레인(lane)들(v16int8), 8-비트의 부호 없는 실수 데이터의 16 개의 라인들(v16uint8), 16-비트의 부호 있는 데이터의 8 개의 레인들(v8int16), 16-비트 복소수 데이터의 4 개의 레인들(v4cint16) 및 32-비트 복소수 데이터의 2 개의 레인들(v2cint32)을 표현하기 위해 사용될 수 있다.
도 8에서 도시된 표(800)는 벡터 레지스터 파일들(610)의 단지 하나의 가능한 구성을 나타낸다. 예컨대, 벡터 레지스터 파일들(610)은, 임의의 비트 폭을 가질 수 있으며 도시된 것과는 상이한 비트 폭들을 또한 갖는 더 큰 레지스터들로 그룹핑될 수 있는, 16 개보다 더 적거나 또는 더 많은 하드웨어 레지스터들을 포함할 수 있다. 예컨대, 다양한 레지스터 파일들이 결합되어, 더 적은 수의 더 큰 레지스터들을 제공할 수 있다. 대안적으로, 다양한 레지스터들이 더 많은 수의 더 작은 레지스터들로 분할될 수 있다.
도 7로 돌아가면, 파이프라인(700)은 레지스터 파일(702)(XA와 XB의 연쇄(concatenation)로부터 형성됨), 레지스터 파일(704(XC)) 및 레지스터 파일(706(XD))을 포함한다. 도 8의 예에서, 레지스터 파일(702)은 8 개의 128-비트 하드웨어 레지스터들을 포함하고, 레지스터 파일(704)은 4 개의 128-비트 하드웨어 레지스터들을 포함하며, 레지스터 파일(706)은 4 개의 128-비트 하드웨어 레지스터들을 포함한다. 다른 예들에서, 레지스터 파일들(702, 704 및 706)은 상이한 비트-폭들을 갖는 다른 수들의 레지스터들을 포함할 수 있다. 레지스터 파일들(702, 704 및 706)의 구성은 일 예이다. 다른 예에서, 레지스터 파일들(702, 704 및 706)은 단일 레지스터 파일로 단일화될 수 있다. 다른 예들에서, 파이프라인(700)은 3 개 초과의 레지스터 파일들을 포함할 수 있다.
파이프라인(700)은 치환 회로(708)(PMXL), 치환 회로(710)(PMXR), 치환 회로(712)(PMC), 사전-가산기(714), 특수 연산 회로(716)(YMX), 곱셈기(720)(MPY), 사후-가산기(723), 누산기(730)(ACC) 및 누산 레지스터 파일(732)(AM)을 갖는 MAC 경로(701)를 더 포함한다. 예에서, 사후-가산기(723)는 2 개의 별개의 스테이지들, 즉, 사후-가산기(722) 및 사후-가산기(724)를 포함한다. 파이프라인(700)은 멀티플렉서(718)(MUX), 업시프트 회로(726)(UPS) 및 누산기 멀티플렉서(734)(ACM)를 갖는 업시프트 경로(703)를 포함한다. 예에서 3 개의 치환 회로들(708, 710 및 712)이 도시되지만, 다른 예들에서, 파이프라인(700)은 치환 회로들(708, 710 및 712)의 기능성을 통합하는 단일 치환 회로를 포함할 수 있다.
치환 회로(708)의 입력은 레지스터 파일(702)의 출력들에 커플링되고, 치환 회로(710)의 입력은 레지스터 파일(702)의 출력들에 커플링되며, 치환 회로(712)의 입력은 레지스터 파일(704)의 출력들에 커플링된다. 사전-가산기(714)의 제1 입력은 치환 회로(708)의 출력에 커플링되고, 사전-가산기(714)의 제2 입력은 치환 회로(710)의 출력에 커플링된다. 특수 연산 회로(716)의 제1 입력은 치환 회로(710)의 출력에 커플링되고, 특수 연산 회로(716)의 제2 입력은 치환 회로(712)의 출력에 커플링된다. 사전-가산기(714) 및 특수 연산 회로(716)의 출력들은 곱셈기(720)의 입력들에 커플링된다. 곱셈기(720)의 출력은 사후-가산기(722)의 입력에 커플링된다. 사후-가산기(722)의 출력은 사후-가산기(724)의 입력에 커플링된다. 사후-가산기(724)의 출력은 누산기(730)의 입력에 커플링된다. 누산기(730)의 출력은 레지스터 파일(732)의 입력에 커플링된다.
예에서, 레지스터 파일(702)은 1024-비트 벡터(예컨대, XA::XB의 연쇄, 이들 각각은 512-비트임)를 포함한다. 치환 회로들(708 및 710)에 대한 입력(pmxA)은 512 비트일 수 있다. 마찬가지로, 치환 회로들(708 및 710)에 대한 다른 입력(pmxB)은 512 비트일 수 있다. 따라서, 각각의 치환 회로(708 및 710)는 레지스터 파일(702)(예컨대, 1024 비트)로부터 pmxA::pmxB의 연쇄를 수신한다.
치환 회로(708)는 사전-가산기(714)의 "좌측" 입력에 대해 레지스터 파일(702)로부터의 데이터를 치환하도록 구성된다. 치환 회로(710)는 사전-가산기(714)의 "우측" 입력에 대해 또는 대안적으로 특수 연산 회로(716)의 제1 입력에 대해 레지스터 파일(702)로부터의 데이터를 치환하도록 구성된다. 치환 회로(712)는 특수 연산 회로(716)로의 입력에 대해 레지스터 파일(704)로부터의 데이터를 치환하도록 구성된다. 예에서, 치환 회로들(708 및 710)은 기능적으로 동일하다. 벡터 프로세서(614)를 위한 데이터 선택 네트워크로서 치환 회로들(708, 710 및 712)의 동작은 아래에서 추가로 논의된다. 치환 회로(708)는 512-비트일 수 있는 출력(praXL)을 포함한다. 치환 회로(710)는, 또한 512-비트일 수 있는 출력(praXR)을 포함한다. 치환 회로(712)는, 또한 512-비트일 수 있는 출력(pmcR)을 포함한다. 아래에서 논의된 바와 같이, 치환 회로들(708, 710 및 712) 각각은 동작을 위해 제어 회로(750)로부터 제어 신호를 수신할 수 있다.
사전-가산기(714)는 제어 회로(750)로부터의 제어 신호에 기반하여 다수의 모드들에서 동작할 수 있다. 제1 모드에서, 사전-가산기(714)는 입력 데이터(praXL::praXR)를 통해 곱셈기(720)에 피딩한다. 제1 모드에서는, 어떤 사전-가산도 수행되지 않는다. 제2 모드에서, 사전-가산기(714)는 치환 회로(710)의 출력(praXR)과 함께 치환 회로(708)의 출력(praXL)을 가산/감산할 수 있다. 특수 연산 회로(716)는 다수의 모드들에서 동작할 수 있다. 제1 모드에서, 특수 연산 회로(716)는 입력 데이터를 통해 곱셈기(720)에 피딩한다(praXR::pmcR). 부가 모드들에서, 특수 연산 회로(716)는 상수 '1' 값을 출력하고, 입력 데이터의 부호 확장을 수행하며, 입력 데이터의 유사한 타입 조작을 수행할 수 있다.
곱셈기(720)는 사전-가산기(714)의 출력을 특수 연산 회로(716)의 출력으로 곱셈하도록 구성된다. 곱셈기(720)는, 사전-가산기(714)의 출력의 상이한 부분들을 특수 연산 회로(716)의 출력의 상이한 부분들로 곱셈하도록 구성된 곱셈기 회로들의 어레이를 포함할 수 있다. 곱셈기(720)의 동작은 제어기(750)로부터의 제어 신호에 의해 결정된다. 사후-가산기(722)는, 특정 레인들을 가산/감산함으로써 곱셈기(720)의 출력 레인들을 감소시키도록 구성된다. 예컨대, 사후-가산기(722)는 이웃 짝수 레인들 및 이웃 홀수 레인들을 취하여 이들을 가산(또는 이들을 감산)할 수 있다. 사후-가산기(722)는 상이한 모드들에서 동작하도록 구성된다. 제1 모드에서, 사후-가산기(722)는 사후-가산기(722)로부터의 출력을 전달하고, 어떤 부가 기능도 수행하지 않는다. 즉, 사후-가산기(724)는 파이프라인(700)의 프로세싱에 선택적으로 포함된다. 제2 모드에서, 사후-가산기(724)는 사후-가산기(722)와 유사한 기능을 수행한다. 예컨대, 사후-가산기(724)는 이웃 짝수 레인들 및 이웃 홀수 레인들을 취하여 이들을 가산(또는 이들을 감산)할 수 있다. 누산기(730)는 사후-가산기(724)의 출력을 누산(예컨대, 가산 또는 감산)하도록 구성된다. 사후-가산기(722), 사후-가산기(724) 및 누산기(가산용 또는 감산용)의 기능성은 제어 회로(750)로부터의 제어 신호들에 의해 결정된다. 누산기의 출력은 레지스터 파일(732)에 저장된다.
업시프트 경로(703)는 MAC 경로(701)에 병렬로 동작한다. 업시프트 경로(703)는 레지스터 파일(706)로부터, 또는 멀티플렉서(718)를 통해 치환 회로들(708, 710 및 712) 중 임의의 치환 회로로부터 데이터를 판독할 수 있다. 업시프트 회로(726)는, 제어 회로(750)의 제어 하에서 선택가능 양만큼 멀티플렉서(718)의 출력을 시프트(예컨대, 좌측-시프트)하도록 구성된다. 멀티플렉서(734)는 누산기(730)로의 커플링을 위해 업시프트 회로(726)의 출력 또는 사후-가산기(724)의 출력을 선택한다. 업시프트 경로(703)는 프로세싱 전에 값으로 누산기(730)를 초기화하기 위해 사용될 수 있다.
도 9는 예에 따른, 벡터 프로세서(614)에 대한 파이프라인(700)의 논리 뷰(900)를 도시하는 블록 다이어그램이다. 논리 뷰(900)는 레지스터 파일(902), 치환 회로들(904) 및 계산 회로들(906)을 보여준다. 레지스터 파일(902)은 치환 회로들(904)에 의해 계산 회로들(906)에 커플링된다. 레지스터 파일(902)은 예컨대 도 7 및 도 8에서 도시된 레지스터 구성(또는 임의의 다른 레지스터 구성)을 포함할 수 있다. 계산 회로들(906)은 레지스터 파일(902)에 있는 데이터를 프로세싱하도록 구성된 사전-가산기들, 특수 연산 회로들, 곱셈기들, 사후-가산기들, 누산기들 등을 포함한다. 계산 회로들(906)의 예가 도 7에서 도시되고, 위에서 설명된다(예컨대, MAC 경로(701)의 회로들). 치환 회로들(904)은 계산 회로들(906)에 대한 데이터 선택 네트워크로서 기능한다.
예에서, 위에서 논의된 바와 같이, 레지스터 파일(902)은 레지스터 파일(702) 및 레지스터 파일(704)을 포함한다. 예에서, 치환 회로들(904)은 위에서 설명된 치환 회로들(708, 710 및 712)을 포함한다. 각각의 레지스터 파일(702 및 704)은 복수의 출력 레인들을 제공하며, 여기서, 각각의 레인은 M-비트(예컨대, 각각의 32 개의 레인들은 각각 32-비트임)를 포함한다. 치환 회로(708)는 레지스터 파일(702)에 커플링되고, 레지스터 파일(702)에 의해 제공되는 출력 레인들의 세트를 선택함으로써 벡터를 생성하도록 구성된다. 치환 회로(710)는 또한, 레지스터 파일(702)에 커플링되고, 레지스터 파일(702)에 의해 제공되는 출력 레인들의 세트(예컨대, 치환 회로(708)에 의해 선택된 것과는 잠재적으로 상이한 세트)를 선택함으로써 다른 벡터를 생성하도록 구성된다. 레지스터 파일(702)과 유사하게, 레지스터 파일(704)은 복수의 출력 레인들(예컨대, 레지스터 파일(702)과는 상이한 수의 출력 레인들)을 제공하도록 구성된다. 치환 회로(712)는 레지스터 파일(704)에 커플링되고, 이 레지스터 파일(704)의 출력 레인들의 세트를 선택함으로써 다른 벡터를 생성하도록 구성된다. 치환 회로들(904)의 출력들은 계산 회로들(906)에 제공되고, 이 계산 회로들(906)은 이 출력들에 대해 예컨대 MAC 연산들을 수행한다.
예에서, 각각의 치환 회로(708 및 710)는 입력 벡터의 32 개의 32-비트 레인들 중 하나로부터 각각 16 개의 32-비트 청크들을 선택하도록 구성된다. 32-비트의 16 개의 출력 레인들 각각은 512-비트 출력 벡터를 형성한다. 각각의 치환 회로(708 및 710)는 풀 멀티플렉서(full multiplexer)이고, 임의의 입력을 선택할 수 있다. 예에서, 각각의 치환 회로(708 및 710)는, 32-비트 폭이고 32 개의 상이한 소스 레인들로부터 선택하는 일련의 16 개의 멀티플렉서들을 사용하여 구현될 수 있다. Benes 네트워크들 등과 같은 대안적인 구조들이 사용될 수 있다. 치환 회로(712)는 치환 회로들(708 및 710)과 기능적으로 유사하지만, 예에서는 폭이 256-비트의 입력 벡터로부터만 선택한다. 선택 입도(granularity)는 16-비트이고, 따라서 곱셈기의 각각의 레인이 개별적으로 선택될 수 있다. 치환 회로들(708, 710 및 712)에 대해 위에서 논의된 수들, 폭들 등은 예시적이며, 상이한 폭들을 갖는 상이한 수들의 레인들로부터 선택하기 위해 이 치환 회로들(708, 710 및 712)이 상이한 폭들로 구성될 수 있다는 것에 주목하라.
도 11은 도 1에서 도시된 디바이스(100)의 구현으로서 사용될 수 있는, 예에 따른 프로그램가능 IC(1)를 도시하는 블록 다이어그램이다. 프로그램가능 IC(1)는 프로그램가능 로직(3), 구성 로직(25) 및 구성 메모리(26)를 포함한다. 프로그램가능 IC(1)는 외부 회로들, 이를테면, 비휘발성 메모리(27), DRAM(28) 및 다른 회로들(29)에 커플링될 수 있다. 프로그램가능 로직(3)은 로직 셀들(30), 지원 회로들(31) 및 프로그램가능 인터커넥트(32)를 포함한다. 로직 셀들(30)은 복수의 입력들의 일반적인 로직 기능들을 구현하도록 구성될 수 있는 회로들을 포함한다. 지원 회로들(31)은 전용 회로들, 이를테면, 트랜시버들, 입력/출력 블록들, 디지털 신호 프로세서들, 메모리들 등을 포함한다. 로직 셀들 및 지원 회로들(31)은 프로그램가능 인터커넥트(32)를 사용하여 인터커넥팅될 수 있다. 로직 셀들(30)을 프로그램하고, 지원 회로들(31)의 파라미터들을 세팅하며, 프로그램가능 인터커넥트(32)를 프로그램하기 위한 정보는 구성 로직(25)에 의해 구성 메모리(26)에 저장된다. 구성 로직(25)은 비휘발성 메모리(27) 또는 임의의 다른 소스로부터(예컨대, DRAM(28) 또는 다른 회로들(29)로부터) 구성 데이터를 획득할 수 있다. 일부 예들에서, 프로그램가능 IC(1)는 프로세싱 시스템(2)을 포함한다. 프로세싱 시스템(2)은 마이크로프로세서(들), 메모리, 지원 회로들, IO 회로들 등을 포함할 수 있다.
도 12는, 트랜시버들(37), 구성가능 로직 블록들("CLB들")(33), 랜덤 액세스 메모리 블록들("BRAM들")(34), 입력/출력 블록들("IOB들")(36), 구성 및 클록킹 로직("CONFIG/CLOCKS")(42), 디지털 신호 프로세싱 블록들("DSP들")(35), 전문 입력/출력 블록들("I/O")(41)(예컨대, 구성 포트들 및 클록 포트들), 및 다른 프로그램가능 로직(39), 이를테면, 디지털 클록 관리자들, 아날로그-디지털 변환기들, 시스템 모니터링 로직 등을 포함하여, 많은 수의 상이한 프로그램가능 타일들을 포함하는 프로그램가능 IC(1)의 FPGA(field programmable gate array) 구현을 예시한다. FPGA는 또한, PCIe 인터페이스들(40), 아날로그-디지털 변환기(ADC; analog-to-digital converter)들(38) 등을 포함할 수 있다.
일부 FPGA들에서, 각각의 프로그램가능 타일은, 도 12의 상단에 포함된 예들에 의해 도시된 바와 같이, 동일한 타일 내의 프로그램가능 로직 엘리먼트의 입력 및 출력 단자들(48)로의 연결들을 갖는 적어도 하나의 프로그램가능 인터커넥트 엘리먼트("INT")(43)를 포함할 수 있다. 각각의 프로그램가능 인터커넥트 엘리먼트(43)는 또한, 동일한 타일 또는 다른 타일(들)에 있는 인접한 프로그램가능 인터커넥트 엘리먼트(들)의 세그먼트들(49)을 인터커넥팅하기 위한 연결들을 포함할 수 있다. 각각의 프로그램가능 인터커넥트 엘리먼트(43)는 또한, 로직 블록들(도시되지 않음) 사이에서 일반적인 라우팅 자원들의 세그먼트들(50)을 인터커넥팅하기 위한 연결들을 포함할 수 있다. 일반적인 라우팅 자원들은, 인터커넥트 세그먼트들(예컨대, 인터커넥트 세그먼트들(50))의 트랙들을 포함하는 로직 블록들(도시되지 않음)과 인터커넥트 세그먼트들을 연결하기 위한 스위치 블록들(도시되지 않음) 사이의 라우팅 채널들을 포함할 수 있다. 일반적인 라우팅 자원들의 인터커넥트 세그먼트들(예컨대, 인터커넥트 세그먼트들(50))은 하나 이상의 로직 블록들에 걸쳐 있을 수 있다. 일반적인 라우팅 자원들과 함께 취해지는 프로그램가능 인터커넥트 엘리먼트들(43)은 예시된 FPGA에 대한 프로그램가능 인터커넥트 구조("프로그램가능 인터커넥트")를 구현한다.
예시적인 구현에서, CLB(33)는, 사용자 로직 플러스 단일 프로그램가능 인터커넥트 엘리먼트("INT")(43)를 구현하도록 프로그램될 수 있는 구성가능 로직 엘리먼트("CLE")(44)를 포함할 수 있다. BRAM(34)은 하나 이상의 프로그램가능 인터커넥트 엘리먼트들에 부가하여 BRAM 로직 엘리먼트("BRL")(45)를 포함할 수 있다. 통상적으로, 타일에 포함된 인터커넥트 엘리먼트들의 수는 타일의 높이에 따라 좌우된다. 도시된 예에서, BRAM 타일은 5 개의 CLB들과 동일한 높이를 갖지만, 다른 수들(예컨대, 4)이 또한 사용될 수 있다. DSP 타일(35)은 적절한 수의 프로그램가능 인터커넥트 엘리먼트들에 부가하여 DSP 로직 엘리먼트("DSPL")(46)를 포함할 수 있다. IOB(36)는, 예컨대, 프로그램가능 인터커넥트 엘리먼트(43)의 하나의 인스턴스에 부가하여 입력/출력 로직 엘리먼트("IOL")(47)의 2 개의 인스턴스들을 포함할 수 있다. 당업자들에게 자명할 바와 같이, 예컨대, I/O 로직 엘리먼트(47)에 연결된 실제 I/O 패드들은 통상적으로, 입력/출력 로직 엘리먼트(47)의 영역으로 한정되지 않는다.
도시된 예에서, (도 12에서 도시된) 다이의 중심 근처의 수평 영역은 구성, 클록 및 다른 제어 로직에 대해 사용된다. 이러한 수평 영역 또는 열로부터 연장되는 수직 열들(51)은 FPGA의 폭에 걸쳐 클록들 및 구성 신호들을 분배하기 위해 사용된다.
도 12에서 예시된 아키텍처를 활용하는 일부 FPGA들은 FPGA의 큰 부분을 구성하는 규칙적인 열 구조(columnar structure)를 방해하는 부가적인 로직 블록들을 포함한다. 부가적인 로직 블록들은 프로그램가능 블록들 및/또는 전용 로직일 수 있다.
도 12가 예시적인 FPGA 아키텍처만을 예시하는 것으로 의도됨에 주목하라. 예컨대, 행 내의 로직 블록들의 수들, 행들의 상대 폭, 행들의 수 및 순서, 행들에 포함된 로직 블록들의 타입들, 로직 블록들의 상대 사이즈들, 및 도 12의 상단에 포함된 인터커넥트/로직 구현들은 순수하게 예시적이다. 예컨대, 실제 FPGA에서, CLB들이 등장하는 곳마다, 사용자 로직의 효율적인 구현을 용이하게 하기 위해 CLB들의 하나 초과의 인접 행이 통상적으로 포함되지만, 인접 CLB 행들의 수는 FPGA의 전체 사이즈에 따라 변한다.
전술된 내용이 특정 예들에 관한 것이지만, 다른 및 추가적인 예들이 본 개시내용의 기본적인 범위를 벗어나지 않으면서 고안될 수 있으며, 본 개시내용의 범위는 다음의 청구항들에 의해 결정된다.

Claims (15)

  1. IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE로서,
    코어;
    데이터 메모리 및 프로그램 메모리를 포함하는 메모리 ―상기 프로그램 메모리는 상기 코어에 커플링되며, 상기 데이터 메모리는 상기 코어에 커플링되고, 상기 DPE 외부에 있는 개개의 적어도 하나의 부가 코어로의 적어도 하나의 연결을 포함함―;
    하드웨어 동기화 회로소자 및 DMA(direct memory access) 회로소자를 포함하는 지원 회로소자 ―상기 하드웨어 동기화 회로소자 및 DMA 회로소자 각각은 상기 데이터 메모리에 커플링됨―;
    상기 DMA 회로소자 및 상기 코어에 커플링된 스트리밍 인터커넥트; 및
    상기 코어, 상기 메모리 및 상기 지원 회로소자에 커플링된 메모리-매핑식 인터커넥트
    를 포함하는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  2. 제1 항에 있어서,
    상기 지원 회로소자는 상기 코어 및 상기 메모리에 커플링된 디버그 회로소자를 더 포함하는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  3. 제1 항에 있어서,
    상기 데이터 메모리는 하나 이상의 RAM(random access memory) 뱅크들, 및 상기 하나 이상의 RAM 뱅크들로의 액세스를 중재(arbitrate)하도록 구성된 중재 로직을 포함하는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  4. 제3 항에 있어서,
    상기 하드웨어 동기화 회로소자는,
    상기 코어, 상기 DPE 어레이에 있는 다른 DPE 내의 코어, 및 상기 DMA 회로소자에 의한 상기 하나 이상의 RAM 뱅크들로의 액세스를 로크(lock)하거나; 또는
    상기 코어와, 상기 DPE 어레이에 있는 적어도 하나의 다른 DPE 내의 적어도 하나의 다른 코어 사이의 동기화를 제공하도록
    구성되는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  5. 제1 항에 있어서,
    상기 메모리-매핑식 인터커넥트에 커플링된 복수의 레지스터들을 더 포함하는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  6. 제1 항에 있어서,
    상기 스트리밍 인터커넥트는 상기 DPE 어레이에 있는 적어도 하나의 부가 DPE로의 적어도 하나의 연결을 갖는 스트림 스위치를 포함하는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  7. 제6 항에 있어서,
    상기 스트림 스위치는 상기 코어로의 연결을 포함하는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  8. 제1 항에 있어서,
    상기 스트리밍 인터커넥트는 복수의 스트림 스위치들을 포함하고, 상기 복수의 스트림 스위치들 각각은 상이한 방향으로 상기 DPE 어레이에 있는 상이한 DPE로의 적어도 하나의 연결을 갖는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  9. 제1 항에 있어서,
    상기 메모리-매핑식 인터커넥트는 상기 DPE 어레이에 있는 적어도 하나의 부가 DPE로의 적어도 하나의 연결을 갖는 메모리-매핑식 스위치를 포함하는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  10. 제1 항에 있어서,
    상기 코어는 상기 DPE 어레이에 있는 다른 DPE에 배치된 다른 코어에 대한 캐스케이딩 인터페이스, 또는 상기 메모리-매핑식 인터커넥트에 커플링된 복수의 레지스터들을 포함하는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  11. 제1 항에 있어서,
    상기 코어는 VLIW(very long instruction word) 프로세서, SIMD(single instruction, multiple data) 프로세서, 또는 VLIW SIMD 프로세서를 포함하는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  12. 제1 항에 있어서,
    상기 프로그램 메모리는 상기 코어에 배치되고, 상기 DPE는, 상기 지원 회로소자 및 상기 데이터 메모리를 갖는 메모리 모듈을 더 포함하며, 상기 메모리 모듈은 상기 DPE 어레이에 있는 적어도 하나의 부가 DPE에 의해 공유되도록 구성된 적어도 하나의 인터페이스를 포함하는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  13. 제12 항에 있어서,
    상기 DMA 회로소자는, 상기 스트리밍 인터커넥트에 커플링된 출력 및 상기 데이터 메모리에 커플링된 입력을 갖는 제1 DMA 회로, 및 상기 스트리밍 인터커넥트에 커플링된 입력 및 상기 데이터 메모리에 커플링된 출력을 갖는 제2 DMA 회로를 포함하는,
    IC(integrated circuit)에서 DPE(data processing engine) 어레이를 위한 DPE.
  14. IC(integrated circuit)로서,
    복수의 DPE(data processing engine)들을 갖는 DPE 어레이를 포함하며,
    상기 복수의 DPE들 각각은,
    코어;
    데이터 메모리 및 프로그램 메모리를 포함하는 메모리 ―상기 프로그램 메모리는 상기 코어에 커플링되며, 상기 데이터 메모리는 상기 코어에 커플링되고, 상기 DPE 외부에 있는 개개의 적어도 하나의 부가 코어로의 적어도 하나의 연결을 포함함―;
    하드웨어 동기화 회로소자 및 DMA(direct memory access) 회로소자를 포함하는 지원 회로소자 ―상기 하드웨어 동기화 회로소자 및 DMA 회로소자 각각은 상기 데이터 메모리에 커플링됨―;
    상기 DMA 회로소자 및 상기 코어에 커플링된 스트리밍 인터커넥트; 및
    상기 코어, 상기 메모리 및 상기 지원 회로소자에 커플링된 메모리-매핑식 인터커넥트
    를 포함하는,
    IC(integrated circuit).
  15. 제14 항에 있어서,
    상기 프로그램 메모리는 상기 코어에 배치되고, 상기 IC는, 상기 지원 회로소자 및 상기 데이터 메모리를 갖는 메모리 모듈을 더 포함하며, 상기 메모리 모듈은 상기 DPE 어레이에 있는 적어도 하나의 부가 DPE에 의해 공유되도록 구성된 적어도 하나의 인터페이스를 포함하는,
    IC(integrated circuit).
KR1020207029828A 2018-04-03 2019-03-22 집적 회로를 위한 데이터 프로세싱 엔진 타일 아키텍처 KR20200139178A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/944,408 2018-04-03
US15/944,408 US11372803B2 (en) 2018-04-03 2018-04-03 Data processing engine tile architecture for an integrated circuit
PCT/US2019/023561 WO2019194988A1 (en) 2018-04-03 2019-03-22 Data processing engine tile architecture for an integrated circuit

Publications (1)

Publication Number Publication Date
KR20200139178A true KR20200139178A (ko) 2020-12-11

Family

ID=66041756

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207029828A KR20200139178A (ko) 2018-04-03 2019-03-22 집적 회로를 위한 데이터 프로세싱 엔진 타일 아키텍처

Country Status (6)

Country Link
US (2) US11372803B2 (ko)
EP (1) EP3776227A1 (ko)
JP (1) JP7377811B2 (ko)
KR (1) KR20200139178A (ko)
CN (1) CN111954872A (ko)
WO (1) WO2019194988A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190319933A1 (en) * 2018-04-12 2019-10-17 Alibaba Group Holding Limited Cooperative tls acceleration
US11074213B2 (en) * 2019-06-29 2021-07-27 Intel Corporation Apparatuses, methods, and systems for vector processor architecture having an array of identical circuit blocks
US11573795B1 (en) * 2021-08-02 2023-02-07 Nvidia Corporation Using a vector processor to configure a direct memory access system for feature tracking operations in a system on a chip

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3776137A (en) 1971-09-24 1973-12-04 Aai Corp Projectile and cartridge arrangement
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
US6526557B1 (en) 2000-07-25 2003-02-25 Xilinx, Inc. Architecture and method for partially reconfiguring an FPGA
US7028165B2 (en) * 2000-12-06 2006-04-11 Intel Corporation Processor stalling
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
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
US7882307B1 (en) * 2006-04-14 2011-02-01 Tilera Corporation Managing cache memory 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
US7478357B1 (en) 2006-08-14 2009-01-13 Xilinx, Inc. Versatile bus interface macro for dynamically reconfigurable designs
US7724815B1 (en) 2007-02-27 2010-05-25 Xilinx, Inc. Method and apparatus for a programmably terminated receiver
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
CN102369601B (zh) 2009-03-30 2015-04-29 三洋电机株式会社 太阳能电池
US8359448B1 (en) 2009-07-17 2013-01-22 Xilinx, Inc. Specific memory controller implemented using reconfiguration
US8468169B2 (en) * 2010-12-01 2013-06-18 Microsoft Corporation Hierarchical software locking
US8415974B1 (en) 2011-03-09 2013-04-09 Xilinx, Inc. Methods and circuits enabling dynamic reconfiguration
WO2013102970A1 (ja) * 2012-01-04 2013-07-11 日本電気株式会社 データ処理装置、及びデータ処理方法
CN104204990B (zh) * 2012-03-30 2018-04-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
US20140289445A1 (en) 2013-03-22 2014-09-25 Antony Savich Hardware accelerator system and method
US9880966B1 (en) 2015-09-03 2018-01-30 Xilinx, Inc. Encapsulating metadata of a platform for application-specific tailoring and reuse of the platform in an integrated circuit
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
US10089115B2 (en) * 2016-07-07 2018-10-02 Intel Corporation Apparatus to optimize GPU thread shared local memory access

Also Published As

Publication number Publication date
WO2019194988A1 (en) 2019-10-10
EP3776227A1 (en) 2021-02-17
JP2021520542A (ja) 2021-08-19
US11372803B2 (en) 2022-06-28
US20190303347A1 (en) 2019-10-03
US20220283985A1 (en) 2022-09-08
JP7377811B2 (ja) 2023-11-10
CN111954872A (zh) 2020-11-17

Similar Documents

Publication Publication Date Title
US20220283985A1 (en) Data processing engine tile architecture for an integrated circuit
Huangfu et al. Medal: Scalable dimm based near data processing accelerator for dna seeding algorithm
US8984043B2 (en) Multiplying and adding matrices
Zhang et al. FPGA vs. GPU for sparse matrix vector multiply
CN108292252B (zh) 用于容错和检错的系统、方法和装置
EP1038253A2 (en) Multiprocessor computer architecture incorporating a plurality of memory algorithm processors in the memory subsystem
CN102640131A (zh) 并行线程处理器中的一致分支指令
US7930521B1 (en) Reducing multiplexer circuitry associated with a processor
US7752592B2 (en) Scheduler design to optimize system performance using configurable acceleration engines
CN104008021A (zh) 针对多数据体系结构的精确的异常信号发送
US8972782B2 (en) Exposed-pipeline processing element with rollback
US10747531B1 (en) Core for a data processing engine in an integrated circuit
US10579559B1 (en) Stall logic for a data processing engine in an integrated circuit
US11061673B1 (en) Data selection network for a data processing engine in an integrated circuit
JP2011503733A (ja) リコンフィギュラブルな浮動小数点レベルおよびビットレベルのデータ処理ユニット
US20220014202A1 (en) Three-Dimensional Stacked Programmable Logic Fabric and Processor Design Architecture
US11455171B2 (en) Multiported parity scoreboard circuit
US11163605B1 (en) Heterogeneous execution pipeline across different processor architectures and FPGA fabric
Isaacson et al. The Task-Resource Matrix: Control for a Distributed Reconfigurable Multi-Processor Hardware RTOS.
EP4156518A1 (en) Clock synchronization process and circuitry
US11960853B2 (en) Folded integer multiplication for field-programmable gate arrays
US20240028422A1 (en) Lock and buffer scheduling in multi-core architectures
US20220382514A1 (en) Control logic for configurable and scalable multi-precision operation
US20230059970A1 (en) Weight sparsity in data processing engines
WO2009004628A2 (en) Multi-core cpu