Cyborg FPGA Driver Proposal

This spec proposes to provide the initial design for Cyborg’s FPGA driver.

Problem description

A Field Programmable Gate Array(FPGA) is an integrated circuit designed to be configured by a customer or a designer after manufacturing. The advantage lies in that they are sometimes significantly faster for some applications because of their parallel nature and optimality in terms of the number of gates used for a certain process. Hence, using FPGA for application acceleration in cloud has been becoming desirable.

There is a management framwork in Cyborg 1 for heterogeneous accelerators, tracking and deploying FPGAs. This spec will add a FPGA driver for Cyborg to manage specific FPGA devices.

Use Cases

  • When Cyborg agent starts or does resource checking periodically, the Cyborg FPGA driver should enumerate the list of the FPGA devices, and report the details of all available FPGA accelerators on the host, such as BDF(Bus, Device, Function), PID(Product id) VID(Vendor id), IMAGE_ID and PF(Physical Function)/VF(Virtual Function) type.

  • When user uses empty FPGA regions as their accelerators, Cyborg agent will call driver’s program() interface. Cyborg agent should provide BDF of PF/VF, and local image path to the driver. More details can be found in ref 2.

  • When there maybe more thant one vendor fpga card on a host, or on different hosts in the cluster, Cyborg agent can discover the wendors easiy and intelligently by Cyborg FPGA driver, and call the correct driver to execute it’s operations, such as discover() and program().

Proposed changes

In general, the goal is to develop a Cyborg FPGA driver that supports discover/program interfaces for FPGA accelerator framework.

The driver should include the follow functions: 1. discover() driver reports devices as following:

  "vendor": "0x8086",
  "product": "bcc0",
  "pr_num": 1,
  "devices": "0000:be:00:0",
  "path": "/sys/class/fpga/intel-fpga-dev.0",
  "regions": [
    {"vendor": "0x8086",
      "product": "bcc1",
      "regions": 1,
      "devices": "0000:be:00:1",
      "path": "/sys/class/fpga/intel-fpga-dev.1"

pr_num: partial reconfiguration region numbers.
  1. program(device_path, image) program the image to a PR region specified by device_path. device_path: the sys path of accelerator device. image: The local path of programming image.

Image Format



Data model impact

FPGA driver will not touch Data model. The Cyborg Agent can call FPGA driver to update the database during the discover/program operations.

REST API impact

The related FPGA accelerator APIs is out of scope for this spec. The FPGA management framework for Cyborg 1 will alter the proposal.

Security impact


Notifications impact


Other end user impact


Performance Impact


Other deployer impact

Deployers should install the specific FPGA management stack that the driver depends on.

Please see ref 2 for details.

Developer impact

There will be some developer impact vis-à-vis new functionality that will be available to devs.



Primary assignee:

Shaohe Feng <> Dolpher Du <>

Work Items

  • Implement the cyborg-fpga-driver in this spec.


  • Cyborg API Spec

  • Cyborg Agent Spec

  • Cyborg Driver Spec

  • Cyborg Conductor Spec


  • Unit tests will be added to test Cyborg FPGA driver.

  • Functional tests will be added to test Cyborg FPGA driver.

Documentation Impact

Document FPGA driver in the Cyborg project


  • Cyborg API Spec

  • Cyborg Agent Spec

  • Cyborg Driver Spec

  • Cyborg Conductor Spec