KR20220045022A - 프로그래밍가능 집적 회로를 사용하는 동적으로 재구성가능한 네트워킹 - Google Patents

프로그래밍가능 집적 회로를 사용하는 동적으로 재구성가능한 네트워킹 Download PDF

Info

Publication number
KR20220045022A
KR20220045022A KR1020227008078A KR20227008078A KR20220045022A KR 20220045022 A KR20220045022 A KR 20220045022A KR 1020227008078 A KR1020227008078 A KR 1020227008078A KR 20227008078 A KR20227008078 A KR 20227008078A KR 20220045022 A KR20220045022 A KR 20220045022A
Authority
KR
South Korea
Prior art keywords
circuitry
programmable
platform
data
network interface
Prior art date
Application number
KR1020227008078A
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 KR20220045022A publication Critical patent/KR20220045022A/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/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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/38Universal adapter
    • G06F2213/3808Network interface controller

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Stored Programmes (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

집적 회로(IC)는 프로그래밍가능 회로부의 정적 영역에서 적어도 부분적으로 구현되는 플랫폼을 포함할 수 있고, 플랫폼은 호스트 인터페이스 및 네트워크 인터페이스에 커플링된 네트워크 인터페이스 카드 제어기(NIC), 및 플랫폼과 통신하는 사용자 지정 회로부를 구현하도록 구성된 프로그래밍가능 회로부의 동적 영역을 포함하며, 사용자 지정 회로부는 하나 이상의 패킷 프로세싱 기능을 구현한다. NIC는 동적 영역에 연결된 복수의 통신 인터페이스들을 포함한다. 플랫폼은 호스트 인터페이스를 사용하여 호스트 데이터 프로세싱 시스템과의 제1 통신 링크를 그리고 네트워크 인터페이스를 사용하여 네트워크와의 제2 통신 링크를 구축하고 유지할 수 있다. 프로그래밍가능 회로부의 동적 영역의 적어도 일부가 상이한 사용자 지정 회로부를 내부에서 구현하도록 동적으로 재구성되는 동안에 플랫폼은 네트워크와 호스트 데이터 프로세싱 시스템 사이에서 데이터를 계속 전송할 수 있다.

Description

프로그래밍가능 집적 회로를 사용하는 동적으로 재구성가능한 네트워킹
본 개시는 집적 회로(integrated circuit; IC)에 관한 것이며, 보다 구체적으로는, 프로그래밍가능 IC를 사용하여 동적으로 재구성가능한 네트워킹에 관한 것이다.
프로그래밍가능 집적 회로(IC)는 프로그래밍가능 로직을 포함하는 소자의 유형을 가리킨다. 프로그래밍가능 IC의 예시는 필드 프로그래밍가능 게이트 어레이(field programmable gate array; FPGA)이다. FPGA는 프로그래밍가능 회로 블록들을 포함하는 것이 특징이다. 프로그래밍가능 회로 블록들의 예시들은, 비제한적인 예시로서, 입력/출력 블록(input/output block; IOB), 구성가능 로직 블록(configurable logic block; CLB), 전용 랜덤 액세스 메모리 블록(dedicated random access memory block; BRAM), 디지털 신호 프로세싱 블록(digital signal processing block; DSP), 프로세서, 클록 관리기, 지연 로크 루프(delay lock loop; DLL)를 포함한다.
각각의 프로그래밍가능 타일은 일반적으로 프로그래밍가능 상호연결 회로부와 프로그래밍가능 로직 회로부 둘 다를 포함한다. 프로그래밍가능 상호연결 회로부는 일반적으로 프로그래밍가능 상호연결점(programmable interconnect point; PIP)에 의해 상호연결된 다양한 길이의 방대한 수의 상호연결 라인들을 포함한다. 프로그래밍가능 로직 회로부는 예컨대, 함수 생성기, 레지스터, 연산 로직 등을 포함할 수 있는 프로그래밍가능 엘리먼트들을 사용하여 사용자 설계의 로직을 구현한다.
프로그래밍가능 상호연결부와 프로그래밍가능 로직 회로부들은 일반적으로 구성 데이터의 스트림을 내부 구성 메모리 셀들에 로딩시킴으로써 프로그래밍되며, 이 내부 구성 메모리 셀들은 프로그래밍가능 엘리먼트들이 구성되어 있는 방법을 정의한다. 구성 데이터는 메모리로부터(예컨대, 외부 PROM으로부터) 판독될 수 있거나, 또는 외부 디바이스에 의해 FPGA내로 기입될 수 있다. 그런 후 개별적인 메모리 셀들의 총체적 상태들은 FPGA의 기능을 결정한다.
현대의 프로그래밍가능 IC는 하나 이상의 다른 서브시스템과 조합하여 프로그래밍가능 로직을 포함하도록 진화해 왔다. 예를 들어, 일부 프로그래밍가능 IC는 프로그래밍가능 로직과 하드와이어드 프로세서 둘 다를 포함하는 시스템 온 칩(System-on-Chip) 또는 "SoC"로 진화해 왔다. 다른 다양한 프로그래밍가능 IC들은 추가적인 및/또는 상이한 서브시스템들을 포함한다. "프로그래밍가능 IC"라는 어구는 프로그래밍가능 로직의 적어도 일부를 포함하고 부분적으로 또는 완전히 프로그래밍가능한 디바이스들을 가리킨다.
일반적으로, 프로그래밍가능 IC의 기능은 해당 목적을 위해 디바이스에 제공되는 데이터 비트들에 의해 제어된다. 데이터 비트들은 휘발성 메모리(예컨대, FPGA 및 복합 프로그래밍가능 로직 디바이스(Complex Programmable Logic Device; CPLD)와 같은 일부 다른 프로그래밍가능 IC에서와 같은, 정적 메모리 셀들) 내에, 비휘발성 메모리(예컨대, 일부 CPLD에서와 같은, FLASH 메모리) 내에, 또는 임의의 다른 유형의 메모리 셀 내에 저장될 수 있다.
집적 회로는 프로그래밍가능 회로부의 정적 영역에서 적어도 부분적으로 구현된 플랫폼을 포함할 수 있다. 플랫폼은 호스트 인터페이스 및 네트워크 인터페이스에 커플링된 네트워크 인터페이스 카드 제어기를 포함할 수 있다. IC는 플랫폼과 통신하는 사용자 지정 회로부를 구현하도록 구성된 프로그래밍가능 회로부의 동적 영역을 포함할 수 있다. 사용자 지정 회로부는 하나 이상의 패킷 프로세싱 기능을 구현할 수 있다. 네트워크 인터페이스 카드 제어기는 동적 영역에 연결된 복수의 통신 인터페이스들을 포함할 수 있다. 플랫폼은 호스트 인터페이스를 사용하여 호스트 데이터 프로세싱 시스템과의 제1 통신 링크를 그리고 네트워크 인터페이스를 사용하여 네트워크와의 제2 통신 링크를 구축하고 유지하도록 구성될 수 있다. 프로그래밍가능 회로부의 동적 영역의 적어도 일부가 상이한 사용자 지정 회로부를 내부에서 구현하도록 동적으로 재구성되는 동안에 플랫폼은 네트워크와 호스트 데이터 프로세싱 시스템 사이에서 데이터를 계속 전송하도록 구성될 수 있다.
이 요약 섹션은 특정 개념들을 소개하기 위해 제공된 것이고 청구된 발명내용의 어떠한 주요 또는 필수 특징들을 식별하는 것은 아니다. 본 발명 구성들의 다른 특징들은 첨부 도면들 및 아래의 상세한 설명으로부터 명백해질 것이다.
본 발명 구성들은 첨부 도면들에서 예시로서 도해되어 있다. 그러나, 도면들은 본 발명 구성들을 도시된 특정 구현들로만 한정시키는 것으로 해석되어서는 안 된다. 다양한 양태들 및 장점들이 도면들을 참조하면서 아래의 상세한 설명을 검토함으로써 명백해질 것이다.
도 1은 호스트 데이터 프로세싱 시스템 및 하드웨어 가속 카드의 예시를 도시한다.
도 2a는 프로그래밍가능 집적 회로(IC)에서 구현되는 예시적인 플랫폼을 도시한다.
도 2b는 프로그래밍가능 IC에서 구현되는 다른 예시적인 플랫폼을 도시한다.
도 3은 프로그래밍가능 IC에서 구현되는 다른 예시적인 플랫폼을 도시한다.
도 4는 프로그래밍가능 IC에서 구현되는 다른 예시적인 플랫폼을 도시한다.
도 5는 프로그래밍가능 IC에서 구현되는 다른 예시적인 플랫폼을 도시한다.
도 6은 프로그래밍가능 IC에서 구현되는 다른 예시적인 플랫폼을 도시한다.
도 7은 프로그래밍가능 IC에서 구현되는 다른 예시적인 플랫폼을 도시한다.
도 8은 프로그래밍가능 IC에서 구현되는 다른 예시적인 플랫폼을 도시한다.
도 9는 플랫폼 내의 네트워크 인터페이스 카드(Network Interface Card; NIC) 제어기의 예시적인 구현을 도시한다.
도 10은 프로그래밍가능 IC에서 구현되는 다른 예시적인 플랫폼을 도시한다.
도 11은 프로그래밍가능 IC에서 구현되는 다른 예시적인 플랫폼을 도시한다.
도 12는 프로그래밍가능 IC에서 구현되는 다른 예시적인 플랫폼을 도시한다.
도 13은 본 명세서에서 설명되는 스마트 NIC 기능을 구현하는 프로그래밍가능 IC를 동작시키는 예시적인 방법을 도시한다.
도 14는 프로그래밍가능 IC 상에서 플랫폼을 구현하는 예시적인 방법을 도시한다.
도 15는 IC에 대한 예시적인 아키텍처를 도시한다.
본 개시는 신규한 특징들을 정의하는 청구범위로 종결되지만, 본 개시 내에서 설명되는 다양한 특징들이 도면들과 함께 상세한 설명의 고려로부터 더 잘 이해될 것이라고 믿어진다. 본 명세서에서 설명되는 프로세스(들), 머신(들), 제조(들), 및 이들의 임의의 변형들은 예시를 위해 제공된 것이다. 본 개시 내에서 설명되는 특정한 구조적 및 기능적 세부사항들은 한정적인 의미로서 해석되어서는 안되며, 청구범위들에 대한 기초로서 그리고 본 발명분야의 당업자로 하여금 사실상 어떠한 적절하게 상세한 구조로 설명되는 특징들을 다양하게 활용하도록 교시하기 위한 대표적인 기초로서 해석되어야 한다. 또한, 본 개시 내에서 사용되는 용어들 및 어구들은 한정적인 의미로서 의도된 것은 아니며, 단지 설명되는 특징들의 이해가능한 설명을 제공하기 위한 것이다.
본 개시는 집적 회로(IC)에 관한 것이며, 보다 구체적으로는, 프로그래밍가능 IC를 사용하여 동적으로 재구성가능한 네트워킹에 관한 것이다. 본 명세서에서 설명되는 본 발명 구성들에 따르면, 프로그래밍가능 IC는 동적으로 재구성가능한 네트워크 어태치드(attached) 가속 기능들을 구현하고 전개하는데 사용된다. 설명되는 기능은 단일 디바이스 내에서 제공될 수 있다. 예를 들어, 본 명세서에서 설명되는 바와 같이 프로그래밍가능 IC에서 구현되는 플랫폼은 단일 프로그래밍가능 IC 내에서 컴퓨팅, 저장, 및 네트워킹 가속 기능들을 제공할 수 있다. 플랫폼은 하나 이상의 네트워크 어태치드 가속 기능을 수행하기 위한 사용자 지정 회로들의 구현 및 전개를 지원한다. 이러한 사용자 지정 회로들은 프로그래밍가능 IC의 플랫폼에 의해 프로세싱되는 네트워크 트래픽에 영향을 주지 않고서 플랫폼으로부터 즉석에서 동적으로 삽입 및/또는 제거될 수 있다. 이와 같이, 플랫폼은 프로그래밍가능 IC의 동작 동안 시간의 경과에 따른 사용자 지정 회로들의 포함, 제거, 및/또는 스와핑을 통해 기능적으로 확장될 수 있다.
네트워크 어태치드 가속은 통신 버스를 통해 서버(예를 들어, 호스트 시스템)와 같은 데이터 프로세싱 시스템 내로 플러깅되는 네트워크 인터페이스 카드(NIC) 상에서 일반적으로 수행되는 프로세싱을 가리킨다. NIC는 응용 특정 집적 회로(Application-Specific Integrated Circuit; ASIC)에 연결된 필드 프로그래밍가능 게이트 어레이(Field Programmable Gate Array; FPGA)를 포함할 수 있다. ASIC은 일반적으로 네트워크 포트들을 통해 데이터를 수신하고 기본 패킷 프로세싱 기능들을 수행하는 반면, FPGA는 데이터에 대해 "스마트 NIC" 기능이라고 하는 다른 강화된 네트워크 가속 기능들을 수행하는 데 사용된다. 그런 후 ASIC은 프로세싱된 데이터를 호스트 시스템에 전달할 수 있다.
본 개시 내에 설명되는 본 발명 구성들에 따르면, 단일 디바이스, 예를 들어, FPGA와 같은 단일 프로그래밍가능 IC는 ASIC 기능 및 강화된 또는 스마트 NIC 기능 둘 다를 제공하기 위해 사용될 수 있다. 프로그래밍가능 IC에서 구현되는 바와 같이, 본 명세서에서 설명되는 플랫폼은 설명되는 데이터 프로세싱 및 기본 NIC 기능을 계속 수행하기 위한 프로그래밍가능 IC의 능력을 방해하지 않으면서 시간의 경과에 따라 상이한 맞춤형 또는 사용자 지정 회로들을 구현하는 능력을 지원한다. 따라서, 프로그래밍가능 IC의 일부가 컴퓨팅, 저장, 및/또는 네트워킹 가속 기능들과 관련된 패킷 프로세싱 동작들을 수행하도록 동적으로 재구성(예컨대, 부분적으로 재구성)될 수 있는 동안에, 프로그래밍가능 IC 상의 다른 영역들은 데이터 또는 네트워크에 대한 통신 링크를 손실하지 않기 위해 중단되지 않고서 계속 동작할 수 있다. 프로그래밍가능 IC는 또한 호스트 시스템에 대한 통신 링크를 유지할 수 있다. 이와 같이, 하나 이상의 상이한 사용자 지정 회로가 네트워크 데이터를 프로세싱하기 위해 런타임 시 동적으로 삽입되고, 제거되고, 및/또는 교체되는 동안 프로그래밍가능 IC는 데이터 손실 없이 네트워크와 호스트 시스템 간에 데이터를 계속 전달할 수 있다.
본 발명 구성들은 NIC 제어기에 의해 제공되는 기본 NIC 기능들에 추가적인 기능이 추가될 수 있는 플랫폼을 제공한다. 추가적인 기능은 네트워킹, 컴퓨팅, 및/또는 저장 가속과 관련될 수 있다. 개발자들은 플랫폼에 의해 제공되는 전체 NIC 인프라스트럭처를 재생성할 필요 없이 특정 기능들을 생성할 수 있다. 플랫폼의 사용은 다양한 이점들을 제공한다. 이러한 이점들은 개발되고 있는 각기 상이한 사용자 지정 회로에 대해 플랫폼을 재구현할 필요가 없기 때문에 프로그래밍가능 IC에서의 구현을 위해 하드웨어를 개발할 때 컴파일 시간을 단축시키는 것을 포함할 수 있다. 이러한 이점들은 또한 상이한 사용자 지정 회로부가 추가되고, 제거되고, 및/또는 수정될 때마다 플랫폼을 프로그래밍가능 IC에서 재구현시킬 필요가 없기 때문에 런타임 시 사용자 지정 회로부를 구현하기 위해 구성 데이터를 프로그래밍가능 IC에 다운로드하는 시간을 단축시키는 것을 포함할 수 있다.
본 발명 구성들의 추가적인 양태들 및/또는 이점들이 도면들을 참조하여 아래에서 더 상세히 설명된다. 도해의 단순성과 명료성을 위해, 도면들에서 도시되는 엘리먼트들은 반드시 축척대로 그려진 것은 아니다. 예를 들어, 일부 엘리먼트들의 치수는 명료성을 위해 다른 엘리먼트들에 비해 과장될 수 있다. 또한, 적절하다고 간주되는 경우, 대응하는 특징, 유사한 특징, 또는 동일한 특징을 나타내기 위해 도면들 간에 참조 번호들이 반복된다.
도 1은 호스트 데이터 프로세싱 시스템(호스트 시스템)(100) 및 하드웨어 가속 카드(카드)(104)의 예시를 도시한다. 호스트 시스템(100)의 컴포넌트들은, 비제한적인 예시로서, 하나 이상의 프로세서(106)(예를 들어, 중앙 프로세싱 장치), 메모리(108), 및 메모리(108)를 포함하는 다양한 시스템 컴포넌트들을 프로세서(들)(106)에 커플링시키는 버스(110)를 포함할 수 있다. 프로세서(들)(106)는 프로그램 코드를 실행할 수 있는 다양한 프로세서들 중 임의의 것을 포함할 수 있다. 예시적인 프로세서 유형은, 비제한적인 예시로서, x86 유형의 아키텍처(IA-32, IA-64 등), 파워 아키텍처를 갖는 프로세서들, ARM 프로세서 등을 포함한다.
버스(110)는 임의의 다양한 이용가능한 버스 아키텍처들을 사용하는, 메모리 버스 또는 메모리 제어기, 주변 버스, 가속화 그래픽 포트, 및 프로세서 또는 로컬 버스를 비롯한 임의의 여러가지 유형들의 하나 이상의 통신 버스 구조를 나타낸다. 예를 들어, 비제한적인 예시로서, 이러한 아키텍처들은 ISA(Industry Standard Architecture) 버스, MCA(Micro Channel Architecture) 버스, EISA(Enhanced ISA) 버스, VESA(Video Electronics Standards Association) 로컬 버스, 및 PCI(Peripheral Component Interconnect) 버스, 및 PCI 익스프레스(PCIe) 버스를 포함한다.
호스트 시스템(100)은 일반적으로 다양한 컴퓨터 판독가능 매체를 포함한다. 그러한 매체는 호스트 시스템(100)에 의해 액세스가능한 임의의 이용가능한 매체일 수 있고, 휘발성 매체, 비휘발성 매체, 착탈식 매체, 및/또는 비착탈식 매체의 임의의 조합을 포함할 수 있다.
메모리(108)는 랜덤 액세스 메모리(RAM)(112) 및/또는 캐시 메모리(114)와 같은, 휘발성 메모리 형태의 컴퓨터 판독가능 매체를 포함할 수 있다. 호스트 시스템(100)은 또한 다른 착탈식/비착탈식, 휘발성/비휘발성 컴퓨터 시스템 저장 매체를 포함할 수 있다. 예로서, 저장 시스템(116)은 비착탈식, 비휘발성 자기 매체(도시되지 않음, 일반적으로 "하드 드라이브"라고 칭해짐)로부터 판독하고 이에 기입하기 위해 제공될 수 있다. 도시되지는 않았지만, 착탈식 비휘발성 자기 디스크(예컨대, "플로피 디스크")로부터 판독하고 이에 기입하기 위한 자기 디스크 드라이브, 및 CD-ROM, DVD-ROM 또는 기타 광학 매체와 같은 착탈식 비휘발성 광학 디스크로부터 판독하고 이에 기입하기 위한 광학 디스크 드라이브가 제공될 수 있다. 그러한 경우들에서, 각각은 하나 이상의 데이터 매체 인터페이스에 의해 버스(110)에 연결될 수 있다. 아래에서 추가로 도시되고 설명되는 바와 같이, 메모리(108)는 본 개시 내에서 설명되는 기능들 및/또는 동작들을 수행하도록 구성된 프로그램 모듈들(예를 들어, 프로그램 코드)의 세트(예를 들어, 적어도 하나)를 갖는 적어도 하나의 컴퓨터 프로그램 제품을 포함할 수 있다.
예를 들어, 비제한적인 예시로서, 운영체제, 하나 이상의 애플리케이션 프로그램, 다른 프로그램 모듈들, 및/또는 프로그램 데이터를 포함할 수 있는 프로그램 모듈들(120)의 세트(적어도 하나)를 갖는 프로그램/유틸리티(118)가 메모리(108)에 저장된다. 프로그램 모듈들(120)은 일반적으로 적어도 호스트 시스템(100)에 의해 수행되는 동작들과 관련하여 본 명세서에서 설명되는 기능들 및/또는 방법론들을 수행한다. 예를 들어, 프로그램 모듈들(120)은 하드웨어 가속 카드(104) 및/또는 프로그래밍가능 IC(132)와 통신하기 위한 하나 이상의 애플리케이션 및 드라이버 또는 데몬(daemon)을 포함할 수 있다.
프로그램/유틸리티(118)는 프로세서(들)(106)에 의해 실행가능하다. 프로그램/유틸리티(118) 및 프로세서(들)(106)에 의해 사용되고, 생성되고, 및/또는 동작되는 임의의 데이터 아이템들은 프로세서(들)(106)에 의해 활용될 때 기능성을 부여하는 기능적 데이터 구조들이다. 본 개시 내에서 정의된 바와 같이, "데이터 구조"는 물리적 메모리 내 데이터의 데이터 모델의 조직화의 물리적 구현이다. 이와 같이, 데이터 구조는 메모리 내에서 특정 전기적 또는 자기적 구조적 엘리먼트들로 형성된다. 데이터 구조는 프로세서를 사용하여 실행되는 애플리케이션 프로그램에 의해 사용되는 메모리에 저장된 데이터에 대해 물리적 조직을 부과한다.
호스트 시스템(100)은 버스(110)에 통신가능하게 링크된 하나 이상의 입력/출력(I/O) 인터페이스(128)를 포함할 수 있다. I/O 인터페이스(들)(128)은 호스트 시스템(100)으로 하여금, 외부 디바이스들과 통신할 수 있게 하고, 사용자(들)가 호스트 시스템(100)과 상호작용하도록 하는 외부 디바이스들에 커플링될 수 있게 하고, 호스트 시스템(100)이 다른 컴퓨팅 디바이스들 등과 통신하도록 하는 외부 디바이스들에 커플링되도록 해준다. 예를 들어, 호스트 시스템(100)은 I/O 인터페이스(들)(128)를 통해 하드웨어 가속 카드(104)에 통신가능하게 링크될 수 있다. 호스트 시스템(100)은 I/O 인터페이스(들)(128)를 통해 키보드 및/또는 디스플레이(미도시됨)와 같은 다른 외부 디바이스들에 커플링될 수 있다. I/O 인터페이스(128)의 예시들은, 비제한적인 예시로서, 네트워크 카드, 모뎀, 네트워크 어댑터, 하드웨어 제어기 등을 포함할 수 있다.
예시적인 구현에서, 호스트 시스템(100)이 하드웨어 가속 카드(104)와 통신하도록 해주는 I/O 인터페이스(128)는 PCIe 어댑터이다. 하드웨어 가속 카드(104)는 호스트 시스템(100)에 커플링되는 회로 기판으로서 구현될 수 있다. 하드웨어 가속 카드(104)는, 예를 들어, 호스트 시스템(100)의 카드 슬롯, 예컨대, 이용가능한 버스 및/또는 PCIe 슬롯에 삽입될 수 있다.
하드웨어 가속 카드(104)는 프로그래밍가능 IC(132)를 포함한다. 하드웨어 가속 카드(104)는 또한 프로그래밍가능 IC(132)에 커플링된 휘발성 메모리(134) 및 프로그래밍가능 IC(132)에 또한 커플링된 비휘발성 메모리(136)를 포함한다. 휘발성 메모리(134)는 RAM으로서 구현될 수 있고 프로그래밍가능 IC(132)의 "로컬 메모리"로서 간주되는 반면, 호스트 시스템(100) 내에 있는 메모리(108)는 프로그래밍가능 IC(132)에 대해 로컬로 있는 것으로서 간주되지 않는다. 예를 들어, 메모리(108)는 호스트 시스템(100)에 대해 로컬로 있다. 일부 구현들에서, 휘발성 메모리(134)는 수 기가바이트의 RAM, 예를 들어, 64GB의 RAM을 포함할 수 있다. 비휘발성 메모리(136)는 플래시 메모리로서 구현될 수 있다. 비휘발성 메모리(136)는 프로그래밍가능 IC(132)에 대해 로컬로 있는 것으로서 간주된다.
도 1의 예시에서, 프로그래밍가능 IC(132)는 네트워크(138)에 연결된다. 일 예시에서, 네트워크(138)는 이더넷 유형의 네트워크이다. 네트워크(138)는 임의의 다양한 상이한 속도로 동작할 수 있다. 예를 들어, 네트워크(138)는 10G, 25G, 50G, 100G, 200G, 400G, 또는 다른 속도 네트워크일 수 있다. 특정 구현들에서, 네트워크(138)는 5G 네트워크이거나, 이를 포함하거나, 또는 5G 네트워크에 커플링될 수 있다. 프로그래밍가능 IC(132)는 프로그래밍가능 IC(132)를 네트워크(138)에 연결하기 위해, 예컨대 통신가능하게 링크시키기 위해 사용되는 이더넷 인터페이스(미도시됨)를 포함한다. 예를 들어, 프로그래밍가능 IC(132)는 네트워크(138)를 통해 이더넷 스위치 또는 하나 이상의 다른 네트워크 연결 디바이스에 연결될 수 있다. 예시를 위해, "네트워크"라는 용어는 본 명세서에서 네트워크(138), 예를 들어 이더넷 네트워크를 지칭한다.
도 1은 본 명세서에서 설명되는 예시들의 사용 또는 기능의 범위에 대한 임의의 한정을 제안하도록 의도된 것은 아니다. 호스트 시스템(100)은 하드웨어 가속 카드(104) 및/또는 프로그래밍가능 IC(132)와 관련하여 본 개시 내에서 설명되는 다양한 동작들을 수행할 수 있는 컴퓨터 하드웨어(예를 들어, 시스템)의 예시이다.
호스트 시스템(100)은 하드웨어 가속 카드와 함께 사용될 수 있는 컴퓨터의 하나의 예시적인 구현에 불과하다. 호스트 시스템(100)은 컴퓨팅 디바이스, 예를 들어 컴퓨터 또는 서버의 형태로 도시된다. 호스트 시스템(100)은 독립형 디바이스로서, 베어 메탈 서버로서, 클러스터에서, 또는 분산형 클라우드 컴퓨팅 환경에서 실시될 수 있다. 분산형 클라우드 컴퓨팅 환경에서, 작업들은 통신 네트워크를 통해 링크된 원격 프로세싱 디바이스들에 의해 수행된다. 분산형 클라우드 컴퓨팅 환경에서, 프로그램 모듈들은 메모리 저장 디바이스들을 비롯한 로컬 및 원격 컴퓨터 시스템 저장 매체 둘 다에 위치할 수 있다.
여기에서 사용되는 용어 "클라우드 컴퓨팅"은 네트워크, 서버, 저장장치, 애플리케이션, IC(예컨대, 프로그래밍가능 IC) 및/또는 서비스와 같은 구성가능한 컴퓨팅 자원들의 공유 풀에 대한 편리한 주문형 네트워크 액세스를 용이하게 해주는 컴퓨팅 모델을 가리킨다. 이러한 컴퓨팅 자원들은 최소한의 관리 노력 또는 서비스 제공자 상호작용으로 신속하게 프로비저닝되고 릴리즈될 수 있다. 클라우드 컴퓨팅은 이용가용성을 촉진시키고, 주문형 셀프 서비스, 광범위한 네트워크 액세스, 자원 풀링, 신속한 탄력성, 및 측정된 서비스애 의해 특징지어질 수 있다.
호스트 시스템(100) 또는 다른 적절한 데이터 프로세싱 시스템을 사용하는 일부 컴퓨팅 환경들, 예컨대, 클라우드 컴퓨팅 환경들 및/또는 에지 컴퓨팅 환경들은 일반적으로, 사용자 기능들이 사용자 지정 또는 맞춤형 회로 설계로서 하드웨어 가속화되고 호스트 컴퓨터 시스템들의 제어 하에 동작하는 프로그래밍가능 IC 내에서 구현되는 FaaS(FPGA-as-a-Service) 모델을 지원한다. 클라우드 컴퓨팅 모델들의 다른 예시들은 미국 국립 표준 기술원(National Institute of Standards and Technology; NIST)에 의해 그리고, 보다 구체적으로는, NIST의 정보 기술 연구소에 의해 설명된다.
호스트 시스템(100)은 많은 다른 범용 또는 특수 목적 컴퓨팅 시스템 환경들 또는 구성들로 동작한다. 호스트 시스템(100)과 함께 사용하기에 적절할 수 있는 컴퓨팅 시스템들, 환경들, 및/또는 구성들의 예시들은, 비제한적인 예로서, 개인 컴퓨터 시스템, 서버 컴퓨터 시스템, 씬 클라이언트(thin client), 씩 클라이언트(thick client), 핸드헬드 또는 랩탑 디바이스, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋탑 박스, 프로그래밍가능 가전 제품, 네트워크 PC, 미니컴퓨터 시스템, 메인프레임 컴퓨터 시스템, 상기 시스템들 또는 디바이스들 중 임의의 것을 포함하는 분산형 클라우드 컴퓨팅 환경들 등을 포함한다.
도 2a는 도 1의 프로그래밍가능 IC(132)에서 구현되는 예시적인 플랫폼(218)을 도시한다. 프로그래밍가능 IC(132)는 프로그래밍가능 회로부의 정적 영역(202) 및 프로그래밍가능 회로부의 동적 영역(204)을 포함한다. 정적 영역(202)과 동적 영역(204) 둘 다는 프로그래밍가능 회로부를 사용하여 구현되지만, 하나 또는 둘 다의 영역들은 나머지 도면들과 관련하여 본 명세서에서 더 상세히 설명되는 하나 이상의 하드와이어드 회로 블록을 포함할 수 있음을 이해해야 한다.
정적 영역(202)은 일단 회로 설계대로 구성되면, 시간의 경과에 따라 변경되지 않는 프로그래밍가능 IC(132)의 프로그래밍가능 회로부의 영역을 나타낸다. 정적 영역(202)은 재구성될 수 있지만, 이러한 동작은 프로그래밍가능 IC(132)를 오프라인(예를 들어, 호스트 시스템(100) 및/또는 네트워크(138)로부터 오프라인)으로 있게 할 것이다. 예시의 목적으로, 정적 영역(202)은 음영으로 도시되고, 네트워킹 동작들을 제공하는 플랫폼(218)을 구현하는 데 사용된다. 플랫폼(218)은 예를 들어, 구성 비트스트림으로서 프로그래밍가능 IC(132)에 로딩되는 회로 설계에 의해 지정된다. 도 2a의 예시에서, 플랫폼(218)은 음영 영역에 포함된 다양한 회로 블록들을 포함한다. 플랫폼(218)은, 일단 프로그래밍가능 IC(132)에서 구현되면, 동작의 지속기간 동안 기능적 네트워킹, 호스트 시스템 인터페이스들, 및 선택적으로 메모리 인터페이스들을 제공한다. 플랫폼(218)은 이더넷 인터페이스로부터 호스트 시스템(100)(예를 들어, 기본 네트워크 인터페이스 제어기(NIC) 기능을 갖는 통신 버스를 통해 프로세서(106))에 네트워크 데이터를 전달할 수 있다.
동적 영역(204)은 상이한 사용자 지정(예를 들어, 맞춤형) 회로들을 내부에서 구현하기 위해 시간의 경과에 따라 동적으로 재구성될 수 있는 프로그래밍가능 IC(132)의 프로그래밍가능 회로부의 영역을 나타낸다. 동적 영역(204)에서 구현되는 사용자 지정 회로들은 정적 영역(202) 내의 플랫폼(218)에서 구현되는 회로 블록(들)에 연결되도록 설계된다. 일반적으로, 동적 영역(204)에서 구현되는 사용자 지정 회로들은 플랫폼(218)의 기능성 및/또는 운용성을 확장하는 데 사용된다.
정적 영역(202) 내에서, 플랫폼(218)을 생성하기 위해 회로 설계가 로딩되었다. 예를 들어, 플랫폼(218)을 지정하는 전체적 또는 부분적 구성 비트스트림이 프로그래밍가능 IC(132)에 로딩된다. 도 2a의 예시에서, 플랫폼(218)은 이더넷 인터페이스(206), NIC 제어기(208), 직접 메모리 액세스(direct memory access; DMA) 회로(210), 및 주변 컴포넌트 상호연결 익스프레스(Peripheral Component Interconnect Express; PCIe) 제어기(212)를 포함한다. 따라서, 이더넷 인터페이스(206), NIC 제어기(208), DMA 회로(210), 및 PCIe 제어기(212)는 정적 영역(202)에서 구현된다. 이더넷 인터페이스(206)는 NIC 제어기(208)에 연결된다. NIC 제어기(208)는 DMA 회로(210)에 연결된다. DMA 회로(210)는 PCIe 제어기(212)에 연결된다. 이더넷 인터페이스(206)는 네트워크(138)(예를 들어, 그 내부의 노드 또는 스위치)에 대한 통신 링크를 구축할 수 있다. PCIe 제어기(212)는 호스트 시스템(100)에 대한 통신 링크를 구축할 수 있다.
다른 예시들에서, 플랫폼(218)은 네트워크(138)에 연결되도록 다른 유형들의 인터페이스들을 사용할 수 있다. 또한, 플랫폼(218)은 호스트 시스템(100)에 연결되도록 다른 유형들의 인터페이스들을 사용할 수 있다. 본 개시 내에서 설명되는 특정 예시들은 예시를 목적으로 제공된 것이며 한정시키고자 한 것은 아니다. 다른 대안적인 유형들의 인터페이스들이 사용될 수 있다.
도 2a의 예시에서, 이더넷 인터페이스(206), NIC 제어기(208), DMA 회로(210), 및 PCIe 제어기(212) 각각은 프로그래밍가능 회로부를 사용하여 구현된다. 하나 이상의 다른 예시적인 구현에서, 이더넷 인터페이스(206), DMA 회로(210), 및/또는 PCIe 제어기(212) 중 하나 이상 또는 모두(예를 들어, 임의의 조합)는 하드와이어드 회로 블록들로서 구현된다.
NIC 제어기(208)는 동적 영역(204)에 연결되는 하나 이상의 통신 인터페이스(214)와 함께 구현된다. 특정 구현들에서, NIC 제어기(208)와 동적 영역(204) 사이의 통신 인터페이스(214) 및/또는 다른 통신 인터페이스들은 스트림 인터페이스들로서 구현될 수 있다. 스트림 인터페이스의 예시는 AMBA® 4 AXI4-스트림 프로토콜(예컨대, "AXI")을 준수하는 인터페이스이다. 다른 유형들의 스트림 인터페이스들이 NIC 제어기(208)를 동적 영역(204)에 연결하기 위해 사용될 수 있고 AXI는 비제한적인 예시로서 제공된 것일 뿐임을 이해해야 한다. 스트림 인터페이스의 다른 예시는 네트워크 온 칩일 수 있다.
일 양태에서, 통신 인터페이스(214)는 소프트웨어 제어가능하다. 예를 들어, 사용자 지정 회로부를 구현하는 데 사용되는 구성 비트스트림들은 연관된 메타데이터와 함께 저장될 수 있다. 메타데이터는 통신 인터페이스(214)의 상태, 예를 들어, 온 또는 오프인지 여부를 지정할 수 있다. 메타데이터는 그러한 인터페이스들이 복수인 경우 통신 인터페이스들(214) 중 어느 것이 인에이블되고 사용될 것인지를 지정할 수 있다. 이와 관련하여, 메타데이터는 플랫폼(218)과 동적 영역(204) 및/또는 사용자 지정 회로부(216) 사이의 연결성을 설명한다.
예시로서, 통신 인터페이스(214)는 제어 인터페이스로부터 제어 신호들(예를 들어, 선택 신호들)을 제공받을 수 있는 하나 이상의 멀티플렉서를 사용하여 구현될 수 있다. 선택 신호들은 메타데이터에 의해 지정될 수 있다. 사용자 지정 회로부(216)를 구현하기 위해 구성 비트스트림이 프로그래밍가능 IC(132)에 로딩되면, 호스트 시스템(100)은 구성 비트스트림에 대응하는 메타데이터를 획득하고 메타데이터를 프로그래밍가능 IC(132)에 기입할 수 있다. 메타데이터는 사용자 지정 회로부(216)와 통신하기 위해 필요에 따라 통신 인터페이스들(214)을 활성화 및/또는 비활성화하도록 통신 인터페이스들(214)의 멀티플렉서들에 적절한 선택 신호들을 생성하는 제어 인터페이스에 제공될 수 있다.
통신 인터페이스(214)를 통해, 데이터는 플랫폼(218)으로부터 동적 영역(204)으로 이동할 수 있고, 동적 영역(204) 내의 사용자 지정 회로부(216)에 입력되고 이에 의해 프로세싱되고, 플랫폼(218)으로 복귀할 수 있다. NIC 제어기(208)는 설명된 바와 같이 소프트웨어 제어가능할 수 있는 복수의 통신 인터페이스들을 가질 수 있다. 예를 들어, 유입(ingress)의 관점에서, NIC 제어기(208)는 이더넷 인터페이스(206)를 통해 네트워크(138)로부터 데이터를 수신할 수 있다. NIC 제어기(208)는 통신 인터페이스(214)를 통해 사용자 지정 회로부(216)에 데이터를 제공하기 전에 데이터에 대해 동작하거나 또는 동작하지 않을 수 있다. 사용자 지정 회로부(216)는 수신된 데이터에 대해 동작하고 프로세싱된 데이터를, 통신 인터페이스(214)를 통해 NIC 제어기(208)에 역제공할 수 있다. 예를 들어, 사용자 지정 회로부(216)는 하나 이상의 패킷 프로세싱, 또는 스마트 NIC 기능들을 수행할 수 있다. NIC 제어기(208)는 데이터에 대한 추가적인 프로세싱을 수행하고 데이터를, DMA 회로(210) 및 PCIe 제어기(212)를 통해 호스트 시스템(100)에 제공할 수 있거나 또는 제공하지 않을 수 있다. 다른 예시에서, NIC 제어기(208)는 NIC 제어기(208) 및/또는 사용자 지정 회로부(216)에 의해 수행된 프로세싱 후 또는 임의의 그러한 프로세싱 없이 이더넷 인터페이스(206)로부터 수신된 데이터를 네트워크(138)에 대한 이더넷 인터페이스(206)에 역으로 라우팅하도록 구성될 수 있다.
송출(egress)의 관점에서, NIC 제어기(208)는 PCIe 제어기(212) 및 DMA 회로(210)를 통해 호스트 시스템(100)으로부터 데이터를 수신할 수 있다. NIC 제어기(208)는 통신 인터페이스(214)를 통해 사용자 지정 회로부(216)에 데이터를 제공하기 전에 데이터에 대해 동작하거나 또는 동작하지 않을 수 있다. 사용자 지정 회로부(216)는 수신된 데이터에 대해 동작하고 프로세싱된 데이터를, 통신 인터페이스(214)를 통해 NIC 제어기(208)에 역제공할 수 있다. NIC 제어기(208)는 이더넷 인터페이스(206)를 통해 네트워크(138)에 데이터를 제공하기 전에 데이터에 대한 추가적인 프로세싱을 수행하거나 수행하지 않을 수 있다. 다른 예시에서, NIC 제어기(208)는 NIC 제어기(208) 및/또는 사용자 지정 회로부(216)에 의해 수행된 프로세싱 후 또는 임의의 그러한 프로세싱 없이 호스트 시스템(100)으로부터 수신된 데이터를 호스트 시스템(100)에 역으로 라우팅하도록 구성될 수 있다.
동적 영역(204)은 하나 이상의 부분적 재구성(partial reconfiguration; PR) 영역을 포함하도록 구현된다. 프로그래밍가능 IC(132)의 PR 영역은 하나 이상의 상이한 사용자 지정(예를 들어, 맞춤형) 회로 설계를 시간의 경과에 따라 동적으로 구현하기 위해 예약된 프로그래밍가능 회로부의 영역을 가리킨다. 동적 영역(204)은 하나보다 많은 PR 영역을 포함할 수 있다. 일반적으로, 동적 영역(204)에서 구현되는 각각의 상이한 PR 영역은 독립적으로 재구성가능하다. 도 2a의 예시에서, 동적 영역(204)은 단일 PR 영역을 구현한다.
도 2a의 예시에서, 정적 영역(202)은 동적 영역(204) 외부에 있는 프로그래밍가능 IC(132)의 부분들을 가리킨다. 정적 영역(202)에서 구현된 플랫폼(218)은 변경되지 않고, 예를 들어 정적으로 유지되는 반면, 동적 영역(204) 내에 있는 회로부는 시간의 경과에 따라 다른 상이한 사용자 지정 회로 설계들을 구현하도록 변경될 수 있다. 도 2a의 예시에서, 사용자 지정 회로 설계는 동적 영역(204)에서 구현되고 사용자 지정 회로부(216)로서 도시된다. 정적 영역(202) 내의 플랫폼(218)이 중단 없이 계속 동작하는 동안 동적 영역(204)은 상이한 사용자 지정 회로부(예컨대, 사용자 지정 회로부(216) 이외의 다른 회로들)를 구현하기 위해 시간의 경과에 따라 재구성될 수 있다.
예를 들어, 사용자 지정 회로부(216)는 임의의 다양한 네트워크 가속 기능들을 수행할 수 있다. 이와 관련하여, 플랫폼(218) 및 예를 들어 NIC 제어기(208)의 기능은 그 자체가 정적이지만, 사용자 지정 회로부(216)의 추가를 통해 증강될 수 있다. 일 양태에서, 사용자 지정 회로부(216)가, 예컨대, NIC 제어기(208)에 의해 이미 수행되었던 동작들을 반복할 필요가 없도록 NIC 제어기(208)는 메타데이터를 전달할 수 있으므로 사용자 지정 회로부(216)는 임의의 다양한 증분적 네트워크 가속 기능들을 수행할 수 있다.
사용자 지정 회로부(216)는 데이터의 중단 또는 손실 없이 프로그래밍가능 IC(132)의 동작 동안 네트워크(138)와 호스트 시스템(100) 사이의 정적 영역(202)에서 플랫폼(218)을 거쳐 흐르는 이러한 데이터[예를 들어, 네트워크(138)로부터의 데이터("네트워크" 또는 "유입" 데이터라고 지칭됨) 및/또는 호스트 시스템(100)으로부터의 데이터("호스트" 또는 "송출" 데이터라고 지칭됨)]와 인라인으로 동적으로 삽입되고, 제거되고, 및/또는 대체될 수 있다. 다른 양태에서, 호스트 시스템(100)에서 실행되는 가상 머신들의 경우, 용어 "송출" 및 "유입"은 가상 머신들에 대해 사용될 수 있다. 예를 들어, 호스트 시스템(100)에서 실행되는 가상 머신의 송출 데이터는 네트워크(138)로 또는 호스트 시스템(100)에서 또한 실행되는 다른 가상 머신의 입구로 지향될 수 있다. 어떠한 경우든, 동적 영역(204)은 동적으로 재구성되는 동안에 플랫폼(218)은 이더넷 인터페이스(206)를 통해 네트워크(138)와의 통신 링크 그리고 PCIe 제어기(212)를 통해 호스트 시스템(100)과의 통신 링크를 유지할 수 있다. 따라서, 동적 영역(204)이 재구성되는 동안, 프로그래밍가능 IC(132)는 네트워크(138)를 통해 프로그래밍가능 IC(132)에 연결 중인 호스트 시스템(100) 및 다른 디바이스들에 대해 "온라인"이거나 동작 중인 것으로 보인다.
NIC 제어기(208)가 도 2의 예시에서 하나의 통신 인터페이스(214)를 포함하는 것으로 도시되어 있지만, NIC 제어기(208)는 복수의 상이한 통신 인터페이스들을 포함할 수 있다. 통신 인터페이스들은 NIC 제어기(208) 내부에 포함된 하나 이상의 상이한 스테이지에서 NIC 제어기(208)에 포함될 수 있다. 이는 NIC 제어기(208)가 내부의 임의의 다양한 상이한 프로세싱 스테이지들에서 사용자 지정 회로부(216)와 데이터를 교환할 수 있게 한다.
도 2b는 도 1의 프로그래밍가능 IC(132)에서 구현되는 플랫폼(218)의 다른 예시를 도시한다. 도 2b의 플랫폼(218)은 도 2a의 예시와 실질적으로 유사하다. 그러나, 도 2b의 예시에서는, 플랫폼(218)이 정적 영역(202)에서 부분적으로 구현된다. 예를 들어, PCIe 제어기(212)는 정적 영역(202)에서 구현된다. 이더넷 인터페이스(206), NIC 제어기(208), 및 DMA 회로(210) 각각은 상이한 PR 영역(예를 들어, 각각 PR 영역들(220, 222, 224))에서 구현된다. 도 2b의 예시에서, 동적 영역(204)은 PR 영역들(220, 222, 224)과는 독립적이고 별개인 다른 PR 영역으로서 구현될 수 있다.
도 2b의 예시는 플랫폼(218)의 상이한 컴포넌트들이 시간의 경과에 따라 업데이트되도록 해준다. 사실상, 플랫폼(218)은 구성가능하다. 정적 영역(202) 내의 회로부에 대한 업데이트는 일반적으로 사용자 회로부를 재컴파일링할 것을 필요로 한다. 도 2b의 구현은 정적 영역(202)에서 구현되는 플랫폼(218)의 부분을 최소화한다. 정적 영역(202)에서 구현되는 플랫폼(218)의 양을 최소화함으로써, 사용자 지정 회로부를 재컴파일링해야 할 가능성이 감소된다. 예를 들어, DMA 회로(210), NIC 제어기(208), 및 이더넷 인터페이스(206)는 사용자 지정 회로부(216)의 재컴파일링을 요구하지 않고서 변경될 수 있다(PR 영역들은 이러한 컴포넌트들의 상이한 구현들로 재구성될 수 있다). PCIe 제어기(212)에 대한 변경은 사용자 지정 회로부(216)의 재컴파일링을 필요로 할 것이다. 사용자 회로부(예를 들어, 사용자 지정 회로부(216))를 재컴파일링하는 것은 시간 소모적인 노력이여서 이는 바람직하지 않으며 특히 FaaS 애플리케이션에서 바람직하지 않을 수 있다. 도 2b의 예시에서, 플랫폼(218)의 많은 부분은 사용자 지정 회로부의 재컴파일링을 요구하지 않고서 시간의 경과에 따라 업데이트될 수 있다. 이것은 정적 영역(202)에서 회로부를 업데이트해야 할 가능성을 감소시키고, 이에 따라 사용자 회로 설계가 재컴파일링될 필요가 있을 가능성을 감소시킨다.
도 2b는 예시를 목적으로 제공된 것이다. 다른 예시적인 구현들은 플랫폼(218)을 구현하기 위해 다른 개수의 PR 영역들을 사용할 수 있다. 예를 들어, 플랫폼(218)은 정적 영역(202)에서 PCIe 제어기(212)를 구현하고, 단일 PR 영역에서 이더넷 인터페이스(206), NIC 제어기(208), 및 DMA 회로(210)를 구현할 수 있다. 다른 예시에서, 두 개의 PR 영역들이 사용될 수 있으며, 여기서 이더넷 인터페이스(206), NIC 제어기(208), 및 DMA 회로(210) 중 임의의 두 개는 제1 PR 영역에서 구현되는 반면에 다른 컴포넌트는 제2 PR 영역에서 구현된다. 나머지 도면들에서 도시된 다양한 예시적인 플랫폼들(218)에서는 구체적으로 예시되지 않았지만, 플랫폼(218)은 도 2b와 관련하여 설명된 바와 같이 제시된 예시들 각각에서 하나 이상의 PR 영역을 사용하여 구현될 수 있다는 것을 이해해야 한다.
도 3은 프로그래밍가능 IC(132)에서 구현되는 플랫폼(218)의 다른 예시를 도시한다. 도 3의 예시에서는, 이더넷 인터페이스(206)가 더 자세히 도시되어 있다. 이더넷 인터페이스(206)는 매체 액세스 제어(Medium Access Control; MAC)(304)에 연결된 물리 계층(PHY)(302)을 포함한다. PHY(302)는 네트워크(138)에 연결된다. MAC(304)는 NIC 제어기(208)에 연결된다. 예를 들어, MAC(304)는 NIC 제어기(208)에 포함된 이더넷 인터페이스(미도시됨)에 연결될 수 있다.
도 4는 프로그래밍가능 IC(132)에서 구현되는 플랫폼(218)의 다른 예시를 도시한다. 도 4의 예시에서는, 하나 이상의 메모리 제어기(402)가 플랫폼(218)의 일부로서 정적 영역(202)에서 구현된다. 메모리 제어기(들)(402)은 휘발성 메모리(예를 들어, RAM)(134)에 연결된다. 메모리 제어기들(402)은 프로그래밍가능 회로부를 사용하여 구현될 수 있다. 그러나, 다른 예시에서, 메모리 제어기들(402) 중 하나 이상은 하드와이어드 회로 블록들로서 구현될 수 있다.
메모리 제어기(402)는 동적 영역(204)에서 구현되는 사용자 지정 회로부(216)에 연결될 수 있다. 또한, 메모리 제어기(들)(402)은 DMA 회로(210)에 커플링될 수 있다. 이와 같이, 사용자 지정 회로부(216)는 동작 동안 휘발성 메모리(134)에 액세스할 수 있다. 또한, 호스트 시스템(100)은 메모리 제어기(들)(402)을 통해 휘발성 메모리(134)를 판독하고 및/또는 이에 기입하는 것이 가능하다. 이것은 호스트 시스템(100)이 사용자 지정 회로부(216)와 데이터를 공유하는 것을 허용한다.
본 개시 내에서, 메모리 제어기들과 함께 도시되었는지 여부에 관계없이, 도시된 다양한 예시적인 플랫폼들은 하나 이상의 메모리 제어기를 포함하여 구현될 수 있다. 메모리 제어기들은 선택적으로 포함될 수 있다. 또한, 플랫폼(218)이 하나 이상의 PR 영역을 사용하여 구현되는 구현들에서, 메모리 제어기들은 자체 PR 영역에서 구현되거나 또는 플랫폼(218)의 하나 이상의 다른 컴포넌트와 함께 다른 PR 영역에 포함될 수 있다.
도 5는 프로그래밍가능 IC(132)에서 구현되는 플랫폼(218)의 다른 예시를 도시한다. 도 5의 예시에서, 플랫폼(218)은 NIC 제어기(208)에서 구현되는 소프트웨어 정의 네트워킹(Software-Defined Networking; SDN) 데이터 평면(502)을 포함한다. SDN 데이터 평면(502)은 플랫폼(218)의 일부로서 데이터 평면을 구현함으로써 데이터와 제어 평면들을 디커플링시킬 수 있다. 이 예시에서, 호스트 시스템(100)에서 실행되는 소프트웨어에서 데이터 평면을 구현하는 대신, 데이터 평면 소프트웨어는 하드웨어 가속화되고 NIC 제어기(208) 내에서 SDN 데이터 평면(502)으로서 구현된다.
일부 예시적인 구현들에서, SDN 데이터 평면(502)은 사용자 지정 회로부(504)(및/또는 통신 인터페이스(506)를 통해 SDN 데이터 평면(502)에 연결된 동적 영역(204) 내의 다른 사용자 지정 회로부)를 사용하여 맞춤화될 수 있다. 예를 들어, SDN 데이터 평면(502)을 동적 영역(204)과 연결하는 포트들을 사용함으로써, 사용자 지정 회로부(504)는 데이터에 맞춤형 GRE 헤더를 추가하고/하거나 맞춤형 파서(parser)를 구현하도록 구성될 수 있다. 예를 들어, 맞춤형 파서를 사용하면, 메타데이터는 새로운 파서 데이터와 더불어 그리고 이와 연관지어 전달될 수 있다. 또한, GRE는 사용자 지정 회로부(504)를 통해 네트워크 오버레이(들)로 수정될 수 있다. 어떠한 경우든지, 하나 이상의 통신 인터페이스(506)의 이용가용성은 SDN 데이터 평면(502)이 동적 영역(204)에서의 프로그래밍가능 회로부를 사용하여 맞춤화될 수 있게 한다.
SDN 데이터 평면(502)은 네트워크 관리를 보다 유연하게 하도록 프로그래밍 방식의 액세스를 가능하게 한다. 예를 들어, NIC 제어기(208) 및/또는 SDN 데이터 평면(502)이 룩업 인터페이스를 통해 검색되는 대규모 플로우 테이블을 활용하는 한, 맞춤형 플로우 테이블들은 동적 영역(204) 내에서 사용자 지정 회로부(216 및/또는 504)로서 구현될 수 있다. SDN 데이터 평면(502)은 그렇지 않았더라면 데이터 평면 소프트웨어를 실행하기 위해 호스트 시스템(100)에 가해졌을 프로세싱 부담을 경감시킨다.
도 5의 예시에서, SDN 데이터 평면(502)은 통신 인터페이스(506)를 통해 동적 영역(204)에 연결될 수 있다. SDN 데이터 평면(502)은 동적 영역(204)에 연결된 하나보다 많은 통신 인터페이스를 가질 수 있다. 다른 예시들에서, SDN 데이터 평면(502)은 동적 영역(204)에 대한 통신 인터페이스를 포함하지 않을 수 있다. 메모리 제어기(들)(402)이 도시되어 있지만, 메모리 제어기(들)(402)은 선택적이며 생략될 수 있다. 메모리 제어기들(402)은, 포함될 때, 사용자 지정 회로부(504, 214)가 휘발성 메모리(134)를 판독하고 기입할 수 있게 한다. 또한, 메모리 제어기(들)(402)은 호스트 시스템(100)이 휘발성 메모리(134)로부터 판독하고 기입할 수 있게 한다.
예시를 목적으로, 동적 영역(204)은 추가적인 사용자 지정 회로부(504)를 포함한다. 일례에서, 사용자 지정 회로부(504)는 통신 인터페이스(506)를 통해 NIC 제어기(208)에 및/또는 SDN 데이터 평면(502)에 연결된다. 사용자 지정 회로부(504)는 NIC 제어기(208)가 데이터 플로우 전환을 구현하도록 하는 맞춤형 플로우 테이블을 구현할 수 있다.
다른 예시에서, 사용자 지정 회로부(216)는 비디오 디코더 및 스케일링 회로를 구현할 수 있다. 사용자 지정 회로부(504)는 머신 러닝 객체 검출 회로를 구현할 수 있다. 이러한 구성으로, 동적 영역(204)은 실시간 비디오 프로세싱 및 머신 러닝을 수행할 수 있다. 이 예시는 플랫폼(218)을 사용하여 객체 검출 및/또는 분류가 뒤따르는 네트워크 어태치드 실시간 비디오 디코딩이 어떻게 구현될 수 있는지를 설명한다.
예를 들어, 비디오 디코더 및 스케일링 회로는 네트워크(138)를 통해 수신된 상이한 다중 비디오 스트림들에 대해 동작할 수 있다. 비디오 스트림들은 네트워크(138)에 통신가능하게 링크된 보안 시스템 및/또는 카메라로부터 비롯된 것일 수 있다. 비디오 디코더 및 스케일링 회로는 수신된 비디오 스트림들을 디코딩할 수 있다. 비디오 디코더 및 스케일링 회로는 상이한 비디오 스트림들로부터 하나 이상의 개별 프레임을 추출하고, 추출된 프레임들을 머신 러닝 객체 검출 회로에 의한 사용을 위해 스케일링할 수 있다.
도 5의 예시에서, NIC 제어기(208)는 기본 NIC 기능들을 수행할 수 있다. 비디오 디코딩 및 스케일링 기능들과 객체 검출 및/또는 이미지 분류 기능들을 위한 머신 러닝 추론이 동적 영역(204) 내에서 하드웨어 가속 커널로서 구현된다. 동적 영역(204)에서 커널로서 기능들을 구현함으로써, 커널들은 실시간으로 비디오 스트림들에 대해 동작할 수 있다. 실시간 동작은 호스트 시스템(100)의 네트워킹 스택을 가로지르는 비디오 스트림들 없이 프로세싱이 수행될 수 있기 때문에 레이턴시를 감소시킨다(예를 들어, 사용자 지정 회로부(504, 216)는 데이터가 호스트 시스템(100)에 도달하기 전에 비디오에 대해 동작한다). 이것은 프로그래밍가능 IC(132)에 의해 수행되는 프로세싱을 가속화한다. 또한, 어떠한 플래깅된 객체들도 없는 이미지들은 폐기될 수 있는 반면 플래깅된 객체들이 있는 이미지들(예컨대, 프레임들)은 추가적인 분석을 위해 저장될 수 있으므로 플랫폼(218)은 저장 요건들을 감소시킨다. 또한, 프로세서(들)(106)의 사이클들이 다른 동작들을 위해 사용될 수 있기 때문에 호스트 시스템(100)에 가해지는 작업 부하가 상당히 감소된다.
다른 예시에서, 도 5의 플랫폼(218)은 암호화된 데이터 트래픽에 대한 인라인 멀웨어(malware) 검출을 수행하는데 사용될 수 있다. 이 예시에서, 플랫폼(218)은 데이터 플로우들로부터 특정 정보를 추출하는 것에 기초하여 동작할 수 있다. 정보는 데이터 플로우의 지속기간, 클라이언트로부터 보내진 패킷들의 수, 서버로부터 보내진 패킷들의 수, 클라이언트로부터 보내진 바이트들의 수, 및 서버로부터 보내진 바이트들의 수를 포함할 수 있다. 예를 들어, 사용자 지정 회로부(216)는 분류 및 특징 추출 회로를 구현할 수 있다. 추출된 정보는 사용자 지정 회로부(504)에 의해 구현된 랜덤 포레스트 분류기(random forest classifier)를 트레이닝하기 위해 사용자 지정 회로부(216)에 의해 또한 추출된 패킷 헤더들의 암호화되지 않은 부분들로부터의 메타데이터와 함께 사용될 수 있다. 그런 다음 트레이닝된 분류기를 사용하여 멀웨어를 검출할 수 있다.
일 양태에서, 분류기는 네트워크(138)로부터 프로그래밍가능 IC(132)로 들어오는 패킷들에 대해 실시간으로 실행될 수 있다. 사용자 지정 회로부(216)는 특징들을 추출하고 패킷들을 데이터 플로우들로 분류할 수 있다. 사용자 지정 회로부(216)는 결정된 정보를 사용자 지정 회로부(504)에 공급할 수 있다. 사용자 지정 회로부(504)는 관심 대상의 멀웨어에 대한 트레이닝된 모델들로 사전로딩될 수 있다. 사용자 지정 회로부(504)가 멀웨어를 검출한 것에 응답하여, 사용자 지정 회로부(504)는 공격자로부터 전송된 임의의 추가적인 네트워크 데이터가 호스트 시스템(100)에 도달하는 것을 방지하기 위해 SDN 데이터 평면(502) 내에 필터를 설정하라는 메시지를 보낼 수 있다. 이 예시에서, NIC 제어기(208) 및 SDN 데이터 평면(502)은 플랫폼(218)의 일부로서 실행되는 반면, 멀웨어 검출을 위한 특징 추출 기능들 및 분류는 동적 영역(204) 내로 로딩되는 커널들로서 실행된다.
실시간으로 분류, 추출, 및 멀웨어 검출을 수행함으로써, 멀웨어가 프로그래밍가능 IC(132)로부터 호스트 시스템(100)으로 PCle 버스를 물리적으로 횡단하기 전에 멀웨어가 차단될 수 있다. 이것은 호스트 시스템(100)에 대한 보다 강력한 보호를 제공한다. 랜덤 포레스트 분류 기술은 복잡한 암호해독 및 프록시 기술들 없이 암호화된 트래픽 상에서의 멀웨어의 검출을 가능케 한다. 또한, 어플라이언스(appliance)가 아닌 프로그래밍가능 IC(132) 상에서 이 기능을 수행하는 것은 작업부하의 분산을 통해 더 나은 스케일링을 제공하고 데이터 센터 내부로부터의 공격으로부터 보호한다.
본 명세서에서 설명되는 특정 사용자 지정 회로들은 예시를 목적으로 제공된 것이며 한정시키고자 한 것은 아니다. 예시들은 플랫폼(218)의 기능들을 확장하기 위해 동적 영역(204)에서 임의의 사용자 지정 회로부가 구현될 수 있음을 예시한다. 또한, 사용자 지정 회로부의 상이한 블록들이 NIC 제어기(208)와 통신하기 위해 포함될 수 있지만, 사용자 지정 회로부의 상이한 블록들은 서로 통신하거나 통신하지 않을 수 있다.
도 5의 예시에서, 동적 영역(204)은 단일 PR 영역으로서 구현된다. 하나 이상의 다른 예시에서, 각각의 사용자 지정 회로 블록(예를 들어, 504 및 216)은 그 자신의 독립적으로 재구성가능한 PR 영역에서 구현될 수 있다. 이러한 구성들에서, 각 PR 영역에서 구현된 특정 사용자 지정 회로부는 동적 영역(204)에서 구현된 다른 사용자 지정 회로부를 수정하지 않고서 동적으로 수정가능(예컨대, 재구성가능)할 것이다. 예를 들어, 사용자 지정 회로부(504)가 제1 PR 영역 내에 있고 사용자 지정 회로부(216)가 제2 PR 영역 내에 있는 경우, 사용자 지정 회로부(216)의 동작을 방해하지 않고서 사용자 지정 회로부(504)가 제거될 수 있고 상이한 사용자 지정 회로부가 제1 PR 영역에 추가될 수 있다. 마찬가지로, 사용자 지정 회로부(504)의 동작을 방해하지 않고서 사용자 지정 회로부(216)가 제거될 수 있고 상이한 사용자 지정 회로부가 제2 PR 영역에 추가될 수 있다. 각각의 경우, 플랫폼(218)은 중단 없이 계속 동작한다. 도 5의 플랫폼(218)은 또한 본 명세서에서 설명되는 하나 이상의 PR 영역을 사용하여 구현될 수 있다.
도 6은 프로그래밍가능 IC(132)에서 구현되는 플랫폼(218)의 다른 예시를 도시한다. 도 6의 플랫폼(218)은 도 5의 예시와 실질적으로 유사하다. 그러나, 도 6의 예시에서는, SDN 데이터 평면(502)이 OVS(Open Virtual Switch 또는 Open vSwitch) 데이터 평면(602)으로 대체된다. OVS 데이터 평면(602)은 가상화된 서버들에 연결될 수 있다. OVS 데이터 평면(602)은 가상 스위치의 하드웨어 가속 버전을 구현한다. 호스트 시스템(100)에서 실행되는 소프트웨어에서 가상 스위치를 구현하는 대신, 가상 스위치 소프트웨어는 하드웨어 가속화되고 플랫폼(218) 내에서 OVS 데이터 평면(602)으로서 구현된다. OVS 데이터 평면(602)은 그렇지 않았더라면 호스트 시스템(100)에 가해졌을 프로세싱 부담을 경감시킨다. 도 6의 예시에서, OVS 데이터 평면(602) 및/또는 플로우 테이블은 사용자 지정 회로부(504) 및/또는 사용자 지정 회로부(216)를 사용하여(예를 들어, 동적 영역(204)에서 구현되고 하나 이상의 통신 인터페이스를 통해 OVS 데이터 평면(602) 및/또는 NIC 제어기(208)에 연결된 사용자 지정 회로부를 사용하여) 맞춤화될 수 있다.
도 6의 예시에서, OVS 데이터 평면(602)은 통신 인터페이스(604)를 통해 동적 영역(204)에 연결될 수 있다. OVS 데이터 평면(602)은 동적 영역(204)에 연결된 하나보다 많은 통신 인터페이스를 가질 수 있다. 다른 예시에서, OVS 데이터 평면(602)은 동적 영역(204)에 대한 통신 인터페이스를 갖지 않을 수 있다. 메모리 제어기(들)(402)이 도시되어 있지만, 메모리 제어기(들)(402)은 선택적이다. 메모리 제어기들(402)은, 포함될 때, 사용자 지정 회로부(504, 214)가 휘발성 메모리(134)를 판독하고 기입할 수 있게 한다. 또한, 메모리 제어기(들)(402)은 호스트 시스템(100)이 휘발성 메모리(134)를 판독하고 기입할 수 있게 한다.
예시를 목적으로, 동적 영역(204)은 추가적인 사용자 지정 회로부(504)를 포함한다. 사용자 지정 회로부(504)는 인터페이스(604)를 통해 NIC 제어기(208) 및/또는 OVS 데이터 평면(602)에 연결될 수 있다. 일례에서, 사용자 지정 회로부(216)는 저장 압축, 암호화, 및/또는 중복제거(deduplication) 동작들 중 하나 이상을 수행할 수 있는 회로를 구현할 수 있다.
도 6의 예시에서, 플랫폼(218)은 네트워킹 및 저장을 위한 수렴형 스마트 NIC를 구현하는데 사용될 수 있다. 플랫폼(218)은 네트워크 및 저장 오프로딩과 가속화 둘 다를 수행할 수 있다. 플랫폼(218)은 OVS 데이터 평면(602)을 갖는 NIC 제어기(208), 이더넷 인터페이스(206), PCIe 제어기(212), 및 메모리 제어기(들)(402)를 제공한다. 동적 영역(204)에서 구현되는 사용자 지정 회로부(216, 504)는 압축 및/또는 암호화와 같은 동작들을 수행할 수 있다. 논의된 바와 같이, 플랫폼(218)과 사용자 지정 회로부(216, 504) 사이의 데이터 플로우들은, 예를 들어, 스트림 인터페이스들을 사용하여 구현될 수 있다.
제어 평면 및 저속 경로 프로세싱이 호스트 시스템(100)에서 수행될 수 있다. 그러나, 다른 예시적인 구현에서, 프로그래밍가능 IC(132)(예를 들어, 도 7 참조) 내의 임베디드(embedded) 하드와이어드 프로세서 및/또는 소프트 프로세서 또는 호스트 시스템(100) 내의 프로세서 이외의 다른 외부 연결된 프로세서(예를 들어, 도 8 참조)가 저장 오프로딩을 수행할 수 있다. 임베디드 프로세서 또는 외부 프로세서를 포함하는 후자의 모델은 이러한 기능(들)을 수행하는 호스트 시스템 프로세서와는 반대로 임베디드 또는 외부 프로세서가 네트워크 기능, 저장 등을 관리하는 "베어 메탈(bare metal)" 구현들에서 사용될 수 있다.
본 명세서에서 설명되는 특정 사용자 지정 회로들은 예시를 목적으로 제공된 것이며 한정시키고자 한 것은 아니다. 예시들은 플랫폼(218)의 기능들을 확장하기 위해 동적 영역(204)에서 임의의 사용자 지정 회로부가 구현될 수 있음을 예시한다. 또한, 예시된 사용자 지정 회로부 블록들은 구현에 따라 동일한 PR 영역 내에 또는 상이한 PR 영역들 내에 포함될 수 있다. 마찬가지로, 도 6의 플랫폼(218)은 본 명세서에서 설명되는 하나 이상의 PR 영역을 사용하여 구현될 수 있다.
도 7은 프로그래밍가능 IC(132)에서 구현되는 플랫폼(218)의 다른 예시를 도시한다. 도 7의 예시에서, 정적 영역(202)은 프로세서(702)를 포함하도록 구현된다. 프로세서(702)는 프로그래밍가능 IC(132) 내의 임베디드 프로세서이다. 일 양태에서, 프로세서(702)는 프로그래밍가능 IC(132)의 프로그래밍가능 회로부를 사용하여 구현되는 소프트 프로세서이다. 예시적인 구현에서, 소프트 프로세서(702)는 캘리포니아주 산호세의 자일링스사로부터 입수가능한 MicroBlaze™ 프로세서로서 구현된다. 여전히, 프로세서(702)는 프로그램 코드를 실행할 수 있는 다양한 소프트 프로세서들 중 임의의 것으로서 구현될 수 있다. 다른 예시에서, 프로세서(702)는 하드와이어드 프로세서이다. 예를 들어, 프로세서(702)는 ARM 유형의 프로세서 또는 x86 유형의 프로세서로서 구현될 수 있다.
예시된 바와 같이, 프로세서(702)는 온칩 상호연결부(704)에 연결된다. 일 예시에서, 온칩 상호연결부(704)는 메모리 매핑된 인터페이스로서 구현된다. 메모리 매핑된 인터페이스의 예시는 메모리 매핑된 AXI 인터페이스이다. AXI는 인터페이스의 도해적인 예시로서 제공된 것이며, 본 개시 내에서 설명되는 본 발명 구성들의 한정으로서 의도된 것은 아니다. 온칩 상호연결부들의 다른 예시들은, 비제한적인 예시로서, 다른 유형들의 버스들, 네트워크 온칩, 크로스바, 또는 다른 유형의 스위치를 포함한다.
프로세서(702)는 다양한 상이한 기능들 중 임의의 것을 실행할 수 있다. 프로세서(702)에 의해 수행될 수 있는 기능들의 예시들은 비제한적인 예시로서, OVS 제어 평면, 저장, 관리 등을 포함한다. 도 7의 예시에서, 플랫폼(218)은 도시된 로컬 인터페이스들을 통해(예를 들어, NIC 제어기(208), DMA 회로(210), 및 메모리 매핑된 인터페이스(704)를 통해) 이더넷 인터페이스(206)로부터 임베디드 프로세서(702)에 네트워크 데이터를 전달할 수 있다.
도 7의 예시에서, 메모리 제어기(들)은 플랫폼(218)에 포함되지 않는다. 하나 이상의 다른 예시에서, 메모리 제어기(들)은 플랫폼(218)에 포함될 수 있다. 메모리 제어기(들)은 프로세서(702), 동적 영역(204)에서의 사용자 지정 회로부(216 및/또는 504), 및/또는 호스트 시스템(100)에 연결될 수 있다. 논의된 바와 같이, 플랫폼(218)은 하나 이상의 PR 영역을 사용하여 구현될 수 있다.
도 8은 프로그래밍가능 IC(132)에서 구현되는 플랫폼(218)의 다른 예시를 도시한다. 도 8의 예시에서, 플랫폼(218)은 추가적인(예를 들어, 제2의) PCIe 제어기(802)를 포함하도록 구현된다. PCIe 제어기(802)는 프로그래밍가능 회로부를 사용하여 구현된다. PCIe 제어기(802)는 외부 프로세서(804)에 연결된다. 외부 프로세서(804)는 프로그램 코드를 실행할 수 있고, 하드웨어 가속 카드(104) 상에 또는 하드웨어 가속 카드(104)에 커플링된 상이한 회로 기판 또는 시스템 상에 배치될 수 있다.
외부 프로세서(804)는 다양한 상이한 기능들 중 임의의 것을 실행할 수 있다. 프로세서(804)에 의해 수행될 수 있는 기능들의 예시들은 비제한적인 예시로서, OVS 제어 평면, 저장, 관리 등을 포함한다.
도 8의 예시에서, 메모리 제어기(들)은 정적 영역(202)에 포함되지 않는다. 하나 이상의 다른 예시에서, 메모리 제어기(들)은 플랫폼(218)에 포함될 수 있다. 메모리 제어기(들)은 DMA 회로(210), 동적 영역(204)에서의 사용자 지정 회로부(216 및/또는 504), 및/또는 호스트 시스템(100)에 연결될 수 있다. 논의된 바와 같이, 플랫폼(218)은 하나 이상의 PR 영역을 사용하여 구현될 수 있다. 일 양태에서, PCIe 제어기(212) 및 PCIe 제어기(802)는 정적 영역(202)에서 구현될 수 있는 반면, 다른 컴포넌트들은 하나 이상의 PR 영역에 포함된다.
도 7과 도 8의 예시적인 구현들을 참조하면, 호스트 시스템은 하나 이상의 가상 머신을 구현할 수 있다. 각각의 가상 머신은 두 개의 개별 가상 인터페이스들을 갖는다. 하나의 가상 인터페이스는 네트워킹용이고, 다른 가상 인터페이스는 저장용이다. 네트워크 트래픽은 다중 대기열 DMA 인터페이스에 어태치되며, RSS(Receive Side Scaling), LSO/TSO(Large Send Offload/TCP Segmentation Offload), VX(Virtual Extensible) 랜/NVGRE (Network Virtualization using Generic Routing Encapsulation) 터널 오프로드와 같은 네트워크 오프로드, 및 OVS와 같은 SDN 매치/액션 프로세싱을 포함하는 프로세싱 파이프라인을 거친다. 저장 트래픽은 RDMA 능력들을 갖도록 선택적으로 프로그래밍된 임베디드 프로세서(702) 또는 외부 프로세서(804)를 통해 오프로딩된다. 저장 트래픽은 동적 영역(204)에서 수행되는 압축 및/또는 암호화와 같은 NVMe 및 저장 오프로딩 동작들을 포함하는 프로세싱 파이프라인을 통과할 수 있다. 그런 후 프로세싱된 데이터는 NIC 제어기(208)의 데이터 파이프라인과 병합될 수 있다.
도 9는 NIC 제어기(208)의 예시적인 구현을 도시한다. 도 9의 예시에서, NIC 제어기(208)는 이더넷 인터페이스(902), 범프 인 더 와이어(bump-in-the-wire; BITW) 중재 회로(904), NIC 코어(906), 가속기 중재 회로(908), 및 DMA 인터페이스(910)를 포함한다. 예시와 논의를 목적으로, NIC 코어(906)와 가속기 중재 회로(908)는 각각 NIC 제어기(208)의 "스테이지"로서 지칭될 수 있다. 일부 예시적인 구현들에서, NIC 코어(906)는 그 자체로 회로부의 복수의 상이한 스테이지들로 형성되거나 이를 포함할 수 있다.
도 9의 예시에서, 이더넷 인터페이스(902)는 이더넷 인터페이스(206)(예를 들어, MAC(304))에 연결된다. DMA 인터페이스(910)는 DMA 회로(210)에 연결된다. DMA 인터페이스(910), 가속기 중재 회로(908), NIC 코어(906), BITW 중재 회로(904), 및 이더넷 인터페이스(902)는 각각 유입 데이터 플로우들(예를 들어, 이더넷 인터페이스(206)로부터 NIC 제어기(208) 내로의 데이터 플로우들) 및 송출 데이터 플로우들(예를 들어, NIC 제어기(208)로부터 이더넷 인터페이스(206)로의 데이터 플로우들)을 지원한다.
도시된 바와 같이, BITW 중재 회로(904), NIC 코어(906), 가속기 중재 회로(908), 및 DMA 인터페이스(910) 각각은 동적 영역(204)에 대한 유입 통신 인터페이스 및 동적 영역(204)에 대한 송출 통신 인터페이스를 포함한다. 일 양태에서, 통신 인터페이스는 유입 통신 인터페이스 및 송출 통신 인터페이스를 포함할 수 있다. 예를 들어, 도 9를 참조하면, 각각의 유입/송출 쌍은 하나의 통신 인터페이스를 나타낼 수 있다. 그러나, 다른 예시들에서, 통신 인터페이스는 유입 통신 인터페이스(들)만을 또는 송출 통신 인터페이스(들)만을 포함할 수 있다. 동적 영역(204)에 대한 통신 인터페이스 또는 인터페이스들을 갖는 것으로서 설명된 회로 블록들 각각은 동적 영역(204)에서 설명된 다양한 사용자 회로들(912, 914, 916, 918, 920, 및/또는 922) 중 임의의 것 내에서의 추가적인 프로세싱을 위해 송출 데이터 및/또는 유입 데이터를 적절한 송출 또는 유입 통신 인터페이스들을 통해 전송할 수 있다.
다른 예시적인 구현에서, BITW 중재 회로(904)는 유입 및/또는 송출 데이터 경로들을 동적 영역(204)에 연결하는 하나 이상의 멀티플렉서(예를 들어, 스위치)로서 구현될 수 있다. BITW 중재 회로(904)는 NIC 제어기(208)가 이더넷 인터페이스(902)와 NIC 코어(906) 사이에 하나 이상의 인터페이스를 포함할 수 있게 한다. BITW 중재 회로(904)는 이더넷 인터페이스(902)로부터 수신된 데이터를 패킷 프로세싱을 위해 유입 통신 인터페이스를 통해 사용자 회로(914)와 같은 하나 이상의 사용자 회로에 직접 전송할 수 있다. 사용자 회로(914)는 수신된 데이터에 대해 패킷 프로세싱을 수행하고 프로세싱된 데이터를 유입 통신 인터페이스를 통해 BITW 중재 회로(904)에 역제공할 수 있다. 그런 후 BITW 중재 회로(904)는 프로세싱된 데이터를 NIC 제어기 코어(906)에 포워딩할 수 있다.
특정 구현들에서, BITW 중재 회로(904)는 데이터를 전향(turn around)시키도록 구성될 수 있다. 예를 들어, BITW 중재 회로(904)는 이더넷 인터페이스(902)로부터 데이터를 수신하고, 데이터를 이더넷 인터페이스(902)에 역전송하여 이더넷 인터페이스(206)로 출력되게 할 수 있다. BITW 중재 회로(904)는 데이터를 전향시키기 전에 동적 영역(204) 내의 사용자 회로부에 데이터를 제공하거나 제공하지 않을 수 있다. 어떠한 경우든지, 네트워크(138)로부터 NIC 제어기(208)에 의해 수신된 데이터는 BITW 중재 회로(904)를 사용하여, 선택적으로 프로세싱되고, 전향되고, NIC 제어기(208)로부터 나와서 네트워크(138)에 역전송될 수 있다.
BITW 중재 회로(904)는 또한 NIC 코어(906)로부터 수신된 데이터를 패킷 프로세싱을 위해 송출 통신 인터페이스를 통해 사용자 회로(912)와 같은 하나 이상의 사용자 회로에 직접 전송할 수 있다. 사용자 회로(912)는 수신된 데이터에 대해 패킷 프로세싱을 수행하고 프로세싱된 데이터를 송출 통신 인터페이스를 통해 BITW 중재 회로(904)에 역제공할 수 있다. 그런 후 BITW 중재 회로(904)는 프로세싱된 데이터를 이더넷 인터페이스(902)에 포워딩할 수 있다. 다른 예시에서, BITW 중재(904)를 통해 사용자 회로(912) 및/또는 사용자 회로(914) 사이에서 교환된 충분한 데이터로, NIC 코어(906)는 후속 상위 프로토콜 계층들의 파싱과 같은 동작들을 수행할 수 있다.
특정 구현들에서, BITW 중재 회로(904)는 데이터를 전향시키도록 구성될 수 있다. 예를 들어, BITW 중재 회로(904)는 NIC 제어기(906)로부터 데이터를 수신하고, 데이터를 NIC 제어기(906)에 역전송하여 DMA 회로(210)로 출력되게 할 수 있다. BITW 중재 회로(904)는 데이터를 전향시키기 전에 동적 영역(204) 내의 사용자 회로부에 데이터를 제공하거나 제공하지 않을 수 있다. 어떠한 경우든지, 호스트 시스템으로부터 NIC 제어기(208)에 의해 수신된 데이터는 BITW 중재 회로(904)를 사용하여, 선택적으로 프로세싱되고, 전향되고, NIC 제어기(208)로부터 나와서 호스트 시스템에 역전송될 수 있다.
이와 같이, BITW 중재 회로(904)는, 유입 데이터가 NIC 제어기(208)의 프로세싱 스테이지에 진입하기 전에 동적 영역(204) 내의 사용자 지정 회로부에 제공될 수 있는 스위치 또는 인터페이스로서 서빙한다. 마찬가지로, BITW 중재 회로(904)는, 송출 데이터가 NIC 제어기(208)를 빠져나오기 직전에 동적 영역(204) 내의 사용자 지정 회로부에 제공될 수 있는 스위치 또는 인터페이스로서 서빙한다. 논의된 바와 같이, BITW 중재 회로(904)는 또한 유입 및/또는 송출 데이터를 전향시킬 수 있다.
일 양태에서, 유입 및 송출 통신 인터페이스들은 스트림 인터페이스들로서 구현된다. 하나의 예시적인 구현에서, 사용자 회로(912) 및 사용자 회로(914)는 인터넷 프로토콜 보안(IPSec) 회로 블록들을 구현할 수 있다. 예를 들어, 사용자 회로(914)에 의한 프로세싱 후에, NIC 코어(906)로 지향되는 유입 패킷들은 전송 제어 프로토콜(Transmission Control Protocol; TCP)과 같은 상위 계층 프로토콜들이 추가로 프로세싱될 수 있도록 완전히 암호해독될 수 있다. NIC 코어(906)로부터의 암호화되지 않은 송출 패킷들(예를 들어, 평문)은 사용자 회로(912)에 의해 암호화될 수 있다.
다른 양태에서, 사용자 회로(912)는 이더넷 IP 및 TCP 헤더 또는 GRE를 추가하는 것과 같은 동작들을 수행할 수 있다. 사용자 회로(914)는 역캡슐화(decapsulation)라고도 알려진 GRE 헤더 제거를 구현하는 데 사용될 수 있다. 사용자 회로(912)는 캡슐화(encapsulation)라고도 알려진 GRE 헤더들의 삽입을 수행할 수 있다. 다시, 사용자 회로들(912 및/또는 914)은 이더넷 인터페이스(206)와 NIC 코어(906) 사이의 데이터 경로 내의 지점에서 데이터에 대한 동작들을 수행할 수 있다.
NIC 코어(906)는 BITW 중재 회로(904)로부터 수신된 데이터를 패킷 프로세싱을 위해 유입 통신 인터페이스를 통해 사용자 회로(918)와 같은 하나 이상의 사용자 회로에 직접 전송할 수 있다. 사용자 회로(918)는 수신된 데이터에 대해 패킷 프로세싱을 수행하고 프로세싱된 데이터를 유입 통신 인터페이스를 통해 NIC 코어(906)에 역제공할 수 있다. 그런 후 NIC 코어(906)는 프로세싱된 데이터를 가속 중재 회로(908)에 포워딩할 수 있다.
NIC 코어(906)는 가속 중재 회로(908)로부터 수신된 데이터를 패킷 프로세싱을 위해 송출 통신 인터페이스를 통해 사용자 회로(916)와 같은 하나 이상의 사용자 회로에 직접 전송할 수 있다. 사용자 회로(916)는 수신된 데이터에 대해 패킷 프로세싱을 수행하고 프로세싱된 데이터를 송출 통신 인터페이스를 통해 NIC 코어(906)에 역제공할 수 있다. 그런 후 NIC 코어(906)는 프로세싱된 데이터를 BITW 중재 회로(904)에 포워딩할 수 있다.
일 양태에서, NIC 코어(906)에 대한 유입 및 송출 통신 인터페이스들은 터너리 콘텐츠 어드레싱가능 메모리(Tunary Content Addressable Memory; TCAM) 인터페이스들(예를 들어, 적어도 하나는 송출용이고 적어도 하나는 유입용임)로서 구현된다. 사용자 회로(916) 및/또는 사용자 회로(918)는 비제한적인 예시로서, 액세스 제어 리스트/플로우 테이블, 알고리즘 TCAM, MAC 필터, 및/또는 알고리즘 콘텐츠 어드레싱가능 메모리(algorithmic Content Addressable Memory; CAM)를 비롯한 다양한 상이한 회로들 중 임의의 것을 구현할 수 있다.
다른 예시에서, 비디오 프로세싱의 경우, UDP 및 체크섬 오프로드와 같은 동작들이 NIC 코어(906)에 의해 수행될 수 있다. 사용자 회로(들)(918 및/또는 916)은 데이터가 어디로 지향되어야 하는지를 식별하기 위해 플로우 룩업을 수행하는 데 사용될 수 있다. 데이터는 플로우 테이블들을 구현하는 사용자 회로들(918 및/또는 916)이 나타내는 곳이면 어디든지 그곳으로 지향될 수 있다. 예를 들어, 사용자는 NIC 코어(906)에서 구현될 수 있는 것보다 더 큰 테이블을 사용하기를 원할 수 있다. 이와 같이, 사용자 회로(들)(918 및/또는 916)은 NIC 코어(906)에 포함된 테이블을 확장하기 위해 동적 영역(204)에서 추가적인 RAM을 사용할 수 있다.
가속 중재 회로(908)는 NIC 코어(906)로부터 수신된 데이터를 패킷 프로세싱을 위해 유입 통신 인터페이스를 통해 사용자 회로(922)와 같은 하나 이상의 사용자 회로에 직접 전송할 수 있다. 사용자 회로(922)는 수신된 데이터에 대해 패킷 프로세싱을 수행하고 프로세싱된 데이터를 유입 통신 인터페이스를 통해 가속 중재 회로(908)에 역제공할 수 있다. 그런 후 가속 중재 회로(908)는 프로세싱된 데이터를 DMA 인터페이스(910)에 포워딩할 수 있다.
가속 중재 회로(908)는 DMA 인터페이스(910)로부터 수신된 데이터를 패킷 프로세싱을 위해 송출 통신 인터페이스를 통해 사용자 회로(920)와 같은 하나 이상의 사용자 회로에 직접 전송할 수 있다. 사용자 회로(920)는 수신된 데이터에 대해 패킷 프로세싱을 수행하고 프로세싱된 데이터를 송출 통신 인터페이스를 통해 가속 중재 회로(908)에 역제공할 수 있다. 그런 후 가속 중재 회로(908)는 프로세싱된 데이터를 NIC 코어(906)에 포워딩할 수 있다.
예시적인 구현에서, 가속기 중재 회로(908)는 TCP/IP, 체크섬 오프로드, 및 다른 상위 레벨 기능에 후속하는 데이터 경로에 위치된다. 패킷들 및 연관된 메타데이터는 사용자 회로들(예를 들어, 사용자 회로들(920 및/또는 922))이 증분 가속을 수행할 수 있는 동적 영역(204)으로 전달될 수 있다. 즉, 사용자 회로들(920 및/또는 922)이 상위 레벨 동작들을 수행하는 경우, 회로부는 NIC 제어기(208)의 데이터 파이프라인 내의 다른 곳에서 수행되는 이전 동작들을 새롭게 수행할 필요가 없다.
일 양태에서, 유입 및 송출 통신 인터페이스들은 스트림 인터페이스들(예를 들어, 적어도 하나는 송출용이고 적어도 하나는 유입용임)로서 구현된다. 예시적인 구현에서, 사용자 회로(920) 및 사용자 회로(922)는 계층 4 이상의 심층 패킷 검사를 수행하기 위한 회로들을 구현할 수 있다.
DMA 인터페이스(910)는 가속 중재 회로(908)로부터 수신된 데이터를 DMA 회로(210)에 전송할 수 있다. DMA 인터페이스(910)는 DMA 회로(210)로부터 수신된 데이터를 가속기 중재 회로(908)에 전송할 수 있다.
도 9의 예시에서, 사용자 회로들은 단일 PR 영역에서 구현되는 것으로서 도시되어 있다. 두 개 이상의 PR 영역들이 사용자 회로들의 다양한 조합들을 포함하는 동적 영역(204)에서 구현될 수 있다는 것을 이해해야 한다. 다른 예시에서, 사용자 회로들(912, 914)은 하나의 PR 영역에서 구현되고; 사용자 회로들(916, 918)은 다른 PR 영역에서 구현되며; 사용자 회로들(920, 922)은 또 다른 PR 영역에서 구현된다. 또한, 상이한 사용자 회로들 및 인터페이스들의 다양한 예제들은 예시를 목적으로 의도된 것이며 한정시키고자 한 것은 아니다. 다른 예시에서, 각각의 사용자 회로는 상이한 PR 영역에서 구현될 수 있다.
도 9의 예시에서 도해된 바와 같이, 플랫폼(218)은 복수의 상이한 통신 인터페이스들을 동적 영역(204) 내에 제공할 수 있다. 이러한 통신 인터페이스들, 예를 들어 연결점들은 플랫폼(218)과, 지원되는 임의의 다양한 연결점들에서 동적 영역(204)에서 구현된 동적으로 로딩된 기능들 사이에서 데이터가 이동할 수 있도록 한다. 언급된 바와 같이, 플랫폼(218)을 동적 영역(204)(예를 들어, NIC 제어기(208)의 통신 인터페이스들)에 연결하는 것으로 설명된 하나 이상의 또는 모든 통신 인터페이스들은 소프트웨어 제어가능하다. 이와 같이, 프로그래밍가능 IC(132) 내의 임베디드 프로세서(도 7에서 도시된 소프트 또는 하드와이어드 여부와 관계없음) 또는 외부 디바이스 또는 프로세서(예를 들어, 도 8에서 도시된 것), 및/또는 호스트 시스템의 프로세서는, 각각의 통신 인터페이스들이 정적 플랫폼(218)과 동적 영역(204) 간에 데이터를 교환하기 위해 턴 오프되어 있는지 또는 플랫폼(218)과 동적 영역(204) 간의 데이터의 교환을 방지하기 위해 턴 오프되어 있는지 여부를 개별적 방식으로 제어할 수 있다.
도 10은 프로그래밍가능 IC(132)에서 구현되는 플랫폼(218)의 다른 예시를 도시한다. 도 10의 예시에서, 플랫폼(218)은 스트림 트래픽 관리기(1002)를 포함한다. 스트림 트래픽 관리기(1002)는 가속기 중재 회로(908) 및 DMA 회로(210)에 연결된다. 도 10에서는 도시되지 않았지만, 스트림 트래픽 관리기(1002)는 동적 영역(204)에 대한 하나 이상의 연결을 포함할 수 있다.
스트림 트래픽 관리기(1002)는 호스트 시스템(100)과 동적 영역(204)에서 구현된 회로들 간의 데이터 스트림들/패킷들의 플로우를 조절할 수 있다. 도 10의 예시에서, 스트림 트래픽 관리기(1002)는 호스트 시스템(100)과 사용자 회로(1010) 및/또는 사용자 회로(1012) 간의 데이터의 플로우를 조절한다. 다른 예시들에서, 동적 영역(204)은 상호연결부(도시되지 않음)를 통해 스트림 트래픽 관리기(1002)에 연결될 수 있는 추가적인 사용자 회로들, 예를 들어, 커널 회로들을 포함할 수 있다.
도 10의 예시에서, 동적 영역(204)은 PR 영역들(1006, 1008)로 분할된다. PR 영역(1006)은 사용자 회로(1010)를 포함한다. PR 영역(1008)은 사용자 회로(1012)를 포함한다. 각각의 PR 영역들(1006, 1008)은 서로 독립적으로 동적으로 재구성될 수 있다. 따라서, 사용자 회로(1010)는 PR 영역(1006)에 있는 반면, 사용자 회로(1012)는 PR 영역(1008)에 있으므로, 사용자 회로(1010)는 사용자 회로(1012) 또는 플랫폼(218)의 동작에 영향을 미치지 않고서 제거되거나 또는 대체될 수 있다. 마찬가지로, 사용자 회로(1012)는 PR 영역(1008)에서 구현되므로, 사용자 회로(1012)는 사용자 회로(1010) 또는 플랫폼(218)의 동작에 영향을 미치지 않고서 제거되거나 또는 대체될 수 있다. 논의된 바와 같이, PR 영역들(1006, 1008) 중 하나 또는 둘 다(예를 들어, 동적 영역(204) 전체)는 플랫폼(218)의 동작을 중단시키지 않고서 재구성될 수 있다. 동적 영역(204)이 두 개의 PR 영역들을 포함하는 것으로 도시되어 있지만, 다른 예시에서, 사용자 회로(1010) 및 사용자 회로(1012)는 단일 PR 영역에서 구현될 수 있다는 것을 이해해야 한다.
일 양태에서, 사용자 회로(1012)는 고속 패킷 프로세싱을 수행할 수 있는 알고리즘 TCAM을 구현한다. 사용자 회로(1010)는 비제한적인 예시로서, 데이터 인증, 무결성, 및/또는 기밀성을 비롯한 IP 네트워크에 걸친 두 개의 통신점들 간의 동작들을 수행할 수 있는 IPSec 회로를 구현한다.
도 10의 예시에서, 사용자 회로(1010)는 NIC 코어(906)로부터 데이터를 수신하고, 데이터를 프로세싱하고, 프로세싱된 데이터를 NIC 코어(906)에 역제공할 수 있다. 사용자 회로(1012)는 사용자 회로(1012)(예를 들어, IPSec 회로)가 호스트 시스템(100)에 의해 프로그래밍될 수 있는 예시를 나타낸다. 이 경우, 호스트 시스템(100)(예를 들어, 또는 내부 또는 외부의 다른 신뢰할 수 있는 프로세서)은 PCIe 제어기(212) 및 이에 커플링된 사용자 회로(1012)의 제어 인터페이스를 통해 사용자 회로(1012)에 사후 구성 데이터를 전송할 수 있다. 제어 인터페이스의 예시는 AXI-Light 프로토콜을 준수하는 것이지만, 다른 제어 인터페이스들이 사용될 수 있다.
도 11은 프로그래밍가능 IC(132)에서 구현되는 플랫폼(218)의 다른 예시를 도시한다. 도 11의 예시에서, 스트림 트래픽 관리기(1002)는 동적 영역(204) 내의 상호연결부(1102)에 그리고 상호연결부(1106)에 연결된다. 상호연결부(1102)는 메모리 매핑된 상호연결부일 수 있는 반면, 상호연결부(1106)는 스트림 상호연결부일 수 있다. 상호연결부(1102)는 하나 이상의 네트워크 커널(1104)에 연결된다. 상호연결부(1106)는 하나 이상의 컴퓨트 커널(1108)에 연결된다. 스트림 트래픽 관리기(1002) 및/또는 가속기 중재 회로(908)는 호스트 시스템(100)과 네트워크 커널(1104)과 컴퓨트 커널(1108) 간의 데이터 플로우들을 관리(예를 들어, 데이터 플로우들을 지향)할 수 있다. 도 11의 예시에서, 가속기 중재 회로(908)는 스트림 트래픽 관리기(1002)를 통해 동적 영역(204)에서 구현되는 사용자 회로부와 통신할 수 있다.
동적 영역(204)이 단일 PR 영역을 포함하는 것으로서 도시되어 있지만, 다른 양태에서, 동적 영역(204)은 복수의 PR 영역들을 포함할 수 있다. 예를 들어, 사용자 회로(1012)는 제1 PR 영역에서 구현될 수 있는 반면, 사용자 회로(1010)는 제2 PR 영역에서 구현될 수 있다. 또한, 상호연결부들(1102, 1106)과 네트워크 커널(1104)과 컴퓨트 커널(1108)은 제3 PR 영역에서 구현될 수 있다. 다른 양태에서, 상호연결부(1102) 및 네트워크 커널(들)(1104)은 제3 PR 영역에서 구현되는 반면, 상호연결부(1106) 및 컴퓨트 커널들(1108)은 제4 PR 영역에서 구현된다. 도 10과 도 11의 예시들에서, 스트림 트래픽 관리기(1002)는 PR 영역에서 자체적으로 구현될 수 있거나 또는 플랫폼(218)의 하나 이상의 다른 컴포넌트로 PR 영역 내에서 구현될 수 있다. 대안적으로, 스트림 트래픽 관리기(1002)는 정적 영역(202)에서 구현될 수 있다.
적어도 부분적으로 스위치로서 동작할 수 있는 스트림 트래픽 관리기(1002)를 사용하여, 호스트 시스템으로부터의 데이터는 상호연결부(1102)로 그리고 이어서 하나 이상의 네트워크 커널(1104)로, 상호연결부(1106)로 그리고 이어서 하나 이상의 컴퓨트 커널(1108)로, 또는 가속기 중재 회로(908)를 통해 NIC 제어기(208)로 라우팅될 수 있다. 예를 들어, 스트림 트래픽 관리기(1002)는 지정된 플로우(예를 들어, 경로 또는 목적지)를 갖는 패킷들을 수신할 수 있다. 스트림 트래픽 관리기(1002)는 수신된 패킷들에 대한 플로우를 식별하고 식별된 플로우에 대응하는 목적지로 패킷들을 분배할 수 있다. 이것은 동적 영역(204)이 컴퓨트 기능들(예를 들어, 호스트 시스템(100)으로부터 오프로딩된 작업들의 하드웨어 가속)을 수행하고 네트워크 기능들을 동시에 수행할 수 있게 한다.
다른 예시로서, 도 11에서 예시된 아키텍처는 데이터(예를 들어, 패킷들)가 (예를 들어, 컴퓨트 커널(들) 및/또는 네트워크 커널(들)에 의한) 프로세싱을 위해 호스트 시스템(100)으로부터 동적 영역(204)으로, 그리고 (예를 들어, 컴퓨트 커널(들) 및/또는 네트워크 커널(들)에 의한) 프로세싱을 위해 호스트 시스템(100)에 역으로 또는 호스트 시스템(100)으로부터 동적 영역(204)으로, 그리고 NIC 제어기(208)를 통해 이더넷으로 나오게끔 흐르게 할 수 있고, 여기서 NIC 제어기(208)는 동적 영역(204)(예를 들어, 사용자 회로(1010 및/또는 1012))을 사용하여 데이터를 추가로 프로세싱할 수 있거나 또는 하지 않을 수 있다. 따라서, 호스트 시스템(100)은 프로세싱을 위해 데이터를 동적 영역(204)(예를 들어, 컴퓨트 커널(1108))으로 전송할 수 있다. 스트림 트래픽 관리기(1002)는 동적 영역(204)으로부터 출력되는 결과적인 데이터를 호스트 시스템(100)에 또는 NIC 제어기(208)에 역전송할지 여부를 결정할 수 있다.
도 11에서는 도시되지 않았지만, 다른 예시에서, 데이터는 컴퓨트 커널과 네트워크 커널(또는 NIC 제어기(208)에 연결된 사용자 회로) 사이에서 직접 교환될 수 있다.
도 12는 프로그래밍가능 IC(132)에서 구현되는 다른 예시적인 플랫폼(218)을 나타낸다. 도 12의 예시에서, NIC 제어기(208) 및 스트림 트래픽 관리기(1002)를 포함하는 정적 영역(202)의 일부가 도시된다. 정적 영역(202)의 다른 엘리먼트들은 도해의 편의를 위해 도시되지 않았다. 또한, NIC 제어기(208)의 컴포넌트들 간의 통신 인터페이스들은 별개의 진입 및 송출 통신 인터페이스들을 나타내는 것과는 대조적으로 보다 일반적으로 도시되어 있다.
도 12에서 도시된 아키텍처는 플랫폼(218) 및 NIC 제어기(208)의 능력들을 확장하는데 사용될 수 있는 보다 복잡하고 강력한 프로세싱을 보여주기 위한 예시의 목적으로 의도된 것이다. 이 예시에서, 동적 영역(204)은 복수의 도메인들로 세분화된다. 각 도메인은 특정 기능에 전용된다. 예를 들어, 동적 영역(204)은 NIC 확장 도메인(1202), 저장 도메인(1204), 스트림 도메인(1206), 및 메모리 매핑된 도메인(1208)을 포함한다. 일 양태에서, 각 도메인은 상이한 PR 영역으로서 구현된다.
NIC 확장 도메인(1202)은 가속 중재 회로(908)에 연결된 스트림 인터페이스(1210)를 포함할 수 있다. 스트림 인터페이스(1210)는 RDMA 회로(1212)에 연결된다. 스트림 인터페이스(1210)는 또한 스트림 도메인(1206) 내의 스트림 상호연결부(1230)에 그리고 스트림 대 메모리 매핑된 인터페이스(1228)에 연결된다. 스트림 대 메모리 매핑된 인터페이스(1228)는 도메인들(1206, 1208)을 가교화한다. 예를 들어, 인터페이스(1228)의 스트림 대 메모리 매핑 회로부는 도메인(1206)에 위치할 수 있는 반면, 인터페이스(1228)의 메모리 매핑 대 스트림 회로부는 도메인(1208)에 위치할 수 있다. NIC 확장 도메인(1202)은 NIC 코어(906)에 연결된 알고리즘 룩업 회로(1214) 및 BITW 인터페이스(904)에 연결된 계층 4 프로세싱 및 룩업 회로(1216)를 더 포함한다.
저장 도메인(1204)은 스트림 트래픽 관리기(1002)에 연결된 NVMe EP(1218)를 포함한다. NVMe EP(1218)는 또한 NVMe 대 NVMeF(1220)에 그리고 NVMe/집성/암호화 회로(1222)에 연결된다. NVMe 대 NVMeoF(1220)는 또한 NIC 확장 도메인(1202)의 RDMA(1212)에 연결된다. NVMe/집성/암호화 회로(1222)는 저장 도메인(1204)에 또한 포함된 PCIe RP(1224) 및 PCIe(1226)에 연결된다. PCIe RP(1224, 1226)는 외부 비휘발성 저장소(예컨대, SSD와 같은 비휘발성 저장소(136))에 연결될 수 있다.
스트림 도메인(1206)은 스트림 트래픽 관리기(1002)에 연결된 스트림 상호연결부(1230)를 포함한다. 스트림 도메인(1206)은 또한 스트림 상호연결부(1230)에 연결된 하나 이상의 스트림 커널(들)(1232)을 포함한다. 메모리 매핑된 도메인(1208)은 스트림 트래픽 관리기(1002)에 연결된 메모리 매핑된 상호연결부(1234)를 포함한다. 메모리 매핑된 도메인(1208)은 메모리 매핑된 상호연결부(1234)에 연결된 하나 이상의 메모리 매핑된 커널(들)(1236)을 더 포함한다. 메모리 매핑된 상호연결부(1234)는 하나 이상의 메모리 제어기(미도시됨)를 통해 하나 이상의 외부 DDR 메모리(예를 들어, 휘발성 메모리(134))에 연결될 수 있다. 스트림 대 메모리 매핑된 인터페이스(1228)는 또한 하나 이상의 메모리 제어기(미도시됨)를 통해 하나 이상의 외부 DDR 메모리(예를 들어, 휘발성 메모리(134))에 연결될 수 있다.
도 12는 예시를 목적으로 제공된 것이며 한정적인 것은 아니다. 다른 예시들에서, 도메인들의 하나 이상 또는 임의의 조합이 동적 영역(204)에서 임의의 주어진 시간에서 구현될 수 있다. 또한, 동적 부분적 재구성을 사용하여 필요에 따라 프로그래밍가능 IC(132)의 동작 동안에 특정 도메인들이 추가되고 및/또는 제거될 수 있다.
예를 들어, 플랫폼이 프로그래밍가능 IC(132)에서 구현되면, 스트림 도메인(1206) 및 메모리 매핑된 도메인(1208)만을 포함하도록 동적 영역(204)을 구성하기 위해 제1 부분적 구성 비트스트림이 프로그래밍가능 IC(132) 내로 로딩될 수 있다. 다른 시간에서, 저장 도메인(1204), 스트림 도메인(1206), 및 메모리 매핑된 도메인(1208)을 구현하도록 동적 영역(204)을 구성하기 위해 제2 부분적 구성 비트스트림이 프로그래밍가능 IC(132) 내로 로딩될 수 있다. 다른 시간에서, NIC 확장 도메인(1202), 저장 도메인(1204), 스트림 도메인(1206), 및 메모리 매핑된 도메인(1208)을 구현하도록 동적 영역(204)을 구성하기 위해 제3 부분적 구성 비트스트림이 프로그래밍가능 IC(132) 내로 로딩될 수 있다.
다른 양태에서, 각 도메인은 상이한 PR 영역으로서 구현된다. 따라서, 각각의 도메인에서 구현되는 회로부는 다른 도메인들 내의 회로부를 방해하지 않고서 시간의 경과에 따라 변경될 수 있다. 도메인들이 서로 인터페이싱하는 경우들에서, 연결 중인 PR 영역이 겪고 있는 부분적 재구성을 완료할 때까지 데이터 플로우들은 일시적으로 중단될 수 있다.
도 13은 본 명세서에서 설명되는 스마트 NIC 기능을 구현하는 프로그래밍가능 IC를 동작시키는 예시적인 방법(1300)을 도시한다. 일 양태에서, 프로그래밍가능 IC의 구성과 관련하여 도 13과 관련하여 설명되는 동작들은 호스트 시스템에 의해 수행되거나 또는 개시될 수 있다.
블록(1302)에서, 프로그래밍가능 IC가 디바이스에서 플랫폼을 구현한다. 플랫폼은 프로그래밍가능 IC의 정적 회로부에서 적어도 부분적으로 구현된다. 예를 들어, 호스트 시스템은 플랫폼을 지정하는 구성 비트스트림(예컨대, 전체적 또는 부분적 구성 비트스트림)을 비휘발성 메모리(136)에 기입할 수 있다. 프로그래밍가능 IC는 자체적으로 부트스트랩하고 부트 시 플랫폼에 대한 구성 비트스트림을 로딩할 수 있다. 플랫폼에 대한 구성 비트스트림은 동작의 지속기간 동안 프로그래밍가능 IC에 상주할 수 있다. 논의된 바와 같이, 구성 비트스트림은 정적 영역을 정의하고 정적 영역에서 플랫폼을 물리적으로 적어도 부분적으로 구현한다. 블록(1302)에서의 구성 비트스트림의 로딩은 또한 디바이스의 동적 영역을, 플랫폼을 구현하는 데 사용되지 않는 프로그래밍가능 IC의 부분으로서 정의할 수 있다.
플랫폼이 하나 이상의 PR 영역을 사용하여 구현되는 구현들에서, 플랫폼은 복수의 부분적 구성 비트스트림들을 로딩함으로써 지정될 수 있다. 예를 들어, 정적 영역에서 플랫폼의 일부를 구현하는 하나의 부분적 구성 비트스트림이 로딩될 수 있다. 플랫폼을 구현하는 데 사용되는 각 PR 영역에 대해, 해당 PR 영역에 대해 다른 부분적 구성 비트스트림이 로딩된다.
블록(1304)에서, 프로그래밍가능 IC는 호스트 시스템 및 네트워크와의 통신 링크들을 구축한다. 예를 들어, 플랫폼의 PCIe 제어기는 호스트 시스템과의 통신 링크를 구축한다. 플랫폼의 이더넷 인터페이스는 네트워크, 예컨대, 네트워크 내의 노드 또는 스위치와의 통신 링크를 구축한다. 플랫폼이 프로그래밍가능 IC에서 구현되면, 프로그래밍가능 IC는 호스트 시스템과 네트워크 사이에서 데이터를 왔다갔다 운송할 수 있다는 것을 이해해야 한다.
블록(1306)에서, 프로그래밍가능 IC는 디바이스의 동적 영역에서 사용자 지정 회로부를 구현한다. 예를 들어, 호스트 시스템은 부분적 구성 비트스트림을 내부에서 로딩함으로써 프로그래밍가능 IC의 부분적 재구성을 개시할 수 있다. 부분적 구성 비트스트림은 디바이스의 동적 영역에서 사용자 지정 회로부를 구현한다. 동적 영역이 단일 PR 영역을 포함하는 경우, 단일 부분적 구성 비트스트림이 로딩될 수 있다. 동적 영역이 복수의 PR 영역들을 포함하는 경우, 호스트 시스템은 프로그래밍가능 IC 내로의 복수의 부분적 구성 비트스트림들의 로딩을 개시할 수 있다. 예를 들어, 각 PR 영역에 대해 하나의 부분적 구성 비트스트림이 로딩될 수 있다. 어떤 경우든지, 사용자 지정 회로부를 구현하기 위해 동적 영역의 각 PR 영역에서 하나 이상의 커널이 구현될 수 있다.
일 양태에서, 사용자 지정 회로부를 구현하는 것의 일부로서, 통신 인터페이스들은 로딩되는 부분적 구성 비트스트림(들)과 연관된 메타데이터에 기초하여 선택적으로 인에이블되고 및/또는 디스에이블된다. 동적 영역이 복수의 PR 영역들을 포함하는 경우, 주어진 PR 영역에 대한 부분적 구성 비트스트림은 해당 특정 PR 영역에 커플링되는 NIC 제어기의 통신 인터페이스를 프로그래밍하는 데 필요한 메타데이터를 포함할 수 있다.
블록(1308)에서, 프로그래밍가능 IC는 사용자 지정 회로부를 사용하여 본 개시 내에서 설명된 바와 같은 하나 이상의 동작을 수행할 수 있다. 블록(1308)에서, 사용자 지정 회로부는 송출 및 유입 데이터 둘 다에 대해 비대칭적으로 데이터를 프로세싱하도록 동작가능하다. 즉, 유입 데이터는 동적 영역에서 하나 이상의 커널에 의해 프로세싱되거나 또는 이러한 커널을 사용하여 전혀 프로세싱되지 않는 반면, 송출 데이터는, 유입 데이터에 대해 수행된 프로세싱과는 독립적으로, 동적 영역에서 하나 이상의 상이한 커널에 의해 프로세싱되거나 또는 이러한 커널에 의해 전혀 프로세싱되지 않을 수 있다.
블록(1308)에서, 좌측의 블록들은 유입 데이터의 프로세싱을 나타내는 반면 우측의 블록들은 송출 데이터의 프로세싱을 나타낸다. 블록(1310)에서, 프로그래밍가능 IC는 네트워크로부터 데이터를 수신한다. 이더넷 인터페이스는 데이터를 수신하고 NIC 제어기에 데이터를 제공한다. 블록(1312)에서, 플랫폼 내의 NIC 제어기는 동적 영역 내의 사용자 지정 회로부와 데이터를 교환할 수 있다. 데이터는 소프트웨어 제어형 통신 인터페이스들 중 하나 이상으로부터 송출되고, 사용자 지정 회로부에서 프로세싱되어, 플랫폼으로 반환된다. 블록(1314)에서, 플랫폼은 프로세싱된 데이터를 호스트 시스템에 전송한다. 예를 들어, 데이터는 DMA 회로에 그리고 PCIe 제어기에 제공된다. PCIe 제어기는 프로세싱된 데이터를 호스트 시스템에 제공한다.
블록(1316)에서, 프로그래밍가능 IC는 호스트 시스템으로부터 데이터를 수신한다. PCIe 제어기는 호스트 시스템으로부터 데이터를 수신하고 DMA 회로에 데이터를 제공한다. DMA 회로는 플랫폼 내의 하나 이상의 다른 회로에 데이터를 제공한다. 블록(1318)에서, NIC 제어기는 동적 영역 내의 사용자 지정 회로부와 데이터를 교환할 수 있다. 데이터는 소프트웨어 제어형 통신 인터페이스들 중 하나 이상으로부터 송출되고, 사용자 지정 회로부에서 프로세싱되어, 플랫폼으로 반환된다. 블록(1320)에서, 플랫폼은 프로세싱된 데이터를 네트워크에 전송한다. 예를 들어, 데이터는 이더넷 인터페이스에 제공된다. 이더넷 인터페이스는 프로세싱된 데이터를 네트워크에 제공한다.
일 양태에서, 블록(1308)의 일부로서 또는 본 명세서에서 설명된 바와 같이 프로세서의 제어 하에 언제든지, 플랫폼의 소프트웨어 제어형 통신 인터페이스들 중 하나 이상은 턴 온되거나 또는 턴 오프될 수 있다. 예를 들어, 소프트웨어 제어형 통신 인터페이스들 각각은 동적 영역의 구현 시 특정 상태(온 또는 오프)에 놓일 수 있다. 프로그래밍가능 IC가 계속 동작함에 따라, 소프트웨어 제어형 통신 인터페이스들은 서로 독립적으로 그리고 동적 영역의 부분적 재구성과 독립적으로 턴 온되거나 또는 턴 오프될 수 있다.
예를 들어, 주어진 소프트웨어 제어형 통신 인터페이스가 턴 온될 수 있고, 그런 후, 동적 영역이 중단 없이 계속 동작하는 동안, 턴 오프될 수 있다. 일부 경우들에서, 소프트웨어 제어형 통신 인터페이스들은 자신에 연결된 동적 영역의 부분(예컨대, 특정 PR 영역)이 부분적 재구성을 겪고 있을 때 비활성화될 수 있다. PR 영역의 성공적인 부분적 재구성 시, 소프트웨어 제어형 통신 인터페이스는 다시 턴 온될 수 있다. 어떤 경우든, 설명된 통신 인터페이스들에 대한 동적 제어는 동적 영역에서 어떠한 부분적 재구성을 개시하는 것 없이 동적 영역을 통한 데이터 플로우들이 동적으로 변경될 수 있게 해준다.
블록(1322)에서, 트리거 이벤트가 검출되는지 여부에 대한 결정이 이루어진다. 일 양태에서, 호스트 시스템은 프로그래밍가능 IC에서 구현될 상이한 유형들의 사용자 지정 회로부에 대한 요청들을 수신할 수 있으며, 여기서 요청은 부분적 재구성을 위한 트리거 이벤트로 간주된다. 다른 예시에서, 트리거 이벤트는 프로그래밍가능 IC가 부분적 재구성이 필요함을 호스트 시스템에게 통지하게 하는, 프로그래밍가능 IC 자체에 의해 검출된 신호 또는 신호들의 조합일 수 있다. 어떠한 경우든, 트리거 이벤트를 검출하는 것에 응답하여, 방법(1300)은 블록(1306)으로 루프백한다. 트리거 이벤트를 검출하지 않은 것에 응답하여, 방법(1300)은 프로그래밍가능 IC가 플랫폼과 동적 영역 둘 다에 대한 현재 구성으로 계속 동작하는 블록(1324)으로 계속된다. 방법(1300)은 트리거 이벤트가 검출될 때까지 블록들(1322, 1324) 사이를 반복할 수 있다.
블록(1306)에서, 프로그래밍가능 IC가 부분적으로 재구성된다. 예를 들어, 호스트 시스템은 프로그래밍가능 IC 내로 하나 이상의 다른 부분적 구성 비트스트림을 로딩한다. 프로그래밍가능 IC는 동적 영역(예컨대, 동적 영역이 단일 PR 영역을 포함하는 경우)에서 완전히 새로운 사용자 지정 회로부를 구현할 수 있거나 또는 동적 영역의 하나 이상의 선택된 또는 모든 PR 영역에서 새로운/상이한 사용자 지정 회로부만을 구현할 수 있다. 또한, 동적 영역의 기존 구성들과 비교하여 동적 영역에서 구현되는 PR 영역들의 수는 변경될 수 있다.
본 명세서에서 설명되는 본 발명 구성들은 네트워크 트래픽과 인라인으로 기능들의 동적인, 예컨대 런타임 동안의, 삽입 및/또는 교체를 지원하는 프로그래밍가능 IC에서 구현되는 플랫폼을 예시한다. 프로그래밍가능 IC는, 플랫폼을 통해, 데이터 손실 없이 네트워크와 호스트 시스템 간에 네트워크 트래픽을 계속 전달할 수 있다. 삽입된 기능들은 플랫폼을 통한 데이터 플로우 내의 임의의 다양한 삽입 지점들에서 삽입될 수 있다.
도 14는 프로그래밍가능 IC 상에서 플랫폼을 구현하는 예시적인 방법(1400)을 도시한다. 블록(1402)에서, 프로그래밍가능 회로부의 정적 영역에서 적어도 부분적으로 구현되는 플랫폼이 디바이스 상에서 제공된다. 블록(1404)에서, 플랫폼과 통신하는 사용자 지정 회로부를 구현하도록 구성된 프로그래밍가능 회로부의 동적 영역이 디바이스 상에서 제공된다. 플랫폼은 프로그래밍가능 회로부의 동적 영역의 적어도 일부가 동적으로 재구성되는 동안 호스트 데이터 프로세싱 시스템과의 제1 통신 링크 및 네트워크와의 제2 통신 링크를 구축하고 유지하도록 구성된다.
도 15는 IC에 대한 예시적인 아키텍처(1500)를 도시한다. 아키텍처(1500)는 프로그래밍가능 IC(132)와 같은 본 명세서에서 설명된 바와 같은 프로그래밍가능 IC를 구현하는 데 사용될 수 있다. 예로서, 아키텍처(1500)는 필드 프로그래밍가능 게이트 어레이(field programmable gate array; FPGA)를 구현하는데 사용될 수 있다. 아키텍처(1500)는 또한 시스템 온 칩(system-on-chip; SoC) 유형의 IC를 나타낼 수 있다. SoC는 프로그램 코드와 하나 이상의 다른 회로를 실행하는 프로세서를 포함하는 IC이다. 다른 회로는 하드와이어드 회로부, 프로그래밍가능한 회로부, 및/또는 이들의 조합으로서 구현될 수 있다. 회로는 서로 및/또는 프로세서와 협력하여 동작할 수 있다.
도시된 바와 같이, 아키텍처(1500)는 여러 상이한 유형들의 프로그래밍가능 회로들, 예를 들어, 로직, 블록들을 포함한다. 예를 들어, 아키텍처(1500)는 멀티 기가비트 트랜스시버(multi-gigabit transceiver; MGT)(1501), 구성가능 로직 블록(configurable logic block; CLB)(1502), 랜덤 액세스 메모리 블록(random access memory block; BRAM)(1503), 입력/출력 블록(input/output block; IOB)(1504), 구성 및 클록 로직(구성/클록들)(1505), 디지털 신호 프로세싱 블록(digital signal processing block; DSP)(1506), 특수화된 I/O 블록들(1507)(예컨대, 구성 포트 및 클록 포트), 및 디지털 클록 관리기, 아날로그-디지털 컨버터, 시스템 모니터링 로직 등과 같은 기타 프로그래밍가능 로직(1508)을 포함한 방대한 개수의 상이한 프로그래밍가능 타일들을 포함할 수 있다.
일부 IC들에서, 각각의 프로그래밍가능 타일은 각각의 인접한 타일 내의 대응하는 상호연결 엘리먼트(INT)(1511)에 대한 표준화된 연결부들을 갖는 INT(1511)를 포함한다. 그러므로, INT들(1511)은 함께, 예시된 IC에 대한 프로그래밍가능 상호연결 구조물을 구현한다. 도 15의 상단부에 포함된 예시들에 의해 도시된 바와 같이, 각각의 INT(1511)는 또한 동일 타일 내의 프로그래밍가능 로직 엘리먼트에 대한 연결부들을 포함한다.
예를 들어, CLB(1502)는 사용자 로직을 구현하도록 프로그래밍될 수 있는 구성가능 로직 엘리먼트(configurable logic element; CLE)(1512) 및 단일 INT(1511)를 포함할 수 있다. BRAM(1503)은 하나 이상의 INT(1511)에 더하여 BRAM 로직 엘리먼트(BRAM logic element; BRL)(1513)를 포함할 수 있다. 일반적으로, 타일 내에 포함된 INT들(1511)의 개수는 타일의 높이에 좌우된다. 도시된 바와 같이, BRAM 타일은 다섯 개의 CLB와 동일한 높이를 갖지만, 다른 개수들(예컨대, 네 개)이 또한 사용될 수 있다. DSP 타일(1506)은 적절한 개수의 INT(1511)에 더하여 DSP 로직 엘리먼트(DSP logic element; DSPL)(1514)를 포함할 수 있다. IOB(1504)는, 예컨대 INT(1511)의 하나의 인스턴스에 더하여 I/O 로직 엘리먼트(I/O logic element; IOL)(1515)의 두 개의 인스턴스들을 포함할 수 있다. IOL(1515)에 연결된 실제 I/O 패드들은 IOL(1515)의 영역으로 한정되지 않을 수 있다.
도 15에서 도시된 예시에서, 다이의 중심 근처의, 예컨대, 영역들(1505, 1507, 1508)로 형성된, 수평 영역은 구성, 클록, 및 기타 제어 로직을 위해 사용될 수 있다. 이러한 수평 영역으로부터 연장하는 수직 영역들(1509)은 프로그래밍가능 IC의 폭에 걸쳐 클록들 및 구성 신호들을 분배하는데 사용된다.
도 15에서 도시된 아키텍처를 활용하는 일부 IC들은 IC의 대부분을 구성하는 정규의 컬럼식 구조를 분열시키는 추가적인 로직 블록들을 포함한다. 추가적인 로직 블록들은 프로그래밍가능 블록들 및/또는 전용 회로부일 수 있다. 예를 들어, PROC(1510)로서 도시된 프로세서 블록은 CLB 및 BRAM의 여러 컬럼들에 뻗쳐있다.
일 양태에서, PROC(1510)는 IC의 프로그래밍가능 회로부를 구현하는 다이의 일부로서 제조되는 전용 회로부로서, 예를 들어, 하드와이어드 프로세서로서 구현될 수 있다. PROC(1510)는 개별 프로세서, 예를 들어, 프로그램 코드를 실행할 수 있는 단일 코어에서부터 하나 이상의 코어, 모듈, 코프로세서, 인터페이스 등을 갖는 전체 프로세서 시스템에 이르기까지 복잡도가 다양한 상이한 프로세서 유형들 및/또는 시스템들 중 임의의 것을 나타낼 수 있다.
다른 양태에서, PROC(1510)는 아키텍처(1500)에서 생략될 수 있고 설명된 다른 다양한 프로그래밍가능 블록들 중 하나 이상으로 대체될 수 있다. 또한, 이러한 블록들은 프로그래밍가능 회로부의 다양한 블록들이 PROC(1510)의 경우와 같이 프로그램 코드를 실행할 수 있는 프로세서를 형성하는 데 사용될 수 있다는 점에서 "소프트 프로세서"를 형성하는 데 활용될 수 있다.
"프로그래밍가능 회로부"라는 문구는 IC 내의 프로그래밍가능 회로 엘리먼트들, 예를 들어 본 명세서에서 설명된 다양한 프로그래밍가능 또는 구성가능 회로 블록들 또는 타일들뿐만 아니라, IC 내로 로딩되는 구성 데이터에 따라 다양한 회로 블록들, 타일들, 및/또는 엘리먼트들을 선택적으로 커플링시키는 상호연결 회로부를 가리킨다. 예를 들어, CLB(1502) 및 BRAM(1503)과 같이 PROC(1510) 외부에 있는, 도 15에서 도시된 회로 블록들은 IC의 프로그래밍가능 회로부인 것으로 간주된다.
일반적으로, 프로그래밍가능 회로부의 기능은 구성 데이터가 IC 내로 로딩될 때까지 구축되지 않는다. 구성 비트들의 세트는 FPGA와 같은 IC의 프로그래밍가능 회로부를 프로그래밍하는 데 사용될 수 있다. 구성 비트(들)은 일반적으로 "구성 비트스트림"이라고 불리운다. 일반적으로, 프로그래밍가능 회로부는 구성 비트스트림을 IC 내로 먼저 로딩하지 않으면 동작하거나 기능하지 않는다. 구성 비트스트림은 프로그래밍가능 회로부 내에서 특정 회로 설계를 효과적으로 구현한다. 회로 설계는, 예를 들어, 프로그래밍가능 회로 블록들의 기능적 양태들과 다양한 프로그래밍가능 회로 블록들 간의 물리적 연결성을 지정한다.
"하드와이어드" 또는 "경화"된, 즉 프로그래밍할 수 없는 회로부는 IC의 일부로서 제조된다. 프로그래밍가능 회로부와는 달리, 하드와이어드 회로부 또는 회로 블록들은 구성 비트스트림의 로딩을 통한 IC의 제조 후에 구현되지 않는다. 하드와이어드 회로부는 일반적으로, 예를 들어, PROC(1510)와 같은 IC 내로 구성 비트스트림을 먼저 로딩하지 않고도 동작하는 전용 회로 블록들 및 상호연결부들을 갖는 것으로 간주된다.
일부 예시들에서, 하드와이어드 회로부는 IC 내의 하나 이상의 메모리 엘리먼트에 저장된 레지스터 설정들 또는 값들에 따라 설정되거나 선택될 수 있는 하나 이상의 동작 모드를 가질 수 있다. 동작 모드는 예를 들어, 구성 비트스트림을 IC 내로 로딩함으로써 설정될 수 있다. 이러한 능력에도 불구하고, 하드와이어드 회로부는 동작가능하고 IC의 일부로서 제조될 때 특정 기능을 갖기 때문에 하드와이어드 회로부는 프로그래밍가능 회로부로서 간주되지 않는다.
SoC의 경우, 구성 비트스트림은 프로그래밍가능 회로부 내에서 구현될 회로부 및 PROC(1510) 또는 소프트 프로세서에 의해 실행될 프로그램 코드를 지정할 수 있다. 일부 경우들에서, 아키텍처(1500)는 구성 비트스트림을 적절한 구성 메모리 및/또는 프로세서 메모리에 로딩하는 전용 구성 프로세서를 포함한다. 전용 구성 프로세서는 사용자 지정 프로그램 코드를 실행하지 않는다. 다른 경우들에서, 아키텍처(1500)는 구성 비트스트림을 수신하고, 구성 비트스트림을 적절한 구성 메모리 내로 로딩하고, 및/또는 실행을 위해 프로그램 코드를 추출하기 위해 PROC(1510)를 활용할 수 있다.
도 15는 프로그래밍가능 회로부, 예를 들어, 프로그래밍가능 패브릭(fabric)을 포함하는 IC를 구현하는 데 사용될 수 있는 예시적인 아키텍처를 예시하도록 의도된 것이다. 예를 들어, 컬럼 내의 로직 블록들의 개수, 컬럼들의 상대적 폭, 컬럼들의 개수 및 순서, 컬럼들 내에 포함된 로직 블록들의 유형, 로직 블록들의 상대적 크기, 및 도 15의 상단부에 포함된 상호연결/로직 구현부들은 단순히 예시에 불과하다. 예를 들어, 실제 IC에서는, 사용자 회로 설계의 효율적인 구현을 용이하게 하기 위해, CLB가 나타날 때마다 CLB의 하나보다 많은 인접한 열이 일반적으로 포함된다. 그러나, 인접한 CLB 컬럼들의 개수는 IC의 전체 크기에 따라 다를 수 있다. 또한, IC 내에서 PROC(1510)와 같은 블록들의 크기 및/또는 위치는 예시를 위한 것일 뿐이며 한정시키려고 의도한 것은 아니다.
설명의 목적을 위해, 여기에 개시된 다양한 발명적 개념들의 완전한 이해를 제공하기 위해 특정 명명법이 서술된다. 그러나, 본 명세서에서 사용되는 용어는 본 발명 구성들의 특정 양태들을 설명하기 위한 것일 뿐이며, 한정시키려고 의도한 것은 아니다.
여기서 정의되는 단수 형태들은 문맥이 명백히 달리 밝히지 않는 한, 복수 형태들도 포함하는 것으로 한다.
여기서 정의되는 "적어도 하나", "하나 이상", 및 "및/또는"의 용어들은 달리 명시적으로 진술되지 않는 한, 연산시 접속적이고 이접적인 개방형 표현들이다. 예를 들어, “A, B 및 C 중 적어도 하나”, “A, B, 또는 C 중 적어도 하나”, “A, B, 및 C 중 하나 이상”, “A, B, 또는 C 중 하나 이상”, 및 “A, B, 및/또는 C”의 표현들 각각은 A 단독, B 단독, C 단독, A와 B 둘 다, A와 C 둘 다, B와 C 둘 다, 또는 A, B 및 C 모두를 의미한다.
여기서 정의되는 "자동으로"의 용어는 인간 개입이 없음을 의미한다.
여기서 정의되는 "컴퓨터 판독가능 저장 매체"의 용어는 명령 실행 시스템, 장치, 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위한 프로그램 코드를 포함하거나 또는 저장하는 저장 매체를 의미한다. 여기서 정의되는 "컴퓨터 판독가능 저장 매체"는 일시적인 전파 신호 자체가 아니다. 컴퓨터 판독가능 저장 매체는, 비제한적인 예시로서, 전자 저장 디바이스, 자기 저장 디바이스, 광학 저장 디바이스, 전자기 저장 디바이스, 반도체 저장 디바이스, 또는 이들의 임의의 적절한 조합일 수 있다. 여기서 설명되는 바와 같은 다양한 형태의 메모리는 컴퓨터 판독가능 저장 매체의 예시들이다. 컴퓨터 판독가능 저장 매체의 보다 구체적인 예시들의 비배타적인 리스트는, 휴대용 컴퓨터 디스켓, 하드 디스크, RAM, ROM(read-only memory), EPROM(erasable programmable read-only memory) 또는 Flash 메모리, EEPROM(electronically erasable programmable read-only memory), SRAM(static random access memory), CD-ROM(portable compact disc read-only memory), DVD(digital versatile disk), 메모리 스틱, 플로피 디스크 등을 포함할 수 있다.
여기서 정의되는 "만약"의 용어는 문맥에 따라 "때" 또는 "시" 또는 "~에 응답으로" 또는 "~에 응답하여"를 의미한다. 따라서, "결정된다면" 또는 "[명시된 조건 또는 이벤트]가 검출된다면"의 문구는, 문맥에 따라, "결정 시", 또는 "결정에 응답하여", 또는 "[명시된 조건 또는 이벤트]의 검출 시," 또는 "[명시된 조건 또는 이벤트]의 검출에 응답으로" 또는 "[명시된 조건 또는 이벤트]를 검출한 것에 응답하여"를 의미하는 것으로 해석될 수 있다.
여기서 정의된 "~에 응답하여" 및 상기 기재된 바와 유사한 언어, 예를 들어 "만약", "때" 또는 "시"는 액션 또는 이벤트에 쉽게 응답하거나 반응하는 것을 의미한다. 응답 또는 반응은 자동적으로 수행된다. 따라서, 제2 액션이 제1 액션에 "응답하여" 수행된다면, 제1 액션의 발생과 제2 액션의 발생 사이에는 인과 관계가 있다. "~ 응답하여"의 용어는 인과 관계를 나타낸다.
여기서 정의되는 "프로세서"의 용어는 적어도 하나의 하드웨어 회로를 의미한다. 하드웨어 회로는 프로그램 코드에 포함된 명령어들을 수행하도록 구성될 수 있다. 하드웨어 회로는 집적 회로일 수 있다. 프로세서의 예시들은, 비제한적인 예시로서, 중앙 프로세싱 장치(CPU), 어레이 프로세서, 벡터 프로세서, 디지털 신호 프로세서(DSP), FPGA, 프로그래밍가능 로직 어레이(PLA), ASIC, 프로그래밍가능 로직 회로부, 및 제어기를 포함한다.
여기서 정의되는 "실시간"의 용어는 사용자 또는 시스템이 특정 프로세스 또는 결정이 내려지기에 충분히 즉각적이라고 감지하거나 또는 프로세서가 일부 외부 프로세스를 따라갈 수 있게 하는 처리 응답 수준을 의미한다.
여기서 정의되는 "실질적으로"의 용어는 인용된 특징, 파라미터, 또는 값이 정확하게 달성될 필요는 없지만, 예를 들어 허용오차, 측정 오차, 측정 정확도 한계, 및 당업자에게 알려진 기타 인자들을 비롯한 편차 또는 변동이 상기 특징이 제공하고자 의도했던 효과를 배제하지 않는 양만큼 발생할 수 있다는 것을 의미한다.
제1, 제2 등의 용어들은 다양한 엘리먼트들을 설명하기 위해 여기서 사용될 수 있다. 이러한 용어들은 달리 명시되지 않거나 또는 문맥이 달리 명료하게 나타내지 않는 한 하나의 엘리먼트를 다른 엘리먼트와 구별하기 위해서만 사용되기 때문에, 이러한 엘리먼트들은 이러한 용어들에 의해 한정되어서는 안된다.
컴퓨터 프로그램 제품은 프로세서로 하여금 여기서 설명된 본 발명 구성들의 양태들을 수행하게 하기 위한 컴퓨터 판독가능 프로그램 명령어들을 갖는 컴퓨터 판독가능 저장 매체(또는 매체들)를 포함할 수 있다. 본 개시 내에서, "프로그램 코드"의 용어는 "컴퓨터 판독가능 프로그램 명령어들"의 용어와 상호교환가능하게 사용된다. 본 명세서에서 설명되는 컴퓨터 판독가능 프로그램 명령어들은 컴퓨터 판독가능 저장 매체로부터 각각의 컴퓨팅/프로세싱 디바이스들로, 또는 네트워크, 예를 들어, 인터넷, LAN, WAN, 및/또는 무선 네트워크를 통해 외부 컴퓨터 또는 외부 저장 디바이스로 다운로딩될 수 있다. 네트워크는 구리 전송 케이블, 광 전송 섬유, 무선 전송, 라우터, 방화벽, 스위치, 게이트웨이 컴퓨터, 및/또는 에지 서버를 포함하는 에지 디바이스를 포함할 수 있다. 각각의 컴퓨팅/프로세싱 디바이스 내의 네트워크 어댑터 카드 또는 네트워크 인터페이스는 네트워크로부터 컴퓨터 판독가능 프로그램 명령어들을 수신하고 각각의 컴퓨팅/프로세싱 디바이스 내의 컴퓨터 판독가능 저장 매체에 저장하기 위해 컴퓨터 판독가능 프로그램 명령어들을 포워딩한다.
본 명세서에서 설명되는 본 발명 구성들을 위한 동작들을 수행하기 위한 컴퓨터 판독가능 프로그램 명령어들은 어셈블러 명령어, 명령어 세트 아키텍처(instruction-set-architecture; ISA) 명령어, 머신 명령어, 머신 종속 명령어, 마이크로코드, 펌웨어 명령어, 또는 객체 지향 프로그래밍 언어 및/또는 절차적 프로그래밍 언어를 비롯하여, 하나 이상의 프로그래밍 언어의 임의의 조합으로 작성된 소스 코드 또는 객체 코드 중 어느 하나일 수 있다. 컴퓨터 판독가능 프로그램 명령어들은 상태 설정 데이터를 포함할 수 있다. 컴퓨터 판독가능 프로그램 명령어들은, 사용자의 컴퓨터 상에서 완전히 실행되거나, 사용자의 컴퓨터 상에서 부분적으로 실행되거나, 독립형 소프트웨어 패키지로서 실행되거나, 일부는 사용자의 컴퓨터 상에서 실행되고 일부는 원격 컴퓨터 상에서 실행되거나, 또는 원격 컴퓨터나 서버 상에서 완전히 실행될 수 있다. 후자의 시나리오에서는, 원격 컴퓨터가 LAN 또는 WAN을 포함하는 임의의 유형의 네트워크를 통하여 사용자의 컴퓨터에 연결될 수 있거나, 또는 (예를 들어, 인터넷 서비스 제공자를 사용하여 인터넷을 통하여) 외부 컴퓨터에 대한 연결이 이루어질 수 있다. 일부 경우들에서, 예를 들어, 프로그래밍가능 로직 회로부, FPGA, 또는 PLA를 포함하는 전자 회로부는 본 명세서에서 설명된 본 발명 구성들의 양태들을 수행하기 위해, 전자 회로부를 개인화하도록 컴퓨터 판독가능 프로그램 명령어들의 상태 정보를 활용함으로써 컴퓨터 판독가능 프로그램 명령어들을 실행할 수 있다.
본 발명 구성들의 특정 양태들은 방법, 장치(시스템), 및 컴퓨터 프로그램 제품의 흐름도들 및/또는 블록도들을 참조하여 여기에서 설명된다. 흐름도들 및/또는 블록도들의 각각의 블록, 그리고 흐름도들 및/또는 블록도들 내의 블록들의 조합은 컴퓨터 판독가능 프로그램 명령어들, 예컨대, 프로그램 코드에 의해 구현될 수 있다는 것을 이해할 것이다.
이들 컴퓨터 판독가능 프로그램 명령어들은 범용 컴퓨터, 특수 목적 컴퓨터, 또는 머신을 생산하기 위한 기타의 프로그래밍가능한 데이터 프로세싱 장치의 프로세서에 제공될 수 있으며, 이로써 컴퓨터 또는 기타의 프로그래밍가능한 데이터 프로세싱 장치의 프로세서를 통하여 실행되는 이러한 명령어들은 순서도 및/또는 블록도의 블록 또는 블록들 내에서 지정된 기능들/동작들을 구현하기 위한 수단을 생성한다. 이러한 컴퓨터 판독가능 프로그램 명령어들은 또한, 명령어들이 내부에 저장되어 있는 컴퓨터 판독가능 저장 매체가 흐름도 및/또는 블록도의 블록 또는 블록들에서 지정된 동작들의 양태들을 구현하는 명령어들을 포함한 제조 물품을 포함하도록, 컴퓨터, 프로그래밍가능 데이터 프로세싱 장치, 및/또는 기타 디바이스들에게 특정 방식으로 기능할 것을 지시내릴 수 있는 컴퓨터 판독가능 저장 매체에 저장될 수 있다.
컴퓨터 판독가능 프로그램 명령어들은 또한, 컴퓨터, 기타 프로그래밍가능 장치, 또는 기타 디바이스 상에서 실행되는 명령어들이 흐름도 및/또는 블록도의 블록 또는 블록들에서 지정된 기능들을 구현하도록, 컴퓨터 구현 프로세스를 생산하기 위해 컴퓨터, 기타 프로그래밍가능 데이터 프로세싱 장치, 또는 기타 디바이스 내로 로딩되어, 일련의 동작들이 컴퓨터, 기타 프로그래밍가능 장치, 또는 기타 디바이스 상에서 수행되게 할 수 있다.
도면들에서의 흐름도 및 블록도들은 본 발명 구성의 다양한 양태들에 따른 시스템, 방법, 및 컴퓨터 프로그램 제품의 잠재적인 구현들의 아키텍처, 기능성, 및 동작을 나타낸다. 이와 관련하여, 흐름도 또는 블록도들에서의 각각의 블록은, 지정된 동작들을 구현하기 위한 하나 이상의 실행가능 명령어를 포함하는, 모듈, 세그먼트, 또는 명령어들의 일부분을 나타낼 수 있다.
일부 대안적인 구현들에서, 블록들에서 언급된 동작들은 도면들에서 언급된 순서를 벗어나서 발생할 수 있다. 예를 들어, 관련된 기능에 따라, 연속하여 도시된 두 개의 블록들은, 실질적으로 동시에 실행될 수 있거나, 또는 블록들은 때때로 반대 순서로 실행될 수 있다. 다른 예시들에서, 블록들은 일반적으로 오름순으로 수행될 수 있는 반면, 또 다른 예시들에서, 하나 이상의 블록은 바로 뒤따르지 않는 후속 블록 또는 다른 블록에서 결과들이 저장되고 활용되는 가변 순서로 수행될 수 있다. 또한, 블록도들 및/또는 흐름도의 각각의 블록, 및 블록도들 및/또는 흐름도에서의 블록들의 조합은 지정된 기능들 또는 동작들 또는 특수 목적용 하드웨어 및 컴퓨터 명령어들의 조합들을 수행하는 특수 목적용 하드웨어 기반의 시스템에 의해 구현될 수 있다는 것을 유의할 것이다.
아래의 청구범위에서 발견될 수 있는 모든 수단들 또는 단계 및 기능 엘리먼트들의 대응하는 구조물, 물질, 동작, 및 등가물은 구체적으로 청구된 다른 청구된 엘리먼트들과 조합하여 본 기능을 수행하기 위한 임의의 구조물, 물질, 또는 동작을 포함하도록 의도된 것이다.
디바이스는 프로그래밍가능 회로부의 정적 영역, 및 플랫폼과 통신하는 사용자 지정 회로부를 구현하도록 구성된 프로그래밍가능 회로부의 동적 영역에서, 적어도 부분적으로 구현되는 플랫폼을 포함한다. 플랫폼은 프로그래밍가능 회로부의 동적 영역의 적어도 일부가 동적으로 재구성되는 동안 호스트 데이터 프로세싱 시스템과의 제1 통신 링크 및 네트워크와의 제2 통신 링크를 구축하고 유지하도록 구성된다.
전술한 구현들 및 다른 구현들은 각각 다음의 특징들 중 하나 이상을 단독으로 또는 조합 형태로, 선택적으로 포함할 수 있다. 일부 예시적인 구현들은 다음의 특징들 모두를 조합 형태로 포함한다.
다른 양태에서, 플랫폼은 NIC 제어기에 커플링된 이더넷 인터페이스, 네트워크 인터페이스 카드 제어기에 커플링된 DMA 회로, 및 DMA 회로에 커플링된 PCIe 인터페이스를 포함한다.
다른 양태에서, 이더넷 인터페이스, DMA 회로, 또는 네트워크 인터페이스 카드 제어기 중 적어도 하나는 부분적으로 재구성가능한 영역에서 구현된다.
다른 양태에서, 사용자 지정 회로부는 패킷 프로세싱을 수행하도록 구성된다.
다른 양태에서, 플랫폼은 동적 영역에 연결된 통신 인터페이스를 갖는 NIC 제어기를 포함한다.
다른 양태에서, 통신 인터페이스는 MAC과 NIC 제어기의 제1 스테이지 사이에 위치된다.
다른 양태에서, 통신 인터페이스는 소프트웨어 활성화가능하다.
다른 양태에서, NIC 제어기는 복수의 상호연결된 스테이지들을 포함하고 복수의 상호연결된 스테이지들 중 적어도 하나는 통신 인터페이스를 갖는다.
다른 양태에서, 복수의 상호연결된 스테이지들의 제1 스테이지 및 제2 스테이지는 각각 동적 영역에 연결되도록 구성된 독립적인 통신 인터페이스를 갖는다.
다른 양태에서, 각각의 통신 인터페이스는 동적 영역 내의 상이한 부분적 재구성 영역에 연결되고 각각의 부분적 재구성 영역은 상이한 사용자 지정 회로부들을 구현하도록 독립적으로 재구성가능하다.
다른 양태에서, 플랫폼과 통신하는 상이한 사용자 지정 회로부를 구현하도록 동적 영역이 재구성되는 동안 플랫폼은 중단 없이 계속 동작한다.
방법은 디바이스 상에서, 프로그래밍가능 회로부의 정적 영역에서 적어도 부분적으로 구현되는 플랫폼을 제공하는 단계와, 디바이스 상에서, 플랫폼과 통신하는 사용자 지정 회로부를 구현하도록 구성된 프로그래밍가능한 회로부의 동적 영역을 제공하는 단계를 포함한다. 플랫폼은 프로그래밍가능 회로부의 동적 영역의 적어도 일부가 동적으로 재구성되는 동안 호스트 데이터 프로세싱 시스템과의 제1 통신 링크 및 네트워크와의 제2 통신 링크를 구축하고 유지하도록 구성된다.
전술한 구현들 및 다른 구현들은 각각 다음의 특징들 중 하나 이상을 단독으로 또는 조합 형태로, 선택적으로 포함할 수 있다. 일부 예시적인 구현들은 다음의 특징들 모두를 조합 형태로 포함한다.
다른 양태에서, 플랫폼은 NIC 제어기에 커플링된 이더넷 인터페이스, NIC 제어기에 커플링된 DMA 회로, 및 DMA 회로에 커플링된 PCIe 인터페이스를 포함한다.
다른 양태에서, 이더넷 인터페이스, DMA 회로, 또는 네트워크 인터페이스 카드 제어기 중 적어도 하나는 부분적으로 재구성가능한 영역에서 구현된다.
다른 양태에서, 사용자 지정 회로부는 패킷 프로세싱을 수행하도록 구성된다.
다른 양태에서, 방법은 플랫폼 내에서, 동적 영역에 연결된 통신 인터페이스를 갖는 NIC 제어기를 제공하는 단계를 포함한다.
다른 양태에서, 통신 인터페이스는 MAC과 NIC 제어기의 제1 스테이지 사이에 위치된다.
다른 양태에서, 방법은 소프트웨어 제어 하에 통신 인터페이스를 선택적으로 활성화하는 단계를 포함한다.
다른 양태에서, 방법은 네트워크 인터페이스 카드 제어기에서 복수의 상호연결된 스테이지들을 제공하는 단계 및 복수의 상호연결된 스테이지들 중 적어도 하나를 위한 통신 인터페이스를 제공하는 단계를 포함한다.
다른 양태에서, 방법은 복수의 상호연결된 스테이지들 중 제1 스테이지와 제2 스테이지를 제공하는 단계를 포함하고, 제1 스테이지와 제2 스테이지 각각은 동적 영역에 연결되도록 구성된 독립적인 통신 인터페이스를 갖는다.
다른 양태에서, 각각의 통신 인터페이스는 동적 영역 내의 상이한 부분적 재구성 영역에 연결되고 각각의 부분적 재구성 영역은 상이한 사용자 지정 회로부들을 구현하도록 독립적으로 재구성가능하다.
다른 양태에서, 방법은 플랫폼이 중단 없이 계속 동작하는 동안 플랫폼과 통신하는 상이한 사용자 지정 회로부를 구현하도록 동적 영역을 재구성하는 단계를 포함한다.
IC는 프로그래밍가능 회로부의 정적 영역에서 적어도 부분적으로 구현되는 플랫폼을 포함할 수 있으며, 플랫폼은 호스트 인터페이스 및 네트워크 인터페이스에 커플링된 네트워크 인터페이스 카드 제어기를 포함한다. IC는 또한 플랫폼과 통신하는 사용자 지정 회로부를 구현하도록 구성된 프로그래밍가능 회로부의 동적 영역을 포함할 수 있다. 사용자 지정 회로부는 하나 이상의 패킷 프로세싱 기능을 구현할 수 있다. 네트워크 인터페이스 카드 제어기는 동적 영역에 연결된 복수의 통신 인터페이스들을 포함한다. 플랫폼은 호스트 인터페이스를 사용하여 호스트 데이터 프로세싱 시스템과의 제1 통신 링크를 그리고 네트워크 인터페이스를 사용하여 네트워크와의 제2 통신 링크를 구축하고 유지하도록 구성될 수 있다. 프로그래밍가능 회로부의 동적 영역의 적어도 일부가 상이한 사용자 지정 회로부를 내부에서 구현하도록 동적으로 재구성되는 동안에 플랫폼은 네트워크와 호스트 데이터 프로세싱 시스템 사이에서 데이터를 계속 전송하도록 구성될 수 있다.
전술한 구현들 및 다른 구현들은 각각 다음의 특징들 중 하나 이상을 단독으로 또는 조합 형태로, 선택적으로 포함할 수 있다. 일부 예시적인 구현들은 다음의 특징들 모두를 조합 형태로 포함한다.
다른 양태에서, 네트워크 인터페이스는 이더넷 인터페이스를 포함한다.
다른 양태에서, 네트워크 인터페이스는 네트워크 인터페이스 카드 제어기의 제1 스테이지와 네트워크 인터페이스 사이에서 정적 영역에 위치한 중재 회로에 커플링된다. 복수의 통신 인터페이스들 중 제1 통신 인터페이스는 동적 영역 내의 사용자 지정 회로부를 중재 회로에 연결시킨다.
다른 양태에서, 중재 회로는 네트워크 인터페이스로부터 수신된 데이터를 네트워크 인터페이스 카드 제어기에 제공하지 않고서 상기 데이터를 네트워크에 대한 네트워크 인터페이스에 역으로 라우팅하도록 구성된다.
다른 양태에서, 중재 회로는 사용자 지정 회로부에 의한 프로세싱에 후속하여 데이터를 네트워크 인터페이스에 역으로 라우팅한다.
다른 양태에서, 중재 회로는 네트워크 인터페이스 카드 제어기로부터 수신된 데이터를 네트워크 인터페이스에 제공하지 않고서 상기 데이터를 네트워크 인터페이스 카드 제어기에 역으로 라우팅하도록 구성된다.
다른 양태에서, 중재 회로는 사용자 지정 회로부에 의한 프로세싱에 후속하여 데이터를 네트워크 인터페이스 카드 제어기에 역으로 라우팅한다.
다른 양태에서, 복수의 통신 인터페이스들이 호스트 데이터 프로세싱 시스템에 의해 선택적으로 인에이블된다.
다른 양태에서, 네트워크 인터페이스 카드 제어기는 복수의 스테이지들을 포함하고 복수의 통신 인터페이스들의 각각의 통신 인터페이스는 복수의 스테이지들 중 상이한 스테이지에 연결된다.
다른 양태에서, 동적 영역은 복수의 부분적 재구성 영역들을 포함하고 각각의 통신 인터페이스는 복수의 부분적 재구성 영역들 중 상이한 영역에 연결된다. 복수의 부분적 재구성 영역들 각각은 상이한 사용자 지정 회로부를 내부에서 구현하도록 독립적으로 재구성가능하다.
다른 양태에서, 호스트 인터페이스는 PCIe 인터페이스이다.
다른 양태에서, IC는 정적 영역에서 구현되는 DMA 회로를 포함할 수 있고, DMA 회로는 네트워크 인터페이스 카드 제어기 및 호스트 인터페이스에 연결된다. 메모리 제어기는 정적 영역에서 구현될 수 있다. 메모리 제어기는 DMA 회로 및 동적 영역 내의 사용자 지정 회로부에 연결될 수 있다.
다른 양태에서, 네트워크 인터페이스 카드 제어기는 네트워크 인터페이스에 연결된 네트워크 인터페이스 코어 및 DMA 회로에 연결된 가속기 중재 회로를 포함한다. 가속 중재 회로는 스트림 인터페이스를 통해 동적 영역의 복수의 부분적 재구성 영역들 중 하나 이상에 커플링된다. 각각의 부분적 재구성 영역은 상이한 기능을 구현할 수 있다.
다른 양태에서, 스트림 인터페이스는 복수의 부분적 재구성 영역들 중 제1 부분적 재구성 영역에서 구현되고 네트워크 인터페이스 제어기의 가속기 중재 회로에 연결된다. 사용자 지정 회로부는 복수의 부분적 재구성 영역들 중 하나 이상의 다른 영역에서 구현될 수 있다.
다른 양태에서, 복수의 부분적 재구성 영역들 중 하나 이상은 호스트 데이터 프로세싱 시스템으로부터 오프로딩된 컴퓨트 하드웨어 가속 작업들을 수행하도록 구성된 하나 이상의 커널 회로를 포함한다.
본 명세서에서 제공되는 발명 구성의 설명은 예시를 위한 것이며, 개시된 형태 및 예시들에 대해 망라적이거나 또는 한정적인 것을 의도한 것은 아니다. 본 명세서에서 사용되는 용어는 발명 구성의 원리, 시장에서 발견되는 기술들에 대한 실제적인 적용 또는 기술적 개선을 설명하고/하거나, 당업자가 본 명세서에서 개시된 발명 구성을 이해할 수 있게 하기 위해 선택되었다. 설명되는 발명 구성의 범위와 사상으로부터 벗어나지 않고서 많은 변형과 수정이 본 발명의 당업자에게 명백해질 것이다. 이에 따라, 이러한 특징들과 구현들의 범위를 나타낼 때에는, 전술한 개시보다는 이하의 청구항들을 참조해야 한다.

Claims (15)

  1. 집적 회로에 있어서,
    프로그래밍가능 회로부의 정적 영역에서 적어도 부분적으로 구현되는 플랫폼 - 상기 플랫폼은 호스트 인터페이스 및 네트워크 인터페이스에 커플링된 네트워크 인터페이스 카드 제어기를 포함함 -;
    상기 플랫폼과 통신하는 사용자 지정 회로부를 구현하도록 구성된 프로그래밍가능 회로부의 동적 영역
    을 포함하고,
    상기 사용자 지정 회로부는 하나 이상의 패킷 프로세싱 기능을 구현하고,
    상기 네트워크 인터페이스 카드 제어기는 상기 동적 영역에 연결된 복수의 통신 인터페이스들을 포함하고,
    상기 플랫폼은 상기 호스트 인터페이스를 사용하여 호스트 데이터 프로세싱 시스템과의 제1 통신 링크를 그리고 상기 네트워크 인터페이스를 사용하여 네트워크와의 제2 통신 링크를 구축하고 유지하도록 구성되며,
    상기 프로그래밍가능 회로부의 동적 영역의 적어도 일부가 상이한 사용자 지정 회로부를 내부에서 구현하도록 동적으로 재구성되는 동안에 상기 플랫폼은 상기 네트워크와 상기 호스트 데이터 프로세싱 시스템 사이에서 데이터를 계속 전송하도록 구성된 것인 집적 회로.
  2. 제1항에 있어서,
    상기 네트워크 인터페이스는 이더넷 인터페이스를 포함한 것인 집적 회로.
  3. 제1항에 있어서,
    상기 네트워크 인터페이스는 상기 네트워크 인터페이스 카드 제어기의 제1 스테이지와 상기 네트워크 인터페이스 사이에서 상기 정적 영역에 위치한 중재 회로에 커플링되며,
    상기 복수의 통신 인터페이스들 중 제1 통신 인터페이스는 상기 동적 영역 내의 상기 사용자 지정 회로부를 상기 중재 회로에 연결시키는 것인 집적 회로.
  4. 제3항에 있어서,
    상기 중재 회로는 상기 네트워크 인터페이스로부터 수신된 데이터를 상기 네트워크 인터페이스 카드 제어기에 제공하지 않고서 상기 데이터를 상기 네트워크에 대한 상기 네트워크 인터페이스에 역으로 라우팅하도록 구성된 것인 집적 회로.
  5. 제4항에 있어서,
    상기 중재 회로는 상기 사용자 지정 회로부에 의한 프로세싱에 후속하여 상기 데이터를 상기 네트워크 인터페이스에 역으로 라우팅하는 것인 집적 회로.
  6. 제3항에 있어서,
    상기 중재 회로는 상기 네트워크 인터페이스 카드 제어기로부터 수신된 데이터를 상기 네트워크 인터페이스에 제공하지 않고서 상기 데이터를 상기 네트워크 인터페이스 카드 제어기에 역으로 라우팅하도록 구성된 것인 집적 회로.
  7. 제5항에 있어서,
    상기 중재 회로는 상기 사용자 지정 회로부에 의한 프로세싱에 후속하여 상기 데이터를 상기 네트워크 인터페이스 카드 제어기에 역으로 라우팅하는 것인 집적 회로.
  8. 제1항에 있어서,
    상기 복수의 통신 인터페이스들은 상기 호스트 데이터 프로세싱 시스템에 의해 선택적으로 인에이블되는 것인 집적 회로.
  9. 제1항에 있어서,
    상기 네트워크 인터페이스 카드 제어기는 복수의 스테이지들을 포함하고, 상기 복수의 통신 인터페이스들의 각각의 통신 인터페이스는 상기 복수의 스테이지들 중 상이한 스테이지에 연결된 것인 집적 회로.
  10. 제9항에 있어서,
    상기 동적 영역은 복수의 부분적 재구성 영역들을 포함하고, 각각의 통신 인터페이스는 상기 복수의 부분적 재구성 영역들 중 상이한 영역에 연결되며;
    상기 복수의 부분적 재구성 영역들 각각은 상이한 사용자 지정 회로부를 내부에서 구현하도록 독립적으로 재구성가능한 것인 집적 회로.
  11. 제1항에 있어서,
    상기 호스트 인터페이스는 주변 컴포넌트 상호연결 익스프레스(Peripheral Component Interconnect Express; PCIe) 인터페이스인 것인 집적 회로.
  12. 제1항에 있어서,
    상기 정적 영역에서 구현되는 직접 메모리 액세스 회로 - 상기 직접 메모리 액세스 회로는 상기 네트워크 인터페이스 카드 제어기 및 상기 호스트 인터페이스에 연결됨 -; 및
    상기 정적 영역에서 구현되는 메모리 제어기 - 상기 메모리 제어기는 상기 직접 메모리 액세스 회로 및 상기 동적 영역 내의 상기 사용자 지정 회로부에 커플링됨 -
    를 더 포함하는 집적 회로.
  13. 제12항에 있어서,
    상기 네트워크 인터페이스 카드 제어기는 상기 네트워크 인터페이스에 연결된 네트워크 인터페이스 코어 및 상기 직접 메모리 액세스 회로에 연결된 가속기 중재 회로를 포함하고,
    상기 가속 중재 회로는 스트림 인터페이스를 통해 상기 동적 영역의 복수의 부분적 재구성 영역들 중 하나 이상에 커플링되며,
    각각의 부분적 재구성 영역은 상이한 기능을 구현하는 것인 집적 회로.
  14. 제13항에 있어서,
    상기 스트림 인터페이스는 상기 복수의 부분적 재구성 영역들 중 제1 부분적 재구성 영역에서 구현되고, 상기 복수의 부분적 재구성 영역들 중 하나 이상의 다른 영역에서 구현되는 상기 사용자 지정 회로부와 상기 네트워크 인터페이스 카드 제어기의 상기 가속기 중재 회로에 연결된 것인 집적 회로.
  15. 제13항에 있어서,
    상기 복수의 부분적 재구성 영역들 중 하나 이상은 상기 호스트 데이터 프로세싱 시스템으로부터 오프로딩된 컴퓨트 하드웨어 가속 작업들을 수행하도록 구성된 하나 이상의 커널 회로를 포함한 것인 집적 회로.
KR1020227008078A 2019-08-11 2020-08-10 프로그래밍가능 집적 회로를 사용하는 동적으로 재구성가능한 네트워킹 KR20220045022A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/537,605 2019-08-11
US16/537,605 US10990547B2 (en) 2019-08-11 2019-08-11 Dynamically reconfigurable networking using a programmable integrated circuit
PCT/US2020/045647 WO2021030282A1 (en) 2019-08-11 2020-08-10 Dynamically reconfigurable networking using a programmable integrated circuit

Publications (1)

Publication Number Publication Date
KR20220045022A true KR20220045022A (ko) 2022-04-12

Family

ID=72234973

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227008078A KR20220045022A (ko) 2019-08-11 2020-08-10 프로그래밍가능 집적 회로를 사용하는 동적으로 재구성가능한 네트워킹

Country Status (6)

Country Link
US (1) US10990547B2 (ko)
EP (1) EP4010984A1 (ko)
JP (1) JP2022544166A (ko)
KR (1) KR20220045022A (ko)
CN (1) CN114521254A (ko)
WO (1) WO2021030282A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102614429B1 (ko) * 2023-06-21 2023-12-14 김호중 재설정 가능한 시스템 프레임워크 및 서버시각 동기부를 포함하는 에지 디바이스용 시스템 온 모듈

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11144652B1 (en) * 2019-12-19 2021-10-12 Xilinx, Inc. Secure update of programmable integrated circuits in data center computing environments
US11687279B2 (en) * 2020-01-27 2023-06-27 Samsung Electronics Co., Ltd. Latency and throughput centric reconfigurable storage device
US11651111B2 (en) 2020-09-25 2023-05-16 Intel Corporation Enabling secure state-clean during configuration of partial reconfiguration bitstreams on FPGA
US11295000B1 (en) 2020-09-28 2022-04-05 Xilinx, Inc. Static configuration of accelerator card security modes
US11916552B2 (en) 2022-03-09 2024-02-27 Xilinx, Inc. Method for supporting multiple concurrent plugins in a programmable integrated circuit
US11983133B2 (en) * 2022-08-22 2024-05-14 Xilinx, Inc. Adaptive integrated programmable data processing unit

Family Cites Families (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6091263A (en) 1997-12-12 2000-07-18 Xilinx, Inc. Rapidly reconfigurable FPGA having a multiple region architecture with reconfiguration caches useable as data RAM
US6507211B1 (en) 1999-07-29 2003-01-14 Xilinx, Inc. Programmable logic device capable of preserving user data during partial or complete reconfiguration
US6204687B1 (en) 1999-08-13 2001-03-20 Xilinx, Inc. Method and structure for configuring FPGAS
US6526557B1 (en) 2000-07-25 2003-02-25 Xilinx, Inc. Architecture and method for partially reconfiguring an FPGA
US6625794B1 (en) 2000-11-06 2003-09-23 Xilinx, Inc. Method and system for safe device reconfiguration
US7174561B2 (en) 2001-04-13 2007-02-06 Emc Corporation MPEG dual-channel decoder data and control protocols for real-time video streaming
US6836842B1 (en) 2001-04-24 2004-12-28 Xilinx, Inc. Method of partial reconfiguration of a PLD in which only updated portions of configuration data are selected for reconfiguring the PLD
US6462579B1 (en) 2001-04-26 2002-10-08 Xilinx, Inc. Partial reconfiguration of a programmable gate array using a bus macro
US6573748B1 (en) 2001-11-06 2003-06-03 Xilinx, Inc. Programmable logic device with output register for specifying memory space during reconfiguration
US6912602B2 (en) 2001-11-20 2005-06-28 Broadcom Corporation System having two or more packet interfaces, a switch, and a shared packet DMA circuit
US6759869B1 (en) 2002-06-05 2004-07-06 Xilinx, Inc. Large crossbar switch implemented in FPGA
US6810514B1 (en) 2002-07-03 2004-10-26 Xilinx, Inc. Controller arrangement for partial reconfiguration of a programmable logic device
US20040019729A1 (en) 2002-07-29 2004-01-29 Kelley Richard A. Buffer management and transaction control for transition bridges
US6907595B2 (en) * 2002-12-13 2005-06-14 Xilinx, Inc. Partial reconfiguration of a programmable logic device using an on-chip processor
US7124338B1 (en) 2003-10-10 2006-10-17 Xilinx, Inc. Methods of testing interconnect lines in programmable logic devices using partial reconfiguration
US7065623B2 (en) 2003-11-20 2006-06-20 International Business Machines Corporation Bandwidth utilization in a PPRC system
US7191256B2 (en) 2003-12-19 2007-03-13 Adams Lyle E Combined host interface controller for conducting communication between a host system and multiple devices in multiple protocols
US8478921B2 (en) 2004-03-31 2013-07-02 Silicon Laboratories, Inc. Communication apparatus implementing time domain isolation with restricted bus access
US7577707B2 (en) 2004-04-21 2009-08-18 International Business Machines Corporation Method, system, and program for executing data transfer requests
US7233532B2 (en) 2004-04-30 2007-06-19 Xilinx, Inc. Reconfiguration port for dynamic reconfiguration-system monitor interface
US7599299B2 (en) 2004-04-30 2009-10-06 Xilinx, Inc. Dynamic reconfiguration of a system monitor (DRPORT)
US7138820B2 (en) 2004-04-30 2006-11-21 Xilinx, Inc. System monitor in a programmable logic device
US7218137B2 (en) 2004-04-30 2007-05-15 Xilinx, Inc. Reconfiguration port for dynamic reconfiguration
US7109750B2 (en) 2004-04-30 2006-09-19 Xilinx, Inc. Reconfiguration port for dynamic reconfiguration-controller
US8713239B2 (en) 2004-06-15 2014-04-29 Nxp B.V. Bus controller for handling split transactions
US7224184B1 (en) * 2004-11-05 2007-05-29 Xilinx, Inc. High bandwidth reconfigurable on-chip network for reconfigurable systems
TWI298840B (en) 2005-07-13 2008-07-11 Via Tech Inc Bus device used in computer system
US7509617B1 (en) 2005-09-12 2009-03-24 Xilinx, Inc. Design methodology to support relocatable bit streams for dynamic partial reconfiguration of FPGAs to reduce bit stream memory requirements
US7546572B1 (en) 2005-09-20 2009-06-09 Xilinx, Inc. Shared memory interface in a programmable logic device using partial reconfiguration
US7302625B1 (en) 2005-11-21 2007-11-27 Xilinx, Inc. Built-in self test (BIST) technology for testing field programmable gate arrays (FPGAs) using partial reconfiguration
US7477072B1 (en) 2006-01-17 2009-01-13 Xilinx, Inc. Circuit for and method of enabling partial reconfiguration of a device having programmable logic
JP4908017B2 (ja) 2006-02-28 2012-04-04 富士通株式会社 Dmaデータ転送装置及びdmaデータ転送方法
US7640527B1 (en) 2006-06-29 2009-12-29 Xilinx, Inc. Method and apparatus for partial reconfiguration circuit design for a programmable device
US7478357B1 (en) 2006-08-14 2009-01-13 Xilinx, Inc. Versatile bus interface macro for dynamically reconfigurable designs
US7724815B1 (en) 2007-02-27 2010-05-25 Xilinx, Inc. Method and apparatus for a programmably terminated receiver
US7983253B2 (en) * 2007-04-20 2011-07-19 Nuon, Inc. Time-space carrier sense multiple access
US7518396B1 (en) 2007-06-25 2009-04-14 Xilinx, Inc. Apparatus and method for reconfiguring a programmable logic device
US7746099B1 (en) 2008-01-11 2010-06-29 Xilinx, Inc. Method of and system for implementing a circuit in a device having programmable logic
US20100030927A1 (en) 2008-07-29 2010-02-04 Telefonaktiebolaget Lm Ericsson (Publ) General purpose hardware acceleration via deirect memory access
US9454368B2 (en) 2009-01-21 2016-09-27 Vmware, Inc. Data mover permitting data transfer without transferring data between application and operating system
US8451281B2 (en) 2009-06-23 2013-05-28 Intel Corporation Shared virtual memory between a host and discrete graphics device in a computing system
US8504373B2 (en) 2009-07-02 2013-08-06 Nuance Communications, Inc. Processing verbal feedback and updating digital video recorder (DVR) recording patterns
US8359448B1 (en) 2009-07-17 2013-01-22 Xilinx, Inc. Specific memory controller implemented using reconfiguration
US8415974B1 (en) 2011-03-09 2013-04-09 Xilinx, Inc. Methods and circuits enabling dynamic reconfiguration
US8707314B2 (en) 2011-12-16 2014-04-22 Advanced Micro Devices, Inc. Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations
US8719750B1 (en) 2012-11-12 2014-05-06 Xilinx, Inc. Placement and routing of a circuit design
US8928351B1 (en) 2013-03-13 2015-01-06 Xilinx, Inc. Emulating power domains in an integrated circuit using partial reconfiguration
EP2858323A1 (en) * 2013-10-01 2015-04-08 Enyx SA A method and a device for decoding data streams in reconfigurable platforms
KR102147993B1 (ko) 2013-11-14 2020-08-25 삼성전자주식회사 불휘발성 메모리 시스템 및 그것의 동작 방법
US9218443B1 (en) 2014-11-12 2015-12-22 Xilinx, Inc. Heterogeneous multiprocessor program compilation targeting programmable integrated circuits
US9257987B1 (en) 2015-01-12 2016-02-09 Altera Corporation Partial reconfiguration using configuration transaction layer packets
KR20160087224A (ko) 2015-01-13 2016-07-21 삼성전자주식회사 메모리 컨트롤러 및 이를 포함하는 메모리 시스템
US9722613B1 (en) * 2015-09-28 2017-08-01 Xilinx, Inc. Circuit arrangement for and a method of enabling a partial reconfiguration of a circuit implemented in an integrated circuit device
GB2546343A (en) 2016-01-15 2017-07-19 Stmicroelectronics (Grenoble2) Sas Apparatus and methods implementing dispatch mechanisms for offloading executable functions
US11119835B2 (en) * 2017-08-30 2021-09-14 Intel Corporation Technologies for providing efficient reprovisioning in an accelerator device
US10573598B2 (en) 2017-09-28 2020-02-25 Xilinx, Inc. Integration of a programmable device and a processing system in an integrated circuit package
US11580054B2 (en) 2018-08-24 2023-02-14 Intel Corporation Scalable network-on-chip for high-bandwidth memory
US10447273B1 (en) * 2018-09-11 2019-10-15 Advanced Micro Devices, Inc. Dynamic virtualized field-programmable gate array resource control for performance and reliability
CN112970010A (zh) 2018-11-09 2021-06-15 赛灵思公司 流式传输平台流和架构
US10725942B2 (en) 2018-11-09 2020-07-28 Xilinx, Inc. Streaming platform architecture for inter-kernel circuit communication for an integrated circuit
US10924430B2 (en) 2018-11-09 2021-02-16 Xilinx, Inc. Streaming platform flow and architecture for an integrated circuit

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102614429B1 (ko) * 2023-06-21 2023-12-14 김호중 재설정 가능한 시스템 프레임워크 및 서버시각 동기부를 포함하는 에지 디바이스용 시스템 온 모듈

Also Published As

Publication number Publication date
EP4010984A1 (en) 2022-06-15
JP2022544166A (ja) 2022-10-17
CN114521254A (zh) 2022-05-20
WO2021030282A1 (en) 2021-02-18
US10990547B2 (en) 2021-04-27
US20210042252A1 (en) 2021-02-11

Similar Documents

Publication Publication Date Title
KR20220045022A (ko) 프로그래밍가능 집적 회로를 사용하는 동적으로 재구성가능한 네트워킹
US10997106B1 (en) Inter-smartNIC virtual-link for control and datapath connectivity
Le et al. UNO: Uniflying host and smart NIC offload for flexible packet processing
US10778521B2 (en) Reconfiguring a server including a reconfigurable adapter device
Firestone et al. Azure accelerated networking:{SmartNICs} in the public cloud
Zhuo et al. Slim:{OS} Kernel Support for a {Low-Overhead} Container Overlay Network
Byma et al. Fpgas in the cloud: Booting virtualized hardware accelerators with openstack
Tarafdar et al. Designing for FPGAs in the Cloud
US11327918B2 (en) CPU hot-swapping
US20180357086A1 (en) Container virtual switching
US11431681B2 (en) Application aware TCP performance tuning on hardware accelerated TCP proxy services
CA3167334C (en) Zero packet loss upgrade of an io device
US20230185732A1 (en) Transparent encryption
US11394700B2 (en) Proxy service through hardware acceleration using an IO device
US11055106B1 (en) Bootstrapping a programmable integrated circuit based network interface card
Al-Aghbari et al. Cloud-based FPGA custom computing machines for streaming applications
CN111492628A (zh) 用于在加速交换的情况下进行nic端口减少的技术
US20220166718A1 (en) Systems and methods to prevent packet reordering when establishing a flow entry
US11916552B2 (en) Method for supporting multiple concurrent plugins in a programmable integrated circuit
US20230325265A1 (en) Hardware acceleration in a network interface device
Krishnan et al. OpenPATH: Application aware high-performance software-defined switching framework
Byma Virtualizing FPGAs for cloud computing applications
US20230259352A1 (en) Software updates in a network interface device
US20230091195A1 (en) Flow offloading method for a programmable network interface controller (nic)
Yang et al. Isolation guarantee for efficient virtualized network i/o on cloud platform