A Journey into DSL Design using Generative Programming: FPGA Mapping of Image Border Handling through Refinement

Özkan, Mehmet Akif; Pérard-Gayot, Arsène; Membarth, Richard; Slusallek, Philipp; Teich, Jürgen; Hannig, Frank

Field Programmable Gate Arrays (FPGAs) are continually improving their computing capabilities and energy efficiency. Yet, programming FPGAs remains a time-consuming task and requires expert knowledge to obtain good performance. Recent advancements in High-Level Synthesis (HLS) promise to solve this problem. However, today’s HLS tools still require vendor-specific low-level optimizations in the form of compiler hints and code restructuring. Despite the pursuit of new programming methodologies for many-core, multi-threading, or vector architectures, the FPGA community mostly tries to improve the design techniques from existing programming languages that are either sequential or developed for other computing platforms. In this paper, we use a state-of-the-art functional language that offers explicit control over code refinement to design border handling circuits. This allows us to produce high-level, elegant code descriptions that can be easily refined to low-level hardware designs. Additionally, these descriptions can be exposed to software developers in the form of either a DSL or library.

In Proceedings of the Fifth International Workshop on FPGAs for Software Programmers (FSP), pp. 1-9, Dublin, Ireland, August 31, 2018

@inproceedings{oezkan2018fpgaborderhandling,
  author       = {Özkan, Mehmet Akif and Pérard-Gayot, Arsène and Membarth, Richard and Slusallek, Philipp and Teich, Jürgen and Hannig, Frank},
  address      = {Dublin, Ireland},
  booktitle    = {Proceedings of the Fifth International Workshop on FPGAs for Software Programmers (FSP)},
  title        = {{A Journey into DSL Design using Generative Programming: FPGA Mapping of Image Border Handling through Refinement}},
  pages        = {1--9},
  year         = 2018,
  month        = aug,
  date         = {2018-08-31},
  doi          = {},
  organization = {VDE}
}