.. highlight:: c .. _restrictions: Restrictions ============ LegUp has the following restrictions in this release. 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 (:ref:`function_pipelining`). LegUp C/C++ Library -------------------- Bit-level Operation Library +++++++++++++++++++++++++++++ When using the bit-level operation APIs, all index and width arguments must be constant integers (:ref:`bit_level_operation_library`). 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. 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).