3.6.6.3 Pragmas
(Ask a Question)Vitis HLS / Vivado HLS | SmartHLS™ |
---|---|
aggregate, data_pack | See the Struct Variable/Argument Packing pragmas. |
allocation | A global constraint of operation resources can be set via set_resource_constraint; constraining the operation resource within a function, a loop or a block of code is not yet available. Functions that are not inlined (automatically by SmartHLS tool or specified via the Inline Function pragma) always have a single RTL module instance in hardware, and it is shared by all callers. Replication of a function instance in hardware can be achieved by the Replicate Function and Inline Function pragmas. In the case of multi-threading, each thread of a function creates an instance of the corresponding RTL module. |
array_partition | See the Partition Top-Level Interface and Partition Memory pragmas. If the variable is globally/locally declared variable, move the pragma to right before the variable declaration. If the variable is a top-level function argument, add the pragma to the beginning of the function definition block. Example: VHLS: If If SmartHLS supports complete memory partitioning in either 1 or all dimensions, while Vitis HLS can apply complete memory partitioning in more than 1 discrete dimensions. To port such case, users may need to reshape the array. Below is an example. VHLS: SHLS:
|
dataflow | Data Flow Parallelism and Multi-threading can be used to implement a task-level (dataflow) pipeline. |
dependence | See the Loop
Dependency pragma. If inside a loop, the pragma should be moved outside the loop. |
disaggregate | See the struct_fields option of the Partition Top-Level Interface pragma. |
expression_balance | See LATENCY_REDUCTION Tcl settings to control the expression balance optimization. |
function_instantiate | The equivalent optimization can be achieved with the Inline Function pragma or C++ template functions. |
inline | See the Inline Function pragma. |
inline off | See the Noinline Function pragma. |
interface | See Top-Level RTL Interface for details about supported interfaces and corresponding pragmas. |
loop_tripcount | See the Bound Loop pragma, and lift it out of the loop. Note that SmartHLS does not capture the average number of loop iterations. Example: VHLS: SHLS: |
pipeline, pipeline II=<II> | See Pipeline Function and Pipeline Loop pragmas. If inside a loop, the pragma should be lifted outside the loop. If inside a function, add the pragma to the beginning of the function definition block. |
pipeline off | Remove since pipelining is not applied by default. |
stable | See the stable option of the Scalar Argument Interface pragma. |
stream | Streaming interface is implemented via the hls::FIFO Argument. |
top | See the Set Top-Level Function pragma. |
unroll | See the Unroll Loop pragma, and lift it outside the loop. |
The SmartHLS tool currently does not support the following Vitis/Vivado HLS pragmas:
- array_map
- array_reshape
- bind_op
- bind_storage
- disaggregate
- latency
- loop_flatten
- loop_merge
- occurrence
- protocol
- reset
- shared