KR102441717B1 - 이종 멀티프로세서 프로그램 컴파일레이션 타겟팅 프로그램가능 집적 회로 - Google Patents
이종 멀티프로세서 프로그램 컴파일레이션 타겟팅 프로그램가능 집적 회로 Download PDFInfo
- Publication number
- KR102441717B1 KR102441717B1 KR1020177015833A KR20177015833A KR102441717B1 KR 102441717 B1 KR102441717 B1 KR 102441717B1 KR 1020177015833 A KR1020177015833 A KR 1020177015833A KR 20177015833 A KR20177015833 A KR 20177015833A KR 102441717 B1 KR102441717 B1 KR 102441717B1
- Authority
- KR
- South Korea
- Prior art keywords
- kernel
- configuration bitstream
- host
- region
- heterogeneous multiprocessor
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2115/00—Details relating to the type of the circuit
- G06F2115/10—Processors
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Geometry (AREA)
- Evolutionary Computation (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Logic Circuits (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
- Saccharide Compounds (AREA)
Abstract
OpenCL 프로그램 컴파일레이션은 프로세서를 사용하여, 이종 멀티프로세서 디자인의 제1 커널의 레지스터 전송 레벨(register transfer level: RTL) 기술(description)을 발생하는 것(705) 및 베이스 플랫폼 회로 디자인과 제1 커널의 RTL 기술을 통합하는 것(710)을 포함할 수도 있다. 베이스 플랫폼 회로 디자인은 이종 멀티프로세서 디자인의 호스트에 프로그램가능 집적 회로 내의 정적 인터페이스를 제공한다. 제1 구성 비트스트림은 프로세서를 사용하여 제1 커널의 RTL 기술로부터 발생될 수도 있다(715). 제1 구성 비트스트림은 제1 커널의 하드웨어 구현예 및 구성 비트스트림을 위한 지원 데이터를 지정한다. 제1 구성 비트스트림 및 지원 데이터는 이진 컨테이너(720) 내에 포함될 수도 있다.
Description
본 발명은 집적 회로(integrated circuits: ICs)에 관한 것으로서, 더 구체적으로는 이종 멀티프로세서 디자인 내로 프로그램가능 IC를 합체하는 것에 관한 것이다.
이종 멀티프로세서 프레임워크는 현대식 프로세서, 서버, 핸드헬드(handheld)/임베디드(embedded) 디바이스 등의 크로스 플랫폼이고 병렬 프로그래밍을 지원하는 표준을 제공한다. "OpenCL"이라 칭하는 개방형 컴퓨팅 언어(Open Computing Language)는 이종 컴퓨팅 플랫폼을 가로질러 실행될 수도 있는 프로그램을 기입하기 위한 이종 멀티프로세서 프레임워크의 예이다. 이종 컴퓨팅 플랫폼은 중앙 프로세싱 유닛(central processing unit: CPU), 그래픽 프로세싱 유닛(graphics processing unit: GPU), 디지털 신호 프로세서(digital signal processor: DSP) 등을 포함할 수도 있다.
이종 멀티프로세서 프로그램, 예를 들어 OpenCL 프로그램은 호스트 시스템 상에서 실행하는 부분 및 디바이스 상에서 실행하는 하나 이상의 다른 부분을 포함한다. 통상적으로, 호스트 시스템은 CPU를 포함하고, 반면에 디바이스는 GPU, DSP 등으로서 구현될 수도 있다. 커널이라 칭할 수도 있는 디바이스 상에서 실행되는 부분은 OpenCL, OpenCL C, 또는 이종 멀티프로세서 프레임워크 또는 OpenCL에 적응된 다른 고레벨 프로그래밍 언어로 코딩될 수도 있다. 호스트 상에서 실행되는 부분은 예를 들어, C 또는 C++로 프로그램될 수도 있고, 다양한 디바이스를 가로질러 이종 멀티프로세서 환경을 제어한다.
전술된 환경은 본질적으로 이종이지만, DSP이건 GPU이건간에 각각의 특정 디바이스는 정적 아키텍처를 갖는다. 비교에 의해, 필드 프로그램가능 게이트 어레이(field programmable gate array: FPGA)와 같은 프로그램가능 IC는 하드웨어 가속의 용도로 사용될 수도 있는 극단적으로 가요성 하드웨어 아키텍처를 갖는다. 그러나, 디바이스로서 프로그램가능 IC를 이용하기 위해, 프로그램가능 IC 내에 구현된 회로는 호스트와 상호작용하고 이종 멀티프로세서 환경의 맥락(context) 내에서 동작하는 것이 가능해야 한다.
방법은 프로세서를 사용하여, 이종 멀티프로세서 디자인의 제1 커널의 레지스터 전송 레벨(register transfer level: RTL) 기술(description)을 발생하는 것, 이종 멀티프로세서 디자인의 호스트에 인터페이스를 제공하는 프로그램가능 집적 회로(integrated circuit: IC) 내에 정적 구역을 제공하는 베이스 플랫폼 회로 디자인과 제1 커널의 RTL 기술을 통합하는 것, 및 제1 커널의 RTL 기술로부터 그리고 프로세서를 사용하여, 제1 커널의 하드웨어 구현예를 지정하는 제1 구성 비트스트림 및 구성 비트스트림을 위한 지원 데이터를 발생하는 것을 포함한다. 방법은 이진 컨테이너 내에 제1 구성 비트스트림 및 지원 데이터를 포함하는 것을 또한 포함한다.
방법은 프로세서를 사용하여, 이종 멀티프로세서 디자인의 제1 커널의 RTL 기술을 발생하는 것, 이종 멀티프로세서 디자인의 호스트에 프로그램가능 IC 내의 정적 인터페이스를 제공하는 베이스 플랫폼 회로 디자인과 제1 커널의 RTL 기술을 통합하는 것, 및 제1 커널의 RTL 기술로부터 그리고 프로세서를 사용하여, 제1 커널의 RTL 기술을 위한 지원 데이터를 발생하는 것을 포함한다. 방법은 이진 컨테이너 내에 제1 커널의 RTL 기술 및 지원 데이터를 포함하는 것을 또한 포함한다.
시스템은 실행가능 동작을 개시하도록 프로그램된 프로세서를 포함할 수도 있다. 실행가능 동작은 이종 멀티프로세서 디자인의 제1 커널의 RTL 기술을 발생하는 것, 이종 멀티프로세서 디자인의 호스트에 인터페이스를 제공하는 프로그램가능 IC 내에 정적 구역을 제공하는 베이스 플랫폼 회로 디자인과 제1 커널의 RTL 기술을 통합하는 것, 및 제1 커널의 RTL 기술로부터, 제1 커널의 하드웨어 구현예를 지정하는 제1 구성 비트스트림 및 구성 비트스트림을 위한 지원 데이터를 발생하는 것을 포함한다. 방법은 이진 컨테이너 내에 제1 구성 비트스트림 및 지원 데이터를 포함하는 것을 또한 포함할 수도 있다.
이 요약 섹션은 청구된 주제의 임의의 주요 또는 본질적인 특징을 식별하기 위한 것이 아니라, 단지 특정 개념을 소개하기 위해 제공된 것이다. 본 발명의 구성의 다른 특징은 첨부 도면으로부터 그리고 이하의 상세한 설명으로부터 명백해질 것이다.
본 발명의 구성은 첨부 도면에 예로서 도시되어 있다. 그러나, 도면은 단지 도시된 특정 구현예에 본 발명의 구성을 한정하는 것으로 해석되어서는 안된다. 다양한 양태 및 장점이 이하의 상세한 설명의 재고시에 그리고 도면을 참조시에 명백해질 것이다.
도 1은 집적 회로(IC)용 예시적인 아키텍처를 도시하고 있는 블록도이다.
도 2는 예시적인 데이터 프로세싱 시스템(시스템)을 도시하고 있는 블록도이다.
도 3은 도 2의 타겟 플랫폼을 위한 예시적인 아키텍처를 도시하고 있는 블록도이다.
도 4는 도 2 및 도 3의 타겟 플랫폼을 포함하는 이종 멀티프로세서 실행시간 시스템의 예시적인 계층을 도시하고 있는 블록도이다.
도 5는 도 3의 IC 내에 구현된 예시적인 회로를 도시하고 있는 블록도이다.
도 6은 커널 구역의 예시적인 구현예를 도시하고 있는 블록도이다.
도 7은 이종 멀티프로세서 디자인의 커널을 구현하는 예시적인 방법을 도시하고 있는 흐름도이다.
도 8은 프로그램 가능 IC 내에 이종 멀티프로세서 디자인의 커널을 구현하기 위한 예시적인 프로세스를 도시하고 있는 블록 흐름도이다.
도 9는 프로그램가능 IC 내의 구현을 위한 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널을 프로세싱하는 예시적인 방법을 도시하고 있는 흐름도이다.
도 10은 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 예시적인 프로세싱을 도시하고 있는 블록도이다.
도 11은 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 예시적인 프로세싱을 도시하고 있는 블록도이다.
도 12는 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 예시적인 프로세싱을 도시하고 있는 블록도이다.
도 13a 및 도 13b는 함께 취하여, 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 프로세싱을 도시하고 있다.
도 14는 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 예시적인 프로세싱을 도시하고 있는 블록도이다.
도 15는 예시적인 디렉토리 구조이다.
도 16은 예시적인 커널 실행의 방법을 도시하고 있는 흐름도이다.
도 1은 집적 회로(IC)용 예시적인 아키텍처를 도시하고 있는 블록도이다.
도 2는 예시적인 데이터 프로세싱 시스템(시스템)을 도시하고 있는 블록도이다.
도 3은 도 2의 타겟 플랫폼을 위한 예시적인 아키텍처를 도시하고 있는 블록도이다.
도 4는 도 2 및 도 3의 타겟 플랫폼을 포함하는 이종 멀티프로세서 실행시간 시스템의 예시적인 계층을 도시하고 있는 블록도이다.
도 5는 도 3의 IC 내에 구현된 예시적인 회로를 도시하고 있는 블록도이다.
도 6은 커널 구역의 예시적인 구현예를 도시하고 있는 블록도이다.
도 7은 이종 멀티프로세서 디자인의 커널을 구현하는 예시적인 방법을 도시하고 있는 흐름도이다.
도 8은 프로그램 가능 IC 내에 이종 멀티프로세서 디자인의 커널을 구현하기 위한 예시적인 프로세스를 도시하고 있는 블록 흐름도이다.
도 9는 프로그램가능 IC 내의 구현을 위한 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널을 프로세싱하는 예시적인 방법을 도시하고 있는 흐름도이다.
도 10은 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 예시적인 프로세싱을 도시하고 있는 블록도이다.
도 11은 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 예시적인 프로세싱을 도시하고 있는 블록도이다.
도 12는 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 예시적인 프로세싱을 도시하고 있는 블록도이다.
도 13a 및 도 13b는 함께 취하여, 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 프로세싱을 도시하고 있다.
도 14는 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 예시적인 프로세싱을 도시하고 있는 블록도이다.
도 15는 예시적인 디렉토리 구조이다.
도 16은 예시적인 커널 실행의 방법을 도시하고 있는 흐름도이다.
본 명세서는 신규한 특징을 규정하는 청구범위로 종결되지만, 본 명세서에 설명된 다양한 특징은 도면과 함께 상세한 설명의 고려로부터 더 양호하게 이해될 것이다. 본 명세서에 설명된 프로세스(들), 기계(들), 제조(들) 및 이들의 임의의 변형은 예시의 목적으로 제공된 것이다. 본 명세서에 설명된 특정 구조적 및 기능적 상세는 한정으로서 해석되어서는 안되고, 사실상 임의의 적합하게 상세한 구조로 설명된 특징을 다양하게 채용하도록 당 기술 분야의 숙련자를 교시하기 위한 대표적인 기초로서 그리고 청구범위를 위한 기초로서만 해석되어야 한다. 또한, 본 명세서의 용어 및 구문은 한정이 되도록 의도된 것은 아니고, 오히려 설명된 특징의 이해가능한 설명을 제공하도록 의도된 것이다.
본 발명은 집적 회로(ICs)에 관한 것으로서, 더 구체적으로는 이종 멀티프로세서 시스템 내로 프로그램가능 IC를 합체하는 것에 관한 것이다. 본 명세서에 설명된 본 발명의 구성에 따르면, 프로그램가능 IC는 하나 이상의 커널을 구현하기 위해 이종 멀티프로세서 디자인 내에 사용될 수도 있다. 이종 멀티프로세서의 커널 중 하나 이상은 컴파일링되고 프로그램가능 IC의 프로그램가능 회로를 사용하여 구현되는 하드웨어로 변환될 수도 있다. 이와 관련하여, 프로그램가능 IC를 사용하여 구현된 커널은, 커널이 중앙 프로세싱 유닛(CPU) 이외의 프로세서에 실행을 위해 오프로딩되는 실행가능 프로그램 코드로서 구현되는 것에 대조적으로 회로를 사용하여 구현된다. 하드웨어 내로 합성되는 이종 멀티프로세서 디자인의 커널부는 이종 멀티프로세서 디자인의 호스트와 협동하여 동작한다.
일 양태에서, 프로그램가능 IC는 베이스 플랫폼을 제공할 수도 있다. 커널(들)은 베이스 플랫폼 위에 그리고/또는 협동하여 구현될 수도 있다. 베이스 플랫폼은 프로그램가능 IC가 결합되는 타겟 플랫폼 및 호스트와 통신하기 위해 커널을 위해 필요한 인프라구조를 제공한다. 베이스 플랫폼은 예를 들어, 타겟 플랫폼의 판매자(vendor)에 의해 구현되거나 결정될 수도 있다. 따라서, 베이스 플랫폼은 사용된 프로그램가능 IC의 특정 모델 또는 유형 및 프로그램가능 IC와 함께 사용된 타겟 플랫폼의 모델 또는 유형에 따라 다양할 수도 있다.
본 명세서에 설명된 본 발명의 구성은 데이터 프로세싱 시스템에 의해 수행된 방법 또는 프로세스로서 구현될 수도 있다. 일 예에서, 방법은 하나 이상의 커널이 프로그램가능 IC의 프로그램가능 회로 내에 구현되는 이종 멀티프로세서 디자인의 구현예에 관련될 수도 있다. 다른 예에서, 방법은 프로그램가능 IC를 사용하여 구현된 커널을 포함하는 이종 멀티프로세서 시스템의 동작, 예를 들어 실행시간 동작에 관련될 수도 있다.
다른 양태에서, 본 발명의 구성은 CPU를 갖는 데이터 프로세싱 시스템으로서 구현될 수도 있다. 데이터 프로세싱 시스템은 이종 멀티프로세서 디자인의 구현에 관련된 방법, 예를 들어 컴파일 시간 방법을 수행할 수도 있는 데, 여기서 하나 이상의 커널은 프로그램가능 IC의 프로그램가능 회로 내에 구현된다. 데이터 프로세싱 시스템은 또한 프로그램가능 IC를 포함할 수도 있다. 이 경우에, 데이터 프로세싱 시스템은 프로그램가능 IC를 사용하여 구현된 커널을 포함하는 이종 멀티프로세서 디자인의 동작, 예를 들어 실행시간 동작에 관련된 방법을 수행할 수도 있다.
또 다른 양태에서, 본 발명의 구성은 IC로서 구현될 수도 있다. IC는 베이스 플랫폼을 포함할 수도 있다. IC는 또한 베이스 플랫폼과 협동적으로 동작하는 그 내부에 구현된 하나 이상의 커널을 포함하도록 구성될 수도 있다. IC는 IC 내에 구현된 커널(들) 및/또는 다양한 호스트 상호작용을 수반하는 실행시간 동작 방법을 구현할 수도 있다.
또 다른 양태에서, 본 발명의 구성은 실행될 때, 프로세서 및/또는 시스템이 본 명세서에 설명된 다양한 방법 및/또는 프로세스를 수행하고 그리고/또는 개시하게 하는 프로그램 코드를 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서 구현될 수도 있다.
예시의 간단화 및 명료화를 위해, 도면에 도시되어 있는 요소는 반드시 실제 축적대로 도시되어 있지는 않다. 예를 들어, 요소의 일부의 치수는 명료화를 위해 다른 요소에 비해 과장되어 있을 수도 있다. 또한, 적절한 것으로 고려되는 경우에, 도면 부호는 대응, 유사 또는 비슷한 특징부를 지시하기 위해 도면 사이에서 반복된다.
도 1은 IC용 예시적인 아키텍처(100)를 도시하고 있는 블록도이다. 일 양태에서, 아키텍처(100)는 필드 프로그램가능 게이트 어레이(FPGA) 유형의 IC 내에 구현된다. 아키텍처(100)가 프로세서를 포함하는 경우에, 아키텍처(100)는 또한 SOC 유형의 IC를 표현한다. SOC는 프로그램 코드를 실행하는 프로세서 및 하나 이상의 다른 회로 시스템을 포함하는 IC이다. 회로 시스템은 프로세서로서 동일한 기판 내에 구현된다. 회로 시스템은 서로 그리고 프로세스와 협동적으로 동작할 수도 있다.
도시되어 있는 바와 같이, 아키텍처(100)는 다수의 상이한 유형의 프로그램가능 회로, 예를 들어, 로직, 블록을 포함한다. 예를 들어, 아키텍처(100)는 멀티-기가비트 송수신기(multi-gigabit transceivers: MGTs)(101), 구성가능 논리 블록(configurable logic blocks: CLBs)(102), 랜덤 액세스 메모리 블록(random access memory blocks: BRAMs)(103), 입출력 블록(input/output blocks: IOBs)(104), 구성 및 클럭킹 로직(configuration and clocking logic: CONFIG/CLOCKS)(105), 디지털 신호 프로세싱 블록(digital signal processing blocks: DSPs)(106), 특수 I/O 블록(107)(예를 들어, 구성 포트 및 클럭 포트), 및 디지털 클럭 관리자, 아날로그-대-디지털 변환기, 시스템 모니터링 로직 등과 같은 다른 프로그램가능 로직(108)을 포함할 수도 있다.
몇몇 IC에서, 각각의 프로그램가능 타일은 각각의 인접한 타일 내의 대응 상호접속 소자(interconnect element: INT)(111)로 그리고 그로부터 표준화된 접속부를 갖는 프로그램 가능 INT(111)를 포함한다. 따라서, INT(111)는 함께 취하여, 도시되어 있는 IC를 위한 프로그램 가능 상호접속 구조를 구현한다. 각각의 INT(111)는 도 1의 상부에 포함된 예에 의해 도시되어 있는 바와 같이, 동일한 타일 내의 프로그램가능 논리 소자로 그리고 그로부터 접속부를 또한 포함한다.
예를 들어, CLB(102)는 단일의 INT(111)에 더하여 사용자 로직을 구현하도록 프로그램될 수도 있는 구성가능 논리 소자(configurable logic element: CLE)(112)를 포함할 수도 있다. BRAM(103)이 하나 이상의 INT(111)에 추가하여 BRAM 논리 소자(BRL)(113)를 포함할 수도 있다. 통상적으로, 타일 내에 포함된 INT(111)의 수는 타일의 높이에 의존한다. 도시되어 있는 바와 같이, BRAM 타일은 5개의 CLB와 동일한 높이를 갖지만, 다른 수(예를 들어, 4개)가 또한 사용될 수도 있다. DSP 타일(106)은 적절한 수의 INT(111)에 추가하여 DSP 논리 소자(DSPL)(114)를 포함할 수도 있다. IOB(104)가 예를 들어, INT(111)의 일 인스턴스에 추가하여 I/O 논리 소자(IOL)(115)의 2개의 인스턴스를 포함할 수도 있다. 당 기술 분야의 숙련자들에게 명백할 것인 바와 같이, 예를 들어 IOL(115)에 접속된 실제 I/O 패드는 통상적으로 IOL(115)의 영역에 국한되지 않는다.
도 1에 도시되어 있는 예에서, 예를 들어 구역(105, 107)으로 형성된 다이의 중심 부근의 칼럼 영역은 구성, 클럭, 및 다른 제어 로직을 위해 사용될 수도 있다. 이 칼럼으로부터 연장하는 수평 영역(109)은 프로그램가능 IC의 폭을 가로질러 클럭 및 구성 신호를 분산하는 데 사용된다.
도 1에 도시되어 있는 아키텍처를 이용하는 몇몇 IC는 IC의 대부분을 구성하는 규칙적인 칼럼 구조를 붕괴하는 부가의 논리 블록을 포함한다. 부가의 논리 블록은 프로그램가능 블록 및/또는 전용 회로일 수도 있다. 예를 들어, PROC(110)으로서 도시되어 있는 선택적 프로세서 블록은 CLB 및 BRAM의 다수의 칼럼에 걸쳐 있다.
일 양태에서, PROC(110)은 IC의 프로그램가능 회로를 구현하는 다이의 부분으로서 제작되는 전용 회로로서, 예를 들어 유선 프로세서로서 구현된다. PROC(110)은 개별 프로세서, 예를 들어 프로그램 코드를 실행하는 것이 가능한 단일 코어로부터 하나 이상의 코어, 모듈, 코프로세서, 인터페이스 등을 갖는 전체 프로세서 시스템까지 복잡성의 범위에 걸친 임의의 다양한 상이한 프로세서 유형 및/또는 시스템을 표현할 수도 있다.
다른 양태에서, PROC(110)은 아키텍처(100)로부터 생략되고, 설명된 다른 다양한 프로그램가능 블록 중 하나 이상으로 대체된다. 또한, 이러한 블록은 프로그램가능 회로의 다양한 블록이 PROC(110)의 경우에서와 같이 프로그램 코드를 실행할 수 있는 프로세서를 형성하는 데 사용될 수도 있는 점에서 "소프트 프로세서(soft processor)"를 형성하는 데 이용될 수도 있다.
구문 "프로그램가능 회로"라는 것은, 예를 들어 본 명세서에 설명된 다양한 프로그램가능 또는 구성가능 회로 블록, 뿐만 아니라 IC 내로 로딩되는 구성 데이터에 따라 다양한 회로 블록, 타일, 및/또는 소자를 선택적으로 결합하는 상호접속 회로와 같은, IC 내의 프로그램가능 회로 소자를 칭한다. 예를 들어, CLB(102) 및 BRAM(103)과 같은 PROC(110)의 외부에 있는 도 1에 도시되어 있는 부분은 IC의 프로그램가능 회로로 고려된다.
일반적으로, 프로그램가능 회로의 기능성은 구성 데이터가 IC 내로 로딩될 때까지 설정되지 않는다. 구성 비트의 세트는 FPGA와 같은 IC의 프로그램가능 회로를 프로그램하는 데 사용될 수도 있다. 구성 비트(들)는 통상적으로 "구성 비트스트림"이라 칭한다. 일반적으로, 프로그램가능 회로는 IC 내로 구성 비트스트림을 먼저 로딩하지 않고 동작하거나 기능하지 않는다. 구성 비트스트림은 프로그램가능 회로 내의 특정 회로 디자인을 효과적으로 구현하거나 인스턴스화한다. 회로 디자인은 예를 들어, 다양한 프로그램가능 회로 블록 중의 프로그램가능 회로 블록 및 물리적 접속성의 기능적 양태를 지정한다.
"유선" 또는 "경화된", 즉 프로그램가능하지 않은 회로는 IC의 부분으로서 제조된다. 프로그램가능 회로와는 달리, 유선 회로 또는 회로 블록은 구성 비트스트림의 로딩을 통한 IC의 제조 후에 구현되지 않는다. 유선 회로는 일반적으로 예를 들어, IC, 예로서 PROC(110) 내로 구성 비트스트림을 먼저 로딩하지 않고 기능하는 전용 회로 블록 및 상호접속부를 갖는 것으로 고려된다.
몇몇 경우에, 유선 회로는 IC 내의 하나 이상의 메모리 소자 내에 저장된 레지스터 세팅 또는 값에 따라 설정되거나 선택될 수도 있는 하나 이상의 동작 모드를 가질 수도 있다. 동작 모드는 예를 들어, IC 내로 구성 비트스트림의 로딩을 통해 설정될 수도 있다. 이 능력에도 불구하고, 유선 회로는 유선 회로가 동작가능하고 IC의 부분으로서 제조될 때 특정 기능을 갖기 때문에 프로그램가능 회로로 고려되지 않는다.
SOC의 경우에, 구성 비트스트림은 PROC(110) 또는 소프트 프로세서에 의해 실행될 프로그램 코드 및 프로그램가능 회로 내에 구현될 회로를 지정할 수도 있다. 몇몇 경우에, 아키텍처(100)는 적절한 구성 메모리 및/또는 프로세서 메모리에 구성 비트스트림을 로딩하는 전용 구성 프로세서를 포함한다. 구성 프로세서는 포함될 때 PROC(110)와는 달리, 사용자 프로그램 코드를 실행하지 않는다. 다른 경우에, 아키텍처(100)는 구성 비트스트림을 수신하고, 적절한 구성 메모리 내로 구성 비트스트림을 로딩하고, 그리고/또는 실행을 위해 프로그램 코드를 추출하도록 PROC(110)을 이용할 수도 있다.
도 1은 예를 들어, 프로그램 가능 패브릭(fabric)과 같은 프로그램가능 회로를 포함하는 IC를 구현하는 데 사용될 수도 있는 예시적인 아키텍처를 예시하도록 의도된다. 예를 들어, 칼럼 내의 논리 블록의 수, 칼럼의 상대폭, 칼럼의 수 및 순서, 칼럼 내에 포함된 논리 블록의 유형, 논리 블록의 상대 크기, 및 도 1의 상부에 포함된 상호접속부/로직 구현예는 단순히 예시일 뿐이다. 실제 IC에서, 예를 들어, CLB의 하나 초과의 인접한 칼럼이 통상적으로 CLB가 나타나는 어디에나 포함되어, 사용자 회로 디자인의 효율적인 구현을 용이하게 한다. 그러나, 인접한 CLB 칼럼의 수는 IC의 전체 크기에 따라 다양할 수도 있다. 또한, IC 내의 PROC(110)과 같은 블록의 크기 및/또는 위치설정은 단지 예시의 목적이고, 한정으로서 의도된 것은 아니다.
도 2는 예시적인 데이터 프로세싱 시스템(시스템)(200)을 도시하고 있는 블록도이다. 일 양태에서, 시스템(200)은, 프로그램가능 IC 내의 회로로서 이종 멀티프로세서 디자인의 커널, 예를 들어 프로그램을 구현하도록 프로그램될 수도 있는 컴파일-시간 시스템을 표현할 수도 있다. 본 명세서에 정의될 때, "이종 멀티프로세서 디자인"은 호스트 시스템 상에서 실행하는 부분 및 상이한 디바이스 또는 프로세서 상에서 실행하는 커널을 칭하는 적어도 하나의 부가의 부분을 포함하는 프로그램이다. 이종 멀티프로세서 디자인의 예는 OpenCL 프로그램 또는 디자인이다. 일 예에서, 호스트 상에서 실행하는 부분은 상이한 디바이스 또는 프로세서 상에서 실행하는 부분과는 상이한 프로그래밍 언어로 지정될 수도 있다. 프로그램가능 IC는 도 1을 참조하여 설명된 바와 같은 아키텍처를 가질 수도 있다.
다른 양태에서, 시스템(200)은 프로세서가 호스트로서 기능하고 프로그램가능 IC가 하나 이상의 커널을 구현하는 실행시간 이종 멀티프로세서 시스템을 표현할 수도 있다. "이종 멀티프로세서 시스템"은 본 명세서에 정의될 때, 2개 이상의 프로세서를 포함하는 컴퓨팅 시스템이다. 2개 이상의 프로세서는 상이한 유형의 프로세서일 수도 있다. 예를 들어, 이종 멀티프로세서 시스템은 중앙 프로세싱 유닛(CPU), 그래픽 프로세싱 유닛(GPU), 디지털 신호 프로세서(DSP), FPGA와 같은 프로그램가능 IC 등을 포함할 수도 있다. 이종 멀티프로세서 시스템은 OpenCL 시스템일 수도 있다.
도시되어 있는 바와 같이, 시스템(200)은 시스템 버스(215) 또는 다른 적합한 회로를 통해 메모리 소자(210)에 결합된 적어도 하나의 프로세서, 예를 들어 중앙 프로세싱 유닛(CPU)(205)을 포함한다. 시스템(200)은 메모리 소자(210) 내에 프로그램 코드를 저장한다. 프로세서(205)는 시스템 버스(215)를 거쳐 메모리 소자(210)로부터 액세스된 프로그램 코드를 실행한다. 일 양태에서, 시스템(200)은 프로그램 코드를 저장하고 그리고/또는 실행하기 위해 적합한 컴퓨터 또는 다른 데이터 프로세싱 시스템으로서 구현된다. 그러나, 시스템(200)은 본 명세서에 설명된 기능을 수행하는 것이 가능한 프로세서 및 메모리를 포함하는 임의의 시스템의 형태로 구현될 수도 있다는 것이 이해되어야 한다. 또한, 시스템(200)은 예를 들어, 서버와 같은 하나 이상의 네트워킹된 데이터 프로세싱 시스템으로서 구현될 수도 있다.
메모리 소자(210)는 예를 들어, 로컬 메모리(220) 및 하나 이상의 벌크 저장 디바이스(225)와 같은 하나 이상의 물리적 메모리 디바이스를 포함한다. 로컬 메모리(220)는 랜덤 액세스 메모리(random access memory: RAM) 또는 프로그램 코드의 실제 실행 중에 일반적으로 사용되는 다른 비지속성 메모리 디바이스(들)를 칭한다. 벌크 저장 디바이스(225)는 하드디스크 드라이브(hard disk drive: HDD), 고체 상태 드라이브(solid state drive: SSD), 또는 다른 지속적 데이터 저장 디바이스로서 구현될 수도 있다. 시스템(200)은 실행 중에 벌크 저장 디바이스(225)로부터 프로그램 코드가 인출되어야 하는 횟수를 감소시키기 위해 적어도 일부 프로그램 코드의 일시적인 저장을 제공하는 하나 이상의 캐시 메모리(도시 생략)를 또한 포함할 수도 있다.
키보드(230), 디스플레이 디바이스(235), 및 포인팅 디바이스(240)와 같은 입출력(I/O) 디바이스가 선택적으로 시스템(200)에 결합될 수도 있다. I/O 디바이스는 직접 또는 개입 I/O 제어기를 통해 시스템(200)에 결합될 수도 있다. 네트워크 어댑터(245)가 또한 시스템(200)에 결합될 수도 있어 시스템(200)이 개입 개인 또는 공중 네트워크를 통해 다른 시스템, 컴퓨터 시스템, 원격 프린터, 원격 저장 디바이스, 및/또는 타겟 플랫폼(260)에 결합되는 것을 가능하게 한다. 모뎀, 케이블 모뎀, 이더넷 카드, 및 무선 송수신기는 시스템(200)과 함께 사용될 수도 있는 상이한 유형의 네트워크 어댑터(245)의 예이다. 범용 직렬 버스(Universal Serial Bus) 포트, 파이어와이어(FireWire) 포트, 주변 장치 상호접속(Peripheral Component Interconnect: PCI) 및/또는 PCI 익스프레스(PCI Express: PCIe) 포트 등과 같은 통신 포트(250)가 또한 시스템(200)에 결합되어 시스템(200)이 타겟 플랫폼(260)을 포함하는 임의의 전술된 시스템과 같은 다른 시스템에 결합되게 할 수도 있다.
일 양태에서, 메모리 소자(210)는 전자 디자인 자동화(electronic design automation: EDA) 애플리케이션(255)을 저장한다. EDA 애플리케이션(255)은 예를 들어 시스템(200)이 컴파일-시간 시스템을 표현하는 구현예에서 저장될 수도 있다. EDA 애플리케이션(255)은 하나 이상의 상이한 구성요소 또는 모듈을 포함할 수도 있다. 실행가능 프로그램 코드의 형태로 구현되는 EDA 애플리케이션(255)은 시스템(200)에 의해 실행된다. 이와 같이, EDA 애플리케이션(255)은 시스템(200)의 통합부로 고려된다. EDA 애플리케이션(255) 및 EDA 애플리케이션(255)을 실행하는 동안 시스템(200)에 의해 사용되고, 발생되고, 그리고/또는 동작되는 임의의 데이터 아이템은 시스템(200)의 부분으로서 채용될 때 기능성을 부여하는 기능 데이터 구조이다. 컴파일-시간 시스템으로서, 호스트 애플리케이션(258)은 시스템(200)으로부터 배제될 수도 있다.
컴파일-시간 시스템의 경우에, 사용자는 시스템(200)을 통해 작업하여, EDA 애플리케이션(255)을 실행한다. 시스템(200)은 입력으로서 이종 멀티프로세서 디자인(275)을 수신하고, IC(270) 내에 구현될 수도 있는 회로 내로 이종 멀티프로세서 디자인(275)의 하나 이상의 커널을 합성할 수도 있다. 시스템(200)은 이진 컨테이너(280)를 발생하여 출력할 수도 있다. 일 양태에서, 이진 컨테이너(280)는 그 내부의 콘텐트의 기술(description) 및 부분이건 풀이건, 하나 이상의 구성 비트스트림을 포함할 수도 있다. 다른 양태에서, 이진 컨테이너(280)는 그 내부의 콘텐트의 기술, 하나 이상의 실행가능 시뮬레이션 파일, 및/또는 레지스터 전송 레벨(: RTL) 또는 하드웨어 기술 언어 시뮬레이터 내에 시뮬레이팅될 수도 있는 하나 이상의 RTL을 포함할 수도 있다. 그 경우에, 이진 컨테이너(280)는 실행가능 시뮬레이션 파일(들) 및/또는 RTL 파일(들)에 추가하여, 부분적이건 풀이건, 하나 이상의 구성 비트스트림을 포함할 수도 있다. 이진 컨테이너(280)는 메모리 소자(210) 내에 저장되고 그리고/또는 네트워크 어댑터(245) 및/또는 통신 포트(250)를 경유하여 다른 시스템에 제공될 수도 있다.
다른 양태에서, 메모리 소자(210)는 호스트 애플리케이션(258)을 저장한다. 호스트 애플리케이션(258)은 예를 들어, 시스템(200)이 이종 멀티프로세서 실행시간 시스템을 표현하는 구현예에서 저장될 수도 있다. 호스트 애플리케이션(258)은 하나 이상의 상이한 구성요소 또는 모듈을 포함할 수도 있다. 실행가능 프로그램 코드의 형태로 구현되는 호스트 애플리케이션(258)은 시스템(200)에 의해 실행된다. 이와 같이, 호스트 애플리케이션(258)은 시스템(200)의 통합부로 고려된다. 호스트 애플리케이션(258) 및 호스트 애플리케이션(258)을 실행하는 동안 시스템(200)에 의해 사용되고, 발생되고, 그리고/또는 동작되는 임의의 데이터 아이템은 시스템(200)의 부분으로서 채용될 때 기능성을 부여하는 기능 데이터 구조이다. 실행시간 시스템으로서, EDA 애플리케이션(255)은 시스템(200)으로부터 배제될 수도 있다.
시스템(200)은 통신 링크(265)를 통해 타겟 플랫폼(260)에 결합될 수도 있다. 실행시간 시스템 구현예의 경우에, 타겟 플랫폼(260)은 시스템(200)에 결합되거나, 또는 그 부분으로 고려된다. 따라서, 컴파일-시간 시스템의 경우에, 타겟 플랫폼(260)은 배제될 수도 있다는 것이 이해되어야 한다. 타겟 플랫폼(260)으로 계속하여, 통신 링크(265)는 통신 포트(250) 및/또는 네트워크 어댑터(245)에 결합하도록 동작가능한 임의의 다양한 상이한 유선 및/또는 무선 접속부로서 구현될 수도 있다.
타겟 플랫폼(260)은 그 위에 회로가 구현되어 있는 인쇄 회로 기판과 같은 회로 기판으로서 구현될 수도 있다. 타겟 플랫폼은 예를 들어, 시스템(200) 내에, 또는 시스템(200) 외부에 통신 포트(250)를 위한 기계적 커넥터 내로 플러깅될 수도 있는 카드로서 구현될 수도 있다. 타겟 플랫폼(260)은 통신 링크(265)에 결합하는 커넥터를 포함할 수도 있다. 커넥터는 타겟 플랫폼(260)의 회로를 사용하여, IC(270)에 결합될 수도 있다.
IC(270)는 소켓, 리셉터클(receptacle), 타겟 플랫폼(260)에 직접 IC(270)를 납땜하는 것과 같은 다른 장착 기술 등을 사용하여 타겟 플랫폼(260)에 결합될 수도 있다. IC(270)는 타겟 플랫폼(260)을 통해 통신 링크(265)에 결합된다. 다른 양태에서, IC(270)는 프로그램가능 IC이다. IC(270)는 예를 들어, 도 1을 참조하여 설명된 아키텍처를 사용하여 구현될 수도 있다. 다른 양태에서, IC(270)는 SOC로서 구현될 수도 있다. IC(270)는 회로로서 이종 멀티프로세서 디자인의 하나 이상의 커널을 구현할 수도 있다. 이종 멀티프로세서 디자인은 OpenCL 디자인일 수도 있다.
실행시간 시스템의 경우에, 프로세서(205)는 호스트로서 동작할 수도 있다. 이종 멀티프로세서 디자인의 하나 이상의 커널은 IC(270) 내에 구현될 수도 있다. 동작 중에, IC(270)는 경우에 따라 구성되거나 재구성되지 않는 IC(270)의 다른 부분에 인터럽션을 유발하지 않고 동작중에 있을 때 경우에 따라 동적으로 구성되거나 재구성되지 않기 때문에 신규한 및/또는 상이한 커널이 필요에 따라 IC(270) 내에 구현될 수도 있다.
도 3은 도 2의 타겟 플랫폼(260)을 위한 예시적인 아키텍처를 도시하고 있는 블록도이다. 도시되어 있는 바와 같이, IC(270) 및 RAM(345)은 타겟 플랫폼(260)에 결합된다. 타겟 플랫폼(260)은 IC(270)에 결합된 커넥터(350)를 또한 포함한다. 카드 에지형 커넥터로서 도시되어 있지만, 커넥터(350)는 임의의 다양한 상이한 커넥터 유형으로서 구현될 수도 있다는 것이 이해되어야 한다. 또한, 타겟 플랫폼(260)은 하나 이상의 다른 구성요소(도시 생략)를 포함할 수도 있다. 부가의 구성요소는 예를 들어, 커넥터(350)와 IC(270) 사이에 결합될 수도 있다.
IC(270)는 정적 구역(335) 및 커널 구역(340)을 포함한다. 일 양태에서, 정적 구역(335)은 이종 멀티프로세서 프로그래밍 모델을 지원하는 데 요구되는 인프라구조 IP를 포함한다. 일 예에서, 이종 멀티프로세서 프로그래밍 모델은 OpenCL 모델이다. 정적 구역(335)은 실행 시간 중에, 예를 들어, RAM(345)과 같은 타겟 플랫폼(260) 상에 위치된 다른 구성요소 및/또는 호스트, 예를 들어 프로세서(205)와 같은 다른 시스템과 커널 구역(340)을 통신적으로 링크한다. 정적 구역(335)은 예를 들어, 호스트와 통신하는 데 사용된 소프트웨어 인터페이스를 구현할 수도 있다. 일 양태에서, 정적 구역(335)은 타겟 플랫폼(260)의 판매자 및/또는 제조업자에 의해 제공된 회로 구현예일 수도 있다.
커널 구역(340)은 커널이 구현되는 IC(330)의 부분을 표현한다. 일 양태에서, 커널 구역(340)은 정적 구역(335)과 메모리 맵핑된 인터페이스를 가질 수도 있다. 커널 구역(340)은 정적 구역(335)과는 달리, 동적으로 발생되고 정적 구역(335)과 통합될 수도 있다. 예를 들어, 상이한 커널 및 커널의 상이한 조합은 실행시간 중에 커널 구역(340) 내에서 상이한 시간에 구현될 수도 있다.
도 4는 타겟 플랫폼(260)을 포함하는 이종 멀티프로세서 실행시간 시스템의 예시적인 계층을 도시하고 있는 블록도이다. 일 예에서, 이종 멀티프로세서 실행시간 시스템은 OpenCL 시스템이다. 도시되어 있는 바와 같이, 호스트는 호스트 애플리케이션 내에 구현된 실행시간 계층(405)을 실행한다. 설명된 바와 같이, 호스트는 도 2를 참조하여 설명된 시스템(200)의 프로세서(205)로서 구현될 수도 있다. 타겟 플랫폼 소프트웨어 계층(415)은 타겟 플랫폼 회로 내에 구현된다. 실행시간 계층(405)은 공통 저레벨 드라이버 인터페이스(410)를 통해 타겟 플랫폼 소프트웨어 계층(415)과 통신한다. 예를 들어, 실행시간 계층(405)은 타겟 플랫폼 소프트웨어 계층(415)과 통신하기 위해 공통 저레벨 드라이버(410) 내에 규정된 표준 문서화된 응용 프로그래밍 인터페이스(application programming interfaces: APIs)를 사용한다. 타겟 플랫폼 소프트에어 계층(415)은 예를 들어, 커널 드라이버로서 구현될 수도 있다.
타겟 플랫폼(260)의 회로 내에서 실행하는 타겟 플랫폼 소프트웨어 계층(415)은 타겟 플랫폼 특정 프로그래밍 인터페이스(420), 예를 들어 하드웨어 프로그래밍 인터페이스를 통해 정적 구역(335)과 통신한다. 정적 구역(335)은 클럭 및 리셋 신호(430)를 커널 구역(340)에 제공한다. 정적 구역(335)은 또한 제어 레지스터(도시 생략)에 결합된 메모리 맵핑된 슬레이브 인터페이스(440)를 통해 커널 구역(340)에 정보를 제공한다. 커널 구역(340)은 RAM(345)에 결합된 메모리 맵핑된 버스 마스터 인터페이스(435)를 통해 정적 구역(335)에 정보를 제공한다.
도 5는 도 3의 IC(270) 내에 구현된 예시적인 회로를 도시하고 있는 블록도이다. 더 구체적으로, 도 5는 정적 구역(335)을 구현하는 데 사용될 수도 있는 예시적인 아키텍처를 도시하고 있다. 각각의 블록(505, 510, 515, 520, 525)은 회로 블록을 표현하고 있다. 정적 구역(335)의 부분으로서 각각의 블록(505 내지 525) 및 커널 구역(340)은 IC(270)의 프로그램가능 회로 내에 구현될 수도 있다.
도시되어 있는 바와 같이, 정적 구역(335)은 버스 직접 메모리 액세스(direct memory access: DMA) 제어기(510)에 결합된 버스 종단점(505)을 포함할 수도 있다. 버스 DMA 제어기(510)는 상호접속부(515)에 결합된다. 상호접속부(515)는 상호접속부(520) 및 커널 구역(340)에 결합한다. 상호접속부(520)는 커널 구역(340) 및 메모리 제어기(525)에 결합한다. 메모리 제어기(525)는 오프칩 IC(270)로 구현된 RAM(345)에 결합한다.
버스 종단점(505)은 이종 멀티프로세서 디자인의 호스트와 버스를 거쳐 통신하도록 구성된다. 버스 DMA 제어기(510)는 호스트 RAM, 예를 들어 로컬 메모리(220)와 타겟 플랫폼(260) 상의 RAM(345) 사이의 DMA 기능성을 지원하도록 포함될 수도 있다. 일 양태에서, 버스 DMA 제어기(510)는 마스터 인터페이스(530)를 포함한다. 상호접속부(515)는 슬레이브 인터페이스(535) 및 마스터 인터페이스(540, 545)를 포함할 수도 있다. 도시되어 있는 바와 같이, 슬레이브 인터페이스(535)는 마스터 인터페이스(530)에 결합된다. 커널 구역(340)은 슬레이브 인터페이스(550) 및 마스터 인터페이스(555)를 포함한다. 상호접속부(515)의 마스터 인터페이스(545)는 커널 구역(340)의 슬레이브 인터페이스(550)에 결합된다.
상호접속부(520)는 슬레이브 인터페이스(560, 565) 및 마스터 인터페이스(570)를 포함한다. 메모리 제어기(525)는 슬레이브 인터페이스(575)를 포함한다. 도시되어 있는 바와 같이, 상호접속부(515)의 마스터 인터페이스(540)는 상호접속부(520)의 슬레이브 인터페이스(560)에 결합된다. 커널 구역(340)의 마스터 인터페이스(555)는 상호접속부(520)의 슬레이브 인터페이스(565)에 결합된다.
상호접속부(515, 520)는 2개 이상의 다른 회로 블록을 함께 결합하도록 구성된 회로 블록이다. 일 양태에서, 상호접속부(515, 520)는 하나 이상의 메모리 맵핑된 슬레이브 디바이스와 하나 이상의 메모리 맵핑된 마스터 디바이스를 결합하는 회로 블록으로서 구현될 수도 있다. 상호접속 회로 블록 구현예의 예는 영국 캠브리지 소재의 ARM® Ltd.로부터의 AMBA® AXI 버전 4 사양에 합치하는 것이다. 그러나, 다른 상호접속 유형 및/또는 기술이 상호접속부(515, 520)를 구현하는 데 사용될 수도 있다는 것이 이해되어야 한다. 본 개시내용은 제공된 예시적인 상호접속 회로 블록에 의해 한정되도록 의도된 것은 아니다.
도 5에 도시되어 있는 아키텍처 내에서, 버스 DMA 제어기(510) 및 커널 구역(340)은 메모리 제어기(525)를 위한 마스터로서 기능한다. 상호접속부(515)는 호스트가 예를 들어 버스를 거쳐 RAM(345)을 판독하고 기입하게 한다. 상호접속부(520)는 메모리 제어기(525)를 위한 2개의 버스 마스터, 즉 버스 DMA 제어기(510) 및 커널 구역(340)의 생성을 지원한다.
커널 구역(340)은 초기에 컴파일링된 이종 멀티프로세서 디자인 커널을 위한 컨테이너로서 구현될 수도 있다. 일 양태에서, 커널 구역(340)은 컴파일링된 커널을 위한 플레이스홀더를 갖는 계층적 IP로서 구현될 수도 있다. 하나 이상의 커널은 커널 구역(340) 내에 포함될 수도 있다. 일 예에서, 최대 16개의 커널이 커널 구역(340) 내에 포함될 수도 있다. 호스트로부터의 명령(command)은 슬레이브 인터페이스(550)를 통해 수신될 수도 있다. 커널 구역(340)은 마스터 인터페이스(555)를 통해 메모리 제어기(525)에 명령을 제공할 수도 있다. 클럭 및 리셋 신호가 마스터 인터페이스(545)와 슬레이브 인터페이스(550) 사이의 접속을 통해 커널 구역(340) 및 그 내에 구현된 임의의 커널에 제공된다.
도 6은 커널 구역(340)의 예시적인 구현예를 도시하고 있는 블록도이다. 도시되어 있는 바와 같이, 커널 구역(340)은 부가의 상호접속부(605, 615)를 포함한다. 상호접속부(605)는 상호접속부(515)의 마스터 인터페이스(545)에 결합된 슬레이브 인터페이스(550)를 포함한다. 상호접속부(605)는 커널 회로(610-1)의 슬레이브 인터페이스(630)에 결합된 마스터 인터페이스(625)를 더 포함한다. 마스터 인터페이스(625)는 또한 하나 이상의 다른 커널 회로(610-N)에 결합될 수도 있는 데, 여기서 N은 정수값이다.
집합적으로 커널 회로(610-1 내지 610N)로서 도시되어 있는 커널 회로(610)는 동일한 커널 회로의 복수의 인스턴스, 및 이와 같이 동일한 커널의 복수의 인스턴스를 표현할 수도 있다. 다른 예에서, 커널 회로(610)는 2개 이상의 상이한 커널 회로를 표현할 수도 있다. 또 다른 예에서, 커널 회로(610)는 제1 커널 회로 및 하나 이상의 부가의 상이한 커널 회로의 하나 이상의 인스턴스를 표현할 수도 있다. 상호접속부(615)는 각각의 커널 회로(610)의 마스터 인터페이스(640, 645)에 결합하는 슬레이브 인터페이스(650)를 갖는다. 상호접속부(615)는 상호접속부(520)의 슬레이브 인터페이스(565)에 결합하는 마스터 인터페이스(555)를 포함한다.
일 양태에서, 상호접속부(605, 615)는 커널 회로의 최대 16개 상이한 인스턴스, 16개의 상이한 커널 회로, 또는 16개를 초과하지 않는 그 조합을 지원할 수도 있다. 설명된 바와 같이, 커널 구역(340) 내에 구현될 수도 있는 특정 수의 커널 및/또는 커널 인스턴스가 한정이 아니라 예시의 목적으로 제공된다.
OpenCL과 같은 이종 멀티프로세서 프레임워크 내에서, 병렬 커널 호출은 NDRange라 칭하는 1, 2, 또는 3-D 인덱스 공간으로서 기술될 수도 있다. NDRange는 작업 그룹으로 세분된다. 작업 그룹은 다수의 작업 아이템을 포함한다. 예를 들어, NDRange 내의 각각의 포인트는 작업 아이템이라 칭한다.
이종 멀티프로세서 디자인의 커널은 하나 이상의 컴퓨트 유닛으로 컴파일링된다. 시스템 설계자, 예를 들어 사용자는 소정의 커널에 대해 병렬로 구현될 컴퓨트 유닛의 수를 결정한다. 일 양태에서, 커널을 위한 컴퓨트 유닛의 수는 커널 구역(340) 내에서 구현되고 병렬로 동작하는 커널 회로의 인스턴스의 수를 지시한다. 각각의 컴퓨트 유닛은 호스트에 의해 결정되고 제공된 바와 같은 하나의 작업 그룹을 프로세싱하는 것이 가능하다.
도 6의 예에서, 각각의 커널 회로 블록(610-1 내지 610-N)은 작업 유닛의 회로를 표현한다. 커널 회로 블록(610-1 내지 610-N)은 동일한 커널의 작업 유닛, 예를 들어 병렬로 동작하는 다수의 인스턴스, 또는 병렬로 동작하는 2개 이상의 커널의 작업 유닛을 표현할 수도 있는 데, 여기서 커널 중 하나 이상은 다수의 인스턴스를 갖는 커널 구역(340) 내에서 구현된다.
도 7은 이종 멀티프로세서 디자인의 커널을 구현하는 예시적인 방법(700)을 도시하고 있는 흐름도이다. 일 예에서, 이종 멀티프로세서 디자인은 OpenCL 디자인일 수도 있다. 방법(700)은 도 2를 참조하여 설명된 시스템과 같은 컴파일-시간 시스템에 의해 수행될 수도 있다. 방법(700)은 이종 멀티프로세서 디자인이 C, C++, OpenCL, OpenCL C, OpenCL 호환성 고레벨 프로그래밍 언어, 또는 다른 고레벨 프로그래밍 언어로 지정된 커널을 포함하는 상태에서 시작될 수도 있다. 일 양태에서, 임의의 다양한 고레벨 프로그래밍 언어는 커널을 지정하는 데 사용될 수도 있다. 다른 양태에서, 커널을 지정하는 데 사용된 고레벨 프로그래밍 언어는 병렬화 또는 병렬 동작의 명시적 사양 또는 표기를 지원하는 것일 수도 있다. 시스템은 커널로의 액세스를 갖는다.
블록 705에서, 시스템은 커널의 RTL 기술을 발생한다. RTL 기술은 하드웨어 기술 언어(hardware description language: HDL)를 사용하여 지정될 수도 있다. 본 명세서에 정의될 때, 용어 "하드웨어 기술 언어" 또는 "HDL"은 집적 회로와 같은 디지털 시스템의 문서화, 디자인, 및 제조를 용이하게 하는 컴퓨터-언어이다. HDL은 숙련가 시스템 디자인 방법론과 프로그램 검증 기술을 조합한다. HDL을 사용하여, 예를 들어, 사용자는 전자 회로를 설계하고 지정하고, 회로의 동작을 기술하고, 회로의 동작을 검증하기 위한 테스트를 생성할 수 있다. HDL은 모델링되는 전자 시스템의 공간 및 시간 구조 및 거동의 표준 텍스트 기반 표현을 포함한다. HDL 신택스(syntax) 및 시맨틱스(semantics)는 동시성을 표현하기 위한 명시적 표기를 포함한다. 최고레벨 프로그래밍 언어에 대조하여, HDL은 디지털 시스템의 1차 속성인 시간의 명시적 표기를 또한 포함한다.
블록 710에서, 시스템은 베이스 플랫폼과 커널의 RTL 기술을 통합한다. 일 양태에서, 베이스 플랫폼은 도 4 및/또는 도 5를 참조하여 설명된 정적 구역(335) 내에 구현된 회로 디자인에 유사하거나 동일할 수도 있다.
블록 715에서, 시스템은 구성 비트스트림 및 지원 데이터를 발생한다. 구성 비트스트림은 커널의 하드웨어 구현예, 예를 들어 도 6을 참조하여 설명된 바와 같은 컴퓨트 유닛을 지정한다. 일 양태에서, 구성 비트스트림은 예를 들어 단지 커널 또는 하나 이상의 커널을 지정하는 병렬 비트스트림일 수도 있다. 다른 양태에서, 구성 비트스트림은 커널, 또는 경우에 따라서 커널들, 및 베이스 플랫폼을 지정하는 풀 비트스트림일 수도 있다.
지원 데이터는 구성 비트스트림 및/또는 구성 비트스트림의 콘텐트를 기술한다. 일 양태에서, 지원 데이터는 커널 구현예에 포함된 IP 블록 및/또는 코어의 리스트를 지정할 수도 있다. 다른 양태에서, 지원 데이터는 커널의 하드웨어 구현예가 부분 구성 비트스트림으로서 지정될 때 구현될 것인 프로그램가능 IC 내의 2차원 좌표 위치를 지정할 수도 있다.
블록 720에서, 시스템은 이진 컨테이너 내에 구성 비트스트림 및 지원 데이터를 포함한다. 일 양태에서, 이진 컨테이너는 다수의 개별 파일을 포함할 수도 있다. 예를 들어, 이진 컨테이너는 하나 이상의 구성 비트스트림 및 하나 이상의 지원 데이터 파일을 포함할 수도 있다.
다른 양태에서, 커널(들)의 RTL 기술은 이진 컨테이너 내에 포함될 수도 있다. RTL 기술은 이어서 전체 이종 멀티프로세서 디자인 시뮬레이션의 부분으로서 커널 구현예를 테스트하기 위해 RTL 시뮬레이터와 함께 사용될 수도 있다. 예를 들어, 호스트는 이종 멀티프로세서 디자인의 실행시간 시뮬레이션 중에 RTL 시뮬레이터에 RTL 기술(들)을 포함하는 이진 컨테이너를 제공할 수도 있다. RTL 시뮬레이터는 이진 컨테이너로부터 RTL 기술을 액세스할 수도 있다. 또 다른 양태에서, 커널(들)의 실행가능 버전은 테스팅 및/또는 시뮬레이션 목적으로 프로세서를 사용하여 실행될 수도 있는 이진 컨테이너 내에 포함될 수도 있다. 예를 들어, 호스트는 이종 멀티프로세서 디자인의 실행시간 시뮬레이션 중에 시뮬레이터에 커널의 실행가능 버전을 포함하는 이진 컨테이너를 제공할 수도 있다. 커널의 실행가능 버전은 커널의 하드웨어 구현예의 실행가능 모델일 수도 있다는 것이 이해되어야 한다. 시뮬레이터는 이진 컨테이너로부터 커널의 실행가능 버전에 액세스할 수도 있다. 따라서, 이진 컨테이너는 프로그램가능 IC를 갖는 실행시간을 위한 구성 비트스트림, 데이터 프로세싱 시스템 상의 시뮬레이션을 위한 실행가능 버전, 및/또는 RTL 시뮬레이터를 사용하는 시뮬레이션을 위한 RTL 버전으로서이건간에 다수의 상이한 커널 구현예를 지원한다.
이진 컨테이너는 단지 구성 비트스트림(들)만; 단지 커널(들)의 실행가능 버전(들)만; 단지 커널(들)의 RTL 버전(들)만; 구성 비트스트림 및 커널의 RTL 버전; 구성 비트스트림 및 커널의 실행가능 버전; 커널(들)의 실행가능 및 RTL 버전; 또는 구성 비트스트림, 커널(들)의 실행가능 버전, 및 커널(들)의 RTL 버전을 포함할 수도 있다. 지원 데이터는 또한 이진 컨테이너 내에 구현된 커널 버전의 임의의 전술된 조합을 위해 포함될 수도 있다. 이종 멀티프로세서 디자인, 특히 OpenCL 디자인에서 CPU 및/또는 GPU에 의해 사용된 기존의 컨테이너는 "메모리내(in memory)" 및 어드레스 맵핑된 객체와 함께 작업한다. 이러한 컨테이너는 동일한 컨테이너 내의 커널 또는 다수의 상이한 커널 유형의 시뮬레이션 버전을 지원하지 않는다.
사용된 이진 컨테이너는 다수의 상이한 유형의 커널 구현예를 지원할 수도 있지만, 일 양태에서, 제1 컨테이너는 제1 유형의 커널 구현예, 예를 들어 구성 비트스트림, RTL 기술, 또는 실행가능 파일을 포함할 수도 있고, 반면에 제2 이진 컨테이너는 상이한 유형의 커널 구현예를 포함할 수도 있다. 또 다른 양태에서, 제1 컨테이너는 제1 커널을 지정하는 부분 구성 비트스트림을 포함할 수도 있고, 반면에 제2 컨테이너는 제2 상이한 커널을 지정하는 부분 구성 비트스트림을 포함할 수도 있다.
호스트와 커널 사이의 통신을 위한 OpenCL과 같은 이종 멀티프로세서 컴퓨팅 언어를 위한 표준 API는 단지 이진 객체 파일을 지원한다. 시스템에 의해 발생된 이진 컨테이너는 모든 프리-컴파일링된 커널이 내장형 객체를 통해 액세스가능한 이 이진 요구와 순응한다. 블록 720에서 발생된 이진 컨테이너는 실행시간 중에 프로그램가능 IC 내에 커널 회로, 예를 들어 컴퓨트 유닛을 구현하기 위해 호스트에 의해 사용될 수도 있다.
도 8은 프로그램 가능 IC 내에 이종 멀티프로세서 디자인의 커널을 구현하기 위한 예시적인 프로세스(800)를 도시하고 있는 블록 흐름도이다. 일 예에서, 이종 멀티프로세서 디자인은 OpenCL 디자인일 수도 있다. 프로세스(800)는 EDA 애플리케이션(255)을 실행하는 도 2를 참조하여 설명된 시스템과 같은 시스템에 의해 수행될 수도 있다. 일 양태에서, EDA 애플리케이션(255)은 OpenCL 컴파일러 툴로서 구현될 수도 있다. 프로세스(800)는 예시적인 컴파일-시간 시스템 구현예를 예시하고 있다.
도시되어 있는 바와 같이, 예를 들어, 이종 멀티프로세서 애플리케이션, OpenCL 디자인, 또는 OpenCL 애플리케이션이라 또한 칭하는 이종 멀티프로세서 디자인(275)은 호스트 코드(805) 및 커널(815)을 포함할 수도 있다. 하나의 커널이 도시되어 있지만, 이종 멀티프로세서 디자인(275)은 프로세스(800)를 통해 구현될 수도 있는 하나 초과의 커널을 포함할 수도 있다는 것이 이해되어야 한다. 호스트 코드(805)는 호스트 내에서 실행하는 이종 멀티프로세서 디자인(275)의 부분이다. 호스트 코드(805)는 C, C++ 등과 같은 고레벨 프로그래밍 언어로 지정될 수도 있다.
본 명세서에 정의될 때, 용어 "고레벨 프로그래밍 언어"는 명령어(instruction)가 예를 들어, 기계 언어와 같은 데이터 프로세싱 시스템의 상세로부터 강한 추상을 갖는 데이터 프로세싱 시스템을 프로그램하는 데 사용된 프로그래밍 언어 또는 명령어의 세트를 의미한다. 예를 들어, 고레벨 프로그래밍 언어는 메모리 관리와 같은 데이터 프로세싱 시스템의 동작의 양태를 자동화하거나 감출 수도 있다. 추상의 양은 통상적으로 프로그래밍 언어가 얼마나 "고레벨"인지를 규정한다. 고레벨 프로그래밍 언어일 때, 사용자는 고레벨 프로그래밍 언어가 실행할 것인 데이터 프로세싱 시스템의 레지스터, 메모리 어드레스 등과 경쟁할 필요가 없다. 이와 관련하여, 고레벨 프로그래밍 언어는 1대1 기초로, 데이터 프로세싱 시스템의 네이티브 명령코드(native opcode)로 직접 변환하는 명령어를 거의 또는 전혀 포함하지 않는다. 고레벨 프로그래밍 언어의 예는 C, C++, SystemC 등을 포함하지만, 이들에 한정되는 것은 아니다.
호스트 코드(805)는 C 컴파일러(840) 또는 다른 고레벨 언어 컴파일러에 제공된다. C 컴파일러(840)는 App.o(860)로서 정의되는 호스트 코드(805)의 객체 코드 버전을 발생한다. 링커(885)가 이종 멀티프로세서 실행시간 라이브러리(875), app.o(860)를 수신하고, 호스트 애플리케이션(894)을 발생한다. 이종 멀티프로세서 실행시간 라이브러리(875)는 타겟 플랫폼과 통신하는 데 사용되는 공통 저레벨 드라이버를 포함할 수도 있다. 호스트 애플리케이션(894)은 실행시간 이종 멀티프로세서 시스템의 CPU에 의해 실행된다.
이종 멀티프로세서 고레벨 합성 블록(890)이 커널(815)을 수신하고 kernel.hdl(892)을 발생한다. Kernel.hdl(892)는 커널(815)의 RTL 버전이다. 시스템 어셈블러(850)는 kernel.hdl(892) 및 베이스 플랫폼 기술(825)을 수신한다. 일 양태에서, 베이스 플랫폼 기술(825)은 실제 베이스 플랫폼의 양태를 기술하는 메타데이터 파일일 수도 있다. 언급된 바와 같이, 베이스 플랫폼은 프로그램가능 IC(270)의 정적 구역(335) 내에 구현된 회로이다.
베이스 플랫폼 기술(825)로부터, 시스템 어셈블러(850)는 예를 들어, 커널 구현예를 위해 사용될 타겟 플랫폼 및 특정 유형의 프로그램가능 IC를 결정한다. 예를 들어, 시스템 어셈블러(850)는 타겟 플랫폼 및 베이스 플랫폼과 통신하기 위해 호스트에 의해 요구되는 베이스 플랫폼 및 저레벨 드라이버에 대한 구현 상세를 지정하는 디렉토리를 식별할 수도 있다. 식별된 디렉토리는 베이스 플랫폼의 하나 이상의 패키징된 IP를 포함할 수도 있다. 시스템 어셈블러(850)는 커널과 베이스 플랫폼을 결합하는 상호접속 IP를 포함하여, 베이스 플랫폼의 패키징된 IP를 인출할 수도 있다. 상호접속 IP는 예를 들어, 베이스 플랫폼의 패키징된 IP와 kernel.hdl(892)을 통합하거나 합체하는 데 요구되는 다양한 상호접속 회로 블록을 지정할 수도 있다. 시스템 어셈블러(850)는 이진 컨테이너(280)를 발생한다. 시스템 어셈블러(850)는 이진 컨테이너(280) 내에 포함되는 베이스 플랫폼과 통합하는 커널(815)의 하드웨어 구현예를 지정하는 구성 비트스트림을 발생할 수도 있다.
이진 컨테이너(280) 내에 포함된 각각의 구성 비트스트림은 예를 들어, 경우에 따라 커널(815) 또는 kernel.hdl(892)로부터 결정된 하나 이상의 컴퓨트 유닛을 구현할 수도 있다. 설명된 바와 같이, 시스템 디자이너는 소정의 커널에 대해 병렬로 구현될 컴퓨트 유닛의 수를 결정한다.
시스템 어셈블러(850)는 사용자 선호도에 따라, kernel.hdl(892), 예를 들어 RTL 시뮬레이션을 위한 커널(815)의 RTL 버전, 및/또는 시뮬레이션을 위한 커널(815)의 실행가능 파일, 예를 들어 객체 코드 버전을 전술된 바와 같이 이진 컨테이너(280) 내에 포함할 수도 있다. 시스템 어셈블러(850)는 이진 컨테이너(280) 내에 지원 데이터(도시 생략)를 또한 포함한다.
일 양태에서, 시스템 어셈블러(850)는 베이스 플랫폼과 커널(815)을 통합한다. 베이스 플랫폼 기술(825) 및 kernel.hdl(892) 내에 지정된 정보를 갖는 시스템 어셈블러(850)는 예를 들어, 기술 맵핑, 배치, 라우팅 등과 같은 기능을 수행함으로써 베이스 플랫폼과 커널(815)을 통합할 수도 있어, 구성 비트스트림을 생성한다. 구성 비트스트림은 베이스 플랫폼 및 커널의 모두를 지정하는 풀 구성 비트스트림 또는 단지 커널만을 지정하는 부분 구성 비트스트림일 수도 있다. 어느 경우든, 시스템 어셈블러(850)는 커널과 베이스 플랫폼을 결합하기 위해 지정된 상호접속 IP를 사용한다.
또 다른 양태에서, 시스템 어셈블러(850)는 구성 비트스트림 이외의 파일을 포함하도록 이진 컨테이너(280)를 발생할 수도 있다. 예를 들어, 언급된 바와 같이, 커널(815)은 커널(815)의 프로세서 실행가능, 예를 들어 객체 코드 버전을 발생하는 이종 멀티프로세서 컴파일러에 제공될 수도 있다. 커널(815)의 실행가능 버전, 예를 들어 커널(815)의 하드웨어 구현예의 실행가능 모델은 시스템 어셈블러(850)에 제공될 수도 있다. 시스템 어셈블러(850)는 구성 비트스트림 대신에 이진 컨테이너(280) 내에 커널(815)의 실행가능 버전을 포함할 수도 있다. 다른 예에서, 시스템 어셈블러(850)는 구성 비트스트림 대신에 이진 컨테이너(280) 내에 kernel.hdl(892)을 포함할 수도 있다.
도 9는 IC(270) 내의 구현을 위한 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널을 프로세싱하는 예시적인 방법(900)을 도시하고 있는 흐름도이다. 일 예에서, 이종 멀티프로세서 컴퓨팅 언어는 OpenCL일 수도 있다. 방법(900)은 도 2를 참조하여 설명된 시스템과 같은 컴파일-시간 시스템에 의해 수행될 수도 있다. 일 양태에서, 방법(900)은 OpenCL C, C, C++, 다른 고레벨 프로그래밍 언어, 또는 본 명세서에 언급된 언어들 중 하나의 변형예로 초기에 지정된 커널의 RTL 기술의 발생 중에 수행된 다양한 동작을 예시하고 있다.
블록 905에서, 시스템은 커널의 메모리 액세스를 식별하고 맵핑한다. 이종 멀티프로세서 전역 메모리가 마스터 메모리 버스에 맵핑될 수도 있다. 예를 들어, OpenCL 전역 메모리는 AXI 마스터 메모리 버스에 맵핑될 수도 있다. 커널 파라미터는 슬레이브 제어 버스에 맵핑될 수도 있다. 예를 들어, 커널 파라미터는 AXI 슬레이브 제어 버스에 맵핑될 수도 있다.
블록 910에서, 시스템은 커널에 의해 이용된 파라미터를 식별하고, IC 내의 커널의 하드웨어 구현예를 위해 메모리 맵 내의 파라미터를 포함한다. 블록 915에서, 시스템은 커널을 위한 개인 메모리로서 IC의 메모리 구조에 변수를 상관한다. 블록 920에서, 시스템은 커널을 위한 로컬 메모리로서 IC의 메모리 구조에 로컬 메모리 명령어를 상관한다.
블록 925에서, 시스템은 커널을 위한 제어 흐름 그래프를 발생한다. 일 양태에서, 시스템은 커널을 LLVM 중간 표현(Intermediate Representation: IR) 포맷으로 변환한다. LLVM IR 포맷으로부터, 시스템은 그 내의 데이터 흐름을 식별함으로써 제어 흐름 그래프를 발생한다. 블록 930에서, 시스템은 제어 흐름 그래프를 사용하여 커널의 병렬 구역을 식별한다. 병렬 구역은 제어 흐름 그래프 내에서 격리될 수도 있다. 예를 들어, 제어 흐름 그래프 내의 각각의 병렬 구역에 대해, 구역은 구역 내로 도래하는 하나의 제어 에지 및 구역을 떠나는 하나의 제어 에지를 가질 것이다.
블록 935에서, 시스템은 선택적으로 각각의 병렬 구역 주위에 "for" 루프를 구성한다. 병렬 구역을 식별하고 "for" 루프로서 각각 표현하는 것은, 데이터 병렬 구현예인 커널이 C, C++ 등과 같은 순차적 고레벨 프로그래밍 언어로서 표현되게 한다. 블록 940에서, 시스템은 파이프라이닝(pipelining)을 사용하여 회로 기술을 발생한다. 예를 들어, 시스템은, "for" 루프로서 병렬 구역을 표현함으로써, C, C++ 등과 같은 고레벨 프로그래밍 언어가 합성될 것이기 때문에 구역을 합성할 수도 있다.
도 10은 이종 멀티프로세서 시스템의 예시적인 메모리 아키텍처(1000)를 도시하고 있는 블록도이다. 일 예에서, 이종 멀티프로세서 시스템은 OpenCL 시스템이다. 도시되어 있는 바와 같이, 호스트(1005)는 호스트 메모리(1010)를 포함한다. 호스트(1005)는 프로세서(205)로서 구현될 수도 있고, 반면에 호스트 메모리(1010)는 메모리 소자(210)로서 구현될 수도 있다. 호스트(1005)는 타겟 플랫폼(260)에 그리고 전역 메모리 및 상수 메모리(1015)에 결합된다. 설명된 바와 같이, 전역 메모리 및 상수 메모리(1015)로의 액세스는 메모리 제어기(도시 생략)에 의해 제공될 수도 있다. 전역 메모리 및 상수 메모리(1015)는 IC(270) 내에 구현되는 메모리 제어기를 갖는 RAM(345)으로서 구현될 수도 있다. 그러나, 메모리 제어기는 IC(270)의 외부에 있지만 IC(270)와 통신하도록 구성되는 타겟 플랫폼(260) 상의 메모리 제어기로서 구현될 수도 있다는 것이 이해되어야 한다.
IC(270)는 컴퓨트 유닛(1020, 1025)을 포함한다. 2개의 컴퓨트 유닛이 IC(270)에 도시되어 있지만, IC(270)는 2개 미만 또는 2개 초과의 컴퓨트 유닛을 포함할 수도 있다는 것이 이해되어야 한다. 또한, IC(270) 내에 구현된 특정 컴퓨트 유닛 및 특정 수의 컴퓨트 유닛은 실행시간 중에 변경될 수도 있다. 컴퓨트 유닛(1020, 1025)은 커널 구역(340)의 부분으로서 구현된다. 예시의 목적으로, 정적 구역(335)은 도시되어 있지 않다.
도시되어 있는 바와 같이, 컴퓨트 유닛(1020)은 로컬 메모리(1030), 프로세싱 소자(1040, 1045), 및 개인 메모리(1060, 1065)를 포함한다. 로컬 메모리(1030)는 프로세싱 소자(1040, 1045)에 의해 공유된다. 각각의 프로세싱 유닛(1040, 1045)은 개인 메모리(1060, 1065)의 개별의 미공유된 것에 결합된다. 컴퓨트 유닛(1025)은 로컬 메모리(1035), 프로세싱 소자(1050, 1055), 및 개인 메모리(1070, 1075)를 포함한다. 로컬 메모리(1035)는 프로세싱 소자(1050, 1055)에 의해 공유된다. 각각의 프로세싱 유닛(1050, 1055)은 개인 메모리(1070, 1075)의 개별의 미공유된 것에 결합된다. 컴퓨트 유닛(1020, 1025)은 모두 전역 메모리 및 상수 메모리(1020)로의 액세스를 갖는다.
일 예시적인 구현예에서, 호스트 메모리(1010) 및 전역 메모리 및 상수 메모리(1020)는 타겟 플랫폼 상의 RAM, 호스트 RAM, 및/또는 호스트의 하나 이상의 캐시 메모리를 사용하여 구현될 수도 있다. 로컬 메모리(1030, 1035)는 예를 들어, 하나 이상의 BRAM(103)을 사용하여 IC(270) 내에 구현될 수도 있다. 개인 메모리(1060, 1065, 1070, 1075)는 CLB(102) 내에 포함된 룩업 테이블 RAM을 사용하여 구현될 수도 있다.
도 10의 메모리 아키텍처(1000)의 메모리로의 IC(270)의 메모리 구조의 할당은 단지 예시를 위해 제공된 것이다. 합성 중에, IC(270)의 하나 이상의 다른 메모리 구조는 IC(270)의 메모리 구조의 이용가능성 및 요구된 메모리량에 따라 개인 메모리 및/또는 로컬 메모리를 구현하는 데 사용될 수도 있다는 것이 이해되어야 한다.
도 11은 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 예시적인 프로세싱을 도시하고 있는 블록도이다. 도 11은 OpenCL 예를 도시하고 있지만, 커널은 OpenCL 이외의 고레벨 프로그래밍 언어로 지정될 수도 있고 본 명세서에 설명되어 있는 본 발명의 구성은 제공된 예에 한정되도록 의도된 것은 아니라는 것이 이해되어야 한다. 일 양태에서, 도 11은 도 9의 블록 905에서 수행된 프로세싱을 예시하고 있다. 도시되어 있는 바와 같이, 시스템은 커널 내에 "global int" 명령어를 식별한다. "global int" 명령어는 호스트로부터 커널로 패스되는 특정 버퍼를 지시한다. 시스템은 상호접속부 상의 트랜잭션으로서 메모리 액세스를 맵핑한다.
다른 양태에서, 도 11은 도 9의 블록 910에서 수행된 프로세싱을 예시하고 있다. 도 11의 예에서, 시스템은 식별자(id)가 "get_local_id(0);" 함수에 의해 예시된 바와 같이 사용되는 것을 결정한다. 예를 들어, 호스트로부터 커널 내로 패스되는 포인터는 커널 내에서 구현된 레지스터 맵 내에 지정된다. id와 같은 데이터는 호스트에 의해, 예를 들어, 실행시간 중에 호스트 내에서 실행하는 호스트 애플리케이션에 의해 커널에 기입된다. 예를 들어, 호스트는 커널 회로(610)의 레지스터 맵의 적절한 레지스터에 id와 같은 임의의 필수 데이터를 기입할 수도 있다.
시스템은 또한, 커널의 프로그램 코드의 분석으로부터, 커널에 의해 사용된 임의의 암시적 파라미터를 식별한다. 호스트로부터 커널에 제공되도록 요구될 수도 있는 암시적 파라미터의 예는 ND 범위의 크기, 작업 그룹의 크기 등을 포함하지만, 이들에 한정되는 것은 아니다. 몇몇 경우에, 암시적 파라미터는 호스트와 커널 사이의 인터페이스를 통해 패스되지 않을 수도 있다. 그러나, 이러한 파라미터는 레지스터 맵을 통해 패스될 수도 있다.
도 12는 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 예시적인 프로세싱을 도시하고 있는 블록도이다. 도 12는 OpenCL 예를 도시하고 있지만, 커널은 OpenCL 이외의 고레벨 프로그래밍 언어로 지정될 수도 있고 본 명세서에 설명되어 있는 본 발명의 구성은 제공된 예에 한정되도록 의도된 것은 아니라는 것이 이해되어야 한다. 일 양태에서, 도 12는 도 9의 블록 920 및 925에서 수행된 프로세싱을 예시하고 있다. 도 12의 예에서, 블록 920을 참조하면, "id"와 같은 변수는 커널의 개인 메모리(1060)를 구현하는 메모리 구조에 상관된다. 개인 메모리의 예는 파이프라인 레지스터, 소형 어레이, BRAM, 룩업 테이블 RAM 등을 포함할 수도 있다. 블록 925를 참조하면, 시스템은 커널 내의 BRAM과 같은 로컬 메모리(1030)와 각각의 "local int" 메모리 명령어를 상관한다.
함께 취해지고 그리고 도 13으로서 집합적으로 칭하는 도 13a 및 도 13b는 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 프로세싱을 도시하고 있다. 일 양태에서, 도 13은 도 9의 블록 930 및 935에서 수행된 프로세싱을 예시하고 있다. 도 13a를 참조하면, 커널(1300)을 위한 예시적인 OpenCL C 소스 코드가 도시되어 있다. 도 13은 OpenCL 예를 도시하고 있지만, 커널은 OpenCL 이외의 고레벨 프로그래밍 언어로 지정될 수도 있고 본 명세서에 설명되어 있는 본 발명의 구성은 제공된 예에 한정되도록 의도된 것은 아니라는 것이 이해되어야 한다.
시스템은 구역(1305, 1310, 1315)으로서 커널(1300)의 병렬 구역을 식별한다. 블록 930에서 병렬화를 인식하는 부분으로서, 시스템은 병렬화를 제어하는 특정 명령어 및/또는 구성을 인식할 수도 있다. 시스템은 커널(1300) 내의 "배리어" 명령어의 인스턴스를 식별할 수도 있다. "배리어" 명령어는 예를 들어, 임의의 작업 아이템이 배리어 명령어를 지나 진행할 수도 있기 전에 모든 작업 아이템이 배리어 명령어에 도달해야 하는 것을 지시한다. 배리어 명령어는 메모리 펜스 또는 합성 메커니즘으로서 사용될 수도 있다. 시스템은 "async_work_group_copy()" 명령어[본 명세서에서 "비동기(async)"라 칭함]의 인스턴스를 식별할 수도 있다. "async" 명령어는 모든 작업 아이템이 동일한 독립변수(argument)를 갖는 사본에 도달해야 하는 것을 지정한다. 따라서, 일 양태에서, 시스템은 커널(1300) 내의 병렬화를 제어하는 명령어를 식별함으로써 커널(1300)의 병렬 구역을 인식한다.
이종 멀티프로세서 실행 및 메모리 모델은 각각의 구역(1305, 1310, 1315)이 완전히 병렬로, 완전히 순차적으로, 또는 다양한 조합으로 구현될 수도 있는 것을 보장한다. 관찰되어야 하는 직렬화는 예를 들어, 배리어 및/또는 비동기 명령어와 같은 병렬화에 직접 영향을 미치는 명령어 및/또는 구성을 갖고 발생한다.
도 13b는 커널(1300)을 위한 블록 925의 데이터 흐름 그래프 발생을 도시하고 있다. 병렬 구역(1305, 1310, 1315)이 지시된다. 구역(1305) 내에 포함된 "for" 부분의 종단 또는 리턴에 대응하는 제4 병렬 구역(1305-1)이 포함된다.
도 14는 이종 멀티프로세서 컴퓨팅 언어로 지정된 커널의 예시적인 프로세싱을 도시하고 있는 블록도이다. 일 예에서, 이종 멀티프로세서 컴퓨팅 언어는 OpenCL일 수도 있다. 일 양태에서, 도 14는 도 9의 블록 935 및 940에서 수행된 프로세싱을 예시하고 있다. 도 14의 예에서, 그레이스케일 변환에 대응하는 구역(1310)의 프로세싱이 예시되어 있다. 각각의 루프 반복은 일 작업 아이템을 프로세싱한다. 전체 루프는 일 작업 그룹을 프로세싱한다. 루프는 각각의 클럭 사이클에 파이프라인 내로 도입되는 새로운 작업 아이템을 갖는 파이프라인으로서 구현될 수도 있다. 도시되어 있는 바와 같이, 시스템은 병렬 구역(1310) 주위에 "for" 루프 구성을 생성한다. 회로 기술은 작업 아이템의 각각의 칼럼이 커널의 파이프라인 스테이지에 대응하는 위치에 도시되어 있는 바와 같이 파이프라이닝을 사용하여 발생된다. 작업 아이템의 각각의 행은 사이클에 대응한다.
이하는 커널을 위한 예시적인 레지스터 맵을 예시하고 있다.
// 0x00 : 제어 신호
// bit 0 - ap_start (판독/기입/COH)
// bit 1 - ap_done (판독/COR)
// bit 2 - ap_idle (판독)
// bit 3 - ap_ready (판독)
// bit 7 - auto_restart (판독/기입)
// 기타 - 보류됨
// 0x04 : 전역 인터럽트 인에이블 레지스터
// bit 0 - 전역 인터럽트 인에이블(판독/기입)
// 기타 - 보류됨
// 0x08 : IP 인터럽트 인에이블 레지스터(판독/기입)
// bit 0 - 채널 0 (ap_done)
// bit 1 - 채널 1 (ap_ready)
// 기타 - 보류됨
// OxOc : IP 인터럽트 상태 레지스터(판독/TOW)
// bit 0 - 채널 0 (ap_done)
// bit 1 - 채널 1 (ap_ready)
// 기타 - 보류됨
// 0x10 : group_id_x의 데이터 신호
// bit 31~0 - group_id_x[31:0] (판독/기입)
// 0x14 : 보류됨
// 0x18 : group_id_y의 데이터 신호
// bit 31~0 - group_id_y[31:0] (판독/기입)
// 0x1c : 보류됨
// 0x20 : group_id_z의 데이터 신호
// bit 31~0 - group_id_z[31:0] (판독/기입)
// 0x24 : 보류됨
// 0x28 : global_offset_x의 데이터 신호
// bit 31~0 - global_offset_x[31:0] (판독/기입)
// 0x2c : 보류됨
// 0x30 : global_offset_y의 데이터 신호
// bit 31~0 - global_offset_y[31:0] (판독/기입)
// 0x34 : 보류됨
// 0x38 : global_offset_z의 데이터 신호
// bit 31~0 - global_offset_z[31:0] (판독/기입)
// 0x3c : 보류됨
// 0x40 : 매트릭스의 데이터 신호
// bit 31~0 - matrix[31:0] (판독/기입)
// 0x44 : 보류됨
// 0x48 : maxIndex의 데이터 신호
// bit 31~0 - maxIndex[31:0] (판독/기입)
// 0x4c : 보류됨
// 0x50 : s1의 데이터 신호
// bit 31~0 - s1 [31:0] (판독/기입)
// 0x54 : 보류됨
// 0x58 : s2의 데이터 신호
// bit 31~0 - s2[31:0] (판독/기입)
// 0x5c : 보류됨
// (SC = 셀프 클리어, COR = 판독시 클리어, TOW = 기입시 토클, COH = 핸드셰이크시 클리어)
이종 멀티프로세서 HLS(890)은 도 8을 참조하여 설명되는 바와 같이, RTL로 컴파일링되는 각각의 커널에 대해 상기에 예시된 바와 같은 커스텀 레지스터 맵을 발생한다. 호스트는 타겟 플랫폼 상에 위치된 디바이스 메모리 내에, 예를 들어 OpenCL 버퍼와 같은 버퍼의 어드레스를, 커널에 스칼라 독립변수를, 그리고 커널을 제어하기 위한 제어 신호를 패스하도록 레지스터 맵을 사용할 수도 있다. 레지스터 맵은 또한 OpenCL 사양에 의해 요구되는 바와 같이 커널에 그룹 id 및 그룹 오프셋을 패스하기 위해 호스트에 의해 사용될 수도 있다. 일 양태에서, 레지스터 맵은 발생되는 이진 컨테이너 내에 포함될 수도 있다. 예를 들어, 레지스터 맵은 전술된 이진 컨테이너 내로 합체되는 지원 데이터의 부분일 수도 있다.
이하는 예시적인 플랫폼 메타데이터 파일을 예시한다.
일 양태에서, 상기에 예시된 플랫폼 메타데이터 파일은 도 8을 참조하여 설명되고 시스템 링커(830)에 제공된 베이스 플랫폼 기술(825)의 구현예이다. 예시되어 있는 바와 같이, 플랫폼 메타데이터 파일은 프로그램가능 IC가 결합되는 타겟 플랫폼 또는 보드의 유형을 지정한다. 또한, 플랫폼 메타데이터 파일은 특정 구역, 예를 들어 정적 구역의 모델 및/또는 유형뿐만 아니라 클럭 주파수와 같은, 보드 상의 프로그램가능 IC의 특정 특징을 지시한다. 링커(830)는 플랫폼 메타데이터 파일로부터 타겟 플랫폼을 식별하고 플랫폼 메타데이터 파일에 지정된 타겟 플랫폼에 대해 명명된 디렉토리 구조에 액세스할 수도 있다.
도 15는 예시적인 디렉토리 구조(1500)이다. 지시되어 있는 상위 레벨 디렉토리는 플랫폼 메타데이터 파일로부터 시스템 링커(830)에 의해 판독될 수도 있는 타겟 플랫폼과 동일한 명칭을 사용한다. 본 예에서, 상위 레벨 디렉토리는 "보드명"이라 칭한다. 그러나, 상기에 제공된 예시적인 플랫폼 메타데이터 파일을 참조하면, 상위 레벨 디렉토리는 "VC690" 또는 그 유도체로서 지정될 수도 있다. 어느 경우든, 시스템 링커(830)는 도 15의 디렉토리 구조를 사용하여 플랫폼 FPGA(845)를 얻는다. 디렉토리는 예시의 목적으로 도 15에 굵게 표시되어 있다. 예를 들어, "보드명", "드라이버", "ipi" 및 "localjib"가 디렉토리이다. 열거된 재명명 아이템은 파일 및/또는 패키지이다.
시스템은 파일이 정확하게 패키징되어 시스템의 지명된 플랫폼 디렉토리에 추가되는 상태로 임의의 새롭게 추가된 타겟 플랫폼을 자동으로 위치지정할 수도 있다. 도시되어 있는 예에서, "driver_file.so"는 버스를 거쳐 타겟 플랫폼과 통신하기 위해 호스트에 의해 사용되는 저레벨 드라이버이다. 도시되어 있는 바와 같이, driver_file.so는 "드라이버" 디렉토리 내에 위치되어 있다. 도 15의 예에서 "platform.xml"이라 칭하는 플랫폼 메타데이터 파일은 루트 디렉토리에 배치된다. 도 3, 도 4 및 도 5를 참조하여 설명된 바와 같이 IC의 정적 구역에 사용된 임의의 패키징된 IP는 "localjib" 디렉토리 내에 저장될 수도 있다. "bp.tcl"이라 칭하는 베이스 플랫폼 블록도 TCL 파일 및 정적 구역 회로 디자인에 대한 임의의 상위 레벨 디자인 제약 파일, 예를 들어 타이밍 및/또는 물리적 제약은 "ipi" 디렉토리에 포함된다.
도 15에 "driver_file.so"로서 도시되어 있는 공통 저레벨 드라이버는 복수의 기능을 갖는 API를 포함할 수도 있다. 공통 저레벨 드라이버 API(이하, "드라이버 API")는 호스트 내에서 실행하는 이종 멀티프로세서 실행시간 프로그램 코드가 타겟 플랫폼과 통신하게 한다. 드라이버 API는 예를 들어, 프로그램가능 IC 내로의 구성 비트스트림 다운로드, 버퍼의 할당 및/또는 할당해제, 호스트 메모리로부터 타겟 플랫폼 메모리로 버퍼의 마이그레이팅(migrating), 호스트 메모리로의 타겟 플랫폼 메모리의 마이그레이팅, 및 커널의 제어부를 통한 프로그램가능 IC 내에 구현된 바와 같은 커널과의 통신을 지원한다.
드라이버 API는 또한 어드레스 공간을 지원한다. 어드레스 공간은 타겟 플랫폼의 주변 장치에 액세스하기 위해 사용될 수도 있다. 타겟 플랫폼의 각각의 주변 장치는 예를 들어, 어드레스 공간의 그 자신의 메모리 맵핑된 범위를 가질 수도 있다. 타겟 플랫폼은 선택적으로 타겟 플랫폼의 모든 주변 장치에 어드레스하는 데 사용될 수도 있는 플랫 메모리 공간을 가질 수도 있다.
driver_file.so는 타겟 플랫폼 상에 판독되거나 기입될 수도 있는 버퍼, 예를 들어, DMA 버퍼의 최소 크기와 같은 다양한 양을 지원할 수도 있다. 또한, "열거형(enum)"이라 칭하는 하나 이상의 열거된 어드레스 공간이 지원될 수도 있다. 메모리 동작은 플랫 어드레싱 또는 상대 어드레싱을 사용할 수도 있다. 예시적인 열거형은 XCL_ADDR_SPACE_DEVICE_FLAT, XCL_ADDR_SPACE_DEVICE_RAM, XCL_ADDR_KERNEL_CTRL, 및 XCL_ADDR_SPACE_MAX를 포함할 수도 있지만, 이들에 한정되는 것은 아니다.
드라이버 API는 이들에 한정되는 것은 아니지만, 이하를 포함하는 동작에 액세스한다:
· xclDeviceHandle xclOpen(const char *deviceName)
· void xclClose(xclDeviceHandle handle)
· int xclGetDeviceInfo(xclDeviceHandle handle, xclDeviceInfo *info)
(xclDeviceHandle handle).
드라이버 API는 동작 "int xclLoadBitstream(xclDeviceHandle handle, const char *fileName)"으로 구성 비트스트림 로드 동작을 지원한다. 이와 같이, 호스트는 실행시간 중에 필요에 따라 하드웨어 내의 하나 이상의 상이한 커널을 구현하기 위해 IC 내로 풀이건 부분이건, 구성 비트스트림의 로딩을 개시할 수도 있다.
드라이버 API는 타겟 플랫폼의 메모리를 관리하기 위한 다양한 동작을 제공한다. 타겟 플랫폼의 판매자는 예를 들어, 이하의 API를 메모리 관리에 제공하는 데 요구된다:
· uint64_t xclAllocDeviceBuffer(xclDeviceHandle handle, size_t size)
동작 "xclAllocDeviceBuffer"는 타겟 플랫폼 상에 지정된 크기의 버퍼를 할당하고, 타겟 플랫폼 RAM 내의 할당된 버퍼의 오프셋을 리턴값으로서 리턴한다. 오프셋은 버퍼 핸들로서 작용한다. OpenCL 실행시간은 이후에 OpenCL 커널에 리턴된 핸들을 패스할 것이다. OpenCL 커널은 타겟 플랫폼 RAM 내의 할당된 버퍼 상에 버스 마스터 판독 및/또는 기입 동작을 수행하기 위해 리턴된 핸들을 사용할 것이다. 호스트는 타겟 플랫폼 RAM에 직접 기입하지 않는다. 남아 있는 비어 있는 블록이 존재하지 않는 경우에, 함수는 -1을 리턴해야 한다.
· void xclFreeDeviceBuffer(xclDeviceHandle handle, uint64_t buf)
동작 "xclFreeDeviceBuffer"는 xclAllocDeviceBuffer에 의해 미리 할당된 메모리를 비워지게 한다. 비워진 메모리는 xclAllocDeviceBuffer로의 다른 호를 위해 이후에 재사용될 수도 있다. 에러 조건은 xclAllocDeviceBuffer에 의해 미리 할당되지 않은 버퍼 핸들을 패스하는 것으로부터 발생한다.
· size_t xclCopyBufferHost2Device (xclDeviceHandle handle, uint64_t dest, const void *src, size_t size, size_t seek)
동작 "xclCopyBufferHost2Device"는 타겟 플랫폼 상에 상주하는 목적지 버퍼 내로 호스트 버퍼의 콘텐트를 복사한다. 요소 src는 호스트 버퍼 포인터를 칭하고, dest는 디바이스 버퍼 핸들을 칭한다. 에러는 xclAllocDeviceBuffer에 의해 미리 할당되지 않은 dest 핸들을 패스하는 것을 야기한다. 요소 seek는 dest 핸들 내의 오프셋을 지정한다. 에러는 size 플러스 seek가 미리 할당된 디바이스 버퍼의 크기보다 큰 경우에 size를 패스하는 것으로부터 발생한다. 제공된 예에서, PCIe DMA가 버퍼를 마이그레이팅하는 데 사용된다.
· size_t xclCopyBufferDevice2Host(xclDeviceHandle handle, void *dest, uint64_t src, size_t size, size_t skip)
동작 xclCopyBufferDevice2Host는 타겟 플랫폼 상주 버퍼로부터 호스트 버퍼로 콘텐트를 복사한다. 요소 src는 디바이스 버퍼 핸들을 칭하고, 요소 dest는 호스트 버퍼 포인트를 칭한다. 에러는 xclAllocDeviceBuffer에 의해 미리 할당되지 않은 src를 패스하는 것으로부터 발생한다. 요소 skip은 src 핸들 내의 오프셋을 지정한다. 에러는 size 플러스 skip이 미리 할당된 디바이스 버퍼의 크기보다 큰 경우에 size를 패스하는 것으로부터 발생한다. 제공된 예에서, PCIe DMA가 버퍼를 마이그레이팅하는 데 사용된다.
· size_t xclWrite(xclDeviceHandle handle, xclAddressSpace space,
uint64_t offset, const void *hostBuf, size_t size)
동작 xclWrite는 타겟 플랫폼 어드레스 맵 내의 특정 위치에 호스트 버퍼 hostBuf의 콘텐트를 복사한다. hostBuf의 콘텐트는 타겟 플랫폼의 주변 장치를 프로그램하는 데 사용된다. 예를 들어, 호스트 내에서 실행하는 OpenCL 실행시간은 프로그램가능 IC 내의 커널에 독립변수를 송신하기 위해 이 동작을 사용한다. 오프셋은 어드레스 공간에 상대적이다.
· size_t xclRead(xclDeviceHandle handle, xclAddressSpace space,
uint64_t offset, void *hostbuf, size_t size)
동작 xclRead는 타겟 플랫폼 어드레스 맵 내의 특정 위치로부터 호스트 버퍼 hostBuf에 데이터를 복사한다. 동작은 타겟 플랫폼의 주변 장치의 상태를 판독하는 데 사용된다. 예를 들어, OpenCL 실행시간 라이브러리는 커널이 실행을 완료했는지 여부를 결정하기 위해 이 동작을 사용한다. 오프셋은 어드레스 공간에 상대적이다.
호스트의 운영 체제는 타겟 플랫폼과 통신하기 위해 커널 DMA 드라이버를 필요로 한다. 일 양태에서, 공통 저레벨 드라이버 API는 드라이버의 상세로부터 OpenCL 실행시간을 격리하기 위해 커널 DMA 드라이버의 위에 계층화될 수도 있다. 드라이버는 멀티스레딩 안전해야 한다. OpenCL 실행시간은 선택적으로 디바이스에 동시에 판독 및 기록하기 위해 하나 초과의 스레드를 사용한다.
다른 양태에서, 드라이버 API는 인터럽트 함수를 포함할 수도 있다. 예를 들어, 커널을 위한 레지스터 맵은 플래그가 커널에 의해 저장될 수도 있는 하나 이상의 메모리 위치를 포함할 수도 있다. 레지스터 맵의 지명된 메모리 위치에서 플래그의 검출은 정적 구역이 드라이버 API의 부분으로서 제공된 함수를 통해 인터럽트를 호스트로 트리거링하게 할 수 있다.
상기에 예시된 예는 OpenCL 구현예에 관련된 것이지만, 임의의 이종 멀티프로세서 컴퓨팅 언어가 사용될 수도 있고 API의 부분으로서 설명된 다양한 동작이 이에 따라 적응될 수도 있다는 것이 이해되어야 한다.
도 16은 예시적인 커널 실행의 방법(1600)을 도시하고 있는 흐름도이다. 방법(1600)은 커널이 프로그램가능 IC 내에서 구현되고 타겟 플랫폼이 호스트와 통신적으로 링크되는 상태에서 시작한다. 호스트는 예를 들어, 하나 이상의 이진 컨테이너를 포함하거나 하나 이상의 이진 컨테이너로의 액세스를 가질 수도 있다. 호스트는 이진 컨테이너에 액세스하고, 이진 컨테이너로부터 IC로, 예를 들어 RAM(345)으로 구성 비트스트림 파일을 제공한다. 호스트는 드라이버 API의 부분으로서 기술된 구성 비트스트림 로드 동작을 개시하여 이에 의해 IC가 구성 비트스트림을 로드하고 구성 비트스트림에 의해 지정된 커널을 구현하게 할 수도 있다. 설명된 바와 같이, 호스트는 부분이건 풀이건, 하나 이상의 상이한 구성 비트스트림이 실행시간 중에 다양한 시간에 IC 내에 하나 이상의 상이한 커널을 구현하기 위해 로딩되게 할 수도 있다.
블록 1605에서, 호스트 애플리케이션이 초기화된다. 호스트 애플리케이션은 도 8에 도시되어 있는 바와 같은 이종 멀티프로세서 실행시간 라이브러리를 포함한다. 블록 1610에서, 호스트 애플리케이션은 호스트 메모리 내에 버퍼를 할당한다. 블록 1615에서, 호스트 애플리케이션은 호스트 메모리로부터 타겟 플랫폼 메모리로 버퍼 콘텐트를 송신하기 위해 전송을 개시한다.
블록 1620에서, 호스트 애플리케이션은 동작을 시작하도록 슬레이브 인터페이스를 통해 커널에 신호한다. 블록 1625에서, 호스트 애플리케이션은 선택적으로 완료 신호를 모니터링하기 위해 타겟 플랫폼을 폴링(polling)하기 시작한다. 블록 1630에서, 커널, 즉 커널의 하드웨어 구현예는 동작을 실행하거나 시작한다. 커널은 타겟 플랫폼 메모리로부터 데이터를 로드하거나 저장한다. 블록 1635에서, 커널은 프로세싱을 완료하는 것에 응답하여 완료하기 위해 메모리 맵 레지스터 내의 상태를 변경하거나 또는 인터럽트를 발생한다. 블록 1640에서, 호스트 애플리케이션은 타겟 플랫폼 메모리의 업데이트된 버퍼 콘텐트, 즉 결과를 호스트 메모리에 전송한다. 블록 1645에서, 예를 들어 호스트 또는 호스트 애플리케이션에서 실행하는 이종 멀티프로세서 실행시간은 호스트 메모리로부터 버퍼를 판독한다.
설명의 목적으로, 특정 명명법이 본 명세서에 개시된 다양한 발명적 개념의 철저한 이해를 제공하기 위해 설명되었다. 그러나, 본 명세서에 사용된 용어는 단지 본 발명의 구성의 특정 양태를 설명하기 위한 것이고, 한정이 되도록 의도된 것은 아니다.
본 명세서에 정의될 때, 단수 표현은 하나 또는 하나 초과를 의미한다. 용어 "복수"는 본 명세서에 정의될 때, 2개 또는 2개 초과를 의미한다. 용어 "다른"은 본 명세서에 정의될 때, 적어도 제2 또는 그 초과를 의미한다. 용어 "결합된"은 본 명세서에 정의될 때, 달리 지시되지 않으면, 임의의 개입 요소 없이 직접 또는 하나 이상의 개입 요소를 갖고 간접이건간에, 접속된 것을 의미한다. 2개의 요소는 또한 기계적으로, 전기적으로 결합되거나, 또는 통신 채널, 경로, 네트워크, 또는 시스템을 통해 통신적으로 링크될 수도 있다.
본 명세서에 정의될 때, 용어 "자동으로"는 사용자 개입이 없는 것을 의미한다. 본 명세서에 정의될 때, 용어 "사용자"는 인간을 의미한다. 용어 "및/또는"은 본 명세서에 정의될 때, 연계된 열거된 아이템의 하나 이상의 임의의 그리고 모든 가능한 조합을 의미한다. 용어 "포함한다" 및/또는 "포함하는"은 본 명세서에 사용될 때, 언급된 특징, 완전체, 단계, 동작, 요소, 및/또는 구성요소의 존재를 지정하지만, 하나 이상의 다른 특징, 완전체, 단계, 동작, 요소, 구성요소, 및/또는 이들의 그룹의 존재 또는 추가를 배제하는 것은 아니다. 용어 "제1", "제2" 등이 다양한 요소를 설명하기 위해 본 명세서에 사용될 수도 있지만, 이들 용어는 문맥상 달리 지시되지 않으면 단지 하나의 요소를 다른 요소로부터 구별하는 데 사용되기 때문에, 이들 요소는 이들 용어에 의해 한정되어서는 안된다.
본 명세서에 정의될 때, 문맥에 따라, 용어 "~하면"은 "~할 때", "~시에", "결정에 응답하여", "검출에 응답하여", "결정하는 것에 응답하여" 또는 "검출하는 것에 응답하여"를 의미한다. 유사하게, 구문 "~으로 결정되면" 또는 구문 "[언급된 조건 또는 이벤트]가 검출되면"은 문맥에 따라, 본 명세서에 정의될 때, "결정시에", "결정에 응답하여", "결정하는 것에 응답하여", "[언급된 조건 또는 이벤트]의 검출시에", "[언급된 조건 또는 이벤트]의 검출에 응답하여" 또는 "[언급된 조건 또는 이벤트]를 검출하는 것에 응답하여"를 의미한다.
본 명세서에서, 동일한 참조 부호가 단자, 신호 라인, 와이어, 및 이들의 대응 신호를 나타내는 데 사용된다. 이와 관련하여, "신호", "와이어", "접속", "단자" 및 "핀"은 본 명세서에서 때때로 상호교환 가능하게 사용될 수도 있다. 용어 "신호", "와이어" 등은 하나 이상의 신호, 예를 들어 단일의 와이어를 통한 단일의 비트의 전달 또는 다수의 병렬 와이어를 통한 다수의 병렬 비트의 전달을 표현할 수도 있다는 것이 이해되어야 한다. 또한, 각각의 와이어 또는 신호는 경우에 따라 신호 또는 와이어에 의해 접속된 2개 이상의 구성요소 사이의 양방향성 통신을 표현할 수도 있다.
본 명세서에 설명된 하나 이상의 양태는 하드웨어 또는 하드웨어와 소프트웨어의 조합으로 실현될 수도 있다. 하나 이상의 양태는 일 시스템 내의 중앙집중형 방식으로 또는 상이한 요소가 다수의 상호접속된 시스템을 가로질러 확산되는 분산형 방식으로 실현될 수도 있다. 본 명세서에 설명된 방법의 적어도 일부를 수행하기 위해 적용된 임의의 종류의 데이터 프로세싱 시스템 또는 다른 장치가 적합된다.
하나 이상의 양태는 또한 본 명세서에 설명된 방법의 구현을 가능하게 하는 모든 특징을 포함하는 컴퓨터 프로그램 제품에 임베드될 수도 있다. 컴퓨터 프로그램 제품은 컴퓨터-판독가능 데이터 저장 매체를 포함한다. 본 명세서에 정의될 때, 구문 "컴퓨터-판독가능 저장 매체"는 명령어 실행 시스템, 장치, 또는 디바이스에 의해 또는 관련하여 사용을 위한 프로그램 코드를 포함하거나 저장하는 저장 매체를 의미한다. 본 명세서에 정의될 때, "컴퓨터-판독가능 저장 매체"는 비일시적이고, 이와 같이 자체로 일시적 전파 신호는 아니다. 컴퓨터-판독가능 저장 매체의 예는 광학 매체, 자기 매체, 자기 광학 매체, RAM과 같은 컴퓨터 메모리, 벌크 저장 디바이스, 예를 들어 하드디스크 등을 포함할 수도 있지만, 이들에 한정되는 것은 아니다.
도면의 흐름도 및 블록도는 본 명세서에 개시된 본 발명의 구성의 다양한 양태에 따른 시스템, 방법 및 컴퓨터 프로그램 제품의 가능한 구현예의 아키텍처, 기능성, 및 동작을 도시하고 있다. 이와 관련하여, 흐름도 또는 블록도의 각각의 블록은 지정된 기능(들)을 구현하기 위한 하나 이상의 실행가능 명령어를 포함하는 모듈, 세그먼트 또는 코드의 부분을 표현할 수도 있다. 블록도 및/또는 흐름도 도면의 각각의 블록, 및 블록도 및/또는 흐름도 도면의 블록의 조합은 특정 용도 하드웨어 및 컴퓨터 명령어의 지정된 기능 또는 작용 또는 조합을 수행하는 특정 용도 하드웨어 기반 시스템에 의해 구현될 수 있다는 것이 또한 주목될 것이다.
일 양태에서, 흐름도 도면의 블록은 다양한 블록에서 숫자에 대응하는 증가하는 수치적 순서로 수행될 수도 있다. 다른 양태에서, 블록은 블록 내의 숫자와는 상이한 또는 변동하는 순서로 수행될 수도 있다. 예를 들어, 연속적으로 도시되어 있는 2개 이상의 블록은 실질적으로 동시에 실행될 수도 있다. 다른 경우에, 2개 이상의 블록은 수반된 기능성에 따라, 때때로 역순서로 실행될 수도 있다. 또 다른 경우에, 하나 이상의 블록은 결과가 저장되어 바로 이어지지는 않는 후속의 또는 다른 블록에서 이용되는 다양한 순서로 수행될 수도 있다.
용어 "컴퓨터 프로그램", "소프트웨어", "애플리케이션", "컴퓨터-사용가능 프로그램 코드", "프로그램 코드", "실행가능 코드", "이들의 변형 및/또는 조합"은 본 명세서의 맥락에서, a) 다른 언어, 코드, 또는 표기로의 변환; b) 상이한 자료 형태의 재현 중 어느 하나 또는 모두에 직접 또는 후에 데이터 프로세싱 시스템이 특정 기능을 수행하게 하도록 의도된 명령어의 세트의 임의의 언어, 코드 또는 표기의 임의의 표현을 의미한다. 예를 들어, 프로그램 코드는 서브루틴, 함수, 절차, 객체 방법, 객체 구현예, 실행가능 애플리케이션, 애플릿, 서브렛, 소스 코드, 객체 코드, 공유된 라이브러리/동적 로드 라이브러리 및/또는 컴퓨터 시스템 상에서 실행을 위해 설계된 명령어의 다른 시퀀스를 포함할 수도 있지만, 이들에 한정되는 것은 아니다.
따라서, 본 명세서에 전체를 통해, "프로세싱" 또는 "컴퓨팅" 또는 "계산" 또는 "결정" 또는 "표시" 등과 같은 용어를 이용하는 진술은 컴퓨터 시스템의 레지스터 및/또는 메모리 내의 물리(전자)량으로서 표현되어 있는 데이터를 조작하여 컴퓨터 시스템 메모리 및/또는 레지스터 또는 다른 이러한 정보 저장, 전송, 또는 디스플레이 디바이스 내에 물리량으로서 유사하게 표현되어 있는 다른 데이터로 변환하는 데이터 프로세싱 시스템, 예를 들어 컴퓨터 시스템, 또는 유사한 전자 컴퓨팅 디바이스의 동작 및 프로세스를 칭한다.
이하의 청구범위의 모든 수단 또는 단계 플러스 기능 요소의 대응 구조, 재료, 동작, 및 등가물은 구체적으로 청구된 바와 같은 다른 청구된 요소와 조합하여 기능을 수행하기 위한 임의의 구조, 재료, 또는 동작을 포함하도록 의도된다.
방법은 프로세서를 사용하여, 이종 멀티프로세서 디자인의 제1 커널의 RTL 기술을 발생하는 것, 이종 멀티프로세서 디자인의 호스트에 인터페이스를 제공하는 프로그램가능 IC 내에 정적 구역을 제공하는 베이스 플랫폼 회로 디자인과 제1 커널의 RTL 기술을 통합하는 것, 및 제1 커널의 RTL 기술로부터 그리고 프로세서를 사용하여, 제1 커널의 하드웨어 구현예를 지정하는 제1 구성 비트스트림 및 구성 비트스트림을 위한 지원 데이터를 발생하는 것을 포함한다. 방법은 이진 컨테이너 내에 제1 구성 비트스트림 및 지원 데이터를 포함하는 것을 또한 포함한다.
일 예에서, 이종 멀티프로세서 디자인은 OpenCL 디자인이고, 제1 커널은 OpenCL로 지정된다.
일 양태에서, 지원 데이터는 프로그램가능 IC 내에 구현된 바와 같은 제1 커널의 하드웨어 구현예의 2차원 위치를 포함한다.
방법은 이종 멀티프로세서 디자인의 실행시간 중에 프로그램가능 IC 내에 제1 커널의 하드웨어 구현예의 인스턴스를 생성하는 제1 커널의 구성 비트스트림을 로딩하는 것을 포함할 수도 있다.
방법은 이종 멀티프로세서 디자인의 실행시간 중에 프로그램가능 IC 내에 제1 커널의 하드웨어 구현예의 복수의 인스턴스를 생성하는 제1 커널의 구성 비트스트림을 로딩하는 것을 또한 포함할 수도 있다.
방법은 제2 이진 컨테이너 내에 이종 멀티프로세서 디자인의 제2 커널의 하드웨어 구현예를 지정하는 제2 구성 비트스트림을 포함하는 것을 더 포함할 수도 있다. 제2 커널의 하드웨어 구현예의 적어도 하나의 인스턴스는 프로그램가능 IC 내에 생성될 수도 있다.
일 양태에서, 제1 구성 비트스트림을 발생하는 것은 커널 회로를 지정하는 부분 구성 비트스트림으로서 제1 구성 비트스트림을 발생하는 것을 포함할 수도 있다. 다른 양태에서, 제1 구성 비트스트림을 발생하는 것은 커널 회로 및 베이스 플랫폼 회로를 지정하는 풀 구성 비트스트림으로서 제1 구성 비트스트림을 발생하는 것을 포함할 수도 있다.
방법은 프로세서를 사용하여, 이종 멀티프로세서 디자인의 제1 커널의 RTL 기술을 발생하는 것, 이종 멀티프로세서 디자인의 호스트에 프로그램가능 IC 내의 정적 구역을 제공하는 베이스 플랫폼 회로 디자인과 제1 커널의 RTL 기술을 통합하는 것, 및 제1 커널의 RTL 기술로부터 그리고 프로세서를 사용하여, 제1 커널의 RTL 기술을 위한 지원 데이터를 발생하는 것을 포함한다. 방법은 이진 컨테이너 내에 제1 커널의 RTL 기술 및 지원 데이터를 포함하는 것을 또한 포함한다.
일 예에서, 이종 멀티프로세서 디자인은 OpenCL 디자인이고, 제1 커널은 OpenCL로 지정된다.
방법은 커널의 실행가능 버전을 발생하는 것 및 이진 컨테이너 내에 커널의 실행가능 버전을 포함하는 것을 포함할 수도 있다.
방법은 실행시간 중에 이진 컨테이너로부터 RTL 시뮬레이터로 RTL 기술을 제공하고 RTL 시뮬레이터 내의 커널의 RTL 기술을 시뮬레이팅하는 호스트를 또한 포함할 수도 있다.
방법은 제2 이진 컨테이너 내에 이종 멀티프로세서 디자인의 제2 커널의 RTL 기술을 포함하는 것을 포함할 수도 있다.
시스템은 실행가능 동작을 개시하도록 프로그램된 프로세서를 포함할 수도 있다. 실행가능 동작은 이종 멀티프로세서 디자인의 제1 커널의 RTL 기술을 발생하는 것, 이종 멀티프로세서 디자인의 호스트에 인터페이스를 제공하는 프로그램가능 IC 내에 정적 구역을 제공하는 베이스 플랫폼 회로 디자인과 제1 커널의 RTL 기술을 통합하는 것, 및 제1 커널의 RTL 기술로부터, 제1 커널의 하드웨어 구현예를 지정하는 제1 구성 비트스트림 및 구성 비트스트림을 위한 지원 데이터를 발생하는 것을 포함한다. 방법은 이진 컨테이너 내에 제1 구성 비트스트림 및 지원 데이터를 포함하는 것을 또한 포함할 수도 있다.
일 예에서, 이종 멀티프로세서 디자인은 OpenCL 디자인이고, 제1 커널은 OpenCL로 지정된다.
지원 데이터는 프로그램가능 IC 내에 구현된 바와 같은 제1 커널의 하드웨어 구현예의 2차원 위치를 포함할 수도 있다.
실행가능 동작은 이종 멀티프로세서 디자인의 실행시간 중에 프로그램가능 IC 내에 제1 커널의 하드웨어 구현예의 인스턴스를 생성하는 제1 커널의 구성 비트스트림을 로딩하는 것을 포함할 수도 있다.
실행가능 동작은 이종 멀티프로세서 디자인의 실행시간 중에 프로그램가능 IC 내에 제1 커널의 하드웨어 구현예의 복수의 인스턴스를 생성하는 제1 커널의 구성 비트스트림을 로딩하는 것을 또한 포함할 수도 있다.
실행가능 동작은 제2 이진 컨테이너 내에 이종 멀티프로세서 디자인의 제2 커널의 하드웨어 구현예를 지정하는 제2 구성 비트스트림을 포함하는 것을 더 포함할 수도 있다. 실행가능 동작은 프로그램가능 IC 내에 제2 커널의 하드웨어 구현의 적어도 하나의 인스턴스를 생성하는 것을 포함할 수도 있다.
일 양태에서, 제1 구성 비트스트림을 발생하는 것은 커널 회로를 지정하는 부분 구성 비트스트림으로서 제1 구성 비트스트림을 발생하는 것을 포함할 수도 있다. 다른 양태에서, 제1 구성 비트스트림을 발생하는 것은 커널 회로 및 베이스 플랫폼 회로를 지정하는 풀 구성 비트스트림으로서 제1 구성 비트스트림을 발생하는 것을 포함할 수도 있다.
다른 예에서, IC는 정적이고 IC와 호스트 프로세서 사이에 인터페이스를 제공하는 제1 구역을 포함한다. 제1 구역은 제1 마스터 인터페이스를 갖는 제1 상호접속 회로 블록 및 제1 슬레이브 인터페이스를 갖는 제2 상호접속 회로 블록을 포함한다. IC는 제1 구역에 결합된 제2 구역을 포함한다. 제2 구역은 이종 멀티프로세서 디자인의 커널을 구현하고, 제1 상호접속 회로 블록의 제1 마스터 인터페이스에 결합되고 호스트 프로세서로부터 명령을 수신하도록 구성된 슬레이브 인터페이스를 포함한다. 제2 구역은 또한 제2 상호접속 회로 블록의 제1 슬레이브 인터페이스에 결합된 마스터 인터페이스를 포함하고, 제2 구역의 마스터 인터페이스는 메모리 제어기를 위한 마스터이다.
일 예에서, 이종 멀티프로세서 디자인은 OpenCL 디자인이다.
일 양태에서, 제2 구역은 호스트 프로세서의 제어 하에서 상이한 커널을 구현하기 위해 실행시간 중에 동적으로 재구성가능할 수도 있다. 다른 양태에서, 제2 구역은 제1 구역을 그대로 유지하면서 호스트 프로세서의 제어 하에서 상이한 커널을 구현하기 위해 실행시간 중에 동적으로 재구성가능할 수도 있다.
제1 구역은 버스 종단점 및 버스 종단점에 결합된 DMA 제어기를 포함할 수도 있다. 제1 구역은 제1 상호접속 회로 블록의 슬레이브 인터페이스에 결합된 마스터 인터페이스를 포함할 수도 있다. 제1 상호접속 회로 블록은 제2 마스터 인터페이스를 포함할 수도 있다. 제2 상호접속 회로 블록은 제1 상호접속 회로 블록의 제2 마스터 인터페이스에 결합된 제2 슬레이브 인터페이스를 포함할 수도 있다.
제1 구역은 또한 메모리 제어기를 포함할 수도 있다. 메모리 제어기는 제2 상호접속 회로 블록의 마스터 인터페이스에 결합된 슬레이브 인터페이스를 포함할 수도 있다.
제1 상호접속 회로 블록 및 제2 상호접속 회로 블록은 AXI 상호접속 회로 블록으로서 구현될 수도 있다.
IC는 또한 이종 멀티프로세서 디자인의 호스트 프로그램 코드를 갖고 프로그램된 호스트 프로세서에 결합될 수도 있다.
DMA 제어기는 메모리 제어기에 대한 마스터로서 구성될 수도 있다.
제1 구역은 제1 상호접속 회로 블록을 통해 제2 구역에 클럭 신호 및 리셋 신호를 제공하도록 구성될 수도 있다.
제2 구역은 제1 상호접속 회로 블록에 결합된 메모리 맵핑된 레지스터를 포함할 수도 있다.
일 양태에서, 제2 구역은 제1 상호접속 회로 블록의 제1 마스터 인터페이스에 결합된 제2 구역의 슬레이브 인터페이스 및 제1 커널 회로 블록(610-1)의 입력에 결합된 마스터 인터페이스를 갖는 제3 상호접속 회로 블록을 포함한다. 제2 구역은 제1 커널 회로 블록(610-1)의 출력에 결합된 슬레이브 인터페이스 및 제2 인터페이스 회로 블록의 제1 슬레이브 인터페이스에 결합된 마스터 인터페이스를 갖는 제4 상호접속 회로 블록을 또한 포함할 수도 있다.
제2 구역은 제3 상호접속 회로 블록의 마스터 인터페이스에 결합된 입력 및 제4 상호접속 회로 블록의 슬레이브 인터페이스에 결합된 출력을 갖는 제2 커널 회로 블록을 또한 포함할 수도 있다.
다른 예에서, 방법은 IC와 호스트 프로세서 사이에 인터페이스를 구현하는 IC 내에 정적인 제1 구역을 제공하는 것, 제1 구역 내에, 제1 마스터 인터페이스를 갖는 제1 상호접속 회로 블록 및 제1 슬레이브 인터페이스를 갖는 제2 상호접속 회로 블록을 포함하는 것, 및 제1 구역에 결합된 제2 구역을 제공하는 것을 포함한다. 방법은 제2 구역 내에 이종 멀티프로세서 디자인의 커널을 구현하는 것 및 제2 구역 내에, 제1 상호접속 회로 블록의 제1 마스터 인터페이스에 결합된 슬레이브 인터페이스를 포함하는 것을 또한 포함할 수도 있다. 커널은 호스트 프로세서로부터 명령을 수신하도록 구성된다. 방법은 제2 구역 내에, 제2 상호접속 회로 블록의 제1 슬레이브 인터페이스에 결합된 마스터 인터페이스를 포함하는 것을 더 포함하고, 제2 구역의 마스터 인터페이스는 메모리 제어기를 위한 마스터이다.
일 예에서, 이종 멀티프로세서 디자인은 OpenCL 디자인이다.
일 양태에서, 방법은 호스트 프로세서의 제어 하에서 상이한 커널을 구현하기 위해 IC의 실행시간 중에 제2 구역을 동적으로 재구성하는 것을 포함할 수도 있다. 다른 양태에서, 방법은 제1 구역을 그대로 유지하면서 호스트 프로세서의 제어 하에서 상이한 커널을 구현하기 위해 IC의 실행시간 중에 제2 구역을 동적으로 재구성하는 것을 포함할 수도 있다.
방법은 제1 구역 내에, 버스 종단점을 제공하는 것 및 제1 구역 내에, 버스 종단점에 결합되고 제1 상호접속 회로 블록의 슬레이브 인터페이스에 결합된 마스터 인터페이스를 포함하는 DMA 제어기를 제공하는 것을 포함할 수도 있다. 제1 상호접속 회로 블록은 제2 마스터 인터페이스를 포함할 수도 있다. 제2 상호접속 회로 블록은 제1 상호접속 회로 블록의 제2 마스터 인터페이스에 결합된 제2 슬레이브 인터페이스를 포함할 수도 있다.
방법은 또한 제1 구역 내에, 제2 상호접속 회로 블록의 마스터 인터페이스에 결합된 슬레이브 인터페이스를 갖는 메모리 제어기를 제공하는 것을 포함할 수도 있다.
방법은 또한 이종 멀티프로세서 디자인의 호스트 프로그램 코드를 호스트 프로세서에 제공하는 것을 포함할 수도 있다.
방법은 또한 제2 구역 내에, 제1 상호접속 회로 블록의 제1 마스터 인터페이스에 결합된 제2 구역의 슬레이브 인터페이스 및 제1 커널 회로 블록의 입력에 결합된 마스터 인터페이스를 갖는 제3 상호접속 회로 블록을 제공하는 것을 포함할 수도 있다. 제4 상호접속 회로 블록이 제2 구역 내에 제공될 수도 있다. 제4 상호접속 회로 블록은 제1 커널 회로 블록의 출력에 결합된 슬레이브 인터페이스 및 제2 인터페이스 회로 블록의 제1 슬레이브 인터페이스에 결합된 마스터 인터페이스를 포함할 수도 있다.
방법은 또한 제2 구역 내에, 제3 상호접속 회로 블록의 마스터 인터페이스에 결합된 입력 및 제4 상호접속 회로 블록의 슬레이브 인터페이스에 결합된 출력을 갖는 제2 커널 회로 블록을 제공하는 것을 포함할 수도 있다.
본 명세서에 설명된 특징은 그 사상 또는 본질적인 속성으로부터 벗어나지 않고 다른 형태로 실시될 수도 있다. 이에 따라, 이러한 특징 및 구현예의 범주를 지시하는 것으로서, 상기 개시내용보다는, 이하의 청구범위를 참조해야 한다.
100: 아키텍처 101: 멀티-기가비트 송수신기
102: 구성가능 논리 블록 103: 랜덤 액세스 메모리 블록
104: 입출력 블록 105: 구성 및 클럭킹 로직
106: 디지털 신호 프로세싱 블록 107: 특수 I/O 블록
108: 프로그램가능 로직 111: 상호접속 소자
205: 프로세서 210: 메모리 소자
220: 로컬 메모리 225: 벌크 저장 디바이스
230: 키보드 235: 디스플레이 디바이스
240: 포인팅 디바이스 245: 네트워크 어댑터
250: 통신 포트 258: 호스트 애플리케이션
275: 이종 멀티프로세서 디자인 280: 이진 컨테이너
335: 정적 구역 340: 커널 구역
505: 버스 종단점 510: 버스 DMA 제어기
102: 구성가능 논리 블록 103: 랜덤 액세스 메모리 블록
104: 입출력 블록 105: 구성 및 클럭킹 로직
106: 디지털 신호 프로세싱 블록 107: 특수 I/O 블록
108: 프로그램가능 로직 111: 상호접속 소자
205: 프로세서 210: 메모리 소자
220: 로컬 메모리 225: 벌크 저장 디바이스
230: 키보드 235: 디스플레이 디바이스
240: 포인팅 디바이스 245: 네트워크 어댑터
250: 통신 포트 258: 호스트 애플리케이션
275: 이종 멀티프로세서 디자인 280: 이진 컨테이너
335: 정적 구역 340: 커널 구역
505: 버스 종단점 510: 버스 DMA 제어기
Claims (15)
- 방법에 있어서,
프로세서를 사용하여, 이종 멀티프로세서 디자인의 일부인 제1 커널의 고레벨 프로그래밍 언어 기술로부터 상기 제1 커널의 레지스터 전송 레벨 기술(register transfer level description)을 발생하는 단계;
상기 이종 멀티프로세서 디자인의 호스트에 인터페이스를 제공하는 프로그램가능 집적 회로 내에 정적 구역을 제공하고 상기 프로그램가능 집적 회로 내에 동적으로 재구성가능 커널 구역에 인터페이스를 제공하는 베이스 플랫폼 회로 디자인과 상기 제1 커널의 레지스터 전송 레벨 기술을 통합하는 단계;
상기 제1 커널의 레지스터 전송 레벨 기술로부터 그리고 상기 프로세서를 사용하여, 상기 제1 커널의 하드웨어 구현예 - 상기 제1 커널의 하드웨어 구현예는 상기 커널 구역에서의 구현예에 적응됨 - 를 지정하는 제1 구성 비트스트림 및 상기 제1 커널에 대한 레지스터 맵을 포함하는 상기 구성 비트스트림을 위한 지원 데이터를 발생하는 단계; 및
복수의 파일들을 포함하는 이진 컨테이너를 발생하는 단계를 포함하고,
상기 복수의 파일들은 상기 제1 구성 비트스트림을 포함하는 제1 파일 및 상기 지원 데이터를 포함하는 제2 파일을 포함하고,
상기 제2 파일의 레지스터 맵은 상기 프로그램가능 집적 회로 내에 구현된 상기 제1 커널과 통신하는 상기 호스트에 의해 사용 가능한 것인 방법. - 제1항에 있어서, 상기 커널 구역은 상기 정적 구역을 그대로 유지하면서 상이한 커널의 하드웨어 구현예를 구현하기 위해 실행시간 중에 동적으로 재구성가능한 것인 방법.
- 제1항에 있어서,
상기 이종 멀티프로세서 디자인의 실행시간 중에 상기 프로그램가능 집적 회로 내에 상기 제1 커널의 하드웨어 구현예의 인스턴스를 생성하는 상기 제1 커널의 구성 비트스트림을 로딩하는 단계를 더 포함하고,
상기 호스트는 상기 이진 컨테이너로부터 상기 프로그램가능 집적 회로에 상기 구성 비트스트림을 제공하는 것인 방법. - 제2항에 있어서, 상기 정적 구역은,
상기 커널 구역에 결합되고 상기 프로그램가능 집적 회로의 상기 커널 구역에 클럭 신호를 제공하도록 구성된 제1 상호접속 회로 블록;
상기 제1 상호접속 회로 블록에 결합된 버스 직접 메모리 액세스 제어기; 및
상기 버스 직접 메모리 액세스 제어기에 결합된 버스 종단점
을 포함하는 것인 방법. - 제4항에 있어서,
상기 정적 구역은 메모리 제어기에 상기 커널 구역을 결합하는 제2 상호접속 회로 블록을 포함하는 것인 방법. - 제1항에 있어서, 상기 제1 구성 비트스트림을 발생하는 단계는,
커널 회로를 지정하는 부분 구성 비트스트림으로서 상기 제1 구성 비트스트림을 발생하는 단계를 포함하는 것인 방법. - 제1항에 있어서, 상기 제1 구성 비트스트림을 발생하는 단계는,
커널 회로 및 베이스 플랫폼 회로를 지정하는 풀 구성 비트스트림으로서 상기 제1 구성 비트스트림을 발생하는 단계를 포함하는 것인 방법. - 시스템에 있어서,
프로세서를 포함하고,
상기 프로세서는,
이종 멀티프로세서 디자인의 일부인 제1 커널의 고레벨 프로그래밍 언어 기술로부터 상기 제1 커널의 레지스터 전송 레벨 기술을 발생하는 동작;
상기 이종 멀티프로세서 디자인의 호스트에 인터페이스를 제공하는 프로그램가능 집적 회로 내에 정적 구역을 제공하고 상기 프로그램가능 집적 회로 내에 동적으로 재구성가능 커널 구역에 인터페이스를 제공하는 베이스 플랫폼 회로 디자인과 상기 제1 커널의 레지스터 전송 레벨 기술을 통합하는 동작;
상기 제1 커널의 레지스터 전송 레벨 기술로부터, 상기 제1 커널의 하드웨어 구현예 - 상기 제1 커널의 하드웨어 구현예는 상기 커널 구역에서의 구현예에 적응됨 - 를 지정하는 제1 구성 비트스트림 및 상기 제1 커널에 대한 레지스터 맵을 포함하는 상기 구성 비트스트림을 위한 지원 데이터를 발생하는 동작; 및
복수의 파일들을 포함하는 이진 컨테이너를 발생하는 동작
을 포함하는 실행가능 동작들을 개시하도록 프로그램되고,
상기 복수의 파일들은 상기 제1 구성 비트스트림을 포함하는 제1 파일 및 상기 지원 데이터를 포함하는 제2 파일을 포함하고,
상기 제2 파일의 레지스터 맵은 상기 프로그램가능 집적 회로 내에 구현된 상기 제1 커널과 통신하는 상기 호스트에 의해 사용 가능한 것인 시스템. - 제8항에 있어서, 상기 커널 구역은 상기 정적 구역을 그대로 유지하면서 상이한 커널의 하드웨어 구현예를 구현하기 위해 실행시간 중에 동적으로 재구성가능한 것인 시스템.
- 제8항에 있어서, 상기 실행가능 동작들은,
상기 이종 멀티프로세서 디자인의 실행시간 중에 상기 프로그램가능 집적 회로 내에 상기 제1 커널의 하드웨어 구현예의 인스턴스를 생성하는 상기 제1 커널의 구성 비트스트림을 로딩하는 동작을 더 포함하고,
상기 호스트는 상기 이진 컨테이너로부터 상기 프로그램가능 집적 회로에 상기 구성 비트스트림을 제공하는 것인 시스템. - 제9항에 있어서, 상기 실행가능 동작들은,
상기 이종 멀티프로세서 디자인의 실행시간 중에 상기 프로그램가능 집적 회로 내에 상기 제1 커널의 하드웨어 구현예의 복수의 인스턴스를 생성하는 상기 제1 커널의 구성 비트스트림을 로딩하는 동작을 더 포함하고,
상기 호스트는 상기 이진 컨테이너로부터 상기 프로그램가능 집적 회로에 상기 구성 비트스트림을 제공하는 것인 시스템. - 제9항에 있어서, 상기 정적 구역은,
상기 커널 구역에 결합되고 상기 프로그램가능 집적 회로의 상기 커널 구역에 클럭 신호를 제공하도록 구성된 제1 상호접속 회로 블록;
상기 제1 상호접속 회로 블록에 결합된 버스 직접 메모리 액세스 제어기; 및
상기 버스 직접 메모리 액세스 제어기에 결합된 버스 종단점
을 포함하는 것인 시스템. - 제12항에 있어서,
상기 정적 구역은 메모리 제어기에 상기 커널 구역을 결합하는 제2 상호접속 회로 블록을 포함하는 것인 시스템. - 제8항에 있어서, 상기 제1 구성 비트스트림을 발생하는 동작은,
커널 회로를 지정하는 부분 구성 비트스트림으로서 상기 제1 구성 비트스트림을 발생하는 동작을 포함하는 것인 시스템. - 제8항에 있어서, 상기 제1 구성 비트스트림을 발생하는 동작은,
커널 회로 및 베이스 플랫폼 회로를 지정하는 풀 구성 비트스트림으로서 상기 제1 구성 비트스트림을 발생하는 동작을 포함하는 것인 시스템.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/539,985 | 2014-11-12 | ||
US14/539,975 US9218443B1 (en) | 2014-11-12 | 2014-11-12 | Heterogeneous multiprocessor program compilation targeting programmable integrated circuits |
US14/539,975 | 2014-11-12 | ||
US14/539,985 US9846660B2 (en) | 2014-11-12 | 2014-11-12 | Heterogeneous multiprocessor platform targeting programmable integrated circuits |
PCT/US2015/060025 WO2016077393A1 (en) | 2014-11-12 | 2015-11-10 | Heterogeneous multiprocessor program compilation targeting programmable integrated circuits |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170084206A KR20170084206A (ko) | 2017-07-19 |
KR102441717B1 true KR102441717B1 (ko) | 2022-09-07 |
Family
ID=54705829
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020177015833A KR102441717B1 (ko) | 2014-11-12 | 2015-11-10 | 이종 멀티프로세서 프로그램 컴파일레이션 타겟팅 프로그램가능 집적 회로 |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP3218827B1 (ko) |
JP (1) | JP6703533B2 (ko) |
KR (1) | KR102441717B1 (ko) |
CN (1) | CN107111663B (ko) |
WO (1) | WO2016077393A1 (ko) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10719474B2 (en) * | 2017-10-11 | 2020-07-21 | Samsung Electronics Co., Ltd. | System and method for providing in-storage acceleration (ISA) in data storage devices |
US11694066B2 (en) | 2017-10-17 | 2023-07-04 | Xilinx, Inc. | Machine learning runtime library for neural network acceleration |
US11222256B2 (en) | 2017-10-17 | 2022-01-11 | Xilinx, Inc. | Neural network processing system having multiple processors and a neural network accelerator |
US11568218B2 (en) * | 2017-10-17 | 2023-01-31 | Xilinx, Inc. | Neural network processing system having host controlled kernel acclerators |
US10657292B2 (en) * | 2017-12-18 | 2020-05-19 | Xilinx, Inc. | Security for programmable devices in a data center |
US10853134B2 (en) * | 2018-04-18 | 2020-12-01 | Xilinx, Inc. | Software defined multi-domain creation and isolation for a heterogeneous System-on-Chip |
US10877766B2 (en) * | 2018-05-24 | 2020-12-29 | Xilinx, Inc. | Embedded scheduling of hardware resources for hardware acceleration |
CN108733404B (zh) * | 2018-05-28 | 2021-10-15 | 电子科技大学 | 一种针对fpga固件的精准逆向工程方法 |
CN110018831B (zh) * | 2019-04-04 | 2022-11-08 | 中科寒武纪科技股份有限公司 | 程序处理方法、装置及计算机可读存储介质 |
US11204745B2 (en) * | 2019-05-23 | 2021-12-21 | Xilinx, Inc. | Dataflow graph programming environment for a heterogenous processing system |
US10891132B2 (en) | 2019-05-23 | 2021-01-12 | Xilinx, Inc. | Flow convergence during hardware-software design for heterogeneous and programmable devices |
US11188312B2 (en) | 2019-05-23 | 2021-11-30 | Xilinx, Inc. | Hardware-software design flow with high-level synthesis for heterogeneous and programmable devices |
US11188684B2 (en) | 2019-11-15 | 2021-11-30 | Xilinx, Inc. | Software defined subsystem creation for heterogeneous integrated circuits |
CN111522600B (zh) * | 2020-04-15 | 2023-05-16 | 中国电子科技集团公司第三十八研究所 | 一种在dsp上的异构计算框架构建方法及系统 |
CN111506540B (zh) * | 2020-04-24 | 2021-11-30 | 中国电子科技集团公司第五十八研究所 | 一种硬件可编程异构多核片上系统 |
US11593126B1 (en) | 2020-07-14 | 2023-02-28 | Xilinx, Inc. | Implementation for a heterogeneous device |
CN112835839B (zh) * | 2021-02-04 | 2024-10-18 | 深圳市广和通无线股份有限公司 | PCIe接口的设备枚举方法、装置、设备及存储介质 |
CN115277346B (zh) * | 2022-09-28 | 2023-01-20 | 中国电子科技集团公司第十研究所 | 一种面向嵌入式异构总线的云原生容器网络系统 |
CN117278403B (zh) * | 2023-09-18 | 2024-05-24 | 之江实验室 | 一种基于异构设备的增量式编译方法和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120117301A1 (en) | 2010-11-04 | 2012-05-10 | Sonics, Inc. | Methods and apparatus for virtualization in an integrated circuit |
US20120131288A1 (en) | 2006-06-21 | 2012-05-24 | Element Cxi, Llc | Reconfigurable Integrated Circuit Architecture With On-Chip Configuration and Reconfiguration |
US20130212365A1 (en) | 2012-02-09 | 2013-08-15 | Altera Corporation | Configuring a programmable device using high-level language |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9828381D0 (en) * | 1998-12-22 | 1999-02-17 | Isis Innovation | Hardware/software codesign system |
US7242218B2 (en) * | 2004-12-02 | 2007-07-10 | Altera Corporation | Techniques for combining volatile and non-volatile programmable logic on an integrated circuit |
JP2009524134A (ja) * | 2006-01-18 | 2009-06-25 | ペーアーツェーテー イクスペーペー テクノロジーズ アクチエンゲゼルシャフト | ハードウェア定義方法 |
US7873934B1 (en) * | 2007-11-23 | 2011-01-18 | Altera Corporation | Method and apparatus for implementing carry chains on field programmable gate array devices |
CN102136012A (zh) * | 2010-01-22 | 2011-07-27 | 陈曦 | SystemC系统级综合方法 |
US8364946B2 (en) * | 2010-03-22 | 2013-01-29 | Ishebabi Harold | Reconfigurable computing system and method of developing application for deployment on the same |
US8373710B1 (en) * | 2011-12-30 | 2013-02-12 | GIS Federal LLC | Method and system for improving computational concurrency using a multi-threaded GPU calculation engine |
US9479456B2 (en) * | 2012-11-02 | 2016-10-25 | Altera Corporation | Programmable logic device with integrated network-on-chip |
-
2015
- 2015-11-10 EP EP15801565.1A patent/EP3218827B1/en active Active
- 2015-11-10 CN CN201580073092.9A patent/CN107111663B/zh active Active
- 2015-11-10 WO PCT/US2015/060025 patent/WO2016077393A1/en active Application Filing
- 2015-11-10 JP JP2017525600A patent/JP6703533B2/ja active Active
- 2015-11-10 KR KR1020177015833A patent/KR102441717B1/ko active IP Right Grant
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120131288A1 (en) | 2006-06-21 | 2012-05-24 | Element Cxi, Llc | Reconfigurable Integrated Circuit Architecture With On-Chip Configuration and Reconfiguration |
US20120117301A1 (en) | 2010-11-04 | 2012-05-10 | Sonics, Inc. | Methods and apparatus for virtualization in an integrated circuit |
US20130212365A1 (en) | 2012-02-09 | 2013-08-15 | Altera Corporation | Configuring a programmable device using high-level language |
Also Published As
Publication number | Publication date |
---|---|
EP3218827B1 (en) | 2020-05-27 |
CN107111663B (zh) | 2021-01-08 |
JP2018507449A (ja) | 2018-03-15 |
CN107111663A (zh) | 2017-08-29 |
JP6703533B2 (ja) | 2020-06-03 |
WO2016077393A1 (en) | 2016-05-19 |
KR20170084206A (ko) | 2017-07-19 |
EP3218827A1 (en) | 2017-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102441717B1 (ko) | 이종 멀티프로세서 프로그램 컴파일레이션 타겟팅 프로그램가능 집적 회로 | |
US9218443B1 (en) | Heterogeneous multiprocessor program compilation targeting programmable integrated circuits | |
US9846660B2 (en) | Heterogeneous multiprocessor platform targeting programmable integrated circuits | |
TWI806550B (zh) | 處理器操作方法、相關電腦系統、及非暫時性電腦可存取儲存媒體 | |
US20210081258A1 (en) | Synthesis Path For Transforming Concurrent Programs Into Hardware Deployable on FPGA-Based Cloud Infrastructures | |
CN107347253B (zh) | 用于专用处理器的硬件指令生成单元 | |
CN114546405B (zh) | 用于使用统一中间表示来处理图形的方法和系统 | |
US9147024B1 (en) | Hardware and software cosynthesis performance estimation | |
US10289785B1 (en) | Platform architecture creation for a system-on-chip | |
Korinth et al. | The TaPaSCo open-source toolflow for the automated composition of task-based parallel reconfigurable computing systems | |
US9529946B1 (en) | Performance estimation using configurable hardware emulation | |
US8600722B1 (en) | Method and apparatus for providing program-based hardware co-simulation of a circuit design | |
Hoozemans et al. | ALMARVI execution platform: Heterogeneous video processing SoC platform on FPGA | |
US12136000B2 (en) | Programming flow for multi-processor system | |
Cong | Hardware accelerated simulation and automatic design of heterogeneous architecture | |
Bailey et al. | Codesign experiences based on a virtual platform | |
Janßen | Hardware/Software virtualization in complex embedded systems | |
Wang et al. | Don’t Repeat Yourself! Coarse-Grained Circuit Deduplication to Accelerate RTL Simulation | |
Wüthrich | OpenCL support for Enzian | |
SANJAY | ACCELERATED COMPUTING USING FPGA OVERLAYS WITH OS ABSTRACTION | |
US8495539B1 (en) | Scheduling processes in simulation of a circuit design | |
Bomfim et al. | Integration of Virtual Platform Models into a System-Level Design Framework | |
Whitham et al. | Interfacing Java to Hardware Coprocessors and FPGAs | |
Iskander | Improved abstractions and turnaround time for FPGA design validation and debug | |
Zhong et al. | Accelerating Data Analytics Kernels with Heterogeneous Computing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |