Check the optimization directives as shown in the following table.
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 |
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 . |