Designing Modular Hardware Accelerators in C with ROCCC 2.0

While FPGA-based hardware accelerators have repeatedly been demonstrated as a viable option, their programmability remains a major barrier to their wider acceptance by application code developers. These platforms are typically programmed in a low level hardware description language, a skill not common among application developers and a process that is often tedious and error-prone. Programming FPGAs from high level languages would provide easier integration with software systems as well as open up hardware accelerators to a wider spectrum of application developers. In this paper, we present a major revision to the Riverside Optimizing Compiler for Configurable Circuits (ROCCC) designed to create hardware accelerators from C programs. Novel additions to ROCCC include (1) intuitive modular bottom-up design of circuits from C, and (2) separation of code generation from specific FPGA platforms. The additions we make do not introduce any new syntax to the C code and maintain the high level optimizations from the ROCCC system that generate efficient code. The modular code we support functions identically as software or hardware. Additionally, we enable user control of hardware optimizations such as systolic array generation and temporal common subexpression elimination. We evaluate the quality of the ROCCC 2.0 tool by comparing it to hand-written VHDL code. We show comparable clock frequencies and a 18% higher throughput. The productivity advantages of ROCCC 2.0 is evaluated using the metrics of lines of code and programming time showing an average of 15x improvement over hand-written VHDL.

[1]  David Pellerin,et al.  Practical FPGA programming in C , 2005 .

[2]  Bruce A. Draper,et al.  Loop fusion and temporal common subexpression elimination in window-based loops , 2001, Proceedings 15th International Parallel and Distributed Processing Symposium. IPDPS 2001.

[3]  Walid A. Najjar,et al.  A Compiler Intermediate Representation for Reconfigurable Fabrics , 2006, 2006 International Conference on Field Programmable Logic and Applications.

[4]  Walid A. Najjar,et al.  Compiler generated systolic arrays for wavefront algorithm acceleration on FPGAs , 2008, 2008 International Conference on Field Programmable Logic and Applications.

[5]  Maya Gokhale,et al.  Stream-oriented FPGA computing in the Streams-C high level language , 2000, Proceedings 2000 IEEE Symposium on Field-Programmable Custom Computing Machines (Cat. No.PR00871).

[6]  Walid A. Najjar,et al.  Compiled hardware acceleration of Molecular Dynamics code , 2008, 2008 International Conference on Field Programmable Logic and Applications.

[7]  Richard Chamberlain,et al.  Programming an FPGA-based Super Computer Using a C-to-VHDL Compiler: DIME-C , 2007, Second NASA/ESA Conference on Adaptive Hardware and Systems (AHS 2007).

[8]  Walid A. Najjar,et al.  Input data reuse in compiling window operations onto reconfigurable hardware , 2004, LCTES '04.

[9]  Frank Vahid,et al.  New decompilation techniques for binary-level co-processor generation , 2005, ICCAD-2005. IEEE/ACM International Conference on Computer-Aided Design, 2005..

[10]  Walid A. Najjar,et al.  Efficient hardware code generation for FPGAs , 2008, TACO.

[11]  Sandeep K. Shukla,et al.  Hardware Coprocessor Synthesis from an ANSI C Specification , 2009, IEEE Design & Test of Computers.