Intel® High Level Synthesis Compiler Standard Edition: Reference Manual

ID 683310
Date 12/18/2019
Public
Document Table of Contents

10.11. Intel® HLS Compiler Standard Edition Component Macros

Table 28.   Intel® HLS Compiler Standard Edition Component Macros Summary
Feature Description
hls_conduit_argument Implement the argument as an input conduit that is synchronous to the component call (start and busy).
hls_avalon_slave_register_argument Implement the argument as a register that can be read from and written to over an Avalon-MM slave interface.
hls_avalon_slave_memory_argument Implement the argument, in on-chip memory blocks, which can be read from or written to over a dedicated slave interface.
hls_stable_argument A stable argument is an argument that does not change while there is live data in the component (that is, between pipelined function invocations).

hls_conduit_argument Component Macro

Syntax
hls_conduit_argument
Description

This is the default interface for scalar arguments.

The compiler implements the argument as an input conduit that is synchronous to the component's call (start and busy).

Example
component void foo( 
  hls_conduit_argument int b)

hls_avalon_slave_register_argument Component Macro

Syntax
hls_avalon_slave_register_argument
Description
The compiler implements the argument as a register that can be read from and written to over an Avalon-MM slave interface. The argument will be read into the component's pipeline, similar to the conduit implementation. The implementation is synchronous to the start and busy interface.

Changes to the value of this argument made by the component data path will not be reflected on this register.

To learn more, review the tutorial: <quartus_installdir>/hls/examples/tutorials/interfaces/mm_slaves.

Example
component void foo( 
  hls_avalon_slave_register_argument int b)

hls_avalon_slave_memory_argument Component Macro

Syntax
hls_avalon_slave_memory_argument(N)
Description
The compiler implements the argument, where N specifies the size of the memory in bytes, in on-chip memory blocks, which can be read from or written to over a dedicated slave interface. The generated memory has the same architectural optimizations as all other internal component memories (such as banking or coalescing).

If the compiler performs static coalescing optimizations, the slave interface data width is the coalesced width. This attribute applies only to a pointer argument.

To learn more, review the tutorial: <quartus_installdir>/hls/examples/tutorials/interfaces/mm_slaves.

Example
component void foo(
   hls_avalon_slave_memory_argument(128*sizeof(int)) int *a)

hls_stable_argument Component Macro

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

Changing a stable argument during component execution results in undefined behavior; each use of the stable argument might be the old value or the new value, but with no guarantee of consistency. The same variable in the same invocation can appear with multiple values.

Using stable arguments, where appropriate, might save a significant number of registers in a design.

Stable arguments can be used with conduits, mm_master interfaces, and slave_registers.

To learn more, review the tutorial: <quartus_installdir>/hls/examples/tutorials/interfaces/stable_arguments.

Example
component int dut(
   hls_stable_argument int a,
   hls_stable_argument int b) {
 return a * b;}