FPGA computing with Debian and derivatives
FPGA (Field-programmable gate array) can be programmed to perform a particular computation in hardware. And when the array is large enough, it can perform many such computations 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.
FPGA vendors coming to mind first are Altera, Lattice and Xilinx [2]. 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 [3,4,5].
Debian had the ZTEX [3] in its distribution, removed since there was only limited gain over the use of upstream's pages, see ztex-ezusb:
- their boards have schematics available and are prepared for IO, application acceleration,
the company regularly contributes to http://OpenCores.org, and
- their API is Free.
While the ZTEX boards use Xilinx FPGAs themselves, that vendor supports Linux also directly, also for the boards to run the OS themselves. See FPGA/Xilinx for details.
FPGA and the DFSG
FPGA commonly take their "layout"/"program" from some 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 some 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 emulators, but that is not fun. So, as a consequence, we can have the bitstreams and all tools relying on FPGA technologies only in contrib.
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. Most advanced are
See also
FPGA/Lattice - The first FPGA with a completely open source tool chain
FPGA/ToDo - ideas for this page to develop
FPGA/Altera - notes about using Altera FPGAs
Logic synthesis - logic synthesis for hardware design
Groups
OpenCores: hosting for open cores
OHRW: CERN Open Hardware repository
Qi Hardware: started by OpenMoko people, created the Ben NanoNote and the Milkymist One
M-Labs: seems to have been spun out of Qi Hardware
Open Processor Foundation: foundation formed around resurrecting the SuperH architecture after patents expired
Numato Lab: produces FPGA boards with open board designs and using open tools
Ports
Software
fpgatools: toolchain for programming FPGAs, only supports Xilinx XC6SLX9
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)
Migen: Python-based tool to automate the VLSI design process
Adapt: tool for controlling configurable logic devices like FPGAs and CPLDs through various JTAG controllers
Yosys: framework for Verilog RTL synthesis.
MyHDL: turns Python into a hardware description and verification language
Chisel: hardware construction language based on Scala
Arachne-pnr: place and route support for Lattice Semiconductor iCE40LP/HX1K
Project IceStorm: tools for the bitstream format of Lattice iCE40 FPGAs
Qflow: complete tool chain for synthesizing digital circuits
Cores
OpenRISC: open source RISC CPU
mor1kx: an OpenRISC implementation
MiSoC: SoC based on LM32 or OpenRISC
OpenSPARC: open release of Sun Microsystems' UltraSPARC T1 microprocessor
Rocket: RISC-V implementation
lowRISC: based on 64-bit RISC-V ISA
Propeller 1: open multicore microcontroller
IceStorm: Lattice iCE40 FPGA reverse engineering project
J Core CPUs: open designs for SuperH CPUs
OpenSoC Fabric: network-on-chip
GRLIB IP Library: integrated set of reusable IP cores, designed for system-on-chip (SOC) development, focussed on SPARC
Elphel x393_sata: AHCI/SATA stack under the GNU GPL.
Elphel primitives: replacements for the proprietary Xilinx FPGA primitives
MIAOW GPU: open source GPU based on Southern Islands ISA by AMD
Hardware
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
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
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)
Resources
FPGALibre: links to lots of FPGA resources
FPGA Central: forum for FPGA discussions
FPGA CPU News: Exploring Parallel Computer Architecture with FPGAs