Debugging Applications in the SDAccel Environment
The SDAccel™ Environment provides application level debug features which allow the host code, the kernel code, and the interactions between them to be debugged efficiently. The topics presented here are addressed in greater detail in the SDAccel Environment Debugging Guide (UG1281). Refer to that guide for more information.
- Perform Software Emulation.
Verify both the host and kernel code are functionally correct by running Software Emulation. It is recommended to iterate in Software Emulation, which takes little compile time and executes quickly, until the application is functioning correctly in all modes of operation.
- Perform Hardware Emulation.
Verify the host code and the kernel hardware implementation is correct by running Hardware Emulation on a data set. Hardware Emulation performs detailed verification using an accurate model of the hardware. Execution time for hardware emulation takes more time than software emulation.
TIP: Xilinx recommends that you use small data sets for debug and validation.It is also in this stage that you can optionally modify the kernel code to improve performance. Refer to SDAccel Environment Profiling and Optimization Guide for more information. Iterate in Hardware Emulation until the functionality is correct and the estimated kernel performance is sufficient. - Perform real system execution. At this stage, the final system image (xclbin) is generated and executed on the actual hardware. Now, the kernels are confirmed to be executing correctly on the actual FPGA hardware. It is expected that the focus shifts from debugging to actual host code performance tuning.
This three-tiered approach allows debugging at different levels of abstraction. In addition, the SDAccel Environment provides application debug features, which allow debugging of the interaction of the compiled host and kernel code, no matter what level of abstraction.
All execution models are supported through an integrated GUI flow as well as through a batch flow using basic compile time and runtime setup options. Both of these debug flows are presented in more detail in the following sections; however, before starting on the flows, the most rudimentary approach to debugging is briefly described.