Code Generation from a Domain-specific Language for C-based HLS of Hardware Accelerators

As today’s computer architectures are becoming more and more heterogeneous, a plethora of options including CPUs, GPUs, DSPs, reconfigurable logic (FPGAs), and other application-specific processors come into consideration for close-to-sensor processing. Especially, in the domain of image processing on mobile devices, among numerous design challenges, a very stringent energy budget is of utmost importance, making embedded GPUs and FPGAs ideal targets for implementation.

Recently, the Hipacc framework was proposed as a means for automatic code generation of image processing algorithms for embedded GPUs, based on a Domain-Specific Language (DSL). Despite of huge advancements in High-Level Synthesis (HLS) for FPGAs, designers are still required to have detailed knowledge about coding techniques and the targeted architecture to achieve efficient solutions. As a remedy, in this work, we propose code generation techniques for C-based HLS from a common high-level DSL description targeting FPGAs. Our approach includes FPGA-specific memory architectures for handling point and local operators, numerous high-level transformations, and automatic test bench generation. We evaluate our approach by comparing the resulting hardware accelerators to existing frameworks in terms of performance and resource requirements. Moreover, we assess the achieved energy efficiency in contrast to software implementations, generated by Hipacc from the same code base, executed on GPUs.

  author       = {Reiche, Oliver and Schmid, Moritz and Hannig, Frank and Membarth, Richard and Teich, Jürgen},
  booktitle    = {Proceedings of the International Conference on Hardware/Software Codesign and System Synthesis (CODES+ISSS)},
  venue        = {New Dehli, India},
  title        = {{Code Generation from a Domain-specific Language for C-based HLS of Hardware Accelerators}},
  pages        = {17:1--17:10},
  articleno    = {17},
  numpages     = {10},
  year         = 2014,
  month        = oct,
  date         = {2014-10-12/2014-10-17},
  doi          = {10.1145/2656075.2656081},
  organization = {ACM}