  Implementing image processing algorithms using FPGAs or ASICs can improve
energy efficiency by orders of magnitude over optimized CPU, DSP, or GPU code.
These efficiency improvements are crucial for enabling new applications on
mobile power-constrained devices, such as cell phones or AR/VR headsets.
Unfortunately, custom hardware is commonly implemented using a waterfall
process with time-intensive manual mapping and optimization phases. Thus, it
can take years for a new algorithm to make it all the way from an algorithm
design to shipping silicon. Recent improvements in hardware design tools, such
as C-to-gates High-Level Synthesis (HLS), can reduce design time, but still
require manual tuning from hardware experts.
  In this paper, we present HWTool, a novel system for automatically mapping
image processing and computer vision algorithms to hardware. Our system maps
between two domains: HWImg, an extensible C++ image processing library
containing common image processing and parallel computing operators, and
Rigel2, a library of optimized hardware implementations of HWImg's operators
and backend Verilog compiler. We show how to automatically compile HWImg to
Rigel2, by solving for interfaces, hardware sizing, and FIFO buffer allocation.
Finally, we map full-scale image processing applications like convolution,
optical flow, depth from stereo, and feature descriptors to FPGA using our
system. On these examples, HWTool requires on average only 11% more FPGA area
than hand-optimized designs (with manual FIFO allocation), and 33% more FPGA
area than hand-optimized designs with automatic FIFO allocation, and performs
similarly to HLS.
