5. Restrictions

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 added with Pipeline function constraint), a custom top-level function must be specified. The top-level function has to be one specified with Pipeline function constraint, or a wrapper function that simply calls multiple sub-functions that are all specified with Pipeline function constraint (Function Pipelining).

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).