KR101519771B1 - 집적 회로 내의 프로세서 시스템의 확장 - Google Patents

집적 회로 내의 프로세서 시스템의 확장

Info

Publication number
KR101519771B1
KR101519771B1 KR1020137020304A KR20137020304A KR101519771B1 KR 101519771 B1 KR101519771 B1 KR 101519771B1 KR 1020137020304 A KR1020137020304 A KR 1020137020304A KR 20137020304 A KR20137020304 A KR 20137020304A KR 101519771 B1 KR101519771 B1 KR 101519771B1
Authority
KR
South Korea
Prior art keywords
processor system
integrated circuit
programmable
psc
circuit
Prior art date
Application number
KR1020137020304A
Other languages
English (en)
Other versions
KR20130107361A (ko
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 KR20130107361A publication Critical patent/KR20130107361A/ko
Application granted granted Critical
Publication of KR101519771B1 publication Critical patent/KR101519771B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7885Runtime interface, e.g. data exchange, runtime control
    • G06F15/7889Reconfigurable logic implemented as a co-processor
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/02Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
    • H03K19/173Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
    • H03K19/177Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components arranged in matrix form
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Logic Circuits (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)
  • Stored Programmes (AREA)
  • Advance Control (AREA)

Abstract

집적 회로(200, 300, 400)의 실시예가 기술된다. 집적 회로는 프로그램 코드(314, 415)를 실행하도록 구성된 프로세서 시스템(202, 302, 402); 및 집적 회로의 프로그래밍 가능한 회로부(204, 304, 404) 내에 구현되는 프로세스-특유의 회로(282, 320, 440, 445)를 포함하며, 상기 프로세스-특유의 회로는 프로세서 시스템에 결합되고 상기 프로세서 시스템에 의해 오프로딩되는 프로세스를 수행하도록 구성되고, 상기 프로세서 시스템은 프로세스를 수행하기 위해 프로세스 코드를 실행하는 대신 프로세스를 프로세스-특유의 회로에 오프로딩하도록 구성된다.

Description

집적 회로 내의 프로세서 시스템의 확장{EXTENDING A PROCESSOR SYSTEM WITHIN AN INTEGRATED CIRCUIT}
이 명세서 내에서 개시되는 하나 이상의 실시예들은 집적 회로들(IC들)에 관한 것이다. 보다 구체적으로, 하나 이상의 실시예들은 IC 내에서 구현되는 프로세서 시스템을 확장하는 것에 관한 것이다.
집적 회로들(IC들)은 특유의 기능들을 수행하도록 구현될 수 있다. IC의 하나의 타입은 예를 들어, 필드 프로그래밍 가능한 게이트 어레이(field programmable gate array; FPGA)와 같은 프로그래밍 가능한 IC이다. FPGA는 통상적으로 프로그래밍 가능한 타이들의 어레이를 포함한다. 이 프로그래밍 가능한 타일들은 예를 들어, 입력/출력 블록들(input/output blocks; IOB들), 구성 가능한 로직 블록들(configurable logic blocks; CLB들), 전용 랜덤 액세스 메모리 블록들(dedicated random access memory blocks; BRAM들), 승산기들, 디지털 신호 프로세싱 블록들(digital signal processing blocks; DSP들), 프로세서들, 클록 관리자들, 지연 고정 루프들(delay lock loops; DLL들) 등을 포함할 수 있다.
각각의 프로그래밍 가능한 타일은 통상적으로 프로그래밍 가능한 상호연결 회로 및 프로그래밍 가능한 로직 회로 양자를 포함한다. 프로그래밍 가능한 상호연결 회로는 통상적으로 프로그래밍 가능한 상호연결 지점들(programmable interconnect points; PIP들)에 의해 상호연결되는 가변 길이들의 매우 다수의 상호연결 라인들을 포함한다. 프로그래밍 가능한 로직 회로는 예를 들어, 기능 생성기들, 레지스터들, 산술 로직 등을 포함할 수 있는 프로그래밍 가능한 엘리먼트들을 이용하여 사용자 설계의 로직을 구현한다.
프로그래밍 가능한 상호연결 회로 및 프로그래밍 가능한 로직 회로는 통상적으로 프로그래밍 가능한 엘리먼트들이 어떻게 구성되는지를 정의하는 내부 구성 메모리 셀들 내로 구성 데이터의 스트림을 로딩함으로써 프로그래밍된다. 구성 데이터는 외부 디바이스에 의해 메모리로부터(예를 들어, 외부 PROM으로부터) 판독되거나 FPGA 내에 기록될 수 있다. 개별 메모리 셀들의 집합적 상태들은 이어서 FPGA의 기능을 결정한다.
다른 타입의 프로그래밍 가능한 IC는 복합 프로그래밍 가능한 로직 디바이스 또는 CPLD이다. CPLD는 상호연결 스위치 매트릭스에 의해 서로 그리고 입력/출력(I/O) 자원들에 연결된 2개 이상의 "기능 블록들"을 포함한다. CPLD의 각각의 기능 블록은 프로그래밍 가능한 로직 어레이들(programmable logic arrays; PLA들) 및 프로그래밍 가능한 어레이 로직(programmable array logic; PAL들) 디바이스들에서 이용되는 것들과 유사한 2-레벨 AND/OR 구조를 포함한다. CPLD들에서, 구성 데이터는 통상적으로 비-휘발성 메모리에 온칩(on-chip)으로 저장된다. 몇몇 CPLD들에서, 구성 데이터는 비-휘발성 메모리에 온-칩으로 저장되고, 이어서 초기 구성(프로그래밍) 시퀀스의 부분으로서 휘발성 메모리에 다운로딩된다.
모든 이들 프로그래밍 가능한 IC들에 대해, 디바이스의 기능은 그 목적을 위해 디바이스에 제공되는 데이터 비트들에 의해 제어된다. 데이터 비트들은 휘발성 메모리(예를 들어, FPGA들 및 몇몇 CPLD들에서와 같은 정적 메모리 셀들), 비-휘발성 메모리(예를 들어, 몇몇 CPLD들에서와 같은 FLASH 메모리) 또는 임의의 다른 타입의 메모리 셀에 저장될 수 있다.
다른 프로그래밍 가능한 IC들은 디바이스 상에서 다양한 엘리먼트들을 프로그래밍 가능하게 상호연결하는 금속 층과 같은 프로세싱 층을 적용함으로써 프로그래밍된다. 이들 프로그래밍 가능한 IC들은 마스크 프로그래밍 가능한 디바이스들로서 알려진다. 프로그래밍 가능한 IC들은 또한 다른 방식들로, 예를 들어, 퓨즈(fuse) 또는 안티퓨즈 기술을 이용하여 구현될 수 있다. 구문 "프로그래밍 가능한 IC"는 이들 디바이스들을 포함(그러나 이들로 제한되지 않음)할 수 있고 추가로 예를 들어, 주문형 집적 회로(application specific integrated circuits; ASIC들)를 포함해서 부분적으로만 프로그래밍 가능한 디바이스들을 포괄할 수 있다. 예를 들어, 다른 타입의 프로그래밍 가능한 IC는 하드-코딩된 트랜지스터 로직 및 하드-코딩된 트랜지스터 로직을 프로그래밍 가능하게 상호연결하는 프로그래밍 가능한 스위치 패브릭(programmable switch fabric)의 조합을 포함한다.
위에서 논의된 다양한 IC들 중 일부를 포함하는 몇몇 현대의 IC들은 프로그램 코드를 실행할 수 있는 임배딩된 프로세서를 포함한다. 프로세서는 프로그래밍 가능한 로직 회로 및 프로그래밍 가능한 상호연결 회로를 포함하는 동일한 다이의 부분으로서 제조될 수 있으며, 이는 또한 집합적으로 IC의 "프로그래밍 가능한 패브릭(programmable fabric)"으로서 지칭된다. 프로세서 내의 프로그램 코드의 실행은 IC 상에서 이용 가능할 수 있는 프로그래밍 가능한 패브릭을 "프로그래밍" 또는 "구성"하는 것과 구분된다는 것이 인지되어야 한다. IC의 프로그래밍 가능한 패브릭을 프로그래밍 또는 구성하는 동작은 프로그래밍 가능한 패브릭 내의 구성 데이터에 의해 특정된 바와 같이 상이한 물리적 회로를 구현하게 한다.
본 명세서 내에서 개시되는 하나 이상의 실시예들은 집적 회로(IC)들에 관한 것으로서, 보다 구체적으로는 IC 내에서 구현되는 프로세서 시스템을 확장하는 것에 관한 것이다.
집적 회로의 실시예는 프로그램 코드를 실행하도록 구성된 프로세서 시스템; 및 상기 집적 회로의 프로그래밍 가능한 회로 내에 구현되는 프로세스-특유의 회로(process-specific circuit)를 포함하고, 상기 프로세스-특유의 회로는 상기 프로세서 시스템에 결합될 수 있고 상기 프로세서 시스템에 의해 오프로딩(offloading)되는 프로세스를 수행하도록 구성될 수 있고, 상기 프로세서 시스템은 상기 프로세스를 수행하기 위해 프로그램 코드를 실행하는 대신 상기 프로세스를 상기 프로세스-특유의 회로에 오프로딩하도록 구성될 수 있다.
이 실시예의 일 양상에서, 상기 프로세서 시스템은 상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 전력 소비의 감소에 따라 상기 프로세스를 상기 프로세스-특유의 회로에 오프로딩할지 여부를 결정하도록 추가로 구성될 수 있다.
이 실시예의 다른 양상에서, 상기 프로세서 시스템은 상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 완료 시간의 개선에 따라 상기 프로세스를 상기 프로세스-특유의 회로에 오프로딩할지 여부를 결정하도록 추가로 구성될 수 있다.
이 실시예의 또 다른 양상에서 상기 프로세서 시스템은 상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 레이턴시의 감소에 따라 상기 프로세스를 상기 프로세스-특유의 회로에 오프로딩할지 여부를 결정하도록 추가로 구성될 수 있다.
이 실시예의 다른 양상에서, 상기 프로그래밍 가능한 회로는 프로그래밍 가능한 패브릭(programmable fabric)일 수 있고, 상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 완료 시간의 개선은 상기 프로세스-특유의 회로를 구현하기 위해 상기 프로그래밍 가능한 패브릭의 적어도 일부분을 동적으로 재구성하는데 필요한 시간의 측정(measure)을 더 포함한다.
이 실시예의 또 다른 양상에서, 상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 완료 시간의 개선은 복수의 메모리들 중 어느 메모리가 상기 프로세스를 위해 필요한 소스 데이터를 상기 프로세스-특유의 회로에 제공하기 위해 이용될 수 있는지에 의존한다.
이 실시예의 다른 양상에서, 상기 프로세서 시스템은 상기 프로세스-특유의 회로를 구현하기 위해 상기 프로그래밍 가능한 패브릭 내에 이용 가능한 공간의 양이 존재하는지 여부를 결정하도록 추가로 구성될 수 있다.
이 실시예의 또 다른 양상에서, 상기 프로그래밍 가능한 회로는 프로그래밍 가능한 패브릭일 수 있고, 상기 프로세서 시스템은 상기 프로세스-특유의 회로를 구현하기 위해 상기 프로그래밍 가능한 패브릭의 적어도 일부분의 동적 재구성을 개시하도록 추가로 구성될 수 있다.
집적 회로 내에서 프로세서 시스템을 확장하는 방법의 실시예는 상기 집적 회로 내에서 구현되는 프로세서 시스템 내에서 프로그램 코드를 실행하는 단계 ― 상기 집적 회로는 프로그래밍 가능한 회로를 포함할 수 있고, 상기 프로세서 시스템은 상기 프로그래밍 가능한 회로에 결합될 수 있음 ― ; 상기 프로세서 시스템 상에서 프로세스를 수행하기 위해 프로그램 코드를 실행하는 대신 상기 프로그래밍 가능한 회로 내에 구현되는 프로세스-특유의 회로를 이용하여 상기 프로세스를 수행하는 단계; 및 상기 프로세스-특유의 회로로부터의 상기 프로세스의 결과를 상기 프로세서 시스템에 대해 이용 가능하게 하는 단계를 포함할 수 있다.
이 실시예의 일 양상에서, 이 방법은 상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 전력 이용의 감소에 따라 상기 프로세스-특유의 회로를 이용하여 상기 프로세스를 수행할지 여부를 결정하는 단계를 더 포함할 수 있다.
이 실시예의 다른 양상에서, 이 방법은 상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 레이턴시의 감소에 따라 상기 프로세스-특유의 회로를 이용하여 상기 프로세스를 수행할지 여부를 결정하는 단계를 더 포함할 수 있다.
이 실시예의 또 다른 양상에서, 이 방법은 상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 완료 시간의 감소에 따라 상기 프로세스-특유의 회로를 이용하여 상기 프로세스를 수행할지 여부를 결정하는 단계를 더 포함할 수 있다.
이 실시예의 다른 양상에서, 상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 완료 시간의 감소는, 상기 프로세스-특유의 회로를 구현하기 위해 상기 프로그래밍 가능한 패브릭의 적어도 일부분을 동적으로 재구성하는데 필요한 시간의 측정(measure)을 더 포함할 수 있다.
이 실시예의 또 다른 양상에서, 상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 완료 시간의 개선은, 복수의 메모리들 중 어느 메모리가 상기 프로세스-특유의 회로에 의해 상기 프로세스를 수행하는데 필요한 소스 데이터를 제공하기 위해 이용되는지에 의존할 수 있다.
이 실시예의 다른 양상에서, 이 방법은 프로세스-특유의 회로의 구현을 위해 프로그래밍 가능한 패브릭 내에 충분한 양의 이용 가능한 공간이 존재하는지 여부를 결정하는 단계를 더 포함할 수 있다.
이 실시예의 또 다른 양상에서, 이 방법은 프로세스-특유의 회로를 구현하기 위해 프로그래밍 가능한 패브릭의 적어도 일부분의 동적 재구성하는 단계를 더 포함할 수 있다.
이 실시예의 다른 양상에서, 이 방법은 상기 프로그램 코드에 의해 특정된 복수의 프로세스들로부터 프로세스를 선택하는 단계; 선택된 프로세스를 하드웨어에서 구현하는 프로세스-특유의 회로를 특정하는 구성 데이터를 선택하는 단계; 및 상기 집적 회로의 프로그래밍 가능한 회로 내에 상기 프로세스-특유의 회로를 구현하기 위해 선택된 구성 데이터를 로딩하는 단계를 더 포함할 수 있다.
집적 회로 내에서 프로세서 시스템을 확장하는 방법의 다른 실시예는 프로세서 시스템 내에서 프로그램 코드를 실행하는 단계 ― 상기 프로그램 코드는 복수의 프로세스들을 특정함 ― ; 상기 프로그램 코드에 의해 특정된 복수의 프로세스들로부터 프로세스를 선택하는 단계; 선택된 프로세스를 하드웨어에서 구현하는 프로세스-특유의 회로를 특정하는 구성 데이터를 선택하는 단계; 집적 회로의 프로그래밍 가능한 패브릭 내에서 프로세스-특유의 회로를 구현하도록 선택된 구성 데이터를 로딩하는 단계; 및 상기 프로세서 시스템 대신 상기 프로세스-특유의 회로를 이용하여 선택된 프로세스를 수행하는 단계를 포함할 수 있다.
이 실시예의 일 양상에서, 이 방법은 상기 프로세서 시스템은 프로세스-특유의 회로에 의해 액세스 가능한 프로세서 시스템 내의 메모리에 프로세스 기술자(process descriptor)를 저장하는 단계를 더 포함할 있고, 상기 프로세스 기술자는 선택된 프로세스에 대한 소스 코드를 특정한다.
이 실시예의 다른 양상에서, 이 방법은 프로세스-특유의 회로가 프로세서 시스템 내의 메모리로부터 프로세스 기술자를 액세스함으로써 상기 소스 코드 결정하는 단계를 더 포함할 수 있다.
이 실시예의 또 다른 양상에서, 이 방법은 프로세스-특유의 회로가 선택된 프로세스의 결과를 프로세서 시스템에 제공하는 단계를 더 포함할 수 있다.
도 1은 본 명세서 내에서 개시되는 실시예들에 따라 집적 회로(IC)의 아키텍처를 예시하는 제 1 블록도.
도 2는 본 명세서 내에서 개시되는 다른 실시예에 따라 IC를 예시하는 제 2 블록도.
도 3은 본 명세서 내에서 개시되는 다른 실시예에 따라 프로세서 시스템을 확장하도록 구성된 IC를 예시하는 제 3 블록도.
도 4는 본 명세서 내에서 개시되는 다른 실시예에 따라 프로세서 시스템을 확장하도록 구성된 IC를 예시하는 제 4 블록도.
도 5는 본 명세서 내에서 개시되는 다른 실시예에 따라 IC 내에서 프로세서 시스템을 확장하는 방법을 예시하는 제 1 흐름도.
도 6은 본 명세서 내에서 개시되는 다른 실시예에 따라 IC의 프로그래밍 가능한 패브릭 내에서 구현되는 회로에 프로세스를 오프로딩하는 방법을 예시하는 제 2 흐름도.
도 7은 본 명세서 내에서 개시되는 다른 실시예에 따라 IC의 프로그래밍 가능한 패브릭 내에서 구현되는 회로에 프로세스를 오프로딩하는 방법을 예시하는 제 3 흐름도.
도 8은 본 명세서 내에서 개시되는 다른 실시예에 따라 IC의 프로그래밍 가능한 패브릭 내에서 구현되는 회로에 프로세스를 오프로딩하는 방법을 예시하는 제 4 흐름도.
명세서는 신규한 것으로서 간주되는 하나 이상의 실시예들의 특징들을 정의하는 청구항들로 완결되지만, 하나 이상의 실시예들은 도면들과 함께 설명을 고려하여 더 잘 이해될 것이라 여겨진다. 요구되는 바와 같이, 하나 이상의 상세한 실시예들은 본 명세서 내에서 개시된다. 그러나 하나 이상의 실시예들은 단지 예시적이라는 것이 인지되어야 한다. 그러므로 본 명세서 내에서 개시되는 특유의 구조적 및 기능적 상세들은 제한하는 것으로서 해석되는 것이 아니라, 단지 청구항들에 대한 토대로서, 그리고 사실상 임의의 적절히 상세된 구조에서 하나 이상의 실시예들을 다양하게 이용하도록 당업자를 가르치기 위한 대표적인 토대로서 해석된다. 또한, 여기서 이용되는 용어들 및 구문들은 제한하는 것으로서 의도되는 것이 아니라, 오히려 여기서 개시된 하나 이상의 실시예들의 이해 가능한 설명을 제공하기 위한 것이다.
본 명세서 내에서 개시되는 하나 이상의 실시예들은 집적 회로들(IC들)에 관한 것으로, 보다 구체적으로는 IC 내에서 구현되는 프로세서 시스템을 확장하는 것에 관한 것이다. IC는 프로그래밍 가능한 패브릭 부분에 결합되는 프로세서 시스템을 포함하도록 구현된다. 프로세서 시스템의 기능은 예를 들어, 보완적인 방식으로 프로세서 시스템과 함께 동작하도록 프로그래밍 가능한 패브릭의 성능들을 레버리지(leveraging)함으로써 확장될 수 있다. 예를 들어, 프로그램 코드의 실행을 통해 프로세서 시스템에 의해 수행되거나 수행될 수 있는 하나 이상의 프로세스들이 프로그래밍 가능한 패브릭 내에서 구현되는 회로, 예를 들어, 하드웨어에 오프로드(offload)될 수 있다. 몇몇 경우들에서, 회로 내에서 소프트웨어 프로세스를 구현하는 것은 프로세서 시스템 내에서 프로그램 코드의 실행을 통해 프로세스를 구현하는 것보다 완성하는데 더 적은 시간을 요구하고, 더 적은 레이턴시를 갖고 및/또는 더 적은 에너지를 이용한다.
이에 따라, 하나 이상의 프로세스들이 선택되고 프로그래밍 가능한 패브릭 내에서 구현되는 회로에 오프로딩될 수 있다. 회로는 특히 오프로딩된 프로세스를 구현하도록 설계된다. 예를 들어, 프로세서 시스템에 의해 실행되는 프로그램 코드에서 특정되는 특정한 알고리즘들 또는 프로시저들은 프로그래밍 가능한 패브릭 내에서 하드웨어로 구현될 수 있다. 프로세서 시스템은 프로세스를 수행하도록 회로에, 예를 들어, 프로세스-특유의 회로(process-specific circuit)에 지시할 수 있다. 따라서 프로세스는 프로세서 시스템 내의 프로그램 코드의 실행을 통해서 보단 오히려 프로그래밍 가능한 패브릭 내의 프로세스-특유의 회로에 의해 수행된다.
오프로딩될 프로세스의 선택 및 프로세스를 오프로딩할 시기에 관한 결정은 다양한 상이한 기법들을 이용하여 프로세서 시스템에 의해 수행될 수 있다. 일 양상에서, 이러한 결정은 미리 결정될 수 있다. 예를 들어, 오프로딩될 이 프로세스들을 특정하는 프로세서 시스템에 의해 실행되는 프로그램 코드 내에 표시자들이 배치될 수 있다. 다른 양상에서, 프로세서 시스템은 프로세스 선택 및 선택된 프로세스들이 프로그래밍 가능한 패브릭에 오프로딩될 시기에 관한 보다 동적이고 지능적인 판단들을 내릴 수 있다.
도 1은 본 명세서 내에서 개시되는 실시예에 따라 IC에 대한 아키텍처(100)를 예시하는 제 1 블록도이다. 아키텍처(100)는 예를 들어, 필드 프로그래밍 가능한 게이트 어레이(FPGA) 타입의 IC 내에서 구현될 수 있다. 도시되는 바와 같이, 아키텍처(100)는 몇 개의 상이한 타입들의 프로그래밍 가능한 회로, 예를 들어, 로직, 블록들을 포함한다. 예를 들어, 아키텍처(100)는 다중-기가비트 트랜시버들(multi-gigabit transceivers; MGT들)(101), 구성 가능한 로직 블록들(configurable logic blocks; CLB들)(102), 랜덤 액세스 메모리 블록들(random access memory blocks; BRAM들)(103), 입력/출력 블록들(input/output blocks; lOB들)(104), 구성 및 클로킹 로직(configuration and clocking logic; CONFIG/CLOCKS)(105), 디지털 신호 프로세싱 블록들(digital signal processing blocks; DSP들)(106), 특수한 입력/출력 블록들(I/O)(107)(예를 들어, 구성 포트들 및 클록 포트들), 디지털 클록 관리자들, 아날로그-디지털 변환기들, 시스템 모니터링 로직 등과 같은 다른 프로그래밍 가능한 로직(108)을 포함하는 매우 다수의 상이한 프로그래밍 가능한 타일들을 포함할 수 있다.
몇몇 프로그래밍 가능한 IC에서, 각각의 프로그래밍 가능한 타일은 각각의 인접 타일 내의 대응하는 프로그래밍 가능한 상호연결 엘리먼트(interconnect element; INT)(111)로의 및 이 대응하는 INT(111)로부터의 표준화된 연결들을 갖는 INT(111)를 포함한다. 그러므로 함께 도시된 INT들(111)은 예시되는 IC에 대한 프로그래밍 가능한 상호연결 구조를 구현한다. 각각의 INT(111)는 또한 도 1의 상부에 포함되는 예들에 의해 도시되는 바와 같이 동일한 타일 내의 프로그래밍 가능한 로직 엘리먼트로, 및 이 프로그래밍 가능한 로직 엘리먼트로부터의 연결들을 포함한다.
예를 들어, CLB(102)는 사용자 로직 + 단일의 INT(111)를 구현하도록 프로그래밍될 수 있는 구성 가능한 로직 엘리먼트(CLE)(112)를 포함할 수 있다. BRAM(103)은 하나 이상의 INT들(111) 외에 BRAM 로직 엘리먼트(BRL)(113)를 포함할 수 있다. 통상적으로, 타일에 포함되는 INT(111)들의 수는 타일의 높이에 의존한다. 그려진 실시예에서, BRAM 타일은 5개의 CLB들와 동일한 높이를 갖지만, 다른 수(예를 들어, 4)가 또한 이용될 수 있다. DSP 타일(106)은 적절한 수의 INT들(111) 외에, DSP 로직 엘리먼트(DSP logic element; DSPL)(114)를 포함할 수 있다. IOB(104)는 예를 들어, INT(111)의 하나의 인스턴스 외에 입력/출력 로직 엘리먼트(input/output logic element; IOL)(115)의 2개의 인스턴스들을 포함할 수 있다. 당업자들에게 자명할 바와 같이, 예를 들어, IOL(115)에 연결된 실제 I/O 패드들은 통상적으로 IOL(115)의 영역으로 제한되지 않는다.
도 1에서 그려진 예에서, 다이 중앙 근처의 두리기둥(columnar) 영역(도 1에서 음영지게 도시됨)은 구성, 클록 및 다른 제어 로직을 위해 이용된다. 이 컬럼으로부터 연장하는 수평 영역들(109)은 프로그래밍 가능한 IC의 폭에 걸쳐서 클록들 및 구성 신호들을 분배하는데 이용된다.
도 1에서 예시된 아키텍처를 활용하는 몇몇 프로그래밍 가능한 IC들은 프로그래밍 가능한 IC의 큰 부분을 구성하는 정규의 두리기둥 구조를 붕괴시키는 부가적인 로직 블록들을 포함한다. 부가적인 로직 블록들은 프로그래밍 가능한 블록들 및/또는 전용 회로일 수 있다. 예를 들어, PROC(110)로서 도시되는 프로세서 블록은 CLB들 및 BRAM들의 몇 개의 컬럼들에 걸쳐 있다.
PROC(110)는 IC의 프로그래밍 가능한 패브릭을 구현하는 다이의 부분으로서 제조되는 하드-와이어 프로세서(hard-wired processor)로서 구현될 수 있다. PROC(110)는 복잡도 면에서 개별 프로세서, 예를 들어, 프로그램 코드를 실행할 수 있는 단일의 코어 내지 하나 이상의 코어들, 모듈들, 보조-프로세서들, 인터페이스들 등을 갖는 전체 프로세서 시스템의 범위에 이르는 다양한 상이한 프로세서 타입들 및/또는 시스템들 중 임의의 것을 표현할 수 있다.
하나 이상의 복합 배열에서, 예를 들어, PROC(110)는 하나 이상의 코어들, 예를 들어, 중앙 처리 장치들, 캐시 메모리들, 메모리 제어기, 프로그래밍 가능한 IC의 I/O 핀들에 직접 결합하도록 및/또는 프로그래밍 가능한 IC의 프로그래밍 가능한 패브릭에 결합하도록 구성 가능한 단방향성 및/또는 양방행성 인터페이스들을 포함할 수 있다. 구문 "프로그래밍 가능한 패브릭"은 IC 내의 프로그래밍 가능한 회로, 예를 들어, 여기서 기술된 다양한 프로그래밍 가능한 또는 구성 가능한 회로 블록들 또는 타일들은 물론 IC 내로 로딩되는 구성 데이터에 따라 다양한 회로 블록들, 타일들 및/또는 엘리먼트들을 선택적으로 결합하는 상호연결 회로를 지칭할 수 있다.
PROC(110) 내에서 이용 가능한 다양한 인터페이스들을 이용하여, PROC(110)에 의해 실행되는 프로그램 코드에 의해 정의된 프로세스들이 프로그래밍 가능한 패브릭 내에서 구현되는 회로에 오프로딩될 수 있다. 기술되는 바와 같은 아키텍처를 갖는 IC 내로 로딩된 구성 데이터는 예를 들어, 프로그래밍 가능한 패브릭 내의 하나 이상의 프로세스-특유의 회로들(process-specific circuits; PSC들)을 구현할 수 있다. PROC(110)는 하드웨어 구현들, 즉 PSC 또는 PSC들을 특정하는 구성 데이터와 연관되는 하나 이상의 프로세스들을 선택하고 프로그래밍 가능한 패브릭 내의 구현을 위해 프로세스를 오프로딩할 수 있다.
도 1은 프로그래밍 가능한 IC를 구현하는데 이용될 수 있는 예시적인 아키텍처를 단지 예시하도록 의도된다. 예를 들어, 컬럼(column)에서 로직 블록들의 수, 컬럼들의 상대적 폭, 컬럼들의 수 및 순서, 컬럼들에 포함된 로직 블록들의 타입들, 로직 블록들의 상대적 크기 및 도 1의 상부에 포함된 상호연결/로직 구현들은 순전히 예시적이다. 실제의 프로그래밍 가능한 IC에서, 예를 들어, CLB들의 2개 이상의 인접한 컬럼은 통상적으로 사용자 회로 설계의 효율적인 구현을 용이하게 하기 위해 CLB들이 나타날 때마다 포함된다. 그러나 인접한 CLB 컬럼들의 수는 프로그래밍 가능한 IC의 전체 크기에 따라 변할 수 있다.
도 2는 이 명세서 내에 개시되는 다른 실시예들에 따라 구성된 IC(200)를 예시하는 제 2 블록도이다. IC(200)는 예를 들어, 프로그래밍 가능한 패브릭(204)과 같은 프로그래밍 가능한 회로에 결합되는 프로세서 시스템(processor system; PS)(202)을 포함하는 다양한 상이한 아키텍처들 중 임의의 것을 이용하여 구현될 수 있다. 예를 들어, IC(200)는 도 1의 아키텍처(100)의 것과 동일하거나 유사한 아키텍처를 이용하여 구현될 수 있지만, 이것이 반드시 그 경우일 필요는 없다. 일반적으로 IC(200)는 PS(202)로부터 하드웨어로의 소프트웨어-기반 프로세스의 오프로드를 용이하게 하기 위해 프로그래밍 가능한 패브릭(204) 내에서 구현되는 회로에 PS(202)를 결합하는데 이용될 수 있는 다양한 인터페이스들을 보다 상세히 예시한다.
도 2에서 도시된 예에서, PS(202)는 IC(200)의 다이의 대략적으로 2/3을 점유하는 것으로서 예시되는 반면에, 프로그래밍 가능한 패브릭(204)은 동일한 다이의 대략 1/3을 점유하는 것으로서 도시된다. 그러나 도 2는 IC(200)의 축적에 맞는 표현(scale representation)인 것으로 의도되는 것은 아니다. 오히려 도 2는 예시의 목적을 위해 제공되며, 본 명세서 내에서 개시되는 하나 이상의 실시예들의 제한으로서 의도되지 않는다.
일반적으로, PS(202)는 IC(200) 내의 하드-와이어 시스템으로서 구현된다. PS(202) 내의 다양한 컴포넌트들 또는 모듈들이 화살표들을 갖는 라인들, 예를 들어, 신호 또는 통신 링크들에 의해 결합되면, 이러한 화살표들은 제어의 흐름 또는 방향을 예시하도록 의도된다. 이것에 관하여, 방향성 화살표를 갖는 라인으로서 예시되는 신호는 일반적으로 신호를 통한 제어가 타겟 컴포넌트 보다는 오히려 화살표가 나오는 소스 컴포넌트에 의해 행사된다는 것을 표시한다. 화살표들은 일반적으로 신호의 방향성 또는 데이터의 단-방향 흐름을 표시하도록 의도되지 않는다. 이것에 관하여, 신호들은 방향성 화살표의 존재에도 불구하고 양-방향 신호들 또는 통신 링크들로서 구현될 수 있다.
본 명세서 내에서, 동일한 참조 문자들은 단자들, 신호 라인들, 배선들 및 그들의 대응하는 신호들을 지칭하는데 이용된다. 이것에 관하여, 용어들 "신호", "배선", "연결", "단자" 및 "핀"은 본 명세서 내에서, 이따금 상호 교환 가능하게 이용될 수 있다. 용어들 "신호", "배선" 등은 또한 하나 이상의 신호들, 예를 들어, 단일의 배선을 통한 단일 비트의 전달 또는 다수의 병렬 배선들을 통한 다수의 병렬 비트들의 전달을 표현할 수 있다는 것이 인지되어야 한다. 또한, 언급된 바와 같이 각각의 배선 또는 신호는 경우에 따라서 그 신호 또는 배선에 의해 연결되는 2개 이상의 컴포넌트들 간의 양-방향성 통신을 표현할 수 있다.
도시된 바와 같이, PS(202)는 코어 컴플렉스(core complex)(206)를 포함할 수 있다. 코어 컴플렉스(206)는 코어들(208 및 210), DSP 유닛들(212 및 214), 인터럽트 요청 유닛(interrupt request unit; IRQ)(216), 및 스눕 제어 유닛(snoop control unit; SCU)(218)을 포함할 수 있다. 코어들(208 및 210) 각각은 거기에 임배딩된 레벨 1(L1) 캐시(도시되지 않음)를 포함할 수 있다. 다양한 상이한 타입들의 프로세서 코어들 및/또는 DSP 유닛들 중 임의의 것이 이용될 수 있지만, 여기서 개시된 실시예에서, 코어들(208 및 210) 각각은 각각이 32KB 명령 캐시 및 32 KB 데이터 캐시를 갖는 ARM Cortex™-A9 타입의 프로세서 코어로서 구현될 수 있다. DSP 유닛들(212 및 214)은 NEON™ 미디어 및/또는 부동점 프로세싱 엔진(floating point processing engine)들의 형태로 구현될 수 있다. 각각의 DSP 유닛(212 및 214)은 128-비트 벡터-기반 DSP 기능들을 제공할 수 있다. ARM Cortex™-A9 프로세서 코어들 및 NEON™ 미디어 및/또는 부동점 프로세싱 엔진들은 영국의 캠브리지 소재의 ARM Holdings로부터 입수 가능하다(ARM).
PS(202) 내에서 코어 컴플렉스(206)는 레벨 2(L2) 캐시(220) 및 온-칩 메모리(OCM)(222)에 결합된다. L2 캐시(220)는 256 KB 메모리로서 구현될 수 있다. OCM(222)은 또한 256 KB 메모리로서 구현될 수 있다. 코어들(208 및 210) 및 DSP 유닛들(212 및 214)은 L2 캐시(220) 및 OCM(222)에 직접 액세스할 수 있다. 일반적으로, OCM(222)은 PS(202) 및 프로그래밍 가능한 패브릭(204) 예를 들어, 프로그래밍 가능한 패브릭(204) 내에서 구현되는 회로들에 대해 이용 가능한 로컬 메모리를 제공한다. 비교해 보면, 또한 메모리인 L2 캐시(220)는 PS(202)에 대한 캐시로서 기능한다. 이에 따라, L2 캐시(220)는 데이터의 작은 블록들 또는 부분들, 예를 들어, 256비트들을 저장할 수 있으며, 이는 RAM 예를 들어, 실행 메모리 오프-칩(execution memory off-chip)에 저장되는 데이터 비트들의 유효한 사본들이다. 예를 들어, 판독 요청이 L2 캐시(220)에 저장된 데이터에 대해 발행되는 경우, 데이터는 RAM으로부터 검색되는 것과 대조적으로 L2 캐시(220)로부터 판독된다.
PS(202)는 추가로 리셋 유닛(224), 클록 유닛(226), 및 메모리 제어기(228)를 포함할 수 있다. 리셋 유닛(224)은 IC(200) 외부의 소스로부터 발생하는 하나 이상의 신호들, 예를 들어, 신호(230)를 수신할 수 있다. 신호(230)는 PS(202) 및/또는 PS(202) 내의 컴포넌트들 중 하나 이상 또는 모두 다를 리셋하도록 리셋 유닛(224)에 지시할 수 있다. 클록 유닛(226)은 또한 IC(200) 외부의 소스로부터 하나 이상의 기준 신호들, 예를 들어, 신호(232)를 수신할 수 있다. 클록 유닛(226)은 예를 들어, 수신된 신호(232)에 동기화할 수 있는 위상 고정 루프 회로를 포함하거나 또는 이 위상 고정 루프 회로로서 구현될 수 있다. 클록 유닛(226)은 PS(202) 전체에 걸쳐서 분배될 수 있는 하나 이상의 상이한 주파수들의 하나 이상의 클록 신호들(도시되지 않음)을 생성할 수 있다. 또한, 클록 유닛(226)은 그 내부에 구현되는 회로들에 의한 이용을 위해 프로그래밍 가능한 패브릭(204)에 분배될 수 있는 하나 이상의 상이한 주파수들의 하나 이상의 클록 신호들을 생성할 수 있다.
메모리 제어기(228)는 IC(200) 외부에 위치된 하나 이상의 상이한 타입들의 RAM들, 예를 들어, "오프-칩"과 통신하도록 구현될 수 있다. 예를 들어, 메모리 제어기(228)는 16-비트, 32-비트, ECC를 갖는 16-비트 등이든지 간에 하여간, 듀얼 데이터 레이트(Dual Data Rate ; DDR) 2, DDR 3, 저 전력(LP) DDR2 타입들의 메모리를 포함(그러나 이들로 제한되지 않음)하는 다양한 타입들의 메모리에 액세스, 예를 들어, 판독 및/또는 기록하도록 구현될 수 있다. 메모리 제어기(228)가 통신할 수 있는 상이한 메모리 타입들의 리스트가 단지 예시 목적을 위해 제공되며 제한으로서 또는 총망라하는 것으로서 의도되지 않는다.
PS(202)는 또한 코어 스위치(236) 및 프로그래밍 가능한 패브릭(204)에 결합되는 직접 메모리 액세스(direct memory access; DMA) 인터페이스(234)를 포함할 수 있다. PS(202)는 추가로 본 명세서에서 더 상세히 기술되는 인터페이스들(256) 중 하나, 즉 인터페이스(256D), OCM(222) 및 메모리 제어기(228)에 결합하는 메모리 스위치(238)를 포함한다.
코어 스위치(236)는 도시된 바와 같이, PS(202)의 다양한 컴포넌트들 사이에서 신호들을 라우팅할 수 있다. 일 실시예에서, 코어 스위치(236)는 PS(202)의 내부 버스(도시되지 않음)에 직접 결합될 수 있다. 이러한 실시예에서, 코어 스위치(236)에 연결되는 PS(202) 내의 각각의 다른 컴포넌트는 내부 버스를 통해 코어 스위치(236)에 결합될 수 있다. 예를 들어, 인터페이스들(240, 242, 246 및 248) 각각은 내부 버스를 통해 코어 스위치(236)에 결합할 수 있다. 내부 버스는 예를 들어, 진보된 주변기기 버스(Advanced Peripheral Bus; APB)와 같은 다양한 상이한 버스들 중 임의의 것으로서 구현될 수 있다.
일반적으로, PS(202)는 I/O의 대략 4개의 카테고리들을 포함할 수 있다. PS(202)는 플래시 메모리 타입 인터페이스들, 더 높은 성능 인터페이스들, 더 낮은 성능 인터페이스들, 및 디버깅 인터페이스들을 제공할 수 있다. I/O의 제 1 카테고리에 관하여, PS(202)는 240A 및 240B로서 예시되는 하나 이상의 플래시 메모리 인터페이스들(240)을 포함할 수 있다. 예를 들어, 플래시 메모리 인터페이스들(240) 중 하나 이상은 4-비트 통신을 위해 구성된 쿼드-직렬 주변기기 인터페이스(Quad-Serial Peripheral Interface; QSPI)로서 구현될 수 있다. 플래시 메모리 인터페이스들(240) 중 하나 이상은 병렬 8-비트 NOR/SRAM 타입 인터페이스로서 구현될 수 있다. 플래시 메모리 인터페이스들(240) 중 하나 이상은 8-비트 및/또는 16-비트 통신을 위해 구성된 NAND 인터페이스로서 구현될 수 있다. 기술된 특정한 인터페이스들은 제한이 아닌 예시 목적들을 위해 제공된다는 것이 인지되어야 한다. 상이한 비트 폭들을 갖는 다른 인터페이스들이 이용될 수 있다.
I/O의 제 2 카테고리에 관하여, PS(202)는 I/O의 제 1 카테고리보다 더 높은 레벨의 성능을 제공하는 하나 이상의 인터페이스들(242)을 포함할 수 있다. 각각의 인터페이스들(242A 내지 242C)은 각각 DMA 제어기(244A 내지 244C)에 결합될 수 있다. 예를 들어, 인터페이스들(242) 중 하나 이상은 범용 직렬 버스(universal serial bus; USB) 타입의 인터페이스로서 구현될 수 있다. 인터페이스들(242) 중 하나 이상은 기가비트 이더넷 타입의 인터페이스로서 구현될 수 있다. 하나 이상의 인터페이스들(242)은 시큐어 디지털(Secure Digital; SD) 타입의 인터페이스로서 구현될 수 있다.
I/O의 제 3 카테고리에 관하여, PS(202)는 I/O의 제 2 카테고리보다 낮은 레벨의 성능을 제공하는 인터페이스들(246A 내지 246D)과 같은 하나 이상의 인터페이스들(246)을 포함할 수 있다. 예를 들어, 인터페이스들(246) 중 하나 이상은 범용 I/O(General Purpose I/O; GPIO) 타입의 인터페이스로서 구현될 수 있다. 인터페이스들(246) 중 하나 이상은 범용 동기식 수신기/전송기(Universal Asynchronous Receiver/Transmitter; UART) 타입의 인터페이스로서 구현될 수 있다. 인터페이스들(246) 중 하나 이상은 직렬 주변기기 인터페이스(Serial Peripheral Interface; SPI) 버스 타입 인터페이스의 형태로 구현될 수 있다. 인터페이스들(246) 중 하나 이상은 제어기-영역 네트워크(Controller-Area-Network ;CAN) 타입의 인터페이스의 형태로 구현될 수 있다. 인터페이스들(246) 중 하나 이상은 트리플 타이머 카운터(Triple Timer Counter; TTC) 및/또는 와치독 타이머(Watchdog Timer; WDT) 타입의 인터페이스의 형태로 구현될 수 있다.
I/O의 제 4 카테고리에 관하여, PS(202)는 프로세서 JTAG(processor JTAG; PJTAG) 포트 또는 인터페이스(248A) 및 트래이스 인터페이스(248B)와 같은 하나 이상의 디버그 인터페이스들(248)을 포함할 수 있다. PJTAG 포트(248A)는 PS(202)에 대한 외부 디버그 인터페이스를 제공할 수 있다. 트래이스 인터페이스(248B)는 프로그래밍 가능한 패브릭(204)으로부터 디버그, 예를 들어, 트래이스 정보를 수신하기 위한 포트, PS(202)의 디버깅 데이터를 프로그래밍 가능한 패브릭(204)에 송신하기 위한 포트 및 크로스 트리거 포트(cross trigger port)를 제공할 수 있다. 크로스 트리거 포트는 프로그래밍 가능한 패브릭(204) 내의 회로가 PS(202) 내의 트래이스와 같은 디버그 기능들을 트리거하도록 허용한다. 유사하게, PS(202)는 프로그래밍 가능한 패브릭(204) 내에서 구현되는 회로들 내의 디버그 기능들을 시작할 수 있다.
도시되는 바와 같이, 인터페이스들(240, 242, 246, 및 248) 각각은 멀티플렉서(250)에 결합될 수 있다. 멀티플렉서(250)는 IC(200)의 외부 핀들, 예를 들어, IC(200)가 배치되는 패키지의 볼들에 직접 라우팅되거나 결합될 수 있는 복수의 출력들을 제공한다. 예를 들어, IC(200)의 복수의 I/O 핀들, 예를 들어, 53개의 핀들은 인터페이스들(240, 242, 246 및 248) 사이에서 공유될 수 있다. 사용자는 인터페이스들(240 내지 248) 중에서 이용되고 이에 따라 멀티플렉서(250)를 통해 IC(200)의 I/O 핀들에 결합될 것을 선택하기 위해 PS(202)의 부분으로서 멀티플렉서(250)를 구성할 수 있다.
도시되는 바와 같이, 인터페이스들(242 내지 248)은 또한 패브릭 멀티플렉서 입력/출력(fabric multiplexer input/output; FMIO) 인터페이스(252)에 선택적으로 결합될 수 있다. 이에 따라, IC(200), 보다 구체적으로 PS(202)의 사용자 구성에 기초하여, I/O 카테고리들 중 임의의 하나, 둘, 셋 또는 넷, 즉 인터페이스들(242 내지 248)은 FMIO 인터페이스(252)를 통해 IC(200)의 프로그래밍 가능한 패브릭(204)에 결합될 수 있다. 이는 인터페이스들(242 내지 248) 중 임의의 하나를 통해 전달되는 데이터가 추가의 프로세싱 및/또는 모니터링을 위해 프로그래밍 가능한 패브릭(204) 내의 회로에 라우팅되도록 허용한다.
제어 레지스터(254)는 대부분은 아니더라도 PS(202)의 다양한 양상들을 제어하도록 구성될 수 있다. 하나 이상의 커맨드들은 PS(202)의 동작을 제어 또는 레귤레이팅하기 위해 제어 레지스터(254)에 기록될 수 있다. 예를 들어, 프로그래밍 가능한 패브릭(204) 내의 회로들은 여기서 더 상세히 기술될 인터페이스, 이를 테면 인터페이스(256B)를 통해 제어 레지스터(254)에 기록할 수 있다. 제어 레지스터(254)는 지적 재산권(intellectual property; IP) 인에이블 리셋들을 제어하고, 클록 유닛(226)에 의해 생성된 클록 주파수들을 세팅하고, I/O 드라이브 세기 및 다른 시스템 레벨 기능들을 특정하는 것과 같은 기능들을 제어하거나 레귤레이팅할 수 있다. 제어 레지스터(254)는 PS(202)의 전력을 차단(powering down)하고, 독립적으로 PS(202)의 특정한 인터페이스들의 전력을 차단하거나 탈활성화하는 등과 같은 부가적인 기능들을 레귤레이팅할 수 있다. 제어 레지스터(254)는 예를 들어, 제어 레지스터(254)를 코어 스위치(236)에 결합하는 APB(도시되지 않음)와 같은 버스를 통해 액세스될 수 있다.
PS(202)는 또한 프로그래밍 가능한 패브릭(204)에 직접 결합하는, 인터페이스들(256A 내지 256D)로서 도시되는 하나 이상의 인터페이스들(256)을 포함할 수 있다. 일 실시예에서, 인터페이스들(256) 중 하나 이상 또는 모두 다는 ARM에 의해 공개되는 것과 같은 AMBA AXI 프로토콜 규격(AXI)에 따라 구현될 수 있다. 예를 들어, 인터페이스들(256) 각각은 AMBA AXI 프로토콜 규격 v.2.0.에 일치하게 구현될 수 있다. 일반적으로, AXI는 서브미크론 상호접속(submicron interconnect)에 적합한 고성능의 고 주파수 인터페이스이다.
도 2를 재차 참조하면, 인터페이스들(256A 및 256B)은 예를 들어, 각각 프로그래밍 가능한 패브릭(204)을 코어 스위치(236)에 연결하는 2개의 32-비트 채널들을 제공하도록 구현될 수 있다. 인터페이스(256A)는 범용 마스터 인터페이스로서 구현될 수 있다. 인터페이스(256A)는 예를 들어, 프로그래밍 가능한 패브릭(204)으로의 PS(202) 및/또는 그 내부의 DMA 제어기로부터 데이터의 범용 전달들을 수행하는데 이용될 수 있다. 인터페이스(256B)는 범용 슬래이브 인터페이스로서 구현될 수 있다. 예를 들어, 인터페이스(256B)는 PS(202)와 프로그래밍 가능한 패브릭(204) 간의 범용 데이터 전달을 수행하는데 이용될 수 있다.
인터페이스(256A 내지 256B) 및 코어 스위치(236)를 통해, 프로그래밍 가능한 패브릭(204) 내에서 구현되는 회로들은 인터페이스들(240, 242, 246 및 248) 중 다양한 인터페이스들에 액세스할 수 있다. 코어 스위치(236)와 조합되는 인터페이스들(256A 및/또는 256B)을 통해, 프로그래밍 가능한 패브릭(204) 내의 회로들은 추가로 직접 OCM(222)에 그리고 메모리 제어기(228) 등을 통해 오프-칩 메모리에 액세스할 수 있다.
인터페이스(256C)는 프로그래밍 가능한 패브릭(204)을 코어 컴플렉스(206)에, 보다 구체적으로는 SCU(218)에 결합하는 64-비트 슬래이브 인터페이스로서 구현될 수 있다. 인터페이스(256C) 및 SCU(218)를 통해, 프로그래밍 가능한 패브릭(204) 내에서 구현되는 회로들에는 각각의 코어들(208 및 210) 내의 L1 캐시, IRQ(216), L2 캐시(220) 및 OCM(222)에 대한 직접 액세스가 제공된다. 이에 따라, 프로그래밍 가능한 패브릭(204) 내의 회로들은 판독하고 및/또는 이러한 메모리들에 기록할 수 있고 코어 컴플랙스(206) 내에서 생성되거나 어써트(assert)되는 인터럽트들을 검출할 수 있다. 또한, 신호(290)는 포트들 또는 신호들로서 IRQ(216)에 제공될 수 있는 프로그래밍 가능한 패브릭(204)으로부터 하나 이상의 인터럽트들 및/또는 포트들 또는 신호들로서 프로그래밍 가능한 패브릭(204)에 제공될 수 있는 PS(202)로부터, 특히 코어 컴플랙스(206)로부터의 중단들의 하나 이상의 사본들을 나타낼 수 있다. 다른 실시예에서, 인터페이스(256C)는 보조프로세서들로서 기능하는 회로들에 의한 이용에 적합하게 될 코어 컴플렉스(206)로의 코히어런트 액세스(coherent access)를 제공할 수 있다. PSC, 예를 들어, PSC(282)의 형태로 프로그래밍 가능한 패브릭(204) 내에서 구현되는 소프트 프로세서는 예를 들어, 인터페이스(256C)를 통해 PS(202)와 통신할 수 있다.
인터페이스(256D)는 복수의, 예를 들어, 4개의, 64-비트 슬래이브 인터페이스를 제공하도록 구현될 수 있다. 인터페이스(256D)는 프로그래밍 가능한 패브릭(204) 내에서 효율적으로 구현되는 회로들과 PS(202) 간에 대량의 데이터를 교환하는데 이용될 수 있다. 도시된 바와 같이, 인터페이스(256D)는 메모리 스위치(238)를 통해 OCM(222)에 대한 액세스 및 메모리 스위치(238) 및 메모리 제어기(228)를 통한 오프-칩 메모리에 대한 액세스를 프로그래밍 가능한 패브릭(204) 내에 구현되는 회로들에 제공한다.
PS(202)는 추가로 프로세서 구성 액세스 포트(processor configuration access port; PCAP)(258)를 포함한다. 도시된 바와 같이, PCAP(258)는 프로그래밍 가능한 패브릭(204) 내에 위치되는 구성 제어기(260) 및 시스템 모니터 블록(262)에 결합될 수 있다. 구성 제어기(260) 및 시스템 모니터 블록(262)은 하드-와이어 회로의 형태로 구현될 수 있다. 구성 제어기(260)는 프로그래밍 가능한 패브릭(204) 내에서 구성 데이터에 의해 특정되는 회로를 물리적으로 구현하도록 구성 메모리 셀들에 구성 데이터를 기록하는 것을 전담한다. 시스템 모니터 블록(262)은 아날로그-디지털 변환, 전압 모니터링, 전류 모니터링 및/또는 온도 모니터링과 같은 기능들을 수행할 수 있다.
프로그래밍 가능한 패브릭(204)은 프로그래밍 가능한 상호연결 회로를 이용하여 함께 결합될 수 있는 하나 이상의 프로그래밍 가능한 회로 블록들을 포함하도록 구현될 수 있다. 프로그래밍 가능한 회로 블록들 및 프로그래밍 가능한 상호연결 회로는 IC(200) 내로 로딩되는 구성 데이터에 기초하여 하나 이상의 상이한 물리적 회로들, 예를 들어, 사용자 회로(280) 및/또는 PSC(282)를 구현하도록 구성될 수 있다. 프로그래밍 가능한 패브릭(204)은, 그 내부에서 구현되는 다양한 하드-와이어 회로들을 제외하고, 물리적 회로가 프로그래밍 가능한 패브릭(204) 내에서 구현되게 하는 구성 가능한 데이터가 구성 메모리 내에 로딩될 때까지 동작하거나 기능하지 않는다는 것이 인지되어야 한다.
프로그래밍 가능한 패브릭(204)은 또한 하드-와이어 회로들의 형태로 하나 이상의 인터페이스들을 구현하도록 구성될 수 있다. 예를 들어, JTAG 인터페이스(264), 하나 이상의 MGT들(266A 내지 266D), 주변 컴포넌트 상호연결 익스프레스(Peripheral Component Interconnect Express; PCIe) 인터페이스(268), 내부 구성 액세스 포트(ICAP)(270) 및 보안 포트(272)가 IC(200)의 프로그래밍 가능한 패브릭 부분 내에 위치될지라도 하드-와이어 회로들로서 포함될 수 있다. 프로그래밍 가능한 패브릭(204)을 참조하여 기술되는 다양한 인터페이스들은 구현될 수 있는 예시적인 인터페이스들을 예시하며 이 명세서 내에서 개시되는 하나 이상의 실시예들에 관해 제한하거나 한정되도록 의도되지 않는다.
예를 들어, 구성 데이터는 IC(200) 내로 로딩되고 구성 제어기(260)에 의해 수신될 수 있다. 일 실시예에서, 구성 데이터는 IC(200)의 구성 프로세스를 제어할 수 있는 PS(202)를 통해 수신될 수 있다. 구성 제어기(260)는 IC(200)의 구성 메모리(도시되지 않음) 내에 PACP(258)를 통해 PS(202)로부터 수신되는 구성 데이터를 로딩할 수 있다. 사용자 회로(280) 및/또는 PSC(282)와 같은 상이한 물리적 회로들은 IC(200)의 구성 메모리 내로 로딩되는 특정한 구성 데이터에 의해 특정되는 바와 같이 프로그래밍 가능한 패브릭(204) 내에서 구현되거나 형성될 수 있다. 이러한 방식으로 구성 데이터의 로딩은, 하드-와이어 회로의 이용으로 인해, 프로그래밍 가능한 패브릭(204)의 어떠한 초기 구성도 요구하지 않는다는 것이 인지되어야 한다. 물리적 회로들을 통해 구성 데이터의 로딩의 결과로, 프로그래밍 가능한 패브릭(204) 내에서 구현되는 회로들은 통상적으로 회로가 하드-와이어 또는 다른 방식으로 IC(200) 내에 고정되기 보단 오히려 프로그래밍 가능한 패브릭 내에서 형성된다는 점에서 "소프트"한 것으로서 지칭된다.
PSC(282)는 물론, 사용자 회로(280)는 기술된 다양한 인터페이스들 중 임의의 것을 통해 PS(202)에 결합될 수 있다. 직접적인 액세스가 인터페이스들(256)을 통해 제공될 수 있는 반면에, PS(202)로의 추가의 액세스는 FMIO 인터페이스(252)를 통해 용이하게 될 수 있다. PSC(282)에 오프로딩되는 특정한 기능 및 프로세스는 일반적으로 PS(202)와의 통신을 위해 필수적인 인터페이스의 타입을 결정할 것임이 인지되어야 한다.
도 3은 본 명세서 내에서 개시되는 다른 실시예에 따라 프로세서 시스템을 확장하기 위해 구성된 IC(300)을 예시하는 제 3 블록도이다. IC(300)는 실질적으로 도 2의 IC(200)를 참조하여 기술되는 바와 같이 구현될 수 있다. 그러나 도 3은 PS(302)로부터 프로그래밍 가능한 패브릭(304) 내의 PSC(320)와 같은 회로로의 소프트웨어-기반 프로세스의 오프로딩을 예시하기 위해 IC(300)의 개요도를 예시한다.
도 3은 프로그램 코드(315)를 실행하는 코어(310)를 도시한다. 프로그램 코어(315)는 하나 이상의 상이한 프로세스들을 포함하거나 특정할 수 있다. 예시 목적을 위해, 프로그램 코드(315)가 프로세스 1, 프로세스 2, 프로세스 3 및 프로세스 4를 포함하는 것으로 도시된다. 프로세스 2는 프로세스 2가 PSC, 이 예에서 PSC(320)와 연관되는 것을 예시하도록 음영진다. 도시되는 바와 같이, PSC(320)는 프로그래밍 가능한 패브릭(304) 내에서 구현된다. 이에 따라, 코어(310)는 PSC가 프로세스 2를 위해 존재한다는 것을 결정하도록 프로그래밍될 수 있다. 프로세스 2를 실행하기 보단 오히려, 코어(310)는, 그렇지 않았으면 PS(302)에 의한 프로그램 코드의 실행을 통해 수행되었을 프로세싱을 프로그래밍 가능한 패브릭(304)에 오프로딩할 수 있다. 코어(310)는 예를 들어, 입력으로서 PSC(320)에 대해 이용 가능한 프로세스 2를 수행하는데 필수적인 임의의 소스 데이터를 형성하도록 배열될 수 있다. PSC(320)에 의한 프로세싱이 완료하면, PSC(320)에 의해 생성된 임의의 결과 데이터는 코어(310)에 의한 이용 또는 프로세싱을 위해 PS(302)로 역으로(back) 제공될 수 있다.
일 실시예에서, 프로세스 2는 프로그래밍 가능한 패브릭(304) 내에서의 구현을 위해 프로그램 코드(315) 내에서 식별되거나 또는 다른 방식으로 표기될 수 있다. 예를 들어, 코어(310)는 프로세스 2가 실행되는 것이 아니라 오히려 PSC(320)에 의해 하드웨어에서 수행된다는 것을 특정하는 표시자를 식별할 수 있다. 다른 실시예에서, 프로세스 2는 단순히 특정한 프로세스를 PSC(320)에 오프로딩하거나 또는 PSC(320)를 이용하여 프로세스를 수행하도록 코어(310)에 통지하는 명령들일 수 있다. 그 경우에, 프로세스 2는 수행될 프로세스를 특정하는 실제 프로그램 코드를 포함할 필요가 없다. 오히려, 개발 동안, 소프트웨어에서 보단 하드웨어 내에서 프로세스를 구현하도록 하는 판단이 내려질 수 있다. 프로세스 2는 프로세스를 PSC(320)에 오프로딩하도록 PS(302)에 명령하는 표시자로 유효하게 대체될 수 있다. 또 다른 실시예에서, 프로세스 2를 PSC(320)에 오프로딩하도록 하는 판단은 동적으로, 예를 들어, 현장에서 IC(300)의 동작 동안 내려질 수 있다.
PSC 형태로 특정한 프로세스를 구현하도록 하는 판단이 IC(300)내에서 구현되는 시스템의 설계 사이클 동안 또는 PS(302)에 의해 현장에서 동적으로 수행되든지 간에 하여간, 이 판단은 하나 이상의 상이한 비용 측정치들 또는 단순히 "비용들"에 기초하여 내려질 수 있다. PS(302)에서 소프트웨어로 프로세스를 수행하는 것에 연관된 하나 이상의 비용들을 반영하는 실행의 비용을 결정하도록 비용들이 평가될 수 있다. 하나 이상의 비용들은 추가로 프로그래밍 가능한 패브릭(304)에서 PSC(320)에 프로세스를 오프로딩하기 위한 구현의 비용을 결정하도록 평가될 수 있다. 일반적으로, 구현의 비용이 실행의 비용보다 적거나, 또는 미리 결정된 양 또는 퍼센티지만큼 실행의 비용보다 적을 때, 프로세스는 대응하는 PSC에 오프로딩될 수 있다.
일 실시예에서, 실행의 비용 및 구현의 비용은 각각 시간 컴포넌트, 또는 전력 컴포넌트, 또는 시간 컴포넌트 및 전력 컴포넌트 둘 다의 임의의 조합을 포함할 수 있다. 몇몇 경우들에서, PS(302)로부터 프로그래밍 가능한 패브릭(304)으로 프로세스를 오프로딩하는 것은, PS(302)가 프로세스를 수행하는 것보다 PSC가 프로세스를 더 빨리 수행할 수 있기 때문에 유익하다. 다른 경우들에서, PSC는 프로세스를 실행하기 위해 PS(302)에 의해 이용되는 것보다 적은 에너지를 이용하여 프로세스를 수행할 수 있다. 또 다른 경우들에서, PSC는 PS(302)보다 적은 에너지를 이용하고 더 빨리(less time) 프로세스를 수행할 수 있다. 실행의 비용 및 구현의 비용은 프로세스의 오프로딩이 시간 절감들, 또는 전력 절감들, 또는 시간 및 전력 둘 다의 절감들을 발생시키는 이러한 상황들을 식별하기 위해 계산되고 비교될 수 있다.
일 실시예에서, 시간 컴포넌트는 레이턴시의 견지에서 측정될 수 있다. 예를 들어, 프로세스를 오프로딩할지 여부에 관한 판단은 프로세스를 수행하기 위해 PS(302) 보다 PSC가 더 적은 레이턴시를 갖고 프로세스를 수행할 수 있는지 여부에 의존할 수 있다. 일 예에서, 각각이 도 2의 IRQ(216)에 제공되는 인터럽트를 처리하거나 프로세싱하도록 구성될 수 있는 하나 이상의 PSC들이 프로그래밍 가능한 패브릭(304) 내에서 구현될 수 있다. PS(302)의 하나 이상의 인터럽트들은 IRQ를 통해 프로그래밍 가능한 패브릭(304)에서 회로, 예를 들어, 하나 이상의 PSC들에 접하게 될 수 있다. 인터럽트의 검출 시에, 인터럽트는 PS(302) 내에서 예외 처리 프로그램 코드(exception handling program code)의 실행을 통해 처리되는 것과 대조적으로 프로그래밍 가능한 패브릭(304) 내에서 PSC에 의해 처리될 수 있다. PSC를 이용한 인터럽트들의 처리는 PS(302)가 다른 작업들 또는 요청들에 응답하도록 허용함으로써 시스템 레이턴시를 감소시킬 수 있다.
도 4는 본 명세서 내에서 개시되는 다른 실시예에 따라 프로세서 시스템을 확장하도록 구성된 IC(400)를 예시하는 제 4 블록도이다. IC(400)는 실질적으로 도 2의 IC(200)를 참조하여 기술되는 바와 같이 구현될 수 있다. 도 4는 도 3과 유사하게, PS(402)로부터 프로그래밍 가능한 패브릭(404) 내의 회로로 소프트웨어-기반 프로세스의 오프로딩을 나타내도록 IC(400)의 개요도를 예시한다.
도 4는 프로그램 코드(415)를 실행하는 코어(410)를 도시한다. 프로그램 코드(415)는 하나 이상의 상이한 프로세스들을 포함 또는 특정할 수 있다. 예시의 목적을 위해, 프로그램 코드(415)는 프로세스 1, 프로세스 2, 프로세스 3 및 프로세스 4를 포함하는 것으로 도시된다. 프로세스 2 및 4는 양자의 프로세스들이 PSC들을 특정하는 대응하는 구성 데이터와 연관된다는 것을 예시하도록 음영진다. 프로세스 2는 프로세스 2 구성 데이터와 연관된다. 프로세스 4는 프로세스 4 구성 데이터와 연관된다.
예를 들어, 프로세스 2는 프로그램 코드에서 구현되고 "프로세스 2 구성 데이터"로서 도시되는 데이터와 또한 연관된다. 프로세스 2 구성 데이터가 IC(400) 내에 로딩될 때, PSC(440)는 프로그래밍 가능한 패브릭(404) 내에서 구현된다. 프로세스 4가 프로그램 코드에서 구현되고 "프로세스 4 구성 데이터"로서 도시된 구성 데이터와 또한 연관된다. 프로세스 4 구성 데이터가 IC(400) 내로 로딩될 때, PSC(445)는 프로그래밍 가능한 패브릭(404) 내에서 구현된다.
PSC(440) 및 PSC(445)는 프로그래밍 가능한 패브릭(404) 내에서 각각의 회로를 구현하는데 요구되는 영역을 예시하도록 블록들로서 도시된다. PSC(440 및 445)를 구현하는데 요구되는 영역은 알려져 있고 프로그램 코드(415)의 부분으로서 저장되거나 또는 요구될 때 이용을 위해 IC(400) 내의 다른 장소의 메모리 내에 저장될 수 있다.
일 실시예에서, 각각의 PSC는 PSC의 크기가 추정되거나 결정될 수 있도록 개발 동안 프로그래밍 가능한 패브릭에서 구현될 수 있다. 다른 실시예에서, PSC의 크기는 프로그램 코드 라인(line of program code; LOC) 또는 명령을 구현하는데 필요한 프로그래밍 가능한 패브릭의 컴포넌트들의 평균 수에 대한 그 LOC 또는 명령 간의 관계에 기초하여 추정되거나 계산될 수 있다. 예를 들어, 각각의 명령은 구현하기 위해 특정 수의 LUT들을 요구할 수 있다. 따라서 정해진 프로세스에 대한 PSC의 크기는 각각의 LOC를 구현하는데 필요한 하드웨어 유닛들의 수로 곱해진 프로세스에 대한 LOC들로서 결정될 수 있다.
도시되는 바와 같이, 프로그래밍 가능한 패브릭(404)은 프로그래밍 가능한 패브릭(404) 내에서 이미 구현된 사용자 회로 설계를 표현하는 사용자 회로(420)를 포함한다. IC(400)는 또한 프로그래밍 가능한 패브릭(404) 내에 회로를 구현하기 위해 구성 메모리 셀들 내로 구성 데이터를 로딩하도록 구성되는 구성 제어기(425)를 포함한다. 이용 가능한 공간(430)은 프로그래밍 가능한 패브릭(404)의 미사용 부분을 표현한다. 이용 가능한 공간(430)의 크기는 또한 코어(410)에게 알려지거나, 또는 결정되거나 또는 이용 가능하게 될 수 있다. 예를 들어, 구성 제어기(425)는 이용 가능한 공간(430)을 계산하고 그 정보가 표준화된 애플리케이션 프로그래밍 인터페이스(application programming interface; API)를 통해 PS(402)에 대해 이용 가능하게 할 수 있다.
이에 따라, 일 실시예에서, 프로세스 2를 실행하는 대신, 프로그래밍 가능한 패브릭(404) 내에 프로세스 2와 같은 특정한 프로세스를 구현할지 여부를 결정할 때, 코어(410)는 프로그래밍 가능한 패브릭(404) 내의 이용 가능한 공간(430)이 PSC(440)를 구현하기에 충분한지 여부를 결정할 수 있다. 예시되는 바와 같이, 이용 가능한 공간(430)은 PSC(440)를 구현하기에 충분히 크지만 PSC(445)에 대해선 그렇지 않다.
이용 가능한 공간(430)의 양은 예를 들어, IC(400)가 현장에 있는 동안 이따금 동적인 부분적인 재구성, 완전한 재구성 등을 경험하기 때문에, IC(400)의 동작 동안 변경될 수 있다는 것이 인지되어야 한다. 이에 따라, 정해진 프로세스가 하드웨어에서 구현될 수 있는지 여부는 이미 간략히 논의된 다양한 팩터들은 물론 프로세스의 오프로딩이 요구될 수 있을 특정한 시간에 이용 가능한 공간(430)의 양에 의존할 수 있다.
특정한 프로세스를 프로그래밍 가능한 패브릭으로 오프로딩할지 여부를 결정할 때, 언급한 바와 같이, 실행의 비용이 구현의 비용과 비교될 수 있다. 일반적으로 구현의 비용 및 실행의 비용은 각각, 시간, 예를 들어, 프로세스가 수행될 수 있는 속도, 레이턴시, 전력, 예를 들어, 프로세스를 수행하는데 필요하거나 소비되는 전력의 양, 또는 시간, 레이턴시 및/또는 전력의 임의의 조합에 의존할 수 있다.
실행의 비용은 다양한 상이한 기법들을 이용하여 계산될 수 있다. 일 양상에서, 예를 들어, 실행의 비용은 실행된 프로세스의 LOC들의 수에 따라 결정될 수 있다. 다른 양상에서, 실행의 비용은 동작들의 수 및/또는 실행될 각각의 각자의 동작의 타입에 따라 결정될 수 있다. 예를 들어, 부가 동작은 실행하기 위해 제 1 양의 시간 및 제 1 양의 전력을 요구하는 것으로 알려질 수 있다. 특정한 DSP 동작은 실행하기 위해 제 2 양의 시간 및 제 2 양의 전력을 요구하는 것으로 알려질 수 있다. 전력 소모 및 실행 시간에 관한 정보는 일반적으로 프로세서 또는 PS의 제조자 또는 제공자로부터 이용 가능하다.
따라서, 정해진 프로세서 또는 PS에 대해, LOC를 실행하거나 특정한 동작을 실행하는데 필요한 시간은 일반적으로 알려져 있다. 유사하게, LOC를 실행하거나 정해진 타입의 동작을 실행하는데 요구되는 전력의 양이 일반적으로 알려져 있다. 오프로딩될 수 있는, PS에 의해 실행될 프로그램 코드의 각각의 프로세스는 실행의 비용을 특정할 수 있는 프로파일과 연관될 수 있다. 실행의 비용은 전력 소비, 실행을 위한 시간, 레이턴시, 또는 전력 소비, 실행을 위한 시간 및/또는 레이턴시의 2개 이상의 조합을 반영할 수 있다.
구현의 비용은 또한 다양한 상이한 기법들을 이용하여 또한 결정될 수 있다. 예를 들어, 구현의 비용은 프로세스의 오프로딩을 셋업하기 위해 PS에 의해 수행되어야 하는 하나 이상의 동작들에 의존할 수 있다. 오프로딩을 셋업하기 위해, 예를 들어, PS는 먼저 입력으로서 PSC에 의해 필요한 소스 데이터가 이용 가능하다는 것을 보장할 필요가 있다. 따라서 PS는 소스 메모리로부터 데이터를 판독하고 소스 데이터를 계산하고, 소스 데이터를 PSC가 소스 데이터에 액세스할 수 있는 목적지 메모리에 기록하고, 및/또는 하나 이상의 어드레스 변환(address translations)을 수행하도록 요구될 수 있다. 이에 관하여, PS에 의해 수행된 셋업은 구현의 비용에 포함되어야 하는 전력 및/또는 시간 지출들(expenditures)을 가질 수 있다.
또한, 메모리에 액세스, 예를 들어, 판독 및/또는 기록하는데 필요한 시간의 양은 그 메모리의 위치에 의존할 수 있다. 전력 소비에 대해서도 이것은 참이다. 일반적으로 PS 내부의 메모리는 IC 외부의 메모리, 예를 들어, 메모리 제어기를 통해 엑세스되는 RAM 보다 더 적은 시간 및 더 적은 전력 지출로 액세스될 수 있다. 또한, L1 캐시는 L2 캐시보다 적인 시간으로 액세스될 수 있고, L1 또는 L2 캐시 중 어느 하나는 OCM보다 적인 시간으로 액세스될 수 있다.
PSC가 프로그래밍 가능한 패브릭 내에 아직 구현되지 않았을 때, PSC를 구현하기 위해 구성 데이터가 구성 메모리 내에 로딩되기 위해 부가적인 시간이 요구된다. PSC를 구현하는데 요구되는 시간은 예를 들어, 로딩될 구성 데이터의 양 및 구성이 외부 소스로부터 로딩될 수 있는 속도에 의존할 수 있다. 프로그래밍 가능한 패브릭 내에서 PSC를 구현하는데 요구되는 시간 및 요구되는 전력은 추정되거나 구현의 비용에 기여할 수 있다.
PSC에 의해 수행될 실제 프로세싱의 견지에서, PSC는 수행될 동작들의 수 및/또는 타입, 동작을 수행할 특정한 회로들 등과 같은 팩터들에 따라 오프로딩된 프로세스를 완료하는데 필요한 시간 및 전력 소비를 위해 프로파일링될 수 있다. 통상적으로 전력 소비 및 속도는 PSC에 의해 수행될 동작들의 수, PSC에 의해 수행된 동작들의 타입, 오프로딩된 프로세스의 동작들을 구현할 PSC의 특정한 회로 엘리먼트들에 기초하여 결정될 수 있다.
구현의 비용은 또한 오프로딩된 프로세스의 결과들이 PSC로부터 PS로 되돌려지는 방식에 의존할 수 있다. 언급된 바와 같이, 결과들이 저장되는 특정한 메모리, 및 결과들이 PS로 송신되는 통신 채널은 시간 및 전력 둘 다에 그리고 이에 따라 구현의 비용에 영향을 줄 수 있다.
시간 및 전력 외에, 도 4에서 예시되는 바와 같이, 프로그래밍 가능한 패브릭 내의 충분한 공간이 PSC를 구현하기 위해 이용 가능하게 되어야 한다. 예를 들어, 각각의 프로세스는 실행의 비용, 구현의 비용, 프로세스에 대한 PSC를 특정하는 구성 데이터와 연관될 수 있다. 구현의 비용은 프로그래밍 가능한 패브릭 내에 PSC를 구현하는데 요구되는 영역의 추정치를 포함하거나 특정할 수 있다. 따라서, 일 양상에서, 각각의 프로세스에 대한 실행의 비용이 저장될 수 있다. 프로세스의 구현의 비용의 하나 이상의 팩터들이 저장될 수 있다. 그러나 언급된 바와 같이, 하나 이상의 팩터들은 IC 그 자체 내의 조건들 예를 들어, PSC가 이미 구현되었는지 여부, 프로그래밍 가능한 패브릭 내의 이용 가능한 공간이 충분한지 여부 등의 변화로 인해, 동적으로, 예를 들어, 현장에서 동작 동안 계산될 필요가 있을 수 있다.
일반적으로, 구현의 비용 및/또는 실행의 비용은 기술된 다양한 개별 비용 컴포넌트(들)를 합산함으로써 계산될 수 있다. 언급된 바와 같이, 비용 컴포넌트(들)의 중 하나 이상의 가중화, 예를 들어, 전체 구현 및/또는 실행 비용 계산 내에서 특정한 비용 컴포넌트의 중요도(significance)를 감소시키거나 특정한 비용 컴포넌트의 중요도를 증가시키는 팩터에 의해 곱해질 수 있다. 실행의 비용 및 구현의 비용을 결정하기 위한 상이한 방법들 및 기법들은 예시의 목적들을 위해 제공되고, 그럼으로써 본 명세서 내에서 개시되는 하나 이상의 실시예들을 제한하는 것으로 의도되지 않는다.
일 실시예에서, PSC에 오프로딩되는 프로세스는 IC 및 PS로 데이터의 입력 또는 IC 및/또는 PS로부터 데이터의 출력을 포함하는 프로세스일 수 있다. PSC는 PS의 I/O 주변기기를 유효하게 구현할 수 있다. 예를 들어, PSC는 인입하는 데이터를 수용하고, 데이터의 초기 프로세싱을 수행하고, PS에 의해 액세스 가능한 RAM 내에 데이터를 저장하도록 구성될 수 있다. 이에 따라, PS는 필요할 때 RAM으로부터 그 데이터에 액세스할 수 있다. RAM 내에 데이터의 저장은 물론 사전-프로세싱은 PS를 수반하지 않고 PSC에 의해 수행될 수 있다. 유사하게, RAM과 같은 메모리에 저장되는 데이터는 PS를 수반하지 않고 PSC에 의해 출력될 수 있다. PSC는 PS를 수반하지 않고 지정된 메모리로부터 데이터를 판독하고, 필요한 경우 임의의 프로세싱을 수행하고, 결과적인 데이터를 출력할 수 있다. PS는 예를 들어, 본 명세서 내에서 기술되는 기법들 중 하나 이상을 이용하여 출력되는 데이터를 PSC에 통지할 수 있다. 위에서 기술된 바와 같이 I/O 주변기기로서 PSC의 이용을 예시하는 하나의 예는 비디오 프로세싱의 상황이다. PSC는 하나 이상의 사전 프로세싱 작업들을 수행하고 PS에 의한 이용을 위해 메모리에 결과적인 데이터를 저장할 수 있다.
도 5는 본 명세서 내에서 개시되는 다른 실시예에 따라 IC 내에서 프로세서 시스템을 확장하는 방법(500)을 예시하는 흐름도이다. 방법(500)은 본 명세서 내에서 기술되는 바와 같이 IC에 의해, 예를 들어, 프로그래밍 가능한 패브릭과 결합되는 PS를 포함하는 것에 의해 구현될 수 있다. 방법(500)은 일반적으로 현장에서 적용될 수 있는 동적인 방식으로 IC의 동작 동안 PS를 확장하기 위한 기법들 예시한다. 그러나 기술되는 다양한 비용들 및 프로그래밍 가능한 패브릭 내의 구현을 위해 다른 프로세스 중에서 하나의 프로세스를 선택하기 위한 기법들은 또한 PS에 의해 실행되는 프로그램 코드 내로 이러한 판단들을 "하드-코딩"하고 및/또는 어느 프로세스들이 PS에 의해 처리되고 PSC(예를 들어, I/O 주변기기, 인터럽트 처리기 등으로 든지 간에 하여간)로서 구현되어야 하는지를 판단하도록 시스템의 개발 동안 적용될 수 있다는 것이 인지되어야 한다.
동적으로, 예를 들어, 현장에서 동작 동안 및 실행 시에 어느 프로세스를 구현할지를 PS가 결정하는 실시예에서, PS에 의해 실행되는 프로그램 코드는 도 5를 참조하여 기술되는 지능 및 판단 내리기를 포함할 수 있다. 또한, 소프트웨어 프로세스를 구현하는 PSC들 및 소프트웨어 프로세스를 프로파일링하는 견지에서 이용되는 다양한 수량들(quantities)은 PS 내에서 실행하는 프로그램 코드의 부분으로서 저장되고 프로그램 코드의 실행 동안 PS에 의해 액세스 가능한 방식으로 IC 내의 다른 장소에 저장되거나, 또는 실행 시간에 또는 실행 시간 동안 계산될 수 있다.
이에 따라, 방법(500)은 IC의 PS가 프로그램 코드를 실행하는 단계(505)에서 시작할 수 있다. 언급된 바와 같이, 프로그램 코드는 복수의 상이한 프로세스를 포함할 수 있다. 프로세스들 중 하나 이상은 프로그래밍 가능한 패브릭에 오프로딩될 수 있다. PS에 의해 실행되는 프로세스 코드는 추가로 오프로딩을 위한 프로세스들을 선택하고 이러한 프로세스를 오프로딩할 시기를 결정하는데 있어 도 5를 참조하여 기술되는 기능을 포함할 수 있다.
단계(510)에서, PS는 PSC로서 프로그래밍 가능한 패브릭에 오프로딩을 위해 실행될 프로그램 코드의 후보 프로세스를 결정할 수 있다. 일 실시예에서, PS는 미리 결정된 양의 시간 내에 실행될 것으로 기대되는 하나 이상의 프로세스들, 실행될 다음 프로세스, 다음 "N" 개의 프로세스 내의 프로세스(여기서 N은 미리 결정된 정수 값임) 또는 미래에 미리 결정된 수의 클록 사이클 내에서 실행될 것으로 추정되는 프로세스를 식별할 수 있다. 예를 들어, PS는 후보 프로세스들을 선택하는 미리보기(look-ahead) 기능을 활용할 수 있다.
단계(515)에서, PS는 후보 프로세스가 PSC와 연관되는지 여부를 결정할 수 있다. 후보 프로세스가 PSC와 연관될 때, 방법(500)은 계속될 수 있다. 후보 프로세스가 PSC와 연관되지 않을 때, 방법(500)은 상이한 후보 프로세스를 선택하도록 역으로 루프(loop)할 것이다.
단계(520)에서, PS는 PSC가 프로그래밍 가능한 패브릭 내에서 구현되는지 여부를 결정할 수 있다. 하나 이상의 PSC들은 이미 프로그래밍 가능한 패브릭 내에서 구현될 수 있다. PSC가 프로그래밍 가능한 패브릭 내에서 이미 구현되는 경우, 구현의 비용의 시간 컴포넌트 및 전력 컴포넌트는 오프로딩 이전에 PSC가 프로그래밍 가능한 패브릭 내의 구현을 요구했던 것보다 작게 될 것이다. PSC가 프로그래밍 가능한 패브릭 내에서 아직 구현되지 않은 경우, 구현의 비용의 시간 컴포넌트 및 비용 컴포넌트는 각각 PSC가 이미 프로그래밍 가능한 패브릭 내에서 구현되었던 것보다 더 크게 될 것이다. 또한, PS는 충분한 이용 가능한 공간이 PSC의 구현을 위해 프로그래밍 가능한 패브릭 내에 존재하는지를 결정해야 한다. 이에 따라 PSC가 프로그래밍 가능한 패브릭 내에 구현될 때 방법(500)은 단계(535)로 지속될 수 있다. PSC가 프로그래밍 가능한 패브릭 내에 구현되지 않을 때, 방법(500)은 단계(525)로 지속될 수 있다.
단계(525)에서, PS는 프로그래밍 가능한 패브릭 내의 이용 가능한 공간의 양을 결정할 수 있다. 언급된 바와 같이, 이용 가능한 공간의 양은 PSC와 같은 회로 설계들을 추가로 구현하는데 이용 가능한 미사용 프로그래밍 가능한 패브릭의 양일 수 있다. 단계(530)에서, PS는 프로그래밍 가능한 패브릭 내의 이용 가능한 공간의 양이 PSC를 구현하기에 충분한지 여부를 결정할 수 있다. PSC를 구현하기 위해 프로그래밍 가능한 패브릭 내에 충분한 이용 가능한 공간이 있으면, 방법(500)은 단계(535)로 진행할 수 있다. PSC를 구현하기 위해 프로그래밍 가능한 패브릭 내에 충분한 이용 가능한 공간이 있지 않으면, 방법(500)은 있다면 오프로딩을 위한 상이한 후보 프로세스 선택하기 위해 단계(510)로 역으로 루프할 수 있다.
단계(535)에서, PS는 PSC의 구현 비용 및 PS 내의 프로세스의 실행 비용을 계산 또는 결정할 수 있다. 언급된 바와 같이, 원하는 경우, 실행의 비용 및 구현의 비용은 하나 이상의 시간 컴포넌트(들), 하나 이상의 전력 컴포넌트(들), 또는 하나 이상의 시간 컴포넌트(들) 및 하나 이상의 전력 컴포넌트(들)의 조합을 반영할 수 있다. 시간, 전력 또는 둘 다가 고려되든지 간에 하여간, 구현 비용의 계산 내로 통합되는 다양한 컴포넌트들을 가중화하기 위한 기능가 이용될 수 있다. 예를 들어, 구현 비용의 계산 내에서, 시간은 보다 중하게 가중화될 수 있는데, 예를 들어, 전력 보다 더 뛰어난 중요성이 주어질 수 있다. 대안적으로, 전력은 시간 보다 더 중하게 가중화될 수 있다. 실행 비용의 계산 내로 통합되는 다양한 비용 컴포넌트들을 가중화하기 위한 상이한 기능가 이용될 수 있다.
다른 실시예에서, 시간, 전력, 및/또는 이들의 조합을 상이하게 수치화하는, 구현의 비용 및/또는 실행의 비용을 계산하기 위한 다수의 기능들이 저장될 수 있다. 구현의 비용 및/또는 실행의 비용을 계산하기 위한 특정한 기능는 현장에서 동작 동안 동작 상태, 동작 콘택스트(operating context) 또는 IC에 제공되는 다른 명령들에 따라 PS에 의해 동적으로 선택될 수 있다. 따라서 현장에서 구현 비용의 계산 및/또는 실행 비용의 계산 변경함으로써, 정해진 프로세스를 오프로딩하는 판단이 내려지는 방식은 이따금 동적으로 변경될 수 있다.
또 다른 실시예에서, 이용 가능한 공간 결정은 구현 비용 결정 단계 내에 통합될 수 있다는 것이 인지되어야 한다. 예를 들어, 프로그래밍 가능한 패브릭이 충분한 이용 가능한 공간을 포함하는지에 관한 결정은 구현 비용의 계산에 의해 산출되는 임의의 결과를 무효화할 수 있는 이진 타입의 변수로서 구현의 비용 내에 직접 통합될 수 있다. 다른 예에서, 불충분한 공간이 PSC를 구현하기 위해 프로그래밍 가능한 패브릭 내에서 이용 가능한 경우, 구현의 비용이 실행의 비용 보다 약간 클 때처럼 PSC가 프로그래밍 가능한 패브릭 내에서 구현되지 않는다는 것을 보장하기에 충분히 큰 승수(multiplier)가 이용될 수 있다.
언급된 바와 같이, 구현의 비용 및 실행의 비용은 일반적으로 설계 프로세스 동안 알려지거나 결정되고 프로그램 코드 내에서 특정될 수 있다. 그러나 하나 이상의 비용 컴포넌트들은 IC의 프로그래밍 가능한 패브릭 내의 이용 가능한 공간의 양 및 특정한 프로세스가 PSC로서 프로그래밍 가능한 패브릭 내에서 이미 구현되었는지 여부를 포함(그러나 이들 제한되지 않음)하는 IC의 현재 동작 상태에 따라 변할 수 있다. 언급된 바와 같이, PS는 추가로 구현의 비용 및/또는 실행의 비용을 결정하기 위해 특정한 방식 또는 기능를 선택할 수 있다.
단계(540)에서, PS는 구현의 비용을 실행의 비용에 비교할 수 있다. 단계(545)에서, PS는 프로그래밍 가능한 패브릭에 프로세스를 오프로딩할지 여부를 결정할 수 있다. 실행의 비용이 구현의 비용을 초과하거나 퍼센티지 또는 미리 결정된 양만큼 구현의 비용을 초과할 때, PS는 프로그래밍 가능한 패브릭으로의 프로세스의 오프로딩이 가치가 있다고 결정할 수 있고 수행될 것이다. 프로세스가 프로그래밍 가능한 패브릭으로 오프로딩되지 않을 때, 방법(500)은 실행되고 있는 프로그램 코드의 부분인 하나 이상의 부가적인 프로세스들을 평가하기 위해 단계(510)로 역으로 루프한다. 프로세스가 오프로딩될 때, 방법은 단계(550)로 진행할 수 있다.
단계(550)에서, PS는 PSC가 프로그래밍 가능한 패브릭 내에서 구현되는지 여부를 결정할 수 있다. 단계(550)는 명확성 및 예시의 목적들을 위해 도시되지만, 정보는 예를 들어, 단계(520)로부터 PS에게 이미 알려지기 때문에 별개의 프로세싱 단계로서 수행될 필요가 없다. 예를 들어, PSC가 프로그래밍 가능한 패브릭 내에서 구현되지 않을 때 구성 프로세스가 PSC를 구현하도록 수행되어야 한다는 것을 예시하기 위해 단계(550)가 도시된다.
임의의 경우에, 프로세스가 PSC로서 프로그래밍 가능한 패브릭 내에서 이미 구현될 때, 방법(500)이 단계(560)로 진행할 수 있다. 프로세스가 PSC로서 프로그래밍 가능한 패브릭 내에서 아직 구현되지 않을 때, 방법(500)은 단계(555)로 진행할 수 있다. 단계(555)에서, PSC는 프로그래밍 가능한 패브릭 내에서 구현된다. PSC는 구현될 PSC를 특정하는 구성 데이터의 로딩을 통해 구현될 수 있다. 일 실시예에서, 프로그래밍 가능한 패브릭의 구성은 PS에 의해 제어, 예를 들어, 개시될 수 있다. 예를 들어, PS가 외부 소스로부터 IC 내로 구성 데이터를 로딩하고 구성 데이터를 구성 제어기에 제공할 수 있다. 언급된 바와 같이, 프로그래밍 가능한 패브릭이 전체적으로 재구성될 수 있거나, 프로그래밍 가능한 패브릭의 부분이 동적인 부분적인 재구성을 경험할 수 있다. 프로그래밍 가능한 패브릭의 구성이 완료되면, PSC는 거기서 물리적으로 구현된다.
단계(560)에서, PS는 프로세스를 PSC에 오프로딩할 수 있다. 단계(565)에서, PSC는 오프로딩된 프로세스를 수행할 수 있다. 이에 따라, 단계(570)에서, 오프로딩된 프로세스의 수행에 있어 PSC에 의해 생성된 임의의 결과 데이터는 PS에 대해 이용 가능하게 될 수 있다.
도 6 내지 도 8은 IC의 프로그래밍 가능한 패브릭 내의 회로로의 프로세스의 오프로딩을 구현하기 위한 다양한 기법들을 예시한다. 도 6 내지 도 8 각각은 본 명세서 내에서 기술되는 바와 같이 IC를 이용하여 구현될 수 있다. 도 6 내지 도 8 각각은 프로그래밍 가능한 패브릭으로 프로세스를 오프로딩하도록 하는 결정이 내려지고 프로그래밍 가능한 패브릭 내의 PSC가 구현된 상태에서 시작할 수 있다.
도 6은 IC의 프로그래밍 가능한 패브릭 내에 구현되는 회로에 프로세스를 오프로딩하는 방법(600)을 예시하는 제 2 흐름도이다. 도 6은 오프로딩이 완전하지 않은 경우, PS에 의해 주로 구동되는 경우를 예시한다. 방법(600)은 오프로딩될 프로세스가 몹시 복잡하고 비교적 작은 데이터의 세트 상에서 동작할 때 적용될 수 있는 이용 경우를 예시한다. 도 6에서 예시된 예에서, 데이터는 PS로부터 프로그래밍 가능한 패브릭으로 푸시(push)되고 결과들은 프로그래밍 가능한 패브릭으로부터 PS에 의해 획득된다.
단계(605)에서, PS는 선택적으로 입력으로서 프로세스-특유의 회로에 제공될 소스 데이터를 계산할 수 있다. 단계(610)에서, PS는 소스 데이터를 PSC에 직접 푸시할 수 있다. 예를 들어, PS는 인터페이스(256B)와 같은 슬래이브 인터페이스를 통해 소스 데이터를 푸시하고 소스 데이터를 PSC에 푸시하도록 DMA를 셋업하거나, 또는 FMIO 인터페이스(252)를 통해 데이터를 PSC에 송신할 수 있다. 단계(615)에서, PSC는 소스 데이터를 프로세싱할 수 있다. PSC가 소스 데이터의 프로세싱을 마무리할 때, PSC는 PS에 의한 검색을 위해 프로그래밍 가능한 패브릭 내의 메모리 위치에 생성되는 임의의 결과 데이터를 저장할 수 있다.
단계(620)에서, PS는 PSC가 소스 데이터의 프로세싱을 완료할 때를 결정하기 위해 프로그래밍 가능한 패브릭 내에 회로를 폴(poll)링할 수 있다. 프로세서는 예를 들어, 비지(busy) 또는 프리(free)로서 PSC의 상태를 표시하는, 프로그래밍 가능한 패브릭 내의 특정한 레지스터를 폴링할 수 있다. 레지스터는 PSC의 부분일 수 있거나 PSC 외부에 있을 수 있지만, 여전히 프로그래밍 가능한 패브릭 내에 위치될 수 있다. 비지 상태는 PSC가 소스 데이터의 프로세싱을 마무리하지 않았음을 표시한다. 프리 상태는 PSC가 소스 데이터의 프로세싱을 완료하였고 및/또는 결과 데이터가 이용 가능함을 표시한다.
단계(625)에서, PS는 PSC의 상태를 결정할 수 있다. 완료되면, 결과 데이터가 이용 가능하고, 방법(600)은 단계(630)로 진행할 수 있다. 완료되지 않으면, PSC는 소스 데이터의 프로세싱을 마무리하지 않고 방법(600)은 PSC 상태를 계속 폴링하도록 단계(620)로 역으로 루프할 수 있다. 단계(630)에 이어서, 결과 데이터가 이용 가능할 때, PS는 프로그래밍 가능한 패브릭 내의 메모리로부터 결과 데이터를 판독할 수 있다. 데이터는 예를 들어, DMA 전달 등을 통해 판독될 수 있다.
도 7은 IC의 프로그래밍 가능한 패브릭 내에서 구현되는 회로로의 프로세스의 오프로딩의 방법(700)을 예시하는 제 3 흐름도이다. 도 6은 PS에 의해 구동되는 오프로딩 기법을 예시하는 반면에, 도 7은 더 엄격한 통합 레벨이 PS와 PSC 간에 존재하는 예를 예시한다. 이에 따라 단계(705)에서, PS는 선택적으로 계산을 위한 입력으로서 PSC에 제공될 임의의 소스 데이터를 계산할 수 있다. 일 실시예에서, 오프로딩될 프로세스가 입력으로서 소스 데이터를 요구할 때, PS는 그 소스 데이터를 계산하거나 획득할 수 있다. 프로그래밍 가능한 패브릭과의 더 엄격한 통합을 용이하게 하기 위해, PS는 PS 내부에 있는 메모리 내의 메모리 위치에 소스 데이터를 저장할 수 있다. 예를 들어, 계산되면, 소스 데이터는 OCM, L1 캐시, 또는 L2 캐시 내의 어드레스에 저장될 수 있다.
단계(710)에서, PS는 기술자(descriptor)를 생성 및 저장할 수 있다. 기술자는 오프로딩될 프로세스를 구현 또는 수행하기 위해 PSC에 대한 참조들 및/또는 명령들을 포함하는 메모리의 블록 또는 세그먼트일 수 있다. 소스 데이터와 같이, 기술자는 OCM, L1 캐시 또는 L2 캐시에 저장될 수 있다. 기술자는 소스 데이터에 대한 포인터들 또는 참조들, 결과 데이터를 저장할 장소, 예를 들어, 어느 어드레스 및 어느 메모리에 결과 데이터를 저장할지에 관한 명령 등을 포함할 수 있다.
일 실시예에서, 기술자를 생성할 때, PS는 가상 어드레스들을 물리적 어드레스로 또는 그 반대로 변환하기 위한 어드레스 변환을 수행할 수 있다. 일반적으로, PS는 가상 어드레스들을 이해 또는 해석할 수 있다. 그러나 그 내부에 구현되는 임의의 회로를 포함해서 프로그래밍 가능한 패브릭은 물리적 어드레스들을 가상 어드레스들로 또는 그 반대로 변환할 수 없다. 프로그래밍 가능한 패브릭은 물리적 어드레스들만을 이해한다. 그럼으로써 기술자 내에 특정된 임의의 어드레스들은 프로그래밍 가능한 패프릭에 의한 이용을 위해 물리적인 어드레스로서 특정되어야 한다.
단계(715)에서, PS는 프로세스가 오프로딩할 준비가 되었음을 PSC에 통지할 수 있다. 통지는 예를 들어, 소스 데이터가 PSC에 의한 프로세싱을 위해 이용 가능하다는 것을 표시할 수 있다. PS는 다양한 상이한 매커니즘들 중 임의의 것을 이용하여 PSC에 통지할 수 있다. 예를 들어, PS는 PSC에 의해 모니터링되는 프로그래밍 가능한 패브릭 내의 레지스터에 또는 PSC 그 자체 내의 레지스터에 인터페이스들(256) 또는 FMIO 인터페이스(252) 중 하나를 통해 기록할 수 있다. 단계(720)에서, 레지스터가 기록되거나 특정한 값으로 기록되었음을 결정하는 PSC에 응답하여, PSC는 프로세서 내의 메모리로부터 기술자를 판독할 수 있다. 예를 들어, PSC는 레지스터가 통지 목적들을 위해 기록될 때 기술자들이 저장되거나 위치되는 PS 내의 특정한 메모리 어드레스를 판독하도록 구성될 수 있다.
단계(725)에서, PSC는 기술자에 의해 특정한 소스 데이터를 검색 또는 판독할 수 있다. 단계(730)에서, PSC는 소스 데이터를 프로세싱하고 결과 데이터를 생성 또는 출력할 수 있다. 단계(735)에서, PSC는 기술자에 의해 특정된 위치에 결과 데이터를 저장할 수 있다. 결과 데이터는 또한 PS의 내부 메모리, 예를 들어, OCM, L1 캐시 또는 L2 캐시에 저장될 수 있다.
단계(740)에서, PSC는 결과 데이터가 이용 가능함을 PS에 통지할 수 있다. 예를 들어, PSC는 PS에 의해 모니터링되는 내부 메모리의 어드레스, 예를 들어, OCM, L1 캐시 또는 L2 캐시내의 어드레스에 기록할 수 있다. 일 실시예에서, 통지가 기록되거나 제공되는 어드레스는 또한 기술자에 의해 특정될 수 있다. 메모리 어드레스가 기록되었음을 예를 들어, 결과 데이터가 PSC로부터 준비되었음을 표시하는 값을 갖는다고 결정할 때 PS는 PSC가 기술자에 의해 특정된 바와 같은 결과 데이터를 저장하는 위치로부터 결과 데이터를 판독할 수 있다. 캐시 일관성(cache coherency)은 특정한 포트들, 예를 들어, 인터페이스(256C)가 이용될 때 달성될 수 있다는 것이 인지되어야 한다. 다른 인터페이스들, 예를 들어, 인터페이스(256A, 256B 및/또는 256D)가 PS의 캐시들 또는 내부 메모리들에 대한 액세스를 제공하지 않을 수 있다. 단계(745)에서, PS는 결과 데이터를 검색 또는 판독할 수 있다.
기술자들의 이용은 동일한 PSC가 매번 호출될지라도 소스 데이터 및 임의의 결과 데이터가 저장된 위치가 변경되도록 허용한다는 것이 인지되어야 한다. PSC는 열거된 위치로부터 소스 데이터를 획득하고 열거된 위치에 결과 데이터를 저장하도록 기술자에 의해 특정된 물리적인 어드레스들을 판독할 수 있다. 이러한 위치들은 동일한 PSC에 대해 또는 상이한 PSC들에 대해 의도된 복수의 기술자들 각각에 걸쳐서 상이할 수 있다.
도 8은 IC의 프로그래밍 가능한 패브릭 내에서 구현되는 회로에 프로세스를 오프로딩하는 방법(800)을 예시하는 제 4 흐름도이다. 도 8은 트랜잭션 셋업 및 PSC와 PS간의 주고받기(handshaking)와 같은 활동들에 의해 압도됨 없이 프로세스의 복수의 파인-그레인드(fine-grained) 동작들을 구현하기 위해 PS가 활용할 수 있는 오프로딩 매커니즘을 예시한다. 도 8은 기술자의 이용을 또한 레버리지(leverage)하는 도 7의 대안의 매커니즘을 예시한다. 일반적으로, 복수의 기술자들이 PSC에 제공된다. PSC는 아래에서 기술되는 바와 같이 인터럽트되지 않는 직렬 방식으로 기술자들 각각을 실행할 수 있다.
단계(805)에서, PS는 선택적으로 계산을 위한 입력으로서 PSC에 제공될 임의의 소스 데이터를 계산할 수 있다. 언급된 바와 같이, 일단 계산되면, 소스 데이터는 OCM, L1 캐시 또는 L2 캐시 내에 저장될 수 있다. 다른 실시예에서, 소스 데이터는 IC의 프로그래밍 가능한 패브릭에 위치되는 메모리 내에 저장될 수 있다.
단계(810)에서, PS는 복수의 기술자들을 생성 및 저장할 수 있다. 각각의 기술자는 오프로딩될 프로세스를 구현하거나 수행하도록 PSC에 대한 기준들 및/또는 명령들을 포함하는 메모리의 블록 또는 세그먼트일 수 있다. 일 실시예에서, PS는 PS의 내부 메모리들 중 하나 내에 복수의 기술자들을 저장할 수 있다. 다른 실시예에서, PS는 PSC에 의해 또는 PSC 내에서 액세스 가능한 프로그래밍 가능한 패브릭 내의 큐(queue)와 같은 메모리 내에 복수의 기술자들을 저장할 수 있다.
언급된 바와 같이, 각각의 기술자는 입력으로서 이용될 임의의 소스 데이터를 획득할 위치, 예를 들어, 물리적인 메모리 어드레스 및 임의의 결과 데이터가 저장되어야 하는 위치를 특정할 수 있다. 복수의 기술자들의 프로세싱을 실시하기 위해, 앞서 언급된 정보 외에, 각각의 기술자는 링크된 기술자들의 체인을 형성하는 복수의 기술자들에서 다음 기술자로의 포인터를 포함하거나 특정할 수 있다. 기술자들의 체인 내의 마지막 기술자는 다음 기술자로의 포인터의 부재에 의해 특징화될 수 있다.
기술자 내에서 특정될 수 있는 부가적인 정보는 예를 들어, 하드웨어에서 수행될 계산 단계에 대한 표시자, 데이터를 획득하고 데이터가 저장되어야 하는 버퍼 포인터들, 편지함들 또는 PS와의 통신 또는 통지의 목적들을 위한 레지스터 어드레스들을 포함할 수 있다. 기술된 바와 같은 복수의 기술자들을 이용함으로써, PSC는 어떠한 추가의 기술자들도 남아있지 않을 때까지 프로세싱을 계속할 수 있다. 예를 들어, PSC는 기술자가 특정한 메모리 내에 또는 큐 내에 저장될 때를 검출하도록 구성될 수 있다. PSC는 마지막 기술자가 프로세싱될 때까지 PS로부터 추가의 명령 없이 자동으로 복수의 기술자들 각각을 계속 프로세싱할 수 있다. 이러한 배열은 복수의 기술자들에서 최초의 기술자의 프로세싱을 위한 셋업을 요구한다. 그러나 후속 기술자들에 대한 셋업이 최소화되거나 제거된다.
셋업(815)에서, PSC는 복수의 기술자들의 기술자를 패치(fetch)할 수 있다. 예를 들어, PSC는 PS에 의해 생성되고 저장되는 복수의 기술자들 중 최초의 기술자의 실존(existence)에 대해 미리 결정된 메모리 위치를 검사하도록 구성될 수 있다. PSC는 현재의 기술자로서 프로세싱할 기술자를 패치할 수 있다. 단계(820)에서, PSC는 현재의 기술자를 프로세싱할 수 있다. 예를 들어, PSC는 현재의 기술자에 의해 표시되는 바와 같이, 임의의 특정된 소스 데이터를 검색하고 결과 데이터를 생성하도록 소스 데이터를 프로세싱하고 결과 데이터를 저장할 수 있다.
단계(825)에서, PSC는 프로세싱되기 위한 추가의 기술자가 남아있는지를 결정할 수 있다. 예를 들어, PSC는 현재의 기술자가 다음 기술자로의 포인터를 특정하는지를 결정할 수 있다. 현재의 기술자가 다음 기술자로의 포인터를 특정할 때, PSC는 단계(830)를 지속할 수 있다. 단계(830)에서, PSC는 포인터에 의해 특정된 바와 같이 다음 기술자를 선택하고 단계(815)로 역으로 루프한다. 현재의 기술자가 다음 기술자로의 포인터를 특정하지 않을 때, PSC는 현재의 기술자가 마지막 기술자라고 결정한다. 이에 따라 PSC는 기술자들의 프로세싱을 중단하고 단계(835)로 지속할 수 있다.
단계(835)에서, PSC가 복수의 기술자들 각각의 프로세싱을 완료하면, PSC는 결과 데이터가 이용 가능하다는 것을 PS에 통지할 수 있다. 일 실시예에서, PSC는 기술자들의 프로세싱의 완료에 응답하여, PS가 결과 데이터를 검색할 수 있는 특정한 위치에 결과 데이터를 저장할 수 있다. 그 위치는 기술자들의 하나 이상의 개별의 기술자들로부터의 결과 데이터가 저장될 수 있는 중간 위치(들)와 상이할 수 있다.
표시를 수신하는 것에 응답하여, PS는 결과 데이터를 획득할 수 있다. 예를 들어, PS는 개별 스레드(thread)를 실행할 수 있고, 그럼으로써 PSC로부터 결과 데이터의 가용성을 대기하는 동안 PS가 다른 작업들을 수행하도록 허용한다. 다른 실시예에서, PS는 편지함, 세마포어(semaphore), 또는 인터럽트를 활용하여 PS에 통지할 수 있다.
일반적으로, 프로세스를 오프로딩하기 위한 부적절한 기법들을 이용하는 것은 프로그래밍 가능한 패브릭에 소스 데이터를 제공하는 것과 같은 물류 동작들(logistical operations) 또는 일정한 폴링(constant polling)에 의해 압도되는 시간 및/또는 전력의 임의의 절감들을 발생시킬 수 있다. 이에 관하여, 구현의 비용을 계산할 때, 구현의 비용은 프로그래밍 가능한 패브릭에 프로세스를 오프로딩하는데 이용되는 특정한 기법에 따라 변할 수 있다는 것이 인지되어야 한다. 따라서 예를 들어, 선택된 프로세스의 구현의 비용은 도 6, 도 7 또는 도 8의 방법을 이용하여 오프로딩이 수행되는지 여부에 따라 변할 것이다.
도면들에서 흐름도들은 본 명세서 내에서 개시되는 하나 이상의 실시예들에 따른 시스템들, 방법들 및 컴퓨터 프로그램 물건들의 가능한 구현들의 아키텍처, 기능 및 동작을 예시한다. 이에 관하여, 흐름도들의 각각의 블록은 특정된 논리적 기능(들)을 구현하는 실행 가능한 프로그램 코드의 하나 이상의 부분들을 포함하는 모듈, 세그먼트, 또는 코드의 부분을 표현할 수 있다.
몇몇 대안의 구현들에서, 블록들에서 언급되는 기능들은 도면들에서 언급되는 순서에 벗어나서 발생할 수 있다는 것이 주의되어야 한다. 예를 들어, 연속적으로 도시된 2개의 블록들은 사실상, 실질적으로 동시에 실행될 수 있거나, 또는 블록들을 때때로 관련된 기능에 의존하여 역순서로 실행될 수 있다. 흐름도 예시들의 각각의 블록, 및 흐름도 예시들에서 블록들의 조합들은 특정한 기능, 또는 동작들 또는 특수 목적 하드웨어 및 실행 가능한 명령들의 조합들을 수행하는 특수 목적 하드웨어-기반 시스템들에 의해 구현될 수 있다는 것이 또한 주의되어야 한다.
하나 이상의 실시예들은 하드웨어로 또는 하드웨어 및 소프트웨어의 조합으로 실현될 수 있다. 하나 이상의 실시예들은 하나의 시스템에 중앙화된 방식으로 또는 상이한 엘리먼트들이 몇 개의 상호연결된 시스템들에 걸쳐서 스프레딩되는 분배된 방식으로 실현될 수 있다. 여기서 기술된 방법들의 적어도 부분을 수행하도록 적응된 임의의 종류의 데이터 프로세싱 시스템 또는 다른 장치가 적합하게 된다.
하나 이상의 실시예들은 추가로 여기서 기술된 방법들의 구현을 가능하게 하는 모든 특징들을 포함하는 컴퓨터 프로그램 물건과 같이 디바이스에 임배딩될 수 있다. 디바이스는 메모리 및 프로세서를 포함하는 시스템에 로딩되어 실행될 때 시스템으로 하여금 본 명세서 내에 기술되는 기능들 중 적어도 일부를 수행하게 하는 프로그램 코드를 저장한 데이터 저장 매체, 예를 들어, 비-일시적인 컴퓨터-이용 가능 또는 컴퓨터-판독 가능한 매체를 포함할 수 있다. 데이터 저장 매체들의 예들은 광학 매체들, 자기 매체들, 자기-광학 매체들, 랜덤 액세스 메모리 또는 하드 디스크(들)와 같음 컴퓨터 메모리 등을 포함(그러나 이들로 제한되지 않음)할 수 있다.
용어들 "컴퓨터 프로그램", "소프트웨어", "애플리케이션", "컴퓨터-이용 가능한 프로그램 코드", "프로그램 코드", "실행 가능한 코드" 및 이들의 변동물들 및/또는 조합들은 제시된 맥락에서, 정보 프로세싱 성능을 갖는 시스템으로 하여금 직접 또는 a) 다른 언어, 코드 또는 표기(notation)로의 변환; b) 상이한 자료 형태로 재생성 중 어느 하나 또는 둘 다 이후에 특정한 기능을 수행하게 하도록 의도된 명령들의 세트의 임의의 언어, 코드 또는 표기의 형태로 된 임의의 표현을 의미한다. 예를 들어, 프로그램 코드는 서브루틴, 기능, 프로시저, 객체 방법, 객체 구현, 실행 가능한 애플리케이션, 애플릿, 서블릿, 소스 코드, 객체 코드, 공유 라이브러리/동적 로드 라이브러리 및/또는 컴퓨터 시스템 상의 실행을 위해 설계된 명령들의 다른 시퀀스를 포함(그러나 이들로 제한되지 않음)할 수 있다.
여기서 이용된 바와 같은 단수로된 용어들은 하나 보단 하나 이상으로서 정의된다. 여기서 이용된 바와 같은 용어 "복수의"는 2개 보단 2개 이상으로서 정의된다. 여기서 이용된 바와 같은 용어 "다른(another)"는 적어도 제 2 또는 그 이상으로서 정의된다. 여기서 이용된 바와 같은 용어 "포함하는" 및/또는 "갖는"은 포함하는 것, 즉 개방 언어로서 정의된다. 여기서 이용된 바와 같은 용어 "결합되는"은 달리 언급되지 않으면 어떠한 개재된 엘리먼트들도 없이 직접 또는 하나 이상의 개재된 엘리먼트들을 통해 간접적으로 든지 간에 하여간, 연결되는 것으로서 정의된다. 2개의 엘리먼트들은 또한 통신 채널, 통로, 네트워크 또는 시스템을 통해 자기적으로, 전기적으로 또는 통신 가능하게 결합될 수 있다.
본 명세서 내에서 개시되는 하나 이상의 실시예들은 본 발명의 사상 또는 본질적인 속성으로부터 벗어남 없이 다른 형태들로 실현될 수 있다. 이에 따라, 하나 이상의 실시예들의 범위를 표시하는 것으로서 위의 명세서 보단 오히려 아래의 청구항들에 대한 참조가 이루어져야 한다.

Claims (15)

  1. 집적 회로(200)로서,
    프로그램 코드를 실행하도록 구성된 프로세서 시스템(202); 및
    상기 집적 회로의 프로그래밍 가능한 회로부(204) 내에 구현되는 프로세스-특유의 회로(process-specific circuit)(282)
    를 포함하고,
    상기 프로세스-특유의 회로는 상기 프로세서 시스템에 결합되고, 상기 프로세서 시스템에 의해 오프로딩(offloading)되는 프로세스를 수행하도록 구성되고,
    상기 프로세서 시스템은 현장에서(in the field) 상기 집적 회로의 동작 동안 동적으로 내려진 결정에 따라, 상기 프로세스를 수행하기 위해 프로그램 코드를 실행하는 대신 상기 프로세스를 상기 프로세스-특유의 회로에 오프로딩하고(510-545);
    상기 프로세서 시스템은 상기 프로세스를 오프로딩할지 여부에 대한 결정을 내리는데 이용되는 제1 기능으로부터 현장에서 상기 집적 회로의 동작 동안 동적으로 상기 프로세스를 오프로딩할지 여부에 대한 결정을 내리는데 이용되는 제2 기능으로 스위칭하도록 구성되는,
    집적 회로.
  2. 제1항에 있어서,
    상기 프로세서 시스템은 또한,
    상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 전력 소비의 감소에 따라 상기 프로세스를 상기 프로세스-특유의 회로에 오프로딩할지 여부를 결정하도록(535, 540) 구성되는,
    집적 회로.
  3. 제1항에 있어서,
    상기 프로세서 시스템은 또한,
    상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 완료 시간의 개선에 따라 상기 프로세스를 상기 프로세스-특유의 회로에 오프로딩할지 여부를 결정하도록(535, 540) 구성되는,
    집적 회로.
  4. 제1항에 있어서,
    상기 프로세서 시스템은 또한,
    상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 레이턴시의 감소에 따라 상기 프로세스를 상기 프로세스-특유의 회로에 오프로딩할지 여부를 결정하도록(535, 540) 구성되는,
    집적 회로.
  5. 삭제
  6. 제3항에 있어서,
    상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 완료 시간의 개선은,
    상기 프로세스를 위해 필요한 소스 데이터를 상기 프로세스-특유의 회로에 제공하기 위해 복수의 메모리들 중 어느 메모리가 이용되는지에 의존하는(525, 530),
    집적 회로.
  7. 제1항 내지 제4항 및 제6항 중 어느 한 항에 있어서,
    상기 프로세서 시스템은 또한,
    상기 프로그래밍 가능한 회로 내에 상기 프로세스-특유의 회로를 구현하기 위해 이용 가능한 공간의 양이 존재하는지 여부를 결정하도록(525, 530) 구성되는,
    집적 회로.
  8. 제1항 내지 제4항 및 제6항 중 어느 한 항에 있어서,
    상기 프로그래밍 가능한 회로부는,
    프로그래밍 가능한 패브릭이고,
    상기 프로세서 시스템은 또한,
    상기 프로세스-특유의 회로를 구현하기 위해 상기 프로그래밍 가능한 패브릭의 적어도 일부분의 동적 재구성을 개시하도록(555) 구성되는,
    집적 회로.
  9. 집적 회로(200) 내에서 프로세서 시스템을 확장하는 방법으로서,
    상기 집적 회로 ― 상기 집적 회로는 프로그래밍 가능한 회로부(204)를 포함함 ― 내에서 구현되는 프로세서 시스템(202) ― 상기 프로세서 시스템은 상기 프로그래밍 가능한 회로부에 결합됨 ― 내에서 프로그램 코드를 실행하는 단계(505);
    현장에서 상기 집적 회로의 동작 동안 동적으로 내려진 결정에 따라, 프로세스를 수행하기 위해 상기 프로세서 시스템 내에서 상기 프로그램 코드를 실행하는 대신 상기 프로그래밍 가능한 회로부 내에 구현되는 프로세스-특유의 회로(282)에 상기 프로세스를 오프로딩하는 단계(510-545); 및
    오프로딩되면, 상기 프로세스-특유의 회로로부터의 상기 프로세스의 결과를 상기 프로세서 시스템에 대해 이용 가능하게 만드는 단계(570)를 포함하고,
    상기 프로세서 시스템은 상기 프로세스를 오프로딩할지 여부에 대한 결정을 내리는데 이용되는 제1 기능으로부터 현장에서 상기 집적 회로의 동작 동안 동적으로 프로세스를 오프로딩할지 여부에 대한 결정을 내리는데 이용되는 제2 기능으로 스위칭하도록 구성되는,
    집적 회로 내에서 프로세서 시스템을 확장하기 위한 방법.
  10. 제9항에 있어서,
    상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 전력 이용의 감소에 따라 상기 프로세스-특유의 회로를 이용하여 상기 프로세스를 수행할지 여부를 결정하는 단계(535, 540)를 더 포함하는,
    집적 회로 내에서 프로세서 시스템을 확장하기 위한 방법.
  11. 제9항에 있어서,
    상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 레이턴시의 감소에 따라 상기 프로세스-특유의 회로를 이용하여 상기 프로세스를 수행할지 여부를 결정하는 단계(535, 540)를 더 포함하는,
    집적 회로 내에서 프로세서 시스템을 확장하기 위한 방법.
  12. 제9항에 있어서,
    상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 완료 시간의 감소에 따라 상기 프로세스-특유의 회로를 이용하여 상기 프로세스를 수행할지 여부를 결정하는 단계(535, 540)를 더 포함하는,
    집적 회로 내에서 프로세서 시스템을 확장하기 위한 방법.
  13. 삭제
  14. 제12항에 있어서,
    상기 프로세서 시스템을 이용하는 대신, 상기 프로세스-특유의 회로를 이용한 상기 프로세스의 구현을 통해 달성되는 완료 시간의 개선의 측정은,
    상기 프로세스-특유의 회로에 의해 상기 프로세스를 수행하는데 필요한 소스 데이터를 제공하기 위해 복수의 메모리들 중 어느 메모리가 이용되는지에 의존하는(535, 540),
    집적 회로 내에서 프로세서 시스템을 확장하기 위한 방법.
  15. 제9항 내지 제12항 및 제14항 중 어느 한 항에 있어서,
    상기 프로그램 코드에 의해 특정된 복수의 프로세스들로부터 프로세스를 선택하는 단계(510);
    선택된 프로세스를 하드웨어에서 구현하는, 상기 프로세스-특유의 회로를 특정하는 구성 데이터를 선택하는 단계(515); 및
    상기 집적 회로의 상기 프로그래밍 가능한 회로부 내에 상기 프로세스-특유의 회로를 구현하기 위해 선택된 구성 데이터를 로딩하는 단계(555)를 더 포함하는,
    집적 회로 내에서 프로세서 시스템을 확장하기 위한 방법.
KR1020137020304A 2011-01-13 2011-12-08 집적 회로 내의 프로세서 시스템의 확장 KR101519771B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/005,962 2011-01-13
US13/005,962 US9135213B2 (en) 2011-01-13 2011-01-13 Extending a processor system within an integrated circuit and offloading processes to process-specific circuits
PCT/US2011/064038 WO2012096735A1 (en) 2011-01-13 2011-12-08 Extending a processor system within an integrated circuit

Publications (2)

Publication Number Publication Date
KR20130107361A KR20130107361A (ko) 2013-10-01
KR101519771B1 true KR101519771B1 (ko) 2015-05-12

Family

ID=45446196

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137020304A KR101519771B1 (ko) 2011-01-13 2011-12-08 집적 회로 내의 프로세서 시스템의 확장

Country Status (6)

Country Link
US (1) US9135213B2 (ko)
EP (1) EP2664067B1 (ko)
JP (1) JP6008874B2 (ko)
KR (1) KR101519771B1 (ko)
CN (1) CN103354977B (ko)
WO (1) WO2012096735A1 (ko)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9436623B2 (en) * 2012-09-20 2016-09-06 Intel Corporation Run-time fabric reconfiguration
US9497050B2 (en) * 2012-09-24 2016-11-15 Xilinx, Inc. Clock domain boundary crossing using an asynchronous buffer
US10079019B2 (en) 2013-11-12 2018-09-18 Apple Inc. Always-on audio control for mobile device
US9778728B2 (en) 2014-05-29 2017-10-03 Apple Inc. System on a chip with fast wake from sleep
US10031000B2 (en) 2014-05-29 2018-07-24 Apple Inc. System on a chip with always-on processor
US9619377B2 (en) 2014-05-29 2017-04-11 Apple Inc. System on a chip with always-on processor which reconfigures SOC and supports memory-only communication mode
US10089197B2 (en) 2014-12-16 2018-10-02 Intel Corporation Leverage offload programming model for local checkpoints
CN104951334B (zh) * 2015-05-22 2018-01-23 中国电子科技集团公司第十研究所 FPGA双片QSPI flash的程序加载方法
US9678150B2 (en) * 2015-10-27 2017-06-13 Xilinx, Inc. Methods and circuits for debugging circuit designs
US10268847B2 (en) * 2016-04-21 2019-04-23 LDA Technologies Ltd. System and method for repurposing communication ports as host interface or data card connections
US10482054B1 (en) 2016-09-09 2019-11-19 Xilinx, Inc. AXI-CAPI adapter
US10394991B2 (en) 2016-10-06 2019-08-27 Altera Corporation Methods and apparatus for dynamically configuring soft processors on an integrated circuit
TWI604326B (zh) 2016-10-27 2017-11-01 財團法人工業技術研究院 基於fpga之系統功率評估裝置與方法
US11023025B2 (en) * 2016-11-16 2021-06-01 Cypress Semiconductor Corporation Microcontroller energy profiler
CN107291655B (zh) * 2017-06-14 2020-10-09 北方电子研究院安徽有限公司 一种带APB总线接口的SoC自举IP电路
US10528513B1 (en) 2018-04-30 2020-01-07 Xilinx, Inc. Circuit for and method of providing a programmable connector of an integrated circuit device
CN110825530B (zh) * 2018-08-10 2022-12-23 昆仑芯(北京)科技有限公司 用于人工智能芯片的指令执行方法和装置
CN110825514B (zh) 2018-08-10 2023-05-23 昆仑芯(北京)科技有限公司 人工智能芯片以及用于人工智能芯片的指令执行方法
US11025544B2 (en) 2019-06-07 2021-06-01 Intel Corporation Network interface for data transport in heterogeneous computing environments

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100537813B1 (ko) * 1998-05-26 2005-12-20 어드밴스드 마이크로 디바이시즈, 인코포레이티드 에뮬레이션 코프로세서
US20060248317A1 (en) * 2002-08-07 2006-11-02 Martin Vorbach Method and device for processing data

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5581482A (en) 1994-04-26 1996-12-03 Unisys Corporation Performance monitor for digital computer system
US5903281A (en) * 1996-03-07 1999-05-11 Powertv, Inc. List controlled video operations
US5867644A (en) 1996-09-10 1999-02-02 Hewlett Packard Company System and method for on-chip debug support and performance monitoring in a microprocessor
US5835702A (en) 1996-10-21 1998-11-10 International Business Machines Corporation Performance monitor
US6233531B1 (en) 1997-12-19 2001-05-15 Advanced Micro Devices, Inc. Apparatus and method for monitoring the performance of a microprocessor
US7085670B2 (en) 1998-02-17 2006-08-01 National Instruments Corporation Reconfigurable measurement system utilizing a programmable hardware element and fixed hardware resources
JP3636986B2 (ja) * 2000-12-06 2005-04-06 松下電器産業株式会社 半導体集積回路
US6961919B1 (en) * 2002-03-04 2005-11-01 Xilinx, Inc. Method of designing integrated circuit having both configurable and fixed logic circuitry
US7308564B1 (en) 2003-03-27 2007-12-11 Xilinx, Inc. Methods and circuits for realizing a performance monitor for a processor from programmable logic
EP1615141B1 (en) 2004-07-01 2018-03-07 Harman Becker Automotive Systems GmbH A computing architecture for a mobile multimedia system used in a vehicle
JP2007207136A (ja) * 2006-02-06 2007-08-16 Nec Corp データ処理装置、データ処理方法、及びデータ処理プログラム
JP2009163328A (ja) * 2007-12-28 2009-07-23 Toshiba Corp 情報処理装置及びその制御方法
US20090271536A1 (en) * 2008-04-24 2009-10-29 Atmel Corporation Descriptor integrity checking in a dma controller
JP2010226524A (ja) * 2009-03-24 2010-10-07 Fuji Xerox Co Ltd プログラマブル論理回路、半導体集積回路装置、情報処理システムおよび制御プログラム
US8443263B2 (en) * 2009-12-30 2013-05-14 Sandisk Technologies Inc. Method and controller for performing a copy-back operation

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100537813B1 (ko) * 1998-05-26 2005-12-20 어드밴스드 마이크로 디바이시즈, 인코포레이티드 에뮬레이션 코프로세서
US20060248317A1 (en) * 2002-08-07 2006-11-02 Martin Vorbach Method and device for processing data

Also Published As

Publication number Publication date
WO2012096735A1 (en) 2012-07-19
CN103354977A (zh) 2013-10-16
US20120185674A1 (en) 2012-07-19
JP6008874B2 (ja) 2016-10-19
EP2664067A1 (en) 2013-11-20
JP2014509106A (ja) 2014-04-10
US9135213B2 (en) 2015-09-15
KR20130107361A (ko) 2013-10-01
EP2664067B1 (en) 2015-08-12
CN103354977B (zh) 2016-11-16

Similar Documents

Publication Publication Date Title
KR101519771B1 (ko) 집적 회로 내의 프로세서 시스템의 확장
US9454498B1 (en) Integrated circuit with programmable circuitry and an embedded processor system
KR101606247B1 (ko) 집적 회로 내에서의 전력 관리
US9436785B1 (en) Hierarchical preset and rule based configuration of a system-on-chip
US20140040532A1 (en) Stacked memory device with helper processor
US11232247B1 (en) Adaptable dynamic region for hardware acceleration
US10037301B2 (en) Circuits and methods for inter-processor communication
KR102413593B1 (ko) 교착상태 방지를 위한 방법들 및 회로들
US10656203B1 (en) Low pin count test controller
US11803471B2 (en) Scalable system on a chip
US20180336034A1 (en) Near memory computing architecture
TW201303870A (zh) 利用快閃記憶體介面的方法及裝置
Ramagond et al. A review and analysis of communication logic between PL and PS in ZYNQ AP SoC
US9448937B1 (en) Cache coherency
US11012072B1 (en) Thermal load balancing of programmable devices
CN114746853A (zh) 存储器与分布式计算阵列之间的数据传输
US10592358B2 (en) Functional interconnect redundancy in cache coherent systems
US9798660B1 (en) Data exchange between a memory mapped interface and a streaming interface
US12007895B2 (en) Scalable system on a chip
US11899551B1 (en) On-chip software-based activity monitor to configure throttling at a hardware-based activity monitor
Tegegn An Implementation of a Predictable Cache-coherent Multi-core System
Zhang et al. Design of the Main Control RISC-V Processor in Chiplet Applications
KR20240017740A (ko) 소프트 플로트 함수 회로를 포함하는 시스템-온-칩
Pagani Software support for dynamic partial reconfigurable FPGAs on heterogeneous platforms

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
FPAY Annual fee payment

Payment date: 20180425

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190424

Year of fee payment: 5