Optimization Directives - 2023.1 English - UG1399

Vitis High-Level Synthesis User Guide (UG1399)

Document ID
UG1399
Release Date
2023-07-17
Version
2023.1 English

Check the optimization directives as shown in the following table.

Table 1. Debugging Optimization Directives
Questions Actions to Take
Are you using the DEPENDENCE directive? Remove the DEPENDENCE directives from the design to see if C/RTL co-simulation passes.

If co-simulation passes, it likely indicates that the TRUE or FALSE setting for the DEPENDENCE directive is incorrect as discussed in Verification of DATAFLOW and DEPENDENCE.

Does the design use volatile pointers on the top-level interface? Ensure the DEPTH option is specified on the INTERFACE directive.

When volatile pointers are used on the interface, you must specify the number of reads/writes performed on the port in each transaction or each execution of the C function.

Are you using FIFOs with the DATAFLOW optimization? Check to see if C/RTL co-simulation passes with the standard ping-pong buffers.

Check to see if C/RTL co-simulation passes without specifying the size for the FIFO channels. This ensures that the channel defaults to the size of the array in the C code.

Reduce the size of the FIFO channels until C/RTL co-simulation stalls. Stalling indicates a channel size that is too small. Review your design to determine the optimal size for the FIFOs. You can use the STREAM directive to specify the size of individual FIFOs.

Are you using supported interfaces? Ensure you are using supported interface modes. For details, see Interface Synthesis Requirements.
Are you applying multiple optimization directives to arrays on the interface? Ensure you are using optimizations that are designed to work together. For details, see Unsupported Optimizations for Co-Simulation.
Are you using arrays on the interface that are mapped to streams? To use interface-level streaming (the top-level function of the DUT), use hls::stream.