KR20230052994A - 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스 - Google Patents

부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스 Download PDF

Info

Publication number
KR20230052994A
KR20230052994A KR1020237011909A KR20237011909A KR20230052994A KR 20230052994 A KR20230052994 A KR 20230052994A KR 1020237011909 A KR1020237011909 A KR 1020237011909A KR 20237011909 A KR20237011909 A KR 20237011909A KR 20230052994 A KR20230052994 A KR 20230052994A
Authority
KR
South Korea
Prior art keywords
primitive
bitstreams
subset
fpga
partial reconstruction
Prior art date
Application number
KR1020237011909A
Other languages
English (en)
Inventor
다니엘 앤소니 새독
맥스 앤드류 고든 슈벤케
우체니히 다니엘 마리 롤스
벤자민 폴 코글란
티모시 티엔-유에 람
폴 앤서니 알틴
Original Assignee
리퀴드 인스트루먼트 피티와이. 엘티디.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 리퀴드 인스트루먼트 피티와이. 엘티디. filed Critical 리퀴드 인스트루먼트 피티와이. 엘티디.
Publication of KR20230052994A publication Critical patent/KR20230052994A/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/17748Structural details of configuration resources
    • H03K19/17758Structural details of configuration resources for speeding up configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • 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/17756Structural details of configuration resources for partial configuration or partial reconfiguration
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Stored Programmes (AREA)
  • Logic Circuits (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

부분 재구성을 지원하는 필드 프로그래밍가능 게이트 어레이(FPGA) 디지털 전자 집적 회로(IC)들 및 다른 IC들을 프로그래밍하는 것 - 특정 FPGA는 재구성가능한 파티션들 및 재구성가능한 파티션들 각각에서의 구성가능한 프리미티브 변형들을 가짐 - 은, 구성 비트스트림들을 FPGA에 기록하기 전에, 특정 FPGA에 상에서 구현될 수 있는 상이한 프리미티브 함수들에 대한 프리미티브 비트스트림들을 컴파일하고 저장하는 것; 특정 FPGA 상에서 구현할 알고리즘의 기능적 로직을 표현하는 그래픽 블록들을 연결하기 위해 그래픽 사용자 인터페이스에서 입력을 수신하는 것 - 그래픽 블록들은 재구성가능한 로직에 관련됨 -; 그래픽 블록들에 대응하는 특정 프리미티브 함수들을 포함하는 프리미티브 함수들의 서브세트를 자동으로 결정하는 것; 디지털 저장소로부터, 프리미티브 함수들의 서브세트에 대응하는 프리미티브 비트스트림들의 서브세트를 획득하는 것; 부분 재구성 동작들을 사용하여, 특정 FPGA에 프리미티브 비트스트림들의 서브세트를 기록하는 것을 포함한다.

Description

부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스 {IMPROVED PROCESS OF PROGRAMMING FIELD PROGRAMMABLE GATE ARRAYS USING PARTIAL RECONFIGURATION}
본 개시내용의 하나의 기술 분야는 필드 프로그래밍가능 게이트 어레이(field programmable gate array, FPGA) 집적 회로(integrated circuit, IC)들 및 다른 유형들의 프로그래밍가능 IC들의 프로그래밍이다. 또 다른 기술 분야는 FPGA 프로그래밍 분야에서의 부분 재구성(partial reconfiguration, PR)이다.
본 섹션에 기술된 접근법들은 추구될 수 있는 접근법들이지만, 반드시 이전에 착안되었거나 추구되었던 접근법들인 것은 아니다. 따라서, 달리 언급되지 않는 한, 본 섹션에 기술된 접근법들 중 임의의 것은 단지 본 섹션에의 포함만으로 종래 기술로서 자격이 있다고 가정되어서는 안 된다.
필드 프로그래밍가능 게이트 어레이(FPGA) 집적 회로들은 상이한 복잡한 디지털 회로들을 생성하도록 구성될 수 있는 구성가능한 로직 블록(configurable logic block, CLB)들의 매트릭스를 갖는 반도체 디바이스들이다. CLB들은 FPGA의 영역에 걸쳐 있는 프로그래밍가능한 인터커넥트(programmable interconnect)들을 통해 연결된다. FPGA들은 또한 랜덤-액세스 메모리, 디지털 신호 프로세서(digital signal processor, DSP) 슬라이스들, 또는 다른 로직 요소들을 포함할 수 있다. CLB들은 AND 및 XOR과 같은 논리 연산들을 생성하도록 구성될 수 있으며, 이는 이어서 특정된 디지털 회로를 생성하기 위해 FPGA 상의 다른 로직 요소들과 직렬로 그리고/또는 병렬로 결합된다.
FPGA 구성들은 베릴로그(Verilog) 또는 VHDL과 같은 하드웨어 기술 언어(hardware description language, HDL)를 사용하여 기술된다. HDL로 기록된 프로그램들은 특정 타겟 FPGA를 위한 구성 정보를 포함하는 비트스트림들을 생성하기 위해 특수화된 소프트웨어를 사용하여 컴파일된다. VIVADO는 Xilinx FPGA들을 위한 비트스트림들을 생성하기 위해 HDL 설계들을 기록 및 컴파일하는 데 사용될 수 있는 통합 설계 환경의 예이다.
FPGA들은 고속 DSP 또는 고도의 병렬 DSP 알고리즘들을 구현하는 데 매우 강력한 것으로 입증되었다. FPGA들은 예를 들어 자일링크스 인크.(Xilinx, Inc.)로부터 상업적으로 입수가능하다. FPGA들은 재구성가능한 디지털 전자 제품들의 생성을 가능하게 하였다. 하나의 예는 리퀴드 인스트루먼트 사(Liquid Instruments Pty Ltd)에서 개발한 Moku:Lab이다. 그러나, FPGA들을 프로그래밍하기 위한 현재의 기법들은 몇 가지 단점이 있다.
FPGA들을 프로그래밍하는 것은 전형적으로, 학습하는 데 시간이 많이 걸릴 수 있는 전문 지식을 요구한다. 종종 컴파일 도구들은 FPGA의 제조업체 또는 벤더로부터만 입수가능하며, 해당 칩들에 고유한 인터페이스들을 갖는다. 사용자는 이들 도구를 설치하고 학습하는 데 시간을 투자해야 한다. 개발 시간은 복잡성에 따라 길어질 수 있다. 또한, 설계 변경 동안 또는 개발 전반을 포함하여, 완성된 프로그램을 컴파일하는 시간은 복잡성에 따라 대략 몇 분에서 많은 시간까지일 수 있다. FPGA 프로그램에 대한 비교적 간단한 변경을 수행하는 것에 직면한 오늘날의 개발자들은, FPGA에 로딩하기 전에 전체 비트스트림이 재컴파일되고 전달될 때까지 수 시간을 기다리기를 원하지 않는다.
이러한 문제들에 기초하여, FPGA 프로그래밍을 위한 개선된 기법들이 필요하며, FPGA 프로그램들을 컴파일하는 시간을 크게 단축할 수 있는 방법에 대해 오랫동안 느껴졌지만 충족되지 않은 특정 요구가 있다.
첨부된 청구범위는 본 발명의 요약으로서 역할을 할 수 있다.
도면에서:
도 1은 예시를 구현하는 데 사용될 수 있는 예시적인 분산 컴퓨터 시스템을 예시한다.
도 2는 일 실시예에 따른 예시적인 컴퓨터를 이용한 실시예를 예시한다.
도 3a는 부분 재구성을 갖는 FPGA에 대한 예시적인 시스템 아키텍처를 예시한다.
도 3b는 신호 프로세싱 회로부를 표현하는 기능적 블록들을 선택하고 그래픽적으로 연결하기 위해 IDE의 GUI를 사용하여 설계될 수 있는 복잡한 DSP 알고리즘의 예를 예시한다.
도 3c는 도 3a의 아키텍처 내에서 도 3b를 구현하는 예를 예시한다.
도 3d는, 저-레벨 PR 모듈들이 이차적인 특징인, 전술한 아키텍처의 변형을 예시한다.
도 4는 기기들이 다음 2개의 범주들로 분할되는 다른 아키텍처 변형을 예시한다: 측정 또는 모니터링 기기들 및 신호 생성 또는 제어기 기기들.
도 5는 일 실시예가 구현될 수 있는 예시적인 컴퓨터 시스템을 예시하는 블록 다이어그램이다.
이하의 설명에서, 설명의 목적을 위해, 본 발명의 완전한 이해를 제공하기 위해 많은 구체적인 상세사항들이 기재된다. 그러나, 본 발명은 이러한 구체적인 상세사항들 없이도 실시될 수 있다는 것이 자명할 것이다. 다른 사례들에서, 주지의 구조들 및 디바이스들은 본 발명을 불필요하게 모호하게 하는 것을 피하기 위해 블록 다이어그램 형태로 도시된다. 실시예들은 다음 개요에 따라 섹션에서 기술된다:
1. 기초 기술
2. 실시예들의 일반 개요
3. 실시예들의 구조적 및 기능적 예들
4. 구현 예―하드웨어 개요
1. 기초 기술
DSP 알고리즘들은 종종 블록 다이어그램들을 사용하여 상징적으로 기술될 수 있다. 여러 상업적으로 입수가능한 시스템들은 블록 다이어그램 그래픽 사용자 인터페이스(GUI)를 사용하여, FPGA 또는 다른 것들과 같은 디지털 집적 회로(IC)들을 위한 알고리즘들을 설계하는 것을 허용한다. 시뮬링크(Simulink) 및 랩뷰(LabVIEW)는 FPGA들 및 다른 타겟 플랫폼들을 위한, 소프트웨어-기반 디지털 시스템들의 설계, 검증 및 구현을 용이하게 할 수 있는 블록 다이어그램 환경들을 제공하는 도구들의 상용 예들이다. 이들 시스템은 타겟 플랫폼을 프로그래밍하는 복잡성을 일부 제거하지만, 여전히 긴 컴파일 시간을 요구하며, 긴 개발 시간을 야기할 수 있다.
GNU 라디오(GNUradio)는 개개의 기능적 블록들을 함께 드래그 앤드 드롭하고 GNU 라디오 호환 하드웨어에 연결된 호스트 프로세서 상에서 그들의 상호작용들을 관찰하는 환경을 제공하는 도구의 예이다. 이 시스템을 사용하면, 설계자는 외부 프로세싱 시스템에의 배포를 위한 소스 코드를 생성할 필요가 없다. 그러나 GNU 라디오는 고-대역폭 하드웨어-기반 애플리케이션들에는 적합하지 않다.
부분 재구성(PR)을 사용하면, FPGA 프로그래밍된 회로들은 영역들로 분할될 수 있으며, 이들은 개별적으로 컴파일되어, 결과적으로 영역 비트스트림을 생성한다. 각각의 영역 비트스트림은 기존 FPGA에 개별적으로 로딩될 수 있으므로, 기존 영역 비트스트림이 새것으로 효과적으로 스와핑된다. 최신 FPGA들은 수백 개의 별개의 영역들을 지원할 수 있으며, 그 각각은 독립적으로 구성가능하다.
부분 재구성(PR)은 FPGA의 나머지 부분이 계속해서 동작하는 동안 능동 설계에서 기능적 모듈들을 동적으로 변경하는 것을 허용하는 FPGA 구성 기법이다. PR은 FPGA의 런타임 동안 상이한 시간들에서 하드웨어 모듈들을 변경하는 데 사용될 수 있으며, 이에 의해 크고 복잡한 설계들을 더 작은 FPGA에 맞추는 것을 허용할 수 있다. 일례는, 상이한 변조 및 복조 프로토콜들이 런타임 시에 스와핑되는 소프트웨어-정의된 라디오이다. 예를 들어, PR은 Xilinx ZYNQ 제품군의 FPGA들에서 이용가능하다.
PR을 사용하면, 회로 설계들은 재구성가능한 및 재구성-불가능한 로직으로 분할된다. 정적 로직(static logic)이라는 용어는 재구성가능하지 않은 FPGA 상의 모든 로직 요소들에 사용되는 반면, 재구성가능한 로직이라는 용어는 재구성가능한 로직 요소들을 지칭한다. 재구성가능한 모듈(reconfigurable module, RM)(또는 "모듈")은 재구성가능한 파티션(reconfigurable partition, RP)(또는 "파티션") 내에 배치될 수 있는 로직의 HDL 기술이다. 각각의 RP는 해당 파티션 내에서의 사용에만 전용되는 FPGA 상의 로직 요소들의 물리적 모음이다. 재구성가능한 프레임(reconfigurable frame, RF)은 RP로서 정의될 수 있는 가장 작은 재구성가능한 영역을 표현한다. 다수의 RF들이 단일 RP에 포함될 수 있으며, 그 안에 캡슐화된다. 부분 비트스트림들은 RM의 구성 사양들 및 구성 위치에 대한 정보를 포함하는 생성된 파일들이다.
일단 설계가 정적 로직 및 재구성가능한 로직으로 분리되면, 재구성가능한 로직은 RP 섹션들로 분할되고 각각의 파티션에 대한 모든 RM들이 식별된다. 각각의 비트스트림은 구성 데이터 및 위치 데이터를 포함한다. 따라서, 모든 RP 위치들 내의 모든 모듈들에 대해 별도의 단일 비트스트림이 생성된다. 따라서, 2개의 상이한 RP들에서 동일한 기능적 모듈이 필요한 경우, 2개의 비트스트림들이 필요한다. 모듈들 및 파티션들은, 본 개시내용과 관련이 없지만 특정 회로들의 구현에 영향을 미칠 수 있는 다른 제약들의 영향을 받으며; 이들 제약은 다른 출판물들에 잘 문서화되어 있다.
2. 실시예들의 일반 개요
일 실시예에서, 부분 재구성을 지원하는 디지털 전자 집적 회로(IC)를 구성하는 속도 및 효율성에서의 개선을 제공하는 방법이 개시되며, 특정 IC는 복수의 재구성가능한 파티션들 및 재구성가능한 파티션들 각각에서의 구성가능한 복수의 프리미티브 변형들을 가지며, 이는, 하나 이상의 프로세서들을 사용하여 실행될 때, 하나 이상의 프로세서들로 하여금: 구성 비트스트림들을 특정 IC에 기록하기 전에, 디지털 저장소를 사용하여, 특정 IC에 기록되고 특정 IC 상에서 구현될 수 있는 복수의 상이한 프리미티브 함수들에 대한 복수의 프리미티브 비트스트림들을 컴파일하고 저장하고; 재구성가능한 로직을 사용하여 특정 IC 상에서 구현할 알고리즘의 기능적 로직을 특정하는 입력을 수신하고; 기능적 로직에 대응하는 특정 프리미티브 함수들을 포함하는 프리미티브 함수들의 서브세트를 자동으로 결정하고; 디지털 저장소로부터, 프리미티브 함수들의 서브세트에 대응하는 프리미티브 비트스트림들의 서브세트를 획득하고; 하나 이상의 부분 재구성 동작들을 사용하여, 특정 IC에 프리미티브 비트스트림들의 서브세트를 기록하는 것을 수행하게 하며, 여기서 본 방법은 하나 이상의 컴퓨팅 디바이스들에 의해 수행된다.
일 실시예에서, 부분 재구성을 지원하는 필드 프로그래밍가능 게이트 어레이(FPGA) 디지털 전자 집적 회로(IC)들을 프로그래밍하는 속도 및 효율성에서의 개선을 제공하는 방법이 개시되며, 특정 FPGA는 복수의 재구성가능한 파티션들 및 재구성가능한 파티션들 각각에서의 구성가능한 복수의 프리미티브 변형들을 가지며, 본 방법은: 구성 비트스트림들을 특정 FPGA에 기록하기 전에, 디지털 저장소를 사용하여, 특정 FPGA에 기록되고 특정 FPGA 상에서 구현될 수 있는 복수의 상이한 프리미티브 함수들에 대한 복수의 프리미티브 비트스트림들을 컴파일하고 저장하는 단계; 부분적으로 재구성가능한 로직을 사용하여, 특정 FPGA 상에서 구현할 알고리즘의 기능적 로직을 특정하는 입력을 수신하는 단계; 그래픽 블록들에 대응하는 특정 프리미티브 함수들을 포함하는 프리미티브 함수들의 서브세트를 자동으로 결정하는 단계; 디지털 저장소로부터, 프리미티브 함수들의 서브세트에 대응하는 프리미티브 비트스트림들의 서브세트를 획득하는 단계; 하나 이상의 부분 재구성 동작들을 사용하여, 특정 FPGA에 프리미티브 비트스트림들의 서브세트를 기록하는 단계를 포함하며, 여기서 본 방법은 하나 이상의 컴퓨팅 디바이스들에 의해 수행된다.
실시예들은, FPGA 알고리즘들에 대한 모든 블록 다이어그램들이 M개의 블록 영역들의 매트릭스로 연결된, N개의 개별 블록 유형들을 사용하여 기술될 수 있다고 가정한다. 소정 실시예들이 FPGA에서의 사용을 위해 구체적으로 기술되지만, 본 개시내용의 방법들은 더 일반적으로 다른 프로그래밍가능 집적 회로들에 적용될 수 있으며, FPGA들의 사용은 요구되지 않는다.
한 가지 접근법은, 가능한 모든 블록 다이어그램 연결들에 대한 비트스트림들이 미리 컴파일되고, 이어서 사용자의 블록 다이어그램에 따라 선택되는 것일 수 있다. N^M 전체 비트스트림들의 저장 및 컴파일이 수반된다. M 및/또는 N이 작은 값 이상으로 증가함에 따라, 이 접근법을 위한 저장 및 컴파일 시간의 양은 실행 불가능해진다. 저장 및 컴파일 시간은 M 또는 N이 증가함에 따라 기하급수적으로 또는 다항적으로 증가한다. 각각의 부분 비트스트림은 대략 100kB이며, 복잡성에 따라 컴파일하는 데 약 5분이 걸린다. M = N = 100이면, 약 5*100^100분의 컴파일 시간 및 100^98 GB의 저장소가 요구된다.
실시예에서, M 영역들 각각이 부분적으로 재구성가능한 것으로서 정의되고 N 블록 유형들 각각에 대한 단일 부분 비트스트림이 각각의 M 영역에 대해 미리 컴파일되는, 부분 재구성(PR) 기법들이 채용된다. 이 문맥에서 "미리(ahead of time)"는, 최종 사용자 컴퓨터가 그래픽 도구 또는 비-그래픽 도구를 사용하여 알고리즘을 설계하는 데 사용되기 전을 의미하며; 설계 프로세스가 시작될 때, 사용자는 알고리즘을 구현하기 위해 구성될 수 있는 이용가능한 N 블록 유형들에 대응하는, 많은 비트스트림들의 사전-컴파일된 라이브러리가 이용가능하다. 결과적으로, 단지 M*N 비트스트림들의 컴파일 및 저장이 필요한다. M = N = 100이면, 50,000분의 컴파일 시간 및 1 GB의 저장소만이 요구된다. 이 접근법은, 사용자 알고리즘들 또는 애플리케이션들이 필요할 특정 함수들의 예측, 및 해당 함수들에 대한 비트스트림들을 사전계산하는 것에 어느 정도 의존한다.
일부 실시예들에서, 모든 N 블록 유형들보다 적은 블록 유형들에 대한 단일 부분 비트스트림은 미리 컴파일되고, 알고리즘을 타겟 플랫폼에 완전히 배포하는 데 필요한 다른 블록 유형들에 대한 비트스트림들은 설계 및/또는 배포 직전에 컴파일된다. 일부 실시예들에서, 현재 사용자 또는 다른 사용자들에 의한 과거 사용에서의 블록 유형들의 인기도에 기초하여 사전-컴파일을 위해 N개 미만의 블록 유형들의 서브세트가 선택되고, 따라서 서브세트는 특정 설계에서 선택될 가능성이 가장 큰 블록 유형들을 포함한다. 예를 들어, 컴파일 에이전트(122)는, IDE(120)에서 특정 블록 유형들의 사용자 선택을 검출하고 사용자 선택들에 대한 보고들을 컴파일 서버 프로세스(132)로 송신하도록 - 단독으로, 또는 관련없는 사용자들의 상이한 호스트 컴퓨터들 상에서 실행중인 컴파일 에이전트의 다른 인스턴스들로부터 유사한 방식으로 수신된 데이터와 조합하여, 저장하기 위해 - 프로그래밍될 수 있다. 이러한 방식으로, 블록 유형들의 실제 선택들에 대한 크라우드 소싱된 보고들은 서버 측에서 사전-컴파일되는 블록 유형들에 영향을 미칠 수 있다. 또는, 사용자 입력 및/또는 구성 데이터는, 어떤 블록 유형들이 사전-컴파일되고 어떤 블록 유형들이 설계 또는 배포 시에 컴파일되는지를 특정할 수 있다. 이 접근법은 사용자들이, 사전-컴파일된 비트스트림들의 저장된 라이브러리를 갖는 것의 시간 절약 및 효율성 이득과, 미리 컴파일을 착수하는 것의 계산 부담 사이의 균형을 맞출 수 있도록 한다. 다른 실시예들에서, 양태들 및 특징들은 전체로서의 본 개시내용 및 첨부된 청구범위로부터 자명해질 것이다.
3. 실시예들의 구조적 및 기능적 예들
도 1은 예시를 구현하는 데 사용될 수 있는 예시적인 분산 컴퓨터 시스템을 예시한다. 도면의 설명에서, "프리미티브"라는 용어는 단일 부분 비트스트림으로 컴파일되는 FPGA(110)의 DSP 또는 다른 애플리케이션을 위한 로직의 그룹을 지칭한다.
일 실시예에서, 클라이언트 컴퓨팅 디바이스(102)는 하나 이상의 네트워크들(104)을 통해 서버(106)에 직접 또는 간접적으로 통신가능하게 결합된다.
클라이언트 컴퓨팅 디바이스(102)는 사용자의 알고리즘을 구현하도록 프로그래밍될, FPGA(110)에 인터페이스할 수 있는 데스크톱 컴퓨터, 랩톱 컴퓨터, 모바일 컴퓨팅 디바이스, 워크스테이션 또는 다른 컴퓨팅 디바이스를 포함할 수 있다. 일 실시예에서, 클라이언트 컴퓨팅 디바이스(102)는 또한, 다양한 실시예들에서, 프로세서 개발 보드, 아날로그-디지털 변환기, 디지털-아날로그 변환기, 네트워크 연결, 전력 변환기 또는 기타 중 하나 이상을 포함할 수 있는 주변 전자장치들(112)에 인터페이스한다.
클라이언트 컴퓨팅 디바이스(102)는 FPGA 프로그램(114)의 생성, 관리 및 컴파일을 지원하도록 배열된 애플리케이션 프로그램인 통합 개발 환경(integrated development environment, IDE)(120)을 호스팅하거나 실행한다. 일부 실시예들에서, IDE(120)는 계산 함수들을 표현하는 그래픽 블록들, 아이콘들 또는 위젯들을 연결함으로써 DSP 알고리즘들을 프로그래밍할 수 있도록 하는 그래픽 사용자 인터페이스와의 사용자 상호작용을 생성하고 허용한다.
일 실시예에서, 컴파일 에이전트(122)는 IDE(120)와 통합되거나 별도의 프로그램으로서, 클라이언트 컴퓨팅 디바이스(102)를 사용하여 호스팅되거나 실행되고, 추가로 기술되는 바와 같이 서버(106)에서의 호환가능한 컴파일 서버 프로세스(132)와 상호동작하도록 프로그래밍되거나 구성된다. 일 실시예에서, 컴파일 에이전트(122)는 어떤 비트스트림 프리미티브들을 서버(106)로부터 획득할지 및 이들을 FPGA(110) 내에서 어디에 배치할지를 결정하도록 프로그래밍된다. 이들 요소를 사용하여, 클라이언트 컴퓨팅 디바이스(102)는 FPGA 프로그래밍을 달성하기 위해 FPGA(110)에 기록되는 컴파일된 비트스트림들(124)의 세트를 생성하거나 획득할 수 있다. 일부 실시예들에서, IDE(120) 및 컴파일 에이전트(122)는 다른 섹션들에서 추가로 기술되는 바와 같이, 컴파일된 비트스트림 프리미티브들(142)의 분포를 포함하거나 제어하는 네트워크 데이터 저장소(140)와 서버(106) 사이의 통신들 또는 메시징 프로토콜들을 실행하고; 클라이언트 태스크들을 제어하기 위해 소프트웨어 및 펌웨어를 실행하고; FPGA(110)에서 프로그래밍될 프리미티브들에 대한 컴파일된 비트스트림들(124)을 저장하도록 구성되거나 프로그래밍된다. 프리미티브들의 수 및/또는 저장 요구 사항들에 의존하여, 컴파일된 비트스트림들(124)의 저장은 저장소(140)를 사용하여 서버(106)에 의해 공유되거나 완전히 실행될 수 있다.
FPGA(110)는 PR을 지원한다. 일 실시예에서, FPGA(110)는 프로그래밍된 알고리즘이 요구할 수 있는 가장 자원-집약적인 구성에 충분한 수의 프로세싱 요소들을 각각 포함하는 복수의 영역들을 갖는 매우 큰 유닛이다. 많은 개별 영역들에 걸쳐 분산되어 있는 큰 자원 카운트가 예상된다. 일 실시예는 사용자가 공간에 덜 관심있는 더 큰 FPGA들에서 가장 잘 실행될 수 있지만, 본 명세서에 기술된 방법은 디바이스 크기에 관계없이 사용가능하며, 큰 FPGA 또는 다른 큰 플랫폼은 요구 사항이 아니다.
네트워크(104)는 지상파, 위성, 유선 또는 무선 링크들을 사용하는 로컬 영역 네트워크, 광역 네트워크, 인터네트워크 또는 인터넷의 임의의 조합을 광범위하게 표현한다. 클라이언트 컴퓨팅 디바이스(102) 및 서버(106)는 각각 네트워크(104)를 통해 전달되는 전송, 세션 및 애플리케이션 트래픽에 대한 프로토콜들과 호환가능한 네트워크(104)에 인터페이스한다. 네트워크(104)를 통해 사용되는 특정 프로토콜들은, 클라이언트 컴퓨팅 디바이스(102) 및 서버(106)가 요청들, 응답들 및 데이터 페이로드들을 교환하기 위해 디지털 전자 메시지들 및 비동기식, 비상태유지(stateless) 또는 상태유지(stateful) 프로토콜들을 사용하여 통신할 수 있다면, 중요하지 않다.
일 실시예에서, 서버(106)는 데스크톱 컴퓨터, 랙-장착형 컴퓨터, 또는 공공 또는 사설 클라우드 컴퓨팅 센터 내의 하나 이상의 가상 컴퓨팅 인스턴스들 중 임의의 것을 포함한다. 서버(106)는 다른 프로세스들, 서버들 또는 애플리케이션들과 함께 서버 컴퓨터 또는 클러스터 상에서 실행되는 프로세스를 포함할 수 있다. 서버(106)는 도커(DOCKER) 또는 쿠버네티스(KUBERNETES) 컨테이너화를 사용하는 것과 같이 운영 체제 가상화를 사용하여 구현될 수 있다. 서버(106)는 클라우드-기반 디지털 데이터 저장소 또는 다른 네트워크화된 데이터 저장소를 포함할 수 있는 저장소(140)를 포함하거나, 그에 액세스하도록 프로그래밍된다.
일 실시예에서, 서버(106)는 FPGA 프리미티브 함수들을 위한 소스 코드(130)를 저장하며, 이는 본 명세서의 다른 섹션들에서 추가로 기술된다. 서버(106)는 또한 컴파일 서버 프로세스(132)를 호스팅하거나 실행하며, 이는 컴파일된 비트스트림들(142)에 의해 표시된 바와 같이 저장소(140)에 저장되는 비트스트림 프리미티브들로 소스 코드(130)를 컴파일하도록 구성되거나 프로그래밍된다. 중요하게도, 실시예들에서, FPGA(110)의 재구성가능한 파티션들에서 사용될 수 있는 모든 함수 프리미티브들에 대한 소스 코드(130)는 클라이언트 컴퓨팅 디바이스(102)에 의한 임의의 프로그래밍 활동보다 앞서 컴파일되고, 클라이언트 컴퓨팅 디바이스로부터의 비트스트림들에 대한 요청을 기다리기 위해 저장소(140)에 저장된다. 컴파일 서버 프로세스(132)는, FPGA(110)의 벤더로부터 미리 획득되거나, 또는 그렇지 않으면 FPGA(110)와 호환가능한 프로그램들, 라이브러리들 또는 함수들을 사용할 수 있다.
프리미티브들의 비트스트림들(142)은 다수의 상이한 실질적인 신호 프로세싱 기능들 중 임의의 것을 구현할 수 있다. 다양한 실시예들에서 사용될 수 있는 프리미티브들의 예들은 다음을 포함한다: 신호 가산기; 신호 배율기; 신호 믹서; 디지털 필터; 발진기; 적분기; 삼각 연산; 고속-푸리에 변환; PID 제어기; 위상-동기 루프; 적분기; 미분기; 사인파 발생기; 직접 디지털 신시사이저; 직접-형태 하나의 단일-차수 섹션 무한 임펄스 응답 필터; DC 이득.
도 1의 예에서, 서버(106)는 저장소(140)를 사용하여 프리미티브들의 컴파일된 비트스트림들(142)을 저장하도록 프로그래밍되거나 구성된다. 프리미티브들의 수 및/또는 저장 요구 사항들에 의존하여, 이 태스크는 클라이언트 컴퓨팅 디바이스(102)에 의해 공유되고 완전히 실행될 수 있다. 컴파일 서버 프로세스(132)는 또한, 추가로 기술되는 바와 같이, 클라이언트 컴퓨팅 디바이스(102)로부터의 요청들에 응답하여, 컴파일된 비트스트림들(142)을 페치하고 클라이언트 컴퓨팅 디바이스(102)로 송신하도록 프로그래밍되거나 구성된다.
소정 동작들이 네트워크(104)를 통해 서버(106)와 통신하는 클라이언트 컴퓨팅 디바이스(102)에서 발생하고 저장소(140)가 서버와 연관되어 관리되는, 일 실시예가 기술되었다. 그러나, 다른 실시예들은 단일 호스트 컴퓨터 또는 가상 컴퓨팅 인스턴스에서 완전히 구현될 수 있으며, 클라이언트-서버 아키텍처에 대한 요구 사항은 없다. 또한, 저장소(140)는 호스트 컴퓨터에 위치할 수 있거나 가상 컴퓨팅 인스턴스와 연관될 수 있으며, 사전-컴파일된 비트스트림들의 디지털 저장소는 클라이언트 컴퓨팅 디바이스(102) 또는 알고리즘들을 설계하는 데 사용되는 임의의 다른 컴퓨터로부터 분리될 필요가 없다. 예를 들어, 단일 호스트 컴퓨터 또는 가상 컴퓨팅 인스턴스들, 예컨대 클라이언트 컴퓨팅 디바이스(102)는 통합 시스템으로서 도 1에 도시된 모든 기능적 요소들 및 데이터 저장소 디바이스들을 호스팅할 수 있다. 또는, 도 1의 아키텍처가 사용될 수 있지만, 사전-컴파일된 비트스트림들의 세트는 클라이언트 컴퓨팅 디바이스에서의 로컬 저장을 위해 패키지 또는 유닛으로서 서버(106)로부터 클라이언트 컴퓨팅 디바이스(102)로 전달될 수 있다. 일 실시예에서, 사전-컴파일된 비트스트림들의 패키지의 전달은 클라이언트 컴퓨팅 디바이스에서의 클라이언트 소프트웨어 및/또는 클라이언트 컴퓨팅 디바이스에서의 브라우저에서 실행되는 브라우저-실행가능 코드의 임의의 조합을 사용하여 실행되는 인스톨러 프로세스를 사용하여 수행된다.
도 2는 일 실시예에 따른 예시적인 컴퓨터-구현 프로세스를 예시한다. 도 2의 예는 클라이언트 컴퓨팅 디바이스(102) 및 서버(106)에 의해 상이한 시간들에서 실행되는 기능적 단계들을 수반한다.
일 실시예에서, 블록(202)에서, 서버 또는 서버 컴퓨터는 특정된 타겟 플랫폼을 위한 프리미티브들의 모든 가능한 조합들을 사전-컴파일한다. 블록(204)에서, 프로세스는 컴파일된 비트스트림 프리미티브들을 네트워크 저장소 상에 저장한다.
예를 들어, 서버(106)는 컴파일 서버 프로세스를 사용하여 프리미티브들의 소스 코드(130)를 컴파일된 비트스트림들(142)로 사전-컴파일하며, 이는 저장소(140)를 사용하여 저장된다. 소스 코드(130)에 표현된 프리미티브들의 수는 다른 실시예들에서 달라질 수 있다. 예를 들어, 특정된 FPGA는 "100" 파티션들을 지원하는 것으로서 구성 데이터에서 정의될 수 있다. 파티션들 각각에 대해, 사전-컴파일된 비트스트림들을 수신하기 위해 N개의 상이한 변형들이 이용가능하다. 특정 영역에 대한 비트스트림들의 세트들은 임의의 다른 영역들에 대한 비트스트림들의 세트들과 반드시 교환가능한 것은 아니다. 따라서, FPGA의 영역 "01"은 20개의 상이한 비트스트림들의 제1 특정 세트 중에서 선택된 제1 비트스트림을 지원할 수 있고, 동일한 FPGA의 영역 "64"는 20개의 다른 비트스트림들의 제2의 상이한 특정 세트 중에서 선택되는 제2 비트스트림을 지원할 수 있다.
일 실시예에서, 관리 동작 또는 구성 데이터는 타겟 FPGA의 파티션들과 연관되는 변형들에 대한 변경을 특정할 수 있다. 예를 들어, 파티션 "64"가 이전에 그것과 연관된 PLL 블록을 갖지 않거나 그것의 변형들 중 하나 내에 갖지 않은 그 파티션에서의 변형에 위상-동기 루프 기능적 블록을 추가하도록 수정되는 경우, 파티션 "64"의 모든 비트스트림들은 서버(106)를 사용하여 재컴파일되어야 할 것이다. 그러나, 파티션과 연관되는 각각의 기능적 블록은 관련없는 로직 명령어들의 여러 세트들을 포함할 수 있어, 유연성을 증가시킨다. 예를 들어, 파티션 "64"와 연관된 20개의 변형들 중 특정 변형은 PLL 및 가산기 둘 모두에 대한 로직을 정의할 수 있다. 일부 실시예들에서, 임의의 2개 이상의 로직 세트들은 파티션의 변형과 연관되는 기능적 블록에 있을 수 있다. 이 배열은 FPGA에서 이용가능한 총 계산 능력에 의해 제약될 수 있다.
비동기적으로, 블록(206)에서, 클라이언트 컴퓨팅 디바이스에서 알고리즘 또는 프로그램이 그래픽 사용자 인터페이스를 사용하여 정의되거나 프로그래밍된다. 예를 들어, DSP 알고리즘이 정의될 수 있다. DSP 알고리즘을 정의하는 것은, IDE(120)의 GUI 인터페이스에서 DSP 알고리즘의 동작들을 상징적으로 정의하는 그래픽 블록들을 드래그, 드롭 및 연결하는 것을 특정하는 사용자 입력을 수신하는 것을 포함할 수 있다.
일부 실시예들에서, 블록(206)은 특정 기능적 블록의 구성을 변경하기 위한 하나 이상의 파라미터 값들을 수신하는 것을 포함할 수 있다. 예들은 레지스터-레벨 파라미터 값들, 또는 특정된 레지스터들 또는 다른 출력 위치들로의 입력들 또는 출력들의 리디렉션을 특정하는 것을 포함한다.
블록(208)에서, 클라이언트 컴퓨팅 디바이스(102)를 사용하여, 알고리즘은 대응하는 프리미티브들로 분할되거나 그룹화된다. 블록(208)은 FPGA 상에서 알고리즘을 구현하는 것을 야기하기 위해 FPGA(110)의 어떤 이용가능한 RP들 및 변형들이 어떤 특정 사전-컴파일된 프리미티브 비트스트림들(142)을 수신할지를 결정하는 것을 수반할 수 있다.
블록(208)은 또한, IDE(120)를 사용하여 GUI에 특정된 바와 같이, 서버에서 사전-컴파일된 이용가능한 프리미티브들에 대한 알고리즘의 기능적 블록들의 연관성들을 결정하는 것을 수반할 수 있다. 일부 실시예들에서, 블록(208)은, GUI에서 표현된 기능적 블록이 서버(106)에서의 특정 프리미티브 및/또는 비트스트림에 어떻게 대응하는지를 특정하는 매핑 테이블, 구성 파일 또는 다른 데이터에 기초하여 자동으로 수행될 수 있다. 대안적으로, IDE(120)는 GUI에서 기능적 블록을 선택하고 해당 블록을 구현하기 위한 특정 프리미티브를 특정하기 위한 입력을 수용하도록 프로그래밍되는 GUI 위젯들을, 기본적으로 또는 컴파일 에이전트(122)의 제어 하에서, 제공할 수 있다.
이 시점에서, 클라이언트 컴퓨팅 디바이스(102)는 FPGA 상에서 알고리즘을 구현하는 데 필요하고 FPGA 상에서 RP들 및 RP들의 변형들로 스와핑될 수 있는 모든 사전-컴파일된 비트스트림들(142)에 대한 식별자들을 결정하였다.
블록(210)에서, 클라이언트 컴퓨팅 디바이스(102)는 특정된 프리미티브들에 대한 비트스트림들을 획득하기 위한 요청을 서버(106)로 송신한다. 하나 이상의 요청들이 송신될 수 있다. 하나 이상의 요청들은 FPGA 상에서 알고리즘을 구현하는 데 필요하고 FPGA 상에서 RP들 및 RP들의 변형들로 스와핑될 수 있는 모든 사전-컴파일된 비트스트림들(142)을 집합적으로 특정한다.
블록(212)에서, 서버(106)에서, DSP 알고리즘의 영역들 및 그룹들에 대응하는 비트스트림 프리미티브들은 저장소(140) 또는 다른 네트워크화된 저장소로부터 페치되고, 사본들은 네트워크(104)를 통한 응답으로 클라이언트 컴퓨팅 디바이스(102)로 반환된다. 컴파일된 비트스트림들(142)은 수신된 후에 컴파일된 비트스트림들(124)의 형태로 클라이언트 컴퓨팅 디바이스(102)에 저장될 수 있다.
블록(214)에서, 페치된 비트스트림들이 FPGA에 배치된다. IDE(120)와 협력하여 컴파일 에이전트(122)는 수신된 컴파일된 비트스트림들(124)을 특정된 FP들 및 FPGA(110)의 변형들에 기록하도록 할 수 있다. 블록(214)의 완료 시, FPGA는 IDE(120)의 GUI를 사용하여 설계되었고 설계와 연관된 프리미티브들의 사전컴파일된 비트스트림들(142)을 사용하여 구현된 모든 재구성가능한 로직으로 프로그래밍되었다. 이들 단계는 IC에 알고리즘을 배포하기 위해 이 시점에서 비트스트림들의 컴파일이 요구될 종래의 접근법들보다 상당히 빠르게 발생한다.
도 3a는 부분 재구성을 갖는 FPGA에 대한 예시적인 시스템 아키텍처를 예시한다. 일 실시예에서, 2개의 입력 "in 1", "in 2"는 3개 행들의 2개 세트들에 간접적으로 결합되며, 각각의 행은 "1.1" 내지 "6.5"로 표시된 5개의 순차적으로 연결된 DSP 블록 PR 영역들을 갖는다. 복수의 인터커넥트들(302)은 행들 사이의 임의의 연결들을 허용한다. 인터커넥트들(302)은 상이한 실시예들에서 상이한 방식들로 구현될 수 있다. 예들은 큰 멀티플렉싱 네트워크, 고속 AXI 데이터 버스들을, 또는 상이한 연결들에 대한 변형들을 갖는 PR 영역들로서 포함한다.
각각의 DSP PR 영역 1.1 내지 6.5은 동일하고 N개의 변형들 중 하나로서 구성될 수 있으며, 각각은 사전-컴파일된 비트스트림들(142) 중에서 상이한 비트스트림 프리미티브를 사용하여 기술된다. 각각의 변형에 대한 인터페이스는, 입력들 "in 1", "in 2" 및 출력들 "Out 1", "Out 2" 및 구성 AXI 버스(304)에 대한 연결을 포함하여, 동일하다. 각각의 변형은 어떤 신호들이 각각의 출력에 전달되는지를 선택하기 위한 출력 멀티플렉싱뿐만 아니라, 다른 목적을 위한 로직을 포함한다.
소정 실시예들이 최대 20개의 변형들 및 약 20개의 기능적 로직 블록들의 사용을 언급했지만, 다른 실시예들은 다른 카운트의 이들 요소를 사용할 수 있으며, 특히 특정 변형에서의 사용을 위해 정의될 수 있는 로직의 상이한 종류들의 수에는 제한이 없다. PR 영역 구성들의 다양한 실시예들에서 사용될 수 있는 가능한 기능적 블록들의 예들은 다음을 포함한다: 신호 가산기; 신호 배율기; 신호 믹서; 디지털 필터; 발진기; 적분기; 삼각 연산; 고속-푸리에 변환; PID 제어기; 위상-동기 루프; 적분기; 미분기; 사인파 발생기; 직접 디지털 신시사이저; 직접-형태 하나의 단일-차수 섹션 무한 임펄스 응답 필터; DC 이득; 널(null). 또한, 복잡한 기능적 블록들은 FPGA 영역의 2개 이상의 변형들에 걸쳐 분할되는 비트스트림들을 생성할 수 있다.
도 3b는 신호 프로세싱 회로부를 표현하는 기능적 블록들을 선택하고 그래픽적으로 연결하기 위해 IDE의 GUI를 사용하여 설계될 수 있는 복잡한 DSP 알고리즘의 예를 예시한다. 도 3b의 예는 주파수 변조 제어 시스템에 대한 블록 다이어그램을 포함하며, 신호 프로세싱 기능들은 사인파 발생기(Sine Gen), 복조, 제어기들, 스캐너 및 IIR을 포함할 수 있음을 알 것이다. 파선들 내부에 그룹화된 블록들(310, 312)은 단일 비트스트림 프리미티브들로 그룹화될 수 있는 요소들의 예들이다.
도 3c는 도 3a의 아키텍처 내에서 도 3b를 구현하는 예를 예시한다. 도 3c에서, 도 3b의 기능적 블록들은 도 3a의 아키텍처의 특정 RP들 또는 영역들에 할당되었고, 이들 연관성을 나타내기 위해 도 3c에서 적절하게 라벨링되었다. 예를 들어, 도 3a의 영역 1.1은 Sine Gen 로직에 할당되고, 1.2는 복조기이고, 기타 등등이다. 인터커넥트들(302) 및 버스들(304)에 관련한 영역들의 선택은 특정 칩 배열에서 도 3b의 로직의 구현을 달성한다.
도 3d는, 저-레벨 PR 모듈들이 이차적인 특징인, 전술한 아키텍처의 변형을 예시한다. 이 예에서, 박스들 N.1, N.2, N.X는 단일-채널 버전들의 기존 기기들, 예를 들어, Moku:Lab에서 이용가능한 기기들로서 구성될 수 있는 더 큰 PR 영역들을 표현한다. 이러한 배열로, 사용자들은 단일 하드웨어 유닛을 사용하여 매우 복잡한 시스템들을 생성할 수 있다. 저-레벨의 PR 모듈들 1.1, 1.2, 1.3 내지 6.3은 특정 사용 사례들 또는 사용자 요구 사항들을 충족하기 위한 추가 맞춤화에 유용한다. 따라서, 이 아키텍처는 복잡한 기능들에 전용되는 더 큰 PR 영역들을 갖는 FPGA를 사전-컴파일된 비트스트림들(142)을 사용하여 재구성될 수 있는 저-레벨 모듈들과 통합하여, 더 큰 PR 영역들 및 칩의 주요 기능들의 사용을 방해하지 않으면서 칩 상의 다른 기능성을 스와핑해 넣을(swap in) 수 있는 가능성을 예시한다.
도 4는 기기들이 다음 2개의 범주들로 분할되는 다른 아키텍처 변형을 예시한다: 측정 또는 모니터링 기기들 및 신호 생성 또는 제어기 기기들. PR 영역들(402, 404, 406)은 신호 생성 또는 제어기 기기들에 특정적이고, PR 영역들(408)은 측정 또는 모니터링 기기들에 특정적이다. 이 배열을 사용하면, Moku:Lab 시스템의 동일한 기능성이 유지되고 더 큰 유연성을 갖는다. 또한, 신호 생성 또는 제어기 기기들에 대해 2개의 변형들이 할당되는 경우, FPGA에서 요구되는 자원은 이 기록에서 이용가능한 Moku:Lab 디바이스보다 크게 더 높지 않을 것이다.
실시예들은 이전 실시에 비해 많은 이득을 제공한다. 주요 이득은, 사용자의 관점에서, 컴파일 시간이 완전히 제거된다는 것이다. 클라이언트 컴퓨팅 디바이스(102)는 FPGA 블록들의 로컬 컴파일에 수반되는 긴 지연 없이 FPGA를 프로그래밍하는 데 필요한 각각의 기능적 블록에 대한 사전-컴파일된 버전들의 비트스트림들을 획득할 수 있다. 또한, 컴파일을 수행하는 데 필요한 모든 도구들은 서버 컴퓨터(106) 상에서 사전-설치 및 관리되며, 클라이언트 컴퓨팅 디바이스(102)에 서비스로서 제공된다. 따라서, 클라이언트 컴퓨팅 디바이스(102)의 사용자들은 칩-특정 또는 벤더-특정 컴파일 도구들을 설치하거나 학습하는 것이 요구되지 않는다.
4. 구현 예 - 하드웨어 개요
하나의 실시예에 따르면, 본 명세서에 기술된 기법들은 적어도 하나의 컴퓨팅 디바이스에 의해 구현된다. 기법들은 패킷 데이터 네트워크와 같은 네트워크를 사용하여 결합되는 적어도 하나의 서버 컴퓨터 및/또는 다른 컴퓨팅 디바이스의 조합을 사용하여 전체적으로 또는 부분적으로 구현될 수 있다. 컴퓨팅 디바이스들은 펌웨어, 메모리, 다른 저장소, 또는 조합에서 프로그램 명령어들에 따라서 기법들을 수행하도록 프로그래밍된 적어도 하나의 범용 하드웨어 프로세서를 포함할 수 있다. 그러한 컴퓨팅 디바이스들은 또한 기술된 기법들을 달성하기 위해 맞춤 하드웨어-내장형 로직, ASIC들, 또는 FPGA들을 맞춤 프로그래밍과 조합할 수 있다. 컴퓨팅 디바이스들은 서버 컴퓨터, 워크스테이션, 개인용 컴퓨터, 휴대용 컴퓨터 시스템, 핸드헬드 디바이스, 모바일 컴퓨팅 디바이스, 웨어러블 디바이스, 신체 장착형 또는 이식형 디바이스, 스마트폰, 스마트 기기, 인터네트워킹 디바이스, 로봇 또는 무인 지상 차량 또는 항공기와 같은 자율 또는 반-자율 디바이스, 기술된 기법들을 구현하기 위해 하드웨어-내장형 및/또는 프로그램 로직을 통합하는 임의의 다른 전자 디바이스, 데이터 센터 내의 하나 이상의 가상 컴퓨팅 기계 또는 인스턴스, 및/또는 서버 컴퓨터들 및/또는 개인용 컴퓨터들의 네트워크일 수 있다.
도 5는 일 실시예가 구현될 수 있는 예시적인 컴퓨터 시스템을 예시하는 블록 다이어그램이다. 도 5의 예에서, 하드웨어, 소프트웨어, 또는 하드웨어와 소프트웨어의 조합으로 개시된 기술들을 구현하기 위한 컴퓨터 시스템(500) 및 명령어들은, 예를 들어, 컴퓨터 아키텍처 및 컴퓨터 시스템 구현들에 관해 전달하기 위해 본 개시내용이 관련되는 기술 분야의 당업자에 의해 공통적으로 사용되는 동일한 세부사항 레벨에서 박스들 및 원들로서 개략적으로 표현된다.
컴퓨터 시스템(500)은 전자 신호 경로들을 통해 컴퓨터 시스템(500)의 컴포넌트들 사이에서 정보 및/또는 명령어들을 전달하기 위한 버스 및/또는 다른 통신 메커니즘(들)을 포함할 수 있는 입력/출력(I/O) 서브시스템(502)을 포함한다. I/O 서브시스템(502)은 I/O 제어기, 메모리 제어기 및 적어도 하나의 I/O 포트를 포함할 수 있다. 전자 신호 경로들은 예를 들어 선, 단방향 화살표 또는 양방향 화살표로서, 도면에서 개략적으로 표현된다.
적어도 하나의 하드웨어 프로세서(504)는 정보 및 명령어들을 프로세싱하기 위해 I/O 서브시스템(502)에 결합된다. 하드웨어 프로세서(504)는 예를 들어 범용 마이크로프로세서 또는 마이크로제어기 및/또는 특수-목적 마이크로프로세서, 예컨대 임베디드 시스템 또는 그래픽 프로세싱 유닛(GPU) 또는 디지털 신호 프로세서 또는 ARM 프로세서를 포함할 수 있다. 프로세서(504)는 통합된 산술 논리 유닛(ALU)을 포함할 수 있거나 별도의 ALU에 결합될 수 있다.
컴퓨터 시스템(500)은 프로세서(504)에 의해 실행될 명령어들 및 데이터를 전자적 디지털적으로 저장하기 위해 I/O 서브시스템(502)에 결합되는, 메인 메모리와 같은 메모리(506)의 하나 이상의 유닛들을 포함한다. 메모리(506)는 다양한 형태의 랜덤 액세스 메모리(RAM) 또는 다른 동적 저장 디바이스와 같은 휘발성 메모리를 포함할 수 있다. 메모리(506)는 또한 프로세서(504)에 의해 실행될 명령어들의 실행 동안 일시적 변수들 또는 다른 중간 정보를 저장하는 데 사용될 수 있다. 그러한 명령어들은, 프로세서(504)에 액세스가능한 비일시적 컴퓨터 판독가능 저장 매체들에 저장될 때, 컴퓨터 시스템(500)이 명령어들 내에 특정된 동작들을 수행하도록 맞춤화되는 특수-목적 기계가 되게 만들 수 있다.
컴퓨터 시스템(500)은, 프로세서(504)에 대한 정보 및 명령어들을 저장하기 위해 I/O 서브시스템(502)에 결합된 판독 전용 메모리(ROM)(508) 또는 다른 정적 저장 디바이스와 같은 비휘발성 메모리를 추가로 포함한다. ROM(508)은 소거가능 PROM(EPROM) 또는 전기적 소거가능 PROM(EEPROM)과 같은 다양한 형태의 프로그래밍가능 ROM(PROM)을 포함할 수 있다. 영구 저장소(510)의 유닛은 다양한 형태의 비휘발성 RAM(NVRAM), 예컨대 FLASH 메모리, 또는 솔리드-스테이트 저장소, 자기 디스크 또는 광학 디스크, 예컨대 CD-ROM 또는 DVD-ROM을 포함할 수 있으며, 정보 및 명령어들을 저장하기 위해 I/O 서브시스템(502)에 결합될 수 있다. 저장소(510)는, 프로세서(504)에 의해 실행될 때 본 명세서의 기법들을 실행하기 위해 컴퓨터-구현 방법들을 수행하게 하는 명령어들 및 데이터를 저장하는 데 사용될 수 있는 비일시적 컴퓨터 판독가능 매체의 예이다.
메모리(506), ROM(508) 또는 저장소(510) 내의 명령어들은 모듈들, 방법들, 객체들, 함수들, 루틴들, 또는 호출들로서 조직화되는 명령어들의 하나 이상의 세트들을 포함할 수 있다. 명령어들은 하나 이상의 컴퓨터 프로그램들, 운영 체제 서비스들, 또는 모바일 앱들을 포함한 애플리케이션 프로그램들로서 조직화될 수 있다. 명령어들은 다음을 포함할 수 있다: 운영 체제 및/또는 시스템 소프트웨어; 멀티미디어, 프로그래밍 또는 다른 함수들을 지원하는 하나 이상의 라이브러리들; TCP/IP, HTTP 또는 다른 통신 프로토콜들을 구현하기 위한 데이터 프로토콜 명령어들 또는 스택들; HTML, XML, JPEG, MPEG 또는 PNG를 사용하여 코딩된 파일들을 파싱 또는 렌더링하기 위한 파일 포맷 프로세싱 명령어들; 그래픽 사용자 인터페이스(GUI), 커맨드-라인 인터페이스 또는 텍스트 사용자 인터페이스에 대한 커맨드들을 렌더링 또는 해석하기 위한 사용자 인터페이스 명령어들; 오피스 스위트, 인터넷 액세스 애플리케이션, 설계 및 제조 애플리케이션, 그래픽 애플리케이션, 오디오 애플리케이션, 소프트웨어 엔지니어링 애플리케이션, 교육 애플리케이션, 게임 또는 기타 애플리케이션과 같은 애플리케이션 소프트웨어. 명령어들은 웹 서버, 웹 애플리케이션 서버 또는 웹 클라이언트를 구현할 수 있다. 명령어들은 프레젠테이션 층, 애플리케이션 층 및 데이터 저장소 층, 예컨대 구조화된 질의 언어(structured query language, SQL)를 사용하거나 SQL을 사용하지 않는 관계형 데이터베이스 시스템, 객체 저장소, 그래프 데이터베이스, 단층 파일 시스템 또는 다른 데이터 저장소로서 조직화될 수 있다.
컴퓨터 시스템(500)은 I/O 서브시스템(502)을 통해 적어도 하나의 출력 디바이스(512)에 결합될 수 있다. 일 실시예에서, 출력 디바이스(512)는 디지털 컴퓨터 디스플레이이다. 다양한 실시예들에서 사용될 수 있는 디스플레이의 예들은 터치 스크린 디스플레이 또는 발광 다이오드(LED) 디스플레이 또는 액정 디스플레이(LCD) 또는 전자 종이 디스플레이를 포함한다. 컴퓨터 시스템(500)은, 대안적으로 또는 디스플레이 디바이스에 추가하여, 다른 유형(들)의 출력 디바이스들(512)을 포함할 수 있다. 다른 출력 디바이스들(512)의 예들은 프린터, 티켓 프린터, 플로터, 프로젝터, 사운드 카드 또는 비디오 카드, 스피커, 버저 또는 압전 디바이스 또는 기타 가청 디바이스, 램프 또는 LED 또는 LCD 표시기, 햅틱 디바이스, 액추에이터 또는 서보를 포함한다.
적어도 하나의 입력 디바이스(514)는 신호, 데이터, 커맨드 선택 또는 제스처를 프로세서(504)에 전달하기 위해 I/O 서브시스템(502)에 결합된다. 입력 디바이스들(514)의 예들은 터치 스크린, 마이크로폰, 스틸 및 비디오 디지털 카메라, 영숫자 및 기타 키, 키패드, 키보드, 그래픽 태블릿, 이미지 스캐너, 조이스틱, 시계, 스위치, 버튼, 다이얼, 슬라이드, 및/또는 다양한 유형의 센서들, 예컨대 힘 센서, 모션 센서, 열 센서, 가속도계, 자이로스코프 및 관성 측정 유닛(IMU) 센서 및/또는 다양한 유형의 송수신기들, 예컨대 셀룰러 또는 Wi-Fi와 같은 무선, 무선 주파수(RF) 또는 적외선(IR) 송수신기 및 GPS(Global Positioning System) 송수신기를 포함한다.
다른 유형의 입력 디바이스는 제어 디바이스(516)이며, 이는 대안적으로 또는 입력 기능들에 더하여, 커서 제어 또는 디스플레이 스크린 상의 그래픽 인터페이스에서의 탐색과 같은 다른 자동화된 제어 기능들을 수행할 수 있다. 제어 디바이스(516)는 방향 정보 및 커맨드 선택을 프로세서(504)에 전달하고 디스플레이(512) 상에서의 커서 움직임을 제어하기 위한 마우스, 트랙볼, 또는 커서 방향 키들일 수 있다. 입력 디바이스는 디바이스가 평면 내의 위치들을 특정하도록 허용하는, 2개의 축, 제1 축(예컨대, x) 및 제2 축(예컨대, y)에서 적어도 2개의 자유도를 가질 수 있다. 다른 유형의 입력 디바이스는 조이스틱, 원드(wand), 콘솔, 스티어링 휠, 페달, 기어 변속 메커니즘 또는 다른 유형의 제어 디바이스와 같은 유선, 무선 또는 광학 제어 디바이스이다. 입력 디바이스(514)는 비디오 카메라 및 깊이 센서와 같은 다수의 상이한 입력 디바이스들의 조합을 포함할 수 있다.
다른 실시예에서, 컴퓨터 시스템(500)은 출력 디바이스(512), 입력 디바이스(514) 및 제어 디바이스(516) 중 하나 이상이 생략된 사물 인터넷(IoT) 디바이스를 포함할 수 있다. 또는, 그러한 실시예에서, 입력 디바이스(514)는 하나 이상의 카메라, 모션 검출기, 온도계, 마이크로폰, 지진 탐지기, 다른 센서 또는 탐지기, 측정 디바이스 또는 인코더를 포함할 수 있고, 출력 디바이스(512)는 특수-목적 디스플레이, 예컨대 단일-라인 LED 또는 LCD 디스플레이, 하나 이상의 표시기들, 디스플레이 패널, 미터, 밸브, 솔레노이드, 액추에이터 또는 서보를 포함할 수 있다.
컴퓨터 시스템(500)이 모바일 컴퓨팅 디바이스인 경우, 입력 디바이스(514)는 복수의 GPS 위성들로 삼각측량하고 컴퓨터 시스템(500)의 지구물리학적 위치에 대한 위도-경도 값들과 같은 지리적-위치 또는 포지션 데이터를 결정 및 생성할 수 있는 GPS(Global Positioning System) 모듈에 결합된 GPS 수신기를 포함할 수 있다. 출력 디바이스(512)는 호스트(524) 또는 서버(530)를 향해 지향된, 위치 보고 패킷들, 통지들, 맥박 또는 심장박동 신호들, 또는 컴퓨터 시스템(500)의 위치를 특정하는 다른 순환 데이터 송신들을 생성하기 위한, 하드웨어, 소프트웨어, 펌웨어 및 인터페이스들을, 단독으로 또는 다른 애플리케이션-특정 데이터와 조합하여 포함할 수 있다.
컴퓨터 시스템(500)은 맞춤형 하드웨어-내장형 로직, 적어도 하나의 ASIC 또는 FPGA, 펌웨어 및/또는 컴퓨터 시스템과 조합하여 로딩되고 사용되거나 실행될 때 컴퓨터 시스템이 특수-목적 기계로서 동작하게 하거나 컴퓨터 시스템을 특수-목적용 기계로서 동작하도록 프로그래밍하는 프로그램 명령어들 또는 로직을 사용하여 본 명세서에 기술된 기법들을 구현할 수 있다. 일 실시예에 따르면, 본 명세서의 기법들은 프로세서(504)가 메인 메모리(506)에 포함된 적어도 하나의 명령어의 적어도 하나의 시퀀스를 실행하는 것에 응답하여 컴퓨터 시스템(500)에 의해 수행된다. 그러한 명령어들은 저장소(510)와 같은 다른 저장 매체로부터 메인 메모리(506) 내로 판독될 수 있다. 메인 메모리(506)에 포함된 명령어들의 시퀀스들의 실행은 프로세서(504)가 본 명세서에 기술된 프로세스 단계들을 수행하게 한다. 대안적인 실시예에서, 하드웨어-내장형 회로부는 소프트웨어 명령어들 대신에 또는 이들과 조합하여 사용될 수 있다.
본 명세서에서 사용되는 바와 같은 용어 "저장 매체"는 기계가 특정 방식으로 동작하게 하는 데이터 및/또는 명령어들을 저장하는 임의의 비일시적 매체를 지칭한다. 그러한 저장 매체는 비휘발성 매체 및/또는 휘발성 매체를 포함할 수 있다. 비휘발성 매체는, 예를 들어, 저장소(510)와 같은 광 디스크 또는 자기 디스크들을 포함한다. 휘발성 매체는 메모리(506)와 같은 동적 메모리를 포함한다. 일반적인 형태의 저장 매체는, 예를 들어, 하드 디스크, 솔리드 스테이트 드라이브, 플래시 드라이브, 자기 데이터 저장 매체, 임의의 광학 또는 물리적 데이터 저장 매체, 메모리 칩 등을 포함한다.
저장 매체는 송신 매체와는 별개의 것이지만, 그와 함께 사용될 수 있다. 송신 매체는 저장 매체 사이에서 정보를 송신하는 데 참여한다. 예를 들어, 송신 매체는 I/O 서브시스템(502)의 버스를 포함하는 와이어들을 포함하여 동축 케이블, 구리선 및 광섬유를 포함한다. 송신 매체는 또한 전파 및 적외선 데이터 통신 동안 생성되는 것들과 같은 음파 또는 광파의 형태를 취할 수 있다.
다양한 형태의 매체가, 실행을 위해 프로세서(504)에 적어도 하나의 명령어의 적어도 하나의 시퀀스를 전달하는 데 수반될 수 있다. 예를 들어, 명령어들은 처음에 원격 컴퓨터의 자기 디스크 또는 솔리드 스테이트 드라이브 상에서 전달될 수 있다. 원격 컴퓨터는 명령어들을 그의 동적 메모리 내에 로딩할 수 있고, 모뎀을 사용하여 광섬유 또는 동축 케이블 또는 전화선과 같은 통신 링크를 통해 명령어들을 전송할 수 있다. 컴퓨터 시스템(500)에 로컬인 모뎀 또는 라우터는 통신 링크 상에서 데이터를 수신할 수 있고, 데이터를 컴퓨터 시스템(500)에 의해 판독될 수 있는 포맷으로 변환할 수 있다. 예를 들어, 무선 주파수 안테나 또는 적외선 검출기와 같은 수신기는 무선 또는 광학 신호로 운반되는 데이터를 수신할 수 있고, 적절한 회로부는 I/O 서브시스템(502)에 데이터를 제공할 수 있으며, 예컨대 데이터를 버스 상에 배치할 수 있다. I/O 서브시스템(502)은 데이터를 메모리(506)로 전달하며, 이로부터 프로세서(504)가 명령어들을 검색하고 실행한다. 메모리(506)에 의해 수신된 명령어들은 프로세서(504)에 의한 실행 이전 또는 이후에 저장소(510) 상에 선택적으로 저장될 수 있다.
컴퓨터 시스템(500)은 또한 버스(502)에 결합된 통신 인터페이스(518)를 포함한다. 통신 인터페이스(518)는 네트워크(522) 또는 인터넷 상의 공용 또는 사설 클라우드와 같은 적어도 하나의 통신 네트워크들에 직접 또는 간접적으로 연결되는 네트워크 링크(들)(520)에 대한 양방향 데이터 통신 결합을 제공한다. 예를 들어, 통신 인터페이스(518)는 이더넷 네트워킹 인터페이스, ISDN(integrated-services digital network) 카드, 케이블 모뎀, 위성 모뎀, 또는 대응하는 유형의 통신 라인, 예를 들어 이더넷 케이블 또는 임의의 종류의 금속 케이블 또는 광섬유 라인 또는 전화선에 데이터 통신 연결을 제공하는 모뎀일 수 있다. 네트워크(522)는 로컬 영역 네트워크(LAN), 광역 네트워크(WAN), 캠퍼스 네트워크, 인터네트워크 또는 이들의 임의의 조합을 광범위하게 표현한다. 통신 인터페이스(518)는 호환가능한 LAN에 데이터 통신 연결을 제공하기 위한 LAN 카드, 또는 셀룰러 무선전화 무선 네트워킹 표준에 따라 셀룰러 데이터를 전송 또는 수신하도록 유선으로 연결된 셀룰러 무선전화 인터페이스, 또는 위성 무선 네트워킹 표준에 따라 디지털 데이터를 전송 또는 수신하도록 유선으로 연결된 위성 무선 인터페이스를 포함할 수 있다. 임의의 그러한 구현예에서, 통신 인터페이스(518)는 다양한 유형의 정보를 표현하는 디지털 데이터 스트림들을 전달하는 신호 경로들을 통해 전기, 전자기 또는 광학 신호들을 전송 및 수신한다.
네트워크 링크(520)는 전형적으로, 예를 들어 위성, 셀룰러, Wi-Fi 또는 블루투스 기술을 사용하여 직접 또는 적어도 하나의 네트워크를 통해 다른 데이터 디바이스들에 전기, 전자기, 또는 광학 데이터 통신을 제공한다. 예를 들어, 네트워크 링크(520)는 네트워크(522)를 통해 호스트 컴퓨터(524)로의 연결을 제공할 수 있다.
더욱이, 네트워크 링크(520)는 네트워크(522)를 통해, 또는 인터넷 서비스 제공자(ISP)(526)에 의해 운영되는 인터네트워킹 디바이스들 및/또는 컴퓨터들을 통해 다른 컴퓨팅 디바이스들로의 연결을 제공할 수 있다. ISP(526)는 인터넷(528)으로 표현되는 월드와이드 패킷 데이터 통신 네트워크를 통해 데이터 통신 서비스들을 제공한다. 서버 컴퓨터(530)가 인터넷(528)에 결합될 수 있다. 서버(530)는 하이퍼바이저가 있거나 없는 임의의 컴퓨터, 데이터 센터, 가상 기계 또는 가상 컴퓨팅 인스턴스, 또는 DOCKER 또는 KUBERNETES와 같은 컨테이너화된 프로그램 시스템을 실행하는 컴퓨터를 광범위하게 표현한다. 서버(530)는 2개 이상의 컴퓨터 또는 인스턴스를 사용하여 구현되고 웹 서비스 요청들, HTTP 페이로드들에서의 파라미터들을 갖는 URL(uniform resource locator) 스트링들, API 호출들, 앱 서비스 호출들, 또는 다른 서비스 호출들을 송신함으로써 액세스되고 사용되는 전자 디지털 서비스를 표현할 수 있다. 컴퓨터 시스템(500) 및 서버(530)는 태스크들을 수행하거나 애플리케이션들 또는 서비스들을 실행하기 위해 협력하는 다른 컴퓨터들, 프로세싱 클러스터, 서버 팜 또는 다른 컴퓨터들의 조직을 포함하는 분산 컴퓨팅 시스템의 요소들을 형성할 수 있다. 서버(530)는 모듈들, 방법들, 객체들, 함수들, 루틴들, 또는 호출들로서 조직화되는 명령어들의 하나 이상의 세트들을 포함할 수 있다. 명령어들은 하나 이상의 컴퓨터 프로그램들, 운영 체제 서비스들, 또는 모바일 앱들을 포함한 애플리케이션 프로그램들로서 조직화될 수 있다. 명령어들은 다음을 포함할 수 있다: 운영 체제 및/또는 시스템 소프트웨어; 멀티미디어, 프로그래밍 또는 다른 함수들을 지원하는 하나 이상의 라이브러리들; TCP/IP, HTTP 또는 다른 통신 프로토콜들을 구현하기 위한 데이터 프로토콜 명령어들 또는 스택들; HTML, XML, JPEG, MPEG 또는 PNG를 사용하여 코딩된 파일들을 파싱 또는 렌더링하기 위한 파일 포맷 프로세싱 명령어들; 그래픽 사용자 인터페이스(GUI), 커맨드-라인 인터페이스 또는 텍스트 사용자 인터페이스에 대한 커맨드들을 렌더링 또는 해석하기 위한 사용자 인터페이스 명령어들; 오피스 스위트, 인터넷 액세스 애플리케이션, 설계 및 제조 애플리케이션, 그래픽 애플리케이션, 오디오 애플리케이션, 소프트웨어 엔지니어링 애플리케이션, 교육 애플리케이션, 게임 또는 기타 애플리케이션과 같은 애플리케이션 소프트웨어. 서버(530)는 프레젠테이션 층, 애플리케이션 층 및 데이터 저장소 층, 예컨대 구조화된 질의 언어(structured query language, SQL)를 사용하거나 SQL을 사용하지 않는 관계형 데이터베이스 시스템, 객체 저장소, 그래프 데이터베이스, 단층 파일 시스템 또는 다른 데이터 저장소를 호스팅하는 웹 애플리케이션 서버를 포함할 수 있다.
컴퓨터 시스템(500)은 네트워크(들), 네트워크 링크(520) 및 통신 인터페이스(518)를 통해, 메시지들을 전송할 수 있고 프로그램 코드를 포함한 데이터 및 명령어들을 수신할 수 있다. 인터넷 예에서, 서버(530)는 인터넷(528), ISP(526), 로컬 네트워크(522) 및 통신 인터페이스(518)를 통해 애플리케이션 프로그램에 대한 요청된 코드를 송신할 수 있다. 수신된 코드는 수신되는 그대로 프로세서(504)에 의해 실행될 수 있고, 그리고/또는 이후의 실행을 위해 저장소(510) 또는 다른 비휘발성 저장소에 저장될 수 있다.
본 섹션에서 기술된 명령어들의 실행은, 실행되고 있고 프로그램 코드 및 그의 현재 활동으로 구성되는 컴퓨터 프로그램의 인스턴스 형태로 프로세스를 구현할 수 있다. 운영 체제(OS)에 따라, 프로세스는 명령어들을 동시에 실행하는 다수의 실행 스레드들로 구성될 수 있다. 이 맥락에서, 컴퓨터 프로그램은 명령어들의 수동적 모음인 반면, 프로세스는 이 명령어들의 실제 실행일 수 있다. 여러 프로세스들이 동일한 프로그램과 연관될 수 있으며; 예를 들어, 동일한 프로그램의 여러 인스턴스들을 여는 것은 종종 둘 이상의 프로세스가 실행되고 있음을 의미한다. 다수의 프로세스들이 프로세서(504)를 공유할 수 있도록 멀티태스킹이 구현될 수 있다. 각각의 프로세서(504) 또는 프로세서의 코어가 한 번에 단일 태스크를 실행하는 반면, 컴퓨터 시스템(500)은 각각의 프로세서가 각각의 태스크가 완료될 때까지 기다릴 필요 없이 실행 중인 태스크들 사이를 전환할 수 있도록 멀티태스킹을 구현하도록 프로그래밍될 수 있다. 일 실시예에서, 태스크들이 입력/출력 동작들을 수행할 때, 태스크가 그것이 전환될 수 있음을 나타낼 때, 또는 하드웨어 인터럽트 시에 전환이 수행될 수 있다. 시간-공유는 동시에 다수의 프로세스들의 동시 실행의 출현을 제공하기 위해 컨텍스트 전환들을 빠르게 수행함으로써 대화형 사용자 애플리케이션들에 대한 빠른 응답을 허용하도록 구현될 수 있다. 일 실시예에서, 보안 및 신뢰성을 위해, 운영 체제는 독립적인 프로세스들 사이의 직접 통신을 방지하여, 엄격하게 중재되고 제어되는 프로세스-간 통신 기능성을 제공할 수 있다.
전술한 명세서에서, 본 발명의 실시예들은 구현예에 따라 변할 수 있는 많은 구체적인 상세사항들을 참조하여 기술되었다. 따라서, 명세서 및 도면은 제한적인 의미보다는 예시적인 의미로 간주되어야 한다. 본 발명의 범주의 유일하고 배타적인 지표, 및 출원인에 의해 본 발명의 범주에 있는 것으로 의도된 것은, 임의의 후속하는 수정을 비롯한, 청구범위가 게재하는 특정 형태로 본 출원으로부터 나오는 그러한 청구범위의 기본적이고 등가인 범주이다.

Claims (20)

  1. 부분 재구성(partial reconfiguration)을 지원하는 디지털 전자 집적 회로(integrated circuit, IC)를 구성하는 방법으로서, 특정 IC는 복수의 재구성가능한 파티션들을 가지며, 상기 방법은,
    재구성가능한 로직을 사용하여 상기 특정 IC 상에서 구현할 알고리즘의 기능적 로직을 특정하는 요청을 수신하는 단계;
    상기 요청에 응답하여, 상기 기능적 로직에 대응하는 특정 프리미티브 함수들을 포함하는 프리미티브 함수들의 서브세트를 결정하는 단계;
    디지털 저장소로부터, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 사전-컴파일된 프리미티브 비트스트림들의 서브세트를 획득하는 단계;
    하나 이상의 부분 재구성 동작을 사용하여, 상기 특정 IC에 상기 사전-컴파일된 프리미티브 비트스트림들의 상기 서브세트를 기록하는 단계를 포함하며,
    상기 방법은 하나 이상의 컴퓨팅 디바이스에 의해 수행되는, 방법.
  2. 제1항에 있어서, 상기 특정 IC는 M개의 재구성가능한 파티션 및 하나 이상의 재구성가능한 파티션 각각에서의 N개의 변형을 갖는 필드 프로그래밍가능 게이트 어레이(field programmable gate array, FPGA)를 포함하며, 복수의 사전-컴파일된 프리미티브 비트스트림들은 상기 FPGA 상의 M과 N의 모든 조합들에 기록되고 상기 모든 조합들 상에서 구현될 수 있는 복수의 상이한 프리미티브 함수들에 대한 컴파일된 비트스트림들을 포함하여, M*N 프리미티브들을 저장하는 것을 야기하는, 방법.
  3. 제1항에 있어서,
    상기 특정 IC에 구성 비트스트림들을 기록하기 전에, 클라이언트 컴퓨터 시스템에 통신가능하게 결합되는 서버를 사용하여, 상기 특정 IC에 기록되고 상기 특정 IC 상에서 구현될 수 있는 복수의 상이한 프리미티브 함수들에 대한 복수의 사전-컴파일된 프리미티브 비트스트림들을 컴파일하고, 상기 디지털 저장소를 사용하여 상기 복수의 사전-컴파일된 프리미티브 비트스트림들을 저장하는 단계;
    상기 클라이언트 컴퓨터 시스템으로부터 상기 서버로, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 상기 사전-컴파일된 프리미티브 비트스트림들의 상기 서브세트를 제공하라는 요청을 송신하는 단계;
    상기 서버로부터 상기 클라이언트 컴퓨터 시스템으로, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 상기 사전-컴파일된 프리미티브 비트스트림들의 상기 서브세트를 포함하는 응답을 송신하는 단계를 추가로 포함하는, 방법.
  4. 제3항에 있어서, 상기 기능적 로직에 대응하는 특정 프리미티브 함수들을 포함하는 상기 프리미티브 함수들의 서브세트를 결정하는 단계는, 상기 프리미티브 함수들 각각에 대한 특정 파티션들 및 변형들을 결정하는 단계, 및 상기 특정 파티션들 및 변형들을 식별하는 메타데이터를 저장하는 단계를 추가로 포함하고, 상기 요청을 송신하는 단계는 상기 요청과 함께 상기 메타데이터를 송신하는 단계를 추가로 포함하는, 방법.
  5. 제1항에 있어서, 상기 방법은, 복수의 순차적으로 연결된 DSP 블록 부분 재구성 영역들을 각각 갖는 복수의 행들, 행들 사이의 임의의 연결들을 허용하는 복수의 인터커넥트(interconnect)들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 하나 이상의 입력, 하나 이상의 출력을 갖고, 구성 AXI 버스에 연결되는, 방법.
  6. 제5항에 있어서, 상기 변형들 각각은 상이한 목적을 위한 로직을 포함하고 어떤 신호들이 하나 이상의 출력들로 전달되는지를 선택하기 위한 출력 멀티플렉싱을 가지는, FPGA에서의 사용을 위해 구성되는, 방법.
  7. 제1항에 있어서, 상기 방법은, 복수의 순차적으로 연결된 DSP 블록 부분 재구성 영역들을 각각 갖는 복수의 행들, 행들 사이의 임의의 연결들을 허용하는 복수의 인터커넥트들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 2개 이상의 입력들, 2개 이상의 출력들을 갖고, 구성 AXI 버스에 연결되고;
    상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역의 제1 세트는 단일-채널 버전들의 기기들로서 구성될 수 있는 더 큰 PR 영역들이고;
    상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역의 제2 세트는 저-레벨 함수들을 구현하도록 구성되는, 방법.
  8. 제1항에 있어서,
    상기 방법은, 복수의 DSP 블록 부분 재구성 영역들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 2개 이상의 입력들, 2개 이상의 출력들을 갖고, 구성 AXI 버스에 연결되고;
    상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역의 제1 세트는 신호 생성 또는 제어기 기기들을 위해 구성되는 더 큰 PR 영역들이고;
    상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역의 제2 세트는 측정 또는 모니터링 기기들을 위해 구성되는, 방법.
  9. 제1항에 있어서, 상기 방법은, 상기 특정 IC 상에서 구현할 상기 알고리즘의 상기 기능적 로직을 표현하는 그래픽 블록들을 선택하고 연결하기 위해 그래픽 사용자 인터페이스에서 입력을 수신하는 단계를 추가로 포함하며, 상기 그래픽 블록들은 재구성가능한 로직에 관련되는, 방법.
  10. 제1항에 있어서, 상기 디지털 저장소는 네트워크 데이터 저장소, 호스트 컴퓨터 상의 저장소, 가상 컴퓨팅 인스턴스와 연관된 저장소, 및 이들의 조합으로 구성된 그룹으로부터 선택된 저장소를 포함하는, 방법.
  11. 제1항에 있어서, 상기 프리미티브 함수들은 프리미티브 함수들의 제2 서브세트에 대응하는 프리미티브 함수들의 제2 서브세트를 포함하고;
    프리미티브 비트스트림들의 제2 서브세트는 사전-컴파일된 프리미티브 비트스트림들이 아니고;
    상기 방법은,
    컴퓨팅 디바이스를 사용하여, 상기 프리미티브 함수들의 제2 서브세트에 대해 상기 프리미티브 비트스트림들의 제2 서브세트를 컴파일하는 단계; 및
    하나 이상의 부분 재구성 동작을 사용하여, 상기 특정 IC에 상기 프리미티브 비트스트림들의 제2 서브세트를 기록하는 단계를 포함하는, 방법.
  12. 부분 재구성을 지원하는 디지털 전자 집적 회로(integrated circuit, IC)를 구성하기 위한 명령어들의 시퀀스들을 저장하는 하나 이상의 비일시적 컴퓨터 판독가능 저장 매체로서, 특정 IC는 복수의 재구성가능한 파티션들을 가지며, 상기 명령어들의 시퀀스들은, 하나 이상의 프로세서를 사용하여 실행될 때, 상기 하나 이상의 프로세서로 하여금,
    재구성가능한 로직을 사용하여 상기 특정 IC 상에서 구현할 알고리즘의 기능적 로직을 특정하는 요청을 수신하는 것;
    상기 기능적 로직에 대응하는 특정 프리미티브 함수들을 포함하는 프리미티브 함수들의 서브세트를 결정하는 것;
    디지털 저장소로부터, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 사전-컴파일된 프리미티브 비트스트림들의 서브세트를 획득하는 것;
    하나 이상의 부분 재구성 동작을 사용하여, 상기 특정 IC에 상기 프리미티브 비트스트림들의 상기 서브세트를 기록하는 것을 수행하게 하고;
    상기 방법은 하나 이상의 컴퓨팅 디바이스에 의해 수행되는, 컴퓨터 판독가능 저장 매체.
  13. 제12항에 있어서, 상기 특정 IC는 M개의 재구성가능한 파티션들 및 하나 이상의 재구성가능한 파티션들 각각에서의 N개의 변형들을 갖는 필드 프로그래밍가능 게이트 어레이(field programmable gate array, FPGA)를 포함하며, 상기 컴퓨터 판독가능 저장 매체는, 실행될 때, 상기 FPGA 상의 M과 N의 모든 조합들에 기록되고 상기 모든 조합들 상에서 구현될 수 있는 복수의 상이한 프리미티브 함수들에 대한 상기 복수의 프리미티브 비트스트림들을 컴파일하고 저장하여, M*N 프리미티브들을 저장하는 것을 야기하는 명령어들의 시퀀스들을 추가로 포함하는, 컴퓨터 판독가능 저장 매체.
  14. 제12항에 있어서, 실행될 때,
    상기 특정 IC에 구성 비트스트림들을 기록하기 전에, 클라이언트 컴퓨터 시스템에 통신가능하게 결합되는 서버를 사용하여, 상기 특정 IC에 기록되고 상기 특정 IC 상에서 구현될 수 있는 복수의 상이한 프리미티브 함수들에 대한 복수의 사전-컴파일된 프리미티브 비트스트림들을 컴파일하고, 상기 디지털 저장소를 사용하여 상기 복수의 사전-컴파일된 프리미티브 비트스트림들을 저장하는 것;
    상기 클라이언트 컴퓨터 시스템으로부터 상기 서버로, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 상기 사전-컴파일된 프리미티브 비트스트림들의 상기 서브세트를 제공하라는 요청을 송신하는 것;
    상기 서버로부터 상기 클라이언트 컴퓨터 시스템으로, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 상기 사전-컴파일된 프리미티브 비트스트림들의 상기 서브세트를 포함하는 응답을 송신하는 것을 야기하는 명령어들의 시퀀스들을 추가로 포함하는, 컴퓨터 판독가능 저장 매체.
  15. 제14항에 있어서, 상기 기능적 로직에 대응하는 특정 프리미티브 함수들을 포함하는 상기 프리미티브 함수들의 서브세트를 결정하는 것은, 실행될 때, 상기 프리미티브 함수들 각각에 대한 특정 파티션들 및 변형들을 결정하는 것, 및 상기 특정 파티션들 및 변형들을 식별하는 메타데이터를 저장하는 것을 야기하는 명령어들의 시퀀스들을 추가로 포함하고, 상기 요청을 송신하는 것은 상기 요청과 함께 상기 메타데이터를 송신하는 것을 추가로 포함하는, 컴퓨터 판독가능 저장 매체.
  16. 제12항에 있어서, 상기 컴퓨터 판독가능 저장 매체는, 복수의 동일한 순차적으로 연결된 DSP 블록 부분 재구성 영역들을 각각 갖는 복수의 행들, 행들 사이의 임의의 연결들을 허용하는 복수의 인터커넥트들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 하나 이상의 입력, 하나 이상의 출력을 갖고, 구성 AXI 버스에 연결되는, 컴퓨터 판독가능 저장 매체.
  17. 제16항에 있어서, 상기 변형들 각각은 상이한 목적을 위한 로직을 포함하고 어떤 신호들이 하나 이상의 출력들로 전달되는지를 선택하기 위한 출력 멀티플렉싱을 가지는, FPGA에서의 사용을 위해 구성되는, 컴퓨터 판독가능 저장 매체.
  18. 제12항에 있어서, 상기 컴퓨터 판독가능 저장 매체는, 복수의 DSP 블록 부분 재구성 영역들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 2개 이상의 입력들, 2개 이상의 출력들을 갖고, 구성 AXI 버스에 연결되고;
    상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역의 제1 세트는 단일-채널 버전들의 기기들로서 구성될 수 있는 더 큰 PR 영역들이고;
    상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역의 제2 세트는 저-레벨 함수들을 구현하도록 구성되는, 컴퓨터 판독가능 저장 매체.
  19. 제12항에 있어서,
    상기 컴퓨터 판독가능 저장 매체는, 복수의 순차적으로 연결된 DSP 블록 부분 재구성 영역들을 각각 갖는 복수의 행들, 행들 사이의 임의의 연결들을 허용하는 복수의 인터커넥트들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 2개 이상의 입력들, 2개 이상의 출력들을 갖고, 구성 AXI 버스에 연결되고;
    상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역의 제1 세트는 신호 생성 또는 제어기 기기들을 위해 구성되는 더 큰 PR 영역들이고;
    상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역의 제2 세트는 측정 또는 모니터링 기기들을 위해 구성되는, 컴퓨터 판독가능 저장 매체.
  20. 제12항에 있어서, 상기 컴퓨터 판독가능 저장 매체는, 실행될 때, 상기 특정 IC 상에서 구현할 알고리즘의 기능적 로직을 표현하는 그래픽 블록들을 선택하고 연결하기 위해 그래픽 사용자 인터페이스에서 입력을 수신하는 것을 야기하는 명령어들의 시퀀스들을 추가로 포함하며, 상기 그래픽 블록들은 재구성가능한 로직에 관련되는, 컴퓨터 판독가능 저장 매체.
KR1020237011909A 2018-08-27 2019-08-20 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스 KR20230052994A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US16/113,490 US10642630B1 (en) 2018-08-27 2018-08-27 Process of programming field programmable gate arrays using partial reconfiguration
US16/113,490 2018-08-27
PCT/US2019/047251 WO2020046645A1 (en) 2018-08-27 2019-08-20 Improved process of programming field programmable gate arrays using partial reconfiguration
KR1020217008145A KR102521275B1 (ko) 2018-08-27 2019-08-20 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020217008145A Division KR102521275B1 (ko) 2018-08-27 2019-08-20 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스

Publications (1)

Publication Number Publication Date
KR20230052994A true KR20230052994A (ko) 2023-04-20

Family

ID=69643748

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020237011909A KR20230052994A (ko) 2018-08-27 2019-08-20 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스
KR1020217008145A KR102521275B1 (ko) 2018-08-27 2019-08-20 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020217008145A KR102521275B1 (ko) 2018-08-27 2019-08-20 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스

Country Status (12)

Country Link
US (2) US10642630B1 (ko)
EP (1) EP3844662A4 (ko)
JP (2) JP7411663B2 (ko)
KR (2) KR20230052994A (ko)
CN (1) CN112997145A (ko)
AU (1) AU2019327360B2 (ko)
CA (1) CA3114313C (ko)
CH (1) CH716706B1 (ko)
DE (1) DE112019004301T5 (ko)
GB (2) GB2599051B (ko)
SG (1) SG11202101816YA (ko)
WO (1) WO2020046645A1 (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018228693A1 (en) * 2017-06-15 2018-12-20 Telefonaktiebolaget Lm Ericsson (Publ) Hardware platform based on fpga partial reconfiguration for wireless communication device
US11188497B2 (en) 2018-11-21 2021-11-30 SambaNova Systems, Inc. Configuration unload of a reconfigurable data processor
US10831507B2 (en) 2018-11-21 2020-11-10 SambaNova Systems, Inc. Configuration load of a reconfigurable data processor
US11907828B2 (en) * 2019-09-03 2024-02-20 International Business Machines Corporation Deep neural network on field-programmable gate array
CN112199320B (zh) * 2020-09-28 2023-06-02 西南电子技术研究所(中国电子科技集团公司第十研究所) 多通道可重构信号处理装置
US20220131915A1 (en) * 2020-10-27 2022-04-28 Nokia Solutions And Networks Oy Management and implementation of applications in cloud-based fpgas
WO2022131397A1 (ko) * 2020-12-16 2022-06-23 주식회사 모빌린트 Cnn-rnn 아키텍처 전환형 연산 가속장치 설계 방법
CN112560370A (zh) * 2020-12-21 2021-03-26 上海逸集晟网络科技有限公司 芯片设计代码的生成方法、终端以及存储介质
CN113203935B (zh) * 2021-03-11 2024-06-28 江西创成微电子有限公司 芯片测试方法、系统及可读存储介质
DE112022001503T5 (de) * 2021-03-15 2024-01-25 Liquid Instruments Pty Ltd. Vielfachmessgerät auf der grundlage eines fpga mit teilweiser rekonfiguration
US20220321403A1 (en) * 2021-04-02 2022-10-06 Nokia Solutions And Networks Oy Programmable network segmentation for multi-tenant fpgas in cloud infrastructures
US11409540B1 (en) 2021-07-16 2022-08-09 SambaNova Systems, Inc. Routing circuits for defect repair for a reconfigurable data processor
US11327771B1 (en) 2021-07-16 2022-05-10 SambaNova Systems, Inc. Defect repair circuits for a reconfigurable data processor
US11556494B1 (en) * 2021-07-16 2023-01-17 SambaNova Systems, Inc. Defect repair for a reconfigurable data processor for homogeneous subarrays
CN116737618B (zh) * 2023-08-14 2023-11-14 浪潮电子信息产业股份有限公司 Fpga架构、器件、数据处理方法、系统及存储介质
CN117077599B (zh) * 2023-09-18 2024-04-19 苏州异格技术有限公司 一种现场可编程逻辑门阵列视图生成方法及装置
CN117807938B (zh) * 2023-12-29 2024-07-12 苏州异格技术有限公司 一种从逻辑原语参数产生fpga芯片配置比特的方法
CN118118444B (zh) * 2024-04-28 2024-07-12 之江实验室 一种基于可编程交换机的计算功能抽象方法及装置

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7698118B2 (en) * 2004-04-15 2010-04-13 Mentor Graphics Corporation Logic design modeling and interconnection
US7679401B1 (en) * 2005-12-01 2010-03-16 Tabula, Inc. User registers implemented with routing circuits in a configurable IC
US7739092B1 (en) 2006-01-31 2010-06-15 Xilinx, Inc. Fast hardware co-simulation reset using partial bitstreams
US7823117B1 (en) 2007-12-21 2010-10-26 Xilinx, Inc. Separating a high-level programming language program into hardware and software components
US8797061B2 (en) * 2011-12-21 2014-08-05 Altera Corporation Partial reconfiguration circuitry
US20130212366A1 (en) * 2012-02-09 2013-08-15 Altera Corporation Configuring a programmable device using high-level language
US9134981B2 (en) * 2012-06-22 2015-09-15 Altera Corporation OpenCL compilation
US8997033B1 (en) * 2014-03-05 2015-03-31 Altera Corporation Techniques for generating a single configuration file for multiple partial reconfiguration regions
US9584129B1 (en) * 2014-06-20 2017-02-28 Altera Corporation Integrated circuit applications using partial reconfiguration
US9542244B2 (en) 2015-04-22 2017-01-10 Ryft Systems, Inc. Systems and methods for performing primitive tasks using specialized processors
US9449134B1 (en) * 2015-06-25 2016-09-20 International Business Machines Corporation Dynamically reconfigurable logic circuits using native field-programmable gate array primitives
US9929734B2 (en) 2015-09-08 2018-03-27 Dspace Digital Signal Processing And Control Engineering Gmbh Method for changing the configuration of a programmable logic module
US9824173B1 (en) 2015-09-11 2017-11-21 Xilinx, Inc. Software development-based compilation flow for hardware implementation
US9584130B1 (en) * 2016-01-11 2017-02-28 Altera Corporation Partial reconfiguration control interface for integrated circuits
US10218359B2 (en) 2017-06-29 2019-02-26 Intel Corporation Regional partial reconfiguration of a programmable device
US10761951B2 (en) * 2017-12-28 2020-09-01 Intel Corporation FPGA based functional safety control logic (FFSCL)

Also Published As

Publication number Publication date
EP3844662A4 (en) 2021-11-03
CA3114313C (en) 2024-02-27
CH716706B1 (de) 2023-02-15
GB202117992D0 (en) 2022-01-26
US20210255879A1 (en) 2021-08-19
KR20210078475A (ko) 2021-06-28
GB2599051B (en) 2022-10-26
JP7411663B2 (ja) 2024-01-11
SG11202101816YA (en) 2021-03-30
GB2590859B (en) 2022-02-09
JP2021536650A (ja) 2021-12-27
US11675604B2 (en) 2023-06-13
GB2590859A (en) 2021-07-07
EP3844662A1 (en) 2021-07-07
JP2024038092A (ja) 2024-03-19
GB2590859A8 (en) 2021-07-21
CN112997145A (zh) 2021-06-18
AU2019327360B2 (en) 2023-07-20
AU2019327360A1 (en) 2021-03-18
WO2020046645A1 (en) 2020-03-05
GB2599051A (en) 2022-03-23
DE112019004301T5 (de) 2021-06-17
KR102521275B1 (ko) 2023-04-12
GB202103251D0 (en) 2021-04-21
US10642630B1 (en) 2020-05-05
CA3114313A1 (en) 2020-03-05

Similar Documents

Publication Publication Date Title
KR102521275B1 (ko) 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스
US11146456B2 (en) Formal model checking based approaches to optimized realizations of network functions in multi-cloud environments
US11188310B2 (en) Automatically generating an interface description in an interface description language
US20200110625A1 (en) Placement of container workloads triggered by network traffic for efficient computing at network edge devices
US10990595B2 (en) Fast distributed graph query engine
JP2021526688A (ja) 分散型異種コンピューティングおよび制御システムを設計する方法およびシステム
CN112055953B (zh) 在云环境中管理多播服务链
US11526464B2 (en) Scaling HDFS for hive
US12019617B2 (en) Data quality enforcement as a service invoked using descriptive language
US11379525B1 (en) Continuous builds of derived datasets in response to other dataset updates
AU2017239615B2 (en) Dynamic provisioning of a set of tools based on project specifications
US10324692B2 (en) Integration for next-generation applications
US11055282B1 (en) Translating graph queries into efficient network protocol requests
US20230385285A1 (en) Data pipeline definition using descriptive language
US10915343B2 (en) Server computer execution of client executable code
WO2023193470A1 (zh) 一种业务管理方法、系统及相关装置
WO2024049518A1 (en) Automated application deployment

Legal Events

Date Code Title Description
A107 Divisional application of patent