Differences between revisions 74 and 75
Revision 74 as of 2017-09-11 08:57:23
Size: 10831
Editor: ?BobHam
Comment: Noting defunct nature of opencores.org group and adding librecores.org and FOSSi Foundation
Revision 75 as of 2017-12-23 09:43:12
Size: 10964
Editor: PaulWise
Comment: SymbiFlow
Deletions are marked like this. Additions are marked like this.
Line 62: Line 62:
   * [[https://symbiflow.github.io/|SymbiFlow]]: FLOSS Verilog to bitstream FGPA synthesis flow for Xilinx 7-Series FPGAs and iCE40

FPGA computing with Debian and derivatives

FPGA (Field-programmable gate array) can be programmed to perform a particular computation in hardware. And since these arrays are huge, many such computations can be performed in parallel. This resembles the execution of code on the GPU, just that the GPU can other than the FPGA not be changed in its functionality.

The flexibility of FPGAs makes them come in various flavours. They usually come on PCI or USB-pluggable boards, or they occupy a CPU slot. And when on a separate board, they may have some extra intelligence with them, which may be capable of running Linux but the FPGA technology itself is completely OS agnostic. The FPGA itself typically features hundreds of I/O ports. A few are needed for e.g. a clock, and you want a communication channel to program it, and then you got quite an array of ports the control an amazing number of motors, switches or to read from a vast number of sensors. Basic control logic can be directly on the FPGA. Typical applications are in data acquisition, especially when the influx of data is so enormous that regular CPUs could not possibly cope or when a central processing unit wants to delegate lower level tasks. If the FPGA's sensory input is from a computer, the FPGA may act like a purpose-built co-processor to accelerate a computation.

FPGA vendors coming to mind first are Altera, ?Atmel, Lattice and Xilinx. When aiming at just getting some problem with FPGA solved with that machine attached to the net or to the USB port in a Debian compatible manner, there may be several options. The hardware section below lists a few.

FPGA and the DFSG

FPGA commonly take their "layout"/"program" from memory local to the FPGA. The program executed on the FPGA then does not touch that configuration but moves data to it and reads the results. The code of the FPGA is prepared in a Hardware Description Language (HDL), where VHDL and Verilog are the ones seen most often. All would be fine if the tools to prepare the initial bitstream for the FPGA were Freely available. And for the better FPGA they are not even free as in beer. There are HDL simulators but any such do not help real world problems. So, as a consequence, as of today we can have the bitstreams only in non-free and all tools relying on FPGA technologies only in contrib. A very recent exception is the Free toolchain for the smallest Lattice FPGAs.

There is a range of Open Hardware boards featuring FPGA now available. However, these still need the FPGAs themselves from the above mentioned chip manufacturer. And none of these officially endorse Open Source technologies to interact with their hardware. For a series of smaller, i.e. better understandable, chips some reverse engineered programming solution exists. This may be considered a DFSG-compliant solution. The largest community with the easiest to use tool chain may be for the small Lattice chips with. Our FPGA/Lattice page features a tiny tutorial and references to the community's reference designs to access the boards' features.

FPGA and the community

To employ FPGA technologies has enormous ecological advantages - the computation is so much faster with so little energy used for the acceleration. And the bitstreams produced are produced for the FPGA, in complete ignorance of the desktop operating system communicating for it. Hence - we should find ways to collaborate all across the Open Source landscape.

See also




  • In Debian
  • Upcoming targets to be packaged
    • Migen: Python-based tool to automate the VLSI design process

    • MyHDL: turns Python into a hardware description and verification language

    • Chisel: hardware construction language based on Scala

  • Others (please create an Intent to pack (ITP) if volunteering to prepare a respective package)

    • SymbiFlow: FLOSS Verilog to bitstream FGPA synthesis flow for Xilinx 7-Series FPGAs and iCE40

    • Torc: toolchain for programming FPGAs from xilinx, support most of Xilinx devices

    • OpenPR: an IDE based on torc.

    • Debit: Reverse-engineering project to generate bitstream for xilinx then altera.

    • RapidSmith: Java tool for programming FPGA Xilinx virtex 4 and 5.

    • fpgasm: create bare-metal FPGA designs without Verilog or VHDL (requires non-free Xilinx software)

    • Sébastien Bourdeauducq has some FPGA-related projects

    • Adapt: tool for controlling configurable logic devices like FPGAs and CPLDs through various JTAG controllers

    • Qflow: complete tool chain for synthesizing digital circuits

    • OpenFPGA: Silego ?GreenPak4



  • Xilinx: produces FPGA hardware

  • ZTEX: produces FPGA boards whose schematics are available in PDF form without CAD sources

  • Papilio: produces FPGA boards whose Eagle design files are available under a Creative Commons license

  • Armadeus: produces FPGA-ARM

  • SciEngines

  • The Mixxeo: digital video mixer using MiSoC, not yet released

  • Milkymist One: FPGA based device for live video effects using open software, open board design and open CPU core (LM32 based)

  • Numato Opsis: FPGA based open video platform open design and primarily be used with the open source firmware found at http://hdmi2usb.tv

  • Numato Lab: produces FPGA boards with open board designs and using open tools

  • Cheap FPGA Development Boards: a list of cheap FPGA dev boards and what to look for in a dev board

  • Archipelago: open source FPGA research project (code)