Intel® High Level Synthesis Compiler Pro Edition: Reference Manual

ID 683349
Date 6/26/2023
Public

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

Document Table of Contents

4.6. Stable Component Parameters

If you do not specify the intended behavior for a parameter, the compiler assumes that the argument corresponding to a parameter changes value between pipelined component invocations.

If the corresponding argument for a parameter does not change while your component executes, you can mark the parameter as stable. The arguments for a stable parameter can still change after all active component invocations have finished (that is, the component datapath is flushed). If an argument changes while there are active component invocations in progress, your component enters an undefined state and behaves unpredictably.

Declare an interface parameter to be stable with the hls_stable_argument attribute.

You can mark the following the interface parameters as stable:
  • Scalar (conduit) parameters
  • Pointer interface parameters

    The address conduit input is stable. The associated Avalon MM Host interface is not affected.

  • Pass-by-reference parameters

    The address conduit input is stable. The associated Avalon MM Host interface is not affected.

  • Avalon® Memory-Mapped (MM) Host interface parameters

    The address conduit input is stable. The associated Avalon MM Host interface is not affected.

  • Avalon® Memory-Mapped (MM) Agent register interface parameters

    The data is stored in the CSR, but not registered in the component data path.

The following interface parameters cannot be marked as stable:
  • Avalon® Memory-Mapped (MM) Agent memory interface parameters
  • Avalon® Streaming interface parameters

You might save some FPGA area in your component design when you declare an interface argument as stable because the data is not registered throughput.

You cannot have two component invocations in flight with different stable arguments between the two component invocations.

Attribute Description
hls_stable_argument A stable parameter is a parameter that does not change while there is live data in the component (that is, the argument does not change between pipelined function invocations).