KR20210078475A - 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스 - Google Patents
부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스 Download PDFInfo
- Publication number
- KR20210078475A KR20210078475A KR1020217008145A KR20217008145A KR20210078475A KR 20210078475 A KR20210078475 A KR 20210078475A KR 1020217008145 A KR1020217008145 A KR 1020217008145A KR 20217008145 A KR20217008145 A KR 20217008145A KR 20210078475 A KR20210078475 A KR 20210078475A
- Authority
- KR
- South Korea
- Prior art keywords
- primitive
- bitstreams
- variants
- subset
- fpga
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03K—PULSE TECHNIQUE
- H03K19/00—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
- H03K19/02—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
- H03K19/173—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
- H03K19/177—Logic 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/17748—Structural details of configuration resources
- H03K19/17756—Structural details of configuration resources for partial configuration or partial reconfiguration
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03K—PULSE TECHNIQUE
- H03K19/00—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
- H03K19/02—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
- H03K19/173—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
- H03K19/177—Logic 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/17748—Structural details of configuration resources
- H03K19/17758—Structural details of configuration resources for speeding up configuration or reconfiguration
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)
- Information Transfer Between Computers (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
부분 재구성을 지원하는 필드 프로그래밍가능 게이트 어레이(FPGA) 디지털 전자 집적 회로(IC)들 및 다른 IC들을 프로그래밍하는 것 - 특정 FPGA는 재구성가능한 파티션들 및 재구성가능한 파티션들 각각에서의 구성가능한 프리미티브 변형들을 가짐 - 은, 구성 비트스트림들을 FPGA에 기록하기 전에, 특정 FPGA에 상에서 구현될 수 있는 상이한 프리미티브 함수들에 대한 프리미티브 비트스트림들을 컴파일하고 저장하는 것; 특정 FPGA 상에서 구현할 알고리즘의 기능적 로직을 표현하는 그래픽 블록들을 연결하기 위해 그래픽 사용자 인터페이스에서 입력을 수신하는 것 - 그래픽 블록들은 재구성가능한 로직에 관련됨 -; 그래픽 블록들에 대응하는 특정 프리미티브 함수들을 포함하는 프리미티브 함수들의 서브세트를 자동으로 결정하는 것; 디지털 저장소로부터, 프리미티브 함수들의 서브세트에 대응하는 프리미티브 비트스트림들의 서브세트를 획득하는 것; 부분 재구성 동작들을 사용하여, 특정 FPGA에 프리미티브 비트스트림들의 서브세트를 기록하는 것을 포함한다.
Description
본 개시내용의 하나의 기술 분야는 필드 프로그래밍가능 게이트 어레이(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는 일 실시예에 따른 예시적인 컴퓨터를 이용한 실시예를 예시한다.
도 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 (18)
- 부분 재구성(partial reconfiguration)을 지원하는 디지털 전자 집적 회로(IC)를 구성하는 속도 및 효율성에서의 개선을 제공하는 방법으로서, 특정 IC는 복수의 재구성가능한 파티션들 및 상기 재구성가능한 파티션들 각각에서의 구성가능한 복수의 프리미티브 변형들을 가지며, 상기 방법은,
구성 비트스트림들을 상기 특정 IC에 기록하기 전에, 디지털 저장소를 사용하여, 상기 특정 IC에 기록되고 상기 특정 IC 상에서 구현될 수 있는 복수의 상이한 프리미티브 함수들에 대한 복수의 프리미티브 비트스트림들을 컴파일하고 저장하는 단계;
재구성가능한 로직을 사용하여 상기 특정 IC 상에서 구현할 알고리즘의 기능적 로직을 특정하는 입력을 수신하는 단계;
상기 기능적 로직에 대응하는 특정 프리미티브 함수들을 포함하는 상기 프리미티브 함수들의 서브세트를 자동으로 결정하는 단계;
상기 디지털 저장소로부터, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 상기 프리미티브 비트스트림들의 서브세트를 획득하는 단계;
하나 이상의 부분 재구성 동작들을 사용하여, 상기 특정 IC에 상기 프리미티브 비트스트림들의 상기 서브세트를 기록하는 단계를 포함하며,
상기 방법은 하나 이상의 컴퓨팅 디바이스들에 의해 수행되는, 방법. - 제1항에 있어서, 상기 특정 IC는 M개의 재구성가능한 파티션들 및 상기 재구성가능한 파티션들 각각에서의 N개의 변형들을 갖는 필드 프로그래밍가능 게이트 어레이(field programmable gate array, FPGA)를 포함하며, 상기 방법은, 상기 FPGA 상의 M 과 N의 모든 조합들에 기록되고 상기 모든 조합들 상에서 구현될 수 있는 복수의 상이한 프리미티브 함수들에 대한 상기 복수의 프리미티브 비트스트림들을 컴파일하고 저장하여, M * N 프리미티브들을 저장하는 것을 야기하는 단계를 추가로 포함하는, 방법.
- 제1항에 있어서,
클라이언트 컴퓨터 시스템에 통신가능하게 결합되는 서버를 사용하여 상기 컴파일하고 저장하는 단계를 수행하는 단계;
상기 클라이언트 컴퓨터 시스템으로부터 상기 서버로, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 상기 프리미티브 비트스트림들의 상기 서브세트를 제공하라는 요청을 송신하는 단계;
상기 서버로부터 상기 클라이언트 컴퓨터로, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 상기 프리미티브 비트스트림들의 상기 서브세트를 포함하는 응답을 송신하는 단계를 추가로 포함하는, 방법. - 제3항에 있어서, 상기 기능적 로직에 대응하는 특정 프리미티브 함수들을 포함하는 상기 프리미티브 함수들의 서브세트를 자동으로 결정하는 단계는, 상기 프리미티브 함수들 각각에 대한 특정 파티션들 및 변형들을 결정하는 단계, 및 상기 특정 파티션들 및 변형들을 식별하는 메타데이터를 저장하는 단계를 추가로 포함하고, 상기 요청을 송신하는 단계는 상기 요청과 함께 상기 메타데이터를 송신하는 단계를 추가로 포함하는, 방법.
- 제1항에 있어서, 상기 방법은, 복수의 순차적으로 연결된 DSP 블록 부분 재구성 영역들을 각각 갖는 복수의 행들, 행들 사이의 임의의 연결들을 허용하는 복수의 인터커넥트(interconnect)들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 하나 이상의 입력들, 하나 이상의 출력들을 갖고, 구성 AXI 버스에 연결되는, 방법.
- 제5항에 있어서, 상기 변형들 각각은 상이한 목적을 위한 로직을 포함하고 어떤 신호들이 상기 2개 이상의 출력들로 전달되는지를 선택하기 위한 출력 멀티플렉싱을 가지는, FPGA에서의 사용을 위해 구성되는, 방법.
- 제1항에 있어서, 상기 방법은, 복수의 순차적으로 연결된 DSP 블록 부분 재구성 영역들을 각각 갖는 복수의 행들, 행들 사이의 임의의 연결들을 허용하는 복수의 인터커넥트들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 2개 이상의 입력들, 2개 이상의 출력들을 갖고, 구성 AXI 버스에 연결되고;
상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역들의 제1 세트는 단일-채널 버전들의 기기들로서 구성될 수 있는 더 큰 PR 영역들이고;
상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역들의 제2 세트는 저-레벨 함수들을 구현하도록 구성되는, 방법. - 제1항에 있어서,
상기 방법은, 복수의 순차적으로 연결된 DSP 블록 부분 재구성 영역들을 각각 갖는 복수의 행들, 행들 사이의 임의의 연결들을 허용하는 복수의 인터커넥트들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 2개 이상의 입력들, 2개 이상의 출력들을 갖고, 구성 AXI 버스에 연결되고;
상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역들의 제1 세트는 신호 생성 또는 제어기 기기들을 위해 구성되는 더 큰 PR 영역들이고;
상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역들의 제2 세트는 측정 또는 모니터링 기기들을 위해 구성되는, 방법. - 제1항에 있어서, 상기 방법은, 상기 특정 IC 상에서 구현할 상기 알고리즘의 상기 기능적 로직을 표현하는 그래픽 블록들을 선택하고 연결하기 위해 그래픽 사용자 인터페이스에서 입력을 수신하는 단계를 추가로 포함하며, 상기 그래픽 블록들은 재구성가능한 로직에 관련되는, 방법.
- 부분 재구성을 지원하는 디지털 전자 집적 회로(IC)를 구성하는 속도 및 효율성에서의 개선을 제공하는 명령어들의 시퀀스들을 저장하는 하나 이상의 비일시적 컴퓨터 판독가능 저장 매체로서, 특정 IC는 복수의 재구성가능한 파티션들 및 상기 재구성가능한 파티션들 각각에서의 구성가능한 복수의 프리미티브 변형들을 가지며, 상기 명령어들의 시퀀스들은, 하나 이상의 프로세서들을 사용하여 실행될 때, 상기 하나 이상의 프로세서들로 하여금,
구성 비트스트림들을 상기 특정 IC에 기록하기 전에, 디지털 저장소를 사용하여, 상기 특정 IC에 기록되고 상기 특정 IC 상에서 구현될 수 있는 복수의 상이한 프리미티브 함수들에 대한 복수의 프리미티브 비트스트림들을 컴파일하고 저장하는 것;
재구성가능한 로직을 사용하여 상기 특정 IC 상에서 구현할 알고리즘의 기능적 로직을 특정하는 입력을 수신하는 것;
상기 기능적 로직에 대응하는 특정 프리미티브 함수들을 포함하는 상기 프리미티브 함수들의 서브세트를 자동으로 결정하는 것;
상기 디지털 저장소로부터, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 상기 프리미티브 비트스트림들의 서브세트를 획득하는 것;
하나 이상의 부분 재구성 동작들을 사용하여, 상기 특정 IC에 상기 프리미티브 비트스트림들의 상기 서브세트를 기록하는 것을 수행하게 하며,
상기 방법은 하나 이상의 컴퓨팅 디바이스들에 의해 수행되는, 방법. - 제10항에 있어서, 상기 특정 IC는 M개의 재구성가능한 파티션들 및 상기 재구성가능한 파티션들 각각에서의 N개의 변형들을 갖는 필드 프로그래밍가능 게이트 어레이(FPGA)를 포함하며, 상기 컴퓨터 판독가능 매체는, 실행될 때, 상기 FPGA 상의 M 과 N의 모든 조합들에 기록되고 상기 모든 조합들 상에서 구현될 수 있는 복수의 상이한 프리미티브 함수들에 대한 상기 복수의 프리미티브 비트스트림들을 컴파일하고 저장하여, M * N 프리미티브들을 저장하는 것을 야기하는 명령어들의 시퀀스들을 추가로 포함하는, 컴퓨터 판독가능 매체.
- 제10항에 있어서, 실행될 때,
클라이언트 컴퓨터 시스템에 통신가능하게 결합되는 서버를 사용하여 상기 컴파일하고 저장하는 것을 수행하는 것;
상기 클라이언트 컴퓨터 시스템으로부터 상기 서버로, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 상기 프리미티브 비트스트림들의 상기 서브세트를 제공하라는 요청을 송신하는 것;
상기 서버로부터 상기 클라이언트 컴퓨터로, 상기 프리미티브 함수들의 상기 서브세트에 대응하는 상기 프리미티브 비트스트림들의 상기 서브세트를 포함하는 응답을 송신하는 것을 야기하는 명령어들의 시퀀스들을 추가로 포함하는, 컴퓨터 판독가능 매체. - 제12항에 있어서, 상기 기능적 로직에 대응하는 특정 프리미티브 함수들을 포함하는 상기 프리미티브 함수들의 서브세트를 자동으로 결정하는 것은, 실행될 때, 상기 프리미티브 함수들 각각에 대한 특정 파티션들 및 변형들을 결정하는 것, 및 상기 특정 파티션들 및 변형들을 식별하는 메타데이터를 저장하는 것을 야기하는 명령어들의 시퀀스들을 추가로 포함하고, 상기 요청을 송신하는 것은 상기 요청과 함께 상기 메타데이터를 송신하는 것을 추가로 포함하는, 컴퓨터 판독가능 매체.
- 제10항에 있어서, 상기 컴퓨터 판독가능 매체는, 복수의 동일한 순차적으로 연결된 DSP 블록 부분 재구성 영역들을 각각 갖는 복수의 행들, 행들 사이의 임의의 연결들을 허용하는 복수의 인터커넥트들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 하나 이상의 입력들, 하나 이상의 출력들을 갖고, 구성 AXI 버스에 연결되는, 컴퓨터 판독가능 매체.
- 제14항에 있어서, 상기 변형들 각각은 상이한 목적을 위한 로직을 포함하고 어떤 신호들이 상기 2개 이상의 출력들로 전달되는지를 선택하기 위한 출력 멀티플렉싱을 가지는, FPGA에서의 사용을 위해 구성되는, 컴퓨터 판독가능 매체.
- 제10항에 있어서, 상기 컴퓨터 판독가능 매체는, 복수의 순차적으로 연결된 DSP 블록 부분 재구성 영역들을 각각 갖는 복수의 행들, 행들 사이의 임의의 연결들을 허용하는 복수의 인터커넥트들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 2개 이상의 입력들, 2개 이상의 출력들을 갖고, 구성 AXI 버스에 연결되고;
상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역들의 제1 세트는 단일-채널 버전들의 기기들로서 구성될 수 있는 더 큰 PR 영역들이고;
상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역들의 제2 세트는 저-레벨 함수들을 구현하도록 구성되는, 컴퓨터 판독가능 매체. - 제10항에 있어서,
상기 컴퓨터 판독가능 매체는, 복수의 순차적으로 연결된 DSP 블록 부분 재구성 영역들을 각각 갖는 복수의 행들, 행들 사이의 임의의 연결들을 허용하는 복수의 인터커넥트들을 포함하는 FPGA에서의 사용을 위해 구성되며, 상기 DSP 블록 부분 재구성 영역들 각각은 상기 프리미티브 비트스트림들 중에서 상이한 비트스트림 프리미티브를 사용하여 N개의 변형들 중 하나로서 구성가능하고, 상기 변형들 각각은 2개 이상의 입력들, 2개 이상의 출력들을 갖고, 구성 AXI 버스에 연결되고;
상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역들의 제1 세트는 신호 생성 또는 제어기 기기들을 위해 구성되는 더 큰 PR 영역들이고;
상기 DSP 블록 부분 재구성 영역들 중 하나 이상의 DSP 블록 부분 재구성 영역들의 제2 세트는 측정 또는 모니터링 기기들을 위해 구성되는, 컴퓨터 판독가능 매체. - 제10항에 있어서, 상기 컴퓨터 판독가능 매체는, 실행될 때, 상기 특정 IC 상에서 구현할 알고리즘의 기능적 로직을 표현하는 그래픽 블록들을 선택하고 연결하기 위해 그래픽 사용자 인터페이스에서 입력을 수신하는 것을 야기하는 명령어들의 시퀀스들을 추가로 포함하며, 상기 그래픽 블록들은 재구성가능한 로직에 관련되는, 컴퓨터 판독가능 매체.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020237011909A KR20230052994A (ko) | 2018-08-27 | 2019-08-20 | 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/113,490 | 2018-08-27 | ||
US16/113,490 US10642630B1 (en) | 2018-08-27 | 2018-08-27 | Process of programming field programmable gate arrays using partial reconfiguration |
PCT/US2019/047251 WO2020046645A1 (en) | 2018-08-27 | 2019-08-20 | Improved process of programming field programmable gate arrays using partial reconfiguration |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020237011909A Division KR20230052994A (ko) | 2018-08-27 | 2019-08-20 | 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20210078475A true KR20210078475A (ko) | 2021-06-28 |
KR102521275B1 KR102521275B1 (ko) | 2023-04-12 |
Family
ID=69643748
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020217008145A KR102521275B1 (ko) | 2018-08-27 | 2019-08-20 | 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스 |
KR1020237011909A KR20230052994A (ko) | 2018-08-27 | 2019-08-20 | 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020237011909A KR20230052994A (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) | KR102521275B1 (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)
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 |
US10831507B2 (en) | 2018-11-21 | 2020-11-10 | SambaNova Systems, Inc. | Configuration load of a reconfigurable data processor |
US11188497B2 (en) | 2018-11-21 | 2021-11-30 | SambaNova Systems, Inc. | Configuration unload 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 | 之江实验室 | 一种基于可编程交换机的计算功能抽象方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100057426A1 (en) * | 2004-04-15 | 2010-03-04 | Mentor Graphics Corporation | Logic Design Modeling and Interconnection |
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 |
US20130162290A1 (en) * | 2011-12-21 | 2013-06-27 | Balaji Margabandu | Partial reconfiguration circuitry |
US9824173B1 (en) * | 2015-09-11 | 2017-11-21 | Xilinx, Inc. | Software development-based compilation flow for hardware implementation |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7679401B1 (en) * | 2005-12-01 | 2010-03-16 | Tabula, Inc. | User registers implemented with routing circuits in a configurable IC |
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 |
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) |
-
2018
- 2018-08-27 US US16/113,490 patent/US10642630B1/en active Active
-
2019
- 2019-08-20 KR KR1020217008145A patent/KR102521275B1/ko active IP Right Grant
- 2019-08-20 CN CN201980070251.8A patent/CN112997145A/zh active Pending
- 2019-08-20 JP JP2021537028A patent/JP7411663B2/ja active Active
- 2019-08-20 SG SG11202101816YA patent/SG11202101816YA/en unknown
- 2019-08-20 US US17/272,277 patent/US11675604B2/en active Active
- 2019-08-20 GB GB2117992.4A patent/GB2599051B/en active Active
- 2019-08-20 AU AU2019327360A patent/AU2019327360B2/en active Active
- 2019-08-20 CA CA3114313A patent/CA3114313C/en active Active
- 2019-08-20 GB GB2103251.1A patent/GB2590859B/en active Active
- 2019-08-20 DE DE112019004301.3T patent/DE112019004301T5/de active Pending
- 2019-08-20 EP EP19854260.7A patent/EP3844662A4/en active Pending
- 2019-08-20 KR KR1020237011909A patent/KR20230052994A/ko active Application Filing
- 2019-08-20 WO PCT/US2019/047251 patent/WO2020046645A1/en active Application Filing
- 2019-08-20 CH CH00210/21A patent/CH716706B1/de not_active IP Right Cessation
-
2023
- 2023-12-25 JP JP2023218099A patent/JP2024038092A/ja active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100057426A1 (en) * | 2004-04-15 | 2010-03-04 | Mentor Graphics Corporation | Logic Design Modeling and Interconnection |
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 |
US20130162290A1 (en) * | 2011-12-21 | 2013-06-27 | Balaji Margabandu | Partial reconfiguration circuitry |
US9824173B1 (en) * | 2015-09-11 | 2017-11-21 | Xilinx, Inc. | Software development-based compilation flow for hardware implementation |
Also Published As
Publication number | Publication date |
---|---|
DE112019004301T5 (de) | 2021-06-17 |
KR102521275B1 (ko) | 2023-04-12 |
US11675604B2 (en) | 2023-06-13 |
SG11202101816YA (en) | 2021-03-30 |
CA3114313A1 (en) | 2020-03-05 |
US10642630B1 (en) | 2020-05-05 |
GB2590859A (en) | 2021-07-07 |
CH716706B1 (de) | 2023-02-15 |
GB202103251D0 (en) | 2021-04-21 |
AU2019327360A1 (en) | 2021-03-18 |
JP7411663B2 (ja) | 2024-01-11 |
GB202117992D0 (en) | 2022-01-26 |
US20210255879A1 (en) | 2021-08-19 |
WO2020046645A1 (en) | 2020-03-05 |
GB2590859B (en) | 2022-02-09 |
KR20230052994A (ko) | 2023-04-20 |
CA3114313C (en) | 2024-02-27 |
GB2599051B (en) | 2022-10-26 |
GB2590859A8 (en) | 2021-07-21 |
EP3844662A1 (en) | 2021-07-07 |
JP2024038092A (ja) | 2024-03-19 |
AU2019327360B2 (en) | 2023-07-20 |
EP3844662A4 (en) | 2021-11-03 |
GB2599051A (en) | 2022-03-23 |
CN112997145A (zh) | 2021-06-18 |
JP2021536650A (ja) | 2021-12-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102521275B1 (ko) | 부분 재구성을 사용하여 필드 프로그래밍가능 게이트 어레이를 프로그래밍하는 개선된 프로세스 | |
US11188310B2 (en) | Automatically generating an interface description in an interface description language | |
US11146456B2 (en) | Formal model checking based approaches to optimized realizations of network functions in multi-cloud environments | |
US20190303212A1 (en) | Method for managing application configuration state with cloud based application management techniques | |
Im et al. | IoT mashup as a service: cloud-based mashup service for the Internet of things | |
US20200110625A1 (en) | Placement of container workloads triggered by network traffic for efficient computing at network edge devices | |
US10116500B1 (en) | Exchanging information among system middleware and models | |
JP2021526688A (ja) | 分散型異種コンピューティングおよび制御システムを設計する方法およびシステム | |
US10990595B2 (en) | Fast distributed graph query engine | |
CN112055953B (zh) | 在云环境中管理多播服务链 | |
US11526464B2 (en) | Scaling HDFS for hive | |
Carrillo-Tripp et al. | HTMoL: full-stack solution for remote access, visualization, and analysis of molecular dynamics trajectory data | |
US11379525B1 (en) | Continuous builds of derived datasets in response to other dataset updates | |
US12019617B2 (en) | Data quality enforcement as a service invoked using descriptive language | |
WO2024049518A1 (en) | Automated application deployment | |
US10915343B2 (en) | Server computer execution of client executable code | |
Watson et al. | Scalable control and monitoring of supercomputer applications using an integrated tool framework | |
US12061609B2 (en) | Data pipeline definition using descriptive language |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |