3.6.6.3 Pragmas
(Ask a Question)Vitis HLS / Vivado HLS | SmartHLS™ |
---|---|
aggregate, data_pack | See the 3.6.1.21 Struct Variable/Argument Packing pragmas. |
allocation | A global constraint of operation resources can be set via 3.6.2.2.8 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 3.6.1.5 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 3.6.1.7 Replicate Function and 3.6.1.5 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 3.6.1.23 Partition Top-Level Interface and 3.6.1.22 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. |
disaggregate | See the struct_fields option of the 3.6.1.23 Partition Top-Level Interface pragma. |
expression_balance | See 3.6.2.4.2 LATENCY_REDUCTION Tcl settings to control the expression balance optimization. |
function_instantiate | The equivalent optimization can be achieved with the 3.6.1.5 Inline Function pragma or C++ template functions. |
inline | See the 3.6.1.5 Inline Function pragma. |
inline off | See the 3.6.1.6 Noinline Function pragma. |
interface | See Top-Level RTL Interface for details about supported interfaces and corresponding pragmas. |
loop_tripcount | See the 3.6.1.4 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 3.6.1.10 Pipeline Function and 3.6.1.2 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 3.6.1.13 Scalar Argument Interface pragma. |
stream | Streaming interface is implemented via the hls::FIFO Argument. |
top | See the 3.6.1.9 Set Top-Level Function pragma. |
unroll | See the 3.6.1.3 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
- dependence
- disaggregate
- latency
- loop_flatten
- loop_merge
- occurrence
- protocol
- reset
- shared