A code refinement methodology for performance-improved synthesis from C

  • Authors:
  • Greg Stitt;Frank Vahid;Walid Najjar

  • Affiliations:
  • University of California, Riverside;Also with the Center for Embedded Computer Systems, UC Irvine;University of California, Riverside

  • Venue:
  • Proceedings of the 2006 IEEE/ACM international conference on Computer-aided design
  • Year:
  • 2006

Quantified Score

Hi-index 0.00

Visualization

Abstract

Although many recent advances have been made in hardware synthesis techniques from software programming languages such as C, the performance of synthesized hardware commonly suffers due to the use of C constructs and coding practices that are not appropriate for hardware. Most previous approaches to addressing this problem require drastic changes to coding practice. We present an approach that instead requires only minimal changes but yields significant speedups. In this approach, a software developer initially writes C code as they normally would, and then applies simple refinement guidelines to only the performance-critical code regions, which are the regions most likely to be synthesized to hardware. Alternatively, if a designer is aware of performance-critical parts of the application, the guidelines could be followed during development. In this study, we analyze dozens of embedded benchmarks to determine the most common C coding practices that limit hardware performance, and introduce coding guidelines to make the code more amenable to synthesis. Those guidelines typically require minimal coding effort, generally consisting of less than ten lines of code for each guideline. The guidelines typically represent modifications that require designer knowledge, making the guidelines difficult or impossible for synthesis tools to automate. We apply these guidelines to six benchmarks, resulting in average speedups of 3.5x compared to synthesis from the original code with a negligible software size and performance overhead.