LegUp has the following restrictions in this release.
5.1. Hybrid Flow¶
The processor-accelerator hybrid flow is currently limited to Intel FPGAs only in the full licensed version of LegUp.
5.2. Struct Support¶
LegUp automatically attempts to split up all structs into their individual elements, but this may not be possible in some cases.
When there are structs that cannot be automatically split up, the user has to manually split them up in C, when targeting Xilinx, Lattice, Microsemi, and Achronix FPGAs.
For more details, please refer to
Structs section in Optimization Guide chapter.
5.3. Function Pipelining¶
When function pipelining feature is used (i.e., when one or more functions are
Pipeline function constraint), a custom top-level function must
be specified. The top-level function has to be one specified with
function constraint, or a wrapper function that simply calls multiple
sub-functions that are all specified with
Pipeline function constraint
5.4. LegUp C/C++ Library¶
5.4.1. Bit-level Operation Library¶
When using the bit-level operation APIs, all index and width arguments must be constant integers (Bit-level Operation Library).
5.4.2. Streaming Library¶
A FIFO can only be written to by one function and read from by another function. It cannot be both written and read by the same function. In addition, there cannot be multiple functions writing to the same FIFO or multiple functions reading from the same fifo.
5.5. Using Pre-existing Hardware Modules¶
LegUp allows connecting existing hardware modules to the hardware generated by LegUp. Currently, an existing hardware module that is connected to LegUp-generated hardware cannot access any memories. All arguments need to be passed in by value. An existing hardware module cannot be invoked in a pipelined section (within a pipelined loop/function). In addition, an existing hardware module cannot invoke other modules (functions or other custom Verilog modules).