Trident is a compiler for floating point algorithms written in C, producing circuits in reconfigurable logic that exploit the parallelism available in the input description. Trident automatically extracts parallelism and pipelines loop bodies using conventional compiler optimizations and scheduling techniques. Trident also provides an open framework for experimentation, analysis, and optimization of floating point algorithms on FPGAs and the flexibility to easily integrate custom floating point libraries.
The Trident compiler builds on and shares code from the SeaCucumber (SC) compiler. Trident extends SC in several new directions: by accepting floating point operations, parsing C input, performing extensive operation scheduling and generating VHDL. Trident also provides a framework for additional compiler optimization and research at different levels of abstraction.
The Trident compiler consists of four principal steps shown in the figure above. The first step is the LLVM C/C++ front-end. The LLVM (Low Level Virtual Machine) compiler framework is used by Trident to parse input languages and produce a low-level platform independent object code. The second step transforms this low-level object code into the Trident predicated intermediate representation (IR). The Trident IR is further optimized and mapped into a specific hardware library of operations. The third step schedules and pipelines the hardware operations according to the resources available. Finally, the scheduled operations are synthesized into VHDL.
The latest release is available here.
Building from source has some requirements including:
The build manual is useful in outlining how all of these utilities are used.