85. higher order functions for introductory hardware development
Name: Dustin Alexander Richmond
Grad Year: 2018
As tools for High Level Synthesis development have grown in power and expressiveness in the last decade, so too have the expectations that software engineers will soon be able to easily create hardware designs and a new generation of hardware developers will taught using High Level Synthesis tools. However, this software-developer centric realty is still far from being achieved. One challenge is the gap between the features of modern introductory languages, like Python, Haskell, and Java, and the limited feature set available in High-Level Synthesis tools using C/C++. Software developers must struggle with tools that lack most of the features they are accustomed to: Higher Order functions (map, filter, reduce in Python), lists, recursion, and type inference. In this paper, we show our work on a synthesizable C++ implementation of the features listed above: Recursion, Type Inference, and Higher Order functions. Our work is not limited to a single toolchain and requires no modifications to existing tools. To demonstrate the power of what we have created we create several common hardware patterns from a limited set of primitives and demonstrate its simplicity by comparing it to standard C++ with nested for-loops. We also demonstrate the similarity of our code with Python, despite vastly different use-cases and target architectures.
Industry Application Area(s)
Internet, Networking, Systems | Semiconductor