All Projects → abs-tudelft → Fletcher

abs-tudelft / Fletcher

Licence: apache-2.0
Fletcher: A framework to integrate FPGA accelerators with Apache Arrow

Projects that are alternatives of or similar to Fletcher

Lxp32 Cpu
A lightweight, open source and FPGA-friendly 32-bit CPU core based on an original instruction set
Stars: ✭ 27 (-81.25%)
Mutual labels:  fpga, vhdl
Space Invaders Vhdl
Space Invaders game implemented with VHDL
Stars: ✭ 142 (-1.39%)
Mutual labels:  fpga, vhdl
Clash Compiler
Haskell to VHDL/Verilog/SystemVerilog compiler
Stars: ✭ 958 (+565.28%)
Mutual labels:  fpga, vhdl
Spinalhdl
Scala based HDL
Stars: ✭ 696 (+383.33%)
Mutual labels:  fpga, vhdl
J1sc
A reimplementation of a tiny stack CPU
Stars: ✭ 64 (-55.56%)
Mutual labels:  fpga, vhdl
Audioxtreamer
ASIO driver, Usb Driver, FX2LP Firmware, VHDL Fpga, Schematics & PCB Layout for the AudioXtreamer, a USB 2.0 32ch Audio/Midi interface for retrofitting into digital mixers/interfaces.
Stars: ✭ 22 (-84.72%)
Mutual labels:  fpga, vhdl
Fpga Fft
A highly optimized streaming FFT core based on Bailey's 4-step large FFT algorithm
Stars: ✭ 45 (-68.75%)
Mutual labels:  fpga, vhdl
Edalize
An abstraction library for interfacing EDA tools
Stars: ✭ 270 (+87.5%)
Mutual labels:  fpga, vhdl
Haddoc2
Caffe to VHDL
Stars: ✭ 57 (-60.42%)
Mutual labels:  fpga, vhdl
Spi Fpga
SPI master and slave for FPGA written in VHDL
Stars: ✭ 50 (-65.28%)
Mutual labels:  fpga, vhdl
Vunit
VUnit is a unit testing framework for VHDL/SystemVerilog
Stars: ✭ 438 (+204.17%)
Mutual labels:  fpga, vhdl
Neorv32
A small and customizable full-scale 32-bit RISC-V soft-core CPU and SoC written in platform-independent VHDL.
Stars: ✭ 106 (-26.39%)
Mutual labels:  fpga, vhdl
F32c
A 32-bit RISC-V / MIPS ISA retargetable CPU core & SoC, 1.63 DMIPS/MHz
Stars: ✭ 338 (+134.72%)
Mutual labels:  fpga, vhdl
Aes
AES-128 hardware implementation
Stars: ✭ 25 (-82.64%)
Mutual labels:  fpga, vhdl
Hal
HAL – The Hardware Analyzer
Stars: ✭ 298 (+106.94%)
Mutual labels:  fpga, vhdl
Image Processing
Image Processing Toolbox in Verilog using Basys3 FPGA
Stars: ✭ 31 (-78.47%)
Mutual labels:  fpga, vhdl
intfftk
Fully pipelined Integer Scaled / Unscaled Radix-2 Forward/Inverse Fast Fourier Transform (FFT) IP-core for newest Xilinx FPGAs (Source language - VHDL / Verilog). GNU GPL 3.0.
Stars: ✭ 43 (-70.14%)
Mutual labels:  fpga, vhdl
simple-riscv
A simple three-stage RISC-V CPU
Stars: ✭ 14 (-90.28%)
Mutual labels:  fpga, vhdl
Vexriscv
A FPGA friendly 32 bit RISC-V CPU implementation
Stars: ✭ 1,041 (+622.92%)
Mutual labels:  fpga, vhdl
Simon speck ciphers
Implementations of the Simon and Speck Block Ciphers
Stars: ✭ 74 (-48.61%)
Mutual labels:  fpga, vhdl

Fletcher logo

Fletcher: A framework to integrate FPGA accelerators with Apache Arrow

License Last Commit

Fletcher is a framework that helps to integrate FPGA accelerators with tools and frameworks that use Apache Arrow in their back-ends.

Apache Arrow specifies an in-memory format targeting large datasets and provides libraries for various languages to interface with the data in that format. Arrow prevents the need for serialization between different language run-times and provides zero-copy inter-process communication of datasets. Languages that have Arrow libraries (under development) include C, C++, Go, Java, JavaScript, Python, Ruby and Rust.

While many software projects can benefit from these advantages, hardware accelerated applications have also seen serious serialization bottlenecks. Fletcher focuses on FPGA accelerators. Through Fletcher and Arrow, interfacing efficiently between FPGA accelerator and high-level language runtimes is made available to all the supported languages.

Given a set of Arrow Schemas, Fletcher generates the following:

  • A high-performance, easy-to-use hardware interface for your accelerator kernel:
    • You provide a range indices of your Arrow RecordBatch (rather than byte address).
    • You receive (or supply) streams of the data-type specified by the schema (rather than bus words).
    • No pointer arithmetic, reordering, buffering, etc.. required - Fletcher does this for you, with high throughput (think system bandwidth).
  • A template for the accelerator kernel (to be implemented manually or using high-level synthesis)
    • You connect directly to streams of data from/to your RecordBatch rather than some memory bus interface.

Fletcher overview

Apache Arrow support

  • Fletcher currently supports reading/writing from/to multiple Arrow RecordBatches with an Arrow Schema created from any (nested) combination of:

    • Fixed-width primitives (ints, float, etc...)
    • Lists (strings, vectors, etc...)
    • Structs
    • Validity bitmaps
  • In the future we would like to support:

    • Sparse and dense unions
    • Dictionaries
    • Chunked tabular structures (Arrow::Table)

Platform support

  • Fletcher is vendor-agnostic. Our core hardware descriptions and generated code are vendor independent; we don't use any vendor IP.

  • You can simulate a Fletcher based design without a specific target platform.

  • Tested simulators include the free and open-source GHDL and the proprietary Mentor Graphics Questa/Modelsim, and Xilinx Vivado XSIM.

  • The following platforms are (partially) supported (may be work-in-progress):

Current state

Our framework is functional, but experimental and under heavy development.

Especially the development branch (which is currently our main branch) may break without notice. Some larger examples and the supported platforms are quite hard to integrate in a CI pipeline (they would take multiple days to complete and would incur significant costs for platforms such as Amazon's EC F1). For now, these larger examples and platform support resides in separate repositories (shown above) and are tested against a specific tag of this repository.

Further reading

Tutorials:

Hardware design flow:

  • Fletcher Design Generator - The design generator converts a set of Arrow Schemas to a hardware design and provides templates for your kernel.
  • Hardware library - All Fletcher core hardware components used by the design generator.

Software design flow:

Example projects

External projects using Fletcher:

Publications

If you used or studied Fletcher, please cite:

  • J. Peltenburg, J. van Straten, L. Wijtemans, L. van Leeuwen, Z. Al-Ars, and H.P. Hofstee, Fletcher: A Framework to Efficiently Integrate FPGA Accelerators with Apache Arrow*, in 29th International Conference on Field Programmable Logic and Applications (FPL) (2019) pp. 270–277.

Additional publications:

  • J. Peltenburg, J. van Straten, M. Brobbel, H.P. Hofstee, and Z. Al-Ars, Supporting Columnar In-memory Formats on FPGA: The Hardware Design of Fletcher for Apache Arrow*, in Applied Reconfigurable Computing, edited by C. Hochberger, B. Nelson, A. Koch, R. Woods, and P. Diniz (Springer International Publishing, Cham, 2019) pp. 32–47
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].