Intel® High Level Synthesis Compiler Pro Edition: User Guide

ID 683456
Date 3/28/2022
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

B. Intel® HLS Compiler Pro Edition Restrictions

When creating your IP using the HLS compiler, be aware of the current set of software and programming restrictions.

C++ Language Restrictions

The Intel® HLS Compiler accepts C++ code.

  • A component cannot include virtual functions, function pointers, or bit fields.
  • Function-scoped static variables that are a part of the component cannot use function arguments for initialization.
  • A component or task function cannot contain an irreducible loop. That is, loops in component and task functions must have only one entry point into the loop.
C++ restrictions
  • The HLS compiler does not support using lambda functions as components.
Class membership
  • HLS component functions cannot be a C++ class member. However, you can declare your component function as a wrapper function. This wrapper function can call a member function of a class or a part of a namespace.
Exception handling
  • A component cannot contain exception handling.
Library calls
  • The HLS compiler does not currently support calls to C++ runtime libraries on Windows, including calls from the testbench code.
Library functions
  • A component cannot contain standard C or C++ library functions, unless they are explicitly supported by header files provided with the Intel® HLS Compiler.
Multiple inheritance
  • The HLS compiler does not support classes with multiple inheritance used as parameters. You may use classes as parameters provided that each class inherits from, at most, one class directly.
Namespaces
  • HLS component functions cannot be a part of a declared namespace. However, you can declare your component function as a global wrapper function. This wrapper function can call a member function of a class or a part of a namespace
Parameters
  • The HLS compiler does not support classes with multiple inheritance used as parameters. You may use classes as parameters if each class inherits from, at most, one class directly.
Recursion
  • The HLS compiler does not support the synthesis of components that use recursion; however, tail recursion is supported.

    If a component has an algorithm that uses recursion, and it is identified for FPGA acceleration, modify the algorithm to use tail recursion, if possible.