When synthesis completes, the Synthesis Summary report for the top-level function opens in the information pane. The specific sections of the Synthesis Summary are detailed below.
General Information
Timing Estimate
Displays a quick estimate of the timing specified by the solution. The estimate includes the Target clock period and the period of Uncertainty. The clock period minus the uncertainty is the Estimated clock period.
Performance & Resource Estimates
The Performance Estimate columns report the timing slack, latency, and initiation interval for the top-level function and sub-blocks the tool instantiated in the top-level. Sub-functions called at this level in the C/C++ source are instances in the generated RTL block. One exception is when the tool in-lined the sub-function into the top-level function using the INLINE pragma or directive. Another exception is if the tool automatically in-inlined the function.
The Slack column displays any timing issues in the implementation.
The two Latency columns display the number of cycles it takes to produce the output, and display latency in time (ns).
The Iteration Latency is the latency of a single iteration for a loop.
The Initiation Interval is the number of clock cycles before you can apply new inputs. In the absence of any PIPELINE directives, the latency is one cycle less than the initiation interval. Vitis reads the next input after writing the final output.
The Trip Count column displays the number of iterations a specific loop makes in the implemented hardware. This reflects any unrolling of the loop in hardware.
The resource estimate columns of the report indicates the estimated resources needed to implement the software function in the RTL code. The report provides estimates of the block RAM, DSP, FFs, and LUTs.
HW Interfaces
The HW Interfaces section of the synthesis report has tables for the different hardware interfaces generated during synthesis. The type of hardware interfaces the tool generates depend on INTERFACE pragmas, directives and the flow target the solution specifies. In the following image, the solution targets the Vitis Kernel flow and generates AXI interfaces.
Pay attention to the following when reviewing the tables.
- Vitis provides separate tables for different interfaces.
- Columns display different properties of the interface. For the M_AXI interface, these include the Data Width and Max Widen Bitwidth columns. These columns indicate whether Automatic Port Width Resizing occurred, and to what extent. In the example above, the port widened to 512 bits from the software specified 16 bits.
- The Latency column displays the latency of the
interface:
- In an
ap_memoryinterface, the column displays the read latency of the RAM resource driving the interface. - For an
m_axiinterface, the column displays the expected latency of the AXI4 interface. The design can initiate a bus request a number of cycles (latency) before expecting the read or write.
- In an
- The Bundle column displays any specified bundle names from the INTERFACE pragma or directive.
- Additional columns display burst, read and write properties of the M_AXI interface. See the INTERFACE pragma or directive.
- The Bit Fields
column displays the bits used by registers in an
s_axiliteinterface.
SW I/O Information
Highlights how function arguments from the C/C++ source are associated with
the port names in the RTL code. See additional details of the software and hardware
ports below. The SW argument expands into multiple HW interfaces. The input argument relates to three HW interfaces, the
m_axi for data, and the s_axi_lite for required control signals.
M_AXI Burst Information
In the M_AXI Burst Information
section, the Burst Summary
table reports the successful burst transfers. You can see a link to the associated
source code. The reported burst length refers to either max_read_burst_length or max_write_burst_length. The length represents the number of data
values read or written during a burst transfer. For example, if the input type is
integer (32 bits), and HLS auto-widens the interface to 512 bits, each burst
transfers 1024 integers. Because the widened interface can carry 16 integers at a
time, the result is 64 beat bursts. The Burst
Missed table reports the reason and link to guidance
messages for burst failures.
Pragma Report
Displays the pragmas in the design: valid, ignored, inferred. This report summarizes issues that can otherwise be found in the log files. You can identify issues with the pragmas in your design to see which ones were not expected. The report lists valid pragmas separately so you can see all pragmas in the design.
Bind Op and Bind Storage Reports
The Bind Op and Bind Storage reports help you understand HLS compiler actions when it maps operations to resources. The Vitis tool maps operations to resources with specific latencies. You can influence this process by using the BIND_OP pragma or directive, and by requesting a particular resource mapping and latency. The Bind Op report displays automatically completed mappings versus those that pragmas enforced. Similarly, the Bind Storage report shows the mappings of arrays to memory resources on the platform like block RAM/LUTRAM/URAM.
The Bind Op report displays the implementation details of the kernel or IP. Details include variables and their HLS pragmas or directives, the defined operation, the implementation that the HLS tool used, and any latency applied. The report is useful for examining the programmable logic implementation details specified by the RTL design.
The Bind Op report highlights important characteristics in your design. Currently, it calls out the number of DSPs the design uses and shows in a hierarchy where these the design uses the DSPs. The table also highlights whether the particular resource allocation completed due to a user-specified pragma: if yes, the Pragma column denotes it. If no entry exists in the Pragma column, it means the tool auto interred the resource. The table also shows the RTL names of the resources allocated for each module in your design.
- The implementation fabric choice that LUTs or DSPs implement
- The latency of the resource
You can right-click on the resource and select the Goto
Source option to see the correlation between resources and source
code lines. The Bind Op
report illustrates global config settings that can also alter the resource
allocation algorithm. In the above example, the implementation choice for a dadd (double precision floating point addition)
operation is fixed to a fulldsp implementation.
Similarly, the latency of a ddiv operation is
fixed to 2.
Similar to the BIND_OP pragma, you can use the BIND_STORAGE pragma to select a particular memory type (such as single port or dual port). You can also select a particular memory implementation (such as BRAM/LUTRAM/URAM/SRL, etc) and a latency value. The Bind Storage report highlights the storage mappings in the design. Currently, the tool calls out the number of Block RAMs and URAMs in the design.
The table highlights whether a user‑specified pragma caused the storage allocation and marks "yes" in the Pragma column. If no entry exists in the Pragma column, this means that the tool auto inferred the storage resource. The report displays the storage type, the implementation choice, the variable name, and latency.
With the information from the report, you can review the storage resource allocation in the design. You can make design choices by altering the eventual storage implementation depending upon availability. Finally, a second table in the Bind Storage report shows you if there are global settings that can alter the storage resource allocation algorithm. See Storage Configuration for details.