KR20170138541A - 신속 재구성가능 회로 및 고-대역폭 메모리 인터페이스를 사용한 컴퓨터 아키텍처 - Google Patents

신속 재구성가능 회로 및 고-대역폭 메모리 인터페이스를 사용한 컴퓨터 아키텍처 Download PDF

Info

Publication number
KR20170138541A
KR20170138541A KR1020177033551A KR20177033551A KR20170138541A KR 20170138541 A KR20170138541 A KR 20170138541A KR 1020177033551 A KR1020177033551 A KR 1020177033551A KR 20177033551 A KR20177033551 A KR 20177033551A KR 20170138541 A KR20170138541 A KR 20170138541A
Authority
KR
South Korea
Prior art keywords
programming
instruction
configuration
memory
programming area
Prior art date
Application number
KR1020177033551A
Other languages
English (en)
Other versions
KR101873484B1 (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 KR20170138541A publication Critical patent/KR20170138541A/ko
Application granted granted Critical
Publication of KR101873484B1 publication Critical patent/KR101873484B1/ko

Links

Images

Classifications

    • 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
    • H03K19/17724Structural details of logic blocks
    • H03K19/17728Reconfigurable logic blocks, e.g. lookup tables
    • 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/7892Reconfigurable logic embedded in CPU, e.g. reconfigurable unit
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/0008Arrangements for reducing power consumption
    • 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
    • H03K19/17748Structural details of configuration resources
    • H03K19/17758Structural details of configuration resources for speeding up configuration or reconfiguration
    • 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
    • H03K19/17748Structural details of configuration resources
    • H03K19/1776Structural details of configuration resources for memories
    • H03K19/17776

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Logic Circuits (AREA)
  • Stored Programmes (AREA)
  • Microcomputers (AREA)

Abstract

프로그래머블 디바이스는 각각이 복수의 구성가능 로직 블록을 포함하는 하나 이상의 프로그래밍 영역을 포함하며, 복수의 구성가능 로직 블록 각각은 프로그래머블 상호연결 패브릭을 통해 임의의 다른 구성가능 로직 블록에 선택적으로 연결가능하다. 프로그래머블 디바이스는 명령 스트림 내의 명령에 응답하여, 다른 프로그래밍 영역들 중 임의의 것과는 독립적으로 프로그래밍 영역 내의 하나 이상의 구성가능 로직 블록들에 하드웨어를 재구성하도록 구성된 구성 로직을 더 포함한다.

Description

신속 재구성가능 회로 및 고-대역폭 메모리 인터페이스를 사용한 컴퓨터 아키텍처
본 개시물은 프로그래머블 디바이스의 분야에 관한 것으로, 특히, 명령(instruction) 스트림 내 명령에 응답하는 로직 회로의 재구성에 관한 것이다.
필드-프로그래머블 게이트 어레이(field-programmable gate array; FPGA)는 제조후 최종 사용자에 의해 구성되도록 설계된 집적회로 디바이스이다. 일반적으로, FPGA는 프로그래머블 상호연결 패브릭(fabric)을 구성하는 상호연결 리소스에 의해 함께 연결된, 로직 블록이라고 하는, 중립 회로 요소 어레이를 포함한다. 상호연결 리소스는, 예를 들어, 상이한 구성으로 상호결선될 수 있는 로직 게이트를 포함할 수 있다. FPGA 내 로직 블록은 복잡한 조합 함수, 또는 AND 또는 XOR과 같은 로직 함수(logic function)를 수행하게 구성될 수 있다. FPGA 내 로직 블록은 간단한 플립 플롭 또는 보다 완전한 메모리 블록으로서 구현될 수 있는 메모리 요소를 포함할 수도 있다.
FPGA에서, 로직 블록은, 룩업 테이블(lookup table; LUT) 및 값을 작은 정적 랜덤 액세스 메모리(Static Random Access Memory; SRAM) 또는 레지스터에 삽입함으로써 프로그래밍되는 그외 다른 고정된 함수와 같은, 요소를 포함할 수 있다. 프로그래밍은 로직 블록이 사용될 수 있기 전에 수행되어야 한다. 프로그래밍 후, LUT에의 함수 입력들의 각 조합은 기정의된 출력을 제공하므로, 임의의 로직 함수가 구현될 수 있게 한다. 전형적인 FPGA는 구성을 위해 외부 메모리 디바이스 및 단일의 상대적으로 느린 직렬 프로그래밍 포트에 의존한다. FPGA는 일반적으로 "구성 모드" 및 전체 칩이 프로그램되기를 대기하는 아이들(idle) 상태에 있거나 프로그램된 칩이 실행 중인 별도의 "사용자 모드"를 갖는다.
본 개시물은 첨부 도면들의 도면들에 제한이 아니라 예로서 예시된다.
도 1은 컴퓨팅 시스템의 실시예를 도시한다.
도 2는 실시예에 따라, 필드 프로그래머블 게이트 어레이(FPGA)의 구성 요소를 도시한다.
도 3은 실시예에 따라, 함수 테이블의 동작을 도시한다.
도 4a는 실시예에 따라, 다이 스택(die stack)을 도시한다.
도 4b는 실시예에 따라, 다이 스택 내의 실리콘 관통 비아(through-silicon via; TSV)를 도시한다.
도 5a 내지 도 5d는 여러 실시예에 따라, 다이 스택을 도시한다.
도 6은 실시예에 따라, 컴퓨팅 시스템에서 명령을 실행하는 프로세스를 도시하는 흐름도이다.
다음의 설명은 실시예의 양호한 이해를 제공하기 위해 특정 시스템, 구성 요소, 방법, 등의 예와 같은 다수의 특정 세부사항을 설명한다. 그러나, 적어도 일부 실시예는 이들 특정 세부사항 없이도 실시될 수 있음은 당업자에게 명백할 것이다. 다른 예에서, 공지된 구성 요소 또는 방법은 실시예를 불필요하게 불명료하게 하는 것을 피하기 위해 상세히 설명되지 않거나 간단한 블록도 포맷으로 제공된다. 따라서, 제시된 특정 세부사항은 단지 예시적인 것이다. 특정 구현예는 이들 예시적 세부사항과는 다를 수 있으며 여전히 실시예의 사상 및 범위 내에 있는 것으로 간주될 수 있다.
프로그래머블 디바이스의 일 실시예는 명령 스트림 내 명령에 기초하여 병렬로 그리고 서로 독립적으로 재구성될 수 있는 다수의 구성 도메인들을 갖는 필드-프로그래머블 게이트 어레이(FPGA)이다. 다수의 구성 도메인 각각에 대한 구성 데이터는 구성 데이터에의 고대역폭 액세스를 제공하는 3차원(3D) 스택 메모리에 저장될 수 있다. 고 메모리 대역폭과 함께 디바이스에서 프로그래머블 로직을 파티션하는 것은 몇개의 클럭 사이클 내에 프로그래머블 로직을 재구성할 수 있게 하므로, 상이한 유형의 명령을 수용하게 재구성될 수 있는 플렉서블 파이프라인(flexible pipeline)을 가능하게 한다.
플렉서블 파이프라인의 구현은, 명령 스트림의 실행을 인터럽트하지 않고 임의의 복수 유형의 명령을 실행하도록 임의의 파이프라인이 재구성될 수 있기 때문에, 고정된 함수 처리 파이프라인과는 대조적으로, 명령 스케줄링에 있서 더 큰 융통성을 가질 수 있게 한다. 이러한 시스템에서, 상이한 함수를 실행하는 상이한 스레드는 다수의 실행 레인에 걸쳐 단일 사이클 내에 스케줄링될 수 있다.
도 1은 다수의 구성 도메인을 갖는 프로그래머블 디바이스(즉, FPGA(120))를 포함하는 컴퓨팅 시스템(100)의 일 실시예를 도시한다. 컴퓨팅 시스템(100)은 한 세트의 실리콘 관통 비아(TSV)(104)에 의해 컴퓨팅 시스템(100)에 구현되는, 버스를 사용하여 서로 통신할 수 있는 구성 요소들을 포함한다. TSV(104)는 프로세서 로직(105) 블록(프로세서(101) 및 메모리 제어기(102)를 포함하는), 메모리 블록(110), 메모리 블록(115), 및 FPGA(120) 간에 연결하여 통신을 가능하게 한다. 일 실시예에서, 블록(105, 110, 115, 120) 각각은 단일 집적회로 다이에 대응한다. 대안적 실시예에서, 상이한 블록들로 존재하는 것으로서 도시된 구성 요소는 동일한 다이 상에 통합될 수 있거나, 동일한 블록으로 존재하는 것으로서 도시된 구성 요소는 다수의 다이에 걸쳐 분할될 수 있다.
프로세서(101)는 TSV(104)에 연결된 하나 이상의 다른 디바이스들에 어드레싱된 TSV(104)을 통해 데이터를 전송할 수 있고, 또한 TSV들(104)에 연결된 다른 디바이스로부터 데이터를 수신할 수 있다. 프로세서(101)는 또한 메모리 서브-시스템(110)에 저장된 명령에 의해 정의된 프로그램을 실행할 수 있고, FPGA(120)에 의해 실행될 명령 스트림 내 이들 명령들의 일부 또는 전부를 더욱 디스패치(dispatch)할 수 있다.
FPGA(120)는 프로그래밍 영역(122, 123)을 포함한다. 프로그래밍 영역(122)은 구성가능 로직 블록(131-134)을 포함하고, 프로그래밍 영역(123)은 구성가능 로직 블록(135-138)을 포함한다. FPGA(120) 내의 프로그래머블 로직은 구성가능 로직 블록(131-138)에 놓이며, 따라서 개별적으로 구성가능하고 프로그래밍 영역(122, 123)의 경계에 의해 정의되는 다수의 구성 도메인들로 파티션된다. 도 1이 2개의 프로그래밍 영역(122, 123)을 포함하는 것으로서 FPGA(120)를 도시하지만, 대안적 실시예에서, FPGA(120)는 2 이상의 프로그래밍 영역을 가질 수 있다. 대안적 실시예에서, 프로그래밍 영역 각각은 4개보다 적은 또는 더 많은 구성가능 로직 블록을 포함할 수 있다. FPGA(120)는 또한 구성 데이터를 수신하고 수신된 구성 데이터에 따라 FPGA(120) 내의 하나 이상의 프로그래밍 영역을 재구성하는 구성 로직(121)을 포함한다.
메모리(110)는 FPGA(120) 내 프로그래밍 영역에 대한 구성 데이터를 저장하는 구성 메모리 영역(111, 112)을 포함한다. 구성 메모리 영역(111, 112)은 각각 프로그래밍 영역(122, 123)에 대응하고; 따라서, 구성 메모리(111)는 프로그래밍 영역(122)을 구성하기 위해 사용될 수 있는 구성 데이터를 저장하는 반면, 구성 메모리(112)는 프로그래밍 영역(123)을 구성하기 위해 사용될 수 있는 구성 데이터를 저장한다. 각각의 구성 메모리 영역(111, 112)은 각각의 프로그래밍 영역에 프로그래밍하기 위해 선택될 수 있는 다수의 구성 상태(예를 들어, 메모리(111)의 상태 A 및 B 및 메모리(112)의 상태 C 및 D)를 저장한다. 예를 들어, 구성 메모리(111) 내에 상태 A 또는 상태 B는 대응하는 프로그래밍 영역(122)에 대한 구성을 결정하기 위해 선택될 수 있다.
메모리(110)는 또한 상이한 구성에 연관된 상태 정보를 저장하기 위해 사용되는 콘텍스트(context) 메모리(113) 및 콘텍스트 메모리(114)를 포함한다. 콘텍스트 메모리(113) 및 콘텍스트 메모리(114)는 각각 프로그래밍 영역(122, 123)에 대한 상태 정보를 저장한다.
메모리(115)는 각각 프로그래밍 영역(122, 123)에 대응하는 캐시(116) 및 캐시(117)를 포함한다. 각각의 캐시(116, 117)는 동일한 프로그래밍 영역에 대응하는 구성 메모리보다 낮은 레이턴시(latency)를 갖는 메모리 기술(예를 들어, SRAM 또는 STT-MRAM)을 사용하여 구현된다. 예를 들어, 구성 메모리(111)는 DRAM을 사용하여 구현될 수 있고, 반면 캐시(116)는 SRAM 또는 스핀-전송 토크 자기 랜덤 액세스 메모리(Spin-transfer torque magnetic random-access memory; STT-MRAM)를 사용하여 구현된다. 낮은 레이턴시 메모리는 프로그래밍 영역에서 하드웨어를 재구성하는 시간을 줄이기 위해 구성 비트스트림 데이터를 캐시하기 위해 사용된다.
컴퓨팅 시스템(100)은 TSV(104)에 부착된 다른 디바이스들 간에 통신을 용이하게 하는 로직을 포함하는 TSV(104)와 결합된 메모리 제어기(102)를 포함한다. 예를 들어, 프로세서(101)는, 대응하는 프로그래밍 영역(122 또는 123)을 재구성하기 위해, 메모리 영역(111 또는 112) 중 하나를 어드레싱하고, 어드레싱된 메모리 영역으로부터 임시 버퍼(예를 들면, SRAM)로 TSV를 통해 구성 데이터를 읽고, FPGA(120)를 어드레싱하고, TSV를 통해 FPGA(120)에 구성 데이터를 기입함으로써, 구성 메모리 영역(111, 112)과 FPGA(120) 간의 통신을 용이하게 하도록 메모리 제어기(102)를 지휘할 수 있다. 따라서, 메모리 제어기(102)는 컴퓨팅 시스템(100)의 이들 구성 요소들 간의 데이터 전송을 조정한다.
컴퓨팅 시스템(100)에서, 메모리 제어기(102)는 디바이스 선택 신호(102a)를 통해 디바이스를 선택함으로써 TSV(예를 들어, FPGA(120) 또는 메모리(110))에 연결된 디바이스들 중 하나와 통신을 설정한다. 대안적 실시예에서, 디바이스 선택 신호는 FPGA(120) 및 메모리(110) 이외의 추가의 디바이스로 확장될 수 있다. 대안적으로, 다른 어드레싱 방법이 사용될 수 있는데; 예를 들어, 선택된 디바이스에 대한 어드레스는 TSV(104)을 통해 전송될 수 있다.
컴퓨팅 시스템(100)은 소스 코드에 기초하여 명령을 발생하는 컴파일러(103)를 포함한다. 컴파일러(103)에 의해 발생된 명령은 메모리 서브-시스템(110)에 저장되고, 이로부터 명령이 프로세서(101)에 의해 인출되고 실행될 수 있다.
도 2는 FPGA(120)의 실시예의 내부 구성 요소를 도시한다. FPGA(120)는 로직 블록(즉, 블록(131-142))이라 불리는 프로그래머블 회로 요소 어레이 및 로직 블록(131-142)을 선택적으로 연결하기 위해 사용되는 상호연결 리소스(220-222)를 포함하는 프로그래머블 디바이스이다.
FPGA(120)에서, 프로그래밍 영역(122-125)의 경계는 점선으로 표시된다. 프로그래밍 영역(122)은 로직 블록(131-134)을 포함하고, 프로그래밍 영역(123)은 로직 블록(135-138)을 포함하고, 프로그래밍 영역(124)은 로직 블록(139, 140)을 포함하고, 프로그래밍 영역(125)은 로직 블록(141, 142)을 포함한다. 프로그래밍 영역(122-125)은 FPGA(120)에 내포된 프로그래머블 로직을, 서로 독립적으로 동작 및 프로그램될 수 있거나 더 큰 프로그래머블 영역으로서 동작하도록 조합될 수 있는 개별적 구성 도메인들로 분할한다.
프로그래밍 후에, 프로그래밍 영역(122-125)에 내포된 로직은 중앙 처리 유닛(central processing unit; CPU) 또는 그래픽 처리 유닛(graphics processing unit; GPU) 파이프라인의 일부로서 사용될 수 있다. 따라서, 프로그래밍 영역은 CPU 또는 GPU로부터 FPGA(120)에 제공된 명령 스트림으로 수신된 하나 이상의 명령을 실행하기 위해 사용될 수 있다.
도 2에 도시된 바와 같이, 프로그래밍 영역(122, 123) 각각은 4개의 구성가능 로직 블록을 포함하고, 프로그래밍 영역(124, 125) 각각은 2개의 구성가능 로직 블록을 포함한다. 따라서, 주어진 프로그래밍 영역은 동일한 프로그래머블 디바이스 내의 다른 프로그래밍 영역과 동일한 개수의 구성가능 로직 블록을 가질 필요가 없다. 대안적 실시예에서, 프로그래밍 영역은 예시된 수의 구성가능 로직 블록보다 적거나 많을 수 있다.
구성가능 로직 블록(131-142) 각각은 룩업 테이블(LUT) 및 고정 함수 블록을 포함한다. 프로그래밍 후, LUT에의 함수 입력들의 각 조합은 기정의된 출력을 제공하여, 임의의 로직 함수를 구현할 수 있게 한다. 구성가능 로직 블록 각각은 적절한 값을 LUT에 그리고 로직 블록 내에 구성 요소(예를 들어, LUT, 고정된 함수 블록, 등) 간의 연결을 제어하는 구성 메모리 영역 또는 레지스터에 기입함으로써 다양한 함수를 수행하도록 프로그램될 수 있다.
구성가능 로직 블록(131-142)은 블록(131-142)을 선택적으로 서로 연결될 수 있게 하는 도전성 트레이스 및 스위치를 포함하는 프로그래머블 상호연결 패브릭(220)에 각각 연결된다. 도 2에서, 도전성 트레이스는 구성가능 로직(131)을 프로그래머블 상호연결 패브릭(220)에 연결하는 것으로 도시되었다. 다른 블록(132-142)은 또한 도전성 트레이스를 통해 상호연결 패브릭(220)에 연결되는데; 그러나, 상호연결 패브릭(220)에 이들 블록(132-142)을 연결하는 도전성 트레이스는 명료성을 위해 도시에서 생략된다.
프로그래머블 상호연결 패브릭(220)은 대안적 실시예에서 도 2에 도시된 것보다는 덜 균일할 수 있다. 예를 들어, 상호연결 패브릭은 상이한 길이를 갖는 도전성 트레이스를 포함할 수 있거나 또는 FPGA(120)의 상이한 영역에서 상이한 수의 평행한 도전성 트레이스를 가질 수 있다. 상호연결 패브릭(220)의 도전성 트레이스는 이들이 교차하는 스위치에 의해 서로 연결된다. 예를 들어, 다수의 트레이스가 교차하는 영역(221)(점선으로 표시됨)은 2개의 도전성 트레이스 사이의 각 교차점 사이에 스위치를 포함한다. 대안적으로, 스위치는 영역(221) 내의 일부에만 존재할 수 있다.
프로그래머블 상호연결 패브릭은 또한 하나의 프로그래밍 영역 내의 구성 요소들을 다른 프로그래밍 영역로부터 선택적으로 분리하기 위해 사용될 수 있는, 스위치(222)과 같은, 경계 스위치를 포함한다. 경계 스위치는 FPGA(120) 내 프로그래밍 영역(122-125)의 경계에 위치된다. 예를 들어, 경계 스위치(222)는 프로그래머블 상호연결 패브릭(220)의 도전성 트레이스가 프로그래밍 영역(122)의 경계를 거치는 곳에 위치된다.
따라서, 경계 스위치(222)는 구성가능 로직 블록(131-134) 및 프로그래밍 영역(122)의 다른 구성 요소를 다른 프로그래밍 영역들(123-125)로부터 단절시키기 위해 사용될 수 있다. 또한, 프로그래밍 영역들을 조합하기 위해 경계 스위치가 선택적으로 닫히거나 개방될 수 있다. 예를 들어, 프로그래밍 영역(122, 123) 사이에 있는 경계 스위치(222)는 영역(122, 123)을 서로 조합하기 위해 닫혀질 수 있고 다른 경계 스위치는 조합된 프로그래밍 영역(122, 123)을 다른 프로그래밍 다른 프로그래밍 영역(124, 125)으로부터 격리시키기 위해 개방된 채로 있는다.
도 1을 참조하면, FPGA(120)는 FPGA(120) 내의 프로그래밍 영역(122, 123)의 프로그래밍을 용이하게 하는 구성 로직(121)을 포함한다. 특히, 구성 로직(121)은 프로그래밍 영역(122)의 구성가능 로직 블록(131-134) 또는 프로그래밍 영역(123)의 구성가능 로직 블록(135-138)의 하드웨어를 기존 하드웨어 구성에서 새로운 하드웨어 구성으로 재구성함으로써 TSV(104)를 통해 수신된 명령에 응답한다. 구성 로직(121)에 의한 하나의 프로그래밍 영역 내의 하드웨어의 재구성은 하나 이상의 명령을 실행하기 위해 상이한 프로그래밍 영역이 사용되는 동안 발생할 수 있다.
구성 로직(121)은 TSV(104)를 통해 수신된 명시적 재구성 명령에 응답하여 FPGA(120) 내의 프로그래밍 영역들 중 하나 이상을 재구성하고, 특정 함수를 수행하기 위해 하나 이상의 프로그래밍 영역들을 재구성함으로써 특정 함수의 사용을 요청하는 명령에 암묵적으로 응답할 수 있다.
명령 스트림에 포함된 명시적 재구성 명령은 FPGA(120)의 런타임 동작 중에 수신될 수 있고, 재구성 타겟이 된 프로그래밍 영역 및 타겟 프로그래밍 영역에 대한 선택된 구성을 모두 식별할 수 있다. 명시적 재구성 명령에 응답하여, 구성 로직(121)은 타겟 프로그래밍 영역을 격리함으로써(예를 들어, 타겟 프로그래밍 영역의 에지에 경계 스위치를 개방함으로써) 타겟 프로그래밍 영역을 재구성한 다음, 선택된 구성을 타겟 프로그래밍 영역에 적용하여 FPGA(120) 내의 임의의 다른 프로그래밍 영역과는 독립적으로 타겟 프로그래밍 영역을 재구성한다.
명시적 재구성 명령은 FPGA 프로그래밍 비트스트림의 어드레스를 직접 참조하거나 한 세트의 기정의된 커스터마이즈 가능(customizable) 함수 중 하나를 참조하여 타겟 프로그래밍 영역에서 구현될 함수를 참조한다. 예를 들어, 구성 메모리(111)의 상태 A 및 B 각각은 프로그래밍 영역(122)에 프로그래밍될 수 있는 함수에 대응하고, 구성 메모리(112)에 저장된 상태 C 및 D는 각각 프로그래밍 영역(123)에 프로그래밍될 수 있는 함수에 대응한다. 상태 A, B, C 및 D 각각은 프로그래밍 영역에서의 자신의 대응하는 함수를 구현하기 위해 사용될 수 있는 구성 비트스트림을 저장한다.
구성 비트스트림은 구성 로직(121)이 대응하는 함수의 구현을 요청하는 명시적 재구성 명령을 수신하기 전에 구성 메모리 영역(111, 112)에 저장된다. 예를 들어, 구성 비트스트림은 명령 스트림을 생성하는 애플리케이션의 실행을 개시할 때 저장될 수 있거나, 프로그램 루프 또는 애플리케이션 내 다른 실행 배리어(barrier)의 시작시 저장될 수 있다.
구성 로직(121)은 명시적 재구성 명령이 수신되지 않을 때라도 암묵적으로 프로그래밍 영역(122 또는 123) 중 하나에서 하드웨어를 재구성할 수 있다. 예를 들어, 프로그래밍 영역(122, 123) 중 임의의 것에 구현되지 않은 함수를 호출하는 명령이 수신되면, 구성 로직(121)은 재구성된 하나 또는 그 이상의 프로그래밍 영역에서 명령을 실행하기 전에 함수를 구현하기 위해 하나 이상의 프로그래밍 영역(122, 123)을 재구성한다.
특정 프로그래밍 영역의 구성 메모리는 프로그래밍 영역에 대한 현재 구성을 기록한다. 예를 들어, 프로그래밍 영역(122)과 관련된 구성 메모리(111)는 프로그래밍 영역(122)에 대한 현재 구성을 저장한다. 따라서, 특정 함수를 호출하는 명령이 수신되었을 때, 프로그래밍 영역에 대한 현재 구성은 명령이 프로그래밍 영역에서 실행될 수 있는지 아니면 프로그래밍 영역이 명령을 실행하기 위해 재구성되어야 할는지를 결정하기 위해 체크될 수 있다. 대안적 실시예에서, FPGA(120) 내의 각 프로그래밍 영역(122-123)의 현재 구성은 구성 메모리 영역(111-112) 이외의 위치에 저장되는데; 예를 들어, 현재의 구성은 FPGA(120) 자체에 위치한 메모리 또는 레지스터에 기록될 수 있다.
특정 함수를 호출하는 명령에 응답하여, FPGA(120)의 프로그래밍 영역들(122-123) 각각에 대한 현재 구성은 호출된 함수가 프로그래밍 영역들(122-123) 중 어느 하나에서 실행될 수 있는지 여부를 결정하기 위해 체크된다. 프로그래밍 영역(122-123) 중 어느 것도 호출된 함수를 실행하도록 구성되지 않으면, 구성 로직(121)은 프로그래밍 영역(122-123) 중 하나 이상을 호출된 함수를 실행할 수 있는 새로운 구성으로 재구성한다.
도 3은, 실시예에 따라, 구성 로직(121)이 프로그래밍 영역의 암묵적 재구성을 수행할 때, 프로그래밍 영역에 대한 구성 비트스트림이 수신된 명령(300)에 기초하여 메모리에 어떻게 위치되는가를 도시하는 블록도이다. 도 3에 도시된 바와 같이, 수신된 명령(300)은 값 ID1 및 ID2에 의해 식별되는 2개의 함수를 식별하는 단일 명령 다수 데이터(single instruction multiple data; SIMD) 명령이다. 함수 ID1에 대해, 명령(300)은 2개의 오퍼랜드(operand) SRC1A 및 SRC1B와 함수 결과에 대한 목적지 DEST1을 식별한다. 함수 ID2에 대해, 명령(300)은 유사하게 2개의 오퍼랜드 SRC2A와 SRC2B와 함수 결과에 대한 목적지 DEST2를 식별한다.
명령(300)을 수신하였을 때, 구성 로직(121)은 함수 테이블(301) 내의 호출된 함수 ID1 및 ID2에 대한 엔트리를 참조한다. 도 3에 도시된 바와 같이, 함수 테이블(301)은 각각 함수 ID1 및 ID2에 대해 어드레스 A 및 어드레스 B를 리턴한다. 어드레스 A 및 B는 구성 메모리(111)에 저장된 구성 비트스트림(즉, 상태 A 및 상태 B)의 위치를 식별한다. 구성 로직은 명령(300)의 실행을 위해 프로그래밍 영역(123)을 재구성하기 위해 상태 A 및 상태 B에 저장된 식별된 구성 비트스트림을 사용한다.
상태 A-D에서의 구성 비트스트림은 단순 단일 동작 또는 보다 복잡한 복합 동작인 프로그래밍 영역(122-123)에서 구현하기 위한 함수를 정의할 수 있다. 프로그래밍되었을 때, 프로그래밍 영역(122-123)은 메모리 어드레스의 범위를 통해 각각 액세스가능한 독립적인 로직 유닛으로서 사용될 수 있다. 적절히 구성된 프로그래밍 영역에서 명령을 실행할 때, 명령의 오퍼랜드는 프로그래밍 영역의 입력에 연결된 기정의된 오퍼랜드 레지스터를 통해 전달될 수 있다.
FPGA(120) 내의 구성가능 로직 블록(131-138)은 컴퓨터 시스템(100)의 아키텍처된 상태의 상당 부분을 내포할 수 있다. 예를 들어, 상태 정보는 프로그래밍 영역에서 명령의 실행 중에 수정될 수 있는 값을 포함할 수 있다. 콘텍스트 스위치가 로직 블록(131-138)의 재구성에 의해 수행될 때, 재구성된 로직 블록의 상태는 나중에 복원될 수 있도록 일시적으로 저장될 수 있다. 예를 들어, 프로그래밍 영역에서 실행되는 제1 스레드는 제2 스레드가 프로그래밍 영역을 재구성할 수 있도록 일시 정지될 수 있고, 이어 프로그래밍 영역의 이전 구성 및 콘텍스트는 제2 스레드가 프로그래밍 영역에서 실행을 마친 후에 제1 스레드를 재개하기 위해 콘텍스트 메모리로부터 복원될 수 있다.
다시, 도 1을 참조하면, 구성 메모리(111, 112)는 프로그래밍 영역(122, 123)과 각각 연관된 콘텍스트 메모리(113 및 114)를 포함한다. 콘텍스트 메모리(113, 114)는 각각의 프로그래밍 영역(122, 123)에 로직 블록의 상태 정보를 저장하기 위해 사용된다. 프로그래밍 영역(122 또는 123) 중 하나의 재구성에 앞서, 재구성될 프로그래밍 영역의 콘텍스트 메모리는 프로그래밍 영역의 원래의 구성이 동일 콘텍스트로 나중에 복원될 수 있도록 프로그래밍 영역의 로직 블록의 상태 정보를 저장한다.
구체적으로, 콘텍스트 데이터는 프로그래밍 영역의 하드웨어 구성을 식별하는 정보 및 프로그래밍 영역 내의 레지스터 및 메모리 블록에 저장된 값을 포함할 수 있다. 콘텍스트 메모리(113 또는 114)에 저장된 데이터는 로직 스택으로서 구성될 수 있고; 따라서, 프로그래밍 영역의 제1 구성과 연관된 콘텍스트 데이터는 프로그래밍 영역을 제2 구성으로 재구성하기 전에 스택에 넣어진다. 프로그래밍 영역이 다시 제1 구성으로 재구성될 때, 제1 구성의 콘텍스트 데이터는 제1 구성에대한 콘텍스트를 복원하기 위해 스택으로부터 팝(pop)된다.
일반적으로, 컴퓨팅 시스템(100)의 예시된 구성 요소들 중 하나에 의해 수행되는 것으로서 본원에 설명된 동작은 대안적 실시예에서 컴퓨팅 시스템(100)의 다른 구성 요소에 의해 수행될 수 있다. 예를 들어, 구성 로직(121)에 의해 수행되는 동작은 다른 실시예에서 컴퓨팅 시스템(100)의 다른 구성 요소에서 수행될 수 있다. 구성 메모리(111, 112)는 별도의 메모리(110) 상에 위치하는 것으로서 도시되어 있지만, 컴퓨팅 시스템(100) 내의 다른 구성 요소에 위치될 수도 있다. 예를 들어, FPGA(120)는 대안적 실시예에서 구성 메모리(111, 112)의 함수를 수행하는데 사용될 수 있는 메모리를 포함할 수 있다.
도 1을 참조하면, 컴퓨팅 시스템(100)의 컴파일러(103)는 애플리케이션에 대한 소스 코드에 기초하여 애플리케이션에 대한 명령을 발생하고, 발생된 명령을 프로세서(101)(예를 들어, 메모리(110))에 액세스가능한 위치에 저장한다. 대안적 실시예에서, 명령은 하드 디스크 드라이브 또는 다른 영구 메모리와 같은 메모리(110)와는 별개의 메모리 위치에 저장된다. 컴파일러(103)는 컴퓨팅 시스템(100) 상에서 실행하는 것으로서 도 1에 도시되어 있는데; 그러나, 대안적 실시예에서, 컴파일러는 별도의 컴퓨팅 시스템 상에서 실행될 수 있고, 발생된 명령은 컴퓨팅 시스템(100)에 전송될 수 있다.
컴퓨팅 시스템(100)에 대한 명령을 발생할 때, 컴파일러(103)는 FPGA(120)에 프로그래밍 영역을 프로그래밍하기 위한 구성 비트스트림으로 구성 메모리 영역(예를 들어, 메모리(111, 112))을 프리로드하는 명령을 삽입한다. 컴파일러는 소스 코드에 기초하여 실행될 수 있는 명령의 유형을 식별하고, 이어 명령을 실행하기 위한 함수를 구현하는데 적합한 구성 비트스트림을 프리로드하기 위한 명령을 삽입한다. 예를 들어, 컴파일러(103)는 프로그래밍 영역(122, 123)의 구성을 이용하는 명령의 실행에 앞서 구성 메모리(111, 112)에 구성 상태 A, B, C 및 D를 프리로드하는 명령을 발생한다. 구성 비트스트림을 구성 메모리(111, 112)에 프리로드함으로써, 구성 로직(121)은 명령 스트림 내 명령에 응답하여 프로그래밍 영역의 암묵적 재구성을 신속하게 수행할 수 있다.
컴파일러(103)는 또한 명시적 재구성 명령을 애플리케이션에 대한 명령 스트림에 삽입할 수 있다. 애플리케이션의 소스 코드에 기초하여, 컴파일러(103)는 프로그래밍 영역에서 구현될 수 있는 함수에 의해 실행가능한 명령을 식별하고, 이어 명시적 재구성 명령을 식별된 명령 이전에 명령 스트림에 삽입한다. 따라서, 명시적 재구성 명령은 식별된 명령이 실행되도록 스케줄링되기 전에, 식별된 명령의 실행을 위해 프로그래밍 영역들 중 하나가 재구성되도록 한다.
컴파일러(103)는 재구성되는 프로그래밍 영역의 사용에 앞서 명시적 재구성 명령을 스케줄링하고, 다른 명령들이 FPGA(120)의 다른 프로그래밍 영역들 또는 프로세서(101)에서 병렬로 실행되는 동안 재구성이 행해지도록 명시적 재구성 명령을 스케줄링할 수 있다. 명시적 재구성 명령의 완료에 의존하는 명령은 이 의존성을 명령의 일부로서 나타내어, 재구성이 완료될 때까지 명령의 실행을 방지한다.
컴파일러(103)는 또한 프로그래밍 영역에서 구현될 특정 함수를 요구하는 명령 및 함수를 구현하기 위한 재구성 레이턴시를 식별하는 것에 기초하여 구성 프리페치 명령을 삽입할 수 있다. 구성 프리페치 명령은 프로그래밍 영역에 대한 예상된 명시적 또는 암묵적 구성 변경에 앞서 프로그래밍 영역에 대한 구성 비트를 주 메모리에서 로컬 SRAM 또는 STT-MRAM 버퍼와 같은 더 빠른 메모리로 전송한다. 따라서, 구성 프리페치 명령은 프로그래밍 영역을 재구성하기 위한 레이턴시를 줄일 수 있다.
컴파일러(103)는 또한 프로그래밍 영역이 재구성되는 횟수를 감소시키기 위해 동일한 프로그래머블 함수를 사용하는 명령들의 그룹을 함께 클러스터링하려고 시도하고, 따라서 프로그래밍 영역을 재구성하는데 소비되는 시간 및 소모되는 파워를 감소시킨다.
컴파일러(103)는 또한 애플리케이션의 명령 스트림에 재구성 배리어 명령을 삽입할 수 있다. 재구성 배리어 명령은 다수의 스레드 중 하나의 실행이 계속되기 전에 하나 이상의 프로그래밍 영역의 재구성이 완료되기를 다수 스레드가 기다리게 한다. 재구성 배리어 명령은, 예를 들어, 다수 실행 레인을 구현하는 하나 이상의 프로그래밍 영역을 새로운 작업 그룹을 실행하기 위한 새로운 한 세트의 함수로 재구성하기 위해 사용될 수도 있을 것이다.
도 4a는, 실시예에 따라, 3차원(3D) 다이 스택(400)으로서 컴퓨팅 시스템(100)의 구성 요소의 물리적 배열를 도시한다. 도 4a에 도시된 바와 같이, 다수의 집적회로 다이(401-404)는 스택(400)에 인터포저(interposer)(405) 위에 수직으로 배열된다. 집적회로 다이의 스택은 위에서 아래로 각각 스택된 DRAM 다이(401), SRAM 다이(402), FPGA 다이(403), 및 프로세서 로직 다이(404)를 포함한다. 프로세서 로직 다이(404)는 도 1에 도시된 바와 같은 프로세서 로직 블록(105)에 대응하고; 따라서, 컴퓨팅 시스템(101)의 프로세서(101) 및 메모리 제어기(102)는 프로세서 로직 다이(404) 상에 상주한다. FPGA(120)는 FPGA 다이(403) 상에 상주한다. DRAM 다이(401)는 프로세서(101) 및 FPGA(120)에 의해 액세스가능하고 프로그램 코드, 프로그램 데이터, 및 구성 비트스트림을 구성 메모리 영역(111, 112)에 저장하기 위한 메모리(110)를 포함한다.
SRAM 다이(402)는 DRAM(401)보다 낮은 레이턴시를 갖는 메모리를 포함하고, DRAM(401) 이외에 구성 비트스트림을 저장하기 위해 제공된다. SRAM 다이(402)는 구성 비트스트림의 캐싱을 수행하는 구성 캐시(116, 117)를 포함하는 메모리(115)를 구현하기 위해 사용되며, 따라서 보다 적은 클럭 사이클로 FPGA(120)에 프로그래밍 영역을 재구성할 수 있게 한다. SRAM 다이(402)는 또한 명령을 캐싱하기 위해 사용될 수 있다. 대안적 실시예에서, SRAM 다이(402) 대신에 DRAM보다 빠른 STT-MRAM 메모리 다이 또는 다른 메모리 기술이 사용된다.
3D 다이 스택(400)에서의 구성 요소(401-405)의 배열 및 하나 이상의 세트의 TSV에 의한 이들 구성 요소(401-405)의 연결은 새로운 구성을 FPGA(120)의 프로그래밍 영역(122, 123) 내 구성가능 로직 블록(131-138)에 신속히 용이하게 전송할 수 있게 한다. 스택(400)에 배열된 바와 같이, 컴퓨팅 시스템(100)은 프로그램의 명령 스트림 내 명시적 또는 암묵적 명령에 응답하여 몇개의 클럭 사이클로 프로그래밍 영역을 재구성할 수 있다.
도 4b는 다이(401-404) 간에 통신을 연결하고 가능하게 하는 TSV(104A, 104B)과 함께, DRAM 메모리 다이(401), SRAM 메모리 다이(402), FPGA 다이(403), 및 처리 로직 다이(404)를 도시한다. 도 1에 도시된 바와 같이, TSV(104)은 TSV(104A, 104B)를 포함한다. TSV(104A, 104B)는 스택된 다이들(401-404) 사이에 하나 또는 다수의 TSV를 각각 나타낼 수 있다. 예를 들어, TSV(104A, 104B)의 각 세트는 명령, 어드레스 및 데이터 TSV의 서브-세트를 포함할 수 있다. TSV(104A)는 구성 메모리(111), 구성 캐시(116), 프로그래밍 영역(122) 및 메모리 제어기(102) 간에 통신을 위한 데이터 경로를 제공한다. TSV(104B)는 구성 메모리(112), 구성 캐시(117), 프로그래밍 영역(123), 및 메모리 제어기(102) 간에 통신을 위한 직접 데이터 경로를 제공한다.
다이 스택(400)에서, 구성 캐시 및 구성 메모리 영역은 FPGA(120) 내의 임의의 다른 프로그래밍 영역보다 그들의 대응하는 프로그래밍 영역에 물리적으로 더 가깝게 위치된다. 예를 들어, 구성 메모리(111) 및 구성 캐시(116)는 각각 FPGA(120) 내의 임의의 다른 프로그래밍 영역(예를 들어, 프로그래밍 영역(123))보다 그들의 대응하는 프로그래밍 영역(122)에 더 가깝게 위치된다. 유사하게, 구성 메모리(112) 및 구성 캐시(117)는 각각 다른 프로그래밍 영역보다 그들의 대응하는 프로그래밍 영역(123)에 더 가깝게 위치된다. 또한, 스택(400) 내 각 구성 메모리 및 구성 캐시는 메모리 또는 캐시의 적어도 일부가 자신의 대응하는 프로그래밍 영역 위에 위치하도록 스택된다. 연관된 프로그래밍 영역에 가장 가까운 구성 메모리 및 캐시 영역의 위치 설정 및 FPGA 다이(403) 위에 메모리 다이(401 및 402)의 수직 스태킹은 구성 데이터의 보다 빠른 전송을 용이하게 하기 위해 TSV(104A, 104B)의 길이를 최소화한다.
FPGA(120) 내의 각 프로그래밍 영역은 자신과 프로세서 로직 다이(404) 상에 위치된 공통 메모리 제어기(102) 간에 전용 버스 대역폭을 갖는다. 대안적 실시예에서, 메모리 제어기(102)는 처리 로직 다이(404) 대신에 다른 다이(예를 들어, FPGA 다이(403)) 상에 위치될 수 있다. 프로그래밍 영역의 재구성이 행해질 때, 메모리 제어기(102)는 재구성되는 프로그래밍 영역에 연관된 구성 메모리 또는 구성 캐시로부터 TSV를 통해 적합한 구성 비트스트림 데이터를 읽는다. 이어, 메모리 제어기(102)는 구성 비트스트림 데이터를 TSV를 통해 프로그래밍 영역에 기입한다. 대안적 실시예에서, 각각의 프로그래밍 영역은 다수의 프로그래밍 영역들과 통신하기 위해 사용되는 공통 메모리 제어기(102)보다는 FPGA(120)에 구현된 자기 자신의 단순 메모리 제어기를 가질 수 있다.
도 5a 내지 도 5d는 컴퓨팅 시스템(100)의 구성 요소가 상주하는 다이가 스택(400)과 다르게 배열되는 컴퓨팅 시스템(100)의 대안적 실시예를 도시한다. 도 5a, 도 5b, 도 5c 및 도 5d에 각각 도시된 바와 같이, 스택(510, 520A-B, 530A-B, 540A-C)에 있어서, 이들 다이 스택에 포함된 다이는 스택(400)에 그들의 유사하게 명명된 것과 유사한 특징을 갖는다. 대안적 실시예에서, 다른 배열이 가능한데; 예를 들어, 컴퓨팅 시스템(100)의 구성 요소 중 일부는 400과 비교하여 상이한 다이에 위치될 수 있다.
도 5a는 인터포저(514) 위에 각각, 위에서 아래로 스택된 DRAM 다이(511), FPGA 다이(512) 및 프로세서 로직 다이(513)를 포함하는 다이 스택(510)을 도시한다. 도 4a에 도시된 스택(400)과 비교하여, 스택(510)은 저 레이턴시 메모리 다이(예를 들어, SRAM 다이 또는 STT-MRAM 다이)의 생략으로 인해 비용 및 복잡성을 감소시켰다.
도 5b는 컴퓨팅 시스템(100)의 구성 요소가 상주하는 다이가 2개의 스택(520A, 520B)에 위치되는 배열을 도시한다. 스택(520A)은 인터포저(524) 위에 각각, 위에서 아래로 스택된 FPGA 다이(521) 및 프로세서 로직 다이(522)를 포함한다. DRAM 메모리 다이(523)는 인접 스택(520B) 내의 동일한 인터포저(524) 위에 스택되고, 인터포저(524)는 상이한 스택(520A, 520B) 내의 다이 간에 통신을 가능하게 하는 전기적 연결을 제공한다. 로직 다이(521, 522)를 메모리 다이(523)로부터 분리하는 것은 구조로부터 열의 소산을 용이하게 한다.
도 5c는 도 5b에 도시된 다이 스택(520A, 520B)과 유사한 배열을 갖는 다이 스택(530A, 530B)을 포함하는 구조를 도시하는데; 그러나, 스택(520A)과 달리, 스택(530A)은 FPGA 다이(532) 및 프로세서 로직 다이(533) 위에 스택된 추가적인 저 레이턴시 메모리 다이(즉, SRAM 다이(531))를 포함한다. SRAM 다이(531)는 FPGA(120) 내의 프로그래밍 영역을 재구성하는 시간을 감소시키기 위해 구성 캐시 메모리를 구현하기 위해 사용된다. DRAM 다이(534)는 인접한 스택(530B)에 위치되고, 다이 스택(530A, 530B)은 모두 서로 다른 스택들(530A, 530B) 내의 다이들 간의 통신을 가능하게 하는 전기적 연결을 제공하는 인터포저(535) 위에 스택된다.
도 5d는 컴퓨팅 시스템(100)의 구성 요소가 공통 인터포저(545) 위에 3개의 다이 스택(540A, 540B, 540C)에 배열되는 구조를 도시한다. 다수의 다이 스택(540A, 540B, 540C)으로 다이들의 배열은 구조로부터 열의 소산을 용이하게 한다. 다이 스택(540A)은 프로세서 로직 다이(542)를 포함하고, 다이 스택(540C)은 DRAM 다이(544)를 포함하고, 다이 스택(540B)은 FPGA 다이(543) 위에 스택된 SRAM 다이(541)를 포함한다. 다이(541-544)는 각각 공통 인터포저(545)에 의해 제공되는 전기적 연결을 통해 다른 스택에 다이와 통신할 수 있다.
도 6은 명령 스트림의 명령에 기초하여 재구성가능한 FPGA(120)를 포함하는 컴퓨팅 시스템(100)에서 명령 스트림을 실행하기 위한 프로세스(600)의 실시예를 도시한다. 프로세스(600)의 동작은 프로세서(101)로부터 발행된 명령 스트림 내 명령을 실행하기 위해 컴퓨팅 시스템(100)의 다양한 구성 요소에 의해 수행된다. 일 실시예에서, 명령 스트림은 단일 컴퓨터 프로그램을 정의하기 위한 명령의 적어도 서브-세트를 포함하는 연속 명령 스트림이다.
프로세스(600)는 블록(601)에서 시작한다. 블록(601)에서, 컴퓨팅 시스템(100)은 FPGA(120) 내의 각 프로그래밍 영역에 대한 하나 이상의 선택가능 구성을 저장한다. 예를 들어, 프로그래밍 영역(122)에 연관된 구성 메모리(111)는 프로그래밍 영역(122)에 프로그래밍하기 위해 선택될 수 있는 적어도 2개의 구성, 상태 A 및 상태 B를 저장한다. 이 예를 계속하면, 상태 A는 4개의 가산기 유닛을 구현하도록 프로그래밍 영역(122)을 구성하는 구성 비트스트림을 포함할 수 있고, 상태 B는 4개의 승산기 유닛을 구현하도록 프로그래밍 영역(122)을 구성하는 구성 비트스트림을 포함할 수 있다. 블록(601)으로부터, 프로세스(600)는 블록(603)에서 계속된다.
블록(603)에서, FPGA(120)는 명령 스트림에서 제1 명령을 수신한다. 예를 들어, 프로세서(101)는 FPGA(120)의 프로그래밍 영역들 중 하나에서 실행될 명령을 디스패치할 수 있다. 명령은 FPGA(120)의 구성 로직(121)에서 수신된다. 블록(603)으로부터, 프로세스(600)는 블록(605)에서 계속된다.
블록(605-607)에서, 구성 로직(121)은 수신된 명령 또는 후속 명령이 실행될 수 있기 전에 임의의 프로그래밍 영역이 재구성되어야 하는지를 수신된 명령에 기초하여 결정한다. 블록(605)에서, 구성 로직(121)은 블록(603)에서 수신된 명령이 명시적 재구성 명령인지 여부를 결정한다. 명령이 명시적 재구성 명령이 아니면, 프로세스(600)는 블록(607)에서 계속된다.
블록(607)에서, 구성 로직(121)은 임의의 프로그래밍 영역이 블록(603)에서 수신된 명령을 실행하기 위해 이미 구성되어 있는지 여부를 결정한다. 예를 들어, 명령이 곱셈 명령이면, 구성 로직(121)은 프로그래밍 영역들(122 또는 123) 중 어느 하나의 기존 구성이 명령을 실행하는데 사용될 수 있는 승산기 유닛을 포함하는지 여부를 결정한다. 블록(607)에서, 프로그래밍 영역들 중 적어도 하나가 명령을 실행할 수 있다면, 프로세스(600)는 블록(609)에서 계속된다.
블록(609)에서, 명령은 명령을 실행하도록 적합하게 구성된 프로그래밍 영역에서 실행된다. 따라서, 블록(603-609)의 동작에 의해, 명시적 재구성 명령이 아닌, 프로그래밍 영역이 명령을 실행하도록 적합하게 구성될 때 수신되는 명령은 단순히 명령 수신에 응답하여 프로그래밍 영역에서 실행된다. 블록(609)으로부터, 프로세스(600)는 블록(603)으로 다시 진행한다.
블록(603)에서, FPGA(120)는 하나 이상의 프로그래밍 영역이 재구성되게하는 명령 스트림 내 제2 명령을 수신한다. 제2 명령은 명령 스트림 내 제1 명령 후의 다음 후속 명령일 수 있다. 즉, 프로그래밍 영역의 재구성을 야기하는 명령은 기존 구성을 사용하여 프로그래밍 영역에서 실행되는 제1 명령과 동일한 연속 명령 스트림의 일부일 수 있다. 일 실시예에서, 명령 스트림을 제어하는 프로세스 또는 엔티티가 다른 프로세스 또는 엔티티(예를 들어, 운영 시스템, 하드웨어 디바이스, 등)에 의한 인터럽트 없이 스트림 내 각 명령에서 다음 명령으로 자동 진행이 허용된다. 블록(603)으로부터, 프로세스(600)는 블록(605)에서 계속된다.
블록(605)에서, 구성 로직(121)은 블록(603)에서 수신된 제2 명령이 명시적 재구성 명령인지 여부를 결정한다. 명시적 재구성 명령은 식별된 프로그래밍 영역에 대한 프로그래밍 영역 및 구성을 식별한다. 예를 들어, 명시적 재구성 명령은 프로그래밍 영역(122)을 구성하기 위해 구성 메모리(111)에서 프로그래밍 영역(122) 및 상태 B를 식별할 수 있다. 제2 명령이 명시적 재구성 명령이면, 프로세스(600)는 블록(611)에서 계속된다. 그렇지 않으면, 프로세스(600)는 블록(607)에서 계속된다.
블록(607)에서, 구성 로직(121)은 임의의 프로그래밍 영역이 블록(603)에서 수신된 제2 명령을 실행하도록 이미 구성되어 있는지 여부를 결정한다. FPGA(120) 내의 프로그래밍 영역이 제2 명령의 실행을 위해 이미 구성되었다면, 프로세스(600)는 블록(609)에서 계속되고, 명령은 프로그래밍 영역에서 실행되고; 그렇지 않다면, 프로세스(600)는 블록(611)에서 계속된다.
블록(611)에서, 구성 로직(121)은 FPGA(120) 내의 하나 이상의 타겟 프로그래밍 영역을 식별하고, 하나 이상의 타겟 프로그래밍 영역에 대한 콘텍스트 데이터를 하나 이상의 타겟 프로그래밍 영역에 대응하는 콘텍스트 메모리에 저장함으로써 하나 이상의 타겟 프로그래밍 영역을 재구성하도록 준비한다. 예를 들어, 재구성이 명시적 재구성 명령에 응답하여 수행되고 있을 때, 명시적 재구성 명령은 FPGA(120) 내의 프로그래밍 영역 중 어느 것이 재구성되어야 하는지를 나타낸다. 암묵적 재구성에 대해서, 구성 로직(121)은 사용되지 않거나 가까운 장래에 사용될 것으로 예상되지 않는 프로그래밍 영역을 타겟 프로그래밍 영역으로서 식별할 수 있다. 블록(611)으로부터, 프로세스(600)는 블록(613)에서 계속된다.
블록(613)에서, 구성 로직(121)은 타겟 프로그래밍 영역의 구성가능 로직 블록을 다른 프로그래밍 영역으로부터 분리하기 위해 타겟 프로그래밍 영역의 경계에 경계 스위치를 개방함으로써 타겟 프로그래밍 영역을 FPGA(120)의 다른 프로그래밍 영역으로부터 격리시킨다. 타겟 프로그래밍 영역의 이러한 격리는 타겟 프로그래밍 영역 내의 하드웨어가 FPGA(120)의 다른 프로그래밍 영역들 중 임의의 것으로부터 독립적으로 재구성되도록 한다. 도 2를 참조하고, 타겟 프로그래밍 영역으로서 프로그래밍 영역(122)을 갖는 이전의 예를 계속하면, 구성 로직(121)은 프로그래밍 영역(122)의 경계에서 경계 스위치(222)를 분리함으로써 프로그래밍 영역(122)의 구성가능 로직 블록(131-134)을 격리시킨다. 블록(613)으로부터, 프로세스(600)는 블록(615)에서 계속된다.
블록(615)에서, 구성 로직(121)은 블록(603)에서 수신된 명령에 기초하여 타겟 프로그래밍 영역에 대한 구성 중 하나를 선택한다. 명령이 명시적 재구성 명령일 때, 구성 로직(121)은 명령에 표시된 구성을 선택한다. 예를 들어, '상태 B' 구성을 나타내는 명시적 재구성 명령은 구성 로직(121)이 구성 메모리(111)에 저장된 상태 B에 대응하는 구성 비트스트림을 선택하게 할 것이다.
대안적으로, 블록(603)에서 수신된 명령이 명시적 재구성 명령이 아니라면, 구성 로직(121)은, 도 3에 도시된 바와 같이, 함수 테이블(301)을 사용하여 구성을 선택한다. 구성 로직(121)은 함수 영역(301)에 명령의 연산코드(opcode)(예를 들어, ID1, ID2)를 검색하여 프로그래밍 영역을 구성하기 위한 구성 비트스트림의 어드레스(예를 들어, 어드레스 A, 어드레스 B)를 결정한다. 블록(615)으로부터, 프로세스(600)는 블록(617)에서 계속된다.
블록(617)에서, 구성 로직(121)은 선택된 구성 비트스트림을 사용하여 타겟 프로그래밍 영역의 구성가능 로직 블록에서 하드웨어를 재구성한다. 메모리 제어기(102)는 구성 메모리로부터 선택된 구성 비트스트림을 인출하고 비트스트림을 TSV(104)를 통해 FPGA(120)로 전송한다. 이어, 구성 로직(121)은 구성 비트스트림을 사용하여 타겟 프로그래밍 영역을 재구성한다. 예를 들어, 타겟 프로그래밍 영역(122)이 상태 B에 따라 재구성되기 위해, 구성 로직(121)은 TSV(104)를 통해 상태 B에 대응하는 구성 비트스트림을 수신하고, 상태 B에대한 구성 비트스트림을 사용하여 프로그래밍 영역(122)의 구성가능 로직 블록(131-134)을 프로그램한다. 일 실시예에서, 구성 비트스트림은 타겟 프로그래밍 영역(122)의 대응 캐시 메모리(141)에 캐시될 수 있다. 일 실시예에서, 타겟 프로그래밍 영역의 하나 이상의 구성가능 로직 블록에서 하드웨어를 재구성하기 위한 기간은 1 밀리초 미만일 수 있다. 블록(617)으로부터, 프로세스(600)는 블록(619)에서 계속된다.
블록(619)에서, 블록(603)에서 수신된 명령이 실행을 계류중인 경우, 프로세스(600)는 블록(609)에서 계속되고 명령은 재구성된 프로그래밍 영역에서 실행된다. 그렇지 않으면, 명령이 실행을 계류하고 있지 않으면(예를 들어, 명령이 재구성이 완료된 명시적 재구성 명령일 때), 프로세스(600)는 명령 스트림에서 다음 명령을 수신하기 위해 블록(603)으로 되돌아가 계속된다. 따라서, 실행 프로세스(600)는 명령 스트림에서 수신된 명령을 실행하기 위해 루프에서 동작하여, 명시적으로 명령되었을 때 혹은 특정 함수에 대한 요구에 응하여 암묵적으로 프로그래밍 영역을 적합하게 재구성한다.
본원에서 사용된 바와 같이, "결합된"이라는 용어는 하나 이상의 개재 구성 요소를 통해 직접적으로 또는 간접적으로 결합된 것을 의미할 수 있다. 본원에 설명된 다양한 버스를 통해 제공된 신호들 중 임의의 신호는 다른 신호들과 시간 다중화될 수 있고 하나 이상의 공통 버스를 통해 제공될 수 있다. 또한, 회로 구성 요소 또는 블록 간의 상호연결은 버스 또는 단일 신호 라인으로서 표시될 수 있다. 각각의 버스는 대안적으로 하나 이상의 단일 신호 라인일 수 있고, 단일 신호 라인 각각은 대안적으로 버스일 수 있다.
특정 실시예는 비-일시적 컴퓨터 판독가능 매체에 저장된 명령을 포함할 수 있는 컴퓨터 프로그램 제품으로서 구현될 수 있다. 이들 명령은 기술된 동작을 수행하기 위해 범용 또는 전용 프로세서를 프로그램하기 위해 사용될 수 있다. 컴퓨터 판독가능 매체는 기계(예를 들어, 컴퓨터)에 의해 판독가능한 형태(예를 들어, 소프트웨어, 처리 어플리케이션)로 정보를 저장하거나 전송하기 위한 임의의 메커니즘을 포함한다. 비-일시적 컴퓨터 판독가능 저장 매체는 자기 저장 매체(예를 들어, 플로피 디스켓); 광학 저장 매체(예를 들어, CD-ROM); 자기-광학 저장 매체; ROM(read-only memory); 랜덤 액세스 메모리(RAM); 소거가능 프로그래머블 메모리(예를 들어, EPROM 및 EEPROM); 플래시 메모리, 또는 전자 명령을 저장하기에 적합한 다른 유형의 매체를 포함할 수 있는데, 그러나 이들로 제한되지 않는다.
또한, 일부 실시예는 컴퓨터 판독가능 매체가 둘 이상의 컴퓨터 시스템에 저장되고/있거나 실행되는 분산 컴퓨팅 환경에서 실시될 수 있다. 또한, 컴퓨터 시스템들 간에 전송된 정보는 컴퓨터 시스템들을 연결하는 전송 매체를 통해 가져오거나 넣어질 수 있다.
일반적으로, 컴퓨터 판독가능 저장 매체 상에 수록된 컴퓨팅 시스템(100) 및/또는 그의 일부를 나타내는 데이터 구조는 프로그램에 의해 판독되고 컴퓨팅 시스템(100)을 포함하는 하드웨어를 제조하기 위해 직접 또는 간접적으로 사용될 수 있는 데이터베이스 또는 다른 데이터 구조일 수 있다. 예를 들어, 데이터 구조는 베릴로그(Verilog) 또는 VHDL과 같은 상위 레벨 설계 언어(high level design language; HDL)의 하드웨어 함수에 대한 동작 레벨 디스크립션 또는 레지스터 전송 레벨(register-transfer level; RTL) 디스크립션일 수 있다. 디스크립션은 합성 라이브러리로부터 게이트 리스트를 포함하는 네트리스트를 생성하기 위해 디스크립션을 합성할 수 있는 합성 툴에 의해 판독될 수 있다. 네트리스트는 또한 컴퓨팅 시스템(100)을 포함하는 하드웨어의 함수를 나타내는 한 세트의 게이트를 포함한다. 이어 네트리스트는 배치되고 라우팅되어 마스크에 적용될 기하학적 형상을 기술하는 데이터 세트를 생성할 수 있다. 이어, 마스크는 컴퓨팅 시스템(100)에 대응하는 반도체 회로 또는 회로들을 생성하기 위해 다양한 반도체 제조 단계들에서 사용될 수 있다. 대안적으로, 컴퓨터 판독가능 저장 매체 상의 데이터베이스는 원하는대로 네트리스트(합성 라이브러리를 갖거나 갖지 않은) 또는 데이터 세트, 또는 그래픽 데이터 시스템(Graphic Data System; GDS) II 데이터일 수 있다.
본원에서 방법(들)의 동작이 특정 순서로 도시되고 기술되었지만, 각 방법의 동작의 순서는 특정 동작이 역순으로 수행될 수 있도록, 혹은 특정 동작이 적어도 부분적으로 다른 동작과 동시에 수행될 수 있도록 변경될 수 있다. 다른 실시예에서, 별개의 동작들의 명령들 또는 서브-동작들은 간헐적인 및/또는 교호적인 방식으로 있을 수 있다.
전술한 명세에서, 실시예는 특정 실시예를 참조하여 설명되었다. 그러나, 첨부된 청구 범위에 설명된 바와 같이 실시예의 더 넓은 사상 및 범위를 벗어나지 않고 다양한 변경 및 수정이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미가 아니라 예시적인 의미로 간주되어야 한다.

Claims (27)

  1. 프로그래머블(programmable) 디바이스에 있어서,
    각각이 복수의 구성가능 로직 블록들을 포함하는 하나 이상의 프로그래밍 영역들 - 상기 복수의 구성가능 로직 블록들의 각각의 구성가능 로직 블록은 프로그래머블 상호연결 패브릭(interconnect fabric)을 통해 상기 복수의 구성가능 로직 블록들의 임의의 다른 구성가능 로직 블록에 선택적으로 연결가능하며, 상기 하나 이상의 프로그래밍 영역들 중 제1 프로그래밍 영역은 명령(instruction) 스트림 내 제1 명령을 실행하도록 구성되고 - 과; 그리고
    상기 명령 스트림 내의 제2 명령에 응답하여, 상기 하나 이상의 프로그래밍 영역들의 임의의 다른 프로그래밍 영역과는 독립적으로 상기 제1 프로그래밍 영역 내의 상기 복수의 구성가능 로직 블록들 중 하나 이상에서 하드웨어를 재구성하도록 구성된 구성 로직을 포함하는, 프로그래머블 디바이스.
  2. 청구항 1에 있어서, 각각의 프로그래밍 영역은 상기 프로그래밍 영역에 대한 복수의 선택가능 구성들을 저장하도록 구성된 구성 메모리와 결합되고, 상기 구성 로직은 상기 프로그래밍 영역의 상기 구성 메모리에 저장된 상기 복수의 선택 가능한 구성들 중 선택된 구성에 기초하여 상기 프로그래밍 영역을 재구성하도록 더 구성되는, 프로그래머블 디바이스.
  3. 청구항 2에 있어서, 상기 구성 메모리는 정적 랜덤 액세스 메모리(static random access memory; SRAM)를 포함하는, 프로그래머블 디바이스.
  4. 청구항 2에 있어서, 상기 구성 메모리는 임의의 다른 프로그래밍 영역보다 상기 프로그래밍 영역에 더 가깝게 위치되는, 프로그래머블 디바이스.
  5. 청구항 1에 있어서, 상기 제1 프로그래밍 영역은 상기 제1 프로그래밍 영역 내의 상기 복수의 구성가능 로직 블록들 중 하나 이상에서의 상기 하드웨어의 상기 재구성 후에 상기 제2 명령을 실행하도록 구성되며, 상기 명령 스트림은 단일 컴퓨터 프로그램을 정의하는 상기 명령들의 적어도 서브-세트를 포함하는 연속 명령 스트림을 포함하고, 상기 제2 명령은 상기 명령 스트림 내의 상기 제1 명령 후의 다음 후속 명령인, 프로그래머블 디바이스.
  6. 청구항 1에 있어서, 하나의 프로그래밍 영역을 다른 프로그래밍 영역들과 전기적으로 격리시키도록 구성된 상기 프로그래머블 상호연결 패브릭 내의 한 세트의 경계 스위치들을 더 포함하는, 프로그래머블 디바이스.
  7. 청구항 1에 있어서, 상기 제2 명령은 상기 제1 프로그래밍 영역을 식별하고 상기 제1 프로그래밍 영역에 대한 선택된 구성을 식별하는 재구성 명령인, 프로그래머블 디바이스.
  8. 청구항 1에 있어서, 상기 하나 이상의 구성가능 로직 블록들에서의 상기 하드웨어의 상기 재구성 이전에 상기 제1 프로그래밍 영역에 대한 콘텍스트(context) 데이터를 저장하도록 구성된 콘텍스트 메모리를 더 포함하는, 프로그래머블 디바이스.
  9. 청구항 1에 있어서, 상기 프로그래머블 디바이스는 필드 프로그래머블 게이트 어레이(field-programmable gate array; FPGA) 디바이스인, 프로그래머블 디바이스.
  10. 청구항 1에 있어서, 상기 프로그래머블 디바이스는 실리콘 관통 비아(through-silicon via; TSV)들에 의해 결합된 복수의 스택된 다이들 중 하나에 상주하는, 프로그래머블 디바이스.
  11. 청구항 1에 있어서, 복수의 명령들 각각에 대한 구성 비트스트림의 어드레스를 저장하도록 구성된 함수 테이블을 더 포함하고, 상기 구성 로직은 상기 제2 명령에 대응하는 구성 비트스트림의 어드레스를 상기 함수 테이블로부터 식별하도록 더 구성되는, 프로그래머블 디바이스.
  12. 방법으로서,
    명령 스트림 내의 제1 명령을 수신하는 것에 응답하여, 프로그래머블 디바이스 내의 하나 이상의 프로그래밍 영역들의 제1 프로그래밍 영역에서 상기 제1 명령을 실행하는 단계; 및
    상기 명령 스트림 내의 제2 명령을 수신한 것에 응답하여, 상기 하나 이상의 프로그래밍 영역들의 임의의 다른 프로그래밍 영역과는 독립적으로 상기 제1 프로그래밍 영역 내의 복수의 구성가능 로직 블록들 중 하나 이상에서 하드웨어를 재구성하는 단계를 포함하는, 방법.
  13. 청구항 12에 있어서, 상기 하나 이상의 프로그래밍 영역들의 각각의 프로그래밍 영역에 대해:
    상기 프로그래밍 영역에 대한 복수의 선택가능한 구성들을 저장하는 단계; 및
    상기 프로그래밍 영역의 상기 구성 메모리에 저장된 상기 복수의 선택가능 구성들 중 선택된 구성에 기초하여 상기 프로그래밍 영역을 재구성하는 단계를 더 포함하는, 방법.
  14. 청구항 13에 있어서, 상기 제2 명령은 상기 제1 프로그래밍 영역을 식별하고 상기 제1 프로그래밍 영역에 대한 상기 선택된 구성을 식별하는 재구성 명령이고, 상기 제1 프로그래밍 영역을 재구성하는 단계는 상기 제2 명령에 기초하여 상기 제1 프로그래밍 영역의 상기 구성 메모리에 저장된 상기 복수의 선택가능 구성들 중 하나를 선택하는 단계를 포함하는, 방법.
  15. 청구항 12에 있어서, 상기 제1 프로그래밍 영역 내의 상기 복수의 구성가능 로직 블록들 중 하나 이상에서 상기 하드웨어를 재구성하는 단계 이후에 상기 제2 명령을 실행하는 단계를 더 포함하며, 상기 명령 스트림은 단일 컴퓨터 프로그램을 정의하는 명령들의 적어도 서브-세트를 포함하는 연속 명령 스트림이고, 상기 제2 명령은 상기 명령 스트림 내의 상기 제1 명령 후의 다음 후속 명령인, 방법.
  16. 청구항 12에 있어서, 상기 복수의 구성가능 로직 블록들을 연결하는 프로그래머블 상호연결 패브릭 내의 한 세트의 경계 스위치들을 통해 상기 제1 프로그래밍 영역을 상기 하나 이상의 프로그래밍 영역들의 다른 프로그래밍 영역들로부터 격리시키는 단계를 더 포함하는, 방법.
  17. 청구항 12에 있어서, 상기 하나 이상의 구성가능 로직 블록들에서 상기 하드웨어를 재구성하는 단계 이전에 상기 제1 프로그래밍 영역에 대한 콘텍스트 데이터를 콘텍스트 메모리에 저장하는 단계를 더 포함하는, 방법.
  18. 청구항 12에 있어서, 상기 프로그래머블 디바이스는 필드 프로그래머블 게이트 어레이(FPGA) 디바이스인, 방법.
  19. 청구항 12에 있어서, 상기 프로그래머블 디바이스는 실리콘 관통 비아(TSV)들에 의해 결합된 복수의 스택된 다이들 중 하나에 상주하는, 방법.
  20. 청구항 12에 있어서, 복수의 명령들 각각에 대한 구성 비트스트림의 어드레스를 함수 테이블에 저장하는 단계; 및
    상기 제2 명령에 대응하는 구성 비트스트림의 어드레스를 상기 함수 테이블로부터 식별하는 단계를 더 포함하는, 방법.
  21. 컴퓨팅 시스템에 있어서,
    명령 스트림에 복수의 명령들을 디스패치(dispatch)하도록 구성된 프로세서; 및
    상기 프로세서와 결합된 프로그래머블 디바이스를 포함하고,
    상기 프로그래머블 디바이스는,
    각각이 복수의 구성가능 로직 블록들을 포함하는 하나 이상의 프로그래밍 영역들 - 각각의 구성가능 로직 블록은 프로그래머블 상호연결 패브릭을 통해 임의의 다른 구성가능 로직 블록에 선택적으로 연결가능하며, 상기 하나 이상의 프로그래밍 영역들 중 제1 프로그래밍 영역은 명령 스트림 내 제1 명령을 실행하도록 구성되고 - 과; 그리고
    상기 명령 스트림 내의 제2 명령에 응답하여, 임의의 다른 프로그래밍 영역과는 독립적으로 상기 제1 프로그래밍 영역 내의 상기 복수의 구성가능 로직 블록들 중 하나 이상에서 하드웨어를 재구성하도록 구성된 구성 로직을 포함하는 것인, 컴퓨팅 시스템.
  22. 청구항 21에 있어서, 각각의 프로그래밍 영역에 대해, 상기 프로그래밍 영역에 대한 복수의 선택가능 구성들을 저장하도록 구성된 구성 메모리를 더 포함하며, 상기 구성 메모리는 상기 프로그래머블 디바이스 위에 스택된 동적 랜덤 액세스 메모리(dynamic random access memory; DRAM) 모듈 내에 위치되며, 상기 구성 메모리는 하나 이상의 실리콘 관통 비아들에 의해 상기 프로그래밍 영역에 결합되는, 컴퓨팅 시스템.
  23. 청구항 22에 있어서, 상기 구성 메모리와 결합되고 상기 구성 메모리로부터 상기 복수의 선택 가능 구성들의 선택된 구성을 수신하고 상기 선택된 구성을 상기 프로그래머블 디바이스에 적용하도록 구성된 메모리 제어기를 더 포함하는, 컴퓨팅 시스템.
  24. 청구항 21에 있어서, 상기 프로그래머블 디바이스는 필드 프로그래머블 게이트 어레이(FPGA) 디바이스를 포함하는, 컴퓨팅 시스템.
  25. 청구항 21에 있어서, 상기 프로그래머블 디바이스를 포함하는 제1 집적회로 다이는 상기 프로세서를 포함하는 제2 집적회로 다이 위에 스택되고, 상기 제1 집적회로 다이 및 상기 제2 집적회로 다이는 실리콘 관통 비아(TSV)들에 의해 결합되는, 컴퓨팅 시스템.
  26. 청구항 21에 있어서, 복수의 명령들 각각에 대한 구성 비트스트림의 어드레스를 저장하도록 구성된 함수 테이블을 더 포함하며, 상기 구성 로직은 상기 제2 명령에 대응하는 구성 비트스트림의 어드레스를 상기 함수 테이블로부터 식별하도록 더 구성되는, 컴퓨팅 시스템.
  27. 청구항 21에 있어서, 상기 구성 로직은 상기 하드웨어를 제1 하드웨어 구성에서 제2 하드웨어 구성으로 재구성함으로써 상기 복수의 구성가능 블록들 중 하나 이상에서 상기 하드웨어를 재구성하도록 구성되며, 상기 컴퓨팅 시스템은,
    입력 소스 코드에 기초하여, 상기 하드웨어가 상기 제2 하드웨어 구성에 있을 때 상기 제1 프로그래밍 영역에서 실행가능한 제3 명령을 식별하고; 및
    상기 제3 명령을 식별하는 것에 응답하여, 상기 명령 스트림 내에 상기 제3 명령에 앞서 상기 제2 명령을 발생하게 구성되는 컴파일러를 더 포함하는, 컴퓨팅 시스템.
KR1020177033551A 2015-06-26 2016-05-13 신속 재구성가능 회로 및 고-대역폭 메모리 인터페이스를 사용한 컴퓨터 아키텍처 KR101873484B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/751,947 2015-06-26
US14/751,947 US9698790B2 (en) 2015-06-26 2015-06-26 Computer architecture using rapidly reconfigurable circuits and high-bandwidth memory interfaces
PCT/US2016/032504 WO2016209406A1 (en) 2015-06-26 2016-05-13 Computer architecture using rapidly reconfigurable circuits and high-bandwidth memory interfaces

Publications (2)

Publication Number Publication Date
KR20170138541A true KR20170138541A (ko) 2017-12-15
KR101873484B1 KR101873484B1 (ko) 2018-07-03

Family

ID=56404272

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177033551A KR101873484B1 (ko) 2015-06-26 2016-05-13 신속 재구성가능 회로 및 고-대역폭 메모리 인터페이스를 사용한 컴퓨터 아키텍처

Country Status (6)

Country Link
US (1) US9698790B2 (ko)
EP (1) EP3314451B1 (ko)
JP (1) JP2018530025A (ko)
KR (1) KR101873484B1 (ko)
CN (1) CN107667474B (ko)
WO (1) WO2016209406A1 (ko)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10031765B2 (en) * 2015-09-24 2018-07-24 Intel Corporation Instruction and logic for programmable fabric hierarchy and cache
US20170153892A1 (en) * 2015-11-30 2017-06-01 Intel Corporation Instruction And Logic For Programmable Fabric Hierarchy And Cache
JP2017135698A (ja) * 2015-12-29 2017-08-03 株式会社半導体エネルギー研究所 半導体装置、コンピュータ及び電子機器
US9948306B2 (en) * 2016-03-05 2018-04-17 HangZhou HaiCun Information Technology Co., Ltd. Configurable gate array based on three-dimensional printed memory
US10223317B2 (en) 2016-09-28 2019-03-05 Amazon Technologies, Inc. Configurable logic platform
US10795742B1 (en) * 2016-09-28 2020-10-06 Amazon Technologies, Inc. Isolating unresponsive customer logic from a bus
US10310861B2 (en) * 2017-04-01 2019-06-04 Intel Corporation Mechanism for scheduling threads on a multiprocessor
US10545860B2 (en) * 2017-08-10 2020-01-28 Samsung Electronics Co., Ltd. Intelligent high bandwidth memory appliance
US10474600B2 (en) * 2017-09-14 2019-11-12 Samsung Electronics Co., Ltd. Heterogeneous accelerator for highly efficient learning systems
US10866900B2 (en) * 2017-10-17 2020-12-15 Samsung Electronics Co., Ltd. ISA extension for high-bandwidth memory
US10540200B2 (en) 2017-11-10 2020-01-21 Advanced Micro Devices, Inc. High performance context switching for virtualized FPGA accelerators
US10579557B2 (en) * 2018-01-16 2020-03-03 Advanced Micro Devices, Inc. Near-memory hardened compute blocks for configurable computing substrates
US10727204B2 (en) * 2018-05-29 2020-07-28 Advances Micro Devices, Inc. Die stacking for multi-tier 3D integration
US11296706B2 (en) * 2018-06-27 2022-04-05 Intel Corporation Embedded network on chip accessible to programmable logic fabric of programmable logic device in multi-dimensional die systems
US10447273B1 (en) 2018-09-11 2019-10-15 Advanced Micro Devices, Inc. Dynamic virtualized field-programmable gate array resource control for performance and reliability
US20200294182A1 (en) * 2019-03-15 2020-09-17 Intel Corporation On chip dense memory for temporal buffering
CN109992263B (zh) * 2019-04-05 2022-09-13 腾讯科技(深圳)有限公司 一种执行可视化编程的方法和装置
CN110192269A (zh) * 2019-04-15 2019-08-30 长江存储科技有限责任公司 三维nand存储器件与多个功能芯片的集成
US10782759B1 (en) * 2019-04-23 2020-09-22 Arbor Company, Lllp Systems and methods for integrating batteries with stacked integrated circuit die elements
US10802735B1 (en) * 2019-04-23 2020-10-13 Arbor Company, Lllp Systems and methods for reconfiguring dual-function cell arrays
KR20210050966A (ko) 2019-10-29 2021-05-10 삼성전자주식회사 적층형 뉴로모픽 장치 및 뉴로모픽 컴퓨팅 장치
WO2021150952A1 (en) * 2020-01-23 2021-07-29 Spero Devices, Inc. Data flow architecture for processing with memory computation modules
DE102020116872A1 (de) * 2020-03-27 2021-09-30 Dspace Digital Signal Processing And Control Engineering Gmbh Verfahren zur Programmierung einer programmierbaren Gatteranordnung in einem verteilten Computersystem
JP7402357B2 (ja) * 2020-06-29 2023-12-20 アーバー・カンパニー・エルエルエルピイ プロセッサ非依存5Gモデムを有する3Dダイ・スタッキングの再構成可能プロセッサ・モジュールを使用するモバイルIoTエッジ・デバイス
CN111858462B (zh) * 2020-07-14 2023-05-16 成都华微电子科技股份有限公司 并列式fpga

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2719926B1 (fr) * 1994-05-10 1996-06-07 Sgs Thomson Microelectronics Circuit électronique et procédé d'utilisation d'un coprocesseur.
US5737631A (en) 1995-04-05 1998-04-07 Xilinx Inc Reprogrammable instruction set accelerator
JPH118547A (ja) * 1997-06-17 1999-01-12 Fuji Xerox Co Ltd 再構成可能演算装置
JPH1139159A (ja) * 1997-07-15 1999-02-12 Hitachi Ltd 計算機システム
US6091263A (en) 1997-12-12 2000-07-18 Xilinx, Inc. Rapidly reconfigurable FPGA having a multiple region architecture with reconfiguration caches useable as data RAM
JP3611714B2 (ja) * 1998-04-08 2005-01-19 株式会社ルネサステクノロジ プロセッサ
US6237054B1 (en) * 1998-09-14 2001-05-22 Advanced Micro Devices, Inc. Network interface unit including a microcontroller having multiple configurable logic blocks, with a test/program bus for performing a plurality of selected functions
KR100731371B1 (ko) * 1999-02-15 2007-06-21 코닌클리즈케 필립스 일렉트로닉스 엔.브이. 구성가능 기능 유닛을 포함하는 프로세서를 사용해서 컴퓨터 프로그램을 실행하는 방법, 프로세서 및 컴퓨터 판독가능 기록 매체
JP3636986B2 (ja) * 2000-12-06 2005-04-06 松下電器産業株式会社 半導体集積回路
US7657877B2 (en) * 2001-06-20 2010-02-02 Pact Xpp Technologies Ag Method for processing data
EP1443392A4 (en) * 2001-09-07 2007-08-15 Ip Flex Inc DATA PROCESSING DEVICE AND ASSOCIATED CONTROL METHOD
GB2382175A (en) * 2001-11-20 2003-05-21 Hewlett Packard Co Reconfigurable processor
JP4002151B2 (ja) * 2002-07-31 2007-10-31 富士通株式会社 情報処理装置
US6954085B2 (en) 2003-10-13 2005-10-11 International Business Machines Corporation System and method for dynamically executing a function in a programmable logic array
US7243221B1 (en) * 2004-02-26 2007-07-10 Xilinx, Inc. Method and apparatus for controlling a processor in a data processing system
US7180324B2 (en) * 2004-05-28 2007-02-20 Altera Corporation Redundancy structures and methods in a programmable logic device
JP5175517B2 (ja) * 2005-04-12 2013-04-03 パナソニック株式会社 プロセッサ
US7410884B2 (en) * 2005-11-21 2008-08-12 Intel Corporation 3D integrated circuits using thick metal for backside connections and offset bumps
US7902865B1 (en) * 2007-11-15 2011-03-08 Lattice Semiconductor Corporation Compression and decompression of configuration data using repeated data frames
CN101593169A (zh) * 2008-05-30 2009-12-02 国际商业机器公司 可配置逻辑阵列的配置管理器和配置方法
CN102122275A (zh) * 2010-01-08 2011-07-13 上海芯豪微电子有限公司 一种可配置处理器
JP5617282B2 (ja) * 2010-03-09 2014-11-05 富士通セミコンダクター株式会社 データ処理システム
JP2013030906A (ja) * 2011-07-27 2013-02-07 Fujitsu Ltd プログラマブルロジックデバイス
US10339051B2 (en) * 2012-04-30 2019-07-02 Hewlett Packard Enterprise Development Lp Configurable computer memory
US8922243B2 (en) 2012-12-23 2014-12-30 Advanced Micro Devices, Inc. Die-stacked memory device with reconfigurable logic
US8928351B1 (en) 2013-03-13 2015-01-06 Xilinx, Inc. Emulating power domains in an integrated circuit using partial reconfiguration
NL2011315C2 (en) * 2013-08-19 2015-02-23 Topic Embedded Systems B V A computing platform, a reconfigurable hardware device and a method for simultaneously executing processes on dynamically reconfigurable hardware device, such as an fpga, as well as instruction set processors, such as a cpu, and a related computer readable medium.

Also Published As

Publication number Publication date
EP3314451B1 (en) 2021-07-14
CN107667474A (zh) 2018-02-06
WO2016209406A1 (en) 2016-12-29
CN107667474B (zh) 2019-05-28
US20160380635A1 (en) 2016-12-29
JP2018530025A (ja) 2018-10-11
EP3314451A1 (en) 2018-05-02
KR101873484B1 (ko) 2018-07-03
US9698790B2 (en) 2017-07-04

Similar Documents

Publication Publication Date Title
KR101873484B1 (ko) 신속 재구성가능 회로 및 고-대역폭 메모리 인터페이스를 사용한 컴퓨터 아키텍처
TWI640003B (zh) 用於邏輯/記憶體器件之裝置及方法
EP2549382B1 (en) Virtual GPU
JP4188233B2 (ja) 集積回路装置
US8356138B1 (en) Methods for implementing programmable memory controller for distributed DRAM system-in-package (SiP)
EP3710948B1 (en) Virtual fpga management and optimization system
US10379766B2 (en) Access processor
US8019950B1 (en) Memory controller interface for an embedded processor block core in an integrated circuit
US10924430B2 (en) Streaming platform flow and architecture for an integrated circuit
US20190146829A1 (en) High performance context switching for virtualized fpga accelerators
US8438326B2 (en) Scalable memory interface system
JP2003524969A5 (ko)
US10564929B2 (en) Communication between dataflow processing units and memories
CN111433758A (zh) 可编程运算与控制芯片、设计方法及其装置
US11232247B1 (en) Adaptable dynamic region for hardware acceleration
KR20150100042A (ko) 3차원 다이 스택 디램에서의 가속 시스템
US9870315B2 (en) Memory and processor hierarchy to improve power efficiency
JP2022548641A (ja) システムオンチップ及びアクセラレータチップを接続するメモリチップ
US9003160B2 (en) Active buffered memory
US20140148961A1 (en) Dynamic power distribution
Chen et al. A 3-D CPU-FPGA-DRAM hybrid architecture for low-power computation
Compton et al. Programming architectures for run-time reconfigurable systems
EP4020246A1 (en) Micro-network-on-chip and microsector infrastructure
US8161212B1 (en) Data operations across parallel non-volatile input/output devices
US10990394B2 (en) Systems and methods for mixed instruction multiple data (xIMD) computing

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant