Abstract

One impediment to the uptake of high-level synthesis (HLS) design methodologies is their lack of support for constructs frequently employed by software engineers - a primary example being dynamic memory allocation routines. No commercial HLS tool supports these constructs, forcing designers to rewrite programs to remove any dynamic memory allocation function calls (e.g.malloc(), free()), replacing them with statically allocated data. This shortcoming limits the portability of C/C++ descriptions, may introduce software bugs, and forces users to overestimate memory requirements, consuming precious on-chip BRAM resources. We address these problems by extending the capabilities of modern HLS tools through introduction of a tool-independent, HLS-friendly C library of five dynamic memory allocation schemes. Additionally, we developed a benchmark suite to evaluate and compare all five allocation schemes for their performance, area and memory trade-offs. We use the high-level synthesis tool, LegUp, to conduct our experiments. Our results indicate that each allocator in our library is best-suited for certain applications, in terms of performance, area and memory usage. We provide usage guidelines to assist HLS developers in selecting an appropriate allocation scheme.

Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call