Skip to content
Synthesizable Higher-Order Functions (Patterns) for C++
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

HOPS: Higher-Order Functions (Patterns) for C++ Hardware Synthesis

Higher-order functions represent common algorithmic patterns: Function Composition, Reduction Trees, List Traversals, and Networks. However, traditional software implementations are not synthesizable; they rely on dynamic runtime features that are not supported when compiling static hardware circuits. Consequently, Higher-Order Functions are not available in C++ synthesis toolchains that are used to implement hardware circuits.

This repository demonstrates how Higher-Order Functions can be provided using a techinque known as C++ Template Metaprogramming that provides runtime-like (dynamic) features at compile time (statically). C++ Metaprogramming is traditionally considered complex and overly verbose. Fortunately, new features in the C++ language spec have simplified this complexity.

HOPS is a library of Higher-Order Functions for C++ Hardare Synthesis tools. In this repository we have provided functions, testbenches, and application examples demonstrating how to use our higher-order functions. We have tested these functions in Vivado 2017.4-2018.2.

Directory Structure

  • include --- Our library of Higher-Order Functions. (See this directory for function descriptions).
  • examples --- Tests and application examples using our Higher-Order Functions
  • docs --- Document directory, which includes our paper at CODES 2018 on this work.

Using our Library

To use our library, add the include/ directory to your compiler include path with the -I flag. You will also need to use the -std=c++11 flag.


This work is released under a BSD-3 License.

Version Log

  • Torino Release: Initial release. Fully-Parallel (Unrolled) Higher-Order functions.
You can’t perform that action at this time.